## Changes and improvements in OpenAmulet

This page shows what changes have been done to OpenAmulet. Note that not all changes are included in the sources you can download as they might not be included in the actual release. In this case, this list gives a good overview for what's coming in the next release. If we do release a new version of OpenAmulet a header will be included so you can see which changes are included in what release.

### Contacts:

The following table list the people contributing to OpenAmulet and their e-mail addresses.

DE | Dean Edmonds (deane@gooroos.com)
JRVZ | James R. Van Zandt (jrv@vanzandt.mv.com)
ME | Michiel Ephraim (mje@casema.net)
RMM | Robert M. Muench (robert.muench@robertmuench.de)
RO | Rodolphe Ortalo (ortalo@cert.fr, ortalo@laas.fr)
PS | Paul Sokolovsky (Paul.Sokolovsky@technologist.com)

### Project-Home-Page: www.openip.org

#### 04-October-1999 RMM

- Integrated patches from RO, which fix the GCC warning for operator char*(), some minor quirks.

#### 03-October-1999 PS

- Win32: now DllMain is used for DLL, and WinMain for static build, never both.

#### 29-September-1999 RMM

- Added Checkpoint value to Am_Initializer constructor, for better tracking down memory-leaks with SmartHeap.

#### 27-September-1999 RMM

- Fixed bug in Map_Iterator class in univ_oa_map.hpp code, that could cause wrong iterator settings. Iterators were initialized once but didn't get updated when the content changed. Now the iterators are always queried from the std::map.

#### 23-September-1999 RMM

- Fixed bug in univ_oa_map.hpp code that caused a shift of Inspector tags by 1.

#### 23-September-1999 PS

- Windows color handling changed: gem/win32/gemW_styles.cpp:ACV(): this used to thresholdize color values. Deactivated.
- widgets/widgets.cpp:make_converted_styles(): now use separate set of brightness adjustment coefficients for Windows (hardcoded, i.e. defined at compile-time).
- New styles added: Am_Light_Grey (0.75,0.75,0.75), Am_Grey (0.5,0.5,0.5), Am_Dark_Grey (0.25,0.25,0.25), Am_Light_Grey is now default for Win32.
- Widget box now looks exactly as Windows native, widgets/border_misc.cpp:Am_Draw_Windows_Box()

#### 22-September-1999 RMM

- Removed two obsolte files from library build, with the result that no longer 'double definition' warnings are issued by the linker, thanks PS.
- Coded a general Table (bi-directional look-up map) class (see univ_map_oa.hpp) which uses STL maps. Changed registry implementation to use this new table class.
- Initializer now logs the priority of initializing & cleanup functions to std::cout; fixed a small bug to handle zero function-pointers correctly.
- Added Registry cleanup-function to initializer sequence to get rid of some termination memory-leaks.

#### 21-September-1999 RMM & RO

- Integrated some patches from Rodolphe for Unix builds

#### 20-September-1999 RMM

- Changed all <iostream.h> related things to <iostream> and used new C++ standard library convention std::XYZ.
- Initializer now logs the order of initialization of global objects to std::cout in debugging mode.
- Fixed some programs in OpenAmulet/test/... so that they work with the new C++ streams.

#### 06-September-1999 RMM & JRVZ

- Integrated keyboard changes, further text-functions submitted by JRVZ.

#### 01-September-1999 RMM

- Optimised the Symbol-Table implementation to support faster two-way lookups. This radically improves start-up time for debug builds.

#### 30-August-1999 RMM

- Integrated some fixes and changes from RO.
- Fixed the header inclusion path problem for the library sources. User’s of the library now only need to add openamulet/header/… to their include search path, all other files are referencing using the fully qualified names.

#### 27-August-1999 RMM

- Moved the implicit definition for macro DLL from dl_import.h to am_config.h To use the DLL uncomment the macro or define it on the command-line.
- Moved DEFAULT_AMULET_DIR macro to am_config.h
- Changed example “testselectionwidget.cpp” to use correct image path.

#### 24-August-1999 PS

- Used _OA_DL_MEMBERIMPORT to mark in-class DLL exports. This is required to workaround gcc 2.95 bug, when it sometimes doesn't export const methods of class.
- More symbols marked as exported.

#### 23-August-1999 RMM

- Fixed bug in T::Key() function which missed to return a zero value if not found.
- Added Dump() function to STL map implementation in DEBUG mode, which can be used to dump the contents of the map. Objects in the map need to have an operator << defined.
- Defined operator << for those classes which uses the OA map implementation to enable dumping.
- Changed ‘char*’ keys/entries to ‘const char*’ for OA map typedefs.
- Fixed bug for typedef Map_Str2Int to use ‘lex_less’ comparator functoid.
- Changed ‘symbol_table.h’ to use OA map implementation.

#### 20-August-1999 PS

- GEM/Win32: Win32s thunks cleaned
- GEM/Win32: Routine to draw generalized dashed lines converted to gas syntax and moved to 'linedda.s'.
- GEM/Win32: Rectangles are now drawn as polygons if they use dashed line style
- GEM/Win32: Polygons, arcs, roundtangles: implemented transparent stipple fills with Am_DRAW_COPY function
- GEM/Win32: For arcs and roundtangles, where generalized dashes are not supported, they are attempted to be emulated with existing GDI functionality. However, this emulation is non-robust.
- GEM/Win32: All graphic primitives made being the right size both in bordered and borderless fashion. Only exception is polygons: IMHO, they are drawn one pixel larger as bordered and one pixel smaller as borderless. Should check with other implementations, mathematical sense and Amulet designers' intention, though.
- GEM/Win32: See source/gem/win32/gem_win32.note for status of implemented features

#### 17-August-1999 RO

- Fixed bug in load / save system function std::less in am_load_save.cpp.

#### 16-August-1999 PS

- GEM/Win32: Am_Image_Array(filename) supposed to be !Valid() if filename could not be loaded, but it was not. Fixed.
- New GEM function Am_Line_Solid_Flag Am_Style::Get_Line_Flag (); , for consistency. Added to all GEM implementations!

#### 28-July-1999 PS

- More headers split
- Many sources are made to use split headers, resulting in faster compilation and object sizes in some cases
- Minor bug fixes
- Introduced configuration file, 'am_config,h', where all tuning definitions supposed to be
- Added new configuration define, WIN_KEYBINDINGS, for more Windows-compatible key bindings
- Win32 DLL build is supported, with workarounds for gcc 2.95 pre-release
- Am_Cleanup() called on DLL finalization, so OA properly terminates upon unexpected application termination

#### 28-July-1999 RMM

- The platform dependent sources in the GEM directory were moved to platform directories like Win32, Mac, GGI etc., the headers from the GEM directory where moved to the header/amulet/… directory and the sources were updated to reflect the changes.

#### 02-June-1999 RMM / RO

- The X windows GEM implementation files were changed to use STL datatypes where appropriate. This includes region management, the Am_Point_Array datatype. Mostly vectors, stacks and algorithms were used.
- The clipping region code was inlined and is now contained in the include file gemX.h
- Experimental support for Linux GGI has been added to the source/gem/ggi directory, a new header file gemG.h is included in header/amulet/...

#### 31-Mai-1999 RMM

- Splitted the source-files in source/widgets into more independent files. This work was done by PS.
- Moved the Win32 GEM implementation files ‘gemW*.*’ into new directory sources/gem/win32
- Moved the Win32 GEM header files from sources/gem/win32 directory to header/amulet directory.
- Moved the Mac GEM implementation files ‘gemM*.*’ into new directory sources/gem/mac.
- Moved the X GEM implementation files ‘gemX*.*’ into new directory sources/gem/x.

#### 27-April-1999 RMM

- Moved the code for the Am_Wrapper, Am_Registered_Type classes into own header-files.
- Moved all typedefs into one central file ‘typedefs.hpp’.

#### 22-April-1999 RMM

- Splitted the source-files in source/opal into more independent files, this will make it easier to work on the different parts of OPAL. Source files which directly implement OPAL objects are moved into folder source/opal/objects. This work was done by PS.
- Add the two missing member-functions Narrow() & Println() to Am_Object in file source/object/object.cpp. (Thanks DE)

### OpenAmulet Release V 4.2

#### 15-March-1999 RMM

- Fixed problem with 0 width/height windows on X-Systems (DE)

#### 12-March-1999 RMM

- Applied small fix in 'connection.cpp/sockets_have_input'. Directly referencing the internal fields of an `fd_set' structure is frowned upon because different Unixes define the structure in different ways. Instead, there are standard macros which should be used. (Thanks DE)
- The animator bug has been fixed, everything now works as expected (DE).
- Changed some 'const' parameter things as a result of STL portability. This now works and should compile but has to be looked at for the next release.
- Workaround for the 100% CPU utilization problem on X-System included (DE).
- Added stub functions in 'registry.cpp' for non-debug version (PS).
- Made code compileable under MingWin32 (PS).

#### 04-March-1999 RMM

- Applied two changes to the sources to make it MingWin32 compatible
- Changed am_map_oa.hpp that it will now compile with the VC++ STL version
- Added some #pragmas to surpress stupid/useless VC++ warnings

#### 01-March-1999 RMM

- Changed the DEFAULT_AMULET_DIR macro in file 'misc.cpp' to be '..\\..\\data' for Win32 platform. This assumes, that all data-files which are used by samples, test programs are stored in the directory 'OpenAmulet\data'.
- Applied a bug fix from Rodolphe, by adding the '== const' operator to Am_Inter_Location_Data.
- Applied a further bug-fix by Rodolphe in function Am_Destroy_Menu_Bar, where we now test if the returned part is valid and destroy it only if this is the case.

#### 26-Februar-1999 RMM

- Removed the header file 'amulet2_conversion.h' from the source-tree. This one is no longer needed.

#### 23-Februar-1999 DE

- Made changes so that statically-linked applications don't have to link to parts of OpenAmulet which they are not using:

o moved each graphical object into its own source file

o moved the Am_Inter_Location code out of inter_move_grow.cpp and into its own file

o changed Am_Standard_Opal_Handlers::Input_Event_Notify()'s call to Interactor_Input_Func() to do it through a pointer which only gets initialized if the application is using interactors.

- Made changes so that DEBUG-only strings do not take up space in release-mode applications:

o #ifdef'ed all of the `cerr' error messages in the macros in types.h so that they are only present when DEBUG is on

o created a DSTR() macro which emits its string argument if DEBUG is on, and emits (char *)0 if DEBUG is off. You should use this macro around any strings which only get used by DEBUG code (e.g. object names).

o Am_Object, Am_Formula, Am_Initializer, ID tag, and ID class names are all only used by DEBUG code, so I enclosed them all into DSTR() macros.

- Made all of the Am_Initializers, and the init and cleanup routines that they call, static so that they do not pollute the global namespace and take up room in the DSO/DLL symbol table.
- Fixed Am_Region_Impl::Push(Am_Region *) in gemX_regions.cpp so that it preserves the existing region's shape rather than always turning it back into a rectangle.
- Fixed Am_Drawonable_Impl::Draw_Image() in gemX_image.cpp so that transparent GIFs work correctly.
- Fixed Animation_Constraint::~Animation_Constraint() so that it removes the constraint and dependency properly when there is only a single constrained key.
- Fixed Animation_Constraint::~Animation_Constraint() so that it resets the interpolator's Am_ANIM_CONSTRAINT slot to 0.
- Changed Am_Set_Animated_Slots() to handle the situation where only a single value was specified for a list of animated slots, without crashing.
- Added a Set(Am_Point_List) method to both the Am_Region class and the Am_Region_Impl class for X-Windows. This allows the creation of non-rectangular regions. The code is current inactive, being #ifdef'ed out on the symbol POLYGONAL_REGIONS until support is available on the other platforms. I can probably do the MS-Windows version myself, but someone else will have to tackle the Mac.

#### 23-Februar-1999 RMM

- Applied bug-fix from DE so that transparent GIF images are handled correctly under X-Windows. See changes above.
- Added the changes from DE to handle non-rectangular regions on X-Window systems. NOTE: This is not portable nor is this change smothly integrated into OpenAmulet yet. Use on your own risk. See changes above.

#### 19-Februar-1999 RMM

- Fixed the remaining bug in the load & save system which caused references to fail. Everything should work fine now.

#### 17-Februar-1999 RMM

- Fixed bug in load & save system, where 'const char*' were compared by address instead lexicoraphical when using STL maps. There is still a problem with saved references.
- Added Am_Style 'Am_Default_Color', which can be changed in to your needs in opal.cpp/am_opal_initialize(). 'Am_Default_Color' is now used by all widgets instead of the fixed Am_Amulet_Purple color (which looked strange on some systems).

#### 21-Januar-1999 RMM

- Fixed small bug in dynarray.h (blk_count wasn't declared in debug mode)
- Removed 'inline' property of functions in 'object.cpp' because they are used in 'object_data.cpp' as extern
- Uncommented the definition of function hypot in 'gest_features.cpp' and removed the trailing _ from references to this function (as trailing _ should only be used for library functions).
- Moved 'impl.h' from directory 'source/object' to 'header/amulet' and removed the reference to the include file in 'object.cpp'.

#### 16-December-1998 RMM

- Renamded files univ_lst/map.tpl into univ_lst/map.hpp, changed am_inc.h to reflect the changes
- Moved the Am_Value stuff into seperate files (Am_Value.hpp & Am_Value.cpp), see header/amulet/... & source/utils/... directory, changed am_inc.h to reflect the changes. There exists a new define to reference the include AM_VALUE__H

#### 08-December-1998 RMM

- Made the definition of Am_No_Value const, so it can't be used as l-value (thanks to Rick)
- Prefixed most old stream stuff with the global scope resolution opertor :: to get it compiled with Intel's C++ compiler (the problem went away somehow but I have left the changes, as they doesn't heart, if someone is having problems with this please report them).
- Made some parameters const
- Moved the Am_Object_Data stuff from object.cpp / impl.h to object_data.hpp & object_data.cpp
- Added bool return type to most == operators
- Added 'operator==(const) const' signature to most classes and included this signature into the macro Am_WRAPPER_DECL / Am_WRAPPER_IMPL to get it consistent (see types.h)
- ATTENTION: in file gemW_draw.cpp there is a line 'int res = main(argc, argv)' which the Intel C++ compiler complains about it, as it doesn't allow to call main(). If you are using the Intel C++ compiler just compile this file with the VC++ compiler and than create the library from the object files.

#### 28-November-1998 RMM

- Fixed bug in Dyn_Memory_Manager dtor

#### 17-November-1998 PS

- Hygienic changes to compile under mingw32 target (win32)
- _WIN32 define consistently used for testing for Win32
- MS-specific obsolete _fstr* functions changed to str*
- Minor changes to support contemporary C++
- GCC has bug with anonymous structures/unions, worked around
- Dynamic_Memory_Manager class cleanup, implementation separated from declaration

### OpenAmulet Release V 4.1

#### November 1998 RMM

- Fixed some 'memory-leaks' by including more global objects into Am_CleanUp (see: opal.cpp)
- Added #define OA_VERSION (see: amulet.h) to be used in source-code (defined by default)
- Replaced Am_Map macros with own implementation (see: univ_map_oa.hpp), uses STL
- Changed sources so that they compile with EGCS 1.1b on Linux

#### Mai 1998 RMM

- Initializer concept rewritten to use STL lists
- SmartHeap support added for Dyn_Memory_Manager
- AddPart function extended to take a position parameter