home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / Modula / Utilities / Makefiles / MakeFileInfo.MOD < prev    next >
Encoding:
Modula Implementation  |  1988-01-24  |  4.8 KB  |  168 lines  |  [TEXT/????]

  1. IMPLEMENTATION MODULE MakeFileInfo;
  2.   (*
  3.    * MAKEMAKE.  Create a MAKEFILE for a MODULA-2 program.
  4.    *
  5.    * Written by Steve Tynor, 30 September 1986.
  6.    *            UUCP  : tynor@gitpyr
  7.    *            USNAIL: 2550 Akers Mill Rd. T-2, Atlanta GA. 30339
  8.    *
  9.    * Permission is granted to distribute, copy and change this program as long
  10.    * as this notice remains...
  11.    ---
  12.    *
  13.    * Make.
  14.    * Modified and extended for MacMETH by :
  15.    * J?rgen N?rgaard, 23 october 1987.
  16.    *            UUCP  : jnp@daimi.dk
  17.    *            MAIL  : Dybb?lvej 29, v?r. 2+3, 8240 Risskov, DENMARK
  18.    *
  19.    * Essentially only the parser remains from the original.
  20.    * Extensions are a dependency-tree and a make-like facility.
  21.    *
  22.    *)
  23.  
  24. IMPORT SYSTEM, StringLib0;
  25.  
  26. TYPE
  27.   Ptr = SYSTEM.ADDRESS;
  28.   ProcPtr      = Ptr;
  29.   Byte = CHAR;
  30.   Str255       = ARRAY [0..255] OF CHAR;
  31.   StringPtr    = POINTER TO Str255;
  32.   OSErr    = INTEGER;
  33.   VHSelect     =(v,h);
  34.   VHSelectR    = [v..h];
  35.   Point =
  36.       RECORD
  37.         CASE :INTEGER OF
  38.           0: v: INTEGER;
  39.              h: INTEGER
  40.         | 1: vh: ARRAY VHSelectR OF INTEGER
  41.         END
  42.       END;
  43.   OSType   = ARRAY [1..4] OF CHAR;
  44.   FInfo =
  45.       RECORD
  46.         fdType:     OSType;
  47.         fdCreator:  OSType;
  48.         fdFlags:    BITSET;
  49.         fdLocation: Point;
  50.         fdFldr:     INTEGER
  51.       END;
  52.    (* some general types *)
  53.   QElemPtr = POINTER TO QElem;
  54.   QHdrPtr  = POINTER TO QHdr;
  55.   QHdr =
  56.       RECORD
  57.         qFlags: BITSET;
  58.         qHead:  QElemPtr;
  59.         qTail:  QElemPtr
  60.       END;
  61.    (* FileManager *)
  62.  
  63.   ParamBlkType  = (ioParam, fileParam, volumeParam, cntrlParam);
  64.   ParmBlkPtr    = POINTER TO ParamBlockRec;
  65.   ParamBlockRec =
  66.       RECORD
  67.         qLink:        QElemPtr;
  68.         qType:        INTEGER;
  69.         ioTrap:       INTEGER;
  70.         ioCmdAddr:    Ptr;
  71.         ioCompletion: ProcPtr;
  72.         ioResult:     OSErr;
  73.         ioNamePtr:    StringPtr;
  74.         ioVRefNum:    INTEGER;
  75.         CASE :ParamBlkType OF
  76.           ioParam:
  77.             ioRefNum:    INTEGER;
  78.             ioVersNum:   Byte;                    (* change *)
  79.             ioPermssn:   Byte;                    (* change *)
  80.             ioMisc:      Ptr;
  81.             ioBuffer:    Ptr;
  82.             ioReqCount:  LONGINT;
  83.             ioActCount:  LONGINT;
  84.             ioPosMode:   INTEGER;
  85.             ioPosOffset: LONGINT;
  86.         | fileParam:
  87.             ioFRefNum:    INTEGER;
  88.             ioFVersNum:   Byte;                    (* change *)
  89.             filler1:      Byte;                    (* change *)
  90.             ioFDirIndex:  INTEGER;
  91.             ioFlAttrib:   Byte;                    (* change *)
  92.             ioFlVersNum:  Byte;                    (* change *)
  93.             ioFlFndrInfo: FInfo;
  94.             ioFlNum:      LONGINT;
  95.             ioFlStBlk:    INTEGER;
  96.             ioFlLgLen:    LONGINT;
  97.             ioFlPyLen:    LONGINT;
  98.             ioFlRStBlk:   INTEGER;
  99.             ioFlRLgLen:   LONGINT;
  100.             ioFlRPyLen:   LONGINT;
  101.             ioFlCrDat:    LONGINT;
  102.             ioFlMdDat:    LONGINT;
  103.  
  104.         | volumeParam:
  105.             filler2:     LONGINT;
  106.             ioVolIndex:  INTEGER;
  107.             ioVCrDate:   LONGINT;
  108.             ioVLsBkUp:   LONGINT;
  109.             ioVAtrb:     BITSET;
  110.             ioVNmFls:    INTEGER;
  111.             ioVDirSt:    INTEGER;
  112.             ioVBlLn:     INTEGER;
  113.             ioVNmAlBlks: INTEGER;
  114.             ioVAlBlkSiz: LONGINT;
  115.             ioVClpSiz:   LONGINT;
  116.             ioAlBlSt:    INTEGER;
  117.             ioVNxtFNum:  LONGINT;
  118.             ioVFrBlk:    INTEGER;
  119.        | cntrlParam:
  120.             ioCRefNum: INTEGER;
  121.             csCode:    INTEGER;
  122.             csParam:   ARRAY [0..10] OF INTEGER
  123.       END
  124.     END;
  125.  
  126.  
  127.  PROCEDURE PBGetFInfo(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OSErr;
  128.     CONST
  129.       A0     = 8;
  130.       D0     = 0;
  131.       sync   = 0A000H;
  132.       async  = 0A400H;
  133.  BEGIN 
  134.    SYSTEM.SETREG(A0,paramBlock);
  135.    IF aSync THEN SYSTEM.INLINE(async+0CH) ELSE SYSTEM.INLINE(sync+0CH) END;
  136.    RETURN paramBlock^.ioResult
  137.  END PBGetFInfo;
  138.  
  139.   VAR
  140.     block  : ParamBlockRec;
  141.   PROCEDURE ModifiedTime(VAR name    : ARRAY OF CHAR;
  142.                          VAR success : BOOLEAN;
  143.                          VAR time    : LONGINT);
  144.     VAR
  145.       i,j : INTEGER;
  146.       err : OSErr;
  147.   BEGIN
  148.     i := StringLib0.Length(name);
  149.     FOR j:= i TO 1 BY -1 DO
  150.       name[j] := name[j - 1];
  151.     END;
  152.     name[0] := SYSTEM.VAL(CHAR, i);
  153.     block.ioNamePtr := SYSTEM.ADR(name);
  154.     block.ioCompletion := NIL; (* See below *)
  155.     block.ioVRefNum   := 0;    (* Default volume *)
  156.     block.ioFDirIndex := 0;    (* Use name *)
  157.     block.ioVersNum   := 0C;   (* Not used, has to be zero *)
  158.     block.ioVersNum   := 0C;   (* Not used, has to be zero *)
  159.     err := PBGetFInfo(SYSTEM.ADR(block), FALSE);
  160.     time := block.ioFlMdDat;
  161.     success := (err = 0);
  162.     IF NOT ((err = 0) OR (err = -43)) THEN (* Other Error *) HALT; END;
  163.   END ModifiedTime;
  164.   
  165.  
  166. BEGIN
  167. END MakeFileInfo.
  168.