home *** CD-ROM | disk | FTP | other *** search
- (*************************************************************************
-
- $RCSfile: OLPrefs.mod $
- Description: Preferences editor for OL.
-
- Created by: fjc (Frank Copeland)
- $Revision: 1.3 $
- $Author: fjc $
- $Date: 1995/01/26 02:07:58 $
-
- Copyright © 1995, Frank Copeland
- This module forms part of the OLPrefs program
- See OLPrefs.doc for conditions of use and distribution
-
- Log entries are at the end of the file.
-
- *************************************************************************)
-
- <* STANDARD- *>
-
- MODULE OLPrefs;
-
- IMPORT
- SYS := SYSTEM, Kernel, Errors, e := Exec, u := Utility, d := Dos,
- du := DosUtil, str := Strings, OLPrefsRev, OLSettings,
- s := OLPrefsStrings, wb := Workbench, i := Icon, WbConsole;
-
- CONST
-
- CopyrightStr = "Copyright © 1995 Frank Copeland\n";
-
- VAR
- startDir : d.FileLockPtr;
-
- (* -- Command line template and parsing ------------------------------- *)
-
- CONST
-
- template =
- "FROM,SAVE/S,SYMSEARCH/K,OBJSEARCH/K,"
- "WITHPATH/K,PROGPATH/K,SYMEXT/K,OBJEXT/K,WITHEXT/K,"
- "LINKCMD/K,LINKARGS/K,ALINK/S,BLINK/S,DLINK/S,"
- "VERBOSE/S,MAKEICONS/S,QUIET/S,NOICONS/S";
-
- optFROM = 0;
- optSAVE = 1;
- optSYMSEARCH = 2;
- optOBJSEARCH = 3;
- optWITHPATH = 4;
- optPROGPATH = 5;
- optSYMEXT = 6;
- optOBJEXT = 7;
- optWITHEXT = 8;
- optLINKCMD = 9;
- optLINKARGS = 10;
- optALINK = 11;
- optBLINK = 12;
- optDLINK = 13;
- optVERBOSE = 14;
- optMAKEICONS = 15;
- optQUIET = 16;
- optNOICONS = 17;
- optCount = 18;
-
- VAR
-
- rdArgs : d.RDArgsPtr;
- args : ARRAY optCount OF SYS.LONGWORD;
-
- (* These are filled in by ParseArgs() *)
-
- from : e.LSTRPTR;
- save : BOOLEAN;
-
- (*
- ** Actual name that OCPrefs was run under
- *)
-
- VAR
- progName : ARRAY 256 OF CHAR;
-
- (*
- ** Console I/O
- *)
-
- (*------------------------------------*)
- PROCEDURE OutStr* ( string : ARRAY OF CHAR );
- <*$CopyArrays-*>
- BEGIN (* OutStr *)
- du.HaltIfBreak ({d.ctrlC});
- IF d.PutStr (string) = 0 THEN END;
- END OutStr;
-
-
- (*------------------------------------*)
- PROCEDURE OutChar* ( c : CHAR );
- BEGIN (* OutChar *)
- du.HaltIfBreak ({d.ctrlC});
- d.PrintF ("%lc", c)
- END OutChar;
-
-
- (*------------------------------------*)
- PROCEDURE OutLn*;
- BEGIN (* OutLn *)
- OutChar ("\n")
- END OutLn;
-
-
- (*------------------------------------*)
- 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;
- 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));
- END OutStr1;
-
-
- (*------------------------------------*)
- PROCEDURE OutBool* ( b : BOOLEAN );
- BEGIN (* OutBool *)
- IF b THEN OutStr ("TRUE")
- ELSE OutStr ("FALSE")
- END
- END OutBool;
-
-
- (*------------------------------------*)
- PROCEDURE* Cleanup (VAR rc : LONGINT);
- VAR oldDir : d.FileLockPtr;
- BEGIN (* Cleanup *)
- IF rdArgs # NIL THEN
- d.FreeArgs (rdArgs);
- d.FreeDosObject (d.rdArgs, rdArgs);
- rdArgs := NIL
- END;
- s.CloseCatalog();
- IF Kernel.fromWorkbench THEN oldDir := d.CurrentDir (startDir) END
- END Cleanup;
-
- (*------------------------------------*)
- PROCEDURE Init ();
-
- BEGIN (* Init *)
- Kernel.SetCleanup (Cleanup);
- s.OpenCatalog (NIL, "");
-
- rdArgs := d.AllocDosObjectTags (d.rdArgs, u.end);
- ASSERT (rdArgs # NIL)
- END Init;
-
- (*------------------------------------*)
- PROCEDURE ParseArgs ();
-
- VAR
- string : e.LSTRPTR;
- i : INTEGER; ignore : BOOLEAN; ch : CHAR;
- verbose, quiet, makeicons, noicons, scan, noscan, link, nolink,
- alink, blink, dlink
- : BOOLEAN;
-
- BEGIN (* ParseArgs *)
- from := SYS.VAL (e.LSTRPTR, args [optFROM]);
- IF from = NIL THEN ignore := OLSettings.LoadPrefs ("OL.prefs")
- ELSE ignore := OLSettings.LoadPrefs (from^)
- END;
-
- save := (SYS.VAL (LONGINT, args [optSAVE]) # 0);
-
- string := SYS.VAL (e.LSTRPTR, args [optSYMSEARCH]);
- IF string # NIL THEN COPY (string^, OLSettings.SymSearch) END;
- string := SYS.VAL (e.LSTRPTR, args [optOBJSEARCH]);
- IF string # NIL THEN COPY (string^, OLSettings.ObjSearch) END;
-
- string := SYS.VAL (e.LSTRPTR, args [optWITHPATH]);
- IF string # NIL THEN COPY (string^, OLSettings.WithPath) END;
- string := SYS.VAL (e.LSTRPTR, args [optPROGPATH]);
- IF string # NIL THEN COPY (string^, OLSettings.ProgPath) END;
-
- string := SYS.VAL (e.LSTRPTR, args [optSYMEXT]);
- IF string # NIL THEN COPY (string^, OLSettings.SymExt) END;
- string := SYS.VAL (e.LSTRPTR, args [optOBJEXT]);
- IF string # NIL THEN COPY (string^, OLSettings.ObjExt) END;
- string := SYS.VAL (e.LSTRPTR, args [optWITHEXT]);
- IF string # NIL THEN COPY (string^, OLSettings.WithExt) END;
-
- string := SYS.VAL (e.LSTRPTR, args [optLINKCMD]);
- IF string # NIL THEN COPY (string^, OLSettings.LinkCmd) END;
- string := SYS.VAL (e.LSTRPTR, args [optLINKARGS]);
- IF string # NIL THEN COPY (string^, OLSettings.LinkArgs) END;
-
- alink := (SYS.VAL (LONGINT, args [optALINK]) # 0);
- blink := (SYS.VAL (LONGINT, args [optBLINK]) # 0);
- dlink := (SYS.VAL (LONGINT, args [optDLINK]) # 0);
-
- IF
- (alink & (blink OR dlink))
- OR (blink & (alink OR dlink))
- OR (dlink & (alink OR blink))
- THEN
- OutStr0 (s.msg1); HALT (d.warn)
- ELSIF alink THEN OLSettings.WithFmt := OLSettings.ALink
- ELSIF blink THEN OLSettings.WithFmt := OLSettings.BLink
- ELSIF dlink THEN OLSettings.WithFmt := OLSettings.DLink
- END;
-
- verbose := (SYS.VAL (LONGINT, args [optVERBOSE]) # 0);
- quiet := (SYS.VAL (LONGINT, args [optQUIET]) # 0);
- IF verbose & quiet THEN OutStr0 (s.msg2); HALT (d.warn)
- ELSIF verbose THEN OLSettings.Verbose := TRUE
- ELSIF quiet THEN OLSettings.Verbose := FALSE
- END;
-
- makeicons := (SYS.VAL (LONGINT, args [optMAKEICONS]) # 0);
- noicons := (SYS.VAL (LONGINT, args [optNOICONS]) # 0);
- IF makeicons & noicons THEN OutStr0 (s.msg3); HALT (d.warn)
- ELSIF makeicons THEN OLSettings.MakeIcons := TRUE
- ELSIF noicons THEN OLSettings.MakeIcons := FALSE
- END;
- END ParseArgs;
-
- (*------------------------------------*)
- PROCEDURE Main ();
-
- (*------------------------------------*)
- PROCEDURE WbArgs ();
-
- VAR
- wbStartup : wb.WBStartupPtr;
- wbArg : wb.WBArg;
- diskObj : wb.DiskObjectPtr;
- toolTypes : wb.ToolTypePtr;
- string : e.LSTRPTR;
-
- (*------------------------------------*)
- PROCEDURE CloneStr ( oldStr : e.LSTRPTR ) : e.LSTRPTR;
- VAR newStr : e.LSTRPTR;
- BEGIN (* CloneStr *)
- SYS.NEW (newStr, str.Length (oldStr^) + 1);
- COPY (oldStr^, newStr^);
- RETURN newStr
- END CloneStr;
-
- BEGIN (* WbArgs *)
- wbStartup := SYS.VAL (wb.WBStartupPtr, Kernel.WBenchMsg);
- IF wbStartup.numArgs > 2 THEN OutStr0 (s.msg12); HALT (d.warn) END;
-
- COPY (wbStartup.argList [0].name^, progName);
- wbArg := wbStartup.argList [wbStartup.numArgs-1];
- startDir := d.CurrentDir (wbArg.lock);
-
- IF i.base # NIL THEN
- (* Attempt to load the icon *)
- diskObj := i.GetDiskObject (wbArg.name^);
- IF diskObj # NIL THEN
- toolTypes := diskObj.toolTypes;
- string := i.FindToolType (toolTypes, "FROM");
- IF string # NIL THEN args [optFROM] := CloneStr (string) END;
- string := i.FindToolType (toolTypes, "SAVE");
- IF string # NIL THEN args [optSAVE] := TRUE END;
-
- string := i.FindToolType (toolTypes, "SYMSEARCH");
- IF string # NIL THEN args [optSYMSEARCH] := CloneStr (string) END;
- string := i.FindToolType (toolTypes, "OBJSEARCH");
- IF string # NIL THEN args [optOBJSEARCH] := CloneStr (string) END;
- string := i.FindToolType (toolTypes, "WITHPATH");
- IF string # NIL THEN args [optWITHPATH] := CloneStr (string) END;
- string := i.FindToolType (toolTypes, "PROGPATH");
- IF string # NIL THEN args [optPROGPATH] := CloneStr (string) END;
- string := i.FindToolType (toolTypes, "SYMEXT");
- IF string # NIL THEN args [optSYMEXT] := CloneStr (string) END;
- string := i.FindToolType (toolTypes, "OBJEXT");
- IF string # NIL THEN args [optOBJEXT] := CloneStr (string) END;
- string := i.FindToolType (toolTypes, "WITHEXT");
- IF string # NIL THEN args [optWITHEXT] := CloneStr (string) END;
- string := i.FindToolType (toolTypes, "LINKCMD");
- IF string # NIL THEN args [optLINKCMD] := CloneStr (string) END;
- string := i.FindToolType (toolTypes, "LINKARGS");
- IF string # NIL THEN args [optLINKARGS] := CloneStr (string) END;
- string := i.FindToolType (toolTypes, "ALINK");
- IF string # NIL THEN args [optALINK] := TRUE END;
- string := i.FindToolType (toolTypes, "BLINK");
- IF string # NIL THEN args [optBLINK] := TRUE END;
- string := i.FindToolType (toolTypes, "DLINK");
- IF string # NIL THEN args [optDLINK] := TRUE END;
- string := i.FindToolType (toolTypes, "VERBOSE");
- IF string # NIL THEN args [optVERBOSE] := TRUE END;
- string := i.FindToolType (toolTypes, "MAKEICONS");
- IF string # NIL THEN args [optMAKEICONS] := TRUE END;
- string := i.FindToolType (toolTypes, "QUIET");
- IF string # NIL THEN args [optQUIET] := TRUE END;
- string := i.FindToolType (toolTypes, "NOICONS");
- IF string # NIL THEN args [optNOICONS] := TRUE END;
-
- i.FreeDiskObject (diskObj)
- END
- END;
-
- IF (SYS.VAL (LONGINT, args [optFROM]) = 0) & (wbStartup.numArgs = 2)
- THEN
- args [optFROM] := wbArg.name
- END
- END WbArgs;
-
- (*------------------------------------*)
- PROCEDURE CliArgs ();
- VAR ignore : BOOLEAN;
- BEGIN (* CliArgs *)
- ASSERT (d.GetProgramName (progName, LEN (progName)));
- IF d.OldReadArgs (template, args, rdArgs) = NIL THEN
- ignore := d.PrintFault (d.IoErr(), "");
- HALT (d.warn)
- END
- END CliArgs;
-
- PROCEDURE PrintPrefs;
- VAR i : INTEGER;
- BEGIN (* PrintPrefs *)
- OutStr0 (s.msg6);
- IF from = NIL THEN OutStr ("OL.prefs")
- ELSE OutStr (from^)
- END;
- OutLn; OutLn;
- OutStr ("SymSearch ......: "); OutStr (OLSettings.SymSearch); OutLn;
- OutStr ("ObjSearch ......: "); OutStr (OLSettings.ObjSearch); OutLn;
- OutStr ("WithPath .......: "); OutStr (OLSettings.WithPath); OutLn;
- OutStr ("ProgPath .......: "); OutStr (OLSettings.ProgPath); OutLn;
- OutStr ("SymExt .........: "); OutStr (OLSettings.SymExt); OutLn;
- OutStr ("ObjExt .........: "); OutStr (OLSettings.ObjExt); OutLn;
- OutStr ("WithExt ........: "); OutStr (OLSettings.WithExt); OutLn;
- OutStr ("LinkCmd ........: "); OutStr (OLSettings.LinkCmd); OutLn;
- OutStr ("LinkArgs .......: "); OutStr (OLSettings.LinkArgs); OutLn;
- OutStr ("WithFmt ........: ");
- CASE OLSettings.WithFmt OF
- OLSettings.ALink : OutStr ("ALink") |
- OLSettings.BLink : OutStr ("BLink") |
- OLSettings.DLink : OutStr ("DLink") |
- END;
- OutLn;
- OutStr ("Verbose ........: "); OutBool (OLSettings.Verbose); OutLn;
- OutStr ("MakeIcons ......: "); OutBool (OLSettings.MakeIcons); OutLn;
- OutLn;
- END PrintPrefs;
-
- (*------------------------------------*)
- PROCEDURE MakeIcon ( file : ARRAY OF CHAR );
-
- CONST defPrefsIcon = "ENV:OLPrefs/def_prefs";
-
- VAR
- icon : ARRAY 256 OF CHAR;
- diskObj : wb.DiskObjectPtr;
- oldTool : e.LSTRPTR;
-
- <*$CopyArrays-*>
- BEGIN (* MakeIcon *)
- ASSERT (i.base # NIL, 100);
- COPY (file, icon); str.Append (".info", icon);
- IF ~du.FileExists (icon) THEN
- diskObj := i.GetDiskObject (defPrefsIcon);
- IF diskObj = NIL THEN diskObj := i.GetDefDiskObject (wb.project) END;
- IF diskObj # NIL THEN
- oldTool := diskObj.defaultTool;
- diskObj.defaultTool := SYS.ADR (progName);
- diskObj.currentX := wb.noIconPosition;
- diskObj.currentY := wb.noIconPosition;
- IF ~i.PutDiskObject (file, diskObj) THEN
- IF d.PrintFault (d.IoErr(), "PutDiskObject") THEN END;
- OutStr1 (s.msg10, icon)
- END;
- diskObj.defaultTool := oldTool;
- i.FreeDiskObject (diskObj)
- ELSE
- IF d.PrintFault (d.IoErr(), "GetDiskObject") THEN END;
- OutStr0 (s.msg11);
- END
- END
- END MakeIcon;
-
- BEGIN (* Main *)
- OutStr (OLPrefsRev.vString);
- OutStr (CopyrightStr);
- OutStr0 (s.msg7);
- OutLn;
-
- IF Kernel.fromWorkbench THEN WbArgs()
- ELSE CliArgs()
- END;
- ParseArgs();
- PrintPrefs();
- IF save THEN
- IF from = NIL THEN
- IF OLSettings.SavePrefs ("OL.prefs") THEN OutStr1 (s.msg8, "OL.prefs")
- ELSE OutStr1 (s.msg9, "OL.prefs")
- END;
- IF Kernel.fromWorkbench THEN MakeIcon ("OL.prefs") END
- ELSE
- IF OLSettings.SavePrefs (from^) THEN OutStr1 (s.msg8, from^)
- ELSE OutStr1 (s.msg9, from^)
- END;
- IF Kernel.fromWorkbench THEN MakeIcon (from^) END
- END
- END;
- END Main;
-
- BEGIN (* OLPrefs *)
- ASSERT (e.SysBase.libNode.version >= 37);
- Errors.Init;
-
- Init();
- Main()
- END OLPrefs.
-
- (***************************************************************************
-
- $Log: OLPrefs.mod $
- # Revision 1.3 1995/01/26 02:07:58 fjc
- # - Release 1.5
- #
- # Revision 1.2 1995/01/09 15:09:56 fjc
- # - Removed icon names, Scan and Link from command line
- # template.
- # - Implemented Workbench arguments.
- # - Added MakeIcon() to create icons for preferences files.
- #
- # Revision 1.1 1995/01/06 16:28:46 fjc
- # Initial revision
- #
- ***************************************************************************)
-