oemndcev.inf Driver File Contents (ZoomAP11Mbpsv1.22Disk1.exe)

;***********************************************************************
;
; OEMNDCST.INF  (OEMSETUP.INF)
;
;		Neesus Datacom 802.11 PC-AP Client Driver - Zoom Version
;
;	Version 1.7:
;		Make Encapsulation default RFC1042 instead of Encapsulated.
;	Version 1.8:
;		Don't copy any files. Now done by Installer.
;	Version 1.9:
;		Add support for other adapters and combine Client, AP and Bridge
;	Version 1.11:
;		11Mbit support
;		Change service name to NDC2MB
;		Change driver name to pcapcw10
;	Version 1.12:
;		
;
;***********************************************************************

;***********************************************************************
; 1. Identify
;
; DESCRIPTION:	To verify that this INF deals with the same type of options
;				as we are choosing currently.
;
; INPUT:		None
;
; OUTPUT:		$($R0): STATUS: STATUS_SUCCESSFUL
;				$($R1): Option Type (COMPUTER ...)
;				$($R2): Diskette description
;***********************************************************************
;
;
;---------------------------------------------------------------------------
; OPTION TYPE
; -----------
; This identifies the Option type we are dealing with.  The different
; possible types are:
;
; COMPUTER, DISPLAY, MOUSE, KEYBOARD, LAYOUT, SCSI, PRINTER, ...
;
;  Types specific to networking:
;
; NetAdapter,		a netcard / adapter combination or just a netcard
; NetDriver,		just a netcard driver
; NetTransport,		a complete NDIS-compliant TDI transport stack
; NetService,		an NT networking service
; NetWork,			a complete network ensemble.
; NetProvider		a complete network which supports NT MPR protocol
;---------------------------------------------------------------------------

[Identify]
	set Status		= STATUS_SUCCESSFUL
	set Identifier	= NetAdapter
	set Media		= #("Source Media Descriptions", 1, 1)

	Return $(Status) $(Identifier) $(Media)


;***********************************************************************
;
;	End Indentify
;
;***********************************************************************



;***********************************************************************
; 2. ReturnOptions:
;
; DESCRIPTION:	To return the option list supported by this INF and the
;				localised text list representing the options.
;
;
; INPUT:		$($0):  Language used. ( ENG | FRN | ... )
;
; OUTPUT:		$($R0): STATUS: STATUS_SUCCESSFUL |
;								STATUS_NOLANGUAGE
;								STATUS_FAILED
;								STATUS_NOTSUPPORTED
;
;				$($R1): Option List
;				$($R2): Option Text List
;***********************************************************************

[ReturnOptions]
	;
	;
	set 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 returnoptions
		endif

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

	;
	; form a list of all the options and another of the text representing
	;
returnoptions = +
	set OptionList		= ^(Options, 1)
	set OptionTextList	= ^(OptionsText$($0), 1)
	set Status			= STATUS_SUCCESSFUL

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



;=======================================================================
;
;	ReturnOptions related symbols
;
;=======================================================================

;-----------------------------------------------------------------------
; PlatformsSupported
; ------------------
; This identifies the platforms supported by the adapter card.
; Possible types are:
;
; ISA, EISA, MCA and PCMCIA
;-----------------------------------------------------------------------

[PlatformsSupported]
	ISA
	PCMCIA

;-----------------------------------------------------------------------
;
;	Languages Supported in INF File
; Possible types are:
;
; ENG, FRN, SPN, ...
;-----------------------------------------------------------------------
[LanguagesSupported]
	ENG

;-----------------------------------------------------------------------
; OPTION LIST
; -----------
; This section lists the OEM Option key names.  These keys are locale
; independent and used to represent the option in a locale independent
; manner.
;
;-----------------------------------------------------------------------

[Options]
	STA_PRISM1_PCM
	STA_PRISM2_PCM
	STA_ZOOM_PCM
	PCAP_PRISM1_PCM
	PCAP_PRISM2_PCM
	PCAP_ZOOM_PCM
	BRIDGE_PRISM1_PCM
	BRIDGE_PRISM2_PCM
	BRIDGE_ZOOM_PCM

[OptionsTextENG]
	STA_PRISM1_PCM		= "Neesus Datacom Client - Intersil Prism1 EVB"
	STA_PRISM2_PCM		= "Neesus Datacom Client - Intersil Prism2 EVB"
	STA_ZOOM_PCM      	= "Neesus Datacom Client - ZoomAir PCMCIA card"
	PCAP_PRISM1_PCM		= "Neesus Datacom Client - Intersil Prism1 EVB"
	PCAP_PRISM2_PCM		= "Neesus Datacom Client - Intersil Prism2 EVB"
	PCAP_ZOOM_PCM     	= "Neesus Datacom PC-AP - ZoomAir PCMCIA card"
	BRIDGE_PRISM1_PCM	= "Neesus Datacom Client - Intersil Prism1 EVB"
	BRIDGE_PRISM2_PCM	= "Neesus Datacom Client - Intersil Prism2 EVB"
	BRIDGE_ZOOM_PCM   	= "Neesus Datacom Bridge - ZoomAir PCMCIA card"



;***********************************************************************
;
;	End ReturnOptions
;
;***********************************************************************


;***********************************************************************
; 4. Source Media Descriptions:
;
; DESCRIPTION:	A detect section required in all oemsetup.inf files. It
;				consists of a lied for each floppy disk that is part of
;				the distribution set. The format is as follows:
;		
;				LineKey = [DiskDescription, TAGFILE = TagFileName]
;
; EXAMPLE:		1 = "Driver Disk #1", TAGFILE = disk1
;				
;
; INPUT:		None
;
; OUTPUT:		None
;
;***********************************************************************

[Source Media Descriptions]
	1  = "Neesus Datacom 802.11 PC-AP drivers"


;***********************************************************************
;
;	End Source Media Descriptions
;
;***********************************************************************




;***********************************************************************
;
; 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
;
;***********************************************************************


;------------------------------------------------------------------------
; CONSTANTS FOR USING DIALOGS
;------------------------------------------------------------------------
[IntersilPrism2FileConstants]
	GenericAdapterName	= "PRISM IEEE 802.11b Adapter"
	Manufacturer		= "Intersil Corporation"

[ZoomPCMCIAFileConstants]
	GenericAdapterName	= "ZoomAir 802.11B high rate Wireless LAN PC-card"
	Manufacturer		= "Zoom Telephonics"

[IntersilPrismEVBFileConstants]
	GenericAdapterName	= "PRISM IEEE 802.11b EVB Adapter"
	Manufacturer		= "Intersil Corporation"

[FileConstants]
	GenericDriverName	= "Neesus Datacom 802.11 Client driver"
	GenericSysName		= "pcapcw10.sys"
	GenericName			= "NDC2MB"

	;
	;  File names, etc.
	;
	UtilityInf			= "UTILITY.INF"
	ParamInf			= "NCPARAM.INF"
	subroutineinf		= "SUBROUTN.INF"
	SoftwareType		= "driver"
	Exit_Code			= 0

	;
	; EventLog Message File
	;
	NetEventDLL			= "%SystemRoot%\System32\netevent.dll"
	IoLogMsgDLL			= "%SystemRoot%\System32\IoLogMsg.dll"

	;
	; Product Info
	;
	ProductMajorVersion	= "2"
	ProductMinorVersion	= "25"
	ProductVersion		= $(ProductMajorVersion)"."$(ProductMinorVersion)

	;
	; Software
	;
	ProductSoftwareName			= "NDC2MB"
	ProductSoftwareImagePath	= "\SystemRoot\System32\drivers\"$(GenericSysName)
	NetRuleSoftwareType			= "ndc2mbSys ndisDriver ndc2mbDriver"

	NetRuleSoftwareUse			= $(SoftwareType)
	NetRuleSoftwareBindForm		= """ndc2mbSys"" yes no container"

	NetRuleSoftwareClass		= {"ndc2mbDriver basic"}
	NetRuleSoftwareBindable		= {"ndc2mbDriver ndc2mbAdapter non exclusive 100"}
	;
	; Hardware
	;
	ProductHardwareName			= "NDC2MB"
	NetRuleHardwareType			= "ndc2mb ndc2mbAdapter"
	NetRuleHardwareBindForm		= " yes yes container"
	NetRuleHardwareClass		= {"ndc2mbAdapter basic"}

	;
	; Registry Key
	;
	ProductKeyName			= $(!NTN_SoftwareBase)"\"$(Manufacturer)"\"$(ProductSoftwareName)"\CurrentVersion"
	ParamKeyName			= $(!NTN_ServiceBase)"\"$(ProductHardwareName)"\Parameters"
	PcmciaDataBaseKeyName	= $(!NTN_ServiceBase)"\Pcmcia\Database"

[GeneralConstants]
	;
	;  Program flow control variables.
	;
	from		= ""
	to			= ""
	;
	;  Return codes; Exit_Code is set to one of these
	;
	ExitCodeOk		= 0
	ExitCodeCancel	= 1
	ExitCodeFatal	= 2

	KeyNull				= ""
	MAXIMUM_ALLOWED		= 33554432
	RegistryErrorIndex 	= NO_ERROR
	KeyProduct			= ""
	KeyParameters		= ""

	TRUE	= 1
	FALSE	= 0
	NoTitle	= 0

	ExitState			= "Active"
	OldVersionExisted	= $(FALSE)

	DriverPath	= $(!STF_NTPATH)\drivers

[date]
	; Now is a list which contains { Sec from 1-1-1970, Year, Month, Day, Hour,
	; Minute, Second }
	Now	= {} ? $(!LIBHANDLE) GetSystemDate


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

	; Enable debugging output
	Set !G:DebugOutputControl = 1

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

	read-syms GeneralConstants

	Ifcontains(i) $(Option) in { "STA_PRISM2_PCM", "STA_PRISM1_PCM", "PCAP_PRISM2_PCM", "PCAP_PRISM1_PCM", "BRIDGE_PRISM2_PCM", "BRIDGE_PRISM1_PCM" }
		read-syms IntersilPrism2FileConstants
	else-Ifcontains(i) $(Option) in { "STA_ZOOM_PCM", "PCAP_ZOOM_PCM", "BRIDGE_ZOOM_PCM" }
		read-syms ZoomPCMCIAFileConstants
	else
		read-syms IntersilPrismEVBFileConstants
	endif

	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 = +
	Set ActivateDetection = FALSE

	Ifstr(i) $(!NTN_InstallMode) == deinstall
		set StartLabel = removeadapter
	else-Ifstr(i) $(!NTN_InstallMode) == Update
		set StartLabel = UpgradeSoftware
	else-Ifstr(i) $(!NTN_InstallMode) == bind
		set StartLabel = bindingadapter
	else-Ifstr(i) $(!NTN_InstallMode) == configure
;		set ActivateDetection = TRUE
		set StartLabel = configureadapter
		;
		;	You cannot config the software component
		;
		Ifstr(i) $(ProductKeyName) == $(!NTN_RegBase)
			Debug-Output "Cannot configure the Neesus 802.11 PC-AP driver."
			Shell $(UtilityInf), RegistryErrorString, "CANNOT_CONFIGURE_SOFTWARE"
			ifint $($ShellCode) != $(!SHELL_CODE_OK)
				Debug-Output "ShellCode error: cannot get an error string."
				goto ShellCodeError
			endif
			set Error	= $($R0)
			set from	= end
			set to		= end
			goto nonfatalinfo
		endif
	else
;		set ActivateDetection		= TRUE
		set StartLabel				= installadapter
		set OEM_ABANDON_OPTIONS		= {}
		set OEM_ABANDON_SOFTWARE	= FALSE
		set OEM_ABANDON_ON			= TRUE
	endif

	install "PCMCIA-Defaults"
	endif

	install "Read-Defaults"
	install "Parm-WriteReg"

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

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

installadapter = +
	;
	; Create/recreate the Registry's PCMCIA database entry for the Adapter.
	;

	Ifcontains(i) $(Option) in { "STA_PRISM2_PCM", "STA_PRISM1_PCM", "PCAP_PRISM2_PCM", "PCAP_PRISM1_PCM", "BRIDGE_PRISM2_PCM", "BRIDGE_PRISM1_PCM" }
		set ManKeyName = "INTERSIL\HFA384X/IEEE";
	else-Ifcontains(i) $(Option) in { "STA_ZOOM_PCM", "BRIDGE_ZOOM_PCM", "PCAP_ZOOM_PCM" }
		set ManKeyName = "ZoomAir 11Mbps High\Rate wireless Networking";
	else
		set ManKeyName = "CHOICE MICROSYSTEMS\CW10/IEEE";
	endif

	Debug-Output "*** installadapter ***"
	Debug-Output "PcmciaDataBaseKeyName = "$(PcmciaDataBaseKeyName)
	Debug-Output "ManKeyName = "$(ManKeyName)
	set KeyPcmciaDataBase = ""
	OpenRegKey $(!REG_H_LOCAL) "" $(PcmciaDataBaseKeyName) $(MAXIMUM_ALLOWED) KeyPcmciaDataBase
	Shell "" ExCreateRegKey $(KeyPcmciaDataBase) $(ManKeyName)
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "ShellCode error: cannot get an error string."
		CloseRegKey $(KeyPcmciaDataBase)
		goto ShellCodeError
	endif

	OpenRegKey $(KeyPcmciaDataBase) "" $(ManKeyName) $(MAXIMUM_ALLOWED) KeyTemp
	SetRegValue $(KeyTemp) {Driver,$(NoTitle),$(!REG_VT_SZ),$(ProductHardwareName)}
	CloseRegKey $(KeyTemp)
	CloseRegKey $(KeyPcmciaDataBase)

	Debug-Output "Driver Value set in ManKey"
	;
	; 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 "ProductKeyName already exists = "$(ProductKeyName)
		CloseRegKey $(KeyProduct)

		ifstr(i) !(NTN_RegBase) == $(ProductKeyName)
			Debug-Output "Cannot Install the same software again"

			Shell $(UtilityInf), VerExistedDlg, $(ProductSoftwareTitle),+
				$(ProductVersion)
			ifint $($ShellCode) != $(!SHELL_CODE_OK)
				Debug-Output "ShellCode error: cannot get an error string."
				goto ShellCodeError
			endif

			goto end
		else
			Debug-Output "Add a new adapter card?"

			Shell $(UtilityInf), CardExistedDlg

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

			ifstr(i) $($R1) != "OK"
				goto end
			endif
			set OldVersionExisted = $(TRUE)
		endif
	endif

;
;  dll load addition
;
	Debug-Output "Calling DoAskSource."

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

	Ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "ShellCode error: cannot get an error string."
		Goto ShellCodeError
	Else-Ifstr(i) $($R0) == STATUS_FAILED
		Shell $(UtilityInf) RegistryErrorString "ASK_SOURCE_FAIL"
		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			Debug-Output "ShellCode error: cannot get an error string."
			goto ShellCodeError
		endif
		set Error = $($R0)
		Goto fatal
	Else-Ifstr(i) $($R0) == STATUS_USERCANCEL
		Goto successful
	Endif
	Set SrcDir = $($R1)

	Debug-Output "Done DoAskSource, calling Install-Dll."
;
;	Run Dll for updating parameters
;
	install "Install-Dll"

	Debug-Output "Done Install-Dll, going to adaptersetup."

;	Don't want to show Advance properties during install.
;	goto adaptersetup
	goto skipoptions

;-----------------------------------------------
; Configuration Section
;-----------------------------------------------
;
;	Get the current values of all the parameters
;
configureadapter = +

	Debug-Output "Starting configureadapter."

	Ifstr $(KeyProduct) == $(KeyNull)
		OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_RegBase) $(MAXIMUM_ALLOWED) KeyProduct
		Ifstr $(KeyProduct) == $(KeyNull)
			set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
			Debug-Output "Cannot find component product key"
			goto fatalregistry
		Endif
	Endif

	;
	; Get the other parameters;  they're attached to the service parameters key
	;
	Debug-Output "INF: Shelling to FindService"
	Shell $(UtilityInf) FindService, $(KeyProduct)
	Ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "INF: FindService shell failure"
		Goto ShellCodeError
	Endif
	Ifstr(i) $($R0) != NO_ERROR
		Debug-Output "INF: FindService Shell error: "$($R0)
		Goto fatalregistry
	endif

	Set KeyParameters = $($R2)

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

	Ifstr $(KeyParameters) == $(KeyNull)
		set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
		Debug-Output "Cannot find component service"
		goto fatalregistry
	endif

	set OldVersionExisted = $(TRUE)

	install "Parm-ReadReg"


;	Shell $(ParamInf) Param_SaveValues
;	Set CurrParamSettings = $($R0)
;
;	Put up the adapter configuration dialog if necessary.
;
;	Note that $(CurrParamSettings) has the old known parameter values.
;
adaptersetup = +

;	Shell "" DebugConfiguration "before displaying dialog"

	Debug-Output "Starting adaptersetup"

	Set from = adapteroptions


adapteroptions = +

	Debug-Output "Starting adapteroptions"

	LoadLibrary "Disk 1" $(!STF_WINDOWSSYSPATH)\$(DialogDllName) hLib

	read-syms FileDependentDlg$(!STF_LANGUAGE)

	ui start "InputDlg"  $(hLib)

	set ExitButton  = $(ButtonPressed)

	Debug-Output " ButtonPressed "$(ButtonPressed)

	FreeLibrary $(hLib)

	ifstr(i) $(DLGEVENT) == "CONTINUE"
		Debug-Output "Action: Continue"

		install "Parm-UI-values"
		set ExitButton			= $(ButtonPressed)

		ui pop 1
;		goto nextstep
	else-ifstr(i) $(DLGEVENT) == "EXIT"
		set CommonStatus = STATUS_USERCANCEL
		Debug-Output "Action: exit. Bye."
		ui pop 1
		goto end
	else
		;
		; Unknow command
		;
		ui pop 1

		Debug-Output "Action: unknown. Bye."
		goto end
	endif

	Debug-Output " Combo list out "$(ComboListItemsOut)

;
;	If installing, go create the necessary keys;
;	if configuring, they're already open.
;
skipoptions =+

	Debug-Output "Starting skipoptions."

	ifint $(OldVersionExisted) == $(TRUE)
		Debug-Output "Older version existed."

		ifstr(i) $(!NTN_InstallMode) == configure
			goto writeparameters
		endif
	endif
	StartWait
	;
	; Add Software Component
	;
	ifint $(OldVersionExisted) == $(FALSE)

		Debug-Output "No older version."

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

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

				Ifint $($ShellCode) != $(!SHELL_CODE_OK)
					Goto ShellCodeError
				Else-Ifstr(i) $($R0) == STATUS_FAILED
					Shell $(UtilityInf) RegistryErrorString "ASK_SOURCE_FAIL"
					ifint $($ShellCode) != $(!SHELL_CODE_OK)
						goto ShellCodeError
					endif
					set Error = $($R0)
					Goto fatal
				Else-Ifstr(i) $($R0) == STATUS_USERCANCEL
					Goto successful
				Endif

				Set SrcDir = $($R1)

			Endif

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



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

		Set OEM_ABANDON_SOFTWARE = TRUE

		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			Debug-Output "ShellCode error"
			goto ShellCodeError
		endif
		;
		;	At this point:
		;		$R1 contains the product version key handle;
		;		$R2 contains the NetRules subkey handle;
		;		$R3 contains the new Services key handle; and
		;		$R4 contains the Parameters key
		;		$R5 contains the Linkage Key
		;
		set RegistryErrorIndex	= $($R0)
		set KeyProduct			= $($R1)
		Set SoftNetRulesKey		= $($R2)
		CloseRegKey $($R3)
		CloseRegKey $($R4)
		CloseRegKey $($R5)

		Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
			EndWait
			Debug-Output "Registry error: add software components"
			CloseRegKey $(KeyProduct)
			CloseRegKey $(SoftNetRulesKey)
			goto fatalregistry
		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)},+
					{ServiceName,$(NoTitle),$(!REG_VT_SZ),$(ProductSoftwareName)},+
					{InstallDate,$(NoTitle),$(!REG_VT_DWORD),*($(Now),1)}}

		Shell  $(UtilityInf), AddValueList, $(KeyProduct), $(NewValueList)
		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			Debug-Output "ShellCode error."
			goto ShellCodeError
		endif

		set RegistryErrorIndex = $($R0)

		Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
			EndWait
			Debug-Output "Registry error: add value list."
			CloseRegKey $(KeyProduct)
			CloseRegKey $(SoftNetRulesKey)
			goto fatalregistry
		endif

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

		Shell  $(UtilityInf), AddValueList, $(SoftNetRulesKey), $(NewValueList)
		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			Debug-Output "ShellCode error."
			goto ShellCodeError
		endif

		set RegistryErrorIndex = $($R0)

		CloseRegKey $(KeyProduct)
		CloseRegKey $(SoftNetRulesKey)

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

	Shell $(UtilityInf), AddHardwareComponent, $(ProductHardwareName),$(STF_CONTEXTINFNAME),$(ProductKeyName)

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

	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "Cannot add hardware component"
		goto ShellCodeError
	endif
	set RegistryErrorIndex = $($R0)

	Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
		EndWait
		Debug-Output "Registry error: add hardware component"
		CloseRegKey $($R1)
		CloseRegKey $($R2)
		CloseRegKey $($R3)
		goto fatalregistry
	endif

;
;	At this point:
;		$R1  Registry key variable for HARDWARE\Netcard\(n)
;		$R2  Registry key variable for HARDWARE\Netcard\(n)\\NetRules
;		$R3  Registry key handle for <service>\Parameters key
;		$R4  Adapter number assigned to adapter
;		$R5  Service name generated by combining svc name with adapter number
;
	set KeyParameters		= $($R3)
	set KeyAdapterRules		= $($R2)
	set AdapterNumber		= $($R4)

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

	Shell  $(UtilityInf), AddValueList, $($R1), $(NewValueList)
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "ShellCode error"
		goto ShellCodeError
	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)}}

	Shell  $(UtilityInf), AddValueList, $(KeyAdapterRules), $(NewValueList)
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "ShellCode error."
		goto ShellCodeError
	endif

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

	CloseRegKey $(KeyAdapterRules)

	;
	;	Only create Defaults key when installing driver
	;	Write defaults to registry before updating values in lists
	;
	Debug-Output "Starting Install-Defaults."

	CreateRegKey $(KeyParameters) {"defaults",0,GenericClass} "" $(MAXIMUM_ALLOWED) "" DefaultsKey
	Ifstr(i) $(DefaultsKey) == $(KeyNull)
		Debug-Output "Registry error: Create defaults subkey"
		CloseRegKey $(KeyParameters)
		goto fatalregistry
	Endif
	
	Debug-Output "CreateKey successful."

	Shell  $(UtilityInf), AddValueList, $(DefaultsKey), $(NDCValueList)
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "ShellCode error."
		goto ShellCodeError
	endif

	set RegistryErrorIndex = $($R0)
	Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
		Debug-Output "Registry error: Add value list"
		CloseRegKey $(DefaultsKey)
		CloseRegKey $(KeyParameters)
		goto fatalregistry
	endif

	Debug-Output "Adding NDC defaults successful."

	Shell  $(UtilityInf), AddValueList, $(DefaultsKey), $(NetTypeValueList)
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "ShellCode error."
		goto ShellCodeError
	endif

	set RegistryErrorIndex = $($R0)
	Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
		Debug-Output "Registry error: Add value list"
		CloseRegKey $(DefaultsKey)
		CloseRegKey $(KeyParameters)
		goto fatalregistry
	endif

	Debug-Output "Adding defaults based on NetworkType, successful."

	Shell  $(UtilityInf), AddValueList, $(DefaultsKey), $(PHYTypeValueList)
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "ShellCode error."
		goto ShellCodeError
	endif

	set RegistryErrorIndex = $($R0)
	Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
		Debug-Output "Registry error: Add value list"
		CloseRegKey $(DefaultsKey)
		CloseRegKey $(KeyParameters)
		goto fatalregistry
	endif

	Debug-Output "Adding defaults based on PHYType, successful."

	goto writeparameters

;
;	REQUIRED:	$(KeyParameters) contains service Parameters key handle
;
writeparameters = +
	Shell $(UtilityInf), GetBusTypeNum

;	set BusTypeNum = $($R1)
; the above was not working so hard coding the bus type to 1 which represents
;			NdisInterfaceIsa
	set BusTypeNum		= 1
	set BusNumber		= 0
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "ShellCode error."
		goto ShellCodeError
	endif

;
;	Add the rest of the parameters to the Services area
;

	install "Parm-WriteReg"

	Shell  $(UtilityInf), AddValueList, $(KeyParameters), $(NetValueList)
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "ShellCode error."
		goto ShellCodeError
	endif

	set RegistryErrorIndex = $($R0)
	Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
		Debug-Output "Registry error: Add value list"
		CloseRegKey $(KeyParameters)
		goto fatalregistry
	endif

	Shell  $(UtilityInf), AddValueList, $(KeyParameters), $(NDCValueList)
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "ShellCode error."
		goto ShellCodeError
	endif

	set RegistryErrorIndex = $($R0)
	Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
		Debug-Output "Registry error: Add value list"
		CloseRegKey $(KeyParameters)
		goto fatalregistry
	endif

	Shell  $(UtilityInf), AddValueList, $(KeyParameters), $(NetTypeValueList)
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "ShellCode error."
		goto ShellCodeError
	endif

	set RegistryErrorIndex = $($R0)
	Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
		Debug-Output "Registry error: Add value list"
		CloseRegKey $(KeyParameters)
		goto fatalregistry
	endif

	Shell  $(UtilityInf), AddValueList, $(KeyParameters), $(PHYTypeValueList)
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "ShellCode error."
		goto ShellCodeError
	endif

	set RegistryErrorIndex = $($R0)
	Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
		Debug-Output "Registry error: Add value list"
		CloseRegKey $(KeyParameters)
		goto fatalregistry
	endif

	CloseRegKey $(KeyParameters)

	EndWait

	goto successful

;-----------------------------------------------
; Binding section
;-----------------------------------------------
bindingadapter =+
	set Error = "Binding: Sorry, not yet implemented."
	goto fatal

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

removeadapter = +
	Ifstr(i) $(ProductKeyName) == $(!NTN_RegBase)
		; Remove Software Component
		Shell $(UtilityInf), RemoveSoftwareComponent, $(Manufacturer), +
			$(ProductSoftwareName)
		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			Debug-Output "ShellCode error"
			goto ShellCodeError
		endif

		set RegistryErrorIndex = $($R0)

		Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
			goto fatalregistry
		endif
		else
		Shell $(UtilityInf), RemoveHardwareComponent, $(Manufacturer), +
			$(ProductSoftwareName), $(!NTN_RegBase)
		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			Debug-Output "ShellCode error"
			goto ShellCodeError
		endif

		set RegistryErrorIndex = $($R0)

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

	goto end

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

UpgradeSoftware = +
	;
	; First determine whether we want to do upgrade or update for software
	; or hardware component. Then we will determine whether the Mode is
	; update or upgrade.
	;
	; If the same version of the product existed in the registry, we do
	; update. Otherwise, we will do a upgrade
	;
	ifstr(i) $(ProductKeyName) == $(!NTN_RegBase)
		; Upgrade software component
		;
		; see whether the same version exist or not
		;
		OpenRegKey $(!REG_H_LOCAL) "" $(ProductKeyName) $(MAXIMUM_ALLOWED) KeyProduct

		Ifstr $(KeyProduct) != $(KeyNull)
			GetRegValue $(KeyProduct),"MajorVersion", VersionInfo
			set Version = *($(VersionInfo), 4)

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

			ifint $($ShellCode) != $(!SHELL_CODE_OK)
				Debug-Output "ShellCode error"
				goto ShellCodeError
			endif

			set !UG_Filename = $($R0)

			ifstr(i) $(!UG_Filename) != ""
				install "Install-Update"
				ifstr(i) $(STF_INSTALL_OUTCOME) != STF_SUCCESS
					goto fatal
				endif
			endif

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

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

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

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

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

	goto end
	;
	; End of Upgrade Software
	;

;
;  Escape hatches
;
successful = +
	goto end

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

	set RegistryErrorIndex = $($R0)

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

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

		set RegistryErrorIndex = $($R0)

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

	goto end

;
; warning display
;
warning = +
	Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "WARNING", $(Error)
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		goto ShellCodeError
	endif
	ifstr(i) $($R1) == "OK"
		goto $(to)
	else-ifstr(i) $($R1) == "CANCEL"
		goto $(from)
	else
		goto "end"
	endif
;
; non fatal error display
;
nonfatalinfo = +
	Set Severity = STATUS
	Set CommonStatus = STATUS_USERCANCEL
	goto nonfatalmsg
nonfatal = +
	Set Severity = NONFATAL
	goto nonfatalmsg
nonfatalmsg = +
	ifstr(i) $(Error) == ""
		Set Severity = NONFATAL
		Shell $(UtilityInf) RegistryErrorString "SETUP_FAIL"
		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			goto ShellCodeError
		endif
		set Error = $($R0)
	endif
	Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), $(Severity), $(Error)
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		goto ShellCodeError
	endif
	ifstr(i) $($R1) == "OK"
		goto $(from)
	else
		goto "end"
	endif

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

	goto setfailed

;
;  Shelling error
;
ShellCodeError = +
	set DlgType			= "MessageBox"
	set STF_MB_TITLE	= $(ShellCodeErrorTitle)
	set STF_MB_TEXT 	= $(ShellCodeErrorText)
	set STF_MB_TYPE 	= 1
	set STF_MB_ICON 	= 3
	set STF_MB_DEF		= 1
	ui start "Error Message"
	goto setfailed

setfailed = +
	set CommonStatus = STATUS_FAILED
	;
	; if OEM_ABANDON_ON == TRUE, then remove the registry entries
	;
	ifstr(i) $(OEM_ABANDON_ON) == TRUE
		set OEM_ABANDON_ON = FALSE
		goto abandon
	endif
	goto end

end = +
	goto term

term = +

	Return $(CommonStatus)

[DebugConfiguration]

	Set InfName = "OEMNANDC.INF"
	Debug-Output $(InfName)" **CONFIGURATION STATE: "$($0)
	Debug-Output $(InfName)" IRQ_Level is "$(!p:IRQ_Level)
	Debug-Output $(InfName)" IOBaseAddrValue is "$(!p:IOBaseAddrValue)
	Debug-Output $(InfName)" TransceiverValue is "$(!p:TransceiverValue)
;	Debug-Output $(InfName)" MemBaseAddrDec is "$(!p:MemBaseAddrDec)
	Debug-Output $(InfName)" MappedValue is "$(!p:MappedValue)

	return


;***************************************************************
;  INSTALL SECTIONS
;***************************************************************
[Install-Option]
	set STF_VITAL = ""

	ifstr(i) $(AddCopy) == "YES"

		;
		; Add the files to the copy list
		;
		;  BUGBUG: eliminate the "nt2" in the next line when Sunil fixes
		;		the other INF files
		;
;		AddSectionFilesToCopyList Files-$(Option) $(SrcDir) $(!STF_WINDOWSSYSPATH)\drivers
;		AddSectionFilesToCopyList Files-Dll $(SrcDir) $(!STF_WINDOWSSYSPATH)

	endif

	ifstr(i) $(DoCopy) == "YES"

		;
		; Copy files in the copy list
		;
;		set !STF_NCPA_FLUSH_COPYLIST = TRUE
;		CopyFilesInCopyList

	endif

	Exit

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

;	AddSectionFilesToCopyList Files-$(Option) $(SrcDir) $(!STF_WINDOWSSYSPATH)\drivers
;	AddSectionFilesToCopyList Files-Inf $(SrcDir) $(!STF_WINDOWSSYSPATH)
;	AddSectionFilesToCopyList Files-Dll $(SrcDir) $(!STF_WINDOWSSYSPATH)

;	set !STF_NCPA_FLUSH_COPYLIST = TRUE
;	CopyFilesInCopyList

	exit

[Install-Dll]
;	set STF_VITAL		= ""
;	AddSectionFilesToCopyList Files-Dll $(SrcDir) $(!STF_WINDOWSSYSPATH)
;	set !STF_NCPA_FLUSH_COPYLIST = TRUE
;	CopyFilesInCopyList
	exit

;***************************************************************
;  Parameter SECTIONS
;***************************************************************

[Parm-ReadReg]
	set ValueName	= ""
	set ValueData	= ""
	set ValueStr 	= ""
	set ValueList	= {}
	;
	; Get the old values
	;
	EnumRegValue $(KeyParameters) ValueList

	ForListDo $(ValueList)
		set ValueItem	= $($)
		set ValueName	= *($(ValueItem),1)
		set ValueData	= *($(ValueItem),4)
  ; resources
		ifstr(i) $(ValueName) == "IoBaseAddress"
			set IOBaseAddrItem = $(ValueData)
		else-ifstr(i) $(ValueName) == "InterruptNumber"
			set IRQValueItem = $(ValueData)
;		else-ifstr(i) $(ValueName) == "MemoryMappedBaseAddress"
;			set MemBaseAddrItem = $(ValueData)
  ; general - combo
		else-ifstr(i) $(ValueName) == "DSChannel"
			set PHYParmItem = $(ValueData)
;		else-ifstr(i) $(ValueName) == "FHPattern"
;			set PHYParmItem = $(ValueData)
		else-ifstr(i) $(ValueName) == "NetworkType"
			set NetTypeItem = $(ValueData)
  ; checkbox
		else-ifstr(i) $(ValueName) == "Pcmcia"
			set PcmciaValue = $(ValueData)
  ; edit
		else-ifstr(i) $(ValueName) == "SSID"
			set SSIDValue = $(ValueData)
		else-ifstr(i) $(ValueName) == "SerialNum"
			set SerialNumValue = $(ValueData)

		endif

	EndForListDo

	ifint $(PcmciaValue) == 1
		set Chk1 = "ON"
	else
		set Chk1 = "OFF"
	endif

	set IOBaseAddrUIVal = *($(IOBaseAddrList), ~($(IOBaseAddrValues),$(IOBaseAddrItem)))
	ifstr(i) $(IOBaseAddrUIVal) == ""
		set IOBaseAddrUIVal = *($(IOBaseAddrList), 1)
	endif

	set IRQValueUIVal = *($(IRQList), ~($(IRQValues),$(IRQValueItem)))
	ifstr(i) $(IRQValueUIVal) == ""
		set IRQValueUIVal = *($(IRQList), 6)
	endif

;	set MemBaseAddrUIVal = *($(MemBaseAddrList), ~($(MemBaseAddrValues),$(MemBaseAddrItem)))
;	ifstr(i) $(MemBaseAddrUIVal) == ""
;		set MemBaseAddrUIVal = *($(MemBaseAddrList), 9)
;	endif

	set PHYParmUIVal = *($(PHYParmList), ~($(PHYParmValues),$(PHYParmItem)))
	ifstr(i) $(PHYParmUIVal) == ""
		set PHYParmUIVal = *($(PHYParmList), 1)
	endif

	set NetTypeUIVal = *($(NetTypeList), ~($(NetTypeValues),$(NetTypeItem)))
	ifstr(i) $(NetTypeUIVal) == ""
		set NetTypeUIVal = *($(NetTypeList), 1)
	endif

	;  Save the settings as they were read from the Registry.
exit

[Parm-UI-values]
		set IOBaseAddrUIVal		= $(Combo1Out)
		set IRQValueUIVal		= $(Combo2Out)
		set MemBaseAddrUIVal	= $(Combo3Out)
		set PHYParmUIVal		= $(Combo4Out)
		set NetTypeUIVal		= $(Combo5Out)

		set SerialNumValue 		= *($(EditTextOut),1)
		set SSIDValue			= *($(EditTextOut),2)

		Set Chk = *($(CheckItemsOut), 1)
		Ifstr(i) $(Chk) == "ON"
			Set PcmciaValue = 1
			set Chk1 = "ON"
		Else
			Set PcmciaValue = 0
			set Chk1 = "OFF"
		Endif
exit
[Parm-WriteReg]
	set IOBaseAddrValue		= *($(IOBaseAddrValues), ~($(IOBaseAddrList),$(IOBaseAddrUIVal)))
	set IRQValue			= *($(IRQValues), ~($(IRQList),$(IRQValueUIVal)))
;	set MemBaseAddrValue	= *($(MemBaseAddrValues), ~($(MemBaseAddrList),$(MemBaseAddrUIVal)))
	set PHYParmValue		= *($(PHYParmValues), ~($(PHYParmList),$(PHYParmUIVal)))
	set NetTypeValue		= *($(NetTypeValues), ~($(NetTypeList),$(NetTypeUIVal)))

;
;	If n/a then don't write InterruptNumber registry value.
;
;	ifstr(i) $(IRQValueUIVal) == "n/a"
		set NetValueList = {+
				{MediaType,		$(NoTitle),$(!REG_VT_DWORD),1},+
				{BusNumber,		$(NoTitle),$(!REG_VT_DWORD),$(BusNumber)},+
				{BusType,		$(NoTitle),$(!REG_VT_DWORD),$(BusTypeNum)},+
				{IoBaseAddress, $(NoTitle),$(!REG_VT_DWORD),$(IOBaseAddrValue)},+
				{IoLength,		$(NoTitle),$(!REG_VT_DWORD),64},+
				{Pcmcia,		$(NoTitle),$(!REG_VT_DWORD),$(PcmciaValue)},+
				{MajorVersion,	$(NoTitle),$(!REG_VT_SZ),2},+
				{MinorVersion,	$(NoTitle),$(!REG_VT_SZ),0},+
				}
;	else
;		set NetValueList = {+
;				{MediaType,		$(NoTitle),$(!REG_VT_DWORD),1},+
;				{BusNumber,		$(NoTitle),$(!REG_VT_DWORD),$(BusNumber)},+
;				{BusType,		$(NoTitle),$(!REG_VT_DWORD),$(BusTypeNum)},+
;				{IoBaseAddress, $(NoTitle),$(!REG_VT_DWORD),$(IOBaseAddrValue)},+
;				{IoLength,		$(NoTitle),$(!REG_VT_DWORD),64},+
;				{InterruptNumber,$(NoTitle),$(!REG_VT_DWORD),$(IRQValue)},+
;				{Pcmcia,		$(NoTitle),$(!REG_VT_DWORD),$(PcmciaValue)},+
;				{MajorVersion,	$(NoTitle),$(!REG_VT_SZ),2},+
;				{MinorVersion,	$(NoTitle),$(!REG_VT_SZ),0},+
;				}
;	endif
	set NDCValueList = {+
			{SerialNum,		$(NoTitle),$(!REG_VT_SZ),	$(SerialNumValue)},+
			{SSID,			$(NoTitle),$(!REG_VT_SZ),	$(SSIDValue)},+
			{BeaconPeriod,	$(NoTitle),$(!REG_VT_DWORD),$(BeaconPeriodValue)},+
			{RTSThresh,		$(NoTitle),$(!REG_VT_DWORD),$(RTSThresValue)},+
			{FragThresh,	$(NoTitle),$(!REG_VT_DWORD),$(FragThresValue)},+
			{DisassocThresh,$(NoTitle),$(!REG_VT_DWORD),$(DisassocThresValue)},+
			{Encapsulation,	$(NoTitle),$(!REG_VT_DWORD),$(EthConvValue)},+
			{WepReq,		$(NoTitle),$(!REG_VT_DWORD),$(WepModeValue)},+
			{WepDynState,	$(NoTitle),$(!REG_VT_DWORD),$(WepDynStateValue)},+
			}
	set NetTypeValueList = {+
			{NetworkType,	$(NoTitle),$(!REG_VT_DWORD),$(NetTypeValue)},+
			{NumOfNodes,	$(NoTitle),$(!REG_VT_DWORD),$(MaxNodesValue)},+
			{CFMode,		$(NoTitle),$(!REG_VT_DWORD),$(BcastModeValue)},+
			{AssocTimeout,  $(NoTitle),$(!REG_VT_DWORD),$(AssoTimeValue)},+
			{AuthTimeout,	$(NoTitle),$(!REG_VT_DWORD),$(AuthTimeValue)},+
			{DTIMPeriod,	$(NoTitle),$(!REG_VT_DWORD),$(DTIMPeriodValue)},+
			{CFPPeriod,		$(NoTitle),$(!REG_VT_DWORD),$(CFPPeriodValue)},+
			{CFPMaxDuration,$(NoTitle),$(!REG_VT_DWORD),$(CFPMaxDurValue)},+
			{StartBSS,		$(NoTitle),$(!REG_VT_DWORD),$(StartBSSValue)},+
			{PSMode,		$(NoTitle),$(!REG_VT_DWORD),$(PSModeValue)},+
			{PSLevel,		$(NoTitle),$(!REG_VT_DWORD),$(PSLevelValue)},+
			{ATIMWindow,	$(NoTitle),$(!REG_VT_DWORD),$(ATIMWindowValue)},+
			{ListenInterval,$(NoTitle),$(!REG_VT_DWORD),$(ListenIntValue)},+
			{ScanMode,		$(NoTitle),$(!REG_VT_DWORD),$(ScanModeValue)},+
			{DecryptInDriver,$(NoTitle),$(!REG_VT_DWORD),$(DecryptInDriverValue)},+
			{EncryptInDriver,$(NoTitle),$(!REG_VT_DWORD),$(EncryptInDriverValue)},+
			{WEPFactor,		$(NoTitle),$(!REG_VT_DWORD),$(WEPFactorValue)},+
			{PollInDriver,	$(NoTitle),$(!REG_VT_DWORD),$(PollInDriverValue)},+
			{IBSSInDriver,	$(NoTitle),$(!REG_VT_DWORD),$(IBSSInDriverValue)},+
			{PreambleMode,	$(NoTitle),$(!REG_VT_DWORD),$(PreambleModeValue)},+
			}
	Ifstr(i) $(PHYParmName) == "DSChannel"
		set PHYTypeValueList = {+
			{DSChannel,		$(NoTitle),$(!REG_VT_DWORD),$(PHYParmValue)},+
			{StnBasicRate,  $(NoTitle),$(!REG_VT_DWORD),$(StaRateValue)},+
			}
	else
		set PHYTypeValueList = {+
;			{FHPattern,		$(NoTitle),$(!REG_VT_DWORD),$(PHYParmValue)},+
			{StnBasicRate,  $(NoTitle),$(!REG_VT_DWORD),$(StaRateValue)},+
			{DwellPeriod,	$(NoTitle),$(!REG_VT_DWORD),$(DwellPeriodValue)},+
			}
	endif

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

;***************************************************************
;  Symbol SECTIONS
;***************************************************************

[ProductType]
	STF_PRODUCT  = Winnt
	STF_PLATFORM = I386

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

;[Files-PCAP_HAR_PCM]
;	1, ndcapdrv.sys, SIZE=12800

;[Files-STA_HAR_PCM]
;	1, ndcapdrv.sys, SIZE=12800

;[Files-Dll]
;	1, ndcpcap.dll , SIZE=7168

[FileConstantsENG]
	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:"

	FunctionTitle		= $(GenericAdapterName)" Setup"

	ProductSoftwareDescription	= $(GenericDriverName)
	ProductHardwareDescription	= $(GenericAdapterName)

	ProductSoftwareTitle		= $(GenericDriverName)
	ProductHardwareTitle		= $(GenericAdapterName)

	DialogDllName		= "ndcpcap.dll"

	IOBaseAddrList		= ^(IOBaseAddrChoices, 1)
	IOBaseAddrValues	= ^(IOBaseAddrChoices, 2)

;	IRQList 			= ^(IRQChoices, 1)
;	IRQValues			= ^(IRQChoices, 2)

	MemBaseAddrList		= ^(MemBaseAddrChoices, 1)
	MemBaseAddrValues	= ^(MemBaseAddrChoices, 2)

	DSChanList 			= ^(DSChanChoices, 1)
	DSChanValues		= ^(DSChanChoices, 2)

;	FHPatList 			= ^(FHPatChoices, 1)
;	FHPatValues			= ^(FHPatChoices, 2)

	AP_NetTypeList 		= ^(AP_NetTypeChoices, 1)
	AP_NetTypeValues	= ^(AP_NetTypeChoices, 2)

	BRIDGE_NetTypeList 	= ^(BRIDGE_NetTypeChoices, 1)
	BRIDGE_NetTypeValues= ^(BRIDGE_NetTypeChoices, 2)

	STA_NetTypeList 	= ^(STA_NetTypeChoices, 1)
	STA_NetTypeValues	= ^(STA_NetTypeChoices, 2)

[DialogConstantsENG]
	Help				= "&Help"
	Exit				= "Cancel"
	OK					= "OK"
	HelpContext			= ""
	Continue			= "Continue"
	Cancel				= "Cancel"

;[MemoryMappedChoicesENG]
;	Map_1				= 1, "ON"
;	Map_2				= 0, "OFF"

[FileDependentDlgENG]
	DlgText				= "Please select values for the follwing fields:"

	DlgType				= "RadioCombination"
	DlgTemplate			= "NDCPCAP"
	Caption				= $(FunctionTitle)

	CBOptionsGreyed		= {}
	NotifyFields		= {NO, NO}
	HelpContext			= $(!IDH_DB_OEMNADE2_INS)

	Combo1Label			= "I/O Base:"
	Combo2Label			= "IRQ Level:"
	Combo3Label			= "Reserved:"
	Combo4Label			= $(PHYParmLabel)
	Combo5Label			= "Mode:"

	Edit1Label			= "Serial Num:"
	Edit2Label			= "SS ID:"

	CheckBox1			= "PCMCIA card"

	Combo1List			= $(IOBaseAddrList)
	Combo1Out 			= $(IOBaseAddrUIVal)

	Combo2List			= $(IRQList)
	Combo2Out 			= $(IRQValueUIVal)

	Combo3List			= $(MemBaseAddrList)
	Combo3Out 			= $(MemBaseAddrUIVal)

	Combo4List			= $(PHYParmList)
	Combo4Out 			= $(PHYParmUIVal)

	Combo5List			= $(NetTypeList)
	Combo5Out 			= $(NetTypeUIVal)

	ComboListItemsIn 	= {Combo1List,Combo2List,Combo3List,+
							Combo4List, Combo5List}
	ComboListItemsOut	= {Combo1Out,Combo2Out,Combo3Out,+
							Combo4Out, Combo5Out}

	EditTextIn			= {$(SerialNumValue),$(SSIDValue)}
	EditTextLim			= {"32","32"}

	CheckItemsIn		= {$(Chk1)}

[MemBaseAddrChoices]
	MEMBase_1			= "n/a", 0

[IOBaseAddrChoices]
	IOBase_1 			= "4000",16384
	IOBase_2 			= "5000",20480
	IOBase_3 			= "6000",24576
	IOBase_4 			= "7000",28672
	IOBase_5 			= "8000",32768
	IOBase_6			= "9000",36864
	IOBase_7			= "A000",40960
	IOBase_8			= "B000",45056
	IOBase_9			= "C000",49152
	IOBase_10			= "D000",53248
	IOBase_19 			= "180",384
	IOBase_11 			= "200",512
	IOBase_12 			= "240",576
	IOBase_13 			= "280",640
	IOBase_14 			= "2C0",714
	IOBase_15 			= "300",768
	IOBase_16			= "340",832
	IOBase_17			= "380",896
	IOBase_18			= "3C0",960

[IRQChoices]
;	IRQ_3				= "3",3
;	IRQ_4				= "4",4
;	IRQ_5				= "5",5
;	IRQ_7				= "7",7
;	IRQ_9				= "9",9
;	IRQ_10				= "10",10
;	IRQ_11				= "11",11
;	IRQ_12				= "12",12
;	IRQ_15				= "15",15
	IRQ_na				= "n/a",0

[IRQPciChoices]
	IRQ_pci				= "n/a",0

[DSChanChoices]
	DSCHAN_1			= "1",1
	DSCHAN_2			= "2",2
	DSCHAN_3			= "3",3
	DSCHAN_4			= "4",4
	DSCHAN_5			= "5",5
	DSCHAN_6			= "6",6
	DSCHAN_7			= "7",7
	DSCHAN_8			= "8",8
	DSCHAN_9			= "9",9
	DSCHAN_10			= "10",10
	DSCHAN_11			= "11",11

[AP_NetTypeChoices]
	NETTYPE_AP			= "Access Point",2

[BRIDGE_NetTypeChoices]
	NETTYPE_SLAVE		= "Bridge Slave",5
	NETTYPE_MASTER		= "Bridge Master",6

[STA_NetTypeChoices]
	NETTYPE_ADHOC		= "Ad-Hoc Station",0
	NETTYPE_INFRA		= "Infrastructure Station",1

[AP_List]
	"PCAP_PRISM1_PCM"
	"PCAP_PRISM2_PCM"
	"PCAP_ZOOM_PCM"

[STA_List]
	"STA_PRISM1_PCM"
	"STA_PRISM2_PCM"
	"STA_ZOOM_PCM"

[BRIDGE_List]
	"BRIDGE_PRISM1_PCM"
	"BRIDGE_PRISM2_PCM"
	"BRIDGE_ZOOM_PCM"


[ExCreateRegKey]
	Debug-Output "******************Entering [ExCreateRegKey]******************"
	set ECR_Result			= NO_ERROR
	set ECR_BaseKeyHandle	= $($0)
	set ECR_NewPath			= $($1)
	set KeyNull				= ""
	set MAXIMUM_ALLOWED		= 33554432
	Debug-Output "ExCreateRegKey - ECR_BaseKeyHandle = "$(ECR_BaseKeyHandle)
	Debug-Output "					ECR_NewPath = "$(ECR_NewPath)
	Debug-Output "					MAXIMUM_ALLOWED = "$(MAXIMUM_ALLOWED)
	Debug-Output "					KeyNull = "$(KeyNull)
	OpenRegKey $(ECR_BaseKeyHandle) "" $(ECR_NewPath) $(MAXIMUM_ALLOWED) +
			ECR_BaseKey
	Debug-Output "ECR_BaseKey = "$(ECR_BaseKey)
	Debug-Output "	OpenRegKey returned "$($R0)
	Ifstr $(ECR_BaseKey) == $(KeyNull)
		Debug-Output "ECR_BaseKey == KeyNull"
	Else
		Debug-Output "ECR_BaseKey != KeyNull"
		set ECR_KeyHandle = $(ECR_BaseKey)
		goto  ECR_Return
	Endif
	set ECR_TmpPath = ""
	Split-String $(ECR_NewPath) "\" ECR_PList
	Debug-Output "ECR_PList = "$(ECR_PList)
	ForListDo $(ECR_PList)
	Ifstr(i) $($) != "\"
		Ifint $(#) == 1
			set ECR_TmpPath = $($)
		Else
			set ECR_TmpPath = $(ECR_TmpPath)"\"$($)
		Endif
		Debug-Output "Determining if "$(ECR_TmpPath)" exists"
		OpenRegKey $(ECR_BaseKeyHandle) "" $(ECR_TmpPath) $(MAXIMUM_ALLOWED) ECR_BaseKey
		Ifstr $(ECR_BaseKey) == $(KeyNull)
			Debug-Output "Creating "$(ECR_TmpPath)
			CreateRegKey $(ECR_BaseKeyHandle)  {$(ECR_TmpPath),0,GenericClass} "" $(MAXIMUM_ALLOWED) "" ECR_KeyHandle
			Ifstr(i) $(ECR_KeyHandle) == $(KeyNull)
				set ECR_Result = $($R0)
				goto ECR_Return
			Endif
		Endif
	Endif
	EndForListDo
ECR_Return = +
	return $(ECR_Result) $(ECR_KeyHandle)

;***************************************************************
;  Default SECTIONS
;***************************************************************

[PCI-Defaults]
	set PollInDriverValue	= 1
	set IRQValueUIVal		= "n/a"
	set IRQList 			= ^(IRQPciChoices, 1)
	set IRQValues			= ^(IRQPciChoices, 2)
exit

[PCMCIA-Defaults]
	set PollInDriverValue	= 1
	set IRQValueUIVal		= "n/a"
	set IRQList 			= ^(IRQChoices, 1)
	set IRQValues			= ^(IRQChoices, 2)
exit

[Read-Defaults]
	;  set the default values

	; I/O Base Address		= 0xC000
	set IOBaseAddrUIVal		= "C000"

	; IRQ Level = 9
;	set IRQValueUIVal		= "10"

	; PCMCIA Attribute Memory Base Address = D0000
	; 11/6/99 Set default base address to d800.
	set MemBaseAddrUIVal	= "n/a"
;	set MemBaseAddrUIVal	= "D0000"

	; PcmciaValue = 0/1
	set PcmciaValue			= 1
	; 8/4/99 Make pcmcia checkbox default = checked.
	set Chk1 				= "ON"

	set FragThresValue		= 2024
	set RTSThresValue		= 3000

	set DisassocThresValue	= 5

	; Ethernet conversion mode = "Encapsulated"/"RFC1042"/"802.1h"
;	set EthConvValue		= "Encapsulated"
	set EthConvValue		= 1

	; Wep Mode = "Disabled"/"Dynamic"/"Mandatory"
;	set WepModeValue		= "Disabled"
	set WepModeValue		= 0
	; Wep Dynamic State = "Any"/"Preferred"/"Required"
;	set WepDynStateValue	= "Any"
	set WepDynStateValue	= 1

	set DwellPeriodValue	= 100;

	; PCAP related default values
	set AssoTimeValue		= 30
	set AuthTimeValue		= 60
	set BeaconPeriodValue	= 80;
	set DTIMPeriodValue		= 2;
	set CFPPeriodValue		= 1;
	set CFPMaxDurValue		= 80;
	; Broadcast Mode = "Normal"/"CFP"
;	set BcastModeValue		= "Normal";
	set BcastModeValue		= 0

	; Station Mode related default values
	set ATIMWindowValue		= 0;
	set ListenIntValue		= 3;
	set PSLevelValue		= 0;
	; Power Save Mode = "Disabled"/"Enabled"
;	set PSModeValue			= "Disabled";
	set PSModeValue			= 0
	; Active Save Mode = "Active"/"Passive"
;	set ScanModeValue		= "Active";
	set ScanModeValue		= 1
	; Start BSS if AdHoc station = "True"/"False"
;	set StartBSSValue		= "False";
	set StartBSSValue		= 0


	; Conditional based on Network type
	Ifcontains(i) $(Option) in ^(BRIDGE_List, 1)
		; configure as Bridge
		set NetTypeList			= $(BRIDGE_NetTypeList)
		set NetTypeValues		= $(BRIDGE_NetTypeValues)
		set NetTypeUIVal		= "Bridge Slave"
		set MaxNodesValue		= 64
	else-Ifcontains(i) $(Option) in ^(AP_List, 1)
		; configure as AP
		set NetTypeList			= $(AP_NetTypeList)
		set NetTypeValues		= $(AP_NetTypeValues)
		set NetTypeUIVal		= "Access Point"
		set MaxNodesValue		= 64
	else
		; configure as infrastructure station
		set NetTypeList			= $(STA_NetTypeList)
		set NetTypeValues		= $(STA_NetTypeValues)
		set NetTypeUIVal		= "Infrastructure Station"
		set MaxNodesValue		= 16
	endif

	; Conditional based on PHY type

	; Station Basic Rate = "1Mb"/"2Mb"
	; PHY parameters DS/FH
;	Ifcontains(i) $(Option) in ^(FH_List, 1)
;		; FH PHY type
;		set StaRateValue		= 10
;		set PHYParmName			= "FHPattern";
;		set PHYParmList			= $(FHPatList)
;		set PHYParmValues		= $(FHPatValues)
;		set PHYParmUIVal		= 1
;		set PHYParmLabel		= "FH Pattern:"
;	else
		; DS PHY type
		set StaRateValue		= 20
		set PHYParmName			= "DSChannel";
		set PHYParmList			= $(DSChanList)
		set PHYParmValues		= $(DSChanValues)
		set PHYParmUIVal		= 10
		set PHYParmLabel		= "DS Channel:"
;	endif

	; Decryption to be done in Driver flag
	set DecryptInDriverValue		= 1;

	; Encryption to be done in Driver flag
	set EncryptInDriverValue		= 1;

	; WEP Factor value
	set WEPFactorValue		= 3;

	; IBSS to be managed by Driver flag 
	set IBSSInDriverValue	= 1;

	; Set Preamble mode to Long=1
	set PreambleModeValue	= 1;

	; default SSID - to be customized by OEM customer
	set SSIDValue			= "Zoom 802.11 LAN"
	
	; Different default for each serial number key
	set SerialNumValue		= "BAV-caNA-Le#VwsHR-PFbUQve+"
exit
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: web4, load: 0.98