#include <stdlib.h> #include <stdint.h> #include <string.h> #include <sys/utsname.h> #include <sys/types.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <errno.h> #include <math.h> #include <fcntl.h> #include <stdarg.h> #include <stdio.h> #include <string.h> #include <unistd.h> int main(int argc, char *argv[]) { int iarg; char fname[10000]; uint64_t word; int val[64]; int bit[64]; FILE *fdin; int nb=2; int off=0; int ioff=0; int dr=24; int idr=0; int ib=0; int iw=0; bit[0]=19; bit[1]=8; // for (iarg=0; iarg<argc; iarg++) printf("%d %s\n",iarg, argv[iarg]); if (argc<2) printf("Error: usage is %s fname [dr off b0 b1 bn]\n"); if (argc>2) dr=atoi(argv[2]); if (argc>3) off=atoi(argv[3]); if (argc>4) { for (ib=0; ib<64; ib++) { if (argc>4+ib) { bit[ib]=atoi(argv[4+ib]); nb++; } } } idr=0; for (ib=0; ib<nb; ib++) { val[ib]=0; } fdin=fopen(argv[1],"rb"); if (fdin==NULL) { printf("Cannot open input file %s for reading\n",argv[1]); return 200; } while (fread((void*)&word, 8, 1, fdin)) { // printf("%llx\n",word); if (ioff<off) ioff++; else { for (ib=0; ib<nb; ib++) { if (word&(1<<bit[ib])) val[ib]|=(1<<idr); } idr++; if (idr==dr) { idr=0; fprintf(stdout,"%d\t",iw++); for (ib=0; ib<nb; ib++) { #ifdef HEX fprintf(stdout,"%08llx\t",val[ib]); #else fprintf(stdout,"%lld\t",val[ib]); #endif val[ib]=0; } fprintf(stdout,"\n"); } } } if (idr!=0) { fprintf(stdout,"%d\t",iw++); for (ib=0; ib<nb; ib++) { #ifdef HEX fprintf(stdout,"%08llx\t",val[ib]); #else fprintf(stdout,"%lld\t",val[ib]); #endif val[ib]=0; } fprintf(stdout,"\n"); } fclose(fdin); return 0; }