Path: utzoo!utgpu!news-server.csri.toronto.edu!rpi!usc!snorkelwacker.mit.edu!ira.uka.de!smurf!artcom0!hb.maus.de!ms.maus.de!Kai_Henningsen From: Kai_Henningsen@ms.maus.de (Kai Henningsen) Newsgroups: comp.lang.pascal Subject: Re: how can I readout my FAT? Message-ID: <14187@ms.maus.de> Date: 27 Apr 91 11:58:00 GMT Distribution: world,comp Organization: Maus Mailbox Netz - UUCP-Gateway Bremen Lines: 58 ... last part ... begin writeln; writeln; ResetDisk; p:=paramstr(1); if (paramcount<>1) or (length(p)<>1) then runerror; dr:=ord(upcase(p[1]))-ord('A'); ss:=SecSize(dr); getmem(bootsec, ss); err:=absread(dr, 1, 0, bootsec^); if err<>0 then runerror(err); with bootsec^do begin writeln(OEM); FAT0:=res; ROOT0:=FAT0+(longint(nFAT)*spFAT); DATA0:=ROOT0+(RootSz*longint(sizeof(DIRent))+ss-1) div ss - 2*spc; dps:=ss div sizeof(DIRent); dpc:=ss*spc div sizeof(DIRent); Clust:=spc; DskSz:=size; if size=0 then begin dsksz:=size40; if sig=$29 then begin writeln(volume,' ',nix2); end; end; FATbytes:=((DskSz-DATA0) div spc)*2; if fatbytes<8000 then shortFAT:=true else begin FATsecs:=(FATbytes+(ss-1)) div ss; shortFAT:=FATsecs<>spFAT; end; if shortFAT then begin FATbytes:=(((DskSz-DATA0) div spc)*3+1) div 2; FATsecs:=(FATbytes+(ss-1)) div ss; end; writeln(shortFAT,' ',FATsecs,' ',spFAT); if FATsecs<>spFAT then runerror; FATsecs:=spFAT; FATbytes:=FATsecs*ss; end; writeln(FAT0,' ',ROOT0,' ',DATA0); getmem(FAT, sizeof(pointer)*FATsecs); for i:=0 to FATsecs-1 do begin getmem(FAT^[i], ss); err:=AbsRead(dr, 1, i+FAT0, FAT^[i]^); if err<>0 then runerror(err); end; if FATentry(0)<>($ff00 or BootSec^.Media) then runerror; if FATentry(1)<>$ffff then runerror; TraverseRoot; ResetDisk; end. MfG Kai