\begindata{text,538925048}
\textdsversion{12}
\template{help}
\define{global
}
\define{index
menu:[Title~3,Index~91]
attr:[FontFace Italic Int Set]}
\define{indexi
menu:[Title~3,InvisibleIndex~92]
attr:[Script PreviousScriptMovement Point -2]
attr:[FontFace Italic Int Set]}
\heading{\chapter{Changes to class}}


This is a list of the known changes made to the class system.  It is possible 
that the behavior of other parts of the class system were also altered.  If 
you ever "looked through the class system code" to find the way to do 
something, you might wish to go over your code with a careful eye towards 
anything that touches class.


Every attempt has been made to allow code that would require more than simple 
substitution (such as with sed) to continue to operate with this version of 
the class system.  Unfortunately, some code will have to be changed to conform 
to the currently defined interfaces.  Hopefully any inconvenience is more than 
offset by the increase in flexibility and function provided by this release of 
the class system.



\subheading{General:}


ALL EXISTING OBJECTS MUST BE RECREATED FROM THE POINT OF RUNNING THE CLASS 
PREPROCESSOR IN ORDER TO WORK WITH THE NEW VERSION OF THE CLASS SYSTEM.  THE 
LAYOUT OF INTERNAL DATA STRUCTURES HAS CHANGED AND OLD OBJECT CODE WILL NOT 
RUN CORRECTLY.


The class runtime system has never been documented at all.  The ATK examples 
and the examples in Nathaniel Borenstein's book only used three routines from 
the class runtime system.  These are class_GetTypeName(), 
class_IsTypeByName(), and class_NewObject().  These functions are being 
preserved for now in order to accommodate existing code.



\subheading{class.h:}



\subheading{Change:}


You should no longer include "class.h".  This file is included automatically 
anytime any *.ih file is included.  Everything is set up in such a manner that 
the contents will only be included once.  If you want to get the smallest .ih 
file include "class.ih".


\subheading{Fix:}


Just remove the references to "class.h" and if no other objects are referenced 
in the module, include "class.ih".  


\subheading{Effect:}


This could require one to look at each file.  A simple, and perfectly safe, 
solution is to replace all occurances of "class.h" with "class.ih".



\subheading{Change:}


All the functions that where provided by "class.h" are now provided by 
"class.ih".  Any changes are listed below.


\subheading{Fix:}


See below:


\subheading{Effect:}


See below.




\subheading{class runtime:}


The class runtime system has never been documented.  With this release, 
techniques for manipulating the class runtime system are specified.  In 
general, all routines that start with "class_" are being replaced by calls to 
a new class of object called "class".  Most of the old, undocumented routines 
will still function to aid in the transition to the specified interfaces. 
 STILL, IT IS HIGHLY RECOMMENDED THAT YOU MOVE TO THE SUPPORTED INTERFACES AS 
QUICKLY AS POSSIBLE.



\subheading{Change:}


The structures used to describe classes and instances of classes have changed. 
 Some of these changes are not compatible with the previous data structures.


\subheading{Fix:}


Don't use this information anymore.


\subheading{Effect:}


This change should not affect any existing code.  If it does, the code may 
have to be reworked by hand.



\subheading{Change:}


The data structures ClassList, ClassListEntries & MaxClassListEntries are no 
longer externally visible.


\subheading{Fix:}


Don't use this information anymore.


\subheading{Effect:}


This change should not affect any existing code.  If it does, the code may 
have to be reworked by hand.



\subheading{Change:}


EXTERNALLY VISIBLE SYMBOLS OF THE DYNAMIC LOADER ARE HEREBY DECLARED NOT 
DOCUMENTED AND LIKELY TO CHANGE WITHOUT NOTICE.  Don't use these routines and 
data structures.


\subheading{Fix:}


Use the class_SetDebugLevel() and class_GetDebugLevel() to turn on tracing for 
debugging.  If any other undocumented functions are used the code may have to 
be restructured to use the facilities in the class "class".


\subheading{Effect:}


This change should not affect any existing code.  If it does, the code may 
have to be reworked by hand.



\subheading{Change:}


The return values of class procedures are now properly defined in .eh files.


\subheading{Fix:}


None required.


\subheading{Effect:}


This a correction of a deficiency in the system.



\subheading{Change:}


Many bugs in the runtime have been fixed so you should have fewer system 
crashes.


\subheading{Fix:}


None required.


\subheading{Effect:}


This a correction of a deficiency in the system.




\subheading{class preprocessor:}


The class preprocessor has been reworked internally in a number of ways.  Most 
of these modifications are additions to the syntax of the class definition 
files, the generation of error messages and warnings, the checking of various 
aspects of the declared class, and re-implementing most of the program to 
obtain efficiency and make it more maintainable.



\subheading{Change:}


The grammar has been extended to allow the specification of an access key to 
be used to gain access to the objects that make a up class when these objects 
are stored in a file system or some other data base.


\subheading{Fix:}


A script should be available from the ITC to help fix the class definition 
files and code that includes these files.


\subheading{Effect:}


This should not effect the performance or semantics of the system.



\subheading{Change:}


The name of class definition files has changed.  These files now end with .ch 
rather than .H.


\subheading{Fix:}


Simple substitution in source, source management systems, and system 
construction definition files.


\subheading{Effect:}


This should not effect the performance or semantics of the system.



\bold{Change:}


class_Destroy() is now an instance method rather than a class procedure.


\bold{Fix:}


No code should have to be altered.  In some cases, old code had to do 
incorrect things such as call view_Destroy() with random objects in order to 
destroy these instances.  This code can now be changed to call 
class_Destroy().


\bold{Effect:}


This should not be a problem for existing code.  This should be a fix for the 
many places that old code had to do incorrect things such as call view_Destroy 
with some random object.



\subheading{Change:}


All classes are forced to be an ancestor of the class "class".  This is done 
by forcing any class that has not declared a  parent to have the class "class" 
as its parent.  A warning message is emitted if this happens.


\subheading{Fix:}


This shouldn't require any changes to existing code except to fix possible 
name clashes.  It will be desirable to fix existing code to take advantage of 
the documented ways for performing operations on the class system and classes 
and objects.


\subheading{Effect:}


This could affect any classes that define methods that are present in class 
"class".  Looking for these methods should not be hard and once they are 
identified, they can be changed with simple substitution.



\subheading{Change:}


Packages will now be subclasses of class "class".  Packages still may not have 
subclasses.


\subheading{Fix:}


This shouldn't require any changes to existing code.  It will be desirable to 
fix existing code to take advantage of the documented ways for performing 
operations on the class system and classes and objects.


\subheading{Effect:}


None other than the above.



\subheading{Change:}


The preprocessor now issues a number of warnings for questionable practices.


\subheading{Fix:}


None if the module conforms to the more strict syntax.  If problems are found, 
the messages should help in directing the needed changes.


\subheading{Effect:}


Some warnings may show up in the the output but these are things that should 
be changed anyway.



\subheading{Change:}


The preprocessor can only process one file for a given invocation and it no 
longer can read the class definition file from STDIN.  (didn't know it could 
before, did you?)


\subheading{Fix:}


None.


\subheading{Effect:}


Some undocumented features no longer work.  



\subheading{Change:}


The macro class_EntryPoint() has been removed from service.


\subheading{Fix:}


Simple substitution.


\subheading{Effect:}


None.



\subheading{Change:}


The macro class_StaticEntry(foo) has been removed from service.


\subheading{Fix:}


Simple substitution.


\subheading{Effect:}


This should have little effect on objects.  The only potential problem occurs 
when objects are constructed in an order that caused a superclass to be 
constructed AFTER this class.  When the module is linked, the superclasses 
object module will not yet be available.  This problem can be fixed by 
reordering the construction of the modules.  



\subheading{Change:}


The format of foo_StaticEntry has been changed to be foo_StaticLoad() thus 
making this look more like all the other class procedures on class foo.  


\subheading{Fix:}


Simple substitution.


\subheading{Effect:}


None.



\subheading{Change:}


The returned type from the class procedure foo_StaticLoad() is now of type 
int.


\subheading{Fix:}


If desired, either check the return code or cast it to (void).  This can be 
fixed with simple substitution in nearly all cases.


\subheading{Effect:}


Most compilers will let this go without a warning.  It is now possible for a 
program to take some suitable action if the code was not successfully 
statically loaded.



\begindata{bp,537558784}
\enddata{bp,537558784}
\view{bpv,537558784,1775,0,0}
Copyright 1992 Carnegie Mellon University and IBM.  All rights reserved.

\smaller{\smaller{$Disclaimer: 

Permission to use, copy, modify, and distribute this software and its 

documentation for any purpose is hereby granted without fee, 

provided that the above copyright notice appear in all copies and that 

both that copyright notice, this permission notice, and the following 

disclaimer appear in supporting documentation, and that the names of 

IBM, Carnegie Mellon University, and other copyright holders, not be 

used in advertising or publicity pertaining to distribution of the software 

without specific, written prior permission.



IBM, CARNEGIE MELLON UNIVERSITY, AND THE OTHER COPYRIGHT HOLDERS 

DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING 

ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO EVENT 

SHALL IBM, CARNEGIE MELLON UNIVERSITY, OR ANY OTHER COPYRIGHT HOLDER 

BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY 

DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 

WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS 

ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 

OF THIS SOFTWARE.

 $

}}\enddata{text,538925048}
