#
set htabsiz = 2001

cat /usr1/kcl/h/*.h /usr1/kcl/c/*.c others | extract | sort -u \
	| mkhtab ${htabsiz} > trans.c

cat >> trans.c <<EOF

#include <stdio.h>
#include <ctype.h>
#include "hash.c"

char buffer[1024];

main()
{
	register c, i, s;

START:
	c = getchar();
START1:
	if (feof(stdin))
		goto EXIT;
	if (isalpha(c) || c == '_')
		goto IDENTIFIER;
	if (c == '\'')
		goto CHARACTER;
	if (c == '"')
		goto STRING;
	if (c == '/') {
		putchar(c);
		if ((c = getchar()) == '*')
			goto COMMENT;
		goto START1;
	}
	putchar(c);
	goto START;

IDENTIFIER:
	for (i = 0;  isalnum(c) || c == '_';  c = getchar(), i++)
		buffer[i] = c;
	buffer[i] = '\0';
	if (i < 7) {
		printf("%s", buffer);
		goto START1;
	}
	for (s = hash(buffer, ${htabsiz});
	     htab[s].h_key != NULL;
	     s = (s+1) % ${htabsiz})
		if (strcmp(htab[s].h_key, buffer) == 0) {
			printf("%s", htab[s].h_val);
			goto START1;
		}
	printf("%s", buffer);
	goto START1;

CHARACTER:
	putchar(c);
	while ((c = putchar(getchar())) != '\\'')
		if (c == '\\\\')
			putchar(getchar());
	goto START;

STRING:
	putchar(c);
	while ((c = putchar(getchar())) != '"')
		if (c == '\\\\')
			putchar(getchar());
	goto START;

COMMENT:
	putchar(c);
	while (putchar(getchar()) != '*' || putchar(getchar()) != '/')
		;
	goto START;

EXIT:
	exit(0);
}
EOF

ed trans.c <<EOF
1,\$g/{"continue"/s/.*/{"continue", "continue"},/p
1,\$g/{"default"/s/.*/{"default", "default"},/p
1,\$g/{"extern"/s/.*/{"extern", "extern"},/p
1,\$g/{"register"/s/.*/{"register", "register"},/p
1,\$g/{"typedef"/s/.*/{"typedef", "typedef"},/p
1,\$g/{"unsigned"/s/.*/{"unsigned", "unsigned"},/p
1,\$g/{"isalpha"/s/.*/{"isalpha", "isalpha"},/p
w
q
EOF

cc -o trans trans.c
