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