obliq/src/ObliqOnline.i3


 Copyright 1991 Digital Equipment Corporation.               
 Distributed only by permission.                             

INTERFACE ObliqOnline;
IMPORT Rd, SynWr, Obliq;

TYPE
  T <: TPublic;
  TPublic =
    OBJECT
      env: Obliq.Env;
      swr: SynWr.T;
    END;
An Obliq interpreter. The env field is the current interpreter environment: it can be used to investigate the state of the interpreter. The swr field is the writer the interpreter is using.

PROCEDURE Setup();
To be called once before any other use of is interface.

PROCEDURE New(greetings: TEXT:=""; swr: SynWr.T:=NIL; loadDotObliq:
    BOOLEAN:=TRUE; env: Obliq.Env := NIL): T;
An interactive interpreter (a read-eval-print loop), producing output to swr (NIL = standard output). If loadDotObliq is true, the file ~/.obliq is loaded. Returns an interpreter that can be given input repeatedly via Interact. Env is the initial environment for the interpreter; if env is NIL, Obliq.emptyEnv is used. Note that the collection of registered built-in libraries, ObLib.libraries, is global and shared by all interpreters. The env field of the result can be used to extract partial or final results, by Obliq.Lookup.

PROCEDURE Interact(interpreter: T; rdName: TEXT:=""; rd: Rd.T:=NIL;
  closeRd: BOOLEAN:=FALSE; generateEOF: BOOLEAN := TRUE);
Push a new reader rd (NIL = standard input) as a source of characters for the interpreter. Returns when rd is exhausted. This procedure can be called repeatedly on the same interpreter, each time reusing the previous interpreter state. The rdName should be used to identify the reader (e.g. its file name, if any) for error reporting purposes. If closeRd is true, Rd.Close(rd) is executed when rd is exhausted. If genereteEOF is true, an Eof lexical token is generated when rd is exhausted (This means that, according to the Obliq syntax, the reader cannot end with an incomplete Obliq phrase. Moreover, if Eof is generated, unbalanced comments and quotes do not propagate from one reader to the next).

END ObliqOnline.