|
|
1.1 ! root 1: #include <stdio.h> ! 2: ! 3: /* EMACS_MODES: c, !fill */ ! 4: ! 5: /* terminal type tester. exercises terminal capabilities to dest ! 6: * their definition and use. */ ! 7: ! 8: extern char *UP; /* cursor up line */ ! 9: extern char *DOWN; ! 10: extern char *BACK; ! 11: extern char *FORWARD; ! 12: extern char *HOME; ! 13: extern char *CLEAR; ! 14: extern char *CLREST; ! 15: extern char *CLINE; ! 16: extern char *BELL; ! 17: extern char *CURAD; ! 18: extern char *TMAP; ! 19: extern char *NOP; ! 20: extern char *LOPEN; ! 21: extern char *LDEL; ! 22: extern char *INSERTC; ! 23: extern char *INSERTM; ! 24: extern char *OSERTC; ! 25: extern char *INSERTP; ! 26: extern char *DELC; ! 27: extern char *SSCROLL; ! 28: extern char *RSCROLL; ! 29: extern char *CR; ! 30: extern char *SCREG; ! 31: extern char *ULINE; ! 32: extern int EOVER; ! 33: extern char *SCINIT; ! 34: extern char *VEXIT; ! 35: extern int XBASE; ! 36: extern int YBASE; ! 37: extern int SCRWID; ! 38: extern int SCRNLIN; ! 39: extern int SCRWRAP; ! 40: extern int VCOST; ! 41: extern int SRCADD; ! 42: extern int MI; ! 43: extern int IN; ! 44: extern int DELMODE; ! 45: extern char *RELUP; ! 46: extern char *RELDOWN; ! 47: extern char *RELFORW; ! 48: extern char *RELBACK; ! 49: ! 50: extern int scrlin,scrcol; ! 51: ! 52: pause() ! 53: { ! 54: mgetchar(); ! 55: } ! 56: ! 57: main() ! 58: { ! 59: int i; ! 60: ! 61: ttystart(); /* start terminal processing */ ! 62: ! 63: /* Clear screen test */ ! 64: ! 65: xprintf ("\n\n Clear Screen Test"); ! 66: pause(); ! 67: clear(); ! 68: xprintf ( ! 69: "*\n Screen was cleared, astrick @ upper left of screen"); ! 70: pause(); ! 71: ! 72: /* Cursor addressing: */ ! 73: ! 74: clear(); ! 75: ! 76: if (CURAD) { ! 77: for (i = 0; i <= SCRWID; i++) { ! 78: scrlin = -100; /* make sure we do cursor movement */ ! 79: mgo(10,i); ! 80: putchar((i&07)+'0'); ! 81: } ! 82: mgo(12,10); ! 83: xprintf ("Above line should count accross the screen 0-7"); ! 84: pause(); ! 85: clear(); ! 86: for (i = 0; i < SCRNLIN; i++) { ! 87: scrlin = -100; ! 88: mgo(i,SCRWID/2); ! 89: xprintf ("%d",i); ! 90: } ! 91: mgo(0,0); ! 92: xprintf ("Screen should"); ! 93: mgo(1,0); ! 94: xprintf ("have a line"); ! 95: mgo(2,0); ! 96: xprintf ("counting down"); ! 97: mgo(3,0); ! 98: xprintf ("the middle"); ! 99: pause(); ! 100: clear(); ! 101: } ! 102: if (!CURAD) { ! 103: switch ((RELUP!=0)+ ! 104: (RELDOWN!=0)+ ! 105: (RELFORW!=0)+ ! 106: (RELBACK!=0)) { ! 107: ! 108: default: ! 109: xprintf("ru, rd, rr and rl must all be defined"); ! 110: pause(); ! 111: clear(); ! 112: die(0); ! 113: ! 114: case 4 : ; ! 115: /* Need some relative addressing tests here */ ! 116: ! 117: case 0: ; ! 118: } ! 119: } ! 120: if ((!CURAD)&&(!RELUP)&&((!UP)||(!DOWN)||((!CR)&&(!BACK)))) { ! 121: xprintf( ! 122: "Must have cursor addressing, or up, do & (cr or bc)"); ! 123: pause(); ! 124: clear(); ! 125: die(0); ! 126: } ! 127: /* RELATIVE SCREEN MOTION */ ! 128: ! 129: if (BACK) { ! 130: mgo(5,0); ! 131: xprintf ("Drawing backwards from 10,20 to 10,0"); ! 132: mgo(10,20); ! 133: for (i = 0; i < 20; i++) { ! 134: putchar('x'); ! 135: eprintf(BACK); ! 136: eprintf(BACK); ! 137: } ! 138: putchar('x'); ! 139: eprintf(BACK); ! 140: pause(); ! 141: clear(); ! 142: } ! 143: if (FORWARD) { ! 144: mgo(5,0); ! 145: xprintf ("Drawing Forwards from 10,0 to 10,20"); ! 146: if (BACK==0) { ! 147: mgo(6,0); ! 148: xprintf("Skipping everyother character"); ! 149: } ! 150: mgo(10,0); ! 151: for (i = 0; i < 20; i++) { ! 152: putchar('x'); ! 153: if (BACK) eprintf(BACK); ! 154: else i++; ! 155: eprintf(FORWARD); ! 156: } ! 157: putchar('x'); ! 158: eprintf(BACK); ! 159: pause(); ! 160: clear(); ! 161: } ! 162: if (DOWN) { ! 163: mgo(0,5); ! 164: if (BACK) xprintf ("Drawing down from 1,20 to 21,20"); ! 165: else xprintf("Drawing down diagonal from 1,20 to 21,40"); ! 166: mgo(1,20); ! 167: for (i = 0; i < 20; i++) { ! 168: putchar('x'); ! 169: eprintf(BACK); ! 170: eprintf(DOWN); ! 171: } ! 172: putchar('x'); ! 173: eprintf(BACK); ! 174: pause(); ! 175: clear(); ! 176: } ! 177: if (UP) { ! 178: mgo(0,5); ! 179: if (BACK) xprintf ("Drawing UP from 21,20 to 1,20"); ! 180: else xprintf("Drawing up diagonal from 21,20 to 1,40"); ! 181: mgo(21,20); ! 182: for (i = 0; i < 20; i++) { ! 183: putchar('x'); ! 184: eprintf(BACK); ! 185: eprintf(UP); ! 186: } ! 187: putchar('x'); ! 188: eprintf(BACK); ! 189: pause(); ! 190: clear(); ! 191: } ! 192: /* Carriage Return */ ! 193: ! 194: if (CR) { ! 195: mgo(10,25); ! 196: xprintf ("Carriage"); ! 197: mgo(10,0); ! 198: xprintf ("Return"); ! 199: pause(); ! 200: clear(); ! 201: } ! 202: ! 203: /* HOME */ ! 204: ! 205: if (HOME) { ! 206: mgo(10,25); ! 207: xprintf ("Going"); ! 208: eprintf (HOME); ! 209: printf("Home"); ! 210: pause(); ! 211: clear(); ! 212: } ! 213: ! 214: /* Wrapping */ ! 215: ! 216: if (SCRWRAP) { ! 217: mgo(5,SCRWID-6); ! 218: printf("cursor wraps"); ! 219: if (CURAD) { ! 220: scrlin = -100; ! 221: mgo(7,0); ! 222: } else { ! 223: printf("\r\n"); /* PUNT for terminal with no CM */ ! 224: } ! 225: printf("wraps under wraps"); ! 226: pause(); ! 227: clear(); ! 228: } ! 229: ! 230: if (CLINE) { ! 231: mgo(10,0); ! 232: xprintf ("clearing everything after clear"); ! 233: mgo(11,0); ! 234: xprintf ("clearing everything after clear"); ! 235: mgo(10,5); ! 236: clrl(); ! 237: pause(); ! 238: clear(); ! 239: } ! 240: /* BELL */ ! 241: ! 242: if (BELL) { ! 243: xprintf ("beep beep beep"); ! 244: beep(); ! 245: sdelay(1000); ! 246: beep(); ! 247: sdelay(1000); ! 248: beep(); ! 249: clear(); ! 250: } ! 251: if (SSCROLL){ ! 252: mgo(SCRNLIN-1,0); ! 253: printf ("scrolling"); ! 254: eprintf(SSCROLL); ! 255: mgo(SCRNLIN-1,0); ! 256: printf("up"); ! 257: eprintf(SSCROLL); ! 258: mgo(SCRNLIN-1,0); ! 259: printf("the"); ! 260: eprintf(SSCROLL); ! 261: mgo(SCRNLIN-1,0); ! 262: printf("screen"); ! 263: pause(); ! 264: clear(); ! 265: } ! 266: if (INSERTC||INSERTM) { ! 267: ! 268: mgo(10,0); ! 269: xprintf("Testing insert character."); ! 270: if (IN) { ! 271: xprintf (" These won't move unless pushed\n"); ! 272: xprintf("These move when you push them\n"); ! 273: } ! 274: else xprintf (" These move too\n"); ! 275: xprintf(" all characters except ^G insert after test"); ! 276: mgo(10,4); ! 277: if (INSERTM) { ! 278: eprintf(INSERTM); ! 279: } ! 280: while ((i = mgetchar()) != '') { ! 281: if (INSERTC) eprintf(INSERTC); ! 282: putchar(i); ! 283: if (INSERTP) eprintf(INSERTP); ! 284: } ! 285: if (OSERTC) eprintf(OSERTC); ! 286: clear(); ! 287: } ! 288: if (DELC) { ! 289: mgo(10,0); ! 290: xprintf("Testing delete character."); ! 291: if (IN) { ! 292: xprintf(" All of these characters, including the wrap to the new line, should move"); ! 293: xprintf (" These won't move\n"); ! 294: } ! 295: else xprintf (" These move too\n"); ! 296: xprintf(" all characters except ^G delete after test"); ! 297: mgo(10,4); ! 298: if (DELMODE) { ! 299: eprintf(INSERTM); ! 300: } ! 301: while ((i = mgetchar()) != '') { ! 302: eprintf(DELC); ! 303: } ! 304: if (DELMODE) eprintf(OSERTC); ! 305: clear(); ! 306: } ! 307: if ((SCREG)&&((!SSCROLL)||(!RSCROLL)||(!CURAD))) { ! 308: mgo(1,1); ! 309: xprintf("Region scrolling requires sf, sr and cm"); ! 310: pause(); ! 311: clear(); ! 312: goto skipscroll; ! 313: } ! 314: if (LOPEN) { ! 315: for (i = 0; i < SCRNLIN; i++) { ! 316: mgo(i,0); ! 317: xprintf ("Line %d",i); ! 318: } ! 319: mgo(0,10); ! 320: xprintf("u to scroll lines %d through %d up",2,SCRNLIN-2); ! 321: mgo(1,10); ! 322: xprintf("d to scroll down"); ! 323: again: i = mgetchar(); ! 324: if (i == 'u') { ! 325: vadjust(2,SCRNLIN-2,-1); ! 326: goto again; ! 327: } ! 328: if (i == 'd') { ! 329: vadjust(2,SCRNLIN-2,1); ! 330: goto again; ! 331: } ! 332: clear(); ! 333: } ! 334: skipscroll: ! 335: if (ULINE) { ! 336: ! 337: if (EOVER) { ! 338: mgo(4,0); ! 339: uprint("Underlined_Characters"); ! 340: mgo(6,0); ! 341: uprint("These won't wind up underlined"); ! 342: mgo(6,0); ! 343: xprintf("These won't wind up underlined"); ! 344: } else { ! 345: mgo(6,0); ! 346: EOVER = 1; ! 347: uprint("..............................."); ! 348: EOVER = 0; ! 349: mgo(6,0); ! 350: xprintf("These characters are underlined"); ! 351: } ! 352: pause(); ! 353: clear(); ! 354: } ! 355: die(0); ! 356: ! 357: } ! 358: ! 359: uprint(sp) ! 360: register char *sp; ! 361: { ! 362: int lie = 0; ! 363: if (!EOVER) { ! 364: /* terminal does not overwrite underscores! */ ! 365: /* What a mess, tell handler it will */ ! 366: lie = 1; ! 367: EOVER = 0; ! 368: } ! 369: while (*sp) { ! 370: xputc('_'); ! 371: xputc('\b'); ! 372: xputc(*sp++); ! 373: } ! 374: if (lie) EOVER=1; ! 375: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.