home *** CD-ROM | disk | FTP | other *** search
/ Computer Life 1995 December / Computer Life December 1995.iso / claris / applicat / cw10bv1 / disk1 / setupapi.inc < prev    next >
Encoding:
Text File  |  1993-03-18  |  26.6 KB  |  854 lines

  1. '**************************************************************************
  2. '*******************************  Windows API's  **************************
  3. '**************************************************************************
  4. GLOBAL hSetup AS INTEGER
  5. GLOBAL fFrameInit AS INTEGER
  6. GLOBAL fInstallInit AS INTEGER
  7.  
  8. CONST SM_CXSCREEN = 0
  9. CONST SM_CYSCREEN = 1
  10.  
  11. CONST WF_80x87    = 1024
  12. CONST WF_CPU186   =  128
  13. CONST WF_CPU286   =    2
  14. CONST WF_CPU386   =    4
  15. CONST WF_CPU486   =    8
  16. CONST WF_STANDARD =   16
  17. CONST WF_ENHANCED =   32
  18.  
  19.  
  20. '' DoMsgBox Flags
  21.  
  22. CONST MB_OK          = 0
  23. CONST MB_ICONHAND    = 16
  24. CONST MB_TASKMODAL   = 8192
  25.  
  26.  
  27. DECLARE FUNCTION DoMsgBox LIB "mscomstf.dll" (lpText$,lpCaption$,wType%) As INTEGER
  28. DECLARE FUNCTION GetWindowsDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  29. DECLARE FUNCTION GetSystemDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  30. DECLARE FUNCTION GetProfileString LIB "kernel" (szSect$, szKey$, szDefault$, szBuf$, cbBuf%) AS INTEGER
  31. DECLARE FUNCTION GetVersion LIB "kernel" AS INTEGER
  32. DECLARE FUNCTION GetSystemMetrics LIB "user" (nIndex%) AS INTEGER
  33. DECLARE FUNCTION GetWinFlags LIB "kernel" AS LONG
  34. DECLARE FUNCTION YnrcRemoveFile LIB "msinsstf.dll" (szFullPathSrc$, cmo%) AS INTEGER
  35.  
  36.  
  37.  
  38.  
  39. '**************************************************************************
  40. '****************************** Setup Constants ***************************
  41. '**************************************************************************
  42.  
  43.  
  44. ''Command Option Flags
  45.  
  46. CONST cmoVital       = 1
  47. CONST cmoCopy        = 2
  48. CONST cmoUndo        = 4
  49. CONST cmoRoot        = 8
  50. CONST cmoDecompress  = 16
  51. CONST cmoTimeStamp   = 32
  52. CONST cmoReadOnly    = 64
  53. CONST cmoBackup      = 128
  54. CONST cmoForce       = 256
  55. CONST cmoRemove      = 512
  56. CONST cmoOverwrite   = 1024
  57. CONST cmoAppend      = 2048
  58. CONST cmoPrepend     = 4096
  59. CONST cmoNone        = 0
  60. CONST cmoAll         = 65535
  61.  
  62.  
  63. ''File Exist Modes
  64.  
  65. CONST femExists     = 0
  66. CONST femRead       = 1
  67. CONST femWrite      = 2
  68. CONST femReadWrite  = 3
  69.  
  70.  
  71. ''Read-Only Return Code
  72.  
  73. CONST ynrcNo         = 0
  74. CONST ynrcYes        = 1
  75. CONST ynrcErr1       = 2
  76. CONST ynrcErr2       = 3
  77. CONST ynrcErr3       = 4
  78. CONST ynrcErr4       = 5
  79. CONST ynrcErr5       = 6
  80. CONST ynrcErr6       = 7
  81. CONST ynrcErr7       = 8
  82. CONST ynrcErr8       = 9
  83. CONST ynrcErr9       = 10
  84.  
  85.  
  86. ''General Return Codes
  87.  
  88. CONST grcOkay       = 0
  89. CONST grcNotOkay    = 1
  90. CONST grcUserQuit   = 48
  91.  
  92.  
  93. ''Ranges
  94.  
  95. ''CONST cbSymValMax = 8192
  96. CONST cbSymValMax = 512
  97.     ''REVIEW: symbol table will allow strings up to 8192 bytes
  98.     '' but we get Out of String Space wattdrvr error if we alloc
  99.     '' STRING$() that big. (See GetSymbolValue and GetListItem)
  100.     '' We should look into using dynamic far alloc instead of
  101.     '' STRING$ for large buffers.
  102.     '' NOTE: 8192 works okay with runtime wattdrvr, however.
  103.  
  104.  
  105. ''ON ERROR Error Codes
  106. CONST STFERR      = 1024   ''setup system error
  107. CONST STFQUIT     = 1025   ''user quit
  108.  
  109. CONST scmOff      = 0
  110. CONST scmOnIgnore = 1
  111. CONST scmOnFatal  = 2
  112.  
  113.  
  114. '**************************************************************************
  115. '********************************  Setup API's  ***************************
  116. '**************************************************************************
  117.  
  118. '' common
  119.  
  120. DECLARE FUNCTION FParseFATPathIntoPieces LIB "mscomstf.dll" (szPath$, szVol$, cbVol%, szDir$, cbDir%, szFile$, cbFile%) AS INTEGER
  121. DECLARE FUNCTION FOpenInf LIB "mscomstf.dll" (szFile$, fCheck%, fCheckSyms%) AS INTEGER
  122. DECLARE FUNCTION FSetSilent LIB "mscomstf.dll" (mode%) AS INTEGER
  123. DECLARE FUNCTION FSetBeepingMode 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 FOpenLogFile    LIB "mscomstf.dll" (szFile$, fAppend%) AS INTEGER
  127. DECLARE FUNCTION FCloseLogFile   LIB "mscomstf.dll" AS INTEGER
  128. DECLARE FUNCTION FWriteToLogFile LIB "mscomstf.dll" (sz$, fRequire%) AS INTEGER
  129.  
  130.  
  131. ''shell
  132.  
  133. DECLARE FUNCTION FSetBitmap LIB "msshlstf.dll" (szDll$, Bitmap%) 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 FCreateDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  159. DECLARE FUNCTION FAddSectionFilesToCopyList LIB "mscomstf.dll" (szSect$, szSrc$, szDest$) AS INTEGER
  160. DECLARE FUNCTION FAddSectionKeyFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  161. DECLARE FUNCTION FAddSpecialFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  162. DECLARE FUNCTION GrcCopyFilesInCopyList LIB "msinsstf.dll" (hInstance%) AS INTEGER
  163. DECLARE FUNCTION FCreateIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, 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 FAddDos5Help LIB "msinsstf.dll" (szProgName$, szProgHelp$, cmo%) AS INTEGER
  170. DECLARE FUNCTION FCopyOneFile LIB "msinsstf.dll" (szSrc$, szDest$, cmo%, fAppend%) AS INTEGER
  171. DECLARE FUNCTION FInitializeInstall LIB "msinsstf.dll" (hinst%, hwndFrame%) AS INTEGER
  172. DECLARE FUNCTION FIsDirWritable LIB "msinsstf.dll" (szDir$) AS INTEGER
  173. DECLARE FUNCTION FIsFileWritable LIB "msinsstf.dll" (szFile$) AS INTEGER
  174. DECLARE FUNCTION FExitExecRestart LIB "msinsstf.dll" AS INTEGER
  175. DECLARE FUNCTION SetCopyMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  176. DECLARE FUNCTION GetCopyMode LIB "msinsstf.dll" AS INTEGER
  177. DECLARE FUNCTION SetDecompMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  178. DECLARE FUNCTION GetDecompMode LIB "msinsstf.dll" AS INTEGER
  179. DECLARE FUNCTION SetSizeCheckMode LIB "msinsstf.dll" (scmMode%) AS INTEGER
  180.  
  181. DECLARE FUNCTION SetTimeValue LIB "msinsstf.dll" (usHours%, usMinutes%, usSeconds%) AS INTEGER
  182.  
  183.  
  184.  
  185. '*************************************************************************
  186. '****************  Setup Basic Wrapper Declarations  *********************
  187. '*************************************************************************
  188.  
  189.  
  190. ''shell
  191.  
  192. DECLARE SUB SetBitmap(szDll$, Bitmap%)
  193. DECLARE FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS STRING
  194. DECLARE SUB UIPop (n%)
  195. DECLARE SUB UIPopAll
  196. DECLARE SUB SetTitle (sz$)
  197. DECLARE SUB ReadInfFile (szFile$)
  198. DECLARE SUB SetSymbolValue (szSymbol$, szValue$)
  199. DECLARE SUB RemoveSymbol (szSym$)
  200. DECLARE FUNCTION GetSymbolValue (szSymbol$) AS STRING
  201. DECLARE FUNCTION GetListLength(szSymbol$) AS INTEGER
  202. DECLARE FUNCTION GetListItem(szSymbol$, n%) AS STRING
  203. DECLARE SUB AddListItem(szSymbol$, szItem$)
  204. DECLARE SUB ReplaceListItem(szSymbol$, n%, szItem$)
  205.  
  206. DECLARE FUNCTION InitFrame (szCmdLine$) AS INTEGER
  207. DECLARE FUNCTION InitSetup (szCmdLine$) AS INTEGER
  208.  
  209. DECLARE FUNCTION ShowWaitCursor AS INTEGER
  210. DECLARE SUB RestoreCursor (hPrev%)
  211.  
  212. DECLARE FUNCTION SetBeepingMode (mode%) AS INTEGER
  213. DECLARE FUNCTION SetSilentMode (mode%) AS INTEGER
  214.  
  215.  
  216.  
  217. ''install
  218.  
  219.  
  220. DECLARE SUB CreateDir (szDir$, cmo%)
  221. DECLARE SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$)
  222. DECLARE SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  223. DECLARE SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  224. DECLARE SUB CopyFilesInCopyList
  225. DECLARE SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  226. DECLARE SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  227. DECLARE SUB CreateProgmanGroup (szGroup$, szPath$, cmo%)
  228. DECLARE SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%)
  229. DECLARE SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%)
  230. DECLARE SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%)
  231. DECLARE SUB AddDos5Help (szProgName$, szProgHelp$, cmo%)
  232. DECLARE SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%)
  233. DECLARE SUB RemoveFile (szFullPathSrc$, cmo%)
  234. DECLARE SUB InitInstall
  235. DECLARE SUB OpenLogFile (szFile$, fAppend%)
  236. DECLARE SUB CloseLogFile
  237. DECLARE SUB WriteToLogFile (szStr$)
  238. DECLARE FUNCTION ExitExecRestart AS INTEGER
  239. DECLARE FUNCTION IsDirWritable (szDir$) AS INTEGER
  240. DECLARE FUNCTION IsFileWritable (szFile$) AS INTEGER
  241.  
  242.  
  243.  
  244. '' Error Handling
  245.  
  246. '' Setup API Errors
  247. CONST saeFail   = 0
  248. CONST saeInit   = 1
  249. CONST saeNYI    = 3
  250. CONST saeArg    = 4    ''must be max sae value
  251.  
  252. DECLARE SUB StfApiErr (nMsg%, szApi$, szArgs$)
  253. DECLARE SUB BadArgErr (nArg%, szApi$, szArgs$)
  254.  
  255. '' chk arg
  256. DECLARE FUNCTION FValidFATDir LIB "mscomstf.dll" (szDir$) AS INTEGER
  257. DECLARE FUNCTION CchlValidFATSubPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  258. DECLARE FUNCTION FValidFATPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  259. DECLARE FUNCTION FValidDrive (szDrive$) AS INTEGER
  260.  
  261. DECLARE FUNCTION FValidInfSect (szSect$) AS INTEGER
  262. DECLARE FUNCTION FValidIniFile (szFile$) AS INTEGER
  263.  
  264.  
  265.  
  266. '' Windows system detect
  267.  
  268. DECLARE FUNCTION GetWindowsMajorVersion AS INTEGER
  269. DECLARE FUNCTION GetWindowsMinorVersion AS INTEGER
  270. DECLARE FUNCTION GetWindowsMode AS INTEGER
  271. DECLARE FUNCTION GetWindowsDir  AS STRING
  272. DECLARE FUNCTION GetWindowsSysDir AS STRING
  273. DECLARE FUNCTION IsWindowsShared AS INTEGER
  274. DECLARE FUNCTION GetScreenWidth AS INTEGER
  275. DECLARE FUNCTION GetScreenHeight AS INTEGER
  276.  
  277.  
  278. '*************************************************************************
  279. '*****************  Setup Basic Wrapper Definitions  *********************
  280. '*************************************************************************
  281. FUNCTION InitSetup(szCmdLine$) STATIC AS INTEGER
  282.     fFrameInit = 0
  283.     fInstallInit = 0
  284.  
  285.  
  286.     i% = InitFrame(szCmdLine$)
  287.     fFrameInit = 1
  288.  
  289.     InitInstall
  290.     fInstallInit = 1
  291.  
  292.     InitSetup = i%
  293. END FUNCTION
  294.  
  295.  
  296.  
  297. '**************************************************************************
  298. FUNCTION InitFrame(szCmdLine$) STATIC AS INTEGER
  299.     IF hSetup > 0 THEN
  300.     ELSE
  301.         i% = InitializeFrame(szCmdLine$)
  302.         IF i% = -1 THEN
  303.             END   '' NOT an error - Usage (/?) or Command line copy operation
  304.         ELSEIF i% = 0 THEN
  305.             END
  306.         ELSE
  307.             InitFrame = i%
  308.         END IF
  309.     END IF
  310. END FUNCTION
  311.  
  312.  
  313. '**************************************************************************
  314. SUB SetBitmap(szDll$, Bitmap%) STATIC
  315.     IF FSetBitmap(szDll$, Bitmap%) = 0 THEN
  316.         ERROR STFERR
  317.     END IF
  318. END SUB
  319.  
  320.  
  321. '*************************************************************************
  322. SUB SetTitle(sz$) STATIC
  323.     SetWindowText HwndFrame(), sz$
  324. END SUB
  325.  
  326.  
  327. '*************************************************************************
  328. SUB ReadInfFile (szFile$) STATIC
  329.     IF FOpenInf(szFile$, 1, 0) = 0 THEN
  330.         ERROR STFERR
  331.     END IF
  332. END SUB
  333.  
  334.  
  335. '*************************************************************************
  336. FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) STATIC AS STRING
  337.  
  338.     IF FDoDialog(HwndFrame(), szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) = 0 THEN
  339.         ERROR STFERR
  340.     ELSE
  341.         UIStartDlg = GetSymbolValue("DLGEVENT")
  342.     END IF
  343. END FUNCTION
  344.  
  345.  
  346. '*************************************************************************
  347. SUB UIPop (n%) STATIC
  348.     IF FKillNDialogs(n%) = 0 THEN
  349.         ERROR STFERR
  350.     END IF
  351. END SUB
  352.  
  353.  
  354. '*************************************************************************
  355. SUB UIPopAll STATIC
  356.     IF FKillNDialogs(65535) = 0 THEN
  357.         ERROR STFERR
  358.     END IF
  359. END SUB
  360.  
  361.  
  362. '*************************************************************************
  363. FUNCTION GetSymbolValue(szSymbol$) STATIC AS STRING
  364.     szValue$ = string$(cbSymValMax,32)
  365.     Length% = CbGetSymbolValue(szSymbol$, szValue$, cbSymValMax)
  366.     GetSymbolValue = szValue$
  367.     IF Length% >= cbSymValMax THEN
  368.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  369.         ERROR STFERR
  370.     END IF
  371.     IF szSymbol$ = "" THEN
  372.         ERROR STFERR
  373.     END IF
  374.     szValue$ = ""
  375. END FUNCTION
  376.  
  377.  
  378. '*************************************************************************
  379. FUNCTION GetListLength(szSymbol$) STATIC AS INTEGER
  380.     GetListLength = UsGetListLength(szSymbol$)
  381.     IF szSymbol$ = "" THEN
  382.         ERROR STFERR
  383.     END IF
  384. END FUNCTION
  385.  
  386.  
  387. '*************************************************************************
  388. FUNCTION GetListItem(szListSymbol$, nItem%) STATIC AS STRING
  389.  
  390.     szListItem$ = string$(cbSymValMax,32)
  391.     Length% = CbGetListItem(szListSymbol$, nItem%, szListItem$, cbSymValMax)
  392.     GetListItem = szListItem$
  393.     IF Length% >= cbSymValMax THEN
  394.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  395.         ERROR STFERR
  396.     END IF
  397.     IF szListSymbol$ = "" THEN
  398.         ERROR STFERR
  399.     END IF
  400.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  401.         ERROR STFERR
  402.     end if
  403.     szListItem$ = ""
  404. END FUNCTION
  405.  
  406.  
  407. '*************************************************************************
  408. SUB AddListItem(szSymbol$, szItem$) STATIC
  409.     IF FAddListItem(szSymbol$, szItem$) = 0 THEN
  410.         ERROR STFERR
  411.     END IF
  412. END SUB
  413.  
  414.  
  415. '*************************************************************************
  416. SUB ReplaceListItem(szSymbol$, n%, szItem$) STATIC
  417.  
  418.     IF FReplaceListItem(szSymbol$, n%, szItem$) = 0 THEN
  419.         ERROR STFERR
  420.     END IF
  421. END SUB
  422.  
  423.  
  424. '*************************************************************************
  425. SUB SetSymbolValue(szSymbol$, szValue$) STATIC
  426.     IF FSetSymbolValue(szSymbol$, szValue$) = 0 THEN
  427.         ERROR STFERR
  428.     END IF
  429. END SUB
  430.  
  431.  
  432. '*************************************************************************
  433. SUB RemoveSymbol(szSym$) STATIC
  434.     IF FRemoveSymbol(szSym$) = 0 THEN
  435.         ERROR STFERR
  436.     END IF
  437. END SUB
  438.  
  439.  
  440. '*************************************************************************
  441. FUNCTION ShowWaitCursor STATIC AS INTEGER
  442.     ShowWaitCursor = HShowWaitCursor
  443. END FUNCTION
  444.  
  445.  
  446. '*************************************************************************
  447. SUB RestoreCursor (hPrev%) STATIC
  448.     i% = FRestoreCursor(hPrev%)
  449.     IF i% = 0 THEN
  450.         ERROR STFERR
  451.     END IF
  452. END SUB
  453.  
  454.  
  455. '*************************************************************************
  456. FUNCTION SetBeepingMode (mode%) STATIC AS INTEGER
  457.     SetBeepingMode = FSetBeepingMode(mode%)
  458. END FUNCTION
  459.  
  460.  
  461. '*************************************************************************
  462. FUNCTION SetSilentMode (mode%) STATIC AS INTEGER
  463.     SetSilentMode = FSetSilent(mode%)
  464. END FUNCTION
  465.  
  466.  
  467. '*************************************************************************
  468. SUB InitInstall STATIC
  469.     IF hSetup > 0 THEN
  470.     ELSEIF FInitializeInstall(HinstFrame(), HwndFrame()) = 0 THEN
  471.         END
  472.     END IF
  473. END SUB
  474.  
  475.  
  476. '*************************************************************************
  477. SUB CreateDir (szDir$, cmo%) STATIC
  478.     IF FCreateDir(szDir$, cmo%) = 0 THEN
  479.         ERROR STFERR
  480.     END IF
  481. END SUB
  482.  
  483.  
  484.  
  485. '*************************************************************************
  486. SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  487.  
  488.     IF FCreateIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  489.         ERROR STFERR
  490.     END IF
  491. END SUB
  492.  
  493.  
  494. '*************************************************************************
  495. SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  496.  
  497.     IF FCreateSysIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  498.         ERROR STFERR
  499.     END IF
  500. END SUB
  501.  
  502.  
  503. '*************************************************************************
  504. SUB CreateProgmanGroup (szGroup$, szPath$, cmo%) STATIC
  505.     IF FCreateProgManGroup(szGroup$, szPath$, cmo%) = 0 THEN
  506.         ERROR STFERR
  507.     END IF
  508. END SUB
  509.  
  510.  
  511. '*************************************************************************
  512. SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%) STATIC
  513.     IF FShowProgManGroup(szGroup$, STR$(Cmd%), cmo%) = 0 THEN
  514.         ERROR STFERR
  515.     END IF
  516. END SUB
  517.  
  518.  
  519. '*************************************************************************
  520. SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) STATIC
  521.  
  522.     IF FStampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) = 0 THEN
  523.         ERROR STFERR
  524.     END IF
  525. END SUB
  526.  
  527.  
  528. '*************************************************************************
  529. SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%) STATIC
  530.     szItemNew$ = szItem$
  531.     IF szOther$ <> "" THEN
  532.         szItemNew$ = szItem$ + "," + szOther$
  533.     END IF
  534.  
  535.     IF FCreateProgManItem(szGroup$, szItemNew$, szCmd$, cmo%) = 0 THEN
  536.         ERROR STFERR
  537.     END IF
  538.     szItemNew$ = ""
  539. END SUB
  540.  
  541.  
  542. '*************************************************************************
  543. SUB AddDos5Help (szProgName$, szProgHelp$, cmo%) STATIC
  544.     IF FAddDos5Help (szProgName$, szProgHelp$, cmo%) = 0 THEN
  545.         ERROR STFERR
  546.     END IF
  547. END SUB
  548.  
  549.  
  550. '*************************************************************************
  551. SUB CopyFilesInCopyList STATIC
  552.     grc% = GrcCopyFilesInCopyList (HinstFrame())
  553.  
  554.     IF grc% = grcUserQuit THEN
  555.         ERROR STFQUIT
  556.     ELSEIF grc% > 0 THEN
  557.         ERROR STFERR
  558.     END IF
  559. END SUB
  560.  
  561.  
  562. '*************************************************************************
  563. SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%) STATIC
  564.  
  565.     IF  FCopyOneFile(szFullPathSrc$, szFullPathDst$, (cmo OR cmoCopy), fAppend%) = 0 THEN
  566.         ERROR STFERR
  567.     END IF
  568. END SUB
  569.  
  570.  
  571. '*************************************************************************
  572. SUB RemoveFile (szFullPathSrc$, cmo%) STATIC
  573.     IF    YnrcRemoveFile(szFullPathSrc$, cmo%) = ynrcNo THEN
  574.         ERROR STFERR
  575.     END IF
  576. END SUB
  577.  
  578.  
  579. '*************************************************************************
  580. SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$) STATIC
  581.  
  582.     IF FAddSectionFilesToCopyList (szSect$, szSrc$, szDest$) = 0 THEN
  583.         ERROR STFERR
  584.     END IF
  585. END SUB
  586.  
  587.  
  588. '*************************************************************************
  589. SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  590.  
  591.     IF FAddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  592.         ERROR STFERR
  593.     END IF
  594. END SUB
  595.  
  596.  
  597. '*************************************************************************
  598. SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  599.  
  600.     IF FAddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  601.         ERROR STFERR
  602.     END IF
  603. END SUB
  604.  
  605.  
  606. '*************************************************************************
  607. SUB OpenLogFile (szFile$, fAppend%) STATIC
  608.     IF FOpenLogFile(szFile$, fAppend%) = 0 THEN
  609.         ERROR STFERR
  610.     END IF
  611. END SUB
  612.  
  613.  
  614. '*************************************************************************
  615. SUB CloseLogFile STATIC
  616.     IF FCloseLogFile() = 0 THEN
  617.         ERROR STFERR
  618.     END IF
  619. END SUB
  620.  
  621.  
  622. '*************************************************************************
  623. SUB WriteToLogFile (szStr$) STATIC
  624.     IF FWriteToLogFile(szStr$, 1) = 0 THEN
  625.         ERROR STFERR
  626.     END IF
  627. END SUB
  628.  
  629.  
  630. '*************************************************************************
  631. FUNCTION IsDirWritable (szDir$) STATIC AS INTEGER
  632.     IsDirWritable = FIsDirWritable(szDir$)
  633. END FUNCTION
  634.  
  635.  
  636. '*************************************************************************
  637. FUNCTION IsFileWritable (szFile$) STATIC AS INTEGER
  638.     IsFileWritable = FIsFileWritable(szFile$)
  639. END FUNCTION
  640.  
  641.  
  642. '*************************************************************************
  643. FUNCTION GetWindowsMajorVersion STATIC AS INTEGER
  644.     GetWindowsMajorVersion = GetVersion() MOD 256
  645. END FUNCTION
  646.  
  647.  
  648. '*************************************************************************
  649. FUNCTION GetWindowsMinorVersion STATIC AS INTEGER
  650.     GetWindowsMinorVersion = GetVersion() / 256
  651. END FUNCTION
  652.  
  653.  
  654. '*************************************************************************
  655. FUNCTION GetWindowsMode STATIC AS INTEGER
  656.     GetWindowsMode = 0
  657.     longTmp& = GetWinFlags()
  658.     IF longTmp& AND WF_STANDARD THEN
  659.         GetWindowsMode = 1
  660.     ELSEIF longTmp& AND WF_ENHANCED THEN
  661.         GetWindowsMode = 2
  662.     END IF
  663. END FUNCTION
  664.  
  665.  
  666. '*************************************************************************
  667. FUNCTION GetWindowsDir STATIC AS STRING
  668.     szBuf$ = string$(256, 32)
  669.     cbBuf% = GetWindowsDirectory(szBuf$, 256)
  670.  
  671.     IF cbBuf% = 0 THEN
  672.         GetWindowsDir = ""
  673.         ERROR STFERR
  674.     ELSE
  675.         IF cbBuf% > 255 THEN
  676.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  677.             ERROR STFERR
  678.         END IF
  679.         szBuf$ = RTRIM$(szBuf$)
  680.         IF MID$(szBuf$, 1, 1) = "\" THEN
  681.             'szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  682.             szBuf$ = MID$(GetWindowsSysDir, 1, 2) + szBuf$
  683.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  684.             szBuf$ = MID$(GetWindowsSysDir, 1, 3) + szBuf$
  685.         END IF
  686.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  687.             szBuf$ = szBuf$ + "\"
  688.         END IF
  689.         GetWindowsDir = szBuf$
  690.     END IF
  691.  
  692.     szBuf$ = ""
  693. END FUNCTION
  694.  
  695.  
  696. '*************************************************************************
  697. FUNCTION GetWindowsSysDir STATIC AS STRING
  698.     szBuf$ = string$(256, 32)
  699.     cbBuf% = GetSystemDirectory(szBuf$, 256)
  700.  
  701.     IF cbBuf% = 0 THEN
  702.         ERROR STFERR
  703.     ELSE
  704.         IF cbBuf% > 255 THEN
  705.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  706.             ERROR STFERR
  707.         END IF
  708.         szBuf$ = RTRIM$(szBuf$)
  709.         IF MID$(szBuf$, 1, 1) = "\" THEN
  710.             szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  711.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  712.             szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  713.         END IF
  714.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  715.             szBuf$ = szBuf$ + "\"
  716.         END IF
  717.         GetWindowsSysDir = szBuf$
  718.     END IF
  719.  
  720.     szBuf$ = ""
  721. END FUNCTION
  722.  
  723.  
  724. '*************************************************************************
  725. FUNCTION IsWindowsShared STATIC AS INTEGER
  726.     szWin$ = UCASE$(GetWindowsDir())
  727.     szSys$ = UCASE$(GetWindowsSysDir())
  728.  
  729.     IF len(szWin$) = 0 THEN
  730.         ERROR STFERR
  731.     END IF
  732.  
  733.     IF len(szSys$) <= len(szWin$) THEN
  734.         IsWindowsShared = 1
  735.     ELSE
  736.         szSys$ = MID$(szSys$, 1, len(szWin$))
  737.         IF szWin$ = szSys$ THEN
  738.             IsWindowsShared = 0
  739.         ELSE
  740.             IsWindowsShared = 1
  741.         END IF
  742.     END IF
  743. END FUNCTION
  744.  
  745.  
  746. '*************************************************************************
  747. FUNCTION GetScreenWidth STATIC AS INTEGER
  748.     GetScreenWidth = GetSystemMetrics(SM_CXSCREEN)
  749. END FUNCTION
  750.  
  751.  
  752. '*************************************************************************
  753. FUNCTION GetScreenHeight STATIC AS INTEGER
  754.     GetScreenHeight = GetSystemMetrics(SM_CYSCREEN)
  755. END FUNCTION
  756.  
  757.  
  758. '*************************************************************************
  759. FUNCTION ExitExecRestart STATIC AS INTEGER
  760.     ExitExecRestart = FExitExecRestart
  761. END FUNCTION
  762.  
  763.  
  764.  
  765.  
  766. '**************************************************************************
  767. '***************************  Error Handlers  *****************************
  768. '**************************************************************************
  769.  
  770.  
  771. '**************************************************************************
  772. SUB StfApiErr (nMsg%, szApi$, szArgs$) STATIC      ''DEBUG only
  773.     select case nMsg%
  774.         case saeFail
  775.             lpText$ = "Failed"
  776.         case saeInit
  777.             lpText$ = "Already Initialized"
  778.         case saeNYI
  779.             lpText$ = "NYI"
  780.         case else
  781.             lpText$ = "Bad Arg "+LTRIM$(STR$(nMsg% - saeArg))
  782.     end select
  783.  
  784.     lpText$ = lpText$ + ": "+ szApi$
  785.     if szArgs$ <> "" then
  786.         lpText$ = lpText + " (" + szArgs$ + ")"
  787.     end if
  788.     lpCaption$ = "MS-Setup Toolkit API Error"
  789.     res% = DoMsgBox(lpText$, lpCaption$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  790.     print lpText$
  791.     lpText$ = ""
  792.     lpCaption$ = ""
  793. END SUB
  794.  
  795. '**************************************************************************
  796. SUB BadArgErr (nArg%, szApi$, szArgs$) STATIC      ''DEBUG only
  797.     StfApiErr nArg%+saeArg, szApi$, szArgs$
  798.     ERROR STFERR
  799. END SUB
  800.  
  801.  
  802. '** REVIEW: Move this function into common lib (we'll need it there too)
  803. '**************************************************************************
  804. FUNCTION FValidInfSect (szSect$) STATIC AS INTEGER
  805.     if (szSect$ = "") OR (INSTR(1,szSect$,"]") <> 0) then
  806.         FValidInfSect = 0
  807.     else
  808.         FValidInfSect = 1
  809.     end if
  810. END FUNCTION
  811.  
  812.  
  813. '** REVIEW: Move this function into common lib (we'll need it there too)
  814. '**************************************************************************
  815. FUNCTION FValidIniFile (szFile$) STATIC AS INTEGER
  816.     if (FValidFATPath(szFile$) = 0) AND (UCASE$(szFile$) <> "WIN.INI") then
  817.         FValidIniFile = 0
  818.     else
  819.         FValidIniFile = 1
  820.     end if
  821. END FUNCTION
  822.  
  823. '**************************************************************************
  824. FUNCTION FValidDrive (szDrive$) STATIC AS INTEGER
  825.  
  826.     if szDrive$ = "" then
  827.         FValidDrive = 0
  828.     elseif INSTR(1,szDrive$,"\\") = 1 then   ' UNC path
  829.         FValidDrive = 1
  830.     elseif ASC(UCASE$(szDrive$)) - ASC("A") < 0 then
  831.         FValidDrive = 0
  832.     elseif ASC(UCASE$(szDrive$)) - ASC("A") > 25 then
  833.         FValidDrive = 0
  834.     elseif LEN(szDrive$) = 1 then
  835.         FValidDrive = 1
  836.     elseif INSTR(2,szDrive$,":\") = 2 then
  837.         FValidDrive = 1
  838.     elseif INSTR(1,szDrive$,":") = 2 then
  839.         FValidDrive = 1
  840.     else
  841.         FValidDrive = 0
  842.     end if
  843. END FUNCTION
  844.  
  845.  
  846.  
  847. TRAP CleanupTrap From "MSSHLSTF.DLL"
  848.  
  849. End Trap
  850.  
  851. hSetup = InitSetup(COMMAND$)
  852.  
  853. ON ERROR GOTO QUIT
  854.