OEMSETUP.INF Driver File Contents (MADGE.zip)

; **********************************************************************
;
; OEMSETUP.INF
;
; Copyright (c) Madge Networks Ltd. 1997-2000
;
; VeRsIoN=Madge Smart Ringnode Miniport Driver NT Installation Script@
; VeRsIoN=VERSION: v6.06 LSS 7.1(0)@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
; VeRsIoN=PRODUCT-ID: MDGNDIS4.SYS  6.06 @
; VeRsIoN=INFO: WINNT.TXT (Windows NT Installation)@
; MaDgE=8B65@
;
; Supports Adapter Mirroring installation (on selected cards).
; Supports Hot Plug PCI installation.
;
; **********************************************************************
; ----------------------------------------------------------------------
; Mandatory configuration information.
; ----------------------------------------------------------------------
[Identification]
    OptionType = NetAdapter
[PlatformsSupported]
    ISA
    EISA
    PCI
    "Jazz-Internal Bus"
[LanguagesSupported]
    ENG
[Options]
    MDGAUTO
    MDGPCIHS2
    MDGPCIHS
    MDGPCI3
    MDGPCIBM2
    MDGPRESTO2000
    MDGPRESTO2
    MDGPRESTO
    MDGCARDBUS2
    MDGCARDBUS
    MDGPCMCIA
    OCTX3540
    OCTX3139
    OCTX3140
    OCTX3141
    OCTX3137
    OCTX3250
    OCTX3221
[MirroringOptions]
    MDGPCIHS
    MDGPCIHS2
    MDGPCI3
    MDGPCIBM2
    OCTX3137
    OCTX3139
    OCTX3140
    OCTX3141
    OCTX3540
;
; 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"
    MDGCARDBUS2   = "Madge 16/4 CardBus Adapter Mk2"
    MDGCARDBUS    = "Madge 16/4 CardBus Adapter"
    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"
    OCTX3141      = "Olicom RF-3141 Token-Ring 16/4 PCI Fiber Adapter"
    OCTX3137      = "Olicom PCI/II 16/4 Adapter (OC-3137)"
    OCTX3250      = "Olicom GC-3250 16/4 CardBus PC Card"
    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 "
    MDGCARDBUS2   = "16/4 CardBus Adapter Mk2 / PCI device ID "
    MDGCARDBUS    = "16/4 CardBus Adapter / 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 "
    OCTX3141      = "RF-3141 16/4 PCI Fiber Adapter / PCI device ID "
    OCTX3137      = "OC-3137 16/4 PCI/II Adapter / PCI device ID "
    OCTX3250      = "GoCard 3250 16/4 CardBus PC Card / 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
    OCTX3141
    OCTX3137
;-----------------------------------------------------------------------
; Cardbus adapters.
;-----------------------------------------------------------------------
[CardbusOptions]
    MDGCARDBUS
    MDGCARDBUS2
    OCTX3250
;-----------------------------------------------------------------------
; PCMCIA adapters.
;-----------------------------------------------------------------------
[PcmciaOptions]
    MDGPCMCIA
    OCTX3221
[OlicomPcmciaOptions]
    OCTX3221
[OlicomHebeOptions]
    OCTX3139
    OCTX3140
    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
[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
[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
[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
[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
[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
[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
[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
[SlaveSlotNumberChoices]
    "Mirroring Disabled",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
    "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
[BeaconTimeoutChoices]
    "Disabled",0
    "2 seconds",2
    "3 seconds",3
    "4 seconds",4
    "5 seconds",5
    "6 seconds",6
    "7 seconds",7
    "8 seconds",8
    "9 seconds",9
    "10 seconds",10
[SingleStationTimeoutChoices]
    "Disabled",0
    "2 seconds",2
    "3 seconds",3
    "4 seconds",4
    "5 seconds",5
    "6 seconds",6
    "7 seconds",7
    "8 seconds",8
    "9 seconds",9
    "10 seconds",10
    "15 seconds",15
    "20 seconds",20
    "30 seconds",30
    "45 seconds",45
    "60 seconds",60
[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 = "06"
ProductVersion      = $(ProductMajorVersion)"."$(ProductMinorVersion)
VersionString       = "6.06 LSS 7.1(0)"
;
; Software information.
;
ProductSoftwareName      = "MDGNDIS4"
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     = "MDGNDIS4"
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"
CompaqHotPlugKey= $(!NTN_SoftwareBase)"\Compaq\Cpqrcmc\ClassDLLs\NicMiniPort"
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)
;
; Hot Plug PCI constants.
; These values must correspond to those defined within the driver.
;
BaseOIDAddress  = 4278322176 ; 0xff020400
SetOIDAddress   = 4278321933 ; 0xff02030d
;
; 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_SLAVE_SLOT_NUMBER = 0
DEF_BEACON_TIMEOUT    = 0
DEF_SINGLE_TIMEOUT    = 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
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)
MirroringAdapters    = ^(MirroringOptions,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   = "MDGNDIS4 v"$(VersionString)": Madge Token Ring Adapter Setup"
;
; Software.
;
ProductSoftwareTitle         = "MDGNDIS4"
ProductSoftwareDescription   = "MDGNDIS4: 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"
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'."
SET_LAA_FOR_MIRRORING = "A Locally Administered Node Address (LAA) must be specified "+
                        "when using Mirroring. Please enter an LAA into the dialog box."
MASTER_AND_SLAVE_CLASH = "The same value has been selected for both Master and Slave PCI "+
                         "Device IDs. Please change one of these values in the Advanced "+
                         "dialog box."
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)
SlaveSlotList        = ^(SlaveSlotNumberChoices,1)
SlaveSlotRawList     = ^(SlaveSlotNumberChoices,2)
BeaconList           = ^(BeaconTimeoutChoices,1)
BeaconRawList        = ^(BeaconTimeoutChoices,2)
SingleStationList    = ^(SingleStationTimeoutChoices,1)
SingleStationRawList = ^(SingleStationTimeoutChoices,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:"
Combo15Label    = "Slave PCI Device Number:"
Combo16Label    = "Ring Beacon Timeout:"
Combo17Label    = "Single Station Timeout:"
SlaveEnabledTitle     = "Mirror Slave Adapter (Enabled)"
SlaveDisabledTitle    = "Mirror Slave Adapter (Disabled)"
MirroringDisabledText = "To enable Mirroring, choose a slave adapter from the Slave PCI Device ID list below:"
MirroringEnabledText  = "To disable Mirroring, choose 'Mirroring Disabled' from the Slave PCI Device ID list below:"
NoSuitableSlavesText  = "Mirroring cannot be enabled since no suitable slave adapters are available."
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)
Combo15List = $(AllowedSlaveSlotList)
Combo15Out  = $(SlaveSlotNumber)
Combo16List = $(BeaconList)
Combo16Out  = $(BeaconTimeout)
Combo17List = $(SingleStationList)
Combo17Out  = $(SingleStationTimeout)
ComboListItemsIn  = {Combo1List, Combo2List, Combo3List, Combo4List, Combo5List, Combo6List, Combo7List, Combo8List, Combo9List, Combo10List, Combo11List, Combo12List, Combo13List, Combo14List, Combo15List, Combo16List, Combo17List}
ComboListItemsOut = {Combo1Out, Combo2Out, Combo3Out, Combo4Out, Combo5Out, Combo6Out, Combo7Out, Combo8Out, Combo9Out, Combo10Out, Combo11Out, Combo12Out, Combo13Out, Combo14Out, Combo15Out, Combo16Out, Combo17Out}
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      = {}

    ;
    ; 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 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)
    ;
    ; 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 SlaveSlotNumber      = $(DEF_SLAVE_SLOT_NUMBER)
    set BeaconTimeout        = $(DEF_BEACON_TIMEOUT)
    set SingleStationTimeout = $(DEF_SINGLE_TIMEOUT)
    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 OldSlaveSlotNumber      = $(VALUE_UNKNOWN)
    set OldBeaconTimeout        = $(VALUE_UNKNOWN)
    set OldSingleStationTimeout = $(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 SlaveSlotNumber      = $(DEF_SLAVE_SLOT_NUMBER)
    set BeaconTimeout        = $(DEF_BEACON_TIMEOUT)
    set SingleStationTimeout = $(DEF_SINGLE_TIMEOUT)
    ;
    ; 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 OldSlaveSlotNumber      = $(VALUE_UNKNOWN)
    set OldBeaconTimeout        = $(VALUE_UNKNOWN)
    set OldSingleStationTimeout = $(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) == "SlaveSlotNumber"
        ;
            set SlaveSlotNumber    = $(ValueData)
            set OldSlaveSlotNumber = $(ValueData)
        ;
        else-ifstr(i) $(ValueName) == "BeaconTimeout"
        ;
            set BeaconTimeout    = $(ValueData)
            set OldBeaconTimeout = $(ValueData)
        ;
        else-ifstr(i) $(ValueName) == "SingleStationTimeout"
        ;
            set SingleStationTimeout    = $(ValueData)
            set OldSingleStationTimeout = $(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 SlaveSlotNumber      = *($(SlaveSlotList),~($(SlaveSlotRawList),$(SlaveSlotNumber)))
    set BeaconTimeout        = *($(BeaconList),~($(BeaconRawList),$(BeaconTimeout)))
    set SingleStationTimeout = *($(SingleStationList),~($(SingleStationRawList),$(SingleStationTimeout)))
    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 SlaveSlotNumber      = *($(SlaveSlotRawList),~($(SlaveSlotList),$(SlaveSlotNumber)))
    set BeaconTimeout        = *($(BeaconRawList),~($(BeaconList),$(BeaconTimeout)))
    set SingleStationTimeout = *($(SingleStationRawList),~($(SingleStationList),$(SingleStationTimeout)))
    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 = "MDGNDIS4 v"$(VersionString)": Madge ADVANCED Token Ring Adapter Setup"
    ;
    ; Determine whether the current adapter supports mirroring.
    ;
    set AllowedSlaveSlotList = {*(^(SlaveSlotNumberChoices, 1), 1)}
    ifcontains(i) $(Option) in $(MirroringAdapters)
    ;
        set AdapterSupportsMirroring = 1
        set SlaveBoxTitle = $(SlaveDisabledTitle)
    ;
    else
    ;
        set AdapterSupportsMirroring = 0
    ;
    endif
    ;
    ; Compile a list of suitable Slave adapter's PCI Device IDs. Suitable Slave
    ; adapters must meet the following criteria:
    ;
    ; (a) Must be of same type as the current Master adapter (PCI only).
    ; (b) Must be on the same PCI bus as the current Master.
    ; (c) Must not be currently registered as a Master adapter.
    ; (d) Must not be currently registered as a Slave adapter for any Master
    ;     other than the current one.
    ;
    ifint $(AdapterSupportsMirroring) == 1
    ;
        Debug-Output "== Detecting suitable slaves ==========================="

        ;
        ; Determine the PCI device ID of the adapter type we're installing.
        ; Unfortunately the GetPCIInformation utility function only takes
        ; PCI VendorId and DeviceId as arguments, and not SubvendorID and
        ; SubdeviceID so we can't distinguish between adapters with the same
        ; VendorId and DeviceIds, e.g PCI Mk3 and Presto Mk2.
        ;

        set PCI_ID_VEN_MDGPCIHS   = 4278
        set PCI_ID_DEV_MDGPCIHS   = 9
        set PCI_ID_VEN_MDGPCIHS2  = 4278
        set PCI_ID_DEV_MDGPCIHS2  = 10
        set PCI_ID_VEN_MDGPCIBM2  = 4278
        set PCI_ID_DEV_MDGPCIBM2  = 2
        set PCI_ID_VEN_MDGPCI3    = 4278
        set PCI_ID_DEV_MDGPCI3    = 3
        set PCI_ID_VEN_OCTX3540   = 4237
        set PCI_ID_DEV_OCTX3540   = 8
        set PCI_ID_VEN_OCTX3140   = 4237
        set PCI_ID_DEV_OCTX3140   = 4
        set PCI_ID_VEN_OCTX3141   = 4237
        set PCI_ID_DEV_OCTX3141   = 7
        set PCI_ID_VEN_OCTX3137   = 4237
        set PCI_ID_DEV_OCTX3137   = 1
        ;
        ; Get a list of Madge PCI adapters of this type present in the machine.
        ; GetPCIInformation returns a list of {bus,device,function} triples.
        ; This is the list of possible slaves.
        ;
        set CardVendorID = $(PCI_ID_VEN_$(Option))
        set CardID = $(PCI_ID_DEV_$(Option))

        Shell $(UtilityInf), GetPCIInformation, $(CardVendorID) $(CardID)
        set SlaveList = $($R0)

        Debug-Output "GetPCIInformation="$(SlaveList)
        ;
        ; Get a list of all network adapters installed in the machine.
        ;

        set NetcardsPath = $(!NTN_SoftwareBase)"\Microsoft\Windows NT\CurrentVersion\NetworkCards"

        OpenRegKey $(!REG_H_LOCAL) "" $(NetcardsPath) $(MAXIMUM_ALLOWED) NetCardsKey
        EnumRegKey $(NetCardsKey) CardsList
        CloseRegKey $(NetCardsKey)
        Debug-Output "CardsList="$(CardsList)
        ;
        ; Iterate along the list of network adapters and build a list of the
        ; serice names of any Madge adapters.
        ;

        set ServiceList = {}

        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 any entries that don't have a Madge driver.
            ;

            set ThisProduct = *($(ThisProduct), 4)
            set ThisService = *($(ThisService), 4)

            ifstr(i) $(ThisProduct) == "MDGNDIS4"
            ;
                set ServiceList = >($(ServiceList), $(ThisService))
            ;
            endif

            CloseRegKey $(NetCardsKey)
        ;
        EndForListDo
        Debug-Output "ServiceList="$(ServiceList)
        ;
        ; Now look at the service parameters for each of the Madge adapters
        ; found and determine their PCI bus and device number and the device
        ; number of their slaves - if any. Remove any matching adapters from
        ; the list of possible slaves.
        ;

        ForListDo $(ServiceList)
        ;
            set ThisService = $($)
            Debug-Output "ThisService="$(ThisService)

            ;
            ; Open a key to this service.
            ;

            set KeyPath = $(!NTN_ServiceBase)"\"$(ThisService)"\Parameters"
            OpenRegKey $(!REG_H_LOCAL) "" $(KeyPath) $(MAXIMUM_ALLOWED) ServiceKey
            ;
            ; Ignore non-PCI adapters.
            ;

            GetRegValue $(ServiceKey) "BusType" BusTypeValue

            Debug-Output "BusType="$(BusTypeValue)
            set BusTypeValue = *($(BusTypeValue), 4)

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

            ;
            ; This is a PCI card so continue.
            ;

            GetRegValue $(ServiceKey) "BusNumber"       BusNumberValue
            GetRegValue $(ServiceKey) "SlotNumber"      SlotNumberValue
            GetRegValue $(ServiceKey) "SlaveSlotNumber" SlaveSlotNumberValue
            set BusNumberValue       = *($(BusNumberValue), 4)
            set SlotNumberValue      = *($(SlotNumberValue), 4)
            set SlaveSlotNumberValue = *($(SlaveSlotNumberValue), 4)

            Debug-Output "BusNumber       ="$(BusNumberValue)
            Debug-Output "SlotNumber      ="$(SlotNumberValue)
            Debug-Output "SlaveSlotNumber ="$(SlaveSlotNumberValue)

            ;
            ; Remove any matching adapters from the list of possible slaves.
            ;

            set TempList = {}

            ForListDo $(SlaveList)
            ;
                set ThisEntry = $($)

                ifint $(BusNumberValue) == *($(ThisEntry),1)
                ;
                    ifint $(SlotNumberValue) == *($(ThisEntry),2)
                    ;
                        goto SlaveInUse
                    ;
                    endif

                    ifint $(SlaveSlotNumberValue) == *($(ThisEntry),2)
                    ;
                        ;
                        ; Check whether this Master adapter is the
                        ; one which we are currently configuring, if so
                        ; don't remove this entry from the list.
                        ;
                        ifint $(SlotNumberValue) != $(SlotNumber)
                        ;
                            goto SlaveInUse
                        ;
                        endif
                    ;
                    endif
                ;
                endif
                set TempList = >($(TempList), $(ThisEntry))

SlaveInUse = +
            ;
            EndForListDo
            set SlaveList = $(TempList)

GetNextService = +

            CloseRegKey $(ServiceKey)
        ;
        EndForListDo
        ;
        ; Remove:
        ; (a) the adapter we're currently installing and
        ; (b) any adapters on a different bus number to the master
        ; from the list of possible slaves.
        ;

        set TempList = {}
        ifstr(i) $(AdapterDetected) == TRUE
        ;
            set MasterBusNumber = $(DetectBusNumber)
        ;
        else
        ;
            set MasterBusNumber = $(BusNumber)
        ;
        endif

        ForListDo $(SlaveList)
        ;
            set ThisEntry = $($)

            ifint $(MasterBusNumber) == *($(ThisEntry),1)
            ;
                ifint $(SlotNumber) == *($(ThisEntry),2)
                ;
                    goto SlaveInUse2
                ;
                endif

                set TempList = >($(TempList), $(ThisEntry))
            ;
            endif

SlaveInUse2 = +
        ;
        EndForListDo
        set SlaveList = $(TempList)
        ;
        ; Check if the list of possible slaves is empty.
        ;

        ifstr(i) $(SlaveList) == {}
        ;
            set SlaveBoxText = $(NoSuitableSlavesText)
        ;
        else
        ;
            ifint $(SlaveSlotNumber) == 0
            ;
                set SlaveBoxText = $(MirroringDisabledText)
            ;
            else
            ;
                set SlaveBoxTitle = $(SlaveEnabledTitle)
                set SlaveBoxText  = $(MirroringEnabledText)
            ;
            endif
        ;
        endif

        ;
        ; Compile a list of slave PCI device IDs.
        ;

        ForListDo $(SlaveList)
        ;
            set ThisEntry       = $($)
            set BusNumberValue  = *($(ThisEntry),1)
            set SlotNumberValue = *($(ThisEntry),2)

            set AllowedSlaveSlotList = >($(AllowedSlaveSlotList),$(SlotNumberValue))
        ;
        EndForListDo

        Debug-Output "AllowedSlaveSlotList="$(AllowedSlaveSlotList)
    ;
    endif
    ;
    ; 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
; ----------------------------------------------------------------------
    ifint $(AdapterSupportsMirroring) == 1
    ;
        set DlgTemplate = "MDGADVANCEDM"
    ;
    else
    ;
        set DlgTemplate = "MDGADVANCED"
    ;
    endif
    ;
    ; 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)
        ifint $(AdapterSupportsMirroring) == 1
        ;
            set SlaveSlotNumber      = $(Combo15Out)
            set BeaconTimeout        = $(Combo16Out)
            set SingleStationTimeout = $(Combo17Out)
        ;
        endif
    ;
    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 = "MDGNDIS4 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
    ;
    ; If a Mirror slave adapter has been selected, ensure that an LAA
    ; has been specified and make sure that the Master and Slave PCI
    ; device IDs are different.
    ;
    ifint $(SlaveSlotNumber) != 0
    ;
        ifint $(SlotNumber) == $(SlaveSlotNumber)
        ;
            set Error        = $(MASTER_AND_SLAVE_CLASH)
            set From         = Get_Adapter_Options_Restart
            goto Non_Fatal_Info
        ;
        endif
        ifstr $(LAA) == ""
        ;
            set Error        = $(SET_LAA_FOR_MIRRORING)
            set From         = Get_Adapter_Options_Restart
            goto Non_Fatal_Info
        ;
        endif
    ;
    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
    ifstr(i) $(SlaveSlotNumber) == $(DEF_SLAVE_SLOT_NUMBER)
    ;
        ifstr(i) $(OldSlaveSlotNumber) != $(VALUE_UNKNOWN)
        ;
            DeleteRegValue $(KeyParameters) SlaveSlotNumber
        ;
        endif
    ;
    else
    ;
        set NewValueList = >($(NewValueList),+
             {SlaveSlotNumber, $(NoTitle), $(!REG_VT_DWORD), $(SlaveSlotNumber)})
    ;
    endif
    ifstr(i) $(BeaconTimeout) == $(DEF_BEACON_TIMEOUT)
    ;
        ifstr(i) $(OldBeaconTimeout) != $(VALUE_UNKNOWN)
        ;
            DeleteRegValue $(KeyParameters) BeaconTimeout
        ;
        endif
    ;
    else
    ;
        set NewValueList = >($(NewValueList),+
             {BeaconTimeout, $(NoTitle), $(!REG_VT_DWORD), $(BeaconTimeout)})
    ;
    endif
    ifstr(i) $(SingleStationTimeout) == $(DEF_SINGLE_TIMEOUT)
    ;
        ifstr(i) $(OldSingleStationTimeout) != $(VALUE_UNKNOWN)
        ;
            DeleteRegValue $(KeyParameters) SingleStationTimeout
        ;
        endif
    ;
    else
    ;
        set NewValueList = >($(NewValueList),+
             {SingleStationTimeout, $(NoTitle), $(!REG_VT_DWORD), $(SingleStationTimeout)})
    ;
    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)
    ;
    ; To support Hot Plug PCI we must add registry keys to tell the
    ; Hot Plug service which miniport OIDs to use to talk to us.
    ;
    ifint $(BusType) == 5
    ;
        OpenRegKey $(!REG_H_LOCAL) "" $(CompaqHotPlugKey) $(MAXIMUM_ALLOWED) hpp
        ifstr(i) $(hpp) == $(KeyNull)
        ;
            ;
            ; The Compaq Hot Plug registry key does not exist. We must add it.
            ;
            CreateRegKey $(!REG_H_LOCAL) {$(CompaqHotPlugKey), 0, GenericClass} "" $(!REG_KEY_SET_VALUE) "" hpp
            SetRegValue $(hpp) {ClassID, $(NoTitle), $(!REG_VT_DWORD), 0}
            SetRegValue $(hpp) {DLLName, $(NoTitle), $(!REG_VT_SZ), "CQRNICMN.DLL"}
        ;
        endif
        CreateRegKey $(hpp) {$(ProductSoftwareName), 0, GenericClass} "" $(!REG_KEY_SET_VALUE) "" hppmdg
        SetRegValue $(hppmdg) {BaseOIDAddress, $(NoTitle), $(!REG_VT_DWORD), $(BaseOIDAddress)}
        SetRegValue $(hppmdg) {SetOIDAddress, $(NoTitle), $(!REG_VT_DWORD), $(SetOIDAddress)}
        CloseRegKey $(hpp)
        CloseRegKey $(hppmdg)
    ;
    endif
    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
    ;
    ; Check that this option is supported by this driver.
    ;
    ifcontains(i) $(Option) not-in $(Current_OptionList)
    ;
        set UpgradeError = UPD_OPTION_NOT_SUPPORTED
        goto Fatal_Upgrade_Error
    ;
    endif
    ;
    ; 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)
    Return $(CommonStatus)
; -----------------------------------------------------------------------
; Install sections
; -----------------------------------------------------------------------
[Files-Inf]
1, oemsetup.inf, SIZE=100000, RENAME=$(!UG_Filename)
[Files-Driver]
1, mdgndis4.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: web2, load: 1.53