| #include <stdio.h> | |
| #include <string.h> | |
| #include <ctype.h> | |
| /* | |
| * Remove empty lines from the beginning and end. | |
| * | |
| * Turn multiple consecutive empty lines into just one | |
| * empty line. | |
| */ | |
| static void cleanup(char *line) | |
| { | |
| int len = strlen(line); | |
| if (len > 1 && line[len-1] == '\n') { | |
| do { | |
| unsigned char c = line[len-2]; | |
| if (!isspace(c)) | |
| break; | |
| line[len-2] = '\n'; | |
| len--; | |
| line[len] = 0; | |
| } while (len > 1); | |
| } | |
| } | |
| int main(int argc, char **argv) | |
| { | |
| int empties = -1; | |
| char line[1024]; | |
| while (fgets(line, sizeof(line), stdin)) { | |
| cleanup(line); | |
| /* Not just an empty line? */ | |
| if (line[0] != '\n') { | |
| if (empties > 0) | |
| putchar('\n'); | |
| empties = 0; | |
| fputs(line, stdout); | |
| continue; | |
| } | |
| if (empties < 0) | |
| continue; | |
| empties++; | |
| } | |
| return 0; | |
| } |