|
|
Power 6/32 Unix version 1.21
#include <stdio.h>
FILE * f;
char buf[133];
int cc,count;
main(argc,argv)
char *argv[];
int argc;
{
long ftell(), where1, where2;
f = fopen(argv[1],"w");
top:
where1 = ftell(f);
count = 0;
putw(count,f);
fputc(0x27,f); /* ESC */
++count;
puts("Cmd code: (1 - Write, 2 - Rdbuf, 5 - Erase/Write, ");
puts(" 6 - Rdmod, 7 - Copy, ? - EAU) ");
gets(buf);
ascebc(buf,1);
fputc(buf[0],f); ++count;
ebcasc(buf,1);
if (buf[0] == '1' || buf[0] == '5') {
puts("WCC: Print format (0 - var., 1 - 40, 2 - 64, 3 - 80)");
gets(buf);
cc = ((buf[0] - '0') << 4) | 0x40;
puts(" Start Print: (1/0)");
gets(buf);
if (buf[0] == '1') cc |= 0x08;
puts(" Sound Alarm: (1/0)");
gets(buf);
if (buf[0] == '1') cc |= 0x04;
puts(" Restore Keyboard: (1/0)");
gets(buf);
if (buf[0] == '1') cc |= 0x02;
puts(" Reset MDT Bits: (1/0)");
gets(buf);
if (buf[0] == '1') cc |= 0x01;
fputc(cc,f); ++count;
puts("Orders and/or Buffer Data: (ESC/CR to enter Order)");
for (gets(buf); buf[0]; gets(buf)) {
if (buf[0] == 033) { /* Order */
puts(" Order: 1=SF 2=SBA 3=IC 4=PT 5=RA 6=EUA 7=EM, 8=end buffer");
gets(buf);
switch (buf[0]-'0') {
case 1: /* SF, followed by attr char */
fputc(0x1d,f); ++count;
cc = 0x40;
puts("Attr Char: Protected: (1/0)");
gets(buf);
if (buf[0] == '1') cc |= 0x20;
puts(" Numeric: (1/0)");
gets(buf);
if (buf[0] == '1') cc |= 0x10;
puts(" Display:0=yes 2=hl 3=invis");
gets(buf);
cc |= ((buf[0] - '0') << 2);
puts(" MDT: (1/0)");
gets(buf);
if (buf[0] == '1') cc |= 0x01;
fputc(cc,f); ++count;
break;
case 2: /* SBA, followed by addr */
fputc(0x11,f); ++count;
doaddr();
break;
case 3: /* IC */
fputc(0x13,f); ++count;
break;
case 4: /* PT */
fputc(0x05,f); ++count;
break;
case 5: /* RA, followed by addr and char */
fputc(0x3c,f); ++count;
doaddr();
puts("Character to repeat:");
gets(buf);
ascebc(buf,1);
fputc(buf[0],f); ++count;
break;
case 6: /* EUA, then addr */
fputc(0x12,f); ++count;
doaddr();
break;
/* case 3: newline
fputc(0x15,f); ++count;
break;
case 4: form feed
fputc(0x0c,f); ++count;
break;
case 5: carriage return
fputc(0x0d,f); ++count;
break;
case 6: SI
fputc(0x0f,f); ++count;
break; */
case 7: /* EM */
fputc(0x19,f); ++count;
break;
case 8: /* end buffer, start new one */
startnew:
puts("Start new or Quit (s/q):");
gets(buf);
where2 = ftell(f);
fseek(f, where1, 0);
putw(count,f);
if (buf[0] == 's' || buf[0] == 'S') {
fseek(f, where2, 0);
goto top;
}
fclose(f);
exit(0);
}
}
else { /* data */
ascebc(buf,strlen(buf));
fputs(buf,f);
count += strlen(buf);
}
}
}
goto startnew;
}
char eadr_tbl[] = { /* EBCDIC hex cursor address encoding table */
0x40,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0x4a,0x4b,
0x4c,0x4d,0x4e,0x4f,0x50,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,
0xd8,0xd9,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,0x60,0x61,0xe2,0xe3,
0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0x7a,0x7b,
0x7c,0x7d,0x7e,0x7f};
doaddr() {
puts("Address (0-1919):");
gets(buf);
cc = atoi(buf);
fputc(eadr_tbl[cc/64],f); ++count;
cc &= 0x3f;
fputc(eadr_tbl[cc],f); ++count;
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.