home *** CD-ROM | disk | FTP | other *** search
- #
- 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
-