'line' is reused when
- result == 4
- result == 4 and then result == 1/3/4/5
- result == 5 (via crappa:)
- result == 1
- result == 3 and there's an error in read_next_line (either script was killed or EOF)
'line' is ignored when
- result == 0 [skip to next line]
- result == 2 [yield]

When process_line returns 3, 4 or 5:
4:
- '}' end of skipped bloc => allow code after '}', IMHO meant to support:
  if (0) {
     something();
  } else               <- here 'else' will be analyzed next time
  {
     something_else();
  }

- 'int XXX = ...' => create/register variable XXX then analyze 'XXX = ...'

5:
'if (...)', after '(...)' was analyzed
e.g.:
  if ($flag == 1) say("I won!", 1);  <- not recommended, may mess string search (though present in the dinkc.txt documentation)
  if ($flag == 1) {

1:
after
  'else'
  '{'
  '}' (not skipped, or nested in a skipped bloc)

3:
  return from 1-line conditional bloc if condition was false
  if (0)
    something();       <- return 3;
  else
    something_else();
  if (1)
    something();
  else
    something_else();  <- return 3;



4 => doelse once
3 => doelse while (return == 3 or return == 5)
5 => 

1 => continue processing this line (!= process next line, as '0' does)



=====

Changes in v1.08 - variables and scope:

- decipher_string -> replace longest variables first
- scope check:
  before: scope == DINKC_GLOBAL_SCOPE || scope == cur_script
  => FIFO (overrides are possible, but first memory slot always wins)
  after:  get_var(script, var)
  => local then global

  [X] var_equals -> search for LHS, search for RHS if variable
  [X] decipher -> search for a given variable
  [X] decipher_string -> recurse_var_replace -> replace all vars in a
      string, longest first
