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

277 lines
6.1 KiB
C

/*
EHWIF.C
Started by DavidW, 5/12/91
Edit box extension to h layer of hwif
*/
#include <edit.g>
#include <edwin.g>
#include <scrimg.g>
#include <hwif.g>
#include <hwif.h>
GLDEF_D UWORD _ebControlFormat=FALSE;
#define EebH ((PR_EDWIN *)ebH)
#pragma save,ENTER_CALL
LOCAL_C INT DoEntersend(VOID *ebH,INT method,VOID *p1,VOID *p2,VOID *p3)
{
p_send5(ebH,method,p1,p2,p3);
return(0);
}
#pragma restore
LOCAL_C INT Entersend(VOID *ebH,INT method,VOID *p1,VOID *p2,VOID *p3)
{
INT ret;
ret=p_enter6(DoEntersend,ebH,method,p1,p2,p3);
if (ret<-1)
uErrorValue(ret);
return(ret);
}
#define V (VOID*)
GLDEF_C INT hEBCompleteFormat(VOID *ebH)
{
PR_SCRIMG *scrimg;
INT ret;
scrimg=EebH->edwin.scrimg;
if (!scrimg->scrimg.formatting)
return(0);
ret=Entersend(scrimg,O_SI_SET,0,0,0);
p_send2(scrimg->scrimg.wrap,O_AO_CANCEL);
return(ret);
}
GLDEF_C INT hEBHandleKey(VOID *ebH,INT keycode,INT modifier)
{
INT ret;
if (keycode==W_KEY_RETURN)
modifier|=W_SHIFT_MODIFIER;
ret=Entersend(ebH,O_WN_KEY,V keycode,V modifier,NULL);
if (!ret && !_ebControlFormat)
ret=hEBCompleteFormat(ebH);
return(ret);
}
GLDEF_C VOID hEBClose(VOID *ebH)
{
p_send2(ebH,O_DESTROY);
}
GLDEF_C TEXT *hEBSenseText(VOID *ebH)
{
SE_EDWIN sense;
p_send3(ebH,O_WN_SENSE,&sense);
return(sense.buf);
}
GLDEF_C INT hEBSetText(VOID *ebH,TEXT *pb,INT blen)
{
SE_EDWIN set;
set.buf=pb;
set.len=blen;
return(Entersend(ebH,O_WN_SET,&set,NULL,NULL));
}
GLDEF_C VOID hEBEmphasise(VOID *ebH,INT flag)
{
p_send3(ebH,O_WN_EMPHASISE,flag);
}
GLDEF_C INT hEBSetSelect(VOID *ebH,INT aoff,INT coff)
{
SET_EDWIN set;
set.flags=SET_EDWIN_CURSOR|SET_EDWIN_ANCHOR;
set.anchor=aoff;
set.cursor=coff;
return(Entersend(ebH,O_EW_SET,&set,NULL,NULL));
}
GLDEF_C INT hEBSenseSelect(VOID *ebH,UWORD *top)
{
return(p_send3(EebH->edwin.scrimg,O_SI_GET_SELECT,top));
}
GLDEF_C INT hEBSetClipText(VOID *ebH,TEXT *pb,INT blen)
{
return(Entersend(EebH->edwin.clip,O_EP_SET_TEXT,pb,V blen,0));
}
GLDEF_C TEXT *hEBSenseClipText(VOID *ebH)
{
TEXT *pb;
p_send3(EebH->edwin.clip,O_EF_SENSE_BUF,&pb);
return(pb);
}
GLDEF_C INT hEBEvaluate(VOID *ebH)
{
return(Entersend(ebH,O_EW_EVALUATE,NULL,NULL,NULL));
}
GLDEF_C INT hEBChangeWidth(VOID *ebH,INT width)
{
P_EXTENT ext;
p_send3(ebH,O_EW_SENSE_SIZE,&ext);
EebH->edwin.margins.right+=width-ext.width;
ext.width=width;
return(Entersend(ebH,O_EW_SET_SIZE,&ext,NULL,NULL));
}
GLDEF_C INT hEBSetMargin(VOID *ebH,UINT right)
{
INT ret;
UINT oright;
oright=EebH->edwin.margins.right;
EebH->edwin.margins.right=right;
ret=Entersend(EebH->edwin.scrimg,
O_SI_STYLE_CHANGED,SCRIMG_STCHNG_DOC,NULL,NULL);
if (ret<0)
EebH->edwin.margins.right=oright;
return(ret);
}
GLDEF_C UINT hEBSenseMargin(VOID *ebH)
{
return(EebH->edwin.margins.right);
}
GLDEF_C INT hEBInsert(VOID *ebH,TEXT *pb,INT blen)
{
return(Entersend(ebH,O_EW_INSERT,pb,V blen,NULL));
}
GLDEF_C INT hEBReplace(VOID *ebH,TEXT *replace,INT backwards)
{
return(Entersend(ebH,O_EW_REPLACE,replace,V backwards,NULL));
}
GLDEF_C INT hEBCopy(VOID *ebH)
{
if (!(EebH->edwin.select))
return(1);
return(Entersend(ebH,O_EW_REPLACE_CLIP,NULL,NULL,NULL));
}
GLDEF_C INT hEBPaste(VOID *ebH)
{
if (!(p_send2(EebH->edwin.clip,O_EP_SENSE_LEN)))
return(1);
return(Entersend(ebH,O_EW_PASTE_CLIP,NULL,NULL,NULL));
}
GLDEF_C INT hEBFind(VOID *ebH,TEXT *str,INT flags)
{
return(p_send4(ebH,O_EW_FIND,str,flags));
}
GLDEF_C INT hEBSenseChanged(VOID *ebH)
{
return(EebH->edwin.change);
}
GLDEF_C VOID hEBClearChanged(VOID *ebH)
{
EebH->edwin.change=FALSE;
}
GLDEF_C VOID hEBSetCWidth(VOID *ebH,INT cwidth)
{
SCRIMG_WIN win;
p_send3(EebH->edwin.scrimg,O_SI_SENSE,&win);
win.cwidth=cwidth;
Entersend(EebH->edwin.scrimg,O_SI_SET,&win,NULL,NULL);
}
GLDEF_C INT hEBShowSymbols(VOID *ebH,INT flag)
{
SCRLAY_STYLE style;
p_send3(EebH->edwin.scrlay,O_SL_SENSE,&style);
style.options=FALSE;
if (flag)
style.options=SCRLAY_SHOW_SPACES|SCRLAY_SHOW_LFS;
p_send3(EebH->edwin.scrlay,O_SL_SET,&style);
return(Entersend(EebH->edwin.scrimg,O_SI_STYLE_CHANGED,0,0,0));
}
GLDEF_C VOID *hEBOpen(INT flags,H_EDIT_BOX *heb)
{
VOID *ebH;
IN_EDWIN in;
IN_EDWIN_X inx;
PR_WIN win;
ebH=uCheckHandle(p_new(CAT_HWIF_HWIM,C_EDWIN));
if (!ebH)
return(NULL);
win.win.id=heb->win;
in.vulen=heb->vulen;
in.flags=flags|IN_EDWIN_VULEN_PIXELS
|IN_EDWIN_NO_AUTOSELECT|IN_EDWIN_POSITION_SUPPLIED;
in.maxlen=heb->maxchars;
in.contents[0]=0;
inx.vislines=heb->vislines;
inx.pos=heb->pos;
inx.font=heb->font;
inx.style=heb->style;
inx.leading.total=heb->lead_tot;
inx.leading.top=heb->lead_top;
inx.clip=NULL;
if (Entersend(ebH,O_WN_INIT,&in,&win,&inx))
{
hEBClose(ebH);
return(NULL);
}
return(ebH);
}
GLDEF_C VOID *hEBSenseDoc(VOID *ebH)
{
return(EebH->edwin.doc);
}
GLDEF_C INT hEDCapacity(VOID *doc,UINT maxlen)
{
return(Entersend(doc,O_EP_CAPACITY,V (maxlen+1),NULL,NULL));
}
GLDEF_C INT hEDInsert(VOID *doc,UINT pos,VOID *buf,UINT len)
{
return(Entersend(doc,O_EP_INSERT,V pos,buf,V len));
}
GLDEF_C INT hEBDocChanged(VOID *ebH)
{
UINT doclen;
doclen=p_send2(EebH->edwin.doc,O_EP_SENSE_LEN);
EebH->edwin.clen=doclen+1;
return(Entersend(EebH->edwin.scrimg,O_SI_DOC_CHANGED,V doclen,NULL,NULL));
}
GLDEF_C INT hEBPosToXL(void *ebH,H_SCRLAY_PLX *plx)
{
return(p_send3(EebH->edwin.scrlay,O_SL_POS_TO_XL,plx));
}