//======================================================================== // // gfile.h // // Miscellaneous file and directory name manipulation. // // Copyright 1996 Derek B. Noonburg // //======================================================================== #ifndef GFILE_H #define GFILE_H #include #include #ifdef WIN32 # include #else # include # include # ifdef VMS # include "vms_dirent.h" # elif HAVE_DIRENT_H # include # define NAMLEN(dirent) strlen((dirent)->d_name) # else # define dirent direct # define NAMLEN(dirent) (dirent)->d_namlen # if HAVE_SYS_NDIR_H # include # endif # if HAVE_SYS_DIR_H # include # endif # if HAVE_NDIR_H # include # endif # endif #endif #include "gtypes.h" class GString; //------------------------------------------------------------------------ // Get home directory path. extern GString *getHomeDir(); // Get current directory. extern GString *getCurrentDir(); // Append a file name to a path string. may be an empty // string, denoting the current directory). Returns . extern GString *appendToPath(GString *path, char *fileName); // Grab the path from the front of the file name. If there is no // directory component in , returns an empty string. extern GString *grabPath(char *fileName); // Is this an absolute path or file name? extern GBool isAbsolutePath(char *path); // Make this path absolute by prepending current directory (if path is // relative) or prepending user's directory (if path starts with '~'). GString *makePathAbsolute(GString *path); //------------------------------------------------------------------------ // GDir and GDirEntry //------------------------------------------------------------------------ class GDirEntry { public: GDirEntry(char *dirPath, char *name1, GBool doStat); ~GDirEntry(); GString *getName() { return name; } GBool isDir() { return dir; } private: GString *name; // dir/file name GBool dir; // is it a directory? }; class GDir { public: GDir(char *name, GBool doStat1 = gTrue); ~GDir(); GDirEntry *getNextEntry(); void rewind(); private: GString *path; // directory path GBool doStat; // call stat() for each entry? #ifdef VMS GBool needParent; // need to return an entry for [-] #endif #ifdef WIN32 WIN32_FIND_DATA ffd; HANDLE hnd; #else DIR *dir; // the DIR structure from opendir() #endif }; #endif