home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / netdor3.zip / DISK_13 / IMAGE12.ZIP / CATALOG / nvdm2be.cmd < prev    next >
OS/2 REXX Batch file  |  1994-12-12  |  9KB  |  320 lines

  1. /*****************************************************************************
  2.  *                    Licensed Materials-Property of IBM                     *
  3.  *               5604-472 (c) Copyright IBM Corporation, 1993                *
  4.  *                           All rights reserved.                            *
  5.  *                  US Government Users Restricted Rights -                  *
  6.  *                 Use, duplication or disclosure restricted                 *
  7.  *                by GSA ADP Schedule Contract with IBM Corp.                *
  8.  *****************************************************************************/
  9. /*****************************************************************************
  10.  * Configuration back-end NVDM2BE                                            *
  11.  *****************************************************************************/
  12.  
  13. signal on error
  14.  
  15. signal on syntax
  16. signal on novalue
  17. call on halt
  18. call rxfuncadd 'CADDINIT', 'RXCADD', 'CADDINIT'
  19. call rxfuncadd 'RXLOADFUNCS', 'RXUTILS', 'RXLOADFUNCS'
  20. call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
  21. call SysLoadFuncs
  22. rc=RxLoadFuncs('QUIET')
  23. Ver = 'CAddInit'()
  24. if abbrev(Ver, 'ERROR:')
  25.   then exit 200
  26. ndm2obj=rxcadd.proginfo.5                 /* NVDM2 Object Name                */
  27. cdminstcomm='CDM INSTALL '
  28. cdmremcomm='CDM REMOVE '
  29. nvdm2ini=GetNvDM2Path() ;
  30. nvdm2ini=nvdm2ini||'IBMNVDM2.INI' ; /*Full path to NvDM2 INI file */
  31. clientkey='ClientName'
  32. serverkey='ServerName'
  33. Title = RxCAdd.STitle 'Installation'
  34. XCode = 0
  35. if 'REGFUNC'('COUENV') <> 0
  36.   then call AddExit 206, 'Error registering COUENV.DLL.'
  37. CDr = GetRemoteDrive()
  38. CDr = strip(CDr, 'T', '\')'\'
  39. call directory CDr
  40. wsid=getwsid()                            /* NDM2 workstation name            */
  41. ndm2obj=getndmname()                      /* NVDM2 Object Name                */
  42. call startndmagent
  43. select
  44.   when RxCAdd.OpType = 'ADD'
  45.     then do
  46.       call DeleteQ
  47.       call CreateQ
  48.       call dmobput ndm2obj rxcadd.stitle
  49.       say 'Invoking NvDM/2...'
  50.       '@net run cmd /c "'cdminstcomm ndm2obj '/WS:'wsid '/R:Y' '"'
  51.       if rc=0 then
  52.         do
  53.           call 'MessageBox' Title, 'The NvDM/2 CDM Install Request for' RxCAdd.Stitle 'was succesfully started.',
  54.                                    'NvDM/2 is installing 'RxCAdd.Stitle 'on your machine, please wait...'
  55.           say 'Please wait...'
  56.           ndm2instrc=SyncNdmEnd()
  57.           XCode = ndm2instrc
  58.         end
  59.       else
  60.         do
  61.           call dmobdel ndm2obj
  62.           call 'MessageBox' Title, 'The NvDM/2 CDM Install Request for' RxCAdd.Stitle 'was unsuccesful - RC:' RC
  63.           XCode = -1
  64.         end
  65.       call DeleteQ
  66.     end
  67.   when RxCAdd.OpType = 'REMOVE'
  68.     then do
  69.       call DeleteQ
  70.       call CreateQ
  71.       call dmobput ndm2obj rxcadd.stitle
  72.       say 'Invoking NvDM/2...'
  73.       '@net run cmd /c "'cdmremcomm ndm2obj '/WS:'wsid '/DA:A' '"'
  74.       if rc=0 then
  75.         do
  76.           call 'MessageBox' Title, 'The NvDM/2 CDM Remove Request for' RxCAdd.Stitle 'was succesfully started.',
  77.                                    'NvDM/2 is removing 'RxCAdd.Stitle 'on your machine, please wait...'
  78.           say 'Please wait...'
  79.           ndm2instrc=SyncNdmEnd()
  80.           XCode = ndm2instrc
  81.         end
  82.       else
  83.         do
  84.           call 'MessageBox' Title, 'The NDM/2 CDM Remove Request for' RxCAdd.Stitle 'was unsuccesful - RC:' RC
  85.           XCode = -1
  86.         end
  87.       call DeleteQ
  88.     end
  89.   otherwise do
  90.     call 'MessageBox' Title, 'Unexpected operation type "'RxCAdd.OpType'"'
  91.     XCode = 201
  92.   end
  93. end
  94. DetachRemoteDrive(CDr)
  95. call AddExit XCode
  96.  
  97. GetNvDM2Path:
  98. Nvdmpath = ''
  99. Nvdmpath = SysSearchPath( 'DPATH', 'syslevel.ndm')
  100. if Nvdmpath = '' then do
  101.   say ' Error : NvDM/2 is not installed on this workstation'
  102.   XXC = 991
  103.   signal DebugExit
  104. end
  105. drive = FILESPEC("drive", Nvdmpath)
  106. path  = FILESPEC("path", Nvdmpath)
  107. Nvdmpath = drive||path
  108. return Nvdmpath
  109. /* end GetNvDM2Path */
  110.  
  111. DetachRemoteDrive:
  112. parse arg drive .
  113. remote = RxCouInfo("GET","REMOTE")
  114. drive = LEFT(drive,2)
  115. remote = LEFT(remote,2)
  116. if drive <> remote then do
  117.    '@GIME 'drive' /D'
  118. end
  119. return
  120. /* end DetachRemoteDrive */
  121.  
  122. GetRemoteDrive:
  123. drive = ''
  124. parse var rxcadd.proginfo.5 'PARAMS=' NDargs
  125. parse var rxcadd.proginfo.5 . 'NDM2Server=' servername
  126. remote = RxCouInfo("GET","REMOTE")
  127. remote = LEFT(remote,1)
  128. ServFile = remote||':\LOCAL\COMPLEX\SERVERS.COR'
  129. Temp = NameFind(ServFile ':NICK 'servername' :ID')
  130. if abbrev(Temp, '$RXERROR') | abbrev(Temp, 'ERROR:') then do
  131.    say ' Error : Reading SERVERS.COR for NvDM/2 server 'servername
  132.    XXC = 991
  133.    signal DebugExit
  134. end
  135. else
  136. do
  137.   parse var Temp ':ID.' id
  138.   id = LEFT(id,LENGTH(id)-1)
  139.   '@gime \\'||servername||'\'||id||' |pipe'
  140.   parse upper pull output
  141.   do queued()
  142.     parse upper pull .
  143.   end
  144.   parse var output first rest
  145.   if first = 'Error' then do
  146.     say ' Error : Unable to connect to NvDM/2 server 'servername
  147.     XXC = 991
  148.     signal DebugExit
  149.   end
  150.   drive = RIGHT(rest,2)
  151. end
  152. return drive
  153. /* end GetRemoteDrive */
  154.  
  155. getwsid:
  156. name = ''
  157. if stream(nvdm2ini,'c','query exists') <> '' then do
  158.   '@type 'nvdm2ini '|find "'clientkey'" |pipe'
  159.   if rc=0 then do
  160.     do queued()
  161.       parse upper pull . clientkey '=' pname .
  162.       if pname <> ' ' then name = pname
  163.     end
  164.     do queued()
  165.       pull
  166.     end
  167.     if name <> '' then
  168.       return name
  169.   end
  170.   '@type 'nvdm2ini '|find "'serverkey'" |pipe'
  171.   if rc=0 then do
  172.     do queued()
  173.       parse upper pull . serverkey '=' pname .
  174.       if pname <> ' ' then name = pname
  175.     end
  176.     do queued()
  177.       pull
  178.     end
  179.     return name
  180.   end
  181. end
  182. say ' Error : Unable to get the NvDM/2 workstation name'
  183. XXC = 991
  184. signal DebugExit
  185. /* end getwsid*/
  186.  
  187. getndmname:
  188. parse var rxcadd.proginfo.5 'PARAMS=' NDargs
  189. parse var NDargs NDArgsLeft 'NDM2Name=' ndm2objname 'NDM2Server=' servername NDArgsRight
  190. rxcadd.proginfo.5 = 'PARAMS='NDargsLeft||NDArgsRight
  191. return ndm2objname
  192. /* end getndmname */
  193.  
  194. startndmagent:
  195. status=''; pstatus=''
  196. '@cdm status | pipe'
  197. do queued()
  198.   parse upper pull . 'THE CDM AGENT STATUS IS' pstatus .
  199.   if pstatus <> '' then status=pstatus
  200. end
  201. if status = 'INACTIVE.' then
  202.   do
  203. /* call directory 'c:' */
  204.    '@cdm start'
  205.   end
  206. call directory CDr
  207. return
  208.  
  209. SyncNdmEnd: procedure
  210. rqname="IBMCOUDM2"
  211. qname=rxqueue("Set",rqname)
  212. /*call SysSleep 4  */
  213. do while queued()=0
  214.  /*  call SysSleep 3 */
  215. end
  216. pull ndm2rc
  217. return ndm2rc
  218. /* end SyncNdmEnd */
  219.  
  220.  
  221. CreateQ: procedure
  222. rqname="IBMCOUDM2"
  223. qname=rxqueue("Create",rqname)
  224. if rqname <> qname then
  225.   do
  226.      say "Error unable to create queue:" rqname
  227.      say "rqname=" rqname
  228.      say "qname=" qname
  229.      return 1111
  230.   end
  231. return 0
  232. /* end CreateQ */
  233.  
  234. DeleteQ: procedure
  235. rqname="IBMCOUDM2"
  236. call rxqueue "Delete",rqname
  237. return 0
  238. /* end DeleteQ */
  239.  
  240. RunItl: procedure expose RXCADD.
  241. parse arg ItlName
  242. CDr = RxCouInfo('GET', 'REMOTE')
  243. CDr = strip(CDr, 'T', '\')||'\'
  244. List = 'VERSION STITLE OPTYPE PREVIOUS'
  245. do I = 1 to words(List)
  246.   Name = 'RXCADD.'word(List, I)
  247.   call value Name, value(Name), 'OS2ENVIRONMENT'
  248. end I
  249. do I = 1 to RXCADD.PROGINFO.0
  250.   call value 'RXCADD.PROGINFO.'I, RXCADD.PROGINFO.I, 'OS2ENVIRONMENT'
  251. end I
  252. if pos('\', ItlName) = 0
  253.   then do
  254.     parse source . . Me
  255.     ItlName = left(Me, lastpos('\', Me))||ItlName
  256.   end
  257. '@CALL' CDr'IMPIT.CMD /R:'ItlName '/NOPAUSE'
  258. return rc
  259.  
  260. AddExit:
  261. parse arg XCode, Msg
  262. if XCode = ''
  263.   then XCode = 0
  264. if Msg <> ''
  265.   then call 'MessageBox' Title, Msg
  266. call 'CAddComplete' XCode
  267. call 'CAddExit'
  268. exit XCode
  269.  
  270. /***********************************************************************
  271.  *                             ERROR TRAPS                             *
  272.  ***********************************************************************/
  273. BugInit:
  274. signal off error; signal off failure; signal off halt
  275. signal off novalue; signal off notready; signal off syntax
  276. parse upper source . . Me
  277. if symbol('TITLE') = 'LIT'
  278.   then Title = 'COREADD Failure'
  279. Me = Me':'||'0A'x
  280. if symbol('GLOBALS') = 'LIT'
  281.   then do
  282.     Globals = 'TrVal'
  283.     TrVal = 'O'
  284.   end
  285. return
  286.  
  287. Halt:
  288. Where = SigL
  289. call BugInit
  290. call 'MessageBox' Title, Me||'Execution halted by user in line' Where
  291. XXC = 204
  292. signal DebugExit
  293.  
  294. Syntax:
  295. Where = SigL
  296. call BugInit
  297. call 'MessageBox' Title,,
  298.     Me||'Syntax error' rc '('errortext(rc)') in line' Where'.'
  299. XXC = 203
  300. signal DebugExit
  301.  
  302. Novalue:
  303. Where = SigL
  304. call BugInit
  305. call 'MessageBox' Title, Me||'NOVALUE error ('condition('D')') in line' Where'.'
  306. XXC = 203
  307. signal DebugExit
  308.  
  309. DebugExit:
  310. call 'CAddComplete' XXC
  311. call 'CAddExit'
  312. exit XXC
  313.  
  314.  
  315. Error:
  316. errormsg='Error' rc 'in line' sigl':' sourceline(sigl)
  317. say errormsg
  318. XXC = 999
  319. signal DebugExit
  320.