;***********************************************************************
;
; OEMNSVCM.INF
;
;               Novell IPX Compatibility Mode INF file.
;
;***********************************************************************

;
; The following is the version info for Novell
;

;VeRsIoN=v4.70 Novell Client Install for Windows NT (980316)
;CoPyRiGhT=copyright 1992-1998, by Novell, INC. All rights reserved.

[Identification]
	OptionType = NetService

[Options]
	NWCMD

[FileConstants]
	UtilityInf              = "UTILITY.INF"
	subroutineinf   = "SUBROUTN.INF"
	NwSubsInf               = "NWSUBS.INF"
	SoftwareType    = "driver"
	Exit_Code               = 0
	DriverToLoad    = ""

	;
	; EventLog Message File
	;
	
	NetEventDLL     = "%SystemRoot%\System32\nls\"$(NLSDirName)"\nwevents.dll"
	IoLogMsgDLL     = "%SystemRoot%\System32\IoLogMsg.dll"
	
	;
	; Software
	;
	
	ProductSoftwareName                     = "NWCMD"
	ProductSoftwareTitle            = "Novell IPX Compatibility Mode"
	ProductSoftwareImagePath        = "\SystemRoot\system32\drivers\nwcmd.sys"
	NetRuleSoftwareType                     = "NWCMDSys NWCMDDriver"
	NetRuleSoftwareUse                      = $(SoftwareType)
	NetRuleSoftwareBindForm         = """NWCMDSys"" yes no container"
	NetRuleSoftwareClass            = {"NWCMDDriver basic"}
	NetRuleSoftwareBindable         = {"NWCMDDriver NWCMDAdapter non exclusive 100"}
	
	;
	; NWCMDH
	;
	
	ProductNWCMDHControl	  = service
	ProductNWCMDHHidden	  = 0
	ProductNWCMDHInstrumentation  = FALSE
	ProductNWCMDHName	  = "NWCMDH"
	ProductNWCMDHImagePath	  = "\SystemRoot\system32\drivers\nwcmd2.sys"
	ProductNWCMDHSvcType	  = "kernelautostart"
	ProductNWCMDHGroup	  = ""
	ProductNWCMDHDependList   = {}
	ProductNWCMDHEventFile	  = ""
	;
	; Hardware
	;
	
	ProductHardwareName                             = "NWCMD"
	ProductHardwareTitle                    = "Novell IPX Compatibility Adapter"
	NetRuleHardwareType                             = "NWCMD NWCMDAdapter"
	NetRuleHardwareBindForm                 = " yes yes container"
	NetRuleHardwareClass                    = {"NWCMDAdapter basic"}
	
	;
	; Registry Key
	;
	
	ProductKeyName  = $(!NTN_SoftwareBase)"\"$(Manufacturer)"\"$(ProductSoftwareName)"\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"
	
	DriverPath                              = $(!STF_NTPATH)\drivers

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


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

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

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

;------------------------------------------------------------------------------
; 2. ReturnOptions      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 = +

	
	Shell "" UnattendedInstallOption

	;
	; Get the data from the Unattended file.
	;

	ifstr(i) $(!NWUnattendedFile) != ""
		ifstr(i) $(!NWUnattendedSection) != ""
			Shell $(!NWUnattendedFile) ReadDefaultData, "IPXCompatibilityModeParameters"
			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 "OEMNSVCM.INF: !DoRemove = "$(!DoRemove)
			ifstr(i) $(!DoRemove) == YES
				set !NTN_InstallMode = deinstall
			else-Ifstr(i) $(!DoInstall) == NO
				Debug-OutPut "OEMNSVCM.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)


[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 "OEMNSVCM.INF: Windows NT current version is "$(VersionListData)
			Debug-OutPut "OEMNSVCM.INF: Windows NT Major version is "$(NTMajorVersion)
			Debug-OutPut "OEMNSVCM.INF: Windows NT Minor version is "$(NTMinorVersion)
		else
			Debug-Output "OEMNSVCM.INF:  Error getting NT version"
		endif
		CloseRegKey $(CurrentVersionKey)
	else
		Debug-Output "OEMNSVCM.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 "OEMNSVCM.INF:  Error getting NT version"
		endif
		CloseRegKey $(CurrentVersionKey)
	else
		Debug-Output "OEMNSVCM.INF:  Error opening "$(CurrentVersion)
	endif

Begin = +
	Set !G:DebugOutputControl = 0
	Debug-Output "OEMNSVCM.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 "OEMNSVCM.INF:  Can't configure the Novell CM software."
			Shell $(UtilityInf), RegistryErrorString, CANNOT_CONFIGURE_SOFTWARE
			ifint $($ShellCode) != $(!SHELL_CODE_OK)
				Debug-Output "OEMNSVCM.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 "OEMNSVCM.INF:  Installing IPX Compatibility Mode adapter"

	;
	; Start the adapter install stuff
	;

	;
	;       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				
			;
			; Cannot install NWCMD while NWIP is installed.
			;


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

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

			set CommonStatus = STATUS_USERCANCEL
			goto end
		endif
	endif

	;
	; Is this an Advanced Server
	;

	Debug-Output "OEMNSVCM.INF:  Checking to see if advanced server"
	set AdvancedServer = "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)
			set AdvancedServer = "YES"
			ifstr(i) $(ValueListData) == "WinNT"
				set AdvancedServer = "NO"
				Debug-Output "OEMNSVCM.INF:  AdvancedServer is "$(AdvancedServer)
			endif
		else
			Debug-Output "OEMNSVCM.INF:  Failed to get ProductType"
		endif
		CloseRegKey $(TempKey)
	else
		Debug-Output "OEMNSVCM.INF:  Failed to open ProductOptions key"
	endif

	set RasProtocolsKeyName = $(!NTN_SoftwareBase)"\Microsoft\RAS\PROTOCOLS"
	OpenRegKey $(!REG_H_LOCAL) "" $(RasProtocolsKeyName) $(MAXIMUM_ALLOWED) KeyRasProtocols
	ifstr $(KeyRasProtocols) != ""
		GetRegValue $(KeyRasProtocols) "fIpxSelected" IpxSelectedValue
		ifint $(RegLastError) == 0
			set IpxSelectedVal = *($(IpxSelectedValue), 4)
			Debug-Output "OEMNSVCM.INF: IpxSelectedVal is "$(IpxSelectedVal)
			ifint $(IpxSelectedVal) == 1
				;
				; RAS and NWCMD are not compatible.
				;
				CloseRegKey $(KeyRasProtocols)
				Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "FATAL", $(IPOnlyMessageText)

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

				set CommonStatus = STATUS_USERCANCEL
				goto end
			Endif        
		Endif

		GetRegValue $(KeyRasProtocols) "fIpxAllowed" IpxAllowedValue
		ifint $(RegLastError) == 0
			set IpxAllowedVal = *($(IpxAllowedValue), 4)
			ifint $(IpxAllowedVal) == 1
				;
				; RAS and NWCMD are not compatible.
				;
				CloseRegKey $(KeyRasProtocols)
				Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "FATAL", $(IPOnlyMessageText)

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

				set CommonStatus = STATUS_USERCANCEL
				goto end
			Endif        
		Endif
		CloseRegKey $(KeyRasProtocols)
	Endif

	Shell "" Install-NWLINK

	;
	; Add the software component
	;

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

	Debug-Output "OEMNSVCM.INF: AddSoftwareComponent"
	Shell $(UtilityInf), AddSoftwareComponent +
		$(Manufacturer), +
		$(ProductSoftwareName), +
		$(ProductSoftwareName), +
		$(ProductSoftwareTitle), +
		$(STF_CONTEXTINFNAME), +
		$(ProductSoftwareImagePath), +
		"kernelautostart", +
		$(GroupToJoin), +
		"", +
		"", +
		$(NetEventDLL)

	Set OEM_ABANDON_SOFTWARE = TRUE
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "OEMNSVCM.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 "OEMNSVCM.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),$(ProductSoftwareTitle)},+
				{Description,$(NoTitle),$(!REG_VT_SZ),$(ProductSoftwareDescription)},+
				{Review,$(NoTitle),$(!REG_VT_DWORD),1},+
				{PathName,$(NoTitle),$(!REG_VT_SZ),$(!STF_CWDDIR)},+
				{ServiceName,$(NoTitle),$(!REG_VT_SZ),$(ProductSoftwareName)},+
				{InstallDate,$(NoTitle),$(!REG_VT_DWORD),*($(Now),1)}}
	Shell  $(UtilityInf), AddValueList, $(KeyProduct), $(NewValueList)
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "OEMNSVCM.INF:  AddValueList ShellCode error "$($ShellCode)
		goto ShellCodeError
	endif
	set RegistryErrorIndex = $($R0)
	Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
		EndWait
		Debug-Output "OEMNSVCM.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),$(STF_CONTEXTINFNAME)} }
	Shell  $(UtilityInf), AddValueList, $(SoftNetRulesKey), $(NewValueList)
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "OEMNSVCM.INF: AddValueList ShellCode error "$($ShellCode)
		goto ShellCodeError
	endif
	set RegistryErrorIndex = $($R0)
	CloseRegKey $(KeyProduct)
	CloseRegKey $(SoftNetRulesKey)
	Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
		EndWait
		Debug-Output "OEMNSVCM.INF: AddValueList Registry error "$(RegistryErrorIndex)
		goto fatalregistry
	endif

	Debug-Output "OEMNSVCM.INF: install service: NWCMDH."
	Shell $(UtilityInf), CreateService, +
		$(ProductNWCMDHName), +
		$(ProductNWCMDHDisplayName), +
		$(ProductNWCMDHImagePath), +
		$(ProductNWCMDHSvcType), +
		$(ProductNWCMDHGroup), +
		$(ProductNWCMDHDependList), "", +
		$(ProductNWCMDHEventFile), +
		$(ProductNWCMDHTypeSupported), +
		$(ProductNWCMDHEventLogLocation), 1
		
	Ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "OEMNSVCM.INF: ShellCode error installing NWCMDH."
		goto ShellCodeError
	Endif

	Set RegistryErrorIndex = $($R0)
	Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
		CloseRegKey $($R1)
		CloseRegKey $($R2)
		CloseRegKey $($R3)
		Debug-Output "OEMNSVCM.INF: Registry error installing NWCMDH."
		goto fatalregistry
	Endif
		
	Set SvcSvcKey	= $($R1)
	Set SvcParamKey	= $($R2)
	Set SvcLinkKey	= $($R3)

	CloseRegKey $(SvcSvcKey)
	CloseRegKey $(SvcParamKey)
	CloseRegKey $(SvcLinkKey)


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

	;
	; If on NT 4.00 machine and not an advanced server, add the board five times
	; Otherwise, add it once
	;

	set Count = 0
	set endCount = 1
	ifint $(NTMajorVersion) == "4"
		ifstr(i) $(AdvancedServer) != "YES"
			set endCount = 5
		endif
	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 "OEMNSVCM.INF: AddHardwareComponent Shell error "$($ShellCode)
			goto ShellCodeError
		endif

		set RegistryErrorIndex = $($R0)
		Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
			EndWait
			Debug-Output "OEMNSVCM.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)"] "$(ProductHardwareTitle)},+
					{Hidden,$(NoTitle),$(!REG_VT_DWORD),$(HideIt)},+
					{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 "OEMNSVCM.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),$(STF_CONTEXTINFNAME)}}

		Shell  $(UtilityInf), AddValueList, $(KeyAdapterRules), $(NewValueList)
		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			Debug-Output "OEMNSVCM.INF: AddValueList ShellCode error "$($ShellCode)
			goto ShellCodeError
		endif
		set RegistryErrorIndex = $($R0)
		Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
			EndWait
			Debug-Output "OEMNSVCM.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"}


	set TempKeyName = $(!NTN_ServiceBase)"\NWCMD\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 "OEMNSVCM.INF:  Can't set Compatibility Mode linkage key"
			goto fatalregistry
		endif
		FlushRegKey $(TempKey)
		CloseRegKey $(TempKey)
	else
		Debug-Output "OEMNSVCM.INF:  Can't open Compatibility Mode linkage key"
		goto fatalregistry
	endif

	;
	; Add NwlnkIpx binding for Compatibility Mode Driver.
	; Remove binding for ndisDriver
	;

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

	;
	;       Install various registry parameters
	;
	Debug-Output "OEMNSVCM.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 "OEMNSVCM:  User Canceled due to a error processing the Unattended Variables."
		set CommonStatus = STATUS_USERCANCEL
		goto setfailed
	endif

	goto end


configureadapter = +
	Debug-Output "OEMNSVCM.INF:  Configuring Compatibility Mode adapter"

	StartWait
	LoadLibrary $(LoadDisk3Text) $(!STF_WINDOWSSYSPATH)"\nwsetup.dll" NwLibHandle
	SetHelpFile $(!STF_WINDOWSSYSPATH)"\nls\"$(NLSDirName)"\nt4setup.hlp" $(!MinimumID) $(!MaximumID)
	ifint $(NTMajorVersion) < "4"
		SetHelpFile $(!STF_WINDOWSSYSPATH)"\nls\"$(NLSDirName)"\nt3setup.hlp" $(!MinimumID) $(!MaximumID)
	endif
	set HelpContext = $(IDH_NETWAREWRKSTATIONPARMS)
	LibraryProcedure LibResult $(NwLibHandle) NWConfigure $(Option)
	
	Debug-Output "OEMNSVCM.INF:  dialog returned "$(LibResult)
	ifstr(i) $(LibResult) != "CONTINUE"
		set CommonStatus = STATUS_USERCANCEL
	endif
	
	FreeLibrary $(NwLibHandle)
	;
	; Write out the unattended variables to registry
	;
	
	shell "" Write-Unattended-Variables
		
	goto end



bindadapter =+
	Debug-Output "OEMNSVCM.INF:  Binding Compatibility Mode 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 "OEMNSVCM.INF:  Failed to open key "$(TempKeyName)
	endif

	ifint $(NoTCPIP) == 1

		;
		; Pop up message warning user that TCPIP is not installed and
		; that Compatibility Mode 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"}


	set TempKeyName = $(!NTN_ServiceBase)"\NWCMD"
	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 "OEMNSVCM.INF:  Can't set Compatibility Mode linkage key"
			goto fatalregistry
		endif
		FlushRegKey $(TempKey)
		CloseRegKey $(TempKey)
	else
		Debug-Output "OEMNSVCM.INF:  Can't open Compatibility Mode linkage key"
		goto fatalregistry
	endif

	set TempKeyName = $(!NTN_ServiceBase)"\NWCMD\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 "OEMNSVCM.INF:  Can't set Compatibility Mode linkage key"
			goto fatalregistry
		endif
		FlushRegKey $(TempKey)
		CloseRegKey $(TempKey)
	else
		Debug-Output "OEMNSVCM.INF:  Can't open Compatibility Mode linkage key"
		goto fatalregistry
	endif

	;
	; Check to see if Microsoft Client is installed.  If so, remove its bindings to NWLink.
	;
	Debug-Output "OEMNSVCM.INF:  Check to see if Microsoft Client (Workstation) is installed"
	OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\LanmanWorkstation\Linkage" $(MAXIMUM_ALLOWED) KeyLanman
	Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
		OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\LanmanWorkstation\Linkage\Disabled" $(MAXIMUM_ALLOWED) KeyLanmanDisabled
		GetRegValue $(KeyLanman) "Bind" ValueData
		Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
			Set ValueList = *($(ValueData), 4)
			Set NewList1 = {}
			Set DisabledList = {}
			Set FindValue = "\Device\NwlnkIpx"
			Ifcontains(i) $(FindValue) in $(ValueList)
				ForListDo $(ValueList)
					Ifstr(i) $($) != $(FindValue)
						Set NewList1 = >($(NewList1), $($))
						Debug-Output "OEMNSVCM.INF:  Bind (WS): NewList1 set"
					else
						Debug-Output "OEMNSVCM.INF:  Bind (WS): Setting DisabledList to "$($)
						Set DisabledList = >($(DisabledList), $($))
					Endif
				EndForListDo
			Endif

			Debug-Output "OEMNSVCM.INF:  Bind (WS): NewList1 is "$(NewList1)
			Ifstr(i) $(NewList1) != {}
				Set ValueList = $(NewList1)
			Endif
			
			Set NewList2 = {}
			Set FindValue = "\Device\NwlnkNb"
			Ifcontains(i) $(FindValue) in $(ValueList)
				ForListDo $(ValueList)
					Ifstr(i) $($) != $(FindValue)
						Set NewList2 = >($(NewList2), $($))
						Debug-Output "OEMNSVCM.INF:  Bind (WS): NewList2 set"
					else
						Set DisabledList = >($(DisabledList), $($))
						Debug-Output "OEMNSVCM.INF:  Bind (WS): Setting DisabledList to "$($)
					Endif
				EndForListDo
			Endif
			
			Debug-Output "OEMNSVCM.INF:  Bind (WS): NewList2 is "$(NewList2)
			Ifstr(i) $(NewList2) != {}
				Debug-Output "OEMNSVCM.INF:  Bind (WS): Setting Reg value to Newlist2: "$(NewList2)
				SetRegValue $(KeyLanman) {"Bind", $(NoTitle), $(!REG_VT_MULTI_SZ), $(NewList2)}
				Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
					Debug-Output "OEMNSVCM.INF: Cant update Bind value for LanmanWS"
				Endif
			else-Ifstr(i) $(NewList1) != {}
				Debug-Output "OEMNSVCM.INF:  Bind (WS): Setting Reg value to Newlist1: "$(NewList1)
				SetRegValue $(KeyLanman) {"Bind", $(NoTitle), $(!REG_VT_MULTI_SZ), $(NewList1)}
				Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
					Debug-Output "OEMNSVCM.INF: Cant update Bind value for LanmanWS"
				Endif
			Endif
			Debug-Output "OEMNSVCM.INF: DisabledList (Bind) equals: "$(DisabledList)
			Ifstr(i) $(DisabledList) != {}
				SetRegValue $(KeyLanmanDisabled) {"Bind", $(NoTitle), $(!REG_VT_MULTI_SZ), $(DisabledList)}
			Endif

		Endif

		GetRegValue $(KeyLanman) "Export" ValueData
		Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
			Set ValueList = *($(ValueData), 4)
			Set NewList1 = {}
			Set DisabledList = {}
			Set FindValue = "\Device\LanmanWorkstation\NwlnkIpx"
			Ifcontains(i) $(FindValue) in $(ValueList)
				ForListDo $(ValueList)
					Ifstr(i) $($) != $(FindValue)
						Debug-Output "OEMNSVCM.INF:  Export (WS): NewList1 set"
						Set NewList1 = >($(NewList1), $($))
					else
						Debug-Output "OEMNSVCM.INF:  Export (WS): Setting Disabled to "$($)
						Set DisabledList = >($(DisabledList), $($))
					Endif
				EndForListDo
			Endif

			Debug-Output "OEMNSVCM.INF:  Export (WS): NewList1 is "$(NewList1)
			Ifstr(i) $(NewList1) != {}
				Set ValueList = $(NewList1)
			Endif
			
			Set NewList2 = {}
			Set FindValue = "\Device\LanmanWorkstation\NwlnkNb"
			Ifcontains(i) $(FindValue) in $(ValueList)
				ForListDo $(ValueList)
					Ifstr(i) $($) != $(FindValue)
						Debug-Output "OEMNSVCM.INF:  Export (WS): NewList2 set"
						Set NewList2 = >($(NewList2), $($))
					else
						Debug-Output "OEMNSVCM.INF:  Export (WS): Setting Disabled to "$($)
						Set DisabledList = >($(DisabledList), $($))
					Endif
				EndForListDo
			Endif
			
			Debug-Output "OEMNSVCM.INF:  Export (WS): NewList2 is "$(NewList2)
			Ifstr(i) $(NewList2) != {}
				SetRegValue $(KeyLanman) {"Export", $(NoTitle), $(!REG_VT_MULTI_SZ), $(NewList2)}
				Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
					Debug-Output "OEMNSVCM.INF: Cant update Export value for LanmanWS"
				Endif
			else-Ifstr(i) $(NewList1) != {}
				SetRegValue $(KeyLanman) {"Export", $(NoTitle), $(!REG_VT_MULTI_SZ), $(NewList1)}
				Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
					Debug-Output "OEMNSVCM.INF: Cant update Export value for LanmanWS"
				Endif
			Endif
			Ifstr(i) $(DisabledList) != {}
				SetRegValue $(KeyLanmanDisabled) {"Export", $(NoTitle), $(!REG_VT_MULTI_SZ), $(DisabledList)}
			Endif
		Endif
		
		GetRegValue $(KeyLanman) "Route" ValueData
		Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
			Set ValueList = *($(ValueData), 4)
			Set NewList = {}
			Set DisabledList = {}
			Set FindValue = """NwlnkNb"" ""NwlnkIpx"""

			Ifcontains(i) $(FindValue) in $(ValueList)
				ForListDo $(ValueList)
					Ifstr(i) $($) != $(FindValue)
						Set NewList = >($(NewList), $($))
						Debug-Output "OEMNSVCM.INF:  Route (WS): NewList set"
					else
						Debug-Output "OEMNSVCM.INF:  Route (WS): Setting Disabled to "$($)
						Set DisabledList = >($(DisabledList), $($))
					Endif
				EndForListDo
			
				Debug-Output "OEMNSVCM.INF:  Route (WS): NewList is "$(NewList)
				SetRegValue $(KeyLanman) {"Route", $(NoTitle), $(!REG_VT_MULTI_SZ), $(NewList)}
				Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
					Debug-Output "OEMNSVCM.INF: Cant update Route value for LanmanWS"
				Endif
				Ifstr(i) $(DisabledList) != {}
					SetRegValue $(KeyLanmanDisabled) {"Route", $(NoTitle), $(!REG_VT_MULTI_SZ), $(DisabledList)}
				Endif
			Endif
		Endif

		CloseRegKey $(KeyLanman)
		CloseRegKey $(KeyLanmanDisabled)
	Endif
	
	Debug-Output "OEMNSVCM.INF:  Check to see if Microsoft Client (Server) is installed"
	OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\LanmanServer\Linkage" $(MAXIMUM_ALLOWED) KeyLanman
	Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
		OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\LanmanServer\Linkage\Disabled" $(MAXIMUM_ALLOWED) KeyLanmanDisabled
		GetRegValue $(KeyLanman) "Bind" ValueData
		Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
			Set ValueList = *($(ValueData), 4)
			Set NewList1 = {}
			Set DisabledList = {}
			Set FindValue = "\Device\NwlnkIpx"
			Ifcontains(i) $(FindValue) in $(ValueList)
				ForListDo $(ValueList)
					Ifstr(i) $($) != $(FindValue)
						Debug-Output "OEMNSVCM.INF:  Bind (SV): NewList1 set"
						Set NewList1 = >($(NewList1), $($))
					else
						Debug-Output "OEMNSVCM.INF:  Bind (SV): Setting Disabled to "$($)
						Set DisabledList = >($(DisabledList), $($))
					Endif
				EndForListDo
			Endif

			Debug-Output "OEMNSVCM.INF:  Bind (SV): NewList1 is "$(NewList1)
			Ifstr(i) $(NewList1) != {}
				Set ValueList = $(NewList1)
			Endif
			
			Set NewList2 = {}
			Set FindValue = "\Device\NwlnkNb"
			Ifcontains(i) $(FindValue) in $(ValueList)
				ForListDo $(ValueList)
					Ifstr(i) $($) != $(FindValue)
						Debug-Output "OEMNSVCM.INF:  Bind (SV): NewList2 set"
						Set NewList2 = >($(NewList2), $($))
					else
						Debug-Output "OEMNSVCM.INF:  Bind (SV): Setting Disabled to "$($)
						Set DisabledList = >($(DisabledList), $($))
					Endif
				EndForListDo
			Endif
			
			Debug-Output "OEMNSVCM.INF:  Bind (SV): NewList2 is "$(NewList2)
			Ifstr(i) $(NewList2) != {}
				SetRegValue $(KeyLanman) {"Bind", $(NoTitle), $(!REG_VT_MULTI_SZ), $(NewList2)}
				Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
					Debug-Output "OEMNSVCM.INF: Cant update Bind value for LanmanSV"
				Endif
			else-Ifstr(i) $(NewList1) != {}
				SetRegValue $(KeyLanman) {"Bind", $(NoTitle), $(!REG_VT_MULTI_SZ), $(NewList1)}
				Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
					Debug-Output "OEMNSVCM.INF: Cant update Bind value for LanmanSV"
				Endif
			Endif
			Ifstr(i) $(DisabledList) != {}
				SetRegValue $(KeyLanmanDisabled) {"Bind", $(NoTitle), $(!REG_VT_MULTI_SZ), $(DisabledList)}
			Endif
		Endif

		GetRegValue $(KeyLanman) "Export" ValueData
		Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
			Set ValueList = *($(ValueData), 4)
			Set NewList1 = {}
			Set DisabledList = {}
			Set FindValue = "\Device\LanmanServer\NwlnkIpx"
			Ifcontains(i) $(FindValue) in $(ValueList)
				ForListDo $(ValueList)
					Ifstr(i) $($) != $(FindValue)
						Set NewList1 = >($(NewList1), $($))
						Debug-Output "OEMNSVCM.INF:  Export (SV): NewList1 set"
					else
						Set DisabledList = >($(DisabledList), $($))
						Debug-Output "OEMNSVCM.INF:  Export (SV): Setting Disabled to "$($)
					Endif
				EndForListDo
			Endif

			Debug-Output "OEMNSVCM.INF:  Export (SV): NewList1 is "$(NewList1)
			Ifstr(i) $(NewList1) != {}
				Set ValueList = $(NewList1)
			Endif
			
			Set NewList2 = {}
			Set FindValue = "\Device\LanmanServer\NwlnkNb"
			Ifcontains(i) $(FindValue) in $(ValueList)
				ForListDo $(ValueList)
					Ifstr(i) $($) != $(FindValue)
						Set NewList2 = >($(NewList2), $($))
						Debug-Output "OEMNSVCM.INF:  Export (SV): NewList2 set"
					else
						Debug-Output "OEMNSVCM.INF:  Export (SV): Setting Disabled to "$($)
						Set DisabledList = >($(DisabledList), $($))
					Endif
				EndForListDo
			Endif
			
			Debug-Output "OEMNSVCM.INF:  Export (SV): NewList2 is "$(NewList2)
			Ifstr(i) $(NewList2) != {}
				SetRegValue $(KeyLanman) {"Export", $(NoTitle), $(!REG_VT_MULTI_SZ), $(NewList2)}
				Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
					Debug-Output "OEMNSVCM.INF: Cant update Export value for LanmanSV"
				Endif
			else-Ifstr(i) $(NewList1) != {}
				SetRegValue $(KeyLanman) {"Export", $(NoTitle), $(!REG_VT_MULTI_SZ), $(NewList1)}
				Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
					Debug-Output "OEMNSVCM.INF: Cant update Export value for LanmanSV"
				Endif
			Endif
			Ifstr(i) $(DisabledList) != {}
				SetRegValue $(KeyLanmanDisabled) {"Export", $(NoTitle), $(!REG_VT_MULTI_SZ), $(DisabledList)}
			Endif
		Endif
		
		GetRegValue $(KeyLanman) "Route" ValueData
		Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
			Set ValueList = *($(ValueData), 4)
			Set NewList = {}
			Set DisabledList = {}
			Set FindValue = """NwlnkNb"" ""NwlnkIpx"""

			Ifcontains(i) $(FindValue) in $(ValueList)
				ForListDo $(ValueList)
					Ifstr(i) $($) != $(FindValue)
						Set NewList = >($(NewList), $($))
						Debug-Output "OEMNSVCM.INF:  Route (SV): NewList set"
					else
						Debug-Output "OEMNSVCM.INF:  Route (SV): Setting Disabled to "$($)
						Set DisabledList = >($(DisabledList), $($))
					Endif
				EndForListDo
			
				Debug-Output "OEMNSVCM.INF:  Route (SV): NewList is "$(NewList)
				SetRegValue $(KeyLanman) {"Route", $(NoTitle), $(!REG_VT_MULTI_SZ), $(NewList)}
				Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
					Debug-Output "OEMNSVCM.INF: Cant update Route value for LanmanSV"
				Endif
				Ifstr(i) $(DisabledList) != {}
					SetRegValue $(KeyLanmanDisabled) {"Route", $(NoTitle), $(!REG_VT_MULTI_SZ), $(DisabledList)}
				Endif
			Endif
		Endif

		CloseRegKey $(KeyLanman)
		CloseRegKey $(KeyLanmanDisabled)
	Endif

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

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

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

		CloseRegKey $(KeyNwlnkIpx)
	Endif

	goto end



removeadapter = +
	Debug-Output "OEMNSVCM.INF:  Removing Compatibility Mode adapter"

	;
	; Remove adapter
	;

	;
	; Find the Compatibility Mode 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 NWCMDCardNumList                            = $($R11)
	Set NumberNWCMDAdapters                 = $($R12)

	Debug-Output "OEMNSVCM.INF:  NWCMDCardNumList is "$(NWCMDCardNumList)

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

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

	Debug-Output "OEMNSVCM.INF: remove service: NWCMDH."
	Shell $(UtilityInf), RemoveService, $(ProductNWCMDHName), NO
	Ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "OEMNSVCM.INF: ShellCode error removing NWCMDH."
		goto ShellCodeError
	Endif

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

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

	;
	;       Remove the class factory GUID
	;
	Set TempKeyName = $(!NTN_SoftwareBase)"\"$(Manufacturer)"\CLSID"
	OpenRegKey $(!REG_H_LOCAL) "" $(TempKeyName) $(MAXIMUM_ALLOWED) TempKey
	ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)

		DeleteRegTree $(TempKey) "{9A19E5B5-3B30-11d1-84D3-00A0C9249033}"
		ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
			Debug-Output "OEMNSVCM.INF:  Failed to delete NWCMD CLSID registry key"
		endif

		CloseRegKey $(TempKey)
	else
		Debug-Output "OEMNSVCM.INF:  Failed to open CLSID key to delete NWCMD"
	endif

	OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_SoftwareBase)"\Microsoft\Windows NT\CurrentVersion\NetworkCards" $(MAXIMUM_ALLOWED) KeyNetcards
	Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
		EnumRegKey $(KeyNetcards) NetcardsList
		ForListDo $(NetcardsList)
			set KeyName = *($($),1)
			OpenRegKey $(KeyNetcards) "" $(KeyName) $(MAXIMUM_ALLOWED) Card
			Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
				GetRegValue $(Card), "ServiceName" ServiceNameInfo
				Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
					set CardServiceName = *($(ServiceNameInfo), 4)
					OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase) $(MAXIMUM_ALLOWED) ServiceKey
					Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
						DeleteRegTree $(ServiceKey) $(CardServiceName)"\Parameters\Nwcmd"
						CloseRegKey $(ServiceKey)
					endif
				endif
				CloseRegKey $(Card)
			else
				Debug-Output "OEMNSVIP.INF: Error opening Netcard: "$(KeyName)
			endif
		EndForListDo

		CloseRegKey $(KeyNetcards)
	Endif

	goto end


updateadapter = +
	Debug-Output "OEMNSVCM.INF:  Updating Compatibility Mode adapter"

	set TempKeyName = $(!NTN_ServiceBase)"\NWCMDH"
	OpenRegKey $(!REG_H_LOCAL) "" $(TempKeyName) $(MAXIMUM_ALLOWED) TempKey
	Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
		Debug-Output "OEMNSVCM.INF: install service: NWCMDH."
		Shell $(UtilityInf), CreateService, +
			$(ProductNWCMDHName), +
			$(ProductNWCMDHDisplayName), +
			$(ProductNWCMDHImagePath), +
			$(ProductNWCMDHSvcType), +
			$(ProductNWCMDHGroup), +
			$(ProductNWCMDHDependList), "", +
			$(ProductNWCMDHEventFile), +
			$(ProductNWCMDHTypeSupported), +
			$(ProductNWCMDHEventLogLocation), 1
			
		Ifint $($ShellCode) != $(!SHELL_CODE_OK)
			Debug-Output "OEMNSVCM.INF: ShellCode error installing NWCMDH."
			goto ShellCodeError
		Endif

		Set RegistryErrorIndex = $($R0)
		Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
			CloseRegKey $($R1)
			CloseRegKey $($R2)
			CloseRegKey $($R3)
			Debug-Output "OEMNSVCM.INF: Registry error installing NWCMDH."
			goto fatalregistry
		Endif
			
		Set SvcSvcKey	= $($R1)
		Set SvcParamKey	= $($R2)
		Set SvcLinkKey	= $($R3)

		CloseRegKey $(SvcSvcKey)
		CloseRegKey $(SvcParamKey)
		CloseRegKey $(SvcLinkKey)
	else
		CloseRegKey $(TempKey)
	endif

	;
	; 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 "OEMNSVCM:  User Canceled due to a error processing the Unattended Variables."
		set CommonStatus = STATUS_USERCANCEL
		goto setfailed
	endif

	goto end

;
;	this is the old update code
;
	Shell "" Install-NWLINK

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

	Shell "" Remove-Oldstyle-Bindings
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "OEMNSVCM.INF:  Remove-Oldstyle-Bindings ShellCode error "$($ShellCode)
		goto ShellCodeError
	else
		Ifstr(i) $($R0) != STATUS_SUCCESSFUL
			Debug-Output "OEMNSVCM.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 NWCMD
	;

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

	;
	; Hide the software driver for Novell Compatibility Mode
	;

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

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

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

	;
	; Get a count of NWCMD 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 NWCMDCardNumList                            = $($R9)
	Set NumberNWCMDAdapters                 = $($R10)

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

	set CalledFromUpdate = "YES"
	goto StartHardwareInstallation

ReturnToUpdate = +

	;
	;       Install various registry parameters
	;

	Debug-Output "OEMNSVCM.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 "OEMNSVCM:  User Canceled due to a error processing the Unattended Variables."
		set CommonStatus = STATUS_USERCANCEL
		goto setfailed
	endif

	goto end


abandon = +
	Debug-Output "OEMNSVCM.INF: abandon"
	ForListDo $(OEM_ABANDON_OPTIONS)
		Shell $(UtilityInf), RemoveHardwareComponent, $(Manufacturer), $(ProductSoftwareName), $($)
		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			Debug-Output "OEMNSVCM.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), $(ProductSoftwareName), FALSE
		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			Debug-Output "OEMNSVCM.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
		AddSectionFilesToCopyList Files-EXE       $(!STF_SRCDIR)redir $(!STF_WINDOWSSYSPATH)
	endif
	ifstr(i) $(!DoCopy) == "YES"
		CopyFilesInCopyList
	endif
	ifstr(i) $(!DoConfig) == "YES"
	endif
	Exit


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


;*************************************************************************
;
;               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 "OEMNSVCM.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 "OEMNSVCM.INF:  Can't get bindable value for NwlnkIpx"
		set status = STATUS_FAILED
		Goto IB_Return
	endif

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

	Debug-Output "OEMNSVCM.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 NWCMDDriver non non 100")
		endif
	EndForListDo

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

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

	;
	; Close keys
	;

	CloseRegKey $(RulesKey)

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 "OEMNSVCM.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 "OEMNSVCM.INF:  Can't get bindable value for NwlnkIpx"
		set status = STATUS_FAILED
		Goto RB_Return
	endif

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

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

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

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

	SetRegValue $(RulesKey) {$(ValueName), $(NoTitle), $(!REG_VT_MULTI_SZ), $(NewList)}
	Ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
		Debug-Ouput "OEMNSVCM.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 "OEMNSVCM.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 "OEMNSVCM.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 "OEMNSVCM.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 "OEMNSVCM.INF:  Can't open NwlnkIpx Disabled key"
		set Status = STATUS_FAILED
		Goto ROB_Return
	endif

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

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

	;
	; Set up bindings for Compatibility Mode 
	;

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

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

	Debug-Output "OEMNSVCM.INF:  OldList for Compatibility Mode bind is "$(OldList)

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

	Debug-Output "OEMNSVCM.INF:  NewList for Compatibility Mode bind is "$(NewList)

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

	;
	; Close keys
	;

	CloseRegKey $(RulesKey)

ROB_Return = +
	Return $(Status)

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

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

	set CommonStatus = STATUS_SUCCESSFUL

	OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_ServiceBase)"\NwLnkIpx" $(MAXIMUM_ALLOWED) KeyNWLINK
	ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
		Debug-Output "OEMNPRNW.INF:  Installing NWLINK"

		Set OldInstallMode = $(!NTN_InstallMode)
		Set !NTN_InstallMode = install
		Set OldSTF_SRCDIR_OVERRIDE = $(!STF_SRCDIR_OVERRIDE)
		set !STF_SRCDIR_OVERRIDE = ""

		Shell "oemnxpip.inf" InstallOption $(!STF_LANGUAGE) "NWLNKIPX" "" 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 "OEMNPRNW.INF: Install of NWLINK returned "$(CommonStatus)
			goto terminate
		Endif
	Else
		CloseRegKey $(KeyNWLINK)
	Endif


terminate = +
	Return $(CommonStatus)

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

	;
	;       Add the class factory GUID
	;
	set SoftwareNovell = $(!NTN_SoftwareBase)"\"$(Manufacturer)
	OpenRegKey $(!REG_H_LOCAL) "" $(SoftwareNovell) $(MAXIMUM_ALLOWED) KeySoftwareNovell
	ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
		Debug-Output "OEMNSVCM.INF: Error opening "$(SoftwareNovell)
	Else
		set NovellCLSID = "CLSID"
		OpenRegKey $(KeySoftwareNovell) "" $(NovellCLSID) $(MAXIMUM_ALLOWED) KeyNovellCLSID
		ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
			CreateRegKey $(KeySoftwareNovell) {$(NovellCLSID), $(NoTitle), GenericClass} "" $(MAXIMUM_ALLOWED) "" KeyNovellCLSID
			ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
				Debug-Output "OEMNSVCM.INF: Error creating Software\Novell\CLSID"
			Endif
		Endif
	Endif

	Ifstr(i) $(KeyNovellCLSID) != ""

			CreateRegKey $(KeyNovellCLSID) {"{9A19E5B5-3B30-11d1-84D3-00A0C9249033}", $(NoTitle), GenericClass} "" $(MAXIMUM_ALLOWED) "" KeyNewCLSID
			ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
				SetRegValue $(KeyNewCLSID) {"",$(NoTitle),$(!REG_VT_SZ),$(ProductSoftwareDescription)}
				CreateRegKey $(KeyNewCLSID) {"LocalServer32", $(NoTitle), GenericClass} "" $(MAXIMUM_ALLOWED) "" KeyNewSubCLSID
				ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
					SetRegValue $(KeyNewSubCLSID) {"",$(NoTitle),$(!REG_VT_SZ),$(ProductSoftwareName)}
				Endif
			Endif

		CloseRegKey $(KeyNovellCLSID)
	Endif

	Ifstr(i) $(KeySoftwareNovell) != ""
		CloseRegKey $(KeySoftwareNovell)
	Endif

	set SoftwareNovell = $(!NTN_SoftwareBase)"\"$(Manufacturer)
	OpenRegKey $(!REG_H_LOCAL) "" $(SoftwareNovell) $(MAXIMUM_ALLOWED) KeySoftwareNovell
	ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
		Debug-Output "OEMNSVCM.INF: Error opening "$(SoftwareNovell)
	Else
		set NovellNWCMD = "NWCMD"
		OpenRegKey $(KeySoftwareNovell) "" $(NovellNWCMD) $(MAXIMUM_ALLOWED) KeyNovellNWCMD
		ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
			Debug-Output "OEMNSVCM.INF: Error opening "$(NovellNWCMD)
			CreateRegKey $(KeySoftwareNovell) {$(NovellNWCMD), $(NoTitle), GenericClass} "" $(MAXIMUM_ALLOWED) "" KeyNovellNWCMD
			ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
				Debug-Output "OEMNSVCM.INF: Error creating Software\Novell\NWCMD"
			Endif
		Else
			Debug-Output "OEMNSVCM.INF: OPENED "$(NovellNWCMD)

		Endif        
	Endif               
			
	Ifstr(i) $(KeyNovellNWCMD) != ""
		CreateRegKey $(KeyNovellNWCMD) {"Address Resolution", $(NoTitle), GenericClass} "" $(MAXIMUM_ALLOWED) "" KeyAddrRes
		ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
			CreateRegKey $(KeyAddrRes) {"Configured", $(NoTitle), GenericClass} "" $(MAXIMUM_ALLOWED) "" KeyAddrResConfig
			ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
				SetRegValue $(KeyAddrResConfig) {"11",$(NoTitle),$(!REG_VT_SZ),"{AD518629-02B4-11d1-8FF9-00A0C925D248}"}
				SetRegValue $(KeyAddrResConfig) {"12",$(NoTitle),$(!REG_VT_SZ),"{CCBB7F70-2087-11d1-9004-00A0C925D248}"}
			Else
				Debug-Output "OEMNSVCM.INF: FAILED TO CREATE Configured")
			Endif
		Else
			Debug-Output "OEMNSVCM.INF: FAILED TO CREATE ADDR-RES"
		Endif
	Endif
	
	Ifstr(i) $(KeySoftwareNovell) != ""
		CloseRegKey $(KeySoftwareNovell)
	Endif
	
	Ifstr(i) $(KeyNovellNWCMD) != ""
		CloseRegKey $(KeyNovellNWCMD)
	Endif
	
	Ifstr(i) $(KeyAddrRes) != ""
		CloseRegKey $(KeyAddrRes)
	Endif
	
	Ifstr(i) $(KeyAddrResConfig) != ""
		CloseRegKey $(KeyAddrResConfig)
	Endif

	;
	; HKEY_LOCAL_MACHINE\Software\Novell\NWCMD\CurrentVersion
	;

	set TempKeyName = $(!NTN_SoftwareBase)"\"$(Manufacturer)"\NWCMD\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 "OEMNSVCM.INF:  Unable to update MajorInternalVersion value in "$(TempKeyName)
			endif

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

        CloseRegKey $(TempKey)
	endif

	ifstr(i) $(!NWWizard) != YES
		set ProtocolsListData = ""
		set TempKeyName = $(!NTN_SoftwareBase)"\"$(Manufacturer)"\Parameters"
		OpenRegKey $(!REG_H_LOCAL) "" $(TempKeyName) $(MAXIMUM_ALLOWED) TempKey
		ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
			SetRegValue $(TempKey) {"Protocols", $(NoTitle), $(!REG_VT_SZ), "IP"}
			SetRegValue $(TempKey) {"Remove IPX", $(NoTitle), $(!REG_VT_DWORD), 0}
			CloseRegKey $(TempKey)
		endif

		set DO_TCPIP = YES
		set DO_NWLINK = YES
		set InstallCompatMode = YES

		;
		; HKEY_LOCAL_MACHINE\Software\Novell\NetWareWorkstation\Policies\Network
		;

		set SoftwareNovell = $(!NTN_SoftwareBase)"\"$(Manufacturer)
		OpenRegKey $(!REG_H_LOCAL) "" $(SoftwareNovell) $(MAXIMUM_ALLOWED) KeySoftwareNovell
		ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
			Debug-Output "OEMNSVCM.INF: Error opening "$(SoftwareNovell)
		Else
			set SoftwareNovellNW = "NetWareWorkstation"
			OpenRegKey $(KeySoftwareNovell) "" $(SoftwareNovellNW) $(MAXIMUM_ALLOWED) KeySoftwareNovellNW
			ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
				Debug-Output "OEMNSVCM.INF: Error opening "$(SoftwareNovellNW)
			Else
				set NovellNWPolicies = "Policies"
				OpenRegKey $(KeySoftwareNovellNW) "" $(NovellNWPolicies) $(MAXIMUM_ALLOWED) KeyNovellNWPolicies
				ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
					CreateRegKey $(KeySoftwareNovellNW) {$(NovellNWPolicies), $(NoTitle), GenericClass} "" $(MAXIMUM_ALLOWED) "" KeyNovellNWPolicies
					ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
						Debug-Output "OEMNSVCM.INF: Error creating Software\Novell\NetWareWorkstation\Policies"
					Endif
				Endif
				ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
					set NetworkPolicies = "Network"
					OpenRegKey $(KeyNovellNWPolicies) "" $(NetworkPolicies) $(MAXIMUM_ALLOWED) KeyNetworkPolicies
					ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
						CreateRegKey $(KeyNovellNWPolicies) {$(NetworkPolicies), $(NoTitle), GenericClass} "" $(MAXIMUM_ALLOWED) "" KeyNetworkPolicies
						ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
							Debug-Output "OEMNSVCM.INF: Error creating Software\Novell\NetWareWorkstation\Policies\Network"
						Endif
					Endif
				Endif
			Endif
		Endif

		Ifstr(i) $(KeyNetworkPolicies) != ""

			ifstr(i) $(DO_TCPIP) == "YES"
				GetRegValue $(KeyNetworkPolicies) "Preferred" PreferredList
				ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
					SetRegValue $(KeyNetworkPolicies) {"Preferred",$(NoTitle),$(!REG_VT_DWORD),"2"}
				endif
			Endif

			OpenRegKey $(KeyNetworkPolicies) "" "Available" $(MAXIMUM_ALLOWED) KeyAvailable
			ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
				CreateRegKey $(KeyNetworkPolicies) {"Available", $(NoTitle), GenericClass} "" $(MAXIMUM_ALLOWED) "" KeyAvailable
			endif
			ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
				SetRegValue $(KeyAvailable) {"2",$(NoTitle),$(!REG_VT_SZ),"IP"}
				SetRegValue $(KeyAvailable) {"6",$(NoTitle),$(!REG_VT_SZ),"IPX"}

				CloseRegKey $(KeyAvailable)
			Endif

			OpenRegKey $(KeyNetworkPolicies) "" "Configured" $(MAXIMUM_ALLOWED) KeyConfigured
			ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
				CreateRegKey $(KeyNetworkPolicies) {"Configured", $(NoTitle), GenericClass} "" $(MAXIMUM_ALLOWED) "" KeyConfigured
			endif
			ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
				Debug-Output "OEMNSVCM.INF: Configured DO_TCPIP = "$(DO_TCPIP)
				ifstr(i) $(DO_TCPIP) == "YES"
					SetRegValue $(KeyConfigured) {"2",$(NoTitle),$(!REG_VT_SZ),"IP"}
				else
					DeleteRegValue $(KeyConfigured) "2"
				Endif
				Debug-Output "OEMNSVCM.INF: Configured DO_NWLINK = "$(DO_NWLINK)
				ifstr(i) $(DO_NWLINK) == "YES"
					SetRegValue $(KeyConfigured) {"6",$(NoTitle),$(!REG_VT_SZ),"IPX"}
				else
					DeleteRegValue $(KeyConfigured) "6"
				Endif
	
				CloseRegKey $(KeyConfigured)
			Endif
	
			OpenRegKey $(KeyNetworkPolicies) "" "IP" $(MAXIMUM_ALLOWED) KeyIP
			ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
				CreateRegKey $(KeyNetworkPolicies) {"IP", $(NoTitle), GenericClass} "" $(MAXIMUM_ALLOWED) "" KeyIP
			endif
			ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
				OpenRegKey $(KeyIP) "" "Address Resolution Providers" $(MAXIMUM_ALLOWED) KeyIPARP
				ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
					CreateRegKey $(KeyIP) {"Address Resolution Providers", $(NoTitle), GenericClass} "" $(MAXIMUM_ALLOWED) "" KeyIPARP
				endif
				ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
					OpenRegKey $(KeyIPARP) "" "Available" $(MAXIMUM_ALLOWED) KeyIPARPAvail
					ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
						CreateRegKey $(KeyIPARP) {"Available", $(NoTitle), GenericClass} "" $(MAXIMUM_ALLOWED) "" KeyIPARPAvail
					endif
					ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
						SetRegValue $(KeyIPARPAvail) {"2",$(NoTitle),$(!REG_VT_SZ),"{CCBB7F6F-2087-11d1-9004-00A0C925D248}"}
						SetRegValue $(KeyIPARPAvail) {"11",$(NoTitle),$(!REG_VT_SZ),"{AD518629-02B4-11d1-8FF9-00A0C925D248}"}
						SetRegValue $(KeyIPARPAvail) {"5",$(NoTitle),$(!REG_VT_SZ),"{A18C57F8-17DA-11d1-8FFF-00A0C925D248}"}
						SetRegValue $(KeyIPARPAvail) {"12",$(NoTitle),$(!REG_VT_SZ),"{CCBB7F70-2087-11d1-9004-00A0C925D248}"}
						SetRegValue $(KeyIPARPAvail) {"6",$(NoTitle),$(!REG_VT_SZ),"{FA85E061-FFBB-11d1-85E0-00A0C9249033}"}
	
						CloseRegKey $(KeyIPARPAvail)
					Endif
	
					OpenRegKey $(KeyIPARP) "" "Configured" $(MAXIMUM_ALLOWED) KeyIPARPConfig
					ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
						CreateRegKey $(KeyIPARP) {"Configured", $(NoTitle), GenericClass} "" $(MAXIMUM_ALLOWED) "" KeyIPARPConfig
					endif
					ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
						Debug-Output "OEMNSVCM.INF: IP Configured DO_TCPIP = "$(DO_TCPIP)
						ifstr(i) $(DO_TCPIP) == "YES"
							SetRegValue $(KeyIPARPConfig) {"2",$(NoTitle),$(!REG_VT_SZ),"{CCBB7F6F-2087-11d1-9004-00A0C925D248}"}
							SetRegValue $(KeyIPARPConfig) {"11",$(NoTitle),$(!REG_VT_SZ),"{AD518629-02B4-11d1-8FF9-00A0C925D248}"}
							SetRegValue $(KeyIPARPConfig) {"5",$(NoTitle),$(!REG_VT_SZ),"{A18C57F8-17DA-11d1-8FFF-00A0C925D248}"}
							SetRegValue $(KeyIPARPConfig) {"12",$(NoTitle),$(!REG_VT_SZ),"{CCBB7F70-2087-11d1-9004-00A0C925D248}"}
							SetRegValue $(KeyIPARPConfig) {"6",$(NoTitle),$(!REG_VT_SZ),"{FA85E061-FFBB-11d1-85E0-00A0C9249033}"}
						else
							DeleteRegValue $(KeyIPARPConfig) "2"
							DeleteRegValue $(KeyIPARPConfig) "11"
							DeleteRegValue $(KeyIPARPConfig) "5"
							DeleteRegValue $(KeyIPARPConfig) "12"
							DeleteRegValue $(KeyIPARPConfig) "6"
						Endif

						CloseRegKey $(KeyIPARPConfig)
					Endif
	
					CloseRegKey $(KeyIPARP)
				Endif

				CloseRegKey $(KeyIP)
			Endif

			OpenRegKey $(KeyNetworkPolicies) "" "IPX" $(MAXIMUM_ALLOWED) KeyIPX
			ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
				CreateRegKey $(KeyNetworkPolicies) {"IPX", $(NoTitle), GenericClass} "" $(MAXIMUM_ALLOWED) "" KeyIPX
			endif
			ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
				OpenRegKey $(KeyIPX) "" "Address Resolution Providers" $(MAXIMUM_ALLOWED) KeyIPXARP
				ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
					CreateRegKey $(KeyIPX) {"Address Resolution Providers", $(NoTitle), GenericClass} "" $(MAXIMUM_ALLOWED) "" KeyIPXARP
				endif
				ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
					OpenRegKey $(KeyIPXARP) "" "Available" $(MAXIMUM_ALLOWED) KeyIPXARPAvail
					ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
						CreateRegKey $(KeyIPXARP) {"Available", $(NoTitle), GenericClass} "" $(MAXIMUM_ALLOWED) "" KeyIPXARPAvail
					endif
					ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
						SetRegValue $(KeyIPXARPAvail) {"2",$(NoTitle),$(!REG_VT_SZ),"{CCBB7F6F-2087-11d1-9004-00A0C925D248}"}
						SetRegValue $(KeyIPXARPAvail) {"4",$(NoTitle),$(!REG_VT_SZ),"{A18C57F7-17DA-11d1-8FFF-00A0C925D248}"}
						SetRegValue $(KeyIPXARPAvail) {"1",$(NoTitle),$(!REG_VT_SZ),"{2399601D-BCBA-11d0-8FD7-00A0C925D248}"}

						CloseRegKey $(KeyIPXARPAvail)
					Endif
	
					OpenRegKey $(KeyIPXARP) "" "Configured" $(MAXIMUM_ALLOWED) KeyIPXARPConfig
					ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
						CreateRegKey $(KeyIPXARP) {"Configured", $(NoTitle), GenericClass} "" $(MAXIMUM_ALLOWED) "" KeyIPXARPConfig
					endif
					ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
						Debug-Output "OEMNSVCM.INF: IPX Configured DO_NWLINK = "$(DO_NWLINK)
						ifstr(i) $(DO_NWLINK) == "YES"
							SetRegValue $(KeyIPXARPConfig) {"2",$(NoTitle),$(!REG_VT_SZ),"{CCBB7F6F-2087-11d1-9004-00A0C925D248}"}
							SetRegValue $(KeyIPXARPConfig) {"4",$(NoTitle),$(!REG_VT_SZ),"{A18C57F7-17DA-11d1-8FFF-00A0C925D248}"}
							SetRegValue $(KeyIPXARPConfig) {"1",$(NoTitle),$(!REG_VT_SZ),"{2399601D-BCBA-11d0-8FD7-00A0C925D248}"}
						else
							DeleteRegValue $(KeyIPXARPConfig) "2"
							DeleteRegValue $(KeyIPXARPConfig) "4"
							DeleteRegValue $(KeyIPXARPConfig) "1"
						Endif

						CloseRegKey $(KeyIPXARPConfig)
					Endif
	
					OpenRegKey $(KeyIPXARP) "" "LimitSAP" $(MAXIMUM_ALLOWED) KeyLimitSAP
					ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
						CreateRegKey $(KeyIPXARP) {"LimitSAP", $(NoTitle), GenericClass} "" $(MAXIMUM_ALLOWED) "" KeyLimitSAP
					endif
					ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
						DeleteRegValue $(KeyLimitSAP) "Level"

						ifstr(i) $(DO_NWLINK) == "YES"
							ifstr(i) $(DO_TCPIP) == "YES"
								ifstr(i) $(!InstallCompatMode) != "YES"
									SetRegValue $(KeyLimitSAP) {"Level",$(NoTitle),$(!REG_VT_DWORD),0}					
								Endif
							Endif
						Endif
	
						CloseRegKey $(KeyLimitSAP)
					Endif
	
					CloseRegKey $(KeyIPXARP)
				Endif
	
				CloseRegKey $(KeyIPX)
			Endif
	
			CloseRegKey $(KeyNetworkPolicies)
		Endif	
	
		Ifstr(i) $(KeyNovellNWPolicies) != ""
			CloseRegKey $(KeyNovellNWPolicies)
		Endif

		;
		;	Set bindings based on the protocols
		;
		set NetRuleNWFSSoftwareBindable	= {}

		ifstr(i) $(DO_NWLINK) != "NO"		; if doing IPX/SPX then bind to it
			set NetRuleNWFSSoftwareBindable	= >($(NetRuleNWFSSoftwareBindable),"nwFileSys ipxTransport non non 100")
		endif

		ifstr(i) $(DO_TCPIP) != "NO"		; if doing TCP/IP then bind to it
			set NetRuleNWFSSoftwareBindable	= >($(NetRuleNWFSSoftwareBindable),"nwFileSys tcpipTransport non non 100")
		endif


		Debug-Output "****OEMNSVCM.INF:  NetRuleNWFSSoftwareBindable is: "$(NetRuleNWFSSoftwareBindable)


		Set TempKeyName = $(!NTN_SoftwareBase)"\"$(Manufacturer)"\NetWareWorkstation\CurrentVersion\NetRules"
		OpenRegKey $(!REG_H_LOCAL) "" $(TempKeyName) $(MAXIMUM_ALLOWED) TempKey
		ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
			;
			; Fix up the bindable value so we will show up in the bindings
			;

			SetRegValue $(TempKey) {"Bindable", $(NoTitle), $(!REG_VT_MULTI_SZ), $(NetRuleNWFSSoftwareBindable)}
			ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
				Debug-Output "OEMNSVCM.INF:  Failed to update Bindable"
			endif
		
			CloseRegKey $(TempKey)
		else
			Debug-Output "OEMNSVCM.INF:  Failed to open key "$(TempKeyName)
		endif

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

	;	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) != ""
		LoadLibrary $(LoadDisk3Text) $(!STF_WINDOWSSYSPATH)"\nwsetup.dll" NwLibHandle
		;  LoadLibrary $(LoadDisk3Text) $(!STF_WINDOWSSYSPATH)"\"$(NwSetupDll) NwLibHandle
		SetHelpFile $(!STF_WINDOWSSYSPATH)"\nls\"$(!P:NLSDirName)"\setupnw.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]
	NWCMD   = "Novell IPX Compatibility Mode"

[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 Compatibility Mode Setup"
	
	;
	; Software
	;
	
	ProductSoftwareDescription		= "Novell Compatibility Mode Driver"
	ProductNWCMDHDisplayName 		= "Novell IPX Compatibility Helper"
	
	;
	; Hardware
	;
	
	ProductHardwareDescription = "This virtual adapter allows IPX applications "+
				     "to communicate over an IP network."


[InstallOptionENG]
	ErrorMessageTitle = "IPX Compatibility Mode Error"

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

	ShellCodeErrorTitle = "Error:  Novell IPX Compatibility Mode  Adapter"

	ShellCodeErrorText = "Shell Code Error"

	LoadDisk3Text = "Please load the Novell Client for Windows NT "+
		"disk 3 into drive "
	
	IPOnlyMessageText = "You currently have IPX Dial-Up Networking installed.  It is "+
		"not compatible with the IP-only version of the Novell Client.  You must disable "+
		"IPX Dial-Up Networking before installing the IP-only version of the Novell Client."

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


[Source Media Descriptions]
	1       = "NetWare for Windows NT Setup Disk",     TAGFILE = NWCMD.SYS

[Files-Inf]
	1,      oemnsvcm.inf, SIZE=50000,     DECOMPRESS

[Files-NWCMD]
	1,      nwcmd.sys,    SIZE=50000,     DECOMPRESS
	1,      nwcmd2.sys,   SIZE=50000,     DECOMPRESS

[Files-EXE]
	1,      cmdinfo.exe,  SIZE=50000,     DECOMPRESS

