Changeset 1bdffcb


Ignore:
Timestamp:
Jan 23, 2007, 11:49:14 PM (17 years ago)
Author:
Alejandro R. Sedeño <asedeno@mit.edu>
Branches:
master, barnowl_perlaim, debian, release-1.10, release-1.4, release-1.5, release-1.6, release-1.7, release-1.8, release-1.9
Children:
0c8ab5e
Parents:
4d17916
Message:
owl.h     - moved curses.h back up so building on Solaris would work.
configure - added test for resizeterm
global.c  - conditionally include resizeterm
fmtext.c  - remove tabs, rewrite parts of the colorpair manager
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • configure

    r15bd5ef r1bdffcb  
    28832883fi
    28842884
     2885{ echo "$as_me:$LINENO: checking for resizeterm" >&5
     2886if test $ac_cv_lib_ncurses_initscr = yes; then
     2887echo $ECHO_N "checking for resizeterm in -lncurses... $ECHO_C" >&6;
     2888else
     2889echo $ECHO_N "checking for resizeterm in -lcurses... $ECHO_C" >&6;
     2890fi }
     2891if test "${ac_cv_lib_curses_resizeterm+set}" = set; then
     2892  echo $ECHO_N "(cached) $ECHO_C" >&6
     2893else
     2894
     2895cat >conftest.$ac_ext <<_ACEOF
     2896/* confdefs.h.  */
     2897_ACEOF
     2898cat confdefs.h >>conftest.$ac_ext
     2899cat >>conftest.$ac_ext <<_ACEOF
     2900/* end confdefs.h.  */
     2901
     2902/* Override any GCC internal prototype to avoid an error.
     2903   Use char because int might match the return type of a GCC
     2904   builtin and then its argument prototype would still apply.  */
     2905#ifdef __cplusplus
     2906extern "C"
     2907#endif
     2908char resizeterm ();
     2909int
     2910main ()
     2911{
     2912return resizeterm ();
     2913  ;
     2914  return 0;
     2915}
     2916_ACEOF
     2917rm -f conftest.$ac_objext conftest$ac_exeext
     2918if { (ac_try="$ac_link"
     2919case "(($ac_try" in
     2920  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
     2921  *) ac_try_echo=$ac_try;;
     2922esac
     2923eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
     2924  (eval "$ac_link") 2>conftest.er1
     2925  ac_status=$?
     2926  grep -v '^ *+' conftest.er1 >conftest.err
     2927  rm -f conftest.er1
     2928  cat conftest.err >&5
     2929  echo "$as_me:$LINENO: \$? = $ac_status" >&5
     2930  (exit $ac_status); } &&
     2931         { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
     2932  { (case "(($ac_try" in
     2933  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
     2934  *) ac_try_echo=$ac_try;;
     2935esac
     2936eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
     2937  (eval "$ac_try") 2>&5
     2938  ac_status=$?
     2939  echo "$as_me:$LINENO: \$? = $ac_status" >&5
     2940  (exit $ac_status); }; } &&
     2941         { ac_try='test -s conftest$ac_exeext'
     2942  { (case "(($ac_try" in
     2943  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
     2944  *) ac_try_echo=$ac_try;;
     2945esac
     2946eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
     2947  (eval "$ac_try") 2>&5
     2948  ac_status=$?
     2949  echo "$as_me:$LINENO: \$? = $ac_status" >&5
     2950  (exit $ac_status); }; }; then
     2951  ac_cv_lib_curses_resizeterm=yes
     2952else
     2953  echo "$as_me: failed program was:" >&5
     2954sed 's/^/| /' conftest.$ac_ext >&5
     2955
     2956        ac_cv_lib_curses_resizeterm=no
     2957fi
     2958
     2959rm -f core conftest.err conftest.$ac_objext \
     2960      conftest$ac_exeext conftest.$ac_ext
     2961
     2962{ echo "$as_me:$LINENO: result: $ac_cv_lib_curses_resizeterm" >&5
     2963echo "${ECHO_T}$ac_cv_lib_curses_resizeterm" >&6; }
     2964
     2965if test $ac_cv_lib_curses_resizeterm = yes; then
     2966  cat >>confdefs.h <<_ACEOF
     2967#define HAVE_RESIZETERM 1
     2968_ACEOF
     2969
     2970fi
     2971
     2972fi
    28852973
    28862974{ echo "$as_me:$LINENO: checking for com_err in -lcom_err" >&5
  • fmtext.c

    racee046 r1bdffcb  
    235235    /* warning, this is sort of a hack */
    236236    if (owl_global_get_hascolors(&g)) {
    237       int pair, fg, bg;
     237      int fg, bg;
     238      short pair;
    238239      fg = f->fgcolorbuff[position];
    239240      bg = f->bgcolorbuff[position];
     
    242243      pair = owl_fmtext_get_colorpair(fg, bg);
    243244      if (pair != -1) {
    244         wattron(w, COLOR_PAIR(pair));
     245        wattron(w, COLOR_PAIR(pair));
    245246      }
    246247    }
     
    411412    found++;
    412413    _owl_fmtext_add_attr(f, OWL_FMTEXT_ATTR_REVERSE,
    413                         ptr2 - f->textbuff,
    414                         ptr2 - f->textbuff + len - 1);
     414                        ptr2 - f->textbuff,
     415                        ptr2 - f->textbuff + len - 1);
    415416
    416417    ptr1=ptr2+len;
     
    464465      /* if we've hit our max stack depth, print the @ and move on */
    465466      if (stacksize==32) {
    466         owl_fmtext_append_attr(f, "@", curattrs, curcolor, OWL_COLOR_DEFAULT);
    467         txtptr++;
    468         continue;
     467        owl_fmtext_append_attr(f, "@", curattrs, curcolor, OWL_COLOR_DEFAULT);
     468        txtptr++;
     469        continue;
    469470      }
    470471
    471472      /* if it's an @@, print an @ and continue */
    472473      if (txtptr[1]=='@') {
    473         owl_fmtext_append_attr(f, "@", curattrs, curcolor, OWL_COLOR_DEFAULT);
    474         txtptr+=2;
    475         continue;
    476       }
    477        
     474        owl_fmtext_append_attr(f, "@", curattrs, curcolor, OWL_COLOR_DEFAULT);
     475        txtptr+=2;
     476        continue;
     477      }
     478       
    478479      /* if there's no opener, print the @ and continue */
    479480      tmpptr=strpbrk(txtptr, "(<[{ ");
    480481      if (!tmpptr || tmpptr[0]==' ') {
    481         owl_fmtext_append_attr(f, "@", curattrs, curcolor, OWL_COLOR_DEFAULT);
    482         txtptr++;
    483         continue;
     482        owl_fmtext_append_attr(f, "@", curattrs, curcolor, OWL_COLOR_DEFAULT);
     483        txtptr++;
     484        continue;
    484485      }
    485486
    486487      /* check what command we've got, push it on the stack, start
    487         using it, and continue ... unless it's a color command */
     488        using it, and continue ... unless it's a color command */
    488489      buff=owl_malloc(tmpptr-ptr+20);
    489490      strncpy(buff, ptr, tmpptr-ptr);
    490491      buff[tmpptr-ptr]='\0';
    491492      if (!strcasecmp(buff, "@bold")) {
    492         attrstack[stacksize]=OWL_FMTEXT_ATTR_BOLD;
    493         chrstack[stacksize]=tmpptr[0];
    494         stacksize++;
    495         curattrs|=OWL_FMTEXT_ATTR_BOLD;
    496         txtptr+=6;
    497         owl_free(buff);
    498         continue;
     493        attrstack[stacksize]=OWL_FMTEXT_ATTR_BOLD;
     494        chrstack[stacksize]=tmpptr[0];
     495        stacksize++;
     496        curattrs|=OWL_FMTEXT_ATTR_BOLD;
     497        txtptr+=6;
     498        owl_free(buff);
     499        continue;
    499500      } else if (!strcasecmp(buff, "@b")) {
    500         attrstack[stacksize]=OWL_FMTEXT_ATTR_BOLD;
    501         chrstack[stacksize]=tmpptr[0];
    502         stacksize++;
    503         curattrs|=OWL_FMTEXT_ATTR_BOLD;
    504         txtptr+=3;
    505         owl_free(buff);
    506         continue;
     501        attrstack[stacksize]=OWL_FMTEXT_ATTR_BOLD;
     502        chrstack[stacksize]=tmpptr[0];
     503        stacksize++;
     504        curattrs|=OWL_FMTEXT_ATTR_BOLD;
     505        txtptr+=3;
     506        owl_free(buff);
     507        continue;
    507508      } else if (!strcasecmp(buff, "@i")) {
    508         attrstack[stacksize]=OWL_FMTEXT_ATTR_UNDERLINE;
    509         chrstack[stacksize]=tmpptr[0];
    510         stacksize++;
    511         curattrs|=OWL_FMTEXT_ATTR_UNDERLINE;
    512         txtptr+=3;
    513         owl_free(buff);
    514         continue;
     509        attrstack[stacksize]=OWL_FMTEXT_ATTR_UNDERLINE;
     510        chrstack[stacksize]=tmpptr[0];
     511        stacksize++;
     512        curattrs|=OWL_FMTEXT_ATTR_UNDERLINE;
     513        txtptr+=3;
     514        owl_free(buff);
     515        continue;
    515516      } else if (!strcasecmp(buff, "@italic")) {
    516         attrstack[stacksize]=OWL_FMTEXT_ATTR_UNDERLINE;
    517         chrstack[stacksize]=tmpptr[0];
    518         stacksize++;
    519         curattrs|=OWL_FMTEXT_ATTR_UNDERLINE;
    520         txtptr+=8;
    521         owl_free(buff);
    522         continue;
    523 
    524         /* if it's a color read the color, set the current color and
     517        attrstack[stacksize]=OWL_FMTEXT_ATTR_UNDERLINE;
     518        chrstack[stacksize]=tmpptr[0];
     519        stacksize++;
     520        curattrs|=OWL_FMTEXT_ATTR_UNDERLINE;
     521        txtptr+=8;
     522        owl_free(buff);
     523        continue;
     524
     525        /* if it's a color read the color, set the current color and
    525526           continue */
    526527      } else if (!strcasecmp(buff, "@color")
    527                 && owl_global_get_hascolors(&g)
    528                 && owl_global_is_colorztext(&g)) {
    529         owl_free(buff);
    530         txtptr+=7;
    531         tmpptr=strpbrk(txtptr, "@{[<()>]}");
    532         if (tmpptr &&
    533             ((txtptr[-1]=='(' && tmpptr[0]==')') ||
    534              (txtptr[-1]=='<' && tmpptr[0]=='>') ||
    535              (txtptr[-1]=='[' && tmpptr[0]==']') ||
    536              (txtptr[-1]=='{' && tmpptr[0]=='}'))) {
    537 
    538           /* grab the color name */
    539           buff=owl_malloc(tmpptr-txtptr+20);
    540           strncpy(buff, txtptr, tmpptr-txtptr);
    541           buff[tmpptr-txtptr]='\0';
    542 
    543           /* set it as the current color */
    544           curcolor=owl_util_string_to_color(buff);
    545           if (curcolor==-1) curcolor=OWL_COLOR_DEFAULT;
    546           owl_free(buff);
    547           txtptr=tmpptr+1;
    548           continue;
    549 
    550         } else {
    551 
    552         }
     528                && owl_global_get_hascolors(&g)
     529                && owl_global_is_colorztext(&g)) {
     530        owl_free(buff);
     531        txtptr+=7;
     532        tmpptr=strpbrk(txtptr, "@{[<()>]}");
     533        if (tmpptr &&
     534            ((txtptr[-1]=='(' && tmpptr[0]==')') ||
     535             (txtptr[-1]=='<' && tmpptr[0]=='>') ||
     536             (txtptr[-1]=='[' && tmpptr[0]==']') ||
     537             (txtptr[-1]=='{' && tmpptr[0]=='}'))) {
     538
     539          /* grab the color name */
     540          buff=owl_malloc(tmpptr-txtptr+20);
     541          strncpy(buff, txtptr, tmpptr-txtptr);
     542          buff[tmpptr-txtptr]='\0';
     543
     544          /* set it as the current color */
     545          curcolor=owl_util_string_to_color(buff);
     546          if (curcolor==-1) curcolor=OWL_COLOR_DEFAULT;
     547          owl_free(buff);
     548          txtptr=tmpptr+1;
     549          continue;
     550
     551        } else {
     552
     553        }
    553554
    554555      } else {
    555         /* if we didn't understand it, we'll print it.  This is different from zwgc
    556         * but zwgc seems to be smarter about some screw cases than I am
    557         */
    558         owl_fmtext_append_attr(f, "@", curattrs, curcolor, OWL_COLOR_DEFAULT);
    559         txtptr++;
    560         continue;
     556        /* if we didn't understand it, we'll print it.  This is different from zwgc
     557        * but zwgc seems to be smarter about some screw cases than I am
     558        */
     559        owl_fmtext_append_attr(f, "@", curattrs, curcolor, OWL_COLOR_DEFAULT);
     560        txtptr++;
     561        continue;
    561562      }
    562563
     
    574575      /* first, if the stack is empty we must bail (just print and go) */
    575576      if (stacksize==0) {
    576         buff=owl_malloc(5);
    577         buff[0]=ptr[0];
    578         buff[1]='\0';
    579         owl_fmtext_append_attr(f, buff, curattrs, curcolor, OWL_COLOR_DEFAULT);
    580         owl_free(buff);
    581         txtptr++;
    582         continue;
     577        buff=owl_malloc(5);
     578        buff[0]=ptr[0];
     579        buff[1]='\0';
     580        owl_fmtext_append_attr(f, buff, curattrs, curcolor, OWL_COLOR_DEFAULT);
     581        owl_free(buff);
     582        txtptr++;
     583        continue;
    583584      }
    584585
     
    586587         attribue and pop the stack */
    587588      if ((ptr[0]==')' && chrstack[stacksize-1]=='(') ||
    588           (ptr[0]=='>' && chrstack[stacksize-1]=='<') ||
    589           (ptr[0]==']' && chrstack[stacksize-1]=='[') ||
    590           (ptr[0]=='}' && chrstack[stacksize-1]=='{')) {
    591         int i;
    592         stacksize--;
    593         curattrs=OWL_FMTEXT_ATTR_NONE;
    594         for (i=0; i<stacksize; i++) {
    595           curattrs|=attrstack[i];
    596         }
    597         txtptr+=1;
    598         continue;
     589          (ptr[0]=='>' && chrstack[stacksize-1]=='<') ||
     590          (ptr[0]==']' && chrstack[stacksize-1]=='[') ||
     591          (ptr[0]=='}' && chrstack[stacksize-1]=='{')) {
     592        int i;
     593        stacksize--;
     594        curattrs=OWL_FMTEXT_ATTR_NONE;
     595        for (i=0; i<stacksize; i++) {
     596          curattrs|=attrstack[i];
     597        }
     598        txtptr+=1;
     599        continue;
    599600      } else {
    600         /* otherwise print and continue */
    601         buff=owl_malloc(5);
    602         buff[0]=ptr[0];
    603         buff[1]='\0';
    604         owl_fmtext_append_attr(f, buff, curattrs, curcolor, OWL_COLOR_DEFAULT);
    605         owl_free(buff);
    606         txtptr++;
    607         continue;
     601        /* otherwise print and continue */
     602        buff=owl_malloc(5);
     603        buff[0]=ptr[0];
     604        buff[1]='\0';
     605        owl_fmtext_append_attr(f, buff, curattrs, curcolor, OWL_COLOR_DEFAULT);
     606        owl_free(buff);
     607        txtptr++;
     608        continue;
    608609      }
    609610    } else {
     
    636637      text = format_fn(elem);
    637638      if (text) {
    638         owl_fmtext_append_normal(f, text);
    639         owl_free(text);
     639        owl_fmtext_append_normal(f, text);
     640        owl_free(text);
    640641      }
    641642    } else if (elem) {
     
    684685
    685686/* Assign pairs by request */
    686 int owl_fmtext_get_colorpair(int fg, int bg)
     687short owl_fmtext_get_colorpair(int fg, int bg)
    687688{
    688689  owl_colorpair_mgr *cpmgr;
    689   short pair, i;
     690  short pair, i, default_bg;
     691
     692#ifdef HAVE_USE_DEFAULT_COLORS
    690693  if (fg == OWL_COLOR_DEFAULT) fg = -1;
    691   if (bg == OWL_COLOR_DEFAULT) {
     694  default_bg = OWL_COLOR_DEFAULT;
     695#else
     696  if (fg == OWL_COLOR_DEFAULT) fg = 0;
     697  if (bg == OWL_COLOR_DEFAULT) bg = 0;
     698  default_bg = COLOR_BLACK;
     699#endif
     700
     701  if (bg == default_bg) {
     702    // default bg -> use color pairs initialized by owl.c
    692703    pair = fg;
    693704  } else {
     705    // looking for a pair we already set up for this draw.
    694706    cpmgr = owl_global_get_colorpair_mgr(&g);
    695707    pair = cpmgr->pairs[fg+1][bg];
    696     if (pair != -1) {
    697       short oldfg, oldbg;
    698       pair_content(pair, &oldfg, &oldbg);
    699       if (cpmgr->pairs[oldfg+1][oldbg] == pair) {
    700         cpmgr->pairs[oldfg+1][oldbg] = -1;
    701       }
    702       init_pair(pair, fg, bg);
    703       cpmgr->pairs[fg+1][bg] = pair;
    704       cpmgr->used[pair] = 1;
    705     } else {
     708    if (!(pair != -1 && cpmgr->used[pair])) {
     709      // If we didn't find a pair, search for a free one to assign.
    706710      // Skip the first COLORS, since they're static.
     711      // If we ever get 256 color curses, this will need more thought.
    707712      for(i = COLORS; i < COLOR_PAIRS; i++) {
    708         if (0 == cpmgr->used[i]) {
     713        if (!cpmgr->used[i]) {
     714          // Found a free pair
    709715          pair = i;
    710716          break;
     
    712718      }
    713719      if (pair != -1) {
    714         short oldfg, oldbg;
    715         pair_content(pair, &oldfg, &oldbg);
    716         if (cpmgr->pairs[oldfg+1][oldbg] == pair) {
    717           cpmgr->pairs[oldfg+1][oldbg] = -1;
    718         }
     720        // We found a free pair, initialize it.
    719721        init_pair(pair, fg, bg);
    720722        cpmgr->pairs[fg+1][bg] = pair;
    721723        cpmgr->used[pair] = 1;
    722724      } else {
    723         // Fail to skipping background.
     725        // We still don't have a pair, drop the background color. Too bad.
    724726        pair = fg;
    725727      }
  • global.c

    r7f792c1 r1bdffcb  
    394394  }
    395395
     396#ifdef HAVE_RESIZETERM
    396397  resizeterm(size.ws_row, size.ws_col);
     398#endif
    397399
    398400  /* re-initialize the windows */
  • owl.h

    r7f792c1 r1bdffcb  
    4141#define INC_OWL_H
    4242
     43#ifndef OWL_PERL
     44#include <curses.h>
     45#endif
    4346#include <sys/param.h>
    4447#include <EXTERN.h>
     
    6366#include "XSUB.h"
    6467#else
    65 #include <curses.h>
    6668typedef void SV;
    6769#endif
Note: See TracChangeset for help on using the changeset viewer.