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