home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1996 July / VPR9607B.BIN / driver / wacom / tddv224j / setup / setupapi.in_ / setupapi.in
Text File  |  1995-09-14  |  59KB  |  1,862 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_CPU186   = &H0080 '   128
  12. CONST WF_CPU286   = &H0002 '     2
  13. CONST WF_CPU386   = &H0004 '     4
  14. CONST WF_CPU486   = &H0008 '     8
  15. CONST WF_80x87    = &H0400 '  1024
  16. CONST WF_STANDARD = &H0010 '    16
  17. CONST WF_ENHANCED = &H0020 '    32
  18. CONST WF_NT       = &H4000 ' 16384
  19.  
  20. CONST HKEY_CLASSES_ROOT     = &H80000000
  21. CONST HKEY_CURRENT_USER     = &H80000001
  22. CONST HKEY_LOCAL_MACHINE    = &H80000002
  23. CONST HKEY_USERS            = &H80000003
  24. CONST HKEY_PERFORMANCE_DATA = &H80000004
  25. CONST HKEY_CURRENT_CONFIG   = &H80000005
  26. CONST HKEY_DYN_DATA         = &H80000006
  27.  
  28. CONST REG_SZ     = 1
  29. CONST REG_BINARY = 3
  30. CONST REG_DWORD  = 4
  31.  
  32. CONST ERROR_SUCCESS        =   0
  33. CONST ERROR_FILE_NOT_FOUND =   2
  34. CONST ERROR_NO_MORE_ITEMS  = 259
  35.  
  36. '' DoMsgBox Flags
  37.  
  38. CONST MB_OK              = &H0000 '    0
  39. CONST MB_YESNO           = &H0004 '    4
  40. CONST MB_ICONHAND        = &H0010 '   16
  41. CONST MB_ICONQUESTION    = &H0020 '   32
  42. CONST MB_ICONEXCLAMATION = &H0030 '   48
  43. CONST MB_ICONASTERISK    = &H0040 '   64
  44. CONST MB_TASKMODAL       = &H2000 ' 8192
  45.  
  46. DECLARE FUNCTION DoMsgBox LIB "mscomstf.dll" (lpText$, lpCaption$, wType%) As INTEGER
  47. DECLARE FUNCTION GetWindowsDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  48. DECLARE FUNCTION GetSystemDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  49. DECLARE FUNCTION GetProfileString LIB "kernel" (szSect$, szKey$, szDefault$, szBuf$, cbBuf%) AS INTEGER
  50. DECLARE FUNCTION GetVersion LIB "kernel" AS INTEGER
  51. DECLARE FUNCTION GetSystemMetrics LIB "user" (nIndex%) AS INTEGER
  52. DECLARE FUNCTION GetWinFlags LIB "kernel" AS LONG
  53. DECLARE FUNCTION WinExec LIB "kernel" (szComand$, nShow%) AS INTEGER
  54. DECLARE FUNCTION GetPrivateProfileString LIB "kernel" (szSect$, szKey$, szDefault$, szBuf$, cbBuf%, szFile$) AS INTEGER
  55. DECLARE FUNCTION WritePrivateProfileString LIB "kernel" (szSect$, szKey$, szString$, szFile$) AS INTEGER
  56. DECLARE FUNCTION RegCloseKey    LIB "shell" (hKey&) AS LONG
  57. DECLARE FUNCTION RegCreateKey   LIB "shell" (hKey&, szSubKey$, hkResult AS POINTER TO LONG) AS LONG
  58. DECLARE FUNCTION RegDeleteKey   LIB "shell" (hKey&, szSubKey$) AS LONG
  59. DECLARE FUNCTION RegDeleteValue LIB "shell" (hKey&, szSubKey$) AS LONG
  60. DECLARE FUNCTION RegEnumKey     LIB "shell" (hKey&, iSubKey&, szName$, chName&) AS LONG
  61. DECLARE FUNCTION RegFlushKey    LIB "shell" (hKey&) AS LONG
  62. DECLARE FUNCTION RegOpenKey     LIB "shell" (hKey&, szSubKey$, hkResult AS POINTER TO LONG) AS LONG
  63. DECLARE FUNCTION RegQueryValue  LIB "shell" (hKey&, szSubKey$, szValue$, cbValue AS POINTER TO LONG) AS LONG
  64. DECLARE FUNCTION RegSetValue    LIB "shell" (hKey&, szSubKey$, dwType&, szData$, cbData&) AS LONG
  65. DECLARE FUNCTION RegSetValueEx  LIB "shell" (hKey&, szSubKey$, Reserved&, dwType&, cbValue AS POINTER TO LONG, cbData&) AS LONG
  66.  
  67.  
  68. '**************************************************************************
  69. '****************************** Setup Constants ***************************
  70. '**************************************************************************
  71.  
  72.  
  73. ''Command Option Flags
  74.  
  75. CONST cmoNone        = 0
  76. CONST cmoVital       = 1
  77. CONST cmoCopy        = 2
  78. CONST cmoUndo        = 4
  79. CONST cmoRoot        = 8
  80. CONST cmoDecompress  = 16
  81. CONST cmoTimeStamp   = 32
  82. CONST cmoReadOnly    = 64
  83. CONST cmoBackup      = 128
  84. CONST cmoForce       = 256
  85. CONST cmoRemove      = 512
  86. CONST cmoOverwrite   = 1024
  87. CONST cmoAppend      = 2048
  88. CONST cmoPrepend     = 4096
  89. CONST cmoAll         = 65535
  90.  
  91.  
  92. ''File Exist Modes
  93.  
  94. CONST femExists     = 0
  95. CONST femRead       = 1
  96. CONST femWrite      = 2
  97. CONST femReadWrite  = 3
  98.  
  99.  
  100. ''Read-Only Return Code
  101.  
  102. CONST ynrcNo         = 0
  103. CONST ynrcYes        = 1
  104. CONST ynrcErr1       = 2
  105. CONST ynrcErr2       = 3
  106. CONST ynrcErr3       = 4
  107. CONST ynrcErr4       = 5
  108. CONST ynrcErr5       = 6
  109. CONST ynrcErr6       = 7
  110. CONST ynrcErr7       = 8
  111. CONST ynrcErr8       = 9
  112. CONST ynrcErr9       = 10
  113.  
  114.  
  115. ''General Return Codes
  116.  
  117. CONST grcOkay       = 0
  118. CONST grcNotOkay    = 1
  119. CONST grcUserQuit   = 48
  120.  
  121.  
  122. ''Ranges
  123.  
  124. ''CONST cbSymValMax = 8192
  125. CONST cbSymValMax = 512
  126.     ''REVIEW: symbol table will allow strings up to 8192 bytes
  127.     '' but we get Out of String Space wattdrvr error if we alloc
  128.     '' STRING$() that big. (See GetSymbolValue and GetListItem)
  129.     '' We should look into using dynamic far alloc instead of
  130.     '' STRING$ for large buffers.
  131.     '' NOTE: 8192 works okay with runtime wattdrvr, however.
  132.  
  133.  
  134. ''ON ERROR Error Codes
  135. CONST STFERR      = 1024   ''setup system error
  136. CONST STFQUIT     = 1025   ''user quit
  137.  
  138. CONST scmOff      = 0
  139. CONST scmOnIgnore = 1
  140. CONST scmOnFatal  = 2
  141.  
  142.  
  143. '**************************************************************************
  144. '********************************  Setup API's  ***************************
  145. '**************************************************************************
  146.  
  147. '' common
  148.  
  149. DECLARE FUNCTION FParseFATPathIntoPieces LIB "mscomstf.dll" (szPath$, szVol$, cbVol%, szDir$, cbDir%, szFile$, cbFile%) AS INTEGER
  150. DECLARE FUNCTION FOpenInf LIB "mscomstf.dll" (szFile$, fCheck%, fCheckSyms%) AS INTEGER
  151. DECLARE FUNCTION FSetSilent LIB "mscomstf.dll" (mode%) AS INTEGER
  152. DECLARE FUNCTION FSetBeepingMode LIB "mscomstf.dll" (mode%) AS INTEGER
  153. DECLARE FUNCTION HShowWaitCursor LIB "msshlstf.dll" AS INTEGER
  154. DECLARE FUNCTION FRestoreCursor  LIB "msshlstf.dll" (hPrev%) AS INTEGER
  155. DECLARE FUNCTION FOpenLogFile    LIB "mscomstf.dll" (szFile$, fAppend%) AS INTEGER
  156. DECLARE FUNCTION FCloseLogFile   LIB "mscomstf.dll" AS INTEGER
  157. DECLARE FUNCTION FWriteToLogFile LIB "mscomstf.dll" (sz$, fRequire%) AS INTEGER
  158. DECLARE FUNCTION CbGetInfSectionKeyField LIB "mscomstf.dll" (szSect$, szKey$, iField%, szBuf$, cbBuf%) AS INTEGER
  159. DECLARE FUNCTION FMakeListInfSectionField LIB "mscomstf.dll" (szSym$, szSect$, iField%) AS INTEGER
  160.  
  161.  
  162. ''shell
  163.  
  164. DECLARE FUNCTION FSetBitmap LIB "msshlstf.dll" (szDll$, Bitmap%) AS INTEGER
  165. DECLARE FUNCTION FSetAbout LIB "msshlstf.dll" (szAbout1$, szAbout2$) AS INTEGER
  166. DECLARE FUNCTION FDoDialog LIB "msuilstf.dll" (hwnd%, szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS INTEGER
  167. DECLARE FUNCTION FKillNDialogs LIB "msuilstf.dll" (n%) AS INTEGER
  168. DECLARE SUB      SetWindowText LIB "User" (hwnd%, lpString$)
  169. DECLARE FUNCTION FSetSymbolValue LIB "msshlstf.dll" (szSymbol$, szValue$) AS INTEGER
  170. DECLARE FUNCTION FRemoveSymbol LIB "mscomstf.dll" (szSym$) AS INTEGER
  171. DECLARE FUNCTION CbGetSymbolValue LIB "mscomstf.dll" (szSymbol$, szValue$, Length%) AS INTEGER
  172. DECLARE FUNCTION UsGetListLength LIB "mscomstf.dll" (szSymbol$) AS INTEGER
  173. DECLARE FUNCTION CbGetListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$, cbMax%) AS INTEGER
  174. DECLARE FUNCTION FAddListItem LIB "mscomstf.dll" (szListSymbol$, szListItem$) AS INTEGER
  175. DECLARE FUNCTION FReplaceListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$) AS INTEGER
  176. DECLARE FUNCTION FSetSymbolToListOfInfKeys LIB "mscomstf.dll" (szSym$, szSect$, fNulls%) AS INTEGER
  177.  
  178.  
  179. ''shell
  180.  
  181. DECLARE FUNCTION InitializeFrame LIB "msshlstf.dll" (szCmdLine$) AS INTEGER
  182. DECLARE FUNCTION HwndFrame LIB "msshlstf.dll" AS INTEGER
  183. DECLARE FUNCTION HinstFrame LIB "msshlstf.dll" AS INTEGER
  184.  
  185.  
  186.  
  187. ''install
  188.  
  189. DECLARE SUB      ProSetPos LIB "msinsstf.dll" (x%, y%)
  190. DECLARE FUNCTION FCreateDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  191. DECLARE FUNCTION FRemoveDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  192. DECLARE FUNCTION FAddSectionFilesToCopyList LIB "mscomstf.dll" (szSect$, szSrc$, szDest$) AS INTEGER
  193. DECLARE FUNCTION FAddSectionKeyFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  194. DECLARE FUNCTION FAddSpecialFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  195. DECLARE FUNCTION GrcCopyFilesInCopyList LIB "msinsstf.dll" (hInstance%) AS INTEGER
  196. DECLARE FUNCTION FRemoveIniSection LIB "msinsstf.dll" (szFile$, szSect$, cmo%) AS INTEGER
  197. DECLARE FUNCTION FCreateIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  198. DECLARE FUNCTION FRemoveIniKey LIB "msinsstf.dll" (szFile$, szSect$, szKey$, cmo%) AS INTEGER
  199. DECLARE FUNCTION FCreateSysIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  200. DECLARE FUNCTION FCreateProgManGroup LIB "msinsstf.dll" (szGroup$, szPath$, cmo%) AS INTEGER
  201. DECLARE FUNCTION FCreateProgManItem LIB "msinsstf.dll" (szGroup$, szItem$, szCmd$, cmo%) AS INTEGER
  202. DECLARE FUNCTION FShowProgManGroup LIB "msinsstf.dll" (szGroup$, szCmd$, cmo%) AS INTEGER
  203. DECLARE FUNCTION FStampResource LIB "msinsstf.dll" (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) AS INTEGER
  204. DECLARE FUNCTION FDumpCopyListToFile LIB "msinsstf.dll" (szFile$) AS INTEGER
  205. DECLARE SUB      ResetCopyList LIB "msinsstf.dll"
  206. DECLARE FUNCTION LcbGetCopyListCost LIB "msinsstf.dll" (szExtraList$, szCostList$, szNeedList$) AS LONG
  207. DECLARE FUNCTION FAddDos5Help LIB "msinsstf.dll" (szProgName$, szProgHelp$, cmo%) AS INTEGER
  208. DECLARE FUNCTION FCopyOneFile LIB "msinsstf.dll" (szSrc$, szDest$, cmo%, fAppend%) AS INTEGER
  209. DECLARE FUNCTION YnrcRemoveFile LIB "msinsstf.dll" (szFullPathSrc$, cmo%) AS INTEGER
  210. DECLARE FUNCTION YnrcBackupFile LIB "msinsstf.dll" (szFullPath$, szBackup$, cmo%) AS INTEGER
  211. DECLARE FUNCTION FInitializeInstall LIB "msinsstf.dll" (hinst%, hwndFrame%) AS INTEGER
  212. DECLARE FUNCTION WFindFileUsingFileOpen LIB "msinsstf.dll" (szFile$, szBuf$, cbBuf%) AS INTEGER
  213. DECLARE FUNCTION FIsDirWritable LIB "msinsstf.dll" (szDir$) AS INTEGER
  214. DECLARE FUNCTION FIsFileWritable LIB "msinsstf.dll" (szFile$) AS INTEGER
  215. DECLARE FUNCTION FAddToBillboardList LIB "msinsstf.dll" (szDll$, idDlg%, szProc$, lTicks&) AS INTEGER
  216. DECLARE FUNCTION FClearBillboardList LIB "msinsstf.dll" AS INTEGER
  217. DECLARE FUNCTION FSetRestartDir LIB "msinsstf.dll" (szDir$) AS INTEGER
  218. DECLARE FUNCTION FRestartListEmpty LIB "msinsstf.dll" AS INTEGER
  219. DECLARE FUNCTION FExitExecRestart LIB "msinsstf.dll" AS INTEGER
  220. DECLARE FUNCTION SetCopyMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  221. DECLARE FUNCTION GetCopyMode LIB "msinsstf.dll" AS INTEGER
  222. DECLARE FUNCTION SetDecompMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  223. DECLARE FUNCTION GetDecompMode LIB "msinsstf.dll" AS INTEGER
  224. DECLARE FUNCTION SetSizeCheckMode LIB "msinsstf.dll" (scmMode%) AS INTEGER
  225. DECLARE FUNCTION FPrependToPath LIB "msinsstf.dll" (szSrc$, szDst$, szDir$, cmo%) AS INTEGER
  226.  
  227. DECLARE FUNCTION SetTimeValue LIB "msinsstf.dll" (usHours%, usMinutes%, usSeconds%) AS INTEGER
  228.  
  229.  
  230.  
  231. '*************************************************************************
  232. '****************  Setup Basic Wrapper Declarations  *********************
  233. '*************************************************************************
  234.  
  235.  
  236. ''shell
  237.  
  238. DECLARE SUB      SetBitmap(szDll$, Bitmap%)
  239. DECLARE SUB      SetAbout(szAbout1$, szAbout2$)
  240. DECLARE FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS STRING
  241. DECLARE SUB      UIPop (n%)
  242. DECLARE SUB      UIPopAll
  243. DECLARE SUB      SetTitle (sz$)
  244. DECLARE SUB      ReadInfFile (szFile$)
  245. DECLARE SUB      SetSymbolValue (szSymbol$, szValue$)
  246. DECLARE SUB      RemoveSymbol (szSym$)
  247. DECLARE FUNCTION GetSymbolValue (szSymbol$) AS STRING
  248. DECLARE FUNCTION GetListLength(szSymbol$) AS INTEGER
  249. DECLARE SUB      MakeListFromSectionKeys (szSymbol$, szSect$)
  250. DECLARE FUNCTION GetListItem(szSymbol$, n%) AS STRING
  251. DECLARE SUB      AddListItem(szSymbol$, szItem$)
  252. DECLARE SUB      ReplaceListItem(szSymbol$, n%, szItem$)
  253.  
  254. DECLARE FUNCTION InitFrame (szCmdLine$) AS INTEGER
  255. DECLARE FUNCTION InitSetup (szCmdLine$) AS INTEGER
  256.  
  257. DECLARE FUNCTION ShowWaitCursor AS INTEGER
  258. DECLARE SUB      RestoreCursor (hPrev%)
  259.  
  260. DECLARE FUNCTION SetBeepingMode (mode%) AS INTEGER
  261. DECLARE FUNCTION SetSilentMode (mode%) AS INTEGER
  262.  
  263. DECLARE FUNCTION GetSectionKeyDate (szSect$, szKey$) AS STRING
  264. DECLARE FUNCTION GetSectionKeyFilename (szSect$, szKey$) AS STRING
  265. DECLARE FUNCTION GetSectionKeySize (szSect$, szKey$) AS LONG
  266. DECLARE FUNCTION GetSectionKeyVersion (szSect$, szKey$) AS STRING
  267.  
  268. DECLARE SUB      MakeListFromSectionDate (szSym$, szSect$)
  269. DECLARE SUB      MakeListFromSectionFilename (szSym$, szSect$)
  270. DECLARE SUB      MakeListFromSectionSize (szSym$, szSect$)
  271. DECLARE SUB      MakeListFromSectionVersion (szSym$, szSect$)
  272.  
  273.  
  274. ''install
  275.  
  276.  
  277. DECLARE SUB      CreateDir (szDir$, cmo%)
  278. DECLARE SUB      RemoveDir (szDir$, cmo%)
  279. DECLARE SUB      AddSectionFilesToCopyList (szSect$, szSrc$, szDest$)
  280. DECLARE SUB      AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  281. DECLARE SUB      AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  282. DECLARE SUB      CopyFilesInCopyList
  283. DECLARE SUB      RemoveIniSection (szFile$, szSect$, cmo%)
  284. DECLARE SUB      CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  285. DECLARE SUB      RemoveIniKey (szFile$, szSect$, szKey$, cmo%)
  286. DECLARE SUB      CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  287. DECLARE SUB      CreateProgmanGroup (szGroup$, szPath$, cmo%)
  288. DECLARE SUB      CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%)
  289. DECLARE SUB      ShowProgmanGroup (szGroup$, Cmd%, cmo%)
  290. DECLARE SUB      StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%)
  291. DECLARE SUB      DumpCopyList (szFile$)
  292. DECLARE SUB      ClearCopyList
  293. DECLARE FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) AS LONG
  294. DECLARE SUB      AddDos5Help (szProgName$, szProgHelp$, cmo%)
  295. DECLARE SUB      CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%)
  296. DECLARE SUB      RemoveFile (szFullPathSrc$, cmo%)
  297. DECLARE SUB      BackupFile (szFullPath$, szBackup$)
  298. DECLARE SUB      RenameFile (szFullPath$, szBackup$)
  299. DECLARE SUB      InitInstall
  300. DECLARE SUB      AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&)
  301. DECLARE SUB      AddBlankToBillboardList (lTicks&)
  302. DECLARE SUB      ClearBillboardList
  303. DECLARE SUB      OpenLogFile (szFile$, fAppend%)
  304. DECLARE SUB      CloseLogFile
  305. DECLARE SUB      WriteToLogFile (szStr$)
  306. DECLARE SUB      SetCopyGaugePosition (x%, y%)
  307. DECLARE SUB      SetRestartDir(szDir$)
  308. DECLARE FUNCTION RestartListEmpty AS INTEGER
  309. DECLARE FUNCTION ExitExecRestart AS INTEGER
  310. DECLARE FUNCTION FindFileUsingFileOpen (szFile$) AS STRING
  311. DECLARE FUNCTION IsDirWritable (szDir$) AS INTEGER
  312. DECLARE FUNCTION IsFileWritable (szFile$) AS INTEGER
  313. DECLARE FUNCTION GetNthFieldFromIniString (szLine$, iField%) AS STRING
  314. DECLARE SUB      PrependToPath (szSrc$, szDst$, szDir$, cmo%)
  315.  
  316.  
  317. '' Error Handling
  318.  
  319. '$ifdef DEBUG
  320.  
  321. '' Setup API Errors
  322. CONST saeFail   = 0
  323. CONST saeInit   = 1
  324. CONST saeNYI    = 3
  325. CONST saeArg    = 4    ''must be max sae value
  326.  
  327. DECLARE SUB      StfApiErr (nMsg%, szApi$, szArgs$)
  328. DECLARE SUB      BadArgErr (nArg%, szApi$, szArgs$)
  329.  
  330. '' chk arg
  331. DECLARE FUNCTION FValidFATDir LIB "mscomstf.dll" (szDir$) AS INTEGER
  332. DECLARE FUNCTION CchlValidFATSubPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  333. DECLARE FUNCTION FValidFATPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  334. DECLARE FUNCTION FValidDrive (szDrive$) AS INTEGER
  335.  
  336. DECLARE FUNCTION FValidInfSect (szSect$) AS INTEGER
  337. DECLARE FUNCTION FValidIniFile (szFile$) AS INTEGER
  338.  
  339. '$endif ''DEBUG
  340.  
  341.  
  342.  
  343. '' Windows system detect
  344.  
  345. DECLARE FUNCTION GetWindowsMajorVersion AS INTEGER
  346. DECLARE FUNCTION GetWindowsMinorVersion AS INTEGER
  347. DECLARE FUNCTION GetWindowsMode AS INTEGER
  348. DECLARE FUNCTION GetWindowsDir  AS STRING
  349. DECLARE FUNCTION GetWindowsSysDir AS STRING
  350. DECLARE FUNCTION IsWindowsShared AS INTEGER
  351. DECLARE FUNCTION GetScreenWidth AS INTEGER
  352. DECLARE FUNCTION GetScreenHeight AS INTEGER
  353. DECLARE SUB      FlushIniFile (szFile$)
  354.  
  355.  
  356. '*************************************************************************
  357. '*****************  Setup Basic Wrapper Definitions  *********************
  358. '*************************************************************************
  359. FUNCTION InitSetup(szCmdLine$) STATIC AS INTEGER
  360.     fFrameInit = 0
  361.     fInstallInit = 0
  362.  
  363.     IF hSetup > 0 THEN
  364. '$ifdef DEBUG
  365.         StfApiErr saeInit, "InitSetup", szCmdLine$
  366. '$endif ''DEBUG
  367.     END IF
  368.  
  369.     i% = InitFrame(szCmdLine$)
  370.     fFrameInit = 1
  371.  
  372.     InitInstall
  373.     fInstallInit = 1
  374.  
  375.     InitSetup = i%
  376. END FUNCTION
  377.  
  378.  
  379.  
  380. '**************************************************************************
  381. FUNCTION InitFrame(szCmdLine$) STATIC AS INTEGER
  382.     IF hSetup > 0 THEN
  383. '$ifdef DEBUG
  384.         StfApiErr saeInit, "InitFrame", szCmdLine$
  385. '$endif ''DEBUG
  386.     ELSE
  387.         i% = InitializeFrame(szCmdLine$)
  388.         IF i% = -1 THEN
  389.             END   '' NOT an error - Usage (/?) or Command line copy operation
  390.         ELSEIF i% = 0 THEN
  391. '$ifdef DEBUG
  392.             StfApiErr saeFail, "InitFrame", szCmdLine$
  393. '$endif ''DEBUG
  394.             END
  395.         ELSE
  396.             InitFrame = i%
  397.         END IF
  398.     END IF
  399. END FUNCTION
  400.  
  401.  
  402. '**************************************************************************
  403. SUB SetBitmap(szDll$, Bitmap%) STATIC
  404.     IF FSetBitmap(szDll$, Bitmap%) = 0 THEN
  405. '$ifdef DEBUG
  406.         StfApiErr saeFail, "SetBitmap", szDll$+","+STR$(Bitmap%)
  407. '$endif ''DEBUG
  408.         ERROR STFERR
  409.     END IF
  410. END SUB
  411.  
  412.  
  413. '**************************************************************************
  414. SUB SetAbout(szAbout1$, szAbout2$) STATIC
  415.     IF FSetAbout(szAbout1$, szAbout2$) = 0 THEN
  416. '$ifdef DEBUG
  417.         StfApiErr saeFail, "SetAbout", szAbout1$ + "," + szAbout2$
  418. '$endif ''DEBUG
  419.         ERROR STFERR
  420.     END IF
  421. END SUB
  422.  
  423.  
  424. '*************************************************************************
  425. SUB SetTitle(sz$) STATIC
  426.     SetWindowText HwndFrame(), sz$
  427. END SUB
  428.  
  429.  
  430. '*************************************************************************
  431. SUB ReadInfFile (szFile$) STATIC
  432. '$ifdef DEBUG
  433.     if FValidFATPath(szFile$) = 0 then
  434.         BadArgErr 1, "ReadInfFile", szFile$
  435.     end if
  436.     IF FOpenInf(szFile$, 1, 1) = 0 THEN
  437.         StfApiErr saeFail, "ReadInfFile", szFile$
  438. '$else  ''!DEBUG
  439.     IF FOpenInf(szFile$, 1, 0) = 0 THEN
  440. '$endif ''!DEBUG
  441.         ERROR STFERR
  442.     END IF
  443. END SUB
  444.  
  445.  
  446. '*************************************************************************
  447. FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) STATIC AS STRING
  448. '$ifdef DEBUG
  449.     if szDll$ = "" then
  450.         n% = 1
  451.     elseif szDlgProc$ = "" then
  452.         n% = 3
  453.     else
  454.         n% = 0
  455.     end if
  456.     if n% > 0 then
  457.         BadArgErr n%, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  458.     end if
  459. '$endif ''DEBUG
  460.  
  461.     IF FDoDialog(HwndFrame(), szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) = 0 THEN
  462. '$ifdef DEBUG
  463.         StfApiErr saeFail, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  464. '$endif ''DEBUG
  465.         ERROR STFERR
  466.     ELSE
  467.         UIStartDlg = GetSymbolValue("DLGEVENT")
  468.     END IF
  469. END FUNCTION
  470.  
  471.  
  472. '*************************************************************************
  473. SUB UIPop (n%) STATIC
  474.     IF FKillNDialogs(n%) = 0 THEN
  475. '$ifdef DEBUG
  476.         StfApiErr saeFail, "UIPop", STR$(n%)
  477. '$endif ''DEBUG
  478.         ERROR STFERR
  479.     END IF
  480. END SUB
  481.  
  482.  
  483. '*************************************************************************
  484. SUB UIPopAll STATIC
  485.     IF FKillNDialogs(65535) = 0 THEN
  486. '$ifdef DEBUG
  487.         StfApiErr saeFail, "UIPopAll", ""
  488. '$endif ''DEBUG
  489.         ERROR STFERR
  490.     END IF
  491. END SUB
  492.  
  493.  
  494. '*************************************************************************
  495. FUNCTION GetSymbolValue(szSymbol$) STATIC AS STRING
  496. '$ifdef DEBUG
  497.     if szSymbol$ = "" then
  498.         BadArgErr 1, "GetSymbolValue", szSymbol$
  499.     end if
  500. '$endif ''DEBUG
  501.     szValue$ = string$(cbSymValMax,32)
  502.     Length% = CbGetSymbolValue(szSymbol$, szValue$, cbSymValMax)
  503.     GetSymbolValue = szValue$
  504.     IF Length% >= cbSymValMax THEN
  505.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  506.         ERROR STFERR
  507.     END IF
  508.     IF szSymbol$ = "" THEN
  509.         ERROR STFERR
  510.     END IF
  511.     szValue$ = ""
  512. END FUNCTION
  513.  
  514.  
  515. '*************************************************************************
  516. FUNCTION GetListLength(szSymbol$) STATIC AS INTEGER
  517. '$ifdef DEBUG
  518.     if szSymbol$ = "" then
  519.         BadArgErr 1, "GetListLength", szSymbol$
  520.     end if
  521. '$endif ''DEBUG
  522.     GetListLength = UsGetListLength(szSymbol$)
  523.     IF szSymbol$ = "" THEN
  524.         ERROR STFERR
  525.     END IF
  526. END FUNCTION
  527.  
  528.  
  529. '*************************************************************************
  530. FUNCTION GetListItem(szListSymbol$, nItem%) STATIC AS STRING
  531. '$ifdef DEBUG
  532.     if szListSymbol$ = "" then
  533.         BadArgErr 1, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  534.     end if
  535.  
  536.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  537.         BadArgErr 2, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  538.     end if
  539. '$endif ''DEBUG
  540.  
  541.     szListItem$ = string$(cbSymValMax,32)
  542.     Length% = CbGetListItem(szListSymbol$, nItem%, szListItem$, cbSymValMax)
  543.     GetListItem = szListItem$
  544.     IF Length% >= cbSymValMax THEN
  545.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  546.         ERROR STFERR
  547.     END IF
  548.     IF szListSymbol$ = "" THEN
  549.         ERROR STFERR
  550.     END IF
  551.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  552.         ERROR STFERR
  553.     end if
  554.     szListItem$ = ""
  555. END FUNCTION
  556.  
  557.  
  558. '*************************************************************************
  559. SUB AddListItem(szSymbol$, szItem$) STATIC
  560. '$ifdef DEBUG
  561.     if szSymbol$ = "" then
  562.         BadArgErr 1, "AddListItem", szSymbol$+", "+szItem$
  563.     end if
  564. '$endif ''DEBUG
  565.     IF FAddListItem(szSymbol$, szItem$) = 0 THEN
  566. '$ifdef DEBUG
  567.         StfApiErr saeFail, "AddListItem", szSymbol$+", "+szItem$
  568. '$endif ''DEBUG
  569.         ERROR STFERR
  570.     END IF
  571. END SUB
  572.  
  573.  
  574. '*************************************************************************
  575. SUB ReplaceListItem(szSymbol$, n%, szItem$) STATIC
  576. '$ifdef DEBUG
  577.     if szSymbol$ = "" then
  578.         nArg% = 1
  579.     elseif (n% <= 0) OR (n% > GetListLength(szSymbol$)) then
  580.         nArg% = 2
  581.     else
  582.         nArg% = 0
  583.     end if
  584.     if nArg% > 0 then
  585.         BadArgErr nArg%, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  586.     end if
  587. '$endif ''DEBUG
  588.  
  589.     IF FReplaceListItem(szSymbol$, n%, szItem$) = 0 THEN
  590. '$ifdef DEBUG
  591.         StfApiErr saeFail, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  592. '$endif ''DEBUG
  593.         ERROR STFERR
  594.     END IF
  595. END SUB
  596.  
  597.  
  598. '**************************************************************************
  599. SUB MakeListFromSectionKeys(szSymbol$, szSect$) STATIC
  600. '$ifdef DEBUG
  601.     if szSymbol$ = "" then
  602.         n% = 1
  603.     elseif FValidInfSect(szSect$) = 0 then
  604.         n% = 2
  605.     else
  606.         n% = 0
  607.     end if
  608.     if n% > 0 then
  609.         BadArgErr n%, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  610.     end if
  611. '$endif ''DEBUG
  612.  
  613.     IF FSetSymbolToListOfInfKeys(szSymbol$, szSect$, 1) = 0 THEN
  614. '$ifdef DEBUG
  615.         StfApiErr saeFail, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  616. '$endif ''DEBUG
  617.         ERROR STFERR
  618.     END IF
  619. END SUB
  620.  
  621.  
  622. '*************************************************************************
  623. SUB SetSymbolValue(szSymbol$, szValue$) STATIC
  624. '$ifdef DEBUG
  625.     if szSymbol$ = "" then
  626.         BadArgErr 1, "SetSymbolValue", szSymbol$+", "+szValue$
  627.     end if
  628. '$endif ''DEBUG
  629.     IF FSetSymbolValue(szSymbol$, szValue$) = 0 THEN
  630. '$ifdef DEBUG
  631.         StfApiErr saeFail, "SetSymbolValue", szSymbol$+", "+szValue$
  632. '$endif ''DEBUG
  633.         ERROR STFERR
  634.     END IF
  635. END SUB
  636.  
  637.  
  638. '*************************************************************************
  639. SUB RemoveSymbol(szSym$) STATIC
  640. '$ifdef DEBUG
  641.     if szSym$ = "" then
  642.         BadArgErr 1, "RemoveSymbol", szSym$
  643.     end if
  644. '$endif ''DEBUG
  645.     IF FRemoveSymbol(szSym$) = 0 THEN
  646. '$ifdef DEBUG
  647.         StfApiErr saeFail, "RemoveSymbol", szSym$
  648. '$endif ''DEBUG
  649.         ERROR STFERR
  650.     END IF
  651. END SUB
  652.  
  653.  
  654. '*************************************************************************
  655. FUNCTION ShowWaitCursor STATIC AS INTEGER
  656.     ShowWaitCursor = HShowWaitCursor
  657. END FUNCTION
  658.  
  659.  
  660. '*************************************************************************
  661. SUB RestoreCursor (hPrev%) STATIC
  662.     i% = FRestoreCursor(hPrev%)
  663.     IF i% = 0 THEN
  664. '$ifdef DEBUG
  665.         StfApiErr saeFail, "RestoreCursor", ""
  666. '$endif ''DEBUG
  667.         ERROR STFERR
  668.     END IF
  669. END SUB
  670.  
  671.  
  672. '*************************************************************************
  673. FUNCTION SetBeepingMode (mode%) STATIC AS INTEGER
  674.     SetBeepingMode = FSetBeepingMode(mode%)
  675. END FUNCTION
  676.  
  677.  
  678. '*************************************************************************
  679. FUNCTION SetSilentMode (mode%) STATIC AS INTEGER
  680.     SetSilentMode = FSetSilent(mode%)
  681. END FUNCTION
  682.  
  683.  
  684. '*************************************************************************
  685. FUNCTION GetSectionKeyDate (szSect$, szKey$) STATIC AS STRING
  686. '$ifdef DEBUG
  687.     if FValidInfSect(szSect$) = 0 then
  688.         n% = 1
  689.     elseif szKey$ = "" then
  690.         n% = 2
  691.     else
  692.         n% = 0
  693.     end if
  694.     if n% > 0 then
  695.         BadArgErr n%, "GetSectionKeyDate", szSect$+", "+szKey$
  696.     end if
  697. '$endif ''DEBUG
  698.  
  699.     szBuf$ = string$(128, 32)
  700.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 5, szBuf$, 128)
  701.     IF Length% >= 128 THEN
  702.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  703.         ERROR STFERR
  704.     END IF
  705.  
  706.     IF Length% = -1 THEN
  707. '$ifdef DEBUG
  708.         StfApiErr saeFail, "GetSectionKeyDate", szSect$+", "+szKey$
  709. '$endif ''DEBUG
  710.         ERROR STFERR
  711.     END IF
  712.  
  713.     GetSectionKeyDate = szBuf$
  714.     szBuf$ = ""
  715. END FUNCTION
  716.  
  717.  
  718. '*************************************************************************
  719. FUNCTION GetSectionKeyFilename (szSect$, szKey$) STATIC AS STRING
  720. '$ifdef DEBUG
  721.     if FValidInfSect(szSect$) = 0 then
  722.         n% = 1
  723.     elseif szKey$ = "" then
  724.         n% = 2
  725.     else
  726.         n% = 0
  727.     end if
  728.     if n% > 0 then
  729.         BadArgErr n%, "GetSectionKeyFilename", szSect$+", "+szKey$
  730.     end if
  731. '$endif ''DEBUG
  732.  
  733.     szBuf$ = string$(128, 32)
  734.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 1, szBuf$, 128)
  735.     IF Length% >= 128 THEN
  736.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  737.         ERROR STFERR
  738.     END IF
  739.  
  740.     IF Length% = -1 THEN
  741. '$ifdef DEBUG
  742.         StfApiErr saeFail, "GetSectionKeyFilename", szSect$+", "+szKey$
  743. '$endif ''DEBUG
  744.         ERROR STFERR
  745.     END IF
  746.  
  747.     GetSectionKeyFilename = szBuf$
  748.     szBuf$ = ""
  749. END FUNCTION
  750.  
  751.  
  752. '*************************************************************************
  753. FUNCTION GetSectionKeySize (szSect$, szKey$) STATIC AS LONG
  754. '$ifdef DEBUG
  755.     if FValidInfSect(szSect$) = 0 then
  756.         n% = 1
  757.     elseif szKey$ = "" then
  758.         n% = 2
  759.     else
  760.         n% = 0
  761.     end if
  762.     if n% > 0 then
  763.         BadArgErr n%, "GetSectionKeySize", szSect$+", "+szKey$
  764.     end if
  765. '$endif ''DEBUG
  766.  
  767.     szBuf$ = string$(128, 32)
  768.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 15, szBuf$, 128)
  769.     IF Length% >= 128 THEN
  770.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  771.         ERROR STFERR
  772.     END IF
  773.  
  774.     IF Length% = -1 THEN
  775. '$ifdef DEBUG
  776.         StfApiErr saeFail, "GetSectionKeySize", szSect$+", "+szKey$
  777. '$endif ''DEBUG
  778.         ERROR STFERR
  779.     END IF
  780.  
  781.     GetSectionKeySize = VAL(szBuf$)
  782.     szBuf$ = ""
  783. END FUNCTION
  784.  
  785.  
  786. '*************************************************************************
  787. FUNCTION GetSectionKeyVersion (szSect$, szKey$) STATIC AS STRING
  788. '$ifdef DEBUG
  789.     if FValidInfSect(szSect$) = 0 then
  790.         n% = 1
  791.     elseif szKey$ = "" then
  792.         n% = 2
  793.     else
  794.         n% = 0
  795.     end if
  796.     if n% > 0 then
  797.         BadArgErr n%, "GetSectionKeyVersion", szSect$+", "+szKey$
  798.     end if
  799. '$endif ''DEBUG
  800.  
  801.     szBuf$ = string$(128, 32)
  802.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 19, szBuf$, 128)
  803.     IF Length% >= 128 THEN
  804.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  805.         ERROR STFERR
  806.     END IF
  807.  
  808.     IF Length% = -1 THEN
  809. '$ifdef DEBUG
  810.         StfApiErr saeFail, "GetSectionKeyVersion", szSect$+", "+szKey$
  811. '$endif ''DEBUG
  812.         ERROR STFERR
  813.     END IF
  814.  
  815.     GetSectionKeyVersion = szBuf$
  816.     szBuf$ = ""
  817. END FUNCTION
  818.  
  819.  
  820. '*************************************************************************
  821. SUB MakeListFromSectionDate (szSym$, szSect$) STATIC
  822. '$ifdef DEBUG
  823.     if szSym$ = "" then
  824.         n% = 1
  825.     elseif FValidInfSect(szSect$) = 0 then
  826.         n% = 2
  827.     else
  828.         n% = 0
  829.     end if
  830.     if n% > 0 then
  831.         BadArgErr n%, "MakeListFromSectionDate", szSym$+", "+szSect$
  832.     end if
  833. '$endif ''DEBUG
  834.  
  835.     IF FMakeListInfSectionField(szSym$, szSect$, 5) = 0 THEN
  836. '$ifdef DEBUG
  837.         StfApiErr saeFail, "MakeListFromSectionDate", szSym$+", "+szSect$
  838. '$endif ''DEBUG
  839.         ERROR STFERR
  840.     END IF
  841. END SUB
  842.  
  843.  
  844. '*************************************************************************
  845. SUB MakeListFromSectionFilename (szSym$, szSect$) STATIC
  846. '$ifdef DEBUG
  847.     if szSym$ = "" then
  848.         n% = 1
  849.     elseif FValidInfSect(szSect$) = 0 then
  850.         n% = 2
  851.     else
  852.         n% = 0
  853.     end if
  854.     if n% > 0 then
  855.         BadArgErr n%, "MakeListFromSectionFilename", szSym$+", "+szSect$
  856.     end if
  857. '$endif ''DEBUG
  858.  
  859.     IF FMakeListInfSectionField(szSym$, szSect$, 1) = 0 THEN
  860. '$ifdef DEBUG
  861.         StfApiErr saeFail, "MakeListFromSectionFilename", szSym$+", "+szSect$
  862. '$endif ''DEBUG
  863.         ERROR STFERR
  864.     END IF
  865. END SUB
  866.  
  867.  
  868. '*************************************************************************
  869. SUB MakeListFromSectionSize (szSym$, szSect$) STATIC
  870. '$ifdef DEBUG
  871.     if szSym$ = "" then
  872.         n% = 1
  873.     elseif FValidInfSect(szSect$) = 0 then
  874.         n% = 2
  875.     else
  876.         n% = 0
  877.     end if
  878.     if n% > 0 then
  879.         BadArgErr n%, "MakeListFromSectionSize", szSym$+", "+szSect$
  880.     end if
  881. '$endif ''DEBUG
  882.  
  883.     IF FMakeListInfSectionField(szSym$, szSect$, 15) = 0 THEN
  884. '$ifdef DEBUG
  885.         StfApiErr saeFail, "MakeListFromSectionSize", szSym$+", "+szSect$
  886. '$endif ''DEBUG
  887.         ERROR STFERR
  888.     END IF
  889. END SUB
  890.  
  891.  
  892. '*************************************************************************
  893. SUB MakeListFromSectionVersion (szSym$, szSect$) STATIC
  894. '$ifdef DEBUG
  895.     if szSym$ = "" then
  896.         n% = 1
  897.     elseif FValidInfSect(szSect$) = 0 then
  898.         n% = 2
  899.     else
  900.         n% = 0
  901.     end if
  902.     if n% > 0 then
  903.         BadArgErr n%, "MakeListFromSectionVersion", szSym$+", "+szSect$
  904.     end if
  905. '$endif ''DEBUG
  906.  
  907.     IF FMakeListInfSectionField(szSym$, szSect$, 19) = 0 THEN
  908. '$ifdef DEBUG
  909.         StfApiErr saeFail, "MakeListFromSectionVersion", szSym$+", "+szSect$
  910. '$endif ''DEBUG
  911.         ERROR STFERR
  912.     END IF
  913. END SUB
  914.  
  915.  
  916. '*************************************************************************
  917. SUB InitInstall STATIC
  918.     IF hSetup > 0 THEN
  919. '$ifdef DEBUG
  920.         StfApiErr saeInit, "InitInstall", ""
  921. '$endif ''DEBUG
  922.     ELSEIF FInitializeInstall(HinstFrame(), HwndFrame()) = 0 THEN
  923. '$ifdef DEBUG
  924.         StfApiErr saeFail, "InitInstall", ""
  925. '$endif ''DEBUG
  926.         END
  927.     END IF
  928. END SUB
  929.  
  930.  
  931. '*************************************************************************
  932. SUB CreateDir (szDir$, cmo%) STATIC
  933. '$ifdef DEBUG
  934.     if FValidFATDir(szDir$) = 0 then
  935.         BadArgErr 1, "CreateDir", szDir$+", "+STR$(cmo%)
  936.     end if
  937. '$endif ''DEBUG
  938.     IF FCreateDir(szDir$, cmo%) = 0 THEN
  939. '$ifdef DEBUG
  940.         StfApiErr saeFail, "CreateDir", szDir$+", "+STR$(cmo%)
  941. '$endif ''DEBUG
  942.         ERROR STFERR
  943.     END IF
  944. END SUB
  945.  
  946.  
  947. '*************************************************************************
  948. SUB RemoveDir (szDir$, cmo%) STATIC
  949. '$ifdef DEBUG
  950.     if FValidFATDir(szDir$) = 0 then
  951.         BadArgErr 1, "RemoveDir", szDir$+", "+STR$(cmo%)
  952.     end if
  953. '$endif ''DEBUG
  954.     IF FRemoveDir(szDir$, cmo%) = 0 THEN
  955. '$ifdef DEBUG
  956.         StfApiErr saeFail, "RemoveDir", szDir$+", "+STR$(cmo%)
  957. '$endif ''DEBUG
  958.         ERROR STFERR
  959.     END IF
  960. END SUB
  961.  
  962.  
  963.  
  964. '*************************************************************************
  965. SUB RemoveIniSection (szFile$, szSect$, cmo%) STATIC
  966. '$ifdef DEBUG
  967.     if FValidIniFile(szFile$) = 0 then
  968.         n% = 1
  969.     elseif FValidInfSect(szSect$) = 0 then
  970.         n% = 2
  971.     else
  972.         n% = 0
  973.     end if
  974.     if n% > 0 then
  975.         BadArgErr n%, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  976.     end if
  977. '$endif ''DEBUG
  978.     IF FRemoveIniSection(szFile$, szSect$, cmo%) = 0 THEN
  979. ''    IF WritePrivateProfileString(szSect$, NULL, NULL, szFile$) = 0 THEN
  980. '$ifdef DEBUG
  981.         StfApiErr saeFail, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  982. '$endif ''DEBUG
  983.         ERROR STFERR
  984.     END IF
  985.     FlushIniFile(szFile$)
  986. END SUB
  987.  
  988.  
  989. '*************************************************************************
  990. SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  991. '$ifdef DEBUG
  992.     if FValidIniFile(szFile$) = 0 then
  993.         n% = 1
  994.     elseif FValidInfSect(szSect$) = 0 then
  995.         n% = 2
  996.     else
  997.         n% = 0
  998.     end if
  999.     if n% > 0 then
  1000.         BadArgErr n%, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1001.     end if
  1002. '$endif ''DEBUG
  1003. ''    cb% = 512
  1004. ''    szBuf$ = STRING$(cb%, 32)
  1005. ''    cbRet% = GetPrivateProfileString(szSect$, szKey$, "", szBuf$, cb%, szFile$)
  1006. ''    n% = 1
  1007. ''    IF szBuf$ <> "" THEN
  1008. ''        ovr% = cmo% AND cmoOverwrite
  1009. ''        IF ovr% = 0 THEN
  1010. ''            n% = 0
  1011. ''        ELSE
  1012. ''            n% = WritePrivateProfileString(szSect$, szKey$, NULL, szFile$)
  1013. ''            n% = WritePrivateProfileString(szSect$, szKey$, szValue$, szFile$)
  1014. ''        END IF
  1015. ''    ELSE
  1016. ''        n% = WritePrivateProfileString(szSect$, szKey$, szValue$, szFile$)
  1017. ''    END IF
  1018.     IF FCreateIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  1019. ''    IF n% = 0 THEN
  1020. '$ifdef DEBUG
  1021.         StfApiErr saeFail, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1022. '$endif ''DEBUG
  1023.         ERROR STFERR
  1024.      END IF
  1025.      FlushIniFile(szFile$)
  1026. END SUB
  1027.  
  1028.  
  1029. '*************************************************************************
  1030. SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%) STATIC
  1031. '$ifdef DEBUG
  1032.     if FValidIniFile(szFile$) = 0 then
  1033.         n% = 1
  1034.     elseif FValidInfSect(szSect$) = 0 then
  1035.         n% = 2
  1036.     elseif szKey$ = "" then
  1037.         n% = 3
  1038.     else
  1039.         n% = 0
  1040.     end if
  1041.     if n% > 0 then
  1042.         BadArgErr n%, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  1043.     end if
  1044. '$endif ''DEBUG
  1045.     IF FRemoveIniKey(szFile$, szSect$, szKey$, cmo%) = 0 THEN
  1046. ''    IF WritePrivateProfileString(szSect$, szKey$, NULL, szFile$) = 0 THEN
  1047. '$ifdef DEBUG
  1048.         StfApiErr saeFail, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  1049. '$endif ''DEBUG
  1050.         ERROR STFERR
  1051.     END IF
  1052.     FlushIniFile(szFile$)
  1053. END SUB
  1054.  
  1055.  
  1056. '*************************************************************************
  1057. SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  1058. '$ifdef DEBUG
  1059.     if FValidFATPath(szFile$) = 0 then
  1060.         n% = 1
  1061.     elseif FValidInfSect(szSect$) = 0 then
  1062.         n% = 2
  1063.     elseif szKey$ = "" then
  1064.         n% = 3
  1065.     else
  1066.         n% = 0
  1067.     end if
  1068.     if n% > 0 then
  1069.         BadArgErr n%, "CreateSysIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1070.     end if
  1071. '$endif ''DEBUG
  1072.     IF FCreateSysIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  1073. ''    IF WritePrivateProfileString(szSect$, szKey$, szValue$, szFile$) = 0 THEN
  1074. '$ifdef DEBUG
  1075.         StfApiErr saeFail, "CreateSysIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1076. '$endif ''DEBUG
  1077.         ERROR STFERR
  1078.     END IF
  1079.     FlushIniFile(szFile$)
  1080. END SUB
  1081.  
  1082.  
  1083. '*************************************************************************
  1084. SUB CreateProgmanGroup (szGroup$, szPath$, cmo%) STATIC
  1085. '$ifdef DEBUG
  1086.     if szGroup$ = "" or len(szGroup$) > 24 then
  1087.         BadArgErr 1, "CreateProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1088.     end if
  1089. '$endif ''DEBUG
  1090.     IF FCreateProgManGroup(szGroup$, szPath$, cmo%) = 0 THEN
  1091. '$ifdef DEBUG
  1092.         StfApiErr saeFail, "CreateProgmanGroup", szGroup$+", "+szPath$+", "+STR$(cmo%)
  1093. '$endif ''DEBUG
  1094.         ERROR STFERR
  1095.     END IF
  1096. END SUB
  1097.  
  1098.  
  1099. '*************************************************************************
  1100. SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%) STATIC
  1101. '$ifdef DEBUG
  1102.     if szGroup$ = "" or len(szGroup$) > 24 then
  1103.         BadArgErr 1, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1104.     end if
  1105. '$endif ''DEBUG
  1106.     IF FShowProgManGroup(szGroup$, STR$(Cmd%), cmo%) = 0 THEN
  1107. '$ifdef DEBUG
  1108.         StfApiErr saeFail, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1109. '$endif ''DEBUG
  1110.         ERROR STFERR
  1111.     END IF
  1112. END SUB
  1113.  
  1114.  
  1115. '*************************************************************************
  1116. SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) STATIC
  1117. '$ifdef DEBUG
  1118.     if FValidInfSect(szSect$) = 0 then
  1119.         n% = 1
  1120.     elseif szKey$ = "" then
  1121.         n% = 2
  1122.     elseif FValidFATDir(szDst$) = 0 then
  1123.         n% = 3
  1124.     else
  1125.         n% = 0
  1126.     end if
  1127.     if n% > 0 then
  1128.         BadArgErr n%, "StampResource", szSect$+", "+szKey$+", "+szDst$+", "+STR$(wResType%)+", "+STR$(wResId%)+", "+szData$+", "+STR$(cbData%)
  1129.     end if
  1130. '$endif ''DEBUG
  1131.  
  1132.     IF FStampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) = 0 THEN
  1133. '$ifdef DEBUG
  1134.         StfApiErr saeFail, "StampResource", szSect$+", "+szKey$+", "+szDst$+", "+STR$(wResType%)+", "+STR$(wResId%)+", "+szData$+", "+STR$(cbData%)
  1135. '$endif ''DEBUG
  1136.         ERROR STFERR
  1137.     END IF
  1138. END SUB
  1139.  
  1140.  
  1141. '*************************************************************************
  1142. SUB DumpCopyList (szFile$) STATIC
  1143. '$ifdef DEBUG
  1144.     if szFile$ = "" then
  1145.         BadArgErr 1, "DumpCopyList", szFile$
  1146.     end if
  1147. '$endif ''DEBUG
  1148.     IF FDumpCopyListToFile (szFile$) = 0 THEN
  1149. '$ifdef DEBUG
  1150.         StfApiErr saeFail, "DumpCopyList", szFile$
  1151. '$endif ''DEBUG
  1152.         ERROR STFERR
  1153.     END IF
  1154. END SUB
  1155.  
  1156.  
  1157. '*************************************************************************
  1158. SUB ClearCopyList STATIC
  1159.     ResetCopyList
  1160. END SUB
  1161.  
  1162.  
  1163. '*************************************************************************
  1164. FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) STATIC AS LONG
  1165.     lNeed& = LcbGetCopyListCost (szExtraList$, szCostList$, szNeedList$)
  1166.     IF lNeed& < 0 THEN
  1167. '$ifdef DEBUG
  1168.         StfApiErr saeFail, "GetCopyListCost", szExtraList$+", "+szCostList$+", "+szNeedList$
  1169. '$endif ''DEBUG
  1170.         ERROR STFERR
  1171.     END IF
  1172.     GetCopyListCost = lNeed&
  1173. END FUNCTION
  1174.  
  1175.  
  1176. '*************************************************************************
  1177. SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%) STATIC
  1178.     szItemNew$ = szItem$
  1179.     IF szOther$ <> "" THEN
  1180.         szItemNew$ = szItem$ + "," + szOther$
  1181.     END IF
  1182. '$ifdef DEBUG
  1183.     if szGroup$ = "" or len(szGroup$) > 24 then
  1184.         BadArgErr 1, "CreateProgmanItem", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1185.     end if
  1186. '$endif ''DEBUG
  1187.  
  1188.     IF FCreateProgManItem(szGroup$, szItemNew$, szCmd$, cmo%) = 0 THEN
  1189. '$ifdef DEBUG
  1190.         StfApiErr saeFail, "CreateProgmanItem", szGroup$+", "+szItem$+", "+szCmd$+", "+szOther$+", "+STR$(cmo%)
  1191. '$endif ''DEBUG
  1192.         ERROR STFERR
  1193.     END IF
  1194.     szItemNew$ = ""
  1195. END SUB
  1196.  
  1197.  
  1198. '*************************************************************************
  1199. SUB AddDos5Help (szProgName$, szProgHelp$, cmo%) STATIC
  1200. '$ifdef DEBUG
  1201.     if szProgName$ = "" OR MID$(szProgName$, 1, 1) = "@" OR LEN(szProgName$) > 8 then
  1202.         n% = 1
  1203.     elseif INSTR(szProgName$, " ") <> 0 OR INSTR(szProgName$, CHR$(9)) <> 0 then
  1204.         n% = 1
  1205.     elseif szProgHelp$ = "" then
  1206.         n% = 2
  1207.     else
  1208.         n% = 0
  1209.     end if
  1210.     if n% > 0 then
  1211.         BadArgErr n%, "AddDos5Help", szProgName$+", "+szProgHelp$+", "+STR$(cmo%)
  1212.     end if
  1213. '$endif ''DEBUG
  1214.     IF FAddDos5Help (szProgName$, szProgHelp$, cmo%) = 0 THEN
  1215. '$ifdef DEBUG
  1216.         StfApiErr saeFail, "AddDos5Help", szProgName$+", "+szProgHelp$+", "+STR$(cmo%)
  1217. '$endif ''DEBUG
  1218.         ERROR STFERR
  1219.     END IF
  1220. END SUB
  1221.  
  1222.  
  1223. '*************************************************************************
  1224. SUB CopyFilesInCopyList STATIC
  1225.     grc% = GrcCopyFilesInCopyList (HinstFrame())
  1226.  
  1227.     IF grc% = grcUserQuit THEN
  1228.         ERROR STFQUIT
  1229.     ELSEIF grc% > 0 THEN
  1230. '$ifdef DEBUG
  1231.         StfApiErr saeFail, "CopyFilesInCopyList", ""
  1232. '$endif ''DEBUG
  1233.         ERROR STFERR
  1234.     END IF
  1235. END SUB
  1236.  
  1237.  
  1238. '*************************************************************************
  1239. SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%) STATIC
  1240. '$ifdef DEBUG
  1241.     if FValidFATPath(szFullPathSrc$) = 0 then
  1242.         n% = 1
  1243.     elseif FValidFATPath(szFullPathDst$) = 0 then
  1244.         n% = 2
  1245.     else
  1246.         n% = 0
  1247.     end if
  1248.     if n% > 0 then
  1249.         BadArgErr n%, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  1250.     end if
  1251. '$endif ''DEBUG
  1252.  
  1253.     IF  FCopyOneFile(szFullPathSrc$, szFullPathDst$, (cmo OR cmoCopy), fAppend%) = 0 THEN
  1254. '$ifdef DEBUG
  1255.         StfApiErr saeFail, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  1256. '$endif ''DEBUG
  1257.         ERROR STFERR
  1258.     END IF
  1259. END SUB
  1260.  
  1261.  
  1262.  
  1263. '*************************************************************************
  1264. SUB RemoveFile (szFullPathSrc$, cmo%) STATIC
  1265. '$ifdef DEBUG
  1266.     if FValidFATPath(szFullPathSrc$) = 0 then
  1267.         BadArgErr 1, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  1268.     end if
  1269. '$endif ''DEBUG
  1270.     IF  YnrcRemoveFile(szFullPathSrc$, cmo%) = ynrcNo THEN
  1271. '$ifdef DEBUG
  1272.         StfApiErr saeFail, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  1273. '$endif ''DEBUG
  1274.         ERROR STFERR
  1275.     END IF
  1276. END SUB
  1277.  
  1278.  
  1279. '*************************************************************************
  1280. SUB BackupFile (szFullPath$, szBackup$) STATIC
  1281. '$ifdef DEBUG
  1282.     if FValidFATPath(szFullPath$) = 0 then
  1283.         n% = 1
  1284.     elseif szBackup$ = "" then
  1285.         n% = 2
  1286.     else
  1287.         n% = 0
  1288.     end if
  1289.     if n% > 0 then
  1290.         BadArgErr n%, "BackupFile", szFullPath$+", "+szBackup$
  1291.     end if
  1292. '$endif ''DEBUG
  1293.  
  1294.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  1295. '$ifdef DEBUG
  1296.         StfApiErr saeFail, "BackupFile", szFullPath$+", "+szBackup$
  1297. '$endif ''DEBUG
  1298.         ERROR STFERR
  1299.     END IF
  1300. END SUB
  1301.  
  1302.  
  1303. '*************************************************************************
  1304. SUB RenameFile (szFullPath$, szBackup$) STATIC
  1305. '$ifdef DEBUG
  1306.     if FValidFATPath(szFullPath$) = 0 then
  1307.         n% = 1
  1308.     elseif szBackup$ = "" then
  1309.         n% = 2
  1310.     else
  1311.         n% = 0
  1312.     end if
  1313.     if n% > 0 then
  1314.         BadArgErr n%, "RenameFile", szFullPath$+", "+szBackup$
  1315.     end if
  1316. '$endif ''DEBUG
  1317.  
  1318.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  1319. '$ifdef DEBUG
  1320.         StfApiErr saeFail, "RenameFile", szFullPath$+", "+szBackup$
  1321. '$endif ''DEBUG
  1322.         ERROR STFERR
  1323.     END IF
  1324. END SUB
  1325.  
  1326.  
  1327. '*************************************************************************
  1328. SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$) STATIC
  1329. '$ifdef DEBUG
  1330.     if FValidInfSect(szSect$) = 0 then
  1331.         n% = 1
  1332.     elseif FValidFATDir(szSrc$) = 0 then
  1333.         n% = 2
  1334.     elseif FValidFATDir(szDest$) = 0 then
  1335.         n% = 3
  1336.     else
  1337.         n% = 0
  1338.     end if
  1339.     if n% > 0 then
  1340.         BadArgErr n%, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  1341.     end if
  1342. '$endif ''DEBUG
  1343.  
  1344.     IF FAddSectionFilesToCopyList (szSect$, szSrc$, szDest$) = 0 THEN
  1345. '$ifdef DEBUG
  1346.         StfApiErr saeFail, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  1347. '$endif ''DEBUG
  1348.         ERROR STFERR
  1349.     END IF
  1350. END SUB
  1351.  
  1352.  
  1353. '*************************************************************************
  1354. SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  1355. '$ifdef DEBUG
  1356.     if FValidInfSect(szSect$) = 0 then
  1357.         n% = 1
  1358.     elseif szKey$ = "" then
  1359.         n% = 2
  1360.     elseif FValidFATDir(szSrc$) = 0 then
  1361.         n% = 3
  1362.     elseif FValidFATDir(szDest$) = 0 then
  1363.         n% = 4
  1364.     else
  1365.         n% = 0
  1366.     end if
  1367.     if n% > 0 then
  1368.         BadArgErr n%, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1369.     end if
  1370. '$endif ''DEBUG
  1371.  
  1372.     IF FAddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  1373. '$ifdef DEBUG
  1374.         StfApiErr saeFail, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1375. '$endif ''DEBUG
  1376.         ERROR STFERR
  1377.     END IF
  1378. END SUB
  1379.  
  1380.  
  1381. '*************************************************************************
  1382. SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  1383. '$ifdef DEBUG
  1384.     if FValidInfSect(szSect$) = 0 then
  1385.         n% = 1
  1386.     elseif szKey$ = "" then
  1387.         n% = 2
  1388.     elseif FValidFATDir(szSrc$) = 0 then
  1389.         n% = 3
  1390.     elseif FValidFATPath(szDest$) = 0 then
  1391.         n% = 4
  1392.     else
  1393.         n% = 0
  1394.     end if
  1395.     if n% > 0 then
  1396.         BadArgErr n%, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1397.     end if
  1398. '$endif ''DEBUG
  1399.  
  1400.     IF FAddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  1401. '$ifdef DEBUG
  1402.         StfApiErr saeFail, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1403. '$endif ''DEBUG
  1404.         ERROR STFERR
  1405.     END IF
  1406. END SUB
  1407.  
  1408.  
  1409. '*************************************************************************
  1410. SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&) STATIC
  1411. '$ifdef DEBUG
  1412.     if szDll$ = "" then
  1413.         n% = 1
  1414.     elseif idDlg% = 0 then
  1415.         n% = 2
  1416.     elseif szProc$ = "" then
  1417.         n% = 3
  1418.     elseif lTicks& <= 0 then
  1419.         n% = 4
  1420.     else
  1421.         n% = 0
  1422.     end if
  1423.     if n% > 0 then
  1424.         BadArgErr n%, "AddToBillboardList", szDll$+", "+STR$(idDlg%)+", "+szProc$+", "+STR$(lTicks&)
  1425.     end if
  1426. '$endif ''DEBUG
  1427.  
  1428.     IF FAddToBillboardList(szDll$, idDlg%, szProc$, lTicks&) = 0 THEN
  1429. '$ifdef DEBUG
  1430.         StfApiErr saeFail, "AddToBillboardList", szDll$+", "+STR$(idDlg%)+", "+szProc$+", "+STR$(lTicks&)
  1431. '$endif ''DEBUG
  1432.         ERROR STFERR
  1433.     END IF
  1434. END SUB
  1435.  
  1436.  
  1437. '*************************************************************************
  1438. SUB AddBlankToBillboardList (lTicks&) STATIC
  1439. '$ifdef DEBUG
  1440.     if lTicks& <= 0 then
  1441.         BadArgErr 1, "AddBlankToBillboardList", STR$(lTicks&)
  1442.     end if
  1443. '$endif ''DEBUG
  1444.     IF FAddToBillboardList(NULL, 0, NULL, lTicks&) = 0 THEN
  1445. '$ifdef DEBUG
  1446.         StfApiErr saeFail, "AddBlankToBillboardList", STR$(lTicks&)
  1447. '$endif ''DEBUG
  1448.         ERROR STFERR
  1449.     END IF
  1450. END SUB
  1451.  
  1452.  
  1453. '*************************************************************************
  1454. SUB ClearBillboardList STATIC
  1455.     IF FClearBillboardList = 0 THEN
  1456. '$ifdef DEBUG
  1457.         StfApiErr saeFail, "ClearBillboardList", ""
  1458. '$endif ''DEBUG
  1459.         ERROR STFERR
  1460.     END IF
  1461. END SUB
  1462.  
  1463.  
  1464. '*************************************************************************
  1465. SUB OpenLogFile (szFile$, fAppend%) STATIC
  1466. '$ifdef DEBUG
  1467.     if FValidFATPath(szFile$) = 0 then
  1468.         BadArgErr 1, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  1469.     end if
  1470. '$endif ''DEBUG
  1471.     IF FOpenLogFile(szFile$, fAppend%) = 0 THEN
  1472. '$ifdef DEBUG
  1473.         StfApiErr saeFail, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  1474. '$endif ''DEBUG
  1475.         ERROR STFERR
  1476.     END IF
  1477. END SUB
  1478.  
  1479.  
  1480. '*************************************************************************
  1481. SUB CloseLogFile STATIC
  1482.     IF FCloseLogFile() = 0 THEN
  1483. '$ifdef DEBUG
  1484.         StfApiErr saeFail, "CloseLogFile", ""
  1485. '$endif ''DEBUG
  1486.         ERROR STFERR
  1487.     END IF
  1488. END SUB
  1489.  
  1490.  
  1491. '*************************************************************************
  1492. SUB WriteToLogFile (szStr$) STATIC
  1493.     IF FWriteToLogFile(szStr$, 1) = 0 THEN
  1494. '$ifdef DEBUG
  1495.         StfApiErr saeFail, "WriteToLogFile", szStr$
  1496. '$endif ''DEBUG
  1497.         ERROR STFERR
  1498.     END IF
  1499. END SUB
  1500.  
  1501.  
  1502. ''' -1 in either parameter will mean 'center in frame client area'
  1503. '*************************************************************************
  1504. SUB SetCopyGaugePosition (x%, y%) STATIC
  1505.     ProSetPos x%, y%
  1506. END SUB
  1507.  
  1508.  
  1509. '*************************************************************************
  1510. FUNCTION FindFileUsingFileOpen (szFile$) STATIC AS STRING
  1511.     szBuf$ = STRING$(512, 32)
  1512.  
  1513.     wRet% = WFindFileUsingFileOpen(szFile$, szBuf$, len(szBuf$))
  1514.     IF wRet% = 0 THEN
  1515.         FindFileUsingFileOpen = szBuf$
  1516.     ELSEIF wRet% = 1 THEN
  1517.         FindFileUsingFileOpen = ""
  1518.     ELSE
  1519. '$ifdef DEBUG
  1520.         StfApiErr saeFail, "FindFileUsingFileOpen", szFile$
  1521. '$endif ''DEBUG
  1522.         ERROR STFERR
  1523.     END IF
  1524.  
  1525.     szBuf$ = ""
  1526. END FUNCTION
  1527.  
  1528.  
  1529. '*************************************************************************
  1530. FUNCTION IsDirWritable (szDir$) STATIC AS INTEGER
  1531.     IsDirWritable = FIsDirWritable(szDir$)
  1532. END FUNCTION
  1533.  
  1534.  
  1535. '*************************************************************************
  1536. FUNCTION IsFileWritable (szFile$) STATIC AS INTEGER
  1537. '$ifdef DEBUG
  1538.     if FValidFATDir(szFile$) = 0 then
  1539.         BadArgErr 1, "IsFileWritable", szFile$
  1540.     end if
  1541. '$endif ''DEBUG
  1542.     IsFileWritable = FIsFileWritable(szFile$)
  1543. END FUNCTION
  1544.  
  1545.  
  1546. '*************************************************************************
  1547. FUNCTION GetNthFieldFromIniString (szLine$, iField%) STATIC AS STRING
  1548.     IF iField% < 1 THEN
  1549. '$ifdef DEBUG
  1550.         StfApiErr saeFail, "GetNthFieldFromIniString", szLine$+", "+STR$(iField%)
  1551. '$endif ''DEBUG
  1552.         ERROR STFERR
  1553.     END IF
  1554.     szStart$ = szLine$
  1555.     IF iField% <> 1 THEN
  1556.         FOR i% = 2 TO iField% STEP 1
  1557.             iNew% = INSTR(szStart$, ",")
  1558.             IF iNew% = 0 THEN
  1559.                 GetNthFieldFromIniString = ""
  1560.                 GOTO _GNFFIS_END
  1561.             END IF
  1562.             szStart$ = MID$(szStart$, (iNew% + 1))
  1563.         NEXT
  1564.     END IF
  1565.  
  1566.     iNew% = INSTR(szStart$, ",")
  1567.     IF iNew% <> 0 THEN
  1568.         szStart$ = MID$(szStart$, 1, (iNew% - 1))
  1569.     END IF
  1570.  
  1571.     GetNthFieldFromIniString = LTRIM$(RTRIM$(szStart$))
  1572.  
  1573. _GNFFIS_END:
  1574.  
  1575. END FUNCTION
  1576.  
  1577.  
  1578. '*************************************************************************
  1579. FUNCTION GetWindowsMajorVersion STATIC AS INTEGER
  1580.     GetWindowsMajorVersion = GetVersion() MOD 256
  1581. END FUNCTION
  1582.  
  1583.  
  1584. '*************************************************************************
  1585. FUNCTION GetWindowsMinorVersion STATIC AS INTEGER
  1586.     GetWindowsMinorVersion = GetVersion() / 256
  1587. END FUNCTION
  1588.  
  1589.  
  1590. '*************************************************************************
  1591. FUNCTION GetWindowsMode STATIC AS INTEGER
  1592.     GetWindowsMode = 0
  1593.     longTmp& = GetWinFlags()
  1594.     IF longTmp& AND WF_NT THEN
  1595.         GetWindowsMode = 4
  1596.     ELSEIF longTmp& AND WF_STANDARD THEN
  1597.         GetWindowsMode = 1
  1598.     ELSEIF longTmp& AND WF_ENHANCED THEN
  1599.         GetWindowsMode = 2
  1600.     END IF
  1601. END FUNCTION
  1602.  
  1603.  
  1604. '*************************************************************************
  1605. FUNCTION GetWindowsDir STATIC AS STRING
  1606.     szBuf$ = string$(256, 32)
  1607.     cbBuf% = GetWindowsDirectory(szBuf$, 256)
  1608.  
  1609.     IF cbBuf% = 0 THEN
  1610.         GetWindowsDir = ""
  1611. '$ifdef DEBUG
  1612.         StfApiErr saeFail, "GetWindowsDir", ""
  1613. '$endif ''DEBUG
  1614.         ERROR STFERR
  1615.     ELSE
  1616.         IF cbBuf% > 255 THEN
  1617.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1618.             ERROR STFERR
  1619.         END IF
  1620.         szBuf$ = RTRIM$(szBuf$)
  1621.         IF MID$(szBuf$, 1, 1) = "\" THEN
  1622.             'szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1623.             szBuf$ = MID$(GetWindowsSysDir, 1, 2) + szBuf$
  1624.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1625.             szBuf$ = MID$(GetWindowsSysDir, 1, 3) + szBuf$
  1626.         END IF
  1627.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  1628.             szBuf$ = szBuf$ + "\"
  1629.         END IF
  1630.         GetWindowsDir = szBuf$
  1631.     END IF
  1632.  
  1633.     szBuf$ = ""
  1634. END FUNCTION
  1635.  
  1636.  
  1637. '*************************************************************************
  1638. FUNCTION GetWindowsSysDir STATIC AS STRING
  1639.     szBuf$ = string$(256, 32)
  1640.     cbBuf% = GetSystemDirectory(szBuf$, 256)
  1641.  
  1642.     IF cbBuf% = 0 THEN
  1643. '$ifdef DEBUG
  1644.         StfApiErr saeFail, "GetWindowsSysDir", ""
  1645. '$endif ''DEBUG
  1646.         ERROR STFERR
  1647.     ELSE
  1648.         IF cbBuf% > 255 THEN
  1649.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1650.             ERROR STFERR
  1651.         END IF
  1652.         szBuf$ = RTRIM$(szBuf$)
  1653.         IF MID$(szBuf$, 1, 1) = "\" THEN
  1654.             szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1655.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1656.             szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  1657.         END IF
  1658.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  1659.             szBuf$ = szBuf$ + "\"
  1660.         END IF
  1661.         GetWindowsSysDir = szBuf$
  1662.     END IF
  1663.  
  1664.     szBuf$ = ""
  1665. END FUNCTION
  1666.  
  1667.  
  1668. '*************************************************************************
  1669. FUNCTION IsWindowsShared STATIC AS INTEGER
  1670.     szWin$ = UCASE$(GetWindowsDir())
  1671.     szSys$ = UCASE$(GetWindowsSysDir())
  1672.  
  1673.     IF len(szWin$) = 0 THEN
  1674. '$ifdef DEBUG
  1675.         StfApiErr saeFail, "IsWindowsShared", ""
  1676. '$endif ''DEBUG
  1677.         ERROR STFERR
  1678.     END IF
  1679.  
  1680.     IF len(szSys$) <= len(szWin$) THEN
  1681.         IsWindowsShared = 1
  1682.     ELSE
  1683.         szSys$ = MID$(szSys$, 1, len(szWin$))
  1684.         IF szWin$ = szSys$ THEN
  1685.             IsWindowsShared = 0
  1686.         ELSE
  1687.             IsWindowsShared = 1
  1688.         END IF
  1689.     END IF
  1690. END FUNCTION
  1691.  
  1692.  
  1693. '*************************************************************************
  1694. FUNCTION GetScreenWidth STATIC AS INTEGER
  1695.     GetScreenWidth = GetSystemMetrics(SM_CXSCREEN)
  1696. END FUNCTION
  1697.  
  1698.  
  1699. '*************************************************************************
  1700. FUNCTION GetScreenHeight STATIC AS INTEGER
  1701.     GetScreenHeight = GetSystemMetrics(SM_CYSCREEN)
  1702. END FUNCTION
  1703.  
  1704.  
  1705. '*************************************************************************
  1706. SUB FlushIniFile (szFile$) STATIC
  1707.     n% = WritePrivateProfileString(NULL, NULL, NULL, szFile$)
  1708. END SUB
  1709.  
  1710.  
  1711. '*************************************************************************
  1712. SUB SetRestartDir (szDir$) STATIC
  1713. '$ifdef DEBUG
  1714.     if FValidFATDir(szDir$) = 0 then
  1715.         BadArgErr 1, "SetRestartDir", szDir$
  1716.     end if
  1717. '$endif ''DEBUG
  1718.     IF FSetRestartDir(szDir$) = 0 THEN
  1719. '$ifdef DEBUG
  1720.         StfApiErr saeFail, "SetRestartDir", szDir$
  1721. '$endif ''DEBUG
  1722.         ERROR STFERR
  1723.     END IF
  1724. END SUB
  1725.  
  1726.  
  1727. '*************************************************************************
  1728. FUNCTION RestartListEmpty STATIC AS INTEGER
  1729.     IF FRestartListEmpty() = 0 THEN
  1730.         RestartListEmpty = 0
  1731.     ELSE
  1732.         RestartListEmpty = 1
  1733.     END IF
  1734. END FUNCTION
  1735.  
  1736.  
  1737. '*************************************************************************
  1738. FUNCTION ExitExecRestart STATIC AS INTEGER
  1739.     ExitExecRestart = FExitExecRestart
  1740. END FUNCTION
  1741.  
  1742.  
  1743. '*************************************************************************
  1744. SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%) STATIC
  1745.  
  1746. '$ifdef DEBUG
  1747.     if (FValidFATPath(szSrc$) = 0) AND (szSrc$ <> "") then
  1748.         n% = 1
  1749.     elseif FValidFATPath(szDst$) = 0 then
  1750.         n% = 2
  1751.     elseif FValidFATDir(szDir$) = 0 then
  1752.         n% = 3
  1753.     else
  1754.         n% = 0
  1755.     end if
  1756.     if n% > 0 then
  1757.         BadArgErr n%, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1758.     end if
  1759. '$endif ''DEBUG
  1760.  
  1761.     IF FPrependToPath (szSrc$, szDst$, szDir$, cmo%) = 0 THEN
  1762. '$ifdef DEBUG
  1763.         StfApiErr saeFail, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1764. '$endif ''DEBUG
  1765.         ERROR STFERR
  1766.     END IF
  1767. END SUB
  1768.  
  1769.  
  1770.  
  1771. '**************************************************************************
  1772. '***************************  Error Handlers  *****************************
  1773. '**************************************************************************
  1774.  
  1775.  
  1776. '$ifdef DEBUG
  1777. '**************************************************************************
  1778. SUB StfApiErr (nMsg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1779.     select case nMsg%
  1780.         case saeFail
  1781.             lpText$ = "Failed"
  1782.         case saeInit
  1783.             lpText$ = "Already Initialized"
  1784.         case saeNYI
  1785.             lpText$ = "NYI"
  1786.         case else
  1787.             lpText$ = "Bad Arg "+LTRIM$(STR$(nMsg% - saeArg))
  1788.     end select
  1789.  
  1790.     lpText$ = lpText$ + ": "+ szApi$
  1791.     if szArgs$ <> "" then
  1792.         lpText$ = lpText + " (" + szArgs$ + ")"
  1793.     end if
  1794.     lpCaption$ = "MS-Setup Toolkit API Error"
  1795.     res% = DoMsgBox(lpText$, lpCaption$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  1796.     print lpText$
  1797.     lpText$ = ""
  1798.     lpCaption$ = ""
  1799. END SUB
  1800.  
  1801. '**************************************************************************
  1802. SUB BadArgErr (nArg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1803.     StfApiErr nArg%+saeArg, szApi$, szArgs$
  1804.     ERROR STFERR
  1805. END SUB
  1806.  
  1807.  
  1808. '** REVIEW: Move this function into common lib (we'll need it there too)
  1809. '**************************************************************************
  1810. FUNCTION FValidInfSect (szSect$) STATIC AS INTEGER
  1811.     if (szSect$ = "") OR (INSTR(1,szSect$,"]") <> 0) then
  1812.         FValidInfSect = 0
  1813.     else
  1814.         FValidInfSect = 1
  1815.     end if
  1816. END FUNCTION
  1817.  
  1818.  
  1819. '** REVIEW: Move this function into common lib (we'll need it there too)
  1820. '**************************************************************************
  1821. FUNCTION FValidIniFile (szFile$) STATIC AS INTEGER
  1822.     if (FValidFATPath(szFile$) = 0) AND (UCASE$(szFile$) <> "WIN.INI") then
  1823.         FValidIniFile = 0
  1824.     else
  1825.         FValidIniFile = 1
  1826.     end if
  1827. END FUNCTION
  1828.  
  1829. '**************************************************************************
  1830. FUNCTION FValidDrive (szDrive$) STATIC AS INTEGER
  1831.  
  1832.     if szDrive$ = "" then
  1833.         FValidDrive = 0
  1834.     elseif INSTR(1,szDrive$,"\\") = 1 then   ' UNC path
  1835.         FValidDrive = 1
  1836.     elseif ASC(UCASE$(szDrive$)) - ASC("A") < 0 then
  1837.         FValidDrive = 0
  1838.     elseif ASC(UCASE$(szDrive$)) - ASC("A") > 25 then
  1839.         FValidDrive = 0
  1840.     elseif LEN(szDrive$) = 1 then
  1841.         FValidDrive = 1
  1842.     elseif INSTR(2,szDrive$,":\") = 2 then
  1843.         FValidDrive = 1
  1844.     elseif INSTR(1,szDrive$,":") = 2 then
  1845.         FValidDrive = 1
  1846.     else
  1847.         FValidDrive = 0
  1848.     end if
  1849. END FUNCTION
  1850.  
  1851. '$endif ''DEBUG
  1852.  
  1853.  
  1854. TRAP CleanupTrap From "MSSHLSTF.DLL"
  1855.  
  1856. End Trap
  1857.  
  1858. hSetup = InitSetup(COMMAND$)
  1859.  
  1860. ON ERROR GOTO QUIT
  1861.  
  1862.