Annotation of 43BSD/ucb/window/ttgeneric.c, revision 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.