
                   BAPC 3.0 - The structure of the compiler
                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  Last modified: 1999.1.2       actual version of BAPC: v3.0a17 build #0454

     What  is written here is not essential for programming, but helps a lot
  understanding the compiler ( and the documentation :)).

Steps of compiling a line:
~~~~~~~~~~~~~~~~~~~~~~~~~~

0. level: COMPILE_FILE (COMPFIL2.INC)
  - READLN   (READLN.INC)
  - .OUT if presents
  - cropping of remarks  (after ;, /* */)
  - STR0_NYIR - removing of unnecessary space, TABs (STR0_BAPC.LIB)
  - handling of indirects: removing of { and }      (OPENF.INC)
1. level:  (the string doesn't contain remarks, indirect-change)
  - compiling-control instructions (i.e.: .ASM .BAP)
  - INCLUDE and companion     (recursion, INCLFILE.INC, INCL_DB.INC)
  - calling FALSEMOD.INC  (jumping over always false conditions)
  - if compiling to .BPO: GOTO 0. level
  - calling X_COMP_LINE (2. level)
2. level: X_COMP_LINE (BAPC1M29.BPE)
  - correcting of segments (.MASM)    [xS:sthing] -> xS:[sthing]
  - STR0_UPCASE->USOR, again STR0_NYIR
  - cropping of labels, WITH, if proc found check whether to compile (.LIB)
  - handling of macro definitions  (#macroname...)
  - full line instructions   (IF-THENCMD, PUSH() etc.)
  - searching for // , cropping and evaluating of the  first part -> 3. level
3. level:     (the string doesn't contain // )
  - compiling of labels and abbrevs (@ ~ xPT -> etc.)  like the CJ.INC
  - compiling of inbuilt instructions:
    WRITE*, !,  etc
    := += etc -> C_MATH1.INC
    PUSP/POP -> PUSHPOP.INC
    FILE* -> FILEMUV2.INC
    lots of things -> CMD1.INC
    VAR, CONST -> VARCONST.INC
  - compiling of macros
if not EOL then GOTO 2. level, otherwise GOTO 0. level
