10 MODE 0
20 PROC_screen
30 PROC_setup
40 PROC_update
50 PROC_clock
60 PROC_window2
70 CALL revector
80 CALL clock
90 ON ERROR PROC_error
100 REPEAT
110 IF FN_keyready THEN PROC_keyboard
120 IF FN_charready THEN PROC_character
130 UNTIL FALSE
140
150 DEF PROC_screen
160 PRINT TAB(25,1);"RTTY Program (Interupt Driven)"
170 PRINT TAB(7,3);"Baud Rate USOS Supress LF's Printer Disc Time (GMT)"
180 PROC_box(0,12,1278,1016)
190 PROC_box(8,948,1270,1008)
200 PROC_box(8,852,1270,940)
210 PROC_box(8,692,1270,844)
220 PROC_box(8,20,1270,684)
230 ENDPROC
240
250 DEF PROC_box(x0,y0,x1,y1)
260 MOVE x0,y0
270 DRAW x0,y1
280 DRAW x1,y1
290 DRAW x1,y0
300 DRAW x0,y0
310 ENDPROC
320
330 DEF PROC_update
340 PROC_store
350 VDU 26
360 PROC_centre(STR$(baud),7,15)
370 PROC_centre(FN_onoff(usos),20,23)
380 PROC_centre(FN_onoff(lfs),28,39)
390 PROC_centre(FN_onoff(printer),44,50)
400 PROC_centre(FN_onoff(disc),55,58)
410 PROC_restore
420 ENDPROC
430
440 DEF PROC_setup
450 *FX 225,128
460 VDU 23,224,&01,&03,&06,&8C,&D8,&70,&20,&00
470 VDU 23,225,&00,&C3,&66,&3C,&3C,&6C,&C3,&00
480 revector = A%
490 clock = B%
500 resetirq = C%
510 resetclock = D%
520 shift = &73
530 delayl = &74
540 delayh = &75
550 ptr1 = &76
560 ptr2 = &77
570 status = &78
580 hours = &80
590 minutes = &81
600 seconds = &82
610 buffer = &900
620 baud = 50
630 usos = FALSE
640 lfs = TRUE
650 printer = FALSE
660 disc = FALSE
670 outline = FALSE
680 fsp$ = ""
690 comment$ = ""
700 PROC_pokevalues
710 ENDPROC
720
730 DEF PROC_clock
740 PROC_store
750 PROC_window1
760 PRINT "Enter Time (GMT)"
770 INPUT "Hours : "h
780 INPUT "Minutes : "m
790 INPUT "Seconds : "s
800 ?hours=h
810 ?minutes=m
820 ?seconds=s
830 CLS
840 PROC_restore
850 ENDPROC
860
870 DEF PROC_window1
880 VDU 28,2,9,77,6
890 ENDPROC
900
910 DEF PROC_window2
920 VDU 28,2,30,77,11
930 ENDPROC
940
950 DEF PROC_store
960 oldx = POS
970 oldy = VPOS
980 leftx = ?&308
990 bottomy = ?&309
1000 rightx = ?&30A
1010 topy = ?&30B
1020 ENDPROC
1030
1040 DEF PROC_restore
1050 VDU 28,leftx,bottomy,rightx,topy,31,oldx,oldy
1060 ENDPROC
1070
1080 DEF FN_onoff(t)
1090 IF t THEN =CHR$(224) ELSE ="x"
1100
1110 DEF PROC_centre(s$,x0,x1)
1120 PRINT TAB(x0,4);SPC(x1-x0+1)
1130 VDU 5
1140 MOVE (x0+(x1+1-x0-LEN(s$))/2)*16,888
1150 PRINT s$
1160 VDU 4
1170 ENDPROC
1180
1190 DEF PROC_keyboard
1200 key=GET
1210 IF key=9 THEN ?shift=0
1220 IF key=13 THEN PROC_output(32):PROC_output(13)
1230 IF key=128 THEN baud=FN_changebaud
1240 IF key=129 THEN PROC_enterbaud
1250 IF key=130 THEN usos=NOT(usos)
1260 IF key=131 THEN lfs=NOT(lfs)
1270 IF key=132 THEN printer=NOT(printer)
1280 IF key=133 THEN PROC_disc
1290 IF key=134 THEN PROC_comment
1300 IF key=135 THEN outline=TRUE
1310 IF key=136 THEN PROC_clock
1320 IF key=137 THEN PROC_standby
1330 PROC_pokevalues
1340 PROC_update
1350 ENDPROC
1360
1370 DEF FN_changebaud
1380 IF baud=45.45 THEN =50
1390 IF baud=50 THEN =75
1400 IF baud=75 THEN =100
1410 =45.45
1420
1430 DEF PROC_enterbaud
1440 PROC_store
1450 PROC_window1
1460 CLS
1470 REPEAT
1480 INPUT "Enter Baud Rate : "baud
1490 UNTIL baud>0
1500 CLS
1510 PROC_restore
1520 ENDPROC
1530
1540 DEF PROC_disc
1550 disc=NOT(disc)
1560 IF disc THEN PROC_discon ELSE PROC_discoff
1570 ENDPROC
1580
1590 DEF PROC_discon
1600 PROC_store
1610 PROC_window1
1620 CLS
1630 REPEAT
1640 INPUT "Enter Filename : "f$
1650 UNTIL (f$="" AND fsp$<>"") OR f$<>""
1660 IF f$="" THEN PROC_oldfile ELSE PROC_newfile
1670 CLS
1680 PROC_restore
1690 ENDPROC
1700
1710 DEF PROC_oldfile
1720 file=OPENUP(fsp$)
1730 PTR #file=EXT #file
1740 ENDPROC
1750
1760 DEF PROC_newfile
1770 fsp$=f$
1780 file=OPENOUT(fsp$)
1790 ENDPROC
1800
1810 DEF PROC_discoff
1820 CLOSE #file
1830 ENDPROC
1840
1850 DEF PROC_comment
1860 PROC_store
1870 PROC_window1
1880 CLS
1890 PRINT "Enter Comment"
1900 INPUT ": "comment$
1910 CLS
1920 PROC_restore
1930 ENDPROC
1940
1950 DEF PROC_standby
1960 CLS
1970 PROC_window1
1980 REPEAT
1990 CLS
2000 PRINT
2010 PRINT TAB(31);"Stand By Mode"
2020 PRINT TAB(25);"Press <Space> To Continue"
2030 PROC_keyboard
2040 UNTIL key=32
2050 ?ptr1=0
2060 ?ptr2=0
2070 CLS
2080 PROC_window2
2090 ENDPROC
2100
2110 DEF PROC_character
2120 ch=buffer??ptr2
2130 ?ptr2=?ptr2+1
2140 PROC_output(ch)
2150 IF ch<>13 OR NOT(outline) THEN ENDPROC
2160 outline=FALSE
2170 out$="Time "+FN_time+" --- Speed "+STR$(baud)+" Baud --- Comment "+comment$+CHR$(13)
2180 FOR a=1 TO LEN(out$)
2190 PROC_output(ASC(MID$(out$,a,1)))
2200 NEXT
2210 ENDPROC
2220
2230 DEF PROC_output(c)
2240 IF c=13 AND lfs AND POS=0 THEN ENDPROC
2250 IF printer THEN VDU 2
2260 IF disc THEN BPUT #file,c
2270 IF c=13 THEN PRINT ELSE PRINT CHR$(c);
2280 IF printer THEN VDU 3
2290 ENDPROC
2300
2310 DEF FN_time
2320 =FN_conv(?hours)+":"+FN_conv(?minutes)+":"+FN_conv(?seconds)
2330
2340 DEF FN_conv(c)
2350 =CHR$(48+c DIV 10)+CHR$(48+c MOD 10)
2360 DEF PROC_pokevalues
2370 ?delayl=(1000000/baud) MOD 256
2380 ?delayh=(1000000/baud) DIV 256
2390 ?status=-128*usos
2400 ENDPROC
2410
2420 DEF FN_keyready
2430 =ADVAL(-1)>0
2440
2450 DEF FN_charready
2460 =?ptr1<>?ptr2
2470
2480 DEF PROC_error
2490 CALL resetirq
2500 CALL resetclock
2510 CLOSE #0
2520 VDU 26,12
2530 REPORT
2540 PRINT " at line ";ERL
2550 END