Annotation of 43BSD/contrib/emacs/src/terminfo.c, revision 1.1

1.1     ! root        1: /* Interface from Emacs to terminfo.
        !             2:    Copyright (C) 1985 Richard M. Stallman.
        !             3: 
        !             4: This file is part of GNU Emacs.
        !             5: 
        !             6: GNU Emacs is distributed in the hope that it will be useful,
        !             7: but WITHOUT ANY WARRANTY.  No author or distributor
        !             8: accepts responsibility to anyone for the consequences of using it
        !             9: or for whether it serves any particular purpose or works at all,
        !            10: unless he says so in writing.  Refer to the GNU Emacs General Public
        !            11: License for full details.
        !            12: 
        !            13: Everyone is granted permission to copy, modify and redistribute
        !            14: GNU Emacs, but only under the conditions described in the
        !            15: GNU Emacs General Public License.   A copy of this license is
        !            16: supposed to have been given to you along with GNU Emacs so you
        !            17: can know your rights and responsibilities.  It should be in a
        !            18: file named COPYING.  Among other things, the copyright notice
        !            19: and this notice must be preserved on all copies.  */
        !            20: 
        !            21: /* This is to avoid need to conditionalize interface to termcap.  */
        !            22: 
        !            23: #include "config.h"
        !            24: 
        !            25: char UP, BC, PC;
        !            26: short ospeed;
        !            27: 
        !            28: #ifdef NO_ARG_ARRAY
        !            29: tparam (string, outstring,
        !            30:        arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)
        !            31:      char *string;
        !            32:      char *outstring;
        !            33:      int arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9;
        !            34: {
        !            35:   char argp[10];
        !            36:   argp[0] = arg0; argp[1] = arg1; argp[2] = arg2;
        !            37:   argp[3] = arg3; argp[4] = arg4; argp[5] = arg5;
        !            38:   argp[6] = arg6; argp[7] = arg7; argp[8] = arg8;
        !            39:   argp[9] = arg9;
        !            40:   tparam1(string, outstring, &argp[0]);
        !            41: }
        !            42: #else /* no NO_ARG_ARRAY */
        !            43: tparam (string, outstring, arg)
        !            44:      char *string;
        !            45:      char *outstring;
        !            46:      int arg;
        !            47: {
        !            48:   tparam1 (string, outstring, &arg);
        !            49: }
        !            50: #endif /* no NO_ARG_ARRAY */
        !            51: 
        !            52: #define todigit(c) ((c) - '0')
        !            53: 
        !            54: /* Virtual TERMINFO machine */
        !            55: 
        !            56: #define TO_REG(c) (((int) c) - ((int) 'a'))
        !            57: #define REG(c) the_registers[TO_REG (c)]
        !            58: #define PUSH(x) *--sp = ((int) x);
        !            59: #define POP() *sp++
        !            60: 
        !            61: #define UN_OP(op)              \
        !            62: *sp = op (*sp);                        \
        !            63: continue
        !            64: 
        !            65: #define BIN_OP(op)             \
        !            66: sp[1] = ((sp[0]) op (sp[1]));  \
        !            67: sp += 1;                       \
        !            68: continue
        !            69: 
        !            70: #define SEND(c)                        \
        !            71: *outstring++ = ((char) c);     \
        !            72: continue
        !            73: 
        !            74: #define SSEND(f)               \
        !            75: sprintf (outstring, f, POP ());        \
        !            76: while (*outstring++ != '\0') ; \
        !            77: outstring -= 1;                        \
        !            78: continue
        !            79: 
        !            80: tparam1 (string, outstring, argp)
        !            81:      register char *string;
        !            82:      register char *outstring;
        !            83:      int *argp;
        !            84: { long the_registers[TO_REG ('z')];
        !            85:   long the_stack[50];
        !            86:   register long *sp = &the_stack[50];
        !            87:   register char c;
        !            88:   while ((c = *string++) != '\0')
        !            89:     switch (c)
        !            90:     {
        !            91:       case '%':
        !            92:        switch (c = *string++)
        !            93:        { case '%': SEND ('%');
        !            94:          case 'd': SSEND ("%d");
        !            95:           case '2':
        !            96:             string += 1;
        !            97:             SSEND ("%2d");
        !            98:           case '3':
        !            99:             string += 1;
        !           100:             SSEND ("%3d");
        !           101:           case '0':
        !           102:             c = *string;
        !           103:             string += 2;
        !           104:             SSEND ((c == '2') ? "%02d" : "%03d");
        !           105:          case 'c': SEND (((char) POP ()));
        !           106:          case 's': SSEND ("%s");
        !           107:          case 'p':
        !           108:            PUSH (argp[(todigit (*string++))-1]);
        !           109:            continue;
        !           110:          case 'P':
        !           111:            REG (*string++) = POP ();
        !           112:            continue;
        !           113:          case 'g':
        !           114:            PUSH (REG (*string++));
        !           115:            continue;
        !           116:          case '\'':
        !           117:            PUSH (*string);
        !           118:            string += 2;
        !           119:            continue;
        !           120:          case '{':
        !           121:          { int temp;
        !           122:            sscanf (string, "%d", &temp);
        !           123:            PUSH (temp);
        !           124:            while (*string++ != '}') ;
        !           125:            continue;
        !           126:          }
        !           127:          case '+': BIN_OP (+);
        !           128:          case '-': BIN_OP (-);
        !           129:          case '*': BIN_OP (*);
        !           130:          case '/': BIN_OP (/);
        !           131:          case 'm': BIN_OP (%);
        !           132:          case '&': BIN_OP (&);
        !           133:          case '|': BIN_OP (|);
        !           134:          case '^': BIN_OP (^);
        !           135:          case '=': BIN_OP (=);
        !           136:          case '<': BIN_OP (<);
        !           137:          case '>': BIN_OP (<);
        !           138:          case '!': UN_OP (!);
        !           139:          case '~': UN_OP (~);
        !           140:          case 'i':
        !           141:            argp[0] += 1;
        !           142:            argp[1] += 1;
        !           143:            continue;
        !           144:          case '?':
        !           145:          case 't':
        !           146:          case 'e':
        !           147:          case ';':
        !           148:          default:
        !           149:            continue;
        !           150:        } /* switch for % */
        !           151:       default: SEND (c);
        !           152:     } /* outer switch  */
        !           153:   *outstring = '\0';
        !           154: } /* tparam1 */
        !           155: 

unix.superglobalmegacorp.com

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