( directory routine 8/30/83 )
36 string dir.entry
36 string dir.fcb
0 variable dir.count

: dir.ldgzro dup 10 < if print " 0 " then . ;
: dir.ldgspce dup 10 < if spce then . ;
: dir.namechar dir.entry peek putc ;

: dir.name 9 1 do i dir.namechar loop
 spce 4 1 do i 8 + dir.namechar loop ;

: dir.data 16 htab
  31 dir.entry peekw dup 0 <> if
  . print " : " else drop then
  29 dir.entry peekw abs.
  23 htab
  25 dir.entry peekw push
   i 32 / 16 mod dir.ldgspce  print " - "
   i 32 mod dir.ldgzro print " - "
   i 512 / 80 + . pop
  32 htab
  23 dir.entry peekw push
   i 4096 / dup 12 mod
   dup 0 = if 12 + then
   dir.ldgspce print " : "
   i 32 / 32 mod dir.ldgzro
   0 > if print " p "
     else print " a " then cr
   pop dir.count 1 + -> dir.count ;
: dir
 print " Enter (optional) search string (ex. A:*.*): "
 pad readln
 pad peek 13 =
 if
  pad assign " *.* "
 then
 pad -> si
 0 dir.fcb -> di
 hex 2900 -> ax 21 int decimal
 0 -> dir.count
 0 dir.entry -> dx
 hex 1A00 -> ax 21 int decimal
 0 dir.fcb -> dx
 hex 1100 -> ax 21 int decimal
 begin ax 255 and 0 = while
  dir.name
  dir.data
  dir.count 20 mod 0 = if
  print " (press any key) "
  getc drop cr then
  0 dir.fcb -> dx
  hex 1200 -> ax 21 int decimal
 repeat
dir.count .
print "  File(s) " ;
close run
