home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* DISKHELP.PAS *)
- (* Programm zum Lesen und Sichern einzelner Sektoren *)
- (* (c) Herbert Zenz & TOOLBOX *)
- (* ------------------------------------------------------ *)
- PROGRAM DiskHelp;
-
- USES Dos, Crt;
-
- VAR
- Regs : Registers;
- store : POINTER;
- dsk : TEXT;
- c : CHAR;
- buff : ARRAY [1..512] OF CHAR;
- such, suchbuff : STRING [128];
- i : INTEGER;
- spur, sektor, seite : BYTE;
- datei : STRING[12];
- opened : BOOLEAN;
-
- PROCEDURE Intro;
- BEGIN
- ClrScr;
- GotoXY(20,10);
- Write(' S e k t o r e n l e s e r');
- GotoXY(30,12);
- Write (' by H.Zenz & TOOLBOX ');
- c := ReadKey;
- END;
-
- PROCEDURE Fenster1;
- BEGIN
- Window(1, 1, 80, 1);
- TextColor(black);
- TextBackground(red);
- ClrScr;
- END;
-
- PROCEDURE Fenster2;
- BEGIN
- Window(1, 2, 80, 24);
- TextColor(green);
- TextBackground(black);
- ClrScr;
- END;
-
- PROCEDURE Fenster3;
- BEGIN
- Window(1, 25, 80, 25);
- TextColor(black);
- TextBackground(brown);
- ClrScr;
- END;
-
- PROCEDURE SektorLesen(se, sp, seit : BYTE) ;
- BEGIN
- Regs.ah := 2;
- Regs.al := 1; { Anzahl };
- Regs.ch := sp; { Spurnummer 0 - 39 }
- Regs.cl := se; { Sektornummer 1 - 8 }
- Regs.dl := 0; { Laufwerk }
- Regs.dh := seit; { Kopfnummer 0-1 }
- Regs.bx := Ofs(store^);
- Regs.es := Seg(store^);
- Intr($13, Regs);
- END;
-
- PROCEDURE Info;
- BEGIN
- Fenster1;
- Write(' Seite: ', seite, ' Spur: ',spur,' Sektor: ',
- sektor, ' Zieldatei: ', datei);
- END;
-
- PROCEDURE SektorVor;
- BEGIN
- sektor := sektor + 1;
- IF sektor > 9 THEN BEGIN
- sektor := 1;
- spur := spur + 1;
- IF spur > 39 THEN BEGIN
- spur := 0;
- IF seite = 1 THEN seite := 0 ELSE seite := 1;
- END;
- END;
- END;
-
- PROCEDURE SektorZur;
- BEGIN
- sektor := sektor - 1;
- IF sektor < 1 THEN BEGIN
- sektor := 9;
- spur := spur - 1;
- IF spur = 255 THEN BEGIN
- spur := 39;
- IF seite = 1 THEN seite := 0 ELSE seite := 1;
- END;
- END;
- END;
-
- PROCEDURE Suchen;
- VAR
- o, s : WORD;
- BEGIN
- Fenster2;
- Write('Suchwort: '); ReadLn(such);
- REPEAT
- SektorVor;
- SektorLesen(sektor, spur, seite);
- o := Ofs(store^);
- s := Seg(store^);
- Move(Mem[s:o], suchbuff, 128);
- IF Pos(such, suchbuff) > 0 THEN Exit;
- Move(Mem[s:o], suchbuff, 128);
- IF Pos(such, suchbuff) > 0 THEN Exit;
- Move(Mem[s:o+128], suchbuff, 128);
- IF Pos(such, suchbuff) > 0 THEN Exit;
- Move(Mem[s:o+256], suchbuff, 128);
- IF Pos(such, suchbuff) > 0 THEN Exit;
- Move(Mem[s:o+384], suchbuff, 128);
- IF Pos(such, suchbuff) > 0 THEN Exit;
- UNTIL ((seite=1) AND (spur=39) AND (sektor=9));
- END;
-
- PROCEDURE Sichten;
- BEGIN
- Fenster2;
- REPEAT
- Write('Startspur: '); Read(spur);
- UNTIL spur < 40;
- REPEAT
- Write('Startsektor: '); Read(sektor);
- UNTIL (sektor < 10) AND (sektor > 0);
- REPEAT
- Write('Seite: '); Read(seite);
- UNTIL (seite=0) OR (seite=1);
- Fenster3;
- Write('<+>-vor <->-zurück <ENTER>-in Datei');
- Write(' <ESC>-Ende <F>-Suchen');
- REPEAT
- Info;
- store := Addr(buff[1]);
- SektorLesen(sektor, spur, seite) ;
- Fenster2;
- FOR i := 1 TO 512 DO BEGIN
- IF buff[i] > #7 THEN Write(buff[i]);
- IF WhereY = 22 THEN BEGIN
- WriteLn;
- Write('**** Weiter mit <W> ****');
- REPEAT
- c := ReadKey;
- UNTIL (c='w') OR (c='W');
- ClrScr;
- END;
- END;
- c := ReadKey;
- IF c = '+' THEN SektorVor;
- IF c = '-' THEN SektorZur;
- IF c = 'f' THEN Suchen;
- IF c = #13 THEN BEGIN
- FOR i := 1 TO 512 DO BEGIN
- ChDir('C:\');
- Write(dsk, buff[i]);
- END;
- END;
- UNTIL c=#27;
- END;
-
- PROCEDURE Sichern;
- BEGIN
- Fenster3;
- IF opened THEN Close(dsk);
- Write('Dateiname:');
- ReadLn(datei);
- Assign(dsk, datei);
- Rewrite(dsk);
- opened := TRUE;
- END;
-
- BEGIN
- Intro;
- Fenster1;
- Fenster2;
- Fenster3;
- opened := FALSE;
- datei := '';
- store := Addr(buff[1]);
- REPEAT
- Fenster3;
- Write(' <1>-Sektoren sichten <2>-Datei öffnen',
- ' <3>-Ende');
- c := ReadKey;
- IF c = '1' THEN Sichten;
- IF c = '2' THEN Sichern;
- UNTIL c = '3';
- Window (1, 1, 80, 25);
- TextColor(green);
- TextBackground(black);
- ClrScr;
- IF opened THEN Close(dsk);
- END.
- (* ------------------------------------------------------ *)
- (* Ende von DISKHELP.PAS *)