File: basic_time.c

package info (click to toggle)
smarteiffel 1.1-11
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 12,288 kB
  • ctags: 40,785
  • sloc: ansic: 35,791; lisp: 4,036; sh: 1,783; java: 895; ruby: 613; python: 209; makefile: 115; csh: 78; cpp: 50
file content (121 lines) | stat: -rw-r--r-- 3,141 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
/*
-- This file is  free  software, which  comes  along  with  SmartEiffel. This
-- software  is  distributed  in the hope that it will be useful, but WITHOUT
-- ANY  WARRANTY;  without  even  the  implied warranty of MERCHANTABILITY or
-- FITNESS  FOR A PARTICULAR PURPOSE. You can modify it as you want, provided
-- this header is kept unaltered, and a notification of the changes is added.
-- You  are  allowed  to  redistribute  it and sell it, alone or as a part of
-- another product.
--       Copyright (C) 1994-2002 LORIA - INRIA - U.H.P. Nancy 1 - FRANCE
--          Dominique COLNET and Suzanne COLLIN - SmartEiffel@loria.fr
--                       http://SmartEiffel.loria.fr
--
*/
/*
  This file (SmartEiffel/sys/runtime/basic_time.c) is automatically
  included when some external "SmartEiffel" basic_time_* feature is
  used (i.e. in live code).
*/

EIF_DOUBLE basic_time_difftime(time_t t2, time_t t1) {
  return difftime((time_t)t2, (time_t)t1);
}

EIF_INTEGER basic_time_getyear(time_t t, EIF_INTEGER m) {
  if (m == 1) {
    return (gmtime((time_t *)(&t)))->tm_year + 1900;
  }
  else {
    return (localtime((time_t *)(&t)))->tm_year + 1900;
  }
}

EIF_INTEGER basic_time_getmonth(time_t t, EIF_INTEGER m) {
  if (m == 1) {
    return (gmtime((time_t *)(&t)))->tm_mon + 1;
  }
  else {
    return (localtime((time_t *)(&t)))->tm_mon + 1;
  }
}

EIF_INTEGER basic_time_getday(time_t t, EIF_INTEGER m) {
  if (m == 1) {
    return (gmtime((time_t *)(&t)))->tm_mday;
  }
  else {
    return (localtime((time_t *)(&t)))->tm_mday;
  }
}

EIF_INTEGER basic_time_gethour(time_t t, EIF_INTEGER m) {
  if (m == 1) {
    return (gmtime((time_t *)(&t)))->tm_hour;
  }
  else {
    return (localtime((time_t *)(&t)))->tm_hour;
  }
}

EIF_INTEGER basic_time_getminute(time_t t, EIF_INTEGER m) {
  if (m == 1) {
    return (gmtime((time_t *)(&t)))->tm_min;
  }
  else {
    return (localtime((time_t *)(&t)))->tm_min;
  }
}

EIF_INTEGER basic_time_getsecond(time_t t, EIF_INTEGER m) {
  if (m == 1) {
    return (gmtime((time_t *)(&t)))->tm_sec;
  }
  else {
    return (localtime((time_t *)(&t)))->tm_sec;
  }
}

EIF_INTEGER basic_time_getwday(time_t t, EIF_INTEGER m) {
  if (m == 1) {
    return (gmtime((time_t *)(&t)))->tm_wday;
  }
  else {
    return (localtime((time_t *)(&t)))->tm_wday;
  }
}

EIF_INTEGER basic_time_getyday(time_t t, EIF_INTEGER m) {
  if (m == 1) {
    return (gmtime((time_t *)(&t)))->tm_yday;
  }
  else {
    return (localtime((time_t *)(&t)))->tm_yday;
  }
}

EIF_BOOLEAN basic_time_is_summer_time_used(time_t t) {
  return (EIF_BOOLEAN)(((localtime((time_t *)(&t)))->tm_isdst) != 0);
}

EIF_INTEGER_64 basic_time_mktime(EIF_INTEGER year,
			     EIF_INTEGER mon,
			     EIF_INTEGER mday,
			     EIF_INTEGER hour,
			     EIF_INTEGER min,
			     EIF_INTEGER sec) {
  struct tm tm_buf;

  tm_buf.tm_year  = (year - 1900);
  tm_buf.tm_mon   = (mon - 1);
  tm_buf.tm_mday  = mday;
  tm_buf.tm_hour  = hour;
  tm_buf.tm_min   = min;
  tm_buf.tm_sec   = sec;
  tm_buf.tm_isdst = -1;

  return (EIF_INTEGER_64)mktime(&tm_buf);
}

void basic_time_add_second(EIF_INTEGER_64 *t, EIF_INTEGER s) {
  *t += s;
}