Source code of LoadMAC.CMD - part 1

 
/* ------------------------------------------------------------------ */
/* LoadMac.CMD - REXX program to work with the macro space            */
/*                                                                    */
/* (c) Copyright Bernd Schemmer 1994 - 1997                           */
/*                                                                    */
/* Author:                                                            */
/*   Bernd Schemmer                                                   */
/*   Stalburgstr. 14                                                  */
/*   D-60318 Frankfurt am Main                                        */
/*   Germany                                                          */
/*   Bernd.Schemmer@gmx.de                                            */
/*                                                                    */
/* History:                                                           */
/*   27.09.1994 /bs v1.00                                             */
/*     - initial release                                              */
/*                                                                    */
/*   07.09.1997 /bs v2.00                                             */
/*     - first public release for RXT&T                               */
/*                                                                    */
/* Distribution:                                                      */
/*   This code may be distributed freely and used in other programs.  */
/*   Please give credit where credit is due.                          */
/*   If you need further help, feel free to contact me at the address */
/*   noted above.                                                     */
/*                                                                    */
/* Description:                                                       */
/*   LOADMAC is a program to work with the REXX macro space.          */
/*   Using this program you may load programs into or drop programs   */
/*   from the macro space.                                            */
/*                                                                    */
/* Usage:                                                             */
/*   LoadMac {CLEAR}                                                  */
/*           {ADD:macroCMD{,B|A}} {DROP:macroName}                    */
/*           {SAVE:macroImage} {LOAD:macroImage}                      */
/*           {QUERY:macroName}                                        */
/*           {REORDER:macroName{,B|A}}                                */
/*           {/L:logfile} {/H} {/Silent} {/NoSound} {/NoAnsi}         */
/*           {/Trace}                                                 */
/*                                                                    */
/* where:                                                             */
/*   CLEAR                                                            */
/*     clear the macro space                                          */
/*                                                                    */
/*   ADD:macroCMD{,B|A}                                               */
/*     add the macro from the file 'macroCMD' to the macro space      */
/*     'macroCMD' must be the name of a file with a REXX program.     */
/*     You can set the name for the macro using the string            */
/*                                                                    */
/*         /* MACRONAME: myName */                                    */
/*     or                                                             */
/*         /* MACRONAME: "m y n a m e " */                            */
/*                                                                    */
/*     as first line of the file. If this line is missing, the macro  */
/*     is created with the name of the file (without the extension).  */
/*     If you omit the extension of the file, LOADMAC adds .CMD to    */
/*     the name.                                                      */
/*     To overwrite an existing macro add a leading exclamation mark  */
/*     (!) to the macro filename.                                     */
/*     Use B (before) or A (after) for the position of the macro in   */
/*     the search order of the interpreter.                           */
/*     The default is 'B' (before).                                   */
/*                                                                    */
/*   DROP:macroName                                                   */
/*     drop the macro 'macroName' from the macro space                */
/*     LOADMAC first tries to read a CMD file called 'macroName' with */
/*     the macro to get the real name of the macro (according to the  */
/*     ADD parameter). If this fails, it uses the macro name          */
/*     'macroName'. To force the use of the macro name 'macroName'    */
/*     add a leading exclamation mark '!' to 'macroName'.             */
/*                                                                    */
/*   QUERY:macroName                                                  */
/*     Check if the macro 'macroName' exists in the macro space       */
/*     (returns 1 - macro exist with option 'B', 2 - macro exists     */
/*      with options 'A' or 0 - macro does not exist if it            */
/*      is the last parameter)                                        */
/*     LOADMAC first tries to read a CMD file called 'macroName' with */
/*     the macro to get the real name of the macro (according to the  */
/*     ADD parameter). If this fails, it uses the macro name          */
/*     'macroName'. To force the use of the macro name 'macroName'    */
/*     add a leading exclamation mark '!' to 'macroName'.             */
/*                                                                    */
/*   REORDER:macroName{,A|B}                                          */
/*     Reorder the macro 'macroName' in the macro space. The new      */
/*     order can either be A (after) or B (before). The default is    */
/*     B (before).                                                    */
/*     LOADMAC first tries to read a CMD file called 'macroName' with */
/*     the macro to get the real name of the macro (according to the  */
/*     ADD parameter). If this fails, it uses the macro name          */
/*     'macroName'. To force the use of the macro name 'macroName'    */
/*     add a leading exclamation mark '!' to 'macroName'.             */
/*                                                                    */
/*   SAVE:macroImage                                                  */
/*     Save the complete macro space into the file 'macroImage'       */
/*     If you omit the extension of the file, LOADMAC adds .MAC to    */
/*     the name.                                                      */
/*     To overwrite an existing file add a leading exclamation mark   */
/*     (!) to the file name.                                          */
/*                                                                    */
/*   LOAD:macroImage                                                  */
/*     Load the file 'macroImage' (created with SAVE:macroImage)      */
/*     into the macro space.                                          */
/*     If you omit the extension of the file, LOADMAC adds .MAC to    */
/*     the name.                                                      */
/*     Note that you can only use this call, if the macro space is    */
/*     empty!                                                         */
/*                                                                    */
/*                                                                    */
/*   /L:logFile - logfile is the name of the logfile :-)              */
/*                This parameter is case-sensitive!                   */
/*                def.: do not use a logfile                          */
/*                                                                    */
/*   /H         - show usage, you may also use                        */
/*                /h, /?, /HELP, -h, -H, -HELP or -?                  */
/*                (MAIN is not called!)                               */
/*                                                                    */
/*   /Silent    - suppress all messages (except error messages)       */
/*                You should also use the parameter /L:logfile if you */
/*                use this parameter!                                 */
/*                You may also set the environment variable SILENT to */
/*                "1" to suppress all messages.                       */
/*                                                                    */
/*   /NoSound   - suppress all sounds. You may also set the           */
/*                environment variable SOUND to "0" to suppress the   */
/*                sounds.                                             */
/*                                                                    */
/*   /NoAnsi    - do not use ANSI codes. You may also set the         */
/*                environment variable ANSI to "0" to suppress the    */
/*                use of ANSI codes.                                  */
/*                                                                    */
/*   /Trace     - turn TRACE on before calling MAIN. You may also     */
/*                set the environment variable RXTTRACE to ON to      */
/*                turn the TRACE mode for MAIN on.                    */
/*                                                                    */
/* note:                                                              */
/*   You must use at least one blank to separate the parameters.      */
/*   All parameters are processed in sequential order.                */
/*   You can use all parameters as often as you like.                 */
/*                                                                    */
/*   Use leading and trailing ' for filenames containing blanks:      */
/*                                                                    */
/*     LOADMAC SAVE:'My File.SAV'                                     */
/*                                                                    */
/*   or                                                               */
/*                                                                    */
/*     LOADMAC 'SAVE:My File.SAV'                                     */
/*                                                                    */
/*   LOADMAC searches all existing files in the current directory and */
/*   in the directories listed in the PATH variable.                  */
/*   To suppress this search use an absolute or relative path for     */
/*   the filename.                                                    */
/*                                                                    */
/*   To add a macro you may omit the keyword 'ADD:':                  */
/*                                                                    */
/*     LOADMAC myMacro                                                */
/*                                                                    */
/*   is equal to                                                      */
/*                                                                    */
/*     LOADMAC ADD:myMacro                                            */
/*                                                                    */
/*   (Exception: To load a macro called CLEAR you must use the        */
/*               keyword ADD)                                         */
/*   Be aware that the macro spaces saved with the parameter SAVE     */
/*   contains tokenized REXX code. Thus you can't use a saved macro   */
/*   space created with Object REXX under Classic REXX and vice       */
/*   versa.                                                           */
/*                                                                    */
/* returncodes:                                                       */
/*      0 - execution okay                                            */
/*                                                                    */
/*    240 ... 252                                                     */
/*          reserved for the runtime system                           */
/*    253 - syntax help called (parameter /h)                         */
/*    254 - user break (CTRL-C)                                       */
/*    255 - internal runtime system error                             */
/*   else - program specific errors                                   */
/*   (see also the description for the parameter QUERY:macroname      */
/*    above)                                                          */
/*                                                                    */
/* Notes:                                                             */
/*                                                                    */
/* This program requires the REXXUTIL DLL supplied with Object REXX - */
/* but you don't need to install Object REXX as the default REXX      */
/* interpreter to use that DLL. You can use the Object Rexx REXXUTIL  */
/* DLL also with Classic REXX. To do this copy the new REXXUTIL.DLL   */
/* and the DLL REXXCRT.DLL into the directory C:\OS2\DLL (assuming C: */
/* is your OS/2 boot drive).                                          */
/*                                                                    */
/* If you don't want to use the new REXXUTIL DLL as default DLL you   */
/* can copy it to another directory (def.: C:\OREXX).                 */
/* You must change the variable global.__RexxUtilDLL below if you use */
/* another directory. Note that you cannot change the name of the     */
/* DLL!                                                               */
/*                                                                    */
/* Further note: You can also use the functions for macro space       */
/* handling from Dave Boll's DLL RXU - but you have to change the     */
/* source code of LOADMAC to reflect use of RXU.                      */
/*                                                                    */
/* LOADMAC also needs the function SysSearchPath from the REXXUTIL    */
/* DLL.                                                               */
/*                                                                    */
/* Environment variables used while running the program               */
/*                                                                    */
/* ■ ANSI                                                             */
/*   - Set the environment variable 'ANSI' to "0" or "OFF" if you     */
/*     don't want colors.                                             */
/*                                                                    */
/* ■ PATCHDRIVE                                                       */
/*   - Set the environment variable 'PATCHDRIVE' to the drive with    */
/*     a patched version of your program (if any exist, see the       */
/*     routine 'I!.__CheckPatch' for the algorithm used ).            */
/*                                                                    */
/* ■ SILENT                                                           */
/*   - Set the environment variable 'SILENT' to "1" or "ON" to        */
/*     suppress all messages.                                         */
/*                                                                    */
/* ■ SOUND                                                            */
/*   - Set the environment variable 'SOUND' to "0" or "OFF" if you    */
/*     don't want sounds.                                             */
/*                                                                    */
/* ■ RXTTRACE                                                         */
/*   - Set the environment variable 'RXTTRACE' to "MAIN" to turn the  */
/*     trace mode for the function MAIN on.                           */
/*                                                                    */
/* ■ VERBOSE                                                          */
/*   - Set the environment variable 'VERBOSE' to any value not equal  */
/*     to '' if you want debug information. If the value of the       */
/*     variable is 'DEBUG', the error handler turns interactive trace */
/*     on if an error occured.                                        */
/*     Note that the error handler also turns interactive trace on if */
/*     the environment variable RXTTRACE is set to 'MAIN' or if the   */
/*     parameter '/TRACE' is specified.                               */
/*                                                                    */
/*                                                                    */
/* Based on TEMPLATE.CMD v3.06, TEMPLATE is (c) 1996 Bernd Schemmer,  */
/* Stalburgstr 14, 60318 Frankfurt, Germany, Bernd.Schemmer@gmx.de    */
/* ------------------------------------------------------------------ */

  call trace 'off'      /* turn interactive trace off                 */
                        /* use this statement as the first statement  */
                        /* in your program, to ignore the value of    */
                        /* the environment variable RXTRACE.          */

                  global. = ''  /* init the stem global. with ''      */

/*** change the following values to your need                       ***/

                        /* additional parameter                 v3.06 */
                        /* (string for the usage routine)       v3.06 */
  global.__userUsage  = ,                                    /* v3.06 */
    '{CLEAR} {ADD:macroCMD{,B|A}} {DROP:macroName}' ,
    '{QUERY:macroName} {REORDER:macroName{,B|A}}',
    '{SAVE:macroImage} {LOAD:macroImage}'

                                /* name & path of the REXXUTIL DLL    */
                                /* from Object REXX if it is not the  */
                                /* default REXXUTIL DLL               */
         global.__RexxUtilDLL = 'C:\OREXX\REXXUTIL.DLL'

         global.__Version = 2.00         /* Version of YOUR program   */

       global.__SignOnMsg = 1   /* set to 0 if you do not want the    */
                                /* program start and end messages     */

         global.__NeedCID = 1   /* set to 1 if you need CID support   */

      global.__NeedColors = 1   /* set to 1 if you want colored msgs  */

  global.__NeedPatchCheck = 1   /* set to 1 if you want the program   */
                                /* to search for a patched version of */
                                /* this program                       */

              /* set default values for EXPOSELIST if necessary       */
/*             exposeList = ''                                        */

              /* name of the routine for the message handling         */
              /* note: Use '' for hardcoded messages                  */
/*          global.__GetMsg = 'GETMSG'                                */

             /* base number for the message numbers (def.: 1000)      */
/*          global.__BaseMsgNo = 1000                                 */

             /* note: set the variable prog.__STDOUT to "STDERR:"     */
             /*       or "NUL" if your program is a filter program!   */

  prog.__STDOUT = 'STDOUT'        /* necessary for Object REXX        */
  prog.__STDERR = 'STDOUT'        /* necessary for Object REXX        */
                                                                   /*!*/
/***                End of variables to change                      ***/
/*      HINT: The further program code is in the function MAIN        */

/***        End of Part 1 of the source code of TEMPLATE.CMD        ***/


[Back: LoadMac.cmd]
[Next: Source code of LoadMAC.CMD - part 4]