File:  [Power 6/32 Unix Tahoe 4.2BSD] / cci / usr / src / usr.bin / bsc / cmd / 3270 / makebuf.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Sun Jul 28 12:26:11 2019 UTC (7 years ago) by root
Branches: bsd, MAIN
CVS tags: v121, HEAD
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;
}

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.