00001 #ifndef gDIR_X_H
00002 #define gDIR_X_H
00003
00004 #include <dirent.h>
00005 #include "glist.h"
00006 #include "gfile.h"
00007 #include "gfilestat.h"
00008
00009 enum eFileSystemName {
00010 e_FSysNoName,
00011 e_FSysFile,
00012 e_FSysDir
00013 };
00014
00015 class gFileSysName : public gString {
00016 public:
00017 virtual ~gFileSysName () ;
00018
00019
00020 virtual bool IsOk () {
00021 return fsysName!=e_FSysNoName;
00022 }
00023 virtual bool IsStrOk () ;
00024 virtual bool IsDirectory () {
00025 return isDirectory;
00026 }
00027 virtual char* Str () ;
00028 virtual char* Name () {
00029 return Str();
00030 }
00031 virtual bool HasStat () {
00032 return myStat!=nil;
00033 }
00034 virtual gFileStat& GetStat () ;
00035 virtual gFileStat* GetStatPtr () {
00036 return myStat;
00037 }
00038
00039
00040 eFileSystemName fsysName;
00041
00042 protected:
00043 gFileSysName (char* s,
00044 eFileSystemName aFSysName,
00045 bool isADirectory) ;
00046
00047 gFileSysName (char* s,
00048 eFileSystemName aFSysName,
00049 gFileStat& aStat) ;
00050
00051 bool isDirectory;
00052 gFileStat* myStat;
00053
00054 private:
00055
00056 gFileSysName (gFileSysName& ) ;
00057 gFileSysName& operator= (gFileSysName& ) ;
00058 };
00059
00060 class gFileName : public gFileSysName {
00061 public:
00062 gFileName () ;
00063 gFileName (char* s) ;
00064 gFileName (gString& s) ;
00065 gFileName (gString& s, gFileStat& aStat) ;
00066 virtual ~gFileName () ;
00067
00068 private:
00069
00070 gFileName (gFileName& ) ;
00071 gFileName& operator= (gFileName& ) ;
00072 };
00073
00074 class gDirName : public gFileSysName {
00075 public:
00076 gDirName () ;
00077 gDirName (char* s) ;
00078 gDirName (gString& s) ;
00079 gDirName (gString& s, gFileStat& aStat) ;
00080 virtual ~gDirName () ;
00081
00082
00083 virtual char* Str () ;
00084 virtual char* Name () ;
00085
00086
00087 virtual void SetDirName (char* s) ;
00088
00089
00090 virtual t_uchar* ToString (t_uchar* uBuf) ;
00091
00092 protected:
00093 gString dirStr;
00094
00095
00096 void thisBuildDirStr (char* s) ;
00097
00098 private:
00099
00100 gDirName (gDirName& ) ;
00101 gDirName& operator= (gDirName& ) ;
00102 };
00103
00104 class gDirStream : public gFile {
00105 public:
00106 gDirStream (char* dName=nil) ;
00107 virtual ~gDirStream () ;
00108
00109
00110 DIR* pdir;
00111 gString dirName;
00112 gFileStat dStat;
00113
00114
00115 virtual bool IsOpened () ;
00116 virtual char* Name () {
00117 return dirName.Str();
00118 }
00119
00120 protected:
00121 bool isDirOpened;
00122
00123 int doOpenDir (char* dName) ;
00124 int doCloseDir () ;
00125
00126 private:
00127
00128 gDirStream (gDirStream& ) ;
00129 gDirStream& operator= (gDirStream& ) ;
00130 };
00131
00132 class gDirGeneric : public gList {
00133 public:
00134 virtual ~gDirGeneric () ;
00135
00136
00137 int lastOpError;
00138 gDirName sDirName;
00139 static t_uchar slashChr;
00140
00141
00142 virtual bool IsOk () {
00143 return lastOpError==0;
00144 }
00145 virtual bool IsNameOk (char* s) ;
00146 virtual bool AllNamesOk (int depthLevel) ;
00147
00148 virtual gFileSysName* GetName (unsigned idx) ;
00149
00150
00151
00152
00153
00154 virtual t_uchar* ToString (t_uchar* uBuf) ;
00155 virtual bool SaveGuts (FILE* f) ;
00156 virtual bool RestoreGuts (FILE* f) ;
00157
00158 protected:
00159 gDirGeneric (eStorage kind) ;
00160
00161 gString slashStr;
00162
00163
00164 bool thisNameOk (char* s,
00165 unsigned& posBad) ;
00166
00167 bool thisAllNamesOk (unsigned depthLevel,
00168 unsigned& posBad,
00169 int& notOkDepth) ;
00170
00171 private:
00172
00173 gDirGeneric (gDirGeneric& ) ;
00174 gDirGeneric& operator= (gDirGeneric& ) ;
00175 };
00176
00177 class gDir : public gDirGeneric {
00178 public:
00179 gDir (char* dName=nil) ;
00180 gDir (gString& dName) ;
00181 virtual ~gDir () ;
00182
00183
00184 gDirStream dirStream;
00185 gList errUnstatL;
00186
00187
00188 virtual gFileStat* GetStat (unsigned idx) ;
00189 virtual bool GetNameDir (unsigned idx, gString& resName) ;
00190 virtual bool GetFullNameDir (unsigned idx, gString& resName, gString& resFullName) ;
00191
00192
00193 virtual void AddDir (char* s) ;
00194 virtual void AddFile (char* s) ;
00195
00196 protected:
00197 int dirCount;
00198
00199
00200 int thisScanDir () ;
00201 int thisAddStatName (eFileSystemName aFSysName, char* s, gFileStat& aStat) ;
00202 int thisAddSystemName (gFileSysName* aPtr) ;
00203
00204 private:
00205
00206 gDir (gDir& ) ;
00207 gDir& operator= (gDir& ) ;
00208 };
00209
00210 #endif //gDIR_X_H
00211