encounters a one, it adds the appropriate power of two to F (line 190). The exponent is the difference between the current row (R) and the last row in this pass of the print head (P+6*S). Line 220 sends F to the printer as a graphics pin pattern.

10 DEFINT A: N=21: DIM A(N,N)

20 FOR R=1 TO N: FOR C=1 TO N

30 D=SQR((R-11)^2 + (C-11)^2)40 IF INT(D+.5)=10 THEN A(R,C)=1

50 NEXT C

60 PRINT "ROW";R: NEXT R

70 LPRINT CHR$(27)"1"CHR$(7);

100 B=1: E=N-6: S=1

110 FOR P=B TO E STEP 7*S

120 PRINT "LOADING ROWS";P;"TO";P+6*S

130 LPRINT CHR$(27)"*"CHR$(0)CH$(N)CHR$(0); 150 FOR C=1 TO N: GOSUB 180: NEXT C

160 LPRINT: NEXT P

170 LPRINT CHR$(27)"@": END

180 F=0: FOR R=P TO P+6*S STEP S

190 IF A(R,C)=1 THEN F=F+2^ABS(P+6*S-R)

200 NEXT R

220 LPRINT CHR$(F);: RETURN

Check your listing against the program above to make sure you have it all. If you do, type RUN.

The array looks like this printout when it’s translated into dots.

If all went well, skip to the “Higher resolution” section, below. If not, take the time to find out a code solution.

Code solutions

If your printout doesn’t look much like ours, it’s likely the problem involves the codes from nine to 13. Remember that the program determined the dot patterns to send to the printer by the figure stored in the array. The cleanest way to get the figure to print correctly is to either POKE the codes directly or use a printer driver that allows the codes to pass through as sent. See Appendix F.

If neither is possible, there is a third way. You can avoid these codes during printing without doing too much damage to the figure. The test

180