|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)ttgeneric.c 3.29 5/2/86"; ! 3: #endif ! 4: ! 5: /* ! 6: * Copyright (c) 1983 Regents of the University of California, ! 7: * All rights reserved. Redistribution permitted subject to ! 8: * the terms of the Berkeley Software License Agreement. ! 9: */ ! 10: ! 11: #include "ww.h" ! 12: #include "tt.h" ! 13: ! 14: char PC, *BC, *UP; ! 15: short ospeed; ! 16: ! 17: /* normal frame */ ! 18: short gen_frame[16] = { ! 19: ' ', '|', '-', '+', ! 20: '|', '|', '+', '+', ! 21: '-', '+', '-', '+', ! 22: '+', '+', '+', '+' ! 23: }; ! 24: ! 25: /* ANSI graphics frame */ ! 26: #define G (WWM_GRP << WWC_MSHIFT) ! 27: short ansi_frame[16] = { ! 28: ' ', 'x'|G, 'Q'|G, 'm'|G, ! 29: 'x'|G, 'x'|G, 'l'|G, 't'|G, ! 30: 'q'|G, 'j'|G, 'q'|G, 'v'|G, ! 31: 'k'|G, 'u'|G, 'w'|G, 'n'|G ! 32: }; ! 33: #define ANSI_AS "\033(0" /* ) */ ! 34: ! 35: struct tt_str *gen_CM; ! 36: struct tt_str *gen_IM; ! 37: struct tt_str *gen_IC; ! 38: struct tt_str *gen_IP; ! 39: struct tt_str *gen_EI; ! 40: struct tt_str *gen_DC; ! 41: struct tt_str *gen_AL; ! 42: struct tt_str *gen_DL; ! 43: struct tt_str *gen_CE; ! 44: struct tt_str *gen_CD; ! 45: struct tt_str *gen_CL; ! 46: struct tt_str *gen_VS; ! 47: struct tt_str *gen_VE; ! 48: struct tt_str *gen_TI; ! 49: struct tt_str *gen_TE; ! 50: struct tt_str *gen_SO; ! 51: struct tt_str *gen_SE; ! 52: struct tt_str *gen_US; ! 53: struct tt_str *gen_UE; ! 54: struct tt_str *gen_UP; ! 55: struct tt_str *gen_PC; ! 56: struct tt_str *gen_BC; ! 57: struct tt_str *gen_ND; ! 58: struct tt_str *gen_HO; ! 59: struct tt_str *gen_NL; ! 60: struct tt_str *gen_AS; ! 61: struct tt_str *gen_AE; ! 62: struct tt_str *gen_XS; ! 63: struct tt_str *gen_XE; ! 64: char gen_MI; ! 65: char gen_MS; ! 66: char gen_AM; ! 67: char gen_OS; ! 68: char gen_BS; ! 69: char gen_DB; ! 70: int gen_CO; ! 71: int gen_LI; ! 72: int gen_UG; ! 73: int gen_SG; ! 74: ! 75: gen_setinsert(new) ! 76: char new; ! 77: { ! 78: if (new) { ! 79: if (gen_IM) ! 80: ttxputs(gen_IM); ! 81: } else ! 82: if (gen_EI) ! 83: ttxputs(gen_EI); ! 84: tt.tt_insert = new; ! 85: } ! 86: ! 87: gen_setmodes(new) ! 88: register new; ! 89: { ! 90: register diff; ! 91: ! 92: diff = new ^ tt.tt_modes; ! 93: if (diff & WWM_REV) { ! 94: if (new & WWM_REV) { ! 95: if (gen_SO) ! 96: ttxputs(gen_SO); ! 97: } else ! 98: if (gen_SE) ! 99: ttxputs(gen_SE); ! 100: } ! 101: if (diff & WWM_UL) { ! 102: if (new & WWM_UL) { ! 103: if (gen_US) ! 104: ttxputs(gen_US); ! 105: } else ! 106: if (gen_UE) ! 107: ttxputs(gen_UE); ! 108: } ! 109: if (diff & WWM_GRP) { ! 110: if (new & WWM_GRP) { ! 111: if (gen_AS) ! 112: ttxputs(gen_AS); ! 113: } else ! 114: if (gen_AE) ! 115: ttxputs(gen_AE); ! 116: } ! 117: if (diff & WWM_USR) { ! 118: if (new & WWM_USR) { ! 119: if (gen_XS) ! 120: ttxputs(gen_XS); ! 121: } else ! 122: if (gen_XE) ! 123: ttxputs(gen_XE); ! 124: } ! 125: tt.tt_modes = new; ! 126: } ! 127: ! 128: gen_insline() ! 129: { ! 130: if (tt.tt_modes) /* for concept 100 */ ! 131: gen_setmodes(0); ! 132: if (gen_AL) ! 133: tttputs(gen_AL, gen_LI - tt.tt_row); ! 134: } ! 135: ! 136: gen_delline() ! 137: { ! 138: if (tt.tt_modes) /* for concept 100 */ ! 139: gen_setmodes(0); ! 140: if (gen_DL) ! 141: tttputs(gen_DL, gen_LI - tt.tt_row); ! 142: } ! 143: ! 144: gen_putc(c) ! 145: register char c; ! 146: { ! 147: if (tt.tt_ninsert != tt.tt_insert) ! 148: gen_setinsert(tt.tt_ninsert); ! 149: if (tt.tt_nmodes != tt.tt_modes) ! 150: gen_setmodes(tt.tt_nmodes); ! 151: if (tt.tt_insert) { ! 152: if (gen_IC) ! 153: tttputs(gen_IC, gen_CO - tt.tt_col); ! 154: ttputc(c); ! 155: if (gen_IP) ! 156: tttputs(gen_IP, gen_CO - tt.tt_col); ! 157: } else ! 158: ttputc(c); ! 159: if (++tt.tt_col == gen_CO) ! 160: if (gen_AM) ! 161: tt.tt_col = 0, tt.tt_row++; ! 162: else ! 163: tt.tt_col--; ! 164: } ! 165: ! 166: gen_write(p, n) ! 167: register char *p; ! 168: register n; ! 169: { ! 170: if (tt.tt_ninsert != tt.tt_insert) ! 171: gen_setinsert(tt.tt_ninsert); ! 172: if (tt.tt_nmodes != tt.tt_modes) ! 173: gen_setmodes(tt.tt_nmodes); ! 174: if (tt.tt_insert && (gen_IC || gen_IP)) { ! 175: while (--n >= 0) { ! 176: if (gen_IC) ! 177: tttputs(gen_IC, gen_CO - tt.tt_col); ! 178: ttputc(*p++); ! 179: if (gen_IP) ! 180: tttputs(gen_IP, gen_CO - tt.tt_col); ! 181: tt.tt_col++; ! 182: } ! 183: } else { ! 184: tt.tt_col += n; ! 185: ttwrite(p, n); ! 186: } ! 187: if (tt.tt_col == gen_CO) ! 188: if (gen_AM) ! 189: tt.tt_col = 0, tt.tt_row++; ! 190: else ! 191: tt.tt_col--; ! 192: } ! 193: ! 194: gen_move(row, col) ! 195: register char row, col; ! 196: { ! 197: if (tt.tt_row == row && tt.tt_col == col) ! 198: return; ! 199: if (!gen_MI && tt.tt_insert) ! 200: gen_setinsert(0); ! 201: if (!gen_MS && tt.tt_modes) ! 202: gen_setmodes(0); ! 203: if (tt.tt_row == row) { ! 204: if (tt.tt_col == col) ! 205: return; ! 206: if (tt.tt_col == col - 1) { ! 207: if (gen_ND) { ! 208: ttxputs(gen_ND); ! 209: goto out; ! 210: } ! 211: } else if (tt.tt_col == col + 1) { ! 212: if (gen_BC) { ! 213: ttxputs(gen_BC); ! 214: goto out; ! 215: } ! 216: } ! 217: } ! 218: if (tt.tt_col == col) { ! 219: if (tt.tt_row == row + 1) { ! 220: if (gen_UP) { ! 221: ttxputs(gen_UP); ! 222: goto out; ! 223: } ! 224: } else if (tt.tt_row == row + 1) { ! 225: ttxputs(gen_NL); ! 226: goto out; ! 227: } ! 228: } ! 229: if (gen_HO && col == 0 && row == 0) { ! 230: ttxputs(gen_HO); ! 231: goto out; ! 232: } ! 233: tttgoto(gen_CM, col, row); ! 234: out: ! 235: tt.tt_col = col; ! 236: tt.tt_row = row; ! 237: } ! 238: ! 239: gen_init() ! 240: { ! 241: if (gen_VS) ! 242: ttxputs(gen_VS); ! 243: if (gen_TI) ! 244: ttxputs(gen_TI); ! 245: ttxputs(gen_CL); ! 246: tt.tt_col = tt.tt_row = 0; ! 247: tt.tt_ninsert = tt.tt_insert = 0; ! 248: tt.tt_nmodes = tt.tt_modes = 0; ! 249: } ! 250: ! 251: gen_end() ! 252: { ! 253: if (gen_TE) ! 254: ttxputs(gen_TE); ! 255: if (gen_VE) ! 256: ttxputs(gen_VE); ! 257: } ! 258: ! 259: gen_clreol() ! 260: { ! 261: if (tt.tt_modes) /* for concept 100 */ ! 262: gen_setmodes(0); ! 263: tttputs(gen_CE, gen_CO - tt.tt_col); ! 264: } ! 265: ! 266: gen_clreos() ! 267: { ! 268: if (tt.tt_modes) /* for concept 100 */ ! 269: gen_setmodes(0); ! 270: tttputs(gen_CD, gen_LI - tt.tt_row); ! 271: } ! 272: ! 273: gen_clear() ! 274: { ! 275: if (tt.tt_modes) /* for concept 100 */ ! 276: gen_setmodes(0); ! 277: ttxputs(gen_CL); ! 278: } ! 279: ! 280: gen_delchar() ! 281: { ! 282: tttputs(gen_DC, gen_CO - tt.tt_col); ! 283: } ! 284: ! 285: tt_generic() ! 286: { ! 287: gen_PC = tttgetstr("pc"); ! 288: PC = gen_PC ? *gen_PC->ts_str : 0; ! 289: ospeed = wwoldtty.ww_sgttyb.sg_ospeed; ! 290: ! 291: gen_CM = ttxgetstr("cm"); /* may not work */ ! 292: gen_IM = ttxgetstr("im"); ! 293: gen_IC = tttgetstr("ic"); ! 294: gen_IP = tttgetstr("ip"); ! 295: gen_EI = ttxgetstr("ei"); ! 296: gen_DC = tttgetstr("dc"); ! 297: gen_AL = tttgetstr("al"); ! 298: gen_DL = tttgetstr("dl"); ! 299: gen_CE = tttgetstr("ce"); ! 300: gen_CD = tttgetstr("cd"); ! 301: gen_CL = ttxgetstr("cl"); ! 302: gen_VS = ttxgetstr("vs"); ! 303: gen_VE = ttxgetstr("ve"); ! 304: gen_TI = ttxgetstr("ti"); ! 305: gen_TE = ttxgetstr("te"); ! 306: gen_SO = ttxgetstr("so"); ! 307: gen_SE = ttxgetstr("se"); ! 308: gen_US = ttxgetstr("us"); ! 309: gen_UE = ttxgetstr("ue"); ! 310: gen_UP = ttxgetstr("up"); ! 311: gen_BC = ttxgetstr("bc"); ! 312: gen_ND = ttxgetstr("nd"); ! 313: gen_HO = ttxgetstr("ho"); ! 314: gen_NL = ttxgetstr("nl"); ! 315: gen_AS = ttxgetstr("as"); ! 316: gen_AE = ttxgetstr("ae"); ! 317: gen_XS = ttxgetstr("XS"); ! 318: gen_XE = ttxgetstr("XE"); ! 319: gen_MI = tgetflag("mi"); ! 320: gen_MS = tgetflag("ms"); ! 321: gen_AM = tgetflag("am"); ! 322: gen_OS = tgetflag("os"); ! 323: gen_BS = tgetflag("bs"); ! 324: gen_DB = tgetflag("db"); ! 325: gen_CO = tgetnum("co"); ! 326: gen_LI = tgetnum("li"); ! 327: gen_UG = tgetnum("ug"); ! 328: gen_SG = tgetnum("sg"); ! 329: ! 330: if (gen_NL == 0) { ! 331: static struct tt_str nl = { "\n", 1 }; ! 332: gen_NL = &nl; ! 333: } ! 334: if (gen_BC == 0 && gen_BS) { ! 335: static struct tt_str bc = { "\b", 1 }; ! 336: gen_BC = &bc; ! 337: } ! 338: BC = gen_BC ? gen_BC->ts_str : 0; ! 339: UP = gen_UP ? gen_UP->ts_str : 0; ! 340: if (gen_CL == 0 || gen_OS || gen_CM == 0) ! 341: return -1; ! 342: ! 343: if (gen_DC) ! 344: tt.tt_delchar = gen_delchar; ! 345: if (gen_AL) ! 346: tt.tt_insline = gen_insline; ! 347: if (gen_DL) ! 348: tt.tt_delline = gen_delline; ! 349: if (gen_CE) ! 350: tt.tt_clreol = gen_clreol; ! 351: if (gen_CD) ! 352: tt.tt_clreos = gen_clreos; ! 353: if (gen_SG > 0) ! 354: gen_SO = 0; ! 355: if (gen_UG > 0) ! 356: gen_US = 0; ! 357: if (gen_SO) ! 358: tt.tt_availmodes |= WWM_REV; ! 359: if (gen_US) ! 360: tt.tt_availmodes |= WWM_UL; ! 361: if (gen_AS) ! 362: tt.tt_availmodes |= WWM_GRP; ! 363: if (gen_XS) ! 364: tt.tt_availmodes |= WWM_USR; ! 365: tt.tt_hasinsert = gen_IM != 0; ! 366: tt.tt_wrap = gen_AM; ! 367: tt.tt_retain = gen_DB; ! 368: tt.tt_ncol = gen_CO; ! 369: tt.tt_nrow = gen_LI; ! 370: tt.tt_init = gen_init; ! 371: tt.tt_end = gen_end; ! 372: tt.tt_write = gen_write; ! 373: tt.tt_putc = gen_putc; ! 374: tt.tt_move = gen_move; ! 375: tt.tt_clear = gen_clear; ! 376: tt.tt_setinsert = gen_setinsert; ! 377: tt.tt_setmodes = gen_setmodes; ! 378: tt.tt_frame = gen_AS && !strncmp(gen_AS->ts_str, ANSI_AS, gen_AS->ts_n) ! 379: ? ansi_frame : gen_frame; ! 380: return 0; ! 381: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.