home *** CD-ROM | disk | FTP | other *** search
/ Multimedia Classic / MultimediaClassic.mdf / app_main / dragdict / disk1 / setupapi.in_ / setupapi.in
Encoding:
Text File  |  1994-05-26  |  54.5 KB  |  1,823 lines

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