;***********************************************************************
;
; ODINSUP.INF
;
;               Novell Ndis to ODI network logical adapter SETUP INF file.
;
;***********************************************************************

;
; The following is the version info for Novell
;

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

[Identification]
	OptionType = NetAdapter

[PlatformsSupported]
	ISA
	MCA
	EISA
	PCI
	"Jazz-Internal Bus"

[Options]
	ODINSUP

[IRQChoices]
	IRQ_1   = "2",2
	IRQ_2   = "3",3
	IRQ_3   = "4",4
	IRQ_4   = "5",5

[IOBaseAddrChoices]
	IOBase_1        = "0x300",768
	IOBase_2        = "0x320",800
	IOBase_3        = "0x340",832
	IOBase_4        = "0x360",864

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

	ODINetWareEventFile     = "%SystemRoot%\System32\nls\"$(NLSDirName)"\odintmsg.dll"
	IoLogMsgDLL                             = "%SystemRoot%\System32\IoLogMsg.dll"

	ProductSoftwareName                     = "ODINSUP"
	ProductSoftwareImagePath        = "\SystemRoot\system32\drivers\odinsup.sys"
	NetRuleSoftwareType                     = "odinsupSys ndisDriver odinsupDriver"
	NetRuleSoftwareUse                      = $(SoftwareType)
	NetRuleSoftwareBindForm         = """OdinsupSys"" yes no container"
	NetRuleSoftwareClass                    = {"odinsupDriver basic"}
	NetRuleSoftwareBindable         = {"odinsupDriver odinsupAdapter non exclusive 100"}

	ProductHardwareName                             = "ODINSUP"
	NetRuleHardwareType                             = "odinsup odinsupAdapter"
	NetRuleHardwareBindForm                 = " yes yes container"
	NetRuleHardwareClass                            = {"odinsupAdapter basic"}

	ProductKeyName  = $(!NTN_SoftwareBase)"\"$(Manufacturer)"\"$(ProductSoftwareName)"\CurrentVersion"
	ParamKeyName    = $(!NTN_ServiceBase)"\"$(ProductHardwareName)"\Parameters"

[GeneralConstants]
	from                            = ""
	to                                      = ""
	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
	ProductSoftwareDescription                              = "Novell NetWare ODI Support for NDIS Protocols Driver"
	ProductHardwareODINSUPDescription       = "Novell NetWare ODI Support for NDIS Protocols Adapter"
	
	IRQList                         = ^(IRQChoices, 1)
	IRQValues                       = ^(IRQChoices, 2)
	IOBaseAddrList          = ^(IOBaseAddrChoices, 1)
	IOBaseAddrValues        = ^(IOBaseAddrChoices, 2)

	Manufacturer                    = "Novell"
	ProductMajorVersion     = 4
	ProductMinorVersion     = 00
	ProductVersion                  = $(ProductMajorVersion)"."$(ProductMinorVersion)

[date]
	Now = {} ? $(!LIBHANDLE) GetSystemDate


;------------------------------------------------------------------------------
; 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)
		ifstr(i) $($1) == ""
			goto returnoptions
		endif
		set PlatformList        = ^(PlatformsSupported, 1)
		Ifcontains(i) $($1) in $(PlatformList)
			goto returnoptions
		else
			set Status      = STATUS_NOTSUPPORTED
			goto finish_ReturnOptions
		endif
	else
		set Status      = STATUS_NOLANGUAGE
		goto finish_ReturnOptions
	endif

	;
	; form a list of all the options and another of the text representing
	;

returnoptions = +
	set OptionList                  = ^(Options, 1)
	set OptionTextList      = ^(OptionsText$($0), 1)
	set Status                              = STATUS_SUCCESSFUL

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



;------------------------------------------------------------------------------
; 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 Status              = STATUS_FAILED
	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 = +

	;
	; Tell the common code that we're being called from "main install"
	;

	ifstr(i) $(!NTN_Origination) != "NCPA"
		set !NTN_Origination = "install"
	endif

	;
	; Call the CommonSection
	;

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


[NcpaInvocation]
	set Option                      = $(!NTN_InfOption)
	set !SrcDir                     = $(!STF_SRCDIR)
	Ifstr(i) $(!NTN_InstallMode) == install
		set !AddCopy    = YES
		set !DoCopy             = YES
		set !DoConfig   = YES
	Else
		set !AddCopy    = NO
		set !DoCopy             = NO
		set !DoConfig   = NO
	Endif
	shell "" CommonSection $(Option)
	set Status = $($R0)
	Return $(Status)


[CommonSection]
	StartWait
	set Option              = $($0)
	set-subst LF    = "\n"
	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)
		endif
		CloseRegKey $(KeyNovellParameters)
	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 "ODINSUP.INF: Windows NT current version is "$(VersionListData)
			Debug-OutPut "ODINSUP.INF: Windows NT Major version is "$(NTMajorVersion)
			Debug-OutPut "ODINSUP.INF: Windows NT Minor version is "$(NTMinorVersion)
		else
			Debug-Output "ODINSUP.INF:  Error getting NT version"
		endif
		CloseRegKey $(CurrentVersionKey)
	else
		Debug-Output "ODINSUP.INF:  Error opening "$(CurrentVersion)
	endif

	read-syms FileConstants
	read-syms DialogConstants$(!STF_LANGUAGE)
	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
Begin = +
	Debug-Output "ODINSUP.INF: Begin Install Mode = "$(!NTN_InstallMode)
	Ifstr(i) $(!NTN_InstallMode) == deinstall
		set StartLabel = removeadapter
	else-Ifstr(i) $(!NTN_InstallMode) == Update
		set StartLabel = UpgradeSoftware
	else-Ifstr(i) $(!NTN_InstallMode) == bind
		set StartLabel = bindingadapter
	else-Ifstr(i) $(!NTN_InstallMode) == configure
		set StartLabel = configureadapter
		Ifstr(i) $(ProductKeyName) == $(!NTN_RegBase)
			Debug-Output "ODINSUP.INF: Cannot configure the Novell ODINSUP driver software."
			Shell $(UtilityInf),RegistryErrorString,CANNOT_CONFIGURE_SOFTWARE
			ifint $($ShellCode) != $(!SHELL_CODE_OK)
				Debug-Output "ODINSUP.INF: ShellCode error: cannot 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 IRQValue = *($(IRQList), 2)
	set IOBaseAddrValue = *($(IOBaseAddrList), 1)
	set from = $(fatal)
	set to = $(fatal)
	goto $(StartLabel)
installadapter = +
	Debug-Output "ODINSUP.INF: installadapter "$(ProductKeyName)
	OpenRegKey $(!REG_H_LOCAL) "" $(ProductKeyName) $(MAXIMUM_ALLOWED) KeyProduct
	Ifstr $(KeyProduct) != $(KeyNull)
		CloseRegKey $(KeyProduct)
		ifstr(i) $(!NTN_RegBase) == $(ProductKeyName)
			Shell $(UtilityInf), VerExistedDlg, $(ProductSoftwareTitle),+
			$(ProductVersion)
			ifint $($ShellCode) != $(!SHELL_CODE_OK)
				Debug-Output $(!STF_ONTEXTINFNAME)": ShellCode error: cannot get an error string."
				goto ShellCodeError
			endif
			goto end
		else
			Shell $(UtilityInf), CardExistedDlg
			ifint $($ShellCode) != $(!SHELL_CODE_OK)
				Debug-Output "ODINSUP.INF: ShellCode error: cannot get an error string."
				goto ShellCodeError
			endif
			ifstr(i) $($R1) != "OK"
				goto end
			endif
			set OldVersionExisted = $(TRUE)
		endif
	endif
	goto adapteroptions
configureadapter = +
	Debug-Output "ODINSUP.INF: configureadapter"
	Ifstr $(KeyProduct) == $(KeyNull)
		OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_RegBase) $(MAXIMUM_ALLOWED) KeyProduct
		Ifstr $(KeyProduct) == $(KeyNull)
			set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
			Debug-Output "ODINSUP.INF: Cannot find component product key "$(!NTN_RegBase)
			goto fatalregistry
		Endif
	Endif
	Debug-Output "ODINSUP.INF: Shelling to FindService"
	Shell $(UtilityInf) FindService, $(KeyProduct)
	Ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "ODINSUP.INF: FindService shell failure "$($ShellCode)
		Goto ShellCodeError
	Endif
	Ifstr(i) $($R0) != NO_ERROR
		Debug-Output "ODINSUP.INF: FindService Shell error: "$($R0)
		Goto fatalregistry
	endif
	set KeyParameters = $($R2)
	CloseRegKey $($R1)
	Ifstr $(KeyParameters) == $(KeyNull)
		set RegistryErrorIndex = CANNOT_FIND_COMPONENT_SERVICE
		Debug-Output "ODINSUP.INF: Cannot find component service"
		goto fatalregistry
	endif
	set OldVersionExisted = $(TRUE)
	set ValueName = ""
	set ValueData = ""
	set ValueStr    = ""
	set ValueList = {}
	Set OdiCurBindCardName = ""

	EnumRegValue $(KeyParameters) ValueList

	ForListDo $(ValueList)
		set ValueItem = $($)
		set ValueName = *($(ValueItem),1)
		set ValueData = *($(ValueItem),4)
		Ifstr(i) $(ValueName) == "InterruptNumber"
			set IRQValueIndex = $(ValueData)
		else-ifstr(i) $(ValueName) == "IoBaseAddress"
			set IOBaseAddrIndex = $(ValueData)
		else-ifstr(i) $(ValueName) == "Bind"
			Set OdiCurBindCardName = $(ValueData)
			Debug-Output "ODINSUP is Currently bound to "$(OdiCurBindCardName)
		endif
	EndForListDo
	set IRQValue = *($(IRQList), ~($(IRQValues),$(IRQValueIndex)))
	ifstr(i) $(IRQValue) == ""
		set IRQValue = *($(IRQList), 2)
	endif
	set IOBaseAddrValue = *($(IOBaseAddrList), +
		~($(IOBaseAddrValues),$(IOBaseAddrIndex)))
	ifstr(i) $(IOBaseAddrValue) == ""
		set IOBaseAddrValue = *($(IOBaseAddrList), 1)
	endif
	goto adapteroptions
adapteroptions = +
	Debug-Output "ODINSUP.INF: adapteroptions, NTN_RegBase = "$(!NTN_RegBase)

	set from = adapteroptions
	read-syms FileDependentDlg$(!STF_LANGUAGE)

	;
	; In this block we will determine which installed ODI adapter to bind
	; ODINSUP too.  If multiple ODI adapters are install the user will be
	; allowed to select from a dialog box which adapter to bind too.
	;

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

	OpenRegKey $(!REG_H_LOCAL) "" $(NetworkCardsKeyName) $(MAXIMUM_ALLOWED) NetCardsKey

	Ifstr(i) $(NetCardsKey) == ""
		Debug-Output "Can't Open Registry key "$(NetworkCardsKeyName)
		set CommonStatus = STATUS_USERCANCEL
	Else

		;
		; Get a list of all installed network cards
		;

		EnumRegKey $(NetCardsKey) NetCardsList

		ForListDo $(NetCardsList)
			Set CardNumber = *($($), 1)
			Ifstr(i) $(CardNumber) != ""
				Ifstr(i) $(FirstTime) == 1
					set CardList = $(CardNumber)
					Set FirstTime = 0
				Else
					set CardList = >($(CardList), $(CardNumber))
				Endif
			Endif
		EndForListDo

		Set FirstTime = 0

		;
		; Run though the list of installed adapters and create a list of installed
		; ODI Adapters.
		;

		ForListDo $(CardList)
			Set Card = $($)
	
			OpenRegKey $(NetCardsKey) "" $(Card) $(MAXIMUM_ALLOWED) CardKey
			Ifstr(i) $(CardKey) == ""
				Debug-Output "ODINSUP.INF: Can't open card "$(Card)
			Else
				GetRegValue $(CardKey) "OdiAdapter" OdiValueList
				Ifint $(RegLastError) == $(!REG_ERROR_SUCCESS)
					set OdiAdapter = *($(OdiValueList), 4)
					Ifstr(i) $(OdiAdapter) == "1"
						GetRegValue $(CardKey) "Title" OdiTitleValues
						Set OdiTitle = *($(OdiTitleValues), 4)
						GetRegValue $(CardKey) "ProductName" OdiNameValues
						Set OdiName = *($(OdiNameValues), 4)
						Ifstr(i) $(FirstTime) == 1
							Set OdiOnlyList = $(Card)
							Set OdiTitleList = $(OdiTitle)
							Set OdiCardList = $(OdiName)
							set FirstTime = 0
						Else
							set OdiOnlyList = >($(OdiOnlyList), $(Card))
							Set OdiTitleList = >($(OdiTitleList), $(OdiTitle))
							Set OdiCardList = >($(OdiCardList), $(OdiName))
							Set FirstTime = 2
						Endif
					Endif
				Endif
	
				CloseRegKey $(CardKey)
			Endif
		EndForListDo
	
		Debug-Output "OdiCardList = "$(OdiCardList)
		CloseRegKey $(NetCardsKey)
	Endif

	;
	; If there is only one ODI Adapter installed bind to that adapter otherwise
	; allow the user to select.
	;

	Ifstr(i) $(FirstTime) == 1
		Debug-Output "ODINSUP.INF NO ODI Adapters installed."
		set DlgType                     = "MessageBox"
		set STF_MB_TITLE        = $(NoODIAdapterInstalledTitle)
		set STF_MB_TEXT = $(NoODIAdapterInstalledText)
		set STF_MB_TYPE = 1
		set STF_MB_ICON = 3
		set STF_MB_DEF          = 1
		ui start "NoODIAdapter"
	goto end
	Endif

	Ifstr(i) $(FirstTime) == 0
		Set OdiBindToAdapter = ""
		Debug-Output "ODINSUP.INF: Only ONE ODI Adapter Installed "$(OdiBindToAdapter)
	Else

		;
		; allow the user the select the adapter to bind too.
		;

		Debug-Output "ODINSUP.INF More than one ODI Adapter "$(OdiCardList)
		LoadLibrary $(LoadDisk2Text) $(!STF_WINDOWSSYSPATH)"\nls\"$(NLSDirName)"\nwsetupr.dll" NwLibHandle

		Ifstr(i) $(OdiCurBindCardName) != ""
			Debug-Output "OdiCurBindCardName = "$(OdiCurBindCardName)
			Set DefaultOdiTitle = *($(OdiTitleList), ~($(OdiCardList), $(OdiCurBindCardName)))
		Endif

		Ifstr(i) $(DefaultOdiTitle) == ""
			Set DefaultOdiTitle = *($(OdiTitleList), 1)
		Endif

		Debug-Output "DefaultOdiTitle = "$(DefaultOdiTitle)
		SetHelpFile $(!STF_WINDOWSSYSPATH)"\nls\"$(NLSDirName)"\setupnw.hlp" $(!MinimumID) $(!MaximumID)

		read-syms OdinsupDlg$(!STF_LANGUAGE)
		ui start "ODINSUP" $(NwLibHandle)
		ui pop 1
	
		ifstr(i) $(DLGEVENT) == "BACK"
			set AdapterSelected = ""
		else
			Set AdapterSelected = *($(DefaultOdiTitle), 1)
		endif

		Debug-Output "AdapterSelected = "$(AdapterSelected)

		Ifstr(i) $(AdapterSelected) == ""
			Debug-Output "ODINSUP.INF: Cancel Selected"
			goto end
		Else
			Set OdiBindToAdapter = *($(OdiCardList), ~($(OdiTitleList), $(AdapterSelected)))
		Endif

		FreeLibrary $(NwLibHandle)
	Endif

	set IRQValueIndex = "3"
	set IOBaseAddrIndex = "300"
	goto nextstep

nextstep = +
	ifint $(OldVersionExisted) == $(TRUE)
		ifstr(i) $(!NTN_InstallMode) == configure
			goto writeparameters
		endif
	endif
	StartWait

installproduct = +
	ifint $(OldVersionExisted) == $(FALSE)
		Debug-Output "ODINSUP.INF: First Time Install"
		Shell $(UtilityInf), AddSoftwareComponent +
				$(Manufacturer), +
			$(ProductSoftwareName), +
			$(ProductSoftwareName), +
			$(ProductSoftwareTitle), +
			$(STF_CONTEXTINFNAME), +
			$(ProductSoftwareImagePath), +
			"kerneldisable", +
;                       "kernelautostart", +
			"NDIS", +
			{"+ODI Drivers"}, +
			"", +
			$(ODINetWareEventFile)

		Set OEM_ABANDON_SOFTWARE = TRUE
		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			Debug-Output "ODINSUP.INF: AddSoftwareComponent ShellCode error "$($ShellCode)
			goto ShellCodeError
		endif
		set RegistryErrorIndex = $($R0)
		set KeyProduct          = $($R1)
		Set SoftNetRulesKey = $($R2)
		Set KeyLinkage  = $($R5)
		SetRegValue $(KeyLinkage) {"OtherDependencies",$(NoTitle),$(!REG_VT_MULTI_SZ),{"+ODI Drivers"}}
		CloseRegKey $($R3)
		CloseRegKey $($R4)
		CloseRegKey $($R5)
		Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
			EndWait
			Debug-Output "ODINSUP.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)},+
					{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 "ODINSUP.INF: AddValueList ShellCode error "$($ShellCode)
			goto ShellCodeError
		endif
		set RegistryErrorIndex = $($R0)
		Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
			EndWait
			Debug-Output "ODINSUP.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 "ODINSUP.INF: AddValueList ShellCode error "$($ShellCode)
			goto ShellCodeError
		endif
		set RegistryErrorIndex = $($R0)
		CloseRegKey $(KeyProduct)
		CloseRegKey $(SoftNetRulesKey)
		Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
			EndWait
			Debug-Output "ODINSUP.INF: AddValueList Registry error "$(RegistryErrorIndex)
			goto fatalregistry
		endif
	endif

	; add ODINSUP at board two or later
	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 "ODINSUP.INF: AddHardwareComponent Shell error "$($ShellCode)
		goto ShellCodeError
	endif
	set RegistryErrorIndex = $($R0)
	Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
		EndWait
		Debug-Output "ODINSUP.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),1},+
				{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 "ODINSUP.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 "ODINSUP.INF: AddValueList ShellCode error "$($ShellCode)
		goto ShellCodeError
	endif
	set RegistryErrorIndex = $($R0)
	Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
		EndWait
		Debug-Output "ODINSUP.INF: AddValueList Registry error "$(RegistryErrorIndex)
		CloseRegKey $(KeyParameters)
		CloseRegKey $(KeyAdapterRules)
		goto fatalregistry
	endif

	CloseRegKey $(KeyAdapterRules)
	goto writeparameters

writeparameters = +
	Shell $(UtilityInf), GetBusTypeNum
	set BusTypeNum = $($R1)
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "OEMNADNX.INF: GetBusTypeNum ShellCode error "$($ShellCode)
		goto ShellCodeError
	endif

	set IRQValue = *($(IRQValues), ~($(IRQList),$(IRQValueIndex)))
	set IOBaseAddrValue = *($(IOBaseAddrValues), +
	 ~($(IOBaseAddrList),$(IOBaseAddrIndex)))
;
; BUG, BUG Need to get OdinsupBindName from the registry, if more than one
; board is in the registry need to do a dialog box and allow the user to
; select the adapter.
;
; For now use the last adapter found that's not a Token Ring adapter since
; Odinsup does not support Token Ring at this time.
;

;       set OdiModulesName = $(!NTN_ServiceBase)"\OdiLoad\ODI_Modules"
;       OpenRegKey $(!REG_H_LOCAL) "" $(OdiModulesName) $(MAXIMUM_ALLOWED) KeyOdiModules
;       Ifstr(i) $(KeyOdiModules) == ""
;               goto fatalregistry
;       Endif
;       EnumRegKey $(KeyOdiModules) CardList
;
;       CloseRegKey $(KeyOdiModules)
;
;       set OdinsupBindName = $(Odi"ne2000"
;
;       set FoundEtherCard = 0
;
;       ForListDo $(CardList)
;               set CardName = *($($),1)
;       Split-String $(CardName) " " CardNameParts
;       set CardBaseName = *($(CardNameParts),1)
;       Ifstr(i) CardBaseName != "Token"
;               set FoundEtherCard = 1
;               set OdinsupBindName = $(CardBaseName)
;               Debug-Output "ODINSUP.INF: Bind to adapter "$(CardBaseName)
;       Endif
;       EndForListDo
;
;       Ifint $(FoundEtherCard) == 0
;               Debug-Output "ODINSUP.INF: No ethernet adapters found"
;       Debug-Output "ODINSUP.INF: Odinsup will NOT work on Token Ring"
;       Endif

	ifstr(i) $(OdiBindToAdapter) == ""
		set NewValueList = {{BusType,$(NoTitle),$(!REG_VT_DWORD),$(BusTypeNum)},+
					{MediaType,$(NoTitle),$(!REG_VT_DWORD),1},+
					{BoardInstance,$(NoTitle),$(!REG_VT_DWORD),1} }
	Else
		set NewValueList = {{BusType,$(NoTitle),$(!REG_VT_DWORD),$(BusTypeNum)},+
					{MediaType,$(NoTitle),$(!REG_VT_DWORD),1},+
					{Bind,$(NoTitle),$(!REG_VT_SZ),$(OdiBindToAdapter)},+
					{BoardInstance,$(NoTitle),$(!REG_VT_DWORD),1} }
	Endif

	shell $(UtilityInf), AddValueList, $(KeyParameters), $(NewValueList)
	CloseRegKey $(KeyParameters)
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "ODINSUP.INF: AddValueList ShellCode error "$($ShellCode)
		goto ShellCodeError
	endif
	set RegistryErrorIndex = $($R0)
	Ifstr(i) $(RegistryErrorIndex) != NO_ERROR
		Debug-Output "ODINSUP.INF: AddValueList Registry error "$(RegistryErrorIndex)
		goto fatalregistry
	endif
	EndWait
	Set DriverToLoad = $(ProductSoftwareName)
	goto successful

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

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

UpgradeSoftware = +
	Debug-Output "ODINSUP.INF: UpgradeSoftware"
	ifstr(i) $(ProductKeyName) == $(!NTN_RegBase)
		OpenRegKey $(!REG_H_LOCAL) "" $(ProductKeyName) $(MAXIMUM_ALLOWED) KeyProduct
		Ifstr $(KeyProduct) != $(KeyNull)
			GetRegValue $(KeyProduct),"MajorVersion", VersionInfo
			set Version = *($(VersionInfo), 4)
			Split-String $(!NTN_Infname), "\", FilenameList
			QueryListSize ListSize $(FilenameList)
			set !UG_Filename = *($(FilenameList), $(ListSize))
			install "Install-Update"
			ifstr(i) $(STF_INSTALL_OUTCOME) != STF_SUCCESS
				goto fatal
			endif
			SetRegValue $(KeyProduct) {MajorVersion,$(NoTitle),$(!REG_VT_SZ),$(ProductMajorVersion)}
			SetRegValue $(KeyProduct) {MinorVersion,$(NoTitle),$(!REG_VT_SZ),$(ProductMinorVersion)}
			ifint $(Version) != $(ProductVersion)
			endif
			CloseRegKey $(KeyProduct)
		else
			goto fatalregistry
		endif
	else
		OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_RegBase) +
			$(MAXIMUM_ALLOWED) NetworkCardKey
		Ifstr(i) $(NetworkCardKey) != $(KeyNull)
			GetRegValue $(NetworkCardKey),"ServiceName", ServiceNameInfo
			set ServiceName = *($(ServiceNameInfo), 4)
			OpenRegKey $(NetworkCardKey) "" "NetRules" +
				$(MAXIMUM_ALLOWED) NetRuleKey
			Ifstr(i) $(NetRuleKey) == $(KeyNull)
				goto fatalregistry
			endif
			CloseRegKey $(NetRules)
			CloseRegKey $(NetworkCardKey)
		else
			goto fatalregistry
		endif
		OpenRegKey $(!REG_H_LOCAL) "" +
			$(!NTN_ServiceBase)"\"$(ServiceName) +
			$(MAXIMUM_ALLOWED) ServiceKey
		Ifstr(i) $(ServiceKey) != $(KeyNull)
			CloseRegKey $(ServiceKey)
		else
			goto fatalregistry
		endif
	endif
	goto end

successful = +
	Debug-Output "ODINSUP.INF: Successful; installing [InstallOption], DoCopy = "$(!DoCopy)
	goto installstep1

installstep1 = +
	goto end

abandon = +
	Debug-Output "ODINSUP.INF: abandon"
	ForListDo $(OEM_ABANDON_OPTIONS)
		Shell $(UtilityInf), RemoveHardwareComponent, $(Manufacturer), +
			$(ProductSoftwareName), $($)    
		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			Debug-Output "ODINSUP.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 "ODINSUP.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 = +
	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 "ShellCodeError"
	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 "ODINSUP.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


;-----------------------------------------------------------------------
; 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]
	ODINSUP  = "Novell NetWare ODI Support for NDIS Protocols Adapter (ODINSUP)"

[OdinsupDlgENG]
	IDH_NETWARENDISODI      =       907
	Help                                            = "&Help"
	OK                                                      = "OK"
	Continue                                        = "Continue"
	Cancel                                  = "Cancel"
	Advanced                                = "&Advanced"
	DlgType                                 = "RadioCombination"
	DlgTemplate                     = "ONELIST"
	Caption                                 = "NetWare NDIS over ODI (ODINSUP) Setup"
	Label1                                  = "Installed ODI Adapters"
	EditTextIn                              = ""
	EditTextLim                             = ""
	CBOptionsGreyed         = {}
	HelpContext                             = $(IDH_NETWARENDISODI)
	ComboListItemsIn                = { OdiTitleList }
	ComboListItemsOut               = { DefaultOdiTitle }
	NotifyFields                    = { "NO" }

[FileConstantsENG]
	ProductSoftwareTitle                    = "Novell NetWare ODI Support for NDIS Protocols Driver"

	ProductHardwareODINSUPTitle     = "Novell NetWare ODI Support for NDIS Protocols Adapter"

	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:"

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

[FileDependentDlgENG]
	DlgType                         = "RadioCombination"
	DlgTemplate                     = "ONELIST"
	Caption                         = $(FunctionTitle)
	DlgText                         = "Please select values for the following fields:"
	Label1                          = "&IRQ Level:"
	Label2                          = "I/O &Port Base Addr:"
	Combo1List                      = $(IRQList)
	Combo1Out                       = $(IRQValue)
	Combo2List                      = $(IOBaseAddrList)
	Combo2Out                       = $(IOBaseAddrValue)
	ComboListItemsIn        = {Combo1List, Combo2List}
	ComboListItemsOut       = {Combo1Out, Combo2Out}
	EditTextIn                      = ""
	EditTextLim                     = ""
	CBOptionsGreyed = {}
	NotifyFields            = {NO, NO}
	HelpContext                     = $(!IDH_DB_ODINSUP_INS)


;----------InstallOptionENG-------------------------------------------------
;
; InstallOptionENG:
;
;     This section has all of the strings that are displayed on the screen.
;               They are seperated so that the file can be easily transtated.
;
;------------------------------------------------------------------------
[InstallOptionENG]
	FunctionTitle = "Novell NetWare ODI Support for NDIS Setup"

	ShellCodeErrorTitle = "Error:  Novell NetWare ODI Support for NDIS Setup"

	ShellCodeErrorText = "Shell Code Error"

	NoODIAdapterInstalledTitle = "NetWare ODINSUP Setup"

	NoODIAdapterInstalledText = "There are NO ODI Adapters installed in "+
		"this Computer.  Please install an ODI Adapter and then install ODINSUP."

	LoadDisk2Text = "Please load the Novell NetWare Client for Windows NT "+
		"disk 2 into drive "


[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 = ODINSUP.SYS

[Files-Inf]
	3,      ODINSUP.inf,    SIZE=1000

[Files-ODINSUP]
	3,      odinsup.sys,    SIZE=72192
