ファイルを探すことは、結構よくあることです。CP/Mでプログラムを作る場合でも同じこと。 今回は、Modula-2からBDOSの機能を呼び出し、ファイルを探す"FileSearch"モジュールを紹介します。
"FileSearch"モジュールは、処理系が提供するモジュールをいくつか使用しています。
このほかに自作モジュール"BdosStruct"があります。これは、BDOSを呼び出すBdos手続きがちょっと使いにくかったので、 処理系を騙す仕組みを作り込みました。
"FileSearch"モジュールのDefinition Moduleです。
DEFINITION MODULE FileSearch; FROM InOut IMPORT Write,WriteString,WriteLn; FROM OpSys IMPORT FCB,CPMStringBuffer,BdosFunctions,Bdos; FROM SYSTEM IMPORT ALLOCATE,SIZE,ADR,WORD; FROM FileNames IMPORT StrToFCB,NameState; FROM BdosStruct IMPORT BdosCommand,BdosReturn; EXPORT QUALIFIED pFileList,FileList,FileStruct,DMA, LoginDisk,MakeFileList,DumpFileList; CONST DMABufferSize = 128; TYPE FileStruct = RECORD CASE BOOLEAN OF TRUE: Disk: CHAR; Fill1: CHAR; Name: ARRAY [0..7] OF CHAR; Fill2: CHAR; Extention: ARRAY [0..2] OF CHAR; | FALSE: Text: ARRAY [0..13] OF CHAR; END; END; pFileList = POINTER TO FileList; FileList = RECORD File: FileStruct; Next: pFileList; END; DMA = ARRAY [0..DMABufferSize-1] OF CHAR; PROCEDURE LoginDisk(FCBBuf: FCB): CHAR; PROCEDURE MakeFileList(FileMatch: ARRAY OF CHAR): pFileList; PROCEDURE DumpFileList(pList: pFileList); END FileSearch.
Imprementation Moduleは、このとおり。
セコメントをする