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 ). 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.