New features and fixes of Liberty BASIC 1.2 for Windows!

>>> NOTICE to users of Liberty BASIC v1.1 <<<
  The format for *.TKN files has been changed to make them more
  secure.  You cannot use your v1.1 or v1.0 format *.TKN files.
  Make new ones from your existing *.BAS files.

1) A new editor is used, offering one editing window pane instead
of the four in the previous versions.  This was changed mostly
because of customer feedback that they didn't like the old version.

2) Now you can run *.TKN files straight from the Run menu (formerly
call the Source menu)!

3) Programs will run up to 30% faster in processing intensive tasks.

4) Programs are more memory efficient.  This also improves speed,
especially on tight memory systems.

5) LINE INPUT has been added for sequential file input.

6) A bug was fixed that prevented the use of the name File as a
pull down menu name.  Files was often used as a substitute.

7) When opening a window with textbox controls, the focus is now
automatically given to the first textbox.  Before it was necessary
to Tab to the first item.

8) To give any control inside a window the focus, just print setfocus
to the control, like so:

    print #main.name, "setfocus"

    Note: some controls expect !setfocus instead of setfocus

9) A visual design tool called FreeForm is included which lets you
design your windows and controls graphically, and it will write the
Liberty BASIC code for you!  The program is written in Liberty BASIC
and the code is included, so you can examine a real application
written in Liberty BASIC, and also so that you can modify it to
suit your needs.

10) Buttons can now be sized as desired just by tacking on a width and
height onto the old button command syntax.  For example.

    button #1, "Red", [colorRed], UL, 5, 5, 30, 20

  This produces a button labeled Red, 30 pixels wide and 20 high.
  Previous versions autosized the buttons.  The format below is still
  valid:

    button #1, "Red", [colorRed], UL, 5, 5


11) Window sizing and placement have been modified.  The default size
is different (and using values between 0 and 1 for WindowWidth and
WindowHeight isn't valid anymore).  Windows will position themselves
depending on mouse position when they open unless UpperLeftX and
UpperLeftY are deliberately modified.

12) The Go To Branch Label window is now much bigger and displays more
items, making program navigation easier.

13) Kill Basic Programs now kills ALL types, those started from Run,
from Debug, and also *.TKN files.

14) The Platform$ system variable permits a running program to know
which version of Liberty BASIC is running.  It will either be
"Windows" or "OS/2".  The Version$ system variable now reads "1.2"

15) A Drives$ system variable has been added, which returns a string
containing all available drive letters like so:

    print Drives$

  might produce: "a: b: c: "

    Hint: Use the word$() function to get each drive letter out.

16) A bug was fixed that would occur sometimes when trying to close
an application that uses windows with controls.  The error would
read like this:

    Handle #handle.xxxx not available

    Where #handle.xxxx would be any valid handle pointing to a
    window control

17) Improved printing support in graphics windows (still needs more
work <g>).

    Note: It is important to send flush, and then print like so:

    print #graphicsWindow, "flush ; print"

18) Some debug code was accidentally left in.  This code would cause
something like an invoice or packing slip to appear in front of
anything you LPRINTed.  This code has been removed.

19) The cleaning up of bitmaps (when loading bmp files with LOADBMP or
when using the BMPBUTTON command) has been greatly improved, helping
so solve a diminishing resources problem.

20) The spreadsheet window style now uses a fixed width font to
remedy the broken looking text produced when labels stretch across
cells.

21) A compiler design flaw was ELIMINATED.  The compiler would try
to bounds check array references at compile-time.  This was ill
conceived.  If you had code similar to the examples below,
you would get an out of bounds error during compile.

    print stuff(index - 1)
 or
    a$(r - 1) = a$(r)

Because the variable index was not defined (was zero) at compile
time, subtracting 1 would result in -1.  Since the compiler would
check the validity of this result at compile time, and error would
be reported.  The second example is similar.

22) The spreadsheet now supports cell selection using the mouse.

23) A bug preventing the use of this form of BUTTON (or BMPBUTTON)
along with the NOMAINWIN statement was fixed:

    'the "ok" literal replaces what is usually a branch label.
    'this would cause the input r$ below to assign "ok" to r$
    button #handle, "Okay", "ok", UL, 5, 5
    open "Window" for window as #main
    .
    .
    .
    input r$

24) The Branch Labels window feature of the Liberty BASIC editor
was omitting indented branch labels from its list.  This has been
repaired.

25) When opening a random access file, if the record length set
by the open statement disagreed with the total of field lengths
specified by the subsequent FIELD statement, an ambiguous error
message would appear, and the program would bomb.  Now Liberty
BASIC properly reports the error.

26) Added a KILL command to remove disk files.  The standard
BASIC syntax is used, for example:

    kill "myfile.txt"

27) Added a NAME command to rename disk files.  The standard
BASIC syntax is used, for example:

    name "myfile.txt" as "myfile.old"

28) Added a RUN command to permit the execution of external
Windows and DOS programs.  Control is provided over the initial
display of Windows programs, and DOS programs are controlled by
their own *.PIF file entries.

    run "winfile"              - this will run the file manager
    run "winfile", minimize    - this runs file manager minimized
    run "mybatch.bat"          - this runs a DOS batch file
    run "\DOS\QBASIC.EXE"      - this runs QBASIC on most systems

Execution of the parent Liberty BASIC program does not halt
during execution of a RUNned program.  If this is desirable, you
can include a NOTICE statement after the RUN, like this:

    run "mybatch.bat"
    notice "Batch file completed."

29) Added a PLAYWAVE command to permit the playing of Windows
*.WAV files.  Files can be set to play synchronously,
asynchronously, and continuously looping.

    playwave "bell.wav", sync    - plays bell.wav synchronously
    playwave "bell.wav", async   - plays bell.wav asynchronously

    playwave "bell.wav", loop    - replays bell.wav over and over
    playwave "", sync            - stops replaying looping wav file

30) The splash screen that displays while loading Liberty BASIC was
failing to release its memory.  This has been repaired.

31) Logical line extension has been added.  This lets you spread
a line of code over several physical lines by using the _ (underscore)
character in your source code like so:

    if sLength > len(inSet$(x)) then flag = 1 : gosub [set] else flag = 0

  might be instead:

    if sLength > len(inSet$(x)) then _
        flag = 1 : _
        gosub [set] _
      else _
        flag = 0

NOTE: Blank lines for spacing are not valid.


32) The ability to add external programs to the Run menu has been added.
This lets you add any external DOS or Windows programs (or Liberty BASIC
*.tkn programs!) to your Run menu, so you don't need to find the
Program Manager to run your frequently needed things!  Just pull down
the Setup menu and select External Programs to add your own!

33) Fixed a problem in the debugger where certain variable changes were
not being displayed.

34) Now when you close down a program you're debugging, it's debugger will
automatically close with it.  The reverse is also true.  Closing the
debugger will terminate its associated program.

33) A bug was fixed that caused the vertical scrollbar of a graphics
window to mirror the action of a user-dragged horizontal scroll bar.

34) Two new window types are added: modal versions of dialog and of
dialog_nf.  Opening either of the new window types (dialog_modal or
dialog_nf_modal) causes the window active at that moment to become
input disabled.  If you click on the disabled window, you will get the
default system warning bell, and the modal dialog will remain the
active window.  This will continue until the modal dialog is closed.
Note: The modal aspect of these window types is disabled during
debugging to prevent the debugger from becoming disabled by a modal
dialog box.

35) The function upper$(aString) was added to convert the alphabetic
characters of aString to all uppercase.

36) The function lower$(aString) was added to convert the alphabetic
characters of aString to all lowercase.

37) Most documentation has been converted to Windows Help format and
made available from Liberty BASIC's Help menu.
