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