home *** CD-ROM | disk | FTP | other *** search
/ Program Metropolis - Software Boutique 95 / SOFTWARECD.iso / procomm2 / disk1 / setupapi.in_ / setupapi.bin
Encoding:
Text File  |  1994-06-09  |  34.4 KB  |  1,115 lines

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