in utils/unlit/unlit.c [249:307]
static void unlit(char *file, FILE *istream, FILE *ostream)
{
line last, this=START;
int linesread=0;
int defnsread=0;
do {
last = this;
this = readline(istream, ostream);
linesread++;
if (this==DEFN)
defnsread++;
if (last==DEFN && this==TEXT)
complain(file, linesread-1, MISSINGBLANK);
if (last==TEXT && this==DEFN)
complain(file, linesread, MISSINGBLANK);
if (this==END)
complain(file, linesread, SPURIOUSENDCODE);
if (this == BEGIN) {
/* start of code, copy to end */
char lineb[1000];
for(;;) {
if (fgets(lineb, sizeof lineb, istream) == NULL) {
complain(file, linesread, MISSINGENDCODE);
exit(1);
}
linesread++;
if (strncmp(lineb,ENDCODE,LENENDCODE) == 0) {
myputc('\n', ostream);
break;
}
fputs(lineb, ostream);
}
defnsread++;
}
#if defined(PSEUDOCODE)
if (this == PSEUDO) {
char lineb[1000];
for(;;) {
if (fgets(lineb, sizeof lineb, istream) == NULL) {
complain(file, linesread, MISSINGENDPSEUDOCODE);
exit(1);
}
linesread++;
myputc('\n', ostream);
if (strncmp(lineb,ENDPSEUDOCODE,LENENDPSEUDOCODE) == 0) {
break;
}
}
}
#endif
if (this == SHEBANG) {
myputc('\n', ostream);
}
} while(this!=ENDFILE);
if (defnsread==0)
complain(file,linesread,EMPTYSCRIPT);
}