home *** CD-ROM | disk | FTP | other *** search
/ Photo Factory for Windows 2.1 / PCD9999.BIN / pfactory / setupapi.inc < prev    next >
Text File  |  1994-06-06  |  57KB  |  1,841 lines

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