home *** CD-ROM | disk | FTP | other *** search
Modula Implementation | 1988-01-24 | 4.8 KB | 168 lines | [TEXT/????] |
- IMPLEMENTATION MODULE MakeFileInfo;
- (*
- * MAKEMAKE. Create a MAKEFILE for a MODULA-2 program.
- *
- * Written by Steve Tynor, 30 September 1986.
- * UUCP : tynor@gitpyr
- * USNAIL: 2550 Akers Mill Rd. T-2, Atlanta GA. 30339
- *
- * Permission is granted to distribute, copy and change this program as long
- * as this notice remains...
- ---
- *
- * Make.
- * Modified and extended for MacMETH by :
- * J?rgen N?rgaard, 23 october 1987.
- * UUCP : jnp@daimi.dk
- * MAIL : Dybb?lvej 29, v?r. 2+3, 8240 Risskov, DENMARK
- *
- * Essentially only the parser remains from the original.
- * Extensions are a dependency-tree and a make-like facility.
- *
- *)
-
- IMPORT SYSTEM, StringLib0;
-
- TYPE
- Ptr = SYSTEM.ADDRESS;
- ProcPtr = Ptr;
- Byte = CHAR;
- Str255 = ARRAY [0..255] OF CHAR;
- StringPtr = POINTER TO Str255;
- OSErr = INTEGER;
- VHSelect =(v,h);
- VHSelectR = [v..h];
- Point =
- RECORD
- CASE :INTEGER OF
- 0: v: INTEGER;
- h: INTEGER
- | 1: vh: ARRAY VHSelectR OF INTEGER
- END
- END;
- OSType = ARRAY [1..4] OF CHAR;
- FInfo =
- RECORD
- fdType: OSType;
- fdCreator: OSType;
- fdFlags: BITSET;
- fdLocation: Point;
- fdFldr: INTEGER
- END;
- (* some general types *)
- QElemPtr = POINTER TO QElem;
- QHdrPtr = POINTER TO QHdr;
- QHdr =
- RECORD
- qFlags: BITSET;
- qHead: QElemPtr;
- qTail: QElemPtr
- END;
- (* FileManager *)
-
- ParamBlkType = (ioParam, fileParam, volumeParam, cntrlParam);
- ParmBlkPtr = POINTER TO ParamBlockRec;
- ParamBlockRec =
- RECORD
- qLink: QElemPtr;
- qType: INTEGER;
- ioTrap: INTEGER;
- ioCmdAddr: Ptr;
- ioCompletion: ProcPtr;
- ioResult: OSErr;
- ioNamePtr: StringPtr;
- ioVRefNum: INTEGER;
- CASE :ParamBlkType OF
- ioParam:
- ioRefNum: INTEGER;
- ioVersNum: Byte; (* change *)
- ioPermssn: Byte; (* change *)
- ioMisc: Ptr;
- ioBuffer: Ptr;
- ioReqCount: LONGINT;
- ioActCount: LONGINT;
- ioPosMode: INTEGER;
- ioPosOffset: LONGINT;
- | fileParam:
- ioFRefNum: INTEGER;
- ioFVersNum: Byte; (* change *)
- filler1: Byte; (* change *)
- ioFDirIndex: INTEGER;
- ioFlAttrib: Byte; (* change *)
- ioFlVersNum: Byte; (* change *)
- ioFlFndrInfo: FInfo;
- ioFlNum: LONGINT;
- ioFlStBlk: INTEGER;
- ioFlLgLen: LONGINT;
- ioFlPyLen: LONGINT;
- ioFlRStBlk: INTEGER;
- ioFlRLgLen: LONGINT;
- ioFlRPyLen: LONGINT;
- ioFlCrDat: LONGINT;
- ioFlMdDat: LONGINT;
-
- | volumeParam:
- filler2: LONGINT;
- ioVolIndex: INTEGER;
- ioVCrDate: LONGINT;
- ioVLsBkUp: LONGINT;
- ioVAtrb: BITSET;
- ioVNmFls: INTEGER;
- ioVDirSt: INTEGER;
- ioVBlLn: INTEGER;
- ioVNmAlBlks: INTEGER;
- ioVAlBlkSiz: LONGINT;
- ioVClpSiz: LONGINT;
- ioAlBlSt: INTEGER;
- ioVNxtFNum: LONGINT;
- ioVFrBlk: INTEGER;
- | cntrlParam:
- ioCRefNum: INTEGER;
- csCode: INTEGER;
- csParam: ARRAY [0..10] OF INTEGER
- END
- END;
-
-
- PROCEDURE PBGetFInfo(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OSErr;
- CONST
- A0 = 8;
- D0 = 0;
- sync = 0A000H;
- async = 0A400H;
- BEGIN
- SYSTEM.SETREG(A0,paramBlock);
- IF aSync THEN SYSTEM.INLINE(async+0CH) ELSE SYSTEM.INLINE(sync+0CH) END;
- RETURN paramBlock^.ioResult
- END PBGetFInfo;
-
- VAR
- block : ParamBlockRec;
- PROCEDURE ModifiedTime(VAR name : ARRAY OF CHAR;
- VAR success : BOOLEAN;
- VAR time : LONGINT);
- VAR
- i,j : INTEGER;
- err : OSErr;
- BEGIN
- i := StringLib0.Length(name);
- FOR j:= i TO 1 BY -1 DO
- name[j] := name[j - 1];
- END;
- name[0] := SYSTEM.VAL(CHAR, i);
- block.ioNamePtr := SYSTEM.ADR(name);
- block.ioCompletion := NIL; (* See below *)
- block.ioVRefNum := 0; (* Default volume *)
- block.ioFDirIndex := 0; (* Use name *)
- block.ioVersNum := 0C; (* Not used, has to be zero *)
- block.ioVersNum := 0C; (* Not used, has to be zero *)
- err := PBGetFInfo(SYSTEM.ADR(block), FALSE);
- time := block.ioFlMdDat;
- success := (err = 0);
- IF NOT ((err = 0) OR (err = -43)) THEN (* Other Error *) HALT; END;
- END ModifiedTime;
-
-
- BEGIN
- END MakeFileInfo.
-