Liberty BASIC v3.03 release notes
May 26, 2003
----------------------------------------------------------------------

-A few new example programs.  Thanks to Alyce Watson, Jay Shrimplin,
and David Drake!

  midiplay.bas     - Shows how to play MIDI music files
  joypos.bas       - Shows how to read joystick position and buttons
  piano4.bas       - An updated version of the piano.bas program
  textcalendar.bas - A simple demonstration creating a calendar
  hockey.bas       - Play hockey against the computer

- Fixed some problems with error indication of sub and function
command syntax

- Fixed the coloration of the keyword STEP

- Fixed the coloration of variables containing periods

- Fixed a bug where opening from the recent files and using
"Save As..." didn't adopt the path of the opened recent file

- Fixed the prompt command so that it accepts a numeric variable and
not just a string variable

- Adds support to specify a title bar in the prompt window by adding
a chr$(13) into the text string, just like with notice

- Fixed a problem where a select statement with an expression calling
a user function actually calls the function twice.

- Fixed the fs styles for dialog boxes so they really do open full
screen.

- Fixed some problems with error indication of sub and function
command syntax

- Fixed a bug in the hexdec function which was giving wrong answers
when hex values are padded with non hexadecimal characters

- Fixed a problem with the timer, which was ticking even when the
prompter window is open.  This caused the event cache to fill up
with timer events which all got handled when the prompter was closed.

- Fixed a problem where memory for types ptr and struct allocated
in structs was not being properly freed up.  This would sometimes
cause data returned from the structs to be corrupted, and also
caused a memory leak.

- Fixed a bug where callbacks were not working in the debugger. 
They will work now, but single stepping isn't supported.  Once in
the callback, the debugger will run that code at animated trace,
and then kick back to single step when returning from the callback.

- Added an updated help file courtesy of Alyce!

- New version of FreeForm included (thanks John Davidson and anyone
else who contributed!)


Liberty BASIC v3.02 release notes
Sept 16, 2002
----------------------------------------------------------------------

Notice: See the end of this document for v3.02 fixes

New features of Liberty BASIC v3.02 include:

- Included new help file (Thanks to Alyce!)

- Included new version of Freeform (Thanks to Steve, John, and
the rest of the Liberty BASIC Community!)

- Changed to a two tiered registration system.  Now users can buy
SILVER or GOLD licenses.  A SILVER license has no size restriction on
the programs it will run, and a GOLD license also adds runtime engine
support to this.  Existing Liberty BASIC v3.0x licenses still work
fine with v3.02 (they are considered GOLD licenses).

- Added the ability to pass in a number to the date$() function and
it returns a string representing the date as "mm/dd/yyyy".

- Improved BASIC program execution speed up to 10%.

- Added an auto indenting feature to the Liberty BASIC source
editor.  This can be turned on and off in the Preferences window.

- Added a new form to the word$() function.  You can now specify
the delimiter string so optionally you can read comma delimited or
other strings like so:

  token$ = "*"
  parseMe$ = "this,is,,a,test"
  idx = 0
  while token$<>""
    idx = idx + 1
    token$ = word$(parseMe$, idx, ",")
    if token$ <> "" then print token$
  wend

Also, notice the doubled up comma in the test string.  This will
be returned as a comma.  This is useful for detecting empty
delimited fields in a string.  Try substituting the following
lines:

  parseMe$ = "thisarfisarfarfaarftest"

and:

  token$ = word$(parseMe$, idx, "arf")

- Added the ability to get the number of days since Jan 1, 1901
using the date$() function as shown:

    'some examples
    print date$("4/1/02")
    print date$("1/1/1901")
    print date$("April 1, 2002")
    print date$("Apr 1, 2002")

- Changed <, <=, >, >= string operators so that they they will now
compare strings in a case sensitive way like most other programming
languages do.

- Added a txcount(#handle) function to get a count of bytes in a
serial communications transmit queue.

- Added support for the double type (double precision floating
point) in structs

- Added a randomize command so that you can seed the random
number generator in a predictable way.

  'this will always produce the same 10 numbers
  randomize 0.5
  for x = 1 to 10
    print int(rnd(1)*100)
  next x

- Added a locate command so that the cursor can be positioned
anywhere within the mainwindow.  Here is a short demo:

  'plot a wave
  for x = 1 to 50
    i = i + 0.15
    locate x, 12 + int(cos(i)*10)
    print "*";
  next x

-Changed the fs part of a window style so that it sizes the window
normally (using WindowWidth and WindowHeight) and then maximizes
the window right after opening it.

-Adds support for reloading the current file being edited if the file's
date and time have been updated.  This happens when the editor
has been activated.  This option can be turned on or off in the
preferences dialog.  The default is off.

-Changed the debugger so that it uses the equal sign instead of a dash
to separate a variable's name from its value.

-Improved support for running over networks including the general
bolstering of support for files and paths making use of network
resource locators (ie. \\netres\name).  Liberty BASIC should now be
able to open and save files using resource locators in their path
names, and it should also properly treat file specifications having
resource locators in their path specifications.  Commands such as the
following are supported:

  open, name, rmdir(), mkdir(), kill, files, loadbmp, bmpsave,
  bmpbutton, filedialog, playwave, run

Fixes for Liberty BASIC v3.02!
----------------------------------------

- Fixed a compiler bug when using a PRINT statement with only a
semicolon like so:

  print ;

- Fixed a bug in the WAIT command which was messing around with
the position of the flashing cursor in the main window, causing
printed lines to run together.

- Fixed a bug in the USING() function where it was not rounding
numbers when the template was for an integer, like so:

  print using("###", 3.99)  'this was printing 3

- Fixed.  FOR/NEXT and WHILE/WEND loops were not managing their
context properly in recursive calls.

- The syntax colorer was not registering the token TO as a reserved
word.

- Fixed the compile error reporting for wrong number of array
parameters and for array parameter type mismatch.  It was not
correctly reporting the error when compiling for debug, and it
was failing to highlight the errant line of code.  Additionally,
the error was different when running than for debugging.

- Fixed the "Float underflow exception".  Now when the result of a
calculation is too small it will in effect become zero.

- Bolstered syntax and type checking of the built-in functions.
This will reduce the incidence of compile errors that result in
a dump to error.log and also increase the consistency in the
error messages that appear at compile time.

- Fixed a bug where closing a program's mainwindow while the
program is waiting for keyboard input at an input$() function
would produce an index out of collection bounds error.

- Fixed a bug where while/wend loops having user functions as
part of the loop conditional would only execute those user
functions for the first iteration of the loop.  The following
example would run indefinitely:

  while myFunction() < 10 or rndFunction() <> 20
  print a(0)
  wend

  function myFunction()
    a(0) = a(0) + 1
    myFunction = a(0)
  end function

- Removed DO and LOOP from the list of commands because they aren't
commands.  These tokens were being treated as though they were
Liberty BASIC commands, but this would only cause the compiler to
crash if you tried to use them.

- Strengthened the error checking for the following: calldll,
callfn, callsub, gettrim, kill, let, lprint, name, notice, open,
out, print, prompt, titlebar

-Make sure that the initial font gets properly added to the first
open segment when opening a graphics window or a graphicbox.

-Make sure that graphicboxes get painted white when their parent
window is opened.

-Eliminated a bug causing an endless loop on certain misformed
syntax:

  case a = b )    'the ) was causing an endless loop

-Fixed the text_fs_nsb style so that it doesn't crash when you try
to use it.

- Fixed a problem with the input$() function, which was echoing
keys pressed to the mainwindow when it should not.

- Fixed a bug where using the restart item in the mainwindow
would cause the mainwindow would become deactivated.


-Fixed a problem with the highlighting of source code when a compile
error happens during "Make TKN file".  It would always highlight the
line after the error.

-Modified the syntax colorer so that it colors reserved words blue
instead of coloring commands blue.

-Extends the error line selection in the source pane so that it
spans over logical lines.

-Fixed the execute feature in the debugger so that it produces a
proper error message when you try to execute code that calls a sub
or a function.

-Fixed the debugger so that it truncates variable items that would
display more than 200 characters in the debugger.  This is to
prevent protection violations and or crashes that may occur with some
video drivers when they attempt to display very long strings on the
screen.

- Fixed a bug in the chr$() function which caused it to choke on
floating point values.

- Fixed a bug that permitted IF/THEN statements to have a colon
after the THEN, like so:

  if a < 5 then : print "a is less than 5"
