100 screen_setup
110 values
120 print_values
999 STOP

2000 REMark ========================
2001 DEFine PROCedure values
2002 REMark ========================
2010 LOC smaller,n,hcf
2020 AT #0,1,5: PRINT #0,"Input ratio of frequencies for Y and X axes - integer values only:"
2030 get_yfreq
2040 get_xfreq
2050 get_phaseangle
2060 get_yamp
2070 get_xamp
2071 REMark *** Y and X amplitudes are kept at 1 for now
2072 REMark *** need to cancel Y:X ratio to lowest terms - find HCF
2080 smaller=xfreq: IF xfreq>yfreq THEN smaller=yfreq
2090 FOR n=1 TO smaller+1
2100   IF xfreq MOD n=0 AND yfreq MOD n=0 THEN hcf=n
2110 NEXT n
2120 yfreq=yfreq/hcf: xfreq=xfreq/hcf
2190 END DEFine values
2200 REMark ========================
2201 DEFine PROCedure get_yfreq
2202 REMark ========================
2210 AT #0,2,5: PRINT #0,"Y-axis frequency:": AT #0,2,24: INPUT #0,yfreq
2220 IF yfreq<>INT(yfreq) THEN int_vals_only: AT #0,2,24: PRINT #0,FILL$(" ",60): get_yfreq
2230 END DEF get_yfreq
2250 REMark ========================
2251 DEFine PROCedure get_xfreq
2252 REMark ========================
2260 AT #0,2,30: PRINT #0,"X-axis frequency:": AT #0,2,49: INPUT #0,xfreq
2270 IF xfreq<>INT(xfreq) THEN int_vals_only: AT #0,2,49: PRINT #0,FILL$(" ",35): get_xfreq
2280 END DEF get_xfreq
2300 REMark ========================
2301 DEFine PROCedure get_phaseangle
2302 REMark ========================
2310 AT #0,3,5: PRINT #0,"Input phase angle (0-360 degrees):": AT #0,3,41: INPUT #0,phase
2320 IF phase<0 OR phase>360 THEN outside_range: AT #0,3,41: PRINT #0,FILL$(" ",43): get_phaseangle
2360 pa=RAD(phase)
2390 END DEF get_phaseangle
2400 REMark ========================
2401 DEFine PROCedure get_yamp
2402 REMark ========================
2410 yamp=1
2420 END DEF get_yamp
2450 REMark ========================
2451 DEFine PROCedure get_xamp
2452 REMark ========================
2460 xamp=1
2470 END DEF get_xamp
2900 REMark ========================
2901 DEFine PROCedure int_vals_only
2902 REMark ========================
2905 LOC n
2910 AT #0,1,51: INK #0,2: PRINT #0,"integer values only!"
2920 BEEP 32767,88: FOR n=1 TO 150: NEXT n: BEEP
2930 AT #0,1,51: INK #0,4: PRINT #0,"integer values only:"
2940 END DEF int_vals_only
2950 REMark ========================
2951 DEFine PROCedure outside_range
2952 REMark ========================
2955 LOC n
2960 AT #0,3,24: INK #0,2: PRINT #0,"0-360 degrees"
2970 BEEP 32767,88: FOR n=1 TO 150: NEXT n: BEEP
2980 AT #0,3,24: INK #0,4: PRINT #0,"0-360 degrees"
2990 END DEF outside_range

9000 REMark ========================
9001 DEFine PROCedure screen_setup
9002 REMark ========================
9010 MODE 4
9020 WINDOW #2,512,216,0,0
9030 BORDER #2,1,255: PAPER #2,4: INK #2,0
9040 WINDOW #1,260,192,126,12
9050 PAPER #1,0: INK #1,2: SCALE #1,383,0,0
9060 WINDOW #0,512,40,0,216
9070 PAPER #0,0: INK #0,4
9080 CLS #0: CLS #2: CLS #1
9090 END DEFine screen_setup
10000 REMark ========================
10001 DEFine PROCedure mon
10002 REMark ========================
10003 REMark Standard monitor screen
10010 MODE 4
10020 WINDOW #2,256,202,0,0
10030 BORDER #2,1,255: PAPER #2,7: INK #2,2
10040 WINDOW #1,256,202,256,0
10050 BORDER #1,1,255: PAPER #1,2: INK #1,7
10060 WINDOW #0,512,54,0,202
10070 PAPER #0,0: INK #0,4
10080 CLS #0: CLS #1: CLS #2
10090 END DEFine mon
11000 REMark ========================
11001 DEFine PROCedure tv
11002 REMark ========================
11003 REMark Standard TV screen
11005 MODE 8
11010 WINDOW #0,512,256,0,0
11015 PAPER #0,0: CLS #0
11020 WINDOW #2,448,200,32,16
11030 PAPER #2,1: INK #2,7
11040 WINDOW #1,448,200,32,16
11050 PAPER #1,2: INK #1,7
11060 WINDOW #0,448,40,32,216
11070 PAPER #0,0: INK #0,7
11080 CLS #0: CLS #1: CLS #2
11090 END DEFine tv
