[net.micro.cbm] program to convert from c-power/pet ascii to unix ascii

grwalter@watmath.UUCP (Fred Walter) (11/07/86)

This is a short C program that takes c-power/pet ascii on stdin and converts
it to unix ascii on stdout (use -p as the first argument to convert the
other way).

It needs just a straight vanilla compile (ie. "cc cnv.c -o cnv" will do).

It is useful when your transfer program (say xmodem on proterm-128)
doesn't do the conversion for you.

If you have any comments, I can be reached at :

UUCP  : {allegra|clyde|linus|decvax|utzoo|ihnp4}!watmath!grwalter
CSNET : grwalter%watmath@waterloo.csnet
ARPA  : grwalter%watmath%waterloo.csnet@csnet-relay.arpa

---------yes-virginia-there-is-a-cut-line--------------------------------------
/*
 * cnv.c
 *
 * by g. r. walter (grwalter@watmath) 861106
 * 
 * take from stdin a petascii file and convert it to unixascii to sdtout
 * (using 10 as the end-of-line indicator)
 *
 * if the -p option is used then
 * take from stdin a unixascii file and convert it to petascii to sdtout
 * (using 13 as the end-of-line indicator)
 *
 * note : this file is meant to be viewed/editted using tabs every 4 spaces
 *
 * credits : the conversion tables were originally made up by brian hilchie
 *           and they really are for the c-power petascii
 *
 */

#include <stdio.h>

char tounixascii[256] = {
	0,	1,	2,	3,
	4,	5,	6,	7,
	8,	9,	10,	11,
	12,	10,	14,	15,
	16,	17,	18,	19,
	20,	21,	22,	23,
	24,	25,	26,	27,
	28,	29,	30,	31,
	' ',	'!',	'"',	'#',
	'$',	'%',	'&',	'\'',
	'(',	')',	'*',	'+',
	',',	'-',	'.',	'/',
	'0',	'1',	'2',	'3',
	'4',	'5',	'6',	'7',
	'8',	'9',	':',	';',
	'<',	'=',	'>',	'?',
	'@',	'a',	'b',	'c',
	'd',	'e',	'f',	'g',
	'h',	'i',	'j',	'k',
	'l',	'm',	'n',	'o',
	'p',	'q',	'r',	's',
	't',	'u',	'v',	'w',
	'x',	'y',	'z',	'[',
	'\\',	']',	'^',	'_',
	'`',	'a',	'b',	'c',
	'd',	'e',	'f',	'g',
	'h',	'i',	'j',	'k',
	'l',	'm',	'n',	'o',
	'p',	'q',	'r',	's',
	't',	'u',	'v',	'w',
	'x',	'y',	'z',	'{',
	'|',	'}',	'~',	127,
	128,	129,	130,	131,
	132,	133,	134,	135,
	136,	137,	138,	139,
	140,	141,	142,	143,
	144,	145,	146,	147,
	148,	149,	150,	151,
	152,	153,	154,	155,
	156,	157,	158,	159,
	160,	161,	162,	163,
	'_',	165,	166,	167,
	168,	169,	170,	171,
	172,	173,	174,	'~',
	176,	177,	178,	179,
	180,	181,	182,	183,
	184,	185,	186,	187,
	188,	189,	190,	191,
	192,	'A',	'B',	'C',
	'D',	'E',	'F',	'G',
	'H',	'I',	'J',	'K',
	'L',	'M',	'N',	'O',
	'P',	'Q',	'R',	'S',
	'T',	'U',	'V',	'W',
	'X',	'Y',	'Z',	'{',
	220,	'}',	222,	'|',
	224,	225,	226,	227,
	228,	229,	230,	231,
	232,	233,	234,	235,
	236,	237,	238,	239,
	240,	241,	242,	243,
	244,	245,	246,	247,
	248,	249,	250,	251,
	252,	253,	254,	255
};

char topetascii[256] = {
	0,	1,	2,	3,
	4,	5,	6,	7,
	8,	9,	13,	11,
	12,	13,	14,	15,
	16,	17,	18,	19,
	20,	21,	22,	23,
	24,	25,	26,	27,
	28,	29,	30,	31,
	' ',	'!',	'"',	'#',
	'$',	'%',	'&',	'\'',
	'(',	')',	'*',	'+',
	',',	'-',	'.',	'/',
	'0',	'1',	'2',	'3',
	'4',	'5',	'6',	'7',
	'8',	'9',	':',	';',
	'<',	'=',	'>',	'?',
	'@',	193,	194,	195,
	196,	197,	198,	199,
	200,	201,	202,	203,
	204,	205,	206,	207,
	208,	209,	210,	211,
	212,	213,	214,	215,
	216,	217,	218,	'[',
	'\\',	']',	'^',	164,
	'`',	'A',	'B',	'C',
	'D',	'E',	'F',	'G',
	'H',	'I',	'J',	'K',
	'L',	'M',	'N',	'O',
	'P',	'Q',	'R',	'S',
	'T',	'U',	'V',	'W',
	'X',	'Y',	'Z',	219,
	223,	221,	175,	127,
	128,	129,	130,	131,
	132,	133,	134,	135,
	136,	137,	138,	139,
	140,	141,	142,	143,
	144,	145,	146,	147,
	148,	149,	150,	151,
	152,	153,	154,	155,
	156,	157,	158,	159,
	160,	161,	162,	163,
	164,	165,	166,	167,
	168,	169,	170,	171,
	172,	173,	174,	175,
	176,	177,	178,	179,
	180,	181,	182,	183,
	184,	185,	186,	187,
	188,	189,	190,	191,
	192,	193,	194,	195,
	196,	197,	198,	199,
	200,	201,	202,	203,
	204,	205,	206,	207,
	208,	209,	210,	211,
	212,	213,	214,	215,
	216,	217,	218,	219,
	220,	221,	222,	223,
	224,	225,	226,	227,
	228,	229,	230,	231,
	232,	233,	234,	235,
	236,	237,	238,	239,
	240,	241,	242,	243,
	244,	245,	246,	247,
	248,	249,	250,	251,
	252,	253,	254,	255
};

	int
main(argc, argv)
	int		argc;
	char	**argv;
{

	int		c, direction, trans;

	/* see what direction the conversion must go */
	direction = 0;	/* assume default is tounixascii */
	if (argc > 1)
		if ((argv[1][0] == '-') && (argv[1][1] == 'p'))
			direction = 1;

	c = getchar();
	while (c != EOF) {
		if (direction == 0)
			trans = tounixascii[c];
		else
			trans = topetascii[c];
		(void)printf("%c", trans);
		c = getchar();
	}
}