Program PascalDirectory;
{	Driver program to demonstrate procedure directory()

	All externals in Pascal/Z Users Group Library "ASL.REL"

	translated to Pascal/Z - 07/10/82 (rep)
	added peek(), poke(), call(), and additional comments.

	original program by Daniel S. Hunt
			    822 Green Valley
			    Newbury Park, CA.  91320
	as published in BYTE, June 1982, page 497
}

type	byte = 0..255;
	strng12 = packed array [1..12] of char;


{   peek() returns the contents of the memory location given   }
{   by address. the value returned is a single byte integer.   }
function peek ( address: integer ): byte;
	external;

{   poke() stores the low-order eight bits of abyte   }
{   at the memory location pointed to by address.     }
procedure poke ( address: integer; abyte: byte );
	external;

{$iDIRCTRY.P }

{ Simple driver for procedure directory.  Constructs a string of }
{ 11 chars = '?'.  First char is the binary value of the requested }
{ drive unit.  }
procedure list;
var
  title : strng12;
  ch    : char;
  i	: byte;

	function toupper ( ch: char ): char; external;

begin
  title := '0???????????'; { 12 chars. 1st char = drive unit }
{
  Example string to search for all *.COM files on logged in dr unit...
	  title := '0????????COM';
  NOTE: MUST be in uppercase!
}
  write ( 'LIST DISK DIRECTORY: UNIT "A" OR "B"? ' );
  readln ( ch );
  ch := toupper(ch);

  { construct the proper binary unit identifier:
	0 = logged in drive unit
	1 = drive unit 'A'
	2 = drive unit 'B'
  }
  title[1] := chr( ord(ch) - ord('A') + 1 );
  writeln;
  directory ( title );
  writeln
end{ list };

{$C+}{ enable control-c keypress checking in main program }

BEGIN {MAIN }
  repeat
    list
  until false
END.
