home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 300-399 / ff339.lzh / PCQ / Runtime.lzh / Runtime / Extras / TimerUtils.p < prev   
Text File  |  1989-10-21  |  2KB  |  84 lines

  1. External;
  2.  
  3. {
  4.     TimerUtils.p
  5.  
  6.     This file declares CreateTimer, WaitTimer, and DeleteTimer.
  7. }
  8.  
  9. {$I "Include/Ports.i"}
  10. {$I "Include/TimerDevice.i"}
  11. {$I "Include/ExecIOUtils.i"}
  12. {$I "Include/ExecIO.i"}
  13.  
  14. Function CreateTimer : TimerRequestPtr;
  15. var
  16.     Error : Short;
  17.     TimerPort : MsgPortPtr;
  18.     TimeReq : IOStdReqPtr;
  19. begin
  20.     TimerPort := CreatePort(Nil, 0);
  21.     if TimerPort = Nil then
  22.     CreateTimer := Nil;
  23.     TimeReq := CreateStdIO(TimerPort);
  24.     if TimeReq = Nil then begin
  25.     DeletePort(TimerPort);
  26.     CreateTimer := Nil;
  27.     end;
  28.     Error := OpenDevice(TimerName, UnitVBlank, IORequestPtr(TimeReq), 0);
  29.     if Error <> 0 then begin
  30.     DeleteStdIO(TimeReq);
  31.     DeletePort(TimerPort);
  32.     CreateTimer := Nil;
  33.     end;
  34.     TimerBase := TimeReq^.ioReq.ioDevice;
  35.     CreateTimer := TimerRequestPtr(TimeReq);
  36. end;
  37.  
  38. Function SetTimer(WhichTimer : TimerRequestPtr;
  39.             Seconds, Microseconds : Integer) : MsgPortPtr;
  40. var
  41.     TempPort : MsgPortPtr;
  42. begin
  43.     with WhichTimer^ do begin
  44.     TempPort := trNode.ioMessage.mnReplyPort;
  45.     trNode.ioCommand := TR_ADDREQUEST;    { add a new timer request }
  46.     trTime.tvSecs := Seconds;        { seconds }
  47.     trTime.tvMicro := Microseconds;        { microseconds }
  48.         SendIO(IORequestPtr(WhichTimer));
  49.     SetTimer := TempPort;
  50.     end;
  51. end;
  52.  
  53. Procedure WaitTimer(WhichTimer : TimerRequestPtr;
  54.             Seconds, Microseconds : Integer);
  55. var
  56.     Error : Short;
  57. begin
  58.     with WhichTimer^ do begin
  59.     trNode.ioCommand := TR_ADDREQUEST;    { add a new timer request }
  60.     trTime.tvSecs := Seconds;        { seconds }
  61.     trTime.tvMicro := Microseconds;        { microseconds }
  62.     Error := DoIO(IORequestPtr(WhichTimer));
  63.     end;
  64. end;
  65.  
  66. Procedure GetSysTime(WhichTimer : TimerRequestPtr; VAR TV : TimeVal);
  67. var
  68.     Error : Short;
  69. begin
  70.     WhichTimer^.trNode.ioCommand := TR_GETSYSTIME;
  71.     Error := DoIO(IORequestPtr(WhichTimer));
  72.     TV := WhichTimer^.trTime;
  73. end;
  74.     
  75. Procedure DeleteTimer(WhichTimer : TimerRequestPtr);
  76. var
  77.     WhichPort : MsgPortPtr;
  78. begin
  79.     CloseDevice(IORequestPtr(WhichTimer));
  80.     WhichPort := WhichTimer^.trNode.ioMessage.mnReplyPort;
  81.     DeleteStdIO(IOStdReqPtr(WhichTimer));
  82.     DeletePort(WhichPort);
  83. end;
  84.