Annotation of mstools/mssetup/setupapi.inc, revision 1.1.1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.