;************************************************************************ ;************************************************************************ ; ; SNACLASP.INF ; ; SNACLASP Demo Link Service INF file ; ; History: ; davida Dec 2, 94 Initial Design ; ;************************************************************************ ;************************************************************************ ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; ; INITIALIZATION SECTION ; ---------------------- ; This section is responsible for defining the product variables. It is the ; highest level of definition. Installation programs will use this section ; to figure out available options etc. ; ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ;======================================================================== ; ; SOURCE MEDIA DESCRIPTIONS ; ------------------------- ; The IHV should list all the diskette labels here. The source media ; description is used during copy to prompt the user for a diskette ; if the source is diskettes. The TAGFILE field is used to confirm that ; the proper disk is being used. ; ; FORMAT: ; The format includes an enumeration constant and a name for the disk, as well ; as a number of possible flags (including the TAGFILE flag.) ; 1 = "Diskette 1 Label", TAGFILE = "Disk1.Tag" ; 2 = "Diskette 2 Label", TAGFILE = "Disk2.Tag" ; ... ; ; REFERENCES: ; TODO - Add a reference to somewhere ; ;======================================================================== [Source Media Descriptions] 1 = "SNA Link Service diskette" ;======================================================================== ; ; OPTION TYPE ; ----------- ; This identifies the Option type we are dealing with. The different ; possible types are: ; ; COMPUTER, DISPLAY, MOUSE, KEYBOARD, LAYOUT, SCSI, PRINTER, ... ; ; Types specific to networking: ; NetAdapter, A netcard/adapter combination or just a netcard ; NetDriver, A netcard driver ; NetTransport, A complete NDIS-compliant TDI transport stack ; NetService, An NT networking service ; NetWork, A complete network ensemble ; NetProvider, A complete network which supports NT MPR protocol ; ; TODO - do we want to mention all those types or just the ones relevant to us? ; ; REFERENCES: ; TODO - Add a reference to somewhere ; ;======================================================================== [Identification] OptionType = NetService ;======================================================================== ; ; LANGUAGES SUPPORTED ; ------------------- ; The languages supported by the IHV INF, For every language supported ; we need to have a separate text section for every displayable text ; section. ; ; REFERENCES: ; TODO - Add a reference to somewhere ; ;======================================================================== [LanguagesSupported] ENG ;======================================================================== ; ; OPTION LIST ; ----------- ; This section lists the IHV Option key names. These keys are locale ; independent and used to represent the option in a locale independent ; manner. ; ; REFERENCES: ; TODO - Add a reference to somewhere ; ;======================================================================== [Options] SNACLASPLS ;======================================================================== ; ; OPTION TEXT SECTION ; ------------------- ; These are text strings used to identify the option to the user. There ; are separate sections for each language supported. ; ; FORMAT: ; The format of the section name is "OptionsText" concatenated with the ; Language represented by the section. ; [OptionsTextLNG1] ; ... ; [OptionsTextLNG2] ; ... ; ; REFERENCES: ; TODO - Add a reference to somewhere ; ;======================================================================== [OptionsTextENG] SNACLASPLS = "DEMO SDLC Link Service" ;======================================================================== ; ; SNA OPTION LIST ; --------------- ; This is the list of options available to the SNA Server user. This is ; the list presented to the user from the SNA Server setup as the ; available options. Like the normal options list, it is locale independent. ; ; REFERENCES: ; TODO - Add a reference to somewhere ; ;======================================================================== [SNAOptions] SNACLASPLS ;======================================================================== ; ; SNA OPTION ADDITIONALS ; ---------------------- ; This section specifies the additional installations that should be performed ; for each of the main options. The SNA Server setup will invoke this INF ; file with each of these additional options in order followed by the main ; option. ; ; FORMAT: ; The format for the section name is "SNAOptionAdds" concatenated with the ; option name. ; [SNAOptionAddsSNAOPT1] ; ... ; [SNAOptionAddsSNAOPT2] ; ... ; ; REFERENCES: ; TODO - Add a reference to somewhere ; ;======================================================================== [SNAOptionAddsSNACLASPLS] ;======================================================================== ; ; INSTALLATION STEPS SECTION ; -------------------------- ; In this section, the IHV gets to define which steps will be taken in the ; installation procedure. There are three variables and they all must be ; defined. ; ; FORMAT: ; The format is "InstallSteps" concatenated with the option name ; [InstallStepsOPT1] ; ... ; ;======================================================================== [InstallStepsSNACLASPLS] AddFilesToCopyList = YES CopyFilesInCopyList = YES ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; ; DIALOG CONSTANTS SECTION ; ------------------------ ; This section is responsible for defining dialog constants. It is ; meant to be used to simplify programming this INF file as well as reading ; it. ; ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: [DialogConstants] Radio1 = "1" Radio2 = "2" Radio3 = "3" ; Radio4 = "4" ;++++++++++++++++++++++++++++++++++++ ; ; ProgressCopyVars: ; These variables specify the look of the gauge that comes up ; when copying files. ; ;++++++++++++++++++++++++++++++++++++ [ProgressCopyVars] ProCaption = "File copy in progress" ProCancel = "&Cancel" ProCancelMsg = $(ProductTitle)$(!LF)"is not fully installed."$(!LF)+ "Are you sure you want to cancel before all"$(!LF)+ "the files are copied?" ProCancelCap = $(SetupTitle)" Warning" ProText1 = "Copying " ProText2 = " to" [HelpContextIDs] IDD_SNACLASPLSCONFIG = 102 ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; ; FILE CONSTANTS SECTION ; ---------------------- ; This section is responsible for defining some general product information ; that will be used mostly for the registry ; ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ;++++++++++++++++++++++++++++++++++++ ; ; File Names Subsection: ; This subsection contains useful filenames for use as macros. ; ;++++++++++++++++++++++++++++++++++++ [ScriptFileConstants] TPODBC = "DDM6DB" EXEODBC = $(!SNARootDir)"\system\as400tp.exe" SCRODBC = $(!SNARootDir)"\system\demoodbc.scr" DSCODBC = "SNA ODBC Demo" TP5250 = "PO005" EXE5250 = $(!SNARootDir)"\system\as400tp.exe" SCR5250 = $(!SNARootDir)"\system\demo5250.scr" DSC5250 = "SNA 5250 Demo" EVNDEMO = "SNA AS400 Demo TP" EVTDEMO = $(!SNARootDir)"\system\as400evt.dll" RegSnaBase = "SnaBase" RegSnaBaseOtherDeps = {"OtherDependencies", 0, $(!REG_VT_MULTI_SZ), { "SnaBase" } } RegSnaBaseDependOn = {"DependOnService", 0, $(!REG_VT_MULTI_SZ), {} } Params5250 = + { + { "AlreadyVerified", $(NoTitle), $(!REG_VT_SZ), "NO" } + { "ConversationSecurity", $(NoTitle), $(!REG_VT_SZ), "NO" } + { "SNAServiceType", $(NoTitle), $(!REG_VT_DWORD), 5 } + { "Timeout", $(NoTitle), $(!REG_VT_DWORD), -1 } + { "ScriptFile", $(NoTitle), $(!REG_VT_SZ), $(SCR5250) } + { "InstallCount", $(NoTitle), $(!REG_VT_DWORD), 1 } + } ParamsODBC = + { + { "AlreadyVerified", $(NoTitle), $(!REG_VT_SZ), "NO" } + { "ConversationSecurity", $(NoTitle), $(!REG_VT_SZ), "NO" } + { "SNAServiceType", $(NoTitle), $(!REG_VT_DWORD), 5 } + { "Timeout", $(NoTitle), $(!REG_VT_DWORD), -1 } + { "ScriptFile", $(NoTitle), $(!REG_VT_SZ), $(SCRODBC) } + { "InstallCount", $(NoTitle), $(!REG_VT_DWORD), 1 } + } [FileConstants] !UtilityInf = $(!SNARootDir)"\SETUPUTL.INF" !SubroutineInf = $(!STF_WINDOWSSYSPATH)"\SUBROUTN.INF" DialogLibrary = $(!SNARootDir)"\SETUP.SRL" ThisFile = "SNACLASP" ThisInf = $(ThisFile)".INF" ThisSrl = $(ThisFile)".SRL" ThisHlp = $(ThisFile)".HLP" HlpMin = "100" HlpMax = "299" $ShellCode = 0 ;++++++++++++++++++++++++++++++++++++ ; ; Product Information Subsection: ; This subsection contains lots of product information that will be used ; mostly in the registry. ; ; For the SNAServiceType value, please refer to the "SNAServiceTypes" section ; in the SETUPUTL.INF file. Also, only Link Services have this value, all ; others should have a NULL string ("") for this value. ; ;++++++++++++++++++++++++++++++++++++ [FileConstantsSNACLASPLS] ; ; Product Info ; ProductVersion = "2.1" ProductName = "SNACLASPLS" ProductFullName = $(ProductName)"_"$(ProductVersion)"_"$(Instance) ProductRegBase = $(!NTN_SoftwareBase)"\Microsoft" ProductType = "Link" ProductImagePath = "SNALINK.EXE" ProductDepends = {} ProductParams = {} ProductExtraParams = {} ProductExclusive = $(!False) ProductDLL = "SNACLASP.DLL" ProductServicePrefix = "SnaDemo" ProductServiceQuery = $(!True) ; ; Registry Key Information ; SNAServiceType = "CESLINK" ; ; NetRules Stuff ; NetRulesClass = "snademolink basic yes" NetRulesTitle = "SNACLASP DEMO SDLC Link Service" NetRulesUse = "service yes yes" NetRulesBindable = "" NetRulesType = "snaclasp_"$(Instance)" snademolink" FullInfName = $(!SNARootDir)"\system\hwsetup\"$(ThisInf) SoftwareType = "service" ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; ; GENERAL CONSTANTS SECTION ; ------------------------- ; This section is responsible for defining some general constants that ; are used in this INF script. These constants include flow control ; variables, exit codes, and registry reference numbers. ; ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: [GeneralConstants] ;++++++++++++++++++++++++++++++++++++ ; ; Flow Control Variables: ; From will generally represents the label we just came from while To ; represents the label we are headed to. ; ;++++++++++++++++++++++++++++++++++++ from = "" to = "" ;++++++++++++++++++++++++++++++++++++ ; ; Booleans: ; ;++++++++++++++++++++++++++++++++++++ !True = 1 !False = 0 ;++++++++++++++++++++++++++++++++++++ ; ; Other values ; ;++++++++++++++++++++++++++++++++++++ NOTIFY = 2 ;++++++++++++++++++++++++++++++++++++ ; ; Registry Initialization Parameters: ; ;++++++++++++++++++++++++++++++++++++ NoTitle = 0 KeyNull = "" KeyProduct = "" KeyParameters = "" ;++++++++++++++++++++++++++++++++++++ ; ; Other Initialization Parameters: ; ;++++++++++++++++++++++++++++++++++++ ExitState = "Active" OldVersionExisted = $(!False) ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; ; LANGUAGE-DEPENDENT DIALOG CONSTANTS SECTION ; ------------------------------------------- ; This section is responsible for defining dialog constants that are ; language dependent. ; ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ;++++++++++++++++++++++++++++++++++++ ; ; Common Button Names: ; ;++++++++++++++++++++++++++++++++++++ [DialogConstantsENG] Help = "&Help" Exit = "C&ancel" Continue = "&Continue" Cancel = "C&ancel" OK = "&OK" HelpContext = "" ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; ; LANGUAGE-DEPENDENT FILE CONSTANTS SECTION ; ----------------------------------------- ; This section is responsible for defining language dependent information. ; ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: [FileConstantsENG] ; ; The following name should include the name of the IHV as per the example ; SetupTitle = "DEMO SDLC Link Service Setup" [FileConstantsSNACLASPLS_ENG] ProductTitle = "DEMO SDLC Link Service" ProductDesc = "DEMO SDLC Link Service for "$(!SNA_ProductName) ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; ; DATE SECTION ; ------------ ; This section is responsible for establishing the value of the "Now" ; variable. This variable is a list of the following format: ; { Seconds from 1-1-1970, Year, Month, Day, Hour, Minute, Second } ; ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: [LoadSetupLibrary] set !LIBHANDLE = "" LoadLibrary "x" $(!STF_WINDOWSSYSPATH)\setupdll.dll !LIBHANDLE exit [LoadSvcLibrary] set !SVCHANDLE = "" LoadLibrary "x" $(!SNARootDir)\setupsvc.dll !SVCHANDLE exit [LoadNCPALibrary] set !NCPA_HANDLE = "" LoadLibrary "x" $(!STF_WINDOWSSYSPATH)\NCPA.CPL !NCPA_HANDLE exit [FreeNCPALibrary] FreeLibrary $(!NCPA_HANDLE) set !NCPA_HANDLE = "" exit [LoadServiceLibrary] set !SVCHANDLE = "" LoadLibrary "x" $(!STF_CWDDIR)"\SETUPSVC.DLL" !SVCHANDLE exit [FreeServiceLibrary] FreeLibrary $(!SVCHANDLE) set !SVCHANDLE = "" exit [date] Now = {} ? $(!LIBHANDLE) GetSystemDate [FreeSetupLibrary] FreeLibrary $(!LIBHANDLE) set !LIBHANDLE = "" exit [FreeSvcLibrary] FreeLibrary $(!SVCHANDLE) set !SVCHANDLE = "" exit ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; ; INPUT DIALOGS SECTION ; --------------------- ; This section should contain all the information about the input dialogs. ; ; FORMAT: ; The format of the section name is the string name concatenated with the ; Language represented by the section. ; [InputDialog1LNG1] ; ... ; [InputDialog2LNG1] ; ... ; ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: [DoSNACLASPLSConfigENG] DlgTemplate = IDD_SNACLASPLSCONFIG DlgType = "RadioCombination" Caption = $(!P:SetupTitle) DlgText1 = "Service Name: "$(ServiceName) EditLabel1 = "Service &Title:" EditTextIn = { $(ServiceTitle) } EditTextLim = { 40 } ComboLabel1 = "&Script File:" NotifyFields = { "NO" } HelpContext = #( HelpContextIDs, $(DlgTemplate), 1 ) [ScriptFiles] ScriptFileList = {} ? $(!LIBHANDLE) FindFileInstances $(!SNARootDir)\system\hwsetup\snaclasp\*.dem ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; ; INPUT DIALOGS SCRIPTS ; --------------------- ; This section should contain all the scripts for doing input dialogs. ; Each script may return as many parameters as it wants, so long as the ; first parameter is the status and is one of the following: ; ; STATUS_SUCCESSFUL ; STATUS_FAILED ; STATUS_USERCANCEL ; STATUS_USERBACK ; ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ;()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()() ; ; DoSNACLASPLSConfig: ; ; DESCRIPTION: This shell script pops up a dialog to get the configuration ; of this product. ; ; INPUT: $($0) : Service Name ; $($1) : Current Title ; $($2) : Current Script File ; $($3) : Current Line Type ; ; OUTPUT: $($R0): Status ; $($R1): Changes flag ; $($R2): New Title ; $($R3): New Script File ; $($R4): New Line Type ; ;()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()() [DoSNACLASPLSConfig] read-syms ScriptFileConstants set ServiceName = $($0) set ServiceTitle = $($1) set ScriptFile = $($2) set LineType = $($3) set SvScriptFile = $($2) read-syms DialogConstants read-syms DialogConstants$(!STF_LANGUAGE) read-syms DoSNACLASPLSConfig$(!STF_LANGUAGE) ; ; set the default values ; set Status = STATUS_SUCCESSFUL set Changes = 0 install LoadSvcLibrary ifstr(i) $(!SVCHANDLE) == "" set Status = STATUS_FAILED goto SDLCConfReturn endif install LoadSetupLibrary ifstr(i) $(!LIBHANDLE) == "" set Status = STATUS_FAILED goto SDLCConfReturn endif detect ScriptFiles ; ; Build up the combo box list of script file names ; set ComboListIn1 = {} StartWait ForListDo $(ScriptFileList) ; ; Strip off the .DEM extension ; Split-String $($) "." TmpSplit set ComboListIn1 = >( $(ComboListIn1), *( $(TmpSplit), 1 )) EndForListDo EndWait ifstr(i) $(ScriptFile) == "" set ComboListOut1 = *( $(ComboListIn1), 1 ) else ; ; ScriptFile is a full path, so pick the filename ; portion from the end, then strip off its .DEM. ; Split-String $(ScriptFile) "\" TmpSplit QueryListSize TmpSize $(TmpSplit) set TmpFile = *( $(TmpSplit), $(TmpSize) ) Split-String $(TmpFile) "." TmpSplit set ComboListOut1 = *( $(TmpSplit), 1 ) endif set ComboListItemsIn = { ComboListIn1 } set ComboListItemsOut = { ComboListOut1 } RefreshDlg =+ ui start $(DlgTemplate) $(!IHVDLGHANDLE) ifstr(i) $(DLGEVENT) == "Exit" set Status = STATUS_USERCANCEL else ; Either Details or OK was hit ifstr(i) $(ComboListOut1) == "" set ScriptFile = *( $(ComboListIn1), 1 ) else set ScriptFile = $(ComboListOut1) endif set ScriptFile = $(!SNARootDir)\system\$(ScriptFile).dem ; ; Check title against those configured for other link services ; set TmpTitle = *( $(EditTextOut), 1 ) ifstr(i) $(TmpTitle) == "" shell $(!SubroutineInf) SetupMessage $(!STF_LANGUAGE) NONFATAL + "Please enter at least one character for the link service title." goto RefreshDlg endif set TmpFlag = $(!False) ForListDo $(!LinkServiceList) ifstr(i) $(TmpTitle) == *( $($), 2 ) set TmpSvcName = *( $($), 1 ) ifstr(i) $(ServiceName) != $(TmpSvcName) set TmpFlag = $(!True) endif endif EndForListDo ifstr(i) $(TmpFlag) == $(!False) set ServiceTitle = *( $(EditTextOut), 1 ) else shell $(!SubroutineInf) SetupMessage $(!STF_LANGUAGE) NONFATAL + "The title """$(TmpTitle)""" is already in use by link service "$(TmpSvcName)"." goto RefreshDlg endif ifstr(i) $(ScriptFile) != $(SvScriptFile) set Changes = 1 endif set Status = STATUS_SUCCESSFUL endif ; OK button ui pop 1 SNACLASPConfReturn =+ ifstr(i) $(!SVCHANDLE) != "" install FreeSvcLibrary endif Return $(Status), $(Changes), $(ServiceTitle), + $(ScriptFile), $(LineType) ;------------------------------------------------------------------------ ; ROUTINE: AddValueList ; ; DESCRIPTION: Given a nested list of value items, add each to the given ; key. Key is left open. ; ; ARGUMENTS: $0 Registry key handle ; $1 List of value items; for example: ; { {ValueName1,0,$(!REG_VT_SZ),$(ValueData1)}, + ; {ValueName2,0,$(!REG_VT_SZ),$(ValueData2)} } ; ; RETURNS: $R0 Status ; ;------------------------------------------------------------------------ [AddValueList] ; read-syms "RegistryConstants" ForListDo $($1) SetRegValue $($0) $($) ifint $(RegLastError) != $(!REG_ERROR_SUCCESS) return STATUS_FAILED endif EndForListDo return STATUS_SUCCESSFUL ;()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()() ; ; Identify ; ; DESCRIPTION: To verify that this INF deals with the same type of options ; as we are choosing currently. ; ; INPUT: None ; ; OUTPUT: $($R0): STATUS: STATUS_SUCCESSFUL ; $($R1): Option Type (COMPUTER ...) ; $($R2): Diskette description ; ;()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()() [Identify] read-syms Identification set Status = STATUS_SUCCESSFUL set Identifier = $(OptionType) set Media = #(Source Media Descriptions, 1, 1) Return $(Status) $(Identifier) $(Media) ;()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()() ; ; ReturnOptions ; ; DESCRIPTION: To return the option list supported by this INF and the ; localised text list representing the options. ; ; ; INPUT: $($0): Language used. ( ENG | FRN | ... ) ; ; OUTPUT: $($R0): STATUS: STATUS_SUCCESSFUL | ; STATUS_NOLANGUAGE ; STATUS_FAILED ; ; $($R1): Option List ; $($R2): Option Text List ; ;()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()() [ReturnOptions] set Status = STATUS_FAILED set OptionList = {} set OptionTextList = {} ; ; Check if the language requested is supported ; set LanguageList = ^(LanguagesSupported, 1) ifcontains(i) $($0) in $(LanguageList) goto returnoptions else set Status = STATUS_NOLANGUAGE goto finish_ReturnOptions endif ;++++++++++++++++++++++++++++++++++++ ; ; returnoptions: ; get the options from the Options and OptionsText sections and set appropriate ; return values. ; ;++++++++++++++++++++++++++++++++++++ returnoptions = + set OptionList = ^(Options, 1) set OptionTextList = ^(OptionsText$($0), 1) set Status = STATUS_SUCCESSFUL ;++++++++++++++++++++++++++++++++++++ ; ; finish_ReturnOptions: ; ;++++++++++++++++++++++++++++++++++++ finish_ReturnOptions = + Return $(Status) $(OptionList) $(OptionTextList) ;()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()() ; ; ReturnSNAOptions ; ; DESCRIPTION: To return the option list supported by this INF and ; recognized by SNA Server. This script also returns ; the localized text list representing those options. ; ; ; INPUT: None ; ; OUTPUT: $($R0): STATUS: STATUS_SUCCESSFUL | ; STATUS_NOLANGUAGE ; STATUS_FAILED ; ; $($R1): Option List ; $($R2): Option Text List ; ;()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()() [ReturnSNAOptions] set Status = STATUS_FAILED set SNAOptionList = {} set SNAOptionTextList = {} set LANG = $(!STF_LANGUAGE) ; ; Check if the language requested is supported ; set LanguageList = ^(LanguagesSupported, 1) ifcontains(i) $(LANG) in $(LanguageList) goto returnSNAoptions else set Status = STATUS_NOLANGUAGE goto finish_ReturnSNAOptions endif ;++++++++++++++++++++++++++++++++++++ ; ; returnSNAoptions: ; get the options from the Options and OptionsText sections and set appropriate ; return values. ; ;++++++++++++++++++++++++++++++++++++ returnSNAoptions = + set SNAOptionList = ^(SNAOptions, 1) set OptionList = ^(Options, 1) set SNAOptionTextList = {} set Status = STATUS_SUCCESSFUL ; ; Check that each of the SNA Options is a valid option and compile ; the list of text descriptions ; ForListDo $(SNAOptionList) ifcontains $($) in $(OptionList) set SNAOptionTextList = >( $(SNAOptionTextList), + #(OptionsText$(LANG), $($), 1) ) else set Status = STATUS_FAILED goto finish_ReturnSNAOptions endif ; TODO: whenever language gets checked, they use an (i) check. ; the question is: are section names case sensitive or case ; insensitive. if they are case insensitive, might as well ; make this a case insensitive check. if they are case ; sensitive, report this as a bug. ; CODENAME: CASECHECK EndForListDo ;++++++++++++++++++++++++++++++++++++ ; ; finish_ReturnSNAOptions: ; ;++++++++++++++++++++++++++++++++++++ finish_ReturnSNAOptions = + Return $(Status) $(SNAOptionList) $(SNAOptionTextList) ;()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()() ; ; ReturnSNAAdds ; ; DESCRIPTION: To return the list of dependencies and their text ; descriptions for a particular option. ; ; ; INPUT: $($0): Option used. ; ; OUTPUT: $($R0): STATUS: STATUS_SUCCESSFUL | ; STATUS_NOLANGUAGE ; STATUS_FAILED ; ; $($R1): Dependency List ; $($R2): Dependency Text List ; ;()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()() [ReturnSNAAdds] set Status = STATUS_FAILED set SNAAddList = {} set SNAAddTextList = {} set LANG = $(!STF_LANGUAGE) ; ; Check if the language requested is supported ; set LanguageList = ^(LanguagesSupported, 1) ifcontains(i) $(LANG) in $(LanguageList) goto returnSNAadds else set Status = STATUS_NOLANGUAGE goto finish_ReturnSNAAdds endif ;++++++++++++++++++++++++++++++++++++ ; ; returnSNAadds: ; get the additional options for an option and compile their text list ; ;++++++++++++++++++++++++++++++++++++ returnSNAadds = + set SNAAddList = ^(SNAOptionAdds$($0), 1) set OptionList = ^(Options, 1) set Status = STATUS_SUCCESSFUL ; ; Check that each of the SNA Dependencies is a valid option and compile ; the list of text descriptions ; ForListDo $(SNAAddList) ifcontains $($) in $(OptionList) set SNAAddTextList = >( $(SNAAddTextList), #(OptionsText$(LANG), $($), 1) ) else set Status = STATUS_FAILED goto finish_ReturnSNAAdds endif EndForListDo ;++++++++++++++++++++++++++++++++++++ ; ; finish_ReturnSNAAdds: ; ;++++++++++++++++++++++++++++++++++++ finish_ReturnSNAAdds = + Return $(Status) $(SNAAddList) $(SNAAddTextList) ;************************************************************************ ;************************************************************************ ; SNA INVOCATION SECTION ;************************************************************************ ;************************************************************************ ;()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()() ; ; SnaInvocation ; ; DESCRIPTION: To perform operations requested by the SNA Setup ; ; INPUT: NTN_XXXXX and STF_XXXXX variables defined ; ; OUTPUT: $($R0): STATUS: STATUS_SUCCESSFUL | ; STATUS_NOLANGUAGE | ; STATUS_USERCANCEL | ; STATUS_FAILED ; ;()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()() [SnaInvocation] set LongOption = $(!NTN_InfOption) set Changes = 0 set Instance = "xx" Split-String $(LongOption) "_" OptionList QueryListSize OptionSize $(OptionList) ifint $(OptionSize) == 3 set Option = *( $(OptionList), 1 ) set Instance = *( $(OptionList), 3 ) else set Option = $(LongOption) endif ; ; These three variables describe the execution of the installation. ; AddCopy adds the files in the file list to the copy list ; DoCopy actually copies the files on the spot ; ifstr(i) $(!NTN_InstallMode) == install read-syms InstallSteps$(Option) set !AddCopy = $(AddFilesToCopyList) set !DoCopy = $(CopyFilesInCopyList) ifstr(i) $(!NTN_InfType) == "LOCAL" set !AddCopy = NO set !DoCopy = NO endif Else set !AddCopy = NO set !DoCopy = NO Endif shell "" CommonSection $(Option) $(Instance) set Status = $($R0) set ReturnData = $($R1) set Changes = $($R2) Return $(Status) $(ReturnData) $(Changes) ;************************************************************************ ;************************************************************************ ; NCPA INVOCATION SECTION ;************************************************************************ ;************************************************************************ ;()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()() ; ; InstallOption ; ; DESCRIPTION: To perform operations requested by the NCPA ; ; INPUT: NTN_XXXXX and STF_XXXXX variables defined ; ; OUTPUT: $($R0): STATUS: STATUS_SUCCESSFUL | ; STATUS_NOLANGUAGE | ; STATUS_USERCANCEL | ; STATUS_FAILED ; ;()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()() [NTVersion] !STF_WINDOWSVERSION = "" ? $(!LIBHANDLE) GetWindowsNtVersion [InstallOption] set LongOption = $(!NTN_InfOption) set Changes = 0 set Instance = "xx" set !SNA_ProductName = "SNA Server" Split-String $(LongOption) "_" OptionList QueryListSize OptionSize $(OptionList) ifint $(OptionSize) == 3 set Option = *( $(OptionList), 1 ) set Instance = *( $(OptionList), 3 ) else set Option = $(LongOption) endif ; ; We don't really have upgrade functionality yet, so for the ; time being, we can just return successfully if we've been ; invoked as part of Windows NT Upgrade. ; ifstr(i) $(!NTN_InstallMode) == "upgrade" return STATUS_SUCCESSFUL endif ; ; These three variables describe the execution of the installation. ; AddCopy adds the files in the file list to the copy list ; DoCopy actually copies the files on the spot ; ifstr(i) $(!NTN_InstallMode) == "install" read-syms InstallSteps$(Option) set !AddCopy = YES set !DoCopy = YES else set !AddCopy = NO set !DoCopy = NO endif ; ; Set SNA Root Directory before reading File Constants ; OpenRegKey $(!REG_H_LOCAL), "", + "Software\Microsoft\SNA Server\CurrentVersion\Setup", + $(!REG_KEY_READ), KeySNAServices ifstr(i) $(KeySNAServices) != {} GetRegValue $(KeySNAServices) "RootDir" RootDirValue ifstr(i) $(RootDirValue) != "" set !SNARootDir = *( $(RootDirValue), 4 ) endif endif read-syms FileConstants read-syms FileConstants$(Option) set !NT31Flag = "0" install LoadSetupLibrary ifstr(i) $(!LIBHANDLE) != "" detect NTVersion install FreeSetupLibrary split-string $(!STF_WINDOWSVERSION) "{" TmpVerStr1 split-string *($(TmpVerStr1),2) "}" TmpVerStr2 split-string *($(TmpVerStr2),1) "," TmpVerStr1 ifint *($(TmpVerStr1),1) == 3 ifint *($(TmpVerStr1),3) == 10 set !NT31Flag = "1" endif endif endif ifstr(i) $(!NT31Flag) == "1" shell $(!SubroutineInf) SetupMessage $(!STF_LANGUAGE) STATUS + "Please use SNA Server Setup to configure SNA link services." return STATUS_SUCCESSFUL endif OpenRegKey $(!REG_H_LOCAL), "", + $(ProductRegBase)"\"$(ProductFullName)"\CurrentVersion", + $(!REG_KEY_READWRITE), KeyServiceIndex ifstr(i) $(KeyServiceIndex) == "" set ErrMesg = "Can't Find This Product Instance." set ErrProc = "InstallOption" set ErrFunc = "OpenRegKey (1)" goto fatal_registry endif GetRegValue $(KeyServiceIndex), "SNAVersion", SNAVersionInfo set !SNAVersion = *( $(SNAVersionInfo), 4 ) CloseRegKey $(KeyServiceIndex) set !DriverDir = $(!SNARootDir)"\system\hwsetup\" shell $(!UtilityInf) GetBusType ifstr(i) $($R0) == STATUS_SUCCESSFUL set !STF_BUSTYPE = $($R1) else set !STF_BUSTYPE = "ISA" endif LoadLibrary "" $(DialogLibrary) !DLGHANDLE shell "" CommonSection $(Option) $(Instance) set Status = $($R0) ifstr(i) $($R2) == 1 shell $(!SubroutineInf) SetupMessage $(!STF_LANGUAGE) "STATUS" + "For the changed parameters to be noticed, you must stop and"+ "restart this link service with the SNA Admin program." else-ifstr(i) $($R2) == 2 shell $(!SubroutineInf) SetupMessage $(!STF_LANGUAGE) "STATUS" + "You must reboot for the changed parameters to be noticed." endif FreeLibrary $(!DLGHANDLE) Return $(Status) {} $(Changes) fatal_registry = + set Error = + "Fatal Registry Error:"$(!LF)+ $(ErrMesg)$(!LF)+ "File: "$(ThisInf)$(!LF)+ "Procedure: "$(ErrProc)$(!LF)+ "Function: "$(ErrFunc) shell $(!SubroutineInf) SetupMessage $(!STF_LANGUAGE) "FATAL" $(Error) Return STATUS_FAILED ;************************************************************************ ;************************************************************************ ; COMMON SECTION ;************************************************************************ ;************************************************************************ ;()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()() ; ; CommonSection ; ; DESCRIPTION: To carry out the install/config/etc. operations ; ; INPUT: NTN_XXXXX and STF_XXXXX variables defined ; $($0): Option to be used ; $($1): Instance to be used ; ; OUTPUT: $($R0): STATUS: STATUS_SUCCESSFUL | ; STATUS_NOLANGUAGE | ; STATUS_EXISTS | ; STATUS_USERCANCEL | ; STATUS_FAILED ; ;()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()() [CommonSection] StartWait set Option = $($0) set Instance = $($1) set Index = "CurrentVersion" set RetData = {} set Changes = 0 set !DefDriverInfo = {{99,1,Unknown},Unknown,{99,99},99,99,99,99,{99,99},99} ; ; Check if the language requested is supported ; set LanguageList = ^(LanguagesSupported, 1) ifcontains(i) $(!STF_LANGUAGE) in $(LanguageList) goto languageexists else set Status = STATUS_NOLANGUAGE goto end endif ;++++++++++++++++++++++++++++++++++++ ; ; languageexists: ; ;++++++++++++++++++++++++++++++++++++ languageexists = + ; ; Define some constants, read some variable sections, and set the date ; StartWait read-syms GeneralConstants read-syms FileConstants read-syms FileConstants$(!STF_LANGUAGE) read-syms FileConstants$(Option) read-syms FileConstants$(Option)_$(!STF_LANGUAGE) install LoadSetupLibrary detect date install FreeSetupLibrary SetHelpFile $(!DriverDir)$(ThisHlp) $(HlpMin) $(HlpMax) LoadLibrary "" $(!DriverDir)$(ThisSrl) !IHVDLGHANDLE ifstr(i) $(!IHVDLGHANDLE) == "" goto set_status_failed endif set to = Begin set from = Begin ; ; Assume that all is well as we begin ; set CommonStatus = STATUS_SUCCESSFUL EndWait ;++++++++++++++++++++++++++++++++++++ ; ; Begin: ; Set up the operation-mode-based variables and gaily welcome ; the user. if the "install mode" variable is improperly set, ; assume this is a new installation. ; ;++++++++++++++++++++++++++++++++++++ Begin = + ifstr(i) $(!NTN_InstallMode) == deinstall set StartLabel = remove_component else-ifstr(i) $(!NTN_InstallMode) == fullremove set StartLabel = remove_component else-ifstr(i) $(!NTN_InstallMode) == snaremove set StartLabel = remove_component else-ifstr(i) $(!NTN_InstallMode) == getbindings set StartLabel = getbind_component else-ifstr(i) $(!NTN_InstallMode) == bind set StartLabel = bind_component else-ifstr(i) $(!NTN_InstallMode) == configure set StartLabel = config_component else ;; install set StartLabel = install_component endif goto set_defaults_$(Option) ;++++++++++++++++++++++++++++++++++++ ; ; set_defaults_SNACLASPLS ; ;++++++++++++++++++++++++++++++++++++ set_defaults_SNACLASPLS = + set ServiceName = $(Option) set ServiceTitle = $(ProductTitle) set ServiceDesc = $(ProductDesc) set ScriptFile = "1" ; 3270 logon set LineType = "0" ; Leased set Carrier = "0" ; Not constant set Radio4Flag = "0" ; Manual dial type set CfgArray = {} ; Initialize CfgArray from the registry install LoadSvcLibrary ifstr(i) $(!SVCHANDLE) != "" install FreeSvcLibrary endif ;++++++++++++++++++++++++++++++++++++ ; ; finish_defaults: ; ;++++++++++++++++++++++++++++++++++++ finish_defaults = + set from = end set to = end goto $(StartLabel) ;++++++++++++++++++++++++++++++++++++ ; ; install_component: ; ;++++++++++++++++++++++++++++++++++++ install_component = + ; ; First, check if there are any existing services of this product ; already in the registry. ; shell $(!UtilityInf) FindSNAProductServices, $(ProductRegBase), $(ProductFullName) ifint $($ShellCode) != 0 goto ShellCodeError endif set Status = $($R0) set SvcIndexList = $($R1) set SvcNameList = $($R2) set SvcTitleList = $($R3) set SvcDescList = $($R4) ifstr(i) $(Status) == STATUS_FAILED set ErrMesg = "Can't Find This Product." set ErrProc = "install_component" set ErrFunc = "FindSNAProductServices" goto fatal_registry endif ; ; if there are no services of this product installed, it could mean ; that the product doesn't exist. Either way, we are installing service ; index "01" and on to modify params. ; QueryListSize SvcIndexListSize $(SvcIndexList) set ProductExists = $(!True) ifint $(SvcIndexListSize) == 0 ifstr(i) $(Status) == STATUS_NOSUCHPRODUCT set ProductExists = $(!False) endif set Instance = "01" goto install_nextstep endif ; ; If there is one instance of this service and this product is an ; exclusive install, return with the appropriate status. ; ifint $(ProductExclusive) != $(!False) ifint $(SvcIndexListSize) == 1 set Status = STATUS_EXISTS ifint $(ProductExclusive) == $(NOTIFY) shell $(!SubroutineInf) SetupMessage $(!STF_LANGUAGE) NONFATAL + "This product is already installed and can only be installed once." endif goto end endif endif shell $(!UtilityInf) FindNextAvailableIndex $(SvcIndexList) ifint $($ShellCode) != 0 goto ShellCodeError endif set Status = $($R0) set Instance = $($R1) ifstr(i) $(Status) != STATUS_SUCCESSFUL goto end endif ;++++++++++++++++++++++++++++++++++++ ; ; install_nextstep: ; we have a service index and are ready to start the ; process of installing an instance. ; ;++++++++++++++++++++++++++++++++++++ install_nextstep = + read-syms FileConstants$(Option) set TmpStr = "" ifint $(Instance) < 10 split-string $(Instance) "0" TmpList QueryListSize TmpSize $(TmpList) ifstr(i) *($(TmpList),1) != "0" set TmpStr = $(TmpStr)*($(TmpList),1) endif ifint $(TmpSize) > 1 set TmpStr = $(TmpStr)*($(TmpList),2) endif else set TmpStr = $(Instance) endif set ServiceTitle = $(ProductTitle)" #"$(TmpStr) ifint $(ProductServiceQuery) == $(!True) shell $(!UtilityInf) EnterServiceName, + $(ProductTitle), + $(ProductServicePrefix), + $(Instance) ifint $($ShellCode) != 0 goto ShellCodeError endif set Status = $($R0) set ServiceName = $($R1) ifstr(i) $(Status) != STATUS_SUCCESSFUL goto end endif else set ServiceName = $(ProductServicePrefix) endif goto modify_params ;++++++++++++++++++++++++++++++++++++ ; ; config_component: ; get the current values for all the parameters and prepare them for ; modify_params. ; ;++++++++++++++++++++++++++++++++++++ config_component = + read-syms FileConstants$(Option) ; ; Try and open this product and see if it's even installed. ; shell $(!UtilityInf) FindSNAProductServices $(ProductRegBase), + $(ProductFullName) ifint $($ShellCode) != 0 goto ShellCodeError endif set Status = $($R0) set SvcIndexList = $($R1) set SvcNameList = $($R2) set SvcTitleList = $($R3) set SvcDescList = $($R4) ifstr(i) $(Status) != STATUS_SUCCESSFUL set ErrMesg = "Can't Find This Product." set ErrProc = "config_component" set ErrFunc = "FindSNAProductServices" goto fatal_registry endif set ProductExists = $(!True) shell $(!UtilityInf) GrepUniqueServiceInfo "Index", + $(Instance), + $(SvcIndexList), + $(SvcNameList),+ $(SvcTitleList),+ $(SvcDescList) ifint $($ShellCode) != 0 goto ShellCodeError endif set Status = $($R0) set ServiceIndex = $($R1) set ServiceName = $($R2) set ServiceTitle = $($R3) set ServiceDesc = $($R4) ifstr(i) $(Status) != STATUS_SUCCESSFUL goto end endif ;++++++++++++++++++++++++++++++++++++ ; ; read_params: ; read the parameters from the SCA and assign them to the appropriate ; variables. ; ;++++++++++++++++++++++++++++++++++++ read_params = + ; ; Find the entry in the Service Control Architecture and get a handle ; to the Parameters Key and to the ExtraParameters key if one exists. ; shell $(!UtilityInf) FindSNAService, $(ServiceName) ifint $($ShellCode) != 0 goto ShellCodeError endif set Status = $($R0) set KeyService = $($R1) set KeyParameters = $($R2) set KeyExtraParams = $($R3) ifstr(i) $(Status) != STATUS_SUCCESSFUL CloseRegKey $(KeyService) CloseRegKey $(KeyParameters) CloseRegKey $(KeyExtraParams) set ErrMesg = "Can't Find Service Entry For Instance"$(ServiceName) set ErrProc = "read_params" set ErrFunc = "FindSNAService" goto fatal_registry endif set OldVersionExisted = $(!True) set ValueName = "" set ValueData = "" set ValueStr = "" set ValueList = {} ; ; Get the old values from the parameters key ; EnumRegValue $(KeyParameters) ValueList ; ; if there's an ExtraParameters subkey, add those values to the list ; ifstr(i) $(KeyExtraParams) != $(KeyNull) EnumRegValue $(KeyExtraParams) ExtraValueList ForListDo $(ExtraValueList) set ValueList = >( $(ValueList), $($) ) EndForListDo endif ForListDo $(ValueList) set ValueItem = $($) set ValueName = *($(ValueItem), 1) set ValueData = *($(ValueItem), 4) goto assign_value_$(Option) ;++++++++++++++++++++++++++++++++++++ ; ; assign_value_SNACLASPLS: ; ;++++++++++++++++++++++++++++++++++++ assign_value_SNACLASPLS = + ifstr(i) $(ValueName) == "LineType" set LineType = $(ValueData) else-ifstr(i) $(ValueName) == "ScriptFile" set ScriptFile = $(ValueData) else-ifstr(i) $(ValueName) == "Carrier" set Carrier = $(ValueData) else-ifstr(i) $(ValueName) == "Radio4Flag" ifstr(i) $(ValueData) == "1" set Radio4Flag = $(!True) else set Radio4Flag = $(!False) endif endif goto finish_assign_value ;++++++++++++++++++++++++++++++++++++ ; ; finish_assign_value: ; ;++++++++++++++++++++++++++++++++++++ finish_assign_value = + EndForListDo goto assign_extra_$(Option) ;++++++++++++++++++++++++++++++++++++ ; ; assign_extra_IBMSDLCLS: ; ;++++++++++++++++++++++++++++++++++++ assign_extra_SNACLASPLS = + goto finish_assign_extra ;++++++++++++++++++++++++++++++++++++ ; ; finish_assign_extra: ; ;++++++++++++++++++++++++++++++++++++ finish_assign_extra = + goto modify_params ;++++++++++++++++++++++++++++++++++++ ; ; modify_params: ; allow the user to bang away at the parameters until they are happy ; ;++++++++++++++++++++++++++++++++++++ modify_params = + set from = modify_params goto modify_params_$(Option) ;++++++++++++++++++++++++++++++++++++ ; ; modify_params_SNACLASPLS: ; ;++++++++++++++++++++++++++++++++++++ modify_params_SNACLASPLS = + ; ; Find the ID and CfgIndex of the current card. ; set OldCfgId = *(*($(DriverInfo),1),1) set OldCfgIndex = 0 ForListDo $(CfgArray) ifint $(OldCfgIndex) == 0 ifstr(i) $(OldCfgId) == *(*($($),1),1) set OldCfgIndex = $(#) endif endif EndForListDo ; OldCfgId should == DeviceId here. shell "" DoSNACLASPLSConfig $(ServiceName), + $(ServiceTitle), + $(ScriptFile), + $(LineType) ifint $($ShellCode) != 0 goto ShellCodeError endif set Status = $($R0) ifstr(i) $(Status) != STATUS_SUCCESSFUL goto end else set Changes = $($R1) set ServiceTitle = $($R2) set ScriptFile = $($R3) set LineType = $($R4) endif goto finish_modify_params ;++++++++++++++++++++++++++++++++++++ ; ; finish_modify_params: ; ;++++++++++++++++++++++++++++++++++++ finish_modify_params = + goto adjust_params ;++++++++++++++++++++++++++++++++++++ ; ; adjust_params: ; if there is an old version, the registry keys and values exist and all we ; have to do is modify them. otherwise, if we're installing from scratch, ; we have to create those keys and values. ; ;++++++++++++++++++++++++++++++++++++ adjust_params = + ifint $(OldVersionExisted) == $(!True) ifstr(i) $(!NTN_InstallMode) == "configure" goto write_params endif endif ;++++++++++++++++++++++++++++++++++++ ; ; create_regvals: ; create the necessary parts of the registry ; ;++++++++++++++++++++++++++++++++++++ create_regvals = + Shell $(!UtilityInf) + CreateSNAService, + $(ServiceName), + $(SNAServiceType), + $(ProductImagePath), + $(ProductDepends), + $(ProductParams), + $(ProductExtraParams), + $(!SNARootDir)"\System\"$(ProductImagePath), + 7 ifint $($ShellCode) != 0 goto ShellCodeError endif set Status = $($R0) set KeyService = $($R1) set KeyParameters = $($R2) set KeyExtraParams = $($R3) ifstr(i) $(Status) != STATUS_SUCCESSFUL CloseRegKey $(KeyService) CloseRegKey $(KeyParameters) CloseRegKey $(KeyExtraParams) set ErrMesg = "Can't Create Service Entry For Instance." set ErrProc = "create_regvals" set ErrFunc = "CreateSNAService" goto fatal_registry endif Shell $(!UtilityInf) CreateSNARegEntry, $(ProductRegBase), + $(ProductFullName) ifint $($ShellCode) != 0 goto ShellCodeError endif set Status = $($R0) set KeyProductBase = $($R1) set KeyProduct = $($R2) set KeyServiceIndex = $($R3) set KeyNetRules = $($R4) ifstr(i) $(Status) != STATUS_SUCCESSFUL CloseRegKey $(KeyProductBase) CloseRegKey $(KeyProduct) CloseRegKey $(KeyServiceIndex) CloseRegKey $(KeyNetRules) set ErrMesg = "Can't Create Product Entry For Instance." set ErrProc = "create_regvals" set ErrFunc = "CreateSNARegEntry" goto fatal_registry endif shell $(!UtilityInf) AddValueList, $(KeyServiceIndex), + { { ServiceName , $(NoTitle), $(!REG_VT_SZ), $(ServiceName) }, + { InfName , $(NoTitle), $(!REG_VT_SZ), $(FullInfName) }, + { SoftwareType, $(NoTitle), $(!REG_VT_SZ), $(SoftwareType) }, + { SNAVersion , $(NoTitle), $(!REG_VT_SZ), $(!SNAVersion) } } set NROption = $(Option)"_"$(Instance) set NRTitle = $(NetRulesTitle) set NRClass = { $(NetRulesClass) } set NRBindForm = $(ServiceName)" yes yes container" set NRUse = $(NetRulesUse) set NRBindable = { $(NetRulesBindable) } set NetRulesValues = { + { InfName , $(NoTitle), $(!REG_VT_SZ), $(FullInfName) }, + { InfOption , $(NoTitle), $(!REG_VT_SZ), $(NROption) }, + { title , $(NoTitle), $(!REG_VT_SZ), $(NRTitle) }, + { use , $(NoTitle), $(!REG_VT_SZ), $(NRuse) }, + { bindform , $(NoTitle), $(!REG_VT_SZ), $(NRBindForm) }, + { type , $(NoTitle), $(!REG_VT_SZ), $(NetRulesType) }, + } ; ; Here we enumerate all installed link services of this type, looking ; for the "class" and "bindable" regvals. We only write these values ; if we have no other installed links of this type, or we don't find ; these two values among the links we examine. ; ; Enum on KeyProductBase, SplitString each on "_", compare first string ; with ProductName, if match look in CurrentVersion\NetRules for these ; two values. ; set Found = $(!False) EnumRegKey $(KeyProductBase) TmpList ForListDo $(TmpList) set TmpName = *( $($), 1 ) Split-String $(TmpName) "_" TmpSplit ifstr(i) *( $(TmpSplit), 1 ) == $(ProductName) OpenRegKey $(KeyProductBase), "", + $(TmpName)"\CurrentVersion\NetRules", + $(!REG_KEY_READ), TmpNRKey ifstr(i) $(TmpNRKey) != $(KeyNull) EnumRegValue $(TmpNRKey) TmpNRList ForListDo $(TmpNRList) ifstr(i) *($($),1) == "class" set Found = $(!True) endif EndForListDo CloseRegKey $(TmpNRKey) endif endif EndForListDo set TmpList = {} set TmpName = {} set TmpSplit = {} set TmpNRList = {} ifstr(i) $(Found) == $(!False) set NetRulesValues = >( $(NetRulesValues), + { class, $(NoTitle), $(!REG_VT_MULTI_SZ), $(NRClass) } ) set NetRulesValues = >( $(NetRulesValues), + { bindable, $(NoTitle), $(!REG_VT_MULTI_SZ), $(NRBindable) } ) endif shell $(!UtilityInf) AddValueList $(KeyNetRules) $(NetRulesValues) ifint $(ProductExists) == $(!False) read-syms ProgressCopyVars install InstallRemove endif goto write_params ;++++++++++++++++++++++++++++++++++++ ; ; write_params: ; ;++++++++++++++++++++++++++++++++++++ write_params = + ifstr $(KeyProductBase) == $(KeyNull) shell $(!UtilityInf) FindSNARegEntry, + $(ProductRegBase), + $(ProductFullName) ifint $($ShellCode) != 0 goto ShellCodeError endif set Status = $($R0) set KeyProductBase = $($R1) set KeyProduct = $($R2) set KeyServiceIndex = $($R3) set KeyNetRules = $($R4) ifstr(i) $(Status) != STATUS_SUCCESSFUL CloseRegKey $(KeyProductBase) CloseRegKey $(KeyProduct) CloseRegKey $(KeyServiceIndex) CloseRegKey $(KeyNetRules) set ErrMesg = "Can't Find Product Entry For Instance." set ErrProc = "write_params" set ErrFunc = "FindSNARegEntry" goto fatal_registry endif endif ifstr $(KeyService) == $(KeyNull) shell $(!UtilityInf) FindSNAService, $(ServiceName) ifint $($ShellCode) != 0 goto ShellCodeError endif set Status = $($R0) set KeyService = $($R1) set KeyParameters = $($R2) set KeyExtraParams = $($R3) ifstr(i) $(Status) != STATUS_SUCCESSFUL CloseRegKey $(KeyService) CloseRegKey $(KeyParameters) CloseRegKey $(KeyExtraParams) set ErrMesg = "Can't Find Service Entry For Instance." set ErrProc = "write_params" set ErrFunc = "FindSNAService" goto fatal_registry endif endif goto write_params_$(Option) ;++++++++++++++++++++++++++++++++++++ ; ; write_params_SNACLASPLS: ; ;++++++++++++++++++++++++++++++++++++ write_params_SNACLASPLS = + read-syms ScriptFileConstants ifstr(i) $(Radio4Flag) == $(!True) set RadioVal = "1" else set RadioVal = "0" endif set FullOption = $(Option)"_"$(Instance) ; ; Find out if this is an AS400 script. First pull the ; path off the file name, them look at the start Split-String $(ScriptFile) "\" TmpSplit QueryListSize TmpSize $(TmpSplit) set TmpFile = *( $(TmpSplit), $(TmpSize) ) Split-String $(TmpFile) " " TmpSplit ifstr(i) *( $(TmpSplit), 1) == "AS400" set NeverRemotable = "1" else set NeverRemotable = " " endif set ProductParams = { + { IHVDLL ,$(NoTitle),$(!REG_VT_SZ), $(ProductDLL) },+ { InfName ,$(NoTitle),$(!REG_VT_SZ), $(FullInfName) },+ { InfOption ,$(NoTitle),$(!REG_VT_SZ), $(FullOption) },+ { NeverRemotable,$(NoTitle),$(!REG_VT_SZ), $(NeverRemotable) },+ } set ProductExtraParams = { + { LineType ,$(NoTitle),$(!REG_VT_DWORD),$(LineType) }, + { Carrier ,$(NoTitle),$(!REG_VT_DWORD),$(Carrier) }, + { Radio4Flag ,$(NoTitle),$(!REG_VT_DWORD),$(RadioVal) }, + { ScriptFile ,$(NoTitle),$(!REG_VT_SZ), $(ScriptFile) } + } ; ; Add AS400 Emulator TP registry entries ; ifint $(ProductExists) == $(!False) Debug-Output "Reached AS400 Emulator TP eventlog section" ;+++++++++++++++++++++++++++++++++++++++++++++++++++ ; ; Copy complete so set up EventLog entry in registry ; ;+++++++++++++++++++++++++++++++++++++++++++++++++++ set RegEventLogApps = "SYSTEM\CurrentControlSet\Services\EventLog\Application" set RegLog = {$(EVNDEMO), 0, $(!REG_KEY_ALL_ACCESS)} set RegEventMsgFile = {"EventMessageFile", 0, $(!REG_VT_EXPAND_SZ), $(EVTDEMO)} set RegTypesSupported = {"TypesSupported", 0, $(!REG_VT_DWORD), 7} OpenRegKey $(!REG_H_LOCAL) "" $(RegEventLogApps) $(!REG_KEY_WRITE) ELHandle ifstr(i) $(ELHandle) == "" Debug-Output "EventLogKey not found" else Debug-Output "EventLogKey found" ; ; Create Eventlog\Application\AS 400 TP Service key ; CreateRegKey $(ELHandle) $(RegLog) "" $(!REG_KEY_WRITE) "" SNAELHandle ifstr(i) $(SNAELHandle) == "" Debug-Output "Failed to create "*($(RegLog),1)" key" else Debug-Output "Created "*($(RegLog),1)" key" ; ; Create AS 400 TP Service\EventMessageFile ; Debug-Output "Value to add "$(RegEventMsgFile) SetRegValue $(SNAELHandle) $(RegEventMsgFile) ; ; Create AS 400 TP\TypesSupported ; Debug-Output "Value to add "$(RegTypesSupported) SetRegValue $(SNAELHandle) $(RegTypesSupported) CloseRegKey SNAELHandle endif CloseRegKey ELHandle endif Debug-Output "Reached AS400 Emulator TP invokable section" ;+++++++++++++++++++++++++++++++++++++++++++++++++++ ; ; Copy complete so set up Invokable TP in registry ; ;+++++++++++++++++++++++++++++++++++++++++++++++++++ ; /*****************************************************************/ ; /* Now call the "CreateService" call. We need to load the NCPA ; /* first though. ; /*****************************************************************/ set !NCPA_HANDLE = "" install LoadNCPALibrary ifstr(i) $(!NCPA_HANDLE) == "" set ErrMesg = "Cannot load Network Control Panel Library" set ErrProc = "write_params_SNACLASLS" set ErrFunc = "LoadNCPALibrary" goto fatal_registry else set ServiceNameKey = $(KeyNull) set ServiceNameParamKey = $(KeyNull) set ServiceNameExtraParamKey = $(KeyNull) set OtherDepends = { "SnaBase" } set CreateServiceType = $(SERVICE_WIN32_OWN_PROCESS) set CreateServiceStart = $(SERVICE_DEMAND_START) ;++++++++++++++++++++++++++++++++++++ ; ; Add 5250 demo service ; ;++++++++++++++++++++++++++++++++++++ shell $(!STF_WINDOWSSYSPATH)\UTILITY.INF CreateService + $(TP5250) $(DSC5250) $(EXE5250) "service" + "" "" "LocalSystem" "" + "" "" set ServiceNameKey = $($R1) set ServiceNameParamKey = $($R2) set ServiceNameLinkageKey = $($R3) ; /***************************************************************/ ; /* Did it succeed ? ; /***************************************************************/ ifstr(i) $(ServiceNameKey) == $(KeyNull) shell "" GetServiceBaseKey ifstr(i) $($R0) == STATUS_FAILED set ErrMesg = "Cannot install AS/400 Emulator TP service" set ErrProc = "write_params_SNACLASLS" set ErrFunc = "GetServiceBaseKey" goto fatal_registry else Debug-Output "Service already installed" endif endif ; /***************************************************************/ ; /* Set up the dependencies ; /***************************************************************/ ifstr(i) $(ServiceNameLinkageKey) != $(KeyNull) SetRegValue $(ServiceNameLinkageKey) + { "OtherDependencies", $(NoTitle), + $(!REG_VT_MULTI_SZ), $(OtherDepends) } endif ; /***************************************************************/ ; /* Set up parameters for the AS400 Server. ; /* These are read out of the Params5250 table. ; /***************************************************************/ set ParamsToAdd = {} ForListDo $(Params5250) set ParamsToAdd = >( $(ParamsToAdd), $($) ) EndForListDo shell "" AddValueList $(ServiceNameParamKey) $(ParamsToAdd) ;++++++++++++++++++++++++++++++++++++ ; ; Add ODBC demo service ; ;++++++++++++++++++++++++++++++++++++ set ServiceNameKey = $(KeyNull) set ServiceNameParamKey = $(KeyNull) set ServiceNameExtraParamKey = $(KeyNull) set OtherDepends = { "SnaBase" } set CreateServiceType = $(SERVICE_WIN32_OWN_PROCESS) set CreateServiceStart = $(SERVICE_DEMAND_START) shell $(!STF_WINDOWSSYSPATH)\UTILITY.INF CreateService + $(TPODBC) $(DSCODBC) $(EXEODBC) "service" + "" "" "LocalSystem" "" + "" "" set ServiceNameKey = $($R1) set ServiceNameParamKey = $($R2) set ServiceNameLinkageKey = $($R3) ; /***************************************************************/ ; /* Did it succeed ? ; /***************************************************************/ ifstr(i) $(ServiceNameKey) == $(KeyNull) shell "" GetServiceBaseKey ifstr(i) $($R0) == STATUS_FAILED set ErrMesg = "Cannot install AS/400 Emulator TP service" set ErrProc = "write_params_SNACLASLS" set ErrFunc = "GetServiceBaseKey" goto fatal_registry else Debug-Output "Service already installed" endif endif ; /***************************************************************/ ; /* Set up the dependencies ; /***************************************************************/ ifstr(i) $(ServiceNameLinkageKey) != $(KeyNull) SetRegValue $(ServiceNameLinkageKey) + { "OtherDependencies", $(NoTitle), + $(!REG_VT_MULTI_SZ), $(OtherDepends) } endif ; /***************************************************************/ ; /* Set up parameters for the AS400 Server. ; /* These are read out of the ParamsODBC table. ; /***************************************************************/ set ParamsToAdd = {} ForListDo $(ParamsODBC) set ParamsToAdd = >( $(ParamsToAdd), $($) ) EndForListDo shell "" AddValueList $(ServiceNameParamKey) $(ParamsToAdd) install FreeNCPALibrary endif endif goto finish_write_params ;++++++++++++++++++++++++++++++++++++ ; ; finish_write_params: ; ;++++++++++++++++++++++++++++++++++++ finish_write_params = + shell $(!UtilityInf) AddValueList, $(KeyServiceIndex), + { + { Title , $(NoTitle), $(!REG_VT_SZ), $(ServiceTitle) }, + { Description, $(NoTitle), $(!REG_VT_SZ), $(ServiceDesc) } + } ifint $($ShellCode) != 0 goto ShellCodeError endif shell $(!UtilityInf) AddValueList, $(KeyParameters), + { + { Title , $(NoTitle), $(!REG_VT_SZ), $(ServiceTitle) }, + { Description, $(NoTitle), $(!REG_VT_SZ), $(ServiceDesc) } + } ifint $($ShellCode) != 0 goto ShellCodeError endif ifstr(i) $(ProductParams) != {} shell $(!UtilityInf) AddValueList, $(KeyParameters), + $(ProductParams) ifint $($ShellCode) != 0 goto ShellCodeError endif endif ifstr(i) $(ProductExtraParams) != {} shell $(!UtilityInf) AddValueList, $(KeyExtraParams), + $(ProductExtraParams) ifint $($ShellCode) != 0 goto ShellCodeError endif endif set RetData = >( $(RetData), { $(Instance), + $(ServiceName), + $(ServiceTitle), + $(ServiceDesc), + $(!NTN_InstallMode), + } ) CloseRegKey $(KeyProductBase) CloseRegKey $(KeyProduct) CloseRegKey $(KeyServiceIndex) CloseRegKey $(KeyNetRules) CloseRegKey $(KeyService) CloseRegKey $(KeyParameters) CloseRegKey $(KeyExtraParams) goto successful ;++++++++++++++++++++++++++++++++++++ ; ; getbind_component: ; ;++++++++++++++++++++++++++++++++++++ getbind_component = + goto getbind_$(Option) ;++++++++++++++++++++++++++++++++++++ ; ; getbind_IBMSDLCLS: ; ;++++++++++++++++++++++++++++++++++++ getbind_SNACLASPLS = + set RetData = {} goto finish_getbind_component ;++++++++++++++++++++++++++++++++++++ ; ; finish_getbind_component: ; ;++++++++++++++++++++++++++++++++++++ finish_getbind_component = + goto successful ;++++++++++++++++++++++++++++++++++++ ; ; bind_component: ; ;++++++++++++++++++++++++++++++++++++ bind_component = + set Error = "Sorry. No Bindings Feature Yet." goto fatal_msg ;++++++++++++++++++++++++++++++++++++ ; ; remove_component: ; ;++++++++++++++++++++++++++++++++++++ remove_component = + read-syms FileConstants$(Option) read-syms ScriptFileConstants ; ; we need to set ourselves up with these variables for later use ; shell $(!UtilityInf) FindSNAProductServices + $(ProductRegBase), + $(ProductFullName) ifint $($ShellCode) != 0 goto ShellCodeError endif set Status = $($R0) set SvcIndexList = $($R1) set SvcNameList = $($R2) set SvcTitleList = $($R3) set SvcDescList = $($R4) ifstr(i) $(Status) == STATUS_NOSUCHPRODUCT goto successful endif ifstr(i) $(Status) == STATUS_FAILED set ErrMesg = "Can't Open Product Entry In Registry." set ErrProc = "remove_component" set ErrFunc = "FindSNAProductServices" goto fatal_registry endif ; ; This will be a counter that will be used to decide whether or not ; the product key should be removed at the end ; QueryListSize SvcIndexListSize $(SvcIndexList) ifstr(i) $(!NTN_InstallMode) == "fullremove" set RemoveMode = "Full" goto remove_all_pieces endif set RemoveMode = "Partial" ifstr(i) $(!NTN_InstallMode) == "snaremove" ; Hack. Here we search for bindings and remove only if nothing ; else needs this piece. endif ; InstallMode = snaremove shell $(!UtilityInf) GrepUniqueServiceInfo "Index", + $(Instance), + $(SvcIndexList), + $(SvcNameList), + $(SvcTitleList), + $(SvcDescList) ifint $($ShellCode) != 0 goto ShellCodeError endif set Status = $($R0) set RemoveIndex = $($R1) set RemoveName = $($R2) set RemoveTitle = $($R3) set RemoveDesc = $($R4) goto remove_one_piece ;++++++++++++++++++++++++++++++++++++ ; ; remove_all_pieces: ; ;++++++++++++++++++++++++++++++++++++ remove_all_pieces = + ForListDo $(SvcIndexList) ifstr(i) $(KeyProductBase) != $(KeyNull) CloseRegKey $(KeyProductBase) endif set RemoveIndex = $($) shell $(!UtilityInf) GrepUniqueServiceInfo "Index", + $(RemoveIndex), + $(SvcIndexList), + $(SvcNameList), + $(SvcTitleList), + $(SvcDescList) ifint $($ShellCode) != 0 goto ShellCodeError endif set Status = $($R0) set RemoveIndex = $($R1) set RemoveName = $($R2) set RemoveTitle = $($R3) set RemoveDesc = $($R4) ifstr(i) $(Status) != STATUS_SUCCESSFUL goto end endif set TInstance = $(Instance) set Instance = $(RemoveIndex) read-syms FileConstants$(Option) set Instance = $(TInstance) goto remove_one_piece ;++++++++++++++++++++++++++++++++++++ ; ; remove_next_piece: ; ;++++++++++++++++++++++++++++++++++++ remove_next_piece = + EndForListDo goto remove_product ;++++++++++++++++++++++++++++++++++++ ; ; remove_one_piece: ; ;++++++++++++++++++++++++++++++++++++ remove_one_piece = + shell $(!UtilityInf) FindSNARegEntry, $(ProductRegBase), + $(ProductFullName) ifint $($ShellCode) != 0 goto ShellCodeError endif set Status = $($R0) set KeyProductBase = $($R1) set KeyProduct = $($R2) set KeyServiceIndex = $($R3) set KeyNetRules = $($R4) ifstr(i) $(Status) != STATUS_SUCCESSFUL CloseRegKey $(KeyProductBase) CloseRegKey $(KeyProduct) CloseRegKey $(KeyProductVer) CloseRegKey $(KeyNetRules) set ErrMesg = "Can't Find Product Entry For Instance." set ErrProc = "remove_one_piece" set ErrFunc = "FindSNARegEntry" goto fatal_registry endif shell $(UtilityInf) DeleteSNAService $(RemoveName) ; ; If we're coming in as the link service (IBMSDLCLS), ; decrement the reference count in the CardCfg structure ; to which we belong. If the ref count goes to zero, ; remove the entry. ; ifstr(i) $(Option) == "SNACLASPLS" ; ; Get our Device ID out of the registry, but first, ; we need this link service's ServiceName. ; ifstr(i) $(KeyServiceIndex) != $(KeyNull) GetRegValue $(KeyServiceIndex) "ServiceName" SvcNameValue ifstr(i) $(SvcNameValue) != "" set SvcName = *($(SvcNameValue),4) endif endif ifstr(i) $(SvcName) == "" goto EndLScheck endif OpenRegKey $(!REG_H_LOCAL), "", + "System\CurrentControlSet\Services\"$(SvcName)"\Parameters\ExtraParameters", + $(!REG_KEY_READ), KeyEP ifstr(i) $(KeyEP) == "" goto EndLScheck endif EndLScheck =+ endif ; Option == SNACLASPLS ; ; If we're coming in as the device driver, check to see if ; any other SNA components (i.e., other sync link services) ; are bound to it -- if so, don't remove the driver! ; ; ; Get rid of this service instance in the product keys ; CloseRegKey $(KeyServiceIndex) CloseRegKey $(KeyNetRules) ; I don't know why this line is here -- RemoveIndex ; seems to have values like 01, 02, etc. and there are ; no reg trees by those names for SNA components. DeleteRegTree $(KeyProduct) $(RemoveIndex) CloseRegKey $(KeyProduct) shell $(!UtilityInf) DeleteSNAService $(RemoveName) ; ; Special Hack Alert: ; ; When we have multiple instances of the same type of link ; service installed, only ONE of those instances may have ; the "class" and "bindable" values present under their ; NetRules key. If the link service we've just deleted ; was the one that had those values, we need to search the ; remaining instances (if any) for those values, and if not ; found, we must add them to the first instance we find. ; What a hassle. ; set Found = $(!False) set SaveName = "" OpenRegKey $(!REG_H_LOCAL), "", "Software\Microsoft", + $(!REG_KEY_READ), KeySM ifstr(i) $(KeySM) != $(KeyNull) EnumRegKey $(KeySM) TmpList ForListDo $(TmpList) ifstr(i) $(Found) == $(!False) set TmpName = *( $($), 1 ) Split-String $(TmpName) "_" TmpSplit ifstr(i) *( $(TmpSplit), 1 ) == $(ProductName) ifstr(i) $(TmpName) != $(ProductFullName) OpenRegKey $(KeySM), "", + $(TmpName)"\CurrentVersion\NetRules", + $(!REG_KEY_READ), TmpNRKey ifstr(i) $(TmpNRKey) != $(KeyNull) ifstr(i) $(SaveName) == "" set SaveName = $(TmpName) endif EnumRegValue $(TmpNRKey) TmpNRList ForListDo $(TmpNRList) ifstr(i) *( $($), 1 ) == "class" set Found = $(!True) endif EndForListDo CloseRegKey $(TmpNRKey) endif endif endif endif EndForListDo set TmpList = {} set TmpName = "" set TmpSplit = "" set TmpNRList = {} ifstr(i) $(Found) == $(!False) ifstr(i) $(SaveName) != "" OpenRegKey $(KeySM), "", + $(SaveName)"\CurrentVersion\NetRules", + $(!REG_KEY_READWRITE), TmpNRKey ifstr(i) $(TmpNRKey) != $(KeyNull) shell $(!UtilityInf) AddValueList $(TmpNRKey), + {{ class, $(NoTitle), $(!REG_VT_MULTI_SZ), {$(NetRulesClass)}}, + { bindable, $(NoTitle), $(!REG_VT_MULTI_SZ), {$(NetRulesBindable)}}} CloseRegKey $(TmpNRKey) endif endif endif CloseRegKey $(KeySM) endif ; ; Done with that NetRules weirdness. Let's get on with it: ; set-sub SvcIndexListSize = $(SvcIndexListSize), 1 OpenRegKey $(!REG_H_LOCAL), "", $(ProductRegBase), + $(!REG_KEY_READWRITE), KeyProductTemp ifstr(i) $(KeyProductTemp) != "" DeleteRegTree $(KeyProductTemp) $(ProductFullName) CloseRegKey $(KeyProductTemp) endif ; ; Delete the EventLog entry for the device driver. ; ; OpenRegKey $(!REG_H_LOCAL), "", + ; "System\CurrentControlSet\Services\EventLog\System", + ; $(!REG_KEY_READWRITE), KeyProduct ; ifstr(i) $(!NTN_InstallMode) == "fullremove" ; ifstr(i) $(KeyProduct) != $(KeyNull) ; endif ; endif ; CloseRegKey $(KeyProduct) ifstr(i) $(!NTN_InstallMode) == "fullremove" install InstallRemove endif set RetData = >( $(RetData), { $(RemoveIndex), + $(RemoveName), + $(RemoveTitle), + $(RemoveDesc), + $(!NTN_InstallMode), + } ) ifstr(i) $(RemoveMode) == "Full" goto remove_next_piece endif ;++++++++++++++++++++++++++++++++++++ ; ; remove_product: ; ;++++++++++++++++++++++++++++++++++++ remove_product = + goto finish_remove_component ;++++++++++++++++++++++++++++++++++++ ; ; finish_remove_component: ; ;++++++++++++++++++++++++++++++++++++ finish_remove_component = + ; ; See if this was the last instance ; ;/************************************************************************/ ;/* Load up the NCPA library ;/************************************************************************/ ifstr(i) $(!NCPA_HANDLE) == "" install LoadNCPALibrary set UnloadNCPA = $(!True) endif shell $(!UtilityInf) FindSNAProductServices + $(ProductRegBase), + $(ProductFullName) ifint $($ShellCode) != 0 goto ShellCodeError endif set Status = $($R0) set SvcIndexList = $($R1) set SvcNameList = $($R2) set SvcTitleList = $($R3) set SvcDescList = $($R4) ifstr(i) $(Status) == STATUS_NOSUCHPRODUCT ;/**********************************************************************/ ;/* Remove the event log entry */ ;/**********************************************************************/ OpenRegKey $(!REG_H_LOCAL), "", + "System\CurrentControlSet\Services\EventLog\Application", + $(!REG_KEY_READWRITE), KeyProduct ifstr(i) $(KeyProduct) != $(KeyNull) DeleteRegTree $(KeyProduct) $(EVNDEMO) CloseRegKey $(KeyProduct) endif ;/************************************************************************/ ;/* Check to see whether the AS/400 Emulator Service is running. */ ;/************************************************************************/ shell $(UtilityInf) GetServiceBaseKey set SvcBaseKey = $($R1) install LoadServiceLibrary ifstr(i) $(!SVCHANDLE) == "" set ErrMesg = "Cannot load service library" set ErrProc = "remove_component" set ErrFunc = "LoadServiceLibrary" goto fatal_registry endif LibraryProcedure SvcStatus $(!SVCHANDLE) SNAQueryService $(TP5250) ifstr(i) $(SvcStatus) != "SERVICE_STOPPED" ifstr(i) $(SvcStatus) != "SERVICE_STOP_PENDING" ifstr(i) $(SvcStatus) != "SERVICE_DISABLED" ifstr(i) $(SvcStatus) != "ERROR" shell $(!SubroutineInf) SetupMessage $(!STF_LANGUAGE) NONFATAL + "The Demo 5250 Emulator Service is running. It will be stopped." LibraryProcedure SvcStatus $(!SVCHANDLE) SNAStopService $(TP5250) endif endif endif endif install FreeServiceLibrary ;/*************************************************************************/ ;/* Make the call to delete the service ;/*************************************************************************/ set FLibraryErrCtl = 1 LibraryProcedure DelResult, $(!NCPA_HANDLE), CPlSetup, $(!STF_HWND), DELETESVC, $(TP5250) set Status = STATUS_FAILED ifstr(i) $(DelResult) != "" ifstr(i) $(DelResult) != {} ifstr(i) *( $(DelResult), 1 ) == "0" set Status = STATUS_SUCCESSFUL endif endif endif ;/************************************************************************/ ;/* Check to see whether the ODBC Emulator Service is running. */ ;/************************************************************************/ shell $(UtilityInf) GetServiceBaseKey set SvcBaseKey = $($R1) install LoadServiceLibrary ifstr(i) $(!SVCHANDLE) == "" set ErrMesg = "Cannot load service library" set ErrProc = "remove_component" set ErrFunc = "LoadServiceLibrary" goto fatal_registry endif LibraryProcedure SvcStatus $(!SVCHANDLE) SNAQueryService $(TPODBC) ifstr(i) $(SvcStatus) != "SERVICE_STOPPED" ifstr(i) $(SvcStatus) != "SERVICE_STOP_PENDING" ifstr(i) $(SvcStatus) != "SERVICE_DISABLED" ifstr(i) $(SvcStatus) != "ERROR" shell $(!SubroutineInf) SetupMessage $(!STF_LANGUAGE) NONFATAL + "The Demo ODBC Service is running. It will be stopped." LibraryProcedure SvcStatus $(!SVCHANDLE) SNAStopService $(TPODBC) endif endif endif endif install FreeServiceLibrary ;/*************************************************************************/ ;/* Make the call to delete the service ;/*************************************************************************/ set FLibraryErrCtl = 1 LibraryProcedure DelResult, $(!NCPA_HANDLE), CPlSetup, $(!STF_HWND), DELETESVC, $(TPODBC) set Status = STATUS_FAILED ifstr(i) $(DelResult) != "" ifstr(i) $(DelResult) != {} ifstr(i) *( $(DelResult), 1 ) == "0" set Status = STATUS_SUCCESSFUL endif endif endif endif install FreeNCPALibrary goto successful ;++++++++++++++++++++++++++++++++++++ ;++++++++++++++++++++++++++++++++++++ ; ; Escape Hatches: ; ;++++++++++++++++++++++++++++++++++++ ;++++++++++++++++++++++++++++++++++++ ;++++++++++++++++++++++++++++++++++++ ; ; successful: ; this part actually copies the files if the DoCopy variable is on ; ;++++++++++++++++++++++++++++++++++++ successful = + set Status = STATUS_SUCCESSFUL goto end ;++++++++++++++++++++++++++++++++++++ ; ; warning_msg: ; a warning display ; ;++++++++++++++++++++++++++++++++++++ warning_msg = + ; TODO: This is how the template does warnings. Do we have a better way? ; Do we want to do it differently? ; CODENAME: WARNINGS Shell $(!SubroutineInf) SetupMessage, $(!STF_LANGUAGE), "WARNING", $(Error) ifint $($ShellCode) != 0 goto ShellCodeError endif set DLGEVENT = $($R1) ifstr(i) $(DLGEVENT) == "OK" goto $(to) else-ifstr(i) $(DLGEVENT) == "CANCEL" goto $(from) else set Status = STATUS_FAILED goto end endif ;++++++++++++++++++++++++++++++++++++ ; ; nonfatal_msg: ; a non-fatal display ; ;++++++++++++++++++++++++++++++++++++ nonfatal_msg = + ; TODO: See CODENAME: WARNINGS Shell $(!SubroutineInf) SetupMessage, $(!STF_LANGUAGE), "NONFATAL", $(Error) ifint $($ShellCode) != 0 goto ShellCodeError endif set DLGEVENT = $($R1) ifstr(i) $(DLGEVENT) == "OK" goto $(from) else goto "end" endif ;++++++++++++++++++++++++++++++++++++ ; ; fatal_registry: ; something failed in the registry access ; ;++++++++++++++++++++++++++++++++++++ fatal_registry = + set Error = + "Fatal Registry Error:"$(!LF)+ $(ErrMesg)$(!LF)+ "File: "$(ThisInf)$(!LF)+ "Procedure: "$(ErrProc)$(!LF)+ "Function: "$(ErrFunc) goto fatal_msg ;++++++++++++++++++++++++++++++++++++ ; ; fatal_msg: ; a fatal error display ; ;++++++++++++++++++++++++++++++++++++ fatal_msg = + ; TODO: See CODENAME: WARNINGS Shell $(!SubroutineInf) SetupMessage, $(!STF_LANGUAGE), "FATAL", $(Error) ifint $($ShellCode) != 0 goto ShellCodeError endif goto set_status_failed ;++++++++++++++++++++++++++++++++++++ ; ; ShellCodeError: ; a shell error to be displayed ; ;++++++++++++++++++++++++++++++++++++ ShellCodeError = + ; TODO: See CODENAME: WARNINGS set DlgType = "MessageBox" set STF_MB_TITLE = "Error: "$(SetupTitle) set STF_MB_TEXT = "Shell Code Error" set STF_MB_TYPE = 1 set STF_MB_ICON = 3 set STF_MB_DEF = 1 ui start "Error Message" goto set_status_failed ;++++++++++++++++++++++++++++++++++++ ; ; set_status_failed: ; last step before exiting ; ;++++++++++++++++++++++++++++++++++++ set_status_failed = + set Status = STATUS_FAILED goto end ;++++++++++++++++++++++++++++++++++++ ; ; end: ; this exit point sets the CommonStatus to the current status ; then returns the status and return data ; ;++++++++++++++++++++++++++++++++++++ end = + ifstr(i) $(!IHVDLGHANDLE) != "" FreeLibrary $(!IHVDLGHANDLE) set !IHVDLGHANDLE = "" endif set CommonStatus = $(Status) Return $(CommonStatus) $(RetData) $(Changes) ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; ; INSTALLATION AND FILE SECTION ; ----------------------------- ; This section is responsible for installing the component and listing all ; the necessary files etc. ; ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ;======================================================================== ; ; INSTALL ; ------- ; The IHV should follow the following template for this section. It is ; responsible for file copying and registry initialization. ; ;======================================================================== [InstallRemove] set STF_OVERWRITE = "ALWAYS" set SNADirList = { "hwsetup", "system" } set SNAToList = { "system\hwsetup", "system" } ifstr(i) $(!NTN_InstallMode) == "install" ifstr(i) $(!AddCopy) == "YES" ForListDo $(SNADirList) ifstr(i) $($) != "hwsetup" set Ext = $(ThisFile) else set Ext = "" endif set To = *( $(SNAToList), $(#) ) AddSectionFilesToCopyList "FilesFor_"$($)"_"$(Option) + $(!DriverDir)$(Ext), + $(!SNARootDir)"\"$(To) EndForListDo else AddSectionFilesToCopyList "FilesFor_system_"$(Option) + $(!DriverDir)"snaclasp\"$(Ext), + $(!SNARootDir)"\system" CopyFilesInCopyList endif ifstr(i) $(!DoCopy) == "YES" CopyFilesInCopyList endif else set !_FileRemoveList = {} ForListDo $(SNADirList) set SNADir = *( $(SNAToList), $(#) ) set FullPath = $(!SNARootDir)"\"$(SNADir) set FileList = ^( "FilesFor_"$($)"_"$(Option), 2 ) ForListDo $(FileList) set !_FileRemoveList = >( $(!_FileRemoveList), + $(FullPath)"\"$($) ) EndForListDo EndForListDo endif exit ;======================================================================== ; ; FILES ; ----- ; These should list the files to be installed for each particular option. ; ; FORMAT: ; The format is "FilesFor_" concatenated with the directory where they will ; end up, another underscore, and the option whose files these are. ; Currently, directories that can take files are: ; hwsetup - the inf file, its help and libraries ; ntbin - executables ; ntsys - system files ; The format includes an enumeration constant and a name for each file, as well ; as a number of possible flags ; 1, file1.spu ; 1, file2.spu ; ... ; ;======================================================================== [FilesFor_hwsetup_SNACLASPLS] 1, snaclasp.inf 1, snaclasp.hlp 1, snaclasp.srl [FilesFor_system_SNACLASPLS] 1, snaclasp.dll 1, "3270 Continuous Demo.dem" 1, "3270 Logon Demo.dem" 1, "AS400 Demo.dem" 1, "3270 File Transfer Demo.dem" 1, mainflsh.scr 1, demo5250.scr 1, demoodbc.scr 1, as400tp.exe 1, as400evt.dll 1, ft1kstrt.scr 1, ft1k.scr