This is rtf2asc.c in view mode; [Download] [Up]
/* rtf2ascii.c - convert rtf to ascii coded in 1994 by Felix Rauch felix@nice.ch */ #include <stdio.h> FILE *in; void scanblock(void) /* scan a block in `{}' */ { int c; while(!feof(in) && ((c = fgetc(in)) != '}')) { if(c == '{') scanblock(); } } int scanpart(void) /* return 1 if text follows, otherwise 0 */ { int c; while(!feof(in)) { c = fgetc(in); if(c == ' ') /* the rest until '\n' is test */ return 1; else if(c == '\n') /* end of command-part */ return 0; else if(c == '\{') /* skip whole block */ scanblock(); } return 0; /* not reached if there are no errors */ } void scantext(void) /* scan text until '\n' */ { int c; while(!feof(in) && ((c = fgetc(in)) != '\n')) { if(c == '\\') /* escape char */ c = fgetc(in); fputc(c, stdout); } } void main(int argc, char *argv[]) { int i, c, ret; char rtfc[7] = "{\\rtf0"; if(argc == 1) in = stdin; else if(argc == 2) in = fopen(argv[1], "r"); for(i = 0; i < 6; i++) { /* rtf-magic-cookie test */ if(fgetc(in) != rtfc[i]) { puts("not in rtf-format"); exit(1); } } while(!feof(in)) { ret = 2; /* no command part or block found yet */ c = fgetc(in); if(c == '\\') { ret = scanpart(); /* command part */ } else if(c == '\{') { /* block found */ scanblock(); ret = 0; if((c = fgetc(in)) != '\n') /* a '\n' after a block must be ignored */ ungetc(c, in); } else if(c == '}') { /* end of rtf-stream */ break; } if(ret > 0) { /* if there's text after a command part or just text */ if(ret == 2) /* if just text, the print first char */ fputc(c, stdout); /* (otherwise it's a '//' */ scantext(); /* text block */ } } exit(0); /* that's all, dude */ }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.