DEFINITION MODULE GEMVDIbase;


(* ------------------------------------------------------------- *)
(*                                                               *)
(*      Modula-2 interface to GEM Virtual Device Interface       *)
(*                                                               *)
(* ------------------------------------------------------------- *)

(* ------------------------------------------------------------- *)
(* (c) Copyright Lehrstuhl fr Prozerechner   TU Mnchen   1987 *)
(* ------------------------------------------------------------- *)



FROM SYSTEM IMPORT ADDRESS;

TYPE
  VDIWorkInType     = ARRAY [0..10]  OF INTEGER;
  VDIWorkOutType    = ARRAY [0..57]  OF INTEGER;
  PxyArrayType      = ARRAY [0..3]   OF INTEGER;
  BigPxyArrayType   = ARRAY [0..7]   OF INTEGER;
  MouseArrayType    = ARRAY [0..38]  OF INTEGER;
  SmallArrayType    = ARRAY [0..1]   OF INTEGER;
  RGBArrayType      = ARRAY [0..2]   OF INTEGER;
  TextAttrArrayType = ARRAY [0..9]   OF INTEGER;
  FontNameType      = ARRAY [0..31]  OF CHAR;
  DistanceArrayType = ARRAY [0..4]   OF INTEGER;
  FilmNameType      = ARRAY [0..124] OF CHAR;
  FilmIndexType     = ARRAY [0..7],[0..1] OF INTEGER;
  CtrlArrayType     = ARRAY [0..127] OF INTEGER;


VAR
  contrl:         ARRAY [0..11] OF INTEGER;

  intin,
  ptsin,
  intout,
  ptsout:         CtrlArrayType;

  i, h:           INTEGER;

  ADRintin,
  ADRptsin,
  ADRintout,
  ADRptsout,
  ADRParams:      ADDRESS;

  parameterBlock: ARRAY [0..4] OF ADDRESS;



PROCEDURE CopyInt (VAR IntArray: ARRAY OF INTEGER; length: INTEGER);

(* Copy IntArray[0] ... IntArray[length-1]
   to      intin[0] ...    intin[length-1]  *)


PROCEDURE CopyPxy (VAR PxyArray: ARRAY OF INTEGER; pts: INTEGER);

(* Copy PxyArray[0] ... PxyArray[pts*2 - 1]
   to      ptsin[0] ...    ptsin[pts*2 - 1] *)


PROCEDURE CallVDI;

(* Perform trap to GEM VDI *)


PROCEDURE CallVDI2 (function, handle: INTEGER);

(* Set contrl[0] and contrl[6] and perform trap to GEM VDI *)


PROCEDURE CallVDI4 (function, handle, pts, int: INTEGER);

(* Like "CallVDI2", additionally sets contrl[1] and contrl[3] *)


PROCEDURE CallVDI5 (function, subfunction, handle, pts, int: INTEGER);

(* Like "CallVDI4", additionally sets contrl[5] with "subfunction" *)


PROCEDURE SetContrl (c0, c1, c3, c5, c6: INTEGER);

(* Set passed parameters into the control array,
   subsequent call of "CallVDI" necessary        *)

END GEMVDIbase.
