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