/*=====[ The TesSeRact(TM) CXL User Interface Development System ]======* | Copyright (c) 1987-1990, Innovative Data Concepts. All Rights Reserved | | This Library is part of IDC's TesSeRact Development Tools product | line. For information about other IDC products, call 1-215-884-3373. *----------------------------------------------------------------------* | : Public definitions and prototypes for TCXL windowing | system. *----------------------------------------------------------------------* | PGS : $Id: tcxlwin.h 5.51 90/10/01 00:00:00 MLM Release Locker: MLM $ | $Log: tcxlwin.h $ | Revision 5.51 90/10/01 00:00:00 MLM | TCXL 5.51 | *======================================================================*/ #ifndef _TCXLwin_ # define _TCXLwin_ 1 # ifndef _TCXLvid_ # include /* video definitions */ # endif # ifndef _TCXLerr_ # include /* error definitions */ # endif /*- Box types ----------------------------*/ #define BOX_SNG 0x00 /* all single */ #define BOX_DBL 0x01 /* all double */ #define BOX_VER 0x02 /* horiz single, vert double */ #define BOX_HOR 0x03 /* horiz double, vert single */ #define BOX_HVY 0x04 /* heavy lines */ #define BOX_SPA 0x05 /* spaces */ /*- Border sides -------------------------*/ #define BRD_TOP 0x00 /* Top */ #define BRD_BOT 0x01 /* Bottom */ #define BRD_LFT 0x02 /* Left */ #define BRD_RGT 0x03 /* Right */ /*- Wcenter(), WpopUp centering flags ----*/ #define CNT_HOR 0x01 /* Horizontal */ #define CNT_VER 0x02 /* Vertical */ #define CNT_CNT 0x03 /* Both */ /*- Direction codes ----------------------*/ #define DIR_DWN 0x00 /* Down */ #define DIR_UP 0x01 /* Up */ #define DIR_LFT 0x02 /* Left */ #define DIR_RGT 0x03 /* Right */ /*- Wtitle() title positions -------------*/ #define TTL_LFT 0x01 /* Left */ #define TTL_CNT 0x02 /* Center */ #define TTL_RGT 0x03 /* Right */ /*------------------[ Data objects and access macros ]------------------*/ TYP struct Box BoxT, *BoxP; TYP struct Ttl TtlT, *Ttlp; TYP struct Wctl WctlT, *WctlP; TYP struct Wdf WdfT, *WdfP; struct Box /*-[ Window-frame object ]-------*/ { BytT btyp; /* 00|00 : type */ BytT batr; /* 01|01 : attribute */ }; /* 02|02 ]-----------------------*/ #define BoxTyp(b) ((b).btyp) #define BoxAtr(b) ((b).batr) struct Ttl /*-[ Window-title object ]-------*/ { ChrP tstr; /* 00|00 : string */ BytT tpos; /* 02|04 : position */ AtrT tatr; /* 03|05 : attribute */ }; /* 04|06 ]-----------------------*/ #define TtlStr(t) ((t).tstr) #define TtlPos(t) ((t).tpos) #define TtlAtr(t) ((t).tatr) struct Wctl /*-[ Window-control object ]--------*/ { WdfP wact; /* 00|00 : active window */ WdfP whid; /* 02|04 : top hidden window */ VOID (CTYP *wfun) /* 04|08 : fill-function */ (WrdT, WrdT, IntT, IntT); WndT whdl; /* 06|0C : last handle assigned */ TagT whlp; /* 08|0E : current help category */ IntT wopn; /* 0A|10 : total open windows */ BytT wesc; /* 0C|12 : [Esc] checking ? 1 : 0 */ BytT wtab; /* 0D|13 : TTY output tab width */ BytT wfil; /* 0E|14 : fill character */ BytT wflg; /* 0F|15 : reserved flag byte */ }; /* 10|16 ]--------------------------*/ GBL WctlT CDC _WinCtl; /*- global window-control object ---------*/ #define WctlAct (_WinCtl.wact) /* active window */ #define WctlHid (_WinCtl.whid) /* top hidden window */ #define WctlFun (_WinCtl.wfun) /* fill function */ #define WctlHdl (_WinCtl.whdl) /* last handle */ #define WctlHlp (_WinCtl.whlp) /* help category */ #define WctlOpn (_WinCtl.wopn) /* total open */ #define WctlEsc (_WinCtl.wesc) /* [Esc] check */ #define WctlTab (_WinCtl.wtab) /* tab width */ #define WctlFil (_WinCtl.wfil) /* fill char */ #define WctlFlg (_WinCtl.wflg) /* flag byte */ struct Wdf /*-[ Window-definition object ]--*/ { WdfP wprv; /* 00|00 : previous WdfT */ WdfP wnxt; /* 02|04 : next WdfT */ VcelP wbfr; /* 04|08 : buffer */ VcelP wsbf; /* 06|0C : shadow buffer */ TtlT wttl; /* 08|10 : title */ WndT whdl; /* 0C|14 : handle */ TagT whlp; /* 0E|16 : help category */ VposT wbeg; /* 10|18 : start position */ VposT wend; /* 12|1A : end position */ VposT wpos; /* 14|1C : cursor position */ BoxT wfrm; /* 16|1E : border */ AtrT wdat; /* 18|20 : default attribute */ AtrT wcat; /* 19|21 : current attribute */ AtrT wsat; /* 1A|22 : shadow attribute */ BytT wbrd; /* 1B|23 : border ? 1 : 0 */ }; /* 1C|24 ]-----------------------*/ #define WdfPrv(w) ((w)->wprv) /* previous WdfT */ #define WdfNxt(w) ((w)->wnxt) /* next WdfT */ #define WdfBfr(w) ((w)->wbfr) /* buffer */ #define WdfSbf(w) ((w)->wsbf) /* shadow buffer */ #define WdfTtl(w) ((w)->wttl) /* title */ #define WdfTtlS(w) (TtlStr(WdfTtl(w))) /* string */ #define WdfTtlP(w) (TtlPos(WdfTtl(w))) /* position */ #define WdfTtlA(w) (TtlAtr(WdfTtl(w))) /* attribute */ #define WdfHdl(w) ((w)->whdl) /* handle */ #define WdfHlp(w) ((w)->whlp) /* help category */ #define WdfBeg(w) ((w)->wbeg) /* start position */ #define WdfBegW(w) (VposW(WdfBeg(w))) /* word */ #define WdfBegC(w) (VposC(WdfBeg(w))) /* col */ #define WdfBegR(w) (VposR(WdfBeg(w))) /* row */ #define WdfEnd(w) ((w)->wend) /* end position */ #define WdfEndW(w) (VposW(WdfEnd(w))) /* word */ #define WdfEndC(w) (VposC(WdfEnd(w))) /* col */ #define WdfEndR(w) (VposR(WdfEnd(w))) /* row */ #define WdfPos(w) ((w)->wpos) /* cursor position */ #define WdfPosW(w) (VposW(WdfPos(w))) /* word */ #define WdfPosC(w) (VposC(WdfPos(w))) /* col */ #define WdfPosR(w) (VposR(WdfPos(w))) /* row */ #define WdfFrm(w) ((w)->wfrm) /* border */ #define WdfFrmT(w) (BoxTyp(WdfFrm(w))) /* type */ #define WdfFrmA(w) (BoxAtr(WdfFrm(w))) /* attribute */ #define WdfDat(w) ((w)->wdat) /* default attribute */ #define WdfCat(w) ((w)->wcat) /* current attribute */ #define WdfSat(w) ((w)->wsat) /* shadow attribute */ #define WdfBrd(w) ((w)->wbrd) /* border */ /*------------------------[ Function prototypes ]-----------------------* | [A] indicates active window in comments */ #ifdef __cplusplus /* no mangling, please */ extern "C" { #endif /*- general ---------------------*/ IntT CTYP Wactiv(WndT wh); /* Activate window */ IntT CTYP WcloseAll(NOARG); /* Close all windows */ ChrP CTYP WerrMsg(NOARG); /* get error-message text */ VOID CTYP Werror(NOARG); /* exit with error-message */ WndT CTYP Windowat(IntT sr, /* Handle of window at position */ IntT sc); WdfP CTYP WinLoc(WndT wh); /* Find window by handle */ IntT Wisactiv(WndT a); /* Test for active handle */ WndT CTYP Wopen(IntT sr, IntT sc, /* Open window */ IntT er, IntT ec, IntT bt, IntT ba, IntT wa); IntT CTYP Wperror(ChrP mp); /* Display error window */ WndT CTYP WpopUp(IntT cf, IntT sr, /* Open centered window */ IntT sc, IntT er, IntT ec, IntT bt, IntT ba, IntT wa); VOID CTYP Wrestore(VcelP wb); /* Restore saved window */ VcelP CTYP Wsave(IntT sr, IntT sc, /* Save window */ IntT er, IntT ec); VOID WsetEsc(IntT a); /* Enable/Disable [Esc] key */ VOID WsetFil(IntT a); /* Set fill char */ IntT CTYP WsetFun( /* Set fill function */ VOID (CTYP *f)(WrdT, WrdT, IntT, IntT)); VOID WsetTab(IntT a); /* Set tab-width */ IntT CTYP WsetTxt(IntT a); /* Set text attr */ IntT CTYP Wunhide(WndT wh); /* Unhide window */ IntT CTYP Wunlink(WndT wh); /* Unlink window */ IntT CTYP Wwprints(WndT wh, IntT wr, /* Put string to window */ IntT wc, IntT at, ChrP ps); /*- active window movement ------*/ IntT CTYP Wcenter(IntT cf); /* Center window on screen [A] */ IntT CTYP Wclose(NOARG); /* Close window [A] */ WndT CTYP Wcopy(IntT nr, IntT nc); /* Copy window [A] */ IntT CTYP Wdrag(IntT df); /* Drag one row or col [A] */ IntT CTYP Wdump(NOARG); /* Dump window to printer [A] */ WndT CTYP Whandle(NOARG); /* Get active handle [A] */ IntT CTYP Whide(NOARG); /* Hide window [A] */ IntT CTYP Wmove(IntT sr, IntT sc); /* Move window [A] */ IntT CTYP Wsize(IntT nr, IntT nc); /* Resize window [A] */ IntT CTYP Wslide(IntT sr,IntT sc); /* Slide window [A] */ /*- active window-control -------*/ IntT CTYP WchgAtr(IntT ba, IntT wa); /* Change window/border attr [A] */ IntT CTYP WchkBox(IntT sr, IntT sc, /* Check box coords [A] */ IntT er, IntT ec); IntT CTYP WchkCol(IntT wc); /* Check column [A] */ IntT CTYP WchkPos(IntT wr, IntT wc); /* Check position [A] */ IntT CTYP WchkRow(IntT wr); /* Check row [A] */ IntT Wclear(NOARG); /* Clear window to default [A] */ IntT CTYP WclrEol(NOARG); /* Clear cursor to EOL [A] */ IntT CTYP WclrEos(NOARG); /* Clear to end of window [A] */ IntT CTYP WclrWin(IntT at); /* Clear window [A] */ IntT CTYP WfilBox(IntT sr, IntT sc, /* Fill region [A] */ IntT er, IntT ec, IntT ch,IntT at); IntT CTYP WlinDel(IntT wr, IntT df); /* Delete line [A] */ IntT CTYP WlinIns(IntT wr, IntT di); /* Insert line [A] */ IntT CTYP WscrBox(IntT sr, /* Scroll region [A] */ IntT sc, IntT er,IntT ec, IntT n, IntT d); IntT CTYP WscrWin(IntT n, IntT d); /* Scroll window [A] */ /*- active border, box drawing --*/ IntT CTYP Wborder(IntT bt); /* Add border [A] */ IntT CTYP Wbprintc(IntT bd, IntT of, /* Put char/attr on border [A] */ IntT at, IntT ch); IntT CTYP WdrwBox(IntT sr, IntT sc, /* Draw internal box [A] */ IntT er, IntT ec, IntT bt, IntT at); IntT CTYP WdrwHor(IntT sr, IntT sc, /* Draw horizontal line [A] */ IntT nc, IntT bt, IntT at); IntT CTYP WdrwVer(IntT sr, IntT sc, /* Draw vertical line [A] */ IntT n, IntT bt, IntT at); IntT CTYP Wmessage(ChrP ps, IntT bo, /* Put message on border [A] */ IntT lo, IntT at); IntT CTYP Wtitle(ChrP ps, IntT tp, /* Put title on border [A] */ IntT ta); /*- active window shadow --------*/ IntT CTYP Wshadoff(NOARG); /* Remove shadow [A] */ IntT CTYP Wshadow(IntT at); /* Add shadow [A] */ /*- active window cursor --------*/ VOID WcurGet(VposT rc); /* Get position [A] */ IntT WcurPut(VposT rc); /* Put cursor [A] */ IntT CTYP Wgotoxy(IntT wr, IntT wc); /* Set position [A] */ IntT CTYP Wpgotoxy(IntT wr, /* Provisional position [A] */ IntT wc); VOID WposGet(IntT r, IntT c); /* get cursor position as */ /*- Active Output / Current Cursor/Attrib */ VOID CTYP WdupChr(IntT ch, IntT nd); /* Put duplicated char [A] */ VOID CTYP WdupStr(ChrP ps,IntT nd); /* Put duplicated string [A] */ IntT CTYP WputCen(ChrP ps); /* Put centered string [A] */ IntT CTYP WputFmt(ChrP fs, ChrP ps); /* Format-string output [A] */ VOID CTYP Wputc(IntT ch); /* Put char [A] */ IntT CDC Wputf(ChrP fs, ...); /* Put printf() string [A] */ VOID CTYP Wputs(ChrP ps); /* Put string [A] */ VOID CTYP Wputns(ChrP ps, IntT wd); /* Put limited string [A] */ IntT CTYP Wputrj(ChrP ps); /* Right-justify string/attr [A] */ IntT CTYP Wputsw(ChrP ps); /* Put string with word-wrap [A] */ /*- Active Output / Passed Cursor/Attrib -*/ VOID CTYP WdupChrA(IntT wr, IntT wc, /* Put duplicated char/attr [A] */ IntT at, IntT ch, IntT nd); VOID CTYP WdupStrA(IntT wr, IntT wc, /* Put duplicated str/attr [A] */ IntT at, ChrP ps, IntT nd); IntT CTYP WprtCen(IntT wr, IntT at, /* Put centered string/attr [A] */ ChrP ps); IntT CTYP WprtFmt(IntT wr, IntT wc, /* Format-string/attr output [A] */ IntT at, ChrP fs, ChrP ps); IntT CTYP Wprtc(IntT wr, IntT wc, /* Put char/attr [A] */ IntT at, IntT ch); IntT CDC Wprtf(IntT wr, IntT wc, /* Put printf() string/attr [A] */ IntT at, ChrP fs, ...); VOID CTYP Wprtns(IntT wr, IntT wc, /* Put limited string/attr [A] */ IntT at, ChrP ps, IntT wd); IntT CTYP Wprtrj(IntT wr, IntT wc, /* Right-justify string/attr [A] */ IntT at, ChrP ps); IntT CTYP Wprts(IntT wr, IntT wc, /* Put string/attr [A] */ IntT at, ChrP ps); IntT CTYP Wprtsw(IntT wr, IntT wc, /* Put string/attr with wrap [A] */ IntT at, ChrP ps); WrdT CTYP WcurGt_(NOARG); /*- internals -------------------*/ IntT CTYP WcurPt_(WrdT rc); #define Wclear() (WclrWin(WdfDat(WctlAct))) #define WcurGet(rc) (VposW(rc)=WcurGt_()) #define WcurPut(rc) (WcurPt_(VposW(rc))) #define WsetFil(a) (WctlFil=(a)) #define Wisactiv(a) ((a)==WdfHdl(WctlAct)) #define WposGet(r,c) ((c)=MsInt(WcurGt_()); (r)=((c)>>8); (c)&=0xFF) #define WsetEsc(a) (WctlEsc=(a)) #define WsetTab(a) (WctlTab=(((a)==0)?1:(a))) #ifdef __cplusplus } #endif #endif /* _TCXLwin_ : End of TCXLwin.h */