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