# CLCKLIB ܿȤ

CLCKLIB ˴ޤޤ CLCKST ϥƥब뤹¹Ի֤뤿Υ롼
Ѥ. ʲ, SunFORTRAN 1.4, Lahey Fortran  C 
Ҥ򼨤.

ʤ C μ̻ҤϼΤ褦ʰ̣. 

  CLK_PER_SEC : ؿ clock ǤϤ֤ñ̤򤢤魯. ǳä
    ñ̤Ȥʤ. 
  CLK_RSL_TCK : ؿ clock ٤򤢤魯. ǳäƤñ
    ٤Ȥʤ. 

 man clock ʤɤ򸫤, 줽ΥƥŬڤͤȥåץǥ
쥯ȥˤ Mkinclude ǻꤹ뤳. ʤͤꤵ
ƤʤѤͤ, SunOS 4.1 ˤΤǤ. 

CLCKLIB ܿƤ뤫ɤΤ뤿ˤ,
demo/misc1/clcklib ˤ clck01.f 򥳥ѥ뤷,

  % time clck01

ʤɤȤ, time ֤ͤ clck01 ֤ͤȤ, ƱˤʤäƤ
뤫ɤ򸫤ƤФ褤. 

*-----------------------------------------------------------------------
*     SUN Fortran version
*-----------------------------------------------------------------------
      SUBROUTINE CLCKST
      REAL    X(2)
      LOGICAL LFIRST
      SAVE
      DATA LFIRST / .TRUE. /
     #     DT     / 1.E-2  /  !!!!! ֤ʬǽ. ñ̤ !!!!!
 
          CALL ETIME(X)       !!!!! ¹Ի֤륵ӥ롼 !!!!
          TIME0=X(1)
          LFIRST=.FALSE.
          RETURN
 
      ENTRY CLCKGT(TIME)
          IF(LFIRST) CALL MSGDMP('E', 'CLCKGT', 'CLKRST MUST BE CALLED'
     #                           //' PRIOR TO THIS ROUTINE.')
          CALL ETIME(X)       !!!!! ¹Ի֤륵ӥ롼 !!!!
          TIME= X(1)-TIME0
          RETURN
 
      ENTRY CLCKDT(DT0)
          DT0 = DT
          RETURN
      END
*-----------------------------------------------------------------------
*     Lahey Fortran version
*-----------------------------------------------------------------------
      SUBROUTINE CLCKST
      LOGICAL LFIRST
      SAVE
      DATA LFIRST / .TRUE. /
     #     DT     / 0.01   /   !!!!! ֤ʬǽ. ñ̤ !!!!!

          CALL TIMER(ITIME0)   !!!!! ¹Ի֤륵ӥ롼 !!!!
          LFIRST=.FALSE.
          RETURN

      ENTRY CLCKGT(TIME)
          IF(LFIRST) CALL MSGDMP('E', 'CLCKGT', 'CLKRST MUST BE CALLED'
     #                           //' PRIOR TO THIS ROUTINE.')
          CALL TIMER(ITIME)    !!!!! ¹Ի֤륵ӥ롼 !!!!
          TIME = (ITIME-ITIME0)*DT
          RETURN

      ENTRY CLCKDT(DT0)
          DT0 = DT*100         !!!!! Ȥ߹ߴؿ TIMER λͤȤƤ
          RETURN               !!!!! 0.01äʬǽĤ, 
      END                      !!!!! pc98 Ǥ1ñ̤ʤ. 

/*
 *    clckst (written in C)
 */

#include <stdio.h>
#include <time.h>

#define TRUE   1             /* numeric value for true  */
#define FALSE  0             /* numeric value for false */

#ifndef CLK_PER_SEC
#define CLK_PER_SEC 1000000
#endif
#ifndef CLK_RSL_TCK
#define CLK_RSL_TCK 60
#endif

static int lfirst = TRUE;
static clock_t time0;

void clckst_()
{
    time0 = clock();
    lfirst = FALSE;
}

void clckgt_(time)
    float *time;
{
    if (lfirst){
	fprintf (stderr, "*** Error in clckgt : ");
	fprintf (stderr, "Clckst must be called prior to this routine.\n");
	exit(1);
    }
    else{
	*time = (float) (clock() - time0) / (float) CLK_PER_SEC;
    }
}

void clckdt_(dt0)
    float *dt0;
{
    *dt0 = 1.0 / CLK_RSL_TCK;
}
