OEMSETUP.INF Driver File Contents (710disk2.exe)

; **********************************************************************
;
; OEMSETUP.INF
;
; Copyright (c) Madge Networks Ltd. 1997-2000
;
; VeRsIoN=Madge Smart Ringnode Miniport Driver NT Installation Script@
; VeRsIoN=VERSION: v6.04 LSS 7.1(0)@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
; VeRsIoN=PRODUCT-ID: MDGMPORT.SYS  6.04 @
; VeRsIoN=INFO: WINNT.TXT (Windows NT Installation)@
; MaDgE=EDCB@
;
;
; **********************************************************************
; ----------------------------------------------------------------------
; Mandatory configuration information.
; ----------------------------------------------------------------------
[Identification]
    OptionType = NetAdapter
[PlatformsSupported]
    ISA
    EISA
    PCI
    "Jazz-Internal Bus"
[LanguagesSupported]
    ENG
[Options]
    MDGAUTO
    MDGPCIHS2
    MDGPCIHS
    MDGPCI3
    MDGPCIBM2
    MDGPRESTO2000
    MDGPRESTO2
    MDGPRESTO
    MDGPCMCIA
    OCTX3540
    OCTX3139
    OCTX3140
    OCTX3140V2
    OCTX3141
    OCTX3137
    OCTX3221
;
; Options supported by LSS 5.02 which are also supported by this driver.
; Note that LSS 5.02 only provided and NDIS3 Miniport.
;
[LSS502_Options]
    MDGMPPCIBM
    MDGMPPCMCIA
;
; Unsupported options (MDGMP??? = LSS 5 option, MDG??? = LSS 6 option)
;
[Unsupported_Options]
    MDGMPATP
    MDGMPATPE
    MDGMPISACP
    MDGMPEISA
    MDGMPPNP
    MDGMPPCI
    MDGMPISA
    MDGMPISAC
    MDGMPPC
    MDGMPMCA
    MDGMPMC32
    MDGMPSM16
    MDGATP
    MDGATPNP
    MDGISACP
    MDGISACPNP
    MDGBLUEISA
    MDGBLUEPNP
    MDGEISA
    MDGPCI1B
    MDGPCIBM1
;-----------------------------------------------------------------------
; Text strings to identify adapter options.
;-----------------------------------------------------------------------
[OptionsTextENG]
    MDGAUTO       = "Madge Automated Installation - RECOMMENDED"
    MDGPCIHS2     = "Madge Smart 100/16/4 PCI Ringnode"
    MDGPCIHS      = "Madge Smart 100/16/4 PCI-HS Ringnode"
    MDGPCI3       = "Madge Smart 16/4 PCI Ringnode Mk3"
    MDGPCIBM2     = "Madge Smart 16/4 PCI Ringnode Mk2"
    MDGPRESTO2000 = "Madge Presto PCI 2000"
    MDGPRESTO2    = "Madge Presto PCI Plus"
    MDGPRESTO     = "Madge Presto PCI"
    MDGPCMCIA     = "Madge Smart 16/4 PCMCIA Ringnode"
    OCTX3540      = "Olicom RF-3540 HSTR 100/16/4 PCI Adapter"
    OCTX3139      = "Olicom RF-3139 Token-Ring 16/4 PCI Adapter"
    OCTX3140      = "Olicom RF-3140 Token-Ring 16/4 PCI Adapter"
    OCTX3140V2    = "Olicom RF-3140 V2 16/4 PCI Adapter"
    OCTX3141      = "Olicom RF-3141 Token-Ring 16/4 PCI Fiber Adapter"
    OCTX3137      = "Olicom PCI/II 16/4 Adapter (OC-3137)"
    OCTX3221      = "Olicom GoCard Token-Ring PC Card (OC-3221)"
;-----------------------------------------------------------------------
; Text strings to identify Madge adapters in a machine.
;-----------------------------------------------------------------------
[OptionsChoiceENG]
    MDGPCIHS2     = "Smart 100/16/4 PCI Ringnode / PCI device ID "
    MDGPCIHS      = "Smart 100/16/4 PCI-HS Ringnode / PCI device ID "
    MDGPCI3       = "Smart 16/4 PCI Ringnode Mk3 / PCI device ID "
    MDGPCIBM2     = "Smart 16/4 PCI Ringnode Mk2 / PCI device ID "
    MDGPRESTO2000 = "Presto PCI 2000 / PCI device ID "
    MDGPRESTO2    = "Presto PCI Plus / PCI device ID "
    MDGPRESTO     = "Presto PCI / PCI device ID "
    MDGPCMCIA     = "Smart 16/4 PCMCIA Ringnode / IO location "
    OCTX3540      = "RF-3540 HSTR 100/16/4 PCI Adapter / PCI device ID "
    OCTX3139      = "RF-3139 16/4 PCI Adapter / PCI device ID "
    OCTX3140      = "RF-3140 16/4 PCI Adapter / PCI device ID "
    OCTX3140V2    = "RF-3140 V2 16/4 PCI Adapter / PCI device ID "
    OCTX3141      = "RF-3141 16/4 PCI Fiber Adapter / PCI device ID "
    OCTX3137      = "OC-3137 16/4 PCI/II Adapter / PCI device ID "
    OCTX3221      = "GoCard 3221 PC Card / IO location "
;-----------------------------------------------------------------------
; Adapter options that require a slot number.
; Others require an IO location.
;-----------------------------------------------------------------------
[SlotNumberOnlyOptions]
    MDGPCIHS
    MDGPCIHS2
    OCTX3540
    MDGPCI3
    MDGPCIBM2
    MDGPRESTO2000
    MDGPRESTO2
    MDGPRESTO
    OCTX3139
    OCTX3140
    OCTX3140V2
    OCTX3141
    OCTX3137
;-----------------------------------------------------------------------
; Cardbus adapters.
;-----------------------------------------------------------------------
[CardbusOptions]
    MDGCARDBUS
    MDGCARDBUS2
    OCTX3250
;-----------------------------------------------------------------------
; PCMCIA adapters.
;-----------------------------------------------------------------------
[PcmciaOptions]
    MDGPCMCIA
    OCTX3221
[OlicomPcmciaOptions]
    OCTX3221
[OlicomHebeOptions]
    OCTX3139
    OCTX3140
    OCTX3140V2
    OCTX3141
    OCTX3540
    OCTX3250
; ----------------------------------------------------------------------
; Lists of user allowable locations.
; ----------------------------------------------------------------------
[MDGPCI3_LocChoices]
    "00",0
    "01",1
    "02",2
    "03",3
    "04",4
    "05",5
    "06",6
    "07",7
    "08",8
    "09",9
    "10",10
    "11",11
    "12",12
    "13",13
    "14",14
    "15",15
    "16",16
    "17",17
    "18",18
    "19",19
    "20",20
    "21",21
    "22",22
    "23",23
    "24",24
    "25",25
    "26",26
    "27",27
    "28",28
    "29",29
    "30",30
    "31",31
[MDGPCIBM2_LocChoices]
    "00",0
    "01",1
    "02",2
    "03",3
    "04",4
    "05",5
    "06",6
    "07",7
    "08",8
    "09",9
    "10",10
    "11",11
    "12",12
    "13",13
    "14",14
    "15",15
    "16",16
    "17",17
    "18",18
    "19",19
    "20",20
    "21",21
    "22",22
    "23",23
    "24",24
    "25",25
    "26",26
    "27",27
    "28",28
    "29",29
    "30",30
    "31",31
[MDGPCMCIA_LocChoices]
    "0x0300",768
    "0x0320",800
    "0x0340",832
    "0x0360",864
    "0x0920",2336
    "0x0940",2368
    "0x0960",2400
    "0x0980",2432
    "0x0A20",2592
    "0x0A40",2624
    "0x0A60",2656
    "0x0A80",2688
    "0x0AA0",2720
    "0x0B20",2848
    "0x0B40",2880
    "0x0B60",2912
    "0x0B80",2944
    "0x1A20",6688
    "0x2A20",10784
    "0x3A20",14880
[MDGPRESTO_LocChoices]
    "00",0
    "01",1
    "02",2
    "03",3
    "04",4
    "05",5
    "06",6
    "07",7
    "08",8
    "09",9
    "10",10
    "11",11
    "12",12
    "13",13
    "14",14
    "15",15
    "16",16
    "17",17
    "18",18
    "19",19
    "20",20
    "21",21
    "22",22
    "23",23
    "24",24
    "25",25
    "26",26
    "27",27
    "28",28
    "29",29
    "30",30
    "31",31
[MDGPRESTO2_LocChoices]
    "00",0
    "01",1
    "02",2
    "03",3
    "04",4
    "05",5
    "06",6
    "07",7
    "08",8
    "09",9
    "10",10
    "11",11
    "12",12
    "13",13
    "14",14
    "15",15
    "16",16
    "17",17
    "18",18
    "19",19
    "20",20
    "21",21
    "22",22
    "23",23
    "24",24
    "25",25
    "26",26
    "27",27
    "28",28
    "29",29
    "30",30
    "31",31
[MDGPRESTO2000_LocChoices]
    "00",0
    "01",1
    "02",2
    "03",3
    "04",4
    "05",5
    "06",6
    "07",7
    "08",8
    "09",9
    "10",10
    "11",11
    "12",12
    "13",13
    "14",14
    "15",15
    "16",16
    "17",17
    "18",18
    "19",19
    "20",20
    "21",21
    "22",22
    "23",23
    "24",24
    "25",25
    "26",26
    "27",27
    "28",28
    "29",29
    "30",30
    "31",31
[MDGCARDBUS_LocChoices]
    "Automatic",0
    "0x0100",256
    "0x0200",512
    "0x0300",768
    "0x0400",1024
    "0x0500",1280
    "0x0600",1536
    "0x0700",1792
    "0x0800",2048
    "0x0900",2304
    "0x0a00",2560
    "0x0b00",2816
    "0x0c00",3072
    "0x0d00",3328
    "0x0e00",3584
    "0x0f00",3840
    "0x1000",4096
    "0x1100",4352
    "0x1200",4608
    "0x1300",4864
    "0x1400",5120
    "0x1500",5376
    "0x1600",5632
    "0x1700",5888
    "0x1800",6144
    "0x1900",6400
    "0x1a00",6656
    "0x1b00",6912
    "0x1c00",7168
    "0x1d00",7424
    "0x1e00",7680
    "0x1f00",7936
    "0x2000",8192
    "0x2100",8448
    "0x2200",8704
    "0x2300",8960
    "0x2400",9216
    "0x2500",9472
    "0x2600",9728
    "0x2700",9984
    "0x2800",10240
    "0x2900",10496
    "0x2a00",10752
    "0x2b00",11008
    "0x2c00",11264
    "0x2d00",11520
    "0x2e00",11776
    "0x2f00",12032
    "0x3000",12288
    "0x3100",12544
    "0x3200",12800
    "0x3300",13056
    "0x3400",13312
    "0x3500",13568
    "0x3600",13824
    "0x3700",14080
    "0x3800",14336
    "0x3900",14592
    "0x3a00",14848
    "0x3b00",15104
    "0x3c00",15360
    "0x3d00",15616
    "0x3e00",15872
    "0x3f00",16128
    "0x4000",16384
    "0x4100",16640
    "0x4200",16896
    "0x4300",17152
    "0x4400",17408
    "0x4500",17664
    "0x4600",17920
    "0x4700",18176
    "0x4800",18432
    "0x4900",18688
    "0x4a00",18944
    "0x4b00",19200
    "0x4c00",19456
    "0x4d00",19712
    "0x4e00",19968
    "0x4f00",20224
    "0x5000",20480
    "0x5100",20736
    "0x5200",20992
    "0x5300",21248
    "0x5400",21504
    "0x5500",21760
    "0x5600",22016
    "0x5700",22272
    "0x5800",22528
    "0x5900",22784
    "0x5a00",23040
    "0x5b00",23296
    "0x5c00",23552
    "0x5d00",23808
    "0x5e00",24064
    "0x5f00",24320
    "0x6000",24576
    "0x6100",24832
    "0x6200",25088
    "0x6300",25344
    "0x6400",25600
    "0x6500",25856
    "0x6600",26112
    "0x6700",26368
    "0x6800",26624
    "0x6900",26880
    "0x6a00",27136
    "0x6b00",27392
    "0x6c00",27648
    "0x6d00",27904
    "0x6e00",28160
    "0x6f00",28416
    "0x7000",28672
    "0x7100",28928
    "0x7200",29184
    "0x7300",29440
    "0x7400",29696
    "0x7500",29952
    "0x7600",30208
    "0x7700",30464
    "0x7800",30720
    "0x7900",30976
    "0x7a00",31232
    "0x7b00",31488
    "0x7c00",31744
    "0x7d00",32000
    "0x7e00",32256
    "0x7f00",32512
    "0x8000",32768
    "0x8100",33024
    "0x8200",33280
    "0x8300",33536
    "0x8400",33792
    "0x8500",34048
    "0x8600",34304
    "0x8700",34560
    "0x8800",34816
    "0x8900",35072
    "0x8a00",35328
    "0x8b00",35584
    "0x8c00",35840
    "0x8d00",36096
    "0x8e00",36352
    "0x8f00",36608
    "0x9000",36864
    "0x9100",37120
    "0x9200",37376
    "0x9300",37632
    "0x9400",37888
    "0x9500",38144
    "0x9600",38400
    "0x9700",38656
    "0x9800",38912
    "0x9900",39168
    "0x9a00",39424
    "0x9b00",39680
    "0x9c00",39936
    "0x9d00",40192
    "0x9e00",40448
    "0x9f00",40704
    "0xa000",40960
    "0xa100",41216
    "0xa200",41472
    "0xa300",41728
    "0xa400",41984
    "0xa500",42240
    "0xa600",42496
    "0xa700",42752
    "0xa800",43008
    "0xa900",43264
    "0xaa00",43520
    "0xab00",43776
    "0xac00",44032
    "0xad00",44288
    "0xae00",44544
    "0xaf00",44800
    "0xb000",45056
    "0xb100",45312
    "0xb200",45568
    "0xb300",45824
    "0xb400",46080
    "0xb500",46336
    "0xb600",46592
    "0xb700",46848
    "0xb800",47104
    "0xb900",47360
    "0xba00",47616
    "0xbb00",47872
    "0xbc00",48128
    "0xbd00",48384
    "0xbe00",48640
    "0xbf00",48896
    "0xc000",49152
    "0xc100",49408
    "0xc200",49664
    "0xc300",49920
    "0xc400",50176
    "0xc500",50432
    "0xc600",50688
    "0xc700",50944
    "0xc800",51200
    "0xc900",51456
    "0xca00",51712
    "0xcb00",51968
    "0xcc00",52224
    "0xcd00",52480
    "0xce00",52736
    "0xcf00",52992
    "0xd000",53248
    "0xd100",53504
    "0xd200",53760
    "0xd300",54016
    "0xd400",54272
    "0xd500",54528
    "0xd600",54784
    "0xd700",55040
    "0xd800",55296
    "0xd900",55552
    "0xda00",55808
    "0xdb00",56064
    "0xdc00",56320
    "0xdd00",56576
    "0xde00",56832
    "0xdf00",57088
    "0xe000",57344
    "0xe100",57600
    "0xe200",57856
    "0xe300",58112
    "0xe400",58368
    "0xe500",58624
    "0xe600",58880
    "0xe700",59136
    "0xe800",59392
    "0xe900",59648
    "0xea00",59904
    "0xeb00",60160
    "0xec00",60416
    "0xed00",60672
    "0xee00",60928
    "0xef00",61184
    "0xf000",61440
    "0xf100",61696
    "0xf200",61952
    "0xf300",62208
    "0xf400",62464
    "0xf500",62720
    "0xf600",62976
    "0xf700",63232
    "0xf800",63488
    "0xf900",63744
    "0xfa00",64000
    "0xfb00",64256
    "0xfc00",64512
    "0xfd00",64768
    "0xfe00",65024
    "0xff00",65280
[MDGCARDBUS2_LocChoices]
    "Automatic",0
    "100",256
    "180",384
    "200",512
    "280",640
    "300",768
    "380",896
    "400",1024
    "480",1152
    "500",1280
    "580",1408
    "600",1536
    "680",1664
    "700",1792
    "780",1920
    "800",2048
    "880",2176
    "900",2304
    "980",2432
    "a00",2560
    "a80",2688
    "b00",2816
    "b80",2944
    "c00",3072
    "c80",3200
    "d00",3328
    "d80",3456
    "e00",3584
    "e80",3712
    "f00",3840
    "f80",3968
    "1000",4096
    "1080",4224
    "1100",4352
    "1180",4480
    "1200",4608
    "1280",4736
    "1300",4864
    "1380",4992
    "1400",5120
    "1480",5248
    "1500",5376
    "1580",5504
    "1600",5632
    "1680",5760
    "1700",5888
    "1780",6016
    "1800",6144
    "1880",6272
    "1900",6400
    "1980",6528
    "1a00",6656
    "1a80",6784
    "1b00",6912
    "1b80",7040
    "1c00",7168
    "1c80",7296
    "1d00",7424
    "1d80",7552
    "1e00",7680
    "1e80",7808
    "1f00",7936
    "1f80",8064
    "2000",8192
    "2080",8320
    "2100",8448
    "2180",8576
    "2200",8704
    "2280",8832
    "2300",8960
    "2380",9088
    "2400",9216
    "2480",9344
    "2500",9472
    "2580",9600
    "2600",9728
    "2680",9856
    "2700",9984
    "2780",10112
    "2800",10240
    "2880",10368
    "2900",10496
    "2980",10624
    "2a00",10752
    "2a80",10880
    "2b00",11008
    "2b80",11136
    "2c00",11264
    "2c80",11392
    "2d00",11520
    "2d80",11648
    "2e00",11776
    "2e80",11904
    "2f00",12032
    "2f80",12160
    "3000",12288
    "3080",12416
    "3100",12544
    "3180",12672
    "3200",12800
    "3280",12928
    "3300",13056
    "3380",13184
    "3400",13312
    "3480",13440
    "3500",13568
    "3580",13696
    "3600",13824
    "3680",13952
    "3700",14080
    "3780",14208
    "3800",14336
    "3880",14464
    "3900",14592
    "3980",14720
    "3a00",14848
    "3a80",14976
    "3b00",15104
    "3b80",15232
    "3c00",15360
    "3c80",15488
    "3d00",15616
    "3d80",15744
    "3e00",15872
    "3e80",16000
    "3f00",16128
    "3f80",16256
    "4000",16384
    "4080",16512
    "4100",16640
    "4180",16768
    "4200",16896
    "4280",17024
    "4300",17152
    "4380",17280
    "4400",17408
    "4480",17536
    "4500",17664
    "4580",17792
    "4600",17920
    "4680",18048
    "4700",18176
    "4780",18304
    "4800",18432
    "4880",18560
    "4900",18688
    "4980",18816
    "4a00",18944
    "4a80",19072
    "4b00",19200
    "4b80",19328
    "4c00",19456
    "4c80",19584
    "4d00",19712
    "4d80",19840
    "4e00",19968
    "4e80",20096
    "4f00",20224
    "4f80",20352
    "5000",20480
    "5080",20608
    "5100",20736
    "5180",20864
    "5200",20992
    "5280",21120
    "5300",21248
    "5380",21376
    "5400",21504
    "5480",21632
    "5500",21760
    "5580",21888
    "5600",22016
    "5680",22144
    "5700",22272
    "5780",22400
    "5800",22528
    "5880",22656
    "5900",22784
    "5980",22912
    "5a00",23040
    "5a80",23168
    "5b00",23296
    "5b80",23424
    "5c00",23552
    "5c80",23680
    "5d00",23808
    "5d80",23936
    "5e00",24064
    "5e80",24192
    "5f00",24320
    "5f80",24448
    "6000",24576
    "6080",24704
    "6100",24832
    "6180",24960
    "6200",25088
    "6280",25216
    "6300",25344
    "6380",25472
    "6400",25600
    "6480",25728
    "6500",25856
    "6580",25984
    "6600",26112
    "6680",26240
    "6700",26368
    "6780",26496
    "6800",26624
    "6880",26752
    "6900",26880
    "6980",27008
    "6a00",27136
    "6a80",27264
    "6b00",27392
    "6b80",27520
    "6c00",27648
    "6c80",27776
    "6d00",27904
    "6d80",28032
    "6e00",28160
    "6e80",28288
    "6f00",28416
    "6f80",28544
    "7000",28672
    "7080",28800
    "7100",28928
    "7180",29056
    "7200",29184
    "7280",29312
    "7300",29440
    "7380",29568
    "7400",29696
    "7480",29824
    "7500",29952
    "7580",30080
    "7600",30208
    "7680",30336
    "7700",30464
    "7780",30592
    "7800",30720
    "7880",30848
    "7900",30976
    "7980",31104
    "7a00",31232
    "7a80",31360
    "7b00",31488
    "7b80",31616
    "7c00",31744
    "7c80",31872
    "7d00",32000
    "7d80",32128
    "7e00",32256
    "7e80",32384
    "7f00",32512
    "7f80",32640
    "8000",32768
    "8080",32896
    "8100",33024
    "8180",33152
    "8200",33280
    "8280",33408
    "8300",33536
    "8380",33664
    "8400",33792
    "8480",33920
    "8500",34048
    "8580",34176
    "8600",34304
    "8680",34432
    "8700",34560
    "8780",34688
    "8800",34816
    "8880",34944
    "8900",35072
    "8980",35200
    "8a00",35328
    "8a80",35456
    "8b00",35584
    "8b80",35712
    "8c00",35840
    "8c80",35968
    "8d00",36096
    "8d80",36224
    "8e00",36352
    "8e80",36480
    "8f00",36608
    "8f80",36736
    "9000",36864
    "9080",36992
    "9100",37120
    "9180",37248
    "9200",37376
    "9280",37504
    "9300",37632
    "9380",37760
    "9400",37888
    "9480",38016
    "9500",38144
    "9580",38272
    "9600",38400
    "9680",38528
    "9700",38656
    "9780",38784
    "9800",38912
    "9880",39040
    "9900",39168
    "9980",39296
    "9a00",39424
    "9a80",39552
    "9b00",39680
    "9b80",39808
    "9c00",39936
    "9c80",40064
    "9d00",40192
    "9d80",40320
    "9e00",40448
    "9e80",40576
    "9f00",40704
    "9f80",40832
    "a000",40960
    "a080",41088
    "a100",41216
    "a180",41344
    "a200",41472
    "a280",41600
    "a300",41728
    "a380",41856
    "a400",41984
    "a480",42112
    "a500",42240
    "a580",42368
    "a600",42496
    "a680",42624
    "a700",42752
    "a780",42880
    "a800",43008
    "a880",43136
    "a900",43264
    "a980",43392
    "aa00",43520
    "aa80",43648
    "ab00",43776
    "ab80",43904
    "ac00",44032
    "ac80",44160
    "ad00",44288
    "ad80",44416
    "ae00",44544
    "ae80",44672
    "af00",44800
    "af80",44928
    "b000",45056
    "b080",45184
    "b100",45312
    "b180",45440
    "b200",45568
    "b280",45696
    "b300",45824
    "b380",45952
    "b400",46080
    "b480",46208
    "b500",46336
    "b580",46464
    "b600",46592
    "b680",46720
    "b700",46848
    "b780",46976
    "b800",47104
    "b880",47232
    "b900",47360
    "b980",47488
    "ba00",47616
    "ba80",47744
    "bb00",47872
    "bb80",48000
    "bc00",48128
    "bc80",48256
    "bd00",48384
    "bd80",48512
    "be00",48640
    "be80",48768
    "bf00",48896
    "bf80",49024
    "c000",49152
    "c080",49280
    "c100",49408
    "c180",49536
    "c200",49664
    "c280",49792
    "c300",49920
    "c380",50048
    "c400",50176
    "c480",50304
    "c500",50432
    "c580",50560
    "c600",50688
    "c680",50816
    "c700",50944
    "c780",51072
    "c800",51200
    "c880",51328
    "c900",51456
    "c980",51584
    "ca00",51712
    "ca80",51840
    "cb00",51968
    "cb80",52096
    "cc00",52224
    "cc80",52352
    "cd00",52480
    "cd80",52608
    "ce00",52736
    "ce80",52864
    "cf00",52992
    "cf80",53120
    "d000",53248
    "d080",53376
    "d100",53504
    "d180",53632
    "d200",53760
    "d280",53888
    "d300",54016
    "d380",54144
    "d400",54272
    "d480",54400
    "d500",54528
    "d580",54656
    "d600",54784
    "d680",54912
    "d700",55040
    "d780",55168
    "d800",55296
    "d880",55424
    "d900",55552
    "d980",55680
    "da00",55808
    "da80",55936
    "db00",56064
    "db80",56192
    "dc00",56320
    "dc80",56448
    "dd00",56576
    "dd80",56704
    "de00",56832
    "de80",56960
    "df00",57088
    "df80",57216
    "e000",57344
    "e080",57472
    "e100",57600
    "e180",57728
    "e200",57856
    "e280",57984
    "e300",58112
    "e380",58240
    "e400",58368
    "e480",58496
    "e500",58624
    "e580",58752
    "e600",58880
    "e680",59008
    "e700",59136
    "e780",59264
    "e800",59392
    "e880",59520
    "e900",59648
    "e980",59776
    "ea00",59904
    "ea80",60032
    "eb00",60160
    "eb80",60288
    "ec00",60416
    "ec80",60544
    "ed00",60672
    "ed80",60800
    "ee00",60928
    "ee80",61056
    "ef00",61184
    "ef80",61312
    "f000",61440
    "f080",61568
    "f100",61696
    "f180",61824
    "f200",61952
    "f280",62080
    "f300",62208
    "f380",62336
    "f400",62464
    "f480",62592
    "f500",62720
    "f580",62848
    "f600",62976
    "f680",63104
    "f700",63232
    "f780",63360
    "f800",63488
    "f880",63616
    "f900",63744
    "f980",63872
    "fa00",64000
    "fa80",64128
    "fb00",64256
    "fb80",64384
    "fc00",64512
    "fc80",64640
    "fd00",64768
    "fd80",64896
    "fe00",65024
    "fe80",65152
    "ff00",65280
    "ff80",65408
[MDGPCIHS_LocChoices]
    "00",0
    "01",1
    "02",2
    "03",3
    "04",4
    "05",5
    "06",6
    "07",7
    "08",8
    "09",9
    "10",10
    "11",11
    "12",12
    "13",13
    "14",14
    "15",15
    "16",16
    "17",17
    "18",18
    "19",19
    "20",20
    "21",21
    "22",22
    "23",23
    "24",24
    "25",25
    "26",26
    "27",27
    "28",28
    "29",29
    "30",30
    "31",31
[MDGPCIHS2_LocChoices]
    "00",0
    "01",1
    "02",2
    "03",3
    "04",4
    "05",5
    "06",6
    "07",7
    "08",8
    "09",9
    "10",10
    "11",11
    "12",12
    "13",13
    "14",14
    "15",15
    "16",16
    "17",17
    "18",18
    "19",19
    "20",20
    "21",21
    "22",22
    "23",23
    "24",24
    "25",25
    "26",26
    "27",27
    "28",28
    "29",29
    "30",30
    "31",31
[OCTX3540_LocChoices]
    "00",0
    "01",1
    "02",2
    "03",3
    "04",4
    "05",5
    "06",6
    "07",7
    "08",8
    "09",9
    "10",10
    "11",11
    "12",12
    "13",13
    "14",14
    "15",15
    "16",16
    "17",17
    "18",18
    "19",19
    "20",20
    "21",21
    "22",22
    "23",23
    "24",24
    "25",25
    "26",26
    "27",27
    "28",28
    "29",29
    "30",30
    "31",31
[OCTX3139_LocChoices]
    "00",0
    "01",1
    "02",2
    "03",3
    "04",4
    "05",5
    "06",6
    "07",7
    "08",8
    "09",9
    "10",10
    "11",11
    "12",12
    "13",13
    "14",14
    "15",15
    "16",16
    "17",17
    "18",18
    "19",19
    "20",20
    "21",21
    "22",22
    "23",23
    "24",24
    "25",25
    "26",26
    "27",27
    "28",28
    "29",29
    "30",30
    "31",31
[OCTX3140_LocChoices]
    "00",0
    "01",1
    "02",2
    "03",3
    "04",4
    "05",5
    "06",6
    "07",7
    "08",8
    "09",9
    "10",10
    "11",11
    "12",12
    "13",13
    "14",14
    "15",15
    "16",16
    "17",17
    "18",18
    "19",19
    "20",20
    "21",21
    "22",22
    "23",23
    "24",24
    "25",25
    "26",26
    "27",27
    "28",28
    "29",29
    "30",30
    "31",31
[OCTX3140V2_LocChoices]
    "00",0
    "01",1
    "02",2
    "03",3
    "04",4
    "05",5
    "06",6
    "07",7
    "08",8
    "09",9
    "10",10
    "11",11
    "12",12
    "13",13
    "14",14
    "15",15
    "16",16
    "17",17
    "18",18
    "19",19
    "20",20
    "21",21
    "22",22
    "23",23
    "24",24
    "25",25
    "26",26
    "27",27
    "28",28
    "29",29
    "30",30
    "31",31
[OCTX3141_LocChoices]
    "00",0
    "01",1
    "02",2
    "03",3
    "04",4
    "05",5
    "06",6
    "07",7
    "08",8
    "09",9
    "10",10
    "11",11
    "12",12
    "13",13
    "14",14
    "15",15
    "16",16
    "17",17
    "18",18
    "19",19
    "20",20
    "21",21
    "22",22
    "23",23
    "24",24
    "25",25
    "26",26
    "27",27
    "28",28
    "29",29
    "30",30
    "31",31
[OCTX3137_LocChoices]
    "00",0
    "01",1
    "02",2
    "03",3
    "04",4
    "05",5
    "06",6
    "07",7
    "08",8
    "09",9
    "10",10
    "11",11
    "12",12
    "13",13
    "14",14
    "15",15
    "16",16
    "17",17
    "18",18
    "19",19
    "20",20
    "21",21
    "22",22
    "23",23
    "24",24
    "25",25
    "26",26
    "27",27
    "28",28
    "29",29
    "30",30
    "31",31
[OCTX3221_LocChoices]
    "0x0200",512
    "0x0220",544
    "0x0240",576
    "0x0260",608
    "0x0300",768
    "0x0320",800
    "0x0340",832
    "0x0360",864
    "0x0A00",2560
    "0x0A20",2592
    "0x0A40",2624
    "0x0A60",2656
    "0x0A80",2688
    "0x0AC0",2752
    "0x0B00",2816
    "0x0B40",2880
    "0x0B80",2944
[OCTX3250_LocChoices]
    "Automatic",0
    "100",256
    "180",384
    "200",512
    "280",640
    "300",768
    "380",896
    "400",1024
    "480",1152
    "500",1280
    "580",1408
    "600",1536
    "680",1664
    "700",1792
    "780",1920
    "800",2048
    "880",2176
    "900",2304
    "980",2432
    "a00",2560
    "a80",2688
    "b00",2816
    "b80",2944
    "c00",3072
    "c80",3200
    "d00",3328
    "d80",3456
    "e00",3584
    "e80",3712
    "f00",3840
    "f80",3968
    "1000",4096
    "1080",4224
    "1100",4352
    "1180",4480
    "1200",4608
    "1280",4736
    "1300",4864
    "1380",4992
    "1400",5120
    "1480",5248
    "1500",5376
    "1580",5504
    "1600",5632
    "1680",5760
    "1700",5888
    "1780",6016
    "1800",6144
    "1880",6272
    "1900",6400
    "1980",6528
    "1a00",6656
    "1a80",6784
    "1b00",6912
    "1b80",7040
    "1c00",7168
    "1c80",7296
    "1d00",7424
    "1d80",7552
    "1e00",7680
    "1e80",7808
    "1f00",7936
    "1f80",8064
    "2000",8192
    "2080",8320
    "2100",8448
    "2180",8576
    "2200",8704
    "2280",8832
    "2300",8960
    "2380",9088
    "2400",9216
    "2480",9344
    "2500",9472
    "2580",9600
    "2600",9728
    "2680",9856
    "2700",9984
    "2780",10112
    "2800",10240
    "2880",10368
    "2900",10496
    "2980",10624
    "2a00",10752
    "2a80",10880
    "2b00",11008
    "2b80",11136
    "2c00",11264
    "2c80",11392
    "2d00",11520
    "2d80",11648
    "2e00",11776
    "2e80",11904
    "2f00",12032
    "2f80",12160
    "3000",12288
    "3080",12416
    "3100",12544
    "3180",12672
    "3200",12800
    "3280",12928
    "3300",13056
    "3380",13184
    "3400",13312
    "3480",13440
    "3500",13568
    "3580",13696
    "3600",13824
    "3680",13952
    "3700",14080
    "3780",14208
    "3800",14336
    "3880",14464
    "3900",14592
    "3980",14720
    "3a00",14848
    "3a80",14976
    "3b00",15104
    "3b80",15232
    "3c00",15360
    "3c80",15488
    "3d00",15616
    "3d80",15744
    "3e00",15872
    "3e80",16000
    "3f00",16128
    "3f80",16256
    "4000",16384
    "4080",16512
    "4100",16640
    "4180",16768
    "4200",16896
    "4280",17024
    "4300",17152
    "4380",17280
    "4400",17408
    "4480",17536
    "4500",17664
    "4580",17792
    "4600",17920
    "4680",18048
    "4700",18176
    "4780",18304
    "4800",18432
    "4880",18560
    "4900",18688
    "4980",18816
    "4a00",18944
    "4a80",19072
    "4b00",19200
    "4b80",19328
    "4c00",19456
    "4c80",19584
    "4d00",19712
    "4d80",19840
    "4e00",19968
    "4e80",20096
    "4f00",20224
    "4f80",20352
    "5000",20480
    "5080",20608
    "5100",20736
    "5180",20864
    "5200",20992
    "5280",21120
    "5300",21248
    "5380",21376
    "5400",21504
    "5480",21632
    "5500",21760
    "5580",21888
    "5600",22016
    "5680",22144
    "5700",22272
    "5780",22400
    "5800",22528
    "5880",22656
    "5900",22784
    "5980",22912
    "5a00",23040
    "5a80",23168
    "5b00",23296
    "5b80",23424
    "5c00",23552
    "5c80",23680
    "5d00",23808
    "5d80",23936
    "5e00",24064
    "5e80",24192
    "5f00",24320
    "5f80",24448
    "6000",24576
    "6080",24704
    "6100",24832
    "6180",24960
    "6200",25088
    "6280",25216
    "6300",25344
    "6380",25472
    "6400",25600
    "6480",25728
    "6500",25856
    "6580",25984
    "6600",26112
    "6680",26240
    "6700",26368
    "6780",26496
    "6800",26624
    "6880",26752
    "6900",26880
    "6980",27008
    "6a00",27136
    "6a80",27264
    "6b00",27392
    "6b80",27520
    "6c00",27648
    "6c80",27776
    "6d00",27904
    "6d80",28032
    "6e00",28160
    "6e80",28288
    "6f00",28416
    "6f80",28544
    "7000",28672
    "7080",28800
    "7100",28928
    "7180",29056
    "7200",29184
    "7280",29312
    "7300",29440
    "7380",29568
    "7400",29696
    "7480",29824
    "7500",29952
    "7580",30080
    "7600",30208
    "7680",30336
    "7700",30464
    "7780",30592
    "7800",30720
    "7880",30848
    "7900",30976
    "7980",31104
    "7a00",31232
    "7a80",31360
    "7b00",31488
    "7b80",31616
    "7c00",31744
    "7c80",31872
    "7d00",32000
    "7d80",32128
    "7e00",32256
    "7e80",32384
    "7f00",32512
    "7f80",32640
    "8000",32768
    "8080",32896
    "8100",33024
    "8180",33152
    "8200",33280
    "8280",33408
    "8300",33536
    "8380",33664
    "8400",33792
    "8480",33920
    "8500",34048
    "8580",34176
    "8600",34304
    "8680",34432
    "8700",34560
    "8780",34688
    "8800",34816
    "8880",34944
    "8900",35072
    "8980",35200
    "8a00",35328
    "8a80",35456
    "8b00",35584
    "8b80",35712
    "8c00",35840
    "8c80",35968
    "8d00",36096
    "8d80",36224
    "8e00",36352
    "8e80",36480
    "8f00",36608
    "8f80",36736
    "9000",36864
    "9080",36992
    "9100",37120
    "9180",37248
    "9200",37376
    "9280",37504
    "9300",37632
    "9380",37760
    "9400",37888
    "9480",38016
    "9500",38144
    "9580",38272
    "9600",38400
    "9680",38528
    "9700",38656
    "9780",38784
    "9800",38912
    "9880",39040
    "9900",39168
    "9980",39296
    "9a00",39424
    "9a80",39552
    "9b00",39680
    "9b80",39808
    "9c00",39936
    "9c80",40064
    "9d00",40192
    "9d80",40320
    "9e00",40448
    "9e80",40576
    "9f00",40704
    "9f80",40832
    "a000",40960
    "a080",41088
    "a100",41216
    "a180",41344
    "a200",41472
    "a280",41600
    "a300",41728
    "a380",41856
    "a400",41984
    "a480",42112
    "a500",42240
    "a580",42368
    "a600",42496
    "a680",42624
    "a700",42752
    "a780",42880
    "a800",43008
    "a880",43136
    "a900",43264
    "a980",43392
    "aa00",43520
    "aa80",43648
    "ab00",43776
    "ab80",43904
    "ac00",44032
    "ac80",44160
    "ad00",44288
    "ad80",44416
    "ae00",44544
    "ae80",44672
    "af00",44800
    "af80",44928
    "b000",45056
    "b080",45184
    "b100",45312
    "b180",45440
    "b200",45568
    "b280",45696
    "b300",45824
    "b380",45952
    "b400",46080
    "b480",46208
    "b500",46336
    "b580",46464
    "b600",46592
    "b680",46720
    "b700",46848
    "b780",46976
    "b800",47104
    "b880",47232
    "b900",47360
    "b980",47488
    "ba00",47616
    "ba80",47744
    "bb00",47872
    "bb80",48000
    "bc00",48128
    "bc80",48256
    "bd00",48384
    "bd80",48512
    "be00",48640
    "be80",48768
    "bf00",48896
    "bf80",49024
    "c000",49152
    "c080",49280
    "c100",49408
    "c180",49536
    "c200",49664
    "c280",49792
    "c300",49920
    "c380",50048
    "c400",50176
    "c480",50304
    "c500",50432
    "c580",50560
    "c600",50688
    "c680",50816
    "c700",50944
    "c780",51072
    "c800",51200
    "c880",51328
    "c900",51456
    "c980",51584
    "ca00",51712
    "ca80",51840
    "cb00",51968
    "cb80",52096
    "cc00",52224
    "cc80",52352
    "cd00",52480
    "cd80",52608
    "ce00",52736
    "ce80",52864
    "cf00",52992
    "cf80",53120
    "d000",53248
    "d080",53376
    "d100",53504
    "d180",53632
    "d200",53760
    "d280",53888
    "d300",54016
    "d380",54144
    "d400",54272
    "d480",54400
    "d500",54528
    "d580",54656
    "d600",54784
    "d680",54912
    "d700",55040
    "d780",55168
    "d800",55296
    "d880",55424
    "d900",55552
    "d980",55680
    "da00",55808
    "da80",55936
    "db00",56064
    "db80",56192
    "dc00",56320
    "dc80",56448
    "dd00",56576
    "dd80",56704
    "de00",56832
    "de80",56960
    "df00",57088
    "df80",57216
    "e000",57344
    "e080",57472
    "e100",57600
    "e180",57728
    "e200",57856
    "e280",57984
    "e300",58112
    "e380",58240
    "e400",58368
    "e480",58496
    "e500",58624
    "e580",58752
    "e600",58880
    "e680",59008
    "e700",59136
    "e780",59264
    "e800",59392
    "e880",59520
    "e900",59648
    "e980",59776
    "ea00",59904
    "ea80",60032
    "eb00",60160
    "eb80",60288
    "ec00",60416
    "ec80",60544
    "ed00",60672
    "ed80",60800
    "ee00",60928
    "ee80",61056
    "ef00",61184
    "ef80",61312
    "f000",61440
    "f080",61568
    "f100",61696
    "f180",61824
    "f200",61952
    "f280",62080
    "f300",62208
    "f380",62336
    "f400",62464
    "f480",62592
    "f500",62720
    "f580",62848
    "f600",62976
    "f680",63104
    "f700",63232
    "f780",63360
    "f800",63488
    "f880",63616
    "f900",63744
    "f980",63872
    "fa00",64000
    "fa80",64128
    "fb00",64256
    "fb80",64384
    "fc00",64512
    "fc80",64640
    "fd00",64768
    "fd80",64896
    "fe00",65024
    "fe80",65152
    "ff00",65280
    "ff80",65408
; ----------------------------------------------------------------------
; Lists of user selectable interrupts.
; ----------------------------------------------------------------------
[MDGPCIBM2_IrqChoices]
    "Automatic",0
[MDGPCI3_IrqChoices]
    "Automatic",0
[MDGPRESTO_IrqChoices]
    "Automatic",0
[MDGPRESTO2_IrqChoices]
    "Automatic",0
[MDGPRESTO2000_IrqChoices]
    "Automatic",0
[MDGPCMCIA_IrqChoices]
    "1",1
    "2",2
    "3",3
    "4",4
    "5",5
    "6",6
    "7",7
    "8",8
    "9",9
    "10",10
    "11",11
    "12",12
    "13",13
    "14",14
    "15",15
[MDGCARDBUS_IrqChoices]
    "Automatic",0
    "1",1
    "2",2
    "3",3
    "4",4
    "5",5
    "6",6
    "7",7
    "8",8
    "9",9
    "10",10
    "11",11
    "12",12
    "13",13
    "14",14
    "15",15
[MDGCARDBUS2_IrqChoices]
    "Automatic",0
    "1",1
    "2",2
    "3",3
    "4",4
    "5",5
    "6",6
    "7",7
    "8",8
    "9",9
    "10",10
    "11",11
    "12",12
    "13",13
    "14",14
    "15",15
[MDGPCIHS_IrqChoices]
    "Automatic",0
[MDGPCIHS2_IrqChoices]
    "Automatic",0
[OCTX3540_IrqChoices]
    "Automatic",0
[OCTX3139_IrqChoices]
    "Automatic",0
[OCTX3140_IrqChoices]
    "Automatic",0
[OCTX3140V2_IrqChoices]
    "Automatic",0
[OCTX3141_IrqChoices]
    "Automatic",0
[OCTX3137_IrqChoices]
    "Automatic",0
[OCTX3221_IrqChoices]
    "1",1
    "2",2
    "3",3
    "4",4
    "5",5
    "6",6
    "7",7
    "8",8
    "9",9
    "10",10
    "11",11
    "12",12
    "13",13
    "14",14
    "15",15
[OCTX3250_IrqChoices]
    "Automatic",0
    "1",1
    "2",2
    "3",3
    "4",4
    "5",5
    "6",6
    "7",7
    "8",8
    "9",9
    "10",10
    "11",11
    "12",12
    "13",13
    "14",14
    "15",15
; ----------------------------------------------------------------------
; Lists of user selectable DMA channels.
; ----------------------------------------------------------------------
[MDGPCI3_DmaChoices]
    "Unused",0
[MDGPCIBM2_DmaChoices]
    "Unused",0
[MDGPRESTO_DmaChoices]
    "Unused",0
[MDGPRESTO2_DmaChoices]
    "Unused",0
[MDGPRESTO2000_DmaChoices]
    "Unused",0
[MDGPCMCIA_DmaChoices]
    "Unused",0
[MDGCARDBUS_DmaChoices]
    "Unused",0
[MDGCARDBUS2_DmaChoices]
    "Unused",0
[MDGPCIHS_DmaChoices]
    "Unused",0
[MDGPCIHS2_DmaChoices]
    "Unused",0
[OCTX3540_DmaChoices]
    "Unused",0
[OCTX3139_DmaChoices]
    "Unused",0
[OCTX3140_DmaChoices]
    "Unused",0
[OCTX3140V2_DmaChoices]
    "Unused",0
[OCTX3141_DmaChoices]
    "Unused",0
[OCTX3137_DmaChoices]
    "Unused",0
[OCTX3221_DmaChoices]
    "Unused",0
[OCTX3250_DmaChoices]
    "Unused",0
; ----------------------------------------------------------------------
; Lists of user selectable transfer modes.
; ----------------------------------------------------------------------
[MDGPCIBM2_TransferChoices]
    "Default",0
    "16Bit PIO",1
[MDGPCI3_TransferChoices]
    "Default",0
[MDGPRESTO_TransferChoices]
    "Default",0
[MDGPRESTO2_TransferChoices]
    "Default",0
[MDGPRESTO2000_TransferChoices]
    "Default",0
[MDGPCMCIA_TransferChoices]
    "Default",0
    "16Bit PIO",1
[MDGCARDBUS_TransferChoices]
    "Default",0
    "16Bit PIO",1
[MDGCARDBUS2_TransferChoices]
    "Default",0
[MDGPCIHS_TransferChoices]
    "Default",0
[MDGPCIHS2_TransferChoices]
    "Default",0
[OCTX3540_TransferChoices]
    "Default",0
[OCTX3139_TransferChoices]
    "Default",0
[OCTX3140_TransferChoices]
    "Default",0
[OCTX3140V2_TransferChoices]
    "Default",0
[OCTX3141_TransferChoices]
    "Default",0
[OCTX3137_TransferChoices]
    "Default",0
    "16Bit PIO",1
[OCTX3221_TransferChoices]
    "Default",0
[OCTX3250_TransferChoices]
    "Default",0
; ----------------------------------------------------------------------
; Lists of user selectable transfer ring speeds.
; ----------------------------------------------------------------------
[MDGPCIBM2_SpeedChoices]
    "Set at adapter",1
    "Force 4 MBit/s",2
    "Force 16 MBit/s",3
[MDGPCI3_SpeedChoices]
    "Set at adapter",1
    "Force 4 MBit/s",2
    "Force 16 MBit/s",3
[MDGPRESTO_SpeedChoices]
    "Set at adapter",1
    "Force 4 MBit/s",2
    "Force 16 MBit/s",3
[MDGPRESTO2_SpeedChoices]
    "Set at adapter",1
    "Force 4 MBit/s",2
    "Force 16 MBit/s",3
[MDGPRESTO2000_SpeedChoices]
    "Set at adapter",1
    "Force 4 MBit/s",2
    "Force 16 MBit/s",3
[MDGCARDBUS_SpeedChoices]
    "Set at adapter",1
    "Force 4 MBit/s",2
    "Force 16 MBit/s",3
[MDGCARDBUS2_SpeedChoices]
    "Set at adapter",1
    "Force 4 MBit/s",2
    "Force 16 MBit/s",3
[MDGPCMCIA_SpeedChoices]
    "Set at adapter",1
    "Force 4 MBit/s",2
    "Force 16 MBit/s",3
[MDGPCIHS_SpeedChoices]
    "Set at adapter",1
    "Force 4 MBit/s",2
    "Force 16 MBit/s",3
    "Force 100 MBit/s",4
[MDGPCIHS2_SpeedChoices]
    "Set at adapter",1
    "Force 4 MBit/s",2
    "Force 16 MBit/s",3
    "Force 100 MBit/s",4
[OCTX3540_SpeedChoices]
    "Set at adapter",1
    "Force 4 MBit/s",2
    "Force 16 MBit/s",3
    "Force 100 MBit/s",4
[OCTX3139_SpeedChoices]
    "Set at adapter",1
    "Force 4 MBit/s",2
    "Force 16 MBit/s",3
[OCTX3140_SpeedChoices]
    "Set at adapter",1
    "Force 4 MBit/s",2
    "Force 16 MBit/s",3
[OCTX3140V2_SpeedChoices]
    "Set at adapter",1
    "Force 4 MBit/s",2
    "Force 16 MBit/s",3
[OCTX3141_SpeedChoices]
    "Set at adapter",1
    "Force 4 MBit/s",2
    "Force 16 MBit/s",3
[OCTX3137_SpeedChoices]
    "Set at adapter",1
    "Force 4 MBit/s",2
    "Force 16 MBit/s",3
[OCTX3221_SpeedChoices]
    "Set at adapter",1
    "Force 4 MBit/s",2
    "Force 16 MBit/s",3
[OCTX3250_SpeedChoices]
    "Set at adapter",1
    "Force 4 MBit/s",2
    "Force 16 MBit/s",3
; ----------------------------------------------------------------------
; Lists of user selectable stats gathering modes.
; ----------------------------------------------------------------------
[MDGPCIBM2_StatsChoices]
    "Disabled",0
    "Enabled",1
[MDGPCI3_StatsChoices]
    "Disabled",0
    "Enabled",1
[MDGPRESTO_StatsChoices]
    "Not supported",0
[MDGPRESTO2_StatsChoices]
    "Not supported",0
[MDGPRESTO2000_StatsChoices]
    "Disabled",0
    "Enabled",1
[MDGPCMCIA_StatsChoices]
    "Disabled",0
    "Enabled",1
[MDGCARDBUS_StatsChoices]
    "Disabled",0
    "Enabled",1
[MDGCARDBUS2_StatsChoices]
    "Disabled",0
    "Enabled",1
[MDGPCIHS_StatsChoices]
    "Disabled",0
    "Enabled",1
[MDGPCIHS2_StatsChoices]
    "Disabled",0
    "Enabled",1
[OCTX3540_StatsChoices]
    "Disabled",0
    "Enabled",1
[OCTX3139_StatsChoices]
    "Disabled",0
    "Enabled",1
[OCTX3140_StatsChoices]
    "Disabled",0
    "Enabled",1
[OCTX3140V2_StatsChoices]
    "Disabled",0
    "Enabled",1
[OCTX3141_StatsChoices]
    "Disabled",0
    "Enabled",1
[OCTX3137_StatsChoices]
    "Disabled",0
    "Enabled",1
[OCTX3221_StatsChoices]
    "Disabled",0
    "Enabled",1
[OCTX3250_StatsChoices]
    "Disabled",0
    "Enabled",1
; ----------------------------------------------------------------------
; Lists of user selectable Wake-On-LAN modes.
; ----------------------------------------------------------------------
[MDGPCIBM2_WolChoices]
    "Not supported",0
[MDGPCI3_WolChoices]
    "Disabled",0
    "Enabled",1
    "Enabled/PME",2
[MDGPRESTO_WolChoices]
    "Not supported",0
[MDGPRESTO2_WolChoices]
    "Not supported",0
[MDGPRESTO2000_WolChoices]
    "Disabled",0
    "Enabled",1
    "Enabled/PME",2
[MDGPCMCIA_WolChoices]
    "Not supported",0
[MDGCARDBUS_WolChoices]
    "Not supported",0
[MDGCARDBUS2_WolChoices]
    "Not supported",0
[MDGPCIHS_WolChoices]
    "Disabled",0
    "Enabled",1
    "Enabled/PME",2
[MDGPCIHS2_WolChoices]
    "Disabled",0
    "Enabled",1
    "Enabled/PME",2
[OCTX3540_WolChoices]
    "Disabled",0
    "Enabled",1
    "Enabled/PME",2
[OCTX3139_WolChoices]
    "Disabled",0
    "Enabled",1
    "Enabled/PME",2
[OCTX3140_WolChoices]
    "Disabled",0
    "Enabled",1
    "Enabled/PME",2
[OCTX3140V2_WolChoices]
    "Disabled",0
    "Enabled",1
    "Enabled/PME",2
[OCTX3141_WolChoices]
    "Disabled",0
    "Enabled",1
    "Enabled/PME",2
[OCTX3137_WolChoices]
    "Not supported",0
[OCTX3221_WolChoices]
    "Not supported",0
[OCTX3250_WolChoices]
    "Not supported",0
; ---------------------------------------------------------------------
; Lists for parameters that are not adapter type dependant.
; ---------------------------------------------------------------------
[SlotsChoices]
    "Default",0
    "01",1
    "02",2
    "03",3
    "04",4
    "06",6
    "08",8
    "10",10
    "12",12
    "14",14
    "16",16
    "18",18
    "20",20
    "22",22
    "24",24
    "26",26
    "28",28
    "30",30
    "32",32
    "48",48
    "64",64
[SwitchChoices]
    "Disabled",0
    "Enabled",1
[QuietChoices]
    "Disabled",0
    "Enabled",1
    "Enabled (reconnect)",2
[MacOpenChoices]
    "Force Classic",1
    "Force Full Duplex",2
    "Default",3
[WatchdogChoices]
    "Disabled",0
    "05 seconds",5
    "10 seconds",10
    "15 seconds",15
    "20 seconds",20
    "30 seconds",30
    "45 seconds",45
    "60 seconds",60
[DisabledOnlyChoices]
    "Disabled",0
[PcmciaMemWinChoices]
    "0xD0000", 851968
    "0xD2000", 860160
    "0xD4000", 868352
    "0xD6000", 876544
    "0xD8000", 884736
    "0xDA000", 892928
    "0xDC000", 901120
    "0xDE000", 909312
    "0xC0000", 786432
    "0xC2000", 794624
    "0xC4000", 802816
    "0xC6000", 811008
    "0xC8000", 819200
    "0xCA000", 827392
    "0xCC000", 835584
    "0xCE000", 843776
; ----------------------------------------------------------------------
; Constants used in the mapping of LSS5 drivers to LSS6 drivers
; ----------------------------------------------------------------------
[MappingConstants]
;
; Adapter Name Map.
;
MAP_MDGMPATP    = "MDGATP"
MAP_MDGMPATPE   = "MDGATPNP"
MAP_MDGMPISACP  = "MDGISACP"
MAP_MDGMPEISA   = "MDGEISA"
MAP_MDGMPPNP    = "MDGISACPNP"
MAP_MDGMPPCI    = "MDGPCI1B"
MAP_MDGMPPCIBM  = "MDGPCIBM2"
MAP_MDGMPPCMCIA = "MDGPCMCIA"
;
; UDT Constants - refer to the UDT defs.h for more details.
;
UDT_TX_MODE_DEFAULT = "0"
UDT_TX_MODE_PIO_16  = "1"
UDT_TX_MODE_PIO_32  = "2"   ; Not supported
UDT_TX_MODE_MMIO    = "3"   ; Not supported
UDT_TX_MODE_MASTER  = "4"   ; Not supported
UDT_TX_MODE_SRAM    = "5"   ; Not supported
UDT_RS_UNKNOWN      = "0"
UDT_RS_ADAPTER      = "1"
UDT_RS_4M           = "2"
UDT_RS_16M          = "3"
UDT_MAC_OPEN_CLASSIC = "1"
UDT_MAC_OPEN_DTR     = "2"
UDT_MAC_OPEN_DEF     = "3"
;
; Transfer Method Map
;
;
; The fields relate to Default
;--------------------------------------------------------------------------------------------------------------------------
;   AdapterType           | PIO                    | DMA                   | MMIO                  | Force 16-bit PIO     |
;--------------------------------------------------------------------------------------------------------------------------
;
MapXferMethod_MDGATP    = {$(UDT_TX_MODE_DEFAULT), $(UDT_TX_MODE_DEFAULT), $(UDT_TX_MODE_DEFAULT), $(UDT_TX_MODE_PIO_16)}
MapXferMethod_MDGATPNP  = {$(UDT_TX_MODE_DEFAULT), $(UDT_TX_MODE_DEFAULT), $(UDT_TX_MODE_DEFAULT), $(UDT_TX_MODE_PIO_16)}
MapXferMethod_MDGISACP  = {$(UDT_TX_MODE_DEFAULT), $(UDT_TX_MODE_DEFAULT), $(UDT_TX_MODE_DEFAULT), $(UDT_TX_MODE_DEFAULT)}
MapXferMethod_MDGEISA   = {$(UDT_TX_MODE_DEFAULT), $(UDT_TX_MODE_DEFAULT), $(UDT_TX_MODE_DEFAULT), $(UDT_TX_MODE_DEFAULT)}
MapXferMethod_MDGISACPNP= {$(UDT_TX_MODE_DEFAULT), $(UDT_TX_MODE_DEFAULT), $(UDT_TX_MODE_DEFAULT), $(UDT_TX_MODE_PIO_16)}
MapXferMethod_MDGPCI1B  = {$(UDT_TX_MODE_DEFAULT), $(UDT_TX_MODE_DEFAULT), $(UDT_TX_MODE_DEFAULT), $(UDT_TX_MODE_DEFAULT)}
MapXferMethod_MDGPCIBM1 = {$(UDT_TX_MODE_DEFAULT), $(UDT_TX_MODE_DEFAULT), $(UDT_TX_MODE_DEFAULT), $(UDT_TX_MODE_DEFAULT)}
MapXferMethod_MDGPCIBM2 = {$(UDT_TX_MODE_DEFAULT), $(UDT_TX_MODE_DEFAULT), $(UDT_TX_MODE_DEFAULT), $(UDT_TX_MODE_PIO_16)}
MapXferMethod_MDGPCMCIA = {$(UDT_TX_MODE_DEFAULT), $(UDT_TX_MODE_DEFAULT), $(UDT_TX_MODE_DEFAULT), $(UDT_TX_MODE_PIO_16)}
; ----------------------------------------------------------------------
; Constants specific to the driver.
; ----------------------------------------------------------------------
[FileConstants]
;
;  File names, etc.
;
DialogDllName = "MDRVWIN.DLL"
DetectDllName = "MDGNCDET.DLL"
SoftwareType  = "driver"
Exit_Code     = 0
;
; Product Information.
;
Manufacturer        = "Madge"
ProductMajorVersion = "6"
ProductMinorVersion = "04"
ProductVersion      = $(ProductMajorVersion)"."$(ProductMinorVersion)
VersionString       = "6.04 LSS 7.1(0)"
;
; Software information.
;
ProductSoftwareName      = "MDGMPORT"
ProductSoftwareImagePath = "%SystemRoot%\system32\drivers\"$(ProductSoftwareName)".sys"
NetRuleSoftwareType     = "mdgtrSys ndisDriver mdgtrDriver"
NetRuleSoftwareUse      = $(SoftwareType)
NetRuleSoftwareBindForm = """mdgtrSys"" yes no container"
NetRuleSoftwareClass    = {"mdgtrDriver basic"}
NetRuleSoftwareBindable = {"mdgtrDriver mdgtrAdapter non exclusive 100"}
;
; Hardware information.
;
ProductHardwareName     = "MDGMPORT"
NetRuleHardwareType     = "mdgtr mdgtrAdapter"
NetRuleHardwareBindForm = " yes yes container"
NetRuleHardwareClass    = {"mdgtrAdapter basic"}
;
; Registry Key.
;
ProductKeyName  = $(!NTN_SoftwareBase)"\"$(Manufacturer)"\"$(ProductSoftwareName)"\CurrentVersion"
ParamKeyName    = $(!NTN_ServiceBase)"\"$(ProductHardwareName)"\Parameters"
CardbusDatabase = "System\CurrentControlSet\Services\PCMCIA\Database\MADGE"
PcmciaDatabase  = "System\CurrentControlSet\Services\PCMCIA\Database\MADGE\Smart 16/4 PCMCIA Ringnode"
CBDatabase      = "System\CurrentControlSet\Services\PCMCIA\Database\MADGE\16/4 CARDBUS ADAPTER"
CB2Database     = "System\CurrentControlSet\Services\PCMCIA\Database\MADGE\CARDBUS ADAPTER MK 2"
FixedDatabase   = "System\ControlSet001\Services\PCMCIA\Database\MADGE\Smart 16/4 PCMCIA Ringnode"
OlicomPcmciaDatabase = "System\CurrentControlSet\Services\PCMCIA\Database\OLICOM"
OCTX3221Database     = "System\CurrentControlSet\Services\PCMCIA\Database\OLICOM\TR 16/4 II"
OCTX3221DatabaseLast = "TR 16/4 II"
OCTX3250Database     = "System\CurrentControlSet\Services\PCMCIA\Database\OLICOM\GoCard 3250 Token-Ring CardBus PC Card"
OCTX3250DatabaseLast = "GoCard 3250 Token-Ring CardBus PC Card"
AwardKey        = $(!NTN_SoftwareBase)"\Award Software\CardWare"
SystemSoftKey   = $(!NTN_SoftwareBase)"\SystemSoft\CardWizard for Windows NT"
SoftexKey1      = $(!NTN_ServiceBase)"\CardS"
SoftexKey2      = $(!NTN_ServiceBase)"\Enabler"
;
; EventLog Message File.
;
MadgeEventLogFile = $(ProductSoftwareImagePath)
;
; Default values for some registry parameters.
;
DEF_MAX_FRAME_SIZE   = 4216
DEF_TX_SLOTS         = 0
DEF_RX_SLOTS         = 0
DEF_DMA_CHANNEL      = 0
DEF_IRQ_NUMBER       = 0
DEF_TRANSFER_TYPE    = 0
DEF_INTERRUPT_NUMBER = 0
DEF_MAC_OPEN_MODE    = 3
DEF_TEST_XID         = 1
DEF_STATS_GATHERING  = 0
DEF_QUIET_MODE       = 0
DEF_RING_STATUS_MASK = 7520 ; 0x1d60
DEF_EVENT_LOG_MASK   = 28   ; 0x001c
DEF_WATCHDOG         = 20
DEF_SPEED            = 1
DEF_WOL              = 0
DEF_CARDBUS_IO_LOCATION = 33024 ; 0x8100
DEF_PCMCIAMEMWIN     = 0
DEF_PCMCIAMEMWINLEN  = 0
;
; Adapter types.
;
AdapterTypeFlagMDGPCI3       = 11
AdapterTypeFlagMDGPCIBM2     = 10
AdapterTypeFlagMDGPRESTO     = 11
AdapterTypeFlagMDGPRESTO2    = 11
AdapterTypeFlagMDGPRESTO2000 = 11
AdapterTypeFlagMDGPCMCIA     = 7
AdapterTypeFlagMDGCARDBUS    = 12
AdapterTypeFlagMDGCARDBUS2   = 17
AdapterTypeFlagMDGPCIHS      = 11
AdapterTypeFlagMDGPCIHS2     = 11
AdapterTypeFlagOCTX3540        = 212
AdapterTypeFlagOCTX3139        = 211
AdapterTypeFlagOCTX3140        = 211
AdapterTypeFlagOCTX3140V2      = 11
AdapterTypeFlagOCTX3141        = 211
AdapterTypeFlagOCTX3137        = 210
AdapterTypeFlagOCTX3221        = 217
AdapterTypeFlagOCTX3250        = 218
;
; Adapter classification lists.
;
MadgeAdapterOptions  = ^(Options,1)
SlotNumberAdapters   = ^(SlotNumberOnlyOptions,1)
CardbusAdapters      = ^(CardbusOptions,1)
OlicomPcmciaAdapters = ^(OlicomPcmciaOptions,1)
OlicomHebeAdapters   = ^(OlicomHebeOptions,1)
PcmciaAdapters       = ^(PcmciaOptions,1)
; ---------------------------------------------------------------------
; General constants.
; ---------------------------------------------------------------------
[GeneralConstants]
;
;  File names, etc.
;
UtilityInf    = "UTILITY.INF"
SubroutineInf = "SUBROUTN.INF"
ParamInf      = "NCPARAM.INF"
;
; Program flow control variables.
;
From      = ""
To        = ""
;
; Return codes; Exit_Code is set to one of these
;
ExitCodeOk     = 0
ExitCodeCancel = 1
ExitCodeFatal  = 2
;
; Miscellaneous.
;
MAXIMUM_ALLOWED    = 33554432
RegistryErrorIndex = NO_ERROR
KeyNull            = ""
KeyProduct         = ""
KeyParameters      = ""
TRUE    = 1
FALSE   = 0
NoTitle = 0
ExitState         = "Active"
OldVersionExisted = $(FALSE)
AwardCB           = $(FALSE)
SSoftCB           = $(FALSE)
SoftexCB          = $(FALSE)
MadgeCB           = $(FALSE)
DriverPath      = $(!STF_NTPATH)\drivers
;
; Resource values returned by the detection DLL, so do not change them.
;
VALUE_UNKNOWN   = 65535
; ----------------------------------------------------------------------
; Language dependent messages for the upgrade section
; ----------------------------------------------------------------------
[UpgradeMessagesENG]
UPD_SUCCESS                       = "The upgrade was successful."
UPD_STARTED                       = "The upgrade processes has been started"
UPD_TOO_MANY_UNKNOWN_SLOTS        = "The upgrade has been halted because it is not possible to resolve the slot numbers of all the PCI cards in the machine. Go to the cards' properties to resolve this problem and try again."
UPD_TOO_MANY_PCIS_WITH_AN_UNKNOWN = "The upgrade has been halted because there is a PCI card in this machine that has an unknown slot number. Go to the card's properties to resolve this problem and try again."
UPD_GET_INF_NAME_FAILED           = "The upgrade fialed because the install file failed to determine the name of the install file."
UPD_INSTALL_FAILED                = "This installation failed to update the driver files. Check that all the files are present on the installation disk."
UPD_PREP_DETECTION_DLL_FAILED     = "The setup failed to initialise the detection library."
UPD_OPEN_SOFTWARE_KEY_FAILED      = "You can't upgrade to this driver since it has a different name to the installed driver. You must remove the old driver, reboot, then add the new driver."
UPD_FAILED_TO_DETERMINE_CARD_TYPE = "The upgrade failed because the card type was not recognised."
UPD_OPTION_NOT_SUPPORTED          = "This OEMSETUP file does not support this card."
UPD_UNSUPPORTED_CARD_FOUND        = "It is not possible to upgrade this machine because a network adapter that requires the existing driver was detected in this machine."
UPD_DOWNGRADING_ERROR             = "It is not possible to downgrade the driver. To achieve this you must manually remove this driver and install the previous one."
; ----------------------------------------------------------------------
; Language dependent constants specific to the driver.
; ----------------------------------------------------------------------
[FileConstantsENG]
;
; Product Info
;
FunctionTitle   = "MDGMPORT v"$(VersionString)": Madge Token Ring Adapter Setup"
;
; Software.
;
ProductSoftwareTitle         = "MDGMPORT"
ProductSoftwareDescription   = "MDGMPORT: Madge Token Ring Adapter Miniport Driver"
ProductHardwareMDGPCIBM2     = "Madge Smart 16/4 PCI Ringnode Mk2"
ProductHardwareMDGPCI3       = "Madge Smart 16/4 PCI Ringnode Mk3"
ProductHardwareMDGPCMCIA     = "Madge Smart 16/4 PCMCIA Ringnode"
ProductHardwareMDGCARDBUS    = "Madge 16/4 CardBus Adapter"
ProductHardwareMDGCARDBUS2   = "Madge 16/4 CardBus Adapter Mk2"
ProductHardwareMDGPRESTO     = "Madge Presto PCI"
ProductHardwareMDGPRESTO2    = "Madge Presto PCI Plus"
ProductHardwareMDGPRESTO2000 = "Madge Presto PCI 2000"
ProductHardwareMDGPCIHS      = "Madge Smart 100/16/4 PCI-HS Ringnode"
ProductHardwareMDGPCIHS2     = "Madge Smart 100/16/4 PCI Ringnode"
ProductHardwareOCTX3540      = "Olicom RF-3540 HSTR 100/16/4 PCI Adapter"
ProductHardwareOCTX3139      = "Olicom RF-3139 Token-Ring 16/4 PCI Adapter"
ProductHardwareOCTX3140      = "Olicom RF-3140 Token-Ring 16/4 PCI Adapter"
ProductHardwareOCTX3140V2    = "Olicom RF-3140 V2 16/4 PCI Adapter"
ProductHardwareOCTX3141      = "Olicom RF-3141 Token-Ring 16/4 PCI Fiber Adapter"
ProductHardwareOCTX3137      = "Olicom PCI/II 16/4 Adapter (OC-3137)"
ProductHardwareOCTX3221      = "Olicom GoCard Token-Ring PC Card (OC-3221)"
ProductHardwareOCTX3250      = "Olicom GC-3250 16/4 CardBus PC Card"
;
; Messages.
;
CANNOT_FIND_ANY_CARD = "No Madge adapters were detected that are not already installed. "+
                       "If you are installing a CardBus adapter, the Madge Automated "+
                       "Installation will not detect it and should not be used."
TRIMMED_MFS = "WARNING: The maximum frame size specified is greater than "+
              "the 17839 allowed on a 100/16Mbps ring. The frame size has been "+
              "automatically reduced to 17839. On a 4Mbps ring the maximum "+
              "frame size is 4472. If a larger maximum frame size is "+
              "specified it will be automatically reduced and a message "+
              "placed in the event log."
INVALID_MFS = "WARNING: The maximum frame size specified is smaller than the "+
              "recommended minimum for a token ring card (256 bytes) and has been "+
              "increased to that value."
INVALID_RING_STAT = "WARNING: An invalid Ring Status Mask has been chosen. The "+
               "mask should be in the range 0x0 - 0x3FFF and has been set to "+
               "the default value 0x1D60."
NON_AUTO_INSTALL = "You have selected a manual installation and must set the "+
                   "correct IO location/Slot Number/PCI Device ID for the adapter "+
                   "in the advanced dialog box. If you do not know this information "+
                   "cancel this install and add the card using the 'Automated Installation'."
MADGE_INTERNAL_SOLN = "The internal Madge CardBus enabler will be used since NT4.0 has "+
                      "no native support for CardBus adapters and there is no "+
                      "third-party NT4.0 CardBus solution installed on this system. "+
                      "The resources assigned to the CardBus adapter can be modified "+
                      "using the Advanced Properties dialog. If you do not wish to "+
                      "use the internal enabler select Cancel now."
AWARD_SOLN = "Award CardWare has been detected on this system and will be used to "+
             "enable the CardBus adapter. No user configuration is required. "+
             "If you do not wish to use Award CardWare select Cancel now."
SSOFT_SOLN = "SystemSoft CardWizard has been detected on this system and will be used to "+
             "enable the CardBus adapter. No user configuration is required. "+
             "If you do not wish to use SystemSoft CardWizard select Cancel now."
SOFTEX_SOLN = "Softex PC Card Controller has been detected on this system and will be used to "+
              "enable the CardBus adapter. No user configuration is required. "+
              "If you do not wish to use Softex PC Card Controller select Cancel now."
ShellCodeErrorTitle = "Error: "$(FunctionTitle)
ShellCodeErrorText  = "Shell Code Error"
ProCaption   = "Windows NT Setup"
ProCancel    = "Cancel"
ProCancelMsg = "Windows NT Networking is not correctly installed.  "+
               "Are you sure you want to cancel copying files?"
ProCancelCap = "Network Setup Message"
ProText1     = "Copying:"
ProText2     = "To:"
; ---------------------------------------------------------------------
; Adapter specific constants.
; ---------------------------------------------------------------------
[AdapterConstants]
LocList              = ^($(AdapOption)_LocChoices, 1)
LocRawList           = ^($(AdapOption)_LocChoices, 2)
IrqList              = ^($(AdapOption)_IrqChoices, 1)
IrqRawList           = ^($(AdapOption)_IrqChoices, 2)
DmaList              = ^($(AdapOption)_DmaChoices, 1)
DmaRawList           = ^($(AdapOption)_DmaChoices, 2)
TxList               = ^(SlotsChoices, 1)
TxRawList            = ^(SlotsChoices, 2)
RxList               = ^(SlotsChoices, 1)
RxRawList            = ^(SlotsChoices, 2)
TransferList         = ^($(AdapOption)_TransferChoices, 1)
TransferRawList      = ^($(AdapOption)_TransferChoices, 2)
TestXIDList          = ^(SwitchChoices, 1)
TestXIDRawList       = ^(SwitchChoices, 2)
MacOpenList          = ^(MacOpenChoices, 1)
MacOpenRawList       = ^(MacOpenChoices, 2)
StatsList            = ^($(AdapOption)_StatsChoices, 1)
StatsRawList         = ^($(AdapOption)_StatsChoices, 2)
WolList              = ^($(AdapOption)_WolChoices, 1)
WolRawList           = ^($(AdapOption)_WolChoices, 2)
QuietList            = ^(QuietChoices, 1)
QuietRawList         = ^(QuietChoices, 2)
SpeedList            = ^($(AdapOption)_SpeedChoices, 1)
SpeedRawList         = ^($(AdapOption)_SpeedChoices, 2)
WatchdogList         = ^(WatchdogChoices, 1)
WatchdogRawList      = ^(WatchdogChoices, 2)
DisabledOnlyList     = ^(DisabledOnlyChoices, 1)
DisabledOnlyRawList  = ^(DisabledOnlyChoices, 2)
PcmciaMemWinList     = ^(PcmciaMemWinChoices,1)
PcmciaMemWinRawList  = ^(PcmciaMemWinChoices,2)
; ---------------------------------------------------------------------
; Language dependant general dialog constants.
; ---------------------------------------------------------------------
[DialogConstantsENG]
;
; Common button names, etc.
;
Help        = "&Help"
Exit        = "&Cancel"
OK          = "O&K"
Continue    = "C&ontinue"
Cancel      = "C&ancel"
Advanced    = "Ad&vanced"
Configure   = "Configure..."
HelpContext = ""
[date]
    ; Now is a list which contains { Sec from 1-1-1970, Year, Month, Day, Hour,
    ; Minute, Second }
    Now = {} ? $(!LIBHANDLE) GetSystemDate
; -----------------------------------------------------------------------
; Dialog constants for basic installation.
; -----------------------------------------------------------------------
[FileDependentDlgENGOptionMDG]
DlgType = "RadioCombination"
Caption = $(FunctionTitle)
WarningText = "Consult the help before changing any of these parameters."
CurrentValueText = "Current Value"
Combo1Label     = "I/O Location:"
Combo2Label     = "Ring Speed:"
Combo3Label     = "Please choose a Madge adapter to install"
Combo4Label     = "Interrupt Number:"
Combo5Label     = "DMA Channel:"
Combo6Label     = "Tx Slots:"
Combo7Label     = "Rx Slots:"
Combo8Label     = "Transfer Type:"
Combo9Label     = "Respond to TEST/XID:"
Combo10Label    = "Mac Open Mode:"
Combo11Label    = "Promiscuous Mode:"
Combo12Label    = "Quiet Mode:"
Combo13Label    = "Watchdog Timer:"
Combo14Label    = "Wake-On-LAN:"
Combo18Label    = "Priority:"
EisaCombo1Label = "Slot Number:"
PciCombo1Label  = "PCI Device Number:"
OlicomPcmciaCombo14Label = "Memory Window:"
Combo1List = $(LocList)
Combo1Out  = $(IoLocation)
Combo2List = $(SpeedList)
Combo2Out  = $(SpeedFlag)
Combo3List = $(AdapterDescList)
Combo3Out  = $(AdapterType)
Combo4List = $(IrqList)
Combo4Out  = $(IrqNumber)
Combo5List = $(DmaList)
Combo5Out  = $(DmaChannel)
Combo6List = $(TxList)
Combo6Out  = $(TxSlots)
Combo7List = $(RxList)
Combo7Out  = $(RxSlots)
Combo8List = $(TransferList)
Combo8Out  = $(TransferType)
Combo9List = $(TestXIDList)
Combo9Out  = $(TestXID)
Combo10List = $(MacOpenList)
Combo10Out  = $(MacOpenMode)
Combo11List = $(StatsList)
Combo11Out  = $(StatsGathering)
Combo12List = $(QuietList)
Combo12Out  = $(QuietMode)
Combo13List = $(WatchdogList)
Combo13Out  = $(Watchdog)
Combo14List = $(WolList)
Combo14Out  = $(Wol)
Combo14OlicomPcmciaList = $(PcmciaMemWinList)
Combo14OlicomPcmciaOut = $(PcmciaMemWin)
ComboListItemsIn  = {Combo1List, Combo2List, Combo3List, Combo4List, Combo5List, Combo6List, Combo7List, Combo8List, Combo9List, Combo10List, Combo11List, Combo12List, Combo13List, Combo14List}
ComboListItemsOut = {Combo1Out, Combo2Out, Combo3Out, Combo4Out, Combo5Out, Combo6Out, Combo7Out, Combo8Out, Combo9Out, Combo10Out, Combo11Out, Combo12Out, Combo13Out, Combo14Out}
Edit1Label  = "Maximum Frame Size:"
Edit2Label  = "Ring Status Mask:"
Edit3Label  = "Token Ring Event Mask:"
LAAPrompt   = "LAA :"
EditTextIn  = {$(L1), $(L2), $(L3), $(L4), $(L5), $(L6), $(MaxFrameSize), $(RingStatus), $(EventLog)}
EditTextLim = {2, 2, 2, 2, 2, 2, 5, 5, 5}
EditTextOut = {$(L1), $(L2), $(L3), $(L4), $(L5), $(L6), $(MaxFrameSize), $(RingStatus), $(EventLog)}
CBOptionsGreyed = {}
NotifyFields = {NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO}
AdapterTitle = #(OptionsText$(!STF_LANGUAGE),$(Option),1)
;---------------------------------------------------------------------------
; Identify the INF file to NT.
;
; 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)
;------------------------------------------------------------------------
; Return the options supported by this INF file.
;
; 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 Status              = STATUS_FAILED
    set OptionList          = {}
    set OptionTextList      = {}


    set LSS5_OptionList     = {}
    set LSS5_OptionTextList = {}
    ;
    ; Check if the language requested is supported.
    ;
    set LanguageList = ^(LanguagesSupported, 1)
    ifcontains(i) $($0) in $(LanguageList)
    ;
        ;
        ; Check if the platforms requested is supported
        ;
        ifstr(i) $($1) == ""
        ;
            goto Return_Options
        ;
        endif
        set PlatformList = ^(PlatformsSupported, 1)
        ifcontains(i) $($1) in $(PlatformList)
        ;
            goto Return_Options
        ;
        else
        ;
            set Status = STATUS_NOTSUPPORTED
            goto Finish_ReturnOptions
        ;
        endif
    ;
    else
    ;
        set Status = STATUS_NOLANGUAGE
        goto Finish_ReturnOptions
    ;
    endif
    ;
    ; form a list of all the options and another of the text representing
    ;
Return_Options = +
    set OptionList      = ^(Options, 1)


    set LSS5_OptionList = ^(LSS502_Options, 1)
    ;
    ; Append the LSS502 tags. This is so that the update works. Because we
    ; have not associated any strings with these values they are not displayed
    ; in the choose adapter list.
    ;
    ForListDo $(LSS5_OptionList)
    ;
        set OptionList = >($(OptionList), $($))
    ;
    EndForListDo
    set OptionTextList = ^(OptionsText$($0), 1)
    set Status         = STATUS_SUCCESSFUL
Finish_ReturnOptions = +
    return $(Status) $(OptionList) $(OptionTextList)
;----------------------------------------------------------------------------
; Prepare an adapter detection DLL for use.
;----------------------------------------------------------------------------
[PrepareDetectionDll]
    set NewDllName = $($0)
    set Status     = STATUS_FAILED
    read-syms GeneralConstants
    set DllValueName = "NetcardDlls"
    OpenRegKey $(!REG_H_LOCAL) "" "System\Setup" $(MAXIMUM_ALLOWED) KeySetup
    ifstr(i) $(KeySetup) == $(KeyNull)
    ;
        goto PDD_Return
    ;
    endif
    set DllFound = 0
    GetRegValue $(KeySetup) $(DllValueName) DllNamesValue
    ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
    ;
        goto PDD_Return
    ;
    endif
    set DllNames = *($(DllNamesValue),4)
    ForListDo $(DllNames)
    ;
        ifstr(i) $($) == $(NewDllName)
        ;
            set DllFound = 1
        ;
        endif
    ;
    EndForListDo
    ifint $(DllFound) == 0
    ;
        set DllNames  = >($(DllNames),$(NewDllName))
        set ValueInfo = {$(DllValueName), $(NoTitle), $(!REG_VT_MULTI_SZ), $(DllNames)}
        SetRegValue $(KeySetup) $(ValueInfo)
        ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
        ;
            Set Status = STATUS_SUCCESSFUL
        ;
        endif
    ;
    else
    ;
        set Status = STATUS_SUCCESSFUL
    ;
    endif
    CloseRegKey $(KeySetup)
PDD_Return = +
    return $(Status)
;------------------------------------------------------------------------
; 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]
    StartWait
    ;
    ; Un-comment for debugging.
    ;
    ; set !DebugOutputControl = 1
    ;
    ; Set default values.
    ;
    set Status      = STATUS_FAILED
    set NumberFound = 0
    ;
    ; extract parameters
    ;
    set Option   = $($1)
    set SrcDir   = $($2)
    set AddCopy  = $($3)
    set DoCopy   = $($4)
    set DoConfig = $($5)
    Debug-Output "MADGE: STF_CWDIR    = "$(!STF_CWDIR)
    Debug-Output "MADGE: STF_LANGUAGE = "$(!STF_LANGUAGE)
    Debug-Output "MADGE: Option       = "$(Option)
    Debug-Output "MADGE: SrcDir       = "$(SrcDir)
    Debug-Output "MADGE: AddCopy      = "$(AddCopy)
    Debug-Output "MADGE: DoCopy       = "$(DoCopy)
    Debug-Output "MADGE: DoConfig     = "$(DoConfig)
    ifstr(i) $(!LIBHANDLE) == ""
    ;
        LoadLibrary "x" $(!STF_WINDOWSSYSPATH)"\setupdll.dll" !LIBHANDLE
    ;
    endif
    ifstr(i) $(!NCPA_HANDLE) == ""
    ;
        LoadLibrary "y" $(!STF_WINDOWSSYSPATH)"\NCPA.CPL" !NCPA_HANDLE
    ;
    endif
    ;
    ; Get the correct source directory for an unattended installation.
    ; Also if the !MADGE_AdapterType variable is set then override
    ; $(Option) - which should have been MDGAUTO.
    ; Also get any preset laa.
    ;

    set UnattendLAA = ""

    ifstr(i) $(!STF_GUI_UNATTENDED) == "YES"
    ;
        ifstr(i) $(!MADGE_DriverDir) != ""
        ;
            set SrcDir = $(!MADGE_DriverDir)
        ;
        endif
        ifstr(i) $(!MADGE_AdapterType) != ""
        ;
            set Option = $(!MADGE_AdapterType)
        ;
        endif

        ifstr(i) $(!MADGE_LAA) != ""
        ;
            set UnattendLAA = $(!MADGE_LAA)
        ;
        endif
    ;
    endif
    ;
    ; Check if the language requested is supported
    ;
    set LanguageList = ^(LanguagesSupported, 1)
    ifcontains(i) $($0) NOT-IN $(LanguageList)
    ;
        return STATUS_NOLANGUAGE
    ;
    endif
    ;
    ; Define all the constants
    ;
    set-subst LF = "\n"
    read-syms GeneralConstants
    read-syms FileConstants
    read-syms DialogConstants$(!STF_LANGUAGE)
    ifstr(i) $(!NTN_Origination) == "NCPA"
    ;
        set Continue = $(OK)
    ;
    endif
    read-syms FileConstants$(!STF_LANGUAGE)
    detect date
    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 gaily welcome
; the user.  If the "install mode" variable is improperly set,
; assume this is a new installation.
; -----------------------------------------------------------------------
Begin = +
    ;
    ; Until proven otherwise we assume that the adapter has not been
    ; detected by our NetDetect DLL.
    ;
    set AdapterDetected = FALSE
    set ManualInstall   = FALSE
    ifstr(i) $(!NTN_InstallMode) == deinstall
    ;
        set StartLabel = Remove_Adapter
    ;
    else-ifstr(i) $(!NTN_InstallMode) == Update
    ;
        set StartLabel = Upgrade_Software
    ;
    else-ifstr(i) $(!NTN_InstallMode) == bind
    ;
        set StartLabel = Binding_Adapter
    ;
    else-ifstr(i) $(!NTN_InstallMode) == configure
    ;
        set CommonStatus = STATUS_REBOOT
        set StartLabel = Configure_Adapter
        ;
        ;   You cannot config the software component
        ;
        ifstr(i) $(ProductKeyName) == $(!NTN_RegBase)
        ;
            Shell $(UtilityInf),RegistryErrorString,CANNOT_CONFIGURE_SOFTWARE
            ifint $($ShellCode) != $(!SHELL_CODE_OK)
            ;
                goto Shell_Code_Error
            ;
            endif
            set Error = $($R0)
            set From  = End
            set To    = End
            goto Non_Fatal_Info
        ;
        endif
    ;
    else
    ;
        set StartLabel           = Install_Adapter
        set OEM_ABANDON_OPTIONS  = {}
        set OEM_ABANDON_SOFTWARE = FALSE
        set OEM_ABANDON_ON       = TRUE
    ;
    endif
    set From = Fatal
    set To   = Fatal
    goto $(StartLabel)
; ----------------------------------------------------------------------
; Installation Section
; ----------------------------------------------------------------------
Install_Adapter = +
    Debug-Output "Install"
    ;
    ; First, check whether the same version of the software exists
    ;
    OpenRegKey $(!REG_H_LOCAL) "" $(ProductKeyName) $(MAXIMUM_ALLOWED) KeyProduct
    Ifstr $(KeyProduct) != $(KeyNull)
    ;
        ;
        ; Same version already existed in the local machine
        ; Popup the dialog and ask the user whether he wants to continue
        ;
        Debug-Output "Same version of software exists"
        set OldVersionExisted = $(TRUE)
        CloseRegKey $(KeyProduct)
        ifstr(i) $(!NTN_RegBase) == $(ProductKeyName)
        ;
            ;
            ; Cannot Install the same software again
            ;
            Shell $(UtilityInf), VerExistedDlg, $(ProductSoftwareTitle),+
                $(ProductVersion)
            ifint $($ShellCode) != $(!SHELL_CODE_OK)
            ;
                goto Shell_Code_Error
            ;
            endif
            goto End
        ;
        else
        ;
           ;
           ; Note that the software already exists - unless we're
           ; doing an unattended installation.
           ;
           ifstr(i) $(!STF_GUI_UNATTENDED) != "YES"
           ;
               set OldVersionExisted = $(TRUE)
           ;
           endif
        ;
        endif
    ;
    endif
; -----------------------------------------------------------------------
; Copy the driver and helper files from the distribution disk.
; -----------------------------------------------------------------------
Install_Files = +
    ifint $(OldVersionExisted) == $(FALSE)
    ;
        ifstr(i) $(!NTN_InstallMode) == "install"
        ;
            ;
            ; Ask the user for the location of the source files unless
            ; we are doing an unattended installation.
            ;
            ifstr(i) $(!STF_GUI_UNATTENDED) != "YES"
            ;
                Shell $(UtilityInf), DoAskSource, $(!STF_CWDDIR), $(SrcDir) YES
                Debug-Output "New SrcDir = "$($R1)
                ifint $($ShellCode) != $(!SHELL_CODE_OK)
                ;
                    goto Shell_Code_Error
                ;
                else-ifstr(i) $($R0) == STATUS_FAILED
                ;
                    shell $(UtilityInf) RegistryErrorString "ASK_SOURCE_FAIL"
                    ifint $($ShellCode) != $(!SHELL_CODE_OK)
                    ;
                        goto Shell_Code_Error
                    ;
                    endif
                    set Error = $($R0)
                    goto Fatal
                ;
                else-ifstr(i) $($R0) == STATUS_USERCANCEL
                ;
                    goto Successful
                ;
                endif
                set SrcDir = $($R1)   ; Referenced in install sections.
            ;
            endif
            ;
            ; Install the detection DLL.
            ;
            Shell "" PrepareDetectionDll $(DetectDllName)
            ifstr(i) $($R0) != STATUS_SUCCESSFUL
            ;
                goto Fatal
            ;
            endif
            install "Install-Option"
            ifstr(i) $(STF_INSTALL_OUTCOME) != STF_SUCCESS
            ;
                shell $(UtilityInf) RegistryErrorString "UNABLE_COPY_FILE"
                ifint $($ShellCode) != $(!SHELL_CODE_OK)
                ;
                    goto Shell_Code_Error
                ;
                endif
                set Error = $($R0)
                goto Fatal
            ;
            endif
        ;
        endif
    ;
    endif
; -----------------------------------------------------------------------
; If the adapter option is MDGAUTO then we need to perform some adapter
; detection. In addition, we may not have been asked to detect the
; adapter but NCPA may have already done it for use. If it has then set
; up the detection variables from the values passed by NCPA.
; -----------------------------------------------------------------------
    ifstr(i) $(!STF_NCDETECT) == YES
    ;
        ifstr(i) $(!STF_NCOPTION) == $(Option)
        ;
            set AdapterDetected = TRUE
            set DetectOption    = $(!STF_NCOPTION)
            set DetectIndex     = $(!STF_NCDETCARD)
            set DetectBusType   = *($(!STF_NCDETINFO),5)
            set DetectBusNumber = *($(!STF_NCDETINFO),6)
            goto Set_Installation_Defaults
        ;
        endif
    ;
    endif
    ;
    ; If NCPA has not already detected an adapter then we must
    ; initialize the detection DLL. We mustn't re-initalise it
    ; if NCPA has detected an adapter else we will trash the
    ; adapter information found by NCPA.
    ;
    Shell $(ParamInf) Param_ControlDetection DTEND
    Shell $(ParamInf) Param_ControlDetection DTSTART
    ifstr(i) $(Option) != "MDGAUTO"
    ;
        set ManualInstall = TRUE
        ifcontains(i) $(Option) not-in $(CardbusAdapters)
        ;
            ifstr(i) $(!STF_GUI_UNATTENDED) == "YES"
            ;
                set ManualInstall = FALSE
            ;
            else
            ;
                set Error = $(NON_AUTO_INSTALL)
                set To   = Set_Installation_Defaults
                set From = End
                goto Warning
            ;
            endif
        ;
        else
        ;
            ;
            ; Determine whether Award, SystemSoft or Softex install. If none of
            ; these Card Services are detected, default to our internal enabler.
            ;
            OpenRegKey $(!REG_H_LOCAL) "" $(AwardKey) $(MAXIMUM_ALLOWED) KeyCBProduct
            ifstr $(KeyCBProduct) != $(KeyNull)
            ;
                Debug-Output "Award software installed"
                set AwardCB = $(TRUE)
                CloseRegKey $(KeyCBProduct)
            ;
            endif
            OpenRegKey $(!REG_H_LOCAL) "" $(SystemSoftKey) $(MAXIMUM_ALLOWED) KeyCBProduct
            ifstr $(KeyCBProduct) != $(KeyNull)
            ;
                Debug-Output "SystemSoft software installed"
                set SSoftCB = $(TRUE)
                CloseRegKey $(KeyCBProduct)
            ;
            endif
            OpenRegKey $(!REG_H_LOCAL) "" $(SoftexKey1) $(MAXIMUM_ALLOWED) KeyCBProduct
            ifstr $(KeyCBProduct) != $(KeyNull)
            ;
                CloseRegKey $(KeyCBProduct)
                OpenRegKey $(!REG_H_LOCAL) "" $(SoftexKey2) $(MAXIMUM_ALLOWED) KeyCBProduct
                ifstr $(KeyCBProduct) != $(KeyNull)
                ;
                    Debug-Output "Softex software installed"
                    set SoftexCB = $(TRUE)
                    CloseRegKey $(KeyCBProduct)
                ;
                endif
            ;
            endif
            ;
            ; Check our findings with user (unless doing unattended install).
            ;
            ifstr(i) $(!STF_GUI_UNATTENDED) == "YES"
            ;
                set MadgeCB = $(TRUE)
                goto Set_Installation_Defaults
            ;
            endif
            ifstr $(AwardCB) == $(TRUE)
            ;
                set Error = $(AWARD_SOLN)
                set To   = Set_Installation_Defaults
                set From = End
                goto Warning
            ;
            else-ifstr $(SSoftCB) == $(TRUE)
            ;
                set Error = $(SSOFT_SOLN)
                set To   = Set_Installation_Defaults
                set From = End
                goto Warning
            ;
            else-ifstr $(SoftexCB) == $(TRUE)
            ;
                set Error = $(SOFTEX_SOLN)
                set To   = Set_Installation_Defaults
                set From = End
                goto Warning
            ;
            else
            ;
                set MadgeCB = $(TRUE)
                set Error = $(MADGE_INTERNAL_SOLN)
                set To   = Set_Installation_Defaults
                set From = End
                goto Warning
            ;
            endif
        ;
        endif
        goto Set_Installation_Defaults
    ;
    endif
; -----------------------------------------------------------------------
; We have been asked to search for adapters. We will call our NetDetect
; DLL via helper functions to build a list of Madge adapters present in
; the machine that have not yet been installed.
; -----------------------------------------------------------------------
Detect_Adapters = +
    StartWait
    ;
    ; Initialise the adapter description and detection index lists.
    ;
    set AdapterOptionList    = {}
    set AdapterDescList      = {}
    set AdapterIndexList     = {}
    set AdapterBusTypeList   = {}
    set AdapterBusNumberList = {}
DA_Loop = +
    ;
    ; Call the detection DLL via a helper function to find the
    ; next adapter.
    ;
    Shell $(ParamInf) Param_DetectCard
    set DetectResult = $($R0)
    set Status       = *($(DetectResult),1)
    ifstr(i) $(Status) != 0
    ;
        goto DA_Loop_End
    ;
    endif
    set DetectOption    = *($(DetectResult),2)
    set DetectIndex     = *($(DetectResult),3)
    set DetectBusType   = *($(DetectResult),6)
    set DetectBusNumber = *($(DetectResult),7)
    ;
    ; If the adapter is not a Madge adapter then start the
    ; loop again to skip the adapter.
    ;
    ifcontains(i) $(DetectOption) not-in $(MadgeAdapterOptions)
    ;
        goto DA_Loop
    ;
    endif
    ;
    ; Found a Madge adapter so increment NumberFound
    ;
    set-add NumberFound = $(NumberFound), 1
    ;
    ; Now find out the slot number or IO location to show to the user.
    ;
    ifcontains(i) $(DetectOption) in $(SlotNumberAdapters)
    ;
        set TypeList = {{SLOTNUMBER,DummyList1,SlotNumber}}
    ;
    else-ifstr(i) $(DetectOption) in $(OlicomPcmciaAdapters)
    ;
        set TypeList = {{IOLOCATION,DummyList1,IoLocation},+
                        {INTERRUPTNUMBER,DummyList2,IrqNumber},+
                        {MEMADDR,DummyList3,PcmciaMemWin},+
                        {MEMADDRLENGTH,DummyList4,PcmciaMemWinLen}}
    ;
    else-ifcontains(i) $(DetectOption) in $(PcmciaAdapters)
    ;
        set TypeList = {{IOLOCATION,DummyList1,IoLocation},+
                        {INTERRUPTNUMBER,DummyList2,IrqNumber}}
    ;
    else
    ;
        set TypeList = {{IOLOCATION,DummyList1,IoLocation}}
    ;
    endif
    Shell $(ParamInf) Param_BuildTypeLists $(DetectOption) $(TypeList)
    set Status = $($R0)
    ifstr(i) $(Status) != STATUS_SUCCESSFUL
    ;
        goto Fatal
    ;
    endif
    Shell $(ParamInf) Param_QueryCard $(DetectIndex)
    set Status    = $($R0)
    set ParamList = $($R1)
    ifstr(i) $(Status) != STATUS_SUCCESSFUL
    ;
        goto Fatal
    ;
    endif
    Shell $(ParamInf) Param_SetDefaults $(ParamList)
    ;
    ; We need to set up the adapter specific constants for the detected
    ; adapter so that we can generate a user readable description.
    ;
    set AdapOption = $(DetectOption)
    read-syms AdapterConstants
    ;
    ; Record the bus type and number so we can recover them later.
    ;
    set AdapterBusTypeList   = >($(AdapterBusTypeList),$(DetectBusType))
    set AdapterBusNumberList = >($(AdapterBusNumberList),$(DetectBusNumber))
    ;
    ; Build a list of adapters to show to the user.
    ;
    set AdapterOptionList = >($(AdapterOptionList),$(DetectOption))
    set AdapterIndexList  = >($(AdapterIndexList),$(DetectIndex))
    set AdapterDesc       = #(OptionsChoice$(!STF_LANGUAGE),$(DetectOption),1)
    ifcontains(i) $(DetectOption) in $(SlotNumberAdapters)
    ;
        set AdapterDesc     = $(AdapterDesc)$(SlotNumber)" bus "$(DetectBusNumber)
        set AdapterDescList = >($(AdapterDescList),$(AdapterDesc))
    ;
    else-ifstr(i) $(DetectOption) == "MDGEISA"
    ;
        set SlotNumber      = *($(LocList),~($(LocRawList),$(IoLocation)))
        set AdapterDesc     = $(AdapterDesc)$(SlotNumber)" bus "$(DetectBusNumber)
        set AdapterDescList = >($(AdapterDescList),$(AdapterDesc))
    ;
    else
    ;
        set IoLocation      = *($(LocList),~($(LocRawList),$(IoLocation)))
        set AdapterDesc     = $(AdapterDesc)$(IoLocation)" bus "$(DetectBusNumber)
        set AdapterDescList = >($(AdapterDescList),$(AdapterDesc))
    ;
    endif
    ;
    ; And look for another adapter.
    ;
    goto DA_Loop
DA_Loop_End = +
    EndWait
    Debug-Output "MADGE: AdapterOptionList    = "$(AdapterOptionList)
    Debug-Output "MADGE: AdapterDescList      = "$(AdapterDescList)
    Debug-Output "MADGE: AdapterIndexList     = "$(AdapterIndexList)
    Debug-Output "MADGE: AdapterBusTypeList   = "$(AdapterBusTypeList)
    Debug-Output "MADGE: AdapterBusNumberList = "$(AdapterBusNumberList)
    ;
    ; Give up if we can't find any adapters.
    ;
    ifstr(i) $(AdapterOptionList) == {}
    ;
        set Error = $(CANNOT_FIND_ANY_CARD)
        goto Fatal
    ;
    endif
;------------------------------------------------------------------------
; We now have a list of adapter descriptions and detection indexes.
; Pop up a dialog box from which the user can choose which adapter
; to install.
;------------------------------------------------------------------------
Choose_Adapter = +
    StartWait
    ;
    ; Set the default choice.
    ;
    set AdapterType = *($(AdapterDescList),1)
    ;
    ; If we are not doing an unattended installation then
    ; let the user choose an adapter.
    ; If there is only one adapter found then skip this box.
    ;
    ifint $(NumberFound) != 1
    ;
        ifstr(i) $(!STF_GUI_UNATTENDED) != "YES"
        ;
            set DlgTemplate = "MDG"
            Debug-Output "MADGE: DlgTemplate = "$(DlgTemplate)
            read-syms FileDependentDlg$(!STF_LANGUAGE)Option$(DlgTemplate)
            set DlgTemplate = "MDGADAPTERS"
            ;
            ; Load the DLL.
            ;
            LoadLibrary "x" $(DialogDllName) MdgDialog
            ;
            ; Display the dialog box.
            ;
            EndWait
            ui start "InputDlg" $(MdgDialog)
            StartWait
            ifstr(i) $(DLGEVENT) == "EXIT"
            ;
                set CommonStatus = STATUS_USERCANCEL
                ui pop 1
                FreeLibrary $(MdgDialog)
                goto End
            ;
            else-ifstr(i) $(DLGEVENT) != "CONTINUE"
            ;
                ui pop 1
                FreeLibrary $(MdgDialog)
                goto End
            ;
            endif
            set AdapterType = $(Combo3Out)
            ui pop 1
            FreeLibrary $(MdgDialog)
        ;
        endif
    ;
    endif
    ;
    ; AdapterType now contains the description of the adapter
    ; the user wants to install. Find the option and detection index
    ; value this corresponds to.
    ;
    Debug-Output "MADGE: AdapterType  = "$(AdapterType)
    set DetectOption    = *($(AdapterOptionList),~($(AdapterDescList),$(AdapterType)))
    set DetectIndex     = *($(AdapterIndexList),~($(AdapterDescList),$(AdapterType)))
    set DetectBusType   = *($(AdapterBusTypeList),~($(AdapterDescList),$(AdapterType)))
    set DetectBusNumber = *($(AdapterBusNumberList),~($(AdapterDescList),$(AdapterType)))
    Debug-Output "MADGE: DetectOption    = "$(DetectOption)
    Debug-Output "MADGE: DetectIndex     = "$(DetectIndex)
    Debug-Output "MADGE: DetectBusType   = "$(DetectBusType)
    Debug-Output "MADGE: DetectBusNumber = "$(DetectBusNumber)
    ;
    ; Set the flag to say that the adapter was detected and change the
    ; Option to the detected type.
    ;
    set AdapterDetected = TRUE
    set Option          = $(DetectOption)
    EndWait
; -----------------------------------------------------------------------
; Set some defaults that apply to all card types
; -----------------------------------------------------------------------
Set_Installation_Defaults = +
    StartWait
    Debug-Output "MADGE: Set_Installation_Defaults"
    ;
    ; Set up some defaults that are not affected by automatic detection.
    ;
    set MaxFrameSize   = $(DEF_MAX_FRAME_SIZE)
    set SpeedFlag      = $(DEF_SPEED)
    set BusType        = $(VALUE_UNKNOWN)
    set BusNumber      = $(VALUE_UNKNOWN)
    set DmaChannel     = $(DEF_DMA_CHANNEL)
    set IrqNumber      = $(DEF_IRQ_NUMBER)
    set TxSlots        = $(DEF_TX_SLOTS)
    set RxSlots        = $(DEF_RX_SLOTS)
    set TransferType   = $(DEF_TRANSFER_TYPE)
    set TestXID        = $(DEF_TEST_XID)
    set MacOpenMode    = $(DEF_MAC_OPEN_MODE)
    set StatsGathering = $(DEF_STATS_GATHERING)
    set Wol            = $(DEF_WOL)
    set QuietMode      = $(DEF_QUIET_MODE)
    set RingStatus     = $(DEF_RING_STATUS_MASK)
    set EventLog       = $(DEF_EVENT_LOG_MASK)
    set Watchdog       = $(DEF_WATCHDOG)
    set L1             = ""
    set L2             = ""
    set L3             = ""
    set L4             = ""
    set L5             = ""
    set L6             = ""
    set LAA            = ""
    set NetworkAddress = ""
    set PcmciaMemWin         = $(DEF_PCMCIAMEMWIN)
    set PcmciaMemWinLen      = $(DEF_PCMCIAMEMWINLEN)
    ;
    ; These values will not be changed during an installation but setting
    ; them here allows the code that writes to the registry to be independent
    ; of whether we're installing or configuring.
    ;
    set OldMaxFrameSize   = $(VALUE_UNKNOWN)
    set OldSpeedFlag      = $(VALUE_UNKNOWN)
    set OldIrq            = $(VALUE_UNKNOWN)
    set OldDma            = $(VALUE_UNKNOWN)
    set OldTxSlots        = $(VALUE_UNKNOWN)
    set OldRxSlots        = $(VALUE_UNKNOWN)
    set OldTransferType   = $(VALUE_UNKNOWN)
    set OldTestXID        = $(VALUE_UNKNOWN)
    set OldMacOpen        = $(VALUE_UNKNOWN)
    set OldStatsGathering = $(VALUE_UNKNOWN)
    set OldWol            = $(VALUE_UNKNOWN)
    set OldQuiet          = $(VALUE_UNKNOWN)
    set OldRingStatus     = $(VALUE_UNKNOWN)
    set OldEventLog       = $(VALUE_UNKNOWN)
    set OldWatchdog       = $(VALUE_UNKNOWN)
    set OldLAA            = $(VALUE_UNKNOWN)
    set OldNetworkAddress = $(VALUE_UNKNOWN)
    set OldPcmciaMemWin         = $(VALUE_UNKNOWN)
    set OldPcmciaMemWinLen      = $(VALUE_UNKNOWN)
    ifstr(i) $(Option) == "MDGCARDBUS"
    ;
        ;
        ; Make default transfer type 16bit PIO for CardBus when using
        ; a third-party Card Services since DMA seems to cause problems.
        ; Note that CardBus Mk2 only supports DMA.
        ;
        ifstr $(MadgeCB) != $(TRUE)
        ;
            set TransferType = 1
        ;
        endif
    ;
    endif
    ;
    ; Now set up the options for adapter options.
    ;
    ifcontains(i) $(Option) in $(SlotNumberAdapters)
    ;
        set TypeList = {{SLOTNUMBER,DummyList1,SlotNumber}}
    ;
    else-ifcontains(i) $(DetectOption) in $(OlicomPcmciaAdapters)
    ;
        set TypeList = {{IOLOCATION,DummyList1,IoLocation},+
                        {INTERRUPTNUMBER,DummyList2,IrqNumber},+
                        {MEMADDR,DummyList3,PcmciaMemWin},+
                        {MEMADDRLENGTH,DummyList4,PcmciaMemWinLen}}
    ;
    else-ifcontains(i) $(DetectOption) in $(PcmciaAdapters)
    ;
        set TypeList = {{IOLOCATION,DummyList1,IoLocation},+
                        {INTERRUPTNUMBER,DummyList2,IrqNumber}}
    ;
    else
    ;
        set TypeList = {{IOLOCATION,DummyList1,IoLocation}}
    ;
    endif
    Shell $(ParamInf) Param_BuildTypeLists $(Option) $(TypeList)
    set Status = $($R0)
    ifstr(i) $(Status) != STATUS_SUCCESSFUL
    ;
        goto Fatal
    ;
    endif
    ;
    ; If the adapter was automatically detected then call the
    ; DLL to find out what the parameters are.
    ;
    ifstr(i) $(AdapterDetected) == TRUE
    ;
        Shell $(ParamInf) Param_QueryCard $(DetectIndex)
        set Status    = $($R0)
        set ParamList = $($R1)
        ifstr(i) $(Status) != STATUS_SUCCESSFUL
        ;
            goto Fatal
        ;
        endif
    ;
    endif
    ;
    ; And set the defaults. This will be the automatically detected
    ; value if the adapter was detected or the first allowable choice
    ; otherwise.
    ;
    Shell $(ParamInf) Param_SetDefaults $(ParamList)
    ifstr(i) $(MadgeCB) == $(TRUE)
    ;
        set IoLocation = $(DEF_CARDBUS_IO_LOCATION)
    ;
    endif
    Debug-Output "MADGE: SlotNumber       = "$(SlotNumber)
    Debug-Output "MADGE: IoLocation       = "$(IoLocation)
    Debug-Output "MADGE: IrqNumber        = "$(IrqNumber)
    ifcontains(i) $(DetectOption) in $(OlicomPcmciaAdapters)
        Debug-Output "MADGE: PcmciaMemWin     = "$(PcmciaMemWin)
        Debug-Output "MADGE: PcmciaMemWinLen  = "$(PcmciaMemWinLen)
    endif
    EndWait
    goto Get_Adapter_Options
; -----------------------------------------------------------------------
; Configuration Section
; -----------------------------------------------------------------------
Configure_Adapter = +
    ifcontains(i) $(Option) in $(CardbusAdapters)
    ;
        ;
        ; Determine whether Award, SystemSoft or Softex install. If none of
        ; these Card Services are detected, default to our internal enabler.
        ;
        set MadgeCB = $(TRUE)
        OpenRegKey $(!REG_H_LOCAL) "" $(AwardKey) $(MAXIMUM_ALLOWED) KeyCBProduct
        ifstr $(KeyCBProduct) != $(KeyNull)
        ;
            Debug-Output "Award software installed"
            set AwardCB = $(TRUE)
            set MadgeCB = $(FALSE)
            CloseRegKey $(KeyCBProduct)
        ;
        endif
        OpenRegKey $(!REG_H_LOCAL) "" $(SystemSoftKey) $(MAXIMUM_ALLOWED) KeyCBProduct
        ifstr $(KeyCBProduct) != $(KeyNull)
        ;
            Debug-Output "SystemSoft software installed"
            set SSoftCB = $(TRUE)
            set MadgeCB = $(FALSE)
            CloseRegKey $(KeyCBProduct)
        ;
        endif
        OpenRegKey $(!REG_H_LOCAL) "" $(SoftexKey1) $(MAXIMUM_ALLOWED) KeyCBProduct
        ifstr $(KeyCBProduct) != $(KeyNull)
        ;
            CloseRegKey $(KeyCBProduct)
            OpenRegKey $(!REG_H_LOCAL) "" $(SoftexKey2) $(MAXIMUM_ALLOWED) KeyCBProduct
            ifstr $(KeyCBProduct) != $(KeyNull)
            ;
                Debug-Output "Softex software installed"
                set SoftexCB = $(TRUE)
                set MadgeCB = $(FALSE)
                CloseRegKey $(KeyCBProduct)
            ;
            endif
        ;
        endif
    ;
    endif
    StartWait
    ;
    ; Set up the defaults not done by the helper interface in the
    ; detection DLL.
    ;
    set MaxFrameSize   = $(DEF_MAX_FRAME_SIZE)
    set SpeedFlag      = $(DEF_SPEED)
    set BusType        = $(VALUE_UNKNOWN)
    set BusNumber      = $(VALUE_UNKNOWN)
    set DmaChannel     = $(DEF_DMA_CHANNEL)
    set IrqNumber      = $(DEF_IRQ_NUMBER)
    set TxSlots        = $(DEF_TX_SLOTS)
    set RxSlots        = $(DEF_RX_SLOTS)
    set TransferType   = $(DEF_TRANSFER_TYPE)
    set TestXID        = $(DEF_TEST_XID)
    set MacOpenMode    = $(DEF_MAC_OPEN_MODE)
    set StatsGathering = $(DEF_STATS_GATHERING)
    set Wol            = $(DEF_WOL)
    set QuietMode      = $(DEF_QUIET_MODE)
    set RingStatus     = $(DEF_RING_STATUS_MASK)
    set EventLog       = $(DEF_EVENT_LOG_MASK)
    set Watchdog       = $(DEF_WATCHDOG)
    set L1             = ""
    set L2             = ""
    set L3             = ""
    set L4             = ""
    set L5             = ""
    set L6             = ""
    set LAA            = ""
    set NetworkAddress = ""
    ;
    ; Set the old values up to be unknown - they will only be set if the
    ; registry parameter is there.
    ;
    set OldMaxFrameSize   = $(VALUE_UNKNOWN)
    set OldSpeedFlag      = $(VALUE_UNKNOWN)
    set OldIrq            = $(VALUE_UNKNOWN)
    set OldDma            = $(VALUE_UNKNOWN)
    set OldTxSlots        = $(VALUE_UNKNOWN)
    set OldRxSlots        = $(VALUE_UNKNOWN)
    set OldTransferType   = $(VALUE_UNKNOWN)
    set OldTestXID        = $(VALUE_UNKNOWN)
    set OldMacOpen        = $(VALUE_UNKNOWN)
    set OldStatsGathering = $(VALUE_UNKNOWN)
    set OldWol            = $(VALUE_UNKNOWN)
    set OldQuiet          = $(VALUE_UNKNOWN)
    set OldRingStatus     = $(VALUE_UNKNOWN)
    set OldEventLog       = $(VALUE_UNKNOWN)
    set OldWatchdog       = $(VALUE_UNKNOWN)
    set OldLAA            = $(VALUE_UNKNOWN)
    set OldNetworkAddress = $(VALUE_UNKNOWN)
    set OldPcmciaMemWin         = $(VALUE_UNKNOWN)
    set OldPcmciaMemWinLen      = $(VALUE_UNKNOWN)
    ifstr(i) $(Option) == "MDGCARDBUS"
    ;
        ;
        ; Make default transfer type 16bit PIO for CardBus when using
        ; a third-party Card Services since DMA seems to cause problems.
        ; Note that CardBus Mk2 only supports DMA.
        ;
        ifstr $(MadgeCB) != $(TRUE)
        ;
            set TransferType = 1
        ;
        endif
    ;
    endif
    ;
    ; Initialise the detection DLL.
    ;
    Shell $(ParamInf) Param_ControlDetection DTEND
    Shell $(ParamInf) Param_ControlDetection DTSTART
    ;
    ; Now set up the options for adapter options.
    ;
    ifcontains(i) $(Option) in $(SlotNumberAdapters)
    ;
        set TypeList = {{SLOTNUMBER,DummyList1,SlotNumber}}
    ;
    else-ifcontains(i) $(DetectOption) in $(OlicomPcmciaAdapters)
    ;
        set TypeList = {{IOLOCATION,DummyList1,IoLocation},+
                        {INTERRUPTNUMBER,DummyList2,IrqNumber},+
                        {MEMADDR,DummyList3,PcmciaMemWin},+
                        {MEMADDRLENGTH,DummyList4,PcmciaMemWinLen}}
    ;
    else-ifcontains(i) $(DetectOption) in $(PcmciaAdapters)
    ;
        set TypeList = {{IOLOCATION,DummyList1,IoLocation},+
                        {INTERRUPTNUMBER,DummyList2,IrqNumber}}
    ;
    else
    ;
        set TypeList = {{IOLOCATION,DummyList1,IoLocation}}
    ;
    endif
    Shell $(ParamInf) Param_BuildTypeLists $(Option) $(TypeList)
    set Status = $($R0)
    ifstr(i) $(Status) != STATUS_SUCCESSFUL
    ;
        goto Fatal
    ;
    endif
    ;
    ; And set the defaults.
    ;
    Shell $(ParamInf) Param_SetDefaults $(ParamList)
    ifstr(i) $(MadgeCB) == $(TRUE)
    ;
        set IoLocation = $(DEF_CARDBUS_IO_LOCATION)
    ;
    endif
    Debug-Output "MADGE: SlotNumber = "$(SlotNumber)
    Debug-Output "MADGE: IoLocation = "$(IoLocation)
    Debug-Output "MADGE: IrqNumber  = "$(IrqNumber)
    ;
    ; NB !NTN_RegBase, for hardware components, is :
    ;    \SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\0x
    ;
    ;
    ; This next IF is redundant - it will always be NULL
    ;
    ifstr $(KeyProduct) == $(KeyNull)
    ;
        OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_RegBase) $(MAXIMUM_ALLOWED) KeyProduct
        ifstr $(KeyProduct) == $(KeyNull)
        ;
            set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
            goto Fatal_Registry
        ;
        endif
    ;
    endif
    ;
    ; Get the other parameters; they're attached to the service
    ; parameters key
    ;
    Shell $(UtilityInf) FindService, $(KeyProduct)
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
    ;
        goto Shell_Code_Error
    ;
    endif
    ifstr(i) $($R0) != NO_ERROR
    ;
        goto Fatal_Registry
    ;
    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
        goto Fatal_Registry
    ;
    endif
    set OldVersionExisted = $(TRUE)
    ;
    ; Get the old values
    ;
    set ValueName = ""
    set ValueData = ""
    set ValueStr  = ""
    set ValueList = {}
    EnumRegValue $(KeyParameters) ValueList
    ForListDo $(ValueList)
    ;
        set ValueItem = $($)
        set ValueName = *($(ValueItem),1)
        set ValueData = *($(ValueItem),4)
        ifstr(i) $(ValueName) == "IoBaseAddress"
        ;
            set IoLocation = $(ValueData)
        ;
        else-ifstr(i) $(ValueName) == "SlotNumber"
        ;
            set SlotNumber = $(ValueData)
        ;
        else-ifstr(i) $(ValueName) == "NetworkAddress"
        ;
            set NetworkAddress = $(ValueData)
            set OldNetworkAddress = $(ValueData)
        ;
        else-ifstr(i) $(ValueName) == "RingSpeed"
        ;
            set SpeedFlag    = $(ValueData)
            set OldSpeedFlag = $(ValueData)
        ;
        else-ifstr(i) $(ValueName) == "BusType"
        ;
            set BusType = $(ValueData)
        ;
        else-ifstr(i) $(ValueName) == "BusNumber"
        ;
            set BusNumber = $(ValueData)
        ;
        else-ifstr(i) $(ValueName) == "InterruptNumber"
        ;
            set IrqNumber = $(ValueData)
            set OldIrq    = $(ValueData)
        ;
        else-ifstr(i) $(ValueName) == "MaxFrameSize"
        ;
            set MaxFrameSize    = $(ValueData)
            set OldMaxFrameSize = $(ValueData)
        ;
        else-ifstr(i) $(ValueName) == "DMAChannel"
        ;
            set DmaChannel = $(ValueData)
            set OldDma     = $(ValueData)
        ;
        else-ifstr(i) $(ValueName) == "TxSlots"
        ;
            set TxSlots    = $(ValueData)
            set OldTxSlots = $(ValueData)
        ;
        else-ifstr(i) $(ValueName) == "RxSlots"
        ;
            set RxSlots    = $(ValueData)
            set OldRxSlots = $(ValueData)
        ;
        else-ifstr(i) $(ValueName) == "TransferType"
        ;
            set TransferType    = $(ValueData)
            set OldTransferType = $(ValueData)
        ;
        else-ifstr(i) $(ValueName) == "TestAndXIDEnabled"
        ;
            set TestXID    = $(ValueData)
            set OldTestXID = $(ValueData)
        ;
        else-ifstr(i) $(ValueName) == "MacOpen"
        ;
            set MacOpenMode = $(ValueData)
            set OldMacOpen  = $(ValueData)
        ;
        else-ifstr(i) $(ValueName) == "StatsGathering"
        ;
            set StatsGathering    = $(ValueData)
            set OldStatsGathering = $(ValueData)
        ;
        else-ifstr(i) $(ValueName) == "WOL"
        ;
            set Wol    = $(ValueData)
            set OldWol = $(ValueData)
        ;
        else-ifstr(i) $(ValueName) == "Quiet"
        ;
            set QuietMode = $(ValueData)
            set OldQuiet  = $(ValueData)
        ;
        else-ifstr(i) $(ValueName) == "RingStatusMask"
        ;
            set RingStatus    = $(ValueData)
            set OldRingStatus = $(ValueData)
        ;
        else-ifstr(i) $(ValueName) == "EventMask"
        ;
            set EventLog      = $(ValueData)
            set OldEventLog   = $(ValueData)
        ;
        else-ifstr(i) $(ValueName) == "Watchdog"
        ;
            set Watchdog    = $(ValueData)
            set OldWatchdog = $(ValueData)
        ;
        else-ifstr(i) $(ValueName) == "PCCARDAttributeMemoryAddress"
        ;
            set PcmciaMemWin    = $(ValueData)
            set OldPcmciaMemWin = $(ValueData)
        Debug-Output "MADGE: PcmciaMemWin     = "$(PcmciaMemWin)
        ;
        else-ifstr(i) $(ValueName) == "PCCARDAttributeMemorySize"
        ;
            set PcmciaMemWinLen = $(ValueData)
            set OldPcmciaMemWinLen = $(ValueData)
        Debug-Output "MADGE: PcmciaMemWinLen  = "$(PcmciaMemWinLen)
        ;
        endif
    ;
    EndForListDo
    ifstr(i) $(NetworkAddress) != ""
    ;
        ;
        ; Convert 12 digit network address into hyphen seperated LAA
        ;
        LoadLibrary "x" $(DialogDllName) MdgDialog
        set FLibraryErrCtl = 1
        LibraryProcedure MdgResult $(MdgDialog) MadgeSplitLAA $(NetworkAddress)
        set FLibraryErrCtl = 0
        FreeLibrary $(MdgDialog)
        ifstr $(MdgResult) != "LAA Split Failure"
        ;
            set LAA = $(MdgResult)
            Debug-Output "MADGE: LAA = "$(LAA)
        ;
        endif

        Split-String $(LAA) "-" SplitAddress
        QueryListSize SplitAddressSize $(SplitAddress)
        ifint $(SplitAddressSize) == 11
        ;
            set L1 = *($(SplitAddress), 1)
            set L2 = *($(SplitAddress), 3)
            set L3 = *($(SplitAddress), 5)
            set L4 = *($(SplitAddress), 7)
            set L5 = *($(SplitAddress), 9)
            set L6 = *($(SplitAddress), 11)
        ;
        endif
    ;
    endif
    EndWait
; -----------------------------------------------------------------------
; Let the user set options.
; -----------------------------------------------------------------------
Get_Adapter_Options = +
    StartWait
    ;
    ; Set up the adapter specific constants.
    ;
    set AdapOption = $(Option)
    read-syms AdapterConstants
    EndWait
Get_Adapter_Options_Restart = +
    ;
    ; We will start here if parameter validation fails.
    ;
    StartWait
    set From = Get_Adapter_Options_Restart
    ;
    ; Map the currently selected values into user from.
    ;
    ifcontains(i) $(Option) in $(SlotNumberAdapters)
    ;
        set SlotNumber = *($(LocList),~($(LocRawList),$(SlotNumber)))
    ;
    else
    ;
        set IoLocation = *($(LocList),~($(LocRawList),$(IoLocation)))
    ;
    endif
    set SpeedFlag      = *($(SpeedList),~($(SpeedRawList),$(SpeedFlag)))
    set IrqNumber      = *($(IrqList),~($(IrqRawList),$(IrqNumber)))
    set DmaChannel     = *($(DmaList),~($(DmaRawList),$(DmaChannel)))
    set TxSlots        = *($(TxList),~($(TxRawList),$(TxSlots)))
    set RxSlots        = *($(RxList),~($(RxRawList),$(RxSlots)))
    set TransferType   = *($(TransferList),~($(TransferRawList),$(TransferType)))
    set TestXID        = *($(TestXIDList),~($(TestXIDRawList),$(TestXID)))
    set MacOpenMode    = *($(MacOpenList),~($(MacOpenRawList),$(MacOpenMode)))
    set StatsGathering = *($(StatsList),~($(StatsRawList),$(StatsGathering)))
    set Wol            = *($(WolList),~($(WolRawList),$(Wol)))
    set QuietMode      = *($(QuietList),~($(QuietRawList),$(QuietMode)))
    set Watchdog       = *($(WatchdogList),~($(WatchdogRawList),$(Watchdog)))
    set PcmciaMemWin   = *($(PcmciaMemWinList),~($(PcmciaMemWinRawList),$(PcmciaMemWin)))
    ifstr $(RingStatus) != ""
    ;
        set-dectohex RingStatus = $(RingStatus)
    ;
    endif
    ifstr $(EventLog) != ""
    ;
        set-dectohex EventLog = $(EventLog)
    ;
    endif
    ;
    ; Set up the input dialog box text and lists.
    ;
    set DlgTemplate = "MDG"
    Debug-Output "MADGE: DlgTemplate = "$(DlgTemplate)
    Debug-Output "MADGE: Reading syms FileDependentDlg"$(!STF_LANGUAGE)"Option"$(DlgTemplate)
    read-syms FileDependentDlg$(!STF_LANGUAGE)Option$(DlgTemplate)
    ;
    ; Unless we are doing an unattended installation then let the
    ; user press some keys.
    ; Actually we now dont want the user to have to do anything on install
    ; so bypass config box if during auto-install. Obviously if no adapter
    ; is found we need user to put in details.
    ;
    Debug-Output "MADGE: NumberFound = "$(NumberFound)
    ifint $(NumberFound) == 0
    ;
        ifstr(i) $(!STF_GUI_UNATTENDED) != "YES"
        ;
            LoadLibrary "x" $(DialogDllName) MdgDialog
            Debug-Output "MADGE: Got library"
            EndWait
            ifstr(i) $(ManualInstall) == "TRUE"
            ;
                set ManualInstall = FALSE
                ;
                ; Non-automated install so go to advanced box first to get
                ; the IO/slot/DevID. If we are installing a CardBus adapter
                ; we don't need to display the advanced box.
                ;

                ifcontains(i) $(Option) in $(CardbusAdapters)
                ;
                    goto Dialogs_Done
                ;
                endif

                goto Advanced_Options
            ;
            endif

Main_Install_Options = +

            set EditTextIn  = {$(L1), $(L2), $(L3), $(L4), $(L5), $(L6)}
            set EditTextLim = {2, 2, 2, 2, 2, 2}
            set EditTextOut = {$(L1), $(L2), $(L3), $(L4), $(L5), $(L6)}
            ui start "InputDlg" $(MdgDialog)
            StartWait
            Debug-Output "MADGE: "$(DLGEVENT)
            ifstr(i) $(DLGEVENT) == "EXIT"
            ;
                set CommonStatus = STATUS_USERCANCEL
                ui pop 1
                FreeLibrary $(MdgDialog)
                goto End
            ;
            else-ifstr(i) $(DLGEVENT) == "DLGBUTTON1"
            ;
                LoadLibrary "x" $(DialogDllName) MdgDialog
                set FLibraryErrCtl = 1
                LibraryProcedure MdgResult $(MdgDialog) MadgeStartHelp
                set FLibraryErrCtl = 0
                FreeLibrary $(MdgDialog)
                set L1        = *($(EditTextOut), 1)
                set L2        = *($(EditTextOut), 2)
                set L3        = *($(EditTextOut), 3)
                set L4        = *($(EditTextOut), 4)
                set L5        = *($(EditTextOut), 5)
                set L6        = *($(EditTextOut), 6)
                ui pop 1
                goto Main_Install_Options
            ;
            else-ifstr(i) $(DLGEVENT) == "DLGBUTTON0"
            ;
                set OldCombo2 = $(Combo2Out)
                set L1        = *($(EditTextOut), 1)
                set L2        = *($(EditTextOut), 2)
                set L3        = *($(EditTextOut), 3)
                set L4        = *($(EditTextOut), 4)
                set L5        = *($(EditTextOut), 5)
                set L6        = *($(EditTextOut), 6)
                ui pop 1
                goto Advanced_Options
            ;
            else-ifstr(i) $(DLGEVENT) != "CONTINUE"
            ;
                set CommonStatus = STATUS_USERCANCEL
                ui pop 1
                FreeLibrary $(MdgDialog)
                goto End
            ;
            endif
            ;
            ; Get the values the user selected out of the dialog box.
            ;
            set SpeedFlag = $(Combo2Out)
            set L1        = *($(EditTextOut), 1)
            set L2        = *($(EditTextOut), 2)
            set L3        = *($(EditTextOut), 3)
            set L4        = *($(EditTextOut), 4)
            set L5        = *($(EditTextOut), 5)
            set L6        = *($(EditTextOut), 6)
            ui pop 1
            FreeLibrary $(MdgDialog)
        ;
        endif
    ;
    endif
Dialogs_Done = +
    ;
    ; Convert the values the user has chosen into internal form.
    ;
    ifcontains(i) $(Option) in $(SlotNumberAdapters)
    ;
        set SlotNumber = *($(LocRawList),~($(LocList),$(SlotNumber)))
    ;
    else
    ;
        set IoLocation = *($(LocRawList),~($(LocList),$(IoLocation)))
    ;
    endif
                Debug-Output "IO4="$(IoLocation)
                Debug-Output "SN4="$(SlotNumber)
    ifstr $(RingStatus) != ""
    ;
        set-hextodec RingStatus = $(RingStatus)
    ;
    endif
    ifstr $(EventLog) != ""
    ;
        set-hextodec EventLog = $(EventLog)
    ;
    endif
    set SpeedFlag      = *($(SpeedRawList),~($(SpeedList),$(SpeedFlag)))
    set IrqNumber      = *($(IrqRawList),~($(IrqList),$(IrqNumber)))
    set DmaChannel     = *($(DmaRawList),~($(DmaList),$(DmaChannel)))
    set TxSlots        = *($(TxRawList),~($(TxList),$(TxSlots)))
    set RxSlots        = *($(RxRawList),~($(RxList),$(RxSlots)))
    set TransferType   = *($(TransferRawList),~($(TransferList),$(TransferType)))
    set TestXID        = *($(TestXIDRawList),~($(TestXIDList),$(TestXID)))
    set MacOpenMode    = *($(MacOpenRawList),~($(MacOpenList),$(MacOpenMode)))
    set StatsGathering = *($(StatsRawList),~($(StatsList),$(StatsGathering)))
    set Wol            = *($(WolRawList),~($(WolList),$(Wol)))
    set QuietMode      = *($(QuietRawList),~($(QuietList),$(QuietMode)))
    set Watchdog       = *($(WatchdogRawList),~($(WatchdogList),$(Watchdog)))
    set PcmciaMemWin   = *($(PcmciaMemWinRawList),~($(PcmciaMemWinList),$(PcmciaMemWin)))
    ifstr $(L1)$(L2)$(L3)$(L4)$(L5)$(L6) == ""
    ;
        set LAA = ""
        set NetworkAddress = ""
    ;
    else
    ;
        set LAA            = $(L1)"-"$(L2)"-"$(L3)"-"$(L4)"-"$(L5)"-"$(L6)
        set NetworkAddress = $(L1)$(L2)$(L3)$(L4)$(L5)$(L6)
    ;
    endif
    Debug-Output "MADGE: SlotNumber = "$(SlotNumber)
    Debug-Output "MADGE: IoLocation = "$(IoLocation)
    Debug-Output "MADGE: SpeedFlag  = "$(SpeedFlag)
    ifstr(i) $(UnattendLAA) != ""
    ;
        Debug-Output "MADGE: UnattendLAA = "$(UnattendLAA)

        set NetworkAddress = $(UnattendLAA)

        ;
        ; Call dll to split 12 digit laa into hyphen seperated
        ; byte values
        ;
        LoadLibrary "x" $(DialogDllName) MdgDialog
        set FLibraryErrCtl = 1
        LibraryProcedure MdgResult $(MdgDialog) MadgeSplitLAA $(UnattendLAA)
        set FLibraryErrCtl = 0
        FreeLibrary $(MdgDialog)
        ifstr $(MdgResult) != "LAA Split Failure"
        ;
            set LAA = $(MdgResult)
            Debug-Output "MADGE: LAA = "$(LAA)
        ;
        endif
    ;
    endif
    EndWait
    goto Adapter_Verify
; -----------------------------------------------------------------------
; Kick off advanced user options dialog box and check that anything
; input is sensible.
; -----------------------------------------------------------------------
Advanced_Options = +
    Debug-Output "MADGE: Advanced Options"
    ;
    ; set title to include ADVANCED so user knows they are in advanced box.
    ;
    set FunctionTitle = "MDGMPORT v"$(VersionString)": Madge ADVANCED Token Ring Adapter Setup"
    ;
    ; Run through the symbols to set up the default combos
    ;
    read-syms FileDependentDlg$(!STF_LANGUAGE)Option$(DlgTemplate)
    set EditTextIn  = {$(MaxFrameSize), $(RingStatus), $(EventLog)}
    set EditTextLim = {5, 6, 6}
    set EditTextOut = {$(MaxFrameSize), $(RingStatus), $(EventLog)}
    ;
    ; To allow us to re-use the dialog box for PCI-EISA we need
    ; to change Combo1Label and Combo1Out.
    ;
    ifcontains(i) $(Option) in $(SlotNumberAdapters)
    ;
        set Combo1Out   = $(SlotNumber)
        set Combo1Label = $(PciCombo1Label)
    ;
    else-ifstr(i) $(Option) == "MDGEISA"
    ;
        set Combo1Out   = $(IoLocation)
        set Combo1Label = $(EisaCombo1Label)
    ;
    endif

    ;
    ; Similarly, change the Wol combo box to PCMCIA Memory window
    ; for Olicom PCMCIA cards
    ;
    ifcontains(i) $(Option) in $(OlicomPcmciaAdapters)
    ;
        set Combo14Out  = $(PcmciaMemWin)
        set Combo14Label = $(OlicomPcmciaCombo14Label)
        set Combo14List = $(PcmciaMemWinList)
    ;
    endif
    ;
    ; ... and disable the watchdog on Hawkeye/Bullseye cards
    ;
    ifcontains(i) $(Option) in $(OlicomHebeAdapters)
    ;
        set Combo13List = $(DisabledOnlyList)
    ;
    endif
; ----------------------------------------------------------------------
; Then display the dialog box
; ----------------------------------------------------------------------
    set DlgTemplate = "MDGADVANCED"
    ;
    ; Don't need to worry about unattended install here
    ;
    EndWait
Advanced_Dialog = +
    ui start "InputDlg" $(MdgDialog)
    StartWait
; ----------------------------------------------------------------------
; Extract the values from the dialog box.
; ----------------------------------------------------------------------
    ifstr(i) $(DLGEVENT) == "CONTINUE"
    ;
        ifcontains(i) $(Option) in $(SlotNumberAdapters)
        ;
            set SlotNumber   = $(Combo1Out)
            set IoLocation   = ""
            Debug-Output "MADGE: IO1="$(IoLocation)
            Debug-Output "MADGE: SN1="$(SlotNumber)
        ;
        else
        ;
            set IoLocation   = $(Combo1Out)
            set SlotNumber   = ""
            Debug-Output "MADGE: IO2="$(IoLocation)
            Debug-Output "MADGE: SN2="$(SlotNumber)
        ;
        endif
        set IrqNumber      = $(Combo4Out)
        set DmaChannel     = $(Combo5Out)
        set TxSlots        = $(Combo6Out)
        set RxSlots        = $(Combo7Out)
        set TransferType   = $(Combo8Out)
        set TestXID        = $(Combo9Out)
        set MacOpenMode    = $(Combo10Out)
        set StatsGathering = $(Combo11Out)
        set QuietMode      = $(Combo12Out)
        set Watchdog       = $(Combo13Out)
        ;
        ifcontains(i) $(Option) in $(OlicomPcmciaAdapters)
        ;
            set PcmciaMemWin = $(Combo14Out)
            ; If we don't already have a PcmciaMemWinLen then set it
            ; (i.e. not autodetect install)
            ifstr(i) $(PcmciaMemWinLen) == "0"
            ;
                set PcmciaMemWinLen = 4096
            ;
            endif
            ;
        ;
        else
        ;
            set Wol          = $(Combo14Out)
        ;
        endif
        ;
        set MaxFrameSize   = *($(EditTextOut), 1)
        set RingStatus     = *($(EditTextOut), 2)
        set EventLog       = *($(EditTextOut), 3)
    ;
    else-ifstr(i) $(DLGEVENT) == "DLGBUTTON1"
    ;
        LoadLibrary "x" $(DialogDllName) MdgDialog
        set FLibraryErrCtl = 1
        LibraryProcedure MdgResult $(MdgDialog) MadgeStartHelp
        set FLibraryErrCtl = 0
        FreeLibrary $(MdgDialog)
        ui pop 1
        goto Advanced_Dialog
    ;
    endif
; ----------------------------------------------------------------------
; All the same stuff as above so the main dialog open without reloading
; the dll
; ----------------------------------------------------------------------
    ui pop 1
    set DlgTemplate = "MDG"
    set FunctionTitle = "MDGMPORT v"$(VersionString)": Madge Token Ring Adapter Setup"
    read-syms FileDependentDlg$(!STF_LANGUAGE)Option$(DlgTemplate)
    set Combo2Out   = $(OldCombo2)
; ----------------------------------------------------------------------
; And finally return to main options dialog
; ----------------------------------------------------------------------
    goto Main_Install_Options
; -----------------------------------------------------------------------
; Verify the main install adapter options.
; -----------------------------------------------------------------------
Adapter_Verify = +
    StartWait
    ;
    ; If the user entered an LAA then validate it.
    ;
    ifstr $(LAA) != ""
    ;
        ;
        ; NB A line of spaces will come through here, and will fail the
        ;    check - do we want this?
        ;
        LoadLibrary "x" $(DialogDllName) MdgDialog
        set FLibraryErrCtl = 1
        LibraryProcedure MdgResult $(MdgDialog) MadgeLAACheck $(LAA)
        set FLibraryErrCtl = 0
        FreeLibrary $(MdgDialog)
        ifstr $(MdgResult) != "MADGE_STATUS_SUCCESS"
        ;
            ;
            ; Illegal LAA supplied in the install dialog
            ; Display error message and go around again
            ;
            set Error = $(MdgResult)
            ;
            ; This will go back to Get_Adapter_Options or to end.
            ;
            goto Non_Fatal
        ;
        endif
    ;
    endif
    ;
    ; Ring Status mask should be between 0 and 3fff
    ;
    ifstr $(RingStatus) != ""
    ;
        ifint $(RingStatus) < 0
        ;
            set RingStatus = 16383
            set Error      = $(INVALID_RING_STAT)
            set From       = Adapter_Verify
            goto Non_Fatal_Info
        ;
        endif
        ifint $(RingStatus) > 65535
        ;
            set RingStatus = 16383
            set Error      = $(INVALID_RING_STAT)
            set From       = Adapter_Verify
            goto Non_Fatal_Info
        ;
        endif
    ;
    endif
    ;
    ; 17839 is the maximum frame size at 16Mbps, while at 4Mbps it is 4472.
    ; Unfortunately, we can't tell here what the ring speed is, so guess at
    ; 16Mbps, which is the most sensible.
    ;
    ifint $(MaxFrameSize) > 17839
    ;
        set MaxFrameSize = 17839
        set Error        = $(TRIMMED_MFS)
        set From         = Adapter_Verify
        goto Non_Fatal_Info
    ;
    endif
    ifint $(MaxFrameSize) < 256
    ;
        set MaxFrameSize = 256
        set Error        = $(INVALID_MFS)
        set From         = Adapter_Verify
        goto Non_Fatal_Info
    ;
    endif
    EndWait
; -----------------------------------------------------------------------
; We have checked the options so add the software parameters to the
; registry.
; -----------------------------------------------------------------------
Update_Registry = +
    ;
    ; If installing, go create the necessary keys;
    ; if configuring, they're already open.
    ;
    ifint $(OldVersionExisted) == $(TRUE)
    ;
        ifstr(i) $(!NTN_InstallMode) == configure
        ;
            goto Write_Parameters
        ;
        endif
    ;
    endif
    StartWait
    ;
    ; Add Software Component.
    ;
    ifint $(OldVersionExisted) == $(FALSE)
    ;
        Shell $(UtilityInf), AddSoftwareComponent, $(Manufacturer), +
            $(ProductSoftwareName), +
            $(ProductSoftwareName), +
            $(ProductSoftwareTitle), $(STF_CONTEXTINFNAME), +
            $(ProductSoftwareImagePath), "kernel", "NDIS", {}, "",+
            $(MadgeEventLogFile)
        Set OEM_ABANDON_SOFTWARE = TRUE
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
        ;
            goto Shell_Code_Error
        ;
        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)
        set KeyProduct         = $($R1)
        Set SoftNetRulesKey    = $($R2)
        CloseRegKey $($R3)
        CloseRegKey $($R4)
        CloseRegKey $($R5)
        ifstr(i) $(RegistryErrorIndex) != NO_ERROR
        ;
            CloseRegKey $(KeyProduct)
            CloseRegKey $(SoftNetRulesKey)
            goto Fatal_Registry
        ;
        endif
        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)},+
                   {PathName,$(NoTitle),$(!REG_VT_SZ),$(!STF_CWDDIR)},+
                   {ServiceName,$(NoTitle),$(!REG_VT_SZ),$(ProductSoftwareName)},+
                   {InstallDate,$(NoTitle),$(!REG_VT_DWORD),*($(Now),1)}}
        Shell $(UtilityInf), AddValueList, $(KeyProduct), $(NewValueList)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
        ;
            goto Shell_Code_Error
        ;
        endif
        set RegistryErrorIndex = $($R0)
        ifstr(i) $(RegistryErrorIndex) != NO_ERROR
        ;
            CloseRegKey $(KeyProduct)
            CloseRegKey $(SoftNetRulesKey)
            goto Fatal_Registry
        ;
        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)}, +
                    {Infname ,$(NoTitle),$(!REG_VT_SZ),$(STF_CONTEXTINFNAME)} }
        Shell $(UtilityInf), AddValueList, $(SoftNetRulesKey), $(NewValueList)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
        ;
            goto Shell_Code_Error
        ;
        endif
        set RegistryErrorIndex = $($R0)
        CloseRegKey $(KeyProduct)
        CloseRegKey $(SoftNetRulesKey)
        ifstr(i) $(RegistryErrorIndex) != NO_ERROR
        ;
            goto Fatal_Registry
        ;
        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)
    ;
        goto Shell_Code_Error
    ;
    endif
    set RegistryErrorIndex = $($R0)
    ifstr(i) $(RegistryErrorIndex) != NO_ERROR
    ;
        CloseRegKey $($R1)
        CloseRegKey $($R2)
        CloseRegKey $($R3)
        goto Fatal_Registry
    ;
    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))},+
               {Description,$(NoTitle),$(!REG_VT_SZ),$(ProductHardware$(Option))},+
               {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)
    ;
        goto Shell_Code_Error
    ;
    endif
    CloseRegKey $($R1)
    set TempProdName = """"$(ProductHardwareName)$(AdapterNumber)""""
    set TempBindForm = $(TempProdName)$(NetRuleHardwareBindForm)
    set NewValueList = {{type,$(NoTitle),$(!REG_VT_SZ),$(NetRuleHardwareType)},+
            {bindform,$(NoTitle),$(!REG_VT_SZ),$(TempBindForm)}, +
            {class,$(NoTitle),$(!REG_VT_MULTI_SZ),$(NetRuleHardwareClass)}, +
            {InfOption,$(NoTitle),$(!REG_VT_SZ),$(Option)}, +
            {Infname ,$(NoTitle),$(!REG_VT_SZ),$(STF_CONTEXTINFNAME)}}
    Shell $(UtilityInf), AddValueList, $(KeyAdapterRules), $(NewValueList)
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
    ;
        goto Shell_Code_Error
    ;
    endif
    set RegistryErrorIndex = $($R0)
    ifstr(i) $(RegistryErrorIndex) != NO_ERROR
    ;
        CloseRegKey $(KeyParameters)
        CloseRegKey $(KeyAdapterRules)
        goto Fatal_Registry
    ;
    endif
    CloseRegKey $(KeyAdapterRules)
    EndWait
; ----------------------------------------------------------------------
; Write the adapter parameters into the registry.
; ----------------------------------------------------------------------
;
; REQUIRED: $(KeyParameters) contains service Parameters key handle.
;
Write_Parameters = +
    StartWait
                Debug-Output "IO5="$(IoLocation)
                Debug-Output "SN5="$(SlotNumber)
    ;
    ; If we have done an automatic installation then use the
    ; detected bus type and bus number values.
    ;
    ifstr(i) $(AdapterDetected) == TRUE
    ;
        Debug-Output "MADGE: Adapter detected bus no = "$(DetectBusNumber)
        set BusType   = $(DetectBusType)
        set BusNumber = $(DetectBusNumber)
    ;
    endif
    ;
    ; If we are doing an unattended installation and bus overrides
    ; have been specified then us these.
    ;
    ifstr(i) $(!STF_GUI_UNATTENDED) == "YES"
    ;
        ifstr(i) $(!AutoNetInterfaceType) != ""
        ;
            set BusType = $(!AutoNetInterfaceType)
        ;
        endif
        ifstr(i) $(!AutoNetBusNumber) != ""
        ;
            set BusNumber = $(!AutoNetBusNumber)
        ;
        endif
    ;
    endif
    ;
    ; If either bus type or bus number is not known then ask the user
    ; to supply them.
    ;
    ifint $(BusType) == $(VALUE_UNKNOWN)
    ;
        set BusNumber = $(VALUE_UNKNOWN)
    ;
    endif
    ifcontains(i) $(Option) in $(CardbusAdapters)
    ;
        ;
        ; This is a cardbus manual install and the bus number and type are
        ; irrelevant to the driver, so just fill in 5 for PCI bus and 0 for no.
        ;
        set BusType = 5
        set BusNumber = 0
    ;
    endif
    ifstr(i) $(!STF_GUI_UNATTENDED) != "YES"
    ;
        ifint $(BusNumber) == $(VALUE_UNKNOWN)
        ;
            Shell $(UtilityInf), GetBusTypeDialog, $(ProductHardware$(Option)Description)
            ifint $($ShellCode) != $(!SHELL_CODE_OK)
            ;
                goto Shell_Code_Error
            ;
            endif
            ifstr(i) $($R0) == ERROR
            ;
                Shell $(UtilityInf), GetBusTypeNum
                ifint $($ShellCode) != $(!SHELL_CODE_OK)
                ;
                   goto Shell_Code_Error
                ;
                endif
                set BusType   = $($R1)
                set BusNumber = 0
            ;
            else
            ;
                set BusType   = $($R1)
                set BusNumber = $($R2)
            ;
            endif
        ;
        endif
    ;
    endif

    ;
    ; It would appear that when installing a PCMCIA adapter
    ; one should give the bus type of the PCMCIA controller
    ; rather than PCMCIA itself.
    ;
    ifcontains(i) $(Option) in $(PcmciaAdapters)
    ;
        set BusType = 1
    ;
    endif
    ;
    ; Derive the adapter type.
    ;
    set AdapterTypeFlag = $(AdapterTypeFlag$(Option))
    ;
    ; If we are doing an unattend install and the user has manually
    ; selected a PCI adapter we need to make the SlotNumber=0xffffffff
    ; (rather than the default 0) so the driver will search for the adapter.
    ;
    ifstr(i) $(!STF_GUI_UNATTENDED) == "YES"
    ;
        ifcontains(i) $(Option) in $(SlotNumberAdapters)
        ;
            ifint $(NumberFound) == 0
            ;
                set SlotNumber =  4294967295
            ;
            endif
        ;
        endif
    ;
    endif
    ;
    ; Add the rest of the parameters to the Services adapter area.
    ;
    Debug-Output "MADGE: Setting NewValueList"
    ifcontains(i) $(Option) in $(SlotNumberAdapters)
    ;
         set NewValueList = {+
             {BusType,        $(NoTitle),$(!REG_VT_DWORD),$(BusType)},+
             {BusNumber,      $(NoTitle),$(!REG_VT_DWORD),$(BusNumber)},+
             {MediaType,      $(NoTitle),$(!REG_VT_DWORD),2},+
             {SlotNumber,     $(NoTitle),$(!REG_VT_DWORD),$(SlotNumber)},+
             {AdapterType,    $(NoTitle),$(!REG_VT_DWORD),$(AdapterTypeFlag)}}
    ;
    else
    ;
        set NewValueList = {+
            {BusType,        $(NoTitle),$(!REG_VT_DWORD),$(BusType)},+
            {BusNumber,      $(NoTitle),$(!REG_VT_DWORD),$(BusNumber)},+
            {MediaType,      $(NoTitle),$(!REG_VT_DWORD),2},+
            {IoBaseAddress,  $(NoTitle),$(!REG_VT_DWORD),$(IoLocation)},+
            {AdapterType,    $(NoTitle),$(!REG_VT_DWORD),$(AdapterTypeFlag)}}
    ;
    endif
    ;
    ; If Olicom PCMCIA, set memory window and IO length
    ;
    ifcontains(i) $(Option) in $(OlicomPcmciaAdapters)
    ;
        set NewValueList = >($(NewValueList),+
            {PCCARDAttributeMemoryAddress, $(NoTitle),$(!REG_VT_DWORD),$(PcmciaMemWin)})
        set NewValueList = >($(NewValueList),+
            {PCCARDAttributeMemorySize, $(NoTitle),$(!REG_VT_DWORD),$(PcmciaMemWinLen)})
        set NewValueList = >($(NewValueList),+
            {PCCARDAttributeMemoryOffset, $(NoTitle),$(!REG_VT_DWORD),0})
        set NewValueList = >($(NewValueList),+
            {IoLength, $(NoTitle),$(!REG_VT_DWORD),32})
    ;
    endif
    ;
    ; If this is a PCMCIA adapter we need to a PCMCIA flag.
    ;
    ifcontains(i) $(Option) in $(PcmciaAdapters)
    ;
        set NewValueList = >($(NewValueList),+
            {Pcmcia, $(NoTitle), $(!REG_VT_DWORD), 1})
        ;
        ; Check for NT 4 stub registry containing madgemport bug.
        ;
        OpenRegKey $(!REG_H_LOCAL) "" $(FixedDatabase) $(MAXIMUM_ALLOWED) fffixup
        ifstr $(fffixup) != $(KeyNull)
        ;
            Debug-Output "MADGE: Opened C.S.1 Madge Database key"
            GetRegValue $(fffixup), "Driver", DrvInfo
            Debug-Output "MADGE: Extracted DrvInfo: "$(DrvInfo)
            ifstr(i) *($(DrvInfo),4) != $(ProductSoftwareName)
            ;
                Debug-Output "MADGE: Updating the C.C Madge Database Key"
                ;
                ; Open the NT4.0 Madge PCMCIA database key and reset values.
                ;
                OpenRegKey $(!REG_H_LOCAL) "" $(PcmciaDatabase) $(MAXIMUM_ALLOWED) dbfixup
                ifstr $(dbfixup) != $(KeyNull)
                ;
                    Debug-Output "MADGE: Opened C.C Madge Database Key and updating values"
                    SetRegValue $(dbfixup) {driver,$(NoTitle),$(!REG_VT_SZ),$(ProductSoftwareName)}
                    SetRegValue $(dbfixup) {InfFileName,$(NoTitle),$(!REG_VT_SZ),""}
                    SetRegValue $(dbfixup) {Option,$(NoTitle),$(!REG_VT_SZ),$(Option)}
                ;
                endif
                CloseRegKey $(dbfixup)
            ;
            endif
        ;
        endif
        CloseRegKey $(fffixup)
    ;
    endif
    ifcontains(i) $(Option) in $(OlicomPcmciaAdapters)
    ;
        ;
        ; Change Olicom registry key to point to this driver
        ;
        Debug-Output "MADGE: Opening Olicom PCMCIA database"
        OpenRegKey $(!REG_H_LOCAL) "" $(OlicomPcmciaDatabase) $(MAXIMUM_ALLOWED) database
        Debug-Output "MADGE: Creating Olicom card key"
        CreateRegKey $(database) {$($(Option)DatabaseLast), 0, GenericClass} "" $(!REG_KEY_SET_VALUE) "" ockey
        ifstr $(ockey) == $(KeyNull)
        ;
            OpenRegKey $(!REG_H_LOCAL) "" $($(Option)Database) $(MAXIMUM_ALLOWED) ockey
        ;
        endif
        ifstr $(ockey) != $(KeyNull)
        ;
            Debug-Output "MADGE: Setting general Olicom net values"
            SetRegValue $(ockey) {Driver, $(NoTitle), $(!REG_VT_SZ), $(ProductSoftwareName)}
            SetRegValue $(ockey) {DeviceType, $(NoTitle), $(!REG_VT_SZ), "NET"}
            SetRegValue $(ockey) {Option, $(NoTitle), $(!REG_VT_SZ), $(Option)}
            ifstr $(Option) == "OCTX3221"
            ;
                Debug-Output "MADGE: Setting values for GoCard 3221"
                SetRegValue $(ockey) {AttributeMemorySize, $(NoTitle), $(!REG_VT_DWORD), 4096}
            ;
            endif
        ;
        endif
        CloseRegKey $(ockey)
    ;
    endif
    ifcontains(i) $(Option) in $(CardbusAdapters)
    ;
        ifstr $(SSoftCB) == $(TRUE)
        ;
            set NewValueList = >($(NewValueList),+
                {Pcmcia, $(NoTitle), $(!REG_VT_DWORD), 1})
        ;
        endif
        ifstr $(SoftexCB) == $(TRUE)
        ;
            set NewValueList = >($(NewValueList),+
                {Pcmcia, $(NoTitle), $(!REG_VT_DWORD), 1})
        ;
        endif
        ifstr $(MadgeCB) == $(TRUE)
        ;
            set NewValueList = >($(NewValueList),+
                {PCCardEnabler, $(NoTitle), $(!REG_VT_DWORD), 1})
        ;
        endif
        ;
        ; Add CardBus card information to PCMCIA database.
        ;
        Debug-Output "MADGE: Opening PCMCIA database"
        OpenRegKey $(!REG_H_LOCAL) "" $(CardbusDatabase) $(MAXIMUM_ALLOWED) database
        Debug-Output "MADGE: Creating 16/4 CARDBUS ADAPTER registry key"
        CreateRegKey $(database) {"16/4 CARDBUS ADAPTER", 0, GenericClass} "" $(!REG_KEY_SET_VALUE) "" cardbus
        ifstr $(cardbus) != $(KeyNull)
        ;
            Debug-Output "MADGE: Setting values for CardBus Adapter"
            SetRegValue $(cardbus) {Driver, $(NoTitle), $(!REG_VT_SZ), $(ProductSoftwareName)}
            SetRegValue $(cardbus) {DeviceType, $(NoTitle), $(!REG_VT_SZ), "NET"}
            SetRegValue $(cardbus) {Option, $(NoTitle), $(!REG_VT_SZ), $(Option)}
            CloseRegKey $(cardbus)
        ;
        else
        ;
            OpenRegKey $(!REG_H_LOCAL) "" $(CBDatabase) $(MAXIMUM_ALLOWED) cardbus
            ifstr $(cardbus) != $(KeyNull)
            ;
                Debug-Output "MADGE: Setting values for CardBus Adapter"
                SetRegValue $(cardbus) {Driver, $(NoTitle), $(!REG_VT_SZ), $(ProductSoftwareName)}
                SetRegValue $(cardbus) {DeviceType, $(NoTitle), $(!REG_VT_SZ), "NET"}
                SetRegValue $(cardbus) {Option, $(NoTitle), $(!REG_VT_SZ), $(Option)}
                CloseRegKey $(cardbus)
            ;
            endif
        ;
        endif
        Debug-Output "MADGE: Creating CARDBUS ADAPTER MK 2 registry key"
        CreateRegKey $(database) {"CARDBUS ADAPTER MK 2", 0, GenericClass} "" $(!REG_KEY_SET_VALUE) "" cardbus
        ifstr $(cardbus) != $(KeyNull)
        ;
            Debug-Output "MADGE: Setting values for CardBus Adapter Mk2"
            SetRegValue $(cardbus) {Driver, $(NoTitle), $(!REG_VT_SZ), $(ProductSoftwareName)}
            SetRegValue $(cardbus) {DeviceType, $(NoTitle), $(!REG_VT_SZ), "NET"}
            SetRegValue $(cardbus) {Option, $(NoTitle), $(!REG_VT_SZ), $(Option)}
            CloseRegKey $(cardbus)
        ;
        else
        ;
            OpenRegKey $(!REG_H_LOCAL) "" $(CB2Database) $(MAXIMUM_ALLOWED) cardbus
            ifstr $(cardbus) != $(KeyNull)
            ;
                Debug-Output "MADGE: Setting values for CardBus Adapter Mk2"
                SetRegValue $(cardbus) {Driver, $(NoTitle), $(!REG_VT_SZ), $(ProductSoftwareName)}
                SetRegValue $(cardbus) {DeviceType, $(NoTitle), $(!REG_VT_SZ), "NET"}
                SetRegValue $(cardbus) {Option, $(NoTitle), $(!REG_VT_SZ), $(Option)}
                CloseRegKey $(cardbus)
            ;
            endif
        ;
        endif
        CloseRegKey $(database)
        ;
        ; Add Olicom CardBus card information to PCMCIA database.
        ;
        Debug-Output "MADGE: Opening PCMCIA database for Olicom"
        OpenRegKey $(!REG_H_LOCAL) "" $(OlicomPcmciaDatabase) $(MAXIMUM_ALLOWED) database
            Debug-Output "MADGE: Creating Olicom GoCard 3250 registry key"
            CreateRegKey $(database) {$(OCTX3250DatabaseLast), 0, GenericClass} "" $(!REG_KEY_SET_VALUE) "" cardbus
            ifstr $(cardbus) != $(KeyNull)
            ;
                Debug-Output "MADGE: Setting values for CardBus Adapter GoCard 3250"
                SetRegValue $(cardbus) {Driver, $(NoTitle), $(!REG_VT_SZ), $(ProductSoftwareName)}
                SetRegValue $(cardbus) {DeviceType, $(NoTitle), $(!REG_VT_SZ), "NET"}
                SetRegValue $(cardbus) {Option, $(NoTitle), $(!REG_VT_SZ), $(Option)}
                CloseRegKey $(cardbus)
            ;
            else
            ;
                OpenRegKey $(!REG_H_LOCAL) "" $(OCTX3250Database) $(MAXIMUM_ALLOWED) cardbus
                ifstr $(cardbus) != $(KeyNull)
                ;
                Debug-Output "MADGE: Setting values for CardBus Adapter GoCard 3250"
                SetRegValue $(cardbus) {Driver, $(NoTitle), $(!REG_VT_SZ), $(ProductSoftwareName)}
                SetRegValue $(cardbus) {DeviceType, $(NoTitle), $(!REG_VT_SZ), "NET"}
                SetRegValue $(cardbus) {Option, $(NoTitle), $(!REG_VT_SZ), $(Option)}
                CloseRegKey $(cardbus)
            ;
            endif
        ;
        endif
        CloseRegKey $(database)
    ;
    endif
    ;
    ; We only want to set the advanced options if specifically
    ; asked to do so by the user - as it is better to use the values
    ; determined by the UDT or OS. These parameters all have 0 = to
    ; UNKNOWN and we will not set them if so. If the user has set any
    ; of these parameters to UNKNOWN and there is already an entry in
    ; the registry we must remove it.
    ;
    ifcontains(i) $(Option) in $(PcmciaAdapters)
    ;
        ;
        ; Must set the IRQ
        ;
        set NewValueList = >($(NewValueList),+
                 {InterruptNumber, $(NoTitle), $(!REG_VT_DWORD), $(IrqNumber)})
    ;
    else-ifstr(i) $(IrqNumber) == $(DEF_IRQ_NUMBER)
    ;
        ifstr(i) $(OldIrq) != $(VALUE_UNKNOWN)
        ;
            DeleteRegValue $(KeyParameters) InterruptNumber
        ;
        endif
    ;
    else
    ;
        set NewValueList = >($(NewValueList),+
             {InterruptNumber, $(NoTitle), $(!REG_VT_DWORD), $(IrqNumber)})
    ;
    endif
    ifstr(i) $(SpeedFlag) == $(DEF_SPEED)
    ;
        ifstr(i) $(OldSpeedFlag) != $(VALUE_UNKNOWN)
        ;
            DeleteRegValue $(KeyParameters) RingSpeed
        ;
        endif
    ;
    else
    ;
        set NewValueList = >($(NewValueList),+
             {RingSpeed, $(NoTitle), $(!REG_VT_DWORD), $(SpeedFlag)})
    ;
    endif
    ifstr(i) $(DmaChannel) == $(DEF_DMA_CHANNEL)
    ;
        ifstr(i) $(OldDma) != $(VALUE_UNKNOWN)
        ;
            DeleteRegValue $(KeyParameters) DmaChannel
        ;
        endif
    ;
    else
    ;
        set NewValueList = >($(NewValueList),+
             {DmaChannel, $(NoTitle), $(!REG_VT_DWORD), $(DmaChannel)})
    ;
    endif
    ifstr(i) $(TransferType) == $(DEF_TRANSFER_TYPE)
    ;
        ifstr(i) $(OldTransferType) != $(VALUE_UNKNOWN)
        ;
            DeleteRegValue $(KeyParameters) TransferType
        ;
        endif
    ;
    else
    ;
        set NewValueList = >($(NewValueList),+
             {TransferType, $(NoTitle), $(!REG_VT_DWORD), $(TransferType)})
    ;
    endif
    ifstr(i) $(TxSlots) == $(DEF_TX_SLOTS)
    ;
        ifstr(i) $(OldTxSlots) != $(VALUE_UNKNOWN)
        ;
            DeleteRegValue $(KeyParameters) TxSlots
        ;
        endif
    ;
    else
    ;
        set NewValueList = >($(NewValueList),+
             {TxSlots, $(NoTitle), $(!REG_VT_DWORD), $(TxSlots)})
    ;
    endif
    ifstr(i) $(RxSlots) == $(DEF_RX_SLOTS)
    ;
        ifstr(i) $(OldRxSlots) != $(VALUE_UNKNOWN)
        ;
            DeleteRegValue $(KeyParameters) RxSlots
        ;
        endif
    ;
    else
    ;
        set NewValueList = >($(NewValueList),+
             {RxSlots, $(NoTitle), $(!REG_VT_DWORD), $(RxSlots)})
    ;
    endif
    ifstr(i) $(TestXID) == $(DEF_TEST_XID)
    ;
        ifstr(i) $(OldTestXID) != $(VALUE_UNKNOWN)
        ;
            DeleteRegValue $(KeyParameters) TestAndXIDEnabled
        ;
        endif
    ;
    else
    ;
        set NewValueList = >($(NewValueList),+
             {TestAndXIDEnabled, $(NoTitle), $(!REG_VT_DWORD), $(TestXID)})
    ;
    endif
    ifstr(i) $(MacOpenMode) == $(DEF_MAC_OPEN_MODE)
    ;
        ifstr(i) $(OldMacOpen) != $(VALUE_UNKNOWN)
        ;
            DeleteRegValue $(KeyParameters) MacOpen
        ;
        endif
    ;
    else
    ;
        set NewValueList = >($(NewValueList),+
             {MacOpen, $(NoTitle), $(!REG_VT_DWORD), $(MacOpenMode)})
    ;
    endif
    ifstr(i) $(StatsGathering) == $(DEF_STATS_GATHERING)
    ;
        ifstr(i) $(OldStatsGathering) != $(VALUE_UNKNOWN)
        ;
            DeleteRegValue $(KeyParameters) StatsGathering
        ;
        endif
    ;
    else
    ;
        set NewValueList = >($(NewValueList),+
             {StatsGathering, $(NoTitle), $(!REG_VT_DWORD), $(StatsGathering)})
    ;
    endif
    ifstr(i) $(Wol) == $(DEF_WOL)
    ;
        ifstr(i) $(OldWol) != $(VALUE_UNKNOWN)
        ;
            DeleteRegValue $(KeyParameters) WOL
        ;
        endif
    ;
    else
    ;
        set NewValueList = >($(NewValueList),+
             {WOL, $(NoTitle), $(!REG_VT_DWORD), $(Wol)})
    ;
    endif
    ifstr(i) $(QuietMode) == $(DEF_QUIET_MODE)
    ;
        ifstr(i) $(OldQuietMode) != $(VALUE_UNKNOWN)
        ;
            DeleteRegValue $(KeyParameters) Quiet
        ;
        endif
    ;
    else
    ;
        set NewValueList = >($(NewValueList),+
             {Quiet, $(NoTitle), $(!REG_VT_DWORD), $(QuietMode)})
    ;
    endif
    ifstr(i) $(MaxFrameSize) == $(DEF_MAX_FRAME_SIZE)
    ;
        ifstr(i) $(OldMaxFrameSize) != $(VALUE_UNKNOWN)
        ;
            DeleteRegValue $(KeyParameters) MaxFrameSize
        ;
        endif
    ;
    else
    ;
        set NewValueList = >($(NewValueList),+
             {MaxFrameSize, $(NoTitle), $(!REG_VT_DWORD), $(MaxFrameSize)})
    ;
    endif
    ifint $(RingStatus) == $(DEF_RING_STATUS_MASK)
    ;
        ifstr(i) $(OldRingStatus) != $(VALUE_UNKNOWN)
        ;
            DeleteRegValue $(KeyParameters) RingStatusMask
        ;
        endif
    ;
    else
    ;
        set NewValueList = >($(NewValueList),+
             {RingStatusMask, $(NoTitle), $(!REG_VT_DWORD), $(RingStatus)})
    ;
    endif
    ifint $(EventLog) == $(DEF_EVENT_LOG_MASK)
    ;
        ifstr(i) $(OldEventLog) != $(VALUE_UNKNOWN)
        ;
            DeleteRegValue $(KeyParameters) EventMask
        ;
        endif
    ;
    else
    ;
        set NewValueList = >($(NewValueList),+
             {EventMask, $(NoTitle), $(!REG_VT_DWORD), $(EventLog)})
    ;
    endif
    ifstr(i) $(Watchdog) == $(DEF_WATCHDOG)
    ;
        ifstr(i) $(OldWatchdog) != $(VALUE_UNKNOWN)
        ;
            DeleteRegValue $(KeyParameters) Watchdog
        ;
        endif
    ;
    else
    ;
        set NewValueList = >($(NewValueList),+
             {Watchdog, $(NoTitle), $(!REG_VT_DWORD), $(Watchdog)})
    ;
    endif
    ifstr(i) $(NetworkAddress) == ""
    ;
        ifstr(i) $(OldNetworkAddress) != $(VALUE_UNKNOWN)
        ;
            DeleteRegValue $(KeyParameters) NetworkAddress
        ;
        endif
    ;
    else
    ;
        set NewValueList = >($(NewValueList),+
             {NetworkAddress, $(NoTitle), $(!REG_VT_SZ), $(NetworkAddress)})
    ;
    endif
    ;
    ; Uncomment the lines between --> and <-- to perminantly disable
    ; promiscuous mode on a Smart 16/4 PCI Ringnode Mk3.
    ;
    ; -->
    ; set NewValueList = >($(NewValueList),+
    ;         {Kill_PM, $(NoTitle), $(!REG_VT_SZ), 1)})

    ; <--
    ;
    ; And add the parameters to the registry.
    ;
    Shell  $(UtilityInf), AddValueList, $(KeyParameters), $(NewValueList)
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
    ;
        goto Shell_Code_Error
    ;
    endif
    set RegistryErrorIndex = $($R0)
    Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
    ;
        CloseRegKey $(KeyParameters)
        goto Fatal_Registry
    ;
    endif
    ifstr(i) $(!STF_GUI_UNATTENDED) == "YES"
    ;
        Shell $(UtilityInf), AddDefaultNetCardParameters, $(KeyParameters)
    ;
    endif
    CloseRegKey $(KeyParameters)
    EndWait
    Debug-Output "MADGE: Updated registry"
    goto Successful
; -----------------------------------------------------------------------
; Binding section
; -----------------------------------------------------------------------
Binding_Adapter =+
    set Error = "Binding: Sorry, not yet implemented."
    goto Fatal
; -----------------------------------------------------------------------
; Removal section
; -----------------------------------------------------------------------
Remove_Adapter = +
    StartWait
    ;
    ; Remove the software component if required.
    ;
    ifstr(i) $(ProductKeyName) == $(!NTN_RegBase)
    ;
        Shell $(UtilityInf), RemoveSoftwareComponent, $(Manufacturer), +
            $(ProductSoftwareName)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
        ;
            goto Shell_Code_Error
        ;
        endif
        set RegistryErrorIndex = $($R0)
        ifstr(i) $(RegistryErrorIndex) != NO_ERROR
        ;
            goto Fatal_Registry
        ;
        endif
    ;
    ;
    ; Or, the hardware component.
    ;
    else
    ;
        Shell $(UtilityInf), RemoveHardwareComponent, $(Manufacturer), +
            $(ProductSoftwareName), $(!NTN_RegBase)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
        ;
            goto Shell_Code_Error
        ;
        endif
        set RegistryErrorIndex = $($R0)
        ifstr(i) $(RegistryErrorIndex) != NO_ERROR
        ;
            goto Fatal_Registry
        ;
        endif
    ;
    endif
    EndWait
    goto End
; -----------------------------------------------------------------------
; Upgrade Software section.
; -----------------------------------------------------------------------
Upgrade_Software = +
    StartWait
    read-syms UpgradeMessages$(!STF_LANGUAGE)
    set UpdateStatusString = "UPD_STARTED"
    ;
    ; Upgrade software component.
    ;
    set Current_OptionList = ^(Options, 1)
    set LSS5_OptionList    = ^(LSS502_Options, 1)
    set LSS5_Option        = ""
    ;
    ; Store some update status information.
    ;
    ifstr(i) $(!NTN_QuickREV) == "YES"
    ;
        OpenRegKey $(!REG_H_LOCAL) "" $(ProductKeyName) $(MAXIMUM_ALLOWED) StatusKey
        SetRegValue $(StatusKey) {"UpdateStatus", $(NoTitle),$(!REG_VT_SZ), $($(UpdateStatusString))}
        CloseRegKey $(StatusKey)
    ;
    endif
    read-syms MappingConstants
    Debug-Output "MADGE: In Upgrade software"
    Debug-Output "MADGE: Option           = "$(Option)
    Debug-Output "MADGE: !NTN_RegBase     = "$(!NTN_RegBase)
    Debug-Output "MADGE: !ProductKeyName  = "$(ProductKeyName)
    Debug-Output "MADGE: !NTN_ServiceBase = "$(!NTN_ServiceBase)
    ;---------------------------------------------------------------------
    ; Before we go any further make sure this isn't down grading the software.
    ; It isn't possible to do anything about upgradingto the current as this
    ; will prevent multi adapter upgrades.

    OpenRegKey $(!REG_H_LOCAL) "" $(ProductKeyName) $(MAXIMUM_ALLOWED) KeyProduct
    ifstr $(KeyProduct) != $(KeyNull)
    ;
        GetRegValue $(KeyProduct),"MajorVersion", MajorVersionInfo
        GetRegValue $(KeyProduct),"MinorVersion", MinorVersionInfo
        set MajorVersion = *($(MajorVersionInfo), 4)
        set MinorVersion = *($(MinorVersionInfo), 4)
        CloseRegKey $(KeyProduct)
        Debug-output "Current Version: "$(MajorVersion)"."$(MinorVersion)
        Debug-output "This Version   : "$(ProductMajorVersion)"."$(ProductMinorVersion)
        ifint $(ProductMajorVersion) > $(MajorVersion)
        ;
        ; Do nothing Major Version is greater
        ;
        else-ifint $(ProductMajorVersion) == $(MajorVersion)
        ;
            ifint $(ProductMinorVersion) >= $(MinorVersion)
            ;
            ; OK do nothing Mjrs are = and Mnr >=
            ;
            else
            ;
                ;
                ; Minor is less -> error
                ;
                set UpgradeError = UPD_DOWNGRADING_ERROR
                goto Fatal_Upgrade_Error
            ;
            endif
        ;
        else
        ;
            ;
            ; Down grading error
            ;
            set UpgradeError = UPD_DOWNGRADING_ERROR
            goto Fatal_Upgrade_Error
        ;
        endif
    ;
    else
    ;
        ;
        ; Failure to open the product key probably indicates that the user
        ; is trying to upgrade to a driver with a different name to the
        ; one currently installed, which is not permitted.
        ;
        set UpgradeError = UPD_OPEN_SOFTWARE_KEY_FAILED
        goto Fatal_Upgrade_Error
    ;
    endif
    ;---------------------------------------------------------------------
    ; Determine if this is an LSS 5 driver.
    ; Compare $(Option) to the LSS502_List.
    ;
    ; Check that this option is supported by one or other list.
    ;
    ifcontains(i) $(Option) not-in $(Current_OptionList)
    ;
        ifcontains(i) $(Option) not-in $(LSS5_OptionList)
        ;
            set UpgradeError = UPD_OPTION_NOT_SUPPORTED
            goto Fatal_Upgrade_Error
        ;
        endif
    ;
    endif
    ;
    ; Perform a search for cards that are not supported by this driver.
    ;
    Shell "" TestForUnsupportedCards
    ifstr(i) $($R0) != ""
    ;
        set UpgradeError = $($R0)
        goto Fatal_Upgrade_Error
    ;
    endif
    ;
    ; Check for a match in the LSS5 Options.
    ;
    ForListDo $(LSS5_OptionList)
    ;
        ifstr(i) $(Option) == $($)
        ;
            ;
            ; Found a LSS 5 Adapter.
            ;
            set LSS5_Option = $(Option)
        ;
        endif
    ;
    EndForListDo
    ;
    ; If an LSS5 driver was found then we need to do some work.
    ;
    ifstr(i) $(LSS5_Option) != ""
    ;
        ;
        ; Need to
        ;
        ; 1) Warp Name
        ;
        ; It is necessary to do some checking regarding the PCI situation.
        ; This sanity check must be performed regardless of the card in case
        ; there are any PCI adapters in the machine. Assuming this returns
        ; OK then continue as normal. Unless the card is a PCI card in which
        ; case use its return values.
        ;

        Shell "" SanityCheckPci $(LSS5_Option)
        ifstr(i) $($R0) == "SHELL_ERROR"
        ;
            set UpgradeError = $($R1)
            goto Fatal_Upgrade_Error
        ;
        endif
        ifstr(i) $(LSS5_Option) == "MDGMPPCI"
        ;
            set Option = $($R0)
            set PciSlotNumber = $($R1)
        ;
        else-ifstr(i) $(LSS5_Option) == "MDGMPPCIBM"
        ;
            set Option = $($R0)
            set PciSlotNumber = $($R1)
        ;
        else
        ;
            set Option = $(MAP_$(LSS5_Option))
        ;
        endif
        Debug-Output "MADGE: New Option  = "$(Option)
        Debug-Output "MADGE: PCI Slot    = "$(PciSlotNumber)
        ifstr(i) $(Option) == ""
        ;
            set UpgradeError = UPD_FAILED_TO_DETERMINE_CARD_TYPE
            goto Fatal_Upgrade_Error
        ;
        endif
        ;
        ; 2) Get Service Name
        ;

        OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_RegBase) $(MAXIMUM_ALLOWED) KeyRegBase
        GetRegValue $(KeyRegBase),"ServiceName", MadgeServiceNameData
        CloseRegKey $(KeyRegBase)
        set MadgeServiceName = *($(MadgeServiceNameData), 4)

        Debug-Output "MADGE: ServiceName= "$(MadgeServiceName)
        ;
        ; 3) Update InfOption in NTN_RegBase\NetRules
        ;

        OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_RegBase)"\NetRules" $(MAXIMUM_ALLOWED) KeyRegBase
        SetRegValue $(KeyRegBase) {InfOption,$(NoTitle),$(!REG_VT_SZ),$(Option)}
        CloseRegKey $(KeyRegBase)
        ;
        ; 4) Update the InfOption in the Madge area
        ;

        OpenRegKey $(!REG_H_LOCAL) "" $(ProductKeyName)"\NetRules" $(MAXIMUM_ALLOWED) KeyRegBase
        SetRegValue $(KeyRegBase) {InfOption,$(NoTitle),$(!REG_VT_SZ),$(Option)}
        CloseRegKey $(KeyRegBase)
        ;
        ; 5) Finally warp the settings in the ServiceName area
        ;

        set ServiceKeyName = $(!NTN_ServiceBase)"\"$(MadgeServiceName)"\Parameters"

        Debug-Output "MADGE: ServiceKeyName = "$(ServiceKeyName)
        ;
        ; Uses two lists.
        ;

        set ValueList    = {} ; Original registry settings.
        set NewValueList = {} ; New registry settings.
        OpenRegKey $(!REG_H_LOCAL) ""  $(ServiceKeyName) $(MAXIMUM_ALLOWED) KeyService
        EnumRegValue $(KeyService) ValueList
        ;
        ; Create a new list from the old - the default action will be to add the
        ; Current List Item to the NewList.
        ;
        ;
        ; Some of the old keys are combined to form one new one. In this case
        ; the code to this uses a flag to prevent it being run multiple times.
        ; These are:
        ;

        set DoneRingSpeed   = "NO"
        set DoneTxMode      = "NO"
        set OldForce4       = ""
        set OldForce16      = ""
        set OldRingSpeed    = ""
        set OldXferType     = ""
        set OldForce16      = ""
        ;
        ; Preliminary Loop to exctract some information.
        ;
        ForListDo $(ValueList)
        ;
            set ValueItem = $($)
            set ValueName = *($(ValueItem), 1)
            set ValueData = *($(ValueItem), 4)
            ;
            ; Ring speed dependant fields.
            ;

            ifstr(i) $(ValueName) == "Force4"
            ;
                set OldForce4 = $(ValueData)
            ;
            else-ifstr(i) $(ValueName) == "Force16"
            ;
                set OldForce16 = $(ValueData)
            ;
            else-ifstr(i) $(ValueName) == "RingSpeed"
            ;
                set OldRingSpeed = $(ValueData)
            ;
            ; Transfer type dependent fields
            ;
            else-ifstr(i) $(ValueName) == "TransferType"
            ;
                set OldXferType = $(ValueData)
            ;
            else-ifstr(i) $(ValueName) == "Force16BitPIO"
            ;
                set OldForce16 = $(ValueData)
            ;
            endif
        ;
        EndForListDo
        Debug-Output "MADGE: OldForce4    = "$(OldForce4)
        Debug-Output "MADGE: OldForce16   = "$(OldForce16)
        Debug-Output "MADGE: OldRingSpeed = "$(OldRingSpeed)
        Debug-Output "MADGE: OldXferType  = "$(OldXferType)
        Debug-Output "MADGE: OldForce16   = "$(OldForce16)

        ;
        ; Main Scan through List
        ;

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

            ;
            ; AdapterType
            ;

            ifstr(i) $(ValueName) == "AdapterType"
            ;
                set ValueItem = {"AdapterType",$(NoTitle),$(!REG_VT_DWORD), $(AdapterTypeFlag$(Option))}

            ;
            ; IoLocation
            ;
            else-ifstr(i) $(ValueName) == "IoLocation"
            ;
                set ValueItem = {"IoBaseAddress",$(NoTitle),$(!REG_VT_DWORD), $(ValueData)}
                set DeleteKeyName = $(ValueName)
            ;
            ; MemBase
            ;
            else-ifstr(i) $(ValueName) == "MemBase"
            ;
                set ValueItem = {"MemoryMappedBaseAddress",$(NoTitle),$(!REG_VT_DWORD), $(ValueData)}
                set DeleteKeyName = $(ValueName)
            ;
            ; Platform
            ;
            else-ifstr(i) $(ValueName) == "PlatformType"
            ;
                set ValueItem = {"Platform",$(NoTitle),$(!REG_VT_DWORD), $(ValueData)}
                set DeleteKeyName = $(ValueName)
            ;
            ;
            ; PromiscuousModeX
            ;
            else-ifstr(i) $(ValueName) == "PromiscuousModeX"
            ;
                set ValueItem = {"StatsGathering",$(NoTitle),$(!REG_VT_DWORD), $(ValueData)}
                set DeleteKeyName = $(ValueName)
            ;
            ; AsyncTx
            ;
            else-ifstr(i) $(ValueName) == "NoAsyncTransmit"
            ;
                ifstr(i) $(ValueData) == "1"
                ;
                    set AsyncValue = "0"
                ;
                else
                ;
                    set AsyncValue = "1"
                ;
                endif

                set ValueItem = {"AsyncTx",$(NoTitle),$(!REG_VT_DWORD), $(AsyncValue)}
                set DeleteKeyName = $(ValueName)
            ;
            ; RingSpeed
            ;
            else-ifstr(i)  $(ValueName) == "Force4"
            ;
                Debug-Output "MADGE: RS-F4"
                set DeleteKeyName = $(ValueName)
                goto RingSpeedGoto
            ;
            else-ifstr(i)  $(ValueName) == "Force16"
            ;
                Debug-Output "MADGE: RS-F16"
                set DeleteKeyName = $(ValueName)
                goto RingSpeedGoto
            ;
            else-ifstr(i)  $(ValueName) == "RingSpeed"
            ;
                Debug-Output "MADGE: RS-RS"
RingSpeedGoto = +
                set ValueItem = ""
                Debug-Output "MADGE: Done ="$(DoneRingSpeed)

                ifstr(i) $(DoneRingSpeed) == "NO"
                ;
                    ;
                    ; Hasn't been done so handle it.
                    ;

                    set DoneRingSpeed = "YES"

                    ;
                    ; Force4, Force16 and RingSpeed have been extracted from
                    ; the List.
                    ;
                    ; LOGIC      1) if a RingSpeed Exists use that
                    ;            2) If a Force 16 exists as YES use that
                    ;            3) If a Force 4 Exsists use that
                    ;
                    ; ForceXX   == "1" then it it means YES
                    ; RingSpeed == "0" means set by adapter
                    ; RingSpeed == "1" means set to 4
                    ; RingSpeed == "2" means set to 16
                    ;

                    set NewSpeed = ""

                    ifstr(i) $(OldForce16) == "1"
                    ;
                        set NewSpeed = $(UDT_RS_16M)
                    ;
                    else-ifstr(i) $(OldForce4) == "1"
                    ;
                        set NewSpeed = $(UDT_RS_4M)
                    ;
                    else-ifstr(i) $(OldRingSpeed) != ""
                    ;
                        set-add NewSpeed = $(OldRingSpeed), "1"
                    ;
                    endif

                    ifstr(i) $(NewSpeed) != ""
                    ;
                        set ValueItem = {"RingSpeed", $(NoTitle),$(!REG_VT_DWORD), $(NewSpeed)}
                    ;
                    endif
                ;
                endif
            ;
            ; TransferType
            ;
            else-ifstr(i)  $(ValueName) == "TransferType"
            ;
                goto TransferTypeGoto
            ;
            else-ifstr(i)  $(ValueName) == "Force16BitPIO"
            ;
                set DeleteKeyName = $(ValueName)
TransferTypeGoto = +
                set ValueItem = ""

                ifstr(i) $(DoneTxMode) == "NO"
                ;
                    ;
                    ; Hasn't been done so handle it.
                    ;

                    set DoneTxMode = "YES"

                    ;
                    ; LOGIC If Force16 bit is set to "1" then use position
                    ; 4 of the lookup table else use the position denoted by
                    ; the TransferType.
                    ;
                    ; TransferType = 0 means default PIO
                    ; TransferType = 1 means default DMA
                    ; TransferType = 2 means default MMIO
                    ;

                    ifstr(i) $(OldForce16) == "1"
                    ;
                        set TxIndex = "4"
                    ;
                    else
                    ;
                        set-add TxIndex = $(TransferType) , "1"
                    ;
                    endif
                    Debug-Output "MADGE: TxIndex = "$(TxIndex)
                    set ValueItem = {"TransferType", $(NoTitle),$(!REG_VT_DWORD), *($(MapXferMethod_$(Option)), $(TxIndex))}
                ;
                endif
            ;
            ; MacOpen
            ;
            else-ifstr(i) $(ValueName) == "MacOpen"
            ;
                ;
                ; This may have two values Classic or DTR.
                ;

                ifstr(i) $(ValueData) == "Classic"
                ;
                    set NewOpen = $(UDT_MAC_OPEN_CLASSIC)
                ;
                else-ifstr(i) $(ValueData) == "DTR"
                ;
                    set NewOpen = $(UDT_MAC_OPEN_DTR)
                ;
                else
                ;
                    ;
                    ; Catch all error - default.
                    ;

                    set NewOpen = $(UDT_MAC_OPEN_DEF)
                ;
                endif

                set ValueItem = {"MacOpen", $(NoTitle),$(!REG_VT_DWORD), $(NewOpen)}
            ;
            ; SlotNumber
            ;
            else-ifstr(i) $(ValueName) == "SlotNumber"
            ;
                ;
                ; If the slot number is unknown (-1) then plug in the
                ; PCI slot number we discovered earlier.
                ;

                ifint $(ValueData) == 65535
                ;
                    set ValueItem = {"SlotNumber", $(NoTitle),$(!REG_VT_DWORD), $(PciSlotNumber)}
                ;
                endif

                ;
                ; For EISA adapters we need to turn the slot number into
                ; an I/O base address and remove the slot number item.
                ;

                ifstr(i) $(Option) == "MDGEISA"
                ;
                    set-mul ValueData = $(ValueData), 4096
                    set ValueItem = {"IoBaseAddress",$(NoTitle),$(!REG_VT_DWORD), $(ValueData)}
                    set DeleteKeyName = $(ValueName)
                ;
                endif
            ;
            ; The following keys just need removing.
            ;
            else-ifstr(i) $(ValueName) == "CardBufferSize"
            ;
                set ValueItem = ""
                set DeleteKeyName = $(ValueName)
            ;
            else-ifstr(i) $(ValueName) == "Alternate"
            ;
                set ValueItem = ""
                set DeleteKeyName = $(ValueName)
            ;
            else-ifstr(i) $(ValueName) == "RxTxSlots"
            ;
                set ValueItem = ""
                set DeleteKeyName = $(ValueName)
            ;
            else-ifstr(i) $(ValueName) == "ForceOpen"
            ;
                set ValueItem = ""
                set DeleteKeyName = $(ValueName)
            ;
            else-ifstr(i) $(ValueName) == "NoMmio"
            ;
                set ValueItem = ""
                set DeleteKeyName = $(ValueName)
            ;
            else-ifstr(i) $(ValueName) == "HardwareReset"
            ;
                set ValueItem = ""
                set DeleteKeyName = $(ValueName)
            ;
            else-ifstr(i) $(ValueName) == "SingleStationTimeout"
            ;
                set ValueItem = ""
                set DeleteKeyName = $(ValueName)
            ;
            else-ifstr(i) $(ValueName) == "BeaconTimeOut"
            ;
                set ValueItem = ""
                set DeleteKeyName = $(ValueName)
            ;
            else-ifstr(i) $(ValueName) == "TxAhead"
            ;
                set ValueItem = ""
                set DeleteKeyName = $(ValueName)
            ;
            else-ifstr(i) $(ValueName) == "SyncEnhan"
            ;
                set ValueItem = ""
                set DeleteKeyName = $(ValueName)

            ;
            ; The END.
            ;
            endif

            ;
            ; Default action is to leave unchanged.
            ;

            Debug-Output "MADGE: Adding Reg:"$(ValueItem)
            ;
            ; Add new key.
            ;

            ifstr(i) $(ValueItem) != ""
            ;
                SetRegValue $(KeyService) $(ValueItem)
            ;
            endif
            ;
            ; Delete old one if necessary
            ;

            ifstr(i) $(DeleteKeyName) != ""
            ;
                DeleteRegValue $(KeyService) $(DeleteKeyName)
            ;
            endif
        ;
        ; End of Parameter list
        ;
        EndForListDo

        CloseRegKey $(KeyServiceKey)

    ;
    ; End  of LSS5 driver found
    ;
    endif
;--------------------------------------------------------------------------------------------
; End of LSS 5 stuff
;
    ;
    ; Open the software key.
    ;
    OpenRegKey $(!REG_H_LOCAL) "" $(ProductKeyName) $(MAXIMUM_ALLOWED) KeyProduct
    ifstr $(KeyProduct) != $(KeyNull)
    ;
        ;
        ; Get the name of the .INF file for this adapter.
        ;

        OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_RegBase) $(MAXIMUM_ALLOWED) KeyHardware
        shell $(UtilityInf) GetInfFileNameFromRegistry $(KeyHardware)
        CloseRegKey $(KeyHardware)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
        ;
            set UpdateStatusString = "UPD_GET_INF_NAME_FAILED"
            goto Shell_Code_Error
        ;
        endif
        set !UG_Filename = $($R0)
        Debug-Output "MADGE: !UG_Filename = "$(!UG_Filename)
        ;
        ; Update the binaries.
        ;
        ifstr(i) $(!UG_Filename) != ""
        ;
            install "Install-Update"
            ifstr(i) $(STF_INSTALL_OUTCOME) != STF_SUCCESS
            ;
                set UpdateStatusString = "UPD_INSTALL_FAILED"
                goto Fatal
            ;
            endif
        ;
        endif
        ;
        ; Upgrade the version number
        ;
        SetRegValue $(KeyProduct) {MajorVersion,$(NoTitle),$(!REG_VT_SZ),$(ProductMajorVersion)}
        SetRegValue $(KeyProduct) {MinorVersion,$(NoTitle),$(!REG_VT_SZ),$(ProductMinorVersion)}
        CloseRegKey $(KeyProduct)
        ;
        ; Install the detection DLL in case we are upgrading from a
        ; version that did not use detection.
        ;
        Shell "" PrepareDetectionDll $(DetectDllName)
        ifstr(i) $($R0) != STATUS_SUCCESSFUL
        ;
            set UpdateStatusString = "UPD_PREP_DETECTION_DLL_FAILED"
            goto Fatal
        ;
        endif
    ;
    else
    ;
        ;
        ; Cannot Open software key, goto ERROR
        ;
        set UpgradeError = UPD_OPEN_SOFTWARE_KEY_FAILED
        goto Fatal_Upgrade_Error
    ;
    endif
    EndWait
    set UpdateStatusString = "UPD_SUCCESS"
    goto End
; -----------------------------------------------------------------------
; Escape hatches
; -----------------------------------------------------------------------
Successful = +
    goto End
; -----------------------------------------------------------------------
Abandon = +
    ForListDo $(OEM_ABANDON_OPTIONS)
    ;
        Shell $(UtilityInf), RemoveHardwareComponent, $(Manufacturer), +
            $(ProductSoftwareName), $($)
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
        ;
            goto Shell_Code_Error
        ;
        endif
        set RegistryErrorIndex = $($R0)
        Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
        ;
            goto Fatal_Registry
        ;
        endif
    ;
    EndForListDo
    ifstr(i) $(OEM_ABANDON_SOFTWARE) == TRUE
    ;
        ;
        ; Remove Software Component
        ;
        Shell $(UtilityInf), RemoveSoftwareComponent, $(Manufacturer), +
            $(ProductSoftwareName), FALSE
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
        ;
            goto Shell_Code_Error
        ;
        endif
        set RegistryErrorIndex = $($R0)
        ifstr(i) $(RegistryErrorIndex) != NO_ERROR
        ;
            goto Fatal_Registry
        ;
        endif
    ;
    endif
    goto End
; -----------------------------------------------------------------------
Warning = +
    EndWait
    Shell $(SubroutineInf) SetupMessage, $(!STF_LANGUAGE), "WARNING", $(Error)
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
    ;
        goto Shell_Code_Error
    ;
    endif
    ifstr(i) $($R1) == "OK"
    ;
        goto $(To)
    ;
    else-ifstr(i) $($R1) == "CANCEL"
    ;
        goto $(From)
    ;
    endif
    goto End
; -----------------------------------------------------------------------
Non_Fatal_Info = +
    set Severity     = STATUS
    set CommonStatus = STATUS_USERCANCEL
    goto Non_Fatal_Msg
; -----------------------------------------------------------------------
Non_Fatal = +
    set  Severity = NONFATAL
    goto Non_Fatal_Msg
; -----------------------------------------------------------------------
Non_Fatal_Msg = +
    EndWait
    ifstr(i) $(Error) == ""
    ;
        set Severity = NONFATAL
        Shell $(UtilityInf) RegistryErrorString "SETUP_FAIL"
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
        ;
            goto Shell_Code_Error
        ;
        endif
        set Error = $($R0)
    ;
    endif
    Shell $(SubroutineInf) SetupMessage, $(!STF_LANGUAGE), "NONFATAL", $(Error)
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
    ;
        goto Shell_Code_Error
    ;
    endif
    ifstr(i) $($R1) == "OK"
    ;
        goto $(From)
    ;
    endif
    goto End
; -----------------------------------------------------------------------
Fatal_Upgrade_Error = +
    read-syms UpgradeMessages$(!STF_LANGUAGE)
    set CommonStatus = STATUS_FAILED
    set UpdateStatusString = $(UpgradeError)
    ifstr(i) $(!NTN_RunMode) != "BATCH"
    ;
        Shell "SUBROUTN.INF" SetupMessage, $(!STF_LANGUAGE), "FATAL", $($(UpgradeError))
    ;
    endif
    goto End
; -----------------------------------------------------------------------
Fatal_Registry = +
    Shell $(UtilityInf) RegistryErrorString $(RegistryErrorIndex)
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
    ;
        goto Shell_Code_Error
    ;
    endif
    set Error = $($R0)
    goto Fatal
; -----------------------------------------------------------------------
Fatal = +
    EndWait
    ifstr(i) $(Error) == ""
    ;
        Shell $(UtilityInf) RegistryErrorString "SETUP_FAIL"
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
        ;
            goto Shell_Code_Error
        ;
        endif
        set Error = $($R0)
    ;
    endif
    Shell $(SubroutineInf) SetupMessage, $(!STF_LANGUAGE), "FATAL", $(Error)
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
    ;
        goto Shell_Code_Error
    ;
    endif
    goto Set_Failed
; -----------------------------------------------------------------------
Not_Supported = +
    EndWait
    ifstr(i) $(Error) == ""
    ;
        Shell $(UtilityInf) RegistryErrorString "OPERATION_UNIMPLEMENTED"
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
        ;
            goto Shell_Code_Error
        ;
        endif
        set Error = $($R0)
    ;
    endif
    Shell $(SubroutineInf) SetupMessage, $(!STF_LANGUAGE), "FATAL", $(Error)
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
    ;
        goto Shell_Code_Error
    ;
    endif
    goto End
; -----------------------------------------------------------------------
Shell_Code_Error = +
    EndWait
    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 Set_Failed
; -----------------------------------------------------------------------
Set_Failed = +
    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 = +
    Debug-Output "MADGE: Returning"$(CommonStatus)
    ifstr(i) $(!NTN_QuickREV) == "YES"
    ;
        ;
        ; If this is running from QuickREV then try to store some useful
        ; information in HKLM\Software\Madge\Mdgmport\CurrentVersion.
        ;

        OpenRegKey $(!REG_H_LOCAL) "" $(ProductKeyName) $(MAXIMUM_ALLOWED) StatusKey
        SetRegValue $(StatusKey) {"UpdateStatus", $(NoTitle),$(!REG_VT_SZ), $($(UpdateStatusString))}
        CloseRegKey $(StatusKey)
        exit
    ;
    endif
    Return $(CommonStatus)
; -----------------------------------------------------------------------
; Update support routines.
; -----------------------------------------------------------------------
[InitBaseVars]
KeyNull            = ""
MAXIMUM_ALLOWED    = 33554432
KeyInfo            = {}
RegistryErrorIndex = NO_ERROR
NoTitle            = 0
CurrentControlSet  = "SYSTEM\CurrentControlSet"
ServicesBaseName   = $(CurrentControlSet)"\Services"
NetworkCardKeyName = $(!NTN_SoftwareBase)"\Microsoft\Windows NT\CurrentVersion\NetworkCards"
!RegLastError      = NO_ERROR
; -----------------------------------------------------------------------
; SanityCheckPci
;
; Pre LSS6.0(0) PCI driver did not differentiate between PCIBM1 and 2's,
; in addition all PCI adapters could have there slot number markes as unknown
; 0xFFFF. In this case the driver would search for the next available PCI
; adapter that match the Device number. Returns the New Option plus slot
; number.
;
[SanityCheckPci]
    set PCI_DeviceID     = 1
    set BM1_DeviceID     = 4
    set BM2_DeviceID     = 2
    set PCIBusTypeValue  = 5
    set ThisCardTag      = $($0)
    set ServiceList      = {}
    set DriverInfoList   = {}
    set PciCount         = 0
    set UnknownSlotCount = 0
    read-syms InitBaseVars
    ;
    ; First of all determine which Madge Smart PCI cards in the machine.
    ;

    Debug-output "MADGE: In sanity checker"
    Shell "", "MdgGetPciInformation"
    set MadgePciCardsList = $($R0)

    Debug-Output "MADGE: PCI Cards = "$($R0)
    ;
    ; Now count them.
    ;

    ForListDo $(MadgePciCardsList)
    ;
        set-add PciCount = $(PciCount), 1
    ;
    EndForListDo
    ;
    ; Now build the driver list.
    ; Unfortunately the services names are bracketed by " marks so we must
    ; do it the old fashioned way starting at the software NetworkCards Point.
    ;
    set NetcardsPath = $(!NTN_SoftwareBase)"\Microsoft\Windows NT\CurrentVersion\NetworkCards"

    Debug-Output "MADGE: NetcardsPath="$(NetcardsPath)
    OpenRegKey $(!REG_H_LOCAL) "" $(NetcardsPath) $(MAXIMUM_ALLOWED) NetCardsKey
    EnumRegKey $(NetCardsKey) CardsList
    CloseRegKey $(NetCardsKey)
    Debug-Output "MADGE: CardsList="$(CardsList)
    ForListDo $(CardsList)
    ;
        set ThisElement = $($)
        set ThisKeyName = *($(ThisElement), 1)
        OpenRegKey $(!REG_H_LOCAL) "" $(NetcardsPath)"\"$(ThisKeyName) $(MAXIMUM_ALLOWED) NetCardsKey
        GetRegValue $(NetCardsKey) "ProductName" ThisProduct
        GetRegValue $(NetCardsKey) "ServiceName" ThisService

        ;
        ; Lose rubbish.
        ;

        set ThisProduct = *($(ThisProduct), 4)
        set ThisService = *($(ThisService), 4)
        ifstr(i) $(ThisProduct) == "MDGMPORT"
        ;
            set ServiceList = >($(ServiceList), $(ThisService))
        ;
        endif

        CloseRegKey $(NetCardsKey)
    ;
    EndForListDo
    Debug-Output "MADGE: ServiceList="$(ServiceList)
    ;
    ; Now Build the list.
    ;

    ForListDo $(ServiceList)
    ;
        set MdgmportService = $($)
        Debug-Output "MADGE: Service="$(MdgmportService)

        ;
        ; Open a key to this service.
        ;

        set KeyPath = $(!NTN_ServiceBase)"\"$(MdgmportService)"\Parameters"

        Debug-Output "MADGE: KeyPath = "$(KeyPath)

        OpenRegKey $(!REG_H_LOCAL) "" $(KeyPath) $(MAXIMUM_ALLOWED) ServiceKey
        ;
        ; Ignore Non PCI adapters.
        ;

        GetRegValue $(ServiceKey) "BusType" BusTypeValue

        Debug-Output "MADGE: BusValue:"$(BusTypeValue)
        set BusTypeValue = *($(BusTypeValue), 4)

        ifint $(BusTypeValue) != $(PCIBusTypeValue)
        ;
            goto GetNextService
        ;
        endif

        ;
        ; This is a PCI card so continue.
        ;

        GetRegValue $(ServiceKey) "SlotNumber" SlotNumberValue
        GetRegValue $(ServiceKey) "AdapterType" AdapterTypeValue
        set SlotNumberValue = *($(SlotNumberValue), 4)
        set AdapterTypeValue = *($(AdapterTypeValue), 4)

        Debug-Output "MADGE: SlotNumber:"$(SlotNumberValue)
        Debug-Output "MADGE: AdapterType:"$(AdapterTypeValue)

        set DriverInfoList = >($(DriverInfoList), {$(MdgmportService), $(SlotNumberValue), $(AdapterTypeValue)})
        ;
        ; If an unknown slot is detected then increment the count.
        ;

        ifint $(SlotNumberValue) == 65535
        ;
            set-add UnknownSlotCount = $(UnknownSlotCount), 1
        ;
        endif
GetNextService = +

        CloseRegKey $(ServiceKey)
    ;
    EndForListDo
    Debug-Output "MADGE: DriverInfo"$(DriverInfoList)
    ;
    ; AT this point there are two counters:
    ;
    ;    1) PciCount         -> The number of physical Madge Smart PCI cards
    ;                           in the machine.
    ;    2) UnknownSlotCount -> The number of Cards with unknown slot numbers
    ;                           in the machine.
    ;
    ; There are also two lists of Madge Smart PCI cards:
    ;
    ;    1) MadgePciCardsList -> {$(BusNum), $(device), $(function), $(CardTag)}
    ;    2) DriverInfoList    -> {$(MdgmportService), $(SlotNumberValue), $(AdapterTypeValue}}
    ;
    ; Because of problems with the order of the bindings not being known:
    ;
    ; IF (there are >1 Madge Smart PCI adapter in the machine) AND
    ;    (there are unknown slot numbers)
    ;
    ;     then this will fail
    ;
    ; ELSE IF (there are >1 adapter in the machine) AND
    ;         (all slot numbers are known)
    ;
    ;     therefore we can resolve the card type
    ;
    ; ELSE
    ;
    ;     there is only one adapter in the machine so we know its slot
    ;     and card type.
    ;

    Debug-Output "MADGE: UnknownSlotCount = "$(UnknownSlotCount)
    Debug-Output "MADGE: PCI Count        = "$(PciCount)

    ifint $(UnknownSlotCount) > 1
    ;
        ;
        ; Fail.
        ;

        Debug-Output "MADGE: Too many unknown slot numbers"

        set PCI_Option     = "SHELL_ERROR"
        set PCI_SlotNumber = "UPD_TOO_MANY_UNKNOWN_SLOTS"
    ;
    else-ifint $(UnknownSlotCount) == 0
    ;
        ;
        ; OK.
        ;
        ; All Card slot numbers are known. Extract Slotnumber from this
        ; service and match it to the MadgePciCardsList to get the CardTag.
        ; Quickest is to open NTN_RegBase -> GetServiceName - > Get Slot Number
        ; Match with MadgePciCardsList.
        ;

        Debug-Output "MADGE: All slot numbers known"
        OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_RegBase) $(MAXIMUM_ALLOWED) RegBaseKey
        GetRegValue $(RegBaseKey) "ServiceName" CurrentService
        CloseRegKey $(RegBaseKey)
        set CurrentService = *($(CurrentService),4)

        Debug-Output "MADGE: Current Service = "$(CurrentService)
        OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\"$(CurrentService)"\Parameters" $(MAXIMUM_ALLOWED) ThisServiceKey
        GetRegValue $(ThisServiceKey) "SlotNumber" SlotNumberValue
        CloseRegKey $(ThisServiceKey)
        set SlotNumberValue = *($(SlotNumberValue),4)

        Debug-Output "MADGE: SlotNumber = "$(SlotNumberValue)
        ;
        ; Now scan MadgePciCardsList for a match.
        ;

        ForListDo $(MadgePciCardsList)
        ;
            set CurrentCard = $($)

            ifint $(SlotNumberValue) == *($(CurrentCard), 2)
            ;
                set PCI_Option     = *($(CurrentCard), 4)
                set PCI_SlotNumber = *($(CurrentCard), 2)
            ;
            endif
        ;
        EndForListDo
    ;
    else-ifint $(PciCount) > 1
    ;
        ;
        ; UnknownSlotCount == 1 is implied.
        ; Fail.
        ;

        Debug-Output "MADGE: One unknown Slot number amongst many cards"

        set PCI_Option     = "SHELL_ERROR"
        set PCI_SlotNumber = "UPD_TOO_MANY_PCIS_WITH_AN_UNKNOWN"
    ;
    else
    ;
        ;
        ; OK.
        ; One unknown card found in the machine with one Card implied.
        ; Easy just return the first element of MadgePciCardsList.
        ;

        Debug-Output "MADGE: One unknown Slot number, one card"

        set CurrentCard = *($(MadgePciCardsList), 1)
        set PCI_Option = *($(CurrentCard), 4)
        set PCI_SlotNumber = *($(CurrentCard), 2)
    ;
    endif
    Debug-Output "MADGE: PCI_Option >= "$(PCI_Option)
    Debug-Output "MADGE: PCI_SlotNumber >= "$(PCI_SlotNumber)

return $(PCI_Option), $(PCI_SlotNumber)
; ------------------------------------------------------------------------
; MdgGetPciInformation
; ------------------------------------------------------------------------
[MdgGetPciInformation]
    set ReturnCode = "SUCCESS"
    Debug-output "MADGE: !NCPA_HANDLE"$(!NCPA_HANDLE)
    Debug-output "MADGE: !LIBHANDLE  "$(!LIBHANDLE)
    Shell NcParam.Inf Param_ControlDetection DTEND
    Shell NcParam.Inf Param_ControlDetection DTSTART

    read-syms InitBaseVars

    ; 0x10B6 = 4278 decimal

    set VendorID     = 4278
    set DeviceID     = ""
    set MultiAdapter = "HARDWARE\Description\System\MultifunctionAdapter"
    set InfoList     = {}

    OpenRegKey $(!REG_H_LOCAL) "" $(MultiAdapter) $(MAXIMUM_ALLOWED) KeyMultiAdapter

    ifstr $(KeyMultiAdapter) == $(KeyNull)
    ;
        goto GetPCIInformation_return
    ;
    endif

    EnumRegKey $(KeyMultiAdapter) BusList

    Debug-Output "Buslist"
    Debug-Output $(BusList)

    set BusNum = 0
    set index  = 0

    ForListDo $(BusList)
    ;
        OpenRegKey $(!REG_H_LOCAL) "" $(MultiAdapter)"\"$(index) $(MAXIMUM_ALLOWED) KeyMultiAdapterBus
        GetRegValue $(KeyMultiAdapterBus) "Identifier" IdentifierInfo

        ifstr(i) *($(IdentifierInfo),4) == "PCI"
        ;
            set device = 0
next_device = +
            ifint $(device) < 32
            ;
                set function = 0
next_function = +
                ifint $(function) < 8
                ;
                    LibraryProcedure Result, $(!LIBHANDLE), GetPciInformation, $(BusNum), $(device), $(function)
                    debug-output $(BusNum)".."$(device)".."$(function)".."$(Result)

                    ifint *($(Result),1) == 65535
                    ;
                        Set-add device = $(device),1
                        goto next_device
                    ;
                    endif

                    ifint *($(Result),1) == $(VendorID)
                    ;
                        Debug-Output "Madge: Found Madge card"

                        ifint *($(Result),2) == 1
                        ;
                            set InfoList = >($(InfoList),{$(BusNum),$(device),$(function), "MDGPCI1B"})
                        ;
                        else-ifint *($(Result),2) == 2
                        ;
                            set InfoList = >($(InfoList),{$(BusNum),$(device),$(function), "MDGPCIBM2"})
                        ;
                        else-ifint *($(Result),2) == 4
                        ;
                            set InfoList = >($(InfoList),{$(BusNum),$(device),$(function), "MDGPCIBM1"})
                        ;
                        else
                        ;
                            debug-output "MADGE: Not a match"
                        ;
                        endif
                    ;
                    endif

                    set-add function = $(function), 1
                    goto next_function
                ;
                endif
                Set-add device = $(device),1
                goto next_device
            ;
            endif
finish_bus = +
            set-add BusNum = $(BusNum),1
        ;
        endif
        set-add index = $(index),1
    ;
    EndForListDo

    CloseRegKey $(KeyMultiAdapter)

GetPCIInformation_return = +
    Debug-output "MADGE: PCI Cards in machine:"$(InfoList)
    return $(InfoList)
; ------------------------------------------------------------------------
; TestForUnsupportedCards
;
; Because the new driver does not support all of the cards supported by the
; previous driver this does a check for unsupported cards in the machine.
[TestForUnsupportedCards]
    set ReturnCode = ""
    set UnsupportedList = {}
    set UnsupportedList = ^(Unsupported_Options, 1)
    read-syms InitBaseVars
    set NetcardsPath = $(!NTN_SoftwareBase)"\Microsoft\Windows NT\CurrentVersion\NetworkCards"
    debug-output "MADGE: NetcardsPath="$(NetcardsPath)
    OpenRegKey $(!REG_H_LOCAL) "" $(NetcardsPath) $(MAXIMUM_ALLOWED) NetCardsKey
    EnumRegKey $(NetCardsKey) CardsList
    CloseRegKey $(NetCardsKey)
    debug-output "MADGE: CardsList="$(CardsList)
    ForListDo $(CardsList)
    ;
        set ThisElement = $($)
        set ThisKeyName = *($(ThisElement), 1)
        OpenRegKey $(!REG_H_LOCAL) "" $(NetcardsPath)"\"$(ThisKeyName) $(MAXIMUM_ALLOWED) NetCardsKey
        GetRegValue $(NetCardsKey) "ProductName" ThisProduct
        GetRegValue $(NetCardsKey) "ServiceName" ThisService
        CloseRegKey $(NetCardsKey)

        ;
        ; Lose rubbish.
        ;

        set ThisProduct = *($(ThisProduct), 4)
        set ThisService = *($(ThisService), 4)
        ifstr(i) $(ThisProduct) == "MDGMPORT"
        ;
            OpenRegKey $(!REG_H_LOCAL) "" $(NetcardsPath)"\"$(ThisKeyName)"\NetRules" $(MAXIMUM_ALLOWED) NetRulesKey
            GetRegValue $(NetRulesKey)    "InfOption" InfOptionValue
            CloseRegKey $(NetRulesKey)
            set InfOptionValue = *($(InfOptionValue), 4)
            Debug-output "MADGE: Supported? :"$(InfOptionValue)
            ifcontains(i) $(InfOptionValue) in $(UnsupportedList)
            ;
                set ReturnCode = UPD_UNSUPPORTED_CARD_FOUND
            ;
            endif
        ;
        endif

    ;
    EndForListDo
    return $(ReturnCode)
; -----------------------------------------------------------------------
; Install sections
; -----------------------------------------------------------------------
[Files-Inf]
1, oemsetup.inf, SIZE=100000, RENAME=$(!UG_Filename)
[Files-Driver]
1, mdgmport.sys, SIZE=200000
[Files-Helper]
1, mdrvwin.dll, SIZE=10000
1, mdgndis.hlp, SIZE=12000
[Files-MDGNCDET.DLL]
1, mdgncdet.dll, SIZE=21000
; -----------------------------------------------------------------------
[Install-Update]
   set STF_VITAL        = ""
   set STF_OVERWRITE    = "VERIFYSOURCEOLDER"
   AddSectionFilesToCopyList Files-Inf $(SrcDir) $(!STF_WINDOWSSYSPATH)
   AddSectionFilesToCopyList Files-Helper $(SrcDir) $(!STF_WINDOWSSYSPATH)
   AddSectionFilesToCopyList Files-Driver $(SrcDir) $(!STF_WINDOWSSYSPATH)\drivers
   AddSectionFilesToCopyList Files-MDGNCDET.DLL $(SrcDir) $(!STF_WINDOWSSYSPATH)
   set !STF_NCPA_FLUSH_COPYLIST = TRUE
   CopyFilesInCopyList
   exit
[Install-Option]
   set STF_VITAL        = ""
   AddSectionFilesToCopyList Files-Helper $(SrcDir) $(!STF_WINDOWSSYSPATH)
   AddSectionFilesToCopyList Files-Driver $(SrcDir) $(!STF_WINDOWSSYSPATH)\drivers
   AddSectionFilesToCopyList Files-MDGNCDET.DLL $(SrcDir) $(!STF_WINDOWSSYSPATH)
   set !STF_NCPA_FLUSH_COPYLIST = TRUE
   CopyFilesInCopyList
   exit
[Source Media Descriptions]
    1  = "Madge Driver Disk"
    2  = "Windows NT Setup CD-ROM Disk"
[ProductType]
STF_PRODUCT  = Winnt
STF_PLATFORM = I386
; ******** End of file OEMSETUP.INF *****************************************
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.70