home *** CD-ROM | disk | FTP | other *** search
/ Programmer's ROM - The Computer Language Library / programmersrom.iso / ada / piwg / a000016.ada < prev    next >
Encoding:
Text File  |  1988-05-03  |  2.2 KB  |  69 lines

  1. -- This is a UNIX VAX Ada function to get CPU time in seconds of type DURATION
  2. --  ( it uses  pragma INTERFACE  to the C language )
  3.  
  4. with SYSTEM ; use SYSTEM ;
  5.  
  6. function CPU_Time_Clock return duration is
  7.  
  8.   type Break_Time_Record is record
  9.      Seconds      : integer ;
  10.      Min          : integer ;
  11.      Hour         : integer ;
  12.      Day          : integer ;
  13.      Mon          : integer ;
  14.      Year         : integer ;
  15.      wday         : integer ;
  16.      yday         : integer ;
  17.      idst         : integer ;
  18.   end record ;
  19.  
  20.   type Time_Record is record
  21.      Seconds      : integer ;
  22.      Microseconds : integer ;
  23.   end record;
  24.  
  25.   type Zone_Record is record
  26.     Seconds      : integer ;
  27.     Microseconds : integer ;
  28.   end record ;
  29.  
  30.   type Time_Pointer_Type is access Time_Record ;
  31.   type Zone_Pointer_Type is access Zone_Record ;
  32.   type Break_Time_Record_Pointer is access Break_Time_Record ;
  33.  
  34.   Break_Time_Pointer : Break_Time_Record_Pointer := new Break_Time_Record ;
  35.   Time_Pointer       : Time_Pointer_Type := new Time_Record ;
  36.   Zone_Pointer       : Zone_Pointer_Type := new Zone_Record ;
  37.   Return_Time        : integer ;
  38.   Time_As_Duration   : duration ;     
  39.  
  40.   -- This procedure gets the time and zone of day from the ULTRIX operating
  41.   -- system.  The time is returned in seconds and microseconds.
  42.  
  43.   procedure gettimeofday ( Time_Pointer : Time_Pointer_Type ;
  44.                            Zone_Pointer : Zone_Pointer_Type ) ;
  45.  
  46.   pragma interface(c,gettimeofday) ;
  47.  
  48.   -- This procedure takes as input the time returned by gettimeofday and
  49.   -- breaks up the time into a structure as described in Break_Time_Record. 
  50.  
  51.   function localtime (Time : Time_Pointer_Type )
  52.                         return Break_Time_Record_Pointer ;
  53.  
  54.   pragma interface (c, localtime) ;
  55.  
  56. begin
  57.  
  58.   gettimeofday (Time_Pointer, Zone_Pointer ) ;
  59.   Break_Time_Pointer := localtime ( Time_Pointer ) ;
  60.   Return_Time := Break_Time_Pointer.Hour * 3600 +
  61.                  Break_Time_Pointer.Min * 60 +
  62.                  Break_Time_Pointer.Seconds ;
  63.   Time_As_Duration := duration ( float(Return_Time) +
  64.                                  ( float(Time_Pointer.Seconds) / 1000000.0 ) ) ;
  65.  
  66.   return Time_As_Duration ;
  67.  
  68. end CPU_Time_Clock ;
  69.