;--------------------------------------------------------------------------- ; ; OEMSETUP.INF ; ;---------------------------------------------------------------------------- ; ;1.77 ;- Basically working. Everything installs and un-installs. com ports can be changed, and ;PCI cards can co-exist with isa cards.;; ; ;- baud rates cannot be selected correctly, and debug messages still come up due to both the ;install script and the COM port dialog code.; ; ;1.78 ;- no-longer can select PCI if an ISA card is being installed. ;- The modified serial driver installs, and a backup is made of the existing serial driver ;for the un-install process. ;- debug dialogs no longer come up. ;- 230.4k can't be selected (and probably can't be selected until NT 5 is released). ; ;1.80 ;- 230.4k is working and the new modem.inf files are in place (although not completely ;tested) ;- This is the last installation disks before my new driver is in place. ; ;2.0 ;- new driver is in place, and I no longer make use of the serial driver. ;- still have two drivers however. ;- Don't fully make use of the 654, although better use than old serial driver. ; ;v2.1 ;- The new rastel driver adds code to allow the modem to be reset ; ;v2.2 ;- started adding support for unattended setup. This is not yest complete ;- this disk makes use of the multi-board driver. ;v2.21 8/5/98 ;-now handles shared interrupts. ; ;v2.22 ; ;v3.1 this has been modified to provide support for the gui installation ; ;v3.4 added support for modifying the 2 port, and the 4 port, as well as the 8 port ; ;v3.6 removed a whole heap of installation stuff which wasn't needed. ;----------------------------------------------------------------------- ; IDENTIFICATION SECTION ; ; 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, just 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 ;----------------------------------------------------------------------- [Identification] OptionType = NetAdapter ;----------------------------------------------------------------------- ; PLATFORMSSUPPORTED SECTION ; ------------------ ; This identifies the platforms supported by the adapter card. ; Possible types are: ; ; NOW PCI ONLY!! ;----------------------------------------------------------------------- [PlatformsSupported] ; ISA PCI ;----------------------------------------------------------------------- ; OPTIONS SECTION ; ; This section lists the OEM Option key names. These keys are locale ; independent and used to represent the option in a locale independent ; manner. ; ;----------------------------------------------------------------------- [Options] ; RASTEL40 = "RAStel4 Quad Modem Card" ; RASTEL22 = "RAStel2 2 Modem + 2 Serial Card" ; RASTEL80 = "RAStel8 8 Modem Card" A = "ViVa RAS 4" B = "ViVa RAS 2" C = "ViVa RAS 8" ;----------------------------------------------------------------------- ; OPTIONSTEXTENG SECTION ; ; The description displayed in the list of options if the language is ENGlish ; OptionsTextENG element "n" is the textual description/name of ; Options element "n" ;----------------------------------------------------------------------- [OptionsTextENG] ; "RAStel4 Quad Modem Card" ; "RAStel2 2 Modem + 2 Serial Card" ; "RAStel8 8 Modem Card" "ViVa RAS 4" "ViVa RAS 2" "ViVa RAS 8" ;----------------------------------------------------------------------- ; LANGUAGESSUPPORTED SECTION ; ; This section lists the languages supported. ; ;----------------------------------------------------------------------- [LanguagesSupported] ENG ;----------------------------------------------------------------------- ; SOURCE MEDIA DESCRIPTIONS ; ; The install disk info. ;----------------------------------------------------------------------- [Source Media Descriptions] 1 = "RAStel Disk1", TAGFILE = rastel1.TXT ;----------------------------------------------------------------------- ; FILES???? ; A number of sections in which we define the files making up the component ; These are then used in installing the component ;----------------------------------------------------------------------- [FilesConfig] DLL = 1, install.dll, SIZE=60000, RENAME="mbvcnfg.dll" ; HLP = 1, mbvCnfg.hlp, SIZE=6000 [FilesDriver] Driver = 1, rastel.sys, SIZE=15000 ComDrv = 1, rastela.sys, SIZE=52000, OVERWRITE="ALWAYS" [FilesInf] Inf = 1, oemsetup.inf, SIZE=65000, RENAME=$(!UG_Filename) ;----------------------------------------------------------------------- ; GENERALCONSTANTS ; Stuff we use here and there ;----------------------------------------------------------------------- [GeneralConstants] ; ; ; ; Stuff..... NoTitle = 0 KeyNull = "" MaskAllAccess = 33554432 ; ErrorIndex = "NO_ERROR" ErrorPrefix = "" ; ; ; ; Files we reference UtilityInf = "utility.inf" ParamInf = "ncparam.inf" SubroutineInf = "subroutn.inf" ;----------------------------------------------------------------------- ; INSTALLCONSTANTS ; Stuff we need to do the install processing ;----------------------------------------------------------------------- [InstallConstants] ; ; Product Info ; ; Manufacturer = "ComputerPeripheralsInt" ManufacturerLong = "Computer Peripherals International" CardNameLong = "ViVa RAS 56" ProductSoftwareName = "vras" ProductHardwareName = $(ProductSoftwareName) ProductSoftwareTitle = $(CardNameLong)" Config" ProductSoftwareDescription = $(ManufacturerLong)" "$(ProductSoftwareTitle)"Serial Driver" ProductMajorVersion = "3" ProductMinorVersion = "70" DriverName = "vras" ;;Info for second driver ProductSoftwareName2 = $(ProductSoftwareName)"A" ProductHardwareName2 = $(ProductHardwareName)"A" ProductSoftwareTitle2 = $(CardNameLong)" Driver" ProductSoftwareDescription2 = $(ProductSoftwareDescription) ConfigDLL = "cpicnfg.dll" ; ProductVersion = $(ProductMajorVersion)"."$(ProductMinorVersion) ; ; No image path 'cos there isn't a driver yet... ; this thing below is not used anyway ProductSoftwareImagePath = "%SystemRoot%\System32\drivers\"$(DriverName)".sys" ; ProductSoftwareImagePath = "" ; ; Where we keep our info for our software ; ProductKeyName = $(!NTN_SoftwareBase)"\"$(Manufacturer)+ "\"$(ProductSoftwareName)"\CurrentVersion" ; ; Where NT keeps its info NTKeyName = $(!NTN_SoftwareBase)"\Microsoft\Windows NT\CurrentVersion" ; ; Where NT keeps network card info (seems like a weird place but thats ; Microsoft for you) ; NetworkCardsKeyName = $(NTKeyName)"\NetworkCards" ; ; Where RAS keeps its software info RASKeyName = $(!NTN_SoftwareBase)"\Microsoft\RAS\CurrentVersion" ; ; ; Binding registry information. ; The binding process uses Prolog rules to generate the resulting ; configuration. ; These constants are used to generate the entries under the NetRules ; key in registry. ; NetRule\Type ; ; type = <product name> <class> [<lower class>] ; ; States that viewed from the upper interface, component <product name> ; is of class <class>. ; If <lower class> is specified it states that viewed from the lower ; interface the component is of class <lower class>. If <lower class> ; is absent, it is assumed to be the same as <class>. These classes are, ; in general, only different if the component encapsulates more than one ; layer in the stack. NetRuleSoftwareType = "mbv_"$(DriverName)"_driver serialDriver "$(DriverName)"Driver" NetRuleHardwareType = "mbv_"$(DriverName)"_adapter "$(DriverName)"Adapter" ; NetRule\Use ; ; use = {service|driver|transport|adapter} {yes|no} {yes|no} ; ; adapter is redundant as hardware is assumed to be adapter. ; Every attempt is made to load a service and a log entry is generated if ; this is impossible due to the lack of a suitable transport. ; transport and driver usages are only loaded if required by the bindings. NetRuleSoftwareUse = "driver" NetRuleHardwareUse = "adapter" ; NetRule\Class ; ; class = <new class name> {<existing class name>|basic} [{no|yes]] ; ; <new class name> is the name of the class being defined, which may be ; based on <existing class name> or be a basic class. Include a "yes" if ; this class is a logical endpoint (eg. a multiplexing/routing layer that ; makes everything underneath it seem to be a single port). NetRuleSoftwareClass = {"serialDriver basic", $(DriverName)"Driver basic"} NetRuleHardwareClass = {$(DriverName)"Adapter basic"} ; NetRule\Bindable ; ; bindable = <fromClass> <toClass> {exclusive|non} <value> ; ; defines that <fromClass> can be bound to <toClass> and that ; the binding of <fromClass> is either exclusive (ie. cannot be bound TO ; anything else) or non-exclusive. Similarly the <toClass> exclusivity ; specifies whether <toClass> can be bound FROM anything else. ; The <value> parameter resolves conflicting binding rules in favour of ; the rule with the highest <value>. NetRuleSoftwareBindable = {$(DriverName)"Driver "$(DrivreName)"Adapter non exclusive 100"} ; NetRuleHardwareBindable = {} ; hardware doesn't bind to anything. ; NetRule/Bindform ; ; bindform = <objectName> {yes|no} {yes|no} {container|simple|streams} ; ; <objectName> MUST be the same as the "service name" (I think this means ; the <product name> field in the type declaration. Who writes MS docs?). ; Looking at the ElinkII example the naming is inconsistent so who knows? ; Anyway, the successive fields mean: ; Put binding info. in <objectName>'s Linkage registry subkey? {yes|no} ; Include the device name in the binding info? {yes|no} ; Structure of binding string is one of: {container|simple|streams} NetRuleSoftwareBindForm = """mbv_"$(DriverName)"_driver"" yes no container" ; I have no idea what the null name for the hardware does - I just copied ; the examples and Rick... NetRuleHardwareBindForm = " yes yes container" ; NetRule/Review ; review = { 0 | 1 } ; ; A non-zero value causes the inf file to be called if the bindings are ; changed. ; I don't know what the entry point is in this case? ; NetRule/Hidden ; hidden = { 0 | 1 } ; ; A non-zero value causes the component to be hidden from the NCPA ; interface (ie. can't be seen in list and hence can't be selected for ; configuration, removal etc). NetRuleSoftwareHidden = 1 ; NetRuleHardwareHidden = 0 ; The binding engine will update the following registry entries for us. ; ; HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\rastel\Linkage ; Bind ; Export ; Route ; ; We still need to do the rest of the registration processing. ; ; Place hardware port names etc. in registry HARDWARE key SerialMapParent = "HARDWARE\DEVICEMAP" SerialMapKeyName = "SERIALCOMM" SerialMap = $(SerialMapParent)"\"$(SerialMapKeyName) ; Info on the types of busses are in here... MultiAdapter = "HARDWARE\Description\System\MultifunctionAdapter" EISAAdapter = "HARDWARE\Description\System\EISAAdapter" ; EventLog Message Linkage ; IoLogMsgDLL = "%SystemRoot%\System32\IoLogMsg.dll" ;----------------------------------------------------------------------- ; MESSAGECONSTANTSENG ; dialog messages, in ENGlish ;----------------------------------------------------------------------- [MessageConstantsENG] ; ; Text to be used in the various dialogs FunctionTitle = $(ManufacturerLong) $(ProductSoftwareName)" Setup" ShellCodeErrorTitle = "Error: "$(FunctionTitle) ShellCodeErrorText = "Shell Code Error" UpdateCfgMessage = "Updating configuration" CardExistedText = "There are already one or more " $(ProductSoftwareName) " cards installed."+ " Do you want to install another?" ; Progress messages ProCaption = $(ManufacturerLong) $(ProductSoftwareName)" Adapter Setup" ProText1 = "Copying:" Protext2 = "To:" ProCancel = "Cancel" ProCancelCap = $(ProductSoftwareName) " Adapter Setup Message" ProCancelMsg = "Installation is not complete."+ " Are you sure you want to cancel?" ;----------------------------------------------------------------------- ; ERRORSTRINGSENG ; error messages, in ENGlish ;----------------------------------------------------------------------- [ErrorStringsENG] ; ; Error messages MBV_NO_BIND = "Binding not implemented" MBV_NO_BUS_FOUND = "Can't find system bus in Registry" MBV_SHELLCODE_ERROR = "Shell command failed" MBV_OPEN_SOFTWARE_KEY = "Unable to open Software Product key in Registry" MBV_OPEN_PARAM_KEY = "Unable to open Netcard Parameters key in Registry" MBV_CREATE_SMAP_KEY = + "Unable to create "$(SerialMapKeyName)" key in Registry" MBV_OPEN_NETCARD_KEY = "Unable to open network card key in Registry" MBV_OPEN_NT_KEY = "Unable to open Windows NT key in Registry" ; The following are messages related to copying registry info to the ; NT standard serial driver. MBV_OPEN_SERIAL_KEY = + "Unable to open Windows NT Serial Services key in Registry" MBV_CREATE_SERIALP_KEY = + "Unable to create Windows NT Serial Parameters key in Registry" ; The following are warning re. failing to add our modem info to RAS's ; modem.inf file. MBV_OPEN_RAS_KEY = "Unable to find RAS in Registry" MBV_APPEND_MODEMINF = "Unable to update RAS modem.inf file" ;--------------------------------------------------------------------------- ; 1. 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) ;------------------------------------------------------------------------ ; 2. 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 ; STATUS_NOTSUPPORTED ; ; $($R1): Option List ; $($R2): Option Text List ;------------------------------------------------------------------------ [ReturnOptions] ; ; ; ; shell "" DisplayProgress "RASTEL: [ReturnOptions] Section Entered" set Status = STATUS_FAILED set OptionList = {} set OptionTextList = {} ; ; ; ; Check if the language requested is supported ; ; set LanguageList = ^(LanguagesSupported, 1) Ifcontains(i) $($0) in $(LanguageList) ; ; ; ; Check if the platforms requested is supported ; ; I'm not sure what happens on a machine with multiuple bus types?! ; ; Also, should ISA card accept EISA as a bus type? ; ; For now, just ignore the bus type. If someone is trying to ; ; install our card in a machione without an ISA bus they have ; ; more problems than this utility can deal with :-) ; ; goto returnoptions ; ifstr(i) $($1) == "" ; goto returnoptions ; endif ; set PlatformList = ^(PlatformsSupported, 1) ; Ifcontains(i) $($1) in $(PlatformList) ; goto returnoptions ; else ; set Status = STATUS_NOTSUPPORTED ; shell "" DisplayProgress "RASTEL: Platform Not Supported" ; goto finish_ReturnOptions ; endif else set Status = STATUS_NOLANGUAGE shell "" DisplayProgress "RASTEL: Language Not Supported" goto finish_ReturnOptions endif ; ; ; ; form a list of all the options and another of the text representing ; ; returnoptions = + set OptionList = ^(Options, 0) set OptionTextList = ^(OptionsText$($0), 1) set Status = STATUS_SUCCESSFUL finish_ReturnOptions = + shell "" DisplayProgress "RASTEL: Options = "$(OptionList) Return $(Status) $(OptionList) $(OptionTextList) ;--------------------------------------------------------------------------- ; ************************************************************************** ;--------------------------------------------------------------------------- [InstallOption] set Status = STATUS_FAILED ; ; ; ; extract parameters ; ; set Language = $($0) set Option = $($1) set SrcDir = $($2) set AddCopy = $($3) set DoCopy = $($4) set DoConfig = $($5) set Opt = "RASTEL: Language:"$(Language)", Option:"$(Option)", SrcDir:"$(SrcDir)+ ", AddCopy:"$(AddCopy)" DoCopy:"$(DoCopy)", DoConfig:"$(DoConfig) ; ;ensure that the requested language is supported ; set LanguageList = ^(LanguagesSupported, 1) ifcontains(i) $(Language) not-in $(LanguageList) return STATUS_NOLANGUAGE endif ; ;Init variables that we may need in the install process ; read-syms GeneralConstants read-syms InstallConstants read-syms MessageConstants$(Language) ; ;Obtain the current date ; detect date set OEM_ABANDON_ON = FALSE set CommonStatus = STATUS_SUCCESSFUL ; ; Run the appropriate code based on requested function ; shell "" DisplayProgress "RASTEL: NTN_InstallMode = "$(!NTN_InstallMode) ; ;Note that we have to support all of the following, because another card might be installed ;After this one has been installed in unattended mode, so we continue as per the ;non-unattended mode installation. ; ifstr(i) $(!NTN_InstallMode) == update goto DoUpdate else-ifstr(i) $(!NTN_InstallMode) == configure goto DoConfigure else-ifstr(i) $(!NTN_InstallMode) == deinstall goto DoRemove else-ifstr(i) $(!NTN_InstallMode) == bind goto DoBind else-ifstr(i) $(!NTN_InstallMode) == install goto DoInstall endif ; ;If we get here, then someone is playing silly buggers with us. ; goto Error_message DoInstall = + set OEM_ABANDON_ON = TRUE set OEM_ABANDON_OPTIONS = {} set OEM_ABANDON_SOFTWARE = FALSE shell $(SubroutineInf) SetupMessage $(!STF_LANGUAGE) STATUS + "Please run "$(SrcDir)"\setup.exe to install." set CommonStatus = STATUS_FAILED return $(CommonStatus) ;--------------------- ; DoConfigure - reconfigure a previously installed adapter ;--------------------- DoConfigure = + ; ; We dont configure the driver, only adapters (at present anyway) ; driver is hidden (not to mention non-existant!) ; ifstr(i) $(!NTN_RegBase) == $(ProductKeyName) set ErrorIndex = CANNOT_CONFIGURE_SOFTWARE goto fatalmessage endif shell "" DisplayProgress "RASTEL: DoConfigure" ; ; get the system bus config info. shell "" GetSystemCfgData ; gets the bus info and com port names set ErrorIndex = $($R0) set ErrorPrefix = $($R1) set numISA = $($R2) set numPCI = $($R3) set ComPortList = $($R4) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto shellcode_error endif ifstr(i) $(ErrorIndex) != NO_ERROR goto fatalmessage endif shell "" DisplayProgress "RASTEL: DoConfigure, have system config" ; ; ; ; Find the service name in ; ; SOFTWARE\Microsoft\Windows NT....\NetworkCards\<num> ; ; OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_RegBase) $(MaskAllAccess) AdapterKey ifstr $(AdapterKey) == $(KeyNull) set ErrorIndex = UNABLE_OPEN_NETWORKCARD_SECTION goto fatalmessage endif shell "" DisplayProgress "RASTEL: DoConfigure, have networkcard key" GetRegValue $(AdapterKey) "ServiceName" ServiceInfo set AdapterServiceName = *($(ServiceInfo), 4) CloseRegKey $(AdapterKey) shell "" DisplayProgress "RASTEL: Servicename="$(AdapterServiceName) ; ; Now we have the service name, open the service\Parameters key and ; ; get the parameters OpenRegKey $(!REG_H_LOCAL) "" + $(!NTN_ServiceBase)"\"$(AdapterServiceName)"\Parameters" + $(MaskAllAccess) ParametersKey ifstr $(ParametersKey) == $(KeyNull) set ErrorIndex = MBV_OPEN_PARAM_KEY goto fatalmessage endif shell "" DisplayProgress "RASTEL: Have parameters key" GetRegValue $(ParametersKey) "BusType" TmpList set BusType = *($(TmpList), 4) GetRegValue $(ParametersKey) "BusNumber" TmpList set BusNumber = *($(TmpList), 4) GetRegValue $(ParametersKey) "IoAddress" TmpList set IoAddress = *($(TmpList), 4) GetRegValue $(ParametersKey) "SecondaryIoAddress" TmpList set SecondaryIoAddress = *($(TmpList), 4) GetRegValue $(ParametersKey) "Interrupt" TmpList set Interrupt = *($(TmpList), 4) GetRegValue $(ParametersKey) "Port1" TmpList set PortList = {*($(TmpList), 4)} GetRegValue $(ParametersKey) "Port2" TmpList set PortList = >($(PortList), *($(TmpList), 4)) ; ;Stuff for the two port card only ; ifstr(i) $(Option) != "B" GetRegValue $(ParametersKey) "Port3" TmpList set PortList = >($(PortList), *($(TmpList), 4)) GetRegValue $(ParametersKey) "Port4" TmpList set PortList = >($(PortList), *($(TmpList), 4)) endif ifstr(i) $(Option) == "C" GetRegValue $(ParametersKey) "Port5" TmpList set PortList = >($(PortList), *($(TmpList), 4)) GetRegValue $(ParametersKey) "Port6" TmpList set PortList = >($(PortList), *($(TmpList), 4)) GetRegValue $(ParametersKey) "Port7" TmpList set PortList = >($(PortList), *($(TmpList), 4)) GetRegValue $(ParametersKey) "Port8" TmpList set PortList = >($(PortList), *($(TmpList), 4)) endif ; shell $(SubroutineInf) SetupMessage $(!STF_LANGUAGE) STATUS + ; "com ports are"$(PortList) ; shell $(SubroutineInf) SetupMessage $(!STF_LANGUAGE) STATUS + ; "bustype is"$(BusType) ; ; Now run the DLL config routine to let user change stuff LoadLibrary "x" $(!STF_CWDDIR)$(ConfigDLL) MbvCfgHandle shell $(SubroutineInf) PopBillBoard LibraryProcedure Result $(MbvCfgHandle) DoMBVConfig + $(!STF_HWND) $(Option) $(numISA) $(numEISA) $(numMCA) $(numPCI) + $(ComPortList) + $(BusType) $(BusNumber) $(Slot) + $(IoAddress) $(SecondaryIoAddress) + $(Interrupt) + $(PortList) ; ifstr(i) $(MbvCfgHandle) != $(HandleNull) FreeLibrary $(MbvCfgHandle) endif set CfgParameters = $(Result) shell "" DisplayProgress "DLL Res:"$(CfgParameters) ; ; The following line constructs dummy return data for testing ; set CfgParameters = { + ; 1, ISA, 0, 0, 256, 1280, 2, + ; {"COM9", "COM8", "COM7", "COM6"} + ; } shell "" DisplayProgress "RASTEL: Have new config" ; ; ; ; Result is error code, followed by ; ; BusType, BusNumber, Slot, IoBase, Io2Base, IRQ, PortList ; ; set CfgError = *($(CfgParameters),1) ifint $(CfgError) == 0 CloseRegKey $(ParametersKey) set CommonStatus = STATUS_USERCANCEL goto end endif set BusType = *($(CfgParameters),2) set BusNumber = *($(CfgParameters),3) set Slot = *($(CfgParameters),4) set IOBase = *($(CfgParameters),5) set IO2Base = *($(CfgParameters),6) set IRQ = *($(CfgParameters),7) set PortList = *($(CfgParameters),8) shell $(SubroutineInf) PushBillBoard NETSTATUSDLG $(UpdateCfgMessage) StartWait shell "" DisplayProgress "RASTEL: About to write new config" ; ; write new config shell "" WriteBoardConfig $(ParametersKey) + $(Option) $(BusType) $(BusNumber) $(Slot) + $(IOBase) $(IO2Base) $(IRQ) $(PortList) set ErrorIndex = $($R0) set ErrorPrefix = $($R1) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto shellcode_error endif ; ifstr(i) $(ErrorIndex) != NO_ERROR ; CloseRegKey $(ParametersKey) ; goto fatalmessage ; endif ; shell "" CopyBoardConfig $(ParametersKey) $(AdapterServiceName) ; set ErrorIndex = $($R0) ; set ErrorPrefix = $($R1) ; ifint $($ShellCode) != $(!SHELL_CODE_OK) ; goto shellcode_error ; endif ;shell "" DisplayProgress "RASTEL: DoConfigure, CopyBoardConfig Done" ; ifstr(i) $(ErrorIndex) != NO_ERROR ; CloseRegKey $(ParametersKey) ; goto fatalmessage ; endif CloseRegKey $(ParametersKey) goto end ;------------------ ; Remove Adapter. Also remove driver if the last adapter is removed. ;------------------ DoRemove = + ifstr(i) $(NTN_RegBase) == $(ProductKeyName) ; ; driver is hidden (and not there!) but who cares... endif ; ; remove adapter ; ; Hmm... before we kill the registration info for this hardware, ; ; we had better remove any entries in the standard serial driver ; ; registry that are ports on this adapter... ; ; NTN_RegBase should be the subscript of the adapter. ; ; Need to find its name OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_RegBase) $(MaskAllAccess) AdapterKey ifstr $(AdapterKey) == $(KeyNull) set ErrorIndex = UNABLE_OPEN_NETWORKCARD_SECTION goto fatalmessage endif shell "" DisplayProgress "RASTEL: DoRemove, have networkcard key" GetRegValue $(AdapterKey) "ServiceName" ServiceInfo set AdapterServiceName = *($(ServiceInfo), 4) CloseRegKey $(AdapterKey) shell "" DisplayProgress "RASTEL: Servicename="$(AdapterServiceName) ; ; Kill anything that matches this in the serial registry shell "" DeleteBoardConfig $(AdapterServiceName) ; ifint $($ShellCode) != $(!SHELL_CODE_OK) goto shellcode_error endif ; ; now remove hardware registry info shell $(UtilityInf) RemoveHardwareComponent $(Manufacturer) + $(ProductSoftwareName) $(!NTN_RegBase) set ErrorIndex = $($R0) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto shellcode_error endif ifstr(i) $(ErrorIndex) != NO_ERROR set ErrorPrefix = "RemoveHardwareComponent" goto fatalmessage endif ; ; remove the driver if there are no adapters left shell $(UtilityInf) RemoveSoftwareComponent $(Manufacturer) + $(ProductSoftwareName) TRUE set ErrorIndex = $($R0) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto shellcode_error endif ifstr(i) $(ErrorIndex) != NO_ERROR ifstr(i) $(ErrorIndex) != REF_COUNT_NOT_ZERO set ErrorPrefix = "RemoveSoftwareComponent" goto fatalmessage endif endif OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase) $(MaskAllAccess) ServiceKey ifstr(i) $(ServiceKey) == $(!KeyNull) set ErrorPrefix = "Removing port driver" goto fatalmessage endif ; OpenRegKey $(ServiceKey) "" $(ProductSoftwareName2) $(MaskAllAccess) ServiceParamKey ; ifstr(i) $(ServiceParamKey) == $(!KeyNull) ; set ErrorPrefix = "Removing port driver" ; goto fatalmessage ; endif ; ;Add code here to check if the serial driver key should be removed ; ; OpenRegKey $(ServiceParamKey) "" "Parameters" $(MaskAllAccess) ParamKey ; EnumRegValue $(ParamKey) RastelList ; shell $(SubroutineInf) SetupMessage $(!STF_LANGUAGE) NONFATAL "___"$(RastelList)"____" ; ifstr(i) $(RastelList) != "{}" ;;if the return is not empty ; goto end ;we must have no registry entries to delete ; endif ; ;Otherwise delete all of the stuff about the vras - to do ; ; DeleteRegKey $(ServiceParamKey) "Parameters" ; DeleteRegKey $(ServiceParamKey) "Enum" ; CloseRegKey $(ServiceParamKey) ; DeleteRegKey $(ServiceKey) $(ProductSoftwareName2) CloseRegKey $(ServiceKey) goto end ;------------------- ; DoUpdate - install new driver. As there isn't one this is novel, ; but conceivably there could be one later. If so, installing it ; will be a bit tricky as we will have to kill all the serial hooks. ; Just go ahead and do it. This will install a new inf file too, which ; can hopefully sort out the mess left by this one (all it really has to ; do is to delete the serial registry info for the rastel board(s). this ; can be done when board configure is done using new .inf file). ;------------------ DoUpdate = + ;TO DO: ;Actually put code here to copy across the new drivers. ; ; ;We check that the current version is after 3.0. If it is, then we install ; goto end ;------- ; DoBind - don't bother ; There is nothing to bind. ;------- DoBind = + set ErrorIndex = MBV_NO_BIND goto fatalmessage ;----- ; fatalmessage - handles error message ;----- fatalmessage = + shell "" GetErrorString $(ErrorIndex) set Error = $($R0) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto shellcode_error endif goto fatal ;----- ; fatal - handles exit on fatal error ;----- fatal = + ifstr $(Error) == "" shell $(UtilityInf) RegistryErrorString SETUP_FAIL ifint $($ShellCode) != $(!SHELL_CODE_OK) goto shellcode_error endif set Error = $($R0) endif ifstr $(ErrorPrefix) != "" set Error = "("$(ErrorPrefix)"): "$(Error) set ErrorPrefix = "" endif shell $(SubroutineInf) SetupMessage $(!STF_LANGUAGE) "FATAL" $(Error) ifint $(ShellCode) != $(!SHELL_CODE_OK) goto shellcode_error endif goto setfailed ;----- ; shellcode_error - Shell failed ;----- ; shellcode_error = + set DlgType = "MessageBox" set STF_MB_TITLE = $(ShellCodeErrorTile) set STF_MB_TEXT = $(ShellCodeErrorText) set STF_MB_TYPE = 1 set STF_MB_ICON = 3 set STF_MB_DEF = 1 ui start "Error Message" goto setfailed ;----- ; setfailed - error cleanup and exit ;----- setfailed = + set CommonStatus = STATUS_FAILED ifstr(i) $(OEM_ABANDON_ON) == TRUE set OEM_ABANDON_ON = FALSE goto abandon endif goto end ;----- ; abandon - undo registry changes ;----- abandon = + ForListDo $(OEM_ABANDON_OPTIONS) shell $(UtilityInf) RemoveHardwareComponent $(Manufacturer) $(ProductSoftwareName) $($) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto shellcode_error endif set ErrorIndex = $($R0) ifstr(i) $(ErrorIndex) != "NO_ERROR" set ErrorPrefix = "Abandon Hardware" goto fatalmessage endif EndForListDo ifstr(i) $(OEM_ABANDON_SOFTWARE) == TRUE shell $(UtilityInf) RemoveSoftwareComponent $(Manufacturer) $(ProductSoftwareName) $($) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto shellcode_error endif set ErrorIndex = $($R0) ifstr(i) $(ErrorIndex) != "NO_ERROR" set ErrorPrefix = "Abandon Software" goto fatalmessage endif endif goto end ;------------ ; end - THE END!!! ;------------ end = + EndWait Return $(CommonStatus) ;-------------------------------------------------------------------------- ; Warning Dlg. Tells us something didn't work (but is't critical) ;-------------------------------------------------------------------------- [DisplayWarning] read-syms GeneralConstants shell "" GetErrorString $($0) set Error = $($R0) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto shellcode_error endif shell $(SubroutineInf) SetupMessage $(!STF_LANGUAGE) NONFATAL $(Error) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto shellcode_error endif return ;-------------------------------------------------------------------------- ; Progress Dlg. Tells us where we are up to.... ;-------------------------------------------------------------------------- [DisplayProgress] ; read-syms GeneralConstants ; shell $(SubroutineInf) SetupMessage $(!STF_LANGUAGE) NONFATAL $($0) return ;-------------------------------------------------------------------------- ; WriteBoardConfig ; Shell Section ; Called locally to update registry info re. board config. ; ; IN: ; $0: Parameters registry key ; $1: Board type (ie. the OPTION) ; $2: Bus type ; $3: Bus number ; $4: Slot number (EISA) ; $5: I/O base address ; $6: status reg I/O address ; $7: IRQ ; $8: List of com port names ; ; ; RETURNS: ; $0: ErrorIndex ; $1: ErrorPrefix ;-------------------------------------------------------------------------- [WriteBoardConfig] read-syms GeneralConstants read-syms InstallConstants ifstr(i) $($1) == "A" ; shell $(SubroutineInf) SetupMessage $(!STF_LANGUAGE) "STATUS" + ; "about to setup values for RASteln\Parameters" set VList = { + {Type, $(NoTitle), $(!REG_VT_SZ), $($1)}, + {BusType, $(NoTitle), $(!REG_VT_DWORD), "5"}, + {Port1, $(NoTitle), $(!REG_VT_SZ), *($($8), 1)}, + {Port2, $(NoTitle), $(!REG_VT_SZ), *($($8), 2)}, + {Port3, $(NoTitle), $(!REG_VT_SZ), *($($8), 3)}, + {Port4, $(NoTitle), $(!REG_VT_SZ), *($($8), 4)}, + {ClockRate, $(NoTitle), $(!REG_VT_DWORD), "8000000"}, + {NumberOfPorts, $(NoTitle), $(!REG_VT_DWORD), "4"} + } goto AddValues endif ifstr(i) $($1) == "B" set VList = { + {Type, $(NoTitle), $(!REG_VT_SZ), $($1)}, + {BusType, $(NoTitle), $(!REG_VT_DWORD), "5"}, + {Port1, $(NoTitle), $(!REG_VT_SZ), *($($8), 1)}, + {Port2, $(NoTitle), $(!REG_VT_SZ), *($($8), 2)}, + {ClockRate, $(NoTitle), $(!REG_VT_DWORD), "8000000"}, + {NumberOfPorts, $(NoTitle), $(!REG_VT_DWORD), "2"} + } goto AddValues endif ifstr(i) $($1) == "C" set VList = { + {Type, $(NoTitle), $(!REG_VT_SZ), $($1)}, + {BusType, $(NoTitle), $(!REG_VT_DWORD), "5"}, + {Port1, $(NoTitle), $(!REG_VT_SZ), *($($8), 1)}, + {Port2, $(NoTitle), $(!REG_VT_SZ), *($($8), 2)}, + {Port3, $(NoTitle), $(!REG_VT_SZ), *($($8), 3)}, + {Port4, $(NoTitle), $(!REG_VT_SZ), *($($8), 4)}, + {Port5, $(NoTitle), $(!REG_VT_SZ), *($($8), 5)}, + {Port6, $(NoTitle), $(!REG_VT_SZ), *($($8), 6)}, + {Port7, $(NoTitle), $(!REG_VT_SZ), *($($8), 7)}, + {Port8, $(NoTitle), $(!REG_VT_SZ), *($($8), 8)}, + {ClockRate, $(NoTitle), $(!REG_VT_DWORD), "8000000"}, + {NumberOfPorts, $(NoTitle), $(!REG_VT_DWORD), "8"} + } goto AddValues endif AddValues = + shell $(UtilityInf) AddValueList $($0) $(VList) set ErrorIndex = $($R0) ifint $($ShellCode) != $(!SHELL_CODE_OK) set ErrorIndex = MBV_SHELLCODE_ERROR goto WriteBoardConfig_return endif WriteBoardConfig_return = + return $(ErrorIndex) $(ErrorPrefix) ;-------------------------------------------------------------------------- ; DeleteBoardConfig ; Shell Section ; Called locally to delete all references to a Rastel board from Serial reg ; ; IN: ; $0: Adapter Service Name ; ; RETURNS: Nothing ;-------------------------------------------------------------------------- [DeleteBoardConfig] read-syms GeneralConstants read-syms InstallConstants ; ; look for rastel ports in serial registry info set AdapterName = $($0) ; ;We now have to delete its entry in the RAStel driver subkey ; OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\"$(ProductHardwareName)"\Parameters\PCI" $(MaskAllAccess) AdapterParamKey ifstr(i) $(AdapterParamKey) == $(!KeyNull) goto DeleteBoardConfig_return endif ; ;Enumerate the key to obtain the list of installed cards of the appropriate type ; EnumRegValue $(AdapterParamKey) RastelList ; ; scan list ForListDo $(RastelList) set TmpVal = $($) ifstr *($(TmpVal), 4) == $(AdapterName) ; ; it is one of ours, delete it shell "" DisplayProgress "DoRemove, deleting serial port:"*($($), 1) DeleteRegValue $(AdapterParamKey) *($(TmpVal), 1) endif EndForListDo DeleteBoardConfig_return = + return ;-------------------------------------------------------------------------- ; CopyBoardConfig ; Shell Section ; Called locally to update Serial registry info from Rastel registry info ; Also updates the serial map so that subsequent installs before the machine ; is rebooted will stop the serial port duplication problem that I know exists. ; ; IN: ; $0: Parameters registry key ; $1: Adapter Service Name (of form rastel<x>) ; ; RETURNS: ; $0: ErrorIndex ; $1: ErrorPrefix ;-------------------------------------------------------------------------- [CopyBoardConfig] read-syms GeneralConstants read-syms InstallConstants ; ; look for rastel ports in serial registry info set AdapterName = $($1) set OurParamKey = $($0) OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\"$(AdapterName)"\Parameters" $(MaskAllAccess) AdapterParamKey ifstr(i) $(AdapterParamKey) == $(!KeyNull) set ErrorPrefix = "Removing port driver" goto fatalmessage endif GetRegValue $(AdapterParamKey) "BusType" busType ifstr(i) *($(busType),4) == "ISA" ;;We have to remove an isa card OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\Serial" $(MaskAllAccess) SerialKey else ;;We have to remove a PCI OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\"$(ProductSoftwareName2) $(MaskAllAccess) SerialKey endif ;; OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\"$(ProductSoftwareName2) $(MaskAllAccess) SerialKey ifstr $(SerialKey) == $(KeyNull) ; ; oops! no serial driver? set ErrorIndex = MBV_OPEN_SERIAL_KEY goto CopyBoardConfig_return endif ; ; there may or may not be a parameters key in here? OpenRegKey $(SerialKey) "" "Parameters" $(MaskAllAccess) SerialParamKey ifstr $(SerialParamKey) == $(KeyNull) ; ; No parameters. This makes it easy! CreateRegKey $(SerialKey) {"Parameters",$(NoTitle),GenericClass} "" + $(MaskAllAccess) "" SerialParamKey ifstr $(SerialParamKey) == $(KeyNull) ; ; couldn't do it! Stop. CloseRegKey $(SerialKey) set ErrorIndex = MBV_CREATE_SERIALP_KEY goto CopyBoardConfig_return endif endif ; ; look through Serial Parameters sub-keys (if any) for rastel ports ; ; get a list of sub-keys EnumRegKey $(SerialParamKey) RastelList ; ; scan list ForListDo $(RastelList) ; ; if the key is AdapterName:<y> Split-String *($($), 1) ":" TmpList ifstr *($(TmpList), 1) == $(AdapterName) ; ; it is one of ours, delete it DeleteRegKey $(SerialParamKey) *($($), 1) endif EndForListDo ; ; there are now no entries for this rastel adapter in the serial registry. ; ; make keys and fill them in (1 key per port) ; ; Read the parameters that are common to all ports GetRegValue $(OurParamKey) "Type" TmpList set Option = *($(TmpList), 4) GetRegValue $(OurParamKey) "IoAddress" TmpList set IOBase = *($(TmpList), 4) GetRegValue $(OurParamKey) "SecondaryIoAddress" TmpList set IO2Base = *($(TmpList), 4) GetRegValue $(OurParamKey) "Interrupt" TmpList set IRQ = *($(TmpList), 4) ; ; also define some fixed values set PortStep = 8 set TxFIFO = 16 set RxFIFO = 14 set ForceFifo = 1 set Indexed = 1 ; ; for each port, fill in the values ; ; initialize a few things set PortAddr = $(IOBase) set Error = 0 ifstr(i) $(Option) != "C" set PortList = {Port1,Port2,Port3,Port4} else set PortList = {Port1,Port2,Port3,Port4,Port5,Port6,Port7,Port8} endif ForListDo $(PortList) ifint Error == 0 ; ; board/port specific values ; ; read these from our registry info ; ; com port name GetRegValue $(OurParamKey) $($) TmpList set ComName = *($(TmpList), 4) ; ; create the key set TempName = $(AdapterName)":"$(#) CreateRegKey $(SerialParamKey) {$(TempName),$(NoTitle),GenericClass} "" + $(MaskAllAccess) "" SerialPortKey ifstr $(SerialPortKey) == $(KeyNull) ; ; couldn't do it! Stop. CloseRegKey $(SerialParamKey) set ErrorIndex = MBV_CREATE_SERIALP_KEY set Error = 1 endif set VList = { + {DosDevices, $(NoTitle), $(!REG_VT_SZ), $(ComName)}, + {ForceFifoEnable, $(NoTitle), $(!REG_VT_DWORD), $(ForceFifo)}, + {Indexed, $(NoTitle), $(!REG_VT_DWORD), $(Indexed)}, + {Interrupt, $(NoTitle), $(!REG_VT_DWORD), $(IRQ)}, + {InterruptStatus, $(NoTitle), $(!REG_VT_DWORD), $(IO2Base)}, + {PortAddress, $(NoTitle), $(!REG_VT_DWORD), $(PortAddr)}, + {PortIndex, $(NoTitle), $(!REG_VT_DWORD), $(#)}, + {RxFIFO, $(NoTitle), $(!REG_VT_DWORD), $(RxFIFO)}, + {TxFIFO, $(NoTitle), $(!REG_VT_DWORD), $(TxFIFO)}, + {BusType, $(NoTitle), $(!REG_VT_DWORD), "5"}, + {ClockRate, $(NoTitle), $(!REG_VT_DWORD), "8000000"} + } shell $(UtilityInf) AddValueList $(SerialPortKey) $(VList) set ErrorIndex = $($R0) ifint $($ShellCode) != $(!SHELL_CODE_OK) set ErrorIndex = MBV_SHELLCODE_ERROR set Error = 1 endif CloseRegKey $(SerialPortKey) ; ; calc address of next port set-add PortAddr = $(PortAddr), $(PortStep) endif EndForListDo CloseRegKey $(SerialParamKey) CopyBoardConfig_return = + return $(ErrorIndex) $(ErrorPrefix) ;-------------------------------------------------------------------------- ; GetSystemCfgData ; Shell Section ; Called locally to extract relevant system config info from registry ; ; RETURNS: ; $0: ErrorIndex ; $1: ErrorPrefix ; $2: Number of ISA busses ; $3: Number of PCI busses present ; $4: List of allocated com port names ;-------------------------------------------------------------------------- [GetSystemCfgData] read-syms GeneralConstants read-syms InstallConstants ; ; call another local shell section to get bus info shell "" GetBusInfo set ErrorIndex = $($R0) set numISA = $($R1) set numEISA = $($R2) set numPCI = $($R4) ifint $($ShellCode) != $(!SHELL_CODE_OK) set ErrorIndex = MBV_SHELLCODE_ERROR goto GetSystemCfgData_return endif ifstr(i) $(ErrorIndex) != NO_ERROR set ErrorPrefix = "GetBusInfo" goto GetSystemCfgData_return endif ; ; ????? Does NT consider a physical EISA bus to be just an EISA bus ; ; or an EISA + an ISA bus? ; ; treat EISA bus as an ISA bus set-add numISA = $(numISA), $(numEISA) ifint $(numISA) <= 0 set ErrorIndex = MBV_NO_BUS_FOUND goto GetSystemCfgData_return endif ; ; generate list of used com port names set ComNameList = {} OpenRegKey $(!REG_H_LOCAL) "" $(SerialMap) $(MaskAllAccess) SerialMapKey ifstr $(SerialMapKey) != $(KeyNull) EnumRegValue $(SerialMapKey) SerialMapData CloseRegKey $(SerialMapKey) ForListDo $(SerialMapData) set ComNameList = >($(ComNameList), *($($), 4)) EndForListDo endif GetSystemCfgData_return = + return $(ErrorIndex) $(ErrorPrefix) $(numISA) $(numPCI) $(ComNameList) ;-------------------------------------------------------------------------- ; GetBusInfo ; Shell Section ; Called locally to find out what busses are present in the machine ; ; RETURNS: ; $0: Error indicator ; $1: Number of ISA busses ; $2: Number of EISA busses ; $3: Number of PCI busses ;-------------------------------------------------------------------------- [GetBusInfo] ; Might as well get everything even though we only have an ISA board ; at present. set numISA = 0 set numEISA = 0 set numMCA = 0 set numPCI = 0 read-syms GeneralConstants read-syms InstallConstants OpenRegKey $(!REG_H_LOCAL) "" $(MultiAdapter) $(MaskAllAccess) + KeyMultiAdapter ifstr $(KeyMultiAdapter) == $(KeyNull) goto GetEISABusInfo endif EnumRegKey $(KeyMultiAdapter) BusList ForListDo $(BusList) set RegName = $(MultiAdapter)"\"*($($),1) OpenRegKey $(!REG_H_LOCAL) "" $(RegName) $(MaskAllAccess) KeyBus ifstr $(KeyBus) != $(KeyNull) GetRegValue $(KeyBus) Identifier IdentifierData set BusType = *($(IdentifierData), 4) shell "" DisplayProgress "RASTEL: Found bus:"$(BusType) ifstr(i) $(BusType) == ISA set-add numISA = $(numISA), 1 else-ifstr(i) $(BusType) == MCA set-add numMCA = $(numMCA), 1 else-ifstr(i) $(BusType) == PCI set-add numPCI = $(numPCI), 1 endif CloseRegKey $(KeyBus) endif EndForListDo CloseRegKey $(KeyMultiAdapter) ; EISA info scan. This is the same as the others but under the EISA key GetEISABusInfo = + OpenRegKey $(!REG_H_LOCAL) "" $(EISAAdapter) $(MaskAllAccess) KeyEISAAdapter ifstr $(KeyEISAAdapter) == $(KeyNull) goto GetBusInfo_return endif shell "" DisplayProgress "RASTEL: Found EISA key:" ; ; There is an EISA key in registry EnumRegKey $(KeyEISAAdapter) BusList ForListDo $(BusList) set RegName = $(EISAAdapter)"\"*($($),1) OpenRegKey $(!REG_H_LOCAL) "" $(RegName) $(MaskAllAccess) KeyBus ifstr $(KeyBus) != $(KeyNull) GetRegValue $(KeyBus) Identifier IdentifierData set BusType = *($(IdentifierData), 4) ifstr(i) $(BusType) == EISA set-add numEISA = $(numEISA), 1 endif CloseRegKey $(KeyBus) endif EndForListDo CloseRegKey $(KeyEISAAdapter) ; Exit, returning the gathered bus info GetBusInfo_return = + shell "" DisplayProgress "RASTEL: ISA="$(numISA)+ " EISA="$(numEISA)" MCA="$(numMCA)" PCI="$(numPCI) return $(ErrorIndex) $(numISA) $(numEISA) $(numMCA) $(numPCI) ;-------------------------------------------------------------------------- ; CARDEXISTEDDLG ; Shell Section ; Called locally to ask user if they really want to add another card ;-------------------------------------------------------------------------- [CardExistedDlg] ; ; Get the strings etc. to display read-syms GeneralConstants read-syms MessageConstants$(!STF_LANGUAGE) ; ; Use std. subroutine to do dialog shell $(SubroutineInf) SetupMessage $(!STF_LANGUAGE) "WARNING" $(CardExistedText) ; ; Check for errors ifint $($ShellCode) != $(!SHELL_CODE_OK) set ErrorIndex = MBV_SHELLCODE_ERROR endif ; ; return error (if any) and result return $(ErrorIndex), $($R1) ;-------------------------------------------------------------------------- ; INSTALL_OPTION ; Install Section ; Called when INSTALL is selected to build list of files to copy and copy them ;-------------------------------------------------------------------------- [Install_Option] set STF_VITAL = 1 ifstr(i) $(AddCopy) == YES AddSectionFilesToCopyList FilesConfig $(SrcDir) + $(!STF_WINDOWSSYSPATH) AddSectionFilesToCopyList FilesDriver $(SrcDir) + $(!STF_WINDOWSSYSPATH)\drivers endif ifstr(i) $(DoCopy) == YES set !STF_NCPA_FLUSH_COPYLIST = TRUE CopyFilesInCopyList endif exit ;-------------------------------------------------------------------------- ; INSTALL_UPDATE ; Install Section ; Called when UPDATE is selected to build list of files to copy and copy them ;-------------------------------------------------------------------------- [Install_Update] set STF_VITAL = 1 set STF_OVERWRITE = VERIFYSOURCEOLDER AddSectionFilesToCopyList FilesInf $(SrcDir) + $(!STF_WINDOWSSYSPATH) AddSectionFilesToCopyList FilesConfig $(SrcDir) + $(!STF_WINDOWSSYSPATH) AddSectionFilesToCopyList FilesDriver $(SrcDir) + $(!STF_WINDOWSSYSPATH)\drivers set !STF_NCPA_FLUSH_COPYLIST = TRUE CopyFilesInCopyList exit ;--------------------------------------------------------------------------- ; GETERRORSTRING ; Look up error message ;--------------------------------------------------------------------------- [GetErrorString] read-syms GeneralConstants set ErrorCodes = ^(ErrorStrings$(!STF_LANGUAGE), 0) set ErrorList = ^(ErrorStrings$(!STF_LANGUAGE), 1) set Error = *($(ErrorList), ~($(ErrorCodes), $($0))) ifstr $(Error) == "" shell $(UtilityInf) RegistryErrorString $($0) ifint $($ShellCode) == $(!SHELL_CODE_OK) set Error = $($R0) else set Error = #(ErrorStrings$(!STF_LANGUAGE), MBV_SHELLCODE_ERROR, 1) endif endif return $(Error) ;----------------------------------------------------------------------- ;DATE ; get the date from the system ;----------------------------------------------------------------------- [date] ; ; Now is a list which contains { Sec from 1-1-1970, Year, Month, Day, Hour, ; ; Minute, Second } Now = {} ? $(!LIBHANDLE) GetSystemDate ;----------------------------------------------------------------------- ;BuildResult ; ;build the result from the dll (although the dll wasn't actually called ; ;This is used so that we don't have to change much code to support the ; ;unattended install that has been called for. ; ; $($0) = the type of card being installed ; ; $($1) = number of ISA busses in this machine ; ; $($2) = number EISA busses in this machine ; ; $($3) = number of MCA busses on this machine ; ; $($4) = number of PCI busses on this machine ; ; R0 = Error, or noError ; ; R1 = the built result list ; ;----------------------------------------------------------------------- [BuildResult] ; ; Assume that no error will occur (dangerous I know) ; set Option = $($0) set numISA = $($1) set numEISA = $($2) set numMCA = $($3) set numPCI = $($4) set Error = 0; set returnValue = {} ; ;Set all values that may be in an unattend section to default values ; set BaseIO = "288" set BusNumber = "0" set StatusRegister = "1312" set IRQ = "10" set BusType = "5" set Slot = "0" set Port1 = "COM3" set Port2 = "COM4" set Port3 = "COM5" set Port4 = "COM6" set Port5 = "COM7" set Port6 = "COM8" set Port7 = "COM9" set Port8 = "COM10" ;* ;Temporary variable assignments for testing the unattended setup ; ;set MatCardParameterName = {"NetworkAddress", "BusNumber", "StatusRegister", "IRQ", "BusType", "Port1", "Port2", + ; "Port3", "Port4"} ;set MatCardParameterValue = {"320", "0", "1344", "2", "5", "COM4", "COM5", "COM6", "COM7"} ; ; Ensure that this is being called from an unattended installation ; ifstr(I) $(STF_GUI_UNATTENDED) != "YES" set error = 1 goto BuildResultReturn endif ; ;Now obtain all values that may be relavent ; ForListDo $(!NetCardParameterName) set Name = $($) set Value = *($(!NetCardParameterValue), $(#)) ifstr(i) $(Name) == "NetworkAddress" set BaseIO = $(Value) else-ifstr(i) $(Name) == "BusNumber" set BusNumber = $(Value) else-ifstr(i) $(Name) == "StatusRegister" set StatusRegister = $(Value) else-ifstr(i) $(Name) == "IRQ" set IRQ = $(Value) else-ifstr(i) $(Name) == "BusType" set BusType = $(Value) else-ifstr(i) $(Name) == "Port1" set Port1 = $(Value) else-ifstr(i) $(Name) == "Port2" set Port2 = $(Value) else-ifstr(i) $(Name) == "Port3" set Port3 = $(Value) else-ifstr(i) $(Name) == "Port4" set Port4 = $(Value) else-ifstr(i) $(Name) == "Port5" set Port5 = $(Value) else-ifstr(i) $(Name) == "Port6" set Port6 = $(Value) else-ifstr(i) $(Name) == "Port7" set Port7 = $(Value) else-ifstr(i) $(Name) == "Port8" set Port8 = $(Value) endif EndForListDo set returnValue = { 0, $(BusType), $(BusNumber), $(Slot), $(BaseIO), + $(StatusRegister), $(IRQ)} set ComList = {$(Port1), $(Port2), $(Port3), $(Port4)} ;set ComList = {"com2", "com3", "com4", "com5"} ;shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) STATUS + ; $(ComList) ifstr(i) $(Option) == "C" ; ;We might want to put in these extra values to the list of com ports ; set ComList = >($(ComList), $(Port5)) set ComList = >($(ComList), $(Port6)) set ComList = >($(ComList), $(Port7)) set ComList = >($(ComList), $(Port8)) endif ; ; Now add the list of comports to the return list ; set returnValue = >($(returnValue), $(ComList)) BuildResultReturn = + Return $(returnValue) ; ;End of BuildResult ; ;----------------------------------------------------------------------- ;SetComMappings ; ;Shell section to add values to the registry under the serial map. ;This is used so that if more than one card is installed the installation ;will not allow com ports that are already assigned to be re-assigned ; ; $($0) = the number of this adapter ; ; $($1) = the list of com port names to be associated with this adapter ; ; R0 = Error, or noError (0 for error, 1 for no error) ; ;----------------------------------------------------------------------- [SetComMappings] read-syms GeneralConstants read-syms InstallConstants ; ;Copy the input parameters into more meaningful names ; set AdapterNumber = $($0) set ComList = $($1) ;shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) STATUS + ; "Were going to try writing the device map" ;shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) STATUS + ; $(ComList) ; ;Try to open the serial map key ; OpenRegKey $(!REG_H_LOCAL) "" $(SerialMap) $(MaskAllAccess) SerialMapKey ifstr(i) $(SerialMapKey) == $(KeyNull) ; shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) STATUS + ; "Unable to open serial map key" set Error = 1 goto ReturnOptions endif ; ;Now write the com port list into the key (as volatile keys) ; ForListDo $(ComList) SetRegValue $(SerialMapKey) {"RAStel"$(AdapterNumber)":"$(#), + 0, $(!REG_VT_SZ), $($)} ifint $(!RegLastError) == "0" ;shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) STATUS + ; "No error" else ;shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) STATUS + ; "error" endif ;shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) STATUS + ; $($) EndForListDo ReturnOptions = + return Error ; ;End of SetComMappings ; ; ;Code to determine whether the reference count is small enough to warrant removing the ;registry information. ; ; ; ;Download 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.