+/** Find a file.
+
+ Seach in the current dir (DUH! FIXME?), in the construction-arg
+ (what's that?, and in any other appended directory, in this order.
+
+ Search for NAME, or name without extension, or name with any of
+ EXTENSIONS, in that order.
+
+ @return
+ The file name if found, or empty string if not found. */
+String
+File_path::find (String name, char const *extensions[])
+{
+ File_name file_name (name);
+ if (name.is_empty () || name == "-")
+ file_name.base_ = "-";
+ else
+ {
+ String orig_ext = file_name.ext_;
+ for (int i = 0; extensions[i]; i++)
+ {
+ file_name.ext_ = orig_ext;
+ if (*extensions[i] && !file_name.ext_.is_empty ())
+ file_name.ext_ += ".";
+ file_name.ext_ += extensions[i];
+ if (!find (file_name.to_string ()).is_empty ())
+ break;
+ }
+ /* Reshuffle extension */
+ file_name = File_name (file_name.to_string ());
+ }
+ return file_name.to_string ();
+}
+
+/** Append a directory, return false if failed. */
+bool
+File_path::try_append (String s)