Introduction
The listings
Adaptations of the listings for Teletext
This Appendix gives listings of all the procedures. In order to use them, you can either type them in from these listings and store them, or you can buy them ready-recorded on a cassette. If you decide on the former course of action, we recommend that you enter and save each procedure only as you need it. Typing can be quite an arduous job and mistakes are especially likely if too much is taken on at once
We recommend that you store and use a procedure by first entering it into your computer and then saving it, using the *SPOOL format described in Section 0.2. You need not put in the space after the tine number, because the computer will insert it for you, following the LISTO 7 command.
If you have sufficient free memory, it is probably simplest to collect all the procedures which you are likely to use together and to record them as single blocks. For example, for our use, we recorded the procedures in blocks as follows:
TEXT = | PROCchr + PROCmessage + PROCcurve |
COMP = | PROCgraph + PROCscaIe + PRDCaxes + PROCgraduate + PROCnumber + PROCpoint + PROCbstln + PROCnamey + PRDCnamex |
HISTO = | PROChisto + PROC3Dhisto |
PIE = | PR0Cpie |
TCOMP = | PROCgraph + PROCsca1e + PROCaxes + PROCgraduate + PRDCnumber + PROCpoint + PROCbstln + PROCnamey + PROCnamex + PROCclg + PROCp1ot + PROCdraw |
This way, when you come to produce a particular type of display, you will know that what you want is available. It is because we expect you to record the procedures together that we have used a different range of line numbers for each one, Then no procedure will normally overwrite another. The exception is for the Teletext procedures. Since you cannot work with Teletext and non-Teletext at the same time, we have purposely arranged for the line numbers of the Teletext procedures to coincide with some of the line numbers of the other procedures. Nevertheless it is probably a good idea to enter NEW before loading the Teletext procedures, if you have just used the non-Teletext ones.
The total memory space of a Model A and a Model B computer in each of the graphics modes is as shown in Table A1.1.
mode | Model A | Model B |
7 | 11776 | 25342 |
5 | 2560 | 16126 |
4 | 2560 | 16126 |
2 | - | 5886 |
1 | - | 5886 |
0 | - | 5886 |
Table A1.1
We give the length of each procedure with its listing, so that you can estimate the space that a program will require. The estimate cannot be exact, because it does not only depend on the bytes required for the program and the procedures. It also depends on the bytes required for the numeric variables, the string variables and the arrays.
PROCchr requires approximately 452 bytes of memory. Its listing is as follows:
9000 DEF PROCchr(X,Y,S$,AN,SC)
9010 LOCAL CO1,CO2,SI1,SI2,LX,LY,RX,RY,XX,YY
9020 CO1=COS(AN):SI1=-SIN(AN)
9030 CO2=COS(PI/2-AN):SI2=SIN(AN+PI/2)
9040 £F=£F+1:IF £F=1 THEN DIM M 8 ELSE £F=2
9050 A%=10:X%=M MOD256:Y%=M DIV256:?M=ASC(S$):CALL(&FFF1)
9060 FOR XX=0TO7 :FOR YY=0TO7
9070 IF ?(M+8-YY) AND 2^(7-XX) THEN PROCpixel
9080 NEXT YY,XX
9090 ENDPROC
9100 DEF PROCpixel
9110 LX=XX-.5:RX=XX+.5:LY=YY-.5:RY=YY+.5
9120 MOVE X+SC*(LX*CO1+LY*SI1),Y+SC*(LY*SI2+LX*CO2)
9130 MOVE X+SC*(RX*CO1+LY*SI1),Y+SC*(LY*SI2+RX*CO2)
9140 PLOT 85,X+SC*(LX*CO1+RY*SI1),Y+SC*(RY*SI2+LX*CO2)
9150 PLOT 85,X+SC*(RX*CO1+RY*SI1),Y+SC*(RY*SI2+RX*CO2)
9160 ENDPROC
PROCmessage requires approximately 171 bytes of memory. Its listing is as follows:
9180 DEFPROCmessage(X,Y,S$,AN,SC)
9190 LOCAL I,XP,YP
9200 AN=AN+PI/2
9210 FOR I=1 TO LEN(S$)
9220 XP=SC*(COS(AN)*8*(I-1))
9230 YP=SC*(SIN(AN)*8*(I-1))
9240 PROCchr(X+XP,Y+YP,MID$(S$,I,1),AN,SC)
9250 NEXT I
9260ENDPROC
PROCcurve requires approximately 238 bytes of memory. Its listing is as follows:
9280 DEFPROCcurve(X,Y,R,SA,FA,S$,SC)
9290 LOCAL I,XP,YP
9300 SA=SA+PI/2:FA=FA+PI/2
9310 FOR I=1 TO LEN(S$)
9320 XP=X+R*COS(SA-(SA-FA)*(I-1)/(LEN(S$)+1))
9330 YP=Y+R*SIN(SA-(SA-FA)*(I-1)/(LEN(S$)+1))
9340 PROCchr(XP,YP,MID$(S$,I,1),SA-(SA-FA)*(I-1)/
(LEN(S$)+1)-PI/2,SC)
9350 NEXT I
9360 ENDPROC
PROCgraph requires approximately 132 bytes of memory. Its listing is as follows:
10000 DEF PROCgraph
10010 PROCscale
10020 PROCaxes
10030 PROCgraduate
10040 PROCnumber
10050 FOR £J=1 TO X(0)
10060 DTA=8 :PROCpoint(X(£J),Y(£J))
10070 NEXT £J
10080 ENDPROC
PROCscale requires approximately 943 bytes of memory. Its listing is as follows:
10100 DEF PROCscale
10110 £SX=X(1) :£LX=£SX :£SY=Y(1) :£LY=£SY
10120 FOR £I=1 TO X(0)
10130 IF£SX>X(£I)THEN£SX=X(£I)
10140 IF£LX<X(£I)THEN£LX=X(£I)
10150 IF£SY>Y(£I)THEN£SY=Y(£I)
10160 IF£LY<Y(£I)THEN£LY=Y(£I)
10170 NEXT
10180 PROCscale2(£SY,£LY) :£SY=£S :£LY=£L
:£STY=£ST :£CBY%=£CBN%
10190 PROCscale2(£SX,£LX) :£SX=£S :£LX=£L
:£STX=£ST :£CBX%=£CBN%
10200 £X=1000/(£LX-£SX):£Y=800/(£LY-£SY)
10210 £CONVX=150-£SX*£X :£CONVY=100-£SY*£Y
10220 ENDPROC
10230 :
10240 DEF FN£CVX(G) =£X*G+£CONVX
10250 DEF FN£CVY(G) =£Y*G+£CONVY
10260 :
10270 DEF PROCscale2(L,H) :@%=&0101090A
10280 IF L>0 AND L<H/3 THEN L=0 ELSE IF H<0 AND
H>L/3 THEN H=0
10290 £LL=VAL(LEFT$(STR$(L),INSTR(STR$(L),"E")-1))
10300 £LH=VAL(LEFT$(STR$(H),INSTR(STR$(H),"E")-1))
10310 £PL=VAL(MID$(STR$(L),INSTR(STR$(L),"E")+1))
10320 £LH=£LH*10^(VAL(MID$(STR$(H),INSTR(STR$(H),"E")+
1))-£PL)
10330 £D=£LH-£LL
10340 IF £D<=3THENREPEAT£D=£D*10 :£PL=£PL-1 :£LL=£LL*10
:£LH=£LH*10 :UNTIL £D>3
10350 IF £D>30THENREPEAT£D=£D/10 :£PL=£PL+1 :£LL=£LL/10
:£LH=£LH/10 :UNTIL £D<30
10360 £LL=INT(£LL+.1) :£LH=INT(£LH+.5)
10370 @%=&10 :£CBN%=SGN(£LL)*(VAL(RIGHT$(STR$(£LL),1))+.1)
10380 £S=VAL(STR$(£LL)+"E"+STR$(£PL))
10390 £L=VAL(STR$(£LH)+"E"+STR$(£PL)) :£ST=ABS(£L-£S)/
(£LH-£LL)
10400 ENDPROC
PROCaxes requires approximately 223 bytes of memory. Its listing is as follows:
10420 DEF PROCaxes
10430 £X0=0 :£Y0=0
10440 IF £SX>0 THEN £X0=£SX ELSE IF £LX<0 THEN £X0=£LX
10450 IF £SY>0 THEN £Y0=£SY ELSE IF £LY<0 THEN £Y0=£LY
10460 MOVE FN£CVX(£SX),FN£CVY(£Y0) :DRAW FN£CVX(£LX),
FN£CVY(£Y0)
10470 MOVE FN£CVX(£X0),FN£CVY(£SY) :DRAW FN£CVX(£X0),
FN£CVY(£LY)
10480 ENDPROC
PROCgraduate requires approximately 228 bytes of memory. Its listing is as follows:
10500 DEF PROCgraduate
10510 FOR x=£SX TO £LX+.1*£STX STEP £STX
10520 IF £CBX%MOD5=0 THEN DTA=16 ELSE DTA=8
10530 £CBX%=£CBX%+1 :PROCpoint(x,£Y0) :NEXT x
10540 FOR y=£SY TO £LY+.1*£STY STEP £STY
10550 IF £CBY%MOD5=0 THEN DTA=16 ELSE DTA=8
10560 £CBY%=£CBY%+1 :PROCpoint(£X0,y) :NEXT y
10570 ENDPROC
PROCnumber requires approximately 225 bytes of memory. Its listing is as follows:
10590 DEF PROCnumber :VDU5
10600 MOVE FN£CVX(£LX)-4*LEN(STR$(£LX)),FN£CVY(£Y0)-20
:PRINT;£LX
10610 MOVEFN£CVX(£X0)-150,FN£CVY(£LY)+28:PRINT;£LY
10620 IF £LX>0AND£SX<0AND£LY>0AND£SY<0THEN ENDPROC
10630 MOVE FN£CVX(£SX),FN£CVY(£Y0)-20:PRINT;£SX
10640 MOVEFN£CVX(£X0)-150,FN£CVY(£SY)+30:PRINT;£SY:VDU4
10650 ENDPROC
PROCpoint requires approximately 127 bytes of memory. Its listing is as follows:
10670 DEF PROCpoint(A,B)
10680 MOVEFN£CVX(A)-DTA,FN£CVY(B):DRAWFN£CVX(A)+DTA,
FN£CVY(B)
10690MOVEFN£CVX(A),FN£CVY(B)-DTA :DRAWFN£CVX(A),FN£CVY(B)
+DTA
10700 ENDPROC
PROCbstln requires approximately 733 bytes of memory. Its listing is as follows:
10720 DEF PROCbstln
10730 LOCAL C,M,I,XX,YY,MEANX,MEANY,sumX,sumY,sumXY,sumYY,
sumXX,MINX,MAXX
10740 XX=0 :YY=0:
10750 FOR I=1 TO X(0) :sumX=sumX+X(I) :sumY=sumY+Y(I)
:NEXT I
10760 MEANX=sumX/X(0) :MEANY=sumY/X(0)
10770 MINX=X(1):MAXX=MINX:sumXX=0:sumYY=0:sumXY=0:XX=0:YY=0
10780 FOR I=1 TO X(0)
10790 sumXX=sumXX+X(I)*X(I) :sumYY=sumYY+Y(I)*Y(I)
10800 sumXY=sumXY+X(I)*Y(I)
10810 XX=XX+(X(I)-MEANX)^2 :YY=YY+(Y(I)-MEANY)^2 :XY=XY+
(X(I)-MEANX)*(Y(I)-MEANY)
10820 IF MINX>X(I) THEN MINX=X(I)
10830 IF MAXX<X(I) THEN MAXX=X(I)
10840 NEXT I
10850 M=(X(0)*sumXY-sumX*sumY)/(X(0)*sumXX-sumX*sumX)
10860 C=(sumY*sumXX-sumX*sumXY)/(X(0)*sumXX-sumX*sumX)
10870 @%=&20204 :VDU4
10880 PRINT TAB(10,0);"Y=";M;"*X+";C;TAB(10,1);"Cor.
coef. = ";XY/SQR(XX*YY)
10890 MOVE FN£CVX(£SX),FN£CVY(M*£SX+C) :DRAW FN£CVX(£LX),
FN£CVY(M*£LX+C)
10900 @%=&10 :ENDPROC
PROCnamey requires approximately 124 bytes of memory. Its listing is as follows:
10920 DEF PROCnamey(£Vname$):VDU5
10930 FOR £A=1 TO LEN(£Vname$)
10940 MOVE FN£CVX(£X0)-60,FN£CVY(£LY)-£A*32-32:
PRINTMID$(£Vname$,£A,1)
10950 NEXT £A:VDU4
10960 ENDPROC
PROCnamex requires approximately 93 bytes of memory. Its listing is as follows:
10980 DEF PROCnamex(£Hname$)
10990 MOVE FN£CVX(£LX)-32*LEN(£Hname$)-64,FN£CVY(£Y0)-52
:VDU5:PRINT£Hname$:VDU4
11000 ENDPROC
PROChisto requires approximately 285 bytes of memory. Its listing is as follows:
12000 DEF PROChisto
12010 £C=1
12020 FOR £A=1 TO X(0)-1
12030 GCOL0,£C :£C=£C+1 :IF £C>2 THEN £C=1
12040 £XL=FN£CVX(X(£A)-£IN) :£XR=FN£CVX(X(£A))
12050 £YH=FN£CVY(Y(£A))
12060 £YB=FN£CVY(0)
12070 MOVE £XL,£YB :MOVE £XL,£YH
12080 PLOT 85,£XR,£YB :PLOT 85,£XR,£YH
12090 GCOL 0,3
12100 MOVE £XL,£YB :DRAW £XR,£YB
12110 DRAW £XR,£YH :DRAW £XL,£YH :DRAW £XL,£YB
12120 NEXT £A
12130 ENDPROC
PROC3Dhisto requires approximately bytes of memory. Its listing is as follows:
12150 DEF PROC3Dhisto(C)
12160 FOR £A=1 TO X(0)-1
12170 £XL=FN£CVX(X(£A)-£IN) :£XR=FN£CVX(X(£A))
12180 £YB=FN£CVY(0) :£YH=FN£CVY(Y(£A))
12190 GCOL 0,C
12200 MOVE £XL,£YB :MOVE £XL,£YH
12210 PLOT 85,£XR,£YB :PLOT 85,£XR,£YH
12220 GCOL 0,3-C
12230 PLOT 85,£XR+64,£YB+32
12240 PLOT 85,£XR+64,£YH+32
12250 MOVE £XR,£YH
12260 PLOT 85,£XL+64,£YH+32
12270 PLOT 85,£XL,£YH
12280 GCOL 0,3
12290 MOVE £XL,£YH:DRAW £XL+64,£YH+32
12300 DRAW £XR+64,£YH+32
12310 DRAW £XR,£YH:DRAW £XL,£YH
12320 DRAW £XL,£YB:DRAW £XR,£YB
12330 DRAW £XR,£YH:DRAW £XR+64,£YH+32
12340 DRAW £XR+64,£YB+32:DRAW£XR,£YB
12350 NEXT £A
12360 ENDPROC
PROCpie requires approximately 590 bytes of memory. Its listing is as follows:
13000 DEF PROCpie(R%,X%,Y%,T)
13010 LOCAL L%,S,W
13020 W=0:S=0:C%=0
13030 FOR L%=1 TO £NS
13040 W=W+£S(L%)
13050 C%=C%+1:IFC%>2THENC%=1
13060 IFL%=£NS THENC%=3
13070 PROCsector(C%,S/T,W/T,R%,X%,Y%)
13080 S=W
13090 NEXTL%
13100 PROClabel(R%,X%,Y%,T)
13110 ENDPROC
13120 :
13130 DEF PROCsector(C%,S,F,R%,X%,Y%)
13140 LOCAL L
13150 GCOL0,C%
13160 MOVE COS(2*PI*S)*R%+X%,SIN(2*PI*S)*R%+Y%
13170 FOR L= 2*PI*S TO 2*PI*F STEP 0.1
13180 MOVE X%,Y%
13190 PLOT 85,COS(L)*R%+X%,SIN(L)*R%+Y%
13200 NEXTL
13210 PLOT85,COS(2*PI*F)*R%+X%,SIN(2*PI*F)*R%+Y%
13220 ENDPROC
13230 :
13240 DEF PROClabel(R%,X%,Y%,T)
13250 VDU5:B=0:R%=R%+64
13260 FOR A=1 TO £NS
13270 OX=0:H=(B+£S(A)/2)*2*PI/T
13280 IFH<PI*1.5 ANDH>PI*.5 THENOX=-(LEN(£N$(A))*32)
13290 MOVE COS(H)*R%+X%+OX,SIN(H)*R%+Y%
13300 PRINT£N$(A)
13310 B=B+£S(A)
13320 NEXTA
13330 VDU4
13340 ENDPROC
PROCgraph requires approximately 132 bytes of memory. Its listing is as follows:
10000 DEF PROCgraph
10010 PROCscale
10020 PROCaxes
10030 PROCgraduate
10040 PROCnumber
10050 FOR £J=1 TO X(0)
10060 PROCplot(FN£CVX(X(£J)),FN£CVY(Y(£J)))
10070 NEXT £J
10080 ENDPROC
PROCscale requires approximately 967 bytes of memory. Its listing is as follows:
10100 DEF PROCscale
10110 £SX=X(1) :£LX=£SX :£SY=Y(1) :£LY=£SY
10120 FOR £I=1 TO X(0)
10130 IF£SX>X(£I)THEN£SX=X(£I)
10140 IF£LX<X(£I)THEN£LX=X(£I)
10150 IF£SY>Y(£I)THEN£SY=Y(£I)
10160 IF£LY<Y(£I)THEN£LY=Y(£I)
10170 NEXT
10180 PROCscale2(£SX,£LX) :£SX=£S :£LX=£L :£STX=£ST
:£CBX%=£CBN%
10190 PROCscale2(£SY,£LY) :£SY=£S :£LY=£L :£STY=£ST
:£CBY%=£CBN%
10200 £X=1000/(£LX-£SX):£Y=800/(£LY-£SY)
10210 £CONVX=150-£SX*£X :£CONVY=100-£SY*£Y
10220 ENDPROC
10230 :
10240 DEF FN£CVX(G) =INT((£X*G+£CONVX)*74/1280)
10250 DEF FN£CVY(G) =INT((£Y*G+£CONVY)*75/1024)
10260 :
10270 DEF PROCscale2(L,H) :@%=&0101090A
10280 IF L>0 AND L<H/3 THEN L=0 ELSE IF H<0 AND H>L/3
THEN H=0
10290 £LL=VAL(LEFT$(STR$(L),INSTR(STR$(L),"E")-1))
10300 £LH=VAL(LEFT$(STR$(H),INSTR(STR$(H),"E")-1))
10310 £PL=VAL(MID$(STR$(L),INSTR(STR$(L),"E")+1))
10320 £LH=£LH*10^(VAL(MID$(STR$(H),INSTR(STR$(H),"E")+
1))-£PL)
10330 £D=£LH-£LL
10340 IF £D<=3THENREPEAT£D=£D*10 :£PL=£PL-1 :£LL=£LL*10
:£LH=£LH*10 :UNTIL£D>3
10350 IF £D>30THENREPEAT£D=£D/10 :£PL=£PL+1 :£LL=£LL/10
:£LH=£LH/10 :UNTIL£D<30
10360 £LL=INT(£LL+.1) :£LH=INT(£LH+.5)
10370 @%=&10 :£CBN%=SGN(£LL)*(VAL(RIGHT$(STR$(£LL),1))+.1)
10380 £S=VAL(STR$(£LL)+"E"+STR$(£PL))
10390 £L=VAL(STR$(£LH)+"E"+STR$(£PL)) :£ST=ABS(£L-£S)/
(£LH-£LL)
10400 ENDPROC
PROCaxes requires approximately bytes of memory. Its listing is as follows:
10420 DEF PROCaxes
10430 £X0=0 :£Y0=0
10440 IF £SX>0 THEN £X0=£SX ELSE IF £LX<0 THEN £X0=£LX
10450 IF £SY>0 THEN £Y0=£SY ELSE IF £LY<0 THEN £Y0=£LY
10460 PROCdraw(FN£CVX(£SX),FN£CVY(£Y0),FN£CVX(£LX),FN£CVY(£Y0))
10470 PROCdraw(FN£CVX(£X0),FN£CVY(£SY),FN£CVX(£X0),FN£CVY(£LY))
10480 ENDPROC
PROCgraduate requires approximately 227 bytes of memory. Its listing is as follows:
10500 DEF PROCgraduate
10510 FOR x=£SX TO £LX+.1*£STX STEP £STX
10520 IF £CBX%MOD5=0 THEN DTA=2 ELSE DTA=1
10530 £CBX%=£CBX%+1 :PROCpoint(x,£Y0) :NEXT x
10540 FOR y=£SY TO £LY+.1*£STY STEP £STY
10550 IF £CBY%MOD5=0 THEN DTA=2 ELSE DTA=1
10560 £CBY%=£CBY%+1 :PROCpoint(£X0,y) :NEXT y
10570 ENDPROC
PROCnumber requires approximately 292 bytes of memory. Its listing is as follows:
10590 DEF PROCnumber
10600 PROCplot(FN£CVX(£LX)-LEN(STR$(£LX)),FN£CVY(£Y0)-3)
:PRINTCHR$127;CHR$134;£LX;CHR$147;
10610 PROCplot(FN£CVX(£X0)-7,FN£CVY(£LY)+4):
PRINTCHR$127;CHR$134;£LY;CHR$147;
10620 IF £LX>0AND£SX<0AND£LY>0AND£SY<0 THEN ENDPROC
10630 PROCplot(FN£CVX(£SX)-7,FN£CVY(£Y0)-3):
PRINTCHR$127;CHR$134;£SX;CHR$147;
10640 PROCplot(FN£CVX(£X0)-7,FN£CVY(£SY)):
PRINTCHR$127;CHR$134;£SY;CHR$147;
10650 ENDPROC
PROCpoint requires approximately 135 bytes of memory. Its listing is as follows:
10670 DEF PROCpoint(A,B)
10680 PROCdraw(FN£CVX(A)-DTA,FN£CVY(B),FN£CVX(A)+DTA,
FN£CVY(B))
10690 PROCdraw(FN£CVX(A),FN£CVY(B)-DTA,FN£CVX(A),
FN£CVY(B)+DTA)
10700 ENDPROC
PROCbestln requires approximately 384 bytes of memory. Its listing is as follows:
10720 DEF PROCbstln
10730 LOCAL C,M,I,XX,YY,MEANX,MEANY,sumX,sumY,sumXY,
sumYY,sumXX,MINX,MAXX
10740 XX=0 :YY=0
10750 FOR I=1 TO X(0)
10760 XX=XX+X(I) : YY=YY+Y(I)
10770 NEXT I
10780 MEANX=XX/X(0) :MEANY=YY/X(0)
10790 MINX=X(1):MAXX=MINX:sumX=0:sumY=0:sumXX=0
:sumYY=0:sumXY=0:XX=0:YY=0
10800 FOR I=1 TO X(0)
10810 sumX=sumX+X(I) :sumXX=sumXX+X(I)*X(I)
10820 sumY=sumY+Y(I) :sumYY=sumYY+Y(I)*Y(I)
10830 sumXY=sumXY+X(I)*Y(I)
10840 XX=XX+(X(I)-MEANX)^2 :YY=YY+(Y(I)-MEANY)^2
:XY=XY+(X(I)-MEANX)*(Y(I)-MEANY)
10850 IF MINX>X(I) THEN MINX=X(I)
10860 IF MAXX<X(I) THEN MAXX=X(I)
10870 NEXT I
10880 M=(X(0)*sumXY-sumX*sumY)/(X(0)*sumXX-sumX*sumX)
10890 C=(sumY*sumXX-sumX*sumXY)/(X(0)*sumXX-sumX*sumX)
10900 @%=&20204
10910 PRINT TAB(9,0);CHR$135;"Y=";M;"*X+";C;CHR$147;TAB(
9,1);CHR$135;"Cor. coef. = ";XY/SQR(XX*YY);CHR$147
10920 PROCdraw(FN£CVX(£SX),FN£CVY(M*£SX+C),FN£CVX(£LX),
FN£CVY(M*£LX+C))
10930 @%=10:ENDPROC
PROCnamey requires approximately 135 bytes of memory. Its listing is as follows:
10950 DEF PROCnamey(£Vname$)
10960 FOR £A=1 TO LEN(£Vname$)
10970 PROCplot(FN£CVX(£X0)-8,FN£CVY(£LY)-£A*3+3):PRINT
CHR$127;CHR$135;MID$(£Vname$,£A,1);CHR$147;
10980 NEXT £A
10990 ENDPROC
PROCnamex requires approximately 104 bytes of memory. Its listing is as follows:
11010 DEF PROCnamex(£Hname$)
11020 PROCplot(FN£CVX(£LX)-2*LEN(£Hname$)-3,
FN£CVY(£Y0)-6):VDU127,135:PRINT£Hname$;CHR$147;
11030 ENDPROC
PROCclg requires approximately 227 bytes of memory. Its listing is as follows:
11050 DEFPROCclg(C,G)
11060 VDU 28,0,24,39,0,23,0,10,32;0;0;0;
11070 LOCAL CH,GH,Y
11080 CH=128+C : CLS
11090 IF C<1 OR C>7 THEN CH=132
11100 GH=144+G
11110 IF G<1 OR G>7 THEN GH=156
11120 FOR Y=0 TO 24
11130 PRINT TAB(0,Y);
11140 VDU CH,157,GH
11150 NEXT Y
11160 VDU 28,3,24,39,0
11170 PRINT TAB(0,0);
11180 ENDPROC
PROCplot requires approximately 212 bytes of memory. Its listing is as follows:
11200 DEFPROCplot(X,Y)
11210 IF X>73 OR X<0 THEN ENDPROC
11220 IF Y>74 OR Y<0 THEN ENDPROC
11230 LOCAL A%,C%
11240 PRINT TAB(X DIV 2,24-Y DIV 3);
11250 C%=(X AND1)+(Y MOD3)*2
11260 C%=VAL(MID$("166404080102",C%*2+1,2))
11270 A%=135
11280 VDU (USR &FFF4 AND &FF00) DIV 256 OR C% OR 128
11290 ENDPROC
PROCdraw requires approximately 189 bytes of memory. Its listing is as follows:
11310 DEFPROCdraw(X1,Y1,X2,Y2)
11320 PROCplot(X1,Y1) :PROCplot(X2,Y2)
11330 LOCAL X,Y,L,A
11340 X=(X2-X1) :Y=(Y2-Y1)
11350 L=SQR((X1-X2)^2+(Y1-Y2)^2)
11360 FOR A=1 TO L
11370 IF L<>0 THEN PROCplot(X1+A*X/L ,Y1+A*Y/L)
11380 NEXT A
11390 ENDPROC