100 : 120 MODE7 130 PROCa 140 PROCb 150 : 180 ONERRORPROCc:d$=" ":GOTO200 190 d$=FNe 200 IFd$=" "ANDFNf=8THENd$="A" 210 IFd$=" "ANDFNf<>8THENd$="D" 220 IFd$="A"ORd$="a"THENPROCg("ADFS"):PROCg("MOUNT 0"):h%=TRUE 230 IFd$="D"ORd$="d"THENPROCg("DISC"):PROCg("DRIVE 0"):h%=FALSE 240 ONERRORMODE7:CLOSE#0:REPORT:PRINT" at line ";ERL:PROCi:END 250 : 260 PROCj 270 PROCk 280 PROCl(m$,"!Mesg") 290 MODE7 300 PROCi 310 END 320 : 330 DEFPROCa 340 *FX229,1 350 *FX4,1 360 PROCn 370 ENDPROC 380 : 390 DEFPROCi 400 PROCo 410 *FX229,0 420 *FX4,0 430 ENDPROC 440 : 450 DEFPROCb 460 ONERRORMODE7:CLOSE#0:REPORT:PRINT" at line ";ERL:PROCi:END 470 p%=4096 480 q%=25 490 r%=-1:s%=-1 500 DIMt%256,u%p%,v%p% 510 PROCw 520 PROCx 530 ENDPROC 540 : 550 DEFPROCn 560 VDU23,1,0;0;0;0; 570 ENDPROC 580 : 590 DEFPROCo 600 VDU23,1,1;0;0;0; 610 ENDPROC 620 : 630 DEFFNS 640 ="ASC2Mes" 650 : 660 DEFPROCw 670 y%=6 680 z%=3 690 aa%=3 700 ba%=7 710 ca%=7 720 k%=7 730 da%=3 740 ea%=2 750 fa%=3 760 l%=7 770 ga%=3 780 ha%=7 790 ENDPROC 800 : 810 DEFPROCx 820 LOCALia% 830 VDU26,12 840 PRINT" ";CHR$(144+y%);"ÿ¯¯¯¯¯¯¯¥ÿ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ÿ"; 850 PRINTCHR$(144+y%);"ÿ¯¯¯¯¯¯¯¯¯¯¯ª¯¯¯¯¯¯¯¯ ";CHR$(144+y%);"ÿ"; 860 PRINTCHR$(144+y%);"ÿ";CHR$(144+z%);"êë ·Ž€µ ê£àðàðê ° °ð°ðàð   ";CHR$(144+y%);"ÿ"; 870 PRINTCHR$(144+y%);"ÿ";CHR$(144+z%);"ê뢡·Žµ· ¢ëêêê€ê¡µŽµœµµê® ";CHR$(144+y%);"ÿ"; 880 PRINTCHR$(144+y%);"";CHR$(144+z%);"¢£ £ ¡£¡ ¢£¢£¢ ¢¡££¡¡¡¡¢£   ";CHR$(145);" "; 890 FORia%=1TO18 900 PRINTCHR$(144+y%);"ÿ";SPC(36);CHR$(144+y%);"ÿ"; 910 NEXT 920 PRINTCHR$(144+y%);"ÿüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüÿ"; 930 VDU28,2,22,37,5 940 ENDPROC 950 : 960 DEFPROCg($t%) 970 LOCALX%,Y% 980 X%=t%MOD256 990 Y%=t%DIV256 1000 CALL&FFF7 1010 ENDPROC 1020 : 1030 DEFFNe 1060 PROCaa 1070 PRINT'CHR$(128+ba%);"Please insert your submission disc"'CHR$(128+ba%);"(which should also contain the"'CHR$(128+ba%);"message text file) into drive 0." 1080 PRINT'CHR$(128+ba%);"Press A if this disc is in ADFS"'CHR$(128+ba%);"format, D if it is in DFS format or";CHR$(128+ba%);"SPACE to use the current format. If";CHR$(128+ba%);"in doubt, press SPACE." 1090 =FNja("AaDd ",FALSE) 1100 : 1110 DEFPROCj 1120 REPEAT 1130 PROCaa 1140 PRINT'CHR$(128+ca%);"Please enter the filename of the"'CHR$(128+ca%);"text:";CHR$(128+da%); 1150 IFh%THENm$=FNda(1,10)ELSEm$=FNda(1,7) 1160 IFNOTFNka(m$)THENPRINT':PROCla(m$+" does not exist.",ca%):PRINT'CHR$(128+ca%);"Press SPACE to continue...":PROCma 1170 UNTILFNka(m$) 1180 ENDPROC 1190 : 1200 DEFFNja(na$,oa%) 1210 LOCALd$ 1220 REPEAT 1230 *FX21 1240 IFoa%THENd$=CHR$(GETAND&DF)ELSEd$=GET$ 1250 UNTILINSTR(na$,d$)<>0 1260 =d$ 1270 : 1280 DEFPROCma 1290 *FX21 1300 REPEATUNTILGET=32 1310 ENDPROC 1320 : 1330 DEFPROCk 1340 LOCALpa% 1350 pa%=OPENIN(m$) 1360 qa$=FNra(FNsa(FNta(pa%))) 1370 IFLEN(qa$)<>3THENCLOSE#pa%:PROCua("Your ID is given as "+qa$+" which cannot be correct since ID's have 3 digits."):END 1380 IFEOF#pa%THENCLOSE#pa%:PROCua("This text file is far too short - it only contains your user ID."):END 1390 va$=FNsa(FNta(pa%)) 1400 IFLEN(va$)>30THENva$=LEFT$(va$,30):PROCwa("Your name is too long! I have shortened it to "+va$+".") 1410 IFEOF#pa%THENCLOSE#pa%:PROCua("This text file is far too short - it only contains your name and user ID."):END 1420 CLOSE#pa% 1430 IFFNka("!Mesg")THENPROCxaELSEPROCya 1440 ENDPROC 1450 : 1460 DEFPROCxa 1470 LOCALza%,ab%,d$,bb$ 1480 PROCaa 1490 za%=OPENUP("!Mesg") 1500 ab%=BGET#za% 1510 IFab%>0THENCLOSE#za%:PROCua("There is a !Mesg file on this disc with a version numbr higher than 0."):END 1520 PRINT'CHR$(128+k%);"There is already a message file on"'CHR$(128+k%);"this disc. Do you want to replace"'CHR$(128+k%);"it (R) or add the new messages to"'CHR$(128+k%);"it (A)?";CHR$(128+da%); 1530 d$=FNja("AR",TRUE):PRINTd$ 1540 IFd$="R"THENPRINT'CHR$(128+k%);"Are you sure? (Y or N)";CHR$(128+da%);:IFFNcbTHENCLOSE#za%:PRINT"Yes":PROCya:ENDPROC 1550 IFd$="R"THENPRINT"No"''CHR$(128+k%);"I will add the new messages to the"'CHR$(128+k%);"old ones."''CHR$(128+k%);"Press SPACE to continue...":PROCma 1560 INPUT#za%,bb$ 1570 IFbb$<>qa$THENCLOSE#za%:PROCua("The existing !Mesg file has a different sender ID ("+bb$+") to the text message file ("+qa$+"). This should not occur - please correct the error."):END 1580 INPUT#za%,va$ 1590 va$=FNsa(va$) 1600 db%=PTR#za% 1610 CLOSE#za% 1620 ENDPROC 1630 : 1640 DEFFNsa(eb$) 1650 IFLEFT$(eb$,1)=" "THENREPEAT:eb$=MID$(eb$,2):UNTILLEFT$(eb$,1)<>" "OReb$="" 1660 IFRIGHT$(eb$,1)=" "THENREPEAT:eb$=LEFT$(eb$,LEN(eb$)-1):UNTILRIGHT$(eb$,1)<>" "OReb$="" 1670 =eb$ 1680 : 1690 DEFPROCya 1700 LOCALza% 1710 za%=OPENOUT("!Mesg") 1720 BPUT#za%,0 1730 PRINT#za%,qa$ 1740 PRINT#za%,LEFT$(va$+STRING$(20," "),20) 1750 db%=PTR#za% 1760 PRINT#za%,0 1770 CLOSE#za% 1780 ENDPROC 1790 : 1800 DEFFNta(za%) 1810 LOCALeb$ 1820 REPEAT 1830 eb$=FNfb(za%) 1840 UNTILEOF#za%ORFNsa(eb$)<>"" 1850 =eb$ 1860 : 1870 DEFFNfb(za%) 1880 LOCALeb$,gb% 1890 eb$="" 1900 REPEAT 1910 gb%=BGET#za% 1920 IFgb%=13ORgb%=10ANDr%=-1THENr%=gb%:s%=23-r% 1930 IFgb%<>r%ANDgb%<>s%THENeb$=eb$+CHR$(gb%) 1940 UNTILgb%=r%OREOF#za%ORLEN(eb$)>40 1950 =eb$ 1960 : 1970 DEFPROCl(hb$,ib$) 1980 LOCALib%,jb%,hb%,kb$,lb% 1990 ib%=OPENIN(ib$) 2000 PTR#ib%=db% 2010 INPUT#ib%,jb% 2020 CLOSE#ib% 2030 hb%=OPENIN(hb$) 2040 kb$=FNta(hb%) 2050 kb$=FNta(hb%) 2060 lb%=1 2070 REPEAT 2080 IFjb%+lb%>q%THENCLOSE#hb%:PROCua("There is a limit of 25 messages in the !Mesg file and this has now been reached."):END 2090 PROCmb(lb%,hb$,ib$,hb%) 2100 lb%=lb%+1 2110 UNTILEOF#hb% 2120 CLOSE#hb% 2130 ENDPROC 2140 : 2150 DEFPROCmb(nb%,hb$,ib$,hb%) 2160 LOCALob$,pb$,qb$,rb%,sb%,tb$,ub%,vb%,gb%,wb%,xb%,yb% 2170 PROCaa 2180 ob$=FNsa(FNta(hb%)) 2190 IFEOF#hb%THENCLOSE#hb%:PROCua("Message "+STR$(nb%)+" is too short. Please either finish or remove it."):END 2200 IFLEN(ob$)>30THENob$=LEFT$(ob$,30):PROCwa("Message "+STR$(nb%)+" has a destination which is too long. I will shorten it to "+ob$+".") 2210 IFob$="999"ANDLEN(ob$)=3THENob$="999 (all members)" 2220 IFLEFT$(ob$,3)="CCC"ORFNra(ob$)="PROGRAM COMMENT"THENob$="Program comment":pb$="CCC"ELSEpb$=LEFT$(ob$,3) 2230 qb$=FNsa(FNta(hb%)) 2240 IFEOF#hb%THENCLOSE#hb%:PROCua("Message "+STR$(nb%)+" is not complete. Please either finish or remove it."):END 2250 IFLEN(qb$)>30THENqb$=LEFT$(qb$,30):PROCwa("Message "+STR$(nb%)+" has a subject which is too long. I will shorten it to "+qb$+".") 2260 PRINT 2270 IFpb$="CCC"THENPROCla("Converting message "+STR$(nb%)+", which is a program comment on "+qb$+".",l%)ELSEPROCla("Converting message "+STR$(nb%)+", which is a message to "+ob$+" about "+qb$+".",l%) 2280 rb%=FNzb(ob$,qb$) 2290 sb%=PTR#hb% 2300 tb$=FNsa(FNta(hb%)) 2310 IFINSTR(tb$,"~")<>0THENPROCac(pb$,rb%):ENDPROC 2320 IFFNbc(tb$)THENtb%=FNcc(tb$)ELSEtb%=128+ga%:PTR#hb%=sb% 2330 ub%=FNdc(hb%) 2340 vb%=0 2350 REPEAT 2360 gb%=u%?vb%:vb%=vb%+1 2370 UNTILgb%>32 2380 IFgb%=126THENREPEAT:gb=u%?vb%:vb%=vb%+1:UNTILgb%=r%ORvb%=ub%:PROCac(pb$,rb%):ENDPROC 2390 vb%=vb%-1 2400 REPEAT 2410 v%?rb%=tb% 2420 FORwb%=rb%+1TOrb%+39:v%?wb%=32:NEXT 2430 rb%=rb%+1 2440 xb%=1 2450 yb%=-1 2460 REPEAT 2470 gb%=u%?vb%:vb%=vb%+1 2480 IFgb%>=32ANDgb%<>126THENv%?rb%=gb% 2490 IFgb%=32THENyb%=rb% 2500 IFgb%<>s%:rb%=rb%+1:xb%=xb%+1 2510 UNTILgb%=r%ORgb%=126ORvb%=ub%ORxb%=40 2520 IFxb%=40ANDyb%<>-1ANDgb%<>32ANDNOT(gb%=r%ORgb%=126ORvb%=ub%)THENFORwb%=yb%+1TOrb%-1:v%?wb%=32:NEXT:vb%=vb%-(rb%-yb%-1) 2530 IFgb%=r%THENrb%=rb%+(40-xb%) 2540 UNTILgb%=126ORvb%=ub%ORrb%>=(p%-80) 2550 IFrb%>=(p%-80)THENCLOSE#hb%:PROCua("Message "+STR$(nb%)+" takes more than the allowed space in teletext format. Please shorten or remove it."):END 2560 IFgb%=126THENrb%=rb%-1 2570 IFgb%=126ANDvb%<>ub%THENREPEAT:gb%=u%?vb%:vb%=vb%+1:UNTILgb%=r%ORvb%=ub% 2580 PTR#hb%=PTR#hb%-(ub%-vb%) 2590 PROCac(pb$,rb%) 2600 ENDPROC 2610 : 2620 DEFFNdc(za%) 2630 LOCALA%,X%,Y% 2640 ?t%=za% 2650 t%!1=u% 2660 t%!5=p% 2670 A%=4 2680 X%=t%MOD256 2690 Y%=t%DIV256 2700 CALL&FFD1 2710 =p%-t%!5 2720 : 2730 DEFFNbc(tb$) 2740 LOCALec$,kb% 2750 tb$=FNra(FNsa(tb$)) 2760 RESTORE2910 2770 REPEAT 2780 READec$,kb% 2790 UNTILec$="WHITE"ORtb$=ec$ 2800 =(tb$=ec$) 2810 : 2820 DEFFNcc(tb$) 2830 LOCALec$,fc% 2840 tb$=FNra(FNsa(tb$)) 2850 RESTORE2910 2860 REPEAT 2870 READec$,fc% 2880 UNTILec$=tb$ 2890 =fc% 2900 : 2910 DATA RED,129,GREEN,130,YELLOW,131,BLUE,132,MAGENTA,133,PURPLE,133,PINK,133,CYAN,134,LIGHT BLUE,134,TURQUOISE,134,WHITE,135 2920 : 2930 DEFFNzb(ob$,qb$) 2940 LOCALwb%,gc%,hc%,ic$ 2950 FORwb%=0TO156STEP4 2960 v%!wb%=&20202020 2970 NEXT 2980 gc%=128+ea%:hc%=128+fa% 2990 IFva$=""THENic$=qa$ELSEic$=qa$+" ("+va$+")" 3000 IFob$<>"Program comment"THENPROCjc(CHR$(gc%)+"To: "+CHR$(hc%)+ob$,v%):PROCjc(CHR$(gc%)+"From: "+CHR$(hc%)+ic$,v%+40):PROCjc(CHR$(gc%)+"Subject:"+CHR$(hc%)+qb$,v%+80):=160 3010 PROCjc(CHR$(gc%)+"From: "+CHR$(hc%)+ic$,v%) 3020 PROCjc(CHR$(gc%)+"Program:"+CHR$(hc%)+qb$,v%+40) 3030 =120 3040 : 3050 DEFPROCaa 3060 CLS 3070 PRINTTAB(2,0);CHR$(128+aa%);"Text to message converter 0.20" 3080 ENDPROC 3090 : 3100 DEFFNf 3110 LOCALA%,Y% 3120 A%=0 3130 Y%=0 3140 =(USR(&FFDA)AND&FF) 3150 : 3160 DEFFNka(kc$) 3170 LOCALza% 3180 za%=OPENIN(kc$) 3190 IFza%=0THEN=FALSE 3200 CLOSE#za% 3210 =TRUE 3220 : 3230 DEFFNra(pa$) 3240 LOCALlc$,mc%,nc% 3250 lc$="" 3260 FORmc%=1TOLEN(pa$) 3270 nc%=ASC(MID$(pa$,mc%,1)) 3280 IFnc%>=ASC("a")ANDnc%<=ASC("z")THENnc%=nc%-32 3290 lc$=lc$+CHR$(nc%) 3300 NEXT 3310 =lc$ 3320 : 3330 DEFFNda(oc%,pc%) 3340 LOCALmc%,qc%,pa$,d% 3350 mc%=POS 3360 qc%=VPOS 3370 pa$="" 3380 REPEAT 3390 REPEAT 3400 *FX21 3410 d%=GET 3420 UNTILd%=13OR(d%>=32ANDd%<=127) 3430 IFd%=127ANDLEN(pa$)>0THENVDU127:pa$=LEFT$(pa$,LEN(pa$)-1) 3440 IFd%<>127ANDd%<>13ANDLEN(pa$)=oc%) 3460 =pa$ 3470 : 3480 DEFPROCjc(rc$,sc%) 3490 LOCALtc% 3500 FORtc%=sc%TOsc%+LEN(rc$)-1 3510 ?tc%=ASC(MID$(rc$,tc%-sc%+1,1)) 3520 NEXT 3530 ENDPROC 3540 : 3550 DEFPROCc 3560 SOUND1,-10,101,5 3570 ENDPROC 3580 : 3590 DEFPROCac(uc$,rb%) 3600 LOCALza%,A%,X%,Y% 3610 v%?rb%=152 3620 za%=OPENUP("!Mesg") 3630 PTR#za%=db% 3640 INPUT#za%,vc% 3650 PTR#za%=db% 3660 PRINT#za%,vc%+1 3670 PTR#za%=EXT#za% 3680 PRINT#za%,uc$ 3690 BPUT#za%,0 3700 t%?0=za% 3710 t%!1=v% 3720 t%!5=rb%+1 3730 A%=2 3740 X%=t%MOD256 3750 Y%=t%DIV256 3760 CALL&FFD1 3770 CLOSE#za% 3780 ENDPROC 3790 : 3800 DEFFNcb 3810 LOCALd$ 3820 REPEAT 3830 d$=CHR$(GETAND&DF) 3840 UNTILd$="Y"ORd$="N" 3850 =(d$="Y") 3860 : 3870 DEFPROCua(wc$) 3880 PROCaa 3890 PRINT 3900 PROCla(wc$,ha%) 3910 PRINT'CHR$(128+ha%);"Press SPACE to continue..." 3920 PROCma 3930 VDU26,12 3940 PROCi 3950 END 3960 : 3970 DEFPROCwa(wa$) 3980 PROCaa 3990 PRINT 4000 PROCla(wa$,ha%) 4010 PRINT'CHR$(128+ha%);"Press SPACE to continue..." 4020 PROCma 4030 ENDPROC 4040 : 4050 DEFPROCla(T$,C%) 4060 REPEAT 4070 IFLEN(T$)<36THENPRINTCHR$(128+C%);T$;SPC(35-LEN(T$));:T$=""ELSEA%=INSTR(T$," ",37):A%=A%+(A%=0)*-36:REPEAT:A%=A%-1:UNTILMID$(T$,A%,1)=" ":PRINTCHR$(128+C%);LEFT$(T$,A%-1);SPC(36-A%);:T$=MID$(T$,A%+1) 4080 UNTILT$="" 4090 ENDPROC