(**************************************************************************

     $RCSfile: Translator.mod $
  Description: Interface to translator.library

   Created by: fjc (Frank Copeland)
    $Revision: 3.2 $
      $Author: fjc $
        $Date: 1994/08/08 00:49:16 $

  Includes Release 40.15

  (C) Copyright 1985-1993 Commodore-Amiga, Inc.
      All Rights Reserved

  Oberon-A interface Copyright © 1994, Frank Copeland.
  This file is part of the Oberon-A Interface.
  See Oberon-A.doc for conditions of use and distribution.

***************************************************************************)

MODULE Translator;

(*
** $C- CaseChk       $I- IndexChk  $L+ LongAdr   $N- NilChk
** $P- PortableCode  $R- RangeChk  $S- StackChk  $T- TypeChk
** $V- OvflChk       $Z- ZeroVars
*)

IMPORT Exec, SYS := SYSTEM;


(*
**      $VER: translator.h 36.1 (13.12.90)
**
**      Useful definitions for translator.library
*)

CONST

(*      Translator error return codes   *)

  notUsed * =    -1;      (* This is an oft used system rc        *)
  noMem *   =    -2;      (* Can't allocate memory                *)
  makeBad * =    -4;      (* Error in MakeLibrary call            *)


(*-- Library Base variable --------------------------------------------*)

TYPE

  TranslatorBasePtr = CPOINTER TO TranslatorBase;
  TranslatorBase = RECORD (Exec.Library) END;

CONST

  name * = "translator.library";

VAR

  base* : TranslatorBasePtr;


(*-- Library Functions ------------------------------------------------*)

(*
**      $VER: translator_protos.h 36.1 (7.11.90)
*)


LIBCALL (base : TranslatorBasePtr) Translate *
  ( inputString      [8] : ARRAY OF CHAR;
    inputLength      [0] : LONGINT;
    VAR outputBuffer [9] : ARRAY OF CHAR;
    bufferSize       [1] : LONGINT )
  : LONGINT;
  -30;


(*-- Library Base variable --------------------------------------------*)
(* $L- Address globals through A4 *)


(*-----------------------------------*)
PROCEDURE* CloseLib ();

BEGIN (* CloseLib *)
  IF base # NIL THEN Exec.base.CloseLibrary (base) END;
END CloseLib;

(*-----------------------------------*)
PROCEDURE OpenLib * (mustOpen : BOOLEAN);

BEGIN (* OpenLib *)
  IF base = NIL THEN
    base :=
      SYS.VAL
        ( TranslatorBasePtr,
          Exec.base.OpenLibrary (name, Exec.libraryMinimum) );
    IF base # NIL THEN SYS.SETCLEANUP (CloseLib)
    ELSIF mustOpen THEN HALT (100)
    END;
  END;
END OpenLib;


BEGIN
  base := NIL
END Translator.
