/* NOENGINE.C */ #include #include #include 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(¬e,sizeof(NOTE),0); p_send3(DatApp1,O_VA_APPEND,¬e); 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); }