
# DATELIB を移植するときの注意

DATELIB の中の DATEQ3 は, FORTRAN77 の規格にはない今日の日付を得るため
のルーチンを含んでいる. しかし, これらはふつう処理系が同じような動作を
するルーチンを用意しているので, システム管理者が適切なインターフェイス
ルーチン用意すること. 以下に, SunFORTRAN 1.4, Lahey Fortran, UXP
FORTRAN77 EX および C 言語で記述した例を示す.

このパッケージでは C 言語で書かれたものを標準としている. 

DATELIB が正しく移植されているかどうかを確かめるには, 
demo/misc1/datelib にある date04.f をコンパイル, 実行し, 今日の日付を
正しく返しているかどうかを見てやればよい. 

*-----------------------------------------------------------------------
*     DATEQ3 (for SunFORTRAN 1.4)
*-----------------------------------------------------------------------
      SUBROUTINE DATEQ3(IY, IM, ID)

      INTEGER IDA(3)

*     IY    : YEAR                                              ( /O)
*     IM    : MONTH                                             ( /O)
*     ID    : DAY                                               ( /O)


      CALL IDATE(IDA)
      IY = IDA(3)
      IM = IDA(2)
      ID = IDA(1)

      END
*-----------------------------------------------------------------------
*     DATEQ3 (for Lahey Fortran)
*-----------------------------------------------------------------------
      SUBROUTINE DATEQ3(IY, IM, ID)

      CHARACTER*8 CDATE

*     IY    : YEAR                                              ( /O)
*     IM    : MONTH                                             ( /O)
*     ID    : DAY                                               ( /O)


      CALL DATE(CDATE)
      READ(CDATE,'(I2,TR1,I2,TR1,I2)') IM,ID,IY
      IF (IY.GT.90) THEN
        IY = IY+1900
      ELSE
        IY = IY+2000
      END IF

      END
*-----------------------------------------------------------------------
*     DATEQ3 (for UXP FORTRAN77 EX)
*-----------------------------------------------------------------------
      SUBROUTINE DATEQ3(IY, IM, ID)

      CHARACTER CD*8

*     IY    : YEAR                                              ( /O)
*     IM    : MONTH                                             ( /O)
*     ID    : DAY                                               ( /O)


      CALL DATE(CD)
      READ(CD(1:2),'(I2)') IY
      READ(CD(4:5),'(I2)') IM
      READ(CD(7:8),'(I2)') ID

      END

/*
 *    dateq3 (written in C)
 */

#include <time.h>

void dateq3_(iy, im, id)
    int *iy, *im, *id;
{
    long tp;
    struct tm lt;

    time(&tp);
    lt = *localtime(&tp);
    *iy = lt.tm_year + 1900;
    *im = lt.tm_mon + 1;
    *id = lt.tm_mday;
} 
