[comp.sys.amiga] Announcing Manx/Aztec 5.0d

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)