|
|
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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.