dlarson@blake.u.washington.edu (Dale Larson) (09/26/90)
I am associated with Manx only as a customer and a beta tester for 5.0. I don't know how much the upgrade is, though I think that it is $15 if you already have 5.0. Please do not send questions to me. Please call Manx at 1-800-221-0440 or email Mike Spille at the address below. Since Mike is a programmer, please don't bother him with price/ordering info questions. BTW, if you want info from Manx posted to the net regularly, you might mention when you order (or in mail to Mike) where you got your information from. --------- Date: 25 Sep 90 17:16:14 EDT From: Mike Spille/Manx <71545.1466@CompuServe.COM> To: <dlarson@blake.u.washington.edu> Following is the read.me file for 5.0d (which is available as of this week). You might want to post it on the net. Aztec C for the Amiga Version 5.0d Release Notes September 20, 1990 Version 5.0d is primarily a minor update of the Aztec C system which fixes major problems in v5.0b. We have kept new-features in this release to a minimum in order to insure the stability of the release. See the 50bread.me file for a list of changes from version 5.0a to version 5.0b. ------------------------------- New Features Since 5.0b ------------------------------- Compiler -------- - C++ style comments are now supported (// to end of line). - The compiler by default now only uses register A6 for amicall/syscall #pragmas. This usually results in better code generation, since A6 doesn't need to be continually pushed and popped when #pragma calls are done. In this default mode the compiler never saves the A6 register. - A new option -r6 has been added to the compiler, which allows the compiler to use A6 as register variables. A6 is also always guaranteed to be preserved. This option should be used if you are generating code which needs A6 to be preserved. Also, if your code makes few amicall pragma calls this option may improve code generation. - The -qv switch now dynamically reports where it is in the compilation process. While processing the main source file it reports the current line #, and while processing header files it reports the header file name. - The -t option has been added to specify the maximum number of base names defined in amicall/syscall #pragmas. The syntax of this option is: -t num_entries where num_entries is the maximum number of base names entries allowed. The default value is 50. Assembler --------- - The assembler optimizes out 0-register movem operations when optmization is turned on. - The -w switch has been added to the assembler, which turns on optimization of 1 register movem's into move instructions. This option should never be used on compiler-generated assembly code. SDB ---- - SDB no longer requires the use of the -s option for programs with source in multiple directories. It will instead attempt to use the path information used to compile the source code. i.e. if the source was compiled as /front/foobar.c, then SDB will look for the file 'foobar.c' in the /front directory. This behavior may be overridden by defining explicit search directories using the -s option. Libraries --------- - Four new functions have been added to the library: stricmp(), strnicmp(), strlwr(), and strupr(). int stricmp(const char *_s1, const char *_s2); This function is identical to the strcmp() function, with the exception that the comparison between the two strings is case insensitive (i.e., "foobar" and "FooBar" are considered equivalent to stricmp()). int strnicmp(const char *_s1, const char *_s2, size_t _n); This function is identical to the strncmp() function, with the exception that the comparison between the two strings is case insensitive (i.e., "foobar" and "FooBar" are considered equivalent to strnicmp()). char *strlwr (char *str); This function converts the string pointed to by 'str' into all lower case. All non alphabetic characters within the string are left as they are. A pointer to the the converted string is returned by strlwr. Note that the original string pointed to ('str') is destroyed. char *strupr (char *str); This function converts the string pointed to by 'str' into all upper case. All non alphabetic characters within the string are not affected. A pointer to the the converted string is returned by strupr. Note that the original string pointed to ('str') is destroyed. HEADERS ------- - NULL is now defined to be 0L instead of (void *)0, so that comparisons with BPTRs and other integer-typed objects don't give a ptr/int error. - The value of CLOCKS_PER_SEC has been changed to 50, to reflect the values returned by the clock() function. - The macros EXIT_FAILURE and EXIT_SUCCESS are now defined in stdlib.h. - Internal Manx functions which have leading underscores (such as _flsbuf) are now always prototyped. - Header files for AmigaDOS 2.0 are now included with the 5.0d update disks. The 2.0 header files are not available via Bix or the Aztec BBS, but only through our update department. ------------------------- Fixed from 5.0b ------------------------- Following is a list of known problems with version 5.0a, which are fixed in version 5.0b. Compiler -------- - Right shifts on unsigned char and unsigned short variables were done incorrectly. - Division on unsigned short and unsigned char variables, with the result being placed into an unsigned int or short, were done incorrectly. - If a function with a short argument was defined using K&R style and had a function prototype in scope, the compiler generated bad code. For example: void MSFunc (short num); main () { MSFunc (5); } void MSFunc (num) short num; { printf ("%d\n", num); } In version 5.0d, the function prototype must be changed to read: void MSFunc (int num); which is consistent with how chars and floats are handled in prototyping K&R functions. Alternatively, the function can be declared using ANSI style, and the prototype may be left as is (i.e., as a short). - Bad code was generated if the -c2 (68020) switch was used and a % operation was done with a register variable. - The compiler generated bad code if more than 20 base names for amicall and syscall #pragmas were found. The default maximum in 5.0d is 50 base names, and the compiler will give an error if the maximum is exceeded (see also the -t option added in 5.0d). - The compiler put out bad type information for pointers, which caused array indexing in SDB to be incorrect. - The compiler generated bad code if functions which had amicall #pragmas attached to them were nested. For example: LoadRGB4 (ViewPortAddress(window),colors,number); would generate bad code. - The compiler generated bad code in the small code/small data model for function defintions which had a register-argument #pragma that specified A4 as an argument register. - #pragmas involving register arguments (amicall, regcall, etc.) would generate bad assembly code if an argument was of type double. The compiler now issues error #168 if it encounters a double argument in a registerized function call. - The -ss option is generated bad code. The 5.0d compiler accepts it as an option, but turns it off internally. - The compiler would reference low memory locations. - Bad code was generated in some instances when accessing variables with volatile or const modifiers. - Bad code was generated for the following type of C source: struct table { short Index; short Array[2]; } table; register short i; short *ip; register struct table *sp; i = *(ip = &sp->Array[sp->Index]); SDB --- - The SDBOPT variable is now correctly recognized by SDB. - SDB is now more reliable upon startup and tracing across Amiga DOS resident library calls. - SDB no longer writes into its window borders, which was noticeable under 2.0 of AmigaDOS. LIBRARIES --------- - The scanf() family of functions would switch to base 8 (octal) if the number being scanned had a leading 0 and the %x format specifier was used. 5.0d always uses base 16 when a %x specifier is used, as per the ANSI standard. - The clock() function always returned -1. - The strtok() function would in certain circumstances reference location 0 in memory. - The ioctl() function would reference low memory. MISC ---- - The linker ln would access low memory between pass 1 and pass 2. - The assembler would access low memory when performing optimization. - Z now looks for the ZOPT environment variable in ENV:MANX instead of the proprietary manx environment. - Z would reference low memory locations upon startup. - The mapfd utility can now handle lines in .fd files up to 2K in length. Previous versions only allowed lines 128 bytes long. -Mike -- -Dale Larson (dlarson@blake.u.washington.edu)