/* Name: cc_term.c Author: Michal Sudolsky Date: 22.09.2005 15:45 */ // modified by Juraj Kolesar #include "cc.h" bool _cc_hascolors; long _cc_screenx, _cc_screeny; bool _cc_uglycharset=false; char *_cc_mapsymbol="lmkjtwuvqxna,+-.", *_cc_ugmsymbol="++++++++-|+ <>AV"; short _cc_keymap[]={ KEY_LEFT,4,END_SEQ,CC_KEY_LEFT, KEY_SLEFT,4,END_SEQ,CC_KEY_LEFT|CC_MOD_SHIFT, KEY_RIGHT,4,END_SEQ,CC_KEY_RIGHT, KEY_SRIGHT,4,END_SEQ,CC_KEY_RIGHT|CC_MOD_SHIFT, KEY_UP,4,END_SEQ,CC_KEY_UP, KEY_DOWN,4,END_SEQ,CC_KEY_DOWN, KEY_HOME,4,END_SEQ,CC_KEY_HOME, KEY_SHOME,4,END_SEQ,CC_KEY_HOME|CC_MOD_SHIFT, KEY_END,4,END_SEQ,CC_KEY_END, KEY_SEND,4,END_SEQ,CC_KEY_END|CC_MOD_SHIFT, KEY_NPAGE,4,END_SEQ,CC_KEY_PGDOWN, KEY_PPAGE,4,END_SEQ,CC_KEY_PGUP, KEY_B2,4,END_SEQ,CC_KEY_CENTER, KEY_BACKSPACE,4,END_SEQ,CC_KEY_BACK, 127,4,END_SEQ,CC_KEY_BACK, KEY_ENTER,4,END_SEQ,CC_KEY_ENTER, 10,4,END_SEQ,CC_KEY_ENTER, 9,4,END_SEQ,CC_KEY_TAB, KEY_BTAB,4,END_SEQ,CC_KEY_TAB|CC_MOD_SHIFT, KEY_DC,4,END_SEQ,CC_KEY_DEL, KEY_SDC,4,END_SEQ,CC_KEY_DEL|CC_MOD_SHIFT, KEY_IC,4,END_SEQ,CC_KEY_INS, KEY_SIC,4,END_SEQ,CC_KEY_INS|CC_MOD_SHIFT, KEY_BREAK,4,END_SEQ,CC_KEY_PAUSE, KEY_F(1),4,END_SEQ,CC_KEY_F1, KEY_F(2),4,END_SEQ,CC_KEY_F2, KEY_F(3),4,END_SEQ,CC_KEY_F3, KEY_F(4),4,END_SEQ,CC_KEY_F4, KEY_F(5),4,END_SEQ,CC_KEY_F5, KEY_F(6),4,END_SEQ,CC_KEY_F6, KEY_F(7),4,END_SEQ,CC_KEY_F7, KEY_F(8),4,END_SEQ,CC_KEY_F8, KEY_F(9),4,END_SEQ,CC_KEY_F9, KEY_F(10),4,END_SEQ,CC_KEY_F10, KEY_F(11),4,END_SEQ,CC_KEY_F11, KEY_F(12),4,END_SEQ,CC_KEY_F12, KEY_F(13),4,END_SEQ,CC_KEY_F1|CC_MOD_SHIFT, KEY_F(14),4,END_SEQ,CC_KEY_F2|CC_MOD_SHIFT, KEY_F(15),4,END_SEQ,CC_KEY_F3|CC_MOD_SHIFT, KEY_F(16),4,END_SEQ,CC_KEY_F4|CC_MOD_SHIFT, KEY_F(17),4,END_SEQ,CC_KEY_F5|CC_MOD_SHIFT, KEY_F(18),4,END_SEQ,CC_KEY_F6|CC_MOD_SHIFT, KEY_F(19),4,END_SEQ,CC_KEY_F7|CC_MOD_SHIFT, KEY_F(20),4,END_SEQ,CC_KEY_F8|CC_MOD_SHIFT, KEY_F(21),4,END_SEQ,CC_KEY_F9|CC_MOD_SHIFT, KEY_F(22),4,END_SEQ,CC_KEY_F10|CC_MOD_SHIFT, KEY_F(23),4,END_SEQ,CC_KEY_F11|CC_MOD_SHIFT, KEY_F(24),4,END_SEQ,CC_KEY_F12|CC_MOD_SHIFT, KEY_F(25),4,END_SEQ,CC_KEY_F1|CC_MOD_CTRL, KEY_F(26),4,END_SEQ,CC_KEY_F2|CC_MOD_CTRL, KEY_F(27),4,END_SEQ,CC_KEY_F3|CC_MOD_CTRL, KEY_F(28),4,END_SEQ,CC_KEY_F4|CC_MOD_CTRL, KEY_F(29),4,END_SEQ,CC_KEY_F5|CC_MOD_CTRL, KEY_F(30),4,END_SEQ,CC_KEY_F6|CC_MOD_CTRL, KEY_F(31),4,END_SEQ,CC_KEY_F7|CC_MOD_CTRL, KEY_F(32),4,END_SEQ,CC_KEY_F8|CC_MOD_CTRL, KEY_F(33),4,END_SEQ,CC_KEY_F9|CC_MOD_CTRL, KEY_F(34),4,END_SEQ,CC_KEY_F10|CC_MOD_CTRL, KEY_F(35),4,END_SEQ,CC_KEY_F11|CC_MOD_CTRL, KEY_F(36),4,END_SEQ,CC_KEY_F12|CC_MOD_CTRL, KEY_F(37),4,END_SEQ,CC_KEY_F1|CC_MOD_SHIFT|CC_MOD_CTRL, KEY_F(38),4,END_SEQ,CC_KEY_F2|CC_MOD_SHIFT|CC_MOD_CTRL, KEY_F(39),4,END_SEQ,CC_KEY_F3|CC_MOD_SHIFT|CC_MOD_CTRL, KEY_F(40),4,END_SEQ,CC_KEY_F4|CC_MOD_SHIFT|CC_MOD_CTRL, KEY_F(41),4,END_SEQ,CC_KEY_F5|CC_MOD_SHIFT|CC_MOD_CTRL, KEY_F(42),4,END_SEQ,CC_KEY_F6|CC_MOD_SHIFT|CC_MOD_CTRL, KEY_F(43),4,END_SEQ,CC_KEY_F7|CC_MOD_SHIFT|CC_MOD_CTRL, KEY_F(44),4,END_SEQ,CC_KEY_F8|CC_MOD_SHIFT|CC_MOD_CTRL, KEY_F(45),4,END_SEQ,CC_KEY_F9|CC_MOD_SHIFT|CC_MOD_CTRL, KEY_F(46),4,END_SEQ,CC_KEY_F10|CC_MOD_SHIFT|CC_MOD_CTRL, KEY_F(47),4,END_SEQ,CC_KEY_F11|CC_MOD_SHIFT|CC_MOD_CTRL, KEY_F(48),4,END_SEQ,CC_KEY_F12|CC_MOD_SHIFT|CC_MOD_CTRL, 27,LAST_KEY, ERR,4,END_SEQ,CC_KEY_ESC, 79,114, 51,18, 80,4,END_SEQ,CC_KEY_F1|CC_MOD_ALT, 81,4,END_SEQ,CC_KEY_F2|CC_MOD_ALT, 82,4,END_SEQ,CC_KEY_F3|CC_MOD_ALT, 83,LAST_KEY,END_SEQ,CC_KEY_F4|CC_MOD_ALT, 52,18, 80,4,END_SEQ,CC_KEY_F1|CC_MOD_ALT|CC_MOD_SHIFT, 81,4,END_SEQ,CC_KEY_F2|CC_MOD_ALT|CC_MOD_SHIFT, 82,4,END_SEQ,CC_KEY_F3|CC_MOD_ALT|CC_MOD_SHIFT, 83,LAST_KEY,END_SEQ,CC_KEY_F4|CC_MOD_ALT|CC_MOD_SHIFT, 97,4,END_SEQ,CC_KEY_UP|CC_MOD_CTRL, 98,4,END_SEQ,CC_KEY_DOWN|CC_MOD_CTRL, 99,4,END_SEQ,CC_KEY_RIGHT|CC_MOD_CTRL, 100,4,END_SEQ,CC_KEY_LEFT|CC_MOD_CTRL, 106,4,END_SEQ,'*', 107,4,END_SEQ,'+', 109,4,END_SEQ,'-', 110,4,END_SEQ,CC_KEY_DEL, 111,4,END_SEQ,'/', 112,4,END_SEQ,CC_KEY_INS, 113,4,END_SEQ,CC_KEY_END, 114,4,END_SEQ,CC_KEY_DOWN, 115,4,END_SEQ,CC_KEY_PGDOWN, 116,4,END_SEQ,CC_KEY_LEFT, 117,4,END_SEQ,CC_KEY_CENTER, 118,4,END_SEQ,CC_KEY_RIGHT, 119,4,END_SEQ,CC_KEY_HOME, 120,4,END_SEQ,CC_KEY_UP, 121,LAST_KEY,END_SEQ,CC_KEY_PGUP, 91,LAST_KEY, 80,4,END_SEQ,CC_KEY_PAUSE, 49,180, 49,6, 126,LAST_KEY,END_SEQ,CC_KEY_F1, 50,6, 126,LAST_KEY,END_SEQ,CC_KEY_F2, 51,6, 126,LAST_KEY,END_SEQ,CC_KEY_F3, 52,6, 126,LAST_KEY,END_SEQ,CC_KEY_F4, 53,16, 59,LAST_KEY, 51,6, 126,LAST_KEY,END_SEQ,CC_KEY_F5|CC_MOD_ALT, 52,LAST_KEY, 126,LAST_KEY,END_SEQ,CC_KEY_F5|CC_MOD_ALT|CC_MOD_SHIFT, 55,16, 59,LAST_KEY, 51,6, 126,LAST_KEY,END_SEQ,CC_KEY_F6|CC_MOD_ALT, 52,LAST_KEY, 126,LAST_KEY,END_SEQ,CC_KEY_F6|CC_MOD_ALT|CC_MOD_SHIFT, 56,16, 59,LAST_KEY, 51,6, 126,LAST_KEY,END_SEQ,CC_KEY_F7|CC_MOD_ALT, 52,LAST_KEY, 126,LAST_KEY,END_SEQ,CC_KEY_F7|CC_MOD_ALT|CC_MOD_SHIFT, 57,16, 59,LAST_KEY, 51,6, 126,LAST_KEY,END_SEQ,CC_KEY_F8|CC_MOD_ALT, 52,LAST_KEY, 126,LAST_KEY,END_SEQ,CC_KEY_F8|CC_MOD_ALT|CC_MOD_SHIFT, 59,LAST_KEY, 50,10, 65,4,END_SEQ,CC_KEY_UP|CC_MOD_SHIFT, 66,LAST_KEY,END_SEQ,CC_KEY_DOWN|CC_MOD_SHIFT, 51,26, 65,4,END_SEQ,CC_KEY_UP|CC_MOD_ALT, 66,4,END_SEQ,CC_KEY_DOWN|CC_MOD_ALT, 67,4,END_SEQ,CC_KEY_RIGHT|CC_MOD_ALT, 68,4,END_SEQ,CC_KEY_LEFT|CC_MOD_ALT, 70,4,END_SEQ,CC_KEY_END|CC_MOD_ALT, 72,LAST_KEY,END_SEQ,CC_KEY_HOME|CC_MOD_ALT, 53,26, 65,4,END_SEQ,CC_KEY_UP|CC_MOD_CTRL, 66,4,END_SEQ,CC_KEY_DOWN|CC_MOD_CTRL, 67,4,END_SEQ,CC_KEY_RIGHT|CC_MOD_CTRL, 68,4,END_SEQ,CC_KEY_LEFT|CC_MOD_CTRL, 70,4,END_SEQ,CC_KEY_END|CC_MOD_CTRL, 72,LAST_KEY,END_SEQ,CC_KEY_HOME|CC_MOD_CTRL, 54,LAST_KEY, 65,4,END_SEQ,CC_KEY_UP|CC_MOD_SHIFT|CC_MOD_CTRL, 66,4,END_SEQ,CC_KEY_DOWN|CC_MOD_SHIFT|CC_MOD_CTRL, 67,4,END_SEQ,CC_KEY_RIGHT|CC_MOD_SHIFT|CC_MOD_CTRL, 68,4,END_SEQ,CC_KEY_LEFT|CC_MOD_SHIFT|CC_MOD_CTRL, 70,4,END_SEQ,CC_KEY_END|CC_MOD_SHIFT|CC_MOD_CTRL, 72,LAST_KEY,END_SEQ,CC_KEY_HOME|CC_MOD_SHIFT|CC_MOD_CTRL, 50,230, 48,16, 59,LAST_KEY, 51,6, 126,LAST_KEY,END_SEQ,CC_KEY_F9|CC_MOD_ALT, 52,LAST_KEY, 126,LAST_KEY,END_SEQ,CC_KEY_F9|CC_MOD_ALT|CC_MOD_SHIFT, 49,20, 59,14, 51,6, 126,LAST_KEY,END_SEQ,CC_KEY_F10|CC_MOD_ALT, 52,LAST_KEY, 126,LAST_KEY,END_SEQ,CC_KEY_F10|CC_MOD_ALT|CC_MOD_SHIFT, 94,LAST_KEY,END_SEQ,CC_KEY_F10|CC_MOD_CTRL, 51,28, 36,4,END_SEQ,CC_KEY_F11|CC_MOD_SHIFT, 59,14, 51,6, 126,LAST_KEY,END_SEQ,CC_KEY_F11|CC_MOD_ALT, 52,LAST_KEY, 126,LAST_KEY,END_SEQ,CC_KEY_F11|CC_MOD_ALT|CC_MOD_SHIFT, 64,4,END_SEQ,CC_KEY_F11|CC_MOD_CTRL|CC_MOD_SHIFT, 94,LAST_KEY,END_SEQ,CC_KEY_F11|CC_MOD_CTRL, 52,28, 36,4,END_SEQ,CC_KEY_F12|CC_MOD_SHIFT, 59,14, 51,6, 126,LAST_KEY,END_SEQ,CC_KEY_F12|CC_MOD_ALT, 52,LAST_KEY, 126,LAST_KEY,END_SEQ,CC_KEY_F12|CC_MOD_ALT|CC_MOD_SHIFT, 64,4,END_SEQ,CC_KEY_F12|CC_MOD_CTRL|CC_MOD_SHIFT, 94,LAST_KEY,END_SEQ,CC_KEY_F12|CC_MOD_CTRL, 53,10, 94,4,END_SEQ,CC_KEY_F3|CC_MOD_CTRL|CC_MOD_SHIFT, 126,LAST_KEY,END_SEQ,CC_KEY_F3|CC_MOD_SHIFT, 54,10, 94,4,END_SEQ,CC_KEY_F4|CC_MOD_CTRL|CC_MOD_SHIFT, 126,LAST_KEY,END_SEQ,CC_KEY_F4|CC_MOD_SHIFT, 56,10, 94,4,END_SEQ,CC_KEY_F5|CC_MOD_CTRL|CC_MOD_SHIFT, 126,LAST_KEY,END_SEQ,CC_KEY_F5|CC_MOD_SHIFT, 57,62, 36,4,END_SEQ,CC_KEY_POPUP|CC_MOD_SHIFT, 59,44, 50,6, 126,LAST_KEY,END_SEQ,CC_KEY_POPUP|CC_MOD_SHIFT, 51,6, 126,LAST_KEY,END_SEQ,CC_KEY_POPUP|CC_MOD_ALT, 52,6, 126,LAST_KEY,END_SEQ,CC_KEY_POPUP|CC_MOD_ALT|CC_MOD_SHIFT, 53,6, 126,LAST_KEY,END_SEQ,CC_KEY_POPUP|CC_MOD_CTRL, 54,6, 126,LAST_KEY,END_SEQ,CC_KEY_POPUP|CC_MOD_CTRL|CC_MOD_SHIFT, 55,6, 126,LAST_KEY,END_SEQ,CC_KEY_POPUP|CC_MOD_CTRL|CC_MOD_ALT, 56,LAST_KEY, 126,LAST_KEY,END_SEQ,CC_KEY_POPUP|CC_MOD_CTRL|CC_MOD_ALT| CC_MOD_SHIFT, 64,4,END_SEQ,CC_KEY_POPUP|CC_MOD_CTRL|CC_MOD_SHIFT, 94,4,END_SEQ,CC_KEY_POPUP|CC_MOD_CTRL, 126,LAST_KEY,END_SEQ,CC_KEY_POPUP, 59,LAST_KEY, 50,6, 126,LAST_KEY,END_SEQ,CC_KEY_INS|CC_MOD_SHIFT, 51,6, 126,LAST_KEY,END_SEQ,CC_KEY_INS|CC_MOD_ALT, 52,6, 126,LAST_KEY,END_SEQ,CC_KEY_INS|CC_MOD_ALT|CC_MOD_SHIFT, 53,6, 126,LAST_KEY,END_SEQ,CC_KEY_INS|CC_MOD_CTRL, 54,6, 126,LAST_KEY,END_SEQ,CC_KEY_INS|CC_MOD_CTRL|CC_MOD_SHIFT, 55,6, 126,LAST_KEY,END_SEQ,CC_KEY_INS|CC_MOD_CTRL|CC_MOD_ALT, 56,LAST_KEY, 126,LAST_KEY,END_SEQ,CC_KEY_INS|CC_MOD_CTRL|CC_MOD_ALT|CC_MOD_SHIFT, 51,94, 36,4,END_SEQ,CC_KEY_DEL|CC_MOD_SHIFT, 49,10, 94,4,END_SEQ,CC_KEY_F7|CC_MOD_CTRL|CC_MOD_SHIFT, 126,LAST_KEY,END_SEQ,CC_KEY_F7|CC_MOD_SHIFT, 50,10, 94,4,END_SEQ,CC_KEY_F8|CC_MOD_CTRL|CC_MOD_SHIFT, 126,LAST_KEY,END_SEQ,CC_KEY_F8|CC_MOD_SHIFT, 51,10, 94,4,END_SEQ,CC_KEY_F9|CC_MOD_CTRL|CC_MOD_SHIFT, 126,LAST_KEY,END_SEQ,CC_KEY_F9|CC_MOD_SHIFT, 52,10, 94,4,END_SEQ,CC_KEY_F10|CC_MOD_CTRL|CC_MOD_SHIFT, 126,LAST_KEY,END_SEQ,CC_KEY_F10|CC_MOD_SHIFT, 59,44, 50,6, 126,LAST_KEY,END_SEQ,CC_KEY_DEL|CC_MOD_SHIFT, 51,6, 126,LAST_KEY,END_SEQ,CC_KEY_DEL|CC_MOD_ALT, 52,6, 126,LAST_KEY,END_SEQ,CC_KEY_DEL|CC_MOD_ALT|CC_MOD_SHIFT, 53,6, 126,LAST_KEY,END_SEQ,CC_KEY_DEL|CC_MOD_CTRL, 54,6, 126,LAST_KEY,END_SEQ,CC_KEY_DEL|CC_MOD_CTRL|CC_MOD_SHIFT, 55,6, 126,LAST_KEY,END_SEQ,CC_KEY_DEL|CC_MOD_CTRL|CC_MOD_ALT, 56,LAST_KEY, 126,LAST_KEY,END_SEQ,CC_KEY_DEL|CC_MOD_CTRL|CC_MOD_ALT|CC_MOD_SHIFT, 126,LAST_KEY,END_SEQ,CC_KEY_DEL, 53,46, 59,LAST_KEY, 50,6, 126,LAST_KEY,END_SEQ,CC_KEY_PGUP|CC_MOD_SHIFT, 51,6, 126,LAST_KEY,END_SEQ,CC_KEY_PGUP|CC_MOD_ALT, 52,6, 126,LAST_KEY,END_SEQ,CC_KEY_PGUP|CC_MOD_ALT|CC_MOD_SHIFT, 53,6, 126,LAST_KEY,END_SEQ,CC_KEY_PGUP|CC_MOD_CTRL, 54,6, 126,LAST_KEY,END_SEQ,CC_KEY_PGUP|CC_MOD_CTRL|CC_MOD_SHIFT, 55,6, 126,LAST_KEY,END_SEQ,CC_KEY_PGUP|CC_MOD_CTRL|CC_MOD_ALT, 56,LAST_KEY, 126,LAST_KEY,END_SEQ,CC_KEY_PGUP|CC_MOD_CTRL|CC_MOD_ALT| CC_MOD_SHIFT, 54,46, 59,LAST_KEY, 50,6, 126,LAST_KEY,END_SEQ,CC_KEY_PGDOWN|CC_MOD_SHIFT, 51,6, 126,LAST_KEY,END_SEQ,CC_KEY_PGDOWN|CC_MOD_ALT, 52,6, 126,LAST_KEY,END_SEQ,CC_KEY_PGDOWN|CC_MOD_ALT|CC_MOD_SHIFT, 53,6, 126,LAST_KEY,END_SEQ,CC_KEY_PGDOWN|CC_MOD_CTRL, 54,6, 126,LAST_KEY,END_SEQ,CC_KEY_PGDOWN|CC_MOD_CTRL|CC_MOD_SHIFT, 55,6, 126,LAST_KEY,END_SEQ,CC_KEY_PGDOWN|CC_MOD_CTRL|CC_MOD_ALT, 56,LAST_KEY, 126,LAST_KEY,END_SEQ,CC_KEY_PGDOWN|CC_MOD_CTRL|CC_MOD_ALT| CC_MOD_SHIFT, 55,10, 36,4,END_SEQ,CC_KEY_HOME|CC_MOD_SHIFT, 126,LAST_KEY,END_SEQ,CC_KEY_HOME, 56,10, 36,4,END_SEQ,CC_KEY_END|CC_MOD_SHIFT, 126,LAST_KEY,END_SEQ,CC_KEY_END, 97,4,END_SEQ,CC_KEY_UP|CC_MOD_SHIFT, 98,4,END_SEQ,CC_KEY_DOWN|CC_MOD_SHIFT, 99,4,END_SEQ,CC_KEY_RIGHT|CC_MOD_SHIFT, 100,LAST_KEY,END_SEQ,CC_KEY_LEFT|CC_MOD_SHIFT }; void _cc_fillback(Cc_Win *win,attr_t ch) { long i; for(i=0;ivx*win->vy;i++)win->windata[i]=ch; } void _cc_addsymbol(Cc_Win *win,long x,long y,unsigned char sym) { if((x>=0)&&(xvx)&&(y>=0)&&(yvy)) win->windata[x+y*win->vx]= win->attr+(!_cc_uglycharset?A_ALTCHARSET:A_NORMAL)+sym; } void _cc_addchar(Cc_Win *win,long y,long x,unsigned char c) { if((x>=0)&&(xvx)&&(y>=0)&&(yvy)) win->windata[x+y*win->vx]=win->attr+c; } attr_t _cc_minch(Cc_Win *win,long y,long x) { if((x>=0)&&(xvx)&&(y>=0)&&(yvy))return win->windata[x+y*win->vx]; else return -1; } void _cc_maddch(Cc_Win *win,long y,long x,attr_t ch) { if((x>=0)&&(xvx)&&(y>=0)&&(yvy))win->windata[x+y*win->vx]=ch; } void _cc_mhline(Cc_Win *win,long x,long y,long n) { long i; for(i=x;iattr|=attr; attr_t oldattr=win->attr; for(i=0,p=0;pattr|=attr; win->attr|=A_UNDERLINE; } else { if(!ch)ch=true;else { _cc_windowinitdraw(win,cf,cb,false); win->attr|=attr; win->attr&=~A_UNDERLINE; } _cc_addchar(win,y,x+i,buffer[p]); } win->attr=oldattr; free(buffer); } void _cc_mprintw(Cc_Win *win,long y,long x,const char *fmt,...) { va_list args; unsigned char *buffer; long size; va_start(args,fmt); size=vsnprintf(buffer,0,fmt,args)+1; if(size<0)return; buffer=malloc(size); if(buffer==NULL)return; vsnprintf(buffer,size,fmt,args); va_end(args); long i,l=strlen(buffer); for(i=0;iattr=COLOR_PAIR(pair)+attr; if(back)_cc_fillback(win,COLOR_PAIR(pair)+attr+(!(attr&A_CHARTEXT)?' ':0)); } void _cc_mrefresh(Cc_Win *win) { long i,j,c,s,k; attr_t *data; CMAP *map; if(win!=&_cc_mainwin) { long x,y,vx,vy,ox,oy; bool paint=false,fade=false; if(win->extra->type==CC_TP_PAINT)paint=true; if(win->extra->type==TP_FADE)fade=true; x=0; y=0; cc_client_to_screen(win,&x,&y); vx=win->vx; vy=win->vy; if(x<0){vx+=x;ox=-x;x=0;}else ox=0; if(y<0){vy+=y;oy=-y;y=0;}else oy=0; if(vx>_cc_mainwin.vx-x)vx=_cc_mainwin.vx-x; if(vy>_cc_mainwin.vy-y)vy=_cc_mainwin.vy-y; for(j=y;jvx; for(i=s;iwindata[k]; _cc_cmap[i].win=win; _cc_cmap[i].nochange=false; } if(paint)_cc_cmap[i].paint=win; _cc_cmap[i].fade=fade; } } } else { for(j=0;j<_cc_mainwin.vy;j++) { map=_cc_cmap+j*_cc_mainwin.vx; for(i=0;i<_cc_mainwin.vx;i++)if(!(map++)->nochange)break; if(i<_cc_mainwin.vx) { wredrawln(stdscr,j,1); map=_cc_cmap+j*_cc_mainwin.vx; data=_cc_mainwin.windata+j*_cc_mainwin.vx; for(i=0;i<_cc_mainwin.vx;i++) { if(!map->nochange) { mvaddch(j,i,*data); map->nochange=true; } map++; data++; } } } } } long _cc_getcharfrom(long x,long y) { long px,py,ox,oy; Cc_Win *win; WINDOW *window; win=_cc_findwinonlypaint(x,y); if(win==NULL)return -1; px=0; py=0; cc_client_to_screen(win,&px,&py); if(px<0)ox=px;else ox=0; if(py<0)oy=py;else oy=0; px=x; py=y; cc_screen_to_client(win,&px,&py); return _cc_minch(win,py+oy,px+ox); } void _cc_checksymbol(Cc_Win *win,long x,long y) { long c; char ch,cl,cd,cu,cr; c=_cc_getcharfrom(x,y); if(c==-1)return; ch=c&A_CHARTEXT; c=c&A_ATTRIBUTES; cl=_cc_getcharfrom(x-1,y)&A_CHARTEXT; cr=_cc_getcharfrom(x+1,y)&A_CHARTEXT; cu=_cc_getcharfrom(x,y-1)&A_CHARTEXT; cd=_cc_getcharfrom(x,y+1)&A_CHARTEXT; if((cl==_cc_mapsymbol[HLINE])||(cl==_cc_mapsymbol[LUCORN])|| (cl==_cc_mapsymbol[LDCORN])||(cl==_cc_mapsymbol[LTEE])|| (cl==_cc_mapsymbol[UTEE])||(cl==_cc_mapsymbol[DTEE])|| (cl==_cc_mapsymbol[CROSS]))cl=true;else cl=false; if((cr==_cc_mapsymbol[HLINE])||(cr==_cc_mapsymbol[RDCORN])|| (cr==_cc_mapsymbol[RUCORN])||(cr==_cc_mapsymbol[RTEE])|| (cr==_cc_mapsymbol[UTEE])||(cr==_cc_mapsymbol[DTEE])|| (cr==_cc_mapsymbol[CROSS]))cr=true;else cr=false; if((cu==_cc_mapsymbol[VLINE])||(cu==_cc_mapsymbol[RUCORN])|| (cu==_cc_mapsymbol[LUCORN])||(cu==_cc_mapsymbol[UTEE])|| (cu==_cc_mapsymbol[LTEE])||(cu==_cc_mapsymbol[RTEE])|| (cu==_cc_mapsymbol[CROSS]))cu=true;else cu=false; if((cd==_cc_mapsymbol[VLINE])||(cd==_cc_mapsymbol[LDCORN])|| (cd==_cc_mapsymbol[RDCORN])||(cd==_cc_mapsymbol[DTEE])|| (cd==_cc_mapsymbol[LTEE])||(cd==_cc_mapsymbol[RTEE])|| (cd==_cc_mapsymbol[CROSS]))cd=true;else cd=false; if((cl||cr)&&!cu&&!cd)ch=_cc_mapsymbol[HLINE]; else if((!cl)&&(!cr)&&(cu||cd))ch=_cc_mapsymbol[VLINE]; else if(cl&&cr&&cu&&!cd)ch=_cc_mapsymbol[DTEE]; else if(cl&&cr&&!cu&&cd)ch=_cc_mapsymbol[UTEE]; else if(cl&&!cr&&cu&&cd)ch=_cc_mapsymbol[RTEE]; else if(!cl&&cr&&cu&&cd)ch=_cc_mapsymbol[LTEE]; else if(cl&&!cr&&cu&&!cd)ch=_cc_mapsymbol[RDCORN]; else if(!cl&&cr&&cu&&!cd)ch=_cc_mapsymbol[LDCORN]; else if(cl&&!cr&&!cu&&cd)ch=_cc_mapsymbol[RUCORN]; else if(!cl&&cr&&!cu&&cd)ch=_cc_mapsymbol[LUCORN]; else if(cl&&cr&&cu&&cd)ch=_cc_mapsymbol[CROSS]; cc_screen_to_client(win,&x,&y); _cc_maddch(win,y,x,c|ch); } void _cc_checkbars(Cc_Win *win,bool dorefresh) { if((win->extra->type==CC_TP_PAINT)&&(win->extra->paint.style==CC_PA_BORDER)&& _cc_isvisible(win)) { long i,x,y; x=0; y=0; cc_client_to_screen(win,&x,&y); if((win->vx==1)&&(win->vy>1)) { for(i=y;ivy;i++)_cc_checksymbol(win,x,i); } else if((win->vx>1)&&(win->vy==1)) { for(i=x;ivx;i++)_cc_checksymbol(win,i,y); } else if((win->vx>1)&&(win->vy>1)) { for(i=x;ivx-1;i++)_cc_checksymbol(win,i,y); for(i=y;ivy-1;i++)_cc_checksymbol(win,x+win->vx-1,i); for(i=x+win->vx-1;i>x;i--)_cc_checksymbol(win,i,y+win->vy-1); for(i=y+win->vy-1;i>y;i--)_cc_checksymbol(win,x,i); } if(dorefresh)_cc_mrefresh(win); } } void _cc_dokey(short key,unsigned short mod) { MEVENT event; if(key==KEY_MOUSE) { if((_cc_mouseactive==MOUSE_XTERM)&&(getmouse(&event)==OK)) { _cc_domouseevent(&event); } } else { long pos=0; short oldkey=key; while(pos=32)&&(oldkey<256))_cc_sendkeymessage(oldkey|mod); else if(oldkey==0)_cc_sendkeymessage(mod|CC_MOD_CTRL|' '); else if(((oldkey<9)&&(oldkey>0))||((oldkey>9)&&(oldkey<27))) _cc_sendkeymessage(mod|CC_MOD_CTRL|('A'+oldkey-1)); else if(oldkey>27) _cc_sendkeymessage(mod|CC_MOD_CTRL|('3'+oldkey-27)); break; } } else { pos+=2; key=getch(); } } else { while(getch()!=ERR); _cc_sendkeymessage((unsigned short)_cc_keymap[pos+1]|mod); break; } } } }