| History of the Library

Release 2.7 (31. X 2006.)

- Added: Contributions to dialogs.h, files.h (new), graphing.h (new), and other files.
- Bugfix: Several minor documentation mistakes fixed.
- Updated: GrayDBufToggleSync now works properly on HW1.
- Bugfix: Fixed `%[` conversion in scanf family routines.
- Added: A few new examples contributed by Jocelyn Berrendonner, Sébastien Leurent and Lionel Debroux.
- Bugfix: Fixed a fputc bug with large (>65390 bytes) files.
- Added: Support for GCC 4.0 (legacy GCC 3 is no longer supported by TIGCCLIB)
- Added: poke_bchg and pokeIO_bchg macros
- Bugfix: Fixed support for external data variables using Fargo-style compressed relocs
- Added: Support for Mlink-format relocs
- Updated: Grayscale routine size-optimized by Lionel Debroux, Jesse Frey and Martial Demolins.
- Bugfix: Added `const` for the sprite data in the sprite function prototypes.
- Bugfix: Fixed a bug in in-use bit support affecting PedroM versions prior to 0.81.
- Updated: Merged an optimization to the in-use bit setting code from the `pstarter`.
- Bugfix: Fixed calling GrayOn twice not working (despite the documentation saying it works).
- Bugfix: Fixed LIO_CTX structure (`VarSize` is an `unsigned long`, not an `unsigned short`).
- Bugfix: Fixed an unoptimizable `jsr` into a `jbsr` in trampoline offset computation.
- Bugfix: Fixed the formulas (wrong left side) in the documentation of `catanh` and `ccos`.
- Updated: Optimized the address hack for `OSFastArrows`.

Release 2.6 (24. X 2004.)

- Added: Many new optimization definitions.
- Added: An implementation of scanf and related functions.
- Added: Support for program comments.
- Added: Support for incompatibility flags.
- Added: Support for unofficial operating systems.
- Added: A lot of startup code to handle BSS sections, constructors, etc.
- Added: Automatic setting of the in-use bit.
- Added: References between functions in the documentation.
- Updated: Library functions coded in assembly now take register parameters.
- Updated: Internal F-Line emulator is now mostly compliant with the AMS.
- Added: Contributions to intr.h, estack.h, and other files.

Release 2.5 SP4 (24. I 2003.)

- Bugfix: Fixed bug in `ENABLE_ERROR_RETURN` with `MIN_AMS` values of 200 or higher.
- Bugfix: Removed the rejection of a minimum AMS version of 2.07.

Release 2.5 SP3 (13. I 2003.)

- Bugfix: Incorporated a fix for fclose.

Release 2.5 SP2 (12. I 2003.)

- Bugfix: Important bugfixes for fopen, fread and fwrite.
- Bugfix: Changed import_binary to export the symbol, and changed the IDE to make it work with it.

Release 2.5 SP1 (30. XII 2002.)

- Bugfix: Fixed `SET_FILE_IN_USE_BIT`.
- Bugfix: Fixed the prototype of MD5Update.

Release 2.5 (21. XII 2002.)

- Updated: Greatly changed the structure of the whole library, making it cleaner and easier to read.
- Updated: Made some changes to support the new '-mregparm' switch/option.
- Added: Implemented F-Line ROM Calls.
- Added: Added beta version information to version.h.
- Added: Implemented checking for a minimum AMS Version.
- Added: Added types such as SYM_STR to differentiate between different uses of similar constructs.
- Added: Added the ESTACK macro.
- Added: Added a TRAP macro which acts like AUTO_INT.
- Added: Added bitwise functions to peekpoke.h.
- Added: Added a lot of new functions to unknown.h.
- Added: Started documenting more functions from unknown.h, especially the high-level functions VarRecall and VarStore.
- Updated: Made _rowread a library function.
- Added: Added the _rowread_inverted, _rowread_internal, _keytest, and _keytest_optimized functions.
- Added: Added missing interrupt vectors.
- Updated: Integrated Jocelyn Berrendonner's vast updates to menus.h.
- Added: Implemented calculator detection at startup.
- Added: Implemented TRY...FINALLY...ENDFINAL blocks, and added appropriate functions to alloc.h.
- Added: Implemented passing errors on to the AMS, added default error codes, and implemented ER_throw.
- Added: Implemented nostub libraries.
- Added: Finished bascmd.h, added basfunc.h and basop.h without further documentation.
- Added: Added a homescr.h header file for Home Screen manipulation.
- Added: Integrated a lot of new functions and updates contributed by other people (see Credits), including updates to system.h, statline.h, stdio.h, and string.h.
- Added: Added a new `EXECUTE_IN_GHOST_SPACE` directive, replacing the enter_ghost_space function.
- Updated: Included updated grayscale support from Thomas Nussbaumer, adding GraySetInt1Handler, GrayGetInt1Handler, and double-buffering functions.
- Added: Added a stddef.h header file.
- Added: Added import_binary macro.
- Added: Added a `SET_FILE_IN_USE_BIT` directive.

Release 2.41 (20. I 2002.)

- Updated: Made some changes that will hopefully enable support for the new V200 calculator. You can define `USE_V200` to activate this.
- Added: A new file version.h has been added to the library.
- Updated: Updated fopen and fclose with new versions by Greg Dietsche.

Release 2.4 SP2 (27. XII 2001.)

- Updated: The patch code has been cleaned up.
- Updated: exit and atexit support have been reimplemented.
- Added: A routine for 'long long' multiplication by Kevin Kofler has been integrated.

Release 2.4 SP1 (1. V 2001.)

- Bugfix: exit and atexit support have been fixed.
- A new directive, `NO_EXIT_SUPPORT`, has been added to optimize the program.

Release 2.4 (24. III 2001.)

- Bugfix: Implemented variable-type arguments for pointers to short and long integers. This prevents warnings if you pass an int pointer to a short pointer argument, and fixes the problems introduced in release 2.31.
- A standard library file has been added to work with multiple files.
- New flickerless grayscale support implemented by Thomas Nussbaumer has been added.
- GrayMode has been replaced by GrayOn and GrayOff.

Release 2.31 (24. XII 2000.)

- Bugfix: Casting floats to integers and automatic trunctation floating point values now works correctly. In TIGCCLIB 2.3, casting to signed ints (including implicite truncation) produced incorrect values, and casting to unsigned ints produced 'Undefined reference' errors. This is fixed now.
- Bugfix: Many programs created with library releases prior to 2.3 produce a lot of warnings (although they work correctly after the compilation) about incompatible pointer types. This is fixed now.
- Bugfix: Functions OSContrastUp and OSContrastDn trashed some registers due to a bug in the TIOS. This is fixed now (thanks to Patrick Davidson).
- Bugfix: Programs which still have directives `USE_..._PATCH` couldn't be compiled in "Doors" mode ('Duplicate identifier' errors) with TIGCCLIB 2.3, due to superfluous declarations of some symbols (`bcopy` etc.) in doors.h header file. This is now fixed.
- Functions abs, min and max are now redefined to work with any numeric type, not only with short integers. Such behaviour is proposed in ANSI C.
- Indentifiers AUTO_INT, AUTO_INT_COUNT, FIRST_AUTO_INT and LAST_AUTO_INT were introduced in TIGCCLIB 2.3, but I forgot to document them. This is now corrected.
- As usual, there are some fixes in the documentation. Especially, thanks to Kevin Kofler for very important information about returning values to TI-Basic.

Release 2.3 (13. XII 2000.)

- A lot of internal changes are made in the library to support new features introduced in release 0.9 of the compiler. That's why this release of the library will not work correctly with releases of TIGCC prior to 0.9.
- The timath.h header file is completely rewritten, because the compiler now supports the native ANSI C floating point types and values (click here for more info). In addition to this, two new ANSI-compatible header files math.h and float.h are introduced too. These changes are performed on such way to retain about 95% compatibility with old programs which used floating point arithmetic using awkward indirect methods (i.e. the only possible methods before TIGCC 0.9). Click here for more info.
- There is no more need for usage of directives like `USE_..._PATCH`. The new compiler apply patches automatically when necessary (such directives will be simply ignored now). In other words, you don't need to worry any more about patches. For this purpose, a new file called tipatch.lib is added to the library. The new compiler searches through this file to find appropriate patches which eventually should to be included (you should not edit or modify this file unless you know very well what are you doing).
- Three new functions float_to_bcd, bcd_to_float and bcd_var are added to timath.h header file.
- A very important function push_internal_simplify which is essential for symbolic mathematic is added to estack.h header file. Note that although this function is not officially introduced before AMS 2.xx, it is implemented here to work on any AMS version.
- Four new functions peekIO, peekIO_w, poke and pokwIO_w are added to peekpoke.h header file, to allow reliable reading and writing to hardware memory-mapped I/O ports.
- A new function EV_getAppID is added in events.h header file, which allows determining application ID numbers regardless of the AMS version. Note that although this function is not officially introduced before AMS 2.xx, it is implemented here to work on any AMS version.
- A new function FolderClear is added in vat.h header file. The structure of SYM_ENTRY is slightly improved (without losing the compatibility).
- Functions atof and fabs are now present in stdlib.h header file too, as proposed in ANSI C.
- Bugfix: Changed definition of _rowread so it works correctly if used in a short loop with the new compiler.
- Bugfix: The directive `OPTIMIZE_ROM_CALLS` now does not interfere witn an user-written interrupt handlers (thanks to Thomas Nussbaumer). Note however that it still may interfere with event handlers, and with callback functions used in OSVRegisterTimer, vcbprintf, etc.
- Bugfix: Function exit now will not cause a warning if used in the body of a non-void function.
- Bugfix: Function FolderDel now works as described (and reliably).
- Bugfix: Some functions from ctype.h are rewritten to avoid spurious warnings if the warning-checking level is set too high.
- Bugfix: Function hypot will not cause side effects anymore.
- Bugfix: Function push_ANSI_string now works correctly in all cases.
- Bugfix: Function LCD_save now does not cause spurious warnings if used in "Doors" mode.
- Bugfix: Function XR_stringPtr is rewritten to work with all AMS versions (thanks to Romain Herault).
- Bugfix: Enumeration StartTypes is rewritten to be compatible with all AMS versions.
- The library is changed to replace all `'int'`s to `'short'`s where this was appropriate to support the '-mnoshort' command line option supported in the new version of the compiler.
- The documentation is much updated (including correcting of some information which was wrong). The Frequently Asked Questions list is also slightly updated.

Release 2.22 (8. X 2000.)

- Bugfix: A fatal bug which causes crash if enter_ghost_space function is used on AMS 2.03 is fixed.

Release 2.21 (2. X 2000.)

- Release 2.21 is just a minor upgrade which includes the documentation in both `.chm` and `.html` format, because this was requested by non-Windows users. Other modifications includes slight fixes in the documentation, and much better organized Frequently Asked Questions list (thanks to James Darpinian for helping me to organize it).

Release 2.2 (29. IX 2000.)

- The documentation for the release 2.2 is completely rearanged to make it much more readable. Moreover, the documentation now contains not only information about library functions, but about the whole TIGCC project, including the compiler options, a brief reference to C language keywords, operators and punctuators, description of GNU C language extensions, GNU Assember, and much more. The Frequently Asked Question list is full of new question/answer pairs. In general, the documentation is now thrice larger than in previous release, and it is now in `.chm` format (68 separate HTML files become too inpracticable; if someone is really interested in HTML originals, I can upload them separately). I hope that you will like the new look of the documentation (and the documentation itself, of course).
- The header file all.h is renamed to tigcclib.h to be more consistent. The old name will still be accepted, due to compatibility reasons.
- It is not necessary any more to include nostub.h header file explicitely to produce a "nostub" program: the library will do this automatically if you use any other file from the library, except if you define the global preprocessor symbol USE_KERNEL, or if you explicitely include doors.h header file at the begining of the program.
- A new directive `OPTIMIZE_ROM_CALLS` is introduced, which optimizes ROM calls in "nostub" mode, which usually leads to shorter and faster programs (but not always).
- Grayscale support on HW2 calculators is improved to be about 50% faster and more flickerless. A new function GrayAdjust is implemented, which allows fine tuning of grayscale quality, so it allows to reduce flickering as many as possible. Please, recompile your existing grayscale programs if you want to get advantage of introduced improvements.
- It is not necessary any more to put `USE_GRAY_PATCH` in grayscale programs; the library will now conclude automatically when the grayscale support is necessary, and it will act accordingly.
- Bugfix: trying to enable grayscale now will not cause the crash if the grayscale was already enabled.
- A new function GrayCheckRunning and a new enumeration GrayPlanes are added in the gray.h header file.
- Bugfix: A fatal bug into functions fwrite and fread which makes them unusuable is fixed. Also, a small bug in fseek (a wrong returned value) is fixed too.
- Bugfix: Function fopen is now much more robust if something is going wrong (for example, not enough memory).
- A new function enter_ghost_space is introduced, for bypassing some protections introduced in AMS 2.xx.
- A new header file intr.h is introduced, which contains functions, language extensions, and data types for easy making of interrupt handlers, and for general manipulations with interrupts.
- Very useful enumeration CommonKeys is introduced in kbd.h header file. It contains keycodes of some commonly used keys.
- Bugfix: Function _rowread now works reliable on HW2 calculators (they needs more time for recovering the keyboard controlor).
- The documentation now contains the keyboard matrix for usage of _rowread function.
- Functions OSVRegisterTimer and OSVFreeTimer are rewriten to works independently of the TIOS, because they are removed from TIOS in AMS 2.04 and AMS 2.05. Now, they works on any AMS version (in other words: no more "Resident ROM routine not available" message). Please, recompile your program if you used these function, to make it compatible witn AMS 2.04/5.
- A new function alloca is added into alloc.h and stdlib.h header files.
- Bugfix: Function assert will not cause a crash anymore when used together with the `SAVE_SCREEN` directive.
- Bugfix: Function assert now works properly if used inside `if`...`else` constructions.
- Bugfix: Functions assert and ldiv will not trash line numbers anymore.
- Bugfix: Functions GetFloatArg, ArgCount and RemainingArgCnt now works correctly in "Doors" mode.
- Bugfix: Small corrections are made in functions poke, poke_w and poke_l, to prevent some unnecessary warnings.
- Bugfix: Constants CHAR_MIN and CHAR_MAX in limits.h header file are now sensitive to the fact that the compiler may be forced to treat chars as unsigned.
- Bugfix: Although I said that impossibility of making multi-module programs in "Doors" mode is solved in release 2.1, I forgot to do this. This is now really solved, however.
- The library is now programmed on such way that the compiler will emit a warning if you try to return a value using the `return` keyword from the `_main` function, because you in fact can not do this.

Release 2.1 (25. VI 2000.)

- The alphabetical list (with appropriate links) of all functions, macro constructors, language extensions, global variables, constants and predefined types is added to the documentation.
- Bugfix: Sprite16 function from sprites.h header file now works correctly. In addition to this bugfix, a new function Sprite8 is added for easier working with small sprites.
- Bugfix: floating point routines caused crash when they are nested deeply (read: very often). This problem is finally solved (after a lot of troubles). I hope that floating point support is now stable.
- Bugfix: FLT macro from timath.h header file generated unnormalized numbers when they are smaller than 0.1. Many floating point routines were not happy with such numbers, and produced wrong results. This is now corrected.
- Bugfix: I hope that I finally found a workarround for a stupid bug in GNU C preprocessor which causes STATUS_ACCESS_VIOLATION exception very often when FLT macro is used with just one argument. Now, it seems that this problem does not appear any more.
- Programs which use floating point support now usually procuce a bit shorter code than earlier.
- Bugfix: function div from stdlib.h header file now works correctly.
- Bugfix: functions strcmp and memcmp were declared as long, although it seems that these functions leave an unpredictable results in higher half of D0; they are now declared as int (Sebastian Reichelt and Xavier Vassor informed me about strange behaviour of these two functions). It seems that these problems are solved after redeclaration.
- Bugfix: function ASM_call from system.h header file assumed that called subroutine will preserve all registers, which caused a lot of problems when these assumptions are violated. ASM_call now saves all registers and restores them after the execution. In addition to this bugfix, a new function ASM_fastcall is added, for faster calling (when you are sure that a called subroutine will not destroy any registers).
- Bugfix: in release 2.0, it was impossible in "Doors" mode to create programs splited in many modules which are linked separately, because symbol `_main` was unconditionally exported in doors.h header file. This is now corrected.
- Bugfix: function GrayMode from gray.h header file now automatically selects dark plane just after switching on the grayscale mode. Such behaviour in previous releases of TIGCCLIB was guaranted only on HW1 calculators, but not on HW2 calculators. So, it was possible to produce (quite easily) grayscale programs which work correctly only on HW1 calculators, although grayscale support is planed to work always on both hardware versions. This is now fixed.
- Some errors in the documentation are fixed, and the documentation is slightly updated (especially information about big number support in rsa.h header file). As usual, the Frequently Asked Questions list is updated with a lot of useful suggestions.

Release 2.0 (25. V 2000.)

- Starting from this release, TIGCCLIB is much more compatible with ANSI C standard library. Nearly full implementation of stdio.h and stdlib.h is included (41 new functions in stdio.h and 23 new functions in stdlib.h, together with appropriate data structures and types). So, you can now use a lot of functions known from various C tutorials: printf, fopen, gets, atoi, qsort, bsearch, strtol...
- Usage of patches "inits", "longmul", "longdiv" and "gray" is now much easier: instead of separate linking, it is enough to define some global preprocessor symbols (like `USE_LONGMUL_PATCH` etc.).
- A directive `SAVE_SCREEN` is introduced, which allows automatically saving and restoring the content of the screen in "nostub" mode, without needness for calling LCD_save and LCD_restore manually.
- Bugfix: very serious bug which sometimes cause crash in programs which use floating point numbers is corrected (note that this bugfix was released before, as a separate file called tcl15fix).
- A lot of new mathematical functions (mainly for manipulations with symbolic expressions, lists and matrices, and for algebra and calculus applications), and functions for "pretty printing" expressions are added in estack.h header file (82 new functions). The list of expression tags is completed (more than 500 tags), and the documentation about usage of expression stack is much updated.
- A new header file events.h is introduced, with 32 new functions for event driving programming, and calculator mode settings. Now you can simulate TIOS system events in your programs, and hook into the operating system and change its behavious partially (for example, you can redefine the keyboard, add new items in system menus, change behaviour of some commands, etc.). But note that these features require good knowledge of programming.
- A new header file sprites.h is introduced, with 2 new fast and simple functions for sprite drawing (including masked sprites).
- A new header file textedit.h with 16 new functions for accessing the text editor is introduced. As the text editor which is built-in into the TIOS is highly customizable, you can now write programs with high perfomance editing facilities!
- Four language extension macros TRY, ONERR, ENDTRY and PASS are added in error.h header file, to allow error handling similarly like in TI-Basic or in modern programming languages like Delphi. Also, two new functions are added in error.h, the documentation about it is updated, and some wrong information are corrected.
- A new header file flash.h is introduced, with 11 new functions for low-level access to the Flash ROM. 3 new functions for high-level access to the Flash ROM are added in vat.h header file.
- Some new data structures are added in vat.h header file, various infos related to this header file are updated (especially about organization of VAT table entries), and one small bug in it is corrected (HS_NULL was wrongly defined).
- A new header file cert.h with 17 functions for working for certificate files and other memory-mapped files (not necessary related to certificates) is introduced.
- 15 new functions for high-level accessing to the link port are added in link.h header file. Also, some information about link.h are corrected.
- A new header file rsa.h is introduced, with 8 new functions for working with very big integer numbers, message diggesting and RSA decryption.
- 4 new functions are added in args.h header file, which allow more flexible getting of the arguments passed to the program. The list of argument tags is completed.
- Two new header files limits.h and values.h are introduced. They contain various platform-dependent constants (proposed by ANSI). This helps porting programs from other platforms.
- A new header file compat.h is introduced, which defines 18 pseudoconstants (i.e. macros which look and act like constants). These pseudoconstants have different values on TI-89 and TI-92 Plus, so they can help making compatibility between these two calculator models. Also some pseudoconstants have different values on AMS 1.xx and AMS 2.xx, so they can help solving some minor incompatibilities between AMS 1.xx and AMS 2.xx during usage of some functions (although 99% of implemented functions are AMS-independent).
- Two very useful global variables are added in wingraph.h header file. Also, some information about this header file and graph.h header file are updated or corrected.
- 12 new functions are added in system.h header file, mainly for manipulating with queue structures, the cursor and the clipboard. Many information about this header file are updated or corrected.
- Information about kbd.h header file are much updated. A hint is added about how to avoid slow functions kbhit and ngetchx in high-perfomance keyboard reading applications, without using very low-level functions like _rowread.
- A new header file bascmd.h with 35 new functions is introduced. At the moment, this header file is quite incomplete and a bit unconsistent. In the near future it will contain more than 150 new functions. This header file contains functions which executes particular TI-Basic statements or functions, so after completing this header file, nearly everything which may be done using just one TI-Basic statement/function would be possible using just one TIGCC function (but be aware: the performance will be like during executing of TI-Basic statement/function, so intensive usage of functions from this header file is not recommended in high-perfomance applications). I started to develop this header file, but the shortage of my free time forces me to stop developing for a while. I don't want to prolongue releasing of whole TIGCCLIB 2.0 only because this header file is not complete. Be patient, I will continue developing it as soon as possible...
- 3 new functions are added in menus.h header file. A lot of information are updated, especially about the exact organization of the menu structure (this info allows making menus with more levels of submenus).
- Function assert is improved, so now there is no any limitations about usage of this function in "nostub" mode.
- Function realloc (proposed by ANSI) is added in alloc.h header file (it is also defined in stdlib.h), and calloc is improved to generate smaller code.
- Information for assembly programmers are much updated (many people asked me about examples of using floats in ASM programs, so this info is added).
- More than 200 TIOS functions are no more "unknown", so they are moved out of unknown.h header file.
- The documentation generally and the Frequently Asked Questions list are updated.

Release 1.5 (29. III 2000.)

- Floating point support is implemented. For this purpose, a new header file timath.h is introduced, with 86 new functions, 4 macro constructors and a lot of constants and predefined types.
- Basic support for the symbolic calculations (including symbolic algebra and calculus) is also implemented. For this purpose, a new header file estack.h is introduced. It contains 26 functions for manipulations with the expression stack (in the near future, I planed about 50-100 new functions in this header file).
- Bugfix: GraySetAMSPlane function from gray.h now works correctly in "Doors" mode.
- Bugfix: grayscale support on Hardware Release 2 calculator is now stable. And, grayscale support now autodetects the hardware version!
- Now you can make programs which return a result to the TI-Basic, i.e. which acts like TI-Basic functions. For this purpose, header files nostub.h and doors.h are slightly changed.
- Two very useful functions are added in args.h header file: GetFloatArg and SkipArg. Also, documentation about args.h is much updated and some serious errors in the documentation are corrected.
- 2 new functions (ASM_call and EX_patch) are added in system.h.
- 94 TIOS functions are no more "unknown", so they are moved out of unknown.h header file.
- Function NoCallBack is now implemented as cast constructor, so it will not be embeded in the program if not used.
- _rowread function from kbd.h is now more reliable.
- All arguments which represent a handle or functions which return a handle are now declared as HANDLE instead of `unsigned int`. Yes, this is exactly the same, but the documentation is now more clear.
- Information about timers in system.h are updated.
- Information for assembly programers are slightly updated.
- Information about how to use floating point and symbolic arithmetic and information about how to return a value to TI-Basic are added in the documentation.
- Frequently Asked Questions are added to the documentation.

Release 1.1 (4. II 2000.)

- Bugfix: strncmp was incorrectly declared as long, although TIOS strncmp puts the garbage in higher half of D0; it is now declared as int.
- Bugfix: type definition for HANDLE in wingraph.h and all.h had a syntax error, which is now fixed.
- AMS 2.03 bugfix: NoCallBack is no more in the TIOS jump table, so this fact is now regarded. This fixed problems with usage of dialogs with AMS 2.03. If you used dialogs.h with previous release of the library, please recompile your program to become compatible with AMS 2.03!
- Grayscale support implemented: a new header file gray.h and a new patch `gray.o` are introduced for this purpose.
- Added support of passing arguments to the programs: for this purpose, a new header file args.h is introduced.
- Header file assert.h is now included in all.h because I found an inteligent method how to implement assert on such way that it does not increase the program size if not used in the program (this is a tricky play with conditional assembling).
- An information how to make a real stdio.h function printf is added into the documentation about printf.h.
- Some additional notes and an example of usage are added for WinOpen function
- Global variable top_estack is moved from unknown.h to args.h.
- Some typo errors in the documentation are fixed.

Release 1.0 (11. I 2000.)

- The first official release.