tcl/src/Tcl.i3


Copyright (C) 1994, Digital Equipment Corp.

INTERFACE Tcl;

IMPORT Text;

TYPE
  ErrorCode = {Error, Return, Break, Continue};

EXCEPTION
  Error (ErrorCode);

TYPE
  Args = ARRAY OF Text.T;

  CmdClosure = OBJECT METHODS
                 apply (interp: T; args: Args) RAISES {Error};
                 delete () := DoNothing; END;

  CmdTraceClosure = OBJECT METHODS
                     trace (interp: T;
                            level: INTEGER;
                            command: Text.T;
                            args: Args); END;
  CmdTraceHandle <: REFANY;

  VarTraceClosure = OBJECT METHODS
                      trace (interp: T;
                             name1, name2: Text.T;
                             flags: VarTraceFlags): Text.T; END;
  VarTraceHandle <: REFANY;
  VarTraceFlag  = {GlobalOnly, Reads, Writes, Unsets};
  VarTraceFlags = SET OF VarTraceFlag;

  VarSetFlag  = {GlobalOnly, LeaveErrMsg, AppendValue, ListElement, NoSpace};
  VarSetFlags = SET OF VarSetFlag;

  T <: PublicT;

  PublicT = OBJECT METHODS
    new (): T;
    delete ();

    addErrorInfo (msg: Text.T);
    setErrorCode (s: ARRAY OF Text.T);
    unixError (): Text.T;

    createCommand (name: Text.T; closure: CmdClosure);
    deleteCommand (name: Text.T): BOOLEAN;

    createTrace (level: INTEGER; closure: CmdTraceClosure): CmdTraceHandle;
    deleteTrace (h: CmdTraceHandle);

    traceVar  (name: Text.T; flags: VarTraceFlags;
               cl: VarTraceClosure): VarTraceHandle RAISES {Error};
    traceVar2 (name1, name2: Text.T; flags: VarTraceFlags;
               cl: VarTraceClosure): VarTraceHandle RAISES {Error};
    deleteTraceVar (h: VarTraceHandle);

    eval (cmd: Text.T; stopOnBracket: BOOLEAN) RAISES {Error};
    varEval (s: ARRAY OF Text.T) RAISES {Error};
    evalFile (fileName: Text.T) RAISES {Error};

    exprInt (string: Text.T): INTEGER RAISES {Error};
    exprDouble (string: Text.T): LONGREAL RAISES {Error};
    exprBoolean (string: Text.T): BOOLEAN RAISES {Error};
    exprString (string: Text.T) RAISES {Error};

    getInt (string: Text.T): INTEGER RAISES {Error};
    getDouble (string: Text.T): LONGREAL RAISES {Error};
    getBoolean (string: Text.T): BOOLEAN RAISES {Error};

    initHistory ();
    recordAndEval (cmd: Text.T;
                   stopOnBracket, recordOnly: BOOLEAN := FALSE) RAISES {Error};

    setResult (string: Text.T);
    getResult (): Text.T;
    appendResult (s: ARRAY OF Text.T);
    appendElement (string: Text.T; noSep: BOOLEAN);
    resetResult ();
    freeResult ();

    setVar  (varName, newValue: Text.T;
             flags: VarSetFlags) RAISES {Error};
    setVar2 (name1, name2, newValue: Text.T;
             flags: VarSetFlags) RAISES {Error};
    getVar  (varName: Text.T;
             flags: VarSetFlags): Text.T RAISES {Error};
    getVar2 (name1, name2: Text.T;
             flags: VarSetFlags): Text.T RAISES {Error};
    unsetVar  (varName: Text.T;
               flags: VarSetFlags) RAISES {Error};
    unsetVar2 (name1, name2: Text.T;
               flags: VarSetFlags) RAISES {Error}; END;

PROCEDURE DoNothing (self: CmdClosure);
---------------------------------------------------------------------------

TYPE
  CmdBuf <: OBJECT METHODS
              new (): CmdBuf;
              delete ();
              assemble (s: Text.T): Text.T; END;
---------------------------------------------------------------------------

PROCEDURE SplitList (interp: T; list: Text.T): REF Args RAISES {Error};
PROCEDURE Merge (args: Args): Text.T;

END Tcl.