Hypra-Text

Wieder einmal können wir Ihnen ein Programm oder besser gesagt ein Programmsystem aus unserer Hypra-Reihe präsentieren, das alle erforderlichen Befehle enthält, die zu einem komfortablen Textverarbeitungsprogramm gehören.

Hypra-Text ist für den kommerziellen Einsatz geschrieben worden. Daher sind in diesem Programm alle deutschen Umlaute und zusätzliche Sonderzeichen zur Druckersteuerung (Bild 1) wie zum Beispiel »unterstreichen ein/aus« integriert. Es sind Funktionen vorhanden, die kaum ein anderes Programm dieser Art enthält.

Bild 1. Neuer Zeichensatz für das Programm Hypra-Text

So handelt es sich bei Hypra-Text um ein Mehrbenutzersystem, das es gestattet, persönliche Texte mit einem Codewort zu versehen. Dadurch kann nur derjenige auf den Text zugreifen, der das Codewort kennt. Für alle anderen sind diese Texte gesperrt. Das heißt sie können weder editiert, geladen noch gedruckt werden. Eine der hervorstechendsten Eigenschaften von Hypra-Text ist die klare und intelligente Benutzerführung. Sobald Sie sich im Hauptmenü (Bild 2) befinden, macht Sie das Programm darauf aufmerksam, welche sinnvollen Funktionen mit welchen Tasten gewählt werden können.

Bild 2. Hauptmenü mit Systemempfehlung

Weiterhin ist die Möglichkeit zur Verwendung von sogenannten Textvariablen erwähnenswert. Wörter oder kurze Sätze wie zum Beispiel eine Anrede-Formel (»Sehr geehrter Herr…«) oder Schlußsätze (»Mit freundlichen Grüßen…«) lassen sich in Variablen speichern. Mit drei Tastendrücken lassen sich diese Textbausteine in Ihren Text einsetzen. Weiterhin können Sie sehr einfach sogenannte Masken erstellen. Das sind zum Beispiel Briefformulare, die Sie sehr oft brauchen. Sie tippen den Vordruck wie einen normalen Text ein, und setzen an alle Stellen, die später ergänzt werden müssen (Name, Adresse, etc.) eine Markierung. Diese Maske können Sie dann mit einem Tastendruck ausfüllen. Dies sind alles Merkmale, die bei einem Programm zum Abtippen durchaus nicht selbstverständlich sind.

Hypra-Text ist zum größten Teil in Basic geschrieben. Dadurch läßt es sich leicht an eigene Bedürfnisse anpassen. Alle Routinen, die in Basic zu viel Zeit beanspruchen, sind in Maschinensprache realisiert worden. Trotzdem ist es angebracht, Hypra-Text zu compilieren. Dazu eignet sich allerdings nur der Austro-Compiler. In compilierter Form erreicht Hypra-Text etwa die gleiche Geschwindigkeit, wie vergleichbare Programme in reiner Maschinensprache. Neben dem eigentlichen Textverarbeitungsprogramm wird in der nächsten Ausgabe ein Druckertreiber mit integrierter Centronics-Schnittstelle erscheinen, mit dem, im Gegensatz zu den meisten anderen Textverarbeitungsprogrammen, sogenannte Formblätter erstellt werden können. Sie geben dem auszudruckenden Schriftstück eine bestimmte Form. So lassen sich mit ihm Fuß- und Kopfzeilen mit und ohne automatischer Seitennumerierung definieren. Außerdem gehört zu Hypra-Text noch eine kompfortable Adreßverwaltung, die wir ebenfalls in einer der nächsten Ausgaben veröffentlichen.

(Oliver Fendt/ah)

Mit Hypra-Text haben Sie ein sehr leistungsfähiges Programm vorliegen. Besonders die Arbeit mit Textvariablen und die umfangreichen Möglichkeiten bei der Druckeransteuerung sind hervorzuheben. Hypra-Text gehört sicherlich zu den besten Programmen, die man abtippen kann.

Tippen Sie zuerst das Hauptprogramm (Listing 1) ab und speichern es auf Diskette. Anschließend ist noch eine Maschinenroutine »PROFIP V1.0« (Listing 2) und das Programm »Zloader« (Listing 3) einzugeben. Die Maschinenroutine übernimmt alle Aufgaben, die in Basic zu lange dauern würden. Das Programm »Zloader« ist ein in sich geschlossenes Basic-Programm, das es Ihnen erleichtert, einen beliebigen Drucker an das Programm anzupassen. So läßt sich mit diesem Programm zum Beispiel sehr leicht der Code eines Zeichens ändern, das zum Drucker gesendet wird. Um Ihnen Tipparbeit zu ersparen, ist in diesem Programm eine Routine integriert, die einen Großteil des Zloaders selbst generiert. Haben Sie das Programm »Zloader« abgetippt, ist es das erste Mal mit »RUN20000« zu starten. Auf dem Bildschirm erscheinen nun nacheinander die erzeugten Basic-Zeilen. Meldet sich das Programm mit READY, sind zwei Tabellen erzeugt worden.

Die erste Tabelle steht in den Zeilen 8000 bis 8500. Hier wird jedem Zeichen, das hinter der DATA-Anweisung steht, ein Drucker-Code zugeordnet. Sie werden feststellen, daß in den Zeilen 8000 bis 8060 statt des Zeichens nur ein Punkt steht. Dieser Punkt steht für die Tastenkombinationen, die zusammen mit der »CTRL-Taste« erreicht werden. So bedeutet der erste Punkt in Zeile 8000, hinter dem eine 1 steht, »CTRL A«. Der zweite in Zeile 8002, hinter dem eine 2 steht, bedeutet folglich »CTRL B«. Möchten Sie zum Beispiel einen Drucker an den User-Port über die im Programm »Profiprint« (erscheint in der nächsten Ausgabe) integrierte Centronics-Schnittstelle betreiben, so sind in den Zeilen 8000 bis 8500 alle Codes für Großbuchstaben durch die entsprechenden Codes für Kleinbuchstaben und die Codes für Kleinbuchstaben durch die entsprechenden Codes für Großbuchstaben zu ersetzen. Der Grund dafür ist, daß die meisten Drucker, die über eine Centronics-Schnittstelle betrieben werden, die Zeichen im ASCII-Format drucken. Der Commodore-Zeichensatz weicht jedoch insofern von dem Standard-ASCII-Zeichensatz ab, daß die Codes für Groß- und Kleinbuchstaben vertauscht sind. Achten Sie bei der Anpassung des Zeichensatzes darauf, daß im Zeilenbereich 8000 bis 8500 weder Zeilen hinzugefügt noch gelöscht werden dürfen. Auch ist es unzulässig, Zeichen zwischen den Anführungszeichen zu ändern.

Ein besonderer Leckerbissen befindet sich in der zweiten Tabelle, in den Zeilen 8500 bis 9000. Hier werden alle Umlaute und Sonderzeichen sowohl für den Bildschirm wie auch für den Drucker definiert.

Ersetzen Sie die erzeugten Zeilen durch das Listing 4. Denn in diesem Listing wurden die Steuerzeichen so definiert, wie sie in der Anleitung zu »Hypra-Text« erklärt werden. Sollten Ihnen die auf dem Bildschirm erzeugten Umlaute und Sonderzeichen nicht gefallen, oder stimmen die Drucker-Steuerzeichen nicht mit Ihrem Drucker überein, so besteht die Möglichkeit, die Umlaute, Sonderzeichen und Drucker-Steuerzeichen dem eigenen Bedarf anzupassen. Die Zeilen in Listing 4 sind ähnlich aufgebaut, wie die von 8000 bis 8500. Hier steht jedoch nicht nur ein Code, sondern acht Codes für das Bildschirm-Zeichen und acht Codes für das Drucker-Steuerzeichen. Die acht Codes für ein Bildschirmzeichen werden wie folgt erstellt:

  1. Zeichnen Sie ein 8x8-Punkte-Raster (Bild 1).
  2. Wo später ein Punkt auf dem Bildschirm gesetzt werden soll, füllen Sie das entsprechende Kästchen aus.
  3. Addieren Sie die Spaltenwerte der ausgefüllten Kästchen und schreiben Sie sie hinter die Zeile.
  4. Übernehmen Sie die Zeilenwerte der Reihe nach in die DATA-Zeile.

Beispiel: 8534 DATA"{Commodore-E}",102,0,60,102,102,102,60, 0,185,196,196,196,185,128,0,0 definiert das Bildschirm- und Druckerzeichen »ö«.

Bestimmte Drucker-Steuerzeichen verlangen weniger als acht Codes. So bedeutet zum Beispiel 27, 45, 49 »unterstreichen ein« auf einem Epson-Drucker. Soll eine solche Befehlssequenz an den Drucker übergeben werden, so ist diese nach der Definition des Bildschirmzeichens unmittelbar einzugeben. Der Rest der Zeile ist mit Nullen aufzufüllen. In diesem Fall mit fünf Nullen.

Beispiel: 8500 DATA"(Zeichen)",1,2,3,4,5,6,7,8,27,45,49,0,0,0,0,0

Es müssen also nach der Definition des Bildschirmzeichens immer acht Codes für das Drucker-Steuerzeichen folgen, auch dann, wenn weniger Codes an den Drucker übergeben werden. Nullen im Drucker-Steuerzeichen sind durch den ASCII-Wert 48 zu ersetzen.

Wollen Sie das Bildschirm-Zeichen beibehalten, so ist nach dem in Anführungsstrichen stehenden Zeichen die Zahl 999, gefolgt von den acht Drucker-Codes, einzugeben. Alle Codes müssen, wie üblich bei DATA-Anweisungen, durch ein Komma getrennt werden.

Beispiel: 8500 DATA"(Zeichen)",999, 27,45,49,0,0,0,0,0

Wenn Sie in den Zeilen 8500 bis 9000 etwas ändern, ist darauf zu achten, daß Zeilen weder gelöscht, übersprungen oder hinzugefügt werden dürfen. Auch ist unbedingt darauf zu achten, daß die Reihenfolge der Steuerzeichen und Umlaute eingehalten wird. Denn das in der nächsten Ausgabe erscheinende Programm »Profiprint« erkennt aufgrund der Reihenfolge, ob es sich um ein Drucker-Sonderzeichen oder einen Umlaut handelt.

Haben Sie den Zeichensatz Ihren Wünschen angepaßt, ist das Programm »ZLOADER« nochmals mit »RUN« zu starten. Auf dem Bildschirm erscheinen jetzt nacheinander die neu definierten Sonderzeichen und Umlaute. Gefällt Ihnen eines der Zeichen nicht, so können Sie das Programm mit der RUN/STOP-Taste jederzeit unterbrechen, die entsprechende DATA-Zeile ändern und das Programm noch einmal mit RUN starten. Sind alle Zeichen zu Ihrer Zufriedenheit definiert, erzeugt das Programm zwei Files auf Diskette. Einen Bildschirm-Zeichensatz mit dem Namen »ZEICHEN DIN« und einen Drucker-Steuersatz mit dem Namen »ZEICHEN DDIN«. Außerdem wird der Zloader unter dem Namen »LOADER DIN 2.1« mit den abgeänderten DATA-Zeilen gespeichert.

Noch eines vorweg: Im Hauptprogramm von Hypra-Text werden Sie gefragt, ob Sie mit der DIN- oder normalen C 64-(CBM-)Tastatur arbeiten möchten.

Der Unterschied zwischen den beiden Tastaturen liegt darin, daß bei der DIN-Tastatur die Tasten so belegt sind, wie Sie es von einer Schreibmaschine gewohnt sind. Es stimmen also die Zeichen die auf dem Bildschirm erscheinen nicht mit dem überein, was auf den Tasten steht. Wählen Sie dagegen die CBM-Tastatur, so erscheint genau das auf dem Bildschirm, was auf den Tasten steht. Trotzdem existieren auch hier die deutschen Umlaute, die über die Commodoretaste plus E,R,T,Z,U,I erreichbar sind. Um aber mit der CBM-Tastatur arbeiten zu können, erwartet Hypra-Text zwei Files auf der Diskette, die noch nicht erwähnt wurden. Bei den beiden Files handelt es sich um »ZEICHEN B« und »ZEICHEN D«. Diese beiden Files können aber sehr einfach generiert werden. Ersetzen Sie einfach im Programm »Zloader« in Zeile 40040 »ZEICHEN DIN« durch »ZEICHEN B« und in Zeile 40001 »ZEICHEN DDIN« durch »ZEICHEN D«. Anschließend ist das Programm Zloader nochmals mit RUN zu starten. Die erforderlichen Files werden nun auf der Diskette generiert.

Im weiteren Verlauf dieser Anleitung wird Ihnen auffallen, daß vor jeder Funktion zwei Zahlen stehen, die jeweils durch einen Punkt getrennt sind. So lesen Sie zum Beispiel »1.1.Eingabe des Textes«. Um diese Funktion zu erreichen, drücken Sie vom Hauptmenü aus einfach zweimal die »1«.

Das Hauptprogramm von »Hypra-Text«

Bevor Sie die Arbeit mit Hypra-Text beginnen, überzeugen Sie sich davon, daß sich folgende Files auf Ihrer Diskette befinden:

  1. HYPRA-TEXT (in Basic, oder was zu empfehlen ist, in compilierter Form. Da im Programm SYS-Aufrufe mit zusätzlicher Parameterübergabe enthalten sind, eignet sich zum Compilieren nur der Austro-Compiler. Die Leser-Service-Diskette enthält neben dem Basic-Programm auch das compilierte File.)
  2. PROFIP V1.0 (Maschinenroutinen)
  3. ZEICHEN DIN (Bildschirm-Zeichen)
  4. ZEICHEN DDIN (Drucker-Steuerzeichen)

und wenn die CBM-Tastatur gewünscht ist:

  1. ZEICHEN B (Bildschirm-Zeichen)
  2. ZEICHEN D (Drucker-Steuerzeichen)

Bevor Sie das Programm mit RUN starten, müssen Sie eine persönliche Kennung und die Laufwerksnummer Ihrer Floppy eingeben. Die Kennung dient dem Datenschutz: Außer Ihnen hat niemand Zugriff auf persönliche Daten und Texte. Dies geschieht mit folgenden Befehlen:

POKE 930,ASC("1.Buchstabe"):POKE 931,ASC("2.Buchstabe") :POKE 932,Laufwerksnummer

Als Kennung können Sie zum Beispiel die Initialen Ihres Namens eingeben. Die Laufwerksnummer ist im Normalfall »8«.

In einer der nächsten Ausgaben wird, passend zu Hypra-Text, eine Adreßverwaltung erscheinen, die diese POKEs durch die automatische Abfrage eines Geheimwortes überflüssig macht.

Nun werden Sie gefragt, ob Sie mit der DIN- oder der CBM-Tastatur arbeiten wollen. Ist die DIN-Tastatur gewünscht, drücken Sie einfach auf die RETURN-Taste. Ansonsten ist das Wort »din« durch »cbm« zu ersetzen. Es werden dann automatisch die erforderlichen Files nachgeladen.

Hypra-Text erwartet jetzt die Eingabe des Datums im Format TTMMJJ. Der 1. Januar 1986 wird zum Beispiel mit 010186 angegeben.

1.Text erstellen

Nach Wahl dieses Punktes kommen Sie in ein Untermenü.

1.1.Eingabe des Textes

Die Eingabezeile, also die Zeile, in der der Cursor steht, befindet sich immer in der Mitte des Bildschirms. Nach jeder abgeschlossenen Zeile wird der gesamte Text um eine Zeile nach oben geschoben. Um einen eingetippten Text zu editieren, können Sie mit RETURN den Text eine Zeile nach unten und mit F5 eine Zeile nach oben schieben. Die Tasten »Cursor rechts« und »Cursor-Iinks« behalten ihre alte Funktion bei. Mit »Cursor-hoch« und »Cursor-runter« können Sie ein Wort vor oder zurückspringen. Die HOME-Taste hat bei Hypra-Text die Funktion »Tabulator«. Dazu befindet sich in der fünften Bildschirmzeile von oben eine Tabulatorzeile. Wenn die Taste HOME gedrückt wird, so springt der Cursor bis zur nächsten »+«-Marke. Der Leerraum bei einem Tabulator-Sprung wird mit Punkten gefüllt, die aber nicht gedruckt werden.

Weiterhin sind die folgenden Tasten mit Drucker-Steuerzeichen belegt, vorausgesetzt, Listing 4 wurde wie abgedruckt in den Zloader übernommen:

Commodore-Taste und

Diese Steuerzeichen sind natürlich nur dann sinnvoll, wenn der angeschlossene Drucker sie auch ausführen kann.

Die CLR-Taste löscht die Zeile, in der sich der Cursor befindet. SHIFT-RETURN markiert einen Absatz.

Die Funktionstasten sind wie folgt belegt:

Die Druckerbefehle von Hypra-Text

Diese Befehle bewirken nur etwas, wenn der Text auf dem Drucker ausgegeben wird. Auf dem Bildschirm werden sie nicht ausgeführt! Alle Befehle werden direkt in den Text hineingeschrieben.

noformat

Druckt den Text so, wie er auf dem Bildschirm steht.

mittezen

Druckt den Text mittezentriert.

rechtsfo

Druckt den Text rechtsbündig.

formnorm

Hebt »mittezen« und »rechtsfo« auf.

dezlen=xy

Dient zur Formatierung von Zahlen innerhalb des Textes. dezlen=34 bedeutet zum Beispiel, daß alle Zahlen auf drei Stellen (=x) vor, und vier Stellen (=y) nach dem Komma formatiert werden.

1.2.Eingabe des Textnamen

Der hier eingegebene Name kann in Punkt 5.5. durch »=« übernommen werden. Er wird im Hauptmenü angezeigt.

1.3.Eingabe über Maske

Die Erstellung einer Maske (zum Beispiel für Serienbriefe) ist äußerst einfach.

Sie tippen im Texteingabemodus Ihre Maske als normalen Text ein. An alle Stellen, an denen Sie später zum Beispiel eine Adresse eingeben wollen, setzen Sie eine Markierung (Commodore-Taste und »Klammeraffe«). Dann speichern Sie die fertige Maske ab, und wählen Punkt 1.3.

1.4.Text löschen

Es wird der gesamte, im Speicher befindliche Text gelöscht. Der Computer zeigt dabei an, welche Zeile er gerade löscht. Sicherheitshalber verlangt er vorher noch eine Bestätigung.

1.5.Text ausfüllen

Hier können Sie an alle Zeilen Punkte oder bestimmte Zeichen anhängen. Ob links oder rechts vom Text, und ab welcher Zeile bestimmen Sie. Dies ist zum Beispiel sinnvoll, wenn Sie eine Tabelle haben und an jede dritte Zeile einen Namen oder ähnliches anhängen wollen.

Wenn Sie die Frage »Neben den Text (j/n)« mit »n« beantworten, so werden alle angegebenen Zeilen gelöscht und durch die Änderung ersetzt.

1.6.Eingabe Tabulatorzeile

Hier können Sie die Tabulatorzeile des Texteingabemodus ändern. Dazu benützen Sie die Cursor-Tasten. Mit »+« markieren Sie einen Tabulator-Stop.

2.1.Text ändern

Entspricht der Eingabefunktion (Punkt 1.1.). Sie geben nur zusätzlich mit an, ab welcher Zeile Sie ändern wollen.

2.2.Worttausch

Sie können den Text nach einem bestimmten Wort durchsuchen und durch ein anderes ersetzen lassen. Der Computer fragt Sie nach jedem gefundenen Wort, ob Sie es ändern wollen.

2.3.Text löschen

Identisch mit Punkt 1.4.

3.Profiprint laden

Um einen Text auszudrucken, benötigt man das Programm Profiprint. Dieses wird in der nächsten Ausgabe veröffentlicht.

4.Bildschirmausgabe

Über diesen Punkt können Sie sich eine Übersicht über Ihren Text verschaffen. Es wird neben dem Text eine Zeilenmarkierung ausgegeben. (Diese Funktion ist auch mit F3 erreichbar.)

5.1.Text vergleichen

Der im Arbeitsspeicher befindliche Text wird mit dem gleichnamigen auf Diskette verglichen.

Diese Funktion ist auch hervorragend geeignet, um sich einen auf Diskette befindlichen Text anzusehen, ohne den gerade bearbeiteten zu löschen. Der Computer druckt nämlich alle Zeilen des Textes aus, die nicht mit dem Text im Speicher übereinstimmen. Nach jeder Zeile ist eine Taste zu drücken.

F1 bricht diesen Vorgang vorzeitig ab.

5.2.Text umbenennen

Entspricht dem RENAME-Befehl der Floppy. Man kann einem auf Diskette befindlichen Text einen anderen Namen geben.

5.3.Text löschen

Entspricht dem SCRATCH-Befehl der Floppy. Ein Text wird von Diskette gelöscht.

5.4.Text laden

Ein Text wird von Diskette geladen. Sie haben dabei die Wahl zwischen:

5.4.1.Text löschen und neuen Text laden

Der Arbeitsspeicher wird zuerst gelöscht, und dann der gewünschte Text geladen.

5.4.2.Text hinter alten Text laden

Der zu ladende Text wird an den Text angehängt, der im Arbeitsspeicher steht.

5.5.Text speichern

Der Inhalt des Arbeitsspeichers wird auf Diskette abgelegt.

5.6.Inhaltsverzeichnis

Es wird dabei nicht das gesamte Directory der Diskette ausgegeben, sondern nur alle Texte mit Namen, Datum der Eingabe, und der persönlichen Kennung, die verwendet wurde. (POKE 930,…)

Dabei ist wichtig, daß man nur auf seine eigenen Texte zugreifen kann.

6.Rechnen

Hier ist ein kleiner Taschenrechner eingebaut. Die Rechenergebnisse werden in drei Variablen gespeichert, und können im Text verwendet werden.

Textvariable

7.Variablen

Die Arbeit mit Textvariablen ist eine der ganz großen Stärken von Hypra-Text. Wenn Sie einen Text schreiben, in dem zum Beispiel sehr oft das Wort »Computer« vorkommt, dann speichern Sie dieses Wort einfach in einer der 50 (fünfzig!) Textvariablen und wählen bei der Texterstellung diese Variable durch » @ « und einer zweistelligen Variablennummer an. (Aus Variable 1 wird 01 usw.) Hypra-Text ersetzt diese Variablennummer nach dem nächsten RETURN automatisch durch ihren Inhalt. Voraussetzung ist allerdings, daß Sie mit Punkt 7.3. diese Funktion aktiviert haben.

7.1.Variablen zeigen

Der Inhalt aller fünfzig Variablen wird auf dem Bildschirm ausgegeben. Durch beliebigen Tastendruck können Sie weiterblättern.

7.2.Variablen eingeben

Der Inhalt einer Variable darf maximal 40 Zeichen lang sein.

7.3.Variablen an

Damit wird Hypra-Text mitgeteilt, daß man mit Textvariablen arbeiten möchte.

7.4.Variablen aus

Die Variablenfunktion wird ausgeschaltet.

7.5.Variablen in Text umwandeln

Man hat zum Beispiel einen Serienbrief erstellt. Für die Adresse wurden Variablen verwendet. Diese sollen erst später durch einen entsprechenden Inhalt ersetzt werden.

Man läßt also bei der Texterstellung die Variablen ausgeschaltet (7.4.), und speichert den Text. Später gibt man unter Punkt 7.2. zum Beispiel eine bestimmte Adresse in die Variablen ein. Dann wählt man Punkt 7.5. Hypra-Text ersetztjetzt die Variablen durch Klartext.

7.6.Variablen in Textspeicher schreiben

Wenn Sie eine Anzahl von Variablen erstellt haben, so möchten Sie diese natürlich zur späteren Verwendung speichern. Dieser Menüpunkt schreibt den Inhalt der Variablen in den Textspeicher in die Zeilen 1-50. Von dort aus können Sie die Variablen dann wie einen normalen Text speichern.

7.7.Textspeicher in Variablen schreiben

Um einmal definierte Variablen später wieder verwenden zu können, laden Sie den unter 7.6. gespeicherten Variablentext in den Arbeitsspeicher und rufen dann diesen Punkt auf. (Variablen anschalten nicht vergessen!)

7.8.Variablen aus Dateiverwaltung

In einer der nächsten Ausgaben wird eine Dateiverwaltung veröffentlicht. Mit diesem Menüpunkt können Sie Daten aus der Dateiverwaltung in Hypra-Text übernehmen. Genauere Angaben folgen.

(Oliver Fendt/ah/tr)
Bild 1. DATA "{Commodore-E}", 102,0,60,102,102,102,60,0 definiert das Bildschirmzeichen »ö«.
0 goto10
1 ifpeek(198)>0thengeta$:return
2 gosub30600:goto1
3 print"{down}{down}{down}{down} + Bitte warten + Ich  a r b e i t e  + ":return
4 poke908,0:poke918,30:poke920,11:poke917,36:poke924,0:a$="":return
5 sys50176,a$,a$:f=peek(913):return
9 goto30001
10 goto 22000
11 gosub31000:poke650,128:poke2,184
12 gosub40000
14 print:l$=a6$
15 kl=1:printchr$(14)
17 dima$(600):an=0:max=600
26 print"{clr}";pt$;"{down}"
27 goto100
30 a$=left$(a$,len(a$)-1):return
31 ifright$(a$,1)=" "thengosub30:goto31
32 return
40 a$=left$(a$(t),len(a$(t))-1):return
70 rem ** unterprogramm **
71 print:print"Geben sie ein,von welcher Zeilennr      (0=Anfang)"
72 inputv:ifv=0thenv=1
73 print"Geben sie ein,bis zu welcher Zeilennr   (0=Ende)"
74 inputb:ifb>maxthenprint"Zu gross !":goto74
75 ifb=0thenb=an
79 return
80 print"{home}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}":return
90 printleft$(a6$,mb):return
95 gosub80:fori=1to4:gosub90:next:gosub80:return
100 print"{clr}";pt$;:close2:close15:close5:poke198,0:ba=0:dr=0:br=0:sp=0
101 ifan/max>0.7thenb1$="{rvon}"+str$(int((an/max)*100))+" % VOLL !!!{rvof}":x=fre(9)
102 ifan/max>0.7thenb2$="{rvon}[5] = Speichern{rvof}":b3$="{rvon}ACHTUNG{rvof}":sp=1
103 v$(50)=d$:v$(47)=ba$:v$(46)=str$(rr):v$(45)=str$(rr+rr*(mw/100))
104 v$(44)=str$(rr*(mw/100))
105 poke54296,0:ifpeek(1022)=200thenam=2
107 print"{home}";pt$;
109 poke53265,27
110 print"{down}  Datum: ";d$
111 gosub300:print"{home}{down}{down}{down}"
112 print" {SHIFT--} {rvon}System    {rvof} :";b1$
113 print" {SHIFT--} {rvon}Empfehlung{rvof} :";b2$
114 print" {SHIFT--} {rvon}          {rvof} :";b3$
115 print"{down} {SHIFT--} Text name  :";t1$
116 print" {SHIFT--} Platz      :";max-an;"Zeilen frei"
120 rem ** menu **
125 print"{down}{down}{rght}{rght}{rght}-1-  Text erstellen"
130 print"{rght}{rght}{rght}-2-  Text aendern"
132 print"{rght}{rght}{rght}-3-  Profiprint laden"
134 print"{rght}{rght}{rght}-4-  Bildschirmausgabe"
135 print"{rght}{rght}{rght}-5-  Arbeiten mit Diskette "
136 print"{rght}{rght}{rght}-6-  ";fu$
137 print"{rght}{rght}{rght}-7-  Arbeiten mit Variablen"
145 print"{down}{down}{rght}{rght}Die Funktionstasten"
147 print"{rght}{rght}f1= Eingabe f3=Bildschirmausgabe"
148 print"{rght}{rght}f5= Ende   ";
149 ifsp=1thengosub30601
150 geta$:ifa$=""then150
154 ifa$="{f3}"then7000
155 ifa$="{f1}"then1015
156 ifa$="{f5}"then8000
197 ifval(a$)<1orval(a$)>8then150
199 x=val(a$):onxgoto1000,2000,56100,7100,5000,20000,9700
200 goto 100
260 return
300 rem ** bs aufbau **
301 ifba=1thenreturn
310 a1$=" {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-*}{SHIFT-*}{CBM-S}"
320 a2$=" {CBM-Q}{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-*}{SHIFT-*}{CBM-W}"
330 a3$=" {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-*}{SHIFT-*}{CBM-X}"
340 a4$=" {SHIFT--}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{SHIFT--}"
350 print"{home}{down}{down}":printa1$:printa4$:printa4$:printa4$:printa2$
360 printa4$:printa4$:printa2$
370 fort=1to9:printa4$:next:printa2$
380 printa4$:printa4$:printa4$:printa3$;
499 ba=1:return
1000 print"{clr}";pt$
1001 print"{home}{down}{down}{rvon} * * Textprogramm     * *  Eingabe  * * {down}{rvof}{down}{down}";:ta=0:ta$=""
1003 print"{rvon}=1=  Eingabe des Textes"
1004 print"=2= Eingabe des Textnames"
1005 print"=3= Eingabe ueber Maske"
1007 print"=4= Text loeschen"
1008 print"=5= Den Text ausfuellen":print"=6= Eingabe Tabulatorzeile"
1009 gosub1
1010 ifa$="0"ora$="{f1}"then100
1011 b1$="Aendern [2]":b2$="Speichern [5]":t=val(a$)
1013 ift=0then1009
1014 ontgoto1015,1850,33000,1300,9400,1830,100
1015 print"{clr}";pt$:print"{home}{down}{down}{rvon} * *  Textprogramm    * *  Eingabe  * * {down}{rvof}";:ta=0
1016 b1$="Aendern   [2]"
1017 b2$="Speichern [5]"
1018 b3$="Ansehen   [f3]"
1020 a=an:goto2014
1040 ifk1$="{rvon}TASTEN{rvof} f7=HELP           f5=Zeile hoch"then1050
1046 k1$="{rvon}TASTEN{rvof} f7=HELP           f5=Zeile hoch"
1047 k2$="Home = Tabulator    RETURN=Zeile runter"
1048 k3$="crsr hoch = Wort vor    :crsr => rechts"
1049 k4$="crsr runter=Wort zurueck:crsr <= links":return
1050 k1$="{rvon}Funktionst.{rvof} f1=Ende : f2=Einfuegen"
1051 k2$="f3= Zeilen Loeschen : f4=Block copieren"
1052 k3$="f5=Zeile hoch       : f6=Seite +/-"
1053 k4$="{rvon}f7=HELP   {rvof}          : f8=Block laden":return
1100 fori=g8tomax
1110 gosub1400
1120 iflen(a$(i+1))<m8thenreturn
1130 next:return
1300 gosub1301:goto1000
1301 print"{clr}";pt$;"{down}{rvon}          Text loeschen                 "
1302 print"{down}Bist du sicher? [j/(n)] ":gosub1:ifa$<>"j"then100
1305 print"{down}{down}":fort=1tomax:print"{up}";t:a$(t)="":next
1310 an=0:return
1400 b=len(a$(i)):fora=m8to1step-1
1410 ifmid$(a$(i),a,1)=" "ormid$(a$(i),a,1)="{$a0}"then1430
1420 next:print"Zeile zu lang:fehler":return
1430 a$(i+1)=right$(a$(i),b-a)+" "+a$(i+1):a$(i)=left$(a$(i),a)
1450 return
1460 print"{clr}":fort=0toan:printa$(t):next:print"{up}{up}"
1470 return
1830 print"{clr}";pt$
1831 input"Maximale Zeilelaenge (39)";m8:gosub1832:goto1000
1832 m8=m8+2:ifm8<10thenm8=39
1833 print"{clr}";pt$:print"Eingabe Tabulatorzeile":print"!=Start +=Tab.Stop -=Nicht
1834 t7$=left$(t7$,len(t7$)-1)
1835 a$=left$(t7$,m8):gosub9:t7$=a$
1840 m8=m8-2:t7$=left$(t7$+"----------------------------------------",m8-1)
1841 fort=1tolen(t7$):ifmid$(t7$,t,1)="!"thencb=t
1842 next:t7$=t7$+"!":poke917,m8
1845 return
1850 print"{clr}{down}{down}{down}{down}Textname":a$=t1$:gosub9:t1$=a$:goto1000
2000 print"{clr}";pt$
2001 print"{home}{down}{down}{rvon} + + Textprogramm     + +  Aendern  + + {down}{rvof}";:print"{down}{rvon}Aendern [1]{rvof}"
2002 print"{down}{down}  >0< Menu":print"{down}  >1< Text aendern"
2003 print"{down}  >2< Wort tausch"
2005 print"{down}  >3< Text loeschen{down}{down}"
2006 gosub1
2008 ifa$="0"ora$="{f1}"then100
2009 b1$="Speichern [5]":b2$="Ansehen   [f3]":b3$="Hilfe     [f7]"
2010 t=val(a$):ift<1ort>3then2006
2011 ontgoto2012,2900,1300
2012 gosub80:print" 0 = Ende : 1 = Anfang"
2013 input"{down}Ab Zeile";a:a=a-1:ifa=-1thena=an
2014 gosub1046
2020 a=a+1:ifa>anthenan=a
2030 ifa<1thena=1
2031 y=t:a$=a$(a)
2040 ee=1:a$=a$(a):g8=a:gosub30000
2041 ifu9=1thena$(a+1)=left$(a6$,cb-1)+r$+" "+a$(a+1):u9=2
2050 a$(a)=a$:iflen(a$(a))>m8then2040
2060 ifa$(a)=">"thena$(a)=""
2061 pp=a:iff=3then2600
2062 iff=7thengosub1040:goto2030
2063 ifin=1andf<>0thenin=0:gosub2560:iff=1thenf=0
2064 iff=1thenee=0:goto100
2065 iff=6then2200
2070 ifin=1thengosub2350
2071 iff=2then2500
2072 iff=4then2800
2073 iff=8then2100
2075 iff=5thena=a-1:goto2030
2080 a$=a$(a):y=t:goto2020
2100 print"{home}{down}{down}{rvon} * * Textprogramm    * * Block laden * *"
2110 gosub95:gosub4:poke920,22
2120 print"Name des Blockes":gosub5:iff=1then2020
2121 a$=">"+ba$+"??????"+a$
2125 close2:close5:open2,fa,15:open5,fa,2,a$+",s,r":gosub34000:ifen<>0then2100
2130 input#5,z:gosub2530
2140 fort=1toz:gosub34100:gosub34000:ifa$=">"thena$=""
2150 a$(pp+t)=a$:next:close2:close5:a=a+z:gosub2560:goto2020
2200 gosub95
2201 print"f5= Seite + "
2202 print"f6= Seite -    "
2203 print"{down}Bitte waehlen"
2210 gosub1:ifa$="{f1}"thena=a-1:goto2020
2220 ifa$="{f5}"thena=a+10:goto2020
2230 ifa$="{f6}"thena=a-12:goto2020
2240 goto2210
2300 z=1:gosub2530
2320 a$(a+1)=right$(a$(a),len(a$(a))-peek(925)):cc=999:in=1
2330 a$(a)=left$(a$(a),peek(925))
2340 ifleft$(a$(a+1),1)=" "thena$(a+1)=right$(a$(a+1),len(a$(a+1))-1):goto2340
2345 a$(a)=a$(a)+"{$a0}":a=a-1:goto2360
2350 z=1:gosub2530
2360 print"{home}{down}{down}{rvon}!!! Textprogramm !!! Aufschiebemodus !!!":return
2500 print"{home}{down}{down}{rvon} * * Textprogramm    * * Aufschieben * *":gosub2510:goto2020
2510 gosub95
2511 print"f3 = X - Zeilen  f5 = bis [f1]"
2512 gosub1:ifa$="{f1}"then2560
2513 ifa$="{f5}"then2300
2520 print"Wieviele Zeilen":inputz:pp=pp-1:a=a-1
2530 foro=an+ztopp+zstep-1
2540 a$(o)=a$(o-z):next
2550 foro=pp+1topp+z:a$(o)="":next:an=an+z
2560 print"{home}{down}{down}{rvon} + Textprogramm + Eingabe / Aendern +  ":return
2600 print"{home}{down}{down}{rvon} * * Textprogramm    * * Loeschen   * * "
2610 gosub95
2620 print"Wieviele Zeilen":inputz
2630 foro=pptoan+z
2640 a$(o)=a$(o+z):next
2650 foro=an-ztoan:a$(o)="":next:an=an-z:gosub2560:a=a-1:goto2020
2800 print"{home}{down}{down}{rvon} * * Textprogramm    * * Copieren    * *":z=0:z1=0
2810 gosub95:print"Markieren sie das untere Ende mit [f3]"
2820 print"[f1] = Ende   :  [f3] = Markieren"
2825 print"[f5] = hoch   :  [f7] = runter"
2829 z=1
2830 ifz+pp<1orz+pp>maxthenz=1
2831 g9=pp+z-6:gosub30705:poke781,11:poke782,0:sys58636
2832 print"{rvon}";a$(pp+z);"{rvof}"
2833 gosub1:ifa$="{f1}"then2030
2834 ifa$="{f5}"thenz=z-1
2835 ifa$="{f7}"thenz=z+1
2836 ifa$="{f3}"then2850
2840 goto2830
2850 ifz1=0thenz1=z:gosub80:print"Markieren sie wohin der Block soll    ":goto2830
2860 z2=pp+z-1
2881 g9=pp+z-6:gosub30705:poke781,11:poke782,0:sys58636
2886 fort=pptopp+z1:a$(((t+1)-pp)+z2)=a$(t):next
2887 ifan<((t+1)-pp)+z2thenan=((t+1)-pp)+z2
2890 goto7000
2900 print"{clr}{down}{down}{down}Nach welchem Wort soll gesucht werden":a$=""
2901 gosub9:c$=a$:iff<>0then100
2902 print"{clr}{down}{down}{down}Welches Wort soll dafuer eingesetzt     werden":gosub9:b$=a$
2903 print"{clr}";pt$;"{down}     (j) = Aendern  (n)=Lassen{down}{down}{down}"
2910 l1=len(c$):l2=len(b$):l3=l2-l1
2920 fort=1toan+1:x=0:g=1:cc=0:gosub30400
2921 ifcc=999thengosub2960:cc=0
2925 x=len(a$(t)):ifx=0thennext:goto100
2930 forg=1tox
2935 ifmid$(a$(t),g,l1)<>c$thennext:next:goto100
2939 print"{home}{down}{down}{down}{down}{down}{down}";a6$;a6$;a6$
2940 print"{home}{down}{down}{down}{down}{down}{down}";right$("   "+str$(t),3);" ";left$(a$(t),g-1)+"{rvon}"+c$+"{rvof}";
2941 printright$(a$(t),len(a$(t))-g-len(c$)+1)
2942 gosub1:ifa$="n"then2950
2945 a$=left$(a$(t),g-1)+b$+right$(a$(t),x-(g+l1)+1):x=x+l3:gosub30400:a$(t)=a$
2946 ifcc=999thengosub2960                           
2950 next:next:goto100
2960 a$(t)=a$:a$(t+1)=r$+" "+a$(t+1):iflen(a$(t+1))<m8thenreturn
2970 z=1:pp=t+1:gosub2530:a$=a$(t+1):gosub30400:a$(t+1)=a$:a$(t+2)=r$:return
4000 print"{clr}";pt$
4001 print"{rvon} + Variablen aus der Dateiverwaltung  + "
4002 print"{down}{down}-1- Nach Nummer"
4011 print"{down}-2- Nach Namen"
4020 gosub1:ifa$="{f1}"then100
4030 ifa$="1"theninput"{down}Nummer";y:goto4499
4040 print"{clr}";pt$:print"{down}{down}{down}Name":gosub4:gosub5:b$=a$:iff=1then100
4050 gosub4100:iff<>999then4499
4060 goto4230
4100 close2:open2,fa,15:open5,fa,2,"ad,s,r":gosub34000:ifer<>0then100
4110 gosub34100:input#5,a
4120 ifleft$(a$,len(b$))=b$thenclose2:close5:y=a:return
4150 if(st and 64)=64thenclose2:close5:goto4200
4160 goto4110
4200 f=999:print"{clr}";pt$
4210 print"{down}{down}Datensatz ";b$
4220 print"nicht vorhanden.":return
4230 print"{down}{down}Bitte [f1] druecken":gosub1:goto100
4499 gosub4500:goto4560
4500 close2:close5
4501 hb=int(y/256):lb=y-hb*256
4510 open2,fa,15:open5,fa,2,"asalem,l,"+chr$(254)
4520 print#2,"p"+chr$(2)+chr$(lb)+chr$(hb)+chr$(1)
4522 input#2,en
4525 ifen<>0thenprint"{rvon}ERROR Falsche Diskette !!!":return
4530 b=20:gosub4700:gosub4750:v$(1)=b$
4531 b=20:gosub4700:gosub4750:v$(2)=b$
4532 b=20:gosub4700:gosub4750:v$(3)=b$
4533 b=4:gosub4700:v$(4)=b$
4534 b=20:gosub4700:gosub4750:v$(4)=v$(4)+" "+b$
4536 b=16:gosub4700:v$(5)=b$
4537 b=2:gosub4700:v$(6)=b$+".":gosub4700:v$(6)=v$(6)+b$+".":b=4:gosub4700
4538 v$(6)=v$(6)+b$:b=10:gosub4700:v$(7)=b$
4539 b=2:gosub4700:v$(8)=b$
4542 b=10:gosub4700:v$(9)=b$
4544 b=10:gosub4700:v$(10)=b$
4546 b=20:gosub4700:gosub4750:v$(11)=b$
4548 b=20:gosub4700:v$(12)=b$
4549 b=20:gosub4700:gosub4750:v$(13)=b$
4550 b=20:gosub4700:gosub4750:v$(14)=b$
4555 close2:close5:return
4560 print"{clr}";pt$:print"Datensatz ";v$(2)
4561 ifba$<>v$(8)andpr=0thenv$(7)="passwort geschuetzt"
4565 print:fort=1to14:printv$(t):next:print"{down}Bitte [f1] druecken":gosub1:goto100
4599 goto100
4700 poke917,b-1:poke915,5:sys50182,b$
4740 ifright$(b$,1)=" "thenb$=left$(b$,len(b$)-1):goto4740
4749 return
4750 a$=left$(b$,1):ifasc(a$)<65orasc(a$)>90thenreturn
4760 b$=right$(b$,len(b$)-1):b$=chr$(asc(a$)+32)+b$:return
5000 goto5500
5001 print"{clr}";pt$:print"{down}{down}Laden von Diskette"
5010 print"{down}{down}   -1- Text loeschen und neuen                 Text laden"
5020 print"{down}   -2- Hinter alten Text laden"
5021 print"{down}   -3- Listings laden"
5025 print"{down}Befehl";
5030 gosub1
5040 ifa$="{f1}"then100
5041 b1$="Ansehen [f3]":b2$="Aendern [2]"
5042 ifa$="1"ora$="3"thengosub1305:goto5050
5043 ifa$="2"then5050
5045 goto5030
5050 print"-";a$;"-":i=0:ifa$="3"theni=999
5060 print"{clr}{down}{down}{down}{down}{down}Name der Datei":a$="":gosub9:t1$=a$:b$=a$:iff=1then100
5061 ifleft$(a$,1)<>"@"then5066
5062 a$=right$(a$,len(a$)-1):t=val(a$):a$=v$(30+t)
5063 ift>borb=0then5060
5064 goto5100
5066 print"{home}{down}{down}{down}{down}{down}Aufzeichnungsdatum:":a$="??????":gosub9
5070 ifpr<>1thena$=">"+ba$+a$+b$
5071 ifpr=1thena$=b$
5100 rem
5102 open2,fa,15,"i0"
5103 gosub34000
5104 open5,fa,5,"0:"+a$+",s,r"
5105 ax=0:gosub34000:ifen=62then100
5106 ifi=999then5200
5107 input#5,ax:fort=1toax
5110 rem
5111 gosub34100:a$(t+an)=a$:ifa$(t+an)=">"thena$(t+an)=" "
5112 gosub34000
5113 geta$:ifa$="{f1}"thenclose2:close5:goto100
5114 next
5115 an=an+ax
5120 close2:close5:goto100
5200 rem
5210 an=an+1
5211 geta$:ifa$="{f1}"thenclose2:close5:goto100
5220 gosub34100:a$(an)=a$:ifst<>64then5210
5230 close2:close5:goto100
5400 print"{clr}";pt$:print"{down}{down}Vergleichen von Diskette"
5401 a$=t1$:print"Name":gosub9:iff=1then100
5402 open2,fa,15,"i0":gosub70
5403 gosub34000:ifpr<>1thena$=">"+ba$+"??????"+a$
5404 open5,fa,5,"0:"+a$+",s,r"
5405 gosub34000:ifen<>0then100
5407 input#5,ax:ifb<>0andax<>b-vthenprint"Zeilenanzahl falsch"
5408 fort=1toax
5410 gosub34100:ifa$=">"thena$=" "
5412 printa$:poke198,0:wait198,1:geta$:ifa$="{f1}"then5420
5413 gosub34000
5415 next
5420 close2:close5:print"Taste druecken":gosub1:goto100
5500 print"{clr}";pt$
5501 print"{rvon} + Menu Disketten-Operationen         + "
5502 print"{down} laden     [4]"
5503 print" speichern [5]"
5510 rem
5520 print"{down}  -0- Menu"
5521 print"  -1- Text vergleichen"
5525 print"  -2- Text umbenennen"
5527 print"  -3- Text loeschen"
5529 print"  -4- Text laden"
5530 print"  -5- Text speichern"
5532 print"  -6- Inhaltsverzeichnis"
5534 ifpr=1thenprint"  -7- Disk formatieren"
5536 ifpr=1thenprint"  -8- Disk Name + ID aendern"
5550 gosub1
5551 ifa$="0"ora$="{f1}"then100
5552 ifval(a$)=0then5500
5553 onval(a$)goto5400,5650,5700,5001,6000,5800,5600,5900
5555 return
5600 print"{clr}";pt$:pa$="":ifpr=0then100
5610 print"{rvon} D i s k e t t e  F o r m a t i e r e n "
5630 a$="Disketten Name":gosub9:b$=a$:iff=1then100
5631 print"{home}{down}{down}{down}{down}Schuetzen?":a$="n":gosub9:ifa$="j"theninput"Passwort";pa$
5633 ifa$="j"andlen(pa$)<10thenpa$=pa$+chr$(0):goto5633
5634 a$="id"
5635 print"{home}{down}{down}{down}{down}Disketten ID  ":gosub9:id$=a$:a$=left$(b$+"................",16)
5640 id$=left$(id$+"te",2)
5641 gosub3
5642 open2,fa,15,"n:"+a$+","+id$:close2:ifpa$=""thengoto100
5643 open15,fa,15,pr$:open2,fa,2,"#"
5644 print#15,"b-r 2 0 18 0":print#15,"b-p 2 164"
5645 print#2,chr$(0)+chr$(0)+chr$(0):print#15,"b-p 2 180":print#2,pa$
5646 print#15,"b-p 2 2":print#2,"o";
5647 print#15,"b-w 2 0 18 0":close2:close15:goto100
5650 print"{clr}";pt$:print"{rvon}  +  T e x t   u m b e n e n n e n  +   "
5651 print"{home}{down}{down}{down}{down}Alter Name":a$="":gosub9:iff=1then100
5652 b$=a$:a$="ttmmjj":print"{home}{down}{down}{down}{down}Datum":gosub9
5655 c$=a$:print"{home}{down}{down}{down}{down}Neuer Name":gosub9
5656 ifpr=1thengosub3:a$=">"+a$:b$=">"+b$
5657 ifpr=0thengosub3:a$=">"+ba$+da$+a$:b$=">"+ba$+c$+b$
5660 open2,8,15,pr$
5670 print#2,"r:"+a$+"="+b$:gosub34000:close2:goto100
5700 print"{clr}";pt$:print"{rvon}    +  T e x t   l o e s c h e n  +     "
5715 print"{home}{down}{down}{down}{down}Name":gosub9:b$=a$:iff=1then100
5716 a$="??????":print"{home}{down}{down}{down}{down}Datum      ":gosub9:gosub3
5717 ifpr<>1thena$=">"+ba$+a$+b$
5718 ifpr=1thena$=">"+b$
5719 open2,fa,15,pr$
5720 print#2,"s0:"+a$:close2:goto100
5800 close15:close2:open15,fa,15,"i":print"{clr}";pt$
5801 print"{clr}";pt$:print"{rvon}  + Inhaltsverzeichnis der Diskette  +  {down}{down}{down}"
5810 open2,fa,2,"#"
5811 print#15,"b-r 2 0 18 0":print#15,"b-p 2 165"
5812 get#2,a$:ifa$<>""then5816
5813 print#15,"b-p 2 180":pa$="":fort=1to10:get#2,a$:pa$=pa$+a$:next
5814 print"Die Diskette ist geschuetzt: Geben Sie  das Passwort ein"
5815 inputa$:ifa$<>pa$thenclose2:close15:goto100
5816 b$="":x=999:gosub5910:x=0:b$="{f3}"
5817 ifa$(2)="inhalt"thenan=an+2:a$(an)=id$+" "+n$:an=an+1
5820 t=18:s=1:b=0
5821 gosub5898
5830 print#15,"u1 2 0";t;s
5840 v=0
5841 get#2,x$:x$=x$+chr$(0):t=asc(x$)
5842 get#2,x$:x$=x$+chr$(0):s=asc(x$)
5845 forx=0to7:print#15,"b-p 2";x*32+2
5846 get#2,x$,a$:z=asc(x$+chr$(0)):ifz<>8*16+1andpr=0 then5855
5847 gosub5890
5848 ifb=10thenb=0:print"{down}Bitte f3 druecken{down}":wait198,1:getb$:gosub5898
5849 ifb$="{f1}"then100
5850 x$="{wht}seq ":ifz<>0andpr=1thengosub5870
5851 ifpr=0andz<>0thenprint"{wht}   ";b,"{left}";ff$:v$(30+b)=c$
5852 ifpr=1thenprint"{wht}  ";x$,ff$
5855 nextx
5856 ift<>0then5830
5860 print"{down}{down}Bitte f1 druecken":gosub1
5865 goto100
5870 ifz=130thenx$="prg "
5871 ifz=129thenx$="seq "
5872 ifz=194thenx$="prg<"
5873 ifz=131thenx$="usr "
5874 ifz=193thenx$="seq<"
5875 ifz=195thenx$="usr<"
5880 ifa$(1)="p"andz<>130andz<>194thenreturn
5881 ifa$(2)<>"inhalt"thenreturn
5885 an=an+1:a$(an)=id$+" "+x$+ff$:return
5888 goto100
5890 ifpr=1then5897
5891 get#2,a$,a$:ifa$<>">"thenz=0:return
5892 get#2,a$,b$:ff$=a$+b$:ifff$<>ba$andba$<>"--"thenz=0:return
5893 c$=">"+a$+b$:get#2,a$,b$:ff$=ff$+"  "+a$+b$+".":c$=c$+a$+b$
5894 get#2,a$,b$:ff$=ff$+a$+b$+".":c$=c$+a$+b$
5895 get#2,a$,b$:ff$=ff$+a$+b$+"  {$a0}":c$=c$+a$+b$
5896 fory=1to7:get#2,a$:c$=c$+a$:ff$=ff$+a$:nexty:b=b+1:return
5897 ff$="":get#2,a$:fory=0to15:get#2,a$:ff$=ff$+a$:next:b=b+1:return
5898 print"{clr}";pt$:print"Disk: ";n$;"  ID:";id$;"{down}"
5899 print"    Nr.  Wer  Datum     Name{down}":return
5900 ifpr=0then100
5901 print"{clr}";pt$:print"{rvon}Aendern des Disknamens  oder der Disk ID"
5902 print"{down}Die zu Aendernde Diskette einlegen und":print"  [f3]  druecken"
5903 poke198,0:gosub1:ifa$<>"{f3}"then100
5908 b$=""
5909 open15,8,15,"i":print#15,pr$:open2,8,2,"#"
5910 print#15,"b-r 2 0 18 0":print#15,"b-p 2 144":fort=1to20:get#2,a$:b$=b$+a$:next
5920 n$=left$(b$,16):id$=right$(b$,2)
5921 ifx=999thenreturn
5925 print"Name  ";n$:input"{up}Name";n$
5927 print"ID    ";id$:input"{up}ID  ";id$
5930 n$=n$+"{$a0}{$a0}{$a0}{$a0}{$a0}{$a0}{$a0}{$a0}{$a0}{$a0}{$a0}{$a0}{$a0}{$a0}{$a0}{$a0}":id$=id$+"++":n$=left$(n$,16):id$=left$(id$,2)
5940 print#15,"b-p 2 144":print#2,n$;id$;:print#15,"b-w 2 0 18 0"
5945 close2:close15
5950 input"Passwort";pa$:ifpa$="0"then100
5960 iflen(pa$)<10thenpa$=pa$+chr$(0):goto5960
5970 goto5643
6000 print"{clr}";pt$:print"{rvon}+ + T e x t    A u f z e i c h n e n + +"
6001 print"{down}Textname: ";t1$
6002 print"{down}{down} [f1]=Ende   [=] = Textname{down}"
6004 a$="=":gosub9:iff=1then100
6005 ifa$="="thena$=t1$:ift1$=""thenprint"Name fehlt":goto6004
6006 t1$=a$:b$=">"+ba$+"??????"+a$
6007 print"{down}Alle Vorgaenger loeschen (j/n)?":gosub1
6008 ifa$="j"thenopen2,8,15,"s:"+b$:close2
6009 b1$="Drucken [3]":b2$="Ende [f5]"
6015 a$=t1$:gosub70
6016 t1$=a$:open2,fa,15,"i0":a$=">"+ba$+da$+a$:print#2,pr$
6017 gosub34000
6018 open5,fa,5,"@0:"+a$+",s,w"
6021 gosub34000
6022 ax=b-v:print#5,str$(ax)
6024 fort=vtob:ifa$(t)=""ora$(t)=" "thena$(t)=">"
6030 print#5,a$(t):ifa$(t)=">"thena$(t)=""
6031 gosub34000
6032 next:close2:close5:goto100
7000 t=0:x=0
7002 ifx<0thenx=0
7003 gosub7030:fort=1to20
7004 print"{rvon}";right$(str$(t+x*20),1);"{rvof}";a$(t+x*20)
7006 nextt
7007 print"{down}f1=Ende   f3=Seite +   f5=Seite - "
7008 b1$="Aendern   [2]"
7009 b2$="Speichern [5]":b3$="Hilfe     [f7]"
7010 gosub1
7011 ifa$="{f1}"then100
7012 ifa$="{f5}"thenx=x-1:ifx>=0then7002
7013 ifa$="{f3}"thenx=x+1:ifx*20<anthen7002
7014 ifx*20>=anthenx=0:goto7002
7015 ifx<0thenx=int(an/20):goto7002
7020 goto7010
7030 print"{clr}{rvon} +T e x t  6 4 +Bildschirm+Zeile        "
7031 print"{home}{rvon} +T e x t  6 4 +Bildschirm+Zeile";x*20;"-"
7032 return
7100 print"{clr}";pt$:print"{rvon} + +      Bildschirmausgabe         + + "
7105 input"{down}{down}Ab Zeile";x:ifx<1orx>anthenx=1
7106 x=int(x/20):goto7002
8000 print"{clr}";pt$
8002 g=0
8006 print"{down} -1- Neustart des Programms"
8007 print"{down} -2- Info ueber Speicherplatz"
8008 print"{down} -3- Ton aus"
8009 print"{down} -4- Ton an"
8010 gosub1
8011 ifa$="1"then10000
8013 ifa$="0"ora$="{f1}"then100
8014 ifa$="1"thenrun
8015 ifa$="2"thenprintfre(9);"Zeichen frei":print"{down} Taste druecken":gosub1:goto26
8016 ifa$="{home}"theninput"code";a$:ifa$="susi"then55555
8017 ifa$="{CTRL-P}"and(ba$="--"orba$="of")thenpr=1:print"{down}{down}{down}Prog ok":gosub1:goto100
8018 ifa$="{CTRL-O}"thenpr=0:print"{down}{down}{down}Programmierer aus":gosub1:goto100
8019 ifa$="3"thent9%=1:print"{down}Ton aus":goto100
8020 ifa$="4"thent9%=0
8021 ifa$="{wht}"andpr=1thenend
8099 goto100
9400 rem*** fill ***
9401 print"{clr}";pt$:print"{home}{down}{down}{rvon} * * Textprogramm * * Ausfuellen  * *   "
9407 f2=0:print"Neben den Text [j/n]":gosub1:ifa$="j"thenf2=1
9408 ifa$="{f1}"then100
9409 iff2=1thenprint"Links/Rechts [l/r]":gosub1:g=1:ifa$="r"theng=2
9410 gosub70
9421 input"Schrittweite";s:ifs<=0then9421
9429 print"{clr}{down}{down}{down}{down}Was ?"
9430 a$="":gosub9:iff=1then100
9440 ifb>anthenan=b
9450 fort=vtobsteps
9452 iff2=0thena$(t)=a$
9453 iff2=1andg=1thena$(t)=a$+a$(t)
9454 iff2=1andg=2thena$(t)=a$(t)+a$
9455 next:goto7000
9689 return
9700 print"{clr}{rvon}";pt$;"{down}"
9710 print"{down}  1  Variablen zeigen"
9712 print"{down}  2  Variablen eingeben"
9713 print"{down}  3  Variablen an"
9714 print"{down}  4  Variablen aus"
9715 print"{down}  5  Variablen zu Text"
9717 print"{down}  6  Variablen als Text 1-50"
9718 print"{down}  7  Text als Variablen 1-50"
9719 print"{down}  8  Variablen aus Dateiverwaltung"
9750 gosub1
9755 ifa$="0"ora$="{f1}"then100
9760 onval(a$)goto9800,9900,9780,9785,9850,9790,9795,4000
9770 goto9750
9780 v9=1:print"Variablen an":fort=1to999:next:goto9700
9785 v9=0:print"Variablen aus":fort=1to999:next:goto100
9790 fort=1to50:a$(t)=v$(t):an=50:next:goto100
9795 fort=1to50:v$(t)=a$(t):next:goto100
9800 print"{clr}";pt$
9801 fort=1to50:printt,v$(t)
9810 ift/20=int(t/20)thengosub1:print"{clr}";pt$
9820 next:gosub1:goto100
9850 gosub3:v9=1
9860 fort=1toan:a$=a$(t):gosub30300:a$(t)=a$:next:v9=0:goto100
9900 print"{clr}";pt$:print"{down}      + + Variablen EINGABE + +{down}{down}{down}{down}"
9901 input"Variablen Nr.";a:ifa>40then9900
9910 a$="":gosub9:v$(a)=a$
9920 print:print"Noch eine? [j/n]"
9930 gosub1
9940 ifa$="n"then100
9950 goto9900
10000 print"{clr}";pt$:b$=a$
10010 print"{down}{down}ACHTUNG !!! Text unbedingt SPEICHERN"
10020 print"{down}Ist der Text schon gespeichert? [j/n]"
10030 gosub1:ifa$<>"j"then6000
10040 a$=b$:poke930,0:goto8013
20000 print"{clr}";pt$:print"{down}{rvon} + + Textprogramm + + R E C H N E N  + +"
20009 print"{down} [e]= Ende"
20010 print"{down} [c]= Speicher loeschen"
20011 print"{down} [m]= Mehrwertsteuer eingeben"
20013 print"{down} [+] [-] [*] [:] = Rechenoperationen"
20015 rr=int((rr*100)+0.5)/100
20019 print"{down}{down}{rvon}";rr;"{rvof}";
20020 gosub1
20030 ifa$="c"thenrr=0:goto20000
20031 ifa$="e"ora$="{f1}"then100
20032 ifa$="m"theninput"Steuer in %   14{left}{left}{left}{left}";mw:goto20000
20034 ifa$<>"+"anda$<>"-"anda$<>"*"anda$<>":"then20020
20040 printa$;"  ";:inputx
20050 ifa$=":"andx=0thenprint"Fehler... nicht durch 0 dividieren":goto20020
20060 ifa$=":"thenrr=rr/x
20061 ifa$="*"thenrr=rr*x
20062 ifa$="+"thenrr=rr+x
20063 ifa$="-"thenrr=rr-x
20064 goto20000
22000 ifpeek(1022)=0thengosub22100
22001 ifpeek(1022)=0thenpoke1022,1:load"zeichen b",8,1
22002 ifpeek(1022)=250thenpoke1022,240:load"zeichen din",8,1
22003 ifpeek(1022)=1thenpoke53272,11:poke56576,peek(56576)and252:poke648,192
22004 ifpeek(1022)=240thenpoke53272,11:poke56576,peek(56576)and252:poke648,192
22005 ifpeek(1022)=1thenpoke1022,2:load"zeichen d",8,1
22006 print"{clr}":ifpeek(1022)=240thenpoke1022,199:load"zeichen ddin",8,1
22007 ifpeek(1022)=2thenpoke1022,3:load"profip v1.0",8,1
22008 ifpeek(1022)=199thenpoke1022,200:load"profip v1.0",8,1
22009 ifpeek(1022)=111thenpoke53272,11:poke56576,peek(56576)and252:poke648,192:end
22010 goto11
22100 printchr$(14);"{clr}{rvon} Textverarbeitungsprogramm      O.Fendt "
22105 print"{down}{down}Was fuer eine Tastaturbelegung?"
22106 input"{down}{down} [din] - [cbm]{rght}{rght}{rght}din{left}{left}{left}{left}{left}";a$
22107 ifa$="din"thenpoke1022,250
22108 gosub3:return
30000 g9=g8-6:gosub30700:xt=0:iflen(a$)>m8thena$=left$(a$,m8)
30001 poke922,am:cf=1:ifu9=2thenu9=0:cp=len(r$)+cb:goto30020
30002 ifcc=999thencp=len(a$(g8)):cc=0:goto30020
30010 cc=0:x=0:cp=cb
30020 ifcp=0thencp=1
30021 poke908,cp-1:poke918,m8-(m8/5):poke920,11:poke917,m8:poke924,0
30040 sys 50176,a$,a$ :f=peek(913):ifa$="> "thena$=""
30045 gosub31
30053 iff=9thengosub30550:goto30020
30054 iff=15thena$="":a$(g8)="":goto30000
30055 iff=11thengosub30400:a$(g8)=a$
30056 iff=20thencc=999:f=5
30057 iff=16thenf=0:ifright$(a$,1)<>"{CBM-F}"thena$=a$+"{CBM-F}"
30099 gosub30300:gosub30400:print:return
30300 rem ** variablen test **
30301 ifv9=0thenreturn
30310 forb=1tolen(a$)-2
30320 ifmid$(a$,b,1)<>"@"thennext:return
30330 x=val(mid$(a$,b+1,2)):ifx>50thenx=0
30340 a$=left$(a$,b-1)+v$(x)+right$(a$,len(a$)-b-2):goto30310
30350 next:return
30400 iflen(a$)<m8thenreturn
30401 iflen(a$)>80then30440
30403 cc=999:fori=m8to1step-1
30410 ifmid$(a$,i,1)<>" "thennexti:goto30440
30420 r$=right$(a$,len(a$)-i):a$=left$(a$,i-1):u9=1
30421 ifright$(r$,1)=" "thenr$=left$(r$,len(r$)-1):goto30421
30430 iflen(a$)>=m8thennext:goto30440
30431 return
30440 gosub95:print"{down}>> Zeile zu lang << Fehler !!":poke198,0
30441 a$=left$(a$,m8-1)
30442 gosub30601:ifpeek(198)<1then30442
30443 poke198,0:return
30550 ifcp+1>len(t7$)orxt=1thenreturn
30560 x=0:forz=cp+1tolen(t7$):ifmid$(t7$,z,1)="+"andx=0thenx=1:cp=z
30570 next:ifx=0thenxt=1
30580 iflen(a$)<cpthena$=a$+"{$a0}":goto30580
30590 return
30600 rem ** error system **
30601 ift9%=1thenreturn
30602 poke53280,1
30603 poke54296,15:poke54277,25:poke54278,4*16+4
30610 poke54273,29:poke54272,69:poke54276,17
30619 fort=1to200:next
30620 poke53280,0:fort=1to200:next
30621 poke54276,0:poke54277,0:poke54278,0:return
30700 rem   ** fenster **
30701 print"{home}";pt$:print"{down}{down}";t7$
30702 gosub80:gosub30750
30705 print"{home}":fori=0to10:poke781,i+5:poke782,0:sys58636
30710 ifg9+i<=0thengosub90:goto30740
30720 v=mb-len(a$(i+g9)):ifv<0thenv=0
30730 printa$(i+g9)+left$(a6$,v)
30740 next:gosub90:return
30750 printk1$;left$(a6$,(mb+2)-len(k1$))
30751 printk2$;left$(a6$,(mb)-len(k2$))
30752 printk3$;left$(a6$,(mb)-len(k3$))
30753 printk4$;left$(a6$,(mb)-len(k4$)):return
31000 rem *****************************
31001 rem *****************************
31002 rem **     initialisierung     **
31003 rem *****************************
31004 rem *****************************
31006 pt$="{wht}{rvon}Hypra-text V1.0          by Oliver Fendt{rvof}":me=100:print"{clr}";pt$
31009 fu$="Rechnen":mw=14
31010 dimv$(50)
31016 poke53281,0:poke53280,0:ifm8<=7thenm8=36
31019 t7$="!----+----+----+----+----+----+----------"
31020 gosub46000:b1$=str$(m8)+" Zeichen Modus"
31048 a6$="                                                                   "
31060 b1$="Laden       [5]"
31061 b2$="Eingabe     [f1]"
31062 b3$="Hilfe       [f7]"
31063 gosub1840:pr$="m-w"+chr$(1)+chr$(1)+chr$(1)+"a"
31150 print"{clr}";pt$:print"{down}{down}Guten Tag,";v$(1)
31160 print"{down}Bitte geben Sie das Datum ein."
31199 return
33000 rem *** formblatt ***
33001 print"{clr}";pt$:print"{home}{down}{down} + M a s k e  ausfuellen  + Von Menu 1 +":a=cb
33004 b1$="Speichern [5]":b2$="Aendern [2]"
33010 forpq=1toan
33020 a$=a$(pq):a$(pq)=a$
33021 iflen(a$)=0thennext:goto33099
33022 forpx=1tolen(a$):l=0
33025 ifmid$(a$,px,1)="{CBM-@}"thencb=px:goto33050:ifcc=4andc8=0then100
33027 next:g9=pq-6:gosub30700:next:goto33099
33050 forpx=cbtolen(a$):ifmid$(a$,px,1)="{CBM-@}"thennext
33060 a$=left$(a$(pq),cb)+left$(a6$,px-cb-1)
33061 x=len(a$(pq))-px+1:ifx>0thena$=a$+right$(" "+a$(pq),x)
33062 a$(pq)=a$
33070 g8=pq:gosub30000:a$(pq)=a$:iff=1then100
33072 goto33022
33099 cb=a:goto100
33200 return
34000 rem *****************************
34001 rem *                           *
34002 rem *  floppy control           *
34003 rem *                           *
34010 rem *****************************
34020 input#2,en,em$,et,es:ifen=0thenreturn
34050 print"{home}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}";en;"  ";em$
34060 print"{down}{down}Taste druecken"
34070 gosub1
34080 ifen=62orxy=999thenreturn
34090 print"Kontrollieren und nach dem beheben      [f1] druecken"
34091 gosub1:ifa$<>"{f1}"then34091
34092 print#2,"i":goto100
34100 poke915,5:poke908,0:poke917,m8:sys50182,a$
34110 gosub31:return
34500 fort=20767+8500 to65000
34510 ifpeek(t)<>0thennext
34520 x=t
34530 printpeek(x)+peek(x+1)*256
34540 x=x+2
34550 ifpeek(x)=0thenx=x+3:print:goto34530
34560 printchr$(peek(x));:x=x+1:goto34550
40000 print"{home}{down}{down}{down}{down}{down}{down}{down}{down}Datum:":a$="------":gosub9:da$=a$
40010 ifda$="------"then40000
40020 d$=left$(da$,2)+"."+mid$(da$,3,2)+".19"+right$(da$,2):return
43000 rem
43040 am=1
43060 return
46000 print"{clr}";pt$;chr$(14):m8=39:cb=1:mb=39:t9%=1
46001 print"{down}Parameterdiskette einlegen{down}"
46002 ifpeek(930)<>0thenba$=chr$(peek(930))+chr$(peek(931)):fa=peek(932):goto46070
46003 print"Floppy  Adr.:  8":gosub1:fa=val(a$):ifa$=chr$(13)thenfa=8
46004 iffa<8orfa>9then46003
46005 t9%=1:print"{down}{down}Name         ":gosub4:gosub5:b$=a$:t=0:print
46006 ifval(b$)<>0theny=val(b$):gosub4500:goto46010
46007 gosub4100:iff<>999thengosub4500
46010 iff=999oren<>0thenprint"{down}Benutzer nicht registriert":gosub1:goto46000
46013 ifpeek(1022)=200thenam=2
46050 m8=39
46053 ifv$(7)="-"thenprint"Keine Zugriffsberechtigung":gosub1:goto46000
46055 ift>2thenprint:print"{wht}Passwort falsch":gosub1:goto46000
46056 print"{home}{down}{down}{down}{down}{down}{down}{down}{down}Codewort{blk}":gosub4:gosub5:print"{wht}":ifa$<>v$(7)thent=t+1:goto46055
46058 ba$=v$(8)
46060 poke930,asc(left$(ba$,1))
46061 poke931,asc(right$(ba$,1))
46062 poke932,fa
46070 xy=0:return
55555 close15:open15,8,15,"i":close15
55556 print"{clr}{down}{down}{down}{down}ich speichere": save"@:pt"+da$,8
55557 poke2,0
55560 print"{home}{down}{down}{down}{down}{down}{down}{down}ist gespeichert":end
56100 print"{clr}";pt$
56101 print"{down}{down} {rvon}ACHTUNG !!!{rvof}"
56102 print"{down} Nur wenn der Text schon gespeichert"
56103 print" ist, dann die Hypra-text Diskette"
56104 print" einlegen, und [f8] druecken !!!"
56106 gosub1:ifa$<>"{f8}"then100
56107 print"{clr}";pt$:print"{down}{down}Ich lade nun Profiprint"
56108 print"{down}  Bitte warten ..."
56109 poke2,0:load"profiprint",8
Listing 1. »Hypra-Text«-Hauptprogramm. Bitte die Eingabehinweise auf Seite 54 beachten.
PROGRAMM : PROFIP V1.0    C400 CBAF
-----------------------------------
C400 : 4C 1E C4 4C 05 C9 4C 52   8A
C408 : C9 4C A9 C9 4C 54 CA 4C   C6
C410 : 81 CA 4C AA CA 4C 10 CB   46
C418 : 4C 21 CB 4C 40 CB 20 2B   AA
C420 : C4 20 3B C4 20 71 C4 20   3D
C428 : D8 C8 60 A2 00 8E 94 03   9E
C430 : A0 FE A9 20 99 FF CE 88   A4
C438 : D0 F8 60 EA 20 FD AE 20   E7
C440 : 9E AD 20 A6 B6 AA 8E 93   B4
C448 : 03 A0 00 E8 CA F0 10 B1   90
C450 : 22 99 00 CF C8 C9 0D D0   E9
C458 : F3 20 E5 AA 4C 4C C4 AD   C0
C460 : 8C 03 8D 90 03 A9 00 8D   7C
C468 : 91 03 8D 92 03 8D 97 03   31
C470 : 60 4C 7F C6 EA A5 C6 F0   88
C478 : FC 20 B4 E5 C9 03 F0 F5   D2
C480 : 8D 92 03 AC 9A 03 C0 01   73
C488 : D0 03 20 17 C7 AC 9A 03   17
C490 : C0 02 D0 06 20 17 C7 20   60
C498 : 81 C7 4C 41 C7 C9 9D D0   1B
C4A0 : 14 AE 90 03 D0 08 A9 14   AC
C4A8 : 8D 91 03 4C DE C6 CA 8E   B5
C4B0 : 90 03 4C 7F C6 C9 1D D0   96
C4B8 : 17 AE 90 03 E8 EC 95 03   FD
C4C0 : D0 08 A2 00 8E 90 03 4C   4F
C4C8 : 7F C6 8E 90 03 4C 7F C6   7E
C4D0 : C9 AA D0 08 A9 01 8D 99   2F
C4D8 : 03 AD 92 03 C9 A7 D0 08   E4
C4E0 : A9 00 8D 99 03 AD 92 03   0E
C4E8 : C9 13 D0 08 A9 09 8D 91   AC
C4F0 : 03 4C DE C6 C9 93 D0 08   36
C4F8 : A9 0F 8D 91 03 4C DE C6   5A
C500 : C9 8D D0 08 A9 10 8D 91   39
C508 : 03 4C DE C6 C9 85 D0 08   DE
C510 : A9 01 8D 91 03 4C DE C6   6B
C518 : C9 86 D0 08 A9 03 8D 91   65
C520 : 03 4C DE C6 C9 87 D0 08   06
C528 : A9 05 8D 91 03 4C DE C6   85
C530 : C9 88 D0 08 A9 07 8D 91   9F
C538 : 03 4C DE C6 C9 89 D0 08   2E
C540 : A9 02 8D 91 03 4C DE C6   1B
C548 : C9 8A D0 08 A9 04 8D 91   A0
C550 : 03 4C DE C6 C9 8B D0 08   56
C558 : A9 06 8D 91 03 4C DE C6   35
C560 : C9 8C D0 08 A9 08 8D 91   D9
C568 : 03 4C DE C6 AE 90 03 EC   77
C570 : 96 03 D0 30 A9 15 8D 01   3D
C578 : D4 A9 50 8D 00 D4 A9 0F   52
C580 : 8D 18 D4 A9 19 8D 05 D4   3F
C588 : A9 14 8D 06 D4 A9 11 8D   59
C590 : 04 D4 A0 50 A2 FF CA D0   27
C598 : FD 88 D0 F8 A9 00 8D 18   2D
C5A0 : D4 8D 04 D4 AE 90 03 AD   AD
C5A8 : 92 03 C9 0D D0 03 4C DE   E4
C5B0 : C6 C9 14 D0 22 AE 95 03   6E
C5B8 : E8 8E 93 03 AE 90 03 F0   8A
C5C0 : 13 BD 00 CF 9D FF CE E8   93
C5C8 : EC 93 03 D0 F2 AE 90 03   46
C5D0 : CA 8E 90 03 4C 7F C6 C9   D5
C5D8 : 94 D0 1A AE 90 03 AC 95   30
C5E0 : 03 B9 FF CE 99 00 CF 88   83
C5E8 : CC 90 03 D0 F4 A9 20 9D   30
C5F0 : 00 CF 4C D4 C5 C9 91 D0   18
C5F8 : 27 AE 90 03 E8 BD 00 CF   17
C600 : C9 20 F0 12 C9 00 EC 95   D3
C608 : 03 D0 F1 AE 95 03 CA CA   F8
C610 : 8E 90 03 4C 7F C6 E8 4C   9B
C618 : 1A C6 8E 90 03 4C 7F C6   69
C620 : C9 11 D0 23 AE 90 03 E0   48
C628 : 00 D0 03 4C 74 C4 CA CA   09
C630 : BD 00 CF C9 20 F0 0C E0   96
C638 : 00 30 D0 D0 F2 8E 90 03   8A
C640 : 4C 7F C6 E8 4C 3D C6 AD   40
C648 : 92 03 C9 20 D0 0B AE 90   13
C650 : 03 EC 96 03 30 03 4C DE   D9
C658 : C6 AE 90 03 9D 00 CF E8   E5
C660 : 8E 90 03 AC 99 03 C0 02   45
C668 : D0 09 A9 A0 9D 00 CF E8   26
C670 : 8E 90 03 AC 99 03 C0 01   53
C678 : D0 05 A0 02 8C 99 03 AE   32
C680 : 98 03 AC 9C 03 20 0C E5   86
C688 : A2 00 AC 95 03 BD 00 CF   C6
C690 : 20 47 AB E8 88 F0 06 20   C4
C698 : E5 AA 4C 8D C6 AD 90 03   B9
C6A0 : 18 6D 9C 03 A8 AE 98 03   5F
C6A8 : 20 0C E5 A9 12 20 47 AB   13
C6B0 : AC 90 03 B9 00 CF 20 47   2A
C6B8 : AB A9 92 20 47 AB AE 90   8E
C6C0 : 03 EC 95 03 10 08 AE 90   1C
C6C8 : 03 30 0B 4C 74 C4 A9 0B   5A
C6D0 : 8D 91 03 4C DE C6 A9 0C   53
C6D8 : 8D 91 03 4C DE C6 AE 98   88
C6E0 : 03 AC 9C 03 20 0C E5 A2   00
C6E8 : 00 AC 95 03 BD 00 CF 20   5F
C6F0 : 47 AB E8 88 F0 06 20 E5   E3
C6F8 : AA 4C EC C6 EA AD 90 03   41
C700 : 8D 9D 03 BD 00 CF C9 20   BA
C708 : D0 08 CA F0 03 4C FD C6   C5
C710 : A2 00 E8 8E 90 03 60 EA   37
C718 : C9 59 D0 06 A9 5A 8D 92   4B
C720 : 03 60 C9 D9 D0 06 A9 DA   9A
C728 : 8D 92 03 60 C9 5A D0 06   8A
C730 : A9 59 8D 92 03 60 C9 DA   4C
C738 : D0 06 A9 D9 8D 92 03 60   EB
C740 : 60 EA C9 81 F0 2B C9 95   73
C748 : F0 27 C9 96 F0 23 C9 97   8F
C750 : F0 1F C9 98 F0 1B C9 99   97
C758 : F0 17 C9 9A F0 13 C9 9B   9F
C760 : F0 0F C9 12 F0 0B C9 92   40
C768 : F0 07 C9 22 F0 0B 4C 9D   66
C770 : C4 A9 00 8D 92 03 4C 74   16
C778 : C4 A9 B6 8D 92 03 4C 9D   1E
C780 : C4 AD 92 03 4C 2E C8 C9   0D
C788 : 3A D0 06 A9 B1 8D 92 03   B9
C790 : 60 C9 5B D0 06 A9 B2 8D   59
C798 : 92 03 60 C9 3B D0 06 A9   A3
C7A0 : A3 8D 92 03 60 C9 5D D0   7A
C7A8 : 06 A9 B7 8D 92 03 60 C9   79
C7B0 : 40 D0 06 A9 B8 8D 92 03   57
C7B8 : 60 C9 BA D0 06 A9 A2 8D   19
C7C0 : 92 03 60 C9 2B D0 06 A9   CA
C7C8 : A6 8D 92 03 60 C9 3C D0   21
C7D0 : 06 A9 3B 8D 92 03 60 C9   82
C7D8 : 3E D0 06 A9 3A 8D 92 03   95
C7E0 : 60 C9 23 D0 06 A9 AF 8D   8F
C7E8 : 92 03 60 C9 3D D0 06 A9   13
C7F0 : 23 8D 92 03 60 C9 27 D0   71
C7F8 : 06 A9 2F 8D 92 03 60 C9   A7
C800 : DB D0 06 A9 3F 8D 92 03   AB
C808 : 60 C9 2F D0 06 A9 2D 8D   B0
C810 : 92 03 60 C9 2A D0 06 A9   0A
C818 : 2B 8D 92 03 60 C9 C0 D0   08
C820 : 06 A9 2A 8D 92 03 60 60   BB
C828 : 60 60 60 60 60 60 AD 8E   B9
C830 : 02 C9 01 D0 03 4C BE C8   90
C838 : C9 02 F0 0D C9 04 D0 03   E6
C840 : 4C 85 C8 AD 92 03 4C 87   B8
C848 : C7 AD 92 03 C9 3C D0 06   B9
C850 : A9 3C 8D 92 03 60 C9 3E   A4
C858 : D0 06 A9 3E 8D 92 03 60   98
C860 : C9 5B D0 06 A9 5B 8D 92   9D
C868 : 03 60 C9 5D D0 06 A9 5D   58
C870 : 8D 92 03 60 C9 3D D0 06   E9
C878 : A9 40 8D 92 03 60 EA AD   31
C880 : 92 03 4C 87 C7 AD 92 03   D2
C888 : C9 85 D0 08 A5 01 8D 9B   19
C890 : 03 4C 87 C7 C9 86 D0 08   B8
C898 : A5 02 8D 9B 03 4C 87 C7   55
C8A0 : C9 87 D0 08 A5 03 8D 9B   42
C8A8 : 03 4C 87 C7 C9 88 D0 08   E0
C8B0 : A5 04 8D 9B 03 4C 87 C7   6E
C8B8 : A9 20 8D 92 03 60 AD 92   36
C8C0 : 03 C9 30 D0 06 A9 3D 8D   8C
C8C8 : 92 03 60 C9 3D D0 06 A9   F3
C8D0 : 27 8D 92 03 60 4C 87 C7   D9
C8D8 : 20 FD AE 20 8B B0 85 49   8D
C8E0 : 84 4A 20 A3 B6 AD 90 03   27
C8E8 : 20 75 B4 A0 02 B9 61 00   77
C8F0 : 91 49 88 10 F8 C8 A2 00   AA
C8F8 : BD 00 CF 91 62 E8 C8 EC   46
C900 : 90 03 D0 F4 60 20 2B C4   22
C908 : 20 3B C4 A9 00 8D 97 03   FD
C910 : AE 93 03 E8 20 FD C6 8E   90
C918 : 93 03 BD 00 CF C9 BB F0   B8
C920 : 2A C9 A5 F0 26 C9 B4 F0   1C
C928 : 22 C9 B5 F0 1E C9 A1 F0   53
C930 : 1A C9 AA F0 16 C9 A7 F0   28
C938 : 12 C9 BC F0 0E C9 BE F0   88
C940 : 0A C9 AC F0 06 CA 30 09   02
C948 : 4C 1A C9 EE 97 03 4C 45   3F
C950 : C9 60 20 2B C4 AE 95 03   D5
C958 : E8 8E 95 03 AD 93 03 AE   2E
C960 : 93 03 AC 93 03 20 1E E1   80
C968 : A2 00 E8 20 12 E1 C9 0D   BA
C970 : F0 16 AC 8C 03 C0 FF D0   00
C978 : 04 C9 20 F0 26 9D FF CE   74
C980 : EC 95 03 F0 03 4C 6A C9   E6
C988 : 8D 91 03 8E 90 03 20 FD   0E
C990 : C6 8E 90 03 A9 00 85 99   06
C998 : AE 95 03 CA 8E 95 03 20   0D
C9A0 : D8 C8 60 CA F0 C2 4C 88   B5
C9A8 : C9 20 05 C9 A9 01 85 9B   EC
C9B0 : A9 00 8D 91 03 AD 97 03   F1
C9B8 : 8D 8C 03 AD 93 03 18 ED   8F
C9C0 : 97 03 8D 97 03 EE 97 03   3B
C9C8 : AD 97 03 CD 96 03 30 46   8A
C9D0 : CD 95 03 F0 41 AE 91 03   1D
C9D8 : 10 0F AE 93 03 CA 8E 91   72
C9E0 : 03 E6 9B A5 9B C9 1E F0   54
C9E8 : 2D BD 00 CF C9 20 F0 20   8F
C9F0 : CA 8E 91 03 4C C8 C9 18   28
C9F8 : AD 91 03 E5 9B 8D 91 03   5E
CA00 : CD 95 03 10 03 4C C8 C9   A4
CA08 : A2 00 8E 91 03 4C C8 C9   C9
CA10 : 20 1E CA 4C F7 C9 A2 F0   B6
CA18 : 20 FD C6 4C D8 C8 AE 91   24
CA20 : 03 EC 95 03 30 01 60 AE   49
CA28 : 91 03 10 01 60 AD 95 03   2F
CA30 : 6D 8C 03 A8 B9 FF CE 99   C3
CA38 : 00 CF 88 CC 91 03 10 F4   37
CA40 : A9 20 9D 00 CF AC 93 03   17
CA48 : C8 8C 93 03 AC 97 03 C8   C1
CA50 : 8C 97 03 60 A5 A4 8D 67   F9
CA58 : CA A5 A5 8D 68 CA 78 A9   22
CA60 : 35 85 01 AC 95 03 B9 33   EC
CA68 : 33 99 00 CF C0 00 F0 04   3A
CA70 : 88 4C 66 CA A9 37 85 01   7E
CA78 : AD 95 03 8D 90 03 4C D8   66
CA80 : C8 20 2B C4 20 3B C4 78   9C
CA88 : A9 35 85 01 A5 A4 8D 9D   3E
CA90 : CA A5 A5 8D 9E CA AC 95   66
CA98 : 03 B9 00 CF 99 00 50 88   5E
CAA0 : 30 03 4C 99 CA A9 37 85   7A
CAA8 : 01 60 78 A9 FF 8D 03 DD   61
CAB0 : AD 02 DD 09 04 8D 02 DD   67
CAB8 : AD 00 D0 09 04 8D 00 D0   09
CAC0 : A9 10 8D 0D DD AD 0D DD   B2
CAC8 : A9 E3 8D 26 03 A9 CA 8D   4F
CAD0 : 27 03 A9 1B 20 F7 CA A9   87
CAD8 : 43 20 F7 CA A9 48 20 F7   D0
CAE0 : CA 58 60 48 A5 9A C9 04   56
CAE8 : F0 03 4C CD F1 68 C9 0D   CA
CAF0 : D0 05 20 F7 CA A9 0A 8D   87
CAF8 : 01 DD AD 00 DD 29 FB 8D   85
CB00 : 00 DD 09 04 8D 00 DD AD   5D
CB08 : 0D DD 29 10 F0 F9 18 60   50
CB10 : 20 2B C4 20 3B C4 AC 93   AF
CB18 : 03 88 8C 90 03 20 D8 C8   BB
CB20 : 60 20 2B C4 20 3B C4 A0   24
CB28 : 00 B9 01 CF 99 00 CF C8   A9
CB30 : CC 93 03 D0 F4 AC 93 03   AA
CB38 : 88 8C 90 03 20 D8 C8 60   38
CB40 : A9 60 85 A5 A9 00 85 A4   29
CB48 : A0 FF A9 20 91 A4 88 D0   58
CB50 : F9 E6 A5 A5 A5 C9 C0 D0   28
CB58 : F1 60 A5 02 8D 20 D0 AD   9B
CB60 : 92 03 C9 FF D0 02 A9 7E   A7
CB68 : C9 E0 30 03 38 E9 40 C9   75
CB70 : C0 30 03 38 E9 60 C9 A0   1A
CB78 : 30 26 38 E9 A0 0A 0A 0A   9D
CB80 : 48 A9 A2 85 9E A9 04 85   48
CB88 : 9F 90 06 A9 00 65 9E 85   D7
CB90 : 9E 68 A8 B1 9E F0 08 48   E5
CB98 : 20 EE CA C8 4C 93 CB 60   4C
CBA0 : A8 A9 01 8D 20 D0 B9 02   82
CBA8 : 04 4C EE CA FF 50 28      85
Listing 2. Maschinenroutine zu »Hypra-Text«. Bei der Eingabe bitte den MSE verwenden.
0 data169,240,32,71,3,169,160,32,71,3,96,133,89,120,169,51,133,1,169,0
1 data169,0,133,88,133,90,133,95,169,224,133,91,169,208,133,96,32,191,163
2 data169,160,169,55,133,1,88,96
1000 fort=0to46:readx:poket+828,x:next
1010 sys828
1060 poke53272,8:poke56576,peek(56576)and252:poke648,192:print"{clr}"
1100 fort=1to128:reada$,x:poke1026+t,x:ifa$<>"end"thennext
1110 print1027+t
2000 goto5000
3000 z1=36864+t*8+x+20472+7
3040 pokez1,x(x)
3050 pokez1+256*8,x(x)
3051 pokez1+128*8,255-x(x)
3052 pokez1+384*8,255-x(x)
3060 z1=z1-5*16^3
3070 pokez1,x(x)
3080 pokez1+256*8,x(x)
3081 pokez1+128*8,255-x(x)
3082 pokez1+384*8,255-x(x)
3999 return
4000 rem
4010 forx=1to8
4020 gosub3000:next
4030 print"{down}{down}{down}":goto5030
4900 rem ******************************
4901 rem *                            *
4902 rem * drucker steuercodes        *
4903 rem * 1=sonderz. an              *
4904 rem * 2=sonderz. aus schmal      *
4905 rem * 3=sonderz. aus breit       *
4906 rem *                            *
4907 rem *      1          2       =>3*
4909 rem ******************************
5000 xx=1200:poke1024,8:poke1025,15:poke1026,14
5030 reada$:a$(1)=a$:ifa$="end"then10000
5040 fort=1to8:readx(t):ifx(1)=999then5042
5041 next
5042 fort=1to8:ready(t):next
5050 gosub6500
5055 ifx(1)=999then5030
5060 goto6000:goto5030
6000 print"{clr}";a$(1):printpeek(49152)
6010 t=peek(49152):goto4000
6500 rem ** druckercode **
6510 as=asc(a$):as=as-160
6520 as=(as*8)+1200:fort=1to8:d(t)=y(t):next
6540 fort=1to8:pokeas+t,d(t):next
6550 return
7000 rem ******************************
7001 rem *                            *
7002 rem * druckercodes fuer die      *
7003 rem * cbm codes 1-126            *
7004 rem * (keine sonderzeichen       *
7005 rem * sondern alpha ...)         *
7006 rem *                            *
7007 rem *                            *
7008 rem *                            *
7009 rem ******************************
8499 data "end",0
9999 data"end",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,,0,0,0,0,,0,0,0,0,0,0,0
10000 print"{clr}":goto12000
12000 gosub40000
13000 print"{clr}{down}{down}{down}{down}das programm wird gespeichert":poke46,38
13001 print"{down}  - bitte warten -  "
13003 save"@:loader din 2.1",8
13004 verify"loader din 2.1",8
13005 print"das programm ist gespeichert":end
20000 x= 160 :l= 8500
20001 ifx>191then30000
20010 print"{clr}{down}{down}":print"20000 x=";x+1;":l=";l+2
20020 printl;"data"+chr$(34)+chr$(x)+chr$(34);",999,";x;",0,0,0,0,0,0,0"
20030 print"goto20000{home}"
20040 poke198,5:fort=631to631+5:poket,13:next:end
30000 x= 1:l= 8000
30001 ifx>127 thenprint"{clr}fertig":end
30010 print"{clr}{down}{down}":print"30000 x=";x+1;":l=";l+2
30019 ifx=34thenprintl;"data"+chr$(34)+"''"+chr$(34);",";x:goto30030
30020 ifx>31thenprintl;"data"+chr$(34)+chr$(x)+chr$(34);",";x
30021 ifx<32thenprintl;"data"+chr$(34)+"."+chr$(34);",";x
30030 print"goto30000{home}"
30040 poke198,5:fort=631to631+5:poket,13:next:end
40000 rem *** save file ***
40001 open 2,8,1,"@:zeichen ddin"
40010 print#2,chr$(0);chr$(4);
40020 fort=4*16^2to2048:print#2,chr$(peek(t));:next
40030 close2
40040 open2,8,1,"@:zeichen din"
40050 print#2,chr$(0);chr$(14*16);
40060 fort=9*16^3to9*16^3+4096
40070 print#2,chr$(peek(t));:next
40080 close2:return
Listing 3. Mit dem Programm »ZLOADER« definieren Sie Bildschirm- und Druckersteuerzeichen. Beachten Sie bitte die Eingabehinweise auf Seite 54.
8500 data"{$a0}",0,0,0,24,0,0,0,0, 32 ,0,0,0,0,0,0,0
8502 data"{CBM-K}",0,112,34,38,34,112,0,0,27, 53,0,0,0,0,0,0
8504 data"{CBM-I}",102,0,102,102,102,102,60,0,93,0,0,0,0,0,0,0
8506 data"{CBM-T}",102,0,60,6,62,102,62,0,123,0 ,0,0,0,0,0,0
8508 data"{CBM-@}",999, 241 ,0,0,0,0,0,0,0
8510 data"{CBM-G}",0,12,74 ,106,74,12,0,0,27 ,69,0,0,0,0,0,0
8512 data"{CBM-+}",60,54,60,54,60,48,96,0,126,000,000,000,000,000,0,0
8514 data"{CBM-M}",0,224,178,230,178,224,0,0, 27,87,48,0,0,0,0,0
8516 data"{CBM-POUND}",999,168,0,0,0,0,0,0,0
8518 data"{SHIFT-POUND}",60,66,153,161,161,153,66,60,203 ,0,0,0,0,0,0,0
8520 data"{CBM-N}",0,28,150,220,150,28,0,0, 27 ,87,49,0,0,0,0,0
8522 data"{CBM-Q}",999, 244 ,0,0,0,0,0,0,0
8524 data"{CBM-D}",0,0,124,56,16,0,0,0, 32,0,0,0,0,0,0,0
8526 data"{CBM-Z}",999, 246 ,0,0,0,0,0,0,0
8528 data"{CBM-S}",999, 242 ,0,0,0,0,0,0,0
8530 data"{CBM-P}",12,26,24,44,24,88,48,0,64,0,000,000,000,000,0,0
8532 data"{CBM-A}",999, 240 ,0,0,0,0,0,0,0
8534 data"{CBM-E}",102,0,60,102,102,102,60,0,124,000,000,000,000,000,0,0
8536 data"{CBM-R}",102,60,102,102,102,102,60,0,92,000,000,000,000,000,0,0
8538 data"{CBM-W}",999, 249,0,0,0,0,0,0,0
8540 data"{CBM-H}",0,96 ,82 ,86 ,82 ,96,0,0, 27  ,70,0,0,0,0,0,0
8542 data"{CBM-J}",0,28,136,200,136,28,0,0, 27 ,52,0,0,0,0,0,0
8544 data"{CBM-L}",102,102,102,0,0,0,0,0,34,0,0,0,0,0,0,0
8546 data"{CBM-Y}",102,24,60,102,126,102,102,0,91,000,000,000,000,000,0,0
8548 data"{CBM-U}",102,0,102,102,102,102,59,0,125,000,000,000,000,000,0,0
8550 data"{CBM-O}",999,185,0,0,0,0,0,0,0
8552 data"{SHIFT-@}",999, 186 ,0,0,0,0,0,0,0
8554 data"{CBM-F}",0,16,48,112,48,16,0,0, 32  ,0,0,0,0,0,0,0
8556 data"{CBM-C}",0,18,146,210,146,12,0,0, 27 ,45,49,0,0,0,0,0
8558 data"{CBM-X}",999, 189 ,0,0,0,0,0,0,0
8560 data"{CBM-V}",0,144,146,150,146,96,0,0,27 ,45,48,0,0,0,0,0
8562 data"{CBM-B}",999, 191 ,0,0,0,0,0,0,0
8564 data"{SHIFT-*}",999, 241 ,0,0,0,0,0,0,0
Listing 4. Änderung für die Zeilen 8500 bis 9000
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →