C 64
Anwendung

Datei total

Database ist eine komfortable Dateiverwaltung für den C 64 mit einigen außergewöhnlichen Leistungsmerkmalen. Nahezu beliebige Datenfeld- und Datensatzlängen, Formatier- und Rechenfunktionen sind nur einige Stichworte. Ein Programm, das zu besitzen sich lohnt.

Ein Wort zu Anfang: Sie werden zu Database kein Listing in diesem Heft finden. Dies hat folgenden Grund: Das Programm besteht aus insgesamt elf Einzelprogrammen, die zusammen 25 (in Worten: fünfundzwanzig!) Seiten Listing ergeben würden. Wir waren der Meinung, daß dies zum Abtippen nicht zumutbar ist. Darum ist Database nur auf der Leserservice-Diskette zu diesem Heft erhältlich.

Das Programm besteht aus insgesamt drei Hauptteilen: Den beiden Ladeprogrammen, dem Teil »Neue Datei entwickeln« und dem Teil »Datenpflege«, die aus speicherplatztechnischen Gründen als Einzelprogramme vorliegen (ein vierter Teil, die sogenannten »Sonderfunktionen«, kann von Ihnen gegebenenfalls ergänzt werden. Dieses Zusatzprogramm muß nur zwei Bedingungen erfüllen: Es muß sich um ein Basic-Programm handeln und unter dem Namen »Soft« auf Diskette gespeichert sein.).

Wenn Sie LOAD "DBL",8,1 eingeben, wird das Lade-Programm eingeladen und automatisch gestartet. Innerhalb dieses Lade-Programms können Sie durch Drücken der entsprechenden Taste den von Ihnen gewünschten Programmteil laden und ebenfalls automatisch starten.

Entwicklung einer neuen Datei

Zunächst ein paar allgemeine Anmerkungen:
Die Hauptmenüs der beiden Programmteile »Neue Datei entwickeln« und »Datenpflege« bestehen aus jeweils zwei Seiten. Durch Drücken der »RETURN«-Taste kann auf die jeweils andere Seite umgeschalten werden. Zum Aufruf der einzelnen Untermenüs dienen die Funktionstasten »F1«- »F8«. Aus allen Untermenüs kommen Sie mit »SHIFT« + »RETURN« wieder ins Hauptmenü zurück. (Wenn Sie also einmal eine Programmfunktion aus Versehen aufgerufen haben, einfach »SHIFT« + »RETURN« drücken und Sie befinden sich wieder an der Aufrufstelle.) Mit Ausnahme der Definition der Eingabemaske einer Datei müssen alle Eingaben (zum Beispiel Dateinamen) mit »RETURN« abgeschlossen werden!

Sie sehen, die Bedienung von Database ist wirklich sehr einfach. Eine Übersicht über alle Programmfunktionen und deren Aufrufmöglichkeiten finden Sie übrigens in Bild 1.

Bild 1. Die Auswahl-Menüs. Von den grau unterlegten Punkten aus können Sie »Helpscreens« aufrufen.

Database ist eine Dateiverwaltung. Was das genau heißt, soll im folgenden kurz erläutert werden. Zunächst zum Begriff Datei. Eine Datei können Sie sich vorstellen als »elektronischen Karteikasten« mit vielen gleichartigen »Karteikarten«. Einer »Karteikarte« entspricht dabei ein sogenannter »Datensatz« der Datei. Jeder Datensatz unterteilt sich wiederum in verschiedene »Datenfelder«; den einzelnen Eintragungen auf der »Karteikarte«.

Eine Dateiverwaltung wie Database ist ein Programm, mit dem Sie beliebige Arten von Dateien verwalten können. Im Gegensatz zu zum Beispiel einer Adressenverwaltung, bei der über ein vorgegebenes Eingabeschema (zum Beispiel »Name«, »Vorname«, »Strasse«, »Wohnort«, etc.) eben nur Adressen eingegeben werden können, sind Sie bei Database in der Wahl des Eingabeschemas (der sogenannten »Eingabe-« oder »Dateimaske«) völlig frei, das heißt, Sie können die Bereiche (die sogenannten »Datenfelder«), in die später Daten eingegeben werden sollen, an beliebigen Positionen auf dem Bildschirm verteilen. Darüber hinaus kann sich die Eingabemaske überinsgesamt fünf (!) Bildschirmseiten erstrecken. Und natürlich können Sie das Ganze mit beliebigen Kommentaren und »Verzierungen« versehen. Dafür steht Ihnen der gesamte Zeichensatz des Computers zur Verfügung.

Bild 2. Diese Files werden bei der Arbeit mit Database auf der Diskette eingerichtet und verwaltet. Nähere Informationen in Bild 5.

Nachdem die Grundbegriffe geklärt sind, kommen wir zur Praxis: Um eine neue Datei zu entwickeln, müssen Sie Teil 1 von Database einladen (im Lademenü »F1« drücken). Über den Menüpunkt »Bildschirmmaske entwerfen« (siehe Bild 1) kommen Sie in die Eingabemaskendefinition. Der Cursor blinkt jetzt am Anfang der 2. Bildschirmzeile. Für die Entwicklung der Eingabemaske stehen Ihnen die 2. - 22. Bildschirmzeile (künftig »Dateiseite« genannt) zurVerfügung. In diesem Bereich kann der Cursor mit den üblichen Tasten frei bewegt werden. Wie schon gesagt, kann die Eingabemaske auf bis zu fünf Seiten verteilt werden. Dazu können Sie mit »F5« auf die jeweils nächste, mit »F7« auf die jeweils vorherige Seite »umschalten«. Mit »F8« kann durch Angabe der Nummer der gewünschten Seite und anschließendem »RETURN« eine Seite direkt aufgerufen werden (also zum Beispiel von Seite 1 auf Seite 5 umgeschalten werden). Zusätzlich zu diesen Befehlen gibt es noch eine Reihe weiterer Kommandos, die die Entwicklung der Eingabemaske komfortabler und leichter machen. Eine Zusammenfassung dieser Editorbefehle finden Sie in Bild 3.

Editor-Befehle:
HOME Cursor auf den Anfang der aktuellen Datenseite positionieren.
CLEAR Aktuelle Datenseite löschen. (Die Cursorposition verändert sich dabei nicht.)
RVS on Revers-Modus einschalten.
RVS off Revers-Modus ausschalten.
DELETE Bewirkt die von Basic gewohnte Delete-Funktion. (Zeilenweise!)
INSERT Bewirkt die von Basic gewohnte Insert-Funktion. (Zeilenweise! Die letzte Bildschirmspalte wird jeweils überschrieben.)
RETURN Positioniert den Cursor auf den Anfang der nächsten Zeile.
CTRL+1 Schaltet die Hintergrundfarbe um.
CTRL+2 Schaltet die Vordergrundfarbe um.
CTRL+3 Schaltet die Cursorfarbe um.
CTRL+C Mit diesem Kommando können Sie die Blinkfrequenz des Cursors verändern. Gleichzeitig wird dadurch aber auch die Tastaturabfragefrequenz geändert, das heißt, Sie können mit dieser Routine den Computer Ihrer individuellen Schreibgeschwindigkeit anpassen.
F6 Datenfeld einrichten. Nähere Informationen siehe Text.
F5 Eine Dateiseite vorblättern.
F7 Eine Dateiseite zurückblättern.
F8 Dateiseite direkt aufrufen.
F1 Die Zeile, in der sich der Cursor befindet, wird invertiert.
F3 Die Zeile, in der sich der` Cursor befindet, wird gelöscht.
F2 Die Zeile, in der sich der Cursor befindet, sowie aller darüber liegenden Dateizeilen werden um eine Zeile nach oben gescrollt.
F4 Die Zeile, in der sich der Cursor befindet, sowie alle darunter liegenden Dateizeilen werden um eine Zeile nach unten gescrollt.
SHIFT + RETURN Bewirkt Rückkehr ins Hauptmenü. (Die Dateimaske wird zwischengespeichert!.)
Die folgenden Kommandos haben bei den Helpscreens eine andere Bedeutung:
F5 Helpscreen speichern
F6 Helpscreen einladen
F7 Helpscreen umschalten/vertauschen
SHIFT + RETURN Rückkehr zur Aufrufstelle
F8 keine Bedeutung
Bild 3. Die bei der Maskendefinition und den Help-screens zur Verfügung stehenden Editorbefehle
Bild 3. Die bei der Maskendefinition und den Helpscreens zur Verfügung stehenden Editorbefehle

Im folgenden wird auf den wohl wichtigsten Befehl - nämlich den zur Definition eines Datenfeldes - ausführlich eingegangen.

a) Datenfeld einrichten

Wie schon erwähnt, kann ein Datenfeld an beliebiger Stelle innerhalb einer Dateiseite auf dem Bildschirm positioniert werden. Dazu müssen Sie als erstes den Cursor auf den gewünschten Feldanfang positionieren und danach die »F6«-Taste drücken. An der Position des Cursors erscheint jetzt das »kleiner«-Zeichen (<) zur Kennzeichnung des Feldanfangs.

Eine Stelle weiter wird der Feldtyp festgehalten. Insgesamt stehen fünf Typen zur Auswahl (nähere Informationen dazu etwas weiter unten):
T : Textfeld
S : Schlüsselfeld
D : Datumsfeld
N : numerisches Feld
E : Rechenfeld

Festlegen können Sie den Feldtyp ganz einfach dadurch, daß Sie die entsprechende Taste (also T, S, D, N oder E) drücken. Rechts neben dem Feldtyp befindet sich das »größer«-Zeichen (>) zur Kennzeichnung des Feldendes. Dieses Feldende können Sie mit »CRSR RIGHT« nach rechts und mit »CRSR LEFT« nach links verschieben. Die aktuelle Feldlänge wird dabei in der oberen Bildschirmzeile rechts angezeigt. Hat das Feld seine gewünschte Länge erreicht, drücken Sie »RETURN«. Das Feld ist nun eingerichtet.

b) Die Feldtypen:

  1. Der in der Regel wohl am meisten verwendete Feldtyp ist das Textfeld (T). Eingaben in ein solches Feld werden genau so übernommen, wie Sie sie eingeben, das heißt, am Feldinhalt werden keinerlei Veränderungen vorgenommen. Natürlich können in ein Textfeld Zahlen oder Texte und Zahlen gemischt eingegeben werden. Zur Feldlänge: Ein Textfeld kann sich maximal über eine gesamte Dateiseite erstrecken und hat dann eine Länge von immerhin 838 Byte!
  2. Zu jeder Datei gehört genau ein Schlüsselfeld (S) . Das Schlüsselfeld entspricht, was die Behandlung der eingegebenen Daten und die Feldlänge betrifft, dem Textfeld. In Bezug auf die Organisation des Datenbestandes einer Datei kommt ihm aber eine spezielle Bedeutung zu: Zu jeder von Ihnen definierten Datei wird eine Schlüssel- oder Indexdatei angelegt, die die Schlüssel, das heißt, die Inhalte des Schlüsselfeldes, und die Position aller Datensätze innerhalb der relativen Hauptdatei enthält. Über diese Schlüsseldatei, die später bei der Datenpflege immer vollständig in den Computer geladen wird, ist ein sehr schneller Zugriff auf jeden beliebigen Datensatz der Datei möglich.
    Um nun einerseits die Maximalanzahl der Datensätze möglichst groß und andererseits die Länge des Indexfeldes nach Möglichkeit beliebig zu halten, wird nicht der gesamte Inhalt des Schlüsselfeldes, sondern nur ein von Ihnen anzugebender Teil des Feldes als Datensatzschlüssel übernommen. Diese »Anzahl der relevanten Stellen des Schlüsselfeldes« wird bei der Übernahme der Eingabemaske (durch den Menüpunkt »Datei einrichten«) abgefragt. Ein Beispiel: Angenommen, Sie haben ein 50 Byte langes Schlüsselfeld definiert und geben als relevante Stellen »3« an, dann werden bei der Dateneingabe nur die ersten drei Zeichen des Schlüsselfeldes als Schlüssel übernommen.
  3. Das Datumsfeld (D) nimmt eine Sonderstellung ein. Es hat eine feste Länge von 13 Byte und dient - wie der Name schon sagt - zur komfortablen Eingabe eines Datums. Dieses muß in folgender Form eingegeben werden: »TT.MM.JJJJ« (zum Beispiel »01.11.1983«), Wird ein falsches Datum angegeben (zum Beispiel. »35.13.1980«), dann wird im hinteren Teil des Feldes die Meldung »/F!«ausgegeben. Ist das Datum korrekt, wird der zugehörige Wochentag berechnet und durch »/« getrennt hinter dem Datum ausgegeben.
  4. Das numerische Feld oder Zahlenfeld (N): Ein kleines Beispiel soll Sinn und Zweck dieses Feldtyps erläutern. Angenommen, Sie haben ein Feld, in das bis zu vierstellige Geldbeträge in der üblichen Form (also mit zwei Nachkommastellen) eingegeben werden sollen. Natürlich können Sie dieses Feld auch als Textfeld definieren. Wollen Sie aber sicherstellen, daß die eingegebenen (beziehungsweise gespeicherten) Zahlen auch tatsächlich das gewünschte Format (in diesem Fall also vier Vorkomma- und zwei Nachkommastellen) aufweisen, dann definieren Sie das Feld als Zahlenfeld und geben eine entsprechende Formatiervorschrift ein. Diese Vorschrift kann allerdings nicht direkt bei der Definition der Eingabemaske angegeben werden, sondern die Eingabe muß über den Menüpunkt »Datei einrichten« erfolgen (nähere Informationen dazu daher etwas weiter unten). Zunächst kommen wir zum letzten und wohl interessantesten Feldtyp, dem Rechenfeld.
  5. Das Rechenfeld (E): Dieser Feldtyp bietet Ihnen die Möglichkeit, Berechnungen innerhalb eines Datensatzes durchführen zu lassen, das heißt, es können beliebige Felder eines Datensatzes - egal ob Text-/Schlüssel-/Zahlen- oder selbst Rechenfeld - rechnerisch miteinander verknüpft werden. Das Ergebnis der Berechnung wird dann in dem entsprechenden Rechenfeld abgelegt. Auch hier muß die Eingabe der notwendigen Rechenvorschrift über den Menüpunkt »Datei einrichten« erfolgen. An dieser Stelle daher nur noch ein paar Worte zur Länge der Rechenfelder (und auch der Zahlenfelder): Weder bei den Rechen- noch bei den Zahlenfeldern wird die Länge der Felder kontrolliert. Natürlich sind aber nur Feldlängen (beziehungsweise Formatiervorschriften) sinnvoll, die innerhalb des Rechenbereichs beziehungsweise der Rechengenauigkeit des Computers liegen.

c) Datei (auf Diskette) einrichten:

Wenn Sie mit der Definition der Eingabemaske fertig sind, drücken Sie »SHIFT« + »RETURN« und - im Hauptmenü angekommen - die »F7«-Taste. Dadurch beginnt die »Übernahme» der Eingabemaske durch das Programm (die Datenfeldanfänge und -enden werden ermittelt, die Feldtypen festgestellt und so weiter) und die Einrichtung der Datei auf Diskette.

Haben Sie Rechen- oder Zahlenfelder definiert, dann werden Sie hier automatisch aufgefordert, die zugehörigen Vorschriften einzugeben. Das gerade bearbeitete Feld wird dabei durch revers dargestellte Feldbegrenzungen gekennzeichnet:

Zuerst müssen Sie die Formatiervorschriften für die Zahlenfelder und die Rechenfelder(!), die ja auch Zahlen als Ergebnis der durchgeführten Berechnungen enthalten, eingeben. Dazu setzen Sie einfach in den beiden im unteren Bildschirmbereich befindlichen, revers dargestellten Bildschirmzeilen den Punkt (».«) an die Stelle, an der er später im Zahlenfeld (beziehungsweise Rechenfeld) stehen soll. Die anderen Stellen können Sie - nur als Hilfe - mit irgendeinem anderen Zeichen auffüllen. Registriert wird auf jeden Fall nur der Punkt. Damit die so definierte Vorschrift übernommen wird, müssen Sie »RETURN« drücken. (Im weiter oben erwähnten Beispiel mit dem vierstelligen Geldbetrag sähe die Vorschrift also zum Beispiel so aus: »1111.11«.) Kommen auch negative Zahlen vor, muß für das Vorzeichen eine zusätzliche Vorkommastelle reserviert werden. (Im Beispiel: »11111.11«)

Nachdem Sie alle Formatiervorschriften auf diese Weise eingegeben haben, müssen Sie die Rechenvorschriften eingeben. Zur Erleichterung der Eingabe sind alle Datenfelder - am Bildschirm sichtbar - fortlaufend durchnumeriert. Außerdem kann mit »F5« (vorblättern) und »F7« (zurückblättern) die Dateimaske »durchgeblättert« werden. Das ist sehr nützlich, wenn Sie zum Beispiel eine dreiseitige »Karteikarte« entwickelt haben und in die Berechnung für ein Rechenfeld auf Seite 3 verschiedene Datenfelder der Seiten 1 und 2 einbeziehen wollen. Mit »F5« können Sie dann auf die Seite 1 beziehungsweise 2 umschalten, um so die laufende Nummer der betreffenden Felder zu ermitteln. In die Berechnung einbezogen wird ein Feld jetzt einfach durch Angabe von »F (Feldnummer)« (zum Beispiel F(1) für Feld 1, F(2) für Feld 2 und so weiter). Die Berechnungsformel wird - wie die Formatierungsvorschrift - in die beiden revers dargestellten Bildschirmzeilen im unteren Bildschirmbereich eingegeben und darf maximal 72 Byte lang sein. An Formelelementen sind alle von Basic gewohnten Rechenoperatoren und -funktionen zugelassen (also auch SQR, LOG, SIN und so weiter).
Zwei Beispiele:

F(1) + F(9) weist dem betreffenden Rechenfeld die Summe aus dem Inhalt von Feld 1 und Feld 9 zu.
F(2) + F(3)*F(17) weist dem betreffenden Rechenfeld den Inhalt des Feldes 2 + das Produkt aus Feld 3 und Feld 17 zu.

Natürlich kann es bei der Eingabe der Rechenvorschriften sehr leicht zu einer Fehleingabe kommen. Da diese in den allermeisten Fällen (bei der Datenpflege) zu einem Programmabbruch führt, werden Sie vom Programm vor der ersten Vorschriftseingabe gefragt, ob eine Syntaxkontrolle durchgeführt werden soll. Beantworten Sie die Frage mit »ja«, wird jede Eingabe auf korrekte Syntax untersucht und gegebenenfalls auf einen Fehler aufmerksam gemacht. Natürlich können aber von dieser Kontrollroutine nicht alle Fehler erkannt werden. Daher sollten Sie von vorneherein bei der Eingabe sehr sorgfältig sein und insbesondere auch auf mögliche Bereichsüberschreitungen (negative Zahlen bei Wurzeln, 0 bei der Division) achten, da es dadurch ebenfalls zu einem Programmabbruch kommt.

Nach Eingabe aller Formatier- und Rechenvorschriften sind noch einige Angaben erforderlich, bevor die Datei auf Diskette eingerichtet werden kann:

Zuerst werden Sie nach dem gewünschten Namen der Datei gefragt, der maximal 14 Zeichen lang sein darf. Beantworten Sie die nachfolgende Frage nach dem Zeichensatz mit »ja«, wird der im Computer befindliche (eventuell geänderte) Zeichensatz (nähere Informationen dazu weiter unten) unter dem Namen der Datei gespeichert und später (bei der »Datenpflege«) automatisch mit der Datei eingeladen. Beantworten Sie die Frage mit »nein«, werden Sie gefragt, ob Sie einen anderen Zeichensatz verwenden wollen, dessen Namen Sie gegebenenfalls eingeben müssen. Angenommen, Sie haben einen deutschen Zeichensatz entwickelt, den Sie in verschiedenen Dateien verwenden wollen. Dann wäre es natürlich wenig sinnvoll und würde unnötig Diskettenkapazität kosten, wenn der Zeichensatz zu jeder Datei extra gespeichert würde. Daher haben Sie die Möglichkeit, den Namen eines beliebigen, auf der Diskette gespeicherten Zeichensatzes anzugeben, der dann bei der »Datenpflege« ebenfalls automatisch mit der Datei geladen wird.

Zuletzt werden Sie nach der (bei der Besprechung des Schlüsselfeldes schon erwähnten) »Anzahl der relevanten Stellen des Schlüsselfeldes« gefragt. Nochmal zur Erinnerung: Später bei der Dateneingabe werden nur soviel Stellen des Schlüsselfeldes als Schlüssel übernommen, wie Sie hier angeben. Die kleinste Anzahl ist dabei 1, die größte 30, wobei zu beachten ist: Je kleiner Sie die Schlüssel wählen, desto mehr Datensätze können Sie in einer Datei unterbringen! Die Maximalanzahl MD der Datensätze errechnet sich nach folgender Formel: MD=INT(2250/(AS+3)); wobei AS die Länge der Schlüssel ist. Bei einer Schlüssellänge von drei Byte, was bei einer Adreßdatei mit dem Nachnamen als Schlüsselfeld vollauf genügt, können Sie also immerhin 375 Datensätze in der betreffenden Datei unterbringen. Im übrigen ist es unerheblich, wenn ein Schlüssel in einer Datei mehrfach vorkommt. Bei der Datenausgabe wird darauf durch eine entsprechende Meldung hingewiesen.

Nach dieser letzten Information dauert es geraume Zeit, bis die Datei auf Diskette eingerichtet ist. Am Ende kehrt das Programm wieder ins Hauptmenü zurück. Zuvor wird allerdings gefragt, ob Sie mit der Dateimaske weiterarbeiten wollen. Antworten Sie mit »ja«, bleibt die Eingabemaske im Computer erhalten und kann für die Entwicklung weiterer Daten benutzt werden. Bei einem »nein« wird der Eingabemaskenspeicher im Rechner gelöscht.

Um das bisher Gesagte zu verdeutlichen, soll an einem praktischen Beispiel - einer kleinen Rechnungsverwaltung - die Entwicklung einer Datei demonstriert werden. Sehen Sie sich dazu bitte Bild 4 an: Links oben sehen Sie die Eingabemaske so, wie Sie sie bei der Definition eingeben müssen. Dabei dürfte es wohl keine Schwierigkeiten geben. Als Schlüsselfeld wurde das Feld »Lieferant« gewählt. Die Felder »Artikelnummer« (Art.Nr.), »Einzelpreis« (EP) und »Anzahl« (ANZ) sind numerische Felder. Bei den Feldern »Gesamtpreis« (GP), »Gesamtsumme«, »Mehrwertsteuer« und »Rechnungsbetrag« handelt es sich um Rechenfelder. Das »Telefon«-Feld wurde, da es auch nichtnumerische Zeichen enthält (»/« beziehungsweise»—« zur Abtrennung der Vorwahl), nicht als numerisches, sondern als Textfeld definiert.

Haben Sie die Dateimaske komplett eingegeben, dann drücken Sie bitte »SHIFT« + »RETURN« und anschließend »F7«. Nach kurzer Zeit erscheint die Eingabemaske in der Form, wie Sie sie in Bild 4 rechts oben sehen. Alle Datenfelder sind fortlaufend durchnummeriert. (Bei Feldern mit einer Länge kleiner als fünf Zeichen - in diesem Fall die »Anzahl«-Felder - ist die Numerierung aus Platzgründen nicht auf dem Bildschirm sichtbar.)

Als erstes müssen Sie jetzt die folgenden Formatvorschriften eingeben. (Die Feldgrenzen des gerade bearbeiteten Feldes werden revers dargestellt. Nach jeder Formateingabe müssen Sie RETURN drücken!):

Feld 3:1111(die »1« dient wie gesagt nur als »Füllzeichen. Dazu können Sie auch jedes andere Zeichen verwenden. Entscheidend ist, an welcher Stelle der Punkt (».«) steht)
Feld 6:111111
Feld 7:111.11
Feld 8:11
Feld 9:111.11
Feld 10:111111
Feld 11:111.11
Feld 12:11
Feld 13:111.11
Feld 14:111111
Feld 15:111.11
Feld 16:11
Feld 17:111.11
Feld 18:1111.11
Feld 19:111.11
Feld 20:1111.11

Die anschließende Frage betreffend der Syntaxkontrolle beantworten Sie sicherheitshalber mit »ja«. Danach geben Sie die folgenden Rechenvorschriften ein:
- Feld 9: F(7)*F(8)
- Feld 13: F(11)*F(12)
- Feld 17: F(15)*F(16)
- Feld 18: F(9) + F(13) + F(17)
- Feld 19: 0.14*F(18)
- Feld 20: F(18) + F(19)

Als Namen der Datei geben Sie schließlich «rechnungen« ein. Die beiden Fragen nach dem Zeichensatz beantworten Sie mit »nein«. Bei der »Anzahl der relevanten Stellen des Schlüsselfeldes« dürften »5« genügen. Damit sind alle notwendigen Informationen eingegeben; die Datei wird auf Dis- f kette eingerichtet.

d) Änderungsmöglichkeiten:

Zunächst zu den Änderungsmöglichkeiten während der Dateimaskendefinition beziehungsweise bei einer Datei, in die noch keine Daten eingegeben wurden. (Eine auf Diskette eingerichtete Datei können Sie übrigens über den Menüpunkt »Datei einladen« (siehe Bild 1) in den Computer laden, um Änderungen an der Eingabemaske vorzunehmen):

An den Datenfeldern können grundsätzlich beliebige Änderungen vorgenommen werden (an den Kommentaren und Bemerkungen natürlich auch). Es können also ohne weiteres Datenfelder gelöscht, verkleinert (mit »DELETE«) oder vergrößert werden (mit »INSERT«), Auch der Feldtyp kann einfach durch Überschreiben des ursprünglichen Codes mit der neuen Kennzeichnung geändert werden. (Wenn Sie zum Beispiel aus einem Textfeld ein Zahlenfeld machen wollen, müssen Sie nur das »T« durch ein »N« ersetzen.) Wichtig ist nur, daß die einzelnen Datenfelder (bis auf die erste Stelle, die ja den Feldtyp-Code enthält) vollständig mit dem bei der Einrichtung der Felder erzeugten Füllzeichen (CHR$(166)); entspricht »COMMODORE« + »+«) aufgefüllt sind! Ist das nämlich nicht der Fall, dann wird das betreffende Feld bei der Übernahme der Eingabemaske vom Programm nicht erkannt.

Wenn Sie zum Beispiel bei der Übernahme der Eingabemaske durch die Routine »Datei einrichten« (während der Eingabe der Formatier- und Rechenvorschriften) einen Fehler in der Eingabemaske entdecken, können Sie die Übernahme mit »SHIFT« + »RETURN« abbrechen und anschließend mit »F1« wieder in die Eingabemaskendefinition gelangen.

Eine gerade in Arbeit befindliche Eingabemaske kann über den Menüpunkt »Dateimaske abspeichern« (siehe Bild 1) auf Diskette unter einem frei wählbaren Namen zwischengespeichert werden, um dann zu einem späteren Zeitpunkt über den Menüpunkt »Dateimaske einladen« (siehe Bild 1) wieder in den C 64 geladen zu werden. Dadurch ist es möglich, die Entwicklung einer Datei abzubrechen, ohne später bei der Weiterarbeit die Eingabemaske (beziehungsweise den Teil der bereits definiert wurde) noch einmal neu eingeben zu müssen.

Bei einer Datei, in die bereits Daten eingegeben wurden, sind die Änderungsmöglichkeiten schon geringer.

Bei den Kommentaren und Bemerkungen gibt es keine Probleme. Hier können beliebige Änderungen vorgenommen werden. Auch die Positionen der Datenfelder können verändert werden. Dabei ist allerdings darauf zu achten, daß erstens die Reihenfolge der Datenfelder nicht verändert wird und zweitens die Länge der einzelnen Datenfelder nicht geändert wird, das heißt, die Felder weder verkleinert noch vergrößert werden.

e) Änderung des Zeichensatzes:

Über den Menüpunkt »Zeichensatz ändern« gelangen Sie in die Zeichensatzänderungsroutine.
Dabei gehen Sie folgendermaßen vor:

(Hinweis: Um zu verhindern, daß der Aufbau der Menüs zerstört wird, ist die Zeichensatzänderung nur im Bereich der Dateimaske und des Helpscreens 2 wirksam.)

Mit »SHIFT« + »RETURN« können Sie jederzeit in das Hauptmenü zurückkehren.

Noch ein Tip: Wollen Sie größere Änderungen am Zeichensatz vornehmen, ist es wohl am sinnvollsten, wenn Sie die gewünschten Matrizen zuerst auf einem entsprechend gerasterten Blatt Papier entwerfen und sie danach auf den Bildschirm übertragen. Die Zahlen um das Matrixfeld auf dem Bildschirm sind Ihnen dabei behilflich.

f) Änderung der Tastaturbelegung:

Über den Menüpunkt »Tastaturbelegung ändern« gelangen Sie in die Tastaturänderungsroutine. Dieses Programmodul stellt an sich nur eine Erweiterung der Zeichensatzänderung dar, das heißt, tatsächlich wird nicht die Belegung der Tastatur geändert, sondern nur die Zeichenmatrizen entsprechend ausgetauscht.

Haben Sie »F5« gedrückt, gelangen Sie in ein weiteres Auswahlmenü:

Bevor Sie die entsprechenden Tasten drücken, müssen Sie, wie bei der Zeichensatzänderung, den gewünschten Schriftmodus einstellen.

Wichtig: Die Belegung einer Taste wird immer nur in dem eingestellten Schriftmodus geändert, das heißt, wenn Sie zum Beispiel den Groß-/Kleinschriftmodus und »RVS off« einstellen und danach die Tasten »Y« und »Z« vertauschen, ist diese Änderung im Graphikmodus und bei »RVS on« nicht wirksam! Genauso müssen auch die »geSHIFTeten« Tasten extra geändert werden!

Auf den ersten Blick wirkt dies vielleicht etwas umständlich. Andererseits eröffnen sich dadurch aber wesentlich mehr Möglichkeiten der Veränderung. So können Sie zum Beispiel - auch in Verbindung mit der »Zeichensatzänderung« - aus einem Zeichensatz praktisch zwei machen, indem Sie zum Beispiel im Groß-/Kleinschriftmodus den normalen Zeichensatz beibehalten und im Graphikmodus einen entsprechenden griechischen Zeichensatz entwickeln. Zwischen diesen beiden Zeichensätzen können Sie dann einfach mit »COMMODORE« 4- »SHIFT« umschalten! Mit »SHIFT« + »RETURN« können Sie jederzeit in das Hauptmenü zurückkehren.

Dateneingabe

Um Daten in eine Datei eingeben zu können, müssen Sie Teil 2 von Database einladen. (Im Lademenü »F3« drücken.)

Für jede Diskette, auf der sich Daten befinden, führt Database ein Inhaltsverzeichnis, das »Datei-Directory«. Dieses wird auf der Diskette als sequentielles File gespeichert. Neben den Namen der einzelnen Dateien enthält es auch Angaben über die Anzahl der Dateiseiten und die aktuelle Anzahl der Datensätze einer Datei. Bei der Definition einer neuen Datei wird das Datei-Directory automatisch aktualisiert beziehungsweise - wenn noch nicht vorhanden - automatisch angelegt. Auch bei der Datenpflege wird es ständig auf dem neuesten Stand gehalten. Über den Menüpunkt »Datei-Directory« (siehe Bild 1) und durch anschließendes Drücken der »F2«-Taste kann das Datei-Directory angezeigt werden.

Darüber hinaus können Sie mit »F3« eine Datei löschen, mit »F5« eine Datei umbenennen und mit »SHIFT« + »RETURN« ins Hauptmenü zurückkehren.

Doch zurück zur Dateneingabe: Um eine Datei zur Datenpflege in den Computer zu laden, gibt es zwei Möglichkeiten: Entweder, Sie drücken im Dateidirectorymodul »F1« oder im Hauptmenü »F3«. In beiden Fällen müssen Sie den vollständigen Namen der gewünschten Datei eingeben und anschließend »RETURN« drücken. (Übrigens: Der Name der gerade im Rechner befindlichen Datei wird bei der Ausgabe des Dateidirectorys revers dargestellt!)

Nach Beendigung des Ladevorgangs ist die Datei zur Datenpflege bereit. Über das Hauptmenü kann jetzt beliebig zwischen den einzelnen Programmfunktionen umgeschaltet werden. Sie können also zum Beispiel zuerst neue Daten eingeben, danach in die Datenausgaberoutine verzweigen, und so weiter.

Über den Menüpunkt »Daten eingeben« (siehe Bild 1) können Sie jetzt mit der Dateneingabe beginnen. In diesem Zusammenhang gleich noch ein wichtiger Hinweis: Wenn Sie am Datenbestand einer Datei Änderungen vornehmen (also insbesondere neue Daten eingeben, aber auch Datensätze löschen oder ändern), ist davon natürlich auch die Schlüsseldatei, die sich ja im Speicher befindet, betroffen. Am Ende der Dateiarbeit muß diese daher über den Menüpunkt »Datei speichern« (siehe Bild 1) auf die Diskette zurückgeschrieben werden - mit einer Einschränkung: Wenn Sie eine neue Datei einladen, die sich auf derselben Diskette wie die vorherige befindet, wird die alte Datei (vor dem Laden der neuen) automatisch auf die Diskette zurückgeschrieben.

Auch beim Dateidirectory ist Vorsicht geboten:

Durch das Einladen des Dateidirectorys wird eine eventuell im Computer befindliche Datei gelöscht!

Nach diesen Vorbemerkungen einige konkrete Hinweise zur Dateneingabe: Nachdem Sie im Hauptmenü »F5« gedrückt haben, wird die erste Dateiseite auf dem Bildschirm ausgegeben und der Cursor blinkt am Anfang des ersten Datenfeldes. Nun können Sie mit der Dateneingabe beginnen. Alle Datenfelder sind zur besseren Kennzeichnung mit dem schon von der Datenfelddefinition bekannten Füllzeichen (CHR$(166)) aufgefüllt. Der Cursor kann jetzt nur noch innerhalb der Datenfelder bewegt werden.

Ähnlich wie bei der Dateimaskendefinition steht Ihnen bei der Dateneingabe ein komfortabler Editor zur Verfügung. Um aber einen der im nachfolgenden beschriebenen Befehle aufrufen zu können, müssen Sie zuerst die »F1«-Taste drücken! Daraufhin beginnt der Schriftzug »F1« in der drittuntersten Bildschirmzeile ganz rechts zu blinken. Jetzt können Sie die gewünschte Funktion aufrufen. Nach deren Ausführung können Sie mit der Dateneingabe fortfahren. Haben Sie die »F1«-Taste unbeabsichtigt gedrückt, kommen Sie mit »SHIFT« + »RETURN« in die Eingaberoutine zurück.

Die Befehle im einzelnen (Eine Zusammenfassung finden Sie in Tabelle 3):

Datenausgabe

Über den Menüpunkt »Daten ausgeben« (siehe Bild 1) gelangen Sie in einen der wichtigsten Programmpunkte eines jeden Datenverarbeitungsprogramms: der Datenausgabe. Die Datenausgabemöglichkeiten von Database sind sehr vielfältig. Im wesentlichen lassen sich drei Bereiche unterscheiden:

Wenn Sie im Hauptmenü »F7« drücken, wird zunächst wieder die erste Dateiseite auf dem Bildschirm ausgegeben. Jetzt können Sie durch Drücken der entsprechenden Taste die gewünschte Funktion aufrufen:

a) Die Ausgabe über Schlüssel:

Dazu drücken Sie die »l«-Taste. Jetzt werden die Datenfelder gelöscht, die Dateiseite, auf der sich das Schlüsselfeld befindet, ausgegeben und der Cursor auf das Schlüsselfeld positioniert Nachdem Sie den Schlüssel mit abschließendem »RETURN« eingegeben haben, wird er in der Indexdatei gesucht und - sofern vorhanden - der zugehörige Datensatz in den Rechner geladen und auf dem Bildschirm ausgegeben. Gehören zu einem Schlüssel mehrere Datensätze, dann werden Sie darauf durch die Meldung »Weitere Datensätze vorhanden!« hingewiesen. Wenn Sie daraufhin nochmals »I« drücken und die nachfolgende Frage mit »ja« beantworten, wird der nächste Datensatz (mit demselben Schlüssel) ausgegeben.

Haben Sie die »l«-Taste nur versehentlich gedrückt, können Sie die Routine mit »SHIFT« + »RETURN« verlassen.

b) »Durchblättern« der Datei:

Hier bietet sich wieder der Vergleich einer Datei mit einem Karteikasten an. Mit den folgenden Kommandos ist es nämlich möglich, eine Datei wie einen Karteikasten »durchzublättern«. Die Kommandos beziehen sich dabei auf die Indexdatei beziehungsweise auf die in ihr gespeicherten Schlüssel der einzelnen Datensätze. Wenn also zum Beispiel von einem »ersten Datensatz« die Rede ist, dann handelt es sich dabei um den Datensatz, dessen Schlüssel als erster in der Indexdatei gespeichert ist. Verbunden mit der Tatsache, daß die Schlüssel in der Indexdatei alphabetisch einsortiert sind, ergibt sich daraus die Möglichkeit, eine Datei in alphabetischer Reihenfolge durchzublättern.
Die Befehle im einzelnen:

c) Die Selektion über eine frei wählbare Ausgabemaske:

Mit dieser Routine, die mit »F« aufgerufen wird, steht Ihnen ein vielseitiges Instrument zur Auswahl (Selektion) von Datensätzen zur Verfügung. Die Grundidee ist dabei folgende: Sie geben in die Datenfelder eine sogenannte Selektionsmaske (das heißt Vergleichsdaten) ein, die dann mit jedem Datensatz der Datei verglichen wird. Entspricht ein Datensatz der Maske, wird er in den Speicher geladen. Ansonsten wird der nächste Datensatz verglichen.

Bevor mit der Selektion begonnen werden kann, müssen Sie also zuerst eine Auswahlmaske eingeben. Die grundlegende Vorgehensweise ist dabei dieselbe wie bei der Dateneingabe! Mit Ausnahme der Routinen zur Datensatzspeicherung und zur Änderung der Bildschirmfarben stehen deshalb dieselben Routinen wie bei der Dateneingabe zur Verfügung. (Eine Aufstellung finden Sie in Tabelle 4 unten.)

Eine Aufstellung aller bei der Datenausgabe zur Verfügung stehenden Kommandos finden Sie in Tabelle 4.

Helpscreens

Diese sogenannten »Hilfsbildschirme« stellen eine wertvolle Hilfe sowohl für die Arbeit mit dem Programm selbst als auch für die Arbeit mit den einzelnen Dateien dar. Hier können Sie zum Beispiel wichtige Hinweise zu einzelnen Kommandos des Programms ablegen, auf Diskette speichern und dann bei Bedarf wieder in den C 64 laden. Wie Sie in Bild 1 sehen können, ist es möglich, die Helpscreens auch bei der Datenein- und Datenausgabe aufzurufen, das heißt Sie können bei der Datenpflege jederzeit auf die Helpscreens zurückgreifen!

Insgesamt stehen zwei Helpscreens zur Verfügung, die einfach durch Drücken der »CTRL« + »H«-Taste aufgerufen werden. Zur Erläuterung: Database verwendet zwei Bildschirme. Auf dem einen, der vor allem zur Ausgabe der Hauptmenüs und für die Sonderfunktionen benützt wird, wird der normale Zeichensatz des C 64 verwendet. (Wenn Sie also zum Beispiel vom Hauptmenü die Helpscreens aufrufen, wird Helpscreen 1 ausgegeben.) Auf dem anderen, der zur Ausgabe der Dateimaske dient, wird der eventuell vom Benutzer geänderte Zeichensatz verwendet (und bei einem Helpscreenaufruf entsprechend Helpscreen 2 ausgegeben). Bis auf die verschiedenen Zeichensätze sind die beiden Helpscreens aber völlig gleichwertig.

Für die Eingabe stehen Ihnen die 2.-22. Bildschirmzeile zur Verfügung. Die möglichen Kommandos sind dabei im wesentlichen dieselben - bis auf die dateispezifischen - wie bei der Dateimaskendefinition. (Siehe Bild 3.) Dazu kommen die vier folgenden Kommandos:

Abschließend noch einige Hinweise für diejenigen, die sich mit dem Programm(aufbau) näher befassen wollen:

Hinweis:
Damit das Programm compilierfähig wurde, waren umfangreiche Änderungen notwendig. Dadurch wurde das (uncompilierte) Programm an manchen Stellen etwas langsamer, vor allem aber um einiges länger! Daher müssen Sie im zweiten Programmteil (DBII BASIC) in der uncompilierten Version auf eine Programmfunktion, nämlich die Helpscreens, verzichten. Die Leserservice-Diskette enthält auch das compilierte Programm (DBII). In diesem ist die Helpscreen-Funktion verfügbar!

(Martin Hecht/tr)
2 Zwischenspeicher für diverse Zwecke
251 - 254 Zwischenspeicher für diverse Zwecke
1024 - 2047 Video-RAM (Bildschirm 1)
2048 - 40148 Basic-Speicher
40149 - 40247 MP zur Berechnung der Datenfeldpositionen
40248 - 40959 Bildschirmmaskengenerator I
40960 - 45159 Zwischenspeicher für Dateimaske
50176 - 51175 Video-RAM (Bildschirm 2)
51176 - 52565 diverse Hilfsprogramme
52566 - 52573 Zwischenspeicher für Helpscreens (Farben)
52574 - 52833 Eingaberoutine für Helpscreens und Dateimaskendefinition
52834 - 53027 MP für scrolling nach oben
53028 - 53223 MP für scrolling nach unten
57344 - 61439 Zeichengenerator II
61440 - 62283 Zwischenspeicher für Helpscreen 1
62284 - 63127 Zwischenspeicher für Helpscreen 2
Tabelle 1. Die Speicherbelegung durch DBI (Teil 1: Neue Datei entwickeln)
2 - 2047 entspricht Tabelle 1
2048 - 39484 Basic-Speicher
39485 - 40959 Bildschirmmaskengenerator II
40960 - 45159 Zwischenspeicher für Dateimaske
45160 - 49359 Zwischenspeicher für Selektionsmaske
49360 - 49459 Rechengenerator (erzeugt aus String eine Basic-Zeile)
49460 - 49700 Indexdatei-Verwaltung
49701 - 49703 Zwischenspeicher (für Indexdateiverwaltung)
49704 - 49786 Stringvergleich-Routine
49787 - 49869 BSC/ASC-Wandler
51176 - 63127 entspricht Tabelle 1
63128 - 65535 Indexdatei 2
Tabelle 2. Die Speicherbelegung durch DBIi (Teil 2: Datenpflege)
Dateneingabe:
RETURN auf Anfang des nächsten Feldes positionieren (wenn aktuelles Feld Rechen- oder Zahlenfeld ist, wird die Vorschrift ausgeführt!)
SHIFT + RETURN Rückkehr zum Hauptmenü
F5 vorblättern
F7 zurückblättern
F8 Seitendirektaufruf
HOME auf Anfang des ersten Feldes positionieren
SHIFT + HOME alle Datenfelder löschen
CTRL + 1 Hintergrundfarbe ändern
CTRL + 2 Vordergrundfarbe ändern
CTRL + 3 Cursorfarbe ändern
L aktuelles Datenfeld löschen
V Rechen-/Formatiervorschriften für alle betroffenen Felder ausführen
S: Datensatz speichern
CTRL + C Cursorblinkfrequenz ändern
Tabelle 3. Die bei der Dateneingabe zur Verfügung stehenden Funktionen
Datenausgabe:
I Ausgabe über Schlüssel
F Ausgabe über freie Selektion
E ersten Datensatz einladen
F letzten Datensatz einladen
N nächsten Datensatz einladen
V vorherigen Datensatz einladen
D Datensatz löschen
R Datensatz ersetzen
A Datensatz hinzufügen
Weitere Funktionen (Erläuterung in Tabelle 3):
F5, F7, F8, CTRL+1/2/3, SH+R
Zusatzfunktionen bei »freier Selektion«:
K mit Selektion beginnen
M Verknüpfungsroutine aufrufen
F1 <
F2 <=
F3 >
F4 >=
F5 "
F6 o
F7 n
außerdem (Bedeutung in Tabelle 3):
RT, SH + RT, F5, F7, F8, HOME, SH + HOME, L, V, CTRL + C
Tabelle 4. Die bei der Datenausgabe zur Verfügung stehenden Funktionen.
Variablenliste für Database/I:
FF Zwischenspeicher für Farbwerte (im Farbcode)
MF%(1) Hintergrundfarbe (Hauptmenü)
MF%(2) Vordergrundfarbe (Hauptmenü)
MF%(3) Cursorfarbe (Hauptmenü)
ME Nummer des aktuellen Hauptmenüs
HP Nummer des aktuellen Helpscreens
UG Flag für erfolgten Unterprogrammaufruf
SP Cursorspalte
ZE Cursorzeile
ME$(.,.) enthält Strings für Hauptmenüausgabe
C1 Zwischenspeicher für Cursorspalte
C2 Zwischenspeicher für Cursorzeile
FC%(..) Funktionscodes (ASC-Werte der entsprechenden Tasten) für Kommandoaufruf
FM Anzahl der Funktionen (dto.)
BA(1) Bildschirmspeicheranfangsadresse von Bildschirm 1 (1024)
BA(2) Bildschirmspeicheranfangsadresse von Bildschirm 2 (50176)
PG aktuelle Dateiseite (der Bildschirmmaske)
F1(..) Hintergrundfarbe der einzelnen Dateiseiten
F2(..) Vordergrundfarbe der einzelnen Dateiseiten
F3(..) Cursorfarbe der einzelnen Dateiseiten
KS$(..) enthält diverse Strings (für Ausgabe und andere Zwecke)
GZ Länge der Eingabe (bei !GET-Befehl)
CB Zwischenspeicher für Cursorblinkfrequenz
CP aktuelle Cursorposition (im Bildschirmspeicher)
GR Flag für Schriftmodus der Dateimaske
AP%(.,.) Anfangs- und Endadresse der einzelnen Dateiseiten im Zwischenspeicher (Low-Byte/High-Byte)
FS%(..) Flag für erfolgten Seitenaufruf bei Dateimaskendefinition
SM Flag für Schriftmodus (bei UP Zeichensatzänderung)
RV Flag für RVS on/off (bei UP Zeichensatzänderung)
UD Flag für Bedingungsabfrage (bei UP Zeichensatzänderung)
ZF%(1) Hintergrundfarbe (UP: Zeichensatzänderung)
ZF%(2) Vordergrundfarbe (UP: Zeichensatzänderung)
ZF%(3) Cursorfarbe (UP: Zeichensatzänderung)
TA%(1) Hintergrundfarbe (UP: Tastaturänderung)
TA%(2) Vordergrundfarbe (UP: Tastaturänderung)
TA%(3) Cursorfarbe (UP: Tastaturänderung)
P2(..) Zwischenspeicher für Zeichenmatrix
SE enthält Anzahl der Dateiseiten
ZG Flag für Zeichensatzabspeicherung
HZ Zwischenspeicher für Nummer des aufgerufenen Helpscreens
PH(..) Anfangsadresse der Zwischenspeicher der Farb-/Schriftmoduswerte (für Helpscreens)
HP%(.,.) Anfangs- und Endadressen der Zwischenspeicher für Helpscreens
DR enthält Speicherkonfiguration (für diverse Zwecke)
BR%(..) Zwischenspeicher für Bildschirmumschaltung
FE Fehlernummer (Floppymeldung)
FE$ Fehlertext (Floppymeldung)
C$ enthält CHR$(145)
C3 Zwischenspeicher für Cursorpositionszähler (HB)
C4 Zwischenspeicher für Cursorpositionszähler (LB)
RS RVS-Flag für Bildschirmmaskendefinition
HR RVS-Flag für Helpscreens
AF Zähler für Felder/Gesamtzahl der Felder (einer Datei)
FV Flag für »Feld vorhanden«
S Flag für »Schlüsselfeld vorhanden«
N Flag für »numerisches Feld vorhanden«
EF Flag für »Ergebnisfeld vorhanden«
AM Maximalzahl der Felder
FD(.,.) Feldpositionen (Anfang/Ende)
FA%(..) Flag für Feldarten
AF%(..) Anzahl der Felder je Seite
FO$(..) Formatvorschriften für numerische Felder
RO$(..) Rechenvorschriften für Ergebnisfelder
ZG$(..) Name des Zeichengenerators
AS Anzahl der relevanten Stellen des Schlüsselfeldes
S3 Anzahl der Formatvorschriften
S5 Anzahl der Rechenvorschriften
D$ enthält Dateiname
DL Datensatzlänge
DA$ Dateiname (für Ausgabe)
SF Seite, auf der sich das Schlüsselfeld befindet
NN Feldnummer des Schlüsselfeldes
ES erste Seite der Dateimaske, auf der sich ein Feld befindet
FO%(.) enthält laufende Nummer der Formatierfelder
RO%(.) enthält laufende Nummer der Ergebnisfelder
MT Maximalzahl der Datensätze einer Datei
PT Anfangsadresse des Bildschirmmaskengenerators
DD$(..) Dateinamen (Datei-Directory)
SN%(..) Anzahl der Seiten einer Datei (Datei-Directory)
DS%(..) Anzahl der Datensätze einer Datei (Datei-Directory)
AD Anzahl der Dateien
DP Flag für Datei-Directory abspeichern
SY Flag für Syntaxkontrolle durchführen (bei Rechenvorschriftseingabe)
Speicher für diverse Zwecke:
E, EG$, EG, K, S1, AG$, S2, RV$, I$, H$, H1$, H2$, H, H1, H2, H3, H4, H5, S6, S4, H3$, ZP, G1, G2, P1(..), SZ, SC, A1, Z$, Z, L1, L2, P1, P2, P3, A2, T5, T1, T2, T4, T1$, ZW$, S, S7, ZF, A3, A4, S6$, LB(..), HB(..)
Tabelle 5. Die im Teil »Neue Datei entwickeln« verwendeten Variablen
Zur Speicherung auf Diskette:
Alle Dateinamen werden jeweils auf 14 Zeichen Länge aufgefüllt. Die letzten beiden Stellen (also die 15. und 16. Position) dienen zur Kennzeichnung des File-Typs. Zusätzlich zu den in Bild 2 aufgeführten Bezeichnungen (.D/.E/.I/.S/.R) werden noch folgende Abkürzungen verwendet:
.U Dieses File (PRG) enthält eine Dateimaske, die keiner Datei zugeordnet ist.
.M Dieses File (SEQ) enthält Informationen (Farben/Schriftmodus) über eine mit ».U« gekennzeichnete Dateimaske.
.Z Dieses File enthält einen (abgeänderten) Zeichensatz. (PRG)
.H Dieses File enthält einen Helpscreen. (PRG)
Floppy-File-Typen:
PRG : Maschinenprogramm-File
SEQ : sequentielles File
REL : relatives File)
Bild 5. Informationen über die erzeugten Files
Variablenliste für Database/II:
NN erste Datei der als nächstes auszugebenden Seite des Datei-Directorys
SI laufende Nummer (in bezug auf Datei-Directory) der im Computer befindlichen Datei
RV RVS-Flag
P Flag für Bildschirmadresse
DD Flag für »Datei-Directory eingeladen«
DF%(1) Hintergrundfarbe (Datei-Directory)
DF%(2) Vordergrundfarbe (Datei-Directory)
DF%(3) Cursorfarbe (Datei-Directory)
DR Schriftmodusflag für Datei-Directory
DM Nummer der auszugebenden Bildschirmmaske (für Menüs)
NF aktuelle Feldnummer
AF Anzahl der Felder (gesamt)
LL aktuelle Feldnummer (in bezug auf einzelne Seite)
FD(.,1) enthält Datenfeldanfänge
FD(.,2) enthält Länge der Datenfelder
F1%(..) Hintergrundfarbe (Dateimaske)
F2%(..) Vordergrundfarbe (Dateimaske)
F3%(..) Cursorfarbe (Dateimaske)
R(..) enthält Ergebnisse der Berechnungen für Rechenfelder
AT Anzahl der Datensätze einer Datei
F(..) enthält Zahlenwerte der Datenfelder
EA Endadresse +1 der Indexdatei 2
GF Anzahl der gelöschten (und noch nicht wieder besetzten Datensätze einer Datei)
NP(1) nächster verfügbarer Record zum Schreiben (Low)
NP(2) nächster verfügbarer Record zum Schreiben (High)
NP(3) nächster verfügbarer Record zum Schreiben (Position innerhalb Record)
PO(1) Aktueller Record (Low)
PO(2) Aktueller Record (High)
PO(3) Aktueller Record (Position innerhalb Record)
I1 Startadresse des Speichers für Länge der Datei (Indexdatei 2)
I2 Startadresse des Speichers für Position gelöschter Records
I3 Startadresse des Speichers für Indexe und Recordpositionen
NS Nummer des Schlüsselfeldes
SL,SH Zwischenspeicher für Datensatznummer
T3 aktuelle Datensatznummer
DC Flag für »Datensatz im Computer«
R1$/R2$ »Überlaufstrings« für Datensatzspeicherung auf Diskette (enthält »Rest« des ersten beziehungsweise letzten Records)
OP(..) Zwischenspeicher für Recordzeiger
I4 Zeiger auf Selektionsmaske
VZ%(..) Feld für Verknüpfungsflags (bei freier Selektion)
Weitere Variablen (Bedeutung siehe Tabelle 5):
FF, MF(1), MF(2), MF(3), ME, PT, HP, UG, KS$(..), ME$(.,.), FC%(..), ZE, SP, FE, C$, L$, AD, DD$(..), SN(..), DS(..), GZ, GR, AF%(.), BR%(.), RO%(.), SE, PG, ES, S5, FO%(..), RO$(..), FO$(..), MT, AP%(.,.), HP%(.,.), FM, S3, DL, SF, ZG$, AS, FE$, HZ, C1, C2, C3, C4, HR, PH(..), RS, CB.
Speicher für diverse Zwecke: siehe Tabelle 5.
Tabelle 6. Variablen im Teil »Datenpflege«
MP-P-2 Datenfeldberechnungsroutine/Bildschirmmaskengenerator I
MP-P-3 Bildschirmmaskengenerator II
MP-P-4 Diverse Maschinensprache-Hilfsprogramme/Eingaberoutinen/Nach oben scrollen/Nach unten scrollen
MP-P-5 Rechengenerator/Indexverwaltung/Stringvergleich/BSC/ASC-Wandler
Tabelle 7. Die einzelnen Maschinenroutinen
0 rem-dbi / (c)1985 martin hecht,stgt-
1 dimmf%(3),lb(3),hb(3),me$(2,18),ap%(5,4),ks$(147),f1%(5),f2%(5),f3%(5),p1(4)
2 dimfc%(19),ba(2),fs%(5),zf%(3),ta%(3),p2(7),ph(2),hp%(2,4),br%(3),af%(10)
3 dim dd$(15),sn%(15),ds%(15)
4 dim fo%(20),fo$(20),ro$(15),ro%(15),fd(50,2),fa%(50):am=50
55 gosub4510:lb(1)=213:hb(1)=156:qx$="mp-p-2":gosub11860
56 lb(1)=232:hb(1)=199:qx$="mp-p-4":gosub11860
63 poke55,212:poke56,156:poke51,212:poke52,156
70 gosub4810
165 gosub11022:printchr$(142)chr$(8):ff=mf%(3):gosub11235:poke781,1:sys pt
180 me=1:gosub405:gosub11027:eg$=""
190 gosub11455
207 ifeg=13thengosub310:goto190
210 ifeg=8thenhp=1:gosub9500:goto165
220 ifeg=140andme=1then7750
221 ifeg=140andme=2then9002
224 ifeg=144thenff=mf%(1):gosub11170:mf%(1)=ff:goto190
226 ifeg=5thenff=mf%(2):gosub11200:mf%(2)=ff:goto190
227 ifeg=28thenff=mf%(3):gosub11230:mf%(3)=ff:goto190
229 ifeg<133oreg>140then190
232 ifme=2then250
240 oneg-132gosub1005,3012,3512,4000:ifugthenug=0:goto165
242 goto190
250 oneg-132gosub7010,7500,6000,6500:ifugthenug=0:goto165
260 goto190
310 ifme=1thenme=2:goto330
320 me=1
330 fors1=21to5step-1:ze=s1:sp=5:gosub11050:printks$(110):nexts1
345 gosub405:poke2004,51-me:return
405 ze=1:sp=23:gosub11050:printme$(me,1):fors1=2to18
406 ze=s1+3:sp=5:gosub11050:printme$(me,s1):nexts1:return
1005 gosub2610
1135 poke247,c4:poke248,c3:ze=c2:sp=c1:gosub11050:print;
1140 poke199,rs:sys52582:eg=peek(2):gosub11035
1170 ifeg=8thengosub2505:hp=2:gosub9500:gosub2610:goto1135
1172 ifeg=141thengosub2710:ug=1:return
1178 fors1=1tofm:ifeg<>fc%(s1)thennexts1:goto1140
1182 ifs1>10thens1=s1-10:goto1186
1183 ons1gosub9985,9990,9996,10341,10363,1385,1400,1414,10570,10584:goto1135
1186 ons1gosub10610,10623,10657,10746,1430,1454,1692,10544,1492:goto1135
1385 ff=f1%(pg):gosub11170:f1%(pg)=ff:return
1400 ff=f2%(pg):gosub11200:f2%(pg)=ff:return
1414 ff=f3%(pg):gosub11230:f3%(pg)=ff:return
1430 ifpg=5thenreturn
1438 gosub2505:pg=pg+1:goto1465
1454 ifpg=1thenreturn
1462 gosub2505:pg=pg-1
1465 gosub2526:c4=1:c3=0:c1=0:c2=1:return
1492 ze=0:sp=0:gosub11050:printks$(6):gosub11050:printks$(5)
1495 p=2:rv=1:gz=2:sp=36:ze=0:gosub11303:h=val(eg$):ifh<1orh>5then1530
1525 gosub2505:pg=h:gosub2526:c4=1:c3=0:c1=0:c2=1
1530 ze=0:sp=0:gosub11050:printks$(1):return
1692 e=ba(2)+cp:ife>51052thenreturn
1693 ze=0:sp=0:gosub11050:printks$(8):z=1:eg$=""
1694 poke650,128:pokee,60:pokee+1,20:pokee+2,62:goto1715
1698 gosub11455
1702 if(eg=29ande+z<>51053)thenpokee+1+z,102:z=z+1:pokee+1+z,62:goto1715
1704 ifeg=157andz<>1thenpokee+1+z,32:z=z-1:pokee+1+z,62:goto1715
1706 ifeg=13then1720
1708 ifeg=68and(e<51041andz<14)thengosub1740:goto1720
1711 if(eg=69oreg=83)or(eg=84oreg=78)thenpokee+1,eg-64:goto1698
1712 goto1698
1715 ze=0:sp=34:gosub11050:printks$(114)z:goto1698
1720 h=e+z+2-ba(2):c2=int(h/40):c1=h-40*c2:h=h-39:c3=int(h/256):c4=h-256*c3
1728 ze=0:sp=0:gosub11050:printks$(1):return
1740 pokee,60:pokee+1,4:fors1=2to13:pokee+s1,102:nexts1:pokee+14,62:z=13:return
2505 gosub11243:gr=142:ifpeek(53272)=27thengr=14
2514 return
2526 gosub10610:ifpg=1thenpokeba(2)+887,173:pokeba(2)+888,173:goto2534
2531 pokeba(2)+887,176:pokeba(2)+888,175+pg
2533 ifpg=5thenpokeba(2)+917,173:pokeba(2)+918,173:goto2539
2534 pokeba(2)+917,176:pokeba(2)+918,177+pg
2539 ff=f3%(pg):gosub11235:gosub11239:poke53280,f1%(pg):poke53281,f2%(pg)
2541 fs%(pg)=1:return
2610 gosub11022:c4=1:c3=0:c1=0:c2=1
2615 br%(1)=24:br%(2)=0:br%(3)=196:gosub11260:printchr$(9)chr$(gr)
2620 poke781,4:sys pt:gosub2526:gosub11028:return
2710 gosub2505:gosub11022:br%(1)=21:br%(2)=3:br%(3)=4:gosub11260:return
3012 gosub3315
3049 sm=2:rv=0
3050 ze=4:sp=38:gosub11050:print;:sys51682:eg=peek(2)
3056 ifeg=8then hp=1:gosub9500:gosub3315:goto3049
3057 ifeg=141thenug=1:za=0:return
3066 ifeg=144thenff=zf%(1):gosub11170:zf%(1)=ff:goto3050
3067 ifeg=5thenff=zf%(2):gosub11200:zf%(2)=ff:goto3050
3068 ifeg=28thenff=zf%(3):gosub11230:zf%(3)=ff:goto3050
3072 gosub3840:ifud=1thenud=0:goto3050
3073 e=5:gosub 3805:ifud=1thenud=0:goto3050
3080 gosub3850:ze=19:sp=0:gosub11050:printl$l$l$l$c$c$:eg$=str$(eg)
3082 iflen(eg$)<4then eg$=" "+eg$:goto3082
3086 ze=6:sp=29:gosub11050:printeg$
3105 gosub3864
3120 sp=29:fors2=0to7:z=peek(50176+s2):z$="":k=0
3125 z=z/2:h$=".":ifz<>int(z)thenh$=chr$(18)+" "+chr$(146):k=k+2
3127 z=int(z):z$=h$+z$:ifz>0then3125
3130 iflen(z$)-k<8thenz$="."+z$:goto3130
3135 ze=10+s2:gosub11050:printz$:nexts2
3150 k=0:ze=10:sp=29:gosub11050:print;:poke650,64
3155 sys51682:eg=peek(2):h=k
3169 ifeg=141thenug=1:za=0:poke650,128:return
3170 ifeg=19then3150
3171 ifeg=29thenk=k+1:goto3183
3172 ifeg=157thenk=k-1:goto3183
3174 ifeg=17thenk=k+40:goto3183
3175 ifeg=145thenk=k-40:goto3183
3177 ifeg=133thenpoke1453+k,160:k=k+1:eg=29:goto3183
3178 ifeg=134thenpoke1453+k,46:k=k+1:eg=29:goto3183
3179 ifeg=135thengosub3394:goto3150
3181 ifeg=136thenpoke 650,128:goto 3200
3182 goto3155
3183 ifk<0ork>287thenk=h:goto3155
3184 fors1=0to7:ifk=s1*40-1then k=k-32:printks$(81);:goto3155
3186 ifk=s1*40+8thenk=k+32:printks$(80);:goto3155
3187 nexts1:printchr$(eg);:goto3155
3200 ze=20:sp=9:gosub11050:printks$(47)
3202 fors1=0to7:z=0:fors2=0to7:k=1453+s1*40+s2:h=peek(k)
3205 ifh=160thenz=z+2^(7-s2)
3215 nexts2:pokep1+s1,z:nexts1
3250 e=20:k=30:gosub3872:ifug=1thenreturn
3255 gosub3322:goto3049
3315 a1=9:a2=10:gosub11465:gosub11485:ze=4:sp=0:gosub11050:print;
3320 printks$(12):ff=zf%(3):gosub11235:poke53280,zf%(1):poke53281,zf%(2):eg$=""
3322 gosub3835:ze=6:sp=2:gosub11050:printks$(14):printks$(16)
3324 fors1=17to26:printks$(s1):nexts1:ud=0:gosub11028:return
3394 fors1=0to7:ze=10+s1:sp=29:gosub11050:printks$(35):nexts1:return
3512 gosub3895
3560 ze=5:sp=1:gosub11050:printks$(50):ze=7:sp=1:gosub11050:printks$(51)
3562 sm=2:rv=0:ud=0:gosub11028:gosub11455
3569 ifeg=8thenhp=1:gosub9500:gosub3895:goto3560
3570 ifeg=141thenug=1:return
3575 ifeg=144thenff=ta%(1):gosub11170:ta%(1)=ff:goto3560
3580 ifeg=5thenff=ta%(2):gosub11200:ta%(2)=ff:goto3560
3585 ifeg=28thenff=ta%(3):gosub11230:ta%(3)=ff:goto3560
3590 ifeg=133thengosub3655:goto3610
3595 ifeg=134thengosub3735:goto3610
3600 goto3560
3610 ifud=1thenud=0:ug=1:return
3611 ze=5:sp=0:gosub11050:printl$:ze=7:gosub11050:printl$:ze=9:gosub11050:printl$
3613 e=10:k=57:gosub3872:ifug=1thenreturn
3615 goto3560
3655 gosub11023:gosub3907:ze=5:sp=9:gosub11050:printks$(52)
3656 ze=7:sp=9:gosub11050:printks$(53):gosub3835:gosub11028
3658 ze=7:sp=30:gosub11050:print;:sys51682:eg=peek(2)
3666 ifeg=8thenhp=1:gosub9500:gosub3895:goto3655
3667 ifeg=141thenud=1:return
3669 gosub3840:ifud=1thenud=0:goto3658
3670 e=9:gosub3805:ifud=1thenud=0:goto3658
3675 gosub3850:p2=57344+8*eg
3680 ze=5:sp=0:gosub11050:printl$:ze=7:gosub11050:printl$
3682 ze=5:sp=2:gosub11050:printks$(54):ze=7:gosub11050:printks$(55):ze=9:gosub11050:printks$(56)
3687 ze=9:sp=29:gosub11050:print;:sys51682:eg=peek(2)
3705 ifeg=141thenud=1:return
3710 gosub3840:ifud=1thenud=0:goto3687
3715 e=11:gosub3805:ifud=1thenud=0:goto3687
3720 gosub3850:gosub3864:fors1=0to7:pokep2+s1,peek(50176+s1):nexts1:return
3735 gosub11023:gosub3907
3740 ze=5:sp=4:gosub11050:printks$(58):ze=7:gosub11050:printks$(59):gosub3835:gosub11028
3745 ze=7:sp=34:gosub11050:print;:sys51682:eg=peek(2)
3759 ifeg=8thenhp=1:gosub9500:gosub3895:goto3735
3760 ifeg=141thenud=1:return
3762 gosub3840:ifud=1thenud=0:goto3745
3764 e=9:gosub3805:ifud=1thenud=0:goto3745
3766 gosub3850:gosub3864:p2=p1:fors1=0to7:p2(s1)=peek(50176+s1):nexts1
3774 gosub11455:ifeg=141thenud=1:return
3776 gosub3840:ifud=1thenud=0:goto3745
3778 e=9:gosub3805:ifud=1thenud=0:goto3745
3780 gosub3850:gosub3864
3782 fors1=0to7:pokep2+s1,peek(50176+s1):pokep1+s1,p2(s1):nexts1:return
3805 if(eg=45oreg=60)or(eg=62oreg=166)oreg=221then3820
3810 ifeg<32or(eg>127andeg<160)then3820
3811 return
3820 ze=e:sp=5:gosub11050:printks$(32):poke2,1:sys51833:gosub11050:printks$(33):ud=1:return
3835 ze=19:sp=0:gosub11050:printks$(38)ks$(36)ks$(37)ks$(13):return
3840 ifeg=137thensp=3:e=39:sm=2:goto3846
3842 ifeg=138thensp=3:e=41:sm=1:goto3846
3843 ifeg=139thensp=25:e=43:rv=0:goto3846
3844 ifeg=140thensp=25:e=45:rv=1:goto3846
3845 return
3846 ze=20:gosub11050:printks$(e):ze=21:gosub11050:printks$(e+1):ud=1:return
3850 eg=eg-161-33*(eg<255)-64*(eg<192)-32*(eg<160)+32*(eg<96)-64*(eg<64)
3854 ifsm=2theneg=eg+256
3856 ifrv=1theneg=eg+128
3858 return
3864 p1=57344+8*eg:hb(1)=int(p1/256):lb(1)=p1-256*hb(1):lb(2)=lb(1)+7
3865 hb(2)=hb(1)
3866 iflb(2)>255thenlb(2)=255:hb(2)=hb(2)+1
3867 lb(3)=0:hb(3)=196:aw=1:gosub11760:return
3872 ze=19:sp=0:gosub11050:printl$l$l$l$c$c$:ze=e:sp=4:gosub11050:printks$(k)ks$(31)
3880 ze=e+1:sp=26:gosub11050:print;:gosub11445:if eg=78 then za=0:ug=1:return
3882 gosub11023:fors1=0to1:ze=e+s1:sp=0:gosub11050:printl$:nexts1:return
3895 a1=48:a2=49:gosub11465:gosub11485:ff=ta%(3):gosub11235
3896 poke53280,ta%(1):poke53281,ta%(2):eg$="":return
3907 ze=5:sp=0:gosub11050:printl$:ze=7:gosub11050:printl$:return
4000 a1=122:a2=123:gosub11465:iffs%(1)=1then4007
4002 ze=9:sp=5:gosub11050:printks$(101):ze=11:sp=13:gosub11050:printks$(102)
4003 gosub11027:poke2,2:sys51833:pg=1:ug=1:return
4007 ze=10:sp=1:gosub11050:printks$(124)chr$(17)ks$(125):gosub11485:gosub11027
4015 af=0:dl=0:fv=0:s=0:n=0:e=0:es=0:ef=0:s3=0:s5=0
4017 forse=5to1step-1:iffs%(se)=0thennextse
4020 forpg=1tose:poke251,40:poke252,196:s2=0:gosub11239
4025 sys40149:ifpeek(252)=0then4050
4026 ifes=0thenes=pg
4027 af=af+1:s2=s2+1:ifaf>amthena1=128:a2=4:gosub4435:gosub4476:return
4030 fv=1:fors1=1to2:fd(af,s1)=peek(249+2*s1)+256*peek(250+2*s1):nexts1
4034 e=fd(af,2)-fd(af,1)-1:dl=dl+e:ife<5 then4039
4035 h$=right$(str$(af),len(str$(af))-1)
4037 iflen(h$)<3thenh$=chr$(102)+h$:goto4037
4038 fors1=1to3:pokefd(af,2)-4+s1,asc(mid$(h$,s1,1)):nexts1
4039 z=peek(fd(af,1)+1):ifz=19thenfa%(af)=19:s=s+1:sf=pg:ns=af:goto4045
4040 ifz=14thenfa%(af)=14:n=n+1:fo%(n)=af:goto4045
4042 ifz=4thenfa%(af)=4:goto4045
4043 ifz=5then fa%(af)=5:ef=ef+1:ro%(ef)=af:n=n+1:fo%(n)=af:goto4045
4044 fa%(af)=20
4045 iffd(af,2)<>51055thenpoke251,peek(253):poke252,peek(254):goto4025
4050 af%(pg)=s2:gosub11243:nextpg
4052 iffv=0thena1=127:a2=4:gosub4435:return
4055 ifs=0thena1=137:a2=2:gosub4435:gosub4476:return
4056 ifs>1thena1=143:a2=3:gosub4435:gosub4476:return
4057 ifef>15thena1=147:a2=4:gosub4435:gosub4476:return
4058 ifn=0andef=0then4157
4062 poke53280,0:gosub11023:br%(1)=24:br%(2)=0:br%(3)=196:gosub11260
4070 printchr$(147)chr$(9)chr$(gr)chr$(8):ze=0:sp=0:gosub11050:printks$(130):gosub4470
4071 s2=0
4072 forpg=1tose:ifaf%(pg)=0thennextpg:goto4100
4073 gosub4488:gosub11028
4075 fors1=1toaf%(pg):s2=s2+1:iffa%(s2)<>14 and fa%(s2)<>5 then nexts1:goto4095
4076 s3=s3+1:s6$=ks$(100)+ks$(29):eg$=fo$(s3)
4077 iflen(eg$)=3theneg$=" "+eg$
4078 ifval(right$(eg$,2))=0thenag$=left$(s6$,val(left$(eg$,2))):goto4080
4079 ag$=left$(s6$,val(left$(eg$,2)))+"."+right$(s6$,val(right$(eg$,2)))
4080 gosub4443:gosub4470:ifug=1thengosub4475:gosub4420:return
4083 s7=len(eg$):ifs7>80thens7=80
4085 fors6=1tos7
4087 ifmid$(eg$,s6,1)<>"."thennexts6:fo$(s3)=right$(str$(s7),2)+" 0":goto4093
4088 fo$(s3)=right$(str$(s6-1),2)+right$(str$(s7-s6),2)
4093 nexts1:ifun=1thenun=0:gosub11243
4095 nextpg
4100 ifef=0then4135
4105 poke53280,0:gosub11023:ze=0:sp=0:gosub11050:printks$(131):gosub4470:s2=0:gz=72
4110 sy=0:forpg=1tose:ifaf%(pg)=0thennextpg:goto4135
4112 gosub4488:gosub11028
4114 ifsy<>0then4120
4115 ze=22:sp=0:gosub11050:printks$(146);:gosub11445:ze=22:sp=0:gosub11050:printks$(6)c$c$
4116 sy=1:ifeg=74thensy=2
4120 fors1=1toaf%(pg):s2=s2+1:iffa%(s2)<>5thennexts1:goto4133
4121 s5=s5+1
4122 ag$=ro$(s5):gosub4444:ifug=1thengosub4475:gosub4420:return
4123 gosub4405:ro$(s5)=eg$:ifsy=1then4132
4124 s7=0:s8=0:fors6=1tolen(eg$):s6$=mid$(eg$,s6,1)
4125 ze=0:sp=0:gosub11050:printks$(27):if s6$="(" then s7=s7+1
4126 ifs6$=")"thens7=s7-1:ifs7<0thengosub4382:goto4122
4127 s8=0:if(s6$="+"ors6$="-")or(s6$="*"ors6$="/")ors6$="^"then s8=1
4128 ifs6>1thenifmid$(eg$,s6-1,1)="("ands8=1thengosub4382:goto4122
4130 nexts6
4131 ifs7>0thengosub4382:goto4122
4132 gosub4470:ze=0:sp=0:gosub11050:printks$(131):nexts1:if un=1thenun=0:gosub11243
4133 nextpg
4135 gosub11022:gosub4420:gosub4425
4140 ff=mf%(3):gosub11235
4156 a1=122:a2=123:gosub11465:gosub11485:printchr$(14)chr$(8)c$:zg=0
4157 gosub4425:ze=19:sp=0:gosub11050:printks$(79)chr$(17)ks$(79):gosub11027
4160 dp=0:open1,8,2,"dat-dir,s,r":gosub11322:iffe=0then4167
4165 dp=1:ad=1:goto4168
4167 input#1,ad:fors1=1toad:input#1,dd$(s1),sn%(s1),ds%(s1):nexts1
4168 close1
4211 du=0:ze=5:sp=0:gosub11050:printks$(126);:sp=22:gz=14:rv=0:p=1
4212 gosub11303:ifeg=141thenug=1:gosub4476:return
4216 fors1=1toad:ifdd$(s1)<>eg$thennexts1:goto4219
4217 ze=20:sp=2:gosub11050:printks$(136);:gosub 11445:gosub6601:ifeg=78then4211
4218 du=s1
4219 i$=eg$:da$=i$
4220 ze=7:sp=3:gosub11050:printks$(103)ks$(104)ks$(105);
4221 gosub11445:ifeg=74thenzg=1:zg$=da$:printchr$(74):goto4230
4222 forze=7to9:sp=0:gosub11050:printl$c$:nextze:ze=7:sp=2:gosub11050:printks$(132)ks$(133);
4224 gosub11445:printchr$(eg):ifeg=78thenzg$="k":goto4230
4226 ze=10:sp=8:gosub11050:printks$(121):sp=16:gosub11303
4227 ifeg=141thenug=1:gosub4476:gosub6625:return
4228 i$=eg$:ifi$=""thenzg$="k":goto4230
4229 zg$=i$
4230 ze=13:sp=0:gosub11050:printks$(134)ks$(135);:sp=31:ze=14:gz=2:gosub11303
4232 ifeg=141thenug=1:gosub4476:return
4235 as=val(eg$):ifas<1oras>30then4230
4247 ug=0:gosub4476:ag$=ks$(99)+da$:ze=20:gosub11585:i$=da$+".d"
4248 ifdu<>0thenopen1,8,15,"s:"+i$:close1
4249 open1,8,2,i$+",s,w"
4250 print#1,cb,r$,dl,r$,sf,r$,ns,r$,es,r$,af:fors1=1toaf
4252 fd(s1,1)=fd(s1,1)+1:fd(s1,2)=fd(s1,2)-fd(s1,1)
4253 iffd(s1,2)>lfthenlf=fd(s1,2)
4254 print#1,fd(s1,1)r$fd(s1,2):nexts1:lf=int(lf/255)+1:print#1,lf
4255 fors1=1toaf:print#1,fa%(s1):nexts1
4260 print#1,se:fors1=1tose:print#1,af%(s1):nexts1
4265 print#1,s3:ifs3=0then4270
4267 fors1=1tos3:print#1,fo%(s1)r$fo$(s1):nexts1
4270 print#1,s5:ifs5=0then4275
4272 fors1=1tos5:print#1,ro%(s1)r$ro$(s1):nexts1
4275 print#1,zg$r$,as,r$,gr:fors1=1tose:print#1,f1%(s1)r$f2%(s1)r$f3%(s1)
4280 nexts1:close1
4285 i$=da$+".e":ifdu<>0thenopen1,8,15,"s:"+i$:close1
4289 lb(1)=0:hb(1)=160:lb(2)=ap%(se,3)+1:hb(2)=ap%(se,4):qx$=i$:gosub11810
4297 ifdu<>0thensn%(du)=se:goto4345
4300 i$=da$+".i":open1,8,2,i$+",s,w"
4302 at=0:mt=int(2219/(as+3)):print#1,at,r$,mt:close 1
4342 ifdp=0thenad=ad+1
4343 dd$(ad)=da$:sn%(ad)=se:ds%(ad)=0
4345 i$="dat-dir":ifdp=1then4348
4346 open1,8,15,"s:"+i$:close1
4348 open1,8,2,i$+",s,w":print#1,ad
4349 fors1=1toad:print#1,dd$(s1)r$sn%(s1)r$ds%(s1):nexts1:close1
4351 i$=da$+".z":ifdu<>0thenopen1,8,15,"s:"+i$:close1
4352 ifzg=0then4358
4353 lb(1)=0:hb(1)=224:lb(2)=0:hb(2)=240:lb(3)=0:hb(3)=160:aw=1:gosub11760
4356 lb(1)=0:hb(1)=160:lb(2)=0:hb(2)=176:qx$=i$:gosub11810:gosub6635
4357 p=se:se=1:gosub6605:se=p
4358 ag$=ks$(138):ze=20:gosub11585:i$=da$+".e":gosub6650:ug=1:return
4382 ze=0:sp=0:gosub11050:printks$(28):poke2,1:sys51833:gosub11050:printks$(131):return
4405 fors6=len(eg$)to1step-1:ifmid$(eg$,s6,1)=chr$(32)thennexts6
4410 eg$=left$(eg$,s6):return
4420 gosub11023:br%(1)=21:br%(2)=3:br%(3)=4:gosub11260:return
4425 ze=10:sp=0:gosub11050:printl$:ze=12:sp=0:gosub11050:printl$:return
4435 gosub4425:ze=10:sp=a2:gosub11050:printks$(a1):poke2,2:sys51833:ug=1:pg=1:return
4443 gz=fd(s2,2)-fd(s2,1)-1:ifgz>80thengz=80
4444 s4=pg:pokefd(s2,1),188:pokefd(s2,2),190:ze=22:sp=0:gosub11050:printchr$(18)ag$c$c$
4446 ze=22:sp=0:gosub11050:print;:gosub6920:eg=peek(2)
4448 ifeg=13then4460
4449 ifeg=141thenug=1:goto4463
4451 ifeg=135andpg<sethengosub11243:pg=pg+1:gosub4488:un=1:goto4446
4452 ifeg=136andpg>1thengosub11243:pg=pg-1:gosub4488:un=1:goto4446
4453 goto4446
4460 poke253,112:poke254,199:poke2,gz:poke69,69:poke70,199:sys52493
4463 ifun=1thenpg=s4:gosub11239
4464 pokefd(s2,1),60:pokefd(s2,2),62:gosub11243
4466 poke199,0:return
4470 ze=22:sp=0:gosub11050:printks$(6)ks$(6)c$c$:return
4475 gosub11022
4476 s1=0:s4=1:forpg=1tose:ifaf%(pg)=0then nextpg:goto4482
4477 gosub11239:fors1=s4tos4+af%(pg)-1:iffd(s1,2)-fd(s1,1)<6then4479
4478 fors2=1to3:pokefd(s1,2)-4+s2,102:nexts2
4479 ifug=0thenpokefd(s1,1)+1,102
4480 nexts1:gosub11243:s4=s4+af%(pg):nextpg
4482 pg=1:return
4488 gosub10610:ff=f3%(pg):gosub11235:gosub11239
4489 poke53280,f1%(pg):poke53281,f2%(pg):return
4510 printchr$(147)chr$(142)chr$(8):poke53280,0:poke53281,0
4515 poke211,0:poke214,10:sys58640
4520 print"{grn}O{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}P"
4525 print"{up}{CBM-G}{rvon}                                      {rvof}{CBM-M}"
4530 print"{up}{CBM-G}{rvon}>>>>>>> einen moment bitte !!! <<<<<<<{rvof}{CBM-M}"
4535 print"{up}{CBM-G}{rvon}                                      {rvof}{CBM-M}"
4540 print"{up}L{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{SHIFT-@}"
4550 return
4730 dimmf%(3),lb(3),hb(3),me$(2,18),ap%(5,4),ks$(147),f1%(5),f2%(5),f3%(5)
4735 dimfc%(19),ba(2),fs%(5),zf%(3),ta%(3),p2(7),ph(2),hp%(2,4),br%(3),ro%(15)
4740 am=75:dim fd(am,2),fa%(am),fo%(am/2),fo$(am/2),ro$(15),dd$(15),sn%(15)
4742 dim af%(10),p1(4),ds%(15)
4810 ba(1)=1024:ba(2)=50176:gr=142:pg=1:rs=0:hp=0:pt=40248
4835 fors1=1to5:f1%(s1)=0:f2%(s1)=0:f3%(s1)=5:nexts1:mf%(1)=0:mf%(2)=0:mf%(3)=5
4841 zf%(1)=0:zf%(2)=0:zf%(3)=5:ta%(1)=0:ta%(2)=0:ta%(3)=5
4860 cb=51:poke 56325,cb:poke 650,128:open15,8,15:ti$="000000"
4861 l$="                                        ":c$=chr$(145):r$=chr$(13)
4960 lb(1)=0:hb(1)=160:lb(2)=103:hb(2)=176:aw=32:gosub11710:se=1:gosub6605
5005 lb(1)=0:hb(1)=240:lb(2)=153:hb(2)=246:aw=32:gosub11710
5027 lb(1)=0:hb(1)=208:lb(2)=255:hb(2)=223:lb(3)=0:hb(3)=224:aw=3:gosub11760
5040 p1(1)=58160:p1(3)=59184:p1(2)=60208:p1(4)=61232
5042 fors2=1to2:p1=p1(s2):fors1=p1top1+6:pokes1,0:nexts1:pokep1+7,24:nexts2
5043 fors2=3to4:p1=p1(s2):fors1=p1top1+6:pokes1,255:nexts1:pokep1+7,231:nexts2
5110 read sz
5115 fors1=1tosz:readsc:fors2=1tosc:readme$(s1,s2):nexts2:nexts1
5131 fors1=1to5:fors2=1to4:readap%(s1,s2):nexts2:nexts1
5135 fors1=1to2:fors2=1to4:readhp%(s1,s2):nexts2:nexts1:ph(1)=52566:ph(2)=52570
5141 readfm:fors1=1tofm:readfc%(s1):nexts1
5144 readsz:fors1=1tosz:readks$(s1):nexts1
5146 return
5149 data2
5152 data18,"datei entwickeln"
5154 data"{CBM-@}{CBM-@}{CBM-@}{CBM-@}","{CBM-G}f1{CBM-M} : bildschirmmaske entwerfen","{CBM-T}{CBM-T}{CBM-T}{CBM-T}"
5156 data"{CBM-@}{CBM-@}{CBM-@}{CBM-@}","{CBM-G}f3{CBM-M} : zeichensatz aendern","{CBM-T}{CBM-T}{CBM-T}{CBM-T}"
5158 data"{CBM-@}{CBM-@}{CBM-@}{CBM-@}","{CBM-G}f5{CBM-M} : tastaturbelegung aendern","{CBM-T}{CBM-T}{CBM-T}{CBM-T}"
5159 data"----------------------------------"
5160 data"{CBM-@}{CBM-@}{CBM-@}{CBM-@}","{CBM-G}f7{CBM-M} : --- datei einrichten ------","{CBM-T}{CBM-T}{CBM-T}{CBM-T}"
5162 data"----------------------------------"
5164 data"{CBM-@}{CBM-@}{CBM-@}{CBM-@}","{CBM-G}f8{CBM-M} : programm beenden","{CBM-T}{CBM-T}{CBM-T}{CBM-T}"
5166 :
5168 data17,"sonderfunktionen"
5170 data"{CBM-@}{CBM-@}{CBM-@}{CBM-@}","{CBM-G}f1{CBM-M} : directory ausgeben","{CBM-T}{CBM-T}{CBM-T}{CBM-T}"
5172 data"{CBM-@}{CBM-@}{CBM-@}{CBM-@}","{CBM-G}f3{CBM-M} : disk-kommando senden","{CBM-T}{CBM-T}{CBM-T}{CBM-T}"
5174 data"{CBM-@}{CBM-@}{CBM-@}{CBM-@}","{CBM-G}f5{CBM-M} : dateimaske abspeichern","{CBM-T}{CBM-T}{CBM-T}{CBM-T}"
5176 data"{CBM-@}{CBM-@}{CBM-@}{CBM-@}","{CBM-G}f7{CBM-M} : dateimaske einladen","{CBM-T}{CBM-T}{CBM-T}{CBM-T}"
5178 data"----------------------------------"
5180 data"{CBM-@}{CBM-@}{CBM-@}{CBM-@}","{CBM-G}f8{CBM-M} : lademenue aufrufen","{CBM-T}{CBM-T}{CBM-T}{CBM-T}"
5250 data0,160,71,163,72,163,143,166,144,166,215,169,216,169,31,173
5252 data32,173,103,176
5278 data0,240,71,243,76,243,147,246
5282 data19
5284 data19,18,146,20,148,144,5,28,134,133,147,137,138,13,135,136,139,3,140
5350 data147
5352 data"{rvon}-database 64-----------maskendefinition-{rvof}"
5354 data"{rvon}100<-langsamer{SHIFT--}schneller->25+'return'{rvof}"
5356 data"{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}"
5358 data"{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"
5360 data"{rvon}--seitennummer (1-5) ? + 'return' :>  <-{rvof}"
5362 data"{rvon}                                        {rvof}"
5364 data"Unter welchem Namen wurde der Zeicheng. "
5368 data "{rvon}feldende ? ==>'return'{SHIFT--}feldlaenge:      {rvof}"
5370 data" Database 64                Zeichensatz "
5372 data"{rvon}         Zeichensatzaenderung:          {rvof}"
5374 data" >>>> Hauptmenue: 'Shift'+'Return' <<<<"
5376 data"Welches Zeichen wollen Sie abaendern ? "
5378 data" {CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}"
5380 data"---- BSC-Code des Zeichens: ... ----"
5382 data"Dateimaske einladen:  - F1 -"
5384 data"----------------------------------------"
5386 data"In der nebenstehenden        12345678"
5388 data"Darstellung koennen Sie     1........1"
5390 data"die Matrix des Zeichens     2........2"
5392 data"in gewuenschter Weise       3........3"
5394 data"abaendern:                  4........4"
5396 data"                            5........5"
5398 data" - F1 : Matrixp. setzen   - 6........6"
5400 data" - F3 : Matrixp. loeschen - 7........7"
5402 data" - F5 : Matrix loeschen   - 8........8"
5404 data" - Fertig? : ---> 'F7'    -  12345678"
5406 data"{rvon} syntax-kontrolle / einen moment bitte! {rvof}"
5408 data"{rvon}           syntax-fehler !!!            {rvof}"
5410 data"####################"
5412 data"{rvon}Wollen Sie weitere Zeichen ab-{rvof}      "
5414 data"    {rvon}      aendern ? (j/n)         {rvof}"
5416 data"{rvon}Keine Umdefinition moeglich! {rvof}"
5418 data"                               "
5420 data"Datei einladen:       - F3 -"
5422 data"........"
5424 data" {rvon}  Gr.-/Kl.schrift:-F2- {SHIFT--} RVS off:-F6- {rvof} "
5426 data" {rvon}  {rvof}Graphikmodus:   -F4- {SHIFT--} RVS on: -F8-{rvon} {rvof} "
5428 data" {CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@} "
5430 data"{rvon}Gr.-/Kl.schrift:-F2- {rvof}"
5432 data"Graphikmodus:   -F4- "
5434 data"Gr.-/Kl.schrift:-F2- "
5436 data"{rvon}Graphikmodus:   -F4- {rvof}"
5438 data"{rvon} RVS off:-F6-{rvof}"
5440 data" RVS on: -F8-"
5442 data" RVS off:-F6-"
5444 data"{rvon} RVS on: -F8-{rvof}"
5446 data"{rvon} Einen Moment Bitte ! {rvof}"
5448 data" Database 64                   Tastatur "
5450 data"{rvon}      Tastaturbelegungsaenderung:       {rvof}"
5452 data"Belegung einer Taste aendern: - F1 -"
5454 data"Zwei Tasten vertauschen:      - F3 -"
5456 data"Bitte druecken Sie die"
5458 data"zu aendernde Taste ! "
5460 data"Mit welcher Belegung wollen Sie die"
5462 data"Taste versehen ? (Bitte druecken Sie"
5464 data"die entsprechende Taste !) "
5466 data"{rvon}Wollen Sie weitere Tasten ab- {rvof}      "
5468 data"Bitte druecken Sie nacheinander"
5470 data"die zu vertauschenden Tasten !"
5472 data" Database 64                  Directory "
5474 data"{rvon}        {rvof}"
5476 data"     "
5478 data"{rvon}     Weiter mit 'Space'    {rvof}"
5480 data"                            "
5482 data" Database 64             Disk-Kommandos "
5484 data"  Saemtliche Disk-Kommandos koennen in  "
5486 data"  folgender,abgekuerzter Form eingege-  "
5488 data"  ben werden:"
5490 data"    k:...................._(Dateiname,  "
5492 data"    ^                       usw.)         "
5494 data"  (Kommando)"
5496 data"  z.B.: Datei umbenennen:               "
5498 data"                   >r:neuname=altname<  "
5500 data"        Datei loeschen:                 "
5502 data"                   >s:dateiname<          "
5504 data"------------------------------------  "
5506 data"  {rvon}Ihr Kommando? : {rvof} > :"
5508 data"<  + 'Return'        "
5510 data"  {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-*}{SHIFT-*}  "
5512 data"{down}{left}{left}{left}{left}{left}{left}{left}"
5514 data"{up}{rght}{rght}{rght}{rght}{rght}{rght}{rght}"
5516 data"Sind Sie sicher ? (j/n) "
5518 data"Kommandoeingabe loeschen ? (j/n) "
5520 data"Sie haben mit dem Programm"
5522 data" Database 64           Programm beenden "
5524 data"Sind Sie sicher,dass Sie"
5526 data"das Programm beenden"
5528 data"wollen ? (j/n) "
5530 data"gearbeitet !"
5532 data" Stunde "
5534 data" Minute "
5536 data" Sekunde "
5538 data"und "
5540 data"{left}n "
5542 data" Database 64                 Dateimaske "
5544 data"{rvon}        Dateimaske abspeichern:         {rvof}"
5546 data"Unter welchem Namen soll die Dateimaske "
5548 data"abgespeichert werden?: >              <"
5550 data"saving : "
5552 data"+###########################################################"
5554 data"Es wurde noch keine Dateimaske"
5556 data"definiert !!!"
5558 data"Soll der (eventuell) abgeaenderte       "
5560 data"  Zeichensatz mit abgespeichert         "
5562 data"        werden ? (j/n) "
5564 data"  Wollen Sie mit der abgeespeicherten   "
5566 data"  Dateimaske weiterarbeiten ? (j/n) "
5568 data"loading : "
5570 data"Einladung der Dateimaske nicht moeglich!"
5572 data"                                  "
5574 data"{rvon}          Dateimaske einladen:          {rvof}"
5576 data"Unter welchem Namen wurde die Dateimaske"
5578 data"   abgespeichert ? : >              <"
5580 data"{rvon}    {left}{left}{left}{left}"
5582 data "{rvon}-database 64---------------helpscreen"
5584 data"{rvon}-hs speichern/name ?: >              < -{rvof}"
5586 data"{rvon}-hs laden  /  name ?: >              < -{rvof}"
5588 data"helpscreens vertauschen (j/n) ? "
5590 data"Soll ein anderer Zeichensatz"
5592 data"eingeladen werden ? (j/n)"
5594 data"Name?: >              <"
5596 data" Database 64                 Uebernahme "
5598 data"{rvon}           Datei einrichten:            {rvof}"
5600 data"--- Dateimaske wird uebernommen ! ---  "
5602 data"   ---   Einen Moment bitte !    ---"
5604 data"  Name der Datei ? : >              <"
5606 data"{rvon}   Keine Felder vorhanden !!!   {rvof}"
5608 data"{rvon}      Zu viele Felder !!!       {rvof}"
5610 data"Zeichensatz einladen: - F5 -"
5612 data"{rvon}   bitte format-vorschrift eingeben !   {rvof}"
5614 data"{rvon}   bitte rechen-vorschrift eingeben !   {rvof}"
5616 data"Wollen Sie einen anderen Zeichensatz "
5618 data"           verwenden ? (j/n) "
5620 data"   Anzahl der relevanten Stellen des    "
5622 data"     Schluesselfeldes? (1-30) >  <"
5624 data"Datei exist.!/ueberschreiben? (j/n)"
5626 data"{rvon}  Kein Schluesselfeld definiert!!!  {rvof}"
5628 data"Datei ist eingerichtet !!!"
5630 data"Dateimaske abspeichern:    - F1 -"
5632 data"Zeichensatz abspeichern:   - F3 -"
5634 data"Unter welchem Namen soll der Zeichensatz"
5636 data"   Unter welchem Namen wurde die Datei  "
5638 data"{rvon}  Zu Viele Schluesselfelder !!!  {rvof}"
5640 data" Database 64         Lademenue aufrufen "
5642 data"Sind Sie sicher ? (j/n) "
5644 data"{rvon}syntax-kontrolle durchfuehren ? (j/n) {rvof}"
5646 data"{rvon}   Zu viele Rechen-Felder !!!   {rvof}"
6000 a1=95:a2=96:gosub11465
6022 ze=5:sp=3:gosub11050:printks$(139):ze=7:sp=3:gosub11050:printks$(140)
6023 ze=19:sp=0:gosub11050:printks$(79)chr$(17)ks$(79):gosub11485:gosub11027
6024 gosub11455:ifeg=141thenug=1:return
6025 ifeg<>133andeg<>134then6024
6026 ze=5:sp=0:gosub11050:printl$:ze=7:sp=0:gosub11050:printl$:ifeg=134then 6170
6030 if fs%(1)=1then6033
6031 ze=9:sp=5:gosub11050:printks$(101):ze=11:sp=13:gosub11050:printks$(102):gosub11027
6032 ug=1:return
6033 ze=5:sp=0:gosub11050:printks$(97)chr$(17)ks$(98)
6035 sp=24:gosub6235:ifeg=141thenug=1:return
6038 i$=eg$:da$=i$:a1=99:gosub6315:i$=da$+".u":gosub6330
6060 gosub11322:iffe=0then6073
6065 gosub6601:ag$=fe$:ze=20:gosub11585:poke2,2:sys51833:gosub6601:sp=24:goto6033
6073 i$=da$+".m"
6074 open1,8,2,i$+",s,w":gosub11322:iffe<>0then6077
6075 print#1,se:fors1=1tose:print#1,f1%(s1)","f2%(s1)","f3%(s1):nexts1
6076 print#1,gr
6077 close1:gosub6601:ag$=fe$:ze=20:gosub11585:poke2,2:sys51833:gosub6601
6081 gosub6601
6082 zg=1:ze=10:sp=3:gosub11050:printks$(103)chr$(17)ks$(104)chr$(17)ks$(105);
6085 gosub11445:printchr$(eg):ifeg=78thenzg=0:goto6115
6090 i$=da$+".z":a1=99:gosub6315:gosub6350
6115 ze=16:sp=0:gosub11050:printks$(106)ks$(107);:gosub11445:printchr$(eg)
6126 if(eg=74andzg=0)or(eg=78andzg=1)then6155
6127 ifeg=78andzg=0thengosub6635:se=1:gosub6605:goto6155
6130 lb(1)=0:hb(1)=160:qx$=da$+".u":gosub11860:gosub6601
6145 gosub11322:ag$=fe$:ze=20:gosub11585:poke2,2:sys51833
6147 iffe<>0thensp=0:gosub11050:printchr$(18)ks$(109):poke2,2:sys51833
6155 pg=1:gosub6695:ug=1:return
6170 ze=5:sp=0:gosub11050:printks$(141)chr$(17)ks$(98)
6175 sp=24:gosub6235:ifeg=141thenug=1:return
6177 open1,8,15,"s:zwi-sp":close1
6180 i$="zwi-sp":gosub6330:i$=eg$+".z":a1=99:gosub6315:gosub6350
6182 iffe<>0then6170
6185 lb(1)=0:hb(1)=160:qx$="zwi-sp":gosub11860:open1,8,15,"s:zwi-sp":close1:ug=1:return
6235 ze=7:gz=14:rv=0:p=1:gosub11303:return
6315 ag$=ks$(a1)+i$:ze=20:gosub11585:return
6330 forse=5to1step-1:iffs%(se)=0thennextse
6335 lb(1)=0:hb(1)=160:lb(2)=ap%(se,3)+1:hb(2)=ap%(se,4):qx$=i$:gosub11810:return
6350 lb(1)=0:hb(1)=224:lb(2)=0:hb(2)=240:lb(3)=0:hb(3)=160:aw=1:gosub11760
6355 lb(1)=0:hb(1)=160:lb(2)=0:hb(2)=176:qx$=i$:gosub11810:gosub6635:se=1:gosub6605
6360 gosub6601:gosub11322:ag$=fe$:ze=20:gosub11585:poke2,2:sys51833:gosub6601
6361 return
6500 a1=95:a2=111:gosub11465:gosub11485
6516 ze=5:sp=6:gosub11050:printks$(15):ze=7:sp=6:gosub11050:printks$(34)
6517 ze=9:sp=6:gosub11050:printks$(129)
6518 ze=19:sp=0:gosub11050:printks$(79)chr$(17)ks$(79):gosub11485:gosub11027
6519 gosub11455:ifeg=141thenug=1:return
6520 ifeg<>133and(eg<>134andeg<>135)then6518
6522 ze=5:sp=0:gosub11050:printl$:ze=7:gosub11050:printl$:ze=9:gosub11050:printl$
6524 ifeg=134then6547
6526 ifeg=135then6574
6532 a1=112:gosub6590:ifug=1thenreturn
6536 lb(1)=0:hb(1)=160:qx$=i$+".u":gosub11860:gosub6600:if fe<>0 then 6532
6537 open1,8,2,i$+".m,s,r":gosub11322:iffe<>0then6540
6539 input#1,se:fors1=1tose:input#1,f1%(s1),f2%(s1),f3%(s1):nexts1:input#1,gr
6540 close1:gosub6582:iffe<>0thengosub6685
6541 pg=1:gosub6695:ug=1:return
6547 a1=142:gosub6590:ifug=1thenreturn
6548 open1,8,2,i$+".d,s,r"
6550 ze=20:gosub6631:iffe<>0thenclose1:goto6547
6551 input#1,cb,dl,sf,ns,es,af:poke56325,cb
6552 fors1=1toaf:fors2=1to2:input#1,fd(s1,s2):nexts2:nexts1
6554 input#1,lf:fors1=1toaf:input#1,fa%(s1):nexts1
6556 input#1,se:fors1=1tose:input#1,af%(s1):nexts1
6558 input#1,s3:ifs3=0then6562
6560 fors1=1tos3:input#1,fo%(s1),fo$(s1):nexts1
6562 input#1,s5:ifs5=0then6564
6563 fors1=1tos5:input#1,ro%(s1),ro$(s1):nexts1
6564 input#1,zg$,as,gr:fors1=1tose:input#1,f1%(s1),f2%(s1),f3%(s1):nexts1
6565 close1
6567 lb(1)=0:hb(1)=160:qx$=i$+".e":gosub11860:ze=20:gosub6631:iffe<>0thenug=1:return
6569 if zg$="k" thengosub6601:ag$=fe$:gosub11585:goto 6571
6570 i$=zg$:gosub6582:iffe<>0thengosub6685
6571 gosub6625:pg=1:gosub6695:ug=1:return
6574 ze=5:sp=0:gosub11050:printks$(7)chr$(17)ks$(113):ze=19:gosub11050
6575 printks$(79)chr$(17)ks$(79):gosub11027:sp=22:gosub6235:if eg=141then 6577
6576 i$=eg$:gosub6582:iffe<>0then6574
6577 ug=1:return
6582 i$=i$+".z":a1=108:gosub6315
6583 lb(1)=0:hb(1)=224:qx$=i$:gosub11860:gosub11322:ze=20:sp=0:gosub11050:printl$:ag$=fe$
6584 ze=20:gosub11585:poke2,2:sys51833:ze=20:sp=0:gosub11050:printl$:return
6590 ze=5:sp=0:gosub11050:printks$(a1)chr$(17)ks$(113)
6592 ze=19:sp=0:gosub11050:printks$(79)chr$(17)ks$(79):gosub11027
6594 sp=22:gosub6235:ifeg=141thenug=1:return
6596 i$=eg$:a1=108:gosub6315:return
6600 ze=20:sp=0:gosub11050:printl$:gosub11322:ag$=fe$:ze=20:gosub11585:poke2,2:sys51833
6601 ze=20:sp=0:gosub11050:printl$:return
6605 ifse=5thenreturn
6610 fors1=se-1to4:z=40960+s1*840+32:pokez,19:pokez+1,5:pokez+2,9
6615 pokez+3,20:pokez+4,5:pokez+5,58:pokez+6,48:pokez+7,49+s1:nexts1:return
6625 ifaf>0thengosub6705
6626 s1=0:s4=1:forpg=1tose:ifaf%(pg)=0thennextpg:goto6629
6627 gosub11239:fors1=s4tos4+af%(pg)-1:pokefd(s1,1)+1,fa%(s1)
6628 nexts1:gosub11243:s4=s4+af%(pg):nextpg
6629 pg=1:return
6631 gosub11322:iffe<>0thengosub6601:ag$=fe$:gosub11585:poke2,2:sys51833:gosub6601
6632 return
6635 lb(1)=0:hb(1)=160:lb(2)=103:hb(2)=176:aw=32:gosub11710:return
6650 ze=16:sp=0:gosub11050:printks$(106)ks$(107);:gosub11445:printchr$(eg):pg=1:gosub6695
6652 if(eg=74andzg=0)thengosub6625:return
6655 if(eg=78andzg=1)thengosub6682:return
6660 ifeg=78andzg=0thengosub6635:se=1:gosub6605:gosub6682:return
6665 ze=20:sp=0:gosub11050:printl$
6670 lb(1)=0:hb(1)=160:qx$=i$:gosub11860:gosub11322:gosub6601:ag$=fe$:ze=20:gosub11585
6672 gosub6625:gosub6601
6675 iffe<>0thensp=0:gosub11050:printchr$(18)ks$(109):poke2,2:sys51833
6680 return
6682 fors1=1tos3:fo$(s1)="":nexts1:fors1=1tos5:ro$(s1)="":nexts1
6683 s3=0:s5=0:return
6685 ze=12:sp=6:gosub11050:printks$(119):ze=14:sp=7:gosub11050:printks$(120);
6686 gosub11445:ifeg=78then6690
6687 ze=16:sp=8:gosub11050:printks$(121):sp=16:gz=14:p=1:rv=0:gosub11303:ifeg=141then6690
6689 i$=eg$:gosub6582:iffe<>0then6687
6690 return
6695 fors1=1to5:fs%(s1)=0:nexts1:return
6705 fors1=1toaf:fd(s1,2)=fd(s1,2)+fd(s1,1):fd(s1,1)=fd(s1,1)-1:nexts1
6707 return
6920 poke52445,112:poke52446,199:poke52436,gz:poke52437,0:poke199,1:poke52440,13
6925 poke52441,141:poke52442,135:poke52443,136:poke52444,1:sys51946:return
7010 a1=60:gosub7610:gosub11485:gosub11027
7055 open1,8,0,"$":get#1,h$,h$:i$=""
7057 gosub11322:iffe=0then7060
7058 close1:ze=12:sp=8:gosub11050:printfe$:poke2,2:sys51833:ug=1:return
7060 get#1,h$,h$,h$,h$
7065 get#1,h$:ifh$=""then7075
7070 i$=i$+h$:goto7065
7075 i$=ks$(61)+i$+ks$(61):ze=2:sp=0:gosub11050:printi$ks$(3)
7120 ze=4:sp=0:gosub11050:print;:z=0
7130 get#1,h$,h$:get#1,h$,z$:ifst<>0then7240
7135 h$=h$+chr$(0):z$=z$+chr$(0):e=asc(h$)+asc(z$)*256:printks$(62)e;
7190 get#1,h$:ifh$=""then7210
7200 printh$;:geteg$:ifeg$=chr$(141)thenprint:close1:ug=1:return
7205 goto7190
7210 print:z=z+1:ifz=17thengosub7300:goto7120
7220 goto7130
7240 close1:gosub7330:ug=1:return
7300 gosub7330:fors1=1to19:ze=3+s1:sp=6:gosub11050:printks$(64):nexts1:return
7330 ze=22:sp=6:gosub11050:printks$(63)
7335 get eg$:ifeg$<>" "then7335
7340 return
7500 a1=65:gosub7610:printc$ks$(66)ks$(67)ks$(68):print
7518 printks$(69)ks$(70)ks$(71):printchr$(17)ks$(72)ks$(73)
7520 printks$(74)ks$(75)ks$(76):printks$(77):ze=18:sp=20:gosub11050:printks$(78)
7522 printks$(79)chr$(17)ks$(79)ks$(4)ks$(11)c$c$:gosub11027
7550 ze=17:sp=20:gz=40:rv=0:p=1:gosub11303:ifeg=141thenug=1:return
7552 ifleft$(eg$,1)<>"n"andleft$(eg$,1)<>"s"then7560
7554 ze=21:sp=2:gosub11050:printks$(82);:gosub11445:sp=0:gosub11050:printl$:ifeg<>74then7565
7560 print#15,eg$:gosub11322:ag$=fe$:ze=21:gosub11585:poke2,2:sys51833
7565 ze=21:sp=2:gosub11050:printks$(83);:gosub11445:if eg<>74 then 7574
7573 ze=17:sp=20:gosub11050:printl$:poke1725,58
7574 ze=21:sp=0:gosub11050:printl$:goto7550
7610 gosub11022:printchr$(14)chr$(8)c$ks$(a1)ks$(3):return
7750 a1=85:gosub7610:ze=3:sp=6:gosub11050:printks$(84):ze=5:sp=1:gosub11050:print;
7755 a1=90:ag$=left$(ti$,2):gosub7795:ag$=mid$(ti$,3,2):gosub7795:printks$(93);
7765 ag$=right$(ti$,2):gosub7795:ze=7:sp=13:gosub11050:printks$(89)
7766 ze=10:sp=2:gosub11050:printks$(76)
7770 ze=13:sp=7:gosub11050:printks$(86):ze=15:sp=9:gosub11050:printks$(87)
7775 ze=17:sp=12:gosub11050:printks$(88);:gosub11027:gosub11445:ifeg=78then165
7785 close15:sys64738
7795 printag$ks$(a1);:ifval(ag$)<>1thenprintks$(94);
7800 a1=a1+1:return
9002 printchr$(147)chr$(14)chr$(8)
9005 ze=0:sp=0:gosub11050:printks$(144)ks$(3):ze=5:sp=7:gosub11050:printks$(145);
9010 gosub11445:ifeg=78then165
9020 printchr$(147)chr$(144)"load"chr$(34)"dbl"chr$(34)",8,1"
9030 poke631,19:poke632,13:poke198,2:end
9500 gosub11022:gosub9869:gosub11028:hz=hp
9530 poke247,c4:poke248,c3:ze=c2:sp=c1:gosub11050:print;
9535 poke199,hr:sys 52582:eg=peek(2):gosub11035
9545 ifeg=141thengosub9847:return
9550 fors1=1to18:ifeg<>fc%(s1)thennexts1:goto9535
9560 ifs1>10thens1=s1-10:goto9575
9570 ons1gosub9985,9990,9996,10341,10363,9932,9938,9944,10570,10584:goto9530
9575 ons1gosub 10610,10623,10657,10746,9605,9805,9705,10544:goto9530
9605 a1=116:gosub9905:ifeg=141thengosub9766:return
9610 ag$=ks$(99)+i$:ze=23:gosub11585
9625 ifhp=1thenhb(1)=4:hb(2)=7:hb(3)=196:l2=199:goto9628
9627 hb(1)=196:hb(2)=199:hb(3)=4:l2=7
9628 lb(2)=111:lb(3)=40:lb(1)=40:aw=1:gosub11760:l1=116
9632 gosub9896:e=l2*256+lb(2)+1:fors1=0to3:pokee+s1,peek(ph(hp)+s1):nexts1
9635 lb(1)=lb(3):hb(1)=hb(3):lb(2)=l1:hb(2)=l2:qx$=i$:gosub11810
9640 gosub9782:gosub11322:gosub9770:gosub9766:return
9705 a1=117:gosub9905:ifeg=141thengosub9766:return
9710 ag$=ks$(108)+i$:ze=23:gosub11585:lb(1)=hp%(hp,1):hb(1)=hp%(hp,2):qx$=i$
9711 gosub11860
9730 gosub9782:gosub11322:iffe<>0thengosub9770:gosub9766:return
9740 gosub9782:gosub9766
9755 lb(1)=hp%(hp,3)+1:hb(1)=hp%(hp,4):lb(2)=lb(1)+3:hb(2)=hb(1)
9756 hb(3)=int(ph(hp)/256):lb(3)=ph(hp)-256*hb(3)
9757 aw=1:gosub11760
9758 printchr$(peek(ph(hp)))c$:poke53280,peek(ph(hp)+1)
9759 poke53281,peek(ph(hp)+2):ff=peek(ph(hp)+3):gosub11235
9761 hb(3)=196:ifhp=1thenhb(3)=4
9762 lb(1)=hp%(hp,1):hb(1)=hp%(hp,2):lb(2)=hp%(hp,3):hb(2)=hp%(hp,4)
9763 lb(3)=40:aw=1:gosub11760:return
9766 ze=0:sp=0:gosub11050:printks$(115):return
9770 ag$=fe$:ze=23:gosub11585:poke2,2:sys51833:gosub 9782:return
9782 ze=23:sp=0:gosub11050:printchr$(146)l$c$c$:return
9805 ze=23:sp=3:gosub11050:printks$(118);
9810 sys51682:eg=peek(2):ifeg<>74and(eg<>78 andeg<>141)then 9810
9812 ifeg=141thengosub9782:return
9813 ifeg=74then9832
9820 gosub9855:gosub11022:ifhp=1thenhp=2:br%(1)=24:br%(2)=0:br%(3)=196:goto9822
9821 hp=1:br%(1)=21:br%(2)=3:br%(3)=4
9822 gosub11260:gosub9869:gosub11028:return
9832 e=hp:ife=1thenhp=2:goto9834
9833 hp=1
9834 lb(1)=hp%(hp,1):hb(1)=hp%(hp,2):lb(2)=hp%(hp,3):hb(2)=hp%(hp,4)
9835 lb(3)=hp%(e,1):hb(3)=hp%(e,2):aw=1:gosub11760
9836 fors1=0to3:poke2,peek(ph(hp)+s1):pokeph(hp)+s1,peek(ph(e)+s1)
9837 pokeph(e)+s1,peek(2):nexts1
9838 gosub9842:ifhp=1thenbr%(1)=21:br%(2)=3:br%(3)=4:goto9840
9839 br%(1)=24:br%(2)=0:br%(3)=196
9840 gosub11022:printchr$(147):gosub11260:gosub9869:gosub9782
9841 gosub11028:return
9842 hb(1)=4:hb(2)=7:ife=2thenhb(1)=196:hb(2)=199
9843 lb(1)=40:lb(2)=111:lb(3)=hp%(hp,1):hb(3)=hp%(hp,2):aw=1:gosub11760
9844 gosub9896:return
9847 gosub9855:gosub11022:hp=0:ifhz=1then br%(1)=21:br%(2)=3:br%(3)=4:goto9849
9848 br%(1)=24:br%(2)=0:br%(3)=196
9849 gosub11260:gosub11028:return
9855 hb(1)=4:hb(2)=7:ifhp=2thenhb(1)=196:hb(2)=199
9865 lb(1)=40:lb(2)=111:lb(3)=hp%(hp,1):hb(3)=hp%(hp,2):aw=1:gosub11760:gosub9896:return
9869 ifhp=1thenhb(3)=4:goto9871
9870 hb(3)=196
9871 printchr$(9)chr$(peek(ph(hp)))c$:poke781,hp+1:sys pt
9872 lb(1)=hp%(hp,1):hb(1)=hp%(hp,2):lb(2)=hp%(hp,3):hb(2)=hp%(hp,4)
9873 lb(3)=40:aw=1:gosub11760:ff=peek(ph(hp)+3)
9876 gosub11235:c4=1:c3=0:c1=0:c2=1
9877 ks$(115)=left$(ks$(115),38):ks$(115)=ks$(115)+str$(hp)+"-"
9878 poke53280,peek(ph(hp)+1):poke53281,peek(ph(hp)+2):return
9896 pokeph(hp),142:z=peek(53272):ifz=23orz=27thenpokeph(hp),14
9897 return
9905 ze=0:sp=0:gosub11050:printks$(a1):sp=23:gz=14:rv=1:p=hp
9907 gosub11303:ifeg<>141theni$=eg$+".h"
9910 return
9932 ff=peek(ph(hp)+1):gosub11170:pokeph(hp)+1,ff:return
9938 ff=peek(ph(hp)+2):gosub11200:pokeph(hp)+2,ff:return
9944 ff=peek(ph(hp)+3):gosub11230:pokeph(hp)+3,ff:return
9950 return
9985 c1=0:c2=1:c4=1:c3=0:return
9990 ifhp=0thenrs=1:return
9991 hr=1:return
9996 ifhp=0thenrs=0:return
9997 hr=0:return
10341 z=1:ifhp<>1thenz=2
10343 ifc1=0thenreturn
10345 h=ba(z)+40*c2+c1:hb(1)=int(h/256):lb(1)=h-256*hb(1)
10346 h=h-c1+39:hb(2)=int(h/256):lb(2)=h-256*hb(2)
10347 poke251,lb(1):poke252,hb(1):poke253,lb(2):poke254,hb(2):sys51248
10350 c1=c1-1:h=40*c2+c1-39:c3=int(h/256):c4=h-256*c3:return
10363 z=1:ifhp<>1thenz=2
10365 ifc1=39thenreturn
10366 h=ba(z)+40*c2+c1:hb(1)=int(h/256):lb(1)=h-256*hb(1)
10367 h=h-c1+39:hb(2)=int(h/256):lb(2)=h-256*hb(2)
10368 poke251,lb(1):poke252,hb(1):poke253,lb(2):poke254,hb(2):sys51353:return
10544 ze=0:sp=0:gosub11050:printks$(6):gosub11050:printks$(2):ifhp=1thenp=1:goto10546
10545 p=2
10546 rv=1:gz=3:sp=37:gosub11303
10548 z=1:ifhp>0thenz=115:ks$(z)=left$(ks$(z),38):ks$(z)=ks$(z)+str$(hp)+"-"
10550 ze=0:sp=0:gosub11050:printks$(z):h=val(eg$):ifh<25orh>100thenreturn
10555 poke56325,h:cb=h:return
10570 ze=c2:sp=0:gosub11050:printchr$(146)l$:return
10584 z=1:ifhp<>1thenz=2
10590 h=40*c2+ba(z):fors1=0to39:k=peek(h+s1):ifk>127thenk=k-128:goto10594
10592 k=k+128
10594 pokeh+s1,k:nexts1:return
10610 ifhp<>1thenhb(1)=196:hb(2)=199:goto10615
10612 hb(1)=4:hb(2)=7
10615 lb(1)=40:lb(2)=111:aw=32:gosub11710:return
10623 if c2=1 then ze=c2:sp=0:gosub11050:printl$:return
10624 ifhp<>1thenhb(1)=196:goto10630
10625 hb(1)=4
10630 poke53027,c2-1:poke53021,80:poke53022,hb(1):sys 52862:return
10657 if c2=21 then ze=c2:sp=0:gosub11050:printl$:return
10658 ifhp<>1thenhb(1)=199:goto10662
10659 hb(1)=7
10662 poke53223,c2-1:poke53217,32:poke53218,hb(1):sys 53056:return
10746 ifc2=21thenc2=20
10750 c2=c2+1:c1=0:h=c2*40-39:c3=int(h/256):c4=h-256*c3:return
11022 printchr$(147):poke53280,0:poke53281,0
11023 poke53265,peek(53265)and239:return
11027 poke53280,mf%(1):poke53281,mf%(2)
11028 poke53265,peek(53265)or16:return
11035 c3=peek(248):c4=peek(247):cp=c3*256+c4+39:c2=int(cp/40):c1=cp-c2*40:return
11050 poke211,sp:poke214,ze:sys58640:return
11170 ff=ff+1:ifff>=15thenff=0
11175 poke53280,ff:return
11200 ff=ff+1:ifff>=15thenff=0
11205 poke53281,ff:return
11230 ff=ff+1:ifff>=15thenff=0
11235 lb(1)=0:hb(1)=216:lb(2)=231:hb(2)=219:aw=ff:gosub11710:poke646,ff:return
11239 lb(1)=ap%(pg,1):hb(1)=ap%(pg,2):lb(2)=ap%(pg,3):hb(2)=ap%(pg,4)
11240 lb(3)=40:hb(3)=196:aw=1:gosub11760:return
11243 lb(1)=40:hb(1)=196:lb(2)=111:hb(2)=199
11244 lb(3)=ap%(pg,1):hb(3)=ap%(pg,2):aw=1:gosub11760:return
11260 poke53272,br%(1):poke56576,peek(56576)and252orbr%(2):poke648,br%(3):return
11303 gosub11050:print;:p3=ze*40+sp+ba(p):p1=int(p3/256):p2=p3-256*p1
11305 poke52445,p2:poke52446,p1:poke52436,gz:poke52437,0:poke199,rv:poke52440,13
11306 poke52441,141:poke52442,0:poke52443,0:poke52444,1:sys51946
11308 if peek(2)=141 then eg=141:goto 11311
11310 poke253,p2:poke254,p1:poke2,gz:poke69,69:poke70,199:sys52493
11311 poke199,0:return
11322 input#15,fe,fe$,h$,z$:fe$=str$(fe)+","+fe$+","+h$+","+z$+" !!!":return
11445 sys51682:eg=peek(2):if eg<>74 and eg<>78 then 11445
11450 return
11455 geteg$:ifeg$=""then11455
11457 eg=asc(eg$):return
11465 gosub11022:printchr$(14)chr$(8)
11470 ze=0:sp=0:gosub11050:printks$(a1)ks$(3)ks$(a2)ks$(3):return
11485 ze=23:sp=0:gosub11050:printks$(4)ks$(11)c$c$:return
11510 return
11585 sp=int((40-len(ag$))/2):gosub11050:printag$c$c$:return
11710 poke251,lb(1):poke252,hb(1):poke253,lb(2):poke254,hb(2):poke2,aw:sys51479:return
11760 iflb(1)=lb(2)andhb(1)=hb(2)thenreturn
11764 poke249,lb(1):poke250,hb(1):poke251,lb(2):poke252,hb(2):poke253,lb(3):poke254,hb(3)
11765 poke2,aw:sys51586:return
11810 poke186,8:poke251,lb(1):poke252,hb(1):poke51713,lb(2)
11815 poke51714,hb(2):poke69,81:poke70,216:poke183,len(qx$):sys51716:return
11860 poke186,8:poke781,lb(1):poke782,hb(1):poke185,0:poke183,len(qx$)
11865 poke187,238:poke188,2:fors1=1tolen(qx$):poke749+s1,asc(mid$(qx$,s1,1))
11870 nexts1:poke780,0:sys65493:return
0 rem-dbii / (c)1985 martin hecht,stgt-
1 dim mf%(3),lb(3),hb(3),me$(2,17),ap%(5,4),ks$(145),f1%(5),f2%(5),f3%(5),af%(5)
2 dim fc%(68),ba(2),p1(4),p2(7),ph(2),hp%(2,4),br%(3),np(3),po(3),op(3)
3 dim dd$(15),sn%(15),ds%(15)
4 dim fo%(20),fo$(20),ro%(15),fd(50,2),vz%(50),fa%(50),f(50)
8 goto79
11 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
12 return
13 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
14 return
15 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
16 return
17 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
18 return
19 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
20 return
21 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
22 return
23 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
24 return
25 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
26 return
27 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
28 return
29 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
30 return
31 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
32 return
33 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
34 return
35 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
36 return
37 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
38 return
39 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
40 return
79 gosub4510:lb(1)=61:hb(1)=154:qx$="mp-p-3":gosub11860
80 lb(1)=232:hb(1)=199:qx$="mp-p-4":gosub11860
81 lb(1)=200:hb(1)=192:qx$="mp-p-5":gosub11860
89 poke55,60:poke56,154:poke51,60:poke52,154
92 gosub4810
165 gosub11022:printchr$(142)chr$(8):ff=mf%(3):gosub11235:poke781,1:syspt
180 me=1:gosub405:gosub11027:eg$=""
182 if xx=1 then ze=21:sp=10:gosub11050:print"{rvon}ausgabe auf drucker!{rvof}"
190 gosub11455
207 ifeg=13thengosub310:goto190
210 ifeg=8thenhp=1:gosub9500:goto165
215 if eg=80 then xx=1:ze=21:sp=10:gosub11050:print"{rvon}ausgabe auf drucker!{rvof}"
216 if eg=79 then xx=0:ze=21:sp=10:gosub11050:print"                    "
220 ifeg=136andme=2then9002
221 ifeg=140andme=2then1965
224 ifeg=144thenff=mf%(1):gosub11170:mf%(1)=ff:goto190
226 ifeg=5thenff=mf%(2):gosub11200:mf%(2)=ff:goto190
227 ifeg=28thenff=mf%(3):gosub11230:mf%(3)=ff:goto190
229 ifeg<133oreg>140then190
234 ifme=2then260
240 oneg-132gosub1015,2007,2213,3010,2657:ifugthenug=0:dc=0:goto165
242 goto190
260 oneg-132gosub7010,7500,6807:ifugthenug=0:goto165
270 goto190
310 ifme=1thenme=2:k=49:goto330
320 me=1:k=50
330 fors1=20to5step-1:ze=s1:sp=5:gosub11050:printks$(110):nexts1:gosub405:poke2004,k:return
405 ze=1:sp=23:gosub11050:printme$(me,1):fors1=2to17
410 ze=s1+3:sp=5:gosub11050:printme$(me,s1):nexts1:return
1015 gosub1915
1052 gosub11455:ifeg=141thengosub1940:return
1053 ifeg=8thenhp=1:gosub9500:gosub1915:goto1052
1055 fors1=19to26:iffc%(s1)<>egthennexts1:goto1052
1060 ons1-18gosub1287,1410,1510,1217,1240,1610,1630,1650:goto1052
1217 ag$=ks$(108)+"dat-dir":ze=23:gosub11585
1220 gosub5815:iffe<>0then ze=23:sp=2:gosub11050:printks$(1)c$c$:poke2,2:sys51833
1225 gosub9782:iffe=0thennn=1:gosub1240
1227 return
1240 fors2=4to20step2:ze=s2:sp=1:gosub11050:printks$(5):ze=s2:sp=19:gosub11050:printks$(8)
1241 ze=s2:sp=30:gosub11050:printks$(9):nexts2
1243 s2=4:fors1=nntonn+8:ifs1>adthens1=nn+9:nexts1:nn=1:return
1245 rv$="":ifs1=sithenrv$=chr$(18)
1250 ze=s2:sp=1:gosub11050:printrv$dd$(s1)chr$(146)
1253 ifsn%(s1)=10thenag$=right$(str$(sn%(s1)),2):goto1260
1255 ag$="0"+right$(str$(sn%(s1)),1)
1260 ze=s2:sp=19:gosub11050:printag$:ag$=str$(ds%(s1)):ag$=right$(ag$,len(ag$)-1)
1267 iflen(ag$)<3thenag$="0"+ag$:goto1267
1270 ze=s2:sp=30:gosub11050:printag$:s2=s2+2:nexts1:nn=s1:return
1287 e=0:ze=0:sp=0:gosub11050:printks$(12):ze=0:sp=25:p=1:gz=14:rv=1:gosub11303
1288 ifeg=141then ze=0:sp=0:gosub11050:printks$(15):return
1290 fors4=1toad:ifdd$(s4)=eg$then1294
1292 nexts4:ife=0thene=1:gosub5815:dd=1:goto1290
1293 ze=0:sp=0:gosub11050:printks$(13):poke2,1:sys51833:goto1287
1294 zw$=eg$:ifsi=0then1297
1295 ze=23:sp=7:gosub11050:printks$(99)+dd$(si)+"{$a0}!"c$c$:gosub 2670:gosub9782
1297 si=s4:ze=23:ag$=ks$(108)+zw$:gosub11585:i$=zw$:gosub5838
1300 gosub9782:ag$=ks$(14):gosub11585:poke2,1:sys51833:gosub9782
1310 ze=0:sp=0:gosub11050:printks$(15):nn=1:gosub1240:return
1410 e=0:ze=0:sp=0:gosub11050:printks$(19):ze=0:sp=23:p=1:gz=14:rv=1:gosub11303
1415 ifeg=141then ze=0:sp=0:gosub11050:printks$(15):return
1420 fors1=1toad:ifdd$(s1)=eg$thenk=s1:goto1430
1425 nexts1:ife=0thene=1:gosub5815:dd=1:goto1420
1427 ze=0:sp=0:gosub11050:printks$(13):poke2,1:sys51833:goto1410
1430 ze=23:sp=7:gosub11050:printks$(20);:gosub11445:gosub9782:ifeg=78then1410
1437 h$=eg$:ze=23:sp=6:gosub11050:printks$(22)h$c$c$:i$=h$+".d":gosub1480:i$=h$+".e"
1438 gosub1480:i$=h$+".i":gosub1480:i$=h$+".r":gosub1480:i$=h$+".z":gosub1480
1445 fors1=ktoad:dd$(s1)=dd$(s1+1):sn%(s1)=sn%(s1+1):ds%(s1)=ds%(s1+1):nexts1
1450 ad=ad-1:gosub5830:gosub9782:ze=23:ag$=ks$(24):gosub11585:poke2,1:sys51833
1455 gosub9782:ze=0:sp=0:gosub11050:printks$(15):ifk<sithensi=si-1:goto1457
1456 ifk=sithensi=0
1457 nn=1:gosub1240:return
1480 print#15,"s:"+i$:return
1510 e=0:ze=0:sp=0:gosub11050:printks$(21):ze=0:sp=10:p=1:gz=29:rv=1:gosub11303
1515 ifeg=141then ze=0:sp=0:gosub11050:printks$(15):return
1517 h1$=left$(eg$,14):h2$=right$(eg$,14)
1520 fors1=1toad:ifdd$(s1)=h2$thenk=s1:goto1537
1525 nexts1:ife=0thene=1:gosub5815:dd=1:goto1520
1527 ze=0:sp=0:gosub11050:printks$(13):poke2,1:sys51833:goto1510
1537 ze=23:ag$=ks$(23)+h2$:gosub11585:i$=h1$+".d="+h2$+".d":gosub1580
1538 i$=h1$+".e="+h2$+".e":gosub1580
1539 i$=h1$+".i="+h2$+".i":gosub1580:i$=h1$+".r="+h2$+".r":gosub1580
1540 i$=h1$+".z="+h2$+".z":gosub1580
1545 dd$(k)=h1$:gosub5830:gosub9782:ze=23:ag$=ks$(25):gosub11585:poke2,1:sys51833
1550 gosub9782:ze=0:sp=0:gosub11050:printks$(15):nn=1:gosub1240:return
1580 print#15,"r:"+i$:return
1610 ff=df%(1):gosub11170:df%(1)=ff:return
1630 ff=df%(2):gosub11200:df%(2)=ff:return
1650 ff=df%(3):gosub11230:df%(3)=ff:return
1915 gosub11022:printchr$(dr)chr$(9):ff=df%(3):gosub11235
1920 poke53280,df%(1):poke53281,df%(2):poke781,7:syspt:gosub11028
1925 nn=1:ifdd=0thendd=1:gosub1217:return
1927 gosub1243:return
1940 ifpeek(53272)=21thendr=142:goto1950
1945 dr=14
1950 ug=1:return
1965 ifsi<>0thengosub11022:ze=15:sp=0:gosub11050:printks$(54)ks$(55):gosub2659
1967 goto7750
2007 gosub11022:printchr$(14):ze=0:sp=0:gosub11050:printks$(18)ks$(3):gosub11485
2010 ze=19:sp=0:gosub11050:printks$(79)chr$(17)ks$(79):gosub11027
2015 e=0:ze=5:sp=3:gosub11050:printks$(16)
2020 sp=22:ze=5:gz=14:rv=0:p=1:gosub11303:ifeg=141thenug=1:return
2025 fors4=1toad:ifdd$(s4)=eg$then2038
2030 nexts4:ife=0thene=1:gosub5815:dd=1:goto2025
2035 ze=20:ag$=ks$(17):gosub11585:poke2,1:sys51833:ze=20:sp=0:gosub11050:printl$c$c$:goto2015
2038 zw$=eg$:ifsi=0then2041
2039 ze=20:sp=7:gosub11050:printks$(99)+dd$(si)+"{$a0}!"c$c$:gosub2670
2040 ze=20:sp=0:gosub11050:printl$c$c$
2041 si=s4
2042 ze=20:ag$=ks$(108)+zw$:gosub11585:i$=zw$:gosub5838:ze=20:sp=0:gosub11050:printl$c$c$
2045 ag$=ks$(14):gosub11585:poke2,1:sys51833:ze=20:sp=0:gosub11050:printl$c$c$:ug=1:return
2213 ifsi=0thenprintchr$(147):ze=10:sp=0:gosub11050:printks$(39):poke2,1:sys51833:ug=1:return
2214 ifat=mtthenprintchr$(147):ze=8:sp=0:gosub11050:printks$(40)ks$(41)ks$(42):ug=1:return
2216 a3=27:dm=4:dc=0:gosub6775
2225 ifug=1or(dc>1anddc<4)thenreturn
2226 gosub6027:fors1=27to40:iffc%(s1)<>egthennexts1:goto2226
2227 ifs1>36thens1=s1-10:goto2235
2230 ons1-26gosub2256,2334,2353,2366,2398,2424,2444,2464,2472,2480:goto2225
2235 ons1-26gosub2487,2533,2380,2642:goto2225
2256 iffa%(nf)=5thengosub2500:gosub2515:goto2264
2258 s1=nf:gosub6160
2260 iffa%(nf)=14thengosub2515
2262 iffa%(nf)=4thengosub2287
2264 ifnf=afthengosub11243:goto2275
2266 nf=nf+1:ll=ll+1:ifll>af%(pg)thengosub6115:ll=1
2268 return
2275 ze=23:sp=5:gosub11050:printks$(35);:gosub11445:gosub9782:ifeg=78thenreturn
2280 gosub2533:return
2287 h$=left$(eg$,10)
2290 ifmid$(h$,3,1)<>"."ormid$(h$,6,1)<>"."thenh5=7:goto2314
2292 h1=val(left$(h$,2)):ifh1=0orh1>31thenh5=7:goto2314
2294 h2=val(mid$(h$,4,2)):ifh2=0orh2>12thenh5=7:goto2314
2296 h3=val(right$(h$,4)):ifh3=0thenh5=7:goto2314
2300 ifh2-3>=0thenh2=h2+1:goto2310
2305 h2=h2+13:h3=h3-1
2310 h4=int(365.25*h3)+int(30.6*h2)+h1-int(h3/100)+int(h3/400)-429
2312 h5=h4-int(h4/7)*7
2314 eg$=h$+"/"+ks$(100+h5):gosub2529:return
2334 ifdc=1thendc=3:return
2335 gosub9782:ze=23:sp=8:gosub11050:printks$(20);:gosub11445
2336 ifeg=78then2342
2338 gr=142:ifpeek(53272)=27thengr=14
2339 gosub2432:ifdc<>4thengosub11022:br%(1)=21:br%(2)=3:br%(3)=4:gosub11260:ug=1
2340 dc=2:return
2342 gosub9782:return
2353 ifpg=sethenreturn
2354 gosub11243:en=en+af%(pg):nf=en:pg=pg+1:gosub6010:ll=1:return
2366 ifpg=1thenreturn
2368 gosub11243:pg=pg-1:gosub6010:en=en-af%(pg):nf=en:ll=1:return
2380 ze=0:sp=0:gosub11050:printks$(6):gosub11050:printks$(32):p=2:rv=1:gz=2
2383 sp=36:ze=0:gosub11303:h=val(eg$):if(h<1orh>se)orh=pgthen2390
2387 ifh>pgthenfors1=pgtoh-1:en=en+af%(s1):nexts1:nf=en:goto2389
2388 fors1=htopg-1:en=en-af%(s1):nexts1:nf=en
2389 ll=1:gosub11243:pg=h:gosub6010
2390 ze=0:sp=0:gosub11050:printks$(27):ze=0:sp=9:gosub11050:printchr$(18)dd$(si)chr$(146):return
2398 gosub11243:pg=es:nf=1:ll=1:en=1:gosub6010:return
2424 gosub2432:pg=es:nf=1:ll=1:en=1:gosub6010:return
2432 pg=es:gosub6010:s1=0
2433 fornf=1toaf:s1=s1+1:ifs1<=af%(pg)then2438
2435 gosub11243
2436 pg=pg+1:ifaf%(pg)=0then2436
2437 s1=1:gosub6010
2438 gosub2444:nextnf:gosub11243:return
2444 iffd(nf,2)=1thenpokefd(nf,1),102:return
2445 h1=int(fd(nf,1)/256):h2=fd(nf,1)-h1*256
2447 h5=fd(nf,1)+fd(nf,2)-1:h3=int(h5/256):h4=h5-h3*256
2448 lb(1)=h2:hb(1)=h1:lb(2)=h4:hb(2)=h3:aw=102:gosub11710:return
2464 ff=f1%(pg):gosub11170:f1%(pg)=ff:return
2472 ff=f2%(pg):gosub11200:f2%(pg)=ff:return
2480 ff=f3%(pg):gosub11230:f3%(pg)=ff:return
2487 gosub11243:s7=0:zp=pg:gosub6140:s2=0:s4=0:zf=nf:pg=es:gosub6010
2488 fors1=1toaf:s7=s7+1:ifs7>af%(pg)thengosub11243:gosub2496
2489 iffa%(s1)=5thens2=s2+1:gosub2504:nf=s1:s4=s4+1:gosub2517
2490 iffa%(s1)=14thens4=s4+1:nf=s1:gosub2517
2492 nexts1:gosub11243:nf=zf:pg=zp:gosub6010:return
2496 pg=pg+1:ifaf%(pg)=0then2496
2497 s7=1:gosub6010:return
2500 fors2=1tos5:ifro%(s2)<>nfthennexts2
2504 ons2gosub11,13,15,17,19,21,23,25,27,29,31,33,35,37,39
2506 eg$=str$(r):return
2515 fors4=1tos3:iffo%(s4)<>nfthennexts4
2517 h$=str$(val(eg$))
2520 fors6=1tolen(h$):ifmid$(h$,s6,1)<>"." thennexts6
2521 h1=val(left$(fo$(s4),2)):h2=val(right$(fo$(s4),2))
2522 h3=h1:ifh1>s6-1thenh3=s6-1
2524 h1$=mid$(h$,s6-h3,h3):h2$=mid$(h$,s6+1,h2)
2527 eg$=left$(l$,h1-len(h1$))+h1$+"."+h2$+left$(ks$(33),h2-len(h2$))
2528 ifh2=0theneg$=left$(eg$,len(eg$)-1)
2529 h1=fd(nf,1)-50176:ze=int(h1/40):sp=h1-40*ze:gosub11050:printeg$:return
2533 gosub11243:gosub9782:zp=pg:pg=es:gosub6010:ze=23:sp=5:gosub11050:printks$(38)c$c$
2534 ag$="":s2=0:open1,8,2,dd$(si)+".r,l,"+chr$(254)
2536 ifgf>0thengosub2587:p1=0:goto2538
2537 p1=1:fors1=1to3:po(s1)=np(s1):nexts1
2538 fors1=1to3:op(s1)=po(s1):nexts1
2539 ifpo(3)=1thene=0:goto2543
2540 e=1:print#15,"p"+chr$(2)+chr$(po(1))+chr$(po(2))+chr$(1)
2541 poke2,po(3)-1:poke69,82:poke70,177:sys52453
2543 print#15,"p"+chr$(2)+chr$(po(1))+chr$(po(2))+chr$(1)
2545 fors1=1toaf:h1=int(fd(s1,1)/256):h2=fd(s1,1)-h1*256
2546 g1=int(fd(s1,2)/255):g2=fd(s1,2)-g1*255
2548 s2=s2+1:ifs2<=af%(pg)then2552
2549 pg=pg+1:ifaf%(pg)=0then2549
2550 s2=1:gosub6010
2552 fors6=1tog1+1:ifs6<>g1+1thenh4=255:goto2554
2553 h4=g2
2554 poke253,h2:poke254,h1:poke2,h4:poke69,69:poke70,199:sys52493
2555 ifs6<>g1+1thenh3=h1*256+h2+255:h1=int(h3/256):h2=h3-h1*256
2556 ifs1=nsands6=1theni$=left$(eg$,as)
2560 l1=255-po(3)
2564 ifl1>h4thenag$=ag$+eg$:po(3)=po(3)+h4:nexts6:nexts1:goto2571
2566 ifl1=h4thenag$=ag$+eg$:gosub2582:nexts6:nexts1:goto2574
2568 ag$=ag$+left$(eg$,l1):gosub2582:h=h4-l1:ag$=right$(eg$,h)
2569 ifh=254thengosub2582:nexts6:nexts1:goto2574
2570 po(3)=po(3)+h:nexts6:nexts1
2571 print#15,"p"+chr$(2)+chr$(po(1))+chr$(po(2))+chr$(po(3))
2572 poke2,255-po(3):poke69,82:poke70,178:sys52453
2573 print#15,"p"+chr$(2)+chr$(po(1))+chr$(po(2))+chr$(1):print#1,r1$+ag$+r2$;
2574 gosub11322:close1:ifp1=1thenfors1=1to3:np(s1)=po(s1):nexts1
2575 fors1=1to3:po(s1)=op(s1):next:gosub6215:gosub9782:ze=23:sp=5:gosub11050:printks$(37)c$c$
2576 poke2,1:sys51833:gosub9782:ag$="":r1$="":r2$="":ifdc=1thendc=2:return
2577 ze=23:sp=7:gosub11050:printks$(36);:gosub11445:gosub9782
2578 ifeg=78thenpg=zp:gosub6010:return
2579 gosub2424:return
2582 ife=1thene=0:print#1,r1$+ag$;:r1$="":goto2584
2583 print#1,ag$;
2584 po(3)=1:po(1)=po(1)+1:ifpo(1)=256thenpo(1)=0:po(2)=po(2)+1
2585 print#15,"p"+chr$(2)+chr$(po(1))+chr$(po(2))+chr$(po(3)):ag$="":return
2587 gf=gf-1:h1=i2+gf*3:hb(1)=int(h1/256):lb(1)=h1-256*hb(1):h1=h1+1
2588 hb(2)=int(h1/256):lb(2)=h1-256*hb(2)
2590 lb(3)=37:hb(3)=194:aw=1:gosub11760
2595 fors1=1to3:po(s1)=peek(49700+s1):nexts1:return
2642 ze=0:sp=0:gosub11050:printks$(6):gosub11050:printks$(2):p=2:rv=1:gz=3:sp=37:gosub11303
2643 ze=0:sp=0:gosub11050:printks$(a3):ze=0:sp=9:gosub11050:printchr$(18)dd$(si)chr$(146)
2644 h=val(eg$):ifh<25orh>100thenreturn
2645 poke56325,h:return
2657 ifsi=0thenprintchr$(147):ze=10:sp=0:gosub11050:printks$(39):poke2,1:sys51833:ug=1:return
2658 gosub11022
2659 printchr$(14)chr$(8):ze=9:sp=0:gosub11050:printks$(44)
2660 ze=0:sp=0:gosub11050:printks$(43)ks$(3):ze=5:sp=7:gosub11050:printks$(145);:gosub11027
2665 gosub11445:ifeg=78thenug=1:return
2668 printchr$(74)
2670 i$=dd$(si)+".i":print#15,"s:"+i$
2672 open1,8,2,i$+",s,w":print#1,at,r$,mt,r$,ea,r$,gf
2675 print#1,np(1),r$,np(2),r$,np(3):close1:h1=int(ea/256):h2=ea-256*h1
2677 lb(1)=154:hb(1)=246:lb(2)=h2:hb(2)=h1:lb(3)=0:hb(3)=160:aw=1:gosub11760
2678 h3=40960+ea-i1:h1=int(h3/256)
2680 h2=h3-256*h1:i$=dd$(si)+".s":print#15,"s:"+i$:si=0
2682 lb(1)=0:hb(1)=160:lb(2)=h2:hb(2)=h1:qx$=i$:gosub11810:i$=dd$(si)+".r":gosub5830
2684 fors1=11to39step2:qx$=ks$(45)+ks$(45):lb(1)=s1:gosub6960:next s1:poke601,15
2686 gosub5758:lb(1)=154:hb(1)=246:lb(2)=255:hb(2)=255:aw=32:gosub11710:ug=1:return
3010 ifsi=0thenprintchr$(147):ze=10:sp=0:gosub11050:printks$(39):poke2,1:sys51833:ug=1:return
3012 ifat=0thenprintchr$(147):ze=10:sp=0:gosub11050:printks$(34):poke2,1:sys51833:ug=1:return
3015 sl=-1:a3=28:dm=5:gosub6775
3016 if xx=1 then ze=0:sp==sgnsqrgosub>>050:print"{rvon}p{rvof}";
3025 ifug=1thendc=0:return
3026 gosub11455:ifeg=8thengosub6131:goto3030
3029 if eg=80 then xx=1:ze=0:sp=24:gosub11050:print"{rvon}p{rvof}";
3030 if eg=79 then xx=0:ze=0:sp=24:gosub11050:print"{rvon}/{rvof}";
3031 if eg=67 then gosub 3500
3032 fors1=41to56:iffc%(s1)<>egthennexts1:goto3026
3035 ifs1>50thens1=s1-10:goto3045
3040 ons1-40gosub2334,3065,3080,3092,2464,2472,2480,3130,3181,3337:goto3025
3045 ons1-40gosub3341,3345,3355,3370,3392,3425:goto3025
3065 ifpg=sethenreturn
3070 pg=pg+1:gosub6010:return
3080 ifpg=1thenreturn
3082 pg=pg-1:gosub6010:return
3092 ze=0:sp=0:gosub11050:printks$(6):ze=0:sp=0:gosub11050:printks$(32):p=2:rv=1:gz=2
3095 sp=36:ze=0:gosub11303:h=val(eg$):if(h<1orh>se)orh=pgthen3115
3100 pg=h:gosub6010
3115 ze=0:sp=0:gosub11050:printks$(28):ze=0:sp=9:gosub11050:printchr$(18)dd$(si)chr$(146):return
3130 ifsl=-1then3134
3131 gosub9782:ze=23:sp=2:gosub11050:printks$(50);:gosub11445:ifeg=78thensl=0:goto3134
3132 t3=sl:gosub3171:goto3157
3134 gosub9782:gosub2432:pg=sf:gosub6010
3135 h1=fd(ns,1)-50176:c1=int(h1/40):c2=h1-40*c1
3137 h3=int(fd(ns,1)/256):h4=fd(ns,1)-h3*256
3140 g1=int(fd(ns,2)/256):g2=fd(ns,2)-g1*256
3142 ze=23:sp=7:gosub11050:printks$(46)c$c$
3145 ze=c1:sp=c2:gosub11050:print;:lb(1)=0:lb(2)=1:gosub6920:eg=peek(2)
3147 ifeg=141thengosub9782:pg=es:gosub6010:return
3150 poke253,h4:poke254,h3:poke2,as:poke69,73:poke70,128:sys52493:gosub6305
3152 ife<>0thenze=23:sp=6:gosub11050:printks$(48)c$c$:poke2,1:sys51833:gosub9782:goto3142
3155 gosub3171:sh=t3:sl=t3
3157 ifsl<=shthensl=sl-1:gosub3176:ife<>0thensl=sh:goto3163
3160 ifsl<=shthen3165
3163 sl=sl+1:gosub3176:ife<>0thensl=-1:return
3165 ze=23:sp=5:gosub11050:printks$(51)c$c$:return
3171 gosub6330:gosub6355:return
3176 t4=i3+sl*(as+3):h1=int(t4/256):h2=t4-256*h1
3177 lb(1)=1:gosub6935:e=peek(2):return
3181 t3=-1:ifcd=-1then3185
3182 gosub9782:ze=23:sp=1:gosub11050:printks$(26);:gosub11445:gosub9782:ifeg=78thencd=-1:goto3184
3183 t3=cd:goto3282
3184 fors1=1toaf:vz%(s1)=0:nexts1
3185 gosub2424:gosub9782:ze=23:sp=4:gosub11050:printks$(97)c$c$:pg=es:nf=1:ll=1:en=1
3186 gosub6010:a4=98:ud=0
3190 ifud=1thenud=0:return
3195 gosub6027:fors1=57to67:iffc%(s1)<>egthennexts1:goto3195
3205 ons1-56gosub3225,2353,2366,2380,3211,2398,2424,2444,2487,3240,3269,2642:goto3190
3211 iffa%(nf)=5thengosub2500:gosub2515:goto3215
3212 s1=nf:gosub6160
3213 iffa%(nf)=14thengosub2515
3214 iffa%(nf)=4thengosub2287
3215 ifnf=afthengosub11243:goto3218
3216 nf=nf+1:ll=ll+1:ifll>af%(pg)thengosub6115:ll=1
3217 return
3218 gosub9782:ze=23:sp=6:gosub11050:printks$(47);:gosub11445:gosub9782:ifeg=78thenreturn
3219 gosub3269:return
3225 gosub9782:ze=23:sp=8:gosub11050($ce99)ks$(20);:gosub11445
3227 ifeg=78thenze=23:sp=4:gosub11050:printks$(97)c$c$:return
3230 pg=es:gosub6010:s1=0:fornf=1toaf:s1=s1+1:ifs1<=af%(pg)then3234
3231 gosub11243
3232 pg=pg+1:ifaf%(pg)=0then3232
3233 s1=1:gosub6010
3234 pokefd(nf,1)-1,60:pokefd(nf,1)+fd(nf,2),62:gosub2444
3235 nextnf:gosub11243:gosub9782:t3=0:ud=1:return
3240 p1=fd(nf,1)-1:h1=p1-50176:ze=int(h1/40):sp=h1-ze*40:gosub11050:print;
3242 sys51682:eg=peek(2):if eg=13 then return
3243 ifeg=76thenpokep1,60:pokep1+fd(nf,2)+1,62:vz%(nf)=0:goto3242
3245 ifeg=133thenpokep1,188:goto3260
3247 ifeg=134thenpokep1,190:goto3260
3250 ifeg=135thenpokep1,162:goto3260
3251 ifeg=136thenpokep1,142:goto3260
3252 ifeg=137thenpokep1,139:goto3260
3255 ifeg=138thenpokep1,135:goto3260
3257 ifeg=139thenpokep1+fd(nf,2)+1,143:vz%(nf)=vz%(nf)or128:goto3242
3258 goto3242
3260 vz%(nf)=(vz%(nf)and128)or(eg-130):goto3242
3269 gosub11243:pg=es:gosub6010:i4=45160:s2=0:fors1=1toaf:s2=s2+1:ifs2<=af%(pg)then3273
3270 gosub11243
3271 pg=pg+1:ifaf%(pg)=0then3271
3272 s2=1:gosub6010
3273 ifpeek(fd(s1,1))=42thenvz%(s1)=1:goto3280
3274 if(vz%(s1)and127)=5then3280
3275 iffd(s1,2)=1thenpokei4,peek(fd(s1,1)):i4=i4+1:goto3280
3276 hb(1)=int(fd(s1,1)/256):lb(1)=fd(s1,1)-hb(1)*256
3277 h1=fd(s1,1)+fd(s1,2)-1:hb(2)=int(h1/256):lb(2)=h1-hb(2)*256
3278 hb(3)=int(i4/256):lb(3)=i4-256*hb(3)
3279 aw=1:gosub11760:i4=i4+fd(s1,2)
3280 p1=fd(s1,1)-1:pokep1,60:pokep1+fd(s1,2)+1,62:nf=s1:gosub2444:nexts1:gosub11243
3281 i4=i4+1:h1=int(i4/256):h2=i4-256*h1:gosub6950
3282 gosub9782:ze=23:sp=11:gosub11050:printks$(109)c$c$:open1,8,2,dd$(si)+".r,l,"+chr$(254)
3283 ift3=at-1thenclose1:ze=23:ag$=ks$(53):gosub11585:cd=-1:ud=1:return
3284 t3=t3+1:gosub6330:print#15,"p"+chr$(2)+chr$(po(1))+chr$(po(2))+chr$(po(3))
3285 i4=45160
3286 a4=0:l2=0:fors1=1toaf:s6=0:ifvz%(s1)=1thengosub3328:nexts1:goto3325
3287 g1=int(fd(s1,2)/255):g2=fd(s1,2)-g1*255
3288 fors6=1tog1+1:l1=255-po(3):ifs6<>g1+1thenh4=255:goto3290
3289 h4=g2
3290 ifz=1thenz=0:print#15,"p"+chr$(2)+chr$(po(1))+chr$(po(2))+chr$(po(3))
3292 ifl1>h4thenqx=h4:gosub6905:po(3)=po(3)+h4:goto3303
3295 ifl1=h4thenqx=h4:gosub6905:gosub6396:goto3303
3297 poke2,l1:poke69,90:poke70,215:sys52453:gosub6396:qx=h4-l1:gosub6905:eg$=zw$+eg$
3300 ifh4-l1=254thengosub6396:goto3303
3301 po(3)=po(3)+h4-l1
3303 p1=vz%(s1)and127:p2=vz%(s1)and128
3304 ifp1=5andp3=0thenp3=1:i4=i4-fd(s1-1,2)
3305 ifp1=5then3307
3306 ifvz%(s1-1)=5thenp3=0:i4=i4+fd(s1-1,2)
3307 h1=int(i4/256):h2=i4-256*h1
3308 poke251,h2:poke252,h1:poke69,69:poke70,199:sys49704:e=peek(2)
3309 ifp2=128thena4=1
3313 ifp1=3ande=2then3322
3314 ifp1=7and(e=2ore=0)then3322
3315 ifp1=4ande=1then3322
3316 ifp1=8and(e=1ore=0)then3322
3317 ifp1=5ande=0then3322
3318 ifp1=6ande<>0then3322
3319 ifp1<>6ande=0then3322
3320 ifp2=128thengosub3333:s6=g1+1:nexts6:nexts1:goto3325
3321 s6=g1+1:nexts6:s1=af:nexts1:goto3283
3322 ifp2=128thenl2=1
3323 ifp1<>5theni4=i4+h4
3324 nexts6:nexts1
3325 ifa4=1andl2<>1then3283
3326 close1:cd=t3:gosub6330:gosub6355:ud=1:return
3328 ifs6=g1+1thenreturn
3329 z=1:h1=fd(s1,2)-s6*255:h2=255-po(3)
3330 ifh2>h1thenpo(3)=po(3)+h1:return
3331 po(3)=1:po(1)=po(1)+1:ifpo(1)=256thenpo(1)=0:po(2)=po(2)+1
3332 h1=h1-h2:h2=254:goto3330
3333 gosub3328:ifp1<>5theni4=i4+fd(s1,2)-(s6-1)*255
3334 return
3337 ift3=at-1thengosub9782:ze=23:ag$=ks$(53):gosub11585:poke2,1:sys51833:gosub9782:return
3338 t3=t3+1:gosub3171:return
3341 ift3=0ort3=-1thengosub9782:ze=23:ag$=ks$(52):gosub11585:poke2,1:sys51833:gosub9782:return
3342 t3=t3-1:gosub3171:return
3345 ift3=-1thengosub9782:ze=23:ag$=ks$(96):gosub11585:poke2,1:sys51833:gosub9782:return
3347 t3=0:gosub3171:return
3355 ift3=-1thengosub9782:ze=23:ag$=ks$(96):gosub11585:poke2,1:sys51833:gosub9782:return
3357 t3=at-1:gosub3171:return
3370 ifdc=0thenze=23:sp=6:gosub11050:printks$(59)c$c$:poke2,1:sys51833:gosub9782:return
3375 ze=23:sp=8:gosub11050:printks$(20);:gosub11445:gosub9782:ifeg=78thenreturn
3380 ze=23:sp=7:gosub11050:printks$(10)c$c$:gosub6255:gosub2432:pg=es:gosub6010:dc=0:t3=0
3382 gosub9782:ze=23:sp=8:gosub11050:printks$(80)c$c$:poke2,1:sys51833:gosub9782:return
3392 ifdc=0thenze=23:sp=6:gosub11050:printks$(59)c$c$:poke2,1:sys51833:gosub9782:return
3400 ze=23:sp=8:gosub11050:printks$(20);:gosub11445:gosub9782:ifeg=78thenreturn
3405 ze=23:sp=6:gosub11050:printks$(81)c$c$:gosub6255
3407 pg=es:nf=1:ll=1:en=1:gosub6010:a4=35:gosub2226:gosub9782:ifdc=2thenreturn
3410 at=at+1:ds%(si)=at:gosub2533:gosub9782:return
3425 ifat=mtthenprintchr$(147):ze=8:sp=0:gosub11050:printks$(40)ks$(41)ks$(42):ug=1:return
3428 gosub9782:ze=23:sp=9:gosub11050:printks$(95)c$c$
3430 pg=es:nf=1:ll=1:en=1:gosub6010:a4=35:dc=4:gosub2226:dc=0:gosub9782:return
3500 ift3=-1thengosub9782:ze=23:ag$=ks$(52):gosub11585:poke2,1:sys51833:gosub9782:return
3501 gosub 3171:return
4510 printchr$(147)chr$(142)chr$(8):poke53280,0:poke53281,0:poke211,8:poke214,11
4530 sys58640:printchr$(30)"{rvon} einen moment bitte !!! {rvof}":return
4810 ba(1)=1024:ba(2)=50176:dr=142:rs=0:hp=0:pt=39491:si=0:i1=63130:i2=i1+2
4815 i3=i1+152:mf%(1)=0:mf%(2)=0:mf%(3)=5:df%(1)=0:df%(2)=0:df%(3)=5:a3=0:a4=0
4820 ff=0:me=0:ug=0:ze=0:sp=0:fe=0:nn=0:ad=0:rv=0:gz=0:p=0:dd=0:dm=0:nf=0:ll=0
4825 en=0:pg=0:fm=0:fe$="":hz=0:c1=0:c2=0:c3=0:c4=0:hr=0:ea=0:gf=0:ns=0:sl=-1
4840 e=0:eg$="":eg=0:k=0:s1=0:ag$="":s2=0:rv$="":i$="":h$="":h1$="":h2$="":h=0
4842 h1=0:h2=0:h3=0:h4=0:h5=0:s6=0:s4=0:h3$="":zp=0:g1=0:g2=0:zw$="":s7=0:zf=0
4844 sz=0:sc=0:a1=0:z$="":z=0:l1=0:l2=0:cp=0:p3=0:p2=0:p1=0:cb=0:s=0:sh=0
4846 a2=0:t5=0:t1=0:t2=0:t3=0:t4=0:t1$="":i4=0:cd=-1:r1$="":r2$="":ud=0
4848 af=0:gr=0:se=0:es=0:s5=0:at=0:mt=0:s3=0:dl=0:sf=0:lf=0:zg$="":as=0:dc=0
4860 poke 56325,51:poke 650,128:open15,8,15:ti$="000000"
4861 l$="                                        ":c$=chr$(145):r$=chr$(13)
5005 lb(1)=0:hb(1)=240:lb(2)=153:hb(2)=246:aw=32:gosub11710
5015 lb(1)=154:hb(1)=246:lb(2)=255:hb(2)=255:aw=32:gosub11710
5027 gosub5758
5110 readsz
5115 fors1=1tosz:readsc:fors2=1tosc:readme$(s1,s2):nexts2:nexts1
5131 fors1=1to5:fors2=1to4:readap%(s1,s2):nexts2:nexts1
5135 fors1=1to2:fors2=1to4:readhp%(s1,s2):nexts2:nexts1:ph(1)=52566:ph(2)=52570
5139 readsz:fors1=1tosz:readks$(s1):nexts1
5144 readfm:fors1=1tofm:readfc%(s1):nexts1
5146 return
5150 data2
5156 data16,"     datenpflege"
5158 data"{CBM-@}{CBM-@}{CBM-@}{CBM-@}","{CBM-G}f1{CBM-M} : --- datei-directory  ---","{CBM-T}{CBM-T}{CBM-T}{CBM-T}"
5160 data"{CBM-@}{CBM-@}{CBM-@}{CBM-@}","{CBM-G}f3{CBM-M} : --- datei einladen   ---","{CBM-T}{CBM-T}{CBM-T}{CBM-T}"
5162 data"{CBM-@}{CBM-@}{CBM-@}{CBM-@}","{CBM-G}f5{CBM-M} : --- daten eingeben   ---","{CBM-T}{CBM-T}{CBM-T}{CBM-T}"
5164 data"{CBM-@}{CBM-@}{CBM-@}{CBM-@}","{CBM-G}f7{CBM-M} : --- daten ausgeben   ---","{CBM-T}{CBM-T}{CBM-T}{CBM-T}"
5168 data"{CBM-@}{CBM-@}{CBM-@}{CBM-@}","{CBM-G}f2{CBM-M} : --- datei speichern  ---","{CBM-T}{CBM-T}{CBM-T}{CBM-T}"
5190 data17,"sonderfunktionen"
5192 data"{CBM-@}{CBM-@}{CBM-@}{CBM-@}","{CBM-G}f1{CBM-M} : -- directory ausgeben   --","{CBM-T}{CBM-T}{CBM-T}{CBM-T}"
5194 data"{CBM-@}{CBM-@}{CBM-@}{CBM-@}","{CBM-G}f3{CBM-M} : -- disk-kommando senden --","{CBM-T}{CBM-T}{CBM-T}{CBM-T}"
5196 data"{CBM-@}{CBM-@}{CBM-@}{CBM-@}","{CBM-G}f5{CBM-M} : -- zeichensatz einladen --","{CBM-T}{CBM-T}{CBM-T}{CBM-T}"
5200 data"---------------------------------"
5202 data"{CBM-@}{CBM-@}{CBM-@}{CBM-@}","{CBM-G}f7{CBM-M} : -- lademenue aufrufen   --","{CBM-T}{CBM-T}{CBM-T}{CBM-T}"
5204 data"{CBM-@}{CBM-@}{CBM-@}{CBM-@}","{CBM-G}f8{CBM-M} : -- programm beenden     --","{CBM-T}{CBM-T}{CBM-T}{CBM-T}"
5250 data0,160,71,163,72,163,143,166,144,166,215,169,216,169,31,173
5252 data32,173,103,176
5277 data0,240,71,243,82,243,153,246
5351 data145
5352 data"kein datei-directory auf diskette !!"
5354 data"{rvon}100<-langsamer{SHIFT--}schneller->25+'return'{rvof}"
5356 data"{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}{CBM-T}"
5358 data"{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"
5360 data".............."
5362 data"{rvon}                                        {rvof}"
5364 data"Unter welchem Namen wurde der Zeicheng. "
5368 data".."
5370 data"..."
5372 data"datensatz wird geloescht !"
5374 data " >>>> Hauptmenue: 'Shift'+'Return' <<<<"
5376 data"{rvon}dt-laden/name d. datei? >              <{rvof}"
5378 data"{rvon}     diese datei existiert nicht !!     {rvof}"
5380 data"datei ist eingeladen !"
5382 data"{rvon}-database 64------------datei-directory-{rvof}"
5384 data"Name der Datei ?: >              <"
5386 data"Diese Datei existiert nicht !!"
5388 data" Database 64             Datei einladen "
5390 data"{rvon}  dt-loeschen/name ?: >              <  {rvof}"
5392 data"sind sie sicher ? (j/n)"
5394 data"{rvon}dt-umben/>              =              <{rvof}"
5396 data"scratching : "
5398 data"renaming : "
5400 data"datei ist geloescht !"
5402 data"datei ist umbenannt !"
5404 data"mit alter maske weitersuchen ? (j/n)"
5406 data"{rvon}-datei: >              <-/daten-eingabe-{rvof}"
5408 data"{rvon}-datei: >              <-/daten-ausgabe-{rvof}"
5410 data"{rvon}-datei: >              <-/listenausgabe-{rvof}"
5412 data" Database 64          Zeichensatz laden "
5414 data" f1 "
5416 data"{rvon}--seitennummer (1-5) ? + 'return' :>  <-{rvof}"
5418 data"000000000000000"
5420 data"{rvon}      keine datensaetze vorhanden!      {rvof}"
5422 data"datensatz abspeichern ? (j/n) "
5424 data"eingabe loeschen ? (j/n) "
5426 data"datensatz ist abgespeichert !"
5428 data"datensatz wird abgespeichert !"
5430 data"{rvon}       keine datei im rechner !!!       {rvof}"
5432 data"    --- die datei ist belegt !! ---     "
5434 data"{down}{down}    es koennen keine weiteren daten     "
5436 data"{down}          eingegeben werden !"
5438 data" Database 64            Datei speichern "
5440 data" (Die Datei im Rechner wird geloescht!) "
5442 data":::::::::::::::::::::::::::::::::::::::"
5444 data"bitte schluessel eingeben!"
5446 data"mit suche beginnen ? (j/n) "
5448 data"schluessel existiert nicht !"
5450 data"datensatz wird eingeladen!"
5452 data"naechsten datensatz ausgeben ?(j/n)"
5454 data"weitere datensaetze vorhanden!"
5456 data"anfang der datei erreicht!"
5458 data"ende der datei erreicht!"
5460 data"{rvon}    Vor Beendung des Programms muss     {rvof}"
5462 data"{rvon}    die Datei abgespeichert werden!     {rvof}"
5464 data
5466 data
5468 data
5470 data"kein datensatz im rechner !!"
5472 data" Database 64                  Directory "
5474 data"{rvon}        {rvof}"
5476 data"     "
5478 data"{rvon}     Weiter mit 'Space'    {rvof}"
5480 data"                            "
5482 data" Database 64             Disk-Kommandos "
5484 data"  Saemtliche Disk-Kommandos koennen in  "
5486 data"  folgender,abgekuerzter Form eingege-  "
5488 data"  ben werden:"
5490 data"    k:...................._(Dateiname,  "
5492 data"    ^                       usw.)         "
5494 data"  (Kommando)"
5496 data"  z.B.: Datei umbenennen:               "
5498 data"                   >r:neuname=altname<  "
5500 data"        Datei loeschen:                 "
5502 data"                   >s:dateiname<          "
5504 data"------------------------------------  "
5506 data"  {rvon}Ihr Kommando? : {rvof} > :"
5508 data"<  + 'Return'        "
5510 data"  {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-*}{SHIFT-*}  "
5512 data"datensatz ist geloescht!"
5514 data"bitte aenderungen eingeben !"
5516 data"Sind Sie sicher ? (j/n) "
5518 data"Kommandoeingabe loeschen ? (j/n) "
5520 data"Sie haben mit dem Programm"
5522 data" Database 64           Programm beenden "
5524 data"Sind Sie sicher,dass Sie"
5526 data"das Programm beenden"
5528 data"wollen ? (j/n) "
5530 data"gearbeitet !"
5532 data" Stunde "
5534 data" Minute "
5536 data" Sekunde "
5538 data"und "
5540 data"{left}n "
5542 data"bitte daten eingeben !"
5544 data"keine datensaetze vorhanden!"
5546 data"bitte selektionsmaske eingeben !"
5548 data"mit selektion beginnen ? (j/n)"
5550 data"saving : "
5552 data"mo"
5554 data"di"
5556 data"mi"
5558 data"do"
5560 data"fr"
5562 data"sa"
5564 data"so"
5566 data"f!"
5568 data"loading : "
5570 data"selektion beginnt!"
5572 data"                                  "
5574 data
5576 data
5578 data"   abgespeichert ? : >              <"
5580 data
5582 data "{rvon}-database 64---------------helpscreen"
5584 data"{rvon}-hs speichern/name ?: >              < -{rvof}"
5586 data"{rvon}-hs laden  /  name ?: >              < -{rvof}"
5588 data"helpscreens vertauschen (j/n) ? "
5590 data,,,,,,,,,,,,,,,,,,,,,,,,
5640 data" Database 64         Lademenue aufrufen "
5642 data"Sind Sie sicher ? (j/n) "
5670 data67
5674 data19,18,146,20,148,144,5,28,134,133,147,137,138,13,135,136,139,3
5716 data133,134,135,137,136,144,5,28
5735 data13,141,135,136,19,147,76,144,5,28,86,83,140,3
5745 data141,135,136,140,144,5,28,73,70,78,86,69,76,68,82,65
5755 data141,135,136,140,13,19,147,76,86,77,75,3
5758 lb(1)=0:hb(1)=208:lb(2)=255:hb(2)=223:lb(3)=0:hb(3)=224:aw=3:gosub11760
5759 p1(1)=58160:p1(3)=59184:p1(2)=60208:p1(4)=61232
5760 fors2=1to2:p1=p1(s2):fors1=p1top1+6:pokes1,0:nexts1:pokep1+7,24:nexts2
5762 fors2=3to4:p1=p1(s2):fors1=p1top1+6:pokes1,255:nexts1:pokep1+7,231:nexts2
5765 return
5815 open1,8,2,"dat-dir,s,r":gosub11322:iffe<>0then5825
5820 si=0:input#1,ad:fors1=1toad:input#1,dd$(s1),sn%(s1),ds%(s1):nexts1
5825 close1:return
5830 i$="dat-dir":print#15,"s:"+i$:open1,8,2,"dat-dir,s,w"
5832 print#1,ad:fors1=1toad:print#1,dd$(s1)r$sn%(s1)r$ds%(s1):nexts1
5833 close1:return
5838 open1,8,2,i$+".d,s,r"
5840 input#1,cb,dl,sf,ns,es,af:poke56325,cb
5842 fors1=1toaf:fors2=1to2:input#1,fd(s1,s2):nexts2:nexts1
5845 input#1,lf:fors1=1toaf:input#1,fa%(s1):nexts1
5850 input#1,se:fors1=1tose:input#1,af%(s1):nexts1
5855 input#1,s3:ifs3=0then5861
5860 for s1=1tos3:input#1,fo%(s1),fo$(s1):nexts1
5861 input#1,s5:ifs5=0then5878
5867 s2=11:fors1=1tos5:input#1,ro%(s1),eg$
5870 qx$="r="+eg$:lb(1)=s2:gosub6960
5872 s2=s2+2:nexts1:poke601,15
5878 input#1,zg$,as,gr:fors1=1tose:input#1,f1%(s1),f2%(s1),f3%(s1):nexts1
5880 close1
5895 lb(1)=0:hb(1)=160:qx$=i$+".e":gosub11860
5900 ifzg$="k"then5940
5905 lb(1)=0:hb(1)=224:qx$=zg$+".z":gosub11860
5940 open1,8,2,i$+".i,s,r":input#1,at,mt:ifat=0thenclose1:goto5950
5942 input#1,ea,gf,np(1),np(2),np(3):close1:lb(1)=154:hb(1)=246:qx$=i$+".s"
5943 gosub11860:return
5950 gf=0:np(1)=1:np(2)=0:np(3)=1:ea=i3:return
5985 ifpg=sethenreturn
5987 gosub11243:pg=pg+1:goto5994
5990 ifpg=1thenreturn
5992 gosub11243:pg=pg-1
5994 gosub6010:return
5998 ze=0:sp=0:gosub11050:printks$(6):gosub11050:printks$(32)
6000 p=2:rv=1:gz=2:sp=34:ze=0:gosub11303:h=val(eg$):ifh<1orh>sethen6004
6002 gosub11243:pg=h:gosub6010
6004 ze=0:sp=0:gosub11050:printks$(a1):return
6010 ff=f3%(pg):gosub11235:gosub11239
6011 poke53280,f1%(pg):poke53281,f2%(pg):return
6013 gosub11243:gr=142:ifpeek(53272)=27thengr=14
6014 return
6027 ifaf%(pg)=0thens=0:goto6066
6030 s=1:h1=fd(nf,1)-50176:c1=int(h1/40):c2=h1-40*c1
6032 h3=int(fd(nf,1)/256):h4=fd(nf,1)-h3*256
6035 g1=int(fd(nf,2)/256):g2=fd(nf,2)-g1*256
6040 ze=c1:sp=c2:gosub11050:print;:lb(1)=8:lb(2)=0:gosub6920:eg=peek(2)
6047 ifeg=8thengosub6131:goto6030
6050 if(eg=157oreg=145)andnf>1thennf=nf-1:ll=ll-1:goto6073
6055 if(eg=29oreg=17)andnf<afthennf=nf+1:ll=ll+1:goto6073
6060 ifeg=13oreg=141thenreturn
6062 ifeg<>133then6030
6066 ze=22:sp=36:gosub11050:printchr$(18)ks$(31)c$c$chr$(146):geteg$:ifeg$<>""then6069
6067 fors1=1to75:nexts1:ze=22:sp=36:gosub11050:printks$(31)c$c$:fors1=1to75:nexts1:goto6066
6069 eg=asc(eg$):ifeg=141ands=1then6040
6070 return
6073 ifll=0thengosub6100:ll=af%(pg):goto6030
6075 ifll>af%(pg)thengosub6115:ll=1:goto6030
6080 goto6030
6100 gosub11243
6102 pg=pg-1:ifaf%(pg)=0then6102
6105 en=en-af%(pg):gosub6010:return
6115 gosub11243:en=en+af%(pg)
6120 pg=pg+1:ifaf%(pg)=0then6120
6125 gosub6010:return
6131 gosub11243:hp=2:gosub 9500:gosub 11022:printchr$(gr):poke781,dm:syspt
6132 gosub6010:ze=0:sp=9:gosub11050:printchr$(18)dd$(si)chr$(146):gosub11028:return
6140 pg=es:gosub6010:s2=0:fors1=1toaf:gosub6160:s2=s2+1:ifs2<=af%(pg)then6148
6144 pg=pg+1:ifaf%(pg)=0then6144
6146 s2=1:gosub6010
6148 nexts1:return
6160 h1=int(fd(s1,1)/256):h2=fd(s1,1)-h1*256
6165 g1=int(fd(s1,2)/255):g2=fd(s1,2)-g1*255
6175 ifg1<>0theng2=255
6177 poke253,h2:poke254,h1:poke2,g2:poke69,69:poke70,199:sys52493:f(s1)=val(eg$):return
6215 ifat<>0then6230
6220 poke i1,51:poke i1+1,247:h2=50:h1=247:lb(1)=2:gosub6935:ea=ea+as+3
6225 h1=int(ea/256):h2=ea-256*h1:pokei1,h2:pokei1+1,h1
6226 fors1=1to3:pokei3+as-1+s1,po(s1):nexts1:at=at+1:ds%(si)=at:return
6230 gosub6305:ife=1then6235
6232 t3=t3+1
6235 h3=i3+t3*(as+3):h1=int(h3/256):h2=h3-256*h1:lb(1)=2:gosub6935
6237 fors1=1to3:pokeh3+as-1+s1,po(s1):nexts1:at=at+1:ds%(si)=at:ea=ea+as+3
6238 return
6255 gosub6330:h1=i2+gf*3-1:fors1=1to3:pokeh1+s1,peek(49700+s1):nexts1
6257 gf=gf+1:hb(2)=int(ea/256):lb(2)=ea-256*hb(2):t4=t4+1:hb(1)=int(t4/256)
6260 lb(1)=t4-256*hb(1):t4=t4-(as+3):hb(3)=int(t4/256)
6262 lb(3)=t4-256*hb(3):aw=1:gosub11760
6265 at=at-1:ds%(si)=at:ea=ea-(as+3)
6267 hb(1)=int(ea/256):lb(1)=ea-256*hb(1):pokei1,lb(1):pokei1+1,hb(1):return
6305 t1=0:t2=at:t5=int(log(at)/log(2)+1)
6310 t3=int((t1+t2)/2):t4=i3+t3*(as+3):h1=int(t4/256):h2=t4-256*h1
6315 lb(1)=1:gosub6935:e=peek(2):if e=0 then return
6320 t5=t5-1:ift5=0thenreturn
6325 ife=1thent2=t3:goto6310
6327 t1=t3:goto6310
6330 t4=i3+t3*(as+3)+as
6332 h1=int(t4/256):h2=t4-256*h1:t4=t4+2:h3=int(t4/256):h4=t4-256*h3
6333 lb(1)=h2:hb(1)=h1:lb(2)=h4:hb(2)=h3:lb(3)=37:hb(3)=194:aw=1:gosub11760
6335 fors1=1to3:po(s1)=peek(49700+s1):nexts1
6340 return
6355 gosub 9782:pg=es:gosub6010:ze=23:sp=7:gosub11050:printks$(49)c$c$:s2=0
6356 open1,8,2,dd$(si)+".r,l,"+chr$(254)
6357 print#15,"p"+chr$(2)+chr$(po(1))+chr$(po(2))+chr$(po(3))
6365 fors1=1toaf:g1=int(fd(s1,2)/255):g2=fd(s1,2)-g1*255
6367 fors6=1tog1+1:l1=255-po(3):ifs6<>g1+1thenh4=255:goto6375
6370 h4=g2
6375 ifl1>h4thenqx=h4:gosub6905:gosub6415:po(3)=po(3)+h4:nexts6:nexts1:goto6390
6380 ifl1=h4thenqx=h4:gosub6905:gosub6415:gosub6396:nexts6:nexts1:goto6390
6382 poke2,l1:poke69,90:poke70,215:sys52453:gosub6396:qx=h4-l1:gosub6905:eg$=zw$+eg$:gosub6415
6385 ifh4-l1=254thengosub6396:nexts6:nexts1:goto6390
6387 po(3)=po(3)+h4-l1:nexts6:nexts1
6390 close1:gosub9782:dc=1
6391 if xx=1 then open4,4:print#4:print#4:close4
6392 return
6396 po(3)=1:po(1)=po(1)+1:ifpo(1)=256thenpo(1)=0:po(2)=po(2)+1
6397 print#15,"p"+chr$(2)+chr$(po(1))+chr$(po(2))+chr$(po(3)):return
6415 if xx=1 then gosub 6475
6416 if s6<>1 then 6435
6417 s2=s2+1:ifs2<=af%(pg)then6435
6420 gosub11243
6425 pg=pg+1:ifaf%(pg)=0then6425
6430 s2=1:gosub6010
6435 ifs6=1theng1=int(fd(s1,2)/255):h1=fd(s1,1)-50176:ze=int(h1/40):sp=h1-40*ze
6445 gosub11050:printeg$
6450 ifs6<>g1+1thenh1=h1+255:ze=int(h1/40):sp=h1-40*ze
6470 ifs1=afands6=g1+1thengosub11243:pg=es:gosub6010
6472 return
6475 open4,4:gosub6500
6476 ifs6<>g1+1 then print#4,eg$;:goto6478
6477 print#4,eg$
6478 close4:return
6500 forii=1tolen(eg$):ifmid$(eg$,ii,1)<>chr$(166)thennextii:return
6510 eg$=left$(eg$,ii-1)+" "+right$(eg$,len(eg$)-ii):nextii:return
6775 gosub11022:br%(1)=24:br%(2)=0:br%(3)=196:gosub11260:printchr$(9)chr$(gr)
6780 poke781,dm:syspt:pg=es:nf=1:ll=1:en=1
6781 ze=0:sp=9:gosub11050:printchr$(18)dd$(si)chr$(146):gosub6010:gosub11028:return
6807 gosub 11022:printchr$(14):ze=0:sp=0:gosub11050:printks$(30)ks$(3):gosub11485
6808 ze=19:sp=0:gosub11050:printks$(79)chr$(17)ks$(79):gosub11027
6810 ze=5:sp=0:gosub11050:printks$(7)chr$(17)ks$(113)
6815 sp=22:ze=7:gz=14:rv=0:p=1:gosub11303:ifeg=141thenug=1:return
6822 eg$=eg$+".z":ze=20:sp=7:gosub11050:printks$(108)eg$
6825 lb(1)=0:hb(1)=224:qx$=eg$:gosub11860:gosub11322
6830 ze=20:sp=0:gosub11050:printl$:ag$=fe$:gosub11585:sp=0:gosub11050:printl$
6831 iffe<>0then6810
6832 ug=1:return
6905 poke2,qx:poke69,69:poke70,199:sys52453:return
6920 poke52445,h4:poke52446,h3:poke52436,g2:poke52437,g1:poke199,0:poke52440,13
6925 poke52441,141:poke52442,133:poke52443,lb(1):poke52444,lb(2):sys51946:return
6935 poke49700,as:poke49698,h2:poke49699,h1:poke49497,lb(1):poke69,73:poke70,128
6940 sys49460:return
6950 poke251,104:poke252,176:poke253,h2:poke254,h1:sys49787:return
6960 poke251,lb(1):poke69,81:poke70,216:sys49352:return
7010 a1=60:gosub7610:gosub11485:gosub11027
7055 open1,8,0,"$":get#1,h$,h$:i$=""
7057 gosub11322:iffe=0then7060
7058 close1:ze=12:sp=8:gosub11050:printfe$:poke2,2:sys51833:ug=1:return
7060 get#1,h$,h$,h$,h$
7065 get#1,h$:ifh$=""then7075
7070 i$=i$+h$:goto7065
7075 i$=ks$(61)+i$+ks$(61):ze=2:sp=0:gosub11050:printi$ks$(3)
7120 ze=4:sp=0:gosub11050:print;:z=0
7130 get#1,h$,h$:get#1,h$,z$:ifst<>0then7240
7135 h$=h$+chr$(0):z$=z$+chr$(0):e=asc(h$)+asc(z$)*256:printks$(62)e;
7190 get#1,h$:ifh$=""then7210
7200 printh$;:geteg$:ifeg$=chr$(141)thenprint:close1:ug=1:return
7205 goto7190
7210 print:z=z+1:ifz=17thengosub7300:goto7120
7220 goto7130
7240 close1:gosub7330:ug=1:return
7300 gosub7330:fors1=1to19:ze=3+s1:sp=6:gosub11050:printks$(64):nexts1:return
7330 ze=22:sp=6:gosub11050:printks$(63)
7335 get eg$:ifeg$<>" "then7335
7340 return
7500 a1=65:gosub7610:printc$ks$(66)ks$(67)ks$(68):print
7518 printks$(69)ks$(70)ks$(71):printchr$(17)ks$(72)ks$(73)
7520 printks$(74)ks$(75)ks$(76):printks$(77):ze=18:sp=20:gosub11050:printks$(78)
7522 printks$(79)chr$(17)ks$(79)ks$(4)ks$(11)c$c$:gosub11027
7550 ze=17:sp=20:gz=40:rv=0:p=1:gosub11303:ifeg=141thenug=1:return
7552 ifleft$(eg$,1)<>"n"andleft$(eg$,1)<>"s"then7560
7554 ze=21:sp=2:gosub11050:printks$(82);:gosub11445:sp=0:gosub11050:printl$:ifeg<>74then7565
7560 print#15,eg$:gosub11322:ag$=fe$:ze=21:gosub11585:poke2,2:sys51833
7565 ze=21:sp=2:gosub11050:printks$(83);:gosub11445:if eg<>74 then 7574
7573 ze=17:sp=20:gosub11050:printl$:poke1725,58
7574 ze=21:sp=0:gosub11050:printl$:goto7550
7610 gosub11022:printchr$(14)chr$(8)c$ks$(a1)ks$(3):return
7750 a1=85:gosub7610:ze=3:sp=6:gosub11050:printks$(84):ze=5:sp=1:gosub11050:print;
7755 a1=90:ag$=left$(ti$,2):gosub7795:ag$=mid$(ti$,3,2):gosub7795:printks$(93);
7765 ag$=right$(ti$,2):gosub7795:ze=7:sp=13:gosub11050:printks$(89)
7766 ze=10:sp=2:gosub11050:printks$(76)
7770 ze=13:sp=7:gosub11050:printks$(86):ze=15:sp=9:gosub11050:printks$(87)
7775 ze=17:sp=12:gosub11050:printks$(88);:gosub11027:gosub11445:ifeg=78then165
7785 close15:sys64738
7795 printag$ks$(a1);:ifval(ag$)<>1thenprintks$(94);
7800 a1=a1+1:return
9002 printchr$(147)chr$(14)chr$(8)
9005 ze=0:sp=0:gosub11050:printks$(144)ks$(3):ze=5:sp=7:gosub11050:printks$(145);
9010 gosub11445:ifeg=78then165
9020 printchr$(147)chr$(144)"load"chr$(34)"dbl"chr$(34)",8,1"
9030 poke631,19:poke632,13:poke198,2:end
9782 ze=23:sp=0:gosub11050:printchr$(146)l$c$c$:return
10657 if c2=21 then ze=c2:sp=0:gosub11050:printl$:return
10658 ifhp<>1thenhb(1)=199:goto10662
10659 hb(1)=7
10662 poke53223,c2-1:poke53217,32:poke53218,hb(1):sys 53056:return
10746 ifc2=21thenc2=20
10750 c2=c2+1:c1=0:h=c2*40-39:c3=int(h/256):c4=h-256*c3:return
11022 printchr$(147):poke53280,0:poke53281,0
11023 poke53265,peek(53265)and239:return
11027 poke53280,mf%(1):poke53281,mf%(2)
11028 poke53265,peek(53265)or16:return
11035 c3=peek(248):c4=peek(247):cp=c3*256+c4+39:c2=int(cp/40):c1=cp-c2*40:return
11050 poke211,sp:poke214,ze:sys58640:return
11170 ff=ff+1:ifff>=15thenff=0
11175 poke53280,ff:return
11200 ff=ff+1:ifff>=15thenff=0
11205 poke53281,ff:return
11230 ff=ff+1:ifff>=15thenff=0
11235 lb(1)=0:hb(1)=216:lb(2)=231:hb(2)=219:aw=ff:gosub11710:poke646,ff:return
11239 lb(1)=ap%(pg,1):hb(1)=ap%(pg,2):lb(2)=ap%(pg,3):hb(2)=ap%(pg,4)
11240 lb(3)=40:hb(3)=196:aw=1:gosub11760:return
11243 lb(1)=40:hb(1)=196:lb(2)=111:hb(2)=199
11244 lb(3)=ap%(pg,1):hb(3)=ap%(pg,2):aw=1:gosub11760:return
11260 poke53272,br%(1):poke56576,peek(56576)and252orbr%(2):poke648,br%(3):return
11303 gosub11050:print;:p3=ze*40+sp+ba(p):p1=int(p3/256):p2=p3-256*p1
11305 poke52445,p2:poke52446,p1:poke52436,gz:poke52437,0:poke199,rv:poke52440,13
11306 poke52441,141:poke52442,0:poke52443,0:poke52444,1:sys51946
11308 if peek(2)=141 then eg=141:goto 11311
11310 poke253,p2:poke254,p1:poke2,gz:poke69,69:poke70,199:sys52493
11311 poke199,0:return
11322 input#15,fe,fe$,h$,z$:fe$=str$(fe)+","+fe$+","+h$+","+z$+" !!!":return
11445 sys51682:eg=peek(2):if eg<>74 and eg<>78 then 11445
11450 return
11455 geteg$:ifeg$=""then11455
11457 eg=asc(eg$):return
11465 gosub11022:printchr$(14)chr$(8)
11470 ze=0:sp=0:gosub11050:printks$(a1)ks$(3)ks$(a2)ks$(3):return
11485 ze=23:sp=0:gosub11050:printks$(4)ks$(11)c$c$:return
11510 return
11585 sp=int((40-len(ag$))/2):gosub11050:printag$c$c$:return
11710 poke251,lb(1):poke252,hb(1):poke253,lb(2):poke254,hb(2):poke2,aw:sys51479:return
11760 iflb(1)=lb(2)andhb(1)=hb(2)thenreturn
11764 poke249,lb(1):poke250,hb(1):poke251,lb(2):poke252,hb(2):poke253,lb(3):poke254,hb(3)
11765 poke2,aw:sys51586:return
11810 poke186,8:poke251,lb(1):poke252,hb(1):poke51713,lb(2)
11815 poke51714,hb(2):poke69,81:poke70,216:poke183,len(qx$):sys51716:return
11860 poke186,8:poke781,lb(1):poke782,hb(1):poke185,0:poke183,len(qx$)
11865 poke187,238:poke188,2:fors1=1tolen(qx$):poke749+s1,asc(mid$(qx$,s1,1))
11870 nexts1:poke780,0:sys65493:return
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →