Back to index

tetex-bin  3.0
Functions
lib_acs.c File Reference
#include <curses.priv.h>
#include <term.h>

Go to the source code of this file.

Functions

 NCURSES_EXPORT_VAR (chtype)
 _nc_init_acs (void)

Function Documentation

Definition at line 57 of file lib_acs.c.

{
    chtype *fake_map = acs_map;
    chtype *real_map = SP != 0 ? SP->_acs_map : fake_map;
    int j;

    T(("initializing ACS map"));

    /*
     * If we're using this from curses (rather than terminfo), we are storing
     * the mapping information in the SCREEN struct so we can decide how to
     * render it.
     */
    if (real_map != fake_map) {
       for (j = 1; j < ACS_LEN; ++j) {
           real_map[j] = 0;
           fake_map[j] = A_ALTCHARSET | j;
           SP->_screen_acs_map[j] = FALSE;
       }
    } else {
       for (j = 1; j < ACS_LEN; ++j) {
           real_map[j] = 0;
       }
    }

    /*
     * Initializations for a UNIX-like multi-terminal environment.  Use
     * ASCII chars and count on the terminfo description to do better.
     */
    real_map['l'] = '+';    /* should be upper left corner */
    real_map['m'] = '+';    /* should be lower left corner */
    real_map['k'] = '+';    /* should be upper right corner */
    real_map['j'] = '+';    /* should be lower right corner */
    real_map['u'] = '+';    /* should be tee pointing left */
    real_map['t'] = '+';    /* should be tee pointing right */
    real_map['v'] = '+';    /* should be tee pointing up */
    real_map['w'] = '+';    /* should be tee pointing down */
    real_map['q'] = '-';    /* should be horizontal line */
    real_map['x'] = '|';    /* should be vertical line */
    real_map['n'] = '+';    /* should be large plus or crossover */
    real_map['o'] = '~';    /* should be scan line 1 */
    real_map['s'] = '_';    /* should be scan line 9 */
    real_map['`'] = '+';    /* should be diamond */
    real_map['a'] = ':';    /* should be checker board (stipple) */
    real_map['f'] = '\'';   /* should be degree symbol */
    real_map['g'] = '#';    /* should be plus/minus */
    real_map['~'] = 'o';    /* should be bullet */
    real_map[','] = '<';    /* should be arrow pointing left */
    real_map['+'] = '>';    /* should be arrow pointing right */
    real_map['.'] = 'v';    /* should be arrow pointing down */
    real_map['-'] = '^';    /* should be arrow pointing up */
    real_map['h'] = '#';    /* should be board of squares */
    real_map['i'] = '#';    /* should be lantern symbol */
    real_map['0'] = '#';    /* should be solid square block */
    /* these defaults were invented for ncurses */
    real_map['p'] = '-';    /* should be scan line 3 */
    real_map['r'] = '-';    /* should be scan line 7 */
    real_map['y'] = '<';    /* should be less-than-or-equal-to */
    real_map['z'] = '>';    /* should be greater-than-or-equal-to */
    real_map['{'] = '*';    /* should be greek pi */
    real_map['|'] = '!';    /* should be not-equal */
    real_map['}'] = 'f';    /* should be pound-sterling symbol */

#if !USE_WIDEC_SUPPORT
    if (_nc_unicode_locale() && _nc_locale_breaks_acs()) {
       acs_chars = NULL;
       ena_acs = NULL;
       enter_alt_charset_mode = NULL;
       exit_alt_charset_mode = NULL;
       set_attributes = NULL;
    }
#endif

    if (ena_acs != NULL) {
       TPUTS_TRACE("ena_acs");
       putp(ena_acs);
    }

    if (acs_chars != NULL) {
       size_t i = 0;
       size_t length = strlen(acs_chars);

       while (i + 1 < length) {
           if (acs_chars[i] != 0 && UChar(acs_chars[i]) < ACS_LEN) {
              real_map[UChar(acs_chars[i])] = UChar(acs_chars[i + 1]) | A_ALTCHARSET;
              if (SP != 0)
                  SP->_screen_acs_map[UChar(acs_chars[i])] = TRUE;
           }
           i += 2;
       }
    }
#ifdef TRACE
    /* Show the equivalent mapping, noting if it does not match the
     * given attribute, whether by re-ordering or duplication.
     */
    if (_nc_tracing & TRACE_CALLS) {
       size_t n, m;
       char show[ACS_LEN + 1];
       for (n = 1, m = 0; n < ACS_LEN; n++) {
           if (real_map[n] != 0) {
              show[m++] = (char) n;
              show[m++] = ChCharOf(real_map[n]);
           }
       }
       show[m] = 0;
       if (acs_chars == NULL || strcmp(acs_chars, show))
           _tracef("%s acs_chars %s",
                  (acs_chars == NULL) ? "NULL" : "READ",
                  _nc_visbuf(acs_chars));
       _tracef("%s acs_chars %s",
              (acs_chars == NULL)
              ? "NULL"
              : (strcmp(acs_chars, show)
                 ? "DIFF"
                 : "SAME"),
              _nc_visbuf(show));
    }
#endif /* TRACE */
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 50 of file lib_acs.c.

{
    0
};