home *** CD-ROM | disk | FTP | other *** search
/ PC World 1999 August / PCWorld_1999-08_cd.bin / Novinky / zav / Disk1 / setupapi.in_ / setupapi.in
Text File  |  1996-04-08  |  56KB  |  1,806 lines

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