OEMSETUP.INF Driver File Contents (symb_dmi.zip)

;*           Name:  OEMSETUP.INF
;*          Title:  S53C885.SYS setup file for Windows NT 4.0
;*  Creation Date:  March 18, 1997
;*
;*  Version History
;*  ---------------
;*
;*    Date    Who?  Description
;*  --------  ----  -------------------------------------------------------
;#BeginRevision
;*  05/13/97  RAJ   Updated to allow install for ALPHA
;*                  Changed references from Files-Dll and Files-$(Option) to
;*                      Files-$(!STF_PLATFORM)-xxx.
;*                  Removed [ProductType] section
;*                  Added new Alpha file names as A53C885.*, these are renamed
;*                      to S53C885.* when they are copied to the system disk.
;#EndRevision
;*  04/10/97  RAJ   Added capability to install NDIS 3 or NDIS 4 driver.
;#EndRevision
;*  03/24/97  RAJ   Fixed install problem when installing with networking.  If
;*                      we were being installed at the same time as networking
;*                      was being installed, we would fail to load the DLL
;*                      because we weren't copying the DLL.  I removed the
;*                      conditions from the install-adapterfiles call and
;*                      changed a parameter to DoAskSource.
;#EndRevision
;*  03/20/97  RAJ   Updated to not allow install on NT version prior to 4.0.
;*  03/18/97  RAJ   Created.
;*                  Product version = 1.0 for 1.00.02 release.  The product
;*                      version should only be updated for GCA releases, but
;*                      needs to be updated even if this file doesn't change.
;#EndRevision
;*
;#BeginDescription
;*
;*  This file contains the S53C885.SYS Windows NT 4.0 OEM setup initialization
;*  scripts.
;*
;#EndDescription
;*
;*-------------------------------------------------------------------------

;---------------------------------------------------------------------------
; [Identification] is used to identify what type of installation script this
;   is.  The SETUP.EXE program uses this when searching for setup files.
;
; [PlatformsSupported] identifies what types of bus this installation script
;   will possibly have adapters on.  If the machine running this script doesn't
;   have this type of bus then this script won't be usable.
;
; [LanguagesSupported] identifies which languages we will support for
;   installation text and prompts.
;---------------------------------------------------------------------------

[Identification]
    OptionType = NetAdapter

[PlatformsSupported]
    PCI

[LanguagesSupported]
    ENG

;---------------------------------------------------------------------------
; [Options] is used as an identifier throughout this file when it supports
;   multiple types of installations.  For instance, if we had two adapters
;   of different types, the Options field would identify each type of
;   installation.  When the user chooses the adapter to install from the
;   list presented by the network control panel applet, SETUP.EXE uses this
;   option to tell us what adapter to install.
;---------------------------------------------------------------------------

[Options]
    SYM885
    SYM885_NDIS3

[DebugVars]
    ; Set to 1 to enable debug, 0 to disable debug
    !DebugOutputControl = 1

[GeneralConstants]
    from               = ""
    to                 = ""
    KeyNull            = ""
    MAXIMUM_ALLOWED    = 33554432
    RegistryErrorIndex = NO_ERROR
    KeyProduct         = ""
    KeyParameters      = ""
    TRUE               = 1
    FALSE              = 0
    NoTitle            = 0
    OldVersionExisted  = $(FALSE)

[FileConstants]
    ; The following are the version of this driver release and are stored in the
    ; registry as such.

    ProductMajorVersion     = "1"
    ProductMinorVersion     = "0"

    ; The following values are used for all versions of this driver.  We can not
    ; change these without causing bad side-effects.  For instance, changing the
    ; manufacturer would allow two copies of this software to be installed at
    ; the same time which would not necessairly be good.

    Manufacturer            = "SymbiosLogic"
    ProductSoftwareName     = "S53C885"

    UtilityInf              = "UTILITY.INF"
    subroutineinf           = "SUBROUTN.INF"
    NetEventDLL             = "%SystemRoot%\System32\netevent.dll"
    SoftwareType            = "driver"
    ProductVersion          = $(ProductMajorVersion)"."$(ProductMinorVersion)
    ProductSoftwareImagePath= "\SystemRoot\System32\drivers\"$(Driver$(Option)FileName)
    NetRuleSoftwareType     = "Sym885Sys ndisDriver Sym885Driver"
    NetRuleSoftwareUse      = $(SoftwareType)
    NetRuleSoftwareBindForm = """Sym885Sys"" yes no container"
    NetRuleSoftwareClass    = {"Sym885Driver basic"}
    NetRuleSoftwareBindable = {"Sym885Driver Sym885Adapter non exclusive 100"}
    ProductHardwareName     = $(ProductSoftwareName)
    NetRuleHardwareType     = "Sym885LAN Sym885Adapter"
    NetRuleHardwareBindForm = " yes yes container"
    NetRuleHardwareClass    = {"Sym885Adapter basic"}
    ProductKeyName = $(!NTN_SoftwareBase)"\"$(Manufacturer)"\"$(ProductSoftwareName)"\CurrentVersion"

;---------------------------------------------------------------------------
; 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 DebugVars
    Debug-Output "S53C885:[Identify]"

    Read-Syms Identification
    Set Status     = STATUS_SUCCESSFUL
    Set Identifier = $(OptionType)
    Set Media      = #("Source Media Descriptions", 1, 1)
    Debug-Output "S53C885:Identify returns="$(Status)","$(Identifier)","$(Media)
    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 | ... )
;                $($1):  Platform (ISA | EISA | PCI | ... )
;
; OUTPUT:        $($R0): STATUS: STATUS_SUCCESSFUL |
;                                STATUS_NOLANGUAGE
;                                STATUS_FAILED
;                                STATUS_NOTSUPPORTED
;
;                $($R1): Option List
;                $($R2): Option Text List
;------------------------------------------------------------------------
[ReturnOptions]
    Read-Syms DebugVars
    Debug-Output "S53C885:[ReturnOptions]"
    Debug-Output "S53C885:  0=Lang = "$($0)
    Debug-Output "S53C885:  1=Platforms = "$($1)

    Set Status         = STATUS_FAILED
    Set OptionList     = {}
    Set OptionTextList = {}

    ; Extract a list of supported languages from the [LanguagesSupported]
    ; section first element.

    Set LanguageList   = ^(LanguagesSupported, 1)
    Ifcontains(i) $($0) in $(LanguageList)
        ifstr(i) $($1) == ""
            goto returnoptions
        endif

        Set PlatformList = ^(PlatformsSupported, 1)
        Ifcontains(i) $($1) in $(PlatformList)
            goto returnoptions
        else
            Set Status = STATUS_NOTSUPPORTED
            goto finish_ReturnOptions
        endif
    else
        Set Status = STATUS_NOLANGUAGE
        goto finish_ReturnOptions
    endif

returnoptions = +
    Set OptionList     = ^(Options, 1)
    Set OptionTextList = ^(OptionsText$($0), 1)
    Set Status         = STATUS_SUCCESSFUL

finish_ReturnOptions = +
    Debug-Output "S53C885:ReturnOptions returns="$(Status)","$(OptionList)","$(OptionTextList)
    Return $(Status) $(OptionList) $(OptionTextList)

;------------------------------------------------------------------------
;
; 3. InstallOption:
;
;      This section is shelled to by main installation processing
;      or by NCPASHEL.INF during reconfig, removal, update, etc.
;
;
; FUNCTION:  To copy files representing Options
;            To configure the installed option
;            To update the registry for the installed option
;
; INPUT:     $($0):  Language to use
;            $($1):  OptionID to install
;            $($2):  SourceDirectory
;            $($3):  AddCopy  (YES | NO)
;            $($4):  DoCopy   (YES | NO)
;            $($5):  DoConfig (YES | NO)
;
; OUTPUT:    $($R0): STATUS: STATUS_SUCCESSFUL |
;                            STATUS_NOLANGUAGE |
;                            STATUS_USERCANCEL |
;                            STATUS_FAILED
;
;------------------------------------------------------------------------

[InstallOption]
    Read-Syms DebugVars
    Debug-Output "S53C885:[InstallOption]"
    Debug-Output "S53C885:  0=Language          = "$($0)
    Debug-Output "S53C885:  1=Option to install = "$($1)
    Debug-Output "S53C885:  2=Source directory  = "$($2)
    Debug-Output "S53C885:  3=AddCopy  = "$($3)
    Debug-Output "S53C885:  4=DoCopy   = "$($4)
    Debug-Output "S53C885:  5=DoConfig = "$($5)

    Set Status   = STATUS_FAILED
    Set Option   = $($1)
    Set SrcDir   = $($2)
    Set AddCopy  = $($3)
    Set DoCopy   = $($4)
    ;Set DoConfig = $($5)

    Set LanguageList = ^(LanguagesSupported, 1)
    Ifcontains(i) $($0) NOT-IN $(LanguageList)
        Return STATUS_NOLANGUAGE
    endif

    ; Initialize our symbols for this program.  The order below is important as
    ; some sections use data from previous sections.

    Read-Syms FileNames
    Read-Syms GeneralConstants
    Read-Syms FileConstants
    Read-Syms FileConstants$(!STF_LANGUAGE)
    Read-Syms DialogConstants$(!STF_LANGUAGE)
    Read-Syms DefaultSettings

    ; NTN_Origination is install when networking is first being installed on the
    ; system.  It is NCPA when networking is already installed and is being run
    ; from the control panel

    Debug-Output "S53C885:  NTN_Origination = "$(!NTN_Origination)
    ifstr(i) $(!NTN_Origination) == "NCPA"
        Set Continue = $(OK)
    endif

    Detect date
    Set-title $(FunctionTitle)
    Set to   = Begin
    Set from = Begin
    Set CommonStatus = STATUS_SUCCESSFUL
    EndWait         ; Display the mouse arrow cursor rather than the hourglass

Begin = +
    Debug-Output "S53C885:At Begin"

    ; We don't allow installation on NT versions our software doesn't support so
    ; determine the current NT version and exit out if not supported.
    ;
    ;   SYM885       = NDIS 4 driver = NT 4.0 or later required
    ;   SYM885_NDIS3 = NDIS 3 driver = NT 3.51 or later required

    OpenRegKey $(!REG_H_LOCAL) "" +
        $(!NTN_SoftwareBase)"\Microsoft\Windows NT\CurrentVersion" +
        $(!REG_KEY_READ) KeyNt
    ifstr(i) $(KeyNt) != $(KeyNull)

        ; If we were able to open the key then get the registry value for the
        ; current version.  Currently I have seen this as 3.1, 3.5, 3.51, and
        ; 4.0

        Set CurrentVersionValue = ""
        GetRegValue $(KeyNt) "CurrentVersion" CurrentVersionValue
        Debug-Output "S53C885:  WinNT CurrentVersion ="$(CurrentVersionValue)
        CloseRegKey $(KeyNt)

        ifstr(i) $(CurrentVersionValue) == ""
            Debug-Output "S53C885:  Error obtaining NT version"
            set Error = "There was an error accessing the registry"
            goto fatal
        endif

        ; The registry data format is a list of 4 items, the 4th item is the
        ; data.  Split the data string into its separate components using the
        ; '.' as the separator.  The resulting list will be like:{"4",".","0"}
        ; or {"3",".","51"}

        Split-String *($(CurrentVersionValue),4) "." MajorNtVersionList
        Debug-Output "S53C885:  MajorNtVersionList="$(MajorNtVersionList)
        Set MajorNtVersion = *($(MajorNtVersionList),1)
        Set MinorNtVersion = *($(MajorNtVersionList),3)
        Debug-Output "S53C885:  MajorNtVersion="$(MajorNtVersion)
        Debug-Output "S53C885:  MinorNtVersion="$(MinorNtVersion)

        ifstr(i) $(Option) == "SYM885"
            ifint $(MajorNtVersion) < 4
                Debug-Output "S53C885:  Version not supported"
                set Error = "This driver does not support Windows NT version "*($(CurrentVersionValue),4)
                goto fatal
            endif
        else
            ifint $(MajorNtVersion) == 3
                ifint $(MinorNtVersion) != 51
                    Debug-Output "S53C885:  Version not supported"
                    set Error = "This driver does not support Windows NT version "*($(CurrentVersionValue),4)
                    goto fatal
                endif
            endif
        endif
    else
        Set RegistryErrorIndex = $(RegLastError)
        goto fatalregistry
    endif

    ; Figure out the mode we are to work on and go from there.

    ifstr(i) $(!NTN_InstallMode) == deinstall
        Set StartLabel = removeadapter
    else-ifstr(i) $(!NTN_InstallMode) == Update
        Set StartLabel = UpgradeSoftware
    else-ifstr(i) $(!NTN_InstallMode) == bind
        ; Never seen this call and probably should never see it either
        Set StartLabel = bindingadapter
    else-ifstr(i) $(!NTN_InstallMode) == configure
        Set StartLabel = configureadapter
        ifstr(i) $(ProductKeyName) == $(!NTN_RegBase)
            Debug-Output "S53C885:  Cannot configure the S53C885 driver software."
            Shell $(UtilityInf), RegistryErrorString, CANNOT_CONFIGURE_SOFTWARE
            ifint $($ShellCode) != $(!SHELL_CODE_OK)
                goto ShellCodeError
            endif
            Set Error = $($R0)
            Set from = end
            Set to = end
            goto nonfatalinfo
        endif
    else
        Set StartLabel = installadapter
        Set OEM_ABANDON_OPTIONS = {}
        Set OEM_ABANDON_SOFTWARE = FALSE
        Set OEM_ABANDON_ON = TRUE
    endif

    Set from = fatal
    Set to = fatal
    goto $(StartLabel)

;---------------------------------------------------------------------------
; Install the adapter and associated files
;---------------------------------------------------------------------------

installadapter = +
    StartWait
    Debug-Output "S53C885:At installadapter"
    Set-hextodec PciVendorId = 1000  ;4096
    Set-hextodec PciDeviceId = 0701  ;1793

    ; Call the UTILITY.INF GetPCIInformation routine to find our PCI chip.

    Debug-Output "S53C885:  Looking for 53C885 chip"
    Shell $(UtilityInf), GetPCIInformation, $(PciVendorId), $(PciDeviceId)
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
        goto ShellCodeError
    endif
    Debug-Output "S53C885:  Return from shell GetPCIInformation="$($R0)

    ; See if we could not find any cards.  If so, setup the error string for the
    ; nonfatal window, Set from to 'end' to force exit after displaying the
    ; message, then display the error

    ifstr(i) $($R0) == {}
        Debug-Output "S53C885:No Symbios Logic cards found"
        Set Error = $(CANNOT_FIND_ANY_CARD)
        Set CommonStatus = USER_CANCEL
        Set from = end
        goto nonfatal
    endif

    Set AdapterList = $($R0)
    Set NewAdapterList = {}
    Set NumNew = 0

    ForListDo $(AdapterList)
        Debug-Output "S53C885:  Examining adapter="$($)
        Set BusNumber    = *($($),1)
        Set DeviceNumber = *($($),2)
        Set FunctionId   = *($($),3)

        ; In order to use the IsNetCardAlreadyInstalled, we must generate a slot
        ; number in the manner that NT does.  The NT slot number is the PCI
        ; device number in the lower 5 bits and the PCI function id in bits 5..7
        ; To generate this in this code, we must multiply the slot number by 20h
        ; which is 32 to generate the value of bits 5..7, then we 'OR' in the
        ; device number for bits 0..4

        Set-mul SlotNumber = $(FunctionId), 32
        Set-add SlotNumber = $(SlotNumber), $(DeviceNumber)

        ; If this adapter is already installed, then don't add it to our list
        ; of new adapters.

        Debug-Output "S53C885:  IsNetCardAlreadyInstalled:"$(BusNumber)","$(SlotNumber)","$(GenericAdapterName)","$(ProductHardwareName)
        Shell $(UtilityInf), IsNetCardAlreadyInstalled, $(BusNumber), +
              $(SlotNumber), $(GenericAdapterName), $(ProductHardwareName)
        Debug-Output "S53C885:  IsNetCardAlreadyInstalled returned="$($R0)","$($R1)

        ifstr(i) $($R0) != "NO_ERROR"
            Set Error = $($R0)
            goto fatal
        endif

        ifstr(i) $($R1) == "YES"
            Debug-Output "S53C885:  Card is already installed"
        else

            ; Increment the adapter count and add this adapter to our new
            ; adapter list

            Set-add NumNew = $(NumNew),1
            ifstr(i) $(NewAdapterList) == {}
                Set NewAdapterList = {$($)}
            else
                Set NewAdapterList = >($(NewAdapterList),$($))
            endif
        endif
    EndForListDo

    ; See if we could not find any new cards.  If so, setup the error string for
    ; the nonfatal window, Set from to 'end' to force exit after displaying the
    ; message, then display the error

    ifint $(NumNew) == 0
        Debug-Output "S53C885:No new Symbios Logic cards found"
        Set Error = $(CANNOT_FIND_NEW_CARD)
        Set CommonStatus = STATUS_USERCANCEL
        Set from = end
        goto nonfatal
    endif

    Set AdapterList = $(NewAdapterList)
    Debug-Output "S53C885:  NumNew="$(NumNew)", AdapterList="$(AdapterList)

    ; Check to see if the software already exists on this machine.  If so, then
    ; popup a dialog and ask whether or not the user wants to continue.  At this
    ; point, we would be installing the new adapters using the same level of
    ; software.  If the user chooses to continue, we will NOT copy any files but
    ; will simply setup the registry for the new adapter(s).

    OpenRegKey $(!REG_H_LOCAL) "" $(ProductKeyName) $(MAXIMUM_ALLOWED) KeyProduct
    ifstr(i) $(KeyProduct) != $(KeyNull)

        ; Close the registry key that we opened and popup the dialog

        CloseRegKey $(KeyProduct)
        Set KeyProduct = ""
        Debug-Output "S53C885:  Calling CardExistedDlg"
        Shell $(UtilityInf), CardExistedDlg
        Debug-Output "S53C885:  CardExistedDlg returns 0="$($R0)",1="$($R1)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            goto ShellCodeError
        endif

        ; If the user cancelled this operation, we are not in the middle of any
        ; state so just go to the end marker and return a user cancelled status

        ifstr(i) $($R1) != "OK"     ;R1 is the button value
            Set CommonStatus = STATUS_USERCANCEL
            goto end
        endif

        ; If the user wants to continue then set our flag to indicate that we
        ; don't want to modify or add our software settings again.

        Set OldVersionExisted = $(TRUE)
    endif

    ; Our files are in the directory $(SrcDir).  If we are installing at the
    ; same time networking is being installed, then calling DoAskSource would
    ; cause the user confusion by asking for the NT CD directory first, then
    ; asking for our directory even though we know where our files are at.
    ; So instead of asking the user where our files are at, we just use our
    ; input parameters to [installoption] to find the files.

    Debug-Output "S53C885:  Installing adapter files from "$(SrcDir)
    install "Install-AdapterFiles"
    ifstr(i) $(STF_INSTALL_OUTCOME) != STF_SUCCESS
        Debug-Output "S53C885:  Unable to install adapter files"
        Shell $(UtilityInf), RegistryErrorString, "UNABLE_COPY_FILE"
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            goto ShellCodeError
        endif
        Set Error = $($R0)
        goto fatal
    endif

    ; Skip the configure section and go directly to setup the options for the
    ; adapter.  This is done so that configureadapter can fall through to
    ; adapteroptions

    goto adapteroptions

;---------------------------------------------------------------------------
; The user choose to configure the adapter.  Read the current settings from the
; registry then go to the adapteroptions section.
;---------------------------------------------------------------------------

configureadapter = +
    StartWait
    Debug-Output "S53C885:At configureadapter"
    ifstr(i) $(KeyProduct) == $(KeyNull)
        Debug-Output "S53C885:  Keyproduct==null"
        OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_RegBase) $(MAXIMUM_ALLOWED) KeyProduct
        ifstr(i) $(KeyProduct) == $(KeyNull)
            Debug-Output "S53C885:  Cannot find component product key"
            Set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
            goto fatalregistry
        endif
    endif

    ; Get the other parameters;  they're attached to the service parameters key

    Debug-Output "S53C885:  Shelling to FindService"
    Shell $(UtilityInf), FindService, $(KeyProduct)
    Debug-Output "S53C885:  FindService returns 0="$($R0)",1="$($R1)",2="$($R2)",3="$($R3)

    CloseRegKey $(KeyProduct)
    Set KeyProduct = ""

    ifint $($ShellCode) != $(!SHELL_CODE_OK)
        goto ShellCodeError
    endif
    ifstr(i) $($R0) != NO_ERROR
        Debug-Output "S53C885:  FindService error: "$($R0)
        Set RegistryErrorIndex = $($R0)

        ifstr(i) $($R1) != $(KeyNull)
            CloseRegKey $($R1)
        endif
        ifstr(i) $($R2) != $(KeyNull)
            CloseRegKey $($R2)
        endif
        goto fatalregistry
    endif

    ; We don't need the services key $($R1), so close it.

    CloseRegKey $($R1)
    Set KeyParameters = $($R2)

    ifstr(i) $(KeyParameters) == $(KeyNull)
        Debug-Output "S53C885:  Cannot find component service"
        Set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
        goto fatalregistry
    endif

    ; Because we are configuring an existing adapter, set OldVersionExisted and
    ; read all of the current registry settings.

    Set OldVersionExisted = $(TRUE)
    Set ValueName = ""
    Set ValueData = ""
    Set ValueStr  = ""
    Set ValueList = {}

    EnumRegValue $(KeyParameters) ValueList
    ForListDo $(ValueList)
        Set ValueItem = $($)
        Set ValueName = *($(ValueItem),1)
        Set ValueData = *($(ValueItem),4)
        Debug-Output "S53C885:  ValueItem="$(ValueItem)

        ifstr(i) $(ValueName) == "BusType"
            Set BusType = $(ValueData)
        else-ifstr(i) $(ValueName) == "BusNumber"
            Set BusNumber = $(ValueData)
        else-ifstr(i) $(ValueName) == "DeviceNumber"
            Set DeviceNumber = $(ValueData)
        else-ifstr(i) $(ValueName) == "FunctionId"
            Set FunctionId = $(ValueData)
        else-ifstr(i) $(ValueName) == "SlotNumber"
            Set SlotNumber = $(ValueData)
        else-ifstr(i) $(ValueName) == "ConnectionTypeValue"
            Set ConnectionTypeValue = $(ValueData)
        else-ifstr(i) $(ValueName) == "ConnectionType"
            Set ConnectionType = $(ValueData)
        else-ifstr(i) $(ValueName) == "ConnectorType"
            Set ConnectorType = $(ValueData)
        else-ifstr(i) $(ValueName) == "Speed"
            Set Speed = $(ValueData)
        else-ifstr(i) $(ValueName) == "Duplex"
            Set Duplex = $(ValueData)
        else
            Debug-Output "S53C885:  Unknown registry key="$(ValueName)
        endif
    EndForListDo

    ; NOTE: At this point, KeyParameters is still open and will be used at
    ; skipOptions to write data to the registry.

;---------------------------------------------------------------------------
; The following section will get user input for configuring this adapter.
;---------------------------------------------------------------------------

adapteroptions = +
    Debug-Output "S53C885:At adapteroptions"
    Set from = adapteroptions

    ; The following is supposed to make the NCPA program use the help button on
    ; our dialog automatically invoke help.  I haven't been able to get this to
    ; work however so we handle the help button ourselves.
    ;
    ;Test this again RAJ
    ;Debug-Output "S53C885:  Setting help file"
    ;SetHelpFile $(HelpFileName) 1 11
    ;Set HelpContext = 1

    ; Load the DLL so we can show and use the dialog for configuration.
    ;
    ; Read the symbols for the dialog.  The dialog uses these variables when it
    ; displays.  The 'ui start' command will display the dialog and wait for the
    ; user to click on OK, Cancel or Help.  Then it is up to us to process the
    ; user message.

    LoadLibrary "x" $(!STF_CWDDIR)$(DllFileName) dllHandle
    Read-Syms Sym885_Setup$(!STF_LANGUAGE)

    Debug-Output "S53C885:  ConnectionTypeValue="$(ConnectionTypeValue)
    Debug-Output "S53C885:  ConnectionType="$(ConnectionType)
    ;Debug-Output "S53C885:  ComboListItemsIn ="$(ComboListItemsIn)
    ;Debug-Output "S53C885:  ComboListItemsOut="$(ComboListItemsOut)
    Debug-Output "S53C885:  Combo1List       ="$(Combo1List)
    Debug-Output "S53C885:  Combo1Out        ="$(Combo1Out)

    EndWait

DlgAgain = +
    ui start "Inputdlg" $(dllHandle)
    Debug-Output "S53C885:  Return button    ="$(ButtonPressed)
    Debug-Output "S53C885:  DLGEVENT         ="$(DLGEVENT)
    Debug-Output "S53C885:  Combo1Out        ="$(Combo1Out)

    ; DLGEVENT's
    ;
    ; CONTINUE = User hit OK button
    ; FREEBUTTON1 = User hit HELP button
    ; BACK = User hit Cancel button
    ; EXIT = User closed the window without using our buttons

    ifstr(i) $(DLGEVENT) == "CONTINUE"

        ; The user has choosen their settings so extract the values then
        ; continue with our setup.  The string in Combo1Out is the setting
        ; choosen.  Extract that value then extract its numerical value for use
        ; in this file.

        Set ConnectionType = $(Combo1Out)
        Set ConnectionTypeValue = *($(ConnectionTypesValues), +
                                    ~($(ConnectionTypesNames), $(Combo1Out)))
    else-ifstr(i) $(DLGEVENT) == "FREEBUTTON1"

        ; User asked for help.  We start a detached process and bring up the
        ; dialog again.  This allows the user to look through the help text and
        ; use the dialog at the same time.  The parameter list for the start
        ; command below is as follows:
        ;
        ;   StartDetachedProcess ExitCode DiskName Reserved ProgramPath Args
        ;
        ; NOTE: The dialog is not supposed to disappear from view until
        ;   'ui pop 1' is executed.  So we don't issue the ui pop command when
        ;   doing help because we will be looping back to the dialog.

        Debug-Output "S53C885:  Action: HELP."
        StartDetachedProcess HelpResult "" "" winhlp32.exe $(!STF_WINDOWSSYSPATH)"\"$(HelpFileName)
        goto DlgAgain
    else
      ;else-ifstr(i) $(DLGEVENT) == "BACK"
      ;else-ifstr(i) $(DLGEVENT) == "EXIT"

        ; If the event was to cancel or exit the operation then we do the same
        ; as if we don't know anything about the event so we combined BACK,
        ; EXIT, and all others into this one location.

        ; Because KeyParameters was left open when we are in configure mode, we
        ; must close it here.

        ifstr(i) $(!NTN_InstallMode) == configure
            CloseRegKey $(KeyParameters)
            Set KeyParameters = ""
        endif

        Set CommonStatus = STATUS_USERCANCEL
        Debug-Output "S53C885:  Action: Cancel,Exit, or Unknown. Bye."
        ui pop 1
        FreeLibrary $(dllHandle)
        goto end
    endif

    ; We only get here if the user hit the continue button.  Free the library
    ; resources then setup our internal variables according to what the user
    ; has choosen.

    ui pop 1
    FreeLibrary $(dllHandle)

    Set ConnectorType = *($(ConnectionTypeList),$(ConnectionTypeValue))
    Set Speed         = *($(SpeedList),$(ConnectionTypeValue))
    Set Duplex        = *($(DuplexList),$(ConnectionTypeValue))

    Debug-Output "S53C885:  ConnectionTypeValue="$(ConnectionTypeValue)
    Debug-Output "S53C885:  ConnectionType     ="$(ConnectionType)
    Debug-Output "S53C885:  ConnectorType      ="$(ConnectorType)
    Debug-Output "S53C885:  Speed              ="$(Speed)
    Debug-Output "S53C885:  Duplex             ="$(Duplex)

;---------------------------------------------------------------------------
; The following section will write or update parameters in the registry
;---------------------------------------------------------------------------

skipoptions =+
    StartWait
    Debug-Output "S53C885:At skipoptions"

    ; If we are in configure mode, we only need to update one adapter, this one.

    ifstr(i) $(!NTN_InstallMode) == configure

        ; "Call" writeparameters which will then "return" to the end label
        ; At this point, because we are in the configure mode, KeyParameters is
        ; open as required by writeparameters.

        Debug-Output "S53C885:  Configuring existing version"
        Set writeparametersreturn = end
        goto writeparameters
    endif

    ; If an old version did not exist and we are in install mode then add the
    ; software component to the registry.
    ;
    ; NOTE: If we reach this point, then no registry keys or other resources are
    ; currently open.

    Debug-Output "S53C885:  OldVersionExisted="$(OldVersionExisted)
    ifint $(OldVersionExisted) == $(FALSE)
        ifstr(i) $(!NTN_InstallMode) == Install
            ifstr(i) $(DoCopy) == "YES"
                Debug-Output "S53C885:  Install mode, preparing to copy files"
                Debug-Output "S53C885:  Calling DoAskSource"
                Debug-Output "S53C885:  !STF_SRCDIR_OVERRIDE="$(!STF_SRCDIR_OVERRIDE)
                Shell $(UtilityInf), DoAskSource, $(!STF_CWDDIR), $(SrcDir), YES
                Debug-Output "S53C885:  DoAskSource returns 0="$($R0)",1="$($R1)",2="$($R2)
                ifint $($ShellCode) != $(!SHELL_CODE_OK)
                    goto ShellCodeError
                else-ifstr(i) $($R0) == STATUS_FAILED
                    Shell $(UtilityInf), RegistryErrorString, "ASK_SOURCE_FAIL"
                    ifint $($ShellCode) != $(!SHELL_CODE_OK)
                        goto ShellCodeError
                    endif
                    Set Error = $($R0)
                    goto fatal
                else-ifstr(i) $($R0) == STATUS_USERCANCEL
                    goto end
                endif
                Set SrcDir = $($R1)
            endif

            StartWait
            install "Install-Option"
            ifstr(i) $(STF_INSTALL_OUTCOME) != STF_SUCCESS
                Debug-Output "S53C885:  Unable to install option files"
                Shell $(UtilityInf), RegistryErrorString, "UNABLE_COPY_FILE"
                ifint $($ShellCode) != $(!SHELL_CODE_OK)
                    goto ShellCodeError
                endif
                Set Error = $($R0)
                goto fatal
            endif
        endif

        ; An old version did not exist so we must add the driver to the registry

        Debug-Output "S53C885:  Calling AddSoftwareComponent"
        Shell $(UtilityInf), AddSoftwareComponent, +
              $(Manufacturer), +
              $(ProductSoftwareName), +
              $(ProductSoftwareName), +
              $(ProductSoftwareTitle), +
              $(STF_CONTEXTINFNAME), +
              $(ProductSoftwareImagePath), "kernel", "NDIS", {}, "",+
              $(NetEventDLL)

        ; In case there is a problem, set our flag telling the abandon routine
        ; to run.

        Set OEM_ABANDON_SOFTWARE = TRUE
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            goto ShellCodeError
        endif

        ; At this point:
        ;   $R1 contains the product version key handle;
        ;   $R2 contains the NetRules subkey handle;
        ;   $R3 contains the new Services key handle; and
        ;   $R4 contains the Parameters key
        ;   $R5 contains the Linkage Key
        ;
        ;   We close the keys we don't need and we leave KeyProduct and
        ;   SoftNetRulesKey available for use.

        Set RegistryErrorIndex = $($R0)
        Set KeyProduct         = $($R1)
        Set SoftNetRulesKey    = $($R2)
        CloseRegKey $($R3)
        CloseRegKey $($R4)
        CloseRegKey $($R5)

        ifstr(i) $(RegistryErrorIndex) != NO_ERROR
            Debug-Output "S53C885:  Registry error adding software components"
            CloseRegKey $(KeyProduct)
            CloseRegKey $(SoftNetRulesKey)
            Set KeyProduct = ""
            Set SoftNetRulesKey = ""
            goto fatalregistry
        endif

        ; Add the following standard keys to:
        ; \HKEY_LOCAL_MACHINE\SOFTWARE\$(Manufacturer)\$(ProductSoftwareName)

        Set NewValueList = { +
            {SoftwareType,$(NoTitle),$(!REG_VT_SZ),$(SoftwareType)},+
            {MajorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProductMajorVersion)},+
            {MinorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProductMinorVersion)},+
            {Title,$(NoTitle),$(!REG_VT_SZ),$(ProductSoftwareTitle)},+
            {Description,$(NoTitle),$(!REG_VT_SZ),$(ProductSoftwareDescription)},+
            {ServiceName,$(NoTitle),$(!REG_VT_SZ),$(ProductSoftwareName)},+
            {InstallDate,$(NoTitle),$(!REG_VT_DWORD),*($(Now),1)}}
        Shell  $(UtilityInf), AddValueList, $(KeyProduct), $(NewValueList)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            CloseRegKey $(KeyProduct)
            CloseRegKey $(SoftNetRulesKey)
            Set KeyProduct = ""
            Set SoftNetRulesKey = ""
            goto ShellCodeError
        endif

        Set RegistryErrorIndex = $($R0)
        ifstr(i) $(RegistryErrorIndex) != NO_ERROR
            Debug-Output "S53C885:  Registry error adding value list to keyproduct"
            CloseRegKey $(KeyProduct)
            CloseRegKey $(SoftNetRulesKey)
            Set KeyProduct = ""
            Set SoftNetRulesKey = ""
            goto fatalregistry
        endif

        ; Add the following standard keys to:
        ; \HKEY_LOCAL_MACHINE\SOFTWARE\$(Manufacturer)\$(ProductSoftwareName)\NetRules

        Set NewValueList = { +
            {type,$(NoTitle),$(!REG_VT_SZ),$(NetRuleSoftwareType)},+
            {use,$(NoTitle),$(!REG_VT_SZ),$(NetRuleSoftwareUse)}, +
            {bindform,$(NoTitle),$(!REG_VT_SZ),$(NetRuleSoftwareBindForm)}, +
            {class,$(NoTitle),$(!REG_VT_MULTI_SZ),$(NetRuleSoftwareClass)}, +
            {bindable,$(NoTitle),$(!REG_VT_MULTI_SZ),$(NetRuleSoftwareBindable)}, +
            {InfOption,$(NoTitle),$(!REG_VT_SZ),$(Option)}}
        Shell  $(UtilityInf), AddValueList, $(SoftNetRulesKey), $(NewValueList)

        CloseRegKey $(KeyProduct)
        CloseRegKey $(SoftNetRulesKey)
        Set KeyProduct = ""
        Set SoftNetRulesKey = ""

        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            goto ShellCodeError
        endif

        Set RegistryErrorIndex = $($R0)
        ifstr(i) $(RegistryErrorIndex) != NO_ERROR
            Debug-Output "S53C885:  Registry error adding value list to softnetruleskey"
            goto fatalregistry
        endif
    endif

    ; We now know our software has been installed as part of the registry.  We
    ; must add information for each instance of our adapter board.
    ;
    ; At this point, no registry keys are open.

    Debug-Output "S53C885:Adding adapter instances to registry:"$(AdapterList)
    ForListDo $(AdapterList)
        Set BusNumber = *($($),1)
        Set DeviceNumber = *($($),2)
        Set FunctionId = *($($),3)
        Debug-Output "S53C885:  Bus="$(BusNumber)",Device="$(DeviceNumber)",Funct="$(FunctionId)

        ; In order to use the IsNetCardAlreadyInstalled, we must generate a slot
        ; number in the manner that NT does.  The NT slot number is the PCI
        ; device number in the lower 5 bits and the PCI function id in bits 5..7
        ; To generate this in this code, we must multiply the slot number by 20h
        ; which is 32 to generate the value of bits 5..7, then we 'OR' in the
        ; device number for bits 0..4

        Set-mul SlotNumber = $(FunctionId), 32
        Set-add SlotNumber = $(SlotNumber), $(DeviceNumber)

        Debug-Output "S53C885:  Adding hardware component"
        Shell $(UtilityInf), AddHardwareComponent, $(ProductHardwareName), +
              $(STF_CONTEXTINFNAME), $(ProductKeyName)

        ; $R0 = Registry error code
        ; $R1 = Key for hardware\netcard\(n)
        ; $R2 = Key for hardware\netcard\(n)\netrules
        ; $R3 = Key for service\parameters
        ; $R4 = Adapter number assigned
        ; $R5 = Service name for this adapter

        Debug-Output "S53C885:  Service name="$($R5)

        ; If we were assigned an adapter number, add this adapter to the list of
        ; things to delete if we fail to install

        ifint $($R4) != -1
            Set OEM_ABANDON_OPTIONS = >($(OEM_ABANDON_OPTIONS), +
                $(!NTN_SoftwareBase)"\Microsoft\Windows NT\CurrentVersion\NetworkCards\"$($R4))
            Debug-Output "S53C885:  OEM_ABANDON_OPTIONS="$(OEM_ABANDON_OPTIONS)
        endif

        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            CloseRegKey $($R1)
            CloseRegKey $($R2)
            CloseRegKey $($R3)
            goto ShellCodeError
        endif

        Set RegistryErrorIndex = $($R0)
        ifstr(i) $(RegistryErrorIndex) != NO_ERROR
            Debug-Output "S53C885:  Registry error adding hardware component"
            CloseRegKey $($R1)
            CloseRegKey $($R2)
            CloseRegKey $($R3)
            goto fatalregistry
        endif

        ; Adding HardNetCardKey values
        ; For any error past this point, we have three registry keys open,
        ; HardNetCardKey, KeyAdapterRules, and KeyParameters

        Debug-Output "S53C885:  Adding HardNetCardKey values"
        Set HardNetCardKey = $($R1)
        Set KeyAdapterRules = $($R2)
        Set KeyParameters = $($R3)
        Set AdapterNumber = $($R4)

        Set NewValueList = { +
            {Manufacturer,$(NoTitle),$(!REG_VT_SZ),$(Manufacturer)},+
            {Title,$(NoTitle),$(!REG_VT_SZ),"["$($R4)"] "$(ProductHardware$(Option)Title)},+
            {Description,$(NoTitle),$(!REG_VT_SZ),$(ProductHardware$(Option)Description)},+
            {ProductName,$(NoTitle),$(!REG_VT_SZ),$(ProductHardwareName)},+
            {ServiceName,$(NoTitle),$(!REG_VT_SZ),$($R5)},+
            {InstallDate,$(NoTitle),$(!REG_VT_DWORD),*($(Now),1)}}

        Shell $(UtilityInf), AddValueList, $(HardNetCardKey), $(NewValueList)

        CloseRegKey $(HardNetCardKey)
        Set HardNetCardKey = ""

        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            CloseRegKey $(KeyAdapterRules)
            CloseRegKey $(KeyParameters)
            Set KeyAdapterRules = ""
            Set KeyParameters = ""
            goto ShellCodeError
        endif

        Set RegistryErrorIndex = $($R0)
        ifstr(i) $(RegistryErrorIndex) != NO_ERROR
            Debug-Output "S53C885:  Registry error adding value list to hardnetcardkey"
            CloseRegKey $(KeyAdapterRules)
            CloseRegKey $(KeyParameters)
            Set KeyAdapterRules = ""
            Set KeyParameters = ""
            goto fatalregistry
        endif

        ; Adding Adapter rules
        ; For any error past this point, we have two registry keys open,
        ; KeyAdapterRules, and KeyParameters

        Debug-Output "S53C885:  Adding adapter rules"
        Set TempProdName = """"$(ProductHardwareName)$(AdapterNumber)""""
        Set TempBindForm = $(TempProdName)$(NetRuleHardwareBindForm)

        Set NewValueList = {{type,$(NoTitle),$(!REG_VT_SZ),$(NetRuleHardwareType)},+
                {bindform,$(NoTitle),$(!REG_VT_SZ),$(TempBindForm)}, +
                {class,$(NoTitle),$(!REG_VT_MULTI_SZ),$(NetRuleHardwareClass)}, +
                {InfOption,$(NoTitle),$(!REG_VT_SZ),$(Option)}}

        Shell $(UtilityInf), AddValueList, $(KeyAdapterRules), $(NewValueList)

        CloseRegKey $(KeyAdapterRules)
        Set KeyAdapterRules = ""

        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            CloseRegKey $(KeyParameters)
            Set KeyParameters = ""
            goto ShellCodeError
        endif

        Set RegistryErrorIndex = $($R0)
        ifstr(i) $(RegistryErrorIndex) != NO_ERROR
            Debug-Output "S53C885:  Registry error adding value list to keyadapterrules"
            CloseRegKey $(KeyParameters)
            Set KeyParameters = ""
            goto fatalregistry
        endif

        ; 'Call' writeparameters by telling it to jump to the first command
        ; after the goto below.  At this point, KeyParameters is open as
        ; required by writeparameters.  writeparameters will close this key for
        ; us.

        Set writeparametersreturn = adapterloopend
        goto writeparameters

adapterloopend = +
        Debug-Output "S53C885:  At adapterloopend"
    EndForListDo
    EndWait
    goto end

;---------------------------------------------------------------------------
; The following section will perform the actual write and will then 'return'
; by performing a jump.
;---------------------------------------------------------------------------
writeparameters = +
    ; At this point, KeyParameters had better refer to the proper adapter:

    Debug-Output "S53C885:At Writeparameters"
    Debug-Output "S53C885:  KeyParameters="$(KeyParameters)

    Shell $(UtilityInf), GetBusTypeNum
    Set BusType = $($R1)
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
        CloseRegKey $(KeyParameters)
        Set KeyParameters = ""
        goto ShellCodeError
    endif
    Debug-Output "S53C885:  GetBusTypeNum="$(BusType)

    ; Add our adapter specific keys to the registry

    Debug-Output "S53C885:  Adding "$(Option)" keys"
    Set NewValueList = { +
        {BusType,$(NoTitle),$(!REG_VT_DWORD),$(BusType)},+
        {BusNumber,$(NoTitle),$(!REG_VT_DWORD),$(BusNumber)},+
        {DeviceNumber,$(NoTitle),$(!REG_VT_DWORD),$(DeviceNumber)},+
        {FunctionId,$(NoTitle),$(!REG_VT_DWORD),$(FunctionId)},+
        {SlotNumber,$(NoTitle),$(!REG_VT_DWORD),$(SlotNumber)},+
        {ConnectionTypeValue,$(NoTitle),$(!REG_VT_DWORD),$(ConnectionTypeValue)},+
        {ConnectionType,$(NoTitle),$(!REG_VT_SZ),$(ConnectionType)},+
        {ConnectorType,$(NoTitle),$(!REG_VT_DWORD),$(ConnectorType)},+
        {Speed,$(NoTitle),$(!REG_VT_DWORD),$(Speed)},+
        {Duplex,$(NoTitle),$(!REG_VT_DWORD),$(Duplex)}}

    Debug-Output "S53C885:  BusType             ="$(BusType)
    Debug-Output "S53C885:  BusNumber           ="$(BusNumber)
    Debug-Output "S53C885:  DeviceNumber        ="$(DeviceNumber)
    Debug-Output "S53C885:  FunctionId          ="$(FunctionId)
    Debug-Output "S53C885:  SlotNumber          ="$(SlotNumber)
    ;Debug-Output "S53C885:  ConnectionTypeValue ="$(ConnectionTypeValue)
    ;Debug-Output "S53C885:  ConnectionType      ="$(ConnectionType)
    ;Debug-Output "S53C885:  ConnectorType       ="$(ConnectorType)
    ;Debug-Output "S53C885:  Speed               ="$(Speed)
    ;Debug-Output "S53C885:  Duplex              ="$(Duplex)

    Shell $(UtilityInf), AddValueList, $(KeyParameters), $(NewValueList)

    CloseRegKey $(KeyParameters)
    Set KeyParameters = ""

    ifint $($ShellCode) != $(!SHELL_CODE_OK)
        goto ShellCodeError
    endif

    Set RegistryErrorIndex = $($R0)
    ifstr(i) $(RegistryErrorIndex) != NO_ERROR
        Debug-Output "S53C885:  Registry error adding value list to keyparameters"
        goto fatalregistry
    endif
    goto $(writeparametersreturn)

;---------------------------------------------------------------------------
; Adapter binding is not implemented but we keep a label for it just in case
; we get called at this location somehow.
;---------------------------------------------------------------------------

bindingadapter =+
    Debug-Output "S53C885:At bindingadapter which is not implemented"
    Set Error = "Binding: Sorry, not yet implemented."
    goto fatal

;---------------------------------------------------------------------------
; The user wants to remove this adapter installation
;---------------------------------------------------------------------------
removeadapter = +
    StartWait
    Debug-Output "S53C885:At removeadapter"
    ifstr(i) $(ProductKeyName) == $(!NTN_RegBase)

        ; Remove Software Component which also removes the hardware component

        Debug-Output "S53C885:  Removing software component"
        Shell $(UtilityInf), RemoveSoftwareComponent, $(Manufacturer), +
              $(ProductSoftwareName)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            goto ShellCodeError
        endif
        Set RegistryErrorIndex = $($R0)
        ifstr(i) $(RegistryErrorIndex) != NO_ERROR
            goto fatalregistry
        endif
    else

        ; Remove hardware component

        Debug-Output "S53C885:  Removing hardware component"
        Shell $(UtilityInf), RemoveHardwareComponent, $(Manufacturer), +
              $(ProductSoftwareName), $(!NTN_RegBase)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            goto ShellCodeError
        endif
        Set RegistryErrorIndex = $($R0)
        ifstr(i) $(RegistryErrorIndex) != NO_ERROR
            goto fatalregistry
        endif
    endif
    goto end

;---------------------------------------------------------------------------
; The user wants to upgrade the software installed
;---------------------------------------------------------------------------

UpgradeSoftware = +
    StartWait
    Debug-Output "S53C885:At UpgradeSoftware"
    OpenRegKey $(!REG_H_LOCAL) "" $(ProductKeyName) $(MAXIMUM_ALLOWED) KeyProduct
    ifstr(i) $(KeyProduct) != $(KeyNull)
        ; Get the current major version to see if we need to do more work or not
        GetRegValue $(KeyProduct),"MajorVersion", VersionInfo
        Set MVersion = *($(VersionInfo), 4)
        Debug-Output "S53C885:  Current major version="$(MVersion)

        ; Update the binaries

        Shell $(UtilityInf), GetInfFileNameFromRegistry, $(KeyProduct)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            CloseRegKey $(KeyProduct)
            Set KeyProduct = ""
            goto ShellCodeError
        endif

        Debug-Output "S53C885:  System INF filename="$($R0)
        set !UG_Filename = $($R0)
        install "Install-Update"
        ifstr(i) $(STF_INSTALL_OUTCOME) != STF_SUCCESS
            CloseRegKey $(KeyProduct)
            Set KeyProduct = ""
            Debug-Output "S53C885:  Unable to update adapter files"
            goto fatal
        endif

        ; Upgrade the version number

        SetRegValue $(KeyProduct) {MajorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProductMajorVersion)}
        SetRegValue $(KeyProduct) {MinorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProductMinorVersion)}
        ifint $(MVersion) != $(ProductMajorVersion)
           ; If the major version number is not the same, this is a major
           ; upgrade.

           Debug-Output "S53C885:  Major upgrade"
        endif
        CloseRegKey $(KeyProduct)
        Set KeyProduct = ""
    else
        ; Cannot Open software key, goto ERROR

        Debug-Output "S53C885:  Can't open the software key, error"
        goto fatalregistry
    endif
    goto end

;---------------------------------------------------------------------------
; Most of the following are the "standard" routines which aren't changed by
; us.
;---------------------------------------------------------------------------

abandon = +
    Debug-Output "S53C885:At Abandon"
    Debug-Output "S53C885:  OEM_ABANDON_OPTIONS="$(OEM_ABANDON_OPTIONS)
    ForListDo $(OEM_ABANDON_OPTIONS)
        Debug-Output "S53C885:  Removing hardware component="$($)
        Shell $(UtilityInf), RemoveHardwareComponent, $(Manufacturer), +
              $(ProductSoftwareName), $($)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            goto ShellCodeError
        endif
        Set RegistryErrorIndex = $($R0)
        ifstr(i) $(RegistryErrorIndex) != NO_ERROR
            goto fatalregistry
        endif
    EndForListDo

    Debug-Output "S53C885:  OEM_ABANDON_SOFTWARE="$(OEM_ABANDON_SOFTWARE)
    ifstr(i) $(OEM_ABANDON_SOFTWARE) == TRUE
        Debug-Output "S53C885:  Removing software component"
        Shell $(UtilityInf), RemoveSoftwareComponent, $(Manufacturer), +
              $(ProductSoftwareName), FALSE
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            goto ShellCodeError
        endif
        Set RegistryErrorIndex = $($R0)
        ifstr(i) $(RegistryErrorIndex) != NO_ERROR
            goto fatalregistry
        endif
    endif
    goto end

nonfatalinfo = +
    Debug-Output "S53C885:At nonfatalinfo"
    Set CommonStatus = STATUS_USERCANCEL
    Set Severity = STATUS
    goto nonfatalmsg

nonfatal = +
    Debug-Output "S53C885:At nonfatal"
    Set Severity = NONFATAL
    goto nonfatalmsg

nonfatalmsg = +
    Debug-Output "S53C885:At nonfatalmsg"
    ifstr(i) $(Error) == ""
        Set Severity = NONFATAL
        Shell $(UtilityInf), RegistryErrorString, "SETUP_FAIL"
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            goto ShellCodeError
        endif
        Set Error = $($R0)
    endif
    Shell $(subroutineinf), SetupMessage, $(!STF_LANGUAGE), $(Severity), $(Error)
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
        goto ShellCodeError
    endif
    Debug-Output "S53C885:  SetupMessage out="$($R1)
    ifstr(i) $($R1) == "OK"
        goto $(from)
    endif
    goto end

fatalregistry = +
    Debug-Output "S53C885:At fatalregistry"
    Shell $(UtilityInf), RegistryErrorString, $(RegistryErrorIndex)
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
        goto ShellCodeError
    endif
    Set Error = $($R0)
    goto fatal

fatal = +
    Debug-Output "S53C885:At fatal"
    ifstr(i) $(Error) == ""
        Shell $(UtilityInf), RegistryErrorString, "SETUP_FAIL"
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            goto ShellCodeError
        endif
        Set Error = $($R0)
    endif
    Shell $(subroutineinf), SetupMessage, $(!STF_LANGUAGE), "FATAL", $(Error)
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
        goto ShellCodeError
    endif
    goto setfailed

ShellCodeError = +

    ; A Shell command has failed for some reason so display the shell code error
    ; dialog then exit.

    Debug-Output "S53C885:At ShellCodeError"
    Set DlgType      = "MessageBox"
    Set STF_MB_TITLE = $(ShellCodeErrorTitle)
    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 = +
    Debug-Output "S53C885:At setfailed"
    Set CommonStatus = STATUS_FAILED

    ; If OEM_ABANDON_ON == TRUE, then remove the registry entries

    ifstr(i) $(OEM_ABANDON_ON) == TRUE
        Set OEM_ABANDON_ON = FALSE
        goto abandon
    endif
    goto end

end = +
    EndWait
    Return $(CommonStatus)

[date]
    Now = {} ? $(!LIBHANDLE) GetSystemDate

;---------------------------------------------------------------------------
; The following section are the values used by the device driver in the
; registry.  This data must match all ConnectionTypes$(!STF_LANGUAGE) in their
; given order.
;---------------------------------------------------------------------------

[ConnectionTypesList]
    2, 1, 1 ;"Automatic",                    1
    2, 1, 1 ;"MII Auto negotiation",         2
    2, 2, 2 ;"MII 10 Mbps, Half Duplex",     3
    2, 2, 3 ;"MII 10 Mbps, Full Duplex",     4
    2, 3, 2 ;"MII 100 Mbps, Half Duplex",    5
    2, 3, 3 ;"MII 100 Mbps, Full Duplex",    6
    1, 1, 2 ;"TP-PMD, Half Duplex",          7
    1, 1, 3 ;"TP-PMD, Full Duplex",          8

;---------------------------------------------------------------------------
; The following sections define our text strings for each supported language.
;---------------------------------------------------------------------------

[ConnectionTypesENG]
    "Automatic",                    1
    "MII Auto negotiation",         2
    "MII 10 Mbps, Half Duplex",     3
    "MII 10 Mbps, Full Duplex",     4
    "MII 100 Mbps, Half Duplex",    5
    "MII 100 Mbps, Full Duplex",    6
    "TP-PMD, Half Duplex",          7
    "TP-PMD, Full Duplex",          8

[OptionsTextENG]
    SYM885 = "NT 4.0 NDIS 4 Symbios Logic 53C885 Fast Ethernet Driver"
    SYM885_NDIS3 = "NT 3.51 NDIS 3 Symbios Logic 53C885 Fast Ethernet Driver"

[FileConstantsENG]
    ProductSoftwareDescription = "Symbios Logic 53C885 Adapter Driver"
    GenericAdapterName         = "Symbios Logic 53C885 PCI Ethernet Adapter"
    ProductSoftwareTitle       = "Symbios Logic 53C885 PCI Ethernet Driver"
    FunctionTitle              = $(GenericAdapterName)" v"$(ProductVersion)

    ProductHardwareSYM885Title             = $(GenericAdapterName)
    ProductHardwareSYM885Description       = $(GenericAdapterName)
    ProductHardwareSYM885_NDIS3Title       = $(GenericAdapterName)
    ProductHardwareSYM885_NDIS3Description = $(GenericAdapterName)

    CANNOT_FIND_ANY_CARD = "Network card is not present in the system"
    CANNOT_FIND_NEW_CARD = "All Symbios Logic 53C885 adapters have been installed"

; The following are required only when installing our adapter when networking is
; being installed at the same time.  These are used by the system when copying
; our .DLL and .HLP files.

    ProCaption   = "Windows NT Networking Setup"
    ProCancel    = "Cancel"
    ProCancelMsg = "Windows NT is not correctly installed.  Are you sure you "+
                   "want to cancel copying files?"
    ProCancelCap = "Setup Message"
    ProText1     = "Copying:"
    ProText2     = "To:"

[DialogConstantsENG]
    Help        = "&Help"
    Exit        = "E&xit"
    OK          = "&OK"
    Continue    = "C&ontinue"
    Cancel      = "C&ancel"
    HelpContext = ""

[Sym885_SetupENG]

    ; DlgTemplate is the name of the dialog which is part of our DLL.
    ; DlgType is the type of dialog we want to tell setup.exe to process

    DlgTemplate = "SYM885_SETUP"
    DlgType     = "RadioCombination"

    ; The following are the strings the dialog will display

    Sym885_Caption = "S53C885 Ethernet Setup"
    SymConnector = "Choose the interface you wish to use"

    ; ComboXList is the list of text items for the ComboX element
    ; ComboXOut is the output data for the ComboX element.  It is also used to
    ;   Set the default element when creating the dialog.
    ;
    ; All ComboXList items are combined into ComboListItemsIn in numerical order
    ; All ComboXOut items are combined into ComboListItemsOut in numerical order
    ;
    ; Combo1 is our connector selection (MII,TP-PMD)
    ;
    ; NotifyFields indicates for each combo box if we are to be notified or not
    ; when the user makes a change.

    Combo1Out = $(ConnectionType)
    Combo1List = $(ConnectionTypesNames)
    ComboListItemsIn  = { Combo1List }
    ComboListItemsOut = { Combo1Out }
    NotifyFields = {NO}

    ; In order to get our dialog type of RadioCombination to work, we must set
    ; the following.  If we don't, then the combo list is not initialized
    ; correctly.

    Radio1 = ""
    CheckBox1 = ""
    EditTextIn = ""
    EditTextLim = ""
    CBOptionsGreyed = {}

;---------------------------------------------------------------------------
; The following section contains the default settings we will use on this
; system
;---------------------------------------------------------------------------

[DefaultSettings]

    ; Our default connection type is Automatic which translates into MII with
    ; automatic speed and duplex values.

    ConnectionTypesNames = ^(ConnectionTypes$(!STF_LANGUAGE), 1)
    ConnectionTypesValues = ^(ConnectionTypes$(!STF_LANGUAGE), 2)

    ConnectionTypeList = ^(ConnectionTypesList, 1)
    SpeedList          = ^(ConnectionTypesList, 2)
    DuplexList         = ^(ConnectionTypesList, 3)

    ConnectionTypeValue = 1
    ConnectionType = *($(ConnectionTypesNames), $(ConnectionTypeValue))

    ConnectorType = "2"     ;MII
    Speed = "1"             ;AUTO
    Duplex = "1"            ;AUTO

;---------------------------------------------------------------------------
; The following will install the files needed for configuration
;---------------------------------------------------------------------------

[Install-AdapterFiles]
    Debug-Output "S53C885:At Install-AdapterFiles"

    ; If the help file doesn't exist, it isn't fatal.  However, if the DLL file
    ; doesn't exist we can't complete the install so Set vital accordingly.  We
    ; always want to overwrite the destination directory copy of the DLL because
    ; the DLL and this .INF file are a matched Set.
    ;
    ; NOTE: STF_VITAL doesn't seem to work on Windows NT 4.0.

    Set STF_VITAL = "VITAL"
    Set STF_OVERWRITE = "ALWAYS"

    Debug-Output "S53C885:  Add files to copy list"
    Debug-Output "S53C885:  SrcDir="$(SrcDir)
    Debug-Output "S53C885:  DestDir="$(!STF_WINDOWSSYSPATH)
    AddSectionFilesToCopyList Files-$(!STF_PLATFORM)-Dll $(SrcDir) $(!STF_WINDOWSSYSPATH)
    AddSectionFilesToCopyList Files-Hlp $(SrcDir) $(!STF_WINDOWSSYSPATH)

    Debug-Output "S53C885:  Copy files in copy list"
    Set !STF_NCPA_FLUSH_COPYLIST = TRUE
    CopyFilesInCopyList
    exit

;---------------------------------------------------------------------------
; The following will install the files for the current option
;---------------------------------------------------------------------------

[Install-Option]
    Debug-Output "S53C885:At Install-Option, Option="$(Option)

    ; If the SYS file doesn't exist, it is fatal, the caller will check to make
    ; sure we successfully install all of the files for this option.

    Set STF_VITAL = 1
    Set STF_OVERWRITE = "ALWAYS"
    ifstr(i) $(AddCopy) == "YES"
        Debug-Output "S53C885:  Add files to copy list"
        Debug-Output "S53C885:  SrcDir="$(SrcDir)
        Debug-Output "S53C885:  DestDir="$(!STF_WINDOWSSYSPATH)"\drivers"
        AddSectionFilesToCopyList Files-$(!STF_PLATFORM)-$(Option) $(SrcDir) $(!STF_WINDOWSSYSPATH)\drivers
    endif
    ifstr(i) $(DoCopy) == "YES"
        Debug-Output "S53C885:  Copy files in copy list"
        Set !STF_NCPA_FLUSH_COPYLIST = TRUE
        CopyFilesInCopyList
    endif
    Exit

;---------------------------------------------------------------------------
; The following will update the install files
;---------------------------------------------------------------------------

[Install-Update]
    Debug-Output "S53C885:At Install-Update, Option="$(Option)

    ; If the SYS file doesn't exist, it is fatal, the caller will check to make
    ; sure we successfully install all of the files for this option.

    Set STF_VITAL = ""
    Set STF_OVERWRITE = "ALWAYS"
    ifstr(i) $(AddCopy) == "YES"
        Debug-Output "S53C885:  Add files to copy list"
        Debug-Output "S53C885:  SrcDir="$(SrcDir)
        Debug-Output "S53C885:  DestDir1="$(!STF_WINDOWSSYSPATH)
        Debug-Output "S53C885:  DestDir2="$(!STF_WINDOWSSYSPATH)"\drivers"
        AddSectionFilesToCopyList Files-Inf $(SrcDir) $(!STF_WINDOWSSYSPATH)
        AddSectionFilesToCopyList Files-Hlp $(SrcDir) $(!STF_WINDOWSSYSPATH)
        AddSectionFilesToCopyList Files-$(!STF_PLATFORM)-Dll $(SrcDir) $(!STF_WINDOWSSYSPATH)
        AddSectionFilesToCopyList Files-$(!STF_PLATFORM)-$(Option) $(SrcDir) $(!STF_WINDOWSSYSPATH)\drivers
    endif
    ifstr(i) $(DoCopy) == "YES"
        Debug-Output "S53C885:  Copy files in copy list"
        Set !STF_NCPA_FLUSH_COPYLIST = TRUE
        CopyFilesInCopyList
    endif
    Exit

;---------------------------------------------------------------------------
;  The remaining sections define the files and the file names
;---------------------------------------------------------------------------

;[ProductType]
;   STF_PRODUCT  = Winnt
;   STF_PLATFORM = I386

[FileNames]
    DriverSYM885_NDIS3FileName = "S53C8853.sys"
    DriverSYM885FileName       = "S53C885.sys"
    DllFileName                = "S53C885.dll"
    HelpFileName               = "S53C885.hlp"
    AlphaDllFileName           = "A53C885.dll"
    AlphaSYM885_NDIS3FileName  = "A53C8853.sys"
    AlphaSYM885FileName        = "A53C885.sys"

[Source Media Descriptions]
    1  = "Windows NT Setup Disk #1"

; Each [Files-xxx] section has the following format:
;
;   Disk#, file name (must be 8.3), options
;
;   The size option is used to display a progress bar.

[Files-Inf]
    1, oemsetup.inf, SIZE=65536, RENAME=$(!UG_Filename)

[Files-Hlp]
    1, $(HelpFileName), SIZE=10240

; The following are for Intel x86 platforms

[Files-I386-Dll]
    1, $(DllFileName), SIZE=32768

[Files-I386-SYM885]
    1, $(DriverSYM885FileName), SIZE=32768

[Files-I386-SYM885_NDIS3]
    1, $(DriverSYM885_NDIS3FileName), SIZE=32768

; The following are for ALPHA machine executables

[Files-ALPHA-Dll]
    1, $(AlphaDllFileName), SIZE=32768, RENAME=$(DllFileName)

[Files-ALPHA-SYM885]
    1, $(AlphaSYM885FileName), SIZE=32768, RENAME=$(DriverSYM885FileName)

[Files-ALPHA-SYM885_NDIS3]
    1, $(AlphaSYM885_NDIS3FileName), SIZE=32768, RENAME=$(DriverSYM885_NDIS3FileName)

Download Driver Pack

How To Update Drivers Manually

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.

server: web1, load: 1.23