home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / archives / cko191.zip / install.cmd < prev    next >
OS/2 REXX Batch file  |  1995-04-24  |  60KB  |  1,878 lines

  1. /*
  2.   File INSTALL.CMD (CKOINS.CMD)
  3.  
  4.   19 April 1995
  5.  
  6.   A REXX Program to install OS/2 C-Kermit 5A(191) on OS/2 1.x, 2.x, or Warp.
  7.   Written by Jeffrey Altman and Frank da Cruz, Columbia University,
  8.   June 1993 - Mar 1995.
  9.  
  10.   Copyright (C) 1993, 1995, Trustees of Columbia University in the City
  11.   of New York.  The C-Kermit software may not be, in whole or in part,
  12.   licensed or sold for profit as a software product itself, nor may it be
  13.   included in or distributed with commercial products or otherwise
  14.   distributed by commercial concerns to their clients or customers without
  15.   written permission of the Office of Kermit Development and Distribution,
  16.   Columbia University.  This copyright notice must not be removed, altered,
  17.   or obscured.
  18. */
  19.  
  20. /*
  21.   All the files to be installed must be in the same directory as INSTALL.CMD.
  22.   This script:
  23.  
  24.   . Installs either the 16-bit or 32-bit version of C-Kermit
  25.     depending on the version of OS/2 being used, and which one(s)
  26.     is/are on the install disk.
  27.  
  28.   . Creates a directory for C-Kermit if necessary.
  29.  
  30.   . Creates a C-Kermit program object on the OS/2 Desktop.
  31.  
  32.   . Customizes the CKERMOD.INI file according to the user's preferences.
  33.  
  34.   . Installs the network DLLS, CKO{16,32}{I12,I20,F13}.DLL.
  35.  
  36.   . Updates the CONFIG.SYS file only at the user's request.
  37.  
  38.   * New for version 190:
  39.  
  40.   . TCP/IP-only installation - no questions about serial ports & modems.
  41.  
  42.   . Does not overwrite existing CKERMOD.INI, KDD or KSD files.
  43.  
  44.   . CKERMIT.CMD matches CKERMOD.INI settings.
  45.  
  46.   . Sets up full VT220 key mappings in CKERMOD.INI if user says to.
  47.  
  48.   . Uses Rexx procedures and subroutines.
  49.  
  50.   . Adds .INI files for various external protocols and key mappings.
  51.  
  52.   . Optional command-line parameter to specify the destination directory
  53.  
  54.   * New for version 191:
  55.  
  56.   . Installation of DLL containing VGA soft fonts for character-set support.
  57.  
  58.   . Additional of testing section.  Define Release to be Alpha, Beta or Final.
  59.  
  60.   . Make UTIL and CHARSETS directories
  61.  
  62.   . Conditional replacement of telnet.exe and telnetpm.exe.  Commented Out!
  63.  
  64.   . Install Telnet stubs into UTIL directory
  65.  
  66.   . Install of Clipboard Server into UTIL directory
  67.  
  68.   . Move Character-set files into CHARSETS directory
  69. */
  70. Release = "FINAL"
  71. Revision = 191
  72. RexxUtils = LoadRexxUtils()
  73. CALL ClearScreen
  74. CALL Welcome
  75. os2ver = WhichOS2Version( RexxUtils )
  76. bootdrive = GetBootDrive( RexxUtils )
  77. startdir = ChangeToSourceDirectory()
  78. spacerequired = HowMuchSpaceRequired( RexxUtils )
  79. CKOVer = WhichKermitVersion()
  80. CALL GetDir( ARG(1) )
  81. CALL CheckSpace
  82. CALL CreateDir
  83. tcpip = IsIBMTCPIPInstalled( RexxUtils )
  84.  
  85. newInstall = \ FileExists( destination || 'ckermit.ini' )
  86. IF newInstall THEN DO
  87. serial = InstallSerialSupport( tcpip )
  88. IF serial
  89.   THEN DO
  90.     CALL GetModem
  91.     CALL GetPort
  92.     CALL GetSpeed
  93.   END
  94.   ELSE DO
  95.     modem = ""
  96.     port = ""
  97.     speed = ""
  98.   END
  99. CALL GetRunMode
  100. vt220 = InstallVT220KeyMap()
  101. END
  102. ELSE DO
  103.   serial = 0
  104.   modem = ""
  105.   port = ""
  106.   speed = ""
  107.   vt220 = 0
  108. END
  109. /* This has been determined to be too confusing for the user.
  110.    Just set it to FALSE
  111. telnet = InstallTelnetReplacements()
  112. */
  113. telnet = 0
  114. CALL InstallFiles
  115. CALL SetIcon
  116. CALL BuildFolderObject
  117. CALL BuildProgramObject
  118. CALL BuildClipboardServerObject
  119. CALL BuildUpdatesObject
  120. CALL UpdateConfigSys
  121. CALL Done
  122. EXIT
  123.  
  124. /*******************************************************************/
  125.  
  126. INSTALLFILES : PROCEDURE EXPOSE RexxUtils OS2Ver CKOVer destination updest,
  127.                                 destnopath runmode serial tcpip vt220,
  128.                                 modem port speed revision telnet ;
  129. CALL InstallCKermitExe
  130. CALL InstallTcpIpDlls
  131. CALL InstallPCFonts
  132. CALL InstallCKTelnet
  133. CALL InstallClipboardServer
  134. CALL InstallSyslevelFiles
  135. CALL InstallCKermitIco
  136. CALL InstallDocs
  137. CALL InstallCkermitIni
  138. CALL InstallCkermodIni
  139. CALL InstallRexxCmdFiles
  140. CALL InstallDialingSupportFiles
  141. CALL InstallExternalProtocols
  142. CALL InstallCkermitCmd
  143. CALL InstallKeyboardDefs
  144. CALL InstallCharSets
  145. CALL InstallBitmaps
  146. RETURN /* InstallFiles */
  147.  
  148. /*******************************************************************/
  149.  
  150. LOADREXXUTILS: PROCEDURE ;
  151. /* Load RexxUtil if available */
  152.  
  153. SIGNAL ON SYNTAX NAME NoRexxUtil
  154. IF RxFuncQuery('SysLoadFuncs')
  155.   THEN CALL RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
  156. CALL SysLoadFuncs
  157.  
  158. SAY "RexxUtils installed. :-)"
  159. SIGNAL OFF SYNTAX
  160. RETURN 1
  161.  
  162. NOREXXUTIL:
  163. SAY "RexxUtils not installed. :-("
  164. CALL RxFuncDrop 'SysLoadFuncs'
  165. SIGNAL OFF SYNTAX
  166. RETURN 0 /* LoadRexxUtils */
  167.  
  168. /*******************************************************************/
  169.  
  170. WhichOS2Version : PROCEDURE ;
  171. RexxUtils = ARG(1)
  172. /* Determine OS/2 Version */
  173. IF RexxUtils
  174.   THEN OS2Ver = SysOS2Ver()
  175.   ELSE OS2Ver = 1.x
  176. /* We assume this because RexxUtils is missing and Rexx is installed */
  177. /* I have no other way of determining what the version is without    */
  178. /* SysOS2Ver()                                                       */
  179. SAY "OS/2 Version is "OS2Ver
  180. RETURN OS2Ver /* WhichOS2Version */
  181.  
  182. /*******************************************************************/
  183.  
  184. GetBootDrive : PROCEDURE ;
  185. RexxUtils = ARG(1)
  186. /* Determining Boot information */
  187. IF RexxUtils
  188.   THEN bootpath = SysSearchPath( 'PATH', 'COUNTRY.SYS' )
  189.   ELSE bootpath = MySearchPath( 'PATH', 'COUNTRY.SYS' )
  190. RETURN FILESPEC( "drive", bootpath ) /* GetBootDrive */
  191.  
  192. /*******************************************************************/
  193.  
  194. ChangeToSourceDirectory : PROCEDURE EXPOSE sourcedir ;
  195. /* Save Current Directory and change to Source Directory */
  196. startdir = DIRECTORY()
  197. PARSE SOURCE system calltype command
  198. drive = FILESPEC( "DRIVE", command )
  199. path = FILESPEC( "PATH", command )
  200. IF SUBSTR( path, LENGTH(path), 1 ) = '\'
  201.   THEN sourcedir = DIRECTORY( drive || SUBSTR( path, 1, LENGTH(path)-1 ) )
  202.   ELSE sourcedir = DIRECTORY( drive || path )
  203. RETURN startdir /* ChangeToSourceDirectory */
  204.  
  205. /*******************************************************************/
  206.  
  207. HowMuchSpaceRequired : PROCEDURE ;
  208. RexxUtils = ARG(1)
  209. /* SpaceRequired is the amount of free space required to install C-Kermit */
  210. IF RexxUtils
  211.   THEN DO
  212.     spacerequired = 0
  213.     rc = SysFileTree( '*.*', 'file', 'F' )
  214.     DO i = 1 to file.0
  215.       PARSE VAR file.i date time size atts name
  216.       spacerequired = spacerequired + 1024 + size
  217.       END
  218.     END
  219.   ELSE spacerequired = 720000
  220. RETURN spacerequired /* HowMuchSpaceRequired */
  221.  
  222. /*******************************************************************/
  223.  
  224. ClearScreen : PROCEDURE EXPOSE RexxUtils ;
  225. /* Clear screen and prompt user for drive and path */
  226. '@echo off'
  227. IF RexxUtils
  228.   THEN CALL SysCls
  229.   ELSE "CLS"
  230. RETURN /* ClearScreen */
  231.  
  232. /*******************************************************************/
  233.  
  234. Welcome : PROCEDURE EXPOSE Release RexxUtils ;
  235. SAY "+======================================================================+"
  236. SAY "|        Welcome to the OS/2 C-Kermit Installation Procedure.          |"
  237. SAY "|     You are about to install C-Kermit 5A(191) on your computer.      |"
  238. SAY "|                Press <Ctrl-C> to cancel at any time.                 |"
  239. SAY "+======================================================================+"
  240. SAY ""
  241. IF TRANSLATE(Release) <> 'FINAL' THEN DO
  242. SAY "This is a" Release "test release of OS/2 C-Kermit communications"
  243. SAY "software.  Although the developers does not anticipate errors in the"
  244. SAY "software or incompatibilities with other software or hardware products,"
  245. SAY "we can't be certain.  So proceed at your own risk."
  246. SAY ""
  247. SAY "THE KERMIT DEVELOPMENT GROUP STRONGLY ADVISES THAT YOU NOT INSTALL"
  248. SAY "THIS SOFTWARE ON A PRODUCTION SYSTEM.  THE USE OF THIS INSTALLATION"
  249. SAY "UTILITY MAKES CHANGES TO YOUR HARD DISK, YOUR OS/2 DESKTOP, AND YOUR"
  250. SAY "CONFIG.SYS FILE.  BEFORE TESTING THIS SOFTWARE BE SURE TO HAVE WORKING"
  251. SAY "BACKUPS OF YOUR CONFIG.SYS AND OS2.INI FILES."
  252. SAY ""
  253. PressAKey()
  254. SAY ""
  255. SAY "During testing it is recommended that you not install this release"
  256. SAY "over a previous version of C-Kermit.  If you do, the previous release"
  257. SAY "will be updated and will become inaccessible."
  258. SAY ""
  259. SAY "It is also recommended that you answer 'NO' when asked whether or not"
  260. SAY "to update your CONFIG.SYS file.  Failure to update the CONFIG.SYS file"
  261. SAY "will not reduce the functionality of the software.  However, it will"
  262. SAY "require that you either start the program from the WPS Program Object"
  263. SAY "or specify the program by its full path name from the command line."
  264. SAY ""
  265. SAY "Please do not distribute this test release of the software."
  266. SAY ""
  267. SAY "SEND BUG REPORTS BY E-MAIL TO: kermit@columbia.edu."
  268. SAY ""
  269. SAY "Please answer YES to confirm that you have read the above statement"
  270. SAY "and wish to continue installing this" Release "test release."
  271. CALL Confirmation
  272. IF RESULT <> 'Y'
  273.   THEN DO
  274.     SAY "Installation canceled."
  275.     EXIT
  276.   END
  277. END
  278.  
  279. RETURN /* Welcome */
  280.  
  281. /*******************************************************************/
  282.  
  283. WhichKermitVersion : PROCEDURE EXPOSE RexxUtils startdir ;
  284. CKOVer = 0
  285.   IF FileExists("ckoker16.exe")
  286.     THEN CKOVer = 16
  287.  
  288.   IF FileExists("ckoker32.exe")
  289.     THEN DO
  290.       IF CKOVer = 16
  291.         THEN CKOVer = "16/32"
  292.  
  293.       IF CKOVer = 0
  294.         THEN CKOVer = "32"
  295.     END
  296.  
  297. IF CKOVer = 0
  298.   THEN DO
  299.     SAY "Sorry, but the source directory" DIRECTORY()
  300.     SAY "does not contain either the 16-bit or 32-bit version"
  301.     SAY "of C-Kermit."
  302.     SAY ""
  303.     SAY "Unable to complete the installation."
  304.     rc = DIRECTORY( startdir )
  305.     EXIT
  306.   END
  307. RETURN CKOVer /* WhichKermitVersion */
  308.  
  309. /*******************************************************************/
  310.  
  311. InstallCKermitExe :  PROCEDURE EXPOSE OS2Ver CKOVer RexxUtils destination ;
  312. SAY "Installing the C-Kermit application, CKERMIT.EXE..."
  313. SELECT
  314.   WHEN substr(OS2Ver,1,1) = "1" & (CKOVer = 16 | CKOVer = "16/32")
  315.     THEN DO
  316.       CALL Install 'ckoker16.exe', ckermit.exe
  317.     END
  318.  
  319.   WHEN substr(OS2Ver,1,1) = "2" & CKOVer = 16
  320.     THEN DO
  321.       CALL Install 'ckoker16.exe', ckermit.exe
  322.     END
  323.  
  324.   WHEN substr(OS2Ver,1,1) = "2" & (CKOVer = 32 | CKOVer = "16/32")
  325.     THEN DO
  326.       CALL Install 'ckoker32.exe', ckermit.exe
  327.       CALL Install 'cko32rt.dll'
  328.     END
  329.  
  330. OTHERWISE
  331.   SAY "Can't install" CKOVer"-bit version of C-Kermit on OS/2 version" OS2Ver
  332.   CALL UnableToCompleteInstallation
  333. END
  334. /* SAY "" */
  335. RETURN /* InstallCKermitExe */
  336.  
  337. /*******************************************************************/
  338.  
  339. InstallTcpIpDlls :  PROCEDURE EXPOSE OS2Ver CKOVer RexxUtils destination ;
  340. SAY "Installing the C-Kermit TCP/IP Support DLLs..."
  341. SELECT
  342.   WHEN substr(OS2Ver,1,1) = "1" & (CKOVer = 16 | CKOVer = "16/32")
  343.     THEN DO
  344.       CALL Install 'cko16i12.dll'
  345.       CALL Install 'cko16f13.dll'
  346.     END
  347.  
  348.   WHEN substr(OS2Ver,1,1) = "2" & CKOVer = 16
  349.     THEN DO
  350.       CALL Install 'cko16i12.dll'
  351.       CALL Install 'cko16f13.dll'
  352.     END
  353.  
  354.   WHEN substr(OS2Ver,1,1) = "2" & (CKOVer = 32 | CKOVer = "16/32")
  355.     THEN DO
  356.       CALL Install 'cko32i12.dll'
  357.       CALL Install 'cko32i20.dll'
  358.       CALL Install 'cko32f13.dll'
  359.     END
  360.  
  361. OTHERWISE
  362.   SAY "Can't install" CKOVer"-bit version of C-Kermit on OS/2 version" OS2Ver
  363.   CALL UnableToCompleteInstallation
  364. END
  365.  
  366. /* now remove fake tcpipdll.dll from 189 if found in destination */
  367. IF RexxUtils
  368.   THEN DO
  369.     CALL SysFileTree destination || 'tcpipdll.dll', 'file', 'FO'
  370.     IF file.0 > 0
  371.       THEN CALL Backup 'tcpipdll.dll'
  372.     END
  373.   ELSE DO
  374.     CALL STREAM ckfound || 'tcpipdll.dll', 'c', 'query exists'
  375.     IF "\"RESULT <> "\"
  376.       THEN CALL Backup 'tcpipdll.dll'
  377.     END
  378.  
  379. /* SAY "" */
  380. RETURN /* InstallCKOTcpIpDll */
  381.  
  382. /*******************************************************************/
  383.  
  384. InstallPCFonts : PROCEDURE EXPOSE RexxUtils destination ;
  385.  
  386. SAY "Installing the C-Kermit PC Font support"
  387. CALL Install 'pcfonts.dll', 'pcfonts.dll'
  388. /* SAY "" */
  389. RETURN /* InstallPCFonts */
  390.  
  391. /*******************************************************************/
  392.  
  393. InstallClipboardServer : PROCEDURE EXPOSE RexxUtils destination ;
  394.  
  395. SAY "Installing the C-Kermit PM Clipboard Server"
  396. CALL Install 'ckoclip.exe', 'util\ckoclip.exe'
  397. /* SAY "" */
  398. RETURN /* InstallClipboardServer */
  399.  
  400. /*******************************************************************/
  401.  
  402. InstallSyslevelFiles : PROCEDURE EXPOSE OS2Ver CKOVer RexxUtils,
  403.                                         destination ;
  404. SAY "Installing the Syslevel data file, SYSLEVEL.CKO..."
  405. SELECT
  406.   WHEN substr(OS2Ver,1,1) = "1" & (CKOVer = 16 | CKOVer = "16/32")
  407.     THEN DO
  408.       CALL Install 'ckosysl.ck1', syslevel.cko
  409.     END
  410.  
  411.   WHEN substr(OS2Ver,1,1) = "2" & CKOVer = 16
  412.     THEN DO
  413.       CALL Install 'ckosysl.ck1', syslevel.cko
  414.     END
  415.  
  416.   WHEN substr(OS2Ver,1,1) = "2" & (CKOVer = 32 | CKOVer = "16/32")
  417.     THEN DO
  418.       CALL Install 'ckosysl.ck2', syslevel.cko
  419.     END
  420.  
  421. OTHERWISE
  422.   NOP
  423. END
  424. /* SAY "" */
  425. RETURN /* InstallSyslevelFiles */
  426.  
  427. /*******************************************************************/
  428.  
  429. InstallCkermitIco : PROCEDURE EXPOSE RexxUtils destination ;
  430.  
  431. SAY "Installing the C-Kermit Icon..."
  432. CALL Install 'ckermit.ico'
  433. CALL Install 'ckoclip.ico'
  434. /* SAY "" */
  435. RETURN /* InstallCkermitIco */
  436.  
  437. /*******************************************************************/
  438.  
  439. InstallRexxCmdFiles : PROCEDURE EXPOSE RexxUtils destination ;
  440.  
  441. SAY "Installing the C-Kermit Rexx Command Files..."
  442. CALL Install 'xsend.cmd', 'xsend.cmd'
  443. /* SAY "" */
  444. RETURN /* InstallRexxCmdFiles */
  445.  
  446. /*******************************************************************/
  447.  
  448. InstallDocs : PROCEDURE EXPOSE RexxUtils destination ;
  449.  
  450. SAY "Installing distribution information file, READ.ME..."
  451. CALL Install 'read.me', 'read.me'
  452. /* SAY "" */
  453.  
  454. SAY "Installing documentation for recent C-Kermit updates, CKERMIT.INF..."
  455. CALL Install 'ckermit.inf'
  456. /* SAY "" */
  457. RETURN /* InstallDocs */
  458.  
  459. /*******************************************************************/
  460.  
  461. InstallExternalProtocols : PROCEDURE EXPOSE RexxUtils destination ;
  462.  
  463. SAY "Installing scripts for accessing external protocols..."
  464. CALL Install 'p101.ini', 'p101.ini'
  465. CALL Install 'p200.ini', 'p200.ini'
  466. CALL Install 'cexyz2.ini', 'cexyz2.ini'
  467. CALL Install 'm2zmodem.ini', 'm2zmodem.ini'
  468. /* Not really an external protcol, but... */
  469. CALL Install 'emacskey.ini', 'emacskey.ini'
  470.  
  471. /* SAY "" */
  472. RETURN /* InstallExternalProtocols */
  473.  
  474. /*******************************************************************/
  475.  
  476. InstallCkermitIni : PROCEDURE EXPOSE RexxUtils destination ;
  477.  
  478. SAY "Installing the standard C-Kermit initialization file, CKERMIT.INI..."
  479. CALL Install 'ckermit.ini'
  480. /* SAY "" */
  481. RETURN /* InstallCkermitIni */
  482.  
  483. /*******************************************************************/
  484.  
  485. InstallCkermodIni : PROCEDURE EXPOSE RexxUtils destination vt220 serial ,
  486.                                      modem port speed revision ;
  487.  
  488. IF FileExists( destination || 'ckermod.ini' )
  489. THEN DO
  490.   SAY "Installing new C-Kermit customization file, CKERMOD." || revision || '.'
  491.   CALL Install 'ckermod.ini', 'ckermod.'revision
  492.   END
  493. ELSE DO
  494.   SAY "Installing your C-Kermit customization file, CKERMOD.INI..."
  495.   /*
  496.     Backup ckermod.ini if necessary,
  497.     Read ckermod.ini from diskette,
  498.     write ckermod.ini to dest directory with changes from previous dialog.
  499.   */
  500.  
  501.   CALL Backup 'ckermod.ini'
  502.   modini = destination"ckermod.ini"
  503.  
  504. /*  IF FileExists( destination || 'Backup\ckermod.ini' )
  505.     THEN modinisrc = destination || 'Backup\ckermod.ini'
  506.     ELSE modinisrc = 'ckermod.ini'
  507. */
  508.   modinisrc = 'ckermod.ini'
  509.  
  510.   os2section = 0
  511.   LINEIN( modinisrc, 1, 0 )
  512.   DO WHILE lines( modinisrc ) <> 0
  513.     linetxt = LINEIN( modinisrc )
  514.     upperlinetxt = TRANSLATE(linetxt)
  515.     SELECT
  516.       WHEN (substr( upperlinetxt, 1, 5) = ':OS/2') & (os2section = 0)
  517.         THEN DO
  518.           /* SAY "...Entering OS/2 section" */
  519.           rc = LINEOUT( modini, linetxt )
  520.           os2section = 1
  521.         END
  522.  
  523.       WHEN (substr( upperlinetxt, 1, 9 ) = "SET MODEM") & (os2section = 1)
  524.         THEN IF serial
  525.           THEN rc = LINEOUT( modini, 'set modem' modem )
  526.         ELSE rc = LINEOUT( modini, ';set modem <modem>')
  527.  
  528.       WHEN (substr( upperlinetxt, 1, 10 ) = ";SET MODEM") & (os2section = 1)
  529.         THEN IF serial
  530.           THEN rc = LINEOUT( modini, 'set modem' modem )
  531.           ELSE rc = LINEOUT( modini, ';set modem <modem>')
  532.  
  533.       WHEN (substr( upperlinetxt, 1, 8 ) = "SET PORT") & (os2section = 1)
  534.         THEN IF serial
  535.           THEN rc = LINEOUT( modini, 'set port' port )
  536.           ELSE rc = LINEOUT( modini, ';set port <port>')
  537.  
  538.       WHEN (substr( upperlinetxt, 1, 9 ) = ";SET PORT") & (os2section = 1)
  539.         THEN IF serial
  540.           THEN rc = LINEOUT( modini, 'set port' port )
  541.           ELSE rc = LINEOUT( modini, ';set port <port>')
  542.  
  543.       WHEN (substr( upperlinetxt, 1, 9 ) = "SET SPEED") & (os2section = 1)
  544.         THEN IF serial
  545.           THEN rc = LINEOUT( modini, 'set speed' speed )
  546.           ELSE rc = LINEOUT( modini, ';set speed <speed>')
  547.  
  548.       WHEN (substr( upperlinetxt, 1, 10 ) = ";SET SPEED") & (os2section = 1)
  549.         THEN IF serial
  550.           THEN rc = LINEOUT( modini, 'set speed' speed )
  551.           ELSE rc = LINEOUT( modini, ';set speed <speed>')
  552.  
  553.       WHEN (substr( upperlinetxt, 1, 3 ) = 'END') & (os2section = 1)
  554.         THEN DO
  555.           linetxt = 'take \m(_inidir)ckovtk2.ini'
  556.           IF vt220
  557.             THEN rc = LINEOUT( modini, linetxt )
  558.           rc = LINEOUT( modini, "end" )
  559.           os2section = 0
  560.         END
  561.  
  562.       OTHERWISE
  563.         rc = LINEOUT( modini, linetxt )
  564.     END
  565.   END
  566. END
  567.  
  568. /* Close files */
  569. rc = STREAM( modini, 'C', 'CLOSE' )
  570. rc = STREAM( modinisrc, 'C', 'CLOSE' )
  571. /* SAY "" */
  572. RETURN /* InstallCkermodIni */
  573.  
  574. /*******************************************************************/
  575.  
  576. InstallDialingSupportFiles: PROCEDURE EXPOSE RexxUtils destination ;
  577.  
  578. IF \ FileExists( destination || 'ckermit.kdd' )
  579.   THEN DO
  580.     SAY "Installing Sample C-Kermit dialing directory file, CKERMIT.KDD..."
  581.     CALL Install 'ckermit.kdd'
  582.     END
  583.   ELSE DO
  584.     SAY "Existing C-Kermit dialing directory file, CKERMIT.KDD, ",
  585.         || "has been preserved."
  586.     END
  587. /* SAY "" */
  588.  
  589. IF \ FileExists( destination || 'ckermit.ksd' )
  590.   THEN DO
  591.     SAY "Installing sample C-Kermit services directory file, CKERMIT.KSD..."
  592.     CALL Install 'ckermit.ksd'
  593.     END
  594.   ELSE DO
  595.     SAY "Existing C-Kermit services directory file, CKERMIT.KSD, ",
  596.         || "has been preserved."
  597.     END
  598. /* SAY "" */
  599. RETURN /* InstallDialingSupportFiles */
  600.  
  601. /*******************************************************************/
  602.  
  603. InstallCkermitCmd : PROCEDURE EXPOSE RexxUtils destination serial port ;
  604.  
  605. IF FileExists( destination || 'ckermit.cmd' )
  606. THEN DO
  607.   SAY "Existing C-kermit startup file, CKERMIT.CMD, has been preserved."
  608.   END
  609. ELSE DO
  610.   SAY "Installing sample C-Kermit startup file, CKERMIT.CMD..."
  611.   CALL Backup 'ckermit.cmd'
  612.   cmdsrc = 'ckermit.cmd'
  613.   cmdfile = destination || 'ckermit.cmd'
  614.  
  615.   LINEIN( cmdsrc, 1, 0 )
  616.   DO WHILE lines( cmdsrc ) <> 0
  617.     linetxt = LINEIN( cmdsrc )
  618.     upperlinetxt = TRANSLATE( linetxt )
  619.     SELECT
  620.       WHEN substr( upperlinetxt, 1, 8 ) = 'MODE COM'
  621.         THEN IF serial
  622.           THEN DO
  623.             newlinetxt = 'MODE ' || port,
  624.                     || substr( linetxt, 10, length( linetxt ) -9 )
  625.             rc = LINEOUT( cmdfile, newlinetxt )
  626.             END
  627.           ELSE rc = LINEOUT( cmdfile, 'REM ' || linetxt )
  628.  
  629.       WHEN substr( upperlinetxt, 1, 9 ) = '"MODE COM'
  630.         THEN IF serial
  631.           THEN DO
  632.             newlinetxt = '"MODE ' || port,
  633.                           || substr( linetxt, 11, length( linetxt ) -10 )
  634.             rc = LINEOUT( cmdfile, newlinetxt )
  635.             END
  636.           ELSE rc = LINEOUT( cmdfile,,
  637.                         '"REM 'SUBSTR( linetxt, 2, LENGTH(linetxt)-1 ) )
  638.  
  639.       WHEN substr( upperlinetxt, 1, 12 ) = 'REM MODE COM'
  640.         THEN IF serial
  641.           THEN DO
  642.             newlinetxt = 'MODE ' || port,
  643.                           || substr( linetxt, 14, length( linetxt ) -13 )
  644.             rc = LINEOUT( cmdfile, newlinetxt )
  645.             END
  646.           ELSE rc = LINEOUT( cmdfile, linetxt )
  647.  
  648.       WHEN substr( upperlinetxt, 1, 13 ) = '"REM MODE COM'
  649.         THEN IF serial
  650.           THEN DO
  651.             newlinetxt = '"MODE ' || port,
  652.                           || substr( linetxt, 15, length( linetxt ) -14 )
  653.             rc = LINEOUT( cmdfile, newlinetxt )
  654.             END
  655.           ELSE rc = LINEOUT( cmdfile, linetxt )
  656.  
  657.       OTHERWISE
  658.         rc = LINEOUT( cmdfile, linetxt )
  659.  
  660.     END
  661.   END
  662.  
  663.   rc = STREAM( cmdfile, 'C', 'CLOSE' )
  664.   rc = STREAM( cmdsrc, 'C', 'CLOSE' )
  665. END
  666. /* SAY "" */
  667. RETURN /* InstallCkermitCmd */
  668.  
  669. /*******************************************************************/
  670.  
  671. InstallKeyboardDefs : PROCEDURE EXPOSE RexxUtils destination revision ;
  672.  
  673. IF FileExists( destination || ckovtk2.ini )
  674. THEN DO
  675.   SAY "Installing new C-Kermit VT220 keyboard definitions file as CKOVTK2.",
  676.     || revision
  677.   CALL Install 'ckovtk2.ini', 'ckovtk2.'revision
  678.   SAY "Your old copy has been preserved as" destination || "ckovtk2.ini."
  679.   END
  680. ELSE DO
  681.   SAY "Installing C-Kermit VT220 keyboard definitions file, CKOVTK2.INI..."
  682.   CALL Install 'ckovtk2.ini'
  683.   END
  684. /* SAY "" */
  685. RETURN /* InstallKeyboardDefs */
  686.  
  687. /*******************************************************************/
  688.  
  689. InstallCharSets : PROCEDURE EXPOSE RexxUtils destination ;
  690.  
  691. SAY "Installing character-set tables..."
  692. CALL Install 'cp437.txt',    'charsets\cp437.txt'
  693. CALL Install 'cp850.txt',    'charsets\cp850.txt'
  694. CALL Install 'cp852.txt',    'charsets\cp852.txt'
  695. CALL Install 'cp862.txt',    'charsets\cp862.txt'
  696. CALL Install 'cp866.txt',    'charsets\cp866.txt'
  697. CALL Install 'cyrillic.txt', 'charsets\cyrillic.txt'
  698. CALL Install 'hebrew.txt',   'charsets\hebrew.txt'
  699. CALL Install 'latin1.txt',   'latin1.txt'
  700. /* SAY "" */
  701. RETURN /* InstallCharSets */
  702.  
  703. /*******************************************************************/
  704.  
  705. InstallBitmaps : PROCEDURE EXPOSE RexxUtils destination ;
  706.  
  707. IF RexxUtils
  708.   THEN DO
  709.     CALL SysFileTree 'ckready.bmp', 'file', 'FO'
  710.     IF file.0 > 0
  711.       THEN DO 
  712.         SAY "Installing C-Kermit Bitmaps..."
  713.         CALL Install 'ckready.bmp'
  714.         END
  715.     END
  716.   ELSE DO
  717.     CALL STREAM 'ckready.bmp', 'c', 'query exists'
  718.     IF "\"RESULT <> "\"
  719.       THEN DO 
  720.         SAY "Installing C-Kermit Bitmaps..."
  721.         CALL Install 'ckready.bmp'
  722.         END
  723.     END
  724. /* SAY "" */
  725. RETURN /* InstallBitmaps */
  726.  
  727. /*******************************************************************/
  728.  
  729. InstallCKTelnet : PROCEDURE EXPOSE RexxUtils destination telnet
  730.  
  731. IF telnet
  732.    THEN DO
  733.       SAY "Installing C-Kermit as a replacement for IBM Telnet..."
  734.       CALL Install 'ckotel.exe', 'telnet.exe'
  735.       CALL Install 'ckotel.exe', 'telnetpm.exe'
  736.       END
  737.    ELSE DO
  738.       SAY "Installing C-Kermit Telnet replacements in UTIL subdirectory..."
  739.       CALL Install 'ckotel.exe', 'util\telnet.exe'
  740.       CALL Install 'ckotel.exe', 'util\telnetpm.exe'
  741.    END
  742. /* SAY "" */
  743. RETURN /* InstallCKTelnet */
  744.  
  745. /*******************************************************************/
  746.  
  747. SetIcon : PROCEDURE EXPOSE RexxUtils destination updest ;
  748.  
  749. IF RexxUtils
  750.   THEN DO
  751.     SAY "Assigning the C-Kermit icon to" updest || CKERMIT.EXE || "..."
  752.     rc = SysSetIcon( destination || 'ckermit.exe',,
  753.                      destination || 'ckermit.ico' )
  754.     /* SAY "" */
  755.   END
  756. RETURN /* SetIcon */
  757.  
  758. /*******************************************************************/
  759.  
  760. BuildFolderObject : PROCEDURE EXPOSE RexxUtils destination OS2Ver,
  761.                                       newInstall ;
  762.  
  763. /* Build C-Kermit Folder Object if version 2.x or later */
  764. IF RexxUtils & SUBSTR( OS2Ver,1,1 ) = "2"
  765.   THEN DO
  766.     title = "C-Kermit 5A(191) for OS/2"
  767.     classname = 'WPFolder'
  768.     location = '<WP_DESKTOP>'
  769.     setup = 'OBJECTID=<CK191FLDR>;'
  770.     IF \ newInstall
  771.       THEN DO
  772.         option = 'update'
  773.         SAY "Updating C-Kermit Folder..."
  774.       END
  775.       ELSE DO
  776.         option = 'update'
  777.         SAY "Building C-Kermit Folder..."
  778.       END
  779.  
  780.     rc = SysCreateObject(classname, title, location, setup, option)
  781.     /* SAY "" */
  782.   END
  783. RETURN /* BuildFolderObject */
  784.  
  785. /*******************************************************************/
  786.  
  787. BuildUpdatesObject : PROCEDURE EXPOSE RexxUtils destination OS2Ver,
  788.                                       newInstall ;
  789.  
  790. /* Build C-Kermit Updates Object if version 2.x or later */
  791. IF RexxUtils & SUBSTR( OS2Ver,1,1 ) = "2"
  792.   THEN DO
  793.     title = "Updates to Using C-Kermit"
  794.     classname = 'WPProgram'
  795.     location = '<CK191FLDR>'
  796.  
  797.     setup = 'EXENAME=view.exe;' || ,
  798.             'STARTUPDIR='destination';' || ,
  799.             'PARAMETERS='destination'ckermit.inf'
  800.  
  801.     option = 'update'
  802.     SAY "Building Using C-Kermit Updates Object..."
  803.  
  804.     rc = SysCreateObject(classname, title, location, setup, option)
  805.     /* SAY "" */
  806.   END
  807. RETURN /* BuildUpdatesObject */
  808.  
  809. /*******************************************************************/
  810.  
  811. BuildProgramObject : PROCEDURE EXPOSE RexxUtils destination OS2Ver runmode,
  812.                                       newInstall ;
  813.  
  814. /* Build C-Kermit Program Object if version 2.x or later */
  815. IF RexxUtils & SUBSTR( OS2Ver,1,1 ) = "2"
  816.   THEN DO
  817.     IF CKOVer = "16"
  818.       THEN title = "OS/2 C-Kermit (16-bit)"
  819.       ELSE title = "OS/2 C-Kermit 5A(191)"
  820.     classname = 'WPProgram'
  821.     location = '<CK191FLDR>'
  822.     IF \ newInstall
  823.       THEN DO
  824.         setup = 'EXENAME='destination'ckermit.exe;' ||,
  825.                 'STARTUPDIR='destination';' || ,
  826.                 'ICONFILE='destination'ckermit.ico;' || 'PARAMETERS=%'
  827.         option = 'update'
  828.         SAY "Updating C-Kermit Program Object..."
  829.       END
  830.       ELSE DO
  831.         IF TRANSLATE(runmode) = "WINDOW"
  832.           THEN setup = 'EXENAME='destination'ckermit.exe;' ||,
  833.                'PARAMETERS=%;' || 'STARTUPDIR='destination';' ||,
  834.                'PROGTYPE=WINDOWABLEVIO;' || ,
  835.                'ICONFILE='destination'ckermit.ico;' || ,
  836.                'MAXIMIZE=YES;' || 'CCVIEW=YES'
  837.           ELSE setup = 'EXENAME='destination'ckermit.exe;' ||,
  838.                'PARAMETERS=%;' || 'STARTUPDIR='destination';' ||,
  839.                'PROGTYPE=FULLSCREEN;' || ,
  840.                'ICONFILE='destination'ckermit.ico;' ||,
  841.                'MAXIMIZE=YES;' || 'CCVIEW=YES'
  842.  
  843.         option = 'update'
  844.         SAY "Building C-Kermit Program Object..."
  845.       END
  846.  
  847.     rc = SysCreateObject(classname, title, location, setup, option)
  848.     /* SAY "" */
  849.   END
  850. RETURN /* BuildProgramObject */
  851.  
  852. /*******************************************************************/
  853.  
  854. BuildClipboardServerObject : PROCEDURE EXPOSE RexxUtils destination OS2Ver,
  855.                                               runmode newInstall ;
  856.  
  857. /* Build C-Kermit ClipboardServer Object if version 2.x or later */
  858. IF RexxUtils & SUBSTR( OS2Ver,1,1 ) = "2"
  859.   THEN DO
  860.     title = "OS/2 C-Kermit PM Clipboard Server"
  861.     classname = 'WPProgram'
  862.     location = '<CK191FLDR>'
  863.     setup = 'EXENAME='destination'util\ckoclip.exe;' ||,
  864.             'STARTUPDIR='destination'util;' || ,
  865.             'ICONFILE='destination'ckoclip.ico;' || 'PARAMETERS=%'
  866.     option = 'update'
  867.  
  868.     SAY "Building C-Kermit ClipboardServer Object..."
  869.     rc = SysCreateObject(classname, title, location, setup, option)
  870.     /* SAY "" */
  871.   END
  872. RETURN /* BuildClipboardServerObject */
  873.  
  874. /*******************************************************************/
  875.  
  876. UpdateConfigSys : PROCEDURE EXPOSE RexxUtils destination tcpip bootdrive,
  877.                                 vt220 updest destnoslash configupdate ckover,
  878.                                 startdir ;
  879.  
  880. SAY ""
  881. SAY "Your CONFIG.SYS file defines several environment variables that determine"
  882. SAY "how OS/2 and your applications work.  With your permission, this program"
  883. SAY "will make the following changes:"
  884. SAY ""
  885. SAY " 1. The C-Kermit directory," destination || ", will be added to your PATH"
  886. SAY "    to allow C-Kermit to be executed from any OS/2 Command Line session."
  887. SAY ""
  888. SAY " 2. The C-Kermit directory," destination || ", will be added to your LIBPATH"
  889. SAY "    to allow C-Kermit (or external protocols) to find necessary DLLs."
  890. SAY ""
  891. SAY " 3. The C-Kermit directory," destination || ", will be added to your DPATH"
  892. SAY "    to allow the C-Kermit to find your initialization files."
  893. SAY ""
  894. SAY " 4. The C-Kermit directory," destination || ", will be added to your BOOKSHELF"
  895. SAY "    to allow the view command to find the CKERMIT.INF file."
  896. SAY ""
  897. SAY "Please enter 'Yes' to allow this program to update your CONFIG.SYS file."
  898. SAY "A backup copy will be made in the root directory of your boot drive."
  899. SAY ""
  900. SAY "Update CONFIG.SYS? (Yes/No):"
  901.  
  902. CALL Confirmation
  903. IF RESULT <> 'Y'
  904.   THEN DO
  905.     configupdate = 0
  906.     SAY ""
  907.     SAY "  OK, your CONFIG.SYS file has not been changed."
  908.     CALL Done
  909.   END
  910.  
  911. configupdate = 1
  912. SAY ""
  913.  
  914. /* Back up the existing CONFIG.SYS file. */
  915. IF RexxUtils
  916.   THEN DO
  917.     tempname = bootdrive || "\CONFIG.???"
  918.     backup = SysTempFileName( tempname )
  919.     END
  920.   ELSE DO
  921.     n = 100
  922.     backup = bootdrive || "\CONFIG." || n
  923.     CALL STREAM backup, 'c', 'query exists'
  924.     DO WHILE "\"RESULT <> "\"
  925.       n = n + 1
  926.       backup = bootdrive || "\CONFIG." || n
  927.       CALL STREAM backup, 'c', 'query exists'
  928.       END
  929.     END
  930.  
  931. SAY "Backing up CONFIG.SYS to" backup || "..."
  932. copy bootdrive || "\Config.Sys" backup "> NUL"
  933. SAY ""
  934.  
  935. /* Generate a temporary file name for the new CONFIG.SYS file */
  936. IF RexxUtils
  937.   THEN DO
  938.     tempname = bootdrive || "\CONFIG??.INS"
  939.     temp = SysTempFileName( tempname )
  940.     END
  941.   ELSE DO
  942.     n = 10
  943.     temp = bootdrive || "\CONFIG" || n || ".INS"
  944.     CALL STREAM temp, 'c', 'query exists'
  945.     DO WHILE "\"RESULT <> "\"
  946.       n = n + 1
  947.       temp = bootdrive || "\CONFIG" || n || ".INS"
  948.       CALL STREAM temp, 'c', 'query exists'
  949.       END
  950.     END
  951.  
  952. /* Generate the temporary CONFIG.SYS file. */
  953. SAY "Updating CONFIG.SYS..."
  954.  
  955. /* Change to a neutral directory so that SearchPath searches will succeed */
  956. rc = DIRECTORY( bootdrive"\OS2" )
  957. LINEIN( bootdrive || "\Config.sys", 1, 0 )
  958.  
  959. DO WHILE lines( bootdrive || "\Config.sys" ) <> 0
  960.   linetxt = LINEIN( bootdrive || "\Config.sys" )
  961.   upperlinetxt = TRANSLATE(linetxt)
  962.   SELECT
  963.     WHEN COMPARE( upperlinetxt, "SET PATH" ) = 9
  964.       THEN DO
  965.         SETLOCAL
  966.         len = LENGTH(linetxt)
  967.         rc = VALUE('PATH', SUBSTR( upperlinetxt, 10, len - 10 ),,
  968.                    'OS2ENVIRONMENT' )
  969.         IF RexxUtils
  970.           THEN ckfound = SysSearchPath( 'PATH', ckermit.exe )
  971.           ELSE ckfound = MySearchPath( 'PATH', ckermit.exe )
  972.         IF ckfound'\' = '\'
  973.           THEN IF SUBSTR( linetxt, len, 1 ) = ';'
  974.             THEN rc = LINEOUT( temp, linetxt || destnoslash || ';' )
  975.             ELSE rc = LINEOUT( temp, linetxt || ';' || destnoslash || ';' )
  976.           ELSE DO
  977.             ckpath = FILESPEC('DRIVE', ckfound ) || FILESPEC('PATH', ckfound )
  978.             IF ckpath = updest
  979.               THEN rc = LINEOUT( temp, linetxt )
  980.               ELSE DO
  981.                 ckpathnoslash = SUBSTR( ckpath, 1, LENGTH( ckpath ) - 1 )
  982.                 pos = POS( ckpathnoslash, upperlinetxt )
  983.                 rc = LINEOUT( temp, SUBSTR( linetxt, 1, pos - 1 ) ,
  984.                                     || destnoslash';' ,
  985.                                     || SUBSTR( linetxt, pos, len - pos + 1 ) )
  986.                 SAY ""
  987.                 SAY "  WARNING:"
  988.                 SAY "    An earlier version of 'CKERMIT.EXE' exists in",
  989.                     "    directory" ckpath || "."
  990.                 IF RexxUtils
  991.                   THEN DO
  992.                     SAY "Press any key to continue."
  993.                     PARSE UPPER VALUE SysGetKey('NOECHO') WITH confirm
  994.                     END
  995.                   ELSE DO
  996.                     SAY "Press <Enter> to continue."
  997.                     PARSE PULL dummy
  998.                     END
  999.                   END
  1000.           END
  1001.         ENDLOCAL
  1002.         END
  1003.  
  1004.     WHEN COMPARE( upperlinetxt, "SET DPATH" ) = 10
  1005.       THEN DO
  1006.         SETLOCAL
  1007.         len = LENGTH(linetxt)
  1008.         rc = VALUE('DPATH', SUBSTR( upperlinetxt, 11, len - 11 ),,
  1009.                    'OS2ENVIRONMENT' )
  1010.         IF RexxUtils
  1011.           THEN ckfound = SysSearchPath( 'DPATH', ckermit.ini )
  1012.           ELSE ckfound = MySearchPath( 'DPATH', ckermit.ini )
  1013.         IF ckfound = "" | ckfound = DIRECTORY()"\CKERMIT.INI"
  1014.           THEN IF SUBSTR( linetxt, len, 1 ) = ';'
  1015.             THEN rc = LINEOUT( temp, linetxt || destnoslash || ';' )
  1016.             ELSE rc = LINEOUT( temp, linetxt || ';' || destnoslash || ';' )
  1017.           ELSE DO
  1018.             ckpath = FILESPEC('DRIVE', ckfound ) || FILESPEC('PATH', ckfound )
  1019.             IF ckpath = updest
  1020.               THEN rc = LINEOUT( temp, linetxt )
  1021.               ELSE DO
  1022.                 ckpathnoslash = SUBSTR( ckpath, 1, LENGTH( ckpath ) - 1 )
  1023.                 pos = POS( ckpathnoslash, upperlinetxt )
  1024.                 rc = LINEOUT( temp, SUBSTR( linetxt, 1, pos - 1 ) ,
  1025.                                     || destnoslash';' ,
  1026.                                     || SUBSTR( linetxt, pos, len - pos + 1 ) )
  1027.                 SAY ""
  1028.                 SAY "  WARNING:"
  1029.                 SAY "    An earlier version of 'CKERMIT.INI' exists in",
  1030.                     "    directory" ckpath || "."
  1031.                 IF RexxUtils
  1032.                   THEN DO
  1033.                     SAY "Press any key to continue."
  1034.                     PARSE UPPER VALUE SysGetKey('NOECHO') WITH confirm
  1035.                     END
  1036.                   ELSE DO
  1037.                     SAY "Press <Enter> to continue."
  1038.                     PARSE PULL dummy
  1039.                     END
  1040.                 END
  1041.           END
  1042.         ENDLOCAL
  1043.         END
  1044.  
  1045.     WHEN COMPARE( upperlinetxt, "SET BOOKSHELF" ) = 14
  1046.       THEN DO
  1047.         SETLOCAL
  1048.         len = LENGTH(linetxt)
  1049.         rc = VALUE('BOOKSHELF', SUBSTR( upperlinetxt, 15, len - 15 ),,
  1050.                    'OS2ENVIRONMENT' )
  1051.         IF RexxUtils
  1052.           THEN ckfound = SysSearchPath( 'BOOKSHELF', ckermit.inf )
  1053.           ELSE ckfound = MySearchPath( 'BOOKSHELF', ckermit.inf )
  1054.         IF ckfound = "" | ckfound = DIRECTORY()"\CKERMIT.INF"
  1055.           THEN IF SUBSTR( linetxt, len, 1 ) = ';'
  1056.             THEN rc = LINEOUT( temp, linetxt || destnoslash || ';' )
  1057.             ELSE rc = LINEOUT( temp, linetxt || ';' || destnoslash || ';' )
  1058.           ELSE DO
  1059.             ckpath = FILESPEC('DRIVE', ckfound ) || FILESPEC('PATH', ckfound )
  1060.             IF ckpath = updest
  1061.               THEN rc = LINEOUT( temp, linetxt )
  1062.               ELSE DO
  1063.                 ckpathnoslash = SUBSTR( ckpath, 1, LENGTH( ckpath ) - 1 )
  1064.                 pos = POS( ckpathnoslash, upperlinetxt )
  1065.                 rc = LINEOUT( temp, SUBSTR( linetxt, 1, pos - 1 ) ,
  1066.                                     || destnoslash';' ,
  1067.                                     || SUBSTR( linetxt, pos, len - pos + 1 ) )
  1068.                 SAY ""
  1069.                 SAY "  WARNING:"
  1070.                 SAY "    An earlier version of 'CKERMIT.INF' exists in",
  1071.                     "    directory" ckpath || "."
  1072.                 IF RexxUtils
  1073.                   THEN DO
  1074.                     SAY "Press any key to continue."
  1075.                     PARSE UPPER VALUE SysGetKey('NOECHO') WITH confirm
  1076.                     END
  1077.                   ELSE DO
  1078.                     SAY "Press <Enter> to continue."
  1079.                     PARSE PULL dummy
  1080.                     END
  1081.                 END
  1082.           END
  1083.         ENDLOCAL
  1084.         END
  1085.  
  1086.     WHEN (COMPARE( upperlinetxt, "LIBPATH" ) = 8)
  1087.       THEN DO
  1088.         SETLOCAL
  1089.         len = LENGTH(linetxt)
  1090.         rc = VALUE('LIBPATH', SUBSTR( upperlinetxt, 9, len - 9 ),,
  1091.                    'OS2ENVIRONMENT' )
  1092.         IF RexxUtils
  1093.           THEN ckfound = SysSearchPath( 'LIBPATH', ckermit.ini )
  1094.           ELSE ckfound = MySearchPath( 'LIBPATH', ckermit.ini )
  1095.         IF ckfound'\' = '\'
  1096.           THEN DO
  1097.             IF SUBSTR( linetxt, len, 1 ) = ';'
  1098.               THEN rc = LINEOUT( temp, linetxt || destnoslash || ';' )
  1099.               ELSE rc = LINEOUT( temp, linetxt || ';' || destnoslash || ';' )
  1100.               END
  1101.           ELSE DO
  1102.             ckpath = FILESPEC('DRIVE', ckfound ) || FILESPEC('PATH', ckfound )
  1103.             IF ckpath = updest
  1104.               THEN DO
  1105.                 rc = LINEOUT( temp, linetxt )
  1106.                 END
  1107.               ELSE DO
  1108.                 ckpathnoslash = SUBSTR( ckpath, 1, LENGTH( ckpath ) - 1 )
  1109.                 pos = POS( ckpathnoslash, upperlinetxt )
  1110.                 rc = LINEOUT( temp, SUBSTR( linetxt, 1, pos - 1 ) ,
  1111.                                     || destnoslash';' ,
  1112.                                     || SUBSTR( linetxt, pos, len - pos + 1 ) )
  1113.                 SAY ""
  1114.                 SAY "  WARNING:"
  1115.                 SAY "    " || ckpath "is located in the LIBPATH"
  1116.                 SAY "     and it appears to be a previous installation of C-Kermit."
  1117.                 SAY "     If you have difficulties starting C-Kermit, try removing"
  1118.                 SAY "    " || ckpath "from the LIBPATH statement in CONFIG.SYS"
  1119.                 SAY "     and restart OS/2."
  1120.                 IF RexxUtils
  1121.                   THEN DO
  1122.                     SAY "Press any key to continue."
  1123.                     PARSE UPPER VALUE SysGetKey('NOECHO') WITH confirm
  1124.                     END
  1125.                   ELSE DO
  1126.                     SAY "Press <Enter> to continue."
  1127.                     PARSE PULL dummy
  1128.                     END
  1129.                 END
  1130.           END
  1131.         ENDLOCAL
  1132.         END
  1133.  
  1134.     OTHERWISE
  1135.       rc = LINEOUT( temp, linetxt )
  1136.   END
  1137. END
  1138.  
  1139. /* Close files */
  1140. rc = STREAM( temp, 'C', 'CLOSE' )
  1141. rc = STREAM( bootdrive || "\Config.sys", 'C', 'CLOSE' )
  1142.  
  1143. COPY temp bootdrive || "\Config.sys > NUL"
  1144. IF RexxUtils
  1145.   THEN rc = SysFileDelete( temp )
  1146.   ELSE "CMD /C DEL" temp "> NUL"
  1147.  
  1148. SAY ""
  1149. SAY "  Your CONFIG.SYS file has been updated."
  1150. SAY "  Your old CONFIG.SYS has been copied to " backup || "."
  1151. SAY "  After reading the following message,"
  1152. SAY "  Please shutdown and restart OS/2."
  1153.  
  1154. RETURN /* UpdateConfigSys */
  1155.  
  1156. /*******************************************************************/
  1157.  
  1158. Done : PROCEDURE EXPOSE RexxUtils destination OS2Ver vt220 updest startdir,
  1159.                         configupdate ;
  1160.  
  1161. SAY ""
  1162. SAY "C-Kermit has been successfully installed in the directory" updest || "."
  1163. SAY ""
  1164. IF SUBSTR( OS2Ver, 1, 1 ) = "2"
  1165.   THEN SAY "  To start C-Kermit from the desktop, click on its icon."
  1166. IF configupdate
  1167.   THEN
  1168.     SAY "  To start C-Kermit from a command window, just type CKERMIT."
  1169.   ELSE DO
  1170.     SAY "  To start C-Kermit from a command window, just type CKERMIT,"
  1171.     SAY "  or if" updest "is not in your PATH, type" updest || "CKERMIT."
  1172.   END
  1173. SAY ""
  1174. IF vt220
  1175.   THEN SAY "Read the" updest || "CKOVTK2.INI file for VT220 key mappings."
  1176. SAY "Please consult the book 'Using C-Kermit' for complete instructions, and"
  1177. SAY "also VIEW the CKERMIT.INF file for information about program updates."
  1178. SAY "If you will be using C-Kermit software and you don't have the book,"
  1179. SAY "PLEASE PURCHASE IT.  Type HELP at the C-Kermit> prompt for instructions."
  1180. SAY ""
  1181. PressAKey( "to exit." )
  1182. "VIEW" destination || "CKERMIT.INF GREETING"
  1183. rc = DIRECTORY( startdir )
  1184. EXIT
  1185. RETURN /* Done */
  1186.  
  1187. /*******************************************************************/
  1188. PressAKey : PROCEDURE EXPOSE RexxUtils ;
  1189. IF RexxUtils
  1190.    THEN DO
  1191.       IF ARG(1) <> ""
  1192.          THEN SAY "[Press any key " || ARG(1) || "]"
  1193.          ELSE SAY "[Press any key to continue]"
  1194.     PARSE UPPER VALUE SysGetKey('NOECHO') WITH confirm
  1195.     END
  1196.   ELSE DO
  1197.     IF ARG(1) <> ""
  1198.        THEN SAY "[Press <Enter> " || ARG(1) || "]"
  1199.        ELSE SAY "[Press <Enter> to continue]."
  1200.     PARSE PULL dummy
  1201.   END
  1202. RETURN "" /* PressAKey */
  1203.  
  1204. /*******************************************************************/
  1205.  
  1206. Install : PROCEDURE EXPOSE RexxUtils destination ;
  1207.  
  1208. IF "\"ARG(2) = "\"
  1209.   THEN destname = ARG(1)
  1210.   ELSE destname = ARG(2)
  1211. CALL Backup destname
  1212. COPY ARG(1) destination || destname "> NUL"
  1213.  
  1214. IF RC > 0
  1215.   THEN DO
  1216.     CALL BEEP 262, 750
  1217.     SAY "ERROR:" destname "could not be installed in directory" destination
  1218.     SAY ""
  1219.     CALL FAILURE
  1220.   END
  1221. RETURN RC /* Install */
  1222.  
  1223. /*******************************************************************/
  1224.  
  1225. Backup : PROCEDURE EXPOSE RexxUtils destination ;
  1226.  
  1227. IF RexxUtils
  1228.   THEN DO
  1229.     CALL SysFileTree destination || ARG(1), 'file', 'FO'
  1230.     IF file.0 > 0
  1231.       THEN DO
  1232.         CALL SysFileTree destination || 'BACKUP', 'dir', 'DO'
  1233.         IF dir.0 = 0
  1234.           THEN DO
  1235.              CALL SysMkDir destination || 'BACKUP'
  1236.              CALL SysMkDir destination || 'BACKUP\UTIL'
  1237.              CALL SysMkDir destination || 'BACKUP\CHARSETS'
  1238.              END
  1239.           ELSE DO
  1240.              CALL SysFileTree destination || 'BACKUP\UTIL', 'dir', 'DO'
  1241.              IF dir.0 = 0
  1242.                 THEN CALL SysMkDir destination || 'BACKUP\UTIL'
  1243.  
  1244.              CALL SysFileTree destination || 'BACKUP\CHARSETS', 'dir', 'DO'
  1245.              IF dir.0 = 0
  1246.                 THEN CALL SysMkDir destination || 'BACKUP\CHARSETS'
  1247.              END
  1248.  
  1249.         CALL SysFileTree destination || 'BACKUP\' || ARG(1), 'file', 'FO'
  1250.         IF file.0 > 0
  1251.           THEN CALL SysFileDelete destination || 'BACKUP\' || ARG(1)
  1252.  
  1253.         COPY destination || ARG(1) destination || 'BACKUP\' || ARG(1) '> NUL'
  1254.         CALL SysFileDelete destination || ARG(1)
  1255.       END
  1256.     END
  1257.   ELSE DO
  1258.     CALL STREAM destination || ARG(1), 'c', 'query exists'
  1259.     IF "\"RESULT <> "\"
  1260.       THEN DO
  1261.         "CMD /C DIR" destination || "BACKUP > NUL"
  1262.         IF RC <> 0
  1263.           THEN DO
  1264.              'CMD /C MD' destination || 'BACKUP > NUL'
  1265.              'CMD /C MD' destination || 'BACKUP\UTIL > NUL'
  1266.              'CMD /C MD' destination || 'BACKUP\CHARSETS > NUL'
  1267.              END
  1268.           ELSE DO
  1269.              'CMD /C MD' destination || 'BACKUP\UTIL > NUL'
  1270.              'CMD /C MD' destination || 'BACKUP\CHARSETS > NUL'
  1271.              END
  1272.  
  1273.         CALL STREAM destination || "BACKUP\" || ARG(1), 'c', 'query exists'
  1274.         IF "\"RESULT <> "\"
  1275.           THEN "CMD /C DEL" destination || "BACKUP\" || ARG(1) "> NUL"
  1276.  
  1277.         COPY destination || ARG(1) destination || 'BACKUP\' || ARG(1) '> NUL'
  1278.         "CMD /C DEL" destination || ARG(1)
  1279.         END
  1280.     END
  1281. RETURN /* Backup */
  1282.  
  1283. /*******************************************************************/
  1284.  
  1285. Confirmation: PROCEDURE EXPOSE OS2Ver ;
  1286.  
  1287. retval = ""
  1288. DO WHILE retval = ""
  1289.   IF SUBSTR(OS2Ver, 1, 1 ) > 1
  1290.     THEN CALL CHAROUT ,">"
  1291.   PARSE PULL response
  1292.   SELECT
  1293.     WHEN ( TRANSLATE( response ) = 'N' | TRANSLATE( response ) = 'NO' )
  1294.       THEN retval = 'N'
  1295.  
  1296.     WHEN ( TRANSLATE( response ) = 'Y' | TRANSLATE( response ) = 'YES' )
  1297.       THEN retval = 'Y'
  1298.  
  1299.     OTHERWISE
  1300.       SAY ""
  1301.       SAY "Invalid response.  Please type Y or Yes or N or No."
  1302.   END
  1303. END
  1304. RETURN retval /* Confirmation */
  1305.  
  1306. /*******************************************************************/
  1307. /* This procedure duplicates as best as possible the RexxUtil      */
  1308. /* function SysSearchPath.                                         */
  1309.  
  1310. MySearchPath : PROCEDURE ;
  1311.  
  1312. _path = VALUE( ARG(1), , "OS2ENVIRONMENT" )
  1313. IF SUBSTR( _path, LENGTH(_path), 1 ) <> ";"
  1314.   THEN _path = _path || ";"
  1315. PARSE UPPER VAR _path _dir ";" _path
  1316. DO WHILE ("\"_dir <> "\") | ("\"_path <> "\")
  1317.   CALL STREAM _dir || "\" || ARG(2), 'c', 'query exists'
  1318.   IF "\"RESULT <> "\"
  1319.     THEN RETURN _dir || "\" || ARG(2)
  1320.     ELSE PARSE UPPER VAR _path _dir ";" _path
  1321.   END
  1322. RETURN "" /* MySearchPath */
  1323.  
  1324. /*******************************************************************/
  1325.  
  1326. IsIBMTCPIPInstalled: PROCEDURE ;
  1327. RexxUtils = ARG(1)
  1328. etcpath = VALUE( "ETC", , "OS2ENVIRONMENT" )
  1329. len = LENGTH(etcpath)
  1330. IF len = 0
  1331.   THEN tcpip = 0
  1332. ELSE DO
  1333.   IF SUBSTR( etcpath, len, 1 ) = ';'
  1334.     THEN DO
  1335.       etcpath = SUBSTR( etcpath, 1, len - 1 )
  1336.       len = len - 1
  1337.     END
  1338.   IF SUBSTR( etcpath, len, 1 ) = '\'
  1339.     THEN DO
  1340.       etcpath = SUBSTR( etcpath, 1, len - 1 )
  1341.       len = len - 1
  1342.     END
  1343.   tcppath = SUBSTR( etcpath, 1, len - 3 )
  1344.   IF RexxUtils
  1345.     THEN DO
  1346.       CALL SysFileTree tcppath || "\dll\tcpipdll.dll", 'file', 'FO'
  1347.       tcpip = file.0
  1348.     END
  1349.   ELSE DO
  1350.     CALL STREAM tcppath || "\dll\tcpipdll.dll", "C", "QUERY EXISTS"
  1351.     IF "\"RESULT <> "\"
  1352.       THEN tcpip = 1
  1353.       ELSE tcpip = 0
  1354.   END
  1355. END
  1356. RETURN tcpip /* IsIBMTCPIPInstalled */
  1357.  
  1358. /*******************************************************************/
  1359.  
  1360. GETDIR : PROCEDURE EXPOSE RexxUtils destination OS2Ver updest destnoslash,
  1361.                           sourcedir installdrive ;
  1362. IF ARG(1) = "" THEN DO
  1363.   SAY "Please enter the complete path where you want C-Kermit to be installed."
  1364.   SAY "Just press the Enter key to accept the default path, C:\CKERMIT\..."
  1365.   SAY "If this is an upgrade, it is recommended that you use the same directory"
  1366.   SAY "as your previous installation.  No INI files other than CKERMIT.INI are"
  1367.   SAY "overwritten, and all files will be backed up."
  1368.   SAY ""
  1369.   SAY "Path for installing C-Kermit:"
  1370.   IF SUBSTR(OS2Ver, 1, 1 ) > 1
  1371.     THEN CALL CHAROUT ,">"
  1372.   PARSE PULL destination
  1373.   END
  1374. ELSE destination = ARG(1)
  1375. destination = TRANSLATE( destination, '\', '/' )
  1376.  
  1377. /* Use default if nothing was entered */
  1378. IF "\"destination = "\"
  1379.   THEN destination = "C:\CKERMIT\"
  1380.  
  1381. /* Check to make sure there is a trailing backslash */
  1382. IF SUBSTR( destination, LENGTH(destination), 1 ) <> "\"
  1383.   THEN destination = destination || "\"
  1384.  
  1385. /* Check to make sure a drive is specified - use startup drive if not */
  1386. installdrive = FILESPEC("DRIVE",destination)
  1387. IF installdrive = ""
  1388.   THEN installdrive = FILESPEC("DRIVE", startdir)
  1389.  
  1390. /* Check to make sure a path is specified - use root if not */
  1391. installpath  = FILESPEC("PATH", destination)
  1392. IF installpath = ""
  1393.   THEN installpath= "\"
  1394.  
  1395. /* Build fully qualified destination directory name */
  1396. destination = installdrive || installpath
  1397.  
  1398. /* And guaranteed-uppercase version */
  1399. updest = TRANSLATE(destination)
  1400.  
  1401. /* And a version without a slash */
  1402. destnoslash = SUBSTR( destination, 1, LENGTH( destination ) - 1 )
  1403.  
  1404. /* Ensure that source and destination directories are different */
  1405. IF sourcedir"\" = TRANSLATE(destination)
  1406.   THEN DO
  1407.     SAY ""
  1408.     SAY "The source and destination directories must be different."
  1409.     CALL GETDIR
  1410.     RETURN
  1411.   END
  1412.  
  1413. /* Validate the install drive */
  1414. IF RexxUtils
  1415.   THEN
  1416.     IF POS( TRANSLATE( installdrive ), "A: B: " || SysDriveMap() ) <> 0
  1417.       THEN valid = 1
  1418.       ELSE valid = 0
  1419.   ELSE DO
  1420.     'CMD /C DIR' installdrive '> NUL'
  1421.     IF rc = 0
  1422.       THEN valid = 1
  1423.       ELSE valid = 0
  1424.     END
  1425. IF \ valid
  1426.   THEN DO
  1427.     SAY ""
  1428.     SAY installdrive "is not a valid drive."
  1429.     CALL GETDIR
  1430.     RETURN
  1431.   END
  1432.  
  1433. /* Confirm destination directory */
  1434. SAY ""
  1435. SAY "You have asked that C-Kermit be installed in" destination || "."
  1436. SAY "Is this correct? (Yes/No):"
  1437. CALL Confirmation
  1438. IF RESULT <> 'Y'
  1439.   THEN DO
  1440.     CALL GETDIR
  1441.     RETURN
  1442.   END
  1443. SAY ""
  1444. RETURN /* GetDir */
  1445.  
  1446. /*******************************************************************/
  1447.  
  1448. CheckSpace : PROCEDURE EXPOSE RexxUtils destination installdrive,
  1449.                               spacerequired OS2Ver ;
  1450.  
  1451. /* Check Available Drive Space */
  1452. IF RexxUtils
  1453.   THEN DO
  1454.   PARSE UPPER VALUE SysDriveInfo( installdrive ) WITH sysinfodrive freespace,
  1455.     drivesize volumelabel
  1456.  
  1457.   IF freespace < spacerequired
  1458.     THEN DO
  1459.       SAY "Drive" installdrive "does not have enough free space for C-Kermit."
  1460.       SAY "C-Kermit needs" spacerequired "bytes.  Drive" installdrive,
  1461.         "only has" freespace "bytes free."
  1462.       SAY "Either free the additional space on the selected drive, or"
  1463.       SAY "choose another drive to install on."
  1464.       SAY "Enter 'Yes' to try again, or 'No' to cancel."
  1465.       CALL Confirmation
  1466.       IF RESULT = 'Y'
  1467.         THEN DO
  1468.           CALL GETDIR
  1469.           CALL CheckSpace
  1470.           RETURN
  1471.         END
  1472.         ELSE DO
  1473.           SAY ""
  1474.           EXIT
  1475.         END
  1476.       END
  1477.   END /* RexxUtils */
  1478. RETURN /* CheckSpace */
  1479.  
  1480. /*******************************************************************/
  1481.  
  1482. CreateDir : PROCEDURE EXPOSE RexxUtils destination startdir OS2Ver,
  1483.                              spacerequired ;
  1484.  
  1485. SAY "Creating destination directory" destination || "..."
  1486. IF RexxUtils
  1487.   THEN rc = SysMkDir(SUBSTR(destination,1,LENGTH(destination)-1))
  1488.   ELSE 'CMD /C MD' SUBSTR(destination,1,LENGTH(destination)-1) '> NUL'
  1489.  
  1490. SELECT
  1491.   WHEN rc = 0
  1492.     THEN DO
  1493.       SAY ""
  1494.       CALL CreateUtilDir
  1495.       CALL CreateCharSetsDir
  1496.       END
  1497.  
  1498.   WHEN ( rc = 5 & RexxUtils ) | ( rc = 1 & \ RexxUtils )
  1499.     THEN DO
  1500.       SAY "Directory" destination "already exists."
  1501.       SAY "Enter 'Yes' to continue or 'No' to choose a new directory."
  1502.       CALL Confirmation
  1503.       IF RESULT <> 'Y'
  1504.         THEN DO
  1505.           CALL GETDIR
  1506.           CALL CheckSpace
  1507.           CALL CreateDir
  1508.           CALL CreateUtilDir
  1509.           CALL CreateCharSetsDir
  1510.           RETURN
  1511.         END
  1512.       ELSE DO
  1513.         CALL CreateUtilDir
  1514.         CALL CreateCharSetsDir
  1515.         END
  1516.     END
  1517.  
  1518.   OTHERWISE
  1519.     DO
  1520.       SAY "Can't create destination directory" destination
  1521.       SAY ""
  1522.       rc = DIRECTORY( startdir )
  1523.       CALL GETDIR
  1524.       CALL CheckSpace
  1525.       CALL CreateDir
  1526.       CALL CreateUtilDir
  1527.       CALL CreateCharSetsDir
  1528.       RETURN
  1529.     END
  1530. END
  1531.  
  1532. RETURN /* CreateDir */
  1533. /*******************************************************************/
  1534.  
  1535. CreateUtilDir : PROCEDURE EXPOSE RexxUtils destination startdir OS2Ver,
  1536.                              spacerequired ;
  1537.  
  1538. SAY "Creating UTIL subdirectory" destination || "UTIL..."
  1539. IF RexxUtils
  1540.   THEN rc = SysMkDir(destination || UTIL)
  1541.   ELSE 'CMD /C MD' destination || 'UTIL > NUL'
  1542.  
  1543. SELECT
  1544.   WHEN rc = 0
  1545.     THEN SAY ""
  1546.  
  1547.   WHEN ( rc = 5 & RexxUtils ) | ( rc = 1 & \ RexxUtils )
  1548.     THEN DO
  1549.       SAY "Directory" destination || "UTIL already exists."
  1550.       SAY ""
  1551.     END
  1552.  
  1553.   OTHERWISE
  1554.     DO
  1555.       SAY "Can't create UTIL subdirectory" destination || "UTIL."
  1556.       SAY ""
  1557.     END
  1558. END
  1559. RETURN /* CreateUtilDir */
  1560.  
  1561. /*******************************************************************/
  1562.  
  1563. CreateCharSetsDir : PROCEDURE EXPOSE RexxUtils destination startdir OS2Ver,
  1564.                              spacerequired ;
  1565.  
  1566. SAY "Creating CHARSETS subdirectory" destination || "CHARSETS..."
  1567. IF RexxUtils
  1568.   THEN rc = SysMkDir(destination || 'CHARSETS' )
  1569.   ELSE 'CMD /C MD' destination 'CHARSETS > NUL'
  1570.  
  1571. SELECT
  1572.   WHEN rc = 0
  1573.     THEN SAY ""
  1574.  
  1575.   WHEN ( rc = 5 & RexxUtils ) | ( rc = 1 & \ RexxUtils )
  1576.     THEN DO
  1577.       SAY "Directory" destination || "CHARSETS already exists."
  1578.       SAY ""
  1579.     END
  1580.  
  1581.   OTHERWISE
  1582.     DO
  1583.       SAY "Can't create CHARSETS subdirectory" destination || "CHARSETS."
  1584.       SAY ""
  1585.     END
  1586. END
  1587. RETURN /* CreateCharSetsDir */
  1588.  
  1589. /*******************************************************************/
  1590.  
  1591. GETMODEM : PROCEDURE EXPOSE RexxUtils OS2Ver modem  ;
  1592.  
  1593. SAY ""
  1594. SAY "C-Kermit is designed to work with many different brands of modems."
  1595. SAY "Please choose your preferred modem type from the following list:"
  1596. SAY ""
  1597. SAY " attdtdm            attisn             attmodem           att7300"
  1598. SAY " ccitt-v25bis       cermetek           concord            courier"
  1599. SAY " df03-ac            df100-series       df200-series       digitel-dt22"
  1600. SAY " gdc-212a/ed        hayes              microcom           none"
  1601. SAY " penril             pep-telebit        racalvadic         rolm"
  1602. SAY " slow-telebit       sportster          telebit            unknown"
  1603. SAY " usrobotics-212a    v32-telebit        v42-telebit        ventel"
  1604. SAY ""
  1605. SAY "Pressing the Enter key by itself selects HAYES..."
  1606. IF SUBSTR(OS2Ver, 1, 1 ) > 1
  1607.   THEN CALL CHAROUT ,">"
  1608. PARSE PULL modem
  1609.  
  1610. /* Use Hayes if nothing was entered */
  1611. IF modem = ""
  1612.   THEN modem = "hayes"
  1613.  
  1614. umodem = TRANSLATE(modem)
  1615. IF  (umodem \= "ATTDTDM") & (Umodem \= "ATTISN") & (Umodem \= "ATTMODEM"),
  1616.   & (Umodem \= "ATT7300") & (Umodem \= "CCITT-V25BIS"),
  1617.   & (Umodem \= "CERMETEK"),
  1618.   & (Umodem \= "CONCORD") & (Umodem \= "COURIER") & (Umodem \= "DF03-AC"),
  1619.   & (Umodem \= "DF100-SERIES") & (Umodem \= "DF200-SERIES"),
  1620.   & (Umodem \= "DIGITAL-DT22") & (Umodem \= "GDC-212A/ED"),
  1621.   & (Umodem \= "HAYES"),
  1622.   & (Umodem \= "MICROCOM") & (Umodem \= "NONE") & (Umodem \= "PENRIL"),
  1623.   & (Umodem \= "PEP-TELEBIT") & (Umodem \= "RACALVADIC") & (Umodem \= "ROLM"),
  1624.   & (Umodem \= "SLOW-TELEBIT") & (Umodem \= "SPORTSTER"),
  1625.   & (Umodem \= "TELEBIT"),
  1626.   & (Umodem \= "UNKNOWN") & (Umodem \= "USROBOTICS-212A"),
  1627.   & (Umodem \= "V32-TELEBIT"),
  1628.   & (Umodem \= "V42-TELEBIT") & (Umodem \= "VENTEL")
  1629.   THEN DO
  1630.     SAY "'"modem"' is not a valid choice."
  1631.     CALL GETMODEM
  1632.     RETURN
  1633.   END
  1634.  
  1635. SAY "You have chosen '"modem"' as your default modem."
  1636. SAY "Is this correct? (Yes/No):"
  1637.  
  1638. CALL Confirmation
  1639. IF RESULT <> 'Y'
  1640.   THEN DO
  1641.     CALL GETMODEM
  1642.     RETURN
  1643.   END
  1644. RETURN /* GetModem */
  1645.  
  1646. /*******************************************************************/
  1647.  
  1648. GETPORT : PROCEDURE EXPOSE RexxUtils OS2Ver port ;
  1649.  
  1650. SAY ""
  1651. SAY "C-Kermit can work with all valid serial communication devices."
  1652. SAY "ISA and EISA machines support COM1 through COM4."
  1653. SAY "MicroChannel machines support COM1 through COM8."
  1654. SAY "However, most computers have only COM1 and COM2 regardless of"
  1655. SAY "their architecture."
  1656. SAY ""
  1657. SAY "Please choose the communications port to which your" modem "modem is"
  1658. SAY "connected.  Pressing <Enter> by itself selects COM1..."
  1659. IF SUBSTR(OS2Ver, 1, 1 ) > 1
  1660.   THEN CALL CHAROUT ,">"
  1661. PARSE PULL port
  1662.  
  1663. /* Use com1 if nothing was entered */
  1664. IF port = ""
  1665.   THEN port = "com1"
  1666.  
  1667. IF LENGTH( port ) <> 4 | TRANSLATE( SUBSTR( port, 1, 3 ) ) <> "COM",
  1668.   | SUBSTR( port, 4, 1) < 1 | SUBSTR( port, 4, 1 ) > 8
  1669.   THEN DO
  1670.     SAY "'"port"' is not a valid choice."
  1671.     CALL GETPORT
  1672.     RETURN
  1673.   END
  1674.  
  1675. SAY "You have chosen '"port"' as your default communications port."
  1676. SAY "Is this correct? (Yes/No):"
  1677.  
  1678. CALL Confirmation
  1679. IF RESULT <> 'Y'
  1680.   THEN DO
  1681.     CALL GETPORT
  1682.     RETURN
  1683.   END
  1684. RETURN /* GetPort */
  1685.  
  1686. /*******************************************************************/
  1687.  
  1688. GETSPEED : PROCEDURE EXPOSE RexxUtils OS2Ver speed ;
  1689.  
  1690. SAY ""
  1691. SAY "C-Kermit can communicate at all hardware-supported transmission"
  1692. SAY "speeds.  Please select one of the following speeds, measured in"
  1693. SAY "bits per second, as the default speed for port" port || "."
  1694. SAY ""
  1695. SAY "  50    200   2400   9600   57600"
  1696. SAY "  75    300   3600  14400   76800"
  1697. SAY " 110    600   4800  19200  115200"
  1698. SAY " 150   1200   7200  38400        "
  1699. SAY ""
  1700. SAY "Pressing <Enter> by itself selects 9600 bps..."
  1701. IF SUBSTR(OS2Ver, 1, 1 ) > 1
  1702.   THEN CALL CHAROUT ,">"
  1703. PARSE PULL speed
  1704.  
  1705. /* Use 9600 if nothing was entered */
  1706. IF speed = ""
  1707.   THEN speed = "9600"
  1708.  
  1709. IF speed <> "50" & speed <> "75" & speed <> "110" & speed <> "150" ,
  1710.   & speed <> "200" & speed <> "300" & speed <> "600" & speed <> "1200",
  1711.   & speed <> "2400" & speed <> "3600" & speed <> "4800" & speed <> "7200",
  1712.   & speed <> "9600" & speed <> "14400" & speed <> "19200" & speed <> "38400",
  1713.   & speed <> "57600" & speed <> "76800" & speed <> "115200"
  1714.   THEN DO
  1715.     SAY "'"speed"' is not a valid choice."
  1716.     CALL GETSPEED
  1717.     RETURN
  1718.   END
  1719.  
  1720. SAY "You have chosen '"speed"' as your default transmission speed."
  1721. SAY "Is this correct? (Yes/No):"
  1722.  
  1723. CALL Confirmation
  1724. IF RESULT <> 'Y'
  1725.   THEN DO
  1726.     CALL GETSPEED
  1727.     RETURN
  1728.   END
  1729. RETURN /* GetSpeed */
  1730.  
  1731. /*******************************************************************/
  1732.  
  1733. GETRUNMODE : PROCEDURE EXPOSE RexxUtils OS2Ver runmode ;
  1734.  
  1735. IF SUBSTR( OS2Ver, 1, 1 ) = "2"
  1736.   THEN DO
  1737.     SAY ""
  1738.     SAY "C-Kermit may be run either in a full screen session or in a window."
  1739.     SAY "Full screen sessions are faster, window sessions give you access to"
  1740.     SAY "more OS/2 features, like cut and paste.  Please select either:"
  1741.     SAY ""
  1742.     SAY "  Fullscreen"
  1743.     SAY "  Window"
  1744.     SAY ""
  1745.     SAY "Pressing <Enter> by itself selects Window..."
  1746.     IF SUBSTR(OS2Ver, 1, 1 ) > 1
  1747.       THEN CALL CHAROUT ,">"
  1748.     PARSE PULL runmode
  1749.  
  1750.     /* Run in a window if nothing was entered */
  1751.     IF runmode = ''
  1752.       THEN runmode = "Window"
  1753.  
  1754.     Urunmode = TRANSLATE( runmode )
  1755.     IF Urunmode <> "WINDOW"    & Urunmode <> "W" &,
  1756.       Urunmode <> "FULLSCREEN" & Urunmode <> "F"
  1757.       THEN DO
  1758.         SAY "'"runmode"' is not a valid choice."
  1759.         CALL GETRUNMODE
  1760.         RETURN
  1761.       END
  1762.  
  1763.     IF Urunmode = "W"
  1764.       THEN runmode = "Window"
  1765.  
  1766.     IF Urunmode = "F"
  1767.       THEN runmode = "Fullscreen"
  1768.  
  1769.     SAY "You have chosen to run C-Kermit in a" runmode "session."
  1770.     SAY "Is this correct? (Yes/No):"
  1771.  
  1772.     CALL Confirmation
  1773.     IF RESULT <> 'Y'
  1774.       THEN DO
  1775.         CALL GETRUNMODE
  1776.         RETURN
  1777.       END
  1778.     SAY ""
  1779.   END
  1780. RETURN /* GetRunMode */
  1781.  
  1782. /*******************************************************************/
  1783.  
  1784. UnableToCompleteInstallation : PROCEDURE EXPOSE startdir ;
  1785.  
  1786. rc = Directory( startdir )
  1787. SAY ""
  1788. SAY "The above error has prevented the successful completion of the"
  1789. SAY "C-Kermit Installation routine.  Please take corrective actions"
  1790. SAY "and retry this operation."
  1791. SAY ""
  1792. EXIT
  1793. RETURN /* UnableToCompleteInstallation */
  1794.  
  1795. /*******************************************************************/
  1796.  
  1797. InstallSerialSupport : PROCEDURE EXPOSE OS2Ver ;
  1798.  
  1799. retval = 0
  1800. IF \ARG(1)
  1801.   THEN retval = 1
  1802.   ELSE DO
  1803.     SAY "IBM TCP/IP is installed on this machine, and C-Kermit will be"
  1804.     SAY "configured to use it.  Do you also wish to use C-Kermit for serial"
  1805.     SAY "communications via modems or direct serial-port connections?"
  1806.     SAY "(Yes/No): "
  1807.     IF Confirmation() = 'Y'
  1808.       THEN retval = 1
  1809.  
  1810.     SAY ""
  1811.   END
  1812. RETURN retval /* InstallSerialSupport */
  1813.  
  1814. /*******************************************************************/
  1815.  
  1816. InstallTelnetReplacements : PROCEDURE EXPOSE OS2Ver tcpip ;
  1817.  
  1818. retval = 0
  1819. IF tcpip
  1820.   THEN DO
  1821.     SAY "Do you wish to use C-Kermit as a replacement for IBM Telnet?"
  1822.     SAY "(Yes/No): "
  1823.     IF Confirmation() = 'Y'
  1824.       THEN retval = 1
  1825.     SAY ""
  1826.   END
  1827. RETURN retval /* InstallTelnetReplacements */
  1828.  
  1829. /*******************************************************************/
  1830.  
  1831. InstallVT220KeyMap : PROCEDURE ;
  1832.  
  1833. retval = 0
  1834.   SAY "Do you want full VT220 terminal key mappings installed? (Yes/No): "
  1835.   IF Confirmation() = 'Y'
  1836.     THEN retval = 1
  1837.   SAY ""
  1838. RETURN retval /* InstallVT220KeyMap */
  1839.  
  1840. /*******************************************************************/
  1841.  
  1842. FileExists : PROCEDURE EXPOSE RexxUtils ;
  1843. Retval = 0
  1844. IF RexxUtils
  1845.   THEN DO
  1846.     CALL SysFileTree ARG(1), "file", "FO"
  1847.     IF file.0 > 0
  1848.       THEN Retval = 1
  1849.     END
  1850.   ELSE DO
  1851.     CALL STREAM ARG(1), 'c', 'query exists'
  1852.     IF "\"RESULT <> "\"
  1853.       THEN Retval = 1
  1854.     END
  1855. RETURN Retval
  1856.  
  1857. /*******************************************************************/
  1858.  
  1859. Failure : PROCEDURE
  1860.  
  1861. SAY "C-Kermit Installation has failed. :-("
  1862. SAY ""
  1863. SAY "The installation process has encountered an error which prevents it"
  1864. SAY "from installing one or more files.  Possible causes are: "
  1865. SAY "   (1) a source file is missing;"
  1866. SAY "   (2) the destination file already exists and is marked"
  1867. SAY "       Read-Only or System; or"
  1868. SAY "   (3) the destination file is an EXE or DLL and is currently"
  1869. SAY "       in use by an active application."
  1870. SAY ""
  1871. SAY "Please take corrective actions and reexecute the installation procedure."
  1872. EXIT
  1873. RETURN
  1874.  
  1875. /* End OS/2 C-Kermit INSTALL.CMD */
  1876.  
  1877.  
  1878.