|
|
1.1 root 1: /*
2: _t_e_s_t _u_l _m_o_d_e
3: */
4: #include <sgtty.h>
5: #include <signal.h>
6:
7: #define ULON "\033&dA"
8: #define ULOFF "\033&d@"
9:
10: main(argc, argv)
11: char *argv[];
12: {
13: int i;
14: char buf[512];
15: int onintr();
16: int pos_, k, ulmode;
17:
18: if (argc > 1) {
19: if ((i = open(argv[1], 0)) < 0) {
20: perror(argv[1]);
21: EXIT(1);
22: }
23: close(0);
24: dup(i);
25: close(i);
26: }
27: if (signal(SIGINT, SIG_IGN) == SIG_DFL)
28: signal(SIGINT, onintr);
29:
30: pos_ = ulmode = 0;
31: while ((i = read(0, buf, sizeof(buf))) > 0) {
32: for (k = 0; k < i; k++) {
33: if (buf[k] == '_' && pos_ == 0) {
34: pos_ = 1;
35: continue;
36: }
37: if (pos_ == 1)
38: if (buf[k] == '\b') {
39: pos_ = 2;
40: if (ulmode)
41: continue;
42: printf("%s", ULON);
43: ulmode++;
44: continue;
45: } else {
46: if (ulmode)
47: printf("%s", ULOFF);
48: putchar('_');
49: ulmode = 0;
50: pos_ = 0;
51: }
52: if (pos_ == 2) {
53: putchar(buf[k]);
54: pos_ = 0;
55: continue;
56: }
57: pos_ = 0;
58: if (ulmode)
59: printf("%s", ULOFF);
60: ulmode = 0;
61: putchar(buf[k]);
62: }
63: }
64: printf("%s", ULOFF);
65: EXIT(0);
66: }
67:
68: onintr()
69: {
70: printf("%s", ULOFF);
71: EXIT(0);
72: }
73:
74: EXIT(i)
75: {
76: printf("%s", ULOFF);
77: exit(i);
78: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.