static int print_line(FILE * stream, const char *buf, int def_path_no)
{
	const char *tmp;
	const char *phrase;
	int i = 0;
	int retval = 0;

#define PHRASE_LEN 1000
	char phrase_name[PHRASE_LEN];

	while (1) {
		phrase_name[0] = '\0';
		if (!(phrase = find_at_phrases(buf))) {
			fputs(buf, stream);
			return retval;
		}

		/* write all chars up to the beginning '@' thingie to stream */
		for (tmp = buf; tmp < phrase; tmp++)
			fputc(*tmp, stream);

		/* copy Phrase to phrase_name */
		i = 0;
		for (tmp = phrase + 1; *tmp != '@' && i < PHRASE_LEN; tmp++) {
			phrase_name[i++] = *tmp;
		}
		phrase_name[i] = '\0';
		/* pasrse Phrase */
		retval |= parse_phrase(stream, phrase_name, def_path_no);
		/* re-adjust output buffer */
		buf = tmp + 1;
	}
}
Esempio n. 2
0
int parse(size_t len, char addr[len])
{
   int err;
   buffer_t buffer = { addr, len, 0 };

   while (nextchar(&buffer)) {
      -- buffer.addr;
      ++ buffer.len;
      err = parse_phrase(&buffer);
      if (err) goto ONERR;
   }

   return 0;
ONERR:
   return err;
}