Liberty BASIC - limited version Release 0.9d
Copyright 1992, 1993 Shoptalk Systems
All rights reserved
Portions copyright 1991, Digitalk Inc.


Liberty BASIC is a personal BASIC programming system for MS Windows 3.x
requiring a 286 (4 Meg RAM recommended for 286/Standard Mode operation), 
or a 386, 486 or better (586/Pentium?) and 3 Megabytes of RAM or more.
When Microsoft introduced Windows 3.0, it didn't come with any programming
facility, so we created Liberty BASIC to be for Windows what GWBASIC and
QBASIC are for MS-DOS, an easy way for the end users to design their own
software.  

PLEASE call or write if you have any suggestions for features
you would like to see in Liberty BASIC!  We really need lots of
feedback if Liberty BASIC is to become the product that _you_
want it to be.

Distribution Policy:

Liberty BASIC 0.9d is Shareware, and it may be copied and freely distributed
providing the following list of files is distributed together and unmodified.
Shoptalk Systems forbids the redistribution of the these files for profit.
A small fee may be levied for distribution costs, but not for the software
itself.

Liberty BASIC Release 0.9d is a subset of the commercial product.  Our hope 
is that you will like this limited release enough to register.  If you find 
it useful we ask you to please register your copy.  $35 will get you the
most recent version (the commercial version, in other words), with technical
support, and upgrades will be made available for only a few dollars.  An
illustrated, bound manual is available for an additional $15 (only $10 if
purchased when you register).  Inexpensive site licenses are available
(educators take note).

Here's what you get for your $35:

 Liberty BASIC 1.x (you will always get the most recent version) with:

 A free copy of BASIC Training from Cascoly Software.  This shareware
   BASIC tutorial starts you on your way learning to program in BASIC ;
 Technical Support ;
 New!  A runtime distribution mechanism lets you share your Liberty
   BASIC programs with others.  No runtime charges apply ;
 Graphics commands for filled polygons, circles, ellipses, pie slices ;
 Define your own Windows dialog boxes with the full suite of dialog
   box objects (buttons, checkboxes, comboboxes, etc...) ;
 Segmented graphics, which let you treat each drawn item as an object
   which can be individually manipulated ;
 The ability to add pull-down menus with accelerator keys to your programs ;
 The ability to trap the window close event and assign a routine to 
   handle it ;
 A more powerful spreadsheet widget ;
 Random access file capability (0.9d is limited to sequential);
 More string, math, and other functions and commands ;
 Slick sample programs that exploit Windows' special features.  For
   example: a drawing app, a graphing app, the tower of Hanoi game,
   a calculator, and more ;
 More...

 See the file LBAS10.TXT for more details on version 1.0a!  To see
 this file, pull down Help and select Version 1.0 Details.


-----------------------------------------------------------------------

About this version:

Version 0.9d adds READ, DATA, and RESTORE.  These three commands add an
 important GWBASIC compatible feature to Liberty BASIC, making it more
 useful in school courses.  See the file diffrncs.txt for more info.

A nice branch label feature added to the Source menu makes it easier to
 get around inside of large programs.

Now you can keep an eye on the compiler as each line compiles.  Simply
 pull down the Setup menu and pick Compiler.  Then click on the pop up
 that appears to toggle the compiler status box on or off.  It slows
 the compile down a little bit to display its activity, but some of you
 requested this feature, so it was added. 

And several bugs were squashed in this release including:

   Discovered a bug that created unpredictable results using certain
   BASIC functions where parameters derived using rnd(), time$(),
   date$(), and any other function where the result is not always
   the same.  Problem fixed.

   When a floating point value was passed to a single
   dimensioned array as an index, a system primitive notice
   was produced, and the program was halted.  This problem
   is now fixed.

   Now if a non-integer is used to index a MID$() function, it
   is truncated and execution continues instead of crashing.

This is a list of files distributed with this release of Liberty BASIC: 

 readme.txt    -  Installation instructions (also in this file)
 liberty.exe
 liberty.txt   -  This file
 install.exe   -  The installation program
 inst.bat
 lbas10.txt    -  A description of Liberty BASIC 1.0a
 summary.txt   -  Summary of commands & functions, hints, etc
 register.txt  -  Order form
 diffrncs.txt  -  A GWBASIC survival guide
 v09d.txt
 c.grp
 d.grp
 libertyb.grp  -  The Liberty BASIC Program Manager group file
 install.err
 lbasic.ini    -  Setup file
 vwabort.dll
 vwbas11.dll
 vwdlgs.dll
 vwfloat.dll
 vwfont.dll
 vwsignon.dll
 vwvm.dll
 ascii.bas
 blank.bas
 brnchtst.bas
 buttons.bas
 circles.bas
 customer.bas
 exponent.bas
 factoril.bas
 for_next.bas
 getchar.bas
 grapher.bas
 graphics.bas
 hanoi.bas
 hilo.bas
 invoice.bas
 mandala.bas
 open.bas
 power.bas
 profile.bas
 read.bas
 sieve.bas
 strtest.bas
 test.bas
 tictacto.bas
 turtle.bas
 turtle2.bas
 exp.bas
 readdata.bas
 grapher.abc
 trio.abc


 +-------------------------------------------------------------------------+
 | Known bugs:  Windows tries to match fonts more or less with size being  |
 | more important than the name of the font.  When Liberty BASIC loads, it |
 | tries to get a font of a certain size.  On some systems, this ends up   |
 | being the Symbol font, which is unusable.  If your system does this,    |
 | then pull down the System menu and select "Fonts...", then find a font  |
 | that suits your taste best.                                             |
 +-------------------------------------------------------------------------+


Version 0.9c took a deliberate step towards making Liberty BASIC more
familiar to GWBASIC programmers.  The PRINT, INPUT, WHILE...WEND, and
boolean operations are more compatible with their GWBASIC counterparts.
A GWBASIC to Liberty BASIC help file has been added.  More will follow.

In 0.9c, the user interface was simplified.  The default drive and 
directory are automatically selected when Liberty BASIC is loaded.  The 
two file menus of previous versions have been integrated and redundant 
items have been eliminated.  A Zoom Text item has been added to the source
menu.

Here is a list of enhancements for version 0.9d:
------------------------------------------------------------------------

BONUS!!! BONUS!!!
   Registered users also receive a copy of BASIC Training, a shareware
   BASIC tutorial from Cascoly Software!

1) READ, DATA, and RESTORE added.

2) Now a list of branch labels can be displayed from which you may select
   one to jump to in the source editor.  This is very useful when jumping
   around a lot in medium to large programs.

3) Some bugs fixed.

4) More sample programs included.

5) Now Liberty BASIC may be registered with a credit card using the
   PsL Credit Card registration service.


0.9c Notes:
------------------------------------------------------------------------

1) The browser/editor now automatically selects the current default
   drive and directory when Liberty BASIC loads.

2) The File and Files menus are now integrated into one File menu, and
   duplicate items are eliminated.

3) PRINT and INPUT are more GWBASIC compatible.  The compatibility can
   be turned off by pulling down the Setup menu and selecting the
   compatibility item.

4) Variable names can now start with reserved words.

5) Boolean AND & OR are more GWBASIC compatible, but bitwise operations
   are still not supported.

6) The INPUT$() function can now return a single keystroke.  Before it
   was only good for file input.

7) The NEXT command is more GWBASIC compatible.  You don't need to
   specify the variable name.  For example:

     for x = 1 to 10
       print x
     next

   is now acceptable.

8) The PgUp and PgDn keys now work when viewing Help files.  Previously
   it was necessary to operate the scroll bars using the mouse.

9) A GWBASIC to Liberty BASIC help file is provided.  The file is named
   DIFFRNCS.TXT, and can be viewed by pulling down the Help menu and
   selecting GWBASIC vs. Liberty BASIC.

10) The WHILE...WEND commands are now GWBASIC compatible.

11) The trim$() function now works.  It didn't before.

12) A zoom text option has been added to the Source menu.



0.9b Notes:
------------------------------------------------------------------------

1) The following arithmetic functions have been added:
    atn( ) -   arc-tangent
    asn( ) -   arc-sine
    acs( ) -   arc-cosine
    exp( ) -   exponent
    log( ) -   natural log
    abs( ) -   absolute value


2) The FILEDIALOG command has been added:

    FILEDIALOG opens a dialog box that permits browsing of
    drives, directories,and files.  When the desired file is found
    and selected, FILEDIALOG then returns the full pathname
    (drive:\directory\filename.ext) of the selected file.

    For example:

        FILEDIALOG "Select a file", "*.TXT", result$

    Causes a dialog box to be opened with the title "Select a file".
    Only "*.TXT" files will be displayed, and when the user makes
    the final selection, the resulting path will be placed into the
    string variable result$.
                                                   

3) The lof( ) function has been added.  This lets you find the length of
an open file.

    For example:

        open "c:\autoexec.bat" for input as #1
        autoexecLength = lof(#1)

    Would set the value of variable autoexecLength to be whatever the
    length of your autoexec.bat file is.

    
4) The using( ) function now works a lot better.


5) The NOTICE command has been added:

  NOTICE pops up a small dialog box containing a message of your choice.

  For example:

      notice "Illegal Entry"

    Would pop up a small notice saying "Illegal Entry".  This notice has
    an OK button which lets the user close the notice.  Program execution
    would then continue.

    In the above form, the title of the dialog box always reads "Notice".
    You can change this using the following form:

      notice "User Error" + chr$(13) + "Limit Exceeded!"

    In this case, the title would be "User Error", and the notice
    would be "Limit Exceeded!".



0.9a notes:
--------------------------------------------------------------------

A bug causing numeric constants between 0 and -1 to be accidentally
translated as positive has been corrected ;

Compile error messages are more helpful now, and the compiler will
highlight the errant line in the source editor ;

An on-line reference facility has been added as selections under
the Help pull down menu of the file browser.  If instruction is needed
for a particular command, simply select that command in the source
(double clicking on the word does the trick), then pull down Help
and select Command Reference ;

Graphics operations are more efficient (faster).  Additionally a circle
command has been added for drawing circles (see circles.bas) ;

Faster compilation ;


  NOTE:  In the file LIBERTY.TXT (this file) in the 0.9 release, the text
  for the TRACE command inaccurately stated that the three levels of
  TRACE worked thus:

    0 - run full speed,  1 - animated trace,  2 - single step

  In actuality, the reverse is true.

  0 single steps, 1 animates, and 2 runs full speed.
  
  Here is a list of the supported commands for the 0.9b release:

  ABS()   ACS()   ASC()   ASN()   ATN()   BEEP   BUTTON   CHR$()   CLOSE   
  CLS   CONFIRM   COS()   DATE$()   DIM   EOF()   EXP()   FILEDIALOG 
  FOR...NEXT   GOSUB...RETURN   GOTO IF...THEN...ELSE   INPUT$()   INPUT   
  INPUT #   INSTR()   INT()   LEFT$()   LEN()   LET   LOF()   LOG()   
  MID$()   OPEN   PRINT   PRINT #   PROMPT   LPRINT   REM   RETURN   
  RIGHT$()   RND()   STOP   END   SIN()   STR$()   TAN()   TIME$()   
  TRACE   TRIM$()   USING()   VAL()   WHILE...WEND

  Here is a list of the supported graphics commands:

  COLOR   GOTO   PLACE   UP   DOWN   GO   LINE   FILL   FLUSH   SIZE   CLS
  FONT   NORTH   TURN   POSXY   PRINT   CIRCLE   HOME

  Here is a list of the spreadsheet commands:

  INDIRECT  MANUAL   CELL   FORMAT   RESULT?   FORMULA?   SELECT   USER
  FLUSH

  Here is a list of the text window commands:

  CLS   FONT   LINES   LINE

  
 


 Release 0.9 Notes:
 ------------------------------------------------------------------------
 
 Some bugs in the parser have been fixed ;

 Multiple windows are supported, buttons can be added where desired.
 A button can cause execution to be transferred to a unique branch
 label (event driven style) or it can return a string like an INPUT 
 statement (procedural style).  Any window can be opened as:

   a graphics window with line and turtle color graphics ;
   a text window (for output or input) with font control ;
   a spreadsheet (controllable via BASIC statements) ;

 Confirmation and prompter style dialog boxes are supported ;

 The debugger has been improved with a variable watch window ;

 BASIC code can now be compiled and run from the start-up browser
 without first opening a BASIC source editor window ;

 Many more statements and functions are included (see summary.txt) ;

 More sample programs are included ;



 Release 0.2 Notes:
 --------------------------------------------------------------------------

 IF/THEN/ELSE now supported.  For example, the following is valid:
   if mid$(a$,index,1) = "." then print "." else print mid$(a$,index,1);

 The compiler is not case sensitive any longer.  Reserved words may be                                                                   
 in either upper or lower case.  It is case sensitive in the sense that
 variable names that are the same but with different capitalization are
 considered unique.  NOTE: VARIABLE NAMES MAY NOT START WITH STATEMENT 
 OR FUNCTION NAMES.

 The simple continuous trace debugger in version 0.1 has been replaced
 by a 3 stage pushbutton debugger permitting single step, continuous
 trace, and no trace (run full speed).  You can move from one mode to
 the other at will.  A variable watch window is not available yet.

 In version 0.1 you needed to recompile every time you wanted to run
 a program.  Now all that is needed is to bring up the pane menu
 for the window the program is running in and select the Restart option.
 This can be done at any time (not just at the end of a program run) and
 will work in Run or Debug mode.

 The ^ arithmetic operator is now supported.  The remaining operators
 are: + - * / AND OR

   NOTE: AND & OR ARE ONLY USEFUL IN IF/THEN/ELSE STATEMENTS FOR
   THE PURPOSE OF DETERMINING LOGICAL CONDITIONS.  FOR EXAMPLE:

        if a > b and matchFlag = 1 then gosub [match]      is acceptable
        let result = -1 and latch                          is not acceptable

 Version 0.1 was only able to represent negative numbers with an
 expression (0-n).  Version 0.2 now supports negative numbers in
 expressions.  For example:
     In version 0.1 -   print rate * (term + (0 - 5))
     In version 0.2 -   print rate * (term + -5)

 STOP and END commands are now supported.

 RND(1) is now supported.  RND(0) is not.
 The random sequence generator is crude, but it works for now.  Subsequent
 releases of Liberty BASIC will have improved 'randomness'.  For now, let's
 just say that RND(1) provides 'arbitrary' number generation.

 STR() was changed to STR$(), which is the proper MBASIC name for this
 function.

 TRACE 0, 1, or 2 is now supported.  This allows control of the
 debugger trace mode to be controlled inside of the program being
 debugged.
                TRACE 0            no trace, run at full speed
                TRACE 1            trace continously
                TRACE 2            single step

   (^^ this is incorrect, see more recent mention, above ^^)


---------------------------------------------------------------------------

INSTALLATION:

  To install Liberty BASIC, first make sure that you are not
  running Windows.  The program INSTALL.EXE is included with
  Liberty BASIC to install it for you.  
  
  Run this program, and you will be asked where Windows resides.  
  The default is C:\WINDOWS.  If Windows resides anywhere else, 
  you must specify it here.

  Now you will be asked where to install Liberty BASIC.  The
  default is C:\LIBERTY.  If you want it to be installed elsewhere,
  then you must specify it here.

  You will then be given an opportunity to abort the installation.
  If you choose not to abort, then installation will begin then.

  Once installation is complete, you may load Windows.  If you
  specified any directory to install Liberty BASIC into other than
  \LIBERTY, then you will need to alter the properties for the
  Liberty BASIC icon to indicate where it is installed.  Otherwise
  you can just go ahead and double-click on its icon to start
  Liberty BASIC.

  Liberty BASIC starts with a file browser window.  It is arranged as
  four panes, three across the top, and one on the bottom like so:

  +--------------------------------------------------------------+
  | -                  Liberty BASIC  c:\liberty             v ^ |
  +--------------------------------------------------------------+
  | a             [1]  | [..]          [2]  | demo.bas      [3]  |
  | b                  | liberty            | read.bas           |
  | c                  | msdos              | test.bas           |
  |                    |                    |                    |
  | select drive here  | select directory   | select file here   |
  |                    | here               |                    |
  +--------------------------------------------------------------+
  |                                                         [4]  |
  |                                                              |
  |                                                              |
  |                                                              |
  |         see BASIC source code here                           |
  |                                                              |
  |                                                              |
  |                                                              |
  |                                                              |
  +--------------------------------------------------------------+

 Select the drive to browse in pane [1], then select the directory
 (usually liberty) to browse in pane [2], then finally the file to 
 browse in pane [3].  When the .BAS file is selected, its source will 
 be displayed in pane [4].  To run the program, position the cursor
 inside of pane [3] and press the right hand mouse button and a menu
 will appear.  Then select the item BASIC source editor, and a new
 window will open which will contain a copy of the source for the
 selected file.  Then position the cursor inside of that pane and again 
 press the right hand mouse button for another menu.  There are two 
 options available, Run and Debug.  Run compiles and runs the program, 
 and Debug provides the additional benefit of a 3 level source level
 debugger with optional watch window (v 0.9 let's you do this in
 pane 4 without opening a seperate BASIC source editor).

 If you want help, you can get this on-line by pulling down the Help
 menu and selecting either Liberty BASIC Notes, or Command Reference.
 If you select a word in the source editor and then select help, the
 system will try to find that word or command in the text.


 HINT for 286 users with only 3 megabytes of RAM:
 ---------------------------------------------------
 3 megabytes RAM is very tight for Liberty BASIC when
 running in Standard Mode.  If low memory errors make
 Liberty BASIC unusable, try to free up as much extended
 memory as possible.  If all else fails, try this:

   Run Windows ;
   Run Liberty BASIC ;
   Exit Liberty BASIC ;
   Run Liberty BASIC again

 As strange a ritual as this may seem, it does something
 to the way Liberty BASIC manages its memory, making
 those low memory errors much less trouble.  We cannot
 guarantee that this trick will work on your system.


 Here's what you get with your registration fee of $35:

 Liberty BASIC 1.x (you will always get the most recent version) with:

 A free copy of BASIC Training from Cascoly Software.  This shareware
   BASIC tutorial starts you on your way learning to program in BASIC ;
 Technical Support ;
 New!  A runtime distribution mechanism lets you share your Liberty
   BASIC programs with others.  No runtime charges apply ;
 Graphics commands for filled polygons, circles, ellipses, pie slices ;
 Define your own Windows dialog boxes with the full suite of dialog
   box objects (buttons, checkboxes, comboboxes, etc...) ;
 Segmented graphics, which let you treat each drawn item as an object
   which can be individually manipulated ;
 The ability to add pull down menus with accelerator keys to your programs ;
 The ability to trap the window close event and assign a routine to 
   handle it ;
 A more powerful spreadsheet widget ;
 Random access file capability (0.9d is limited to sequential);
 More string, math, and other functions and commands ;
 Configure Liberty BASIC to use the system-wide font you specify.  Set
   it and forget it ;
 More...

 See the file LBAS10.TXT for more details on version 1.0a!  To see
 this file, pull down Help and select Version 1.0 Details.

 If you decide to register, send $35 and you will receive the most recent
 version and tech support.   Upgrades will be made available for only a
 few dollars.  You also get an evaluation copy of BASIC Training, a 
 shareware BASIC tutor from Cascoly Software.  An illustrated, bound
 manual is available for an additional $15 (only $10 if ordered when
 you register).

 You can order directly from Shoptalk Systems (cash or check) or from
 Public (software) Library with your MC, Visa, AmEx, or Discover Card by
 calling 800-242-4PsL (from overseas: 713-524-6394) or by FAX to
 713-524-6398.  THESE NUMBERS ARE FOR ORDERING ONLY.

 Shoptalk Systems can NOT be reached at those numbers.  To contact
 Shoptalk Systems for information about dealer pricing, volume
 discounts, site licensing, the status of shipment of the product, the
 latest version number or for technical information, or to discuss
 returns, call or write Shoptalk Systems (see address and phone # below).

 Here is some other stuff in the works:

   Incremental compilation ;
   Program chaining ;
   Graphics Bitblitting ;
   Powerful animation capabilities ;
   Debugger enhancements ;
   Access to Dynamic-Link-Libraries ;
   DDE capability ;
   The ability to use externally defined resources ;
   More ...!!!


 PLEASE call or write if you have any suggestions for features
 you would like to see in Liberty BASIC!  We really need lots of
 feedback if Liberty BASIC is to become the product that _you_
 want it to be.

 To find out more write or call:

   Shoptalk Systems
   P.O. Box 1062
   Framingham, MA  01701

   508-872-5315

   Or contact Carl Gundel on Compuserve at 71231, 1532
