Texteditor CED (V. 25.10.'87) ----------------------------- (c) TU Dresden, Sektion Informationstechnik WB Computer- und Kommunika- tionstechnik Bearbeiter: Goetze,B. Piepiorra, F. Kurzcharakteristik Der Texteditor arbeitet in dem Speicherbereich: 1000H-1FFFH mit der genauen Aufteilung: 1000H-1DC6H Codebereich 1DC7H-1EA5H Datenbereich ab 1EA6H freier Bereich Er ist dadurch gekennzeichnet, dass alle Manipulationen im Text direkt auf dem Bildschirm sicht- bar werden. Er erlaubt nur ein- fache Kommandos und Funktionen. Texte koennen formatiert ueber eine Druckerschnittstelle ausgegeben werden. * der Textspeicher: Als Textspeicher funktioniert der Speicherbereich 8000H-CFFFH. So steht ein Bereich von ueber 20000 Textzeichen zur Verfue- gung. Alle Zeichenfolgen, die auf der Adresse 8000H mit einem Zeichen 0FFH beginnen, anschliessend nur Zeichen im Wertebereich 0 bis 7FH enthalten und als Abschluss wieder ein Zeichen 0FFH besitzen bzw. ueber die Obergrenze des Textspeicherbereiches hinausge- hen, werden als zu bearbeitender Text erkannt und stehen zur Ver- aenderng bzw. Ergaenzung zur Verfuegung. Wird die Obergrenze des Textspeichesbereiches ueber- schritten, wird durch eine Ein- fuegung eines Zeichens 0FFH der ueberstehende Text abgeschnit- ten. * allgemeioe Funktionen: Nach Start des Texteditors wird ein Kommandomodus, durch ein Menuebild gekennzeichnet, er- reicht. Dieser zeigt - den aktuellen Fuellstand des Textpuffers und - die gegenwaertige Zeile der Cursorposition an. In diesem Modus koennen folgende Funktionen aufgerufen werden: - Cursorpositionierung auf Text- ende, Textanfang oder auf Zeilennummer - Markierung von Textstellen und anschliessendes loeschen des Textes bis zur Markierung bzw. des gesamten Textes - Suchen/Ersetzen von Zeichen- ketten ohne Steuerzeichen - Seitenformatiertes Drucken - Verlassen des Texteditors zurueck zum Monitor Nach Abschluss eines Kommandos bzw. nach Abbruch des Kommando- modus wird der Bildschirmmodus (in dem die Textfolge auf dem Bildschirm erseheint) erreicht. Hier koennen - Zeichenfolgen in den Text ein- gefuegt, - Zeichen und Zeichenfolgen vor- warts und rueckwasts ge- loescht, - der Cursor zeichenweise, zeilenwese, seitenweise vor- warts und rueckwarts positio- niert - das Kommando Suchen/Ersetzen wiederholt und - der Kommandomodus erpeicht werden. Folgende Steuerzeichen koennen neben den alphanumerischen Zeichen (Kodes 20H bis 7FH) in den Text eingefuegt werden: TAB Kodierung 09H Tabulator- stop jede 8. Spalte NL Kodierung 1EH Neue Zeile als Wagenruecklauf/Zeilen- schaltung FF Kodierung 0CH Neue Seite (wird nur beim Druck aus- gefuehrt) !!! ACHTUNG !!! Jede eingegebene Zeile muss mit NL nach weniger als 250 Anzeige- positionen abgeschlossen sein, um eine ordnungsgemaesse Arbeit des Texteditors zu gewaehrlei- sten. * der Kommandomodus Im Kommandomodus sind in einem Menuebild angezeigt, welche Kommandos durch normale Zeichen- eingabe aufgerufen werden koen- nen, auf welcher Zeile sich der Cursor befindet und wieviele Zeichen noch in den Textpuffer eingetragen werden koennen, bevor eine Fehlerausschrift an- zeigt, dass das letzte Zeichen nicht mehr uebernommen werden konnte. Alle Zeicheneingaben, die kein Kommando aufrufen, fuehren zum Abschluss des Kom- mandomodus und damit zur Rueck- kehr in den Bildschirmmodus. Folgende Kommandos koennen ver- wendet werden: <E> - Ende Soll die Arbeit mit dem Text- editor beendet werden, muss dieses Kommando verwendet wer- den, nach der Anzeige von An- fangs und Endadresse des ge- fuellten Textbereiches wird der Monitor erreicht <A> - Anfang Cursor auf Textanfang setzen und neuen Bildschirminhalt darstel- len <Z> - Ende Cursor auf Textende setzen und neuen Bildschirminhalt darstel- len <S> - Sprung auf Zeile nach der Eingabe der Zeilennum- mer in dezimaler Form mit maxi- mal fuenf Ziffern werden im Text vom Anfang beginoend die Zei- chen NL bis zu dieser Zahl ab- gezaehlt und der Cursor auf die erreichte Stelle gesetzt, an- schliessend wird der Bild- schirminhalt neu dargestellt <M> - Markierung setzen der Cursor wird im Bildschirm- modus auf den Anfang eines zu loeschenden Textbereiches posi- tioniert, anschliessend wird mit diesem Kommando diese Stel- le markiert und wieder in den Bildschirmmodus zurueckgeschal- tet, ueber die Moeglichkeiten der Cursorpositionierung kann jetzt das Ende des zu loeschen- den Bereiches erreicht werden <#> - Teil loeschen anschliessend an <M> kann mit diesem Kommando der so einge- schlossene Textbereich aus dem Textpuffer geloescht werden, moegliche Fehler sind das Feh- len der ersten Markierung bzw. die falsche Markierung bzw. die Ausfuehrunc von Nicht-Cur- sorpositionier-Operationen zwischen Markier- und Loesch- kommando <$> - alles Loeschen falls der kompletqe Textpuffer geloescht werden soll, kann das mit diesem Kommando er- reicht werden. <F> - Finden/Ersetzen Soll eine Textfolge im Textpuf- fer gesucht werden und ggf. durch eine andere Textfolge er- setzt werden, so muss nach Aufruf dieses Kommandos der Text, der gesucht werden soll, eingegeben werden, durch '/' getrennt kann anschliessend der einzusetzende Text angegeben werden. Die gesamte Textfolge ist auf 31 Zeichen begrenzt. Nach Abschluss der Zeichenfolge, wird geprueft, ob der gesuchte Text auf der Cursorposition gefunden wurde. Ist das der Fall, tritt die Funktion Er- setzen in Aktion. Dabei kann ein beliebig langer Text durch ainen anderen beliebig langen Text ersetzt werden, solange Platz im Textpuffer vorhanden ist. Anschliessend steht der Cursor hinter dem ersetzten Text und der Bildschirminhalt wird dargestellt. Ist der an der Cursorposition vorgefundene Text unterschied- lich zum gesuchten Text, wirkt die Funktion Suchen, die den Textpuffer von der aktuellen Cursorposition beginnend in Richtung Textende nach einer Uebereinstimmung mit dem ge- suchten Text durchmustert. Bei der ersten Uebereinstim- mung wird der Curuor auf das erste Zeichen dieser Zeichen- kette gesetzt und in den Bild- schirmmodus umgeschaltet. Im Bildschirmmodus existiert die Funktionstaste, die diesen Kommandokomplex ohne erneute Eingabe der Zeichenkette wied- erholt startet. <D> - Drucken Soll der im Textpuffer enthal- tene Text ausgedruckt werden, besteht die Moeglichkeit der Einstellung des Seitenformates und der Auswahl der zu drucken- den Seiten. Eine Arbeit mit Seitenstop kann eingestellt werden. Nach Aufruf des Komman- dos erfolgt die Aufforderung zur Eingabe der Zeilennummer, ab der gedruckt werden soll. Eine Zahl zwischen 1 und 99999 muss eingegeben werden. Jede Zahl, fuer die im Textpuffer nicht die ausreichende Zeilen- zahl gefunden wird, fuehrt so- fort zum Abbruch des Kommandos. Die Frage nach der Zeilenzahl wird mit einer dreistelligen Dezimalzahl (>9) beantwortet. Bei Zeilenzahl=0 bzw. keine Ein- gabe erfolgt keine Seitenforma- tierung. Bei geforderter Seitenforma- tierung wird abgefragt, mit welcher Numerierung die ge- druckten Seiten versehen wer- den sollen. Bei leerer Eingabe wird ohne Fusszeile, in der die Seitennummer untergebracht ist, gedruckt. Anschliessend wird abgefragt, ob ein Druckstop nach jeder Seite erfolgen soll. Wird diese Frage bejaht, stoppt der Druck definiert nach jedet Seite. Im anderen Fall wird der Text bis zum Ende ohne Pause gedruckt. Der Bediener kann jederzeit durch CTR-C den Druck abbrech- en. Fehler wahrend des Druckes werden angezeigt. * der Bildschirmmodus Im Bildschirmmodus wird der Bildschirm entsprechend des eingegebenen Textes aktualisi- ert. Das Textfenster wird dabei so dargestellt, dass der Cursor im Bildfenster erscheint. Dabei kann an den Raendern Text abge- schnitten sein, der nicht mehr auf den Bildschirm passt. Steuerzeichen, die von der Tast- tatur angesprochen werden, aber durch das Programmsystem nicht bearbeitet werden, quittiert eine Fehlerausschrift. - allgemeine Funktionen Alle Funktionen werden durch entsprechende Tastatureingaben ausgeloest. Das Programmsystem enthaelt eine Tastaturkonver- tierungsroutine, die es ermog- licht jeden beliebigen Tasta- turcode als Funktionscode fest- zulegen. Im folgenden werden die entsprechenden Speicherzel- len, in denen der gewuenschte Tastaturcode eingetragen werden kann aufgelistet. Adr. Code Bedeutung (z.B.) ______________________________ 1004 09 Cursor rechts ein Zei. 1005 08 Cursor links 1006 0A Cursor hoch 1007 0B Cursor runter 1008 04 Cursor eine Seite vor 1009 02 Cursor Seite zuruck 100A 0C RUBOUT 100B 7F Zeichen loeschen 100G 03 ESC 100D 83 ESC 100E 01 Wandlung Buchstabe 100F 81 Umschaltung Buchstabe 1010 88 Loeschen einer Zeile 1011 89 Ersetze/Wiederhole 1012 9E FORM FEED 1013 0D ENTER 1014 1E Tabulator 1015 8B Tabulator CTR-C fuehrt zur sofortiger Rueckkehr in den Bildschirm- modus ohne Ausfuehrung des Kom- mandos (Abbruch) * die Druckerschnittstelle Der Anschluss eines Druckers (oder eines anderen peripheren Geraetes) ist vorbereitet. Dazu muss eine entsprechende Treiberroutine (Centronixs, IFFS oder V24) an das Programm- paket angebunden werden. Die entsprechende Schnittstelle liegt auf der Adresse 1027H mit den Daten C9 00 00 Hier muss ein entsprechender Sprung auf die Treiberadresse eingefuegt werden. (z.B. JMP 0F00H) Beim Aufruf des Druckertreibers steht das zu druckende Zeichen im C Register. Der Drucker quittiert die ordnungsgemaesse Uebernahme des Zeichens durch setzen des C - Flags. Ein nicht gesetztes C - Flag fuehrt zu einer Fehlerausschrift. Beispielprogramm fuer eine einfache Centronix-Schnittstelle ueber den freien PIO-Port: org 0f00H st: ld (sackp),sp ;Inhalt Stack retten ld sp,stck ;neuen Stack festlegen ld a,0fh ;PIO Initialisierung out 1 ld a,0f0h out 1 ld a,87h out 1 ld a,L(ints) ;Interruptadresse laden ld (0f0h),a ld a,h(ints) ld (0f1h),a call ausg rueck: ld sp,(sackp) ;alten Stackinhalt laden ret ; Ausg: ld a,c cmp 1EH jrz konv-# ausg1: cpl ;da im Muster invertierende Treiber out 0 ei m1: jrnc m1-# ret ; ;Konvertierung des Zeilenendezeichens ;"1EH" in die Folge "0DH,0AH" konv: ld a,0dh call ausg1 xor a ;C-Flag ruecksetzn ld a,0ah call ausg1 jr rueck-# ; ;Interruptroutine ints: di scf reti ; ber 6 stck: da 0 ;Stackobergrenze sackp: da 0 ; org 1027H zeiger:jmp st ; end Bemerkung: Dieses Quellprogramm kann direkt mit dem ebenfalls an der TU Dresden entstandenen Assembler ASM uebersetzt werden. Achtung: Bei dieser Version ist der Druck noch nicht mit CTRL C abbrechbar !!!