CONST vers = 1.2; so = 0; { offset added to sector number } perscreen = 20; { pause long displays after lines } minsector = 0; maxfatsize = 1024; sectorsizemax = 512; buffersize = sectorsizemax; menumargin = 18; clustersizemax = 2048; namesize = 8; typesize = 3; first = true; next = false; eodirectory = $ff; mtdirectory = 1; founddir = 0; cr = #$0d; (* Ascii control chars *) eofmk = #$1a; esc = #$1b; dc3 = #$13; TYPE sizearray = ARRAY[1..4] OF byte; str20 = string[20]; bufr = ARRAY[1..buffersize] OF char; cbufr = ARRAY[1..clustersizemax] OF char; fatarray = ARRAY[1..maxfatsize] OF byte; fat_id = (unidentified, ss8spt, ds8spt, ss9spt, ds9spt, b_20 ); nameary = ARRAY[1..namesize] OF char; typeary = ARRAY[1..typesize] OF char; namestr = string[20]; anyfile = FILE; (* for generic file ops *) pc_fcb = RECORD name : nameary; extention : typeary; attribute : byte; rsrvd : ARRAY[12..21] OF byte; time : integer; date : integer; clusterno : integer; filesize : sizearray; END; cpmfcb = RECORD drivecode : byte; name : nameary; extention : typeary; extent : byte; s1, s2 : byte; rc : byte; rsrvd : ARRAY[16..31] OF byte; cr : byte; r0, r1, r2 : byte; END; VAR cpm_buf : ARRAY[1..128] OF char; done : boolean; selection : char; i : integer; defaultdisk : integer; ms_dos_drive : integer; cpm_drive : integer; cpm_drivech : char; track : integer; sector : integer; secspercluster : integer; fat : fatarray; fatsize : integer; sectorsize : integer; recordspersector : integer; dirsecs : integer; ntracks : integer; nsectors : integer; nclusters : integer; identity : fat_id; firstfatsector : integer; firstdirsector : integer; firstdatasector : integer; firstdatatrack : integer; dirsector : integer; dirtrack : integer; dirsectorcount : integer; singlesided : boolean; dos_fcb : ^pc_fcb; cpm_fcb : cpmfcb; buffer : bufr; dirbuffer : bufr; diroffset : integer; dirname : namestr; clusterbuffer : cbufr; maxsector : integer; outfile : FILE; bioserror : boolean; volumename : boolean; subdirname : boolean;