summaryrefslogtreecommitdiffstats
path: root/public/sdk/inc/ftestutl.mst
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--public/sdk/inc/ftestutl.mst1214
1 files changed, 1214 insertions, 0 deletions
diff --git a/public/sdk/inc/ftestutl.mst b/public/sdk/inc/ftestutl.mst
new file mode 100644
index 000000000..b258aa75b
--- /dev/null
+++ b/public/sdk/inc/ftestutl.mst
@@ -0,0 +1,1214 @@
+'FTESTUtl.inc - definitions for Fast Test Utility routines
+'
+' Copyright (c) 1991-1992, Microsoft Corporation. All rights reserved.
+'
+'Purpose:
+' This file defines the utility functions of the Fast Test functionality
+'
+'NOTES:
+' See FASTTEST.INC for description of the Error catching that is coded
+' throughout this module.
+
+
+'**********************************************************
+'***************** File Subroutines ***********************
+'**********************************************************
+
+
+'
+' XFileExists(stFileSpec$)
+'
+' Description:
+' Checks that stFileSpec$ exists.
+' logs a failure if it can't find it (them; accept wildcards)
+'
+' Parameters:
+' stFileSpec$ - file specification
+'
+' Returns:
+' nothing
+'
+' Example:
+' XFileExists "*.bak"
+'
+'
+SUB XFileExists(stFileSpec$) STATIC
+ IF NOT EXISTS(stFileSpec$) THEN
+ XLogFailure stFileSpec$ + " doesn't exist"
+ END IF
+END SUB
+
+'
+' XFileNotExists(stFileSpec$)
+'
+' Description:
+' Checks that stFileSpec$ doesn't exist.
+' logs a failure if it finds it (them; accepts wildcards)
+'
+' Parameters:
+' stFileSpec$ - file specification
+'
+' Returns:
+' nothing
+'
+' Example:
+' XFileNotExists "*.bak"
+'
+'
+SUB XFileNotExists(stFileSpec$) STATIC
+ IF EXISTS(stFileSpec$) THEN
+ XLogFailure stFileSpec$ + " exists"
+ END IF
+END SUB
+
+'
+' BFileExists(stFileSpec$)
+'
+' Description:
+' Checks if stFileSpec$ exists
+'
+' Parameters:
+' stFileSpec$ - file specification
+'
+' Returns:
+' TRUE if it exists, FALSE if not
+'
+'
+'
+FUNCTION BFileExists%(stFileSpec$) STATIC
+ BFileExists = EXISTS(stFileSpec$)
+END FUNCTION
+
+
+'
+' XFileCmp(stFileSpec1$,stFileSpec2$)
+'
+' Description:
+' Compares two files, line by line
+' Logs a Failure if the files don't exist or are different
+'
+' Parameters:
+' stFileSpec1$,stFileSpec2 - file specifications
+'
+' Returns:
+' nothing
+'
+' Example:
+' XFileCmp "Foo.dat","foo.bsl"
+'
+'
+'
+SUB XFileCmp(stFileSpec1$,stFileSpec2$) STATIC
+ DIM fh1% ' file handle of first file
+ DIM fh2% ' file handle of second file
+ DIM line1$ ' line from first file
+ DIM line2$ ' line from second file
+ DIM done ' flag to stop looping
+ DIM diff ' flag to indicate if files compare
+
+ gErrorType = ET_NEXT
+ fh1% = FREEFILE
+ OPEN stFileSpec1$ FOR INPUT AS #fh1%
+ fh2% = FREEFILE
+ OPEN stFileSpec2$ FOR INPUT AS #fh2%
+
+ IF gfError THEN
+ XLogFailure "Could not open files for XFileCmp"
+ gErrorType = ET_NOTHING
+ gfError = FALSE
+ EXIT SUB
+ END IF
+
+
+ done = FALSE
+ diff = FALSE
+
+ IF EOF(fh1%) AND EOF(fh2%) THEN
+ done = TRUE
+
+ ELSEIF EOF(fh1%) OR EOF(fh2%) THEN
+ diff = TRUE
+ done = TRUE
+ END IF
+
+
+ WHILE NOT done
+
+ LINE INPUT #fh1%,line1$
+ LINE INPUT #fh2%,line2$
+
+ IF gfError THEN
+ XLogFailure "XFileCmp INPUT or EOF errors"
+ gErrorType = ET_NOTHING
+ gfError = FALSE
+ EXIT SUB
+ END IF
+
+
+ IF line1$ <> line2$ THEN
+ done = TRUE
+ diff = TRUE
+ END IF
+
+ IF NOT done AND EOF(fh1%) AND EOF(fh2%) THEN
+ done = TRUE
+ END IF
+
+ IF NOT done AND (EOF(fh1%) OR EOF(fh2%)) THEN
+ diff = TRUE
+ done = TRUE
+ END IF
+
+ WEND
+
+ CLOSE #fh1%
+ CLOSE #fh2%
+
+ IF gfError THEN
+ XLogFailure "XFileCmp CLOSE errors"
+ gErrorType = ET_NOTHING
+ gfError = FALSE
+ EXIT SUB
+ END IF
+
+ gErrorType = ET_NOTHING
+
+ IF diff THEN
+ XLogFailure "Files " + stFileSpec1$ + "," + stFileSpec2$ + " don't compare"
+ END IF
+
+END SUB
+
+'
+' XFileNotCmp(stFileSpec1$,stFileSpec2$)
+'
+' Description:
+' Compares two files, line by line
+' Logs a Failure if the files don't exist or are same
+'
+' Parameters:
+' stFileSpec1$,stFileSpec2 - file specifications
+'
+' Returns:
+' nothing
+'
+' Example:
+' XFileNotCmp "Foo.dat","foo.bsl"
+'
+'
+'
+SUB XFileNotCmp(stFileSpec1$,stFileSpec2$) STATIC
+ DIM fh1% ' file handle of first file
+ DIM fh2% ' file handle of second file
+ DIM line1$ ' line from first file
+ DIM line2$ ' line from second file
+ DIM done ' flag to stop looping
+ DIM diff ' flag to indicate if files compare
+
+ gErrorType = ET_NEXT
+
+ fh1% = FREEFILE
+ OPEN stFileSpec1$ FOR INPUT AS #fh1%
+ fh2% = FREEFILE
+ OPEN stFileSpec2$ FOR INPUT AS #fh2%
+
+ IF gfError THEN
+ XLogFailure "Could not open files for XFileNotCmp"
+ gErrorType = ET_NOTHING
+ gfError = FALSE
+ EXIT SUB
+ END IF
+
+ done = FALSE
+ diff = FALSE
+
+ IF EOF(fh1%) AND EOF(fh2%) THEN
+ done = TRUE
+ END IF
+
+ IF NOT done AND (EOF(fh1%) OR EOF(fh2%)) THEN
+ diff = TRUE
+ done = TRUE
+ END IF
+
+ WHILE NOT done
+
+ LINE INPUT #fh1%,line1$
+ LINE INPUT #fh2%,line2$
+
+ IF gfError THEN
+ XLogFailure "XFileNotCmp INPUT or EOF errors"
+ gErrorType = ET_NOTHING
+ gfError = FALSE
+ EXIT SUB
+ END IF
+
+ IF line1$ <> line2$ THEN
+ done = TRUE
+ diff = TRUE
+ END IF
+
+ IF NOT done AND EOF(fh1%) AND EOF(fh2%) THEN
+ done = TRUE
+ END IF
+
+ IF NOT done AND (EOF(fh1%) OR EOF(fh2%)) THEN
+ diff = TRUE
+ done = TRUE
+ END IF
+
+ WEND
+
+ CLOSE #fh1%
+ CLOSE #fh2%
+
+ IF gfError THEN
+ XLogFailure "XFileNotCmp CLOSE errors"
+ gErrorType = ET_NOTHING
+ gfError = FALSE
+ EXIT SUB
+ END IF
+
+ gErrorType = ET_NOTHING
+
+ IF NOT diff THEN
+ XLogFailure "Files " + stFileSpec1$ + "," + stFileSpec2$ + " do compare"
+ END IF
+END SUB
+
+'
+' BFileCmp%(stFileSpec1$,stFileSpec2$)
+'
+' Description:
+' Compares two files, line by line
+' Logs a Failure if the files don't exist
+'
+' Parameters:
+' stFileSpec1$,stFileSpec2 - file specifications
+'
+' Returns:
+' FALSE IF XFileCmp would detect an error
+'
+' Example:
+' x% = BFileCmp "Foo.dat","foo.bsl"
+'
+'
+'
+FUNCTION BFileCmp%(stFileSpec1$,stFileSpec2$) STATIC
+ DIM fh1%
+ DIM fh2%
+ DIM line1$
+ DIM line2$
+ DIM done
+ DIM diff
+
+ gErrorType = ET_NEXT
+ fh1% = FREEFILE
+ OPEN stFileSpec1$ FOR INPUT AS #fh1%
+ fh2% = FREEFILE
+ OPEN stFileSpec2$ FOR INPUT AS #fh2%
+
+ IF gfError THEN
+ BFileCmp = FALSE
+ gErrorType = ET_NOTHING
+ gfError = FALSE
+ EXIT FUNCTION
+ END IF
+
+ done = FALSE
+ diff = FALSE
+
+ IF EOF(fh1%) AND EOF(fh2%) THEN
+ done = TRUE
+ END IF
+
+ IF NOT done AND (EOF(fh1%) OR EOF(fh2%)) THEN
+ diff = TRUE
+ done = TRUE
+ END IF
+
+ WHILE NOT done
+
+ LINE INPUT #fh1%,line1$
+ LINE INPUT #fh2%,line2$
+
+ IF gfError THEN
+ BFileCmp = FALSE
+ gErrorType = ET_NOTHING
+ gfError = FALSE
+ EXIT FUNCTION
+ END IF
+
+ IF line1$ <> line2$ THEN
+ done = TRUE
+ diff = TRUE
+ END IF
+
+ IF NOT done AND EOF(fh1%) AND EOF(fh2%) THEN
+ done = TRUE
+ END IF
+
+ IF NOT done AND (EOF(fh1%) OR EOF(fh2%)) THEN
+ diff = TRUE
+ done = TRUE
+ END IF
+
+ WEND
+
+ CLOSE #fh1%
+ CLOSE #fh2%
+
+ IF gfError THEN
+ BFileCmp = FALSE
+ gErrorType = ET_NOTHING
+ gfError = FALSE
+ EXIT FUNCTION
+ END IF
+
+ BFileCmp = NOT diff ' IF different a log failure would normally happen
+
+END FUNCTION
+
+
+'
+' XDeleteFile(stFileSpec$)
+'
+' Description:
+' Will delete stFileSpec$ if it, they, exists.
+' logs a failure if it can't delete them or if the file(s)
+' doesn't exist
+'
+' Parameters:
+' stFileSpec$ - file specification
+'
+' Returns:
+' nothing
+'
+' Example:
+' XDeleteFile "*.bak"
+'
+'
+SUB XDeleteFile(stFileSpec$) STATIC
+ IF EXISTS(stFileSpec$) THEN
+ gErrorType = ET_NEXT
+ KILL stFileSpec$
+ IF gfError THEN
+ XLogFailure "XDeleteFile " + stFileSpec$ + " could NOT be deleted"
+ gfError = FALSE
+ END IF
+ gErrorType = ET_NOTHING
+ ELSE
+ XLogFailure "XDeleteFile " + stFileSpec$ + " NOT deleted (doesn't exist)."
+ END IF
+END SUB
+
+'
+' XDeleteFileIfExists(stFileSpec$)
+'
+' Description:
+' Will delete stFileSpec$ if it, they, exists.
+' logs a failure if it can't delete them but doesn't if the file(s)
+' doesn't exist
+'
+' Parameters:
+' stFileSpec$ - file specification
+'
+' Returns:
+' nothing
+'
+' Example:
+' XDeleteFileIfExists "*.bak"
+'
+'
+SUB XDeleteFileIfExists(stFileSpec$) STATIC
+ IF EXISTS(stFileSpec$) THEN
+ gErrorType = ET_NEXT
+ KILL stFileSpec$
+ IF gfError THEN
+ XLogFailure "XDeleteFileIfExists " + stFileSpec$ + " could NOT be deleted"
+ gfError = FALSE
+ END IF
+ gErrorType = ET_NOTHING
+ END IF
+END SUB
+
+'
+' XCreateFile(stFileSpec$,s$)
+'
+' Description:
+' Will Create stFileSpec$ and put string in it
+' logs a failure if it can't Create it
+'
+' Parameters:
+' stFileSpec$ - file specification
+'
+' Returns:
+' nothing
+'
+' Example:
+' XCreateFile "foo.dat","Hello world"
+'
+'
+'
+
+SUB XCreateFile(stFileSpec$,s$) STATIC
+ DIM fh%
+ gErrorType = ET_NEXT
+ fh% = FREEFILE
+
+ OPEN stFileSpec$ FOR OUTPUT AS #fh%
+
+ PRINT #fh%,s$ ' put the string in the file
+
+ CLOSE #fh%
+
+ IF gfError THEN
+ XLogFailure "XCreateFile encountered runtime errors"
+ gfError = FALSE
+ END IF
+ gErrorType = ET_NOTHING
+
+END SUB
+
+'
+' XAppendFile(stFileSpec$,s$)
+'
+' Description:
+' Will Append stFileSpec$ and put string in it
+' logs a failure if it can't Append it
+'
+' Parameters:
+' stFileSpec$ - file specification
+'
+' Returns:
+' nothing
+'
+' Example:
+' XAppendFile "foo.dat","Hello world"
+'
+'
+'
+
+SUB XAppendFile(stFileSpec$,s$) STATIC
+ DIM fh%
+
+ gErrorType = ET_NEXT
+
+ fh% = FREEFILE
+
+ OPEN stFileSpec$ FOR APPEND AS #fh%
+
+ PRINT #fh%,s$ ' put the string in the file
+
+ CLOSE #fh%
+
+ IF gfError THEN
+ XLogFailure "XAppendFile encountered runtime errors"
+ gfError = FALSE
+ END IF
+ gErrorType = ET_NOTHING
+
+END SUB
+
+
+'
+' XWaitMessageFile(s$,Message$,WaitTime%)
+'
+' Description:
+' Wait for file to exist, only wait up to given time,
+' check if string is in file (if string is non-empty)
+' logs a failure if the files doesn't exist, or when
+' it does and the string isn't in it.
+'
+' Parameters:
+' s$ - file specification
+' Message$ - the string to look for
+' WaitTime% - the longest to wait
+'
+' Returns:
+' nothing
+'
+' Example:
+' XWaitMessageFile "foo.dat","Hello world",20
+'
+'
+'
+
+SUB XWaitMessageFile(s$,Message$, WaitTime%) STATIC
+
+ DIM fDone% ' flag to stop looping
+ DIM fFound% ' flag to indicate if file found
+ DIM lineIn$ ' line from file
+ DIM inret% ' return from INSTR
+ DIM fh% ' File handle
+
+ fDone = FALSE
+ fFound = FALSE
+
+ WHILE NOT fDone
+
+ IF EXISTS(s$) THEN
+ fDone = TRUE
+ fFound = TRUE
+ ELSE
+ SLEEP 1
+
+ WaitTime% = WaitTime% - 1
+ IF WaitTime% <= 0 THEN
+ fDone = TRUE
+ END IF
+ END IF
+ WEND
+
+ IF NOT fFound% THEN
+ XLogFailure "FAIL """ + s$ + """ Message File not found"
+ ELSE
+
+ IF Message$ = "" THEN
+ ' don't bother searching if no string given
+ EXIT SUB
+ END IF
+
+ fDone = FALSE
+ fFOUND = FALSE
+
+ gErrorType = ET_NEXT
+
+ fh% = FREEFILE
+
+ OPEN s$ FOR INPUT AS # fh%
+
+ IF EOF(fh%) THEN
+ fDone% = TRUE
+ END IF
+
+ IF gfError THEN
+ XLogFailure "XWaitMessageFile encountered runtime error during OPEN"
+ gErrorType = ET_NOTHING
+ gfError = FALSE
+ EXIT SUB
+ END IF
+
+ WHILE NOT fDone%
+
+ LINE INPUT # fh%, lineIn$
+
+ IF gfError THEN
+ XLogFailure "XWaitMessageFile encountered runtime error during INPUT"
+ gErrorType = ET_NOTHING
+ gfError = FALSE
+ EXIT SUB
+ END IF
+
+ inret% = INSTR(lineIn$,Message$)
+
+ IF inret% <> 0 THEN
+ fFound% = TRUE
+ fDone = TRUE
+ END IF
+
+ IF EOF(fh%) THEN
+ fDone% = TRUE
+ END IF
+ WEND
+
+ CLOSE # fh%
+
+ IF gfError THEN
+ XLogFailure "XWaitMessageFile encountered runtime error during CLOSE"
+ gErrorType = ET_NOTHING
+ gfError = FALSE
+ EXIT SUB
+ END IF
+ gErrorType = ET_NOTHING
+
+ IF NOT fFound% THEN
+ XLogFailure "FAIL, found """ + s$ + """ Message File, """ + Message$ + """ not in it"
+ END IF
+ END IF
+END SUB
+
+'**********************************************************
+'***************** Directory Subroutines ******************
+'**********************************************************
+
+'
+' XCWDCmp(s$)
+'
+' Description:
+' Compare the current working directory and log error if it
+' doesn't match the expected value
+'
+' Parameters:
+' s$ - the expected value for the current directory
+'
+' Returns:
+' nothing
+'
+' Example:
+' XCWDCmp "c:\tests"
+'
+
+SUB XCWDCmp(s$) STATIC
+
+ IF BCWDCmp(s$) = 0 THEN
+ XLogFailure "Current working directory (" + UCASE$(CURDIR$) + ") doesn't match " + UCASE$(s$)
+ END IF
+END SUB
+
+'
+' XCWDNotCmp(s$)
+'
+' Description:
+' Compare the current working directory and log error if it
+' does match the given value
+'
+' Parameters:
+' s$ - the value for the directory that isn't expected
+'
+' Returns:
+' nothing
+'
+' Example:
+' XCWDNotCmp "c:\tests"
+'
+
+SUB XCWDNotCmp(s$) STATIC
+
+ IF UCASE$(CURDIR$) = UCASE$(s$) THEN
+ XLogFailure "Current working directory (" + UCASE$(CURDIR$) + ") matches " + UCASE$(s$)
+ END IF
+END SUB
+
+'
+' BCWDCmp(s$)
+'
+' Description:
+' return compare of the current working directory and the expected value
+'
+' Parameters:
+' s$ - the expected value for the current directory
+'
+' Returns:
+' TRUE if matches, FALSE if doesn't
+'
+' Example:
+' flag% = BCWDCmp("c:\tests")
+'
+
+FUNCTION BCWDCmp%(s$) STATIC
+
+ BCWDCmp = UCASE$(CURDIR$) = UCASE$(s$)
+
+END FUNCTION
+
+'
+' XDriveCmp(s$)
+'
+' Description:
+' Compare the current working drive and log error if it
+' doesn't match the expected value
+'
+' Parameters:
+' s$ - the expected value for the current drive
+'
+' Returns:
+' nothing
+'
+' Example:
+' XDriveCmp "c:"
+'
+
+SUB XDriveCmp(s$) STATIC
+
+ IF BDriveCmp%(s$) = 0 THEN
+ XLogFailure "Current working Drive (" + MID$(UCASE$(CURDIR$),1,2) + ") doesn't match " + UCASE$(s$)
+ END IF
+END SUB
+
+'
+' XDriveNotCmp(s$)
+'
+' Description:
+' Compare the current working drive and log error if it
+' does match the given value
+'
+' Parameters:
+' s$ - the expected value for the current drive
+'
+' Returns:
+' nothing
+'
+' Example:
+' XDriveNotCmp "c:"
+'
+SUB XDriveNotCmp(s$) STATIC
+
+ IF MID$(UCASE$(CURDIR$),1,2) = UCASE$(s$) THEN
+ XLogFailure "Current working Drive (" + MID$(UCASE$(CURDIR$),1,2) + ") matches " + s$
+ END IF
+END SUB
+
+'
+' BDriveCmp(s$)
+'
+' Description:
+' return compare the current working drive and the expected value
+'
+' Parameters:
+' s$ - the expected value for the current drive
+'
+' Returns:
+' TRUE if matches, FALSE if doesn't
+'
+' Example:
+' flag% = BDriveCmp("c:")
+'
+
+FUNCTION BDriveCmp%(s$) STATIC
+
+ BDriveCmp = MID$(UCASE$(CURDIR$),1,2) = UCASE$(s$)
+
+END FUNCTION
+
+'
+' XChangeCWD(s$)
+'
+' Description:
+' Change to given working directory, log failure if doesn't succeed
+'
+' Parameters:
+' s$ - directory to change to
+'
+' Returns:
+' nothing
+'
+' Example:
+' XChangeCWD "\tmp"
+'
+'
+SUB XChangeCWD(s$) STATIC
+ gErrorType = ET_NEXT
+ CHDIR s$
+ IF gfError THEN
+ XLogFailure "XChangeCWD could not change directory"
+ gfError = FALSE
+ END IF
+ gErrorType = ET_NOTHING
+END SUB
+
+'
+' XCreateDir(s$)
+'
+' Description:
+' Create the given directory, log failure if doesn't succeed
+'
+' Parameters:
+' s$ - directory to create
+'
+' Returns:
+' nothing
+'
+' Example:
+' XCreateDir "\tmpdir"
+'
+'
+SUB XCreateDir(s$) STATIC
+ gErrorType = ET_NEXT
+ MKDIR s$
+ IF gfError THEN
+ XLogFailure "XCreateDir could not create directory"
+ gfError = FALSE
+ END IF
+ gErrorType = ET_NOTHING
+END SUB
+
+'
+' XChangeDrive(s$)
+'
+' Description:
+' Change the current working drive, log failure if doesn't succeed
+'
+' Parameters:
+' s$ - drive to change to
+'
+' Returns:
+' nothing
+'
+' Example:
+' XChangeDrive "c:"
+'
+'
+SUB XChangeDrive(s$) STATIC
+ gErrorType = ET_NEXT
+ CHDRIVE s$
+ IF gfError THEN
+ XLogFailure "XChangeDrive could not change drive"
+ gfError = FALSE
+ END IF
+ gErrorType = ET_NOTHING
+END SUB
+
+'**********************************************************
+'***************** Program Subroutines ********************
+'**********************************************************
+
+
+
+'
+' HStartApp%(stAppName$)
+'
+' Description:
+' Starts app AppName and returns the handle to the App
+'
+' Parameters:
+' stAppName$ - name of app to WinExec and get handle to
+'
+' Returns:
+' handle to application started
+'
+' Example:
+' hWinHelp% = HStartApp("winhelp.exe")
+'
+'
+FUNCTION HStartApp%(stAppName$) STATIC
+ DIM Bogus%, hwndActive%, hwndNewApp%
+ DIM lpszTemp$
+
+ ' Get the current foreground window
+ hwndActive = GetForegroundWindow ()
+
+ Bogus% = WinExec (stAppName$, SW_SHOWNORMAL)
+ lpszTemp$ = "WinExec error with " + stAppName$ + " :"
+
+ ' WinExec defines SOME of the values between 0 and 32
+ ' as errors... any return value greater than 32
+ ' should be considered a success!
+ SELECT CASE Bogus%
+ CASE 0
+ XLogFailure lpszTemp$ + "Out of memory - exiting"
+
+ CASE 2
+ XLogFailure lpszTemp$ + "File not found"
+ End
+ CASE 3
+ XLogFailure lpszTemp$ + "Path not found"
+
+ CASE 5
+ XLogFailure lpszTemp$ + "Attempt to dynamically link to a task"
+
+ CASE 6
+ XLogFailure lpszTemp$ + "Library requires separate data segments"
+
+ CASE 10
+ XLogFailure lpszTemp$ + "Incorrect Windows version"
+
+ CASE 11
+ XLogFailure lpszTemp$ + "Invalid EXE file"
+
+ CASE 12
+ XLogFailure lpszTemp$ + "OS/2 application"
+
+ CASE 13
+ XLogFailure lpszTemp$ + "DOS 4.0 application"
+
+ CASE 14
+ XLogFailure lpszTemp$ + "Unknown EXE type"
+
+ CASE 15
+ XLogFailure lpszTemp$ + "Must run in real mode Windows"
+
+ CASE 16
+ XLogFailure lpszTemp$ + "Cannot run more than one instance"
+
+ CASE 17
+ XLogFailure lpszTemp$ + "Large-frame EMS allows only one instance"
+
+ CASE 18
+ XLogFailure lpszTemp$ + "Must run in standard or enhanced mode Windows"
+
+ CASE 0 TO 32
+ XLogFailure lpszTemp$ + "Unknown Error in WinExec"
+
+ END SELECT
+
+ ' Wait until the old foreground window is no longer the foreground wnd
+ while hwndActive = GetForegroundWindow
+ sleep 1
+ wend
+
+ HStartApp = GetForegroundWindow ()
+END FUNCTION
+
+'
+' XStartApp(stAppName$)
+'
+' Description:
+' Starts app AppName and sets handle to ghAppHwnd.
+' if we get a null handle, THEN we end the script here.
+'
+' Parameters:
+' stAppName$ - name of app to WinExec
+'
+' Returns:
+' nothing
+'
+' Example:
+' XStartApp "winhelp.exe"
+'
+'
+SUB XStartApp(stAppName$, stClassname$) STATIC
+ DIM logstr$
+ 'ghAppHwnd is a global
+ ghAppHwnd = HStartApp(stAppName$)
+ IF (ghAppHwnd = 0) THEN
+ 'we didn't get a handle
+ XLogFailure "Unable to start app " + stAppName$
+ ELSEIF stClassname$ <> "" THEN
+ gsAppClassname = stClassname$ ' remember it for later
+ IF FindWindow(stClassname$,NULL) = 0 THEN
+ ' The app isn't around
+ logstr$ = "The app " + stAppName$ + " started but didn't stay OR..."
+ logstr$ = logstr$ + CRLF$ + "the given class name ("
+ logstr$ = logstr$ + stClassname$ + ") is incorrect"
+ XLogFailure logstr$
+ END IF
+ END IF
+END SUB
+
+'
+' XSetCleanup(sCleanup$)
+'
+' Description:
+' Stores a user defined DoKeys string to be used to exit the
+' application automatically. If set to an empty string,
+' nothing will be sent with DoKeys but there will still be
+' a log failure if the application is still running when the
+' script ends (no check is done if there wasn't a classname
+' supplied with XStartApp
+'
+' Parameters:
+' sCleanup$ - the string to use with DoKeys to end the app
+'
+' Returns:
+' nothing
+'
+' Example:
+' XSetCleanup "{esc 5}%vx"
+'
+'
+SUB XSetCleanup (sCleanup$) STATIC
+ gsCleanup$ = sCleanup$
+END SUB
+
+' This routine is not intended to be called in the user script.
+' This routine is executed when the script finishes with an END
+' statement. Its purpose is to find the application started with
+' XStartapp using the classname supplied there. if it exists,
+' and the gsCleanup string is nonempty, the gsCleanup string will
+' be played. This may still not get rid of the app for various
+' reasons: maybe it is prompting to save a file, or it won't exit
+' a dialog...
+
+SUB XDoCleanup STATIC
+ DIM logstr$
+ IF gsCleanup$ <> "" AND gsAppClassname$ <> "" AND FindWindow(gsAppClassname$,NULL) <> 0 THEN
+ DoKeys gsCleanup$
+ END IF
+ IF gsAppClassname$ <> "" AND FindWindow(gsAppClassname$,NULL) <> 0 THEN
+ logstr$ = "The app with class name " + gsAppClassname$ + " was not"
+ logstr$ = logstr$ + CRLF$ + "halted by the cleanup string " + gsCleanup$
+ XLogFailure logstr$
+ END IF
+
+END SUB
+
+
+
+'**********************************************************
+'***************** Mouse Subroutines **********************
+'**********************************************************
+
+' The mouse routines use the VK_LBUTTON, VK_RBUTTON, VK_MBUTTON
+' constants to determine which button to use (or LBUTTON, MBUTTON or RBUTTON
+' as defined in fasttest.inc
+
+
+'
+' XMoveMouse(x%,y%)
+'
+' Description:
+' Moves the mouse pointer to specified absolute screen coordinates
+'
+' Parameters:
+' x%,y% - x and y coordinates to move to
+'
+' Returns:
+' nothing
+'
+' Example:
+' XMoveMouse 100,120
+'
+'
+
+SUB XMoveMouse (x%, y%) STATIC
+
+ QueMouseMove x%,y%
+ QueFlush FALSE
+END SUB
+
+
+'
+' XClickMouse(button%,x%,y%)
+'
+' Description:
+' Clicks the mouse pointer to specified absolute screen coordinates
+'
+' Parameters:
+' button% - which button to click
+' x%,y% - x and y coordinates to move to
+'
+' Returns:
+' nothing
+'
+' Example:
+' XClickMouse LBUTTON,100,120
+'
+'
+
+SUB XClickMouse(button%, x%, y%) STATIC
+
+ QueMouseDn button%,x%,y%
+ QueMouseUp button%,x%,y%
+ QueFlush FALSE
+
+END SUB
+
+'
+' XDblClickMouse(button%,x%,y%)
+'
+' Description:
+' Clicks the mouse pointer to specified absolute screen coordinates
+'
+' Parameters:
+' button% - which button to double click
+' x%,y% - x and y coordinates to move to
+'
+' Returns:
+' nothing
+'
+' Example:
+' XDblClickMouse LBUTTON,100,120
+'
+'
+SUB XDblClickMouse(button%, x%, y%) STATIC
+
+ QueMouseDblClk button%,x%,y%
+ QueFlush FALSE
+
+END SUB
+
+'
+' XDragMouse (button%, Begx%, Begy%, Endx%, Endy%)
+'
+' Description:
+' Drags the mouse pointer to specified absolute screen coordinates
+'
+' Parameters:
+' button% - which button to use for dragging
+' Begx%,Begy% - x and y coordinates to Drag from
+' Endx%,Endy% - x and y coordinates to Drag to
+'
+' Returns:
+' nothing
+'
+' Example:
+' XDragMouse LBUTTON,100,120, 200,220
+'
+'
+SUB XDragMouse (button%, Begx%, Begy%, Endx%, Endy%) STATIC
+
+ QueMouseDn button%,Begx%,Begy%
+ QueMouseMove Endx%,Endy%
+ QueMouseUp button%,Endx%,Endy%
+ QueFlush FALSE
+END SUB
+
+
+
+
+'**********************************************************
+'***************** ClipBoard Subroutines ******************
+'**********************************************************
+
+
+'
+' XClipBoardCmp(s$)
+'
+' Description:
+' Compare given string to what is in the clipboard, log failure
+' if they don't match
+'
+' Parameters:
+' s$ - string to compare
+'
+' Returns:
+' nothing
+'
+' Example:
+' XClipBoardCmp "07734"
+'
+'
+SUB XClipBoardCmp (s$) STATIC
+
+ IF s$ <> CLIPBOARD$ THEN
+ XLogFailure "String does not match clipboard"
+ END IF
+END SUB
+
+'
+' XClipBoardNotCmp(s$)
+'
+' Description:
+' Compare given string to what is in the clipboard, log failure
+' if they match
+'
+' Parameters:
+' s$ - string to compare
+'
+' Returns:
+' nothing
+'
+' Example:
+' XClipBoardNotCmp "07734"
+'
+'
+SUB XClipBoardNotCmp (s$) STATIC
+
+ IF s$ = CLIPBOARD$ THEN
+ XLogFailure "String does match clipboard"
+ END IF
+END SUB
+
+'
+' BClipBoardCmp(s$)
+'
+' Description:
+' Compare given string to what is in the clipboard, log failure
+' if they don't match
+'
+' Parameters:
+' s$ - string to compare
+'
+' Returns:
+' TRUE if matches, FALSE if doesn't
+'
+' Example:
+' flag% = BClipBoardCmp "07734"
+'
+'
+FUNCTION BClipBoardCmp (s$) STATIC
+
+ BClipBoardCmp = s$ = CLIPBOARD$
+END FUNCTION
+