Metropoli BBS
VIEWER: update.inf MODE: TEXT (ASCII)
[FileKeyedClasses]
    Hal            = hal.dll
    Ntoskrnl       = ntoskrnl.exe
[FilesKeyedSections]
    FilesHal       = $(STF_HALDEST)
    FilesNtoskrnl  = $(STF_WINDOWSSYSPATH)
[FilesHal]
    HAL      = 1, HAL.DLL      , RENAME=$(NEWFILE), NOLOG, UNDO
    HALAPIC  = 1, HALAPIC.DLL  , RENAME=$(NEWFILE), NOLOG, UNDO
    HALMPS   = 1, HALMPS.DLL   , RENAME=$(NEWFILE), NOLOG, UNDO

[FilesNtoskrnl]
    NTKRNLMP = 1, NTKRNLMP.EXE , RENAME=$(NEWFILE), NOLOG, UNDO
    NTOSKRNL = 1, NTOSKRNL.EXE , RENAME=$(NEWFILE), NOLOG, UNDO

[FileSections]
    FilesPrimary        = C:
    FilesOsLoader       = $(STF_OSLDEST)
    FilesPal            = $(STF_HALDEST)
    FilesWinnt          = $(STF_WINDOWSPATH)
    FilesSystem32       = $(STF_WINDOWSSYSPATH)
    FilesSystem         = $(STF_WINDOWSPATH)\system
    FilesDrivers        = $(STF_WINDOWSSYSPATH)\drivers
    FilesConfig         = $(STF_WINDOWSSYSPATH)\config
    FilesWinspool       = $(STF_WINDOWSSYSPATH)\spool
    FilesPrnDriver      = $(STF_WINDOWSSYSPATH)\spool\drivers\$(!STF_PRNPLATFORM)\1
    FilesPrnProc        = $(STF_WINDOWSSYSPATH)\spool\prtprocs\$(!STF_PRNPLATFORM)
    FilesDbgCom         = $(STF_WINDOWSPATH)\symbols\com
    FilesDbgCpl         = $(STF_WINDOWSPATH)\symbols\cpl
    FilesDbgDll         = $(STF_WINDOWSPATH)\symbols\dll
    FilesDbgDrv         = $(STF_WINDOWSPATH)\symbols\drv
    FilesDbgExe         = $(STF_WINDOWSPATH)\symbols\exe
    FilesDbgScr         = $(STF_WINDOWSPATH)\symbols\scr
    FilesDbgSys         = $(STF_WINDOWSPATH)\symbols\sys
[FileSectionsCopyAlways]
    FilesSystem32CopyAlways = $(STF_WINDOWSSYSPATH)
    FilesDriversCopyAlways  = $(STF_WINDOWSSYSPATH)\drivers
[FileSectionsWINNT]
    FilesInfWinnt       = $(STF_WINDOWSSYSPATH)
[FileSectionsLANMANNT]
    FilesInfLanmanNT    = $(STF_WINDOWSSYSPATH)
[FileSectionsCopyAlwaysWINNT]
    FilesSystem32CopyAlwaysWinnt = $(STF_WINDOWSSYSPATH)
[FileSectionsCopyAlwaysLANMANNT]
    FilesSystem32CopyAlwaysLanmanNT = $(STF_WINDOWSSYSPATH)
[FilesPrimary]
1 = 1, NTLDR       , RENAME=$(NEWFILE), NOLOG, UNDO

[FilesOsLoader]

[FilesPal]

[FilesWinnt]

[FilesSystem32]
1 = 1, ADVAPI32.DLL, RENAME=$(NEWFILE), NOLOG, UNDO
2 = 1, BROWSER.DLL , RENAME=$(NEWFILE), NOLOG, UNDO
3 = 1, CIRRUS.DLL  , RENAME=$(NEWFILE), NOLOG, UNDO
4 = 1, CMD.EXE     , RENAME=$(NEWFILE), NOLOG, UNDO
5 = 1, CSRSRV.DLL  , RENAME=$(NEWFILE), NOLOG, UNDO
6 = 1, CSRSS.EXE   , RENAME=$(NEWFILE), NOLOG, UNDO
7 = 1, DHCPSSVC.DLL, RENAME=$(NEWFILE), NOLOG, UNDO
8 = 1, FTP.EXE     , RENAME=$(NEWFILE), NOLOG, UNDO
9 = 1, FTPSVC.DLL  , RENAME=$(NEWFILE), NOLOG, UNDO
10 = 1, FTSRCH.DLL  , RENAME=$(NEWFILE), NOLOG, UNDO
11 = 1, GLSRV.DLL   , RENAME=$(NEWFILE), NOLOG, UNDO
12 = 1, IMAGEHLP.DLL, RENAME=$(NEWFILE), NOLOG, UNDO
13 = 1, INETMIB1.DLL, RENAME=$(NEWFILE), NOLOG, UNDO
14 = 1, KBDUK.DLL   , RENAME=$(NEWFILE), NOLOG, UNDO
15 = 1, KERNEL32.DLL, RENAME=$(NEWFILE), NOLOG, UNDO
16 = 1, KRNL286.EXE , RENAME=$(NEWFILE), NOLOG, UNDO
17 = 1, KRNL386.EXE , RENAME=$(NEWFILE), NOLOG, UNDO
18 = 1, LOCALSPL.DLL, RENAME=$(NEWFILE), NOLOG, UNDO
19 = 1, LPRMON.DLL  , RENAME=$(NEWFILE), NOLOG, UNDO
20 = 1, LSASRV.DLL  , RENAME=$(NEWFILE), NOLOG, UNDO
21 = 1, LSASS.EXE   , RENAME=$(NEWFILE), NOLOG, UNDO
22 = 1, MSGINA.DLL  , RENAME=$(NEWFILE), NOLOG, UNDO
23 = 1, NETAPI32.DLL, RENAME=$(NEWFILE), NOLOG, UNDO
24 = 1, NETUI2.DLL  , RENAME=$(NEWFILE), NOLOG, UNDO
25 = 1, NTBACKUP.EXE, RENAME=$(NEWFILE), NOLOG, UNDO
26 = 1, NTDLL.DLL   , RENAME=$(NEWFILE), NOLOG, UNDO
27 = 1, NTLMSSPS.DLL, RENAME=$(NEWFILE), NOLOG, UNDO
28 = 1, NTVDM.EXE   , RENAME=$(NEWFILE), NOLOG, UNDO
29 = 1, NWAPI16.DLL , RENAME=$(NEWFILE), NOLOG, UNDO
30 = 1, NWPROVAU.DLL, RENAME=$(NEWFILE), NOLOG, UNDO
31 = 1, NWWKS.DLL   , RENAME=$(NEWFILE), NOLOG, UNDO
32 = 1, OLE2DISP.DLL, RENAME=$(NEWFILE), NOLOG, UNDO
33 = 1, OLE2NLS.DLL , RENAME=$(NEWFILE), NOLOG, UNDO
34 = 1, OLE32.DLL   , RENAME=$(NEWFILE), NOLOG, UNDO
35 = 1, OLEAUT32.DLL, RENAME=$(NEWFILE), NOLOG, UNDO
36 = 1, OLETHK32.DLL, RENAME=$(NEWFILE), NOLOG, UNDO
37 = 1, OPENGL32.DLL, RENAME=$(NEWFILE), NOLOG, UNDO
38 = 1, PERFMON.EXE , RENAME=$(NEWFILE), NOLOG, UNDO
39 = 1, PROGMAN.EXE , RENAME=$(NEWFILE), NOLOG, UNDO
40 = 1, QV.DLL      , RENAME=$(NEWFILE), NOLOG, UNDO
41 = 1, RASCHAP.DLL , RENAME=$(NEWFILE), NOLOG, UNDO
42 = 1, RASNBFCP.DLL, RENAME=$(NEWFILE), NOLOG, UNDO
43 = 1, RASPPPEN.DLL, RENAME=$(NEWFILE), NOLOG, UNDO
44 = 1, RASSRV.EXE  , RENAME=$(NEWFILE), NOLOG, UNDO
45 = 1, ROUTE.EXE   , RENAME=$(NEWFILE), NOLOG, UNDO
46 = 1, RPCLTC1.DLL , RENAME=$(NEWFILE), NOLOG, UNDO
47 = 1, RPCLTC3.DLL , RENAME=$(NEWFILE), NOLOG, UNDO
48 = 1, RPCLTC5.DLL , RENAME=$(NEWFILE), NOLOG, UNDO
49 = 1, RPCLTC6.DLL , RENAME=$(NEWFILE), NOLOG, UNDO
50 = 1, RPCLTC7.DLL , RENAME=$(NEWFILE), NOLOG, UNDO
51 = 1, RPCLTS5.DLL , RENAME=$(NEWFILE), NOLOG, UNDO
52 = 1, RPCRT4.DLL  , RENAME=$(NEWFILE), NOLOG, UNDO
53 = 1, RPCSS.EXE   , RENAME=$(NEWFILE), NOLOG, UNDO
54 = 1, RPLSVC.EXE  , RENAME=$(NEWFILE), NOLOG, UNDO
55 = 1, SAMLIB.DLL  , RENAME=$(NEWFILE), NOLOG, UNDO
56 = 1, SAMSRV.DLL  , RENAME=$(NEWFILE), NOLOG, UNDO
57 = 1, SECURITY.DLL, RENAME=$(NEWFILE), NOLOG, UNDO
58 = 1, SENDFL32.DLL, RENAME=$(NEWFILE), NOLOG, UNDO
59 = 1, SFMMON.DLL  , RENAME=$(NEWFILE), NOLOG, UNDO
60 = 1, SFMPRINT.EXE, RENAME=$(NEWFILE), NOLOG, UNDO
61 = 1, SHELL32.DLL , RENAME=$(NEWFILE), NOLOG, UNDO
62 = 1, SRVSVC.DLL  , RENAME=$(NEWFILE), NOLOG, UNDO
63 = 1, TYPELIB.DLL , RENAME=$(NEWFILE), NOLOG, UNDO
64 = 1, UNTFS.DLL   , RENAME=$(NEWFILE), NOLOG, UNDO
65 = 1, USER32.DLL  , RENAME=$(NEWFILE), NOLOG, UNDO
66 = 1, USERINIT.EXE, RENAME=$(NEWFILE), NOLOG, UNDO
67 = 1, WIN32SPL.DLL, RENAME=$(NEWFILE), NOLOG, UNDO
68 = 1, WINFILE.EXE , RENAME=$(NEWFILE), NOLOG, UNDO
69 = 1, WINHLP32.EXE, RENAME=$(NEWFILE), NOLOG, UNDO
70 = 1, WINLOGON.EXE, RENAME=$(NEWFILE), NOLOG, UNDO
71 = 1, WINS.EXE    , RENAME=$(NEWFILE), NOLOG, UNDO
72 = 1, WINSRV.DLL  , RENAME=$(NEWFILE), NOLOG, UNDO
73 = 1, WOW32.DLL   , RENAME=$(NEWFILE), NOLOG, UNDO
74 = 1, WOWEXEC.EXE , RENAME=$(NEWFILE), NOLOG, UNDO
75 = 1, WOWFAXUI.DLL, RENAME=$(NEWFILE), NOLOG, UNDO
76 = 1, WSOCK32.DLL , RENAME=$(NEWFILE), NOLOG, UNDO
77 = 1, PROBREP.TXT , RENAME=$(NEWFILE), NOLOG, UNDO

[FilesSystem]

[FilesDrivers]
1 = 1, AFD.SYS     , RENAME=$(NEWFILE), NOLOG, UNDO
2 = 1, AHA154X.SYS , RENAME=$(NEWFILE), NOLOG, UNDO
3 = 1, AIC78XX.SYS , RENAME=$(NEWFILE), NOLOG, UNDO
4 = 1, ATAPI.SYS   , RENAME=$(NEWFILE), NOLOG, UNDO
5 = 1, ATI.SYS     , RENAME=$(NEWFILE), NOLOG, UNDO
6 = 1, BHNT.SYS    , RENAME=$(NEWFILE), NOLOG, UNDO
7 = 1, CIRRUS.SYS  , RENAME=$(NEWFILE), NOLOG, UNDO
8 = 1, DC21X4.SYS  , RENAME=$(NEWFILE), NOLOG, UNDO
9 = 1, DEFEA.SYS   , RENAME=$(NEWFILE), NOLOG, UNDO
10 = 1, DPTSCSI.SYS , RENAME=$(NEWFILE), NOLOG, UNDO
11 = 1, ELNKMC.SYS  , RENAME=$(NEWFILE), NOLOG, UNDO
12 = 1, F70N3.SYS   , RENAME=$(NEWFILE), NOLOG, UNDO
13 = 1, NCRC700.SYS , RENAME=$(NEWFILE), NOLOG, UNDO
14 = 1, NDIS.SYS    , RENAME=$(NEWFILE), NOLOG, UNDO
15 = 1, NE3200.SYS  , RENAME=$(NEWFILE), NOLOG, UNDO
16 = 1, NETBT.SYS   , RENAME=$(NEWFILE), NOLOG, UNDO
17 = 1, NPMCA.SYS   , RENAME=$(NEWFILE), NOLOG, UNDO
18 = 1, NTFS.SYS    , RENAME=$(NEWFILE), NOLOG, UNDO
19 = 1, NWLNKIPX.SYS, RENAME=$(NEWFILE), NOLOG, UNDO
20 = 1, NWLNKNB.SYS , RENAME=$(NEWFILE), NOLOG, UNDO
21 = 1, NWLNKRIP.SYS, RENAME=$(NEWFILE), NOLOG, UNDO
22 = 1, NWLNKSPX.SYS, RENAME=$(NEWFILE), NOLOG, UNDO
23 = 1, NWRDR.SYS   , RENAME=$(NEWFILE), NOLOG, UNDO
24 = 1, PCMCIA.SYS  , RENAME=$(NEWFILE), NOLOG, UNDO
25 = 1, RDR.SYS     , RENAME=$(NEWFILE), NOLOG, UNDO
26 = 1, S3.SYS      , RENAME=$(NEWFILE), NOLOG, UNDO
27 = 1, SCSIDISK.SYS, RENAME=$(NEWFILE), NOLOG, UNDO
28 = 1, SFMATALK.SYS, RENAME=$(NEWFILE), NOLOG, UNDO
29 = 1, SFMSRV.SYS  , RENAME=$(NEWFILE), NOLOG, UNDO
30 = 1, SRV.SYS     , RENAME=$(NEWFILE), NOLOG, UNDO
31 = 1, TCPIP.SYS   , RENAME=$(NEWFILE), NOLOG, UNDO
32 = 1, WDVGA.SYS   , RENAME=$(NEWFILE), NOLOG, UNDO
33 = 1, STREAMS.SYS , RENAME=$(NEWFILE), NOLOG, UNDO
34 = 1, ASYNCMAC.SYS, RENAME=$(NEWFILE), NOLOG, UNDO

[FilesConfig]
[FilesWinspool]
[FilesPrnDriver]
1 = 1, DICONIX.DLL , RENAME=$(NEWFILE), NOLOG, UNDO
2 = 1, HPPCL5MS.DLL, RENAME=$(NEWFILE), NOLOG, UNDO
3 = 1, PSCRIPT.DLL , RENAME=$(NEWFILE), NOLOG, UNDO
4 = 1, PSCRPTUI.DLL, RENAME=$(NEWFILE), NOLOG, UNDO
5 = 1, RASDD.DLL   , RENAME=$(NEWFILE), NOLOG, UNDO
6 = 1, RASDDUI.DLL , RENAME=$(NEWFILE), NOLOG, UNDO

[FilesPrnProc]

[FilesDbgCom]
[FilesDbgCpl]
[FilesDbgDll]
[FilesDbgDrv]
[FilesDbgExe]
[FilesDbgScr]
[FilesDbgSys]
[FilesInfWinnt]

[FilesInfLanmanNT]
1 = 1, NWDOC.HLP, RENAME=$(NEWFILE), NOLOG, UNDO

[FilesSystem32CopyAlways]

[FilesDriversCopyAlways]
[FilesSystem32CopyAlwaysWINNT]
[FilesSystem32CopyAlwaysLANMANNT]
[ProcessorID]
    ProcessorID_I386  = I386
    ProcessorID_I486  = I486
    ProcessorID_I586  = I586
    ProcessorID_R4000 = R4000
[UiVars]
    STF_PLATFORMDET    = "" ? $(!LIBHANDLE) GetPlatform
    STF_CSDVER         = 768
    STF_BUILDVER       = 1057
    STF_CSD1_NT35      = 256
    STF_NT31_BUILDVER  = 528
    STF_NT35_BUILDVER  = 807
    STF_NT351_BUILDVER = 1057
    STF_NT351_MAJORVER = 3
    STF_NT351_MINORVER = 51
    STF_PRIMARY        = "C:"
    STF_NTDRIVE        = ""
    STF_WINDOWSPATH    = "" ? $(!LIBHANDLE) GetWindowsNtDir
    STF_WINDOWSSYSPATH = "" ? $(!LIBHANDLE) GetWindowsNtSysDir
    STF_CONTROLSET     = CurrentControlSet
    VolumeList         = {} ? $(!LIBHANDLE) GetHardDriveLetters
    VolumeFSList       = {} ? $(!LIBHANDLE) GetHardDriveFileSystems
    VolumeFreeList     = {} ? $(!LIBHANDLE) GetHardDriveFreeSpace
    DisketteList       = {} ? $(!LIBHANDLE) GetFloppyDriveLetters
[FreeSpaceI386]
    RequiredFreeWinnt  = 25
[FreeSpaceMips]
    RequiredFreeWinnt  = 32
[FreeSpaceppc]
    RequiredFreeWinnt  = 32
[FreeSpaceAlpha]
    RequiredFreeWinnt  = 27
[NVRAMVars]
    SystemPartition = "" ? $(!LIBHANDLE) GetNVRAMVar SYSTEMPARTITION
    OsLoader        = "" ? $(!LIBHANDLE) GetNVRAMVar OSLOADER
    OsLoadPartition = "" ? $(!LIBHANDLE) GetNVRAMVar OSLOADPARTITION
    OsLoadFilename  = "" ? $(!LIBHANDLE) GetNVRAMVar OSLOADFILENAME
[Shell Commands]
    set-title "Windows NT Setup"
    set-subst CR = "\r"
    set-subst LF = "\n"
    set STF_LANGUAGE = ENG
    read-syms Strings
    shell "subroutn.inf" PushBillboard STATUSDLG $(Billboard1)
    set BillboardPushed = TRUE
    set !LIBHANDLE      = ""
    set !PATCHLIBHANDLE = ""
    install   LoadSetupLibrary
    read-syms ProductType
    ifstr(i) $(!STF_PLATFORM) == I386
        set STF_PRNPLATFORM = "w32x86"
    else-ifstr(i) $(!STF_PLATFORM) == Mips
        set STF_PRNPLATFORM = "w32mips"
    else-ifstr(i) $(!STF_PLATFORM) == ppc
        set STF_PRNPLATFORM = "w32ppc"
    else-ifstr(i) $(!STF_PLATFORM) == Alpha
        set STF_PRNPLATFORM = "w32alpha"
    endif
    read-syms UiVars
    detect    UiVars
    read-syms FreeSpace$(!STF_PLATFORM)
    ifstr(i) $(STF_PLATFORM) != $(STF_PLATFORMDET)
         ifstr(i) $(BillboardPushed) == TRUE
             shell "subroutn.inf" PopBillboard
             set BillboardPushed = FALSE
         endif
         shell "subroutn.inf" SetupMessage $(STF_LANGUAGE) "FATAL" $(String1)
         goto patchnotdone
    endif
    shell "registry.inf" CheckSetupModify
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
        ifstr(i) $(BillboardPushed) == TRUE
            shell "subroutn.inf" PopBillboard
            set BillboardPushed = FALSE
        endif
        Debug-Output "shelling CheckSetupModify failed"
        goto patchnotdone
    else-ifstr(i) $($R0) != STATUS_SUCCESSFUL
        ifstr(i) $(BillboardPushed) == TRUE
            shell "subroutn.inf" PopBillboard
            set BillboardPushed = FALSE
        endif
        shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "FATAL" $(String4)
        goto patchnotdone
    endif
    install   LoadPatchLibrary
    shell "" GetCheckedFree
    ifint $($ShellCode) == $(!SHELL_CODE_OK)
        ifstr(i) $($R0) == "STATUS_SUCCESSFUL"
            ifstr(i) $($R1) == "checked"
                shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "FATAL" $(String15)
                goto patchnotdone
            endif
        endif
    endif
    LibraryProcedure STATUS,$(!PATCHLIBHANDLE), CheckWindowsMajorVersion
    ifint $(STATUS) > $(STF_NT351_MAJORVER)
        shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) FATAL $(String18)
        goto patchnotdone
    else-ifint $(STATUS) = $(STF_NT351_MAJORVER)
        LibraryProcedure STATUS,$(!PATCHLIBHANDLE), CheckWindowsMinorVersion
        ifint $(STATUS) > $(STF_NT351_MINORVER)
            shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) FATAL $(String18)
            goto patchnotdone
        endif
    endif
    LibraryProcedure STATUS,$(!PATCHLIBHANDLE), CheckBuildVersion
    ifint $(STATUS) <= $(STF_NT35_BUILDVER)
        shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) FATAL $(String16)
        goto patchnotdone
    else-ifint $(STATUS) < $(STF_NT351_BUILDVER)
        shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) FATAL $(String17)
        goto patchnotdone
    else-ifint $(STATUS) > $(STF_NT351_BUILDVER)
        shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) FATAL $(String18)
        goto patchnotdone
    endif
    ifstr(i) $(!STF_PLATFORM) == ppc
        OpenRegKey $(!REG_H_LOCAL) "" "Software\Microsoft\Windows NT\CurrentVersion" 33554432 KeyCurrentVersion
        ifstr(i) $(KeyCurrentVersion) != ""
            GetRegValue $(KeyCurrentVersion) "CSDVersion" CSDVersionList
            ifstr(i) $(CSDVersionList) == "Power Managed Version X"
                shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) FATAL $(String19)
                goto patchnotdone
            endif
            GetRegValue $(KeyCurrentVersion) "PowerManagedVersion" PMVersionList
            ifstr(i) $(PMVersionList) != ""
                shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) FATAL $(String19)
                goto patchnotdone
            endif
        endif
    endif
skip_patchvercheck = +
    GetDriveInPath !STF_NTDRIVE $(!STF_WINDOWSSYSPATH)
    ifint *($(VolumeFreeList), ~($(VolumeList), $(!STF_NTDRIVE))) < $(RequiredFreeWinnt)
        shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) FATAL $(String13a)$(RequiredFreeWinnt)$(String13b)$(!STF_NTDRIVE)$(String13c)
        goto patchnotdone
    endif
    set STF_PRODUCT = ""
    OpenRegKey $(!REG_H_LOCAL) "" "System\CurrentControlSet\Control\ProductOptions" 33554432 KeyProductOption
    ifstr(i) $(KeyProductOption) != ""
        GetRegValue $(KeyProductOption) "ProductType" ProductTypeList
        set TempProductType = *($(ProductTypeList),4)
        ifstr(i) $(TempProductType) == "winnt"
            set !STF_PRODUCT = WINNT
            set !PRODUCT_DIR = WINNT
        else-ifstr(i) $(TempProductType) == "lanmannt"
            set !STF_PRODUCT = LANMANNT
            set !PRODUCT_DIR = NTAS
        else-ifstr(i) $(TempProductType) == "servernt"
            set !STF_PRODUCT = SERVERNT
            set !PRODUCT_DIR = NTAS
        endif
        CloseRegKey $(KeyProductOptions)
    endif
    ifstr(i) $(STF_PRODUCT) == ""
        shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) FATAL $(String14)
        goto patchnotdone
    endif
    ifstr(i) $(!STF_PLATFORM) == I386
        set STF_HALDEST = $(!STF_WINDOWSSYSPATH)
        set STF_OSLDEST = C:\
    else
        read-syms NVRAMVars
        detect    NVRAMVars
        LibraryProcedure STATUS,$(!PATCHLIBHANDLE), GetOsLoaderDest         +
                                                         $(SystemPartition) +
                                                         $(OsLoader)        +
                                                         $(OsLoadPartition) +
                                                         $(OsLoadFilename)
        ifstr(i) $(STATUS) == ERROR
            goto patchnotdone
        else
            set STF_OSLDEST = $(STATUS)
            set STF_HALDEST = $(STATUS)
        endif
    endif
    read-syms FilesKeyedSections
    set KeyedClassKeys  = ^(FileKeyedClasses, 0)
    set KeyedClassFiles = ^(FileKeyedClasses, 1)
    set KeyedClassFilesList = {}
    ForListDo $(KeyedClassKeys)
        set TmpKey       = Files$($)
        set TmpFile      = #(FileKeyedClasses, $($), 1)
        set TmpFilePath  = $($(TmpKey))\$(TmpFile)
        set KeyedClassFilesList = >($(KeyedClassFilesList), $(TmpFilePath))
    EndForListDo
    LibraryProcedure STATUS,$(!PATCHLIBHANDLE), GetFileTypes $(KeyedClassFilesList)
    ifstr(i) $(STATUS) == ERROR
        goto patchnotdone
    else-ifstr(i) $(STATUS) == SETUPLOGNOTPRESENT
        shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) FATAL $(String11)
        goto patchnotdone
    else
        ForListDo $(KeyedClassKeys)
            set $($)Type = *($(STATUS), $(#))
        EndForListDo
    endif
    ifstr(i) $(BillboardPushed) == TRUE
        shell "subroutn.inf" PopBillboard
        set BillboardPushed = FALSE
    endif
    shell "" QueryOkCancel $(String9)
    ifstr(i) $($R1) == "OK"
    else
        set String = $(String12)
        goto finish2
    endif
    shell "subroutn.inf" PushBillboard STATUSDLG $(Billboard2)
    set BillboardPushed = TRUE
    set MoveFileExList  = {}
    read-syms FileSections
    set FileSectionsList = ^(FileSections, 0)
    set FileSource  = $(!STF_SRCDIR)
    ForListDo $(FileSectionsList)
        set FileSection = $($)
        set FileDest    = $($($))
        set FileList    = ^($(FileSection), 0)
        ForListDo $(FileList)
            set FileKey = $($)
            set File    = #($(FileSection), $(FileKey), 2)
            set FileDestFullPath = $(FileDest)\$(File)
            LibraryProcedure STATUS,$(!LIBHANDLE),CheckFileExistance $(FileDestFullPath)
            ifstr(i) $(STATUS) == YES
                LibraryProcedure STATUS, $(!PATCHLIBHANDLE), IsFileOpenedExclusive $(FileDestFullPath)
                ifstr(i) $(STATUS) == ERROR
                    goto patchnotdone
                else
                    ifstr(i) $(STATUS) == "YES"
                        LibraryProcedure NEWFILE, $(!PATCHLIBHANDLE), GenerateTemporary $(FileDest)
                        ifstr(i) $(NEWFILE) == ERROR
                            goto patchnotdone
                        else
                            set FileComp = {$(FileDest)\$(NEWFILE), $(FileDestFullPath)}
                            set MoveFileExList = >($(MoveFileExList), $(FileComp))
                        endif
                    else
                        set NEWFILE = $(File)
                    endif
                    install Install-File
                endif
            endif
        EndForListDo
    EndForListDO
    set FileSource  = $(!STF_SRCDIR)
    ForListDo $(KeyedClassKeys)
        set FileSection = Files$($)
        set FileDest    = $($(FileSection))
        set FileKey     = $($($)Type)
        set KeyedClassChoices = ^(Files$($), 0)
        ifcontains(i) $(FileKey) in $(KeyedClassChoices)
            set File             = #(FileKeyedClasses, $($), 1)
            set FileDestFullPath = $(FileDest)\$(File)
            LibraryProcedure STATUS,$(!LIBHANDLE),CheckFileExistance $(FileDestFullPath)
            ifstr(i) $(STATUS) == YES
                LibraryProcedure STATUS, $(!PATCHLIBHANDLE), IsFileOpenedExclusive $(FileDestFullPath)
                ifstr(i) $(STATUS) == ERROR
                    goto patchnotdone
                else
                    ifstr(i) $(STATUS) == "YES"
                        LibraryProcedure NEWFILE, $(!PATCHLIBHANDLE), GenerateTemporary $(FileDest)
                        ifstr(i) $(NEWFILE) == ERROR
                            goto patchnotdone
                        else
                            set FileComp = {$(FileDest)\$(NEWFILE), $(FileDestFullPath)}
                            set MoveFileExList = >($(MoveFileExList), $(FileComp))
                        endif
                    else
                        set NEWFILE = $(File)
                    endif
                    install Install-File
                endif
            endif
        endif
    EndForListDo
    ifstr(i) $(STF_PRODUCT) == "WINNT"
        set TEMP_PRODUCT = WINNT
    else
        set TEMP_PRODUCT = LANMANNT
    endif
    read-syms FileSections$(TEMP_PRODUCT)
    set FileSectionsList = ^(FileSections$(TEMP_PRODUCT), 0)
    set FileSource  = $(!STF_SRCDIR)$(PRODUCT_DIR)
    ForListDo $(FileSectionsList)
        set FileSection = $($)
        set FileDest    = $($($))
        set FileList    = ^($(FileSection), 0)
        ForListDo $(FileList)
            set FileKey = $($)
            set File    = #($(FileSection), $(FileKey), 2)
            set FileDestFullPath = $(FileDest)\$(File)
            LibraryProcedure STATUS,$(!LIBHANDLE),CheckFileExistance $(FileDestFullPath)
            ifstr(i) $(STATUS) == YES
                LibraryProcedure STATUS, $(!PATCHLIBHANDLE), IsFileOpenedExclusive $(FileDestFullPath)
                ifstr(i) $(STATUS) == ERROR
                    goto patchnotdone
                else
                    ifstr(i) $(STATUS) == "YES"
                        LibraryProcedure NEWFILE, $(!PATCHLIBHANDLE), GenerateTemporary $(FileDest)
                        ifstr(i) $(NEWFILE) == ERROR
                            goto patchnotdone
                        else
                            set FileComp = {$(FileDest)\$(NEWFILE), $(FileDestFullPath)}
                            set MoveFileExList = >($(MoveFileExList), $(FileComp))
                        endif
                    else
                        set NEWFILE = $(File)
                    endif
                    install Install-File
                endif
            endif
        EndForListDo
    EndForListDO
    ifstr(i) $(BillboardPushed) == TRUE
        shell "subroutn.inf" PopBillboard
        set BillboardPushed = FALSE
    endif
    read-syms FileSectionsCopyAlways
    set FileSectionsList = ^(FileSectionsCopyAlways, 0)
    set FileSource  = $(!STF_SRCDIR)
    ForListDo $(FileSectionsList)
        set FileSection = $($)
        set FileDest    = $($($))
        set FileList    = ^($(FileSection), 0)
        ForListDo $(FileList)
            set FileKey = $($)
            set File    = #($(FileSection), $(FileKey), 2)
            set NEWFILE = $(File)
            set FileDestFullPath = $(FileDest)\$(File)
            install Install-File
        EndForListDo
    EndForListDO
    read-syms FileSectionsCopyAlways$(TEMP_PRODUCT)
    set FileSectionsList = ^(FileSectionsCopyAlways$(TEMP_PRODUCT), 0)
    set FileSource  = $(!STF_SRCDIR)$(PRODUCT_DIR)
    ForListDo $(FileSectionsList)
        set FileSection = $($)
        set FileDest    = $($($))
        set FileList    = ^($(FileSection), 0)
        ForListDo $(FileList)
            set FileKey = $($)
            set File    = #($(FileSection), $(FileKey), 2)
            set NEWFILE = $(File)
            set FileDestFullPath = $(FileDest)\$(File)
            install Install-File
        EndForListDo
    EndForListDO
    read-syms ProgressCopy$(!STF_LANGUAGE)
    install   Install-DoCopy
    ifstr(i) $(STF_INSTALL_OUTCOME) == "STF_USERQUIT"
        goto patchnotdone
    else-ifstr(i) $(STF_INSTALL_OUTCOME) == "STF_FAILURE"
        goto patchnotdone
    endif
processmovefileex=+
    ForListDo $(MoveFileExList)
        set ExistingPath = *($($), 1)
        set NewPath      = *($($), 2)
        LibraryProcedure STATUS, $(!PATCHLIBHANDLE), CopyFileOnReboot $(ExistingPath) $(NewPath)
        ifstr(i) $(STATUS) == ERROR
            goto patchnotdone
        endif
    EndForListDo
    ifstr(i) $(!STF_PLATFORM) == I386
        set NtLdrPath = $(STF_OSLDEST)"ntldr"
        LibraryProcedure STATUS, $(!PATCHLIBHANDLE), ForceFileNoCompress $(NtLdrPath)
        ifstr(i) $(STATUS) == ERROR
            goto patchnotdone
        endif
    endif
patchdone =+
    ifstr(i) $(BillboardPushed) == TRUE
        shell "subroutn.inf" PopBillboard
        set BillboardPushed = FALSE
    endif
    shell "" DoRegistryModifications $(!STF_CSDVER)
    read-syms SetupDoneDlg$(!STF_LANGUAGE)
    ui start "SetupDone"
    ifstr(i) $(DLGEVENT) == "CONTINUE"
        ui pop 1
        goto rebootend
    else
        ui pop 1
        goto finish1
    endif
patchnotdone =+
    set String = $(String2)
finish2 =+
    ifstr(i) $(BillboardPushed) == TRUE
        shell "subroutn.inf" PopBillboard
        set BillboardPushed = FALSE
    endif
    shell "subroutn.inf" SetupMessage $(STF_LANGUAGE) "FATAL" $(String)
    goto finish1
finish1 =+
    install   FreeSetupLibrary
finish =+
    install   FreePatchLibrary
    exit
rebootend =+
    set Reboot = YES
    install   Install-Shutdown
    goto finish1
    exit
[LoadPatchLibrary]
    LoadLibrary "x" patchdll.dll !PATCHLIBHANDLE
    exit
[FreePatchLibrary]
    ifstr(i) $(!PATCHLIBHANDLE) != ""
        FreeLibrary $(!PATCHLIBHANDLE)
    endif
    exit
[LoadSetupLibrary]
    LoadLibrary "x" $(!STF_CWDDIR)setupdll.dll !LIBHANDLE
    exit
[FreeSetupLibrary]
    ifstr(i) $(!LIBHANDLE) != ""
        FreeLibrary $(!LIBHANDLE)
    endif
    exit
[Install-File]
    set STF_VITAL = ""
    AddSectionKeyFileToCopyList $(FileSection) $(FileKey) $(FileSource) $(FileDest)
    exit
[Install-DoCopy]
    CopyFilesInCopyList
    exit
[Install-Shutdown]
    LibraryProcedure STATUS,$(!LIBHANDLE),ShutdownSystem $(Reboot)
    exit
[RegistryConstants]
    MaskAllAccess          = 33554432
    NoTitle                = 0
    RegLastError           = $(!REG_ERROR_SUCCESS)
[DoRegistryModifications]
    set Status = STATUS_FAILED
    read-syms RegistryConstants
    set KeyPath   = { +
                     {SOFTWARE,                $(NoTitle), $(MaskAllAccess)}, +
                     {Microsoft,               $(NoTitle), $(MaskAllAccess)}, +
                     {"Windows NT",            $(NoTitle), $(MaskAllAccess)}, +
                     {CurrentVersion,          $(NoTitle), $(MaskAllAccess)}, +
                     {"Time Zones",            $(NoTitle), $(MaskAllAccess)}, +
                     {"E. South America Standard Time",     $(NoTitle), $(MaskAllAccess)}  +
                    }
    set KeyValues = { +
                     {Display, $(NoTitle), $(!REG_VT_SZ), "(GMT-03:00) Brasilia" } +
                    }
    shell "registry.inf" CreateKey $(!REG_H_LOCAL) $(KeyPath) $(KeyValues)
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
        goto endCSDVersionCreate
    endif
    ifstr(i) $($R0) != STATUS_SUCCESSFUL
        goto endCSDVersionCreate
    else
        CloseRegKey $($R1)
    endif
    set KeyPath   = { +
                     {SYSTEM,                  $(NoTitle), $(MaskAllAccess)}, +
                     {ControlSet001,           $(NoTitle), $(MaskAllAccess)}, +
                     {Control,                 $(NoTitle), $(MaskAllAccess)}, +
                     {ServiceGroupOrder,       $(NoTitle), $(MaskAllAccess)}  +
                    }
    set KeyValues = { +
                     {List, $(NoTitle), $(!REG_VT_MULTI_SZ), {                       +
                                                              "System Bus Extender", +
                                                              "SCSI miniport",       +
                                                              "port",                +
                                                              "Primary disk",        +
                                                              "SCSI class",          +
                                                              "SCSI CDROM class",    +
                                                              "filter",              +
                                                              "boot file system",    +
                                                              "Base",                +
                                                              "Pointer Port",        +
                                                              "Keyboard Port",       +
                                                              "Pointer Class",       +
                                                              "Keyboard Class",      +
                                                              "Video Init",          +
                                                              "Video",               +
                                                              "Video Save",          +
                                                              "file system",         +
                                                              "Event log",           +
                                                              "Streams Drivers",     +
                                                              "NDIS",                +
                                                              "TDI",                 +
                                                              "NetBIOSGroup",        +
                                                              "SpoolerGroup",        +
                                                              "NetDDEGroup",         +
                                                              "Parallel arbitrator", +
                                                              "extended base",       +
                                                              "RemoteValidation",    +
                                                              "PCI Configuration"    +
                                                             } }  +
                    }
    shell "registry.inf" CreateKey $(!REG_H_LOCAL) $(KeyPath) $(KeyValues)
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
        goto endCSDVersionCreate
    endif
    ifstr(i) $($R0) != STATUS_SUCCESSFUL
        goto endCSDVersionCreate
    else
        CloseRegKey $($R1)
    endif
    set KeyPath   = { +
                     {SYSTEM,                  $(NoTitle), $(MaskAllAccess)}, +
                     {CurrentControlSet,       $(NoTitle), $(MaskAllAccess)}, +
                     {Control,                 $(NoTitle), $(MaskAllAccess)}, +
                     {Lsa,                     $(NoTitle), $(MaskAllAccess)}  +
                    }
    set KeyValues = { +
                     {UpgradeSam, $(NoTitle), $(!REG_VT_DWORD), 1} +
                    }
    shell "registry.inf" CreateKey $(!REG_H_LOCAL) $(KeyPath) $(KeyValues)
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
        goto endCSDVersionCreate
    endif
    ifstr(i) $($R0) != STATUS_SUCCESSFUL
        goto endCSDVersionCreate
    else
        CloseRegKey $($R1)
    endif
    set KeyPath   = { +
                     {SYSTEM,            $(NoTitle), $(MaskAllAccess)}, +
                     {CurrentControlSet, $(NoTitle), $(MaskAllAccess)}, +
                     {Control,           $(NoTitle), $(MaskAllAccess)}, +
                     {ProductOptions,    $(NoTitle), $(MaskAllAccess)}, +
                    }
    set KeyValues = { +
                     {CSDVersion, $(NoTitle), $(!REG_VT_DWORD), $($0) } +
                    }
    shell "registry.inf" CreateKey $(!REG_H_LOCAL) $(KeyPath) $(KeyValues)
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
        goto endCSDVersionCreate
    endif
    ifstr(i) $($R0) != STATUS_SUCCESSFUL
        goto endCSDVersionCreate
    else
        CloseRegKey $($R1)
    endif
    set Status = STATUS_SUCCESSFUL
endCSDVersionCreate = +
    Return $(Status)
[GetCSDVersion]
    set Status = STATUS_SUCCESSFUL
    read-syms RegistryConstants
    set CSDVersion = 0
    set KeyName = "SYSTEM\CurrentControlSet\Control\ProductOptions"
    OpenRegKey $(!REG_H_LOCAL) "" $(KeyName) $(!REG_KEY_READ) KeyHandle
    ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
        Debug-Output "REGISTRY.INF: Couldn't open windows nt software key for read access"
        goto end_GetCSDVersion
    endif
    GetRegValue $(KeyHandle) "CSDVersion" CSDVersionValue
    ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
        CloseRegKey $(KeyHandle)
        goto end_GetCSDVersion
    endif
    set CSDVersion =  *($(CSDVersionValue), 4)
    CloseRegKey $(KeyHandle)
end_GetCSDVersion = +
    Return $(Status) $(CSDVersion)
[GetCheckedFree]
    set Status = STATUS_SUCCESSFUL
    read-syms RegistryConstants
    set System = Free
    set KeyName = "Software\Microsoft\Windows NT\CurrentVersion"
    OpenRegKey $(!REG_H_LOCAL) "" $(KeyName) $(!REG_KEY_READ) KeyHandle
    ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
        Debug-Output "REGISTRY.INF: Couldn't open windows nt software key for read access"
        goto end_GetCheckedFree
    endif
    GetRegValue $(KeyHandle) "CurrentType" CurrentTypeValue
    ifint $(RegLastError) != $(!REG_ERROR_SUCCESS)
        CloseRegKey $(KeyHandle)
        goto end_GetCheckedFree
    endif
    Split-String *($(CurrentTypeValue), 4) " " CurrentTypeList
    ForListDo $(CurrentTypeList)
       ifstr(i) $($) == "free"
          set System = free
       else-ifstr(i) $($) == "checked"
          set System = checked
       endif
    EndForListDo
    CloseRegKey $(KeyHandle)
end_GetCheckedFree = +
    Return $(Status) $(System)
[QueryOkCancel]
    set DlgText = $($0)
    read-syms QueryOKCancelDlg$(!STF_LANGUAGE)
    ui start "SetupMessage"
    ifstr(i) $(DLGEVENT) == "OK"
        set Status     = STATUS_SUCCESSFUL
        set UserAction = $(DLGEVENT)
    else-ifstr(i) $(DLGEVENT) == "CANCEL"
        set Status     = STATUS_SUCCESSFUL
        set UserAction = $(DLGEVENT)
    else
        set Status     = STATUS_FAILED
        set UserAction = "CANCEL"
    endif
    Return $(Status) $(UserAction)
[Source Media Descriptions]
    1 = "Windows NT Workstation CD-ROM" , TAGFILE = cdrom.w
[Signature]
    FileType = MICROSOFT_FILE
[GetSignature]
    read-syms Signature
    return $(FileType)
[ProductType]
STF_PRODUCT  = Winnt
STF_PLATFORM = I386
[Source Media Descriptions]
    1  = "Windows NT 3.51 Update Disk #1"  , TAGFILE = disk1
    2  = "Windows NT 3.51 Update Disk #2"  , TAGFILE = disk2
    3  = "Windows NT 3.51 Update Disk #3"  , TAGFILE = disk3
    4  = "Windows NT 3.51 Update Disk #4"  , TAGFILE = disk4
    5  = "Windows NT 3.51 Update Disk #5"  , TAGFILE = disk5
    6  = "Windows NT 3.51 Update Disk #6"  , TAGFILE = disk6
    7  = "Windows NT 3.51 Update Disk #7"  , TAGFILE = disk7
    8  = "Windows NT 3.51 Update Disk #8"  , TAGFILE = disk8
    9  = "Windows NT 3.51 Update Disk #9"  , TAGFILE = disk9
    10 = "Windows NT 3.51 Update Disk #10" , TAGFILE = disk10
[Strings]
    String1 = "This update disk cannot be used on this platform."
    String2 = "Setup failed to update the system."
    String3 = "Setup has successfully updated your system."
    String4 = "You do not have permission to update the system.  Please contact your system administrator."
    String5 = "Setup failed to setup your updated files for secure operation."
    String8 = "Setup has detected that the version of the system installed is "+
              "newer than the update you are applying to it.  The update can render "+
              "your system unstartable.  Press OK if you still wish to continue "+
              "or press Cancel to exit Setup."
    String9 = "Setup is going to update your Windows NT system with the English "+
              "version of the update program.  If you wish to cancel the update "+
              "process, please press Cancel or press OK to continue."
    String11 = "Setup couldn't find the setup.log file in your repair directory. "+
               "Setup cannot proceed to update your system.  Please copy the setup.log "+
               "file from your Emergency Repair Disk to your repair directory "+
               "and restart the update."
    String12 = "Setup has not updated your system.  If you wish to update your "+
               "system please run the update utility again."
    String13a = "Not enough hard disk space to run Setup.  Setup needs at least "
    String13b = "MB of free hard disk space on "
    String13c = " before it can be run.  Delete some"+
                " files and run the Update program again."
    String14  = "Setup cannot update your Windows NT files because it could not "+
                "determine your product type.  Your registry may be corrupt."
    String15  = "Setup cannot update your checked system.  The update can only "+
                "be applied to the retail system."
    String16  = "Setup cannot update your Windows NT files because your system is "+
                "NT 3.1 or NT 3.5. Please upgrade your system to the retail Windows NT 3.51, "+
                "and then update your system."
    String17  = "Setup cannot update your Windows NT files because your system is "+
                "a pre-release of NT 3.51. Please upgrade your system to the retail "+
                "Windows NT 3.51, and then update your system."
    String18  = "Setup cannot update your Windows NT files because your system is "+
                "a version later than NT 3.51.  The update can only be applied "+
                "to Windows NT 3.51."
    String19  = "Setup cannot update your Windows NT files because you have installed "+
                "the IBM Power Management version of NT 3.51.  Please see IBM for "+
                "a Service Pack that can be installed on your system."
    Billboard1 = "Please wait..."
    Billboard2 = "Please wait while the files to be updated are determined..."
    Billboard3 = "Please wait while the Emergency Repair Disk is updated..."
[ProgressCopyENG]
    ProCaption   = "Windows NT Setup"
    ProCancel    = "Cancel"
    ProCancelMsg = "The Windows NT 3.51 files are not completely updated.  Are you sure you want "+
                   "to cancel copying files?"
    ProCancelCap = "Setup Message"
    ProText1     = "Copying:"
    ProText2     = "To:"
[SetupDoneDlgENG]
    Caption     = "Windows NT Setup"
    DlgText     = "Windows NT 3.51 has been updated. If you change or add "+
                  "any components to your system, you will need to "+
                  "reapply the update."$(!LF)$(!LF)+
                  "Remove disks from the floppy disk drives and "+
                  "choose Restart Computer to run the updated system."
    Reboot      = "&Restart Computer"
    Windows     = "E&xit to Windows NT"
    DlgType     = "Info"
    DlgTemplate = "REBOOT"
[QueryOKCancelDlgENG]
    STF_MB_TITLE = "Setup Message"
    DlgType      = "MessageBox"
    STF_MB_TEXT  = $(DlgText)
    STF_MB_TYPE  = 2
    STF_MB_ICON  = 4
    STF_MB_DEF   = 1
[ RETURN TO DIRECTORY ]