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