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