#include #include #include #define EVENT_RECORD_TYPE 0 #define BEGIN_RECORD_TYPE 1 #define PAUSE_RECORD_TYPE 2 #define RESUME_RECORD_TYPE 3 #define END_RECORD_TYPE 4 static short Ehdr[10]; const char rec_types[5][30]={"EVENT_RECORD_TYPE","GIN_RECORD_TYPE", "PAUSE_RECORD_TYPE","RESUME_RECORD_TYPE", "END_RECORD_TYPE" }; int Ewrite(int type,int run, int event,int mode, int n, void* buf,FILE *fp){ int i; time_t tim; static int short_size=sizeof(short); short *hdr = &Ehdr[0]; int *ieve= (int *) &hdr[2]; hdr[1]=type; switch (type){ case EVENT_RECORD_TYPE: if (n%2==1) n++; // in paw fortran cannnot read shorts hdr[0]=6 + n; ieve[0] =event; // hdr[2] .. hdr[3] event // EVENT_RECORD_TYPE: in mode time from the first call in ms is stored ieve[1] =mode; // hdr[4] .. hdr[5] ms from first call fwrite(hdr, short_size,6,fp); fwrite(buf, short_size,n,fp); break; case BEGIN_RECORD_TYPE: case END_RECORD_TYPE: case RESUME_RECORD_TYPE: case PAUSE_RECORD_TYPE: hdr[0]=8; hdr[2]=run; hdr[3]=event; hdr[4]=mode; ieve[2]=time(NULL); fwrite(hdr, short_size,8,fp); break; } /* printf("\n%s-%d-> ",rec_types[type],type); for (i=0;i<7;i++) printf("%d ",hdr[i]); getchar(); */ return 0; } int Eread(int *type,int *run, int *event,int *mode, int *n, void* buf,FILE *fp){ int hdr[6]; int nr; static int int_size=sizeof(int); fread(hdr, int_size,6,fp); *n =hdr[0]-6*int_size; *type =hdr[1]; *run =hdr[2]; *event=hdr[3]; *mode =hdr[4]; switch (*type){ case EVENT_RECORD_TYPE: fread(buf, *n,1,fp); return 0; break; default: if (*n>0) { fread(buf, *n,1,fp); return 0; } return 0; break; } return 0; }