home *** CD-ROM | disk | FTP | other *** search
/ Computer Buyer 1995 December / buyer-1295.iso / borland / viewer4 / setupapi.in_ / setupapi.bin
Text File  |  1994-03-02  |  48KB  |  1,568 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 GetVersion LIB "kernel" AS INTEGER
  31. DECLARE FUNCTION GetSystemMetrics LIB "user" (nIndex%) AS INTEGER
  32. DECLARE FUNCTION MoveWindow LIB "user" (hwnd%, nLeft%, nTop%, nWidth%, nHeight%, fRepaint&) AS INTEGER
  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 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 GrcCopyFilesInCopyList LIB "msinsstf.dll" (hInstance%) AS INTEGER
  164. DECLARE FUNCTION FRemoveIniSection LIB "msinsstf.dll" (szFile$, szSect$, cmo%) AS INTEGER
  165. DECLARE FUNCTION FCreateIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  166. DECLARE FUNCTION FRemoveIniKey LIB "msinsstf.dll" (szFile$, szSect$, szKey$, cmo%) AS INTEGER
  167. DECLARE FUNCTION FCreateSysIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  168. DECLARE FUNCTION FCreateProgManGroup LIB "msinsstf.dll" (szGroup$, szPath$, cmo%) AS INTEGER
  169. DECLARE FUNCTION FCreateProgManItem LIB "msinsstf.dll" (szGroup$, szItem$, szCmd$, cmo%) AS INTEGER
  170. DECLARE FUNCTION FShowProgManGroup LIB "msinsstf.dll" (szGroup$, szCmd$, cmo%) AS INTEGER
  171. DECLARE FUNCTION FDumpCopyListToFile LIB "msinsstf.dll" (szFile$) AS INTEGER
  172. DECLARE SUB      ResetCopyList LIB "msinsstf.dll"
  173. DECLARE FUNCTION LcbGetCopyListCost LIB "msinsstf.dll" (szExtraList$, szCostList$, szNeedList$) AS LONG
  174. DECLARE FUNCTION FCopyOneFile LIB "msinsstf.dll" (szSrc$, szDest$, cmo%, fAppend%) AS INTEGER
  175. DECLARE FUNCTION YnrcRemoveFile LIB "msinsstf.dll" (szFullPathSrc$, cmo%) AS INTEGER
  176. DECLARE FUNCTION YnrcBackupFile LIB "msinsstf.dll" (szFullPath$, szBackup$, cmo%) AS INTEGER
  177. DECLARE FUNCTION FInitializeInstall LIB "msinsstf.dll" (hinst%, hwndFrame%) AS INTEGER
  178. DECLARE FUNCTION FIsDirWritable LIB "msinsstf.dll" (szDir$) AS INTEGER
  179. DECLARE FUNCTION FIsFileWritable LIB "msinsstf.dll" (szFile$) AS INTEGER
  180. DECLARE FUNCTION FAddToBillboardList LIB "msinsstf.dll" (szDll$, idDlg%, szProc$, lTicks&) AS INTEGER
  181. DECLARE FUNCTION FClearBillboardList LIB "msinsstf.dll" AS INTEGER
  182. DECLARE FUNCTION SetCopyMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  183. DECLARE FUNCTION GetCopyMode LIB "msinsstf.dll" AS INTEGER
  184. DECLARE FUNCTION SetSizeCheckMode LIB "msinsstf.dll" (scmMode%) AS INTEGER
  185. DECLARE FUNCTION FPrependToPath LIB "msinsstf.dll" (szSrc$, szDst$, szDir$, cmo%) AS INTEGER
  186.  
  187. DECLARE FUNCTION SetTimeValue LIB "msinsstf.dll" (usHours%, usMinutes%, usSeconds%) AS INTEGER
  188.  
  189.  
  190. '*************************************************************************
  191. '****************  Setup Basic Wrapper Declarations  *********************
  192. '*************************************************************************
  193.  
  194.  
  195. ''shell
  196.  
  197. DECLARE SUB SetBitmap(szDll$, Bitmap%)
  198. DECLARE SUB SetAbout(szAbout1$, szAbout2$)
  199. DECLARE FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS STRING
  200. DECLARE SUB UIPop (n%)
  201. DECLARE SUB UIPopAll
  202. DECLARE SUB SetTitle (sz$)
  203. DECLARE SUB ReadInfFile (szFile$)
  204. DECLARE SUB SetSymbolValue (szSymbol$, szValue$)
  205. DECLARE SUB RemoveSymbol (szSym$)
  206. DECLARE FUNCTION GetSymbolValue (szSymbol$) AS STRING
  207. DECLARE FUNCTION GetListLength(szSymbol$) AS INTEGER
  208. DECLARE SUB MakeListFromSectionKeys (szSymbol$, szSect$)
  209. DECLARE FUNCTION GetListItem(szSymbol$, n%) AS STRING
  210. DECLARE SUB AddListItem(szSymbol$, szItem$)
  211. DECLARE SUB ReplaceListItem(szSymbol$, n%, szItem$)
  212.  
  213. DECLARE FUNCTION InitFrame (szCmdLine$) AS INTEGER
  214. DECLARE FUNCTION InitSetup (szCmdLine$) AS INTEGER
  215.  
  216. DECLARE FUNCTION ShowWaitCursor AS INTEGER
  217. DECLARE SUB RestoreCursor (hPrev%)
  218.  
  219. DECLARE FUNCTION SetBeepingMode (mode%) AS INTEGER
  220. DECLARE FUNCTION SetSilentMode (mode%) AS INTEGER
  221.  
  222. DECLARE FUNCTION GetSectionKeyDate (szSect$, szKey$) AS STRING
  223. DECLARE FUNCTION GetSectionKeyFilename (szSect$, szKey$) AS STRING
  224. DECLARE FUNCTION GetSectionKeySize (szSect$, szKey$) AS LONG
  225.  
  226. DECLARE SUB MakeListFromSectionDate (szSym$, szSect$)
  227. DECLARE SUB MakeListFromSectionFilename (szSym$, szSect$)
  228. DECLARE SUB MakeListFromSectionSize (szSym$, szSect$)
  229.  
  230.  
  231. ''install
  232.  
  233.  
  234. DECLARE SUB CreateDir (szDir$, cmo%)
  235. DECLARE SUB RemoveDir (szDir$, cmo%)
  236. DECLARE SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$)
  237. DECLARE SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  238. DECLARE SUB CopyFilesInCopyList
  239. DECLARE SUB RemoveIniSection (szFile$, szSect$, cmo%)
  240. DECLARE SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  241. DECLARE SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%)
  242. DECLARE SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  243. DECLARE SUB CreateProgmanGroup (szGroup$, szPath$, cmo%)
  244. DECLARE SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%)
  245. DECLARE SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%)
  246. DECLARE SUB DumpCopyList (szFile$)
  247. DECLARE SUB ClearCopyList
  248. DECLARE FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) AS LONG
  249. DECLARE SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%)
  250. DECLARE SUB RemoveFile (szFullPathSrc$, cmo%)
  251. DECLARE SUB BackupFile (szFullPath$, szBackup$)
  252. DECLARE SUB RenameFile (szFullPath$, szBackup$)
  253. DECLARE SUB InitInstall
  254. DECLARE SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&)
  255. DECLARE SUB AddBlankToBillboardList (lTicks&)
  256. DECLARE SUB ClearBillboardList
  257. DECLARE SUB OpenLogFile (szFile$, fAppend%)
  258. DECLARE SUB CloseLogFile
  259. DECLARE SUB WriteToLogFile (szStr$)
  260. DECLARE SUB SetCopyGaugePosition (x%, y%)
  261. DECLARE SUB SetRestartDir(szDir$)
  262. DECLARE FUNCTION RestartListEmpty AS INTEGER
  263. DECLARE FUNCTION IsDirWritable (szDir$) AS INTEGER
  264. DECLARE FUNCTION IsFileWritable (szFile$) AS INTEGER
  265. DECLARE FUNCTION GetNthFieldFromIniString (szLine$, iField%) AS STRING
  266. DECLARE SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%)
  267.  
  268.  
  269. '' Error Handling
  270.  
  271. '$ifdef DEBUG
  272.  
  273. '' Setup API Errors
  274. CONST saeFail   = 0
  275. CONST saeInit   = 1
  276. CONST saeNYI    = 3
  277. CONST saeArg    = 4    ''must be max sae value
  278.  
  279. DECLARE SUB StfApiErr (nMsg%, szApi$, szArgs$)
  280. DECLARE SUB BadArgErr (nArg%, szApi$, szArgs$)
  281.  
  282. '' chk arg
  283. DECLARE FUNCTION FValidFATDir LIB "mscomstf.dll" (szDir$) AS INTEGER
  284. DECLARE FUNCTION FValidFATPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  285. DECLARE FUNCTION FValidDrive (szDrive$) AS INTEGER
  286.  
  287. DECLARE FUNCTION FValidInfSect (szSect$) AS INTEGER
  288. DECLARE FUNCTION FValidIniFile (szFile$) AS INTEGER
  289.  
  290. '$endif ''DEBUG
  291.  
  292.  
  293.  
  294. '' Windows system detect
  295.  
  296. DECLARE FUNCTION GetWindowsMajorVersion AS INTEGER
  297. DECLARE FUNCTION GetWindowsMinorVersion AS INTEGER
  298. DECLARE FUNCTION GetWindowsDir  AS STRING
  299. DECLARE FUNCTION GetWindowsSysDir AS STRING
  300. DECLARE FUNCTION GetScreenWidth AS INTEGER
  301. DECLARE FUNCTION GetScreenHeight AS INTEGER
  302.  
  303.  
  304. '*************************************************************************
  305. '*****************  Setup Basic Wrapper Definitions  *********************
  306. '*************************************************************************
  307. FUNCTION InitSetup(szCmdLine$) STATIC AS INTEGER
  308.     fFrameInit = 0
  309.     fInstallInit = 0
  310.  
  311.     IF hSetup > 0 THEN
  312. '$ifdef DEBUG
  313.         StfApiErr saeInit, "InitSetup", szCmdLine$
  314. '$endif ''DEBUG
  315.     END IF
  316.  
  317.     i% = InitFrame(szCmdLine$)
  318.     fFrameInit = 1
  319.  
  320.     InitInstall
  321.     fInstallInit = 1
  322.  
  323.     InitSetup = i%
  324. END FUNCTION
  325.  
  326.  
  327.  
  328. '**************************************************************************
  329. FUNCTION InitFrame(szCmdLine$) STATIC AS INTEGER
  330.     IF hSetup > 0 THEN
  331. '$ifdef DEBUG
  332.         StfApiErr saeInit, "InitFrame", szCmdLine$
  333. '$endif ''DEBUG
  334.     ELSE
  335.         i% = InitializeFrame(szCmdLine$)
  336.         IF i% = -1 THEN
  337.             END   '' NOT an error - Usage (/?) or Command line copy operation
  338.         ELSEIF i% = 0 THEN
  339. '$ifdef DEBUG
  340.             StfApiErr saeFail, "InitFrame", szCmdLine$
  341. '$endif ''DEBUG
  342.             END
  343.         ELSE
  344.             InitFrame = i%
  345.         END IF
  346.     END IF
  347. END FUNCTION
  348.  
  349.  
  350. '**************************************************************************
  351. SUB SetBitmap(szDll$, Bitmap%) STATIC
  352.     IF FSetBitmap(szDll$, Bitmap%) = 0 THEN
  353. '$ifdef DEBUG
  354.         StfApiErr saeFail, "SetBitmap", szDll$+","+STR$(Bitmap%)
  355. '$endif ''DEBUG
  356.         ERROR STFERR
  357.     END IF
  358. END SUB
  359.  
  360.  
  361. '**************************************************************************
  362. SUB SetAbout(szAbout1$, szAbout2$) STATIC
  363.     IF FSetAbout(szAbout1$, szAbout2$) = 0 THEN
  364. '$ifdef DEBUG
  365.         StfApiErr saeFail, "SetAbout", szAbout1$ + "," + szAbout2$
  366. '$endif ''DEBUG
  367.         ERROR STFERR
  368.     END IF
  369. END SUB
  370.  
  371.  
  372. '*************************************************************************
  373. SUB SetTitle(sz$) STATIC
  374.     SetWindowText HwndFrame(), sz$
  375. END SUB
  376.  
  377.  
  378. '*************************************************************************
  379. SUB ReadInfFile (szFile$) STATIC
  380. '$ifdef DEBUG
  381.     if FValidFATPath(szFile$) = 0 then
  382.         BadArgErr 1, "ReadInfFile", szFile$
  383.     end if
  384.     IF FOpenInf(szFile$, 1, 1) = 0 THEN
  385.         StfApiErr saeFail, "ReadInfFile", szFile$
  386. '$else  ''!DEBUG
  387.     IF FOpenInf(szFile$, 1, 0) = 0 THEN
  388. '$endif ''!DEBUG
  389.         ERROR STFERR
  390.     END IF
  391. END SUB
  392.  
  393.  
  394. '*************************************************************************
  395. FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) STATIC AS STRING
  396. '$ifdef DEBUG
  397.     if szDll$ = "" then
  398.         n% = 1
  399.     elseif szDlgProc$ = "" then
  400.         n% = 3
  401.     else
  402.         n% = 0
  403.     end if
  404.     if n% > 0 then
  405.         BadArgErr n%, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  406.     end if
  407. '$endif ''DEBUG
  408.  
  409.     IF FDoDialog(HwndFrame(), szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) = 0 THEN
  410. '$ifdef DEBUG
  411.         StfApiErr saeFail, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  412. '$endif ''DEBUG
  413.         ERROR STFERR
  414.     ELSE
  415.         UIStartDlg = GetSymbolValue("DLGEVENT")
  416.     END IF
  417. END FUNCTION
  418.  
  419.  
  420. '*************************************************************************
  421. SUB UIPop (n%) STATIC
  422.     IF FKillNDialogs(n%) = 0 THEN
  423. '$ifdef DEBUG
  424.         StfApiErr saeFail, "UIPop", STR$(n%)
  425. '$endif ''DEBUG
  426.         ERROR STFERR
  427.     END IF
  428. END SUB
  429.  
  430.  
  431. '*************************************************************************
  432. SUB UIPopAll STATIC
  433.     IF FKillNDialogs(65535) = 0 THEN
  434. '$ifdef DEBUG
  435.         StfApiErr saeFail, "UIPopAll", ""
  436. '$endif ''DEBUG
  437.         ERROR STFERR
  438.     END IF
  439. END SUB
  440.  
  441.  
  442. '*************************************************************************
  443. FUNCTION GetSymbolValue(szSymbol$) STATIC AS STRING
  444. '$ifdef DEBUG
  445.     if szSymbol$ = "" then
  446.         BadArgErr 1, "GetSymbolValue", szSymbol$
  447.     end if
  448. '$endif ''DEBUG
  449.     szValue$ = string$(cbSymValMax,32)
  450.     Length% = CbGetSymbolValue(szSymbol$, szValue$, cbSymValMax)
  451.     GetSymbolValue = szValue$
  452.     IF Length% >= cbSymValMax THEN
  453.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  454.         ERROR STFERR
  455.     END IF
  456.     IF szSymbol$ = "" THEN
  457.         ERROR STFERR
  458.     END IF
  459.     szValue$ = ""
  460. END FUNCTION
  461.  
  462.  
  463. '*************************************************************************
  464. FUNCTION GetListLength(szSymbol$) STATIC AS INTEGER
  465. '$ifdef DEBUG
  466.     if szSymbol$ = "" then
  467.         BadArgErr 1, "GetListLength", szSymbol$
  468.     end if
  469. '$endif ''DEBUG
  470.     GetListLength = UsGetListLength(szSymbol$)
  471.     IF szSymbol$ = "" THEN
  472.         ERROR STFERR
  473.     END IF
  474. END FUNCTION
  475.  
  476.  
  477. '*************************************************************************
  478. FUNCTION GetListItem(szListSymbol$, nItem%) STATIC AS STRING
  479. '$ifdef DEBUG
  480.     if szListSymbol$ = "" then
  481.         BadArgErr 1, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  482.     end if
  483.  
  484.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  485.         BadArgErr 2, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  486.     end if
  487. '$endif ''DEBUG
  488.  
  489.     szListItem$ = string$(cbSymValMax,32)
  490.     Length% = CbGetListItem(szListSymbol$, nItem%, szListItem$, cbSymValMax)
  491.     GetListItem = szListItem$
  492.     IF Length% >= cbSymValMax THEN
  493.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  494.         ERROR STFERR
  495.     END IF
  496.     IF szListSymbol$ = "" THEN
  497.         ERROR STFERR
  498.     END IF
  499.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  500.         ERROR STFERR
  501.     end if
  502.     szListItem$ = ""
  503. END FUNCTION
  504.  
  505.  
  506. '*************************************************************************
  507. SUB AddListItem(szSymbol$, szItem$) STATIC
  508. '$ifdef DEBUG
  509.     if szSymbol$ = "" then
  510.         BadArgErr 1, "AddListItem", szSymbol$+", "+szItem$
  511.     end if
  512. '$endif ''DEBUG
  513.     IF FAddListItem(szSymbol$, szItem$) = 0 THEN
  514. '$ifdef DEBUG
  515.         StfApiErr saeFail, "AddListItem", szSymbol$+", "+szItem$
  516. '$endif ''DEBUG
  517.         ERROR STFERR
  518.     END IF
  519. END SUB
  520.  
  521.  
  522. '*************************************************************************
  523. SUB ReplaceListItem(szSymbol$, n%, szItem$) STATIC
  524. '$ifdef DEBUG
  525.     if szSymbol$ = "" then
  526.         nArg% = 1
  527.     elseif (n% <= 0) OR (n% > GetListLength(szSymbol$)) then
  528.         nArg% = 2
  529.     else
  530.         nArg% = 0
  531.     end if
  532.     if nArg% > 0 then
  533.         BadArgErr nArg%, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  534.     end if
  535. '$endif ''DEBUG
  536.  
  537.     IF FReplaceListItem(szSymbol$, n%, szItem$) = 0 THEN
  538. '$ifdef DEBUG
  539.         StfApiErr saeFail, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  540. '$endif ''DEBUG
  541.         ERROR STFERR
  542.     END IF
  543. END SUB
  544.  
  545.  
  546. '**************************************************************************
  547. SUB MakeListFromSectionKeys(szSymbol$, szSect$) STATIC
  548. '$ifdef DEBUG
  549.     if szSymbol$ = "" then
  550.         n% = 1
  551.     elseif FValidInfSect(szSect$) = 0 then
  552.         n% = 2
  553.     else
  554.         n% = 0
  555.     end if
  556.     if n% > 0 then
  557.         BadArgErr n%, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  558.     end if
  559. '$endif ''DEBUG
  560.  
  561.     IF FSetSymbolToListOfInfKeys(szSymbol$, szSect$, 1) = 0 THEN
  562. '$ifdef DEBUG
  563.         StfApiErr saeFail, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  564. '$endif ''DEBUG
  565.         ERROR STFERR
  566.     END IF
  567. END SUB
  568.  
  569.  
  570. '*************************************************************************
  571. SUB SetSymbolValue(szSymbol$, szValue$) STATIC
  572. '$ifdef DEBUG
  573.     if szSymbol$ = "" then
  574.         BadArgErr 1, "SetSymbolValue", szSymbol$+", "+szValue$
  575.     end if
  576. '$endif ''DEBUG
  577.     IF FSetSymbolValue(szSymbol$, szValue$) = 0 THEN
  578. '$ifdef DEBUG
  579.         StfApiErr saeFail, "SetSymbolValue", szSymbol$+", "+szValue$
  580. '$endif ''DEBUG
  581.         ERROR STFERR
  582.     END IF
  583. END SUB
  584.  
  585.  
  586. '*************************************************************************
  587. SUB RemoveSymbol(szSym$) STATIC
  588. '$ifdef DEBUG
  589.     if szSym$ = "" then
  590.         BadArgErr 1, "RemoveSymbol", szSym$
  591.     end if
  592. '$endif ''DEBUG
  593.     IF FRemoveSymbol(szSym$) = 0 THEN
  594. '$ifdef DEBUG
  595.         StfApiErr saeFail, "RemoveSymbol", szSym$
  596. '$endif ''DEBUG
  597.         ERROR STFERR
  598.     END IF
  599. END SUB
  600.  
  601.  
  602. '*************************************************************************
  603. FUNCTION ShowWaitCursor STATIC AS INTEGER
  604.     ShowWaitCursor = HShowWaitCursor
  605. END FUNCTION
  606.  
  607.  
  608. '*************************************************************************
  609. SUB RestoreCursor (hPrev%) STATIC
  610.     i% = FRestoreCursor(hPrev%)
  611.     IF i% = 0 THEN
  612. '$ifdef DEBUG
  613.         StfApiErr saeFail, "RestoreCursor", ""
  614. '$endif ''DEBUG
  615.         ERROR STFERR
  616.     END IF
  617. END SUB
  618.  
  619.  
  620. '*************************************************************************
  621. FUNCTION SetBeepingMode (mode%) STATIC AS INTEGER
  622.     SetBeepingMode = FSetBeepingMode(mode%)
  623. END FUNCTION
  624.  
  625.  
  626. '*************************************************************************
  627. FUNCTION SetSilentMode (mode%) STATIC AS INTEGER
  628.     SetSilentMode = FSetSilent(mode%)
  629. END FUNCTION
  630.  
  631.  
  632. '*************************************************************************
  633. FUNCTION GetSectionKeyDate (szSect$, szKey$) STATIC AS STRING
  634. '$ifdef DEBUG
  635.     if FValidInfSect(szSect$) = 0 then
  636.         n% = 1
  637.     elseif szKey$ = "" then
  638.         n% = 2
  639.     else
  640.         n% = 0
  641.     end if
  642.     if n% > 0 then
  643.         BadArgErr n%, "GetSectionKeyDate", szSect$+", "+szKey$
  644.     end if
  645. '$endif ''DEBUG
  646.  
  647.     szBuf$ = string$(128, 32)
  648.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 5, szBuf$, 128)
  649.     IF Length% >= 128 THEN
  650.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  651.         ERROR STFERR
  652.     END IF
  653.  
  654.     IF Length% = -1 THEN
  655. '$ifdef DEBUG
  656.         StfApiErr saeFail, "GetSectionKeyDate", szSect$+", "+szKey$
  657. '$endif ''DEBUG
  658.         ERROR STFERR
  659.     END IF
  660.  
  661.     GetSectionKeyDate = szBuf$
  662.     szBuf$ = ""
  663. END FUNCTION
  664.  
  665.  
  666. '*************************************************************************
  667. FUNCTION GetSectionKeyFilename (szSect$, szKey$) STATIC AS STRING
  668. '$ifdef DEBUG
  669.     if FValidInfSect(szSect$) = 0 then
  670.         n% = 1
  671.     elseif szKey$ = "" then
  672.         n% = 2
  673.     else
  674.         n% = 0
  675.     end if
  676.     if n% > 0 then
  677.         BadArgErr n%, "GetSectionKeyFilename", szSect$+", "+szKey$
  678.     end if
  679. '$endif ''DEBUG
  680.  
  681.     szBuf$ = string$(128, 32)
  682.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 1, szBuf$, 128)
  683.     IF Length% >= 128 THEN
  684.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  685.         ERROR STFERR
  686.     END IF
  687.  
  688.     IF Length% = -1 THEN
  689. '$ifdef DEBUG
  690.         StfApiErr saeFail, "GetSectionKeyFilename", szSect$+", "+szKey$
  691. '$endif ''DEBUG
  692.         ERROR STFERR
  693.     END IF
  694.  
  695.     GetSectionKeyFilename = szBuf$
  696.     szBuf$ = ""
  697. END FUNCTION
  698.  
  699.  
  700. '*************************************************************************
  701. FUNCTION GetSectionKeySize (szSect$, szKey$) STATIC AS LONG
  702. '$ifdef DEBUG
  703.     if FValidInfSect(szSect$) = 0 then
  704.         n% = 1
  705.     elseif szKey$ = "" then
  706.         n% = 2
  707.     else
  708.         n% = 0
  709.     end if
  710.     if n% > 0 then
  711.         BadArgErr n%, "GetSectionKeySize", szSect$+", "+szKey$
  712.     end if
  713. '$endif ''DEBUG
  714.  
  715.     szBuf$ = string$(128, 32)
  716.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 15, szBuf$, 128)
  717.     IF Length% >= 128 THEN
  718.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  719.         ERROR STFERR
  720.     END IF
  721.  
  722.     IF Length% = -1 THEN
  723. '$ifdef DEBUG
  724.         StfApiErr saeFail, "GetSectionKeySize", szSect$+", "+szKey$
  725. '$endif ''DEBUG
  726.         ERROR STFERR
  727.     END IF
  728.  
  729.     GetSectionKeySize = VAL(szBuf$)
  730.     szBuf$ = ""
  731. END FUNCTION
  732.  
  733.  
  734.  
  735. '*************************************************************************
  736. SUB MakeListFromSectionDate (szSym$, szSect$) STATIC
  737. '$ifdef DEBUG
  738.     if szSym$ = "" then
  739.         n% = 1
  740.     elseif FValidInfSect(szSect$) = 0 then
  741.         n% = 2
  742.     else
  743.         n% = 0
  744.     end if
  745.     if n% > 0 then
  746.         BadArgErr n%, "MakeListFromSectionDate", szSym$+", "+szSect$
  747.     end if
  748. '$endif ''DEBUG
  749.  
  750.     IF FMakeListInfSectionField(szSym$, szSect$, 5) = 0 THEN
  751. '$ifdef DEBUG
  752.         StfApiErr saeFail, "MakeListFromSectionDate", szSym$+", "+szSect$
  753. '$endif ''DEBUG
  754.         ERROR STFERR
  755.     END IF
  756. END SUB
  757.  
  758.  
  759. '*************************************************************************
  760. SUB MakeListFromSectionFilename (szSym$, szSect$) STATIC
  761. '$ifdef DEBUG
  762.     if szSym$ = "" then
  763.         n% = 1
  764.     elseif FValidInfSect(szSect$) = 0 then
  765.         n% = 2
  766.     else
  767.         n% = 0
  768.     end if
  769.     if n% > 0 then
  770.         BadArgErr n%, "MakeListFromSectionFilename", szSym$+", "+szSect$
  771.     end if
  772. '$endif ''DEBUG
  773.  
  774.     IF FMakeListInfSectionField(szSym$, szSect$, 1) = 0 THEN
  775. '$ifdef DEBUG
  776.         StfApiErr saeFail, "MakeListFromSectionFilename", szSym$+", "+szSect$
  777. '$endif ''DEBUG
  778.         ERROR STFERR
  779.     END IF
  780. END SUB
  781.  
  782.  
  783. '*************************************************************************
  784. SUB MakeListFromSectionSize (szSym$, szSect$) STATIC
  785. '$ifdef DEBUG
  786.     if szSym$ = "" then
  787.         n% = 1
  788.     elseif FValidInfSect(szSect$) = 0 then
  789.         n% = 2
  790.     else
  791.         n% = 0
  792.     end if
  793.     if n% > 0 then
  794.         BadArgErr n%, "MakeListFromSectionSize", szSym$+", "+szSect$
  795.     end if
  796. '$endif ''DEBUG
  797.  
  798.     IF FMakeListInfSectionField(szSym$, szSect$, 15) = 0 THEN
  799. '$ifdef DEBUG
  800.         StfApiErr saeFail, "MakeListFromSectionSize", szSym$+", "+szSect$
  801. '$endif ''DEBUG
  802.         ERROR STFERR
  803.     END IF
  804. END SUB
  805.  
  806.  
  807.  
  808. '*************************************************************************
  809. SUB InitInstall STATIC
  810.     IF hSetup > 0 THEN
  811. '$ifdef DEBUG
  812.         StfApiErr saeInit, "InitInstall", ""
  813. '$endif ''DEBUG
  814.     ELSEIF FInitializeInstall(HinstFrame(), HwndFrame()) = 0 THEN
  815. '$ifdef DEBUG
  816.         StfApiErr saeFail, "InitInstall", ""
  817. '$endif ''DEBUG
  818.         END
  819.     END IF
  820. END SUB
  821.  
  822.  
  823. '*************************************************************************
  824. SUB CreateDir (szDir$, cmo%) STATIC
  825. '$ifdef DEBUG
  826.     if FValidFATDir(szDir$) = 0 then
  827.         BadArgErr 1, "CreateDir", szDir$+", "+STR$(cmo%)
  828.     end if
  829. '$endif ''DEBUG
  830.     IF FCreateDir(szDir$, cmo%) = 0 THEN
  831. '$ifdef DEBUG
  832.         StfApiErr saeFail, "CreateDir", szDir$+", "+STR$(cmo%)
  833. '$endif ''DEBUG
  834.         ERROR STFERR
  835.     END IF
  836. END SUB
  837.  
  838.  
  839. '*************************************************************************
  840. SUB RemoveDir (szDir$, cmo%) STATIC
  841. '$ifdef DEBUG
  842.     if FValidFATDir(szDir$) = 0 then
  843.         BadArgErr 1, "RemoveDir", szDir$+", "+STR$(cmo%)
  844.     end if
  845. '$endif ''DEBUG
  846.     IF FRemoveDir(szDir$, cmo%) = 0 THEN
  847. '$ifdef DEBUG
  848.         StfApiErr saeFail, "RemoveDir", szDir$+", "+STR$(cmo%)
  849. '$endif ''DEBUG
  850.         ERROR STFERR
  851.     END IF
  852. END SUB
  853.  
  854.  
  855.  
  856. '*************************************************************************
  857. SUB RemoveIniSection (szFile$, szSect$, cmo%) STATIC
  858. '$ifdef DEBUG
  859.     if FValidIniFile(szFile$) = 0 then
  860.         n% = 1
  861.     elseif FValidInfSect(szSect$) = 0 then
  862.         n% = 2
  863.     else
  864.         n% = 0
  865.     end if
  866.     if n% > 0 then
  867.         BadArgErr n%, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  868.     end if
  869. '$endif ''DEBUG
  870.  
  871.     IF FRemoveIniSection(szFile$, szSect$, cmo%) = 0 THEN
  872. '$ifdef DEBUG
  873.         StfApiErr saeFail, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  874. '$endif ''DEBUG
  875.         ERROR STFERR
  876.     END IF
  877. END SUB
  878.  
  879.  
  880. '*************************************************************************
  881. SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  882. '$ifdef DEBUG
  883.     if FValidIniFile(szFile$) = 0 then
  884.         n% = 1
  885.     elseif FValidInfSect(szSect$) = 0 then
  886.         n% = 2
  887.     else
  888.         n% = 0
  889.     end if
  890.     if n% > 0 then
  891.         BadArgErr n%, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  892.     end if
  893. '$endif ''DEBUG
  894.  
  895.     IF FCreateIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  896. '$ifdef DEBUG
  897.         StfApiErr saeFail, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  898. '$endif ''DEBUG
  899.         ERROR STFERR
  900.     END IF
  901. END SUB
  902.  
  903.  
  904. '*************************************************************************
  905. SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%) STATIC
  906. '$ifdef DEBUG
  907.     if FValidIniFile(szFile$) = 0 then
  908.         n% = 1
  909.     elseif FValidInfSect(szSect$) = 0 then
  910.         n% = 2
  911.     elseif szKey$ = "" then
  912.         n% = 3
  913.     else
  914.         n% = 0
  915.     end if
  916.     if n% > 0 then
  917.         BadArgErr n%, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  918.     end if
  919. '$endif ''DEBUG
  920.  
  921.     IF FRemoveIniKey(szFile$, szSect$, szKey$, cmo%) = 0 THEN
  922. '$ifdef DEBUG
  923.         StfApiErr saeFail, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  924. '$endif ''DEBUG
  925.         ERROR STFERR
  926.     END IF
  927. END SUB
  928.  
  929.  
  930. '*************************************************************************
  931. SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  932. '$ifdef DEBUG
  933.     if FValidFATPath(szFile$) = 0 then
  934.         n% = 1
  935.     elseif FValidInfSect(szSect$) = 0 then
  936.         n% = 2
  937.     elseif szKey$ = "" then
  938.         n% = 3
  939.     else
  940.         n% = 0
  941.     end if
  942.     if n% > 0 then
  943.         BadArgErr n%, "CreateSysIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  944.     end if
  945. '$endif ''DEBUG
  946.  
  947.     IF FCreateSysIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  948. '$ifdef DEBUG
  949.         StfApiErr saeFail, "CreateSysIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  950. '$endif ''DEBUG
  951.         ERROR STFERR
  952.     END IF
  953. END SUB
  954.  
  955.  
  956. '*************************************************************************
  957. SUB CreateProgmanGroup (szGroup$, szPath$, cmo%) STATIC
  958. '$ifdef DEBUG
  959.     if szGroup$ = "" or len(szGroup$) > 24 then
  960.         BadArgErr 1, "CreateProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  961.     end if
  962. '$endif ''DEBUG
  963.     IF FCreateProgManGroup(szGroup$, szPath$, cmo%) = 0 THEN
  964. '$ifdef DEBUG
  965.         StfApiErr saeFail, "CreateProgmanGroup", szGroup$+", "+szPath$+", "+STR$(cmo%)
  966. '$endif ''DEBUG
  967.         ERROR STFERR
  968.     END IF
  969. END SUB
  970.  
  971.  
  972. '*************************************************************************
  973. SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%) STATIC
  974. '$ifdef DEBUG
  975.     if szGroup$ = "" or len(szGroup$) > 24 then
  976.         BadArgErr 1, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  977.     end if
  978. '$endif ''DEBUG
  979.     IF FShowProgManGroup(szGroup$, STR$(Cmd%), cmo%) = 0 THEN
  980. '$ifdef DEBUG
  981.         StfApiErr saeFail, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  982. '$endif ''DEBUG
  983.         ERROR STFERR
  984.     END IF
  985. END SUB
  986.  
  987.  
  988.  
  989. '*************************************************************************
  990. SUB DumpCopyList (szFile$) STATIC
  991. '$ifdef DEBUG
  992.     if szFile$ = "" then
  993.         BadArgErr 1, "DumpCopyList", szFile$
  994.     end if
  995. '$endif ''DEBUG
  996.     IF FDumpCopyListToFile (szFile$) = 0 THEN
  997. '$ifdef DEBUG
  998.         StfApiErr saeFail, "DumpCopyList", szFile$
  999. '$endif ''DEBUG
  1000.         ERROR STFERR
  1001.     END IF
  1002. END SUB
  1003.  
  1004.  
  1005. '*************************************************************************
  1006. SUB ClearCopyList STATIC
  1007.     ResetCopyList
  1008. END SUB
  1009.  
  1010.  
  1011. '*************************************************************************
  1012. FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) STATIC AS LONG
  1013.     lNeed& = LcbGetCopyListCost (szExtraList$, szCostList$, szNeedList$)
  1014.     IF lNeed& < 0 THEN
  1015. '$ifdef DEBUG
  1016.         StfApiErr saeFail, "GetCopyListCost", szExtraList$+", "+szCostList$+", "+szNeedList$
  1017. '$endif ''DEBUG
  1018.         ERROR STFERR
  1019.     END IF
  1020.     GetCopyListCost = lNeed&
  1021. END FUNCTION
  1022.  
  1023.  
  1024. '*************************************************************************
  1025. SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%) STATIC
  1026.     szItemNew$ = szItem$
  1027.     IF szOther$ <> "" THEN
  1028.         szItemNew$ = szItem$ + "," + szOther$
  1029.     END IF
  1030. '$ifdef DEBUG
  1031.     if szGroup$ = "" or len(szGroup$) > 24 then
  1032.         BadArgErr 1, "CreateProgmanItem", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1033.     end if
  1034. '$endif ''DEBUG
  1035.  
  1036.     IF FCreateProgManItem(szGroup$, szItemNew$, szCmd$, cmo%) = 0 THEN
  1037. '$ifdef DEBUG
  1038.         StfApiErr saeFail, "CreateProgmanItem", szGroup$+", "+szItem$+", "+szCmd$+", "+szOther$+", "+STR$(cmo%)
  1039. '$endif ''DEBUG
  1040.         ERROR STFERR
  1041.     END IF
  1042.     szItemNew$ = ""
  1043. END SUB
  1044.  
  1045.  
  1046.  
  1047.  
  1048. '*************************************************************************
  1049. SUB CopyFilesInCopyList STATIC
  1050.     grc% = GrcCopyFilesInCopyList (HinstFrame())
  1051.  
  1052.     IF grc% = grcUserQuit THEN
  1053.         ERROR STFQUIT
  1054.     ELSEIF grc% > 0 THEN
  1055. '$ifdef DEBUG
  1056.         StfApiErr saeFail, "CopyFilesInCopyList", ""
  1057. '$endif ''DEBUG
  1058.         ERROR STFERR
  1059.     END IF
  1060. END SUB
  1061.  
  1062.  
  1063. '*************************************************************************
  1064. SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%) STATIC
  1065. '$ifdef DEBUG
  1066.     if FValidFATPath(szFullPathSrc$) = 0 then
  1067.         n% = 1
  1068.     elseif FValidFATPath(szFullPathDst$) = 0 then
  1069.         n% = 2
  1070.     else
  1071.         n% = 0
  1072.     end if
  1073.     if n% > 0 then
  1074.         BadArgErr n%, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  1075.     end if
  1076. '$endif ''DEBUG
  1077.  
  1078.     IF  FCopyOneFile(szFullPathSrc$, szFullPathDst$, (cmo OR cmoCopy), fAppend%) = 0 THEN
  1079. '$ifdef DEBUG
  1080.         StfApiErr saeFail, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  1081. '$endif ''DEBUG
  1082.         ERROR STFERR
  1083.     END IF
  1084. END SUB
  1085.  
  1086.  
  1087.  
  1088. '*************************************************************************
  1089. SUB RemoveFile (szFullPathSrc$, cmo%) STATIC
  1090. '$ifdef DEBUG
  1091.     if FValidFATPath(szFullPathSrc$) = 0 then
  1092.         BadArgErr 1, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  1093.     end if
  1094. '$endif ''DEBUG
  1095.     IF  YnrcRemoveFile(szFullPathSrc$, cmo%) = ynrcNo THEN
  1096. '$ifdef DEBUG
  1097.         StfApiErr saeFail, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  1098. '$endif ''DEBUG
  1099.         ERROR STFERR
  1100.     END IF
  1101. END SUB
  1102.  
  1103.  
  1104. '*************************************************************************
  1105. SUB BackupFile (szFullPath$, szBackup$) STATIC
  1106. '$ifdef DEBUG
  1107.     if FValidFATPath(szFullPath$) = 0 then
  1108.         n% = 1
  1109.     elseif szBackup$ = "" then
  1110.         n% = 2
  1111.     else
  1112.         n% = 0
  1113.     end if
  1114.     if n% > 0 then
  1115.         BadArgErr n%, "BackupFile", szFullPath$+", "+szBackup$
  1116.     end if
  1117. '$endif ''DEBUG
  1118.  
  1119.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  1120. '$ifdef DEBUG
  1121.         StfApiErr saeFail, "BackupFile", szFullPath$+", "+szBackup$
  1122. '$endif ''DEBUG
  1123.         ERROR STFERR
  1124.     END IF
  1125. END SUB
  1126.  
  1127.  
  1128. '*************************************************************************
  1129. SUB RenameFile (szFullPath$, szBackup$) STATIC
  1130. '$ifdef DEBUG
  1131.     if FValidFATPath(szFullPath$) = 0 then
  1132.         n% = 1
  1133.     elseif szBackup$ = "" then
  1134.         n% = 2
  1135.     else
  1136.         n% = 0
  1137.     end if
  1138.     if n% > 0 then
  1139.         BadArgErr n%, "RenameFile", szFullPath$+", "+szBackup$
  1140.     end if
  1141. '$endif ''DEBUG
  1142.  
  1143.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  1144. '$ifdef DEBUG
  1145.         StfApiErr saeFail, "RenameFile", szFullPath$+", "+szBackup$
  1146. '$endif ''DEBUG
  1147.         ERROR STFERR
  1148.     END IF
  1149. END SUB
  1150.  
  1151.  
  1152. '*************************************************************************
  1153. SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$) STATIC
  1154. '$ifdef DEBUG
  1155.     if FValidInfSect(szSect$) = 0 then
  1156.         n% = 1
  1157.     elseif FValidFATDir(szSrc$) = 0 then
  1158.         n% = 2
  1159.     elseif FValidFATDir(szDest$) = 0 then
  1160.         n% = 3
  1161.     else
  1162.         n% = 0
  1163.     end if
  1164.     if n% > 0 then
  1165.         BadArgErr n%, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  1166.     end if
  1167. '$endif ''DEBUG
  1168.  
  1169.     IF FAddSectionFilesToCopyList (szSect$, szSrc$, szDest$) = 0 THEN
  1170. '$ifdef DEBUG
  1171.         StfApiErr saeFail, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  1172. '$endif ''DEBUG
  1173.         ERROR STFERR
  1174.     END IF
  1175. END SUB
  1176.  
  1177.  
  1178. '*************************************************************************
  1179. SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  1180. '$ifdef DEBUG
  1181.     if FValidInfSect(szSect$) = 0 then
  1182.         n% = 1
  1183.     elseif szKey$ = "" then
  1184.         n% = 2
  1185.     elseif FValidFATDir(szSrc$) = 0 then
  1186.         n% = 3
  1187.     elseif FValidFATDir(szDest$) = 0 then
  1188.         n% = 4
  1189.     else
  1190.         n% = 0
  1191.     end if
  1192.     if n% > 0 then
  1193.         BadArgErr n%, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1194.     end if
  1195. '$endif ''DEBUG
  1196.  
  1197.     IF FAddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  1198. '$ifdef DEBUG
  1199.         StfApiErr saeFail, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1200. '$endif ''DEBUG
  1201.         ERROR STFERR
  1202.     END IF
  1203. END SUB
  1204.  
  1205.  
  1206.  
  1207.  
  1208. '*************************************************************************
  1209. SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&) STATIC
  1210. '$ifdef DEBUG
  1211.     if szDll$ = "" then
  1212.         n% = 1
  1213.     elseif idDlg% = 0 then
  1214.         n% = 2
  1215.     elseif szProc$ = "" then
  1216.         n% = 3
  1217.     elseif lTicks& <= 0 then
  1218.         n% = 4
  1219.     else
  1220.         n% = 0
  1221.     end if
  1222.     if n% > 0 then
  1223.         BadArgErr n%, "AddToBillboardList", szDll$+", "+STR$(idDlg%)+", "+szProc$+", "+STR$(lTicks&)
  1224.     end if
  1225. '$endif ''DEBUG
  1226.  
  1227.     IF FAddToBillboardList(szDll$, idDlg%, szProc$, lTicks&) = 0 THEN
  1228. '$ifdef DEBUG
  1229.         StfApiErr saeFail, "AddToBillboardList", szDll$+", "+STR$(idDlg%)+", "+szProc$+", "+STR$(lTicks&)
  1230. '$endif ''DEBUG
  1231.         ERROR STFERR
  1232.     END IF
  1233. END SUB
  1234.  
  1235.  
  1236. '*************************************************************************
  1237. SUB AddBlankToBillboardList (lTicks&) STATIC
  1238. '$ifdef DEBUG
  1239.     if lTicks& <= 0 then
  1240.         BadArgErr 1, "AddBlankToBillboardList", STR$(lTicks&)
  1241.     end if
  1242. '$endif ''DEBUG
  1243.     IF FAddToBillboardList(NULL, 0, NULL, lTicks&) = 0 THEN
  1244. '$ifdef DEBUG
  1245.         StfApiErr saeFail, "AddBlankToBillboardList", STR$(lTicks&)
  1246. '$endif ''DEBUG
  1247.         ERROR STFERR
  1248.     END IF
  1249. END SUB
  1250.  
  1251.  
  1252. '*************************************************************************
  1253. SUB ClearBillboardList STATIC
  1254.     IF FClearBillboardList = 0 THEN
  1255. '$ifdef DEBUG
  1256.         StfApiErr saeFail, "ClearBillboardList", ""
  1257. '$endif ''DEBUG
  1258.         ERROR STFERR
  1259.     END IF
  1260. END SUB
  1261.  
  1262.  
  1263. '*************************************************************************
  1264. SUB OpenLogFile (szFile$, fAppend%) STATIC
  1265. '$ifdef DEBUG
  1266.     if FValidFATPath(szFile$) = 0 then
  1267.         BadArgErr 1, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  1268.     end if
  1269. '$endif ''DEBUG
  1270.     IF FOpenLogFile(szFile$, fAppend%) = 0 THEN
  1271. '$ifdef DEBUG
  1272.         StfApiErr saeFail, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  1273. '$endif ''DEBUG
  1274.         ERROR STFERR
  1275.     END IF
  1276. END SUB
  1277.  
  1278.  
  1279. '*************************************************************************
  1280. SUB CloseLogFile STATIC
  1281.     IF FCloseLogFile() = 0 THEN
  1282. '$ifdef DEBUG
  1283.         StfApiErr saeFail, "CloseLogFile", ""
  1284. '$endif ''DEBUG
  1285.         ERROR STFERR
  1286.     END IF
  1287. END SUB
  1288.  
  1289.  
  1290. '*************************************************************************
  1291. SUB WriteToLogFile (szStr$) STATIC
  1292.     IF FWriteToLogFile(szStr$, 1) = 0 THEN
  1293. '$ifdef DEBUG
  1294.         StfApiErr saeFail, "WriteToLogFile", szStr$
  1295. '$endif ''DEBUG
  1296.         ERROR STFERR
  1297.     END IF
  1298. END SUB
  1299.  
  1300.  
  1301. ''' -1 in either parameter will mean 'center in frame client area'
  1302. '*************************************************************************
  1303. SUB SetCopyGaugePosition (x%, y%) STATIC
  1304.     ProSetPos x%, y%
  1305. END SUB
  1306.  
  1307.  
  1308.  
  1309. '*************************************************************************
  1310. FUNCTION IsDirWritable (szDir$) STATIC AS INTEGER
  1311.     IsDirWritable = FIsDirWritable(szDir$)
  1312. END FUNCTION
  1313.  
  1314.  
  1315. '*************************************************************************
  1316. FUNCTION IsFileWritable (szFile$) STATIC AS INTEGER
  1317. '$ifdef DEBUG
  1318.     if FValidFATDir(szFile$) = 0 then
  1319.         BadArgErr 1, "IsFileWritable", szFile$
  1320.     end if
  1321. '$endif ''DEBUG
  1322.     IsFileWritable = FIsFileWritable(szFile$)
  1323. END FUNCTION
  1324.  
  1325.  
  1326. '*************************************************************************
  1327. FUNCTION GetNthFieldFromIniString (szLine$, iField%) STATIC AS STRING
  1328.     IF iField% < 1 THEN
  1329. '$ifdef DEBUG
  1330.         StfApiErr saeFail, "GetNthFieldFromIniString", szLine$+", "+STR$(iField%)
  1331. '$endif ''DEBUG
  1332.         ERROR STFERR
  1333.     END IF
  1334.     szStart$ = szLine$
  1335.     IF iField% <> 1 THEN
  1336.         FOR i% = 2 TO iField% STEP 1
  1337.             iNew% = INSTR(szStart$, ",")
  1338.             IF iNew% = 0 THEN
  1339.                 GetNthFieldFromIniString = ""
  1340.                 GOTO _GNFFIS_END
  1341.             END IF
  1342.             szStart$ = MID$(szStart$, (iNew% + 1))
  1343.         NEXT
  1344.     END IF
  1345.  
  1346.     iNew% = INSTR(szStart$, ",")
  1347.     IF iNew% <> 0 THEN
  1348.         szStart$ = MID$(szStart$, 1, (iNew% - 1))
  1349.     END IF
  1350.  
  1351.     GetNthFieldFromIniString = LTRIM$(RTRIM$(szStart$))
  1352.  
  1353. _GNFFIS_END:
  1354.  
  1355. END FUNCTION
  1356.  
  1357.  
  1358. '*************************************************************************
  1359. FUNCTION GetWindowsMajorVersion STATIC AS INTEGER
  1360.     GetWindowsMajorVersion = GetVersion() MOD 256
  1361. END FUNCTION
  1362.  
  1363.  
  1364. '*************************************************************************
  1365. FUNCTION GetWindowsMinorVersion STATIC AS INTEGER
  1366.     GetWindowsMinorVersion = GetVersion() / 256
  1367. END FUNCTION
  1368.  
  1369.  
  1370.  
  1371. '*************************************************************************
  1372. FUNCTION GetWindowsDir STATIC AS STRING
  1373.     szBuf$ = string$(256, 32)
  1374.     cbBuf% = GetWindowsDirectory(szBuf$, 256)
  1375.  
  1376.     IF cbBuf% = 0 THEN
  1377.         GetWindowsDir = ""
  1378. '$ifdef DEBUG
  1379.         StfApiErr saeFail, "GetWindowsDir", ""
  1380. '$endif ''DEBUG
  1381.         ERROR STFERR
  1382.     ELSE
  1383.         IF cbBuf% > 255 THEN
  1384.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1385.             ERROR STFERR
  1386.         END IF
  1387.         szBuf$ = RTRIM$(szBuf$)
  1388.         IF MID$(szBuf$, 1, 1) = "\" THEN
  1389.             'szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1390.             szBuf$ = MID$(GetWindowsSysDir, 1, 2) + szBuf$
  1391.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1392.             szBuf$ = MID$(GetWindowsSysDir, 1, 3) + szBuf$
  1393.         END IF
  1394.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  1395.             szBuf$ = szBuf$ + "\"
  1396.         END IF
  1397.         GetWindowsDir = szBuf$
  1398.     END IF
  1399.  
  1400.     szBuf$ = ""
  1401. END FUNCTION
  1402.  
  1403.  
  1404. '*************************************************************************
  1405. FUNCTION GetWindowsSysDir STATIC AS STRING
  1406.     szBuf$ = string$(256, 32)
  1407.     cbBuf% = GetSystemDirectory(szBuf$, 256)
  1408.  
  1409.     IF cbBuf% = 0 THEN
  1410. '$ifdef DEBUG
  1411.         StfApiErr saeFail, "GetWindowsSysDir", ""
  1412. '$endif ''DEBUG
  1413.         ERROR STFERR
  1414.     ELSE
  1415.         IF cbBuf% > 255 THEN
  1416.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1417.             ERROR STFERR
  1418.         END IF
  1419.         szBuf$ = RTRIM$(szBuf$)
  1420.         IF MID$(szBuf$, 1, 1) = "\" THEN
  1421.             szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1422.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1423.             szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  1424.         END IF
  1425.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  1426.             szBuf$ = szBuf$ + "\"
  1427.         END IF
  1428.         GetWindowsSysDir = szBuf$
  1429.     END IF
  1430.  
  1431.     szBuf$ = ""
  1432. END FUNCTION
  1433.  
  1434.  
  1435.  
  1436. '*************************************************************************
  1437. FUNCTION GetScreenWidth STATIC AS INTEGER
  1438.     GetScreenWidth = GetSystemMetrics(SM_CXSCREEN)
  1439. END FUNCTION
  1440.  
  1441.  
  1442. '*************************************************************************
  1443. FUNCTION GetScreenHeight STATIC AS INTEGER
  1444.     GetScreenHeight = GetSystemMetrics(SM_CYSCREEN)
  1445. END FUNCTION
  1446.  
  1447.  
  1448.  
  1449. '*************************************************************************
  1450. SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%) STATIC
  1451.  
  1452. '$ifdef DEBUG
  1453.     if (FValidFATPath(szSrc$) = 0) AND (szSrc$ <> "") then
  1454.         n% = 1
  1455.     elseif FValidFATPath(szDst$) = 0 then
  1456.         n% = 2
  1457.     elseif FValidFATDir(szDir$) = 0 then
  1458.         n% = 3
  1459.     else
  1460.         n% = 0
  1461.     end if
  1462.     if n% > 0 then
  1463.         BadArgErr n%, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1464.     end if
  1465. '$endif ''DEBUG
  1466.  
  1467.     IF FPrependToPath (szSrc$, szDst$, szDir$, cmo%) = 0 THEN
  1468. '$ifdef DEBUG
  1469.         StfApiErr saeFail, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1470. '$endif ''DEBUG
  1471.         ERROR STFERR
  1472.     END IF
  1473. END SUB
  1474.  
  1475.  
  1476.  
  1477. '**************************************************************************
  1478. '***************************  Error Handlers  *****************************
  1479. '**************************************************************************
  1480.  
  1481.  
  1482. '$ifdef DEBUG
  1483. '**************************************************************************
  1484. SUB StfApiErr (nMsg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1485.     select case nMsg%
  1486.         case saeFail
  1487.             lpText$ = "Failed"
  1488.         case saeInit
  1489.             lpText$ = "Already Initialized"
  1490.         case saeNYI
  1491.             lpText$ = "NYI"
  1492.         case else
  1493.             lpText$ = "Bad Arg "+LTRIM$(STR$(nMsg% - saeArg))
  1494.     end select
  1495.  
  1496.     lpText$ = lpText$ + ": "+ szApi$
  1497.     if szArgs$ <> "" then
  1498.         lpText$ = lpText + " (" + szArgs$ + ")"
  1499.     end if
  1500.     lpCaption$ = "MS-Setup Toolkit API Error"
  1501.     res% = DoMsgBox(lpText$, lpCaption$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  1502.     print lpText$
  1503.     lpText$ = ""
  1504.     lpCaption$ = ""
  1505. END SUB
  1506.  
  1507. '**************************************************************************
  1508. SUB BadArgErr (nArg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1509.     StfApiErr nArg%+saeArg, szApi$, szArgs$
  1510.     ERROR STFERR
  1511. END SUB
  1512.  
  1513.  
  1514. '** REVIEW: Move this function into common lib (we'll need it there too)
  1515. '**************************************************************************
  1516. FUNCTION FValidInfSect (szSect$) STATIC AS INTEGER
  1517.     if (szSect$ = "") OR (INSTR(1,szSect$,"]") <> 0) then
  1518.         FValidInfSect = 0
  1519.     else
  1520.         FValidInfSect = 1
  1521.     end if
  1522. END FUNCTION
  1523.  
  1524.  
  1525. '** REVIEW: Move this function into common lib (we'll need it there too)
  1526. '**************************************************************************
  1527. FUNCTION FValidIniFile (szFile$) STATIC AS INTEGER
  1528.     if (FValidFATPath(szFile$) = 0) AND (UCASE$(szFile$) <> "WIN.INI") then
  1529.         FValidIniFile = 0
  1530.     else
  1531.         FValidIniFile = 1
  1532.     end if
  1533. END FUNCTION
  1534.  
  1535. '**************************************************************************
  1536. FUNCTION FValidDrive (szDrive$) STATIC AS INTEGER
  1537.  
  1538.     if szDrive$ = "" then
  1539.         FValidDrive = 0
  1540.     elseif INSTR(1,szDrive$,"\\") = 1 then   ' UNC path
  1541.         FValidDrive = 1
  1542.     elseif ASC(UCASE$(szDrive$)) - ASC("A") < 0 then
  1543.         FValidDrive = 0
  1544.     elseif ASC(UCASE$(szDrive$)) - ASC("A") > 25 then
  1545.         FValidDrive = 0
  1546.     elseif LEN(szDrive$) = 1 then
  1547.         FValidDrive = 1
  1548.     elseif INSTR(2,szDrive$,":\") = 2 then
  1549.         FValidDrive = 1
  1550.     elseif INSTR(1,szDrive$,":") = 2 then
  1551.         FValidDrive = 1
  1552.     else
  1553.         FValidDrive = 0
  1554.     end if
  1555. END FUNCTION
  1556.  
  1557. '$endif ''DEBUG
  1558.  
  1559.  
  1560. TRAP CleanupTrap From "MSSHLSTF.DLL"
  1561.  
  1562. End Trap
  1563.  
  1564. hSetup = InitSetup(COMMAND$)
  1565.  
  1566. ON ERROR GOTO QUIT
  1567.  
  1568.