home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Datafile PD-CD 3
/
PDCD_3.iso
/
tex
/
texsrc2
/
Src
/
web2c
/
c
/
regfix
< prev
next >
Wrap
Text File
|
1992-04-08
|
2KB
|
121 lines
/* regfix -- change locals to be register declarations. This
produces code which runs 10% faster on some systems (e.g., Vax-11/750,
Sequent Balance). Don't try to use this program with other than TeX
and Metafont in C.
Tim Morgan February 25, 1988. */
#include "config.h"
#define BUFFER_SIZE 10240
char line[BUFFER_SIZE];
/* Replace the last (should be only) newline in S with a null. */
void
remove_newline (s)
char *s;
{
char *temp = strrchr (s, '\n');
if (temp == NULL)
{
fprintf (stderr, "Lost newline somehow.\n");
uexit (1);
}
*temp = 0;
}
#ifdef REGFIX /* REST OF FILE (almost) */
#define Puts(s) fputs(s, stdout)
char *types[] = {"ASCIIcode ", "schar ", "eightbits ", "scaled ",
"glueord ", "halfword ", "hyphpointer ", "internalfontnumber ",
"nonnegativeinteger ", "poolpointer ", "quarterword ", "smallnumber ",
"strnumber ", "triepointer ", "integer ", "short "};
#define NUMTYPES (sizeof(types)/sizeof(types[0]))
int lens[NUMTYPES];
char *
matchestype ()
{
register int i;
if (line[0] != ' ' || line[1] != ' ')
return 0;
for (i = 0; i < NUMTYPES; i++)
{
if (strncmp (&line[2], types[i], lens[i]) == 0
&& strchr (line, '[') == 0)
return line + 2 + lens[i];
}
return 0;
}
int
main ()
{
register int i;
#ifdef vax
register char *cp;
#endif
for (i=0; i<NUMTYPES; i++)
lens[i] = strlen(types[i]);
/* Copy the declarations. */
while (fgets (line, BUFFER_SIZE, stdin)
&& strncmp (&line[10], "coerce", 6) != 0)
{
remove_newline (line);
puts (line);
}
puts (line);
while (fgets (line, BUFFER_SIZE, stdin))
{
remove_newline (line);
#ifdef vax
if (cp = matchestype() ) {
Puts(" register long ");
puts(cp);
#else
if ( matchestype() ) {
Puts(" register");
puts(line+1);
#endif
} else
puts(line);
}
fclose (stdout);
uexit (0);
}
#else /* not REGFIX */
/* If we don't want to use register variables, we just copy stdin to
stdout. */
int
main ()
{
while (fgets (line, BUFFER_SIZE, stdin))
{
remove_newline (line);
puts (line);
}
uexit (0);
}
#endif /* not REGFIX */