3000 5c75 0000 I ... TU-EDITOR 2.4
Texteditor CED (V. 25.10.'87) 
-----------------------------

(c) TU Dresden, 
    Sektion Informationstechnik
    WB Computer- und Kommunika-
    tionstechnik 

Bearbeiter: Goetze,B.
            Piepiorra, F.
Weiterentw. Brosig,R. (IZ)

Kurzcharakteristik

Der Texteditor arbeitet in dem
Speicherbereich: (2.4)
   100H-FFFH 
mit der genauen Aufteilung: 
   100H-0EDFH  Codebereich
   0EE0H-0F3AH  Datenbereich
   ab 0F40H 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 3000H-DFFFH.
So steht ein Bereich von ueber
45000 Textzeichen zur Verfue-
gung.
Bei gewuenschten Anpassungen
kann die Textanfangsadresse in
der Zelle 133H, die max. End-
adresse in Zelle 135H eingetra-
gen werden.
Alle Zeichenfolgen, die auf der
Anfangsadresse mit einem Zeichen 
02H (STX) beginnen, anschlies-
send nur Zeichen im Wertebereich
7FH enthalten und als Abschluss
wieder ein Zeichen 03H (ETX) be-
sitzen bzw. ueber die Obergrenze
des Textspeicherbereiches hinaus
gehen, werden als zu bearbeiten-
der Text erkannt und stehen zur
Veraenderng bzw. Ergaenzung zur 
Verfuegung. Wird die Obergrenze
des Textspeichesbereiches ueber-
schritten, wird durch eine Ein-
fuegung eines Zeichens 03H der
ueberstehende Text abgeschnit-
ten.


* allgemeine 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-
  waerts und rueckwaerts ge-
  loescht,
- der Cursor zeichenweise, 
  zeilenweise, seitenweise vor-
  waerts und rueckwaerts positio-
  niert,
- das Kommando Suchen/Ersetzen
  wiederholt und
- der Kommandomodus erreicht
  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, Anz. im Text "^")
  
!!! 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. Die Find-Routi-
ne startet immer auf der aktu-
ellen Zeilenposition (ggf.
vorher Kommando A ausfuehren. 

<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 ermoeg-
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.)  
______________________________
105H 09H  Cursor rechts ein Zei.
106H 08H  Cursor links
107H 0AH  Cursor hoch
108H 0BH  Cursor runter
109H 04H  Cursor eine Seite vor
10AH 02H  Cursor Seite zuruck
10BH 10H  Zeichen links loeschen
10CH 7FH  Zeichen rechts loeschen
10DH 03H  ESC
10EH 1BH  ESC
10FH 01H  Wandlung Buchstabe
110H 15H  Umschaltung Buchstabe           
111H 0FH  Loeschen einer Zeile
112H 11H  Ersetze/Wiederhole
113H 0CH  FORM FEED
114H 0DH  ENTER
115H 14H  Tabulator
116H 06H  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

 12DH mit den Daten:

12DH: LD A,C      ;Zeichen in C
      CALL 0FFE8H ;(DRAKK)
      SCF         ;Fehler,w.n.ges.
      RET

Hier kann eine entsprechende
Aenderung der Treibereinbindung
erfolgen. 
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 0F40H

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 12DH
;
ZEIGER:JMP   ST
;
       END 

Anmerkung:Der erzeugte Quelltext
ist kompatibel zu den meisten
anderen Textsystemen und Assem-
blern wie z.B. Texteditor Scf
oder Assembler Scf. 
 

Achtung: Bei dieser Version ist
         der Druck noch nicht mit
         CTRL C abbrechbar !!!