home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 2: PC / frozenfish_august_1995.bin / bbs / d09xx / d0931.lha / Modules / InputDevice / InputDevice.mod / InputDevice.mod
Text File  |  1993-12-20  |  5KB  |  245 lines

  1. IMPLEMENTATION MODULE InputDevice;
  2.  
  3.  
  4. (* Die Anleitungen und ErlΣuterungen befinden sich im Definitionsfile  *)
  5. (* Compiler M2Amiga V4.097d                  ⌐ 1991 by Andre Wiethoff  *)
  6.  
  7. (*$ StackChk:=FALSE *)
  8. (*$ OverflowChk:=FALSE *)
  9. (*$ NilChk:=FALSE *)
  10. (*$ ReturnChk:=FALSE *)
  11. (*$ Volatile:=FALSE *)
  12. (*$ LargeVars:=FALSE *)
  13.  
  14.  
  15. FROM SYSTEM     IMPORT ADR,LONGSET,ADDRESS,SETREG,REG;
  16. FROM ExecD      IMPORT MsgPortPtr,TaskPtr,MsgPort,Interrupt,reset,clear,
  17.                        stop,start,quick,IOStdReq;
  18. FROM ExecL      IMPORT OpenDevice,AddPort,FindTask,RemPort,CloseDevice,DoIO,
  19.                        Permit,Forbid;
  20. FROM Input      IMPORT inputName,addHandler,remHandler,writeEvent,setThresh,
  21.                        setPeriod,setMType,setMPort,setMTrig;
  22. FROM InputEvent IMPORT InputEvent,InputEventPtr;
  23. FROM Timer      IMPORT TimeVal,IOTimerPtr;
  24. FROM GamePort   IMPORT KeySet,GamePortTrigger,Controller;
  25. FROM R          IMPORT D0,A0,A1,A4;
  26.  
  27.  
  28. VAR task             : TaskPtr;
  29.     msg              : MsgPort;
  30.     ioStd            : IOStdReq;
  31.     ioTimer          : IOTimerPtr;
  32.     handlerInterrupt : Interrupt;
  33.     Handler          : PROC;
  34.     opened,set       : BOOLEAN;
  35.  
  36.  
  37.  
  38. (*$StackChk:=FALSE *)
  39. (*$SaveA4:=TRUE *)
  40. PROCEDURE InputHandler(event{A0} : ADDRESS;
  41.                        sa4{A1} : ADDRESS);
  42. BEGIN
  43.   SETREG(A4,sa4);
  44.   inputEvent:=event;
  45.   IF inputEvent#NIL THEN
  46.     Forbid;
  47.       Handler;
  48.     Permit;
  49.   END;
  50.   SETREG(D0,inputEvent);
  51. END InputHandler;
  52.  
  53.  
  54.  
  55. PROCEDURE OpenInput() : BOOLEAN;
  56. BEGIN
  57.   IF NOT opened THEN
  58.     task:=FindTask(0);
  59.     msg.sigTask:=task;
  60.     AddPort(ADR(msg));
  61.     OpenDevice(ADR(inputName),0,ADR(ioStd),LONGSET{});
  62.     ioStd.message.replyPort:=ADR(msg);
  63.     ioTimer:=ADR(ioStd);
  64.     IF (ioStd.device#NIL) AND (ioStd.error=0) THEN
  65.       opened:=TRUE;
  66.     ELSE
  67.       RemPort(ADR(msg));
  68.     END;
  69.   END;
  70.   RETURN opened;
  71. END OpenInput;
  72.  
  73.  
  74.  
  75. PROCEDURE SetInputHandler(handler : PROC;
  76.                           pri     : SHORTINT);
  77. BEGIN
  78.   IF opened THEN
  79.     IF set THEN
  80.       RemoveInputHandler;
  81.     END;
  82.     IF handler#NIL THEN
  83.       WITH handlerInterrupt DO
  84.         data:=REG(A4);
  85.         code:=ADR(InputHandler);
  86.         node.pri:=pri;
  87.       END;
  88.       WITH ioStd DO
  89.         command:=addHandler;
  90.         data:=ADR(handlerInterrupt);
  91.       END;
  92.       DoIO(ADR(ioStd));
  93.       Handler:=handler;
  94.       IF ioStd.error=0 THEN
  95.         set:=TRUE;
  96.       END;
  97.     END;
  98.   END;
  99. END SetInputHandler;
  100.  
  101.  
  102.  
  103. PROCEDURE RemoveInputHandler;
  104. BEGIN
  105.   IF opened AND set THEN
  106.     WITH ioStd DO
  107.       command:=remHandler;
  108.       data:=ADR(handlerInterrupt);
  109.     END;
  110.     DoIO(ADR(ioStd));
  111.     IF ioStd.error=0 THEN
  112.       set:=FALSE;
  113.     END;
  114.   END;
  115. END RemoveInputHandler;
  116.  
  117.  
  118.  
  119. PROCEDURE AddInputEvent(event : InputEvent);
  120. BEGIN
  121.   IF opened THEN
  122.     WITH ioStd DO
  123.       command:=writeEvent;
  124.       data:=ADR(event);
  125.       length:=SIZE(InputEvent);
  126.       flags:=quick;
  127.     END;
  128.     DoIO(ADR(ioStd));
  129.   END;
  130. END AddInputEvent;
  131.  
  132.  
  133.  
  134. PROCEDURE InputCommand(com : InputCommands);
  135. BEGIN
  136.   IF opened THEN
  137.     WITH ioStd DO
  138.       CASE com OF
  139.       |ResetDevice   : command:=reset;
  140.       |ClearBuffer   : command:=clear;
  141.       |StopDevice    : command:=stop;
  142.       |RestartDevice : command:=start;
  143.       ELSE
  144.       END;
  145.     END;
  146.     DoIO(ADR(ioStd));
  147.   END;
  148. END InputCommand;
  149.  
  150.  
  151.  
  152. PROCEDURE SetKeyboard(com  : KeyboardOptions;
  153.                       time : TimeVal);
  154. BEGIN
  155.   IF opened  THEN
  156.     WITH ioStd DO
  157.       CASE com OF
  158.       |Period     : command:=setPeriod;
  159.       |Threshhold : command:=setThresh;
  160.       ELSE
  161.       END;
  162.     END;
  163.     ioTimer^.time:=time;
  164.     DoIO(ADR(ioStd));
  165.   END;
  166. END SetKeyboard;
  167.  
  168.  
  169.  
  170. PROCEDURE SetMouseTrigger(keys          : KeySet;
  171.                           timeout       : CARDINAL;
  172.                           xDelta,yDelta : CARDINAL);
  173. VAR gpt : GamePortTrigger;
  174. BEGIN
  175.   IF opened THEN
  176.     gpt.keys:=keys;
  177.     gpt.timeout:=timeout;
  178.     gpt.xDelta:=xDelta;
  179.     gpt.yDelta:=yDelta;
  180.     WITH ioStd DO
  181.       command:=setMTrig;
  182.       data:=ADR(gpt);
  183.       length:=SIZE(GamePortTrigger);
  184.     END;
  185.     DoIO(ADR(ioStd));
  186.   END;
  187. END SetMouseTrigger;
  188.  
  189.  
  190.  
  191. PROCEDURE SetMousePort(port : SHORTCARD);
  192. VAR real : SHORTCARD;
  193. BEGIN
  194.   IF opened THEN
  195.     real:=port-1;
  196.     WITH ioStd DO
  197.       command:=setMPort;
  198.       data:=ADR(real);
  199.       length:=1;
  200.     END;
  201.     DoIO(ADR(ioStd));
  202.   END;
  203. END SetMousePort;
  204.  
  205.  
  206.  
  207. PROCEDURE SetControllerType(type : Controller);
  208. BEGIN
  209.   IF opened THEN
  210.     WITH ioStd DO
  211.       command:=setMType;
  212.       data:=ADR(type);
  213.       length:=1;
  214.     END;
  215.     DoIO(ADR(ioStd));
  216.   END;
  217. END SetControllerType;
  218.  
  219.  
  220.  
  221. PROCEDURE CloseInput;
  222. BEGIN
  223.   IF opened THEN
  224.     IF set THEN
  225.       RemoveInputHandler;
  226.     END;
  227.     RemPort(ADR(msg));
  228.     CloseDevice(ADR(ioStd));
  229.     opened:=FALSE;
  230.   END;
  231. END CloseInput;
  232.  
  233.  
  234.  
  235. BEGIN
  236.  
  237.   set:=FALSE;
  238.   opened:=FALSE;
  239.  
  240. CLOSE
  241.  
  242.   CloseInput;
  243.  
  244. END InputDevice.
  245.