#include #include #include char *separators = ":"; char *title = "Default Title"; int html = 1; int center_cnt = 0, *center = NULL; int border=4; int header_rows = 0; int comments = 0; int slash2hr = 0; #define CENTER_ALL ((int *)(-1)) void get_line(char *s, int sizeofs) { char sx[4096], *p; for(;;) { memset( s, 0, sizeofs ); if( fgets( s, sizeofs-1, stdin ) == NULL ) return; if( comments && (s[0] == '#') ) continue; break; } if( (p = strchr(s,'\n')) != NULL ) *p = '\0'; if( (p = strchr(s,'\r')) != NULL ) *p = '\0'; if( ((p = strrchr(s,'\\')) != NULL) && (*(p+1) == '\0') && (*(p-1) != '\\') ) { *p = '\0'; for(;;) { memset( sx, 0, sizeof(sx) ); if( fgets( sx, sizeof(sx)-1, stdin ) == NULL ) break; if( (p = strchr(sx,'\n')) != NULL ) *p = '\0'; if( (p = strchr(sx,'\r')) != NULL ) *p = '\0'; strncat( s, sx, sizeofs-1 ); if( ((p = strrchr(s,'\\')) != NULL) && (*(p+1) == '\0') && (*(p-1) != '\\') ) { *p = '\0'; continue; } break; } } } int to_be_centered(int n) { register int i; if( center == CENTER_ALL ) return 1; if( center == NULL ) return 0; for(i=0; i] " "[-F] " "[-n] " "[-c|-cALL] " "[-b] " "[-h] " "[-\\#] " "[-/] " "\n", argv[0] ); return 1; } switch( argv[i][1] ) { case '/': slash2hr = 1; break; case '#': comments = 1; break; case 'b': border = atoi( arg ); break; case 'c': if( strcmp( arg, "ALL" ) == 0 ) { center = CENTER_ALL; } else { int j; char *p; p = arg; center_cnt = 0; while(*p) { if( *p == ',' ) center_cnt++; p++; } center_cnt++; if( (center = (int *)malloc( sizeof(int)*center_cnt )) == NULL ) { perror( "malloc" ); return 1; } for(j = 0, p = strtok(arg,","); j < center_cnt; j++, p = strtok(NULL,",") ) { if( (center[j] = atoi(p)) <= 0 ) { fprintf( stderr, "bad argument for -c option: '%s'\n", p ); return 1; } } } break; case 'h': header_rows = atoi( argv[i]+2 ); break; case 'F': separators = argv[i]; separators += 2; /* skip '-F' */ break; case 't': title = argv[i]; title += 2; /* skip '-t' */ break; case 'n': html = 0; break; default : fprintf( stderr, "unknown option '%s'\n", argv[i] ); return 1; } } if( html) { printf( "\n\n%s\n\n\n\n", title ); printf( "\n", border ); } for(;;) { char s[4096], sx[4096], *p; get_line( sx, sizeof(sx) ); if( feof(stdin) && (*sx == '\0') ) break; line++; printf( "\n" ); p = strtok( sx, separators ); i = 1; while( p != NULL ) { memset( s, 0, sizeof(s) ); cut2( s, p ); if( slash2hr && (line > header_rows) ) div2hr(s); printf( ( line <= header_rows ) ? "\n" ); p = strtok( NULL, separators ); i++; } printf( "\n" ); } if( html ) { printf( "
" : "" ); printf( to_be_centered(i) ? "
%s
" : "%s", (*s) ? s : " " ); printf( ( line <= header_rows ) ? "\n" : "
\n" ); printf( "

Build with jno converter.

\n" ); printf( "\n\n" ); } return 0; }