Annotation of coherent/g/usr/bin/vsh/winlib/initwin.c, revision 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.