/* * Reads a polyhedron file on stdin, counts the rows, and outputs * an equivalent file with a corrected row count. * * David Bremner. bremner@cs.unb.ca * */ #include #include #include #include #include #include #include "lrsmp.h" #include "process_args.h" typedef lrs_mp integer_t; #define MP_DIGITS 1000L #include "countrows.h" int main(argc,argv) int argc; char **argv; { int i,j; long int m,n; char **lines; int line_count; char buf[BUFSIZ]; char *type; char *cursor; process_args(argc,argv,DOCSTRING); lrs_mp_init (MP_DIGITS,stdin,stdout); while ( fgets(buf,BUFSIZ,stdin) !=NULL ) { fputs(buf,stdout); if (strncmp(buf,"begin",5)==0) break; } if (fgets(buf,BUFSIZ,stdin)==NULL) { fprintf(stderr,"No parameter line"); exit(1); } cursor=buf; while(isspace(*cursor)) cursor++; while (!isspace(*cursor)) cursor++; n=strtol(cursor,&cursor,10); if (errno==ERANGE || n==0){ fprintf(stderr,"Missing or absurd column count"); exit(1); } line_count=2*n; lines=calloc(line_count,sizeof(char *)); while (isblank(*cursor)){ cursor++; } type=strdup(cursor); m=0; do { if (fgets(buf,BUFSIZ,stdin)==NULL) { fprintf(stderr,"missing end"); exit(1); } if (strncmp(buf,"end",3)!=0){ if (m>=line_count){ line_count *=2; lines=realloc(lines,line_count*sizeof(char *)); } lines[m++]=strdup(buf); } } while (strncmp(buf,"end",3)!=0); printf("%ld %ld %s",m,n,type); for (i=0;i