Platon Technologies
not logged in Login Registration
EnglishSlovak
open source software development celebrating 10 years of open source development! Friday, October 16, 2026

Diff for tucniak/cuchar/cc_term.c between version 1.1 and 1.2

version 1.1, 2005/11/25 22:41:24 version 1.2, 2005/11/27 20:14:50
Line 1 
Line 1 
 // Copyright (c) 2005 Michal Sudolsky  /*
 // modified by Juraj Kolesár <koli@koli.sk>    Name: lc_term.c
 #include "cuchar.h"    Author: Michal Sudolsky
     Date: 22.09.2005 15:45
   */
   // modified by Juraj Kolesar <koli@koli.sk>
   
   #include "cc.h"
   
 bool hascolors;  bool hascolors;
 long screenx,  long screenx,
      screeny;       screeny;
 bool uglycharset=false;  bool uglycharset=false;
 char *mapsymbol="lmkjtwuvqxna,+-.",  char *mapsymbol="lmkjtwuvqxna,+-.",
      *ugmsymbol="++++++++-|+ <>AV";       *ugmsymbol="++++++++-|+ <>AV";
 short keymap[]={  short keymap[]={
   KEY_LEFT,4,END_SEQ,KK_LEFT,    KEY_LEFT,4,END_SEQ,KK_LEFT,
   KEY_SLEFT,4,END_SEQ,KK_LEFT|MD_SHIFT,    KEY_SLEFT,4,END_SEQ,KK_LEFT|MD_SHIFT,
Line 323  short keymap[]={
Line 328  short keymap[]={
       100,LAST_KEY,END_SEQ,KK_LEFT|MD_SHIFT        100,LAST_KEY,END_SEQ,KK_LEFT|MD_SHIFT
 };  };
   
 void fillback(WIN *win,attr_t ch)  void fillback(WIN *win,attr_t ch)
 {  {
   long i;    long i;
   for(i=0;i<win->vx*win->vy;i++)win->windata[i]=ch;    for(i=0;i<win->vx*win->vy;i++)win->windata[i]=ch;
 }  }
   
 void addsymbol(WIN *win,long x,long y,unsigned char sym)  void addsymbol(WIN *win,long x,long y,unsigned char sym)
 {  {
   if((x>=0)&&(x<win->vx)&&(y>=0)&&(y<win->vy))    if((x>=0)&&(x<win->vx)&&(y>=0)&&(y<win->vy))
     win->windata[x+y*win->vx]=win->attr+(!uglycharset?A_ALTCHARSET:A_NORMAL)+sym;      win->windata[x+y*win->vx]=win->attr+(!uglycharset?A_ALTCHARSET:A_NORMAL)+sym;
 }  }
   
 void addchar(WIN *win,long y,long x,unsigned char c)  void addchar(WIN *win,long y,long x,unsigned char c)
 {  {
   if((x>=0)&&(x<win->vx)&&(y>=0)&&(y<win->vy))win->windata[x+y*win->vx]=win->attr+c;    if((x>=0)&&(x<win->vx)&&(y>=0)&&(y<win->vy))win->windata[x+y*win->vx]=win->attr+c;
 }  }
   
 attr_t minch(WIN *win,long y,long x)  attr_t minch(WIN *win,long y,long x)
 {  {
   if((x>=0)&&(x<win->vx)&&(y>=0)&&(y<win->vy))return win->windata[x+y*win->vx];    if((x>=0)&&(x<win->vx)&&(y>=0)&&(y<win->vy))return win->windata[x+y*win->vx];
   else return -1;    else return -1;
 }  }
   
 void maddch(WIN *win,long y,long x,attr_t ch)  void maddch(WIN *win,long y,long x,attr_t ch)
 {  {
   if((x>=0)&&(x<win->vx)&&(y>=0)&&(y<win->vy))win->windata[x+y*win->vx]=ch;    if((x>=0)&&(x<win->vx)&&(y>=0)&&(y<win->vy))win->windata[x+y*win->vx]=ch;
 }  }
   
 void mhline(WIN *win,long x,long y,long n)  void mhline(WIN *win,long x,long y,long n)
 {  {
   long i;    long i;
   for(i=x;i<x+n;i++)addsymbol(win,i,y,mapsymbol[HLINE]);    for(i=x;i<x+n;i++)addsymbol(win,i,y,mapsymbol[HLINE]);
 }  }
   
 void mvline(WIN *win,long x,long y,long n)  void mvline(WIN *win,long x,long y,long n)
 {  {
   long i;    long i;
   for(i=y;i<y+n;i++)addsymbol(win,x,i,mapsymbol[VLINE]);    for(i=y;i<y+n;i++)addsymbol(win,x,i,mapsymbol[VLINE]);
 }  }
   
 void mbox(WIN *win,long x,long y,long vx,long vy)  void mbox(WIN *win,long x,long y,long vx,long vy)
 {  {
   long i;    long i;
   addsymbol(win,x,y,mapsymbol[LUCORN]);    addsymbol(win,x,y,mapsymbol[LUCORN]);
   addsymbol(win,x+vx-1,y,mapsymbol[RUCORN]);    addsymbol(win,x+vx-1,y,mapsymbol[RUCORN]);
   addsymbol(win,x+vx-1,y+vy-1,mapsymbol[RDCORN]);    addsymbol(win,x+vx-1,y+vy-1,mapsymbol[RDCORN]);
   addsymbol(win,x,y+vy-1,mapsymbol[LDCORN]);    addsymbol(win,x,y+vy-1,mapsymbol[LDCORN]);
   mhline(win,x+1,y,vx-2);    mhline(win,x+1,y,vx-2);
   mvline(win,x+vx-1,y+1,vy-2);    mvline(win,x+vx-1,y+1,vy-2);
   mhline(win,x+1,y+vy-1,vx-2);    mhline(win,x+1,y+vy-1,vx-2);
   mvline(win,x,y+1,vy-2);    mvline(win,x,y+1,vy-2);
 }  }
   
 void mprintwmenu(WIN *win,long y,long x,long cb,long cf,long cfu,attr_t attr,const char *fmt,...)  void mprintwmenu(WIN *win,long y,long x,long cb,long cf,long cfu,attr_t attr,const char *fmt,...)
 {  {
   va_list args;    va_list args;
   unsigned char *buffer;    unsigned char *buffer;
   long size;    long size;
   va_start(args,fmt);    va_start(args,fmt);
   size=vsnprintf(buffer,0,fmt,args)+1;    size=vsnprintf(buffer,0,fmt,args)+1;
   if(size<0)return;    if(size<0)return;
   buffer=malloc(size);    buffer=malloc(size);
   if(buffer==NULL)return;    if(buffer==NULL)return;
   vsnprintf(buffer,size,fmt,args);    vsnprintf(buffer,size,fmt,args);
   va_end(args);    va_end(args);
   long i,p,l=strlen(buffer);    long i,p,l=strlen(buffer);
   bool ch=true;    bool ch=true;
   windowinitdraw(win,cf,cb,false);    windowinitdraw(win,cf,cb,false);
   win->attr|=attr;    win->attr|=attr;
Line 411  void mprintwmenu(WIN *win,long y,long x,
Line 416  void mprintwmenu(WIN *win,long y,long x,
         win->attr&=~A_UNDERLINE;          win->attr&=~A_UNDERLINE;
       }        }
       addchar(win,y,x+i,buffer[p]);        addchar(win,y,x+i,buffer[p]);
     }      }
   win->attr=oldattr;    win->attr=oldattr;
   free(buffer);    free(buffer);
 }  }
   
   void mprintw(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;i<l;i++)addchar(win,y,x+i,buffer[i]);
     free(buffer);
   }
   
 void mprintw(WIN *win,long y,long x,const char *fmt,...)  void windowinitdraw(WIN *win,char cf,char cb,char back)
 {  {
   va_list args;    long attr;
   unsigned char *buffer;    short pair=cb&0x7;
   long size;    pair<<=3;
   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;i<l;i++)addchar(win,y,x+i,buffer[i]);  
   free(buffer);  
 }  
   
 void windowinitdraw(WIN *win,char cf,char cb,char back)  
 {  
   long attr;  
   short pair=cb&0x7;  
   pair<<=3;  
   pair+=cf&0x7;    pair+=cf&0x7;
   if(pair==7)pair=0;else if(pair==0)pair=7;    if(pair==7)pair=0;else if(pair==0)pair=7;
   init_pair(pair,cf&0x7,cb&0x7);    init_pair(pair,cf&0x7,cb&0x7);
   if((cf&0x8)==0x8)attr=A_BOLD;else attr=A_NORMAL;    if((cf&0x8)==0x8)attr=A_BOLD;else attr=A_NORMAL;
   if(back==2)attr|=A_UNDERLINE;    if(back==2)attr|=A_UNDERLINE;
   if(back==3)attr|=A_REVERSE;    if(back==3)attr|=A_REVERSE;
   if((back==4)&&(!uglycharset))attr|=A_ALTCHARSET+'a';    if((back==4)&&(!uglycharset))attr|=A_ALTCHARSET+'a';
   win->attr=COLOR_PAIR(pair)+attr;    win->attr=COLOR_PAIR(pair)+attr;
   if(back)fillback(win,COLOR_PAIR(pair)+attr+(!(attr&A_CHARTEXT)?' ':0));    if(back)fillback(win,COLOR_PAIR(pair)+attr+(!(attr&A_CHARTEXT)?' ':0));
 }  }
   
 void mrefresh(WIN *win)  void mrefresh(WIN *win)
 {  {
   long i,j,c,s,k;    long i,j,c,s,k;
   if(win!=&mainwin)    if(win!=&mainwin)
   {    {
     long x,y,vx,vy,ox,oy;      long x,y,vx,vy,ox,oy;
     x=0;      x=0;
     y=0;      y=0;
     client_to_screen(win,&x,&y);      client_to_screen(win,&x,&y);
     vx=win->vx;      vx=win->vx;
     vy=win->vy;      vy=win->vy;
     if(x<0){vx+=x;ox=-x;x=0;}else ox=0;      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(y<0){vy+=y;oy=-y;y=0;}else oy=0;
     if(vx>mainwin.vx-x)vx=mainwin.vx-x;      if(vx>mainwin.vx-x)vx=mainwin.vx-x;
     if(vy>mainwin.vy-y)vy=mainwin.vy-y;      if(vy>mainwin.vy-y)vy=mainwin.vy-y;
     for(j=y;j<y+vy;j++)      for(j=y;j<y+vy;j++)
     {      {
       s=x+j*mainwin.vx;        s=x+j*mainwin.vx;
       c=s+vx;        c=s+vx;
       k=ox+(j-y+oy)*win->vx;        k=ox+(j-y+oy)*win->vx;
       for(i=s;i<c;i++,k++)mainwin.windata[i]=win->windata[k];        for(i=s;i<c;i++,k++)mainwin.windata[i]=win->windata[k];
     }      }
   }    }
   else    else
   {    {
     wredrawln(stdscr,0,mainwin.vy);      wredrawln(stdscr,0,mainwin.vy);
     for(j=0;j<mainwin.vy;j++)      for(j=0;j<mainwin.vy;j++)
       mvaddchnstr(j,0,mainwin.windata+j*mainwin.vx,mainwin.vx*mainwin.vy);        mvaddchnstr(j,0,mainwin.windata+j*mainwin.vx,mainwin.vx*mainwin.vy);
   }    }
 }  }
   
 long getcharfrom(long x,long y)  long getcharfrom(long x,long y)
 {  {
   long px,py,ox,oy;    long px,py,ox,oy;
   WIN *win;    WIN *win;
   WINDOW *window;    WINDOW *window;
   win=findwinonlypaint(x,y);    win=findwinonlypaint(x,y);
   if(win==NULL)return -1;    if(win==NULL)return -1;
   px=0;    px=0;
   py=0;    py=0;
   client_to_screen(win,&px,&py);    client_to_screen(win,&px,&py);
   if(px<0)ox=px;else ox=0;    if(px<0)ox=px;else ox=0;
   if(py<0)oy=py;else oy=0;    if(py<0)oy=py;else oy=0;
   px=x;    px=x;
   py=y;    py=y;
   screen_to_client(win,&px,&py);    screen_to_client(win,&px,&py);
   return minch(win,py+oy,px+ox);    return minch(win,py+oy,px+ox);
 }  }
   
 void checksymbol(WIN *win,long x,long y)  void checksymbol(WIN *win,long x,long y)
 {  {
   long c;    long c;
   char ch,cl,cd,cu,cr;    char ch,cl,cd,cu,cr;
   c=getcharfrom(x,y);    c=getcharfrom(x,y);
   if(c==-1)return;    if(c==-1)return;
   ch=c&A_CHARTEXT;    ch=c&A_CHARTEXT;
   c=c&A_ATTRIBUTES;    c=c&A_ATTRIBUTES;
   cl=getcharfrom(x-1,y)&A_CHARTEXT;    cl=getcharfrom(x-1,y)&A_CHARTEXT;
   cr=getcharfrom(x+1,y)&A_CHARTEXT;    cr=getcharfrom(x+1,y)&A_CHARTEXT;
   cu=getcharfrom(x,y-1)&A_CHARTEXT;    cu=getcharfrom(x,y-1)&A_CHARTEXT;
   cd=getcharfrom(x,y+1)&A_CHARTEXT;    cd=getcharfrom(x,y+1)&A_CHARTEXT;
   if((cl==mapsymbol[HLINE])||(cl==mapsymbol[LUCORN])||(cl==mapsymbol[LDCORN])||    if((cl==mapsymbol[HLINE])||(cl==mapsymbol[LUCORN])||(cl==mapsymbol[LDCORN])||
      (cl==mapsymbol[LTEE])||(cl==mapsymbol[UTEE])||(cl==mapsymbol[DTEE])||(cl==mapsymbol[CROSS]))cl=true;else cl=false;       (cl==mapsymbol[LTEE])||(cl==mapsymbol[UTEE])||(cl==mapsymbol[DTEE])||(cl==mapsymbol[CROSS]))cl=true;else cl=false;
   if((cr==mapsymbol[HLINE])||(cr==mapsymbol[RDCORN])||(cr==mapsymbol[RUCORN])||    if((cr==mapsymbol[HLINE])||(cr==mapsymbol[RDCORN])||(cr==mapsymbol[RUCORN])||
      (cr==mapsymbol[RTEE])||(cr==mapsymbol[UTEE])||(cr==mapsymbol[DTEE])||(cr==mapsymbol[CROSS]))cr=true;else cr=false;       (cr==mapsymbol[RTEE])||(cr==mapsymbol[UTEE])||(cr==mapsymbol[DTEE])||(cr==mapsymbol[CROSS]))cr=true;else cr=false;
   if((cu==mapsymbol[VLINE])||(cu==mapsymbol[RUCORN])||(cu==mapsymbol[LUCORN])||    if((cu==mapsymbol[VLINE])||(cu==mapsymbol[RUCORN])||(cu==mapsymbol[LUCORN])||
      (cu==mapsymbol[UTEE])||(cu==mapsymbol[LTEE])||(cu==mapsymbol[RTEE])||(cu==mapsymbol[CROSS]))cu=true;else cu=false;       (cu==mapsymbol[UTEE])||(cu==mapsymbol[LTEE])||(cu==mapsymbol[RTEE])||(cu==mapsymbol[CROSS]))cu=true;else cu=false;
   if((cd==mapsymbol[VLINE])||(cd==mapsymbol[LDCORN])||(cd==mapsymbol[RDCORN])||    if((cd==mapsymbol[VLINE])||(cd==mapsymbol[LDCORN])||(cd==mapsymbol[RDCORN])||
      (cd==mapsymbol[DTEE])||(cd==mapsymbol[LTEE])||(cd==mapsymbol[RTEE])||(cd==mapsymbol[CROSS]))cd=true;else cd=false;       (cd==mapsymbol[DTEE])||(cd==mapsymbol[LTEE])||(cd==mapsymbol[RTEE])||(cd==mapsymbol[CROSS]))cd=true;else cd=false;
   if((cl||cr)&&!cu&&!cd)ch=mapsymbol[HLINE];    if((cl||cr)&&!cu&&!cd)ch=mapsymbol[HLINE];
   else if((!cl)&&(!cr)&&(cu||cd))ch=mapsymbol[VLINE];    else if((!cl)&&(!cr)&&(cu||cd))ch=mapsymbol[VLINE];
   else if(cl&&cr&&cu&&!cd)ch=mapsymbol[DTEE];    else if(cl&&cr&&cu&&!cd)ch=mapsymbol[DTEE];
   else if(cl&&cr&&!cu&&cd)ch=mapsymbol[UTEE];    else if(cl&&cr&&!cu&&cd)ch=mapsymbol[UTEE];
   else if(cl&&!cr&&cu&&cd)ch=mapsymbol[RTEE];    else if(cl&&!cr&&cu&&cd)ch=mapsymbol[RTEE];
   else if(!cl&&cr&&cu&&cd)ch=mapsymbol[LTEE];    else if(!cl&&cr&&cu&&cd)ch=mapsymbol[LTEE];
   else if(cl&&!cr&&cu&&!cd)ch=mapsymbol[RDCORN];    else if(cl&&!cr&&cu&&!cd)ch=mapsymbol[RDCORN];
   else if(!cl&&cr&&cu&&!cd)ch=mapsymbol[LDCORN];    else if(!cl&&cr&&cu&&!cd)ch=mapsymbol[LDCORN];
   else if(cl&&!cr&&!cu&&cd)ch=mapsymbol[RUCORN];    else if(cl&&!cr&&!cu&&cd)ch=mapsymbol[RUCORN];
   else if(!cl&&cr&&!cu&&cd)ch=mapsymbol[LUCORN];    else if(!cl&&cr&&!cu&&cd)ch=mapsymbol[LUCORN];
   else if(cl&&cr&&cu&&cd)ch=mapsymbol[CROSS];    else if(cl&&cr&&cu&&cd)ch=mapsymbol[CROSS];
   screen_to_client(win,&x,&y);    screen_to_client(win,&x,&y);
   maddch(win,y,x,c|ch);    maddch(win,y,x,c|ch);
 }  }
   
 void checkbars(WIN *win,bool dorefresh)  void checkbars(WIN *win,bool dorefresh)
 {  {
   if((win->extra->type==TP_PAINT)&&(win->extra->paint.style==PA_BORDER))    if((win->extra->type==TP_PAINT)&&(win->extra->paint.style==PA_BORDER)&&
   {       isvisible(win))
     long i,x,y;    {
     x=0;      long i,x,y;
     y=0;      x=0;
     client_to_screen(win,&x,&y);      y=0;
     if((win->vx==1)&&(win->vy>1))      client_to_screen(win,&x,&y);
     {      if((win->vx==1)&&(win->vy>1))
       for(i=y;i<y+win->vy;i++)checksymbol(win,x,i);      {
     }        for(i=y;i<y+win->vy;i++)checksymbol(win,x,i);
     else if((win->vx>1)&&(win->vy==1))      }
     {      else if((win->vx>1)&&(win->vy==1))
       for(i=x;i<x+win->vx;i++)checksymbol(win,i,y);      {
     }        for(i=x;i<x+win->vx;i++)checksymbol(win,i,y);
     else if((win->vx>1)&&(win->vy>1))      }
     {      else if((win->vx>1)&&(win->vy>1))
       for(i=x;i<x+win->vx-1;i++)checksymbol(win,i,y);      {
       for(i=y;i<y+win->vy-1;i++)checksymbol(win,x+win->vx-1,i);        for(i=x;i<x+win->vx-1;i++)checksymbol(win,i,y);
       for(i=x+win->vx-1;i>x;i--)checksymbol(win,i,y+win->vy-1);        for(i=y;i<y+win->vy-1;i++)checksymbol(win,x+win->vx-1,i);
       for(i=y+win->vy-1;i>y;i--)checksymbol(win,x,i);        for(i=x+win->vx-1;i>x;i--)checksymbol(win,i,y+win->vy-1);
     }        for(i=y+win->vy-1;i>y;i--)checksymbol(win,x,i);
     if(dorefresh)mrefresh(win);      }
   }      if(dorefresh)mrefresh(win);
 }    }
   }
   
 void dokey(short key,unsigned short mod)  void dokey(short key,unsigned short mod)
 {  {
   MEVENT event;    MEVENT event;
   if(key==KEY_MOUSE)    if(key==KEY_MOUSE)
   {    {
     if((mouseactive==MOUSE_XTERM)&&(getmouse(&event)==OK))      if((mouseactive==MOUSE_XTERM)&&(getmouse(&event)==OK))
     {      {
       domouseevent(&event);        domouseevent(&event);
     }      }
   }    }
   else    else
Line 584  void dokey(short key,unsigned short mod)
Line 590  void dokey(short key,unsigned short mod)
             pos+=keymap[pos+1];              pos+=keymap[pos+1];
           else            else
           {            {
             if((oldkey>=32)&&(oldkey<256))sendkeymessage(oldkey|mod);              if((oldkey>=32)&&(oldkey<256))sendkeymessage(oldkey|mod);
             else if(oldkey==0)sendkeymessage(mod|MD_CTRL|' ');              else if(oldkey==0)sendkeymessage(mod|MD_CTRL|' ');
             else if(((oldkey<9)&&(oldkey>0))||((oldkey>9)&&(oldkey<27)))sendkeymessage(mod|MD_CTRL|('A'+oldkey-1));              else if(((oldkey<9)&&(oldkey>0))||((oldkey>9)&&(oldkey<27)))sendkeymessage(mod|MD_CTRL|('A'+oldkey-1));
             else if(oldkey>27)sendkeymessage(mod|MD_CTRL|('3'+oldkey-27));              else if(oldkey>27)sendkeymessage(mod|MD_CTRL|('3'+oldkey-27));
             break;              break;
           }            }
Line 604  void dokey(short key,unsigned short mod)
Line 610  void dokey(short key,unsigned short mod)
         break;          break;
       }        }
     }      }
   }    }
 }  }

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

Platon Group <platon@platon.org> http://platon.org/
Copyright © 2002-2006 Platon Group
Site powered by Metafox CMS
Go to Top