build: add the SIBO SDK

This commit is contained in:
2026-07-06 18:01:36 +01:00
parent d76326729c
commit 64e484448c
757 changed files with 97167 additions and 0 deletions
+3
View File
@@ -0,0 +1,3 @@
dat.pic
dat.rzc
dat.shd
+58
View File
@@ -0,0 +1,58 @@
IMAGE dat
EXTERNAL olib
EXTERNAL hwim
INCLUDE p_gen.h
INCLUDE p_file.h
INCLUDE epoc.h
INCLUDE wlib.h
INCLUDE olib.g
INCLUDE hwimman.g
INCLUDE mfne.g
INCLUDE time.g
CLASS datcom comman
{
ADD com_date
}
CLASS datwserv wserv
{
REPLACE ws_dyn_init
}
CLASS datwin bwin
{
REPLACE wn_init
REPLACE wn_dodraw
REPLACE wn_draw
PROPERTY
{
PR_TIME *time;
}
}
CLASS datedlg dlgbox
{
REPLACE dl_item_new
REPLACE dl_dyn_init
REPLACE dl_key
}
CLASS date mfne
{
REPLACE wn_init
REPLACE wn_set
REPLACE wn_sense
REPLACE lg_self_check
PROPERTY
{
WORD dType;
UINT day;
UINT month;
UINT year;
ULONG min;
ULONG max;
}
}
+3
View File
@@ -0,0 +1,3 @@
Dat
1000
Binary file not shown.
+39
View File
@@ -0,0 +1,39 @@
#system epoc img
#set epocinit=iplib
#model small jpi
#set version=0x118F
#set priority=0x80
#set heapsize=0x48
#compile %main.cat
#if %remake #or (%main.rg #older %main.re) #or (%main.rg #older %main.g) #then
#run "re %main" no_window no_abort
#endif
#if (%main.rsg #older %main.rss) #or (%main.rsg #older %main.rg) #then
#file delete %main.rsg
#run "rs %main" no_window no_abort
#run "rch %main" no_window no_abort
#endif
#compile datwserv.c
#compile datwin.c
#compile datcom.c
#compile date.c
#compile datdial.c
#if %main.shd #older %main.ms #then
#run "makeshd %main" no_window no_abort
#file delete %main.img
#endif
#if (%main.img #older %main.afl) #or (%main.img #older %main.pic) #then
#file delete %main.img
#endif
#pragma link(olib.lib)
#pragma link(hwim.lib)
#link %main
+6
View File
@@ -0,0 +1,6 @@
#include <dat.g>
_C_DATE
_O_COM_EXIT
_O_COM_DATE
_C_DATCOM
+69
View File
@@ -0,0 +1,69 @@
/*
Resource file for timer demonstration program
*/
#include <hwim.rg>
#include <hwim.rh>
#include <dat.rg>
#include <dat.rsg>
RESOURCE WSERV_INFO tim_accs
{
menbar_id=tim_menu;
first_com=O_COM_EXIT;
/* follows order in cat file command manager */
accel={'x', /* Exit */
's' /* Set current date */
};
}
RESOURCE MENU_BAR tim_menu
{
items =
{
MENU_BAR_ITEM
{
menu_id=options_menu;
mb_item="Options";
}
};
}
RESOURCE MENU options_menu
{
items =
{
MENU_ITEM
{
com_id=O_COM_DATE;
mn_item="Current date";
},
MENU_ITEM
{
com_id=O_COM_EXIT;
mn_item="Exit";
}
};
}
RESOURCE STRING month_day_reset
{
str="Day exceeds days in month: reset";
}
RESOURCE DIALOG date_dl_res
{
title="Current date";
flags=DLGBOX_NOTIFY_ENTER;
controls=
{
CONTROL
{
class=C_DATE;
flags=DLGBOX_ITEM_CENTRE|DLGBOX_ITEM_APPL_CAT;
}
};
}
+27
View File
@@ -0,0 +1,27 @@
/*
kalcom.c
*/
#include <hwim.h>
#include <dat.g>
#include <dat.rsg>
GLREF_D PR_WSERV * const w_ws;
LOCAL_C INT LaunchDial(VOID *buf,INT id,INT class)
{
DL_DATA dl_data;
dl_data.id=id;
dl_data.rbuf=buf;
dl_data.pdlg=NULL;
return(p_send5(w_ws,O_WS_DO_DIAL,p_getlibh(CAT_DAT_DAT),class,&dl_data));
}
#pragma METHOD_CALL
METHOD VOID datcom_com_date(PR_DATCOM *self)
{
LaunchDial(NULL,DATE_DL_RES,C_DATEDLG);
}
+31
View File
@@ -0,0 +1,31 @@
#include <dat.g>
#include <dat.rg>
#include <date.h>
GLREF_D PR_DATWSERV * const w_ws;
#pragma METHOD_CALL
METHOD VOID *datedlg_dl_item_new(PR_DATEDLG *self,AD_DLGBOX *par)
{
return(f_new(CAT_DAT_DAT,par->class));
}
METHOD VOID datedlg_dl_dyn_init(PR_DATEDLG *self)
{
P_DAYSEC ds;
p_send4(((PR_DATWIN *)w_ws->wserv.cli)->datwin.time,O_TO_SENSE,SENSE_TIME_DAYSEC,&ds);
p_send4(self,O_WN_SET,1,&ds.day);
}
METHOD INT datedlg_dl_key(PR_DATEDLG *self,INT index,INT keycode)
{
P_DAYSEC ds;
p_send4(self,O_WN_SENSE,1,&ds.day);
ds.sec=0;
f_leave(p_send4(((PR_DATWIN *)w_ws->wserv.cli)->datwin.time,O_TO_SET,SET_TIME_DAYSEC,&ds));
return(WN_KEY_CHANGED);
}
+121
View File
@@ -0,0 +1,121 @@
#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);
}
+18
View File
@@ -0,0 +1,18 @@
typedef struct
{
WORD flags;
ULONG value;
ULONG min;
ULONG max;
} SE_DATE;
typedef struct
{
ULONG value;
ULONG min;
ULONG max;
} IN_DATE;
#define SE_DATE_VALUE 0x01
#define SE_DATE_MIN 0x02
#define SE_DATE_MAX 0x04
+51
View File
@@ -0,0 +1,51 @@
/* Written by Leif November 1993 */
#include <p_std.h>
#include <p_date.h>
#include <epoc.h>
#include <hwim.h>
#include <time.g>
#include <dat.g>
#include <dat.rsg>
GLREF_D PR_WSERV * const w_ws;
GLREF_D PR_APPMAN * const w_am;
#pragma METHOD_CALL
METHOD VOID datwin_wn_draw(PR_DATWIN *self)
{
TEXT buf[LN_TIME_DATE_STR];
G_FONT_INFO fontinfo;
W_WINDATA windata;
P_RECT r;
p_supersend2(self,O_WN_DRAW);
wInquireWindow(self->win.id,&windata);
gFontInfo(WS_FONT_SYSTEM,0,&fontinfo);
r.tl.x=2;
r.br.x=windata.extent.width-2;
r.tl.y=(windata.extent.height-fontinfo.height)>>1;
r.br.y=r.tl.y+fontinfo.height;
f_leave(p_send4(self->datwin.time,O_TO_SENSE,SENSE_TIME_DATESTR,&buf[0]));
gPrintBoxText(&r,fontinfo.ascent,G_TEXT_ALIGN_CENTRE,0,&buf[0],p_slen(&buf[0]));
}
METHOD VOID datwin_wn_dodraw(PR_DATWIN *self)
{
gCreateTempGC0(self->win.id);
datwin_wn_draw(self);
gFreeTempGC();
wFlush();
}
METHOD VOID datwin_wn_init(PR_DATWIN *self,PR_WIN *par,UINT fields,W_WINDATA *pwd)
{
p_supersend5(self,O_WN_CONNECT,par,fields,pwd);
p_send3(self,O_WN_VISIBLE,WV_INITVIS);
p_send3(self,O_WN_EMPHASISE,TRUE);
self->datwin.time=f_newsend(CAT_DAT_OLIB,C_TIME,O_TO_SET_FORMAT,NULL,NULL);
p_send4(self->datwin.time,O_TO_SET,SET_TIME_NOW,NULL);
datwin_wn_dodraw(self);
}
+38
View File
@@ -0,0 +1,38 @@
#include <hwim.g>
#include <hwim.h>
#include <dat.g>
#include <dat.rsg>
GLREF_D WSERV_SPEC *wserv_channel;
GLDEF_C VOID main(VOID)
{
IN_HWIMMAN app;
IN_WSERV ws;
p_linklib(0);
app.flags=FLG_APPMAN_FULLSCREEN|FLG_APPMAN_RSCFILE|FLG_APPMAN_CLEAN|
FLG_APPMAN_SRSCFILE;
app.wserv_cat=ws.com_cat=p_getlibh(CAT_DAT_DAT);
app.wserv_class=C_DATWSERV;
ws.com_class=C_DATCOM;
p_send4(p_new(CAT_DAT_HWIM,C_HWIMMAN),O_AM_INIT,&app,&ws);
}
#pragma METHOD_CALL
METHOD VOID datwserv_ws_dyn_init(PR_DATWSERV *self)
{
W_WINDATA wd;
wd.extent.tl.y=0;
wd.extent.tl.x=0;
wd.extent.width=wserv_channel->conn.info.pixels.x;
wd.extent.height=wserv_channel->conn.info.pixels.y;
wd.background=W_WIN_BACK_CLR|W_WIN_BACK_GREY_CLR;
self->wserv.cli=f_newsend(CAT_DAT_DAT,C_DATWIN,O_WN_INIT,NULL,W_WIN_EXTENT|W_WIN_BACKGROUND,&wd);
}
+3
View File
@@ -0,0 +1,3 @@
gaugedem.pic
gaugedem.rzc
gaugedem.shd
+43
View File
@@ -0,0 +1,43 @@
IMAGE gaugedem
EXTERNAL olib
EXTERNAL hwim
INCLUDE hwimman.g
INCLUDE timer.g
CLASS gaugewsv wserv
{
REPLACE ws_dyn_init
}
CLASS gaugewin bwin
main window
{
REPLACE wn_init
REPLACE wn_draw
}
CLASS gaugecom comman
command manager
{
ADD com_run
}
CLASS gaugetim timer
{
REPLACE ao_init
REPLACE ao_queue
REPLACE ao_run
PROPERTY
{
ULONG count;
ULONG total;
}
}
CLASS gaugedlg dlgbox
{
REPLACE dl_dyn_init
}
+3
View File
@@ -0,0 +1,3 @@
Gauge
1000
Binary file not shown.
+41
View File
@@ -0,0 +1,41 @@
#system epoc img
#set epocinit=iplib
#model small jpi
#abort on
#set version=0x100F
#set priority=0x80
#set heapsize=0x80
#compile %main.cat
#if %remake #or (%main.rg #older %main.re) #or (%main.rg #older %main.g) #then
#run "re %main" no_window no_abort
#endif
#if (%main.rsg #older %main.rss) #or (%main.rsg #older %main.rg) #then
#file delete %main.rsg
#run "rs %main" no_window no_abort
#endif
#if %main.rzc #older %main.rsg #then
#run "rch %main" no_window no_abort
#endif
#compile o_gauge.c
#if %main.shd #older %main.ms #then
#run "makeshd %main" no_window no_abort
#file delete %main.img
#endif
#if (%main.img #older %main.afl) #or (%main.img #older %main.pic) #then
#file delete %main.img
#endif
#pragma link(olib.lib)
#pragma link(hwim.lib)
#link %main
+5
View File
@@ -0,0 +1,5 @@
#include <hwimman.g>
#include <gaugedem.g>
_O_COM_RUN
_O_COM_EXIT
+106
View File
@@ -0,0 +1,106 @@
/*
GAUGEDEM.RSS
English resource file for GAUGEDEM demonstration app
*/
#include <hwim.rh>
#include <hwim.rg>
#include <gaugedem.rg>
RESOURCE WSERV_INFO hello_accs
{
menbar_id=gauge3_menbar;
first_com=O_COM_EXIT;
accel={'x', /* Exit */
'r' /* Run */
};
}
RESOURCE MENU_BAR gauge3_menbar
{
items=
{
MENU_BAR_ITEM
{
menu_id=gauge_menu;
mb_item="Gauge";
},
MENU_BAR_ITEM
{
menu_id=special_menu;
mb_item="Special";
}
};
}
RESOURCE MENU gauge_menu
{
items =
{
MENU_ITEM
{
com_id=O_COM_RUN;
mn_item="Run";
}
};
}
RESOURCE MENU special_menu
{
items =
{
MENU_ITEM
{
com_id=O_COM_EXIT;
mn_item="Exit";
}
};
}
RESOURCE STRING title_res {str="Welcome to GAUGEDEM";}
RESOURCE ACLIST_ARRAY escape_ac
{
button=
{
PUSH_BUT
{
keycode=W_KEY_ESCAPE;
str="Cancel";
}
};
}
RESOURCE DIALOG gauge_dl_res
{
flags=DLGBOX_NOTIFY_ENTER|DLGBOX_RBUF_FILLED;
controls=
{
CONTROL
{
class=C_TEXTWIN;
flags=DLGBOX_ITEM_CENTRE|DLGBOX_ITEM_DEAD;
info=TXTMESS
{
flags=IN_TEXTWIN_AL_CENTRE;
str="Loading data";
};
},
CONTROL
{
class=C_DONEWN;
},
CONTROL
{
class=C_ACLIST;
info=ACLIST
{
rid=escape_ac;
};
}
};
}
+140
View File
@@ -0,0 +1,140 @@
/*
O_GAUGE: demonstrates a gauge used to monitor the progress
of a lengthy operation simulated using a timer.
*/
#include <hwimman.g>
#include <p_file.h>
#include <timer.g>
#include <donewn.g>
#include <ncedit.g>
#include <gaugedem.g>
#include <gaugedem.rsg>
GLREF_D WSERV_SPEC *wserv_channel;
GLREF_D PR_HWIMMAN *w_am;
GLREF_D PR_WSERV *w_ws;
GLDEF_C VOID main(VOID)
{
IN_HWIMMAN app;
IN_WSERV ws;
p_linklib(0);
app.flags=FLG_APPMAN_FULLSCREEN|FLG_APPMAN_RSCFILE|FLG_APPMAN_CLEAN|
FLG_APPMAN_SRSCFILE;
app.wserv_cat=p_getlibh(CAT_GAUGEDEM_GAUGEDEM);
ws.com_cat=p_getlibh(CAT_GAUGEDEM_GAUGEDEM);
app.wserv_class=C_GAUGEWSV;
ws.com_class=C_GAUGECOM;
p_send4(p_new(CAT_GAUGEDEM_HWIM,C_HWIMMAN),O_AM_INIT,&app,&ws);
}
LOCAL_C INT LaunchDial(VOID *buf,INT id,INT class)
{
DL_DATA dl_data;
dl_data.id=id;
dl_data.rbuf=buf;
dl_data.pdlg=NULL;
return(p_send5(w_ws,O_WS_DO_DIAL,p_getlibh(CAT_GAUGEDEM_GAUGEDEM),class,&dl_data));
}
#pragma METHOD_CALL
METHOD VOID gaugewsv_ws_dyn_init(PR_GAUGEWSV *self)
{
self->wserv.cli=f_new(CAT_GAUGEDEM_GAUGEDEM,C_GAUGEWIN);
p_send2(self->wserv.cli,O_WN_INIT);
}
METHOD VOID gaugewin_wn_init(PR_GAUGEWIN *self)
{
W_WINDATA wd;
wd.extent.tl.x=0;
wd.extent.tl.y=0;
wd.extent.width=wserv_channel->conn.info.pixels.x;
wd.extent.height=wserv_channel->conn.info.pixels.y;
p_send5(self,O_WN_CONNECT,NULL,W_WIN_EXTENT,&wd);
p_send3(self,O_WN_VISIBLE,WV_INITVIS);
p_send3(self,O_WN_EMPHASISE,TRUE);
}
METHOD VOID gaugewin_wn_draw(PR_GAUGEWIN *self)
{
G_FONT_INFO fontinfo;
W_WINDATA windata;
TEXT buf[40];
P_RECT r;
INT w,len;
p_supersend2(self,O_WN_DRAW);
len=p_send(w_am,O_AM_LOAD_RES_BUF,TITLE_RES,&buf[0]);
w=gTextWidth(WS_FONT_SYSTEM,0,&buf[0],--len);
wInquireWindow(self->win.id,&windata);
r.tl.x=(windata.extent.width-w)/2;
r.br.x=r.tl.x+w;
gFontInfo(WS_FONT_SYSTEM,0,&fontinfo);
r.tl.y=(windata.extent.height-fontinfo.height)/2;
r.br.y=r.tl.y+fontinfo.height;
gPrintBoxText(&r,fontinfo.ascent,G_TEXT_ALIGN_CENTRE,0,&buf[0],len);
}
METHOD VOID gaugecom_com_run(PR_GAUGECOM *self)
{
ULONG duration;
duration=100;
f_newsend(CAT_GAUGEDEM_GAUGEDEM,C_GAUGETIM,O_AO_INIT,&duration);
LaunchDial(&duration,GAUGE_DL_RES,C_GAUGEDLG);
}
METHOD VOID gaugedlg_dl_dyn_init(PR_GAUGEDLG *self)
{
SE_DONEWN se_donewn;
se_donewn.val=0L;
se_donewn.range=*(ULONG *)self->dlgbox.rbuf;
se_donewn.flags=SE_DONEWN_RANGE|SE_DONEWN_VALUE;
p_send4(self,O_WN_SET,1,&se_donewn);
}
METHOD VOID gaugetim_ao_queue(PR_GAUGETIM *self,UINT lsw,UINT msw)
{
self->active.stat=E_FILE_PENDING;
self->active.isactive=TRUE;
p_supersend4(self,O_AO_QUEUE,lsw,msw);
}
METHOD VOID gaugetim_ao_init(PR_GAUGETIM *self,ULONG *ptotal)
{
p_send3(w_am,O_AM_ADD_TASK,self);
self->active.priority=PRIORITY_ACTIVE_WSERV-1;
self->gaugetim.count=0L;
self->gaugetim.total=*ptotal;
p_supersend2(self,O_AO_INIT);
p_send4(self,O_AO_QUEUE,1,0);
}
METHOD INT gaugetim_ao_run(PR_GAUGETIM *self)
{
SE_DONEWN se_donewn;
self->gaugetim.count++;
if (w_ws->wserv.dial)
{
se_donewn.flags=SE_DONEWN_INCREMENT;
p_send4(w_ws->wserv.dial,O_WN_SET,1,&se_donewn);
if (self->gaugetim.count<self->gaugetim.total)
{
p_send4(self,O_AO_QUEUE,1,0);
return(RUN_ACTIVE_USED);
}
else
p_send2(w_ws->wserv.dial,O_DESTROY);
}
p_send2(self,O_DESTROY);
return(RUN_ACTIVE_USED);
}