home *** CD-ROM | disk | FTP | other *** search
/ PC User 2001 August / APC_Aug2001_CD2.iso / features / devtools / files / lb202win.exe / LB202W.EXE / NEWFOR20.TXT < prev    next >
Encoding:
Text File  |  2001-05-31  |  20.8 KB  |  581 lines

  1. Liberty BASIC v2.02 Release Notes - May 2, 2001
  2.  
  3. In this file you will find:
  4.  
  5. - Information about changing the icon for runtime applications
  6. - A list of new features and bug fixes
  7.  
  8. Changing the icon for runtime applications
  9. ==========================================
  10.  
  11. You can change the icon for the runtime engine.  Liberty BASIC
  12. provides a tool that lets you do this.
  13.  
  14. To create an icon you can use the icon editor built into Liberty
  15. BASIC, or you can use a 16-color icon created from some other tool.
  16.  
  17. Let's walk through this.  Let's say I've made a copy of the
  18. runtime engine called freeform.exe.  To install an icon which
  19. I've already created, I would:
  20.  
  21. - Start Liberty BASIC if needed
  22. - Click on the Setup menu and choose Icon Editor
  23. - Now I'll click on the File menu in the Icon Editor and open
  24.   my icon file, named freeform.ico
  25. - To install the icon in the freeform.exe file, I will click
  26.   on File and then choose Write Icon To Module
  27. - Now I'll find the freeform.exe file in the file dialog that
  28.   appears, select it, and click on Ok
  29. - To install the icon in the vwicons.dll file, I will click on
  30.   File and then choose Write Icon To Module
  31. - Now I'll find the vwicons.dll file in the file dialog that
  32.   appears, select it, and click on Ok
  33. - A dialog box will appear.  So I would click to select the
  34.   item 10 DEFAULT and then click on Ok.
  35.  
  36. That's it!  I will need to include a copy of the vwicons.dll
  37. file that I just modified along with the freeform.exe file.
  38.  
  39.  
  40. New Features for Liberty BASIC v2.02
  41. ====================================
  42.  
  43. - The following example programs have been updated because they did
  44.   not work properly with this latest version of Liberty BASIC.
  45.   Thanks for Cameron Arnott for pointing these out!
  46.  
  47.   colorex.bas, graphics.bas, rolodex1.bas, ttt.bas
  48.  
  49. - The sprites help file was updated to include a section describing
  50.   each sprite related command.  Thanks to Alyce Watson for this
  51.   new help file!
  52.  
  53. - Added an exclamation point button to the IDE toolbar next to
  54.   the question mark button (help).  This button opens the release
  55.   notes (this document).
  56.  
  57. - Fixed!  When running a TKN file, functions would often fail 
  58.   with an index out of bounds error when returning from calls to
  59.   other functions.  This bug was not in effect when running BAS
  60.   programs in the editor.
  61.  
  62. - Fixed!  Liberty BASIC was opening a file named 'go' every time
  63.   it started up.  This was preventing it from running from a
  64.   CDROM drive or on a network where read-only permissions were
  65.   in effect.
  66.  
  67. - Changed the name of the vwfloat.dll to vwfloat2.dll so that it
  68.   doesn't conflict with the floating point library of the same
  69.   name used by Liberty BASIC v1.x.  This was causing trouble for
  70.   users who were trying to use both on the same machine.
  71.  
  72. - Fixed a problem where the floating point library wasn't being
  73.   released when Liberty BASIC exits.
  74.  
  75. - Fixed a bug in the grabbing of a sprite background.  When the
  76.   image needed to be stretched to fit, the height of the bitmap
  77.   was mistakingly stretched to be its width.
  78.  
  79. - New!  Added READ, DATA, and RESTORE!  DATA is local to the sub
  80.   or function it is defined in.
  81.  
  82. - Fixed! Sometimes an array inside of a function or sub was
  83.   not always the same array as named outside of a function or
  84.   sub.  This would cause index out of bounds errors, as well as
  85.   some more subtle bugs.
  86.  
  87. - Extended the SORT command so that you can reverse the order of
  88.   the sort by reversing the order of the range of rows to sort.
  89.  
  90.   'sort from row 1 to 50
  91.   sort array$(), 1, 50
  92.  
  93.   'sort reversed from row 1 to 50
  94.   sort array$(), 50, 1
  95.  
  96. - Added information about READ, DATA, and RESTORE to the help
  97.   files, reorganized the Command Reference to make it easier to
  98.   find stuff, and corrected some mistakes.
  99.  
  100. New Features for Liberty BASIC v2.01
  101. ====================================
  102.  
  103. - Added VWICONS.DLL to the Liberty BASIC distribution.  This
  104.   library doesn't seem to be required for Win95 and Win98, but
  105.   is needed for Windows NT (and probably Windows 2000).
  106.  
  107. - Added the above DLL to the distribution list in the runtime
  108.   engine documentation in the helpfile.
  109.  
  110. New Features for Liberty BASIC v2.0
  111. ====================================
  112.  
  113. - Added the ability to set command line arguments for a TKN
  114.   file when you execute it with a run statement, like so:
  115.  
  116.   run "myprog.tkn these words in CommandLine$ of myprog.tkn"
  117.  
  118. - Added a STRINGWIDTH? command to the graphics windows.  This
  119.    lets you get the width in pixels of a string, based on the
  120.   current font of the graphicbox or graphic window.
  121.  
  122.   open "my stringwidth" for graphics as #g
  123.   name$ = "Carl Gundel"
  124.   print #g, "stringwidth? names$ width"
  125.   print width
  126.  
  127. - Using the PRINTERDIALOG command will afford the user the 
  128.   opportunity for pick a different printer for the next run 
  129.   of printing, but then the printer will revert to the default 
  130.   printer unless the PRINTERDIALOG command is used again.  
  131.   When the user chooses a printer the variables PrinterName$,
  132.   PrintCollate and PrintCopies are set with appropriate values.
  133.  
  134. - Added RGB color support to the BACKCOLOR and FILL graphics
  135.   commands.  For example, now you can do this:
  136.  
  137.   print #handle.ext, "fill 255 100 100"
  138.  
  139. - Added support for popup style windows and dialog boxes using
  140.   the window_popup and dialog_popup types, for example:
  141.  
  142.   open "title not displayed" for window_popup as #winpop
  143.  
  144.   There is no close button or system menu for this kind of
  145.   window, but you can close it using Alt-F4.
  146.  
  147. - Added a wait statement.  Use this anywhere you want to stop
  148.   and wait for user interaction, instead of using input and a
  149.   dummy variable name.
  150.  
  151. - Changed the default font to Ms Sans Serif 8 point.  This is the
  152.   same font most Windows applications use.  The editor, debugger
  153.   and main window still use the font specified under Setup/Editor
  154.   Font.
  155.  
  156. - Established the new data return mechanism for widgets in
  157.   addition to sprites.  You can still use the old form.
  158.  
  159.   Old form:
  160.  
  161.     print #handle.ext, "command";
  162.     input #handle.ext, resultVar
  163.  
  164.   New form:
  165.  
  166.     print #handle.ext, "command resultVar";
  167.  
  168. - Added syntax coloring to the LB editor!
  169.  
  170. - Groupboxes now accept handle extensions, so now you can get a
  171.   Windows handle for any groupbox.
  172.  
  173.   groupbox #handle.ext, "My groupbox", 10, 10, 200, 100
  174.  
  175. - Added graphical sprites to Liberty BASIC!  A big thank you goes
  176.   out to Alyce Watson for all her help getting this to work!
  177.  
  178.   The sprite functionality be used with a graphics window or a
  179.   graphicbox.  Only one window at a time can have sprites.  No
  180.   special setup is required.  Just open a window and start adding
  181.   and using sprites.  Here is a simple example:
  182.  
  183.     '-- load a sprite image and background
  184.     loadbmp "smiley", "smiley.bmp"
  185.     loadbmp "landscape", "bg1.bmp"
  186.  
  187.     '-- open a window with a graphicbox
  188.     WindowHeight = 300
  189.     WindowWidth = 400
  190.     open "sprite test" for window_nf as #w
  191.     graphicbox #w.g, 0, 0, 400, 300
  192.  
  193.     '-- add a background and sprite to the window
  194.     print #w.g, "background landscape";
  195.     print #w.g, "addsprite smiley smiley";
  196.  
  197.     '-- animate the sprite
  198.     for x = 1 to 100 step 4
  199.       print #w.g, "spritexy smiley "; x; " "; x
  200.       print #w.g, "drawsprites";
  201.     next x
  202.  
  203.     wait 
  204.  
  205.   Each sprite can have one or more images.  These can be controlled
  206.   explicitly or a sprite can be made to cycle it's images in an
  207.   automatic fashion.  A sprite's set of images can also be swapped
  208.   on the fly with another set.
  209.  
  210.   Each sprite has several useful properties like name, position,
  211.   visibility, scale, orientation, and motion.
  212.  
  213.   A form of collision detection lets your program ask for the names
  214.   of sprites which touch any sprite.
  215.  
  216.   The currently supported commands are (please make suggestions!):
  217.  
  218.     background imagename - Use the image specified as a background.
  219.  
  220.     addsprite spritename imagename(s) - Add a sprite using images.
  221.       Repeating this later replaces the images with a new set and
  222.       sets the first images to be the current one.  Replacing the
  223.       images does not alter the position, visibility or other 
  224.       properties of the sprite with this name.
  225.  
  226.     drawsprites - Update the visual display
  227.  
  228.     spriteimage spritename - Make the image named spritename the
  229.       current image.
  230.  
  231.     spritexy spritename x y - Position a sprite at x, y
  232.  
  233.     spritexy? spritename - Gets the x and y position of the sprite
  234.  
  235.       Acceptable usage:
  236.  
  237.         print #handle.ext, "spritexy? spritename"
  238.     input #handle.ext, x, y
  239.       or
  240.         print #handle.ext, "spritexy? spritename x y"
  241.  
  242.     spritescale spritename percent - Set the size scale of a sprite
  243.  
  244.     spriteorient spritename normal|flip|mirror|rotate180 - Set the
  245.       visual orientation of a sprite
  246.  
  247.     spritevisible off|on - Hide or show a sprite
  248.  
  249.     spritemovexy spritename x y | Move a sprite x, y pixels each 
  250.       time it is drawn
  251.  
  252.     cyclesprite spritename frameCount - Each time a sprite is drawn
  253.       use frameCount to make another image the selected frame.  A
  254.       value of 1 cycles through each image in turn (-1 backwards)
  255.  
  256.     spritecollide spritename - Gets a string with names of sprites
  257.       that overlap the current frame of the sprite named.  Each
  258.       sprite name returned has a space between it.
  259.  
  260.       Acceptable usage:
  261.  
  262.         print #handle.ext, "spritecollide spritename"
  263.         input #handle.ext, list$
  264.       or
  265.         input #handle.ext, "spritecollide spritename list$"
  266.  
  267.   There are several included sprite programs.  There are sprite
  268.   images in the sprites subdirectory and there are a couple of blank
  269.   sprites you can use to create your own sprites using Paintbrush.
  270.  
  271. - Added a TIMER statement.  This permits the creation of one
  272.   operating system timer per program.  This timer provides a means
  273.   to execute code at a branch label every so many milliseconds.
  274.   Branching will wait until an WAIT, INPUT or SCAN statement is
  275.   encountered.
  276.  
  277.     Acceptable usage:
  278.  
  279.     timer 100, [tenthSec] 'GOTO [label] every 100 ms (milliseconds)
  280.     timer 1000, [oneSec]  'change to 1000 milliseconds and [second]
  281.     timer 0               'turn off the timer    
  282.  
  283.   See the clock2.bas program for an example of TIMER.
  284.  
  285. - Added a SELECT command to the text window and texteditor
  286.   control which will position the cursor at column and row.
  287.  
  288.     print #handle.ext, "!select column row";
  289.  
  290. - Added a Printer Font menu item to the Setup menu so the
  291.   user can have separate editing and printing fonts.
  292.   NOTE: There is a problem with bitmapped fonts.  They get
  293.   translated directly into the resolution of the printer,
  294.   which isn't pretty.  I'll have to figure out how to fix
  295.   this, but for now use TrueType fonts like Courier New.
  296.  
  297. - Added min() and max() functions which return the smaller
  298.   or larger of two values respectively.
  299.  
  300. - Enhanced the LB editor so that the blinking cursor
  301.   follows the editor's view whenever you page up or down.
  302.  
  303. - Changed the up and down arrow scrolling so that when you
  304.   reach the top or bottom of the view it scrolls a single
  305.   line at a time, instead of scrolling an amount
  306.   proportional to the editor view.
  307.  
  308. - Changed shift-scrolling, so that when pushing shift and
  309.   up or down arrow and the top or bottom of the view is
  310.   reached it will scroll and let you to continue selecting.
  311.  
  312. - Added a File/Insert File... menu item so that a file can
  313.   be inserted into the file being currently edited at the
  314.   current cursor position.
  315.  
  316. - Added the ability define subroutines using the SUB statement.  This
  317.   is similar to defining functions, but no value is returned.
  318.  
  319.     sub subname var1, var2$
  320.         'some code here
  321.     end sub
  322.  
  323.   To call a subroutine, the CALL statement is used.
  324.  
  325.     call subname expr1, expr2$
  326.  
  327.   See the console3.bas and fform201.bas programs for examples.
  328.  
  329. - Added the ability to set and read the text field part of a combobox.
  330.   See combo.bas for an example.
  331.  
  332. - A new option in the preferences panel lets you set a file that will
  333.   always be loaded when Liberty BASIC is launched.
  334.  
  335. - Added a revamped debug window.
  336.  
  337. - Enhanced font specification so that fonts can support underscore,
  338.   and strikeout.
  339.  
  340.   for example:
  341.     print #handle, "font courier_new 10 underscore strikeout"
  342.  
  343. - Enhanced font point size specification.  Now if you specify only one
  344.   size value it will use this to set the actual point size of the font.
  345.   The goal of this is to retain backwards compatibility with LB v1.x.
  346.  
  347.   for example to create a 10pt font:
  348.     print #handle, "font times_new_roman 10"
  349.   the old way still ok (it doesn't really create a 10pt font):
  350.     print #handle, "font times_new_roman 0 10"
  351.  
  352. - Added a FONTDIALOG command.  To use it, pass in a font specification
  353.   string and give it a string variable name to return the user's newly
  354.   specified font specification.  If the user cancels the dialog box
  355.   the returned value is an empty string.   like so:
  356.  
  357.   facename$ = "courier_new"
  358.   pointsize$ = "10"
  359.   modifiers$ = "bold italic"
  360.   fontdialog facename$+" "+pointsize$+" "+modifiers$, newFontSpec$
  361.   print newFontSpec$
  362.  
  363.   Of course the following also works:
  364.  
  365.   fontdialog "courier_new 10 bold italic", newFontSpec$
  366.  
  367. - Added a set command to the graphics window and graphicbox.  It draws
  368.   a single spot using the current pen.  If you don't specify a
  369.   location it will draw in the current spot.  If you do specify a
  370.   location is will draw the spot there.
  371.  
  372.     print #draw, "set"
  373.  
  374.   or using the following should improve the performance of your
  375.   programs over using place and go.
  376.  
  377.     print #draw, "set 100 100"
  378.  
  379. - Added a toolbar with buttons to the Liberty BASIC editor
  380.  
  381. - Improved the performance of the CALLDLL statement.  Twice as fast.
  382.  
  383. - Added two new forms of the time$() function.
  384.  
  385.   time$ = time$()   'this is same old form, and does the same thing
  386.   seconds = time$("seconds")   'returns seconds since midnight
  387.   msecs = time$("milliseconds")  'returns milliseconds since midnight
  388.  
  389. - Added new forms of the date$() function
  390.  
  391.   print date$()             ' Nov 30, 1999
  392.   print date$("mm/dd/yyyy") ' 11/30/1999
  393.   print date$("mm/dd/yy")   ' 11/30/99
  394.   print date$("yyyy/mm/dd") ' 1999/11/30    for sorting
  395.   print date$("days")       ' 36127         days since Jan 1, 1900
  396.  
  397. - Added a dechex$() function that produces a hexadecimal representation
  398.   of a decimal value.  This is the opposite of the hexdec() function.
  399.  
  400.   hexString$ = dechex$(255)    'produces "FF"
  401.  
  402. - Added recent files to the LB editor file menu.
  403.  
  404. - New! Added the ability to use expressions when specifying controls.
  405.  
  406. - Type checking.  The compiler now knows when to expect a parameter or
  407. value to be a string or a numeric value.  For example:
  408.  
  409.     a = "hey there"    'this is acceptable in Liberty BASIC v1.x
  410.     a$ = "hey there"   'string variable names must now end with $
  411.  
  412. - Color control (see colorex.bas).  Two variables, ForegroundColor$
  413. and BackgroundColor$ let you control color for windows of type window,
  414. and window_nf.  Dialog boxes now automatically have a gray background.
  415.  
  416. - Popupmenu command.  This is just like the menu statement, but it pops
  417. up a menu anywhere you like.
  418.  
  419. - User functions with local variables and branch labels.  The way it is
  420. currently implemented all arrays and device handles (for files 
  421. and windows) are globals.  Here is an example function 
  422. definition.
  423.  
  424. print amPmTime$(time$())
  425.  
  426. function amPmTime$(time$)
  427.  
  428.     colonIndex = instr(time$, ":")
  429.     hours = val(left$(time$, colonIndex - 1))
  430.     amOrPm$ = " AM"
  431.     if hours > 12 then
  432.             hours = hours - 12
  433.             amOrPm$ = " PM"
  434.         else
  435.             if hours = 0 then hours = 12
  436.     end if
  437.     amPmTime$ = str$(hours) + mid$(time$, colonIndex) + amOrPm$
  438.  
  439. end function
  440.  
  441. Notice that to return a value, you must set the variable with the
  442. same name as the function.  In the above case, this is amPmTime$.
  443.  
  444.  
  445. Bug fixes for Liberty BASIC v2.0
  446. =================================
  447.  
  448. - Added code to fix a compiler error that said 'read beyond
  449.   end of stream', where it should say 'syntax error'.
  450.  
  451. - Added a mechanism for compile-time type checking of array
  452.   indexing arguments so that you get a 'type mismatch' error
  453.   at compile time instead of a weird error at runtime.
  454.  
  455. - Changed dialog boxes so that they will position themselves
  456.   relative to the mouse when opened, instead of being
  457.   positioned at the upper left of the display screen.  The
  458.   technique is the same as for non-dialog windows.
  459.  
  460. - Fixed the compiler so that it halts compiling with a
  461.   syntax error if a line of code begins or ends with a colon
  462.   character.
  463.  
  464. - Modified the parser so that for commands which specify an
  465.   array you can now include the closing brace.  This doesn't
  466.   change any functionality, but it meant to make the code more
  467.   readable.  This includes the commands combobox, listbox,
  468.   sort, and files.  The old syntax is also still supported.
  469.  
  470.   Example.  Instead of:
  471.  
  472.     combobox #main.cb, myArray$(, [handler], x, y, wide, high
  473.  
  474.   you can do this:
  475.  
  476.     combobox #main.cb, myArray$(), [handler], x, y, wide, high
  477.  
  478. - Fixed the parser so that remarked code that starts with an
  479.   apostrophe ignore anything after them (as they should).
  480.  
  481. - Set a default mainwin size of 64 columns and 24 lines.  This
  482.   takes effect when there is no lbasic.ini file.
  483.  
  484. - Fixed a bug in the PROMPT and CONFIRM commands where they would
  485.   always assign a string value to the variable specified in the
  486.   command, even if the variable had a numeric name (no $).  The
  487.   following now work correctly:
  488.  
  489.   prompt "How many years old are you!"; years
  490.   print "You must be at least "; years * 12; " months old!"
  491.  
  492. and...
  493.  
  494.   'yesDelete will be 1 for true, and 0 for false
  495.   confirm "Go ahead and delete customer?"; yesDelete
  496.   if yesDelete then call deleteCustomerId custId
  497.  
  498. - Changed the BEEP command to play the default system sound
  499.   synchronously.
  500.  
  501. - Changed the RUN statement (and some other stuff) so that
  502.   when you run a TKN file and it ends, control will return
  503.   to the calling program.
  504.  
  505. - Fixed!  Each time Liberty BASIC was started it would flip the
  506.   order of the recent files because it was writing out the
  507.   opposite order it was reading them in.
  508.  
  509. - Added code which automatically gives files a .BAS extension
  510.   when you use Save As... and do not specify an extension.
  511.  
  512. - Fixed!  When displaying text in a graphics window semicolons
  513.   can now be included in the text.
  514.  
  515. - The font command was not being handled by windows and
  516.   dialogs.  You can now do something like this to set the font
  517.   for all the controls in a window:
  518.  
  519.   'define some controls and open a window or dialog and then...
  520.   print #winhandle, "font courier_new 10"
  521.  
  522. - Rehashed the way that floating point values are displayed
  523.   because many values were losing precision in their printed
  524.   rendering.
  525.  
  526. - Made the following window type specifiers order insensitive so
  527.   that you can reverse the modifiers:
  528.  
  529.     graphics_nsb_nf  =  graphics_nf_nsb
  530.     graphics_nsb_fs  =  graphics_fs_nsb
  531.     text_nsb_ins     =  text_ins_nsb
  532.     text_fs_nsb      =  text_nsb_fs
  533.     dialog_nf_fs     =  dialog_fs_nf
  534.     dialog_modal_nf  =  dialog_nf_modal
  535.  
  536. - Fixed a problem with the ^ operator, which wasn't permitting a
  537.   value of zero or less to be raised to a power.
  538.  
  539. - Fixed: OPEN "comx:????" for random as #handle
  540.   The letters com no longer have to be in uppercase.  Previously
  541.   Liberty BASIC complained that the filename was too long if com
  542.   wasn't COM.
  543.  
  544. - The FILEDIALOG command will now accept string expressions
  545.   instead of only string variable for its title and pathname
  546.   parameters.
  547.  
  548. - Fixed the printing code so that program listings would
  549.   correctly wrap when lines are too long for the page width.
  550.  
  551. - Now when a command sent to a GUI control is not understood, Liberty
  552.   BASIC will stop and provide a description of the problem.  This will
  553.   make it easier to find certain subtle coding mistakes.
  554.  
  555. - Controls will now be added in the order they are listed before a
  556.   window is opened.  Previously they were added in subgroups which made
  557.   tabbing order difficult to work with.
  558.  
  559. - cleaned up casting of integer values when floats have no fractional
  560.   part.  This affected code in many places.
  561.  
  562. - fixed!  Trying to delete the currently unflushed graphics segment
  563.   resulted in a delete metafile error.  Now it will delete the
  564.   segment.
  565.  
  566. - fixed!  Integers were being cast as floats during variable assignment
  567.   in some cases
  568.  
  569. - The random number generator for rnd() has been improved. Now it
  570.   seems much more random.
  571.  
  572. - fixed! type checking was added to array assignments at compile time
  573.  
  574. - New better syntax checking and error reporting.  Much less likely to
  575. see errors like:
  576.  - the collection is empty
  577.  - attempted to access an absent element
  578.  
  579. - Fonts now include support for italic, bold and underscore.  See
  580. fontpowr.bas for an example.
  581.