ÜberLISTet
Mit dieser Betriebssystemerweiterung wird das Schreiben von Basic-Programmen zum Vergnügen. Scrolling aufwärts und abwärts sowie einige Zusatzfunktionen machen es möglich.
Dieses Maschinenprogramm (eventuell in Verbindung mit einem Toolkit) macht das Editieren von Basic-Texten fast so komfortabel wie mit einem guten Textverarbeitungssystem. Man kann damit nämlich nicht nur, wie von vielen teuren Basic-Erweiterungen bekannt, das Listing mit den Cursortasten hinauf und hinunterscrollen, sondern auch:
- andere Erweiterungen verwenden
- einzelne Zeilen löschen und einfügen
- eine Zeile bis beziehungsweise ab Cursorposition löschen
- eine ganze Zeile mit Leerzeichen füllen
- einen Zeilenausschnitt beliebig oft an andere Positionen kopieren.
Dies alles geschieht auf einfachen Tastendruck und ohne Absturzgefahr.
Um mit möglichst vielen anderen Programmen zusammenarbeiten zu können, liegt das zirka 1300 Byte lange Programm im Bereich $7A00 - 7F20 (Hexadezimal). Dazu muß das Ende des Basic-Bereichs gegebenenfalls herabgesetzt werden (POKE 56,122:POKE 55,0: NEW). Mit »SYS 31232« wird die Erweiterung in den Interrupt eingehängt und ist dann sofort einsatzbereit. Es wird nur der IRQ-Vektor verändert.
Das Listing läßt sich im Direktmodus mit Hilfe der Cursortasten fließend hoch- und runterscrollen. Die Programmzeilen können dabei natürlich wie gewohnt geändert und mittels der RETURN-Taste übernommen werden. Stößt man jedoch mit dem Cursor gegen den oberen beziehungsweise unteren Bildschirmrand, wird der Inhalt des Bildschirms in die entsprechende Richtung gescrollt und die nächste Zeile ausgegeben.
Das Programm geht dabei so vor: Es sucht die am nächsten zum Cursor stehende Zeilennummer. Steht keine Zahl in der ersten Spalte, wird normal gescrollt (auch nach unten). Ist die gefundene Zahl größer gleich 64000, wird der Cursor auf diese Zeile gesetzt und das Scrolling verhindert. Andernfalls wird die nächsthöhere beziehungsweise nächstniedrigere Zeile aus dem Basic-Listing gesucht, der Bildschirm in die richtige Richtung gescrollt und die gefundene Zeile gelistet.
Die Erweiterung arbeitet nur im Direktmodus, das heißt wenn in einem Programm ein »INPUT«-Befehl oder ähnliches vorkommt, verhält sich der Bildschirm normal.
Zusätzlich bietet dieses Programm noch einige andere Möglichkeiten, die das Editieren erleichtern. Diese Funktionen werden durch gleichzeitiges Drücken der Control-Taste und einer Buchstabentaste aufgerufen. Zwischen zwei Anführungszeichen werden diese »Control-Codes« jedoch normal ausgegeben.
| CTRL-i | Einfügen (Insert) einer Leerzeile. Der untere Teil des Bildschirms wird nach unten geschoben. Dies dient zur Übersichtlichkeit, wenn eine neue Basic-Zeile eingegeben werden soll, da keine anderen Zeilen überschrieben werden brauchen. |
| CTRL-d | Löschen (Delete) einer Zeile mit Nachrücken des unteren Bildschirmteils. Auch dies dient der Übersichtlichkeit. Soll eine Zeile gänzlich aus dem Listing gelöscht werden, muß man (wie üblich) die »leere« Zeilennummer und RETURN eingeben. |
| CTRL-l | Füllen einer Zeile (Line) mit Leerzeichen. Nach den drei letztgenannten Funktionen springt der Cursor an den Anfang der Zeile. |
| CTRL-b | löscht die Zeile bis ausschließlich Cursorposition |
| CTRL-a | löscht die Zeile ab einschließlich Cursorposition |
| CTRL-u | setzt Cursor in die linke untere Ecke |
| CTRL-k | Kopieren eines Zeilenausschnitts. Der Bereich wird durch Invertieren angezeigt und kann mit der Cursor-right/left Taste vergrößert oder verkleinert werden. Bei Betätigen der RETURN- oder der STOP-Taste wird der vorher invertierte Bereich gespeichert. |
| CTRL-w | chreibt (Write) vorher markierten Bereich wieder auf den Bildschirm. |
Die Erweiterung läßt sich durch Normalisieren des IRQ-Vektors (zum Beispiel über die Tastenkombination RUN/STOP-RESTORE) oder CTRL-X (exit) abschalten.
Starten von »Listmaster«: Tippen Sie das Listing mit dem MSE ab und speichern Sie es auf Disk oder Kassette. Bei Bedarf laden Sie es absolut (das heißt mit ,8,1 oder ,1,1) und geben ein:
POKE 56,122: POKE 55,0:NEW
Dies ist wie gesagt notwendig, um das Ende des Basic-Bereichs herabzusetzen und das Maschinenprogramm vor der Zerstörung durch Basic-Variablen zu schützen.
Noch ein paar Informationen zu »Listmaster«: Erarbeitet mit anderen Interrupt-Programmen zusammen, da die Routine, auf die der IRQ-Vektor ($0314) vor der Initialisierung von »Listmaster« zeigte, als Unterprogramm aufrufen wird. Man darf also keinesfalls zweimal nacheinander »SYS 31232« eingeben. Das würde einen Selbstaufruf und somit Systemabsturz bewirken. Außerdem benötigt »Listmaster« einige Direkteinsprünge ins Betriebssystem, so daß es bei stark geänderten Varianten desselbigen zu Fehlfunktionen kommen kann.
An Speicheradressen verändert »Listmaster« nur einige wenige, die auch vom Standardbasic oder vom normalen Bildschirmeditor gebraucht werden. Es sind dies im Wesentlichen:
| $07 | ;Zwischenspeicher |
| $14/15 | ;Zwischenspeicher |
| $22/23 | ;Suchzeiger |
| $5F/60 | ;Suchzeiger |
| $62/63 | ;Zwischenspeicher |
| $AC/AD | ;Zeiger für Scrolling |
| $AE/AF | ;Zeiger für Scrolling |
| $B0 | ;Zwischenspeicher |
| $CC | ;Flag für Cursor blinken |
| $D1/D2 | ;Zeiger auf aktuelle Zeile |
| $D9-F2 | ;Tabelle Bildschirmzeilen |
| $F3/F4 | ;Zeiger auf Farbram |
| $0314/15 | ;Interruptvektor |
Die Daten für den k-Befehl werden unmittelbar hinter dem »Listmaster«-Programm aufbewahrt (maximal 80 Zeichen).
(Matthias Meyer/tr)PROGRAMM : LISTMASTER 7A00 7EF5 ----------------------------------- 7A00 : AD 14 03 8D 30 7A AD 15 E2 7A08 : 03 8D 31 7A 20 A8 7E 58 5F 7A10 : 60 A5 9D 10 1A A5 CC D0 50 7A18 : 16 A0 00 68 99 C6 7E C8 E7 7A20 : C0 06 D0 F7 A0 00 B9 CC A1 7A28 : 7E 48 C8 C0 06 D0 F7 4C 74 7A30 : 00 00 A5 C6 F0 54 A5 D4 64 7A38 : D0 50 A5 D8 D0 4C AD 77 CA 7A40 : 02 A0 00 D9 D2 7E F0 07 C0 7A48 : C8 C0 0B D0 F6 F0 3B A5 7C 7A50 : D6 48 A5 D3 48 98 48 A9 EC 7A58 : 01 85 CC 20 99 7E 20 B4 CA 7A60 : 7E 68 0A A8 B9 DD 7E 8D 4A 7A68 : 71 7A B9 DE 7E 8D 72 7A 74 7A70 : 4C 00 00 A9 00 85 B0 20 21 7A78 : B3 7D 68 85 D3 68 85 D6 F9 7A80 : 20 6C E5 A9 00 85 CC 20 24 7A88 : A8 7E A0 05 B9 C6 7E 48 94 7A90 : 88 10 F9 4C 81 EA A5 D6 DC 7A98 : F0 05 68 68 4C 83 7A 20 3D 7AA0 : B4 E5 20 21 7D 90 CC A0 44 7AA8 : 01 B1 2B F0 C6 A0 03 B1 4C 7AB0 : 2B C5 15 90 09 D0 BC 88 30 7AB8 : B1 2B C5 14 B0 B5 A0 00 2E 7AC0 : B1 2B 85 22 C8 B1 2B 85 7E 7AC8 : 23 A5 2B 85 5F A5 2C 85 18 7AD0 : 60 A0 01 B1 22 F0 26 A0 7A 7AD8 : 03 B1 22 C5 15 90 09 D0 91 7AE0 : 1C 88 B1 22 C5 14 B0 15 DB 7AE8 : A5 22 85 5F A5 23 85 60 36 7AF0 : A0 00 B1 5F 85 22 C8 B1 D9 7AF8 : 5F 85 23 90 D4 A9 00 85 9A 7B00 : B0 20 B3 7D 20 0D 7E 4C 5A 7B08 : 7A 7A A5 D6 C9 18 D0 05 AE 7B10 : 20 21 7D B0 03 4C 7A 7A A8 7B18 : A0 01 B1 2B F0 F7 20 B4 C3 7B20 : E5 A2 18 A0 00 20 0C E5 6D 7B28 : A6 F1 30 05 A9 0D 20 16 23 7B30 : E7 A5 B0 C9 18 D0 0B 20 C4 7B38 : 13 A6 90 06 20 18 7E 4C D9 7B40 : 81 7B A5 2B 85 22 A5 2C A6 7B48 : 85 23 A0 01 B1 22 F0 4A 2C 7B50 : A0 03 B1 22 C5 15 90 0B 80 7B58 : D0 18 88 B1 22 C5 14 90 4E 7B60 : 02 D0 0F A0 00 B1 22 AA 0E 7B68 : C8 B1 22 86 22 85 23 4C D6 7B70 : 4A 7B A5 22 85 5F A5 23 56 7B78 : 85 60 20 0D 7E A9 00 85 17 7B80 : C6 68 AA 68 8A C9 28 90 EB 7B88 : 02 E9 28 85 D3 A2 18 86 F9 7B90 : D6 20 F0 E9 20 24 EA 4C 57 7B98 : 83 7A A9 11 8D 77 02 A9 D5 7BA0 : 01 85 C6 D0 DC A6 D6 20 CE 7BA8 : FF E9 A9 00 85 C6 4C 8E E3 7BB0 : 7D A5 D6 D0 03 4C 73 7A 25 7BB8 : C9 18 F0 E9 AA B5 D9 30 27 7BC0 : 04 09 80 95 D9 8A 48 85 3A 7BC8 : B0 20 B3 7D 20 B4 E5 68 35 7BD0 : AA 4C 8E 7D A5 D6 48 AA 7B 7BD8 : C9 18 F0 C9 20 F0 E9 20 94 7BE0 : 24 EA A5 D1 A4 D2 85 AC 6D 7BE8 : 84 AD A5 F3 A4 F4 85 AE 90 7BF0 : 84 AF E8 20 F0 E9 20 24 B1 7BF8 : EA 20 FF 7D E0 18 D0 DC 6E 7C00 : 20 FF E9 68 48 AA B5 DA 0E 7C08 : 29 80 A8 B5 D9 29 7F 95 62 7C10 : D9 98 15 D9 95 D9 E8 E0 43 7C18 : 18 D0 EB A9 80 05 F1 85 CB 7C20 : F1 20 B4 E5 68 AA B5 D9 71 7C28 : 09 80 95 D9 4C 8E 7D A0 82 7C30 : 00 A9 20 91 D1 C8 C4 D3 5D 7C38 : D0 F9 A9 00 85 C6 68 68 70 7C40 : 4C 83 7A A4 D3 A9 20 91 AF 7C48 : D1 C8 C4 D5 D0 F9 91 D1 30 7C50 : F0 E8 A9 00 85 C6 A2 18 68 7C58 : 4C 8E 7D 68 68 A9 00 85 37 7C60 : C6 A5 D1 48 A5 D2 48 A5 D4 7C68 : D3 48 A6 D6 20 F0 E9 E0 D7 7C70 : 18 F0 03 A9 4F 2C A9 27 42 7C78 : 85 B0 A5 D3 B4 D9 30 03 1A 7C80 : 38 E9 28 85 D3 A8 20 0C 83 7C88 : 7D 98 48 A5 C6 F0 FC 20 40 7C90 : B4 E5 AA 68 A8 E0 03 F0 6E 7C98 : 20 E0 0D F0 1C E0 1D F0 A9 7CA0 : 06 E0 9D F0 09 D0 E2 C4 C8 7CA8 : B0 F0 DE C8 D0 D8 C4 D3 2F 7CB0 : F0 D7 20 0C 7D 88 4C 89 76 7CB8 : 7C C8 84 B0 98 38 E5 D3 5A 7CC0 : 8D F3 7E A4 D3 A2 00 20 0E 7CC8 : 0C 7D 9D F4 7E E8 C8 C4 75 7CD0 : B0 D0 F4 68 85 D3 68 85 D6 7CD8 : D2 68 85 D1 A9 00 85 C6 B8 7CE0 : 4C 83 7A AD F3 7E F0 1B 6F 7CE8 : 8D 92 02 A0 00 98 48 B9 AC 7CF0 : F4 7E AE 86 02 20 13 EA E3 7CF8 : 20 B6 E6 68 A8 C8 CC F3 26 7D00 : 7E D0 EA 68 68 A9 00 85 8D 7D08 : C6 4C 83 7A B1 D1 49 80 F4 7D10 : 91 D1 60 68 68 A9 00 85 8E 7D18 : C6 78 A9 00 85 CC 4C 8A 8A 7D20 : 7A A5 D6 D0 73 A2 FF E8 5B 7D28 : B5 D9 30 06 E0 19 90 F7 A0 7D30 : B0 13 20 F0 E9 A0 00 B1 97 7D38 : D1 C9 30 90 04 C9 3A 90 A5 7D40 : 06 E0 18 D0 E2 18 60 86 54 7D48 : B0 A0 00 84 14 84 15 B1 F6 7D50 : D1 C9 30 90 04 C9 3A 90 BD 7D58 : 02 38 60 E9 2F 85 07 A5 52 7D60 : 15 85 22 C9 19 B0 25 A5 F1 7D68 : 14 0A 26 22 0A 26 22 65 74 7D70 : 14 85 14 A5 22 65 15 85 AD 7D78 : 15 06 14 26 15 A5 14 65 F4 7D80 : 07 85 14 90 02 E6 15 C8 9E 7D88 : C0 06 D0 C3 68 68 68 68 34 7D90 : A0 00 20 0C E5 4C 83 7A 7E 7D98 : A2 19 CA B5 D9 10 FB 20 7E 7DA0 : F0 E9 A0 00 B1 D1 C9 30 DE 7DA8 : 90 04 C9 3A 90 99 8A D0 96 7DB0 : E9 F0 92 A2 18 20 F0 E9 24 7DB8 : 20 24 EA A5 D1 A4 D2 85 F2 7DC0 : AC 84 AD A5 F3 A4 F4 85 12 7DC8 : AE 84 AF CA 20 F0 E9 20 6F 7DD0 : 24 EA 20 FF 7D E4 B0 D0 D5 7DD8 : DC C6 B0 A2 17 B5 D9 29 71 7DE0 : 80 A8 B5 DA 29 7F 95 DA 18 7DE8 : 98 15 DA 95 DA CA E4 B0 6D 7DF0 : D0 EB A9 80 E8 15 D9 95 FA 7DF8 : D9 20 FF E9 4C 66 E5 A0 EF 7E00 : 27 B1 D1 91 AC B1 F3 91 F2 7E08 : AE 88 10 F5 60 A0 02 B1 34 7E10 : 5F 85 14 C8 B1 5F 85 15 A6 7E18 : A5 14 85 63 A5 15 85 62 73 7E20 : A2 90 38 20 49 BC 20 DF D7 7E28 : BD A9 01 8D 92 02 A0 00 68 7E30 : B9 00 01 F0 06 20 16 E7 D1 7E38 : C8 D0 F5 A9 20 20 16 E7 46 7E40 : A9 00 85 0F A0 04 B1 5F DC 7E48 : F0 1B C9 FF F0 07 A6 0F 38 7E50 : D0 03 AA 30 15 20 16 E7 CD 7E58 : C9 22 D0 06 A5 0F 49 01 21 7E60 : 85 0F C8 D0 E1 A9 0D 4C F1 7E68 : 16 E7 38 E9 7F AA C9 4D CC 7E70 : B0 20 84 49 A0 FF CA F0 92 7E78 : 08 C8 B9 9E A0 10 FA 30 FD 7E80 : F5 C8 B9 9E A0 08 29 7F 09 7E88 : 20 16 E7 28 10 F3 A4 49 78 7E90 : D0 D0 A9 3F 20 16 E7 90 8E 7E98 : C9 78 AD 30 7A 8D 14 03 79 7EA0 : AD 31 7A 8D 15 03 58 60 C2 7EA8 : 78 A9 11 8D 14 03 A9 7A E0 7EB0 : 8D 15 03 60 A5 CF F0 0C 49 7EB8 : A5 CE AE 87 02 A0 00 84 8F 7EC0 : CF 20 13 EA 60 FF 00 00 C7 7EC8 : 00 00 00 00 7A 32 24 00 92 7ED0 : 00 00 11 91 0C 09 04 02 64 7ED8 : 01 15 0B 17 18 0A 7B 96 F7 7EE0 : 7A A5 7B B1 7B D4 7B 2F EC 7EE8 : 7C 43 7C 52 7C 5B 7C E3 CC 7EF0 : 7C 13 7D 00 FF CB