home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Becoming a Computer Animator
/
COMPANIMATE.ISO
/
pc
/
windemos
/
pcanim
/
setupapi.in_
/
setupapi.bin
Wrap
Text File
|
1993-01-12
|
25KB
|
821 lines
'**************************************************************************
'******************************* Windows API's **************************
'**************************************************************************
GLOBAL hSetup AS INTEGER
GLOBAL fFrameInit AS INTEGER
GLOBAL fInstallInit AS INTEGER
CONST SM_CXSCREEN = 0
CONST SM_CYSCREEN = 1
CONST WF_80x87 = 1024
CONST WF_CPU186 = 128
CONST WF_CPU286 = 2
CONST WF_CPU386 = 4
CONST WF_CPU486 = 8
CONST WF_STANDARD = 16
CONST WF_ENHANCED = 32
'' DoMsgBox Flags
CONST MB_OK = 0
CONST MB_ICONHAND = 16
CONST MB_TASKMODAL = 8192
DECLARE FUNCTION DoMsgBox LIB "mscomstf.dll" (lpText$,lpCaption$,wType%) As INTEGER
DECLARE FUNCTION GetWindowsDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
DECLARE FUNCTION GetSystemDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
DECLARE FUNCTION GetWindowsSysDir AS STRING
DECLARE FUNCTION GetVersion LIB "kernel" AS INTEGER
DECLARE FUNCTION GetWinFlags LIB "kernel" AS LONG
'**************************************************************************
'****************************** Setup Constants ***************************
'**************************************************************************
''Command Option Flags
CONST cmoVital = 1
CONST cmoCopy = 2
CONST cmoUndo = 4
CONST cmoRoot = 8
CONST cmoDecompress = 16
CONST cmoTimeStamp = 32
CONST cmoReadOnly = 64
CONST cmoBackup = 128
CONST cmoForce = 256
CONST cmoRemove = 512
CONST cmoOverwrite = 1024
CONST cmoAppend = 2048
CONST cmoPrepend = 4096
CONST cmoNone = 0
CONST cmoAll = 65535
''File Exist Modes
CONST femExists = 0
CONST femRead = 1
CONST femWrite = 2
CONST femReadWrite = 3
''Read-Only Return Code
CONST ynrcNo = 0
CONST ynrcYes = 1
CONST ynrcErr1 = 2
CONST ynrcErr2 = 3
CONST ynrcErr3 = 4
CONST ynrcErr4 = 5
CONST ynrcErr5 = 6
CONST ynrcErr6 = 7
CONST ynrcErr7 = 8
CONST ynrcErr8 = 9
CONST ynrcErr9 = 10
''General Return Codes
CONST grcOkay = 0
CONST grcNotOkay = 1
CONST grcUserQuit = 48
''Ranges
''CONST cbSymValMax = 8192
CONST cbSymValMax = 512
''REVIEW: symbol table will allow strings up to 8192 bytes
'' but we get Out of String Space wattdrvr error if we alloc
'' STRING$() that big. (See GetSymbolValue and GetListItem)
'' We should look into using dynamic far alloc instead of
'' STRING$ for large buffers.
'' NOTE: 8192 works okay with runtime wattdrvr, however.
''ON ERROR Error Codes
CONST STFERR = 1024 ''setup system error
CONST STFQUIT = 1025 ''user quit
CONST scmOff = 0
CONST scmOnIgnore = 1
CONST scmOnFatal = 2
'**************************************************************************
'******************************** Setup API's ***************************
'**************************************************************************
'' common
DECLARE FUNCTION FOpenInf LIB "mscomstf.dll" (szFile$, fCheck%, fCheckSyms%) AS INTEGER
DECLARE FUNCTION FSetSilent LIB "mscomstf.dll" (mode%) AS INTEGER
DECLARE FUNCTION FSetBeepingMode LIB "mscomstf.dll" (mode%) AS INTEGER
DECLARE FUNCTION HShowWaitCursor LIB "msshlstf.dll" AS INTEGER
''shell
DECLARE FUNCTION FSetBitmap LIB "msshlstf.dll" (szDll$, Bitmap%) AS INTEGER
DECLARE FUNCTION FSetAbout LIB "msshlstf.dll" (szAbout1$, szAbout2$) AS INTEGER
DECLARE FUNCTION FDoDialog LIB "msuilstf.dll" (hwnd%, szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS INTEGER
DECLARE FUNCTION FKillNDialogs LIB "msuilstf.dll" (n%) AS INTEGER
DECLARE SUB SetWindowText LIB "User" (hwnd%, lpString$)
DECLARE FUNCTION FSetSymbolValue LIB "msshlstf.dll" (szSymbol$, szValue$) AS INTEGER
DECLARE FUNCTION CbGetSymbolValue LIB "mscomstf.dll" (szSymbol$, szValue$, Length%) AS INTEGER
DECLARE FUNCTION UsGetListLength LIB "mscomstf.dll" (szSymbol$) AS INTEGER
DECLARE FUNCTION CbGetListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$, cbMax%) AS INTEGER
DECLARE FUNCTION FAddListItem LIB "mscomstf.dll" (szListSymbol$, szListItem$) AS INTEGER
DECLARE FUNCTION FReplaceListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$) AS INTEGER
''shell
DECLARE FUNCTION InitializeFrame LIB "msshlstf.dll" (szCmdLine$) AS INTEGER
DECLARE FUNCTION HwndFrame LIB "msshlstf.dll" AS INTEGER
DECLARE FUNCTION HinstFrame LIB "msshlstf.dll" AS INTEGER
''install
DECLARE FUNCTION FCreateDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
DECLARE FUNCTION FAddSectionFilesToCopyList LIB "mscomstf.dll" (szSect$, szSrc$, szDest$) AS INTEGER
DECLARE FUNCTION GrcCopyFilesInCopyList LIB "msinsstf.dll" (hInstance%) AS INTEGER
DECLARE FUNCTION FCreateIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
DECLARE FUNCTION FCreateProgManGroup LIB "msinsstf.dll" (szGroup$, szPath$, cmo%) AS INTEGER
DECLARE FUNCTION FCreateProgManItem LIB "msinsstf.dll" (szGroup$, szItem$, szCmd$, cmo%) AS INTEGER
DECLARE FUNCTION FShowProgManGroup LIB "msinsstf.dll" (szGroup$, szCmd$, cmo%) AS INTEGER
DECLARE SUB ResetCopyList LIB "msinsstf.dll"
DECLARE FUNCTION LcbGetCopyListCost LIB "msinsstf.dll" (szExtraList$, szCostList$, szNeedList$) AS LONG
DECLARE FUNCTION FInitializeInstall LIB "msinsstf.dll" (hinst%, hwndFrame%) AS INTEGER
DECLARE FUNCTION FIsDirWritable LIB "msinsstf.dll" (szDir$) AS INTEGER
DECLARE FUNCTION SetSizeCheckMode LIB "msinsstf.dll" (scmMode%) AS INTEGER
'*************************************************************************
'**************** Setup Basic Wrapper Declarations *********************
'*************************************************************************
''shell
DECLARE SUB SetBitmap(szDll$, Bitmap%)
DECLARE SUB SetAbout(szAbout1$, szAbout2$)
DECLARE FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS STRING
DECLARE SUB UIPop (n%)
DECLARE SUB UIPopAll
DECLARE SUB SetTitle (sz$)
DECLARE SUB ReadInfFile (szFile$)
DECLARE SUB SetSymbolValue (szSymbol$, szValue$)
DECLARE FUNCTION GetSymbolValue (szSymbol$) AS STRING
DECLARE FUNCTION GetListLength(szSymbol$) AS INTEGER
DECLARE FUNCTION GetListItem(szSymbol$, n%) AS STRING
DECLARE SUB AddListItem(szSymbol$, szItem$)
DECLARE SUB ReplaceListItem(szSymbol$, n%, szItem$)
DECLARE FUNCTION InitFrame (szCmdLine$) AS INTEGER
DECLARE FUNCTION InitSetup (szCmdLine$) AS INTEGER
''install
DECLARE SUB CreateDir (szDir$, cmo%)
DECLARE SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$)
DECLARE SUB CopyFilesInCopyList
DECLARE SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
DECLARE SUB CreateProgmanGroup (szGroup$, szPath$, cmo%)
DECLARE SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%)
DECLARE SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%)
DECLARE SUB ClearCopyList
DECLARE FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) AS LONG
DECLARE SUB InitInstall
DECLARE FUNCTION IsDirWritable (szDir$) AS INTEGER
'' Error Handling
'$ifdef DEBUG
'' Setup API Errors
CONST saeFail = 0
CONST saeInit = 1
CONST saeNYI = 3
CONST saeArg = 4 ''must be max sae value
DECLARE SUB StfApiErr (nMsg%, szApi$, szArgs$)
DECLARE SUB BadArgErr (nArg%, szApi$, szArgs$)
'' chk arg
DECLARE FUNCTION FValidFATDir LIB "mscomstf.dll" (szDir$) AS INTEGER
DECLARE FUNCTION CchlValidFATSubPath LIB "mscomstf.dll" (szPath$) AS INTEGER
DECLARE FUNCTION FValidFATPath LIB "mscomstf.dll" (szPath$) AS INTEGER
DECLARE FUNCTION FValidInfSect (szSect$) AS INTEGER
DECLARE FUNCTION FValidIniFile (szFile$) AS INTEGER
'$endif ''DEBUG
'' Windows system detect
DECLARE FUNCTION GetWindowsMajorVersion AS INTEGER
DECLARE FUNCTION GetWindowsMinorVersion AS INTEGER
DECLARE FUNCTION GetWindowsMode AS INTEGER
DECLARE FUNCTION GetWindowsDir AS STRING
'*************************************************************************
'***************** Setup Basic Wrapper Definitions *********************
'*************************************************************************
FUNCTION InitSetup(szCmdLine$) STATIC AS INTEGER
fFrameInit = 0
fInstallInit = 0
IF hSetup > 0 THEN
'$ifdef DEBUG
StfApiErr saeInit, "InitSetup", szCmdLine$
'$endif ''DEBUG
END IF
i% = InitFrame(szCmdLine$)
fFrameInit = 1
InitInstall
fInstallInit = 1
InitSetup = i%
END FUNCTION
'**************************************************************************
FUNCTION InitFrame(szCmdLine$) STATIC AS INTEGER
IF hSetup > 0 THEN
'$ifdef DEBUG
StfApiErr saeInit, "InitFrame", szCmdLine$
'$endif ''DEBUG
ELSE
i% = InitializeFrame(szCmdLine$)
IF i% = -1 THEN
END '' NOT an error - Usage (/?) or Command line copy operation
ELSEIF i% = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "InitFrame", szCmdLine$
'$endif ''DEBUG
END
ELSE
InitFrame = i%
END IF
END IF
END FUNCTION
'**************************************************************************
SUB SetBitmap(szDll$, Bitmap%) STATIC
IF FSetBitmap(szDll$, Bitmap%) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "SetBitmap", szDll$+","+STR$(Bitmap%)
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'**************************************************************************
SUB SetAbout(szAbout1$, szAbout2$) STATIC
IF FSetAbout(szAbout1$, szAbout2$) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "SetAbout", szAbout1$ + "," + szAbout2$
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
SUB SetTitle(sz$) STATIC
SetWindowText HwndFrame(), sz$
END SUB
'*************************************************************************
SUB ReadInfFile (szFile$) STATIC
'$ifdef DEBUG
if FValidFATPath(szFile$) = 0 then
BadArgErr 1, "ReadInfFile", szFile$
end if
IF FOpenInf(szFile$, 1, 1) = 0 THEN
StfApiErr saeFail, "ReadInfFile", szFile$
'$else ''!DEBUG
IF FOpenInf(szFile$, 1, 0) = 0 THEN
'$endif ''!DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) STATIC AS STRING
'$ifdef DEBUG
if szDll$ = "" then
n% = 1
elseif szDlgProc$ = "" then
n% = 3
else
n% = 0
end if
if n% > 0 then
BadArgErr n%, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
end if
'$endif ''DEBUG
IF FDoDialog(HwndFrame(), szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
'$endif ''DEBUG
ERROR STFERR
ELSE
UIStartDlg = GetSymbolValue("DLGEVENT")
END IF
END FUNCTION
'*************************************************************************
SUB UIPop (n%) STATIC
IF FKillNDialogs(n%) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "UIPop", STR$(n%)
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
SUB UIPopAll STATIC
IF FKillNDialogs(65535) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "UIPopAll", ""
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
FUNCTION GetSymbolValue(szSymbol$) STATIC AS STRING
'$ifdef DEBUG
if szSymbol$ = "" then
BadArgErr 1, "GetSymbolValue", szSymbol$
end if
'$endif ''DEBUG
szValue$ = string$(cbSymValMax,32)
Length% = CbGetSymbolValue(szSymbol$, szValue$, cbSymValMax)
GetSymbolValue = szValue$
IF Length% >= cbSymValMax THEN
res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
ERROR STFERR
END IF
IF szSymbol$ = "" THEN
ERROR STFERR
END IF
szValue$ = ""
END FUNCTION
'*************************************************************************
FUNCTION GetListLength(szSymbol$) STATIC AS INTEGER
'$ifdef DEBUG
if szSymbol$ = "" then
BadArgErr 1, "GetListLength", szSymbol$
end if
'$endif ''DEBUG
GetListLength = UsGetListLength(szSymbol$)
IF szSymbol$ = "" THEN
ERROR STFERR
END IF
END FUNCTION
'*************************************************************************
FUNCTION GetListItem(szListSymbol$, nItem%) STATIC AS STRING
'$ifdef DEBUG
if szListSymbol$ = "" then
BadArgErr 1, "GetListItem", szListSymbol$+", "+STR$(nItem%)
end if
if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
BadArgErr 2, "GetListItem", szListSymbol$+", "+STR$(nItem%)
end if
'$endif ''DEBUG
szListItem$ = string$(cbSymValMax,32)
Length% = CbGetListItem(szListSymbol$, nItem%, szListItem$, cbSymValMax)
GetListItem = szListItem$
IF Length% >= cbSymValMax THEN
res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
ERROR STFERR
END IF
IF szListSymbol$ = "" THEN
ERROR STFERR
END IF
if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
ERROR STFERR
end if
szListItem$ = ""
END FUNCTION
'*************************************************************************
SUB AddListItem(szSymbol$, szItem$) STATIC
'$ifdef DEBUG
if szSymbol$ = "" then
BadArgErr 1, "AddListItem", szSymbol$+", "+szItem$
end if
'$endif ''DEBUG
IF FAddListItem(szSymbol$, szItem$) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "AddListItem", szSymbol$+", "+szItem$
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
SUB ReplaceListItem(szSymbol$, n%, szItem$) STATIC
'$ifdef DEBUG
if szSymbol$ = "" then
nArg% = 1
elseif (n% <= 0) OR (n% > GetListLength(szSymbol$)) then
nArg% = 2
else
nArg% = 0
end if
if nArg% > 0 then
BadArgErr nArg%, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
end if
'$endif ''DEBUG
IF FReplaceListItem(szSymbol$, n%, szItem$) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
SUB SetSymbolValue(szSymbol$, szValue$) STATIC
'$ifdef DEBUG
if szSymbol$ = "" then
BadArgErr 1, "SetSymbolValue", szSymbol$+", "+szValue$
end if
'$endif ''DEBUG
IF FSetSymbolValue(szSymbol$, szValue$) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "SetSymbolValue", szSymbol$+", "+szValue$
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
SUB InitInstall STATIC
IF hSetup > 0 THEN
'$ifdef DEBUG
StfApiErr saeInit, "InitInstall", ""
'$endif ''DEBUG
ELSEIF FInitializeInstall(HinstFrame(), HwndFrame()) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "InitInstall", ""
'$endif ''DEBUG
END
END IF
END SUB
'*************************************************************************
SUB CreateDir (szDir$, cmo%) STATIC
'$ifdef DEBUG
if FValidFATDir(szDir$) = 0 then
BadArgErr 1, "CreateDir", szDir$+", "+STR$(cmo%)
end if
'$endif ''DEBUG
IF FCreateDir(szDir$, cmo%) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "CreateDir", szDir$+", "+STR$(cmo%)
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
'$ifdef DEBUG
if FValidIniFile(szFile$) = 0 then
n% = 1
elseif FValidInfSect(szSect$) = 0 then
n% = 2
else
n% = 0
end if
if n% > 0 then
BadArgErr n%, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
end if
'$endif ''DEBUG
IF FCreateIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
SUB CreateProgmanGroup (szGroup$, szPath$, cmo%) STATIC
'$ifdef DEBUG
if szGroup$ = "" or len(szGroup$) > 24 then
BadArgErr 1, "CreateProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
end if
'$endif ''DEBUG
IF FCreateProgManGroup(szGroup$, szPath$, cmo%) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "CreateProgmanGroup", szGroup$+", "+szPath$+", "+STR$(cmo%)
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%) STATIC
'$ifdef DEBUG
if szGroup$ = "" or len(szGroup$) > 24 then
BadArgErr 1, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
end if
'$endif ''DEBUG
IF FShowProgManGroup(szGroup$, STR$(Cmd%), cmo%) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
SUB ClearCopyList STATIC
ResetCopyList
END SUB
'*************************************************************************
FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) STATIC AS LONG
lNeed& = LcbGetCopyListCost (szExtraList$, szCostList$, szNeedList$)
IF lNeed& < 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "GetCopyListCost", szExtraList$+", "+szCostList$+", "+szNeedList$
'$endif ''DEBUG
ERROR STFERR
END IF
GetCopyListCost = lNeed&
END FUNCTION
'*************************************************************************
SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%) STATIC
szItemNew$ = szItem$
IF szOther$ <> "" THEN
szItemNew$ = szItem$ + "," + szOther$
END IF
'$ifdef DEBUG
if szGroup$ = "" or len(szGroup$) > 24 then
BadArgErr 1, "CreateProgmanItem", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
end if
'$endif ''DEBUG
IF FCreateProgManItem(szGroup$, szItemNew$, szCmd$, cmo%) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "CreateProgmanItem", szGroup$+", "+szItem$+", "+szCmd$+", "+szOther$+", "+STR$(cmo%)
'$endif ''DEBUG
ERROR STFERR
END IF
szItemNew$ = ""
END SUB
'*************************************************************************
SUB CopyFilesInCopyList STATIC
grc% = GrcCopyFilesInCopyList (HinstFrame())
IF grc% = grcUserQuit THEN
ERROR STFQUIT
ELSEIF grc% > 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "CopyFilesInCopyList", ""
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$) STATIC
'$ifdef DEBUG
if FValidInfSect(szSect$) = 0 then
n% = 1
elseif FValidFATDir(szSrc$) = 0 then
n% = 2
elseif FValidFATDir(szDest$) = 0 then
n% = 3
else
n% = 0
end if
if n% > 0 then
BadArgErr n%, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
end if
'$endif ''DEBUG
IF FAddSectionFilesToCopyList (szSect$, szSrc$, szDest$) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
FUNCTION IsDirWritable (szDir$) STATIC AS INTEGER
IsDirWritable = FIsDirWritable(szDir$)
END FUNCTION
'*************************************************************************
FUNCTION GetWindowsMajorVersion STATIC AS INTEGER
GetWindowsMajorVersion = GetVersion() MOD 256
END FUNCTION
'*************************************************************************
FUNCTION GetWindowsMinorVersion STATIC AS INTEGER
GetWindowsMinorVersion = GetVersion() / 256
END FUNCTION
'*************************************************************************
FUNCTION GetWindowsMode STATIC AS INTEGER
GetWindowsMode = 0
longTmp& = GetWinFlags()
IF longTmp& AND WF_STANDARD THEN
GetWindowsMode = 1
ELSEIF longTmp& AND WF_ENHANCED THEN
GetWindowsMode = 2
END IF
END FUNCTION
'*************************************************************************
FUNCTION GetWindowsDir STATIC AS STRING
szBuf$ = string$(256, 32)
cbBuf% = GetWindowsDirectory(szBuf$, 256)
IF cbBuf% = 0 THEN
GetWindowsDir = ""
'$ifdef DEBUG
StfApiErr saeFail, "GetWindowsDir", ""
'$endif ''DEBUG
ERROR STFERR
ELSE
IF cbBuf% > 255 THEN
res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
ERROR STFERR
END IF
szBuf$ = RTRIM$(szBuf$)
IF MID$(szBuf$, 1, 1) = "\" THEN
'szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
szBuf$ = MID$(GetWindowsSysDir, 1, 2) + szBuf$
ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
szBuf$ = MID$(GetWindowsSysDir, 1, 3) + szBuf$
END IF
IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
szBuf$ = szBuf$ + "\"
END IF
GetWindowsDir = szBuf$
END IF
szBuf$ = ""
END FUNCTION
'*************************************************************************
FUNCTION GetWindowsSysDir STATIC AS STRING
szBuf$ = string$(256, 32)
cbBuf% = GetSystemDirectory(szBuf$, 256)
IF cbBuf% = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "GetWindowsSysDir", ""
'$endif ''DEBUG
ERROR STFERR
ELSE
IF cbBuf% > 255 THEN
res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
ERROR STFERR
END IF
szBuf$ = RTRIM$(szBuf$)
IF MID$(szBuf$, 1, 1) = "\" THEN
szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
END IF
IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
szBuf$ = szBuf$ + "\"
END IF
GetWindowsSysDir = szBuf$
END IF
szBuf$ = ""
END FUNCTION
'**************************************************************************
'*************************** Error Handlers *****************************
'**************************************************************************
'$ifdef DEBUG
'**************************************************************************
SUB StfApiErr (nMsg%, szApi$, szArgs$) STATIC ''DEBUG only
select case nMsg%
case saeFail
lpText$ = "Failed"
case saeInit
lpText$ = "Already Initialized"
case saeNYI
lpText$ = "NYI"
case else
lpText$ = "Bad Arg "+LTRIM$(STR$(nMsg% - saeArg))
end select
lpText$ = lpText$ + ": "+ szApi$
if szArgs$ <> "" then
lpText$ = lpText + " (" + szArgs$ + ")"
end if
lpCaption$ = "MS-Setup Toolkit API Error"
res% = DoMsgBox(lpText$, lpCaption$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
print lpText$
lpText$ = ""
lpCaption$ = ""
END SUB
'**************************************************************************
SUB BadArgErr (nArg%, szApi$, szArgs$) STATIC ''DEBUG only
StfApiErr nArg%+saeArg, szApi$, szArgs$
ERROR STFERR
END SUB
'** REVIEW: Move this function into common lib (we'll need it there too)
'**************************************************************************
FUNCTION FValidInfSect (szSect$) STATIC AS INTEGER
if (szSect$ = "") OR (INSTR(1,szSect$,"]") <> 0) then
FValidInfSect = 0
else
FValidInfSect = 1
end if
END FUNCTION
'** REVIEW: Move this function into common lib (we'll need it there too)
'**************************************************************************
FUNCTION FValidIniFile (szFile$) STATIC AS INTEGER
if (FValidFATPath(szFile$) = 0) AND (UCASE$(szFile$) <> "WIN.INI") then
FValidIniFile = 0
else
FValidIniFile = 1
end if
END FUNCTION
'$endif ''DEBUG
TRAP CleanupTrap From "MSSHLSTF.DLL"
End Trap
hSetup = InitSetup(COMMAND$)
ON ERROR GOTO QUIT