*/
#include <stdio.h>
#include "path.hh"
+#include "flower-debug.hh"
#ifndef PATHSEP
#define PATHSEP '/'
@return 4 components of the path. They can be empty
*/
void
-split_path(String path,
+split_path (String path,
String &drive, String &dirs, String &filebase, String &extension)
{
- // peel off components, one by one.
- int di = path.pos(':');
- if (di)
+ // peel off components, one by one.
+ int di = path.index_i (':');
+ if (di >= 0)
{
- drive = path.left(di);
- path = path.right(path.len() - di);
- }
- else
+ drive = path.left_str (di + 1);
+ path = path.right_str (path.len() - di -1);
+ }
+ else
drive = "";
-
- di = path.lastPos(PATHSEP);
- if (di)
+
+ di = path.index_last_i (PATHSEP);
+ if (di >=0)
{
- dirs = path.left(di);
- path = path.right(path.len()-di);
- }
- else
+ dirs = path.left_str (di + 1);
+ path = path.right_str (path.len()-di -1);
+ }
+ else
dirs = "";
-
- di = path.lastPos('.');
- if (di)
+
+ di = path.index_last_i ('.');
+ if (di >= 0)
{
- di --; // don't forget '.'
- filebase = path.left(di);
- extension =path.right(path.len()-di);
- }
- else
+ filebase = path.left_str (di);
+ extension =path.right_str (path.len()-di);
+ }
+ else
{
extension = "";
filebase = path;
- }
+ }
}
-File_path::File_path(String pref)
-{
- add(".");
- add(pref);
-}
-
-
/** find a file.
It will search in the current dir, in the construction-arg, and
in any other added path, in this order.
*/
String
-File_path::find(String nm)
+File_path::find (String nm) const
+
{
- for (int i=0; i < size(); i++) {
- String path = (*this)[i];
- path+= "/"+nm;
+ fdebug << "looking for " << nm << ": ";
+ if (!nm.length_i() || (nm == "-") )
+ return nm;
+ for (int i=0; i < size(); i++)
+ {
+ String path = elem(i);
+ if (path.length_i() )
+ path += "/";
+
+ path += nm;
- FILE *f = fopen(path, "r"); // ugh!
- if (f) {
- fclose(f);
+ fdebug << path << "? ";
+ FILE *f = fopen (path.ch_C(), "r"); // ugh!
+ if (f)
+ {
+ fdebug << "found\n";
+ fclose (f);
return path;
- }
+ }
}
- return "";
+ fdebug << "\n";
+ return "";
}