int main(int argc, char **argv) { int c; unsigned int columns = 0; int indicator = 0; FILE *ptr_myfile; char *buffer; unsigned int rownum = 0; char exit = -1; unsigned int printnumcols = 0; unsigned int printnumrows = 0; opterr = 0; while ((c = getopt (argc, argv, ":c:hi")) != -1) { switch (c) { case 'c': if (isInt(optarg) == 1) { fprintf(stderr, "Argument of \"-c\" is not numeric!\n"); return(1); } columns = atoi(optarg); break; case 'i': indicator = 1; break; case 'h': fprintf(stderr, "usage: %s [-c numcols] [-i] [-h] filename\n", argv[0]); return(1); break; case ':': fprintf (stderr, "Option -%c requires an argument.\n", optopt); return(1); case '?': if (isprint (optopt)) fprintf (stderr, "Unknown option '-%c'.\n", optopt); else fprintf (stderr, "Unknown option character '\\x%x'.\n", optopt); return(1); } } ptr_myfile=fopen(argv[optind], "r"); if (ptr_myfile == NULL) { fprintf(stderr, "Please, provide file in tptbin format!\n"); return(1); } // allocate memory for one record buffer = (char *)malloc(MAXBUF+1); if (!buffer) { fprintf(stderr, "Memory error!"); fclose(ptr_myfile); return(8); } while (!feof(ptr_myfile)) { unsigned short rowlen; size_t bytesread; int numofcols = 0; // read the row len definition from file (2 bytes) bytesread = fread(&rowlen, 1, sizeof(rowlen), ptr_myfile); if (bytesread == sizeof(rowlen)) { // read the row data based on the known length bytesread = fread(buffer, 1, rowlen, ptr_myfile); if (bytesread == rowlen) { //printf("Row: %d; Length: %d\n", rownum, rowlen); // calculate here numofcols = CalcNumberColumns(buffer, rowlen, indicator, columns); if (printnumcols == 0) { printnumcols = numofcols; printnumrows = rownum; } else if (printnumcols > 0 && numofcols != printnumcols) { printf("%d columns for rows %d to %d\n", printnumcols, printnumrows + 1, rownum); printnumcols = numofcols; printnumrows = rownum; } if (numofcols == -1) { // internal buffer error fprintf(stderr, "%d: Internal Error!\n", rownum + 1); exit = 7; break; } else if (numofcols == -2) { // maximum number of supported columns reached fprintf(stderr, "%d: No number of columns determined. Reached maximum column count.\n", rownum + 1); exit = 6; break; } else if (numofcols == -3) { // offset reached length of row fprintf(stderr, "%d: No number of columns determined. Reached record len.\n", rownum + 1); exit = 5; break; } else if (numofcols == -4) { // Indicator, number of columns, but no record format found fprintf(stderr, "%d: Indicator, number of columns given, but no correct record format found!\n", rownum + 1); exit = 8; break; } else if (numofcols == -5) { // No indicator, no number of columns, no record format found fprintf(stderr, "%d: No indicator, no number of columns given. No correct record format found!\n", rownum + 1); exit = 9; break; } else if (numofcols == -6) { // No indicator, number of columns, no record format found fprintf(stderr, "%d: No indicator, number of columns given, but no correct record format found!\n", rownum + 1); exit = 10; break; } } else if (bytesread == 0) { if (printnumcols > 0) { printf("%d columns for rows %d to %d\n", printnumcols, printnumrows + 1, rownum); } exit = 4; break; } else { if (printnumcols > 0) { printf("%d columns for rows %d to %d\n", printnumcols, printnumrows + 1, rownum); } // row len definition in file does not meet actual row len fprintf(stderr, "Row %d: Row len definition in file does not meet actual row len\n", rownum); exit = 3; break; } rownum++; } else if (bytesread == 0) { if (printnumcols > 0) { printf("%d columns for rows %d to %d\n", printnumcols, printnumrows + 1, rownum); } exit = 0; break; } else { if (printnumcols > 0) { printf("%d columns for rows %d to %d\n", printnumcols, printnumrows + 1, rownum); } // not able to read row len definition in file fprintf(stderr, "Row %d: Not able to read row len definition in file\n", rownum); exit = 1; break; } } fclose(ptr_myfile); free(buffer); return(exit); }
int main(int argc, char **argv) { //int x, y; WINDOW *headerwin; WINDOW *linenumwin; WINDOW *contentwin; int c; unsigned short numcols = 0; unsigned int i; char indicator = 0; struct windim work; int exit; opterr = 0; while ((c = getopt (argc, argv, ":c:hi")) != -1) { switch (c) { case 'c': numcols = atoi(optarg); break; case 'i': indicator = 1; break; case 'h': printf("usage: %s [-c numcols] [-i] [-h] filename\n", argv[0]); return(1); break; case ':': fprintf (stderr, "Option -%c requires an argument.\n", optopt); break; case '?': if (isprint (optopt)) fprintf (stderr, "Unknown option '-%c'.\n", optopt); else fprintf (stderr, "Unknown option character '\\x%x'.\n", optopt); return(1); } } FILE *ptr_myfile; char *buffer; unsigned int rownum = 0; for (i = optind; i < argc; i++) { if ((ptr_myfile=fopen(argv[i],"r")) == NULL) { fprintf(stderr, "Please, provide file in tptbin format!\n"); return(1); } else { break; } } // allocate memory for one record buffer = (char *)malloc(MAXBUF+1); char *p; p = buffer; if (!buffer) { fprintf(stderr, "Memory error!"); fclose(ptr_myfile); return(8); } // clear buffer for (i = 0; i < sizeof(buffer); i++) { buffer[i] = 0x00; } setlocale(LC_CTYPE, ""); CursesInitialSetup(&work, &headerwin, &linenumwin, &contentwin); while (!feof(ptr_myfile)) { unsigned short rowlen; size_t bytesread; int numofcols = 0; // read the row len definition from file (2 bytes) bytesread = fread(&rowlen, 1, sizeof(rowlen), ptr_myfile); if (bytesread == sizeof(rowlen)) { // read the row data based on the known length bytesread = fread(p, 1, rowlen, ptr_myfile); if (bytesread == rowlen) { // clear buffer before loading it again for (i = 0; i < rowlen; i++) { p[i] = 0; } // calculate here numofcols = CalcNumberColumns(buffer, rowlen, indicator, numcols); if (numofcols > 0) { } } else { // row len definition in file does not meet actual row len fprintf(stderr, "Row %d: Row len definition in file does not meet actual row len\n", rownum); exit = 3; break; } rownum++; } else { // not able to read row len definition in file fprintf(stderr, "Row %d: Not able to read row len definition in file\n", rownum); exit = 1; break; } } fclose(ptr_myfile); free(buffer); getch(); return(0); }