home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / misc / m2pica.lha / M2Picasso / Txt / Timer2.mod < prev    next >
Encoding:
Modula Implementation  |  1994-08-16  |  2.4 KB  |  104 lines

  1. (*---------------------------------------------------------------------------
  2.     :Program.    Timer2.mod
  3.     :Author.     Bernd Preusing
  4.     :Address.    Gerhardstr. 16  D-2200 Elmshorn
  5.     :Phone.      04121/22486
  6.     :Shortcut.   [bep]
  7.     :Version.    1.0
  8.     :Date.       21-Oct-88
  9.     :Copyright.  PD
  10.     :Language.   Modula-II
  11.     :Translator. M2Amiga
  12.     :Imports.    ---
  13.     :UpDate.
  14.     :Contents.   Procedures to handle time and date.
  15.     :Remark.
  16. ---------------------------------------------------------------------------*)
  17. IMPLEMENTATION MODULE Timer2;
  18.  
  19. FROM SYSTEM IMPORT
  20.     ADR, ADDRESS;
  21.  
  22. FROM ExecD IMPORT
  23.     quick, execBase;
  24. FROM ExecL IMPORT
  25.     FindName;
  26.  
  27. FROM Timer IMPORT
  28.     timerName, getSysTime, TimeRequest;
  29.  
  30.  
  31. CONST    (* Register *)
  32.     A0 = 0+8;  A1 = 1+8; A6 = 6+8;
  33.  
  34. VAR
  35.     TimerBase: ADDRESS;
  36.     MyIO: TimeRequest;
  37.     Time1: TimeVal;
  38.  
  39.  
  40. (* Dies geht nur ohne OpenDevice, weil keine Unit benötigt wird und
  41.    das timer.device ganz sicher offen ist und wg. Quick-IO!!!! *)
  42.  
  43. (* Hilfsprozeduren:
  44.    Achtung: diese können niemals exportiert werden, weil sonst
  45.    die Übergabe in A6 nicht funktioniert!
  46. *)
  47. PROCEDURE BeginIO(base{A6}:ADDRESS; TimeReq{A1}:ADDRESS);
  48. CODE -30;
  49.  
  50. PROCEDURE AddT(base{A6}:ADDRESS; dest{A0},source{A1}:ADDRESS);
  51. CODE -42;
  52.  
  53. PROCEDURE SubT(base{A6}:ADDRESS; dest{A0},source{A1}:ADDRESS);
  54. CODE -48;
  55.  
  56. PROCEDURE CmpT(base{A6}:ADDRESS; t0{A0},t1{A1}:ADDRESS):INTEGER;
  57. CODE -54;
  58.  
  59.  
  60. PROCEDURE AddTime(VAR dest,source: TimeVal); (* dest:=dest+source *)
  61. BEGIN
  62.   AddT(TimerBase,ADR(dest),ADR(source))
  63. END AddTime;
  64.  
  65. PROCEDURE SubTime(VAR dest,source: TimeVal); (* dest:=dest-source *)
  66. BEGIN
  67.   SubT(TimerBase,ADR(dest),ADR(source))
  68. END SubTime;
  69.  
  70. (* ReturnChk := FALSE *)
  71. PROCEDURE CmpTime(VAR d1,d2:TimeVal): INTEGER; (* -1: d2<d1  1: d2>d1  0: d1=d2 *)
  72. BEGIN
  73.   RETURN CmpT(TimerBase,ADR(d1),ADR(d2))
  74. END CmpTime;
  75.  
  76. PROCEDURE GetSysTime(VAR t: TimeVal);
  77. BEGIN
  78.   BeginIO(TimerBase,ADR(MyIO));
  79.   t:=MyIO.time
  80. END GetSysTime;
  81.  
  82.  
  83. PROCEDURE StartTime();
  84. BEGIN
  85.   GetSysTime(Time1)
  86. END StartTime;
  87.  
  88. PROCEDURE StopTime(VAR t:TimeVal); (* Differenz seit StartTime *)
  89. BEGIN
  90.   GetSysTime(t);
  91.   SubT(TimerBase,ADR(t),ADR(Time1));
  92. END StopTime;
  93.  
  94. BEGIN
  95.   TimerBase:=FindName(ADR(execBase^.deviceList),ADR(timerName));
  96.   IF TimerBase=NIL THEN HALT END; (* unmöglich! *)
  97.   WITH MyIO.node DO
  98.     device:=NIL; (* vorsichtshalber *)
  99.     unit:=NIL;
  100.     command:=getSysTime;
  101.     flags:=quick (* handling ohne MessagePort *)
  102.   END;
  103. END Timer2.mod
  104.