----------------------------------------------------------- DLibs -> XDlibs Žnderungen von Holger Weets, Christian Wempe & Frank Specht Anmerkung: an dieser Datei wird nur gelegentlich, und wenn, dann in aller Eile geaendert, es koennen somit einander widersprechedne Teile enthalten sein ----------------------------------------------------------- - Die Funktion 'crystal' wurde entfernt, da sie bei Verwendung der GEMFAST- Bibliothek nicht notwendig ist. - einige weniger oft verwendete Funktionen aus den XDLibs wurden in eine neue Bibliothek verschoben, so dass die XDLibs jetzt kuerzer sind (besonders fuer Ramdisk-Benutzer interessant) und das Linken schneller ist (der Linker hat weniger Symboltabellen zu untersuchen) Es sind dies u.a.: system, exec, die *fork* Funktionen, die Sortier-Funktionen, entab, detab, ostrap, die Profiling-Sachen, der Online-Debugger etc. Diese neue Bibliothek tr„gt den Namen 'EXTENDED.LIB' Einige Funktionen wurden in Assembler neu implementiert: -------------------------------------------------------- STRSTR STRLEN STRCPY STRNCPY STRNCAT STRUPR STRCMP STRNCMP STRPOS STRRPOS STRRCHR MEMMOVE STRCAT STRLWR ATOI ATOL STRNICMP STRICMP BZERO STRDUP CTLCNV STRADJ MEMCHR MEMCMP MEMICMP MEMSET STRSET STRNSET STRPCPY MEMCCPY LMEMMOVE SUBSTR SUBNSTR STRTOK STRTRIM ITOA LTOA ULTOA STRSPN STRISTR FPRINTF VFPRINTF PRINTF VPRINTF STRRPL STRIRPL QSORT HSORT SWAB LMEMCPY STRREV STRRPBRK STRPBRK STRCSPN Autoren: Christian Wempe, Amiga & Holger Weets, Atari; Anmerkungen: - Fr qsort() wird KEIN Buffer mehr ben”tigt, daž Anlegen der globalen Variablen '_qbuf' entf„llt somit. - lmemcpy & memcpy sind eine Funktion mit 2 Einstiegspunkten - lmemmove & memmove -"- - strstr & stristr -"- - strrpl & strirpl -"- - read & lread -"- - write & lwrite -"- - die Funktion chdir() ist ein Direkt-Aufruf der entsprechenden GEMDOS-Funktion, und kann somit auch nicht mehr als diese. Sie wurde aus Kompatibilit„ts-Grnden nicht verbessert. - Die Funktion calloc() wurde aus der Datei MALLOC.C entfernt und in eine eigene Datei verschoben. Bei Nicht-Verwendung von calloc() wurde diese bisher trotzdem gelinkt, dies ist jetzt nicht mehr der Fall. - bisher befanden sich die Funktionen open() und close() in der selben Datei. Da close() von fclose() aufgerufen wird, und diese Funktion wiederum von _main() (wird aužer bei ACC's immer gelinkt), wurde auch open() immer gelinkt, auch wenn sie nicht verwendet wurde. Von dieser Funktion wiederum wurden access(), lseek() und creat() gelinkt (IMMER!) ... - die in den XDLibs enthaltene Funktion initargs liest die Kommandozeile jetzt nur noch nach dem Standard-Verfahren. Wer den ursprnglichen Funktions-Umfang wnscht (liest auch nach XARG-Verfahren, welches jedoch meines Wissens von niemandem verwendet wird), der verwende stattdessen die bei- liegende Datei INITXARG.O (einfach vor den XDLibs dazulinken) - bei Verwendung von cprintf() reicht jetzt (wie bei printf() auch) ein einfaches '\n' fr ein Newline, da diese Funktion jetzt per cputc (siehe unten) ausgibt. Das l„stige "\r\n" entf„llt somit. Gleiches gilt fr die Funktion cputs(). - fr den neuen Optimizer (V2.00x*) wurden die Funktionen strcmp() strcpy() strcat() strlen() strchr() strrchr() stricmp() strlwr() strupr() strrev() strpos() so umgeschrieben, daž sie schneller (und teilweise l„nger) sind als vorher, und ihre Parameter in Registern anstatt auf dem Stack erhalten. - die Funktion Ftell() befand sich nicht im Archiv, obwohl der Quelltext vorhanden war -- erg„nzt - es sollte sich jetzt kein Modul mehr in den XDLibs befinden, welches eines der Symbole 'gemdos', 'bios' oder 'xbios' referenziert. Falls doch, zus„tzlich die 'extended.lib' linken (nach den XDLIBS) und schon tut's wieder Ebenfalls neu geschrieben wurden: ---------------------------- STRTOL STRTOUL TOUPPER TOLOWER MKDIR RMDIR REMOVE CHDIR CLOCK START_TIMER TIME_SINCE CHMOD WRITE LWRITE READ LREAD GETW GETL PUTW PUTL ACCESS FSIZE STAT von Holger Weets. Die Funktionen gemdos(), bios() und xbios() wurden aus den Startup's ent- fernt und unter dem Namen 'ostrap.o' in die XDlibs aufgenommen. Der Grund hierfr ist, daž der Compiler (HCC) jetzt keine Aufrufe dieser Funktionen mehr erzeugt, sondern direkt die 'trap' - Instruktionen generiert, was sowohl krzer als auch mehr als doppelt so schnell ist. Nach und nach werde ich immer mehr der sonstigen XDLibs - Funktionen neu bersetzen, damit sie a) krzer werden wegen - neuer HCC (traps) - neuer TOP (mehr Optimierung) b) an den neuen Symbol-Tabellen-Standard (V2.0*) angepasst werden (beliebig lange Namen) Neu in die DLibs aufgenommen wurden die Funktionen: --------------------------------------------------- void (*_userexit)() Dieser Zeiger auf eine Funktion kann vom Programm jederzeit mit einem Wert belegt werden. Die Funktion exit() prft diesen Wert und falls er nicht 0 ist, wird die Funktion aufgerufen, auf die <_userexit> zeigt. Praktisch, um z.B. Dateien noch zu schliessen, tempor„re Dateien zu l”schen oder Vektoren wieder gerade zu biegen. exit() wird von main() brigens automatisch aufgerufen. void ChkAbort() Testet, ob Ctrl-C gedrckt wurde und ruft ggfls. exit() auf. Aužerdem wird die Zeichenkette "^C" auf den Bildschirm ausgegeben. int cputc(char c) Das Zeichen wird auf die Console ausgegeben (per Bconout(2, c)). Falls das Zeichen '\n' ist, so wird aužerdem ein '\r' ausgegeben. Diese Funktion wird von cprintf() und cputs() verwendet. char *detab(char *string, int tabsize) Alle Tabs in string werden durch Spaces ersetzt, wobei als Tabulator- weite tabsize angenommen wird. char *entab(char *string, int tabsize) Alle Spaces in string werden durch Tabs ersetzt, wobei als Tabulator- weite tabsize angenommen wird. void memswap(char *p1, char *p2, int len) Die Speicher-Bereiche ab p1/p2 werden vertauscht, und zwar len Bytes. int strwrap(char *dest, char *src, int len) Der String src wird auf eine max. L„nge von len gebracht, wobei bei Blanks getrennt wird. Dieser Bereich wird nach dest kopiert und aus src gel”scht. Zurckgegeben wird die neue L„nge von src. int strcstrp(char *string, char ch) Alle aufeinanderfolgenden Vorkommen von ch in string werden entfernt. Beispiel: strcstrp("Hallo Welt", ' ') wird zu "Hallo Welt". Zurckgegeben wird die neue L„nge von string. char *strdcat(char *str1, char *str2) Alloziiert per malloc() soviel Speicher, wie fr die Aufnahme beider Strings notwendig ist, und schreibt sie hintereinander in diesen. char *strvcat(anz, dest, src1, src2, ..., srcN) Die Strings src1 - scrN werden nacheinander in dest kopiert. Beispiel: strvcat(5, p, "Dies ", "ist ", "ein ", "Test"); in

stehe bereits: "Ausgabe: "; ergibt "Ausgabe: Dies ist ein Test" Der Parameter anz gibt dabei die Anzahl ALLER noch folgenden Parameter an. char *strvcpy(anz, dest, scr1, scr2, ..., scrN) Die Strings src1 - scrN werden nacheinander in dest kopiert. Beispiel: strvcat(5, p, "Dies ", "ist ", "ein ", "Test"); in

stehe bereits: "Ausgabe: "; ergibt "Dies ist ein Test" (OHNE "Ausgabe: ", weil berschrieben wird!!!) Der Parameter anz gibt dabei die Anzahl ALLER noch folgenden Parameter an. int strblk(char *str, int len) Formatiert auf Blocksatz mit L„nge . Zurckgeliefert wird ein Wert <>0, falls alles geklappt hat char *basename(char *path) Liefert einen Zeiger auf das dem letzten Backslash folgende Zeichen. Falls also einen Dateinamen enth„lt, so liefert basename() einen Zeiger auf diesen. Falls berhaupt keinen Backslash enth„lt, so liefert die Funktion einen Zeiger auf das erste Zeichen von , also wieder einen Zeiger auf den Dateinamen. Falls mit einem Backslash endet, wird ein Zeiger auf des Stringende zurckgegeben. char *suffix(char *path) Liefert einen Zeiger auf die Endung (Extension, Suffix) des uebergebenen Argumentes (Dateiname mit/ohne Pfad). Der Zeiger steht AUF dem '.' Falls die Datei keine Endung enth„lt, steht der Zeiger auf dem String- Ende, also dem 0-Zeichen. void cwd(char *path) Liefert in den aktuellen Zugriffspfad zurck. Das Ergebnis ist das gleiche, wie von getcwd(), blož - ist cwd() krzer - liefert cwd() den Pfad in Grožbuchstaben, und nicht, wie getcwd(), in Kleinbuchstaben. int index(char *str, char c) Wie strpos, aus Kompatibili„ts-Grnden. int rindex(xhr *str, char c) Wie strrpos, aus Kompatibili„ts-Grnden. prof.o; Funktionen fr das im Compiler eingebaute Profiling; enth„lt: void _prolog(char *name) wird am Anfang jeder Funktion aufgerufen, ist der Name der Funktion void _epilog(char *name) wird am Ende jeder Funktion aufgerufen, ist der Name der Funktion void _savepro() wird direkt vor Programm-Ende (von __exit()) aufgerufen und speichert die Profiling-Tabelle in einer Datei Namens 'PROF.OUT'. Funktioniert nur dann automatisch, wenn der zugeh”rige Startup-Code verwendet wird (prof_s.o). Als Zugabe gibt's dann noch die Datei 'initarg.o'. Diese Datei ist fr all diejenigen gedacht, die Programme mit Parameter-šbergabe schreiben (also argv[] und argc in main() benutzen) und trotzdem auf die Behandlung des XARG-Standards verzichten k”nnen (benutzt den berhaupt jemand ???) Als Belohnung fr den Verzicht gibt's dann auch Programme, die ber 500 Bytes krzer sind, als vorher(!) Einfach wie gewohnt mit STD_S.O als Startup linken und zus„tzlich VOR den DLibs die Datei INITARG.O linken (damit nicht die Version aus den DLibs verwendet wird). (nur Atari) Amiga-Version von Christian Wempe ST-Version von Holger Weets