10 CLEAR 200:DIM V$(71)
20 FOR I=1 TO 15:PRINT :NEXT 
30 PRINT "THIS IS A TEST PROGRAM TO TEST THE FUNCTIONS AND COMMANDS OF"
40 PRINT "THIS INTERPRETER. SOME OF THE LIBRARY CAN NOT BE TESTED BY A PROGRAM,"
50 PRINT "SINCE THEY CANNOT BE EXECUTED WHILE IN THE PROGRAM MODE."
60 PRINT "THIS PROGRAM WILL NOT TEST THE FOLLOWING FUNCTIONS OR COMMANDS:"
70 PRINT :PRINT "END,RUN,STOP,CONT,CLEAR,FILEND,SETEOF"
80 PRINT "CLOAD,LOAD,TLOAD,DADD,NEW,BYE,EDIT"
90 PRINT :PRINT "FIRST, THE FUNCTION LIBRARY WILL BE TESTED, THEN THE VERB LIBRARY."
100 PRINT :PRINT "EACH TEST WILL LIST THE FUNCTION, A VARIABLE, THE COMPUTED RESULT,"
110 PRINT "AND THE CORRECT ANSWER."
120 PRINT 
130 PRINT "FIRST, PLEASE PROVIDE SOME SYSTEM INFORMATION.":PRINT 
140 LL=PEEK(&108)
150 WW=PEEK(&107)
160 AA=PEEK(&106)*256+PEEK(&105)
170 PRINT "TO INITIALIZE THE VIDEO BOARD, DO YOU NEED TO:"
180 PRINT "   (1) OUTPUT A VALUE TO AN I/O PORT"
190 PRINT "   (2) WRITE A VALUE TO AN ADDRESS IN RAM"
200 PRINT "   (3) NO SPECIAL INITIALIZATION REQUIRED":PRINT 
210 INPUT "INITIALIZATION PROCEDURE (1,2,3)";II
220 ON II GOTO 240,280,310
230 GOTO 170
240 INPUT "PORT NUMBER";P
250 INPUT "VALUE";V
260 OUT P,V
270 GOTO 310
280 INPUT "CONTROL BYTE ADDRESS";A
290 INPUT "CONTROL BYTE VALUE";V
300 POKE A,V
310 PRINT :PRINT "TO MAKE THE TESTS MORE CLEAR, IT IS ADVISABLE TO ERASE THE"
320 PRINT "CONSOLE DISPLAY AFTER EACH ONE. SINCE SCREEN CLEAR FUNCTIONS"
330 PRINT "VARY WIDELY FROM SYSTEM TO SYSTEM, PLEASE ENTER THE CONTROL"
340 PRINT "CHARACTER SEQUENCE REQUIRED TO CLEAR YOUR SCREEN. IF YOUR"
350 PRINT "CONSOLE HAS NO SCREEN CLEAR FUNCTION, ENTER A NUMBER OF LINE"
360 PRINT "FEED CHARACTERS (LINE FEED IS NORMALLY A 10) EQUAL TO THE"
370 PRINT "NUMBER OF LINES ON YOUR CONSOLE.":PRINT 
380 INPUT "NUMBER OF CHARACTERS IN SCREEN CLEAR SEQUENCE";A
390 FOR I=1 TO A:INPUT "DECIMAL EQUIVALENT OF CHARACTER";B
400 SC$=SC$+CHR$(B)
410 NEXT 
420 PRINT :PRINT :PRINT "THE ERASE SEQUENCE WILL NOW BE TESTED."
430 PRINT :INPUT "PRESS 'RETURN' TO ERASE THE SCREEN";, LINE A$
440 PRINT SC$
450 INPUT "IS THE SCREEN CLEAR SEQUENCE OPERATING SATISFACTORILY (Y/N)";A$
460 IF A$="Y" THEN 480 ELSE IF A$="N" THEN 380 ELSE 450
470 REM END OF INITIALIZATION 
480 C=3:GOSUB 10000
490 FOR I=1 TO C:PRINT "SGN",A(I),SGN(A(I)),B(I):NEXT 
500 DATA "ALGEBRAIC SIGN",-1,-1,0,0,1,1
510 C=3:GOSUB 10000
520 FOR I=1 TO C:PRINT "INT",A(I),INT(A(I)),B(I):NEXT 
530 DATA "HIGHEST INTEGER WITHIN",1.25,1,.25,0,-3.6,-4
540 C=3:GOSUB 10000
550 FOR I=1 TO C:PRINT "ABS",A(I),ABS(A(I)),B(I):NEXT 
560 DATA "ABSOLUTE VALUE",3,3,0,0,-5,5
570 C=2:GOSUB 10000
580 FOR I=1 TO C:PRINT "SQR",A(I),SQR(A(I)),B(I):NEXT 
590 DATA "SQUARE ROOT",49,7,1.024E+11,320000
600 C=2:GOSUB 10000
610 FOR I=1 TO C:PRINT "LOG",A(I),LOG(A(I)),B(I):NEXT 
620 DATA "NATURAL LOGARITHM",123456,11.7236,.987654,-1.24228E-02
630 C=2:GOSUB 10000
640 FOR I=1 TO C:PRINT "EXP",A(I),EXP(A(I)),B(I):NEXT 
650 DATA "NATURAL EXPONENTIATION",11,59874.1,2.3,9.97418
660 C=2:GOSUB 10000
670 FOR I=1 TO C:PRINT "COS",A(I),COS(A(I)),B(I):NEXT 
680 DATA "COSINE",18,.660317,23.75,.18695
690 C=2:GOSUB 10000
700 FOR I=1 TO C:PRINT "SIN",A(I),SIN(A(I)),B(I):NEXT 
710 DATA "SINE",12,-.536573,3,.14112
720 C=2:GOSUB 10000
730 FOR I=1 TO C:PRINT "TAN",A(I),TAN(A(I)),B(I):NEXT 
740 DATA "TANGENT",.254,.259607,.886,1.22455
750 C=2:GOSUB 10000
760 FOR I=1 TO C:PRINT "ATN",A(I),ATN(A(I)),B(I):NEXT 
770 DATA "ARCTANGENT",.5874,.531103,1.258,.899165
780 C=1:GOSUB 10000
790 FOR I=1 TO C:PRINT "POS",A(I),POS(0),B(I):NEXT 
800 DATA "OUTPUT CURSOR POSITION",0,28
810 C=1:GOSUB 11000
820 FOR I=1 TO C:PRINT "LEN",S$(I),LEN(S$(I)),B(I):NEXT 
830 DATA "LENGTH OF STRING","ABCDEFGHIJKL",12
840 C=1:GOSUB 10000
850 FOR I=1 TO C:PRINT "STR$",A(I),STR$(A(I)),B(I):NEXT 
860 DATA "CONVERT NUMBER TO STRING",12345,12345
870 C=2:GOSUB 11000
880 FOR I=1 TO C:PRINT "VAL",B(I),VAL(S$(I)),S$(I):NEXT 
890 DATA "CONVERT STRING TO NUMBER","54321",54321,"123.45",123.45
900 C=2:GOSUB 11000
910 FOR I=1 TO C:PRINT "ASC",S$(I),ASC(S$(I)),B(I):NEXT 
920 DATA "NUMERIC ASCII EQUIVALENT OF STRING CHARACTER","ABC",65,"!",33
930 C=2:GOSUB 11000
940 FOR I=1 TO C:PRINT "CHR$",B(I),CHR$(B(I)),S$(I):NEXT 
950 DATA "ONE BYTE ASCII EQUIVALENT OF NUMBER","*",42,"A",65
960 C=2:GOSUB 12000
970 FOR I=1 TO C:PRINT "LEFT$",S$(I),LEFT$(S$(I),5),T$(I):NEXT 
980 DATA "LEFT (N) BYTES OF STRING","ABCDEFGH","ABCDE","XYZ","XYZ"
990 C=2:GOSUB 12000
1000 FOR I=1 TO C:PRINT "RIGHT$",S$(I),RIGHT$(S$(I),5),T$(I):NEXT 
1010 DATA "RIGHT (N) BYTES OF STRING","ABCDEFGH","DEFGH","XYZ","XYZ"
1020 C=2:GOSUB 12000
1030 FOR I=1 TO C:PRINT "MID$",S$(I),MID$(S$(I),3,5),T$(I):NEXT 
1040 DATA "MIDDLE SECTION OF STRING","AABBBBBCC","BBBBB","XXYZ","YZ"
1050 C=3:GOSUB 10000
1060 FOR I=1 TO C:PRINT "AND (7)",A(I),(A(I) AND 7),B(I):NEXT 
1070 DATA "BOOLEAN AND",63,7,5,5,128,0
1080 C=2:GOSUB 10000
1090 FOR I=1 TO C:PRINT "OR (7)",A(I),(A(I) OR 7),B(I):NEXT 
1100 DATA "BOOLEAN OR",5,7,9,15
1110 C=3:GOSUB 10000
1120 FOR I=1 TO C:PRINT "(X>3)",A(I),(A(I)>3),B(I):NEXT 
1130 DATA "LOGICAL COMPARE, GREATER",2,0,3,0,4,-1
1140 C=3:GOSUB 10000
1150 FOR I=1 TO C:PRINT "(X=3)",A(I),(A(I)=3),B(I):NEXT 
1160 DATA "LOGICAL COMPARE, EQUAL",2,0,3,-1,4,0
1170 C=3:GOSUB 10000
1180 FOR I=1 TO C:PRINT "(X<3)",A(I),(A(I)<3),B(I):NEXT 
1190 DATA "LOGICAL COMPARE, LESS",2,-1,3,0,4,0
1200 C=3:GOSUB 10000
1210 FOR I=1 TO C:PRINT "(X<>3)",A(I),(A(I)<>3),B(I):NEXT 
1220 DATA "LOGICAL COMPARE, UNEQUAL",2,-1,3,0,4,-1
1230 C=4:GOSUB 10000
1240 FOR I=1 TO C:PRINT "VARPTR",A(I),PEEK(VARPTR(C)+I-1),B(I):NEXT 
1250 DATA "VARIABLE POINTER",0,0,1,0,2,0,3,131
1260 C=4:GOSUB 10000
1270 FOR I=1 TO C:PRINT "CINP",A(I),CINP(A(I)),B(I):NEXT 
1280 DATA "CONSOLE INPUT (PLEASE PRESS 'A' TWICE)",0,0,1,0,2,1,3,65
1290 C=5:GOSUB 10000
1300 PRINT "X*5",A(1),A(1)*5,B(1)
1310 PRINT "X/5",A(2),A(2)/5,B(2)
1320 PRINT "X+5",A(3),A(3)+5,B(3)
1330 PRINT "X-5",A(4),A(4)-5,B(4)
1340 PRINT "X^5",A(5),A(5)^5,B(5)
1350 DATA "MATHEMATICAL OPERATIONS",7,35,7,1.4,7,12,7,2,7,16807
1360 C=3:GOSUB 10000
1370 FOR I=1 TO C:PRINT "RND",A(I),RND(A(I)),B(I):NEXT 
1380 DATA "RANDOM NUMBER GENERATOR",-1,7.65943E-06,0,7.65943E-6,1,.163989
1390 C=2:GOSUB 12000
1400 PRINT "FRE (NUMERIC)",S$(1),FRE(0),T$(1)
1410 PRINT "FRE (STRING)",S$(2),FRE("A"),T$(2)
1420 DATA "FREE SPACE","0","VARIABLE SPACE",("A"),"STRING SPACE"
1430 C=2:GOSUB 10000
1440 FOR I=1 TO C:PRINT "PEEK",A(I),PEEK(A(I)),B(I):NEXT 
1450 DATA "MEMORY PEEK",0,195,1,3
1460 GOSUB 13000
1470 PRINT "THE NEXT IS FOR THE 'INP' FUNCTION."
1480 INPUT "WHAT I/O PORT IS YOUR KEYBOARD (IN DECIMAL)";P
1490 PRINT "THE LAST VALUE INPUT WAS A RETURN, SO THE PORT SHOULD READ A 13."
1500 PRINT :PRINT "AN INP FROM PORT"P"RETURNS"INP(P)"."
1510 GOSUB 13000
1520 TRAP ; GOTO 1540
1530 GARBAGE
1540 PRINT "THE ERROR LINE NUMBER AND ERROR CODE TEST SHOULD REPORT"
1550 PRINT "THE LAST ERROR WAS SYNTAX (2) ON LINE 1530"
1560 PRINT :PRINT "IT READS ERROR CODE"ERRC(0)"ON LINE"ERRL(0)"."
1570 PRINT :INPUT "PRESS 'RETURN' FOR THE NEXT TEST";, LINE AA$
1580 FOR I=1 TO 30:PRINT :NEXT 
1590 SS$="SUCCESSFUL":PP$="THE NEXT LINE SHOULD READ"
1600 PRINT "THIS PROGRAM WILL NOW ATTEMPT TO TEST THE COMMANDS."
1610 PRINT "IN MOST TESTS, THE CONTINUATION OF THE PROGRAM INDICATES THE"
1620 PRINT "VERB OPERATES PROPERLY. FAILURE SHOULD CAUSE UNPREDICTABLE RESULTS."
1630 PRINT "EACH TEST WILL IDENTIFY THE TEST TO FOLLOW, SO THAT IT MAY BE"
1640 PRINT "DETERMINED IF THE PROGRAM HAS CONTINUED IMPROPERLY."
1650 PRINT :INPUT "PRESS 'RETURN' TO BEGIN COMMAND TESTS.";, LINE A$
1660 REM FIRST, LOAD THE TABLES FOR THE VERB TEST. 
1670 DATA END,FOR/NEXT,DATA,INPUT,DIM,READ,LET,GOTO,CGOTO,RUN,FAST,IF,RESTORE
1680 DATA GOSUB,CGOSUB,RETURN,REM,STOP,OUT,ON,NULL,WAIT,POKE,PRINT,DEF,CONT
1690 DATA LIST,CLEAR,CLOAD,CSAVE,CINPUT,CPRINT,LOAD,SAVE,TLOAD,TSAVE,DIR,RESET
1700 DATA DELETE,OPEN,CREATE,CLOSE,DPRINT,DINPUT,REWIND,DADD,GET,PUT,FILEND
1710 DATA RENAME,SETEOF,SCROLL,VPRINT,VINPUT,WIDTH,LLIST,LPRINT,NEW,CALL
1720 DATA PLOT,DRAW,FILL,BYE,DDT,TRAP,TRACE,RANDOMIZE,MOVE,EDIT,FINISHED
1730 TRAP ; GOTO 18190
1740 FOR I=1 TO 70:READ V$(I):NEXT 
1750 X=1
1760 REM END
1770 GOSUB 14010:IF AA$<>"Y" THEN 1800
1780 GOSUB 15000
1790 REM FOR/NEXT
1800 GOSUB 14000:IF AA$<>"Y" THEN 1840
1810 PRINT PP$:PRINT "* 0 * 2 * 4 * 6 * 8":PRINT 
1820 FOR I=0 TO 8 STEP 2:PRINT "*";I;:NEXT 
1830 REM DATA
1840 GOSUB 14000:IF AA$<>"Y" THEN 1910
1850 PRINT PP$:PRINT " 1  2  3  4  5"
1860 RESTORE 1880
1870 FOR I=1 TO 5:READ A(I):NEXT 
1880 DATA 1,2,3,4,5
1890 FOR I=1 TO 5:PRINT A(I);:NEXT 
1900 REM INPUT
1910 GOSUB 14000:IF AA$<>"Y" THEN 1970
1920 PRINT "ENTER A LINE OF DATA, THEN COMPARE WHAT YOU KEYED WITH THE SECOND LINE."
1930 INPUT LINE A$
1940 PRINT "  ";A$
1950 PRINT :PRINT "IF THE LINES MATCH, THE STATEMENT IS WORKING PROPERLY."
1960 REM DIM
1970 GOSUB 14000:IF AA$<>"Y" THEN 2040
1980 DIM T(12)
1990 PRINT PP$
2000 PRINT " 1  2  3  4  5  6  7  8  9  10  11  12"
2010 FOR I=1 TO 12:T(I)=I:NEXT 
2020 FOR I=1 TO 12:PRINT T(I);:NEXT 
2030 REM READ
2040 GOSUB 14000:IF AA$<>"Y" THEN 2110
2050 PRINT PP$
2060 PRINT " 1  2  3  4  5"
2070 RESTORE 2090
2080 FOR I=1 TO 5:READ A:PRINT A;:NEXT 
2090 DATA 1,2,3,4,5
2100 REM LET
2110 GOSUB 14000:IF AA$<>"Y" THEN 2160
2120 PRINT PP$
2130 PRINT "A= 12 "
2140 A=12:PRINT "A="A
2150 REM GOTO
2160 GOSUB 14000:IF AA$<>"Y" THEN 2220
2170 PRINT PP$
2180 PRINT SS$
2190 GOTO 2200
2200 PRINT SS$
2210 REM CGOTO
2220 GOSUB 14000:IF AA$<>"Y" THEN 2280
2230 PRINT PP$
2240 PRINT SS$
2250 CGOTO 1000+1260
2260 PRINT SS$
2270 REM RUN
2280 GOSUB 14000:IF AA$<>"Y" THEN 2310
2290 GOSUB 15000
2300 REM FAST
2310 GOSUB 14000:IF AA$<>"Y" THEN 2410
2320 PRINT "TIME THE DELAY BETWEEN 'START' AND 'STOP'."
2330 PRINT "FIRST, BEFORE THE 'FAST' OPTION."
2340 INPUT "PRESS 'RETURN' TO START";, LINE Z$
2350 GOSUB 16000:PRINT "EXECUTING 'FAST' CONVERSION. PLEASE WAIT."
2360 FAST :PRINT "NOW, AFTER THE 'FAST' OPTION."
2370 INPUT "PRESS 'RETURN' TO CONTINUE";, LINE Z$
2380 GOSUB 16000
2390 PRINT "IF THERE WAS AN IMPROVEMENT OF OVER 50%,":PRINT " THE 'FAST' OPTION IS PERFORMING PROPERLY."
2400 REM IF
2410 GOSUB 14000:IF AA$<>"Y" THEN 2440
2420 PRINT PP$:PRINT SS$:IF (7-5)=(1+1) AND NOT (3<2) THEN PRINT SS$
2430 REM RESTORE
2440 GOSUB 14000:IF AA$<>"Y" THEN 2480
2450 PRINT PP$:RESTORE 2460:READ A:RESTORE 2460:PRINT A:READ A:PRINT A
2460 DATA 12345
2470 REM GOSUB
2480 GOSUB 14000:IF AA$<>"Y" THEN 2510
2490 PRINT PP$:PRINT SS$:GOSUB 16060:PRINT SS$
2500 REM CGOSUB
2510 GOSUB 14000:IF AA$<>"Y" THEN 2540
2520 PRINT PP$:PRINT SS$:CGOSUB 15000+10:PRINT SS$
2530 REM RETURN
2540 GOSUB 14000:IF AA$<>"Y" THEN 2570
2550 PRINT PP$:PRINT SS$:GOSUB 16060:PRINT SS$
2560 REM REM
2570 GOSUB 14000:IF AA$<>"Y" THEN 2610
2580 PRINT PP$:PRINT SS$:REM PRINT "ERROR" 
2590 PRINT SS$
2600 REM STOP
2610 GOSUB 14000:IF AA$<>"Y" THEN 2640
2620 GOSUB 15000
2630 REM OUT
2640 GOSUB 14000:IF AA$<>"Y" THEN 2690
2650 INPUT "TO WHAT PORT WOULD YOU LIKE TO OUTPUT A VALUE";P
2660 INPUT "WHAT VALUE WOULD YOU LIKE TO OUTPUT";V
2670 OUT P,V:PRINT "DONE"
2680 REM ON
2690 GOSUB 14000:IF AA$<>"Y" THEN 2740
2700 PRINT PP$:PRINT SS$:P=2:ON P GOTO 2710,2720,2710
2710 PRINT "ERROR"
2720 PRINT SS$
2730 REM NULL
2740 GOSUB 14000:IF AA$<>"Y" THEN 2800
2750 PRINT "WHAT IS THE LOWEST NUMBER OF NULLS AFTER A RETURN YOUR SYSTEM"
2760 INPUT "CAN OPERATE PROPERLY WITH";N
2770 NULL N:PRINT "THESE":PRINT "SHOULD":PRINT "BE":PRINT "FAST":NULL 255
2780 PRINT :PRINT :PRINT "THESE":PRINT "SHOULD":PRINT "BE":PRINT "SLOW":NULL N
2790 REM WAIT
2800 GOSUB 14000:IF AA$<>"Y" THEN 2860
2810 INPUT "WHAT PORT WOULD YOU LIKE TO USE";P
2820 INPUT "WHAT VALUE WILL YOU EXCLUSIVE OR TO THE PORT DATA";O
2830 INPUT "WHAT VALUE WILL YOU AND TO THE PORT DATA";A
2840 PRINT PP$:PRINT SS$:WAIT P,A,O:PRINT SS$
2850 REM POKE
2860 GOSUB 14000:IF AA$<>"Y" THEN 2900
2870 PRINT PP$:PRINT SS$:A=PEEK(0):POKE 0,255-A:IF PEEK(0)=255-A THEN PRINT SS$ ELSE PRINT "ERROR"
2880 POKE 0,A
2890 REM PRINT
2900 GOSUB 14000:IF AA$<>"Y" THEN 2940
2910 PRINT PP$:PRINT "LEFT        12345          RIGHT"
2920 A$="LEFT":B=12345:PRINT A$;SPC(7);B;TAB(27);"RIGHT"
2930 REM DEF
2940 GOSUB 14000:IF AA$<>"Y" THEN 2990
2950 PRINT PP$:PRINT SS$
2960 DEF FNA8(F)=F*F
2970 N=7:IF FNA8(N)=49 THEN PRINT SS$ ELSE PRINT "ERROR"
2980 REM CONT
2990 GOSUB 14000:IF AA$<>"Y" THEN 3020
3000 GOSUB 15000
3010 REM LIST
3020 GOSUB 14000:IF AA$<>"Y" THEN 3060
3030 PRINT "THE LAST FEW LINES OF THE PROGRAM WILL NOW BE LISTED"
3040 LIST 18000
3050 REM CLEAR
3060 GOSUB 14000:IF AA$<>"Y" THEN 3090
3070 GOSUB 15000
3080 REM CLOAD
3090 GOSUB 14000:IF AA$<>"Y" THEN 3120
3100 GOSUB 15000
3110 REM CSAVE
3120 GOSUB 14000:IF AA$<>"Y" THEN 3190
3130 PRINT :INPUT "PRESS 'RETURN' WHEN THE CASSETTE IS READY";, LINE Z$
3140 PRINT "(THIS NORMALLY REQUIRES SLIGHTLY OVER 1 MINUTE)"
3150 CSAVE F
3160 PRINT "THE PROGRAM HAS NOW SAVED ITSELF."
3170 PRINT "TO TEST IT, IT IS NECESSARY TO RELOAD AND RESTART THE PROGRAM."
3180 REM CINPUT
3190 GOSUB 14000:IF AA$<>"Y" THEN 3220
3200 GOSUB 17000
3210 REM CPRINT
3220 GOSUB 14000:IF AA$<>"Y" THEN 3250
3230 GOSUB 17000
3240 REM LOAD
3250 GOSUB 14000:IF AA$<>"Y" THEN 3280
3260 GOSUB 15000
3270 REM SAVE
3280 GOSUB 14000:IF AA$<>"Y" THEN 3330
3290 INPUT "PLACE A SCRATCH DISK IN DRIVE A AND PRESS 'RETURN'";, LINE Z$
3300 RESET :SAVE "A:FUNCTEST"
3310 PRINT "THE PROGRAM HAS NOW SAVED ITSELF ON DISK"
3320 REM TLOAD
3330 GOSUB 14000:IF AA$<>"Y" THEN 3360
3340 GOSUB 15000
3350 REM TSAVE
3360 GOSUB 14000:IF AA$<>"Y" THEN 3410
3370 INPUT "WHEN THE PUNCH IS READY, PRESS 'RETURN'";, LINE A$
3380 TSAVE 
3390 PRINT "THEN PROGRAM HAS NOW BEEN PUNCHED"
3400 REM DIR
3410 GOSUB 14000:IF AA$<>"Y" THEN 3450
3420 INPUT "WHEN A DISK CONTAINING A VALID DIRECTORY IS IN DRIVE A, PRESS 'RETURN'";, LINE Z$
3430 PRINT "LISTING THE DIRECTORY OF DRIVE A":DIR A
3440 REM RESET
3450 GOSUB 14000:IF AA$<>"Y" THEN 3480
3460 GOSUB 18000
3470 REM DELETE
3480 GOSUB 14000:IF AA$<>"Y" THEN 3510
3490 GOSUB 18000
3500 REM OPEN
3510 GOSUB 14000:IF AA$<>"Y" THEN 3540
3520 GOSUB 18000
3530 REM CREATE
3540 GOSUB 14000:IF AA$<>"Y" THEN 3570
3550 GOSUB 18000
3560 REM CLOSE
3570 GOSUB 14000:IF AA$<>"Y" THEN 3600
3580 GOSUB 18000
3590 REM DPRINT
3600 GOSUB 14000:IF AA$<>"Y" THEN 3630
3610 GOSUB 18000
3620 REM DINPUT
3630 GOSUB 14000:IF AA$<>"Y" THEN 3660
3640 GOSUB 18000
3650 REM REWIND
3660 GOSUB 14000:IF AA$<>"Y" THEN 3690
3670 GOSUB 18000
3680 REM DADD
3690 GOSUB 14000:IF AA$<>"Y" THEN 3720
3700 GOSUB 15000
3710 REM GET
3720 GOSUB 14000:IF AA$<>"Y" THEN 3750
3730 GOSUB 18000
3740 REM PUT
3750 GOSUB 14000:IF AA$<>"Y" THEN 3780
3760 GOSUB 18000
3770 REM FILEND
3780 GOSUB 14000:IF AA$<>"Y" THEN 3810
3790 GOSUB 15000
3800 REM RENAME
3810 GOSUB 14000:IF AA$<>"Y" THEN 3840
3820 GOSUB 18000
3830 REM SETEOF
3840 GOSUB 14000:IF AA$<>"Y" THEN 3870
3850 GOSUB 15000
3860 REM SCROLL
3870 GOSUB 14000:IF AA$<>"Y" THEN 4080
3880 PRINT "YOU SHOULD SEE THE VIDEO DISPLAY FILLED WITH PERIODS, THEN A"
3890 PRINT "WINDOW DEFINED. TEN LINES OF DATA SHOULD SCROLL THROUGH THE WINDOW."
3900 INPUT "PRESS 'RETURN' TO START THE TEST.";, LINE A$
3910 FILL ASC(".")
3920 I=WW*5+25
3930 J=(LL-5)*3
3940 FOR K=-1 TO 6
3950 VPRINT I+K*WW,SPC(32)
3960 NEXT K
3970 DRAW 50,J+2,113,J+2,1
3980 DRAW 113,J+2,113,J-21,1
3990 DRAW 113,J-21,50,J-21,1
4000 DRAW 50,J-21,50,J+2,1
4010 SCROLL I+1,6,30
4020 FOR I=1 TO 10
4030 VPRINT -1,""
4040 VPRINT -1,"SCROLLING LINE";I;
4050 FOR J=1 TO 1500:NEXT 
4060 NEXT I
4070 REM VPRINT
4080 GOSUB 14000:IF AA$<>"Y" THEN 4150
4090 S$="TESTING, LINE NUMBER"
4100 PRINT "YOU SHOULD SEE THE LINE: "
4110 PRINT S$;" 0"
4120 PRINT "APPEAR 10 TIMES, STEPPING DOWN AND RIGHT, WITH 0 INCREMENTING TO 9."
4130 FILL 32:FOR I=0 TO 9:VPRINT I*WW+I,S$;I:NEXT 
4140 REM VINPUT
4150 GOSUB 14000:IF AA$<>"Y" THEN 4220
4160 FILL 32
4170 PRINT "INPUT A LINE OF DATA ON THE VIDEO SCREEN. IT SHOULD BE"
4180 PRINT "REPRODUCED BELOW."
4190 VINPUT WW,"INPUT DATA HERE ---->";, LINE A$
4200 PRINT A$
4210 REM WIDTH
4220 GOSUB 14000:IF AA$<>"Y" THEN 4300
4230 INPUT "WHAT IS YOUR CONSOLE WIDTH";W
4240 PRINT "THE FIRST LINE SHOULD BE COMPLETE."
4250 PRINT "THE SECOND AND THIRD SHOULD BE THE SAME LINE, WITH A BREAK AFTER 'THAN'."
4260 S$="TESTING, WIDTH GREATER THAN 28 COLUMNS."
4270 PRINT :PRINT S$
4280 WIDTH 28:PRINT S$:WIDTH W
4290 REM LLIST
4300 GOSUB 14000:IF AA$<>"Y" THEN 4360
4310 INPUT "WHEN THE PRINTER IS READY, PRESS 'RETURN'";, LINE Z$
4320 PRINT "THE LAST FEW LINES OF THE PROGRAM WILL NOW"
4330 PRINT "BE LISTED ON THE PRINTER"
4340 LLIST 18000
4350 REM LPRINT
4360 GOSUB 14000:IF AA$<>"Y" THEN 4410
4370 INPUT "PRESS 'RETURN' WHEN THE PRINTER IS READY";, LINE Z$
4380 PRINT "YOU SHOULD SEE THIS ON THE PRINTER:":PRINT 
4390 S$="TESTING, LINE":FOR I=0 TO 9:PRINT S$;I:LPRINT S$;I:NEXT 
4400 REM NEW
4410 GOSUB 14000:IF AA$<>"Y" THEN 4440
4420 GOSUB 15000
4430 REM CALL
4440 GOSUB 14000:IF AA$<>"Y" THEN 4480
4450 PRINT PP$:PRINT SS$:A=PEEK(0):B=PEEK(1)
4460 POKE 0,&C1:POKE 1,&C9:CALL 0:POKE 0,A:POKE 1,B:PRINT SS$
4470 REM PLOT
4480 GOSUB 14000:IF AA$<>"Y" THEN 4520
4490 PRINT "YOU SHOULD SEE A DIAGONAL LINE ON THE DISPLAY"
4500 FILL 128:FOR I=0 TO WW*2-1:PLOT I,(LL*3/(WW*2))*I,1:NEXT 
4510 REM DRAW
4520 GOSUB 14000:IF AA$<>"Y" THEN 4560
4530 PRINT "YOU SHOULD SEE A DIAGONAL LINE ON THE DISPLAY"
4540 FILL 128:DRAW 0,LL*3-1,WW*2-1,0,1
4550 REM FILL
4560 GOSUB 14000:IF AA$<>"Y" THEN 4590
4570 PRINT "YOUR VIDEO SHOULD BE FILLED WITH THE NUMBER '1'":FILL &31
4580 REM BYE
4590 GOSUB 14000:IF AA$<>"Y" THEN 4620
4600 GOSUB 15000
4610 REM DDT
4620 GOSUB 14000:IF AA$<>"Y" THEN 4650
4630 INPUT "IS 'DDT' OR 'SID' LOADED AND READY"; LINE Z$:IF LEFT$(Z$,1)="Y" THEN DDT 
4640 REM TRAP
4650 GOSUB 14000:IF AA$<>"Y" THEN 4700
4660 PRINT PP$:PRINT "ERROR CODE 2 IN LINE 4670":TRAP ; GOTO 4680
4670 GARBAGE
4680 PRINT "ERROR CODE"ERRC(0)"IN LINE"ERRL(0):TRAP ; GOTO 18190
4690 REM TRACE
4700 GOSUB 14000:IF AA$<>"Y" THEN 4790
4710 PRINT PP$
4720 PRINT "<4750><4760><4770>"
4730 I=PEEK(&103)+256*PEEK(&104)+8
4740 POKE I,255
4750 REM 
4760 REM 
4770 POKE I,0
4780 REM RANDOMIZE
4790 GOSUB 14000:IF AA$<>"Y" THEN 4830
4800 PRINT "THE NEXT TWO NUMBERS SHOULD BE DIFFERENT"
4810 PRINT RND(0):RANDOMIZE :PRINT RND(0)
4820 REM MOVE
4830 GOSUB 14000:IF AA$<>"Y" THEN 4910
4840 PRINT "YOU SHOULD SEE AN ASTERISK DANCE IN, THEN FILL THE CENTER OF THE DSIPLAY"
4850 INPUT "PRESS 'RETURN' WHEN YOU ARE READY";, LINE Z$:R=(INT(LL/2))*WW+WW/2-10
4860 FILL ASC("."):VPRINT R,"         *          ":A=AA+R
4870 J=-1:FOR I=1 TO 18:J=J*-1:FOR K=1 TO I
4880 IF (J>0) THEN MOVE A,A-1,19 ELSE MOVE A,A+1,-19
4890 NEXT K,I
4900 REM EDIT
4910 GOSUB 14000:IF AA$<>"Y" THEN 4930
4920 GOSUB 15000
4930 PRINT :PRINT "END OF HAWKEYE GRAFIX VBASIC FUNCTIONAL TEST.":END 
10000 PRINT :INPUT "PRESS 'RETURN' FOR THE NEXT TEST";, LINE AA$:PRINT SC$
10010 READ AA$:PRINT "OPERATION: ";AA$:PRINT 
10020 FOR I=1 TO C:READ A(I),B(I):NEXT 
10030 PRINT "FUNCTION     INPUT         RESULT       ANSWER"
10040 RETURN 
11000 PRINT :INPUT "PRESS 'RETURN' FOR THE NEXT TEST";, LINE AA$:PRINT SC$
11010 READ AA$:PRINT "OPERATION: ";AA$:PRINT 
11020 FOR I=1 TO C:READ S$(I),B(I):NEXT 
11030 PRINT "FUNCTION     INPUT         RESULT       ANSWER"
11040 RETURN 
12000 PRINT :INPUT "PRESS 'RETURN' FOR THE NEXT TEST";, LINE AA$:PRINT SC$
12010 READ AA$:PRINT "OPERATION: ";AA$:PRINT 
12020 FOR I=1 TO C:READ S$(I),T$(I):NEXT 
12030 PRINT "FUNCTION     INPUT         RESULT       ANSWER"
12040 RETURN 
13000 PRINT :INPUT "PRESS 'RETURN' FOR THE NEXT TEST";, LINE AA$:PRINT SC$:RETURN 
14000 IF AA$<>"Y" THEN 14010 ELSE PRINT :PRINT :INPUT "PRESS 'RETURN' FOR THE NEXT TEST";, LINE AA$
14010 PRINT SC$
14020 PRINT :PRINT "THE CURRENT TEST IS FOR: ";V$(X)
14030 X=X+1
14040 PRINT :PRINT "THE NEXT TEST WILL BE FOR: ";V$(X)
14050 PRINT :PRINT "DO YOU WISH TO TEST THE '"V$(X-1);:INPUT "' COMMAND"; LINE AA$
14060 PRINT :RETURN 
15000 PRINT :PRINT "THE '"V$(X-1)"' COMMAND IS NOT TESTABLE WHILE THE PROGRAM IS RUNNING."
15010 RETURN 
16000 C=125:PRINT "START"
16010 GOSUB 16040
16020 C=C-1:IF C=INT(C/25)*25 THEN PRINT C;
16030 IF C=0 THEN PRINT "STOP":RETURN ELSE GOTO 16010
16040 GOTO 16080
16050 GOTO 16070
16060 RETURN 
16070 GOTO 16060
16080 GOTO 16050
17000 INPUT "WHEN THE CASSETTE IS READY FOR OUTPUT, PRESS 'RETURN'";, LINE Z$
17010 CPRINT "1,2,3,4,5"
17020 INPUT "WHEN THE CASSETTE IS REWOUND AND READY FOR INPUT, PRESS 'RETURN'";, LINE Z$
17030 PRINT PP$:PRINT " 1  2  3  4  5"
17040 CINPUT A(1),A(2),A(3),A(4),A(5)
17050 FOR I=1 TO 5:PRINT A(I);:NEXT 
17060 RETURN 
18000 TRAP ; GOTO 18190
18010 PRINT "NOTE: ALL DISK FUNCTIONS ARE TESTED IN THIS ROUTINE."
18020 INPUT "PLACE A SCRATCH DISK IN DRIVE A AND PRESS 'RETURN'";, LINE Z$
18030 PRINT PP$:PRINT SS$
18040 RESET 
18050 F$="A:Q#Q#Q#Q#.$$$":S$="TESTING RECORD NUMBER"
18060 DELETE F$
18070 CREATE 0;F$
18080 FOR I=0 TO 9:DPRINT 0;S$;I:NEXT 
18090 CLOSE 0
18100 OPEN 0;F$,26
18110 DINPUT 0;A$:IF A$<>(S$+" 0") THEN PRINT "ERROR IN DINPUT"
18120 GET 0;4;A$:IF A$<>(S$+" 4") THEN PRINT "ERROR IN GET"
18130 PUT 0;6;"UPDATE 6":GET 0;6;A$:IF A$<>"UPDATE 6" THEN PRINT "ERROR IN PUT"
18140 REWIND 0
18150 DINPUT 0;A$:IF A$<>(S$+" 0") THEN PRINT "ERROR IN REWIND"
18160 RENAME "QZ###.ABC",F$
18170 DELETE "QZ###.ABC"
18180 PRINT SS$:RETURN 
18190 PRINT "ERROR"ERRC(0)"IN LINE"ERRL(0)