home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* SICHERN.PAS *)
- (* Datensicherung mit Backup unter Turbo Pascal 4.0 *)
- (* und DOS 3.3 *)
- (* *)
- (* (c) 1988 by K.J. von Glasenapp und TOOLBOX *)
- (* ------------------------------------------------------ *)
-
- PROGRAM sichern;
-
-
- {$M $4000, 0, 0} (* 16 KByte Stack, 0 Byte Heap *)
-
- USES Crt, DOS, Printer;
-
- TYPE strg = STRING[80];
-
- CONST Command = 'C:\COMMAND.COM';
- Logname : STRING = 'C:\SICHERN\LASTBCKP.';
-
- VAR Akt_Directory,
- cmd, strng : STRING;
- Datums_String,
- Zeit_String : STRING[10];
- ein, out, last,
- log : text;
- wahl : char;
- i : INTEGER;
-
- (* ------------------------------------------------------ *)
- (* Ist die Datei "name" vorhanden ? *)
-
- FUNCTION exist (VAR name):BOOLEAN;
- var
- fil:file;
- filename : string[60] absolute name;
- ok : boolean;
-
- BEGIN
- assign(fil,filename);
- {$i-}
- reset(fil);
- {$i+}
- ok := (ioresult=0);
- exist := ok;
- if ok THEN close(fil);
- END;
-
- (* ------------------------------------------------------ *)
- PROCEDURE LOESCHE(Name : STRING);
-
- BEGIN
- IF EXIST(Name) THEN BEGIN
- ASSIGN(Last,Name);
- ERASE(Last);
- END;
- END;
-
- (* ------------------------------------------------------ *)
- PROCEDURE Backup_Directories(i : INTEGER);
-
- (* i = 1 : Directories in Dirlist werden gesichert *)
- (* i = 2 : Directories in Dirlist werden NICHT gesichert *)
-
- CONST
- max_Dirlist = 100;
- Erstesmal : boolean = true;
-
- VAR
- Dirlist : array[1..max_Dirlist] of strg;
- Pfadpos : integer;
- Zaehler,
- Max_Zaehler : byte;
- Schalter : boolean;
-
- BEGIN
- gotoxy(10,wherey);
- writeln('Liste der Directories, einlesen');
-
- assign(ein,'C:\SICHERN\DIRLIST.TXT');
- reset(ein); (* Auszuschließende Pfade einlesen ... *)
-
- Max_Zaehler := 0;
- WHILE NOT EOF(ein) AND (Max_zaehler<=max_Dirlist) DO BEGIN
- Max_Zaehler := SUCC(Max_Zaehler);
- readln(ein,Dirlist[Max_Zaehler]);
- END; (* ... und im Array speichern *)
- close(ein);
-
- gotoxy(10,wherey);
- write('Pfade von der Disk zusammenstellen und sortieren');
-
- Cmd :='/C tree | find "Pfad: " | sort /+7 > t.tmp';
- Exec(Command,Cmd); (* für Pfad: sort /+7 *)
- (* Achtung bei unterschiedlichen DOS-Meldungen! Einige *)
- (* DOS-Versionen geben bei "tree" "Suchweg: " aus. *)
- (* Bei Suchweg: sort /+11 und weiter unten delete *)
- (* strng,1,10 *)
-
- Cmd :='/C copy t.tmp pfade.tmp /a >del';
- (* COPY mit /a ist notwen- *)
- Exec(Command,Cmd); (* dig, um die Datei zur *)
- (* Verarbeitung in Turbo *)
- (* Pascal mit ^Z abzuschließen *)
- Exec(Command,'/C Del del'); (* In del sollte nur die *)
- (* Meldung von Copy *)
- (* unterdrückt werden *)
- assign(ein,'PFADE.TMP'); (* Aktuelle Pfade der Disk *)
- reset(ein);
- IF i = 1 THEN Logname := Logname + 'B02'
- ELSE Logname := Logname + 'B03';
- LOESCHE(Logname);
- Zaehler := 1;
- ClrScr;
- WHILE NOT EOF(ein) AND (Zaehler <= Max_Zaehler) DO BEGIN
- readln(ein,strng);
- delete(strng,1,6); (* Wenn bei tree Pfad: erscheint*)
- (* strng,1,6 *)
- CASE i OF
- 1 : Schalter := (strng <> Dirlist[Zaehler]);
- 2 : Schalter := (strng = Dirlist[Zaehler]);
- END;
- IF Schalter THEN BEGIN
- IF i = 2 THEN Zaehler := SUCC(Zaehler); END
- ELSE BEGIN
- Cmd := '/C BACKUP C:' + strng + '\*.* A:';
- IF Erstesmal THEN Erstesmal := false
- ELSE BEGIN (* append auf gleiche Diskette *)
- Cmd := Cmd + ' /A';
- TextColor(Black); TextBackground(LightGray);
- GotoXY(1,25);
- Write(' Die letzte Diskette liegt bereits drin ');
- TextColor(White); TextBackground(Black);
- Writeln;
- TextColor(Black); TextBackground(LightGray);
- Write(' Einfach eine Taste Drücken ');
- TextColor(White); TextBackground(Black);
- END;
- Cmd := Cmd + ' /L:' + Logname;
- Exec(Command,Cmd);
- IF i = 1 THEN Zaehler := SUCC(Zaehler);
- END;
- END;
- close(ein);
- Cmd :='/C del *.tmp';
- Exec(Command,Cmd);
- (* Alle temporären Dateien löschen *)
- END;
-
- (* ------------------------------------------------------ *)
- PROCEDURE Gesamt_backup;
-
- BEGIN
- Logname := Logname + 'B01';
- LOESCHE(Logname);
- GetDir(3,Akt_Directory); (* Aufruf von BACKUP muß aus *)
- ChDir('C:\'); (* dem Root-Directory erfolgen*)
- Cmd :='/C BACKUP C: A: /S /L:' + Logname;
- Exec(Command,Cmd);
- ChDir(Akt_Directory); (* zurück ins Ausgangs-Directory *)
- END;
-
- (* ------------------------------------------------------ *)
- (* Nur die seit dem letzen BACKUP der ganzen Platte unter *)
- (* Ausschluß von angegebenen Directories geänderten *)
- (* Dateien sichern *)
- PROCEDURE Geaenderte_Dateien;
-
- BEGIN
- Logname := Logname + 'B04';
- LOESCHE(Logname);
- GetDir(3,Akt_Directory);
- ChDir('C:\');
- Cmd :='/C BACKUP C: A: /S /D:'+ Datums_String + ' /T:'
- +Zeit_String;
- Cmd := Cmd + ' /L:' + Logname;
- Exec(Command,Cmd);
- ChDir(Akt_Directory);
- END;
-
- (* ----------- Hauptprogramm ---------------------------- *)
-
- BEGIN
- strng := 'C:\SICHERN\LASTBCKP.B03';
- IF EXIST(strng) THEN BEGIN
- assign(last,strng);
- reset(last);
- readln(last); (* Datei beginnt mit 0D 0A *)
- readln(last,strng);
- i := POS(' ',strng);
- Datums_String := COPY(strng,1,PRED(i));
- DELETE(strng,1,i);
- WHILE strng[1] = ' ' DO DELETE(strng,1,1);
- Zeit_String := strng;
- close(last); END
- ELSE BEGIN
- Datums_String := 'Kein Datum';
- Zeit_String := ' XX ';
- END;
-
- textcolor(white); textbackground(black);
- clrscr;
- gotoxy(17,2);
- writeln('Sicherung von Dateien auf der Platte');
- gotoxy(10,5);
- writeln('Alle Dateien ............................... 1');
- gotoxy(10,7);
- writeln('Dateien in DIRLIST.TXT sichern.............. 2');
- gotoxy(10,9);
- writeln('Dateien in DIRLIST.TXT ausschließen ........ 3');
- textcolor(LightGray);
- gotoxy(10,11);
- writeln('Letzte Sicherung (3) am ',Datums_String,
- ' um ',Zeit_String,' Uhr');
- textcolor(white);
- gotoxy(10,13);
- writeln('Nur nach diesem Datum geänderte Dateien .... 4');
- gotoxy(10,15);
- writeln('Abbrechen .................................. 0');
- gotoxy(10,17);write('Bitte auswählen ===> ');
- wahl := readkey; writeln(wahl); writeln;
- CASE wahl of '1' : Gesamt_backup;
- '2' : Backup_Directories(1);
- '3' : Backup_Directories(2);
- '4' : Geaenderte_Dateien;
- END;
- gotoxy(28,wherey+2); Write('Backup beendet');
- END.
- (* ------------------------------------------------------ *)
- (* Ende von SICHERN.PAS *)