home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1998 January (DVD) / VPR980100.ISO / OLS / WIN16 / CG_ST / CG_ST02.LZH / SETUPAPI.IN_ / SETUPAPI.IN
Text File  |  1993-11-18  |  58KB  |  1,857 lines

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