home *** CD-ROM | disk | FTP | other *** search
- { This program demonstrates how to call BDOS routines in a TURBO PASCAL
- program. The program will print the names of the files on the default
- drive.
-
- Copyright (C) April 1984, Jack Y. Fong
- Commercial and publication rights are reserved.
- Copies made for personal use are permitted and encouraged.
- }
-
- PROGRAM JYFDIR;
-
- TYPE
- { This is the File Control Block, I made it a record but it does not
- have to be a record.
- }
- FCB = RECORD
- AFILE: STRING[44];
- END;
- { This record defines the arguments for the BDOS and INTR functions
- }
- REGPACK = RECORD
- AX,BX,CX,DX,BP,SI,DI,DS,ES,FLAGS: INTEGER;
- END;
-
- VAR
- { Allocate the variables.
- }
- FAT,DTA: FCB;
- REGS: REGPACK;
-
- BEGIN
- { Initialize the File Control Block , this area will be used by DOS to
- hold the search information, once function 11 is executed do not
- make any changes to this area if function 12 is to be used. }
- FAT.AFILE := #255#0#0#0#0#0#0#0'???????????'#0#0#0#0 +
- ' ';
- { Initialize the Disk Transfer Area, this is where DOS will put the
- FCB read in from the disk directory. It can be used by the program
- for a FCB. Confusing isn't it? }
- DTA.AFILE := #0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0+
- #0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0;
- { Pass the address of the DTA to the DOS . }
- REGS.DS := SEG(DTA.AFILE); { Get segment value }
- REGS.DX := OFS(DTA.AFILE)+1; { Get the offset, add one since the first
- byte of a string stores the string length. }
- { Call MSDOS function 1AH to set the disk transfer address. }
- REGS.AX := 6656; { Set AH to function 1AH, AL to 0 }
- MSDOS(REGS);
- { Set the registers to the address of the search FCB. }
- REGS.DS := SEG(FAT.AFILE); { Get segment value }
- REGS.DX := OFS(FAT.AFILE)+1; { Get the offset, add one since the first
- byte of a string stores the string length. }
- { Call MSDOS function 11H to search for the first file entry }
- REGS.AX := 4352; { Set AH to function 11H, AL to 0 }
- MSDOS(REGS);
- WRITE(#10#13' ',COPY(DTA.AFILE,9,8),'.',COPY(DTA.AFILE,17,3));
- { Get the rest of the file names. }
- REGS.AX := 4608; { Set AH to function 12H, AL to 0 }
- WHILE REGS.AX = 4608 DO
- BEGIN
- MSDOS(REGS);
- WRITE(#10#13' ',COPY(DTA.AFILE,9,8),'.',COPY(DTA.AFILE,17,3));
- END;
- END.AFILE,17,3));
- END;
- END.