home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2000 October
/
Chip_2000-10_cd1.bin
/
zkuste
/
SVET_OS2
/
SDD702
/
SDDSE702.EXE
/
setup.cmd
< prev
next >
Wrap
OS/2 REXX Batch file
|
2000-05-26
|
16KB
|
458 lines
/*******************************************************/
/* Before running, SET LANG= to the correct language. */
/* It may already be correctly set in your CONFIG.SYS. */
/* For examples: */
/* SET LANG=ar_AA for Arabic */
/* SET LANG=pt_BR for Brazil */
/* SET LANG=zh_CN for Simplified Chinese */
/* SET LANG=de_DE for Germany */
/* SET LANG=da_DK for Denmark */
/* SET LANG=es_ES for Spain */
/* SET LANG=el_GR for Greece */
/* SET LANG=fi_FI for Finland */
/* SET LANG=fr_FR for France */
/* SET LANG=iw_IL for Israel */
/* SET LANG=it_IT for Italy */
/* SET LANG=ja_JP for Japan */
/* SET LANG=ko_KR for Korea */
/* SET LANG=nl_NL for Netherlands */
/* SET LANG=no_NO for Norway */
/* SET LANG=sv_SE for Sweden */
/* SET LANG=zh_TW for Taiwan */
/* SET LANG=en_US for English (default) */
/*******************************************************/
/*****************************************
* Intialize Rexxutil Functions
******************************************/
call RxFuncAdd 'SysLoadFuncs' , 'REXXUTIL', 'SysLoadFuncs'
signal on syntax name MsgExit
call SysLoadFuncs
numeric digits 12
/******************************************
* Define message ids from *mid*.h
*******************************************/
MSG_NO_ERROR = 0
MSG_SYSINIT_BOOT_NOT_FD = 1475
MSG_INCORRECT_DOSVER = 1210
MSG_NO_META_MATCH = 257
MSG_PRINT_FILE_NOT_FOUND = 1533
MSG_COMP_INVALID_PATH = 1171
MSG_BOOT_MUST_RESTART = 1716
MSG_INSTALL_UNSUCCESSFUL = 1975
MSG_INSTALL_HY_HDR = 1976
MSG_PROC_NOT_FOUND = 127
MSG_REP_SOUR_PATH_REQ = 1137
MSG_SYS_INV_DRIVE = 1461
MSG_CHCP_INVALID_PARAMETER = 1761
MSG_UNP_INSERT_PI = 1218
MSG_ERR_PROC_ARG = 1249
MSG_MBS_INVALID_COMMAND = 872
MSG_USAGE = 734
MSG_BAD_UNIT = 20
MSG_CANNOT_MAKE = 82
REXX_FUNCTION_NOT_FOUND = 43
SPTReboot = x2d('FE00',4)
SPTRebootErr = x2d('FE08',4)
SPTWithErr = x2d('0008',4)
/*****************************************
* Initialized globals
******************************************/
env = 'OS2ENVIRONMENT'
lang = value('LANG',,env)
nlv = SubStr(lang,4)
if nlv = ''
then nlv = 'en'
parse source one two me
if arg() == 0
then cmdline = ''
else cmdline = arg(1)
srcPath = filespec('Drive', me) || filespec('Path', me)
files = srcPath || nlv || '\*.*'
if stream(files, 'c', 'query exists') = ''
then nlv = 'en'
if nlv == 'cn' or nlv == 'jp' or nlv == 'kr' or nlv = 'tw'
then cs = 'dbcs'
else cs = 'sbcs'
if nlv == 'kr'
then dos = 'kr'
else dos = cs
cidInst = ''
/*****************************************
* GRADD only globals
******************************************/
GRADDKEYS = 'GEN SDD VGA'
GRADDDSCS = 'gengrdbb sddgrdbb vgagrdbb'
graddPackDSC = 'grdpack.dsc'
/*****************************************
* Set up Source and Target Paths
******************************************/
srcName = filespec('Name', me)
os2bootPath = SysSearchPath('PATH', 'os2boot')
if os2bootpath \= ''
then bootDrive = filespec('drive', os2bootPath)
else call MsgExit SysGetMessage(MSG_SYSINIT_BOOT_NOT_FD)
installDir = bootDrive || '\os2\install'
restoreDir = installDir || '\vga'
/******************************************
* Verify options if any
*******************************************/
if arg() == 0
then call Usage
else do
parse value(cmdline) with tmp1 '/' option tmp2
if option \= ''
then do
if translate(option) == 'U'
then do
cidInst = ' /u'
cmdline = tmp1 || tmp2
end
else do
say MyGetMsg(SysGetMessage(MSG_MBS_INVALID_COMMAND,, '"' || '/' || option || '"'))
call Usage
end
end
parse value(cmdline) with gradd srcTmp bootTmp junk
if junk \= '' then call Usage
if wordpos(translate(gradd), GRADDKEYS) == 0
then call Usage
else dscFile = word(GRADDDSCS, wordpos(translate(gradd), GRADDKEYS)) || '.dsc'
if srcTmp \= ''
then do
if filespec('Drive',srcTmp) == strip(srcTmp, 'T', '\')
then srcChk = srcTmp
else srcChk = strip(srcTmp, 'T', '\') || '\'
file1 = srcChk || srcName
call SysFileTree file1, 'file', 'F'
if file.0 == 0
then do
say FileNotFound( file1 )
say MyGetMsg(SysGetMessage(MSG_CHCP_INVALID_PARAMETER,,srcTmp))
call Usage
end
else srcPath = srcChk
end
if bootTmp \= ''
then do
bootTmp = strip(bootTmp, 'T', '\')
file1 = bootTmp || '\OS2BOOT'
call SysFileTree file1, 'file', 'F'
if file.0 == 0
then do
msg = MyGetMsg(SysGetMessage(MSG_SYSINIT_BOOT_NOT_FD))
parse value(msg) with first 'OS2BOOT' last
msg = first || '"' || file1 || '"' || last
say msg
say MyGetMsg(SysGetMessage(MSG_SYS_INV_DRIVE))
call Usage
end
else bootDrive = bootTmp
end
end
if filespec('Drive', srcPath) \= strip(srcPath, 'T', '\')
then srcDir = strip(srcPath, 'T', '\')
else srcDir = srcPath
/*****************************************
* Start logging
******************************************/
call SysFileTree installDir, 'file', 'D'
if file.0 == 0 then call MsgExit MyGetMsg(SysGetMessage(MSG_COMP_INVALID_PATH,,'"' || installDir || '"'))
logFile = installDir || '\display.log'
call SysFileTree logFile, 'file', 'F', ,'-----'
startmsg = MyGetMsg(SysGetMessage(MSG_UNP_INSERT_PI,, SubStr(dscFile,1, pos('.', dscFile)-1 ) || ' ' ))
cmd = 'parse value(startmsg) with . '''D2c(10)''' installmsg '''D2c(13)''' junk'
interpret cmd
installmsg = strip(installmsg)
call LogIt '======================================================================'
say installmsg
call LogIt installmsg ' - ' Date('L') Time()
file1 = srcPath || 'build.lvl'
call SysFileTree file1,'file','F'
if file.0 == 0
then call LogFileNotFound file1
else '@type ' || file1 || ' >> ' || logFile
/*******************************************************
* Gradd is not supported on OS/2 Versions less than 3.0
* and it also requires a certain fixpak level for both
* version 3.x and 4.0. Let us verify we have the right
* levels now.
********************************************************/
parse value(SysOS2Ver()) with major '.' os2Ver
rc = MSG_INCORRECT_DOSVER
select
when major < 2 then call MsgExit MyGetMsg(SysGetMessage(MSG_INCORRECT_DOSVER))
when datatype(os2Ver) \= 'NUM' then call MsgExit MyGetMsg(SysGetMessage(MSG_INCORRECT_DOSVER))
when os2Ver < 30 then call MsgExit MyGetMsg(SysGetMessage(MSG_INCORRECT_DOSVER))
when os2Ver < 40 /* Warp 3.0 needs fixpak 35 or later */
then do
needFPLevel = 8.259
end
when os2Ver < 45 /* Warp 4.0 needs fixpak 5 or later */
then do
needFPLevel = 9.029
end
otherwise /* Releases after Warp 4.0 should be GRADD ready */
do
needFPLevel = 0
end
end
parse value(GetGraddLevel(bootDrive || '\os2\dll\gre2vman.dll')) with graddLevel graddStamp
if (GetFPLevel() >= needFPLevel)
then do
newStamp = 1
end
else call MsgExit MyGetMsg(SysGetMessage(MSG_INCORRECT_DOSVER))
rc = MSG_NO_ERROR
/*******************************************************
* Setup path and Copy required files to \os2\install
********************************************************/
oldPath = value('PATH',,env)
newPath = value('PATH', srcPath || ';' || oldPath, env)
file1 = srcPath || 'unpack2.exe'
call SysFileTree file1,'file','F'
if file.0 == 0
then call LogFileNotFound file1
else call LogAndDoCmd 'copy ' || file1 || ' ' || installDir
rc = MSG_NO_ERROR
unpackFiles = 'dspinstl.ex_'
unpackFiles = unpackFiles || ' ' || 'inscfg32.dl_'
unpackFiles = unpackFiles || ' ' || nlv || '\unpack'
unpackFiles = unpackFiles || ' ' || nlv || '\vgamri'
do i = 1 to words(unpackFiles)
call LogAndDoCmd 'unpack2 ' || srcPath || word(unpackFiles, i) || ' ' || bootDrive
if rc \= MSG_NO_ERROR then call MsgExit ""
end
call LogAndDoCmd 'unpack2 ' || srcPath || 'dspinstl.ex_ ' || restoreDir
if rc \= MSG_NO_ERROR then call MsgExit ""
call LogAndDoCmd 'copy ' || bootDrive || '\os2\dll\dspimri.dll ' || restoreDir
if rc \= MSG_NO_ERROR then call MsgExit ""
/********************************************************
* Obtain .DSC file
*********************************************************/
call SysFileTree installDir || '\' || dscFile, 'file', 'F'
if file.0 == 0 then call MsgExit MyGetMsg(SysGetMessage(MSG_PRINT_FILE_NOT_FOUND,, '"' || installDir || '\' || dscFile || '"')),
|| MyGetMsg(SysGetMessage(MSG_NO_META_MATCH))
else parse value(file.1) with . . . . dscFile
dscFile = installDir || '\' || FileSpec('Name', dscFile)
if SysFileTree(bootDrive || '\os2\video.cfg','file','F',,'+****') == 0
then call SysFileDelete bootDrive || '\os2\video.cfg'
if translate(gradd) == 'VGA' then call SysIni ,'PM_DISPLAYDRIVERS','DEFAULTSYSTEMRESOLUTION','DELETE:'
graddPackDSC = installDir || '\' || graddPackDSC
parse value(GetGraddLevel(srcPath || 'gre2vman.dll')) with . tmpStamp
if datatype(tmpStamp) == 'NUM' then newStamp = tmpStamp
dspInstall = installDir || '\dspinstl.exe'
if ((symbol('newStamp') == 'VAR') & (newStamp \= ''))
then
if ((graddStamp == '') | ( newStamp > graddStamp))
then do
'@' || dspInstall '/pk:other /s:' || srcDir,
|| ' /t:' || bootDrive,
|| ' /pd:' || strip(graddPackDSC),
|| ' /l:' || logFile || cidInst
end
'@' || dspInstall '/pk:svga /s:' || srcDir,
|| ' /t:' || bootDrive,
|| ' /pd:' || strip(dscFile),
|| ' /l:' || logFile || cidInst
if ( (rc == MSG_NO_ERROR) | ((cidInst \= '') & ( rc == SPTReboot)) )
then do
call LogAndDoCmd 'copy ' || srcPath || '\options.dat' bootDrive || '\os2\drivers\nucleus\config'
call LogAndDoCmd 'call ' || srcPath || nlv || '\makewps'
call MsgExit MyGetMsg(SysGetMessage(MSG_BOOT_MUST_RESTART))
end
else call MsgExit MyGetMsg(SysGetMessage(MSG_ERR_PROC_ARG,,dscFile))
/******************************************************
* Procedure for determining level of Gradd subsystem
*******************************************************/
GetGraddLevel: Procedure
parse arg graddModule
gtvVer = ''
if stream(graddModule,'c', 'query exists') \= ''
then do
newQueue = RxQueue('Create')
oldQueue = RxQueue('Set', newQueue)
'@bldlevel 'graddModule '| rxqueue' newQueue
do while queued() \=0
parse upper pull tag data
if tag == 'SIGNATURE:'
then
do while queued() \= 0
parse upper pull tag data
if tag == 'DESCRIPTION:'
then parse value(data) with 'V' gtvVer gtvStamp .
end
end
call RxQueue 'Delete', newQueue
call RxQueue 'Set', oldQueue
end
if datatype(gtvVer) \= 'NUM' then gtvVer = 0
if datatype(gtvStamp) \= 'NUM' then gtvStamp = 0
return gtvVer gtvStamp
/******************************************************
* Procedure for determining fix pack level of system
*******************************************************/
GetFPLevel: Procedure
newQueue = RxQueue('Create')
oldQueue = RxQueue('Set', newQueue)
'@ver /r | rxqueue' newQueue
do while queued() \=0
parse upper pull tag data
if tag == 'REVISION'
then leave
end
call RxQueue 'Delete', newQueue
call RxQueue 'Set', oldQueue
return data
/******************************************************
* Error message processing and exit
*******************************************************/
MsgExit:
parse arg errmsg
result = rc
if rc == REXX_FUNCTION_NOT_FOUND
then do
say sigl' +++ 'SourceLine(sigl)
say 'REX0043: 'ErrorText(REXX_FUNCTION_NOT_FOUND)
end
else do
if errmsg == '' then errmsg = 'REXX' || right(rc,4,'0') || ': 'ErrorText(rc)
say errmsg
if ( (rc \= MSG_NO_ERROR) & ((cidInst \= '') & ( rc \= SPTReboot)) )
then do
exitmsg = MyGetMsg(SysGetMessage(MSG_INSTALL_UNSUCCESSFUL))
say exitmsg
end
if symbol('logfile') == 'VAR'
then do
call LogIt errmsg
if symbol('exitmsg') == 'VAR'
then do
call LogIt exitmsg
say MyGetMsg(SysGetMessage(MSG_INSTALL_HY_HDR)) || ' ' || logfile
end
end
end
if rc == MSG_INCORRECT_DOSVER
then '@pause && e ' || srcPath || nlv || '\readme.txt'
if symbol('oldPath') == 'VAR' then call value 'PATH' , oldPath, env
exit result
/******************************************************
* Safely write to logfile
*******************************************************/
LogAndDoCmd:
call LogIt arg(1)
'@' || arg(1) || ' >> ' || logfile || ' 2>&1'
return
/******************************************************
* Log File Not Found
*******************************************************/
LogFileNotFound:
call LogIt FileNotFound( arg(1) )
return
/******************************************************
* File Not Found
*******************************************************/
FileNotFound:
return MyGetMsg(SysGetMessage(MSG_PRINT_FILE_NOT_FOUND,, '"' || arg(1) || '"'))
/******************************************************
* Safely write to logfile
*******************************************************/
LogIt: Procedure expose logfile
parse arg message
call lineout logfile, message
call stream logfile, 'c', 'close'
return
/******************************************************
* Remove SYSXXXX: from messages
*******************************************************/
MyGetMsg: Procedure
parse arg message
if pos('SYS', word(message, 1)) == 1
then parse arg . message
return message
/*****************************************************
* Print usage and exit
******************************************************/
Usage:
msg = MyGetMsg(SysGetMessage(MSG_USAGE,,srcName))
cmd = 'parse value(msg) with msg '''srcName''' .'
interpret cmd
say msg
say 'SET LANG = ll_cc'
say me || ' xxx [' || srcPath || '] [' || bootDrive || '] [/u]'
say ''
say ' ll_cc = ar_AA | pt_BR | zh_CN | de_DE | da_DK |'
say ' es_ES | el_GR | fi_FI | fr_FR | iw_IL |'
say ' it_IT | jp_JP | ko_KR | nl_NL | no_NO |'
say ' sv_SE | zh_TW | en_US | ...'
say ''
say ' xxx = GEN | SDD | VGA'
say ''
say ' MORE < ' srcPath || nlv || '\README.TXT'
say ''
exit 1