home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1989 / 01 / tricks / direct.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1988-06-23  |  2.8 KB  |  64 lines

  1. (* ------------------------------------------------------ *)
  2. (*                     DIRECT.PAS                         *)
  3. (*    Einlesen des Directories unter Z80 Turbo Pascal     *)
  4. (*          (c) 1988 by J.Tucht und TOOLBOX               *)
  5. (* ------------------------------------------------------ *)
  6.  
  7. TYPE
  8.   CPMDir = ARRAY [1..100,1..11] OF CHAR;
  9.                      (* muss unbedingt gross genug sein ! *)
  10. VAR
  11.   f        : FILE;
  12.   x        : INTEGER;
  13.   Dir      : CPMDir;
  14.   WildCards: BOOLEAN ABSOLUTE $3F3;
  15.                               (* nur für Turbo Pascal 3.0 *)
  16. FUNCTION LiesDir(VAR f; VAR Dir: CPMDir): INTEGER;
  17. VAR DMA: ARRAY [0..127] OF BYTE;
  18. BEGIN
  19.   Inline(
  20.          $11/DMA/            {        LD DE,DMA     }
  21.          $0E/$1A/            {        LD C,26       }
  22.          $CD/$05/$00         {        CALL 5        }
  23.          $ED/$5B/Dir/        {        LD DE,(Dir)   }
  24.          $0E/$11/            {        LD C,17       }
  25.          $21/$00/$00/        {        LD HL,0       }
  26.          $E5/                {        PUSH HL       }
  27.          $18/$13/            {        JR DirLP.     }
  28.          $23/                { DirLP  INC HL        }
  29.          $E5/                {        PUSH HL       }
  30.          $0F/                {        RRCA          }
  31.          $0F/                {        RRCA          }
  32.          $0F/                {        RRCA          }
  33.          $06/$00/            {        LD B,0        }
  34.          $4F/                {        LD C,A        }
  35.          $21/DMA+1/          {        LD HL,DMA+1   }
  36.          $09/                {        ADD HL,BC     }
  37.          $01/$0B/$00/        {        LD BC,11      }
  38.          $ED/$B0/            {        LDIR          }
  39.          $0E/$12/            {        LD C,18       }
  40.          $D5/                { DirLP. PUSH DE       }
  41.          $2A/F/              {        LD HL,(F)     }
  42.          $11/$0C/$00/        {        LD DE,12      }
  43.          $19/                {        ADD HL,DE     }
  44.          $EB/                {        EX DE,HL      }
  45.          $CD/$05/$00/        {        CALL 5        }
  46.          $D1/                {        POP DE        }
  47.          $E1/                {        POP HL        }
  48.          $B7/                {        OR A          }
  49.          $F8/                {        RET M         }
  50.          $18/$DB)            {        JR DirLP      }
  51. END;
  52.  
  53. BEGIN
  54.   WildCards := TRUE;
  55.   Assign (f,'*.*');
  56.   FOR x:=1 TO LiesDir(f, Dir) DO Write(x:4,':',Dir[x]);
  57.   Write('Waehle eine Nummer --> '); ReadLn(x);
  58.        (* einen Dateinamen in den CP/M-File Control Block *)
  59.        (* eintragen und sehen, ob die Datei gefunden wird *)
  60.   Move(Dir[x], Mem[Addr(f)+13],11);
  61.   Reset(f)
  62. END.
  63. (* ------------------------------------------------------ *)
  64. (*                Ende von DIRECT.PAS                     *)