📄 find_disc.c
字号:
/*===========================================================================*//* DMC Interim out | find_disc.c | Scan_phase *//*===========================================================================*//* Name: find_disc.c Purpose: find all time discontinuities within a data file Usage: int find_disc () int ifd; err = find_disc(ifd) Input: int ifd open file descriptor int precision time precision Output: int find_disc () >=0 number of time segments found =-1 error Externals: Debug - setting of environment variable DEBUG (globals.h) Messages: Warnings: Errors: Fatals: Called by: Calls to: cmp_time compares two times in struct input_time fmt add_time adds e-04 sec to time in struct input_time fmt get_scaninfo get subset of data hdr info and data start/end Notes: Assumes archive data record length = Lrecl Problems: Segment counter (segcnt) does not count skipped segments. Assumes all data header records in 680xx-compatible byte order. References: none Language: ANSI standard C, under Sun OS 3.5 Revisions: 03/22/89 Kevin MacKenzie original version*/ /*=====================================*//*=================| |=================*/ /*=====================================*/#include "output.h"/* the following definitions provide private storage over multiple entries */ int find_disc (ifd, precision)int ifd; /* open file descriptor */long precision; /* time comparison precision, e-04 s */{ char *buf; /* ptr to input data record buffer */ int file_o = 0; /* file offset pointer */ int len; /* length of buffer returned by read */ struct input_scan rec_scan; /* data hdr scan info of data record */ struct input_time rec_start; /* start time of data record */ struct input_time rec_end; /* end time of data record */ struct input_time est_rec_start; /* estim. start time of next rec */ struct input_data_logrec *rec; /* data hdr */ long interval; /* data sample interval,e-04 sec/samp */ int i = 1; /* number of segments */ buf = (char *)malloc ((unsigned int) Lrecl); fprintf (D_OUT, "--------------------------------------------------- seg # %d\n",i); while ((len = read (ifd, buf, (unsigned int) Lrecl)) > 0) { rec = (struct input_data_logrec *) buf; get_scaninfo (buf, &rec_scan, &rec_start, &rec_end, &interval); precision = min (precision, interval / 5); if (file_o > 0 && cmp_time (est_rec_start, rec_start, precision) != 0) { i++; fprintf (D_OUT, "--------------------------------------------------- seg # %d\n",i); } fprintf (D_OUT, "number of samples = %8d\n", (int)rec->hdr.full.nsamples); fprintf (D_OUT, "fracsecs per sample = %6d\n",interval); print_time ("data record start=",&rec_start); print_time ("data record end=",&rec_end); est_rec_start = add_time (rec_end, interval); print_time ("estimated start=",&est_rec_start); fprintf (D_OUT,"\n"); file_o += len; /* increment file offset memory */ } fprintf (D_OUT, "total bytes read = %d\n",file_o); return (i);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -