|
|
1.1 ! root 1: int tgetname (); /* get termcap name */ ! 2: int tgetflag (); /* get termcap boolean value */ ! 3: int tgetnum (); /* get termcap numeric value */ ! 4: int tgetstr (); /* get termcap string value */ ! 5: ! 6: /* ! 7: * print_name: ! 8: * print name and aliases of current termcap entry. ! 9: */ ! 10: print_name () ! 11: { ! 12: char name[100]; ! 13: ! 14: tgetname (name); ! 15: printf ("%s,\n", name); ! 16: } ! 17: ! 18: /* ! 19: * print_bools: ! 20: * print all boolean fields of current termcap entry. ! 21: */ ! 22: print_bools () ! 23: { ! 24: int i, val; ! 25: bool stuffprinted = FALSE; ! 26: ! 27: for (i = 0; i < MAXBOOLS; i++) ! 28: if (val = tgetflag (boolcaps[i].capname)) { ! 29: if (val == 1) ! 30: printf ("\t%s,", boolcaps[i].infoname); ! 31: else ! 32: printf ("\t%s@,", boolcaps[i].infoname); ! 33: stuffprinted = TRUE; ! 34: } ! 35: if (stuffprinted) ! 36: (void) putchar ('\n'); ! 37: } ! 38: ! 39: /* ! 40: * print_nums: ! 41: * print all numeric fields of current termcap entry. ! 42: */ ! 43: print_nums () ! 44: { ! 45: int i, capval; ! 46: bool stuffprinted = FALSE; ! 47: ! 48: for (i = 0; i < MAXNUMS; i++) ! 49: if ((capval = tgetnum (numcaps[i].capname)) >= 0) { ! 50: printf ("\t%s#%d,", numcaps[i].infoname, capval); ! 51: stuffprinted = TRUE; ! 52: } ! 53: else if (capval == -2) { ! 54: printf ("\t%s@,", numcaps[i].infoname); ! 55: stuffprinted = TRUE; ! 56: } ! 57: if (stuffprinted) ! 58: (void) putchar ('\n'); ! 59: } ! 60: ! 61: /* ! 62: * print_strs: ! 63: * print all string fields of current termcap entry. ! 64: */ ! 65: print_strs () ! 66: { ! 67: int i, count = 0; ! 68: char capval[100]; ! 69: ! 70: for (i = 0; i < MAXSTRS; i++) { ! 71: tgetstr (strcaps[i].capname, capval); ! 72: if (!capval[0]) { ! 73: if (strcmp (strcaps[i].capname, "le") == 0) { ! 74: tgetstr ("bc", capval); ! 75: } ! 76: else if (strcmp (strcaps[i].capname, "ta") == 0) { ! 77: if (tgetflag ("pt")) { ! 78: capval[0] = '\t'; ! 79: capval[1] = '\0'; ! 80: } ! 81: } ! 82: } ! 83: if ((!capval[0]) && (strcaps[i].dflt)) ! 84: (void) strcpy (capval, strcaps[i].dflt); ! 85: if (capval[0]) { ! 86: if (strcmp (capval, "@") != 0) { ! 87: printf ("\t%s=", strcaps[i].infoname); ! 88: if (strcmp(strcaps[i].infoname,"use") != 0) { ! 89: put_str (capval); ! 90: printf (","); ! 91: } ! 92: else ! 93: printf ("%s,", capval); ! 94: } ! 95: else ! 96: printf ("\t%s@,", strcaps[i].infoname); ! 97: count++; ! 98: if (!(count %= 3)) ! 99: putchar ('\n'); ! 100: } ! 101: } ! 102: if (count) ! 103: (void) putchar ('\n'); ! 104: } ! 105: ! 106: /* ! 107: * put_str: ! 108: * translate strings to printable format and print them. ! 109: */ ! 110: put_str (s) ! 111: char *s; ! 112: { ! 113: bool rflag = FALSE; /* % codes */ ! 114: char *c; ! 115: int parm; ! 116: ! 117: if ((isdigit (*s)) || (*s == '.')) { /* handle padding */ ! 118: printf ("$<"); ! 119: while ((isdigit (*s)) || (*s == '.')) { ! 120: (void) putchar (*s); ! 121: s++; ! 122: } ! 123: if (*s == '*') { ! 124: (void) putchar (*s); ! 125: s++; ! 126: } ! 127: (void) putchar ('>'); ! 128: } ! 129: for (c = s; *c; c++) { /* scan for % codes (needs work) */ ! 130: if (*c == '%') { ! 131: c++; ! 132: switch (*c) { ! 133: case 'r': ! 134: rflag = TRUE; ! 135: break; ! 136: default: ! 137: break; /* ignore */ ! 138: } ! 139: } ! 140: } ! 141: parm = 0; ! 142: while (*s) { /* print the string */ ! 143: switch (*s) { ! 144: case '%': ! 145: s++; ! 146: switch (*s) { ! 147: case '%': ! 148: printf ("%%%%"); ! 149: break; ! 150: case 'i': ! 151: printf ("%%i"); ! 152: break; ! 153: case 'd': ! 154: parm++; ! 155: if ((rflag) && (parm <= 2)) { ! 156: if (parm == 1) ! 157: printf ("%%p2%%d"); ! 158: else ! 159: printf ("%%p1%%d"); ! 160: } ! 161: else ! 162: printf ("%%p%d%%d", parm); ! 163: break; ! 164: case '2': ! 165: parm++; ! 166: if ((rflag) && (parm <= 2)) { ! 167: if (parm == 1) ! 168: printf ("%%p2%%02d"); ! 169: else ! 170: printf ("%%p1%%02d"); ! 171: } ! 172: else ! 173: printf ("%%p%d%%02d", parm); ! 174: break; ! 175: case '3': ! 176: parm++; ! 177: if ((rflag) && (parm <= 2)) { ! 178: if (parm == 1) ! 179: printf ("%%p2%%03d"); ! 180: else ! 181: printf ("%%p1%%03d"); ! 182: } ! 183: else ! 184: printf ("%%p%d%%03d", parm); ! 185: break; ! 186: case '.': ! 187: parm++; ! 188: if ((rflag) && (parm <= 2)) { ! 189: if (parm == 1) ! 190: printf ("%%p2%%c"); ! 191: else ! 192: printf ("%%p1%%c"); ! 193: } ! 194: else ! 195: printf ("%%p%d%%c", parm); ! 196: break; ! 197: case '+': ! 198: s++; ! 199: parm++; ! 200: if ((rflag) && (parm <= 2)) { ! 201: if (parm == 1) ! 202: printf ("%%p2%%'%c'%%+%%c", *s); ! 203: else ! 204: printf ("%%p1%%'%c'%%+%%c", *s); ! 205: } ! 206: else ! 207: printf ("%%p%d%%'%c'%%+%%c", parm, *s); ! 208: break; ! 209: default: ! 210: break; /* ignore */ ! 211: } ! 212: break; ! 213: case '\200': ! 214: printf ("\\0"); ! 215: break; ! 216: case '\177': ! 217: printf ("^?"); ! 218: break; ! 219: case ',': ! 220: printf ("\\,"); ! 221: break; ! 222: case '\\': ! 223: printf ("\\\\"); ! 224: break; ! 225: case '^': ! 226: printf ("\\^"); ! 227: break; ! 228: case ':': ! 229: printf ("\\:"); ! 230: break; ! 231: case '\033': ! 232: printf ("\\E"); ! 233: break; ! 234: case '\n': ! 235: printf ("\\n"); ! 236: break; ! 237: case '\r': ! 238: printf ("\\r"); ! 239: break; ! 240: case '\t': ! 241: printf ("\\t"); ! 242: break; ! 243: case '\b': ! 244: printf ("\\b"); ! 245: break; ! 246: case '\f': ! 247: printf ("\\f"); ! 248: break; ! 249: case ' ': ! 250: printf ("\\s"); ! 251: break; ! 252: default: ! 253: if (*s < ' ') ! 254: printf ("^%c", *s + 'A' - 1); ! 255: else ! 256: (void) putchar (*s); ! 257: break; ! 258: } ! 259: s++; ! 260: } ! 261: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.