home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Monster Media 1993 #2
/
Image.iso
/
lan
/
21ripl.zip
/
IBMLS.ZIP
/
RPLUCC20.CMD
< prev
next >
Wrap
OS/2 REXX Batch file
|
1993-05-28
|
25KB
|
637 lines
/*****************************************************************************/
/* RPLUCC20.CMD - REXX program to update a RIPL client CONFIG.20 file to */
/* configure the following statements: */
/* - SWAPPATH statement */
/* - Family 1/family 2 BASEDEV statments */
/* - Video device driver statements */
/* */
/* Inputs: */
/* driver - Video device driver name(IBMVGA32, IBMXGA32, IBM8514, or */
/* '' for none). */
/* client - RIPL client name. */
/* Bustype - Hardware bus type (MCA, ISA, EISA, '' for none) */
/* swaptarget - Swaptarget (L=Local, S=Server, ''=None) */
/* rpldir - Path to IBMLAN\RPL directory */
/* lantype - Subdirectory name containing lan dependent files */
/* version21 - Flag indicating target OS is version 2.1 */
/* basedevflag - Flag indicating whether XGA.SYS is BASEDEV or DEVICE */
/* */
/* Copyright: (C) Copyright IBM Corp. 1993 */
/* */
/* Note 1: All the variables are global to all subroutines. */
/* */
/* Note 2: All NLS message strings are centrally located in the */
/* external rexx procedure, RPLSDMSG.CMD. RPLSDMSG is */
/* called to return the message strings needed by RPLUCC20. */
/* */
/* Note 3: This procedure must also be compatable with OS/2 1.30.2. */
/* For this reason, none of the OS/2 2.0 unique rexx function */
/* calls can be used. */
/* */
/* Note 4: This procedure is designed to be called by the procedure */
/* RPLSETD.CMD. It is not designed to be called directly */
/* from the command line. */
/* */
Parse Arg driver,client,Bustype,swaptarget,rpldir,lantype,version21,basedevflag
/* initialize NLS error and informational message strings */
Call Initialize_NLS_Messages
ddbootdrv = ''
dd_data.0 = 0
/* call Update_Config20_Format to see if CONFIG.20 needs to be updated */
/* to LS 3.0 format */
Call Update_Config20_Format
If result <> 0 Then return 2
/* build fully qualified path names for client CONFIG.20 */
If client = 'DEFALT20' Then Do
/* DEFALT20 is special case, it must be called for each lantype */
configname = rpldir'\IBMCOM\'lantype'\CONFIG.20'
tmpconfigname = rpldir'\IBMCOM\'lantype'\CONFIG.20T'
bakconfigname = rpldir'\IBMCOM\'lantype'\CONFIG.20B'
end
else Do
configname = rpldir'\MACHINES\'client'\CONFIG.20'
tmpconfigname = rpldir'\MACHINES\'client'\CONFIG.20T'
bakconfigname = rpldir'\MACHINES\'client'\CONFIG.20B'
end
/* delete temp file names */
Call Delete_File tmpconfigname
Call Delete_File bakconfigname
If File_Exist(configname) Then Do
If swaptarget <> '' Then Do
/* copy records to first SWAPPATH statement(swap to server) */
f1p = 0
do until lines(configname) = 0
data = linein(configname)
ucdata = translate(data)
f1p = pos('SWAPPATH=', ucdata)
If f1p <> 0 Then Leave
Call Lineout tmpconfigname, data
end
If f1p <> 0 Then Do
/* check server SWAPPATH statement */
If swaptarget = 'S' Then Do
If substr(ucdata, 1, 4) = 'REM ' Then Do
newdata = substr(data, f1p)
data = newdata
end
end
else If substr(ucdata, 1, 4) <> 'REM ' Then Do
newdata = 'REM ' || data
data = newdata
end
Call Lineout tmpconfigname, data
/* get next comment line and write it out */
data = linein(configname)
Call Lineout tmpconfigname, data
/* get next SWAPPATH line (local swapper) */
data = linein(configname)
ucdata = translate(data)
f1p = pos('SWAPPATH=', ucdata)
if f1p <> 0 Then Do
If swaptarget = 'L' Then Do
If substr(ucdata, 1, 4) = 'REM ' Then Do
/* statement disabled, enable it */
newdata = substr(data, f1p)
data = newdata
end
end
else If substr(ucdata, 1, 4) <> 'REM ' Then Do
/* statement enabled, disable it */
newdata = 'REM ' || data
data = newdata
end
end
Call Lineout tmpconfigname, data
end
end
If Bustype <> '' Then Do
/* check family 1/family 2 BASEDEV statements */
/* copy records to PRINT01.SYS statement */
f1p = 0
do until lines(configname) = 0
data = linein(configname)
ucdata = translate(data)
f1p = pos('=PRINT01.SYS', ucdata)
If f1p <> 0 Then Leave
Call Lineout tmpconfigname, data
end
If f1p <> 0 Then Do
/* process 3 family 1 statements */
i = 1
Do While i <= 3
If Bustype = 'ISA' | Bustype = 'EISA' Then Do
If substr(ucdata, 1, 4) = 'REM ' Then Do
/* record disabled, enable it */
f1p = pos('BASEDEV=', ucdata)
newdata = substr(data, f1p)
data = newdata
end
end
else Do
/* not ISA/EISA bus, make sure record is disabled */
If substr(ucdata, 1, 4) <> 'REM ' Then Do
newdata = 'REM ' || data
data = newdata
end
end
Call Lineout tmpconfigname, data
i = i + 1
If i <= 3 Then Do
/* get next family 1 record */
data = linein(configname)
ucdata = translate(data)
end
end
end
/* copy records to PRINT02.SYS statement */
f1p = 0
do until lines(configname) = 0
data = linein(configname)
ucdata = translate(data)
f1p = pos('=PRINT02.SYS', ucdata)
If f1p <> 0 Then Leave
Call Lineout tmpconfigname, data
end
If f1p <> 0 Then Do
/* process 4 family 2 statements */
i = 1
Do While i <= 4
If Bustype = 'MCA' Then Do
If substr(ucdata, 1, 4) = 'REM ' Then Do
/* record disabled, enable it */
f1p = pos('BASEDEV=', ucdata)
newdata = substr(data, f1p)
data = newdata
end
end
else Do
/* not MCA bus, make sure record is disabled */
If substr(ucdata, 1, 4) <> 'REM ' Then Do
newdata = 'REM ' || data
data = newdata
end
end
Call Lineout tmpconfigname, data
i = i + 1
If i <= 4 Then Do
/* get next family 2 record */
data = linein(configname)
ucdata = translate(data)
end
end
end
end
If driver <> '' Then Do
/* copy records to first DEVINFO (XGA) */
flag = 0
do until lines(configname) = 0
data = linein(configname)
ucdata = translate(data)
If pos('DEVINFO=', ucdata) <> 0 Then Leave
xgacomp = pos('ING 6 STATE', ucdata)
If xgacomp <> 0 Then Do
/* update XGA comment statement */
newdata = substr(data, 1, xgacomp+3)||'7'||substr(data, xgacomp+5)
data = newdata
end
else Do
If version21 = 1 Then Do
/* version 2.1 */
/* check for AUTOSTART statement */
If pos('AUTOSTART=', ucdata) <> 0 Then Do
If pos('CONNECTIONS', ucdata) = 0 Then data = data || ',CONNECTIONS'
end
else Do
/* check for SHELL statement */
pv = pos('SHELL=', ucdata)
If pv <> 0 Then Do
pv = pos('/P', ucdata)
If pv <> 0 Then data = substr(data, 1, pv-1)
end
end
end
If version21 = 1 | basedevflag = 0 Then Do
/* version 2.1 or 2.00.1 */
/* check for EPATH statement */
pv = pos('EPATH=', ucdata)
If pv <> 0 Then Do
/* replace with EPMPATH */
newdata = substr(data, 1, pv-1) || 'EPMPATH' || substr(data, pv+5)
data = newdata
end
end
end
Call Lineout tmpconfigname, data
end
/* process XGA statements */
xgasysflag = 0
position = pos(':\OS2\', ucdata)
bootdrv2 = substr(data, position-1, 1)
vgap = pos(',BGA,', ucdata)
If vgap <> 0 Then Do
newdata = substr(data, 1, vgap) || 'VGA' || substr(data, vgap+4)
data = newdata
end
flag = 0
Do while flag = 0
If driver = 'IBMXGA32' Then Do
If translate(substr(data, 1, 4)) = 'REM ' Then Do
data = substr(data, 5)
ucdata = translate(data)
end
If xgasysflag = 0 Then Do
xgasysp = pos('XGA.SYS', ucdata)
If xgasysp <> 0 Then Do
prevchar = substr(ucdata, xgasysp-1, 1)
if prevchar = '=' | prevchar = '\' Then Do
/* replace XGA.SYS statement with version appropriate with */
/* current value of basedevflag. */
If basedevflag = 0 Then newdata = 'DEVICE='bootdrv2':\OS2\XGA.SYS'
else newdata = 'BASEDEV=XGA.SYS'
data = newdata
xgasysflag = 1
end
end
end
if pos('\OS2\MDOS\VVGA.SYS', ucdata) <> 0 Then Do
If xgasysflag = 0 Then Do
/* insert the XGA.SYS record */
If basedevflag = 0 Then newdata = 'DEVICE='bootdrv2':\OS2\XGA.SYS'
else newdata = 'BASEDEV=XGA.SYS'
Call Lineout tmpconfigname, newdata
xgasysflag = 1
end
end
end
else Do
/* make sure records are REMed out */
if substr(ucdata, 1, 4) <> 'REM ' Then Do
newdata = 'REM '||data
data = newdata
end
xgasysp = pos('XGA.SYS', ucdata)
If xgasysp <> 0 Then Do
prevchar = substr(ucdata, xgasysp-1, 1)
if prevchar = '=' | prevchar = '\' Then Do
/* replace XGA.SYS statement with version appropriate with */
/* current value of basedevflag. */
If basedevflag = 0 Then newdata = 'REM DEVICE='bootdrv2':\OS2\XGA.SYS'
else newdata = 'REM BASEDEV=XGA.SYS'
data = newdata
xgasysflag = 1
end
end
else if pos('\OS2\MDOS\VVGA.SYS', ucdata) <> 0 Then Do
If xgasysflag = 0 Then Do
/* insert the XGA.SYS record */
If basedevflag = 0 Then newdata = 'REM DEVICE='bootdrv2':\OS2\XGA.SYS'
else newdata = 'REM BASEDEV=XGA.SYS'
Call Lineout tmpconfigname, newdata
end
end
end
Call lineout tmpconfigname, data
if pos('SET VIO_XGA=', ucdata) <> 0 Then flag = 1
else Do
data = linein(configname)
ucdata = translate(data)
end
end
/* copy records to next DEVINFO (8514) */
flag = 0
do until lines(configname) = 0
data = linein(configname)
ucdata = translate(data)
If pos('DEVINFO=', ucdata) <> 0 Then Leave
Call Lineout tmpconfigname, data
end
/* process 8514 statements */
flag = 0
Do while flag = 0
If driver = 'IBM8514' | driver = '8514_32' Then Do
If translate(substr(data, 1, 4)) = 'REM ' Then Do
data = substr(data, 5)
end
end
else Do
/* make sure records are REMed out */
if substr(ucdata, 1, 4) <> 'REM ' Then Do
newdata = 'REM '||data
data = newdata
end
end
Call lineout tmpconfigname, data
if pos('\V8514A.SYS', ucdata) <> 0 Then flag = 1
else Do
data = linein(configname)
ucdata = translate(data)
end
end
/* copy records to the VGA DEVINFO */
do until lines(configname) = 0
data = linein(configname)
ucdata = translate(data)
If pos('DEVINFO=SCR,VGA', ucdata) <> 0 Then Leave
Call Lineout tmpconfigname, data
end
newdata = ''
/* process VGA statements */
flag = 0
Do while flag = 0
If driver = 'IBMVGA' | driver = 'IBMVGA32' Then Do
If substr(ucdata, 1, 4) = 'REM ' Then Do
data = substr(data, 5)
end
end
else Do
/* make sure records are REMed out */
if substr(ucdata, 1, 4) <> 'REM ' Then Do
newdata = 'REM '||data
data = newdata
end
end
Call lineout tmpconfigname, data
if pos('\VVGA.SYS', ucdata) <> 0 Then flag = 1
else Do
data = linein(configname)
ucdata = translate(data)
end
end
end
/* copy remaining records */
ipfkeys = 0
do until lines(configname) = 0
data = linein(configname)
ucdata = translate(data)
If pos('IPF_KEYS=', ucdata) <> 0 Then ipfkeys = 1
Call Lineout tmpconfigname, data
end
If ipfkeys = 0 Then Do
If basedevflag = 0 | version21 = 1 Then Do
/* Add 2.00.1 and 2.1 statement */
Call Lineout tmpconfigname,'SET IPF_KEYS=SBCS'
end
end
Call Lineout tmpconfigname /* close file */
Call Lineout configname /* close file */
/* rename original CONFIG.20 */
'@rename 'configname' CONFIG.20B'
if rc = 0 Then Do
/* rename CONFIG.20T to be CONFIG.20 */
'@rename 'tmpconfigname' CONFIG.20'
if rc = 0 Then Do
/* delete orginal CONFIG.20 */
'@DEL 'bakconfigname
end
else Do
/* rename error, try to restore original */
'@rename 'bakconfigname' CONFIG.20'
end
end
end
else return 4 /* file not found */
return 0
/* subroutine to test for existance of a file */
File_Exist:
Arg testfilename
If stream(testfilename, C, 'query exists') <> '' Then rc = 1
else rc = 0
return rc
/* subroutine to delete a file */
Delete_File:
arg delfilename
If stream(delfilename, C, 'query exists') <> '' Then Do
'@DEL 'delfilename
end
return 0
/* Subroutine Update_Config20_Format */
/* This subroutine checks to see if a CONFIG.20 file is still at the */
/* LAN Server 2.0 level, if it is, it is updated to the new format */
Update_Config20_Format:
/* build fully qualified path names for client CONFIG.20 */
If client = 'DEFALT20' Then Do
/* DEFALT20 is special case, it must be called for each lantype */
configname = rpldir'\IBMCOM\'lantype'\CONFIG.20'
tmpconfigname = rpldir'\IBMCOM\'lantype'\CONFIG.20T'
bakconfigname = rpldir'\IBMCOM\'lantype'\CONFIG20.BAK'
end
else Do
configname = rpldir'\MACHINES\'client'\CONFIG.20'
tmpconfigname = rpldir'\MACHINES\'client'\CONFIG.20T'
bakconfigname = rpldir'\MACHINES\'client'\CONFIG20.BAK'
end
/* delete temp file names */
Call Delete_File tmpconfigname
Call Delete_File bakconfigname
/* determine bootdrive id from PROTSHELL statement */
do until lines(configname) = 0
data = translate(linein(configname))
If substr(data, 1, 9) = 'PROTSHELL' Then Do
ddi = pos(':\', data)
newbootdrv = substr(data,ddi - 1, 1)
Leave
end
end
Call Lineout configname /* close file */
if newbootdrv = '' Then return 4
/* check to see if file contains references to XGA.SYS and V8514A.SYS, */
/* if not this is a LS 2.0 format and must be converted to 3.0 format */
xgasysflag = 0
v8514aflag = 0
do until lines(configname) = 0
data = translate(linein(configname))
xgasysp = pos('XGA.SYS', data)
if xgasysp <> 0 then Do
If xgasysp > 1 Then Do
prevchar = substr(data, xgasysp-1, 1)
If prevchar = '=' | prevchar = '\' Then xgasysflag = 1
end
end
else Do
v8514ap = pos('V8514A.SYS', data)
if v8514ap <> 0 then Do
If v8514ap > 1 Then Do
prevchar = substr(data, v8514ap-1, 1)
If prevchar = '\' Then v8514aflag = 1
end
end
end
if xgasysflag & v8514aflag Then Leave
end
Call Lineout configname /* close file */
If (xgasysflag | v8514aflag) = 0 Then Do
/* file has not been converted, convert it */
/* check to see if dd_data needs to be initialized */
If ddbootdrv <> newbootdrv Then Do
dd_data.0 = 0
ddbootdrv = newbootdrv
end
If dd_data.0 = 0 Then Do
/* initialize dd_data */
dd_data.0 = 27
dd_data.1 = xgacomment
dd_data.2 = 'REM DEVINFO=SCR,VGA,'ddbootdrv':\OS2\VIOTBL.DCP'
dd_data.3 = 'REM DEVICE='ddbootdrv':\OS2\XGARING0.SYS'
If basedevflag = 0 Then dd_data.4 = 'REM DEVICE='ddbootdrv':\OS2\XGA.SYS'
else dd_data.4 = 'REM BASEDEV=XGA.SYS'
dd_data.5 = 'REM DEVICE='ddbootdrv':\OS2\MDOS\VVGA.SYS'
dd_data.6 = 'REM DEVICE='ddbootdrv':\OS2\MDOS\VXGA.SYS '
dd_data.7 = 'REM SET VIDEO_DEVICES=VIO_XGA'
dd_data.8 = 'REM SET VIO_XGA=DEVICE(BVHVGA,BVHXGA)'
dd_data.9 = ' '
dd_data.10 = a8514comment
dd_data.11 = 'REM DEVINFO=SCR,BGA,'ddbootdrv':\OS2\VIOTBL.DCP'
dd_data.12 = 'REM SET VIDEO_DEVICES=VIO_8514A'
dd_data.13 = 'REM SET VIO_8514A=DEVICE(BVHVGA,BVH8514A)'
dd_data.14 = 'REM DEVICE='ddbootdrv':\OS2\MDOS\VVGA.SYS'
dd_data.15 = 'REM DEVICE='ddbootdrv':\OS2\MDOS\V8514A.SYS'
dd_data.16 = ' '
dd_data.17 = egacomment
dd_data.18 = 'REM DEVINFO=SCR,EGA,'ddbootdrv':\OS2\VIOTBL.DCP'
dd_data.19 = 'REM SET VIDEO_DEVICES=VIO_EGA'
dd_data.20 = 'REM SET VIO_EGA=DEVICE(BVHEGA)'
dd_data.21 = 'REM DEVICE='ddbootdrv':\OS2\MDOS\VEGA.SYS'
dd_data.22 = ' '
dd_data.23 = vgacomment
dd_data.24 = 'DEVINFO=SCR,VGA,'ddbootdrv':\OS2\VIOTBL.DCP'
dd_data.25 = 'SET VIDEO_DEVICES=VIO_VGA'
dd_data.26 = 'SET VIO_VGA=DEVICE(BVHVGA)'
dd_data.27 = 'DEVICE='ddbootdrv':\OS2\MDOS\VVGA.SYS'
end
If File_Exist(configname) = 1 Then Do
/* copy records until the DEVINFO=SCR,.. statement */
do until lines(configname) = 0
data = translate(linein(configname))
If substr(data, 1, 12) = 'DEVINFO=SCR,' Then Leave
Call Lineout tmpconfigname,data
end
Call Lineout tmpconfigname, ' ' /* blank line */
/* write new device driver statements to file */
do ddi= 1 to dd_data.0
Call lineout tmpconfigname, dd_data.ddi
end
Call Lineout tmpconfigname, ' ' /* blank line */
/* skip display records until POINTDD.SYS statement */
do until lines(configname) = 0
data = translate(linein(configname))
skip = 0
ddp1 = pos('XGARING0.SYS', data)
If ddp1 <> 0 Then skip = 1
else Do
ddp1 = pos('VXGA.SYS', data)
if ddp1 <> 0 Then skip = 1
else Do
ddp1 = pos('VIO_XGA', data)
if ddp1 <> 0 Then skip = 1
else Do
ddp1 = pos('VIO_VGA', data)
if ddp1 <> 0 Then skip = 1
else Do
ddp1 = pos('VVGA.SYS', data)
if ddp1 <> 0 Then skip = 1
else Do
ddp1 = pos('VGA DISPLAYS:', data)
if ddp1 <> 0 Then skip = 1
else Do
ddp1 = pos('XGA DISPLAYS:', data)
if ddp1 <> 0 Then skip = 1
end
end
end
end
end
end
If substr(data, 15, 11) = 'POINTDD.SYS' Then Leave
If skip = 0 Then Do
If data <> '' Then Call Lineout tmpconfigname, data
end
end
Call Lineout tmpconfigname, data /* write pointdd.sys */
/* copy remaining records */
do until lines(configname) = 0
data = linein(configname)
Call Lineout tmpconfigname, data
end
Call Lineout configname
Call Lineout tmpconfigname
/* rename original CONFIG.20 */
'@rename 'configname' CONFIG20.BAK'
if rc = 0 Then Do
/* rename CONFIG.20T to be CONFIG.20 */
'@rename 'tmpconfigname' CONFIG.20'
if rc <> 0 Then Do
/* rename error, try to restore original */
'@rename 'bakconfigname' CONFIG.20'
return 4
end
end
else return 4
end
end
return 0
Initialize_NLS_Messages:
/* call RPLNLMSG to stack all RPLUCC20 NLS messages in queue in FIFO order */
Call RPLSDMSG.CMD 2
/* extract messages from queue and assign to appropriate message string */
Parse Pull xgacomment
Parse Pull a8514comment
Parse Pull egacomment
Parse Pull vgacomment
/* make sure nothing else is left in queue */
do while queued()
Pull dummy
end
return 0