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:
v0.0.0.900
==========
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:
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
Fixed:
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
Enjoy!