10@%=0 20MODE 3 30INPUT LINE "Channel: " channel 40T%=OPENIN("RAW"+CHR$(channel+ASC("0"))) 50DIM buff 41 60ON ERROR GOTO 120 70PROCinitham 80REPEAT 90 PROCrd 100 PROCprocess 110UNTIL0 120ON ERROR OFF 130CLOSE#0 140REPORT:PRINT" at line ";ERL 150END 160DEFPROCrd 170magno=BGET#T% 180rowno=BGET#T% 190FOR I%=0 TO 39 200 buff?I%=BGET#T% 210NEXT 220ENDPROC 230DEFPROCdisp 240 PROCmrag 250 FOR I%=0 TO 19 260 PROChex2(buff?I%) 270 VDU 32 280 NEXT 290 PRINT '" "; 300 FOR I%=20 TO 39 310 PROChex2(buff?I%) 320 VDU 32 330 NEXT 340ENDPROC 350DEFPROCmrag 360 PROChex2(magno) 370 VDU ASC(",") 380 PROChex2(rowno) 390 VDU ASC(":"),32 400ENDPROC 410DEFPROChex2(I%) 420L%=I% DIV 16:R%=I% MOD 16 430PROChex(L%):PROChex(R%) 440ENDPROC 450DEFPROChex(J%) 460IF J%>9 THEN J%=J%+7 470VDU J%+ASC("0") 480ENDPROC 490DEFPROCasc 500PRINT '" | "; 510FOR I%=0 TO 39 520 PROCsafe(buff?I%) 530NEXT 540PRINT " |" 550ENDPROC 560DEFPROCinitham 570DIM ham 255 580P%=ham 590[OPT 2 600 EQUD &4101FF41 \ 1 610 EQUD &FF4140FF 620 EQUD &FF4142FF 630 EQUD &47FFFF4A 640 EQUD &FF4140FF 650 EQUD &40FF0040 \ 0 660 EQUD &4BFFFF46 670 EQUD &FF4340FF 680 EQUD &FF414CFF 690 EQUD &47FFFF44 700 EQUD &47FFFF46 710 EQUD &074747FF \ 7 720 EQUD &45FFFF46 730 EQUD &FF4D40FF 740 EQUD &FF464606 \ 6 750 EQUD &47FFFF46 760 EQUD &FF4142FF 770 EQUD &49FFFF44 780 EQUD &42FF0242 \ 2 790 EQUD &FF4342FF 800 EQUD &45FFFF48 810 EQUD &FF4340FF 820 EQUD &FF4342FF 830 EQUD &4303FF43 \ 3 840 EQUD &45FFFF44 850 EQUD &FF444404 \ 4 860 EQUD &FF4F42FF 870 EQUD &47FFFF44 880 EQUD &054545FF \ 5 890 EQUD &45FFFF44 900 EQUD &45FFFF46 910 EQUD &FF434EFF 920 EQUD &FF414CFF 930 EQUD &49FFFF4A 940 EQUD &4BFFFF4A 950 EQUD &FF4A4A0A \ 10 960 EQUD &4BFFFF48 970 EQUD &FF4D40FF 980 EQUD &0B4B4BFF \ 11 990 EQUD &4BFFFF4A 1000 EQUD &4CFF0C4C \ 12 1010 EQUD &FF4D4CFF 1020 EQUD &FF4F4CFF 1030 EQUD &47FFFF4A 1040 EQUD &FF4D4CFF 1050 EQUD &4D0DFF4D \ 13 1060 EQUD &4BFFFF46 1070 EQUD &FF4D4EFF 1080 EQUD &49FFFF48 1090 EQUD &094949FF \ 9 1100 EQUD &FF4F42FF \ Possibly tables are wrong? 1110 EQUD &49FFFF4A 1120 EQUD &FF484808 \ 8 1130 EQUD &49FFFF48 1140 EQUD &4BFFFF48 1150 EQUD &FF434EFF 1160 EQUD &FF4F4CFF 1170 EQUD &49FFFF44 1180 EQUD &4F0FFF4F \ 15 1190 EQUD &FF4F4EFF 1200 EQUD &45FFFF48 1210 EQUD &FF4D4EFF 1220 EQUD &FF4F4EFF 1230 EQUD &4EFF0E4E \ 14 1240 EQUD &0B4B4BFF \ 11 1250] 1260ENDPROC 1270DEFFNham(WW%) 1280IF ham?WW% > 127 THEN PRINT'"*** Uncorrectable hamming code error: ";:PROChex2(WW%) 1290= ((ham?WW%) AND 15) 1300DEFPROCprocess 1310IF rowno=0 THEN PROCheader:ENDPROC 1320IF rowno=31 THEN PROCdatacast:ENDPROC 1330IF rowno=27 THEN PROClink:ENDPROC 1340IF rowno=30 THEN PROCtsdp:ENDPROC 1350PROCdisp:PROCasc 1360ENDPROC 1370 1380DEFPROCheader 1390PROCdisp 1400 FOR I%=0 TO 7 1410 buff?I%=FNham(buff?I%) 1420 NEXT 1430PRINT'"Header: Page "; 1440PROCpageno 1450PROCflags 1460PROClang 1470IF C4 THEN PRINT" Erase"; 1480IF C5 THEN PRINT" Newsflash"; 1490IF C6 THEN PRINT" Subtitle"; 1500IF C7 THEN PRINT" No_header"; 1510IF C8 THEN PRINT" Update"; 1520IF C9 THEN PRINT" Out_of_seq"; 1530IF C10 THEN PRINT" No_display"; 1540IF C11 THEN PRINT" Display_headers"; 1550IF Lang<>0 THEN PRINT" Language code ";Lang; 1560PRINT '" '"; 1570FOR I%=8 TO 39 1580 PROCsafe(buff?I%) 1590NEXT 1600PRINT "'" 1610ENDPROC 1620 1630DEFPROClink 1640PROCdisp 1650FOR I%=0 TO 36 1660 buff?I%=FNham(buff?I%) 1670NEXT 1680PRINT'"Links: designation code "; 1690PRINT buff?0;" "; 1700PRINT"CRC "; 1710PROChex2(buff?38) 1720PROChex2(buff?39) 1730PRINT '" "; 1740FOR I%=1 TO 31 STEP 6 1750 PROCshowlink(I%) 1760 VDU 32 1770NEXT 1780PRINT 1790ENDPROC 1800 1810DEFPROCdatacast 1820PROCdisp 1830PRINT 1840ENDPROC 1850 1860DEFPROCtsdp 1870PROCdisp 1880FOR I%=0 TO 6 1890 buff?I%=FNham(buff?I%) 1900NEXT 1910PROCasc 1920PRINT"TSDP: "; 1930PRINT"Designation code ";buff?0; 1940PRINT" Initial page "; 1950PROCshowlink(1) 1960PRINT" Channel code "; 1970PROChex2(buff?7) 1980PROChex2(buff?8) 1990PRINT'" MJD "; 2000PROChex2((buff?10)-&01) 2010PROChex2((buff?11)-&11) 2020PROChex2((buff?12)-&11) 2030PRINT" Time "; 2040PROChex2((buff?13)-&11) 2050PRINT":"; 2060PROChex2((buff?14)-&11) 2070PRINT":"; 2080PROChex2((buff?15)-&11) 2090PRINT " G.M.T. "; 2100C%=buff?9-&81 2110C%=C% DIV 2 2120IF C%=0 THEN GOTO 2180 2130PRINT" ("; 2140IF ((buff?9) AND &40) <> 0 THEN PRINT "-"; ELSE PRINT "+"; 2150PRINTC% DIV 2; 2160IF (C% AND 1) <> 0 THEN PRINT ".5"; 2170PRINT" for local time)"; 2180REM GOTO target... 2190PRINT'" Program "; 2200FOR I%=16 TO 19 2210 PROCsafe(buff?I%) 2220NEXT 2230PRINT" '"; 2240FOR I%=20 TO 39 2250 PROCsafe(buff?I%) 2260NEXT 2270PRINT"'" 2280ENDPROC 2290DEFPROCpageno 2300PRINT magno; 2310PRINT ~(buff?1) AND 15; 2320PRINT ~(buff?0) AND 15; 2330PRINT (buff?5) AND 3; 2340PRINT ~(buff?4) AND 15; 2350PRINT (buff?3) AND 7; 2360PRINT ~(buff?2) AND 15; 2370ENDPROC 2380DEFPROCflags 2390C4=((buff?3) AND 8) <> 0 2400C5=((buff?5) AND 4) <> 0 2410C6=((buff?5) AND 8) <> 0 2420C7=((buff?6) AND 1) <> 0 2430C8=((buff?6) AND 2) <> 0 2440C9=((buff?6) AND 4) <> 0 2450C10=((buff?6) AND 8) <> 0 2460C11=((buff?7) AND 1) <> 0 2470C12=((buff?7) AND 2) <> 0 2480C13=((buff?7) AND 4) <> 0 2490C14=((buff?7) AND 8) <> 0 2500ENDPROC 2510DEFPROClang 2520Lang=0 2530IF C12 THEN Lang=Lang+1 2540IF C13 THEN Lang=Lang+2 2550IF C14 THEN Lang=Lang+4 2560ENDPROC 2570DEFPROCsafe(D%) 2580LOCAL C% 2590 C%=32 2600 D%=D% AND 127 2610 IF (D%>32) AND (D%<127) THEN C%=D% 2620 VDU C% 2630ENDPROC 2640DEFPROCshowlink(I%) 2650C4=((buff?(I%+3)) AND 8) <> 0 2660C5=((buff?(I%+5)) AND 4) <> 0 2670C6=((buff?(I%+5)) AND 8) <> 0 2680linkmag=0 2690IF C4 THEN linkmag=linkmag+1 2700IF C5 THEN linkmag=linkmag+2 2710IF C6 THEN linkmag=linkmag+4 2720PRINT (magno EOR linkmag); 2730PRINT ~(buff?(I%+1)) AND 15; 2740PRINT ~(buff?I%) AND 15; 2750PRINT (buff?(I%+5)) AND 3; 2760PRINT ~(buff?(I%+4)) AND 15; 2770PRINT (buff?(I%+3)) AND 7; 2780PRINT ~(buff?(I%+2)) AND 15; 2790ENDPROC