home *** CD-ROM | disk | FTP | other *** search
- /* ------------------------------------------------------ */
- /* DIRMAN.C */
- /* (c) 1990 Olaf Stoyke & TOOLBOX */
- /* ------------------------------------------------------ */
- #include "dirman.h"
-
- /* Hier startet der nicht-variable Teil von DIRMAN: */
-
- char dirmem[STACKMAX][MAXDIR]; /* Verzeichnisstapel */
- char filename[MAXDIR] = STDNAME;
- int maxdir = 0;
-
- void load_data(void) {
- int i;
- FILE *source;
- /* Datei lesen und CRLF's entfernen */
-
- if ((source = fopen(filename, "r")) != NULL)
- while (fgets(dirmem[maxdir], MAXDIR, source) != NULL) {
- for (i = 0; dirmem[maxdir][i] != '\n'; i++);
- dirmem[maxdir++][i] = '\0';
- }
- --maxdir;
- fclose(source);
- }
-
- void create_file(FILE **fp) {
- /* Datei zum Schreiben öffnen */
-
- if ((*fp = fopen(filename, "w")) == NULL) {
- printf(NOCREAT, filename);
- exit(1);
- }
- }
-
- int optcode(char optchar) {
- char mask[7] = "sSlLpP";
- int i;
- /* Umsetzen der Optionszeichen in einen internen Code */
-
- for (i = 0; (i < 6) && (mask[i] != optchar); i++);
- i /= 2;
- if (i == 3) return 0; /* Option nicht gültig */
- else return i + 1;
- }
-
- void show_num(void) {
-
- printf(NENTRY, maxdir + 1, filename);
- /* Anzahl der Namen ausgeben */
- }
-
- void save_dir(void) {
- int i, handle;
- char curdir[MAXDIR];
- FILE *dest;
-
- create_file(&dest); /* Datei erzeugen */
- if (maxdir == STACKMAX - 1) {
- /* Wenn bereits STACKMAX Einträge */
- printf(OVERFLOW);
- /* existieren, muß der letzte dran */
- --maxdir; /* glauben ... */
- }
- strcpy(curdir, "A:\\"); /* Pfadangabe für "chdir" */
- curdir[0] += getdisk(); /* incl. Laufwerksangabe */
- if (getcurdir(0, &curdir[3]) == -1) {
- printf(DIRERR);
- exit(1);
- }
- fprintf(dest, "%s", curdir);
- /* aktuelles Verzeichnis schreiben */
- printf(SAVEMSG, curdir, filename);
- for (i = 0; i <= maxdir; i++)
- /* alten Stack schreiben ... */
- fprintf(dest, "\n%s", dirmem[i]);
- fclose(dest);
- }
-
- void peek_dir(void) {
-
- if ((maxdir == -1) || (chdir(dirmem[0]) == -1))
- printf(DIRERR);
- else {
- setdisk(dirmem[0][0] - 'A');
- /* Auch das Laufwerk wechseln */
- printf(LOADMSG, dirmem[0]);
- }
- }
-
- void load_dir(void) {
- int i, handle;
- FILE *dest;
-
- create_file(&dest);
- for (i = 1; i <= maxdir; i++)
- /* Nur ersten Namen nicht sichern */
- fprintf(dest, ((i < maxdir) ? "%s\n" : "%s"), dirmem[i]);
- fclose(dest);
- peek_dir();
- }
-
- main(int argc, char *argv[]) {
- int i, option = OINIT;
-
- printf(HEAD); /* Muß sein ! */
- if (argc > 3) { /* Darf nicht sein ! */
- printf(PARAMERR);
- exit(1);
- }
- for (i = 1; i < argc; i++)
- if (argv[i][0] == '/') /* Optionenzeichen gelesen ? */
- option = optcode(argv[i][1]);
- else
- strcpy(filename, argv[i]); /* ... sonst Dateiname ! */
- load_data(); /* Stackdatei lesen */
- switch (option) { /* Optionen verarbeiten */
- case OINIT:
- show_num();
- break;
- case OSAVE:
- save_dir();
- break;
- case OLOAD:
- load_dir();
- break;
- case OPEEK:
- peek_dir();
- break;
- }
- }
- /* ------------------------------------------------------ */
- /* Ende von DIRMAN.C */