OEMNSVIP.INF Driver File Contents (wnt471e.exe)

;***********************************************************************
;
; OEMNSVIP.INF
;
;		Novell NetWare/IP SETUP INF file.
;
;***********************************************************************

;
; The following is the version info for Novell
;

;VeRsIoN=v4.71 Novell Client Install for Windows NT (980409)
;CoPyRiGhT=copyright 1992-2000, by Novell, INC. All rights reserved.

[Identification]
	OptionType = NetService

[Options]
	NetWareIP

[FileConstants]
	UtilityInf		= "UTILITY.INF"
	InfName      	= "OEMNSVIP.INF"
	subroutineinf	= "SUBROUTN.INF"
	NwSubsInf		= "NWSUBS.INF"
	NwSetupDll	= "nwsetup.dll"
	SoftwareType	= "driver"
	Exit_Code		= 0
	DriverToLoad	= ""

	;
	; EventLog Message File
	;
	
	NetEventDLL	= "%SystemRoot%\System32\nls\"$(NLSDirName)"\nwevents.dll"
	IoLogMsgDLL	= "%SystemRoot%\System32\IoLogMsg.dll"
	
	;
	; Software
	;
	
	ProductNetWareIPName			= "NetWareIP"
	ProductNetWareIPImagePath	= "\SystemRoot\system32\drivers\nwip.sys"
	NetRuleSoftwareType			= "NetWareIPSys NetWareIPDriver"
	NetRuleSoftwareUse			= $(SoftwareType)
	NetRuleSoftwareBindForm		= """NetWareIPSys"" yes no container"
	NetRuleSoftwareClass			= {"NetWareIPDriver basic"}
	NetRuleSoftwareBindable		= {"NetWareIPDriver NetWareIPAdapter non exclusive 100"}
	
	;
	; Hardware
	;
	
	ProductHardwareName				= "NetWareIP"
	ProductHardwareNetWareIPTitle	= "Novell NetWare/IP Adapter"
	NetRuleHardwareType				= "NetWareIP NetWareIPAdapter"
	NetRuleHardwareBindForm			= " yes yes container"
	NetRuleHardwareClass				= {"NetWareIPAdapter basic"}
	
	;
	; Registry Key
	;
	
	ProductKeyName	= $(!NTN_SoftwareBase)"\"$(Manufacturer)"\"$(ProductNetWareIPName)"\CurrentVersion"
	ParamKeyName	= $(!NTN_ServiceBase)"\"$(ProductHardwareName)"\Parameters"


[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

	;
	; Product Info
	;
	
	Manufacturer			= "Novell"
	ProductMajorVersion	= 4
	ProductMinorVersion	= 71
	ProductVersion			= $(ProductMajorVersion)"."$(ProductMinorVersion)
	


;------------------------------------------------------------------------------
; 1. Identify	To verify that this INF deals with the smae type of options
;		as we are choosing currently.
;
; Input:	none
;
; Output:	$($R0):	STATUS:	STATUS_SUCCESSFUL
;		$($R1):	Option Type (COMPUTER ...)
;		$($R2):	Diskette Description
;------------------------------------------------------------------------------

[Identify]
	read-syms Identification
	set Status	 = STATUS_SUCCESSFUL
	set Identifier = $(OptionType)
	set Media		= #("Source Media Descriptions", 1, 1)

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

;------------------------------------------------------------------------------
; 2. ReturnOptions	To return the option list supported by this INF and
;			the localized text list representing the options.
; Input:	$($0):	Lang. 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)
		goto returnoptions
	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)



;------------------------------------------------------------------------------
; 2. InstallOption	This section is shelled to by main installation processing
;
; Function:	To copy files representing Options
;		To configure the installed option
;		To update the Registry for the installed option
;
; Input:	$($0):	Lang. 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		|
;				STATUS_NOTSUPPORTED
;
;------------------------------------------------------------------------------

[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)

	;
	; Check if the language requested is supported
	;

	set LanguageList = ^(LanguagesSupported, 1)
	Ifcontains(i) $($0) in $(LanguageList)
		goto installoption
	else
		set Status = STATUS_NOLANGUAGE
		goto finish_InstallOption
	endif

installoption = +

	;
	; This call checks the STF_ variables and sets the NWU variables.
	;

	Shell "" UnattendedInstallOption

	;
	; Get the data from the Unattended file.
	;

	ifstr(i) $(!NWUnattendedFile) != ""
		ifstr(i) $(!NWUnattendedSection) != ""
			Shell $(!NWUnattendedFile) ReadDefaultData, $(!NWUnattendedSection)
			ifstr(i) $($R0) != "STATUS_SUCCESSFUL"
				Debug-Output "Shell to read the NW Parameter values from an Unattend.txt file Failed."

				Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "Warning", $(UnattendFileReadFailed)

				ifstr(i) $($R1) == "CANCEL"
					set CommonStatus = STATUS_USERCANCEL
					goto end
				endif
			endif
		endif
	endif

	ifstr(i) $(!NWUnattendedFile) != ""
		ifstr(i) $(!NWWizard) != YES
			Debug-OutPut "OEMNSVIP.INF: !DoRemove = "$(!DoRemove)
			ifstr(i) $(!DoRemove) == YES
				set !NTN_InstallMode = deinstall
			else-Ifstr(i) $(!DoInstall) == NO
				Debug-OutPut "OEMNSVIP.INF: !DoInstall = "$(!DoInstall)
				set CommonStatus = STATUS_SUCCESSFUL
				goto end
			endif
		endif		
	endif

	;
	; Call the CommonSection
	;

	shell "" CommonSection $(Option)
	set Status = $($R0)
	ifstr(i) $($R1) != ""
		set DriverToLoad = { $($R1) }
	else
		set DriverToLoad = ""
	endif
	Return $(Status) $(DriverToLoad)

end = +
	goto term

term = +
	Return $(CommonStatus) $(DriverToLoad)


[CommonSection]
	StartWait
	set Option = $($0)

	read-syms GeneralConstants

	;
	; Find what NLS directory is being used
	;

	set NovellParameters = $(!NTN_SoftwareBase)"\"$(Manufacturer)"\Parameters"
	Debug-OutPut "NovellParameters is "$(NovellParameters)
	OpenRegKey $(!REG_H_LOCAL) "" $(NovellParameters) $(MAXIMUM_ALLOWED) KeyNovellParameters
	ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
		GetRegValue $(KeyNovellParameters) "NWLanguage" LanguageList
		ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
			set NLSDirName = *($(LanguageList), 4)
		else
			goto fatalregistry
		endif
		CloseRegKey $(KeyNovellParameters)
	else
		goto fatalregistry
	Endif

	;
	; Get NT version
	;

	set CurrentVersion = $(!NTN_SoftwareBase)"\Microsoft\Windows NT\CurrentVersion"
	OpenRegKey $(!REG_H_LOCAL) "" $(CurrentVersion) $(MAXIMUM_ALLOWED) CurrentVersionKey
	ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
		GetRegValue $(CurrentVersionKey) "CurrentVersion" VersionList
		ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
			set VersionListData = *($(VersionList), 4)
			Split-string $(VersionListData) "." SplitVersionList
			Set NTMajorVersion = *($(SplitVersionList), 1)
			Set NTMinorVersion = *($(SplitVersionList), 3)

			Debug-OutPut "OEMNSVIP.INF: Windows NT current version is "$(VersionListData)
			Debug-OutPut "OEMNSVIP.INF: Windows NT Major version is "$(NTMajorVersion)
			Debug-OutPut "OEMNSVIP.INF: Windows NT Minor version is "$(NTMinorVersion)
		else
			Debug-Output "OEMNSVIP.INF:  Error getting NT version"
		endif
		CloseRegKey $(CurrentVersionKey)
	else
		Debug-Output "OEMNSVIP.INF:  Error opening "$(CurrentVersion)
	endif

	set-subst LF = "\n"
	read-syms FileConstants
	read-syms FileConstants$(!STF_LANGUAGE)
	read-syms InstallOption$(!STF_LANGUAGE)
	detect date
	set-title	$(FunctionTitle)
	set to	= Begin
	set from = Begin
	set CommonStatus = STATUS_SUCCESSFUL
	EndWait

	set CurrentVersion = $(!NTN_SoftwareBase)"\Microsoft\Windows NT\CurrentVersion"
	OpenRegKey $(!REG_H_LOCAL) "" $(CurrentVersion) $(MAXIMUM_ALLOWED) CurrentVersionKey
	ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
		GetRegValue $(CurrentVersionKey) "CurrentVersion" VersionList
		ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
			set VersionListData = *($(VersionList), 4)
			Split-string $(VersionListData) "." SplitVersionList
			Set NTMajorVersion = *($(SplitVersionList), 1)
			Set NTMinorVersion = *($(SplitVersionList), 3)

			Debug-OutPut "Windows NT current version is "$(VersionListData)
			Debug-OutPut "Windows NT Major version is "$(NTMajorVersion)
			Debug-OutPut "Windows NT Minor version is "$(NTMinorVersion)

		else
			Debug-Output "OEMNSVIP.INF:  Error getting NT version"
		endif
		CloseRegKey $(CurrentVersionKey)
	else
		Debug-Output "OEMNSVIP.INF:  Error opening "$(CurrentVersion)
	endif

Begin = +
	Set !G:DebugOutputControl = 0
	Debug-Output "OEMNSVIP.INF: Begin Install Mode = "$(!NTN_InstallMode)
	Ifstr(i) $(!NTN_InstallMode) == deinstall
		set StartLabel = removeadapter
	else-Ifstr(i) $(!NTN_InstallMode) == Update
		set StartLabel = updateadapter
	else-Ifstr(i) $(!NTN_InstallMode) == bind
		set StartLabel = bindadapter
	else-Ifstr(i) $(!NTN_InstallMode) == configure
		set StartLabel = configureadapter

		Ifstr(i) $(ProductKeyName) == $(!NTN_RegBase)
			Debug-Output "OEMNSVIP.INF:  Can't configure the Novell NetWareIP driver software."
			Shell $(UtilityInf), RegistryErrorString, CANNOT_CONFIGURE_SOFTWARE
			ifint $($ShellCode) != $(!SHELL_CODE_OK)
				Debug-Output "OEMNSVIP.INF:  ShellCode error:  can't get an error string."
				goto ShellCodeError
			endif
			set Error = $($R0)
			set from = end
			set to = end
			goto Warning
		endif

	else
		set StartLabel = installadapter
		set OEM_ABANDON_OPTIONS = {}
		set OEM_ABANDON_SOFTWARE = FALSE
		set OEM_ABANDON_ON = TRUE
	endif
	set from = $(fatal)
	set to = $(fatal)
	goto $(StartLabel)


installadapter = +
	Debug-Output "OEMNSVIP.INF:  Installing NetWareIP adapter"

    ;
    ;   Must have the client installed first
    ;
	OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\NetWareWorkStation" $(MAXIMUM_ALLOWED) KeyProduct
	ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)

		Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "FATAL", $(NetWareClientNotInstalledMessage)

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

		set CommonStatus = STATUS_USERCANCEL
		goto end
	endif

	CloseRegKey $(KeyProduct)

	;
	;	Check whether Compatibility Mode is installed
	;
	OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\NWCMD" $(MAXIMUM_ALLOWED) KeyProduct
	ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)

		;
		; Cannot install NWIP while NWCMD is installed.
		;

		CloseRegKey $(KeyProduct)

		Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "FATAL", $(NWCMDInstalledMessage)

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

		set CommonStatus = STATUS_USERCANCEL
		goto end
	endif

	OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_SoftwareBase)"\Microsoft\NwlnkIpx\CurrentVersion\NetRules" $(MAXIMUM_ALLOWED) RulesKey
	Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
		;
		; Cannot install NWIP while no IPX is installed.
		;
		Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "FATAL", $(NOIPXInstalledMessage)
		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			goto ShellCodeError
		endif
		set CommonStatus = STATUS_USERCANCEL
		goto end
	else
		CloseRegKey $(RulesKey)
	Endif

	;
	;	Check whether the same version of the software exists
	;

	OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\NetWareIP" $(MAXIMUM_ALLOWED) KeyProduct
	ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)

		;
		; Same version already existed in the local machine
		;

		CloseRegKey $(KeyProduct)

		Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "FATAL", $(NetWareIPInstalledMessage)

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

		set CommonStatus = STATUS_USERCANCEL
		goto end
	endif

;	OpenRegKey $(!REG_H_LOCAL) "" $(ProductKeyName) $(MAXIMUM_ALLOWED) KeyProduct
;	Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
;		CloseRegKey $(KeyProduct)
;		ifstr(i) $(!NTN_RegBase) == $(ProductKeyName)
;			Shell $(UtilityInf), VerExistedDlg, $(ProductNetWareIPDisplayName), $(ProductVersion)
;			ifint $($ShellCode) != $(!SHELL_CODE_OK)
;				Debug-Output $(!STF_ONTEXTINFNAME)":  ShellCode error:  can't get an error string."
;				goto ShellCodeError
;			endif
;			goto end
;		else
;			Shell $(UtilityInf), CardExistedDlg
;			ifint $($ShellCode) != $(!SHELL_CODE_OK)
;				Debug-Output "OEMNSVIP.INF:  ShellCode error:  can't get an error string."
;				goto ShellCodeError
;			endif
;			ifstr(i) $($R1) != "OK"
;				goto end
;			endif
;			set OldVersionExisted = $(TRUE)
;		endif
;	endif

	;
	; Is this an Advanced Server
	;

	Debug-Output "OEMNSVIP.INF:  Checking to see if advanced server"
	set CanInstall = "NO"
	Set TempKeyName = "SYSTEM\CurrentControlSet\Control\ProductOptions"
	OpenRegKey $(!REG_H_LOCAL) "" $(TempKeyName) $(MAXIMUM_ALLOWED) TempKey
	Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
		Set ValueName = "ProductType"
		GetRegValue $(TempKey) $(ValueName) ValueList
		Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
			set ValueListData = *($(ValueList), 4)
			ifstr(i) $(ValueListData) == "WinNT"
				set CanInstall = "YES"
				Debug-Output "OEMNSVIP.INF:  Can install is "$(CanInstall)
			endif
		else
			Debug-Output "OEMNSVIP.INF:  Failed to get ProductType"
		endif
		CloseRegKey $(TempKey)
	else
		Debug-Output "OEMNSVIP.INF:  Failed to open ProductOptions key"
	endif
	
;	ifstr(i) $(CanInstall) == "NO"
;		set DlgType			= "MessageBox"
;		set STF_MB_TITLE	= $(NetWareIPOnASMessageTitle)
;		set STF_MB_TEXT	= $(NetWareIPOnASMessageText)
;		set STF_MB_TYPE	= 1
;		set STF_MB_ICON	= 3
;		set STF_MB_DEF		= 1
;		ui start "NetWareIPOnAS"
;
;		set CommonStatus = STATUS_USERCANCEL
;		goto end
;	endif

	;
	; Install TCPIP if not already installed.  NetWareIP depends on TCPIP.
	;

	Debug-Output "OEMNSVIP.INF:  Checking if TCPIP is installed"
	shell "" Install-TCPIP
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "OEMNSVIP.INF:  Install-TCPIP ShellCode error "$($ShellCode)
		goto ShellCodeError
	else-ifstr(i) $($R0) != STATUS_SUCCESSFUL
		Debug-Output "OEMNSVIP.INF:  Install-TCPIP returned error"
		goto fatal
	endif

	;
	; Start the adapter install stuff
	;

	;
	; Add the software component
	;

	ifint $(NTMajorVersion) == "4"
		set GroupToJoin = "NDIS"
	else
		set GroupToJoin = ""
	endif


	ifint $(OldVersionExisted) == $(FALSE)
		Debug-Output "OEMNSVIP.INF: First Time Install"
		Shell $(UtilityInf), AddSoftwareComponent +
			$(Manufacturer), +
			$(ProductNetWareIPName), +
			$(ProductNetWareIPName), +
			$(ProductNetWareIPDisplayName), +
			$(STF_CONTEXTINFNAME), +
			$(ProductNetWareIPImagePath), +
			"kernelautostart", +
			$(GroupToJoin), +
			"", +
			"", +
			$(NetEventDLL)

		Set OEM_ABANDON_SOFTWARE = TRUE
		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			Debug-Output "OEMNSVIP.INF: AddSoftwareComponent ShellCode error "$($ShellCode)
			goto ShellCodeError
		endif
		set RegistryErrorIndex = $($R0)
		set KeyProduct		= $($R1)
		Set SoftNetRulesKey = $($R2)
		CloseRegKey $($R3)
		CloseRegKey $($R4)
		CloseRegKey $($R5)
		Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
			EndWait
			Debug-Output "OEMNSVIP.INF: AddSoftwareComponent Registry error "$(RegistryErrorIndex)
			CloseRegKey $(KeyProduct)
			CloseRegKey $(SoftNetRulesKey)
			goto fatalregistry
		endif
		set NewValueList = {{SoftwareType,$(NoTitle),$(!REG_VT_SZ),$(SoftwareType)},+
					{Hidden,$(NoTitle),$(!REG_VT_DWORD),1},+
					{MajorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProductMajorVersion)},+
					{MinorVersion,$(NoTitle),$(!REG_VT_DWORD),$(ProductMinorVersion)},+
					{Title,$(NoTitle),$(!REG_VT_SZ),$(ProductNetWareIPDisplayName)},+
					{Description,$(NoTitle),$(!REG_VT_SZ),$(ProductNetWareIPDescription)},+
					{Review,$(NoTitle),$(!REG_VT_DWORD),1},+
					{PathName,$(NoTitle),$(!REG_VT_SZ),$(!STF_CWDDIR)},+
					{ServiceName,$(NoTitle),$(!REG_VT_SZ),$(ProductNetWareIPName)},+
					{InstallDate,$(NoTitle),$(!REG_VT_DWORD),*($(Now),1)}}
		Shell  $(UtilityInf), AddValueList, $(KeyProduct), $(NewValueList)
		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			Debug-Output "OEMNSVIP.INF:  AddValueList ShellCode error "$($ShellCode)
			goto ShellCodeError
		endif
		set RegistryErrorIndex = $($R0)
		Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
			EndWait
			Debug-Output "OEMNSVIP.INF: AddValueList Registry error "$(RegistryErrorIndex)
			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)}, +
					{Infname ,$(NoTitle),$(!REG_VT_SZ),$(InfName)} }
		Shell  $(UtilityInf), AddValueList, $(SoftNetRulesKey), $(NewValueList)
		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			Debug-Output "OEMNSVIP.INF: AddValueList ShellCode error "$($ShellCode)
			goto ShellCodeError
		endif
		set RegistryErrorIndex = $($R0)
		CloseRegKey $(KeyProduct)
		CloseRegKey $(SoftNetRulesKey)
		Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
			EndWait
			Debug-Output "OEMNSVIP.INF: AddValueList Registry error "$(RegistryErrorIndex)
			goto fatalregistry
		endif
	endif

	;
	; Add the hardware component at board two or later
	;

	;
	; If on NT 4.00 machine, add the board five times
	; Otherwise, add it once
	;

	set Count = 0
	ifint $(NTMajorVersion) == "4"
		set endCount = 5
	else
		set endCount = 1
	endif

StartHardwareInstallation = +

	ifint $(Count) < $(endCount)
		ifint $(Count) > 0
			set HideIt = 1
		else
			set HideIt = 0
		endif

		Shell $(UtilityInf), AddHardwareComponent, $(ProductHardwareName),$(STF_CONTEXTINFNAME),$(ProductKeyName),"","","2"
		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 "OEMNSVIP.INF: AddHardwareComponent Shell error "$($ShellCode)
			goto ShellCodeError
		endif

		set RegistryErrorIndex = $($R0)
		Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
			EndWait
			Debug-Output "OEMNSVIP.INF: AddHardwareComponent Registry error "$(RegistryErrorIndex)
			CloseRegKey $($R1)
			CloseRegKey $($R2)
			CloseRegKey $($R3)
			goto fatalregistry
		endif
		set KeyParameters = $($R3)
		set KeyAdapterRules = $($R2)
		set AdapterNumber = $($R4)
		set NewValueList = {{Manufacturer,$(NoTitle),$(!REG_VT_SZ),$(Manufacturer)},+
					{Title,$(NoTitle),$(!REG_VT_SZ),"["$($R4)"] "$(ProductHardware$(Option)Title)},+
					{Hidden,$(NoTitle),$(!REG_VT_DWORD),$(HideIt)},+
					{Description,$(NoTitle),$(!REG_VT_SZ),$(ProductHardware$(Option)Description)},+
					{ProductName,$(NoTitle),$(!REG_VT_SZ),$(ProductHardwareName)},+
					{ServiceName,$(NoTitle),$(!REG_VT_SZ),$($R5)},+
					{InstallDate,$(NoTitle),$(!REG_VT_DWORD),*($(Now),1)}}

		Shell  $(UtilityInf), AddValueList, $($R1), $(NewValueList)
		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			Debug-Output "OEMNSVIP.INF: AddValueList ShellCode error "$($ShellCode)
			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)}, +
				{Infname ,$(NoTitle),$(!REG_VT_SZ),$(InfName)}}

		Shell  $(UtilityInf), AddValueList, $(KeyAdapterRules), $(NewValueList)
		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			Debug-Output "OEMNSVIP.INF: AddValueList ShellCode error "$($ShellCode)
			goto ShellCodeError
		endif
		set RegistryErrorIndex = $($R0)
		Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
			EndWait
			Debug-Output "OEMNSVIP.INF: AddValueList Registry error "$(RegistryErrorIndex)
			CloseRegKey $(KeyParameters)
			CloseRegKey $(KeyAdapterRules)
			goto fatalregistry
		endif
	
		CloseRegKey $(KeyAdapterRules)

		set-add Count = $(Count), 1
		goto StartHardwareInstallation

	endif

	Ifstr(i) $(CalledFromUpdate) == "YES"
		goto ReturnToUpdate
	endif

	;
	; By default depend on TCPIP
	;

	set DependOnList = {"Tcpip"}

	;
	; If NT 3.51 Machine, check to see if DHCP is installed.  If it is
	; depend on it.
	;

	ifint $(NTMajorVersion) == "3"
		Debug-Output "OEMNSVIP.INF:  Check to see if DHCP is installed"
	
		OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\DHCP" $(MAXIMUM_ALLOWED) KeyDHCP
		Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
	
			;
			; Check to see if the service is set to start
			;
	
			GetRegValue $(KeyDHCP) "Start" StartList
			Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
				Set StartValue = *($(StartList), 4)
				Ifint $(StartValue) < 3
	
					;
					; Make NetWareIP depend on the service DHCP
					;
	
					Debug-Output "OEMNSVIP.INF:  Make NetWareIP depend on DHCP service"
					set DependOnList = {"DHCP"}
				Endif
			Endif
	
			CloseRegKey $(KeyDHCP)
		Endif
	endif

	set TempKeyName = $(!NTN_ServiceBase)"\NetWareIP\Linkage"
	OpenRegKey $(!REG_H_LOCAL) "" $(TempKeyName) $(MAXIMUM_ALLOWED) TempKey
	Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
		SetRegValue $(TempKey) {"OtherDependencies", $(NoTitle), $(!REG_VT_MULTI_SZ), $(DependOnList)}
		Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
			Debug-Output "OEMNSVIP.INF:  Can't set NetWareIP linkage key"
			goto fatalregistry
		endif
		FlushRegKey $(TempKey)
		CloseRegKey $(TempKey)
	else
		Debug-Output "OEMNSVIP.INF:  Can't open NetWareIP linkage key"
		goto fatalregistry
	endif


	;
	; Add 62 and 63 key for NetWareIP
	;

	OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\DHCP\Parameters\Options" $(MAXIMUM_ALLOWED) KeyDHCPOptions
	Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
		CreateRegKey $(KeyDHCPOptions) {"62", $(NoTitle), GenericClass} "" $(MAXIMUM_ALLOWED) "" KeyOption62
		Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
			SetRegValue $(KeyOption62) {"KeyType", $(NoTitle), $(!REG_VT_DWORD), "1"}
			SetRegValue $(KeyOption62) {"RegLocation", $(NoTitle),$(!REG_VT_SZ), "System\CurrentControlSet\Services\NetWareIP\Parameters\rawdname"}
			CloseRegKey $(KeyOption62)
		Else
			Debug-Output "Error creating DHCP options key 62"
		Endif
		CreateRegKey $(KeyDHCPOptions) {"63", $(NoTitle), GenericClass} "" $(MAXIMUM_ALLOWED) "" KeyOption63
		Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
			SetRegValue $(KeyOption63) {"KeyType", $(NoTitle), $(!REG_VT_DWORD), "1"}
			SetRegValue $(KeyOption63) {"RegLocation", $(NoTitle), $(!REG_VT_SZ), "System\CurrentControlSet\Services\NetWareIP\Parameters\rawinfo"}
			CloseRegKey $(KeyOption63)
		Else
			Debug-Output "Error creating DHCP options key 63"
		Endif
		CloseRegKey $(KeyDHCPOptions)
	Else
		Debug-Output "OEMNSVIP.INF:  DHCP Not Installed"
	Endif


	;
	; Disable OdiSourceRouting if enabled
	;

	OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\OdiSourceRouting" $(MAXIMUM_ALLOWED) KeyProduct
	Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
		Set KeyValueList = {"Start", $(NoTitle), $(!REG_VT_DWORD), 4}
		SetRegValue $(KeyProduct) $(KeyValueList)
		CloseRegKey $(KeyProduct)
	Endif

	;
	; Add NwlnkIpx binding for NetWareIPDriver.
	; Remove binding for ndisDriver
	;

	Shell "" Install-Bindings
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "OEMNSVIP.INF:  Install-Bindings ShellCode error "$($ShellCode)
		goto ShellCodeError
	else
		Ifstr(i) $($R0) != STATUS_SUCCESSFUL
			Debug-Output "OEMNSVIP.INF:  Install-Bindings returned error"
			goto fatalregistry
		endif
	endif

	;
	; Configure the NetWareIP Adapter if needed.
	;

	ifstr(i) $(!Remote_Config) == "ON"
		set !HaveNetWareIPParameters = "YES"
	else
		ifstr(i) $(!Preferred_DSS) != ""
			set !HaveNetWareIPParameters = "YES"
		else-ifstr(i) $(!NWIP_Domain_Name) != ""
			set !HaveNetWareIPParameters = "YES"
		endif
	endif

	ifstr(i) $(!HaveNetWareIPParameters) != "YES"
		Debug-Output "OEMNSVIP.INF: Prompting user for parameters"
		StartWait
		LoadLibrary $(LoadDisk3Text) $(!STF_WINDOWSSYSPATH)"\nwsetup.dll" NwLibHandle
		SetHelpFile $(!STF_WINDOWSSYSPATH)"\nls\"$(NLSDirName)"\setupnw.hlp" $(!MinimumID) $(!MaximumID)

		set HelpContext = $(IDH_NETWAREWRKSTATIONPARMS)

		Debug-Output "OEMNSVIP.INF: Calling NWConfigure"
		LibraryProcedure LibResult $(NwLibHandle) NWConfigure $(Option)
;		LibraryProcedure LibResult $(NwLibHandle) NWIPDialog
	
		Debug-Output "LibResult = "$(LibResult)
	
		ifstr(i) $(LibResult) == "CONTINUE"
			Debug-Output "OEMNSVIP.INF:  OK hit"
		else
			Debug-Output "OEMNSVIP.INF:  CANCEL hit - remove adapter"
	
			;
			; Remove NetWareIP.  Cancel button was hit.
			;
	
			Set OldInstallMode = $(!NTN_InstallMode)
			Set !NTN_InstallMode = deinstall
			goto removeadapter
	
		endif
	
		FreeLibrary $(NwLibHandle)
	endif

	;
	;       Install various registry parameters
	;
	Debug-Output "OEMNSVIP.INF:  Install-Parameters"
	Install Install-Parameters      

	;
	; Write out the unattended variables to registry
	;
	
	shell "" Write-Unattended-Variables

	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		goto ShellCodeError
	else-ifstr(i) $($R0) != STATUS_SUCCESSFUL
		Debug-Output "OEMNSVWM:  User Canceled due to a error processing the Unattended Variables."
		set CommonStatus = STATUS_USERCANCEL
		goto setfailed
	endif

	goto end


configureadapter = +
	Debug-Output "OEMNSVIP.INF:  Configuring NetWareIP adapter"
	
	;
	; Configure the NetWareIP Adapter.
	;
	
	StartWait
	LoadLibrary $(LoadDisk3Text) $(!STF_WINDOWSSYSPATH)"\nwsetup.dll" NwLibHandle
	SetHelpFile $(!STF_WINDOWSSYSPATH)"\nls\"$(NLSDirName)"\setupnw.hlp" $(!MinimumID) $(!MaximumID)
	set HelpContext = $(IDH_NETWAREWRKSTATIONPARMS)
	LibraryProcedure LibResult $(NwLibHandle) NWConfigure $(Option)
;	LibraryProcedure LibResult $(NwLibHandle) NWIPDialog
	
	Debug-Output "OEMNSVIP.INF:  NWIPDialog returned "$(LibResult)
	ifstr(i) $(LibResult) != "CONTINUE"
		set CommonStatus = STATUS_USERCANCEL
	endif
	
	FreeLibrary $(NwLibHandle)
	goto end



bindadapter =+
	Debug-Output "OEMNSVIP.INF:  Binding NetWareIP adapter"

	;
	; First make sure tcpip was not removed out from under us.
	; If it was, pop message warning user.
	;

	set NoTCPIP = 0
	set TempKeyName = $(!NTN_ServiceBase)"\tcpip"
	OpenRegKey $(!REG_H_LOCAL) "" $(TempKeyName) $(MAXIMUM_ALLOWED) TempKey
	Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
		GetRegValue $(TempKey) "DeleteFlag" ValueData
		ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
			set NoTCPIP = 1
		endif
	else
		set NoTCPIP = 1
		Debug-Output "OEMNSVIP.INF:  Failed to open key "$(TempKeyName)
	endif

	ifint $(NoTCPIP) == 1

		;
		; Pop up message warning user that TCPIP is not installed and
		; that NetWareIP will not function correctly.
		;

		set DlgType 		= "MessageBox"
		set STF_MB_TITLE	= $(ErrorMessageTitle)
		set STF_MB_TEXT	= $(NoTcpipMessageText)
		set STF_MB_TYPE	= 1
		set STF_MB_ICON	= 3
		set STF_MB_DEF		= 1
		ui start "NoTcpipError"

	endif

	;
	; By default depend on TCPIP
	;

	set DependOnList = {"Tcpip"}

	;
	; If NT 3.51 Machine, check to see if DHCP is installed.  If it is
	; depend on it.
	;

	ifint $(NTMajorVersion) == "3"
		Debug-Output "OEMNSVIP.INF:  Check to see if DHCP is installed"
	
		OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\DHCP" $(MAXIMUM_ALLOWED) KeyDHCP
		Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
	
			;
			; Check to see if the service is set to start
			;
	
			GetRegValue $(KeyDHCP) "Start" StartList
			Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
				Set StartValue = *($(StartList), 4)
				Ifint $(StartValue) < 3
	
					;
					; Make NetWareIP depend on the service DHCP
					;
	
					Debug-Output "OEMNSVIP.INF:  Make NetWareIP depend on DHCP service"
					set DependOnList = {"DHCP"}
				Endif
			Endif
	
			CloseRegKey $(KeyDHCP)
		Endif
	endif

	set TempKeyName = $(!NTN_ServiceBase)"\NetWareIP"
	OpenRegKey $(!REG_H_LOCAL) "" $(TempKeyName) $(MAXIMUM_ALLOWED) TempKey
	Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
		SetRegValue $(TempKey) {"DependOnService", $(NoTitle), $(!REG_VT_MULTI_SZ), $(DependOnList)}
		Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
			Debug-Output "OEMNSVIP.INF:  Can't set NetWareIP linkage key"
			goto fatalregistry
		endif
		FlushRegKey $(TempKey)
		CloseRegKey $(TempKey)
	else
		Debug-Output "OEMNSVIP.INF:  Can't open NetWareIP linkage key"
		goto fatalregistry
	endif

	set TempKeyName = $(!NTN_ServiceBase)"\NetWareIP\Linkage"
	OpenRegKey $(!REG_H_LOCAL) "" $(TempKeyName) $(MAXIMUM_ALLOWED) TempKey
	Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
		SetRegValue $(TempKey) {"OtherDependencies", $(NoTitle), $(!REG_VT_MULTI_SZ), $(DependOnList)}
		Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
			Debug-Output "OEMNSVIP.INF:  Can't set NetWareIP linkage key"
			goto fatalregistry
		endif
		FlushRegKey $(TempKey)
		CloseRegKey $(TempKey)
	else
		Debug-Output "OEMNSVIP.INF:  Can't open NetWareIP linkage key"
		goto fatalregistry
	endif

	;
	; Disable OdiSourceRouting if enabled
	;

	OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\OdiSourceRouting" $(MAXIMUM_ALLOWED) KeyProduct
	Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
		Set KeyValueList = {"Start", $(NoTitle), $(!REG_VT_DWORD), 4}
		SetRegValue $(KeyProduct) $(KeyValueList)
		CloseRegKey $(KeyProduct)
	Endif

	goto end



removeadapter = +
	Debug-Output "OEMNSVIP.INF:  Removing NetWareIP adapter"

	;
	; Remove adapter
	;

	;
	; Find the NetWareIP adapters
	;

	Shell $(NwSubsInf) GetTotalAdapterList

	Set OdiProductNameList			= $($R0)
	Set OdiTitleList					= $($R1)
	Set OdiCardList					= $($R2)
	Set NumberOdiAdapters			= $($R3)
	Set NdisProductNameList			= $($R4)
	Set NdisTitleList					= $($R5)
	Set NdisCardList					= $($R6)
	Set NumberNdisAdapters			= $($R7)
	Set ODINSUPCardNumber			= $($R8)
	Set NetWareIPCardNumList		= $($R9)
	Set NumberNetWareIPAdapters	= $($R10)

	Debug-Output "OEMNSVIP.INF:  NetWareIPCardNumList is "$(NetWareIPCardNumList)

	ForListDo $(NetWareIPCardNumList)
		set !NTN_RegBase = $(!NTN_SoftwareBase)"\Microsoft\Windows NT\CurrentVersion\NetworkCards\"$($)
		Debug-Output "OEMNSVIP.INF:  !NTN_RegBase is "$(!NTN_RegBase)

		Ifstr(i) $(ProductKeyName) == $(!NTN_RegBase)
			Debug-Output "OEMNSVIP.INF:  RemoveSoftwareComponent"
			Shell $(UtilityInf), RemoveSoftwareComponent, $(Manufacturer), $(ProductNetWareIPName)
			ifint $($ShellCode) != $(!SHELL_CODE_OK)
				Debug-Output "OEMNSVIP.INF:  RemoveSoftwareComponent ShellCode error "$($ShellCode)
				goto ShellCodeError
			endif
			set RegistryErrorIndex = $($R0)
			Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
				goto fatalregistry
			endif
		else
			Debug-Output "OEMNSVIP.INF:  RemoveHardwareComponent"
			Shell $(UtilityInf), RemoveHardwareComponent, $(Manufacturer), $(ProductNetWareIPName), $(!NTN_RegBase)
			ifint $($ShellCode) != $(!SHELL_CODE_OK)
				Debug-Output "OEMNSVIP.INF:  RemoveHardwareComponent ShellCode error "$($ShellCode)
				goto ShellCodeError
			endif
			set RegistryErrorIndex = $($R0)
			Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
				goto fatalregistry
			endif
		endif
	EndForListDo

	;
	; Remove DHCP Options 62 & 63 from DHCP
	;
	
	OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\DHCP\Parameters\Options" $(MAXIMUM_ALLOWED) KeyDHCPOptions
	Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
		DeleteRegTree $(KeyDHCPOptions) "62"
		DeleteRegTree $(KeyDHCPOptions) "63"
		CloseRegKey $(KeyDHCPOptions)
	Else
		Debug-Output "Debug-Output DHCP Not Installed"
	Endif

	;
	; Remove NwlnkIpx binding to NetWareIPDriver.
	; Add back binding to ndisDriver
	;

	Shell "" Remove-Bindings
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "OEMNSVIP.INF:  Remove-Bindings ShellCode error "$($ShellCode)
		goto ShellCodeError
	else
		Ifstr(i) $($R0) != STATUS_SUCCESSFUL
			Debug-Output "OEMNSVIP.INF:  Remove-Bindings returned error"
			goto fatalregistry
		endif
	endif

	goto end


updateadapter = +

	;
	;Check whether NWIP is installed
	;
	OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\NetWareIP" $(MAXIMUM_ALLOWED) KeyProduct
	ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
		Set DeleteFlagVal = 0
		GetRegValue $(KeyProduct) "DeleteFlag" ValueData
		Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
			Set DeleteFlagVal = *($(ValueData), 4)
		endif
		CloseRegKey $(KeyProduct)

		Ifint $(DeleteFlagVal) == 1
			Debug-Output "OEMNSVIP.INF:  Updating, but NWIP will be deleted."
			goto end
		endif				
	else
		Debug-Output "OEMNSVIP.INF:  Updating, but NWIP is not installed."
		goto end
	endif

	Debug-Output "OEMNSVIP.INF:  Updating NetWareIP adapter"

	;
	; Check the current version.  Allow upgrade if current version is equal
	; to or greater than installed version.
	;
	OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_SoftwareBase)"\"$(Manufacturer)"\"$(ProductNetWareIPName)"\CurrentVersion" $(MAXIMUM_ALLOWED) NWIPCurrVer
	Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
		GetRegValue $(NWIPCurrVer) "MajorVersion" MajorVersionList
		ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
			set NWIPMajorVersion = *($(MajorVersionList), 4)
		endif
		GetRegValue $(CurrVer) "MinorVersion" MinorVersionList
		ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
			set NWIPMinorVersion = *($(MinorVersionList), 4)
		endif

		Debug-OutPut "Installed NWIP Major version is "$(NWIPMajorVersion)
		Debug-OutPut "Installed NWIP Minor version is "$(NWIPMinorVersion)

		ifint $(ProductMajorVersion) == $(NWIPMajorVersion)
			ifint $(ProductMinorVersion) >= $(NWIPMinorVersion)
				set CanUpgrade = "YES"
			endif
		else
			ifint $(ProductMajorVersion) > $(NWIPMajorVersion)
				set CanUpgrade = "YES"
			endif
		endif
		CloseRegKey $(NWIPCurrVer)
	Endif

	;
	; Check the upgrade flag to see if upgrade allowed.
	;

	ifstr(i) $(CanUpgrade) == "NO"
		Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "FATAL", $(UpgradeButtonMessage)

		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			goto ShellCodeError
		endif
		set CommonStatus = STATUS_USERCANCEL
		goto end
	endif

	;
	; Remove the old NetWareIP way of preventing NwlnkIpx from binding
	; to anything but NetWareIP.  Go straight to the disabled key and
	; remove the stuff that the old NetWareIP install put there.
	;

	Shell "" Remove-Oldstyle-Bindings
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "OEMNSVIP.INF:  Remove-Oldstyle-Bindings ShellCode error "$($ShellCode)
		goto ShellCodeError
	else
		Ifstr(i) $($R0) != STATUS_SUCCESSFUL
			Debug-Output "OEMNSVIP.INF:  Remove-Oldstyle-Bindings returned error"
			goto fatalregistry
		endif
	endif

	;
	; Install the new bindings method by changing one of NwlnkIpx's bindable
	; rules so that NwlnkIpx will only bind to NetWareIP
	;

	Shell "" Install-Bindings
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "OEMNSVIP.INF:  Install-Bindings ShellCode error "$($ShellCode)
		goto ShellCodeError
	else
		Ifstr(i) $($R0) != STATUS_SUCCESSFUL
			Debug-Output "OEMNSVIP.INF:  Install-Bindings returned error"
			goto fatalregistry
		endif
	endif

	;
	; Hide the software driver for NetWareIP
	;

	Set TempKeyName = $(!NTN_SoftwareBase)"\Novell\NetWareIP\CurrentVersion"
	OpenRegKey $(!REG_H_LOCAL) "" $(TempKeyName) $(MAXIMUM_ALLOWED) TempKey
	ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
		Debug-Output "OEMNPRNW.INF:  Hiding the NetWareIP software driver"

		SetRegValue $(TempKey) {"Hidden", $(NoTitle), $(!REG_VT_DWORD), 1}
		Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
			Debug-Output "OEMNPRNW.INF: Cant update Winsock Transports value"
		Endif

		CloseRegKey $(TempKey)
	else
		Debug-Output "OEMNPRNW.INF:  Failed to update the Hidden value for "$(TempKeyName)
	endif

	;
	; Get a count of NetWareIP adapters.  Add up to 5 adapters for NT 4.00
	;

	Shell $(NwSubsInf) GetTotalAdapterList

	Set OdiProductNameList			= $($R0)
	Set OdiTitleList					= $($R1)
	Set OdiCardList					= $($R2)
	Set NumberOdiAdapters			= $($R3)
	Set NdisProductNameList			= $($R4)
	Set NdisTitleList					= $($R5)
	Set NdisCardList					= $($R6)
	Set NumberNdisAdapters			= $($R7)
	Set ODINSUPCardNumber			= $($R8)
	Set NetWareIPCardNumList		= $($R9)
	Set NumberNetWareIPAdapters	= $($R10)

	ifint $(NTMajorVersion) == "4"
		set Count = $(NumberNetWareIPAdapters)
		set endCount = 5
	else
		set Count = 1
		set endCount = 1
	endif

	set CalledFromUpdate = "YES"
	goto StartHardwareInstallation

ReturnToUpdate = +

	;
	;       Install various registry parameters
	;

	Install Install-Parameters      

	;
	; Write out the unattended variables to registry
	;
	
	shell "" Write-Unattended-Variables

	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		goto ShellCodeError
	else-ifstr(i) $($R0) != STATUS_SUCCESSFUL
		Debug-Output "OEMNSVWM:  User Canceled due to a error processing the Unattended Variables."
		set CommonStatus = STATUS_USERCANCEL
		goto setfailed
	endif

	goto end


abandon = +
	Debug-Output "OEMNSVIP.INF: abandon"
	ForListDo $(OEM_ABANDON_OPTIONS)
		Shell $(UtilityInf), RemoveHardwareComponent, $(Manufacturer), $(ProductNetWareIPName), $($)
		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			Debug-Output "OEMNSVIP.INF: RemoveHardwareComponent ShellCode error "$($ShellCode)
			goto ShellCodeError
		endif
		set RegistryErrorIndex = $($R0)
		Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
			goto fatalregistry
		endif
	EndForListDo
	Ifstr(i) $(OEM_ABANDON_SOFTWARE) == TRUE
		Shell $(UtilityInf), RemoveSoftwareComponent, $(Manufacturer), $(ProductNetWareIPName), FALSE
		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			Debug-Output "OEMNSVIP.INF: RemoveSoftwareComponent ShellCode error "$($ShellCode)
			goto ShellCodeError
		endif
		set RegistryErrorIndex = $($R0)
		Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
			goto fatalregistry
		endif
	endif
	goto end


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


nonfatal = +
	Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "NONFATAL", $(Error)
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		goto ShellCodeError
	endif
	ifstr(i) $($R1) == "OK"
		goto $(from)
	else
		goto "end"
	endif


fatalregistry = +
	Shell $(UtilityInf) RegistryErrorString $(RegistryErrorIndex)
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		goto ShellCodeError
	endif
	set Error = $($R0)
	goto fatal


fatal = +
	ifstr(i) $(Error) == ""
		Shell $(UtilityInf) RegistryErrorString "SETUP_FAIL"
		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			goto ShellCodeError
		endif
		set Error = $($R0)
	endif
	Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "FATAL", $(Error)
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		goto ShellCodeError
	endif
	goto setfailed


ShellCodeError = +
	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
	ifstr(i) $(OEM_ABANDON_ON) == TRUE
		set OEM_ABANDON_ON = FALSE
		goto abandon
	endif
	goto end


end = +
	goto term


term = +
	Return $(CommonStatus) $(DriverToLoad)


[Install-Option]
	set STF_VITAL = ""
	ifstr(i) $(!AddCopy) == "YES"
		AddSectionFilesToCopyList Files-$(Option) $(!STF_SRCDIR) $(!STF_WINDOWSSYSPATH)\drivers
	endif
	ifstr(i) $(!DoCopy) == "YES"
		CopyFilesInCopyList
	endif
	ifstr(i) $(!DoConfig) == "YES"
	endif
	Exit


[Install-Update]
	Debug-Output "OEMNSVIP.INF: Install-Update"
	set STF_VITAL 	= ""
	set STF_OVERWRITE	= "VERIFYSOURCEOLDER"
	AddSectionFilesToCopyList Files-$(Option) $(!STF_SRCDIR) $(!STF_WINDOWSSYSPATH)\drivers
	AddSectionFilesToCopyList Files-Inf $(!STF_SRCDIR) $(!STF_WINDOWSSYSPATH)
	CopyFilesInCopyList
	exit



;*************************************************************************
;
;		SECTION:		Install-TCPIP
;
;		PURPOSE:		Called at install time and update time to install the
;						TCPIP transport.
;
;		ARGUMENTS:	None
;
;		RETURNS:		None
;
;		REFERENCES:	None
;
;		MODIFIES:	None
;
;*************************************************************************
[Install-TCPIP]
	read-syms GeneralConstants
	read-syms InstallOption$(!STF_LANGUAGE)

	;
	; Assume all is well until we find out otherwise
	;

	set CommonStatus = STATUS_SUCCESSFUL

	OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\Tcpip" $(MAXIMUM_ALLOWED) KeyTCPIP
	ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
		Debug-Output "OEMNSVIP.INF:  Installing TCPIP"

		;
		; Ask the user if they want to install TCPIP
		;

		set DlgType 		= "MessageBox"
		set STF_MB_TITLE	= $(InstallTcpipMessageTitle)
		set STF_MB_TEXT	= $(InstallTcpipMessageText)
		set STF_MB_TYPE	= 3
		set STF_MB_ICON	= 4
		set STF_MB_DEF		= 1
		ui start "InstallTCPIP"

		Ifstr(i) $(DLGEVENT) == "NO"
			Debug-Output  "OEMNSVIP.INF:  Don't install TCPIP"
			set CommonStatus = STATUS_USERCANCEL
			goto terminate
		Endif

		Debug-Output "OEMNSVIP.INF:  Install TCPIP"
		Set OldInstallMode = $(!NTN_InstallMode)
		Set !NTN_InstallMode = install
		Set OldSTF_SRCDIR_OVERRIDE = $(!STF_SRCDIR_OVERRIDE)
		Set !STF_SRCDIR_OVERRIDE = ""
		Shell "oemnxptc.inf" InstallOption $(!STF_LANGUAGE) "TC" "" YES YES YES
		Set !STF_SRCDIR_OVERRIDE = $(OldSTF_SRCDIR_OVERRIDE)
		Set !NTN_InstallMode = $(OldInstallMode)
		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			set CommonStatus = STATUS_FAILED
			goto terminate
		Endif
		set CommonStatus = $($R0)
		Ifstr(i) $(CommonStatus) != STATUS_SUCCESSFUL
			Debug-Output "OEMNSVIP.INF:  Install of TCPIP returned "$(CommonStatus)
			goto terminate
		Endif
	Else
		CloseRegKey $(KeyTCPIP)
	Endif

terminate = +
	Return $(CommonStatus)


;*************************************************************************
;
;		SECTION:		Install-Bindings
;
;		PURPOSE:		Called at install time and update time to install the
;						NwlnkIpx bindings.
;
;		ARGUMENTS:	None
;
;		RETURNS:		None
;
;		REFERENCES:	None
;
;		MODIFIES:	None
;
;*************************************************************************
[Install-Bindings]
	StartWait
	Read-syms GeneralConstants
	Set status = STATUS_SUCCESSFUL

	;
	; Open NwlnkIpx keys
	;

	OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_SoftwareBase)"\Microsoft\NwlnkIpx\CurrentVersion\NetRules" $(MAXIMUM_ALLOWED) RulesKey
	Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
		Debug-Output "OEMNSVIP.INF:  Can't open NwlnkIpx NetRules key"
		set status = STATUS_FAILED
		Goto IB_Return
	Endif

	;
	; Set up bindings for NwlnkIpx
	;

	Set ValueName = "Bindable"
	GetRegValue $(RulesKey) $(ValueName) ValueList
	Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
		CloseRegKey $(RulesKey)
		Debug-Output "OEMNSVIP.INF:  Can't get bindable value for NwlnkIpx"
		set status = STATUS_FAILED
		Goto IB_Return
	endif

	Set OldList = *($(ValueList), 4)
	Set NewList = {}

	Debug-Output "OEMNSVIP.INF:  OldList for NwlnkIpx bind is "$(OldList)

	ForListDo $(OldList)
		Set Item = $($)
		Ifstr(i) $(Item) != "ipxTransport ndisDriver non non 100"
			Set NewList = >($(NewList), $(Item))
		else
			Set NewList = >($(NewList), "ipxTransport NetWareIPDriver non non 100")
		endif
	EndForListDo

	Debug-Output "OEMNSVIP.INF:  NewList for NwlnkIpx bind is "$(NewList)

	SetRegValue $(RulesKey) {$(ValueName), $(NoTitle), $(!REG_VT_MULTI_SZ), $(NewList)}
	Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
		Debug-Ouput "OEMNSVIP.INF:  Can't update Bindable value for NwlnkIpx"
		set status = STATUS_FAILED
		goto IB_Return
	Endif

	;
	; Close keys
	;

	CloseRegKey $(RulesKey)

	;
	; Check to see if Remote Access is installed.  Remove its bindings to IPX in there.
	;
	Debug-Output "OEMNSVIP.INF:  Check to see if Remote Access is installed"

	OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\RemoteAccess\Linkage" $(MAXIMUM_ALLOWED) KeyRAS
	Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)

		GetRegValue $(KeyRAS) "Bind" ValueData
		Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
			Set ValueList = *($(ValueData), 4)
			Set NewList = {}
			Set FindValue = "\Device\NwlnkIpx"

			Ifcontains(i) $(FindValue) in $(ValueList)
				ForListDo $(ValueList)
					Ifstr(i) $($) != $(FindValue)
						Set NewList = >($(NewList), $($))
					Endif
				EndForListDo
			
				SetRegValue $(KeyRAS) {"Bind", $(NoTitle), $(!REG_VT_MULTI_SZ), $(NewList)}
				Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
					Debug-Output "OEMNSVIP.INF: Cant update Bind value for RAS"
				Endif
			Endif
		Endif

		GetRegValue $(KeyRAS) "Export" ValueData
		Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
			Set ValueList = *($(ValueData), 4)
			Set NewList = {}
			Set FindValue = "\Device\RasServer\NwlnkIpx"

			Ifcontains(i) $(FindValue) in $(ValueList)
				ForListDo $(ValueList)
					Ifstr(i) $($) != $(FindValue)
						Set NewList = >($(NewList), $($))
					Endif
				EndForListDo
			
				SetRegValue $(KeyRAS) {"Export", $(NoTitle), $(!REG_VT_MULTI_SZ), $(NewList)}
				Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
					Debug-Output "OEMNSVIP.INF: Cant update Export value for RAS"
				Endif
			Endif
		Endif

		GetRegValue $(KeyRAS) "Route" ValueData
		Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
			Set ValueList = *($(ValueData), 4)
			Set NewList = {}
			Set FindValue = ""NwlnkIpx" "NdisWan6""

			Ifcontains(i) $(FindValue) in $(ValueList)
				ForListDo $(ValueList)
					Ifstr(i) $($) != $(FindValue)
						Set NewList = >($(NewList), $($))
					Endif
				EndForListDo
			
				SetRegValue $(KeyRAS) {"Route", $(NoTitle), $(!REG_VT_MULTI_SZ), $(NewList)}
				Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
					Debug-Output "OEMNSVIP.INF: Cant update Route value for RAS"
				Endif
			Endif
		Endif

		CloseRegKey $(KeyRAS)
	Endif

	OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_SoftwareBase)"\Microsoft\RemoteAccess\CurrentVersion\NetRules" $(MAXIMUM_ALLOWED) KeyRAS
	Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)

		GetRegValue $(KeyRAS) "Bindable" ValueData
		Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
			Set ValueList = *($(ValueData), 4)
			Set NewList = {}
			Set FindValue = "classRasServer ipxTransport non non 100"

			Ifcontains(i) $(FindValue) in $(ValueList)
				ForListDo $(ValueList)
					Ifstr(i) $($) != $(FindValue)
						Set NewList = >($(NewList), $($))
					Endif
				EndForListDo
			
				SetRegValue $(KeyRAS) {"Bindable", $(NoTitle), $(!REG_VT_MULTI_SZ), $(NewList)}
				Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
					Debug-Output "OEMNSVIP.INF: Cant update Bindable value for RAS"
				Endif
			Endif
		Endif

		CloseRegKey $(KeyRAS)
	Endif

	OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_SoftwareBase)"\Microsoft\Windows NT\CurrentVersion\NetworkCards" $(MAXIMUM_ALLOWED) KeyNetcards
	Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
		EnumRegKey $(KeyNetcards) NetcardsList
		Debug-Output "OEMNSVIP.INF: Netcards before RAS remove: "$(NetcardsList)
		ForListDo $(NetcardsList)
			set KeyName = *($($),1)
			OpenRegKey $(KeyNetcards) "" $(KeyName) $(MAXIMUM_ALLOWED) Card
			Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
				GetRegValue $(Card), "ProductName" ProductNameInfo
				set CardProductName = *($(ProductNameInfo), 4)
				Debug-Output "OEMNSVIP.INF: checking net card: "$(CardProductName)
				ifstr(i) $(CardProductName) == "NdisWanDialinoutIpx"
					Debug-Output "OEMNSVIP.INF: NdisWanDialinoutIpx Netcard found"
					GetRegValue $(Card), "ServiceName" ServiceNameInfo
					Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
						set CardServiceName = *($(ServiceNameInfo), 4)
						Debug-Output "OEMNSVIP.INF: Found Netcard service: "$(CardServiceName)
						OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase) $(MAXIMUM_ALLOWED) ServiceKey
						Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
							DeleteRegTree $(ServiceKey) $(CardServiceName)
							Debug-Output "OEMNSVIP.INF: Deleted Netcard service: "$(CardServiceName)
							CloseRegKey $(ServiceKey)
						endif
					endif
			 
					CloseRegKey $(Card)
				
					DeleteRegTree $(KeyNetcards) $(KeyName)
					Debug-Output "OEMNSVIP.INF: Deleted Netcard : "$(KeyName)
				else
					CloseRegKey $(Card)
				endif
			else
				Debug-Output "OEMNSVIP.INF: Error opening Netcard: "$(KeyName)
			endif
		EndForListDo

		CloseRegKey $(KeyNetcards)
	Endif

IB_Return = +
	Return $(status)


;*************************************************************************
;
;		SECTION:		Remove-Bindings
;
;		PURPOSE:		Called at remove time to remove the	NwlnkIpx bindings.
;
;		ARGUMENTS:	None
;
;		RETURNS:		None
;
;		REFERENCES:	None
;
;		MODIFIES:	None
;
;*************************************************************************
[Remove-bindings]
	StartWait
	Read-syms GeneralConstants
	Set status = STATUS_SUCCESSFUL

	;
	; Open NwlnkIpx keys
	;

	OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_SoftwareBase)"\Microsoft\NwlnkIpx\CurrentVersion\NetRules" $(MAXIMUM_ALLOWED) RulesKey
	Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
		Debug-Output "OEMNSVIP.INF:  Can't open NwlnkIpx NetRules key"
		set status = STATUS_FAILED
		Goto RB_Return
	Endif

	;
	; Restore bindings for NwlnkIpx
	;

	Set ValueName = "Bindable"
	GetRegValue $(RulesKey) $(ValueName) ValueList
	Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
		CloseRegKey $(RulesKey)
		Debug-Output "OEMNSVIP.INF:  Can't get bindable value for NwlnkIpx"
		set status = STATUS_FAILED
		Goto RB_Return
	endif

	Set OldList = *($(ValueList), 4)
	Set NewList = {}

	Debug-Output "OEMNSVIP.INF:  OldList for NwlnkIpx bind is "$(OldList)

	ForListDo $(OldList)
		Set Item = $($)
		Ifstr(i) $(Item) != "ipxTransport NetWareIPDriver non non 100"
			Set NewList = >($(NewList), $(Item))
		else
			Set NewList = >($(NewList), "ipxTransport ndisDriver non non 100")
		endif
	EndForListDo

	Debug-Output "OEMNSVIP.INF:  NewList for NwlnkIpx bind is "$(NewList)

	SetRegValue $(RulesKey) {$(ValueName), $(NoTitle), $(!REG_VT_MULTI_SZ), $(NewList)}
	Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
		Debug-Ouput "OEMNSVIP.INF:  Can't update Bindable value for NwlnkIpx"
		set status = STATUS_FAILED
		goto RB_Return
	Endif

	;
	; Close keys
	;

	CloseRegKey $(RulesKey)

RB_Return = +
	Return $(status)


[Remove-Oldstyle-bindings]
	StartWait
	Read-syms GeneralConstants
	Set Status = STATUS_SUCCESSFUL

	;
	; Open NwlnkIpx key and remove disabled bindings
	;

	set TempKeyName = $(!NTN_ServiceBase)"\NwlnkIpx\Linkage\Disabled"
	OpenRegKey $(!REG_H_LOCAL) "" $(TempKeyName) $(MAXIMUM_ALLOWED) DisabledKey
	Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
		SetRegValue $(DisabledKey) {"Bind", $(NoTitle), $(!REG_VT_MULTI_SZ), {}}
		Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
			Debug-Output "OEMNSVIP.INF:  Can't update bind value for NwlnkIpx Disabled key"
			CloseRegKey $(DisabledKey)
			set Status = STATUS_FAILED
			Goto ROB_Return
		endif
		SetRegValue $(DisabledKey) {"Export", $(NoTitle), $(!REG_VT_MULTI_SZ), {}}
		Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
			Debug-Output "OEMNSVIP.INF:  Can't update export value for NwlnkIpx Disabled key"
			CloseRegKey $(DisabledKey)
			set Status = STATUS_FAILED
			Goto ROB_Return
		endif
		SetRegValue $(DisabledKey) {"Route", $(NoTitle), $(!REG_VT_MULTI_SZ), {}}
		Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
			Debug-Output "OEMNSVIP.INF:  Can't update route value for NwlnkIpx Disabled key"
			CloseRegKey $(DisabledKey)
			set Status = STATUS_FAILED
			Goto ROB_Return
		endif
		CloseRegKey $(DisabledKey)
	else
		Debug-Output "OEMNSVIP.INF:  Can't open NwlnkIpx Disabled key"
		set Status = STATUS_FAILED
		Goto ROB_Return
	endif

	;
	; Open NetWareIP keys to remove one of the bindable rules that was set
	; by previous installs of NetWareIP.  The bindable rule was set under
	; NetWareIP and now I want it to replace a rule under NwlnkIpx
	;

	OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_SoftwareBase)"\Novell\NetWareIP\CurrentVersion\NetRules" $(MAXIMUM_ALLOWED) RulesKey
	Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
		Debug-Output "OEMNSVIP.INF:  Can't open NetWareIP NetRules key"
		set status = STATUS_FAILED
		Goto ROB_Return
	Endif

	;
	; Set up bindings for NetWareIP
	;

	Set ValueName = "Bindable"
	GetRegValue $(RulesKey) $(ValueName) ValueList
	Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
		CloseRegKey $(RulesKey)
		Debug-Output "OEMNSVIP.INF:  Can't get bindable value for NetWareIP"
		set status = STATUS_FAILED
		Goto ROB_Return
	endif

	Set OldList = *($(ValueList), 4)
	Set NewList = {}

	Debug-Output "OEMNSVIP.INF:  OldList for NetWareIP bind is "$(OldList)

	ForListDo $(OldList)
		Set Item = $($)
		Ifstr(i) $(Item) != "ipxTransport NetWareIPDriver non non 100"
			Set NewList = >($(NewList), $(Item))
		endif
	EndForListDo

	Debug-Output "OEMNSVIP.INF:  NewList for NetWareIP bind is "$(NewList)

	SetRegValue $(RulesKey) {$(ValueName), $(NoTitle), $(!REG_VT_MULTI_SZ), $(NewList)}
	Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
		Debug-Ouput "OEMNSVIP.INF:  Can't update Bindable value for NetWareIP"
		set status = STATUS_FAILED
		goto ROB_Return
	Endif

	;
	; Close keys
	;

	CloseRegKey $(RulesKey)

ROB_Return = +
	Return $(Status)


;-----------------------------------------------------------------------
;
;               SECTION:        Install-Parameters
;
;               PURPOSE:        Called at install or update to add
;                                       various parameters to the registry
;
;               ARGUMENTS:      None
;                                       
;               RETURNS:        None
;
;               REFERENCES:     None
;
;               MODIFIES:       None
;
;-----------------------------------------------------------------------
[Install-Parameters]

	;
	; HKEY_LOCAL_MACHINE\Software\Novell\NetWareIP\CurrentVersion
	;

	set TempKeyName = $(!NTN_SoftwareBase)"\"$(Manufacturer)"\NetWareIP\CurrentVersion"
	OpenRegKey $(!REG_H_LOCAL) "" $(TempKeyName) $(MAXIMUM_ALLOWED) TempKey
	ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
		;
		;	Set internal versions
		;
		set HaveInternalVersion = YES
		ifint $(!MajorInternalVersion) == 0
			ifint $(!MinorInternalVersion) == 0
				set HaveInternalVersion = NO
			endif
		endif
			
		ifstr(i) $(HaveInternalVersion) == NO
			DeleteRegValue $(TempKey) "MajorInternalVersion"
			DeleteRegValue $(TempKey) "MinorInternalVersion"
		else
			SetRegValue $(TempKey) {"MajorInternalVersion", $(NoTitle), $(!REG_VT_DWORD), $(!MajorInternalVersion)}
			Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
				Debug-Output "OEMNSVIP.INF:  Unable to update MajorInternalVersion value in "$(TempKeyName)
			endif

			SetRegValue $(TempKey) {"MinorInternalVersion", $(NoTitle), $(!REG_VT_DWORD), $(!MinorInternalVersion)}
			Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
				Debug-Output "OEMNSVIP.INF:  Unable to update MinorInternalVersion value in "$(TempKeyName)
			endif
		endif

        CloseRegKey $(TempKey)
	endif

	Exit

;-----------------------------------------------------------------------
;
;
;		SECTION:		UnattendedInstallOption:
;
;		PURPOSE:		This section is shelled to by the Install Option.  It looks at the three MS Unattended variables and then
;		sets the Novell specific variable for NWACU and the NWUnattended file.
;		Our install for both setup.exe /ACU and Unattended install from MS then uses NWACU and the NWUnattended variables.
;
;		ARGUMENTS:	None
;
;		RETURNS:		None
;
;		REFERENCES:	None
;
;		MODIFIES:	None
;
;-----------------------------------------------------------------------
[UnattendedInstallOption]

	read-syms GeneralConstants
	read-syms FileConstants

	ifstr(i) $(!STF_GUI_UNATTENDED) == "NO"
		ifstr(i) $(!STF_UNATTENDED) == "YES"
			set !NWACU = "YES"
		endif
	else-ifstr(i) $(!STF_GUI_UNATTENDED) == "YES"
		ifstr(i) $(!NWUnattendedFile) == ""
			set !NWACU = "YES"
			set !NWUnattendedFile = $(!STF_UNATTENDED)
			set !NWUnattendedSection = $(!STF_UNATTENDED_SECTION)
		else-ifstr(i) $(!STF_UNATTENDED_SECTION) != ""
			set !NWUnattendedSection = $(!STF_UNATTENDED_SECTION)
			Debug-OutPut "OEMNSVIP.INF: stf_gui in unattended = "$(!STF_GUI_UNATTENDED)
		endif
	endif

Return


;*************************************************************************
;----------Write-Unattended-Variables-----------------------------------
;
;
;		SECTION:		Write-Unattended-Variables:
;
;		PURPOSE:		This section writes the unattended variables to the
;						registry.
;
;		ARGUMENTS:	None
;
;		RETURNS:		None
;
;		REFERENCES:	Called at end of install section and the update section
;
;		MODIFIES:	None
;
;*************************************************************************
[Write-Unattended-Variables]
	read-syms GeneralConstants
	read-syms FileConstants
	read-syms InstallOption$(!STF_LANGUAGE)

	Debug-Output "OEMNSVIP.INF:  Write-Unattended-Variables"

	;	If the /U parameter is passed from Setupnw.exe then call this section to set the defaults.
	;	Add the values in the unattended file to the registry.
	set UnattendReturnStatus = STATUS_SUCCESSFUL

	ifstr(i) $(!NWUnattendedFile) != ""
		Debug-Output "OEMNSVIP.INF:  !NWUnattendedFile = "$(!NWUnattendedFile)
		LoadLibrary $(LoadDisk3Text) $(!STF_WINDOWSSYSPATH)"\"$(NwSetupDll) NwLibHandle
		SetHelpFile $(!STF_WINDOWSSYSPATH)"\nls\"$(!P:NLSDirName)"\nt4setup.hlp" $(!MinimumID) $(!MaximumID)

		LibraryProcedure LibResult $(NwLibHandle) NWUnattendedInstall $(!NWUnattendedFile) $(!P:Option)

		FreeLibrary $(NwLibHandle)
	endif

Return $(UnattendReturnStatus)

;-----------------------------------------------------------------------
; LANGUAGES SUPPORTED
; -------------------
;
; The languages supported by the OEM INF, For every language supported
; we need to have a separate text section for every displayable text
; section.
;
;-----------------------------------------------------------------------

[LanguagesSupported]
	ENG, ENGLISH

[OptionsTextENG]
	NetWareIP	= "Novell NetWare/IP Support (NWIP)"

[FileConstantsENG]
	ProCaption		= "Windows NT Setup"
	ProCancel		= "Cance&l"
	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:"

	;
	; Producer Info
	;
	
	FunctionTitle								= "Novell NetWare/IP Setup"
	
	;
	; Software
	;

	ProductNetWareIPDisplayName	=  "Novell NetWare/IP Adapter Driver"
	ProductNetWareIPDescription	=  "NetWare/IP routes Novell client traffic through the IP protocol."
	
	;
	; Hardware
	;
	
	ProductHardwareNetWareIPDescription	= "Novell NetWare/IP Adapter"


[InstallOptionENG]
	ErrorMessageTitle = "NetWareIP Error"

	NoTcpipMessageText = "TCPIP Protocol is NOT installed.  NetWareIP will "+
		"not function correctly unless the TCPIP Protocol is reinstalled."

	NotConfiguredMessageText = "NetWareIP has not been configured and "+
		"will not function properly.  Please reconfigure NetWareIP Adapter"

	InstallTcpipMessageTitle = "Install TCPIP Protocol"

	InstallTcpipMessageText = "TCPIP Protocol is NOT installed.  NetWareIP "+
		"will not function correctly unless the TCPIP Protocol is installed.  "+
		"Install it now?"

	NetWareIPOnASMessageTitle = "NetWareIP Installation Error"

	NetWareIPOnASMessageText = "Novell NetWareIP is only supported with the "+
		"workstation versions of Microsoft Windows NT.  It is NOT supported "+
		"with the Advanced Server versions."

	NetWareIPInstalledMessage = "Novell NetWare/IP is already installed.  "+
		"Please remove it and then reboot before reinstalling."

	ShellCodeErrorTitle = "Error:  Novell NetWare/IP Adapter"

	ShellCodeErrorText = "Shell Code Error"

	LoadDisk3Text = "Please load the Novell NetWare Client for Windows NT "+
		"disk 3 into drive "

	NWCMDInstalledMessage = "Cannot install NetWare/IP while Compatibility Mode is installed."

	NOIPXInstalledMessage = "This workstation is configured with IPX not installed.  To install NetWare/IP, "+
		"first install IPX."

	UpgradeButtonMessage = "The NetWare/IP version you are installing is older "+
		"than the one that is currently installed.  You must remove it "+
		"and then reboot before installing an older version."

	NetWareClientNotInstalledMessage = "You must install the Novell Client for Windows NT before this product can be installed."


[Source Media Descriptions]
	1	= "Windows NT Setup Disk #1",				TAGFILE = disk1
	2	= "Windows NT Setup CD-ROM Disk",		TAGFILE = disk2
	3	= "NetWare for Windows NT Setup Disk",	TAGFILE = NWIP.SYS


[Files-Inf]
	3,	oemnsvip.inf,	SIZE=50000,	DECOMPRESS


[Files-NetWareIP]
	3,	nwip.sys,		SIZE=50000,	DECOMPRESS
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: web3, load: 1.59