int main (int argc, char **argv) { char buf[1024]; int i; SLprep_Type *pt; if (isatty (0)) usage (); if (NULL == (pt = SLprep_new ())) return 1; if ((-1 == SLprep_set_prefix (pt, "!")) || (-1 == SLprep_set_comment (pt, "#", "")) || (-1 == SLprep_set_flags (pt, SLPREP_BLANK_LINES_OK | SLPREP_COMMENT_LINES_OK))) { SLprep_delete (pt); return 1; } for (i = 1; i < argc; i++) SLdefine_for_ifdef (argv[i]); while (NULL != fgets (buf, sizeof (buf) - 1, stdin)) { if (SLprep_line_ok (buf, pt)) { fputs (buf, stdout); } } SLprep_delete (pt); return 0; }
int main (int argc, char *argv[]) { int i; char buf[1024]; SLPreprocess_Type pt; SLprep_open_prep (&pt); SLdefine_for_ifdef ("UNIX"); /* super cheap getopts */ for (i = 1; i < argc; i++) { char *p = argv[i]; if (*p++ != '-') break; if (*p == '-') break; if (*p == 'D') { SLdefine_for_ifdef (p + 1); continue; } while (*p) { switch (*p) { case 'B': pt.flags |= (SLPREP_BLANK_LINES_OK); break; case 'C': pt.flags |= (SLPREP_COMMENT_LINES_OK); break; case 'c': if (p[1]) pt.comment_char = *++p; break; case 'p': if (p[1]) pt.preprocess_char = *++p; break; default: fprintf (stderr, "unknown flag '%c'\n", *p); break; } p++; } } while (NULL != fgets (buf, sizeof (buf) - 1, stdin)) { if (SLprep_line_ok (buf, &pt)) fputs (buf, stdout); } SLprep_close_prep (&pt); return 0; }
static int phrase_score_file (char *file, FILE *fp, Score_Context_Type *c, unsigned int *linenum, PScore_Regexp_Type *sub_psrt) { char line[1024]; PScore_Regexp_Type *psrt; char *description = NULL; while (fgets (line, sizeof (line) - 1, fp)) { unsigned char *lp; int ret, not_flag; (*linenum)++; psrt = NULL; if (0 == SLprep_line_ok (line, &c->pt)) continue; lp = (unsigned char *) slrn_skip_whitespace (line); if ((*lp == '#') || (*lp == '%') || (*lp <= ' ')) continue; if (sub_psrt == NULL) { if ((0 == slrn_case_strncmp (lp, (unsigned char *) "include", 7)) && ((lp[7] == ' ') || (lp[7] == '\t'))) { if (0 == handle_include_line (file, (char *)lp + 7, c)) continue; score_error (_("Error handling INCLUDE line"), line, *linenum, file); slrn_free (description); return -1; } if (*lp == '[') { unsigned char *g, *gmax, ch; g = c->group; gmax = g + sizeof (c->group); lp++; lp = (unsigned char *) slrn_skip_whitespace ((char *)lp); c->gnt_not_flag = 0; if (*lp == '~') { c->gnt_not_flag = 1; lp = (unsigned char *) slrn_skip_whitespace ((char *)lp + 1); } while (((ch = *lp++) != 0) && (ch != ']') && (g < gmax)) *g++ = ch; if ((ch != ']') || (g == gmax)) { score_error (_("Syntax Error."), line, *linenum, file); slrn_free (description); return -1; } *g = 0; c->start_new_group = 1; c->score_has_expired = 0; c->start_new_score = 0; continue; } if (!slrn_case_strncmp (lp, (unsigned char *)"Score:", 6)) { unsigned char *lpp = lp + 6, *eol; c->pscore_flags = 0; if (*lpp == ':') { lpp++; c->pscore_flags |= SCORE_IS_OR_TYPE; } lpp = (unsigned char *) slrn_skip_whitespace ((char *) lpp); if (*lpp == '=') { c->pscore_flags |= RETURN_THIS_SCORE; lpp++; } c->score = atoi ((char *)lpp); c->start_new_score = 1; if (description != NULL) { slrn_free (description); description = NULL; } eol = (unsigned char *) slrn_strchr ((char *)lpp, '#'); if (eol == NULL) lpp = (unsigned char *) slrn_strchr ((char *)lpp, '%'); else lpp = eol; if (lpp != NULL) { lpp = (unsigned char *) slrn_skip_whitespace ((char *)lpp + 1); eol = lpp + strlen ((char*)lpp) - 1; while ((eol >= lpp) && (*eol <= 32)) *eol-- = '\0'; description = slrn_safe_strmalloc ((char *)lpp); } continue; } if (c->start_new_score) { if (!slrn_case_strncmp (lp, (unsigned char *) "Expires:", 8)) { ret = has_score_expired (lp + 8, c->today); if (ret == -1) { score_error (_("Expecting 'Expires: MM/DD/YYYY' or 'Expires: DD-MM-YYYY'"), line, *linenum, file); slrn_free (description); return -1; } if (ret) { slrn_message (_("%s has expired score on line %d"), file, *linenum); #ifndef SLRNPULL_CODE Slrn_Saw_Warning = 1; #endif c->start_new_score = 0; c->score_has_expired = 1; } else c->score_has_expired = 0; continue; } if (NULL == (c->pst = create_new_score (c->group, c->start_new_group, c->gnt_not_flag, c->score, c->pscore_flags, file, *linenum, description))) { score_error (_("Bad group regular expression."), line, *linenum, file); slrn_free (description); return -1; } c->start_new_group = 0; c->start_new_score = 0; c->score_has_expired = 0; if (description != NULL) { slrn_free (description); description = NULL; } } if (c->score_has_expired) continue; if (c->pst == NULL) { score_error (_("Expecting Score keyword."), line, *linenum, file); return -1; } } /*if (sub_psrt==null) */ slrn_free (description); if (*lp == '~') { not_flag = 1; lp++; } else not_flag = 0; ret = -1; psrt = (PScore_Regexp_Type *) slrn_safe_malloc (sizeof (PScore_Regexp_Type)); /* Otherwise the line is a kill one */ if (!slrn_case_strncmp (lp, (unsigned char *)"Subject:", 8)) ret = add_group_regexp (psrt, lp + 7, lp, SCORE_SUBJECT, not_flag); else if (!slrn_case_strncmp (lp, (unsigned char *)"From:", 5)) ret = add_group_regexp (psrt, lp + 4, lp, SCORE_FROM, not_flag); else if (!slrn_case_strncmp (lp, (unsigned char *)"Xref:", 5)) ret = add_group_regexp (psrt, lp + 4, lp, SCORE_XREF, not_flag); else if (!slrn_case_strncmp (lp, (unsigned char *)"Newsgroup:", 10)) ret = add_group_regexp (psrt, lp + 9, lp, SCORE_NEWSGROUP, not_flag); else if (!slrn_case_strncmp (lp, (unsigned char *)"References:", 11)) ret = add_group_regexp (psrt, lp + 10, lp, SCORE_REFERENCES, not_flag); else if (!slrn_case_strncmp (lp, (unsigned char *)"Lines:", 6)) ret = add_group_regexp (psrt, lp + 5, lp, SCORE_LINES, not_flag); else if (!slrn_case_strncmp (lp, (unsigned char *)"Date:", 5)) ret = add_group_regexp (psrt, lp + 4, lp, SCORE_DATE, not_flag); else if (!slrn_case_strncmp (lp, (unsigned char *)"Age:", 4)) ret = add_group_regexp (psrt, lp + 3, lp, SCORE_AGE, not_flag); else if (!slrn_case_strncmp (lp, (unsigned char *)"Bytes:", 6)) ret = add_group_regexp (psrt, lp + 5, lp, SCORE_BYTES, not_flag); else if (!slrn_case_strncmp (lp, (unsigned char *)"Has-Body:", 9)) ret = add_group_regexp (psrt, lp + 8, lp, SCORE_HAS_BODY, not_flag); else if (!slrn_case_strncmp (lp, (unsigned char *)"Message-Id:", 11)) ret = add_group_regexp (psrt, lp + 10, lp, SCORE_MESSAGE_ID, not_flag); else if (!slrn_case_strncmp (lp, (unsigned char *)"{:", 2)) { if (lp[2] ==':') { ret = add_group_regexp (psrt, lp + 1, lp, SCORE_SUB_OR, not_flag); } else { ret = add_group_regexp (psrt, lp + 1, lp, SCORE_SUB_AND, not_flag); } if (phrase_score_file(file, fp, c, linenum, psrt)) return -1; } else if (!slrn_case_strncmp (lp, (unsigned char *)"}", 1)) { SLFREE (psrt); if (sub_psrt != NULL) return 0; else { score_error (_("Missing COLON."), line, *linenum, file); return -1; } } else { unsigned char *lpp = lp; while (*lpp && (*lpp != ':')) lpp++; if (*lpp != ':') { SLFREE (psrt); score_error (_("Missing COLON."), line, *linenum, file); return -1; } ret = add_group_regexp (psrt, lpp, lp, SCORE_GENERIC, not_flag); } if (ret == -1) { score_error (_("No regular expression given."), line, *linenum, file); return -1; } if (sub_psrt == NULL) { if (c->pst->pregexp_list == NULL) { c->pst->pregexp_list = psrt; } else { PScore_Regexp_Type *last = c->pst->pregexp_list; while (last->next != NULL) last = last->next; last->next = psrt; } } else { if (sub_psrt->ireg.psrt == NULL) { sub_psrt->ireg.psrt = psrt; } else { PScore_Regexp_Type *last = sub_psrt->ireg.psrt; while (last->next != NULL) last = last->next; last->next = psrt; } } } /*while (fgets (line, sizeof (line) - 1, fp))*/ if (sub_psrt == NULL) return 0; else { score_error (_("Missing '}' for subscore"), line, *linenum, file); return -1; } }