home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1989 / 10 / tricks / diskhelp.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1989-07-11  |  4.9 KB  |  204 lines

  1. (* ------------------------------------------------------ *)
  2. (*                   DISKHELP.PAS                         *)
  3. (*   Programm zum Lesen und Sichern einzelner Sektoren    *)
  4. (*           (c) Herbert Zenz  &  TOOLBOX                 *)
  5. (* ------------------------------------------------------ *)
  6. PROGRAM DiskHelp;
  7.  
  8. USES Dos, Crt;
  9.  
  10. VAR
  11.   Regs                : Registers;
  12.   store               : POINTER;
  13.   dsk                 : TEXT;
  14.   c                   : CHAR;
  15.   buff                : ARRAY [1..512] OF CHAR;
  16.   such, suchbuff      : STRING [128];
  17.   i                   : INTEGER;
  18.   spur, sektor, seite : BYTE;
  19.   datei               : STRING[12];
  20.   opened              : BOOLEAN;
  21.  
  22.   PROCEDURE Intro;
  23.   BEGIN
  24.     ClrScr;
  25.     GotoXY(20,10);
  26.     Write(' S e k t o r e n l e s e r');
  27.     GotoXY(30,12);
  28.     Write (' by H.Zenz & TOOLBOX ');
  29.     c := ReadKey;
  30.   END;
  31.  
  32.   PROCEDURE Fenster1;
  33.   BEGIN
  34.     Window(1, 1, 80, 1);
  35.     TextColor(black);
  36.     TextBackground(red);
  37.     ClrScr;
  38.   END;
  39.  
  40.   PROCEDURE Fenster2;
  41.   BEGIN
  42.     Window(1, 2, 80, 24);
  43.     TextColor(green);
  44.     TextBackground(black);
  45.     ClrScr;
  46.   END;
  47.  
  48.   PROCEDURE Fenster3;
  49.   BEGIN
  50.     Window(1, 25, 80, 25);
  51.     TextColor(black);
  52.     TextBackground(brown);
  53.     ClrScr;
  54.   END;
  55.  
  56.   PROCEDURE SektorLesen(se, sp, seit : BYTE) ;
  57.   BEGIN
  58.     Regs.ah := 2;
  59.     Regs.al := 1;      { Anzahl };
  60.     Regs.ch := sp;     { Spurnummer 0 - 39 }
  61.     Regs.cl := se;     { Sektornummer 1 - 8 }
  62.     Regs.dl := 0;      { Laufwerk }
  63.     Regs.dh := seit; { Kopfnummer 0-1 }
  64.     Regs.bx := Ofs(store^);
  65.     Regs.es := Seg(store^);
  66.     Intr($13, Regs);
  67.   END;
  68.  
  69.   PROCEDURE Info;
  70.   BEGIN
  71.     Fenster1;
  72.     Write('  Seite: ', seite, '  Spur: ',spur,'  Sektor: ',
  73.           sektor, '  Zieldatei: ', datei);
  74.   END;
  75.  
  76.   PROCEDURE SektorVor;
  77.   BEGIN
  78.     sektor := sektor + 1;
  79.     IF sektor > 9 THEN BEGIN
  80.       sektor := 1;
  81.       spur   := spur + 1;
  82.       IF spur > 39 THEN BEGIN
  83.         spur := 0;
  84.         IF seite = 1 THEN seite := 0 ELSE seite := 1;
  85.       END;
  86.     END;
  87.   END;
  88.  
  89.   PROCEDURE SektorZur;
  90.   BEGIN
  91.     sektor := sektor - 1;
  92.     IF sektor < 1 THEN BEGIN
  93.       sektor := 9;
  94.       spur   := spur - 1;
  95.       IF spur = 255 THEN BEGIN
  96.         spur := 39;
  97.         IF seite = 1 THEN seite := 0 ELSE seite := 1;
  98.       END;
  99.     END;
  100.   END;
  101.  
  102.   PROCEDURE Suchen;
  103.   VAR
  104.     o, s : WORD;
  105.   BEGIN
  106.     Fenster2;
  107.     Write('Suchwort: ');  ReadLn(such);
  108.     REPEAT
  109.       SektorVor;
  110.       SektorLesen(sektor, spur, seite);
  111.       o := Ofs(store^);
  112.       s := Seg(store^);
  113.       Move(Mem[s:o], suchbuff, 128);
  114.       IF Pos(such, suchbuff) > 0 THEN Exit;
  115.       Move(Mem[s:o], suchbuff, 128);
  116.       IF Pos(such, suchbuff) > 0 THEN Exit;
  117.       Move(Mem[s:o+128], suchbuff, 128);
  118.       IF Pos(such, suchbuff) > 0 THEN Exit;
  119.       Move(Mem[s:o+256], suchbuff, 128);
  120.       IF Pos(such, suchbuff) > 0 THEN Exit;
  121.       Move(Mem[s:o+384], suchbuff, 128);
  122.       IF Pos(such, suchbuff) > 0 THEN Exit;
  123.     UNTIL ((seite=1) AND (spur=39) AND (sektor=9));
  124.   END;
  125.  
  126.   PROCEDURE Sichten;
  127.   BEGIN
  128.     Fenster2;
  129.     REPEAT
  130.       Write('Startspur: ');  Read(spur);
  131.     UNTIL spur < 40;
  132.     REPEAT
  133.       Write('Startsektor: '); Read(sektor);
  134.     UNTIL (sektor < 10) AND (sektor > 0);
  135.     REPEAT
  136.       Write('Seite: '); Read(seite);
  137.     UNTIL (seite=0) OR (seite=1);
  138.     Fenster3;
  139.     Write('<+>-vor  <->-zurück  <ENTER>-in Datei');
  140.     Write('  <ESC>-Ende  <F>-Suchen');
  141.     REPEAT
  142.       Info;
  143.       store := Addr(buff[1]);
  144.       SektorLesen(sektor, spur, seite) ;
  145.       Fenster2;
  146.       FOR i := 1 TO 512 DO BEGIN
  147.         IF buff[i] > #7 THEN Write(buff[i]);
  148.         IF WhereY = 22 THEN BEGIN
  149.           WriteLn;
  150.           Write('**** Weiter mit <W> ****');
  151.           REPEAT
  152.             c := ReadKey;
  153.           UNTIL (c='w') OR (c='W');
  154.           ClrScr;
  155.         END;
  156.       END;
  157.       c := ReadKey;
  158.       IF c = '+' THEN SektorVor;
  159.       IF c = '-' THEN SektorZur;
  160.       IF c = 'f' THEN Suchen;
  161.       IF c = #13 THEN BEGIN
  162.         FOR i := 1 TO 512 DO BEGIN
  163.           ChDir('C:\');
  164.           Write(dsk, buff[i]);
  165.         END;
  166.       END;
  167.     UNTIL c=#27;
  168.   END;
  169.  
  170.   PROCEDURE Sichern;
  171.   BEGIN
  172.     Fenster3;
  173.     IF opened THEN Close(dsk);
  174.     Write('Dateiname:');
  175.     ReadLn(datei);
  176.     Assign(dsk, datei);
  177.     Rewrite(dsk);
  178.     opened := TRUE;
  179.   END;
  180.  
  181. BEGIN
  182.   Intro;
  183.   Fenster1;
  184.   Fenster2;
  185.   Fenster3;
  186.   opened := FALSE;
  187.   datei := '';
  188.   store := Addr(buff[1]);
  189.   REPEAT
  190.     Fenster3;
  191.     Write(' <1>-Sektoren sichten  <2>-Datei öffnen',
  192.           '  <3>-Ende');
  193.     c := ReadKey;
  194.     IF c = '1' THEN Sichten;
  195.     IF c = '2' THEN Sichern;
  196.   UNTIL c = '3';
  197.   Window (1, 1, 80, 25);
  198.   TextColor(green);
  199.   TextBackground(black);
  200.   ClrScr;
  201.   IF opened THEN Close(dsk);
  202. END.
  203. (* ------------------------------------------------------ *)
  204. (*                Ende von DISKHELP.PAS                   *)