home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1996 May / PCW596.iso / demo / elmark / dasylab / disk1 / setupapi.in_ / setupapi.in
Text File  |  1992-12-20  |  56KB  |  1,808 lines

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