/********************************************************
 *
 *         Copyright (C), 1994  SEIKO EPSON Corp.
 *         ALL RIGHTS RESERVED
 *
 *      file name : time.h
 *
 *	This is include file for time functions.
 *
 *      Revision history
 *      	93/12/17  1.st release		S.Akaiwa
 *              94/02/07  modify for SMC88	M.Kudo
 *		97/03/25  modify for SMC33	M.Kudo
 *		06/02/22  modify for P/ECE	Naoyuki Sawa
 *			* /usr/PIECE/include にあるファイルよりも、このファイルが優先されるよう、
 *			  clip.mkにて、インクルードパスを設定してあります。
 *			* コンパイル時に引数型を検査するため、関数宣言をK&R→ANSIに変更しました。
 *			  変更においては、『MSDN ライブラリ Visual Studio 6.0』を参考にしました。
 *		11/01/05  modify for P/ECE	Naoyuki Sawa
 *			* strftime()の関数宣言を追加しました。
 *		15/01/20  modify for P/ECE	Naoyuki Sawa
 *			* size_tの定義をunsigned型に統一しました。
 *
 ********************************************************/

#ifndef _TIME_H
#define _TIME_H

#ifndef _SIZE_T
#define _SIZE_T
//{{2015/01/20変更:size_tの定義をunsigned型に統一しました。
//typedef unsigned long   size_t;     /* size of type */
//↓2015/01/20変更:size_tの定義をunsigned型に統一しました。
// * Tue Jan 20 23:26:57 JST 2015 Naoyuki Sawa
// - P/ECE開発環境ではsize_tはunsigned。unsigned longではない。
//   例1:○
//   │typedef unsigned size_t;
//   │extern void* memcpy(void*,const void*,size_t); ← 警告無くコンパイル出来る
//   例2:×
//   │typedef unsigned long size_t;
//   │extern void* memcpy(void*,const void*,size_t); ← warning:conflicting types for built-in function `memcpy'
//   P/ECE開発環境の標準インクルードファイルも間違っているので要注意です。
//   stddef.hでの定義は正しいけれど、stdio.h,stdlib.h,string.h,time.hでの定義は間違っています。
//   たまたまstddef.hを最初にインクルードすると大丈夫なのでした。
// - どのヘッダファイルを最初にインクルードしても大丈夫なように、定義を統一することにしました。
//   自作のP/ECEプログラムならば、stddef.hを最初にインクルードするようにできるのですが、
//   オープンソースのライブラリを変更無くコンパイルしたい時に、stddef.h以外が最初になっている場合があるからです。
//   具体的には、/clip/liblua/をコンパイルするときに警告が出て、この問題に気付きました。
typedef unsigned size_t;
//}}2015/01/20変更:size_tの定義をunsigned型に統一しました。
#endif

typedef long            clock_t;    /* clock type */

typedef long            time_t;     /* time type */

#if !defined(NULL)
#  define NULL          ((void *)0L)/* null pointer */
#endif

struct  tm {                        /* time structure */
    int tm_sec;                     /* seconds (0-59) */
    int tm_min;                     /* minutes (0-59) */
    int tm_hour;                    /* hours (0-23) */
    int tm_mday;                    /* days (1-31) */
    int tm_mon;                     /* months (0-11) */
    int tm_year;                    /* year -1900 */
    int tm_wday;                    /* day of week (sun = 0) */
    int tm_yday;                    /* day of year (0 - 365) */
    int tm_isdst;                   /* non-zero if DST */
};

#define CLOCKS_PER_SEC  1000000     /* 1000000 cycles is 1 sec */

/* prototype definition */

extern time_t time(time_t* timer);			// extern  time_t      time( /* time_t * */ );
extern time_t mktime(struct tm* timeptr);		// extern  time_t      mktime( /* struct tm * */ );
extern struct tm* gmtime(const time_t* timer);		// extern  struct tm   *gmtime( /* time_t * */ );

extern double difftime(time_t timer1, time_t timer0);	// extern  double      difftime(/* time_t, time_t */);
extern clock_t clock();					// extern  clock_t     clock(/* void */);
extern struct tm* localtime(const time_t* timer);	// extern  struct tm   *localtime(/* const time_t * */);
extern char* asctime(const struct tm* timeptr);		// extern  char        *asctime(/* const struct tm * */);
extern char* ctime(const time_t* timer);		// extern  char        *ctime(/* const time_t * */);

extern size_t strftime(char* string, size_t maxsize, const char* format, const struct tm* timeptr);	/* 2011/01/05 関数宣言を追加しました */

#endif  /* _TIME_H */

