static char SccsId
[] = "@(#)readcf.c 3.6 %G%";
** READCF -- read control file.
** This routine reads the control file and builds the internal
** cfname -- control file name.
** Builds several internal tables.
struct rewrite
*RewriteRules
[10];
struct rewrite
*rwp
= NULL
;
extern char **copyplist();
syserr("cannot open %s", cfname
);
while (fgets(buf
, sizeof buf
, cf
) != NULL
)
case 'R': /* rewriting rule */
for (p
= &buf
[1]; *p
!= '\0' && *p
!= '\t'; p
++)
syserr("invalid rewrite line \"%s\"", buf
);
RewriteRules
[ruleset
] = rwp
=
(struct rewrite
*) xalloc(sizeof *rwp
);
rwp
->r_next
= (struct rewrite
*) xalloc(sizeof *rwp
);
rwp
->r_lhs
= prescan(&buf
[1], '\t');
rwp
->r_lhs
= copyplist(rwp
->r_lhs
, TRUE
);
rwp
->r_rhs
= prescan(p
, '\t');
rwp
->r_rhs
= copyplist(rwp
->r_rhs
, TRUE
);
case 'S': /* select rewriting set */
case 'D': /* macro definition */
define(buf
[1], newstr(&buf
[2]));
case 'H': /* required header line */
(void) chompheader(&buf
[1], TRUE
);
case 'C': /* word class */
/* scan the list of words and set class 'i' for all */
for (p
= &buf
[2]; *p
!= '\0'; )
while (*p
!= '\0' && isspace(*p
))
while (*p
!= '\0' && !isspace(*p
))
s
->s_class
|= 1 << class;
syserr("unknown control line \"%s\"", buf
);
** PRINTRULES -- print rewrite rules (for debugging)
register struct rewrite
*rwp
;
for (ruleset
= 0; ruleset
< 10; ruleset
++)
if (RewriteRules
[ruleset
] == NULL
)
printf("\n----Rule Set %d:\n", ruleset
);
for (rwp
= RewriteRules
[ruleset
]; rwp
!= NULL
; rwp
= rwp
->r_next
)
for (av
= rwp
->r_lhs
; *av
!= NULL
; av
++)
for (av
= rwp
->r_rhs
; *av
!= NULL
; av
++)