From: RSTACKHOUSE@JAGUAR.ESS.HARRIS.COM ( 57577 Stackhouse ke)
Subject: SAS 6.2 update on ftp.luth.se /biz/patches
Date: Sun, 24 Jan 1993 21:47:55 GMT
X-News-Reader: VMS NEWS 1.24
Organization: Harris Information Systems Division

SAS 6.1 and 6.2 fixes: 
=============================
Library and Header Changes
=============================

Fixed in 6.2

 #pragmas were incorrect for CachePreDMA() and CachePostDMA().
 
 errno was not set correctly if open() failed.

 datecmp() function did not return correct values.
 
 libinit.o did not properly set up global data for the __aligned
 keyword.
 
 The format specifier %06.2f did not properly pad with zeros.

 The base of the system library keymap.library, KeymapBase, was not being 
 auto-initialized properly.
 
 fclose(stderr) caused the invoking shell to stay locked.

 cback.a did not work under 1.3.

 fputc() did not return the proper value for negative numbers.
 
 __aligned did not work for global variables in a shared library
 because of a problem in libinit.c

Fixed in 6.1

 The tmpnam() function used the first three characters of the command
 as invoked in constructing the name of the temporary file.  This did not
 work if you invoked a command via an explicit path that contains a ':' or 
 '/' in the first three characters.  This was the cause of several strange 
 problems in the SC and SLINK commands as well.

 In __main(), the return value for the Open() which opens the stdio window
 was never checked.  Also, __main() now checks the __stdiowin[] array and
 does not add the program name if __stdiowin[] does not end in a "/".

 Some system tagcall routines did not have tagcall pragmas, most notably
 EasyRequest() and BuildEasyRequest().

 <dos.h> did not include the definitions for REG_FP0 - REG_FP7.  These
 definitions are used by getreg() and putreg().

 scanf() routine failed to scan a floating point number with a leading '+'
 character.

 fread() did not set EOF flag properly.  (It did return the correct return
 code, however.)

 forkl() did not correctly open "*" for stdin and stdout.

 If the UTILLIB option was used and an auto-open library failed to open,
 the __autoopenfail() function crashed the machine when invoked.

 Autoopen libraries were opened twice and closed once because the autoopen
 functions were compiled with PARMS=BOTH.

 <sys/dir.h> was not protected from multiple #includes.

 m68881.h did not include definitions for fgetexp() and flog2().

 <stat.h> did not contain definitions for the S_xxx bits.  (They were
 previously defined in <fcntl.h>; now they are in both files.)

 The bits returned by stat() in the st_mode field were incorrect.
 The 4 bits corresponding to the "rwed" attributes were OPPOSITE what
 they should be.  All other bits were correct.

 <proto/all.h> did not include all <proto/xxx.h> files, notably
 <proto/rexxsyslib.h>.

 __builtin_memcmp() generated incorrect code when a variable
 containing zero for the length to be compared was passed to it.

 In <proto/layers.h>, LayersBase was declared struct LayersBase *; it is
 now declared struct Library *.

 Closing a file descriptor twice caused a crash.  While this is arguably
 an illegal operation, most systems accept it silently.

=====================
CPR Debugger Changes
=====================

Fixed in 6.2
 
 CPR crashed when opened on a WorkBench screen in Productivity mode.
 
 CPR got enforcer hits when using the MODULE command or window.
 
 CPR crashed on exit under 1.3.
 
 Typedefs of arrays were not handled properly.


Fixed in 6.1

 CPR didn't pass argv[0] correctly when invoked from WorkBench.

 CPR didn't get the address right for the first data item in the FAR
 or CHIP sections.

 The -device, -unit and -speed parameters were not implemented on
 cross CPR.

 Some programs required abnormally long times to load under CPR.  This load
 time has been reduced.

 Watch and register windows are no longer covered up by the source window
 if they are opened via command-line options.

 Hitting the ESC key in the CPR WMSG window caused the window to go away.
 Additional WMSG commands after this crashed CPR.

 Highlighting was messed up if a window was resized while something was
 highlighted.

 The ECHO command didn't work reliably from an externally-
 invoked AREXX script.

 The CPR screen stayed open if a visitor window was present, but CPR
 exited anyway.

 The Calls window sometimes trashed its own bottom border.

 CPR was doing incorrect pointer arithmetic for multidimensional
 arrays.

==============================
Parsing and Diagnostic Changes
==============================

Fixed in 6.2

 There was a problem if a C source file was used to create a GST,
 and that file defined external data.  IT IS NOW NOT POSSIBLE TO
 DEFINE EXTERNAL DATA if the MAKEGST option is on.  We recommend
 compiling the file twice, once with MAKEGST and NOOBJNAME, the
 second time with the normal GST option, or that you use a 
 standalone .c file not part of your project as your GST 
 generator file.

 An extra quoted string at the end of a preprocessor statement (illegal
 according to the ANSI standard) was incorrectly concatenated to the 
 next quoted string in the source.

 The OBJNAME option did not accept the null string "", which should
 indicate the current directory.  It now does.

 String constants that appeared on a preprocessor statement in an
 illegal position sometimes were concatenated before the next string
 constant to appear in legal code.

 The compiler was producing an invalid error if the GENPROTO option
 was on and an __asm function was declared that took no parameters,
 and the function so declared was used somewhere in the same file
 without otherwise being declared.

 Error 72, "conflict with previous declaration", is now a warning if
 the only conflict is in a "const" or "volatile" specification on
 the item declared or parameters to a function declared.

 The compiler silently accepted the following illegal
 constructs:

    char x[] = {"ab", "cd"};
    char y[] = {'a', "bc"};

 The compiler did not put the "const" or "volatile" keywords on
 prototypes generated with the GENPROTO option, or on types printed
 in error and warning messages.

 If the NOMULTIPLEINCLUDES option was on, but you included the same
 file with differences only in the case of the filename, the file was
 included twice anyway.

Fixed in 6.1

 The __chip keyword produced an Error 82 for arrays declared that were
 larger than 64k-1 bytes.  This restriction has been removed.

 No diagnostic was produced for assigning a regargs function to a stdargs
 function pointer, or vice-versa.  However, the warning "stdargs used for
 indirect function call" was produced inappropriately for calls through
 function pointers declared __stdargs.  The inappropriate warning has been
 removed;  the assignment now generates Warning 225.

 Error 15 was generated inappropriately for a call via a function
 pointer defined via a typedef.

 Invoking a preprocessor macro with no parameters that is followed
 immediately by a parameter list containing the preprocessor macro name once
 again followed by a parameter list failed to expand the second invocation of
 the macro.  (This is an extremely obscure case, so don't worry if you didn't
 understand the explanation.)

 If an undefined member of a structure was accessed, that structure was no
 longer considered equivalent to other structures with identical member
 lists.  This generated warning cascades.

 National characters above 0x80 were not permitted in variable names.

 When using the GenProto option for a file with more than one period in the
 name, (ex. a.b.c), the generated proto file was placed into a .h file with
 only the first part if the original name (ex. a.h).

 The ERROR=ALL option to the SC command turned on all messages, including
 those normally suppressed.  It should have just promoted the warnings that
 were already enabled to errors.

 The -ca option on the SC5 command incorrectly enabled Warning 148.

 Error 67 was generated if the __inline keyword was placed on the
 definition of a function returning a pointer to a structure.

 C++-style comments were not recognized if the ANSI option is on.  While
 this is arguably correct, since C++ comments are non-ANSI, many users 
 requested that they be made to work.

 If the GST has only <proto/intuition.h> in it, then you #include
 <intuition/intuitionbase.h> in the .c file, IntuitionBase was considered
 to be an undefined structure tag.

 Generating a GST when the file being compiled erroneously tried to access a
 structure that had not been defined resulted in a crash.

 Generating a GST with static data defined in a header file now generates an
 error message.  This is invalid; data cannot be defined in a header file, 
 and there is no way to make a static data item into a simple declaration, as
 is done with external data.

====================================
Code Generation/Optimization Changes
====================================

Fixed in 6.2

 MATH=68881 was broken when dealing with constants.
 
 With CODE=FAR and CPU=68020, foward references to functions were
 not right.
 
 Bitfields of 32 bits with CPU=68020 did not work.
 
 Referencing formal register parameters when there were more than 
 32k of autos was broken.

 SC2 could generate bad code for __asm functions with many parameters 

Fixed in 6.1

 The return value of a function was lost when returning from a call in
 which the stack extension code allocated additional stack.

 Auto variables sometimes got trashed when using longjmp() to jump
 up the stack.

 When SHORTINT is selected, all numbers between 32k and 64k were translated
 improperly as negative numbers between -1 and -32k.

 Initialization of automatic arrays and structures didn't work if the
 initializers did not contain as many elements as the array or struct
 and the STRMERGE option was used.

 The DISASM option caused a crash if you specified a directory name
 as the output filename.

 The assembler code produced by the DISASM option included MULSL.L and
 DIVSL.L instructions instead of MULS.L and DIVS.L.

 The DISASM option produced bad assembly code if you had calls to
 __builtin_emit() in your code.

 An incorrect function pointer was generated for a forward reference
 to a static function if the ABSFUNCPOINTER option was specified.

 With the global optimizer active, calls to tagcall functions made
 via #pragma tagcall sometimes did not clean up the stack properly.

 Functions declared __inline sometimes did not generate actual callable
 instances of themselves when they should have.  This occurred if you
 did not run the global optimizer; if the function called itself
 recursively; or if the function was called from outside the current
 module.  The functions would generate an unresolved symbol at link
 time.

 FPrintf and other tagcall functions that take an OPTIONAL tagcall list
 generated an error message from phase 2.  #pragma tagcall functions
 now silently accept empty tagcall lists.

 Implicit references to substructures generated incorrect offsets if the
 substructure was not the first item inside the main structure.

 Adjacent bitfields declared explicitly "short" or "long" were not merged
 properly.  This caused the structures containing them to be larger than
 they needed to be.  Bitfields declared "int" or "char" were not affected.

 Some variables were listed with the wrong type in the compiler-generated
 cross-reference.  This occurred after a typedef definition.

=================
SE Editor Changes
=================
 
Fixed in 6.2

 Busy pointer did not change back to ready after a compile until
 it was moved.

 SE hung if the zoom gadget was hit with a large font.
 
 SE did not save backup file and protection bit if rename backup
 option was selected.
 
 Going from an interlaced screen to a non-interlaced screen would fail
 if the interlaced window was too small.
 
 
Fixed in 6.1 

 SE was not pure (as reported by WShell).

 SE returned immediately when asked to compile the file in the editor
 buffer (F4 key) if the flag was enabled under AmigaDOS 2.0 that allows
 the "*" character to be a wild card (RNF_WILDSTAR).

 Turning on the "Use TAB Character" option and the Autoindent option
 resulted in garbage characters being added to the file when you hit
 RETURN after entering an open curly brace.

 SE did not turn the mouse pointer back on during time-consuming operations
 (like SEARCH/REPLACE).

 SE sometimes opened a window smaller than its menus required when switching
 from interlaced to non-interlaced mode.

 It was impossible to configure the screen colors and save them.  You
 could cycle the colors while in SE, but when you exited, the colors weren't
 saved.

 A bad version of the editor macro "findsym.se" was provided.

 SE set no pointer during compilation.  It now sets a busy pointer.

 SE did not correctly add the backup file extension when saving backup files.

 SE did not accept national characters that were entered through a REXX script.

=============================
SCMSG Message Browser Changes
=============================

Fixed in 6.2

 The NEXT and PREV REXX commands didn't cycle back to the top or bottom
 of the message list as documented.

 The PREV REXX command returned an incorrect return code regardless
 of the success status.

Fixed in 6.1

 SCMSG menu colors were funny-looking on an 8-color workbench screen.

 SCMSG didn't protect itself against the editor exiting while it was
 processing a message to the editor.

 SCMSG did not open on the default public screen.  It now does so; it
 also accepts a SCREEN <name> command-line parameter and an
 "opts screen <name>" AREXX command (see below).

 SCMSG redrew its message lines even if they had not changed when receiving
 new messages. This caused unnecessary flicker.

 SCMSG didn't set the AUTOEDIT option even if the options file said to.
 It also reset the GOTOFILE and GOTOLINE options to the SE defaults even
 if the user had erased those values.

 SCMSG now accepts the following escape sequences in the REXX commands that
 it sends to the programmed editor.  These are in addition to the %f, %l
 and so forth that are documented in the manual:

    %# - message number
    %m - message text
    %e - alternate filename
    %k - alternate line number

 Note also that the %c escape sequence gives the message Class (ERROR/
 WARNING) rather than the column number, as documented in the manual.  This
 was an error in the manaul.

 SCMSG now accepts the following new or modified REXX commands.  All old
 commands still work.

    "build [options]"

       The "build" REXX command now passes any options specified on to the
       SMAKE utility.

    "hide" [option]
       The "hide" REXX command takes "rexxonly", "norexxonly", "autoedit", 
       and "noautoedit" as options.  The options control when the window will
       reappear.  The "wait" option listed in the manual is the default, so
       there is no need to specify it.

    "number"
       synonym for "errnum"

    "newbld <compunit>"
       tells SCMSG to clear all messages for the specified compilation unit.
       Sent by the compiler when a new compile is begun to delete all old
       messages.  It also forces SCMSG to invoke the editor on the next new
       message if the AUTOEDIT option is on.

    "newmsg "<compunit>" "<file>" <line> 0 "" 0 <class> <errnum> <text>"
       adds a message to SCMSG's list.  <compunit> is the compilation unit
       the message is associated with (the .c filename), <file> and <line>
       indicate the filename and line number of the message, <class> is
       one of "Error", "Warning" or "Info", <errnum> is a positive error
       number, and <text> is the message text.  The 0 "" 0 in the middle
       must appear exactly as written.  If the message text contains the
       words 'See line <number> file "name"', the <number> is taken to be
       the alternate line number and the <name> is taken to be the
       alternate file name.

    "opts [option]"
       where [option] is one of the following:

          load <filename>  - Load options from the specified file
          save <filename>  - Save options to the specified file
          portname <xxx>   - Set the name of the editor's AREXX port to
                             the specified value
          screen <name>    - Close the SCMSG window and reopen it on the
                             specified public screen.

  The default value for the GOTOLINE option, intended for use with the SE 
  editor, is now

     LL "%l\n" DM %m

  instead of just

     LL "%l\n"

  This displays the message text in the message line of SE after taking you 
  to the line of the message.

=====================
Other Utility Changes
=====================

Fixed in 6.2

 ASM's macro handling with respect to local labels was broken.
 
 REG was not implemented in ASM.
 
 ASM did not detect zero-length short branches.
 
Fixed in 6.1

 SMAKE didn't read the tooltypes array as documented; it also reported that
 A: is a "bad drive specifier" when it was used in a target.

 Closing the SMAKE window after SLINK started caused a system crash.

 SMAKE did not use the SYS_UserShell tag when calling the System() routine
 under AmigaDOS 2.0.  It now does.

 If multiple targets were passed to SMAKE on the command line and the first 
 was up to date, the subsequent targets were not built.

 ASM didn't deal with packed decimal mode constants correctly.

 OML gave a "phase error" if you attempted to place object files in
 the library that contained chip data.

 LCTOSC and DUMPBOJ did not set the return code correctly.

 LCTOSC incorrectly translated '-Ln' to 'LINK DEBUGSTRIP' instead of 'LINK
 STRIPDEBUG'

 HyperGST could not locate header files obtained from the local project
 if invoked from WorkBench.

 SLINK did not always set the execute bit on the generated executables.

 LPROF/LSTAT were giving strange results when used on programs with
 multiple code hunks.  This is a very long-standing bug dating back to
 version 5.0.

 Scsetup did not correctly process the '?' parameter when invoked from
 the Shell.  It printed its command template, then started working on
 the current directory as if no parameters were entered.

 SCOPTS only saved to ENV: when asked to "Save Default".  It now saves to
 ENVARC: as well.

===============================
Documentation/Help File Changes
===============================

Fixed in 6.1

 The sc.guide hypertext file incorrectly listed 255 as the default value
 for the IDENTIFIERLENGTH option, instead of the correct value of 31.
 255 is the maximum value.

 Some new "Common Problems" were added to the Common Problems document.
 
 The scmsg.guide hypertext file was modified to add Error 145, which is
 new to this patch release, and to update or add descriptions for Warning 7,
 Error 82, Warning 184, Warning 198, and Error 200.  In addition, the Global 
 Optimizer warnings which were left out of the documentation were added to
 the Compiler Errors and Warnings section of scmsg.guide.  The warnings 
 added are warnings 301, 302, 303, 304, 305 and Note 306.

 Additional information was added to the ANSI compiler option description
 in sc.guide.  The ANSI option has effects other than simply turning on 
 warning messages.  These effects are now described.

 Three data item names and one function were added to sc_lib.guide.  All 
 four additions are listed separately in the main Library Functions help 
 screen under the button "Newly Documented Functions and Data Names".

 Additional corrections to the documentation can be found in the "Changes
 to the Documentation" help screen (sc_changes.guide) under the button
 "Version 6.1 (Error Correction Patch) Changes".

 The "compile.ced" macro intended for use with CygnusEd had a bug in its 
 use of the "jumpto" command.  "jumpto" expects both a line number and a 
 column number, and only the line number was provided.  CygnusEd users may 
 want to copy the new version of the macro into their REXX:CED drawer.

 The TurboText macros referenced explicit directory paths, but the 
 directory was renamed in the final version; therefore, they did not work 
 correctly as installed.  The TurboText directory has been renamed.  
 Please reinstall these macros if you had problems with them in 6.0.

======================
List of Modified Files
======================

The following files were modified during the 6.2 patch installation
process.  If they have version numbers, the version should be 6.2.

Drawer       Files

SC:C         se, scopts, cpr, cprx, cprk, hypergst, asm, sc5, lctosc,
             scmsg

SC:LIBS      sc1.library, sc2.library, schi.library, scpeep.library,
             scdebug.library, sclist.library

SC:LIB       all .lib files and cback.o.

SC:INCLUDE   stdio.h pragmas/exec_pragmas.h pragmas/exec_sysbase.h

SC:HELP      sc_6.2.guide

SC:SOURCE    cback.a, libinit.c


The following files were modified during the 6.2 patch installation
process, but are the same as they were in version 6.1.  If they have
version numbers, the version should be 6.1.

Drawer       Files

SC:          read.me

SC:C         smake, slink, scompact, omd, dumpobj, oml, lstat, lprof, tb

SC:ENV       se.dat

SC:LIBS      sekeymap.library

SC:LIB       all startup modules other than cback.o.

SC:INCLUDE   fcntl.h, stat.h, dos.h, m68881.h, mffp.h, mieeedoub.h,
             stdarg.h, sys/dir.h, proto/all.h, proto/layers.h, 
             pragmas/intuition_pragmas.h

SC:REXX      findsym.se, showcli.cpr, showprocess.cpr

SC:HELP      sc_prob.guide, sc_lib.guide, sc_6.1.guide, scmsg.guide,
             sc_util.guide, sc.guide, cpr.guide

SC:SOURCE    autoopenfail.c, _main.c, _oserr.c, intuitlib.c, _cxferr.c,
             c.a

SC:EXTRAS    TTX/instructions, CED/rexx/ced/Compile.ced


Newsgroups: comp.sys.amiga.programmer