SMU – Der Maskengenerator
Programmieren Sie gerne Datenverarbeitungsprogramme? Dann braucnen Sie diese Erweiterung. Mit ihr können Bildschirmmasken mit numerischen und alphanumerischen Feldern erstellt und anschließend in eigene Basic-Programme eingebunden werden.


Das Programmpaket »SMU« (Screen Management Utility) dient zur Erstellung von Bildschirmmasken und deren einfache Handhabung durch ein erweitertes Basic.
Angelehnt an professionelle Bildschirm-Maskengeneratoren kann auf einfache Weise eine Bildschirmmaske erstellt und auf Diskette gespeichert werden. Wenn Sie jetzt denken, schon wieder ein Maskengenerator, dann haben Sie weit gefehlt. Dieser Maskengenerator erstellt nicht stur eine Maske durch Erzeugen von PRINT-Zeilen, wie es andere Maskengeneratoren machen, sondern es lassen sich natürlich zusammen mit der Maske numerische und alphanumerische Felder definieren. Mit der Basic-Erweiterung können die so erstellten Masken in eigene Programme eingebunden werden. Der Vorteil dieses Programms liegt auf der Hand. Es ist nicht mehr erforderlich, sich über die Programmierung von Eingabefeldern und Masken in selbstgeschriebenen Dateiverwaltungsprogrammen Gedanken zu machen. Die Programmierung übernimmt ab jetzt der Maskengenerator. Sie müssen sich nur noch überlegen, wo die Eingabefelder stehen und wie sie aussehen sollen. Das Erstellen der Masken ist denkbar einfach. Wird der Maskengenerator »SMU« geladen und mit dem Basic-Befehl RUN gestartet, muß man sich zuerst entscheiden, ob eine neue Maske erstellt oder eine alte bearbeitet werden soll. Hat man sich für das Erstellen einer neuen Maske entschieden, wird der Bildschirm gelöscht und ein Cursor erscheint. Wie gewohnt, läßt sich dieser Cursor mit den entsprechenden Steuertasten auf dem Bildschirm bewegen. Überall dort, wo ein Eingabefeld definiert werden soll, dient das »!«-Zeichen als Platzhalter für alphanumerische und das »# «-Zeichen als Platzhalter für numerische Zeichen. Aber Vorsicht; diese beiden Zeichen dürfen im erklärenden Text nicht erscheinen. Um später die Länge des Eingabefeldes zu erkennen, empfiehlt es sich, den Anfang und das Ende mit einem beliebigen Zeichen zu markieren. Ist die Maske erstellt, kann sie durch zweimaliges Drücken der »F1«-Taste auf einem zuvor bestimmten Gerät gespeichert werden. Mit der Basic-Erweiterung »SMUBU« läßt sich die so erstellte und gespeicherte Maske in eigene Basic-Programme einbinden. Ein Demoprogramm (LIT.VERW.) zeigt, wie einfach und dennoch effizient die Handhabung solcher Masken sein kann.
(Georg Krcal/ah)»Screen Management Utility« dient zur professionellen Erstellung von Bildschirmmasken unter Berücksichtigung von alphanumerischen und numerischen Feldern. Diese Masken lassen sich durch ein erweitertes Basic in eigene Programme einbinden.
SMU (Listing 1) ist für alle jene verwendbar, die ihren Basic-Programmen einen professionellen Anstrich geben möchten. SMU zielt auf die Verwaltung von Bildschirmmasken ab, wie sie auch bei kommerziellen Programmen verwendet werden. Mit SMU können Bildschirmmasken auf einfachem Wege erstellt und anschließend mit Basic-Befehlen verwaltet werden. SMU besteht aus drei Programmteilen dem Maskengenerator »SMU« (Listing 1), einem Maschinenprogramm (Listing 2) und einer Befehlserweiterung »SMUBU« (Listing 3). Sind alle drei Programme abgetippt, wird der Maskengenerator mit LOAD "SMU",8 geladen und mit RUN gestartet. Die Maschinenprogramme werden automatisch nachgeladen. Zunächst einige Worte zu dem Prinzip einer Bildschirmmaske. Eine Bildschirmmaske ist aus Feldern und Informationsbegriffen aufgebaut. Wem das zu wenig anschaulich ist, der kann eine Bildschirmmaske (kurz Maske) mit einem unausgefüllten Formular vergleichen. Der Informationsbegriff (IB) wäre dabei der Teil, der dem Ausfüllenden erklärt, was auszufüllen ist; das Feld, der Freiraum hinter der Angabebezeichnung. Somit ergibt sich, daß die Informationsbegriffe Literale sind, die mit der Maske immer ausgegeben werden. Die Felder einer Maske vermögen nun Informationen aufzunehmen, die entweder vom Bediener oder vom Programm kommen. Im ersten Fall füllt der Bediener die Maske aus, die Feldinhalte werden anschließend Variablen zugewiesen, im zweiten Fall werden Variableninhalte in die Felder übertragen.
Die Art und Weise, wie ein Bediener solch eine Maske ausfüllt, läßt sich in zwei Gruppen unterteilen:
- Die Zwangseingabe; der Benutzer muß die Felder so ausfüllen, wie das Programm es vorschreibt.
- Die wahlfreie Eingabe; der Benutzer trifft selbst die Wahl, welches Feld er ausfüllt.
Bei SMU wurde eine Verknüpfung beider Methoden gewählt, nach einem ausgefüllten Feld springt der Cursor in das nächste, mit den Funktionstasten kann aber stets ein beliebiges Feld der Maske angesprungen werden, genauere Erklärungen dazu folgen noch.
Welchen Vorteil bieten nun Masken gegenüber den herkömmlichen Eingabeverfahren (wie zum Beispiel INPUT)? Der Hauptvorteil liegt in der Fehlerkorrektur, die Feldinhalte können vom Benutzer so lange verändert werden, bis alle Eingaben richtig sind. Ein weiterer Pluspunkt ist die feste Länge eines Feldinhaltes, ein alphanumerischer Feldinhalt wird der Stringvariablen mit einer fixen Länge übergeben. Letztlich kann der Bediener keine Gestaltungsversuche am Bildschirm mehr machen, die die meisten CBM-Computer (so auch der C 64) ziemlich oft aus der Fassung bringen (redo from start, extra ignored).
Der Maskengenerator
Beginnen wir mit der Beschreibung des Maskengenerators und mit der Erstellung einer Bildschirmmaske mit dem Programm SMU.
Wie bereits erklärt, besteht eine Maske aus Literalen und Feldern, für den Maskengenerator ist alles literal, was nicht Feld ist. Das mag vorerst nicht viel aussagen, aber nachdem festgelegt worden ist, was ein Feld ist, versteht man auch, wie man eine SMU-Maske zu erstellen hat. Der Maskengenerator unterscheidet zwei Feldarten:
- Alphanumerische Felder
- Numerische Felder
Diese Feldarten werden bei der Erstellung der Maske mit zwei eigens ausgewählten Zeichen gekennzeichnet. Dabei markiert das Rufzeichen (!) ein alphanumerisches Feld, das Channelzeichen (#) das numerische Feld. Überall dort, wo am Bildschirm diese Zeichen stehen, erkennt der Maskengenerator ein Feld. Eine Besonderheit dieses Maskengenerators ist, daß eine Folge mehrerer solcher Zeichen, als ein einziges Feld interpretiert wird. Zum Beispiel istdie Folge »!!!!!« für den Maskengenerator ein einziges alphanumerisches Feld, mit einer Feldlänge von fünf Zeichen. SMU kann bis zu 255 Felder verwalten. Ein Feld darf eine maximale Länge von 255 Zeichen nicht überschreiten. Eine Verknüpfung von einem alphanumerischen Feld und einem numerischen Feld zu einem einzigen Feld ist nicht möglich. So ist die Felddefinitionsfolge »!!!##« lediglich die unmittelbare Folge eines numerischen Feldes auf ein alphanumerisches Feld von drei Zeichen Länge. Eine SMU-Maske umfaßt einen Bildschirm von 23 Zeilen (0 bis 22), die restlichen zwei Zeilen sind während der Maskenerstellung nicht erreichbar und werden vom Maskengenerator auch nicht analysiert. Welche Wirkung haben nun diese Feldmarkierungen? Überall dort, wo bei der Maskenerstellung diese Feldbezeichner gestanden haben, werden später (siehe Maskenaufruf durch den SCREEN-Befehl) Leerzeichen ausgegeben. Hier kann der Benutzer seine Eingaben machen, den Cursor bewegen, Zeichen einfügen oder löschen. Numerische Felder erlauben nur die Eingabe von Zahlen (0 bis 9), Punkt (.), Plus (+), Minus (-) und dem Exponentzeichen (e). Bei einem alphanumerischen Feld sind alle Zeichen (mit Ausnahme von Hochkomma) für die Eingabe zugelassen. Beachtenswert bei den numerischen Feldern ist noch, daß Zahlen, die eine Bereichsüberschreitung des Computers zur Folge haben würden, von SMU zurückgewiesen werden. Das heißt allerdings, daß ein numerisches Feld mit zum Beispiel 255 Zeichen nicht sinnvoll ist, der C 64 kann solch eine große Zahl ja nicht mehr verwalten (unter der Voraussetzung, daß das Feld vollständig ausgefüllt wird).
Die Basic-Erweiterung SMUBU
Zehn neue Befehle sind nach der Initialisierung der Erweiterung SMUBU (Listing 3) mit SYS 9*4096 zugänglich. Vor jedem SMUBU-Befehl steht ein Rufzeichen (!).
Nachdem die Erweiterung mit SYS 9 * 4096 gestartet wurde, stehen die Befehle SETIN, CLEIN, MASK, SCREEN, WMASK, IMASK, IOMASK, -, INLINE und DIER zur Verfügung.
! SETIN:
Dieser Befehl sperrt die Wirkung der Tasten STOP und STOP/RESTORE. Das laufende Basic-Programm kann vom Benutzer nicht mehr unterbrochen werden.
! CLEIN:
Dieser Befehl hebt die Wirkung von SETIN wieder auf.
! MASK name,geräteadresse,stringarray(x):
Damit wird von der Diskette eine Maske geladen und die Daten für die Maske in das Feld ab dem String mit dem Index x gespeichert. Es bedeutet:
- name: kann eine Stringvariable sein, die den Namen enthält, oder direkt der Name, eingefaßt in Hochkommata.
- geräteadresse: ist die Geräteadresse der Floppy (8,9 und so weiter).
- stringarray (x): ist ein eindimensionales Feld, x ist der Index, ab dem die Maskendaten im Feld gespeichert werden sollten.
Zum Beispiel:
10 DIM M$(14)
20 !MASK"MENU",8,M$(0)
Es wird von dem Laufwerk mit der Geräteadresse 8 die Maske mit dem Namen »menu« geladen. Die Maskendaten befinden sich ab M$(0) im Speicher. Die Daten einer Maske benötigen einen Platz von 15 Strings zu je 255 Zeichen, das heißt, daß die Maskendaten im obigen Beispiel in den Speichern M$(0) bis einschließlich M$(14) zu finden sind.
! SCREEN Stringarray(x):
Wie bereits angeklungen, wird durch diesen Befehl eine Maske aufgerufen. Dieser Befehl bringt eine Maske auf den Bildschirm. Gleichzeitig werden die Daten der Felder (Position, Länge und Feldart) SMUBU übermittelt, alle weiteren Befehle, die mit einer Maske operieren, greifen darauf zu. Dies ist selbst dann der Fall, wenn der Bildschirm durch CHR$(142) gelöscht worden ist. SMUBU greift bei Maskenoperationen immer auf die Daten der mit SCREEN aufgerufenen Maske zurück.
- stringarray(x): ist ein eindimensionales Stringarray, x ist der Index, ab dem die Daten einer SMU-Maske gespeichert sind.
Zum Beispiel:
30 !SCREEN M$(0)
Es würde die im ersten Beispiel geladene Maske auf den Bildschirm geschrieben werden.
Wichtig ist, daß durch x auch wirklich der Beginn der Maske indiziert wird, so hätte»!SCREEN M$(1)« im Beispiel zu einer Fehlermeldung geführt (siehe SMUBU - Fehlermeldungen).
! WMASK var1,var2,var3,….:
Dieser Befehl ähnelt dem Basic-Befehl PRINT. Er schreibt allerdings die Inhalte der Variablen (String und Zahlenvariable) in die Felder der Maske. Zuvor werden die Felder der Maske gelöscht. Bei WMASK ist zu beachten:
- Die Übergabe der Variableninhalte an die Felder erfolgt sequentiell, das heißt 1. Variable nach Feld1, 2. Variable nach Feld2, und so weiter.
- Es dürfen Zahlenvariable nur numerischen Feldern, Strings nur alphanumerischen Feldern zugeordnet werden. Ist dies nicht der Fall, folgt die Fehlermeldung: type mismatch error.
- Leerstrings bewirken keine Ausgabe, Zahlenvariable ohne Inhalt die Ausgabe von 0.
- Zahlen werden linksbündig ausgegeben.
- Überschreitet die Länge einer Variablen (Zahl, String) die Feldlänge, wird nur bis zum Feldende ausgegeben.
- Der Befehl WMASK fordert eine Variablenliste (analog dem Basic-Befehl INPUT), Stringoperationen und dergleichen sind nicht zulässig.
var1,var2,var3…stellt die Variablenliste dar.
! IMASK übergabe,var1,var2,var3,….
Dieser Befehl veranlaßt die Eingabe von der Maske, die zuletzt mit dem SCREEN-Befehl auf den Schirm geschrieben wurde. Es werden alle Felder der Maske gelöscht und der Cursoraufdaserste Zeichendes ersten Feldesgesetzt. Jetzt kann der Bediener die einzelnen Felder der Maske ausfüllen.
Die Cursortasten, INST, DEL, CLR, HOME und RETURN wirken nur auf die Felder der aktuellen Maske.
Die Sondertasten (F1 bis F8) haben eine Übergabefunktion, ähnlich dem RETURN im herkömmlichen INPUT-Befehl. Durch das Drücken einer dieser acht Tasten, beendet der Bediener die Maskeneingabe. Welche dieser Tasten wirksam werden darf, legt der Programmierer in
- Übergabe fest. Übergabe ist ein String oder eine Zeichenkette eingeschlossen in Hochkomma, die nur die Zeichenkodes von F1 bis F8 enthalten darf. In diesem String oder mit dieser Zeichenkette legt der Programmierer fest, welche der acht Funktionstasten (F1 … F8) die Beendigung der Eingabe bewirken können.
- var1,var2,var3,…. sind Variable. Sie müssen in der gleichen Reihenfolge wie die Felder der aufgerufenen Maske stehen, es gilt das gleiche, was bereits für WMASK gesagt wurde, nur daß hier die Feldinhalte in die Variablen übertragen werden. Dabei ist zu beachten, daß bei einem alphanumerischen Feld stets die gesamte Feldlänge in die Variable übertragen wird, gleichgültig, wie viele Zeichen der Bediener eingegeben hat. Zum Beispiel umfaßt ein Feld 20 Zeichen, der Bediener trägt aber nur »Peter« ein, dann werden dem String zusätzlich 15 Leerzeichen mitgegeben.
Mit welcher Taste der Bediener die Maskeneingabe abgeschlossen hat, kann durch Auslesen der Speicherstelle 2 festgestellt werden. Dabei entspricht der Inhalt der Speicherstelle der Tastennummer (1 für F1, 2 für F2, bis 8 für F8).
Beispiel: Eine Maske habe 2 Felder, ein alphanumerisches Feld mit 20 Zeichen Länge und ein numerisches Feld mit einer Länge von 5 Stellen (letztere Längenangabe ist nur der Vollständigkeit halber). Durch Drücken von F1 und F2 kann der Bediener die Maskeneingabe beenden.
120 AB$ = CHR$(133) + CHR$(137)
130 !IMASK AB$,F1$,F2
140 ON PEEK(2) GOTO 150,160
150 REM EINGABE MIT F1 ABGESCHLOSSEN
160 REM EINGABE MIT F2 ABGESCHLOSSEN
In diesem Beispiel würde SMUBU das Drücken der Tasten F3 bis F8 ignorieren. Anschließend befindet sich der Feldinhalt von Feld 1 in F1$ und die Zahl von Feld 2 in F2$.
!IOMASK übergabe,var1,var2,var3,…. :
Dieser Befehl stellt die Verknüpfung von WMASK mit IMASK dar. Zunächst werden die Felder der Maske gelöscht, die Variableninhalte in die Felder übertragen (analog WMASK) und danach der Cursor auf die erste Stelle des ersten Feldes positioniert (wie bei IMASK-Befehl), nun kann der Bediener die Felder verändern. Die Bedeutung von »Übergabe« und »var1,var2,var3,….« sind der Erklärung von IMASK zu entnehmen.
! ← var1,var2,var3.:
SMUBU kann 255 Felder verwalten, müßte man aber 255 Variable in einer Kette, in eine einzige Basic-Zeile stopfen, hätte man einige Schwierigkeiten. Eine Basic-Zeile darf beim C 64 ja bekanntlich nur 255 Zeichen (Token und Zeichen) beinhalten. Das daraus entstehende Dilemma umgeht dieser Befehl. Er setzt die Variablenliste fort, die durch den Befehl WMASK, IMASK oder IOMASK begonnen wurde. Allerdings muß bei der vorhergehenden Liste ein Verweis auf diesen Befehl vorhanden sein. Dieser Verweis ist der Pfeil nach links hinter einem Komma, anstelle einer Variablen. Es muß aber mindestens eine Variable vor einem solchen Verweis vorhanden sein. In der nächsten Basic-Zeile muß nun der obige Befehl stehen, dieser darf ebenfalls einen Verweis besitzen.
Das Beispiel aus der Erklärung für IMASK könnte daher auch so aussehen:
130 !IMASK AB$,F1$,←
135 !← F2
Wichtig ist auch noch, daß der Verweis wie ein REM-Befehl gehandhabt wird. Alle folgenden Befehle innerhalb der Zeile werden ignoriert.
! INLINE zeile,spalte,zeichen,string :
Dieser Befehl ermöglicht es, den Cursor an eine beliebige Position zu setzen. Ab dieser Position wird eine Eingabe erwartet. Es bedeutet:
- zeile: die Zeilenangabe (0 bis 24), in einer Variablen oder als Festwert.
- spalte: die Spaltenangabe (0 bis 39). Als Variable oder als Festwert.
- zeichen: die Anzahl der Zeichen, die eingegeben werden dürfen (0 bis 255). Als Variable oder als Festwert.
- string: eine Stringvariable, der die Eingabe übermittelt wird, sie hat danach die Länge »zeichen«.
Die Eingabe ist hier nicht so komfortabel, wie beim herkömmlichen INPUT-Befehl. DEL löscht das letzte Zeichen. Hochkommata und alle Funktionstasten (außer RETURN) werden ignoriert. Mit RETURN wird die Eingabe abgeschlossen.
! DIER fehlernummer,fehlermeldung,tracknummer, sektornummer:
Mit diesem Befehl wird vom Laufwerk mit der Geräteadresse 8 eine eventuelle Fehlermeldung eingelesen.
- fehlernummer: ist eine Variable, der die Fehlernummer zugewiesen wird.
- fehlermeldung: ist ein String, dem die Fehlermeldung im Klartext zugewiesen wird.
- tracknummer und sektornummer: sind Variable, denen die Tracknummer und die Sektornummer in dem der Fehler aufgetaucht ist, zugewiesen werden.
Das Basic-Programm SMU
Nach der Erklärung der einzelnen Befehle von SMUBU, soll noch auf die Arbeitsweise mit SMU eingegangen werden. Nach dem Programmstart erscheint eine Menüzeile:
MA-ALT MA-NEU UTILITY DRUCKEN ENDE
Durch Drücken von »j« wird der in Inversschrift dargestellt Programmteil ausgewählt. RETURN bewegt die Inversschrift weiter.
Es bedeutet:
- MA - ALT: Laden einer Maske und deren Veränderung.
- MA - NEU: Erstellen einer neuen Maske.
- UTILITY: Bereitstellen von SMUBU auf der Diskette zum Nachladen.
- DRUCKEN: Laden einer Maske und ausdrucken.
- ENDE: SMU beenden.
MA - NEU
SMU fragt nach dem Maskennamen und der Geräteadresse. Danach wird der Bildschirm gelöscht und die Maske kann entworfen werden. Dabei wird mit »!« ein alphanumerisches und mit «#« ein numerisches Feld festgelegt. Der Maskengenerator faßt jedes Zeichen, das von den beiden Zeichen unterschiedlich ist, als eine Feldbegrenzung beziehungsweise als ein Literal auf.
Vorsicht! Die Tasten DEL und INST wirken nicht mehr wie gewohnt!
- DEL: löscht die Zeile in der sich der Cursor befindet und zieht alle anderen Zeilen nach.
- INST: fügt eine Zeile ab der Cursorposition ein und schiebt die restlichen Zeilen nach unten.
Durch Drücken von F1 beginnt der Maskengenerator seine Analyse und schreibt die Maskendaten auf Diskette. Es erfolgt die Rückkehr ins Menü.
MA - ALT
SMU fragt den alten Maskennamen ab und setzt wie in »MA - NEU« beschrieben fort. Allerdings wird die geladene Maske auf den Bildschirm gebracht und der Schirm nicht gelöscht.
UTILITY:
Es wird unter dem Namen »SMUBU« ein Lader auf Diskette erzeugt.
DRUCKER
lädt die mit Namen spezifizierte Maske und druckt sie aus. Die Geräteadressen sind auf einen GP100 von Seikosha zugeschnitten, sie können durch Veränderung der Parameter in Zeile 730 leicht verändert werden.
Fehlermeldung von SMUBU
Fehler werden immer gemacht, SMUBU enthält einige Fehlermeldungen, die dem Programmierer bei der Korrektur auf die Sprünge helfen sollen:
- not smu file:
Es wurde versucht eine Maske mit MASK von der Diskette zu laden, die nicht SMU-Format besitzt. Dieser Fehler tritt auch auf, wenn das File nicht gefunden wurde oder eine andere Fileart als ein sequentielles File ahgesprochen wurde. - not smu data:
Es wurde versucht mit SCREEN ein Stringarray anzusprechen, das keine SMU-Maskendaten enthält. Meist tritt der Fehler deshalb auf, weil ein falscher Index gewählt wurde. - no smu mask:
Dieser Fehler kann nur einmal auftreten. Nur dann, wenn noch keine Maske mit SCREEN auf den Schirm gebracht wurde, aber ein Zugriff auf eine Maske mit WMASK, IMASK oder IOMASK versucht wurde. - array not found:
Es wurde bei den Befehlen MASK oder SCREEN auf ein Feld zugegriffen, das nicht existiert. - transmit error:
Dieser Fehler tritt bei IMASK oder IOMASK auf, wenn der Übergabestring:- nicht vorhanden ist
- leer ist
- ein Zeichen enthält, dessen Kode von F1 bis F8 unterschiedlich ist.
- missing link command:
In WMASK, IMASK oder IOMASK wurde ein Verweis auf die Fortsetzung der Variablenliste gegeben, der in der folgenden Zeile nicht erfolgt ist. - illegal position:
Bei INLINE wurden Zeilen- beziehungsweise Spaltenangaben verwendet, die über den zulässigen Bereich hinausgehen.
Ein Fehler, der von SMUBU nicht berücksichtigt wurde: Greift man auf eine Maske (mit WMASK, IMASK oder IOMASK), die keine Felder enthält, zeigt der Interpreter die interessantesten Verhaltensweisen, sofern der Computer nicht gleich abstürzt.
Initialisierung und Einsatz
Da SMUBU im Speicherbereich ab $9000 abgelegt ist, muß er vor dem Zugriff von Basic her geschützt werden (der Bereich $C000 … $CFFF wurde bewußt vermieden, damit der Programmierer selbst noch die Möglichkeit hat, andere Maschinenroutinen laufen zu lassen). Der Schutz geschieht am einfachsten dadurch, daß man das Basic-RAM-Ende herabsetzt (POKE 56,144). SMUBU bindet man in seine eigenen Programme am besten folgendermaßen ein: Mit UTILITY erstellt man den Objektcode von SMUBU auf einer geeigneten Diskette. Die ersten Zeilen jedes Programmes in dem SMUBU verwendet werden soll, sehen nun so aus:
0 IFA=0 THEN POKE 56,144:CLR:A=1LOAD"SMUBU",8,1
1 CLR:SYS 9*4096:REM INITIALISIEREN VON SMU
Wo kann man SMUBU nun überall einsetzen? Bei Dateiverwaltungen, Plattenarchiven, Adreßverwaltungen und vielem mehr, kurzum, überall dort, wo viel mit Eingabe und Ausgabe operiert wird, aber lediglich Daten sich verändern.
Tips zu SMU
- Beim Maskenerstellen mit SMU grenzt man die Felder am besten durch Graphikzeichen (zum Beispiel senkrechte Striche) ein. Dadurch sind die Felder beim späteren Aufruf der Maske klar erkennbar.
- Da die Maske nicht den ganzen Bildschirm in Anspruch nimmt, kann in den letzten beiden Zeilen ein Kommentar untergebracht werden, zum Beispiel welche Sondertaste welche Funktion im Programm hat.
- Dadurch, daß man bei MASK und SCREEN selbst bestimmen kann, ab welcher Position die Maskendaten im Array stehen, kann man sich lästiges Nachladen von Masken (falls in einem Programm mit mehreren Masken gleichzeitig gearbeitet werden sollte) ersparen, indem man die Masken hintereinander ablegt.
- SMU überliest Variablen von MASK, IMASK und IOMASK die keinem Feld mehr zugeordnet werden können. Baut man seine Masken geschickt auf, kann man also mit einem WMASK-, IMASK- oder IOMASK-Befehl mehrere Masken abarbeiten.
LITVERW. eine Literaturverwaltung
LIT.VERW. (Listing 4) ist ein Demoprogramm für eine SMU-Anwendung. Um mit diesem Programm arbeiten zu können, sind folgende Schritte erforderlich:
- Programm »MASKE« (Listing 5) mit dem MSE abtippen und speichern.
- Programm »MASKE« mit LOAD"MASKE",8,1 laden.
- NEW <RETURN> eingeben.
- Listing 6 »SEQ.SAVE« abtippen und mit RUN starten.
Anschließend befindet sich ein sequentielles File mit dem Namen »ZEITSCHRIFT« auf Ihrer Diskette. Bei diesem File handelt es sich um eine mit dem SMU erstellte Maske. Die Felder der Maske haben folgende Bedeutung:
- Stichwort: Ein Stichwort, unter dem der Zeitschriftenartikel oder das Buch einzuordnen ist.
- Titel: Der Titel des Zeitschriftenartikels oder des Buches.
- Autor: Der Name des Autors im Format: Nachname, Vorname. Der Vorname ist im allgemeinen kürzer.
- Verlag: Der Name des Verlages.
- Ort: Der Erscheinungsort der Zeitschrift oder des Buches.
- Jahr: Jahr der Veröffentlichung des Artikels oder des Buches.
- Seite: Die Seitenangabe.
- Buch: Wenn sich das Zitat auf eine Zeitschrift bezieht muß dieses Feld mit »n« ausgefüllt sein.
- Ausgabenummer: Nur bei einer Zeitschrift von Bedeutung (zum Beispiel 64’er). Die Ausgabenummer der Zeitschrift.
- Zeitschriftenname: Name der Zeitschrift
LIT.VERW. ist ein maskengesteuertes Programm, den Funktionstasten kommt folgende Bedeutung zu:
- F1 Eingabe:
Ein Literaturzitat wird in die Datei aufgenommen und in Abhängigkeit von den Suchbegriffen eingeordnet. Da manchmal große Teile des Speichers »umgestellt« werden müssen, dauert dieser Eingabeteil mit zunehmender Größe der Datei immer länger. - F2 Drucken:
Der Maskeninhalt wird als Literaturzitat auf dem Drucker ausgegeben. Dieses Zitat sieht für Bücher folgendermaßen aus:- Nachname, Vorn.:
- Buchtitel.
- Erscheinungsort: Verlagsname, Veröffentlichungsjahr, Seite.
- Nachname, Vorn.: Artikeltitel.
- Zeitschriftenname Ausgabenummer (Erscheinungsjahr) Seite.
- F3 Suchen:
Es wird die bestehende Datei nach den angegebenen Suchkriterien durchsucht. Als Suchkriterien gelten der Name des Autors und das Stichwort. Eine Verknüpfung beider Kriterien ist dabei möglich. Alle weiteren Feldinhalte haben auf die Suchroutine keinerlei Einfluß. - F4 Index
Es wird ein Gesamtindex der Datei ausgegeben. Die Stichwörter sind, wie auch die Autoren alphabetisch geordnet, etwaige Abweichungen sind auf die Ordnung der ASCII-Zeichen zurückzuführen. Die Zahlen hinter dem Stichwort, beziehungsweise dem Autor verweisen auf die Angabe bei der Literaturstelle. - F5 Weiter:
Setzt den Suchlauf nach Suchkriterien fort. Wurde zum Beispiel nach einem Autor gesucht, dieser gefunden und angezeigt, kann durch Drücken der Taste F5 der Suchlauf nach weiteren Literaturstellen des Autors fortgesetzt werden. Findet sich kein Datum in der Datei mehr, wird die Maske gelöscht. - F6 Ende:
beendet LIT.VERW. indem es neu eingegebene Literaturzitate sichert. Danach wird der Bildschirm gelöscht und das Programm abgebrochen.
Einiges zum Programm: Das Programm kann jedem Stichwort maximal 255 Verweise zuordnen. Wird dieser Bereich überschritten, erfolgt ein Programmabbruch mit der Meldung: Stichworttabellenüberlauf. Analoges gilt für die Autoren. Wenn das Programm zum erstenmal gestartet wird, das heißt wenn eine neue Datei angelegt wird, muß man die Frage:
Bestehende Datei [j/n] ?
durch Drücken der Taste »N« beantworten. Die Druckerparameter der OPEN-Sequenz in Zeile 1100, 1200 und 9310 sind für einen Seikosha GP 100 VC zugeschnitten, sie müssen für andere Druckermodelle also angepaßt werden. Weiter bewirkt CHR$(14) in den Zeilen 1220, 1340 und 1470 die Eröffnung des Shift In-Modus, CHR$(15) beendet den Modus.
11 rem *********************************
12 rem * *
13 rem * s m u *
14 rem * *
15 rem * (screen management utility) *
16 rem * *
17 rem * *
19 rem * georg krcal *
20 rem * ziegelhofstrasse 36/11/9 *
21 rem * a - 1220 wien *
22 rem * telephon 22-17-724 *
23 rem * *
24 rem *********************************
25 rem
26 rem
27 rem
28 rem
29 ifs=0thens=1:load"smubu",8,1
30 ifs=1thens=2:load"smu.m",8,1
60 poke 56,144:clr
65 print"{clr}{grn}"chr$(14)chr$(8);:poke53280,0:poke53281,0
70 k$=" MA-ALT MA-NEU UTILITY DRUCKEN ENDE "
75 fori=1to25:cd$=cd$+"{down}":fi$=fi$+"##########":ru$=ru$+"!!!!!!!!!!"
80 cr$=cr$+"{rght}":next
85 cd$="{home}"+cd$:ru$=ru$+"!!!!!":fi$=fi$+"#####"
90 dim b$(14),a$(24),bc%(1024)
100 rem **** erstellen des bildschirms
110 print"{down}{down}{down}{down} ******** *** *** *** *** ";
120 print" *** *** **** **** *** *** ";
130 print" *** *** ***** ***** *** *** ";
140 print" *** *** **** *** *** *** ";
150 print" ******** *** ** *** *** *** ";
160 print" *** *** *** *** *** ";
180 print" *** *** *** *** *** *** ";
190 print" *** *** *** *** *** *** ";
200 print" ******** *** *** ******** ";
210 print"{down}"tab(6)" SCREEN{$a0}MANAGEMENT{$a0}UTILITY"
220 print
230 printtab(12)"{down}von Georg Krcal"
240 printtab(13)"Wien, Mai 1985":ifxthen250
242 printleft$(cd$,24)" BITTE TASTE DRUECKEN {up}{up}"
243 poke198,0:wait198,1:poke198,0
244 sys9*4096
250 printleft$(cd$,24)k$;:x=1
390 rem kommandoentgegennahme
400 s$=left$(k$,x-1)+"{rvon}"+mid$(k$,x,8)+"{rvof}"+right$(k$,33-x)
405 printleft$(cd$,24)s$"{up}{up}";
410 wait203,63
420 getg$:ifg$="j"then460
430 ifg$<>chr$(13)then410
440 x=x+8:ifx>=40thenx=1
450 goto400
460 printleft$(cd$,24)" {up}{up}"
470 x=(x-1)/8+1:on x goto 480,500,900,670,471
471 print"{clr}";:end
480 printleft$(cd$,24)"Alter Dateiname {CBM-J} {CBM-L}{up}{up}"
490 !inline 23,17,16,an$:h$=an$:gosub 2000:an$=h$:ifan$=""then490
500 printleft$(cd$,24)"Neuer Dateiname {CBM-J} {CBM-L}{up}{up}"
510 !inline 23,17,16,nn$:h$=nn$:gosub 2000:nn$=h$:ifnn$=""then510
520 printleft$(cd$,24)" {up}{up}"
530 printleft$(cd$,24)"Geraetenummer {CBM-J} {CBM-L}{up}{up}"
540 !inline 23,15,3,gn$:h$=gn$:gosub 2000:gn$=h$:ifgn$=""then540
550 gn=val(gn$):if(gn<>1andgn<4)orgn>255then530
555 printleft$(cd$,24)" {up}{up}"
560 if x=2 then sys12*4096:goto640:rem neue maske
580 !mask an$,gn,b$(0):!screen b$(0)
590 fori=1to255:cd=peek(39445+i):cr=peek(39700+i):fe=peek(39955+i)
600 ch=peek(40210+i):ifcd=128then630
610 h$=fi$:iffe=1thenh$=ru$
620 printleft$(cd$,cd+1)spc(cr)left$(h$,ch):next:ifx=4thenreturn
630 ifx=4thenreturn
640 sys49162:nn$="@:"+nn$+",s,w"
650 sys49589,nn$,gn:rem maske analysieren und auf peripherie
652 ifpeek(832)=0thenprint"{clr}";:goto100
654 h$="!":ifpeek(832)=1thenh$="#"
656 printleft$(cd$,24)"FEHLER: "h$" - Feld >255 Zeichen - SPACE{$a0}tasten";
658 h=len(nn$)-6:nn$=mid$(nn$,3,h)
660 getg$:ifg$=""then660
662 printleft$(cd$,24)" {up}{up}"
664 goto640
670 printleft$(cd$,24)"Dateiname {CBM-J} {CBM-L}{up}{up}"
680 !inline 23,11,16,an$:h$=an$:gosub 2000:an$=h$:ifan$=""then670
690 gosub 520
700 fori=0to24:a$(i)="":forj=0to39:bc=peek(1024+i*40+j)
710 ifbc>127theng$="":goto725
715 ifbc<65andbc>31theng$=chr$(bc):goto725
717 ifbc<31orbc>96theng$=chr$(bc+64):goto725
720 g$=chr$(bc+32)
725 a$(i)=a$(i)+g$:nextj,i
730 open4,4,7:rem drucker
740 print#4," 0 1 2 3"
750 print#4," 0....5....0....5....0....5....0....5...."
755 print#4
760 fori=0to22:h$=str$(i):h$=right$(h$,(len(h$)-1))
770 iflen(h$)=1thenh$="0"+h$
780 a$(i)=h$+" "+a$(i)
790 print#4,a$(i):next
800 close 4:rem drucker schliessen
810 print"{clr}";:goto100
900 printleft$(cd$,24)"Geraetenummer {CBM-J} {CBM-L}{up}{up}"
910 !inline 23,15,3,gn$:h$=gn$:gosub 2000:gn$=h$:ifgn$=""then910
920 gn=val(gn$):if(gn<>1andgn<4)orgn>255then900
930 printleft$(cd$,24)" {up}{up}"
940 open8,gn,1
950 poke 183,7:poke187,169:poke188,2
960 poke 681,64:poke682,58:poke683,83:poke684,77:poke685,85:poke686,66
970 poke687,85:poke251,0:poke252,144
980 poke 781,23:poke782,154:poke780,251:sys65496
1000 close8:print"{clr}";:goto100
2000 forj=len(h$)to1step-1:ifmid$(h$,j,1)=" "thennext
2010 h$=left$(h$,j):return
PROGRAMM : SMU.M C000 C32F ----------------------------------- C000 : 4C 07 C0 03 83 8D 22 20 CE C008 : 44 E5 20 66 E5 EA A5 C6 EE C010 : 85 CC F0 FA A5 CF F0 0C 4B C018 : A5 CE AE 87 02 A0 00 84 EF C020 : CF 20 13 EA 20 B4 E5 8D 7C C028 : C0 02 A2 03 BD 03 C0 CD 85 C030 : C0 02 F0 D9 CA 10 F5 38 DE C038 : 20 F0 FF AD C0 02 C9 94 F2 C040 : F0 51 C9 14 F0 4D C9 85 79 C048 : D0 01 60 E0 15 D0 1E C9 B1 C050 : 0D F0 B7 C9 9D F0 36 C9 CA C058 : 11 D0 08 A2 00 18 20 F0 4B C060 : FF 90 AA C0 27 D0 06 20 BB C068 : D2 FF 4C 0A C0 E0 00 D0 43 C070 : 1C C0 00 D0 0F C9 9D D0 5E C078 : 0B A2 15 A0 27 18 20 F0 C3 C080 : FF 4C 0D C0 C9 91 D0 05 77 C088 : A2 15 4C 7D C0 20 D2 FF D0 C090 : 4C 0D C0 A9 00 8D C1 02 40 C098 : A9 04 8D C2 02 AD C0 02 94 C0A0 : C9 94 F0 01 E8 E0 00 F0 87 C0A8 : 14 AD C1 02 18 69 28 8D CC C0B0 : C1 02 AD C2 02 69 00 8D BD C0B8 : C2 02 CA D0 EC 18 AD C1 12 C0C0 : 02 8D C3 02 AD C2 02 69 86 C0C8 : D4 8D C4 02 AD C1 02 AE 22 C0D0 : C2 02 85 5F 86 60 AD C0 84 C0D8 : 02 C9 94 F0 41 38 AD C1 12 C0E0 : 02 E9 28 85 5A AD C2 02 B4 C0E8 : E9 00 85 5B A9 C0 A2 07 D7 C0F0 : 85 58 86 59 20 6F C1 AD 4E C0F8 : C3 02 AE C4 02 85 5F 86 D7 C100 : 60 38 AD C3 02 E9 28 85 7B C108 : 5A AD C4 02 E9 00 85 5B 16 C110 : A9 C0 A2 DB 85 58 86 59 25 C118 : 20 6F C1 4C 0D C0 A9 98 98 C120 : A2 07 85 5A 86 5B A9 C0 5E C128 : 85 58 86 59 20 BF A3 AD 90 C130 : C3 02 AE C4 02 85 5F 86 0F C138 : 60 A9 98 A2 DB 85 5A 86 48 C140 : 5B A9 C0 85 58 86 59 20 B0 C148 : BF A3 38 20 F0 FF 8E C5 C0 C150 : 02 8C C6 02 20 FF E9 A2 79 C158 : 16 A0 00 18 20 F0 FF 20 8B C160 : FF E9 AE C5 02 AC C6 02 5D C168 : 18 20 F0 FF 4C 0D C0 A0 3E C170 : 00 B1 5F 91 5A C8 C0 28 92 C178 : D0 F7 18 A5 5F 69 28 85 EC C180 : 5F A5 60 69 00 85 60 18 D5 C188 : A5 5A 69 28 85 5A A5 5B 32 C190 : 69 00 85 5B A5 5F C5 58 E3 C198 : D0 D5 A5 60 C5 59 D0 CF D2 C1A0 : 60 FF FF FF FF FF FF FF 00 C1A8 : FF FF FF FF FF FF FF FF A7 C1B0 : FF FF FF FF FF 20 FD AE 05 C1B8 : 20 9E AD 20 A3 B6 8D 3E 39 C1C0 : 03 8E 3F 03 8C 40 03 20 52 C1C8 : FD AE 20 9E B7 A9 01 A0 06 C1D0 : 02 20 BA FF AD 3E 03 AE C7 C1D8 : 3F 03 AC 40 03 20 BD FF F4 C1E0 : 20 C0 FF A2 01 20 C9 FF ED C1E8 : A9 00 8D 3C 03 8D 3D 03 14 C1F0 : 8D 3E 03 8D 40 03 85 69 14 C1F8 : 85 6B 8D 43 03 A9 01 8D 9B C200 : 41 03 A9 04 85 6A A9 D8 B2 C208 : 85 6C A2 00 A9 80 9D 33 E7 C210 : C3 9D 33 C4 9D 33 C5 9D CD C218 : 33 C6 E8 D0 EF A9 DE 20 0A C220 : D2 FF A9 64 20 D2 FF A0 C3 C228 : 00 8C 3D 03 AC 3D 03 B1 42 C230 : 69 8D 42 03 20 D2 FF B1 4D C238 : 6B 20 D2 FF AD 42 03 C9 F4 C240 : 21 D0 14 AD 40 03 F0 07 72 C248 : C9 02 F0 20 20 F4 C2 A9 5A C250 : 02 20 15 C3 4C 6C C2 C9 E7 C258 : 23 D0 16 AD 40 03 F0 07 0D C260 : C9 01 F0 08 20 F4 C2 A9 EF C268 : 01 20 15 C3 EE 3E 03 F0 06 C270 : 4C AD 40 03 F0 0E AD 42 BE C278 : 03 C9 21 F0 07 C9 23 F0 F3 C280 : 03 20 F4 C2 AD 3D 03 C9 8D C288 : 27 F0 06 EE 3D 03 4C 2C FC C290 : C2 EE 3C 03 AD 3C 03 C9 95 C298 : 16 F0 1D 18 A5 69 69 28 0C C2A0 : 85 69 A5 6A 69 00 85 6A 12 C2A8 : 18 A5 6B 69 28 85 6B A5 42 C2B0 : 6C 69 00 85 6C 4C 27 C2 CD C2B8 : A9 00 8D 41 03 A9 00 8D 85 C2C0 : 3C 03 AE 3C 03 BD 33 C3 23 C2C8 : 20 D2 FF AE 3C 03 BD 33 60 C2D0 : C4 20 D2 FF AE 3C 03 BD AD C2D8 : 33 C5 20 D2 FF AE 3C 03 BD C2E0 : BD 33 C6 20 D2 FF EE 3C 4E C2E8 : 03 D0 D7 20 CC FF A9 01 C3 C2F0 : 20 C3 FF 60 AE 43 03 AD 6A C2F8 : 3E 03 9D 33 C6 A9 00 8D 5A C300 : 3E 03 8D 40 03 EE 43 03 E6 C308 : F0 01 60 68 68 A9 02 8D 95 C310 : 41 03 4C EB C2 8D 40 03 03 C318 : 38 E9 01 AE 43 03 9D 33 84 C320 : C5 AD 3C 03 9D 33 C3 AD 09 C328 : 3D 03 9D 33 C4 60 C8 94
PROGRAMM : SMUBU 9000 9A18 ----------------------------------- 9000 : A9 FB A2 90 8D 08 03 8E A4 9008 : 09 03 A9 00 8D 10 90 60 5A 9010 : 00 37 97 00 00 00 00 00 92 9018 : 00 00 00 00 00 00 00 00 19 9020 : 00 00 00 00 00 00 43 4C C6 9028 : 45 49 4E 2E 53 45 54 49 AE 9030 : 4E 2E 4D 41 53 4B 2E 53 00 9038 : 43 52 45 45 4E 2E 57 4D ED 9040 : 41 53 4B 2E 49 4D 41 53 6E 9048 : 4B 2E 49 4F 4D 41 53 4B A9 9050 : 2E 49 4E 4C 49 4E 45 2E B8 9058 : 44 49 45 52 2E 71 91 5B 48 9060 : 91 7D 91 6B 92 35 93 D2 48 9068 : 93 22 97 37 97 07 98 85 F8 9070 : 89 86 8A 87 8B 88 8C 2C 57 9078 : 53 2C 52 8B 90 97 90 A3 37 9080 : 90 B1 90 C1 90 D0 90 D8 C9 9088 : 90 E3 90 4E 4F 54 20 53 B6 9090 : 4D 55 20 46 49 4C C5 4E 03 9098 : 4F 54 20 53 4D 55 20 44 0C 90A0 : 41 54 C1 4E 4F 54 20 53 04 90A8 : 4D 55 20 41 52 52 41 59 40 90B0 : D3 49 4C 4C 45 47 41 4C F1 90B8 : 20 50 4F 53 49 54 49 4F 3A 90C0 : CE 41 52 52 41 59 20 4E 0A 90C8 : 4F 54 20 46 4F 55 4E C4 75 90D0 : 54 52 41 4E 53 4D 49 D4 D6 90D8 : 4E 4F 20 53 4D 55 2D 4D 0F 90E0 : 41 53 CB 4D 49 53 53 49 76 90E8 : 4E 47 20 4C 49 4E 4B 20 E0 90F0 : 53 4D 55 20 43 4F 4D 4D C2 90F8 : 41 4E C4 20 73 00 C9 21 36 9100 : F0 06 20 79 00 4C E7 A7 7C 9108 : A2 FF A0 FF A5 7A 8D C0 B8 9110 : 02 A5 7B 8D C1 02 C8 C8 56 9118 : A9 00 85 59 AD C0 02 85 42 9120 : 7A AD C1 02 85 7B E8 BD 75 9128 : 26 90 F0 2C C9 2E F0 14 52 9130 : 85 02 A5 59 D0 F0 20 73 47 9138 : 00 C5 02 F0 E9 A9 01 85 B4 9140 : 59 4C 26 91 A5 59 D0 CE 81 9148 : 88 B9 5D 90 8D 11 90 B9 2D 9150 : 5E 90 8D 12 90 6C 11 90 6E 9158 : 4C 08 AF A9 34 8D 14 03 CF 9160 : A9 70 A2 91 8D 18 03 8E DF 9168 : 19 03 20 73 00 4C AE A7 E6 9170 : 40 A9 31 8D 14 03 58 A9 91 9178 : 47 A2 FE D0 E7 20 73 00 37 9180 : 20 9E AD 20 A3 B6 F0 04 1A 9188 : C9 11 90 03 4C 48 B2 85 3B 9190 : 02 86 59 84 5A A8 B1 59 21 9198 : 99 13 90 88 10 F8 A2 00 43 91A0 : A4 02 BD 77 90 99 13 90 E7 91A8 : E8 C8 E0 04 D0 F4 84 02 78 91B0 : 20 FD AE 20 9E B7 86 5B F7 91B8 : 20 FD AE 20 3E 98 A9 08 E6 91C0 : A6 5B A0 02 20 BA FF A5 9F 91C8 : 02 A2 13 A0 90 20 BD FF F5 91D0 : 20 C0 FF A2 08 20 C6 FF 41 91D8 : 20 CF FF C9 DE D0 07 20 EA 91E0 : CF FF C9 64 F0 05 A9 00 8C 91E8 : 4C 25 98 A9 0B A2 A0 20 AB 91F0 : AE 98 A5 47 A6 48 8D 13 46 91F8 : 90 8E 14 90 A9 04 A2 FF 2C 9200 : 85 02 8E C2 02 AD C0 02 17 9208 : 85 64 AD C1 02 85 65 AD A0 9210 : C2 02 20 75 B4 A0 02 B9 56 9218 : 61 00 91 47 88 10 F8 20 F4 9220 : E4 98 20 46 99 C6 02 D0 9B 9228 : DC A9 00 8D C0 02 A9 04 55 9230 : 85 02 AD 13 90 AE 14 90 74 9238 : 85 47 86 48 A0 01 B1 47 73 9240 : 85 49 C8 B1 47 85 4A 20 DC 9248 : CF FF AC C0 02 91 49 20 6C 9250 : E4 98 C6 02 D0 E6 EE C0 F4 9258 : 02 AD C0 02 C9 FF D0 CE 1F 9260 : 20 CC FF A9 08 20 C3 FF AC 9268 : 4C AE A7 20 73 00 20 3E 2D 9270 : 98 A5 47 A6 48 8D 13 90 E0 9278 : 8E 14 90 A9 0B A2 A0 20 F2 9280 : F2 98 A9 15 20 09 99 A9 CF 9288 : 16 A2 9A 20 38 99 A9 27 DF 9290 : 20 09 99 A9 15 A2 9B 20 E5 9298 : 38 99 A9 01 20 09 99 A9 2B 92A0 : 14 A2 9C 20 38 99 A9 FF 27 92A8 : 20 09 99 A9 13 A2 9D 20 E5 92B0 : 38 99 A9 80 8D 10 90 AD 26 92B8 : 13 90 AE 14 90 85 47 86 A1 92C0 : 48 A9 00 A2 04 85 57 86 08 92C8 : 58 85 59 A9 D8 85 5A A2 D7 92D0 : 0B A0 01 B1 47 85 49 C8 F9 92D8 : B1 47 85 4A A0 00 84 02 F8 92E0 : 8C C0 02 AC C0 02 B1 49 58 92E8 : C9 21 F0 04 C9 23 D0 02 FB 92F0 : A9 20 8C C0 02 A4 02 91 55 92F8 : 57 AC C0 02 C8 B1 49 8C 6E 9300 : C0 02 A4 02 91 59 E6 02 AE 9308 : EE C0 02 AC C0 02 C0 A0 CD 9310 : D0 D1 20 E4 98 18 A5 57 FD 9318 : 69 50 85 57 A5 58 69 00 B8 9320 : 85 58 18 A5 59 69 50 85 B9 9328 : 59 A5 5A 69 00 85 5A CA 43 9330 : D0 9F 4C AE A7 20 73 00 02 9338 : AD 10 90 2A B0 05 A9 06 3D 9340 : 4C 25 98 20 58 99 A9 00 42 9348 : 85 5B A6 5B BD 16 9A 48 17 9350 : BD 15 9B A8 BD 13 9D 85 8A 9358 : 02 BD 14 9C 85 60 68 AA 24 9360 : 18 20 F0 FF A5 60 D0 1F A3 9368 : 20 28 AF 20 8D AD 20 DD 0F 9370 : BD A0 00 A9 01 84 59 85 57 9378 : 5A 84 5F AE 00 01 E0 20 8E 9380 : D0 17 85 59 4C 99 93 20 88 9388 : 28 AF 20 A3 B6 86 59 84 12 9390 : 5A 85 5F C9 00 F0 16 A0 DF 9398 : 00 B1 59 F0 10 20 CA F1 F6 93A0 : C8 C4 02 F0 08 A5 5F F0 76 93A8 : F0 C4 5F D0 EC E6 5B A6 AD 93B0 : 5B BD 16 9A 30 09 20 FD 8B 93B8 : AE 20 D9 99 4C 4A 93 AD E1 93C0 : 10 90 2A 2A 90 03 4C 2D 95 93C8 : 94 20 06 A9 20 FB A8 4C 40 93D0 : AE A7 AD 10 90 30 05 A9 B1 93D8 : 06 4C 25 98 20 73 00 20 3F 93E0 : 9E AD 20 A3 B6 F0 04 C9 68 93E8 : 09 90 05 A9 05 4C 25 98 28 93F0 : 85 02 86 49 84 4A A0 00 5E 93F8 : B1 49 C9 85 90 ED C9 8D 2C 9400 : B0 E9 99 13 90 C8 C4 02 D4 9408 : D0 EE A9 00 99 13 90 20 6E 9410 : FD AE A5 7A A6 7B 8D C0 1B 9418 : 02 8E C1 02 BA 8E C2 02 41 9420 : AD 10 90 2A 2A 90 03 4C 0B 9428 : 43 93 20 58 99 A2 00 86 04 9430 : 5E 86 57 86 5B 86 5C BD 4F 9438 : 15 9B A8 BD 16 9A AA 18 0E 9440 : 20 F0 FF 20 82 99 C9 85 03 9448 : 90 24 C9 8D B0 20 A2 00 A5 9450 : BD 13 90 F0 EE C5 02 F0 E0 9458 : 03 E8 10 F4 A2 07 A5 02 6F 9460 : DD 6F 90 F0 03 CA D0 F8 F3 9468 : E8 86 02 4C 37 96 C9 22 31 9470 : F0 D1 C9 20 B0 03 4C CE B1 9478 : 94 C9 80 90 07 C9 A0 B0 C6 9480 : 03 4C CE 94 A6 57 BD 14 34 9488 : 9C D0 1A A5 02 C9 45 F0 2D 9490 : 14 C9 2D F0 10 C9 2E F0 DC 9498 : 0C C9 2B F0 08 C9 30 90 22 94A0 : A2 C9 3A B0 9E A9 00 85 0E 94A8 : 5B 85 5C A5 02 E6 5E 20 A3 94B0 : CA F1 A6 57 BD 13 9D C5 7E 94B8 : 5E D0 88 A9 00 85 5E E6 49 94C0 : 57 A6 57 BD 16 9A 10 03 74 94C8 : 4C 2D 94 4C 37 94 C9 93 C0 94D0 : F0 0C C9 13 F0 08 48 A9 5F 94D8 : 00 85 5C 85 5B 68 C9 0D 9D 94E0 : F0 D9 C9 11 F0 D5 C9 8D 51 94E8 : F0 D1 C9 13 D0 14 A5 5B 91 94F0 : F0 03 4C 2D 94 A9 00 85 BC 94F8 : 5E A6 57 A9 01 85 5B 4C F7 9500 : C1 94 C9 93 D0 33 A5 5C E6 9508 : F0 06 20 58 99 4C 2D 94 E8 9510 : A9 01 85 5C A6 57 BD 15 6D 9518 : 9B A8 BD 16 9A AA 18 20 D9 9520 : F0 FF A6 57 BD 13 9D AA E5 9528 : A9 20 20 CA F1 CA D0 FA F1 9530 : A9 00 85 5E A6 57 4C C1 E0 9538 : 94 C9 91 D0 1A A9 00 85 29 9540 : 5E C6 57 A6 57 E0 FF D0 CA 9548 : 0B E6 57 A6 57 BD 16 9A 62 9550 : 10 F7 C6 57 4C C1 94 C9 B1 9558 : 1D D0 05 85 02 4C A5 94 12 9560 : C9 9D D0 46 A5 5E F0 0B 1C 9568 : C6 5E C6 5E A9 9D 85 02 7C 9570 : 4C A5 94 C6 57 A6 57 E0 56 9578 : FF D0 0B E6 57 A6 57 BD 02 9580 : 16 9A 10 F7 C6 57 A6 57 57 9588 : BD 15 9B A8 BD 16 9A AA 18 9590 : 18 20 F0 FF A6 57 BD 13 37 9598 : 9D AA CA 86 5E F0 08 A9 EF 95A0 : 1D 20 CA F1 CA D0 FA 4C 76 95A8 : 43 94 C9 94 D0 3F A6 57 8A 95B0 : BD 13 9D A8 88 F0 33 98 81 95B8 : C5 5E F0 2E 38 E5 5E 85 E5 95C0 : 59 20 6C E5 20 24 EA 20 10 95C8 : 9E 99 A4 59 B1 61 C9 20 15 95D0 : D0 18 88 B1 61 C8 91 61 6A 95D8 : 88 B1 63 C8 91 63 88 D0 23 95E0 : F1 A9 20 91 61 AD 86 02 82 95E8 : 91 63 4C 43 94 C9 14 D0 30 95F0 : 43 A6 57 BD 13 9D A8 88 E6 95F8 : 84 59 D0 08 A9 20 20 CA 10 9600 : F1 4C 08 96 A5 5E F0 2C 56 9608 : A9 9D 20 CA F1 20 6C E5 7F 9610 : 20 24 EA 20 9E 99 A4 59 FD 9618 : F0 1A C8 98 38 E5 5E 85 92 9620 : 60 A0 00 C8 B1 61 88 91 55 9628 : 61 C8 C4 60 D0 F5 A9 20 CE 9630 : 91 61 C6 5E 4C 43 94 AD 7C 9638 : C0 02 AE C1 02 85 7A 86 20 9640 : 7B A2 00 86 57 A6 57 BD 61 9648 : 16 9A 48 BD 15 9B A8 68 17 9650 : AA 18 20 F0 FF A6 57 BD 3A 9658 : 14 9C F0 33 20 8B B0 85 89 9660 : 49 84 4A 20 A3 B6 A6 57 BB 9668 : BD 13 9D 85 58 20 75 B4 8D 9670 : A0 02 B9 61 00 91 49 88 6F 9678 : 10 F8 20 B9 99 A0 00 20 22 9680 : CF FF 91 62 C8 C4 61 D0 D9 9688 : F6 20 D0 99 4C DA 96 20 2C 9690 : 8B B0 85 49 84 4A 20 8D 34 9698 : AD A6 57 BD 13 9D 85 58 0B 96A0 : 20 B9 99 A0 00 20 CF FF 57 96A8 : 99 C3 02 C8 C4 58 D0 F5 FB 96B0 : A9 00 99 C3 02 20 D0 99 D0 96B8 : A9 C3 A2 02 85 22 86 23 F5 96C0 : A9 FE A2 96 8D 00 03 8E 66 96C8 : 01 03 20 B5 B7 A9 8B A2 46 96D0 : E3 8D 00 03 8E 01 03 20 18 96D8 : D0 BB E6 57 A6 57 BD 16 73 96E0 : 9A 30 09 20 FD AE 20 D9 62 96E8 : 99 4C 45 96 20 06 A9 20 E5 96F0 : FB A8 A9 80 8D 10 90 AE B3 96F8 : C2 02 9A 4C AE A7 8A 30 9E 9700 : CC 48 A9 8B A2 E3 8D 00 4C 9708 : 03 8E 01 03 68 C9 0F F0 E6 9710 : 03 4C 8E E3 68 68 68 68 96 9718 : 68 A9 00 85 5E A6 57 4C 17 9720 : 37 94 AD 10 90 30 05 A9 01 9728 : 06 4C 25 98 AD 10 90 09 60 9730 : 40 8D 10 90 4C D2 93 20 37 9738 : 73 00 20 9E B7 E0 19 90 8F 9740 : 05 A9 03 4C 25 98 86 57 44 9748 : 20 FD AE 20 9E B7 E0 28 92 9750 : B0 EF 86 59 20 FD AE 20 B2 9758 : 9E B7 86 5F E0 00 D0 03 B7 9760 : 4C 48 B2 20 FD AE A9 00 7D 9768 : 85 5E A6 57 A4 59 18 20 67 9770 : F0 FF 20 82 99 C9 0D F0 B6 9778 : 56 C9 14 D0 18 A6 5E F0 E4 9780 : F1 C6 5E A9 9D 20 CA F1 8B 9788 : A9 20 20 CA F1 A9 9D 20 C6 9790 : CA F1 4C 72 97 C9 22 F0 E6 9798 : D9 C9 20 90 D5 C9 80 90 3F 97A0 : 1F C9 A0 90 CD C9 C0 90 2D 97A8 : 17 C9 C2 90 C5 C9 EA 90 DE 97B0 : 0F C9 E0 90 BD C9 FE 90 35 97B8 : 07 C9 FF F0 03 4C 72 97 4D 97C0 : A6 5E E4 5F F0 AC E8 86 DF 97C8 : 5E 20 CA F1 4C 72 97 A5 29 97D0 : 5F 48 A6 57 A4 59 18 20 9E 97D8 : F0 FF 20 8B B0 85 49 84 A7 97E0 : 4A 20 A3 B6 68 20 75 B4 C1 97E8 : A0 02 B9 61 00 91 49 88 E7 97F0 : 10 F8 20 B9 99 A0 00 20 9A 97F8 : CF FF 91 62 C8 C4 61 D0 51 9800 : F6 20 D0 99 4C AE A7 A9 9A 9808 : 80 A2 08 A0 0F 20 BA FF CC 9810 : A9 00 20 BD FF 20 C0 FF 7D 9818 : 20 73 00 A2 80 20 AD AB 5D 9820 : 4C AE A7 EA EA 0A 48 20 6B 9828 : CC FF A9 08 20 C3 FF 68 50 9830 : AA BD 7B 90 85 22 BD 7C 03 9838 : 90 85 23 4C 4A A4 20 8B 3F 9840 : B0 20 8F AD A5 64 8D C0 CF 9848 : 02 A5 65 8D C1 02 A6 2F 4D 9850 : A5 30 86 5C 85 5D C5 32 F9 9858 : D0 04 E4 31 F0 1D A0 00 04 9860 : B1 5C C8 C5 45 D0 06 A5 68 9868 : 46 D1 5C F0 13 C8 B1 5C C3 9870 : 18 65 5C AA C8 B1 5C 65 FE 9878 : 5D 90 D7 A9 04 4C 25 98 B1 9880 : C8 B1 5C 18 65 5C 85 5E 47 9888 : C8 B1 5C 65 5D 85 5F 18 9C 9890 : A5 47 69 2D 85 60 A5 48 5B 9898 : 69 00 85 59 A5 5F C5 59 AD 98A0 : 90 08 D0 09 A5 5E C5 60 AF 98A8 : B0 03 4C 45 B2 60 85 02 DE 98B0 : 8E C2 02 AD C0 02 85 64 D1 98B8 : AD C1 02 85 65 AD C2 02 4A 98C0 : 20 75 B4 A0 02 B9 61 00 4F 98C8 : 91 47 88 10 F8 A0 00 20 F6 98D0 : CF FF 91 62 C8 C4 61 D0 29 98D8 : F6 20 E4 98 20 46 99 C6 53 98E0 : 02 D0 D0 60 18 A5 47 69 29 98E8 : 03 85 47 A5 48 69 00 85 0F 98F0 : 48 60 85 02 86 59 A0 00 C0 98F8 : B1 47 C5 59 F0 03 4C 13 68 9900 : 99 20 E4 98 C6 02 D0 F0 97 9908 : 60 85 02 A0 00 B1 47 C9 FE 9910 : FF F0 05 A9 01 4C 25 98 36 9918 : C8 B1 47 99 44 00 C0 02 09 9920 : D0 F6 A0 FE B1 45 30 09 8B 9928 : A5 02 D1 45 B0 03 4C 13 66 9930 : 99 88 10 F0 20 E4 98 60 7C 9938 : 85 49 86 4A A0 00 B1 45 A8 9940 : 91 49 C8 D0 F9 60 18 AD 20 9948 : C0 02 69 01 8D C0 02 AD C6 9950 : C1 02 69 00 8D C1 02 60 1C 9958 : A9 00 85 02 A6 02 BD 16 41 9960 : 9A 30 1E 48 BD 15 9B A8 E7 9968 : BD 13 9D 85 59 68 AA 18 7B 9970 : 20 F0 FF A9 20 20 CA F1 4F 9978 : C6 59 D0 F9 E6 02 4C 5C C6 9980 : 99 60 A5 C6 85 CC F0 FA 04 9988 : A5 CF F0 0C A5 CE AE 87 6D 9990 : 02 A0 00 84 CF 20 13 EA 93 9998 : 20 B4 E5 85 02 60 18 A5 0B 99A0 : D1 65 D3 85 61 A5 D2 69 2B 99A8 : 00 85 62 18 A5 F3 65 D3 3E 99B0 : 85 63 A5 F4 69 00 85 64 64 99B8 : 60 A9 03 A2 03 A0 03 20 83 99C0 : BA FF A9 00 20 BD FF 20 14 99C8 : C0 FF A2 03 20 C6 FF 60 8A 99D0 : 20 CC FF A9 03 20 C3 FF CC 99D8 : 60 C9 5F F0 01 60 20 09 B8 99E0 : A9 20 FB A8 20 09 A9 A9 F1 99E8 : FB A2 99 8D 08 03 8E 09 31 99F0 : 03 4C B1 A7 68 68 A9 07 F9 99F8 : 4C 25 98 A9 FB A2 90 8D 64 9A00 : 08 03 8E 09 03 20 73 00 4E 9A08 : C9 21 D0 E8 20 73 00 C9 E4 9A10 : 5F D0 E1 4C 73 00 00 CE AE
10 rem *******************************
15 rem * *
20 rem * literatur verwaltung *
25 rem * *
30 rem * demoprogramm *
35 rem * zu smu *
40 rem * *
45 rem * autor: georg krcal *
50 rem * *
60 rem * ziegelhofstrasse 36/11/9 *
65 rem * a-1220 wien *
70 rem * telefon: 22-17-724 *
75 rem * *
80 rem *******************************
100 ifa=0thenpoke56,144:clr:a=1:load"smubu",8,1
110 clr:sys9*4096
120 printchr$(147)chr$(8)chr$(14)chr$(30);
130 poke53280,0:poke53281,0
140 dim m$(14),h$(20)
150 rem
160 !mask "zeitschrift",8,m$(0)
170 fori=1to40:cd$=cd$+chr$(17)
180 cr$=cr$+chr$(29):bl$=bl$+" ":next
190 cd$=chr$(19)+cd$:x=fre(0)
200 ri$=chr$(18):ro$=chr$(146)
210 b1$=ri$+"1"+ro$+" eingeben "+ri$+"3"+ro$+" suchen "+ri$+"5"+ro$
220 b1$=b1$+" weiter "
230 b2$=ri$+"2"+ro$+" drucken "
240 b2$=b2$+ri$+"4"+ro$+" index "+ri$+"6"+ro$+" prg-ende"
300 print"Diskette formatieren [j/n]";:wait 203,63
310 getg$:ifg$<>"j"then380
320 printg$"a":print"Diskettenname:"
330 print"Disketten - ID":!inline 1,15,16,dn$
340 !inline2,16,2,di$:ifdi$=" "then340
350 h$="n:"+dn$+","+di$:print:print" Diskette einlegen - Taste druecken"
360 getg$:ifg$=""then360
370 rem "open 1,8,15,h$:close1"
380 printchr$(147)"Bestehende Datei [j/n] ?"
390 wait203,63:getg$:ifg$="j"then500
400 ifg$<>"n"then390
410 open1,8,2,"literatur,l,"+chr$(202)
420 gosub10000
440 open2,8,15
450 print#2,"p"+chr$(2)+chr$(44)+chr$(1)+chr$(1)
460 print#1,chr$(255)
470 print#2,"p"+chr$(2)+chr$(1)+chr$(1)+chr$(1)
480 print#1,1,chr$(13);1;chr$(13);1
490 close2:close1
500 gosub10000:open1,8,2,"literatur,l,"+chr$(202)
510 open2,8,15
520 print#2,"p"+chr$(2)+chr$(1)+chr$(1)+chr$(1)
530 input#2,en,en$,t,s:ifenthenclose1:close2:gosub10070:goto500
540 input#1,lr,se,ae:close2:close1
550 ts=se+100:ta=ae+100
580 dims$(se+100),au$(ae+100),sl$(se+100),sh$(se+100),al$(ae+100),ah$(ae+100)
590 ifse=1then680
600 open1,8,2,"stichwort,s,r":open2,8,15:input#2,en,en$,t,s
610 ifenthenclose1:gosub10070:goto600
620 fori=1tose-1:input#1,s$(i)
625 gosub7300:sl$(i)=h$:sh$(i)=h1$
630 nexti:close2:close1
640 open1,8,2,"autor,s,r"
650 rem ifenthenclose1:gosub10070:goto640
660 fori=1toae-1:input#1,au$(i)
665 gosub7300:al$(i)=h$:ah$(i)=h1$
670 nexti:close1
680 print"{clr}":gosub10030
700 !screen m$(0)
710 gosub10040
720 !imask "{f1}{f3}{f5}{f2}{f4}{f6}",s$,t1$,t2$,t3$,t4$,au$,v1$,v2$,o$,ja,se$,b$,an,z1$,z2$
725 gosub10000
730 onpeek(2)goto740,1100,1000,1200,720,2000,720
740 ifse+1>tsthenprint"stichwortdatei zu gross":stop
750 gosub7000:iflen(sl$(ei+1))>255thenprint"stichworttabelle zu gross":stop
760 ifge=1thenh1=i:goto780
770 h1=ei+1:se=se+1:h3$="":h4$=""
772 fori=ei+1tose:h$=s$(i):s$(i)=s$:s$=h$
773 h1$=sl$(i):sl$(i)=h3$:h3$=h1$:h2$=sh$(i):sh$(i)=h4$:h4$=h2$
775 nexti
780 ifae+1>tathenprint"autorendatei zu gross":stop
790 gosub7100:iflen(al$(ei+1))>255thenprint"autorentabellenueberlauf":stop
800 ifge=1thenei=i-1:goto820
810 ae=ae+1:h3$="":h4$=""
812 fori=ei+1toae:h$=au$(i):au$(i)=au$:au$=h$
813 h1$=al$(i):al$(i)=h3$:h3$=h1$:h2$=ah$(i):ah$(i)=h4$:h4$=h2$:next
820 lr=lr+1:h=lr:gosub7200
830 sh$(h1)=sh$(h1)+chr$(hb):sl$(h1)=sl$(h1)+chr$(lb)
840 ah$(ei+1)=ah$(ei+1)+chr$(hb):al$(ei+1)=al$(ei+1)+chr$(lb)
845 rem gosub 11000:lr=lr+1:goto700
850 open1,8,2,"literatur,l,"+chr$(202)
860 open2,8,15
870 print#2,"p"+chr$(2)+chr$(lb)+chr$(hb)+chr$(1)
880 h$=t1$+t2$+t3$+t4$+v1$+left$(v2$,10):print#1,h$
890 lr=lr+1:lb=lb+1:iflb=256thenlb=0:hb=hb+1
900 print#2,"p"+chr$(2)+chr$(lb)+chr$(hb)+chr$(1)
910 h3$=right$(v2$,28)+o$
920 h$=str$(ja):gosub7210:h1$=h$+left$(bl$,(4-len(h$)))
930 h$=str$(an):gosub7210:h2$=h$+left$(bl$,(2-len(h$)))
940 h$=h3$+h1$+se$+b$+h2$+z1$+z2$+au$(ei+1)+s$(h1):print#1,h$
999 close2:close1:goto700
1000 we=1:gosub8000:ifwe=0then730
1010 goto710
1100 open4,4,7:gosub10000:gosub7900:close4:goto710
1200 s1=1:open4,4,7:print#4,chr$(13)chr$(13)chr$(13)
1220 print#4,chr$(14);"STICHWOERTER";chr$(15);chr$(13);chr$(13)chr$(13)
1230 fori=1tose-1:forj=1to20:h$(j)=" ":next
1240 h$=s$(i):gosub7210:h$(1)=h$+": "
1250 z=1:forj=1tolen(sl$(i))
1260 h=asc(mid$(sl$(i),j,1)):h1=asc(mid$(sh$(i),j,1))
1270 h$=str$((h+h1*256)/2):gosub7210:h$=h$+","
1280 iflen(h$(z))+len(h$)>79thenz=z+1
1290 h$(z)=h$(z)+h$:next
1300 h$(z)=left$(h$(z),(len(h$(z))-1))
1310 forj=1toz:print#4,h$(j)
1315 nextj
1320 nexti
1330 print#4,chr$(13)chr$(13)chr$(13)
1340 print#4,chr$(14)"AUTOREN"chr$(15)chr$(13)chr$(13)chr$(13)
1350 fori=1toae-1:forj=1to20:h$(j)=" ":next
1360 h$=au$(i):gosub7210:h$(1)=h$+": "
1370 z=1:forj=1tolen(al$(i))
1380 h=asc(mid$(al$(i),j,1)):h1=asc(mid$(ah$(i),j,1))
1390 h$=str$((h+h1*256)/2):gosub7210:h$=h$+","
1400 iflen(h$(z))+len(h$)>79thenz=z+1
1410 h$(z)=h$(z)+h$:next
1420 h$(z)=left$(h$(z),(len(h$(z))-1))
1430 forj=1toz:print#4,h$(j)
1440 nextj
1450 nexti
1460 print#4,chr$(13)chr$(13)chr$(13)
1470 print#4,chr$(14)"LITERATURSTELLEN"chr$(15)chr$(13)chr$(13)chr$(13)
1480 fori=2tolr-1step2
1490 h=i:gosub7200:gosub9000:gosub7400
1510 h$=str$(i/2):gosub7210:h$="("+h$+")"
1520 h$=h$+left$(bl$,(9-len(h$)))+h$(1):print#4,h$
1530 forj=2toz:print#4,spc(9);h$(j):next
1550 nexti
1560 close4:goto710
2000 open1,8,15,"s:stichwort":close1
2010 open1,8,2,"stichwort,s,w"
2020 fori=1tose-1:h$=chr$(34)+s$(i)+chr$(34):print#1,h$
2030 forj=1tolen(sl$(i)):g=asc(mid$(sl$(i),j,1))
2040 print#1,g
2052 g=asc(mid$(sh$(i),j,1)):print#1,g:next
2054 print#1,"++":nexti
2060 close1
2070 open1,8,15,"s:autor":close1
2080 open1,8,2,"autor,s,w"
2090 fori=1toae-1:h$=chr$(34)+au$(i)+chr$(34):print#1,h$
2100 forj=1tolen(al$(i)):g=asc(mid$(al$(i),j,1))
2110 print#1,g
2122 g=asc(mid$(ah$(i),j,1)):print#1,g:next
2130 print#1,"++":nexti:close1
2140 open1,8,2,"literatur,l,"+chr$(202)
2150 open2,8,15
2160 print#2,"p"+chr$(2)+chr$(1)+chr$(1)+chr$(1)
2170 h$=str$(lr)+chr$(13)+str$(se)+chr$(13)+str$(ae)
2180 print#1,h$
2200 close2:close1
2210 print"{clr}";:end
7000 li=se:ei=0:i=0:ge=0
7010 if((li-ei)/2)<1thenreturn:rem stichwort nicht vorhanden
7020 i=int((li-ei)/2)+ei
7030 ifs$(i)=s$thenge=1:return
7040 ifs$<s$(i)thenli=i:goto7010
7050 ei=i:goto7010
7100 li=ae:ei=0:i=0:ge=0
7110 if((li-ei)/2)<1thenreturn:rem autor nicht vorhanden
7120 i=int((li-ei)/2)+ei
7130 ifau$(i)=au$thenge=1:return
7140 ifau$<au$(i)thenli=i:goto7110
7150 ei=i:goto7110
7200 hb=int(h/256):lb=h-hb*256:return
7210 forii=len(h$)to1step-1:ifmid$(h$,ii,1)=" "thennext
7220 h$=left$(h$,ii):forii=1tolen(h$):ifmid$(h$,ii,1)=" "thennext
7230 h$=right$(h$,(len(h$)-ii+1)):return
7300 h1$="":h$="":forj=1to256:input#1,g$:ifg$="++"thenj=256:return
7305 ifg$="0 "thenh$=h$+chr$(0):goto7315
7310 h$=h$+chr$(val(g$))
7315 input#1,g$
7320 ifg$="0 "thenh1$=h1$+chr$(0):goto7340
7330 h1$=h1$+chr$(val(g$))
7340 nextj:return
7400 forl=1to10:h$(l)="":next
7405 ifau$=left$(bl$,25)thenau$="?"
7410 h$=au$:gosub7210:h$(1)=h$+":"
7420 ift1$=left$(bl$,38)thent1$="?"
7430 h$=t1$:gosub7210:h$(2)=h$+" ":z=1
7440 ift2$=left$(bl$,38)then7500
7450 h$=t2$:gosub7210:h$(2)=h$(2)+h$+" "
7460 ift3$=left$(bl$,38)then7500
7470 z=2:h$=t3$:gosub7210:h$(3)=h$+" "
7480 ift4$=left$(bl$,38)then7500
7490 h$=t4$:gosub7210:h$(3)=h$(3)+h$
7500 z=z+1:h$(z)=h$(z)+"."
7510 ifb$="n"orb$="N"then7660
7520 z=z+1:ifo$=left$(bl$,34)theno$="?"
7530 h$=o$:gosub7210:h$(z)=h$(z)+h$
7540 ifv2$=left$(bl$,38)thenh$="":goto7560
7550 h$=v2$:gosub7210
7560 iflen(h$(z))+len(h$)+2>70thenz=z+1
7570 h$(z)=h$(z)+h$+", "
7580 ifja=0thenh$="?":goto7600
7590 h$=str$(ja):gosub7210
7600 iflen(h$(z))+len(h$)+2>70thenz=z+1
7610 h$(z)=h$(z)+h$+", "
7620 ifse$=left$(bl$,10)thenh$="":goto7650
7630 h$=se$:gosub7210
7640 iflen(h$(z))+len(h$)+1>70thenz=z+1
7650 h$(z)=h$(z)+h$+".":return
7660 z=z+1:ifz1$=left$(bl$,38)thenh$="?"
7670 h$=z1$:gosub7210:h$(z)=h$(z)+h$+" "
7680 ifz2$=left$(bl$,38)orh$="?"thenh$="":goto7700
7690 h$=z2$:gosub7210
7700 iflen(h$(z))+len(h$)+1>70thenz=z+1
7710 h$(z)=h$(z)+h$+" "
7720 ifan=0thenh$="?":goto7740
7730 h$=str$(an):gosub7210
7740 iflen(h$(z))+len(h$)+1>70thenz=z+1
7750 h$(z)=h$(z)+h$+" "
7760 ifja=0thenh$="(?)":goto7780
7770 h$=str$(ja):gosub7210:h$="("+h$+")"
7780 iflen(h$(z))+len(h$)+1>70thenz=z+1
7790 h$(z)=h$(z)+h$+" "
7800 ifse$=left$(bl$,10)thenh$="":goto7830
7810 h$=se$:gosub7210
7820 iflen(h$(z))+len(h$)+1>70thenz=z+1
7830 h$(z)=h$(z)+h$+".":return
7900 gosub7400:form=1toz:print#4,h$(m):next:return
8000 h=0:h2=0
8005 ifs$<>left$(bl$,21)thengosub7000:ifge=1then h=1:h1=i
8010 ifau$<>left$(bl$,25)thengosub7100:ifge=1thenh2=1:h3=i
8015 ifh=0andh2=0thenreturn
8020 ifh2=1or(h2=1andh=1)then8080
8030 fori=1tolen(sl$(h1)):lb=asc(mid$(sl$(h1),i,1))
8050 hb=asc(mid$(sh$(h1),i,1)):gosub9000
8060 gosub9300:ifwe=0thenreturn
8070 nexti:return
8080 ifh2=1andh=1then8140
8090 fori=1tolen(al$(h3)):lb=asc(mid$(al$(h3),i,1))
8100 hb=asc(mid$(ah$(h3),i,1)):gosub9000
8110 gosub9300:ifwe=0thenreturn
8120 nexti:return
8140 h1$=sh$(h1):h2$=ah$(h3):h4$=sl$(h1):h5$=al$(h3)
8150 ifh1$>h2$thenh3$=h2$:h2$=h1$:h1$=h3$:h3$=h5$:h5$=h4$:h4$=h3$
8160 fori=1tolen(h1$):forl=1tolen(h2$)
8170 ifmid$(h1$,i,1)<>mid$(h2$,l,1)thennextl,i:return
8175 ifmid$(h4$,i,1)<>mid$(h5$,l,1)thennextl,i:return
8180 lb=asc(mid$(h4$,i,1)):hb=asc(mid$(h1$,i,1))
8190 gosub9000:gosub9300
8200 ifwe=0thenreturn
8210 nextl,i:return
9000 open1,8,2,"literatur,l,"+chr$(202)
9010 open2,8,15
9020 print#2,"p"+chr$(2)+chr$(lb)+chr$(hb)+chr$(1)
9030 forj=0to3:h$(j)=""
9040 fork=1to38:get#1,g$:h$(j)=h$(j)+g$:next:next
9050 t1$=h$(0):t2$=h$(1):t3$=h$(2):t4$=h$(3)
9060 v1$="":forj=0to37:get#1,g$:v1$=v1$+g$:next
9061 v2$="":forj=0to9:get#1,g$:v2$=v2$+g$:next
9062 lb=lb+1:iflb>255thenlb=0:hb=hb+1
9063 print#2,"p"+chr$(2)+chr$(lb)+chr$(hb)+chr$(1)
9070 forj=1to28:get#1,g$:v2$=v2$+g$:next
9080 o$="":forj=1to34:get#1,g$:o$=o$+g$:next
9090 h$="":forj=1to4:get#1,g$:h$=h$+g$:next:ja=val(h$)
9095 se$="":forj=1to10:get#1,g$:se$=se$+g$:next
9100 get#1,b$
9110 h$="":forj=1to2:get#1,g$:h$=h$+g$:next:an=val(h$)
9130 z1$="":forj=1to38:get#1,g$:z1$=z1$+g$:next
9140 z2$="":forj=1to38:get#1,g$:z2$=z2$+g$:next
9150 au$="":forj=1to25:get#1,g$:au$=au$+g$:next
9160 s$="":forj=1to21:get#1,g$:s$=s$+g$:next
9290 close2:close1:return
9300 gosub 10040
9305 !iomask "{f1}{f3}{f5}{f2}{f4}{f6}",s$,t1$,t2$,t3$,t4$,au$,v1$,v2$,o$,ja,se$,b$,an,z1$,z2$
9310 ifpeek(2)=2thenopen4,4,7:gosub7900:close4:goto9330
9320 ifpeek(2)<>5thenwe=0
9330 gosub10000:return
9999 stop
10000 printleft$(cd$,24)bl$left$(bl$,38)chr$(145)chr$(145);
10010 printleft$(cd$,24)spc(12)"SYSTEM{$a0}ARBEITET";
10020 return
10030 printleft$(cd$,24)bl$chr$(20)right$(bl$,39)chr$(145)chr$(145);:return
10040 gosub 10030:printleft$(cd$,24)b1$;:printleft$(cd$,25)b2$chr$(145)chr$(145);
10050 return
10060 !dier en,en$,t,s
10070 printen;en$;t;s:stop
PROGRAMM : MASKE 0801 0D86 ----------------------------------- 0801 : 0F 08 CA A8 9E 32 30 36 85 0809 : 35 20 46 43 43 00 00 00 7D 0811 : A0 00 B9 69 07 99 00 CD 26 0819 : B9 69 08 99 00 CE B9 69 EC 0821 : 09 99 00 CF C8 D0 EB 4C 4C 0829 : C2 CD 78 A0 FF 84 FB A9 6B 0831 : C6 85 FC A9 36 85 01 8D DD 0839 : 20 D0 C8 A5 2D D0 02 C6 97 0841 : 2E C6 2D A6 2E E0 09 D0 A2 0849 : 04 C9 BF F0 0F B1 2D 91 96 0851 : FB A5 FB D0 02 C6 FC C6 10 0859 : FB 4C D3 CD A2 08 A9 01 3C 0861 : 86 2E 85 2D 84 FF 20 50 6F 0869 : CE C9 F3 D0 27 20 50 CE 85 0871 : AA 86 FA C9 04 B0 04 A9 7F 0879 : F3 D0 03 20 50 CE A0 00 97 0881 : 91 2D C8 C6 FA D0 F9 98 03 0889 : 18 65 2D 85 2D 90 02 E6 7D 0891 : 2E 4C 34 CE A0 00 91 2D 77 0899 : E6 2D F0 F3 A9 0E A2 13 8C 08A1 : E4 2E D0 C2 C5 2D D0 BE AF 08A9 : A9 37 85 01 A9 FE 8D 20 78 08B1 : D0 58 20 59 A6 4C AE A7 B7 08B9 : A2 FF 86 F7 86 F8 E8 A9 22 08C1 : 01 85 FE A9 7F 85 FD C6 23 08C9 : FF 10 10 E6 FB D0 02 E6 CD 08D1 : FC A9 07 85 FF A0 00 B1 7D 08D9 : FB 85 F9 06 F9 B0 0A A4 6D 08E1 : FE A5 FD 39 F7 00 99 F7 2E 08E9 : 00 8A 0A A8 A5 F7 38 F9 B5 08F1 : E2 CE A5 F8 F9 E3 CE 90 DE 08F9 : 0E E0 0C F0 0A E8 38 66 2E 0901 : FD B0 C4 C6 FE F0 BC 8A E0 0909 : F0 0F A5 F7 38 F9 E0 CE 5E 0911 : 85 F7 A5 F8 F9 E1 CE 85 0F 0919 : F8 A4 FE F0 07 A5 F8 85 CE 0921 : F7 88 84 F8 A5 FD 4A 90 31 0929 : 07 46 F8 66 F7 4C BE CE D9 0931 : BD D2 CE 65 F7 A8 B9 00 63 0939 : CF 60 00 00 02 03 03 07 8B 0941 : 0E 13 20 2E 3A 4F 54 56 C3 0949 : 56 56 00 00 00 80 00 A0 10 0951 : 00 A0 00 C0 00 DC 00 E6 6E 0959 : 00 F3 00 FA 00 FD A0 FF 25 0961 : F0 FF 00 00 00 00 00 00 51 0969 : 21 20 F5 F0 05 85 B5 00 89 0971 : D5 65 5D 95 01 15 45 B0 32 0979 : 80 A5 60 10 A0 C0 14 90 67 0981 : 26 C5 08 12 40 E0 23 25 B0 0989 : 09 0E D0 E5 03 06 07 F3 EF 0991 : 0B 0C 0D 13 84 A9 FF 02 E2 0999 : 04 0F 11 30 41 53 5A 0A 9B 09A1 : 17 19 1D 22 2C 31 32 36 52 09A9 : 42 4A 4C 4F 54 55 56 58 07 09B1 : 59 5B 5F 64 6A 9B 9E A3 61 09B9 : A6 BF C1 C7 DE E2 F7 76 7A 09C1 : FF EF B3 FE 7E CF B7 F6 B8 09C9 : FE BC 30 C3 E7 FA B9 FB DF 09D1 : 6D FE 3E 5C BE 7E 7E 7F B1 09D9 : 8D BF 0F 97 F7 F9 FF FF 4C 09E1 : 9F FD 5B FA FC BF B3 FF 52 09E9 : 9F F5 FC 3F DF FD E1 FF 1F 09F1 : EF F3 F7 CE 99 E6 DD EA D0 09F9 : F2 ED 9F 95 FE B9 DD 6E 8E 0A01 : 98 CC EA 43 23 12 16 21 80 0A09 : 72 A5 8B 99 10 D0 86 25 50 0A11 : 48 68 54 84 CE 3D 0D 1E 7A 0A19 : 0F 07 BD A3 46 8D 1E 67 A8 0A21 : 83 47 99 A3 46 8F 43 E0 D2 0A29 : E0 E0 EF 68 D1 E6 70 77 87 0A31 : B8 3B DE 86 8D 1A 3C 9D E5 0A39 : ED 1A 38 3C CD 1E 0F 27 21 0A41 : 07 06 8F 06 8D 3F 94 F3 FD 0A49 : 6D D3 6A DB DF 76 AC 63 E1 0A51 : 1B B8 B1 BB 56 31 8C 68 9E 0A59 : E0 E0 F3 BE 86 8D 1E A7 1B 0A61 : BD A3 47 7B E8 68 D1 E6 18 0A69 : 70 70 77 BD 0D 1A 67 63 AD 0A71 : D2 5C C4 C4 B9 52 19 19 00 0A79 : 17 2C 58 FE 64 21 89 A1 55 0A81 : 91 73 42 10 86 E3 43 43 7A 0A89 : 62 C4 36 21 52 1B 16 2E B2 0A91 : 42 67 33 85 8A 90 C8 84 5E 0A99 : 2E 6E 34 36 2A 43 89 0D CF 0AA1 : 88 64 62 62 42 10 86 25 49 0AA9 : 4B 17 2E 42 1E 92 C7 12 0D 0AB1 : 10 E2 42 67 33 B1 91 73 9E 0AB9 : B0 85 88 54 B1 91 0A 90 C9 0AC1 : 84 2A 5C 85 88 42 17 2A 6D 0AC9 : 54 86 25 48 42 A5 CC 8A 4C 0AD1 : 90 87 91 B8 BE 73 3C 88 2A 0AD9 : 54 C4 84 2A 42 10 C8 A9 11 0AE1 : 08 42 17 36 21 C4 84 21 24 0AE9 : 08 6E 21 0C 8C 88 43 13 32 0AF1 : 22 10 84 31 CE AE 0F 06 0D 0AF9 : 8F 53 47 BD EF 7A 9E A7 58 0B01 : A9 A3 D4 D1 EA 79 9C 1A 0C 0B09 : 3C 1E 0F 43 47 06 8D 1F 9A 0B11 : 43 C9 C1 A3 46 8E 0F A1 76 0B19 : DE F3 38 34 79 9A 3C EE C1 0B21 : 1F 76 5B 63 D3 5F AF 77 A4 0B29 : 74 66 70 A9 52 C5 88 6E 74 0B31 : 21 62 19 17 2A 42 10 85 AD 0B39 : 4A 90 A9 08 42 E5 73 B3 BF 0B41 : B3 57 73 8B 1E C7 65 77 93 0B49 : B8 34 68 D1 E4 D1 A3 47 6A 0B51 : 06 8D 1D ED 1C 1C 1D EE 18 0B59 : 0D 1F 43 D0 D1 E7 78 3B 95 0B61 : DA 34 79 DE 0D 1E 66 8F 0A 0B69 : 83 46 8F 07 7B C9 A7 F4 63 0B71 : 95 DD DD 5F 7D 75 9E C8 E8 0B79 : C6 CD 98 C6 31 8D 98 E4 D0 0B81 : C6 31 D1 E2 E4 C6 31 C5 85 0B89 : 8D 5B B1 8C 63 1B B1 AB EF 0B91 : 19 9C 21 C4 C4 84 2A 42 77 0B99 : 18 9B 10 84 2A 42 10 B1 6C 0BA1 : 89 08 54 D0 86 E3 12 A4 77 0BA9 : 21 52 17 21 53 12 C5 CC 54 0BB1 : 73 99 C3 42 C5 4B 17 31 9F 0BB9 : 31 21 E9 2C 62 5C 87 12 C6 0BC1 : 15 2E 54 A9 0B 10 86 E2 49 0BC9 : 1E 92 C5 4B 99 10 86 86 4C 0BD1 : E3 43 43 C8 BE 75 68 E0 3B 0BD9 : F3 B4 70 70 7C 1C 1A 3E DE 0BE1 : 0D 1E 77 A1 A3 BD C1 EF 1E 0BE9 : 68 F2 78 3D EE F7 93 CE 2B 0BF1 : D1 EF 77 B4 79 9A 34 7A 60 0BF9 : 1A 3E 0D 1A 34 78 38 38 11 0C01 : 7F 1B 77 4E 98 E5 9C 2A 35 0C09 : 79 1C 48 42 A4 2A 68 71 0B 0C11 : 21 C4 D8 A9 73 B0 EC 21 B2 0C19 : 08 76 16 34 32 21 08 43 3B 0C21 : 12 C4 32 32 26 7A 34 70 50 0C29 : 7E D7 7B 47 83 46 8F 27 52 0C31 : A9 EA 68 D1 DE D1 A3 47 3D 0C39 : 07 7B C9 A3 46 8D 1A 34 86 0C41 : 68 D1 DE D1 A3 46 8F 43 B5 0C49 : 46 8F 43 46 8D 3F 7E 3A 32 0C51 : DB B7 2E E8 CC E7 8D 7C EC 0C59 : 67 8C F1 CB 38 C7 47 B3 42 0C61 : EF D2 B5 F3 4E 9C 6B 19 4F 0C69 : 9D 4B 19 10 84 21 91 52 30 0C71 : 13 38 E8 C6 37 7B 1D CE 15 0C79 : 2D FF 76 5B 57 D5 8F 6D EC 0C81 : DD D9 EE 34 CE 3C 9A 38 37 0C89 : 38 3B DF 0F BA BB 57 E3 E7 0C91 : 3D 93 59 F4 CA CF 3D B6 1A 0C99 : EC F8 6D F0 95 9D D1 DB C0 0CA1 : 3B 78 E5 E3 96 71 A3 46 1E 0CA9 : 8E 0D 1E 4F 27 C1 8C 78 D3 0CB1 : B8 BB 9B 31 8C 63 56 3E 0E 0CB9 : 4E E7 47 46 31 8D D8 C6 06 0CC1 : CD D8 C6 35 71 6C F1 6C 6E 0CC9 : C6 31 C5 C5 AB 77 2F C2 0B 0CD1 : 56 79 AB D3 3E 33 D5 3B 94 0CD9 : 71 EE BF 9A DE BD 3A 65 94 0CE1 : 67 9E 79 E6 B5 F8 5E B1 D2 0CE9 : 8C 6A E4 EE 6E F1 63 18 F5 0CF1 : E4 C6 AC 63 1B B1 D9 C5 02 0CF9 : 8C 66 79 10 84 2C 62 5C 05 0D01 : B1 73 62 10 DC 6E 2E 71 E3 0D09 : 21 0D C5 CC 4A 90 84 21 39 0D11 : 08 62 54 C4 85 8B 90 85 FA 0D19 : 88 4C ED 9D C8 42 1C 4B 9C 0D21 : 96 2E 42 1E 44 2E 54 B1 8D 0D29 : 73 22 E4 21 89 0B 1A 1A 98 0D31 : 10 84 38 9A 1B 8D 0E 24 83 0D39 : 2E 71 2A 42 B9 FA 70 F7 18 0D41 : 6B B7 AB 5D 7A FE AD 75 60 0D49 : EB AE BA F5 FA F5 D7 AF 17 0D51 : B7 D9 AF E7 EE D7 5E BF 84 0D59 : 7E BA F5 F9 EB AF E9 E6 A2 0D61 : F5 E1 F5 73 6D AF E3 F6 04 0D69 : 7A F5 D7 EC FD 18 7D 3D 82 0D71 : 3A EB D7 B6 BA F5 FB 7F B8 0D79 : FB 87 B7 E8 E1 ED FA 38 2D 0D81 : 7B 7E 8E 00 00 FC
10 a=6*4096:ifpeek(a)<>222thenprint"zuerst 'maske' laden !!!":end 20 open2,8,2,"zeitschrift,s,w" 30 print#2,chr$(peek(a));:a=a+1:ifa<=27361then30 40 close2