home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 8 Other / 08-Other.zip / lcf103.zip / install.cmd next >
OS/2 REXX Batch file  |  1994-01-06  |  110KB  |  3,269 lines

  1. /*--------------------------------------------------------------------*/
  2. /*                                                                    */
  3. /*  Purpose:                                                          */
  4. /*  --------                                                          */
  5. /*                                                                    */
  6. /*    To install the LCF Code Server on a system.                     */
  7. /*                                                                    */
  8. /*  Version:                                                          */
  9. /*  --------                                                          */
  10. /*                                                                    */
  11. /*    This command file will handle V1R1L003.                         */
  12. /*                                                                    */
  13. /*  Description:                                                      */
  14. /*  -----------                                                       */
  15. /*                                                                    */
  16. /*    This REXX command file REQUIRES OS/2 2.0 or later.              */
  17. /*                                                                    */
  18. /*  Usage:                                                            */
  19. /*  ------                                                            */
  20. /*                                                                    */
  21. /*    INSTALL                                                         */
  22. /*                                                                    */
  23. /*    This file has no parameters, all required information is        */
  24. /*    solicited from the user as needed.                              */
  25. /*                                                                    */
  26. /*  Note:                                                             */
  27. /*  -----                                                             */
  28. /*                                                                    */
  29. /*    If you are installing the OS/2 licensed material from a         */
  30. /*    CD-ROM which is not presented as a selection choice on the      */
  31. /*    menu when action 4 is run, then modify the following two        */
  32. /*    lines to match your CD-ROM's label and directory prefix:        */
  33. /*                                                                    */
  34.       cdromlabel = OS2_CD_ROM
  35.       cdsubdir   = OS2SE21     
  36.  
  37. /*    For example, when loading OS/2 material from an international   */
  38. /*    CD-ROM which contains versions of OS/2 for several languages    */
  39. /*    the following line would be used to load the German version     */
  40. /*    (country code 049):                                             */
  41. /*                                                                    */
  42. /*    cdsubdir   = OS221_049                                          */
  43.  
  44. /*                                                                    */
  45. /*  Rexx Coding Conventions:                                          */
  46. /*  ------------------------                                          */
  47. /*                                                                    */
  48. /*    Reserved REXX names are uppercase, like IF and THEN.            */
  49. /*                                                                    */
  50. /*    Function names have the first letter uppercase.                 */
  51. /*                                                                    */
  52. /*    Variables are lowercase.                                        */
  53. /*                                                                    */
  54. /*                                                                    */
  55. /*  (C) 1993-94 ForeFront Software Inc.  All rights reserved.         */
  56. /*                                                                    */
  57. /*--------------------------------------------------------------------*/
  58.  
  59. /*--------------------------------------------------------------------*/
  60. /*    Initialization.                                                 */
  61. /*--------------------------------------------------------------------*/
  62.  
  63.   /* TRACE ?R */
  64.  
  65.   relName    = 'LCF 1.1'
  66.   bundleName = 'V1R1L003'
  67.  
  68.   trialDays   = 30
  69.   trialAccess = 1
  70.   trialCsName = 'OS2BENCH'
  71.  
  72.   defTrialDays = trialDays
  73.  
  74.   nbOption   = 0
  75.   floppy     = 0
  76.   cdrom      = 0
  77.   osver      = 0
  78.   log        = '>>NUL'
  79.  
  80.   CALL Rxfuncadd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
  81.   CALL Sysloadfuncs
  82.  
  83.   rc = SETLOCAL()
  84.  
  85.   env = 'OS2ENVIRONMENT'
  86.  
  87.   errfile = 'FALSE'
  88.  
  89.   SIGNAL on ERROR
  90.   SIGNAL on FAILURE
  91.   SIGNAL on HALT
  92.  
  93.   currdir = Directory()
  94.  
  95.   '@ECHO OFF'
  96.   'MODE  CO80,43'
  97.   '@ECHO ON'
  98.  
  99. /*--------------------------------------------------------------------*/
  100. /*  Analyse any parameters we were passed.                            */
  101. /*--------------------------------------------------------------------*/
  102.  
  103.   PARSE UPPER ARG parm1 .
  104.  
  105.  
  106.   IF parm1 <> '' THEN DO
  107.  
  108.     IF parm1 = '/H' THEN SIGNAL ENDHELP
  109.     IF parm1 = '/?' THEN SIGNAL ENDHELP
  110.     IF parm1 = '?'  THEN SIGNAL ENDHELP
  111.  
  112.     CALL SysCls
  113.     pos = SysCurPos( 0, 0 )
  114.  
  115.     SAY
  116.     SAY '╔════════════════════════════════════════════════════════════════╗'
  117.     SAY '║ ERROR: This INSTALL command file does not accept parameters    ║'
  118.     SAY '║        on the command line other than /? or /H.  Re-enter the  ║'
  119.     SAY '║        command without any parameters.  It will prompt for all ║'
  120.     SAY '║        required input.                                         ║'
  121.     SAY '╚════════════════════════════════════════════════════════════════╝'
  122.     SAY
  123.     SIGNAL ENDERROR
  124.   END
  125.  
  126.  
  127. /*--------------------------------------------------------------------*/
  128. /*    Ensure OS/2 2.xx is being run.                                  */
  129. /*--------------------------------------------------------------------*/
  130.  
  131.   os2ver = SysOS2Ver()                
  132.  
  133.   IF Substr( os2ver, 1, 1 ) <> '2' THEN DO
  134.  
  135.     CALL SysCls
  136.     pos = SysCurPos( 0, 0 )
  137.  
  138.     SAY
  139.     SAY '╔════════════════════════════════════════════════════════════════╗'
  140.     SAY '║ ERROR: LCF installation requires OS/2 Version 2.0 or higher.   ║'
  141.     SAY '╚════════════════════════════════════════════════════════════════╝'
  142.     SIGNAL ENDERROR
  143.   END
  144.  
  145.  
  146. /*--------------------------------------------------------------------*/
  147. /*    If we are being run from a diskette then save the drive name    */
  148. /*    for possible future use.                                        */
  149. /*--------------------------------------------------------------------*/
  150.  
  151.   inDrive = Filespec( 'Drive', currdir )
  152.  
  153.   IF inDrive == 'A:' | inDrive == 'B:' THEN
  154.      floppy = inDrive
  155.  
  156.  
  157. /*--------------------------------------------------------------------*/
  158. /*  Present a list of install actions and ask which is required.      */
  159. /*--------------------------------------------------------------------*/
  160.  
  161. ACTIONS:
  162.  
  163.   IF destination <> "DESTINATION" THEN  /* Since entry drive not      */
  164.      dir = Directory( destination )     /* always equal to dest drive */
  165.  
  166.   dir = Directory(currdir)
  167.  
  168.   CALL SysCls
  169.   pos = SysCurPos( 0, 0 )
  170.  
  171.   SAY
  172.   SAY '╔════════════════════════════════════════════════════════════════╗'
  173.   SAY '║ Indicate from the list below which installation action you     ║'
  174.   SAY '║ want performed.                                                ║'
  175.   SAY '║                                                                ║'
  176.   SAY '║ You must eventually perform all the non-optional actions.      ║'
  177.   SAY '║ Actions should be performed in numeric order.                  ║'
  178.   SAY '╟──────────────┬─────────────────────────────────────────────────╢'
  179.   SAY '║    ACTION    │  Description                                    ║'
  180.   SAY '╟──────────────┼─────────────────────────────────────────────────╢'
  181.   SAY '║              │                                                 ║'
  182.   SAY '║      1       │  View the LCF READ.ME file.                     ║'
  183.   SAY '║              │                                                 ║'
  184.   SAY '║      2       │  Unload LCF product from the distribution       ║'
  185.   SAY '║              │  diskette.                                      ║'
  186.   SAY '║              │                                                 ║'
  187.   SAY '║      3       │  Set up LCF folder and icons on Desktop.        ║'
  188.   SAY '║              │                                                 ║'
  189.   SAY '║      4       │  Load OS/2 Licensed Material.                   ║'
  190.   SAY '║              │                                                 ║'
  191.   SAY '║      5       │  Load LAN Licensed Material.                    ║'
  192.   SAY '║              │                                                 ║'
  193.   SAY '║      6       │  Create Mini-OS/2 package to install later.     ║'
  194.   SAY '║              │  (Optional)                                     ║'
  195.   SAY '║              │                                                 ║'
  196.   SAY '║      7       │  Authorize the LCF to run.                      ║'
  197.   SAY '║              │                                                 ║'
  198.   SAY '║      X       │  Exit this installation program.                ║'
  199.   SAY '║              │                                                 ║'
  200.   SAY '╚══════════════╧═════════════════════════════════════════════════╝'
  201.   SAY 'Enter ACTION and press enter:'
  202.  
  203.   PULL key
  204.  
  205.   '@ECHO *' log
  206.   '@ECHO Action 'key' selected  'Date()'  'Time() log 
  207.  
  208.   SELECT
  209.  
  210.     WHEN key == 'X' THEN
  211.       SIGNAL DONE
  212.  
  213.     WHEN key == 1 THEN
  214.       SIGNAL README
  215.  
  216.     WHEN key == 2 THEN
  217.       SIGNAL UNLOAD
  218.  
  219.     WHEN key == 3 THEN
  220.       SIGNAL FOLDER
  221.  
  222.     WHEN key == 4 THEN
  223.       SIGNAL LOADOS2
  224.  
  225.     WHEN key == 5 THEN
  226.       SIGNAL LOADLAN
  227.  
  228.     WHEN key == 6 THEN
  229.       SIGNAL MINIOS2
  230.  
  231.     WHEN key == 7 THEN
  232.       SIGNAL AUTHLCF
  233.  
  234.     OTHERWISE DO
  235.       SAY 
  236.       SAY 'Invalid action selected.'
  237.       Call PAUSEMSG
  238.       SIGNAL ACTIONS
  239.     END
  240.  
  241.   END
  242.  
  243.  
  244. /**********************************************************************/
  245. /*  The code to handle each of the above actions now follows          */
  246. /**********************************************************************/
  247.  
  248. /*--------------------------------------------------------------------*/
  249. /*  ACTION 1: Invoke the View facility to allow reading of the        */
  250. /*            READ.ME file.                                           */
  251. /*--------------------------------------------------------------------*/
  252.  
  253. README:
  254.  
  255.  IF Stream('README.INF', 'c', 'query exists') == '' THEN DO
  256.  
  257.      IF Stream('..\DOC\README.INF', 'c', 'query exists') == '' THEN DO
  258.  
  259.         CALL SysCls
  260.         pos = SysCurPos( 0, 0 )
  261.  
  262.         SAY
  263.         SAY '╔════════════════════════════════════════════════════════════════╗'
  264.         SAY '║                                                                ║'
  265.         SAY '║ ERROR:  You cannot view the README.INF file from this option   ║'
  266.         SAY '║         if the INSTALL command was not started with the        ║'
  267.         SAY '║         current directory set to the LCF installation          ║'
  268.         SAY '║         diskette or the \LCF\REXX directory.                   ║' 
  269.         SAY '║                                                                ║'
  270.         SAY '╚════════════════════════════════════════════════════════════════╝'
  271.         CALL PAUSEMSG
  272.      END
  273.      ELSE
  274.         'VIEW ..\DOC\README.INF'
  275.  END
  276.  ELSE
  277.      'VIEW README.INF'                 /* view from current directory */
  278.  
  279.  /* note, diskette must not be write protected, view updates INF file */
  280.  
  281.  SIGNAL ACTIONS
  282.  
  283.  
  284. /*--------------------------------------------------------------------*/
  285. /*  ACTION 2: Unload the LCF product from the distribution diskette.  */
  286. /*--------------------------------------------------------------------*/
  287. /*            First, prompt the user to enter the target directory.   */
  288. /*--------------------------------------------------------------------*/
  289.  
  290. UNLOAD:
  291.  
  292.   CALL GETDESTINATION
  293.  
  294. /*--------------------------------------------------------------------*/
  295. /*    If the destination directory does not exist, then create it.    */
  296. /*  This eliminates the question from XCOPY if the destination is a   */
  297. /*  directory or file.                                                */
  298. /*--------------------------------------------------------------------*/
  299.  
  300.   newdir = Directory( destination )
  301.  
  302.   IF newdir <> destination THEN DO
  303.  
  304.     rc = PATHMK( destination )
  305.  
  306.     IF rc <> 0 THEN DO
  307.       SAY
  308.       SAY 'Error:  Unable to create directory 'destination'.' 
  309.       CALL PAUSEMSG
  310.       SIGNAL ACTIONS
  311.     END
  312.  
  313.   END
  314.   ELSE DO
  315.  
  316.     WARNLOOP:
  317.  
  318.     CALL SysCls
  319.     pos = SysCurPos( 0, 0 )
  320.  
  321.     i = 15 - Length(destination)
  322.     IF i < 0 THEN i = 0
  323.     blks = Substr(' ', 1, i, ' ')
  324.  
  325.     SAY
  326.     SAY '╔════════════════════════════════════════════════════════════════╗'
  327.     SAY '║                                                                ║'
  328.     SAY '║                             WARNING                            ║'
  329.     SAY '║                                                                ║'
  330.     SAY '║                      'destination' ALREADY EXISTS!      'blks'     ║' 
  331.     SAY '║                                                                ║'
  332.     SAY '║  Any modifications you have made to LCF distributed scripts    ║'
  333.     SAY '║  or model configuration files will be OVERWRITTEN.             ║'
  334.     SAY '║                                                                ║'
  335.     SAY '║  If you want to stop this command to take a backup of your     ║'
  336.     SAY '║  changes enter X now.  Enter C to continue with the install.   ║' 
  337.     SAY '║                                                                ║'
  338.     SAY '╚════════════════════════════════════════════════════════════════╝'
  339.     SAY 'Enter X or C now and press enter:'
  340.     PULL ans
  341.     IF ans =  'X' THEN SIGNAL DONE
  342.     IF ans <> 'C' THEN SIGNAL WARNLOOP
  343.  
  344.   END
  345.  
  346.   log = '>>'destination'\install.log'
  347.  
  348.   '@ECHO *' log
  349.   '@ECHO **************************************************************'log
  350.   '@ECHO Unloading LCF 'bundleName' 'Date()'  'Time() log
  351.   '@ECHO GetDest:  OS/2 = 'SysOS2Ver()' 'log
  352.   '@ECHO           destination = 'destination' 'log
  353.   '@ECHO           Entry directory = 'currdir' 'log
  354.  
  355.   dir = Directory( currdir )               /* restore entry directory */
  356.  
  357.   IF Stream(bundleName'.DAT', 'c', 'query exists') == '' THEN DO
  358.  
  359.      '@ECHO  Error: 'bundleName'.DAT not found in 'currdir' 'log
  360.      CALL SysCls
  361.      pos = SysCurPos( 0, 0 )
  362.  
  363.      SAY
  364.      SAY '╔════════════════════════════════════════════════════════════════╗'
  365.      SAY '║                                                                ║'
  366.      SAY '║ ERROR:  You cannot run the UNLOAD action if the 'bundlename'.DAT   ║'
  367.      SAY '║         file is not in the current directory when the install  ║'
  368.      SAY '║         command was issued.                                    ║'
  369.      SAY '║                                                                ║'
  370.      SAY '╚════════════════════════════════════════════════════════════════╝'
  371.      CALL PAUSEMSG
  372.      SIGNAL ACTIONS
  373.   END
  374.  
  375. /*--------------------------------------------------------------------*/
  376. /*  Ask which NetBios support is required.                            */
  377. /*--------------------------------------------------------------------*/
  378.  
  379.   rc = GETNBOPTION()
  380.   IF rc <> 0 THEN
  381.      SIGNAL ACTIONS
  382.  
  383. /*--------------------------------------------------------------------*/
  384. /*    Copy the LCF bundle file and README to the hard disk.           */
  385. /*--------------------------------------------------------------------*/
  386.  
  387.   SAY
  388.   SAY 'Copying LCF bundle file.  This will take a few seconds...'
  389.  
  390.   '@ECHO OFF'
  391.   'XCOPY 'bundleName'.DAT 'destination'\*.EXE   'log
  392.   '@ECHO ON'
  393.  
  394. /*--------------------------------------------------------------------*/
  395. /*    Decompress the self-exploding bundle with LH/2                  */
  396. /*--------------------------------------------------------------------*/
  397.  
  398.   newdir = Directory( destination )    /* Change to new LCF directory */
  399.  
  400.   SAY
  401.   SAY 'Decompressing LCF files...'
  402.  
  403.   '@ECHO OFF'
  404.   bundleName'.EXE  /o' log             /* Run the self-exploding file */
  405.   'DEL 'bundleName'.EXE' log           /* Cleanup bundle              */
  406.   '@ECHO ON'
  407.  
  408.   '@ECHO 'bundleName'.EXE deleted 'log
  409.  
  410. /*--------------------------------------------------------------------*/
  411. /*    Copy some of the files around to other directories.             */
  412. /*--------------------------------------------------------------------*/
  413.  
  414.   SAY
  415.   SAY 'Setting up Boot Strap directories...'
  416.  
  417.   '@ECHO OFF'
  418.  
  419.   IF nbOption = 1 | nbOption = 3 THEN
  420.      'XCOPY BIN\CLIENT\LCF.EXE   BOOTSTRP\*.* 'log
  421.  
  422.   IF nbOption = 2 | nbOption = 3 THEN
  423.      'XCOPY BIN\CLIENT\LCFI.EXE  BOOTSTRP\*.* 'log
  424.  
  425.   'XCOPY BIN\UTILS\LCFBOOT.EXE   BOOTSTRP\*.* 'log
  426.   'XCOPY BIN\UTILS\LCFDIRSR.EXE  BOOTSTRP\*.* 'log
  427.  
  428.   'XCOPY BOOTSTRP\*.*  BOOTST21\*.*  /s /e 'log
  429.  
  430. /*--------------------------------------------------------------------*/
  431. /*    Copy the INSTALL command and ReadMe.INF file to the LCF dir's.  */
  432. /*--------------------------------------------------------------------*/
  433.  
  434.   /* Strip \ which is sometimes at end of directory name to handle
  435.      both the c:\ and c:\xxx cases.                                   */
  436.  
  437.   tempdir = Strip(currdir, 'T', '\')
  438.  
  439.   IF Stream(tempdir'\README.INF', 'c', 'query exists') <> '' THEN
  440.      'XCOPY 'tempdir'\README.INF   DOC\*.*  'log
  441.  
  442.   IF Stream(tempdir'\INSTALL.CMD', 'c', 'query exists') <> '' THEN
  443.      'XCOPY 'tempdir'\INSTALL.CMD  REXX\*.* 'log
  444.  
  445.   '@ECHO ON'
  446.  
  447.  
  448.   dir = Directory( currdir )               /* restore entry directory */
  449.  
  450.   SIGNAL ACTIONS
  451.  
  452.  
  453. /*--------------------------------------------------------------------*/
  454. /*  ACTION 3:  Create the LCF folder.                                 */
  455. /*--------------------------------------------------------------------*/
  456.  
  457. FOLDER:
  458.  
  459.   rc = CHECKDESTINATION()
  460.   IF rc <> 0 THEN SIGNAL ACTIONS
  461.  
  462.   IF nbOption = 0 THEN DO
  463.      rc = GETNBOPTION()
  464.      IF rc <> 0 THEN
  465.         SIGNAL ACTIONS
  466.   END
  467.  
  468.   CALL SysCls
  469.   pos = SysCurPos( 0, 0 )
  470.  
  471.   IF Substr( SysOS2Ver(), 3, 1 ) == '0' THEN DO
  472.     SAY
  473.     SAY 'Warning:  The LCF folder may not be placed on the Desktop'
  474.     SAY '          if the service pack (XR6055) has not been installed'
  475.     SAY '          on this machine.'           
  476.     CALL   PAUSEMSG
  477.   END
  478.  
  479.   SAY
  480.   SAY 'Creating LCF folder on DESKTOP, please wait...'
  481.  
  482.   setupstring = 'OBJECTID=<LCF100>;'    || ,
  483.                 'MINWIN=DESKTOP;'       || ,
  484.                 'CCVIEW=NO;'            || ,
  485.                 'RESTRICTION=NOPRINT;'
  486.  
  487.   result = SysCreateObject( 'WPFolder', relName, '<WP_DESKTOP>', ,
  488.                             setupstring, 'REPLACE' ) 
  489.  
  490.   IF result \= '1' THEN DO
  491.     SAY
  492.     SAY 'Error:  Unable to create LCF folder on Desktop.'
  493.     CALL   PAUSEMSG
  494.     SIGNAL ACTIONS
  495.   END
  496.  
  497.   SAY
  498.   SAY 'Placing LCF Server ICON in LCF folder...'
  499.  
  500.   IF nbOption = 1 | nbOption = 3 THEN DO
  501.  
  502.       setupstring = 'EXENAME='                    || ,
  503.                      destination                  || ,
  504.                      '\BIN\SERVER\LCFSERV.EXE;'   || ,
  505.                      'PARAMETERS=OS2BENCH 1 '     || ,
  506.                      destination                  || ,
  507.                      '\LOG\;'                     || ,
  508.                      'STARTUPDIR='                || ,
  509.                      destination                  || ,
  510.                      '\LOG\;'
  511.  
  512.       result = SysCreateObject( 'WPProgram', 'LCF Server', '<LCF100>', ,
  513.                                  setupstring, 'REPLACE' ) 
  514.  
  515.       IF result \= '1' THEN DO
  516.          SAY
  517.          SAY 'Error:  Unable to create LCF Server program in LCF folder.'
  518.          CALL   PAUSEMSG
  519.          SIGNAL ACTIONS
  520.       END
  521.  
  522.   END
  523.  
  524.   IF nbOption = 2 | nbOption = 3 THEN DO
  525.  
  526.       setupstring = 'EXENAME='                    || ,
  527.                      destination                  || ,
  528.                      '\BIN\SERVER\LCFSERVI.EXE;'  || ,
  529.                      'PARAMETERS=OS2BENCH 1 '     || ,
  530.                      destination                  || ,
  531.                      '\LOG\;'                     || ,
  532.                      'STARTUPDIR='                || ,
  533.                      destination                  || ,
  534.                      '\LOG\;'
  535.  
  536.       result = SysCreateObject( 'WPProgram', 'LCF IPX Server', '<LCF100>', ,
  537.                                  setupstring, 'REPLACE' ) 
  538.  
  539.       IF result \= '1' THEN DO
  540.          SAY
  541.          SAY 'Error:  Unable to create IPX LCF Server program in LCF folder.'
  542.          CALL   PAUSEMSG
  543.          SIGNAL ACTIONS
  544.       END
  545.  
  546.   END
  547.  
  548.   setupstring = 'EXENAME=VIEW.EXE;'          || ,
  549.                 'PARAMETERS='                || ,
  550.                 destination                  || ,
  551.                 '\DOC\LCFDOC.INF;'
  552.  
  553.   result = SysCreateObject( 'WPProgram', 'LCF Manual', ,
  554.                             '<LCF100>', setupstring, 'REPLACE' ) 
  555.  
  556.   IF result \= '1' THEN DO
  557.      SAY
  558.      SAY "Error:  Unable to create View for LCF Manual."
  559.      CALL   PAUSEMSG
  560.      SIGNAL ACTIONS
  561.   END
  562.  
  563.   setupstring = 'EXENAME=VIEW.EXE;'          || ,
  564.                 'PARAMETERS='                || ,
  565.                 destination                  || ,
  566.                 '\DOC\README.INF;'
  567.  
  568.   result = SysCreateObject( 'WPProgram', 'LCF ReadMe',      ,
  569.                             '<LCF100>', setupstring, 'REPLACE' ) 
  570.  
  571.   IF result \= '1' THEN DO
  572.      SAY
  573.      SAY 'Error:  Unable to create View for LCF ReadMe File.'
  574.      CALL   PAUSEMSG
  575.      SIGNAL ACTIONS
  576.   END
  577.  
  578.   SIGNAL ACTIONS
  579.  
  580.  
  581. /*--------------------------------------------------------------------*/
  582. /*  ACTION 4: Load OS/2 Licensed Material into LCF directories.       */
  583. /*--------------------------------------------------------------------*/
  584.  
  585. LOADOS2:
  586.  
  587.   rc = CHECKDESTINATION()
  588.   IF rc <> 0 THEN SIGNAL ACTIONS
  589.  
  590. os2OptionLoop:
  591.  
  592.   CALL SysCls
  593.   pos = SysCurPos( 0, 0 )
  594.  
  595.   SAY '╔════════════════════════════════════════════════════════════════╗'
  596.   SAY '║                                                                ║'
  597.   SAY '║                SELECT OS/2 System to be loaded                 ║'
  598.   SAY '║                                                                ║'
  599.   SAY '║  This will only load files from your OS/2 distribution package ║'
  600.   SAY '║  which the LCF needs to later install that version of OS/2. It ║'
  601.   SAY '║  does not load a complete OS/2 system.                         ║'
  602.   SAY '║                                                                ║'
  603.   SAY '║  You need to perform this action once for each release of OS/2 ║'
  604.   SAY '║  you will want to install with the LCF.                        ║'
  605.   SAY '║                                                                ║'
  606.   SAY '╟──────────────┬─────────────────────────────────────────────────╢'
  607.   SAY '║  SELECTION   │  Description                                    ║'
  608.   SAY '╟──────────────┼─────────────────────────────────────────────────╢'
  609.   SAY '║              │                                                 ║'
  610.   SAY '║      0       │  OS/2 2.0                                       ║'
  611.   SAY '║              │                                                 ║'
  612.   SAY '║      1       │  OS/2 2.1                                       ║'
  613.   SAY '║              │                                                 ║'
  614.   SAY '║      X       │  Return to main actions menu.                   ║'
  615.   SAY '║              │                                                 ║'
  616.   SAY '╚══════════════╧═════════════════════════════════════════════════╝'
  617.   SAY 'Enter SELECTION and press enter:'
  618.  
  619.   PULL os2Option
  620.  
  621.   '@ECHO Action 4: 'os2Option' selected' log 
  622.   SAY
  623.  
  624.   SELECT
  625.  
  626.      WHEN os2Option = 0 THEN
  627.         CALL LOADOS20
  628.  
  629.      WHEN os2Option = 1 THEN
  630.         rc = LOADOS21()
  631.  
  632.      WHEN os2Option = 'X' THEN DO
  633.         SIGNAL ACTIONS
  634.      END
  635.  
  636.      OTHERWISE
  637.         DO
  638.            SAY 'Invalid option selected.'
  639.            CALL PAUSEMSG
  640.            SIGNAL os2OptionLoop
  641.         END
  642.  
  643.   END    /* of SELECT */
  644.  
  645.   SIGNAL ACTIONS
  646.  
  647. /*-----------------------------------------------------------------------*/
  648. /*  ACTION 5: Load LAN Requester Licensed Material into LCF directories. */
  649. /*-----------------------------------------------------------------------*/
  650.  
  651. LOADLAN:
  652.  
  653.   rc = CHECKDESTINATION()
  654.   IF rc <> 0 THEN SIGNAL ACTIONS
  655.  
  656. loadLanOptionLoop:
  657.  
  658.   CALL SysCls
  659.   pos = SysCurPos( 0, 0 )
  660.  
  661.   SAY '╔════════════════════════════════════════════════════════════════╗'
  662.   SAY '║                                                                ║'
  663.   SAY '║                      SELECT LAN Requester                      ║'
  664.   SAY '║                                                                ║'
  665.   SAY '║  This will load files from your LAN requester package which    ║'
  666.   SAY '║  the LCF needs to later install the requester on target        ║'
  667.   SAY '║  workstations and for use with the LCF seed diskette system.   ║'
  668.   SAY '║                                                                ║'
  669.   SAY '║  You need to perform this action once for each release of OS/2 ║'
  670.   SAY '║  you will want to install with the LCF.                        ║'
  671.   SAY '║                                                                ║'
  672.   SAY '║  Any requester not listed in the selection list below can be   ║'
  673.   SAY "║  easily added manually.  Consult the Administrator's manual    ║"
  674.   SAY '║  (Chapter 2) for instructions on how to do this.               ║'
  675.   SAY '║                                                                ║'
  676.   SAY '║  Lan Server 2.0 and 3.0 are mutually exclusive because our     ║'
  677.   SAY '║  directory structure loads both into the same target           ║'
  678.   SAY '║  directories.                                                  ║'
  679.   SAY '║                                                                ║'
  680.   SAY '╟──────────────┬─────────────────────────────────────────────────╢'
  681.   SAY '║  SELECTION   │  Description                                    ║'
  682.   SAY '╟──────────────┼─────────────────────────────────────────────────╢'
  683.   SAY '║              │                                                 ║'
  684.   SAY '║      1       │  NetWare                                        ║'
  685.   SAY '║              │                                                 ║'
  686.   SAY '║      2       │  LAN Server 2.0                                 ║'
  687.   SAY '║              │                                                 ║'
  688.   SAY '║      3       │  LAN Server 3.0                                 ║'
  689.   SAY '║              │                                                 ║'
  690.   SAY '║      X       │  Return to main actions menu.                   ║'
  691.   SAY '║              │                                                 ║'
  692.   SAY '╚══════════════╧═════════════════════════════════════════════════╝'
  693.   SAY 'Enter SELECTION and press enter:'
  694.  
  695.   PULL lanOption
  696.  
  697.   '@ECHO Action 5: 'lanOption' selected' log 
  698.   SAY
  699.  
  700.   SELECT
  701.  
  702.      WHEN lanOption = 1 THEN
  703.         CALL LOADNETWARE
  704.  
  705.      WHEN lanOption = 2 THEN
  706.         CALL LOADLS2
  707.  
  708.      WHEN lanOption = 3 THEN
  709.         CALL LOADLS3
  710.  
  711.      WHEN lanOption = 'X' THEN DO
  712.         SIGNAL ACTIONS
  713.      END
  714.  
  715.      OTHERWISE
  716.         DO
  717.            SAY 'Invalid option selected.'
  718.            CALL PAUSEMSG
  719.            SIGNAL loadLanOptionLoop
  720.         END
  721.  
  722.   END    /* of SELECT */
  723.  
  724.   SIGNAL ACTIONS
  725.  
  726. /*-----------------------------------------------------------------------*/
  727. /*  ACTION 6: Create a Mini-OS/2 image for later installation via LCF.   */
  728. /*-----------------------------------------------------------------------*/
  729.  
  730. MINIOS2:
  731.  
  732.   rc = CHECKDESTINATION()
  733.   IF rc <> 0 THEN SIGNAL ACTIONS
  734.  
  735. miniOptionLoop:
  736.  
  737.   CALL SysCls
  738.   pos = SysCurPos( 0, 0 )
  739.  
  740.   SAY '╔════════════════════════════════════════════════════════════════╗'
  741.   SAY '║                                                                ║'
  742.   SAY '║                     Create Mini-OS/2 Package                   ║'
  743.   SAY '║                                                                ║'
  744.   SAY '║  This procedure will create an LCF package for a Mini-OS/2     ║'
  745.   SAY '║  system.  This package can then be used to install the         ║'
  746.   SAY '║  Mini-OS/2 on a target workstation by using the MINIOS2.SCR    ║'
  747.   SAY '║  script.                                                       ║'
  748.   SAY '║                                                                ║'
  749.   SAY '║  The package is created from the OS/2 system this command is   ║'
  750.   SAY '║  run on.  This determines the OS/2 release the package will    ║'
  751.   SAY '║  contains.                                                     ║'
  752.   SAY '║                                                                ║'
  753.   SAY '╟──────────────┬─────────────────────────────────────────────────╢'
  754.   SAY '║  SELECTION   │  Description                                    ║'
  755.   SAY '╟──────────────┼─────────────────────────────────────────────────╢'
  756.   SAY '║              │                                                 ║'
  757.   SAY '║      1       │  Continue with Mini-OS/2 package creation.      ║'
  758.   SAY '║              │                                                 ║'
  759.   SAY '║      X       │  Return to main actions menu.                   ║'
  760.   SAY '║              │                                                 ║'
  761.   SAY '╚══════════════╧═════════════════════════════════════════════════╝'
  762.   SAY 'Enter SELECTION and press enter:'
  763.  
  764.   PULL miniOption
  765.  
  766.   '@ECHO Action 6: 'miniOption' selected' log 
  767.   SAY
  768.  
  769.   SELECT
  770.  
  771.      WHEN miniOption = 1 THEN
  772.         CALL CREATEMINI
  773.  
  774.      WHEN miniOption = 'X' THEN DO
  775.         SIGNAL ACTIONS
  776.      END
  777.  
  778.      OTHERWISE
  779.         DO
  780.            SAY 'Invalid option selected.'
  781.            CALL PAUSEMSG
  782.            SIGNAL miniOptionLoop
  783.         END
  784.  
  785.   END    /* of SELECT */
  786.  
  787.   SIGNAL ACTIONS
  788.  
  789. /*-----------------------------------------------------------------------*/
  790. /*  ACTION 7: Authorize an LCF trial or production system.               */
  791. /*-----------------------------------------------------------------------*/
  792.  
  793. AUTHLCF:
  794.  
  795.   rc = CHECKDESTINATION()
  796.   IF rc <> 0 THEN SIGNAL ACTIONS
  797.  
  798. authOptionLoop:
  799.  
  800.   CALL SysCls
  801.   pos = SysCurPos( 0, 0 )
  802.  
  803.   SAY '╔════════════════════════════════════════════════════════════════╗'
  804.   SAY '║                                                                ║'
  805.   SAY '║                     Authorize LCF to Run                       ║'
  806.   SAY '║                                                                ║'
  807.   SAY '║  This procedure will authorize the LCF as a trial or           ║'
  808.   SAY '║  production system.                                            ║'
  809.   SAY '║                                                                ║'
  810.   SAY '║  This procedure will prompt you for customer specific          ║'
  811.   SAY '║  information and then ask you to contact ForeFront Software    ║'
  812.   SAY '║  for an authorization key which must then be entered as a part ║'
  813.   SAY '║  of this procedure.                                            ║'
  814.   SAY '║                                                                ║'
  815.   SAY '╟──────────────┬─────────────────────────────────────────────────╢'
  816.   SAY '║  SELECTION   │  Description                                    ║'
  817.   SAY '╟──────────────┼─────────────────────────────────────────────────╢'
  818.   SAY '║              │                                                 ║'
  819.   SAY '║      1       │  Authorize the LCF for a trial.                 ║'
  820.   SAY '║              │                                                 ║'
  821.   SAY '║      2       │  Authorize the LCF for production.              ║'
  822.   SAY '║              │                                                 ║'
  823.   SAY '║      X       │  Return to main actions menu.                   ║'
  824.   SAY '║              │                                                 ║'
  825.   SAY '╚══════════════╧═════════════════════════════════════════════════╝'
  826.   SAY 'Enter SELECTION and press enter:'
  827.  
  828.   PULL authOption
  829.  
  830.   '@ECHO Action 7: 'authOption' selected' log 
  831.   SAY
  832.  
  833.   SELECT
  834.  
  835.      WHEN authOption = 1 THEN
  836.         CALL AUTHTRIAL
  837.  
  838.      WHEN authOption = 2 THEN
  839.         CALL AUTHPROD
  840.  
  841.      WHEN authOption = 'X' THEN DO
  842.         SIGNAL ACTIONS
  843.      END
  844.  
  845.      OTHERWISE
  846.         DO
  847.            SAY 'Invalid option selected.'
  848.            CALL PAUSEMSG
  849.            SIGNAL authOptionLoop
  850.         END
  851.  
  852.   END    /* of SELECT */
  853.  
  854.   SIGNAL ACTIONS
  855.  
  856.  
  857. /*--------------------------------------------------------------------*/
  858. /*    End of CMD.                                                     */
  859. /*--------------------------------------------------------------------*/
  860.  
  861. DONE:
  862.  
  863.   rc = ENDLOCAL()
  864.  
  865.   SAY
  866.   SAY 'INSTALL program completed.'
  867.  
  868.   IF destination <> "DESTINATION" THEN DO
  869.      SAY
  870.      SAY
  871.      SAY destination'\INSTALL.LOG is the install audit log.'
  872.      SAY
  873.      dir = Directory( destination )
  874.   END
  875.  
  876.   dir = Directory( currdir )                 /* maybe different drive */
  877.  
  878.   EXIT
  879.  
  880.  
  881. PAUSEMSG:
  882.   SAY
  883.   SAY 'Press any key to continue.'
  884.   anykey = SysGetKey( 'NOECHO' )
  885.   RETURN
  886.  
  887. ERROR:
  888.   rcErr = rc
  889.   SAY
  890.   SAY 'ERROR 'rcErr': 'Errortext(rcErr)
  891.   SAY 'Line 'sigl': 'Sourceline(sigl)
  892.   SAY 'INSTALL failed...'
  893.  
  894.   '@ECHO ERROR 'rcErr': 'Errortext(rcErr) log
  895.   '@ECHO Line 'sigl': 'Sourceline(sigl) log
  896.   '@ECHO INSTALL failed...'log
  897.   SIGNAL ENDERROR
  898.  
  899. FAILURE:
  900.   rcErr = rc
  901.   SAY
  902.   SAY 'FAILURE 'rcErr': 'Errortext(rcErr)
  903.   SAY 'Line 'sigl': 'Sourceline(sigl)
  904.   SAY 'INSTALL failed...'
  905.  
  906.   '@ECHO ERROR 'rcErr': 'Errortext(rcErr) log
  907.   '@ECHO Line 'sigl': 'Sourceline(sigl) log
  908.   '@ECHO INSTALL failed...'log
  909.   SIGNAL ENDERROR
  910.  
  911. HALT:
  912.   SAY 'HALT condition raised.'
  913.   '@ECHO HALT condition raised (CONTROL-BREAK) while in line 'sigl log
  914.   SIGNAL ENDERROR
  915.  
  916. ENDERROR:
  917.  
  918.   IF destination <> "DESTINATION" THEN DO
  919.      SAY
  920.      SAY
  921.      SAY 'Look in 'destination'\INSTALL.LOG for the install audit log.'
  922.      SAY
  923.      dir = Directory( destination )
  924.   END
  925.  
  926.   dir = Directory( currdir )                /* maybe different drive */
  927.  
  928.   rc = ENDLOCAL()
  929.  
  930.   EXIT
  931.  
  932.  
  933. ENDHELP:
  934.  
  935.   CALL SysCls
  936.   pos = SysCurPos( 0, 0 )
  937.  
  938.   SAY
  939.   SAY '╔════════════════════════════════════════════════════════════════╗'
  940.   SAY '║                   LCF  INSTALLATION  PROGRAM                   ║'
  941.   SAY '╟────────────────────────────────────────────────────────────────╢'
  942.   SAY '║                                                                ║'
  943.   SAY '║  This CMD file requires OS/2 2.00 or higher.                   ║'
  944.   SAY '║                                                                ║'
  945.   SAY '║  To install LCF, you must change to the drive containing       ║'
  946.   SAY '║  the LCF distribution diskette and type:                       ║'
  947.   SAY '║                                                                ║'
  948.   SAY '║      INSTALL                                                   ║'
  949.   SAY '║                                                                ║'
  950.   SAY '║  You will be prompted for all necessary parameters.            ║'
  951.   SAY '║                                                                ║'
  952.   SAY '║  To view the complete menus shown by this command file use     ║'
  953.   SAY '║  an OS/2 Full Screen session or use an OS/2 Window with a      ║'
  954.   SAY '║  small font size.                                              ║'
  955.   SAY '╚════════════════════════════════════════════════════════════════╝'
  956.   SAY 
  957.  
  958.   rc = ENDLOCAL()
  959.  
  960.   EXIT
  961.  
  962.  
  963. /**********************************************************************/
  964. /*    Local Subroutines.                                              */
  965. /*                                                                    */
  966. /*      Do not use SIGNAL to get back to the mainline from these      */
  967. /*      since this will clobber the mainline's variables              */
  968. /*                                                                    */
  969. /**********************************************************************/
  970.  
  971. /*--------------------------------------------------------------------*/
  972. /*  Ask which NetBios support is required.                            */
  973. /*--------------------------------------------------------------------*/
  974.  
  975. GETNBOPTION: PROCEDURE EXPOSE nbOption log           /* Local Function */
  976.  
  977.   inNbOption = nbOption
  978.  
  979. nbOptionLoop:
  980.  
  981.   CALL SysCls
  982.   pos = SysCurPos( 0, 0 )
  983.  
  984.   SAY '╔════════════════════════════════════════════════════════════════╗'
  985.   SAY '║                                                                ║'
  986.   SAY '║             SELECT NetBIOS support you will use                ║'
  987.   SAY '║                                                                ║'
  988.   SAY '╟──────────────┬─────────────────────────────────────────────────╢'
  989.   SAY '║  SELECTION   │  Description                                    ║'
  990.   SAY '╟──────────────┼─────────────────────────────────────────────────╢'
  991.   SAY '║              │                                                 ║'
  992.   SAY '║      1       │  IBM NetBIOS (Lan Server/Lan Manager).          ║'
  993.   SAY '║              │                                                 ║'
  994.   SAY '║      2       │  Novell NetBios Simulator (over IPX).           ║'
  995.   SAY '║              │                                                 ║'
  996.   SAY "║      3       │  Both of the above NetBIOS's.                   ║"
  997.   SAY '║              │                                                 ║'
  998.   SAY '║      X       │  Return to main actions menu.                   ║'
  999.   SAY '║              │                                                 ║'
  1000.   SAY '╚══════════════╧═════════════════════════════════════════════════╝'
  1001.   SAY 'Enter SELECTION and press enter:'
  1002.  
  1003.   PULL nbOption
  1004.  
  1005.   '@ECHO GetNBoption: 'nbOption' selected' log 
  1006.   SAY
  1007.  
  1008.   SELECT
  1009.  
  1010.      WHEN nbOption = 1 THEN
  1011.         SAY 'IBM NetBIOS selected'
  1012.  
  1013.      WHEN nbOption = 2 THEN
  1014.         SAY 'NetWare NetBios selected'
  1015.  
  1016.      WHEN nbOption = 3 THEN
  1017.         SAY "Both NetBIOS's selected"
  1018.  
  1019.      WHEN nbOption = 'X' THEN DO
  1020.         nbOption = inNbOption
  1021.         RETURN 1
  1022.      END
  1023.  
  1024.      OTHERWISE
  1025.         DO
  1026.            nbOption = 0
  1027.            SAY 'Invalid option selected.'
  1028.            CALL PAUSEMSG
  1029.            SIGNAL nbOptionLoop
  1030.         END
  1031.  
  1032.   END    /* of SELECT */
  1033.  
  1034.   RETURN 0 /* of GETNBOPTION */
  1035.  
  1036.  
  1037. /*--------------------------------------------------------------------*/
  1038. /*  Determine the the directory where LCF will be installed.          */
  1039. /*--------------------------------------------------------------------*/
  1040.  
  1041. GETDESTINATION: PROCEDURE EXPOSE destination log      /* Local Function */
  1042.  
  1043. getDestLoop:
  1044.  
  1045.   CALL SysCls
  1046.   pos = SysCurPos( 0, 0 )
  1047.  
  1048.   SAY '╔════════════════════════════════════════════════════════════════╗'
  1049.   SAY '║  Indicate the drive and optional directory the LCF is to be    ║'
  1050.   SAY '║  or was installed on.                                          ║'
  1051.   SAY '║                                                                ║'
  1052.   SAY '║  The drive must be a valid drive letter followed by a colon.   ║'
  1053.   SAY '║                                                                ║'
  1054.   SAY '║  If a directory is not specified, the \LCF directory will be   ║'
  1055.   SAY '║  used as a default.  If other than \LCF is used, some sample   ║'
  1056.   SAY '║  files will have to be modified before use.                    ║'
  1057.   SAY '║                                                                ║'
  1058.   SAY '║  For example:                                                  ║'
  1059.   SAY '║                C:                                              ║'
  1060.   SAY '║                                                                ║'
  1061.   SAY '║  will install to:                                              ║'
  1062.   SAY '║                                                                ║'
  1063.   SAY '║                C:\LCF                                          ║'
  1064.   SAY '║                                                                ║'
  1065.   SAY '╚════════════════════════════════════════════════════════════════╝'
  1066.   SAY 'Enter DRIVE and press enter:'
  1067.  
  1068.   PULL  dataline
  1069.   PARSE UPPER VAR dataline parm1 .
  1070.  
  1071.   SELECT
  1072.  
  1073.     WHEN Length( parm1 ) < 2 THEN DO
  1074.       SAY
  1075.       SAY 'Error:  "'parm1'" is not a valid drive.'
  1076.       CALL PAUSEMSG
  1077.       SIGNAL getDestLoop
  1078.     END
  1079.  
  1080.     WHEN Length( parm1 ) == 2 THEN DO
  1081.       IF Substr( parm1, 2, 1 ) <> ':' THEN DO
  1082.         SAY
  1083.         SAY 'Error:  "'parm1'" is not a valid drive.'
  1084.         CALL PAUSEMSG
  1085.         SIGNAL getDestLoop
  1086.       END 
  1087.     END
  1088.  
  1089.     OTHERWISE DO
  1090.       IF Substr( parm1, 2, 2 ) <> ':\' THEN DO
  1091.         SAY
  1092.         SAY 'Error:  "'parm1'" is not a valid drive.'
  1093.         CALL PAUSEMSG
  1094.         SIGNAL getDestLoop
  1095.       END
  1096.     END
  1097.  
  1098.   END
  1099.  
  1100. /*--------------------------------------------------------------------*/
  1101. /*    Break the [destination] into a drive, path and name.  The       */
  1102. /*  Filespec() function produces the following results:               */
  1103. /*                                                                    */
  1104. /*                      Drive      Path       Name                    */
  1105. /*                      -----  ------------  ------                   */
  1106. /*    \                 ""     "\"           ""                       */
  1107. /*    C                 ""     ""            "C"                      */
  1108. /*    C\                ""     "C\"          ""                       */
  1109. /*    C:                "C:"   ""            ""                       */
  1110. /*    C:\               "C:"   "\"           ""                       */
  1111. /*    C:\LCF            "C:"   "\"           "LCF"                    */
  1112. /*    C:\LCF\           "C:"   "\LCF\"       ""                       */
  1113. /*    C:\LCF\TEST       "C:"   "\LCF\"       "TEST"                   */
  1114. /*    C:\LCF\TEST\      "C:"   "\LCF\TEST\"  ""                       */
  1115. /*                                                                    */
  1116. /*    First strip any trailing '\'.                                   */
  1117. /*--------------------------------------------------------------------*/
  1118.  
  1119.   destination = Strip( parm1, 'T', '\' )
  1120.  
  1121.   destdrive = Filespec( 'Drive', destination )
  1122.  
  1123.   destpath = Filespec( 'Path', destination )
  1124.  
  1125.   destname = Filespec( 'Name', destination )
  1126.  
  1127.   IF Substr( destdrive, 2, 1 ) <> ':' THEN DO
  1128.     SAY
  1129.     SAY 'Error:  "'parm1'" is not a valid drive.'
  1130.     CALL PAUSEMSG
  1131.     SIGNAL getDestLoop
  1132.   END
  1133.  
  1134.   newdir = Directory( destdrive'\' )
  1135.  
  1136.   IF newdir == destdrive'\' THEN dir = Directory( currdir )
  1137.   ELSE DO
  1138.     SAY
  1139.     SAY 'Error:  "'parm1'" is not a valid drive.'
  1140.     CALL PAUSEMSG
  1141.     SIGNAL getDestLoop
  1142.   END
  1143.  
  1144.   IF ( destpath == '' ) & ( destname == '' ) THEN DO
  1145.     destpath = '\'
  1146.     destname = 'LCF'
  1147.   END
  1148.  
  1149.   IF ( destpath <> '\' ) | ( destname == '' ) THEN DO
  1150.     SAY
  1151.     SAY 'Error:  "'parm1'" is not a valid destination directory.'
  1152.     SAY '        Only 1 directory level allowed.'
  1153.     CALL PAUSEMSG
  1154.     SIGNAL getDestLoop
  1155.   END
  1156.  
  1157.   IF destname <> 'LCF' THEN DO
  1158.  
  1159.     CONFIRM1LOOP:
  1160.  
  1161.     CALL SysCls
  1162.     pos = SysCurPos( 0, 0 )
  1163.  
  1164.     i = 15 - Length(destname)
  1165.  
  1166.     IF i < 0 THEN i = 0
  1167.  
  1168.     blks = Substr(' ', 1, i, ' ')
  1169.  
  1170.     SAY '╔════════════════════════════════════════════════════════════════╗'
  1171.     SAY '║                                                                ║'
  1172.     SAY '║                             WARNING                            ║'
  1173.     SAY '║                                                                ║'
  1174.     SAY '║              The destination directory is not \LCF             ║'
  1175.     SAY '║                                                                ║'
  1176.     SAY '║     You will have to edit all scripts supplied by this         ║'
  1177.     SAY '║     installation to replace all occurances of \LCF with        ║'
  1178.     SAY '║     \'destname                    ''blks'                                          ║'
  1179.     SAY '║                                                                ║'
  1180.     SAY '║     Do you want to proceed with this destination directory?    ║'
  1181.     SAY '║                                                                ║'
  1182.     SAY '╚════════════════════════════════════════════════════════════════╝'
  1183.     SAY 'Enter Y/N:'
  1184.  
  1185.     PULL ans
  1186.  
  1187.     IF ans = 'Y' THEN SIGNAL DESTINATIONOK
  1188.     IF ans = 'N' THEN SIGNAL getDestLoop
  1189.     SIGNAL CONFIRM1LOOP
  1190.   END
  1191.  
  1192. DESTINATIONOK:
  1193.  
  1194.   destination = destdrive || destpath || destname
  1195.  
  1196.   '@ECHO GetDest:  OS/2 = 'SysOS2Ver()' 'log
  1197.   '@ECHO           destination = 'destination' 'log
  1198.  
  1199.   RETURN  /* end of GETDESTINATION */
  1200.  
  1201.  
  1202. /*--------------------------------------------------------------------*/
  1203. /*  Check that the LCF destination directory exists.                  */
  1204. /*--------------------------------------------------------------------*/
  1205.  
  1206. CHECKDESTINATION: PROCEDURE EXPOSE destination log
  1207.  
  1208.   IF destination = 'DESTINATION' THEN
  1209.      CALL GETDESTINATION
  1210.  
  1211.   saveDir = Directory( )
  1212.  
  1213.   checkDir = Directory( destination )
  1214.  
  1215.   IF checkDir <> destination THEN DO
  1216.     SAY
  1217.     SAY 'Error:  Directory 'destination' does not exist.'
  1218.     SAY '        You must invoke the "Unload LCF product" action to create it.'
  1219.     saveDir = Directory( saveDir )
  1220.     CALL   PAUSEMSG
  1221.     RETURN 1
  1222.   END
  1223.  
  1224.   IF log = '>>NUL' THEN
  1225.      log = '>>'destination'\install.log'
  1226.  
  1227.   saveDir = Directory( saveDir )
  1228.  
  1229.   RETURN  0 /* end of CHECKDESTINATION */
  1230.  
  1231.  
  1232. /*--------------------------------------------------------------------*/
  1233. /*  Load special files from the OS/2 2.0 distribution media.          */
  1234. /*--------------------------------------------------------------------*/
  1235.  
  1236. LOADOS20: PROCEDURE EXPOSE floppy destination osver log
  1237.  
  1238.   IF floppy = 0 THEN DO
  1239.      rc = GETFLOPPY()
  1240.      IF rc <> 0 THEN RETURN
  1241.   END
  1242.  
  1243.   osver = OS2200
  1244.  
  1245.   osVerDir  = destination || '\DISKIMAG' || '\'osver
  1246.  
  1247.   bootstrp  = destination || '\BOOTSTRP'
  1248.   minios2   = destination || '\MINIOS2'
  1249.  
  1250.   log = '>>'destination'\install.log'
  1251.  
  1252.   rc = PATHMK( minios2 )
  1253.   rc = PATHMK( bootstrp )
  1254.   rc = PATHMK( destination || '\BOOTST21' )
  1255.  
  1256.   rc = PATHMK( osVerDir || '\DISK1' )
  1257.   rc = PATHMK( osVerDir || '\DLL' )
  1258.   rc = PATHMK( osVerDir || '\SYSTEM' )
  1259.  
  1260.   rc = MOUNTDISK('DISK 0', 'IBM OS/2 2.0 Installation Diskette 41G8238')
  1261.  
  1262.   '@ECHO OFF'
  1263.   'XCOPY 'floppy'\SYSINSTX.COM 'bootstrp'\*.*     'log
  1264.   'XCOPY 'floppy'\ABIOS.SYS    'osVerDir'\DISK1\*.* 'log
  1265.   'XCOPY 'floppy'\*.BIO        'osVerDir'\DISK1\*.* 'log
  1266.   '@ECHO ON'
  1267.  
  1268.   rc = MOUNTDISK('DISK 1', 'IBM OS/2 2.0 Diskette 1 41G8242')
  1269.  
  1270.   '@ECHO OFF'
  1271.   'XCOPY 'floppy'\*.* 'osVerDir'\DISK1\ 'log
  1272.   'XCOPY 'osVerDir'\DISK1\CMD.EXE   'bootstrp'\*.* 'log
  1273.   'XCOPY 'osVerDir'\DISK1\DOS.SYS   'bootstrp'\*.* 'log
  1274.   'XCOPY 'osVerDir'\DISK1\FDISK.COM 'bootstrp'\*.* 'log
  1275.   '@ECHO ON' 
  1276.  
  1277.   rc = MOUNTDISK('DISK 2', 'IBM OS/2 2.0 Diskette 2 84F8474')
  1278.  
  1279.   '@ECHO OFF'
  1280.   'UNPACK 'floppy'\VGA 'osVerDir'\DLL /N:BVHVGA.DLL 'log
  1281.   'XCOPY 'floppy'\FORMAT.COM  'bootstrp'\*.* 'log
  1282.   'XCOPY 'floppy'\CHKDSK.COM  'bootstrp'\*.* 'log
  1283.   'XCOPY 'floppy'\UHPFS.DLL   'bootstrp'\*.* 'log
  1284.   '@ECHO ON'
  1285.  
  1286.   rc = MOUNTDISK('DISK 4', 'IBM OS/2 2.0 Diskette 4 84F8480')
  1287.  
  1288.   '@ECHO OFF'
  1289.   'UNPACK 'floppy'\BUNDLE 'osVerDir'\SYSTEM /N:OSO001.MSG 'log
  1290.   '@ECHO ON'
  1291.  
  1292.   rc = MOUNTDISK('DISK 5', 'IBM OS/2 2.0 Diskette 5 84F8483')
  1293.  
  1294.   '@ECHO OFF'
  1295.   'UNPACK 'floppy'\BUNDLE 'bootstrp' /N:SETBOOT.EXE 'log
  1296.   '@ECHO ON'
  1297.  
  1298.   rc = MOUNTDISK('DISK 6', 'IBM OS/2 2.0 Diskette 6 84F8486')
  1299.  
  1300.   '@ECHO OFF'
  1301.   'UNPACK 'floppy'\REQUIRED 'osVerDir'\DISK1 /N:VDISK.SYS 'log
  1302.   '@ECHO ON'
  1303.  
  1304.   rc = MOUNTDISK('DISK 7', 'IBM OS/2 2.0 Diskette 7 84F8489')
  1305.  
  1306.   '@ECHO OFF'
  1307.   'UNPACK 'floppy'\REQUIRED 'bootstrp' /N:MAKEINI.EXE 'log
  1308.   '@ECHO ON'
  1309.  
  1310.   RETURN  /* end of LOADOS20 */
  1311.  
  1312.  
  1313. /*--------------------------------------------------------------------*/
  1314. /*  Load special files from the OS/2 2.1 distribution media.          */
  1315. /*--------------------------------------------------------------------*/
  1316.  
  1317. LOADOS21: PROCEDURE EXPOSE floppy cdrom destination osver log cdsubdir ,
  1318.                            cdromlabel
  1319.  
  1320. get21MediaLoop:
  1321.  
  1322.   CALL SysCls
  1323.   pos = SysCurPos( 0, 0 )
  1324.  
  1325.   SAY '╔════════════════════════════════════════════════════════════════╗'
  1326.   SAY '║                                                                ║'
  1327.   SAY '║             SELECT OS/2 2.1 Media Format to be Used            ║'
  1328.   SAY '║                                                                ║'
  1329.   SAY '╟──────────────┬─────────────────────────────────────────────────╢'
  1330.   SAY '║  SELECTION   │  Description                                    ║'
  1331.   SAY '╟──────────────┼─────────────────────────────────────────────────╢'
  1332.   SAY '║              │                                                 ║'
  1333.   SAY '║      1       │  OS/2 2.1 13 diskette system                    ║'
  1334.   SAY '║              │  Salmon colored labels                          ║'
  1335.   SAY '║              │                                                 ║'
  1336.   SAY '║      2       │  OS/2 2.1 17 diskette system                    ║'
  1337.   SAY '║              │  Blue colored labels                            ║'
  1338.   SAY '║              │                                                 ║'
  1339.   SAY '║      3       │  OS/2 2.1 for Windows (11 diskettes)            ║'
  1340.   SAY '║              │  Green colored labels                           ║'
  1341.   SAY '║              │                                                 ║'
  1342.   SAY '║      4       │  OS/2 2.1 CD with 13 diskette image             ║'
  1343.   SAY '║              │  Salmon colored labels                          ║'
  1344.   SAY '║              │                                                 ║'
  1345.   SAY '║      5       │  OS/2 2.1 CD with 17 diskette image             ║'
  1346.   SAY '║              │  Blue colored labels                            ║'
  1347.   SAY '║              │                                                 ║'
  1348.   SAY '║      6       │  OS/2 2.1 for Windows CD (11 diskette image)    ║'
  1349.   SAY '║              │  Green colored labels                           ║'
  1350.   SAY '║              │                                                 ║'
  1351.   SAY '║      X       │  Return to main actions menu.                   ║'
  1352.   SAY '║              │                                                 ║'
  1353.   SAY '╚══════════════╧═════════════════════════════════════════════════╝'
  1354.   SAY 'Enter SELECTION and press enter:'
  1355.  
  1356.   PULL mediaOption
  1357.  
  1358.   '@ECHO LoadOS21: 'mediaOption' selected' log 
  1359.   SAY
  1360.  
  1361.   SELECT
  1362.  
  1363.      WHEN mediaOption = 1 THEN
  1364.         CALL OS21DK13
  1365.  
  1366.      WHEN mediaOption = 2 THEN
  1367.         CALL OS21DK17
  1368.  
  1369.      WHEN mediaOption = 3 THEN
  1370.         CALL OS21DK11
  1371.  
  1372.      WHEN mediaOption = 4 THEN
  1373.         CALL OS21CD13
  1374.  
  1375.      WHEN mediaOption = 5 THEN
  1376.         CALL OS21CD17
  1377.  
  1378.      WHEN mediaOption = 6 THEN
  1379.         CALL OS21CD11
  1380.  
  1381.      WHEN mediaOption = 'X' THEN
  1382.         RETURN 1
  1383.  
  1384.      OTHERWISE
  1385.         DO
  1386.            SAY 'Invalid media selected.'
  1387.            CALL   PAUSEMSG
  1388.            SIGNAL get21MediaLoop
  1389.         END
  1390.  
  1391.   END     /* of SELECT */
  1392.  
  1393.   RETURN 0 /* end of LOADOS21 */
  1394.  
  1395.  
  1396. /*-----------------------------------------------------------------------*/
  1397. /*  Load special files from the OS/2 2.1 for Windows (11 diskette media) */
  1398. /*-----------------------------------------------------------------------*/
  1399.  
  1400. OS21DK11: PROCEDURE EXPOSE floppy destination osver log
  1401.  
  1402.   IF floppy = 0 THEN DO
  1403.      rc = GETFLOPPY()
  1404.      IF rc <> 0 THEN RETURN
  1405.   END
  1406.  
  1407.   osver = OS2210
  1408.  
  1409.   osVerDir  = destination || '\DISKIMAG' || '\'osver
  1410.  
  1411.   bootstrp  = destination || '\BOOTST21'
  1412.   minios2   = destination || '\MINIOS2'
  1413.  
  1414.   log = '>>'destination'\install.log'
  1415.  
  1416.   savedir     = Directory()
  1417.   destination = Directory( destination )  /* to copy unpack2.exe into */
  1418.  
  1419.   rc = PATHMK( minios2 )
  1420.   rc = PATHMK( bootstrp )
  1421.   rc = PATHMK( destination || '\BOOTSTRP' )
  1422.  
  1423.   rc = PATHMK( osVerDir || '\DISK1' )
  1424.   rc = PATHMK( osVerDir || '\DLL' )
  1425.   rc = PATHMK( osVerDir || '\SYSTEM' )
  1426.  
  1427.   rc = MOUNTDISK('DISK 1', 'IBM OS/2 2.1 Diskette 1')
  1428.  
  1429.   '@ECHO OFF'
  1430.   'XCOPY 'floppy'\*.* 'osVerDir'\DISK1\ 'log
  1431.   'XCOPY 'osVerDir'\DISK1\CMD.EXE   'bootstrp'\*.* 'log
  1432.   'XCOPY 'osVerDir'\DISK1\DOS.SYS   'bootstrp'\*.* 'log
  1433.   'XCOPY 'osVerDir'\DISK1\FDISK.COM 'bootstrp'\*.* 'log
  1434.   '@ECHO ON' 
  1435.  
  1436.   /* Note: we need UNPACK2 from disk 2 to handle DISK_0 bundle */
  1437.  
  1438.   rc = MOUNTDISK('DISK 2', 'IBM OS/2 2.1 Diskette 2')
  1439.  
  1440.   '@ECHO OFF'
  1441.   'XCOPY   'floppy'\UNPACK2.EXE  *.* 'log
  1442.   'UNPACK2 'floppy'\VGA 'osVerDir'\DLL /N:BVHVGA.DLL 'log
  1443.   'XCOPY   'floppy'\FORMAT.COM  'bootstrp'\*.* 'log
  1444.   'XCOPY   'floppy'\CHKDSK.COM  'bootstrp'\*.* 'log
  1445.   'XCOPY   'floppy'\UHPFS.DLL   'bootstrp'\*.* 'log
  1446.   'UNPACK2 'floppy'\BUNDLE   'bootstrp'       /N:SETBOOT.EXE 'log
  1447.   '@ECHO ON'
  1448.  
  1449.   rc = MOUNTDISK('DISK 3', 'IBM OS/2 2.1 Diskette 3')
  1450.  
  1451.   '@ECHO OFF'
  1452.   'UNPACK2 'floppy'\BUNDLE 'osVerDir'\SYSTEM /N:OSO001.MSG 'log
  1453.   '@ECHO ON'
  1454.  
  1455.   rc = MOUNTDISK('DISK 9', 'IBM OS/2 2.1 Diskette 9')
  1456.  
  1457.   '@ECHO OFF'
  1458.   'UNPACK2 'floppy'\REQUIRED 'bootstrp' /N:MAKEINI.EXE 'log
  1459.   '@ECHO ON'
  1460.  
  1461.   rc = MOUNTDISK('DISK 0', 'IBM OS/2 2.1 Installation Diskette')
  1462.  
  1463.   '@ECHO OFF'
  1464.   'XCOPY 'floppy'\SYSINSTX.COM 'bootstrp'\*.* 'log
  1465.   'XCOPY 'floppy'\ABIOS.SYS    'osVerDir'\DISK1\*.* 'log
  1466.   'XCOPY 'floppy'\*.BIO        'osVerDir'\DISK1\*.* 'log
  1467.   'UNPACK2 'floppy'\BUNDLE     'osVerDir'\DISK1 /N:VDISK.SYS   'log
  1468.  
  1469.   'DEL  UNPACK2.EXE 'log
  1470.   '@ECHO ON'
  1471.  
  1472.   savedir = Directory( savedir )
  1473.  
  1474.   RETURN  /* end of OS21DK11 */
  1475.  
  1476.  
  1477. /*--------------------------------------------------------------------*/
  1478. /*  Load special files from the OS/2 2.1 13 diskette media.           */
  1479. /*--------------------------------------------------------------------*/
  1480.  
  1481. OS21DK13: PROCEDURE EXPOSE floppy destination osver log
  1482.  
  1483.   IF floppy = 0 THEN DO
  1484.      rc = GETFLOPPY()
  1485.      IF rc <> 0 THEN RETURN
  1486.   END
  1487.  
  1488.   osver = OS2210
  1489.  
  1490.   osVerDir  = destination || '\DISKIMAG' || '\'osver
  1491.  
  1492.   bootstrp  = destination || '\BOOTST21'
  1493.   minios2   = destination || '\MINIOS2'
  1494.  
  1495.   log = '>>'destination'\install.log'
  1496.  
  1497.   savedir     = Directory()
  1498.   destination = Directory( destination )  /* to copy unpack2.exe into */
  1499.  
  1500.   rc = PATHMK( minios2 )
  1501.   rc = PATHMK( bootstrp )
  1502.   rc = PATHMK( destination || '\BOOTSTRP' )
  1503.  
  1504.   rc = PATHMK( osVerDir || '\DISK1' )
  1505.   rc = PATHMK( osVerDir || '\DLL' )
  1506.   rc = PATHMK( osVerDir || '\SYSTEM' )
  1507.  
  1508.   rc = MOUNTDISK('DISK 0', 'IBM OS/2 2.1 Installation Diskette')
  1509.  
  1510.   '@ECHO OFF'
  1511.   'XCOPY 'floppy'\SYSINSTX.COM 'bootstrp'\*.* 'log
  1512.   'XCOPY 'floppy'\ABIOS.SYS    'osVerDir'\DISK1\*.* 'log
  1513.   'XCOPY 'floppy'\*.BIO        'osVerDir'\DISK1\*.* 'log
  1514.   '@ECHO ON'
  1515.  
  1516.   rc = MOUNTDISK('DISK 1', 'IBM OS/2 2.1 Diskette 1')
  1517.  
  1518.   '@ECHO OFF'
  1519.   'XCOPY 'floppy'\*.* 'osVerDir'\DISK1\ 'log
  1520.   'XCOPY 'osVerDir'\DISK1\CMD.EXE   'bootstrp'\*.* 'log
  1521.   'XCOPY 'osVerDir'\DISK1\DOS.SYS   'bootstrp'\*.* 'log
  1522.   'XCOPY 'osVerDir'\DISK1\FDISK.COM 'bootstrp'\*.* 'log
  1523.   '@ECHO ON' 
  1524.  
  1525.   rc = MOUNTDISK('DISK 2', 'IBM OS/2 2.1 Diskette 2')
  1526.  
  1527.   '@ECHO OFF'
  1528.   'XCOPY   'floppy'\UNPACK2.EXE  *.* 'log
  1529.   'UNPACK2 'floppy'\VGA 'osVerDir'\DLL /N:BVHVGA.DLL 'log
  1530.   'XCOPY   'floppy'\FORMAT.COM  'bootstrp'\*.* 'log
  1531.   'XCOPY   'floppy'\CHKDSK.COM  'bootstrp'\*.* 'log
  1532.   'XCOPY   'floppy'\UHPFS.DLL   'bootstrp'\*.* 'log
  1533.   'UNPACK2 'floppy'\BUNDLE   'bootstrp'       /N:SETBOOT.EXE 'log
  1534.   'UNPACK2 'floppy'\BUNDLE   'osVerDir'\DISK1 /N:VDISK.SYS   'log
  1535.   '@ECHO ON'
  1536.  
  1537.   rc = MOUNTDISK('DISK 3', 'IBM OS/2 2.1 Diskette 3')
  1538.  
  1539.   '@ECHO OFF'
  1540.   'UNPACK2 'floppy'\BUNDLE 'osVerDir'\SYSTEM /N:OSO001.MSG 'log
  1541.   '@ECHO ON'
  1542.  
  1543.   rc = MOUNTDISK('DISK 9', 'IBM OS/2 2.1 Diskette 9')
  1544.  
  1545.   '@ECHO OFF'
  1546.   'UNPACK2 'floppy'\REQUIRED 'bootstrp' /N:MAKEINI.EXE 'log
  1547.  
  1548.   'DEL  UNPACK2.EXE 'log
  1549.   '@ECHO ON'
  1550.  
  1551.   savedir = Directory( savedir )
  1552.  
  1553.   RETURN  /* end of OS21DK13 */
  1554.  
  1555.  
  1556. /*--------------------------------------------------------------------*/
  1557. /*  Load special files from the OS/2 2.1 17 diskette media.           */
  1558. /*--------------------------------------------------------------------*/
  1559.  
  1560. OS21DK17: PROCEDURE EXPOSE floppy destination osver log
  1561.  
  1562.   IF floppy = 0 THEN DO
  1563.      rc = GETFLOPPY()
  1564.      IF rc <> 0 THEN RETURN
  1565.   END
  1566.  
  1567.   osver = OS2210
  1568.  
  1569.   osVerDir  = destination || '\DISKIMAG' || '\'osver
  1570.  
  1571.   bootstrp  = destination || '\BOOTST21'
  1572.   minios2   = destination || '\MINIOS2'
  1573.  
  1574.   log = '>>'destination'\install.log'
  1575.  
  1576.   rc = PATHMK( minios2 )
  1577.   rc = PATHMK( bootstrp )
  1578.   rc = PATHMK( destination || '\BOOTSTRP' )
  1579.  
  1580.   rc = PATHMK( osVerDir || '\DISK1' )
  1581.   rc = PATHMK( osVerDir || '\DLL' )
  1582.   rc = PATHMK( osVerDir || '\SYSTEM' )
  1583.  
  1584.   rc = MOUNTDISK('DISK 0', 'IBM OS/2 2.1 Installation Diskette')
  1585.  
  1586.   '@ECHO OFF'
  1587.   'XCOPY 'floppy'\SYSINSTX.COM 'bootstrp'\*.*    'log
  1588.   'XCOPY 'floppy'\ABIOS.SYS    'osVerDir'\DISK1\*.* 'log
  1589.   'XCOPY 'floppy'\*.BIO        'osVerDir'\DISK1\*.* 'log
  1590.   '@ECHO ON'
  1591.  
  1592.   rc = MOUNTDISK('DISK 1', 'IBM OS/2 2.1 Diskette 1')
  1593.  
  1594.   '@ECHO OFF'
  1595.   'XCOPY 'floppy'\*.* 'osVerDir'\DISK1\ 'log
  1596.   'XCOPY 'osVerDir'\DISK1\CMD.EXE   'bootstrp'\*.* 'log
  1597.   'XCOPY 'osVerDir'\DISK1\DOS.SYS   'bootstrp'\*.* 'log
  1598.   'XCOPY 'osVerDir'\DISK1\FDISK.COM 'bootstrp'\*.* 'log
  1599.   '@ECHO ON' 
  1600.  
  1601.   rc = MOUNTDISK('DISK 2', 'IBM OS/2 2.1 Diskette 2')
  1602.  
  1603.   '@ECHO OFF'
  1604.   'UNPACK  'floppy'\VGA 'osVerDir'\DLL /N:BVHVGA.DLL 'log
  1605.   'XCOPY   'floppy'\FORMAT.COM  'bootstrp'\*.* 'log
  1606.   'XCOPY   'floppy'\CHKDSK.COM  'bootstrp'\*.* 'log
  1607.   'XCOPY   'floppy'\UHPFS.DLL   'bootstrp'\*.* 'log
  1608.   '@ECHO ON'
  1609.  
  1610.   rc = MOUNTDISK('DISK 3', 'IBM OS/2 2.1 Diskette 3')
  1611.  
  1612.   '@ECHO OFF'
  1613.   'UNPACK 'floppy'\BUNDLE   'bootstrp'  /N:SETBOOT.EXE 'log
  1614.   '@ECHO ON'
  1615.  
  1616.   rc = MOUNTDISK('DISK 4', 'IBM OS/2 2.1 Diskette 4')
  1617.  
  1618.   '@ECHO OFF'
  1619.   'UNPACK  'floppy'\BUNDLE   'osVerDir'\DISK1 /N:VDISK.SYS   'log
  1620.   '@ECHO ON'
  1621.  
  1622.   rc = MOUNTDISK('DISK 5', 'IBM OS/2 2.1 Diskette 5')
  1623.  
  1624.   '@ECHO OFF'
  1625.   'UNPACK  'floppy'\BUNDLE 'osVerDir'\SYSTEM /N:OSO001.MSG 'log
  1626.   '@ECHO ON'
  1627.  
  1628.  
  1629.   rc = MOUNTDISK('DISK 9', 'IBM OS/2 2.1 Diskette 9')
  1630.  
  1631.   '@ECHO OFF'
  1632.   'UNPACK 'floppy'\REQUIRED 'bootstrp' /N:MAKEINI.EXE 'log
  1633.   '@ECHO ON'
  1634.  
  1635.   RETURN  /* end of OS21DK17 */
  1636.  
  1637.  
  1638. /*-----------------------------------------------------------------------*/
  1639. /*  Load special files from the OS/2 2.1 for Windows CD (11 disk image). */
  1640. /*                                                                       */
  1641. /*  The OS/2 2.1 for Windows CD-ROM does NOT contain a volume label.     */
  1642. /*-----------------------------------------------------------------------*/
  1643.  
  1644. OS21CD11: PROCEDURE EXPOSE cdrom destination osver log cdsubdir cdromlabel
  1645.  
  1646.   osver      = OS2210
  1647.   cdromlabel = ''
  1648.  
  1649.   IF cdrom = 0 THEN
  1650.      CALL GETCDROM
  1651.  
  1652.   osVerDir  = destination || '\DISKIMAG' || '\'osver
  1653.  
  1654.   bootstrp  = destination || '\BOOTST21'
  1655.   minios2   = destination || '\MINIOS2'
  1656.  
  1657.   log = '>>'destination'\install.log'
  1658.  
  1659.   savedir     = Directory()
  1660.   destination = Directory( destination )  /* to copy unpack2.exe into */
  1661.  
  1662.   SAY 'Creating directories'
  1663.  
  1664.   rc = PATHMK( minios2 )
  1665.   rc = PATHMK( bootstrp )
  1666.   rc = PATHMK( destination || '\BOOTSTRP' )
  1667.  
  1668.   rc = PATHMK( osVerDir || '\DISK1' )
  1669.   rc = PATHMK( osVerDir || '\DLL' )
  1670.   rc = PATHMK( osVerDir || '\SYSTEM' )
  1671.  
  1672.   SAY 'Loading files from DISK_1 image'
  1673.  
  1674.   cddir = cdrom'\'cdsubdir'\DISK_1'
  1675.  
  1676.   '@ECHO OFF'
  1677.   'XCOPY 'cddir'\*.* 'osVerDir'\DISK1\ 'log
  1678.   'XCOPY 'osVerDir'\DISK1\CMD.EXE   'bootstrp'\*.* 'log
  1679.   'XCOPY 'osVerDir'\DISK1\DOS.SYS   'bootstrp'\*.* 'log
  1680.   'XCOPY 'osVerDir'\DISK1\FDISK.COM 'bootstrp'\*.* 'log
  1681.   '@ECHO ON' 
  1682.  
  1683.   /* Note: UNPACK2 from disk 2 required to handle DISK_0 bundle */
  1684.  
  1685.   SAY 'Loading files from DISK_2 image'
  1686.  
  1687.   cddir = cdrom'\'cdsubdir'\DISK_2'
  1688.  
  1689.   '@ECHO OFF'
  1690.   'XCOPY   'cddir'\UNPACK2.EXE  *.* 'log
  1691.   'UNPACK2 'cddir'\VGA 'osVerDir'\DLL /N:BVHVGA.DLL 'log
  1692.   'XCOPY   'cddir'\FORMAT.COM  'bootstrp'\*.* 'log
  1693.   'XCOPY   'cddir'\CHKDSK.COM  'bootstrp'\*.* 'log
  1694.   'XCOPY   'cddir'\UHPFS.DLL   'bootstrp'\*.* 'log
  1695.   'UNPACK2 'cddir'\BUNDLE   'bootstrp'       /N:SETBOOT.EXE 'log
  1696.   '@ECHO ON'
  1697.  
  1698.   SAY 'Loading files from DISK_3 image'
  1699.  
  1700.   cddir = cdrom'\'cdsubdir'\DISK_3'
  1701.  
  1702.   '@ECHO OFF'
  1703.   'UNPACK2 'cddir'\BUNDLE 'osVerDir'\SYSTEM /N:OSO001.MSG 'log
  1704.   '@ECHO ON'
  1705.  
  1706.   SAY 'Loading files from DISK_9 image'
  1707.  
  1708.   cddir = cdrom'\'cdsubdir'\DISK_9'
  1709.  
  1710.   '@ECHO OFF'
  1711.   'UNPACK2 'cddir'\REQUIRED 'bootstrp' /N:MAKEINI.EXE 'log
  1712.   '@ECHO ON'
  1713.  
  1714.   SAY 'Loading files from DISK_0 image'
  1715.  
  1716.   cddir = cdrom'\'cdsubdir'\DISK_0'
  1717.  
  1718.   '@ECHO OFF'
  1719.   'XCOPY 'cddir'\SYSINSTX.COM 'bootstrp'\*.*    'log
  1720.   'XCOPY 'cddir'\ABIOS.SYS    'osVerDir'\DISK1\*.* 'log
  1721.   'XCOPY 'cddir'\*.BIO        'osVerDir'\DISK1\*.* 'log
  1722.   'UNPACK2 'cddir'\BUNDLE     'osVerDir'\DISK1 /N:VDISK.SYS   'log
  1723.  
  1724.   'DEL  UNPACK2.EXE 'log
  1725.   '@ECHO ON'
  1726.  
  1727.   savedir = Directory( savedir )
  1728.  
  1729.   cdromlabel = 'CDROMLABEL'
  1730.  
  1731.   RETURN  /* end of OS21CD11 */
  1732.  
  1733.  
  1734. /*--------------------------------------------------------------------*/
  1735. /*  Load special files from the OS/2 2.1 CD (13 diskette image).      */
  1736. /*--------------------------------------------------------------------*/
  1737.  
  1738. OS21CD13: PROCEDURE EXPOSE cdrom destination osver log cdsubdir cdromlabel
  1739.  
  1740.   osver      = OS2210
  1741.  
  1742.   IF cdrom = 0 THEN
  1743.      CALL GETCDROM
  1744.  
  1745.   osVerDir  = destination || '\DISKIMAG' || '\'osver
  1746.  
  1747.   bootstrp  = destination || '\BOOTST21'
  1748.   minios2   = destination || '\MINIOS2'
  1749.  
  1750.   log = '>>'destination'\install.log'
  1751.  
  1752.   savedir     = Directory()
  1753.   destination = Directory( destination )  /* to copy unpack2.exe into */
  1754.  
  1755.   SAY 'Creating directories'
  1756.  
  1757.   rc = PATHMK( minios2 )
  1758.   rc = PATHMK( bootstrp )
  1759.   rc = PATHMK( destination || '\BOOTSTRP' )
  1760.  
  1761.   rc = PATHMK( osVerDir || '\DISK1' )
  1762.   rc = PATHMK( osVerDir || '\DLL' )
  1763.   rc = PATHMK( osVerDir || '\SYSTEM' )
  1764.  
  1765.   SAY 'Loading files from DISK_0 image'
  1766.  
  1767.   cddir = cdrom'\'cdsubdir'\DISK_0'
  1768.  
  1769.   '@ECHO OFF'
  1770.   'XCOPY 'cddir'\SYSINSTX.COM 'bootstrp'\*.*    'log
  1771.   'XCOPY 'cddir'\ABIOS.SYS    'osVerDir'\DISK1\*.* 'log
  1772.   'XCOPY 'cddir'\*.BIO        'osVerDir'\DISK1\*.* 'log
  1773.   '@ECHO ON'
  1774.  
  1775.   SAY 'Loading files from DISK_1 image'
  1776.  
  1777.   cddir = cdrom'\'cdsubdir'\DISK_1'
  1778.  
  1779.   '@ECHO OFF'
  1780.   'XCOPY 'cddir'\*.* 'osVerDir'\DISK1\ 'log
  1781.   'XCOPY 'osVerDir'\DISK1\CMD.EXE   'bootstrp'\*.* 'log
  1782.   'XCOPY 'osVerDir'\DISK1\DOS.SYS   'bootstrp'\*.* 'log
  1783.   'XCOPY 'osVerDir'\DISK1\FDISK.COM 'bootstrp'\*.* 'log
  1784.   '@ECHO ON' 
  1785.  
  1786.   SAY 'Loading files from DISK_2 image'
  1787.  
  1788.   cddir = cdrom'\'cdsubdir'\DISK_2'
  1789.  
  1790.   '@ECHO OFF'
  1791.   'XCOPY   'cddir'\UNPACK2.EXE  *.* 'log
  1792.   'UNPACK2 'cddir'\VGA 'osVerDir'\DLL /N:BVHVGA.DLL 'log
  1793.   'XCOPY   'cddir'\FORMAT.COM  'bootstrp'\*.* 'log
  1794.   'XCOPY   'cddir'\CHKDSK.COM  'bootstrp'\*.* 'log
  1795.   'XCOPY   'cddir'\UHPFS.DLL   'bootstrp'\*.* 'log
  1796.   'UNPACK2 'cddir'\BUNDLE   'bootstrp'       /N:SETBOOT.EXE 'log
  1797.   'UNPACK2 'cddir'\BUNDLE   'osVerDir'\DISK1 /N:VDISK.SYS   'log
  1798.   '@ECHO ON'
  1799.  
  1800.   SAY 'Loading files from DISK_3 image'
  1801.  
  1802.   cddir = cdrom'\'cdsubdir'\DISK_3'
  1803.  
  1804.   '@ECHO OFF'
  1805.   'UNPACK2 'cddir'\BUNDLE 'osVerDir'\SYSTEM /N:OSO001.MSG 'log
  1806.   '@ECHO ON'
  1807.  
  1808.   SAY 'Loading files from DISK_9 image'
  1809.  
  1810.   cddir = cdrom'\'cdsubdir'\DISK_9'
  1811.  
  1812.   '@ECHO OFF'
  1813.   'UNPACK2 'cddir'\REQUIRED 'bootstrp' /N:MAKEINI.EXE 'log
  1814.  
  1815.   'DEL  UNPACK2.EXE 'log
  1816.   '@ECHO ON'
  1817.  
  1818.   savedir = Directory( savedir )
  1819.  
  1820.   RETURN  /* end of OS21CD13 */
  1821.  
  1822.  
  1823. /*--------------------------------------------------------------------*/
  1824. /*  Load special files from the OS/2 2.1 CD (17 diskette image).      */
  1825. /*--------------------------------------------------------------------*/
  1826.  
  1827. OS21CD17: PROCEDURE EXPOSE cdrom destination osver log cdsubdir cdromlabel
  1828.  
  1829.   osver      = OS2210
  1830.  
  1831.   IF cdrom = 0 THEN
  1832.      CALL GETCDROM
  1833.  
  1834.   osVerDir  = destination || '\DISKIMAG' || '\'osver
  1835.  
  1836.   bootstrp  = destination || '\BOOTST21'
  1837.   minios2   = destination || '\MINIOS2'
  1838.  
  1839.   log = '>>'destination'\install.log'
  1840.  
  1841.   savedir     = Directory()
  1842.   destination = Directory( destination )
  1843.  
  1844.   SAY 'Creating directories'
  1845.  
  1846.   rc = PATHMK( minios2 )
  1847.   rc = PATHMK( bootstrp )
  1848.   rc = PATHMK( destination || '\BOOTSTRP' )
  1849.  
  1850.   rc = PATHMK( osVerDir || '\DISK1' )
  1851.   rc = PATHMK( osVerDir || '\DLL' )
  1852.   rc = PATHMK( osVerDir || '\SYSTEM' )
  1853.  
  1854.   SAY 'Loading files from DISK_0 image'
  1855.  
  1856.   cddir = cdrom'\'cdsubdir'\DISK_0'
  1857.  
  1858.   '@ECHO OFF'
  1859.   'XCOPY 'cddir'\SYSINSTX.COM 'bootstrp'\*.*    'log
  1860.   'XCOPY 'cddir'\ABIOS.SYS    'osVerDir'\DISK1\*.* 'log
  1861.   'XCOPY 'cddir'\*.BIO        'osVerDir'\DISK1\*.* 'log
  1862.   '@ECHO ON'
  1863.  
  1864.   SAY 'Loading files from DISK_1 image'
  1865.  
  1866.   cddir = cdrom'\'cdsubdir'\DISK_1'
  1867.  
  1868.   '@ECHO OFF'
  1869.   'XCOPY 'cddir'\*.* 'osVerDir'\DISK1\ 'log
  1870.   'XCOPY 'osVerDir'\DISK1\CMD.EXE   'bootstrp'\*.* 'log
  1871.   'XCOPY 'osVerDir'\DISK1\DOS.SYS   'bootstrp'\*.* 'log
  1872.   'XCOPY 'osVerDir'\DISK1\FDISK.COM 'bootstrp'\*.* 'log
  1873.   '@ECHO ON' 
  1874.  
  1875.   SAY 'Loading files from DISK_2 image'
  1876.  
  1877.   cddir = cdrom'\'cdsubdir'\DISK_2'
  1878.  
  1879.   '@ECHO OFF'
  1880.   'UNPACK  'cddir'\VGA 'osVerDir'\DLL /N:BVHVGA.DLL 'log
  1881.   'XCOPY   'cddir'\FORMAT.COM  'bootstrp'\*.* 'log
  1882.   'XCOPY   'cddir'\CHKDSK.COM  'bootstrp'\*.* 'log
  1883.   'XCOPY   'cddir'\UHPFS.DLL   'bootstrp'\*.* 'log
  1884.   '@ECHO ON'
  1885.  
  1886.   SAY 'Loading files from DISK_3 image'
  1887.  
  1888.   cddir = cdrom'\'cdsubdir'\DISK_3'
  1889.  
  1890.   '@ECHO OFF'
  1891.   'UNPACK 'cddir'\BUNDLE   'bootstrp'  /N:SETBOOT.EXE 'log
  1892.   '@ECHO ON'
  1893.  
  1894.   SAY 'Loading files from DISK_4 image'
  1895.  
  1896.   cddir = cdrom'\'cdsubdir'\DISK_4'
  1897.  
  1898.   '@ECHO OFF'
  1899.   'UNPACK  'cddir'\BUNDLE   'osVerDir'\DISK1 /N:VDISK.SYS   'log
  1900.   '@ECHO ON'
  1901.  
  1902.   SAY 'Loading files from DISK_5 image'
  1903.  
  1904.   cddir = cdrom'\'cdsubdir'\DISK_5'
  1905.  
  1906.   '@ECHO OFF'
  1907.   'UNPACK  'cddir'\BUNDLE 'osVerDir'\SYSTEM /N:OSO001.MSG 'log
  1908.   '@ECHO ON'
  1909.  
  1910.   SAY 'Loading files from DISK_9 image'
  1911.  
  1912.   cddir = cdrom'\'cdsubdir'\DISK_9'
  1913.  
  1914.   '@ECHO OFF'
  1915.   'UNPACK 'cddir'\REQUIRED 'bootstrp' /N:MAKEINI.EXE 'log
  1916.   '@ECHO ON'
  1917.  
  1918.   savedir = Directory( savedir )
  1919.  
  1920.   RETURN  /* end of OS21CD17 */
  1921.  
  1922.  
  1923. /*--------------------------------------------------------------------*/
  1924. /*  Load NetWare requester files.                                     */
  1925. /*--------------------------------------------------------------------*/
  1926.  
  1927. LOADNETWARE: PROCEDURE EXPOSE destination log
  1928.  
  1929. getNetwareLoop:
  1930.  
  1931.   CALL SysCls
  1932.   pos = SysCurPos( 0, 0 )
  1933.  
  1934.   SAY '╔════════════════════════════════════════════════════════════════╗'
  1935.   SAY '║  The NetWare requester will be taken from the PC this command  ║'
  1936.   SAY '║  is being run on.                                              ║'
  1937.   SAY '║                                                                ║'
  1938.   SAY '║  Enter the path name where the requester can be found.         ║'
  1939.   SAY '║                                                                ║'
  1940.   SAY '║  For example:                                                  ║'
  1941.   SAY '║                C:\NETWARE                                      ║'
  1942.   SAY '║                                                                ║'
  1943.   SAY '╚════════════════════════════════════════════════════════════════╝'
  1944.   SAY 'Enter PATH and press enter:'
  1945.  
  1946.   PULL  dataline
  1947.   PARSE UPPER VAR dataline parm1 .
  1948.  
  1949.   '@ECHO GetNetWareDir: NetWare path = 'dataline log 
  1950.  
  1951.   IF Length(parm1) <> 3 | Substr(parm1, 2, 1) <> ':' THEN
  1952.      parm1 = Strip( parm1, 'T', '\' )
  1953.  
  1954.   savedir = Directory()
  1955.  
  1956.   netdir  = Directory( parm1 )
  1957.  
  1958.   IF netdir <> parm1 THEN DO
  1959.      SAY
  1960.      SAY 'Directory 'parm1' does not exist.'
  1961.      '@ECHO Directory 'parm1' does not exist.' log
  1962.      CALL PAUSEMSG
  1963.      SIGNAL getNetwareLoop
  1964.   END
  1965.  
  1966.   IF Stream('LSL.SYS', 'c', 'query exists') == '' THEN DO
  1967.      SAY
  1968.      SAY 'Directory 'parm1' does not seem to contain the NetWare Requester.'
  1969.      '@ECHO GetNetWareDir: LSL.SYS not found in 'parm1 log 
  1970.      CALL PAUSEMSG
  1971.      SIGNAL getNetwareLoop
  1972.   END
  1973.  
  1974.   scriptdir = Directory( destination'\SCRIPT' )
  1975.  
  1976.   shippeddir = '?:\NETWARE'          /* what is in the file as shipped */
  1977.  
  1978.   rcChng = CHNGFILE('NETODI.SCR', shippeddir, netdir)
  1979.  
  1980.   '@ECHO ChangeNETODI.SCR: rc = 'rcChng log 
  1981.  
  1982.   savedir = Directory( savedir )
  1983.  
  1984.   IF rcChng = 2 THEN DO
  1985.      SAY
  1986.      SAY 'Successful'
  1987.      SAY
  1988.      SAY 'Script 'scriptdir'\NETODI.SCR already references path 'netdir
  1989.      CALL PAUSEMSG
  1990.      RETURN
  1991.   END
  1992.  
  1993.   IF rcChng <> 0 THEN DO
  1994.      SAY
  1995.      SAY 'Error updating script 'scriptdir'\NETODI.SCR with path 'netdir
  1996.      SAY 'You will have to perform the change manually.'
  1997.      CALL PAUSEMSG
  1998.      RETURN
  1999.   END
  2000.  
  2001.   SAY
  2002.   SAY 'Successful'
  2003.   SAY
  2004.   SAY 'Script 'scriptdir'\NETODI.SCR has been updated to refer to 'netdir
  2005.   CALL PAUSEMSG
  2006.  
  2007.   RETURN  /* end of LOADNETWARE */
  2008.  
  2009.  
  2010. /*--------------------------------------------------------------------*/
  2011. /*  Load LAN Server 2.0 requester files.                              */
  2012. /*--------------------------------------------------------------------*/
  2013.  
  2014. LOADLS2: PROCEDURE EXPOSE floppy destination osver log
  2015.  
  2016.   savedir = Directory()
  2017.  
  2018.   IF floppy = 0 THEN DO
  2019.      rc = GETFLOPPY()
  2020.      IF rc <> 0 THEN RETURN
  2021.   END
  2022.  
  2023.   rc = GETOSVER()
  2024.   IF rc <> 0 THEN RETURN
  2025.  
  2026.   osVerDir  = destination || '\DISKIMAG' || '\'osver
  2027.  
  2028.   macs      = osVerDir || '\MACS'
  2029.   com       = osVerDir || '\IBMCOM'
  2030.  
  2031.   log = '>>'destination'\install.log'
  2032.  
  2033.   rc = PATHMK( macs )
  2034.   rc = PATHMK( com )
  2035.  
  2036.   dir = Directory( osVerDir )
  2037.  
  2038.   filespec = SysSearchPath( 'PATH', 'PKUNZIP2.EXE' )
  2039.  
  2040.   IF filespec == '' THEN DO
  2041.  
  2042.      rc = MOUNTDISK('IBMA1V20R1', 'IBM OS/2 LAN Server V2.0 Requester Install Diskette 1')
  2043.  
  2044.     '@ECHO OFF' 
  2045.     'XCOPY 'floppy'\PKUNZIP2.EXE *.* 'log
  2046.     '@ECHO ON'
  2047.  
  2048.     flag = 1
  2049.  
  2050.   END
  2051.  
  2052.   rc = MOUNTDISK('IBMA1V20N1', 'IBM OS/2 LAN Server V2.0 Network Adapter Drivers')
  2053.  
  2054.   '@ECHO OFF'
  2055.   'XCOPY 'floppy'\IBMCOM\NETBEUI.NIF    'macs log
  2056.   'XCOPY 'floppy'\COMMON\*.OS2          'macs log
  2057.   'XCOPY 'floppy'\COMMON\*.NIF          'macs log
  2058.   'XCOPY 'floppy'\COMMON\ATCHAN\*.*     'macs log
  2059.   'XCOPY 'floppy'\COMMON\MICRCHAN\*.OS2 'macs log
  2060.   'XCOPY 'floppy'\COMMON\MICRCHAN\*.NIF 'macs log
  2061.   'XCOPY 'floppy'\COMMON\MICRCHAN\*.BIN 'macs log
  2062.   'XCOPY 'floppy'\COMMON\LT2.MSG        'com  log
  2063.   '@ECHO ON' 
  2064.  
  2065.   rc = MOUNTDISK('IBMA1V20R2', 'IBM OS/2 LAN Server V2.0 Requester Install Diskette 2')
  2066.  
  2067.   '@ECHO OFF' 
  2068.   'PKUNZIP2 -o 'floppy'\LXPTBASE.ZIP 'com' IBMCOM\LANMSGDD.OS2 'log
  2069.   'PKUNZIP2 -o 'floppy'\LXPTBASE.ZIP 'com' IBMCOM\DLL\LANMSGDL.DLL 'log
  2070.   'PKUNZIP2 -o 'floppy'\LXPTBASE.ZIP 'com' IBMCOM\LANMSGEX.EXE 'log    
  2071.   'PKUNZIP2 -o 'floppy'\LXPTBASE.ZIP 'com' IBMCOM\LT0.MSG 'log         
  2072.   'PKUNZIP2 -o 'floppy'\LXPTBASE.ZIP 'com' IBMCOM\PRO.MSG 'log         
  2073.   'PKUNZIP2 -o 'floppy'\LXPTBASE.ZIP 'com' IBMCOM\PROTMAN.OS2 'log     
  2074.   'PKUNZIP2 -o 'floppy'\LXPTBASE.ZIP 'com' IBMCOM\PROTOCOL\NETBIND.EXE 'log
  2075.  
  2076.   'PKUNZIP2 -o 'floppy'\LXPTJETB.ZIP 'com' IBMCOM\DLL\ACSNETB.DLL 'log     
  2077.   'PKUNZIP2 -o 'floppy'\LXPTJETB.ZIP 'com' IBMCOM\PROTOCOL\NETBEUI.OS2 'log
  2078.   'PKUNZIP2 -o 'floppy'\LXPTJETB.ZIP 'com' IBMCOM\PROTOCOL\NETBIOS.OS2 'log
  2079.  
  2080.   'PKUNZIP2 -o 'floppy'\LXPT8022.ZIP 'com' IBMCOM\DLL\ACSLAN.DLL 'log      
  2081.   '@ECHO ON'
  2082.   
  2083.   IF flag = 1 THEN
  2084.      'DEL PKUNZIP2.EXE 'log
  2085.  
  2086.   dir = Directory( savedir )
  2087.  
  2088.   RETURN  /* end of LOADLS2 */
  2089.  
  2090.  
  2091. /*--------------------------------------------------------------------*/
  2092. /*  Load LAN Server 3.0 requester files.                              */
  2093. /*--------------------------------------------------------------------*/
  2094.  
  2095. LOADLS3: PROCEDURE EXPOSE floppy destination osver log
  2096.  
  2097.   savedir = Directory()
  2098.  
  2099.   IF floppy = 0 THEN DO
  2100.      rc = GETFLOPPY()
  2101.      IF rc <> 0 THEN RETURN
  2102.   END
  2103.  
  2104.   rc = GETOSVER()
  2105.   IF rc <> 0 THEN RETURN
  2106.  
  2107.   osVerDir  = destination || '\DISKIMAG' || '\'osver
  2108.  
  2109.   macs      = osVerDir || '\MACS'
  2110.   com       = osVerDir || '\IBMCOM'
  2111.  
  2112.   diribmcom = floppy'\IBMCOM'
  2113.   dirmacs   = floppy'\IBMCOM\MACS'
  2114.   dirdll    = floppy'\IBMCOM\DLL'
  2115.   dirprot   = floppy'\IBMCOM\PROTOCOL'
  2116.  
  2117.   log = '>>'destination'\install.log'
  2118.  
  2119.   rc = PATHMK( macs )
  2120.   rc = PATHMK( com )
  2121.  
  2122. mountLoop:
  2123.  
  2124.   rc = MOUNTDISK('', 'IBM NTS/2 Lan Adapter and Protocol Support 1.0 diskette')
  2125.  
  2126.   d1 = Directory( dirmacs )
  2127.   d2 = Directory( dirdll  )
  2128.   d3 = Directory( dirprot )
  2129.  
  2130.   IF (d1 == dirmacs) & ,
  2131.      (d2 == dirdll)  & ,
  2132.      (d3 == dirprot) THEN NOP
  2133.   ELSE DO
  2134.      SAY 
  2135.      SAY 'Error:  Incorrect diskette.  Required directories'
  2136.      SAY '        not present.'
  2137.      CALL PAUSEMSG
  2138.      SIGNAL mountLoop
  2139.   END
  2140.  
  2141.   dir = Directory( osVerDir )
  2142.  
  2143.   filespec = SysSearchPath( 'PATH', 'PKUNZIP2.EXE' )
  2144.  
  2145.   IF filespec == '' THEN DO
  2146.  
  2147.     '@ECHO OFF' 
  2148.     'XCOPY 'floppy'\PKUNZIP2.EXE *.* 'log
  2149.     '@ECHO ON'
  2150.  
  2151.     flag = 1
  2152.  
  2153.   END
  2154.  
  2155.   '@ECHO OFF' 
  2156.   'PKUNZIP2 -o 'dirmacs'\MACS.ZIP     .\MACS *.*   'log 
  2157.  
  2158.   'XCOPY 'floppy'\IBMCOM\LT0.MSG      .\IBMCOM\*.* 'log
  2159.  
  2160.   'PKUNZIP2 -o 'diribmcom'\IBMCOM.ZIP .\IBMCOM LANMSGDD.OS2 'log
  2161.   'PKUNZIP2 -o 'diribmcom'\IBMCOM.ZIP .\IBMCOM LANMSGEX.EXE 'log
  2162.   'PKUNZIP2 -o 'diribmcom'\IBMCOM.ZIP .\IBMCOM LT2.MSG      'log
  2163.   'PKUNZIP2 -o 'diribmcom'\IBMCOM.ZIP .\IBMCOM PRO.MSG      'log
  2164.   'PKUNZIP2 -o 'diribmcom'\IBMCOM.ZIP .\IBMCOM PROTMAN.OS2  'log
  2165.  
  2166.   'PKUNZIP2 -o 'dirdll'\DLL.ZIP       .\IBMCOM ACSLAN.DLL   'log
  2167.   'PKUNZIP2 -o 'dirdll'\DLL.ZIP       .\IBMCOM ACSNETB.DLL  'log
  2168.  
  2169.   'XCOPY 'floppy'\IBMCOM\DLL\LANMSGDL.DLL     .\IBMCOM\*.*  'log
  2170.  
  2171.   'PKUNZIP2 -o 'dirprot'\PROTOCOL.ZIP .\IBMCOM NETBEUI.OS2 'log
  2172.   'PKUNZIP2 -o 'dirprot'\PROTOCOL.ZIP .\IBMCOM NETBIND.EXE 'log
  2173.   'PKUNZIP2 -o 'dirprot'\PROTOCOL.ZIP .\IBMCOM NETBIOS.OS2 'log
  2174.   
  2175.   IF flag = 1 THEN
  2176.      'DEL PKUNZIP2.EXE 'log
  2177.  
  2178.   '@ECHO ON' 
  2179.  
  2180.   dir = Directory( savedir )
  2181.  
  2182.   RETURN  /* end of LOADLS3 */
  2183.  
  2184.  
  2185. /*--------------------------------------------------------------------*/
  2186. /*  Create Mini-OS/2 package.                                         */
  2187. /*--------------------------------------------------------------------*/
  2188.  
  2189. CREATEMINI: PROCEDURE EXPOSE destination env log
  2190.  
  2191.   savedir = Directory()
  2192.  
  2193. /*-------------------------------------------------------------------*/
  2194. /*    Determine the boot drive.  Since there is not built in way to  */
  2195. /*  retrieve the boot drive from REXX use the drive in the COMSPEC   */
  2196. /*  environment variable.                                            */
  2197. /*-------------------------------------------------------------------*/
  2198.  
  2199.   comspecenv = Value( 'COMSPEC',, env )
  2200.  
  2201.   PARSE UPPER VAR comspecenv comspecenv
  2202.  
  2203.   '@ECHO COMSPEC environment variable "'comspecenv'"' log
  2204.  
  2205.   IF comspecenv = '' THEN DO
  2206.     SAY
  2207.     SAY 'Error:  No COMSPEC= environment variable defined.'
  2208.     CALL PAUSEMSG
  2209.     RETURN 1
  2210.   END
  2211.  
  2212.   bootdrive = FileSpec( 'Drive', comspecenv )
  2213.  
  2214.   bootdrive = Strip( bootdrive )
  2215.  
  2216.   '@ECHO Boot drive "'bootdrive'"' log
  2217.  
  2218. /*-------------------------------------------------------------------*/
  2219. /*    Determine the drive that contains \IBMCOM.                     */
  2220. /*-------------------------------------------------------------------*/
  2221.  
  2222.   dpathenv = Value( 'DPATH',, env )
  2223.  
  2224.   PARSE UPPER VAR ibmcomdrive ibmcomdrive
  2225.  
  2226.   '@ECHO DPATH environment variable "'dpathenv'"' log
  2227.  
  2228.   IF dpathenv = '' THEN DO
  2229.     SAY
  2230.     SAY 'Error:  No DPATH= environment variable defined.'
  2231.     CALL PAUSEMSG
  2232.     RETURN 1
  2233.   END
  2234.  
  2235.   PARSE VAR dpathenv ibmcomdrive ':\IBMCOM' .
  2236.  
  2237.   IF ibmcomdrive == dpathenv THEN ibmcomdrive = bootdrive
  2238.   ELSE DO
  2239.     ibmcomdrive = Right( ibmcomdrive, 1 ) || ':'
  2240.   END
  2241.  
  2242.   '@ECHO ibmcomdrive = "'ibmcomdrive'"' log
  2243.  
  2244. /*-------------------------------------------------------------------*/
  2245. /*    Now ask the user if they want to override any of the drive     */
  2246. /*  values.                                                          */
  2247. /*-------------------------------------------------------------------*/
  2248.  
  2249.   done = 'FALSE'
  2250.  
  2251.   DO WHILE done == 'FALSE'
  2252.  
  2253.     SAY '   OS2 input drive = 'bootdrive
  2254.     SAY 'IBMCOM input drive = 'ibmcomdrive
  2255.  
  2256.     '@ECHO User confirmation:  boot="'bootdrive'" '  ,
  2257.            'ibmcom="'ibmcomdrive'"'  log
  2258.  
  2259.     SAY
  2260.     SAY 'Proceed with the above drives?  Enter Y to continue or any other'
  2261.     SAY 'key to use different drive(s):'
  2262.  
  2263.     PULL ans
  2264.  
  2265.     IF ans == 'Y' THEN DO
  2266.  
  2267.       done = 'TRUE'
  2268.       '@ECHO User confirms use of above drives.' log
  2269.  
  2270.     END
  2271.     ELSE DO
  2272.  
  2273.       '@ECHO User wants to override the above drives.' log
  2274.  
  2275.       SAY
  2276.       SAY 'Enter drive for OS/2 system files or press ENTER to accept'
  2277.       SAY '"'bootdrive'".'
  2278.  
  2279.       PARSE UPPER PULL userinput .
  2280.  
  2281.       '@ECHO For bootdrive user specified "'userinput'"' log
  2282.  
  2283.       SELECT
  2284.         WHEN Length( userinput ) == 0 THEN NOP
  2285.         WHEN Length( userinput ) == 1 THEN bootdrive = userinput || ':'
  2286.         WHEN Length( userinput ) == 2 THEN DO
  2287.           IF Substr( userinput, 2, 1 ) == ':' THEN bootdrive = userinput
  2288.           ELSE SAY 'Error:  Invalid drive letter is ignored.'
  2289.         END
  2290.         OTHERWISE SAY 'Error:  Invalid drive letter is ignored.'
  2291.       END
  2292.  
  2293.       SAY
  2294.       SAY 'Enter drive for IBMCOM files or press ENTER to accept'
  2295.       SAY '"'ibmcomdrive'".'
  2296.  
  2297.       PARSE UPPER PULL userinput .
  2298.  
  2299.       '@ECHO For \IBMCOM user specified "'userinput'"' log
  2300.  
  2301.       SELECT
  2302.         WHEN Length( userinput ) == 0 THEN NOP
  2303.         WHEN Length( userinput ) == 1 THEN ibmcomdrive = userinput || ':'
  2304.         WHEN Length( userinput ) == 2 THEN DO
  2305.           IF Substr( userinput, 2, 1 ) == ':' THEN ibmcomdrive = userinput
  2306.           ELSE SAY 'Error:  Invalid drive letter is ignored.'
  2307.         END
  2308.         OTHERWISE SAY 'Error:  Invalid drive letter is ignored.'
  2309.       END
  2310.  
  2311.    END
  2312.  
  2313.   END
  2314.  
  2315.   rc = PATHMK( destination'\MINIOS2\OS2\DLL' )
  2316.   rc = PATHMK( destination'\MINIOS2\OS2\SYSTEM' )
  2317.   rc = PATHMK( destination'\MINIOS2\IBMCOM\DLL' )
  2318.   rc = PATHMK( destination'\MINIOS2\IBMCOM\MACS' )
  2319.   rc = PATHMK( destination'\MINIOS2\IBMCOM\PROTOCOL' )
  2320.  
  2321. /*-------------------------------------------------------------------*/
  2322. /*    Copy the OS/2 kernal files.                                    */
  2323. /*-------------------------------------------------------------------*/
  2324.  
  2325.   SAY
  2326.   SAY 'Copying OS/2 kernel...'
  2327.  
  2328.   srcdir = bootdrive'\'
  2329.   tgtdir = destination'\MINIOS2\'
  2330.  
  2331.   '@ECHO OFF'
  2332.   'XCOPY 'srcdir'OS2LDR        'tgtdir'*.* /r /h /t /o ' log
  2333.   'XCOPY 'srcdir'OS2LDR.MSG    'tgtdir'*.* /r /h /t /o ' log
  2334.   'XCOPY 'srcdir'OS2KRNL       'tgtdir'*.* /r /h /t /o ' log
  2335.  
  2336.   rc = SysFileTree( srcdir'OS2VER', stem, 'FO' )
  2337.   IF stem.0 > 0 THEN DO
  2338.     'XCOPY 'srcdir'OS2VER      'tgtdir'*.* /r /h /t /o ' log
  2339.   END
  2340.  
  2341.   'ATTRIB -r -h -s 'tgtdir'*.* ' log
  2342.   '@ECHO ON'
  2343.  
  2344. /*-------------------------------------------------------------------*/
  2345. /*    Copy the required OS/2 base files.                             */
  2346. /*-------------------------------------------------------------------*/
  2347.  
  2348.   SAY
  2349.   SAY 'Copying OS/2 base system...'
  2350.  
  2351.   srcdir = bootdrive'\OS2\'
  2352.   tgtdir = destination'\MINIOS2\OS2\'
  2353.  
  2354.   '@ECHO OFF'
  2355.   'XCOPY 'srcdir'CLOCK*.SYS     'tgtdir'*.* ' log
  2356.   'XCOPY 'srcdir'KBD*.SYS       'tgtdir'*.* ' log
  2357.   'XCOPY 'srcdir'PRINT*.SYS     'tgtdir'*.* ' log
  2358.   'XCOPY 'srcdir'SCREEN*.SYS    'tgtdir'*.* ' log
  2359.   'XCOPY 'srcdir'*.ADD          'tgtdir'*.* ' log
  2360.  
  2361.   rc = SysFileTree( srcdir'*.I13', stem, 'FO' )
  2362.   IF stem.0 > 0 THEN DO
  2363.     'XCOPY 'srcdir'*.I13        'tgtdir'*.* ' log
  2364.   END
  2365.  
  2366.   'XCOPY 'srcdir'CMD.EXE        'tgtdir'*.* ' log
  2367.   'XCOPY 'srcdir'HPFS.IFS       'tgtdir'*.* ' log
  2368.   'XCOPY 'srcdir'KEYBOARD.DCP   'tgtdir'*.* ' log
  2369.   'XCOPY 'srcdir'OS2DASD.DMD    'tgtdir'*.* ' log
  2370.   'XCOPY 'srcdir'OS2SCSI.DMD    'tgtdir'*.* ' log
  2371.   'XCOPY 'srcdir'TESTCFG.SYS    'tgtdir'*.* ' log
  2372.   'XCOPY 'srcdir'VIOTBL.DCP     'tgtdir'*.* ' log
  2373.   'XCOPY 'srcdir'VDISK.SYS      'tgtdir'*.* ' log
  2374.   '@ECHO ON'
  2375.  
  2376. /*-------------------------------------------------------------------*/
  2377. /*    Copy the required OS/2 DLL files.                              */
  2378. /*-------------------------------------------------------------------*/
  2379.  
  2380.   srcdir = bootdrive'\OS2\DLL\'
  2381.   tgtdir = destination'\MINIOS2\OS2\DLL\'
  2382.  
  2383.   '@ECHO OFF'
  2384.   'XCOPY 'srcdir'ANSICALL.DLL   'tgtdir'*.* ' log
  2385.   'XCOPY 'srcdir'BDCALLS.DLL    'tgtdir'*.* ' log
  2386.   'XCOPY 'srcdir'BKSCALLS.DLL   'tgtdir'*.* ' log
  2387.   'XCOPY 'srcdir'BMSCALLS.DLL   'tgtdir'*.* ' log
  2388.   'XCOPY 'srcdir'BVHINIT.DLL    'tgtdir'*.* ' log
  2389.   'XCOPY 'srcdir'bvhvga.dll     'tgtdir'*.* ' log
  2390.   'XCOPY 'srcdir'BVSCALLS.DLL   'tgtdir'*.* ' log
  2391.   'XCOPY 'srcdir'DOSCALL1.DLL   'tgtdir'*.* ' log
  2392.   'XCOPY 'srcdir'KBDCALLS.DLL   'tgtdir'*.* ' log
  2393.   'XCOPY 'srcdir'MOUCALLS.DLL   'tgtdir'*.* ' log
  2394.   'XCOPY 'srcdir'MSG.DLL        'tgtdir'*.* ' log
  2395.   'XCOPY 'srcdir'NAMPIPES.DLL   'tgtdir'*.* ' log
  2396.   'XCOPY 'srcdir'NLS.DLL        'tgtdir'*.* ' log
  2397.   'XCOPY 'srcdir'NPXEMLTR.DLL   'tgtdir'*.* ' log
  2398.   'XCOPY 'srcdir'OS2CHAR.DLL    'tgtdir'*.* ' log
  2399.   'XCOPY 'srcdir'QUECALLS.DLL   'tgtdir'*.* ' log
  2400.   'XCOPY 'srcdir'SESMGR.DLL     'tgtdir'*.* ' log
  2401.   'XCOPY 'srcdir'VIOCALLS.DLL   'tgtdir'*.* ' log
  2402.   '@ECHO ON'
  2403.  
  2404. /*-------------------------------------------------------------------*/
  2405. /*    Copy the required OS/2 SYSTEM files.                           */
  2406. /*-------------------------------------------------------------------*/
  2407.  
  2408.   srcdir = bootdrive'\OS2\SYSTEM\'
  2409.   tgtdir = destination'\MINIOS2\OS2\SYSTEM\'
  2410.  
  2411.   '@ECHO OFF'
  2412.   'XCOPY 'srcdir'COUNTRY.SYS    'tgtdir'*.* ' log
  2413.   'XCOPY 'srcdir'OSO001.MSG     'tgtdir'*.* ' log
  2414.   '@ECHO ON'
  2415.  
  2416. /*-------------------------------------------------------------------*/
  2417. /*    Copy the NETBIOS files.  The assumptions are:                  */
  2418. /*                                                                   */
  2419. /*      - The current system has an IBMCOM directory.                */
  2420. /*      - The IBMCOM directory is correctly setup.  That is,         */
  2421. /*        NETBIOS currently works.                                   */
  2422. /*-------------------------------------------------------------------*/
  2423.  
  2424.   SAY
  2425.   SAY 'Copying IBMCOM files for NETBIOS...'
  2426.  
  2427.   srcdir = ibmcomdrive'\IBMCOM\'
  2428.   tgtdir = destination'\MINIOS2\IBMCOM\'
  2429.  
  2430.   '@ECHO OFF'
  2431.   'XCOPY 'srcdir'LANMSGDD.OS2   'tgtdir'*.* ' log
  2432.   'XCOPY 'srcdir'LANMSGEX.EXE   'tgtdir'*.* ' log
  2433.   'XCOPY 'srcdir'LT0.MSG        'tgtdir'*.* ' log
  2434.   'XCOPY 'srcdir'LT2.MSG        'tgtdir'*.* ' log
  2435.   'XCOPY 'srcdir'PRO.MSG        'tgtdir'*.* ' log
  2436.   'XCOPY 'srcdir'PROTMAN.OS2    'tgtdir'*.* ' log
  2437.   'XCOPY 'srcdir'PROTOCOL.INI   'tgtdir'*.* ' log
  2438.  
  2439.   srcdir = ibmcomdrive'\IBMCOM\MACS\'
  2440.   tgtdir = destination'\MINIOS2\IBMCOM\MACS\'
  2441.  
  2442.   'XCOPY 'srcdir'*.*            'tgtdir'*.* ' log
  2443.  
  2444.   srcdir = ibmcomdrive'\IBMCOM\DLL\'
  2445.   tgtdir = destination'\MINIOS2\IBMCOM\DLL\'
  2446.  
  2447.   'XCOPY 'srcdir'ACSLAN.DLL     'tgtdir'*.* ' log
  2448.   'XCOPY 'srcdir'ACSNETB.DLL    'tgtdir'*.* ' log
  2449.   'XCOPY 'srcdir'LANMSGDL.DLL   'tgtdir'*.* ' log
  2450.  
  2451.   srcdir = ibmcomdrive'\IBMCOM\PROTOCOL\'
  2452.   tgtdir = destination'\MINIOS2\IBMCOM\PROTOCOL\'
  2453.  
  2454.   'XCOPY 'srcdir'NETBEUI.OS2    'tgtdir'*.* ' log
  2455.   'XCOPY 'srcdir'NETBIND.EXE    'tgtdir'*.* ' log
  2456.   'XCOPY 'srcdir'NETBIOS.OS2    'tgtdir'*.* ' log
  2457.   '@ECHO ON'
  2458.  
  2459.   dir = Directory( savedir )
  2460.  
  2461.   RETURN  /* end of CREATEMINI */
  2462.  
  2463.  
  2464. /*--------------------------------------------------------------------*/
  2465. /*    Ask user to select A: or B: to read diskettes from.             */
  2466. /*--------------------------------------------------------------------*/
  2467.  
  2468. GETFLOPPY: PROCEDURE EXPOSE floppy log
  2469.  
  2470. getFloppyLoop:
  2471.  
  2472.   CALL SysCls
  2473.   pos = SysCurPos( 0, 0 )
  2474.  
  2475.   SAY '╔════════════════════════════════════════════════════════════════╗'
  2476.   SAY '║                                                                ║'
  2477.   SAY '║             SELECT Drive from which to read diskettes          ║'
  2478.   SAY '║                                                                ║'
  2479.   SAY '╟──────────────┬─────────────────────────────────────────────────╢'
  2480.   SAY '║  SELECTION   │  Description                                    ║'
  2481.   SAY '╟──────────────┼─────────────────────────────────────────────────╢'
  2482.   SAY '║              │                                                 ║'
  2483.   SAY '║      A       │  A:                                             ║'
  2484.   SAY '║              │                                                 ║'
  2485.   SAY '║      B       │  B:                                             ║'
  2486.   SAY '║              │                                                 ║'
  2487.   SAY '║      X       │  Return to main actions menu.                   ║'
  2488.   SAY '║              │                                                 ║'
  2489.   SAY '╚══════════════╧═════════════════════════════════════════════════╝'
  2490.   SAY 'Enter SELECTION and press enter:'
  2491.  
  2492.   PULL driveLetter
  2493.  
  2494.   '@ECHO GetFloppyDrive: 'driveLetter' selected' log
  2495.   SAY
  2496.  
  2497.   SELECT
  2498.  
  2499.      WHEN driveLetter = 'A' THEN
  2500.         floppy = 'A:'
  2501.  
  2502.      WHEN driveLetter = 'A:' THEN
  2503.         floppy = 'A:'
  2504.  
  2505.      WHEN driveLetter = 'B' THEN
  2506.         floppy = 'B:'
  2507.  
  2508.      WHEN driveLetter = 'B:' THEN
  2509.         floppy = 'B:'
  2510.  
  2511.      WHEN driveLetter = 'X'  THEN
  2512.         RETURN 1
  2513.  
  2514.      OTHERWISE
  2515.         DO
  2516.            SAY 'Invalid drive selected.'
  2517.            CALL   PAUSEMSG
  2518.            SIGNAL getFloppyLoop
  2519.         END
  2520.  
  2521.   END     /* of SELECT */
  2522.  
  2523.   RETURN 0 /* end of GETFLOPPY */
  2524.  
  2525.  
  2526. /*--------------------------------------------------------------------*/
  2527. /*    Set up for trial authorization.                                 */
  2528. /*--------------------------------------------------------------------*/
  2529.  
  2530. AUTHTRIAL: PROCEDURE EXPOSE destination log trialDays trialAccess ,
  2531.                             trialCsName defTrialDays
  2532.  
  2533. expiryChange:
  2534.  
  2535.   CALL SysCls
  2536.   pos = SysCurPos( 0, 0 )
  2537.  
  2538.   PARSE VALUE Date('U') WITH month '/' day '/' year
  2539.  
  2540.   day = day + trialDays
  2541.  
  2542.   DO WHILE day > 28                            /* note: approximation   */
  2543.      day = day - 28
  2544.      month = month + 1
  2545.   END
  2546.  
  2547.   DO WHILE month > 12
  2548.      month = month - 12
  2549.      year  = year + 1
  2550.   END
  2551.  
  2552.   IF Length(month) = 1 THEN
  2553.      month = '0'||month
  2554.  
  2555.   IF Length(day) = 1 THEN
  2556.      day = '0'||day
  2557.  
  2558.   trialAccess = trialAccess - 1 + 1            /* remove leading zero's */
  2559.  
  2560.   IF Length(trialAccess) = 1 THEN
  2561.      trialAccess = '0'||trialAccess
  2562.  
  2563.   expiry = month||'/'||day||'/'||year
  2564.  
  2565.   trialCsName = Substr(trialCsName, 1, 8)      /* truncate or blank pad */
  2566.  
  2567.   SAY '╔════════════════════════════════════════════════════════════════╗'
  2568.   SAY '║  The trial authorization key will be based on the following    ║'
  2569.   SAY '║  parameters:                                                   ║'
  2570.   SAY '║                                                                ║'
  2571.   SAY '║      Code Server name ............... 'trialCsName'                 ║'
  2572.   SAY '║      Trial expiry date............... 'expiry'                 ║'
  2573.   SAY '║      Number of concurrent accesses... 'trialAccess'                       ║'
  2574.   SAY '║      Company or Organization name.... ????????                 ║'
  2575.   SAY '║                                                                ║'
  2576.   SAY '║  Please enter your company or organization name.               ║'
  2577.   SAY '║                                                                ║'
  2578.   SAY '║  For example:                                                  ║'
  2579.   SAY '║                ABC Enterprises Inc.                            ║'
  2580.   SAY '║                                                                ║'
  2581.   SAY '╚════════════════════════════════════════════════════════════════╝'
  2582.   SAY 'Enter your company or organization name (truncated at 50 chars)'
  2583.   SAY '  or C to change the expiry date'
  2584.   SAY '  or X to return to the main menu:'
  2585.  
  2586.   PARSE PULL  coName
  2587.  
  2588.   IF Translate(coName) = 'X' THEN
  2589.      RETURN 0
  2590.  
  2591.   IF Translate(coName) = 'C' THEN DO    /* option to change expiry days */
  2592.      trialDaysAgain:
  2593.      SAY
  2594.      SAY 'Enter number of trial days (default = 'defTrialDays')'
  2595.      PULL trialDays
  2596.  
  2597.      IF Datatype(trialDays) <> 'NUM' THEN DO
  2598.         SAY '"'trialDays'" is invalid, must be numeric'
  2599.         SIGNAL trialDaysAgain
  2600.      END
  2601.  
  2602.      IF trialDays > 90 THEN DO
  2603.         SAY 'Number of days to large, must be 90 or less'
  2604.         SIGNAL trialDaysAgain
  2605.      END
  2606.  
  2607.      SIGNAL expiryChange
  2608.   END
  2609.  
  2610.   coName = Substr(coName, 1, 50)               /* truncate or blank pad */
  2611.  
  2612. reCalcChksum:
  2613.  
  2614.   bits = Bitxor(trialCsName, expiry)
  2615.   bits = Bitxor(bits, trialAccess)
  2616.   bits = Bitxor(bits, coName)
  2617.  
  2618.   chksum = '0000'x
  2619.  
  2620.   i = Length(bits)                          /* code below assumes i > 2 */
  2621.   IF i//2 = 0 THEN
  2622.      i = i - 1                          /* pos of even byte pair is odd */
  2623.  
  2624.   DO WHILE i > 0
  2625.      chksum = Bitxor(chksum, Substr(bits, i, 2, '00'x))
  2626.      i = i - 2
  2627.   END
  2628.  
  2629.   chksum = C2X(chksum)
  2630.  
  2631. promptAuthCodeTrial:
  2632.  
  2633.   CALL SysCls
  2634.   pos = SysCurPos( 0, 0 )
  2635.  
  2636.   SAY '╔════════════════════════════════════════════════════════════════╗'
  2637.   SAY '║  Please call/fax/e-mail ForeFront Software to obtain an        ║'
  2638.   SAY '║  authorization key for your trial.                             ║'
  2639.   SAY '║                                                                ║'
  2640.   SAY '║  You must supply the following information exactly as          ║'
  2641.   SAY '║  shown below to obtain the key:                                ║'
  2642.   SAY '║                                                                ║'
  2643.   SAY '║      Code Server name ............... 'trialCsName'                 ║'
  2644.   SAY '║      Trial expiry date............... 'expiry'                 ║'
  2645.   SAY '║      Number of concurrent accesses... 'trialAccess'                       ║'
  2646.   SAY '║                                                                ║'
  2647.   SAY '║      Company or Organization name:                             ║'
  2648.   SAY '║                                                                ║'
  2649.   SAY '║      'coName'        ║'
  2650.   SAY '║                                                                ║'
  2651.   SAY '║      Checksum........................ 'chksum'                     ║'
  2652.   SAY '║                                                                ║'
  2653.   SAY '║  You will be given an authorization key which you should enter ║'
  2654.   SAY '║  below.  You may enter X below to return to the main ACTIONS   ║'
  2655.   SAY '║  menu and perform the authorization later if you wish.         ║'
  2656.   SAY '║                                                                ║'
  2657.   SAY '║  ForeFront can be reached at:                                  ║'
  2658.   SAY '║                                                                ║'
  2659.   SAY '║        phone: (403) 531-2160                                   ║'
  2660.   SAY '║        fax:   (403) 270-0372                                   ║'
  2661.   SAY '║        CIM:   73110,722                                        ║'
  2662.   SAY '║                                                                ║'
  2663.   SAY '║                                                                ║'
  2664.   SAY '╚════════════════════════════════════════════════════════════════╝'
  2665.   SAY 'Enter authorization key or X to return to the main menu:'
  2666.  
  2667.   PULL  authCode
  2668.  
  2669.   IF authCode = 'X' THEN
  2670.      RETURN 0
  2671.  
  2672.   IF authCode = 'C' THEN DO             /* option to change expiry days */
  2673.      trialDaysAgain2:
  2674.      SAY
  2675.      SAY 'Enter number of days for trial'
  2676.      PULL newTrialDays
  2677.      IF Datatype(newtrialDays) <> 'NUM' THEN
  2678.         SIGNAL trialDaysAgain2
  2679.      IF newTrialDays > 125 THEN
  2680.         SIGNAL trialDaysAgain2
  2681.  
  2682.      PARSE VALUE Date('U') WITH month '/' day '/' year
  2683.      day = day + newTrialDays
  2684.  
  2685.      DO WHILE day > 28
  2686.         day = day - 28
  2687.         month = month + 1
  2688.      END
  2689.  
  2690.      DO WHILE month > 12
  2691.         month = month - 12
  2692.         year  = year + 1
  2693.      END
  2694.  
  2695.      IF Length(month) = 1 THEN
  2696.         month = '0'||month
  2697.  
  2698.      IF Length(day) = 1 THEN
  2699.         day = '0'||day
  2700.  
  2701.      expiry = month||'/'||day||'/'||year
  2702.  
  2703.      SIGNAL reCalcChksum
  2704.   END
  2705.  
  2706.   IF Length(Strip(authCode)) <> 12 THEN DO
  2707.      SAY
  2708.      SAY 'Invalid authorization code.'
  2709.      CALL PAUSEMSG
  2710.      SIGNAL promptAuthCodeTrial
  2711.   END
  2712.  
  2713.   '@ECHO authTrial: code server name = 'trialCsName log 
  2714.   '@ECHO            expiry = 'expiry log 
  2715.   '@ECHO            accesses = 'trialAccess log 
  2716.   '@ECHO            company = 'coName log 
  2717.   '@ECHO            check sum = 'chksum log 
  2718.   '@ECHO            auth code = 'authCode log
  2719.  
  2720.   retcode = CHECKSUMAUTHCODE()
  2721.  
  2722.   IF retcode <> 0 THEN DO
  2723.      SAY
  2724.      SAY 'The authorization code you entered has a checksum error.'
  2725.      CALL PAUSEMSG
  2726.      SIGNAL promptAuthCodeTrial
  2727.   END
  2728.  
  2729.   savedir     = Directory()
  2730.   authdir     = destination ||'\BIN\SERVER'
  2731.  
  2732.   rc = PATHMK( authdir )
  2733.   authdir = Directory( authdir )
  2734.  
  2735.   filename = Strip(trialCsName) || '.AUT'
  2736.   bakname  = Strip(trialCsName) || '.BAK'
  2737.  
  2738.   rc = SysFileTree( filename, stem, 'FO' )
  2739.   IF stem.0 > 0 THEN DO
  2740.     '@ECHO Backing up previous 'filename' to 'bakname log
  2741.     '@ECHO OFF'
  2742.     'XCOPY 'filename' *.BAK' log
  2743.     'DEL 'filename log
  2744.     '@ECHO ON'
  2745.   END
  2746.  
  2747.   Call Lineout filename, 'TRIAL', 1
  2748.   Call Lineout filename, trialCsName
  2749.   Call Lineout filename, expiry
  2750.   Call Lineout filename, trialAccess
  2751.   Call Lineout filename, coName
  2752.   Call Lineout filename, chksum
  2753.   Call Lineout filename, authCode
  2754.  
  2755.   Call Stream filename, 'C', 'CLOSE'
  2756.  
  2757.   '@ECHO 'filename' successfully written to 'authdir log
  2758.  
  2759.   RETURN 0 /* end of AUTHTRIAL */
  2760.  
  2761.  
  2762. /*--------------------------------------------------------------------*/
  2763. /*    Set up authorization for production LCF use.                    */
  2764. /*--------------------------------------------------------------------*/
  2765.  
  2766. AUTHPROD: PROCEDURE EXPOSE destination log
  2767.  
  2768.   CALL SysCls
  2769.   pos = SysCurPos( 0, 0 )
  2770.  
  2771.   prodCsName = '????????'
  2772.   prodAccess = '??'
  2773.  
  2774.   SAY '╔════════════════════════════════════════════════════════════════╗'
  2775.   SAY '║  The production authorization key will be based on the         ║'
  2776.   SAY '║  following parameters:                                         ║'
  2777.   SAY '║                                                                ║'
  2778.   SAY '║      Company or Organization name.... ????????                 ║'
  2779.   SAY '║      Code Server name ............... 'prodCsName'                 ║'
  2780.   SAY '║      Number of concurrent accesses... 'prodAccess'                       ║'
  2781.   SAY '║                                                                ║'
  2782.   SAY '║  Please enter your company or organization name.               ║'
  2783.   SAY '║                                                                ║'
  2784.   SAY '║  For example:                                                  ║'
  2785.   SAY '║                ABC Enterprises Inc.                            ║'
  2786.   SAY '║                                                                ║'
  2787.   SAY '╚════════════════════════════════════════════════════════════════╝'
  2788.   SAY 'Enter your company or organization name (truncated at 50 chars):'
  2789.  
  2790.   PARSE PULL  coName
  2791.  
  2792.   coName = Substr(coName, 1, 50)               /* truncate or blank pad */
  2793.  
  2794.   SAY
  2795.   SAY 'Enter the Code Server Name you intend to use (eg. OS2BENCH):'
  2796.  
  2797. prodCsNameLoop:
  2798.  
  2799.   PARSE UPPER LINEIN prodCsName rest
  2800.  
  2801.   IF Datatype(prodCsName, 'A') <> 1 THEN DO
  2802.      SAY
  2803.      SAY'Code Server name entered is invalid, reenter it:'
  2804.      SIGNAL prodCsNameLoop
  2805.      END
  2806.  
  2807.   prodCsName = Substr(prodCSName, 1, 8)        /* truncate or blank pad */
  2808.  
  2809.   SAY
  2810.   SAY 'Enter the number of concurrent accesses this code server will have:'
  2811.  
  2812. prodAccessLoop:
  2813.  
  2814.   PULL prodAccess
  2815.  
  2816.   IF Datatype(prodAccess) <> 'NUM' | prodAccess < 1 | prodAccess > 32 THEN DO
  2817.      SAY
  2818.      SAY'Number of concurrent accesses is invalid, reenter it (1-32 valid):'
  2819.      SIGNAL prodAccessLoop
  2820.      END
  2821.  
  2822.   prodAccess = prodAccess - 1 + 1              /* remove leading zero's */
  2823.  
  2824.   IF Length(prodAccess) = 1 THEN
  2825.      prodAccess = '0'||prodAccess
  2826.  
  2827.   bits = Bitxor(prodCsName, prodAccess)
  2828.   bits = Bitxor(bits, coName)
  2829.  
  2830.   chksum = '0000'x
  2831.  
  2832.   i = Length(bits)                          /* code below assumes i > 2 */
  2833.   IF i//2 = 0 THEN
  2834.      i = i - 1                          /* pos of even byte pair is odd */
  2835.  
  2836.   DO WHILE i > 0
  2837.      chksum = Bitxor(chksum, Substr(bits, i, 2, '00'x))
  2838.      i = i - 2
  2839.   END
  2840.  
  2841.   chksum = C2X(chksum)
  2842.  
  2843. promptAuthCodeProd:
  2844.  
  2845.   CALL SysCls
  2846.   pos = SysCurPos( 0, 0 )
  2847.  
  2848.   SAY '╔════════════════════════════════════════════════════════════════╗'
  2849.   SAY '║  Please call/fax/e-mail ForeFront Software to obtain an        ║'
  2850.   SAY '║  authorization key for this production LCF server.             ║'
  2851.   SAY '║                                                                ║'
  2852.   SAY '║  You must supply the following information exactly as          ║'
  2853.   SAY '║  shown below to obtain the key:                                ║'
  2854.   SAY '║                                                                ║'
  2855.   SAY '║      Code Server name ............... 'prodCsName'                 ║'
  2856.   SAY '║      Number of concurrent accesses... 'prodAccess'                       ║'
  2857.   SAY '║                                                                ║'
  2858.   SAY '║      Company or Organization name:                             ║'
  2859.   SAY '║                                                                ║'
  2860.   SAY '║      'coName'        ║'
  2861.   SAY '║                                                                ║'
  2862.   SAY '║      Checksum........................ 'chksum'                     ║'
  2863.   SAY '║                                                                ║'
  2864.   SAY '║  You will be given an authorization key which you should enter ║'
  2865.   SAY '║  below.  You may enter X below to return to the main ACTIONS   ║'
  2866.   SAY '║  menu and perform the authorization later if you wish.         ║'
  2867.   SAY '║                                                                ║'
  2868.   SAY '║  ForeFront can be reached at:                                  ║'
  2869.   SAY '║                                                                ║'
  2870.   SAY '║        phone: (403) 531-2160                                   ║'
  2871.   SAY '║        fax:   (403) 270-0372                                   ║'
  2872.   SAY '║        CIM:   73110,722                                        ║'
  2873.   SAY '║                                                                ║'
  2874.   SAY '║                                                                ║'
  2875.   SAY '╚════════════════════════════════════════════════════════════════╝'
  2876.   SAY 'Enter authorization key or X to return to the main menu:'
  2877.  
  2878.   PULL  authCode
  2879.  
  2880.   IF authCode = 'X' THEN
  2881.      RETURN 0
  2882.  
  2883.   IF Length(Strip(authCode)) <> 12 THEN DO
  2884.      SAY
  2885.      SAY 'Invalid authorization code.'
  2886.      CALL PAUSEMSG
  2887.      SIGNAL promptAuthCodeProd
  2888.   END
  2889.  
  2890.   '@ECHO authProd: code server name = 'prodCsName log 
  2891.   '@ECHO           accesses = 'prodAccess log 
  2892.   '@ECHO           company = 'coName log 
  2893.   '@ECHO           check sum = 'chksum log 
  2894.   '@ECHO           auth code = 'authCode log
  2895.  
  2896.   retcode = CHECKSUMAUTHCODE()
  2897.  
  2898.   IF retcode <> 0 THEN DO
  2899.      SAY
  2900.      SAY 'The authorization code you entered has a checksum error.'
  2901.      CALL PAUSEMSG
  2902.      SIGNAL promptAuthCodeProd
  2903.   END
  2904.  
  2905.   savedir     = Directory()
  2906.   authdir     = destination ||'\BIN\SERVER'
  2907.  
  2908.   rc = PATHMK( authdir )
  2909.   authdir = Directory( authdir )
  2910.  
  2911.   filename = Strip(prodCsName) || '.AUT'
  2912.   bakname  = Strip(prodCsName) || '.BAK'
  2913.  
  2914.   rc = SysFileTree( filename, stem, 'FO' )
  2915.   IF stem.0 > 0 THEN DO
  2916.     '@ECHO Backing up previous 'filename' to 'bakname log
  2917.     '@ECHO OFF'
  2918.     'XCOPY 'filename' *.BAK' log
  2919.     'DEL 'filename log
  2920.     '@ECHO ON'
  2921.   END
  2922.  
  2923.   Call Lineout filename, 'PROD', 1
  2924.   Call Lineout filename, prodCsName
  2925.   Call Lineout filename, prodAccess
  2926.   Call Lineout filename, coName
  2927.   Call Lineout filename, chksum
  2928.   Call Lineout filename, authCode
  2929.  
  2930.   Call Stream filename, 'C', 'CLOSE'
  2931.  
  2932.   '@ECHO 'filename' successfully written to 'authdir log
  2933.  
  2934.   RETURN 0 /* end of AUTHPROD */
  2935.  
  2936.  
  2937. /*--------------------------------------------------------------------*/
  2938. /*    Make sure the AuthCode has a valid checksum byte                */
  2939. /*--------------------------------------------------------------------*/
  2940.  
  2941. CHECKSUMAUTHCODE: PROCEDURE EXPOSE authCode
  2942.  
  2943.   IF Datatype(authCode, X) <> 1 THEN
  2944.      RETURN 1
  2945.  
  2946.   IF Pos(' ', authCode) <> 0 THEN
  2947.      RETURN 1
  2948.  
  2949.   code = X2c(authCode)
  2950.  
  2951.   chk = '00'x
  2952.  
  2953.   i = Length(code) - 1
  2954.  
  2955.   DO WHILE i > 0
  2956.      chk = Bitxor(chk, Substr(code, i, 1, '00'x))
  2957.      i = i - 1
  2958.   END
  2959.  
  2960.   IF chk == Substr(code, Length(code), 1) THEN
  2961.      RETURN 0
  2962.  
  2963.   RETURN 1
  2964.  
  2965.  
  2966. /*--------------------------------------------------------------------*/
  2967. /*    Ask user to identify CDROM drive and check the media in it.     */
  2968. /*--------------------------------------------------------------------*/
  2969.  
  2970. GETCDROM: PROCEDURE EXPOSE cdrom cdromlabel log
  2971.  
  2972. getCdromLoop:
  2973.  
  2974.   CALL SysCls
  2975.   pos = SysCurPos( 0, 0 )
  2976.  
  2977.   SAY
  2978.   SAY 'Enter drive letter of CD-ROM:'
  2979.  
  2980.   PULL cdrom
  2981.  
  2982.   '@ECHO GetCDROMDrive: 'cdrom' entered' log
  2983.  
  2984.   SELECT
  2985.     WHEN Length( cdrom ) == 1 THEN cdrom = cdrom':'
  2986.     WHEN Length( cdrom ) == 2 THEN DO
  2987.       IF Substr( cdrom, 2, 1 ) <> ':' THEN DO
  2988.         SAY
  2989.         SAY 'Error:  Invalid drive id.'
  2990.         CALL PAUSEMSG
  2991.         SIGNAL getCdromLoop
  2992.       END
  2993.     END
  2994.     OTHERWISE DO
  2995.       SAY
  2996.       SAY 'Error:  Invalid drive id.'
  2997.       CALL PAUSEMSG
  2998.       SIGNAL getCdromLoop
  2999.     END
  3000.  
  3001.   END     /* of SELECT */
  3002.  
  3003.   SAY 
  3004.   SAY 'Insert IBM OS/2 CD-ROM in 'cdrom' and press any key when read...'
  3005.   key = SysGetKey( 'NOECHO' )
  3006.  
  3007.   done = 'FALSE'
  3008.  
  3009.   DO WHILE done == 'FALSE'
  3010.  
  3011.     driveinfo = SysDriveInfo( cdrom )
  3012.  
  3013.     PARSE VAR driveinfo . . . vollabel
  3014.  
  3015.     IF driveinfo == '' THEN DO
  3016.       '@ECHO ReadCDROM: Drive not ready' log
  3017.       SAY 
  3018.       SAY 'Error:  Drive 'cdrom' is NOT READY.'
  3019.       CALL PAUSEMSG
  3020.     END
  3021.     ELSE DO
  3022.  
  3023.       vollabel = STRIP( vollabel )
  3024.  
  3025.       IF cdromlabel == '' THEN done = TRUE
  3026.       ELSE IF vollabel == cdromlabel THEN done = TRUE
  3027.       ELSE DO
  3028.         '@ECHO ReadCDROM: Label = 'vollabel' is incorrect' log
  3029.         SAY 
  3030.         SAY 'Error:  Incorrect CD-ROM.  Label = "'vollabel'"'.
  3031.         SAY '        Insert IBM OS/2 CD-ROM in 'cdrom
  3032.         CALL PAUSEMSG
  3033.       END
  3034.  
  3035.     END
  3036.  
  3037.   END /* end of DO WHILE */
  3038.  
  3039.   RETURN  /* end of GETCDROM */
  3040.  
  3041.  
  3042. /*--------------------------------------------------------------------*/
  3043. /*    Ask user to select OS2 2.0 or 2.1 for loading LAN requester     */
  3044. /*--------------------------------------------------------------------*/
  3045.  
  3046. GETOSVER: PROCEDURE EXPOSE osver log
  3047.  
  3048. getOsverLoop:
  3049.  
  3050.   CALL SysCls
  3051.   pos = SysCurPos( 0, 0 )
  3052.  
  3053.   SAY '╔════════════════════════════════════════════════════════════════╗'
  3054.   SAY '║                                                                ║'
  3055.   SAY '║                SELECT OS/2 LAN requester is for                ║'
  3056.   SAY '║                                                                ║'
  3057.   SAY '║  Note:  If you require the requester for use with more than    ║'
  3058.   SAY '║  one release of OS/2 then you will need to run this procedure  ║'
  3059.   SAY '║  once for each release.                                        ║'
  3060.   SAY '║                                                                ║'
  3061.   SAY '╟──────────────┬─────────────────────────────────────────────────╢'
  3062.   SAY '║  SELECTION   │  Description                                    ║'
  3063.   SAY '╟──────────────┼─────────────────────────────────────────────────╢'
  3064.   SAY '║              │                                                 ║'
  3065.   SAY '║      0       │  OS/2 2.0                                       ║'
  3066.   SAY '║              │                                                 ║'
  3067.   SAY '║      1       │  OS/2 2.1                                       ║'
  3068.   SAY '║              │                                                 ║'
  3069.   SAY '║      X       │  Return to main actions menu.                   ║'
  3070.   SAY '║              │                                                 ║'
  3071.   SAY '╚══════════════╧═════════════════════════════════════════════════╝'
  3072.   SAY 'Enter SELECTION and press enter:'
  3073.  
  3074.   PULL osverResponse
  3075.  
  3076.   '@ECHO GetOSVer: Option 'osverResponse' selected' log
  3077.   SAY
  3078.  
  3079.   SELECT
  3080.  
  3081.      WHEN osverResponse = 0 THEN
  3082.         osver = 'OS2200'
  3083.  
  3084.      WHEN osverResponse = 1 THEN
  3085.         osver = 'OS2210'
  3086.  
  3087.      WHEN osverResponse = 'X' THEN
  3088.         RETURN 1
  3089.  
  3090.      OTHERWISE
  3091.         DO
  3092.            SAY 'Invalid selection.'
  3093.            CALL   PAUSEMSG
  3094.            SIGNAL getOsverLoop
  3095.         END
  3096.  
  3097.   END     /* of SELECT */
  3098.  
  3099.   RETURN 0 /* end of GETOSVER */
  3100.  
  3101.  
  3102. /*--------------------------------------------------------------------*/
  3103. /*    Build all required directories for a directory path.            */
  3104. /*                                                                    */
  3105. /*    eg.  PATHMK c:\a\b\c     will build any dirs in the path.       */
  3106. /*         PATHMK t\m\o        will build t in the current dir.       */
  3107. /*--------------------------------------------------------------------*/
  3108.  
  3109.  
  3110. PATHMK: PROCEDURE EXPOSE log            /* This function is RECURSIVE */
  3111.                     /* This function may change the current directory */
  3112.  
  3113.   ARG dir
  3114.  
  3115.   retcode = 0
  3116.  
  3117.   '@ECHO PATHMK entered for : 'dir log
  3118.  
  3119.   newdir = Directory( dir )
  3120.  
  3121.   IF (newdir <> dir) THEN DO
  3122.      i = Lastpos('\', dir)
  3123.      IF i <= 1 THEN DO
  3124.         IF Pos(':', dir) <> 0 THEN DO
  3125.            newdir = Directory( dir'\' )
  3126.            RETURN retcode
  3127.         END
  3128.         retcode = SysMkDir( dir )
  3129.         '@ECHO PATHMK 'dir' retcode = 'retcode log
  3130.         newdir = Directory( dir )
  3131.         RETURN retcode;
  3132.      END
  3133.  
  3134.      parent = SUBSTR(dir, 1, i-1);
  3135.      curr   = SUBSTR(dir, i+1, ,' ');
  3136.  
  3137.      retcode = PATHMK(parent)                               /* recurse */
  3138.  
  3139.      IF retcode = 0 THEN DO
  3140.         retcode = SysMkDir( curr )
  3141.         '@ECHO PATHMK 'curr' retcode = 'retcode log
  3142.         newdir = Directory( curr )
  3143.      END
  3144.  
  3145.   END
  3146.  
  3147.   RETURN retcode  /* end of PATHMK */
  3148.  
  3149.  
  3150. /*--------------------------------------------------------------------*/
  3151. /*    Ask user to insert a diskette into the floppy drive             */
  3152. /*--------------------------------------------------------------------*/
  3153.  
  3154. MOUNTDISK: PROCEDURE  EXPOSE floppy log
  3155.  
  3156.   PARSE ARG label, description
  3157.  
  3158.   '@ECHO MOUNTDISK entered for : 'label'  'description log
  3159.  
  3160.   Call SysCls             
  3161.   pos = SysCurPos( 0, 0 ) 
  3162.  
  3163.   done = 'FALSE'
  3164.  
  3165.   DO WHILE done == 'FALSE'
  3166.  
  3167.     SAY
  3168.     SAY 'Insert 'description' into 'floppy
  3169.     SAY
  3170.     SAY 'Press any key when ready...'
  3171.  
  3172.     key = SysGetKey( 'NOECHO' )
  3173.  
  3174.     driveinfo = SysDriveInfo( floppy )
  3175.  
  3176.     SAY
  3177.     SAY 'Reading 'floppy
  3178.     SAY
  3179.  
  3180.     PARSE VAR driveinfo . . . vollabel
  3181.  
  3182.     IF driveinfo == '' THEN DO
  3183.       '@ECHO MOUNTDISK: Drive 'floppy' not ready' log
  3184.       SAY 
  3185.       SAY 'Error:  Drive 'floppy' is NOT READY.'
  3186.       CALL   PAUSEMSG
  3187.     END
  3188.     ELSE DO
  3189.  
  3190.       vollabel = STRIP( vollabel )
  3191.  
  3192.       IF vollabel == label THEN done = TRUE
  3193.       ELSE DO
  3194.         '@ECHO MOUNTDISK: Wrong label 'vollabel log
  3195.         SAY 
  3196.         SAY 'Error:  Incorrect diskette.  Label = "'vollabel'"'.
  3197.         CALL   PAUSEMSG
  3198.       END
  3199.  
  3200.     END
  3201.  
  3202.   END
  3203.  
  3204.   RETURN 0 /* end of MOUNTDISK */
  3205.  
  3206.  
  3207. /*--------------------------------------------------------------------*/
  3208. /*    Change one or more string within a file.                        */
  3209. /*--------------------------------------------------------------------*/
  3210.  
  3211. CHNGFILE: PROCEDURE EXPOSE log
  3212.  
  3213.   Arg file, fromString, toString
  3214.  
  3215.   '@ECHO CHNGFILE: File = 'file' from = 'fromString' to = 'toString log
  3216.  
  3217.   fileTemp   = 'CHNGFILE.TMP'
  3218.   fileBackup = 'CHNGFILE.SAV'
  3219.  
  3220.   flag  = 0
  3221.   flag2 = 0
  3222.  
  3223.   DO WHILE Lines(file) > 0
  3224.   
  3225.      line = Linein(file)
  3226.  
  3227.      j = Pos(fromString,line)
  3228.  
  3229.      IF j <> 0 THEN DO
  3230.  
  3231.         line = substr(line, 1, j-1) || toString || ,
  3232.                substr(line,j+length(fromString))
  3233.  
  3234.         flag = 1
  3235.  
  3236.      END
  3237.  
  3238.      IF Pos(toString,line) <> 0 THEN flag2 = 1
  3239.  
  3240.      Call Lineout fileTemp, line
  3241.  
  3242.   END
  3243.  
  3244.   Call Stream file, 'C', 'CLOSE'
  3245.  
  3246.   IF flag = 1 THEN DO
  3247.         Call Stream fileTemp, 'C', 'CLOSE'
  3248.  
  3249.         '@ECHO OFF' 
  3250.         'COPY 'file' 'fileBackup' >>NUL'
  3251.         'DEL 'file
  3252.         'REN 'fileTemp ' 'file
  3253.         'DEL 'fileBackup
  3254.         '@ECHO ON' 
  3255.         '@ECHO CHNGFILE: successful' log
  3256.  
  3257.         RETURN 0
  3258.      END
  3259.  
  3260.   IF flag2 = 1 THEN DO
  3261.      '@ECHO CHNGFILE: retcode = 2' log
  3262.      RETURN 2
  3263.   END
  3264.  
  3265.   '@ECHO CHNGFILE: retcode = 1' log
  3266.  
  3267.   RETURN 1
  3268.  
  3269.