home *** CD-ROM | disk | FTP | other *** search
/ Corel Draw 3 / CorelDRAW-v3.0.iso / setupapi.inc < prev    next >
Text File  |  1992-10-25  |  38KB  |  1,201 lines

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