home *** CD-ROM | disk | FTP | other *** search
/ Chip Hitware 3 / Chip_Hitware_Vol_03.iso / chiphit3 / dfu / intelect / disk1 / setupapi.in_ / setupapi.in
Text File  |  1995-07-01  |  56KB  |  1,819 lines

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