home *** CD-ROM | disk | FTP | other *** search
/ HOT Scene Stuff / hotscenestuffzyklop1996.iso / diskmags / deutsch / microcod / stod2 / sources / copy.pas next >
Pascal/Delphi Source File  |  1995-01-25  |  6KB  |  197 lines

  1. program Copy;
  2.  
  3. uses dos,crt;       { Units DOS und CRT einbinden }
  4.  
  5. type TBuf = array[1..18,1..512] of byte; { Speichertyp für eine
  6.                                            Spur deklarieren }
  7.  
  8. const MaxVersuche = 5;  { Max. Anzahl an Lese-und Schreibvers. }
  9.  
  10. var Spur,Seite : byte;  { Zähler für Spur und Seite der Disk }
  11.     Errorcode  : byte;  { Rückgabewert der Prozeduren }
  12.     lw         : byte;  { LaufWerksnummer: 0 = A: / 1 = B: }
  13.     Buf        : TBuf;  { Speicher für eine Spur }
  14.     f          : file of TBuf; { Typisierte Datei vom Typ TBuf}
  15.     ch         : char;  { Tastaturabfrage }
  16.  
  17. {***************************************************************}
  18. {* DISKRESET  : Disk-Reset auf allen Laufwerken                *}
  19. {* Eingabe    : ---                                            *}
  20. {* Ausgabe    : ---                                            *}
  21. {***************************************************************}
  22.  
  23. procedure DiskReset;
  24. var regs : registers;
  25. begin
  26.  with regs do begin
  27.    regs.ah := $00;
  28.    regs.dl := 0;
  29.  end;
  30.  intr($13,regs);
  31. end;
  32.  
  33. {***************************************************************}
  34. {* WRITETRACK : Eine Spur schreiben                            *}
  35. {* Eingabe    : Laufwerk, Seite,Spur,Startsektor,Anzahl,Daten  *}
  36. {* Ausgabe    : Fehlercode  ( 0 = OK )                         *}
  37. {***************************************************************}
  38.  
  39. function WriteTrack(     Laufwerk,
  40.                          Seite,
  41.                          Spur,
  42.                          Start,
  43.                          Anzahl     : byte;
  44.                      var Buffer              ) : Byte;
  45.  
  46. var versuche : byte;
  47.     Regs : Registers;
  48.  
  49. begin
  50.   versuche := MaxVersuche;
  51.   repeat
  52.     with Regs do begin
  53.       ah := $03;
  54.       al := Anzahl;         { Anzahl Sektoren pro Spur }
  55.       ch := Spur;
  56.       cl := Start;          { AnfangsSektor }
  57.       dl := Laufwerk;
  58.       dh := Seite;
  59.       es := Seg( Buffer );
  60.       bx := Ofs( Buffer );
  61.     end;
  62.     intr( $13, Regs );
  63.     if ( Regs.flags and fcarry = 1 ) then
  64.       Diskreset;
  65.     dec( Versuche );
  66.   until ( Regs.flags and fcarry = 0 ) or ( Versuche = 0 );
  67.   WriteTrack := Regs.ah;
  68. end;
  69.  
  70. {***************************************************************}
  71. {* ReadTRACK  : Eine Spur lesen                                *}
  72. {* Eingabe    : Laufwerk,Seite,Spur,Startsektor,Anzahl,Daten   *}
  73. {* Ausgabe    : Fehlercode  ( 0 = OK )                         *}
  74. {***************************************************************}
  75.  
  76. function ReadTrack(      Laufwerk,
  77.                          Seite,
  78.                          Spur,
  79.                          Start,
  80.                          Anzahl     : byte;
  81.                      var Buffer              ) : Byte;
  82.  
  83. var versuche : byte;
  84.     Regs : Registers;
  85.  
  86. begin
  87.   versuche := MaxVersuche;
  88.   repeat
  89.     with Regs do begin
  90.       ah := $02;
  91.       al := Anzahl;         { Anzahl Sektoren pro Spur }
  92.       ch := Spur;
  93.       cl := Start;          { AnfangsSektor }
  94.       dl := Laufwerk;
  95.       dh := Seite;
  96.       es := Seg( Buffer );
  97.       bx := Ofs( Buffer );
  98.     end;
  99.     intr( $13, Regs );
  100.     if ( Regs.flags and fcarry = 1 ) then
  101.       Diskreset;
  102.     dec( Versuche );
  103.   until ( Regs.flags and fcarry = 0 ) or ( Versuche = 0 );
  104.   ReadTrack := Regs.ah;
  105. end;
  106.  
  107. {***************************************************************}
  108. {* Read_Disk  : Eine Diskette einlesen in temp-Datei           *}
  109. {* Eingabe    : ---                                            *}
  110. {* Ausgabe    : ---                                            *}
  111. {***************************************************************}
  112.  
  113. procedure Read_Disk;
  114. begin
  115.   for Spur := 0 to 79 do
  116.   for Seite := 0 to 1 do begin
  117.     gotoxy (1,10);writeln('Spur : ',Spur);
  118.     writeln('Seite : ',Seite);
  119.     errorcode := ReadTrack(lw,Seite,Spur,1,18,Buf);
  120.     if errorcode <> 0 then begin
  121.       close(f);
  122.       erase(f);
  123.       exit;
  124.     end;
  125.     write(f,Buf);
  126.     if keypressed then begin
  127.       ch := readkey;
  128.       if ch = #27 then begin
  129.         close(f);
  130.         erase(f);
  131.         exit;
  132.       end;
  133.     end;
  134.   end;
  135.   close(f);
  136. end;
  137.  
  138. {***************************************************************}
  139. {* Write_Disk : Eine Diskette aus temp-Datei beschreiben       *}
  140. {* Eingabe    : ---                                            *}
  141. {* Ausgabe    : ---                                            *}
  142. {***************************************************************}
  143.  
  144.  
  145. procedure Write_Disk;
  146. begin
  147.   reset(f);
  148.   for Spur := 0 to 79 do
  149.     for Seite := 0 to 1 do begin
  150.       gotoxy (1,10);writeln('Spur : ',Spur);
  151.       writeln('Seite : ',Seite);
  152.       read(f,Buf);
  153.       errorcode := WriteTrack(lw,Seite,Spur,1,18,Buf);
  154.       if errorcode <> 0 then begin
  155.         close(f);
  156.         erase(f);
  157.         exit;
  158.       end;
  159.       if keypressed then begin
  160.         ch := readkey;
  161.         if ch = #27 then begin
  162.           close(f);
  163.           erase(f);
  164.           exit;
  165.         end;
  166.       end;
  167.    end;
  168. end;
  169.  
  170. {***************************************************************}
  171. {* Hauptprog  : Hauptprogramm                                  *}
  172. {* Eingabe    : ---                                            *}
  173. {* Ausgabe    : ---                                            *}
  174. {***************************************************************}
  175.  
  176.  
  177. begin
  178.    assign(f,'copy.tmp');   { Temporäre Datei für Diskinhalt }
  179.    rewrite(f);             { erstellen }
  180.    lw := 0;                { 0 = A: / 1 = B: (systemabhängig) }
  181.    DiskReset;              { Reset auf allen Laufwerken }
  182.  
  183.    clrscr;
  184.    writeln('Quelldiskette einlegen !');
  185.    readln;
  186.  
  187.    Read_Disk;   { Gesamte Disk auf HDD einlesen }
  188.  
  189.    clrscr;
  190.    writeln('Zieldiskette einlegen !');
  191.    readln;
  192.  
  193.    Write_Disk;  { Gesamte Temp-Datei von HDD auf Disk schreiben}
  194.  
  195.    close(f);    { Temporäre Datei schließen }
  196.    erase(f);    { und löschen }
  197. end.