(*********************************************************************
 *                                                                   *
 *  :Program.    GameSupport.def                                     *
 *  :Author.     Michael Frieß                                       *
 *  :Address.    Kernerstr. 22a                                      *
 *  :Address.    7000 Stuttgart 1                                    *
 *  :Phone.                                                          *
 *  :shortcut.   [MiF]                                               *
 *  :Version.    0.1                                                 *
 *  :Date.       03.04.88                                            *
 *  :Copyright.  PD                                                  *
 *  :Language.   Modula-II                                           *
 *  :Translator. M2Amiga                                             *
 *  :Contents.   Routinen zur Spieleprogrammierung                   *
 *  :bugs.       Die Controller-Prozeduren sind zur Zeit nur mit     *
 *  :bugs.       Port 1 möglich!                                     *
 *********************************************************************)

DEFINITION MODULE GameSupport;

FROM GamePort             IMPORT GamePortTrigger, Controller;


(*********************************************************************
 *  Die folgenden Konstanten beschreiben die möglichen Aktionen      *
 *  Für schnelle Berechnungen können sie ohne zusätzliche Abfragen   *
 *  in Formeln verwendet werden.                                     *
 *********************************************************************)

 CONST None     =  0;  (* Keine Aktion *)

       (* Absolut gesteuerter Joystick:                *)
       Right    =  1;  (*                 ^ Back (!)   *)
       Left     = -1;  (*                 |            *)
       Back     = -1;  (*        Left <--  --> Right   *)
       Forward  =  1;  (*                 |            *)
                       (*                 V Forward    *)

       Pushed   =  1;  (* Knopf soeben gedrückt        *)
       Released = -1;  (* Knopf soeben losgelassen     *)


 TYPE Result = RECORD              (* kann folgende Werte haben:    *)
                 y      : INTEGER; (* Back, Forward, None           *)
                 x      : INTEGER; (* Left, Right, None             *)
                 button : INTEGER; (* Pushed, Released, None        *)
               END;


(*********************************************************************
 *  Das Betriebssystem 1.2 unterstützt zwei Gameports, die           *
 *  entsprechend wie in Betriebssystemroutinen mit Port 0 (da müßte  *
 *  gerade Ihre Maus drin stecken) und Port 1.                       *
 *********************************************************************)

 TYPE Port = [0..1];




 PROCEDURE InitController (p : Port);
(*********************************************************************
 *  Die Bereitstellung von Messageport, Device etc. und Default-     *
 *  Initialisierung des Controllers in Port p. Es wird sicherge-     *
 *  stellt, daß bei Programmende alle Ressourcen freigegeben werden! *
 *********************************************************************)


 PROCEDURE SetControllerType (c : Controller; p : Port);
(*********************************************************************
 *  Der Typ des Controllers in Port p wird auf c gesetzt.            *
 *  Default (InitController):  absJoystick.                          *
 *********************************************************************)


 PROCEDURE SetControllerTrigger (t : GamePortTrigger; p : Port);
(*********************************************************************
 *  Die Triggerbedingungen werden auf t gesetzt. Näheres ist den     *
 *  Systemhandbüchern unter GamePort und GamePortTrigger zu entneh-  *
 *  men.                                                             *
 *  Default (InitController): x = 1        y = 1                     *
 *                            timeout = 1  keys = {upKeys, downKeys} *
 *********************************************************************)


 PROCEDURE GetController (VAR r : Result; p : Port);
   (* returns state of the controller in r in the dedicated port   *)
   (* Port is allowed to be 0 or 1.                                *)


 PROCEDURE QDJoystick (VAR r : Result; p : Port);
   (* returns state of an absolut joystick in r in the dedicated   *)
   (* port. Port is allowed to be 0 or 1.                          *)
   (* It´s an Quick and Dirty - procedure using the hardware       *)
   (* module.                                                      *)
   (* Attention: Button = Pushed, while(!) Button is down          *)


 PROCEDURE InitRelative;

 PROCEDURE Relativate (VAR x,y : INTEGER;
                       action  : INTEGER);

END GameSupport.

