home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / extra18 / makekey / makekey.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-01-20  |  10.0 KB  |  263 lines

  1. /* ------------------------------------------------- */
  2. /*                   MAKEKEY.C                       */
  3. /*  MakeKey erstellt aus den Werten der im aktuellen */
  4. /*  Verzeichnis vorhandenen Dateien eine Schlüssel-  */
  5. /*  datei. In diese Schlüsseldatei werden Name,      */
  6. /*  Extension, Größe, Datum und Uhrzeit im           */
  7. /*  ASCII-Format eingetragen, damit die Schlüssel-   */
  8. /*  datei bei Bedarf auch mit einem Editor be-       */
  9. /*  arbeitet werden kann.                            */
  10. /* ------------------------------------------------- */
  11. /*  Parameter                                        */
  12. /*   Eingabe : argc    : Anzahl der übergebenen      */
  13. /*                       Parameter                   */
  14. /*             *argv[] : Zeiger auf die übergebenen  */
  15. /*                       Parameter                   */
  16. /*   Ausgabe : KEINE                                 */
  17. /* ------------------------------------------------- */
  18. /*        (c) 1991 Dirk Alpers & DMV-Verlag          */
  19. /* ------------------------------------------------- */
  20.  
  21. #include "def.h"
  22.  
  23. /* --- Prototypen ---------------------------------- */
  24. void Parameter_auswerten(int argc, char *argv[],
  25.                          char *dest );
  26. void Anleitung_ausgeben(void);
  27. void fillfile(char *pfad);
  28.  
  29. /* --- Globale Variablen --------------------------- */
  30. FILE  *fp;
  31.                    /* Filepointer auf Schlüsseldatei */
  32.  
  33. int   GLOBAL = FALSE;
  34.        /* auch Unterverzeichnisse bearbeiten         */
  35. int   PROMPT = FALSE;
  36.        /* nachfragen, welche Dateien aufgenommen     */
  37.        /* werden sollen                              */
  38. int   CHANGE = FALSE;
  39.        /* Größe und Uhrzeit der Datei dürfen sich    */
  40.        /* ändern                                     */
  41.  
  42. void main(int argc, char *argv[])
  43. {
  44.   char pfad[MAXPATH],
  45.             /* Aktueller Pfad des Quelllaufwerks     */
  46.   dest[MAXPATH];
  47.             /* Vollqualifizierter Schlüsseldateiname */
  48.  
  49.   printf("\nMAKEKEY 1.0  (C) 1990 Alpers/Dietl");
  50.   Parameter_auswerten(argc, argv, dest);
  51.              /* Auswertung der übergebenen Parameter */
  52.  
  53.   fp = fopen(dest, "w"); /* Schlüsseldatei erstellen */
  54.   if (fp != NULL) {
  55.     getcwd(pfad, MAXPATH);
  56.      /* DOS: liefert das momentan gesetzte Directory */
  57.     printf("\nDir: %s", pfad);
  58.      /*      als vollständigen Suchweg zurück        */
  59.     errno = 0;
  60.      /* DOS: Globale Variable für Fehler bei         */
  61.      /*      DOS-Aufrufen                            */
  62.     fillfile(pfad);     /* Füllen der Schlüsseldatei */
  63.     fclose(fp);         /* Schlüsseldatei schließen  */
  64.    } else
  65.      printf("\nSchlüsseldatei kann nicht erstellt " +
  66.             "werden\n");
  67.    printf("\n");
  68. } /* main */
  69.  
  70. /* ------------------------------------------------- */
  71. /*  Modulname : fillfile                             */
  72. /*  Aufgabe   : Füllen der Schlüsseldatei mit vor-   */
  73. /*              gefundenen und gegebenenfalls aus-   */
  74. /*              gewählten Dateinamen und ihren       */
  75. /*              Attributen                           */
  76. /* ------------------------------------------------- */
  77. /*  Parameter                                        */
  78. /*   Eingabe  : Nächster zu durchsuchender Pfad      */
  79. /*   Ausgabe  : KEINE                                */
  80. /* ------------------------------------------------- */
  81. void fillfile(char *pfad)
  82. {
  83.    char         auspfad[MAXPATH+1],
  84.              /* Pfad für die Ausgabe in Datei        */
  85.                 neuerpfad[MAXPATH],
  86.              /* Geänderter Pfadname für Rekursion    */
  87.                 filedes[43],
  88.              /* File-Descriptiom                     */
  89.                 antwort1 = 'Y',
  90.              /* Antwort auf Frage: "INCLUDE (Y/N)?   */
  91.                 antwort2;
  92.              /* Antwort auf Frage: "CHANGE (Y/N)?    */
  93.    struct ffblk datei;
  94.              /* DOS: FileControlBlock                */
  95.  
  96.    strcpy(auspfad,"*");  /* "*" in auspfad kopieren  */
  97.    strcat(auspfad,pfad); /* pfad an auspfad anhängen */
  98.    fprintf(fp,"%s\n",auspfad);
  99.           /* Verzeichnis in Schlüsseldatei speichern */
  100.    strcpy(neuerpfad,pfad);
  101.           /* pfad nach neuerpfad kopieren            */
  102.    if (neuerpfad[strlen(neuerpfad)-1] != '\\')
  103.         strcat(neuerpfad,"\\*.*");
  104.                      /* "\*.*" an neuerpfad anhängen */
  105.    else strcat(neuerpfad,"*.*");
  106.                      /*  "*.*" an neuerpfad anhängen */
  107.  
  108.    findfirst(neuerpfad,&datei,0x27);
  109.       /* DOS: ersten Eintrag im Directory suchen     */
  110.    while (! errno) {
  111.       /*      setzt errno auf 0 bei OK, sonst auf -1 */
  112.       mkstring(filedes,date);
  113.    /* Filenamen und Attribute in String konvertieren */
  114.    /* TURBOC: Warning: Structure passed by           */
  115.    /*                  value ist OK                  */
  116.       if (PROMPT || CHANGE)
  117.         printf("\n%s",filedes);
  118.  
  119.       if (PROMPT)
  120.               /* Nachfragen ob Eintrag erfolgen soll */
  121.       {
  122.          printf("  INCLUDE (Y/N)? ");
  123.          antwort1 = toupper(getche());
  124.       }
  125.  
  126.       if ((!PROMPT || (antwort1 == 'Y')) && CHANGE)
  127.                /* Nachfragen ob geändert werden darf */
  128.       {
  129.          printf("  CHANGE (Y/N)? ");
  130.          antwort2 = toupper(getche());
  131.       }
  132.  
  133.       if ((antwort1 == 'Y') || (!PROMPT))
  134.       {
  135.          if ((antwort2 == 'Y') && (CHANGE))
  136.                  /* Änderungen erlaubt (J/N)?        */
  137.             strcat(filedes,"_C");
  138.                  /* Änderungszeichen anhängen        */
  139.          else strcat(filedes,"__");
  140.                  /* Leerzeichen anhängen             */
  141.          fprintf(fp,"%s\n",filedes);
  142.                  /* File in Schlüsseldatei speichern */
  143.       }
  144.  
  145.       findnext(&datei);
  146.            /* DOS: Nächsten Directory-Eintrag suchen */
  147.    } /* while */
  148.    errno = 0;                                 /* DOS */
  149.  
  150.    if (GLOBAL)
  151.    {
  152.       strcpy(neuerpfad, pfad);  /* neuerpfad = pfad */
  153.       if (neuerpfad[strlen(neuerpfad)-1] != '\\')
  154.            strcat(neuerpfad,"\\*.*");
  155.       else strcat(neuerpfad,"*.*");
  156.  
  157.       findfirst(neuerpfad, &datei, FA_DIREC);
  158.                          /* Erstes Directory suchen */
  159.       while (!errno)
  160.                     /* Solange Directories gefunden */
  161.       { if ((datei.ff_attrib & FA_DIREC) &&
  162.             (datei.ff_name[0] != '.'))
  163.         {
  164.           strcpy(neuerpfad, pfad);
  165.                                 /* Neuerpfad = pfad */
  166.           if (neuerpfad[strlen(neuerpfad)-1] != '\\')
  167.             strcat(neuerpfad,"\\");
  168.                                     /* "\" anhängen */
  169.             strcat(neuerpfad, datei.ff_name);
  170.                          /* Directorynamen anhängen */
  171.             printf("\nDir: %s", neuerpfad);
  172.  
  173.             fillfile(neuerpfad);
  174.                   /* Rekursiver Aufruf von fillfile */
  175.           }
  176.           findnext(&datei);
  177.                        /* Nächstes Directory suchen */
  178.         }
  179.       errno = 0;
  180.    } /* if GLOBAL */
  181. } /* fillfile */
  182.  
  183.  
  184.  
  185. /* ------------------------------------------------- */
  186. /*  Modulname : Parameter_auswerten                  */
  187. /*  Aufgabe   : Auswertung der dem Programm über-    */
  188. /*              gebenen Parameter:                   */
  189. /*              dateiname: Vollqualifizierter Name   */
  190. /*              der Schlüsseldatei                   */
  191. /*   /G, -G   : Auswertung inkl. aller Subdirectories*/
  192. /*   /P, -P   : Bei jeder gefundenen Datei Nachfrage,*/
  193. /*              ob sie aufgenommen werden soll       */
  194. /*   /C, -C   : Angabe, ob die Datei im Laufe der    */
  195. /*              Zeit verändert werden darf           */
  196. /* ------------------------------------------------- */
  197. /*  Parameter                                        */
  198. /*   Eingabe  : argc    : Anzahl der übergebenen     */
  199. /*                        Parameter                  */
  200. /*              *argv[] : Zeiger auf die übergebenen */
  201. /*                        Parameter                  */
  202. /*   Ausgabe   : *dest  : Zeiger auf den Namen der   */
  203. /*                        Schlüsseldatei             */
  204. /* ------------------------------------------------- */
  205. void Parameter_auswerten(int argc, char *argv[],
  206.                          char *dest)
  207. {
  208.   int   zaehler;                /* Schleifenvariable */
  209.  
  210.   if ( (argc == 1) || (argv[1] == "/?") ||
  211.        (argv[1] == "-?") )
  212.     Anleitung_ausgeben();
  213.   else {
  214.     for (zaehler = 1; zaehler < argc; zaehler++)
  215.     { strupr(argv[zaehler]);
  216.  
  217.       if ( (strcmp(argv[zaehler], "/G") == 0) ||
  218.            (strcmp(argv[zaehler], "-G") == 0) )
  219.         GLOBAL = TRUE;
  220.       else if ( (strcmp(argv[zaehler], "/P") == 0) ||
  221.                 (strcmp(argv[zaehler], "-P") == 0) )
  222.         PROMPT = TRUE;
  223.       else if ( (strcmp(argv[zaehler], "/C") == 0) ||
  224.                 (strcmp(argv[zaehler], "-C") == 0) )
  225.         CHANGE = TRUE;
  226.       else strcpy(dest, argv[zaehler]);
  227.     } /* for */
  228.   }
  229.  
  230.   if (! strcmp(dest, "") || (dest[0] == '/') ||
  231.      (dest[0] == '-') )
  232.     Anleitung_ausgeben();
  233. } /* Parameter_auswerten */
  234.  
  235.  
  236. /* ------------------------------------------------- */
  237. /*  Modulname   : Anleitung_ausgeben                 */
  238. /*  Aufgabe     : Ausgabe der Syntax von MAKEKEY     */
  239. /* ------------------------------------------------- */
  240. /*  Parameter                                        */
  241. /*    Eingabe   : KEINE                              */
  242. /*    Ausgabe   : KEINE                              */
  243. /* ------------------------------------------------- */
  244. void  Anleitung_ausgeben(void)
  245. {
  246.   printf("\nMAKEKEY - Schlüsseldatei für CLEARHD ");
  247.   printf("erzeugen\n");
  248.   printf("\nAufruf:  MAKEKEY <Schlüsseldateiname> ");
  249.   printf("[/G] [/P] [/C]");
  250.   printf("\n         /G - (Global) auch die ");
  251.   printf("Unterverzeichnisse aufnehmen");
  252.   printf("\n         /P - (Prompt) jede Datei ");
  253.   printf("abfragen");
  254.   printf("\n         /C - (Change) Werte der Datei ");
  255.   printf("dürfen sich ändern\n");
  256.  
  257.   exit(1);
  258.        /* DOS: Programmabbruch und ERRORLEVEL setzen */
  259. } /* Anleitung_ausgeben */
  260. /* ------------------------------------------------- */
  261. /*            Ende von MAKEKEY.C                     */
  262.  
  263.