; ;; Modified when why ; rmh001 10-Mar-94 Title is DCA X.25/QLLC Link Service ; Link Service service name is DCAX25x ; rmh001 14-Mar-94 Use MSFT-provided link services ; rmh003 15-Mar-94 Device name is DCADL$nn ; ; DCA Change Log ; ; 08/25/93 David Ehrlich - Started with IBMX25.INF (RC1) ; - Changed all "IBM" to "DCA" execpt for IDD_IBMxxxxx ; - Changed all "ibm" to "dca" ; - Changed string item under [Source Media Descriptions] ; - Changed string items under [OptionsTextENG] ; - Changed 2 definitions of NetRulesTitle ; - Numerous changes to implement board configuration ; the same way it is being done for DCA SDLC. ; ; 08/31/93 David Ehrlich - Added code to check and set Data1LS and Data2LS ; entries in the ExtraParameters section of DCASYNC. ; They will be the name of the link service that ; DCAISCAConfigurationData1 and ; DCAISCAConfigurationData2 cooraspond to. ; - Added [FilesFor_hwsetup_DCAX25DD] section. ; ; 09/2/93 David Ehrlich - Changed default setting of LNUA from ; "000000000000000" to "" ; ; 10/08/93 David Ehrlich - Added Microsoft RC 2 changes ; ;************************************************************************ ;************************************************************************ ; ; DCAX25.INF ; ; DCA X25 Link Service and Device Driver INF file ; ; History: ; t-danfr Aug 05, 92 Initial Design ; ; Notes: ; 1) This file is based on the template.inf file that is distributed ; to IHV/ISV's. ; ;************************************************************************ ;************************************************************************ ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; ; 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 (DCA)" ;======================================================================== ; ; 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] DCAX25LS DCAX25DD ;======================================================================== ; ; 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] DCAX25LS = "DCA X.25 (QLLC) Link Service" DCAX25DD = "DCA SDLC/X.25 Device Driver" ;======================================================================== ; ; 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] DCAX25LS ;======================================================================== ; ; 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 ; ;======================================================================== [SNAOptionAddsDCAX25LS] DCAX25DD ;======================================================================== ; ; 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] ; ... ; ;======================================================================== [InstallStepsDCAX25LS] AddFilesToCopyList = YES CopyFilesInCopyList = YES [InstallStepsDCAX25DD] AddFilesToCopyList = YES CopyFilesInCopyList = NO ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; ; 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" Radio5 = "5" Radio6 = "6" Radio7 = "7" Radio8 = "8" Radio9 = "9" ;++++++++++++++++++++++++++++++++++++ ; ; 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_IBMX25DDCONFIG = 101 IDD_IBMX25LSCONFIG = 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. ; ;++++++++++++++++++++++++++++++++++++ [FileConstants] !UtilityInf = $(!SNARootDir)"\SETUPUTL.INF" !SubroutineInf = $(!STF_WINDOWSSYSPATH)"\SUBROUTN.INF" DialogLibrary = $(!SNARootDir)"\SETUP.SRL" ThisFile = "DCAX25" ThisInf = $(ThisFile)".INF" ThisSrl = $(ThisFile)".SRL" ThisHlp = $(ThisFile)".HLP" HlpMin = "100" HlpMax = "103" $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. ; ;++++++++++++++++++++++++++++++++++++ [FileConstantsDCAX25LS] ; ; Product Info ; ProductVersion = "1.0" ProductName = "DCAX25LS" ProductFullName = $(ProductName)"_"$(ProductVersion)"_"$(Instance) ProductRegBase = $(!NTN_SoftwareBase)"\Microsoft" ProductType = "Link" ProductImagePath = "SNALINK.EXE" ProductDepends = {} ProductParams = {} ProductExtraParams = {} ProductExclusive = $(FALSE) ProductDLL = "IBMX25.DLL" ;;rmh002 ProductServicePrefix = "DCAX25" ProductServiceQuery = $(TRUE) ; ; Registry Key Information ; SNAServiceType = "CESX25" ; ; NetRules Stuff ; NetRulesClass = "snax25link snalink" NetRulesTitle = "DCA X.25 Link Service" NetRulesUse = "service yes yes" NetRulesBindable = "snax25link snasyncdriver non non 100" NetRulesType = "dcax25_"$(Instance)" snax25link" FullInfName = $(!SNARootDir)"\system\hwsetup\"$(ThisInf) SoftwareType = "service" [FileConstantsDCAX25DD] ; ; Product Info ; ProductVersion = "1.0" ProductName = "DCASYNCDD" ProductFullName = $(ProductName)"_"$(ProductVersion)"_"$(Instance) ProductRegBase = $(!NTN_SoftwareBase)"\Microsoft" ProductType = "Driver" ProductImagePath = "DCASYNC.SYS" ProductDepends = {} ProductParams = {} ProductExtraParams = {} ProductExclusive = $(TRUE) ProductDLL = "" ProductServicePrefix = "DCASYNC" ProductServiceQuery = $(FALSE) ; ; Registry Key Information ; SNAServiceType = "DRIVER" ; ; NetRules Stuff ; NetRulesClass = "snasyncdriver basic yes" NetRulesTitle = "DCA SDLC/X.25 Device Driver" NetRulesUse = "driver yes yes" NetRulesBindable = "" NetRulesType = "dcasyncdd snasyncdriver" FullInfName = $(!SNARootDir)"\system\hwsetup\"$(ThisInf) SoftwareType = "driver" ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; ; 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 !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 = "DCA X.25 Link Service Setup" [FileConstantsDCAX25LS_ENG] ProductTitle = "DCA X.25 Link Service" ProductDesc = "DCA X.25 Link Service for "$(!SNA_ProductName) [FileConstantsDCAX25DD_ENG] ProductTitle = "DCA SDLC/X.25 Device Driver" ProductDesc = "DCA SDLC/X.25 Device Driver 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] LoadLibrary "x" $(!STF_WINDOWSSYSPATH)\setupdll.dll !LIBHANDLE exit [date] Now = {} ? $(!LIBHANDLE) GetSystemDate [FreeSetupLibrary] FreeLibrary $(!LIBHANDLE) 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] ; ... ; ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: [DoX25LSConfigENG] DlgTemplate = IDD_IBMX25LSCONFIG DlgType = "RadioCombination" Caption = $(!P:SetupTitle) DlgText1 = "Service Name: "$(ServiceName) EditLabel1 = "&Title:" EditLabel2 = "Local &NUA Address:" EditLabel3 = "T&1 Timeout (0.1s):" EditLabel4 = "N&2 Retry Limit:" EditLabel5 = "Outgoing SVC:" EditLabel6 = "Two-Way SVC:" EditLabel7 = "Incoming SVC:" EditLabel8 = "PVC:" EditGroup1 = "Channel Ran&ges" EditTextIn = { $(ServiceTitle), $(LNUA), + $(T1Timeout), $(N2Retry), + $(OSVCRng), $(2SVCRng), + $(ISVCRng), $(PVCRng) } EditTextLim = { 40, 15, 3, 3, 9, 9, 9, 9 } ComboLabel2 = "&W: Default L3 Window Size:" ComboListIn2 = { "1", "2", "3", "4", "5", "6", "7" } ComboListOut2 = $(L3Window) ComboLabel3 = "&P: Default L3 Packet Size:" ComboListIn3 = { "64", "128", "256", "512" } ComboListOut3 = $(L3PktSz) ComboLabel4 = "&K: L2 Window Size:" ComboListIn4 = { "1", "2", "3", "4", "5", "6", "7" } ComboListOut4 = $(L2Window) ComboLabel5 = "&Interrupt" ComboLabel6 = "I/&O Address" ComboLabel7 = "&DMA Channel" NotifyFields = { "NO", "NO", "NO", "NO" } RadioGroup1 = "&Line Type" RadioText1 = "Leased" RadioText2 = "Switched: Server-Stored Number" RadioText3 = "Switched: Modem-Stored Number" RadioText4 = "Switched: Manual Dial" RadioGroup2 = "Data &Rate" RadioText5 = "High" RadioText6 = "Low" RadioGroup3 = "&Encoding" RadioText7 = "NRZ" RadioText8 = "NRZI" RadioOptionsGreyed = {} CheckText1 = "Accept Re&verse Charge" CheckText2 = "&Startup Restart" CheckText3 = "Select Standb&y" CheckText4 = "Incoming &Filter" CBOptionsGreyed = {} HelpContext = #( HelpContextIDs, $(DlgTemplate), 1 ) ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; ; 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 ; ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ;()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()() ; ; DoX25LSConfig: ; ; DESCRIPTION: This shell script pops up a dialog to get the configuration ; of this product. ; ; INPUT: $($0) : Service Name ; $($1) : Current Title ; $($2) : Current Driver Index ; $($3) : Current Local NUA Address ; $($4) : Current L3 Window Size ; $($5) : Current L3 Packet Size ; $($6) : Current L2 Window Size ; $($7) : Current T1 Timeout ; $($8) : Current N2 Retry Limit ; $($9) : Current Accept Reverse Charge ; $($10): Current Startup Restart ; $($11): Current Select Standby ; $($12): Current Outgoing SVC Range ; $($13): Current Two-Way SVC Range ; $($14): Current Incoming SVC Range ; $($15): Current PVC Range ; $($16): Current Data Rate ; $($17): Current Encoding ; $($18): Current Incoming Filter status ; $($19): Current Line Type ; $($20): Current Manual Dial setting ; ; OUTPUT: $($R0): STATUS: One of the above ; $($R1): Changes flag ; $($R2) ; ... : New values of above variables ; $($R20): In their respective slots ; ;()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()() [DoX25LSConfig] set ServiceName = $($0) set ServiceTitle = $($1) set DriverIndex = $($2) set LNUA = $($3) set L3Window = $($4) set L3PktSz = $($5) set L2Window = $($6) set T1Timeout = $($7) set N2Retry = $($8) set AcceptRevCh = $($9) set Restart = $($10) set Standby = $($11) set OSVCRng = $($12) set 2SVCRng = $($13) set ISVCRng = $($14) set PVCRng = $($15) set DataRate = $($16) set NRZI = $($17) set FilterIncoming = $($18) set LineType = $($19) set FRadio4 = $($20) set SvDriverIndex = $($2) set SvLNUA = $($3) set SvL3Window = $($4) set SvL3PktSz = $($5) set SvL2Window = $($6) set SvT1Timeout = $($7) set SvN2Retry = $($8) set SvAcceptRevCh = $($9) set SvRestart = $($10) set SvStandby = $($11) set SvOSVCRng = $($12) set Sv2SVCRng = $($13) set SvISVCRng = $($14) set SvPVCRng = $($15) set SvDataRate = $($16) set SvNRZI = $($17) set SvFilterIncoming = $($18) set SvLineType = $($19) set SvRadio4 = $($20) set Status = STATUS_SUCCESSFUL set Changes = 0 ; ; Read in all registry entries related to DCASYNC ; OpenRegKey $(!REG_H_LOCAL), "", "SYSTEM\CurrentControlSet\Services\DCASYNC\Parameters\ExtraParameters", $(!REG_KEY_READ), KeyDriver ifstr(i) $(KeyDriver) == $(KeyNull) DCASYNCcfg1 = 0 DCASYNCcfg2 = 0 DCASYNCls1 = "" DCASYNCls2 = "" else GetRegValue $(KeyDriver) "DCAISCAConfigData1" DCASYNCcfg1 GetRegValue $(KeyDriver) "DCAISCAConfigData2" DCASYNCcfg2 GetRegValue $(KeyDriver) "Data1LS" DCASYNCls1 GetRegValue $(KeyDriver) "Data2LS" DCASYNCls2 set DCASYNCcfg1 = *( $(DCASYNCcfg1), 4 ) set DCASYNCcfg2 = *( $(DCASYNCcfg2), 4 ) set DCASYNCls1 = *( $(DCASYNCls1), 4 ) set DCASYNCls2 = *( $(DCASYNCls2), 4 ) CloseRegKey $(KeyDriver) endif ; ; See if this is a new LS, and if so then is there is room to ; hold it ; ifstr(i) $(ServiceName) == $(DCASYNCls1) goto ConfigLS010 endif ifstr(i) $(ServiceName) == $(DCASYNCls2) goto ConfigLS010 endif ifstr(i) $(DCASYNCls1) == "" goto ConfigLS010 endif ifstr(i) $(DCASYNCls2) == "" goto ConfigLS010 endif shell $(!SubroutineInf) SetupMessage $(!STF_LANGUAGE) + NONFATAL "The maximum of 2 DCA SDLC/X.25 boards are already configured." Return $(Status), $(Changes), $(ServiceTitle), $(DriverIndex), + $(LNUA), $(L3Window), $(L3PktSz), $(L2Window), $(T1Timeout), + $(N2Retry), $(AcceptRevCh), $(Restart), $(Standby), + $(OSVCRng), $(2SVCRng), $(ISVCRng), $(PVCRng), $(DataRate), + $(NRZI), $(FilterIncoming), $(LineType), $(FRadio4) ConfigLS010 =+ read-syms DialogConstants read-syms DialogConstants$(!STF_LANGUAGE) read-syms DoX25LSConfig$(!STF_LANGUAGE) ; ; Set up choices based on bus type ; ifstr(i) $(!STF_BUSTYPE) == "MCA" set ComboListIn5 = { "3", "4", "7" } set ComboListIn6 = { "380-387", "388-38F", "3A0-3A7", "3A8-3AF" } set ComboListIn7 = { "1", "5", "7", "None" } else set ComboListIn5 = { "3", "4", "7" } set ComboListIn6 = { "380-387", "388-38F", "3A0-3A7", "370-377" } set ComboListIn7 = { "1", "3", "None" } endif ; ; Figure out if this is a new or modify config and set DriverParams ; accordingly. ; set DriverParams = 0 ifstr(i) $(ServiceName) == $(DCASYNCls1) set DriverParams = $(DCASYNCcfg1) endif ifstr(i) $(ServiceName) == $(DCASYNCls2) set DriverParams = $(DCASYNCcfg2) endif ifint $(DriverParams) == 0 set DriverParams = "310" endif ; ; Figure out what board settings were previously chosen. ; set Temp = $(DriverParams) ifint $(Temp) > 700 set ComboListOut5 = "7" set-sub Temp = $(Temp),700 else-ifint $(Temp) > 400 set ComboListOut5 = "4" set-sub Temp = $(Temp),400 else set ComboListOut5 = "3" set-sub Temp = $(Temp),300 endif ifint $(Temp) >= 50 set ComboListOut6 = "3A8-3AF" set-sub Temp = $(Temp),50 else-ifint $(Temp) >= 40 set ComboListOut6 = "370-377" set-sub Temp = $(Temp),40 else-ifint $(Temp) >= 30 set ComboListOut6 = "3A0-3A7" set-sub Temp = $(Temp),30 else-ifint $(Temp) >= 20 set ComboListOut6 = "388-38F" set-sub Temp = $(Temp),20 else set ComboListOut6 = "380-387" set-sub Temp = $(Temp),10 endif ifint $(Temp) == 1 set ComboListOut7 = "1" else-ifint $(Temp) == 3 set ComboListOut7 = "3" else-ifint $(Temp) == 5 set ComboListOut7 = "5" else-ifint $(Temp) == 7 set ComboListOut7 = "7" else set ComboListOut7 = "None" endif set ComboListItemsIn = { ComboListIn2, ComboListIn3, ComboListIn4, ComboListIn5, ComboListIn6, ComboListIn7 } set ComboListItemsOut = { ComboListOut2, ComboListOut3, ComboListOut4, ComboListOut5, ComboListOut6, ComboListOut7 } set-add Temp = $(LineType), 1 set RadioIn1 = *( {1,3,2}, $(Temp) ) ifstr(i) $(FRadio4) == $(!True) set RadioIn1 = "4" endif ifint $(DataRate) == 0 set RadioIn2 = $(Radio6) else set RadioIn2 = $(Radio5) endif ifint $(NRZI) == 0 set RadioIn3 = $(Radio7) else set RadioIn3 = $(Radio8) endif set RadioIn = { $(RadioIn1), $(RadioIn2), $(RadioIn3) } set TmpCheckItemsIn = { $(AcceptRevCh), $(Restart), $(Standby), + $(FilterIncoming) } set CheckItemsIn = {} ForListDo $(TmpCheckItemsIn) ifint $($) == 0 set CheckItemsIn = >( $(CheckItemsIn), "OFF" ) else set CheckItemsIn = >( $(CheckItemsIn), "ON" ) endif EndForListdo begin = + set Status = STATUS_SUCCESSFUL RefreshDlg =+ ui start $(DlgTemplate) $(!IHVDLGHANDLE) ifstr(i) $(DLGEVENT) == "Exit" set Status = STATUS_USERCANCEL else set Status = STATUS_SUCCESSFUL set Error = {} ; ; Compute new driver index ; ;--- ifstr(i) $(DCASYNCls1) == "" ifstr(i) $(DCASYNCls2) == "" ; Nothing in the first slot and nothing in the second, assume first ; index entry as appropriate ifstr(i) $(!NTN_InstallMode) == install ifstr(i) $(!STF_BUSTYPE) == "MCA" set DriverIndex = "05" else set DriverIndex = "03" endif else ; Must be config set DriverIndex = "03" ifstr(i) $(!BBDeviceName) == "DCADL$03" set DriverIndex = "03" else-ifstr(i) $(!BBDeviceName) == "DCADL$04" set DriverIndex = "04" else-ifstr(i) $(!BBDeviceName) == "DCADL$05" set DriverIndex = "05" else-ifstr(i) $(!BBDeviceName) == "DCADL$06" set DriverIndex = "06" endif endif else ; We had a second slot entry assume the proper idx ifstr(i) $(!NTN_InstallMode) == install ifstr(i) $(!STF_BUSTYPE) == "MCA" set DriverIndex = "06" else set DriverIndex = "04" endif else set DriverIndex = "03" ifstr(i) $(!BBDeviceName) == "DCADL$03" set DriverIndex = "03" else-ifstr(i) $(!BBDeviceName) == "DCADL$04" set DriverIndex = "04" else-ifstr(i) $(!BBDeviceName) == "DCADL$05" set DriverIndex = "05" else-ifstr(i) $(!BBDeviceName) == "DCADL$06" set DriverIndex = "06" endif endif endif else ; This is if we had one in the first slot. So set the idx for ; the first one ifstr(i) $(!NTN_InstallMode) == install ; We are installing ifstr(i) $(!STF_BUSTYPE) == "MCA" set DriverIndex = "06" else set DriverIndex = "04" endif else ; We must be configuring set DriverIndex = "03" ifstr(i) $(!BBDeviceName) == "DCADL$03" set DriverIndex = "03" else-ifstr(i) $(!BBDeviceName) == "DCADL$04" set DriverIndex = "04" else-ifstr(i) $(!BBDeviceName) == "DCADL$05" set DriverIndex = "05" else-ifstr(i) $(!BBDeviceName) == "DCADL$06" set DriverIndex = "06" endif endif endif ;--- ; ; Compute new driver params ; set DriverParams = 0 ifint $(ComboListOut5) == 3 set-add DriverParams = $(DriverParams),300 else-ifint $(ComboListOut5) == 4 set-add DriverParams = $(DriverParams),400 else set-add DriverParams = $(DriverParams),700 endif ifstr(i) $(ComboListOut6) == "380-387" set-add DriverParams = $(DriverParams),10 endif ifstr(i) $(ComboListOut6) == "388-38F" set-add DriverParams = $(DriverParams),20 endif ifstr(i) $(ComboListOut6) == "3A0-3A7" set-add DriverParams = $(DriverParams),30 endif ifstr(i) $(ComboListOut6) == "370-377" set-add DriverParams = $(DriverParams),40 endif ifint $(ComboListOut7) == 1 set-add DriverParams = $(DriverParams),1 else-ifint $(ComboListOut7) == 3 set-add DriverParams = $(DriverParams),3 else set-add DriverParams = $(DriverParams),0 endif ; ; See if new driver params conflicts with another X.25 driver ; set DPOther = 0 ifstr(i) $(ServiceName) == "SnaX251" ifstr(i) $(DCASYNCls1) == "SnaX252" set DPOther = $(DCASYNCcfg1) endif ifstr(i) $(DCASYNCls2) == "SnaX252" set DPOther = $(DCASYNCcfg2) endif else ifstr(i) $(DCASYNCls1) == "SnaX251" set DPOther = $(DCASYNCcfg1) endif ifstr(i) $(DCASYNCls2) == "SnaX251" set DPOther = $(DCASYNCcfg2) endif endif ifint $(DPOther) == 0 set DPOther = "999" endif set DPThis = $(DriverParams) ; ; Check the IRQ ; set-div i1 = $(DPThis), 100 set-div i2 = $(DPOther), 100 ifint $(i1) == $(i2) shell $(!SubroutineInf) SetupMessage $(!STF_LANGUAGE) NONFATAL "This interrupt setting is in conflict with the other DCA X.25 board." ui pop 1 goto RefreshDlg else set-mul tem = $(i1), 100 set-sub DPThis = $(DPThis), $(tem) set-mul tem = $(i2), 100 set-sub DPOther = $(DPOther), $(tem) endif ; ; Check the I/O address ; set-div i1 = $(DPThis), 10 set-div i2 = $(DPOther), 10 ifint $(i1) == $(i2) shell $(!SubroutineInf) SetupMessage $(!STF_LANGUAGE) NONFATAL "This I/O address setting is in conflict with the other DCA X.25 board." ui pop 1 goto RefreshDlg else set-mul tem = $(i1), 10 set-sub DPThis = $(DPThis), $(tem) set-mul tem = $(i2), 10 set-sub DPOther = $(DPOther), $(tem) endif ; ; Check the DMA ; set-div i1 = $(DPThis), 1 set-div i2 = $(DPOther), 1 ifint $(i1) == $(i2) ifint $(i1) > 0 shell $(!SubroutineInf) SetupMessage $(!STF_LANGUAGE) NONFATAL "This DMA channel setting is in conflict with the other DCA X.25 board." ui pop 1 goto RefreshDlg endif endif set LNUA = *( $(EditTextOut), 2 ) set L3Window = $(ComboListOut2) set L3PktSz = $(ComboListOut3) set L2Window = $(ComboListOut4) set T1Timeout = *( $(EditTextOut), 3 ) ifint $(T1Timeout) < 1 set Error = >( $(Error), ERROR_T1 ) else-ifint $(T1Timeout) > 100 set Error = >( $(Error), ERROR_T1 ) endif set N2Retry = *( $(EditTextOut), 4 ) ifint $(N2Retry) < 1 set Error = >( $(Error), ERROR_N2 ) else-ifint $(N2Retry) > 100 set Error = >( $(Error), ERROR_N2 ) endif ifstr(i) *( $(CheckItemsOut), 1 ) == "OFF" set AcceptRevCh = 0 else set AcceptRevCh = 1 endif ifstr(i) *( $(CheckItemsOut), 2 ) == "OFF" set Restart = 0 else set Restart = 1 endif ifstr(i) *( $(CheckItemsOut), 3 ) == "OFF" set Standby = 0 else set Standby = 1 endif ; ; Check the SVC/PVC range parameters for validity ; and range. ; set errflag = 0 set errindex = 0 ForListDo { 1 2 3 4 } ifint $(errflag) == 0 ; ; Check for two fields separated by a dash. ; set-add index = $(#), 4 set item = *($(EditTextOut),$(index)) ifstr(i) $(item) == "" set n = 0 set m = 0 set t$(#) = 0 else Split-String *($(EditTextOut),$(index)), "-", list QueryListSize size $(list) ifint $(size) != 3 set errflag = 1 set errindex = $(#) endif ifint $(errflag) == 1 goto _nerr endif set n = *($(list),1) set m = *($(list),3) ; ; Check the two fields are numeric with the first ; less than or equal to the second. ; ifint $(n) > 0 goto _nok else-ifstr $(n) == "0" goto _nok else set errflag = 1 set errindex = $(#) endif _nok =+ ifint $(m) > 0 goto _mok else-ifstr $(m) == "0" goto _mok else set errflag = 1 set errindex = $(#) endif _mok =+ ifint $(errflag) == 0 ifint $(n) > $(m) set errflag = 2 set errindex = $(#) endif ifint $(errflag) > 0 goto _nerr endif ; ; Save the fields for later totalling. ; set-sub t$(#) = $(m), $(n) else set t$(#) = 0 endif endif ; item == "" endif ; errflag == 0 _nerr =+ EndForlistDo set desclist = { "Outgoing SVC", "Two-Way SVC", "Incoming SVC", "PVC" } ifint $(errflag) == 1 shell $(!SubroutineInf) SetupMessage $(!STF_LANGUAGE) STATUS + "Please enter the "*($(desclist),$(errindex))" range value as two numbers"+ " separated by a hyphen, for example, ""1018-1024""." goto RefreshDlg else-ifint $(errflag) == 2 shell $(!SubroutineInf) SetupMessage $(!STF_LANGUAGE) STATUS + "Please enter the "*($(desclist),$(errindex))" range value so that the"+ " first number is less than or equal to the second." goto RefreshDlg endif ; ; Add up ranges and check total < 16. ; set total = 0 ForListDo { 1 2 3 4 } set-add total = $(total), $(t$(#)) EndForListDo ifint $(total) > 16 shell $(!SubroutineInf) SetupMessage $(!STF_LANGUAGE) STATUS + "The sum total of all four channel ranges cannot be greater than 16." goto RefreshDlg endif ; ; All range values should be okay at this point. ; set OSVCRng = *( $(EditTextOut), 5 ) set 2SVCRng = *( $(EditTextOut), 6 ) set ISVCRng = *( $(EditTextOut), 7 ) set PVCRng = *( $(EditTextOut), 8 ) set LineType = *( {0,2,1,1}, *( $(RadioOut), 1 )) ifstr(i) *( $(RadioOut), 1 ) == "4" set FRadio4 = $(!True) else set FRadio4 = $(!False) endif ifint *( $(RadioOut), 2 ) == $(Radio5) set DataRate = 1 else-ifint *( $(RadioOut), 2 ) == $(Radio6) set DataRate = 0 endif ifint *( $(RadioOut), 3 ) == $(Radio7) set NRZI = 0 else-ifint *( $(RadioOut), 3 ) == $(Radio8) set NRZI = 1 endif ifstr(i) *( $(CheckItemsOut), 4 ) == "OFF" set FilterIncoming = 0 else set FilterIncoming = 1 endif ; ; 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." ui pop 1 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)"." ui pop 1 goto RefreshDlg endif ForListDo $(Error) set Status = STATUS_REPEAT ifstr(i) $($) == ERROR_T1 shell $(!P:SubroutineInf) SetupMessage $(!STF_LANGUAGE) + "NONFATAL" + "The T1 Timeout parameter must be a number"$(!LF)+ "between 1 and 100."$(!LF)$(!LF)+ "Please reconfigure." endif ifstr(i) $($) == ERROR_N2 shell $(!P:SubroutineInf) SetupMessage $(!STF_LANGUAGE) + "NONFATAL" + "The N2 Retry parameter must be a number"$(!LF)+ "between 1 and 100."$(!LF)$(!LF)+ "Please reconfigure." endif EndForListDo ifstr(i) $(DriverIndex) != $(SvDriverIndex) set Changes = 1 endif ifstr(i) $(LNUA) != $(SvLNUA) set Changes = 1 endif ifstr(i) $(L3Window) != $(SvL3Window) set Changes = 1 endif ifstr(i) $(L3PktSz) != $(SvL3PktSz) set Changes = 1 endif ifstr(i) $(L2Window) != $(SvL2Window) set Changes = 1 endif ifstr(i) $(T1Timeout) != $(SvT1Timeout) set Changes = 1 endif ifstr(i) $(N2Retry) != $(SvN2Retry) set Changes = 1 endif ifstr(i) $(AcceptRevCh) != $(SvAcceptRevCh) set Changes = 1 endif ifstr(i) $(Restart) != $(SvRestart) set Changes = 1 endif ifstr(i) $(Standby) != $(SvStandby) set Changes = 1 endif ifstr(i) $(OSVCRng) != $(SvOSVCRng) set Changes = 1 endif ifstr(i) $(2SVCRng) != $(Sv2SVCRng) set Changes = 1 endif ifstr(i) $(ISVCRng) != $(SvISVCRng) set Changes = 1 endif ifstr(i) $(PVCRng) != $(SvPVCRng) set Changes = 1 endif ifstr(i) $(DataRate) != $(SvDataRate) set Changes = 1 endif ifstr(i) $(NRZI) != $(SvNRZI) set Changes = 1 endif ifstr(i) $(FilterIncoming) != $(SvFilterIncoming) set Changes = 1 endif ifstr(i) $(LineType) != $(SvLineType) set Changes = 1 endif ifstr(i) $(FRadio4) != $(SvFRadio4) set Changes = 1 endif endif ifstr(i) $(Status) == STATUS_REPEAT goto begin endif ; ; Write the new driver params and ls type to the registry ; OpenRegKey $(!REG_H_LOCAL), "", "SYSTEM\CurrentControlSet\Services\DCASYNC\Parameters\ExtraParameters", $(!REG_KEY_READWRITE), KeyDriver ifstr(i) $(KeyDriver) == $(KeyNull) set ErrMesg = "Can't Find Device Driver Service Entry." set ErrProc = "DoSDLCLSConfig" set ErrFunc = "OpenRegKey" goto fatal_registry endif ifstr(i) $(ServiceName) == $(DCASYNCls1) SetRegValue $(KeyDriver) { "DCAISCAConfigData1", $(NoTitle), $(!REG_VT_DWORD), $(DriverParams) } goto ConfigLS090 endif ifstr(i) $(ServiceName) == $(DCASYNCls2) SetRegValue $(KeyDriver) { "DCAISCAConfigData2", $(NoTitle), $(!REG_VT_DWORD), $(DriverParams) } goto ConfigLS090 endif ifstr(i) $(DCASYNCls1) == "" SetRegValue $(KeyDriver) { "DCAISCAConfigData1", $(NoTitle), $(!REG_VT_DWORD), $(DriverParams) } SetRegValue $(KeyDriver) { "Data1LS", $(NoTitle), $(!REG_VT_SZ), $(ServiceName) } goto ConfigLS090 else SetRegValue $(KeyDriver) { "DCAISCAConfigData2", $(NoTitle), $(!REG_VT_DWORD), $(DriverParams) } SetRegValue $(KeyDriver) { "Data2LS", $(NoTitle), $(!REG_VT_SZ), $(ServiceName) } goto ConfigLS090 endif ConfigLS090 =+ CloseRegKey $(KeyDriver) ui pop 1 Return $(Status), $(Changes), $(ServiceTitle), + $(DriverIndex), $(LNUA), $(L3Window), $(L3PktSz), + $(L2Window), $(T1Timeout), $(N2Retry), $(AcceptRevCh), + $(Restart), $(Standby), $(OSVCRng), $(2SVCRng), + $(ISVCRng), $(PVCRng), $(DataRate), $(NRZI), + $(FilterIncoming), $(LineType), $(FRadio4) ;()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()() ; ; 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 ; TODO: Check CODENAME: CASECHECK 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 ; ;()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()() [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 ; ; 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\2.0\Setup", + $(!REG_KEY_READ), KeySNAServices ifstr(i) $(KeySNAServices) != {} GetRegValue $(KeySNAServices) "RootDir" RootDirValue ifstr(i) $(RootDirValue) != "" set !SNARootDir = *( $(RootDirValue), 4 ) endif endif shell $(!UtilityInf) GetBusType ifstr(i) $($R0) == STATUS_SUCCESSFUL set !STF_BUSTYPE = $($R1) else set !STF_BUSTYPE = "ISA" endif ifstr(i) $(!NTN_InstallMode) != "install" read-syms FileConstants read-syms FileConstants$(Option) 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) ; ; This is a Hack. ; Since the NCPA can (now) only configure and remove components, we'll ; assume that it's going to access them inside the SNA Server ; root directory and not in floppy like install would. Therefore, ; DriverDir = SNARootDir. ; At some future point in time, we might consider putting a path in the ; registry. ; set !DriverDir = $(!SNARootDir)"\system\hwsetup\" else ; ; This case shouldn't happen, but I honestly don't know how to deal ; with it when it does. I guess I can check if SNA Server is ; installed, and if it's not, tell the user that it must be installed ; before link services can be installed ; set Hosed = "Probably" 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"$(!LF)+ "restart this link service with the "$(!SNA_ProductName)" 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) 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 {} $(Changes) ;************************************************************************ ;************************************************************************ ; 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 ; ; 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_DCAX25LS ; ;++++++++++++++++++++++++++++++++++++ set_defaults_DCAX25LS = + set ServiceName = $(Option) set ServiceTitle = $(ProductTitle) set ServiceDesc = $(ProductDesc) set DriverIndex = "03" ; DCA SDLC 1 set LNUA = "" set L3Window = "2" set L3PktSz = "128" set L2Window = "7" set T1Timeout = "30" set N2Retry = "10" set AcceptRevCh = "0" set Restart = "1" set Standby = "0" set OSVCRng = "" set 2SVCRng = "0001-0004" set ISVCRng = "" set PVCRng = "" set DataRate = "1" set NRZI = "0" set FilterIncoming = "1" set LineType = "0" ; Leased set Radio4Flag = "0" goto finish_defaults ;++++++++++++++++++++++++++++++++++++ ; ; set_defaults_DCAX25DD ; ;++++++++++++++++++++++++++++++++++++ set_defaults_DCAX25DD = + set ServiceName = $(Option) set ServiceTitle = $(ProductTitle) set ServiceDesc = $(ProductDesc) goto finish_defaults ;++++++++++++++++++++++++++++++++++++ ; ; 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"$(!LF)+ "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 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_DCAX25LS: ; ;++++++++++++++++++++++++++++++++++++ assign_value_DCAX25LS = + ifstr(i) $(ValueName) == "DriverNumber" set DriverNumber = $(ValueData) else-ifstr(i) $(ValueName) == "DeviceName" set DeviceName = $(ValueData) set DriverIndex = "03" set !BBDeviceName = $(ValueData) ifstr(i) $(DeviceName) == "DCADL$03" set DriverIndex = "03" else-ifstr(i) $(DeviceName) == "DCADL$04" set DriverIndex = "04" else-ifstr(i) $(DeviceName) == "DCADL$05" set DriverIndex = "05" else-ifstr(i) $(DeviceName) == "DCADL$06" set DriverIndex = "06" endif else-ifstr(i) $(ValueName) == "LNUA" set LNUA = $(ValueData) else-ifstr(i) $(ValueName) == "L3Window" set L3Window = $(ValueData) else-ifstr(i) $(ValueName) == "L3PktSz" set L3PktSz = $(ValueData) else-ifstr(i) $(ValueName) == "L2Window" set L2Window = $(ValueData) else-ifstr(i) $(ValueName) == "T1Timeout" set T1Timeout = $(ValueData) else-ifstr(i) $(ValueName) == "N2Retry" set N2Retry = $(ValueData) else-ifstr(i) $(ValueName) == "AcceptRevCh" set AcceptRevCh = $(ValueData) else-ifstr(i) $(ValueName) == "Restart" set Restart = $(ValueData) else-ifstr(i) $(ValueName) == "Standby" set Standby = $(ValueData) else-ifstr(i) $(ValueName) == "OSVCRng" set OSVCRng = $(ValueData) else-ifstr(i) $(ValueName) == "2SVCRng" set 2SVCRng = $(ValueData) else-ifstr(i) $(ValueName) == "ISVCRng" set ISVCRng = $(ValueData) else-ifstr(i) $(ValueName) == "PVCRng" set PVCRng = $(ValueData) else-ifstr(i) $(ValueName) == "DataRate" set DataRate = $(ValueData) else-ifstr(i) $(ValueName) == "NRZI" set NRZI = $(ValueData) else-ifstr(i) $(ValueName) == "FilterIncoming" set FilterIncoming = $(ValueData) else-ifstr(i) $(ValueName) == "LineType" set LineType = $(ValueData) else-ifstr(i) $(ValueName) == "Radio4Flag" ifstr(i) $(ValueData) == "1" set Radio4Flag = $(!True) else set Radio4Flag = $(!False) endif endif goto finish_assign_value ;++++++++++++++++++++++++++++++++++++ ; ; assign_value_DCAX25DD: ; ;++++++++++++++++++++++++++++++++++++ assign_value_DCAX25DD = + goto finish_assign_value ;++++++++++++++++++++++++++++++++++++ ; ; finish_assign_value: ; ;++++++++++++++++++++++++++++++++++++ finish_assign_value = + EndForListDo goto assign_extra_$(Option) ;++++++++++++++++++++++++++++++++++++ ; ; assign_extra_DCAX25LS: ; ;++++++++++++++++++++++++++++++++++++ assign_extra_DCAX25LS = + goto finish_assign_extra ;++++++++++++++++++++++++++++++++++++ ; ; assign_extra_DCAX25DD: ; ;++++++++++++++++++++++++++++++++++++ assign_extra_DCAX25DD = + 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_DCAX25LS: ; ;++++++++++++++++++++++++++++++++++++ modify_params_DCAX25LS = + shell "" DoX25LSConfig $(ServiceName), $(ServiceTitle), + $(DriverIndex), $(LNUA), $(L3Window), + $(L3PktSz),$(L2Window), $(T1Timeout), + $(N2Retry), $(AcceptRevCh), $(Restart), + $(Standby), $(OSVCRng), $(2SVCRng), + $(ISVCRng), $(PVCRng), $(DataRate), $(NRZI), + $(FilterIncoming), $(LineType), $(Radio4Flag) ifint $($ShellCode) != 0 goto ShellCodeError endif set Status = $($R0) ifstr(i) $(Status) != STATUS_SUCCESSFUL goto end else set Changes = $($R1) set ServiceTitle = $($R2) set DriverIndex = $($R3) set LNUA = $($R4) set L3Window = $($R5) set L3PktSz = $($R6) set L2Window = $($R7) set T1Timeout = $($R8) set N2Retry = $($R9) set AcceptRevCh = $($R10) set Restart = $($R11) set Standby = $($R12) set OSVCRng = $($R13) set 2SVCRng = $($R14) set ISVCRng = $($R15) set PVCRng = $($R16) set DataRate = $($R17) set NRZI = $($R18) set FilterIncoming = $($R19) set LineType = $($R20) set Radio4Flag = $($R21) set DriverNumber = $(DriveIndex) set DeviceName = "DCADL$"$(DriverIndex) endif goto finish_modify_params ;++++++++++++++++++++++++++++++++++++ ; ; modify_params_DCAX25DD: ; ;++++++++++++++++++++++++++++++++++++ modify_params_DCAX25DD = + 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_DCAX25LS: ; ;++++++++++++++++++++++++++++++++++++ write_params_DCAX25LS = + ifstr(i) $(Radio4Flag) == $(!True) set RadioVal = "1" else set RadioVal = "0" endif set FullOption = $(Option)"_"$(Instance) set ProductParams = { + { IHVDLL , $(NoTitle), $(!REG_VT_SZ), $(ProductDLL) },+ { InfName , $(NoTitle), $(!REG_VT_SZ), $(FullInfName) },+ { InfOption , $(NoTitle), $(!REG_VT_SZ), $(FullOption) },+ { DriverName , $(NoTitle), $(!REG_VT_SZ), "DCASYNC" } + } set ProductExtraParams = { + { DeviceName , $(NoTitle),$(!REG_VT_SZ), $(DeviceName) },+ { LNUA , $(NoTitle),$(!REG_VT_SZ) , $(LNUA) },+ { L1Init , $(NoTitle),$(!REG_VT_DWORD), 1 },+ { L2Start , $(NoTitle),$(!REG_VT_DWORD), 1 },+ { L3Window , $(NoTitle),$(!REG_VT_DWORD), $(L3Window) },+ { L3PktSz , $(NoTitle),$(!REG_VT_DWORD), $(L3PktSz) },+ { L2Window , $(NoTitle),$(!REG_VT_DWORD), $(L2Window) },+ { DiscAction , $(NoTitle),$(!REG_VT_DWORD), 2 },+ { T1Timeout , $(NoTitle),$(!REG_VT_DWORD), $(T1Timeout) },+ { N2Retry , $(NoTitle),$(!REG_VT_DWORD), $(N2Retry) },+ { AcceptRevCh , $(NoTitle),$(!REG_VT_DWORD), $(AcceptRevCh) },+ { Restart , $(NoTitle),$(!REG_VT_DWORD), $(Restart) },+ { Standby , $(NoTitle),$(!REG_VT_DWORD), $(Standby) },+ { OSVCRng , $(NoTitle),$(!REG_VT_SZ) , $(OSVCRng) },+ { 2SVCRng , $(NoTitle),$(!REG_VT_SZ) , $(2SVCRng) },+ { ISVCRng , $(NoTitle),$(!REG_VT_SZ) , $(ISVCRng) },+ { PVCRng , $(NoTitle),$(!REG_VT_SZ) , $(PVCRng) },+ { DataRate , $(NoTitle),$(!REG_VT_DWORD), $(DataRate) },+ { NRZI , $(NoTitle),$(!REG_VT_DWORD), $(NRZI) },+ { FilterIncoming, $(NoTitle),$(!REG_VT_DWORD), $(FilterIncoming)},+ { LineType , $(NoTitle),$(!REG_VT_DWORD), $(LineType) },+ { Radio4Flag , $(NoTitle),$(!REG_VT_DWORD), $(RadioVal) } + } goto finish_write_params ;++++++++++++++++++++++++++++++++++++ ; ; write_params_DCAX25DD: ; ;++++++++++++++++++++++++++++++++++++ write_params_DCAX25DD = + set FullOption = $(Option)"_"$(Instance) set ProductParams = { + { InfName , $(NoTitle), $(!REG_VT_SZ) , $(FullInfName) },+ { InfOption , $(NoTitle), $(!REG_VT_SZ) , $(FullOption) } + } set ProductExtraParams = {} 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_DCAX25LS: ; ;++++++++++++++++++++++++++++++++++++ getbind_DCAX25LS = + set RetData = { {"01", "DCAX25DD", "", "", "getbindings"} } goto finish_getbind_component ;++++++++++++++++++++++++++++++++++++ ; ; getbind_DCAX25DD: ; ;++++++++++++++++++++++++++++++++++++ getbind_DCAX25DD = + 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) ; ; we need to set ourselved 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. ifstr(i) $(Option) == "DCAX25DD" set PN = #( FileConstantsDCAX25LS, ProductName, 1) set PV = #( FileConstantsDCAX25LS, ProductVersion, 1) shell $(!UtilityInf) FindSNAProductServices $(ProductRegBase) + $(PN)"_"$(PV) set _Status = $($R0) set _List = $($R1) ifstr(i) $(_List) != {} goto successful endif shell $(!UtilityInf) FindSNAProductServices $(ProductRegBase) + "DCASDLCLS_1.0" set _Status = $($R0) set _List = $($R1) ifstr(i) $(_Status) == STATUS_FAILED goto set_status_failed endif ifstr(i) $(_List) != {} goto successful endif endif endif 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 ; ; 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! ; ifstr(i) $(Option) == "DCAX25DD" set Another = $(!False) set KeySM = $(KeyNull) OpenRegKey $(!REG_H_LOCAL) "" "Software\Microsoft" $(!REG_KEY_READ) KeySM ifstr(i) $(KeySM) != $(KeyNull) EnumRegKey $(KeySM) TmpList ForListDo $(TmpList) ; look at every key under Software\Microsoft ifstr(i) $(Another) == $(!False) ; skip the rest if we found one set KeyCV = $(KeyNull) OpenRegKey $(KeySM) "" *($($),1)"\CurrentVersion" $(!REG_KEY_READ) KeyCV ifstr(i) $(KeyCV) != $(KeyNull) set SnaVerValue = "" GetRegValue $(KeyCV) "SNAVersion" SnaVerValue ifstr(i) $(SnaVerValue) != "" ; it's an SNA component set SWTypeValue = "" GetRegValue $(KeyCV) "SoftwareType" SWTypeValue ifstr(i) $(SWTypeValue) != "" ; it's an SNA component ifstr(i) *($(SWTypeValue),4) == "service" ; link service set SvcNameValue = "" GetRegValue $(KeyCV) "ServiceName" SvcNameValue ifstr(i) $(SvcNameValue) != "" set LoopSvcName = *($(SvcNameValue),4) ifstr(i) $(LoopSvcName) != $(ServiceName) ; REVIEW: must be link service svcname ifstr(i) $(LoopSvcName) != "SnaServr" ; Now we know we're a link service and we're not the ; same one we're trying to remove. Let's see what ; we're bound to. set KeyLnk = $(KeyNull) OpenRegKey $(!REG_H_LOCAL) "" + "System\CurrentControlSet\Services\"$(LoopSvcName)"\Linkage" + $(!REG_KEY_READ) KeyLnk ifstr(i) $(KeyLnk) != $(KeyNull) set BindValue = "" GetRegValue $(KeyLnk) "Bind" BindValue ifstr(i) $(BindValue) != "" set BindList = *($(BindValue),4) ForListDo $(BindList) Split-String $($) "\" BindStr QueryListSize BindSize $(BindStr) set BindCmp = *($(BindStr),$(BindSize)) ; The acid test... ifstr(i) $(BindCmp) == $(ProductServicePrefix) set Another = $(!True) endif EndForListDo endif CloseRegKey $(KeyLnk) endif ; KeyLnk endif ; SvcName != SNA Server endif ; SvcName != this link SvcName endif ; SvcNameValue endif ; SWType == service endif ; SWTypeValue endif ; SNAVersion exists CloseRegKey $(KeyCV) endif ; KeyCV endif ; Another == False EndForListDo CloseRegKey $(KeySM) endif ; KeySM endif ; DCAX25DD ifstr(i) $(Another) == $(!True) goto successful ; Bail out, don't remove this component! endif ; ; Get rid of this service instance in the product keys ; CloseRegKey $(KeyServiceIndex) CloseRegKey $(KeyNetRules) DeleteRegTree $(KeyProduct) $(RemoveIndex) CloseRegKey $(KeyProduct) ; ; If deleteing link service then set its cooraspoding DCAISCAConfigurationData ; value to 0 in DCASYNC ; OpenRegKey $(!REG_H_LOCAL), "", "SYSTEM\CurrentControlSet\Services\DCASYNC\Parameters\ExtraParameters", $(!REG_KEY_READWRITE), KeyDriver ifstr(i) $(KeyDriver) != $(KeyNull) GetRegValue $(KeyDriver) "Data1LS" DCASYNCls1 GetRegValue $(KeyDriver) "Data2LS" DCASYNCls2 set DCASYNCls1 = *( $(DCASYNCls1), 4 ) set DCASYNCls2 = *( $(DCASYNCls2), 4 ) ifstr(i) $(RemoveName) == $(DCASYNCls1) SetRegValue $(KeyDriver) { "DCAISCAConfigData1", $(NoTitle), $(!REG_VT_DWORD), 0 } SetRegValue $(KeyDriver) { "Data1LS", $(NoTitle), $(!REG_VT_SZ), "" } endif ifstr(i) $(RemoveName) == $(DCASYNCls2) SetRegValue $(KeyDriver) { "DCAISCAConfigData2", $(NoTitle), $(!REG_VT_DWORD), 0 } SetRegValue $(KeyDriver) { "Data2LS", $(NoTitle), $(!REG_VT_SZ), "" } endif CloseRegKey $(KeyDriver) endif 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) ; DeleteRegTree $(KeyProduct), "DCASYNCDD" ; 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 = + 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)"dcax25\"$(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: ; ihvinf - 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_DCAX25LS] 1, dcax25.inf 1, dcax25.hlp 1, dcax25.srl [FilesFor_system_DCAX25LS] ;;rmh002 1, dcax25.dll [FilesFor_hwsetup_DCAX25DD] [FilesFor_system_DCAX25DD] 1, dcasync.sysDownload Driver Pack
After your driver has been downloaded, follow these simple steps to install it.
Expand the archive file (if the download file is in zip or rar format).
If the expanded file has an .exe extension, double click it and follow the installation instructions.
Otherwise, open Device Manager by right-clicking the Start menu and selecting Device Manager.
Find the device and model you want to update in the device list.
Double-click on it to open the Properties dialog box.
From the Properties dialog box, select the Driver tab.
Click the Update Driver button, then follow the instructions.
Very important: You must reboot your system to ensure that any driver updates have taken effect.
For more help, visit our Driver Support section for step-by-step videos on how to install drivers for every file type.