Files
sibo-playground/code/SIBOSDK/hwimdemo/date.c
2026-07-06 18:01:36 +01:00

122 lines
3.2 KiB
C

#include <p_date.h>
#include <p_std.h>
#include <p_config.h>
#include <date.h>
#include <hwim.h>
#include <s_.rsg>
#include <mfne.g>
#include <dat.g>
#include <dat.rsg>
LOCAL_C VOID InitField(PR_DATE *self,UINT i,LONG val,LONG min,LONG max,UBYTE width)
{
self->mfne.f[i].value=val;
self->mfne.f[i].limits[MFNE_LOWER]=min;
self->mfne.f[i].limits[MFNE_UPPER]=max;
self->mfne.f[i].width=width;
}
LOCAL_C VOID DayMonthYear(PR_DATE *self,INT i,INT j,INT k)
{
self->date.day=i;
self->date.month=j;
self->date.year=k;
}
#pragma METHOD_CALL
METHOD VOID date_wn_init(PR_DATE *self,VOID *par,PR_WIN *landlord)
{
P_DAYSEC ds;
P_DATE dt;
E_CONFIG cfg;
p_getctd(&cfg);
self->lodger.landlord=landlord;
self->mfne.selected=FALSE;
self->mfne.changed=FALSE;
self->mfne.cField=0;
self->mfne.nField=3;
self->mfne.f[0].separator=cfg.dateSeparator;
self->mfne.f[1].separator=cfg.dateSeparator;
self->mfne.f[2].flags=MFNE_SUPPRESS_SEPARATOR;
self->date.dType=cfg.dateType;
if (self->date.dType==E_DATE_EUROPE)
{
DayMonthYear(self,0,1,2);
}
else if (self->date.dType==E_DATE_USA)
{
DayMonthYear(self,1,0,2);
}
else if (self->date.dType==E_DATE_JAPAN)
{
DayMonthYear(self,2,1,0);
}
InitField(self,self->date.day,1,1,31,2);
InitField(self,self->date.month,1,1,12,2);
InitField(self,self->date.year,1,1900,2154,4);
dt.year=254;
dt.month=11;
dt.day=30;
dt.hour=dt.minute=dt.second=dt.yrday=0;
p_dttods(&dt,&ds);
self->date.max=ds.day;
}
METHOD VOID date_wn_set(PR_DATE *self,ULONG *par)
{
P_DAYSEC ds;
P_DATE dt;
ds.day=*par;
ds.sec=0;
if (ds.day>self->date.max)
{
ds.day=self->date.max;
}
p_dstodt(&ds,&dt);
self->mfne.f[self->date.day].value=dt.day+1;
self->mfne.f[self->date.month].value=dt.month+1;
self->mfne.f[self->date.year].value=dt.year+1900;
p_supersend2(self,O_WN_SET);
}
METHOD VOID date_wn_sense(PR_DATE *self,ULONG *par)
{
P_DATE dt;
P_DAYSEC ds;
dt.second=0;
dt.minute=0;
dt.hour=0;
dt.day=self->mfne.f[self->date.day].value-1;
dt.month=self->mfne.f[self->date.month].value-1;
dt.year=self->mfne.f[self->date.year].value-1900;
p_dttods(&dt,&ds);
*par=ds.day;
}
METHOD INT date_lg_self_check(PR_DATE *self,INT can_defer)
{
INT ret;
INT days;
ret=p_supersend3(self,O_LG_SELF_CHECK,can_defer);
if ((can_defer==FALSE)&&(ret==LG_CHECK_OK_CHANGED))
{
days=p_dayinm((INT)self->mfne.f[self->date.year].value-1900,
(INT)self->mfne.f[self->date.month].value-1);
if (self->mfne.f[self->date.day].value>(LONG)days)
{
hBeep();
self->mfne.cField=self->date.day;
self->mfne.f[self->date.day].value=(LONG)days;
p_supersend3(self,O_LG_SELF_CHECK,TRUE);
hInfoPrint(MONTH_DAY_RESET);
ret=LG_CHECK_FAILED_CHANGED;
}
}
return(ret);
}