home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 02 / tricks / unlink.c < prev    next >
C/C++ Source or Header  |  1989-11-14  |  5KB  |  133 lines

  1. /* ------------------------------------------------------ */
  2. /*                      UNLINK.C                          */
  3. /*            (c)  Kai Jendrian & TOOLBOX                 */
  4. /*     Programm  zum Ersatz des DOS-Kommandos DEL         */
  5. /*     Erstellt mit Turbo-C 2.0 und Turbo-Debugger 1.0    */
  6. /* Modell :  Tiny                                         */
  7. /* Linken : tlink lib\c0t out\unlink,unlink.com,,lib\cs /t*/
  8. /*                                                        */
  9. /* ------------------------------------------------------ */
  10. #include <conio.h>
  11. #include <stdlib.h>
  12. #include <stdio.h>
  13. #include <string.h>
  14. #include <dir.h>
  15. #include <alloc.h>
  16. #include <ctype.h>
  17.  
  18. #define MAXLEN 80  /* Maximale Länge für einen Dateinamen */
  19.  
  20. main(int argc, char *argv[])
  21. {
  22.   struct ffblk file;
  23.   char (*datlist)[MAXLEN];
  24.   char *temp;
  25.   int *datatr;
  26.   register i;
  27.   int listlen = 0, lastentry, ch, error;
  28.  
  29. /* Speicherplatz für die maximale Anzahl an zu löschenden */
  30. /* Dateien bereitstellen                                  */
  31.  
  32.   datatr  = (int*)calloc(argc, sizeof(int));
  33.   datlist = calloc(argc, MAXLEN);
  34.   if (argc==1) {
  35.     printf("Der Befehl UNLINK hat folgendes Format:\n\n");
  36.     printf("UNLINK Dateiname [-q] Dateiname [-q] ...\n\n");
  37.     printf("Bei Dateiname sind Wildcards erlaubt. ");
  38.     printf("Der optionale\n");
  39.     printf("Paramter -q bewirkt, daß jeder Löschvorgang ");
  40.     printf("bestätigt\n");
  41.     printf("werden muß.\n");
  42.     return;
  43.   }
  44.   for (i = 1; i < argc; i++) {
  45.     if (*argv[i] != '-')
  46.                    /* Wenn der Parameter keine Option ist */
  47.                    /* füge ihn in die Dateiliste ein.     */
  48.       strncpy(datlist[listlen++], argv[i],
  49.               min(strlen(argv[i]), MAXLEN));
  50.     else {
  51.                  /* Wenn der Parameter die Option -q ist  */
  52.                  /* Setze das entsprechende Dateiattribut */
  53.                  /* auf 1, d.h. auf Löschen bestätigen.   */
  54.       if(*(argv[i]+1) == 'q' && listlen)
  55.         datatr[listlen-1] = 1;
  56.       }
  57.   }
  58.           /* Führe das Löschen anhand der oben erstellten */
  59.           /* Listen durch.                                */
  60.   for(i = 0; i < listlen; i++) {
  61.                    /* Prüfe ob ein entsprechneder Eintrag */
  62.                    /* auf dem Medium vorhanden ist.       */
  63.     lastentry = findfirst(datlist[i], &file, 0);
  64.     if(lastentry)
  65.       printf("\nKeine passende Datei %s gefunden!",
  66.              datlist[i]);
  67.     while(!lastentry) {
  68.         /* Solange ein weiterer Eintrag gefunden wird     */
  69.         /* speichere in temp die Adresse des am weitesten */
  70.         /* rechts stehenden Zeichen '\' - temp ist also   */
  71.         /* ein Zeiger auf das Ende der Pfadangabe in      */
  72.         /* datlist[i].                                    */
  73.       temp = strrchr(datlist[i],'\\');
  74.         /* Wenn das Zeichen '\' nicht gefunden wurde,     */
  75.         /* suche nach dem Zeichen ':', das eine           */
  76.         /* Laufwerksangabe abschließt.                    */
  77.         /* Speichere einen Zeiger darauf in temp.         */
  78.       if (!temp) temp = strrchr(datlist[i], ':');
  79.         /* Wenn eins der beiden oben gesuchten Zeichen    */
  80.         /* gefunden wurde, hänge den durch file.ff_name   */
  81.         /* spezifizierten Dateinamen an datlist[i] an.    */
  82.       if (temp) {
  83.         *(temp+1) = '\0';
  84.         strcat(datlist[i], file.ff_name);
  85.       }
  86.         /* Wenn keins der beiden Zeichen gefunden wurde,  */
  87.         /* ist in dem entsprechenden Parameter keine      */
  88.         /* Laufwerks- oder Pfadangabe spezifiziert und    */
  89.         /* der Name der zu Löschenden Datei muß von       */
  90.         /* file.ff_name in datlist[i] kopiert werden.     */
  91.       else
  92.         strcpy(datlist[i], file.ff_name);
  93.         /* Wenn das zu dem Dateinamen datlist[i]          */
  94.         /* gehörende Attribut datatr[i] auf 1 gesetzt     */
  95.         /* wurde, laß den Löschvorgang bestätigen und     */
  96.         /* führe ihn gegebenenfalls aus. Falls der Lösch- */
  97.         /* vorgang nicht korrekt ausgeführt werden konnte,*/
  98.         /* gib eine Fehlermeldung aus.                    */
  99.       if (datatr[i]) {
  100.         printf("\nDatei %-14s löschen? <J/N> : ",
  101.                file.ff_name);
  102.         putch(ch = toupper(getch()));
  103.         if (ch == 'J') {
  104.           error = unlink(datlist[i]);
  105.           if (!error)
  106.             printf("   Datei erfolgreich gelöscht!");
  107.           else
  108.             printf("   Fehler beim Löschen der Datei!");
  109.          }
  110.       }
  111.       /* Wenn das attribut datatr[i] nicht auf 1 gesetzt  */
  112.       /* wurde, lösche die in datlist[i] angegebene Datei */
  113.       /* und gib, falls erforderlich, eine Fehlermeldung  */
  114.       /* aus.                                             */
  115.       else {
  116.         error = unlink(datlist[i]);
  117.         if (!error)
  118.           printf("\nDatei %-14s gelöscht!", file.ff_name);
  119.         else
  120.           printf("\nFehler beim Löschen der Datei %s!",
  121.                  file.ff_name);
  122.       }
  123.                                /* Suche die nächste Datei */
  124.       lastentry = findnext(&file);
  125.     }
  126.   }
  127.                /* Gib belegten Speicherplatz wieder frei. */
  128.   free(datlist);
  129.   free(datatr);
  130. }
  131. /* ------------------------------------------------------ */
  132. /*                  Ende von UNLINK.C                     */
  133.