home *** CD-ROM | disk | FTP | other *** search
- (*************************************************************************
-
- $RCSfile: OCM.mod $
- Description: Machine-specific declarations and operations.
-
- Created by: fjc (Frank Copeland)
- $Revision: 5.10 $
- $Author: fjc $
- $Date: 1995/01/26 00:17:17 $
-
- Copyright © 1993-1995, Frank Copeland
- This module forms part of the OC program
- See OC.doc for conditions of use and distribution
-
- Log entries are at the end of the file.
-
- *************************************************************************)
-
- <* STANDARD- *> <* MAIN- *>
-
- MODULE OCM;
-
- IMPORT
- SYS := SYSTEM, Kernel, e := Exec, d := Dos, du := DosUtil,
- str := Strings, WbConsole, s := OCStrings, wb := Workbench, i := Icon;
-
- CONST
-
- (* Sizes in bytes of basic data types. *)
-
- ByteSize * = 1; BoolSize * = 1; CharSize * = 1;
- SIntSize * = 1; IntSize * = 2; LIntSize * = 4;
- RealSize * = 4; LRealSize * = RealSize;
- BSetSize * = 1; WSetSize * = 2; SetSize * = 4;
- PtrSize * = 4; ProcSize * = 4;
-
- (*
- ** Maximum size of a procedure's parameter list. This must correspond
- ** to the constant used by the stack checking code. See STACKCHK.asm.
- ** *Must* be at least 1500, to allow for the stack requirements of
- ** dos.library functions.
- *)
-
- ParLimit * = 1500;
-
- (* Minima and Maxima of basic data types. *)
-
- MinBool * = 0; MaxBool * = 1; MinChar * = 0; MaxChar * = 0FFH;
- MinSInt * = -80H; MaxSInt * = 7FH;
- MinInt * = -8000H; MaxInt * = 7FFFH;
- MinLInt * = 80000000H; MaxLInt * = 7FFFFFFFH;
- MinSet * = 0; MaxBSet * = 7; MaxWSet * = 15; MaxSet * = 31;
-
- (* REALs are implemented as Motorola FFP Single-Precision reals. *)
- MinReal * = MIN (REAL); (*-9.22337177E18*)
- MaxReal * = MAX (REAL); (*+9.22337177E18*)
- MaxExp * = 18;
-
- (*
- For now, LONGREALs are the same as REALs. In future, they will be
- implemented as IEEE double-precision reals.
- *)
- MinLReal * = MinReal; MaxLReal * = MaxReal; MaxLExp * = MaxExp;
-
- (*
- * Object and item modes, used by Module OCT and others. These are
- * subject to change.
- *)
-
- Undef * = 0;
- Var * = 1; (* local and global variables and value parameters *)
- VarX * = 2; (* indexed array variables *)
- VarArg * = 3; (* C-style vararg pushed on stack *)
- Ind * = 4; (* variable parameters *)
- IndX * = 5; (* indexed dynamic array parameters *)
- RegI * = 6; (* register indirect mode with displacement *)
- RegX * = 7; (* register indirect mode with displacement and index *)
- Lab * = 8; (* absolute mode, the address of a label *)
- LabI * = 9; (* immediate mode, the address of a label *)
- Abs * = 10; (* absolute mode *)
- Con * = 11; (* constants *)
- Push * = 12; (* register indirect mode with predecrement *)
- Pop * = 13; (* register indirect mode with postincrement *)
- Coc * = 14; (* condition code *)
- Reg * = 15; (* register direct mode *)
- Fld * = 16; (* record fields *)
- Typ * = 17; (* types *)
- LProc * = 18; (* local (non-exportable) procedures *)
- XProc * = 19; (* exportable procedures *)
- TProc * = 20; (* Type-bound procedures *)
- SProc * = 21; (* standard procedures *)
- LibCall * = 22; (* Amiga library functions *)
- M2Proc * = 23; (* External procedure (Modula-2 conventions) *)
- CProc * = 24; (* External procedure (C conventions) *)
- AProc * = 25; (* External procedure (Assembly conventions) *)
- Mod * = 26; (* Modules *)
- Head * = 27; (* symbol scope header *)
- RList * = 28; (* Register list for MOVEM *)
-
- (* System flags, used in the foreign code interface *)
-
- DefaultFlag * = -1; (* Use current default *)
- OberonFlag * = 0; (* Use Oberon conventions (default) *)
- M2Flag * = 1; (* Use Modula-2 conventions *)
- CFlag * = 2; (* Use C conventions *)
- BCPLFlag * = 3; (* Use BCPL conventions *)
- AsmFlag * = 4; (* Use Assembler conventions *)
-
- (* Preferences settings *)
-
- CONST
-
- PathLen = 256; (* Max length of a path name. *)
- ExtLen = 16; (* Max length of an extension. *)
- maxPaths = 10; (* Max number of search paths. *)
- OCPF = 04F435046H; (* "OCPF" *) (* Tag for preferences file. *)
- PrefsVersion = 1; (* Preferences file version. *)
-
- (* Icon types *)
- iconSym* = 0; iconObj* = 1; iconErr* = 2;
-
- TYPE
- Path = ARRAY PathLen OF CHAR;
- Extension = ARRAY ExtLen OF CHAR;
-
- VAR
- SymPath*, (* Destination for symbol files. *)
- ObjPath*, (* Destination for object files. *)
- ErrPath*, (* Destination for error files. *)
- SetNames*, (* Pragmas, options and selectors
- ** to be set.
- *)
- ClearNames* (* Pragmas, options and selectors
- ** to be cleared.
- *)
- : Path;
- SymExt*, (* Extension for symbol files *)
- ObjExt*, (* Extension for object files *)
- ErrExt* (* Extension for error files *)
- : Extension;
- Verbose*, (* Verbose compiler output. *)
- Debug*, (* Output symbol hunks *)
- MakeIcons* : BOOLEAN; (* Create icons for symbol, object
- ** and error files.
- *)
-
- searchPath- (* Array of search paths. *)
- : ARRAY maxPaths + 1 OF e.LSTRPTR;
- pathx- : INTEGER; (* Current # of search paths. *)
-
- CONST
-
- defSymPath = ""; (* Default symbol file path. *)
- defObjPath = ""; (* Default object file path. *)
- defErrPath = "T:"; (* Default error file path. *)
- defSymExt = ".sym"; (* Default symbol file extension. *)
- defObjExt = ".obj"; (* Default object file extension. *)
- defErrExt = ".err"; (* Default error file extension. *)
-
- (* Force generation of symbol and object files *)
-
- VAR
-
- Force* : BOOLEAN;
-
- (* Tracing code -- to be removed *)
-
- VAR
- Trace- : BOOLEAN; (* Trace procedure calls *)
- indent : INTEGER; (* Indent level for tracing *)
- logFile : d.FileHandlePtr;
- Digit : ARRAY 17 OF CHAR;
-
- CONST
- logFileName = "CON:100/56/540/189/Oberon.log/CLOSE/WAIT";
- DigitString = "0123456789ABCDEF";
-
- (*------------------------------------*)
- PROCEDURE Write * (ch : CHAR);
-
- VAR ignore : LONGINT;
-
- BEGIN (* Write *)
- IF Trace THEN ignore := d.Write (logFile, ch, 1) END
- END Write;
-
- (*------------------------------------*)
- PROCEDURE WriteStr * (s : ARRAY OF CHAR);
-
- VAR ignore : LONGINT;
-
- <*$CopyArrays-*>
- BEGIN (* WriteStr *)
- IF Trace THEN ignore := d.Write (logFile, s, SYS.STRLEN (s)) END
- END WriteStr;
-
- (*------------------------------------*)
- PROCEDURE WriteInt * (i : LONGINT);
-
- VAR ignore : LONGINT;
-
- (*------------------------------------*)
- PROCEDURE WriteDigit (i : LONGINT);
-
- VAR ignore : LONGINT;
-
- BEGIN (* WriteDigit *)
- IF i > 0 THEN WriteDigit (i DIV 10); Write (Digit [i MOD 10]) END
- END WriteDigit;
-
- BEGIN (* WriteInt *)
- IF Trace THEN
- IF i = 0 THEN Write ("0")
- ELSE IF i < 0 THEN Write ("-") END; WriteDigit (ABS (i))
- END
- END
- END WriteInt;
-
- (*------------------------------------*)
- PROCEDURE TraceIn * (mod, proc : ARRAY OF CHAR);
-
- VAR i : INTEGER;
-
- <*$CopyArrays-*>
- BEGIN (* TraceIn *)
- IF Trace THEN
- i := 0; WHILE i < indent DO WriteStr (" "); INC (i) END;
- WriteStr (">>"); WriteStr (mod); Write ("."); WriteStr (proc);
- Write ("\n");
- INC (indent)
- END
- END TraceIn;
-
- (*------------------------------------*)
- PROCEDURE TraceOut * (mod, proc : ARRAY OF CHAR);
-
- VAR i : INTEGER;
-
- <*$CopyArrays-*>
- BEGIN (* TraceOut *)
- IF Trace THEN
- DEC (indent);
- i := 0; WHILE i < indent DO WriteStr (" "); INC (i) END;
- WriteStr ("<<"); WriteStr (mod); Write ("."); WriteStr (proc);
- Write ("\n");
- END
- END TraceOut;
-
- (*------------------------------------*)
- PROCEDURE StartTrace * ();
-
- BEGIN (* StartTrace *)
- logFile := d.Open (logFileName, d.newFile);
- Trace := TRUE;
- END StartTrace;
-
- (*------------------------------------*)
- PROCEDURE EndTrace * ();
-
- BEGIN (* EndTrace *)
- IF Trace THEN
- d.OldClose (logFile); Trace := FALSE; logFile := NIL
- END
- END EndTrace;
-
- (*
- ** Console I/O
- *)
-
- (*------------------------------------*)
- PROCEDURE OutStr* ( string : ARRAY OF CHAR );
- <*$CopyArrays-*>
- BEGIN (* OutStr *)
- du.HaltIfBreak ({d.ctrlC});
- IF d.PutStr (string) = 0 THEN END;
- IF d.Flush (d.Output()) THEN END
- END OutStr;
-
-
- (*------------------------------------*)
- PROCEDURE OutLn*;
- BEGIN (* OutLn *)
- du.HaltIfBreak ({d.ctrlC});
- IF d.PutStr ("\n") = 0 THEN END;
- END OutLn;
-
-
- (*------------------------------------*)
- PROCEDURE OutChar* ( c : CHAR );
- BEGIN (* OutChar *)
- du.HaltIfBreak ({d.ctrlC});
- d.PrintF ("%lc", c);
- IF d.Flush (d.Output()) THEN END
- END OutChar;
-
-
- (*------------------------------------*)
- PROCEDURE OutInt* ( i : LONGINT );
- BEGIN (* OutInt *)
- du.HaltIfBreak ({d.ctrlC});
- d.PrintF ("%ld", i);
- IF d.Flush (d.Output()) THEN END
- END OutInt;
-
-
- (*------------------------------------*)
- PROCEDURE OutStr0* ( n : LONGINT );
- VAR string : e.LSTRPTR;
- BEGIN (* OutStr0 *)
- du.HaltIfBreak ({d.ctrlC});
- string := s.GetString (n);
- IF d.PutStr (string^) = 0 THEN END;
- IF d.Flush (d.Output()) THEN END
- END OutStr0;
-
-
- (*------------------------------------*)
- PROCEDURE OutStr1* ( n : LONGINT; string : ARRAY OF CHAR );
- VAR format : e.LSTRPTR;
- <*$CopyArrays-*>
- BEGIN (* OutStr1 *)
- du.HaltIfBreak ({d.ctrlC});
- format := s.GetString (n);
- d.PrintF (format^, SYS.ADR (string));
- IF d.Flush (d.Output()) THEN END
- END OutStr1;
-
-
- (*------------------------------------*)
- PROCEDURE OutInt3* ( n, i1, i2, i3 : LONGINT );
- VAR format : e.LSTRPTR;
- BEGIN (* OutInt3 *)
- du.HaltIfBreak ({d.ctrlC});
- format := s.GetString (n);
- d.PrintF (format^, i1, i2, i3);
- IF d.Flush (d.Output()) THEN END
- END OutInt3;
-
-
- (*------------------------------------*)
- PROCEDURE OutInt4* ( n, i1, i2, i3, i4 : LONGINT );
- VAR format : e.LSTRPTR;
- BEGIN (* OutInt4 *)
- du.HaltIfBreak ({d.ctrlC});
- format := s.GetString (n);
- d.PrintF (format^, i1, i2, i3, i4);
- IF d.Flush (d.Output()) THEN END
- END OutInt4;
-
-
- (*------------------------------------*)
- PROCEDURE* PutCh ();
-
- <*$EntryExitCode-*>
- BEGIN (* PutCh *)
- SYS.INLINE (16C0H, (* MOVE.B D0,(A3)+ *)
- 4E75H) (* RTS *)
- END PutCh;
-
-
- (*------------------------------------*)
- PROCEDURE FmtInt3* ( n, i1, i2, i3 : LONGINT; VAR string : ARRAY OF CHAR );
- VAR format : e.LSTRPTR; t : LONGINT;
- BEGIN (* FmtInt3 *)
- t := i1; i1 := i3; i3 := t;
- e.OldRawDoFmtL (format^, i3, PutCh, SYS.ADR (string));
- END FmtInt3;
-
-
- (*------------------------------------*)
- PROCEDURE LoadPrefs* ( fileName : ARRAY OF CHAR ) : BOOLEAN;
-
- VAR
- pf : d.FileHandlePtr;
- s : ARRAY PathLen OF CHAR;
- dir : ARRAY 3 OF e.LSTRPTR;
- tag : LONGINT; i, ver : INTEGER;
- c : CHAR;
-
- PROCEDURE Read ( fh : d.FileHandlePtr; VAR x : SYS.BYTE );
- VAR i : LONGINT;
- BEGIN (* Read *)
- i := d.FGetC (fh); x := CHR (i)
- END Read;
-
- PROCEDURE ReadBytes
- ( fh : d.FileHandlePtr; VAR x : ARRAY OF SYS.BYTE; n : LONGINT );
- VAR i : LONGINT;
- BEGIN (* ReadBytes *)
- i := d.FRead (fh, x, 1, n)
- END ReadBytes;
-
- PROCEDURE ReadString ( fh : d.FileHandlePtr; VAR x : ARRAY OF CHAR );
- VAR ch : CHAR; i : INTEGER;
- BEGIN (* ReadString *)
- i := 0;
- REPEAT
- Read (fh, ch); x [i] := ch; INC (i)
- UNTIL ch = 0X
- END ReadString;
-
- PROCEDURE ReadBool ( fh : d.FileHandlePtr; VAR x : BOOLEAN );
- VAR i : SHORTINT;
- BEGIN (* ReadBool *)
- Read (fh, i); x := (i # 0)
- END ReadBool;
-
- <*$CopyArrays-*>
- BEGIN (* LoadPrefs *)
- dir [0] := SYS.ADR ("PROGDIR:");
- dir [1] := SYS.ADR ("ENV:OC");
- dir [2] := NIL;
- IF du.Search (dir, fileName, s) THEN
- pf := d.Open (s, d.oldFile);
- IF pf # NIL THEN
- ReadBytes (pf, tag, 4);
- IF tag = OCPF THEN
- Read (pf, c); ver := ORD (c);
- IF ver >= 1 THEN
- ReadString (pf, SymPath);
- ReadString (pf, ObjPath);
- ReadString (pf, ErrPath);
- ReadString (pf, SetNames);
- ReadString (pf, ClearNames);
- ReadString (pf, SymExt);
- ReadString (pf, ObjExt);
- ReadString (pf, ErrExt);
-
- LOOP
- ReadString (pf, s);
- IF s = "" THEN EXIT END;
- SYS.NEW (searchPath [pathx], str.Length (s) + 1);
- COPY (s, searchPath [pathx]^); INC (pathx)
- END;
- searchPath [pathx] := NIL;
-
- ReadBool (pf, Verbose);
- ReadBool (pf, MakeIcons);
- ReadBool (pf, Debug);
-
- d.OldClose (pf);
- RETURN TRUE
- ELSE
- d.OldClose (pf);
- RETURN FALSE
- END;
- ELSE
- d.OldClose (pf);
- RETURN FALSE
- END;
- ELSE
- RETURN FALSE
- END;
- ELSE
- RETURN FALSE
- END;
- END LoadPrefs;
-
- (*------------------------------------*)
- PROCEDURE SavePrefs* ( fileName : ARRAY OF CHAR ) : BOOLEAN;
-
- VAR pf : d.FileHandlePtr; tag : LONGINT; i : INTEGER; ver : CHAR;
-
- PROCEDURE Write ( fh : d.FileHandlePtr; x : SYS.BYTE );
- VAR i : LONGINT;
- BEGIN (* Write *)
- i := d.FPutC (fh, ORD (x))
- END Write;
-
- PROCEDURE WriteBytes
- ( fh : d.FileHandlePtr; VAR x : ARRAY OF SYS.BYTE; n : LONGINT );
- VAR i : LONGINT;
- BEGIN (* WriteBytes *)
- i := d.FWrite (fh, x, 1, n)
- END WriteBytes;
-
- PROCEDURE WriteString ( fh : d.FileHandlePtr; x : ARRAY OF CHAR );
- <*$CopyArrays-*>
- BEGIN (* WriteString *)
- WriteBytes (fh, x, str.Length (x)); Write (fh, 0X)
- END WriteString;
-
- PROCEDURE WriteBool ( fh : d.FileHandlePtr; x : BOOLEAN );
- VAR i : SHORTINT;
- BEGIN (* WriteBool *)
- IF x THEN i := 1 ELSE i := 0 END; Write (fh, i)
- END WriteBool;
-
- <*$CopyArrays-*>
- BEGIN (* SavePrefs *)
- pf := d.Open (fileName, d.newFile);
- IF pf # NIL THEN
- tag := OCPF; WriteBytes (pf, tag, 4);
- Write (pf, CHR (PrefsVersion));
- WriteString (pf, SymPath);
- WriteString (pf, ObjPath);
- WriteString (pf, ErrPath);
- WriteString (pf, SetNames);
- WriteString (pf, ClearNames);
- WriteString (pf, SymExt);
- WriteString (pf, ObjExt);
- WriteString (pf, ErrExt);
- FOR i := 0 TO pathx - 1 DO WriteString (pf, searchPath [i]^) END;
- WriteString (pf, "");
- WriteBool (pf, Verbose);
- WriteBool (pf, MakeIcons);
- WriteBool (pf, Debug);
-
- d.OldClose (pf);
- RETURN TRUE
- ELSE
- RETURN FALSE
- END
- END SavePrefs;
-
- (*------------------------------------*)
- PROCEDURE ClearSearchPaths*;
- BEGIN (* ClearSearchPaths *)
- pathx := 0; searchPath [0] := NIL
- END ClearSearchPaths;
-
- (*------------------------------------*)
- PROCEDURE AddSearchPath * (newPath : e.LSTRPTR);
-
- BEGIN (* AddSearchPath *)
- IF pathx >= maxPaths THEN
- HALT (922)
- ELSE
- searchPath [pathx] := newPath; INC (pathx); searchPath [pathx] := NIL
- END;
- END AddSearchPath;
-
- (*------------------------------------*)
- PROCEDURE FindSymbolFile *
- ( module : ARRAY OF CHAR;
- VAR path : ARRAY OF CHAR )
- : BOOLEAN;
-
- VAR name : ARRAY 32 OF CHAR;
-
- <*$CopyArrays-*>
- BEGIN (* FindSymbolFile *)
- COPY (module, name); str.Append (SymExt, name);
- RETURN du.Search (searchPath, name, path)
- END FindSymbolFile;
-
- (*------------------------------------*)
- PROCEDURE MakeFileName
- ( module, ext : ARRAY OF CHAR;
- VAR path : ARRAY OF CHAR );
-
- VAR name : ARRAY 32 OF CHAR;
-
- <*$CopyArrays-*>
- BEGIN (* MakeFileName *)
- COPY (module, name); str.Append (ext, name);
- IF d.AddPart (path, name, LEN (path)) THEN END
- END MakeFileName;
-
- (*------------------------------------*)
- PROCEDURE SymbolFileName *
- ( module : ARRAY OF CHAR;
- VAR path : ARRAY OF CHAR;
- fullPath : BOOLEAN );
-
- <*$CopyArrays-*>
- BEGIN (* SymbolFileName *)
- IF fullPath THEN
- IF ~du.DirExists (SymPath) THEN OutStr1 (s.OCM3, SymPath) END;
- COPY (SymPath, path); MakeFileName (module, SymExt, path)
- ELSE
- COPY (module, path); str.Append (SymExt, path)
- END;
- END SymbolFileName;
-
- (*------------------------------------*)
- PROCEDURE ObjectFileName *
- ( module : ARRAY OF CHAR;
- VAR path : ARRAY OF CHAR );
-
- <*$CopyArrays-*>
- BEGIN (* ObjectFileName *)
- IF ~du.DirExists (ObjPath) THEN OutStr1 (s.OCM3, ObjPath) END;
- COPY (ObjPath, path); MakeFileName (module, ObjExt, path)
- END ObjectFileName;
-
- (*------------------------------------*)
- PROCEDURE ErrorFileName *
- ( module : ARRAY OF CHAR;
- VAR path : ARRAY OF CHAR );
-
- <*$CopyArrays-*>
- BEGIN (* ErrorFileName *)
- IF ~du.DirExists (ErrPath) THEN OutStr1 (s.OCM3, ErrPath) END;
- COPY (ErrPath, path); MakeFileName (module, ErrExt, path)
- END ErrorFileName;
-
-
- (*------------------------------------*)
- PROCEDURE MakeIcon* ( file : ARRAY OF CHAR; type : INTEGER );
-
- VAR
- icon : Path;
- diskObj : wb.DiskObjectPtr;
- filePart : e.LSTRPTR;
-
- <*$CopyArrays-*>
- BEGIN (* MakeIcon *)
- IF MakeIcons THEN
- ASSERT (i.base # NIL, 100);
- COPY (file, icon); str.Append (".info", icon);
- IF ~du.FileExists (icon) THEN
- CASE type OF
- iconSym : icon := "ENV:OC/def_sym" |
- iconObj : icon := "ENV:OC/def_obj" |
- iconErr : icon := "ENV:OC/def_err" |
- END;
- diskObj := i.GetDiskObject (icon);
- IF diskObj = NIL THEN diskObj := i.GetDefDiskObject (wb.project) END;
- IF diskObj # NIL THEN
- diskObj.currentX := wb.noIconPosition;
- diskObj.currentY := wb.noIconPosition;
- IF ~i.PutDiskObject (file, diskObj) THEN
- IF d.PrintFault (d.IoErr(), "PutDiskObject") THEN END;
- OutStr1 (s.OCM1, file)
- END;
- i.FreeDiskObject (diskObj)
- ELSE
- IF d.PrintFault (d.IoErr(), "GetDiskObject") THEN END;
- OutStr0 (s.OCM2)
- END
- END
- END
- END MakeIcon;
-
-
- (*------------------------------------*)
- PROCEDURE* Cleanup (VAR rc : LONGINT);
-
- BEGIN (* Cleanup *)
- IF logFile # NIL THEN d.OldClose (logFile); logFile := NIL END;
- s.CloseCatalog()
- END Cleanup;
-
- BEGIN
- Kernel.SetCleanup (Cleanup);
- s.OpenCatalog (NIL, "");
- Digit := DigitString; indent := 0; Trace := FALSE; logFile := NIL;
-
- SymPath := defSymPath; ObjPath := defObjPath; ErrPath := defErrPath;
- SymExt := defSymExt; ObjExt := defObjExt; ErrExt := defErrExt;
- Verbose := TRUE; MakeIcons := FALSE; Debug := FALSE; Force := FALSE;
- searchPath [0] := NIL; pathx := 0
- END OCM.
-
- (***************************************************************************
-
- $Log: OCM.mod $
- Revision 5.10 1995/01/26 00:17:17 fjc
- - Release 1.5
-
- Revision 5.9 1995/01/16 10:30:02 fjc
- - Uses direct calls to AmigaDOS for reading and writing
- preferences files.
-
- Revision 5.8 1995/01/09 13:44:53 fjc
- - Deleted icon names from preferences file format.
- - Added MakeIcon().
- - Added checks for the existence of directories when
- constructing file names.
-
- Revision 5.7 1995/01/05 11:27:26 fjc
- - Added check for Ctrl-C break to console I/O procedures.
-
- Revision 5.6 1995/01/03 21:00:03 fjc
- - Renamed from OCG to OCM.
- - Added support for preferences settings:
- - Added variables to hold current settings.
- - Added LoadPrefs() and SavePrefs().
- - Added ClearSearchPaths().
- - Added console I/O procedures to replace module Out.
- - Added support for catalogs using module OCStrings.
-
- Revision 5.5 1994/12/16 16:59:59 fjc
- - Added code for constructing file names and searching for
- symbol files.
-
- Revision 5.4 1994/09/25 17:30:29 fjc
- - Overhauled object modes.
- - Added system flag declarations.
-
- Revision 5.3 1994/09/19 23:10:05 fjc
- - Re-implemented Amiga library calls
-
- Revision 5.2 1994/09/15 10:10:58 fjc
- - Replaced switches with pragmas.
- - Uses Kernel instead of SYSTEM.
-
- Revision 5.1 1994/09/03 19:29:08 fjc
- - Bumped version number
-
- ***************************************************************************)
-