home *** CD-ROM | disk | FTP | other *** search
/ NetComm Communications 5 / NetComm.iso / resource / netcomm / wcomm / disk1 / setupapi.in_ / setupapi.bin
Encoding:
Text File  |  1994-10-24  |  54.5 KB  |  1,806 lines

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