=("Initialize_GetTitle")
CALL Rxfuncadd 'SysLoadFuncs', 'REXXUTIL', 'SysLoadFuncs'
CALL SysLoadFuncs
env = 'OS2ENVIRONMENT'
TRUE = (1 = 1)
FALSE = (0 = 1)
CrLf = '0d0a'x
Redirection = '> NUL 2>&1'
GlobalVars = 'env TRUE FALSE CrLf Redirection'
NepmdIni = ''
RootDir = ''
UserDir = ''
GlobalVars = GlobalVars 'NepmdIni RootDir UserDir'
DO 1
CALL FindInstallDirs
CALL FindNepmdIni
MainTitle = '%MAIN_TITLE_PREFIX%%STRING_VERSION_NEPMD%%MAIN_TITLE_SUFFIX%'
/* Set state for tools packages to SELECT if not found in PATH */
Md5Exe = FindInPath( 'md5sum.exe')
IF Md5Exe = '' THEN
Md5Exe = FindInPath( 'md5suml.exe')
IF Md5Exe = '' THEN
Md5Exe = FindInPath( 'md5.exe')
IF Md5Exe = '' THEN
CALL SetVar 'Md5Select', 'SELECT'
ELSE
CALL SetVar 'Md5Select', ''
LxliteExe = FindInPath( 'lxlite.exe')
UnlockExe = FindInPath( 'unlock.exe')
IF LxliteExe = '' | UnlockExe = '' THEN
CALL SetVar 'LxliteSelect', 'SELECT'
ELSE
CALL SetVar 'LxliteSelect', ''
WptoolsDll = FindLibPath( 'wptools.dll')
IF WptoolsDll = '' THEN
CALL SetVar 'WptoolsSelect', 'SELECT'
ELSE
CALL SetVar 'WptoolsSelect', ''
Etke603Dll = FindLibPath( 'etke603.dll')
IF ETke603Dll = '' THEN
CALL SetVar 'OldBinsSelect', 'SELECT'
ELSE
CALL SetVar 'OldBinsSelect', ''
/* Query settings from NEPMD.INI or defaults.cfg */
next = GetConfigValue( '\NEPMD\User\ProgramObjects\OpenSameWindow')
IF next = '' THEN
next = 1
OptionRVal = ''
IF next = 1 THEN
OptionRVal = '/r'
CALL SetVar 'OptionR', OptionRVal
next = GetConfigValue( '\NEPMD\User\ProgramObjects\OmitOpenBox')
IF next = '' THEN
next = 1
OptionOVal = ''
IF next = 1 THEN
OptionOVal = '/o'
CALL SetVar 'OptionO', OptionOVal
next = GetConfigValue( '\NEPMD\User\ProgramObjects\StartupDir')
IF next = '' THEN
next = '?:\'
StartupDirVal = next
CALL SetVar 'StartupDir', StartupDirVal
/* Assemble program object strings (concatenating strings and vars is not possible with WarpIN) */
OptionROVal = strip( OptionRVal OptionOVal)
Setup = ,
"TITLE=%TITLE_NEPMD_EPM%;PROGTYPE=PM;EXENAME=?:\OS2\EPM.EXE;" ||,
"PARAMETERS="OptionROVal";STARTUPDIR="StartupDirVal";" ||,
"ASSOCTYPE=Plain Text,Command File,DOS Command File,C Code;" ||,
"ASSOCFILTER=*.CMD,*.DAT,*.DOC,*.INI,*.TXT,CONFIG.SYS;" ||,
"HELPLIBRARY=$(1)\netlabs\help\nefld%NLS%.hlp;HELPPANEL=101;" ||,
"OBJECTID=;"
NepmdEpm = ,
'CREATEOBJECT="WPProgram|.||'Setup'"'
CALL SetVar 'NepmdEpm', NepmdEpm
Setup = ,
"TITLE=%TITLE_NEPMD_EPM_NEW_WINDOW%;PROGTYPE=PM;EXENAME=?:\OS2\EPM.EXE;" ||,
"PARAMETERS="OptionOVal";STARTUPDIR="StartupDirVal";" ||,
"HELPLIBRARY=$(1)\netlabs\help\nefld%NLS%.hlp;HELPPANEL=101;" ||,
"OBJECTID=;"
NepmdEpmNewWindow = ,
'CREATEOBJECT="WPProgram|.||'Setup'"'
CALL SetVar 'NepmdEpmNewWindow', NepmdEpmNewWindow
Setup = ,
"TITLE=%TITLE_NEPMD_EPM_SHELL%;PROGTYPE=PM;EXENAME=?:\OS2\EPM.EXE;" ||,
"PARAMETERS="OptionOVal" 'shell';" ||,
"MINIMIZED=YES;HELPLIBRARY=$(1)\netlabs\help\nefld%NLS%.hlp;HELPPANEL=101;" ||,
"OBJECTID=;"
NepmdEpmShell = ,
'CREATEOBJECT="WPProgram|.||'Setup'"'
CALL SetVar 'NepmdEpmShell', NepmdEpmShell
Setup = ,
"TITLE=%TITLE_NEPMD_EPM_TURBO%;PROGTYPE=PM;EXENAME=?:\OS2\EPM.EXE;" ||,
"PARAMETERS=/i "OptionOVal";STARTUPDIR="StartupDirVal";" ||,
"HELPLIBRARY=$(1)\netlabs\help\nefld%NLS%.hlp;HELPPANEL=101;" ||,
"OBJECTID=;"
NepmdEpmTurbo = ,
'CREATEOBJECT="WPProgram|.||'Setup'"'
CALL SetVar 'NepmdEpmTurbo', NepmdEpmTurbo
Setup = ,
"TITLE=%TITLE_NEPMD_EPM_E%;PROGTYPE=PM;EXENAME=?:\OS2\EPM.EXE;" ||,
"PARAMETERS="OptionROVal";STARTUPDIR="StartupDirVal";" ||,
"ASSOCFILTER=*.E;HELPLIBRARY=$(1)\netlabs\help\nefld%NLS%.hlp;HELPPANEL=101;" ||,
"OBJECTID=;"
NepmdEpmE = ,
'CREATEOBJECT="WPProgram|.||'Setup'"'
CALL SetVar 'NepmdEpmE', NepmdEpmE
Setup = ,
"TITLE=%TITLE_NEPMD_EPM_EDIT_MACROFILE%;PROGTYPE=PM;EXENAME=?:\OS2\EPM.EXE;" ||,
"PARAMETERS="OptionROVal" 'editmacrofile %*';STARTUPDIR="StartupDirVal";" ||,
"ASSOCTYPE=EX File;ASSOCFILTER=*.EX;" ||,
"HELPLIBRARY=$(1)\netlabs\help\nefld%NLS%.hlp;HELPPANEL=101;" ||,
"OBJECTID=;"
NepmdEpmEditMacroFile = ,
'CREATEOBJECT="WPProgram|.||'Setup'"'
CALL SetVar 'NepmdEpmEditMacroFile', NepmdEpmEditMacroFile
Setup = ,
"TITLE=%TITLE_NEPMD_EPM_ERX%;PROGTYPE=PM;EXENAME=?:\OS2\EPM.EXE;" ||,
"PARAMETERS="OptionROVal";STARTUPDIR="StartupDirVal";" ||,
"ASSOCFILTER=*.ERX;HELPLIBRARY=$(1)\netlabs\help\nefld%NLS%.hlp;HELPPANEL=101;" ||,
"OBJECTID=;"
NepmdEpmErx = ,
'CREATEOBJECT="WPProgram|.||'Setup'"'
CALL SetVar 'NepmdEpmErx', NepmdEpmErx
Setup = ,
"TITLE=%TITLE_NEPMD_EPM_TEX%;PROGTYPE=PM;EXENAME=?:\OS2\EPM.EXE;" ||,
"PARAMETERS="OptionROVal";STARTUPDIR="StartupDirVal";" ||,
"ASSOCFILTER=*.TEX,*.LTX,*.DTX;HELPLIBRARY=$(1)\netlabs\help\nefld%NLS%.hlp;HELPPANEL=101;" ||,
"OBJECTID=;"
NepmdEpmTex = ,
'CREATEOBJECT="WPProgram|.||'Setup'"'
CALL SetVar 'NepmdEpmTex', NepmdEpmTex
Setup = ,
"TITLE=%TITLE_NEPMD_EPM_BIN%;PROGTYPE=PM;EXENAME=?:\OS2\EPM.EXE;" ||,
"PARAMETERS="OptionOVal" 'binedit %*';STARTUPDIR="StartupDirVal";" ||,
"ASSOCTYPE=Executable;HELPLIBRARY=$(1)\netlabs\help\nefld%NLS%.hlp;HELPPANEL=101;" ||,
"OBJECTID=;"
NepmdEpmBin = ,
'CREATEOBJECT="WPProgram|.||'Setup'"'
CALL SetVar 'NepmdEpmBin', NepmdEpmBin
Setup = ,
"TITLE=%TITLE_NEPMD_EPM_OPEN_LIST%;PROGTYPE=PM;EXENAME=?:\OS2\EPM.EXE;" ||,
"PARAMETERS=@%*;STARTUPDIR="StartupDirVal";" ||,
"ASSOCFILTER=*.EPM;" ||,
"HELPLIBRARY=$(1)\netlabs\help\nefld%NLS%.hlp;HELPPANEL=101;" ||,
"OBJECTID=;"
NepmdEpmOpenList = ,
'CREATEOBJECT="WPProgram|.||'Setup'"'
CALL SetVar 'NepmdEpmOpenList', NepmdEpmOpenList
/* Conditional object creation */
/* Default values are empty. That means: don't create an object. */
ShellShadowInPrompts = ''
ShellShadowInXwpPrompts = ''
IF ObjectExists( '') THEN
ShellShadowInPrompts = ,
'CREATEOBJECT="WPShadow|.||' ||,
'SHADOWID=;OBJECTID=;"'
CALL SetVar 'ShellShadowInPrompts', ShellShadowInPrompts
IF ObjectExists( '') THEN
ShellShadowInXwpPrompts = ,
'CREATEOBJECT="WPShadow|.||' ||,
'SHADOWID=;OBJECTID=;"'
CALL SetVar 'ShellShadowInXwpPrompts', ShellShadowInXwpPrompts
/* Package var names (for WarpIN vars) and ids */
p = 0
Pck. = ''
Pck.0 = 0
Pck._PrefixNames = '%PCK_VENDOR_APP_PREFIX%'
p = p + 1; Pck.p._Var = 'Main' ; Pck.p._Names = '%PCK_MAIN_ID%'
p = p + 1; Pck.p._Var = 'Recompile' ; Pck.p._Names = '%PCK_RECOMPILE_ID%'
p = p + 1; Pck.p._Var = 'Samples' ; Pck.p._Names = '%PCK_SAMPLES_ID%'
p = p + 1; Pck.p._Var = 'Colors' ; Pck.p._Names = '%PCK_COLORS_ID%'
p = p + 1; Pck.p._Var = 'Assocs' ; Pck.p._Names = '%PCK_ASSOCS_ID%'
p = p + 1; Pck.p._Var = 'Icons' ; Pck.p._Names = '%PCK_ICONS_ID%'
p = p + 1; Pck.p._Var = 'Mvuser' ; Pck.p._Names = '%PCK_MVUSER_ID%'
p = p + 1; Pck.p._Var = 'Lxlite' ; Pck.p._Names = '%PCK_LXLITE_ID%'
p = p + 1; Pck.p._Var = 'Wptools' ; Pck.p._Names = '%PCK_WPTOOLS_ID%'
p = p + 1; Pck.p._Var = 'Voicetype' ; Pck.p._Names = '%PCK_VOICETYPE_ID%'
p = p + 1; Pck.p._Var = 'Oldbins' ; Pck.p._Names = '%PCK_OLDBINS_ID%'
Pck.0 = p
/* Parse package prefix names */
n = 0
rest = Pck._PrefixNames
DO WHILE rest <> ''
PARSE VAR rest next '|' rest
IF next = '' THEN
ITERATE
n = n + 1
IF n = 1 THEN
Pck._FirstPrefixName = next
Pck._LastPrefixName = next
END
/* Parse package names */
DO p = 1 TO Pck.0
rest = Pck.p._Names
n = 0
DO WHILE rest <> ''
PARSE VAR rest next '|' rest
IF next = '' THEN
ITERATE
n = n + 1
Pck.p.n._Name = next
END
Pck.p.0 = n
END
/* Read ExportFile */
ExportLine. = ''
ExportLine.0 = 0
l = 0
IF RootDir <> '' THEN
DO
ExportFile = STRIP( RootDir, 't', '\')'\netlabs\install\recrobj.dat'
IF (STREAM( ExportFile, 'c', 'query exists') <> '') THEN
DO
rcx = STREAM( ExportFile, 'c', 'open read')
DO WHILE LINES( ExportFile) > 0
l = l + 1
ExportLine.l = LINEIN( ExportFile)
END
ExportLine.0 = l
rcx = STREAM( ExportFile, 'c', 'close')
END
END
/* Parse exported package id strings */
Exp. = ''
e = 0
Exp.0 = 0
Exp._BslNum = 0
DO l = 1 TO ExportLine.0
/* Get the package id (saved as TITLE) */
PARSE VAR ExportLine.l PckNum rest
IF LEFT( rest, 6) = 'TITLE=' THEN
PARSE VAR rest 'TITLE='next
ELSE
ITERATE
e = e + 1
Exp.0 = e
/* Must handle both old and new export line */
BslNum = 0
Startp = 1
DO FOREVER
Bslp = POS( '\', next, Startp)
IF Bslp = 0 THEN
LEAVE
BslNum = BslNum + 1
Startp = Bslp + 1
END
IF PckNum = 1 THEN
Exp._BslNum = BslNum
IF BslNum > 4 THEN
PARSE VAR next Exp.e._Vendor'\'Exp.e._App'\'Exp.e._Pck'\'Exp.e._Major'\'Exp.e._Minor'\'Exp.e._Revision'\'Exp.e._Fixlevel
ELSE
DO
PARSE VAR Pck._LastPrefixName Exp.e._Vendor'\'Exp.e._App
PARSE VAR next Exp.e._Pck'\'Exp.e._Major'\'Exp.e._Minor'\'Exp.e._Revision'\'Exp.e._Fixlevel
END
END
/* Find package names in exported id strings */
DO p = 1 TO Pck.0
FoundId = ''
FoundVersionStr = '0.0'
DO n = 1 TO Pck.p.0
ThisName = Pck.p.n._Name
DO e = 1 TO Exp.0
IF ThisName = Exp.e._Pck THEN
DO
ThisId = Exp.e._Vendor'\'Exp.e._App'\'Exp.e._Pck
ThisVersionStr = Exp.e._Major'.'RIGHT( Exp.e._Minor, 4, '0')RIGHT( Exp.e._Revision, 4, '0')RIGHT( Exp.e._Minor, 4, '0')
IF ThisVersionStr > FoundVersionStr THEN
DO
FoundId = ThisId
FoundVersionStr = ThisVersionStr
END
END
END
END
IF FoundId = '' THEN
/* Use first names as current package id */
Pck.p._Id = Pck._FirstPrefixName'\'Pck.p.1._Name
ELSE
/* Use found id as current package id */
Pck.p._Id = FoundId
END
/* Set WarpIN vars */
DO p = 1 TO Pck.0
CALL SetVar 'Pck'Pck.p._Var'Id', Pck.p._Id
END
/* Write package prefix and id names to NEPMD.INI for later rename */
/* Query index of old values */
OldPck.0 = QueryNepmdIni( 'Install', 'PckNames.0')
/* Write new values */
CALL WriteNepmdIni 'Install', 'PckPrefixNames', Pck._PrefixNames
DO p = 1 TO Pck.0
CALL WriteNepmdIni 'Install', 'PckNames.'p, Pck.p._Names
END
CALL WriteNepmdIni 'Install', 'PckNames.0', Pck.0
/* Eventually delete remaining old values */
IF OldPck.0 > Pck.0 THEN
DO p = Pck.0 + 1 TO OldPck.0
CALL WriteNepmdIni 'Install', 'PckNames.'p, ''
END
END
RETURN( MainTitle)
/* Returns 1 if a WPS object exists, otherwise 0 */
ObjectExists: PROCEDURE EXPOSE (GlobalVars)
PARSE ARG Object
IF Object = '' THEN
RETURN( 0)
rcx = SysSetObjectData( Object, '')
RETURN( rcx)
/* FileExists */
FileExists: PROCEDURE EXPOSE (GlobalVars)
PARSE ARG Filename
IF FileName = '' THEN
RETURN( 0)
ELSE
RETURN( STREAM( Filename, 'C', 'QUERY EXISTS') <> '')
/* FindInPath */
FindInPath: PROCEDURE EXPOSE (GlobalVars)
PARSE ARG File
IF File = '' THEN
RETURN
/* Add extension, if missing */
lp = LASTPOS( '.', File)
if \(lp > 1) then
File = File'.exe'
FoundFile = SysSearchPath( 'PATH', File)
RETURN( FoundFile)
/* GetBootDrive */
GetBootDrive: PROCEDURE EXPOSE (GlobalVars)
IF \RxFuncQuery( 'SysBootDrive') THEN
BootDrive = SysBootDrive()
ELSE
PARSE UPPER VALUE VALUE( 'PATH',, env) WITH ':\OS2\SYSTEM' -1 BootDrive +2
RETURN( BootDrive)
/* This is used here for CONFIG.SYS and DEFAULTS.CFG parsing */
GetTextIniValue: PROCEDURE EXPOSE (GlobalVars)
PARSE ARG File, ApplicationList, Key
Entry = ''
IF ApplicationList = '' THEN
ApplicationList = 'ALL:'
Application = ''
next = STREAM( File, 'C', 'OPEN READ')
DO WHILE CHARS( File) > 0
line = LINEIN( File)
SELECT
WHEN LEFT( line, 1) = ';' THEN
NOP
WHEN STRIP( line) = '' THEN
NOP
WHEN LEFT( line, 1) = '[' THEN
DO
p2 = POS( ']', line)
IF p2 > 0 THEN
DO
nextApplication = SUBSTR( line, 2, p2 - 2)
IF WORDPOS( nextApplication, ApplicationList) > 0 | ApplicationList = 'ALL:' THEN
Application = nextApplication
ELSE
Application = '' /* nextApplication is other, reset Application */
END
END
OTHERWISE
PARSE VALUE line WITH nextKey '=' nextEntry
/* it must be a 'Key = Entry' line */
nextKey = STRIP( nextKey)
nextEntry = STRIP( nextEntry)
IF ApplicationList <> 'ALL:' & Application = '' THEN
ITERATE
IF nextKey = '' THEN
ITERATE
IF nextKey = Key THEN
DO
Entry = nextEntry
LEAVE /* key found */
END
END
END
rc = STREAM( File, 'C', 'CLOSE')
RETURN( Entry)
/* FindLibPath */
FindLibPath: PROCEDURE EXPOSE (GlobalVars)
PARSE ARG DllName
DllFullName = ''
BootDrive = GetBootDrive()
LibpathDirs = GetTextIniValue( BootDrive'\config.sys', '', 'LIBPATH')
fFunctionFound = 0
IF \RxFuncQuery( 'SYSQUERYEXTLIBPATH') THEN
fFunctionFound = 1
IF fFunctionFound = 1 THEN
BeginLibpathDirs = SysQueryExtLIBPATH( 'B')
ELSE
DO
'CALL RXQUEUE /CLEAR'
'SET BEGINLIBPATH|RXQUEUE /FIFO'
PARSE PULL BeginLibpathDirs
PARSE VALUE BeginLibpathDirs WITH . '=' BeginLibpathDirs
END
IF BeginLibpathDirs = '(null)' THEN
BeginLibpathDirs = ''
IF fFunctionFound = 1 THEN
EndLibpathDirs = SysQueryExtLIBPATH( 'E')
ELSE
DO
'CALL RXQUEUE /CLEAR'
'SET ENDLIBPATH|RXQUEUE /FIFO'
PARSE PULL EndLibpathDirs
PARSE VALUE EndLibpathDirs WITH . '=' EndLibpathDirs
END
IF EndLibpathDirs = '(null)' THEN
EndLibpathDirs = ''
IF \(fFunctionFound = 1) THEN
'CALL RXQUEUE /CLEAR'
IF BeginLibpathDirs > '' THEN
LibpathDirs = STRIP( BeginLibpathDirs, 'T', ';')';'LibpathDirs
IF EndLibpathDirs > '' THEN
LibpathDirs = STRIP( LibpathDirs, 'T', ';')';'EndLibpathDirs
rest = LibpathDirs
DO WHILE rest <> ''
PARSE VALUE rest WITH Dir';'rest
next = Dir'\'DllName
IF FileExists( next) THEN
DO
DllFullName = next
LEAVE
END
END
RETURN( DllFullName)
GetConfigValue: PROCEDURE EXPOSE (GlobalVars)
PARSE ARG KeyPath
KeyVal = ''
/* Search in NEPMD.INI -> RegKeys */
IF NepmdIni <> '' THEN
DO 1
next = SysIni( NepmdIni, 'RegKeys', KeyPath)
IF next = 'ERROR:' THEN
LEAVE
KeyVal = strip( next, 't', '00'x )
END
/* Search in defaults.cfg */
IF KeyVal = '' & RootDir <> '' THEN
DO 1
DefaultsCfg = STRIP( RootDir, 't', '\')'\netlabs\bin\defaults.cfg'
KeyVal = GetTextIniValue( DefaultsCfg, '', KeyPath)
END
RETURN( KeyVal)
FindInstallDirs: PROCEDURE EXPOSE (GlobalVars)
/* UserDir and RootDir are global vars */
DO 1
next = SysIni( 'USER', 'NEPMD', 'UserDir')
IF next = 'ERROR:' THEN
LEAVE
UserDir = strip( next, 't', '00'x )
END
DO 1
next = SysIni( 'USER', 'NEPMD', 'RootDir')
IF next = 'ERROR:' THEN
LEAVE
RootDir = STRIP( next, 't', '00'x )
END
RETURN
FindNepmdIni: PROCEDURE EXPOSE (GlobalVars)
/* UserDir, RootDir and NepmdIni are global vars */
IF UserDir <> '' THEN
NepmdIni = STRIP( UserDir, 't', '\')'\bin\NEPMD.INI'
ELSE
DO
IF RootDir <> '' THEN
NepmdIni = STRIP( RootDir, 't', '\')'\myepm\bin\NEPMD.INI'
END
RETURN
QueryNepmdIni: PROCEDURE EXPOSE (GlobalVars)
DO 1
IniVal = ''
PARSE ARG IniApp, IniKey
IF NepmdIni = '' THEN
LEAVE
next = SysIni( NepmdIni, IniApp, IniKey)
IF next = 'ERROR:' THEN
LEAVE
ELSE
IniVal = STRIP( next, 'T', '00'x)
END
RETURN IniVal
WriteNepmdIni: PROCEDURE EXPOSE (GlobalVars)
DO 1
PARSE ARG IniApp, IniKey, IniVal
IF NepmdIni = '' THEN
LEAVE
IF IniVal = '' THEN
next = SysIni( NepmdIni, IniApp, IniKey, 'DELETE:')
ELSE
next = SysIni( NepmdIni, IniApp, IniKey, IniVal'00'x)
END
RETURN
/* Makes variable available to procedures, */
/* WarpIN macro space and external programs */
SetVar: PROCEDURE EXPOSE (GlobalVars)
PARSE ARG Varname, VarValue
rc = WirexxPutEnv( Varname, VarValue)
/*
EnvVarName = TRANSLATE( 'WI_VAR_'VarName)
rcx = VALUE( EnvVarName, VarValue, 'OS2ENVIRONMENT')
*/
RETURN
PARSE ARG Varname
VarValue = WirexxGetEnv( VarName)
IF (0) THEN
DO
SAY '--------------------'
SAY VarName
SAY VarValue
END
RETURN( WirexxGetEnv( VarName))
%BUTTON_NEXT%
%BUTTON_NEXT%
%BUTTON_NEXT%
%BUTTON_NEXT%
%BUTTON_INSTALL%