home *** CD-ROM | disk | FTP | other *** search
/ PC Direct 1996 August / AAHRDEMO.ISO / software / docs / setupapi.in_ / setupapi.bin
Encoding:
Text File  |  1996-05-14  |  39.0 KB  |  1,298 lines

  1. '**************************************************************************
  2. '*******************************  Windows API's  **************************
  3. '**************************************************************************
  4. GLOBAL hSetup AS INTEGER
  5. GLOBAL fFrameInit AS INTEGER
  6. GLOBAL fInstallInit AS INTEGER
  7.  
  8. CONST SM_CXSCREEN = 0
  9. CONST SM_CYSCREEN = 1
  10.  
  11. CONST WF_80x87    = 1024
  12. CONST WF_CPU186   =  128
  13. CONST WF_CPU286   =    2
  14. CONST WF_CPU386   =    4
  15. CONST WF_CPU486   =    8
  16. CONST WF_STANDARD =   16
  17. CONST WF_ENHANCED =   32
  18.  
  19.  
  20. '' DoMsgBox Flags
  21.  
  22. CONST MB_OK          = 0
  23. CONST MB_ICONHAND    = 16
  24. CONST MB_TASKMODAL   = 8192
  25.  
  26.  
  27. DECLARE FUNCTION DoMsgBox LIB "mscomstf.dll" (lpText$,lpCaption$,wType%) As INTEGER
  28. DECLARE FUNCTION GetWindowsDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  29. DECLARE FUNCTION GetSystemDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  30. DECLARE FUNCTION GetProfileString LIB "kernel" (szSect$, szKey$, szDefault$, szBuf$, cbBuf%) AS INTEGER
  31. DECLARE FUNCTION GetVersion LIB "kernel" AS INTEGER
  32. DECLARE FUNCTION GetSystemMetrics LIB "user" (nIndex%) AS INTEGER
  33. DECLARE FUNCTION GetWinFlags LIB "kernel" AS LONG
  34.  
  35.  
  36.  
  37.  
  38. '**************************************************************************
  39. '****************************** Setup Constants ***************************
  40. '**************************************************************************
  41.  
  42.  
  43. ''Command Option Flags
  44.  
  45. CONST cmoVital       = 1
  46. CONST cmoCopy        = 2
  47. CONST cmoUndo        = 4
  48. CONST cmoRoot        = 8
  49. CONST cmoDecompress  = 16
  50. CONST cmoTimeStamp   = 32
  51. CONST cmoReadOnly    = 64
  52. CONST cmoBackup      = 128
  53. CONST cmoForce       = 256
  54. CONST cmoRemove      = 512
  55. CONST cmoOverwrite   = 1024
  56. CONST cmoAppend      = 2048
  57. CONST cmoPrepend     = 4096
  58. CONST cmoNone        = 0
  59. CONST cmoAll         = 65535
  60.  
  61.  
  62. ''File Exist Modes
  63.  
  64. CONST femExists     = 0
  65. CONST femRead       = 1
  66. CONST femWrite      = 2
  67. CONST femReadWrite  = 3
  68.  
  69.  
  70. ''Read-Only Return Code
  71.  
  72. CONST ynrcNo         = 0
  73. CONST ynrcYes        = 1
  74. CONST ynrcErr1       = 2
  75. CONST ynrcErr2       = 3
  76. CONST ynrcErr3       = 4
  77. CONST ynrcErr4       = 5
  78. CONST ynrcErr5       = 6
  79. CONST ynrcErr6       = 7
  80. CONST ynrcErr7       = 8
  81. CONST ynrcErr8       = 9
  82. CONST ynrcErr9       = 10
  83.  
  84.  
  85. ''General Return Codes
  86.  
  87. CONST grcOkay       = 0
  88. CONST grcNotOkay    = 1
  89. CONST grcUserQuit   = 48
  90.  
  91.  
  92. ''Ranges
  93.  
  94. ''CONST cbSymValMax = 8192
  95. CONST cbSymValMax = 512
  96.     ''REVIEW: symbol table will allow strings up to 8192 bytes
  97.      '' but we get Out of String Space wattdrvr error if we alloc
  98.     '' STRING$() that big. (See GetSymbolValue and GetListItem)
  99.     '' We should look into using dynamic far alloc instead of
  100.     '' STRING$ for large buffers.
  101.     '' NOTE: 8192 works okay with runtime wattdrvr, however.
  102.  
  103.  
  104. ''ON ERROR Error Codes
  105. CONST STFERR      = 1024   ''setup system error
  106. CONST STFQUIT     = 1025   ''user quit
  107.  
  108. CONST scmOff      = 0
  109. CONST scmOnIgnore = 1
  110. CONST scmOnFatal  = 2
  111.  
  112.  
  113. '**************************************************************************
  114. '********************************  Setup API's  ***************************
  115. '**************************************************************************
  116.  
  117. '' common
  118.  
  119. DECLARE FUNCTION FOpenInf LIB "mscomstf.dll" (szFile$, fCheck%, fCheckSyms%) AS INTEGER
  120. DECLARE FUNCTION FSetSilent LIB "mscomstf.dll" (mode%) AS INTEGER
  121. DECLARE FUNCTION FOpenLogFile    LIB "mscomstf.dll" (szFile$, fAppend%) AS INTEGER
  122. DECLARE FUNCTION FCloseLogFile   LIB "mscomstf.dll" AS INTEGER
  123. DECLARE FUNCTION FWriteToLogFile LIB "mscomstf.dll" (sz$, fRequire%) AS INTEGER
  124. DECLARE FUNCTION CbGetInfSectionKeyField LIB "mscomstf.dll" (szSect$, szKey$, iField%, szBuf$, cbBuf%) AS INTEGER
  125. DECLARE FUNCTION FMakeListInfSectionField LIB "mscomstf.dll" (szSym$, szSect$, iField%) AS INTEGER
  126.  
  127.  
  128. ''shell
  129.  
  130. DECLARE FUNCTION FSetBitmap LIB "msshlstf.dll" (szDll$, Bitmap%) AS INTEGER
  131. DECLARE FUNCTION FDoDialog LIB "msuilstf.dll" (hwnd%, szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS INTEGER
  132. DECLARE FUNCTION FKillNDialogs LIB "msuilstf.dll" (n%) AS INTEGER
  133. DECLARE SUB SetWindowText LIB "User" (hwnd%, lpString$)
  134. DECLARE FUNCTION FSetSymbolValue LIB "msshlstf.dll" (szSymbol$, szValue$) AS INTEGER
  135. DECLARE FUNCTION CbGetSymbolValue LIB "mscomstf.dll" (szSymbol$, szValue$, Length%) AS INTEGER
  136. DECLARE FUNCTION UsGetListLength LIB "mscomstf.dll" (szSymbol$) AS INTEGER
  137. DECLARE FUNCTION CbGetListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$, cbMax%) AS INTEGER
  138. DECLARE FUNCTION FAddListItem LIB "mscomstf.dll" (szListSymbol$, szListItem$) AS INTEGER
  139. DECLARE FUNCTION FReplaceListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$) AS INTEGER
  140. DECLARE FUNCTION FSetSymbolToListOfInfKeys LIB "mscomstf.dll" (szSym$, szSect$, fNulls%) AS INTEGER
  141.  
  142.  
  143. ''shell
  144.  
  145. DECLARE FUNCTION InitializeFrame LIB "msshlstf.dll" (szCmdLine$) AS INTEGER
  146. DECLARE FUNCTION HwndFrame LIB "msshlstf.dll" AS INTEGER
  147. DECLARE FUNCTION HinstFrame LIB "msshlstf.dll" AS INTEGER
  148.  
  149.  
  150.  
  151. ''install
  152.  
  153. DECLARE SUB      ProSetPos LIB "msinsstf.dll" (x%, y%)
  154. DECLARE FUNCTION FCreateDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  155. DECLARE FUNCTION FAddSectionFilesToCopyList LIB "mscomstf.dll" (szSect$, szSrc$, szDest$) AS INTEGER
  156. DECLARE FUNCTION FAddSectionKeyFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  157. DECLARE FUNCTION FAddSpecialFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  158. DECLARE FUNCTION GrcCopyFilesInCopyList LIB "msinsstf.dll" (hInstance%) AS INTEGER
  159. DECLARE FUNCTION FRemoveIniSection LIB "msinsstf.dll" (szFile$, szSect$, cmo%) AS INTEGER
  160. DECLARE FUNCTION FCreateIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  161. DECLARE FUNCTION FRemoveIniKey LIB "msinsstf.dll" (szFile$, szSect$, szKey$, cmo%) AS INTEGER
  162. DECLARE FUNCTION FCreateProgManGroup LIB "msinsstf.dll" (szGroup$, szPath$, cmo%) AS INTEGER
  163. DECLARE FUNCTION FCreateProgManItem LIB "msinsstf.dll" (szGroup$, szItem$, szCmd$, cmo%) AS INTEGER
  164. DECLARE FUNCTION FShowProgManGroup LIB "msinsstf.dll" (szGroup$, szCmd$, cmo%) AS INTEGER
  165. DECLARE SUB      ResetCopyList LIB "msinsstf.dll"
  166. DECLARE FUNCTION FCopyOneFile LIB "msinsstf.dll" (szSrc$, szDest$, cmo%, fAppend%) AS INTEGER
  167. DECLARE FUNCTION YnrcRemoveFile LIB "msinsstf.dll" (szFullPathSrc$, cmo%) AS INTEGER
  168. DECLARE FUNCTION YnrcBackupFile LIB "msinsstf.dll" (szFullPath$, szBackup$, cmo%) AS INTEGER
  169. DECLARE FUNCTION FInitializeInstall LIB "msinsstf.dll" (hinst%, hwndFrame%) AS INTEGER
  170. DECLARE FUNCTION WFindFileUsingFileOpen LIB "msinsstf.dll" (szFile$, szBuf$, cbBuf%) AS INTEGER
  171. DECLARE FUNCTION FIsDirWritable LIB "msinsstf.dll" (szDir$) AS INTEGER
  172. DECLARE FUNCTION FIsFileWritable LIB "msinsstf.dll" (szFile$) AS INTEGER
  173. DECLARE FUNCTION FAddToBillboardList LIB "msinsstf.dll" (szDll$, idDlg%, szProc$, lTicks&) AS INTEGER
  174. DECLARE FUNCTION FClearBillboardList LIB "msinsstf.dll" AS INTEGER
  175. DECLARE FUNCTION FSetRestartDir LIB "msinsstf.dll" (szDir$) AS INTEGER
  176. DECLARE FUNCTION FRestartListEmpty LIB "msinsstf.dll" AS INTEGER
  177. DECLARE FUNCTION FExitExecRestart LIB "msinsstf.dll" AS INTEGER
  178. DECLARE FUNCTION SetCopyMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  179. DECLARE FUNCTION GetCopyMode LIB "msinsstf.dll" AS INTEGER
  180. DECLARE FUNCTION SetDecompMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  181. DECLARE FUNCTION GetDecompMode LIB "msinsstf.dll" AS INTEGER
  182. DECLARE FUNCTION SetSizeCheckMode LIB "msinsstf.dll" (scmMode%) AS INTEGER
  183. DECLARE FUNCTION FPrependToPath LIB "msinsstf.dll" (szSrc$, szDst$, szDir$, cmo%) AS INTEGER
  184.  
  185. DECLARE FUNCTION SetTimeValue LIB "msinsstf.dll" (usHours%, usMinutes%, usSeconds%) AS INTEGER
  186.  
  187.  
  188.  
  189. '*************************************************************************
  190. '****************  Setup Basic Wrapper Declarations  *********************
  191. '*************************************************************************
  192.  
  193.  
  194. ''shell
  195.  
  196. DECLARE SUB SetBitmap(szDll$, Bitmap%)
  197. DECLARE FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS STRING
  198. DECLARE SUB UIPop (n%)
  199. DECLARE SUB UIPopAll
  200. DECLARE SUB SetTitle (sz$)
  201. DECLARE SUB ReadInfFile (szFile$)
  202. DECLARE SUB SetSymbolValue (szSymbol$, szValue$)
  203. DECLARE FUNCTION GetSymbolValue (szSymbol$) AS STRING
  204. DECLARE FUNCTION GetListLength(szSymbol$) AS INTEGER
  205. DECLARE FUNCTION GetListItem(szSymbol$, n%) AS STRING
  206. DECLARE SUB AddListItem(szSymbol$, szItem$)
  207. DECLARE SUB ReplaceListItem(szSymbol$, n%, szItem$)
  208.  
  209. DECLARE FUNCTION InitFrame (szCmdLine$) AS INTEGER
  210. DECLARE FUNCTION InitSetup (szCmdLine$) AS INTEGER
  211.  
  212.  
  213.  
  214. ''install
  215.  
  216.  
  217. DECLARE SUB CreateDir (szDir$, cmo%)
  218. DECLARE SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$)
  219. DECLARE SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  220. DECLARE SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  221. DECLARE SUB CopyFilesInCopyList
  222. DECLARE SUB RemoveIniSection (szFile$, szSect$, cmo%)
  223. DECLARE SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  224. DECLARE SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%)
  225. DECLARE SUB CreateProgmanGroup (szGroup$, szPath$, cmo%)
  226. DECLARE SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%)
  227. DECLARE SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%)
  228. DECLARE SUB RemoveFile (szFullPathSrc$, cmo%)
  229. DECLARE SUB BackupFile (szFullPath$, szBackup$)
  230. DECLARE SUB RenameFile (szFullPath$, szBackup$)
  231. DECLARE SUB InitInstall
  232. DECLARE SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&)
  233. DECLARE SUB AddBlankToBillboardList (lTicks&)
  234. DECLARE SUB ClearBillboardList
  235. DECLARE SUB OpenLogFile (szFile$, fAppend%)
  236. DECLARE SUB CloseLogFile
  237. DECLARE SUB WriteToLogFile (szStr$)
  238. DECLARE SUB SetCopyGaugePosition (x%, y%)
  239. DECLARE SUB SetRestartDir(szDir$)
  240. DECLARE FUNCTION RestartListEmpty AS INTEGER
  241. DECLARE FUNCTION ExitExecRestart AS INTEGER
  242. DECLARE FUNCTION FindFileUsingFileOpen (szFile$) AS STRING
  243. DECLARE FUNCTION IsDirWritable (szDir$) AS INTEGER
  244. DECLARE FUNCTION IsFileWritable (szFile$) AS INTEGER
  245. DECLARE FUNCTION GetNthFieldFromIniString (szLine$, iField%) AS STRING
  246. DECLARE SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%)
  247.  
  248.  
  249. '' Error Handling
  250.  
  251. '$ifdef DEBUG
  252.  
  253. '' Setup API Errors
  254. CONST saeFail   = 0
  255. CONST saeInit   = 1
  256. CONST saeNYI    = 3
  257. CONST saeArg    = 4    ''must be max sae value
  258.  
  259. DECLARE SUB StfApiErr (nMsg%, szApi$, szArgs$)
  260. DECLARE SUB BadArgErr (nArg%, szApi$, szArgs$)
  261.  
  262. '' chk arg
  263. DECLARE FUNCTION FValidFATDir LIB "mscomstf.dll" (szDir$) AS INTEGER
  264. DECLARE FUNCTION CchlValidFATSubPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  265. DECLARE FUNCTION FValidFATPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  266. DECLARE FUNCTION FValidDrive (szDrive$) AS INTEGER
  267.  
  268. DECLARE FUNCTION FValidInfSect (szSect$) AS INTEGER
  269. DECLARE FUNCTION FValidIniFile (szFile$) AS INTEGER
  270.  
  271. '$endif ''DEBUG
  272.  
  273.  
  274.  
  275. '' Windows system detect
  276.  
  277. DECLARE FUNCTION GetWindowsMajorVersion AS INTEGER
  278. DECLARE FUNCTION GetWindowsMinorVersion AS INTEGER
  279. DECLARE FUNCTION GetWindowsMode AS INTEGER
  280. DECLARE FUNCTION GetWindowsDir  AS STRING
  281. DECLARE FUNCTION GetWindowsSysDir AS STRING
  282. DECLARE FUNCTION IsWindowsShared AS INTEGER
  283. DECLARE FUNCTION GetScreenWidth AS INTEGER
  284. DECLARE FUNCTION GetScreenHeight AS INTEGER
  285.  
  286.  
  287. '*************************************************************************
  288. '*****************  Setup Basic Wrapper Definitions  *********************
  289. '*************************************************************************
  290. FUNCTION InitSetup(szCmdLine$) STATIC AS INTEGER
  291.     fFrameInit = 0
  292.     fInstallInit = 0
  293.  
  294.     IF hSetup > 0 THEN
  295. '$ifdef DEBUG
  296.         StfApiErr saeInit, "InitSetup", szCmdLine$
  297. '$endif ''DEBUG
  298.     END IF
  299.  
  300.     i% = InitFrame(szCmdLine$)
  301.     fFrameInit = 1
  302.  
  303.     InitInstall
  304.     fInstallInit = 1
  305.  
  306.      InitSetup = i%
  307. END FUNCTION
  308.  
  309.  
  310.  
  311. '**************************************************************************
  312. FUNCTION InitFrame(szCmdLine$) STATIC AS INTEGER
  313.      IF hSetup > 0 THEN
  314. '$ifdef DEBUG
  315.           StfApiErr saeInit, "InitFrame", szCmdLine$
  316. '$endif ''DEBUG
  317.      ELSE
  318.           i% = InitializeFrame(szCmdLine$)
  319.           IF i% = -1 THEN
  320.                 END   '' NOT an error - Usage (/?) or Command line copy operation
  321.           ELSEIF i% = 0 THEN
  322. '$ifdef DEBUG
  323.                 StfApiErr saeFail, "InitFrame", szCmdLine$
  324. '$endif ''DEBUG
  325.                 END
  326.           ELSE
  327.                 InitFrame = i%
  328.           END IF
  329.      END IF
  330. END FUNCTION
  331.  
  332.  
  333. '**************************************************************************
  334. SUB SetBitmap(szDll$, Bitmap%) STATIC
  335.      IF FSetBitmap(szDll$, Bitmap%) = 0 THEN
  336. '$ifdef DEBUG
  337.           StfApiErr saeFail, "SetBitmap", szDll$+","+STR$(Bitmap%)
  338. '$endif ''DEBUG
  339.           ERROR STFERR
  340.      END IF
  341. END SUB
  342.  
  343.  
  344. '**************************************************************************
  345. SUB SetTitle(sz$) STATIC
  346.      SetWindowText HwndFrame(), sz$
  347. END SUB
  348.  
  349.  
  350. '*************************************************************************
  351. SUB ReadInfFile (szFile$) STATIC
  352. '$ifdef DEBUG
  353.     if FValidFATPath(szFile$) = 0 then
  354.           BadArgErr 1, "ReadInfFile", szFile$
  355.      end if
  356.      IF FOpenInf(szFile$, 1, 1) = 0 THEN
  357.           StfApiErr saeFail, "ReadInfFile", szFile$
  358. '$else  ''!DEBUG
  359.      IF FOpenInf(szFile$, 1, 0) = 0 THEN
  360. '$endif ''!DEBUG
  361.           ERROR STFERR
  362.      END IF
  363. END SUB
  364.  
  365.  
  366. '*************************************************************************
  367. FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) STATIC AS STRING
  368. '$ifdef DEBUG
  369.     if szDll$ = "" then
  370.         n% = 1
  371.     elseif szDlgProc$ = "" then
  372.         n% = 3
  373.     else
  374.         n% = 0
  375.      end if
  376.     if n% > 0 then
  377.         BadArgErr n%, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  378.     end if
  379. '$endif ''DEBUG
  380.  
  381.     IF FDoDialog(HwndFrame(), szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) = 0 THEN
  382. '$ifdef DEBUG
  383.         StfApiErr saeFail, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  384. '$endif ''DEBUG
  385.         ERROR STFERR
  386.     ELSE
  387.         UIStartDlg = GetSymbolValue("DLGEVENT")
  388.     END IF
  389. END FUNCTION
  390.  
  391.  
  392. '*************************************************************************
  393. SUB UIPop (n%) STATIC
  394.      IF FKillNDialogs(n%) = 0 THEN
  395. '$ifdef DEBUG
  396.         StfApiErr saeFail, "UIPop", STR$(n%)
  397. '$endif ''DEBUG
  398.         ERROR STFERR
  399.      END IF
  400. END SUB
  401.  
  402.  
  403. '*************************************************************************
  404. SUB UIPopAll STATIC
  405.     IF FKillNDialogs(65535) = 0 THEN
  406. '$ifdef DEBUG
  407.         StfApiErr saeFail, "UIPopAll", ""
  408. '$endif ''DEBUG
  409.         ERROR STFERR
  410.     END IF
  411. END SUB
  412.  
  413.  
  414. '*************************************************************************
  415. FUNCTION GetSymbolValue(szSymbol$) STATIC AS STRING
  416. '$ifdef DEBUG
  417.     if szSymbol$ = "" then
  418.         BadArgErr 1, "GetSymbolValue", szSymbol$
  419.      end if
  420. '$endif ''DEBUG
  421.     szValue$ = string$(cbSymValMax,32)
  422.     Length% = CbGetSymbolValue(szSymbol$, szValue$, cbSymValMax)
  423.      GetSymbolValue = szValue$
  424.      IF Length% >= cbSymValMax THEN
  425.           res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  426.           ERROR STFERR
  427.      END IF
  428.      IF szSymbol$ = "" THEN
  429.           ERROR STFERR
  430.      END IF
  431.      szValue$ = ""
  432. END FUNCTION
  433.  
  434.  
  435. '*************************************************************************
  436. FUNCTION GetListLength(szSymbol$) STATIC AS INTEGER
  437. '$ifdef DEBUG
  438.      if szSymbol$ = "" then
  439.           BadArgErr 1, "GetListLength", szSymbol$
  440.      end if
  441. '$endif ''DEBUG
  442.      GetListLength = UsGetListLength(szSymbol$)
  443.      IF szSymbol$ = "" THEN
  444.           ERROR STFERR
  445.      END IF
  446. END FUNCTION
  447.  
  448.  
  449. '*************************************************************************
  450. FUNCTION GetListItem(szListSymbol$, nItem%) STATIC AS STRING
  451. '$ifdef DEBUG
  452.      if szListSymbol$ = "" then
  453.           BadArgErr 1, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  454.      end if
  455.  
  456.      if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  457.           BadArgErr 2, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  458.      end if
  459. '$endif ''DEBUG
  460.  
  461.      szListItem$ = string$(cbSymValMax,32)
  462.      Length% = CbGetListItem(szListSymbol$, nItem%, szListItem$, cbSymValMax)
  463.      GetListItem = szListItem$
  464.      IF Length% >= cbSymValMax THEN
  465.           res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  466.           ERROR STFERR
  467.      END IF
  468.      IF szListSymbol$ = "" THEN
  469.           ERROR STFERR
  470.      END IF
  471.      if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  472.           ERROR STFERR
  473.      end if
  474.      szListItem$ = ""
  475. END FUNCTION
  476.  
  477.  
  478. '*************************************************************************
  479. SUB AddListItem(szSymbol$, szItem$) STATIC
  480. '$ifdef DEBUG
  481.      if szSymbol$ = "" then
  482.           BadArgErr 1, "AddListItem", szSymbol$+", "+szItem$
  483.      end if
  484. '$endif ''DEBUG
  485.     IF FAddListItem(szSymbol$, szItem$) = 0 THEN
  486. '$ifdef DEBUG
  487.           StfApiErr saeFail, "AddListItem", szSymbol$+", "+szItem$
  488. '$endif ''DEBUG
  489.         ERROR STFERR
  490.     END IF
  491. END SUB
  492.  
  493.  
  494. '*************************************************************************
  495. SUB ReplaceListItem(szSymbol$, n%, szItem$) STATIC
  496. '$ifdef DEBUG
  497.     if szSymbol$ = "" then
  498.         nArg% = 1
  499.      elseif (n% <= 0) OR (n% > GetListLength(szSymbol$)) then
  500.         nArg% = 2
  501.     else
  502.         nArg% = 0
  503.     end if
  504.     if nArg% > 0 then
  505.           BadArgErr nArg%, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  506.      end if
  507. '$endif ''DEBUG
  508.  
  509.      IF FReplaceListItem(szSymbol$, n%, szItem$) = 0 THEN
  510. '$ifdef DEBUG
  511.           StfApiErr saeFail, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  512. '$endif ''DEBUG
  513.           ERROR STFERR
  514.      END IF
  515. END SUB
  516.  
  517. '*************************************************************************
  518. SUB SetSymbolValue(szSymbol$, szValue$) STATIC
  519. '$ifdef DEBUG
  520.      if szSymbol$ = "" then
  521.           BadArgErr 1, "SetSymbolValue", szSymbol$+", "+szValue$
  522.      end if
  523. '$endif ''DEBUG
  524.      IF FSetSymbolValue(szSymbol$, szValue$) = 0 THEN
  525. '$ifdef DEBUG
  526.         StfApiErr saeFail, "SetSymbolValue", szSymbol$+", "+szValue$
  527. '$endif ''DEBUG
  528.         ERROR STFERR
  529.     END IF
  530. END SUB
  531.  
  532.  
  533. '*************************************************************************
  534. SUB InitInstall STATIC
  535.      IF hSetup > 0 THEN
  536. '$ifdef DEBUG
  537.           StfApiErr saeInit, "InitInstall", ""
  538. '$endif ''DEBUG
  539.     ELSEIF FInitializeInstall(HinstFrame(), HwndFrame()) = 0 THEN
  540. '$ifdef DEBUG
  541.         StfApiErr saeFail, "InitInstall", ""
  542. '$endif ''DEBUG
  543.         END
  544.      END IF
  545. END SUB
  546.  
  547.  
  548. '*************************************************************************
  549. SUB CreateDir (szDir$, cmo%) STATIC
  550. '$ifdef DEBUG
  551.     if FValidFATDir(szDir$) = 0 then
  552.         BadArgErr 1, "CreateDir", szDir$+", "+STR$(cmo%)
  553.     end if
  554. '$endif ''DEBUG
  555.     IF FCreateDir(szDir$, cmo%) = 0 THEN
  556. '$ifdef DEBUG
  557.         StfApiErr saeFail, "CreateDir", szDir$+", "+STR$(cmo%)
  558. '$endif ''DEBUG
  559.         ERROR STFERR
  560.     END IF
  561. END SUB
  562.  
  563.  
  564. '*************************************************************************
  565. SUB RemoveIniSection (szFile$, szSect$, cmo%) STATIC
  566. '$ifdef DEBUG
  567.     if FValidIniFile(szFile$) = 0 then
  568.         n% = 1
  569.     elseif FValidInfSect(szSect$) = 0 then
  570.         n% = 2
  571.     else
  572.         n% = 0
  573.     end if
  574.     if n% > 0 then
  575.           BadArgErr n%, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  576.     end if
  577. '$endif ''DEBUG
  578.  
  579.     IF FRemoveIniSection(szFile$, szSect$, cmo%) = 0 THEN
  580. '$ifdef DEBUG
  581.         StfApiErr saeFail, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  582. '$endif ''DEBUG
  583.         ERROR STFERR
  584.     END IF
  585. END SUB
  586.  
  587.  
  588. '*************************************************************************
  589. SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  590. '$ifdef DEBUG
  591.     if FValidIniFile(szFile$) = 0 then
  592.         n% = 1
  593.     elseif FValidInfSect(szSect$) = 0 then
  594.         n% = 2
  595.     else
  596.         n% = 0
  597.     end if
  598.     if n% > 0 then
  599.           BadArgErr n%, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  600.     end if
  601. '$endif ''DEBUG
  602.  
  603.     IF FCreateIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  604. '$ifdef DEBUG
  605.         StfApiErr saeFail, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  606. '$endif ''DEBUG
  607.         ERROR STFERR
  608.     END IF
  609. END SUB
  610.  
  611.  
  612. '*************************************************************************
  613. SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%) STATIC
  614. '$ifdef DEBUG
  615.     if FValidIniFile(szFile$) = 0 then
  616.         n% = 1
  617.     elseif FValidInfSect(szSect$) = 0 then
  618.         n% = 2
  619.     elseif szKey$ = "" then
  620.         n% = 3
  621.     else
  622.         n% = 0
  623.      end if
  624.     if n% > 0 then
  625.         BadArgErr n%, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  626.     end if
  627. '$endif ''DEBUG
  628.  
  629.     IF FRemoveIniKey(szFile$, szSect$, szKey$, cmo%) = 0 THEN
  630. '$ifdef DEBUG
  631.         StfApiErr saeFail, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  632. '$endif ''DEBUG
  633.         ERROR STFERR
  634.     END IF
  635. END SUB
  636.  
  637.  
  638. '*************************************************************************
  639. SUB CreateProgmanGroup (szGroup$, szPath$, cmo%) STATIC
  640. '$ifdef DEBUG
  641.     if szGroup$ = "" or len(szGroup$) > 24 then
  642.         BadArgErr 1, "CreateProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  643.     end if
  644. '$endif ''DEBUG
  645.      IF FCreateProgManGroup(szGroup$, szPath$, cmo%) = 0 THEN
  646. '$ifdef DEBUG
  647.         StfApiErr saeFail, "CreateProgmanGroup", szGroup$+", "+szPath$+", "+STR$(cmo%)
  648. '$endif ''DEBUG
  649.         ERROR STFERR
  650.     END IF
  651. END SUB
  652.  
  653.  
  654. '*************************************************************************
  655. SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%) STATIC
  656. '$ifdef DEBUG
  657.     if szGroup$ = "" or len(szGroup$) > 24 then
  658.         BadArgErr 1, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  659.     end if
  660. '$endif ''DEBUG
  661.     IF FShowProgManGroup(szGroup$, STR$(Cmd%), cmo%) = 0 THEN
  662. '$ifdef DEBUG
  663.           StfApiErr saeFail, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  664. '$endif ''DEBUG
  665.           ERROR STFERR
  666.      END IF
  667. END SUB
  668.  
  669.  
  670. '*************************************************************************
  671. SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%) STATIC
  672.      szItemNew$ = szItem$
  673.      IF szOther$ <> "" THEN
  674.           szItemNew$ = szItem$ + "," + szOther$
  675.      END IF
  676. '$ifdef DEBUG
  677.     if szGroup$ = "" or len(szGroup$) > 24 then
  678.         BadArgErr 1, "CreateProgmanItem", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  679.     end if
  680. '$endif ''DEBUG
  681.  
  682.     IF FCreateProgManItem(szGroup$, szItemNew$, szCmd$, cmo%) = 0 THEN
  683. '$ifdef DEBUG
  684.         StfApiErr saeFail, "CreateProgmanItem", szGroup$+", "+szItem$+", "+szCmd$+", "+szOther$+", "+STR$(cmo%)
  685. '$endif ''DEBUG
  686.         ERROR STFERR
  687.     END IF
  688.     szItemNew$ = ""
  689. END SUB
  690.  
  691.  
  692. '*************************************************************************
  693. SUB CopyFilesInCopyList STATIC
  694.     grc% = GrcCopyFilesInCopyList (HinstFrame())
  695.  
  696.     IF grc% = grcUserQuit THEN
  697.         ERROR STFQUIT
  698.     ELSEIF grc% > 0 THEN
  699. '$ifdef DEBUG
  700.         StfApiErr saeFail, "CopyFilesInCopyList", ""
  701. '$endif ''DEBUG
  702.         ERROR STFERR
  703.      END IF
  704. END SUB
  705.  
  706.  
  707. '*************************************************************************
  708. SUB RemoveFile (szFullPathSrc$, cmo%) STATIC
  709. '$ifdef DEBUG
  710.     if FValidFATPath(szFullPathSrc$) = 0 then
  711.         BadArgErr 1, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  712.     end if
  713. '$endif ''DEBUG
  714.     IF  YnrcRemoveFile(szFullPathSrc$, cmo%) = ynrcNo THEN
  715. '$ifdef DEBUG
  716.         StfApiErr saeFail, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  717. '$endif ''DEBUG
  718.         ERROR STFERR
  719.     END IF
  720. END SUB
  721.  
  722.  
  723. '*************************************************************************
  724. SUB BackupFile (szFullPath$, szBackup$) STATIC
  725. '$ifdef DEBUG
  726.      if FValidFATPath(szFullPath$) = 0 then
  727.         n% = 1
  728.     elseif szBackup$ = "" then
  729.         n% = 2
  730.     else
  731.         n% = 0
  732.     end if
  733.     if n% > 0 then
  734.         BadArgErr n%, "BackupFile", szFullPath$+", "+szBackup$
  735.     end if
  736. '$endif ''DEBUG
  737.  
  738.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  739. '$ifdef DEBUG
  740.         StfApiErr saeFail, "BackupFile", szFullPath$+", "+szBackup$
  741. '$endif ''DEBUG
  742.         ERROR STFERR
  743.     END IF
  744. END SUB
  745.  
  746.  
  747. '*************************************************************************
  748. SUB RenameFile (szFullPath$, szBackup$) STATIC
  749. '$ifdef DEBUG
  750.      if FValidFATPath(szFullPath$) = 0 then
  751.         n% = 1
  752.     elseif szBackup$ = "" then
  753.         n% = 2
  754.     else
  755.         n% = 0
  756.     end if
  757.     if n% > 0 then
  758.         BadArgErr n%, "RenameFile", szFullPath$+", "+szBackup$
  759.     end if
  760. '$endif ''DEBUG
  761.  
  762.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  763. '$ifdef DEBUG
  764.         StfApiErr saeFail, "RenameFile", szFullPath$+", "+szBackup$
  765. '$endif ''DEBUG
  766.         ERROR STFERR
  767.     END IF
  768. END SUB
  769.  
  770.  
  771. '*************************************************************************
  772. SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$) STATIC
  773. '$ifdef DEBUG
  774.      if FValidInfSect(szSect$) = 0 then
  775.         n% = 1
  776.     elseif FValidFATDir(szSrc$) = 0 then
  777.         n% = 2
  778.     elseif FValidFATDir(szDest$) = 0 then
  779.         n% = 3
  780.     else
  781.         n% = 0
  782.     end if
  783.     if n% > 0 then
  784.         BadArgErr n%, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  785.     end if
  786. '$endif ''DEBUG
  787.  
  788.     IF FAddSectionFilesToCopyList (szSect$, szSrc$, szDest$) = 0 THEN
  789. '$ifdef DEBUG
  790.         StfApiErr saeFail, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  791. '$endif ''DEBUG
  792.         ERROR STFERR
  793.     END IF
  794. END SUB
  795.  
  796.  
  797. '*************************************************************************
  798. SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  799. '$ifdef DEBUG
  800.     if FValidInfSect(szSect$) = 0 then
  801.         n% = 1
  802.     elseif szKey$ = "" then
  803.         n% = 2
  804.     elseif FValidFATDir(szSrc$) = 0 then
  805.         n% = 3
  806.     elseif FValidFATDir(szDest$) = 0 then
  807.         n% = 4
  808.     else
  809.         n% = 0
  810.     end if
  811.     if n% > 0 then
  812.         BadArgErr n%, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  813.     end if
  814. '$endif ''DEBUG
  815.  
  816.     IF FAddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  817. '$ifdef DEBUG
  818.         StfApiErr saeFail, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  819. '$endif ''DEBUG
  820.         ERROR STFERR
  821.     END IF
  822. END SUB
  823.  
  824.  
  825. '*************************************************************************
  826. SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  827. '$ifdef DEBUG
  828.     if FValidInfSect(szSect$) = 0 then
  829.         n% = 1
  830.     elseif szKey$ = "" then
  831.         n% = 2
  832.     elseif FValidFATDir(szSrc$) = 0 then
  833.         n% = 3
  834.     elseif FValidFATPath(szDest$) = 0 then
  835.         n% = 4
  836.     else
  837.         n% = 0
  838.     end if
  839.     if n% > 0 then
  840.         BadArgErr n%, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  841.     end if
  842. '$endif ''DEBUG
  843.  
  844.     IF FAddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  845. '$ifdef DEBUG
  846.           StfApiErr saeFail, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  847. '$endif ''DEBUG
  848.         ERROR STFERR
  849.     END IF
  850. END SUB
  851.  
  852.  
  853. '*************************************************************************
  854. SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&) STATIC
  855. '$ifdef DEBUG
  856.     if szDll$ = "" then
  857.         n% = 1
  858.     elseif idDlg% = 0 then
  859.         n% = 2
  860.     elseif szProc$ = "" then
  861.         n% = 3
  862.     elseif lTicks& <= 0 then
  863.         n% = 4
  864.     else
  865.         n% = 0
  866.     end if
  867.     if n% > 0 then
  868.         BadArgErr n%, "AddToBillboardList", szDll$+", "+STR$(idDlg%)+", "+szProc$+", "+STR$(lTicks&)
  869.     end if
  870. '$endif ''DEBUG
  871.  
  872.     IF FAddToBillboardList(szDll$, idDlg%, szProc$, lTicks&) = 0 THEN
  873. '$ifdef DEBUG
  874.         StfApiErr saeFail, "AddToBillboardList", szDll$+", "+STR$(idDlg%)+", "+szProc$+", "+STR$(lTicks&)
  875. '$endif ''DEBUG
  876.         ERROR STFERR
  877.     END IF
  878. END SUB
  879.  
  880.  
  881. '*************************************************************************
  882. SUB AddBlankToBillboardList (lTicks&) STATIC
  883. '$ifdef DEBUG
  884.     if lTicks& <= 0 then
  885.         BadArgErr 1, "AddBlankToBillboardList", STR$(lTicks&)
  886.     end if
  887. '$endif ''DEBUG
  888.     IF FAddToBillboardList(NULL, 0, NULL, lTicks&) = 0 THEN
  889. '$ifdef DEBUG
  890.         StfApiErr saeFail, "AddBlankToBillboardList", STR$(lTicks&)
  891. '$endif ''DEBUG
  892.         ERROR STFERR
  893.     END IF
  894. END SUB
  895.  
  896.  
  897. '*************************************************************************
  898. SUB ClearBillboardList STATIC
  899.     IF FClearBillboardList = 0 THEN
  900. '$ifdef DEBUG
  901.         StfApiErr saeFail, "ClearBillboardList", ""
  902. '$endif ''DEBUG
  903.         ERROR STFERR
  904.     END IF
  905. END SUB
  906.  
  907.  
  908. '*************************************************************************
  909. SUB OpenLogFile (szFile$, fAppend%) STATIC
  910. '$ifdef DEBUG
  911.     if FValidFATPath(szFile$) = 0 then
  912.         BadArgErr 1, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  913.     end if
  914. '$endif ''DEBUG
  915.     IF FOpenLogFile(szFile$, fAppend%) = 0 THEN
  916. '$ifdef DEBUG
  917.         StfApiErr saeFail, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  918. '$endif ''DEBUG
  919.         ERROR STFERR
  920.     END IF
  921. END SUB
  922.  
  923.  
  924. '*************************************************************************
  925. SUB CloseLogFile STATIC
  926.     IF FCloseLogFile() = 0 THEN
  927. '$ifdef DEBUG
  928.         StfApiErr saeFail, "CloseLogFile", ""
  929. '$endif ''DEBUG
  930.         ERROR STFERR
  931.     END IF
  932. END SUB
  933.  
  934.  
  935. '*************************************************************************
  936. SUB WriteToLogFile (szStr$) STATIC
  937.     IF FWriteToLogFile(szStr$, 1) = 0 THEN
  938. '$ifdef DEBUG
  939.         StfApiErr saeFail, "WriteToLogFile", szStr$
  940. '$endif ''DEBUG
  941.         ERROR STFERR
  942.      END IF
  943. END SUB
  944.  
  945.  
  946. ''' -1 in either parameter will mean 'center in frame client area'
  947. '*************************************************************************
  948. SUB SetCopyGaugePosition (x%, y%) STATIC
  949.     ProSetPos x%, y%
  950. END SUB
  951.  
  952.  
  953. '*************************************************************************
  954. FUNCTION FindFileUsingFileOpen (szFile$) STATIC AS STRING
  955.     szBuf$ = STRING$(512, 32)
  956.  
  957.     wRet% = WFindFileUsingFileOpen(szFile$, szBuf$, len(szBuf$))
  958.     IF wRet% = 0 THEN
  959.         FindFileUsingFileOpen = szBuf$
  960.     ELSEIF wRet% = 1 THEN
  961.         FindFileUsingFileOpen = ""
  962.     ELSE
  963. '$ifdef DEBUG
  964.         StfApiErr saeFail, "FindFileUsingFileOpen", szFile$
  965. '$endif ''DEBUG
  966.           ERROR STFERR
  967.     END IF
  968.  
  969.     szBuf$ = ""
  970. END FUNCTION
  971.  
  972.  
  973. '*************************************************************************
  974. FUNCTION IsDirWritable (szDir$) STATIC AS INTEGER
  975.     IsDirWritable = FIsDirWritable(szDir$)
  976. END FUNCTION
  977.  
  978.  
  979. '*************************************************************************
  980. FUNCTION IsFileWritable (szFile$) STATIC AS INTEGER
  981. '$ifdef DEBUG
  982.     if FValidFATDir(szFile$) = 0 then
  983.         BadArgErr 1, "IsFileWritable", szFile$
  984.     end if
  985. '$endif ''DEBUG
  986.     IsFileWritable = FIsFileWritable(szFile$)
  987. END FUNCTION
  988.  
  989.  
  990. '*************************************************************************
  991. FUNCTION GetNthFieldFromIniString (szLine$, iField%) STATIC AS STRING
  992.     IF iField% < 1 THEN
  993. '$ifdef DEBUG
  994.         StfApiErr saeFail, "GetNthFieldFromIniString", szLine$+", "+STR$(iField%)
  995. '$endif ''DEBUG
  996.         ERROR STFERR
  997.     END IF
  998.     szStart$ = szLine$
  999.     IF iField% <> 1 THEN
  1000.         FOR i% = 2 TO iField% STEP 1
  1001.             iNew% = INSTR(szStart$, ",")
  1002.             IF iNew% = 0 THEN
  1003.                 GetNthFieldFromIniString = ""
  1004.                 GOTO _GNFFIS_END
  1005.             END IF
  1006.             szStart$ = MID$(szStart$, (iNew% + 1))
  1007.         NEXT
  1008.     END IF
  1009.  
  1010.     iNew% = INSTR(szStart$, ",")
  1011.     IF iNew% <> 0 THEN
  1012.         szStart$ = MID$(szStart$, 1, (iNew% - 1))
  1013.     END IF
  1014.  
  1015.     GetNthFieldFromIniString = LTRIM$(RTRIM$(szStart$))
  1016.  
  1017. _GNFFIS_END:
  1018.  
  1019. END FUNCTION
  1020.  
  1021.  
  1022. '*************************************************************************
  1023. FUNCTION GetWindowsMajorVersion STATIC AS INTEGER
  1024.     GetWindowsMajorVersion = GetVersion() MOD 256
  1025. END FUNCTION
  1026.  
  1027.  
  1028. '*************************************************************************
  1029. FUNCTION GetWindowsMinorVersion STATIC AS INTEGER
  1030.     GetWindowsMinorVersion = GetVersion() / 256
  1031. END FUNCTION
  1032.  
  1033.  
  1034. '*************************************************************************
  1035. FUNCTION GetWindowsMode STATIC AS INTEGER
  1036.     GetWindowsMode = 0
  1037.     longTmp& = GetWinFlags()
  1038.      IF longTmp& AND WF_STANDARD THEN
  1039.         GetWindowsMode = 1
  1040.     ELSEIF longTmp& AND WF_ENHANCED THEN
  1041.         GetWindowsMode = 2
  1042.     END IF
  1043. END FUNCTION
  1044.  
  1045.  
  1046. '*************************************************************************
  1047. FUNCTION GetWindowsDir STATIC AS STRING
  1048.     szBuf$ = string$(256, 32)
  1049.     cbBuf% = GetWindowsDirectory(szBuf$, 256)
  1050.  
  1051.     IF cbBuf% = 0 THEN
  1052.         GetWindowsDir = ""
  1053. '$ifdef DEBUG
  1054.         StfApiErr saeFail, "GetWindowsDir", ""
  1055. '$endif ''DEBUG
  1056.         ERROR STFERR
  1057.     ELSE
  1058.         IF cbBuf% > 255 THEN
  1059.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1060.             ERROR STFERR
  1061.         END IF
  1062.           szBuf$ = RTRIM$(szBuf$)
  1063.         IF MID$(szBuf$, 1, 1) = "\" THEN
  1064.             'szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1065.             szBuf$ = MID$(GetWindowsSysDir, 1, 2) + szBuf$
  1066.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1067.             szBuf$ = MID$(GetWindowsSysDir, 1, 3) + szBuf$
  1068.         END IF
  1069.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  1070.             szBuf$ = szBuf$ + "\"
  1071.         END IF
  1072.         GetWindowsDir = szBuf$
  1073.     END IF
  1074.  
  1075.     szBuf$ = ""
  1076. END FUNCTION
  1077.  
  1078.  
  1079. '*************************************************************************
  1080. FUNCTION GetWindowsSysDir STATIC AS STRING
  1081.     szBuf$ = string$(256, 32)
  1082.     cbBuf% = GetSystemDirectory(szBuf$, 256)
  1083.  
  1084.     IF cbBuf% = 0 THEN
  1085. '$ifdef DEBUG
  1086.           StfApiErr saeFail, "GetWindowsSysDir", ""
  1087. '$endif ''DEBUG
  1088.         ERROR STFERR
  1089.     ELSE
  1090.         IF cbBuf% > 255 THEN
  1091.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1092.             ERROR STFERR
  1093.         END IF
  1094.         szBuf$ = RTRIM$(szBuf$)
  1095.         IF MID$(szBuf$, 1, 1) = "\" THEN
  1096.             szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1097.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1098.             szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  1099.         END IF
  1100.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  1101.             szBuf$ = szBuf$ + "\"
  1102.         END IF
  1103.         GetWindowsSysDir = szBuf$
  1104.     END IF
  1105.  
  1106.     szBuf$ = ""
  1107. END FUNCTION
  1108.  
  1109.  
  1110. '*************************************************************************
  1111. FUNCTION IsWindowsShared STATIC AS INTEGER
  1112.     szWin$ = UCASE$(GetWindowsDir())
  1113.     szSys$ = UCASE$(GetWindowsSysDir())
  1114.  
  1115.     IF len(szWin$) = 0 THEN
  1116. '$ifdef DEBUG
  1117.         StfApiErr saeFail, "IsWindowsShared", ""
  1118. '$endif ''DEBUG
  1119.         ERROR STFERR
  1120.     END IF
  1121.  
  1122.     IF len(szSys$) <= len(szWin$) THEN
  1123.         IsWindowsShared = 1
  1124.     ELSE
  1125.         szSys$ = MID$(szSys$, 1, len(szWin$))
  1126.         IF szWin$ = szSys$ THEN
  1127.             IsWindowsShared = 0
  1128.         ELSE
  1129.             IsWindowsShared = 1
  1130.         END IF
  1131.     END IF
  1132. END FUNCTION
  1133.  
  1134.  
  1135. '*************************************************************************
  1136. FUNCTION GetScreenWidth STATIC AS INTEGER
  1137.     GetScreenWidth = GetSystemMetrics(SM_CXSCREEN)
  1138. END FUNCTION
  1139.  
  1140.  
  1141. '*************************************************************************
  1142. FUNCTION GetScreenHeight STATIC AS INTEGER
  1143.     GetScreenHeight = GetSystemMetrics(SM_CYSCREEN)
  1144. END FUNCTION
  1145.  
  1146.  
  1147. '*************************************************************************
  1148. SUB SetRestartDir (szDir$) STATIC
  1149. '$ifdef DEBUG
  1150.     if FValidFATDir(szDir$) = 0 then
  1151.         BadArgErr 1, "SetRestartDir", szDir$
  1152.     end if
  1153. '$endif ''DEBUG
  1154.     IF FSetRestartDir(szDir$) = 0 THEN
  1155. '$ifdef DEBUG
  1156.         StfApiErr saeFail, "SetRestartDir", szDir$
  1157. '$endif ''DEBUG
  1158.           ERROR STFERR
  1159.     END IF
  1160. END SUB
  1161.  
  1162.  
  1163. '*************************************************************************
  1164. FUNCTION RestartListEmpty STATIC AS INTEGER
  1165.     IF FRestartListEmpty() = 0 THEN
  1166.         RestartListEmpty = 0
  1167.     ELSE
  1168.         RestartListEmpty = 1
  1169.     END IF
  1170. END FUNCTION
  1171.  
  1172.  
  1173. '*************************************************************************
  1174. FUNCTION ExitExecRestart STATIC AS INTEGER
  1175.     ExitExecRestart = FExitExecRestart
  1176. END FUNCTION
  1177.  
  1178.  
  1179. '*************************************************************************
  1180. SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%) STATIC
  1181.  
  1182. '$ifdef DEBUG
  1183.     if (FValidFATPath(szSrc$) = 0) AND (szSrc$ <> "") then
  1184.         n% = 1
  1185.     elseif FValidFATPath(szDst$) = 0 then
  1186.         n% = 2
  1187.     elseif FValidFATDir(szDir$) = 0 then
  1188.         n% = 3
  1189.     else
  1190.         n% = 0
  1191.     end if
  1192.     if n% > 0 then
  1193.         BadArgErr n%, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1194.     end if
  1195. '$endif ''DEBUG
  1196.  
  1197.     IF FPrependToPath (szSrc$, szDst$, szDir$, cmo%) = 0 THEN
  1198. '$ifdef DEBUG
  1199.         StfApiErr saeFail, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1200. '$endif ''DEBUG
  1201.         ERROR STFERR
  1202.     END IF
  1203. END SUB
  1204.  
  1205.  
  1206.  
  1207. '**************************************************************************
  1208. '***************************  Error Handlers  *****************************
  1209. '**************************************************************************
  1210.  
  1211.  
  1212. '$ifdef DEBUG
  1213. '**************************************************************************
  1214. SUB StfApiErr (nMsg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1215.     select case nMsg%
  1216.         case saeFail
  1217.             lpText$ = "Failed"
  1218.         case saeInit
  1219.             lpText$ = "Already Initialized"
  1220.         case saeNYI
  1221.             lpText$ = "NYI"
  1222.         case else
  1223.             lpText$ = "Bad Arg "+LTRIM$(STR$(nMsg% - saeArg))
  1224.     end select
  1225.  
  1226.     lpText$ = lpText$ + ": "+ szApi$
  1227.     if szArgs$ <> "" then
  1228.         lpText$ = lpText + " (" + szArgs$ + ")"
  1229.     end if
  1230.      lpCaption$ = "MS-Setup Toolkit API Error"
  1231.     res% = DoMsgBox(lpText$, lpCaption$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  1232.     print lpText$
  1233.     lpText$ = ""
  1234.     lpCaption$ = ""
  1235. END SUB
  1236.  
  1237. '**************************************************************************
  1238. SUB BadArgErr (nArg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1239.     StfApiErr nArg%+saeArg, szApi$, szArgs$
  1240.     ERROR STFERR
  1241. END SUB
  1242.  
  1243.  
  1244. '** REVIEW: Move this function into common lib (we'll need it there too)
  1245. '**************************************************************************
  1246. FUNCTION FValidInfSect (szSect$) STATIC AS INTEGER
  1247.     if (szSect$ = "") OR (INSTR(1,szSect$,"]") <> 0) then
  1248.         FValidInfSect = 0
  1249.     else
  1250.         FValidInfSect = 1
  1251.     end if
  1252. END FUNCTION
  1253.  
  1254.  
  1255. '** REVIEW: Move this function into common lib (we'll need it there too)
  1256. '**************************************************************************
  1257. FUNCTION FValidIniFile (szFile$) STATIC AS INTEGER
  1258.     if (FValidFATPath(szFile$) = 0) AND (UCASE$(szFile$) <> "WIN.INI") then
  1259.         FValidIniFile = 0
  1260.     else
  1261.         FValidIniFile = 1
  1262.     end if
  1263. END FUNCTION
  1264.  
  1265. '**************************************************************************
  1266. FUNCTION FValidDrive (szDrive$) STATIC AS INTEGER
  1267.  
  1268.     if szDrive$ = "" then
  1269.         FValidDrive = 0
  1270.     elseif INSTR(1,szDrive$,"\\") = 1 then   ' UNC path
  1271.         FValidDrive = 1
  1272.     elseif ASC(UCASE$(szDrive$)) - ASC("A") < 0 then
  1273.         FValidDrive = 0
  1274.     elseif ASC(UCASE$(szDrive$)) - ASC("A") > 25 then
  1275.         FValidDrive = 0
  1276.     elseif LEN(szDrive$) = 1 then
  1277.         FValidDrive = 1
  1278.     elseif INSTR(2,szDrive$,":\") = 2 then
  1279.         FValidDrive = 1
  1280.     elseif INSTR(1,szDrive$,":") = 2 then
  1281.         FValidDrive = 1
  1282.     else
  1283.         FValidDrive = 0
  1284.     end if
  1285. END FUNCTION
  1286.  
  1287. '$endif ''DEBUG
  1288.  
  1289.  
  1290. TRAP CleanupTrap From "MSSHLSTF.DLL"
  1291.  
  1292. End Trap
  1293.  
  1294. hSetup = InitSetup(COMMAND$)
  1295.  
  1296. ON ERROR GOTO QUIT
  1297.  
  1298.