SETUPAPI.INC
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:56k
源码类别:

Windows编程

开发平台:

Visual C++

  1. '**************************************************************************
  2. '*******************************  Windows API's  **************************
  3. '**************************************************************************
  4. GLOBAL hSetup AS INTEGER
  5. GLOBAL fFrameInit AS INTEGER
  6. GLOBAL fInstallInit AS INTEGER
  7. CONST SM_CXSCREEN = 0
  8. CONST SM_CYSCREEN = 1
  9. CONST WF_80x87    = 1024
  10. CONST WF_CPU186   =  128
  11. CONST WF_CPU286   =    2
  12. CONST WF_CPU386   =    4
  13. CONST WF_CPU486   =    8
  14. CONST WF_STANDARD =   16
  15. CONST WF_ENHANCED =   32
  16. '' DoMsgBox Flags
  17. CONST MB_OK          = 0
  18. CONST MB_ICONHAND    = 16
  19. CONST MB_TASKMODAL   = 8192
  20. DECLARE FUNCTION DoMsgBox LIB "mscomstf.dll" (lpText$,lpCaption$,wType%) As INTEGER
  21. DECLARE FUNCTION GetWindowsDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  22. DECLARE FUNCTION GetSystemDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  23. DECLARE FUNCTION GetProfileString LIB "kernel" (szSect$, szKey$, szDefault$, szBuf$, cbBuf%) AS INTEGER
  24. DECLARE FUNCTION GetVersion LIB "kernel" AS INTEGER
  25. DECLARE FUNCTION GetSystemMetrics LIB "user" (nIndex%) AS INTEGER
  26. DECLARE FUNCTION GetWinFlags LIB "kernel" AS LONG
  27. '**************************************************************************
  28. '****************************** Setup Constants ***************************
  29. '**************************************************************************
  30. ''Command Option Flags
  31. CONST cmoVital       = 1
  32. CONST cmoCopy        = 2
  33. CONST cmoUndo        = 4
  34. CONST cmoRoot        = 8
  35. CONST cmoDecompress  = 16
  36. CONST cmoTimeStamp   = 32
  37. CONST cmoReadOnly    = 64
  38. CONST cmoBackup      = 128
  39. CONST cmoForce       = 256
  40. CONST cmoRemove      = 512
  41. CONST cmoOverwrite   = 1024
  42. CONST cmoAppend      = 2048
  43. CONST cmoPrepend     = 4096
  44. CONST cmoNone        = 0
  45. CONST cmoAll         = 65535
  46. ''File Exist Modes
  47. CONST femExists     = 0
  48. CONST femRead       = 1
  49. CONST femWrite      = 2
  50. CONST femReadWrite  = 3
  51. ''Read-Only Return Code
  52. CONST ynrcNo         = 0
  53. CONST ynrcYes        = 1
  54. CONST ynrcErr1       = 2
  55. CONST ynrcErr2       = 3
  56. CONST ynrcErr3       = 4
  57. CONST ynrcErr4       = 5
  58. CONST ynrcErr5       = 6
  59. CONST ynrcErr6       = 7
  60. CONST ynrcErr7       = 8
  61. CONST ynrcErr8       = 9
  62. CONST ynrcErr9       = 10
  63. ''General Return Codes
  64. CONST grcOkay       = 0
  65. CONST grcNotOkay    = 1
  66. CONST grcUserQuit   = 48
  67. ''Ranges
  68. ''CONST cbSymValMax = 8192
  69. CONST cbSymValMax = 512
  70.     ''REVIEW: symbol table will allow strings up to 8192 bytes
  71.     '' but we get Out of String Space wattdrvr error if we alloc
  72.     '' STRING$() that big. (See GetSymbolValue and GetListItem)
  73.     '' We should look into using dynamic far alloc instead of
  74.     '' STRING$ for large buffers.
  75.     '' NOTE: 8192 works okay with runtime wattdrvr, however.
  76. ''ON ERROR Error Codes
  77. CONST STFERR      = 1024   ''setup system error
  78. CONST STFQUIT     = 1025   ''user quit
  79. CONST scmOff      = 0
  80. CONST scmOnIgnore = 1
  81. CONST scmOnFatal  = 2
  82. '**************************************************************************
  83. '********************************  Setup API's  ***************************
  84. '**************************************************************************
  85. '' common
  86. DECLARE FUNCTION FParseFATPathIntoPieces LIB "mscomstf.dll" (szPath$, szVol$, cbVol%, szDir$, cbDir%, szFile$, cbFile%) AS INTEGER
  87. DECLARE FUNCTION FOpenInf LIB "mscomstf.dll" (szFile$, fCheck%, fCheckSyms%) AS INTEGER
  88. DECLARE FUNCTION FSetSilent LIB "mscomstf.dll" (mode%) AS INTEGER
  89. DECLARE FUNCTION FSetBeepingMode LIB "mscomstf.dll" (mode%) AS INTEGER
  90. DECLARE FUNCTION HShowWaitCursor LIB "msshlstf.dll" AS INTEGER
  91. DECLARE FUNCTION FRestoreCursor  LIB "msshlstf.dll" (hPrev%) AS INTEGER
  92. DECLARE FUNCTION FOpenLogFile    LIB "mscomstf.dll" (szFile$, fAppend%) AS INTEGER
  93. DECLARE FUNCTION FCloseLogFile   LIB "mscomstf.dll" AS INTEGER
  94. DECLARE FUNCTION FWriteToLogFile LIB "mscomstf.dll" (sz$, fRequire%) AS INTEGER
  95. DECLARE FUNCTION CbGetInfSectionKeyField LIB "mscomstf.dll" (szSect$, szKey$, iField%, szBuf$, cbBuf%) AS INTEGER
  96. DECLARE FUNCTION FMakeListInfSectionField LIB "mscomstf.dll" (szSym$, szSect$, iField%) AS INTEGER
  97. DECLARE FUNCTION PbSaveMemInf  LIB "mscomstf.dll" AS LONG
  98. DECLARE SUB      RestoreMemInf LIB "mscomstf.dll" (pb&)
  99. DECLARE SUB      FreeMemInf    LIB "mscomstf.dll" (pb&)
  100. ''shell
  101. DECLARE FUNCTION FSetBitmap LIB "msshlstf.dll" (szDll$, Bitmap%) AS INTEGER
  102. DECLARE FUNCTION FSetAbout LIB "msshlstf.dll" (szAbout1$, szAbout2$) AS INTEGER
  103. DECLARE FUNCTION FDoDialogExt LIB "msuilstf.dll" (hwnd%, szDll$, Dlg%, szDlgProc$, szHelpDll$, HelpDlg%, szHelpProc$) AS INTEGER
  104. DECLARE FUNCTION FKillNDialogs LIB "msuilstf.dll" (n%) AS INTEGER
  105. DECLARE SUB SetWindowText LIB "User" (hwnd%, lpString$)
  106. DECLARE FUNCTION FSetSymbolValue LIB "msshlstf.dll" (szSymbol$, szValue$) AS INTEGER
  107. DECLARE FUNCTION FRemoveSymbol LIB "mscomstf.dll" (szSym$) AS INTEGER
  108. DECLARE FUNCTION CbGetSymbolValue LIB "mscomstf.dll" (szSymbol$, szValue$, Length%) AS INTEGER
  109. DECLARE FUNCTION UsGetListLength LIB "mscomstf.dll" (szSymbol$) AS INTEGER
  110. DECLARE FUNCTION CbGetListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$, cbMax%) AS INTEGER
  111. DECLARE FUNCTION FAddListItem LIB "mscomstf.dll" (szListSymbol$, szListItem$) AS INTEGER
  112. DECLARE FUNCTION FReplaceListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$) AS INTEGER
  113. DECLARE FUNCTION FSetSymbolToListOfInfKeys LIB "mscomstf.dll" (szSym$, szSect$, fNulls%) AS INTEGER
  114. ''shell
  115. DECLARE FUNCTION InitializeFrame LIB "msshlstf.dll" (szCmdLine$) AS INTEGER
  116. DECLARE FUNCTION HwndFrame LIB "msshlstf.dll" AS INTEGER
  117. DECLARE FUNCTION HinstFrame LIB "msshlstf.dll" AS INTEGER
  118. ''install
  119. DECLARE SUB      ProSetPos LIB "msinsstf.dll" (x%, y%)
  120. DECLARE FUNCTION FCreateDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  121. DECLARE FUNCTION FRemoveDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  122. DECLARE FUNCTION FAddSectionFilesToCopyList LIB "mscomstf.dll" (szSect$, szSrc$, szDest$) AS INTEGER
  123. DECLARE FUNCTION FAddSectionKeyFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  124. DECLARE FUNCTION FAddSpecialFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  125. DECLARE FUNCTION GrcCopyFilesInCopyList LIB "msinsstf.dll" (hInstance%) AS INTEGER
  126. DECLARE FUNCTION FRemoveIniSection LIB "msinsstf.dll" (szFile$, szSect$, cmo%) AS INTEGER
  127. DECLARE FUNCTION FCreateIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  128. DECLARE FUNCTION FRemoveIniKey LIB "msinsstf.dll" (szFile$, szSect$, szKey$, cmo%) AS INTEGER
  129. DECLARE FUNCTION FCreateSysIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  130. DECLARE FUNCTION FCreateProgManGroup LIB "msinsstf.dll" (szGroup$, szPath$, cmo%) AS INTEGER
  131. DECLARE FUNCTION FCreateProgManItem LIB "msinsstf.dll" (szGroup$, szItem$, szCmd$, cmo%) AS INTEGER
  132. DECLARE FUNCTION FShowProgManGroup LIB "msinsstf.dll" (szGroup$, szCmd$, cmo%) AS INTEGER
  133. DECLARE FUNCTION FStampResource LIB "msinsstf.dll" (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) AS INTEGER
  134. DECLARE FUNCTION FDumpCopyListToFile LIB "msinsstf.dll" (szFile$) AS INTEGER
  135. DECLARE SUB      ResetCopyList LIB "msinsstf.dll"
  136. DECLARE FUNCTION LcbGetCopyListCost LIB "msinsstf.dll" (szExtraList$, szCostList$, szNeedList$) AS LONG
  137. DECLARE FUNCTION FAddDos5Help LIB "msinsstf.dll" (szProgName$, szProgHelp$, cmo%) AS INTEGER
  138. DECLARE FUNCTION FCopyOneFile LIB "msinsstf.dll" (szSrc$, szDest$, cmo%, fAppend%) AS INTEGER
  139. DECLARE FUNCTION YnrcRemoveFile LIB "msinsstf.dll" (szFullPathSrc$, cmo%) AS INTEGER
  140. DECLARE FUNCTION YnrcBackupFile LIB "msinsstf.dll" (szFullPath$, szBackup$, cmo%) AS INTEGER
  141. DECLARE FUNCTION FInitializeInstall LIB "msinsstf.dll" (hinst%, hwndFrame%) AS INTEGER
  142. DECLARE FUNCTION WFindFileUsingFileOpen LIB "msinsstf.dll" (szFile$, szBuf$, cbBuf%) AS INTEGER
  143. DECLARE FUNCTION FIsDirWritable LIB "msinsstf.dll" (szDir$) AS INTEGER
  144. DECLARE FUNCTION FIsFileWritable LIB "msinsstf.dll" (szFile$) AS INTEGER
  145. DECLARE FUNCTION FAddToBillboardList LIB "msinsstf.dll" (szDll$, idDlg%, szProc$, lTicks&) AS INTEGER
  146. DECLARE FUNCTION FClearBillboardList LIB "msinsstf.dll" AS INTEGER
  147. DECLARE FUNCTION FSetRestartDir LIB "msinsstf.dll" (szDir$) AS INTEGER
  148. DECLARE FUNCTION FRestartListEmpty LIB "msinsstf.dll" AS INTEGER
  149. DECLARE FUNCTION FExitExecRestart LIB "msinsstf.dll" AS INTEGER
  150. DECLARE FUNCTION SetCopyMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  151. DECLARE FUNCTION GetCopyMode LIB "msinsstf.dll" AS INTEGER
  152. DECLARE FUNCTION SetDecompMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  153. DECLARE FUNCTION GetDecompMode LIB "msinsstf.dll" AS INTEGER
  154. DECLARE FUNCTION SetSizeCheckMode LIB "msinsstf.dll" (scmMode%) AS INTEGER
  155. DECLARE FUNCTION FPrependToPath LIB "msinsstf.dll" (szSrc$, szDst$, szDir$, cmo%) AS INTEGER
  156. DECLARE FUNCTION SetTimeValue LIB "msinsstf.dll" (usHours%, usMinutes%, usSeconds%) AS INTEGER
  157. DECLARE SUB ForceRestartOn LIB "msinsstf.dll"
  158. '*************************************************************************
  159. '****************  Setup Basic Wrapper Declarations  *********************
  160. '*************************************************************************
  161. ''shell
  162. DECLARE SUB SetBitmap(szDll$, Bitmap%)
  163. DECLARE SUB SetAbout(szAbout1$, szAbout2$)
  164. DECLARE FUNCTION UIStartDlgExt(szDll$, Dlg%, szDlgProc$, szHelpDll$, HelpDlg%, szHelpProc$) AS STRING
  165. DECLARE FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS STRING
  166. DECLARE SUB UIPop (n%)
  167. DECLARE SUB UIPopAll
  168. DECLARE SUB SetTitle (sz$)
  169. DECLARE SUB ReadInfFile (szFile$)
  170. DECLARE SUB SetSymbolValue (szSymbol$, szValue$)
  171. DECLARE SUB RemoveSymbol (szSym$)
  172. DECLARE FUNCTION GetSymbolValue (szSymbol$) AS STRING
  173. DECLARE FUNCTION GetListLength(szSymbol$) AS INTEGER
  174. DECLARE SUB MakeListFromSectionKeys (szSymbol$, szSect$)
  175. DECLARE FUNCTION GetListItem(szSymbol$, n%) AS STRING
  176. DECLARE SUB AddListItem(szSymbol$, szItem$)
  177. DECLARE SUB ReplaceListItem(szSymbol$, n%, szItem$)
  178. DECLARE FUNCTION InitFrame (szCmdLine$) AS INTEGER
  179. DECLARE FUNCTION InitSetup (szCmdLine$) AS INTEGER
  180. DECLARE FUNCTION ShowWaitCursor AS INTEGER
  181. DECLARE SUB RestoreCursor (hPrev%)
  182. DECLARE FUNCTION SetBeepingMode (mode%) AS INTEGER
  183. DECLARE FUNCTION SetSilentMode (mode%) AS INTEGER
  184. DECLARE FUNCTION GetSectionKeyDate (szSect$, szKey$) AS STRING
  185. DECLARE FUNCTION GetSectionKeyFilename (szSect$, szKey$) AS STRING
  186. DECLARE FUNCTION GetSectionKeySize (szSect$, szKey$) AS LONG
  187. DECLARE FUNCTION GetSectionKeyVersion (szSect$, szKey$) AS STRING
  188. DECLARE SUB MakeListFromSectionDate (szSym$, szSect$)
  189. DECLARE SUB MakeListFromSectionFilename (szSym$, szSect$)
  190. DECLARE SUB MakeListFromSectionSize (szSym$, szSect$)
  191. DECLARE SUB MakeListFromSectionVersion (szSym$, szSect$)
  192. ''install
  193. DECLARE SUB CreateDir (szDir$, cmo%)
  194. DECLARE SUB RemoveDir (szDir$, cmo%)
  195. DECLARE SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$)
  196. DECLARE SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  197. DECLARE SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  198. DECLARE SUB CopyFilesInCopyList
  199. DECLARE SUB RemoveIniSection (szFile$, szSect$, cmo%)
  200. DECLARE SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  201. DECLARE SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%)
  202. DECLARE SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  203. DECLARE SUB CreateProgmanGroup (szGroup$, szPath$, cmo%)
  204. DECLARE SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%)
  205. DECLARE SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%)
  206. DECLARE SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%)
  207. DECLARE SUB DumpCopyList (szFile$)
  208. DECLARE SUB ClearCopyList
  209. DECLARE FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) AS LONG
  210. DECLARE SUB AddDos5Help (szProgName$, szProgHelp$, cmo%)
  211. DECLARE SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%)
  212. DECLARE SUB RemoveFile (szFullPathSrc$, cmo%)
  213. DECLARE SUB BackupFile (szFullPath$, szBackup$)
  214. DECLARE SUB RenameFile (szFullPath$, szBackup$)
  215. DECLARE SUB InitInstall
  216. DECLARE SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&)
  217. DECLARE SUB AddBlankToBillboardList (lTicks&)
  218. DECLARE SUB ClearBillboardList
  219. DECLARE SUB OpenLogFile (szFile$, fAppend%)
  220. DECLARE SUB CloseLogFile
  221. DECLARE SUB WriteToLogFile (szStr$)
  222. DECLARE SUB SetCopyGaugePosition (x%, y%)
  223. DECLARE SUB SetRestartDir(szDir$)
  224. DECLARE FUNCTION RestartListEmpty AS INTEGER
  225. DECLARE FUNCTION ExitExecRestart AS INTEGER
  226. DECLARE FUNCTION FindFileUsingFileOpen (szFile$) AS STRING
  227. DECLARE FUNCTION IsDirWritable (szDir$) AS INTEGER
  228. DECLARE FUNCTION IsFileWritable (szFile$) AS INTEGER
  229. DECLARE FUNCTION GetNthFieldFromIniString (szLine$, iField%) AS STRING
  230. DECLARE SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%)
  231. '' Error Handling
  232. '$ifdef DEBUG
  233. '' Setup API Errors
  234. CONST saeFail   = 0
  235. CONST saeInit   = 1
  236. CONST saeNYI    = 3
  237. CONST saeArg    = 4    ''must be max sae value
  238. DECLARE SUB StfApiErr (nMsg%, szApi$, szArgs$)
  239. DECLARE SUB BadArgErr (nArg%, szApi$, szArgs$)
  240. '' chk arg
  241. DECLARE FUNCTION FValidFATDir LIB "mscomstf.dll" (szDir$) AS INTEGER
  242. DECLARE FUNCTION CchlValidFATSubPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  243. DECLARE FUNCTION FValidFATPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  244. DECLARE FUNCTION FValidDrive (szDrive$) AS INTEGER
  245. DECLARE FUNCTION FValidInfSect (szSect$) AS INTEGER
  246. DECLARE FUNCTION FValidIniFile (szFile$) AS INTEGER
  247. '$endif ''DEBUG
  248. '' Windows system detect
  249. DECLARE FUNCTION GetWindowsMajorVersion AS INTEGER
  250. DECLARE FUNCTION GetWindowsMinorVersion AS INTEGER
  251. DECLARE FUNCTION GetWindowsMode AS INTEGER
  252. DECLARE FUNCTION GetWindowsDir  AS STRING
  253. DECLARE FUNCTION GetWindowsSysDir AS STRING
  254. DECLARE FUNCTION IsWindowsShared AS INTEGER
  255. DECLARE FUNCTION GetScreenWidth AS INTEGER
  256. DECLARE FUNCTION GetScreenHeight AS INTEGER
  257. '*************************************************************************
  258. '*****************  Setup Basic Wrapper Definitions  *********************
  259. '*************************************************************************
  260. FUNCTION InitSetup(szCmdLine$) STATIC AS INTEGER
  261.     fFrameInit = 0
  262.     fInstallInit = 0
  263.     IF hSetup > 0 THEN
  264. '$ifdef DEBUG
  265.         StfApiErr saeInit, "InitSetup", szCmdLine$
  266. '$endif ''DEBUG
  267.     END IF
  268.     i% = InitFrame(szCmdLine$)
  269.     fFrameInit = 1
  270.     InitInstall
  271.     fInstallInit = 1
  272.     InitSetup = i%
  273. END FUNCTION
  274. '**************************************************************************
  275. FUNCTION InitFrame(szCmdLine$) STATIC AS INTEGER
  276.     IF hSetup > 0 THEN
  277. '$ifdef DEBUG
  278.         StfApiErr saeInit, "InitFrame", szCmdLine$
  279. '$endif ''DEBUG
  280.     ELSE
  281.         i% = InitializeFrame(szCmdLine$)
  282.         IF i% = -1 THEN
  283.             END   '' NOT an error - Usage (/?) or Command line copy operation
  284.         ELSEIF i% = 0 THEN
  285. '$ifdef DEBUG
  286.             StfApiErr saeFail, "InitFrame", szCmdLine$
  287. '$endif ''DEBUG
  288.             END
  289.         ELSE
  290.             InitFrame = i%
  291.         END IF
  292.     END IF
  293. END FUNCTION
  294. '**************************************************************************
  295. SUB SetBitmap(szDll$, Bitmap%) STATIC
  296.     IF FSetBitmap(szDll$, Bitmap%) = 0 THEN
  297. '$ifdef DEBUG
  298.         StfApiErr saeFail, "SetBitmap", szDll$+","+STR$(Bitmap%)
  299. '$endif ''DEBUG
  300.         ERROR STFERR
  301.     END IF
  302. END SUB
  303. '**************************************************************************
  304. SUB SetAbout(szAbout1$, szAbout2$) STATIC
  305.     IF FSetAbout(szAbout1$, szAbout2$) = 0 THEN
  306. '$ifdef DEBUG
  307.         StfApiErr saeFail, "SetAbout", szAbout1$ + "," + szAbout2$
  308. '$endif ''DEBUG
  309.         ERROR STFERR
  310.     END IF
  311. END SUB
  312. '*************************************************************************
  313. SUB SetTitle(sz$) STATIC
  314.     SetWindowText HwndFrame(), sz$
  315. END SUB
  316. '*************************************************************************
  317. SUB ReadInfFile (szFile$) STATIC
  318. '$ifdef DEBUG
  319.     if FValidFATPath(szFile$) = 0 then
  320.         BadArgErr 1, "ReadInfFile", szFile$
  321.     end if
  322.     IF FOpenInf(szFile$, 1, 1) = 0 THEN
  323.         StfApiErr saeFail, "ReadInfFile", szFile$
  324. '$else  ''!DEBUG
  325.     IF FOpenInf(szFile$, 1, 0) = 0 THEN
  326. '$endif ''!DEBUG
  327.         ERROR STFERR
  328.     END IF
  329. END SUB
  330. '*************************************************************************
  331. FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) STATIC AS STRING
  332. '$ifdef DEBUG
  333.     if szDll$ = "" then
  334.         n% = 1
  335.     elseif szDlgProc$ = "" then
  336.         n% = 3
  337.     else
  338.         n% = 0
  339.     end if
  340.     if n% > 0 then
  341.         BadArgErr n%, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  342.     end if
  343. '$endif ''DEBUG
  344.     IF FDoDialogExt(HwndFrame(), szDll$, Dlg%, szDlgProc$, szDll$, HelpDlg%, szHelpProc$) = 0 THEN
  345. '$ifdef DEBUG
  346.         StfApiErr saeFail, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  347. '$endif ''DEBUG
  348.         ERROR STFERR
  349.     ELSE
  350.         UIStartDlg = GetSymbolValue("DLGEVENT")
  351.     END IF
  352. END FUNCTION
  353. '*************************************************************************
  354. FUNCTION UIStartDlgExt(szDll$, Dlg%, szDlgProc$, szHelpDll$, HelpDlg%, szHelpProc$) STATIC AS STRING
  355. '$ifdef DEBUG
  356.     if szDll$ = "" then
  357.         n% = 1
  358.     elseif szDlgProc$ = "" then
  359.         n% = 3
  360.     else
  361.         n% = 0
  362.     end if
  363.     if n% > 0 then
  364.         BadArgErr n%, "UIStartDlgExt", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+szHelpDll$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  365.     end if
  366. '$endif ''DEBUG
  367.     IF FDoDialogExt(HwndFrame(), szDll$, Dlg%, szDlgProc$, szHelpDll$, HelpDlg%, szHelpProc$) = 0 THEN
  368. '$ifdef DEBUG
  369.         StfApiErr saeFail, "UIStartDlgExt", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+szHelpDll$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  370. '$endif ''DEBUG
  371.         ERROR STFERR
  372.     ELSE
  373.         UIStartDlgExt = GetSymbolValue("DLGEVENT")
  374.     END IF
  375. END FUNCTION
  376. '*************************************************************************
  377. SUB UIPop (n%) STATIC
  378.     IF FKillNDialogs(n%) = 0 THEN
  379. '$ifdef DEBUG
  380.         StfApiErr saeFail, "UIPop", STR$(n%)
  381. '$endif ''DEBUG
  382.         ERROR STFERR
  383.     END IF
  384. END SUB
  385. '*************************************************************************
  386. SUB UIPopAll STATIC
  387.     IF FKillNDialogs(65535) = 0 THEN
  388. '$ifdef DEBUG
  389.         StfApiErr saeFail, "UIPopAll", ""
  390. '$endif ''DEBUG
  391.         ERROR STFERR
  392.     END IF
  393. END SUB
  394. '*************************************************************************
  395. FUNCTION GetSymbolValue(szSymbol$) STATIC AS STRING
  396. '$ifdef DEBUG
  397.     if szSymbol$ = "" then
  398.         BadArgErr 1, "GetSymbolValue", szSymbol$
  399.     end if
  400. '$endif ''DEBUG
  401.     szValue$ = string$(cbSymValMax,32)
  402.     Length% = CbGetSymbolValue(szSymbol$, szValue$, cbSymValMax)
  403.     GetSymbolValue = szValue$
  404.     IF Length% >= cbSymValMax THEN
  405.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  406.         ERROR STFERR
  407.     END IF
  408.     IF szSymbol$ = "" THEN
  409.         ERROR STFERR
  410.     END IF
  411.     szValue$ = ""
  412. END FUNCTION
  413. '*************************************************************************
  414. FUNCTION GetListLength(szSymbol$) STATIC AS INTEGER
  415. '$ifdef DEBUG
  416.     if szSymbol$ = "" then
  417.         BadArgErr 1, "GetListLength", szSymbol$
  418.     end if
  419. '$endif ''DEBUG
  420.     GetListLength = UsGetListLength(szSymbol$)
  421.     IF szSymbol$ = "" THEN
  422.         ERROR STFERR
  423.     END IF
  424. END FUNCTION
  425. '*************************************************************************
  426. FUNCTION GetListItem(szListSymbol$, nItem%) STATIC AS STRING
  427. '$ifdef DEBUG
  428.     if szListSymbol$ = "" then
  429.         BadArgErr 1, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  430.     end if
  431.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  432.         BadArgErr 2, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  433.     end if
  434. '$endif ''DEBUG
  435.     szListItem$ = string$(cbSymValMax,32)
  436.     Length% = CbGetListItem(szListSymbol$, nItem%, szListItem$, cbSymValMax)
  437.     GetListItem = szListItem$
  438.     IF Length% >= cbSymValMax THEN
  439.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  440.         ERROR STFERR
  441.     END IF
  442.     IF szListSymbol$ = "" THEN
  443.         ERROR STFERR
  444.     END IF
  445.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  446.         ERROR STFERR
  447.     end if
  448.     szListItem$ = ""
  449. END FUNCTION
  450. '*************************************************************************
  451. SUB AddListItem(szSymbol$, szItem$) STATIC
  452. '$ifdef DEBUG
  453.     if szSymbol$ = "" then
  454.         BadArgErr 1, "AddListItem", szSymbol$+", "+szItem$
  455.     end if
  456. '$endif ''DEBUG
  457.     IF FAddListItem(szSymbol$, szItem$) = 0 THEN
  458. '$ifdef DEBUG
  459.         StfApiErr saeFail, "AddListItem", szSymbol$+", "+szItem$
  460. '$endif ''DEBUG
  461.         ERROR STFERR
  462.     END IF
  463. END SUB
  464. '*************************************************************************
  465. SUB ReplaceListItem(szSymbol$, n%, szItem$) STATIC
  466. '$ifdef DEBUG
  467.     if szSymbol$ = "" then
  468.         nArg% = 1
  469.     elseif (n% <= 0) OR (n% > GetListLength(szSymbol$)) then
  470.         nArg% = 2
  471.     else
  472.         nArg% = 0
  473.     end if
  474.     if nArg% > 0 then
  475.         BadArgErr nArg%, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  476.     end if
  477. '$endif ''DEBUG
  478.     IF FReplaceListItem(szSymbol$, n%, szItem$) = 0 THEN
  479. '$ifdef DEBUG
  480.         StfApiErr saeFail, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  481. '$endif ''DEBUG
  482.         ERROR STFERR
  483.     END IF
  484. END SUB
  485. '**************************************************************************
  486. SUB MakeListFromSectionKeys(szSymbol$, szSect$) STATIC
  487. '$ifdef DEBUG
  488.     if szSymbol$ = "" then
  489.         n% = 1
  490.     elseif FValidInfSect(szSect$) = 0 then
  491.         n% = 2
  492.     else
  493.         n% = 0
  494.     end if
  495.     if n% > 0 then
  496.         BadArgErr n%, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  497.     end if
  498. '$endif ''DEBUG
  499.     IF FSetSymbolToListOfInfKeys(szSymbol$, szSect$, 1) = 0 THEN
  500. '$ifdef DEBUG
  501.         StfApiErr saeFail, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  502. '$endif ''DEBUG
  503.         ERROR STFERR
  504.     END IF
  505. END SUB
  506. '*************************************************************************
  507. SUB SetSymbolValue(szSymbol$, szValue$) STATIC
  508. '$ifdef DEBUG
  509.     if szSymbol$ = "" then
  510.         BadArgErr 1, "SetSymbolValue", szSymbol$+", "+szValue$
  511.     end if
  512. '$endif ''DEBUG
  513.     IF FSetSymbolValue(szSymbol$, szValue$) = 0 THEN
  514. '$ifdef DEBUG
  515.         StfApiErr saeFail, "SetSymbolValue", szSymbol$+", "+szValue$
  516. '$endif ''DEBUG
  517.         ERROR STFERR
  518.     END IF
  519. END SUB
  520. '*************************************************************************
  521. SUB RemoveSymbol(szSym$) STATIC
  522. '$ifdef DEBUG
  523.     if szSym$ = "" then
  524.         BadArgErr 1, "RemoveSymbol", szSym$
  525.     end if
  526. '$endif ''DEBUG
  527.     IF FRemoveSymbol(szSym$) = 0 THEN
  528. '$ifdef DEBUG
  529.         StfApiErr saeFail, "RemoveSymbol", szSym$
  530. '$endif ''DEBUG
  531.         ERROR STFERR
  532.     END IF
  533. END SUB
  534. '*************************************************************************
  535. FUNCTION ShowWaitCursor STATIC AS INTEGER
  536.     ShowWaitCursor = HShowWaitCursor
  537. END FUNCTION
  538. '*************************************************************************
  539. SUB RestoreCursor (hPrev%) STATIC
  540.     i% = FRestoreCursor(hPrev%)
  541.     IF i% = 0 THEN
  542. '$ifdef DEBUG
  543.         StfApiErr saeFail, "RestoreCursor", ""
  544. '$endif ''DEBUG
  545.         ERROR STFERR
  546.     END IF
  547. END SUB
  548. '*************************************************************************
  549. FUNCTION SetBeepingMode (mode%) STATIC AS INTEGER
  550.     SetBeepingMode = FSetBeepingMode(mode%)
  551. END FUNCTION
  552. '*************************************************************************
  553. FUNCTION SetSilentMode (mode%) STATIC AS INTEGER
  554.     SetSilentMode = FSetSilent(mode%)
  555. END FUNCTION
  556. '*************************************************************************
  557. FUNCTION GetSectionKeyDate (szSect$, szKey$) STATIC AS STRING
  558. '$ifdef DEBUG
  559.     if FValidInfSect(szSect$) = 0 then
  560.         n% = 1
  561.     elseif szKey$ = "" then
  562.         n% = 2
  563.     else
  564.         n% = 0
  565.     end if
  566.     if n% > 0 then
  567.         BadArgErr n%, "GetSectionKeyDate", szSect$+", "+szKey$
  568.     end if
  569. '$endif ''DEBUG
  570.     szBuf$ = string$(128, 32)
  571.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 5, szBuf$, 128)
  572.     IF Length% >= 128 THEN
  573.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  574.         ERROR STFERR
  575.     END IF
  576.     IF Length% = -1 THEN
  577. '$ifdef DEBUG
  578.         StfApiErr saeFail, "GetSectionKeyDate", szSect$+", "+szKey$
  579. '$endif ''DEBUG
  580.         ERROR STFERR
  581.     END IF
  582.     GetSectionKeyDate = szBuf$
  583.     szBuf$ = ""
  584. END FUNCTION
  585. '*************************************************************************
  586. FUNCTION GetSectionKeyFilename (szSect$, szKey$) STATIC AS STRING
  587. '$ifdef DEBUG
  588.     if FValidInfSect(szSect$) = 0 then
  589.         n% = 1
  590.     elseif szKey$ = "" then
  591.         n% = 2
  592.     else
  593.         n% = 0
  594.     end if
  595.     if n% > 0 then
  596.         BadArgErr n%, "GetSectionKeyFilename", szSect$+", "+szKey$
  597.     end if
  598. '$endif ''DEBUG
  599.     szBuf$ = string$(128, 32)
  600.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 1, szBuf$, 128)
  601.     IF Length% >= 128 THEN
  602.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  603.         ERROR STFERR
  604.     END IF
  605.     IF Length% = -1 THEN
  606. '$ifdef DEBUG
  607.         StfApiErr saeFail, "GetSectionKeyFilename", szSect$+", "+szKey$
  608. '$endif ''DEBUG
  609.         ERROR STFERR
  610.     END IF
  611.     GetSectionKeyFilename = szBuf$
  612.     szBuf$ = ""
  613. END FUNCTION
  614. '*************************************************************************
  615. FUNCTION GetSectionKeySize (szSect$, szKey$) STATIC AS LONG
  616. '$ifdef DEBUG
  617.     if FValidInfSect(szSect$) = 0 then
  618.         n% = 1
  619.     elseif szKey$ = "" then
  620.         n% = 2
  621.     else
  622.         n% = 0
  623.     end if
  624.     if n% > 0 then
  625.         BadArgErr n%, "GetSectionKeySize", szSect$+", "+szKey$
  626.     end if
  627. '$endif ''DEBUG
  628.     szBuf$ = string$(128, 32)
  629.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 15, szBuf$, 128)
  630.     IF Length% >= 128 THEN
  631.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  632.         ERROR STFERR
  633.     END IF
  634.     IF Length% = -1 THEN
  635. '$ifdef DEBUG
  636.         StfApiErr saeFail, "GetSectionKeySize", szSect$+", "+szKey$
  637. '$endif ''DEBUG
  638.         ERROR STFERR
  639.     END IF
  640.     GetSectionKeySize = VAL(szBuf$)
  641.     szBuf$ = ""
  642. END FUNCTION
  643. '*************************************************************************
  644. FUNCTION GetSectionKeyVersion (szSect$, szKey$) STATIC AS STRING
  645. '$ifdef DEBUG
  646.     if FValidInfSect(szSect$) = 0 then
  647.         n% = 1
  648.     elseif szKey$ = "" then
  649.         n% = 2
  650.     else
  651.         n% = 0
  652.     end if
  653.     if n% > 0 then
  654.         BadArgErr n%, "GetSectionKeyVersion", szSect$+", "+szKey$
  655.     end if
  656. '$endif ''DEBUG
  657.     szBuf$ = string$(128, 32)
  658.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 19, szBuf$, 128)
  659.     IF Length% >= 128 THEN
  660.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  661.         ERROR STFERR
  662.     END IF
  663.     IF Length% = -1 THEN
  664. '$ifdef DEBUG
  665.         StfApiErr saeFail, "GetSectionKeyVersion", szSect$+", "+szKey$
  666. '$endif ''DEBUG
  667.         ERROR STFERR
  668.     END IF
  669.     GetSectionKeyVersion = szBuf$
  670.     szBuf$ = ""
  671. END FUNCTION
  672. '*************************************************************************
  673. SUB MakeListFromSectionDate (szSym$, szSect$) STATIC
  674. '$ifdef DEBUG
  675.     if szSym$ = "" then
  676.         n% = 1
  677.     elseif FValidInfSect(szSect$) = 0 then
  678.         n% = 2
  679.     else
  680.         n% = 0
  681.     end if
  682.     if n% > 0 then
  683.         BadArgErr n%, "MakeListFromSectionDate", szSym$+", "+szSect$
  684.     end if
  685. '$endif ''DEBUG
  686.     IF FMakeListInfSectionField(szSym$, szSect$, 5) = 0 THEN
  687. '$ifdef DEBUG
  688.         StfApiErr saeFail, "MakeListFromSectionDate", szSym$+", "+szSect$
  689. '$endif ''DEBUG
  690.         ERROR STFERR
  691.     END IF
  692. END SUB
  693. '*************************************************************************
  694. SUB MakeListFromSectionFilename (szSym$, szSect$) STATIC
  695. '$ifdef DEBUG
  696.     if szSym$ = "" then
  697.         n% = 1
  698.     elseif FValidInfSect(szSect$) = 0 then
  699.         n% = 2
  700.     else
  701.         n% = 0
  702.     end if
  703.     if n% > 0 then
  704.         BadArgErr n%, "MakeListFromSectionFilename", szSym$+", "+szSect$
  705.     end if
  706. '$endif ''DEBUG
  707.     IF FMakeListInfSectionField(szSym$, szSect$, 1) = 0 THEN
  708. '$ifdef DEBUG
  709.         StfApiErr saeFail, "MakeListFromSectionFilename", szSym$+", "+szSect$
  710. '$endif ''DEBUG
  711.         ERROR STFERR
  712.     END IF
  713. END SUB
  714. '*************************************************************************
  715. SUB MakeListFromSectionSize (szSym$, szSect$) STATIC
  716. '$ifdef DEBUG
  717.     if szSym$ = "" then
  718.         n% = 1
  719.     elseif FValidInfSect(szSect$) = 0 then
  720.         n% = 2
  721.     else
  722.         n% = 0
  723.     end if
  724.     if n% > 0 then
  725.         BadArgErr n%, "MakeListFromSectionSize", szSym$+", "+szSect$
  726.     end if
  727. '$endif ''DEBUG
  728.     IF FMakeListInfSectionField(szSym$, szSect$, 15) = 0 THEN
  729. '$ifdef DEBUG
  730.         StfApiErr saeFail, "MakeListFromSectionSize", szSym$+", "+szSect$
  731. '$endif ''DEBUG
  732.         ERROR STFERR
  733.     END IF
  734. END SUB
  735. '*************************************************************************
  736. SUB MakeListFromSectionVersion (szSym$, szSect$) STATIC
  737. '$ifdef DEBUG
  738.     if szSym$ = "" then
  739.         n% = 1
  740.     elseif FValidInfSect(szSect$) = 0 then
  741.         n% = 2
  742.     else
  743.         n% = 0
  744.     end if
  745.     if n% > 0 then
  746.         BadArgErr n%, "MakeListFromSectionVersion", szSym$+", "+szSect$
  747.     end if
  748. '$endif ''DEBUG
  749.     IF FMakeListInfSectionField(szSym$, szSect$, 19) = 0 THEN
  750. '$ifdef DEBUG
  751.         StfApiErr saeFail, "MakeListFromSectionVersion", szSym$+", "+szSect$
  752. '$endif ''DEBUG
  753.         ERROR STFERR
  754.     END IF
  755. END SUB
  756. '*************************************************************************
  757. SUB InitInstall STATIC
  758.     IF hSetup > 0 THEN
  759. '$ifdef DEBUG
  760.         StfApiErr saeInit, "InitInstall", ""
  761. '$endif ''DEBUG
  762.     ELSEIF FInitializeInstall(HinstFrame(), HwndFrame()) = 0 THEN
  763. '$ifdef DEBUG
  764.         StfApiErr saeFail, "InitInstall", ""
  765. '$endif ''DEBUG
  766.         END
  767.     END IF
  768. END SUB
  769. '*************************************************************************
  770. SUB CreateDir (szDir$, cmo%) STATIC
  771. '$ifdef DEBUG
  772.     if FValidFATDir(szDir$) = 0 then
  773.         BadArgErr 1, "CreateDir", szDir$+", "+STR$(cmo%)
  774.     end if
  775. '$endif ''DEBUG
  776.     IF FCreateDir(szDir$, cmo%) = 0 THEN
  777. '$ifdef DEBUG
  778.         StfApiErr saeFail, "CreateDir", szDir$+", "+STR$(cmo%)
  779. '$endif ''DEBUG
  780.         ERROR STFERR
  781.     END IF
  782. END SUB
  783. '*************************************************************************
  784. SUB RemoveDir (szDir$, cmo%) STATIC
  785. '$ifdef DEBUG
  786.     if FValidFATDir(szDir$) = 0 then
  787.         BadArgErr 1, "RemoveDir", szDir$+", "+STR$(cmo%)
  788.     end if
  789. '$endif ''DEBUG
  790.     IF FRemoveDir(szDir$, cmo%) = 0 THEN
  791. '$ifdef DEBUG
  792.         StfApiErr saeFail, "RemoveDir", szDir$+", "+STR$(cmo%)
  793. '$endif ''DEBUG
  794.         ERROR STFERR
  795.     END IF
  796. END SUB
  797. '*************************************************************************
  798. SUB RemoveIniSection (szFile$, szSect$, cmo%) STATIC
  799. '$ifdef DEBUG
  800.     if FValidIniFile(szFile$) = 0 then
  801.         n% = 1
  802.     elseif FValidInfSect(szSect$) = 0 then
  803.         n% = 2
  804.     else
  805.         n% = 0
  806.     end if
  807.     if n% > 0 then
  808.         BadArgErr n%, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  809.     end if
  810. '$endif ''DEBUG
  811.     IF FRemoveIniSection(szFile$, szSect$, cmo%) = 0 THEN
  812. '$ifdef DEBUG
  813.         StfApiErr saeFail, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  814. '$endif ''DEBUG
  815.         ERROR STFERR
  816.     END IF
  817. END SUB
  818. '*************************************************************************
  819. SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  820. '$ifdef DEBUG
  821.     if FValidIniFile(szFile$) = 0 then
  822.         n% = 1
  823.     elseif FValidInfSect(szSect$) = 0 then
  824.         n% = 2
  825.     else
  826.         n% = 0
  827.     end if
  828.     if n% > 0 then
  829.         BadArgErr n%, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  830.     end if
  831. '$endif ''DEBUG
  832.     IF FCreateIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  833. '$ifdef DEBUG
  834.         StfApiErr saeFail, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  835. '$endif ''DEBUG
  836.         ERROR STFERR
  837.     END IF
  838. END SUB
  839. '*************************************************************************
  840. SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%) STATIC
  841. '$ifdef DEBUG
  842.     if FValidIniFile(szFile$) = 0 then
  843.         n% = 1
  844.     elseif FValidInfSect(szSect$) = 0 then
  845.         n% = 2
  846.     elseif szKey$ = "" then
  847.         n% = 3
  848.     else
  849.         n% = 0
  850.     end if
  851.     if n% > 0 then
  852.         BadArgErr n%, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  853.     end if
  854. '$endif ''DEBUG
  855.     IF FRemoveIniKey(szFile$, szSect$, szKey$, cmo%) = 0 THEN
  856. '$ifdef DEBUG
  857.         StfApiErr saeFail, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  858. '$endif ''DEBUG
  859.         ERROR STFERR
  860.     END IF
  861. END SUB
  862. '*************************************************************************
  863. SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  864. '$ifdef DEBUG
  865.     if FValidFATPath(szFile$) = 0 then
  866.         n% = 1
  867.     elseif FValidInfSect(szSect$) = 0 then
  868.         n% = 2
  869.     elseif szKey$ = "" then
  870.         n% = 3
  871.     else
  872.         n% = 0
  873.     end if
  874.     if n% > 0 then
  875.         BadArgErr n%, "CreateSysIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  876.     end if
  877. '$endif ''DEBUG
  878.     IF FCreateSysIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  879. '$ifdef DEBUG
  880.         StfApiErr saeFail, "CreateSysIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  881. '$endif ''DEBUG
  882.         ERROR STFERR
  883.     END IF
  884. END SUB
  885. '*************************************************************************
  886. SUB CreateProgmanGroup (szGroup$, szPath$, cmo%) STATIC
  887. '$ifdef DEBUG
  888.     if szGroup$ = "" or len(szGroup$) > 24 then
  889.         BadArgErr 1, "CreateProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  890.     end if
  891. '$endif ''DEBUG
  892.     IF FCreateProgManGroup(szGroup$, szPath$, cmo%) = 0 THEN
  893. '$ifdef DEBUG
  894.         StfApiErr saeFail, "CreateProgmanGroup", szGroup$+", "+szPath$+", "+STR$(cmo%)
  895. '$endif ''DEBUG
  896.         ERROR STFERR
  897.     END IF
  898. END SUB
  899. '*************************************************************************
  900. SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%) STATIC
  901. '$ifdef DEBUG
  902.     if szGroup$ = "" or len(szGroup$) > 24 then
  903.         BadArgErr 1, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  904.     end if
  905. '$endif ''DEBUG
  906.     IF FShowProgManGroup(szGroup$, STR$(Cmd%), cmo%) = 0 THEN
  907. '$ifdef DEBUG
  908.         StfApiErr saeFail, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  909. '$endif ''DEBUG
  910.         ERROR STFERR
  911.     END IF
  912. END SUB
  913. '*************************************************************************
  914. SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) STATIC
  915. '$ifdef DEBUG
  916.     if FValidInfSect(szSect$) = 0 then
  917.         n% = 1
  918.     elseif szKey$ = "" then
  919.         n% = 2
  920.     elseif FValidFATDir(szDst$) = 0 then
  921.         n% = 3
  922.     else
  923.         n% = 0
  924.     end if
  925.     if n% > 0 then
  926.         BadArgErr n%, "StampResource", szSect$+", "+szKey$+", "+szDst$+", "+STR$(wResType%)+", "+STR$(wResId%)+", "+szData$+", "+STR$(cbData%)
  927.     end if
  928. '$endif ''DEBUG
  929.     IF FStampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) = 0 THEN
  930. '$ifdef DEBUG
  931.         StfApiErr saeFail, "StampResource", szSect$+", "+szKey$+", "+szDst$+", "+STR$(wResType%)+", "+STR$(wResId%)+", "+szData$+", "+STR$(cbData%)
  932. '$endif ''DEBUG
  933.         ERROR STFERR
  934.     END IF
  935. END SUB
  936. '*************************************************************************
  937. SUB DumpCopyList (szFile$) STATIC
  938. '$ifdef DEBUG
  939.     if szFile$ = "" then
  940.         BadArgErr 1, "DumpCopyList", szFile$
  941.     end if
  942. '$endif ''DEBUG
  943.     IF FDumpCopyListToFile (szFile$) = 0 THEN
  944. '$ifdef DEBUG
  945.         StfApiErr saeFail, "DumpCopyList", szFile$
  946. '$endif ''DEBUG
  947.         ERROR STFERR
  948.     END IF
  949. END SUB
  950. '*************************************************************************
  951. SUB ClearCopyList STATIC
  952.     ResetCopyList
  953. END SUB
  954. '*************************************************************************
  955. FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) STATIC AS LONG
  956.     lNeed& = LcbGetCopyListCost (szExtraList$, szCostList$, szNeedList$)
  957.     IF lNeed& < 0 THEN
  958. '$ifdef DEBUG
  959.         StfApiErr saeFail, "GetCopyListCost", szExtraList$+", "+szCostList$+", "+szNeedList$
  960. '$endif ''DEBUG
  961.         ERROR STFERR
  962.     END IF
  963.     GetCopyListCost = lNeed&
  964. END FUNCTION
  965. '*************************************************************************
  966. SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%) STATIC
  967.     szItemNew$ = szItem$
  968.     IF szOther$ <> "" THEN
  969.         szItemNew$ = szItem$ + "," + szOther$
  970.     END IF
  971. '$ifdef DEBUG
  972.     if szGroup$ = "" or len(szGroup$) > 24 then
  973.         BadArgErr 1, "CreateProgmanItem", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  974.     end if
  975. '$endif ''DEBUG
  976.     IF FCreateProgManItem(szGroup$, szItemNew$, szCmd$, cmo%) = 0 THEN
  977. '$ifdef DEBUG
  978.         StfApiErr saeFail, "CreateProgmanItem", szGroup$+", "+szItem$+", "+szCmd$+", "+szOther$+", "+STR$(cmo%)
  979. '$endif ''DEBUG
  980.         ERROR STFERR
  981.     END IF
  982.     szItemNew$ = ""
  983. END SUB
  984. '*************************************************************************
  985. SUB AddDos5Help (szProgName$, szProgHelp$, cmo%) STATIC
  986. '$ifdef DEBUG
  987.     if szProgName$ = "" OR MID$(szProgName$, 1, 1) = "@" OR LEN(szProgName$) > 8 then
  988.         n% = 1
  989.     elseif INSTR(szProgName$, " ") <> 0 OR INSTR(szProgName$, CHR$(9)) <> 0 then
  990.         n% = 1
  991.     elseif szProgHelp$ = "" then
  992.         n% = 2
  993.     else
  994.         n% = 0
  995.     end if
  996.     if n% > 0 then
  997.         BadArgErr n%, "AddDos5Help", szProgName$+", "+szProgHelp$+", "+STR$(cmo%)
  998.     end if
  999. '$endif ''DEBUG
  1000.     IF FAddDos5Help (szProgName$, szProgHelp$, cmo%) = 0 THEN
  1001. '$ifdef DEBUG
  1002.         StfApiErr saeFail, "AddDos5Help", szProgName$+", "+szProgHelp$+", "+STR$(cmo%)
  1003. '$endif ''DEBUG
  1004.         ERROR STFERR
  1005.     END IF
  1006. END SUB
  1007. '*************************************************************************
  1008. SUB CopyFilesInCopyList STATIC
  1009.     grc% = GrcCopyFilesInCopyList (HinstFrame())
  1010.     IF grc% = grcUserQuit THEN
  1011.         ERROR STFQUIT
  1012.     ELSEIF grc% > 0 THEN
  1013. '$ifdef DEBUG
  1014.         StfApiErr saeFail, "CopyFilesInCopyList", ""
  1015. '$endif ''DEBUG
  1016.         ERROR STFERR
  1017.     END IF
  1018. END SUB
  1019. '*************************************************************************
  1020. SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%) STATIC
  1021. '$ifdef DEBUG
  1022.     if FValidFATPath(szFullPathSrc$) = 0 then
  1023.         n% = 1
  1024.     elseif FValidFATPath(szFullPathDst$) = 0 then
  1025.         n% = 2
  1026.     else
  1027.         n% = 0
  1028.     end if
  1029.     if n% > 0 then
  1030.         BadArgErr n%, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  1031.     end if
  1032. '$endif ''DEBUG
  1033.     IF  FCopyOneFile(szFullPathSrc$, szFullPathDst$, (cmo OR cmoCopy), fAppend%) = 0 THEN
  1034. '$ifdef DEBUG
  1035.         StfApiErr saeFail, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  1036. '$endif ''DEBUG
  1037.         ERROR STFERR
  1038.     END IF
  1039. END SUB
  1040. '*************************************************************************
  1041. SUB RemoveFile (szFullPathSrc$, cmo%) STATIC
  1042. '$ifdef DEBUG
  1043.     if FValidFATPath(szFullPathSrc$) = 0 then
  1044.         BadArgErr 1, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  1045.     end if
  1046. '$endif ''DEBUG
  1047.     IF  YnrcRemoveFile(szFullPathSrc$, cmo%) = ynrcNo THEN
  1048. '$ifdef DEBUG
  1049.         StfApiErr saeFail, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  1050. '$endif ''DEBUG
  1051.         ERROR STFERR
  1052.     END IF
  1053. END SUB
  1054. '*************************************************************************
  1055. SUB BackupFile (szFullPath$, szBackup$) STATIC
  1056. '$ifdef DEBUG
  1057.     if FValidFATPath(szFullPath$) = 0 then
  1058.         n% = 1
  1059.     elseif szBackup$ = "" then
  1060.         n% = 2
  1061.     else
  1062.         n% = 0
  1063.     end if
  1064.     if n% > 0 then
  1065.         BadArgErr n%, "BackupFile", szFullPath$+", "+szBackup$
  1066.     end if
  1067. '$endif ''DEBUG
  1068.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  1069. '$ifdef DEBUG
  1070.         StfApiErr saeFail, "BackupFile", szFullPath$+", "+szBackup$
  1071. '$endif ''DEBUG
  1072.         ERROR STFERR
  1073.     END IF
  1074. END SUB
  1075. '*************************************************************************
  1076. SUB RenameFile (szFullPath$, szBackup$) STATIC
  1077. '$ifdef DEBUG
  1078.     if FValidFATPath(szFullPath$) = 0 then
  1079.         n% = 1
  1080.     elseif szBackup$ = "" then
  1081.         n% = 2
  1082.     else
  1083.         n% = 0
  1084.     end if
  1085.     if n% > 0 then
  1086.         BadArgErr n%, "RenameFile", szFullPath$+", "+szBackup$
  1087.     end if
  1088. '$endif ''DEBUG
  1089.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  1090. '$ifdef DEBUG
  1091.         StfApiErr saeFail, "RenameFile", szFullPath$+", "+szBackup$
  1092. '$endif ''DEBUG
  1093.         ERROR STFERR
  1094.     END IF
  1095. END SUB
  1096. '*************************************************************************
  1097. SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$) STATIC
  1098. '$ifdef DEBUG
  1099.     if FValidInfSect(szSect$) = 0 then
  1100.         n% = 1
  1101.     elseif FValidFATDir(szSrc$) = 0 then
  1102.         n% = 2
  1103.     elseif FValidFATDir(szDest$) = 0 then
  1104.         n% = 3
  1105.     else
  1106.         n% = 0
  1107.     end if
  1108.     if n% > 0 then
  1109.         BadArgErr n%, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  1110.     end if
  1111. '$endif ''DEBUG
  1112.     IF FAddSectionFilesToCopyList (szSect$, szSrc$, szDest$) = 0 THEN
  1113. '$ifdef DEBUG
  1114.         StfApiErr saeFail, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  1115. '$endif ''DEBUG
  1116.         ERROR STFERR
  1117.     END IF
  1118. END SUB
  1119. '*************************************************************************
  1120. SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  1121. '$ifdef DEBUG
  1122.     if FValidInfSect(szSect$) = 0 then
  1123.         n% = 1
  1124.     elseif szKey$ = "" then
  1125.         n% = 2
  1126.     elseif FValidFATDir(szSrc$) = 0 then
  1127.         n% = 3
  1128.     elseif FValidFATDir(szDest$) = 0 then
  1129.         n% = 4
  1130.     else
  1131.         n% = 0
  1132.     end if
  1133.     if n% > 0 then
  1134.         BadArgErr n%, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1135.     end if
  1136. '$endif ''DEBUG
  1137.     IF FAddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  1138. '$ifdef DEBUG
  1139.         StfApiErr saeFail, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1140. '$endif ''DEBUG
  1141.         ERROR STFERR
  1142.     END IF
  1143. END SUB
  1144. '*************************************************************************
  1145. SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  1146. '$ifdef DEBUG
  1147.     if FValidInfSect(szSect$) = 0 then
  1148.         n% = 1
  1149.     elseif szKey$ = "" then
  1150.         n% = 2
  1151.     elseif FValidFATDir(szSrc$) = 0 then
  1152.         n% = 3
  1153.     elseif FValidFATPath(szDest$) = 0 then
  1154.         n% = 4
  1155.     else
  1156.         n% = 0
  1157.     end if
  1158.     if n% > 0 then
  1159.         BadArgErr n%, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1160.     end if
  1161. '$endif ''DEBUG
  1162.     IF FAddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  1163. '$ifdef DEBUG
  1164.         StfApiErr saeFail, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1165. '$endif ''DEBUG
  1166.         ERROR STFERR
  1167.     END IF
  1168. END SUB
  1169. '*************************************************************************
  1170. SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&) STATIC
  1171. '$ifdef DEBUG
  1172.     if szDll$ = "" then
  1173.         n% = 1
  1174.     elseif idDlg% = 0 then
  1175.         n% = 2
  1176.     elseif szProc$ = "" then
  1177.         n% = 3
  1178.     elseif lTicks& <= 0 then
  1179.         n% = 4
  1180.     else
  1181.         n% = 0
  1182.     end if
  1183.     if n% > 0 then
  1184.         BadArgErr n%, "AddToBillboardList", szDll$+", "+STR$(idDlg%)+", "+szProc$+", "+STR$(lTicks&)
  1185.     end if
  1186. '$endif ''DEBUG
  1187.     IF FAddToBillboardList(szDll$, idDlg%, szProc$, lTicks&) = 0 THEN
  1188. '$ifdef DEBUG
  1189.         StfApiErr saeFail, "AddToBillboardList", szDll$+", "+STR$(idDlg%)+", "+szProc$+", "+STR$(lTicks&)
  1190. '$endif ''DEBUG
  1191.         ERROR STFERR
  1192.     END IF
  1193. END SUB
  1194. '*************************************************************************
  1195. SUB AddBlankToBillboardList (lTicks&) STATIC
  1196. '$ifdef DEBUG
  1197.     if lTicks& <= 0 then
  1198.         BadArgErr 1, "AddBlankToBillboardList", STR$(lTicks&)
  1199.     end if
  1200. '$endif ''DEBUG
  1201.     IF FAddToBillboardList(NULL, 0, NULL, lTicks&) = 0 THEN
  1202. '$ifdef DEBUG
  1203.         StfApiErr saeFail, "AddBlankToBillboardList", STR$(lTicks&)
  1204. '$endif ''DEBUG
  1205.         ERROR STFERR
  1206.     END IF
  1207. END SUB
  1208. '*************************************************************************
  1209. SUB ClearBillboardList STATIC
  1210.     IF FClearBillboardList = 0 THEN
  1211. '$ifdef DEBUG
  1212.         StfApiErr saeFail, "ClearBillboardList", ""
  1213. '$endif ''DEBUG
  1214.         ERROR STFERR
  1215.     END IF
  1216. END SUB
  1217. '*************************************************************************
  1218. SUB OpenLogFile (szFile$, fAppend%) STATIC
  1219. '$ifdef DEBUG
  1220.     if FValidFATPath(szFile$) = 0 then
  1221.         BadArgErr 1, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  1222.     end if
  1223. '$endif ''DEBUG
  1224.     IF FOpenLogFile(szFile$, fAppend%) = 0 THEN
  1225. '$ifdef DEBUG
  1226.         StfApiErr saeFail, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  1227. '$endif ''DEBUG
  1228.         ERROR STFERR
  1229.     END IF
  1230. END SUB
  1231. '*************************************************************************
  1232. SUB CloseLogFile STATIC
  1233.     IF FCloseLogFile() = 0 THEN
  1234. '$ifdef DEBUG
  1235.         StfApiErr saeFail, "CloseLogFile", ""
  1236. '$endif ''DEBUG
  1237.         ERROR STFERR
  1238.     END IF
  1239. END SUB
  1240. '*************************************************************************
  1241. SUB WriteToLogFile (szStr$) STATIC
  1242.     IF FWriteToLogFile(szStr$, 1) = 0 THEN
  1243. '$ifdef DEBUG
  1244.         StfApiErr saeFail, "WriteToLogFile", szStr$
  1245. '$endif ''DEBUG
  1246.         ERROR STFERR
  1247.     END IF
  1248. END SUB
  1249. ''' -1 in either parameter will mean 'center in frame client area'
  1250. '*************************************************************************
  1251. SUB SetCopyGaugePosition (x%, y%) STATIC
  1252.     ProSetPos x%, y%
  1253. END SUB
  1254. '*************************************************************************
  1255. FUNCTION FindFileUsingFileOpen (szFile$) STATIC AS STRING
  1256.     szBuf$ = STRING$(512, 32)
  1257.     wRet% = WFindFileUsingFileOpen(szFile$, szBuf$, len(szBuf$))
  1258.     IF wRet% = 0 THEN
  1259.         FindFileUsingFileOpen = szBuf$
  1260.     ELSEIF wRet% = 1 THEN
  1261.         FindFileUsingFileOpen = ""
  1262.     ELSE
  1263. '$ifdef DEBUG
  1264.         StfApiErr saeFail, "FindFileUsingFileOpen", szFile$
  1265. '$endif ''DEBUG
  1266.         ERROR STFERR
  1267.     END IF
  1268.     szBuf$ = ""
  1269. END FUNCTION
  1270. '*************************************************************************
  1271. FUNCTION IsDirWritable (szDir$) STATIC AS INTEGER
  1272.     IsDirWritable = FIsDirWritable(szDir$)
  1273. END FUNCTION
  1274. '*************************************************************************
  1275. FUNCTION IsFileWritable (szFile$) STATIC AS INTEGER
  1276. '$ifdef DEBUG
  1277.     if FValidFATDir(szFile$) = 0 then
  1278.         BadArgErr 1, "IsFileWritable", szFile$
  1279.     end if
  1280. '$endif ''DEBUG
  1281.     IsFileWritable = FIsFileWritable(szFile$)
  1282. END FUNCTION
  1283. '*************************************************************************
  1284. FUNCTION GetNthFieldFromIniString (szLine$, iField%) STATIC AS STRING
  1285.     IF iField% < 1 THEN
  1286. '$ifdef DEBUG
  1287.         StfApiErr saeFail, "GetNthFieldFromIniString", szLine$+", "+STR$(iField%)
  1288. '$endif ''DEBUG
  1289.         ERROR STFERR
  1290.     END IF
  1291.     szStart$ = szLine$
  1292.     IF iField% <> 1 THEN
  1293.         FOR i% = 2 TO iField% STEP 1
  1294.             iNew% = INSTR(szStart$, ",")
  1295.             IF iNew% = 0 THEN
  1296.                 GetNthFieldFromIniString = ""
  1297.                 GOTO _GNFFIS_END
  1298.             END IF
  1299.             szStart$ = MID$(szStart$, (iNew% + 1))
  1300.         NEXT
  1301.     END IF
  1302.     iNew% = INSTR(szStart$, ",")
  1303.     IF iNew% <> 0 THEN
  1304.         szStart$ = MID$(szStart$, 1, (iNew% - 1))
  1305.     END IF
  1306.     GetNthFieldFromIniString = LTRIM$(RTRIM$(szStart$))
  1307. _GNFFIS_END:
  1308. END FUNCTION
  1309. '*************************************************************************
  1310. FUNCTION GetWindowsMajorVersion STATIC AS INTEGER
  1311.     GetWindowsMajorVersion = GetVersion() MOD 256
  1312. END FUNCTION
  1313. '*************************************************************************
  1314. FUNCTION GetWindowsMinorVersion STATIC AS INTEGER
  1315.     GetWindowsMinorVersion = GetVersion() / 256
  1316. END FUNCTION
  1317. '*************************************************************************
  1318. FUNCTION GetWindowsMode STATIC AS INTEGER
  1319.     GetWindowsMode = 0
  1320.     longTmp& = GetWinFlags()
  1321.     IF longTmp& AND WF_STANDARD THEN
  1322.         GetWindowsMode = 1
  1323.     ELSEIF longTmp& AND WF_ENHANCED THEN
  1324.         GetWindowsMode = 2
  1325.     END IF
  1326. END FUNCTION
  1327. '*************************************************************************
  1328. FUNCTION GetWindowsDir STATIC AS STRING
  1329.     szBuf$ = string$(256, 32)
  1330.     cbBuf% = GetWindowsDirectory(szBuf$, 256)
  1331.     IF cbBuf% = 0 THEN
  1332.         GetWindowsDir = ""
  1333. '$ifdef DEBUG
  1334.         StfApiErr saeFail, "GetWindowsDir", ""
  1335. '$endif ''DEBUG
  1336.         ERROR STFERR
  1337.     ELSE
  1338.         IF cbBuf% > 255 THEN
  1339.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1340.             ERROR STFERR
  1341.         END IF
  1342.         szBuf$ = RTRIM$(szBuf$)
  1343.         IF MID$(szBuf$, 1, 1) = "" THEN
  1344.             'szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1345.             szBuf$ = MID$(GetWindowsSysDir, 1, 2) + szBuf$
  1346.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1347.             szBuf$ = MID$(GetWindowsSysDir, 1, 3) + szBuf$
  1348.         END IF
  1349.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "" THEN
  1350.             szBuf$ = szBuf$ + ""
  1351.         END IF
  1352.         GetWindowsDir = szBuf$
  1353.     END IF
  1354.     szBuf$ = ""
  1355. END FUNCTION
  1356. '*************************************************************************
  1357. FUNCTION GetWindowsSysDir STATIC AS STRING
  1358.     szBuf$ = string$(256, 32)
  1359.     cbBuf% = GetSystemDirectory(szBuf$, 256)
  1360.     IF cbBuf% = 0 THEN
  1361. '$ifdef DEBUG
  1362.         StfApiErr saeFail, "GetWindowsSysDir", ""
  1363. '$endif ''DEBUG
  1364.         ERROR STFERR
  1365.     ELSE
  1366.         IF cbBuf% > 255 THEN
  1367.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1368.             ERROR STFERR
  1369.         END IF
  1370.         szBuf$ = RTRIM$(szBuf$)
  1371.         IF MID$(szBuf$, 1, 1) = "" THEN
  1372.             szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1373.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1374.             szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  1375.         END IF
  1376.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "" THEN
  1377.             szBuf$ = szBuf$ + ""
  1378.         END IF
  1379.         GetWindowsSysDir = szBuf$
  1380.     END IF
  1381.     szBuf$ = ""
  1382. END FUNCTION
  1383. '*************************************************************************
  1384. FUNCTION IsWindowsShared STATIC AS INTEGER
  1385.     szWin$ = UCASE$(GetWindowsDir())
  1386.     szSys$ = UCASE$(GetWindowsSysDir())
  1387.     IF len(szWin$) = 0 THEN
  1388. '$ifdef DEBUG
  1389.         StfApiErr saeFail, "IsWindowsShared", ""
  1390. '$endif ''DEBUG
  1391.         ERROR STFERR
  1392.     END IF
  1393.     IF len(szSys$) <= len(szWin$) THEN
  1394.         IsWindowsShared = 1
  1395.     ELSE
  1396.         szSys$ = MID$(szSys$, 1, len(szWin$))
  1397.         IF szWin$ = szSys$ THEN
  1398.             IsWindowsShared = 0
  1399.         ELSE
  1400.             IsWindowsShared = 1
  1401.         END IF
  1402.     END IF
  1403. END FUNCTION
  1404. '*************************************************************************
  1405. FUNCTION GetScreenWidth STATIC AS INTEGER
  1406.     GetScreenWidth = GetSystemMetrics(SM_CXSCREEN)
  1407. END FUNCTION
  1408. '*************************************************************************
  1409. FUNCTION GetScreenHeight STATIC AS INTEGER
  1410.     GetScreenHeight = GetSystemMetrics(SM_CYSCREEN)
  1411. END FUNCTION
  1412. '*************************************************************************
  1413. SUB SetRestartDir (szDir$) STATIC
  1414. '$ifdef DEBUG
  1415.     if FValidFATDir(szDir$) = 0 then
  1416.         BadArgErr 1, "SetRestartDir", szDir$
  1417.     end if
  1418. '$endif ''DEBUG
  1419.     IF FSetRestartDir(szDir$) = 0 THEN
  1420. '$ifdef DEBUG
  1421.         StfApiErr saeFail, "SetRestartDir", szDir$
  1422. '$endif ''DEBUG
  1423.         ERROR STFERR
  1424.     END IF
  1425. END SUB
  1426. '*************************************************************************
  1427. FUNCTION RestartListEmpty STATIC AS INTEGER
  1428.     IF FRestartListEmpty() = 0 THEN
  1429.         RestartListEmpty = 0
  1430.     ELSE
  1431.         RestartListEmpty = 1
  1432.     END IF
  1433. END FUNCTION
  1434. '*************************************************************************
  1435. FUNCTION ExitExecRestart STATIC AS INTEGER
  1436.     ExitExecRestart = FExitExecRestart
  1437. END FUNCTION
  1438. '*************************************************************************
  1439. SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%) STATIC
  1440. '$ifdef DEBUG
  1441.     if (FValidFATPath(szSrc$) = 0) AND (szSrc$ <> "") then
  1442.         n% = 1
  1443.     elseif FValidFATPath(szDst$) = 0 then
  1444.         n% = 2
  1445.     elseif FValidFATDir(szDir$) = 0 then
  1446.         n% = 3
  1447.     else
  1448.         n% = 0
  1449.     end if
  1450.     if n% > 0 then
  1451.         BadArgErr n%, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1452.     end if
  1453. '$endif ''DEBUG
  1454.     IF FPrependToPath (szSrc$, szDst$, szDir$, cmo%) = 0 THEN
  1455. '$ifdef DEBUG
  1456.         StfApiErr saeFail, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1457. '$endif ''DEBUG
  1458.         ERROR STFERR
  1459.     END IF
  1460. END SUB
  1461. '**************************************************************************
  1462. '***************************  Error Handlers  *****************************
  1463. '**************************************************************************
  1464. '$ifdef DEBUG
  1465. '**************************************************************************
  1466. SUB StfApiErr (nMsg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1467.     select case nMsg%
  1468.         case saeFail
  1469.             lpText$ = "Failed"
  1470.         case saeInit
  1471.             lpText$ = "Already Initialized"
  1472.         case saeNYI
  1473.             lpText$ = "NYI"
  1474.         case else
  1475.             lpText$ = "Bad Arg "+LTRIM$(STR$(nMsg% - saeArg))
  1476.     end select
  1477.     lpText$ = lpText$ + ": "+ szApi$
  1478.     if szArgs$ <> "" then
  1479.         lpText$ = lpText + " (" + szArgs$ + ")"
  1480.     end if
  1481.     lpCaption$ = "MS-Setup Toolkit API Error"
  1482.     res% = DoMsgBox(lpText$, lpCaption$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  1483.     print lpText$
  1484.     lpText$ = ""
  1485.     lpCaption$ = ""
  1486. END SUB
  1487. '**************************************************************************
  1488. SUB BadArgErr (nArg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1489.     StfApiErr nArg%+saeArg, szApi$, szArgs$
  1490.     ERROR STFERR
  1491. END SUB
  1492. '** REVIEW: Move this function into common lib (we'll need it there too)
  1493. '**************************************************************************
  1494. FUNCTION FValidInfSect (szSect$) STATIC AS INTEGER
  1495.     if (szSect$ = "") OR (INSTR(1,szSect$,"]") <> 0) then
  1496.         FValidInfSect = 0
  1497.     else
  1498.         FValidInfSect = 1
  1499.     end if
  1500. END FUNCTION
  1501. '** REVIEW: Move this function into common lib (we'll need it there too)
  1502. '**************************************************************************
  1503. FUNCTION FValidIniFile (szFile$) STATIC AS INTEGER
  1504.     if (FValidFATPath(szFile$) = 0) AND (UCASE$(szFile$) <> "WIN.INI") then
  1505.         FValidIniFile = 0
  1506.     else
  1507.         FValidIniFile = 1
  1508.     end if
  1509. END FUNCTION
  1510. '**************************************************************************
  1511. FUNCTION FValidDrive (szDrive$) STATIC AS INTEGER
  1512.     if szDrive$ = "" then
  1513.         FValidDrive = 0
  1514.     elseif INSTR(1,szDrive$,"\") = 1 then   ' UNC path
  1515.         FValidDrive = 1
  1516.     elseif ASC(UCASE$(szDrive$)) - ASC("A") < 0 then
  1517.         FValidDrive = 0
  1518.     elseif ASC(UCASE$(szDrive$)) - ASC("A") > 25 then
  1519.         FValidDrive = 0
  1520.     elseif LEN(szDrive$) = 1 then
  1521.         FValidDrive = 1
  1522.     elseif INSTR(2,szDrive$,":") = 2 then
  1523.         FValidDrive = 1
  1524.     elseif INSTR(1,szDrive$,":") = 2 then
  1525.         FValidDrive = 1
  1526.     else
  1527.         FValidDrive = 0
  1528.     end if
  1529. END FUNCTION
  1530. '$endif ''DEBUG
  1531. TRAP CleanupTrap From "MSSHLSTF.DLL"
  1532. End Trap
  1533. hSetup = InitSetup(COMMAND$)
  1534. ON ERROR GOTO QUIT