home *** CD-ROM | disk | FTP | other *** search
- /* ------------------------------------------------------ */
- /* UNLINK.C */
- /* (c) Kai Jendrian & TOOLBOX */
- /* Programm zum Ersatz des DOS-Kommandos DEL */
- /* Erstellt mit Turbo-C 2.0 und Turbo-Debugger 1.0 */
- /* Modell : Tiny */
- /* Linken : tlink lib\c0t out\unlink,unlink.com,,lib\cs /t*/
- /* */
- /* ------------------------------------------------------ */
- #include <conio.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include <dir.h>
- #include <alloc.h>
- #include <ctype.h>
-
- #define MAXLEN 80 /* Maximale Länge für einen Dateinamen */
-
- main(int argc, char *argv[])
- {
- struct ffblk file;
- char (*datlist)[MAXLEN];
- char *temp;
- int *datatr;
- register i;
- int listlen = 0, lastentry, ch, error;
-
- /* Speicherplatz für die maximale Anzahl an zu löschenden */
- /* Dateien bereitstellen */
-
- datatr = (int*)calloc(argc, sizeof(int));
- datlist = calloc(argc, MAXLEN);
- if (argc==1) {
- printf("Der Befehl UNLINK hat folgendes Format:\n\n");
- printf("UNLINK Dateiname [-q] Dateiname [-q] ...\n\n");
- printf("Bei Dateiname sind Wildcards erlaubt. ");
- printf("Der optionale\n");
- printf("Paramter -q bewirkt, daß jeder Löschvorgang ");
- printf("bestätigt\n");
- printf("werden muß.\n");
- return;
- }
- for (i = 1; i < argc; i++) {
- if (*argv[i] != '-')
- /* Wenn der Parameter keine Option ist */
- /* füge ihn in die Dateiliste ein. */
- strncpy(datlist[listlen++], argv[i],
- min(strlen(argv[i]), MAXLEN));
- else {
- /* Wenn der Parameter die Option -q ist */
- /* Setze das entsprechende Dateiattribut */
- /* auf 1, d.h. auf Löschen bestätigen. */
- if(*(argv[i]+1) == 'q' && listlen)
- datatr[listlen-1] = 1;
- }
- }
- /* Führe das Löschen anhand der oben erstellten */
- /* Listen durch. */
- for(i = 0; i < listlen; i++) {
- /* Prüfe ob ein entsprechneder Eintrag */
- /* auf dem Medium vorhanden ist. */
- lastentry = findfirst(datlist[i], &file, 0);
- if(lastentry)
- printf("\nKeine passende Datei %s gefunden!",
- datlist[i]);
- while(!lastentry) {
- /* Solange ein weiterer Eintrag gefunden wird */
- /* speichere in temp die Adresse des am weitesten */
- /* rechts stehenden Zeichen '\' - temp ist also */
- /* ein Zeiger auf das Ende der Pfadangabe in */
- /* datlist[i]. */
- temp = strrchr(datlist[i],'\\');
- /* Wenn das Zeichen '\' nicht gefunden wurde, */
- /* suche nach dem Zeichen ':', das eine */
- /* Laufwerksangabe abschließt. */
- /* Speichere einen Zeiger darauf in temp. */
- if (!temp) temp = strrchr(datlist[i], ':');
- /* Wenn eins der beiden oben gesuchten Zeichen */
- /* gefunden wurde, hänge den durch file.ff_name */
- /* spezifizierten Dateinamen an datlist[i] an. */
- if (temp) {
- *(temp+1) = '\0';
- strcat(datlist[i], file.ff_name);
- }
- /* Wenn keins der beiden Zeichen gefunden wurde, */
- /* ist in dem entsprechenden Parameter keine */
- /* Laufwerks- oder Pfadangabe spezifiziert und */
- /* der Name der zu Löschenden Datei muß von */
- /* file.ff_name in datlist[i] kopiert werden. */
- else
- strcpy(datlist[i], file.ff_name);
- /* Wenn das zu dem Dateinamen datlist[i] */
- /* gehörende Attribut datatr[i] auf 1 gesetzt */
- /* wurde, laß den Löschvorgang bestätigen und */
- /* führe ihn gegebenenfalls aus. Falls der Lösch- */
- /* vorgang nicht korrekt ausgeführt werden konnte,*/
- /* gib eine Fehlermeldung aus. */
- if (datatr[i]) {
- printf("\nDatei %-14s löschen? <J/N> : ",
- file.ff_name);
- putch(ch = toupper(getch()));
- if (ch == 'J') {
- error = unlink(datlist[i]);
- if (!error)
- printf(" Datei erfolgreich gelöscht!");
- else
- printf(" Fehler beim Löschen der Datei!");
- }
- }
- /* Wenn das attribut datatr[i] nicht auf 1 gesetzt */
- /* wurde, lösche die in datlist[i] angegebene Datei */
- /* und gib, falls erforderlich, eine Fehlermeldung */
- /* aus. */
- else {
- error = unlink(datlist[i]);
- if (!error)
- printf("\nDatei %-14s gelöscht!", file.ff_name);
- else
- printf("\nFehler beim Löschen der Datei %s!",
- file.ff_name);
- }
- /* Suche die nächste Datei */
- lastentry = findnext(&file);
- }
- }
- /* Gib belegten Speicherplatz wieder frei. */
- free(datlist);
- free(datatr);
- }
- /* ------------------------------------------------------ */
- /* Ende von UNLINK.C */
-