home *** CD-ROM | disk | FTP | other *** search
/ Computer Buyer 1995 September / C_BUYER.ISO / free / setupapi.in_ / setupapi.in
Text File  |  1994-03-04  |  16KB  |  493 lines

  1. DECLARE FUNCTION FInitializeInstall LIB "msinsstf.dll" (hinst%, hwndFrame%) AS INTEGER
  2. DECLARE FUNCTION InitializeFrame LIB "msshlstf.dll" (szCmdLine$) AS INTEGER
  3. DECLARE FUNCTION HwndFrame LIB "msshlstf.dll" AS INTEGER
  4. DECLARE FUNCTION HinstFrame LIB "msshlstf.dll" AS INTEGER
  5. DECLARE FUNCTION InitSetup (szCmdLine$) AS INTEGER
  6. DECLARE FUNCTION InitFrame(szCMDLine$) AS INTEGER
  7. DECLARE SUB InitInstall
  8.  
  9. GLOBAL hSetup AS INTEGER
  10. GLOBAL fFrameInit AS INTEGER
  11. GLOBAL fInstallInit AS INTEGER
  12.  
  13. SUB InitInstall STATIC
  14.     IF hSetup > 0 THEN
  15.     ELSEIF FInitializeInstall(HinstFrame(), HwndFrame()) = 0 THEN
  16.         END
  17.     END IF
  18. END SUB
  19.  
  20. FUNCTION InitFrame(szCmdLine$) STATIC AS INTEGER
  21.     IF hSetup > 0 THEN
  22.     ELSE
  23.         i% = InitializeFrame(szCmdLine$)
  24.         IF i% = -1 THEN
  25.             END   '' NOT an error - Usage (/?) or Command line copy operation
  26.         ELSEIF i% = 0 THEN
  27.             END
  28.         ELSE
  29.             InitFrame = i%
  30.         END IF
  31.     END IF
  32. END FUNCTION
  33.  
  34. FUNCTION InitSetup(szCmdLine$) STATIC AS INTEGER
  35.     fFrameInit = 0
  36.     fInstallInit = 0
  37.  
  38.     IF hSetup > 0 THEN
  39.     END IF
  40.  
  41.     i% = InitFrame(szCmdLine$)
  42.     fFrameInit = 1
  43.  
  44.     InitInstall
  45.     fInstallInit = 1
  46.  
  47.     InitSetup = i%
  48. END FUNCTION
  49.  
  50. hSetup = InitSetup(COMMAND$)
  51.  
  52. CONST SM_CXSCREEN = 0
  53. CONST SM_CYSCREEN = 1
  54. CONST WF_80x87    = 1024
  55. CONST WF_CPU186   =  128
  56. CONST WF_CPU286   =    2
  57. CONST WF_CPU386   =    4
  58. CONST WF_CPU486   =    8
  59. CONST WF_STANDARD =   16
  60. CONST WF_ENHANCED =   32
  61.  
  62.  
  63. '' DoMsgBox Flags
  64.  
  65. CONST MB_OK          = 0
  66. CONST MB_ICONHAND    = 16
  67. CONST MB_TASKMODAL   = 8192
  68.  
  69.  
  70. DECLARE FUNCTION DoMsgBox LIB "mscomstf.dll" (lpText$,lpCaption$,wType%) As INTEGER
  71. DECLARE FUNCTION GetWindowsDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  72. DECLARE FUNCTION GetSystemDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  73. DECLARE FUNCTION GetProfileString LIB "kernel" (szSect$, szKey$, szDefault$, szBuf$, cbBuf%) AS INTEGER
  74. DECLARE FUNCTION GetVersion LIB "kernel" AS INTEGER
  75. DECLARE FUNCTION GetSystemMetrics LIB "user" (nIndex%) AS INTEGER
  76. DECLARE FUNCTION GetWinFlags LIB "kernel" AS LONG
  77. DECLARE FUNCTION DoesDirExist (szDir$) AS INTEGER
  78. DECLARE FUNCTION FDirExists LIB "msdetstf.dll" (szDir$) AS INTEGER
  79. DECLARE FUNCTION GetFreeSpaceForDrive (szDrive$) AS LONG
  80. DECLARE FUNCTION LcbFreeDrive LIB "msdetstf.dll" (nDrive%) AS LONG
  81.  
  82. ''Command Option Flags
  83.  
  84. CONST cmoVital       = 1
  85. CONST cmoCopy        = 2
  86. CONST cmoUndo        = 4
  87. CONST cmoRoot        = 8
  88. CONST cmoDecompress  = 16
  89. CONST cmoTimeStamp   = 32
  90. CONST cmoReadOnly    = 64
  91. CONST cmoBackup      = 128
  92. CONST cmoForce       = 256
  93. CONST cmoRemove      = 512
  94. CONST cmoOverwrite   = 1024
  95. CONST cmoAppend      = 2048
  96. CONST cmoPrepend     = 4096
  97. CONST cmoNone        = 0
  98. CONST cmoAll         = 65535
  99.  
  100.  
  101. ''File Exist Modes
  102.  
  103. CONST femExists     = 0
  104. CONST femRead       = 1
  105. CONST femWrite      = 2
  106. CONST femReadWrite  = 3
  107.  
  108.  
  109. ''Read-Only Return Code
  110.  
  111. CONST ynrcNo         = 0
  112. CONST ynrcYes        = 1
  113. CONST ynrcErr1       = 2
  114. CONST ynrcErr2       = 3
  115. CONST ynrcErr3       = 4
  116. CONST ynrcErr4       = 5
  117. CONST ynrcErr5       = 6
  118. CONST ynrcErr6       = 7
  119. CONST ynrcErr7       = 8
  120. CONST ynrcErr8       = 9
  121. CONST ynrcErr9       = 10
  122.  
  123.  
  124. ''General Return Codes
  125.  
  126. CONST grcOkay       = 0
  127. CONST grcNotOkay    = 1
  128. CONST grcUserQuit   = 48
  129.  
  130.  
  131. CONST cbSymValMax = 1024
  132.  
  133. CONST STFERR      = 1024   ''setup system error
  134. CONST STFQUIT     = 1025   ''user quit
  135.  
  136. CONST scmOff      = 0
  137. CONST scmOnIgnore = 1
  138. CONST scmOnFatal  = 2
  139.  
  140.  
  141. DECLARE FUNCTION FOpenInf LIB "mscomstf.dll" (szFile$, fCheck%, fCheckSyms%) AS INTEGER
  142. DECLARE FUNCTION FOpenLogFile    LIB "mscomstf.dll" (szFile$, fAppend%) AS INTEGER
  143. DECLARE FUNCTION FCloseLogFile   LIB "mscomstf.dll" AS INTEGER
  144. DECLARE FUNCTION FWriteToLogFile LIB "mscomstf.dll" (sz$, fRequire%) AS INTEGER
  145. DECLARE FUNCTION CbGetInfSectionKeyField LIB "mscomstf.dll" (szSect$, szKey$, iField%, szBuf$, cbBuf%) AS INTEGER
  146. DECLARE FUNCTION FMakeListInfSectionField LIB "mscomstf.dll" (szSym$, szSect$, iField%) AS INTEGER
  147.  
  148.  
  149. ''shell
  150.  
  151. DECLARE FUNCTION FSetBitmap LIB "msshlstf.dll" (szDll$, Bitmap%) AS INTEGER
  152. DECLARE FUNCTION FDoDialog LIB "msuilstf.dll" (hwnd%, szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS INTEGER
  153. DECLARE FUNCTION FKillNDialogs LIB "msuilstf.dll" (n%) AS INTEGER
  154. DECLARE SUB SetWindowText LIB "User" (hwnd%, lpString$)
  155. DECLARE FUNCTION FSetSymbolValue LIB "msshlstf.dll" (szSymbol$, szValue$) AS INTEGER
  156. DECLARE FUNCTION FRemoveSymbol LIB "mscomstf.dll" (szSym$) AS INTEGER
  157. DECLARE FUNCTION CbGetSymbolValue LIB "mscomstf.dll" (szSymbol$, szValue$, Length%) AS INTEGER
  158. DECLARE FUNCTION UsGetListLength LIB "mscomstf.dll" (szSymbol$) AS INTEGER
  159. DECLARE FUNCTION CbGetListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$, cbMax%) AS INTEGER
  160. DECLARE FUNCTION FAddListItem LIB "mscomstf.dll" (szListSymbol$, szListItem$) AS INTEGER
  161. DECLARE FUNCTION FReplaceListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$) AS INTEGER
  162. DECLARE FUNCTION FSetSymbolToListOfInfKeys LIB "mscomstf.dll" (szSym$, szSect$, fNulls%) AS INTEGER
  163.  
  164.  
  165. ''shell
  166.  
  167.  
  168. ''install
  169.  
  170. DECLARE SUB      ProSetPos LIB "msinsstf.dll" (x%, y%)
  171. DECLARE FUNCTION FCreateDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  172. DECLARE FUNCTION FRemoveDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  173. DECLARE FUNCTION FAddSectionFilesToCopyList LIB "mscomstf.dll" (szSect$, szSrc$, szDest$) AS INTEGER
  174. DECLARE FUNCTION FAddSectionKeyFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  175. DECLARE FUNCTION FAddSpecialFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  176. DECLARE FUNCTION GrcCopyFilesInCopyList LIB "msinsstf.dll" (hInstance%) AS INTEGER
  177. DECLARE FUNCTION FRemoveIniSection LIB "msinsstf.dll" (szFile$, szSect$, cmo%) AS INTEGER
  178. DECLARE FUNCTION FCreateIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  179. DECLARE FUNCTION FRemoveIniKey LIB "msinsstf.dll" (szFile$, szSect$, szKey$, cmo%) AS INTEGER
  180. DECLARE FUNCTION FCreateSysIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  181. DECLARE FUNCTION FCreateProgManGroup LIB "msinsstf.dll" (szGroup$, szPath$, cmo%) AS INTEGER
  182. DECLARE FUNCTION FCreateProgManItem LIB "msinsstf.dll" (szGroup$, szItem$, szCmd$, cmo%) AS INTEGER
  183. DECLARE FUNCTION FShowProgManGroup LIB "msinsstf.dll" (szGroup$, szCmd$, cmo%) AS INTEGER
  184. DECLARE FUNCTION FStampResource LIB "msinsstf.dll" (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) AS INTEGER
  185. DECLARE FUNCTION FDumpCopyListToFile LIB "msinsstf.dll" (szFile$) AS INTEGER
  186. DECLARE SUB      ResetCopyList LIB "msinsstf.dll"
  187. DECLARE FUNCTION LcbGetCopyListCost LIB "msinsstf.dll" (szExtraList$, szCostList$, szNeedList$) AS LONG
  188. DECLARE FUNCTION FAddDos5Help LIB "msinsstf.dll" (szProgName$, szProgHelp$, cmo%) AS INTEGER
  189. DECLARE FUNCTION FCopyOneFile LIB "msinsstf.dll" (szSrc$, szDest$, cmo%, fAppend%) AS INTEGER
  190. DECLARE FUNCTION YnrcRemoveFile LIB "msinsstf.dll" (szFullPathSrc$, cmo%) AS INTEGER
  191. DECLARE FUNCTION YnrcBackupFile LIB "msinsstf.dll" (szFullPath$, szBackup$, cmo%) AS INTEGER
  192. DECLARE FUNCTION WFindFileUsingFileOpen LIB "msinsstf.dll" (szFile$, szBuf$, cbBuf%) AS INTEGER
  193. DECLARE FUNCTION FIsDirWritable LIB "msinsstf.dll" (szDir$) AS INTEGER
  194. DECLARE FUNCTION FAddToBillboardList LIB "msinsstf.dll" (szDll$, idDlg%, szProc$, lTicks&) AS INTEGER
  195. DECLARE FUNCTION FClearBillboardList LIB "msinsstf.dll" AS INTEGER
  196. DECLARE FUNCTION FSetRestartDir LIB "msinsstf.dll" (szDir$) AS INTEGER
  197. DECLARE FUNCTION FRestartListEmpty LIB "msinsstf.dll" AS INTEGER
  198. DECLARE FUNCTION FExitExecRestart LIB "msinsstf.dll" AS INTEGER
  199. DECLARE FUNCTION SetCopyMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  200. DECLARE FUNCTION GetCopyMode LIB "msinsstf.dll" AS INTEGER
  201. DECLARE FUNCTION SetDecompMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  202. DECLARE FUNCTION GetDecompMode LIB "msinsstf.dll" AS INTEGER
  203. DECLARE FUNCTION SetSizeCheckMode LIB "msinsstf.dll" (scmMode%) AS INTEGER
  204. DECLARE FUNCTION FPrependToPath LIB "msinsstf.dll" (szSrc$, szDst$, szDir$, cmo%) AS INTEGER
  205.  
  206.  
  207.  
  208. DECLARE SUB SetBitmap(szDll$, Bitmap%)
  209. DECLARE FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS STRING
  210. DECLARE SUB UIPop (n%)
  211. DECLARE SUB UIPopAll
  212. DECLARE SUB SetTitle (sz$)
  213. DECLARE SUB ReadInfFile (szFile$)
  214. DECLARE SUB SetSymbolValue (szSymbol$, szValue$)
  215. DECLARE FUNCTION GetSymbolValue (szSymbol$) AS STRING
  216.  
  217.  
  218. ''DECLARE SUB ShowWin 
  219. DECLARE SUB CreateDir (szDir$, cmo%)
  220. DECLARE SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$)
  221. DECLARE SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  222. DECLARE SUB CopyFilesInCopyList
  223. DECLARE SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  224. DECLARE SUB CreateProgmanGroup (szGroup$, szPath$, cmo%)
  225. DECLARE SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%)
  226. DECLARE SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%)
  227. DECLARE SUB AddDos5Help (szProgName$, szProgHelp$, cmo%)
  228. DECLARE SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&)
  229. DECLARE SUB AddBlankToBillboardList (lTicks&)
  230. DECLARE SUB ClearBillboardList
  231. DECLARE SUB OpenLogFile (szFile$, fAppend%)
  232. DECLARE SUB CloseLogFile
  233. DECLARE SUB WriteToLogFile (szStr$)
  234. DECLARE SUB SetCopyGaugePosition (x%, y%)
  235. DECLARE FUNCTION IsDirWritable (szDir$) AS INTEGER
  236.  
  237. DECLARE FUNCTION GetWindowsDir  AS STRING
  238. DECLARE FUNCTION GetWindowsSysDir AS STRING
  239.  
  240.  
  241.  
  242. SUB SetBitmap(szDll$, Bitmap%) STATIC
  243.     IF FSetBitmap(szDll$, Bitmap%) = 0 THEN
  244.         ERROR STFERR
  245.     END IF
  246. END SUB
  247.  
  248. SUB SetTitle(sz$) STATIC
  249.     SetWindowText HwndFrame(), sz$
  250. END SUB
  251.  
  252. SUB ReadInfFile (szFile$) STATIC
  253.    IF FOpenInf(szFile$, 1, 0) = 0 THEN
  254.         ERROR STFERR
  255.     END IF
  256. END SUB
  257.  
  258. FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) STATIC AS STRING
  259.  
  260.     IF FDoDialog(HwndFrame(), szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) = 0 THEN
  261.         ERROR STFERR
  262.     ELSE
  263.         UIStartDlg = GetSymbolValue("DLGEVENT")
  264.     END IF
  265. END FUNCTION
  266.  
  267. SUB UIPop (n%) STATIC
  268.     IF FKillNDialogs(n%) = 0 THEN
  269.         ERROR STFERR
  270.     END IF
  271. END SUB
  272.  
  273. SUB UIPopAll STATIC
  274.     IF FKillNDialogs(65535) = 0 THEN
  275.         ERROR STFERR
  276.     END IF
  277. END SUB
  278.  
  279. FUNCTION GetSymbolValue(szSymbol$) STATIC AS STRING
  280.     szValue$ = string$(cbSymValMax,32)
  281.     Length% = CbGetSymbolValue(szSymbol$, szValue$, cbSymValMax)
  282.     GetSymbolValue = szValue$
  283.     IF Length% >= cbSymValMax THEN
  284.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  285.         ERROR STFERR
  286.     END IF
  287.     IF szSymbol$ = "" THEN
  288.         ERROR STFERR
  289.     END IF
  290.     szValue$ = ""
  291. END FUNCTION
  292.  
  293. SUB SetSymbolValue(szSymbol$, szValue$) STATIC
  294.     IF FSetSymbolValue(szSymbol$, szValue$) = 0 THEN
  295.         ERROR STFERR
  296.     END IF
  297. END SUB
  298.  
  299.  
  300.  
  301. SUB CreateDir (szDir$, cmo%) STATIC
  302.     IF FCreateDir(szDir$, cmo%) = 0 THEN
  303.         ERROR STFERR
  304.     END IF
  305. END SUB
  306.  
  307. SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  308.  
  309.     IF FCreateIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  310.         ERROR STFERR
  311.     END IF
  312. END SUB
  313.  
  314. SUB CreateProgmanGroup (szGroup$, szPath$, cmo%) STATIC
  315.     IF FCreateProgManGroup(szGroup$, szPath$, cmo%) = 0 THEN
  316.         ERROR STFERR
  317.     END IF
  318. END SUB
  319.  
  320. SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%) STATIC
  321.     IF FShowProgManGroup(szGroup$, STR$(Cmd%), cmo%) = 0 THEN
  322.         ERROR STFERR
  323.     END IF
  324. END SUB
  325.  
  326. SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%) STATIC
  327.     szItemNew$ = szItem$
  328.     IF szOther$ <> "" THEN
  329.         szItemNew$ = szItem$ + "," + szOther$
  330.     END IF
  331.  
  332.     IF FCreateProgManItem(szGroup$, szItemNew$, szCmd$, cmo%) = 0 THEN
  333.         ERROR STFERR
  334.     END IF
  335.     szItemNew$ = ""
  336. END SUB
  337.  
  338. SUB AddDos5Help (szProgName$, szProgHelp$, cmo%) STATIC
  339.     IF FAddDos5Help (szProgName$, szProgHelp$, cmo%) = 0 THEN
  340.         ERROR STFERR
  341.     END IF
  342. END SUB
  343.  
  344. SUB CopyFilesInCopyList STATIC
  345.     grc% = GrcCopyFilesInCopyList (HinstFrame())
  346.  
  347.     IF grc% = grcUserQuit THEN
  348.         ERROR STFQUIT
  349.     ELSEIF grc% > 0 THEN
  350.         ERROR STFERR
  351.     END IF
  352. END SUB
  353.  
  354. ''SUB ShowWin STATIC
  355. ''   grc%=FShowWin()
  356. ''END SUB
  357.  
  358. SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$) STATIC
  359.  
  360.     IF FAddSectionFilesToCopyList (szSect$, szSrc$, szDest$) = 0 THEN
  361.         ERROR STFERR
  362.     END IF
  363. END SUB
  364.  
  365. SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  366.  
  367.     IF FAddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  368.         ERROR STFERR
  369.     END IF
  370. END SUB
  371.  
  372. SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&) STATIC
  373.  
  374.     IF FAddToBillboardList(szDll$, idDlg%, szProc$, lTicks&) = 0 THEN
  375.         ERROR STFERR
  376.     END IF
  377. END SUB
  378.  
  379. SUB AddBlankToBillboardList (lTicks&) STATIC
  380.     IF FAddToBillboardList(NULL, 0, NULL, lTicks&) = 0 THEN
  381.         ERROR STFERR
  382.     END IF
  383. END SUB
  384.  
  385. SUB ClearBillboardList STATIC
  386.     IF FClearBillboardList = 0 THEN
  387.         ERROR STFERR
  388.     END IF
  389. END SUB
  390.  
  391.  
  392. SUB OpenLogFile (szFile$, fAppend%) STATIC
  393.     IF FOpenLogFile(szFile$, fAppend%) = 0 THEN
  394.         ERROR STFERR
  395.     END IF
  396. END SUB
  397.  
  398. SUB CloseLogFile STATIC
  399.     IF FCloseLogFile() = 0 THEN
  400.         ERROR STFERR
  401.     END IF
  402. END SUB
  403.  
  404.  
  405. SUB WriteToLogFile (szStr$) STATIC
  406.     IF FWriteToLogFile(szStr$, 1) = 0 THEN
  407.         ERROR STFERR
  408.     END IF
  409. END SUB
  410.  
  411.  
  412. SUB SetCopyGaugePosition (x%, y%) STATIC
  413.     ProSetPos x%, y%
  414. END SUB
  415.  
  416. FUNCTION IsDirWritable (szDir$) STATIC AS INTEGER
  417.     IsDirWritable = FIsDirWritable(szDir$)
  418. END FUNCTION
  419.  
  420.  
  421. FUNCTION GetWindowsDir STATIC AS STRING
  422.     szBuf$ = string$(256, 32)
  423.     cbBuf% = GetWindowsDirectory(szBuf$, 256)
  424.  
  425.     IF cbBuf% = 0 THEN
  426.         GetWindowsDir = ""
  427.         ERROR STFERR
  428.     ELSE
  429.         IF cbBuf% > 255 THEN
  430.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  431.             ERROR STFERR
  432.         END IF
  433.         szBuf$ = RTRIM$(szBuf$)
  434.         IF MID$(szBuf$, 1, 1) = "\" THEN
  435.             'szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  436.             szBuf$ = MID$(GetWindowsSysDir, 1, 2) + szBuf$
  437.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  438.             szBuf$ = MID$(GetWindowsSysDir, 1, 3) + szBuf$
  439.         END IF
  440.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  441.             szBuf$ = szBuf$ + "\"
  442.         END IF
  443.         GetWindowsDir = szBuf$
  444.     END IF
  445.  
  446.     szBuf$ = ""
  447. END FUNCTION
  448.  
  449.  
  450. FUNCTION GetWindowsSysDir STATIC AS STRING
  451.     szBuf$ = string$(256, 32)
  452.     cbBuf% = GetSystemDirectory(szBuf$, 256)
  453.  
  454.     IF cbBuf% = 0 THEN
  455.         ERROR STFERR
  456.     ELSE
  457.         IF cbBuf% > 255 THEN
  458.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  459.             ERROR STFERR
  460.         END IF
  461.         szBuf$ = RTRIM$(szBuf$)
  462.         IF MID$(szBuf$, 1, 1) = "\" THEN
  463.             szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  464.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  465.             szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  466.         END IF
  467.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  468.             szBuf$ = szBuf$ + "\"
  469.         END IF
  470.         GetWindowsSysDir = szBuf$
  471.     END IF
  472.  
  473.     szBuf$ = ""
  474. END FUNCTION
  475.  
  476. FUNCTION DoesDirExist (szDir$) STATIC  AS INTEGER
  477.     DoesDirExist = FDirExists(szDir$)
  478. END FUNCTION
  479.  
  480. FUNCTION GetFreeSpaceForDrive (szDrive$) STATIC  AS LONG
  481.     GetFreeSpaceForDrive = LcbFreeDrive(ASC(UCASE$(szDrive$)) - ASC("A") + 1)
  482. END FUNCTION
  483.  
  484.  
  485.  
  486. TRAP CleanupTrap From "MSSHLSTF.DLL"
  487.  
  488. End Trap
  489.  
  490.  
  491. ON ERROR GOTO QUIT
  492.  
  493.