home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1988 / 10_11 / sichern / sichern.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1988-06-21  |  7.2 KB  |  230 lines

  1. (* ------------------------------------------------------ *)
  2. (*                   SICHERN.PAS                          *)
  3. (*    Datensicherung mit Backup unter Turbo Pascal 4.0    *)
  4. (*    und DOS 3.3                                         *)
  5. (*                                                        *)
  6. (*       (c) 1988 by K.J. von Glasenapp und TOOLBOX       *)
  7. (* ------------------------------------------------------ *)
  8.  
  9. PROGRAM sichern;
  10.  
  11.  
  12. {$M $4000, 0, 0}           (* 16 KByte Stack, 0 Byte Heap *)
  13.  
  14. USES Crt, DOS, Printer;
  15.  
  16. TYPE  strg    = STRING[80];
  17.  
  18. CONST Command = 'C:\COMMAND.COM';
  19.       Logname : STRING = 'C:\SICHERN\LASTBCKP.';
  20.  
  21. VAR   Akt_Directory,
  22.       cmd, strng       : STRING;
  23.       Datums_String,
  24.       Zeit_String      : STRING[10];
  25.       ein, out, last,
  26.       log              : text;
  27.       wahl             : char;
  28.       i                : INTEGER;
  29.  
  30. (* ------------------------------------------------------ *)
  31. (*         Ist die Datei "name" vorhanden ?               *)
  32.  
  33. FUNCTION exist (VAR name):BOOLEAN;
  34. var
  35.  fil:file;
  36.  filename : string[60] absolute name;
  37.  ok : boolean;
  38.  
  39. BEGIN
  40.   assign(fil,filename);
  41. {$i-}
  42.   reset(fil);
  43. {$i+}
  44.   ok := (ioresult=0);
  45.   exist := ok;
  46.   if ok THEN close(fil);
  47. END;
  48.  
  49. (* ------------------------------------------------------ *)
  50. PROCEDURE LOESCHE(Name : STRING);
  51.  
  52. BEGIN
  53.   IF EXIST(Name) THEN BEGIN
  54.     ASSIGN(Last,Name);
  55.     ERASE(Last);
  56.   END;
  57. END;
  58.  
  59. (* ------------------------------------------------------ *)
  60. PROCEDURE Backup_Directories(i : INTEGER);
  61.  
  62. (* i = 1 : Directories in Dirlist werden gesichert        *)
  63. (* i = 2 : Directories in Dirlist werden NICHT gesichert  *)
  64.  
  65. CONST
  66.   max_Dirlist = 100;
  67.   Erstesmal    : boolean = true;
  68.  
  69. VAR
  70.   Dirlist      : array[1..max_Dirlist] of strg;
  71.   Pfadpos      : integer;
  72.   Zaehler,
  73.   Max_Zaehler  : byte;
  74.   Schalter     : boolean;
  75.  
  76. BEGIN
  77.   gotoxy(10,wherey);
  78.   writeln('Liste der Directories, einlesen');
  79.  
  80.   assign(ein,'C:\SICHERN\DIRLIST.TXT');
  81.   reset(ein);      (* Auszuschließende Pfade einlesen ... *)
  82.  
  83.   Max_Zaehler := 0;
  84.   WHILE NOT EOF(ein) AND (Max_zaehler<=max_Dirlist) DO BEGIN
  85.     Max_Zaehler := SUCC(Max_Zaehler);
  86.     readln(ein,Dirlist[Max_Zaehler]);
  87.   END;                      (* ... und im Array speichern *)
  88.   close(ein);
  89.  
  90.   gotoxy(10,wherey);
  91.   write('Pfade von der Disk zusammenstellen und sortieren');
  92.  
  93.   Cmd :='/C tree | find "Pfad: " | sort /+7 > t.tmp';
  94.   Exec(Command,Cmd);  (* für Pfad: sort /+7 *)
  95. (* Achtung bei unterschiedlichen DOS-Meldungen! Einige    *)
  96. (* DOS-Versionen geben bei "tree" "Suchweg:  " aus.       *)
  97. (* Bei Suchweg: sort /+11 und weiter unten delete         *)
  98. (* strng,1,10                                             *)
  99.  
  100.   Cmd :='/C copy t.tmp pfade.tmp /a >del';
  101.                                (* COPY mit /a ist notwen- *)
  102.   Exec(Command,Cmd);           (* dig, um die Datei zur   *)
  103.                                (* Verarbeitung in Turbo   *)
  104.                            (* Pascal mit ^Z abzuschließen *)
  105.   Exec(Command,'/C Del del');  (* In del sollte nur die   *)
  106.                                (* Meldung von Copy        *)
  107.                                (* unterdrückt werden      *)
  108.   assign(ein,'PFADE.TMP');     (* Aktuelle Pfade der Disk *)
  109.   reset(ein);
  110.   IF i = 1 THEN Logname := Logname + 'B02'
  111.            ELSE Logname := Logname + 'B03';
  112.   LOESCHE(Logname);
  113.   Zaehler := 1;
  114.   ClrScr;
  115.   WHILE NOT EOF(ein) AND (Zaehler <= Max_Zaehler) DO BEGIN
  116.     readln(ein,strng);
  117.     delete(strng,1,6);   (* Wenn bei tree Pfad: erscheint*)
  118.                           (* strng,1,6  *)
  119.     CASE i OF
  120.       1 : Schalter := (strng <> Dirlist[Zaehler]);
  121.       2 : Schalter := (strng  = Dirlist[Zaehler]);
  122.     END;
  123.     IF Schalter THEN BEGIN
  124.       IF i = 2 THEN Zaehler := SUCC(Zaehler); END
  125.     ELSE BEGIN
  126.       Cmd := '/C BACKUP C:' + strng + '\*.* A:';
  127.       IF Erstesmal THEN Erstesmal := false
  128.       ELSE BEGIN           (* append auf gleiche Diskette *)
  129.         Cmd := Cmd + ' /A';
  130.         TextColor(Black); TextBackground(LightGray);
  131.         GotoXY(1,25);
  132.         Write(' Die letzte Diskette liegt bereits drin ');
  133.         TextColor(White); TextBackground(Black);
  134.         Writeln;
  135.         TextColor(Black); TextBackground(LightGray);
  136.         Write('       Einfach eine Taste Drücken       ');
  137.         TextColor(White); TextBackground(Black);
  138.       END;
  139.       Cmd := Cmd + ' /L:' + Logname;
  140.       Exec(Command,Cmd);
  141.       IF i = 1 THEN Zaehler := SUCC(Zaehler);
  142.     END;
  143.   END;
  144.   close(ein);
  145.   Cmd :='/C del *.tmp';
  146.   Exec(Command,Cmd);
  147.                        (* Alle temporären Dateien löschen *)
  148. END;
  149.  
  150. (* ------------------------------------------------------ *)
  151. PROCEDURE Gesamt_backup;
  152.  
  153. BEGIN
  154.   Logname := Logname + 'B01';
  155.   LOESCHE(Logname);
  156.   GetDir(3,Akt_Directory);  (* Aufruf von BACKUP muß aus  *)
  157.   ChDir('C:\');             (* dem Root-Directory erfolgen*)
  158.   Cmd :='/C BACKUP C: A: /S /L:' + Logname;
  159.   Exec(Command,Cmd);
  160.   ChDir(Akt_Directory);  (* zurück ins Ausgangs-Directory *)
  161. END;
  162.  
  163. (* ------------------------------------------------------ *)
  164. (* Nur die seit dem letzen BACKUP der ganzen Platte unter *)
  165. (* Ausschluß von angegebenen Directories geänderten       *)
  166. (* Dateien sichern                                        *)
  167. PROCEDURE Geaenderte_Dateien;
  168.  
  169. BEGIN
  170.   Logname := Logname + 'B04';
  171.   LOESCHE(Logname);
  172.   GetDir(3,Akt_Directory);
  173.   ChDir('C:\');
  174.   Cmd :='/C BACKUP C: A: /S /D:'+ Datums_String + ' /T:'
  175.                                 +Zeit_String;
  176.   Cmd := Cmd + ' /L:' + Logname;
  177.   Exec(Command,Cmd);
  178.   ChDir(Akt_Directory);
  179. END;
  180.  
  181. (* ----------- Hauptprogramm ---------------------------- *)
  182.  
  183. BEGIN
  184.   strng := 'C:\SICHERN\LASTBCKP.B03';
  185.   IF EXIST(strng) THEN BEGIN
  186.     assign(last,strng);
  187.     reset(last);
  188.     readln(last);              (* Datei beginnt mit 0D 0A *)
  189.     readln(last,strng);
  190.     i := POS(' ',strng);
  191.     Datums_String := COPY(strng,1,PRED(i));
  192.     DELETE(strng,1,i);
  193.     WHILE strng[1] = ' ' DO DELETE(strng,1,1);
  194.     Zeit_String := strng;
  195.     close(last); END
  196.   ELSE BEGIN
  197.     Datums_String := 'Kein Datum';
  198.     Zeit_String := ' XX ';
  199.   END;
  200.  
  201.   textcolor(white); textbackground(black);
  202.   clrscr;
  203.   gotoxy(17,2);
  204.   writeln('Sicherung von Dateien auf der Platte');
  205.   gotoxy(10,5);
  206.   writeln('Alle Dateien ............................... 1');
  207.   gotoxy(10,7);
  208.   writeln('Dateien in DIRLIST.TXT sichern.............. 2');
  209.   gotoxy(10,9);
  210.   writeln('Dateien in DIRLIST.TXT ausschließen ........ 3');
  211.   textcolor(LightGray);
  212.   gotoxy(10,11);
  213.   writeln('Letzte Sicherung (3) am ',Datums_String,
  214.           ' um ',Zeit_String,' Uhr');
  215.   textcolor(white);
  216.   gotoxy(10,13);
  217.   writeln('Nur nach diesem Datum geänderte Dateien .... 4');
  218.   gotoxy(10,15);
  219.   writeln('Abbrechen .................................. 0');
  220.   gotoxy(10,17);write('Bitte auswählen ===> ');
  221.   wahl := readkey; writeln(wahl); writeln;
  222.   CASE wahl of '1' : Gesamt_backup;
  223.                '2' : Backup_Directories(1);
  224.                '3' : Backup_Directories(2);
  225.                '4' : Geaenderte_Dateien;
  226.   END;
  227.   gotoxy(28,wherey+2); Write('Backup beendet');
  228. END.
  229. (* ------------------------------------------------------ *)
  230. (*                Ende von SICHERN.PAS                    *)