----------------------------------------------------------------------------- Copyright (C) 2023 Jorge Giner Cordero This file is part of bas55 (ECMA-55 Minimal BASIC System). bas55 license: GNU GPL v3 or later. ----------------------------------------------------------------------------- 2.00 2023-05-04 * IMPORTANT NOTICE: from this version, bas55 is under the GNU General Public License version 3 or later. Previous versions were under a Expat/MIT license. The manual is under the GNU Free Documentation License. * Support for GNU Readline added. Changing to GPL makes it easier to support GNU Readline, which as of this writting works perfectly and is very robust, compared to the readline interface of NetBSD's libedit that we were using, which was not behaving completely compatible with GNU Readline. This means that on GNU/Linux and BSDs you can compile the program with GNU Readline support or NetBSD libedit support, if they are installed. I recommend that, if you can, use GNU Readline. See the README file for instructions on how to compile the program with support for one or the other. * Fixed: we were allowing to enter arbitrary characters when INPUT was called and entered them between double quotes. Only the characters allowed by the standard are accepted now. Moreover, characteres entered are automatically set in upper case. * The maximum number of characters on a BASIC line has been limited to 72 to comply with the standard and other implementations. Previously we where allowing for 80 characters on a line. * Fixed: we were allowing to assign, to a string variable, strings with more than 18 characters, either by LET, INPUT or READ. The standard limits to 18 characters. * Removed the --license command line option and the LICENSE command. * Fixed bas55.info top node. * Corrected typo in P008.BAS (BEING -> BEGIN). Thanks John. * Fixed SIEVE.BAS so it initializes its array to zeros to comply with other ECMA55 implementations. * Added HAMURABI.BAS and BAGELS.BAS, courtesy of B. Watson. * Added THANKS file. 1.19 2020-10-02 * Fixed: bas55 now compiles without errors on platforms where GCC defaults to -fno-common. Source changes -------------- * src/ecma55.h: 'union instruction *code' is now declared as extern, so it compiles when GCC defaults to fno-common. The rest of global variables were correctly declared as extern. Thanks again to John Gatewood Ham for the bug report. 1.18 2020-03-28 * bas55 now uses its own implementation of the functions SIN, COS, TAN, ATN, EXP, LOG and SQR. This will make (hopefully) the results from this functions to be the same on every platform. * bas55 now uses its own random number generator for the function RND to get the same result on every platform. * Numbers are read up to 17 significant digits (previous versions were limited to only 6 significant digits). * All these changes have been made in order to make bas55 behave the same (give the same results) on every platform. Probably there are still things to do to fully achieve that, but at this moment, the tests bundled with bas55 give exactly the same results in the platforms I tested (previously many of the tests were failing on Windows due to differences in decimals or roundings). * Numbers are written up to 8 significant digits (previous versions were limited to only 6 significant digits). Due to this the PRINT zone length is now larger than before. * Multiple fixes to the NBS tests bundled. Thanks again to John Gatewood Ham. Source changes -------------- * bas55 now requires a C99 compiler to build. Come on, we are in 2020. * Added src/bmath.c: Here are all the mathematical functions implemented. * src/vm.c: strtod55(): Bug fixed. We were using the 'long' data type in this function and file. But a long is only 32 bits on Windows (64 bit on Linux). When the read precision was raised to 17 significant digits, this was failing. Now we use the int64_t data type. * Added tools/newton.c. This is a small program used to calculate the coefficients for the polynomials used to approximate the functions in bmath.c. * Updated documentation bas55.texi. 1.17 2018-10-14 * Updated project website to https://jorgicor.niobe.org/bas55 . Source changes -------------- * src/Makefile.am using AM_CFLAGS and AM_CPPFLAGS instead of bas55_CFLAGS and bas55_CPPFLAGS, which avoids generating object files with prefixes as we don't need the feature. 1.16 2018-06-02 * Fixed tests/chkout.inc which caused tests 36 and 161 to fail. We were removing the path from error files and when the path was . , we were using the regular expression ./ , so we were removing any character followed by a / . 1.15 2018-03-08 * Most parsing errors are now much more detailed, printing the line and the point of the error. For example: 250: error: syntax error LET A=5**2 ^ * Previously, using a number where a string was expected or viceversa was reported as a cryptic "Syntax error". Now, these errors are semantic, and we give more detailed information about what is wrong. For example: 270: error: string expression expected LET A$=X ^ 1.14 2018-02-22 * Checking for uninitialized array elements now is possible in debug mode. * More helpful error diagnostics: now we can show the name of the variable involving an error (if any), as well as the array indexes if for example we get an out of range error. 1.13 2018-02-14 * Added support for the NetBSD libedit library to add enhanced editing capabilities on GNU/Linux or BSD systems, like a history of previous typed lines, command autocompletion, direct access to a line by its number to edit it, etc. See the manual for details and the README file to know how to compile bas55 with libedit support. Note: This does not apply to the Windows version. Source changes -------------- * Updated the manual, to talk about the editing capabilites on Windows and Unix-like systems. Also fixed some typographical errors. * Removed all permission notices from source files. The license and the copyright is at the top level of the project in the file COPYING and applies to all the project except otherwise noted. 1.12 2017-11-20 Source changes -------------- * Fixed the P206.BAS test file which had typographical errors. Thanks to John Gatewood Ham. 1.11 2017-04-04 * Separating a long command line option from its argument using '=' now is accepted, for example, `--gosub=10`. Source changes -------------- * Updated copyright notices to 2017. * Prepared for VPATH builds. This includes changes in the tests. Now it is possible to compile the program in a folder different from the source folder. Still some tools generate files in `srcdir` (*textinfo*) but that seems the accepted behaviour. * Added `bootstrap` script to regenerate the *autotools* files for people cloning the project from revision control. * Renamed `ecma/` folder to `src/` . * Added `-Wall -Wdeclaration-after-statement` to the C compiler if allowed. Included the macro `m4/m4_ax_check_compile_flag.m4` to check if the compiler supports that. * Fixed tests to work on Windows. Now we don't take into account end of line differences. Still some tests don't pass due to implementation diferences in the math functions. 1.10 2016-08-09 * Updated copyright notices to 2016. * Source: the configure script and Makefiles are generated from autoconf 2.69 and automake 1.15. * Source: for the p117.test, we only check if the test passed, we do not check for individual line changes, because depending on the C standard library used we can get different results. * Source: including mkwin script to build on Windows. 1.09 2016-01-23 * Bug fixed: a program that called RANDOMIZE was generating the same sequence if the program was executed several times in the same second. Thanks to John Gatewood Ham for reporting. 1.08 2016-01-04 * Bug fixed: do not accept a program with lines after an END statement. Thanks to John Gatewood Ham for reporting. * Added automatic tests for the NBS basic tests and some others. 'make check' runs the tests. 1.07 2015-11-23 * The fixed error in the previous version introduced a serious bug with TAB, as it expected a space after it. Fixed. Thanks to John Gatewood Ham for reporting. 1.06 2015-11-15 * Issue errors when a keyword is not followed by a space. For example, PRINT"HELLO" is not accepted now; it must be PRINT "HELLO". This is required by the standard. Thanks to John Gatewood Ham for reporting. 1.05 2015-11-03 * Bug fix: READ had a bug for arrays with two dimensions: the data was read in the wrong slot. Thanks to John Gatewood Ham for reporting this serious bug. 1.04 2015-09-04 * Bug fix: running a program that uses DATA statements more than once in edit mode, now behaves correctly. Thanks to John Gatewood Ham for reporting. 1.03 2015-08-31 * Catching Ctrl+C signal to break running programs instead of aborting. * Fixed reseting the print column to zero after input operations. * Implemented debug mode to warn about variables that are used before they are assigned a value. Documented. * Increased the print margin to 80 characters. * Fixed precision when reading numbers in some cases. * Better error messages. * Documented implementation-defined features. 1.02 2015-05-11 * Paths passed to LOAD and SAVE were changed to upper case. It was impossible on Unix systems to specify a lower case path. Fixed. * When a file was loaded using LOAD, the spaces between the line number and the actual instructions were discarded. Fixed to allow indentation. * Fixed some compiling warnings that could cause problems. * The source distribution has been fixed and improved to compile correctly on Unix systems (not only on Cygwin). 2017-04-04 * Note: source changes are now listed in the NEWS file. 2016-08-09 * configure.ac: Version 1.10 . * configure and Makefiles: Generated from autoconf 2.69 and automake 1.15. * ecma.c: Updated copyright notices. * p117.test: This is an informative test. We can get different results depending on the libc version used. Only checking for passed test. * mkwin: Script to build on Windows under Cygwin. 2016-01-23 * vm.c (randomize_op): RANDOMIZE was using time() to get the current seconds and init the seed. If the program ran several times in the same second, the results were the same. Using gettimeofday() in unixes and GetTickCount() on Windows. Also mixing the result so it is not increasing. 2016-01-04 * tests: Added basic NBS tests and some others. 'make check' runs the tests. * parse.c (compile_line, end_decl): Do not accept a program with lines after an END statement. 2015-11-23 * lex.c (lex_parse_id): the previous fix introduced a serious bug with TAB, as it was considered a keyword and the we expected a space after it. Fixed. 2015-11-15 * lex.c (lex_parse_id): issue errors when a keyword is not followed by a space. For example, PRINT"HELLO" is not accepted now; it must be PRINT "HELLO". This is required by the standard. Thanks to John Gatewood Ham for reporting. 2015-11-03 * vm.c (read_table_op): bug fix, the data was read in the wrong slot. Thanks to John Gatewood Ham. 2015-09-01 * vm.c (run): the current index to the DATA elements was not restored after the program executed in the editor. Thus the next execution gave "not enough DATA elements". Added call to restore_data in run. Thanks to John Gatewood Ham. 2015-08-31 * vm.c: increased print margin to 80 characters. * vm.c (print_num): factorized print_num into sprint_num that prints in a string and not in a file, so we can have the length of the generated string before printing. print_num uses sprint_num. Modified print_unescaled as well. * bas55.texi: documented implementation-defined features. 2015-08-12 * datalex.c (strtod): not using pow. Fixed handling of 0.700000000E+01 in NBS test 43 not being exact. * various: errno set to 0 inside parse_int, parse_double, parse_data_elem, call_ifun1 and others, instead of before every call. Fixed bug: 10 PRINT 1E99999 20 END run 10 error: invalid line number * various: better error messages. 2015-08-05 * codedvar.c: added; functions previously in parse.c to handle coded variable names. * various: Implemented debug mode to warn about variables that are used before they are assgined a value. 2015-08-03 * vm.c (input_op): reset s_print_column to 0. 2015-08-02 * vm.c (run): catched Ctrl+C signal to break running programs instead of aborting. 2015-05-30 * edit.c (toupper_str): Including 'ctype.h' for 'toupper' function. 2015-05-28 * grammar.y: Fixed indentation. * err.c (eprogname): Using PACKAGENAME as the program name and putting a space after the ':'. 2015-05-11 * configure.ac: Check and for the math (-lm) library. The project compiled correctly using using Cygwin, but was failing in a real Unix-like OS. * doc/bas55.1: Man page generated when needed using `help2man'. * doc/bas55.texi: Spelling checked. * *: Removed DOS line endings. * ecma55.c: Using `config.h' package constants. * parse.c (cerrorln): Stop printing errors when E_BIG_RAM already issued. * vm.c (run): Less verbose. * edit.c (edit): toupper_str() changed after trying commands. The paths to LOAD and SAVE were changed to upper case, a bug on case sensitive systems. * util.c (toupper_str): moved from edit.c. Made global. * cmd.c (get_range): `len' changed to size_t. (load): `chari' changed to size_t. (load): fixed discarding whitespace after the line number. (set_gosub_cmd): `len' changed to size_t. * lex.c (is_basic_char): Parenthesis around conditionals. * parse.c (free_jumps): Removed unused function. * ecma55.sln: Removed. * ecma55/ecma55.vcproj: Removed. * /tools: Removed. 2015-01-31 * ifun.c: Visual C++ refused to compile the release version when using a pointer to the `floor' function. Using #pragma function now.