==========================================
Effectus - Missing features and bug issues
==========================================

Not yet supported
-----------------

- SET directive addressing
- Note and Point PROCedures for disk drives support
- No proper error handling is done yet, so it happens that no errors show on the screen
  even when something goes wrong

Bug issues
----------
 (note that these are just temporary issues which will be resolved in time)

- FUNCtion conducted as inline machine language block does not return a value
- PROC/FUNC parameter types missing: BYTE ARRAY, CARD ARRAY, POINTER
- Pointers are not yet fully supported
- BYTE/CARD ARRAY declaration structure has to follow some rules to be compiled correctly
  
  Correct syntax (characters "=", "[" and data (or part of data) must be on the same line):
    BYTE ARRAY ndl=[112 112 112 66 64 156 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 86 216 159 65 32 156]
    
    BYTE ARRAY CLRS=[64 66 68 70 72 74
      72 70 68 66  64  66  68  70  72
      74  72  70  68  66  64  66  68
      70 72 74 76 ]

  Wrong syntax:
    BYTE ARRAY ndl=
      [112 112 112 66 64 156 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 86 216 159 65 32 156]

    BYTE ARRAY ndl=[
      112 112 112 66 64 156 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 86 216 159 65 32 156
    ]

  Note!
  Also ending ] bracket must end with some data before it

  Correct syntax:
    BYTE ARRAY ndl=[112 112 112 66 64 156
      2 2 2 2 2 2 2 2 2 2 2 2 2
      2 2 2 2 2 2 2 2 86 216 159 65 32 156]

  Wrong syntax:
    BYTE ARRAY ndl=[
      112 112 112 66 64 156 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 86 216 159 65 32 156
    ]

- TYPE declaration structure has to follow some rules to be compiled correctly

  Proper syntax (ending "]" character must be separated from other values:
    TYPE REC = [
      BYTE day, month CARD year
      BYTE height
    ]
  or
    TYPE REC =
    [
      BYTE day, month CARD year
      BYTE height
    ]

  Wrong syntax:
    TYPE REC = [BYTE day, month CARD year
                BYTE height]

- DEFINE issues:
  - You are free to name DEFINE constants as you like, but it is adviceable to name them
    prefixed with "_" character in case same names appear anywhere else in the program
    inside other strings. Currently, parser does not differentiate between constants for whole
    words or substrings inside strings.
  - DEFINE constants must be named with length of at least 3 characters:

    Proper syntax:
      DEFINE Cls="PUT(125)"
      DEFINE Black="Poke(710,0)"
      DEFINE max="3"
      DEFINE Pre="PUTD(6,"
      
    Wrong syntax:
      DEFINE P="PUTD(6,"
      DEFINE Pr="PUTD(6,"

  - DEFINE constant value definition must start and end with '"' character on the same line

    Proper syntax:
      DEFINE GETTEMPS="[$68 $85 $D3 $A2 $00 $68 $95 $80 $68 $95 $A0 $68 $95 $A8 $68 $95 $C0 $E8 $E0 $08 $D0 $EF]"

    Wrong syntax:
      DEFINE GETTEMPS="[$68 $85 $D3 $A2 $00 $68
        $95 $80 $68 $95 $A0 $68 $95 $A8
        $68 $95 $C0 $E8 $E0 $08 $D0 $EF]"

- Variable declared as BYTE ARRAY or CARD ARRAY with predeclared values MUST NOT be
  the last variable declaration in PROCedures or FUNCtions. This would lead to
  missing declaration of such variable in created Mad Pascal listing code.

  Proper syntax:
    PROC Main()

    BYTE ARRAY new_dir=[$D7 $D8 $D9 $FF 1 39 40 41]
    BYTE ch, dir

    dir = 1
    ...

  Wrong syntax:
    PROC Main()
  
    BYTE ch, dir
    BYTE ARRAY new_dir=[$D7 $D8 $D9 $FF 1 39 40 41]

    dir = 1
    ...
