Annotation of 43BSD/ucb/window/ttgeneric.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

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