# CLCKLIB ڐAƂ̒

CLCKLIB Ɋ܂܂ CLCKST ̓VXesԂ𓾂邽߂̃[
`gp. ȉ, SunFORTRAN 1.4, Lahey Fortran  C 
Lq.

Ȃ C ̗̒̎ʎq͎̂悤ȈӖ. 

  CLK_PER_SEC : ֐ clock ł͂鎞Ԃ̒Pʂ킷. Ŋ
    ΕbPʂƂȂ. 
  CLK_RSL_TCK : ֐ clock ̐x킷. ŊĂΕbP
    ̐xƂȂ. 

 man clock Ȃǂ, ꂻ̃VXeɓK؂ȒlgbvfB
Ngɂ Mkinclude ̒Ŏw肷邱. Ȃ̒lݒ肳
ĂȂɗpl, SunOS 4.1 ɂ̂ł. 

*-----------------------------------------------------------------------
*     SUN Fortran version
*-----------------------------------------------------------------------
      SUBROUTINE CLCKST
      REAL    X(2)
      LOGICAL LFIRST
      SAVE
      DATA LFIRST / .TRUE. /
     #     DT     / 1.E-2  /  !!!!! Ԃ̕\. Pʂ͕b !!!!!
 
          CALL ETIME(X)       !!!!! sԂ𓾂T[rX[` !!!!
          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)       !!!!! sԂ𓾂T[rX[` !!!!
          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   /   !!!!! Ԃ̕\. Pʂ͕b !!!!!

          CALL TIMER(ITIME0)   !!!!! sԂ𓾂T[rX[` !!!!
          LFIRST=.FALSE.
          RETURN

      ENTRY CLCKGT(TIME)
          IF(LFIRST) CALL MSGDMP('E', 'CLCKGT', 'CLKRST MUST BE CALLED'
     #                           //' PRIOR TO THIS ROUTINE.')
          CALL TIMER(ITIME)    !!!!! sԂ𓾂T[rX[` !!!!
          TIME = (ITIME-ITIME0)*DT
          RETURN

      ENTRY CLCKDT(DT0)
          DT0 = DT*100         !!!!! gݍ݊֐ TIMER ̎dlƂĂ
          RETURN               !!!!! 0.01b̕\, 
      END                      !!!!! pc98 ł1bPʂȂ. 

/*
 *    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;
}
