/* SKIP -- Skip characters/fields/lines in an input stream */ #include "misc.h" #define SMAX 200 /* maximum number of characters in strings */ skip (input, flag, start, nskip, skips) char input[]; int *flag, *start, nskip[], *skips; { FILE *fd; int n, i, j; char c, string[SMAX]; if (strcmp (input, "STDIN") == 0) fd = getstdin; else if ((fd = fopen (input, "r")) == NULL) { printf ("SKIP: Can't read file %s\n", input); return; } switch (*flag) { case 1: /* characters */ for (i = 0; i <= *start; i++) c = getc (fd); for (;;) { for (i = 0; i < *skips; i++) { printf ("%c", c); for (j = 0; j <= nskip[i]; j++) { c = getc (fd); if (c == '\n') { printf ("%c", c); j--; } if (feof (fd)) { fclose (fd); return; } } } } case 2: /* fields */ for (i = 0; i <= *start; i++) fscanf (fd, "%s", string); for (;;) { for (i = 0; i < *skips; i++) { printf ("%s ", string); for (j = 0; j <= nskip[i]; j++) { fscanf (fd, "%s", string); if (feof (fd)) { fclose (fd); printf ("\n"); return; } } } printf ("\n"); } break; case 3: /* lines */ for (i = 0; i <= *start; i++) fgets (string, SMAX, fd); for (;;) { for (i = 0; i < *skips; i++) { printf ("%s\n", string); for (j = 0; j <= nskip[i]; j++) { fgets (string, SMAX, fd); if (feof (fd)) { fclose (fd); return; } } } } } }