Unit UimagVaa;
Interface
Type  T256 = array [0..255] of byte;
Var   buf256    : T256;
{$F+}
      Errorproc : procedure(F,P,S:byte);
{$F-}

Procedure read256(var drive:file; Piste, secteur, face:byte);


Implementation

Procedure read256(var drive:file;Piste, secteur, face:byte);
Var masque : array[1..20] of byte;
    m :integer;
    j,lon,po : longint;
    i: word;
    k: byte;
    buf: array[1..280] of byte;
    trouve,fin: boolean;
label _oups;
Begin
 lon:=filesize(drive);
 for i:= 1 to 12 do masque[i]:=0;
 for i:= 13 to 15 do masque[i]:=$A1;
 masque[16]:=$FE;
 masque[17]:=piste;
 masque[18]:=face;
 masque[19]:=secteur;
 masque[20]:=$01;
 j:=0;
 repeat
   seek(drive,1+j*256);
   blockread(drive,buf,280,m);
   if m<>280 then begin
     errorproc(Face,Piste,secteur);
     exit;
    end;
   i:=0;
   repeat
_oups:
           k:=10;
     Repeat k:=k+1 until ( (not (buf[i+k]=masque[k])) or (k=21));
     if k=21 then trouve:=true;
     i:=i+1;
   until (trouve=true) or (i=256);
   j:=j+1;
   if trouve=true then
    begin
     seek(drive,(j-1)*256+i+59);
     blockread(drive,k,1,m);
     if k=$FB then
      begin
       blockread(drive,buf256,256,m);
       if m <> 256 then Errorproc(Face,Piste,secteur);
      end         {exit inutile cor trouve = true => sortie}
     else
      begin
       trouve:=false;
       j:=j-1;
       goto _oups;
      end;
    end;
 until trouve=true;
End;    {read256}

{$F+}
Procedure Erreur(F,P,S:byte); {$F-}
 begin
  Write('ProblŠme de lecture Face ',F,' Piste ',P,' Secteur ');
  Writeln(S);
  Halt;
 end;



Begin
Errorproc:=Erreur;
end.