Textmaster - Textverarbeitung speziell für MPS 801/803
Mit Textmaster stellen wir Ihnen eine Textverarbeitung vor, die den MPS 801 und den MPS 803 voll ausnutzt. Randausgleich sowie beliebige Zeichensätze sind nur einige der hervorstechenden Eigenschaften von Textmaster.
Textverarbeitungsprogramme gibt es viele, aber diese sind meist für den professionellen Gebrauch gedacht. Die Folge: Vernünftige Druckergebnisse kann man nur mit teuren Druckern wie einem Epson FX-80 erhalten. Die weitverbreiteten Commodore-Drucker werden meist stark vernachlässigt und dürfen nur in ihrer Mini-Matrix drucken. Man traut sich gar nicht recht, damit Briefe zu schreiben und abzuschicken. Textmaster räumt jedoch damit gründlich auf. Es wurde speziell für die Drucker MPS 801 und MPS 803 entwickelt. Ein Umschreiben auf andere Drucker ist leider nur unter sehr großem Aufwand möglich. Dafür werden diese beiden Drucker aber optimal genutzt. Buchstaben kommen in einer augenfreundlichen 8 mal 8-Matrix aufs Papier, mit echten Unterlängen und auch Umlauten. AberTextmaster kann noch mehr: Eine kleine Auswahl der Möglichkeiten zeigt Bild 1. Diese Funktionen werden im einzelnen nachher erklärt. Insgesamt vier Listings bilden das Textmaster-System. Davon ist Listing 4, der Zeichensatzgenerator, entbehrlich, wenn Sie nicht mit eigenen Zeichensätzen arbeiten wollen. Bevor Sie mit Textmaster arbeiten, müssen Sie ihn abtippen und zwar die Listings 1 und 2 mit dem Checksummer, das Listing 3 mit dem MSE. Listing 1 können Sie unter einem beliebigen Namen auf Diskette speichern. Listing 2 muß unbedingt unter dem Namen »TM«, Listing 3 unter dem Namen »TM.CODE« gespeichert werden.

Starten des Programms
Textmaster besteht aus drei einzelnen Teilprogrammen. Zuerst muß das Programm aus Listing 1 geladen werden. Anschließend wird RUN eingegeben. Das Hauptprogramm »TM« und die Maschinenroutinen »TM.CODE« werden nun selbständig geladen. Ein umständliches Wechseln der Diskette während des Arbeitens entfällt bei Textmaster, da sich nach dem Laden das gesamte Programm im Speicher des C64 befindet. Man kann also die Programmdiskette beiseite legen und die Datendiskette in das Laufwerk schieben.
Bildschirmaufbau
Nach dem Laden erscheint in der Mitte des Bildschirms der Autorenvermerk. Durch Drücken einer beliebigen Taste gelangt man in das Hauptmenü. Der nun vorliegende Bildschirmaufbau verändert sich von da an nicht mehr. Ein verwirrendes Umblättern auf andere Bildschirmseiten entfällt. Man erkennt zunächst, daß der Bildschirm in drei Teile eingeteilt ist. Im oberen Teil werden immer die aktuellen Koordinaten des Cursors angezeigt. Die Zeilenposition des Cursors kann zwischen 0 und 49 (= 50 Zeilen), die der Spalte zwischen 0 und 59 (= 60 Spalten) liegen. Zwischen den beiden roten Balken befindet sich dann immer ein Ausschnitt der gerade im Textspeicher befindlichen Seite. Hier werden dann auch immer die verschiedenen Menüs eingeblendet. So ist momentan das Hauptmenü (Dokumente erstellen) zu erkennen. Auf dem unteren roten Balken wird jeweils der Name des aktuellen Dokumentes und die Nummer der Seite desselben angezeigt.
Schließlich bleibt noch die unterste Zeile. Diese ist für Fehlermeldungen, Sicherheitsrückfragen etc. reserviert.
Einfache Menüstruktur
Hauptmenü:
Dokumente erstellen beziehungsweise verändern
Dies stellt eigentlich kein Menü dar, da es praktisch »mitdenkt«, das heißt, man muß nicht angeben, ob man ein neues Dokument erstellen oder ein bereits vorhandenes verändern möchte.
In dieses Menü gelangt man automatisch nach dem Starten des Programmes. Das Programm erwartet vom Benutzer nun den Namen des Dokumentes (unterste Zeile). Korrigieren ist mit DEL möglich. Die Eingabe wird mit RETURN abgeschlossen. Hat man nur »$« eingegeben, so wird die Directory der Diskette angezeigt. Durch Drücken einer beliebigen Taste gelangt man wieder ins Hauptmenü.
Nach der Eingabe prüft das Programm, ob ein Dokument mit diesem Namen auf der Datendiskette existiert. Ist dies der Fall, so wird noch, falls das Dokument durch einen Code geschützt wurde, derselbe abgefragt. Stimmt dieser nicht mit dem gespeicherten Code überein, passiert nichts, das heißt, man gelangt wieder zu der Abfrage des Dokumentennamens. Auf diese Weise kann man wichtige Dokumente vor dem Einblick Unbefugter schützen. Wurde jedoch der richtige Code eingegeben, so wird die Seite des Dokuments mit der höchsten Nummer geladen. Man kann dann also direkt dort weiterarbeiten, wo man zuletzt aufgehört hat.
Stellt das Programm jedoch fest, daß ein Dokument mit dem eingegebenen Namen auf der Diskette nicht existiert, so wird angenommen, daß der Benutzer ein neues Dokument erstellen möchte. Sollte dies nicht der Fall sein oder sollte man sich bei der Eingabe nur vertippt haben, dann ist die Sicherheitsrückfrage mit »n« (nein) zu beantworten. Andernfalls verlangt das Programm noch den Schutzcode des Dokumentes. Drückt man nur die RETURN-Taste, so wird das Programm nicht geschützt, das heißt bei erneutem Laden erfolgt keine Schutzcodeabfrage.
Sind alle Eingaben beendet, so werden auf der Diskette die dokumentenspezifischen Parameter gespeichert und es kann auf der 1. Seite mit der Arbeit begonnen werden.
Die Tastatur und der Texteditor
Wie die meisten Textverarbeitungsprogramme besitzt auch Textmaster einen bildschirmorientierten Texteditor, dessen Bedienung größtenteils identisch ist mit der des normalen Basic-Editors. Dies macht die Bedienung besonders einfach. So kann man mit den Cursortasten jede Stelle der 60 x 50 gleich 3000 Zeichen großen Seite erreichen.
An Zeichen stehen zur Verfügung alle Klein-/Großbuchstaben, Sonderzeichen und sogar alle Grafikzeichen des Commodore-Zeichensatzes. Lediglich der Pfeil nach links (linke obere Taste auf der Tastatur) darf nicht verwendet werden, da dieser als Absatzzeichen fungiert. Auch darf man aus programmtechnischen Gründen das Zeichen mit dem Bildschirmcode 255 unter gar keinen Umständen benutzen.
Ansonsten jedoch stehen alle Zeichen zur Verfügung. So hat man in Verbindung mit den Grafikzeichen des Commodore-Zeichensatzes oder mit Zeichen aus einem eigenen Zeichensatz die Möglichkeit, Tabellen oder Spezialzeichen (zum Beispiel mathematische Zeichen) in einen Text einzubinden.
Die RETURN-Taste
Wurde die RETURN-Taste gedrückt, so wird ein »Wagenrücklauf« veranlaßt. Befindet sich der Cursor jedoch in der 0. Spalte, so wird statt eines Wagenrücklaufs das Setzen des Cursors in die 39. Spalte ausgelöst. Dies ist eine nützliche Funktion, da man auf diese Weise den Text einfach durch wiederholtes Drücken der RETURN-Taste kontinuierlich lesen kann.
Wird die RETURN-Taste in Verbindung mit der SHIFT-Taste gedrückt, so wird an die augenblickliche Position des Cursors ein Absatzzeichen gesetzt und dann ein Wagenrücklauf ausgelöst. Beim Ausdruck wird das Absatzzeichen dann natürlich ignoriert.
Die CLR-Taste
Mit der Funktion CLR (SHIFT-HOME) wird der gesamte Textspeicher gelöscht. Man sollte sich vorher vergewissert haben, daß die aktuelle Seite bereits auf Diskette gespeichert wurde, bevor man die Sicherheitsrückfrage mit »ja« beantwortet.
Die DEL- beziehungsweise INST-Taste
Diese beiden Tasten werden genauso wie im normalen Basic-Editor verwendet. Mit einer kleinen Einschränkung. Sie wirken jeweils nur auf die Zeile, in der sich der Cursor gerade befindet. Deshalb sind diese beiden Tasten nur für kleinere Ausbesserungen geeignet. Es ist zu beachten, daß bei der INST-Funktion die Buchstaben auf der rechten Seite hinausgeschoben werden und damit verlorengehen. Müssen größere Textstellen eingefügt werden, so muß die Funktion ZEILE-EINFÜGEN verwendet werden (siehe unten).
Extended Modus
Durch Drücken von RVS ON (CTRL + 9) gelangt man in den EXTENDed MODUS. Alle eingegebenen Zeichen erscheinen nun auf dem Bildschirm invertiert. Durch Drücken von RVS OFF (CTRL + 0) oder bei jedem Wagenrücklauf gelangt man wieder in den NORMal Modus. Im Druckermenü wird dann festgelegt, wie die auf dem Bildschirm invertierten Zeichen auf dem Papier erscheinen sollen, etwa auch invertiert oder zum Beispiel unterstrichen.
F5-Taste - Text neu ordnen
Voran noch eine Einleitung, wie man Texte am zügigsten eingibt. Man gibt den Text ohne Rücksicht auf das am Ende erwünschte Format ein. Die einzelnen Wörter gibt man auch über eine Zeile hinaus ein. Absätze werden durch Drücken von SHIFT-RETURN markiert. Durch Drücken der F5-Taste wird der Text linksbündig geordnet, das heißt in eine Zeile werden so viele vollständige Wörter wie möglich gesetzt. Würde also ein Wort beim Setzen in die betreffende Zeile über den rechten Rand der Seite hinausreichen, so wird das ganze Wort einfach in die nächste Zeile gesetzt. Wurde so der ganze Text linksbündig formatiert, erhält man gewöhnlich rechts einen ziemlich unregelmäßigen »Flatterrand«, aber der Text wäre somit schon fertig für den Ausdruck.
Nebenbei sei bemerkt, daß nach Aufrufen dieser Funktion der Text gewöhnlich 2 bis 3 Zeilen länger geworden ist, da er nun nicht mehr so dicht »gepackt« ist. Daher sollte man sich vorher überzeugen, daß die letzten Zeilen frei sind, da ansonsten die letzten Wörter verloren wären.
RUN/STOP-Taste - Wörter trennen
Oben wurde bereits erwähnt, daß der Text, nachdem er neu geordnet wurde, gewöhnlich einen Flatterrand besitzt. Mit der Funktion »Wörter trennen« kann dieser erheblich begradigt werden. Man geht mit dem Cursor auf das erste Wort einer Zeile und setzt ihn auf den Anfangsbuchstaben der letzten Silbe des Wortes. Wäre das Wort zum Beispiel »glücklicherweise«, dann kann man davon ausgehen, daß, da das Wort relativ lang ist, in der vorhergehenden Zeile noch Platz für ein paar Silben des Wortes ist. Man möchte natürlich möglichst viele Silben in die vorhergehende Zeile übernehmen. In dem Fall ist die letzte Silbe »-se«. Man setzt den Cursor also auf »s« und drückt die RUN/STOP-Taste. Das Programm nimmt nun den Wortteil »glücklicherwei«, setzt ihn in die vorhergehende Zeile und fügt automatisch das Trennzeichen »-« an. Anschließend wird ebenfalls automatisch die Funktion »Wörter neu ordnen« aufgerufen, so daß der Text wieder lückenlos geschlossen ist.
Stellt das Programm jedoch fest, daß in der vorhergehenden Zeile nicht mehr genug Platz für »glücklicherwei« ist, so passiert überhaupt nichts. In diesem Fall setzt man den Cursor auf den Anfangspunkt der nächsten Silbe, also auf das »w« in »-wei-«. Dies setzt man so lange fort, bis das Wort erfolgreich getrennt wurde.
Zeile löschen (F3) - Zeile einfügen (F4)
Ein Druck auf die Taste F3 bewirkt ab Cursorposition das Löschen der nächsten 60 Stellen. Der nachfolgende Text wird außerdem um eine Zeile nach oben verschoben. Diese Funktion dient hauptsächlich dem Löschen größerer Textbereiche.
Die Funktion »Zeile einfügen« (F4) bewirkt gewissermaßen das Gegenteil. Ab Cursorposition werden 60 Leerstellen eingefügt. Es ist somit möglich, größere Textbereiche einzufügen. Reichen 60 Leerstellen nicht aus, so ist die Funktion erneut aufzurufen, allerdings ist dabei zu beachten, daß jeweils die unterste Zeile einer Seite verlorengeht. Man sollte sich vorher vergewissern, daß diese unbeschrieben ist.
Seite auf Diskette sichern (F2) - blättern (F7 und F8)
Zuvor muß noch erklärt werden, wie ein Text auf der Diskette festgehalten wird. Wie schon erwähnt, werden Texte in Form von Dokumenten gespeichert. Jedes dieser Dokumente besteht aus einzelnen Seiten. Im Speicher des C 64 befindet sich jeweils eine Seite eines Dokumentes, nämlich die, an der man gerade mit Hilfe eines Texteditors arbeitet. Hat man eine Seite vollgeschrieben oder möchte man mit der betreffenden Seite zum Beispiel ein Kapitel abschließen und auf einer neuen Seite beginnen, so muß diese erst auf Diskette gespeichert werden. Dies geschieht durch Drücken der Taste F2 und anschließendem Bejahen der Sicherheitsrückfrage. Möchte man nun mit der nächsten Seite beginnen, so drückt man F7 (vorblättern). In der unteren Zeile des Bildschirms erscheint dann »Blättere zu Seite n«, wobei n der aktuellen Seite plus eins entspricht. Dann drücke man auf die RETURN-Taste. Das Programm prüft nun, ob Seite n auf der Diskette vorliegt. Liegt sie vor, so wird sie geladen und erscheint auf dem Bildschirm. Man kann sie nun lesen oder verändern und erneut speichern. Lag die Seite allerdings nicht vor, so erscheint nur ein leerer Bildschirm, das heißt, eine unbeschriebene Seite. Durch mehrmaliges Drücken der F7-Taste kann man beliebig weit vorblättern oder zurückblättern (F8), ähnlich wie in einem Buch.
Durch das Drücken der RUN/STOP-Taste verläßt man den Modus ohne Laden einer Seite. Jede Seite beansprucht einen Platz von 12 Blöcken auf der Diskette. Eine Diskette kann somit immerhin bis zu 664/12 = 55Seitenaufnehmen.
Zeichensatz laden (F6)
Eine besondere Möglichkeit von Textmaster besteht darin, daß man jeden beliebigen Zeichensatz laden und auch ausdrucken kann.
Nach dem Laden des Programms liegt automatisch ein deutscher Zeichensatz vor, der für die meisten Anwendungen genügen dürfte. So entspricht der Klammeraffe dem »ä«, der Multiplikationsstern dem »ö« und das Potenzzeichen (Pfeil nach oben) dem »ü«. In Verbindung mit der SHIFT-Taste stehen natürlich auch die großen Umlaute »Ä«, »Ö« und »Ü« zur Verfügung. Ferner entspricht das Pfundzeichen dem »ß« und das Nummernzeichen (SHIFT 3) dem Anführungszeichen unten. Diese Belegung entspricht zwar nicht einer deutschen Schreibmaschinentastatur, erscheint mir aber am zweckmäßigsten, da man ansonsten gleich zum Beispiel die Zeichen »:« und »;« ebenfalls umbelegen müßte, was zur Folge hätte, daß die Symbole auf der Tastatur überhaupt nicht mehr den dazugehörigen Zeichen entsprechen würden. Das »Z« und das »Y« wurden nicht vertauscht.
Benötigt man jedoch für spezielle Anwendungen, beispielsweise für mathematische oder chemische Formeln oder auch für französische Texte einen neuen Zeichensatz, so ist das mit Textmaster keine Schwierigkeit Durch Drücken von F6 und anschließendem Bejahen der Sicherheitsrückfrage gelangt man ins Zeichensatzmenü. Hier muß man zuerst beantworten, als was man den Zeichensatz benutzen möchte. Entweder als Arbeitszeichensatz (das ist der, den man auch auf dem Bildschirm sieht) oder als Alternativzeichensatz (davon später).
Hat man sich entschieden, so stehen nun vier Zeichensätze zurVerfügung. Nummer1 und Nummer 2 sind einfach Kopien der Original Commodore-Zeichensätze (Klein/Groß und Groß/Grafik). Nummer 4 ist der deutsche Zeichensatz, der auch nach dem Laden von Textmaster vorliegt und Nummer 3 ist ein beliebiger Zeichensatz, der von der Diskette geladen wird. Davor wird noch der Name des Zeichensatzes abgefragt.
Das Druckermenü (F1)
Bevor man sich entschließt, eine Seite zu drucken, sollte man sich vergewissern, ob der Text bereits das richtige Format besitzt. Sämtliche Formatierungen des Textes müssen vorher abgeschlossen werden, da, mit Ausnahme des rechten Randausgleichs, der Text so auf dem Papier erscheint, wie er auch auf dem Bildschirm zu sehen ist.
Nach dem Drücken von F1 und anschließendem Bejahen der Sicherheitsrückfrage, werden die verschiedenen Druckparameter abgefragt. Zunächst, von welcher bis welcher Zeile gedruckt werden soll. Man kann sich also einen Textausschnitt heraussuchen, zum Beispiel Zeile 10 - 25. Gibt man statt einer Zahl jeweils nur RETURN ein, so wird vom Programm angenommen, daß die ganze Seite (Zeile 0 - 49) ausgedruckt werden soll.
Anschließend verlangt das Programm, wie die Zeichen im Extended Modus (erscheinen auf dem Bildschirm invers) auf dem Papier erscheinen sollen, entweder unterstrichen, invertiert oder als Alternativzeichen. Dazu ist zu sagen, daß sich im Speicher des C 64 zwei Zeichensätze befinden können. Bei normalen Zeichen wird die Bitmatrix des Zeichens, die an den Drucker geschickt wird, aus dem Arbeitszeichensatz (das ist der, der auf dem Bildschirm zu sehen ist) genommen. Bei einem extended Zeichen wird dann die Bitmatrix aus dem Alternativzeichensatz genommen. Normalerweise befindet sich nach dem Starten des Programms der Original Commodore-Groß/Klein-Zeichensatz im Speicher, damit auch die geSHIFTeten Grafikzeichen zur Verfügung stehen.
Man könnte nun aber den auf Programmdiskette befindlichen Zeichensatz »dünn« als Arbeitszeichensatz laden und den deutschen als Alternativzeichensatz. Auf diese Weise erscheinen dann die Alternativzeichen als Fettschrift. Auf die gleiche Weise läßt sich auch zum Beispiel Kursivschrift simulieren.
Hat man sich nun zum Beispiel für Unterstreichen entschieden, so bezieht sich dies auf die ganze Seite. Normalerweise genügt das auch. Möchte man nun aber aus irgendwelchen Gründen eine Seite ausdrucken, in der zum Beispiel in Zeile 5 etwas unterstrichen, in Zeile 6 hingegen etwas invertiert werden soll, so muß man den Text in entsprechend mehrere Teile zerlegen. Im obigen Beispiel müßte man das Druckermenü also zweimal aufrufen. Das erste Mal von Zeile 0 - 5, unterstrichen, und das zweite Mal von Zeile 6 - 49, invertiert.
Als nächstes möchte das Programm erfahren, ob man die Zeichen in normaler Breite (8x8 Bitmatrix) oder in komprimierter Form (7x8 Bitmatrix) drucken möchte. Die Bildschirmzeichen bestehen zwar aus einer 8x8 Bitmatrix, jedoch hat sich gezeigt, daß zumindest Buchstaben, Zahlen und Sonderzeichen, kurz: jene Zeichen, die man für einen ganz normalen Text verwendet, daß diese eigentlich nur aus einer 6x8 Bitmatrix bestehen, da sich links und rechts von jedem Buchstaben eine leere Bitspalte befindet, obgleich eine bereits genügen würde. Bei der komprimierten Schriftbreite wird also jedes Zeichen auf eine 7x8 Bitmatrix reduziert. Dies hat den Vorteil, daß die Zeichen enger aneinanderstehen und somit besser gelesen werden können. Die Anzahl der Zeichen pro Zeile bleibt jedoch unverändert, nämlich 60.
Die normale Schriftbreite wird benötigt, wenn man Zeichen unbedingt in der 8x8 Bitmatrix drucken möchte, etwa irgendwelche Grafik- oder Spezialzeichen. Selbstverständlich kann man die Seite auch wieder aufteilen und einen Teil normal, den anderen Teil komprimiert drucken. Es gibt insgesamt zahlreiche Variationsmöglichkeiten.
Komfortabler Randausgleich
Hat man sich auch hier entschieden, so wird gefragt, ob rechter Randausgleich erwünscht ist, das heißt, bei Bejahen erscheint der Text auch rechtsbündig. Schaut man sich das Druckbild etwas genauer an, so fällt einem sofort ein entscheidender Vorteil von Textmaster gegenüber anderen Textverarbeitungssystemen auf. Bei anderen Systemen nämlich wird die Rechtsbündigkeit durch mehrfaches Einfügen von Leerstellen erreicht. Dies hat den Nachteil, daß stellenweise weiße Flächen im Druckbild erscheinen, die den Text trotz der Rechtsbündigkeit etwas unregelmäßig erscheinen lassen. Bei Textmaster hingegen werden die fehlenden Leerstellen gleichmäßig auf die Leerstellen zwischen den einzelnen Wörtern einer Zeile verteilt, und zwar jeweils punktweise, das heißt innerhalb einer Zeile sind die Abstände zwischen den Wörtern gleich groß. Weiße Flächen entstehen nicht.
Um die nächsten Abfragen des Programmes zu verstehen, muß noch erklärt werden, wie die Zeichen an den Drucker gelangen.
Gedruckt wird im Grafikmodus. EineZeile, die gedruckt werden soll, besteht eigentlich aus zwei Zeilen für den Drucker, so daß für jede Bildschirmzeile insgesamt 2x7 = 14 Druckerdots zur Verfügung stehen.
Für ein Zeichen benötigt man jedoch nur 8 Dots, so daß insgesamt 6 Dots als Zeilenzwischenraum verbleiben. Werden Zeichen unterstrichen, wird das 10. Dot gedruckt. Dies hat den Vorteil, daß selbst bei Zeichen mit Unterlängen, zum Beispiel dem »g«, der Unterstrich sich deutlich von der Unterlänge abhebt.
Hoch- und Tiefschrift
Textmaster bietet jedoch auch die Möglichkeit der Hoch- und Tiefschrift. Wo benötigt man sie? Eigentlich nur ganz selten. In mathematischen Formeln, zum Beispiel für Exponenten (Hochschrift), oder als Indizes (Tiefschrift), aber zum Beispiel auch in chemischen Formeln. Normalerweise werden diese jedoch nicht verwendet, daher ist die Abfrage der Dots für Hoch-, Normal- und Tiefschrift einfach mit RETURN zu beantworten. Die Dotzahl gibt an, ab welchem Dot das Zeichen gedruckt wird. Da insgesamt 14 Dots zur Verfügung stehen, kann sich die Dotzahl zwischen 0 und 6 befinden. Möchte man beispielsweise Tiefschrift verwenden, so ist die Dotzahl 3 bei der Tiefschrift einzugeben, wenn man die Tiefschrift um 3 Dots nach unten von der Normalschrift absetzen möchte. Will man jedoch Hochschrift benutzen, so wird die Sache komplizierter. Für die Hochschriftdotzahl gibt man am besten 0 an. Für Normalschrift kann man nun aber nicht auch die Dotzahl 0 eingeben, da sich sonst die Hochschrift gar nicht von der Normalschrift absetzen würde. Vielmehr sollte man als Normalschriftdotzahl nunmehr 3 eingeben und für die Tiefschrift die Dotzahl 6. Es kommt also lediglich auf die relativen Dotzahldifferenzen an. Möchte man in einer Zeile Hochschrift benutzen, so muß also der ganze Text die gleiche Normalschriftdotzahl besitzen, da sonst die Normalschrift der betroffenen Zeile als Tiefschrift erscheinen würde.
Wie kennzeichnet man nun, was in welcher Schrifthöhe erscheinen soll? Dazu stehen drei Steuerzeichen zur Verfügung: CTRL 1 (Hochschrift), CTRL 2 (Normalschrift) und CTRL 3 (Tiefschrift). Die Steuerzeichen werden durch Grafikzeichen symbolisiert (Bildschirmcode 252 - 254). Es ist zu beachten, daß im Extended Modus die Zeichen »C = X«, »C = C« und »C = V« nicht benutzt werden dürfen, da diese als nicht druckbare Steuersymbole interpretiert würden.
Zusätzliche Funktionen
Die nachfolgenden Funktionen werden mit der CONTROL-Taste in Verbindung mit einer Buchstabentaste aufgerufen. Dies sind vorwiegend selten benötigte Funktionen. Die wichtigsten und am meisten benötigten sind ja über die Funktionstasten zu erreichen.
CTRL D bewirkt einen Sprung ins Hauptmenü. Man hat so die Möglichkeit, an einem anderen Dokument weiterzuarbeiten.'
CTRL H bewirkt eine Auflistung aller Befehle. Durch nochmaliges Drücken von CTRL H werden weitere Befehle aufgelistet.
CTRL W: Es stehen zwei vorgewählte Farbeinstellungen zur Verfügung, die über CTRL W wechselseitig aufgerufen werden können.
Mit CTRL F gelangt man ins Floppymenü. Hier steht zur Verfügung: 1. Zurück zum Texteditor, 2. Floppybefehl senden, 3. Dokument löschen, 4. Directory-Anzeige.
Hat man »Dokument löschen« versehentlich aufgerufen, so drückt man einfach RETURN.
Schließlich steht noch die Funktion »Zeile(n) zentrieren« (CTRL Z) zur Verfügung. Es wird gefragt, von welcher bis zu welcher Zeile zentriert werden soll. Gibt man hierbei einfach zweimal RETURN ein, so wird nur die Zeile zentriert, in der sich der Cursor gerade befindet. Diese Funktion ist recht nützlich, zum Beispiel für Überschriften, die genau in der Mitte einer Zeile stehen sollen.
HINWEIS!
In Zeile 4900 kann es eventuell zu Komplikationen kommen. In dieser Zeile wird nämlich die Schriftfarbe des Textes in das Farb-RAM gesetzt. Dazu wird der Farbcode (F1) in 53281 (Hintergrundfarbe) gePOKEt. Durch das anschließende Löschen des Bildschirms wird erreicht, daß das gesamte Farb-RAM die Hintergrundfarbe übernimmt. Es existieren nun aber zumindest zwei verschiedeneC64-Versionen. Auf der einen Version wird beim Bildschirmlöschen die Cursorfarbe (646) in das Farb-RAM übernommen. Man gebe daher im Direktmodus ein:
poke53281,0:print"{CLR/HOME}":poke53281,6:printpeek (55296)and15
Ist die Zahl nun ungleich 0 (=schwarz), dann ersetze man in Zeile 4900 die erste 53281 durch 646. Dadurch ändert sich natürlich die Prüfsumme für diese Zeile.
Beliebige Zeichensätze
Ein Vorteil von Textmaster ist, daß der Benutzer jeden beliebigen Zeichensatz und damit quasi jede beliebige Schrift ausdrucken kann. Dies ist eigentlich keine Neuheit, jedoch ist bei Textmaster neu, daß die Daten für den Zeichengenerator des VICs ebenso als Daten für die auszudruckenden Zeichen fungieren. Es ist somit nicht erforderlich, für die Bildschirmzeichen und die Druckerzeichen zwei getrennte Zeichensätze zu kreieren.
Wenn der Benutzer also eine Schriftart kreieren möchte, muß man zunächst einmal wissen, welches Format der Zeichensatz besitzen muß, damit er von Textmaster verarbeitet werden kann. Dazu ist zu sagen, daß der Zeichensatz das gleiche Format haben muß wie auch die Originalzeichensätze im Speicher des C 64. Ein Zeichen besteht also aus 8 Byte, die eine 8x8-Bitmatrix bilden. Entsprechende Erläuterungen sind auch in unserem ausführlichen Grafikkursus (insbesondere Ausgabe 5/84 des 64’er-Magazins) zu finden. Der interessierte Leser kann sich dies ja dann noch einmal zu Gemüte führen. Insgesamt sollte der Zeichensatz sämtliche 255 Bildschirmzeichen enthalten. Es sollte ebenfalls beachtet werden, daß die Zeichen 128 - 255 die inversen Kopien der Zeichen 0 - 127 darstellen müssen. Ein vollständiger Zeichensatz belegt somit 9 Blöcke auf der Diskette. Die Fileart muß PRG sein, das heißt, der Zeichensatz muß auf der Diskette PROGRAMM vorliegen. Dies ist wichtig, da der Zeichensatz ansonsten vom Textmaster auf der Diskette nicht gefunden würde. Die Startadresse des Files kann beliebig sein, da der Zeichensatz vom Textmaster ohnehin nicht absolut geladen wird.
Es ist verständlich, daß wir diese Zeichensätze nicht veröffentlichen können, zumal es eine Zumutung für jeden Leser wäre, eine Wüste von Zahlen abzutippen (ein Zeichensatz besteht aus 2048 Byte!). Auf der Leserservice-Diskette befinden sich aber einige Beispiel-Zeichensätze. Bleibt also nur, daß der Benutzer selbst seinen »individuellen« Zeichensatz erstellen muß. Es stehen in der Formgebung von Buchstaben nahezu unbegrenzt viele Möglichkeiten zur Verfügung.
Allerdings ist es ebenso unzumutbar, sich eine gesamte Schrift »per Hand« über eine Bitmatrix auf dem Papier »zusammenzuPOKEn«, daher benötigt man einen Zeichengenerator.
Wer aber schon einen Zeichengenerator hat, kann diesen jederzeit verwenden, wenn die auf Diskette gespeicherten Zeichensätze das oben beschriebene Format erfüllen.
Eigener Zeichengenerator
Diejenigen Leser, die über keinen Zeichengenerator verfügen, finden im Listing 4 den kleinen, aber leistungsfähigen »CHAR-GENERATOR«. Dieses Programm ersetzt zwar keinen ernstzunehmenden Zeichengenerator, jedoch können die damit erstellten Zeichensätze direkt vom Textmaster übernommen werden. »CHAR-GENERATOR« ist quasi ein Ergänzungsprogramm zu Textmaster. Auf eine nähere Dokumentation möchte ich wegen der Kürze des Programms verzichten, es ist höchstens zu sagen, daß das kleine Maschinenprogramm die Originalzeichensätze nach 8192 kopiert. Die zur Verfügung stehenden Befehle werden auf den Bildschirm geschrieben.
Auf diese Weise ist es möglich, ganze Schriftbibliotheken anzulegen. Es empfiehlt sich, das Erstellen der Texte mit dem normalen Zeichensatz vorzunehmen, um einen ungewohnten Zeichensatz auf dem Bildschirm zu vermeiden, und erst kurz vor dem Ausdruck die erwünschte Schrift zu laden. Auf der Leserservice-Diskette befinden sich schon drei fertige Zeichensätze:
- dünn
- quadrato
- Iuxus
10 rem *** textmaster 64/801 ***
20 rem by mario weck (c) juni 1985
30 poke53281,0:poke53280,0:print"{swlc}{dish}{gry2}
40 print"{clr}{down}{down}{down} {rvon}{CBM-A}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-S}
50 print" {rvon}{SHIFT--} T e x t m a s t e r 6 4 / 8 0 1 {SHIFT--}
60 print" {rvon}{CBM-Z}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-X}
70 print"{blk}poke44,48:poke12288,0:new
80 print"{down}{down}{down}load"+chr$(34)+"tm"+chr$(34)+",8
90 print"{down}{down}{down}{down}run: {gry2}Lade : Hauptprogramm{home}{blk}
100 poke198,7:poke631,17:poke632,17:poke633,17:poke634,13:poke635,13:poke636,13
110 poke637,13
10 xx=xx+1:ifxx=1thenprint"{up}"tab(17)"{gry2}Maschinenroutinen":load"tm.code",8,1
100 f1=15:f2=0:f0$="{gry3}":f1$="{yel}":f2$="{cyn}"
110 poke2,216:poke905,32:poke906,40:sys49553:poke2,208:poke905,40:poke906,48
120 sys49553
200 poke53272,25:poke788,52:gosub4900:gosub4000
300 gosub4400:gosub4300
800 data0,102,0,60,6,62,102,62,0
801 data28,56,108,108,124,102,102,124,96
802 data35,0,0,0,0,0,102,102,102
803 data42,102,0,60,102,102,102,60,0
804 data30,102,0,102,102,102,102,62,0
805 data122,102,24,60,102,126,102,102,0
806 data64,102,0,60,102,102,102,60,0
807 data94,102,0,102,102,102,102,60,0
808 data-1
900 data"Unterstreichen","Invertieren","Alternativzeichen","Normal"
901 data"Komprimiert"
2000 poke830,x:poke831,y:sys49272
2005 geta$:ifa$=""then2005
2010 ifa$="{rght}"thenx=x+1:y=y-(y<>49andx>59):x=-x*(x<60):goto2000
2020 ifa$="{left}"thenx=x-1:y=y+(y<>0andx<0):x=-x*(x>=0)-59*(x<0):goto2000
2030 ifa$="{down}"theny=y-(y<>49):goto2000
2040 ifa$="{up}"theny=y+(y<>0):goto2000
2050 poke780,asc(a$):sys49489:ifpeek(2)thenx=x+1:ifx=60theny=y-(y<>49):x=0
2060 ifpeek(2)then2000
2070 ifa$<>"{clr}"then2120
2080 a$="Text loeschen (j/n) ?":gosub4800
2090 geta$:ifa$=""then2090
2100 ifa$="j"thenx=0:y=0:sys49204
2110 gosub4810:goto2000
2120 ifa$="{home}"thenx=0:y=0
2125 ifa$=chr$(13)andx=0thenx=39:goto2000
2130 ifa$=chr$(13)andxthenx=0:y=y-(y<>49):a$="{rvof}"
2135 ifa$=chr$(20)andxthensys50335:a$="{left}":goto2020
2137 ifa$="{inst}"thensys50363
2140 ifa$="{rvon}"thenpoke182,128:printf1$"{home}{down}",,"{rvon}Extend
2150 ifa$="{rvof}"thenpoke182,0:printf1$"{home}{down}",,"Norm "
2160 ifa$<>"{f1}"then2400
2170 a$="Drucken (j/n) ?":gosub4800
2180 poke198,0:wait198,1:geta$:gosub4810:ifa$<>"j"then2000
2190 gosub4700:poke214,11:print:print," ab welcher Zeile
2200 ko$="ab Zeile Nr. ":ma=2:a1$="0":a2$="9":gosub4599:fs=val(fs$):
2210 iffs<0orfs>49then2200
2220 poke901,fs:gosub4700:poke214,11:print:print,"bis zu welcher Zeile
2230 ko$="bis Zeile Nr. ":gosub4599:fs=val(fs$):iffs<0orfs>49orfs<peek(901)then2200
2235 iffs$=""thenfs=49
2240 poke902,fs+1:gosub4700:poke214,6:print:print," Extended Modus
2250 print,"{down}{down}{down}1) "k$(1)
2260 print,"{down}{down}2) "k$(2)
2270 print,"{down}{down}3) "k$(3)
2280 geta$:d=val(a$):ifd<1ord>3then2280
2281 ifd=1thenpoke900,1
2282 ifd=2thenpoke900,0
2283 ifd=3thenpoke900,128
2290 gosub4700:poke214,6:print:print," Zeichendichte
2300 print,"{down}{down}{down}{down}1) "k$(4)
2310 print,"{down}{down}{down}2) "k$(5)
2320 geta$:a=val(a$):ifa<1ora>2then2320
2330 poke904,a-1
2331 gosub4700:poke214,10:print:print," rechter
2332 print,"{down}Randausgleich (j/n)?
2333 poke198,0:wait198,1:geta$:poke1000,0:ifa$="j"thenpoke1000,1
2334 gosub4700:poke214,10:print:print," Wieviel Dots fuer
2335 ko$="Hochschrift:":ma=1:a1$="0":a2$="6":gosub4599:poke1012,val(fs$)
2336 ko$="Normalschrift:":gosub4599:poke1013,val(fs$)
2337 ko$="Tiefschrift:":gosub4599:poke1014,val(fs$)
2340 gosub4700:poke214,7:print:print,"Es wird gedruckt
2341 print,"{down}von Zeile"peek(901)"bis"peek(902)-1
2342 print,"{down}"k$(d):print,"{down}"k$(4+peek(904))"e Zei-":print,"{down}chendichte ";
2343 ifpeek(1000)thenprint"mit
2344 ifpeek(1000)=0thenprint"ohne
2345 print,"{down}Randausgleich
2349 a$="Werte in Ordnung (j/n) ?":gosub4800
2350 geta$:ifa$=""then2350
2360 gosub4810:ifa$<>"j"then2170
2370 a$="Drucker betriebsbereit ? <Taste>":gosub4800
2380 poke198,0:wait198,1:geta$:gosub4810:gosub4700:sys49821
2400 ifa$="{f4}"thensys50291
2500 ifa$=chr$(141)thenpoke2048+x+y*60,31:a$=chr$(13):x=1:goto2130
2510 ifa$<>"{f6}"then2700
2520 a$="Zeichensatz laden (j/n) ?":gosub4800:poke198,0:wait198,1:geta$
2530 gosub4810:ifa$<>"j"then2000
2540 gosub4700:poke214,6:print:print,"{gry3} Wofuer benoetigt ?
2550 print,"{down}{down}{down}1) Arbeits-
2560 print,"{down}{down}{down}2) Alternativ-
2570 print,"{down}{down}Zeichensatz ?
2580 poke198,0:wait198,1:geta$:a=val(a$):ifa<1ora>2then2580
2590 ifa=1thenpoke900,32:poke905,32:poke906,40
2595 ifa=2thenpoke900,40:poke905,40:poke906,48
2600 gosub4700:poke214,6:print:print," Welcher ?
2610 print,"{down}{down}1) Klein/Gross
2620 print,"{down}2) Gross/Grafik
2630 print,"{down}3) Von Disk laden
2635 print,"{down}4) Deutsch
2640 geta$:a=val(a$):ifa<1ora>4then2640
2650 ifa<3thenpoke2,224-a*8:sys49553:goto2000
2655 ifa=4thenpoke2,216:sys49553:gosub4100:goto2000
2660 ma=16:ko$="Zeichensatzname:":a1$=" ":a2$="_":gosub4599:gosub4200
2670 poke2,len(fs$):fori=1tolen(fs$):poke1983+i,asc(mid$(fs$,i)):next
2680 sys50390:gosub4500:gosub4810:goto2000
2700 ifa$<>"{f2}"then2760
2710 a$="Seite sichern (j/n) ?":gosub4800:poke198,0:wait198,1:geta$
2720 gosub4810:ifa$<>"j"then2000
2725 gosub4200:fs$=str$(as)+do$:open1,8,15,"s:"+fs$:close1
2730 fori=1tolen(fs$):poke1983+i,asc(mid$(fs$,i)):next
2740 poke2,len(fs$):sys50417:gosub4500:gosub4810
2750 ifas>msthenopen1,8,1,"@:'"+do$+",s,w":print#1,as:print#1,co$:print#1,do$
2755 ifas>msthenclose1:gosub4500:ms=as
2756 goto2000
2760 ifa$<>"{f7}"anda$<>"{f8}"then2830
2765 aa=as
2770 ifa$="{f7}"thenas=as+1
2780 ifa$="{f8}"thenas=as+(as<>1)
2790 a$="Blaettere zu Seite"+str$(as):gosub4800
2800 geta$:ifa$=""then2800
2805 gosub4810:ifa$="{stop}"thenas=aa:goto2000
2810 ifa$<>chr$(13)then2770
2820 gosub4200:gosub4450:gosub4300:goto2000
2830 ifa$="{f5}"thensys50455
2840 ifa$="{stop}"thensys50677:sys50455:x=0:goto2000
2850 ifa$="{CTRL-D}"then300
2860 ifa$<>"{CTRL-Z}"then2880
2865 ko$="von Zeile Nr.:":ma=2:a1$="0":a2$="9":gosub4599
2866 f=val(fs$):iff<0orf>59then2865
2867 iffs$=""thenf=y
2868 ko$="bis Zeile Nr.:":gosub4599:f5=val(fs$):iffs$=""thenf5=f
2869 iff5<f orf5>59then2865
2870 fori=ftof5:poke1002,i:sys51015:next
2880 ifa$="{f3}"thensys51124
2900 ifa$<>"{CTRL-F}"then3100
2910 gosub4700:poke214,7:print:print," Floppy-Menue":print,"{down}1) Zurueck
2920 print,"{down}2) Befehl senden
2930 print,"{down}3) Dokument loeschen
2940 print,"{down}4) Directory
2950 geta$:a=val(a$):ifa<1ora>4then2950
2955 ifa=1then2000
2960 ifa=2thengosub4200:ko$="Befehl:":ma=30:a1$=" ":a2$="z":gosub4599
2970 ifa=2thenopen1,8,15,fs$:close1:gosub4500
2980 ifa<>3then3040
2990 ko$="Name des Dokuments:":ma=13:a1$=" ":a2$="_":gosub4599
3000 open1,8,0,"'"+fs$+",s,r":input#1,n,a$,fs$:close1:gosub4500
3010 iffthen2000
3020 open1,8,15,"s:'"+fs$:fori=1ton:print#1,"s:"+str$(n)+fs$:next
3030 close1:gosub4500:goto2000
3040 ifa=4thenprint"{clr}{lred}":sys51181:poke198,0:wait198,1:geta$:gosub4900:sys49272:goto2910
3100 rem
3300 ifa$="{blk}"thenpoke2048+x+y*60,252:a$="{rght}":goto2010
3310 ifa$="{wht}"thenpoke2048+x+y*60,253:a$="{rght}":goto2010
3320 ifa$="{red}"thenpoke2048+x+y*60,254:a$="{rght}":goto2010
3400 ifa$<>"{dish}"then3500
3405 gosub4700:poke214,7:print:print,"f1-Druckermenue
3410 print,"f2-Seite sichern
3415 print,"f3-Zeile loeschen
3420 print,"f4-Zeile einfuegen
3425 print,"f5-Text neu ordnen
3430 print,"f6-Zeichensatz laden
3435 print,"f7-vorblaettern
3440 print,"f8-zurueckblaettern
3441 print,"CLR-Text loeschen
3442 print,"STOP-Wort trennen
3445 poke198,0:wait198,1:geta$:ifa$<>"{dish}"then2000
3450 gosub4700:poke214,7:print:print,"Control +
3455 print,"{down}H -Hilfsmenue
3456 print,"W -Farben wechseln
3460 print,"F -Floppymenue
3465 print,"D -Dokument laden
3470 print,"Z -Zeile(n) zentr.
3475 print,"1 -Hochschrift
3480 print,"2 -Normalschrift
3485 print,"3 -Tiefschrift
3490 poke198,0:wait198,1:geta$:goto2000
3500 ifa$<>"{CTRL-W}"then3600
3510 iff1=15thenf1=0:f2=15:f0$="{blk}":f1$="{brn}":f2$="{blu}":goto3530
3520 iff1=0thenf1=15:f2=0:f0$="{gry3}":f1$="{yel}":f2$="{cyn}"
3530 gosub4900:goto2000
3600 goto2000
4000 gosub4100:gosub4700:poke214,8:print:print," {CBM-A}{rght}{rvon} T e x t {rvof} {CBM-S}
4001 print,"{rght}{rght}{rght}{CBM-Z} {rvon}m a s t e r{rvof} {CBM-X}
4003 print,"{down}{rght}C-64 C-1541 MPS801
4005 print,"{down} (C) Juni 1985
4010 print,"{down} Mario Weck
4020 poke198,0:wait198,1:geta$:return
4100 restore
4110 reada:ifa<0then4150
4120 fori=8192+a*8toi+7:reada:pokei,a:pokei+1024,255-a:next:goto4110
4150 fori=1to5:readk$(i):next:return
4200 poke768,185:open1,8,15,"m-r":close1:poke768,139
4210 ifst<>-128thenreturn
4220 a$="Floppy Disk anschalten & <Taste>":gosub4800
4230 poke198,0:wait198,1:geta$:gosub4810:goto4200
4300 poke214,22:print:fori=0to39:print"{red}{rvon} ";:next:poke214,22:print
4310 print"{rvon} Dokument: "do$tab(29)"Seite:"as"{home}"
4320 gosub4200:open3,8,15:input#3,a:close3:return
4400 gosub4700:poke214,6:print:print," {rvon}Dokument
4410 print,"{down}{down} erstellen":print,"{down} bzw":print,"{down} veraendern
4415 print,"{down} ('$' = Directory)
4420 ko$="Dokumentname:":ma=13:a1$=" ":a2$="_":gosub4599:do$=fs$:gosub4200
4425 ifdo$="$"thenprint"{clr}{lred}":sys51181:poke198,0:wait198,1:geta$:gosub4900:goto4400
4430 open2,8,0,"'"+do$+",s,r":close2:open1,8,15:input#1,a:close1:ifathen4460
4440 open2,8,0,"'"+do$+",s,r":input#2,as,co$,do$:close2:gosub4500:ms=as
4441 ifco$<>"{CBM-POUND}"thenko$="Schutz-Code:":ma=13:gosub4599:if"{CBM-POUND}"+fs$<>co$then4420
4450 fs$=str$(as)+do$:fori=1tolen(fs$):poke1983+i,asc(mid$(fs$,i)):next
4455 sys49204:poke2,len(fs$):poke900,8:sys50390:return
4460 a$="Dokument {rvon}"+do$+"{rvof} erstellen (j/n)?":gosub4800:poke198,0:wait198,1:geta$
4465 gosub4810:ifa$<>"j"then4420
4466 ko$="Schutz-Code:":gosub4599:co$="{CBM-POUND}"+fs$:gosub4810
4470 open2,8,1,"'"+do$+",s,w":print#2,1:print#2,co$:print#2,do$:close2:gosub4500
4480 as=1:ms=0:sys49204:return
4499 return
4500 open1,8,15:input#1,a$,b$:close1:f=val(a$):iff=0thenreturn
4510 gosub4810:a$=a$+" {rvon}"+b$:gosub4800:poke198,0:wait198,1:geta$:gosub4810:return
4599 fs$=""
4600 poke214,22:print:printf1$"{down}"ko$fs$"{CBM-P} {home}"
4610 geta$:ifa$=""then4610
4620 ifa$=chr$(13)thengosub4810:return
4630 ifa$=chr$(20)andlen(fs$)>0thenfs$=left$(fs$,len(fs$)-1):goto4600
4640 ifa$>=a1$anda$<=a2$andlen(fs$)<mathenfs$=fs$+a$
4650 goto4600
4700 poke214,5:print:print,f0$"{left}{rvon} "
4710 fori=1to12:print,"{left}{rvon} {rvof} {rvon} {rvof}
4720 next:print,"{left}{rvon} ":return
4800 poke214,22:print:printf1$"{down}"tab(59-len(a$)/2)a$"{home}":return
4810 poke214,22:print:poke646,f2:print"{down} {home}":return
4900 poke53281,f1:print"{clr}":poke53281,f2
4905 poke53280,f2:print"{home}{dish}{pur} [[[[ Textmaster 64/801 (C) 1985 ]]]]
4910 print"Zeile "f2$"00{pur} Spalte "f2$"00"f1$" Norm{red}
4920 fori=0to39:print"{rvon} ";:next
4930 gosub4300
4940 poke650,128:poke182,0:return
4999 end
PROGRAMM : TM.CODE C000 C8FD ----------------------------------- C000 : 20 4E C0 A9 78 85 FD A9 AC C008 : 04 85 FE A2 13 A0 27 B1 19 C010 : FB 91 FD 88 10 F9 A5 FB C4 C018 : 18 69 3C 85 FB A5 FC 69 58 C020 : 00 85 FC A5 FD 18 69 28 6D C028 : 85 FD A5 FE 69 00 85 FE A0 C030 : CA 10 DA 60 A9 08 85 FC B0 C038 : A9 00 85 FB A0 00 A9 20 B3 C040 : 91 FB 88 D0 FB E6 FC A5 41 C048 : FC C9 15 D0 F1 60 A9 08 61 C050 : 85 FC A9 00 85 FB C0 00 F9 C058 : F0 11 A5 FB 18 69 3C 85 82 C060 : FB A5 FC 69 00 85 FC 88 CB C068 : 4C 56 C0 8A 18 65 FB 85 08 C070 : FB A5 FC 69 00 85 FC 60 8B C078 : AD 3E 03 C9 14 B0 0E A9 91 C080 : 00 8D 40 03 AD 3E 03 8D AB C088 : 42 03 4C B0 C0 C9 28 B0 D1 C090 : 11 A9 13 8D 42 03 AD 3E 5C C098 : 03 38 E9 13 8D 40 03 4C 14 C0A0 : B0 C0 A9 14 8D 40 03 AD DF C0A8 : 3E 03 38 E9 14 8D 42 03 70 C0B0 : AD 3F 03 C9 09 B0 0B 8D 54 C0B8 : 43 03 A9 00 8D 41 03 4C 6F C0C0 : E2 C0 C9 28 B0 0E 38 E9 AA C0C8 : 09 8D 41 03 A9 09 8D 43 E8 C0D0 : 03 4C E2 C0 A9 1E 8D 41 0E C0D8 : 03 AD 3F 03 38 E9 1E 8D 48 C0E0 : 43 03 AE 40 03 AC 41 03 F9 C0E8 : 20 00 C0 AE 42 03 AC 43 84 C0F0 : 03 20 0C C1 A0 00 B1 FD 0B C0F8 : 49 80 91 FD AD 3F 03 A2 CB C100 : 2E 20 36 C1 AD 3E 03 A2 22 C108 : 38 4C 36 C1 A9 04 85 FE FB C110 : A9 78 85 FD C0 00 F0 11 08 C118 : A5 FD 18 69 28 85 FD A5 E1 C120 : FE 69 00 85 FE 88 4C 14 11 C128 : C1 8A 18 65 FD 85 FD A5 30 C130 : FE 69 00 85 FE 60 A0 00 09 C138 : C9 0A 90 07 C8 38 E9 0A 15 C140 : 4C 38 C1 18 69 30 9D 01 AC C148 : 04 98 18 69 30 9D 00 04 C4 C150 : 60 A0 00 84 02 C9 20 B0 E1 C158 : 01 60 C9 40 90 1E C9 60 E6 C160 : B0 06 38 E9 40 4C 7C C1 3A C168 : C9 A0 B0 01 60 C9 C0 90 46 C170 : F1 C9 E0 B0 05 49 80 4C C9 C178 : 7C C1 A9 5E 48 AE 3E 03 04 C180 : AC 3F 03 20 4E C0 68 18 4D C188 : 65 B6 A0 00 91 FB E6 02 09 C190 : 60 A9 00 85 FB 85 FD AD B5 C198 : 89 03 85 FC A5 02 85 FE 22 C1A0 : A9 00 8D 0E DC A9 33 85 61 C1A8 : 01 A0 00 B1 FD 91 FB C8 1D C1B0 : D0 F9 E6 FE E6 FC A5 FC FD C1B8 : CD 8A 03 D0 EE A9 37 85 C9 C1C0 : 01 A9 01 8D 0E DC 60 48 62 C1C8 : A9 00 8D 48 03 68 0A 2E D6 C1D0 : 48 03 0A 2E 48 03 0A 2E 03 C1D8 : 48 03 85 FD AD 48 03 18 1C C1E0 : 69 20 85 FE AD 84 03 30 06 C1E8 : 01 60 AD 34 03 30 01 60 82 C1F0 : A5 FE 18 69 08 85 FE 60 B1 C1F8 : EA 20 8C C8 EA A9 13 85 82 C200 : 4F A9 FF 85 4E 85 50 A9 7A C208 : 18 85 51 AE 49 03 AC 52 11 C210 : 03 20 4E C0 EA 4C A5 C8 08 C218 : C9 1F D0 06 A9 20 EA EE 8B C220 : FF 03 8D 34 03 29 7F 20 42 C228 : C7 C1 A2 07 A9 00 85 BD 85 C230 : A0 07 B1 FD 3D BE C5 F0 43 C238 : 0D 8A 48 98 AA A5 BD 1D B8 C240 : BE C5 85 BD 68 AA 88 10 18 C248 : E9 A0 00 E6 4E E6 50 D0 5D C250 : 04 E6 4F E6 51 AD 34 03 D1 C258 : 30 15 A5 BD 10 04 A9 81 FF C260 : D0 02 A9 80 91 50 A5 BD 59 C268 : 09 80 91 4E 4C 62 C8 AD 36 C270 : 84 03 30 E6 D0 09 A5 BD C6 C278 : 49 FF 85 BD 4C 5A C2 A5 C8 C280 : BD 10 04 A9 85 D0 02 A9 B6 C288 : 84 4C 64 C2 CA 10 9D EE 25 C290 : 49 03 AD 49 03 C9 3C D0 00 C298 : 01 60 4C 0B C2 A9 04 85 D2 C2A0 : BA 20 B1 FF A9 60 20 93 1C C2A8 : FF A9 08 20 A8 FF AD 85 CE C2B0 : 03 8D 52 03 20 F8 C1 20 80 C2B8 : 00 C4 20 31 C3 20 DB C3 7D C2C0 : 20 D2 C2 EE 52 03 AD 52 70 C2C8 : 03 CD 86 03 D0 E6 20 AE D6 C2D0 : FF 60 20 5D C4 A9 00 85 58 C2D8 : 4E A9 14 85 4F A0 00 B1 0E C2E0 : 4E F0 19 C9 01 F0 03 20 0A C2E8 : A8 FF E6 4E D0 02 E6 4F 6B C2F0 : A5 4F C9 15 D0 E9 A5 4E E1 C2F8 : C9 E0 D0 E3 A9 0D 20 A8 B7 C300 : FF 20 5D C4 A9 00 85 4E 4D C308 : A9 19 85 4F A0 00 B1 4E F7 C310 : F0 19 C9 01 F0 03 20 A8 18 C318 : FF E6 4E D0 02 E6 4F A5 18 C320 : 4F C9 1A D0 E9 A5 4E C9 8D C328 : E0 D0 E3 A9 0D 20 A8 FF 13 C330 : 60 A9 00 85 4E A9 15 85 A7 C338 : 4F A0 DF B1 4E C9 80 D0 DC C340 : 15 88 C0 FF D0 F5 C6 4F 40 C348 : A5 4F C9 13 D0 ED A9 00 8D C350 : 8D 00 14 4C 5F C3 C8 D0 45 C358 : 02 E6 4F A9 00 91 4E A9 EF C360 : 00 85 4E A9 1A 85 4F A0 38 C368 : DF B1 4E C9 80 D0 13 88 D8 C370 : C0 FF D0 F5 C6 4F A5 4F 3F C378 : C9 0E D0 ED A9 00 8D 00 0B C380 : 19 60 C8 D0 02 E6 4F A9 FD C388 : 00 91 4E 60 A0 00 A2 01 87 C390 : B1 4E F0 46 C5 02 D0 06 29 C398 : C8 E8 E0 FA D0 F2 8E 87 5A C3A0 : 03 E0 05 90 1E CA CA 8A DF C3A8 : A8 A9 01 91 4E 88 D0 FB FC C3B0 : A0 00 A9 1A 91 4E C8 AE 0A C3B8 : 87 03 CA 8A 91 4E C8 A5 BF C3C0 : 02 91 4E A5 4E 18 6D 87 3E C3C8 : 03 85 4E A5 4F 69 00 85 21 C3D0 : 4F A0 00 B1 4E 85 02 4C 57 C3D8 : 8C C3 60 A9 00 8D E0 15 AD C3E0 : 8D E1 15 85 4E A9 14 85 E1 C3E8 : 4F 20 8C C3 20 57 C6 A9 0E C3F0 : 00 8D E0 1A 8D E1 1A 85 8E C3F8 : 4E A9 19 85 4F 4C 8C C3 23 C400 : AD 88 03 D0 01 60 A9 00 86 C408 : 85 4E 85 50 A9 14 85 4F 10 C410 : 85 51 20 32 C4 A9 00 85 31 C418 : 4E 85 50 A9 19 85 4F 85 78 C420 : 51 20 32 C4 A2 3B A9 80 52 C428 : 9D A4 15 9D A4 1A CA 10 77 C430 : F7 60 A2 3B A0 01 B1 4E DD C438 : 91 50 C8 C0 08 D0 F7 A5 6E C440 : 50 18 69 07 85 50 A5 51 EC C448 : 69 00 85 51 A5 4E 18 69 3D C450 : 08 85 4E A5 4F 69 00 85 AE C458 : 4F CA 10 D8 60 AD 88 03 C7 C460 : D0 01 60 A9 1A 20 A8 FF 43 C468 : A9 1E 20 A8 FF A9 80 20 CD C470 : A8 FF 60 AE 3E 03 AC 3F 33 C478 : 03 20 4E C0 A5 FB 85 5F 46 C480 : A5 FC 85 60 A9 A0 85 5A 7B C488 : A9 13 85 5B 85 59 A9 DC 0B C490 : 85 58 20 BF A3 A0 3B A9 C1 C498 : 20 91 FB 88 10 FB 60 A2 38 C4A0 : 00 AC 3F 03 20 4E C0 AC F7 C4A8 : 3E 03 B1 FB 88 91 FB C8 EA C4B0 : C8 C0 3C D0 F5 88 A9 20 8C C4B8 : 91 FB 60 A2 00 AC 3F 03 1C C4C0 : 20 4E C0 A0 3B 88 B1 FB 02 C4C8 : C8 91 FB 88 CC 3E 03 D0 D5 C4D0 : F4 A9 20 91 FB 60 A2 08 30 C4D8 : A0 00 20 BA FF A5 02 A2 52 C4E0 : C0 A0 07 20 BD FF A9 00 39 C4E8 : A2 00 AC 84 03 20 D5 FF CF C4F0 : 60 A2 08 20 BA FF A5 02 EE C4F8 : A2 C0 A0 07 20 BD FF A9 47 C500 : 00 85 4E A9 08 85 4F A9 C9 C508 : 4E A2 B8 A0 13 20 D8 FF 7F C510 : 60 EA EA EA EA EA EA A2 F4 C518 : 00 A0 00 8E 11 C5 8C 12 D0 C520 : C5 A9 00 8D 15 C5 8D 16 4D C528 : C5 A9 36 85 01 20 CF C5 DC C530 : A9 FF 8D B8 AB A9 00 85 66 C538 : 4E A9 A0 85 4F A0 00 B1 91 C540 : 4E C9 20 D0 08 E6 4E D0 28 C548 : F4 E6 4F D0 F0 A0 00 B1 15 C550 : 4E C9 20 F0 11 C9 FF D0 AA C558 : 03 4C B9 C5 C9 1F D0 03 87 C560 : EE 15 C5 4C 56 C8 84 02 95 C568 : AD 11 C5 65 02 C9 3D 90 40 C570 : 06 20 C6 C5 4C 68 C5 E6 DE C578 : 02 AE 11 C5 AC 12 C5 20 81 C580 : 4E C0 A0 00 B1 4E 91 FB 22 C588 : C8 C4 02 D0 F7 A5 4E 18 63 C590 : 65 02 85 4E A5 4F 69 00 9C C598 : 85 4F AD 11 C5 18 65 02 09 C5A0 : 8D 11 C5 AD 15 C5 D0 03 A6 C5A8 : 4C 3D C5 A9 00 8D 11 C5 76 C5B0 : 8D 15 C5 EE 12 C5 4C 3D 12 C5B8 : C5 A9 37 85 01 60 01 02 EB C5C0 : 04 08 10 20 40 80 A9 00 7F C5C8 : 8D 11 C5 EE 12 C5 60 A9 51 C5D0 : 00 85 4E 85 50 A9 08 85 55 C5D8 : 4F A9 A0 85 51 A0 00 B1 52 C5E0 : 4E 91 50 A9 20 91 4E C8 99 C5E8 : D0 F5 E6 51 E6 4F A5 4F B5 C5F0 : C9 14 D0 EB 60 AC 3F 03 E3 C5F8 : F0 5C AE 3E 03 F0 57 88 B0 C600 : A2 00 20 4E C0 A0 3C A2 BB C608 : FC E8 88 B1 FB C9 20 F0 41 C610 : F8 C9 2D F0 41 C9 1F F0 17 C618 : 3D E8 30 3A CA EC 3E 03 30 C620 : 90 34 E8 86 02 C8 C8 98 90 C628 : AA AC 3F 03 88 20 4E C0 9D C630 : A5 FB 85 4E A5 FC 85 4F F5 C638 : A2 00 AC 3F 03 20 4E C0 D9 C640 : AC 3E 03 88 B1 FB 91 4E BB C648 : A9 20 91 FB 88 10 F5 AC 1F C650 : 3E 03 A9 2D 91 4E 60 AD 88 C658 : E8 03 D0 01 60 AD FF 03 90 C660 : F0 06 A9 00 8D FF 03 60 63 C668 : AC 52 03 A2 00 20 4E C0 0E C670 : A2 00 A0 3B B1 FB 29 7F 40 C678 : C9 20 D0 04 88 E8 D0 F4 03 C680 : 4C DC C8 EA EA 20 E9 C8 B3 C688 : EA 38 E9 01 85 02 8D E9 9B C690 : 03 A9 00 85 4E 85 50 A9 BE C698 : 14 85 4F A9 19 85 51 A0 BC C6A0 : 00 B1 4E F0 4B C9 1A D0 38 C6A8 : 47 A0 02 B1 4E C9 80 D0 CD C6B0 : 3F 88 B1 4E C9 07 90 38 F1 C6B8 : 18 69 01 91 4E 20 0E C7 A5 C6C0 : A9 1A 85 FC A9 DE 85 FB 17 C6C8 : A0 00 B1 FB C8 91 FB C6 EB C6D0 : FB A5 FB C9 FF D0 02 C6 F2 C6D8 : FC A5 FB C5 50 D0 E9 A5 DD C6E0 : FC C5 51 D0 E3 A0 00 A9 C4 C6E8 : 80 91 50 C6 02 D0 01 60 89 C6F0 : E6 50 E6 4E D0 04 E6 4F E9 C6F8 : E6 51 A5 4E C9 E0 D0 9F E0 C700 : A5 4F C9 15 D0 99 A5 02 D6 C708 : CD E9 03 D0 81 60 A5 4E F3 C710 : 18 69 03 85 FD A5 4F 69 6B C718 : 00 85 FE A9 15 85 FC A9 94 C720 : DE 85 FB A0 00 B1 FB C8 E3 C728 : 91 FB C6 FB A5 FB C9 FF 49 C730 : D0 02 C6 FC A5 FB C5 FD A0 C738 : D0 E9 A5 FC C5 FE D0 E3 65 C740 : A0 00 A9 01 91 FD 60 AC 4F C748 : EA 03 A2 00 20 4E C0 A9 27 C750 : 00 85 FD A9 14 85 FE A0 72 C758 : 3B B1 FB 91 FD 88 10 F9 F5 C760 : A2 00 A0 00 B1 FB 29 7F C9 C768 : C9 20 D0 08 E8 C8 C0 3C C7 C770 : D0 F2 F0 10 84 02 A0 3B 49 C778 : B1 FB 29 7F C9 20 D0 04 4A C780 : E8 88 D0 F4 A0 3B A9 20 4A C788 : 91 FB 88 10 FB 8A 4A 85 83 C790 : 4E A9 36 85 01 A4 02 B1 92 C798 : FD A4 4E 91 FB E6 02 E6 7A C7A0 : 4E A5 02 C9 3C F0 08 A5 31 C7A8 : 4E C9 3C F0 02 D0 E6 A9 9E C7B0 : 37 85 01 60 AE 3E 03 AC 38 C7B8 : 3F 03 20 4E C0 A5 FB 85 7F C7C0 : FD A5 FC 85 FE AE 3E 03 E4 C7C8 : AC 3F 03 C8 20 4E C0 A0 A6 C7D0 : 00 B1 FB 91 FD C8 D0 F9 37 C7D8 : E6 FC E6 FE A5 FE C9 15 79 C7E0 : D0 EF A2 3B A9 20 9D 7C C3 C7E8 : 13 CA D0 FA 60 A9 24 85 E3 C7F0 : FB A9 FB 85 BB A9 00 85 83 C7F8 : BC A9 01 85 B7 A9 08 85 6E C800 : BA A9 60 85 B9 20 D5 F3 33 C808 : A5 BA 20 B4 FF A5 B9 20 FD C810 : 96 FF A9 00 85 90 A0 03 76 C818 : 84 FB 20 A5 FF 85 FC A4 C0 C820 : 90 D0 2F 20 A5 FF A4 90 F6 C828 : D0 28 A4 FB 88 D0 E9 A6 B9 C830 : FC 20 CD BD A9 20 20 D2 29 C838 : FF 20 A5 FF A6 90 D0 12 07 C840 : AA F0 06 20 D2 FF 4C 39 B9 C848 : C8 A9 0D 20 D2 FF A0 02 E0 C850 : D0 C6 20 42 F6 60 C8 C0 EB C858 : 3C F0 03 4C 4F C5 88 4C 35 C860 : 66 C5 8A 48 98 48 A0 00 A3 C868 : AE F3 03 F0 18 B1 4E 0A 4B C870 : 08 09 80 91 4E B1 50 0A 17 C878 : 28 10 02 09 01 09 80 91 C8 C880 : 50 CA 4C 6B C8 68 A8 68 F9 C888 : AA 4C 8C C2 A9 00 8D 49 37 C890 : 03 A9 80 A2 00 9D E0 19 7F C898 : 9D E0 14 CA D0 F7 AD F5 73 C8A0 : 03 8D F3 03 60 A0 00 B1 36 C8A8 : FB C9 20 D0 08 20 9E C8 38 C8B0 : A9 20 4C 18 C2 C9 FE D0 98 C8B8 : 09 AD F6 03 8D F3 03 4C D3 C8C0 : 8F C2 C9 FD D0 06 20 9E DD C8C8 : C8 4C 8F C2 C9 FC D0 09 CC C8D0 : AD F4 03 8D F3 03 4C 8F 11 C8D8 : C2 4C 18 C2 E0 00 D0 01 72 C8E0 : 60 E0 0A 90 01 60 4C 85 94 C8E8 : C6 8A 0A 0A 0A 85 02 AD E7 C8F0 : 88 03 D0 01 60 A5 02 86 96 C8F8 : 02 38 E5 02 60 DB
10 data169,0,141,14,220,169,51,133,1,169,32,133,252,169,216,133,254,160,0,132
20 data251,132,253,162,7,177,253,145,251,200,208,249,230,254,230,252,202,16
30 data242,169,55,133,1,169,1,141,14,220,96
40 fori=828to876:reada:pokei,a:next
50 print"{clr} {down}{down}char-generator v1.0 (c) mario weck
60 print"{down}1) gross/klein":print"{down}2) gross/grafik":print"{down}3) nichts
70 input"{down}uebernehmen";a
80 ifa=2thenpoke842,208
85 ifa<3thensys828
90 poke53272,25:print"{clr}":fori=0to127:poke55296+i,14:poke1024+i,i:next
91 poke214,11:print:print,,"q - setzen":print,,"w - loeschen
92 print,,"n - neues zeichen":print,,"r - invertieren
93 print,,"c = zchn loeschen":print,,"s - saven
100 poke55296+nr,14:input"{home}{down}{blk}{down}{down}{down}{down}{down}{down}{down}{down}nr.:";nr:poke55296+nr,0:ifnr<0ornr>127then100
110 poke214,10:print:print"{rvon}{CBM-A}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-S}":fori=1to8:print"{rvon}{SHIFT--}{rvof} {rvon}{SHIFT--}":next
120 print"{rvon}{CBM-Z}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-X}
130 forj=8192+nr*8toj+7:zw=128:fori=0to7
140 ifpeek(j)andzwthenpoke1505+40*(jand7)+i,160
150 zw=zw/2:nexti,j
160 ko=1505+40*y+x:p=peek(ko):pokeko,42:by=8192+nr*8+y:pokeko,p
170 geta$:ifa$=""then160
180 ifa$="{rght}"thenx=(x+1)and7
190 ifa$="{left}"thenx=(x-1)and7
200 ifa$="{up}"theny=(y-1)and7
210 ifa$="{down}"theny=(y+1)and7
220 ifa$="n"then100
230 ifa$="q"thenpokeko,160:pokeby,peek(by)or2^(7-x)
240 ifa$="w"thenpokeko,32:pokeby,peek(by)andnot2^(7-x)
250 ifa$="c"thenfori=byand16376toi+7:pokei,0:next:goto110
260 ifa$="r"thenfori=byand16376toi+7:pokei,255-peek(i):next:goto110
270 ifa$="s"theninput"{down}sicher";b$:ifb$<>"j"then100
280 ifa$="s"then400
299 goto160
400 input"{lblu}{clr}{down}{rght}name";a$
405 fori=0to1023:poke9216+i,255-peek(8192+i):next
410 print"{clr}save"+chr$(34)+a$+chr$(34)+",8
420 print"{down}{down}{down}{down}{down}{rvon} nach saven bitte 'reset' ! "
430 poke198,2:poke631,19:poke632,13
440 poke43,0:poke44,32:poke45,0:poke46,40