OEMSETNT.INF Driver File Contents (NETPCC9X.exe)

;***********************************************************************
;
;  OEMSETUP.INF
;
;       Network card and driver OEMSETUP.INF file
;
;       Copyright (c)  Simple Technology 1998-1999
;       All Rights Reserved.
;
;       Generic PCMCIA 10MB Ethernet
;       Generic PCMCIA 10/100MB Ethernet
;       Generic PCMCIA V.34+10MB Ethernet
;       Generic PCMCIA V.90+10MB Ethernet
;
; $Date: 1/14/99 11:21a $
; $Revision: 9 $
;
;***********************************************************************

[Identification]
    OptionType = NetAdapter

[PlatformsSupported]
    PCMCIA

[LanguagesSupported]
    ENG

[Options]
;    OTC4ODNT
    OTC7ODNT
;    OTCJODNT
;    OTCJOHNT

[OptionsTextENG]
;    OTC4ODNT    = "10Mb Ethernet PC Card"
;    OTC7ODNT    = "10/100Mb Ethernet PC Card"
    OTC7ODNT    = "Net100 Fast Ethernet Adapter"
;    OTCJODNT    = "33.6K Modem + 10Mb Ethernet PC Card"
;    OTCJOHNT    = "56K Modem + 10Mb Ethernet PC Card"

[Source Media Descriptions]
;    1  = "Network Drivers Diskette"
    1  = "Net100 Drivers Diskette"

[ProductType]
    STF_PRODUCT  = Winnt
    STF_PLATFORM = I386

[Files-OtcjodNT3]
    1, tzdeth3.sys, SIZE=37500, RENAME=tzdethnt.sys

[Files-OtcjodNT4]
    1, tzdeth4.sys, SIZE=37500, RENAME=tzdethnt.sys

[Files-Dll]
    1, tzdethnt.dll, SIZE=9728
;    1, tzdethnt.hlp, SIZE=18323

[Files-Detect]
    1, tzdncdet.dll, SIZE=16896

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

[date]
    Now = {} ? $(!LIBHANDLE) GetSystemDate
;    VerOO = "no-version" ? $(!LIBHANDLE) GetWindowsNtVersion

[FileConstants]
    GenericInfVersion = " v1.00.002"
    UtilityInf        = "UTILITY.INF"
    ParamInf          = "NCPARAM.INF"
    SubroutnInf       = "SUBROUTN.INF"
    NetEventDLL       = "%SystemRoot%\System32\netevent.dll;%SystemRoot%\System32\Drivers\Tzdethnt.SYS"
    IoLogMsgDLL       = "%SystemRoot%\System32\IoLogMsg.dll"

[RegistryConstants]
    SoftwareType             = "driver"
;    Manufacturer             = "Generic"
    Manufacturer             = "Simple Technology"
    ; Product Info  -------------------------------------------------
    ProductMajorVersion      = "1"
    ProductMinorVersion      = "00"
    ProductVersion           = $(ProductMajorVersion)"."$(ProductMinorVersion)
    ; Software  -----------------------------------------------------
    ProductSoftwareName      = "TzdethNT"
    ProductSoftwareTitle     = "Generic PCMCIA NDIS Driver"
    ProductSoftwareDescription = "Generic PCMCIA Ethernet Driver"
    ProductSoftwareImagePath = "\SystemRoot\System32\drivers\tzdethnt.sys"
    NetRuleSoftwareType      = "TzdethNTSys ndisDriver tzdethNTDriver"
    NetRuleSoftwareUse       = $(SoftwareType)
    NetRuleSoftwareBindForm  = """TzdethNTSys"" yes no container"
    NetRuleSoftwareClass     = {"tzdethNTDriver basic"}
    NetRuleSoftwareBindable  = {"tzdethNTDriver tzdethNTAdapter non exclusive 100"}
    ; Hardware  -----------------------------------------------------
    ProductHardwareName      = "TzdethNT"
    ProductHardwareOTCJOHNTDescription = "56K Modem + 10Mb Ethernet PC Card"
    ProductHardwareOTCJOHNTTitle = "56K Modem + 10MBps Ethernet PC Card"
    ProductHardwareOTCJODNTDescription = "33.6K Modem + 10Mb Ethernet PC Card"
    ProductHardwareOTCJODNTTitle = "33.6K + 10Mb Ethernet PC Card"
    ProductHardwareOTC4ODNTDescription = "10Mb Ethernet PC Card"
    ProductHardwareOTC4ODNTTitle = "10Mb Ethernet PC Card"
;    ProductHardwareOTC7ODNTDescription = "10/100Mb Ethernet PC Card"
    ProductHardwareOTC7ODNTDescription = "Net100 Fast Ethernet Adapter"
;    ProductHardwareOTC7ODNTTitle = "10/100Mb Ethernet PC Card"
    ProductHardwareOTC7ODNTTitle = "Net100 Fast Ethernet Adapter"
    NetRuleHardwareType      = "tzdethNT tzdethNTAdapter"
    NetRuleHardwareBindForm  = " yes yes container"
    NetRuleHardwareClass     = {"tzdethNTAdapter basic"}
    ; Registry Key --------------------------------------------------
    ProductKeyName           = $(!NTN_SoftwareBase)"\"$(Manufacturer)"\"$(ProductSoftwareName)"\CurrentVersion"
    ParamKeyName             = $(!NTN_ServiceBase)"\"$(ProductHardwareName)"\Parameters"

    ; PCMCIA Tuples -------------------------------------------------
    VERS1Product       = "Generic:10MB Ethernet"
    VERS1Manufacturer  = "Generic"

[GeneralConstants]
    KeyNull            = ""
    MAXIMUM_ALLOWED    = 33554432
    KeyProduct         = ""
    KeyParameters      = ""
    TRUE               = 1
    FALSE              = 0
    NoTitle            = 0
    OldVersionExisted  = $(FALSE)
    DriverPath         = $(!STF_NTPATH)\drivers
    NT350VersionConst  = "3.50"
    NT351VersionConst  = "3.51"
    NT40VersionConst   = "4.0"
    NT351ServicePack5  = "Service Pack 5"
;+++Softex
    AdapterName        = ""
;---Softex

[FileConstantsENG]
    ProCaption         = "Windows NT Setup"
    ProCancel          = "Cancel"
    ProCancelMsg       = "The PC Card is not correctly installed.  "+
			 "Are you sure you want to cancel copying files?"
    ProCancelCap       = "Network Setup Message"
    ProText1           = "Copying:"
    ProText2           = "To:"
    FunctionTitle      = "Generic PCMCIA Card Setup"$(GenericInfVersion)
    IrqList           = ^(OtcIrqs, 1)                     
    IrqValues         = ^(OtcIrqs, 2)
    IoBaseList        = ^(OtcIoBase, 1)
    IoBaseValues      = ^(OtcIoBase, 2)
    COMBaseList       = ^(OtcCOMBase, 1)
    COMBaseValues     = ^(OtcCOMBase, 2)
    COMPortList       = ^(OtcCOMBase, 3)
    COMIrqList        = ^(OtcCOMIrqs, 1)
    COMIrqValues      = ^(OtcCOMIrqs, 2)
    MemBaseList       = ^(OtcCISMemBase, 1)
    MemBaseValues     = ^(OtcCISMemBase, 2)
    SockList          = ^(OtcSocket, 1)
    SockValues        = ^(OtcSocket, 2)
    XmitList          = ^(OtcXmit, 1)
    XmitValues        = ^(OtcXmit, 2)
    MinHelpId         = 30000
    MaxHelpId         = 30200

[FileConstantsENG-OTCJOHNT]
    DialogDllName = "TZDETHNT.DLL"
    HelpOTCJOHNTId = 30000

[FileConstantsENG-OTCJODNT]
    DialogDllName = "TZDETHNT.DLL"
    HelpOTCJODNTId = 30000

[FileConstantsENG-OTC4ODNT]
    DialogDllName = "TZDETHNT.DLL"
    HelpOTC4ODNTId = 30100

[FileConstantsENG-OTC7ODNT]
    DialogDllName = "TZDETHNT.DLL"
    HelpOTC7ODNTId = 30200


[OtcIrqs]
;Interrupts available on Intel   : { 3,4,5,7,9,10,11,12,14,15 }
;Interrupts available on Databook: { 3,4,5,7,10,14 }
    IRQ0 = " 3", 3
    IRQ1 = " 4", 4
    IRQ2 = " 5", 5
    IRQ3 = " 7", 7
    IRQ4 = " 9", 9
    IRQ5 = "10", 10
    IRQ6 = "11", 11
    IRQ7 = "12", 12
    IRQ8 = "14", 14
    IRQ9 = "15", 15

[OtcIoBase]
; Cannot use 240,2C0,3C0
; 240 = DataBook
; 2E8 = COM4, 2F8 = COM2
; 378 = LPT1, 3E0 = Intel
    Base0  = "0x100", 256
    Base1  = "0x140", 320
    Base2  = "0x180", 384
    Base3  = "0x1C0", 448
    Base4  = "0x200", 512
    Base5  = "0x280", 640
    Base6  = "0x300", 768
    Base7  = "0x340", 832
    Base8  = "0x380", 896
    Base9  = "0x400", 1024
    Base10 = "0x440", 1088
    Base11 = "0x480", 1152
    Base12 = "0x4c0", 1216

[OtcCOMIrqs]
;Interrupts available on the Intel   : { 3,4,5,7,9,10,11,12,14,15 }
;Interrupts available on the Databook: { 3,4,5,7,10,14 }
    COMIRQ0 = " 3", 3
    COMIRQ1 = " 4", 4
    COMIRQ2 = " 5", 5
    COMIRQ3 = " 7", 7
    COMIRQ4 = " 9", 9
    COMIRQ5 = "10", 10
    COMIRQ6 = "11", 11
    COMIRQ7 = "12", 12
    COMIRQ8 = "14", 14
    COMIRQ9 = "15", 15
    COMIRQ10 = "None", 0
    COMIRQ11 = "Share", 1
    
[OtcCOMBase]
    COMBase0 = "COM4 0x2e8", 744, "COM4"
    COMBase1 = "None", 0, "None"
    COMBase2 = "COM1 0x3f8", 1016, "COM1"
    COMBase3 = "COM3 0x3e8", 1000, "COM3"
    COMBase4 = "COM2 0x2f8", 760, "COM2"
    COMBase5 = "COM5 Lan+28h", 65535, "COM5"
    COMBase6 = "Auto", 1, "Auto"

[OtcSocket]
    Sock0 = "Auto Detect", 0
    Sock1 = "Socket 1", 1
    Sock2 = "Socket 2", 2
    Sock3 = "Socket 3", 3
    Sock4 = "Socket 4", 4
    Sock5 = "Socket 5", 5
    Sock6 = "Socket 6", 6
    Sock7 = "Socket 7", 7
    Sock8 = "Socket 8", 8

[OtcCISMemBase]
MemBase0 = "0xC8000", 819200
MemBase1 = "0xC9000", 823296
MemBase2 = "0xCA000", 827392
MemBase3 = "0xCB000", 831488
MemBase4 = "0xCC000", 835584
MemBase5 = "0xCD000", 839680
MemBase6 = "0xCE000", 843776
MemBase7 = "0xCF000", 847872
MemBase8 = "0xD0000", 851968
MemBase9 = "0xD1000", 856064
MemBase10 = "0xD2000", 860160
MemBase11 = "0xD3000", 864256
MemBase12 = "0xD4000", 868352
MemBase13 = "0xD5000", 872448
MemBase14 = "0xD6000", 876544
MemBase15 = "0xD7000", 880640
MemBase16 = "0xD8000", 884736
MemBase17 = "0xD9000", 888832
MemBase18 = "0xDA000", 892928
MemBase19 = "0xDB000", 897024
MemBase20 = "0xDC000", 901120
MemBase21 = "0xDD000", 905216
MemBase22 = "0xDE000", 909312
MemBase23 = "0xDF000", 913408
MemBase24 = "0xE0000", 917504
MemBase25 = "0xE1000", 921600
MemBase26 = "0xE2000", 925696
MemBase27 = "0xE3000", 929792
MemBase28 = "0xE4000", 933888
MemBase29 = "0xE5000", 937984
MemBase30 = "0xE6000", 942080
MemBase31 = "0xE7000", 946176
MemBase32 = "0xE8000", 950272
MemBase33 = "0xE9000", 954368
MemBase34 = "0xEA000", 958464
MemBase35 = "0xEB000", 962560
MemBase36 = "0xEC000", 966656
MemBase37 = "0xED000", 970752
MemBase38 = "0xEE000", 974848
MemBase39 = "0xEF000", 978944

[OtcXmit]
    Xmit0 = " 1",1
    Xmit1 = " 2",2
    Xmit2 = " 3",3
    Xmit3 = " 4",4
    Xmit4 = " 5",5
    Xmit5 = " 6",6
    Xmit6 = " 7",7
    Xmit7 = " 8",8
    Xmit8 = " 9",9
    Xmit9 = "10",10
    Xmit10 = "11",11
    Xmit11 = "12",12
    Xmit12 = "13",13
    Xmit13 = "14",14
    Xmit14 = "15",15
    Xmit15 = "16",16

[DisableLinkTestChoicesENG]
    Dis_1 = 1, "ON"
    Dis_2 = 0, "OFF"

[FullDuplexChoicesENG]
    Duplex_1 = 1, "ON"
    Duplex_2 = 0, "OFF"

[CardServicesChoicesENG]
    Card_1 = 1, "ON"
    Card_2 = 0, "OFF"

[HexDigits]
    Hex0 = 0
    Hex1 = 1
    Hex2 = 2
    Hex3 = 3
    Hex4 = 4
    Hex5 = 5
    Hex6 = 6
    Hex7 = 7
    Hex8 = 8
    Hex9 = 9
    HexA = A
    HexB = B
    HexC = C
    HexD = D
    HexE = E
    HexF = F

[DialogConstantsENG]
    Help         = "&Help"
    Exit         = "Cancel"
    OK           = "OK"
;    HelpContext  = 30100
    Continue     = "Continue"
    Cancel       = "Cancel"
    BadAddr1     = "Network Address must be 12 hexadecimal digits in length"
    BadAddr2     = "Network Address contains the invalid hexadecimal digit: "
    BadAddr3     = "Network Address invalid, group bit must be 0!"

    NotSupported = "Single Function mode not yet supported."

;    IRQConflict  = "The Modem and LAN function cannot share the same IRQ!"

    NeedServicePack = "The Modem and LAN function cannot share the same IRQ "+
		      "under Windows NT 3.51 unless Service Pack 5 has been installed."

;    IRQForced    = "The LAN function must be assigned IRQ 11 to ensure "+
;                   "proper operation on a Databook PCIC."

    IRQInvalid   = "The Modem IRQ that has been selected is not supported "+
		   "when using a Databook PCIC."

    WarnDetect   = "You have selected the Auto Media Detection feature.  "+
		   "This can cause Service Control Manager Events if there "+
		   "is no network cable attached.  Please refer to the "+
		   "accompanying documentation.  "+
		   "Do you want to continue?"

    WarnDuplex   = "You have selected the Full Duplex mode of operation.  "+
		   "This can cause serious networking problems if you are not "+
		   "connected to a Full Duplex network.  Please refer to the "+
		   "accompanying documentation.  "+
		   "Do you want to continue?"

    BadPCMCIA    = "Unable to determine the type of PCMCIA Interface Controller.  "+
		   "Do you want to continue?"
    PCICType     = "PCIC: "

[FileDependentDlgENG-OTCJOHNT]
    DlgType           = "RadioCombination"
    DlgTemplate       = "OTCJODNT"
    ; Caption         = "Generic PCMCIA Card Setup"
    Caption           = $(FunctionTitle)
    Combo1Label       = "&IRQ Level:"
    Combo2Label       = "I/O &Port:"
    Combo3Label       = "IRQ &Level:"
    Combo4Label       = "Base I/O &Addr:"
    Combo5Label       = "Memory &Window:"
    Combo6Label       = "Soc&ket Number:"
    Combo7Label       = "Max Transmits:"
    CheckBox1         = "&Disable Link Test"
    CheckBox2         = "&Card Services"
    Radio1            = "10BASE-T"
    Radio2            = "10BASE2"
    Radio3            = "Auto Detect"
    Radio4            = "Power Save"
    Edit1Text         = "Network Address"
    Group1Label       = "LAN Configuration"
    Group2Label       = "Modem Configuration"
    Group3Label       = "Environment"
    Group4Label       = "Transceiver Type"
;    MediaValue        = 2
;    DisLinkValue      = 0
;    COMIOBaseValue    = 744
    Combo1List        = $(IrqList)
    Combo1Out         = $(InterruptNumber)
    Combo2List        = $(IoBaseList)
    Combo2Out         = $(IOBaseAddrValue)
    Combo3List        = $(COMIrqList)
    Combo3Out         = $(COMInterruptNumber)
    Combo4List        = $(COMBaseList)
    Combo4Out         = $(COMIoBaseAddrValue)
    Combo5List        = $(MemBaseList)
    Combo5Out         = $(MemBaseAddrValue)
    Combo6List        = $(SockList)
    Combo6Out         = $(SocketNumber)
    Combo7List        = $(XmitList)
    Combo7Out         = $(XmitNumber)
    ComboListItemsIn  = {Combo1List, Combo2List, Combo3List, Combo4List, Combo5List, Combo6List, Combo7List}
    ComboListItemsOut = {Combo1Out, Combo2Out, Combo3Out, Combo4Out, Combo5Out, Combo6Out, Combo7Out}
    CBOptionsGreyed   = {2}
    RCCtlFocusOn      = 403
    HelpContext       = $(Help$(Option)Id)

[FileDependentDlgENG-OTCJODNT]
    DlgType           = "RadioCombination"
    DlgTemplate       = "OTCJODNT"
    ; Caption         = "Generic PCMCIA Card Setup"
    Caption           = $(FunctionTitle)
    Combo1Label       = "&IRQ Level:"
    Combo2Label       = "I/O &Port:"
    Combo3Label       = "IRQ &Level:"
    Combo4Label       = "Base I/O &Addr:"
    Combo5Label       = "Memory &Window:"
    Combo6Label       = "Soc&ket Number:"
    Combo7Label       = "Max Transmits:"
    CheckBox1         = "&Disable Link Test"
    CheckBox2         = "&Card Services"
    Radio1            = "10BASE-T"
    Radio2            = "10BASE2"
    Radio3            = "Auto Detect"
    Radio4            = "Power Save"
    Edit1Text         = "Network Address"
    Group1Label       = "LAN Configuration"
    Group2Label       = "Modem Configuration"
    Group3Label       = "Environment"
    Group4Label       = "Transceiver Type"
;    MediaValue        = 2
;    DisLinkValue      = 0
;    COMIOBaseValue    = 744
    Combo1List        = $(IrqList)
    Combo1Out         = $(InterruptNumber)
    Combo2List        = $(IoBaseList)
    Combo2Out         = $(IOBaseAddrValue)
    Combo3List        = $(COMIrqList)
    Combo3Out         = $(COMInterruptNumber)
    Combo4List        = $(COMBaseList)
    Combo4Out         = $(COMIoBaseAddrValue)
    Combo5List        = $(MemBaseList)
    Combo5Out         = $(MemBaseAddrValue)
    Combo6List        = $(SockList)
    Combo6Out         = $(SocketNumber)
    Combo7List        = $(XmitList)
    Combo7Out         = $(XmitNumber)
    ComboListItemsIn  = {Combo1List, Combo2List, Combo3List, Combo4List, Combo5List, Combo6List, Combo7List}
    ComboListItemsOut = {Combo1Out, Combo2Out, Combo3Out, Combo4Out, Combo5Out, Combo6Out, Combo7Out}
    CBOptionsGreyed   = {2}
    RCCtlFocusOn      = 403
    HelpContext       = $(Help$(Option)Id)

[FileDependentDlgENG-OTC4ODNT]
    DlgType           = "RadioCombination"
    DlgTemplate       = "OTC4ODNT"
    ; Caption         = "Generic PCMCIA Card Setup"
    Caption           = $(FunctionTitle)
    Combo1Label       = "&IRQ Level:"
    Combo2Label       = "I/O &Port:"
    Combo3Label       = "IRQ &Level:"
    Combo4Label       = "Base I/O &Addr:"
    Combo5Label       = "Memory &Window:"
    Combo6Label       = "Soc&ket Number:"
    Combo7Label       = "Max Transmits:"
    CheckBox1         = "&Disable Link Test"
    CheckBox2         = "&Card Services"
    Radio1            = "10BASE-T"
    Radio2            = "10BASE2"
    Radio3            = "Auto Detect"
    Radio4            = "Power Save"
    Edit1Text         = "Network Address"
    Group1Label       = "LAN Configuration"
    Group2Label       = "Modem Configuration"
    Group3Label       = "Environment"
    Group4Label       = "Transceiver Type"
;    MediaValue        = 2
;    DisLinkValue      = 0
;    COMIOBaseValue    = 744
    Combo1List        = $(IrqList)
    Combo1Out         = $(InterruptNumber)
    Combo2List        = $(IoBaseList)
    Combo2Out         = $(IOBaseAddrValue)
    Combo3List        = $(COMIrqList)
    Combo3Out         = $(COMInterruptNumber)
    Combo4List        = $(COMBaseList)
    Combo4Out         = $(COMIoBaseAddrValue)
    Combo5List        = $(MemBaseList)
    Combo5Out         = $(MemBaseAddrValue)
    Combo6List        = $(SockList)
    Combo6Out         = $(SocketNumber)
    Combo7List        = $(XmitList)
    Combo7Out         = $(XmitNumber)
    ComboListItemsIn  = {Combo1List, Combo2List, Combo3List, Combo4List, Combo5List, Combo6List, Combo7List}
    ComboListItemsOut = {Combo1Out, Combo2Out, Combo3Out, Combo4Out, Combo5Out, Combo6Out, Combo7Out}
    ; CheckBox Greyed
    CBOptionsGreyed   = {2}
    RCCtlFocusOn      = 403
    HelpContext       = $(Help$(Option)Id)

 
[FileDependentDlgENG-OTC7ODNT]
    DlgType           = "RadioCombination"
    DlgTemplate       = "OTC7ODNT"
    ; Caption         = "Generic PCMCIA Card Setup"
    Caption           = $(FunctionTitle)
    Combo1Label       = "&IRQ Level:"
    Combo2Label       = "I/O &Port:"
    Combo3Label       = "IRQ &Level:"
    Combo4Label       = "Base I/O &Addr:"
    Combo5Label       = "Memory &Window:"
    Combo6Label       = "Soc&ket Number:"
    Combo7Label       = "Max Transmits:"
    CheckBox1         = "&Full Duplex"
    CheckBox2         = "&MemoryMapped"
    Radio1            = "10BASE-T"
    Radio2            = "100BASE-TX"
    Radio3            = "Auto Detect"
    Radio4            = "Power Save"
    Edit1Text         = "Network Address"
    Group1Label       = "LAN Configuration"
    Group2Label       = "Modem Configuration"
    Group3Label       = "Environment"
    Group4Label       = "Transceiver Type"
;    MediaValue        = 2
;    DisLinkValue      = 0
;    COMIOBaseValue    = 744
    Combo1List        = $(IrqList)
    Combo1Out         = $(InterruptNumber)
    Combo2List        = $(IoBaseList)
    Combo2Out         = $(IOBaseAddrValue)
    Combo3List        = $(COMIrqList)
    Combo3Out         = $(COMInterruptNumber)
    Combo4List        = $(COMBaseList)
    Combo4Out         = $(COMIoBaseAddrValue)
    Combo5List        = $(MemBaseList)
    Combo5Out         = $(MemBaseAddrValue)
    Combo6List        = $(SockList)
    Combo6Out         = $(SocketNumber)
    Combo7List        = $(XmitList)
    Combo7Out         = $(XmitNumber)
    ComboListItemsIn  = {Combo1List, Combo2List, Combo3List, Combo4List, Combo5List, Combo6List, Combo7List}
    ComboListItemsOut = {Combo1Out, Combo2Out, Combo3Out, Combo4Out, Combo5Out, Combo6Out, Combo7Out}
    ; CheckBox Greyed
    CBOptionsGreyed   = {}
    RCCtlFocusOn      = 403
    HelpContext       = $(Help$(Option)Id)

 

;---------------------------------------------------------------------------
; 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]
    ;
    ;
    set !DebugOutputControl = 1
    set Status         = STATUS_SUCCESSFUL
    set OptionList     = ^(Options, 1)
    set OptionTextList = ^(OptionsText$($0), 1)

    ;
    ; Check if the language requested is supported
    ;
    set LanguageList = ^(LanguagesSupported, 1)
    Ifcontains(i) $($0) in $(LanguageList)
      ifstr(i) $($0) == ""
	set Status = STATUS_NOLANGUAGE
	goto ExitReturnOptions
      endif
    else
      set Status = STATUS_NOLANGUAGE
      goto ExitReturnOptions
    endif

    ;
    ; Check if the platforms requested are supported
    ;
    set PlatformList = ^(PlatformsSupported, 1)
    Ifcontains(i) $($1) in $(PlatformList)
      ifstr(i) $($1) == ""
	set Status = STATUS_NOTSUPPORTED
      endif
    else
      set Status = STATUS_NOTSUPPORTED
    endif

ExitReturnOptions = +
    Return $(Status) $(OptionList) $(OptionTextList)

;------------------------------------------------------------------------
;
; 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]
    ;
    ; Set default
    ;
    set Status   = STATUS_FAILED
    ;
    ; extract parameters
    ;
    set Option   = $($1)
    set SrcDir   = $($2)
    set AddCopy  = $($3)
    set DoCopy   = $($4)
    set DoConfig = $($5)

    Set !DebugOutputControl = 1

    ;
    ;  Check if the language requested is supported
    ;
    set LanguageList = ^(LanguagesSupported, 1)
    Ifcontains(i) $($0) NOT-IN $(LanguageList)
       Return STATUS_NOLANGUAGE
    endif

    set-subst LF = "\n"

    read-syms GeneralConstants
    read-syms FileConstants
    read-syms RegistryConstants

    ifstr(i) $(!NTN_Origination) == "NCPA"
       set Continue = $(OK)
    endif

    read-syms DialogConstants$(!STF_LANGUAGE)
    read-syms FileConstants$(!STF_LANGUAGE)
    read-syms FileConstants$(!STF_LANGUAGE)"-"$(Option)

    detect date

    OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\Microsoft\Windows NT\CurrentVersion" $(MAXIMUM_ALLOWED) ServiceKey
    Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
	Debug-Output "INF: Failed to determine WinNT Version"
	set VerOO = "no-version"
    Else
	GetRegValue $(ServiceKey) CurrentVersion ValueOptionList
	Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
	    Debug-Output "INF: Failed to determine WinNT Version"
	    set VerOO = "no-version"
	Else
	    set VerOO = *($(ValueOptionList),4)
	Endif
	CloseRegKey ServiceKey
    Endif

    Debug-Output "$(InfFile): Windows NT Version is "$(VerOO)

    OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\Microsoft\Windows NT\CurrentVersion" $(MAXIMUM_ALLOWED) ServiceKey
    Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
	Debug-Output "INF: Failed to determine WinNT Version"
	set VerOP = "no-version"
    Else
	GetRegValue $(ServiceKey) CSDVersion ValueOptionList
	Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
	    Debug-Output "INF: Failed to determine WinNT Version"
	    set VerOP = "no-csd-version"
	Else
	    set VerOP = *($(ValueOptionList),4)
	Endif
	CloseRegKey ServiceKey
    Endif

    Debug-Output "$(InfFile): Windows NT Version is "$(VerOP)
    set-title $(FunctionTitle)

    set to   = Begin
    set from = Begin
;
;  Assume all is well
;
    set CommonStatus = STATUS_SUCCESSFUL

    EndWait
;
;
;   Set up the operation-mode-based variables and welcome the user.
;   If the "install mode" variable is improperly set, assume that this
;   is a new installation.
;

Begin = +
   Set ActiveDetection = FALSE

    Ifstr(i) $(VerOO) == $(NT310VersionConst)
	Debug-Output "$(InfFile) $(Option): ConfigureAdapter"
	set Error = "Windows NT 3.10 is not supported by this product"
	goto fatal
    Endif

    Ifstr(i) $(!NTN_InstallMode) == deinstall
	set SubFunction = RemoveAdapter
    else-Ifstr(i) $(!NTN_InstallMode) == install
;        set ActivateDetection = TRUE
	set SubFunction = InstallAdapter
	set OEM_ABANDON_OPTIONS = {}
	set OEM_ABANDON_SOFTWARE = FALSE
	set OEM_ABANDON_ON = TRUE
    else-Ifstr(i) $(!NTN_InstallMode) == Update
	set SubFunction = UpgradeSoftware
    else-Ifstr(i) $(!NTN_InstallMode) == configure
	set SubFunction = ConfigureAdapter
	set ActivateDetection = TRUE
	;
	;  You cannot configure software component
	;
	Ifstr(i) $(ProductKeyName) == $(!NTN_RegBase)
	    Debug-Output "INF: Cannot configure the PC Card server software."
	    Shell $(UtilityInf),RegistryErrorString,CANNOT_CONFIGURE_SOFTWARE
	    ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "INF: ShellCode error: cannot get an error string."
		goto ShellCodeError
	    endif
	    set Error = $($R0)
	    set from = end
	    set to = end
	    goto nonfatalinfo
	Endif
    else
	set SubFunction = NoWay
    Endif
    Debug-Output "INF: =================================================="
    Debug-Output "INF: STF_CWDIR is: "$(!STF_CWDIR)
    Debug-Output "INF: STF_LANGUAGE is: "$(!STF_LANGUAGE)
    Debug-Output "INF: Option is: "$(Option)
    Debug-Output "INF: !STF_NCDETECT  is: "$(!STF_NCDETECT)
    Debug-Output "INF: !STF_NCOPTION  is: "$(!STF_NCOPTION)
    Debug-Output "INF: !STF_NCDETCARD is: "$(!STF_NCDETCARD)
    Debug-Output "INF: !STF_NCDETINFO is: "$(!STF_NCDETINFO)
    Debug-Output "INF: =================================================="
    Set DetectedCard = FALSE
;    Ifstr(i) $(ActivateDetection) != TRUE
;        Goto $(SubFunction)
;    Endif
    ;
    ;  No PCMCIA support for now
    ;
    set PCMCIA = 1

    ;  Setup the default values

    set InterruptNumber     = *($(IrqList), 6)      ; LAN IRQ   = 10
    set IOBaseAddrValue     = *($(IoBaseList), 1)   ; LAN IOBase address = 0x100
    set COMIoBaseAddrValue  = *($(COMBaseList), 6)  ; Modem IOBase address = (COM5)
    ;
    ;  Windows NT 4.0+ is shared IRQ
    ;
;    Ifstr(i) $(VerOO) == $(NT40VersionConst)
       set COMInterruptNumber  = *($(COMIrqList), 12)  ; Modem IRQ = Share
;    Else
;       set COMInterruptNumber  = *($(COMIrqList), 1)   ; Modem IRQ = 3
;    Endif
    set SocketNumber        = *($(SockList), 1)     ; Socketnumber   = Auto
    set MemBaseAddrValue    = *($(MemBaseList), 11) ; Memory address = 0xD2000
    set XmitNumber          = *($(XmitList), 1)     ; Xmits equal 1
    set MediaValue          = "AUTO"                ; LAN media = Auto
    set DisLink             = 0                     ; Enable 10BaseT link test
    set FullDuplx           = 0                     ; Half-Duplex

    set MemoryAddrIndex = *($(MemBaseValues), ~($(MemBaseList),$(MemBaseAddrValue)))
    set IOBaseAddrIndex = *($(IoBaseValues), ~($(IoBaseList),$(IOBaseAddrValue)))
    set COMBaseIndex = *($(COMBaseValues), ~($(COMBaseList),$(COMIoBaseAddrValue)))

    ; 4oD -- No COM port is present

    Ifcontains(i) $(Option) in {"OTC4ODNT"}
	  set COMIoBaseAddrValue = *($(COMBaseList), 2)    ; Modem = None
	  set COMInterruptNumber  = *($(COMIrqList), 11)   ; Modem IRQ = None
    Else-Ifcontains(i) $(Option) in {"OTC7ODNT"}
	  set COMIoBaseAddrValue = *($(COMBaseList), 2)    ; Modem = None
	  set COMInterruptNumber  = *($(COMIrqList), 11)   ; Modem IRQ = None
	  set MediaValue = "AUTO"                         ; Media = Auto Detect 
	  set XmitNumber = *($(XmitList), 8)              ; Max Transmits 8
    Endif

    Ifstr(i) $(ActivateDetection) != TRUE
	Goto $(SubFunction)
    Endif
    
;    Set TypeList = {{IRQ, IRQ_List, InterruptNumber},+
;                    {IOADDR, IOADDR_Addr_List, IOBaseAddrValue},+
;                    {TRANSCEIVER, TranceiverValueList, MediaValue},+
;                    {MEMADDR, MemBaseAddrDecList, MemBaseAddrValue},+
;                    {COMIRQ, COM_IRQ_List, COMInterruptNumber},+
;                    {COMIOADDR, COM_IOADDR_Addr_List, COMIoBaseAddrValue}}
    
    Set TypeList = {{IRQ, IRQ_List, InterruptNumber},+
		    {IOADDR, IOADDR_Addr_List, IOBaseAddrValue},+
		    {TRANSCEIVER, TranceiverValueList, MediaValue},+
		    {MEMADDR, MemBaseAddrDecList, MemBaseAddrValue}}
    
    Debug-Output "INF: Calling Param_BuildTypeLists"
    Shell $(ParamInf) Param_BuildTypeLists $(Option) $(TypeList)
    Set Status = $($R0)
    ifstr(i) $(Status) != STATUS_SUCCESSFUL
	goto fataldetect
    Endif

;    set MemoryAddrIndex = *($(MemBaseValues), ~($(MemBaseList),$(MemBaseAddrValue)))
;    set IOBaseAddrIndex = *($(IoBaseValues), ~($(IoBaseList),$(IOBaseAddrValue)))
;    set COMBaseIndex = *($(COMBaseValues), ~($(COMBaseList),$(COMIoBaseAddrValue)))

    Debug-Output "INF: Calling Param_SetDefaults"
    Shell $(ParamInf) Param_SetDefaults {}

    Ifstr(i) $(!STF_NCDETECT) == YES
	Ifstr(i) $(!STF_NCOPTION) == $(Option)
	    Set DetectedCard = TRUE
	    Debug-Output "INF: Setting DetectedCard to TRUE"
	Endif
    Endif

    Shell "" DebugConfiguration "After parameter querying"

    Set from = $(fatal)
    Set to   = $(fatal)
    Goto $(SubFunction)

;-----------------------------------------------
; Installation Section
;-----------------------------------------------

InstallAdapter = +
;
;  First, check for same version
;    
    set OldVersionExisted = $(FALSE)
    set KeyProduct = $(KeyNull)

    OpenRegKey $(!REG_H_LOCAL) "" $(ProductKeyName) $(MAXIMUM_ALLOWED) KeyProduct

    Ifstr $(KeyProduct) != $(KeyNull)
	;
	; Some version already existed in the local machine
	; Popup the dialog and ask the user whether he wants to continue
	;
	CloseRegKey $(KeyProduct)

	ifstr(i) $(!NTN_RegBase) == $(ProductKeyName)
	   ;
	   ; Cannot Install the same software again
	   ;
	    Shell $(UtilityInf), VerExistedDlg, $(ProductSoftwareTitle), +
		$(ProductVersion)
	    ifstr(i) $($R1) != "OK"
		goto End
	    endif

	    goto End

	else
	    ;
	    ; Add a new adapter card?
	    ;
	    Shell $(UtilityInf), CardExistedDlg

	    Ifint $($ShellCode) != $(!SHELL_CODE_OK)
	       Debug-Output "INF: ShellCode error: cannot get an error string."
	       goto ShellCodeError
	    Endif

	    Ifstr(i) $($R1) != "OK"
		goto End
	    Endif

	    Set OldVersionExisted = $(TRUE)
	endif
    endif

    Set CurrParamSettings = {}

;
;  dll load addition for NCDetect.dll
;
    Ifstr(i) $(OldVersionExisted) == $(FALSE)
	Ifstr(i) $(!NTN_InstallMode) == "install"
	    Ifstr(i) $(DoCopy) == "YES"

		Shell $(UtilityInf), DoAskSource, $(!STF_CWDDIR), $(SrcDir) NO

		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 successful
		Endif

		Set SrcDir = $($R1)
	    Endif
	    install "Install-Dll"
	    Ifstr(i) $(STF_INSTALL_OUTCOME) != STF_SUCCESS
		Shell $(UtilityInf) RegistryErrorString "UNABLE_COPY_FILE"
		Ifint $($ShellCode) != $(!SHELL_CODE_OK)
		    goto ShellCodeError
		Endif
		set Error = $($R0)
		goto fatal
	    Endif
	    Shell $(UtilityInf) UpdateDetectionDllNames
	Endif
    Endif

    StartWait
    Shell $(ParamInf) Param_QueryCard $(!SFT_NCDETCARD)
    EndWait

    Ifstr(i) $($R0) != STATUS_SUCCESSFUL
	goto AdapterSetup
    Endif
    Set DetectedParams = $($R1)
    Debug-Output "INF Calling Param_SetDefaults to merge detected params"
    Shell $(ParamInf) Param_SetDefaults $(DetectedParams)
    goto AdapterSetup

;-----------------------------------------------
; Configuration Section
;-----------------------------------------------
;
;   Get the current values of all the parameters
;
ConfigureAdapter = +
    Ifstr $(KeyProduct) == $(KeyNull)
	OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_RegBase) $(MAXIMUM_ALLOWED) KeyProduct
	Ifstr $(KeyProduct) == $(KeyNull)
	    set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
	    Debug-Output "INF: Cannot find component product key"
	    goto fatalregistry
	Endif
    Endif

    ;
    ;  Get the other parameters; they are under serivce paramters
    ;
    Debug-Output "INF: Shelling to FindService"
    Shell $(UtilityInf) FindService, $(KeyProduct)

    Ifint $($ShellCode) != $(!SHELL_CODE_OK)
	Debug-Output "INF: FindService shell failure"
	goto ShellCodeError
    Endif
    Ifstr(i) $($R0) != NO_ERROR
	Debug-Output "INF: FindService Shell error: "$($R0)
	Goto fatalregistry
    Endif

    Set KeyParameters = $($R2)

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

    Ifstr $(KeyParameters) == $(KeyNull)
	set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
	Debug-Output "INF: Cannot find component product key"
	goto fatalregistry
    Endif

    set OldVersionExisted = $(TRUE)

    set ValueName = ""
    set ValueData = ""
    set ValueStr  = ""
    set ValueList = {}
    set SecondIOFound = $(FALSE)
    set SharedInterrupt = $(FALSE)
    set MemoryMappedSupport = $(FALSE)

    ;
    ; Get the old values from the Registry
    ; *********************************************************
    EnumRegValue $(KeyParameters) ValueList

    ForListDo $(ValueList)
	set ValueItem = $($)
	set ValueName = *($(ValueItem),1)
	set ValueData = *($(ValueItem),4)

	Ifstr(i) $(ValueName) == "transceiver"
	    set MediaValue = $(ValueData)
	else-ifstr(i) $(ValueName) == "BusNumber"
	    set BusNumber = $(ValueData)
	else-ifstr(i) $(ValueName) == "BusType"
	    set BusInterfaceType = $(ValueData)
	else-ifstr(i) $(ValueName) == "PCCARDAttributeMemoryAddress"
	    set MemoryAddrIndex = $(ValueData)
;       else-ifstr(i) $(ValueName) == "PCCARDReadyInterrupt"
;           set IRQValueIndex = $(ValueData)
;           set SecondIOFound = $(TRUE)
	else-ifstr(i) $(ValueName) == "InterruptNumber"
	    set COMInterruptNumberIndex = $(ValueData)
;           set IRQValueIndex = $(ValueData)
	else-ifstr(i) $(ValueName) == "IoBaseAddress_1"
	    set IOBaseAddrIndex = $(ValueData)
	    set SecondIOFound = $(TRUE)
	else-ifstr(i) $(ValueName) == "IoBaseAddress"
	    set COMBaseIndex = $(ValueData)
	else-ifstr(i) $(ValueName) == "SetAddress"
	    set SetAddress = $(ValueData)
	else-ifstr(i) $(ValueName) == "NetworkAddress"
	    set NetworkAddress = $(ValueData)
	else-ifstr(i) $(ValueName) == "DisableLinkTest"
	    set DisLinkValue = $(ValueData)
	else-ifstr(i) $(ValueName) == "FullDuplex"
	    set FullDuplxValue = $(ValueData)
	else-ifstr(i) $(ValueName) == "SocketNumber"
	    set SocketNumberIndex = $(ValueData)
	else-ifstr(i) $(ValueName) == "MaxTransmits"
	    set XmitNumberIndex = $(ValueData)
	else-ifstr(i) $(ValueName) == "ModemFunction"
	    set SharedInterrupt = $(TRUE)
	else-ifstr(i) $(ValueName) == "MemoryMappedBaseAddress"
	    set MemoryMappedSupport = $(TRUE)
;+++Softex
	else-ifstr(i) $(ValueName) == "AdapterName"
	    set !AdapterName = $(ValueData)
;---Softex
	Endif
    EndForListDo

    ;
    ;  Get the converted values
    ;
    set InterruptNumber = *($(IrqList), ~($(IrqValues),$(IRQValueIndex)))
    ifstr(i) $(InterruptNumber) == ""
	set InterruptNumber = *($(IrqList), 2)
    endif

;    set MemBaseAddrValue = *($(MemBaseList), ~($(MemBaseValues),$(MemoryAddrIndex)))
;    ifstr(i) $(MemBaseAddrValue) == ""
;       set MemBaseAddrValue = *($(MemBaseList), 2)
;    endif
;
;    set IOBaseAddrValue = *($(IoBaseList), ~($(IoBaseValues),$(IOBaseAddrIndex)))
;    ifstr(i) $(IOBaseAddrValue) == ""
;       set IOBaseAddrValue = *($(IoBaseList), 1)
;    endif
;
;    set COMIoBaseAddrValue = *($(COMBaseList), ~($(COMBaseValues),$(COMBaseIndex)))
;    ifstr(i) $(COMIoBaseAddrValue) == ""
;       set COMIoBaseAddrValue = *($(COMBaseList), 6)
;    endif

    set MemBaseAddrValue = $(MemoryAddrIndex)
    ifstr(i) $(MemBaseAddrValue) == ""
	set MemBaseAddrValue = *($(MemBaseValues), 2)
    endif

    set IOBaseAddrValue = $(IOBaseAddrIndex)
    ifstr(i) $(IOBaseAddrValue) == ""
	set IOBaseAddrValue = *($(IoBaseValues), 1)
    endif

    set COMIoBaseAddrValue = $(COMBaseIndex)
    ifstr(i) $(COMIoBaseAddrValue) == ""
	set COMIoBaseAddrValue = *($(COMBaseValues), 6)
    endif

    set COMInterruptNumber = *($(COMIrqList), ~($(COMIrqValues),$(COMInterruptNumberIndex)))
    ifstr(i) $(COMInterruptNumber) == ""
	set COMInterruptNumber = *($(COMIrqList), 1)
    endif

    set SocketNumber = *($(SockList), ~($(SockValues),$(SocketNumberIndex)))
    ifstr(i) $(SocketNumber) == ""
	set SocketNumber = *($(SockList), 1)
    endif

    set XmitNumber = *($(XmitList), ~($(XmitValues),$(XmitNumberIndex)))
    ifstr(i) $(XmitNumber) == ""
	Ifcontains(i) $(Option) in {"OTC7ODNT"}
	   set XmitNumber = *($(XmitList), 8)
	Else
	   set XmitNumber = *($(XmitList), 1)
	Endif
    endif

    Ifcontains(i) $(Option) in {"OTC4ODNT"}
	set InterruptNumber = $(COMInterruptNumber)
	set IOBaseAddrIndex = $(COMBaseIndex)
	set COMInterruptNumber = *($(COMIrqList), 11)
    Else-Ifcontains(i) $(Option) in {"OTC7ODNT"}
	set InterruptNumber = $(COMInterruptNumber)
	set IOBaseAddrIndex = $(COMBaseIndex)
	set COMInterruptNumber = *($(COMIrqList), 11)
	; Ifint $(MediaValue) == 3
	;  set MediaValue = 1
	; Endif
    Endif

    ;  If there is no COM then setup for LAN

    Ifcontains(i) $(Option) in {"OTCJODNT", "OTCJOHNT"}
	Ifint $(SecondIOFound) == $(FALSE)
	   set InterruptNumber = $(COMInterruptNumber)
	   set COMInterruptNumber = *($(COMIrqList), 11)
	   set IOBaseAddrIndex = $(COMBaseIndex)
	   set COMBaseIndex = *($(COMBaseValues), 2)
	   Debug-Output "INF: LAN only mode"
	Endif
	Ifint $(SharedInterrupt) == $(TRUE)
	   set InterruptNumber = $(COMInterruptNumber)
	   set COMInterruptNumber = *($(COMIrqList), 12)
	   set COMBaseIndex = *($(COMBaseValues), 7)
	   Debug-Output "INF: Shared Interrupt Mode"
	Endif
    Endif

    Shell $(ParamInf) Param_SaveValues
    set CurrParamSettings = $($R0)

AdapterSetup = +

    Shell "" DebugConfiguration "Before displaying dialog"

    set MemBaseAddrValue = *($(MemBaseList), ~($(MemBaseValues),$(MemoryAddrIndex)))
    set IOBaseAddrValue = *($(IoBaseList), ~($(IoBaseValues),$(IOBaseAddrIndex)))
    set COMIoBaseAddrValue = *($(COMBaseList), ~($(COMBaseValues),$(COMBaseIndex)))

    ;  If not found, then must be COM5 

    Ifstr(i) $(COMIoBaseAddrValue) == ""
	Set COMIoBaseAddrValue = *($(COMBaseList), 6)
    Endif

    Set from = AdapterSetup

    LoadLibrary "disk 1" $(DLLPATH)tzdncdet.dll LibraryHandle
;    LibraryProcedure Result $(LibraryHandle) TellMeChips
;
;    set Text1 = $(PCICType)$(Result)
    Set Text1 = ""

;    set DatabookFound = $(FALSE)
;    Ifstr(i) $(Result) == "Databook DB86082"
;       set DatabookFound = $(TRUE)
;       Ifint $(Combo1Out) == 11
;       else
;          Shell "" WarnError $(IRQForced)
;          Set Combo1Out = "11"
;       Endif
;    Endif

;--fwb-- 03/03/97
;
;    Ifstr(i) $(Result) == "Not found"
;
;       Shell $(SubroutnInf) SetupMessage $(!STF_LANGUAGE) WARNING $(BadPCMCIA)
;
;       Ifint $($ShellCode) != $(!SHELL_CODE_OK)
;          Debug-Output "INF: ShellCode error."
;          goto ShellCodeError
;       Endif
;
;       Ifstr(i) $($R1) == "CANCEL"
;           FreeLibrary $(LibraryHandle)
;           goto End
;       Else-Ifstr(i) $($R1) != "OK"
;           FreeLibrary $(LibraryHandle)
;           goto End
;       Endif
;    Endif
;--fwb-- 03/03/97

;    Set CONTROLLERTYPE = $(Result)
    Set CONTROLLERTYPE = "Not available"
    Set from = AdapterOptions

AdapterOptions = +

    read-syms FileDependentDlg$(!STF_LANGUAGE)"-"$(Option)
    read-syms DialogConstants$(!STF_LANGUAGE)
    read-syms FileConstants$(!STF_LANGUAGE)
    read-syms FileConstants$(!STF_LANGUAGE)"-"$(Option)
    set DLLPATH    = $(DLLPATH)

ContinueOperation =+

    SetHelpFile $(DLLPATH)tzdethnt.hlp $(MinHelpId) $(MaxHelpId) $(Help$(Option)Id)

    set AdapterStatus = $(FALSE)

    Ifint $(SetAddress) == 1
	set NetworkAddress = $(NetworkAddress)
    else
	set NetworkAddress = ""
    Endif

    Ifstr $(MediaValue) == "10BASE2"
	Set RadioIn = {2}
    else-ifstr $(MediaValue) == "10BASET"
	Ifcontains(i) $(Option) in {"OTC7ODNT"}
	  Set RadioIn = {1}
	else
	  Set RadioIn = {1}
	Endif
    else-ifstr $(MediaValue) == "100BASETX"
	Set RadioIn = {2}
    else-ifstr $(MediaValue) == "AUTO"
	Set RadioIn = {3}
    else-ifstr $(MediaValue) == "POWER"
	Set RadioIn = {4}
    Endif

    Ifcontains(i) $(Option) in {"OTC7ODNT"}
      Ifint $(FullDuplxValue) == 0
	 Ifint $(MemoryMappedSupport) == $(TRUE)
	    Set CheckItemsIn = {"OFF","ON"}
	 Else
	    Set CheckItemsIn = {"OFF","OFF"}
	 Endif
      Else
	 Ifint $(MemoryMappedSupport) == $(TRUE)
	    Set CheckItemsIn = {"ON","ON"}
	 Else
	    Set CheckItemsIn = {"ON","OFF"}
	 Endif
      Endif
    Else
      Ifint $(DisLinkValue) == 0
	 Set CheckItemsIn = {"OFF","OFF"}
      Else
	 Set CheckItemsIn = {"ON","OFF"}
      Endif
    Endif

    set EditTextIn     = {$(NetworkAddress)}
    set NotifyFields   = {NO}
    set EditTextLim    = {12}
    set EditFocusOn    = ""

    LoadLibrary "disk 1" $(DialogDllName) DllHandle

RetryDialog =+

    ifstr(i) $(!STF_GUI_UNATTENDED) == "YES"
	ifstr(i) $(!AutoNetInterfaceType) != ""
	    set BusInterfaceType = $(!AutoNetInterfaceType)
	else
	    set BusInterfaceType = 1    
	endif
	ifstr(i) $(!AutoNetBusNumber) != ""
	    set BusNumber = $(!AutoNetBusNumber)
	else
	    set BusNumber = 0
	endif
	goto UnattendBypass
    endif

    ui start "InputDlg" $(DllHandle)

    set NewNetworkAddress = *($(EditTextOut), 1)

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

	set AdapterStatus = $(TRUE)

	set TransceiverTypeIndex = *($(RadioOut),1)
	Ifint $(TransceiverTypeIndex) == 1
	    Set MediaType = 0
	Else-ifint $(TransceiverTypeIndex) == 2
	    Set MediaType = 1
	Else-ifint $(TransceiverTypeIndex) == 3
	    Set MediaType = 2
	Else
	    Set MediaType = 3
	Endif

;       Ifint $(TransceiverTypeIndex) == 4
;          Set MediaType = 2
;          Set PowerValue = 1
;       Else
;          Set PowerValue = 0
;       Endif

	Set Chk = *($(CheckItemsOut), 1)
	Ifcontains(i) $(Option) in {"OTC7ODNT"}
	  Ifstr(i) $(Chk) == "ON"
	    Set FullDuplxType = 1
	  Else
	    Set FullDuplxType = 0
	  Endif
	Else
	  Ifstr(i) $(Chk) == "ON"
	    Set DisLinkType = 1
	  Else
	    Set DisLinkType = 0
	  Endif
	Endif

	Ifcontains(i) $(Option) in {"OTC7ODNT"}
	  Set Chk = *($(CheckItemsOut), 2)
	  Ifstr(i) $(Chk) == "ON"
	    Set MemoryMappedSupport = $(TRUE)
	  Else
	    Set MemoryMappedSupport = $(FALSE)
	  Endif
	Else
	  Set MemoryMappedSupport = $(FALSE)
	Endif

	Ifstr(i) $(NewNetworkAddress) == ""
	    set SetAddress = 0
	else
	    set SetAddress = 1
	Endif

	;Interrupts available on the Intel   : { 3,4,5,7,9,10,11,12,14,15 }
	;Interrupts available on the Databook: { 3,4,5,7,10,14 }
	Ifstr(i) $(CONTROLLERTYPE) == "Databook DB86082"
	    Ifcontains(i) $(Combo3Out) in { 9, 11, 12, 15 }
		Shell "" WarnError $(IRQInvalid)
		Goto RetryDialog
	    Endif
	Endif

	Ifcontains(i) $(Option) in {"OTCJODNT","OTCJOHNT"}
	    Ifstr(i) $(Combo4Out) == "None"
		Shell "" WarnError $(NotSupported)
		Goto RetryDialog
	    Endif
	Endif

	ifint $(SetAddress) == 1
	    Split-String $(NewNetworkAddress), "0123456789ABCDEFabcdef", TempList
	    set HexList = ^(HexDigits, 1)
	    QueryListSize ListSize $(TempList)
	    ifint $(ListSize) == 12
		set Index1 = 1
		set Loop   = 1
	    else
		Shell "" WarnError $(BadAddr1)
		goto RetryDialog
	    endif

NetAddrLoop =+
	    set Temp1 = *($(TempList), $(Index1))
	    ifcontains(i) $(Temp1) not-in $(HexList)
		Shell "" WarnError $(BadAddr2)$(Temp1)
		goto RetryDialog
	    endif
	    ifint $(Index1) == 2
		ifcontains(i) $(Temp1) in { 1,3,5,7,9,b,d,f }
		    Shell "" WarnError $(BadAddr3)
		    goto RetryDialog
		endif
	    endif
    
	    set-add Index1 = $(Index1), 1
	    set-add Loop  = $(Loop), 1
	    ifint $(Loop) < 13
		goto NetAddrLoop
	    endif
	else
	    set NewNetworkAddress = ""
	endif

;       ;
;       ; DLLCODE
;       ; Locate the slot with the PC Card in it
;       ;
;       ; LibraryProcedure CONFIG, $(LibraryHandle), GetPCMCIAConfig
	set SLOTCOUNT = 8
;       ; set CONTROLLERTYPE = *($(CONFIG),3)
;       Debug-Output "INF: Slot_count="$(SLOTCOUNT)" controller type="$(CONTROLLERTYPE)
	set SLOT = 0
;
;    slotloop = +
;       LibraryProcedure INFO, $(LibraryHandle), GetVERS_1Tuple $(SLOT)      ;VERS_1
;       Debug-Output "INF: Slot "$(SLOT)
;       Debug-Output "INF: VERS_1 = "*($(INFO),3)
;       Debug-Output "INF: VERS_1 = "*($(INFO),4)
;       Debug-Output "INF: VERS_1 = "*($(INFO),5)
;       Debug-Output "INF: ---------------------"
;
;       Ifstr(i) *($(INFO),3) == $(VERS1Manufacturer)
;           Ifstr(i) *($(INFO),4) == $(VERS1Product)
;               Goto slotfound
;           Endif
;       Endif
;
;       set-add SLOT = $(SLOT), 1
;       Ifint $(SLOT) == $(SLOTCOUNT)
;           Goto slotnotfound
;       else
;           Goto slotloop
;       Endif
;
;    slotfound = +
;       Debug-Output "INF: PC card found in slot "$(SLOT)
	set SLOTFOUND = 1
	Goto slotcontinue
;
;    slotnotfound = +
;       set SLOTFOUND = ""
;       Debug-Output "INF: PC card not found"

    slotcontinue = +
	; Fall Through

    else-ifstr(i) $(DLGEVENT) == "BACK"
	set CommonStatus = STATUS_USERCANCEL
	ui pop 1
	FreeLibrary $(DllHandle)
	FreeLibrary $(LibraryHandle)
	Debug-Output "INF: Action: BACK"
	goto End
    else
	set CommonStatus = STATUS_USERCANCEL
	ui pop 1
	FreeLibrary $(DllHandle)
	FreeLibrary $(LibraryHandle)
	Debug-Output "INF: Action: Unknown. Bye!"
	goto End
    endif

UnattendBypass =+

    set $(Combo3Out) = $(Combo1Out)

    ; 
    ; Make sure Modem and Lan not sharing same IRQ
    ;
    Ifstr(i) $(VerOO) != $(NT40VersionConst)
       Ifstr(i) $(Combo3Out) == "Share"
	  Ifstr(i) $(VerOP) != $(NT351ServicePack5)
	    Shell "" WarnError $(NeedServicePack)
	  Endif
       Else-Ifint $(Combo1Out) == $(Combo3Out)
	  Shell "" WarnError $(NeedServicePack)
       Endif
    Endif

    Ifint $(Combo1Out) == $(Combo3Out)
       set SharedInterrupt = $(TRUE)
    Else-Ifstr(i) $(Combo3Out) == "Share"
       set SharedInterrupt = $(TRUE)
       set $(Combo3Out) = $(Combo1Out)
    Else
       set SharedInterrupt = $(FALSE)
    Endif

    ;
    ; Warn user about Media Detect Errors Events ...
    ;
    ; Ifint $(MediaType) > 2
    ;
    ;    Ifcontains(i) $(Option) in {"OTC7ODNT"}
    ;
    ;     Ifint $(FullDuplxType) == 1
    ;        ; Shell $(SubroutnInf) SetupMessage $(!STF_LANGUAGE) WARNING $(DuplxDisabled)
    ;       Set FullDuplxType = 0
;         Endif
;
;        Else
;
;          Ifstr(i) $(!STF_GUI_UNATTENDED) != "YES"
;
;            Shell $(SubroutnInf) SetupMessage $(!STF_LANGUAGE) WARNING $(WarnDetect)
;        
;            Ifint $($ShellCode) != $(!SHELL_CODE_OK)
;              Debug-Output "INF: ShellCode error."
;              goto ShellCodeError
;            Endif
;
;            Ifstr(i) $($R1) == "CANCEL"
;              goto RetryDialog
;            Endif
;
;         Endif
;
;       Endif
;
;    Else
;        Ifcontains(i) $(Option) in {"OTC7ODNT"}
;         Ifint $(FullDuplxType) == 1
;           ; Shell $(SubroutnInf) SetupMessage $(!STF_LANGUAGE) WARNING $(WarnDuplex)
;         Endif
;       Endif
;    Endif

    FreeLibrary $(DllHandle)
    ui pop 1

    ;
    ; Warn that the LAN should use IRQ11 on Databook
    ;
;    Ifstr(i) $(CONTROLLERTYPE) == "Databook DB86082"
;        Ifint $(Combo1Out) == 11
;        Else
;            Shell "" WarnError $(IRQForced)
;            Set Combo1Out = "11"
;        Endif
;    Endif

;--fwb-- 03/03/97
;    ;
;    ; Set the default bus type for PCI based controllers
;    ;
;    Ifstr(i) $(BusInterfaceType) == ""
;       Ifstr(i) $(CONTROLLERTYPE) == "Intel 82092AA PPEC"
;           set BusInterfaceType = 5
;       else-ifstr(i) $(CONTROLLERTYPE) == "Cirrus 6729"
;           set BusInterfaceType = 5
;        else-ifstr(i) $(CONTROLLERTYPE) == "Cirrus 6832"
;           set BusInterfaceType = 5
;       else-ifstr(i) $(CONTROLLERTYPE) == "TI PCI1130"
;           set BusInterfaceType = 5
;        else-ifstr(i) $(CONTROLLERTYPE) == "ToPIC 95"
;           set BusInterfaceType = 5
;        else-ifstr(i) $(CONTROLLERTYPE) == "Richo RL5C466"
;           set BusInterfaceType = 5
;        else-ifstr(i) $(CONTROLLERTYPE) == "Omega Micro 82C094"
;           set BusInterfaceType = 5
;       Endif
;    Endif
;--fwb-- 03/03/97

    FreeLibrary $(LibraryHandle)
    
    set IRQValueIndex      = $(Combo1Out)
    set IOBaseAddrIndex    = $(Combo2Out)
    set COMInterruptNumberIndex = $(Combo3Out)
    set COMBaseIndex       = $(Combo4Out)
    set MemoryAddrIndex    = $(Combo5Out)
    set SocketNumberIndex  = $(Combo6Out)
    set XmitNumber         = $(Combo7Out)
    set MediaValue         = $(MediaType)
    set SetAddress         = $(SetAddress)
    set NetworkAddress     = $(NewNetworkAddress)
    Ifcontains(i) $(Option) in {"OTC7ODNT"}
      set FullDuplxValue   = $(FullDuplxType)
    Else
      set DisLinkValue     = $(DisLinkType)
    Endif

    ; Shell $(UtilityInf), GetBusTypeNum
    ; set BusTypeNum = $($R1)
    ; Ifint $($ShellCode) != $(!SHELL_CODE_OK)
    ;   Debug-Output "INF: ShellCode error."
    ;   goto ShellCodeError
    ; Endif

    Ifstr(i) $(!STF_NCDETINFO) == {}
       Ifint $(PCMCIA) != 1
	   Shell $(UtilityInf),GetBusTypeDialog,$(ProductHardware$(Option)Description) $(BusInterfaceType) $(BusNumber)
	   Ifint $(ShellCode) != $(!SHELL_CODE_OK)
	       goto ShellCodeError
	   Endif
	   set BusInterfaceType = $($R1)
	   set BusNumber = $($R2)
       else
	   set BusInterfaceType = 1
	   set BusNumber = 0
       Endif
     else
	set BusInterfaceType = *($(!STF_NCDETINFO),5)
	set BusNumber = *($(!STF_NCDETINFO),6)
    Endif

    ;  
    ;  If PCMCIA bus selected, then move to the ISA bus ...
    ;
    Ifint $(BusInterfaceType) == 8
       set BusInterfaceType = 1
       set PCMCIA = 1
    Endif

    set MemBaseAddrValue  = *($(MemBaseValues), ~($(MemBaseList), $(MemoryAddrIndex)))
    set InterruptNumber   = *($(IrqValues), ~($(IrqList), $(IRQValueIndex)))
    set IOBaseAddrValue   = *($(IoBaseValues), ~($(IoBaseList), $(IOBaseAddrIndex)))
    set COMIoBaseAddrValue = *($(COMBaseValues), ~($(COMBaseList), $(COMBaseIndex)))
    set COMInterruptNumber = *($(COMIrqValues), ~($(COMIrqList), $(COMInterruptNumberIndex)))
    set SocketNumber       = *($(SockValues), ~($(SockList), $(SocketNumberIndex)))
    set ComPortValue       = *($(COMPortList), ~($(COMBaseList), $(COMBaseIndex)))
    ;
    ;  If PC COM port, then determine I/O address ...
    ;
    Ifint $(COMIoBaseAddrValue) == 65535
       Set-add COMIoBaseAddrValue = $(IOBaseAddrValue), 40
       ; Set ComPortValue = "COM5"
    Endif

    ;  For Shared Interrupt mode we do not need to specify the com port
    ;+++ fwb
    Ifint $(SharedInterrupt) == $(TRUE)
       ;Set-add COMIoBaseAddrValue = $(IOBaseAddrValue), 40
       ;set COMIoBaseAddrValue = 0
       set COMInterruptNumber = $(InterruptNumber)      ;
       set BusInterfaceType   = 1
       set PCMCIA             = 1
       Debug-Output "INF:  Setting up for shared interrupt"
    Endif
    ;--- fwb

    Ifint $(COMIoBaseAddrValue) == 1
       Set-add COMIoBaseAddrValue = $(IOBaseAddrValue), 40
       Debug-Output "INF:  Setting up for shared COM Port (COM5)"
    Endif

    Set IOLengthValue_1 = 31
    Set IOLengthValue = 7

AdapterVerify =+

    ; Verify Resources does not work properly

    Ifstr(i) $(DetectedCard) != TRUE
	Goto skipoptions
    Endif

    Shell "" DebugConfiguration "After running dialog"

    Ifstr(i) $(DetectedCard) != TRUE
	Shell $(ParamInf) Param_SaveValues
	Set NewParamSettings = $($R0)
	Ifstr(i) $(CurrParamSettings) == {}
	    Set DiffParamSettings = $(NewParamSettings)
	Else
	    Shell $(ParamInf) Param_DiffValues $(CurrParamSettings)
	    Set DiffParamSettings = $($R0)
	Endif
	Debug-Output "INF: Calling Param_VerifyResources"
	Shell $(ParamInf) Param_VerifyResources $(DiffParamSettings)
	Ifstr(i) $($R0) == STATUS_SUCCESSFUL
	    Debug-Output "INF: Param_VerifyResources succeeded"
	    Goto skipoptions
	Endif
    Else
	Set CardVerifyIndex = $(!STF_NCDETCARD)
	Debug-Output "INF: Calling Param_VerifyCard"
	Shell $(ParamInf) Param_VerifyCard $(!SFT_NCDETCARD)
	Ifstr(i) $($R0) == STATUS_SUCCESSFUL
	    Debug-Output "INF: Param_VerifyCard succeeded"
	    Goto skipoptions
	Endif
    Endif
    Set from = AdapterOptions
    Set to = skipoptions
    Shell $(UtilityInf),RegistryErrorString,VERIFY_WARNING
    Ifint $($ShellCode) != $(!SHELL_CODE_OK)
	Debug-output "Shellcode error: cannot get an error string."
	goto ShellCodeError
    Endif
    set Error = $($R0)
    Goto Warning
skipoptions =+

    Ifint $(OldVersionExisted) == $(TRUE)
	Ifstr(i) $(!NTN_InstallMode) == configure
	    Goto WriteParameters
	Endif
    Endif
    StartWait
    ;
    ; Add Software Components
    ;
    ifint $(OldVersionExisted) == $(FALSE)

	Ifstr(i) $(!NTN_InstallMode) == "install"
	   Ifstr(i) $(DoCopy) == "YES"

	      Shell $(UtilityInf), DoAskSource, $(!STF_CWDDIR), $(SrcDir) YES

	      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 successful
	      Endif

	      Set SrcDir = $($R1)

	   Endif

	   install "Install-Option"

	   ifstr(i) $(STF_INSTALL_OUTCOME) != STF_SUCCESS
	      Shell $(UtilityInf) RegistryErrorString "UNABLE_COPY_FILE"
	      ifint $($ShellCode) != $(!SHELL_CODE_OK)
		  goto ShellCodeError
	      endif
	      set Error = $($R0)
	      goto fatal
	   endif
	Endif

	Shell $(UtilityInf), AddSoftwareComponent, $(Manufacturer), +
	    $(ProductSoftwareName), +
	    $(ProductSoftwareName), +
	    $(ProductSoftwareTitle), $(STF_CONTEXTINFNAME), +
	    $(ProductSoftwareImagePath), "kernel", "NDIS", {}, "",+
	    $(NetEventDLL)

	Set OEM_ABANDON_SOFTWARE = TRUE

	Ifint $($ShellCode) != $(!SHELL_CODE_OK)
	    Debug-Output "INF: ShellCode error"
	    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
	;
	Set RegistryErrorIndex = $($R0)
	Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
	    EndWait
	    Debug-Output "INF: Registry error: Add software components"
	    CloseRegKey $($R1)
	    CloseRegKey $($R2)
	    CloseRegKey $($R3)
	    CloseRegKey $($R4)
	    CloseRegKey $($R5)
	    goto fatalregistry 
	Endif

	Set SoftProductKey   = $($R1)
	Set SoftNetRuleKey  = $($R2)
	Set SoftServiceKey   = $($R3)
	Set SoftParameterKey = $($R4)
	Set SoftLinkageKey   = $($R5)

	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, $(SoftProductKey), $(NewValueList)
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
	    Debug-Output "INF: ShellCode error"
	    goto ShellCodeError
	endif

	set RegistryErrorIndex = $($R0)

	Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
	    EndWait
	    Debug-Output "INF: Resgitry error: add value list."
	    CloseRegKey $(SoftProductKey)
	    CloseRegKey $(SoftNetRuleKey)
	    CloseRegKey $(SoftServiceKey)
	    CloseRegKey $(SoftParameterKey)
	    CloseRegKey $(SoftLinkageKey)
	    goto fatalregistry
	Endif

	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, $(SoftNetRuleKey), $(NewValueList)
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
	    Debug-Output "INF: ShellCode error"
	    goto ShellCodeError
	endif

	set RegistryErrorIndex = $($R0)

    CloseRegKey $(SoftProductKey)
    CloseRegKey $(SoftNetRuleKey)
	CloseRegKey $(SoftServiceKey)
	CloseRegKey $(SoftParameterKey)
	CloseRegKey $(SoftLinkageKey)

	Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
	    EndWait
	    Debug-Output "INF: Resgitry error: add value list."
	    goto fatalregistry
	endif
    Endif
;
;   Create the HARDWARE\Netcard region and its corresponding service
;
    Shell $(UtilityInf), AddHardwareComponent, $(ProductHardwareName),$(STF_CONTEXTINFNAME),$(ProductKeyName)

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

    ifint $($ShellCode) != $(!SHELL_CODE_OK)
	    Debug-Output "INF: Cannot add hardware component"
	    goto ShellCodeError
    endif

    set RegistryErrorIndex = $($R0)
    
    Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
	    EndWait
	    Debug-Output "INF: Registry Error: Add Hardware Component"
	    CloseRegKey $($R1)
	    CloseRegKey $($R2)
	    CloseRegKey $($R3)
	    goto fatalregistry
    Endif

;
;   At this point:
;     $R1  Registry key variable for HARDWARE\Netcard\(n)
;     $R2  Registry key variable for HARDWARE\Netcard\(n)\\NetRules
;     $R3  Registry key handle for <service>\Parameters key
;     $R4  Adapter number assigned to adapter
;     $R5  Service name generated by combining svc name with adapter number
;
    set KeyParameters   = $($R3)
    set KeyAdapterRules = $($R2)
    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, $($R1), $(NewValueList)
    Ifint $($ShellCode) != $(!SHELL_CODE_OK)
	    Debug-Output "INF: ShellCode error"
	    goto ShellCodeError
    Endif

    CloseRegKey $($R1)

    set TempProdName = """"$(ProductHardwareName)$(AdapterNumber)""""
    set TempBindForm = $(TempProdName)$(NetRuleHardwareBindForm)

;+++Softex
    set !AdapterName = $(ProductHardwareName)$(AdapterNumber)
;---Softex

    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)
    Ifint $($ShellCode) != $(!SHELL_CODE_OK)
	    Debug-Output "INF: ShellCode error"
	    goto ShellCodeError
    Endif

    set RegistryErrorIndex = $($R0)

    Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
	    EndWait
	    Debug-Output "INF: Resgitry error: add value list."
	    CloseRegKey $(KeyParameters)
	    CloseRegKey $(KeyAdapterRules)
	    goto fatalregistry
    Endif

    CloseRegKey $(KeyAdapterRules)

    Goto WriteParameters
;
;   REQUIRED:   $(KeyParameters) contains service Parameters key handle
;
WriteParameters = +
    Ifint $(COMInterruptNumber) == 0
	Set COMIoBaseAddrValue = 0
    Endif
    Ifint $(COMIoBaseAddrValue) == 0
	Set IOLengthValue = 0
    else
	Set IOLengthValue = 7
    Endif
    ; BUGBUGBUG
    ;
    ;  Ugly hack to get COM5 using MS Enabler ...
    ;
    Ifint $(PCMCIA) == 1
	Ifstr(i) $(ComPortValue) == "COM5"
	    Set IOLengthValue_1 = 47
	Else
	    Set IOLengthValue_1 = 31
	Endif
    Else
	Set IOLengthValue_1 = 31
    Endif

    Ifcontains(i) $(Option) in {"OTC4ODNT"}
      Ifint $(MediaValue) == 0
	Set MediaString = "10BASET"
      else-Ifint $(MediaValue) == 1
	Set MediaString = "10BASE2"
      else-Ifint $(MediaValue) == 2
	Set MediaString = "AUTO"
      else
	Set MediaString = "POWER"
      Endif
    Set IOLengthValue_1 = 15
    Set NewValueList = {{BusType,$(NoTitle),$(!REG_VT_DWORD),$(BusInterfaceType)},+
			{BusNumber,$(NoTitle),$(!REG_VT_DWORD),$(BusNumber)},+
			{Pcmcia,$(NoTitle),$(!REG_VT_DWORD),1},+
;+++Softex
;                        {SoftexPcmcia,$(NoTitle),$(!REG_VT_DWORD),1},+
			{AdapterName,$(NoTitle),$(REG_VT_SZ),$(!AdapterName)},+
;---Softex
			{transceiver,$(NoTitle),$(!REG_VT_SZ),$(MediaString)},+
			{MaxTransmits,$(NoTitle),$(!REG_VT_DWORD),$(XmitNumber)},+
			{Environment,$(NoTitle),$(!REG_VT_DWORD),1},+
			{EnableEarlyRcv,$(NoTitle),$(!REG_VT_DWORD),0},+
			{DisableLinkTest,$(NoTitle),$(!REG_VT_DWORD),$(DisLinkValue)},+

			{InterruptNumber,$(NoTitle),$(!REG_VT_DWORD),$(InterruptNumber)},+
			{IoBaseAddress,$(NoTitle),$(!REG_VT_DWORD),$(IOBaseAddrValue)},+
			{IoLength,$(NoTitle),$(!REG_VT_DWORD),$(IOLengthValue_1)},+

			{PCCARDAttributeMemoryAddress,$(NoTitle),$(!REG_VT_DWORD),$(MemBaseAddrValue)},+
			{PCCARDAttributeMemorySize,$(NoTitle),$(!REG_VT_DWORD),4096},+
			{PCCARDAttributeMemoryOffset,$(NoTitle),$(!REG_VT_DWORD),0},+
			
			{SetAddress,$(NoTitle),$(!REG_VT_DWORD),$(SetAddress)},+
			{NetworkAddress,$(NoTitle),$(!REG_VT_SZ),$(NetworkAddress)}}
    Else-Ifcontains(i) $(Option) in {"OTC7ODNT"}
      Ifint $(MediaValue) == 0
	Set MediaString = "10BASET"
      else-Ifint $(MediaValue) == 1
	Set MediaString = "100BASETX"
      else-Ifint $(MediaValue) == 2
	Set MediaString = "AUTO"
	Set FullDuplxValue = 0
      else
	Set MediaString = "POWER"
	Set FullDuplxValue = 0
      Endif
      Set IOLengthValue_1 = 15
      Set-add MemMappedBase = $(MemBaseAddrValue), 4096
    Set NewValueList = {{BusType,$(NoTitle),$(!REG_VT_DWORD),$(BusInterfaceType)},+
			{BusNumber,$(NoTitle),$(!REG_VT_DWORD),$(BusNumber)},+
			{Pcmcia,$(NoTitle),$(!REG_VT_DWORD),1},+
;+++Softex
;                        {SoftexPcmcia,$(NoTitle),$(!REG_VT_DWORD),1},+
			{AdapterName,$(NoTitle),$(REG_VT_SZ),$(!AdapterName)},+
;---Softex
			{transceiver,$(NoTitle),$(!REG_VT_SZ),$(MediaString)},+
			{FullDuplex,$(NoTitle),$(!REG_VT_DWORD),$(FullDuplxValue)},+
			{MaxTransmits,$(NoTitle),$(!REG_VT_DWORD),$(XmitNumber)},+
			{BunnyFlags,$(NoTitle),$(!REG_VT_DWORD),8},+
			{Environment,$(NoTitle),$(!REG_VT_DWORD),1},+
			{EnableEarlyRcv,$(NoTitle),$(!REG_VT_DWORD),0},+

			{InterruptNumber,$(NoTitle),$(!REG_VT_DWORD),$(InterruptNumber)},+
			{IoBaseAddress,$(NoTitle),$(!REG_VT_DWORD),$(IOBaseAddrValue)},+
			{IoLength,$(NoTitle),$(!REG_VT_DWORD),$(IOLengthValue_1)},+

			{MemoryMappedBaseAddress,$(NoTitle),$(!REG_VT_DWORD),$(MemMappedBase)},+
			{MemoryMappedSize,$(NoTitle),$(!REG_VT_DWORD),2048},+
			{PCCARDMemoryWindowOffset,$(NoTitle),$(!REG_VT_DWORD),0},+
			{Address_16,$(NoTitle),$(!REG_VT_DWORD),1},+

			{PCCARDAttributeMemoryAddress,$(NoTitle),$(!REG_VT_DWORD),$(MemBaseAddrValue)},+
			{PCCARDAttributeMemorySize,$(NoTitle),$(!REG_VT_DWORD),4096},+
			{PCCARDAttributeMemoryOffset,$(NoTitle),$(!REG_VT_DWORD),0},+
			
			{SetAddress,$(NoTitle),$(!REG_VT_DWORD),$(SetAddress)},+
			{NetworkAddress,$(NoTitle),$(!REG_VT_SZ),$(NetworkAddress)}}
    Else
      Ifint $(MediaValue) == 0
	Set MediaString = "10BASET"
      else-Ifint $(MediaValue) == 1
	Set MediaString = "10BASE2"
      else-Ifint $(MediaValue) == 2
	Set MediaString = "AUTO"
      else
	Set MediaString = "POWER"
      Endif
    Set IOLengthValue_1 = 31
    Ifint $(COMIoBaseAddrValue) == 0
    Set NewValueList = {{BusType,$(NoTitle),$(!REG_VT_DWORD),$(BusInterfaceType)},+
			{BusNumber,$(NoTitle),$(!REG_VT_DWORD),$(BusNumber)},+
			{Pcmcia,$(NoTitle),$(!REG_VT_DWORD),1},+
;+++Softex
;                        {SoftexPcmcia,$(NoTitle),$(!REG_VT_DWORD),1},+
			{AdapterName,$(NoTitle),$(REG_VT_SZ),$(!AdapterName)},+
;---Softex
			{transceiver,$(NoTitle),$(!REG_VT_SZ),$(MediaString)},+
			{MaxTransmits,$(NoTitle),$(!REG_VT_DWORD),$(XmitNumber)},+
			{Environment,$(NoTitle),$(!REG_VT_DWORD),1},+
			{EnableEarlyRcv,$(NoTitle),$(!REG_VT_DWORD),0},+
			{DisableLinkTest,$(NoTitle),$(!REG_VT_DWORD),$(DisLinkValue)},+

			{ModemFunction,$(NoTitle),$(!REG_VT_DWORD),1},+
			{CardType,$(NoTitle),$(!REG_VT_DWORD),1},+

			{InterruptNumber,$(NoTitle),$(!REG_VT_DWORD),$(InterruptNumber)},+
			{IoBaseAddress,$(NoTitle),$(!REG_VT_DWORD),$(IOBaseAddrValue)},+
			{IoLength,$(NoTitle),$(!REG_VT_DWORD),$(IOLengthValue_1)},+

			{PCCARDAttributeMemoryAddress,$(NoTitle),$(!REG_VT_DWORD),$(MemBaseAddrValue)},+
			{PCCARDAttributeMemorySize,$(NoTitle),$(!REG_VT_DWORD),4096},+
			{PCCARDAttributeMemoryOffset,$(NoTitle),$(!REG_VT_DWORD),0},+
			
			{SetAddress,$(NoTitle),$(!REG_VT_DWORD),$(SetAddress)},+
			{NetworkAddress,$(NoTitle),$(!REG_VT_SZ),$(NetworkAddress)}}
	Else
    Set NewValueList = {{BusType,$(NoTitle),$(!REG_VT_DWORD),$(BusInterfaceType)},+
			{BusNumber,$(NoTitle),$(!REG_VT_DWORD),$(BusNumber)},+
			{Pcmcia,$(NoTitle),$(!REG_VT_DWORD),1},+
			{transceiver,$(NoTitle),$(!REG_VT_SZ),$(MediaString)},+
			{MaxTransmits,$(NoTitle),$(!REG_VT_DWORD),$(XmitNumber)},+
			{Environment,$(NoTitle),$(!REG_VT_DWORD),1},+
			{EnableEarlyRcv,$(NoTitle),$(!REG_VT_DWORD),0},+
			{DisableLinkTest,$(NoTitle),$(!REG_VT_DWORD),$(DisLinkValue)},+

			{ModemFunction,$(NoTitle),$(!REG_VT_DWORD),1},+
			{CardType,$(NoTitle),$(!REG_VT_DWORD),1},+

			{InterruptNumber,$(NoTitle),$(!REG_VT_DWORD),$(InterruptNumber)},+
			{IoBaseAddress,$(NoTitle),$(!REG_VT_DWORD),$(COMIoBaseAddrValue)},+
			{IoLength,$(NoTitle),$(!REG_VT_DWORD),$(IOLengthValue)},+
			{IoBaseAddress_1,$(NoTitle),$(!REG_VT_DWORD),$(IOBaseAddrValue)},+
			{IoLength_1,$(NoTitle),$(!REG_VT_DWORD),$(IOLengthValue_1)},+

			{PCCARDAttributeMemoryAddress,$(NoTitle),$(!REG_VT_DWORD),$(MemBaseAddrValue)},+
			{PCCARDAttributeMemorySize,$(NoTitle),$(!REG_VT_DWORD),4096},+
			{PCCARDAttributeMemoryOffset,$(NoTitle),$(!REG_VT_DWORD),0},+
			
			{SetAddress,$(NoTitle),$(!REG_VT_DWORD),$(SetAddress)},+
			{NetworkAddress,$(NoTitle),$(!REG_VT_SZ),$(NetworkAddress)}}
	Endif
    Endif

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

    Ifint $(COMIoBaseAddrValue) == 0
	    DeleteRegValue $(KeyParameters) "IoBaseAddress_1"
	    DeleteRegValue $(KeyParameters) "IoLength_1"
	    ; DeleteRegValue $(KeyParameters) "PCCARDReadyInterrupt"
	    DeleteRegValue $(KeyParameters) "ModemFunction"
	    DeleteRegValue $(KeyParameters) "CardType"
    Endif

    Ifcontains(i) $(Option) in {"OTC7ODNT"}
	Ifint $(MemoryMappedSupport) == $(FALSE)
		DeleteRegValue $(KeyParameters) "MemoryMappedBaseAddress"
		DeleteRegValue $(KeyParameters) "MemoryMappedSize"
		DeleteRegValue $(KeyParameters) "PCCARDMemoryWindowOffset"
		DeleteRegValue $(KeyParameters) "Address_16"
	Endif
    Else
	DeleteRegValue $(KeyParameters) "MemoryMappedBaseAddress"
	DeleteRegValue $(KeyParameters) "MemoryMappedSize"
	DeleteRegValue $(KeyParameters) "PCCARDMemoryWindowOffset"
	DeleteRegValue $(KeyParameters) "Address_16"
	DeleteRegValue $(KeyParameters) "BunnyFlags"
    Endif

;    ;
;    ;  If PCMCIA then add the registry entry, otherwise remove it ...
;    ;
;    Ifint $(PCMCIA) == 1
;       Set NewValueList = {{Pcmcia,$(NoTitle),$(!REG_VT_DWORD),1}}
;       Shell  $(UtilityInf), AddValueList, $(KeyParameters), $(NewValueList)
;       ;
;        ;  If Shared Interrupt Mode then add ModemFunction
;       ;
;; +++ -fwb-
;        Ifcontains(i) $(Option) in {"OTCJODNT","OTCJOHNT"}
;            ;Ifint $(COMInterruptNumber) == $(InterruptNumber)
;            Ifint $(SharedInterrupt) == $(TRUE)
;                DeleteRegValue $(KeyParameters) "PCCARDReadyInterrupt"
;                Set NewValueList = {{ModemFunction,$(NoTitle),$(!REG_VT_DWORD),1},+
;                                    {CardType,$(NoTitle),$(!REG_VT_DWORD),1}}
;                Shell  $(UtilityInf), AddValueList, $(KeyParameters), $(NewValueList)
;                Debug-Output "INF: Updating Registry for ModemFunction"
;            Else
;                DeleteRegValue $(KeyParameters) "ModemFunction"
;                DeleteRegValue $(KeyParameters) "CardType"
;                Debug-Output "INF: Removing ModemFunction"
;            Endif
;        Endif
;; --- -fwb-
;    else
;       DeleteRegValue $(KeyParameters) "Pcmcia"
;       DeleteRegValue $(KeyParameters) "ModemFunction"
;       DeleteRegValue $(KeyParameters) "CardType"
;    Endif

    Ifstr(i) $(!STF_GUI_UNATTENDED) == "YES"
	Shell $(UtilityInf),AddDefaultNetCardParameters,$(KeyParameters)
    Endif

    CloseRegKey $(KeyParameters)

    ;
    ; TZDETHNT: add the comm port info to the SYSTEM\CurrentControlSet\Services\Serial\Parameters section of the registry
    ; 
; +++ -fwb-
;    Ifcontains(i) $(Option) in {"OTCJODNT","OTCJOHNT"}
;        Ifstr(i) $(ComPortValue) != "None"
;            OpenRegKey $(!REG_H_LOCAL) "" "SYSTEM\CurrentControlSet\Services\Serial\Parameters\SerialGenericJOD" $(MAXIMUM_ALLOWED) MyNewSerialHandle
;            Ifstr $(MyNewSerialHandle) == $(KeyNull)
;                OpenRegKey $(!REG_H_LOCAL) "" "SYSTEM\CurrentControlSet\Services\Serial\Parameters" $(MAXIMUM_ALLOWED) SerialKey
;                CreateRegKey $(SerialKey) {"SerialGenericJOD",0,GenericClass} "" $(MAXIMUM_ALLOWED) "" MyNewSerialHandle
;                CloseRegKey $(SerialKey)
;            Endif
;            Set NewValueList = {{DosDevices, $(NoTitle),$(!REG_VT_SZ), $(ComPortValue)},+               ; "COMx"
;                                {ForceFifoEnable, $(NoTitle),$(!REG_VT_DWORD), 1},+                     ; Always true for JOD
;                                {Interrupt, $(NoTitle),$(!REG_VT_DWORD), $(COMInterruptNumber)},+       ; Interrupt for JOD modem
;                                {PortAddress, $(NoTitle),$(!REG_VT_DWORD), $(COMIoBaseAddrValue)}}      ; I/O Base address for JOD
;            Shell  $(UtilityInf), AddValueList, $(MyNewSerialHandle), $(NewValueList)
;            CloseRegKey $(MyNewSerialHandle)
;
;            ; JODNT: add comm port info to HARDWARE\DEVICEMAP\SERIALCOMM section
;            OpenRegKey $(!REG_H_LOCAL) "" "HARDWARE\DEVICEMAP\SERIALCOMM" $(MAXIMUM_ALLOWED) MyNewSerialHandle
;            Ifstr $(MyNewSerialHandle) == $(KeyNull)
;                OpenRegKey $(!REG_H_LOCAL) "" "HARDWARE\DEVICEMAP" $(MAXIMUM_ALLOWED) SerialKey
;                CreateRegKey $(SerialKey) {"SERIALCOMM",0,GenericClass} "" $(MAXIMUM_ALLOWED) "" MyNewSerialHandle
;                CloseRegKey $(SerialKey)
;            Endif
;            SetRegValue $(MyNewSerialHandle) {"SerialGenericJOD",$(NoTitle),$(!REG_VT_SZ),$(ComPortValue)}
;            CloseRegKey $(MyNewSerialHandle)
;
;            ; JODNT: add comm port info to SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports section
;            OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports" $(MAXIMUM_ALLOWED) MyNewSerialHandle
;            Ifstr $(MyNewSerialHandle) == $(KeyNull)
;                OpenRegKey $(!REG_H_LOCAL) "" "SOFTWARE\Microsoft\Windows NT\CurrentVersion" $(MAXIMUM_ALLOWED) SerialKey
;                CreateRegKey $(SerialKey) {"Ports",0,GenericClass} "" $(MAXIMUM_ALLOWED) "" MyNewSerialHandle
;                CloseRegKey $(SerialKey)
;            Endif
;            SetRegValue $(MyNewSerialHandle) {$(ComPortValue)":",$(NoTitle),$(!REG_VT_SZ),"9600,n,8,1"}
;            CloseRegKey $(MyNewSerialHandle)
;        Else
;            ;
;            ;  Remove the COM port
;            ;
;            OpenRegKey $(!REG_H_LOCAL) "" "SYSTEM\CurrentControlSet\Services\Serial\Parameters" $(MAXIMUM_ALLOWED) MyNewSerialHandle
;            DeleteRegTree $(MyNewSerialHandle) "SerialGenericJOD"
;            CloseRegKey $(MyNewSerialHandle)
;
;            OpenRegKey $(!REG_H_LOCAL) "" "HARDWARE\DEVICEMAP\SERIALCOMM" $(MAXIMUM_ALLOWED) MyNewSerialHandle
;            DeleteRegValue $(MyNewSerialHandle) "SerialGenericJOD"
;            CloseRegKey $(MyNewSerialHandle)
;        Endif
;    Endif
; --- -fwb-

    ;
    ; Write the parameters to the PCMCIA database section.
    ;
    set PCMCIADatabaseKeyName = $(!NTN_ServiceBase)"\Pcmcia\DataBase"
    ; Debug-Output "INF: Opening PCMICA database key "$(PCMCIADatabaseKeyName)
    OpenRegKey $(!REG_H_LOCAL) "" $(PCMCIADatabaseKeyName) $(MAXIMUM_ALLOWED) PCMCIADatabaseKey

    Ifstr $(PCMCIADatabaseKey) == $(NULL)    
	Debug-Output "INF: Pcmcia\DataBase not present"
    else
	;
	; Reprogram the PCMCIA slot with the new parameters.
	;
	; Should really only be done during first time installation of NT, and
	; only if a PC card was found.  For now, we do it always ...
	;
	; Ifint $(SLOTFOUND) == 1
	    ; LoadLibrary "disk 1" $(DLLPATH)tzdncdet.dll DllHandle
	    ; Debug-Output "INF: Enabling the network resources"
	    ; LibraryProcedure STATUS, $(DllHandle), SetupSlot $(SLOT) 0 $(InterruptNumber) $(IOBaseAddrValue) $(IOLengthValue) $(MemBaseAddrValue) 4096 0
	    ; Debug-Output "INF: SetupSlot status "$(STATUS)
	    ; FreeLibrary $(DllHandle)
	; Endif
	;
	; Try to open up the Generic section
	;
	OpenRegKey $(!REG_H_LOCAL) "" $(PCMCIADatabaseKeyName)"\Generic" $(MAXIMUM_ALLOWED) PCMCIADatabaseGenericKey

	Ifstr $(PCMCIADatabaseGenericKey) == $(KeyNull)
	  CreateRegKey $(PCMCIADatabaseKey) {"Generic", 0, GenericClass} "" $(MAXIMUM_ALLOWED) "" PCMCIADatabaseGenericKey
	  CloseRegkey $(PCMCIADatabaseGenericKey)
	  OpenRegKey $(!REG_H_LOCAL) "" $(PCMCIADatabaseKeyName)"\Generic" $(MAXIMUM_ALLOWED) PCMCIADatabaseGenericKey
	Endif

	; Do the Ethernet Cards ----------------------------------------------------------------------------------

	OpenRegKey $(!REG_H_LOCAL) "" $(PCMCIADatabaseKeyName)"\Generic\10MB Ethernet" $(MAXIMUM_ALLOWED) PCMCIADatabaseGeneric4ODKey

	Ifstr $(PCMCIADatabaseGeneric4ODKey) == $(KeyNull)
	  Debug-Output "INF: Pcmcia\DataBase 4oD not present"
	  CreateRegKey $(PCMCIADatabaseGenericKey) {"10MB Ethernet", 0, 0} "" $(MAXIMUM_ALLOWED) 0 PCMCIADatabaseGeneric4ODKey
	  CloseRegKey $(PCMCIADatabaseGeneric4ODKey)
	  OpenRegKey $(!REG_H_LOCAL) "" $(PCMCIADatabaseKeyName)"\Generic\10MB Ethernet" $(MAXIMUM_ALLOWED) PCMCIADatabaseGeneric4ODKey
	Endif

	SetRegValue $(PCMCIADatabaseGeneric4ODKey) {Driver, 0, $(!REG_VT_SZ),"tzdethnt"}
	SetRegValue $(PCMCIADatabaseGeneric4ODKey) {AttributeMemorySize, 0, $(!REG_VT_DWORD),4096}
	SetRegValue $(PCMCIADatabaseGeneric4ODKey) {DeviceType, 0, $(!REG_VT_SZ),"NET"}
	SetRegValue $(PCMCIADatabaseGeneric4ODKey) {InfFileName, 0, $(!REG_VT_SZ),$(STF_CONTEXTINFNAME)}
	SetRegValue $(PCMCIADatabaseGeneric4ODKey) {Option, 0, $(!REG_VT_SZ),"OTC4ODNT"}
	SetRegValue $(PCMCIADatabaseGeneric4ODKey) {CardMemorySize, 0, $(!REG_VT_DWORD),0}
	SetRegValue $(PCMCIADatabaseGeneric4ODKey) {PortWidth16, 0, $(!REG_VT_DWORD),1}
	CloseRegKey $(PCMCIADatabaseGeneric4ODKey)
	
	OpenRegKey $(!REG_H_LOCAL) "" $(PCMCIADatabaseKeyName)"\Generic\10-100MB Ethernet" $(MAXIMUM_ALLOWED) PCMCIADatabaseGeneric7ODKey

	Ifstr $(PCMCIADatabaseGeneric7ODKey) == $(KeyNull)
	  Debug-Output "INF: Pcmcia\DataBase 7oD not present"
	  CreateRegKey $(PCMCIADatabaseGenericKey) {"10/100MB Ethernet", 0, GenericClass} "" $(MAXIMUM_ALLOWED) 0 PCMCIADatabaseGeneric7ODKey
	  CloseRegKey $(PCMCIADatabaseGeneric7ODKey)
	  OpenRegKey $(!REG_H_LOCAL) "" $(PCMCIADatabaseKeyName)"\Generic\10-100MB Ethernet" $(MAXIMUM_ALLOWED) PCMCIADatabaseGeneric7ODKey
	Endif

	SetRegValue $(PCMCIADatabaseGeneric7ODKey) {Driver, 0, $(!REG_VT_SZ),"tzdethnt"}
	SetRegValue $(PCMCIADatabaseGeneric7ODKey) {AttributeMemorySize, 0, $(!REG_VT_DWORD),4096}
	SetRegValue $(PCMCIADatabaseGeneric7ODKey) {DeviceType, 0, $(!REG_VT_SZ),"NET"}
	SetRegValue $(PCMCIADatabaseGeneric7ODKey) {InfFileName, 0, $(!REG_VT_SZ),$(STF_CONTEXTINFNAME)}
	SetRegValue $(PCMCIADatabaseGeneric7ODKey) {Option, 0, $(!REG_VT_SZ),"OTC7ODNT"}
	SetRegValue $(PCMCIADatabaseGeneric7ODKey) {CardMemorySize, 0, $(!REG_VT_DWORD),0}
	SetRegValue $(PCMCIADatabaseGeneric7ODKey) {PortWidth16, 0, $(!REG_VT_DWORD),1}
	CloseRegKey $(PCMCIADatabaseGeneric7ODKey)
	
	; Do the Modem+Ethernet Cards ----------------------------------------------------------------------------------
	OpenRegKey $(!REG_H_LOCAL) "" $(PCMCIADatabaseKeyName)"\Generic\Modem+Ethernet" $(MAXIMUM_ALLOWED) PCMCIADatabaseGenericJODKey

	Ifstr $(PCMCIADatabaseGenericJODKey) == $(KeyNull)
	  Debug-Output "INF: Pcmcia\DataBase JoD not present"
	  CreateRegKey $(PCMCIADatabaseGenericKey) {"Modem+Ethernet", 0, 0} "" $(MAXIMUM_ALLOWED) 0 PCMCIADatabaseGenericJODKey
	  CloseRegKey $(PCMCIADatabaseGenericJODKey)
	  OpenRegKey $(!REG_H_LOCAL) "" $(PCMCIADatabaseKeyName)"\Generic\Modem+Ethernet" $(MAXIMUM_ALLOWED) PCMCIADatabaseGenericJODKey
	Endif

	SetRegValue $(PCMCIADatabaseGenericJODKey) {Driver, 0, $(!REG_VT_SZ),"tzdethnt"}
	SetRegValue $(PCMCIADatabaseGenericJODKey) {AttributeMemorySize, 0, $(!REG_VT_DWORD),4096}
	SetRegValue $(PCMCIADatabaseGenericJODKey) {DeviceType, 0, $(!REG_VT_SZ),"NET"}
	SetRegValue $(PCMCIADatabaseGenericJODKey) {InfFileName, 0, $(!REG_VT_SZ),$(STF_CONTEXTINFNAME)}
	SetRegValue $(PCMCIADatabaseGenericJODKey) {Option, 0, $(!REG_VT_SZ),"OTCJODNT"}
	SetRegValue $(PCMCIADatabaseGenericJODKey) {CardMemorySize, 0, $(!REG_VT_DWORD),0}
	SetRegValue $(PCMCIADatabaseGenericJODKey) {PortWidth16, 0, $(!REG_VT_DWORD),1}
	CloseRegKey $(PCMCIADatabaseGenericJODKey)

	OpenRegKey $(!REG_H_LOCAL) "" $(PCMCIADatabaseKeyName)"\Generic\56K+10Mb Ethernet" $(MAXIMUM_ALLOWED) PCMCIADatabaseGenericJOHKey

	Ifstr $(PCMCIADatabaseGenericJOHKey) == $(KeyNull)
	  Debug-Output "INF: Pcmcia\DataBase JoH not present"
	  CreateRegKey $(PCMCIADatabaseGenericKey) {"56K+10Mb Ethernet", 0, 0} "" $(MAXIMUM_ALLOWED) 0 PCMCIADatabaseGenericJOHKey
	  CloseRegKey $(PCMCIADatabaseGenericJOHKey)
	  OpenRegKey $(!REG_H_LOCAL) "" $(PCMCIADatabaseKeyName)"\Generic\56K+10Mb Ethernet" $(MAXIMUM_ALLOWED) PCMCIADatabaseGenericJOHKey
	Endif

	SetRegValue $(PCMCIADatabaseGenericJOHKey) {Driver, 0, $(!REG_VT_SZ),"tzdethnt"}
	SetRegValue $(PCMCIADatabaseGenericJOHKey) {AttributeMemorySize, 0, $(!REG_VT_DWORD),4096}
	SetRegValue $(PCMCIADatabaseGenericJOHKey) {DeviceType, 0, $(!REG_VT_SZ),"NET"}
	SetRegValue $(PCMCIADatabaseGenericJOHKey) {InfFileName, 0, $(!REG_VT_SZ),$(STF_CONTEXTINFNAME)}
	SetRegValue $(PCMCIADatabaseGenericJOHKey) {Option, 0, $(!REG_VT_SZ),"OTCJOHNT"}
	SetRegValue $(PCMCIADatabaseGenericJOHKey) {CardMemorySize, 0, $(!REG_VT_DWORD),0}
	SetRegValue $(PCMCIADatabaseGenericJOHKey) {PortWidth16, 0, $(!REG_VT_DWORD),1}
	CloseRegKey $(PCMCIADatabaseGenericJOHKey)

	CloseRegKey $(PCMCIADatabaseGenericKey)

	CloseRegKey $(PCMCIADatabaseKey)
    Endif
    ;
    ; Inform PC Card user to manually add a serial port through control panel
    ;
    ;Ifstr(i) $(Option) == OTCJODNT
    ;    set InvokePortToolMsg   = "Generic PC Card setup is complete.  Please remember to configure the PC Card "+
    ;                            "serial port by invoking the Ports tool in the Control Panel."
    ;    Shell "subroutn.inf" SetupMessage, $(!STF_LANGUAGE), "STATUS", $(InvokePortCPMsg)
    ;    IfInt $($ShellCode) != $(!SHELL_CODE_OK)
    ;        Debug-Output "INF: ShellCode error."
    ;        goto ShellCodeError
    ;    EndIf
    ;Endif

    Ifint $($ShellCode) != $(!SHELL_CODE_OK)
	Debug-Output "INF: ShellCode error."
	goto ShellCodeError
    Endif

    set RegistryErrorIndex = $($R0)

    Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
	Debug-Output "INF: Registry error: Add value list"
	goto fatalregistry
    Endif

    EndWait

    Goto successful

NoWay =+
    set Error = "Sorry, not yet implemented."
    Goto fatal

;-----------------------------------------------
; Removeadapter section
;-----------------------------------------------

RemoveAdapter =+
    Ifstr(i) $(ProductKeyName) == $(!NTN_RegBase)
	; Remove software components
	Shell $(UtilityInf), RemoveSoftwareComponent, $(Manufacturer), +
	    $(ProductSoftwareName)

	Ifint $($ShellCode) != $(!SHELL_CODE_OK)
	    Debug-Output "INF: ShellCode error"
	    Goto ShellCodeError
	Endif

	set RegistryErrorIndex = $($R0)

	Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
	    Goto fatalregistry
	Endif
    else
	Shell $(UtilityInf), RemoveHardwareComponent, $(Manufacturer), +
	    $(ProductSoftwareName), $(!NTN_RegBase)

	Ifint $($ShellCode) != $(!SHELL_CODE_OK)
	    Debug-Output "INF: ShellCode error"
	    Goto ShellCodeError
	Endif

	set RegistryErrorIndex = $($R0)

	Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
	    Goto fatalregistry
	Endif

	;
	; TzdethNT: delete the comm port info to the SYSTEM\CurrentControlSet\Services\Serial\Parameters section of the registry
	;
	;--fwb-- 03/11/97
	;Ifstr(i) $(Option) == OTCJODNT
	;        OpenRegKey $(!REG_H_LOCAL) "" "SYSTEM\CurrentControlSet\Services\Serial\Parameters" $(MAXIMUM_ALLOWED) MyNewSerialHandle
	;        DeleteRegTree $(MyNewSerialHandle) "SerialGenericJOD"
	;        CloseRegKey $(MyNewSerialHandle)
	;
	;        OpenRegKey $(!REG_H_LOCAL) "" "HARDWARE\DEVICEMAP\SERIALCOMM" $(MAXIMUM_ALLOWED) MyNewSerialHandle
	;        DeleteRegValue $(MyNewSerialHandle) "SerialGenericJOD"
	;        CloseRegKey $(MyNewSerialHandle)
	;Endif
	;--fwb-- 03/11/97

    Endif

    Goto End

;-----------------------------------------------
; Upgrade Software section
;-----------------------------------------------

UpgradeSoftware =+
    ;
    ; First determine whether we want to do upgrade or update for software
    ; or hardware component. Then we will determine whether the Mode is
    ; update or upgrade.
    ;
    ; If the same version of the product existed in the registry, we do
    ; update. Otherwise, we will do a upgrade
    ;

    ifstr(i) $(ProductKeyName) == $(!NTN_RegBase)
	; Upgrade software component
	;
	; see whether the same version exist or not
	;
       OpenRegKey $(!REG_H_LOCAL) "" $(ProductKeyName) $(MAXIMUM_ALLOWED) KeyProduct
       Ifstr $(KeyProduct) != $(KeyNull)
	   GetRegValue $(KeyProduct),"MajorVersion", VersionInfo
	   set Version = *($(VersionInfo), 4)

	   ;
	   ; Update the binaries
	   ;
	   Shell $(UtilityInf), GetInfFileNameFromRegistry, $(KeyProduct)

	   Ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "INF: ShellCode error"
		Goto ShellCodeError
	   Endif

	   set !UG_Filename = $($R0)

	   Ifstr(i) $(!UG_Filename) != ""
		install "Install-Update"
		Ifstr(i) $(STF_INSTALL_OUTCOME) != STF_SUCCESS
		    Goto fatal
		Endif
	   Endif

	   ; Upgrade the version number
	   ;
	   SetRegValue $(KeyProduct) {MajorVersion,$(NoTitle),$(!REG_VT_SZ),$(ProductMajorVersion)}
	   SetRegValue $(KeyProduct) {MinorVersion,$(NoTitle),$(!REG_VT_SZ),$(ProductMinorVersion)}

	   ;
	   ; do nothing for the update
	   ;
	   Ifint $(Version) != $(ProductVersion)
	       ;
	       ; If the major version number is not the same,
	       ; it is major upgrade. So let's Upgrade the product
	       ;
	       ;
	       ; make other upgrade change if necessary
	       ;
	   Endif
	   CloseRegKey $(KeyProduct)
       else
	   ;
	   ; Cannot Open software key, goto ERROR
	   ;
	   Goto fatalregistry
       Endif
    else
	;
	; upgrade/update hardware component
	; There is no different between upgrade and update for hardware
	; component
	;
	; 1. Get the Service Name
	; 2. Change the NetRule section if necessary
	;
	OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_RegBase) +
	      $(MAXIMUM_ALLOWED) NetworkCardKey
	Ifstr(i) $(NetworkCardKey) != $(KeyNull)
	    ;
	    ; Get Service name
	    ;
	    GetRegValue $(NetworkCardKey),"ServiceName", ServiceNameInfo
	    set ServiceName = *($(ServiceNameInfo), 4)

	    ;
	    ; Change the NetRule if necessary
	    ;
	    OpenRegKey $(NetworkCardKey) "" "NetRules" +
		$(MAXIMUM_ALLOWED) NetRuleKey
	    Ifstr(i) $(NetRuleKey) != $(KeyNull)
		;
		; Make the change....
		;
	    else
		;
		; Error, cannot open net rules key
		;
		goto fatalregistry
	    endif

	    CloseRegKey $(NetRules)
	    CloseRegKey $(NetworkCardKey)
	else
	    ;
	    ; Error, cannot open network card key
	    ;
	    goto fatalregistry
	endif
	;
	; 3. Change the service section of the hardware. i.e.,
	;    ParameterName change, value change, etc.
	;
	OpenRegKey $(!REG_H_LOCAL) "" +
	      $(!NTN_ServiceBase)"\"$(ServiceName) +
	      $(MAXIMUM_ALLOWED) ServiceKey

	Ifstr(i) $(ServiceKey) != $(KeyNull)
	    ;
	    ; Get the ServiceKey to change the Start value
	    ; or Type value. Or open Parameters key to
	    ; change the hardware parameters if necessary.
	    ;
	    CloseRegKey $(ServiceKey)
	else
	    ;
	    ; Error, cannot open network card key
	    ;
	    goto fatalregistry
	Endif
    Endif

    Goto end
    ;
    ; End of Upgrade Software
    ;

;
;  Escape hatches
;
successful = +
    goto end

abandon = +
    ForListDo $(OEM_ABANDON_OPTIONS)
	Shell $(UtilityInf), RemoveHardwareComponent, $(Manufacturer), +
	    $(ProductSoftwareName), $($)
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
	    Debug-Output "INF: ShellCode error"
	    goto ShellCodeError
	endif

	set RegistryErrorIndex = $($R0)

	Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
	    goto fatalregistry
	endif
	;
	; TzdethNT: delete the COM port info in the SYSTEM\CurrentControlSet\Services\Serial\Parameters section of the registry
	;
	;Ifstr(i) $(Option) == OTCJODNT
		;OpenRegKey $(!REG_H_LOCAL) "" "SYSTEM\CurrentControlSet\Services\Serial\Parameters" $(MAXIMUM_ALLOWED) MyNewSerialHandle
		;DeleteRegTree $(MyNewSerialHandle) "SerialGenericJOD"
		;CloseRegKey $(MyNewSerialHandle)
		;
		;OpenRegKey $(!REG_H_LOCAL) "" "HARDWARE\DEVICEMAP\SERIALCOMM" $(MAXIMUM_ALLOWED) MyNewSerialHandle
		;DeleteRegValue $(MyNewSerialHandle) "SerialGenericJOD"
		;CloseRegKey $(MyNewSerialHandle)
	;Endif

    EndForListDo

    Ifstr(i) $(OEM_ABANDON_SOFTWARE) == TRUE
	; Remove Software Component
	Shell $(UtilityInf), RemoveSoftwareComponent, $(Manufacturer), +
	    $(ProductSoftwareName), FALSE
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
	    Debug-Output "INF: ShellCode error"
	    goto ShellCodeError
	endif

	set RegistryErrorIndex = $($R0)

	Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
	    goto fatalregistry
	endif
    endif

    goto end
;
; warning display
;
warning = +
    Shell $(SubroutnInf) SetupMessage, $(!STF_LANGUAGE), "WARNING", $(Error)
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
	goto ShellCodeError
    endif
    ifstr(i) $($R1) == "OK"
	goto $(to)
    else-ifstr(i) $($R1) == "CANCEL"
	goto $(from)
    else
	goto "end"
    endif
;
; non fatal error display
;
nonfatalinfo = +
    Set Severity = STATUS
    Set CommonStatus = STATUS_USERCANCEL
    goto nonfatalmsg
nonfatal = +
    Set Severity = NONFATAL
    goto nonfatalmsg
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 $(SubroutnInf) SetupMessage, $(!STF_LANGUAGE), $(Severity), $(Error)
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
	goto ShellCodeError
    endif
    ifstr(i) $($R1) == "OK"
	goto $(from)
    else
	goto end
    endif

;
;  Registry is broken
;
fatalregistry = +
    Shell $(UtilityInf) RegistryErrorString $(RegistryErrorIndex)
    Ifint $($ShellCode) != $(!SHELL_CODE_OK)
	goto ShellCodeError
    Endif
    set Error = $($R0)
    goto fatal

;
;  Netcard detection failure
;
fataldetect = +
    Shell $(UtilityInf),RegistryErrorString,CANNOT_DETECT
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
	Debug-Output "INF: ShellCode error: cannot get an error string."
	goto ShellCodeError
    endif
    set Error = $($R0)
    Goto fatal
;
; fatal error display
;
fatal = +
    ifstr(i) $(Error) == ""
	Shell $(UtilityInf) RegistryErrorString "SETUP_FAIL"
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
	    goto ShellCodeError
	endif
	set Error = $($R0)
    endif
    Shell $(SubroutnInf) SetupMessage, $(!STF_LANGUAGE), "FATAL", $(Error)
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
	goto ShellCodeError
    endif

    goto setfailed

;
;  Shelling error
;
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 = +
    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 = +
    goto term

term = +

    Return $(CommonStatus)

[DebugConfiguration]
    set InfName = "INF"
    Debug-Output $(InfName)": *** CONFIGURATION STATE: "$($0)
    Debug-Output $(InfName)": InterruptNumber is "$(!p:InterruptNumber)
    Debug-Output $(InfName)": IOBaseAddrValue is "$(!p:IOBaseAddrValue)
    Debug-Output $(InfName)": COMIoBaseAddrValue is "$(!p:COMIoBaseAddrValue)
    Debug-Output $(InfName)": COMInterruptNumber is "$(!p:COMInterruptNumber)
    Debug-Output $(InfName)": MemBaseAddrValue is "$(!p:MemBaseAddrValue)
    Debug-Output $(InfName)": MediaValue is "$(!p:MediaValue)
    return

[Install-Option]

    set ProCaption = $(!p:ProCaption)
    set ProCancel  = $(!p:ProCancel)
    set ProCancelMsg  = $(!p:ProCancelMsg)
    set ProCancelCap  = $(!p:ProCancelCap)
    set ProText1   = $(!p:ProText1)
    set ProText2   = $(!p:ProText2)

    set STF_VITAL  = ""

    Ifstr(i) $(AddCopy) == "YES"
	;
	; Add the files to the copy list
	;
	AddSectionFilesToCopyList Files-Detect $(SrcDir) $(!STF_WINDOWSSYSPATH)
	Ifstr(i) $(VerOO) == $(NT350VersionConst)
	  AddSectionFilesToCopyList Files-OtcjodNT3 $(SrcDir) $(!STF_WINDOWSSYSPATH)\drivers
	Else-Ifstr(i) $(VerOO) == $(NT351VersionConst)
	  AddSectionFilesToCopyList Files-OtcjodNT3 $(SrcDir) $(!STF_WINDOWSSYSPATH)\drivers
	Else
	  AddSectionFilesToCopyList Files-OtcjodNT4 $(SrcDir) $(!STF_WINDOWSSYSPATH)\drivers
	Endif
	AddSectionFilesToCopyList Files-Dll $(SrcDir) $(!STF_WINDOWSSYSPATH)
    Endif

    Ifstr(i) $(DoCopy) == "YES"
       ;
       ; Copy files in the copy list
       ;
       set !STF_NCPA_FLUSH_COPYLIST = $(!TRUE)
       CopyFilesInCopyList
    Endif

    Exit

[Install-Update]
   set STF_VITAL        = ""
   set STF_OVERWRITE    = "VERIFYSOURCEOLDER"
   ;set STF_VERSION     = "YES"

   AddSectionFilesToCopyList Files-Detect $(SrcDir) $(!STF_WINDOWSSYSPATH)
   Ifstr(i) $(VerOO) == $(NT350VersionConst)
     AddSectionFilesToCopyList Files-OtcjodNT3 $(SrcDir) $(!STF_WINDOWSSYSPATH)\drivers
   Else-Ifstr(i) $(VerOO) == $(NT351VersionConst)
     AddSectionFilesToCopyList Files-OtcjodNT3 $(SrcDir) $(!STF_WINDOWSSYSPATH)\drivers
   Else
     AddSectionFilesToCopyList Files-OtcjodNT4 $(SrcDir) $(!STF_WINDOWSSYSPATH)\drivers
   Endif
   AddSectionFilesToCopyList Files-Inf $(SrcDir) $(!STF_WINDOWSSYSPATH)
   AddSectionFilesToCopyList Files-Dll $(SrcDir) $(!STF_WINDOWSSYSPATH)

   set !STF_NCPA_FLUSH_COPYLIST = TRUE
   CopyFilesInCopyList
   
   Exit

[Install-Dll]
   set STF_VITAL        = ""

   AddSectionFilesToCopyList Files-Detect $(SrcDir) $(!STF_WINDOWSSYSPATH)
   AddSectionFilesToCopyList Files-Dll $(SrcDir) $(!STF_WINDOWSSYSPATH)

   set !STF_NCPA_FLUSH_COPYLIST = TRUE
   CopyFilesInCopyList

   Exit

[WarnError]
    read-syms FileConstants

    ifstr(i) $($0) == ""
	set Message = "Unknown Error"
    else
	set Message = $($0)
    endif

    Shell $(SubroutnInf) SetupMessage $(!STF_LANGUAGE) NONFATAL $(Message)

    Return
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.20