|
|
1.1 root 1: 'FTESTUtl.inc - definitions for Fast Test Utility routines
2: '
3: ' Copyright (c) 1991-1992, Microsoft Corporation. All rights reserved.
4: '
5: 'Purpose:
6: ' This file defines the utility functions of the Fast Test functionality
7: '
8: 'NOTES:
9: ' See FASTTEST.INC for description of the Error catching that is coded
10: ' throughout this module.
11:
12:
13: '**********************************************************
14: '***************** File Subroutines ***********************
15: '**********************************************************
16:
17:
18: '
19: ' XFileExists(stFileSpec$)
20: '
21: ' Description:
22: ' Checks that stFileSpec$ exists.
23: ' logs a failure if it can't find it (them; accept wildcards)
24: '
25: ' Parameters:
26: ' stFileSpec$ - file specification
27: '
28: ' Returns:
29: ' nothing
30: '
31: ' Example:
32: ' XFileExists "*.bak"
33: '
34: '
35: SUB XFileExists(stFileSpec$) STATIC
36: IF NOT EXISTS(stFileSpec$) THEN
37: XLogFailure stFileSpec$ + " doesn't exist"
38: END IF
39: END SUB
40:
41: '
42: ' XFileNotExists(stFileSpec$)
43: '
44: ' Description:
45: ' Checks that stFileSpec$ doesn't exist.
46: ' logs a failure if it finds it (them; accepts wildcards)
47: '
48: ' Parameters:
49: ' stFileSpec$ - file specification
50: '
51: ' Returns:
52: ' nothing
53: '
54: ' Example:
55: ' XFileNotExists "*.bak"
56: '
57: '
58: SUB XFileNotExists(stFileSpec$) STATIC
59: IF EXISTS(stFileSpec$) THEN
60: XLogFailure stFileSpec$ + " exists"
61: END IF
62: END SUB
63:
64: '
65: ' BFileExists(stFileSpec$)
66: '
67: ' Description:
68: ' Checks if stFileSpec$ exists
69: '
70: ' Parameters:
71: ' stFileSpec$ - file specification
72: '
73: ' Returns:
74: ' TRUE if it exists, FALSE if not
75: '
76: '
77: '
78: FUNCTION BFileExists%(stFileSpec$) STATIC
79: BFileExists = EXISTS(stFileSpec$)
80: END FUNCTION
81:
82:
83: '
84: ' XFileCmp(stFileSpec1$,stFileSpec2$)
85: '
86: ' Description:
87: ' Compares two files, line by line
88: ' Logs a Failure if the files don't exist or are different
89: '
90: ' Parameters:
91: ' stFileSpec1$,stFileSpec2 - file specifications
92: '
93: ' Returns:
94: ' nothing
95: '
96: ' Example:
97: ' XFileCmp "Foo.dat","foo.bsl"
98: '
99: '
100: '
101: SUB XFileCmp(stFileSpec1$,stFileSpec2$) STATIC
102: DIM fh1% ' file handle of first file
103: DIM fh2% ' file handle of second file
104: DIM line1$ ' line from first file
105: DIM line2$ ' line from second file
106: DIM done ' flag to stop looping
107: DIM diff ' flag to indicate if files compare
108:
109: gErrorType = ET_NEXT
110: fh1% = FREEFILE
111: OPEN stFileSpec1$ FOR INPUT AS #fh1%
112: fh2% = FREEFILE
113: OPEN stFileSpec2$ FOR INPUT AS #fh2%
114:
115: IF gfError THEN
116: XLogFailure "Could not open files for XFileCmp"
117: gErrorType = ET_NOTHING
118: gfError = FALSE
119: EXIT SUB
120: END IF
121:
122:
123: done = FALSE
124: diff = FALSE
125:
126: IF EOF(fh1%) AND EOF(fh2%) THEN
127: done = TRUE
128:
129: ELSEIF EOF(fh1%) OR EOF(fh2%) THEN
130: diff = TRUE
131: done = TRUE
132: END IF
133:
134:
135: WHILE NOT done
136:
137: LINE INPUT #fh1%,line1$
138: LINE INPUT #fh2%,line2$
139:
140: IF gfError THEN
141: XLogFailure "XFileCmp INPUT or EOF errors"
142: gErrorType = ET_NOTHING
143: gfError = FALSE
144: EXIT SUB
145: END IF
146:
147:
148: IF line1$ <> line2$ THEN
149: done = TRUE
150: diff = TRUE
151: END IF
152:
153: IF NOT done AND EOF(fh1%) AND EOF(fh2%) THEN
154: done = TRUE
155: END IF
156:
157: IF NOT done AND (EOF(fh1%) OR EOF(fh2%)) THEN
158: diff = TRUE
159: done = TRUE
160: END IF
161:
162: WEND
163:
164: CLOSE #fh1%
165: CLOSE #fh2%
166:
167: IF gfError THEN
168: XLogFailure "XFileCmp CLOSE errors"
169: gErrorType = ET_NOTHING
170: gfError = FALSE
171: EXIT SUB
172: END IF
173:
174: gErrorType = ET_NOTHING
175:
176: IF diff THEN
177: XLogFailure "Files " + stFileSpec1$ + "," + stFileSpec2$ + " don't compare"
178: END IF
179:
180: END SUB
181:
182: '
183: ' XFileNotCmp(stFileSpec1$,stFileSpec2$)
184: '
185: ' Description:
186: ' Compares two files, line by line
187: ' Logs a Failure if the files don't exist or are same
188: '
189: ' Parameters:
190: ' stFileSpec1$,stFileSpec2 - file specifications
191: '
192: ' Returns:
193: ' nothing
194: '
195: ' Example:
196: ' XFileNotCmp "Foo.dat","foo.bsl"
197: '
198: '
199: '
200: SUB XFileNotCmp(stFileSpec1$,stFileSpec2$) STATIC
201: DIM fh1% ' file handle of first file
202: DIM fh2% ' file handle of second file
203: DIM line1$ ' line from first file
204: DIM line2$ ' line from second file
205: DIM done ' flag to stop looping
206: DIM diff ' flag to indicate if files compare
207:
208: gErrorType = ET_NEXT
209:
210: fh1% = FREEFILE
211: OPEN stFileSpec1$ FOR INPUT AS #fh1%
212: fh2% = FREEFILE
213: OPEN stFileSpec2$ FOR INPUT AS #fh2%
214:
215: IF gfError THEN
216: XLogFailure "Could not open files for XFileNotCmp"
217: gErrorType = ET_NOTHING
218: gfError = FALSE
219: EXIT SUB
220: END IF
221:
222: done = FALSE
223: diff = FALSE
224:
225: IF EOF(fh1%) AND EOF(fh2%) THEN
226: done = TRUE
227: END IF
228:
229: IF NOT done AND (EOF(fh1%) OR EOF(fh2%)) THEN
230: diff = TRUE
231: done = TRUE
232: END IF
233:
234: WHILE NOT done
235:
236: LINE INPUT #fh1%,line1$
237: LINE INPUT #fh2%,line2$
238:
239: IF gfError THEN
240: XLogFailure "XFileNotCmp INPUT or EOF errors"
241: gErrorType = ET_NOTHING
242: gfError = FALSE
243: EXIT SUB
244: END IF
245:
246: IF line1$ <> line2$ THEN
247: done = TRUE
248: diff = TRUE
249: END IF
250:
251: IF NOT done AND EOF(fh1%) AND EOF(fh2%) THEN
252: done = TRUE
253: END IF
254:
255: IF NOT done AND (EOF(fh1%) OR EOF(fh2%)) THEN
256: diff = TRUE
257: done = TRUE
258: END IF
259:
260: WEND
261:
262: CLOSE #fh1%
263: CLOSE #fh2%
264:
265: IF gfError THEN
266: XLogFailure "XFileNotCmp CLOSE errors"
267: gErrorType = ET_NOTHING
268: gfError = FALSE
269: EXIT SUB
270: END IF
271:
272: gErrorType = ET_NOTHING
273:
274: IF NOT diff THEN
275: XLogFailure "Files " + stFileSpec1$ + "," + stFileSpec2$ + " do compare"
276: END IF
277: END SUB
278:
279: '
280: ' BFileCmp%(stFileSpec1$,stFileSpec2$)
281: '
282: ' Description:
283: ' Compares two files, line by line
284: ' Logs a Failure if the files don't exist
285: '
286: ' Parameters:
287: ' stFileSpec1$,stFileSpec2 - file specifications
288: '
289: ' Returns:
290: ' FALSE IF XFileCmp would detect an error
291: '
292: ' Example:
293: ' x% = BFileCmp "Foo.dat","foo.bsl"
294: '
295: '
296: '
297: FUNCTION BFileCmp%(stFileSpec1$,stFileSpec2$) STATIC
298: DIM fh1%
299: DIM fh2%
300: DIM line1$
301: DIM line2$
302: DIM done
303: DIM diff
304:
305: gErrorType = ET_NEXT
306: fh1% = FREEFILE
307: OPEN stFileSpec1$ FOR INPUT AS #fh1%
308: fh2% = FREEFILE
309: OPEN stFileSpec2$ FOR INPUT AS #fh2%
310:
311: IF gfError THEN
312: BFileCmp = FALSE
313: gErrorType = ET_NOTHING
314: gfError = FALSE
315: EXIT FUNCTION
316: END IF
317:
318: done = FALSE
319: diff = FALSE
320:
321: IF EOF(fh1%) AND EOF(fh2%) THEN
322: done = TRUE
323: END IF
324:
325: IF NOT done AND (EOF(fh1%) OR EOF(fh2%)) THEN
326: diff = TRUE
327: done = TRUE
328: END IF
329:
330: WHILE NOT done
331:
332: LINE INPUT #fh1%,line1$
333: LINE INPUT #fh2%,line2$
334:
335: IF gfError THEN
336: BFileCmp = FALSE
337: gErrorType = ET_NOTHING
338: gfError = FALSE
339: EXIT FUNCTION
340: END IF
341:
342: IF line1$ <> line2$ THEN
343: done = TRUE
344: diff = TRUE
345: END IF
346:
347: IF NOT done AND EOF(fh1%) AND EOF(fh2%) THEN
348: done = TRUE
349: END IF
350:
351: IF NOT done AND (EOF(fh1%) OR EOF(fh2%)) THEN
352: diff = TRUE
353: done = TRUE
354: END IF
355:
356: WEND
357:
358: CLOSE #fh1%
359: CLOSE #fh2%
360:
361: IF gfError THEN
362: BFileCmp = FALSE
363: gErrorType = ET_NOTHING
364: gfError = FALSE
365: EXIT FUNCTION
366: END IF
367:
368: BFileCmp = NOT diff ' IF different a log failure would normally happen
369:
370: END FUNCTION
371:
372:
373: '
374: ' XDeleteFile(stFileSpec$)
375: '
376: ' Description:
377: ' Will delete stFileSpec$ if it, they, exists.
378: ' logs a failure if it can't delete them or if the file(s)
379: ' doesn't exist
380: '
381: ' Parameters:
382: ' stFileSpec$ - file specification
383: '
384: ' Returns:
385: ' nothing
386: '
387: ' Example:
388: ' XDeleteFile "*.bak"
389: '
390: '
391: SUB XDeleteFile(stFileSpec$) STATIC
392: IF EXISTS(stFileSpec$) THEN
393: gErrorType = ET_NEXT
394: KILL stFileSpec$
395: IF gfError THEN
396: XLogFailure "XDeleteFile " + stFileSpec$ + " could NOT be deleted"
397: gfError = FALSE
398: END IF
399: gErrorType = ET_NOTHING
400: ELSE
401: XLogFailure "XDeleteFile " + stFileSpec$ + " NOT deleted (doesn't exist)."
402: END IF
403: END SUB
404:
405: '
406: ' XDeleteFileIfExists(stFileSpec$)
407: '
408: ' Description:
409: ' Will delete stFileSpec$ if it, they, exists.
410: ' logs a failure if it can't delete them but doesn't if the file(s)
411: ' doesn't exist
412: '
413: ' Parameters:
414: ' stFileSpec$ - file specification
415: '
416: ' Returns:
417: ' nothing
418: '
419: ' Example:
420: ' XDeleteFileIfExists "*.bak"
421: '
422: '
423: SUB XDeleteFileIfExists(stFileSpec$) STATIC
424: IF EXISTS(stFileSpec$) THEN
425: gErrorType = ET_NEXT
426: KILL stFileSpec$
427: IF gfError THEN
428: XLogFailure "XDeleteFileIfExists " + stFileSpec$ + " could NOT be deleted"
429: gfError = FALSE
430: END IF
431: gErrorType = ET_NOTHING
432: END IF
433: END SUB
434:
435: '
436: ' XCreateFile(stFileSpec$,s$)
437: '
438: ' Description:
439: ' Will Create stFileSpec$ and put string in it
440: ' logs a failure if it can't Create it
441: '
442: ' Parameters:
443: ' stFileSpec$ - file specification
444: '
445: ' Returns:
446: ' nothing
447: '
448: ' Example:
449: ' XCreateFile "foo.dat","Hello world"
450: '
451: '
452: '
453:
454: SUB XCreateFile(stFileSpec$,s$) STATIC
455: DIM fh%
456: gErrorType = ET_NEXT
457: fh% = FREEFILE
458:
459: OPEN stFileSpec$ FOR OUTPUT AS #fh%
460:
461: PRINT #fh%,s$ ' put the string in the file
462:
463: CLOSE #fh%
464:
465: IF gfError THEN
466: XLogFailure "XCreateFile encountered runtime errors"
467: gfError = FALSE
468: END IF
469: gErrorType = ET_NOTHING
470:
471: END SUB
472:
473: '
474: ' XAppendFile(stFileSpec$,s$)
475: '
476: ' Description:
477: ' Will Append stFileSpec$ and put string in it
478: ' logs a failure if it can't Append it
479: '
480: ' Parameters:
481: ' stFileSpec$ - file specification
482: '
483: ' Returns:
484: ' nothing
485: '
486: ' Example:
487: ' XAppendFile "foo.dat","Hello world"
488: '
489: '
490: '
491:
492: SUB XAppendFile(stFileSpec$,s$) STATIC
493: DIM fh%
494:
495: gErrorType = ET_NEXT
496:
497: fh% = FREEFILE
498:
499: OPEN stFileSpec$ FOR APPEND AS #fh%
500:
501: PRINT #fh%,s$ ' put the string in the file
502:
503: CLOSE #fh%
504:
505: IF gfError THEN
506: XLogFailure "XAppendFile encountered runtime errors"
507: gfError = FALSE
508: END IF
509: gErrorType = ET_NOTHING
510:
511: END SUB
512:
513:
514: '
515: ' XWaitMessageFile(s$,Message$,WaitTime%)
516: '
517: ' Description:
518: ' Wait for file to exist, only wait up to given time,
519: ' check if string is in file (if string is non-empty)
520: ' logs a failure if the files doesn't exist, or when
521: ' it does and the string isn't in it.
522: '
523: ' Parameters:
524: ' s$ - file specification
525: ' Message$ - the string to look for
526: ' WaitTime% - the longest to wait
527: '
528: ' Returns:
529: ' nothing
530: '
531: ' Example:
532: ' XWaitMessageFile "foo.dat","Hello world",20
533: '
534: '
535: '
536:
537: SUB XWaitMessageFile(s$,Message$, WaitTime%) STATIC
538:
539: DIM fDone% ' flag to stop looping
540: DIM fFound% ' flag to indicate if file found
541: DIM lineIn$ ' line from file
542: DIM inret% ' return from INSTR
543: DIM fh% ' File handle
544:
545: fDone = FALSE
546: fFound = FALSE
547:
548: WHILE NOT fDone
549:
550: IF EXISTS(s$) THEN
551: fDone = TRUE
552: fFound = TRUE
553: ELSE
554: SLEEP 1
555:
556: WaitTime% = WaitTime% - 1
557: IF WaitTime% <= 0 THEN
558: fDone = TRUE
559: END IF
560: END IF
561: WEND
562:
563: IF NOT fFound% THEN
564: XLogFailure "FAIL """ + s$ + """ Message File not found"
565: ELSE
566:
567: IF Message$ = "" THEN
568: ' don't bother searching if no string given
569: EXIT SUB
570: END IF
571:
572: fDone = FALSE
573: fFOUND = FALSE
574:
575: gErrorType = ET_NEXT
576:
577: fh% = FREEFILE
578:
579: OPEN s$ FOR INPUT AS # fh%
580:
581: IF EOF(fh%) THEN
582: fDone% = TRUE
583: END IF
584:
585: IF gfError THEN
586: XLogFailure "XWaitMessageFile encountered runtime error during OPEN"
587: gErrorType = ET_NOTHING
588: gfError = FALSE
589: EXIT SUB
590: END IF
591:
592: WHILE NOT fDone%
593:
594: LINE INPUT # fh%, lineIn$
595:
596: IF gfError THEN
597: XLogFailure "XWaitMessageFile encountered runtime error during INPUT"
598: gErrorType = ET_NOTHING
599: gfError = FALSE
600: EXIT SUB
601: END IF
602:
603: inret% = INSTR(lineIn$,Message$)
604:
605: IF inret% <> 0 THEN
606: fFound% = TRUE
607: fDone = TRUE
608: END IF
609:
610: IF EOF(fh%) THEN
611: fDone% = TRUE
612: END IF
613: WEND
614:
615: CLOSE # fh%
616:
617: IF gfError THEN
618: XLogFailure "XWaitMessageFile encountered runtime error during CLOSE"
619: gErrorType = ET_NOTHING
620: gfError = FALSE
621: EXIT SUB
622: END IF
623: gErrorType = ET_NOTHING
624:
625: IF NOT fFound% THEN
626: XLogFailure "FAIL, found """ + s$ + """ Message File, """ + Message$ + """ not in it"
627: END IF
628: END IF
629: END SUB
630:
631: '**********************************************************
632: '***************** Directory Subroutines ******************
633: '**********************************************************
634:
635: '
636: ' XCWDCmp(s$)
637: '
638: ' Description:
639: ' Compare the current working directory and log error if it
640: ' doesn't match the expected value
641: '
642: ' Parameters:
643: ' s$ - the expected value for the current directory
644: '
645: ' Returns:
646: ' nothing
647: '
648: ' Example:
649: ' XCWDCmp "c:\tests"
650: '
651:
652: SUB XCWDCmp(s$) STATIC
653:
654: IF BCWDCmp(s$) = 0 THEN
655: XLogFailure "Current working directory (" + UCASE$(CURDIR$) + ") doesn't match " + UCASE$(s$)
656: END IF
657: END SUB
658:
659: '
660: ' XCWDNotCmp(s$)
661: '
662: ' Description:
663: ' Compare the current working directory and log error if it
664: ' does match the given value
665: '
666: ' Parameters:
667: ' s$ - the value for the directory that isn't expected
668: '
669: ' Returns:
670: ' nothing
671: '
672: ' Example:
673: ' XCWDNotCmp "c:\tests"
674: '
675:
676: SUB XCWDNotCmp(s$) STATIC
677:
678: IF UCASE$(CURDIR$) = UCASE$(s$) THEN
679: XLogFailure "Current working directory (" + UCASE$(CURDIR$) + ") matches " + UCASE$(s$)
680: END IF
681: END SUB
682:
683: '
684: ' BCWDCmp(s$)
685: '
686: ' Description:
687: ' return compare of the current working directory and the expected value
688: '
689: ' Parameters:
690: ' s$ - the expected value for the current directory
691: '
692: ' Returns:
693: ' TRUE if matches, FALSE if doesn't
694: '
695: ' Example:
696: ' flag% = BCWDCmp("c:\tests")
697: '
698:
699: FUNCTION BCWDCmp%(s$) STATIC
700:
701: BCWDCmp = UCASE$(CURDIR$) = UCASE$(s$)
702:
703: END FUNCTION
704:
705: '
706: ' XDriveCmp(s$)
707: '
708: ' Description:
709: ' Compare the current working drive and log error if it
710: ' doesn't match the expected value
711: '
712: ' Parameters:
713: ' s$ - the expected value for the current drive
714: '
715: ' Returns:
716: ' nothing
717: '
718: ' Example:
719: ' XDriveCmp "c:"
720: '
721:
722: SUB XDriveCmp(s$) STATIC
723:
724: IF BDriveCmp%(s$) = 0 THEN
725: XLogFailure "Current working Drive (" + MID$(UCASE$(CURDIR$),1,2) + ") doesn't match " + UCASE$(s$)
726: END IF
727: END SUB
728:
729: '
730: ' XDriveNotCmp(s$)
731: '
732: ' Description:
733: ' Compare the current working drive and log error if it
734: ' does match the given value
735: '
736: ' Parameters:
737: ' s$ - the expected value for the current drive
738: '
739: ' Returns:
740: ' nothing
741: '
742: ' Example:
743: ' XDriveNotCmp "c:"
744: '
745: SUB XDriveNotCmp(s$) STATIC
746:
747: IF MID$(UCASE$(CURDIR$),1,2) = UCASE$(s$) THEN
748: XLogFailure "Current working Drive (" + MID$(UCASE$(CURDIR$),1,2) + ") matches " + s$
749: END IF
750: END SUB
751:
752: '
753: ' BDriveCmp(s$)
754: '
755: ' Description:
756: ' return compare the current working drive and the expected value
757: '
758: ' Parameters:
759: ' s$ - the expected value for the current drive
760: '
761: ' Returns:
762: ' TRUE if matches, FALSE if doesn't
763: '
764: ' Example:
765: ' flag% = BDriveCmp("c:")
766: '
767:
768: FUNCTION BDriveCmp%(s$) STATIC
769:
770: BDriveCmp = MID$(UCASE$(CURDIR$),1,2) = UCASE$(s$)
771:
772: END FUNCTION
773:
774: '
775: ' XChangeCWD(s$)
776: '
777: ' Description:
778: ' Change to given working directory, log failure if doesn't succeed
779: '
780: ' Parameters:
781: ' s$ - directory to change to
782: '
783: ' Returns:
784: ' nothing
785: '
786: ' Example:
787: ' XChangeCWD "\tmp"
788: '
789: '
790: SUB XChangeCWD(s$) STATIC
791: gErrorType = ET_NEXT
792: CHDIR s$
793: IF gfError THEN
794: XLogFailure "XChangeCWD could not change directory"
795: gfError = FALSE
796: END IF
797: gErrorType = ET_NOTHING
798: END SUB
799:
800: '
801: ' XCreateDir(s$)
802: '
803: ' Description:
804: ' Create the given directory, log failure if doesn't succeed
805: '
806: ' Parameters:
807: ' s$ - directory to create
808: '
809: ' Returns:
810: ' nothing
811: '
812: ' Example:
813: ' XCreateDir "\tmpdir"
814: '
815: '
816: SUB XCreateDir(s$) STATIC
817: gErrorType = ET_NEXT
818: MKDIR s$
819: IF gfError THEN
820: XLogFailure "XCreateDir could not create directory"
821: gfError = FALSE
822: END IF
823: gErrorType = ET_NOTHING
824: END SUB
825:
826: '
827: ' XChangeDrive(s$)
828: '
829: ' Description:
830: ' Change the current working drive, log failure if doesn't succeed
831: '
832: ' Parameters:
833: ' s$ - drive to change to
834: '
835: ' Returns:
836: ' nothing
837: '
838: ' Example:
839: ' XChangeDrive "c:"
840: '
841: '
842: SUB XChangeDrive(s$) STATIC
843: gErrorType = ET_NEXT
844: CHDRIVE s$
845: IF gfError THEN
846: XLogFailure "XChangeDrive could not change drive"
847: gfError = FALSE
848: END IF
849: gErrorType = ET_NOTHING
850: END SUB
851:
852: '**********************************************************
853: '***************** Program Subroutines ********************
854: '**********************************************************
855:
856:
857:
858: '
859: ' HStartApp%(stAppName$)
860: '
861: ' Description:
862: ' Starts app AppName and returns the handle to the App
863: '
864: ' Parameters:
865: ' stAppName$ - name of app to WinExec and get handle to
866: '
867: ' Returns:
868: ' handle to application started
869: '
870: ' Example:
871: ' hWinHelp% = HStartApp("winhelp.exe")
872: '
873: '
874: FUNCTION HStartApp%(stAppName$) STATIC
875: DIM Bogus%, hwndActive%, hwndNewApp%
876: DIM lpszTemp$
877:
878: ' Get the current foreground window
879: hwndActive = GetForegroundWindow ()
880:
881: Bogus% = WinExec (stAppName$, SW_SHOWNORMAL)
882: lpszTemp$ = "WinExec error with " + stAppName$ + " :"
883:
884: ' WinExec defines SOME of the values between 0 and 32
885: ' as errors... any return value greater than 32
886: ' should be considered a success!
887: SELECT CASE Bogus%
888: CASE 0
889: XLogFailure lpszTemp$ + "Out of memory - exiting"
890:
891: CASE 2
892: XLogFailure lpszTemp$ + "File not found"
893: End
894: CASE 3
895: XLogFailure lpszTemp$ + "Path not found"
896:
897: CASE 5
898: XLogFailure lpszTemp$ + "Attempt to dynamically link to a task"
899:
900: CASE 6
901: XLogFailure lpszTemp$ + "Library requires separate data segments"
902:
903: CASE 10
904: XLogFailure lpszTemp$ + "Incorrect Windows version"
905:
906: CASE 11
907: XLogFailure lpszTemp$ + "Invalid EXE file"
908:
909: CASE 12
910: XLogFailure lpszTemp$ + "OS/2 application"
911:
912: CASE 13
913: XLogFailure lpszTemp$ + "DOS 4.0 application"
914:
915: CASE 14
916: XLogFailure lpszTemp$ + "Unknown EXE type"
917:
918: CASE 15
919: XLogFailure lpszTemp$ + "Must run in real mode Windows"
920:
921: CASE 16
922: XLogFailure lpszTemp$ + "Cannot run more than one instance"
923:
924: CASE 17
925: XLogFailure lpszTemp$ + "Large-frame EMS allows only one instance"
926:
927: CASE 18
928: XLogFailure lpszTemp$ + "Must run in standard or enhanced mode Windows"
929:
930: CASE 0 TO 32
931: XLogFailure lpszTemp$ + "Unknown Error in WinExec"
932:
933: END SELECT
934:
935: ' Wait until the old foreground window is no longer the foreground wnd
936: while hwndActive = GetForegroundWindow
937: sleep 1
938: wend
939:
940: HStartApp = GetForegroundWindow ()
941: END FUNCTION
942:
943: '
944: ' XStartApp(stAppName$)
945: '
946: ' Description:
947: ' Starts app AppName and sets handle to ghAppHwnd.
948: ' if we get a null handle, THEN we end the script here.
949: '
950: ' Parameters:
951: ' stAppName$ - name of app to WinExec
952: '
953: ' Returns:
954: ' nothing
955: '
956: ' Example:
957: ' XStartApp "winhelp.exe"
958: '
959: '
960: SUB XStartApp(stAppName$, stClassname$) STATIC
961: DIM logstr$
962: 'ghAppHwnd is a global
963: ghAppHwnd = HStartApp(stAppName$)
964: IF (ghAppHwnd = 0) THEN
965: 'we didn't get a handle
966: XLogFailure "Unable to start app " + stAppName$
967: ELSEIF stClassname$ <> "" THEN
968: gsAppClassname = stClassname$ ' remember it for later
969: IF FindWindow(stClassname$,NULL) = 0 THEN
970: ' The app isn't around
971: logstr$ = "The app " + stAppName$ + " started but didn't stay OR..."
972: logstr$ = logstr$ + CRLF$ + "the given class name ("
973: logstr$ = logstr$ + stClassname$ + ") is incorrect"
974: XLogFailure logstr$
975: END IF
976: END IF
977: END SUB
978:
979: '
980: ' XSetCleanup(sCleanup$)
981: '
982: ' Description:
983: ' Stores a user defined DoKeys string to be used to exit the
984: ' application automatically. If set to an empty string,
985: ' nothing will be sent with DoKeys but there will still be
986: ' a log failure if the application is still running when the
987: ' script ends (no check is done if there wasn't a classname
988: ' supplied with XStartApp
989: '
990: ' Parameters:
991: ' sCleanup$ - the string to use with DoKeys to end the app
992: '
993: ' Returns:
994: ' nothing
995: '
996: ' Example:
997: ' XSetCleanup "{esc 5}%vx"
998: '
999: '
1000: SUB XSetCleanup (sCleanup$) STATIC
1001: gsCleanup$ = sCleanup$
1002: END SUB
1003:
1004: ' This routine is not intended to be called in the user script.
1005: ' This routine is executed when the script finishes with an END
1006: ' statement. Its purpose is to find the application started with
1007: ' XStartapp using the classname supplied there. if it exists,
1008: ' and the gsCleanup string is nonempty, the gsCleanup string will
1009: ' be played. This may still not get rid of the app for various
1010: ' reasons: maybe it is prompting to save a file, or it won't exit
1011: ' a dialog...
1012:
1013: SUB XDoCleanup STATIC
1014: DIM logstr$
1015: IF gsCleanup$ <> "" AND gsAppClassname$ <> "" AND FindWindow(gsAppClassname$,NULL) <> 0 THEN
1016: DoKeys gsCleanup$
1017: END IF
1018: IF gsAppClassname$ <> "" AND FindWindow(gsAppClassname$,NULL) <> 0 THEN
1019: logstr$ = "The app with class name " + gsAppClassname$ + " was not"
1020: logstr$ = logstr$ + CRLF$ + "halted by the cleanup string " + gsCleanup$
1021: XLogFailure logstr$
1022: END IF
1023:
1024: END SUB
1025:
1026:
1027:
1028: '**********************************************************
1029: '***************** Mouse Subroutines **********************
1030: '**********************************************************
1031:
1032: ' The mouse routines use the VK_LBUTTON, VK_RBUTTON, VK_MBUTTON
1033: ' constants to determine which button to use (or LBUTTON, MBUTTON or RBUTTON
1034: ' as defined in fasttest.inc
1035:
1036:
1037: '
1038: ' XMoveMouse(x%,y%)
1039: '
1040: ' Description:
1041: ' Moves the mouse pointer to specified absolute screen coordinates
1042: '
1043: ' Parameters:
1044: ' x%,y% - x and y coordinates to move to
1045: '
1046: ' Returns:
1047: ' nothing
1048: '
1049: ' Example:
1050: ' XMoveMouse 100,120
1051: '
1052: '
1053:
1054: SUB XMoveMouse (x%, y%) STATIC
1055:
1056: QueMouseMove x%,y%
1057: QueFlush FALSE
1058: END SUB
1059:
1060:
1061: '
1062: ' XClickMouse(button%,x%,y%)
1063: '
1064: ' Description:
1065: ' Clicks the mouse pointer to specified absolute screen coordinates
1066: '
1067: ' Parameters:
1068: ' button% - which button to click
1069: ' x%,y% - x and y coordinates to move to
1070: '
1071: ' Returns:
1072: ' nothing
1073: '
1074: ' Example:
1075: ' XClickMouse LBUTTON,100,120
1076: '
1077: '
1078:
1079: SUB XClickMouse(button%, x%, y%) STATIC
1080:
1081: QueMouseDn button%,x%,y%
1082: QueMouseUp button%,x%,y%
1083: QueFlush FALSE
1084:
1085: END SUB
1086:
1087: '
1088: ' XDblClickMouse(button%,x%,y%)
1089: '
1090: ' Description:
1091: ' Clicks the mouse pointer to specified absolute screen coordinates
1092: '
1093: ' Parameters:
1094: ' button% - which button to double click
1095: ' x%,y% - x and y coordinates to move to
1096: '
1097: ' Returns:
1098: ' nothing
1099: '
1100: ' Example:
1101: ' XDblClickMouse LBUTTON,100,120
1102: '
1103: '
1104: SUB XDblClickMouse(button%, x%, y%) STATIC
1105:
1106: QueMouseDblClk button%,x%,y%
1107: QueFlush FALSE
1108:
1109: END SUB
1110:
1111: '
1112: ' XDragMouse (button%, Begx%, Begy%, Endx%, Endy%)
1113: '
1114: ' Description:
1115: ' Drags the mouse pointer to specified absolute screen coordinates
1116: '
1117: ' Parameters:
1118: ' button% - which button to use for dragging
1119: ' Begx%,Begy% - x and y coordinates to Drag from
1120: ' Endx%,Endy% - x and y coordinates to Drag to
1121: '
1122: ' Returns:
1123: ' nothing
1124: '
1125: ' Example:
1126: ' XDragMouse LBUTTON,100,120, 200,220
1127: '
1128: '
1129: SUB XDragMouse (button%, Begx%, Begy%, Endx%, Endy%) STATIC
1130:
1131: QueMouseDn button%,Begx%,Begy%
1132: QueMouseMove Endx%,Endy%
1133: QueMouseUp button%,Endx%,Endy%
1134: QueFlush FALSE
1135: END SUB
1136:
1137:
1138:
1139:
1140: '**********************************************************
1141: '***************** ClipBoard Subroutines ******************
1142: '**********************************************************
1143:
1144:
1145: '
1146: ' XClipBoardCmp(s$)
1147: '
1148: ' Description:
1149: ' Compare given string to what is in the clipboard, log failure
1150: ' if they don't match
1151: '
1152: ' Parameters:
1153: ' s$ - string to compare
1154: '
1155: ' Returns:
1156: ' nothing
1157: '
1158: ' Example:
1159: ' XClipBoardCmp "07734"
1160: '
1161: '
1162: SUB XClipBoardCmp (s$) STATIC
1163:
1164: IF s$ <> CLIPBOARD$ THEN
1165: XLogFailure "String does not match clipboard"
1166: END IF
1167: END SUB
1168:
1169: '
1170: ' XClipBoardNotCmp(s$)
1171: '
1172: ' Description:
1173: ' Compare given string to what is in the clipboard, log failure
1174: ' if they match
1175: '
1176: ' Parameters:
1177: ' s$ - string to compare
1178: '
1179: ' Returns:
1180: ' nothing
1181: '
1182: ' Example:
1183: ' XClipBoardNotCmp "07734"
1184: '
1185: '
1186: SUB XClipBoardNotCmp (s$) STATIC
1187:
1188: IF s$ = CLIPBOARD$ THEN
1189: XLogFailure "String does match clipboard"
1190: END IF
1191: END SUB
1192:
1193: '
1194: ' BClipBoardCmp(s$)
1195: '
1196: ' Description:
1197: ' Compare given string to what is in the clipboard, log failure
1198: ' if they don't match
1199: '
1200: ' Parameters:
1201: ' s$ - string to compare
1202: '
1203: ' Returns:
1204: ' TRUE if matches, FALSE if doesn't
1205: '
1206: ' Example:
1207: ' flag% = BClipBoardCmp "07734"
1208: '
1209: '
1210: FUNCTION BClipBoardCmp (s$) STATIC
1211:
1212: BClipBoardCmp = s$ = CLIPBOARD$
1213: END FUNCTION
1214:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.