'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