home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-387-Vol-3of3.iso / w / wr06004.zip / WR06004.CMD < prev    next >
OS/2 REXX Batch file  |  1993-01-27  |  19KB  |  492 lines

  1. /****************************************************************************
  2.  
  3.         Module Name             = WR06004.CMD
  4.  
  5.         Descriptive Name        = SelectPak 4 (Distributed Data Services)
  6.                                   install tool
  7.  
  8.         Copyright               = 04G1049  (C) Copyright IBM Corp. 1988, 1991.
  9.                                   All rights reserved.
  10.                                   US Government Users Restricted Rights -
  11.                                   Use, duplication or disclosure restricted by
  12.                                   GSA ADP Schedule Contract with IBM Corp.
  13.  
  14.                                   Licensed Materials - Property of IBM
  15.  
  16.         Function                = Installation tool for SelectPak 004
  17.  
  18.         Operating System        = OS/2 Extended Services
  19.  
  20. ****************************************************************************/
  21.  
  22. signal on halt          /* call HALT: routine on CTRL-BREAK */
  23. "echo off"
  24.  
  25. /*************************************************/
  26. /* Read in command line arguements if they exist */
  27. /*************************************************/
  28. parse upper arg Base_Drive Update_Drive Backed .
  29.  
  30.  
  31. /***********************************************************/
  32. /* Verify that the Database SelectPak message file exists  */
  33. /***********************************************************/
  34. MSG_FILE = stream('WR06DBM.MSG' , 'c' , 'query exists')
  35. if MSG_FILE = "" then
  36.         do
  37.         say " ERROR: could not find message file WR06DBM.MSG "
  38.         signal End
  39.         end
  40.  
  41. /***************************************************/
  42. /* Read the message file into an array of messages */
  43. /***************************************************/
  44. do while lines(MSG_FILE) \= 0    /* While not at EOF  */
  45.  
  46.         text_of_message = MSG_Parse(linein(MSG_FILE))
  47.         MSG.message_number = text_of_message
  48.  
  49. end                              /* End of While loop */
  50.  
  51.  
  52. /**************************************/
  53. /*  Close the message file            */
  54. /**************************************/
  55. RC = stream('WR06DBM.MSG' , 'c' , 'close')
  56.  
  57. start:
  58. "cls"
  59.  
  60. /****************************************/
  61. /*  One possible input parameter is '?' */
  62. /*  Display the help panel in this case */
  63. /****************************************/
  64. if Base_Drive = "?" then signal syntax
  65.  
  66. /*************************/
  67. /*  Introductory panel   */
  68. /*************************/
  69. say
  70. say
  71. say centre(MSG.43,50)
  72. say centre(Create_MSG(MSG.01,'004'),50)
  73. say centre(MSG.02,50)
  74. say
  75. say
  76.  
  77. /***************************************************/
  78. /* The Base Drive letter is the Drive letter that  */
  79. /* contains the Base Operating System.             */
  80. /***************************************************/
  81. get_Base_Drive:
  82. if Base_Drive \= "" then signal got_Base_Drive
  83. call charout ,"  "MSG.03" "
  84. parse upper linein Base_Drive
  85. if Base_Drive = "" then
  86.         do
  87.         say "  "MSG.04
  88.         signal get_Base_Drive
  89.         end
  90.  
  91. got_Base_Drive:
  92. /*************************************************/
  93. /* Verify that the \OS2\INSTALL directory exists */
  94. /* on the drive specified by the user            */
  95. /*************************************************/
  96. Base_Drive = substr(Base_Drive, 1, 1)
  97. "dir "Base_Drive":\OS2\INSTALL                                   >  NUL  2>>&1"
  98. if RC \= 0 then
  99.         do
  100.         say
  101.         say "  "Create_MSG2(MSG.05,Base_Drive,'\OS2\INSTALL')
  102.         say "  "Create_MSG(MSG.06,'\OS2\INSTALL')
  103.         say "  "MSG.07
  104.         parse linein ignore
  105.         Base_Drive = ""
  106.         signal get_Base_Drive
  107.         end
  108.  
  109. /***************************************************/
  110. /* The log varible will contain the full path name */
  111. /* of the output log.  The output log will contain */
  112. /* any error messages from this installation       */
  113. /***************************************************/
  114. LOG = ""Base_Drive":\OS2\INSTALL\WR06004.LOG"
  115. say
  116. say "  "Create_MSG(MSG.08,LOG)
  117. say
  118. say
  119.  
  120. /******************************************************/
  121. /* The Update Drive letter is the letter of the Drive */
  122. /* containing the Database system directory that      */
  123. /* you wish to upgrade.                               */
  124. /******************************************************/
  125. get_Update_Drive:
  126. if Update_Drive \= "" then signal got_Update_Drive
  127. call charout ,"  "MSG.09" "
  128. parse upper linein Update_Drive
  129. if Update_Drive = "" then
  130.         do
  131.         say "  "MSG.04
  132.         signal get_Update_Drive
  133.         end
  134.  
  135. got_Update_Drive:
  136. /*************************************************/
  137. /* Verify that the \SQLLIB directory exists      */
  138. /* on the drive specified by the user            */
  139. /*************************************************/
  140. Update_Drive = substr(Update_Drive, 1, 1)
  141. "dir "Update_Drive":\SQLLIB                                      >  NUL  2>>&1"
  142. if RC \= 0 then
  143.         do
  144.         say
  145.         say "  "Create_MSG2(MSG.05,Update_Drive,'\SQLLIB')
  146.         say "  "Create_MSG(MSG.06,'\SQLLIB')
  147.         say "  "MSG.07
  148.         parse linein ignore
  149.         Update_Drive = ""
  150.         signal get_Update_Drive
  151.         end
  152.  
  153. /***********************************************************/
  154. /* Display to the user, the directory that will be updated */
  155. /***********************************************************/
  156. say
  157. say "  "Create_MSG2(MSG.12,Update_Drive,'SQLLIB')
  158. say
  159.  
  160. Backup:
  161. /***********************************************************/
  162. /* Ask the user if they would like the old files to be     */
  163. /* backed up to the current directory.                     */
  164. /***********************************************************/
  165. say
  166. say "  "Create_MSG(MSG.13,'0.22')
  167. call charout , "  "Create_MSG(MSG.14,Backed)
  168.  
  169. if Backed \= "" then signal got_Backup
  170. parse upper linein Backed
  171. got_Backup:
  172. if Backed  = "0" then signal verify
  173. if Backed \= "1" then              /* Only 0 and 1 are acceptable inputs */
  174.         do
  175.         say
  176.         say "  "MSG.15
  177.         Backed = ""
  178.         signal Backup
  179.         end
  180.  
  181. verify:
  182. /*************************************************/
  183. /* Ask for verification of the input parameters. */
  184. /* This is done even if the user is using the    */
  185. /* command line interface.                       */
  186. /*************************************************/
  187. say
  188. say
  189. call charout ,"  "MSG.16" "
  190. parse upper linein Verified
  191. if Verified  = "0" then        /* If the user answers NO to verification */
  192.         do                     /* then reset all of the input parameters */
  193.         Base_Drive = ""        /* and go back to the start.              */
  194.         Update_Drive = ""
  195.         Backed = ""
  196.         Verified = ""
  197.         signal start
  198.         end
  199.  
  200. if Verified \= "1" then        /* Only 0 and 1 are acceptable inputs */
  201.         do
  202.         say
  203.         say "  "MSG.15
  204.         Verified = ""
  205.         signal verify
  206.         end
  207. say
  208.  
  209. /*****************************************************************************/
  210. /*                                                                           */
  211. /* Set up the following variables:                                           */
  212. /* SYSLEVEL: The fully qualified path name of the SYSLEVEL file for database */
  213. /* SQL_PATH: The fully qualified path name of the SQLLIB        directory    */
  214. /* DLL_PATH: The fully qualified path name of the SQLLIB\DLL    directory    */
  215. /* REQ_PATH: The fully qualified path name of the SQLLIB\REQDLL directory    */
  216. /*                                                                           */
  217. /*****************************************************************************/
  218.  
  219. SYSLEVEL = Update_Drive":\SQLLIB\SYSLEVEL.SQL"
  220. SQL_PATH = Update_Drive":\SQLLIB"
  221. DLL_PATH = Update_Drive":\SQLLIB\DLL"
  222. REQ_PATH = Update_Drive":\SQLLIB\REQDLL"
  223.  
  224.  
  225. /*******************************************************************/
  226. /* Check to see that the customer has WR06000 or WR06010 installed */
  227. /* by reading the syslevel file.                                   */
  228. /*******************************************************************/
  229. firstline = linein(SYSLEVEL)
  230.  
  231. /*****************************************************/
  232. /* Close the syslevel file so that it can be updated */
  233. /*****************************************************/
  234. RC = stream(SYSLEVEL,'c','close')
  235.  
  236. /************************************************************/
  237. /* CSD_LEVEL will contain the current level of service and  */
  238. /* PAK_TYPE will tell us weather this installation was from */
  239. /* a server package or requester package.                   */
  240. /************************************************************/
  241. csd_level = substr(firstline,45,7)
  242. pak_type  = substr(firstline,101,8)
  243.  
  244. /**************************************************************/
  245. /* Only allow this installation if the users current CSD      */
  246. /* level is WR06000 ( ES 1.0 ) or WR06010 ( ES 1.0 plus this  */
  247. /* first round of SelectPaks )                                */
  248. /**************************************************************/
  249. if csd_level \= 'WR06010' & csd_level \= 'WR06000' then
  250. do
  251.         say
  252.         say "  "MSG.17
  253.         say "  "MSG.18
  254.         say "  "MSG.19
  255.         say
  256.         signal End
  257. end
  258.  
  259. /***********************************************************/
  260. /*  If the initial installation was from a server package, */
  261. /*  then install SYSLEVEL.SQS as SYSLEVEL.SQL.  Otherwise  */
  262. /*  install SYSLEVEL.SQC as SYSLEVEL.SQL.                  */
  263. /***********************************************************/
  264. if pak_type = 'with Ser' then SYSLVL_FILE = SYSLEVEL.SQS
  265.                          else SYSLVL_FILE = SYSLEVEL.SQC
  266.  
  267. "echo.                                                           >> "LOG" 2>>&1"
  268. "echo " centre(MSG.43,50)                                     "  >> "LOG" 2>>&1"
  269. "echo " centre(Create_MSG(MSG.01,'004'),50)                   "  >> "LOG" 2>>&1"
  270. "echo.                                                           >> "LOG" 2>>&1"
  271. "echo.                                                           >> "LOG" 2>>&1"
  272. "echo.                                                           >> "LOG" 2>>&1"
  273.  
  274. /***********************************************************************/
  275. /* If the user had chosen to backup the old version of the files,      */
  276. /* then copy the files that will be changing from the SQLLIB directory */
  277. /* to the current directory.                                           */
  278. /***********************************************************************/
  279. if Backed  = "0" then signal skip_Backup
  280.  
  281. "echo "MSG.20 SQL_PATH"\SYSLEVEL.SQL                             >>"LOG" 2>>&1"
  282. "copy "SQL_PATH"\SYSLEVEL.SQL SYSLVOLD.SQL                       >>"LOG" 2>>&1"
  283.  
  284. "echo "MSG.20 DLL_PATH"\SQLC.DLL                                 >>"LOG" 2>>&1"
  285. "copy "DLL_PATH"\SQLC.DLL                                        >>"LOG" 2>>&1"
  286. "echo "MSG.20 DLL_PATH"\SQLCST10.DLL                             >>"LOG" 2>>&1"
  287. "copy "DLL_PATH"\SQLCST10.DLL                                    >>"LOG" 2>>&1"
  288.  
  289. "echo "MSG.20 REQ_PATH"\SQLC.DLL to SQLCREQ.DLL                 >>"LOG" 2>>&1"
  290. "copy "REQ_PATH"\SQLC.DLL SQLCREQ.DLL                           >>"LOG" 2>>&1"
  291.  
  292. skip_Backup:
  293.  
  294.  
  295. /*****************************************************************************/
  296. /* Determine what type of Database configuration exists.                     */
  297. /* ie. is it a Server, Requester, Standalone or Requester w/ local databases */
  298. /*****************************************************************************/
  299. "WR06DBM"
  300. nodetype = RC
  301. "echo "MSG.44 " " nodetype "                                     >>"LOG" 2>>&1"
  302. "echo "MSG.45 "                                                  >>"LOG" 2>>&1"
  303.  
  304.  
  305. /***************************************************************************/
  306. /* Unzip the SQLLIB files   -n means only unzip newer files                */
  307. /***************************************************************************/
  308. "PKUNZIP2 -n WR06004.SPK *.* "DLL_PATH"                            >>"LOG" 2>>&1"
  309. if RC = 0 then signal Zip_Done1
  310.  
  311. if RC = 11 then  /* Make a note in the log if no files were unziped */
  312.         do
  313.         say
  314.         say "  "Create_MSG(MSG.21,SQL_PATH)
  315.         signal Zip_Done1
  316.         end
  317.  
  318. /****************************************************************************/
  319. /* If there were any errors then tell the user that there were problems.    */
  320. /****************************************************************************/
  321. say "  "MSG.22
  322. say "  "Create_MSG(MSG.23,LOG)
  323. say "  "
  324. say "  "MSG.07
  325. parse linein ignore
  326.  
  327. Zip_Done1:
  328. /****************************************************************/
  329. /*  Copy and delete files based on nodetype of the installation */
  330. /****************************************************************/
  331. if nodetype = 2 then do
  332.     "echo copying  SQLCREQ.DLL to SQLC.DLL                       >>"LOG" 2>>&1"
  333.     "copy "DLL_PATH"\SQLCREQ.DLL "DLL_PATH"\SQLC.DLL             >>"LOG" 2>>&1"
  334.     end
  335.  
  336. if nodetype = 1 then do
  337.     "echo copying  SQLCSVR.DLL to SQLC.DLL                       >>"LOG" 2>>&1"
  338.     "copy "DLL_PATH"\SQLCSVR.DLL "DLL_PATH"\SQLC.DLL             >>"LOG" 2>>&1"
  339.     end
  340.  
  341. if nodetype = 0 then do
  342.     "echo deleting SQLCST10.DLL                                  >>"LOG" 2>>&1"
  343.     "del  "DLL_PATH"\SQLCST10.DLL                                >>"LOG" 2>>&1"
  344.     end
  345.  
  346.  
  347. "echo deleting SQLCSVR.DLL, SQLCREQ.DLL                          >>"LOG" 2>>&1"
  348. "del "DLL_PATH"\SQLCREQ.DLL                                      >>"LOG" 2>>&1"
  349. "del "DLL_PATH"\SQLCSVR.DLL                                      >>"LOG" 2>>&1"
  350.  
  351. /**********************************************************************/
  352. /* Update the SYSLEVEL file to indicate a SelectPak has been applied  */
  353. /**********************************************************************/
  354. "echo "MSG.24"                                                   >>"LOG" 2>>&1"
  355. "attrib -r "SQL_PATH"\SYSLEVEL.SQL                               >  NUL  2>>&1"
  356. "copy "DLL_PATH"\"SYSLVL_FILE     SQL_PATH"\SYSLEVEL.SQL         >>"LOG" 2>>&1"
  357. "del "DLL_PATH"\SYSLEVEL.SQS                                     >>"LOG" 2>>&1"
  358. "del "DLL_PATH"\SYSLEVEL.SQC                                     >>"LOG" 2>>&1"
  359. "attrib +r "SQL_PATH"\SYSLEVEL.SQL                               >  NUL  2>>&1"
  360.  
  361.  
  362.  
  363. REQDLL:
  364. /***********************************************************/
  365. /* If the REQDLL directory exists and has files in it then */
  366. /* update them with the ones in the ZIP file               */
  367. /***********************************************************/
  368. "dir "REQ_PATH"                                                  >  NUL  2>>&1"
  369. if RC \= 0 then signal Done
  370.  
  371. "PKUNZIP2 -n WR06004.SPK SQLCREQ.DLL "REQ_PATH"                    >>"LOG" 2>>&1"
  372. if RC = 0 then signal Zip_Done2
  373.  
  374. /*****************************************************/
  375. /* If there were no files to unpack, notify the user */
  376. /*****************************************************/
  377. if RC = 11 then
  378.         do
  379.         say
  380.         say "  "Create_MSG(MSG.21,REQ_PATH)
  381.         signal Zip_Done2
  382.         end
  383.  
  384. /****************************************************************************/
  385. /* If there were any errors then tell the user that there were problems.    */
  386. /****************************************************************************/
  387. say "  "MSG.22
  388. say "  "Create_MSG(MSG.23,LOG)
  389. say
  390. say "  "MSG.07
  391. parse linein ignore
  392.  
  393.  
  394. Zip_Done2:
  395. /*******************************************************************/
  396. /* Clean up the REQDLL directory by renaming the appropriate files */
  397. /*******************************************************************/
  398.  
  399. if nodetype = 1 || nodetype = 3 then do
  400.         "echo copying  SQLCREQ.DLL to SQLC.DLL in REQDLL         >>"LOG "2>>&1"
  401.         "copy "REQ_PATH"\SQLCREQ.DLL  "REQ_PATH"\SQLC.DLL        >>"LOG "2>>&1"
  402.         "echo deleting SQLCREQ.DLL in REQDLL                     >>"LOG "2>>&1"
  403.         "del "REQ_PATH"\SQLCREQ.DLL                              >>"LOG "2>>&1"
  404.         end
  405. else do
  406.         "echo deleting SQLCREQ.DLL in REQDLL                     >>"LOG "2>>&1"
  407.         "del "REQ_PATH"\SQLCREQ.DLL                              >>"LOG "2>>&1"
  408.         end
  409.  
  410. Done:
  411.  
  412. /**************************************************************/
  413. /* The installation is now complete, inform the user and exit */
  414. /**************************************************************/
  415. say
  416. say centre(Create_MSG(MSG.25,'WR06004'),50)
  417. say
  418. signal End
  419.  
  420. /***********************************************************/
  421. /* This routine will be called if the user uses CTRL-BREAK */
  422. /***********************************************************/
  423. HALT:
  424. say
  425. say
  426. say MSG.26
  427. say MSG.27
  428. say
  429. signal End
  430.  
  431. /* Help panel */
  432. syntax:
  433. say
  434. say "  "Create_MSG(MSG.28,'WR06004')
  435. say
  436. say "  "MSG.29
  437. say "      "MSG.30
  438. say "         "Create_MSG(MSG.31,'\OS2\INSTALL')
  439. say "      "MSG.32
  440. say "         "Create_MSG(MSG.31,'\SQLLIB')
  441. say "      "MSG.34
  442. say "         "Create_MSG(MSG.35,'0.22')
  443. say "      "MSG.36
  444. say "         "MSG.37
  445. say
  446. say
  447. say "  "Create_MSG(MSG.38,'WR06004')
  448. say "      WR06004 C C 1                                                 "
  449. say "  "MSG.39
  450. say
  451. say
  452. signal End
  453.  
  454.  
  455. /*****************************************************************/
  456. /* This routine will take a message and a variable and place the */
  457. /* variable in the proper position in the string.                */
  458. /*****************************************************************/
  459. Create_MSG:
  460. parse arg MESSAGE,VARIABLE
  461. PART1 = SUBSTR(MESSAGE,1,POS('%1',MESSAGE)-1)
  462. PART2 = SUBSTR(MESSAGE,POS('%1',MESSAGE)+2)
  463. RETURN PART1 || VARIABLE || PART2
  464.  
  465.  
  466. /*********************************************************************/
  467. /* This routine will take a message and two variables and place the  */
  468. /* variables in their proper positions in the string.                */
  469. /*********************************************************************/
  470. Create_MSG2:
  471. parse arg MESSAGE,VARIABLE1,VARIABLE2
  472. POS1 = POS('%1',MESSAGE)
  473. POS2 = POS('%2',MESSAGE)
  474. PART1 = SUBSTR(MESSAGE,1,POS1-1)
  475. PART2 = SUBSTR(MESSAGE,POS1+2,POS2-POS1-2)
  476. PART3 = SUBSTR(MESSAGE,POS2+2)
  477. RETURN PART1 || VARIABLE1 || PART2 || VARIABLE2 || PART3
  478.  
  479.  
  480. /*******************************************************************/
  481. /* This routine will take a message line from the message file     */
  482. /* and parse it into a message number and a text string            */
  483. /*******************************************************************/
  484. MSG_Parse:
  485. parse arg MESSAGE
  486. TEXT = SUBSTR(MESSAGE,POS(' ',MESSAGE)+1)
  487. message_number = SUBSTR(MESSAGE,1,POS(' ',MESSAGE)-1)
  488. RETURN TEXT
  489.  
  490.  
  491. End:
  492.