                                                                                                                                                       
                        StrongBS v2.10 (25th Feb 1998)
                           Mohsen Alshayef 1993-1998

                          email: mohsen@qatar.net.qa



This file describes the changes and history of StrongBS since v2.00:

The list is in reverse chronological order.


Version 2.10 (25th Feb 1998)
=============================

- Added 'Convert GOTO to keyword' option.
- Added 'Convert COLOUR to string' option.
- Very slight change to 'Remove brackets code' to cope with Function terminators
  after THEN or ELSE.
- Bug fix: X=-(+Var1+Var2) was converted to X=-ar1-Var2. The first char after +
           was not copied to the target.
- Bug fix: a bracketed numeric expression inside an LDM|STM instruction register
           list is now evaluated.
- Bug fix: Lines concatenation no longer concatenate ON...PROC and ON..GOSUB lines.
- Bug fix: PRINT concatenation no longer concatenate PRINT# statements.



Version 2.09 (22nd Feb 1998)
=============================

- Bug fix: in LEFT$(x$,LENx$-1) conversion.
- Some improvement to 'Convert 0 to FALSE' option made.
- Some changes in front-end to use new Window Manager on machines with RISC OS 3.10.


Version 2.08 (14th Feb 1998)
=============================

- Bug fix: in front-end with application data transfer.
- Bug fix: in integers evaluation code.


Version 2.07 (10th Feb 1998)
=============================

- Improved the 'Constant Variables Replacement' squash option so that variables
  which were previously not replaced because they are used as passing parameters
  in procedures/function are now replaced. This was not done in previous
  versions because the procedure or function may have a RETURN <parameter> and
  hence constant variables in ALL procedures and functions parameters were just not
  replaced. StrongBS now knows which procedure/function has a RETURN <parameter>
  and the result is that more constant variables are now replaced resulting
  in smaller size code.

- Improved the 'Concatenate IF constructs' option code so that it can now concatenate
  'Single line IFs' within IF...ENDIF constructs providing the single line IF does not
  have an ELSE part and the IF..ENDIF itself  does not have an ELSE part. The code is
  made internally recursive for better optimisation.

- Improved 'Brackets removal' code so brackets which were previously left are now
  removed :-) This specially deals with those brackets on IF..THEN..ELSE.. lines.
  This option no longer auto-selects the 'Remove Spaces' option.
  
- If the filename after a LIBRARY keyword is given as a single filename string
  like LIBRARY "MyLib" then StrongBS now will search for it in the directory
  which contains the main BASIC program. This used to give 'Library not found'
  StrongBS's warning in the previous version.

- Selecting the 'Concatenate Lines' option will no longer auto select the
  'Remove Colons' option.

- Selecting 'Remove brackets' option will no longer aut-select the 'Remove Spaces'
  option.

- Bug fix: 3rd party info is now correctly displayed using StrongHelp application.
- Bug fix: StrongBS refused to save to disc media.
- Bug fix: In 'Remove Dead Code' caused statements after 'END' to be skipped.
- Manual still to be updated.
- Interactive help messages still not updated (broken).

  

Version 2.06 (4th Feb 1998)
=============================

- Libraries called by main program are now automatically linked.
- Added option to convert VDU statements to PRINT statements.
- Added option to convert MOVE followed by DRAW to LINE statement.
- Added option to convert RIGHT$(x$,LENx$-n)  TO  MID$(x$,n+1)
- Added option to convert LEFT$(x$,LENx$-1)  TO  LEFT$(x$)
- Added option to remove 'Dead Code' :-)
- '*FX to SYS "OS_Byte"' conversion now converts *FX inside OSCLI statements.
- Logfile records all linked LIBRARY filenames.
- Renamed some of the menu entries and moved the 'Faster' options to
  the 'Convert' sub-menu.
- Added future options to the menu so that users will know of what is
  on my to-do-list:-) These options are shaded and will be enabled whenever
  the corresponding code is written.
- 3rd party code bugs fixed and options are now enabled.
- Bug fix: Garbage lines starting with '+' or '-' are now removed.
- Bug fix: in 'VDU concatenation' code that caused program crash.


Version 2.05 (18th Jan 1998)
=============================

- BASIC core program load for Absolute files changed from address &10000 to
  &9000 to save 28K from WimpSlot. Note that this may cause problems with
  BASIC64.
- Bug fix: RRX was assembled into LSL #1 (Ooops...). Thanks go to David Sharp
           for spotting this bug.


Version 2.04 (10th Jan 1998)
=============================

- StrongBS is now almost 5 years old.
- Renamed 'Evaluate Expressions' menu entry to 'Evaluate Integers'.
- Added code to remove extra unary +/- operators. code automatically called
  whenever 'Numbers_Conversion' or 'Evaluate_Integers' option is selected.
- Output filename added to the log file.
- Token 'SBSLogFile:' added to SBSMake file to specify the name of
  the log file.
- Token 'SBSOutFormat:' added to SBSMake file to enable the output
  file format (i.e. BASIC, Absolute or Crunched absolute) to be given.
  It can be in either the full or abbreviated mode:

  Syntax:     SBSOutFormat: <Basic|Absolute|Crunched> [+]

          or  SBSOutFormat: <B|A|C> [+]

  the '+' sign will allow command line parameters to be preserved.
  
  examples:
  
  SBSOutFormat: Basic      \output BASIC type
  SBSOutFormat: Absolute   \output Absolute type
  SBSOutFormat: Crunched   \output Crunched absolute type
  SBSOutFormat: C+         \Output crunched absolute+preserve command param.
  
- Bug fix in the frontend help display.
- Bug fix that caused incorrect removed line numbers to be logged in the
  Log file.
- Bug fix that caused lines starting with '(' to be considered as garbage
  lines!
- The brackets removal code now recognises the '~' character as a valid
  BASIC built-in function. So brackets in (say) STR$~(F%) are now removed.
- Bug fix that caused the 'OutFile' token in the SBSMake file not to
  recognize full pathname due to the use of the "::".



Version 2.03 (19th Dec 1997)
=============================

- Main menu is now split between an icon_bar menu and a short list
  smaller main menu.

- The "Library files" entry on the main menu is removed as StrongBS
  will soon 'automatically link LIBRARY' files. This option seems redundant
  as StrongBS will (soon) automatically link files, in addition LIBRARY
  files or directories can always be given in the SBSMake file.

- Complete code re-write of the "Numbers Evaluation". Old code scrapped. :-)

- The "Convert Numbers" will now convert numbers on IF lines to 'shifted'
  numbers and bracket the shifted number result. Conversion to shifted
  numbers on IF lines was previously skipped to avoid conflict in
  priorities with the most commonly used AND keyword on IF lines.

- Interactive help messages file updated and re-arranged.
- The 'CHR$ converter' code will now cope with CHR$<num> followed by
  quoted string.

- Bug fix: In "Numbers Evaluations" code that was using incorrect
           search for & assembler directives.

- Bug fix: Constant variables after SWAP or MOUSE keywords are not
           replaced any more.

- Bug fix: Constants are not evaluated if part of 'divide' operation!!

- Bug fix: DATA lines between procedures and functions are no longer
           removed if they follow an un_used procedure or function.

- Bug fix: 'IF A%>16_d%=FALSE' was converted to 'IF A%>13%=FALSE' by
           the 'Numbers_Convert' routine. This is because "OS_ReadUnsigned"
           thinks '16_d' is a hex number and converts it to decimal 13.
           This is now fixed. This showed up when trying to compress 'TemplEd'
           application which was already compressed :-)

- Bug fix: VPOS-1 no longer converted to VPOSTRUE !! :-)

- Bug fix: The ';' char was left when removing unused variable in
           SYS xx TO xx;unused_var.

- Big fix: 'STEP 1 removal' code no longer removes MOUSE STEP 1.





           
Version 2.02 (13th Dec 1997)
=============================

- Bug fix that caused brackets after TINT to be removed.


Version 2.01 (12th Dec 1997)
=============================

- fixed bug in "constant variables" code that omitted the use of INKEY keyword.
  Thanks Dominic.... :-)
- Disabled the 3rd Party options selection, for the time being, due to bugs
  in the codes.


Version 2.00 (09th Dec 1997)
============================

Additions:
==========

- StrongBS can now cope with overlay files and will compress all overlay files
  specified by the user along with the core program.
  3 new tokens have been added to the SBSMake file; these are:
  - <SBSOverlayInDir:>,
  - <SBSOverlayOutDir:> and
  - <SBSOverlayFile:>
  
  Overlay files specified by the <SBSOverlayInDir:> and/or <SBSOverlayFile:> are
  compressed and saved into the directory specified by the <SBSOverlayOutDir:>
  token.
  Overlay files are automatically re-numbered and hence should not contain
  line references.
  The input files can be specified by the <SBSOverlayFile:> which is followed
  by a list of full path overlay filenames or by the <SBSOverlayInDir:> which
  gives the names of a directory that contains ALL overlay BASIC files. The
  <SBSOverlayOutDir:> name must be given. StrongBS will warn the user before
  over-writing an existing overlay file.
  Many thanks go to Graham Crow for suggesting this new feature...

- Constant Variables Replacement:
  
  Added an option to replace constant variables.  Separate options for integers
  and reals are added. The constant integers P%, O% and L% are not replaced.

- Constants variable Log added. Log includes the value assigned to the variable.

- Overlay files information log added. The log includes detailed info on each
  overlay file.

- New token "OutFile:" added which specifies the name of the output file. If
  the "OutFile:" token is followed by a leafname only like "Myfile" then this
  is added to the path of the original file. If the "OutFile:" token specifies
  a complete pathname then this is used instead.

- "Preserve command parameters" is automatically selected if an Abosolute output
  file type is selected. This may still be manually unselected.

- Code added to search for variables that are candidates for 'locking'.

- Added a window to display all variables which are being locked. These variables
  are the ones either manually passed using "SBSMake" file, inside a progarm
  using "REM LOCK" or automatically found by StrongBS.
  

- Disclaimer file added :-)

Updates and improvements:
=========================

- Re-write of the "Eval expression" option code... the code now will
  evaluate hexadecimal number... still eta testing :-)

- Brackets removal code improved so that simple expression and numbers inside
  brackets following IF, WHILE or UNTIL which were not removed earlier are
  now handled correctly....

- The brackets removal code now performs any necessary sign conversion in order
  to remove the brackets, so things like:
  
  X%=Y%-(var%-12*14+mem%+1)  will be changed to:
  
  X%=Y%-var%-12*14-mem%-1

- Brackets after # or & inside assembler listings are now processed.

- Colon removal code improved for assembler listings. Colon after the ] is
  now removed. Thanks to Sophie Wilson for pointing this out.

- Calling of Routines re-organised to allow better crunching of assembly
  listings!
  
- Help messages updated for the new options.

- DATA concatenation code no longer needs the "Remove_Spaces" or "Remove REMs"
  options and can handle spaces and REMs internally. REM lines between DATA lines
  are removed unless referenced by RESTORE etc.. Empty lines between DATA lines
  are also automatically removed when concatenating unless they are referenced.
  Spaces after the DATA keyword and the first element are automatically
  removed when concatenating the DATA statements and lines. Now, this option
  no longer requires other supporting squash options..

- DIM lines and statement concatenation code no longer needs the "Remove_Spaces"
  or "Remove REMs" options and can handle spaces and REMs internally. REM lines
  between DIM lines are removed unless they are referenced. Empty lines between
  DIM lines are also automatically removed when concatenating unless they are
  referenced. Spaces after the DIM keyword and the first element are
  automatically removed when concatenating the DIM statements and lines. Now,
  the "Concatenate DIM" option no longer requires other supporting squash
  options and can be selected alone.

- LOCAL lines and statement concatenation code no longer needs the
  "Remove_Spaces" or "Remove REMs" options and can handle spaces and REMs
  internally. Similar to DIM and DATA lines concatenations.

- The VDU concatenation option code changed so that it can be used as a stand
  alone option with no support from other options.

- If the user selects not to remove REMark lines then the "Concatenate Lines"
  option will not join a REM line to a previous line.
  There could be a good reason for a REM statement to start on a new line.
  One of these is to allow the !Overlay application by Graham Crow to work
  with BASIC programs compressed by StrongBS.. :-)

Bug fixes:
==========

- Bug fix: when seraching for OTHERWISE in the "Remove empty WHEN", nested CASE
           structures are now taken into consideration.

- Bug fix: in "Convert CHR$ to string" option. Also the option code has been
           re-written and does not require any other support options and can
           handle spaces internally, however brackets are not yet handled
           internally and will require the "Remove brackets" option to convert
           those CHR$ inside brackets.

- Bug fix: in the startup default options..If no choices file is found,
           the default is now "Custom mode" as I have internally programmed
           it for a startup else it is taken from the Choices file.

- Bug fix: constant variables which appear in a procedure call are not replaced
           as they may be assigned by a RETURN parameter. There is a place for
           improvement here (i.e. a scan of procedures that use RETURN
           keywords)...

- Bug fix: A=var+A DIV var  is now correctly evaluated.

- Bug fix: *Commands with a colon like "*Settype scsi::hard.$.x" was converted
           to "*Settype scsi". This is now fixed.

- Bug fix: in numbers evaluations (the ^ is higher priority than * or /).

- Bug fix: constant variables A% to H% are not converted or removed.

- Bug fix: lines thats were supposed to be concatenated after a string that
           contains top-bit set chars wasn't done. This is now fixed.

- Bug fix: a space before ( was removed on a line that contained a DIM statement
           The DIM token check was incorrect. This is now fixed... thanks to
           David McCormack for pointing this out.

- Bug fix: the "Keep REM staring with:" option skipped the first char of the
           string and was looking for a string starting with the second char.
           This is now fixed.

- Bug fix: unused routines (functions/procedures) code changed to cope with
	   overlay files.

- Bug fix: The 'link' char in a branch instruction no longer converted into
           upper case.

- Bug fix: A small bug in the "Remove STEP" code, that caused the STEP token
           to be left after removing the number, is now fixed.

- Bug fix: In the Memory Indirection code. E%!0=4 was converted into E !%=4.
           This is now fixed.

- Bug fix: In the "Unused_Vars" removal code that caused variables assigned
           to Functions to be removed if they appeared inside an expression.

- Bug fix: var=TIME-1 no longer converted to var=TIMETRUE

- Bug fix: In the "Number Evaluation Code" that caused X=X-2+5 to be
           evaluated to X=X3 rather than X=X+3

- Bug fix: In "unused variables removal" code, a variable assigned to an
           INKEY statement will not be removed even if not used, as the
           INKEY keyword is also used as a time delay.          

- Bug fix: In font-end program. Brackets removal code requires the spaces
           removal code to be selected. This is now done automatically.
           
- Bug fix: CASE TRUE OF and CASE FALSE OF constructs are not converted
           to IF TRUE...and IF FALSE... constructs as this gives different
           results.
           
- Bug fix: Spaces inside a *Command which follows a DEF are not removed.

- Bug fix: In the "<>0 removal" code, a space is now automatically inserted
           if the "<>0" is between two variables.




                Hope you find StrongBS useful 
                                       


StrongBS  Mohsen Alshayef 1993-1998

Contact details:
----------------

Mohsen Alshayef,
email: mohsen@qatar.net.qa
