|
|
1.1 root 1: /*
2: * pacifier.c - state machine for putting something interesting on the screen.
3: */
4: #include "tboot.h"
5: #include "pac_states.h"
6:
7: int slow_flag = FALSE; /* Slow down pacifier. */
8: int feet_flag = FALSE; /* Print footprints? */
9:
10: void pac_init(); /* Initialise the state machine. */
11: void pac_cleanup(); /* Clean up after the state machine. */
12: void pacifier(); /* Run the next step of the state machine. */
13: void subliminal(); /* Print a subliminal message. */
14:
15: static int pac_inited = FALSE; /* Has pac_init() been called? */
16: static int pac_dirty = FALSE; /* Has pacifier() been called? */
17: static int state;
18: static int substate;
19: static int count;
20:
21: void
22: pacifier()
23: {
24: pac_dirty = TRUE;
25:
26: if (!pac_inited) {
27: pac_init();
28: }
29:
30: switch (state) {
31: case FORWARD:
32: switch (substate) {
33: case N_S:
34: FOOTPRINT;
35: puts("|\010");
36: substate = NE_SW;
37: break;
38: case NE_SW:
39: FOOTPRINT;
40: puts("/\010");
41: substate = E_W;
42: break;
43: case E_W:
44: FOOTPRINT;
45: puts("-\010");
46: substate = NW_SE;
47: break;
48: case NW_SE:
49: FOOTPRINT;
50: puts("\\\010");
51: substate = NE_SW;
52: break;
53: default:
54: puts("pacifier(): Illegal substate.\r\n");
55: pac_init();
56: break;
57: } /* switch (substate) */
58:
59: if (++count > THRESHOLD) {
60: #if 0
61: subliminal("Buy COHware!");
62: #endif
63: puts(" \010\010");
64: state = REVERSE;
65: count = 0;
66: }
67: if (slow_flag) {
68: wait_for_keystroke(2, -1); /* Brief pause. */
69: }
70: break;
71: case REVERSE:
72: switch (substate) {
73: case N_S:
74: UNFOOTPRINT;
75: puts("|\010");
76: substate = NW_SE;
77: break;
78: case NW_SE:
79: UNFOOTPRINT;
80: puts("\\\010");
81: substate = E_W;
82: break;
83: case E_W:
84: UNFOOTPRINT;
85: puts("-\010");
86: substate = NE_SW;
87: break;
88: case NE_SW:
89: UNFOOTPRINT;
90: puts("/\010");
91: substate = N_S;
92: break;
93: default:
94: puts("pacifier(): Illegal substate.\r\n");
95: pac_init();
96: break;
97: } /* switch (substate) */
98: if (++count > THRESHOLD) {
99: puts("_\010");
100: state = FORWARD;
101: count = 0;
102: }
103: if (slow_flag) {
104: wait_for_keystroke(2, -1); /* Brief pause. */
105: }
106: break;
107: default:
108: puts("pacifier(): Illegal state.\r\n");
109: pac_init();
110: break;
111: } /* switch (state) */
112:
113: } /* pacifier() */
114:
115:
116: /*
117: * Print a subliminal message on the console.
118: * It does this by printing the message, backspacing over it,
119: * spacing over it, and then backspacing again.
120: */
121: void
122: subliminal(msg)
123: char *msg;
124: {
125: int i, len;
126:
127: len = strlen(msg);
128: puts(msg);
129:
130: for (i = len; i > 0; --i) {
131: puts("\010");
132: }
133:
134: if (slow_flag) {
135: wait_for_keystrok(4, -1); /* Brief pause. */
136: }
137:
138: for (i = len; i > 0; --i) {
139: puts(" ");
140: }
141:
142: for (i = len; i > 0; --i) {
143: puts("\010");
144: }
145: } /* subliminal() */
146:
147: /*
148: * Initialize the pacifier state machine.
149: */
150: void
151: pac_init()
152: {
153: pac_inited = TRUE;
154: state = FORWARD;
155: substate = N_S;
156: count = 0;
157: } /* pac_init() */
158:
159:
160: /*
161: * Clean up the screen after the pacifier.
162: */
163: void
164: pac_cleanup()
165: {
166: int i;
167:
168: if (pac_dirty) {
169: puts("\r");
170: for (i = THRESHOLD+1; i > 0; --i) {
171: puts(" ");
172: }
173: puts("\r");
174: }
175: pac_dirty = FALSE;
176: } /* pac_cleanup() */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.