.. ********** Definitionen ********** .. .FF 1 ; Seitenvorschub nach jeder Seite .RM 73 .OW 73 .PL 72 .M1 2 .M2 2 .M3 2 .M4 4 .LS 1 .IN 8 .HE /________^D(C) KALSKI^d/^DROFF4 1.61^d/^D(C) KALSKI^d/ .FO /________^DROFF4 1.61^d/^DDeutsche Anleitung v. 31.08.1988^d/^DSeite -#-^d/ .. .DM ] ; ]berschrift (Anfang) .NE 4 .SP 2 .CE 1 .EM .. .DM A ; Neuer Absatz .SP 1 .NE 4 .TI +5 .EM .. .DM Block ; Einger}ckter Block in der Kommandozeilenparametertabelle .SP 1 .IN +8 .EM .. .DM AOF ; (A)usgabe (O)hne (F)ormatierung .SP 1 .NJ .NF .EM .. .DM AMF ; (A)usgabe (M)it (F)ormatierung .BR .JU .FI .EM .. .DS /TL/-----------------------------------------------------------------/ .. .. ********** Textbeginn ********** .. .CE 6 ^D^LROFF4, V1.61^l^d .NF von ^DErnest E. Bergmann^d Physics, Building #16 Lehigh University Bethlehem, PA 18015 .CE 5 Aus dem Englischen von ^DJens Kalski^d Heidbergredder 27 2050 Hamburg 80 .FI .] ^D^LVorwort^l^d .A ROFF4 in der Version 1.61 wird einzig auf dem Wege der Public Domain verbreitet. Nicht weil es schlecht ist, sondern um den Austausch von technischen Dokumentationen zwischen Besitzern verschiedenster Computertypen zu erm|glichen. Dies ist mit kommerziellen Textformatierern meist nicht m|glich, weil kaum einer es erm|glicht, Spezialsymbole, Gleichungen und {hnliches zu erstellen. Au~erdem sind die Datenformate der einzelnen Formatierer meist sehr unterschiedlich und machen einen Datenaustausch schwierig, wenn nicht gar unm|glich. .A Der Autor des Programms ist Wissenschaftler, der Manuskripte erstellen mu~, die Gleichungen, spezielle Symbole, Fu~noten, Zeichnungen, Gleichungen u.v.m. enthalten. Er ben|tigt einen Textformatierer, der einfach zu benutzen, flexibel und f}r andere Benutzer und deren Computer verf}gbar ist. .A ROFF4 ist tabellengesteuert. Er ist relativ einfach an unterschiedliche Ausgabeger{te anzupassen. .A ROFF4 geht zur Zeit noch davon aus, da~ der angeschlossene Drucker weder einen R}ckschritt noch negative Zeilenschaltungen kennt. Proportionaldruck wird nicht unterst}tzt. .A ROFF4 ignoriert beim Einlesen einer Datei das achte Bit eines Bytes. .A ROFF4 kann durcheinanderkommen, wenn Controlcodes (ASCII < 32) gelesen werden. Es sollten lediglich die Steuerzeichen und und das Tabulatorzeichen benutzt werden, die auch in Standard-CP/M-Dateien vorkommen. .] ^D^LBekannte Probleme der Version ROFF4 1.6^l^d .A &&#&& enth{lt manchmal die vorherige Seitennummer wenn es nahe des Seitenbeginns benutzt wird. .A Der MARGINS-Test wird nun richtig durchgef}hrt. fgets2() (C-Quellcode) wurde modifiziert, um mit den Zuweisungen zu &&#&& korrekter umzugehen. .] ^D^LErweiterungen der Version ROFF4 1.6^l^d .A Es wurde eine selektive Druckoption eingef}hrt. Bei folgender Eingabe: A> ROFF4 -O ... kann eine einzelne Seite oder ein Bereich von mehreren Seiten aus einem Dokument zum Drucken ausgew{hlt werden. .A Drei globale Variablen wurden eingef}hrt: FIRSTPAGE (erste Seite), LASTPAGE (letzte Seite) und SUPPRESS (unterdr}cken). Durch die Verwendung der Druckoption '-O' werden die Voreinstellungen der ersten beiden Variablen (FIRSTPAGE=1, LASTPAGE=30000), auf einen (den eingegebenen) kleineren Bereich, ge{ndert. Am Anfang jeder Seite wird die Variable SUPPRESS (unterdr}cken) auf TRUE (Wahr/Ja) gesetzt, wenn die Seite nicht zum Bereich der zu druckenden Seiten geh|rt. Andernfalls wird SUPPRESS auf FALSE (Falsch/Nein) gesetzt. Die Funktion putchar() (C-Quellcode) pr}ft vor einer Zeichenausgabe die Variable SUPPRESS, um zu sehen, ob Zeichen ausgegeben werden d}rfen. .A Es ist jetzt m|glch, bestimmte Seitennummern zu }berspringen, um z.B. gro~e ganzseitige Illustrationen in den Text einf}gen zu k|nnen, ohne einen festen Seitenvorschub f}r diese Leerseite ausl|sen zu m}ssen. Dies wurde durch eine Erweiterung des '.RG'-Befehls erreicht. .AOF $PRG # +2 .AMF w}rde z.B. die Seitennummern der ^Lfolgenden^l Seiten um 2 Nummern h|her setzen als normal. Es werden praktisch zwei Seiten in der Numerierung }bersprungen. Die Beispieldatei MARGINS demonstriert (und testet) diese Besonderheit. .] ^D^LProgrammbeschreibung^l^d .A ROFF4 ist eine erweiterte Version des Textformatierers ROFF, basierend auf dem Formatierer in Kernighan und Plaugers Buch SOFTWARE TOOLS und ist in BDS C geschrieben. Es benutzt die direkten Ein-/Ausgabefunktionen dieser Sprache. Allerdings nur die H{lfte, denn es verzichtet auf die Benutzung der Eingabenumleitung, weil mehr als ein Dateiname eingegeben werden kann. So kann eine der Eingabedateien dazu benutzt werden kann, um das Programm an spezielle Hardware anzupassen. Es ist m|glich, Eingaben, anstatt aus den Dateien, von der Tastatur zu beziehen, was f}r Lern- und Testphasen n}tzlich sein kann. .A Dieser Textformatierer enth{lt wichtige F{higkeiten f}r die Herstellung technischer Manuskripte. Es k|nnen spezielle Zeichen oder Schriftarten vom Benutzer definiert werden, wenn die Hardware dies gestattet. Hoch- und tiefgestellte Schrift wird genauso unterst}tzt wie R}ckschritte, auch f}r Drucker, die diese M|glichkeiten nicht hardwarem{~ig zur Verf}gung stellen. Die Ausgabeeinheit mu~ allerdings in der Lage sein, Wagenr}cklauf (Carriage-Return ) und Zeilenvorschub (Linefeed ) einzeln ausf}hren zu k|nnen. Pr{prozessorbefehle k|nnen benutzt werden, um vordefinierte feste Texte, Tabellen oder Bilder in den Text einzuf}gen. Makros k|nnen definiert werden. Automatische Numerierungen und Textauslagerungen z.B. f}r Fu~noten und Inhaltsverzeichnisse werden unterst}tzt u.v.m. .A Die M|glichkeiten von WORDSTAR, wie Unterstreichen, Durchstreichen und mehrfaches ]berdrucken f}r Fettdruck und Doppelanschlag werden auch unterst}tzt. .] ^D^LBeispiele f}r die Umleitung der Ein- und Ausgabe^l^d A>ROFF4 Dateiname1 Dateiname2 Dateiname3 +^g}^G .Block Dies sendet die formatierte Version der drei Dateien zur Konsole und zum Drucker. .IN A>ROFF4 Dateiname1 +^g}]^G>Dateiname1 .Block Dies formatiert Dateiname1 und schickt den Text zur Konsole, zum Drucker, zum Typenraddrucker und zur}ck in die Datei Dateiname1. .IN A>ROFF4 -S -F Dateiname1 -B Dateiname2 -F -M -R -D -I -G -* .Block .NE 4 Die Formatierungsoption '-S' veranla~t ROFF4, am Anfang jeder Seite den Druck anzuhalten, die Konsole piepen zu lassen und auf irgendeinen Tastendruck zu warten. Dies ist wichtig f}r die Arbeit mit Einzelblattdruckern mit manueller Papierzuf}hrung. .NE 5 Eine Formatierungsoption, die oben nicht aufgef}hrt ist, ist die Option ^L'-O_'^l, die ben|tigt wird, um bestimmte Seiten oder einen bestimmten Seitenbereich zum Drucken auszuw{hlen. Dies kann hilfreich sein, wenn z.B. der Drucker einige Seiten 'gefressen' hat. .NE 3 .NJ .NF Um nur Seite 23 zu drucken, geben Sie ein : ^D-O23^d Um die Seiten 23 bis 29 zu drucken : ^D-O23-29^d F}r die Seiten von 23 bis zum Textende : ^D-O23-^d .JU .FI .NE 4 Diese Option {ndert die Werte der internen Variablen FIRSTPAGE und LASTPAGE, die voreingestellt die Werte 1 und 30000 haben. Normalerweise wird diese Option am Anfang der Kommandozeile eingegeben, damit bis dahin noch keine Seiten ausgegeben wurden. .NE 5 Die Formatierungsoption '-F' f}gt ^Leinen^l Seitenvorschub (ASCII 12) in die Ausgabe ein. Dies ist n}tzlich zum Drucken leerer Seiten oder um den Drucker bei Druckbeginn an den Seitenanfang zu fahren. Im obigen Beispiel wird vor der ersten Ausgabe und ganz am Ende der Ausgabe ein Seitenvorschub ausgegeben. .NE 5 Die Formatierungsoption '-B' schaltet das 'DEBUG-Flag' ein, so da~ eine Reihe von Diagnosemeldungen zur Standardfehlerausgabeleitung (STDERR_=_Konsole) geschickt werden. Dies d}rfte allerdings nur f}r Benutzer von Interesse sein, die versuchen, versteckte Fehler des Formatierers zu finden. .NE 4 Die Formatierungsoption '-M' gibt eine Liste aller Makrodefintionen auf der Konsole aus. Dies ist ein n}tzliches Hilfsmittel, um bei umfangreicher Makrobenutzung den ]berblick zu behalten und Fehler lokalisieren zu k|nnen. (Am Ende der Optionsliste eingeben !) .NE 4 Die Formatierungsoption '-D' gibt eine Liste aller Auslagerungsdateien auf der Konsole aus. Die Hauptaufgabe dieser Option ist es, den Benutzer daran zu erinnern, welche Auslagerungsdateien erstellt wurden und welche ungef{hre Gr|~e sie erreichen. (Am Ende der Optionsliste eingeben !) .NE 3 Die Formatierungsoption '-I' gibt eine Liste aller Textersetzungen auf der Konsole aus. Sie funktioniert {hnlich wie die Option '-M' (s.o.). (Am Ende der Optionsliste eingeben !) .NE 3 Die Formatierungsoption '-R' gibt eine Liste aller Zahlenregister auf der Konsole aus. Dies kann n}tzlich sein, um z.B. die Anzahl von Fu~noten, Formeln o.{. zu ermitteln. (Am Ende der Optionsliste eingeben !) .NE 5 Die Formatierungsoption '-G' gibt eine ]bersicht }ber die definierten Zeichen}bersetzungen auf der Ausgabeeinheit (Drucker) aus. Dies ist n}tzlich, um das Aussehen aller selbstdefinierten Spezialsymbole zu }berpr}fen und um sich eine ]bersichtsliste aller verf}gbaren Spezialsymbole zu erstellen. .NE 12 Die voreingestellte Formatierungsoption '-*' (der * kann jedes noch unbenutzte Optionszeichen sein) veranla~t ROFF4 dazu, die Eingaben von der Tastatur zu holen (Gepuffert Zeile-f}r-Zeile mit einem f}hrenden Zeichen am Anfang der Zeile, hier das Zeichen '*'). Die Eingabe von CTRL-Z beendet die Eingabe und ROFF4 f{hrt mit der n{chsten Eingabedatei fort. Diese Option wurde als Lernhilfe und zur Texteingabe, {hnlich den Textersetzungen, eingef}hrt. Wie bei Standard-CP/M kann mit CTRL-P die Ausgabe auf den Drucker umgeleitet werden. Genauso kann, wie bei CP/M, die Tastatureingabe mit der R}ckschrittaste (DEL/BACKSPACE) korrigiert werden. .A .IN Wenn Sie ROFF4 benutzen, k|nnen Sie Ausdrucke erzeugen, indem sie sich, je nach Wunsch, mehr oder weniger vom Programm unterst}tzen lassen. Es gibt f}r alle Parameter Voreinstellungen, so da~ ein Text, wenn gar keine Punktbefehle eingegeben werden, mit aufgef}llten, rechtsausgerichteten Zeilen ausgegeben wird. Die voreingestellte Zeilenl{nge ist 60 Zeichen. Die voreingestellte Seitenl{nge ist 66 Zeilen pro Seite (f}r amerikanisches 11-Zoll Papier). Aufgef}llte Zeilen bedeutet, das eine Zeile solange mit W|rtern der nachfolgenden Zeilen aufgef}llt wird, bis der eingestellte rechte Rand erreicht ist oder das n{chste Wort nicht mehr in die Zeile pa~t. Nichtaufgef}llt bedeutet einfach, da~ Zeilen mit der Wortanzahl }bernommen werden, wie sie in der Datei stehen. Bei rechtem Randausgleich wird die Zeile, in den Wortzwischenr{umen, mit Leerzeichen aufgef}llt, bis der rechte Rand der Zeile mit dem voreingestellten Rand }bereinstimmt. Alle so ausgeglichenen Zeilen haben dann den gleichen rechten Rand. Zur Einstellung der Formatierungsparameter benutzen Sie die sp{ter beschriebenen Punktbefehle. Sie bestehen aus einem Punkt am Anfang der Zeile und zwei folgenden Buchstaben. Eine Punktbefehlszeile sollte nichts enthalten, als den Befehl selbst und die entsprechenden Parameter. Jeder nachfolgende Text wird ignoriert und geht verloren. .A Extra Leerzeichen trennen Textbereiche wie z.B. S{tze. Diese S{tze werden durch folgende Zeichen abgeschlossen: ':', ';', '!', '?', oder '.'. Eine Besonderheit betrifft den '.', dem zwei oder mehr Leerzeichen folgen m}ssen oder der am Ende einer Eingabezeile stehen mu~, wenn er als Satzabschlu~zeichen verwendet wird. .NE 5 Ein Befehlsargument kann ABSOLUT o. RELATIV eingegeben werden: .AOF $PIN 5 Einr}ckwert = 5 Leerzeichen $PIN +5 Einr}ckwert = Aktueller Wert + 5 Leerzeichen $PLS -1 Zeilenschaltung = Aktueller Wert - 1 Zeile .AMF .A Genauso haben alle Befehle einen Minimal- und Maximalwert auf die die eingegebenen Werte begrenzt werden, z.B. wenn eine Zeilenschaltung von 0 Zeilen eingegeben werden. .A Einige Kommandos bewirken einen Umbruch. Dies ist in der Punktbefehlstabelle vermerkt. Bevor so ein Kommando ausgef}hrt wird, wird die aktuelle Textzeile ausgegeben, ob sie komplett gef}llt ist oder nicht, dies passiert z.B. am Ende eines Absatzes. Eine Textzeile, die mit Leerzeichen oder Tabulatoren beginnt, bewirkt auch einen Umbruch und wird, ohne R}cksicht auf den eingestellten linken Rand, um soviele Leerzeichen oder Tabulatoren einger}ckt, wie eingegeben wurden. Dies ist eine tempor{re Einr}ckung, die auch durch ein Kommando ausgel|st werden kann. Eine vollkommen leere Zeile bewirkt ebenfalls einen Umbruch. Wenn einige Zeilen mit merkw}rdigen Einr}ckungen versehen sind und nicht offensichtlich ist, warum, vergleichen Sie in der Punktbefehlstabelle, welche Kommandos einen Umbruch ausl|sen und welche nicht. Beispiel: .AOF .NE 6 $PFI $PTI 0 Dies ist eine Zeile mit Text $PIN 8 <- Leere Zeile mehr Text zum Bearbeiten .AMF .A Auf den ersten Blick erscheint es so, als w}rde die Textzeile 'Dies ist eine Zeile mit Text' mit dem Einr}ckwert 0 ausgegeben, aber dies ist ein Trugschlu~, sie wird 8 Zeichen einger}ckt. Der Einr}ckbefehl ('.IN') bewirkt, genauso wie der tempor{re Einr}ckbefehl ('.TI'), keinen (!) Umbruch. Also besteht keine Veranlassung f}r den Textformatierer, die Zeile auszugeben, bevor der Einr}ckbefehl ('.IN') die Einr}ckung wieder auf 8 Leerzeichen stellt. Erst wenn ROFF4 die 'Leere Zeile' antrifft, f}hrt er einen Umbruch durch. Dadurch wird 'Dies ist eine Zeile mit Text' falsch einger}ckt. .A In Anbetracht dessen, ist es vorteilhaft, wenn vor jeder Benutzung des Einr}ckbefehls '.IN' mit dem Kommando '.BR' ein Umbruch erzwungen wird. .A Bestimmte Systemvariablen sind 'stacked'. Dieser englische Begriff bedeutet, das es bei diesen Parametern m|glich ist, zu vorherigen Einstellungen zur}ckzukehren, weil alle [nderungen, bildlich gesehen, auf einen Stapel (Stack) gelegt werden. .AOF .NE 7 Beispiel: $PLS 1 . . . $PLS .AMF .A Die erste Punktbefehlszeile stellt die einzelne Zeilenschaltung zwischen zwei Textzeilen ein. Diese ist bei Formatierungsbeginn voreingestellt. Hier wird davon ausgegangen, da~ sie vor dieser Zeile bereits einmal auf einen anderen Wert gesetzt wurde. .A Die zweite Befehlszeile mit dem '.LS'-Kommando kehrt wieder zu der Zeilenschaltung zur}ck, die vor der Zeile '.LS 1' eingestellt war. 'Gestapelte' Variablen sind: Zeilenschaltung, Einr}ckung, rechter Rand, Einleitungszeichen f}r Textersetzungen, Seitenl{nge, obere und untere Seitenr{nder, nichterweiterbares Leerzeichen, Ausgabebreite, Tabulatorschrittweite und das Zeichen zur Kennzeichnung von Druckerkontrollzeichen. .BP .CE 1 ^D^LPunktbefehlstabelle^l^d .SP 1 .NF .NJ Punktbefehl U:S Vorbelegung Funktion ----------- --- ----------- --------- $P. Kommentar N:- Der Kommentartext wird nicht ausgegeben. $PAB N:- Programmabbruch. $PBJ J:- Zeilenumbruch mit rechtem Randausgleich (nur vorhe- rige Zeile!). $PBP n J:- n = +1 Neue Seite m. Nummer n. $PBR J:- L|st einen Umbruch aus. (ohne Randausgleich der vorherigen Zeile). $PCF c N:J c = '$K' Das Zeichen c markiert Druckerkontrollzeichen wie z.B. $K+, $K-. $PCE n J:- n = 1 Zentriere die n{chsten n Zeilen. $PDB n N:- n = 0(nein) Setzt den DEBUG-Schalter auf 1 f}r Diagnoseausga- ben. $PDI Dateiname N:- JUNK.$D$D$D Dateiauslagerung ('Pr{prozessor') $PDM Makroname N:- Definiere ein (mehrzei- liges) Makro ('Pr{prozessor') $PDS /../../ N:- Leertext Definiere einen Text- platzhalter ('Pr{prozessor') $PED N:- Textauslagerung beenden ('Pr{prozessor') $PEF /../../../ N:- Leerzeichen Fu~zeile f}r Seiten mit geraden Nummern $PEH /../../../ N:- Leerzeichen Kopfzeile f}r Seiten mit geraden Nummern $PEM Makrodefinition beenden ('Pr{prozessor') $PFI J:- Zeilenauff}llung beginnen $PFF n N:- n = 1(J) Voreingestellt sind die Seitenvorsch}be ausge- schaltet. Werden sie ein- geschaltet, wird jede Seite mit einem Seiten- vorschub beendet. .BP Punktbefehl U:S Vorbelegung Funktion ----------- --- ----------- --------- $PFO /../../../ N:- leer Fu~zeile f}r alle Seiten (gerade/ungerade) $PFR # Basis - - . N:- 1,k. Wirkung Definiert, wie die Ausga- beeinheit auf halbe Zei- lenvorsch}be eingestellt wird. (F}r hoch-/tiefge- stellte Texte) Weitere Erl{uterungen siehe 'Druckerkontrolle'. Das Gegenteil ist .WH (s.u.). $PHE /../../../ N:- leer Kopfzeile f}r alle Seiten (gerade/ungerade) $PIC c N:J? c = '&&' Definiert das Zeichen, mit dem Makros gekenn- zeichnet werden. $PIG Kommentar N:- Kommentarzeile (s.a._'..') $PIN n N:J n = 0 Setzt die Texteinr}ckung auf den Wert n. $PJU N:- an Schaltet den rechten Randausgleich ein. (Nur sinnvoll, wenn auch die Zeilenauff}llung einge- schaltet ist) $PLS n N:J n = 1 Setzt die Anzahl der Zei- lenvorsch}be zwischen den Textzeilen. $PM1 N:J n = 2 Setzt den obersten Rand auf n Zeilen. Dieser ent- h{lt auch eine eventuell definierte Kopfzeile. $PM2 N:J n = 2 Setzt den zweiten oberen Rand auf n Zeilen. $PM3 N:J n = 2 Setzt den zweituntersten Rand auf n Zeilen. $PM4 N:J n = 2 Setzt den untersten Rand auf n Zeilen. Dieser ent- h{lt auch eine eventuell gesetzte Fu~zeile. $PNE n ?:- n = 2 Es werden n Zeilen ben|- tigt. Stehen diese auf der aktuellen Seiten zur Verf}gung, passiert nichts. Sonst wird ein Seitenumbruch ausgel|st. .BP Punktbefehl U:S Vorbelegung Funktion ----------- --- ----------- --------- $PNF J:- Beendet die Zeilenauff}l- lung. $PNJ N:- an Rechter Randausgleich wird ausgeschaltet. (Nur von Bedeutung, wenn auch die Zeilenauff}llung aus- geschaltet wird) $POF /../../../ N:- leer Fu~zeile f}r Seiten mit ungerader Seitennummer. $POH /../../../ N:- leer Kopfzeile f}r Seiten mit ungerader Seitennummer. $POU Basis - - - . N:- nicht m|glich Direkte Ausgabe von Code- sequenzen zur Ausgabeein- heit. $POW N:- n = 60 Setzt die Ausgabebreite f}r Kopf- und Fu~zeilen. $PPC c Basis - - . N:- nicht m|glich Definition von speziellen Druckerkontrollzeichen, z.B. f}r Engdruck usw. $PPL n N:J n = 66 Setzt die Seitenl{nge auf n Zeilen. $PRG Register n N:N n = 0 Generiert oder ver{ndert eine Registervariable. ('Pr{prozessor') $PRM n N:J n = 60 Setzt den rechten Rand auf Spalte n. $PSA Anzeigetext -:- Gibt eine Meldung 'Anzei- getext' w{hrend der Text- formatierung auf dem Bildschirm aus. $PSC c N:J '$U' Leerzeichen. Das sicht- bare Zeichen, das in ein nichterweitertes Leerzei- chen }bersetzt wird. $PSO Dateiname N:J keine Die Formatierung wird mit dieser Datei fortgesetzt und bei Dateiende mit der aufrufenden Datei fortge- setzt. Dieser Befehl kann w{hrend der Tastaturein- gabe nicht eingegeben werden. $PSP n J:- n = 1 n Leerzeilen. .BP Punktbefehl U:S Vorbelegung Funktion ----------- --- ----------- --------- $PST n N:- n = 1 (J) Stoppt (wartet) an jedem Seitenanfang. Die Vorein- stellung ist 'aus'. Kann auch mit der '-S'-Option eingeschaltet werden. $PTC c N:J '$D' Setzt das Markierungs- zeichen f}r Zeichen}ber- setzungen. (s.a. '.TR') $PTR c Basis - - . N:- nicht m|glich Definiert spezielle Zei- chens{tze oder Graphik- zeichen. $PTS n N:J n = 8 Setzt den Tabulatorab- stand. $PTI n J:- n = 0 Setzt die tempor{re Ein- r}ckung auf n Spalten. $PWH N:- keine Wirkung Beschreibt, wie wieder zur normalen Zeilenschal- tung zur}ckgekehrt wird. Gegenteil von .FR (s.o.). .. Tabellenende --------------------------------------------------------------- .BP .FI .IN .JU .BR .CE 1 ^D^LGraphische ]bersicht der Seitenformatsteuerungsbefehle^l^d .NJ .NF :------------- Ausgabebreite (.OW) -------------: - :-----------------------------------------------: : : Oberer Rand (.M1) - Enth{lt die Kopfzeile : S :-----------------------------------------------: e : Zwischenraum (.M2) zwischen M1 und Textbeginn : i :-----------------------------------------------: t : : : : e : :<-- Einr}ckung (.IN) : : n : : : : l : :Eine ganze Menge unn}tzer Worte: : { : :und anderem M}ll. : : n : :Tempor{re Einr}ckung (.TI) : : g : : : : e : : Rechter Rand (.RM) -->: : : : : : : P : : : : L :-----------------------------------------------: : : Zwischenraum (.M3) zwischen Textende und M4 : : :-----------------------------------------------: : : Unterer R. (.M4) - Enth. Fu~zeile (evtl. FF) : - :-----------------------------------------------: .JU .FI .A Wenn f}r M1 ein Randwert von 0 eingegeben wird, wird keine Kopfzeile ausgegeben, auch wenn eine definiert ist. Entsprechend wird keine Fu~zeile ausgegeben, wenn f}r M4 ein Wert von 0 eingegeben wird. .A Um die Vorbelegung f}r irgendeinen Wert zu {ndern, kann einfach die Datei ROFF4.H der C-Quelltexte ge{ndert werden und dann SUBMIT ROFF4.SUB aufgerufen werden. Nat}rlich nur, wenn Sie die C-Quelltexte und den BDS-C-Compiler besitzen. .] ^D^LWeiterf}hrende Erl{uterungen zu einigen Kommandos^l^d .NE 8 .A Wenn Sie eine Menge Zeilen zentrieren, aber nicht alle abz{hlen m|chten, geben sie einfach ein: .AOF $PCE 1000 lots and lots of words to be centered $PCE 0 .AMF &TL& .A Ein neuer Absatz kann z.B. mit einer tempor{ren Einr}ckung begonnen werden: .AOF $PTI +5 .AMF oder einfach, indem die erste Zeile mit einem Tabulator beginnt. .A F}r Spezialf{lle, wo das letzte 'Wort' am rechten Rand einer Zeile stehen soll, wie z.B. bei Numerierungen von mathematischen Formeln: .AOF _ x_=_y+z (12) .BJ .AMF k|nnen Sie einfach eingeben: .AOF $U x$U=$Uy+z (12) $PBJ .AMF wodurch ein Umbruch mit rechtem Randausgleich (.BJ), mit nur 'drei Worten' durchgef}hrt wird. (Das '$U' wurde mit dem '.SC'-Befehl als 'nichterweiterbares Leerzeichen' festgelegt). .BR .] ^D^LKopf- und Fu~zeilen^l^d .A Die Seitennummer kann in jede Kopf- und/oder Fu~zeile 'eingebaut' werden, indem an der Stelle, wo die Seitennummer in der Zeile stehen soll, ein '#' eingegeben wird: .AOF $PHE /Dies ist eine geistreiche Kopfzeile f}r Seite #/ .AMF .A Jedesmal, wenn diese Zeile am Anfang einer Seite gedruckt wird, wird die aktuelle Seitennummer anstelle des '#' gedruckt. .A Jede Kopf- und Fu~zeile ist '.IN 0', beginnt also immer am linken Papierrand, auch wenn der }brige Text einger}ckt ist. .A Kopf- und Fu~zeilen sind dreigeteilt. Diese Teile werden in der Zeile linksausgerichtet, zentriert und rechtsausgerichtet. Jedes dieser Teile kann weggelassen werden. Der rechtsausgerichtete Teil wird auf den Rand ausgerichtet, der mit dem '.OW'-Punktbefehl definiert wird. Manch einer m|chte die Kopf- und Fu~zeilen f}r gerade und ungerade Seitennummern unterschiedlich definieren. Z.B. kann es bei einem Buch n|tig sein, die Seitennummern je nach Seitennummer links- oder rechtsausgerichtet auszudrucken, damit die Nummer immer am {u~eren Rand der Seite steht: .AOF $PEF /Seite #/// $POF ///Seite #/ .AMF .A Jedes druckbare Zeichen, hier '/', kann benutzt werden, um die drei Teile der Kopf- oder Fu~zeile zu begrenzen, solange es nicht das Textersetzungszeichen '&&' ist oder es in einem der drei Textteile vorkommt. .A ROFF4 kann veranla~t werden, am Anfang jeder Seite zu warten, bis der Benutzer ein Blatt Papier in den Drucker eingespannt hat. Dies geschieht durch die Option '-S' in der Kommandozeile von ROFF4 und/oder durch den Punktbefehl '.ST'. .NE 5 &TL& .TI +5 Wenn Sie die Ausgabe in eine Datei umleiten und keine Seitenumbr}che haben m|chten, setzen Sie die vertikalen R{nder (M1-M4) auf Null. .BR &TL& .A Wenn Sie ASCII-Codesequenzen f}r die sofortige ('.OU') oder sp{tere ('.TR') Ausgabe eingeben m|chten, m}ssen Sie die Zahlenbasis festlegen. Diese kann bin{r, oktal, dezimal oder hexadezimal sein. Gekennzeichnet wird dies durch Eingabe eines Wortes, das mit dem Anfangsbuchstaben B, O (oder Q), D oder H beginnt, wobei es egal ist, ob es ein Gro~- oder ein Kleinbuchstabe ist. Nach der Zahlenbasis folgen in der gleichen oder in den n{chsten Zeilen die Zahlen, die die Codesequenz bilden, jeweils getrennt durch ein Leerzeichen (keine Kommata). Abgeschlossen wird die Codesequenz durch eine beliebige Zeichenfolge, beginnend mit einem Punkt '.'. Den einzelnen Zeilen k|nnen Kommentare angef}gt werden, von der Codesequenz durch ein Leerzeichen und ein Semikolon abgetrennt. .NE 5 .AOF Beispiel: $POU HEX 11 1C 8C 0 99 6C 55 ;Bereit machen ! $PEND .NE 13 $PTR = Bin{r ;'Identit{ts'-operator (Graphiksymbol) ;(dreifaches Gleichheitszeichen) auf dem MX-80 00011011 ;ESC 01001011 ;4B 00000110 ;6 Bit breites Graphiksymbol 0 ;Reihenfolge: 00101010 ;Links von oben nach unten 00101010 00101010 00101010 00101010 00000000 ;Rechts von oben nach unten $PEN .AMF .A Die erste Codesequenz k|nnte z.B. benutzt werden, um einen Drucker auf den Druck vorzubereiten. .A Das zweite, l{ngere Beispiel ist aus der Datei MX80 entnommen, in der eine ganze Anzahl von Graphiksymbolen f}r den MX-80-Drucker mit GRAFTRAX-80-Erweiterung definiert sind. Da der Drucker Rastergraphik benutzt, wurde das Graphiksymbol hier im bin{ren Zahlensystem definiert, so da~ man die Position der einzelnen Rasterpunkte sehr sch|n sehen kann. Sp{ter im Text veranla~t die Zeichenkombination '$D=' ROFF4 dazu, ein dreifaches Gleichheitszeichen (Identit{tszeichen) auf dem Drucker zu erzeugen. .] ^D^LSpezielle Symbole^l^d .A Durch Eingabe von Definitionen, wie z.B. in der Datei MX80, k|nnen das Programm ROFF4 und damit entsprechend auch die Textdateien, an beliebige Soft- und Hardware angepa~t werden. Der Drucker MX80 mit der GRAFTRAX-Erweiterung unterst}tzt z.B. Punktrastergraphik. Andere Drucker simulieren m|glicherweise bestimmte Symbole durch ]bereinanderdrucken von mehreren normalen Zeichen. Wieder andere haben vielleicht schon vordefinierte Graphiksymbole. .A Die Punktbefehle '.TR' und '.TC' definieren die Codes f}r Spezialsymbole und das ]bersetzungzeichen. Zur Erzeugung einer ]bersichtsliste der definierten Spezialzeichen auf dem Ausgabeger{t, k|nnen Sie die '-G'-Option der Kommandozeile benutzen. Beispiel: A>ROFF4 MX80 -G ) .] ^D^LDruckerkontrolle^l^d .A Es wird vorausgesetzt, da~ das Ausgabeger{t den Wagenr}cklauf einzeln akzeptiert und keinen automatischen Zeilenvorschub durchf}hrt. Sind diese Voraussetzungen erf}llt, k|nnen von ROFF4 hoch- und tiefgestellte Schriften, einzelne R}ckschritte, Unter- und Durchstreichungen und mehrfaches ]berdrucken, {hnlich wie bei WORDSTAR, ausgef}hrt werden. .A Es ist von Vorteil, wenn der Drucker f{hig ist, das Papier in Halbzeilenschritten zu transportieren. Dadurch sehen hoch- und tiefgestellte Schriften wesentlich besser aus, als w}rden sie jeweils in einer eigenen Zeile stehen. Au~erdem kann man damit gro~e Zeichen erzeugen, wie z.B. Summen- oder Integralzeichen. Um diese Halbzeilenvorsch}be nutzen zu k|nnen, mu~ ROFF4 noch mit den Punktbefehlen '.FR' und '.WH', am Besten am Anfang der Textdatei, mitgeteilt werden, wie der Drucker in Halbzeilen ('.FR') und Vollzeilen ('.WH') geschaltet wird. .NE 4 Beispiel f}r den MX-80 mit GRAFTRAX 80 : .BR .AOF $PWH HEX 1B 32 . ; 6 Zeilen/Zoll ist Standard $PFR 2 HEX 1B 33 12 . ; 18/216 Zoll = Halbzeilenvorschub .AMF .A Die 2 nach '.FR' gibt an, wieviele dieser 'Teilzeilen' n|tig sind, um einen vollst{ndigen Zeilenvorschub '.WH' zu ergeben. .] ^D^LDruckersteuerzeichen^l^d .A Die Druckersteuerzeichen werden direkt in den Text eingef}gt, sie werden NICHT, wie die Punktbefehle, in eine eigene Zeile geschrieben. Jede dieser Druckersteuerungen besteht aus zwei druckbaren Zeichen, von denen das erste die Druckersteuerung einleitet (vorbelegt mit '$K') und das zweite die jeweilige Funktion bezeichnet. .BR .] ^D^LTabelle der Druckersteuerzeichen^l^d .A Diese Tabelle zeigt die vordefinierten Druckersteuerzeichen, die ROFF4 seit der Version 1.30 bereitstellt. Zus{tzliche Zeichen k|nnen mit dem Punktbefehl '.PC' definiert werden. .NE 4 .IN +8 .TI -8 $K+______Eine Halbzeile nach oben. Kann auch mehrfach verwendet werden, um gr|~ere Symbole oder Graphiken zu erstellen. .NE 4 .TI -8 $K-______Eine Halbzeile nach unten. Kann auch mehrfach verwendet werden, um gr|~ere Symbole oder Graphiken zu erstellen. .NE 4 .TI -8 $Kh,$KH___Eine Zeichenspalte zur}ck. Macht KEINE R}ckschritte }ber normale Leerzeichen, wenn die Zeilenauff}llung eingeschaltet ist. ]ber 'nichterweiterbare Leerzeichen' schon. .DS :Zeile:Momentane Spaltenposition (speichern/wiederherstellen): .NE 3 .TI -8 $K(,$K)___&Zeile& .TI -8 $K^g[,$K]^G___&Zeile& .TI -8 $K^g{,$K}^G___&Zeile& .NE 4 Die letzten drei Steuerzeichenpaare sind h{ufig einfacher und bequemer zu nutzen, als mehrfache R}ckschritte mit '$KH', speziell f}r Br}che und Matrizen. .NE 2 .TI -8 $KB,$Kb___Fettschrift starten und beenden. (Schriften werden dreifach }bereinandergedruckt. .NE 2 .TI -8 $KD,$Kd___Doppelanschlag starten und beenden. (Schriften werden zweifach }bereinandergedruckt. .NE 3 .TI -8 $KU,$Ku___Unterstreichung starten und beenden. ]berdruckt den Text mit Unterstrichen. Unterstreicht keine erweiterbaren Leerzeichen. Macht Hoch- und Tiefstellungen mit. .NE 3 .TI -8 $KX,$Kx___Durchstreichen starten und beenden. Funktioniert wie die Unterstreichung (s.o.), durchstreicht jedoch den gekennzeichneten Text mit Strichen '-'. .BR .IN .A Beachten Sie, da~ bei den letzten 4 Paare jeweils der gro~e Buchstabe die Funktion einschaltet und der kleine Buchstabe sie wieder ausschaltet. Diese Funktionen sind also keine ^LUmschalte^lfunktionen sondern ^LEinschalte^l- und ^LAusschalte^l-funktion. .A Ein sch|nes Beispiel f}r die Benutzung der Druckerkontrollzeichen ist die Erstellung einer 3 x 3 Matrix: .AOF MATRIX =$U$K+$K+$K(:1$U2$U3:$K)$K-$K-:4$U5$U6:$K)$K-$K-:7$U8$U9:$K+$K+ .AMF .NE 5 das auf einem Halbzeilendrucker folgendes Bild ergeben mu~: .AOF :1 2 3: MATRIX = :4 5 6: :7 8 9: .AMF .A Einige Punkte m}ssen Sie bachten! Wenn ROFF4 sich im Zeilenf}llmodus befindet, sollten keine erweiterbaren Leerzeichen vorkommen, sonst kann es zu merkw}rdigen Ausgaben kommen. ROFF4 f}hrt einige Tests durch, um solche Fehler anzuzeigen. Es wird noch einmal darauf hingewiesen, da~ das Zeichen '$U' standardm{~ig das nichterweiterbare Leerzeichen ist. Das erste Zeichen in der Beispielzeile '=' ist der linke Rand, das letzte Zeichen, das der '9' folgende ':', ist der rechte Rand. Die endg}ltige H|he wird durch die '$K+$K+' eingestellt. Die maximale L{nge f}r die Zeilenpufferung ist 255, was v|llig ausreichend sein d}rfte. .A Sie k|nnen zus{tzliche Druckersteuerzeichen definieren. Z.B. um spezielle Druckerfunktionen anzusprechen, wie Engdruck etc. Im folgenden Beispiel wird der Engdruck f}r den MX-80 mit GRAFTRAX 80 definiert. Eingeschaltet wird der Engdruck mit der Zeichenfolge '4', ausgeschaltet mit 5. Als Steuerzeichen soll definiert werden, da~ mit '$KI' der Engdruck eingeschaltet und mit '$Ki' ausgeschaltet wird. .NE 6 .AOF $PPC I HEX ;Engdruck an (MX-80 + GRAFTRAX 80) 1B 34 $PEN $PPC i HEX ;Engdruck aus (MX-80 + GRAFTRAX 80) 1B 35 $PEN .AMF .] ^D^LDer Pr{prozessor^l^d .A In diesem Kapitel sollen die erweiterten Pr{prozessorf{higkeiten von ROFF4 erl{utert werden, die dem Textschreiber eine Menge Arbeit abnehmen, aber nicht unbedingt sofort gelernt werden m}ssen. Der Anf{nger kann die meisten Arbeiten auch durchf}hren, ohne die Pr{prozessorf{higkeiten zu nutzen, allerdings wird er seinen Texteditor mit gro~er Wahrscheinlichkeit mehr bearbeiten m}ssen, als es n|tig ist. Der fortgeschrittene ROFF4-Benutzer wird den Pr{prozessor sch{tzen lernen und gar nicht mehr ohne ihn auskommen. .A Im Folgenden werden das Standard-Textersetzungszeichen '&&' (deutsche Version) und das Zeichen zum Einleiten von Zeilenkommandos '.' benutzt. .A Das Textersetzungszeichen wird benutzt, um zu kennzeichnen, wo ein bestimmter Text durch einen anderen zu ersetzen ist. .AOF Heute, der &&Datum&&, ist ein besonderer Tag. .AMF .A Der Text '&&Datum&&' wird ersetzt, sobald dieser eingegeben (oder aus einer Datei eingelesen) wird. Wenn vorher eine Textersetzungsdefinition wie: .AOF $PDS /Datum/1. Januar 1983/ .AMF eingegeben wurde, die vor der ersten Benutzung von '&&Datum&&' abgearbeitet werden mu~, wird aus dem obigen Text die Textzeile: .AOF Heute, der 1. Januar 1983, ist ein besonderer Tag. .AMF .A Der Textersetzungbefehl '.DS' geht davon aus, da~ das erste sichtbare Zeichen, hier der Stern '*', das Begrenzungszeichen f}r zwei Textteile in dieser Definition ist. Jedes druckbare Zeichen, welches in keinem der beiden Texte vorkommen darf, kann verwendet werden. .A Wenn f}r 'Datum' keine Textzuweisung mit '.DS' stattgefunden hat, wird vom Benutzer eine solche }ber die Tastatur abgefragt. Auf dem Bildschirm erscheint folgende Meldung: Please define : .A Was immer Sie eingeben, wird benutzt, um eine wirksame '.DS'-Definition zu erstellen. Dieses M|glichkeit kann in Texten sinnvoll sein, wo bestimmte Werte bei jedem Formatierungslauf anders lauten sollen, wie in diesem Beispiel die Datumsangabe oder ein Empf{ngername und seine Adresse in einem Formbrief usw. Eine Beispieldatei 'FORM' zeigt diese beiden M|glichkeiten der Texteingabe bzw. Textersetzung. .A Eine wichtige Einschr{nkung mu~ bei der 'Texteingabe w{hrend der Formatierung' beachtet werden. Sie darf niemals zuerst innerhalb einer mehrzeiligen Definition auftreten (wie .OU, .TR, .DM, .PC, .WH und .FR), da die beiden Definitionen sich gegenseitig st|ren w}rden. ROFF4 in der Version 1.6 testet den Text auf solche Fehler und bricht die Formatierung ab, wenn er einen gefunden hat. .NE 7 Ein Beispiel f}r solch eine Konfliktsituation und die L|sung: .AOF $PSA Geben Sie 0 f}r Schnelldruck oder 1 f}r Briefqualit{t ein $POU hex 1B 3&&font&& $PEND .OU .AMF .A Dieses Beispiel, welches benutzt werden kann, um bei einem Okidata Microline 92 Drucker eine der Schriftarten Schnelldruck oder Briefqualit{t auszuw{hlen, bringt Probleme, wenn 'font' hier zum ersten Mal definiert (}ber die Tastatur eingegeben) wird. ROFF4 befindet sich mitten in der Definition einer direkten Zeichenausgabe (ESC '0' oder ESC '1') zum Drucker. ROFF4 bricht in so einem Fall die Formatierung ab, um zu verhindern, da~ sich die beiden Definitionen gegenseitig behindern. .A .NE 9 Hier folgt nun eine modifizierte Version des obigen Beispiels, bei dem dieses Problem nicht auftritt: .AOF $PSA Geben Sie 0 f}r Schnelldruck oder 1 f}r Briefqualit{t ein $P. Dieser Kommentar, der &&font&& enth{lt, wird ignoriert $POU HEX 1B 3&&font&& $PEND .OU .AMF .A Der Trick ist hier, da~ ROFF4 zwar den Kommentar in der zweiten Zeile nicht formatiert oder ausgibt. Jedoch wird zun{chst, bevor er den Kommentartext endg}ltig ignoriert, eine Eingabe f}r '&&font&&' verlangt. Dadurch kommt es nicht zu einer Konfliktsituation mit '.OU' wie im ersten Beispiel. .A [hnlich wie die Definition von Textersetzungen funktioniert die Definition von Registervariablen, die mit dem '.RG'-Kommando erzeugt und modifiziert werden. Die Registervariablen sind f}r Numerierungen wie z.B. das fortlaufende Durchnumerieren von mathematischen Gleichungen, sehr hilfreich: .AOF $PRG GlNum 1 .AMF erzeugt eine Registervariable namens 'GlNum' (^LGl^leichungs^Lnum^lmer) die den Wert 1 enth{lt. Im Text kann der Wert z.B. in folgender Weise genutzt werden: $U x$U=$Uy+1 (&&GlNum&&) .BR was von ROFF4 in folgenden Text umgesetzt wird: _ x_=_y+1 (1) .BJ Weiterf}hrend gibt es noch folgende Zuweisungsm|glichkeit: .AOF $PRG GlNum +1 .AMF die den Wert in 'GlNum' nimmt, 1 addiert und wieder in 'GlNum' abspeichert, so da~ jetzt in 'GlNum' die Zahl 2 gespeichert ist: $U a$U=$Ub+c (&&GlNum&&) .BR erzeugt jetzt also folgenden Text: _ a_=_b+c (2) .BJ .A Es gibt eine spezielle, reservierte, Textersetzung, und zwar '&&#&&', die immer die aktuelle Seitennummer enth{lt. Das kann sehr n}tzlich sein um z.B. Inhaltsverzeichnisse automatisch zu erstellen. Siehe dazu sp{ter auch das Kapitel 'Textauslagerungen'. Einfache Beispiele f}r den Gebrauch finden Sie in den Dateien BPTEST und MARGINS. In einigen F{llen kann es allerdings zu Problemen kommen, die auch von dieser ROFF4-M|glichkeit nicht gel|st werden k|nnen. Wenn sozusagen zwischen zwei Seiten auf '&&#&&' zugegriffen wird, z.B. wenn der Satz ^L'Dieser Satz steht auf Seite XXX'^l teilweise am Ende der einen Seite und teilweise am Anfang der n{chsten Seite steht. .A Wenn wir schon eine spezielle Registervariable '#' haben, sollten wir nat}rlich auch wissen, was passiert wenn wird den Wert mit einer '.RG'-Zuweisung wie der folgenden {ndern: .AOF $PRG # +1 .AMF .A Sie {ndern damit den Wert der Seitennummer der FOLGENDEN Seiten. Dies ist hilfreich, um z.B. Platz f}r ganzseitige Zeichnungen zu lassen. Diese M|glichkeit wird mit der Datei MARGINS demonstriert (u. getestet). .A Das Textersetzungszeichen hat auch noch andere Merkmale. Wenn das Zeichen selbst in der Ausgabe erscheinen soll, mu~ es zweimal hintereinander stehen. Aus '&&&&' in der Eingabe wird also '&&' in der Ausgabe. Dies kann hilfreich sein, um die Zuweisung eines Wertes zu einem Text (Textersetzung) zu verz|gern. Wenn Sie z.B. eingeben: .AOF $PDS /EN/(&&&&GlNum&&&&)/ .AMF wird 'EN' der Text '(&&GlNum&&)' zugewiesen und das Beispiel mit der Gleichung oben k|nnte man auch so schreiben: $U a$U=$Ub+c &&EN&& .BR .A Die Verz|gerung der Zuweisung der Gleichungsnummer 'GlNum' zu EN bewirkt, da~ die Gleichung die momentane (fortlaufende) Gleichungsnummer erh{lt. Im Gegensatz dazu w}rden alle Gleichungen dieselbe Nummer erhalten, wenn EN in der '.DS'-Zeile ein fester Wert zugewiesen worden w{re. .A Befindet sich das Textersetzungszeichen ganz am Ende einer Zeile, wird die n{chste Zeile an die momentane angeh{ngt. Dies kann sehr hilfreich sein, wenn man z.B. den Kopfzeilentext }bersichtlich auf zwei oder drei Zeilen verteilt. Beispiel: Donaudampfschiffahrts&& .BR gesellschaftskapit{nsm}tze .BR wird von ROFF4 gelesen als: Donaudampfschiffahrtsgesellschaftskapit{nsm}tze .] ^D^LMAKROS^l^d .A MAKRO-Definitionen werden benutzt, wenn man mehrere Textzeilen, dies k|nnen Befehls- oder Textzeilen sein, durch eine einzige Abk}rzung ersetzen m|chte. Diese Definitionen werden durch den Makrodefinitionsbefehl '.DM' eingeleitet und durch den Makroendebefehl '.EM' abgeschlossen. Als Beispiel ist hier eine Kommandosequenz zu einem Makro zusammengeschlossen worden, mit der jeweils ein Absatz eingeleitet wird: .AOF $PSP 1 $PNE 2 $PTI +5 .AMF um die Abs{tze durch eine Leerzeile '.SP 1' vom vorherigen Text zu trennen, sicherzustellen, da~ wenigstens zwei Zeilen des Absatzes zusammenh{ngend auf der Seite dargestellt werden '.NE 2' und, um die erste Zeile um 5 Zeichen einzur}cken '.TI +5'. Wir wollen diese Befehlsfolge mit dem Namen 'Absatz' benennen. (Dies kann nat}rlich auch ein anderer, k}rzerer Name sein.) .AOF $PDM Absatz $PSP 1 $PNE 2 $PTI +5 $PEM .AMF .A Jedesmal wenn wir jetzt einen neuen Absatz beginnen wollen, geben wir also einfach die Zeile .AOF $PAbsatz .AMF anstatt der sonst n|tigen drei Zeilen ein. .A Die Namen aller MAKROS, Textersetzungen und Registervariablen m}ssen sp{ter, bei der Benutzung, genauso eingegeben werden, wie bei der Definition. Es ist NICHT egal, ob die Buchstaben gro~ oder klein geschrieben werden. .AOF $PABSATZ .AMF ist ^Lnicht^l dasselbe MAKRO, da~ wir gerade definiert haben. Bei allen ^Leingebauten^l Kommandos und Befehlen dagegen, ist es v|llig egal, ob die Buchstaben gro~ oder klein eingegeben werden. Sie werden alleine durch die ersten zwei Buchstaben identifiziert, egal ob irgendwelche Zeichen oder Ziffern direkt anschlie~end eingegeben werden. Findet ROFF4 eine Zeile: .AOF $PTIME .AMF wird 'TIME' als MAKRO identifiziert, wenn eines definiert wurde. Es kommt nicht zu einem Konflikt mit einem eventuell definierten MAKRO mit Namen 'Time'. Wenn kein 'TIME'-Makro definiert ist, wird es als eine tempor{re Einr}ckung '.TI' erkannt und behandelt. .] ^D^LTextauslagerungen^l^d .A Es gibt noch ein weiteres Hilfsmittel welches ROFF4 bereitstellt. Dies sind ^LTextauslagerungen^l. Sie sind sehr hilfreich, um Listen zu erstellen, z.B. Fu~notenlisten oder Inhaltsverzeichnisse. Eine Textauslagerung wird gestartet (oder fortgesetzt) mit dem Punktbefehl '.DI' und mit dem Punktbefehl '.ED' beendet. Eine solche Auslagerung kann sehr gro~ werden und ist als Diskettendatei realisiert. Um diese ausgelagerten Texte wieder in den Eingabestrom zur}ckflie~en zu lassen, kann der Name der Auslagerungsdatei entweder am Ende der CP/M-Kommandozeile eingegeben werden oder mit dem '.SO'-Punktbefehl dem ROFF4 bekannt gemacht und von diesem zugeladen werden. Der Vorteil der Zuladung mit dem '.SO'-Befehl besteht darin, da~ sie durchgef}hrt werden kann, ohne einen Zeilen- oder Seitenumbruch auszul|sen. Der '.SO'-Punktbefehl wirkt wie ein 'CALL' oder 'GOSUB'. Genau wie diese k|nnen auch '.SO'-Befehle geschachtelt werden. Eine Datei kann mit einem '.SO' eine Datei mit einem '.SO' rufen, die dadurch wieder eine Datei mit einem '.SO' ruft usw. Der '.SO'-Punktbefehl kann nicht }ber die Tastatur eingegeben werden. Die Dateien SOTEST, ONE, TWO und THREE wurden erstellt, um die Wirkungsweise des '.SO'-Befehls zu demonstrieren und zu testen. .A Alle Dateinamen, die beim '.DI'- und beim '.SO'-Punktbefehl eingegeben werden, werden automatisch in Gro~buchstaben umgewandelt. Die Namenskonventionen des Betriebssystems (CP/M) m}ssen sie selbstverst{ndlich erf}llen. Es ist eine Beschr{nkung vorhanden, da ROFF4 nicht erkennt, da~ der Dateiname 'A:ZZ' dieselbe Datei bezeichnet wie 'ZZ'. Stellen sie sicher, da~ Sie durchgehend denselben Namen f}r dieselbe Datei benutzen. (vielleicht mit einer Textersetzung ?) .] ^D^LEin Beispiel f}r die Benutzung des Pr{prozessors^l^d .A Hier wird jetzt ein Beispiel f}r die Benutzung der oben beschriebenen Pr{prozessorkommandos f}r die automatische Numerierung von Fu~noten und Kommentaren und deren Sammlung vorgestellt. .A Wir beginnen mit der Erzeugung einer Registervariablen 'f#', die immer die laufende Fu~notennummer enthalten soll: .AOF $PRG f# 1 .AMF .A Wir m|chten gerne, da~ die Fu~notennummer sp{ter in der Form '<15>' im Text und in der Fu~notenliste erscheint. Wir k|nnten Sie aber auch z.B. mit '$K+15$K-' hochgestellt darstellen. .AOF $PDS 'fn'<&&&&f#&&&&>' .AMF bedeutet, das der Zeichenvariablen 'fn' die Zeichenkette '<&&f#&&>' zugewiesen wird, wodurch der Variablen 'fn' bei Vorkommen im Text die jeweils aktuelle Fu~notennummer zugeordnet wird und nicht die, die zum Zeitpunkt der '.DS'-Definition aktuell ist. Trifft ROFF4 im Text die Zeichenfolge '&&fn&&' an, macht er daraus einen Text der Form '', wie wir es ja auch haben wollten. .A Nun wollen wir noch eine Textauslagerungsdatei mit dem Namen 'FNOTEN' erzeugen, in die alle Kommentare abgelegt werden sollen. .NE 9 Die ]berschrift in der Datei soll 'KOMMENTARE' hei~en: .AOF $PDI FNOTEN $PLS 1 $PSP 1 $PCE 1 KOMMENTARE $PSP 2 $PED .AMF .A Die Textauslagerungsdatei soll sp{ter, hoffentlich, eine Liste von forlaufend durchnumerierten Fu~noten enthalten. Um die Auslagerung dieser Fu~noten so einfach wie m|glich zu gestalten, definieren wir die zwei Makros 'FS' (Fu~notenstart) und 'FE' (Fu~notenende): .AOF .NE 5 $PDM FS $PDI FNOTEN $PSP 1 &&&&fn&&&&$U $PEM .NE 6 und: $PDM FE $PED $PRG f# +1 $PEM .AMF .A Das 'FS'-Makro erzeugt eine Leerzeile und gibt danach die Fu~notennummer am Anfang einer neuen Zeile aus, der dann, bei Ausf}hrung im Text, der eigentliche Fu~notentext folgt. Die Zeilen die dem 'FS'-Makro folgen, werden in die Auslagerungsdatei 'FNOTEN' ausgegeben. Das 'FE'-Makro beendet die Textauslagerung und erh|ht die Fu~notennummer 'f#' um 1. .NE 11 Nun wollen wir das alles mal an einem kleinen St}ck Text ausprobieren: .AOF $PNF Es ist ein sch|ner Tag.&&fn&& $PFS Normale Aussage. $PFE Es ist ein h}bscher Tag.&&fn&& $PFS Merkw}rdige Aussage! $PFE .AMF .NE 4 ROFF4 macht daraus: .AOF Es ist ein sch|ner Tag.<1> Es ist ein h}bscher Tag.<2> .AMF .NE 11 und die Auslagerungsdatei FNOTEN enth{lt dann: .AOF $PLS 1 $PSP 1 $PCE 1 KOMMENTARE $PSP 2 $PSP 1 <1> Normale Aussage. $PSP 1 <2> Merkw}rdige Aussage! .AMF .NE 9 woraus ROFF4 den folgenden Text formatiert: .AOF KOMMENTARE <1> Normale Aussage. <2> Merkw}rdige Aussage! .AMF