

	Dokumentation
	=============

Diese Dokumentation protokolliert unsere Bearbeitung der Semesteraufgabe. Sie
ist berdies ein Demonstrationsausdruck, der mit unserem eigenen
Textformatiererer erstellt wurde.  


Textformatieren gehrt zu den ltesten Anwendungen des Betriebssystems Unix.
Das Prinzip, da Leerzeilen Abstze trennen, ist auch sehr typisch, wie wir
beim Formatieren unseres Handbuches mit nroff (welches leider nicht
8-bit-clean zu sein scheint) durch xman feststellen konnten.


Zu entwickeln war ein Programm, das einen ASCII-Text auf eine vorgegebene
Breite rechts- oder linksbndig oder auch im Blocksatz formatieren kann. 
Auch mehrspaltige Formate und unterschiedliche Seitengren sollten
untersttzt werden. Der Formatierungsalgorithmus sollte die bei der
Formatierung zwangslufig auftretenden Lcken mglichst klein halten und
gleichmig verteilen. Parameter wie Spaltenbreite und -anzahl sowie die
Seitengre sollten ber Kommandozeilenparameter einstellbar sein und bei
fehlenden Angaben auf plausible Defaultwerte gesetzt werden.
	Statt ASCII haben wir uns fr die Obermenge Latin-1 entschieden, da es
bereits gengend rgerliche Programme gibt, die nicht 8-bit-clean fr Umlaute
sind.
	Fr die Kommandozeilenoptionen haben wir uns fr ein deutsches
pseudonatursprachliches Interface entschieden, weil wir dies fr leicht zu
verstehen und leicht zu verinnerlichen halten.  
	Als Namen fr unseren Textformatierer whlten wir 'tippe', da
Festschritttypen wie bei einer Schreibmaschine vorausgesetzt werden. Wir haben
'tform' als Namen verworfen, da dies zu hochtrabend fr ein derart kleines
Programm mit nur wenigen Funktionen klingt.


Das Programm war entsprechend der Unixphilosophie als Eingabe-Ausgabefilter zu
gestalten. Genau genommen, htte man es in vier Teile teilen knnen: einen
Absatztrenner, einen Zeilensetzer, einen Spaltenumbrecher und ein das ganze
korrekt pipendes Shellskript.
	Jedoch sind lngst auch unter Unix grere Programme blich, die viele
Funktionen vereinen. Wir haben uns entschieden, erst den gesamten Text in den
Speicher einlesen zu lassen, damit zu erkennen ist, wie lang er wird, und um
die Spalten der letzten Seite auszugleichen.  
	Anfangs erwogen wir, den halbformatierten Text in einer Temporrdatei
zwischenzuspeichern, jedoch ist es angesichts der Speichergre und des brk()
unserer Rechner hchst unwahrscheinlich, da die Speichergrenzen je erreicht
werden sollten, so da wir den ganzen Text dynamisch ablegen.
	Man kann im Programmtext erkennen, da die einzelnen Zeilenanfnge in
einer Liste statt in einem Array gespeichert werden, da wir Berhrungsngste
mit einem realloc (groe Zeilenzahl) hatten, dies wrden wir jedoch heute zur
erhhten Geschwindigkeit einbauen, wenn wir noch die Zeit htten, das Programm
vor dem Abgabetermin zu berarbeiten.


Bei der Entwicklung kam es uns entgegen, da sich die Aufgabe in mehrere
Teilaufgaben gliederte, so wurde zum Beispiel die Kommandointerpretation
seperat geschrieben und erst spter eingegliedert. Obwohl wir zu
modularisieren gelernt haben, haben wir nun der bersichtlichkeit halber nur
ein Listing abgegeben, eine Wiederverwendung einzelner Funktionen ist nmlich
eher unwahrscheinlich und unsere 15 Kilobyte Programmtext lieen sich locker
in 3 Sekunden bersetzen.  
	Gegen Ende der Semesterferien war das Programm noch vollkommen
unvollstndig.  Es war schwer zu entscheiden, wie der Algorithmus im Detail
funktioniert, mit was fr Hilfsvariablen er sich in C ausdrcken lie und so
weiter.
	Man kann schlecht etwas zu Stande bringen, wenn man versucht, ohne
Konzept ein Programm in den Editor zu tippen. Es ist aber ebenso schwierig,
mit Papier und Bleistift ein Programm dieser Komplexitt auszudenken, ohne da
man z. B. von der Behandlung von Bindestrichen irritiert wird, wenn man sich
gerade mit Absatzerkennung beschaeftigt hat. Hier haben uns schlielich
Abstriche der Gestalt geholfen, da wir auf unsere Ambitionen der Sorte
"Tabulatoren im Absatz sollen tabulieren", "Leerzeilen sollen intelligent
gestrichen werden", "Seiten sollen numeriert werden", "Sonderzeichen \f \v und
\r sollen ihrer blichen Bedeutung angemessen interpretiert werden" verzichtet
haben.
	Wir haben trotzdem eine benutzerfreundliches Programm geschrieben, das
Absatzeinrckungen und Leerzeilen relativ treu zum Original bertrgt und die
geforderte Funktionalitt korrekt erfllt.


Uns hat speziell an dieser Aufgabe gefallen, da sie so berschaubar war, da
man relativ sauber programmieren konnte und trotzdem mathematisch komplexe
Aufgaben beinhaltet waren. Es wird kaum auf Systemdienste von Unix
zurckgegriffen, dafr werden viele interessante C-Sprachelemente verwendet,
und die Sprache C haben wir schlielich erst in dieser Lehrveranstaltung
kennengelernt. Nicht gefallen hat uns die geraubte Zeit.