|
|
1.1 root 1: #include <stdio.h>
2: FILE * f;
3: char buf[133];
4: int cc,count;
5:
6: main(argc,argv)
7: char *argv[];
8: int argc;
9: {
10: long ftell(), where1, where2;
11: f = fopen(argv[1],"w");
12: top:
13: where1 = ftell(f);
14: count = 0;
15: putw(count,f);
16: fputc(0x27,f); /* ESC */
17: ++count;
18: puts("Cmd code: (1 - Write, 2 - Rdbuf, 5 - Erase/Write, ");
19: puts(" 6 - Rdmod, 7 - Copy, ? - EAU) ");
20: gets(buf);
21: ascebc(buf,1);
22: fputc(buf[0],f); ++count;
23: ebcasc(buf,1);
24: if (buf[0] == '1' || buf[0] == '5') {
25: puts("WCC: Print format (0 - var., 1 - 40, 2 - 64, 3 - 80)");
26: gets(buf);
27: cc = ((buf[0] - '0') << 4) | 0x40;
28: puts(" Start Print: (1/0)");
29: gets(buf);
30: if (buf[0] == '1') cc |= 0x08;
31: puts(" Sound Alarm: (1/0)");
32: gets(buf);
33: if (buf[0] == '1') cc |= 0x04;
34: puts(" Restore Keyboard: (1/0)");
35: gets(buf);
36: if (buf[0] == '1') cc |= 0x02;
37: puts(" Reset MDT Bits: (1/0)");
38: gets(buf);
39: if (buf[0] == '1') cc |= 0x01;
40: fputc(cc,f); ++count;
41: puts("Orders and/or Buffer Data: (ESC/CR to enter Order)");
42: for (gets(buf); buf[0]; gets(buf)) {
43: if (buf[0] == 033) { /* Order */
44: puts(" Order: 1=SF 2=SBA 3=IC 4=PT 5=RA 6=EUA 7=EM, 8=end buffer");
45: gets(buf);
46: switch (buf[0]-'0') {
47: case 1: /* SF, followed by attr char */
48: fputc(0x1d,f); ++count;
49: cc = 0x40;
50: puts("Attr Char: Protected: (1/0)");
51: gets(buf);
52: if (buf[0] == '1') cc |= 0x20;
53: puts(" Numeric: (1/0)");
54: gets(buf);
55: if (buf[0] == '1') cc |= 0x10;
56: puts(" Display:0=yes 2=hl 3=invis");
57: gets(buf);
58: cc |= ((buf[0] - '0') << 2);
59: puts(" MDT: (1/0)");
60: gets(buf);
61: if (buf[0] == '1') cc |= 0x01;
62: fputc(cc,f); ++count;
63: break;
64: case 2: /* SBA, followed by addr */
65: fputc(0x11,f); ++count;
66: doaddr();
67: break;
68: case 3: /* IC */
69: fputc(0x13,f); ++count;
70: break;
71: case 4: /* PT */
72: fputc(0x05,f); ++count;
73: break;
74: case 5: /* RA, followed by addr and char */
75: fputc(0x3c,f); ++count;
76: doaddr();
77: puts("Character to repeat:");
78: gets(buf);
79: ascebc(buf,1);
80: fputc(buf[0],f); ++count;
81: break;
82: case 6: /* EUA, then addr */
83: fputc(0x12,f); ++count;
84: doaddr();
85: break;
86: /* case 3: newline
87: fputc(0x15,f); ++count;
88: break;
89: case 4: form feed
90: fputc(0x0c,f); ++count;
91: break;
92: case 5: carriage return
93: fputc(0x0d,f); ++count;
94: break;
95:
96: case 6: SI
97: fputc(0x0f,f); ++count;
98: break; */
99: case 7: /* EM */
100: fputc(0x19,f); ++count;
101: break;
102: case 8: /* end buffer, start new one */
103: startnew:
104: puts("Start new or Quit (s/q):");
105: gets(buf);
106: where2 = ftell(f);
107: fseek(f, where1, 0);
108: putw(count,f);
109: if (buf[0] == 's' || buf[0] == 'S') {
110: fseek(f, where2, 0);
111: goto top;
112: }
113: fclose(f);
114: exit(0);
115: }
116: }
117: else { /* data */
118: ascebc(buf,strlen(buf));
119: fputs(buf,f);
120: count += strlen(buf);
121: }
122: }
123: }
124: goto startnew;
125: }
126: char eadr_tbl[] = { /* EBCDIC hex cursor address encoding table */
127: 0x40,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0x4a,0x4b,
128: 0x4c,0x4d,0x4e,0x4f,0x50,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,
129: 0xd8,0xd9,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,0x60,0x61,0xe2,0xe3,
130: 0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
131: 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0x7a,0x7b,
132: 0x7c,0x7d,0x7e,0x7f};
133: doaddr() {
134: puts("Address (0-1919):");
135: gets(buf);
136: cc = atoi(buf);
137: fputc(eadr_tbl[cc/64],f); ++count;
138: cc &= 0x3f;
139: fputc(eadr_tbl[cc],f); ++count;
140: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.