Bernd Preusing Oct-88 Erläuterungen zu den Modulen: Die Definitions-Module sollten auf jeden Fall genau gelesen werden, hier sind nur einige Hinweise und der 'Grobzweck' beschrieben! ArraySort: Sort sortiert einen ARRAY OF ADDRESS in aufsteigender Reihenfolge. Dieser ARRAY kann ein ARRAY OF POINTER TO ... oder auch ein ARRAY OF LONGINT o.ä. sein. Die eigentliche Sortierung erfolgt durch den Aufruf der Prozedur 'less' vom Typ prLess, die die beiden übergebenen Adressen interpretieren kann, wie sie will. Dadurch kann man also beliebige Objekte wie RECORDs, Strings oder Zahlen sortieren. ein kleines Beispiel ist in SortDemo gezeigt, welches auch Timer2 benutzt. Timer2: Viel Leute haben Probleme, die Prozeduren des Moduls Timer zu benutzen. Das ist auch kein Wunder, denn der übergebene Parameter timer: ADDRESS ist nichts wert, weil er vom Compiler wieder überschrieben wird! CODE-Prozeduren können einzig und allein von Library-Modulen exportiert werden (jedenfalls bis zur heutigen Compiler-Version)!! Also schrieb ich Timer2.mod, das diese Prozeduren und einige weitere zur Verfügung stellt, ohne daß man den ganzen Overhead des Device- Öffnens usw. in Kauf nehmen muß. U.A. sind hier auch zwei Prozeduren enthalten, die eine Stoppuhr emulieren. Zu Beginn ruft man StartTime() auf, am Ende StopTime(t). t ist vom Typ TimeVal und enthält dann die seit StartTime vergangene Zeit. Des weiteren gibt es GetSysTime(t), das die aktuelle Systemzeit in t ablegt. Ein SetsysTime habe ich absichtlich nicht implementiert, weil es bei falscher Handhabung zu Problemen führt, und außerdem wird die Systemzeit ja hoffentlich beim Einschalten des Amiga gesetzt. InOut2: ist ein erweitertes InOut, welches folgende Prozeduren zusätzlich enthält: SetInput(name:ARRAY OF CHAR); SetOutput(name:ARRAY OF CHAR); Diese beiden erlauben das direkte Öffnen eines IO-Files, ohne daß der Benutzer wie bei OpenInput, OpenOutput eine Eingabe machen muß, denn diese hat er ja evtl. schon als Programm-Parameter übergeben. WriteCount(adr: ADDRESS; count: LONGINT) WriteCount(adr: ADDRESS; count: LONGINT) Damit kann man nun alles lesen und schreiben und das FileSystem wird in den meisten Fällen überflüssig. ReadLn(VAR str: ARRAY OF CHAR; VAR len: INTEGER); Liest eine Textzeile ein, die mit eol (line feed) beendet ist. ReadString liest ja nur bis zum ersten Trennzeichen, welches auch ein Leerzeichen sein kann! Außerdem ist ReadLn erheblich schneller, Interessierte sollten sich die Implementation ansehen! TwoFiles: benutzt InOut2, um 1 oder 2 Files als Ein- und/oder Ausgabe zu setzen. Dabei benutzt es die Kommandozeilen- bzw. Workbench- Parameter, um die Filenamen zu erhaltem. Falls keine Parameter (mehr) da sind, wird der Benutzer gefragt. Dies ergibt ein Verhalten ähnlich m2c und m2l. OpenFiles(in,out:BOOLEAN):BOOLEAN Ein Hauptprogramm sieht dann z.B. nur noch so aus: WHILE OpenFiles(TRUE,TRUE) DO InOut2.Read... InOut2.Write... END; Es wird jeweils ein File für Lesen und eins für Schreiben geöffnet und bearbeitet, bis keine Parameter mehr da sind oder der Benutzer einfach RETURN drückt. OpenFiles(TRUE,FALSE) öffnet nur ein Input-File, OpenFiles(FALSE,TRUE) öffnet nur ein Output-File. OpenFiles(FALSE,FALSE) ist sinnlos! Falls eine OptProcedure gesetzt wurde, wird sie beim Auftauchen eines Parameters, der mit '-' beginnt, aufgerufen. Sie kann dann die Option auswerten. Falls Files für Output geöffnet werden, wird vorher geprüft, ob sie bereits existieren. In diesem Fall wird der Benutzter gefragt, ob das File gelöscht werden soll. Dieses Verhalten kann mittels SetAsk(FALSE) abgeschaltet werden. TextWindow: öffnet ein 4farb-Backdrop-Window auf einem eigenen Screen (wie m2emacs) und bietet etliche Prozeduren zur Text-Ein- und Ausgabe sowie einige Spezialitäten z.B. für Menüs o.ä. Assembler: ist nur ein Def-Modul (* $M- *), welches ich brauchte, um die Originale einiger M2Amiga-Module zu rekonstruieren. Es sollte in dieser Form nicht benutzt werden, weil es von einigen der System-Module importiert wird, aber eben nicht das Original IST. Hier kommt der Linker dann ins Schleudern, weil die 'Keys' nicht übereinstimmen. Wer es benutzen will, sollte es in Assembler2 umbenennen und neu kompilieren! XDos: ist ein $M- dos.library-Modul, welches Zugang zu ALLEN dos-Funktionen bietet. Es gibt eine ganze Reihe, die nicht dokumentiert sind. Leider weiß auch ich nicht, was sie bewirken. Einige werden vom Modul Terminal benutzt. Wer weiß etwas Genaues???? Janus: ist ein $M- janus.library-Modul (die janus.library verwaltet die PC- Karte). Um dieses Modul zu benutzen benötigt man ein gehörige Portion Wissens über diese Library und die PC-Karte. Ich hatte noch nicht die nötige Lust, eine entsprechende Dokumentation zu schreiben, zumal ich immer noch hoffe, daß Commodore dies endlich einmal nachholt! Ich benutze dies Modul, um Befehle an den PC zu geben, ohne daß ein PC-Window geöffnet sein muß. Ein Demo kann ich aber leider noch nicht liefern, weil es noch nicht 100%ig funktioniert. Interessenten bitte bei mir melden! ENDE