-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathWhat's New.txt
1666 lines (1348 loc) · 87.3 KB
/
What's New.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
What's new for SpecBAS
v0.0.0.972
==========
Fixed:
Fixed listing corruption when using "0x" prefix for hex numbers
Fixed File requester not automatically highlighting the current filename
Fixed CTRL+Left/Right getting wrong positions for prev/next word
Fixed Crash when clicking on menu items
v0.0.0.971
==========
Fixed:
Fixed autosave crash.
Fixed recent files menu not populating properly
Fixed crash closing menu when using RUN, NEW, LOAD etc
Fixed invalid procedure errors when a ";" is used inside a procedure for any reason
v0.0.0.970
==========
ATTN! WINDOWS ARE NOW BANKS, AND THERE ARE NO MORE SCREEN BANKS!
This should solve a lot of issues with fillrect overwriting other windows etc. Also fixed a shedload of errors that didn't cause problems yet, but will in the future.
Added:
Added RUN Menu
Added View Menu
Added shortcut keys (ctrl+s/l/m) for file operations LOAD, SAVE, MERGE
Added optimisation for var^2 - replaced with a numvar_square operation
Reworked project filenames to include paths
Added Re-do to the main editor
Added 64bit optimisations to the controls sources
Tool dialogs are now properly modal
Enabled File Menu - all items functional
Added recent files list functionality
Added valid/invalid text property to SP_Edit
Enabled Edit menu - all items functional
Added 64bit optimisations to graphics primitives
Added GOTO Line dialog for the Edit Menu
Added save status indicator - red dot by filename if not saved
Added main menu. File, EDIT and VIEW are enabled and working, everything else is disabled.
Added a new sysvar to control border padding in the editor
Added Hyperbolic trig functions, and their inverses
Added EQV and IMP operators
Added a new sysvar to control border padding in the editor
Added new Sysvars for syntax highlighting
Added Find and Replace dialogs on Ctrl+F/F3 and Ctrl+R
Added MAP function - MAP(n,a1,a2,b1,b2) where a and b are ranges, n gets mapped from range a to range b
Added WAIT KEY and WAITKEYDOWN keywords - they wait for a key to be pressed, or become pressed respectively
Added PAR function to count bits in a byte and report parity status - returns 0 or Odd, 1 for even parity
Added Bracket highlighting to the editor
Added two (count 'em!) extra columns to the editor's width
Added SAVE "filename" GRAPHIC n
Added TXTw and TXTh functions to get the text size of the current window
Added INTSCALING sysvar to enable/disable integer pre-scaling on highres displays
Added NOISE and OCTNOISE functions (Perlin noise).
Added SAVE "filename" SCREEN$ to save BMP, GIF, PNG
Added GRAPHIC SCALE id TO w,h
Added GRAPHIC SCALE id,scalex,scaley
Set window defaults on NEW
Set RADIANS on NEW
Added square, self divide and self subtract shortcuts (NUMVARSQ, 1, 0)
Added FMEMRD, MEMRWRTF commands for reading/writing floats to pointers
Added dynamic gutter sizing (better available space for code on 320x200 resolution screens)
Enable ESCAPE for file requester
Added Scaling parameters. SCREEN FULL/WINDOW <size> SCALE <size>
Added Window 0 size change causes scaling without resizing the window
Added file requester to LOAD/SAVE ""
CHANNEL RATE now accepts a string
Added CHANNEL RATE id,<string>
Better unfocused colours
Added CLICKVOL sysvar (0..1) for keyclick volume
NOISE and OCTNOISE functions (Perlin noise).
INTSCALING sysvar to enable/disable integer pre-scaling on highres displays
TXTw and TXTh functions to get the text size of the current window
Defaults to LOADed programs - radians, default palette etc
Set window defaults on NEW
Set RADIANS on NEW
NEW sets Bpp to 8
Changed SCREEN FULL - now switches to the desktop resolution and scales the display up
File requester now highlights last file
Fixed:
Fixed Off-by-one-pixel in mouse clicks in the editor
Fixed CHANGEFLAG corruption caused by AddLine() being called if the program was empty at startup
Fixed crash due to empty s:autosave (now abort if filesize is less than 7 bytes)
Fixed CHANGEFLAG not being reset on NEW
Fixed flickering on change in listing
Fixed a crash when using mousewheel on a modal window
Fixed a bug in NEXT where setting the loop variable to outside the range didn't end the loop
Fixed a crash when clicking a Recent Files menu item Fixed NEXT not adding the step first time around
Fixed PRINT PI
Fixed more issues with window size changes and fullscreen issues
Fixed menuboxes with weird editor fonts
Fixed loading of old-style binary program format1 Fixed FOR NEXT loops not exiting properly
Fixed PRINT display of floats again
Fixed float-error (cumulative rounding error) in FOR loops
Fixed SpecBAS disappearing when setting an invalid window size
Fixed FN causing temporary colours to be reset
Fixed SCREEN$ not identifying space characters
Fixed crash when using RUN on the first line of the program
Fixed temporary colour change system
Fixed window auto-centering on resize
Fixed mouse not re-appearing after leaving the main window
Fixed colour commands being reset after a ";" parameter separator
Fixed more issues with window size changes and fullscreen issues
Fixed menuboxes with weird editor fonts
Fixed loading of old-style binary program format
Fixed menuboxes to use current font and size as opposed to the editor font and size
Fixed WINDOW FRONT 0 causing a crash
Fixed CPU thread scheduling
Fixed (possibly) issues reading the keyboard while inside a tight loop
Fixed various issues with the editor's keyboard handling
Fixed crash when using TAB To find a label that doesn't exist
Fixed sound device not following system default device
Fixed a graphical glitch in LIST BANK
Fixed pasted code not appearing in non-wrapped editor mode
Fixed semi-colon for chaining statements
Fixed various graphical issues and errors in the editor
Fixed nested IIF/IIF$ and IIF inside expressions
Fixed Undo by rewriting it. Much better now
Fixed a crash when deleting a word on an empty command line
Fixed lines not getting compiled when pasted
Fixed crash on startup with an empty project due to previous fix :)
Fixed Line Delete operation which caused lines to not be compiled
Fixed yellow bracket highlights appearing after end of program or error in wrong places when F9 pressed to run from the editor
Fixed long lines pasted into the editor not wrapping properly
Fixed pasted lines screwing up the Undo system
Fixed NOT being still too low priority - it's not aligned with Sinclair BASIC as being highest priority
Fixed Scrolling behaviours when EDITORWRAP is false
Fixed WAIT with small timeout causing lockup in keyboard handling
Fixed bracket highlighting not working properly in some circumstances
Fixed LOAD "" dialog getting wrong font in some circumstances
Fixed access violation closing the LOAD "" dialog
Fixed double clicks in listboxes
Fixed END in the editor, it now moves to the end of a line properly
Fixed Undo - should be more stable now especially for selections
Fixed idle CPU usage (1 or 2% lower now)
Fixed Scrolling CPU usage in the editor
Fixed syntax highlighting for lines that wrap around
Fixed RGBn, RGBf not using three parameters
Fixed RGBn, RGBf needing brackets for single parameter
Fixed File requester control widths for larger font scaling
Fixed new graphic banks not getting the correct palette from the current wdrawing surface
Fixed MOD to correctly (or not!) handle negative numbers.
Fixed F-Keys showing up as ASCII keys in INKEY$
Fixed multi-line paste in the main editor
Fixed crash when setting window 0 size very small
Fixed cursor not maintaining desired x position when moving up/down in main listing
Fixed PAUSE clearing key states
Fixed crash deleting a bank which is listed before system sample banks
Fixed cosmetic issues in the Direct command window
Fixed gutter size issues
Fixed range check errors for colour commands
Fixed a crash for a line ending in "*."
Fixed a crash in END PROC Fixed paste freeze
Fixed incorrect line coordinates in DRAW TO for windows with ORIGIN set.
Fixed INT not rounding towards negative infinity
Fixed RENUMBER for some line types
Fixed another raftload of bugs:
Fixed crash setting window depth to 32 bit repeatedly
Fixed compiler getting stuck on statements instead of lines
Fixed 32bit mode
Fixed crash in compositor with out-of-surface windows
Fixed SQR(v*v+y*y)
Fixed optimisation for b=k*k*16/257 (wrong operation order, misidentified optimisation).
Fixed the battery status being drawn every mouse move
Fixed Battery level display
Fixed PRINT position (PRPOSX/Y) being reset after an error report
Fixed FILL x,y,tex$ not working for some fill characters
Fixed a crash when runtime-checking badly formed code
Fixed crashes on certain keyboard combinations
Fixed slow compiler on large sources
Fixed TOKEN$ crash for certain expressions starting with a numeric variable
Fixed Converting tabs to spaces in paste
Fixed NNO (bytecode) optimisations
Fixed crash allocating sprites to a window
Fixed ARSIZE not parsing properly
Fixed PRINT with a string that starts with a control code not displaying
Fixed IIF$ with an empty third parameter in a DEF FN statement
Fixed var * var (squaring) not clearing index on RUN
Fixed RUN with more than one window open causing diplay size issues
Fixed DARW TO x,y,a allows a=angle again
Fixed op-and-assign - corrupted values due to Idx being +1
Fixed SCREEN FULL setting desktop scaling when already fullscreen
Fixed expressions such as 130000/6 causing an error as a direct command.
Fixed wrong default window size after RUN
Fixed non-focused on startup
Fixed lockup when switching screen modes
Fixed crash on RUN
Fixed crash when setting window depth to 32 bit repeatedly
Fixed compiler getting stuck on statements instead of lines
Fixed crash in compositor with out-of-surface windows
Fixed SQR(v*v+y*y)
Fixed optimisation for b=k*k*16/257 (wrong operation order, misidentified optimisation).
Fixed renumber - works on THEN GO TO <x> now.
Fixed SCREEN WINDOW crash
Fixed Potential crashes due global variable
Fixed Potential double frees
Fixed Crash using window 0 size larger than actual display (downscaling)
Fixed OpenGL crash changing screen resolution
Fixed Framerate counter
Fixed Gutter size on file Load
Fixed Overflow in DrawRectangle leading to display corruption
Fixed Screen not updating properly when locked
Fix crash on wake after sleep
Fixed grayscale PNG loading
Fixed a crash when resizing windows
Fixed MERGE start TO finish not working in new editor
Fixed MENU command font size issue
Fixed scaling at 1.5x scale not using integer scaling
Fixed a bug in numeric array lookups
Removed extra ")" character from DEBUG strings
Changed to compositor - use a backbuffer if controls or sprites are present
Fixed a stupid, stupid bug in bank deletion
Added battery status indicator for windows laptops
Upgraded the copymemory and movememory procedures to take advantage of 64bit
Fix hang during autosave
Fix PROGLINE not showing correctly in listing
Fix non-responsive state after sleep
Clear line buffer if run from editor after error
Fix wrong cursorpos after running command from command line
Fix Autosave timeout
Fix frame sync issues with scaling enabled
Fix a crash during editor window movement
Fix label search (TAB on editline)
Fix fullscreen startup
Fix label tabbing (WIP)
Fixed Many stalls/crashes/hangs related to the display
Fixed Ok/Cancel working in the file dialog
Fixed multiple beep sounds created by NEW
Fixed scaled italics in the editor causing crashes
Fixed line numbers can go up to 999,999 now
Fixed invalid dates in CAT EXP
Fix EXECUTE in FPC (OSX/Linux)
Fixed Direct command window selections painted wrongly
Fixed focused/non-focused stripes
Fixed sysvars sizes
Fixed range errors in statement displacements
Fix FPC-needed for OSX install command
Fix crash on startup due to uninitialised sysvar
Fix DC Window's selection wrong on TAB to edit line
Fix wrapped label names (current wrap ignored @ symbols)
OSX: Autosave every 30 secs
OSX: INSTALL command to install files from bundle to Users hierarchy
OSX: Use users folder if it exists; otherwise use the files in the bundle.
Fix crash saving (conflict with compiler thread)
Fix delayed click on ctrl-enter
Fix display corruption when tabbing an error into the DC window
Fix sound sample playback volume
Fixed NOT being wrong priority
v0.0.0.920
==========
Added CHANNEL RATE id,<string>
Added New component suite for building editor tools - currently LOAD""/SAVE"" have a file requester. More to come.
Added CHANNEL RATE now accepts a string (C#1 etc)
Fixed Direct command window selections painted wrongly
Fixed focused/non-focused stripes
Fixed sysvars sizes
Fixed range errors in statement displacements
Fixed OSX capital letters when typing fast
Fixed BEEP interfering with INKEY$
v0.0.0.914
==========
Added:
FORCE array(),fdir,fmag command to allow the user to apply a force to an array of particles
SPRITE FRONT, SPRITE BACK commands to manage sprite priorities
Fixed:
Fixed left/right not setting DesPos properly
Fixed loading a new file not setting the PROGLINE to the first line and scrolling to it.
Fixed overflow in syntax checker causing compiler crashes.
Fixed in-line add etc addressing the wrong vars.
Attempt to fix thread critical section deadlock in the compiler.
Fixed CPU usage, but breaks the usefulness of the FPS readout.
OSX: Fixed startup crash
Fixed CENTRE/SCALE conflict
Fixed crash on invalid keyword alone on a DC Line
Fixed clipboard operations in OSX.
Fixed CMD+<alpha> keys in OSX.
v0.0.0.910
==========
Added:
Nothing.
Fixed:
Fix FRAMES for windows (As for OSX)
Fix PAUSE so it delays correctly.
Fixed word delete bug - lockup if no separators before cursor
Fix wrapping not working in OSX - uninitialised variable.
Fixed Error box not clearing editor windows when an error in a direct expression evaluation occurs
Fix up some range checking errors. Some have been in there for ... years.
Fix lockup in Linux, bring graphics in line with Windows build.
Fix Linux/OpenGL - maximum FPS of 50; any higher and we get massive stalls.
OSX: Fix for all broken keys - added pgup/pgdn/home/end for MBPs
OSX: set home folder, fix frame update
OSX: Keyboard fixes. Editor bookmarks are now on CMD+1-9 in MacOS
OSX: Fix NEW after Sprites have been visible
OSX: attempt to fix bug in SP_EnableDisplay which causes a crash when entering the display critical section.
OSX: Fix FRAMES so it updates even if the screen doesnt
OSX: Isolate project file (specbas.lpi) into MacOS directory.
OSX: Fix Bass.pas to refer to the correct .dylib
OSX: Add libSDLMain.a so you dont have to.
OSX: Fix hang loading a file
OSX/Linux: Fixed screen update issues
OSX/Linux: Fix OpenGL modes not updating with FPS set to > 50.
v0.0.0.905
==========
Added:
Nothing.
Fixed:
Fixed desired cursor pos in soft-wrapped lines
Fixed carriage returns inside soft-wrapped lines not indenting properly
Fixed Re-Order and Renumber not re-wrapping soft-wrapped lines
Fixed Reverse-direction selection deletions not deleting the last character
Fixed a crash if UDGs are used in the edit line outside of string literals
Fixed NEW creating extra banks
Fixed a weird bug where shifted characters (&, £, $ etc) would sometimes appear twice for a single keypress
Fixed DELETE command
Fixed a crash with lines > 99999
Fixed Direct command evaluations that result in a string with non-ascii characters in them, such as a carriage return
Fixed a bug where spaces would appear after a line number in a new line
Fixed a bug where backspace would not align lines that consist only of spaces up to the previous indentation level
Fixed indentation on a wrapped line being split after the line number, at the second line of the program
Fixed programs returning as having dirty lines after RUN
Fixed missing text after re-order
Fixed missing text after key presses which do nothing
Fixed error in good code when F9 pressed in error (0: Ok) box
Fixed flag preservation in inserting lines
Fixed crashes adding code to empty listings
Fixed memory leak in flags array on inserting/deleting lines
Fixed animations when running them (ANIMSPEED) at low speeds
Fixed crash entering a line from the command window if no program already exists
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
v0.0.0.852
==========
Added:
You can now query the position of a sprite's clones with SPCLX(SpriteID, CloneIndex) and SPCLY
KEY$ array(index) returns the key associated with that array's member
Associative Arrays can now be sorted by their key string
MENUS - Various commands for building Amiga-style (rightmouse activated) menus and ON MENU events for reading their status
DIM can now create multiple arrays - DIM a$(),b(2,4),c$(10) etc
LET and CONST now accept multiple targets and assignments in one line - LET a,b,c=3,d=4,e=5 (a,b,c get 3, d gets 4, e gets 5)
TRANSPARENT now can be used as a standalone command rather than just embedded in PRINT or TEXT commands
Commandline launching - sets the home directory to the location of the file to be loaded and then loads and runs the file
A basic CAT command now lists columns of files to save on scrolling long lists
REPLACE$(target$,[EXP] substr$, replace$) - using EXP with the second parameter treats substr$ as a regular expression
REPLACE$ now replaces all occurences of the substring within the target string rather than just the first instance
All ranges can now have an array() specified to test against - e.g. IF a IN [1,4 TO 5,b()] THEN ... Affects all commands/functions that accept ranges
In accordance with the 1964/1968 Dartmouth Spec, IF <c> THEN <linenumber> is now accepted. Same for ELSE
A small but not insignificant optimisation to GOTO/GOSUB - the line number is now cached for absolute line numbers such as GOTO 20
Fixed:
Assigning a string to a sliced string array member works properly now
Assigning a value to a string array member is disallowed properly this time
Assigning to an associative array now works again
A slim font in the editor occasionally crashed SpecBAS's editor with lines of a certain length
Numeric constants would stand a good chance of crashing the Linux build (due to a bug in Delphi, _NOT_ FPC as it happens)
Texture filled circles now work properly again :)
SCREEN$ now raises an error if it's called with out of bounds coordinates
Array copying MAT a()=b() memory leak fixed
TOKEN$ didn't set its own internal error state correctly before launching
Erroneous "Floating Point Error" crashes turned out to be editor related - fixed!
JOIN$ didn't properly check if an array exists before trying to use it!
WINDOW COPY didn't use the destination coordinates correctly and failed to parse scaling parameters
CALL <proc()> would crash if certain circumstances were right
Constants can now be used as indices in an array assignment
WHEN IN didn't accept arrays or variables as the first term in a range
Sprites, when copied to another bank, did not increase the active sprite count
Unhandled token errors in IIF/IIF$ functions
UDGs in Linux are now usable
Embedded SCALE commands in a PRINT command now reset after the PRINT has finished
System sounds (keyclicks and beeps) are now centred in stereo audio systems rather than only in the left channel
PEEK$ left the internal stack in disarray, causing issues with string array assignments
FILTERing a string array with an empty match string caused a crash
v0.0.0.830
==========
Added:
FILTER [ERASE] array$(),m$ removes or isolates string array items that match m$ as a regular expression
FILTER [ERASE] array(),{m|[range(s)...]} removes or isolates numeric array items that match m, or are in the specified ranges
UNDIM array() will remove an array from memory - can be quite slow, so avoid using it in tight loops!
CLEAR [array()[,value/value$]] will fill an array with a value or string depending on type
IVAL takes a string and extracts as much of an integer as it can - "128|678" will return "128" for example - does not perform evaluation as for VAL
POS has a new (optional) parameter - POS(substr,string[,start]) begins searching "string" for "substr" at position "start"
CHANGE: UDGs have been changed, and no longer require the CHR$ 1 prefix in a string. As a result, there's only 128 of them in a font
SPRITE NEW id COPY id - to copy from one already existing sprite to another. Use COLLIDE and WRAP after COPY to override behaviour
SCREEN$ - as from Sinclair BASIC, identifies characters at an x and y coordinate. Only for mono fonts, matches current INK and PAPER
REPLACE$ function does a text "search and replace" with three parameters: string to search, text to replace, text to replace with
CURVE now optionally takes three coordinates (as opposed to just two) - x1,y1 TO x2,y2 TO x3,y3 which ignores previous plotted position
TIME$ takes similar parameters to DATE$ and works on time (hours, minutes, seconds)
DATE$ takes a time (TIME function for example) and a string to format, ie "dd/mm/yyyy"
Direct expressions and their results are now added to the command history for quick recall
SPRITE COLLIDE CLEAR now takes an optional sprite ID to only clear the collision flag of that sprite
The HEX function works like BIN - returns a decimal version of the hexadecimal argument. As with BIN, there's no need for prefixes
DO can now take an optional numeric argument - DO 35: PRINT "X": LOOP will loop 35 times without needing a variable to keep count
Sorting arrays can now be performed in both ascending and descending order by adding the INVERSE switch
All commands which output graphics primitives (CIRCLE, PRINT etc) can now use alpha channel information and render to a 32bit window
32bit font support - each character's pixel is a 4byte value (ARGB) format
RGBtoHSV and HSVtoRGB now accept either a single integer argument or three separate arguments
32bit display target, in preparation for 32bit graphic support. This means quite a slow down in some situations on single-core machines
Subdivided rectangles are now used in the renderer to prevent overdraw - very large speed increase on single-core machines
Fixed:
Some text attributes were inappropriately cleared at times (VAL/VAL$ being a culprit, but there were others)
Sprites, while being created, could sometimes crash the renderer
CAT shows the wildcard match string correctly
The wildcard "*" when used with CAT now matches at least no characters instead of one
Error messages (including 0:OK) would halt all sound when displayed - now sound is stopped when the error is cleared
The IN operator now has a lower priority than functions and inequalities, but higher than AND/OR/NOT
A small bug in string slice assigns that caused a crash in multistatement lines
Expressions that start with a decimal point no longer fail to parse on the command line
Collision bugs where many sprites collide at once
Fixed a small bug in package handling that caused overwriting and CAT to fail
Omitting a loop-control variable in FOR EACH caused the editor to hang
Small rounding errors in the turtle graphics routines
The new, faster render loop caused out of bounds errors for SDL under linux when drawing to offscreen surfaces
FOR .. NEXT loops that have lost their destination are flagged as such in LIST VAR now
All RGB (and ARGB) colours use the same format now
RED, GREEN, BLUE didn't retrieve the correct values due to the 32bit update changes to the palette system
HEX$ and BIN$ didn't work with some larger numbers
RENUMBER sets lines that jump out of the program (past the last line) to a line greater than the last line
Structure member assignment failed due to an error in LET
ON EVERY <x> didn't insert the correct keyword handler after the frame counter
INCLUDE with an invalid filename crashed SpecBAS
INCLUDE with multiple files (or multiple INCLUDEs on one line) failed to add procs or crashed
Accessing an array using an array as an index works now
Possible fix for keyboards that use Alt-Gr for some characters (such as Portuguese)
Sprite collisions were a tad sticky, even after clearing the collision flag
Base notation didn't work for any base that was a multiple of 10
Base notation can now be used as a direct expression
A long-standing bug where GOSUB statements were ignored by the RENUMBER command
The IN operator was too high a priority, rendering 2+1 IN [0 TO 3] as 3, rather than 1
Clicking and dragging the mouse off SpecBAS's window whilst in the editor caused a crash
CASE...WHEN IN... statements caused a hang
Single-line CASE...WHEN...END CASE constructs, although insane, now work properly
Auto-DIMmed arrays set their values in the wrong arrays at times
SPRITE ANIM PLAY ignore the OPTION parameter if start and end were left unspecified
DIM SPLIT arrays created empty arrays in some circumstances
Array keys (associative arrays) now follow the values properly when sorted
SPRITE ANIM PLAY got frame indices mixed up - Again
ELSE was treated as a statement in itself, which screwed up things like RETURN after an ELSE GOSUB
IIF and IIF$ would cause a crash if they evaluated to FALSE more than once in a loop
INPUT now uses the current scaling for the initial position of the INPUT prompt
DELETE past the end of the program caused a crash
FOR EACH with a string var and a range of characters stupidly appended an extra "$" to the varname, rendering it unusable
Sprites wrap correctly when overlapping other sprites
Sprites no longer stutter when they collide (if their collision flag is disabled)
Editor windows were transparent - not that you'd notice, but they render faster now
Zones return their correct ID numbers when other zones are deleted
v0.0.0.801
==========
Added:
Further optimisations - expression re-ordering, so the optimiser can be more efficient
You can now use the ":" character as a tab-character to indent your FOR..NEXT loops if you really want
OVER 10 - multiplies two pixels together
OVER 8 and OVER 9 - Maximum and minimum respectively - performs a pixel-by-pixel compare
Optimised the stack-machine which has gained a significant speed increase
Numeric array accesses are now much faster
ARSIZE a$() returns the number of items in any array, including dynamic arrays
LBOUND(a$(),i) returns the lower bounds of the i'th subscript of a non-dynamic array
UBOUND(a$(),i) returns the upper bounds of the i'th subscript of a non-dynamic array
TRANSPARENT 1/0 inlined into PRINT commands now works for mono fonts too
JOIN$ function takes a string array and a separator - LET b$=JOIN$(a$()," ") will compile all of a$() into one string, each separated by a space.
String splitting: DIM a$(SPLIT "my|test|string", NOT "|") will split the string into an array of three strings, excluding the "|" - NOT is optional if you want to keep it in
ON EVERY events don't now take a condition if you don't want them to - it's optional
ON... Events no longer need an explicit RETURN after their handler statements
PRINT USING mask$;item;item;item etc - similar to a regular USING formatting string
USING$ function - identical to PRINT USING() but returns a formatted string
Specifying a default fill no longer requires an emptry string for the texture - CIRCLE x,y,r FILL will suffice
PACKAGE truncation and consolidation - optimised package size on close
DECIMAL(val$,base) function converts from a base to decimal
Arbitrary base numbers can now be inlined. Eg: 10 PRINT A10QP\36 (note the backslash) denotes a base-36 number
RECTANGLE can now take coordinates as x,y,w,h as well as x1,y1 TO x2,y2
MATCH(regexp$,text$) returns the position of the first match using a regular expression against the supplied text
Optimised POKE$ which offers little in the way of day-to-day speed increases, but the twister demo runs a bit better
Massively optimised filled circles and ellipses - huge speed increase!
Slight optimisations to other primitive drawing commands - rectangles and polygons
Optimised the line drawing routine, much faster now
Filled Polygons now obey INVERSE if the texture is solid
Zones. A Zone is a region of a window against which you can test a coordinate, and get the zone number it's in. Handy.
Fixed:
DIV now does a proper integer divide...
Runs of arithmetic operators weren't always correctly merged
PALETTE HSV now accepts HUE values in the correct range of 0 to 360
INKEY$ now picks up other keys that may be pressed when a key goes up
WAIT (all versions) cleared the keybuffer inappropriately, causing INKEY$ to lose keys
In the Win32 version, some keys weren't recognised correctly at times, turned out to be a Unicode issue
DEF PROC, when executed, didn't jump past the end of the procedure properly
END PROC didn't exit cleanly after a loop
EXIT didn't clean the stack properly and so caused issues with END PROC
Timed events (ON <condition> EVERY <framecount>) now trigger after the correct time interval
ON ERROR (and other ON events) didn't return properly after they had been handled
Adding an extra index to a string array reference wasn't parsed as a slicer
String multiplication was occasionally incorrectly parsed
ON COLLIDE created an extra keyword which caused a stack overflow
Fixed a small annoying bug in the WINDOW command
The expression evaluator was misbehaving again - should be fine now
CONST errors in string slicer assignments - in fact, Slicers in general weren't behaving well
Documentation for CONST and LET amended
v0.0.0.800
==========
Added:
Optimised variable accesses local to procedures, quite a nice result there
Speedups added to any commands that utilise the stack - GO SUB, DO .. LOOP, WHILE, UNTIL etc
TEXTURE$ converts a string to a graphic-string for use in, i.e., fills
LET can now assign a value to multiple variables - LET a,b,c=0 or LET a$,b$,c$="Hi" for example
More optimisation to internal string handling
You can, if you really want, start a line with any number of statement separators (:)
Protected banks show up with a small "key" icon to indicate their locked state in LIST BANK
Converted the whole interpreter to store token handlers inside the tokens themselves - much more efficient
Improved variable caching to save on look-ups, results in a respectable speed boost
String operations should now be quite a lot quicker due to a better string copying routine
CONST name,value - sets a constant. Like a variable, but much faster to process as no look-up is needed
SCALE sx,sy is now a standalone command
SCALE can now be used in INPUT the same as in PRINT
Sprite clones now inherit OVER and such, but still don't cause collisions
Sprites can now wrap - use WRAP WINDOW or WRAP CLIP (to wrap to the clipping region) after SPRITE NEW
Converted Sprite movement systems to relative offsets instead of absolutes
LIST BANK now lists banks in ID order
Added an Out of Memory error for overrunning the various stacks allocated to BASIC
Sprites now have their own OVER mode. Set it with SPRITE NEW id,x,y [COLLIDE] [OVER m] or SPRITE OVER id,mode
INCLUDE now searches the "include:" assign for files if they're not found in the current directory
Fixed:
Certain embedded PRINT commands were evaluated in the wrong order
Fixed sprite wrapping for sprites that don't quite ... wrap properly
REM splitting is bugged - so has been disabled for now pending a proper fix
Forcing a SCROLL? prompt with a large font caused too much scrolling
LIST VAR array() now displays empty arrays correctly
You can no longer kill SpecBAS by resizing the editor windows too small
Automatically created "system" banks can no longer be destroyed by the user
Default mouse pointer is now restored if the current graphic being used is deleted or replaced
Graphic banks, when rotated, were displaced on their own canvas
Sprite Info handlers (such as SPRITEw et al) would crash with a negative frame value
Some errors would render their lines non-editable
SPRITE FLIP and SPRITE MIRROR didn't work correctly for sprites of even width/height, only odd
Errors that return an "Invalid Keyword" error caused issues with the expression evaluator
LIST BANK 0 listed ... interesting values for window metrics
READing into a string array with one dimension now works as it should - these take precedence over regular string slicers
Streams can now access memory banks like they are supposed to
Eraseing (or generally mucking about with) a graphic bank that is the current drawing surface resets drawing to the default window
SPRITEw and SPRITEh, when called with a spriteid that points to an empty sprite, crashed specbas
LOAD "filename" BANK NEW now returns the correct bank ID number
BANK ERASE wouldn't function correctly because it assumed all banks were fonts
Banks can now be unprotected properly
Many range-limited operations were overruning their allocated memory
PRINTing at the very bottom of the screen might have caused a Scroll? message after all
CASE no longer overwrites the case-stack and jumps to END CASE properly after WHEN
The constant "PI" and the function of the same name were clashing... unsurprisingly!
Rapid keyboard hammering could cause a crash as the internal keybuffer may get cleared while the interpreter is working on it
Sprite collision now checks both the window -and- the display for sprite-to-sprite collision
ON COLLIDE is cleared properly after NEW and RUN
VAL no longer crashes specbas with invalid characters
Sprite collision now only checks pixels in the sprite's window, not the overall screen display
String slicing with one element such as LET a$(1)="H" for a string variable now works again
Sprites now inherit the correct window info when changed to a new window
PRINTed newlines were taking up two rows of characters rather than one, which resulted in erroneous "Scroll?" prompts
v0.0.0.789
==========
Added:
SPRITE PUT id - places a permanent copy of the specified sprite on the screen or window it belongs to
Expression calculator - any expression entered as a direct command (SIN 45 or 1+4 or CHR$ 33 for example) is evaluated and the result pasted into the direct command window. Beware, a single integer will still delete program lines!
LOAD "filename" BANK NEW numvar - loads a file into a bank and assigns a BankID to the numvar
More optimisations to expressions: LET a=(b/2)/8 for example now devolves into the much quicker LET a=b*0.0625. Also works for strings of multiplies, divides, adds and subtracts.
SAVE now saves by default as ASCII text, and does not use the binary format anymore. The binary format can still be loaded, however
More dithers to GRAPHIC REMAP - dtFLOYD, dtJARVIS, dtSTUCKI, dtBURKES, dtSIERRA3, dtSIERRA2, dtSIERRA, dtATKINSON, dtSTEVENSON - all quite slow though
Sprite frame numbering starts at 1 and counts up, rather than frame zero
You can now jump to the declaration of a LABEL by typing the label (@mylabel, for example) and pressing TAB in the editor
Better error positioning in the direct command window. Errors are produced by a "dummy run", so may not match where you expect them to!
SPFRAME(id) returns the current frame number of the specified sprite's animation or -1 if stopped
SPCOLL(id) returns the collided state of the specified sprite
Sprite collision detection - with sprites and scenery, event driven with ON COLLIDE ...
SPRITE MIRROR/FLIP id - Does what it says on the tin. Permanently.
SPRITE FRAME id,n [PAUSE m] - sets a sprite's current anim frame, and optionally delays the next frame
SPRITE ANIM STOP id - halts the sprite's animation
SPRITE ANIM PLAY id,start [TO end] [OPTION opt] allows better control of animation with loops, pingpong etc
SPRITE POINT id,x,y - sets the sprite "hotspot" which is basically an offset used when drawing the sprite
Better error positions for syntax errors in the editor
MENUBOX can now take a string array rather than a list of options. LET a=MENUBOX("Title",a$())
Fixed:
Strange bug that prevented strings from being sliced by one index
An obscure bug that caused some commands to be replaced by others - Delphi was at fault here
RGB and HSV were incorrectly optimised by the compiler
Scrolling via the text output routines (CAT, PRINT, LIST et al) no longer corrupts text
OUT now attempts to create the destination if it exists
Eliminated flicker in the editor when mousewheel scrolling
Loading of string and numeric dynamic arrays now work correctly
LIST BANK doesn't get confused with Bank ID numbers now
Sprites can now be loaded correctly when saved with SAVE "filename" BANK id
Sprites attached to an invisible window were showing incorrectly
Automatically remove invalid characters and empty statements from the ends of lines
Range checking in SPRITE CLONE operations
Matrix addition, subtraction got their parameters wrong. D'oh!
Labels declared alone on the last line of the program with no following statement were incorrectly stored
Colour fonts weren't very transparent, really
Fixed an offset bug in the DEBUG command, ironically enough
A bug in the sprite frame address handling
PALETTE COPY could overwrite screen information by trying to write to palette entries > 255
A nasty bug in the dynamic array hashing function
A bug in BIN followed by anything but a sequence of 1s and 0s
v0.0.0.780
==========
Added:
SCALE to PRINT and TEXT. PRINT SCALE 2,2;"Hi!" will display 2x text size. SCALE 2,3 will do 2x width and 3x height
MATRIX maths with the MAT command from the original Dartmouth spec. Add, sub, mul, scale, inversion, identities etc
BIN <binary number> from Sinclair BASIC makes an entrance. Pointless (use the % symbol to denote binary) but included for completeness
Dynamic array allocation - DIM a() - note the empty brackets, then just use it. Elements are added as they are written to the array in the positions you choose
Factorial operator - PRINT 3! displays 6. High priority. PRINT 2+3! shows 8, as does PRINT 3!+2
LCM(a,b) and GCD(a,b) functions - Lowest common multiple and greatest common divisor
Fixed:
SPRITEw and SPRITEh had their parameters swapped
MESSAGEBOX froze the screen when a key was held down
PRINT on its own didn't issue a carriage return
A silly bug in command history after NEW
An issue with ENDIF triggering a segfault when used in certain conditions
Bug in NEW caused by the associative array hash tables
SUB (as in GO SUB) caused issues when loading
v0.0.0.777
==========
Added:
ADD, SUB, MUL and DIV operators - as for +-/*, but work on integers and return integers
Speedup in the POLYGON command
Associative arrays - access arrays using a key string. KEY array(index)="mykey", then LET array("mykey")=1 etc
KEY CLEAR array([index]) clears a key from an array element. Omit the element to clear all keys in the array
Bugs Fixed:
Fixed a rare bug in the mouse handling code that could cause a crash when switching from fullscreen to windowed mode
v0.0.0.775
==========
Added:
Inline IF support - IIF(condition,true-expr,false-expr) will return the correct expression's result based on the condition. Also, IIF$ for strings
SORT array() or array$() will sort a one-dimensional array
INCLUDE "myfile1","myfile2"... to add procedures from other files into your program at runtime
RENUMBER now respects RESTORE and RUN when used with a numeric parameter
CASE structure - CASE, WHEN, WHEN IN, OTHERWISE and END CASE - See documentation for details
Music files can now be stored in and played from a memory bank
WINDOW MERGE id can now be used to close a window and copy its contents to the display - specify ALL instead of an id to merge all open windows
MUSICPOS function - returns the position of the currently playing music in seconds
MUSICLEN function - returns the length of the current music in seconds
Auto-arrays: for simple one-dimensional arrays, you can DIM a=1,2,3,4,5 to automatically fill the array
BASE$(value,base) returns a string of the number converted to the chosen base. 2 = Binary, 16 = Hex etc.
SEARCH(array() FOR value) will return the first item in the array that contains the value specified (or string). SEARCH(array() NEXT) will return the value of the next item, assuming that SEARCH has already been called.
Bugs Fixed:
Fixed an /old/ bug which inappropriately truncated arrays when LISTed
v0.0.0.767
==========
Added:
Bugs Fixed:
Fixed plain-text loading
Fixed UDGs in the editor - CTRL keypresses were filtered out for some reason
v0.0.0.766
==========
Added:
SAVE "" now saves to the current program name
PRINT now obeys the ORIGIN command's function for text placement with AT
Significant speedups in handling arrays
CLIP OFF - turn off global clipping
OUT - send text output to a variable (OUT var$), a stream (OUT stream-id) or the default screen (OUT SCREEN)
OUT can be embedded in a PRINT or TEXT command
INV n, UNDER, POLYTERM and COMPSIMPSON maths functions as requested
Improved the speed that statements containing DATA and LABEL are executed (or rather, aren't executed!)
FOR EACH n IN [1,2,3] will loop three times and set n to 1, 2 and 3 with each run through. Also works for strings - FOR EACH n$ IN ["a" TO "z"] for example
LIST now works as per Mallard BASIC ( LIST TO 100, LIST 50 TO 100, LIST 100 TO )
CAT can now recurse directories if you so choose - CAT "filespec" ALL
Python-style string multiplication - 2*"Hello" will create the string "HelloHello"
Bugs fixed:
ORIGIN (as a command on its own) didn't work at all!
Fixed a bug where embedded colour commands in a POLYGON array() FILL a$ command would fail to draw any solid colour
Fixed WINDOW CLIP n OFF - it didn't work :)
Fixed a very, very nasty bug where a GOSUB after an ELSE would return to the statement after the IF
Fixed an issue with CLIP being changed mid-PRINT stream - also affects the new OUT command
Fixed a problem with files attached to streams not being released after STREAM CLOSE
Fixed an issue where COPY failed to perform due to file already existing
Fixed an issue with the "$:" (Current directory) assign
Fixed a problem with BASS not recognising the correct upper and lower limits to sound frequencies
Fixed autosave issues (empty autosaves should be gone now)
Fixed the delay in startup of the Windows build
Autosaves are only made when a command changes the current program
Fixed an error in the reported statement number after a direct command
Fixed a problem with foreign installs converting ansi text to unicode in the loader
Fixed a bug which could result in an empty, but filenamed autosave
v0.0.0.755
==========
Added:
DRAW x1,y1 TO x2,y2[,angle] - draws a line from one point to the next, ignoring the last PLOTted position.
MSECS function - returns the current time in milliseconds since the computer was turned on.
SAMPLE PLAY now accepts a note-string as the RATE parameter, ie RATE "c#3" will play the sample at a modified rate that corresponds with the note specified. Assumes that the sample was created at middle-c (c5)
Bugs fixed:
Fixed a crash when passing a CHR$ 8 as a texture to a graphical fill command. WHY WOULD YOU DO THAT?
All keyboard types (within reason!) should work with SpecBAS now, including those weird US ones :)
Error propagation in file commands
SAVE to a non-existant directory now produces an error
Fixed OPTION "Base",dimension - BASE now works properly in DIM
Fixed stack corruption in the coordinate conversion functions
COPY didn't send to the current package properly
ERASEing package files tended to erase the entire package... oops!
v0.0.0.754
==========
Added:
BEEP support, with various types of waveform and full ADSR envelope control
Sprite cloning - creates clones of a sprite at your coordinates, inheriting the original's animation and other
properties. Useful for static animated graphics.
Bugs fixed:
Fixed a crash using SPRITE ERASE
Fixed(?) a floating point error in sprite movement, with values too small to be useful
Fixed the priority of the IN operator - it was previously treated as a function, now it has proper priority
Fixed sprite flickering that resulted from an above fix :)
Fixed several bugs where BankID was confused with the index of a bank in the banklist
Sprite counts and window-to-sprites lookup tables were not updated properly when sprites are erased
A second stab at the "double extension" image loading bug should finally nail this issue
v0.0.0.753
==========
Bugs fixed:
ON ERROR now allows errors until your handler code returns
FOR..EACH now updates the variable with the last value in the array when the loop runs out
Key and mouse flags are cleared before a command is executed
More bugfixes to the optimiser - errors are properly handled now
Compound ops now propagate any errors that might occur
Fixed RENUMBER where the upper bound specified is the last line
Fixed GLOBAL (now works as intended)
Fixed PROCID with procedures with no parameters
Fixed INPUT FORMAT's escaped characters
Fixed INPUT with print-seperators
Mouse delta functions no longer require a MOUSEMOVE event to process
Fixed file-renaming bug in the Windows build
v0.0.0.752
==========