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
+631
View File
@@ -0,0 +1,631 @@
/* NOCOMMAN.C */
#include <notes.g>
#include <notes.rsg>
#include <hwim.h>
#include <scrimg.g>
#include <s_.rsg>
#include "nolayout.h"
#include "notes.def"
GLREF_D PR_HWIMMAN *w_am;
GLREF_D PR_WSERV *w_ws;
GLREF_D WSERV_SPEC *wserv_channel;
GLREF_D PR_VAFLAT *DatApp1;
GLREF_D PR_NOCOMMAN *DatApp2;
GLREF_D PR_EDWIN *DatApp3;
GLREF_D NOTE *DatApp4;
GLDEF_D LAYOUT_DATA ld;
LOCAL_C VOID RotateStatusWindow(VOID)
{
P_EXTENT ext;
if (ld.Version4)
{
if (!ld.StatusWindow--)
ld.StatusWindow=W_STATUS_WINDOW_BIG;
wStatusWindow(ld.StatusWindow);
wInquireStatusWindow(-1,&ext);
ld.StatusWindowWidth=ext.width;
}
else
{
if (ld.StatusWindow^=TRUE)
{
wsEnable();
ld.StatusWindowWidth=WS_WIDTH;
}
else
{
wsDisable();
ld.StatusWindowWidth=0;
}
}
}
LOCAL_C VOID InitStatusWindow(VOID)
{
if (ld.Version4)
wsSetList(W_STATUS_WINDOW_ICON,NULL,0);
RotateStatusWindow();
}
LOCAL_C VOID GetFontHeightData(VOID)
{
G_FONT_INFO font;
gFontInfo(WS_FONT_SYSTEM,0,&font);
ld.FontHeight=font.height;
ld.FontAscent=font.ascent;
}
LOCAL_C VOID CreateTextWindows(PR_NOCOMMAN *self)
{
self->nocomman.tagwin=f_new(CAT_NOTES_NOTES,C_NOTAGWIN);
self->nocomman.cntwin=f_new(CAT_NOTES_NOTES,C_NOCNTWIN);
}
LOCAL_C VOID InitTextWindow(VOID *win,INT x,INT y,INT width)
{
W_WINDATA wd;
wd.background=W_WIN_BACK_NONE;
wd.extent.tl.x=x;
wd.extent.tl.y=y+EDGE_TLY;
wd.extent.width=width;
wd.extent.height=ld.FontHeight+2;
p_send5(win,O_WN_CONNECT,NULL,W_WIN_BACKGROUND|W_WIN_EXTENT,&wd);
hInitVis(win);
}
LOCAL_C VOID MoveWindowLeft(INT wid,INT change)
{
W_WINDATA wd;
wInquireWindow(wid,&wd);
wd.extent.tl.x+=change;
wSetWindow(wid,W_WIN_EXTENT,&wd);
}
LOCAL_C UINT CalculateYValues(UWORD *py1,UWORD *py2)
{
UWORD NumLines;
UWORD LineHeight;
UWORD spare;
LineHeight=ld.FontHeight+2;
NumLines=(ld.ScreenHeight-REQD_EDGE_PIXELS)/LineHeight;
spare=ld.ScreenHeight-REQD_EDGE_PIXELS-LineHeight*NumLines;
spare>>=1; /* excess goes to second "spare" region */
*py1=EDGE_HEIGHT+LineHeight+BASIC_GAP_BETWEEN_WINDOWS+spare;
*py2=ld.ScreenHeight-(EDGE_HEIGHT+LineHeight);
return(NumLines-2);
}
LOCAL_C VOID SetupInEdwin(IN_EDWIN *pInit,INT delx,INT flags,INT maxlen)
{
pInit->vulen=ld.ScreenWidth-ld.StatusWindowWidth-delx;
pInit->flags=flags;
pInit->maxlen=maxlen;
pInit->contents[0]=0;
}
LOCAL_C PR_NOWIN *CreateNowin(INT class,IN_EDWIN *pIned,IN_EDWIN_X *pIX)
{
PR_NOWIN *nowin;
nowin=f_newsend(CAT_NOTES_NOTES,class,O_WN_INIT,pIned,pIX);
hInitVis(nowin);
return(nowin);
}
#define EDWIN_FLGS (IN_EDWIN_VULEN_PIXELS|IN_EDWIN_POSITION_SUPPLIED)
LOCAL_C VOID InitialiseWindows(PR_NOCOMMAN *self)
{
UWORD x1,x2;
UWORD y1,y2;
UWORD NumNotesLines;
IN_EDWIN ined;
IN_EDWIN_X inedx;
CreateTextWindows(self);
x1=p_send2(self->nocomman.tagwin,O_WN_SENSE);
x2=p_send2(self->nocomman.cntwin,O_WN_SENSE);
NumNotesLines=CalculateYValues(&y1,&y2);
SetupInEdwin(&ined,x1,EDWIN_FLGS|IN_EDWIN_FONT_SUPPLIED,40);
inedx.pos.x=x1;
inedx.pos.y=0;
if (ld.Version4)
{
inedx.font=WS_FONT_SYSTEM;
inedx.style=G_STY_BOLD;
}
else
{
inedx.font=WS_FONT_BASE+1;
inedx.style=G_STY_NORMAL;
}
self->nocomman.edit[0]=CreateNowin(C_NOTITWIN,&ined,&inedx);
SetupInEdwin(&ined,0,EDWIN_FLGS|IN_EDWIN_VISLINES_SUPPLIED|
IN_EDWIN_LEFT_CURSOR|IN_EDWIN_CLIPBOARD,512);
inedx.pos.x=0;
inedx.pos.y=y1;
inedx.vislines=NumNotesLines;
inedx.clip=NULL;
self->nocomman.edit[1]=CreateNowin(C_NOWIN,&ined,&inedx);
SetupInEdwin(&ined,x2,EDWIN_FLGS,20);
inedx.pos.x=0;
inedx.pos.y=y2;
self->nocomman.edit[2]=CreateNowin(C_NOFNDWIN,&ined,&inedx);
InitTextWindow(self->nocomman.tagwin,0,0,x1);
InitTextWindow(self->nocomman.cntwin,
ld.ScreenWidth-ld.StatusWindowWidth-x2,y2,x2);
}
LOCAL_C VOID InitialiseLayout(PR_NOCOMMAN *self)
{
ld.Version4=
((wserv_channel->conn.info.version_id&WS_VERSION_MASK) >= WS_VERSION_4);
InitStatusWindow();
ld.ScreenWidth=wserv_channel->conn.info.pixels.x;
ld.ScreenHeight=wserv_channel->conn.info.pixels.y;
GetFontHeightData();
InitialiseWindows(self);
DatApp3=self->nocomman.edit[NOTES_WINDOW]->nowin.edwin;
}
LOCAL_C VOID FocusTo(PR_NOCOMMAN *self,INT which)
{
if (w_ws->wserv.cli)
p_send3(w_ws->wserv.cli,O_WN_EMPHASISE,FALSE);
self->nocomman.which=which;
w_ws->wserv.cli=(PR_WIN *)self->nocomman.edit[which];
p_send3(w_ws->wserv.cli,O_WN_EMPHASISE,TRUE);
}
LOCAL_C VOID FocusToWithCheck(PR_NOCOMMAN *self,INT which)
{
if (which==self->nocomman.which)
return;
FocusTo(self,which);
}
LOCAL_C VOID RecordChange(PR_NOWIN *win,LENBUF *lb)
{
PR_EDWIN *edwin;
SE_EDWIN sense;
edwin=win->nowin.edwin;
if (!(edwin->edwin.change))
return;
p_send3(edwin,O_WN_SENSE,&sense);
lb->buf=f_realloc(lb->buf,sense.len);
lb->len=sense.len;
p_bcpy(lb->buf,sense.buf,sense.len);
edwin->edwin.change=FALSE;
}
LOCAL_C VOID RecordAnyChanges(PR_NOCOMMAN *self)
{
RecordChange(self->nocomman.edit[TITLE_WINDOW],&DatApp4->title);
RecordChange(self->nocomman.edit[NOTES_WINDOW],&DatApp4->note);
}
LOCAL_C VOID SetCurrentNote(PR_NOCOMMAN *self)
{
DatApp4=ePointToNote(self->nocomman.where);
}
LOCAL_C VOID LoadEditor(PR_NOWIN *win,LENBUF *lb)
{
PR_EDWIN *edwin;
SE_EDWIN set;
edwin=win->nowin.edwin;
set.buf=lb->buf;
set.len=lb->len;
p_send3(edwin,O_WN_SET,&set);
edwin->edwin.change=FALSE;
}
LOCAL_C VOID LoadTagStatus(PR_NOCOMMAN *self)
{
p_send3(self->nocomman.tagwin,O_WN_SET,DatApp4->tagged);
}
LOCAL_C VOID LoadWhereAndCount(PR_NOCOMMAN *self)
{
p_send4(self->nocomman.cntwin,
O_WN_SET,self->nocomman.where+1,DatApp1->varoot.nrec);
}
LOCAL_C VOID LoadWindows(PR_NOCOMMAN *self)
{
LoadEditor(self->nocomman.edit[TITLE_WINDOW],&DatApp4->title);
LoadEditor(self->nocomman.edit[NOTES_WINDOW],&DatApp4->note);
LoadWhereAndCount(self);
LoadTagStatus(self);
}
LOCAL_C VOID CheckEditing(PR_NOCOMMAN *self)
{
if (self->nocomman.which==NOTES_WINDOW)
return;
hInfoPrint(NOSTR_ONLY_IN_NOTES);
p_leave(RUN_ACTIVE_USED);
}
LOCAL_C VOID GiveTagCount(VOID)
{
hInfoPrint(NOSTR_TAG_COUNT,eCountTaggedNotes());
}
LOCAL_C INT RunDialog(INT class,INT resid,VOID *rbuf)
{
DL_DATA dd;
dd.id=resid;
dd.rbuf=rbuf;
dd.pdlg=NULL;
return(hLaunchDial(CAT_NOTES_NOTES,class,&dd));
}
LOCAL_C VOID TagCurrentNote(INT clear)
{
DatApp4->tagged=(!clear);
}
LOCAL_C VOID SetTo(PR_NOCOMMAN *self,INT where)
{
self->nocomman.where=where;
SetCurrentNote(self);
LoadWindows(self);
}
LOCAL_C VOID WinEmphasise(PR_NOCOMMAN *self,INT which,INT state)
{
p_send3(self->nocomman.edit[which]->nowin.edwin,O_WN_EMPHASISE,state);
}
LOCAL_C VOID SetCursorWidth(PR_NOCOMMAN *self,INT which,INT width)
{
PR_EDWIN *edwin;
SCRIMG_WIN win;
edwin=self->nocomman.edit[which]->nowin.edwin;
p_send3(edwin->edwin.scrimg,O_SI_SENSE,&win);
win.cwidth=width;
p_send4(edwin->edwin.scrimg,O_SI_SET,&win,NULL);
}
LOCAL_C VOID SetEdwinSelect(PR_NOCOMMAN *self,INT which,INT aoff,INT coff)
{
SET_EDWIN set;
set.flags=SET_EDWIN_CURSOR|SET_EDWIN_ANCHOR;
set.anchor=aoff;
set.cursor=coff;
p_send3(self->nocomman.edit[which]->nowin.edwin,O_EW_SET,&set);
}
LOCAL_C VOID DrawImmediately(PR_WIN *win)
{
p_send2(win,O_WN_DODRAW);
}
LOCAL_C VOID Search(PR_NOCOMMAN *self,LENBUF *lb,INT here,INT which)
{
INT ind;
if (self->nocomman.casesens)
ind=p_bsub(lb->buf,lb->len,
self->nocomman.pattern.buf,self->nocomman.pattern.len);
else
ind=p_bsubi(lb->buf,lb->len,
self->nocomman.pattern.buf,self->nocomman.pattern.len);
if (ind<0)
return;
if (here!=self->nocomman.where)
SetTo(self,here);
if (self->nocomman.pattern.len)
{
if (which!=self->nocomman.which)
{
WinEmphasise(self,self->nocomman.which,FALSE);
SetCursorWidth(self,which,0);
WinEmphasise(self,which,TRUE);
}
SetEdwinSelect(self,which,ind,ind+self->nocomman.pattern.len);
if (which!=self->nocomman.which)
{
DrawImmediately((PR_WIN *)self->nocomman.cntwin);
DrawImmediately((PR_WIN *)self->nocomman.tagwin);
wFlush();
p_sleep(5L);
WinEmphasise(self,which,FALSE);
SetCursorWidth(self,which,2);
WinEmphasise(self,self->nocomman.which,TRUE);
}
}
p_leave(RUN_ACTIVE_USED);
}
LOCAL_C VOID DoSearch(PR_NOCOMMAN *self,INT here,INT direction)
{
PR_EDWIN *edwin;
INT k;
INT count;
NOTE *pn;
RecordAnyChanges(self);
edwin=self->nocomman.edit[FIND_WINDOW]->nowin.edwin;
p_send3(edwin,O_WN_SENSE,&self->nocomman.pattern);
edwin->edwin.change=FALSE;
k=DatApp1->varoot.nrec;
count=k-1;
while (k--)
{
here+=direction;
if (here<0)
here=count;
else if (here>count)
here=0;
pn=ePointToNote(here);
if (self->nocomman.findtype!=FIND_NOTES_ONLY)
Search(self,&pn->title,here,TITLE_WINDOW);
if (self->nocomman.findtype!=FIND_TITLE_ONLY)
Search(self,&pn->note,here,NOTES_WINDOW);
}
hInfoPrint(NOSTR_NOT_FOUND);
}
LOCAL_C INT EdwinChanged(PR_NOCOMMAN *self,INT which)
{
return(self->nocomman.edit[which]->nowin.edwin->edwin.change);
}
LOCAL_C VOID CheckIfChanged(PR_NOCOMMAN *self)
{
if (EdwinChanged(self,TITLE_WINDOW))
return;
if (EdwinChanged(self,NOTES_WINDOW))
return;
hInfoPrint(NOSTR_NOT_CHANGED);
p_leave(RUN_ACTIVE_USED);
}
LOCAL_C WORD GetLinkableData(ULONG *pFmt)
{
return(p_send3(w_am->appman.system,O_SY_LINK_PASTE,pFmt));
}
#pragma METHOD_CALL
METHOD VOID nocomman_com_init(PR_NOCOMMAN *self)
{
DatApp2=self;
eInitialiseEngine();
SetCurrentNote(self);
InitialiseLayout(self);
LoadWhereAndCount(self);
FocusTo(self,TITLE_WINDOW);
InitLinkServer();
}
METHOD VOID nocomman_com_statwin(PR_NOCOMMAN *self)
{
INT change;
INT i;
change=ld.StatusWindowWidth;
RotateStatusWindow();
change-=ld.StatusWindowWidth;
for (i=0; i<3; i++)
p_send3(self->nocomman.edit[i],O_NW_INCREASE_WIDTH,change);
MoveWindowLeft(self->nocomman.cntwin->win.id,change);
}
METHOD VOID nocomman_com_exit(VOID)
{
p_exit(0);
}
METHOD VOID nocomman_ncon_new(PR_NOCOMMAN *self)
{
RecordAnyChanges(self);
self->nocomman.where=eAppendNullEntry();
SetCurrentNote(self);
LoadWindows(self);
FocusToWithCheck(self,TITLE_WINDOW);
}
METHOD VOID nocomman_ncon_insert(PR_NOCOMMAN *self)
{
RecordAnyChanges(self);
if (!self->nocomman.clip.title.len && !self->nocomman.clip.note.len)
{
hInfoPrint(NOSTR_NO_NOTE_INSERTED);
return;
}
self->nocomman.where=eAppendNullEntry();
SetCurrentNote(self);
eTakeCopy(DatApp4,&self->nocomman.clip);
LoadWindows(self);
}
METHOD VOID nocomman_ncon_copy(PR_NOCOMMAN *self)
{
NOTE new;
RecordAnyChanges(self);
if (!DatApp4->title.len && !DatApp4->note.len)
{
hInfoPrint(NOSTR_NO_NOTE_COPIED);
return;
}
eTakeCopy(&new,DatApp4);
eZeroNote(&self->nocomman.clip);
self->nocomman.clip=new;
hInfoPrint(NOSTR_NOTE_COPIED);
}
METHOD VOID nocomman_ncon_delete(PR_NOCOMMAN *self)
{
if (!hConfirm(NOSTR_DELETE_NOTE))
return;
self->nocomman.where=eDeleteNote(self->nocomman.where);
SetCurrentNote(self);
LoadWindows(self);
}
METHOD VOID nocomman_ncon_record(PR_NOCOMMAN *self)
{
CheckIfChanged(self);
RecordAnyChanges(self);
hInfoPrint(NOSTR_NOTE_RECORDED);
}
METHOD VOID nocomman_ncon_undo(PR_NOCOMMAN *self)
{
CheckIfChanged(self);
if (hConfirm(NOSTR_UNDO_EDITING))
LoadWindows(self);
}
METHOD VOID nocomman_ncoe_insert(PR_NOCOMMAN *self)
{
CheckEditing(self);
if (!(p_send2(DatApp3,O_EW_PASTE_CLIP)))
hInfoPrint(NOSTR_NO_TEXT_INSERTED);
}
METHOD VOID nocomman_ncoe_copy(PR_NOCOMMAN *self)
{
CheckEditing(self);
if (!(p_send2(DatApp3,O_EW_REPLACE_CLIP)))
hInfoPrint(NOSTR_NO_TEXT_COPIED);
else
hInfoPrint(NOSTR_TEXT_COPIED);
}
METHOD VOID nocomman_ncoe_bring(PR_NOCOMMAN *self)
{
INT lkpid;
ULONG lkfmt;
CheckEditing(self);
lkpid=p_send3(w_am->appman.system,O_SY_LINK_PASTE,&lkfmt);
if (!lkpid || !(lkfmt & (1<<DF_LINK_TEXT)))
{
hInfoPrint(-SYS_NOTHING_TO_BRING);
return;
}
p_send4(DatApp3,O_EW_BRING_IN,lkpid,1<<DF_LINK_TEXT);
}
METHOD VOID nocomman_ncoe_evaluate(PR_NOCOMMAN *self)
{
CheckEditing(self);
p_send2(DatApp3,O_EW_EVALUATE);
}
METHOD VOID nocomman_ncow_title(PR_NOCOMMAN *self,INT commid)
{
commid-=O_NCOW_TITLE;
FocusToWithCheck(self,commid);
}
METHOD VOID nocomman_ncox_psetup(VOID)
{
p_send2(w_ws,O_WS_EDIT_PRINT_CONTEXT);
}
METHOD VOID nocomman_nco_switch_focus(PR_NOCOMMAN *self,INT mods)
{
INT which;
which=self->nocomman.which;
if (mods&W_SHIFT_MODIFIER)
{
if (!which--)
which=FIND_WINDOW;
}
else if (which++==FIND_WINDOW)
which=TITLE_WINDOW;
FocusTo(self,which);
}
METHOD VOID nocomman_ncot_set(PR_NOCOMMAN *self,INT commid)
{
if (commid>=O_NCOT_SET_ALL)
eTagAllNotes(commid-O_NCOT_SET_ALL);
else
TagCurrentNote(commid-O_NCOT_SET);
LoadTagStatus(self);
GiveTagCount();
}
METHOD VOID nocomman_ncox_goto(PR_NOCOMMAN *self)
{
UWORD where;
where=self->nocomman.where;
if (!RunDialog(C_NODL_GOTO,NODL_GOTO,&where))
return;
if (where==self->nocomman.where)
return;
RecordAnyChanges(self);
SetTo(self,where);
}
METHOD VOID nocomman_ncox_moveto(PR_NOCOMMAN *self)
{
UWORD where;
where=0;
if (!RunDialog(C_NODL_GOTO,NODL_MOVETO,&where))
return;
if (where==self->nocomman.where)
return;
RecordAnyChanges(self);
eMoveNoteTo(where,self->nocomman.where);
SetTo(self,where);
}
METHOD VOID nocomman_ncos_options(PR_NOCOMMAN *self)
{
RunDialog(C_NODL_OPTIONS,NODL_OPTIONS,NULL);
}
METHOD VOID nocomman_nco_quick_find(PR_NOCOMMAN *self,INT dir)
{
INT here;
here=EdwinChanged(self,FIND_WINDOW)?
DatApp1->varoot.nrec: self->nocomman.where;
DoSearch(self,here,dir);
}
METHOD VOID nocomman_ncos_forwards(PR_NOCOMMAN *self)
{
DoSearch(self,self->nocomman.where,+1);
}
METHOD VOID nocomman_ncos_backwards(PR_NOCOMMAN *self)
{
DoSearch(self,self->nocomman.where,-1);
}
METHOD VOID nocomman_ncos_first(PR_NOCOMMAN *self)
{
DoSearch(self,DatApp1->varoot.nrec,+1);
}
METHOD VOID nocomman_ncos_last(PR_NOCOMMAN *self)
{
DoSearch(self,DatApp1->varoot.nrec,-1);
}