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
+139
View File
@@ -0,0 +1,139 @@
/* DECOMMAN.C */
#include <demo.g>
#include <demo.rsg>
#include <printer.g>
#include <hwim.h>
GLREF_D PR_WSERV *w_ws;
GLREF_D PR_DECOMMAN *DatApp2;
#define SAVED_FILE_NAME "LOC::M:\\WDRPRINT.CFG"
LOCAL_C VOID TryLoadPrintContext(VOID)
{
P_INFO junk;
VOID *fcb;
VOID *printer;
UBYTE buf[512];
INT blen;
INT ind;
UBYTE *p1,*p2,*p3,*p4;
if (p_finfo(SAVED_FILE_NAME,&junk))
return; /* eg file does not exist */
f_open(&fcb,SAVED_FILE_NAME,P_FOPEN|P_FSTREAM|P_FSHARE);
blen=f_read(fcb,&buf[0],512);
p_close(fcb);
if (blen<=sizeof(PRINTER_PARAMS)+2)
goto file_corrupt;
p1=(&buf[0]);
blen-=sizeof(PRINTER_PARAMS);
p2=p1+sizeof(PRINTER_PARAMS);
ind=p_bloc(p2+1,blen-1,0);
if (ind<0)
goto file_corrupt;
p3=p2+1+ind+1;
blen-=1+ind+1;
if (blen<=0)
goto file_corrupt;
ind=p_bloc(p3,blen,0);
if (ind<0)
goto file_corrupt;
p4=p3+ind+1;
blen-=ind+1;
if (blen<=0)
goto file_corrupt;
ind=p_bloc(p4,blen,0);
if (ind!=blen-1)
{
file_corrupt:
hInfoPrint(DELETING_CORRUPT_FILE);
p_delete(SAVED_FILE_NAME);
return;
}
p_send2(w_ws,O_WS_ENS_PRINT_CONTEXT);
printer=w_ws->wserv.printer;
p_bcpy((VOID *)p_send2(printer,O_PR_GET_PARAMS),p1,sizeof(PRINTER_PARAMS));
p_send5(printer,O_PR_SET_MODEL,FALSE,p2+1,*p2);
p_send4(printer,O_PR_SET_HD,PRINTER_HDR_TOP,p3);
p_send4(printer,O_PR_SET_HD,PRINTER_HDR_BOT,p4);
}
#pragma save,ENTER_CALL
LOCAL_C INT SavePrintContext(VOID)
{
VOID *fcb;
VOID *printer;
TEXT *p;
struct
{
UBYTE model;
TEXT name[P_FNAMESIZE+1];
} m;
printer=w_ws->wserv.printer;
if (!printer)
return(0);
f_open(&fcb,SAVED_FILE_NAME,P_FREPLACE|P_FSTREAM|P_FUPDATE);
p=(TEXT *)p_send2(printer,O_PR_GET_PARAMS);
f_write(fcb,p,sizeof(PRINTER_PARAMS));
m.model=p_send3(printer,O_PR_SENSE_MODEL,&m.name[0]);
f_write(fcb,&m.model,1+p_slen(&m.name[0])+1);
p=(TEXT *)p_send3(printer,O_PR_GET_HD,PRINTER_HDR_TOP);
f_write(fcb,p,p_slen(p)+1);
p=(TEXT *)p_send3(printer,O_PR_GET_HD,PRINTER_HDR_BOT);
f_write(fcb,p,p_slen(p)+1);
p_close(fcb);
return(0);
}
#pragma restore
LOCAL_C INT LaunchDialog(INT class,INT resid,VOID *rbuf)
{
DL_DATA dld;
dld.id=resid;
dld.rbuf=rbuf;
dld.pdlg=NULL;
return hLaunchDial(CAT_DEMO_DEMO,class,&dld);
}
LOCAL_C VOID PrintOrPreview(INT commid)
{
commid=(commid==O_DEC_PREVIEW? O_DEC_PRINT_DIRECT: 0);
hDestroy(f_newsend(CAT_DEMO_DEMO,C_DELP,O_LPR_INIT,commid));
}
#pragma METHOD_CALL
METHOD VOID decomman_com_init(PR_DECOMMAN *self)
{
DatApp2=self;
TryLoadPrintContext();
}
METHOD VOID decomman_com_exit(PR_DECOMMAN *self)
{
if (p_enter1(SavePrintContext))
p_delete(SAVED_FILE_NAME);
p_exit(0);
}
METHOD VOID decomman_dec_psetup(VOID)
{
p_send2(w_ws,O_WS_EDIT_PRINT_CONTEXT);
}
METHOD VOID decomman_dec_preview(PR_DECOMMAN *self,INT commid)
{
if (LaunchDialog(C_DEDLG,DELP_DLG,&commid))
PrintOrPreview(commid);
}
METHOD VOID decomman_dec_print_direct(VOID)
{
PrintOrPreview(O_DEC_PRINT);
}
+31
View File
@@ -0,0 +1,31 @@
/* DEDLG.C */
#include <demo.g>
#include <demo.rsg>
#include <hwim.h>
GLREF_D PR_DECOMMAN *DatApp2;
#pragma METHOD_CALL
METHOD VOID dedlg_dl_dyn_init(PR_DLGBOX *self)
{
INT commid;
commid=(*(INT *)self->dlgbox.rbuf);
if (commid==O_DEC_PREVIEW)
hDlgSetTitleByRid(DELP_PREVIEW_TITLE);
if (!DatApp2->decomman.dets.dayno)
return;
hDlgSetDtedit(1,DatApp2->decomman.dets.dayno);
hDlgSetNcedit(2,DatApp2->decomman.dets.ndays);
hDlgSetChlist(3,DatApp2->decomman.dets.gap);
}
METHOD INT dedlg_dl_key(PR_DLGBOX *self)
{
DatApp2->decomman.dets.dayno=hDlgSenseDtedit(1);
DatApp2->decomman.dets.ndays=hDlgSenseNcedit(2);
DatApp2->decomman.dets.gap=hDlgSenseChlist(3);
return(WN_KEY_CHANGED);
}
+111
View File
@@ -0,0 +1,111 @@
/* DELP.C */
#include <demo.g>
#include <demo.rsg>
#include <hwim.h>
GLREF_D PR_DECOMMAN *DatApp2;
#define TIME_FMT_FLAGS (PR_TIME_MONTH_NAME|PR_TIME_SUFFIX_NAME)
LOCAL_C VOID InitTimeObject(PR_DELP *self)
{
P_DAYSEC ds;
SE_TIME_FORMAT fmt;
ds.day=DatApp2->decomman.dets.dayno;
ds.sec=0;
self->delp.time=f_new(CAT_DEMO_OLIB,C_TIME);
p_send4(self->delp.time,O_TO_SET,SET_TIME_DAYSEC,&ds);
fmt.flags=TIME_FMT_FLAGS;
p_send4(self->delp.time,O_TO_SET_FORMAT,&fmt,TIME_FMT_FLAGS);
}
LOCAL_C UINT SenseBufWidth(PR_DELP *self,TEXT *pb)
{
return(p_send5(self->lprinter.wdr,O_WDR_SENSE_WIDTH,
self->delp.wtab,pb,p_slen(pb)));
}
LOCAL_C VOID FindWidthFirstColumn(PR_DELP *self)
{
INT i;
TEXT buf[E_MAX_DAY_NAME];
UWORD wid;
for (i=0; i<7; i++)
{
p_nmday(&buf[0],i);
wid=SenseBufWidth(self,&buf[0]);
if (wid>self->delp.colwid)
self->delp.colwid=wid;
}
self->delp.colwid+=SenseBufWidth(self," "); /* two spaces */
if (self->delp.colwid>(3*self->lprinter.width/4))
{
hInfoPrint(DELP_PAPER_NARROW);
p_leave(RUN_ACTIVE_CLEANUP_NONOTIFY);
}
self->lprinter.subsqind=self->delp.colwid;
}
LOCAL_C VOID InitWidthTable(PR_DELP *self)
{
self->delp.wtab=(VOID *)p_send5(self->lprinter.wdr,O_WDR_GET_WIDTH_TABLE,
self->lprinter.f.fid,self->lprinter.f.height,
self->lprinter.f.style|WDR_STYLE_BOLD);
}
#pragma METHOD_CALL
METHOD INT delp_lpr_sense_text(PR_DELP *self,WDR_PRINT *pr)
{
P_DATE dt;
P_DAYSEC ds;
if (!self->delp.time)
{
self->delp.ndays=DatApp2->decomman.dets.ndays;
InitTimeObject(self);
InitWidthTable(self);
FindWidthFirstColumn(self);
}
else if (!self->delp.ndays)
return(FALSE);
switch (self->delp.state++)
{
case DELP_STATE_COL1:
if (DatApp2->decomman.dets.gap)
{
p_send4(self->delp.time,O_TO_SENSE,SENSE_TIME_DATE,&dt);
if (!dt.day)
{
pr->down=pr->height;
if (DatApp2->decomman.dets.gap==1)
pr->down>>=1;
}
}
p_send4(self->delp.time,O_TO_SENSE,SENSE_TIME_DAYSEC,&ds);
p_nmday(&self->delp.dname[0],P_WEEK(ds.day));
self->delp.right=self->delp.colwid
-SenseBufWidth(self,&self->delp.dname[0]);
pr->buf=(&self->delp.dname[0]);
pr->style|=WDR_STYLE_BOLD;
break;
case DELP_STATE_COL2:
pr->flags&=(~(WDR_PRINT_LINE|WDR_PRINT_TEXT));
pr->flags|=WDR_PRINT_RIGHT;
pr->right=self->delp.right;
return(TRUE);
case DELP_STATE_COL3:
p_send4(self->delp.time,O_TO_SENSE,SENSE_TIME_DATESTR,&self->delp.buf[0]);
pr->buf=(&self->delp.buf[0]);
pr->flags&=(~WDR_PRINT_LINE);
pr->indent=self->delp.colwid;
self->delp.ndays--;
p_send4(self->delp.time,O_TO_ADD_DAYS,1,0);
self->delp.state=DELP_STATE_COL1;
}
pr->blen=p_slen(pr->buf);
return(TRUE);
}
+17
View File
@@ -0,0 +1,17 @@
/* DEMAIN.C */
#include <demo.g>
GLDEF_C VOID main(VOID)
{
IN_HWIMMAN app;
IN_WSERV wserv;
p_linklib(0);
app.flags=FLG_APPMAN_RSCFILE|FLG_APPMAN_SRSCFILE|
FLG_APPMAN_CLEAN|FLG_APPMAN_FULLSCREEN;
wserv.com_cat=app.wserv_cat=p_getlibh(CAT_DEMO_DEMO);
app.wserv_class=C_DEWSERV;
wserv.com_class=C_DECOMMAN;
p_send4(p_new(CAT_DEMO_HWIM,C_HWIMMAN),O_AM_INIT,&app,&wserv);
}
+67
View File
@@ -0,0 +1,67 @@
IMAGE demo
EXTERNAL olib
EXTERNAL hwim
EXTERNAL xadd
INCLUDE hwimman.g
INCLUDE dlgbox.g
INCLUDE xprinter.g
INCLUDE time.g
INCLUDE epoc.h
CLASS dewserv wserv
{
REPLACE ws_dyn_init
}
CLASS decomman comman
{
REPLACE com_init
REPLACE com_exit
ADD dec_psetup
ADD dec_preview
ADD dec_print=decomman_dec_preview
ADD dec_print_direct
TYPES
{
typedef struct
{
UWORD dayno;
UWORD ndays;
UWORD gap;
} DE_PRINT_DETAILS;
}
PROPERTY
{
DE_PRINT_DETAILS dets;
}
}
CLASS dedlg dlgbox
{
REPLACE dl_dyn_init
REPLACE dl_key
}
CLASS delp xprinter
{
REPLACE lpr_sense_text
CONSTANTS
{
DELP_STATE_COL1 0
DELP_STATE_COL2 1
DELP_STATE_COL3 2
}
PROPERTY 1
{
VOID *time;
VOID *wtab;
UWORD colwid;
UWORD right;
UWORD state;
UWORD ndays;
TEXT dname[E_MAX_DAY_NAME];
TEXT buf[LN_TIME_DATE_STR];
}
}
Binary file not shown.
+6
View File
@@ -0,0 +1,6 @@
#include <demo.g>
_O_COM_EXIT
_O_DEC_PSETUP
_O_DEC_PREVIEW
_O_DEC_PRINT
+98
View File
@@ -0,0 +1,98 @@
/* DEMO.RSS */
#include <hwim.rh>
#include <hwim.rg>
#include <demo.rg>
RESOURCE WSERV_INFO demo_accs
{
menbar_id=demo_menubar;
first_com=O_COM_EXIT;
accel={'x',
'y','*','p'};
}
RESOURCE MENU_BAR demo_menubar
{
items =
{
MENU_BAR_ITEM
{
menu_id=special_menu;
mb_item="Demo";
}
};
}
RESOURCE MENU special_menu
{
items =
{
MENU_ITEM
{
com_id=O_DEC_PSETUP;
mn_item="Print setup";
},
MENU_ITEM
{
com_id=O_DEC_PREVIEW;
mn_item="Preview";
},
MENU_ITEM
{
com_id=O_DEC_PRINT|BREAK_LINE_FOLLOWS;
mn_item="Print";
},
MENU_ITEM
{
com_id=O_COM_EXIT;
mn_item="Exit";
}
};
}
RESOURCE MENU delp_gap_chlist
{
items =
{
CHOICE_ITEM { str="No gap";},
CHOICE_ITEM { str="Half a line";},
CHOICE_ITEM { str="Complete line";}
};
}
RESOURCE DIALOG delp_dlg
{
title="Print list of days";
flags=DLGBOX_NOTIFY_ENTER|DLGBOX_RBUF_FILLED;
controls=
{
CONTROL
{
class=C_DTEDIT;
prompt="Start date";
info=DTEDIT { flags=IN_DTEDIT_DDMMYYYY;};
},
CONTROL
{
class=C_NCEDIT;
prompt="Number of days to print";
info=NCEDIT
{
low=10;
current=20;
high=200;
};
},
CONTROL
{
class=C_CHLIST;
prompt="Space between months";
info=CHLIST { rid=delp_gap_chlist; };
}
};
}
RESOURCE STRING delp_paper_narrow { str="Paper size too narrow"; }
RESOURCE STRING delp_preview_title { str="Preview list of days"; }
RESOURCE STRING deleting_corrupt_file { str="Deleting corrupt file"; }
+38
View File
@@ -0,0 +1,38 @@
/* DEWSERV.C */
#include <demo.g>
#include <hwim.h>
GLREF_D WSERV_SPEC *wserv_channel;
LOCAL_C INT StatusWindowWidth(VOID)
{
P_EXTENT ext;
wInquireStatusWindow(-1,&ext);
return(ext.width);
}
LOCAL_C VOID InitClientWindow(PR_DEWSERV *self)
{
W_WINDATA wd;
PR_WIN *cliwin;
wd.extent.tl.x=wd.extent.tl.y=0;
wd.extent.height=wserv_channel->conn.info.pixels.y;
wd.extent.width=wserv_channel->conn.info.pixels.x-StatusWindowWidth();
cliwin=f_newsend(CAT_DEMO_HWIM,C_BWIN,O_WN_CONNECT,NULL,W_WIN_EXTENT,&wd);
self->wserv.cli=cliwin;
cliwin->win.flags=PR_BWIN_CORNER_4|PR_BWIN_SHADOW_1;
p_send3(cliwin,O_WN_EMPHASISE,TRUE);
hInitVis(cliwin);
}
#pragma METHOD_CALL
METHOD VOID dewserv_ws_dyn_init(PR_DEWSERV *self)
{
wsSetList(W_STATUS_WINDOW_ICON,NULL,0);
wStatusWindow(W_STATUS_WINDOW_BIG);
InitClientWindow(self);
}
+3
View File
@@ -0,0 +1,3 @@
@echo off
tscx /m wdrprint
tscx /m wdrprint
+2
View File
@@ -0,0 +1,2 @@
demo.pic
demo.rzc
+34
View File
@@ -0,0 +1,34 @@
#system epoc img
#set epocinit=iplib
#model small jpi
#compile demo.cat
#if %remake #or (demo.rg #older demo.re) #or (demo.rg #older demo.g) #then
#run "re demo" no_window no_abort
#endif
#if (demo.rsg #older demo.rss) #or (demo.rsg #older demo.rg) #then
#file delete demo.rsg
#run "rs demo" no_window no_abort
#endif
#if demo.rzc #older demo.rsg #then
#run "rch demo" no_window no_abort
#file delete wdrprint.img
#endif
#compile decomman.c
#compile delp.c
#compile dedlg.c
#compile demain.c
#compile dewserv.c
#if (wdrprint.img #older wdrprint.afl) #or (wdrprint.img #older demo.pic) #then
#file delete wdrprint.img
#endif
#pragma link(olib.lib)
#pragma link(hwim.lib)
#link wdrprint.img
+16
View File
@@ -0,0 +1,16 @@
wdrprrel.prj ! releases source files
wdrprint.pr ! TS project file
make.bat ! makes WDRPRINT.IMG
!
demo.cat ! category file
demo.re ! resource externals
demo.rss ! resource script
!
decomman.c ! command manager
delp.c ! line printer subclass
dedlg.c ! dialog
demain.c ! main
dewserv.c ! window server subclass
!
wdrprint.afl ! add file list
demo.pic ! icon