codegen: add a 'size' argument to ALU_WRITES_FLAGS
[ajla.git] / newlib / timezone.ajla
blob11782ae2a91531e329c49a9b07d646d7f4645b5b
1 {*
2  * Copyright (C) 2024 Mikulas Patocka
3  *
4  * This file is part of Ajla.
5  *
6  * Ajla is free software: you can redistribute it and/or modify it under the
7  * terms of the GNU General Public License as published by the Free Software
8  * Foundation, either version 3 of the License, or (at your option) any later
9  * version.
10  *
11  * Ajla is distributed in the hope that it will be useful, but WITHOUT ANY
12  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
13  * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along with
16  * Ajla. If not, see <https://www.gnu.org/licenses/>.
17  *}
19 unit timezone;
21 uses io;
23 type timezone;
25 fn timezone_init(d : dhandle, env : treemap(bytes, bytes)) : timezone;
26 fn timezone_gmt : timezone;
28 record calendar [
29         year : int;
30         month : int;
31         day : int;
32         hour : int;
33         min : int;
34         sec : int;
35         usec : int;
36         yday : int;
37         wday : int;
38         is_dst : int;
41 fn time_to_calendar(tz : timezone, t : int64) : calendar;
42 fn calendar_to_time(tz : timezone, c : calendar) : int64;
44 implementation
46 record timezone [
47         local : bool;
50 fn timezone_init(d : dhandle, env : treemap(bytes, bytes)) : timezone := timezone.[ local : true ];
51 fn timezone_gmt : timezone := timezone.[ local : false ];
53 fn time_to_calendar(tz : timezone, t : int64) : calendar
55         var local := tz.local;
56         var year month day hour min sec usec yday wday is_dst : int;
57         pcode IO IO_TimeToCalendar 10 2 0 =year =month =day =hour =min =sec =usec =yday =wday =is_dst t local;
58         return calendar.[
59                 year : year,
60                 month : month,
61                 day : day,
62                 hour : hour,
63                 min : min,
64                 sec : sec,
65                 usec : usec,
66                 yday : yday,
67                 wday : wday,
68                 is_dst : is_dst,
69         ];
72 fn calendar_to_time(tz : timezone, c : calendar) : int64
74         var local := tz.local;
75         var year := c.year;
76         var month := c.month;
77         var day := c.day;
78         var hour := c.hour;
79         var min := c.min;
80         var sec := c.sec;
81         var usec := c.usec;
82         var is_dst := c.is_dst;
83         var r : int64;
84         pcode IO IO_CalendarToTime 1 9 0 =r year month day hour min sec usec is_dst local;
85         return r;