Author Topic: SpecBAS 0.900 Released  (Read 1859 times)


  • Guest
SpecBAS 0.900 Released
« on: April 20, 2017, 10:16:09 AM »
Against my better judgement, here's 0.900. It's got lots and lots new, but mostly the new shiny is the editor.

You can indent your code, you can edit it inside the listing window. You can use the Direct Command window just the same as you used to - but do read the supplied Readme file first for important control key changes! Oh, you can also cut, copy and paste code to and from the listing window.

It's not been extensively tested, so please, PLEASE report bugs if you find them!

Get it here.

Here's the What's new:


NOW IN 64BIT! SpecBAS32.exe and SpecBAS64.exe are newly available. The 64bit version is experimental, so feedback will be nice :)
NOW IN OPENGL! Using OpenGL in selected binaries (marked -gl) to display the screen, reducing the workload on the CPU.


  Added word (or rather, "line") wrapping. The direct command window can be used as it used to now, and lines will be forced to fit. Change the EDITORWRAP sysvar to enable/disable it.
  DeleteAll banks no longer removes system banks unless SpecBAS quits - preserves keyclicks.
  Added colour capability to POLYLINE/POLYGON with an array as a parameter
  Added particle engine - PARTICLE array() FRICTION n GRAVITY m,o
  Added radius to PLOT Array() handler in Array(n,4)
  Added INVERSE, ITALIC, BOLD and TRANSPARENT 8 - leave them as they are, same as Sinclair BASIC
  Changed Ctrl+Up/Down to jump to line starts prev/next
  Added Ctrl+Backspace/Delete for deletion of words
  Added F9 (run) and F10 (goto) hotkeys
  Added ITALIC and BOLD commands. PRINT embeddable, but BOLD is only for mono fonts.
  Added RENUMBER and DELETE handlers to the new editor.
  Added Listing reordering on CTRL-R.
  Added new editor, supports indentation and split lines.
  Further CPU reductions.
  Reduced idle CPU usage due to mouse moves triggering screen updates.
  Optimisation to IF/ELSE addressing string characters
  Reduced CPU usage when idle and during the editor quite significantly
  Fixed problems with using compound assigns in numeric arrays
  OVER 11 - Recolour mode. Any pixel that has a value of 0 gets the current PAPER colour, otherwise INK
  WINDOW FLIP id and WINDOW MIRROR id added - They do exactly what they say they do
  GRAPHIC FLIP and GRAPHIC MIRROR now also take a stringvar which, when containing a valid graphic, will flip and mirror it in-place
  Compound operators (+=, -=, *=, /= etc) can be used in expressions - LET b=a+=1 will add 1 to a and then assign the result to b
  MAT INTERP a(),b() TO c(),amount interpolates values of two similar arrays by a certain amount into a third array
  INTERP(start,end,amount) function interpolates between start and end by the amount (0 to 1)
  You can now use the {} characters to create comments inside a line
  Short-circuit boolean evaluation for numeric AND/OR speeds up condition testing
  BINV(n,m) and BREV(n,m) invert (or reverse the order of) m lower-order bits in n
  INPUT ERROR now takes an optional REPEAT keyword to re-do the INPUT when an error occurs
  64bit and 32bit builds display their bit-types on the title bar, along with FPS information
  You can now use the ";" character to repeat a keyword with new parameters - e.g, CLS 1;2;3;4;5;6;7 will issue 7 CLS with different colours
  64Bit-specific optimisations to many operations (mostly graphics, but memory filling and allocation too)
  Loading a program automatically changes the directory to the file's location (not for MERGE)
  A new, faster and more accurate quadratic bezier curve algorithm for the CURVE routine - demo "ultraviolet" looks a lot better
  Added the POLYLINE keyword - works as for POLYGON, but SpecBAS doesn't close the polygon
  Added array parameters for DRAW array() and DRAW TO array()
  Some nice animations to opening/closing of the editor windows
  Key buffering in the editor so that fast typing isn't lost
  New Splash-screen and startup sound :) The old one used to crash on NEW with small window sizes
  A totally new method of doing screen updates lets us get really smooth graphics, at any frame rate
  The ? symbol can now be used instead of PRINT
  Due to popular demand, LET is now optional - though you can still use it if you like
  Inline inc/dec/mul/div to LET - LET a+=10 to add 10 to a. Also for -=,*=,/= -and- %= (mod) ^= (power) &=,|=,~= (AND/OR/XOR)
  The editor now ignores font scaling for UI elements, looks better for non-square editor fonts
  DIM SPLIT can now split on multiple characters


  Line breaks inside strings now syntax highlights properly
  Fixed crash when an expression (such as GFX$ 5) causes an error during interpretion/optimisation.
  Fixed GFX$ should not be marked as an optimisable function.
  Fixed an issue with INC and a range not including the maximum limit.
  Update for FPC-based keyboard handling - down now works on OSX.
  Fix loading of legacy code files.
  Fix INKEY$ and capslock
  Proper fix for SCREEN UPDATE while the screen is locked.
  Partial fix for {} comments
  Restore mouse image visibility status when re-entering the window.
  Fixed crash on NEW when errors in main listing
  Fixed cursor overwriting Error status letter
  Fixed crash in HOME key handler.
  Fix carriage-returns inside string literals freezing the DW.
  Fix possible issue with sticky mouse button in scrolling and selecting
  Fix UPDATE SCREEN not working
  Fix syntax highlighting not working in CR-split strings
  Fixed poor performance of horizontal scrolling in GL builds
  Fix scrollbars appearing on the main screen
  Better fix for INPUT cursor non-flashing.
  Fixed small character sized screen updates that line up with the right/bottom edges of the screen
  Fixed INPUT freeze after finishing user input
  Fixed missing cursor in INPUT
  Fixed sub-line (statement) indicators in the gutter's horizontal offsets for fat fonts.
  Fixed backspace to an empty line above.
  Fixed INVERSE status being reverted to 0 after a direct command.
  Fixed loading of binary files into banks
  Highlight line extends to whole program line
  Fixed Cut/Copy of null selections
  Fixed out of bounds errors in listing display
  Fixed problems with hitting tab when hovering a number in DW
  Added MIN$ and MAX$ for string compares (same as MIN/MAX for numbers)
  Fixed slowdown on entering new lines in the editor
  Fixed erroneous error marker when executing an evaluation in the DW
  Fixed: TAB brings selected line up if there's a line already in the edit line, instead of refreshing the current line
  Fixed: GFX mode indicator no longer disappears when changing focus
  Fixed: Crash on pressing Enter when the edit line consists of only whitespace
  Fixed issue with IIF/IIF$ and string AND.
  Fixed crash with focused mouse moving out of the window
  Added graphics mode display region in DW
  Fixed scrollbars drawing on window 0 after error
  Fixed FN parsing crashing compiler thread
  Fixed Object Bank loading (unpacking Hex data overran the buffer)
  Added direction sensing to the selection manipulation routines
  Added word-selection algorithm
  Fixed tab alignment for new lines after lines that only contain spaces
  Fixed the "jump" that occurs on ctrl+down in the editor
  Added word-delete on Ctrl+Backspace/Delete
  Better tab-alignment for backspace
  Added Ctrl+PgUp/PgDn to the Direct command window
  Fixed overflows in Copy() everywhere
  Fixed ReadRawHex() overruns
  Fixed ARM version of Copy()
  Fix for crash loading a program shorter than current PROGLINE.
  OpenGL display now uses subimages to upload textures, resulting in about 70% CPU saving
  Changing the height of the editor now clears the old scrollbars properly prior to redrawing
  Fix for scaled characters overrunning the gutter
  Labels now found properly with TAB.
  Fixed Undo for pasting, re-ordering and renumbering
  Fixed compiler issues during pasting
  Fixed renumber for non-existing lines
  Fixed IN parsing
  Fix for Copy with two parameters (for older FPC compilers - Pandora/Pi mainly).
  Fix non-GL Linux build - needs GL headers or sound will crash... WTF?
  Fix GO TO selecting and deleting the final "O"
  Fixed errors with selections in the direct command window.
  PROGLINE scrolls in view in direct mode (bottom line first, then top).
  Re-ordering lines now works.
  Fixed graphics mode (Alt-GR/R-Alt) in Linux
  Horizontal scrollbar now extends the width of the window.
  Fixed hanging compiler issues on lines after a REM line.
  Fixed single-line copy issues in the editor.
  Fixed crashes in fullscreen mode.
  Fixed whitespace before linenumber stripping.
  Fixed crash when deleting last line.
  Fixed crash using RETURN at the top of an empty listing.
  Fixed selections in editor history.
  Fixed a bug in clipping rectangles Fixed PAUSE and WAIT.
  Fix issues with array access due to combined increment and assigns.
  Fixed in-procedure local variables crashing when increment-and-assign executed
  Fix for TOKEN$, VAL$ and VAL which fail due to implicit LET.
  Fixed errors in 32bit Delphi and FPC.
  Fixed displacements being corrupted by short-circuit boolean evaluation.
  Fixed circles, removed buffered keys for editing (still enabled for errors though).
  Filled circles and ellipses with negative magnitude radius now draw properly
  Errors that occur while a mouse button is held down no longer clear instantly
  File loading via drag and drop now works
  A crash in the optimiser for certain multiplication operations
  IN no longer requires range brackets ("[ ]") for a single element range, such as a$ IN b$
  IN now checks multi-char strings against ranges, ie "21" iN "4321" returns 1 (True)
  An issue with CALL which caused a crash when used
  CONSTants when used in an IIF function caused problems
  String multiplication with negative values no longer crashes SpecBAS
  Faster display updates in Linux versions
  PRINT and TEXT could cause a stack overflow in some circumstances
  INSERT$ added extra characters to the source string
  DIM works with a list of stringvars now, instead of just numvars
  EXECUTE and TOKEN$ no longer crash/error with an empty string
  Fixed filled circles - now small circles are the correct size/shape
  Fixed Filled polygons - a flawed algorithm gave innacuracies with very thin horizontal polygons
  DRAW now obeys OVER properly
  Inline operators now work on numeric arrays too
  Large (or very, very small) numbers not in scientific notation no longer crash SpecBAS
  CALL as part of an expression caused parameter errors when used in complex expressions
  END IF not working after ELSE in some circumstances
  Fixed issues with sprite collisions based on window transparency
  Preliminary fix to allow strings manipulation like LET a$(2 TO 10)(5) or LET a$(2)(1) work
  You can no longer crash SpecBAS by referencing the 0th character of an empty string
  LOCAL and GLOBAL with multiple assignments work with variables created in the same statement
  GOSUB can no longer crash the system with infinite loops of nested calls
  Windows version no longer allows system messages to mess with screen update timings
  Menu selection info (LASTM) returns the correct menu now!
  The IN operator didn't accept plain variables in a range
  Crash when accessing a string array's cached index
  Menus cannot be added as submenus recursively now
  Graphics created from text strings now respect the scaling of the current window



  • Guest
Re: SpecBAS 0.900 Released
« Reply #1 on: April 20, 2017, 07:03:41 PM »
Obviously a tremendous effort, congratulations!


  • Guest
Re: SpecBAS 0.900 Released
« Reply #2 on: April 20, 2017, 07:29:57 PM »
One and a half years between updates so... not so much :)

The new editor was a bitch though - and I've just found my first post-release showstopping bug! I'll get a new version 0.901 up later today.