home *** CD-ROM | disk | FTP | other *** search
/ substance.digizine 1.2 / DIGIZINE2.BIN / qtw / setupapi.inc < prev    next >
Text File  |  1994-11-01  |  56KB  |  1,816 lines

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