Files
sibo-playground/code/SIBOSDK/notes/noengine.c
T
2026-07-06 18:01:36 +01:00

131 lines
2.5 KiB
C

/* NOENGINE.C */
#include <notes.g>
#include <notes.rsg>
#include <hwim.h>
GLREF_D PR_VAFLAT *DatApp1;
GLDEF_C NOTE *ePointToNote(INT pos)
{
return((NOTE *)p_send3(DatApp1,O_VA_PREC,pos));
}
GLDEF_C INT eAppendNullEntry(VOID)
{
NOTE note;
if (DatApp1->varoot.nrec==MAX_NUMBER_NOTES)
{
hInfoPrint(NOSTR_MAX_NUMBER_NOTES);
p_leave(RUN_ACTIVE_CLEANUP_NONOTIFY);
}
p_bfil(&note,sizeof(NOTE),0);
p_send3(DatApp1,O_VA_APPEND,&note);
return(DatApp1->varoot.nrec-1);
}
LOCAL_C VOID ZeroLenBuf(LENBUF *lb)
{
p_free(lb->buf);
lb->buf=NULL;
lb->len=0;
}
GLDEF_C VOID eZeroNote(NOTE *pn)
{
ZeroLenBuf(&pn->title);
ZeroLenBuf(&pn->note);
pn->tagged=FALSE;
}
GLDEF_C INT eDeleteNote(INT pos)
{
if (DatApp1->varoot.nrec==1)
{
eZeroNote(ePointToNote(0));
return(0);
}
p_send3(DatApp1,O_VA_DELETE,pos);
p_send(DatApp1,O_VA_COMPRESS);
if (pos==DatApp1->varoot.nrec)
pos--;
return(pos);
}
GLDEF_C VOID eInitialiseEngine(VOID)
{
DatApp1=f_newsend(CAT_NOTES_OLIB,C_VAFLAT,O_VA_INIT,sizeof(NOTE),4);
eAppendNullEntry();
}
GLDEF_C INT eCountTaggedNotes(VOID)
{
INT ret;
INT i;
NOTE *pn;
ret=0;
pn=ePointToNote(0);
i=DatApp1->varoot.nrec;
while (i--)
{
if (pn->tagged)
ret++;
pn++;
}
return(ret);
}
GLDEF_C VOID eTagAllNotes(INT clear)
{
INT set;
INT i;
NOTE *pn;
set=(!clear);
pn=ePointToNote(0);
i=DatApp1->varoot.nrec;
while (i--)
{
pn->tagged=set;
pn++;
}
}
#pragma save,ENTER_CALL
LOCAL_C INT TakeCopyLenBuf(LENBUF *targ,LENBUF *src)
{
targ->buf=f_alloc(src->len);
p_bcpy(targ->buf,src->buf,src->len);
targ->len=src->len;
return(0);
}
#pragma restore
GLDEF_C VOID eTakeCopy(NOTE *targ,NOTE *src)
{
INT ret;
TakeCopyLenBuf(&targ->title,&src->title);
ret=p_enter3(TakeCopyLenBuf,&targ->note,&src->note);
if (ret)
{
p_free(targ->title.buf);
targ->title.buf=0;
p_leave(ret);
}
targ->tagged=src->tagged;
}
GLDEF_C VOID eMoveNoteTo(INT newpos,INT pos)
{
NOTE moving;
moving=*ePointToNote(pos);
p_send3(DatApp1,O_VA_DELETE,pos);
p_send4(DatApp1,O_VA_INSERT,newpos,&moving);
}