ReactOS 0.4.17-dev-357-ga8f14ff
date.c File Reference
#include <limits.h>
#include <math.h>
#include <assert.h>
#include "jscript.h"
#include "wine/debug.h"
Include dependency graph for date.c:

Go to the source code of this file.

Classes

struct  DateInstance
 

Macros

#define MS_PER_DAY   86400000
 
#define MS_PER_HOUR   3600000
 
#define MS_PER_MINUTE   60000
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (jscript)
 
static DateInstancedate_from_jsdisp (jsdisp_t *jsdisp)
 
static DateInstancedate_this (jsval_t vthis)
 
static double file_time_to_date_time (const FILETIME *ftime)
 
static DOUBLE day (DOUBLE time)
 
static DOUBLE time_within_day (DOUBLE time)
 
static DOUBLE days_in_year (DOUBLE year)
 
static DOUBLE day_from_year (DOUBLE year)
 
static int day_from_month (int month, int in_leap_year)
 
static DOUBLE time_from_year (DOUBLE year)
 
static DOUBLE year_from_time (DOUBLE time)
 
static int in_leap_year (DOUBLE time)
 
static int day_within_year (DOUBLE time)
 
static DOUBLE month_from_time (DOUBLE time)
 
static DOUBLE date_from_time (DOUBLE time)
 
static DOUBLE week_day (DOUBLE time)
 
static DOUBLE convert_time (int year, SYSTEMTIME st)
 
static DOUBLE daylight_saving_ta (DOUBLE time, DateInstance *date)
 
static DOUBLE local_time (DOUBLE time, DateInstance *date)
 
static DOUBLE utc (DOUBLE time, DateInstance *date)
 
static DOUBLE hour_from_time (DOUBLE time)
 
static DOUBLE min_from_time (DOUBLE time)
 
static DOUBLE sec_from_time (DOUBLE time)
 
static DOUBLE ms_from_time (DOUBLE time)
 
static DOUBLE make_time (DOUBLE hour, DOUBLE min, DOUBLE sec, DOUBLE ms)
 
static DOUBLE make_day (DOUBLE year, DOUBLE month, DOUBLE day)
 
static DOUBLE make_date (DOUBLE day, DOUBLE time)
 
static DOUBLE time_clip (DOUBLE time)
 
static double date_now (void)
 
static SYSTEMTIME create_systemtime (DOUBLE time)
 
static HRESULT date_to_string (DOUBLE time, BOOL show_offset, int offset, jsval_t *r)
 
static HRESULT dateobj_to_string (DateInstance *date, jsval_t *r)
 
static HRESULT Date_toString (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_toLocaleString (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_toISOString (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_valueOf (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT create_utc_string (script_ctx_t *ctx, jsval_t vthis, jsval_t *r)
 
static HRESULT Date_toUTCString (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_toGMTString (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT dateobj_to_date_string (DateInstance *date, jsval_t *r)
 
static HRESULT Date_toDateString (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_toTimeString (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_toLocaleDateString (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_toLocaleTimeString (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_getTime (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_getFullYear (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_getUTCFullYear (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_getMonth (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_getUTCMonth (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_getDate (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_getUTCDate (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_getDay (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_getUTCDay (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_getHours (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_getUTCHours (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_getMinutes (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_getUTCMinutes (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_getSeconds (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_getUTCSeconds (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_getMilliseconds (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_getUTCMilliseconds (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_getTimezoneOffset (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_setTime (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_setMilliseconds (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_setUTCMilliseconds (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_setSeconds (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_setUTCSeconds (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_setMinutes (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_setUTCMinutes (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_setHours (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_setUTCHours (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_setDate (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_setUTCDate (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_setMonth (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_setUTCMonth (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_setFullYear (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_setUTCFullYear (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_getYear (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Date_setYear (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT create_date (script_ctx_t *ctx, jsdisp_t *object_prototype, DOUBLE time, DateInstance **ret)
 
static HRESULT date_parse (jsstr_t *input_str, double *ret)
 
static HRESULT DateConstr_parse (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT date_utc (script_ctx_t *ctx, unsigned argc, jsval_t *argv, double *ret)
 
static HRESULT DateConstr_UTC (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT DateConstr_now (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT DateConstr_value (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
HRESULT create_date_constr (script_ctx_t *ctx, jsdisp_t *object_prototype, jsdisp_t **ret)
 
HRESULT variant_date_to_number (double date, double *ret)
 
HRESULT variant_date_to_string (script_ctx_t *ctx, double date, jsstr_t **r)
 

Variables

static const builtin_prop_t Date_props []
 
static const builtin_info_t Date_info
 
static const builtin_info_t DateInst_info
 
static const builtin_prop_t DateConstr_props []
 
static const builtin_info_t DateConstr_info
 

Macro Definition Documentation

◆ MS_PER_DAY

#define MS_PER_DAY   86400000

Definition at line 70 of file date.c.

◆ MS_PER_HOUR

#define MS_PER_HOUR   3600000

Definition at line 71 of file date.c.

◆ MS_PER_MINUTE

#define MS_PER_MINUTE   60000

Definition at line 72 of file date.c.

Function Documentation

◆ convert_time()

static DOUBLE convert_time ( int  year,
SYSTEMTIME  st 
)
inlinestatic

Definition at line 247 of file date.c.

248{
249 DOUBLE time;
250 int set_week_day;
251
252 if(st.wMonth == 0)
253 return NAN;
254
255 if(st.wYear != 0)
256 year = st.wYear;
257
258 time = time_from_year(year);
260
261 if(st.wYear == 0) {
262 set_week_day = st.wDayOfWeek-week_day(time);
263 if(set_week_day < 0)
264 set_week_day += 7;
265 time += set_week_day * MS_PER_DAY;
266
267 time += (DOUBLE)(st.wDay-1) * 7 * MS_PER_DAY;
268 if(month_from_time(time) != st.wMonth-1)
269 time -= 7 * MS_PER_DAY;
270 }
271 else
272 time += st.wDay * MS_PER_DAY;
273
274 time += st.wHour * MS_PER_HOUR;
275 time += st.wMinute * MS_PER_MINUTE;
276
277 return time;
278}
#define MS_PER_DAY
Definition: date.c:70
static int in_leap_year(DOUBLE time)
Definition: date.c:173
static DOUBLE time_from_year(DOUBLE year)
Definition: date.c:149
static DOUBLE month_from_time(DOUBLE time)
Definition: date.c:187
#define MS_PER_HOUR
Definition: date.c:71
#define MS_PER_MINUTE
Definition: date.c:72
static DOUBLE week_day(DOUBLE time)
Definition: date.c:234
static int day_from_month(int month, int in_leap_year)
Definition: date.c:117
#define NAN
Definition: math.h:273
__u16 time
Definition: mkdosfs.c:8
#define DOUBLE(x)
Definition: atom.c:30
WORD wMinute
Definition: minwinbase.h:261
WORD wDayOfWeek
Definition: minwinbase.h:258
double DOUBLE
Definition: typedefs.h:70

Referenced by daylight_saving_ta().

◆ create_date()

static HRESULT create_date ( script_ctx_t ctx,
jsdisp_t object_prototype,
DOUBLE  time,
DateInstance **  ret 
)
static

Definition at line 1916 of file date.c.

1917{
1919 HRESULT hres;
1921
1923
1924 date = calloc(1, sizeof(DateInstance));
1925 if(!date)
1926 return E_OUTOFMEMORY;
1927
1928 if(object_prototype)
1929 hres = init_dispex(&date->dispex, ctx, &Date_info, object_prototype);
1930 else
1931 hres = init_dispex_from_constr(&date->dispex, ctx, &DateInst_info, ctx->date_constr);
1932 if(FAILED(hres)) {
1933 free(date);
1934 return hres;
1935 }
1936
1937 date->time = time;
1938 date->bias = tzi.Bias;
1939 date->standardDate = tzi.StandardDate;
1940 date->standardBias = tzi.StandardBias;
1941 date->daylightDate = tzi.DaylightDate;
1942 date->daylightBias = tzi.DaylightBias;
1943
1944 *ret = date;
1945 return S_OK;
1946}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define free
Definition: debug_ros.c:5
static const builtin_info_t Date_info
Definition: date.c:1906
static const builtin_info_t DateInst_info
Definition: date.c:1912
DWORD WINAPI GetTimeZoneInformation(LPTIME_ZONE_INFORMATION lpTimeZoneInformation)
Definition: timezone.c:262
static TIME_ZONE_INFORMATION tzi
Definition: time.c:123
return ret
Definition: mutex.c:146
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
HRESULT init_dispex_from_constr(jsdisp_t *dispex, script_ctx_t *ctx, const builtin_info_t *builtin_info, jsdisp_t *constr)
Definition: dispex.c:2512
HRESULT init_dispex(jsdisp_t *dispex, script_ctx_t *ctx, const builtin_info_t *builtin_info, jsdisp_t *prototype)
Definition: dispex.c:2454
__u16 date
Definition: mkdosfs.c:8
HRESULT hres
Definition: protocol.c:465
#define calloc
Definition: rosglue.h:14
SYSTEMTIME DaylightDate
Definition: timezoneapi.h:30
SYSTEMTIME StandardDate
Definition: timezoneapi.h:27

Referenced by create_date_constr(), DateConstr_value(), and variant_date_to_string().

◆ create_date_constr()

HRESULT create_date_constr ( script_ctx_t ctx,
jsdisp_t object_prototype,
jsdisp_t **  ret 
)

Definition at line 2442 of file date.c.

2443{
2445 HRESULT hres;
2446
2447 hres = create_date(ctx, object_prototype, 0.0, &date);
2448 if(FAILED(hres))
2449 return hres;
2450
2452 PROPF_CONSTR|7, &date->dispex, ret);
2453
2454 jsdisp_release(&date->dispex);
2455 return hres;
2456}
static const builtin_info_t DateConstr_info
Definition: date.c:2435
static HRESULT DateConstr_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: date.c:2350
static HRESULT create_date(script_ctx_t *ctx, jsdisp_t *object_prototype, DOUBLE time, DateInstance **ret)
Definition: date.c:1916
HRESULT create_builtin_constructor(script_ctx_t *ctx, builtin_invoke_t value_proc, const WCHAR *name, const builtin_info_t *builtin_info, DWORD flags, jsdisp_t *prototype, jsdisp_t **ret)
Definition: function.c:809
#define L(x)
Definition: resources.c:13
ULONG jsdisp_release(jsdisp_t *obj)
Definition: dispex.c:1911
const unsigned int PROPF_CONSTR
Definition: jsdisp.idl:34

Referenced by init_constructors().

◆ create_systemtime()

static SYSTEMTIME create_systemtime ( DOUBLE  time)
static

Definition at line 425 of file date.c.

426{
427 SYSTEMTIME st;
428
430 st.wMonth = month_from_time(time) + 1;
437
438 return st;
439}
static DOUBLE min_from_time(DOUBLE time)
Definition: date.c:336
static DOUBLE date_from_time(DOUBLE time)
Definition: date.c:210
static DOUBLE hour_from_time(DOUBLE time)
Definition: date.c:322
static DOUBLE ms_from_time(DOUBLE time)
Definition: date.c:364
static DOUBLE sec_from_time(DOUBLE time)
Definition: date.c:350
static DOUBLE year_from_time(DOUBLE time)
Definition: date.c:155
WORD wMilliseconds
Definition: minwinbase.h:263
WORD wSecond
Definition: minwinbase.h:262

Referenced by Date_toLocaleDateString(), Date_toLocaleString(), and Date_toLocaleTimeString().

◆ create_utc_string()

static HRESULT create_utc_string ( script_ctx_t ctx,
jsval_t  vthis,
jsval_t r 
)
inlinestatic

Definition at line 638 of file date.c.

639{
640 static const DWORD week_ids[] = { LOCALE_SABBREVDAYNAME7, LOCALE_SABBREVDAYNAME1,
643 static const DWORD month_ids[] = { LOCALE_SABBREVMONTHNAME1, LOCALE_SABBREVMONTHNAME2,
649
650 const WCHAR *formatEra = L"";
651 WCHAR week[64], month[64];
652 WCHAR buf[192];
654 jsstr_t *date_str;
655 int year, day;
656 DWORD lcid_en;
657
658 if(!(date = date_this(vthis)))
659 return JS_E_DATE_EXPECTED;
660
661 if(isnan(date->time)) {
662 if(r)
664 return S_OK;
665 }
666
667 if(r) {
669
670 week[0] = 0;
671 GetLocaleInfoW(lcid_en, week_ids[(int)week_day(date->time)], week, ARRAY_SIZE(week));
672
673 month[0] = 0;
674 GetLocaleInfoW(lcid_en, month_ids[(int)month_from_time(date->time)], month, ARRAY_SIZE(month));
675
676 year = year_from_time(date->time);
677 if(year<0) {
678 formatEra = L" B.C.";
679 year = -year+1;
680 }
681
682 day = date_from_time(date->time);
683
685 L"%s, %d %s %d%s %02d:%02d:%02d UTC", week, day, month, year, formatEra,
686 (int)hour_from_time(date->time), (int)min_from_time(date->time),
687 (int)sec_from_time(date->time));
688
689 date_str = jsstr_alloc(buf);
690 if(!date_str)
691 return E_OUTOFMEMORY;
692
693 *r = jsval_string(date_str);
694 }
695 return S_OK;
696}
#define ARRAY_SIZE(A)
Definition: main.h:20
static DateInstance * date_this(jsval_t vthis)
Definition: date.c:53
static DOUBLE day(DOUBLE time)
Definition: date.c:75
INT WINAPI GetLocaleInfoW(LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
Definition: locale.c:1675
#define isnan(x)
Definition: math.h:360
static const WCHAR month[12][4]
Definition: session.c:2528
#define swprintf
Definition: precomp.h:40
unsigned long DWORD
Definition: ntddk_ex.h:95
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define JS_E_DATE_EXPECTED
Definition: jscript.h:553
jsstr_t * jsstr_nan(void)
Definition: jsstr.c:286
static jsstr_t * jsstr_alloc(const WCHAR *str)
Definition: jsstr.h:100
static jsval_t jsval_string(jsstr_t *str)
Definition: jsval.h:109
#define SORT_DEFAULT
#define MAKELCID(lgid, srtid)
short WCHAR
Definition: pedump.c:58
#define MAKELANGID(p, s)
Definition: nls.h:15
#define LANG_ENGLISH
Definition: nls.h:52
#define SUBLANG_ENGLISH_US
Definition: nls.h:222
Definition: jsstr.h:36
#define LOCALE_SABBREVMONTHNAME10
Definition: winnls.h:123
#define LOCALE_SABBREVMONTHNAME9
Definition: winnls.h:122
#define LOCALE_SABBREVMONTHNAME11
Definition: winnls.h:124
#define LOCALE_SABBREVDAYNAME5
Definition: winnls.h:98
#define LOCALE_SABBREVDAYNAME2
Definition: winnls.h:95
#define LOCALE_SABBREVMONTHNAME2
Definition: winnls.h:115
#define LOCALE_SABBREVMONTHNAME4
Definition: winnls.h:117
#define LOCALE_SABBREVDAYNAME4
Definition: winnls.h:97
#define LOCALE_SABBREVMONTHNAME3
Definition: winnls.h:116
#define LOCALE_SABBREVMONTHNAME1
Definition: winnls.h:114
#define LOCALE_SABBREVDAYNAME6
Definition: winnls.h:99
#define LOCALE_SABBREVDAYNAME1
Definition: winnls.h:94
#define LOCALE_SABBREVMONTHNAME6
Definition: winnls.h:119
#define LOCALE_SABBREVDAYNAME3
Definition: winnls.h:96
#define LOCALE_SABBREVMONTHNAME5
Definition: winnls.h:118
#define LOCALE_SABBREVMONTHNAME7
Definition: winnls.h:120
#define LOCALE_SABBREVMONTHNAME8
Definition: winnls.h:121
#define LOCALE_SABBREVMONTHNAME12
Definition: winnls.h:125
#define LOCALE_SABBREVDAYNAME7
Definition: winnls.h:100

Referenced by Date_toGMTString(), and Date_toUTCString().

◆ date_from_jsdisp()

static DateInstance * date_from_jsdisp ( jsdisp_t jsdisp)
inlinestatic

Definition at line 48 of file date.c.

49{
50 return CONTAINING_RECORD(jsdisp, DateInstance, dispex);
51}
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

Referenced by date_this().

◆ date_from_time()

static DOUBLE date_from_time ( DOUBLE  time)
inlinestatic

Definition at line 210 of file date.c.

211{
212 int dwy = day_within_year(time);
213 int ily = in_leap_year(time);
214 int mft = month_from_time(time);
215
216 if(isnan(time))
217 return NAN;
218
219 if(mft==0) return dwy+1;
220 if(mft==1) return dwy-30;
221 if(mft==2) return dwy-58-ily;
222 if(mft==3) return dwy-89-ily;
223 if(mft==4) return dwy-119-ily;
224 if(mft==5) return dwy-150-ily;
225 if(mft==6) return dwy-180-ily;
226 if(mft==7) return dwy-211-ily;
227 if(mft==8) return dwy-242-ily;
228 if(mft==9) return dwy-272-ily;
229 if(mft==10) return dwy-303-ily;
230 return dwy-333-ily;
231}
static int day_within_year(DOUBLE time)
Definition: date.c:181

Referenced by create_systemtime(), create_utc_string(), Date_getDate(), Date_getUTCDate(), Date_setFullYear(), Date_setMonth(), Date_setUTCFullYear(), Date_setUTCMonth(), Date_setYear(), date_to_string(), Date_toISOString(), and dateobj_to_date_string().

◆ Date_getDate()

static HRESULT Date_getDate ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 993 of file date.c.

994{
996
997 TRACE("\n");
998
999 if(!(date = date_this(vthis)))
1000 return JS_E_DATE_EXPECTED;
1001
1002 if(r)
1004 return S_OK;
1005}
static DOUBLE local_time(DOUBLE time, DateInstance *date)
Definition: date.c:309
static jsval_t jsval_number(double n)
Definition: jsval.h:153
#define TRACE(s)
Definition: solgame.cpp:4

◆ Date_getDay()

static HRESULT Date_getDay ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 1024 of file date.c.

1026{
1028
1029 TRACE("\n");
1030
1031 if(!(date = date_this(vthis)))
1032 return JS_E_DATE_EXPECTED;
1033
1034 if(r)
1036 return S_OK;
1037}

◆ Date_getFullYear()

static HRESULT Date_getFullYear ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 927 of file date.c.

929{
931
932 TRACE("\n");
933
934 if(!(date = date_this(vthis)))
935 return JS_E_DATE_EXPECTED;
936
937 if(r) {
938 DOUBLE time = local_time(date->time, date);
939
941 }
942 return S_OK;
943}

◆ Date_getHours()

static HRESULT Date_getHours ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 1056 of file date.c.

1058{
1060
1061 TRACE("\n");
1062
1063 if(!(date = date_this(vthis)))
1064 return JS_E_DATE_EXPECTED;
1065
1066 if(r)
1068 return S_OK;
1069}

◆ Date_getMilliseconds()

static HRESULT Date_getMilliseconds ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 1151 of file date.c.

1153{
1155
1156 TRACE("\n");
1157
1158 if(!(date = date_this(vthis)))
1159 return JS_E_DATE_EXPECTED;
1160
1161 if(r)
1163 return S_OK;
1164}

◆ Date_getMinutes()

static HRESULT Date_getMinutes ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 1088 of file date.c.

1090{
1092
1093 TRACE("\n");
1094
1095 if(!(date = date_this(vthis)))
1096 return JS_E_DATE_EXPECTED;
1097
1098 if(r)
1100 return S_OK;
1101}

◆ Date_getMonth()

static HRESULT Date_getMonth ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 962 of file date.c.

963{
965
966 TRACE("\n");
967
968 if(!(date = date_this(vthis)))
969 return JS_E_DATE_EXPECTED;
970
971 if(r)
973 return S_OK;
974}

◆ Date_getSeconds()

static HRESULT Date_getSeconds ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 1120 of file date.c.

1121{
1123
1124 TRACE("\n");
1125
1126 if(!(date = date_this(vthis)))
1127 return JS_E_DATE_EXPECTED;
1128
1129 if(r)
1131 return S_OK;
1132}

◆ Date_getTime()

static HRESULT Date_getTime ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 911 of file date.c.

913{
915
916 TRACE("\n");
917
918 if(!(date = date_this(vthis)))
919 return JS_E_DATE_EXPECTED;
920
921 if(r)
922 *r = jsval_number(date->time);
923 return S_OK;
924}

◆ Date_getTimezoneOffset()

static HRESULT Date_getTimezoneOffset ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 1183 of file date.c.

1185{
1187
1188 TRACE("\n");
1189
1190 if(!(date = date_this(vthis)))
1191 return JS_E_DATE_EXPECTED;
1192
1193 if(r)
1195 return S_OK;
1196}
_ACRTIMP double __cdecl floor(double)
Definition: floor.c:18

◆ Date_getUTCDate()

static HRESULT Date_getUTCDate ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 1008 of file date.c.

1010{
1012
1013 TRACE("\n");
1014
1015 if(!(date = date_this(vthis)))
1016 return JS_E_DATE_EXPECTED;
1017
1018 if(r)
1019 *r = jsval_number(date_from_time(date->time));
1020 return S_OK;
1021}

◆ Date_getUTCDay()

static HRESULT Date_getUTCDay ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 1040 of file date.c.

1042{
1044
1045 TRACE("\n");
1046
1047 if(!(date = date_this(vthis)))
1048 return JS_E_DATE_EXPECTED;
1049
1050 if(r)
1051 *r = jsval_number(week_day(date->time));
1052 return S_OK;
1053}

◆ Date_getUTCFullYear()

static HRESULT Date_getUTCFullYear ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 946 of file date.c.

948{
950
951 TRACE("\n");
952
953 if(!(date = date_this(vthis)))
954 return JS_E_DATE_EXPECTED;
955
956 if(r)
958 return S_OK;
959}

◆ Date_getUTCHours()

static HRESULT Date_getUTCHours ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 1072 of file date.c.

1074{
1076
1077 TRACE("\n");
1078
1079 if(!(date = date_this(vthis)))
1080 return JS_E_DATE_EXPECTED;
1081
1082 if(r)
1083 *r = jsval_number(hour_from_time(date->time));
1084 return S_OK;
1085}

◆ Date_getUTCMilliseconds()

static HRESULT Date_getUTCMilliseconds ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 1167 of file date.c.

1169{
1171
1172 TRACE("\n");
1173
1174 if(!(date = date_this(vthis)))
1175 return JS_E_DATE_EXPECTED;
1176
1177 if(r)
1178 *r = jsval_number(ms_from_time(date->time));
1179 return S_OK;
1180}

◆ Date_getUTCMinutes()

static HRESULT Date_getUTCMinutes ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 1104 of file date.c.

1106{
1108
1109 TRACE("\n");
1110
1111 if(!(date = date_this(vthis)))
1112 return JS_E_DATE_EXPECTED;
1113
1114 if(r)
1115 *r = jsval_number(min_from_time(date->time));
1116 return S_OK;
1117}

◆ Date_getUTCMonth()

static HRESULT Date_getUTCMonth ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 977 of file date.c.

979{
981
982 TRACE("\n");
983
984 if(!(date = date_this(vthis)))
985 return JS_E_DATE_EXPECTED;
986
987 if(r)
989 return S_OK;
990}

◆ Date_getUTCSeconds()

static HRESULT Date_getUTCSeconds ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 1135 of file date.c.

1137{
1139
1140 TRACE("\n");
1141
1142 if(!(date = date_this(vthis)))
1143 return JS_E_DATE_EXPECTED;
1144
1145 if(r)
1146 *r = jsval_number(sec_from_time(date->time));
1147 return S_OK;
1148}

◆ Date_getYear()

static HRESULT Date_getYear ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 1794 of file date.c.

1796{
1798 DOUBLE t, year;
1799
1800 TRACE("\n");
1801
1802 if(!(date = date_this(vthis)))
1803 return JS_E_DATE_EXPECTED;
1804
1805 t = local_time(date->time, date);
1806 if(isnan(t)) {
1807 if(r)
1808 *r = jsval_number(NAN);
1809 return S_OK;
1810 }
1811
1812 year = year_from_time(t);
1813 if(r)
1814 *r = jsval_number((1900<=year && year<2000)?year-1900:year);
1815 return S_OK;
1816}
GLdouble GLdouble t
Definition: gl.h:2047

◆ date_now()

static double date_now ( void  )
static

Definition at line 417 of file date.c.

418{
420
423}
static double file_time_to_date_time(const FILETIME *ftime)
Definition: date.c:59
VOID WINAPI GetSystemTimeAsFileTime(OUT PFILETIME lpFileTime)
Definition: time.c:128
static void ftime(struct _timeb *ptr)
Definition: timeb.h:72

Referenced by DateConstr_now(), and DateConstr_value().

◆ date_parse()

static HRESULT date_parse ( jsstr_t input_str,
double ret 
)
inlinestatic

Definition at line 1948 of file date.c.

1948 {
1949 static const DWORD string_ids[] = { LOCALE_SMONTHNAME12, LOCALE_SMONTHNAME11,
1956 WCHAR *strings[ARRAY_SIZE(string_ids)];
1957 WCHAR *parse;
1958 int input_len, parse_len = 0, nest_level = 0, i, size;
1959 int year = 0, month = 0, day = 0, hour = 0, min = 0, sec = 0;
1960 int ms = 0, offset = 0, hour_adjust = 0;
1961 BOOL set_year = FALSE, set_month = FALSE, set_day = FALSE, set_hour = FALSE;
1962 BOOL set_offset = FALSE, set_era = FALSE, ad = TRUE, set_am = FALSE, am = TRUE;
1963 BOOL set_hour_adjust = TRUE;
1965 const WCHAR *input;
1966 DateInstance di;
1967 DWORD lcid_en;
1968
1969 input_len = jsstr_length(input_str);
1970 input = jsstr_flatten(input_str);
1971 if(!input)
1972 return E_OUTOFMEMORY;
1973
1974 for(i=0; i<input_len; i++) {
1975 if(input[i] == '(') nest_level++;
1976 else if(input[i] == ')') {
1977 nest_level--;
1978 if(nest_level<0) {
1979 *ret = NAN;
1980 return S_OK;
1981 }
1982 }
1983 else if(!nest_level) parse_len++;
1984 }
1985
1986 parse = malloc((parse_len+1)*sizeof(WCHAR));
1987 if(!parse)
1988 return E_OUTOFMEMORY;
1989 nest_level = 0;
1990 parse_len = 0;
1991 for(i=0; i<input_len; i++) {
1992 if(input[i] == '(') nest_level++;
1993 else if(input[i] == ')') nest_level--;
1994 else if(!nest_level) parse[parse_len++] = towupper(input[i]);
1995 }
1996 parse[parse_len] = 0;
1997
1999 di.bias = tzi.Bias;
2004
2005 /* FIXME: Cache strings */
2007 for(i=0; i<ARRAY_SIZE(string_ids); i++) {
2008 size = GetLocaleInfoW(lcid_en, string_ids[i], NULL, 0);
2009 strings[i] = malloc((size+1)*sizeof(WCHAR));
2010 if(!strings[i]) {
2011 i--;
2012 while(i-- >= 0)
2013 free(strings[i]);
2014 free(parse);
2015 return E_OUTOFMEMORY;
2016 }
2017 GetLocaleInfoW(lcid_en, string_ids[i], strings[i], size);
2018 }
2019
2020 for(i=0; i<parse_len;) {
2021 while(iswspace(parse[i])) i++;
2022 if(parse[i] == ',') {
2023 while(parse[i] == ',') i++;
2024 continue;
2025 }
2026
2027 if(parse[i]>='0' && parse[i]<='9') {
2028 int tmp = wcstol(&parse[i], NULL, 10);
2029 while(parse[i]>='0' && parse[i]<='9') i++;
2030 while(iswspace(parse[i])) i++;
2031
2032 if(parse[i] == ':') {
2033 /* Time */
2034 if(set_hour) break;
2035 set_hour = TRUE;
2036
2037 hour = tmp;
2038
2039 while(parse[i] == ':') i++;
2040 while(iswspace(parse[i])) i++;
2041 if(parse[i]>='0' && parse[i]<='9') {
2042 min = wcstol(&parse[i], NULL, 10);
2043 while(parse[i]>='0' && parse[i]<='9') i++;
2044 }
2045
2046 while(iswspace(parse[i])) i++;
2047 while(parse[i] == ':') i++;
2048 while(iswspace(parse[i])) i++;
2049 if(parse[i]>='0' && parse[i]<='9') {
2050 sec = wcstol(&parse[i], NULL, 10);
2051 while(parse[i]>='0' && parse[i]<='9') i++;
2052 }
2053 }
2054 else if(parse[i]=='-' || parse[i]=='/') {
2055 /* Short or long date */
2056 if(set_day || set_month || set_year) break;
2057 set_day = TRUE;
2058 set_month = TRUE;
2059 set_year = TRUE;
2060
2061 month = tmp-1;
2062
2063 while(iswspace(parse[i])) i++;
2064 while(parse[i]=='-' || parse[i]=='/') i++;
2065 while(iswspace(parse[i])) i++;
2066 if(parse[i]<'0' || parse[i]>'9') break;
2067 day = wcstol(&parse[i], NULL, 10);
2068 while(parse[i]>='0' && parse[i]<='9') i++;
2069
2070 while(parse[i]=='-' || parse[i]=='/') i++;
2071 while(iswspace(parse[i])) i++;
2072 if(parse[i]<'0' || parse[i]>'9') break;
2073 year = wcstol(&parse[i], NULL, 10);
2074 while(parse[i]>='0' && parse[i]<='9') i++;
2075
2076 if(tmp >= 70){
2077 /* long date */
2078 month = day - 1;
2079 day = year;
2080 year = tmp;
2081 }
2082 }
2083 else if(tmp<0) break;
2084 else if(tmp<70) {
2085 /* Day */
2086 if(set_day) break;
2087 set_day = TRUE;
2088 day = tmp;
2089 }
2090 else {
2091 /* Year */
2092 if(set_year) break;
2093 set_year = TRUE;
2094 year = tmp;
2095 }
2096 }
2097 else if(parse[i]=='+' || parse[i]=='-') {
2098 /* Timezone offset */
2099 BOOL positive = TRUE;
2100
2101 if(set_offset && set_hour_adjust) break;
2102 set_offset = TRUE;
2103 set_hour_adjust = FALSE;
2104
2105 if(parse[i] == '-') positive = FALSE;
2106
2107 i++;
2108 while(iswspace(parse[i])) i++;
2109 if(parse[i]<'0' || parse[i]>'9') break;
2110 offset = wcstol(&parse[i], NULL, 10);
2111 while(parse[i]>='0' && parse[i]<='9') i++;
2112
2113 if(offset<24) offset *= 60;
2114 else offset = (offset/100)*60 + offset%100;
2115
2116 if(positive) offset = -offset;
2117
2118 }
2119 else {
2120 if(parse[i]<'A' || parse[i]>'Z') break;
2121 else if(parse[i]=='B' && (parse[i+1]=='C' ||
2122 (parse[i+1]=='.' && parse[i+2]=='C'))) {
2123 /* AD/BC */
2124 if(set_era) break;
2125 set_era = TRUE;
2126 ad = FALSE;
2127
2128 i++;
2129 if(parse[i] == '.') i++;
2130 i++;
2131 if(parse[i] == '.') i++;
2132 }
2133 else if(parse[i]=='A' && (parse[i+1]=='D' ||
2134 (parse[i+1]=='.' && parse[i+2]=='D'))) {
2135 /* AD/BC */
2136 if(set_era) break;
2137 set_era = TRUE;
2138
2139 i++;
2140 if(parse[i] == '.') i++;
2141 i++;
2142 if(parse[i] == '.') i++;
2143 }
2144 else if(parse[i+1]<'A' || parse[i+1]>'Z') {
2145 /* Timezone */
2146 if(set_offset) break;
2147 set_offset = TRUE;
2148
2149 if(parse[i] <= 'I') hour_adjust = parse[i]-'A'+2;
2150 else if(parse[i] == 'J') break;
2151 else if(parse[i] <= 'M') hour_adjust = parse[i]-'K'+11;
2152 else if(parse[i] <= 'Y') hour_adjust = parse[i]-'N';
2153 else hour_adjust = 1;
2154
2155 i++;
2156 if(parse[i] == '.') i++;
2157 }
2158 else if(parse[i]=='A' && parse[i+1]=='M') {
2159 /* AM/PM */
2160 if(set_am) break;
2161 set_am = TRUE;
2162 am = TRUE;
2163 i += 2;
2164 }
2165 else if(parse[i]=='P' && parse[i+1]=='M') {
2166 /* AM/PM */
2167 if(set_am) break;
2168 set_am = TRUE;
2169 am = FALSE;
2170 i += 2;
2171 }
2172 else if((parse[i]=='U' && parse[i+1]=='T' && parse[i+2]=='C')
2173 || (parse[i]=='G' && parse[i+1]=='M' && parse[i+2]=='T')) {
2174 /* Timezone */
2175 if(set_offset) break;
2176 set_offset = TRUE;
2177 set_hour_adjust = FALSE;
2178
2179 i += 3;
2180 }
2181 else {
2182 /* Month or garbage */
2183 unsigned int j;
2184
2185 for(size=i; parse[size]>='A' && parse[size]<='Z'; size++);
2186 size -= i;
2187
2188 for(j=0; j<ARRAY_SIZE(string_ids); j++)
2189 if(!wcsnicmp(&parse[i], strings[j], size)) break;
2190
2191 if(j < 12) {
2192 if(set_month) break;
2193 set_month = TRUE;
2194 month = 11-j;
2195 }
2196 else if(j == ARRAY_SIZE(string_ids)) break;
2197
2198 i += size;
2199 }
2200 }
2201 }
2202
2203 if(i == parse_len && set_year && set_month && set_day && (!set_am || hour<13)) {
2204 if(set_am) {
2205 if(hour == 12) hour = 0;
2206 if(!am) hour += 12;
2207 }
2208
2209 if(!ad) year = -year+1;
2210 else if(year<100) year += 1900;
2211
2213 make_time(hour+hour_adjust, min, sec, ms)) + offset*MS_PER_MINUTE);
2214
2215 if(set_hour_adjust)
2216 *ret = utc(*ret, &di);
2217 }else {
2218 *ret = NAN;
2219 }
2220
2221 for(i=0; i<ARRAY_SIZE(string_ids); i++)
2222 free(strings[i]);
2223 free(parse);
2224
2225 return S_OK;
2226}
#define malloc
Definition: debug_ros.c:4
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define wcsnicmp
Definition: compat.h:14
static DOUBLE utc(DOUBLE time, DateInstance *date)
Definition: date.c:315
static DOUBLE make_date(DOUBLE day, DOUBLE time)
Definition: date.c:402
static DOUBLE make_day(DOUBLE year, DOUBLE month, DOUBLE day)
Definition: date.c:384
static DOUBLE time_clip(DOUBLE time)
Definition: date.c:408
static DOUBLE make_time(DOUBLE hour, DOUBLE min, DOUBLE sec, DOUBLE ms)
Definition: date.c:378
_ACRTIMP __msvcrt_long __cdecl wcstol(const wchar_t *, wchar_t **, int)
Definition: wcs.c:2752
unsigned int BOOL
Definition: ntddk_ex.h:94
GLsizei const GLchar *const * strings
Definition: glext.h:7622
GLsizeiptr size
Definition: glext.h:5919
GLintptr offset
Definition: glext.h:5920
GLenum GLenum GLenum input
Definition: glext.h:9031
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
static const WCHAR * jsstr_flatten(jsstr_t *str)
Definition: jsstr.h:136
static unsigned jsstr_length(jsstr_t *str)
Definition: jsstr.h:55
#define min(a, b)
Definition: monoChain.cc:55
#define iswspace(_c)
Definition: ctype.h:669
#define towupper(c)
Definition: wctype.h:99
LONG standardBias
Definition: date.c:43
SYSTEMTIME daylightDate
Definition: date.c:44
SYSTEMTIME standardDate
Definition: date.c:42
LONG daylightBias
Definition: date.c:45
LONG bias
Definition: date.c:41
Definition: unary.h:15
#define LOCALE_SMONTHNAME12
Definition: winnls.h:112
#define LOCALE_SMONTHNAME5
Definition: winnls.h:105
#define LOCALE_SDAYNAME5
Definition: winnls.h:91
#define LOCALE_SMONTHNAME3
Definition: winnls.h:103
#define LOCALE_SMONTHNAME11
Definition: winnls.h:111
#define LOCALE_SMONTHNAME8
Definition: winnls.h:108
#define LOCALE_SMONTHNAME4
Definition: winnls.h:104
#define LOCALE_SDAYNAME1
Definition: winnls.h:87
#define LOCALE_SMONTHNAME7
Definition: winnls.h:107
#define LOCALE_SMONTHNAME1
Definition: winnls.h:101
#define LOCALE_SDAYNAME7
Definition: winnls.h:93
#define LOCALE_SDAYNAME2
Definition: winnls.h:88
#define LOCALE_SMONTHNAME2
Definition: winnls.h:102
#define LOCALE_SMONTHNAME6
Definition: winnls.h:106
#define LOCALE_SDAYNAME3
Definition: winnls.h:89
#define LOCALE_SDAYNAME4
Definition: winnls.h:90
#define LOCALE_SMONTHNAME10
Definition: winnls.h:110
#define LOCALE_SMONTHNAME9
Definition: winnls.h:109
#define LOCALE_SDAYNAME6
Definition: winnls.h:92

Referenced by DateConstr_parse(), and DateConstr_value().

◆ Date_setDate()

static HRESULT Date_setDate ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 1566 of file date.c.

1568{
1570 double t, n;
1571 HRESULT hres;
1572
1573 TRACE("\n");
1574
1575 if(!(date = date_this(vthis)))
1576 return JS_E_DATE_EXPECTED;
1577
1578 if(!argc)
1579 return JS_E_MISSING_ARG;
1580
1581 hres = to_number(ctx, argv[0], &n);
1582 if(FAILED(hres))
1583 return hres;
1584
1585 t = local_time(date->time, date);
1587 date->time = time_clip(utc(t, date));
1588
1589 if(r)
1590 *r = jsval_number(date->time);
1591 return S_OK;
1592}
static DOUBLE time_within_day(DOUBLE time)
Definition: date.c:81
MonoAssembly int argc
Definition: metahost.c:107
GLdouble n
Definition: glext.h:7729
#define JS_E_MISSING_ARG
Definition: jscript.h:534
HRESULT to_number(script_ctx_t *, jsval_t, double *)
Definition: jsutils.c:630
#define argv
Definition: mplay32.c:18

◆ Date_setFullYear()

static HRESULT Date_setFullYear ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 1702 of file date.c.

1704{
1706 double t, year, month, ddate;
1707 HRESULT hres;
1708
1709 TRACE("\n");
1710
1711 if(!(date = date_this(vthis)))
1712 return JS_E_DATE_EXPECTED;
1713
1714 if(!argc)
1715 return JS_E_MISSING_ARG;
1716
1717 t = local_time(date->time, date);
1718
1719 hres = to_number(ctx, argv[0], &year);
1720 if(FAILED(hres))
1721 return hres;
1722
1723 if(argc > 1) {
1724 hres = to_number(ctx, argv[1], &month);
1725 if(FAILED(hres))
1726 return hres;
1727 }else {
1729 }
1730
1731 if(argc > 2) {
1732 hres = to_number(ctx, argv[2], &ddate);
1733 if(FAILED(hres))
1734 return hres;
1735 }else {
1736 ddate = date_from_time(t);
1737 }
1738
1739 t = make_date(make_day(year, month, ddate), time_within_day(t));
1740 date->time = time_clip(utc(t, date));
1741
1742 if(r)
1743 *r = jsval_number(date->time);
1744 return S_OK;
1745}

◆ Date_setHours()

static HRESULT Date_setHours ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 1458 of file date.c.

1460{
1462 double t, hour, min, sec, ms;
1463 HRESULT hres;
1464
1465 TRACE("\n");
1466
1467 if(!(date = date_this(vthis)))
1468 return JS_E_DATE_EXPECTED;
1469
1470 if(!argc)
1471 return JS_E_MISSING_ARG;
1472
1473 t = local_time(date->time, date);
1474
1475 hres = to_number(ctx, argv[0], &hour);
1476 if(FAILED(hres))
1477 return hres;
1478
1479 if(argc > 1) {
1480 hres = to_number(ctx, argv[1], &min);
1481 if(FAILED(hres))
1482 return hres;
1483 }else {
1484 min = min_from_time(t);
1485 }
1486
1487 if(argc > 2) {
1488 hres = to_number(ctx, argv[2], &sec);
1489 if(FAILED(hres))
1490 return hres;
1491 }else {
1492 sec = sec_from_time(t);
1493 }
1494
1495 if(argc > 3) {
1496 hres = to_number(ctx, argv[3], &ms);
1497 if(FAILED(hres))
1498 return hres;
1499 }else {
1500 ms = ms_from_time(t);
1501 }
1502
1503 t = make_date(day(t), make_time(hour, min, sec, ms));
1504 date->time = time_clip(utc(t, date));
1505
1506 if(r)
1507 *r = jsval_number(date->time);
1508 return S_OK;
1509}

◆ Date_setMilliseconds()

static HRESULT Date_setMilliseconds ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 1226 of file date.c.

1228{
1230 double n, t;
1231 HRESULT hres;
1232
1233 TRACE("\n");
1234
1235 if(!(date = date_this(vthis)))
1236 return JS_E_DATE_EXPECTED;
1237
1238 if(!argc)
1239 return JS_E_MISSING_ARG;
1240
1241 hres = to_number(ctx, argv[0], &n);
1242 if(FAILED(hres))
1243 return hres;
1244
1245 t = local_time(date->time, date);
1247 sec_from_time(t), n));
1248 date->time = time_clip(utc(t, date));
1249
1250 if(r)
1251 *r = jsval_number(date->time);
1252 return S_OK;
1253}

◆ Date_setMinutes()

static HRESULT Date_setMinutes ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 1364 of file date.c.

1366{
1368 double t, min, sec, ms;
1369 HRESULT hres;
1370
1371 TRACE("\n");
1372
1373 if(!(date = date_this(vthis)))
1374 return JS_E_DATE_EXPECTED;
1375
1376 if(!argc)
1377 return JS_E_MISSING_ARG;
1378
1379 t = local_time(date->time, date);
1380
1381 hres = to_number(ctx, argv[0], &min);
1382 if(FAILED(hres))
1383 return hres;
1384
1385 if(argc > 1) {
1386 hres = to_number(ctx, argv[1], &sec);
1387 if(FAILED(hres))
1388 return hres;
1389 }else {
1390 sec = sec_from_time(t);
1391 }
1392
1393 if(argc > 2) {
1394 hres = to_number(ctx, argv[2], &ms);
1395 if(FAILED(hres))
1396 return hres;
1397 }else {
1398 ms = ms_from_time(t);
1399 }
1400
1402 min, sec, ms));
1403 date->time = time_clip(utc(t, date));
1404
1405 if(r)
1406 *r = jsval_number(date->time);
1407 return S_OK;
1408}

◆ Date_setMonth()

static HRESULT Date_setMonth ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 1624 of file date.c.

1626{
1628 DOUBLE t, month, ddate;
1629 HRESULT hres;
1630
1631 TRACE("\n");
1632
1633 if(!(date = date_this(vthis)))
1634 return JS_E_DATE_EXPECTED;
1635
1636 if(!argc)
1637 return JS_E_MISSING_ARG;
1638
1639 t = local_time(date->time, date);
1640
1641 hres = to_number(ctx, argv[0], &month);
1642 if(FAILED(hres))
1643 return hres;
1644
1645 if(argc > 1) {
1646 hres = to_number(ctx, argv[1], &ddate);
1647 if(FAILED(hres))
1648 return hres;
1649 }else {
1650 ddate = date_from_time(t);
1651 }
1652
1655 date->time = time_clip(utc(t, date));
1656
1657 if(r)
1658 *r = jsval_number(date->time);
1659 return S_OK;
1660}

◆ Date_setSeconds()

static HRESULT Date_setSeconds ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 1286 of file date.c.

1288{
1290 double t, sec, ms;
1291 HRESULT hres;
1292
1293 TRACE("\n");
1294
1295 if(!(date = date_this(vthis)))
1296 return JS_E_DATE_EXPECTED;
1297
1298 if(!argc)
1299 return JS_E_MISSING_ARG;
1300
1301 t = local_time(date->time, date);
1302
1303 hres = to_number(ctx, argv[0], &sec);
1304 if(FAILED(hres))
1305 return hres;
1306
1307 if(argc > 1) {
1308 hres = to_number(ctx, argv[1], &ms);
1309 if(FAILED(hres))
1310 return hres;
1311 }else {
1312 ms = ms_from_time(t);
1313 }
1314
1316 min_from_time(t), sec, ms));
1317 date->time = time_clip(utc(t, date));
1318
1319 if(r)
1320 *r = jsval_number(date->time);
1321 return S_OK;
1322}

◆ Date_setTime()

static HRESULT Date_setTime ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 1199 of file date.c.

1201{
1202 double n;
1203 HRESULT hres;
1205
1206 TRACE("\n");
1207
1208 if(!(date = date_this(vthis)))
1209 return JS_E_DATE_EXPECTED;
1210
1211 if(!argc)
1212 return JS_E_MISSING_ARG;
1213
1214 hres = to_number(ctx, argv[0], &n);
1215 if(FAILED(hres))
1216 return hres;
1217
1218 date->time = time_clip(n);
1219
1220 if(r)
1221 *r = jsval_number(date->time);
1222 return S_OK;
1223}

◆ Date_setUTCDate()

static HRESULT Date_setUTCDate ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 1595 of file date.c.

1597{
1599 double t, n;
1600 HRESULT hres;
1601
1602 TRACE("\n");
1603
1604 if(!(date = date_this(vthis)))
1605 return JS_E_DATE_EXPECTED;
1606
1607 if(!argc)
1608 return JS_E_MISSING_ARG;
1609
1610 hres = to_number(ctx, argv[0], &n);
1611 if(FAILED(hres))
1612 return hres;
1613
1614 t = date->time;
1616 date->time = time_clip(t);
1617
1618 if(r)
1619 *r = jsval_number(date->time);
1620 return S_OK;
1621}

◆ Date_setUTCFullYear()

static HRESULT Date_setUTCFullYear ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 1748 of file date.c.

1750{
1752 double t, year, month, ddate;
1753 HRESULT hres;
1754
1755 TRACE("\n");
1756
1757 if(!(date = date_this(vthis)))
1758 return JS_E_DATE_EXPECTED;
1759
1760 if(!argc)
1761 return JS_E_MISSING_ARG;
1762
1763 t = date->time;
1764
1765 hres = to_number(ctx, argv[0], &year);
1766 if(FAILED(hres))
1767 return hres;
1768
1769 if(argc > 1) {
1770 hres = to_number(ctx, argv[1], &month);
1771 if(FAILED(hres))
1772 return hres;
1773 }else {
1775 }
1776
1777 if(argc > 2) {
1778 hres = to_number(ctx, argv[2], &ddate);
1779 if(FAILED(hres))
1780 return hres;
1781 }else {
1782 ddate = date_from_time(t);
1783 }
1784
1785 t = make_date(make_day(year, month, ddate), time_within_day(t));
1786 date->time = time_clip(t);
1787
1788 if(r)
1789 *r = jsval_number(date->time);
1790 return S_OK;
1791}

◆ Date_setUTCHours()

static HRESULT Date_setUTCHours ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 1512 of file date.c.

1514{
1516 double t, hour, min, sec, ms;
1517 HRESULT hres;
1518
1519 TRACE("\n");
1520
1521 if(!(date = date_this(vthis)))
1522 return JS_E_DATE_EXPECTED;
1523
1524 if(!argc)
1525 return JS_E_MISSING_ARG;
1526
1527 t = date->time;
1528
1529 hres = to_number(ctx, argv[0], &hour);
1530 if(FAILED(hres))
1531 return hres;
1532
1533 if(argc > 1) {
1534 hres = to_number(ctx, argv[1], &min);
1535 if(FAILED(hres))
1536 return hres;
1537 }else {
1538 min = min_from_time(t);
1539 }
1540
1541 if(argc > 2) {
1542 hres = to_number(ctx, argv[2], &sec);
1543 if(FAILED(hres))
1544 return hres;
1545 }else {
1546 sec = sec_from_time(t);
1547 }
1548
1549 if(argc > 3) {
1550 hres = to_number(ctx, argv[3], &ms);
1551 if(FAILED(hres))
1552 return hres;
1553 }else {
1554 ms = ms_from_time(t);
1555 }
1556
1557 t = make_date(day(t), make_time(hour, min, sec, ms));
1558 date->time = time_clip(t);
1559
1560 if(r)
1561 *r = jsval_number(date->time);
1562 return S_OK;
1563}

◆ Date_setUTCMilliseconds()

static HRESULT Date_setUTCMilliseconds ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 1256 of file date.c.

1258{
1260 double n, t;
1261 HRESULT hres;
1262
1263 TRACE("\n");
1264
1265 if(!(date = date_this(vthis)))
1266 return JS_E_DATE_EXPECTED;
1267
1268 if(!argc)
1269 return JS_E_MISSING_ARG;
1270
1271 hres = to_number(ctx, argv[0], &n);
1272 if(FAILED(hres))
1273 return hres;
1274
1275 t = date->time;
1277 sec_from_time(t), n));
1278 date->time = time_clip(t);
1279
1280 if(r)
1281 *r = jsval_number(date->time);
1282 return S_OK;
1283}

◆ Date_setUTCMinutes()

static HRESULT Date_setUTCMinutes ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 1411 of file date.c.

1413{
1415 double t, min, sec, ms;
1416 HRESULT hres;
1417
1418 TRACE("\n");
1419
1420 if(!(date = date_this(vthis)))
1421 return JS_E_DATE_EXPECTED;
1422
1423 if(!argc)
1424 return JS_E_MISSING_ARG;
1425
1426 t = date->time;
1427
1428 hres = to_number(ctx, argv[0], &min);
1429 if(FAILED(hres))
1430 return hres;
1431
1432 if(argc > 1) {
1433 hres = to_number(ctx, argv[1], &sec);
1434 if(FAILED(hres))
1435 return hres;
1436 }else {
1437 sec = sec_from_time(t);
1438 }
1439
1440 if(argc > 2) {
1441 hres = to_number(ctx, argv[2], &ms);
1442 if(FAILED(hres))
1443 return hres;
1444 }else {
1445 ms = ms_from_time(t);
1446 }
1447
1449 min, sec, ms));
1450 date->time = time_clip(t);
1451
1452 if(r)
1453 *r = jsval_number(date->time);
1454 return S_OK;
1455}

◆ Date_setUTCMonth()

static HRESULT Date_setUTCMonth ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 1663 of file date.c.

1665{
1667 double t, month, ddate;
1668 HRESULT hres;
1669
1670 TRACE("\n");
1671
1672 if(!(date = date_this(vthis)))
1673 return JS_E_DATE_EXPECTED;
1674
1675 if(!argc)
1676 return JS_E_MISSING_ARG;
1677
1678 t = date->time;
1679
1680 hres = to_number(ctx, argv[0], &month);
1681 if(FAILED(hres))
1682 return hres;
1683
1684 if(argc > 1) {
1685 hres = to_number(ctx, argv[1], &ddate);
1686 if(FAILED(hres))
1687 return hres;
1688 }else {
1689 ddate = date_from_time(t);
1690 }
1691
1694 date->time = time_clip(t);
1695
1696 if(r)
1697 *r = jsval_number(date->time);
1698 return S_OK;
1699}

◆ Date_setUTCSeconds()

static HRESULT Date_setUTCSeconds ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 1325 of file date.c.

1327{
1329 double t, sec, ms;
1330 HRESULT hres;
1331
1332 TRACE("\n");
1333
1334 if(!(date = date_this(vthis)))
1335 return JS_E_DATE_EXPECTED;
1336
1337 if(!argc)
1338 return JS_E_MISSING_ARG;
1339
1340 t = date->time;
1341
1342 hres = to_number(ctx, argv[0], &sec);
1343 if(FAILED(hres))
1344 return hres;
1345
1346 if(argc > 1) {
1347 hres = to_number(ctx, argv[1], &ms);
1348 if(FAILED(hres))
1349 return hres;
1350 }else {
1351 ms = ms_from_time(t);
1352 }
1353
1355 min_from_time(t), sec, ms));
1356 date->time = time_clip(t);
1357
1358 if(r)
1359 *r = jsval_number(date->time);
1360 return S_OK;
1361}

◆ Date_setYear()

static HRESULT Date_setYear ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 1819 of file date.c.

1821{
1823 DOUBLE t, year;
1824 HRESULT hres;
1825
1826 TRACE("\n");
1827
1828 if(!(date = date_this(vthis)))
1829 return JS_E_DATE_EXPECTED;
1830
1831 if(!argc)
1832 return JS_E_MISSING_ARG;
1833
1834 t = local_time(date->time, date);
1835
1836 hres = to_number(ctx, argv[0], &year);
1837 if(FAILED(hres))
1838 return hres;
1839
1840 if(isnan(year)) {
1841 date->time = year;
1842 if(r)
1843 *r = jsval_number(NAN);
1844 return S_OK;
1845 }
1846
1847 year = year >= 0.0 ? floor(year) : -floor(-year);
1848 if(-1.0 < year && year < 100.0)
1849 year += 1900.0;
1850
1852
1853 if(r)
1854 *r = jsval_number(date->time);
1855 return S_OK;
1856}

◆ date_this()

static DateInstance * date_this ( jsval_t  vthis)
inlinestatic

Definition at line 53 of file date.c.

54{
55 jsdisp_t *jsdisp = is_object_instance(vthis) ? to_jsdisp(get_object(vthis)) : NULL;
56 return (jsdisp && is_class(jsdisp, JSCLASS_DATE)) ? date_from_jsdisp(jsdisp) : NULL;
57}
static DateInstance * date_from_jsdisp(jsdisp_t *jsdisp)
Definition: date.c:48
jsdisp_t * to_jsdisp(IDispatch *disp)
Definition: dispex.c:2447
@ JSCLASS_DATE
Definition: jscript.h:106
static BOOL is_class(jsdisp_t *jsdisp, jsclass_t class)
Definition: jscript.h:503
static IDispatch * get_object(jsval_t v)
Definition: jsval.h:228
static BOOL is_object_instance(jsval_t v)
Definition: jsval.h:175

Referenced by create_utc_string(), Date_getDate(), Date_getDay(), Date_getFullYear(), Date_getHours(), Date_getMilliseconds(), Date_getMinutes(), Date_getMonth(), Date_getSeconds(), Date_getTime(), Date_getTimezoneOffset(), Date_getUTCDate(), Date_getUTCDay(), Date_getUTCFullYear(), Date_getUTCHours(), Date_getUTCMilliseconds(), Date_getUTCMinutes(), Date_getUTCMonth(), Date_getUTCSeconds(), Date_getYear(), Date_setDate(), Date_setFullYear(), Date_setHours(), Date_setMilliseconds(), Date_setMinutes(), Date_setMonth(), Date_setSeconds(), Date_setTime(), Date_setUTCDate(), Date_setUTCFullYear(), Date_setUTCHours(), Date_setUTCMilliseconds(), Date_setUTCMinutes(), Date_setUTCMonth(), Date_setUTCSeconds(), Date_setYear(), Date_toDateString(), Date_toISOString(), Date_toLocaleDateString(), Date_toLocaleString(), Date_toLocaleTimeString(), Date_toString(), Date_toTimeString(), and Date_valueOf().

◆ date_to_string()

static HRESULT date_to_string ( DOUBLE  time,
BOOL  show_offset,
int  offset,
jsval_t r 
)
inlinestatic

Definition at line 441 of file date.c.

442{
443 static const DWORD week_ids[] = { LOCALE_SABBREVDAYNAME7, LOCALE_SABBREVDAYNAME1,
446 static const DWORD month_ids[] = { LOCALE_SABBREVMONTHNAME1, LOCALE_SABBREVMONTHNAME2,
452
453 const WCHAR *formatEra = L"";
454 WCHAR week[64], month[64];
455 WCHAR buf[192];
456 jsstr_t *date_jsstr;
457 int year, day;
458 DWORD lcid_en;
459 WCHAR sign = '-';
460
461 if(isnan(time)) {
462 if(r)
464 return S_OK;
465 }
466
467 if(r) {
469
470 week[0] = 0;
471 GetLocaleInfoW(lcid_en, week_ids[(int)week_day(time)], week, ARRAY_SIZE(week));
472
473 month[0] = 0;
474 GetLocaleInfoW(lcid_en, month_ids[(int)month_from_time(time)], month, ARRAY_SIZE(month));
475
476 year = year_from_time(time);
477 if(year<0) {
478 formatEra = L" B.C.";
479 year = -year+1;
480 }
481
483
484 if(offset < 0) {
485 sign = '+';
486 offset = -offset;
487 }
488
489 if(!show_offset)
490 swprintf(buf, ARRAY_SIZE(buf), L"%s %s %d %02d:%02d:%02d %d%s", week, month, day,
492 (int)sec_from_time(time), year, formatEra);
493 else if(offset)
494 swprintf(buf, ARRAY_SIZE(buf), L"%s %s %d %02d:%02d:%02d UTC%c%02d%02d %d%s", week, month, day,
496 (int)sec_from_time(time), sign, offset/60, offset%60,
497 year, formatEra);
498 else
499 swprintf(buf, ARRAY_SIZE(buf), L"%s %s %d %02d:%02d:%02d UTC %d%s", week, month, day,
501 (int)sec_from_time(time), year, formatEra);
502
503 date_jsstr = jsstr_alloc(buf);
504 if(!date_jsstr)
505 return E_OUTOFMEMORY;
506
507 *r = jsval_string(date_jsstr);
508 }
509 return S_OK;
510}
#define sign(x)
Definition: mapdesc.cc:613

Referenced by DateConstr_value(), and dateobj_to_string().

◆ Date_toDateString()

static HRESULT Date_toDateString ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 770 of file date.c.

772{
774
775 if(!(date = date_this(vthis)))
776 return JS_E_DATE_EXPECTED;
777
779}
static HRESULT dateobj_to_date_string(DateInstance *date, jsval_t *r)
Definition: date.c:714

◆ Date_toGMTString()

static HRESULT Date_toGMTString ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 706 of file date.c.

708{
709 TRACE("\n");
710 return create_utc_string(ctx, vthis, r);
711}
static HRESULT create_utc_string(script_ctx_t *ctx, jsval_t vthis, jsval_t *r)
Definition: date.c:638

◆ Date_toISOString()

static HRESULT Date_toISOString ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 581 of file date.c.

583{
585 WCHAR buf[64], *p = buf;
586 double year;
587
588 TRACE("\n");
589
590 if(!(date = date_this(vthis)))
591 return JS_E_DATE_EXPECTED;
592
593 year = year_from_time(date->time);
594 if(isnan(year) || year > 999999 || year < -999999) {
595 FIXME("year %lf should throw an exception\n", year);
596 return E_FAIL;
597 }
598
599 if(year < 0) {
600 *p++ = '-';
601 p += swprintf(p, ARRAY_SIZE(buf) - 1, L"%06d", -(int)year);
602 }else if(year > 9999) {
603 *p++ = '+';
604 p += swprintf(p, ARRAY_SIZE(buf) - 1, L"%06d", (int)year);
605 }else {
606 p += swprintf(p, ARRAY_SIZE(buf), L"%04d", (int)year);
607 }
608
609 swprintf(p, ARRAY_SIZE(buf) - (p - buf), L"-%02d-%02dT%02d:%02d:%02d.%03dZ",
610 (int)month_from_time(date->time) + 1, (int)date_from_time(date->time),
611 (int)hour_from_time(date->time), (int)min_from_time(date->time),
612 (int)sec_from_time(date->time), (int)ms_from_time(date->time));
613
614 if(r) {
615 jsstr_t *ret;
616 if(!(ret = jsstr_alloc(buf)))
617 return E_OUTOFMEMORY;
618 *r = jsval_string(ret);
619 }
620 return S_OK;
621}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define E_FAIL
Definition: ddrawi.h:102
GLfloat GLfloat p
Definition: glext.h:8902

◆ Date_toLocaleDateString()

static HRESULT Date_toLocaleDateString ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 833 of file date.c.

835{
836 SYSTEMTIME st;
838 jsstr_t *date_str;
839 int len;
840
841 TRACE("\n");
842
843 if(!(date = date_this(vthis)))
844 return JS_E_DATE_EXPECTED;
845
846 if(isnan(date->time)) {
847 if(r)
849 return S_OK;
850 }
851
853
854 if(st.wYear<1601 || st.wYear>9999)
856
857 if(r) {
858 WCHAR *ptr;
859
860 len = GetDateFormatW(ctx->lcid, DATE_LONGDATE, &st, NULL, NULL, 0);
861 date_str = jsstr_alloc_buf(len-1, &ptr);
862 if(!date_str)
863 return E_OUTOFMEMORY;
864 GetDateFormatW(ctx->lcid, DATE_LONGDATE, &st, NULL, ptr, len);
865
866 *r = jsval_string(date_str);
867 }
868 return S_OK;
869}
static SYSTEMTIME create_systemtime(DOUBLE time)
Definition: date.c:425
GLenum GLsizei len
Definition: glext.h:6722
jsstr_t * jsstr_alloc_buf(unsigned len, WCHAR **buf)
Definition: jsstr.c:69
INT WINAPI GetDateFormatW(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCWSTR lpFormat, LPWSTR lpDateStr, INT cchOut)
Definition: lcformat.c:1001
static PVOID ptr
Definition: dispmode.c:27
#define DATE_LONGDATE
Definition: winnls.h:217

◆ Date_toLocaleString()

static HRESULT Date_toLocaleString ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 538 of file date.c.

540{
541 SYSTEMTIME st;
543 jsstr_t *date_str;
544 int date_len, time_len;
545
546 TRACE("\n");
547
548 if(!(date = date_this(vthis)))
549 return JS_E_DATE_EXPECTED;
550
551 if(isnan(date->time)) {
552 if(r)
554 return S_OK;
555 }
556
558
559 if(st.wYear<1601 || st.wYear>9999)
560 return dateobj_to_string(date, r);
561
562 if(r) {
563 WCHAR *ptr;
564
565 date_len = GetDateFormatW(ctx->lcid, DATE_LONGDATE, &st, NULL, NULL, 0);
566 time_len = GetTimeFormatW(ctx->lcid, 0, &st, NULL, NULL, 0);
567
568 date_str = jsstr_alloc_buf(date_len+time_len-1, &ptr);
569 if(!date_str)
570 return E_OUTOFMEMORY;
571
572 GetDateFormatW(ctx->lcid, DATE_LONGDATE, &st, NULL, ptr, date_len);
573 GetTimeFormatW(ctx->lcid, 0, &st, NULL, ptr+date_len, time_len);
574 ptr[date_len-1] = ' ';
575
576 *r = jsval_string(date_str);
577 }
578 return S_OK;
579}
static HRESULT dateobj_to_string(DateInstance *date, jsval_t *r)
Definition: date.c:513
INT WINAPI GetTimeFormatW(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCWSTR lpFormat, LPWSTR lpTimeStr, INT cchOut)
Definition: lcformat.c:1101

◆ Date_toLocaleTimeString()

static HRESULT Date_toLocaleTimeString ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 872 of file date.c.

874{
875 SYSTEMTIME st;
877 jsstr_t *date_str;
878 int len;
879
880 TRACE("\n");
881
882 if(!(date = date_this(vthis)))
883 return JS_E_DATE_EXPECTED;
884
885 if(isnan(date->time)) {
886 if(r)
888 return S_OK;
889 }
890
892
893 if(st.wYear<1601 || st.wYear>9999)
894 return Date_toTimeString(ctx, vthis, flags, argc, argv, r);
895
896 if(r) {
897 WCHAR *ptr;
898
899 len = GetTimeFormatW(ctx->lcid, 0, &st, NULL, NULL, 0);
900 date_str = jsstr_alloc_buf(len-1, &ptr);
901 if(!date_str)
902 return E_OUTOFMEMORY;
903 GetTimeFormatW(ctx->lcid, 0, &st, NULL, ptr, len);
904
905 *r = jsval_string(date_str);
906 }
907 return S_OK;
908}
static HRESULT Date_toTimeString(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: date.c:782
GLbitfield flags
Definition: glext.h:7161

◆ Date_toString()

static HRESULT Date_toString ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 525 of file date.c.

526{
528
529 TRACE("\n");
530
531 if(!(date = date_this(vthis)))
532 return JS_E_DATE_EXPECTED;
533
534 return dateobj_to_string(date, r);
535}

◆ Date_toTimeString()

static HRESULT Date_toTimeString ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 782 of file date.c.

784{
786 jsstr_t *date_str;
787 WCHAR buf[32];
788 DOUBLE time;
789 WCHAR sign;
790 int offset;
791
792 TRACE("\n");
793
794 if(!(date = date_this(vthis)))
795 return JS_E_DATE_EXPECTED;
796
797 if(isnan(date->time)) {
798 if(r)
800 return S_OK;
801 }
802
803 time = local_time(date->time, date);
804
805 if(r) {
806 offset = date->bias +
808
809 if(offset < 0) {
810 sign = '+';
811 offset = -offset;
812 }
813 else sign = '-';
814
815 if(offset)
816 swprintf(buf, ARRAY_SIZE(buf), L"%02d:%02d:%02d UTC%c%02d%02d", (int)hour_from_time(time),
818 sign, offset/60, offset%60);
819 else
820 swprintf(buf, ARRAY_SIZE(buf), L"%02d:%02d:%02d UTC", (int)hour_from_time(time),
821 (int)min_from_time(time), (int)sec_from_time(time));
822
823 date_str = jsstr_alloc(buf);
824 if(!date_str)
825 return E_OUTOFMEMORY;
826
827 *r = jsval_string(date_str);
828 }
829 return S_OK;
830}
static DOUBLE daylight_saving_ta(DOUBLE time, DateInstance *date)
Definition: date.c:281

Referenced by Date_toLocaleTimeString().

◆ Date_toUTCString()

static HRESULT Date_toUTCString ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 699 of file date.c.

701{
702 TRACE("\n");
703 return create_utc_string(ctx, vthis, r);
704}

◆ date_utc()

static HRESULT date_utc ( script_ctx_t ctx,
unsigned  argc,
jsval_t argv,
double ret 
)
static

Definition at line 2257 of file date.c.

2258{
2259 double year, month, vdate, hours, minutes, seconds, ms;
2260 HRESULT hres;
2261
2262 TRACE("\n");
2263
2264 if(argc) {
2265 hres = to_number(ctx, argv[0], &year);
2266 if(FAILED(hres))
2267 return hres;
2268 if(0 <= year && year <= 99)
2269 year += 1900;
2270 }else {
2271 year = 1900;
2272 }
2273
2274 if(argc>1) {
2275 hres = to_number(ctx, argv[1], &month);
2276 if(FAILED(hres))
2277 return hres;
2278 }else {
2279 month = 0;
2280 }
2281
2282 if(argc>2) {
2283 hres = to_number(ctx, argv[2], &vdate);
2284 if(FAILED(hres))
2285 return hres;
2286 }else {
2287 vdate = 1;
2288 }
2289
2290 if(argc>3) {
2291 hres = to_number(ctx, argv[3], &hours);
2292 if(FAILED(hres))
2293 return hres;
2294 }else {
2295 hours = 0;
2296 }
2297
2298 if(argc>4) {
2299 hres = to_number(ctx, argv[4], &minutes);
2300 if(FAILED(hres))
2301 return hres;
2302 }else {
2303 minutes = 0;
2304 }
2305
2306 if(argc>5) {
2307 hres = to_number(ctx, argv[5], &seconds);
2308 if(FAILED(hres))
2309 return hres;
2310 }else {
2311 seconds = 0;
2312 }
2313
2314 if(argc>6) {
2315 hres = to_number(ctx, argv[6], &ms);
2316 if(FAILED(hres))
2317 return hres;
2318 } else {
2319 ms = 0;
2320 }
2321
2322 *ret = time_clip(make_date(make_day(year, month, vdate),
2323 make_time(hours, minutes,seconds, ms)));
2324 return S_OK;
2325}

Referenced by DateConstr_UTC(), and DateConstr_value().

◆ Date_valueOf()

static HRESULT Date_valueOf ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 623 of file date.c.

625{
627
628 TRACE("\n");
629
630 if(!(date = date_this(vthis)))
631 return JS_E_DATE_EXPECTED;
632
633 if(r)
634 *r = jsval_number(date->time);
635 return S_OK;
636}

◆ DateConstr_now()

static HRESULT DateConstr_now ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 2342 of file date.c.

2343{
2344 TRACE("\n");
2345
2346 if(r) *r = jsval_number(date_now());
2347 return S_OK;
2348}
static double date_now(void)
Definition: date.c:417

◆ DateConstr_parse()

static HRESULT DateConstr_parse ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 2228 of file date.c.

2230{
2231 jsstr_t *parse_str;
2232 double n;
2233 HRESULT hres;
2234
2235 TRACE("\n");
2236
2237 if(!argc) {
2238 if(r)
2239 *r = jsval_number(NAN);
2240 return S_OK;
2241 }
2242
2243 hres = to_string(ctx, argv[0], &parse_str);
2244 if(FAILED(hres))
2245 return hres;
2246
2247 hres = date_parse(parse_str, &n);
2248 jsstr_release(parse_str);
2249 if(FAILED(hres))
2250 return hres;
2251
2252 if(r)
2253 *r = jsval_number(n);
2254 return S_OK;
2255}
static HRESULT date_parse(jsstr_t *input_str, double *ret)
Definition: date.c:1948
static HRESULT to_string(VARIANT *src, BSTR *dst)
Definition: host.c:46
static void jsstr_release(jsstr_t *str)
Definition: jsstr.h:107

◆ DateConstr_UTC()

static HRESULT DateConstr_UTC ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 2327 of file date.c.

2329{
2330 double n;
2331 HRESULT hres;
2332
2333 TRACE("\n");
2334
2335 hres = date_utc(ctx, argc, argv, &n);
2336 if(SUCCEEDED(hres) && r)
2337 *r = jsval_number(n);
2338 return hres;
2339}
static HRESULT date_utc(script_ctx_t *ctx, unsigned argc, jsval_t *argv, double *ret)
Definition: date.c:2257
#define SUCCEEDED(hr)
Definition: intsafe.h:50

◆ DateConstr_value()

static HRESULT DateConstr_value ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 2350 of file date.c.

2352{
2354 HRESULT hres;
2355
2356 TRACE("\n");
2357
2358 switch(flags) {
2359 case DISPATCH_CONSTRUCT:
2360 switch(argc) {
2361 /* ECMA-262 3rd Edition 15.9.3.3 */
2362 case 0:
2364 if(FAILED(hres))
2365 return hres;
2366 break;
2367
2368 /* ECMA-262 3rd Edition 15.9.3.2 */
2369 case 1: {
2370 jsval_t prim;
2371 double n;
2372
2374 if(FAILED(hres))
2375 return hres;
2376
2377 if(is_string(prim))
2379 else
2380 hres = to_number(ctx, prim, &n);
2381
2383 if(FAILED(hres))
2384 return hres;
2385
2387 if(FAILED(hres))
2388 return hres;
2389 break;
2390 }
2391
2392 /* ECMA-262 3rd Edition 15.9.3.1 */
2393 default: {
2394 double ret_date;
2395
2396 hres = date_utc(ctx, argc, argv, &ret_date);
2397 if(FAILED(hres))
2398 return hres;
2399
2400 hres = create_date(ctx, NULL, ret_date, &date);
2401 if(FAILED(hres))
2402 return hres;
2403
2404 date->time = utc(date->time, date);
2405 }
2406 }
2407
2408 if(r) *r = jsval_obj(&date->dispex);
2409 else jsdisp_release(&date->dispex);
2410 return S_OK;
2411
2412 case INVOKE_FUNC: {
2413 FILETIME system_time, local_time;
2414
2415 GetSystemTimeAsFileTime(&system_time);
2416 FileTimeToLocalFileTime(&system_time, &local_time);
2417
2419 }
2420
2421 default:
2422 FIXME("unimplemented flags %x\n", flags);
2423 return E_NOTIMPL;
2424 }
2425
2426 return S_OK;
2427}
#define E_NOTIMPL
Definition: ddrawi.h:99
static HRESULT date_to_string(DOUBLE time, BOOL show_offset, int offset, jsval_t *r)
Definition: date.c:441
BOOL WINAPI FileTimeToLocalFileTime(IN CONST FILETIME *lpFileTime, OUT LPFILETIME lpLocalFileTime)
Definition: time.c:216
@ NO_HINT
Definition: jscript.h:309
HRESULT to_primitive(script_ctx_t *, jsval_t, jsval_t *, hint_t)
Definition: jsutils.c:423
void jsval_release(jsval_t val)
Definition: jsutils.c:186
static jsval_t jsval_obj(jsdisp_t *obj)
Definition: jsval.h:125
static jsstr_t * get_string(jsval_t v)
Definition: jsval.h:238
LOCAL int prim(arg_t *ap)
Definition: match.c:440
static BOOL is_string(parse_buffer *buf)
Definition: parsing.c:600
Definition: jsval.h:54

Referenced by create_date_constr().

◆ dateobj_to_date_string()

static HRESULT dateobj_to_date_string ( DateInstance date,
jsval_t r 
)
static

Definition at line 714 of file date.c.

715{
716 static const DWORD week_ids[] = { LOCALE_SABBREVDAYNAME7, LOCALE_SABBREVDAYNAME1,
719 static const DWORD month_ids[] = { LOCALE_SABBREVMONTHNAME1, LOCALE_SABBREVMONTHNAME2,
725
726 const WCHAR *formatEra = L"";
727 WCHAR week[64], month[64];
728 WCHAR buf[192];
729 jsstr_t *date_str;
730 DOUBLE time;
731 int year, day;
732 DWORD lcid_en;
733
734 if(isnan(date->time)) {
735 if(r)
737 return S_OK;
738 }
739
740 time = local_time(date->time, date);
741
742 if(r) {
744
745 week[0] = 0;
746 GetLocaleInfoW(lcid_en, week_ids[(int)week_day(time)], week, ARRAY_SIZE(week));
747
748 month[0] = 0;
749 GetLocaleInfoW(lcid_en, month_ids[(int)month_from_time(time)], month, ARRAY_SIZE(month));
750
751 year = year_from_time(time);
752 if(year<0) {
753 formatEra = L" B.C.";
754 year = -year+1;
755 }
756
758
759 swprintf(buf, ARRAY_SIZE(buf), L"%s %s %d %d%s", week, month, day, year, formatEra);
760
761 date_str = jsstr_alloc(buf);
762 if(!date_str)
763 return E_OUTOFMEMORY;
764
765 *r = jsval_string(date_str);
766 }
767 return S_OK;
768}

Referenced by Date_toDateString(), and Date_toLocaleDateString().

◆ dateobj_to_string()

static HRESULT dateobj_to_string ( DateInstance date,
jsval_t r 
)
static

Definition at line 513 of file date.c.

514{
515 DOUBLE time;
516 int offset;
517
518 time = local_time(date->time, date);
519 offset = date->bias +
521
522 return date_to_string(time, TRUE, offset, r);
523}

Referenced by Date_toLocaleString(), Date_toString(), and variant_date_to_string().

◆ day()

◆ day_from_month()

static int day_from_month ( int  month,
int  in_leap_year 
)
inlinestatic

Definition at line 117 of file date.c.

118{
119 switch(month)
120 {
121 case 0:
122 return 0;
123 case 1:
124 return 31;
125 case 2:
126 return 59+in_leap_year;
127 case 3:
128 return 90+in_leap_year;
129 case 4:
130 return 120+in_leap_year;
131 case 5:
132 return 151+in_leap_year;
133 case 6:
134 return 181+in_leap_year;
135 case 7:
136 return 212+in_leap_year;
137 case 8:
138 return 243+in_leap_year;
139 case 9:
140 return 273+in_leap_year;
141 case 10:
142 return 304+in_leap_year;
143 default:
144 return 334+in_leap_year;
145 }
146}

Referenced by convert_time(), and make_day().

◆ day_from_year()

static DOUBLE day_from_year ( DOUBLE  year)
inlinestatic

Definition at line 108 of file date.c.

109{
110 if(year != (int)year)
111 return NAN;
112
113 return floor(365.0*(year-1970) + floor((year-1969)/4)
114 - floor((year-1901)/100) + floor((year-1601)/400));
115}

Referenced by day_within_year(), and time_from_year().

◆ day_within_year()

static int day_within_year ( DOUBLE  time)
inlinestatic

Definition at line 181 of file date.c.

182{
184}
static DOUBLE day_from_year(DOUBLE year)
Definition: date.c:108

Referenced by date_from_time(), and month_from_time().

◆ daylight_saving_ta()

static DOUBLE daylight_saving_ta ( DOUBLE  time,
DateInstance date 
)
inlinestatic

Definition at line 281 of file date.c.

282{
283 int year = year_from_time(time);
284 DOUBLE standardTime, daylightTime;
285
286 if(isnan(time))
287 return 0;
288
289 standardTime = convert_time(year, date->standardDate);
290 daylightTime = convert_time(year, date->daylightDate);
291
292 if(isnan(standardTime) || isnan(daylightTime))
293 return 0;
294 else if(standardTime > daylightTime) {
295 if(daylightTime <= time && time < standardTime)
296 return date->daylightBias;
297
298 return date->standardBias;
299 }
300 else {
301 if(standardTime <= time && time < daylightTime)
302 return date->standardBias;
303
304 return date->daylightBias;
305 }
306}
static DOUBLE convert_time(int year, SYSTEMTIME st)
Definition: date.c:247

Referenced by Date_toTimeString(), dateobj_to_string(), local_time(), and utc().

◆ days_in_year()

static DOUBLE days_in_year ( DOUBLE  year)
inlinestatic

Definition at line 93 of file date.c.

94{
95 int y;
96
97 if(year != (int)year)
98 return NAN;
99
100 y = year;
101 if(y%4 != 0) return 365;
102 if(y%100 != 0) return 366;
103 if(y%400 != 0) return 365;
104 return 366;
105}
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548

Referenced by in_leap_year().

◆ file_time_to_date_time()

static double file_time_to_date_time ( const FILETIME ftime)
inlinestatic

Definition at line 59 of file date.c.

60{
61 /* 1601 to 1970 is 369 years plus 89 leap days */
62 const LONGLONG time_epoch = (LONGLONG)(369 * 365 + 89) * 86400 * 1000;
63
64 LONGLONG time = (((ULONGLONG)ftime->dwHighDateTime << 32) | ftime->dwLowDateTime) / 10000;
65
66 return time - time_epoch;
67}
int64_t LONGLONG
Definition: typedefs.h:68
uint64_t ULONGLONG
Definition: typedefs.h:67

Referenced by date_now(), and DateConstr_value().

◆ hour_from_time()

static DOUBLE hour_from_time ( DOUBLE  time)
inlinestatic

Definition at line 322 of file date.c.

323{
324 DOUBLE ret;
325
326 if(isnan(time))
327 return NAN;
328
329 ret = fmod(floor(time/MS_PER_HOUR), 24);
330 if(ret<0) ret += 24;
331
332 return ret;
333}
_ACRTIMP double __cdecl fmod(double, double)

Referenced by create_systemtime(), create_utc_string(), Date_getHours(), Date_getUTCHours(), Date_setMilliseconds(), Date_setMinutes(), Date_setSeconds(), Date_setUTCMilliseconds(), Date_setUTCMinutes(), Date_setUTCSeconds(), date_to_string(), Date_toISOString(), and Date_toTimeString().

◆ in_leap_year()

static int in_leap_year ( DOUBLE  time)
inlinestatic

Definition at line 173 of file date.c.

174{
176 return 1;
177 return 0;
178}
static DOUBLE days_in_year(DOUBLE year)
Definition: date.c:93

Referenced by convert_time(), date_from_time(), day_from_month(), make_day(), and month_from_time().

◆ local_time()

◆ make_date()

◆ make_day()

static DOUBLE make_day ( DOUBLE  year,
DOUBLE  month,
DOUBLE  day 
)
inlinestatic

Definition at line 384 of file date.c.

385{
386 DOUBLE time;
387
388 year += floor(month/12);
389
390 month = fmod(month, 12);
391 if(month<0) month += 12;
392
393 time = time_from_year(year);
394
395 day += floor(time / MS_PER_DAY);
397
398 return day-1;
399}

Referenced by date_parse(), Date_setDate(), Date_setFullYear(), Date_setMonth(), Date_setUTCDate(), Date_setUTCFullYear(), Date_setUTCMonth(), Date_setYear(), date_utc(), and variant_date_to_number().

◆ make_time()

static DOUBLE make_time ( DOUBLE  hour,
DOUBLE  min,
DOUBLE  sec,
DOUBLE  ms 
)
inlinestatic

◆ min_from_time()

static DOUBLE min_from_time ( DOUBLE  time)
inlinestatic

◆ month_from_time()

static DOUBLE month_from_time ( DOUBLE  time)
inlinestatic

Definition at line 187 of file date.c.

188{
189 int ily = in_leap_year(time);
190 int dwy = day_within_year(time);
191
192 if(isnan(time))
193 return NAN;
194
195 if(0<=dwy && dwy<31) return 0;
196 if(dwy < 59+ily) return 1;
197 if(dwy < 90+ily) return 2;
198 if(dwy < 120+ily) return 3;
199 if(dwy < 151+ily) return 4;
200 if(dwy < 181+ily) return 5;
201 if(dwy < 212+ily) return 6;
202 if(dwy < 243+ily) return 7;
203 if(dwy < 273+ily) return 8;
204 if(dwy < 304+ily) return 9;
205 if(dwy < 334+ily) return 10;
206 return 11;
207}

Referenced by convert_time(), create_systemtime(), create_utc_string(), date_from_time(), Date_getMonth(), Date_getUTCMonth(), Date_setDate(), Date_setFullYear(), Date_setUTCDate(), Date_setUTCFullYear(), Date_setYear(), date_to_string(), Date_toISOString(), and dateobj_to_date_string().

◆ ms_from_time()

static DOUBLE ms_from_time ( DOUBLE  time)
inlinestatic

Definition at line 364 of file date.c.

365{
366 DOUBLE ret;
367
368 if(isnan(time))
369 return NAN;
370
371 ret = fmod(time, 1000);
372 if(ret<0) ret += 1000;
373
374 return ret;
375}

Referenced by create_systemtime(), Date_getMilliseconds(), Date_getUTCMilliseconds(), Date_setHours(), Date_setMinutes(), Date_setSeconds(), Date_setUTCHours(), Date_setUTCMinutes(), Date_setUTCSeconds(), and Date_toISOString().

◆ sec_from_time()

static DOUBLE sec_from_time ( DOUBLE  time)
inlinestatic

◆ time_clip()

◆ time_from_year()

static DOUBLE time_from_year ( DOUBLE  year)
inlinestatic

Definition at line 149 of file date.c.

150{
151 return MS_PER_DAY*day_from_year(year);
152}

Referenced by convert_time(), make_day(), and year_from_time().

◆ time_within_day()

static DOUBLE time_within_day ( DOUBLE  time)
inlinestatic

Definition at line 81 of file date.c.

82{
83 DOUBLE ret;
84
86 if(ret < 0)
87 ret += MS_PER_DAY;
88
89 return ret;
90}

Referenced by Date_setDate(), Date_setFullYear(), Date_setMonth(), Date_setUTCDate(), Date_setUTCFullYear(), Date_setUTCMonth(), and Date_setYear().

◆ utc()

◆ variant_date_to_number()

HRESULT variant_date_to_number ( double  date,
double ret 
)

Definition at line 2458 of file date.c.

2459{
2460 SYSTEMTIME st;
2461 UDATE udate;
2462 HRESULT hres;
2463
2464 hres = VarUdateFromDate(date, 0, &udate);
2465 if(FAILED(hres))
2466 return hres;
2467
2468 if(!TzSpecificLocalTimeToSystemTime(NULL, &udate.st, &st))
2469 return E_FAIL;
2470
2471 TRACE("%uy %um %u %ud %uh %um %u.%us\n", st.wYear, st.wMonth, st.wDayOfWeek, st.wDay, st.wHour, st.wMinute,
2472 st.wSecond, st.wMilliseconds);
2473
2474 *ret = make_date(make_day(st.wYear, st.wMonth - 1, st.wDay),
2475 make_time(st.wHour, st.wMinute, st.wSecond, st.wMilliseconds));
2476 return S_OK;
2477}
BOOL WINAPI TzSpecificLocalTimeToSystemTime(CONST TIME_ZONE_INFORMATION *lpTimeZoneInformation, CONST SYSTEMTIME *lpLocalTime, LPSYSTEMTIME lpUniversalTime)
Definition: timezone.c:421
Definition: oleauto.h:720
SYSTEMTIME st
Definition: oleauto.h:721
HRESULT WINAPI VarUdateFromDate(DATE dateIn, ULONG dwFlags, UDATE *lpUdate)
Definition: variant.c:1427

Referenced by to_number(), and variant_date_to_string().

◆ variant_date_to_string()

HRESULT variant_date_to_string ( script_ctx_t ctx,
double  date,
jsstr_t **  r 
)

Definition at line 2479 of file date.c.

2480{
2481 DateInstance *date_obj;
2482 jsval_t val;
2483 double time;
2484 HRESULT hres;
2485
2487 if(FAILED(hres))
2488 return hres;
2489
2490 hres = create_date(ctx, NULL, time, &date_obj);
2491 if(FAILED(hres))
2492 return hres;
2493
2494 hres = dateobj_to_string(date_obj, &val);
2495 jsdisp_release(&date_obj->dispex);
2496 if(FAILED(hres))
2497 return hres;
2498
2500 *r = get_string(val);
2501 return hres;
2502}
HRESULT variant_date_to_number(double date, double *ret)
Definition: date.c:2458
#define assert(_expr)
Definition: assert.h:32
GLuint GLfloat * val
Definition: glext.h:7180
jsdisp_t dispex
Definition: date.c:36

Referenced by to_string().

◆ week_day()

static DOUBLE week_day ( DOUBLE  time)
inlinestatic

Definition at line 234 of file date.c.

235{
236 DOUBLE ret;
237
238 if(isnan(time))
239 return NAN;
240
241 ret = fmod(day(time)+4, 7);
242 if(ret<0) ret += 7;
243
244 return ret;
245}

Referenced by convert_time(), create_systemtime(), create_utc_string(), Date_getDay(), Date_getUTCDay(), date_to_string(), and dateobj_to_date_string().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( jscript  )

◆ year_from_time()

static DOUBLE year_from_time ( DOUBLE  time)
inlinestatic

Definition at line 155 of file date.c.

156{
157 int y;
158
159 if(isnan(time))
160 return NAN;
161
162 y = 1970 + time/365.25/MS_PER_DAY;
163
164 if(time_from_year(y) > time)
165 while(time_from_year(y) > time) y--;
166 else
167 while(time_from_year(y+1)<=time) y++;
168
169 return y;
170}

Referenced by create_systemtime(), create_utc_string(), Date_getFullYear(), Date_getUTCFullYear(), Date_getYear(), Date_setDate(), Date_setMonth(), Date_setUTCDate(), Date_setUTCMonth(), date_to_string(), Date_toISOString(), dateobj_to_date_string(), day_within_year(), daylight_saving_ta(), and in_leap_year().

Variable Documentation

◆ Date_info

const builtin_info_t Date_info
static
Initial value:
= {
.class = JSCLASS_DATE,
.props_cnt = ARRAY_SIZE(Date_props),
.props = Date_props,
}
static const builtin_prop_t Date_props[]
Definition: date.c:1858

Definition at line 1906 of file date.c.

Referenced by create_date().

◆ Date_props

const builtin_prop_t Date_props[]
static

Definition at line 1858 of file date.c.

◆ DateConstr_info

const builtin_info_t DateConstr_info
static
Initial value:
= {
.class = JSCLASS_FUNCTION,
.call = Function_value,
.props = DateConstr_props,
}
static const builtin_prop_t DateConstr_props[]
Definition: date.c:2429
HRESULT Function_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: function.c:600
@ JSCLASS_FUNCTION
Definition: jscript.h:109

Definition at line 2435 of file date.c.

Referenced by create_date_constr().

◆ DateConstr_props

const builtin_prop_t DateConstr_props[]
static
Initial value:
= {
}
static HRESULT DateConstr_parse(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: date.c:2228
static HRESULT DateConstr_now(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: date.c:2342
static HRESULT DateConstr_UTC(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: date.c:2327
#define PROPF_HTML
Definition: jscript.h:89
const unsigned int PROPF_METHOD
Definition: jsdisp.idl:33

Definition at line 2429 of file date.c.

◆ DateInst_info

const builtin_info_t DateInst_info
static
Initial value:
= {
.class = JSCLASS_DATE,
}

Definition at line 1912 of file date.c.

Referenced by create_date().