home *** CD-ROM | disk | FTP | other *** search
- M2POSIX-14: 31-Mai-94
- o 'PORTAB.M2H': Neue Konfigurationsmakros __RANGE_CODE__, __STACK_CODE__
- und __DEBUG_CODE__, um einzustellen, ob die Module mit oder ohne die
- entsprechenden Tests übersetzt werden sollen. Alle drei Einstellungen
- werden (de)aktiviert, wenn im Quelltext das Makro __DEBUG__ auftaucht.
- Aus dem Makro __IMP_SWITCHES__ sind diese Einstellungen jetzt
- herausgenommen.
- __STACK_CODE__ sollte deaktiviert werden; ich habs zwar nicht
- ausprobiert, aber wenn "[v]fork()" oder "exec*()" verwendet werden,
- gibts vermutlich Probleme.
- Bei TDI sollten alle Tests ausgeschaltet werden, da teilweise falsche
- Range-Checks erzeugt werden, die zumindest bei 'ListDir' und 'tlib'
- zum Programmabbruch wegen (fälschlich erkannter) Bereichsüberschreitungen
- führt.
- Leider sollten auch bei Megamax alle Tests ausgeschaltet werden; zum
- einen läuft bei __DEBUG_CODE__ sonst das gesamte Programm im Trace-Modus
- ab, zum anderen werden aber auch hier teilweise falsche Range-Checks
- erzeugt, die zu Abstürzen führen. Ich habe zwar versucht, dies zu
- umgehen, kann aber für nichts garantieren.
- Bei LPR können die Laufzeitüberprüfungen beim Übersetzen jetzt
- eingeschaltet werden, da bei allen Assemblerprozeduren mit Rückgabewert
- die Aufräumarbeiten jetzt explizit im Assemblercode erledigt werden,
- sodaß der Test auf ein fehlendes RETURN nicht mehr ausgeführt wird.
-
- Leider muß ich sagen, daß wegen der vielen Fehler bei der Erzeugung
- des Test-Codes diese neuen Konfigurationsmakros eher zum Testen
- der Compiler als zum Testen der Module geeignet sind... Aus diesem
- Grund sollten die Tests i. allg. ausgeschaltet bleiben.
-
- o 'PORTAB': Neue MIN*/MAX*-Konstanten.
- o Noch ein paar Abfragen auf MiNT beseitigt.
- o "proc.getlogin()": Neue Funktion.
- o 'cstr': "strerror()" und "strsignal()" arbeiten jetzt mit `C'-Strings.
- o "sys.gethostname()": Neue Funktion.
- o 'lib': "strtol()", "strtoul()", "ltoa()", "ultoa()" arbeiten mit
- `C'-Strings.
- "itoa()", "atoi()", "atol()": Neue Funktionen.
- o "sys.uname()" liefert mehr Informationen.
- o 'OSCALLS': Bconout, Bconin, Bconstat neu.
- o "tim.difftime()": Neue Funktion.
- o "proc.clock()": Neue Funktion.
- o Einige Bezeichner von 'BSD' nach 'ANSIC' transportiert.
- o 'sig': Signale sind nicht mehr vom Aufzählungstyp 'Signal', sondern
- int-Werte. Dadurch haben "sigadd/delset()" wieder einen Funktions-
- wert, der anzeigt, ob ein gültiges Signal angegeben wurde, und in
- 'POSIX1' werden nur noch die POSIX-Signale exportiert, während die
- restlichen Signale in 'BSD' exportiert werden.
- o 'DosSupport': "IsCTerm()", "Disconnect()": Neue Funktionen.
- o "proc.setsid()": Das Kontrollterminal wird jetzt auch mehr oder weniger
- freigegeben.
- o 'Spawn', 'ForkExec': Signale werden mittels "strsignal()" als Text
- ausgegeben.
- Bei 'ForkExec' werden im Elternprozeß die Signale SIGINT und SIGQUIT
- ignoriert, solange auf die Beendigung des Kindprozesses gewartet wird,
- sodaß z.B. bei ^C genau wie bei 'Spawn' nur der Kindprozeß abgebrochen
- wird.
- o "POSIX2.system()": Neue Funktion.
- o 'LC*', 'loc': Unterstützung von sog. Locales, d.h. bestimmte Funktionen
- lassen sich so beeinflussen, daß nationale Gegebenheiten berücksichtigt
- werden. Im einzelnen:
-
- - Die Funktionen aus 'ctype' werden durch das 'LC_CTYPE'-Locale
- beeinflußt.
- - "strftime()" durch das 'LC_TIME'-Locale.
- - "strsignal()" und "strerror()" durch das 'LC_MESSAGES'-Locale.
-
- und alle Funktionen, die die oben genannten benutzen.
- Implementiert sind das POSIX- bzw. C-Locale, das bei Programmstart aktiv
- ist, ein usa-Locale und ein german-Locale.
- o 'showdate': Das 'LC_TIME'-Locale wird ausgewertet und die Ausgabe,
- falls verlangt, den deutschen Konventionen entsprechend gestaltet.
- o 'POSIX_ID.M2H', 'ANSIC', 'POSIX1' und 'BSD' aktualisiert.
-
- M2POSIX-13: 10-Apr-94
- o 'sig': Neue Funktionen: "sigmask()", "sigpause()", "sigblock()" und
- "sigsetmask()", neuer Typ 'SigAtomicT'.
- o 'tsighandler', 'tsigtimer': Tests für die neuen Funktionen.
- o "proc.*stat()": In 'StatRec' werden die neuen Felder 'stRdev',
- 'stBlksize' und 'stBlocks' berücksichtigt. Unter TOS haben Dateien mit
- dem HIDDEN-Attribut keine Leseberechtigung. Die Länge symbolischer Links
- wird immer ohne Nullbyte angegeben, egal ob das Dateisystem das Nullbyte
- zur Länge mitzählt.
- o 'dir': Neue Funktionen: "telldir()", "seekdir()".
- Typ 'DirentRec' um die Felder 'dIno' und 'dNamlen' erweitert.
- Bei "getcwd()" und "readlink()" die Platzangabe für den Ergebnispfad vom
- Typ 'sizeT'.
- o 'pOUT': Neues Modul für die einheitliche Ausgabe von LONG-Zahlen in den
- Testmodulen.
- o "getcwd()" und "chdir()" von 'dir' nach 'proc' transportiert, da das
- Arbeitsverzeichnis eher ein Prozeßattribut ist.
- o In Funktionen, bei denen eine Größenangabe für einen 'StrPtr' nicht vom
- Typ 'StrRange' ist, werden zu hohe Werte auf den maximalen Wert für
- 'StrRange' reduziert.
- o "term.tcgetpgrp()": Es fehlte ein RETURN.
- o "cstr.AssignCToM2()": Neuer Parameter, um die Anzahl der zu kopierenden
- Zeichen zu begrenzen.
- o "DosSystem.MagiXVersion()": Neue Funktion.
- o 'ListDir': Dateigrößen werden in Bytes angegeben. Zusätzlich werden
- die Benutzer- und Gruppenkennung und das Ergebnis von "telldir()"
- ausgegeben (ergibt sowas wie eine physikalische Reihenfolge im
- Verzeichnis). Bei symbolischen Links werden zusätzlich Name und Typ des
- Ziels ausgegeben.
- o 'types': ``C''-Standardtypen neu (int, unsigned usw.).
- In den Schnittstellen aller ``High-Level''-Module diese Typen verwendet.
- o "proc.vfork()": Mit Megamax funktionierts, dank Thomas Tempelmann, jetzt
- wenigstens unter MiNT.
- o In der ST-Computer 4/94, S.94-99, wird in dem Artikel 'Unter einem Hut...'
- beschrieben, wie man die neuen Funktionen von MiNT einsetzen kann, ohne
- daß deswegen immer auf das Vorhandensein von MiNT abgefragt wird. Auf
- diese Weise werden die Funktionen auch verwendet, wenn sie von einer
- anderen Erweiterung zur Verfügung gestellt werden, die nicht den MiNT-
- Cookie anlegt. Die Funktionen werden nur dann nicht unterstützt, wenn
- beim Aufruf der Fehler EINVFN (= -32) zurückgeliefert wird. Dieses
- Vorgehen ist zwar nicht an allen Stellen von M2POSIX möglich oder
- sinnvoll, aber ich habe die Anzahl der Abfragen auf MiNT doch stark
- reduzieren können.
- o 'OSCALLS.M2H': Einige Fehler bei den Falcon-XBIOS-Funktionen beseitigt.
- o "ctype.isblank()": Neue Funktion.
- o 'PORTAB.M2H': Neuere Versionen des HM-Compilers unterstützen eine
- ganze Reihe von ISO-Funktionen, deshalb habe ich die entsprechenden
- Makros auch für HM2 definiert. Wer noch eine ältere Version hat, muß
- die Makros entsprechend zurücksetzen. Im einzelnen betrifft dies:
- - ISO_value_constructor
- - ISO_opaque_far_imp
- - ISO_recursive_proc_decl
- - ISO_packedset
- - ISO_loc
- - ISO_val
- o 'DosSupport': "DecodeDate()", "EncodeDate()", "DateToSeconds()",
- "SecondsToDate()", 'Date', 'DaysPerMonth', 'MonthDays' neu.
- o 'DosSystem': "FcntlAvail()", "DpathconfAvail()", "DgetcwdAvail()",
- "SysconfAvail()" neu.
- o 'TDosSystem': Gibt die Ergebnisse der neuen DosSystem-Funktionen aus.
- o Ausdrücke des Typs 'timeT' enthalten jetzt die Anzahl der Sekunden seit
- dem 1.1.1970 0:00 Uhr, lokaler Zeit, also ohne Zeitzonenkorrektur zu UTC.
- o "utime()": Parameter mehr POSIX-like.
- o "sys.stime()": Neue Funktion.
- o 'OSCALLS': "Tsettime()" und "Tsetdate()" haben einen Ergebnisparameter,
- da unter MiNT ein ``richtiger'' Fehlercode zurückgeliefert wird.
- o 'tim': Neues Modul mit den POSIX-Zeitfunktionen, inkl. Auswertung der
- Environmentvariable TZ.
- o 'showdate': Neues Programm für die Demonstration von "tim.strftime()".
- o 'POSIX_ID.M2H', 'ANSIC', 'POSIX1' und 'BSD' aktualisiert.
-
- M2POSIX-12: 12-Mär-94
- o OSCALLS.M2H: Einige Fehler bei der LPR-Einbindung beseitigt.
- XBIOS-Definitionen, incl. Falcon-XBIOS, neu.
- Tmalarm von MiNT 1.10 neu.
- o 'OSCALLS': "Cnecin()", "Cconis()", "Cconout()", "Cconws()", "Vsync()",
- "Dfree()", "Tmalarm()" neu.
- o 'DosSystem': Neue Funktionen "SetException()", "GetException()".
- "*SysVar()" in "*SysMem()" umbenannt.
- o 'proc': Neue Funktionen: "seteuid/gid()", setreuid/gid()", wait3()",
- "wait4()" und "select()", "FDZERO()", "FDSET()", "FDCLR()", "FDISSET()".
- o 'PORTAB.M2H': Neues Makro PROCADR für die Adreßbildung von Prozeduren.
- Compileroption $K- als Default fuer HM2 im Definitionsmodul.
- o 'pLONGSET': Neues Modul für Operationen mit 32-Bit-Mengen.
- o "sys.statfs()": Neue Funktion.
- o 'tsys': Gibt Informationen von "statfs()" aus.
- Es kann ein Argument übergeben werden, das den Pfad angibt, für den
- die dateisystemabhängigen Daten ermittelt werden sollen.
- o 'cstr': Neue Funktionen "strlwr()", "strupr()".
- o "proc.exec/spawnvp()": Zwei Pfadtrenner hintereinander oder ein Pfadtrenner
- am Anfang oder Ende der Pfadliste von 'PATH' bedeuten: das aktuelle
- Verzeichnis soll probiert werden. Für die Extensionen ausführbarer
- Programme wird statt 'SUFFIX' jetzt nur noch 'TOSEXT' verwendet. Die zu
- testenden Extensionen werden zuvor immer in Kleinbuchstaben gewandelt.
- o "file.open()": genauer eingegrenzt, wann eine Datei zum Kontrollterminal
- wird.
- o 'sig': "pause()" und "sigsuspend()" haben keinen Rückgabewert mehr, da
- dieser ohnehin immer gleich -1 wäre. Ebenso haben die Mengenoperationen
- "sig*set()" keinen Rückgabewert, da der einzige Fehler ein falsches
- Signal wäre, was aber nur durch einen Programmierfehler entstehen
- könnte.
- o "sig.sleep()": Die Funktion war mittels 'Fselect' implementiert, da
- dieser Aufruf seit MiNT 1.08 durch ein Signal abgebrochen werden kann;
- in MiNT 1.10 wird er aber nur noch unterbrochen, nicht jedoch abgebrochen,
- deshalb ist "sleep()" jetzt durch die aufwendige MiNTLib-Variante mittels
- 'Talarm' implementiert.
- o "sig.sigaction()": Implementiert.
- o 'sig': Neue Funktionen: "signal()", "killpg()", "raise()", "usleep()".
-
- Durch die obigen Änderungen an 'sig' und viele weitere kleine, die hier
- nicht erwähnt sind, sind jetzt endlich Signale verwendbar!
- Es ist zu beachten, daß Signalhandler reentrant sein müssen (für asynchrone
- Signale)! HM2-Benutzer sollten den entsprechenden Hinweis in M2POSIX.TXT
- lesen. Außerdem dürfen unter MiNT innerhalb eines Signalhandlers zwar
- BIOS-, XBIOS- und GEMDOS-Aufrufe stattfinden, aber keine VDI- oder AES-
- Aufrufe, also z.B. auch keine Ausgaben über 'InOut' oder so, wenn sie
- in ein Fenster umgeleitet werden.
-
- o 'jump': "sigsetjmp()" und "siglongjmp()" implementiert.
- Bei der HM2-Version von "longjmp()" wurde 'Psigreturn' höchstens zufällig
- ausgeführt.
- o 'showsig': Neues Modul zum Testen asynchroner (externer) Signale.
- o 'tsighandler': Neues Modul zum Testen der Installierung von
- Signalhandlern.
- o 'tsigtimer': Neues Modul zum Testen der Signalfunktionen, die mit der Zeit
- zu tun haben.
- o 'e': Konstanten 'eLOOP' und 'ePIPE' (von MiNT generiert) aufgenommen.
- 'EINTR' hat den Code -128. Fehlercodes von Kai Roemers Socket-Bibliothek
- aufgenommen.
- o "cstr.strerror()": Fehlercodes der Socket-Bibliothek werden berücksichtigt.
- o "cstr.strsignal()": Neue Funktion, Äquivalent von "strerror()" für Signale.
- o "sys.time()": Parameter mehr POSIX-like.
- o 'forkexec': Es wird mit "wait4()" auf das Ende des Kindprozeßes gewartet
- und die `verbrauchte' Zeit ausgegeben.
- o 'proc': Bei "tfork()" und "spawn*(pWAIT,...)" wird unter TOS nach
- Beendigung des Unterprozesses ein SIGCHLD-Signal generiert.
- o "proc.tfork()": Der Speicher für den Kindprozeß wurde unter MiNT nicht
- wieder freigegeben.
- o 'forkexec', 'spawn', 'tthread': Es wird ein Signalhandler für SIGCHLD
- installiert, der eine Meldung bei Beendigung des Unterprozesses ausgibt.
- o 'POSIX1': "seteuid/gid()" aufgenommen.
- o 'BSD': Neues Modul für den Reexport von Nicht-POSIX-aber-UNIX-meistens-
- BSD-UNIX-Funktionen..., man darf sich also nicht darauf verlassen, daß
- nur BSD-Funktionen auftauchen, mir ist nur kein anderer Name eingefallen.
- o 'POSID_ID.M2H': Um die neuen Nicht-POSIX-Bezeichner erweitert.
-
- M2POSIX-11: 27-Jan-94
- o 'DosSystem': 'MachineType' berücksichtigt auch den Falcon und den
- Mega-STE. Neue Funktion für das Ermitteln der bevorzugte Landessprache.
- Neue Funktionen für das Setzen, Löschen, Abfragen von Cookies.
- Neue Funktionen für das Lesen und Setzen von Systemvariablen.
- o 'TDosSystem': Beim Rechnertyp werden Falcon und Mega-STE berücksichtigt.
- Über die FPU (falls vorhanden) werden Informationen ausgegeben.
- Die bevorzugte Landessprache wird ausgegeben.
- Der Cookie-Jar wird ausgegeben.
- o "sys.uname()" berücksichtigt auch die neuen Rechnertypen, 'nodename'
- wird auf "?" gesetzt.
- o 'PORTAB': Die Typen BYTESET und LONGSET sind nicht mehr auskommentiert,
- damit nach dem Präprozessieren die gleichen Typen vorhanden sind wie
- beim Originalmodul aus 'crystal'; deshalb ist evtl. ein Patchen des
- HM2-Compilers nötig, siehe 'M2POSIX.TXT'.
- o 'OSCALLS': Neue Funktion "Dcntl()". Bei 32-Bit-VAR-Parametern wird
- das Ergebnis der Systemaufrufe nicht mehr direkt den Parametern
- zugewiesen, sondern auf dem Umweg über eine lokale Variable -- das
- ist sicherer.
- o 'MAKEUNIX.*', 'MAKETEST.*': Batchdateien bzw. Pseudomodul für die
- Komplettübersetzung aller Module.
- o "file.utime()": Unter MiNT wird versucht auch bei Verzeichnissen
- Zeit und Datum zu setzen, wenns nicht klappt, weiterhin keine
- Fehlermeldung.
- o 'tvfork': Kleines Beispielprogramm für "vfork()". Läuft unter TOS und
- MiNT, aber nicht mit Megamax (MM2) (siehe dazu auch M2POSIX.TXT)
- o "DosSupport.UnixToDos()": Die fehlende Initialisierung einer Variable
- führte dazu, daß Dateinamen mit führendem '.' manchmal falsch bearbeitet
- wurden. <xpath> ist jetzt auch ein `C'-String, der jedoch nicht mit
- einem Nullbyte abgeschlossen zu sein braucht.
- o 'PORTAB.M2H': Neues Makro REFADR für die Adreßbildung von
- REF-Parametern (MM2: CADR, statt ADR).
- o 'cstr': neue Funktionen "stricmp()", "strnicmp()". "TOKEN()" wurde von
- 'pSTRING' hierhin transportiert, in "Token()" umbenannt und arbeitet
- nun mit `C'-Strings.
- o "proc.vfork()": bei TDI wird auch Register A5 gerettet.
- o 'ForkExec': Wenn beim 'exec' ein Fehler auftritt, Fehler im Klartext
- ausgeben und Kindprozeß beenden. Statt "fork()" wird jetzt mit "vfork()"
- gearbeitet (außer bei MM2), sodaß das Programm nun auch ohne MiNT läuft.
- o 'proc': Den Code zur Suche eines Programms bei "execvp()" und "spawnvp()"
- neu geschrieben, sodaß keine Beschränkung der Pfadlänge oder der Länge
- von PATH mehr besteht.
- Damit gibt es in M2POSIX keine, durch die Implementierung bedingte,
- Einschränkungen einer Pfadlänge mehr!
-
- M2POSIX-10: 01-Jan-94
- o 'lib' ist nicht mehr von 'DosSystem' und 'OSCALLS' abhängig.
- o 'timeT' ist jetzt nach außen hin vom Typ UNSIGNEDLONG, damit es ohne
- Probleme als Funktionsresultat geliefert werden kann.
- o 'SsizeMax' und 'ClkTck' wurden von 'sys' nach 'types' transportiert.
- o "term.tcgetpgrp()": Wenn das Terminal zu keiner Prozessgruppe gehört,
- wird ein Fehler gemeldet.
- o "file.open()": Ist jetzt weitgehend nach dem MiNTLib-open gestaltet,
- wodurch unter MiNT mehr Aufgaben von MiNT direkt übernommen werden.
- Unter MiNT wird nun tatsächlich die kleinste freie Kennung verwendet,
- nicht die kleinste, die größer als fünf ist.
- Ausserdem wurde noch ein Fehler der alten Implementierung entfernt,
- und übersichtlicher ist es auch geworden...
- o 'DosSupport': Die Auswertung von UNIXMODE im Modulrumpf hatte noch
- Fehler.
- o "file.fcntl()": Unter TOS funktionierte fDUPFD nicht, und bei fSETLK
- fehlte ein RETURN.
- o Unterstützung für HM2_OLD (Versionen < 5.1) eingestellt.
- o 'jump': Bei TDI wird auch Register A5 gerettet.
- o "term.isatty()": INTEGER statt BOOLEAN als Funktionswert.
- o PORTAB.M2H: Neues Konfigurationsmakro __REG_VARS__, um Registervariablen
- zentral (de)aktivieren zu können.
- o Für jede Datei wird (unter TOS) in 'DosSupport' ein Pseudo-
- Dateibeschreibungsblock geführt, der vor allem die beim 'open'
- angegebenen Attribute enthält. Dadurch können unter TOS mit "fcntl()""
- Flags abgefragt und gesetzt werden, außerdem wird das O_APPEND-Flag
- von "write()" und das FD_CLOEXEC-Flag von "spawn*/exec*()" unterstützt.
- o 'tfile': Tests für O_APPEND und "fcntl()".
- o 'jump': Die bis jetzt nicht implementierten Prozeduren "sig*()" mit
- Prozedurrahmen, da sonst bei einem irrtümlichen Aufruf kein Rück-
- sprung erfolgt. Außerdem konnte es beim optimierten Linken von 'TLib'
- mit HM2 zum Absturz beim Aufruf des Programms kommen.
-
- M2POSIX-09: 07-Nov-93
- o "dir.getcwd()": Unter TOS wird intern immer ein Puffer von mindestens
- PATHMAX Zeichen bereitgestellt, da 'Dgetpath' keine Maximallänge
- beachtet.
- o "DosSupport.UnixToDos()": Die Umsetzung von Pfadnamen der Form /dev/xxx
- funktionierte nicht. Außerdem wurde zu ``früh'' gemeldet, daß der Platz im
- Dos-Pfad nicht ausreicht. Durch eine interne Umstellung wird der *IX-Pfad
- nicht mehr verändert, sodaß er jetzt ein VAR-Parameter ist, und weniger
- Stack ``verbraucht'' wird. Der Puffer für die Ermittlung des aktuellen
- Verzeichnisses wird nur noch angelegt, wenn nötig -- das spart auch Stack.
- Die Umwandlung von '/' in '\' wird jetzt früher vorgenommen, sodaß z.B.
- neben /pipe/ auch \pipe\ umgesetzt wird.
- o Das Makro __MINT__ wird nicht mehr beachtet; wenn MiNT vorhanden ist,
- werden immer dessen Systemaufrufe benutzt. Dadurch wird die Funktionalität
- nicht eingeschränkt, aber der Quellcode wird übersichtlicher.
- o 'file': "utime()": Wenn für 'modtime' Null übergeben wird, wird dies
- unter MiNT auch als NULL-Pointer an das Dateisystem weitergereicht, damit
- es selbst die aktuellen Zeiten einsetzen kann. Bei Verzeichnissen wird
- kein Fehler mehr gemeldet, es wird einfach nix getan.
- "dup()", "dup2()": Das 'FdCloExec'-Flag der neuen Dateikennung wird
- gelöscht; die Dateien bleiben also bei einem Unterprozeßstart geöffnet.
- Bei "dup()" ist unter MiNT die kleinstmögliche neue Kennung nicht mehr 6
- sondern 0.
-
- M2POSIX-08: 10-Okt-93
- o In den Definitionsmodulen wird genauer auf das Verhalten der Funktionen
- unter TOS und unter MiNT eingegangen.
- o Die ``C''-Stringfunktionen aus 'pSTRING' herausgenommen und in das neue
- Modul 'cstr' transportiert.
- o "strerror()" von 'lib' nach 'cstr' transportiert, da "strerror()" zwar
- keinen ``C''-String liefert, aber trotzdem zu den "str*()"-Funktionen
- gehört.
- o Modul 'CTYPE' in 'ctype' umbenannt.
- o 'cstr': Neue Funktionen: "strncat()", "strcmp()", "strncmp()", "strchr()",
- "strrchr()" und "strstr()".
- o Längenangaben in 'cstr' und 'MEMBLK' nicht mehr als CARDINAL oder
- UNSIGNEDLONG, sondern als 'sizeT'.
- o "DosSystem.FPU()": Neue Funktion + zugehörige Typen.
- o Neues Modul 'jump', in das "lib.set/longjmp()" und "sig.sigset/longjmp()"
- transportiert wurden. Außerdem wird "set/longjmp()" jetzt nicht mehr von
- ANSIC, sondern von POSIX1 reexportiert.
- o 'DosFile' in 'DosSupport' umbenannt. In Zukunft gehen alle M2POSIX-
- spezifischen Hilfsfunktionen, nicht beschränkt auf Dateifunktionen, in
- dieses Modul, damit 'DosSystem' allgemein verwendbar bleibt.
- o 'MEMBLK': "memalloc()", "memdealloc()": Neue Funktionen für Speicherre-
- servierung auf dem Stack.
- o "dir.readdir()": Unter TOS werden die Dateinamen in Kleinbuchstaben
- umgewandelt.
- o 'ANSIC': Die Prozedurvariablen für "main()" und "getenv()" wurden nicht
- initialisiert.
- o "DosSupport.UnixToDos()": Verarbeitung von "." und ".." im Wurzelver-
- zeichnis erweitert.
- o 'lib': Tests für "MEMBLK.mem[de]alloc()".
- o "OSCALLS.Supexec()": Die auszuführende Prozedur ist jetzt vom Typ PROC,
- da die Rückgabe eines Funktionswertes nur funktioniert, wenn dafür
- Register D0 verwendet wird (und der Stack unangetastet bleibt).
- o 'DosSystem': Im Hinblick auf Mag!X-Versionen 2.x wurden sämtliche
- 'Super'-Konstruktionen durch 'Supexec'-Aufrufe ersetzt (laut Handbuch
- sollen'Super'-Aufrufe nicht mehr benutzt werden).
- o 'proc': Testweise Implementierung von "vfork()". Testweise deswegen, weil
- ich nicht weiß, ob die Prozedur unter allen Bedingungen funktioniert --
- mit Megamax-Modula MM2 funktioniert sie jedenfalls unter keiner
- Bedingung... Vor Anwendung unbedingt den Kommentar im Definitionsmodul
- lesen!
- o Überall wo Pfadnamen als Ein- oder Ausgabeparameter vorkommen, wird jetzt
- für die Konvertierung nach bzw. aus dem Dos-Format der Platz dynamisch
- mit "memalloc()" auf dem Stack angelegt. Das bedeutet zum einen, daß
- nur noch soviel Stack ``verbraucht'' wird wie nötig, zum anderen aber,
- daß ``beliebig'' lange Pfadnamen verwendet werden können! Damit besteht
- bei den meisten Funktionen keine (interne) Beschränkung der Pfadlänge
- mehr! Da die Änderungen jedoch umfangreicher waren, als ich gedacht
- hatte und ich auch keine Lust hatte, nochmal alles zu testen, ist es
- wahrscheinlich, daß ein paar Bugs hinzugekommen sind.
-
- M2POSIX-07: 14-Aug-93
- o "DosSystem.GetCookie()": Neue Funktion.
- o 'pSTRING': Neue Funktionen "strcat()" und "strpbrk()".
- o "lib.longjmp()": Unter MiNT wird ein 'Psigreturn' ausgeführt.
- o "file.open()": Unterstützung von 'O_NOCTTY' unter MiNT.
- o Modul 'err' in 'e' umbenannt, da bei HM2 ein gleichnamiges Modul
- in der GEMplus-Bibliothek existiert.
- o 'DosFile': Neue Variable 'BINIO', die angibt, ob in der Environment-
- Variablen UNIXMODE die Option 'b' (binary) gesetzt ist.
- o "DosFile.DosToUnix()": Die Umsetzung von Pfadnamen ohne Laufwerks-
- angabe funktionierte nicht. In einem Fall wurde die Länge des
- Ergebnispfades falsch berechnet. ROOTDIR wird jetzt ausgewertet, um
- die Startadressen der Pfade mehr *IX-like zu gestalten.
- o "file.utime()": Datum und Zeit waren vertauscht, wenn der übergebene
- Parameter statt der aktuellen Zeit benutzt werden sollte.
- Unter MiNT werden bei einem entsprechenden Dateisystem 'actime' und
- 'modtime' getrennt gesetzt (z.B. Minix-FS 0.60pl6).
- o "file.ftruncate()": Neue Funktion. Läuft nur mit entsprechendem
- Dateisystem (z.B. Minix-FS 0.60pl6).
- o "pSTRING.AssignM2ToC()": Schließt ähnlich wie "strncat()" den Ergebnis-
- string nur noch mit einem Nullbyte ab, wenn der Quellstring kürzer als
- die angegebene Maximalgröße ist.
- o "dir.readlink()": mehr POSIX-like: das Ergebnis wird nicht mehr mit
- einem Nullbyte abgeschlossen, stattdessen MUß jetzt das Funktions-
- ergebnis fuer die Länge herangezogen werden.
- o "term.ttyname()": Neue Funktion.
- o "term.ctermid()": Neue Funktion.
- o "MEMBLK.memmove()": Ziel- und Quellparameter waren vertauscht.
- o In "DosFile.UnixToDos()" und "CompletePath()" wird jetzt wieder auf
- die Version von MiNT abgefragt und 'Dgetcwd' nur benutzt, falls
- mindestens MiNT 0.96 vorhanden ist, sonst wird 'Dgetpath' verwendet.
- dadurch kann M2POSIX jetzt auch wieder mit Versionen unter 0.96 benutzt
- werden, nur laufen dann eben manche Funktionen, wie z.B. "waitpid()"
- nicht. Aus diesem Grund entfällt auch die Sicherheitsabfrage in
- 'DosSystem', die zum Programmabruch fuehrte. Ich empfehle aber trotzdem,
- nur die jeweils neueste MiNT-Version einzusetzen!
- o "DosFile.DosToUnix()": Es wird zusätzlich die Länge des DOS-Pfades
- geliefert. Somit kann leicht ermittelt werden, um wieviele Zeichen
- der *IX-Pfad länger oder kürzer als der DOS-Pfad ist.
- o "file.lstat()": Bei symbolischen Links wird jetzt im st.stSize-Feld
- die Länge des Pfades geliefert, wie sie nach Umwandlung durch
- "DosToUnix()" wäre, und durch "readlink()" geliefert wird (+ Nullbyte).
- o Die Definitionen fuer ``C''-Strings und die Konstante EOS fuer M2-
- Strings wurden von 'pSTRING' nach 'types'transportiert.
- o "MEMBLK.memchr()": Neue Funktion.
- o "MEMBLK.memcmp()": Neue Funktion.
- o 'tlib': Tests fuer "memchr()" und "memcmp()".
- o Die Funktion "fnmatch()" wurde von 'lib' in das neue Modul POSIX2
- verlegt. Damit ist zwar "fnmatch()" die einzige Funktion im Modul, aber
- vielleicht kommen ja irgendwann weitere hinzu.
- o 'cmdline': ARGV^[ARGC] wurde nicht immer auf NULL gesetzt.
-
- M2POSIX-06: 30-Jun-93
- o In 'pSTRING' weitere String-Parameter als REF-Parameter deklariert.
- Weitere Variablen als Registervariablen, Registervariablen auch in
- anderen Modulen häufiger.
- o 'ShowCMD': Die Basepage-Kommandozeile wird zusätzlich ausgegeben.
- o 'cmdline': Die ARGV-Erweiterung für leere Argumente wird unterstützt.
- Die Modulinitialisierung wurde in eine Prozedur gepackt, sodaß häufig
- benutzte Variablen als Registervariablen deklariert werden konnten.
- o "proc.exec*/spawn*()": Die ARGV-Erweiterung für leere Argumente wird
- unterstützt.
- o 'spawn' & 'forkexec': Es werden auch leere Argumente zum Testen
- verwendet.
- o 'dir': "readdir()"/DirentRec: Die Dateinamen sind nicht mehr in der
- Länge begrenzt, da nur noch ein Zeiger auf den eigentlichen Dateinamen
- geliefert wird, der bis zum nächsten "readdir()" auf das gleiche
- Verzeichnis gültig bleibt. Der Speicher für den Dateinamen wird beim
- "opendir()" angefordert und beim "closedir()" wieder freigegeben.
- o 'PORTAB': Neue Typen: (UN)SIGNED für die jeweils größten verfügbaren
- Ganzzahltypen, entsprechend ISO-CARDINAL/INTEGER, und jeweilige Maximal/
- Minimalwerte als Konstanten.
- o 'CTYPE': Alle Funktionen in Kleinbuchstaben (entsprechend ``C'').
- o "pSTRING.strcpy()": Neue Funktion.
- o 'POSIX' umbenannt in 'POSIX1'. Es werden nur noch Funktionen aufge-
- nommen, die erstens aus POSIX.1 stammen (damit fällt z.B. "fnmatch()"
- raus, da POSIX.2), und zweitens nicht gleichzeitig Ansi-C-Bibliotheks-
- funktionen sind. Gleichzeitig kommen die Ansi-C-Funktionen in ein neues
- Modul ANSIC, in das zusätzlich auch Ansi-C-Funktionen aufgenommen werden,
- die nicht gleichzeitig POSIX-Funktionen sind. Auf diese Weise wird eine
- gewisse Trennung zwischen ``System''- und ``Bibliotheks''-Funktionen
- erreicht, obwohl diese Unterscheidung von POSIX nicht getroffen wird.
- o OSCALLS.M2H: BIOS-Aufrufe integriert.
- o "file.fcntl()": F_SETLK wird auch ohne MiNT im begrenztem Maße unter-
- stützt, wenn durch eine entsprechende GEMDOS-Erweiterung der 'Flock'-
- Aufruf existiert.
- o Neues Modul 'pSTORAGE'. Das Modul stammt von Ulrich Kaisers GEM-
- Bibliothek ``crystal'' (leicht verändert).
- o "pSTRING.strncpy()": Neue Funktion.
- o "file.fcntl()": Die GEMDOS-Fehler 'eLOCKED' und 'eNSLOCK' werden auf
- 'EACCES' abgebildet.
- o 'DosSystem': Neue Funktionen "Machine()" und "CPU()". 'TDosSystem'
- gibt auch die Werte dieser beiden Funktionen aus.
- o "sys.uname()": Neue Funktion. 'tsys' gibt auch Informationen dieser
- Funktion aus.
- o 'term': Neues Modul für POSIX-Terminalfunktionen. Die meisten Funktionen
- sind (noch) nicht implementiert, das Modul legt hauptsächlich erstmal
- die neuen Bezeichner fest. Ob und wann Funktionen tatsächlich implemen-
- tiert werden, weiß ich nicht.
- o "isatty()" von 'file' nach 'term' transportiert.
- o 'sig': Neues Modul für POSIX-Signalfunktionen. Es gilt das gleiche wie
- bei 'term'.
- o 'POSIX1' und POSIX_ID.M2H um die neuen Bezeichner erweitert.
- o Der GNU-C-Präprozessor wird jetzt mitgeliefert.
-
- M2POSIX-05: 07-Jun-93
- o OSCALLS.M2H: Bessere Ausnutzung der von den Compilern gebotenen
- Features für Betriebssystemaufrufe.
- o 'MEMBLK': Neues Modul mit den von 'lib' ausgelagerten Funktionen
- "bcopy()","bswap()" und "bzero()" für die Bearbeitung von
- Speicherbereichen. Dadurch ist das Modul nicht mehr auf M2POSIX
- beschränkt.
- o 'MEMBLK': "bcopy()" und "bswap()" umbenannt in "memmove()" und "memswap()".
- "bzero()" durch universelleres "memset()" ersetzt.
- o 'PORTAB.M2H': Makro für Registervariable definiert. In einigen Modulen
- (z.B. 'pSTRING') Indexvariablen als Registervariablen deklariert.
- o !!! ACHTUNG: !!! ES WIRD JETZT NICHT MEHR AUF UNTERSCHIEDLICHE MiNT-
- VERSIONEN IM PROGRAMMTEXT ABGEFRAGT, SONDERN NUR NOCH, OB MiNT VORHANDEN
- IST ODER NICHT. DA IM FALLE DES VORHANDENSEINS VON MiNT AUCH NEUERE
- MiNT-AUFRUFE BENUTZT WERDEN (Z.B. PWAITPID UND DGETCWD), MUSS, FALLS
- MiNT ÜBERHAUPT EINGESETZT WIRD, MINDESTENS VERSION 0.96 BENUTZT WERDEN!!
- MIT VERSION 0.95 (ODER KLEINER) LÄUFTS NICHT MEHR!!
- o "file.fcntl()": Neue Funktion.
- o 'tlib': Neues Modul zum Testen von Funktionen aus 'lib' und 'MEMBLK'.
- o "file.open()": In der Beschreibung der Funktion im Definitionsmodul wird
- auf den Unterschied zwischen Datei, Dateibeschreibungsblock und Datei-
- kennung eingegangen. Die einzelnen Konstanten Im Aufzählungstyp
- 'OpenMode' sind auf die Positionen der entsprechenden Flags im MiNT-Fopen
- angepaßt (wegen "fcntl()").
- o 'types': POSIX-Mindestwerte (PosixPathMax, usw.) als Konstanten definiert.
- Dokumentiert, daß NAMEMAX und PATHMAX bibliotheksinterne Größen sind -
- sie wurden deshalb auch aus dem Modul POSIX entfernt. Die tatsächlich vom
- Dateisystem unterstützten Größen können mit "sys.path/sysconf()" erfragt
- werden.
- o 'DosSystem': Bei der Modulinitialisierung wird geprüft, ob eine MiNT-
- Version kleiner als 0.96 benutzt wird; wenn ja, wird das Programm mit
- einer Fehlermeldung abgebrochen.
- o "file.open()": Unter MiNT wird eine geöffnete Datei nicht mehr auto-
- matisch bei Ausführung von "exec*()" geschlossen ('FdCloExec'-Flag
- wird gelöscht).
- o "proc.tfork()": Neue Funktion.
- o "proc.SetStacksize()": Neue Funktion.
- o 'tthread': Neues Modul zum Testen von "tfork()".
-
- M2POSIX-04: 13-Mai-93
- o Modul 'lib': Funktionen "bcopy()","bswap()","bzero()": Die Register
- wurden erst gerettet, NACHDEM sie bereits verändert waren...
- Zum Glück hatte das keine Auswirkungen auf die derzeit unterstützten
- Compiler.
- o Modul 'lib': Funktion "fnmatch()": Funktionswert INTEGER statt BOOLEAN,
- Konstante FNMNoMatch.
- o Neues Modul PORTAB. Ersetzt das alte M2TYPES. Das Modul stammt von
- Ulrich Kaisers GEM-Bibliothek ``crystal'' (leicht verändert).
- o Datei PORTAB.M2H: Die Abfrage auf die unterschiedlichen Compiler
- geschieht jetzt mit #if (defined ...) oder #ifdef anstatt mit #if ...,
- d.h. das entsprechende Makro ist nur für den jeweilig benutzten
- Compiler definiert, sonst nicht (Kompatibilität mit ``crystal'').
- Ebenso werden nun die Konfigurationsmakros und die Betriebssystemmakros
- als definiert oder undefiniert abgefragt.
- Die restlichen Makros sind wie bisher entweder mit 0 oder Nicht-Null (1)
- definiert (#if ...)
- o Neues Modul OSCALLS: Die Betriebssystemaufrufe sind jetzt ``richtige''
- M2-Prozeduren, keine Makros mehr. Das ist doch etwas robuster.
- o "proc.spawnvp()"/"execvp()": Der Parameter für den Programmnamen wurde
- verändert (Bei Compilern mit REF-Parametern). Das angegebene Programm
- wurde u.U. nicht gefunden.
- o "file.open()": Unterstützung von O_APPEND unter MiNT.
- o "file.open()": bei O_TRUNC wird jetzt versucht, die Dateiattribute einer
- vorhandenen Datei so weit wie möglich zu erhalten.
- o "file.creat()": Die Funktion wird jetzt über "open()" implementiert,
- wie im Definitionsmodul angegeben. Dadurch wird die neue Datei auch
- explizit mit 'O_WRONLY' geöffnet, und zumindest MiNT verhindert dann
- Lesezugriffe.
- o Modul 'tfile': Wegen obiger Änderung wurde die fälschliche Benutzung von
- "creat()" für eine Datei, von der auch gelesen wird, durch "open()"
- ersetzt.
- o Modul 'POSIX': weitere Konstanten und Typen aufgenommen, besonders die
- Fehlerkonstanten aus 'err'. Leider lassen sich Variablen nicht
- reexportieren, sodaß 'err.errno' und 'cmdline.environ' nicht aus
- 'POSIX' importiert werden können.
- o Modul 'DosSystem': "GetBasepage()" und PID, PPID sind entfallen, dafür
- gibt es die Variable BASEP und die Prozedur "DosPid()", die aus einer
- Adresse (auf eine Basepage) eine Prozeßkennung errechnet.
- o Aufgrund eines Compilerfehlers kam das Megamax-System nicht mit
- __LONG_WHOLE__ zurecht. Als Abhilfe wird jetzt in sämtlichen Modulen
- bei Feldindizierungen explizit mit 16-Bit-Ausdrücken gearbeitet.
-
- M2POSIX-03: 17-Apr-93
- o Datei PORTAB.M2H: Makros für Standardeinstellungen von Compileroptionen.
- Konfigurierbar (16/32-Bit, Stack/Registerrückgabe, MiNT-Berücksichtigung)
- o Modul 'proc': neue Funktion "setsid()". Funktion "setpgid()": mehr
- POSIX-Verhalten bei Argumenten <= 0.
- o Anpassung an Hänisch Compiler Version 5.x
- o Modul 'lib': neue Funktionen "setjmp()"/"longjmp()".
- o Neues Modul POSIX: Dieses Modul ist eine Zusammenfassung aller
- POSIX-Funktionen, sodaß der Import aus einem einzigen Modul ausreicht.
- Es wird dabei lediglich reexportiert, bzw. wo dies nicht möglich ist,
- die Prozeduren als Variablen definiert, sodaß kein zusätzlicher
- ``Wasserkopf'' entsteht.
- o Neue Datei POSIX_ID.M2H: Diese Datei kann als Eingabe für den
- Präprozessor benutzt werden, um die Original-POSIX-Bezeichner, die
- für die Anpassung an (alte) M2-Compiler geändert werden mußten,
- wiederherzustellen.
- o Modul 'dir': Funktionen "opendir()", "readdir()", "rewinddir()" und
- "closedir()": Seit MiNT 0.97 ist das von 'Dopendir' gelieferte Handle
- als opak zu behandeln, d.h. es darf nur als Handle wieder an andere
- Verzeichnis-Routinen übergeben, aber nicht dereferenziert werden, da
- der Speicher für das Verzeichnis im geschützten Bereich
- (bei ``Memory Protection'') liegt.
- Dieselbe Änderung in der MiNTLib von pl24 auf pl25 war mir entgangen.
- o Modul 'CTYPE': Funktion "TOCARD()" liefert jetzt bei einem Zeichen, das
- nicht zwischen '0' und '9', bzw 'A'/'a' und 'Z'/'z' liegt, einen Wert
- zurück, der größer als jeder mögliche gültige Wert ist, um Fehler-
- erkennung zu ermöglichen. "TOLOWER()" und "TOUPPER()" vereinfacht.
- "ISODIGIT()" rausgeschmissen.
- o Modul 'types' in 'types' und 'M2TYPES' aufgespalten. Dadurch können
- die Typen aus 'M2TYPES' auch in anderen Umgebungen als M2POSIX genutzt
- werden.
-
- M2POSIX-02: 17-Feb-93
- o Die optionale Exportliste rausgeschmissen
- o Anpassung an TDI.
- o Modul 'forkexec': "waitpid()" statt "wait()" benutzen
- o Modul 'lib': Das Retten der Register bei den Assemblerprozeduren
- wird je nach Compiler mit Makros geregelt.
- o Modul 'file': Funktion "utime()": statt 'actime' wird 'modtime'
- ausgewertet, da bei GEMDOS das Datum bei lesendem Zugriff nicht
- geändert wird.
- o Modul 'dir': "getcwd()" und "readlink()": Parameter mehr POSIX-like.
- o Modul 'DosFile': Funktion "DosToUnix()" liefert jetzt statt <done> die
- Länge des ungekürzten Dateinamens. Bei Bedarf kann dieser mit der
- max. Größe des Strings verglichen werden.
- o Modul 'lib': Funktion "bswap()" exportiert (erleichtert das Testen).
- o Modul 'pSTRING': Funktion "AssignM2ToC()" hat 'size'-Parameter.
- o Modul 'pSTRING': neue Funktion "APPENDCHR()".
- o an einigen Stellen ISO-Änderung: PACKEDSET statt SET bei Mengen, die
- für Bits stehen.
- o Modul 'types': Etwas gestrafft.
- o Datei PORTAB.M2H: geändert & erweitert
-
- M2POSIX-01: 25-Dez-92
- o M2POSIX erstmalig zur Verbreitung freigegeben
-
-