;-----------------------------------------------------------------------
; OPTION TYPE
; -----------
; This identifies the Option type we are dealing with.	The different
; possible types are:
;
; COMPUTER, VIDEO, POINTER, KEYBOARD, LAYOUT, SCSI, TAPE, PRINTER, ...
;-----------------------------------------------------------------------

[Identification]
    OptionType = SCSI

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

[LanguagesSupported]
    ENG


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

[Options]
    "ATAPI40"    = atapi40,  atdisk40

;-----------------------------------------------------------------------
; OPTION TEXT SECTION
; -------------------
; These are text strings used to identify the option to the user.  There
; are separate sections for each language supported.  The format of the
; section name is "OptionsText" concatenated with the Language represented
; by the section.
;
;-----------------------------------------------------------------------

[OptionsTextENG]
    "ATAPI40"    = "Tekram DC-6x0 IDE Cache Controller"


;-----------------------------------------------------------------------------------------
; SCSI MINIPORT DRIVERS:
;
; Order of the information:
;
; Class driver = Type, Group, ErrorControl, Tag, EventMessageFile, TypesSupported
;
;-----------------------------------------------------------------------------------------

[MiniportDrivers]
    atapi40  = !SERVICE_KERNEL_DRIVER, "SCSI Miniport", !SERVICE_ERROR_NORMAL,  25, %SystemRoot%\System32\IoLogMsg.dll , 7
    atdisk40 = !SERVICE_KERNEL_DRIVER, "Primary Disk", !SERVICE_ERROR_NORMAL,  1, %SystemRoot%\System32\IoLogMsg.dll , 7

;---------------------------------------------------------------------------
; 1. Identify
;
; DESCRIPTION:	 To verify that this INF deals with the same type of options
;		 as we are choosing currently.
;
; INPUT:	 None
;
; OUTPUT:	 $($R0): STATUS: STATUS_SUCCESSFUL
;		 $($R1): Option Type (COMPUTER ...)
;		 $($R2): Diskette description
;---------------------------------------------------------------------------

[Identify]
    ;
    ;
    read-syms Identification

    set Status	   = STATUS_SUCCESSFUL
    set Identifier = $(OptionType)
    set Media	   = #("Source Media Descriptions", 1, 1)

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



;------------------------------------------------------------------------
; 2. ReturnOptions:
;
; DESCRIPTION:	 To return the option list supported by this INF and the
;		 localised text list representing the options.
;
;
; INPUT:	 $($0):  Language used. ( ENG | FRN | ... )
;
; OUTPUT:	 $($R0): STATUS: STATUS_SUCCESSFUL |
;				 STATUS_NOLANGUAGE
;				 STATUS_FAILED
;
;		 $($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, 0)
    set OptionTextList = ^(OptionsText$($0), 1)
    set Status	       = STATUS_SUCCESSFUL

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


;
; 3. InstallOption:
;
; FUNCTION:  To copy files representing Options
;	     To configure the installed option
;	     To update the registry for the installed option
;
; INPUT:     $($0):  Language to use
;	     $($1):  OptionID to install
;	     $($2):  SourceDirectory
;	     $($3):  AddCopy  (YES | NO)
;	     $($4):  DoCopy   (YES | NO)
;	     $($5):  DoConfig (YES | NO)
;
; OUTPUT:    $($R0): STATUS: STATUS_SUCCESSFUL |
;			     STATUS_NOLANGUAGE |
;			     STATUS_USERCANCEL |
;			     STATUS_FAILED
;

[InstallOption]

    ;
    ; Set default values for
    ;
    set Status = STATUS_FAILED
    set DrivesToFree = {}

    ;
    ; 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)
    else
	set Status = STATUS_NOLANGUAGE
	goto finish_InstallOption
    endif
    read-syms Strings$($0)

    ;
    ; check to see if Option is supported.
    ;

    set OptionList = ^(Options, 0)
    ifcontains $(Option) in $(OptionList)
    else
	Debug-Output "SCSI.INF: SCSI option is not supported."
	goto finish_InstallOption
    endif
    set OptionList = ""

    ;
    ; Option has been defined already
    ;

    set MiniportDriver	 =   #(Options, 	$(Option),	   1)
    set Type		 = $(#(MiniportDrivers, atapi40,	   1))
    set Group		 =   #(MiniportDrivers, atapi40,	   2)
    set ErrorControl	 = $(#(MiniportDrivers, atapi40,	   3))
    set Tag		 =   #(MiniportDrivers, atapi40,	   4)
    set EventMessageFile =   #(MiniportDrivers, atapi40,	   5)
    set TypesSupported	 =   #(MiniportDrivers, atapi40,	   6)

    set Start		 =   $(!SERVICE_BOOT_START)

    set MiniportDriver1  =   #(Options, 	$(Option),	   2)
    set Type1		 = $(#(MiniportDrivers, atdisk40,	   1))
    set Group1		 =   #(MiniportDrivers, atdisk40,	   2)
    set ErrorControl1	 = $(#(MiniportDrivers, atdisk40,	   3))
    set Tag1		 =   #(MiniportDrivers, atdisk40,	   4)
    set EventMessageFile1 =  #(MiniportDrivers, atdisk40,	   5)
    set TypesSupported1  =   #(MiniportDrivers, atdisk40,	   6)

    set Start1		 =   $(!SERVICE_BOOT_START)

    shell "registry.inf" GetServicesEntryStart "Atdisk"
    ifstr(i) $($R0) != "STATUS_SUCCESSFUL"
	; this could happen if there is no start value or there is no
	; key, in which case the option is not installed
	set Status = STATUS_SUCCESSFUL
	set Start1 =   $(!SERVICE_DISABLED)
	goto installtheoption
    endif

    set Start1 = $($R1)

installtheoption = +

    ;
    ; Code to add files to copy list
    ;

    ifstr(i) $(AddCopy) == "YES"
	set DoActualCopy = NO
	set FileToCheck = #(Files-ScsiMiniportDrivers, $(MiniportDriver), 2)
	LibraryProcedure STATUS,$(!LIBHANDLE),CheckFileExistance $(!STF_WINDOWSSYSPATH)"\drivers\"$(FileToCheck)

	ifstr(i) $(STATUS) == NO
	    set DoActualCopy = YES
	endif

	LibraryProcedure STATUS,$(!LIBHANDLE),CheckFileExistance $(!STF_WINDOWSSYSPATH)"\drivers\"$(FileToCheck1)
	ifstr(i) $(STATUS) == NO
	    set DoActualCopy1 = YES
	endif

	ifstr(i) $(DoActualCopy) == NO
	    shell "subroutn.inf" DriversExist $($0) $(String1)
	    ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "SCSI.INF: shelling DriversExist failed"
		goto finish_InstallOption
	    endif

	    ifstr(i) $($R0) == STATUS_CURRENT
	    else-ifstr(i) $($R0) == STATUS_NEW
		set DoActualCopy = YES
	    else-ifstr(i) $($R0) == STATUS_USERCANCEL
		Debug-Output "SCSI.INF: User cancelled SCSI installation"
		goto finish_InstallOption
	    else
		Debug-Output "SCSI.INF: Error reported in DriversExist routine in SUBROUTN.INF"
		goto finish_InstallOption
	    endif
	endif

	ifstr(i) $(DoActualCopy1) == NO
	    shell "subroutn.inf" DriversExist $($0) $(String11)
	    ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "SCSI.INF: shelling DriversExist failed"
		goto finish_InstallOption
	    endif

	    ifstr(i) $($R0) == STATUS_CURRENT
	    else-ifstr(i) $($R0) == STATUS_NEW
		set DoActualCopy1 = YES
	    else-ifstr(i) $($R0) == STATUS_USERCANCEL
		Debug-Output "SCSI.INF: User cancelled SCSI installation"
		goto finish_InstallOption
	    else
		Debug-Output "SCSI.INF: Error reported in DriversExist routine in SUBROUTN.INF"
		goto finish_InstallOption
	    endif
	endif


	ifstr(i) $(DoActualCopy) == YES
	    shell "subroutn.inf" DoAskSourceEx $(SrcDir) $(String2)
	    ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "SCSI.INF: shelling DoAskSourceEx failed"
		goto finish_InstallOption
	    endif

	    ifstr(i) $($R0) == STATUS_SUCCESSFUL
		set SrcDir = $($R1)
		ifstr(i) $($R2) != ""
		    set DrivesToFree = >($(DrivesToFree), $($R2))
		endif
	    else
		Debug-Output "SCSI.INF: User cancelled asking source."
		goto finish_InstallOption
	    endif


	    install Install-AddCopyOption
	    ifstr(i) $(STF_INSTALL_OUTCOME) != "STF_SUCCESS"
		Debug-Output "Adding SCSI files to copy list failed"
		goto finish_InstallOption
	    endif
	else
	    set DoCopy = NO
	endif
    endif

    ifstr(i) $(DoCopy) == "YES"
	read-syms ProgressCopy$($0)
	install Install-DoCopyOption
	ifstr(i) $(STF_INSTALL_OUTCOME) == "STF_FAILURE"
	    Debug-Output "Copying files failed"
	    goto finish_InstallOption
	else-ifstr(i) $(STF_INSTALL_OUTCOME) == "STF_USERQUIT"
	    set Status = STATUS_USERCANCEL
	    goto finish_InstallOption
	endif
    endif

    ifstr(i) $(DoConfig) == "YES"
	;
	; first run a privilege check on modifying the setup node
	;

	shell "registry.inf" CheckSetupModify
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
	    goto finish_InstallOption
	endif

	ifstr(i) $($R0) != STATUS_SUCCESSFUL
	    goto finish_InstallOption
	endif


	;
	; then make a new SCSI entry, the entry is created automatically
	; enabled
	;

	set ServiceNode   = $(MiniportDriver)
	set ServiceBinary = System32\drivers\#(Files-ScsiMiniportDrivers, $(MiniportDriver), 2)

	set ServicesValues   = { +
		{Type,		 0, $(!REG_VT_DWORD),	  $(Type)		   }, +
		{Start, 	 0, $(!REG_VT_DWORD),	  $(Start)		   }, +
		{Group, 	 0, $(!REG_VT_SZ),	  $(Group)		   }, +
		{ErrorControl,	 0, $(!REG_VT_DWORD),	  $(ErrorControl)	   }, +
		{Tag,		 0, $(!REG_VT_DWORD),	  $(Tag)		   }, +
		{BinaryPathName, 0, $(!REG_VT_EXPAND_SZ), $(ServiceBinary)	   }  +
		}

	 set ParametersValues = ""
;	set ParametersValues = { +
;		{UseLbaMode,	      0, $(!REG_VT_DWORD), 4294967295} +
;		{UseMultiBlock,       0, $(!REG_VT_DWORD), 4294967295} +
;		{PrimaryMasterMode,   0, $(!REG_VT_DWORD), 4294967295} +
;		{PrimarySlaveMode,    0, $(!REG_VT_DWORD), 4294967295} +
;		{SecondaryMasterMode, 0, $(!REG_VT_DWORD), 4294967295} +
;		{SecondarySlaveMode,  0, $(!REG_VT_DWORD), 4294967295} +
;		}

	set DeviceValues     = {}
	set EventLogValues   = { +
		{EventMessageFile, 0, $(!REG_VT_EXPAND_SZ), $(EventMessageFile1) }, +
		{TypesSupported,   0, $(!REG_VT_DWORD),     $(TypesSupported1)	 }  +
		}

	shell "registry.inf"  MakeServicesEntry $(ServiceNode)      +
						$(ServicesValues)   +
						$(ParametersValues) +
						$(DeviceValues)     +
						$(EventLogValues)   +
						Parameters

	ifint $($ShellCode) != $(!SHELL_CODE_OK)
	    Debug-Output "Couldn't execute MakeServicesEntry in registry.inf"
	    goto finish_InstallOption
	endif

	ifstr(i) $($R0) != STATUS_SUCCESSFUL
	    Debug-Output "MakeServicesEntry failed for SCSI"
	    goto finish_InstallOption
	endif

	set ServiceNode   = $(MiniportDriver1)
	set ServiceBinary = System32\drivers\#(Files-ScsiMiniportDrivers, $(MiniportDriver1), 2)

	set ServicesValues   = { +
		{Type,		 0, $(!REG_VT_DWORD),	  $(Type1)		    }, +
		{Start, 	 0, $(!REG_VT_DWORD),	  $(Start1)		    }, +
		{Group, 	 0, $(!REG_VT_SZ),	  $(Group1)		    }, +
		{ErrorControl,	 0, $(!REG_VT_DWORD),	  $(ErrorControl1)	    }, +
		{Tag,		 0, $(!REG_VT_DWORD),	  $(Tag1)		    }, +
		{BinaryPathName, 0, $(!REG_VT_EXPAND_SZ), $(ServiceBinary)	   }  +
		}

	 set ParametersValues = ""
;	set ParametersValues = { +
;		{UseLbaMode,	      0, $(!REG_VT_DWORD), 4294967295} +
;		{UseMultiBlock,       0, $(!REG_VT_DWORD), 4294967295} +
;		{PrimaryMasterMode,   0, $(!REG_VT_DWORD), 4294967295} +
;		{PrimarySlaveMode,    0, $(!REG_VT_DWORD), 4294967295} +
;		{SecondaryMasterMode, 0, $(!REG_VT_DWORD), 4294967295} +
;		{SecondarySlaveMode,  0, $(!REG_VT_DWORD), 4294967295} +
;		}

	set DeviceValues     = {}
	set EventLogValues   = { +
		{EventMessageFile, 0, $(!REG_VT_EXPAND_SZ), $(EventMessageFile) }, +
		{TypesSupported,   0, $(!REG_VT_DWORD),     $(TypesSupported)	}  +
		}

	shell "registry.inf"  MakeServicesEntry $(ServiceNode)      +
						$(ServicesValues)   +
						$(ParametersValues) +
						$(DeviceValues)     +
						$(EventLogValues)   +
						Parameters

	ifint $($ShellCode) != $(!SHELL_CODE_OK)
	    Debug-Output "Couldn't execute MakeServicesEntry in registry.inf"
	    goto finish_InstallOption
	endif

	ifstr(i) $($R0) != STATUS_SUCCESSFUL
	    Debug-Output "MakeServicesEntry failed for SCSI"
	    goto finish_InstallOption
	endif


	;
	; Remove Atdisk service
	;
	shell "registry.inf" RemoveServicesEntry "Atdisk"
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
	    Debug-Output "SCSI.INF: Failed to shell RemoveServicesEntry (Atdisk)"
	    goto finish_DeInstallOption
	endif

	ifstr(i) $($R0) != STATUS_SUCCESSFUL
	    Debug-Output "SCSI.INF: Failed to disable services entry (Atdisk)"
	    goto finish_DeInstallOption
	endif

	;
	; Remove Atapi service
	;
	shell "registry.inf" RemoveServicesEntry "Atapi"
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
	    Debug-Output "SCSI.INF: Failed to shell RemoveServicesEntry (Atapi)"
	    goto finish_DeInstallOption
	endif

	ifstr(i) $($R0) != STATUS_SUCCESSFUL
	    Debug-Output "SCSI.INF: Failed to disable services entry (Atapi)"
	    goto finish_DeInstallOption
	endif
    endif

    set Status = STATUS_SUCCESSFUL

finish_InstallOption = +
    ForListDo $(DrivesToFree)
	LibraryProcedure STATUS,$(!LIBHANDLE), DeleteNetConnection $($) "TRUE"
    EndForListDo

    Return $(Status)


[Install-AddCopyOption]

    ;
    ; Add the files to the copy list
    ;
    AddSectionKeyFileToCopyList   Files-ScsiMiniportDrivers	 +
				  $(MiniportDriver)		 +
				  $(SrcDir)			 +
				  $(!STF_WINDOWSSYSPATH)\drivers


    AddSectionKeyFileToCopyList   Files-ScsiMiniportDrivers	 +
				  $(MiniportDriver1)		 +
				  $(SrcDir)			 +
				  $(!STF_WINDOWSSYSPATH)\drivers


    exit


[Install-DoCopyOption]

    ;
    ; Copy files in the copy list
    ;
    CopyFilesInCopyList
    exit

;-------------------------------------------------------------------------
; 4. DeInstallOption:
;
; FUNCTION:  To remove files representing Option
;	     To remove the registry entry corresponding to the Option
;
; INPUT:     $($0):  Language to use
;	     $($1):  OptionID to install
;
; OUTPUT:    $($R0): STATUS: STATUS_SUCCESSFUL |
;			     STATUS_NOLANGUAGE |
;			     STATUS_USERCANCEL |
;			     STATUS_FAILED
;-------------------------------------------------------------------------
[DeInstallOption]
    ;
    ; Set default values for
    ;
    set Status	 = STATUS_FAILED
    ;
    ; extract parameters
    ;
    set Option	 = $($1)

    ;
    ; Check if the language requested is supported
    ;
    set LanguageList = ^(LanguagesSupported, 1)
    Ifcontains(i) $($0) in $(LanguageList)
    else
	set Status = STATUS_NOLANGUAGE
	goto finish_DeInstallOption
    endif
    read-syms Strings$($0)

    ;
    ; check to see if Option is supported.
    ;

    set OptionList = ^(Options, 0)
    ifcontains $(Option) in $(OptionList)
    else
	goto finish_DeInstallOption
    endif
    set OptionList = ""

    ;
    ; fetch details about option
    ;

    set MiniportDriver = #(Options, $(Option), 1)
    set MiniportFile   = #(Files-ScsiMiniportDrivers, $(MiniportDriver), 2)
    set FilePath       = $(!STF_WINDOWSSYSPATH)"\drivers\"$(MiniportFile)

    set MiniportDriver1 = #(Options, $(Option), 2)
    set MiniportFile1  = #(Files-ScsiMiniportDrivers, $(MiniportDriver1), 2)
    set FilePath1      = $(!STF_WINDOWSSYSPATH)"\drivers\"$(MiniportFile1)

    ;
    ; check to see if file is installed
    ; if not give success
    ;

    LibraryProcedure STATUS,$(!LIBHANDLE),CheckFileExistance $(FilePath)
    ifstr(i) $(STATUS) == "NO"
	set Status = STATUS_SUCCESSFUL
	goto finish_DeInstallOption
    endif

    LibraryProcedure STATUS,$(!LIBHANDLE),CheckFileExistance $(FilePath1)
    ifstr(i) $(STATUS) == "NO"
	set Status = STATUS_SUCCESSFUL
	goto finish_DeInstallOption
    endif

    shell "registry.inf" GetServicesEntryStart $(MiniportDriver)
    ifstr(i) $($R0) != "STATUS_SUCCESSFUL"
	; this could happen if there is no start value or there is no
	; key, in which case the option is not installed
	set Status = STATUS_SUCCESSFUL
	goto finish_DeInstallOption_1
    endif

    ifstr(i) $($R1) == $(!SERVICE_BOOT_START)
	shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "WARNING" $(String3)
	ifstr(i) $($R0) != STATUS_SUCCESSFUL
	    goto finish_DeInstallOption_1
	endif
	ifstr(i) $($R1) == "CANCEL"
	    goto finish_DeInstallOption
	endif
    endif

finish_DeInstallOption_1 =+
    shell "registry.inf" GetServicesEntryStart $(MiniportDriver1)
    ifstr(i) $($R0) != "STATUS_SUCCESSFUL"
	; this could happen if there is no start value or there is no
	; key, in which case the option is not installed
	set Status = STATUS_SUCCESSFUL
	goto finish_DeInstallOption_2
    endif

    ifstr(i) $($R1) == $(!SERVICE_BOOT_START)
	shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "WARNING" $(String31)
	ifstr(i) $($R0) != STATUS_SUCCESSFUL
	    goto do_removal
	endif
	ifstr(i) $($R1) == "CANCEL"
	    goto finish_DeInstallOption
	endif
    endif

do_removal =+
    ;
    ; disable the registry entry
    ;

    shell "registry.inf" RemoveServicesEntry "atapi40"
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
	Debug-Output "SCSI.INF: Failed to shell RemoveServicesEntry"
	goto finish_DeInstallOption
    endif

    ifstr(i) $($R0) != STATUS_SUCCESSFUL
	Debug-Output "SCSI.INF: Failed to disable services entry"
	goto finish_DeInstallOption
    endif

    shell "registry.inf" RemoveServicesEntry "atdisk40"
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
	Debug-Output "SCSI.INF: Failed to shell RemoveServicesEntry"
	goto finish_DeInstallOption
    endif

    ifstr(i) $($R0) != STATUS_SUCCESSFUL
	Debug-Output "SCSI.INF: Failed to disable services entry"
	goto finish_DeInstallOption
    endif

    ;
    ; we won't remove the file because we can only do so during the next boot.
    ; if the user chooses to reinstall the same driver during this boot
    ; he will still end up deleting the driver on next boot. if the file
    ; should be deleted a warning should be put up saying that the user should
    ; not try to reinstall the driver during this boot
    ;
    ;	 AddFileToDeleteList $(FilePath)

    set Status = STATUS_SUCCESSFUL

    ;
    ; Get ATATPI existing flags from the parameters key
    ;

    shell "" GetParameterValue $(MiniportDriver) "AtapiOnPrimary"
    set AtapiOnPrimary = $($R1)

    shell "" GetParameterValue $(MiniportDriver) "AtapiOnSecondary"
    set AtapiOnSecondary = $($R1)

    ;
    ; turn on Atdisk and/or Atapi again
    ; values of AtapiOnPrimary and AtapiOnSecondary:
    ;	0	- only disk, no atapi
    ;	1	- atapi exists
    ;	others	- no any disk and atapi
    ;

    ifint $(AtapiOnPrimary) == "0"
	shell "registry.inf" ModifyServicesEntry "Atdisk" $(!SERVICE_BOOT_START)

	ifint $(AtapiOnSecondary) == "1"
	    shell "registry.inf" ModifyServicesEntry "Atapi" $(!SERVICE_BOOT_START)
	endif

	goto finish_DeInstallOption
    endif

    ifint $(AtapiOnPrimary) == "1"
	shell "registry.inf" ModifyServicesEntry "Atapi" $(!SERVICE_BOOT_START)

	ifint $(AtapiOnSecondary) == "0"
	    shell "registry.inf" ModifyServicesEntry "Atdisk" $(!SERVICE_BOOT_START)
	endif

	goto finish_DeInstallOption
    endif

    ifint $(AtapiOnSecondary) == "0"
	shell "registry.inf" ModifyServicesEntry "Atdisk" $(!SERVICE_BOOT_START)
	goto finish_DeInstallOption
    endif

    ifint $(AtapiOnSecondary) == "1"
	shell "registry.inf" ModifyServicesEntry "Atapi" $(!SERVICE_BOOT_START)
	goto finish_DeInstallOption
    endif

finish_DeInstallOption =+
    return $(Status)


[GetParameterValue]
    set Status = STATUS_FAILED
    set ParameterValue = ""

    ;read-syms RegistryConstants

    Debug-Output "Get driver parameter value: "$($0)", "$($1)

    set KeyName = "system\"$(!STF_CONTROLSET)"\services\"$($0)\"Parameters"
    OpenRegKey $(!REG_H_LOCAL) "" $(KeyName) $(!REG_KEY_READ) KeyHandle

    ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
	Debug-Output "Couldn't open key for read access"
	goto finish_GetParameterValue
    endif

    GetRegValue $(KeyHandle) $($1) ParameterValueList
    ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
	Debug-Output "Couldn't read parameter value"
	CloseRegKey $(KeyHandle)
	goto finish_GetParameterValue
    endif

    CloseRegKey $(KeyHandle)

    set ParameterValue = *($(ParameterValueList), 4)
    set Status = STATUS_SUCCESSFUL

finish_GetParameterValue = +
    Return $(Status) $(ParameterValue)


;-------------------------------------------------------------------------
; 5. GetInstalledOptions:
;
; FUNCTION:  To find out the list of options which are installed
;
; INPUT:     $($0): Language to Use
;
; OUTPUT:    $($R0): STATUS: STATUS_SUCCESSFUL |
;			     STATUS_FAILED
;
;	     $($R1): List of options installed
;	     $($R2): Option installed Text List
;-------------------------------------------------------------------------
[GetInstalledOptions]
    set Status = STATUS_FAILED
    set InstalledOptions = {}
    set InstalledOptionsText = {}

    ;
    ; Check if the language requested is supported
    ;
    set LanguageList = ^(LanguagesSupported, 1)
    Ifcontains(i) $($0) in $(LanguageList)
    else
	set Status = STATUS_NOLANGUAGE
	goto finish_GetInstalledOptions
    endif

    set OptionList = ^(Options, 0)
    ForListDo $(OptionList)
	set MiniportDriver = #(Options, $($), 1)
	set MiniportFile   = #(Files-ScsiMiniportDrivers, $(MiniportDriver), 2)
	set FilePath	   = $(!STF_WINDOWSSYSPATH)"\drivers\"$(MiniportFile)
	LibraryProcedure STATUS,$(!LIBHANDLE),CheckFileExistance $(FilePath)
	ifstr(i) $(STATUS) == "YES"
	    shell "registry.inf" GetServicesEntryStart $(MiniportDriver)
	    ifint $($ShellCode) == $(!SHELL_CODE_OK)
		ifstr(i) $($R0) == STATUS_SUCCESSFUL
		    ifstr(i) $($R1) != $(!SERVICE_DISABLED)

			set OptionText = #(OptionsText$($0), $($), 1)
			set InstalledOptions	 = >($(InstalledOptions), $($))
			set InstalledOptionsText = >($(InstalledOptionsText), $(OptionText))

		    endif
		endif
	    endif
	endif
    EndForListDo
    set Status = STATUS_SUCCESSFUL
finish_GetInstalledOptions =+
    Return $(Status) $(InstalledOptions) $(InstalledOptionsText)


;**************************************************************************
; PROGRESS GUAGE VARIABLES
;**************************************************************************

[ProgressCopyENG]
    ProCaption	 = "Windows NT Setup"
    ProCancel	 = "Cancel"
    ProCancelMsg = "Windows NT is not correcly installed.  Are you sure you want "+
		   "to cancel copying files?"
    ProCancelCap = "Setup Message"
    ProText1	 = "Copying:"
    ProText2	 = "To:"

[StringsENG]
    String1 = "Tekram DC-6x0 IDE Cache Controller Atapi40.sys"
    String11 = "Tekram DC-6x0 IDE Cache Controller Atdisk40.sys"
    String2 = "Please enter the full path to the "+
	      "Tekram DC-6x0 IDE Cache Controller Device Driver files.  "+
	      "Then choose Continue."
    String3 = "Tekram DC-6x0 IDE Cache Controller Atapi40.sys "+
	      "has been marked as a boot device.  Removing "+
	      "it may cause the system not to boot."$(!LF)$(!LF)"Are you sure "+
	      "you want to remove the Adapter."

    String31 = "Tekram DC-6x0 IDE Cache Controller Atdisk40.sys "+
	      "has been marked as a boot device.  Removing "+
	      "it may cause the system not to boot."$(!LF)$(!LF)"Are you sure "+
	      "you want to remove the Adapter."

[Source Media Descriptions]
    1  = "Tekram DC-6x0 IDE Cache Controller", TAGFILE = dcscsi

[Files-ScsiMiniportDrivers]
atapi40 = 1,atapi40.sys , SIZE=999
atdisk40 = 1,atdisk40.sys, SIZE=999

