home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 3 / 3138 / tear.c < prev   
Encoding:
C/C++ Source or Header  |  1991-03-27  |  1.4 KB  |  80 lines

  1. /*
  2.  * tear - tear.c - 03/26/91 - Brendan Kehoe
  3.  *
  4.  * a replacement for the tear shell script & awk procedure
  5.  */
  6.  
  7. #include <stdio.h>
  8. #include <string.h>
  9.  
  10. extern char    *safemalloc(), *get_a_line();
  11.  
  12. main(argc, argv)
  13.     int argc;
  14.     char **argv;
  15. {
  16.     register char *lp;
  17.     register int curline;
  18.     extern char *safemalloc(), *get_a_line();
  19.     char *line, *hdr, *body;
  20.     short doit;
  21.     FILE *fin, *fout;
  22.  
  23.     line = safemalloc(1001);
  24.     hdr = safemalloc(100);
  25.     body = safemalloc(100);
  26.  
  27.     if (argc < 2)
  28.         exit(1);
  29.  
  30.     if (argc == 2)
  31.         fin = stdin;
  32.     else if ((fin = fopen(*(argv+2),"r"))==(FILE *)NULL)
  33.         exit(1);
  34.  
  35.     strcpy(hdr,*(argv+1));
  36.     strcpy(body,*(argv+1));
  37.     strcat(hdr,"hdr");
  38.     strcat(body,"body");
  39.     fout = fopen(hdr,"w");
  40.  
  41.     lp = line;
  42.     doit = curline = 0;
  43.     while (get_a_line(line,1000,fin))
  44.       {
  45.         curline++;
  46.         if (doit == 0)
  47.           {
  48.         /* ($0 ~ /^[^ \t]*:/ || ($0 ~ /^[ \t]/ && NR > 1)) */
  49.         
  50.         if ((*lp != ' ') && (*lp != '\t'))
  51.           {
  52.             /* if the first is non-ws, but it doesn't have
  53.                a : in it, then it's bad */
  54.             
  55.             if (!strchr(lp, ':'))
  56.               doit = 1;
  57.           }
  58.         else
  59.           {
  60.             /* if it starts with a space or a tab, and we've
  61.                not gone past the first header, it's bad */
  62.             
  63.             if (curline <= 1)
  64.               doit = 1;
  65.           }
  66.  
  67.         if (doit)
  68.           {
  69.             fclose(fout);
  70.             fout = fopen(body,"w");
  71.           }
  72.           }
  73.         fputs(line,fout);
  74.       }
  75.  
  76.     fclose(fout);
  77.     fclose(fin);
  78.     return(0);    /* shut UP lint! */
  79. }
  80.