Doxygen Source Code Documentation
file.c File Reference
#include "tk.h"#include "all.h"#include <sys/file.h>#include <sys/stat.h>#include <sys/param.h>#include <time.h>#include <string.h>#include <dirent.h>#include <strings.h>Go to the source code of this file.
Defines | |
| #define | MAX_FILES 1000 |
| #define | MAX_NAME_LEN 256 |
| #define | MAX_STRING_LEN MAX_NAME_LEN |
| #define | TRUE 1 |
| #define | FALSE 0 |
Typedefs | |
| typedef int | boolean |
Functions | |
| void | ResetPath (void) |
| int | ListDirectory (ClientData nulldata, Tcl_Interp *interp, int argc, char **argv) |
| int | ChangeDirectory (ClientData nulldata, Tcl_Interp *interp, int argc, char **argv) |
| void | SortFiles (int numStrings, char strings[MAX_FILES][MAX_NAME_LEN], boolean *dirList, int permute[]) |
| void | UpdatePath (Tcl_Interp *interp, char *directory) |
| boolean | MatchesGlob (char *string, char *glob) |
| int | SetBrowseGlob (ClientData nulldata, Tcl_Interp *interp, int argc, char **argv) |
Variables | |
| char | currentPath [MAXPATHLEN] |
| char | globString [1024] |
| DIR * | dfd |
Define Documentation
|
|
Definition at line 63 of file file.c. Referenced by ListDirectory(), and MatchesGlob(). |
|
|
Definition at line 57 of file file.c. Referenced by ListDirectory(), and SortFiles(). |
|
|
Definition at line 58 of file file.c. Referenced by ListDirectory(), and SortFiles(). |
|
|
|
|
|
Definition at line 62 of file file.c. Referenced by ListDirectory(), and MatchesGlob(). |
Typedef Documentation
|
|
|
Function Documentation
|
||||||||||||||||||||
|
Definition at line 135 of file file.c. References argc, currentPath, dfd, and UpdatePath().
00137 {
00138 char *directory = argv[1];
00139
00140 UpdatePath(interp, directory);
00141
00142 fprintf(stdout, "Opening directory: '%s'\n", currentPath);
00143
00144 dfd = opendir(currentPath);
00145 if ( dfd == NULL )
00146 {
00147 fprintf(stderr, "can't open '%s'\n", currentPath);
00148 return TCL_OK; /* shouldn't, really */
00149 }
00150
00151 return TCL_OK;
00152 }
|
|
||||||||||||||||||||
|
Definition at line 155 of file file.c. References argc, currentPath, dfd, FALSE, fileName, globString, MatchesGlob(), MAX_FILES, MAX_NAME_LEN, MAXPATHLEN, S_ISDIR, SortFiles(), stbuf, and TRUE.
00157 {
00158 struct dirent *dp;
00159 struct stat stbuf;
00160 char command[256];
00161 char fileName[MAX_FILES][MAX_NAME_LEN];
00162 boolean dirList[MAX_FILES];
00163 int permute[MAX_FILES];
00164 int fileCount = 0;
00165 register int index;
00166 char fullName[MAXPATHLEN];
00167 char *restPtr;
00168
00169 sprintf(command, "ShowCurrentDirectory %s", currentPath);
00170 Tcl_Eval(interp, command, 0, (char **) NULL);
00171
00172 if ( dfd == NULL )
00173 {
00174 fprintf(stderr, "TRIED TO LIST NULL DIRECTORY\n");
00175
00176 return TCL_OK;
00177 }
00178
00179 /* check if root directory */
00180 if ( strlen(currentPath) != 1 )
00181 {
00182 sprintf(fileName[fileCount], "../");
00183 dirList[fileCount] = TRUE;
00184 fileCount++;
00185 }
00186
00187 strcpy(fullName, currentPath);
00188 restPtr = &fullName[strlen(fullName)];
00189
00190 while ( (dp = readdir(dfd)) != NULL )
00191 {
00192 strcpy(restPtr, dp->d_name);
00193 stat(fullName, &stbuf);
00194
00195 if ( dp->d_name[0] != '.' )
00196 {
00197 if ( S_ISDIR(stbuf.st_mode) )
00198 {
00199 sprintf(fileName[fileCount], "%s/", dp->d_name);
00200 dirList[fileCount] = TRUE;
00201 fileCount++;
00202 }
00203 else
00204 {
00205 if ( MatchesGlob(dp->d_name, globString) )
00206 {
00207 strcpy(fileName[fileCount], dp->d_name);
00208 dirList[fileCount] = FALSE;
00209 fileCount++;
00210 }
00211 }
00212 }
00213 }
00214
00215 SortFiles(fileCount, fileName, dirList, permute);
00216
00217 for ( index = 0; index < fileCount; index++ )
00218 {
00219 sprintf(command, "AddBrowseFile %s", fileName[permute[index]]);
00220 Tcl_Eval(interp, command, 0, (char **) NULL);
00221 }
00222
00223 closedir(dfd);
00224
00225 return TCL_OK;
00226 }
|
|
||||||||||||
|
Definition at line 306 of file file.c. Referenced by ListDirectory().
00307 {
00308 char *stringRight, *globRight;
00309
00310 while ( (*glob != '\0') && (*glob != '*') ) /* match left side */
00311 {
00312 if ( (*string == '\0') || (*string != *glob) )
00313 return FALSE;
00314 string++;
00315 glob++;
00316 }
00317
00318 if ( *glob == '\0' ) /* no star */
00319 return TRUE;
00320
00321 /* now match right side */
00322 stringRight = &string[strlen(string)-1];
00323 globRight = &glob[strlen(glob)-1];
00324
00325 while ( *globRight != '*' )
00326 {
00327 if ( (stringRight < string) || (*stringRight != *globRight) )
00328 return FALSE;
00329 globRight--;
00330 stringRight--;
00331 }
00332
00333 return TRUE;
00334 }
|
|
|
Definition at line 84 of file file.c. References currentPath, and dfd.
00085 {
00086 if ( getwd(currentPath) == 0 )
00087 {
00088 fprintf(stderr, "Error getting pathname!!!\n");
00089 exit(1);
00090 }
00091
00092 strcpy(¤tPath[strlen(currentPath)], "/");
00093
00094 dfd = opendir(currentPath);
00095 if ( dfd == NULL )
00096 {
00097 fprintf(stderr, "can't open '%s'\n", currentPath);
00098 exit(1);
00099 }
00100 }
|
|
||||||||||||||||||||
|
Definition at line 288 of file file.c. References argc, and globString.
00290 {
00291 if (argc == 2 )
00292 {
00293 strcpy(globString, argv[1]);
00294
00295 fprintf(stdout, "GLOB: %s\n", globString);
00296
00297 return TCL_OK;
00298 }
00299
00300 Tcl_AppendResult (interp,
00301 "wrong args: should be \"", argv[0]," string\"", (char *) NULL);
00302 return TCL_ERROR;
00303 }
|
|
||||||||||||||||||||
|
Definition at line 229 of file file.c. References i, MAX_FILES, and MAX_NAME_LEN. Referenced by ListDirectory().
00231 {
00232 register int i, j;
00233 int temp;
00234 int numDirs;
00235 int ptr;
00236
00237 for ( i = 0; i < numStrings; i++ )
00238 permute[i] = i;
00239
00240 /* put all directories at front */
00241 numDirs = 0;
00242 ptr = numStrings-1;
00243 while ( numDirs != ptr )
00244 {
00245 /* go past dirs */
00246 while ( (numDirs < ptr) && (dirList[permute[numDirs]]) )
00247 numDirs++;
00248
00249 /* go past non-dirs */
00250 while ( (numDirs < ptr) && (! dirList[permute[ptr]]) )
00251 ptr--;
00252
00253 if ( numDirs != ptr )
00254 {
00255 temp = permute[numDirs];
00256 permute[numDirs] = ptr;
00257 permute[ptr] = temp;
00258 }
00259 }
00260
00261 if ( dirList[permute[numDirs]] )
00262 numDirs++;
00263
00264 for ( i = 0; i < numDirs; i++ )
00265 for ( j = i+1; j < numDirs; j++ )
00266 {
00267 if ( strcmp(&strings[permute[j]][0], &strings[permute[i]][0]) < 0 )
00268 {
00269 temp = permute[j];
00270 permute[j] = permute[i];
00271 permute[i] = temp;
00272 }
00273 }
00274
00275 for ( i = numDirs; i < numStrings; i++ )
00276 for ( j = i+1; j < numStrings; j++ )
00277 {
00278 if ( strcmp(&strings[permute[j]][0], &strings[permute[i]][0]) < 0 )
00279 {
00280 temp = permute[j];
00281 permute[j] = permute[i];
00282 permute[i] = temp;
00283 }
00284 }
00285 }
|
|
||||||||||||
|
Definition at line 103 of file file.c. References currentPath. Referenced by ChangeDirectory().
00104 {
00105 int length;
00106 char *charPtr;
00107
00108 length = strlen(currentPath);
00109
00110 if ( strcmp(directory, "./") == 0 )
00111 return /* nothing */ ;
00112 else if ( strcmp(directory, "../") == 0 )
00113 {
00114 /* delete backwards up to '/' */
00115
00116 if ( length < 2 )
00117 {
00118 fprintf(stderr, "Error: backing up from root directory!!!\n");
00119 exit(1);
00120 }
00121
00122 charPtr = ¤tPath[length-2];
00123 while ( (charPtr != currentPath) && (*charPtr != '/') )
00124 charPtr--;
00125 charPtr++; /* leave the '/' */
00126 *charPtr = '\0';
00127 }
00128 else
00129 {
00130 strcpy(¤tPath[length], directory);
00131 }
00132 }
|
Variable Documentation
|
|
Definition at line 65 of file file.c. Referenced by ChangeDirectory(), ListDirectory(), ResetPath(), and UpdatePath(). |
|
|
Definition at line 69 of file file.c. Referenced by ChangeDirectory(), ListDirectory(), and ResetPath(). |
|
|
Definition at line 67 of file file.c. Referenced by ListDirectory(), and SetBrowseGlob(). |