home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / src / demos / audio / bz / framerate.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-02  |  3.2 KB  |  169 lines

  1. /*
  2.  * Copyright (C) 1992, 1993, 1994, Silicon Graphics, Inc.
  3.  * All Rights Reserved.
  4.  *
  5.  * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
  6.  * the contents of this file may not be disclosed to third parties, copied or
  7.  * duplicated in any form, in whole or in part, without the prior written
  8.  * permission of Silicon Graphics, Inc.
  9.  *
  10.  * RESTRICTED RIGHTS LEGEND:
  11.  * Use, duplication or disclosure by the Government is subject to restrictions
  12.  * as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
  13.  * and Computer Software clause at DFARS 252.227-7013, and/or in similar or
  14.  * successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
  15.  * rights reserved under the Copyright Laws of the United States.
  16.  */
  17. /***************************************************************************
  18.  * @(#) - BZ - Multiplayer tank game - Framerate Control.
  19.  *
  20.  * $Id: framerate.c,v 1.4 1993/08/11 19:46:56 adele Exp $
  21.  *
  22.  *                    Chris Fouts - Silicon Graphics, Inc.
  23.  *                    October, 1991
  24.  **************************************************************************/
  25. #include <sys/time.h>
  26. #include <bstring.h>
  27. #include "framerate.h"
  28.  
  29. #define    DEFAULT_FRAME_RATE    10
  30.  
  31. static char    *version_id = "$Id: framerate.c,v 1.4 1993/08/11 19:46:56 adele Exp $" ;
  32.  
  33. static int                frame_rate = DEFAULT_FRAME_RATE ;
  34. static float            frame_time = 1.f / DEFAULT_FRAME_RATE ;
  35. static struct timeval    frame_start, frame_end ;
  36.  
  37.  
  38.  
  39. void set_frame_rate(
  40.     int new_rate
  41.     )
  42. {
  43.     if( new_rate > 0 ) {
  44.         frame_rate = new_rate ;
  45.         frame_time = 1.f / frame_rate ;
  46.         }
  47.  
  48.     start_time( &frame_start ) ;
  49. }
  50.  
  51.  
  52.  
  53. void copy_time(
  54.     struct timeval *dst,
  55.     struct timeval *src
  56.     )
  57. {
  58.     bcopy( src, dst, sizeof( struct timeval ) ) ;
  59. }
  60.  
  61.  
  62.  
  63. void set_time(
  64.     struct timeval *dst,
  65.     struct timeval *src,
  66.     long secs,
  67.     long usecs
  68.     )
  69. {
  70.     copy_time( dst, src ) ;
  71.     add_to_time( dst, secs, usecs ) ;
  72. }
  73.  
  74.  
  75. void add_to_time(
  76.     struct timeval *dst,
  77.     long secs,
  78.     long usecs
  79.     )
  80. {
  81.     dst->tv_usec += usecs ;
  82.     dst->tv_sec  += secs + ( dst->tv_usec / 1000000 ) ;
  83.     dst->tv_usec %= 1000000 ;
  84. }
  85.  
  86.  
  87.  
  88. float pace_frame(
  89.     struct timeval *buf
  90.     )
  91. {
  92.     float elapsed_time ;
  93.  
  94.     do {
  95.         elapsed_time = end_time( &frame_start, &frame_end ) ;
  96.         } while( elapsed_time < frame_time ) ;
  97.     start_time( &frame_start ) ;
  98.  
  99.     if( buf != NULL ) {
  100.         copy_time( buf, &frame_start ) ;
  101.         }
  102.  
  103.     return( elapsed_time ) ;
  104. }
  105.  
  106.  
  107.  
  108. void start_time(
  109.     struct timeval *buf
  110.     )
  111. {
  112.     struct timezone tzp ;
  113.  
  114.     gettimeofday( buf, &tzp ) ;
  115. }
  116.  
  117.  
  118.  
  119. float end_time(
  120.     struct timeval *bufThen,
  121.     struct timeval *bufNow
  122.     )
  123. {
  124.     long secs ;
  125.     long msecs ;
  126.     struct timeval tv ;
  127.     struct timeval *now ;
  128.     struct timeval *then = (struct timeval *)bufThen ;
  129.     struct timezone tzp ;
  130.  
  131.     if( bufNow != NULL )
  132.         now = (struct timeval *)bufNow ;
  133.     else
  134.         now = &tv ;
  135.  
  136.     gettimeofday( now, &tzp ) ;
  137.  
  138.     return( (float)( ( now->tv_sec - then->tv_sec ) +
  139.             ( now->tv_usec - then->tv_usec ) / 1000000.f ) ) ;
  140. }
  141.  
  142.  
  143.  
  144. long elapsed_sec_tenths(
  145.     struct timeval *bufThen,
  146.     struct timeval *bufNow
  147.     )
  148. {
  149.     struct timeval tv ;
  150.     struct timeval *now ;
  151.     struct timeval *then = bufThen ;
  152.     struct timezone tzp ;
  153.  
  154.     if( bufNow != NULL ) {
  155.         now = bufNow ;
  156.         }
  157.     else {
  158.         now = &tv ;
  159.         gettimeofday( now, &tzp ) ;
  160.         }
  161.  
  162.  
  163.     return( ( ( now->tv_sec - then->tv_sec ) * 10 +
  164.             ( now->tv_usec - then->tv_usec ) / 100000 ) ) ;
  165. }
  166.  
  167.  
  168.  
  169.