To Do List



  • Initialise composites produces unused entries
  • Undefined shared/local arrays and strings not being rejected when explicit set.
  • Compiler blowing up in 'user' mode at end of compiling a line.

To Do:

Synchronise use of keywords etc for variable names

  • Synchronise use of keywords etc for variable names.
    • This will need to be tackled in each place as it arises. It could be handled at parse time by prefixing names with a dot (.) as an escape.
    • [LynPlexS] support dot (.) as an identifier escape character.

Synchronise loop processing

  • Synchronise do loop processing.
    • [LynPlexI] Support exit loop as a synonym of exit do.
    • [LynPlexI] Drop support for exit do.
    • [LynPlexS] Support do before for.
    • [LynPlexS] Change do .. while, do .. loop etc to LynPlex rules.
    • [LynPlexS] Allow while and until to follow for.
    • [LynPlexS] Drop support for exit do.
    • [LynPlexS] Support do loop.
    • [LynPlexI] Support do loop.
  • Synchronise for processing.
    • [LynPlexS] Support for each and for times.
  • Decide if until is executed at least zero or one time.
    • Consider do until(eof)
    • Consider an option

Synchronise logical operators

  • Synchronise and, or, xor and not operators.
    • and/&& are logical and. [AndAlso in LynPlexC]
    • & is binary and.
    • or/|| are logical or. [OrElse in LynPlexC]
    • | is binary or.
    • xor is logical xor.
    • ^ is binary xor.
    • not is logical not.
    • ~ is binary not.
    • [All] All words are logical. To make them binary consider prefix with hash (#).
    • [LynPlexI] support ! as synonym for logical not.

Synchronise mathematical operators

  • [LynPlexS] Support ++ etc.
  • Synchronise integer handling
    • [LynPlexI] Avoid problem with unsigned integers greater than 0x7fffffff.

Synchronise line continuation

  • Synchronise Continuation: (see Continuation)
    • [LynPlexS] allow = to automatically continue.
    • [LynPlexS] support .. as forced line continuation
    • [LynPlexS] drop _ as forced line continuation

Synchronise variable definition syntax

  • [LynPlexI] support var as a synonym of local.
  • [LynPlexI] treat [as] type as a comment.
  • [LynPlexS] support [as] before type in declarations.
  • [LynPlexS] support [as] type at end of declarations.
  • [LynPlexS] drop support for auto.
  • [LynPlexS] support int and integer as synonyms of slong.

Synchronise scope

  • Synchronise local, static, shared, public, private, external and common.
    • local is the default within procedures/functions.
    • private is the default at the top level.
    • [LynPlexI] support public and private for data objects.
    • [LynPlexI] support public and private for procedures and functions.
    • [LynPlexI] drop requirement for shared variables to be declared in each procedure/function.
    • [LynPlexS] support common as a true common.
    • [LynPlexS] support public and private for procedures and functions.

Synchronise allocation in data declarations

  • Synchronise allocation in data declarations.
    • [LynPlexS] allow assignment in all scope statements except external and common.
    • [LynPlexS] allow array allocation in all scope statements except external and common.
    • [LynPlexI] allow assignment in all scope statements except external and common.

Synchronise array processing

  • Synchronise array functions.
    • [LynPlexI] Support split and join as functions.
    • [LynPlexS] Create split and join functions.
    • [LynPlexS] Add dynamic arrays
      • checkdec and xgr waiting on these.
    • [LynPlexS] Drop dim/redim.

Get trace working

  • Get trace working.
    • [LynPlexI] Implement interactive trace. (Needs spec).
    • [LynPlexS] Consider interactive trace. (Needs spec).

Synchronise display processing

  • Get console working as a command.
    • [LynPlexS] Add console as command and drop other console commands
  • Get console working as an object.
    • [LynPlexI] Add name to console to use as an object.
    • [LynPlexS] Add name to console to use as an object.
  • Introduce graphics as an object

Synchronise system commands

  • Synchronise pause/delay/sleep commands.
    • [LynPlexS] Replace XstSleep function with pause command.

Synchronise import processing

  • Synchronise import .
    • Synchronise files to handle 'files' header and then call files.
    • Synchronise import to handle MySQL header and then call MySQL.
    • Synchronise import to support Tk/Tcl header and then call Tk/Tcl. See and
    • Check others. The rest should be simple after this.
    • Synchronise file handling.
      • Files is case sensitive!
    • [LynPlexS] imports in external code are not initialised.
    • [LynPlexS] All imports in main code are initialised even if statically linked.

Synchronise concatenation

  • Synchronise concatenation:
    • [LynPlexS] support : as concatenation operator in expressions.
    • [LynPlexS] support (space) as concatenation operator in put statements.
    • [LynPlexS] support (space) as concatenation operator in expressions.
    • [LynPlexS] reconsider use of multiple colons as space generators.
    • [LynPlexI] ?? support use of multiple colons as space generators.

Synchronise procedure/function declaration syntax

  • Synchronise declare procedure/function using common declaration syntax
    • declare function date alias/= xstdate(x,y,z)
    • declare function date(x,y,z) alias/= xstdate(z,y,x)
    • [as] type [.]a
    • [.]a [as] {type|sint32}]
    • Compiler/interpreter will try to identify one of the words as a defined type.
    • If declare includes an assignment, the type may be inferred as integer, double or string.
  • Declare local functions by reading file.
  • Allow implied return type of integer from functions/procedures.
  • [LynPlexS] Support overloading of functions.
  • [LynPlexI] Support overloading of functions.

Synchronise date and time handling

  • Synchronise date and time functions.
    • [LynPlexS] change date/time to behave like LynPlex.

Synchronise input/output processing

  • Synchronise get command.
    • [LynPlexI] Finish get template options.
    • Support data as a source option for get.
    • Support command as a source option for get.
  • Synchronise put command.
    • Synchronise put format.
  • Use environ(“file.filename”) for files
  • Synchronise input/output processing.
    • [LynPlexI] On open, support as binary, as record etc.

Synchronise string functions

  • Synchronise string functions.
    • C strings.
    • [All] Define instr rules as:
      • if either is preceded by any, that is the needle, else
      • smallest is needle, largest is haystack.
      • if starting position is negative, denotes reverse search.
      • default is case insensitive search.
      • extra option (to be defined) for case sensitive search.
    • [LynPlexI] implement above rules
    • [LynPlexS] implement above rules
    • [LynPlexS] drop support for rinstr, instri, rinstri
  • Synchronise replace functions.
    • [All] Define replace rules as:
      • current replace is ok
      • if second argument is a string then replace = translate
      • replace translate with character by character translate as in PL/I and Rexx.
  • Synchronise asc(ord) and chr.
    • Use ord, otherwise use the way LynPlexC works. (See simple/asc_chr example).
    • [LynPlexS] support single byte enclosed in single quote as a string as well as an integer.
      • This needs to be tackled as it arises as the solution will be different in each case, although it may be enough to interpret it as chr$('?').
  • Synchronise escaped strings (!“…..”).
    • [LynPlexS] allow option escape to define escape character.

Synchronise properties

  • Properties
    • Define all properties of objects as name.$prop or name..prop??
      • e.g. array.$hi, array.$lo as equivalent to range()/ubound() and origin()/lbound()
    • Allow properties to be set
      • e.g. array.$hi = 99 is equivalent to dim array(99)
    • Drop all equivalent functions after implementation.

Synchronise constant and environmental variable processing

  • Define consistent use of $ as prefix.
    • $$.xxx is an array of system constants (same as xxx)
    • $$env is an environment variable and can be read or written.
    • $xxx are local constants.
    • etc.

Synchronise addressing and pointers

  • Synchronise addressing and pointers.
  • [LynPlexS] drop single line comments beginning with “'”.
    • This only applies in 'basic' mode and so is not essential.
    • [LynPlexS] Support [] offset processing.
    • [LynPlexI] Support [] offset processing.
  • Add link or base as equivalent to a pointer or data address.

Synchronise type processing

  • Synchronise type processing.
    • Strings and arrays in structures.
    • [LynPlexI] Support type processing.

Synchronise enum processing

  • Write up enum processing.
    • Add optional number (enum n) to use as first number.
  • Synchronise enum processing.
    • [LynPlexI] Add enum
    • [LynPlexS] Add enum

Synchronise select blocks

  • Synchronise select blocks.
    • [LynPlexS] Support const on select statement.
    • [All (long term)] Add option to next case to force original test expression to be re-evaluated.

Synchronise error handling

  • Synchronise error processing.

Convert source

  • Convert LynPlexI from C++ to LynPlexC.
    • Build existing win32 source as a separate library.
    • Build existing source as a library.
    • Create new main module in LynPlexC.
    • Include existing code at link time.
  • Create stand-alone run-only version.
    • [LynPlexI] Only applicable to LynPlexI.

Port to other systems

  • Port to Linux
    • [LynPlexI] Should not be difficult.
    • [LynPlexS] Should be possible by using XBasic code.
  • Port to IBM
    • [LynPlexS] Code generation needs to be separated from main code. Once this is done it may not be a major task.
    • [LynPlexI] Could depend on a rewrite in LynPlexC/LynPlexS.
  • Port to ARM/RiscOS
    • [LynPlexS] Code generation needs to be separated from main code. Once this is done it may not be a major task.
    • [LynPlexI] GCC available in ARM Linux, otherwise could depend on a rewrite in LynPlexC/LynPlexS.

External Modules

  • Extensions
    • xgr.
    • xui.
    • wpWin
    • cpSys


  • Tools
    • checkdec.



To Do:

  • Extract pre-processor from LynPlexC as a separately compiled lib (maybe dll later).
    • Currently blowing up in LynPlexC as it starts to link the library.
  • Add select

Plasma Assembler


To Do:

  • Allow LynPlex style comments (//, /*…*/) in addition to (;)
  • Allow Linux style comments (#) in addition to (;)
  • Assemble output from LynPlexS.
  • Assemble output from LynPlexC.
  • Generate Linux (elf) object files.
  • Convert to LynPlexS source code.
  • Generate 64 bit code.


To Do:

  • Think of a good name.
  • Link output from GoAsm
  • Link output from Gas
  • Produce elf files.


To Do:

  • Convert.

changes/todo.txt · Last modified: 2016/10/29 16:28 (external edit)