{getdir5 -- get disk directory sectors
 (C) Copyright 1982 by Walter H. Rauser
	getdir5.pas -- version using pascal convention for buffer.
			under development  <whr  5-16-82>
			just recovered from FAT crash caused by Linker!!!
			exchanged disks as directed because file not on disk
      
}
PROGRAM TESTGETDIR(input,output);
type	drivetype = (A,B);
		dirtype = array[1..112] of record	{DOS 1.10 Double Sided Drives}
					name   [0]:string(8);
					ext    [8]:string(3);
					attr  [11]:byte;
					resvd [12]:array[1..10] of byte;
					time  [22]:array[1..2] of byte;
					date  [24]:array[1..2] of byte;
				 cluster1 [26]:array[1..2] of byte;
					sizel [28]:array[1..2] of byte;
					sizeh [30]:array[1..2] of byte;
				  end;

var		dir1 :dirtype;
		drive :drivetype;

{EXTERN declarations}
		function GETSEC( drive,first,numof :integer;
						 var buffer :dirtype;  var errorc :integer
						):boolean; EXTERN ;

{GETDIR - function to get directory sectors from disk.}
		function GETDIR( drive :drivetype;
						 var dir :dirtype ):boolean;

		var  dr, errorc :integer;

		begin {getdir}
			dr := ord(drive);
			{add code to get FAT and test for double sided drives}
			{only get first four file sectors to show how it's done}
			if getsec( dr, 3, 4, dir, errorc ) then getdir := true
			else begin
				getdir := false;
				writeln('Get Directory Sector Failed');
				writeln('ERROR CODE = ', errorc:6:16 );
			end;
		end; {getdir}

{-------------------------------------------------------------------}

var	i,j :integer;
begin {testgetdir}
	for i:= 1 to 112 do dir1[i].name := '        ';
	drive := B;
	if getdir( drive, dir1 ) then begin
		for i := 1 to 64 do
				with  dir1[i] do
				[
				write(i:5,'  ', name,'.',ext,'  ',attr:2:16,'  ');
				for j:=1 to 10 do write(resvd[j]:2:16);     write('  ');
				for j:= 1 to 2 do write(time[j]:2:16);      write('  ');
				for j:= 1 to 2 do write(date[j]:2:16);      write('  ');
				for j:= 1 to 2 do write(cluster1[j]:2:16);  write('  ');
				for j:= 1 to 2 do write(sizel[j]:2:16);     write('  ');
				for j:= 1 to 2 do write(sizeh[j]:2:16);     write('  ');
				writeln;
				]
	end
	else abort('Aborting in TESTGETDIR',1,1);
end. {testgetdir}

