Annotation of coherent/g/usr/bin/vsh/winlib/initwin.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  *     Initialize the windows system
                      3:  *
                      4:  *      Copyright (c) 1990-93 by Udo Munk
                      5:  */
                      6: 
                      7: #ifdef AIX
                      8: #define NLS
                      9: #endif
                     10: 
                     11: #include <curses.h>
                     12: #include <term.h>
                     13: #include <setjmp.h>
                     14: #include <signal.h>
                     15: #ifdef SCO32
                     16: #include <sys/termio.h>
                     17: #include "ptem.h"
                     18: #endif
                     19: #ifdef SYSV4
                     20: #include <termios.h>
                     21: #endif
                     22: #ifdef AIX
                     23: #include <sys/ioctl.h>
                     24: #endif
                     25: #include "winfun.h"
                     26: 
                     27: extern char *malloc();
                     28: extern void free();
                     29: 
                     30: chtype ul_corner, ur_corner, ll_corner, lr_corner, r_tee, l_tee, b_tee, t_tee,
                     31:        h_line, v_line, u_arrow, d_arrow, checkboard, fullboard;
                     32: 
                     33: W_LIST *wl = (W_LIST *) 0;
                     34: 
                     35: int tab_active = 0;
                     36: 
                     37: initwin(tflag, eflag, lin, col, errmsg)
                     38: int tflag;
                     39: int lin, col;
                     40: char *errmsg;
                     41: {
                     42:        register char *p;
                     43: 
                     44: #if defined(SIGWINCH) && defined(TIOCGWINSZ)
                     45:        int sigwinch_handler();
                     46:        signal(SIGWINCH, sigwinch_handler);
                     47: #endif
                     48:        initscr();
                     49:        keypad(stdscr, TRUE);
                     50:        raw();
                     51:        noecho();
                     52:        nonl();
                     53: #ifdef INTRFLUSH
                     54:        intrflush(stdscr, FALSE);
                     55: #endif
                     56: #ifdef NOTYPEAHEAD
                     57:        typeahead(-1);
                     58: #endif
                     59: 
                     60:        if(LINES < lin || COLS < col) {
                     61:                endwin();
                     62:                fprintf(stderr, "%s\n", errmsg);
                     63:                exit(1);
                     64:        }
                     65: 
                     66:        if (wl == (W_LIST *) 0) {
                     67:                if ((wl = (W_LIST *) malloc(sizeof(W_LIST))) == NULL)
                     68:                        nomem();
                     69:                wl->w_w = stdscr;
                     70:                wl->w_next = (W_LIST *) 0;
                     71:        }
                     72: 
                     73:        if (!tflag) {
                     74:                ul_corner  = '+';
                     75:                ur_corner  = '+';
                     76:                ll_corner  = '+';
                     77:                lr_corner  = '+';
                     78:                r_tee      = '+';
                     79:                l_tee      = '+';
                     80:                b_tee      = '+';
                     81:                t_tee      = '+';
                     82:                h_line     = '-';
                     83:                v_line     = '|';
                     84:                u_arrow    = '^';
                     85:                d_arrow    = 'v';
                     86:                checkboard = ' ' | A_REVERSE;
                     87:                fullboard  = '#';
                     88:        } else {
                     89:                ul_corner  = 'l' | A_ALTCHARSET;
                     90:                ur_corner  = 'k' | A_ALTCHARSET;
                     91:                ll_corner  = 'm' | A_ALTCHARSET;
                     92:                lr_corner  = 'j' | A_ALTCHARSET;
                     93:                r_tee      = 'u' | A_ALTCHARSET;
                     94:                l_tee      = 't' | A_ALTCHARSET;
                     95:                b_tee      = 'v' | A_ALTCHARSET;
                     96:                t_tee      = 'w' | A_ALTCHARSET;
                     97:                h_line     = 'q' | A_ALTCHARSET;
                     98:                v_line     = 'x' | A_ALTCHARSET;
                     99:                u_arrow    = '^';
                    100:                d_arrow    = 'v';
                    101:                checkboard = ' ' | A_REVERSE;
                    102:                fullboard  = '#';
                    103:        }
                    104: 
                    105:        if (eflag)
                    106:                return;
                    107: 
                    108: #ifdef AIX
                    109:        p = box_chars_1;
                    110:        ul_corner = *(p+0) & 0377 | A_ALTCHARSET;
                    111:        h_line = *(p+1) & 0377 | A_ALTCHARSET;
                    112:        ur_corner = *(p+2) & 0377 | A_ALTCHARSET;
                    113:        v_line = *(p+3) & 0377 | A_ALTCHARSET;
                    114:        lr_corner = *(p+4) & 0377 | A_ALTCHARSET;
                    115:        ll_corner = *(p+5) & 0377 | A_ALTCHARSET;
                    116:        t_tee = *(p+6) & 0377 | A_ALTCHARSET;
                    117:        r_tee = *(p+7) & 0377 | A_ALTCHARSET;
                    118:        b_tee = *(p+8) & 0377 | A_ALTCHARSET;
                    119:        l_tee = *(p+9) & 0377 | A_ALTCHARSET;
                    120: #else
                    121: #ifdef ACS_ULCORNER
                    122:        ul_corner = ACS_ULCORNER;
                    123:        ur_corner = ACS_URCORNER;
                    124:        lr_corner = ACS_LRCORNER;
                    125:        ll_corner = ACS_LLCORNER;
                    126:        t_tee = ACS_TTEE;
                    127:        b_tee = ACS_BTEE;
                    128:        l_tee = ACS_LTEE;
                    129:        r_tee = ACS_RTEE;
                    130:        h_line = ACS_HLINE;
                    131:        v_line = ACS_VLINE;
                    132:        if (ACS_UARROW)
                    133:                u_arrow = ACS_UARROW;
                    134:        if (ACS_DARROW)
                    135:                d_arrow = ACS_DARROW;
                    136:        if (ACS_CKBOARD)
                    137:                checkboard = ACS_CKBOARD;
                    138:        if (ACS_BLOCK)
                    139:                fullboard = ACS_BLOCK;
                    140: #else
                    141: #ifdef OLDACS
                    142:        p = acs_chars;
                    143:        do {
                    144:                switch (*p) {
                    145:                case 'l':       /* upper left corner */
                    146:                        ul_corner = *++p & 0377 | A_ALTCHARSET;
                    147:                        break;
                    148:                case 'k':       /* upper right corner */
                    149:                        ur_corner = *++p & 0377 | A_ALTCHARSET;
                    150:                        break;
                    151:                case 'm':       /* lower left corner */
                    152:                        ll_corner = *++p & 0377 | A_ALTCHARSET;
                    153:                        break;
                    154:                case 'j':       /* lower right corner */
                    155:                        lr_corner = *++p & 0377 | A_ALTCHARSET;
                    156:                        break;
                    157:                case 'q':       /* horizontale line */
                    158:                        h_line = *++p & 0377 | A_ALTCHARSET;
                    159:                        break;
                    160:                case 'x':       /* verticale line */
                    161:                        v_line = *++p & 0377 | A_ALTCHARSET;
                    162:                        break;
                    163:                case 't':       /* left tee */
                    164:                        l_tee = *++p & 0377 | A_ALTCHARSET;
                    165:                        break;
                    166:                case 'u':       /* right tee */
                    167:                        r_tee = *++p & 0377 | A_ALTCHARSET;
                    168:                        break;
                    169:                case 'w':       /* upper tee */
                    170:                        t_tee = *++p & 0377 | A_ALTCHARSET;
                    171:                        break;
                    172:                case 'v':       /* lower tee */
                    173:                        b_tee = *++p & 0377 | A_ALTCHARSET;
                    174:                        break;
                    175:                case '-':       /* arrow up */
                    176:                        u_arrow = *++p & 0377 | A_ALTCHARSET;
                    177:                        break;
                    178:                case '.':       /* arrow down */
                    179:                        d_arrow = *++p & 0377 | A_ALTCHARSET;
                    180:                        break;
                    181:                case 'a':       /* checkboard */
                    182:                        checkboard = *++p & 0377 | A_ALCHARSET;
                    183:                        break;
                    184:                case '0':       /* full board */
                    185:                        fullboard = *++p & 0377 | A_ALTCHARSET;
                    186:                        break;
                    187:                default:
                    188:                        p++;
                    189:                }
                    190:        } while (*p && *++p);
                    191: #endif
                    192: #endif
                    193: #endif
                    194: }
                    195: 
                    196: #if defined(SIGWINCH) && defined(TIOCGWINSZ)
                    197: static int sigwinch_handler()
                    198: {
                    199:        extern jmp_buf reset_win;
                    200:        struct winsize ws;
                    201: 
                    202:        if (ioctl(fileno(stdin), TIOCGWINSZ, (char *) &ws) == 0) {
                    203:                close_all_windows();
                    204:                free(wl);
                    205:                wl = (W_LIST *) 0;
                    206:                delwin(stdscr);
                    207:                endwin();
                    208:                LINES = ws.ws_row;
                    209:                COLS = ws.ws_col;
                    210:                signal(SIGWINCH, sigwinch_handler);
                    211:                longjmp(reset_win, 0);
                    212:        }
                    213: }
                    214: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.