C 64
Anwendung

C 64-Schreiberling — Drucken wie gemalt

Mit einem grafikfähigen Drucker sind der Kreativität kaum Grenzen gesetzt. Phantasievolle Schriften, wie sie jeder aus Märchen kennt, sind eines der reizvollen Anwendungsgebiete dieser Drucker. Mit dem Programm »Schreiberling« ersetzen sie sogar Tusche und Federhalter.

Wer hat nicht schon die wundervoll geschwungenen Schriften alter Märchenbücher bewundert und sich gewünscht, doch so schreiben zu können? Die Erfahrung zeigt aber, daß es gar nicht so einfach ist, mit Federhalter und Tusche den richtigen Schwung herauszubekommen, ohne dabei in Tinten klecksen unterzugehen. Wer aber trotzdem schöne Grußkarten, Einladungen oder sogar Urkunden in einer phantasievollen Schrift erstellen möchte, ist auf die Hilfe des Computers angewiesen. Zusammen mit dem Programm »Schreiberling« wird es Ihnen sicherlich oft gelingen, Ihre Verwandten und Freunde mit gestochen scharfen Schriftstücken zu überraschen.

»C 64-Schreiberling« verwendet eine der interessantesten Fähigkeiten eines Druckers — seinen Grafikdruck. Jeder, der einen Drucker mit dieser Funktion besitzt, hat sicherlich schon im Handbuch über die Technik des Binärausdrucks gelesen. Was man aber, außer Hardcopies, damit noch alles machen kann, soll hier beschrieben werden. Das Programm wurde für einen CP-80X entwickelt. Da dieser aber die gleichen Steuerzeichen wie ein Epson RX/FX-80 verwendet, funktioniert »C 64-Schreiberling« auch mit einer ganzen Reihe anderer Drucker.

Das Programm »Schreiberling« (siehe Listing) verwendet den Binärzeichendruck. Dabei hängt das Aussehen eines Buchstabens nicht mehr vom vorprogrammierten Inhalt des Festwertspeichers, sondern von einer eigenen Definition ab. Dazu ist es notwendig, dem Drucker genau zu befehlen, welche Nadel wann und wo drucken soll, um das gewünschte Resultat zu erhalten. Beim Binärzeichendruck werden nur acht der neun vorhandenen Nadeln des Druckers angesprochen. Die Nadeln sind übereinander angeordnet. Die unterste Nadel hat den Wert 1, die oberste den Wert 128 (Bild 1). Um nun ein Zeichen zu erhalten, muß man dem Drucker für jede Nadelstellung einzeln befehlen, welche Nadeln aktiv sein sollen.

Bild 1. Jede der einzelnen Nadeln eines Druckkopfes hat ihren eigenen Zahlen-Wert

Der Druckkopf rückt danach von selbst um ein kleines Stück weiter und druckt die nächste Nadelkombination. Auf diese Art werden beispielsweise Hardcopies vom Bildschirm gedruckt.

Oder man entwirft einen Satz geänderter Zeichen, wie es bei dem Programm Schreiberling gemacht wurde.

Betrachten wir einmal das große »Y« mit Schreiberling ausgedruckt (Bild 2). Man sieht, daß es eine 16 x 24-Punktematrix besitzt. Da der Drucker aber nur acht Nadeln verwendet, muß er insgesamt dreimal drucken, um das »Y« zusammenzusetzen. Zuerst die Oberteile aller Zeichen, dann die Mittelteile und zuletzt die Unterteile.

Bild 2. Jeder Buchstabe besteht aus einer 16x24-Punktematrix

Nach dem Eingeben und Starten des Programms dauert es eine Weile, bis alle DATA-Zeilen gelesen sind. Danach erscheint auf dem Bildschirm: »….eine.Zeile.eingeben:..«. Das heißt, Sie können nun einen beliebigen Text, mit einer Länge bis zu einer Druckzeile, eingeben. Da die einzelnen Zeichen unterschiedlich lang sind (das I ist beispielsweise kürzer als das M), läßt sich nicht genau sagen, wieviele Zeichen in eine Druckzeile passen. Auf jeden Fall sollten Sie niemals zu viele Zeichen eingeben, denn sie werden nicht mehr gedruckt. Bei normaler Dichte (normales Drucken mit Schreiberling) passen ungefähr 40 Zeichen in eine Druckzeile. Am besten ist es, Sie probieren es einfach einmal aus. Geben Sie dazu einen Beispieltext, etwa: »The never ending Story« ein. Dieser Text wird nun in normaler Dichte ausgedruckt (Bild 3). Das ist aber noch nicht alles, was Schreiberling kann. Wenn Sie vor die Zeile ein »#« stellen, werden alle Zeichen mit doppelter Dichte ausgegeben, probieren Sie es aus. Das Ergebnis sollte ähnlich wie Bild 4 auf Ihrem Drucker erscheinen.

Bild 3. So sollte Ihre erste Schriftprobe aussehen
Bild 4. Nicht nur Märchen lassen sich drucken

Für alle, die gerne etwas experimentieren wollen, hier noch ein paar Hinweise. Beim Abtippen können Sie alle REM-Zeilen weglassen. Das Programm beginnt mit Zeile 145, in der die Bildschirmfarben verändert werden. In Zeile 160 werden drei Felder dimensioniert, in die später die Zeichendaten (Ober-, Mittel- und Unterteil) eingelesen werden. Zeile 200 bis 290 füllt die drei Felder. In Zeile 300 bis 360 befindet sich der Einzeleditor und in den Zeilen 422 bis 550 werden die Daten auf den Drucker ausgegeben. Die I-Schleife von 422 bis 550 liest die Buchstaben vom Bildschirm (bei normaler Dichte eine Zeile, bei doppelter Dichte ungefähr zwei Zeilen). Die J-Schleife läßt die I-Schleife dreimal die Buchstaben lesen, da die Ober-, Mittel- und Unterteile einzeln gedruckt werden. In den Zeilen 1 000 bis 2 460 stehen die Zeichendaten. Da das Programm ganz in Basic geschrieben wurde, läßt es sich zwar leicht editieren, dafür ist es nicht gerade schnell — aber wozu gibt es Compiler?

(K. Kramer/aw)
5 rem ------ schreiberling -------------------
10 :
20 rem ----- nachhilfeunterricht -------------
21 :
22 rem ----- angelsaechsisch fuer drucker ----
23 :
100 rem ---- alle rem-zeilen koennen ausgelassen werden
110 :
120 rem von klaus kramer
130 rem     olafstr. 20 a
140 rem     4950 minden
145 poke 53281,14:poke 53280,14:poke 646,6
150 print chr$(147);"schreiberling sucht daten-bitte warten."
160 dim a1$(72),a2$(72),a3$(72)
162 for i=1 to 16:q$=q$+chr$(0):next i
163 for i=1 to 23:o$=o$+chr$(0):next i
170 :
200 rem einlesen------------------------
210 :
220 restore
230 for i=1 to 72
240 for j=1 to 3
245 :  read x
250 :  if x=-1 then 280
260 :  if j=1 then a1$(i)=a1$(i)+chr$(x)
265 :  if j=2 then a2$(i)=a2$(i)+chr$(x)
267 :  if j=3 then a3$(i)=a3$(i)+chr$(x)
270 :  goto 245
280 nextj
282 if len(a3$(i))=0 then a3$(i)=left$(o$,len(a1$(i)))
285 next i
290 :
300 rem zeilen-texteditor---------------
310 :
320 print chr$(147);chr$(14);chr$(18);".....eine.zeile.eingeben:.............";
325 print chr$(146)
330 get t$:print t$;
340 if t$=chr$(13)then 410
350 goto 330
360 :
400 rem ausgabe-------------------------
405 :
410 open 1,4:e$=chr$(27)
411 y=50:p=0
414 z=peek(1064)
415 if z=35 then y=99:p=1
417 print#1,e$"a"chr$(8);:print#1,e$"u"chr$(1);
418 for j=1 to 3
420 :  if z=35 then print#1,e$"l"chr$(0)chr$(5);
421 :  if z<>35 then print#1,e$"k"chr$(128)chr$(2);
422 :  for i=1064+p to 1064+y
425 :     w=peek(i)
430 :     if w=32 or w=96 then print#1,q$;
440 :     if w=63 then f=-17:gosub 910
450 :     if w=40 or w=41 then f=4:gosub 910
460 :     if w=33 then f=10:gosub 910
470 :     if w>64 and w<91 then f=-64:gosub 910
475 :     if w>0 and w<27 then f=46:gosub 910
480 :     if w>43 and w<60 then f=-17:gosub 910
500 :
550 :  next i:if j<3 then print#1
560 next j
670 print#1:close1:goto 320
890 :
900 rem unterprogramm 1---------------
905 :
910 if j=1 then print#1,a1$(w+f);
920 if j=2 then print#1,a2$(w+f);
930 if j=3 then print#1,a3$(w+f);
940 return
1000 rem gross a-z --------------------
1002 :
1010 data 0,32,65,198,200,240,252,127,31,1,0,0,0,0,0,0,-1
1020 data 0,62,255,3,3,2,4,200,248,254,31,3,1,2,4,0,-1,-1
1030 data 0,128,255,255,255,131,131,131,131,131,131,68,124,56,0,-1
1040 data 0,1,255,255,255,1,1,1,1,1,1,130,254,124,0,-1,-1
1050 data 0,7,31,63,112,192,128,128,128,128,128,128,64,120,56,0,-1
1060 data 0,224,248,252,14,3,1,1,1,1,1,1,2,30,28,0,-1,-1
1070 data 0,128,255,255,255,128,128,128,128,128,64,112,63,31,15,0,-1
1080 data 0,1,255,255,255,1,1,1,1,1,2,14,252,248,240,0,-1,-1
1090 data 0,7,31,63,114,194,130,130,131,131,131,131,66,112,48,0,-1
1100 data 0,224,248,252,14,3,1,1,1,1,129,1,2,14,12,0,-1,-1
1110 data 0,128,255,255,255,66,66,130,130,131,131,131,131,98,96,0,-1
1120 data 0,0,255,255,255,0,0,0,0,0,0,128,0,0,0,0,-1
1130 data 4,8,248,240,192,0,0,0,0,0,0,0,0,0,0,0,-1
1140 data 0,7,15,63,112,192,128,128,128,128,194,99,99,3,2,0,-1
1150 data 0,248,252,254,7,3,1,1,2,4,8,255,255,255,0,0,-1
1160 data 0,0,0,0,0,0,0,0,0,4,8,248,240,192,0,0,-1
1170 data 0,128,255,255,255,2,4,8,8,16,16,24,31,15,3,0,-1
1180 data 0,0,255,255,255,0,0,0,0,0,3,15,255,249,225,0,-1,-1
1190 data 0,128,255,255,255,0,0,-1
1200 data 0,0,255,255,255,1,0,-1,-1
1210 data 0,0,128,255,255,255,0,-1
1220 data 0,0,0,255,255,255,0,-1
1230 data 0,4,8,248,240,192,0,-1
1240 data 0,128,255,255,255,3,3,6,4,12,56,240,224,0,0,0,-1
1250 data 0,1,255,255,255,0,192,240,124,30,3,1,1,1,6,0,-1,-1
1260 data 0,128,255,255,255,0,0,0,0,0,0,0,0,0,0,0,-1
1270 data 0,1,255,255,255,1,1,1,1,1,1,1,1,3,7,0,-1,-1
1280 data 0,7,31,56,96,192,128,128,128,128,127,63,127,128,128,128,128
1290 data 192,96,56,31,7,0,-1
1300 data 0,192,248,62,7,1,1,0,0,0,255,255,255,0,0,0,1,1,7,62,248,192,0,-1,-1
1310 data 0,128,255,255,255,63,3,0,0,0,0,128,255,255,0,0,-1
1320 data 0,0,255,255,255,0,224,240,56,12,6,2,255,255,1,0,-1
1330 data 4,8,248,240,192,0,0,0,0,0,0,0,0,0,0,0,-1
1340 data 0,7,31,63,96,64,128,128,128,128,64,96,63,31,7,0,-1
1350 data 0,224,248,252,6,2,1,1,1,1,2,6,252,248,224,0,-1,-1
1360 data 0,128,255,255,255,48,112,192,128,128,128,192,96,63,31,0,-1
1370 data 0,0,255,255,255,12,14,3,1,1,1,3,6,252,248,0,-1
1380 data 0,0,252,252,252,4,0,0,0,0,0,0,0,0,0,0,-1
1390 data 0,15,63,127,192,128,128,128,128,128,64,96,63,63,63,64,0,-1
1400 data 0,240,252,254,3,1,1,1,1,1,14,12,255,255,255,0,0,-1
1410 data 0,0,0,0,0,0,0,0,0,0,0,4,252,248,248,0,0,-1
1420 data 0,128,255,255,255,129,129,129,129,129,195,126,60,0,0,0,-1
1430 data 0,1,255,255,255,0,128,192,96,56,30,7,3,3,2,0,-1,-1
1440 data 0,30,63,127,199,131,131,131,131,131,131,131,195,113,48,0,-1
1450 data 0,28,30,3,129,129,129,129,129,129,131,199,254,252,248,0,-1,-1
1460 data 0,32,96,192,128,128,255,255,255,128,128,128,128,128,0,-1
1470 data 0,0,0,0,0,0,255,255,255,1,0,0,0,0,0,-1,-1
1480 data 0,7,159,255,128,128,0,0,0,0,128,255,255,255,0,0,-1
1490 data 0,248,252,254,1,1,1,1,2,4,8,255,255,255,1,0,-1,-1
1500 data 0,96,192,224,252,127,31,3,0,0,0,0,7,216,224,0,-1
1510 data 0,0,0,0,0,0,224,248,255,15,48,192,0,0,0,0,-1,-1
1520 data 0,3,15,191,192,128,0,0,3,15,191,192,128,0,0,0,0,128,255,255
1530 data 255,0,0,-1
1540 data 0,248,254,254,3,1,1,1,250,254,254,3,1,1,1,2,2,4,255,255,255,1,0,-1,-1
1550 data 0,32,64,192,240,252,63,15,3,4,8,16,224,192,0,0,-1
1560 data 0,7,11,16,32,64,128,192,240,252,62,15,3,1,6,0,-1,-1
1570 data 0,96,192,224,252,127,31,3,0,0,0,0,7,216,224,0,-1
1580 data 0,0,0,0,0,0,224,248,255,14,48,192,0,0,0,0,-1
1590 data 0,0,0,0,12,28,24,96,128,0,0,0,0,0,0,0,-1
1600 data 0,128,192,192,224,128,128,129,131,143,158,188,240,224,192,0,-1
1610 data 0,3,7,15,29,121,241,225,129,1,1,7,3,3,1,0,-1,-1
1611 :
1612 rem  ,-./  0 bis 9 ----------------
1613 :
1614 data 0,0,0,0,0,-1,0,0,3,3,0,-1,0,48,192,0,0,-1
1615 data 0,0,1,1,1,1,1,1,1,1,1,1,0,0,-1
1616 data 0,0,128,128,128,128,128,128,128,128,128,128,0,0,-1,-1
1617 data 0,0,0,0,0,0,-1,0,0,3,3,0,0,-1,-1
1618 data 0,0,0,0,0,0,3,12,48,192,0,0,-1
1619 data 0,0,3,12,48,192,0,0,0,0,0,0,-1,-1
1620 data 0,0,3,12,16,32,32,32,48,56,15,,0,-1
1630 data 0,240,252,14,3,1,1,1,2,12,240,0,0,-1,-1
1640 data 0,16,31,63,63,0,0,-1
1650 data 0,0,255,255,254,2,0,-1,-1
1660 data 0,8,16,32,32,32,48,31,15,0,0,0,0,0,-1
1670 data 0,1,3,7,15,29,249,225,193,1,1,3,2,0,-1
1680 data 0,0,0,128,128,128,128,128,128,128,0,0,0,0,-1
1690 data 0,16,32,33,51,62,28,0,0,-1
1700 data 0,64,128,128,128,255,254,56,0,-1
1710 data 0,16,32,64,128,128,0,0,0,-1
1720 data 0,0,0,0,1,2,4,15,31,63,0,0,0,0,-1
1730 data 0,32,96,160,32,32,32,255,255,254,32,32,32,0,-1,-1
1740 data 0,1,7,59,51,19,19,19,17,16,0,-1
1750 data 0,128,0,0,0,0,131,252,240,0,0,-1
1760 data 0,8,16,32,64,128,0,0,0,0,0,-1
1770 data 0,3,15,18,36,68,76,140,12,7,3,0,-1
1780 data 0,248,254,7,1,1,1,1,1,6,248,0,-1,-1
1790 data 0,48,48,24,24,24,17,22,56,32,0,-1
1800 data 0,0,1,15,30,112,128,0,0,0,0,-1
1810 data 0,48,240,192,0,0,0,0,0,0,0,-1
1820 data 0,0,121,135,131,131,133,121,0,0,-1
1830 data 0,124,194,129,1,1,129,226,124,0,-1,-1
1840 data 0,0,3,4,4,8,8,12,6,7,1,0,-1
1850 data 0,248,252,6,3,1,1,2,2,229,254,0,-1
1860 data 0,0,0,0,0,8,16,32,64,128,0,0,-1
1862 :
1864 rem -- satzzeichen :;!()?----------
1866 :
1870 data 0,0,3,3,0,0,-1,0,0,3,3,0,0,-1,-1
1880 data 0,0,0,0,0,0,-1,0,0,51,51,0,0,-1,0,48,192,0,0,0,-1
1910 data 0,0,127,255,254,0,0,-1,0,0,243,243,0,0,0,-1,-1
1920 data 0,31,63,64,128,0,-1,0,248,252,2,1,0,-1,-1
1930 data 0,128,64,63,31,0,-1,0,1,2,252,248,0,-1,-1
1940 data 0,48,112,192,129,135,252,120,0,-1
1950 data 0,0,0,115,243,0,0,0,0,-1,-1
1952 :
1954 rem klein a-z
1956 :
1960 data 0,0,1,3,2,2,2,1,0,1,3,2,0,0,-1
1970 data 0,252,254,3,1,1,1,1,130,254,255,1,2,0,-1,-1
1980 data 0,64,255,255,0,1,2,2,2,2,1,1,0,-1
1990 data 0,0,252,254,193,193,1,1,1,2,254,252,0,-1,-1
2000 data 0,0,1,3,2,2,2,2,1,1,0,-1,0,252,254,3,1,1,1,1,2,4,0,-1,-1
2010 data 0,0,0,1,2,2,2,1,128,255,255,0,0,0,-1
2020 data 0,124,254,3,1,1,1,2,132,254,255,1,2,0,-1,-1
2030 data 0,0,1,3,2,2,2,2,1,0,0,-1
2040 data 0,252,254,35,33,33,33,33,161,98,0,-1,-1
2050 data 0,15,63,114,130,131,131,128,96,32,0,-1
2060 data 0,255,255,0,0,0,0,0,0,0,0,-1,0,252,252,4,0,0,0,0,0,0,0,-1
2070 data 0,0,0,1,2,2,2,1,1,1,1,1,0,-1
2080 data 0,124,254,131,1,1,1,130,132,191,127,128,0,-1
2090 data 0,56,52,4,4,4,4,8,16,240,224,0,0,-1
2100 data 0,128,255,255,1,2,2,2,1,1,0,0,0,0,-1
2110 data 0,0,255,255,0,0,0,0,0,254,255,1,2,0,-1,-1
2120 data 0,2,51,51,0,0,0,-1,0,0,254,255,1,2,0,-1,-1
2130 data 0,2,51,51,0,-1,0,0,255,255,0,-1,4,8,240,224,0,-1
2140 data 0,128,255,255,0,0,0,3,3,0,0,0,-1
2150 data 0,0,255,255,32,88,76,134,3,1,2,0,-1,-1
2160 data 0,128,255,255,0,0,0,-1,0,0,254,255,1,2,0,-1,-1
2170 data 0,1,2,3,1,1,2,3,1,1,2,3,1,0,0,0,-1
2180 data 0,0,0,255,255,0,0,255,255,0,0,254,255,1,2,0,-1,-1
2190 data 0,1,2,3,1,1,2,3,1,0,0,0,-1
2200 data 0,0,0,255,255,0,0,254,255,1,2,0,-1,-1
2210 data 0,0,1,1,2,2,2,2,3,1,0,0,-1
2220 data 0,252,254,3,1,1,1,1,1,254,252,0,-1,-1
2230 data 0,1,2,3,1,0,1,2,2,2,3,1,0,0,-1
2240 data 0,0,0,255,255,132,2,1,1,1,3,254,252,0,-1
2250 data 0,0,0,252,252,4,0,0,0,0,0,0,0,0,-1
2260 data 0,0,0,1,2,2,2,1,1,1,1,1,0,-1
2270 data 0,124,254,131,1,1,1,130,132,191,127,128,0,-1
2280 data 0,0,0,0,0,0,0,0,0,252,252,4,0,-1
2290 data 0,1,2,3,1,2,3,1,1,0,-1,0,0,0,255,255,0,0,128,0,0,-1,-1
2300 data 0,0,1,3,2,2,2,2,3,1,0,0,-1
2310 data 0,198,247,49,49,49,49,49,179,159,12,0,-1,-1
2320 data 0,4,12,255,255,4,4,4,0,-1
2330 data 0,0,0,254,255,1,2,0,0,-1,-1
2340 data 0,2,3,3,0,0,0,2,3,3,0,0,0,-1
2350 data 0,0,254,255,1,1,1,2,254,255,1,2,0,-1,-1
2360 data 0,1,2,3,3,1,0,0,0,0,0,3,3,0,-1
2370 data 0,0,0,0,128,224,120,30,7,12,48,192,0,0,-1,-1
2380 data 0,2,3,3,0,0,3,3,0,0,3,3,0,-1
2390 data 0,0,254,255,1,2,254,255,1,2,254,252,0,-1,-1
2400 data 0,2,3,3,2,0,0,0,0,3,2,0,0,-1
2410 data 0,1,3,132,232,112,56,92,134,3,1,2,0,-1,-1
2420 data 0,1,2,3,3,1,0,0,0,0,0,3,3,0,-1
2430 data 0,0,0,0,128,224,120,30,7,12,48,192,0,0,-1
2440 data 0,0,0,24,28,12,48,192,0,0,0,0,0,0,-1
2450 data 0,3,3,2,2,2,2,2,3,3,2,0,-1
2460 data 0,1,3,7,13,57,113,193,129,3,3,0,-1,-1
Listing. Schreiberling druckt phantasievolle Schriften. Bitte beachten Sie die Eingabehinweise auf Seite 54.
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →