| ★ APPLICATIONS ★ BUREAUTIQUE ★ MAGATEXT (SCHNEIDER MAGAZIN/COMPUTER PARTNER) ★ |
Textverarbeitungsprogramm mit Durchblick (Teil 1)![]() | Magatext, Teil 2![]() | Texteingabe![]() | Magatext (Teil 4)![]() | Es ist geschafft (Teil 5)![]() |
Um das Ändern, Löschen, Speichern und Laden von Texten dreht sich diese Folge Zu Beginn des vierten Teils unserer Serie zum Aulbau eines Textverarbeitungsprogramms für die CPCs möchte ich noch einmal kurz zurückblicken. Manche Leser haben nicht verstanden, auf welche Weise ich zu den ASCII-Werten der abgefragten Tasten in den beiden Verzweigungsteilen kam. Man kann natürlich versuchen, diese im Handbuch nachzuschlagen. Beim CPC 464 finden sich hierzu in Anhang III auf Seite 14 aber nur die Hexadezimalwerte in einer ziemlich undurchsichtigen Anordnung. Bevor ich mich nun mit langwierigen Erklärungen und komplizierten Umrechnungen aufhalte, möchte ich Ihnen lieber einen Sechszeiler vorstellen, der alles in Klartext zurückmeldet. Hier ist er; ich habe ihn ASC-TEST genannt: 10 a$=INKEY$ Diese kleine Routine liest die Tastatur laufend aus. Sobald eine Taste gedrückt ist, ermittelt sie in Zeile 30 deren ASCII-Wert und gibt ihn anschließend aus. Ein Abbruch ist nur mit zweimaligem Druck der ESC-Taste möglich. Geben Sie das Programm ein, und starten Sie es. Dann drücken Sie Taste A, und schon erscheint 97 als Wert auf dem Bildschirm. B ergibt 98. SHIFT und Taste A meldet 65 zurück, SHIFT und B erwartungsgemäß 66. Diese Werte finden Sie allerdings auch bei den Buchstabendarstellungen im Handbuch. Interessant wird es bei CTRL und Taste A. Damit erreichen Sie nun auch 1, mit CTRL und B demzufolge 2. Jetzt können Sie verfolgen, wie ich auf 5 für die Kombination CTRL-E gekommen bin. Die ASC-Werte der Tasten werden für die Steuerung benötigt Richtig spektakulär, weil im Handbuch so nicht verzeichnet, wird es beim Druck auf die Cursor-Steuertasten. Pfeil hoch meldet hier 240 zurück; das ist der Wert, der im Listing gebraucht wird, um den Cursor eine Zeile hochzuschieben. Zusammen mit SHIFT meldet diese Taste dann 244; damit verzweige ich zum Hochschieben um einen ganzen Abschnitt. Mit CTRL ergibt sich sogar der Wert 248. Er wird in diesem Programm zwar nicht genutzt, aber vielleicht benötigen Sie ihn einmal für eine Erweiterung. Bisher lieferte jede Taste je nach zusätzlich gedrücktem SHIFT oder CTRL einen unterschiedlichen Wert. Anders ist das bei der COPY-Taste. Sic meldet in allen drei Varianten immer 224 zurück. Man kann sie also nur zum Auslösen einer einzigen Funktion verwenden! Deshalb wurde sie auch für die Rückkehr ins Hauptmenü vorgesehen. Experimentieren Sie doch auch einmal mit den Tasten des Zehnerblocks. Sie verhalten sich fast alle ebenso. Eine Ausnahme stellt die kleine ENTER-Taste dar; zusammen mit CTRL löst sie beim CPC 464 eine ganze Zahlenfolge aus, und zwar 82, 85, 78, 34, 13. Damit wird ja bekanntlich das automatische Laden und Starten eines Programms von Cassette bewerkstelligt. Ich hoffe, daß Ihnen ASC-TEST nun ein Hilfsmittel zur Verfügung stellt, mit dem sich schnell und direkt die von Ihnen benötigten Werte ermitteln lassen. Jetzt will ich aber zu den Teilen kommen, die sich mit dem Ändern, Löschen, Speichern und Laden von Texten unseres Programms "Magatext” befassen. Text ändern ist ein Punkt, der die Veränderung bereits im Speicher befindlicher Texte gestattet. Dies ist notwendig, da man ja nicht immer schon beim ersten Schreiben die endgültige Form trifft. Auf weitere Möglichkeiten werde ich später beim Speichern noch eingehen. In Zeile 1840 prüft unser Textverarbeitungsprogramm, ob überhaupt ein Dateiname vergeben und somit ein Text im Speicher vorhanden ist; nur dann kann man ja Änderungen vornehmen. Falls das Schriftstück fehlt, verzweigt ”Magatext” in das Unterprogramm ab Zeile 3750, und ein Piepston sowie ein entsprechender Hinweis werden ausgegeben. In den Zeilen 3750 und 3760 ist eine kurze Warteschleife eingebaut. Nach deren Ende gelangt der CPC mit zwei Rücksprüngen wieder ins Hauptmenü. Dort kann nun ein Text eingegeben oder geladen werden. Ist das Schriftstück vorhanden, finden Sie in den Zeilen 1850 bis 1880 die bereits vertrauten Wertzuweisungen zum Setzen des Cursors auf den Anfang. Anschließend werden in schon bekannter Manier Statuszeile und zugehörige Angaben auf den Bildschirm gebracht. Dann erscheint unter Nutzung der Subroutine Neuer Abschnitt der Text. Hier dürfte Ihnen der Wert der Unterprogrammtechnik klar werden. Wir hätten ja sonst den bereits vorhandenen Teil noch einmal schreiben müssen. Jetzt kommt der ganz große Trick: Wir rufen den Teil Text eingeben als Unterprogramm auf! Dies ist möglich, weil wir beim letzten Mal bereits alle Korrekturfunktionen dort komplett eingebaut haben. Wer sich damals ärgerte, daß so viel Zeit für die Planung "verschwendet” wurde, revidiert jetzt hoffentlich seine Meinung. Wir haben diese Zeit wiedergewonnen und dabei sogar noch unser Programm verbessert ! Text löschen wird heute zum Gesamtmodul vervollständigt; die Zeilen 1820 bis 2040 kommen hinzu. Zur Sicherheit wird hier verlangt, daß der Benutzer durch Druck auf die Taste J bestätigt, daß er den Text tatsächlich löschen will. Solche Sicherheitsabfragen sind immer an Stellen notwendig, wo größere Teile unwiederbringlich verschwinden können. Jeder kann sich wohl den Ärger vorstellen, der entsteht, wenn die Arbeit der letzten halben Stunde durch eine einzige versehentlich gedrückte Taste zunichte gemacht wird. Die Betätigung jedes anderen Buchstabens führt ins Hauptmenü zurück. Der Rest der Routine ist bekannt, ln einer geschachtelten Schleife werden alle Speicherstellen unseres Textfeldes mit dem ASCII-Wert 32 für das Leerzeichen aufgefüllt, bevor das Hauptmenü mit allen Funktionen wieder zur Verfügung steht. Text speichern beginnt wiederum mit der Prüfung, ob überhaupt ein Dateiname und ein zugehöriger Text vorhanden sind. Die Fehlerbehandlung ist dieselbe wie im Abschnitt Text ändern. Dann finden wir noch eine Verzweigung, die erst im Lauf der Erprobung meines Textverarbeitungsprogramms durch verschiedene Benutzer hinzukam. Funktioniert sowohl mit Kassette als auch mit Diskette Ursprünglich wurde der Text unter dem Dateinamen gespeichert, den man beim Punkt Text eingeben nannte. Dann erhielt ein Vereinsvorsitzender das Programm, der damit auch seine Schreiben an die Mitglieder erledigte. Alles ging gut, solange es gleichbleibende Rundschreiben waren, bei denen jeweils nur die Adresse geändert werden mußte. Als man jedoch Beitragsrechnungen verschicken wollte, gab es Probleme. Da waren zum einen die Einzelmitglieder. Man verfaßte einen entsprechenden Brief, speicherte ihn ab, änderte immer wieder die Adressen und ließ ihn ausdrucken. Nun kamen die Ehepaare an die Reihe, dann die Familien usw: Der Ärger begann, als man ein Einzelmitglied vergessen hatte und beim Laden feststellte, daß die Ursprungsversion beim Speichern immer überschrieben worden war. Ich werde nie das Aufatmen des Vereinsvorsitzenden vergessen, als ich ihm mitteilte, daß dies mit einigen zusätzlichen Zeilen leicht zu ändern sei. Die programmtechnische Umsetzung finden Sie in den Zeilen 2140 bis 2230. Die Auswahl wird im Meldungsfenster angeboten. Das Programm wartet auf einen Tastendruck. Bei B wird sofort gespeichert, bei N benutzen wir das Unterprogramm zur Eingabe eines Dateinamens, das Sie bereits im dritten Teil unserer Serie kennengelernt haben. Alle anderen Tasten werden sicherheitshalber ignoriert. Anschließend gelangen wir noch einmal zu der Routine ab Zeile 3880. Hier wird die Variable endzeile auf die Zeile gesetzt, die als letzte Zeichen enthält. Dies geschieht ganz einfach, um Platz auf dem Datenträger zu sparen. Wozu soll man 60 Zeilen abspeichern, wenn nur 20 beschrieben sind? Die Zeilen 2270 und 2280 geben die Meldung über die Aktion aus. 2290 öffnet die Datei unter dem gewünschten Namen. Anschließend wird die Variable endzeile auf den Datenträger geschrieben, damit sie uns beim späteren Laden sofort zur Verfügung steht. Nun folgt eine geschachtelte Schleife, die jeden ASCII-Wert unseres Textfeldes auf dem Speichermedium ablegt. Nach Schließen der Datei in Zeile 2360 kehrt das Programm zum Hauptmenü zurück. Dieser Teil ist so verfaßt, daß er sowohl mit Cassette als auch Diskette funktioniert. Allerdings muß ich dazu sagen, daß der Betrieb eines Textverarbeitungsprogramms mit einer Diskettenstation effektiver ist. Text laden dient dem Einlesen eines zuvor auf dem Massenspeicher abgelegten Textes in den Speicher, sei es nun zum Verändern oder Ausdrucken. Wer nur mit Cassette arbeitet, kann die Zeilen 2400 bis 2420 weglassen. Mit ihrer Hilfe wird bei Diskettenbetrieb im Fenster mit der Nummer 0 das Inhaltsverzeichnis der Diskette ausgegeben, sofern die Dateien die Extension .MTX besitzen. Andere Dateien wären ja auch nicht sinnvoll und sind deshalb ausgeschlossen. In Zeile 2430 verwenden wir wiederum das Modul zur Eingabe eines Dateinamens. Auf die Vorteile dieser Unterprogrammtechnik muß ich wohl nicht mehr eingehen. In Zeile 2460 setzen wir den Schalter vorhanden auf 1, denn nach dem Laden steht ja ein Text im Speicher. Das Einlesen geschieht analog zum Speichern; lediglich Zeile 2510 kommt hinzu. Hier wird kontrolliert, ob der Text mit seiner Zeilenzahl wirklich in das vorhandene Array paßt. Fehler in diesem Bereich könnten leicht zu ungeahnten Folgen führen! Nach dem Schließen der Einlesedatei in Zeile 2570 folgt für den Rest des Textfeldes das Auffüllen mit dem ASCII-Wert 32, damit unser inverser Cursor korrekt funktionieren kann. Die Vorgehensweise kennen Sie bereits aus dem Abschnitt Text löschen. Am Ende dieses Teils unserer Serie möchte ich noch kurz auf die Verwendungsmöglichkeiten eingehen. So ist es beispielsweise eine gute Idee, wie der erwähnte Vereinsvorsitzende ein Rundschreiben zu verfassen, bei dem nur noch die Adressen einzusetzen sind. Hier ist sogar noch mehr möglich. Der CPC könnte die Adressen aus einer entsprechenden Datenbank holen, in die vorgesehenen Teile einfügen und dann den eigentlichen Brief an-hängen. Wer unsere Ausführungen bisher aufmerksam verfolgt hat, weiß, daß er hierzu eigentlich nur den Cursor am Textanfang anders setzen muß. Sie sehen, es ist noch vieles möglich. Wenn Sie eine weitere Version von "Magatext” erstellt haben, sollten Sie diese aber unter einem anderen Programmnamen abspeichern. Wenn gelegentlich eine Rückmeldung über einen gelungenen Ausbau von ”Magatext” bei mir einträfe, würde ich mich sehr freuen. Im nächsten und letzten Teil unserer Serie wird die Ausgabe auf den Drucker den absoluten Schwerpunkt bilden. Bis dahin können Sie ja schon einmal einige Texte vorbereiten. Berthold Freier , Computer Partner |
| ![]() |
|