★ APPLICATIONS ★ PROGRAMMATION ★ Groß, größer, am größten|CPC Amstrad International) ★ |
Zeichenzoom (CPC Amstrad International) | Applications Programmation |
Zeichenzoom Wer hat nicht schon mal vor dem Problem gestanden, daß man größere Zeichen benutzen wollte als der gerade aktuelle Modus erlaubt, wenn möglich auch mehrere Größen, in einer nicht speicherplatzfressenden Routine. Es gibt in dieser Richtung schon einige Tips. Aber die meisten basieren darauf, das zu vergrößernde Zeichen in einer vorher fest definierten Matrix zu suchen, um es dann vergrößert (auch fest definiert) darzustellen. Allerdings gibt es meistens Schwierigkeiten, wenn z.B. später selbst definierte oder außerhalb der definierten Matrix enthaltene Zeichen vergrößert dargestellt werden sollen. Die folgende nur 1059 Bytes lange Routine ermöglicht auf komfortable Weise die vergrößerte Darstellung aller darstellbaren ASCII- und auch selbstdefinierten Zeichen. Und das auch noch in allen drei Modi in jeweils vier verschiedenen Zeichenarten (2-4 mal so groß und einmal doppelt mit unterstreichen). Wie funktioniert das? Das Locomotive Basic der CPC stellt dafür einen mächtigen Befehl zur Verfügung: “Der Klammeraffe unter dem CP/M Balken“. Mit dieser Taste läßt sich nicht nur CP/M aufrufen oder AMSDOS bedienen, sondern sie stellt einen eigenständigen, interessanten Befehl. Mit ihm können Strings bearbeitet und “verbogen“ sowie die Adressen von Variablen damit festgestellt werden. Und hier haben wir den CASUS KNACKTUS für die Zeichenvergrößerung. Anstatt nun > name$ < Zeichen für Zeichen auszulesen und mit dem ASCÜ-Zei-chensatz zu vergleichen (s.o), stellen wir mit >adresse= < in Zeile 10020 die Adresse des Strings im Speicher fest, um ihn dann BIT für BIT auszulesen (gemäß der Zeichenmatrix). Jedesmal, wenn bei der Auslesung des Zeichens ein darstellender Wert gefunden wird, wird dieser als Parameter eines SYMBOL-Befehls gespeichert. Das heißt, jedes Zeichen von >name$< wird ausgelesen und in eine Symboldefinition zerlegt. Je nachdem, welche Vergrößerung Sie ge- Normalerweise könnte dieses ohne große Probleme immer weiter ausgebaut werden. Ein Handicap hat diese Art der Auslesung allerdings. Nicht alles kann ausschließlich mit Pluspunkten belegt werden. Die Zeichen werden nur in vertikaler Achse verzehrt. Entsprechend der Größe “wachsen“ sie nicht in der horizontalen mit. Aber bei den im Programm enthaltenen Vergrößerungen hält sich das noch im Rahmen. VORTEIL ! Die maximale Zeichenlänge je Zeile kommt nicht durcheinander. Der Befehl LOCATE bleibt daher fast ohne Einschränkungen kompatibel und ermöglicht die Darstellung aller verschiedenen Zeichengrößen eines Modes in einer Zeile. Dabei ist allerdings die Höhe der Zeichen zu beachten. Die Länge eines Strings darf die maximale Zeichenlänge einer Zeile des aktuellen Modes überschreiten. Das Carriage Return wird entsprechend größer ausgeführt. Wie wird die Routine benutzt? Eigentlich ganz einfach. Zu Beginn den Modus bestimmen. Dann den auszulesenden Text, Zahlen oder auch Zeichen der Variablen >name$< zuweisen. Nun müssen Sie noch die Vergrößerung der Variablen “zahl“ zuordnen (zahl hat mögliche Werte zwischen 2 und einschl. 5). Als letzte Vorbereitung, den Cursor mit Locate positionieren. Rufen Sie dann die Routine mit GOSUB (Zeilennummer, im Beispiel 10000) auf. Wichtig Sie dürfen in dem Programm, in welchem diese Routine benutzt wird, den für BASIC zur Verfügung stehenden Speicherplatz nicht so herabsetzen, daß keine SYMBOL-Definition mehr möglich ist. Die vor Zeile 10000 stehenden Zeilen sind das DEMO-Programm und können ohne weiteres für die spätere Nutzung gelöscht werden. (Holger Schäkel/cd) , CPCAI
|