libmseed 3.1.4
The miniSEED data format library
Loading...
Searching...
No Matches
libmseed.h
Go to the documentation of this file.
1/**********************************************************************/
23
24#ifndef LIBMSEED_H
25#define LIBMSEED_H 1
26
27#ifdef __cplusplus
28extern "C" {
29#endif
30
31#define LIBMSEED_VERSION "3.1.4"
32#define LIBMSEED_RELEASE "2025.113"
33
45
58
59/* C99 standard headers */
60#include <stdlib.h>
61#include <stdio.h>
62#include <stdarg.h>
63#include <time.h>
64#include <string.h>
65#include <ctype.h>
66#include <math.h>
67
70#define PRIsize_t "zu"
71
72#if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64)
73 #define LMP_WIN 1
74#endif
75
76/* Set platform specific features, Windows versus everything else */
77#if defined(LMP_WIN)
78 #include <windows.h>
79 #include <sys/types.h>
80 #include <sys/timeb.h>
81
82 /* Re-define print conversion for size_t values */
83 #undef PRIsize_t
84 #if defined(WIN64) || defined(_WIN64)
85 #define PRIsize_t "I64u"
86 #else
87 #define PRIsize_t "I32u"
88 #endif
89
90 /* For MSVC 2012 and earlier define standard int types, otherwise use inttypes.h */
91 #if defined(_MSC_VER) && _MSC_VER <= 1700
92 typedef signed char int8_t;
93 typedef unsigned char uint8_t;
94 typedef signed short int int16_t;
95 typedef unsigned short int uint16_t;
96 typedef signed int int32_t;
97 typedef unsigned int uint32_t;
98 typedef signed __int64 int64_t;
99 typedef unsigned __int64 uint64_t;
100 #else
101 #include <inttypes.h>
102 #endif
103
104 /* For MSVC define PRId64 and SCNd64 and alternate functions */
105 #if defined(_MSC_VER)
106 #if !defined(PRId64)
107 #define PRId64 "I64d"
108 #endif
109 #if !defined(SCNd64)
110 #define SCNd64 "I64d"
111 #endif
112
113 #define snprintf _snprintf
114 #define vsnprintf _vsnprintf
115 #define strcasecmp _stricmp
116 #define strncasecmp _strnicmp
117 #define strtoull _strtoui64
118 #define fileno _fileno
119 #define fdopen _fdopen
120 #endif
121
122 /* Extras needed for MinGW */
123 #if defined(__MINGW32__) || defined(__MINGW64__)
124 #include <fcntl.h>
125
126 #define _fseeki64 fseeko64
127 #define _ftelli64 ftello64
128
129 #define fstat _fstat
130 #define stat _stat
131 #endif
132#else
133 /* All other platforms */
134 #include <inttypes.h>
135 #include <sys/time.h>
136#endif
137
138#define MINRECLEN 40
139#define MAXRECLEN 10485760
140#define MAXRECLENv2 131172
141
142#define LM_SIDLEN 64
143
146#define MS_ISRATETOLERABLE(A,B) (fabs (1.0 - ((A) / (B))) < 0.0001)
147
150#define MS2_ISDATAINDICATOR(X) ((X)=='D' || (X)=='R' || (X)=='Q' || (X)=='M')
151
168#define MS3_ISVALIDHEADER(X) ( \
169 *(X) == 'M' && *((X) + 1) == 'S' && *((X) + 2) == 3 && \
170 (uint8_t) (*((X) + 12)) >= 0 && (uint8_t) (*((X) + 12)) <= 23 && \
171 (uint8_t) (*((X) + 13)) >= 0 && (uint8_t) (*((X) + 13)) <= 59 && \
172 (uint8_t) (*((X) + 14)) >= 0 && (uint8_t) (*((X) + 14)) <= 60)
173
190#define MS2_ISVALIDHEADER(X) ( \
191 (isdigit ((uint8_t) * (X)) || *(X) == ' ' || !*(X)) && \
192 (isdigit ((uint8_t) * ((X) + 1)) || *((X) + 1) == ' ' || !*((X) + 1)) && \
193 (isdigit ((uint8_t) * ((X) + 2)) || *((X) + 2) == ' ' || !*((X) + 2)) && \
194 (isdigit ((uint8_t) * ((X) + 3)) || *((X) + 3) == ' ' || !*((X) + 3)) && \
195 (isdigit ((uint8_t) * ((X) + 4)) || *((X) + 4) == ' ' || !*((X) + 4)) && \
196 (isdigit ((uint8_t) * ((X) + 5)) || *((X) + 5) == ' ' || !*((X) + 5)) && \
197 MS2_ISDATAINDICATOR (*((X) + 6)) && \
198 (*((X) + 7) == ' ' || *((X) + 7) == '\0') && \
199 (uint8_t) (*((X) + 24)) >= 0 && (uint8_t) (*((X) + 24)) <= 23 && \
200 (uint8_t) (*((X) + 25)) >= 0 && (uint8_t) (*((X) + 25)) <= 59 && \
201 (uint8_t) (*((X) + 26)) >= 0 && (uint8_t) (*((X) + 26)) <= 60)
202
204#define bit(x,y) ((x)&(y)) ? 1 : 0
205
207#ifdef _MSC_VER
208#define DEPRECATED __declspec(deprecated)
209#elif defined(__GNUC__) | defined(__clang__)
210#define DEPRECATED __attribute__((__deprecated__))
211#else
212#define DEPRECATED
213#endif
214
222
227typedef int64_t nstime_t;
228
232#define NSTMODULUS 1000000000
233
237#define NSTERROR -2145916800000000000LL
238
242#define NSTUNSET -2145916799999999999LL
243
246#define MS_EPOCH2NSTIME(X) (X) * (nstime_t) NSTMODULUS
247
250#define MS_NSTIME2EPOCH(X) (X) / NSTMODULUS
251
259#define MS_HPTIME2NSTIME(X) (X) * (nstime_t) 1000
260
268#define MS_NSTIME2HPTIME(X) (X) / 1000
269
284typedef enum
285{
286 ISOMONTHDAY = 0,
287 ISOMONTHDAY_Z = 1,
288 ISOMONTHDAY_DOY = 2,
289 ISOMONTHDAY_DOY_Z = 3,
290 ISOMONTHDAY_SPACE = 4,
291 ISOMONTHDAY_SPACE_Z = 5,
292 SEEDORDINAL = 6,
293 UNIXEPOCH = 7,
294 NANOSECONDEPOCH = 8
296
309typedef enum
310{
311 NONE = 0,
312 MICRO = 1,
313 NANO = 2,
314 MICRO_NONE = 3,
315 NANO_NONE = 4,
316 NANO_MICRO = 5,
317 NANO_MICRO_NONE = 6
319
320extern int ms_nstime2time (nstime_t nstime, uint16_t *year, uint16_t *yday,
321 uint8_t *hour, uint8_t *min, uint8_t *sec, uint32_t *nsec);
322extern char* ms_nstime2timestr (nstime_t nstime, char *timestr,
323 ms_timeformat_t timeformat, ms_subseconds_t subsecond);
324DEPRECATED extern char* ms_nstime2timestrz (nstime_t nstime, char *timestr,
325 ms_timeformat_t timeformat, ms_subseconds_t subsecond);
326extern nstime_t ms_time2nstime (int year, int yday, int hour, int min, int sec, uint32_t nsec);
327extern nstime_t ms_timestr2nstime (const char *timestr);
328extern nstime_t ms_mdtimestr2nstime (const char *timestr);
329extern nstime_t ms_seedtimestr2nstime (const char *seedtimestr);
330extern int ms_doy2md (int year, int yday, int *month, int *mday);
331extern int ms_md2doy (int year, int month, int mday, int *yday);
332
334
344
348#define MS_PACK_DEFAULT_RECLEN 4096
349
353#define MS_PACK_DEFAULT_ENCODING DE_STEIM2
354
358
360typedef struct MS3Record {
361 const char *record;
362 int32_t reclen;
363 uint8_t swapflag;
364
365 /* Common header fields in accessible form */
368 uint8_t flags;
370 double samprate;
371 int16_t encoding;
372 uint8_t pubversion;
373 int64_t samplecnt;
374 uint32_t crc;
375 uint16_t extralength;
376 uint32_t datalength;
377 char *extra;
378
379 /* Data sample fields */
381 uint64_t datasize;
382 int64_t numsamples;
384} MS3Record;
385
388#define MS3Record_INITIALIZER \
389{ \
390 .record = NULL, \
391 .reclen = -1, \
392 .swapflag = 0, \
393 .sid = {0}, \
394 .formatversion = 0, \
395 .flags = 0, \
396 .starttime = NSTUNSET, \
397 .samprate = 0.0, \
398 .encoding = -1, \
399 .pubversion = 0, \
400 .samplecnt = -1, \
401 .crc = 0, \
402 .extralength = 0, \
403 .datalength = 0, \
404 .extra = NULL, \
405 .datasamples = NULL, \
406 .datasize = 0, \
407 .numsamples = 0, \
408 .sampletype = 0 \
409}
410
411extern int msr3_parse (const char *record, uint64_t recbuflen, MS3Record **ppmsr,
412 uint32_t flags, int8_t verbose);
413
414extern int msr3_pack (const MS3Record *msr,
415 void (*record_handler) (char *, int, void *),
416 void *handlerdata, int64_t *packedsamples,
417 uint32_t flags, int8_t verbose);
418
419extern int msr3_repack_mseed3 (const MS3Record *msr, char *record, uint32_t recbuflen, int8_t verbose);
420
421extern int msr3_pack_header3 (const MS3Record *msr, char *record, uint32_t recbuflen, int8_t verbose);
422
423extern int msr3_pack_header2 (const MS3Record *msr, char *record, uint32_t recbuflen, int8_t verbose);
424
425extern int64_t msr3_unpack_data (MS3Record *msr, int8_t verbose);
426
427extern int msr3_data_bounds (const MS3Record *msr, uint32_t *dataoffset, uint32_t *datasize);
428
429extern int64_t ms_decode_data (const void *input, uint64_t inputsize, uint8_t encoding,
430 uint64_t samplecount, void *output, uint64_t outputsize,
431 char *sampletype, int8_t swapflag, const char *sid, int8_t verbose);
432
433extern MS3Record* msr3_init (MS3Record *msr);
434extern void msr3_free (MS3Record **ppmsr);
435extern MS3Record* msr3_duplicate (const MS3Record *msr, int8_t datadup);
436extern nstime_t msr3_endtime (const MS3Record *msr);
437extern void msr3_print (const MS3Record *msr, int8_t details);
438extern int msr3_resize_buffer (MS3Record *msr);
439extern double msr3_sampratehz (const MS3Record *msr);
440extern nstime_t msr3_nsperiod (const MS3Record *msr);
441extern double msr3_host_latency (const MS3Record *msr);
442
443extern int64_t ms3_detect (const char *record, uint64_t recbuflen, uint8_t *formatversion);
444extern int ms_parse_raw3 (const char *record, int maxreclen, int8_t details);
445extern int ms_parse_raw2 (const char *record, int maxreclen, int8_t details, int8_t swapflag);
447
463
470
478
479extern const MS3Selections* ms3_matchselect (const MS3Selections *selections, const char *sid,
480 nstime_t starttime, nstime_t endtime,
481 int pubversion, const MS3SelectTime **ppselecttime);
482extern const MS3Selections* msr3_matchselect (const MS3Selections *selections, const MS3Record *msr,
483 const MS3SelectTime **ppselecttime);
484extern int ms3_addselect (MS3Selections **ppselections, const char *sidpattern,
485 nstime_t starttime, nstime_t endtime, uint8_t pubversion);
486extern int ms3_addselect_comp (MS3Selections **ppselections,
487 char *network, char* station, char *location, char *channel,
488 nstime_t starttime, nstime_t endtime, uint8_t pubversion);
489extern int ms3_readselectionsfile (MS3Selections **ppselections, const char *filename);
490extern void ms3_freeselections (MS3Selections *selections);
491extern void ms3_printselections (const MS3Selections *selections);
493
496
519typedef struct MS3RecordPtr
520{
521 const char *bufferptr;
522 FILE *fileptr;
523 const char *filename;
524 int64_t fileoffset;
527 uint32_t dataoffset;
528 void *prvtptr;
531
539
541
572
574#define MSTRACEID_SKIPLIST_HEIGHT 8
575
591
605
607typedef struct MS3TraceList {
608 uint32_t numtraceids;
610 uint64_t prngstate;
612
638typedef struct MS3Tolerance
639{
640 double (*time) (const MS3Record *msr);
641 double (*samprate) (const MS3Record *msr);
643
646#define MS3Tolerance_INITIALIZER \
647 { \
648 .time = NULL, .samprate = NULL \
649 }
650
651extern MS3TraceList* mstl3_init (MS3TraceList *mstl);
652extern void mstl3_free (MS3TraceList **ppmstl, int8_t freeprvtptr);
653extern MS3TraceID* mstl3_findID (MS3TraceList *mstl, const char *sid, uint8_t pubversion, MS3TraceID **prev);
654
657#define mstl3_addmsr(mstl, msr, splitversion, autoheal, flags, tolerance) \
658 mstl3_addmsr_recordptr (mstl, msr, NULL, splitversion, autoheal, flags, tolerance)
659
660extern MS3TraceSeg* mstl3_addmsr_recordptr (MS3TraceList *mstl, const MS3Record *msr, MS3RecordPtr **pprecptr,
661 int8_t splitversion, int8_t autoheal, uint32_t flags,
662 const MS3Tolerance *tolerance);
663extern int64_t mstl3_readbuffer (MS3TraceList **ppmstl, const char *buffer, uint64_t bufferlength,
664 int8_t splitversion, uint32_t flags,
665 const MS3Tolerance *tolerance, int8_t verbose);
666extern int64_t mstl3_readbuffer_selection (MS3TraceList **ppmstl, const char *buffer, uint64_t bufferlength,
667 int8_t splitversion, uint32_t flags,
668 const MS3Tolerance *tolerance, const MS3Selections *selections,
669 int8_t verbose);
670extern int64_t mstl3_unpack_recordlist (MS3TraceID *id, MS3TraceSeg *seg, void *output,
671 uint64_t outputsize, int8_t verbose);
672extern int mstl3_convertsamples (MS3TraceSeg *seg, char type, int8_t truncate);
673extern int mstl3_resize_buffers (MS3TraceList *mstl);
674extern int64_t mstl3_pack (MS3TraceList *mstl, void (*record_handler) (char *, int, void *),
675 void *handlerdata, int reclen, int8_t encoding,
676 int64_t *packedsamples, uint32_t flags, int8_t verbose, char *extra);
677extern int64_t mstraceseg3_pack (MS3TraceID *id, MS3TraceSeg *seg,
678 void (*record_handler) (char *, int, void *),
679 void *handlerdata, int reclen, int8_t encoding,
680 int64_t *packedsamples, uint32_t flags, int8_t verbose,
681 char *extra);
682extern void mstl3_printtracelist (const MS3TraceList *mstl, ms_timeformat_t timeformat,
683 int8_t details, int8_t gaps, int8_t versions);
684extern void mstl3_printsynclist (const MS3TraceList *mstl, const char *dccid, ms_subseconds_t subseconds);
685extern void mstl3_printgaplist (const MS3TraceList *mstl, ms_timeformat_t timeformat,
686 double *mingap, double *maxgap);
688
721
723typedef struct LMIO
724{
725 enum
726 {
732 void *handle;
733 void *handle2;
735} LMIO;
736
739#define LMIO_INITIALIZER \
740 { \
741 .type = LMIO_NULL, .handle = NULL, .handle2 = NULL, .still_running = 0 \
742 }
743
751typedef struct MS3FileParam
752{
753 char path[512];
754 int64_t startoffset;
755 int64_t endoffset;
756 int64_t streampos;
757 int64_t recordcount;
758
762 uint32_t flags;
765
768#define MS3FileParam_INITIALIZER \
769 { \
770 .path = "", .startoffset = 0, .endoffset = 0, .streampos = 0, \
771 .recordcount = 0, .readbuffer = NULL, .readlength = 0, \
772 .readoffset = 0, .flags = 0, .input = LMIO_INITIALIZER \
773 }
774
775extern int ms3_readmsr (MS3Record **ppmsr, const char *mspath, uint32_t flags, int8_t verbose);
776extern int ms3_readmsr_r (MS3FileParam **ppmsfp, MS3Record **ppmsr, const char *mspath,
777 uint32_t flags, int8_t verbose);
778extern int ms3_readmsr_selection (MS3FileParam **ppmsfp, MS3Record **ppmsr, const char *mspath,
779 uint32_t flags, const MS3Selections *selections, int8_t verbose);
780extern int ms3_readtracelist (MS3TraceList **ppmstl, const char *mspath, const MS3Tolerance *tolerance,
781 int8_t splitversion, uint32_t flags, int8_t verbose);
782extern int ms3_readtracelist_timewin (MS3TraceList **ppmstl, const char *mspath, const MS3Tolerance *tolerance,
783 nstime_t starttime, nstime_t endtime, int8_t splitversion, uint32_t flags,
784 int8_t verbose);
785extern int ms3_readtracelist_selection (MS3TraceList **ppmstl, const char *mspath, const MS3Tolerance *tolerance,
786 const MS3Selections *selections, int8_t splitversion, uint32_t flags, int8_t verbose);
787extern int ms3_url_useragent (const char *program, const char *version);
788extern int ms3_url_userpassword (const char *userpassword);
789extern int ms3_url_addheader (const char *header);
790extern void ms3_url_freeheaders (void);
791extern int64_t msr3_writemseed (MS3Record *msr, const char *mspath, int8_t overwrite,
792 uint32_t flags, int8_t verbose);
793extern int64_t mstl3_writemseed (MS3TraceList *mst, const char *mspath, int8_t overwrite,
794 int maxreclen, int8_t encoding, uint32_t flags, int8_t verbose);
795extern int libmseed_url_support (void);
796extern MS3FileParam *ms3_mstl_init_fd (int fd);
798
808extern int ms_sid2nslc_n (const char *sid,
809 char *net, size_t netsize, char *sta, size_t stasize,
810 char *loc, size_t locsize, char *chan, size_t chansize);
811DEPRECATED extern int ms_sid2nslc (const char *sid, char *net, char *sta, char *loc, char *chan);
812extern int ms_nslc2sid (char *sid, int sidlen, uint16_t flags,
813 const char *net, const char *sta, const char *loc, const char *chan);
814extern int ms_seedchan2xchan (char *xchan, const char *seedchan);
815extern int ms_xchan2seedchan (char *seedchan, const char *xchan);
816extern int ms_strncpclean (char *dest, const char *source, int length);
817extern int ms_strncpcleantail (char *dest, const char *source, int length);
818extern int ms_strncpopen (char *dest, const char *source, int length);
820
849
873
905
924
940
941
947typedef struct LM_PARSED_JSON_s LM_PARSED_JSON;
948
951#define mseh_get(msr, ptr, valueptr, type, maxlength) \
952 mseh_get_ptr_r (msr, ptr, valueptr, type, maxlength, NULL)
953
956#define mseh_get_number(msr, ptr, valueptr) \
957 mseh_get_ptr_r (msr, ptr, valueptr, 'n', 0, NULL)
958
961#define mseh_get_int64(msr, ptr, valueptr) \
962 mseh_get_ptr_r (msr, ptr, valueptr, 'i', 0, NULL)
963
966#define mseh_get_string(msr, ptr, buffer, maxlength) \
967 mseh_get_ptr_r (msr, ptr, buffer, 's', maxlength, NULL)
968
971#define mseh_get_boolean(msr, ptr, valueptr) \
972 mseh_get_ptr_r (msr, ptr, valueptr, 'b', 0, NULL)
973
976#define mseh_exists(msr, ptr) \
977 (!mseh_get_ptr_r (msr, ptr, NULL, 0, 0, NULL))
978
979extern int mseh_get_ptr_r (const MS3Record *msr, const char *ptr,
980 void *value, char type, uint32_t maxlength,
981 LM_PARSED_JSON **parsestate);
982
985#define mseh_set(msr, ptr, valueptr, type) \
986 mseh_set_ptr_r (msr, ptr, valueptr, type, NULL)
987
990#define mseh_set_number(msr, ptr, valueptr) \
991 mseh_set_ptr_r (msr, ptr, valueptr, 'n', NULL)
992
995#define mseh_set_int64(msr, ptr, valueptr) \
996 mseh_set_ptr_r (msr, ptr, valueptr, 'i', NULL)
997
1000#define mseh_set_string(msr, ptr, valueptr) \
1001 mseh_set_ptr_r (msr, ptr, valueptr, 's', NULL)
1002
1005#define mseh_set_boolean(msr, ptr, valueptr) \
1006 mseh_set_ptr_r (msr, ptr, valueptr, 'b', NULL)
1007
1008extern int mseh_set_ptr_r (MS3Record *msr, const char *ptr,
1009 void *value, char type,
1010 LM_PARSED_JSON **parsestate);
1011
1012extern int mseh_add_event_detection_r (MS3Record *msr, const char *ptr,
1013 MSEHEventDetection *eventdetection,
1014 LM_PARSED_JSON **parsestate);
1015
1016extern int mseh_add_calibration_r (MS3Record *msr, const char *ptr,
1017 MSEHCalibration *calibration,
1018 LM_PARSED_JSON **parsestate);
1019
1020extern int mseh_add_timing_exception_r (MS3Record *msr, const char *ptr,
1021 MSEHTimingException *exception,
1022 LM_PARSED_JSON **parsestate);
1023
1024extern int mseh_add_recenter_r (MS3Record *msr, const char *ptr,
1025 MSEHRecenter *recenter,
1026 LM_PARSED_JSON **parsestate);
1027
1028extern int mseh_serialize (MS3Record *msr, LM_PARSED_JSON **parsestate);
1029extern void mseh_free_parsestate (LM_PARSED_JSON **parsestate);
1030extern int mseh_replace (MS3Record *msr, char *jsonstring);
1031
1032extern int mseh_print (const MS3Record *msr, int indent);
1034
1061
1139
1141#define MAX_LOG_MSG_LENGTH 200
1142
1146typedef struct MSLogEntry
1147{
1148 int level;
1149 char function[30];
1151 struct MSLogEntry *next;
1152} MSLogEntry;
1153
1157typedef struct MSLogRegistry
1158{
1159 int maxmessages;
1160 int messagecnt;
1161 MSLogEntry *messages;
1163
1166#define MSLogRegistry_INITIALIZER \
1167 { \
1168 .maxmessages = 0, .messagecnt = 0, .messages = NULL \
1169 }
1170
1176typedef struct MSLogParam
1177{
1178 void (*log_print)(const char*);
1179 const char *logprefix;
1180 void (*diag_print)(const char*);
1181 const char *errprefix;
1183} MSLogParam;
1184
1187#define MSLogParam_INITIALIZER \
1188 { \
1189 .log_print = NULL, .logprefix = NULL, \
1190 .diag_print = NULL, .errprefix = NULL, \
1191 .registry = MSLogRegistry_INITIALIZER \
1192 }
1193
1197#define ms_log(level, ...) \
1198 ms_rlog(__func__, level, __VA_ARGS__)
1199
1203#define ms_log_l(logp, level, ...) \
1204 ms_rlog_l(logp, __func__, level, __VA_ARGS__)
1205
1206#if defined(__GNUC__) || defined(__clang__)
1207__attribute__((__format__ (__printf__, 3, 4)))
1208#endif
1209extern int ms_rlog (const char *function, int level, const char *format, ...);
1210#if defined(__GNUC__) || defined(__clang__)
1211__attribute__ ((__format__ (__printf__, 4, 5)))
1212#endif
1213extern int ms_rlog_l (MSLogParam *logp, const char *function, int level, const char *format, ...);
1214
1217#define ms_loginit(log_print, logprefix, diag_print, errprefix) \
1218 ms_rloginit(log_print, logprefix, diag_print, errprefix, 0)
1219
1222#define ms_loginit_l(logp, log_print, logprefix, diag_print, errprefix) \
1223 ms_rloginit_l(logp, log_print, logprefix, diag_print, errprefix, 0)
1224
1225extern void ms_rloginit (void (*log_print)(const char*), const char *logprefix,
1226 void (*diag_print)(const char*), const char *errprefix,
1227 int maxmessages);
1228extern MSLogParam *ms_rloginit_l (MSLogParam *logp,
1229 void (*log_print)(const char*), const char *logprefix,
1230 void (*diag_print)(const char*), const char *errprefix,
1231 int maxmessages);
1232extern int ms_rlog_emit (MSLogParam *logp, int count, int context);
1233extern int ms_rlog_free (MSLogParam *logp);
1234
1236
1269typedef struct LeapSecond
1270{
1272 int32_t TAIdelta;
1274} LeapSecond;
1275
1278extern int ms_readleapseconds (const char *envvarname);
1279extern int ms_readleapsecondfile (const char *filename);
1281
1285
1286extern uint8_t ms_samplesize (char sampletype);
1287extern int ms_encoding_sizetype (uint8_t encoding, uint8_t *samplesize, char *sampletype);
1288extern const char *ms_encodingstr (uint8_t encoding);
1289extern const char *ms_errorstr (int errorcode);
1290
1291extern nstime_t ms_sampletime (nstime_t time, int64_t offset, double samprate);
1292extern int ms_bigendianhost (void);
1293
1295#define ms_dabs(val) fabs(val)
1296
1298extern int64_t lmp_ftell64 (FILE *stream);
1300extern int lmp_fseek64 (FILE *stream, int64_t offset, int whence);
1302extern uint64_t lmp_nanosleep (uint64_t nanoseconds);
1304extern nstime_t lmp_systemtime (void);
1305
1307extern uint32_t ms_crc32c (const uint8_t *input, int length, uint32_t previousCRC32C);
1308
1310static inline void
1311ms_gswap2 (void *data2)
1312{
1313 uint16_t dat;
1314
1315 memcpy (&dat, data2, 2);
1316
1317 dat = ((dat & 0xff00) >> 8) | ((dat & 0x00ff) << 8);
1318
1319 memcpy (data2, &dat, 2);
1320}
1321
1323static inline void
1324ms_gswap4 (void *data4)
1325{
1326 uint32_t dat;
1327
1328 memcpy (&dat, data4, 4);
1329
1330 dat = ((dat & 0xff000000) >> 24) | ((dat & 0x000000ff) << 24) |
1331 ((dat & 0x00ff0000) >> 8) | ((dat & 0x0000ff00) << 8);
1332
1333 memcpy (data4, &dat, 4);
1334}
1335
1337static inline void
1338ms_gswap8 (void *data8)
1339{
1340 uint64_t dat;
1341
1342 memcpy (&dat, data8, sizeof(uint64_t));
1343
1344 dat = ((dat & 0xff00000000000000) >> 56) | ((dat & 0x00000000000000ff) << 56) |
1345 ((dat & 0x00ff000000000000) >> 40) | ((dat & 0x000000000000ff00) << 40) |
1346 ((dat & 0x0000ff0000000000) >> 24) | ((dat & 0x0000000000ff0000) << 24) |
1347 ((dat & 0x000000ff00000000) >> 8) | ((dat & 0x00000000ff000000) << 8);
1348
1349 memcpy (data8, &dat, sizeof(uint64_t));
1350}
1351
1352#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) || defined (__clang__)
1354__attribute__ ((deprecated("Use ms_gswap2 instead.")))
1355static inline void ms_gswap2a (void *data2) { ms_gswap2 (data2); }
1357__attribute__ ((deprecated("Use ms_gswap4 instead.")))
1358static inline void ms_gswap4a (void *data4) { ms_gswap4 (data4); }
1360__attribute__ ((deprecated("Use ms_gswap8 instead.")))
1361static inline void ms_gswap8a (void *data8) { ms_gswap8 (data8); }
1362#elif defined(_MSC_FULL_VER) && (_MSC_FULL_VER > 140050320)
1364__declspec(deprecated("Use ms_gswap2 instead."))
1365static inline void ms_gswap2a (void *data2) { ms_gswap2 (data2); }
1367__declspec(deprecated("Use ms_gswap4 instead."))
1368static inline void ms_gswap4a (void *data4) { ms_gswap4 (data4); }
1370__declspec(deprecated("Use ms_gswap8 instead."))
1371static inline void ms_gswap8a (void *data8) { ms_gswap8 (data8); }
1372#else
1374static inline void ms_gswap2a (void *data2) { ms_gswap2 (data2); }
1376static inline void ms_gswap4a (void *data4) { ms_gswap4 (data4); }
1378static inline void ms_gswap8a (void *data8) { ms_gswap8 (data8); }
1379#endif
1380
1382
1384typedef int8_t flag;
1385
1408
1410typedef struct LIBMSEED_MEMORY
1411{
1412 void *(*malloc) (size_t);
1413 void *(*realloc) (void *, size_t);
1414 void (*free) (void *);
1416
1419
1433extern size_t libmseed_prealloc_block_size;
1434
1439extern void *libmseed_memory_prealloc (void *ptr, size_t size, size_t *currentsize);
1440
1442
1443#define DE_ASCII DE_TEXT
1444
1453#define DE_TEXT 0
1454#define DE_INT16 1
1455#define DE_INT32 3
1456#define DE_FLOAT32 4
1457#define DE_FLOAT64 5
1458#define DE_STEIM1 10
1459#define DE_STEIM2 11
1460#define DE_GEOSCOPE24 12
1461#define DE_GEOSCOPE163 13
1462#define DE_GEOSCOPE164 14
1463#define DE_CDSN 16
1464#define DE_SRO 30
1465#define DE_DWWSSN 32
1467
1474#define MSSWAP_HEADER 0x01
1475#define MSSWAP_PAYLOAD 0x02
1477
1483#define MS_ENDOFFILE 1
1484#define MS_NOERROR 0
1485#define MS_GENERROR -1
1486#define MS_NOTSEED -2
1487#define MS_WRONGLENGTH -3
1488#define MS_OUTOFRANGE -4
1489#define MS_UNKNOWNFORMAT -5
1490#define MS_STBADCOMPFLAG -6
1491#define MS_INVALIDCRC -7
1493
1501#define MSF_UNPACKDATA 0x0001
1502#define MSF_SKIPNOTDATA 0x0002
1503#define MSF_VALIDATECRC 0x0004
1504#define MSF_PNAMERANGE 0x0008
1505#define MSF_ATENDOFFILE 0x0010
1506#define MSF_SEQUENCE 0x0020
1507#define MSF_FLUSHDATA 0x0040
1508#define MSF_PACKVER2 0x0080
1509#define MSF_RECORDLIST 0x0100
1510#define MSF_MAINTAINMSTL 0x0200
1511#define MSF_PPUPDATETIME 0x0400
1513
1514#ifdef __cplusplus
1515}
1516#endif
1517
1518#endif /* LIBMSEED_H */
struct MS3SelectTime * next
Pointer to next selection time, NULL if the last.
Definition libmseed.h:468
nstime_t endtime
Latest data for matching channels, use NSTUNSET for open.
Definition libmseed.h:467
uint8_t pubversion
Selected publication version, use 0 for any.
Definition libmseed.h:476
char sidpattern[100]
Matching (globbing) pattern for source ID.
Definition libmseed.h:473
struct MS3Selections * next
Pointer to next selection, NULL if the last.
Definition libmseed.h:475
nstime_t starttime
Earliest data for matching channels, use NSTUNSET for open.
Definition libmseed.h:466
struct MS3SelectTime * timewindows
Pointer to time window list for this source ID.
Definition libmseed.h:474
int ms3_addselect(MS3Selections **ppselections, const char *sidpattern, nstime_t starttime, nstime_t endtime, uint8_t pubversion)
Add selection parameters to selection list.
Definition selection.c:181
int ms3_readselectionsfile(MS3Selections **ppselections, const char *filename)
Read data selections from a file.
Definition selection.c:428
void ms3_printselections(const MS3Selections *selections)
Print the selections list using the ms_log() facility.
Definition selection.c:707
void ms3_freeselections(MS3Selections *selections)
Free all memory associated with a MS3Selections.
Definition selection.c:665
const MS3Selections * ms3_matchselect(const MS3Selections *selections, const char *sid, nstime_t starttime, nstime_t endtime, int pubversion, const MS3SelectTime **ppselecttime)
Test the specified parameters for a matching selection entry.
Definition selection.c:58
int ms3_addselect_comp(MS3Selections **ppselections, char *network, char *station, char *location, char *channel, nstime_t starttime, nstime_t endtime, uint8_t pubversion)
Add selection parameters to a selection list based on separate source name codes.
Definition selection.c:305
const MS3Selections * msr3_matchselect(const MS3Selections *selections, const MS3Record *msr, const MS3SelectTime **ppselecttime)
Test the MS3Record for a matching selection entry.
Definition selection.c:145
Data selection structure time window definition containers.
Definition libmseed.h:465
Data selection structure definition containers.
Definition libmseed.h:472
char type[30]
Definition libmseed.h:860
double duration
Definition libmseed.h:895
char wave[30]
Definition libmseed.h:865
char inputchannel[30]
Definition libmseed.h:898
struct MSEHEventDetection * next
Definition libmseed.h:871
double signalperiod
Definition libmseed.h:863
char amplituderange[30]
Definition libmseed.h:894
int firstpulsepositive
Definition libmseed.h:888
nstime_t onsettime
Definition libmseed.h:867
int medlookback
Definition libmseed.h:869
float vcocorrection
Definition libmseed.h:917
nstime_t endtime
Definition libmseed.h:886
char type[30]
Definition libmseed.h:884
struct MSEHCalibration * next
Definition libmseed.h:903
int continued
Definition libmseed.h:891
char clockstatus[128]
Definition libmseed.h:922
double signalamplitude
Definition libmseed.h:862
double stepbetween
Definition libmseed.h:897
uint32_t count
Definition libmseed.h:920
char units[30]
Definition libmseed.h:866
int alternatesign
Definition libmseed.h:889
char type[30]
Definition libmseed.h:935
double backgroundestimate
Definition libmseed.h:864
nstime_t time
Definition libmseed.h:916
double amplitude
Definition libmseed.h:892
char rolloff[30]
Definition libmseed.h:901
char trigger[30]
Definition libmseed.h:890
char coupling[30]
Definition libmseed.h:900
int steps
Definition libmseed.h:887
char noise[30]
Definition libmseed.h:902
char trigger[30]
Definition libmseed.h:938
char inputunits[30]
Definition libmseed.h:893
double sineperiod
Definition libmseed.h:896
int usec
Definition libmseed.h:918
uint8_t medsnr[6]
Definition libmseed.h:868
int medpickalgorithm
Definition libmseed.h:870
char type[16]
Definition libmseed.h:921
nstime_t begintime
Definition libmseed.h:936
double refamplitude
Definition libmseed.h:899
char detector[30]
Definition libmseed.h:861
nstime_t endtime
Definition libmseed.h:937
nstime_t begintime
Definition libmseed.h:885
int receptionquality
Definition libmseed.h:919
int mseh_add_timing_exception_r(MS3Record *msr, const char *ptr, MSEHTimingException *exception, LM_PARSED_JSON **parsestate)
Add timing exception to the extra headers of the given record.
Definition extraheaders.c:821
int mseh_print(const MS3Record *msr, int indent)
Print the extra header structure for the specified MS3Record.
Definition extraheaders.c:1156
int mseh_serialize(MS3Record *msr, LM_PARSED_JSON **parsestate)
Generate extra headers string (serialize) from internal state.
Definition extraheaders.c:997
int mseh_add_event_detection_r(MS3Record *msr, const char *ptr, MSEHEventDetection *eventdetection, LM_PARSED_JSON **parsestate)
Add event detection to the extra headers of the given record.
Definition extraheaders.c:493
int mseh_get_ptr_r(const MS3Record *msr, const char *ptr, void *value, char type, uint32_t maxlength, LM_PARSED_JSON **parsestate)
Search for and return an extra header value.
Definition extraheaders.c:150
int mseh_add_calibration_r(MS3Record *msr, const char *ptr, MSEHCalibration *calibration, LM_PARSED_JSON **parsestate)
Add calibration to the extra headers of the given record.
Definition extraheaders.c:629
void mseh_free_parsestate(LM_PARSED_JSON **parsestate)
Free internally parsed (deserialized) JSON data.
Definition extraheaders.c:1054
int mseh_set_ptr_r(MS3Record *msr, const char *ptr, void *value, char type, LM_PARSED_JSON **parsestate)
Set the value of extra header values.
Definition extraheaders.c:312
struct LM_PARSED_JSON_s LM_PARSED_JSON
Internal structure for holding parsed JSON extra headers.
Definition libmseed.h:947
int mseh_add_recenter_r(MS3Record *msr, const char *ptr, MSEHRecenter *recenter, LM_PARSED_JSON **parsestate)
Add recenter event to the extra headers of the given record.
Definition extraheaders.c:913
int mseh_replace(MS3Record *msr, char *jsonstring)
Replace extra headers with supplied JSON.
Definition extraheaders.c:1091
Container for calibration parameters for use in extra headers.
Definition libmseed.h:883
Container for event detection parameters for use in extra headers.
Definition libmseed.h:859
Container for recenter parameters for use in extra headers.
Definition libmseed.h:934
Container for timing exception parameters for use in extra headers.
Definition libmseed.h:915
int readlength
INTERNAL: Length of data in read buffer.
Definition libmseed.h:760
int64_t streampos
OUTPUT: Read position of input stream.
Definition libmseed.h:756
int64_t endoffset
INPUT: End position in input stream, 0 == unknown (e.g. pipe)
Definition libmseed.h:755
int64_t recordcount
OUTPUT: Count of records read from this stream/file so far.
Definition libmseed.h:757
LMIO input
INTERNAL: IO handle, file or URL.
Definition libmseed.h:763
uint32_t flags
INTERNAL: Stream reading state flags.
Definition libmseed.h:762
char path[512]
INPUT: File name or URL.
Definition libmseed.h:753
int readoffset
INTERNAL: Read offset in read buffer.
Definition libmseed.h:761
char * readbuffer
INTERNAL: Read buffer, allocated internally.
Definition libmseed.h:759
int64_t startoffset
INPUT: Start position in input stream.
Definition libmseed.h:754
int ms3_readtracelist(MS3TraceList **ppmstl, const char *mspath, const MS3Tolerance *tolerance, int8_t splitversion, uint32_t flags, int8_t verbose)
Read miniSEED from a file into a trace list.
Definition fileutils.c:587
int ms3_readtracelist_selection(MS3TraceList **ppmstl, const char *mspath, const MS3Tolerance *tolerance, const MS3Selections *selections, int8_t splitversion, uint32_t flags, int8_t verbose)
Read miniSEED from a file into a trace list, with selection filtering.
Definition fileutils.c:676
void ms3_url_freeheaders(void)
Free all set headers for URL-based requests.
Definition fileutils.c:847
int ms3_readmsr_r(MS3FileParam **ppmsfp, MS3Record **ppmsr, const char *mspath, uint32_t flags, int8_t verbose)
Read miniSEED records from a file or URL in a thread-safe way.
Definition fileutils.c:144
int ms3_url_addheader(const char *header)
Add header to any URL-based requests.
Definition fileutils.c:827
int libmseed_url_support(void)
Run-time test for URL support in libmseed.
Definition fileutils.c:49
int ms3_readmsr(MS3Record **ppmsr, const char *mspath, uint32_t flags, int8_t verbose)
Read miniSEED records from a file or URL.
Definition fileutils.c:117
int ms3_readtracelist_timewin(MS3TraceList **ppmstl, const char *mspath, const MS3Tolerance *tolerance, nstime_t starttime, nstime_t endtime, int8_t splitversion, uint32_t flags, int8_t verbose)
Read miniSEED from a file into a trace list, with time range selection.
Definition fileutils.c:612
int64_t mstl3_writemseed(MS3TraceList *mst, const char *mspath, int8_t overwrite, int maxreclen, int8_t encoding, uint32_t flags, int8_t verbose)
Write miniSEED from an MS3TraceList container to a file.
Definition fileutils.c:960
int ms3_readmsr_selection(MS3FileParam **ppmsfp, MS3Record **ppmsr, const char *mspath, uint32_t flags, const MS3Selections *selections, int8_t verbose)
Read miniSEED records from a file or URL with optional selection.
Definition fileutils.c:257
int ms3_url_userpassword(const char *userpassword)
Set authentication credentials for URL-based requests.
Definition fileutils.c:798
MS3FileParam * ms3_mstl_init_fd(int fd)
Initialize MS3FileParam parameters for a file descriptor.
Definition fileutils.c:75
int64_t msr3_writemseed(MS3Record *msr, const char *mspath, int8_t overwrite, uint32_t flags, int8_t verbose)
Write miniSEED from an MS3Record container to a file.
Definition fileutils.c:899
int ms3_url_useragent(const char *program, const char *version)
Set User-Agent header for URL-based requests.
Definition fileutils.c:768
State container for reading miniSEED records from files or URLs.
Definition libmseed.h:752
int32_t TAIdelta
TAI-UTC difference in seconds.
Definition libmseed.h:1272
nstime_t leapsecond
Time of leap second as epoch since 1 January 1900.
Definition libmseed.h:1271
struct LeapSecond * next
Pointer to next entry, NULL if the last.
Definition libmseed.h:1273
LeapSecond * leapsecondlist
int ms_readleapsecondfile(const char *filename)
Read leap second from the specified file.
Definition genutils.c:1792
int ms_readleapseconds(const char *envvarname)
Read leap second file specified by an environment variable.
Definition genutils.c:1762
Leap second list container.
Definition libmseed.h:1270
void(* diag_print)(const char *)
Function to call for diagnostic and error messages.
Definition libmseed.h:1180
char message[MAX_LOG_MSG_LENGTH]
Log, warning or error message.
Definition libmseed.h:1150
char function[30]
Function generating the message.
Definition libmseed.h:1149
void(* log_print)(const char *)
Function to call for regular messages.
Definition libmseed.h:1178
int level
Message level.
Definition libmseed.h:1148
const char * logprefix
Message prefix for regular and diagnostic messages.
Definition libmseed.h:1179
const char * errprefix
Message prefix for error messages.
Definition libmseed.h:1181
MSLogRegistry registry
Message registry.
Definition libmseed.h:1182
int ms_rlog_l(MSLogParam *logp, const char *function, int level, const char *format,...)
Register log message using specified logging parameters.
Definition logging.c:310
MSLogParam * ms_rloginit_l(MSLogParam *logp, void(*log_print)(const char *), const char *logprefix, void(*diag_print)(const char *), const char *errprefix, int maxmessages)
Initialize specified MSLogParam logging parameters.
Definition logging.c:134
#define MAX_LOG_MSG_LENGTH
Definition libmseed.h:1141
int ms_rlog_free(MSLogParam *logp)
Free, without emitting, all messages from log registry.
Definition logging.c:637
void ms_rloginit(void(*log_print)(const char *), const char *logprefix, void(*diag_print)(const char *), const char *errprefix, int maxmessages)
Initialize the global logging parameters.
Definition logging.c:92
int ms_rlog(const char *function, int level, const char *format,...)
Register log message using global logging parameters.
Definition logging.c:258
int ms_rlog_emit(MSLogParam *logp, int count, int context)
Emit, aka send to print functions, messages from log registry.
Definition logging.c:573
Log registry entry.
Definition libmseed.h:1147
Logging parameters. Callers should not modify these values directly and generally should not need to ...
Definition libmseed.h:1177
Log message registry.
Definition libmseed.h:1158
void(* free)(void *)
Pointer to desired free()
Definition libmseed.h:1414
LIBMSEED_MEMORY libmseed_memory
void * libmseed_memory_prealloc(void *ptr, size_t size, size_t *currentsize)
size_t libmseed_prealloc_block_size
Definition libmseed.h:1411
uint8_t swapflag
Byte swap indicator (bitmask), see Byte swap flags.
Definition libmseed.h:363
void * datasamples
Data samples, numsamples of type sampletype.
Definition libmseed.h:380
uint32_t datalength
Length of data payload in bytes.
Definition libmseed.h:376
uint32_t crc
CRC of entire record.
Definition libmseed.h:374
uint8_t formatversion
Format major version.
Definition libmseed.h:367
int32_t reclen
Length of miniSEED record in bytes.
Definition libmseed.h:362
uint8_t flags
Record-level bit flags.
Definition libmseed.h:368
uint16_t extralength
Length of extra headers in bytes.
Definition libmseed.h:375
uint64_t datasize
Size of datasamples buffer in bytes.
Definition libmseed.h:381
const char * record
Raw miniSEED record, if available.
Definition libmseed.h:361
double samprate
Nominal sample rate as samples/second (Hz) or period (s)
Definition libmseed.h:370
int64_t numsamples
Number of data samples in datasamples.
Definition libmseed.h:382
int64_t samplecnt
Number of samples in record.
Definition libmseed.h:373
char sampletype
Sample type code: t, i, f, d Sample Types.
Definition libmseed.h:383
int16_t encoding
Data encoding format, see Data Encodings.
Definition libmseed.h:371
nstime_t starttime
Record start time (first sample)
Definition libmseed.h:369
char sid[LM_SIDLEN]
Source identifier as URN, max length LM_SIDLEN.
Definition libmseed.h:366
uint8_t pubversion
Publication version.
Definition libmseed.h:372
char * extra
Pointer to extra headers.
Definition libmseed.h:377
int64_t ms3_detect(const char *record, uint64_t recbuflen, uint8_t *formatversion)
Detect miniSEED record in buffer.
Definition parseutils.c:179
int msr3_repack_mseed3(const MS3Record *msr, char *record, uint32_t recbuflen, int8_t verbose)
Repack a parsed miniSEED record into a version 3 record.
Definition pack.c:394
void msr3_print(const MS3Record *msr, int8_t details)
Print header values of an MS3Record.
Definition msrutils.c:226
MS3Record * msr3_init(MS3Record *msr)
Initialize and return an MS3Record.
Definition msrutils.c:44
double msr3_sampratehz(const MS3Record *msr)
Calculate sample rate in samples/second (Hertz) for a given MS3Record.
Definition msrutils.c:345
int64_t msr3_unpack_data(MS3Record *msr, int8_t verbose)
Unpack data samples for a MS3Record.
Definition unpack.c:1135
double msr3_host_latency(const MS3Record *msr)
Calculate data latency based on the host time.
Definition msrutils.c:395
int msr3_pack_header2(const MS3Record *msr, char *record, uint32_t recbuflen, int8_t verbose)
Pack a miniSEED version 2 header into the specified buffer.
Definition pack.c:858
void msr3_free(MS3Record **ppmsr)
Free all memory associated with a MS3Record.
Definition msrutils.c:86
int ms_parse_raw3(const char *record, int maxreclen, int8_t details)
Parse and verify a miniSEED 3.x record header.
Definition parseutils.c:324
int msr3_resize_buffer(MS3Record *msr)
Resize data sample buffer of MS3Record to what is needed.
Definition msrutils.c:303
int64_t ms_decode_data(const void *input, uint64_t inputsize, uint8_t encoding, uint64_t samplecount, void *output, uint64_t outputsize, char *sampletype, int8_t swapflag, const char *sid, int8_t verbose)
Decode data samples to a supplied buffer.
Definition unpack.c:1290
int msr3_parse(const char *record, uint64_t recbuflen, MS3Record **ppmsr, uint32_t flags, int8_t verbose)
Parse miniSEED from a buffer.
Definition parseutils.c:61
MS3Record * msr3_duplicate(const MS3Record *msr, int8_t datadup)
Duplicate a MS3Record.
Definition msrutils.c:118
nstime_t msr3_endtime(const MS3Record *msr)
Calculate time of the last sample in a record.
Definition msrutils.c:200
int ms_parse_raw2(const char *record, int maxreclen, int8_t details, int8_t swapflag)
Parse and verify a miniSEED 2.x record header.
Definition parseutils.c:535
nstime_t msr3_nsperiod(const MS3Record *msr)
Calculate sample period in nanoseconds/sample for a given MS3Record.
Definition msrutils.c:364
int msr3_pack_header3(const MS3Record *msr, char *record, uint32_t recbuflen, int8_t verbose)
Pack a miniSEED version 3 header into the specified buffer.
Definition pack.c:489
int msr3_data_bounds(const MS3Record *msr, uint32_t *dataoffset, uint32_t *datasize)
Determine the data payload bounds for a MS3Record.
Definition unpack.c:1036
int msr3_pack(const MS3Record *msr, void(*record_handler)(char *, int, void *), void *handlerdata, int64_t *packedsamples, uint32_t flags, int8_t verbose)
Pack data into miniSEED records.
Definition pack.c:106
miniSEED record container
Definition libmseed.h:360
struct MS3RecordPtr * next
Pointer to next entry, NULL if the last.
Definition libmseed.h:529
void * prvtptr
Private pointer, will not be populated by library but will be free'd.
Definition libmseed.h:528
MS3RecordPtr * last
Pointer to last entry, NULL if the none.
Definition libmseed.h:537
int64_t fileoffset
Offset into file to record for fileptr or filename.
Definition libmseed.h:524
const char * filename
Pointer to file name containing record, NULL if not used.
Definition libmseed.h:523
MS3RecordPtr * first
Pointer to first entry, NULL if the none.
Definition libmseed.h:536
MS3Record * msr
Pointer to MS3Record for this record.
Definition libmseed.h:525
const char * bufferptr
Pointer in buffer to record, NULL if not used.
Definition libmseed.h:521
FILE * fileptr
Pointer to open FILE containing record, NULL if not used.
Definition libmseed.h:522
uint64_t recordcnt
Count of records in the list (for convenience)
Definition libmseed.h:535
nstime_t endtime
End time of record, time of last sample.
Definition libmseed.h:526
uint32_t dataoffset
Offset from start of record to encoded data.
Definition libmseed.h:527
Record list, holds MS3RecordPtr entries that contribute to a given MS3TraceSeg.
Definition libmseed.h:534
A miniSEED record pointer and metadata.
Definition libmseed.h:520
int ms_sid2nslc_n(const char *sid, char *net, size_t netsize, char *sta, size_t stasize, char *loc, size_t locsize, char *chan, size_t chansize)
Parse network, station, location and channel codes from an FDSN Source ID.
Definition genutils.c:189
int ms_strncpopen(char *dest, const char *source, int length)
Copy fixed number of characters into unterminated string.
Definition genutils.c:752
DEPRECATED int ms_sid2nslc(const char *sid, char *net, char *sta, char *loc, char *chan)
Definition genutils.c:307
int ms_strncpclean(char *dest, const char *source, int length)
Copy string, removing spaces, always terminated.
Definition genutils.c:646
int ms_xchan2seedchan(char *seedchan, const char *xchan)
Convert extended channel to SEED 2.x channel.
Definition genutils.c:542
int ms_seedchan2xchan(char *xchan, const char *seedchan)
Convert SEED 2.x channel to extended channel.
Definition genutils.c:484
int ms_strncpcleantail(char *dest, const char *source, int length)
Copy string, removing trailing spaces, always terminated.
Definition genutils.c:700
int ms_nslc2sid(char *sid, int sidlen, uint16_t flags, const char *net, const char *sta, const char *loc, const char *chan)
Convert network, station, location and channel to an FDSN Source ID.
Definition genutils.c:345
struct MS3TraceID * next[MSTRACEID_SKIPLIST_HEIGHT]
Next trace ID at first pointer, NULL if the last.
Definition libmseed.h:602
int64_t numsamples
Number of data samples in datasamples.
Definition libmseed.h:584
struct MS3RecordList * recordlist
List of pointers to records that contributed.
Definition libmseed.h:587
uint64_t prngstate
INTERNAL: State for Pseudo RNG.
Definition libmseed.h:610
nstime_t endtime
Time of last sample.
Definition libmseed.h:579
struct MS3TraceSeg * first
Pointer to first of list of segments.
Definition libmseed.h:600
nstime_t latest
Time of latest sample.
Definition libmseed.h:597
struct MS3TraceID traces
Head node of trace skip list, first entry at traces.next[0].
Definition libmseed.h:609
uint8_t pubversion
Largest contributing publication version.
Definition libmseed.h:595
void * prvtptr
Private pointer for general use, unused by library unless MSF_PPUPDATETIME is set.
Definition libmseed.h:586
uint8_t height
Height of skip list at next.
Definition libmseed.h:603
uint64_t datasize
Size of datasamples buffer in bytes.
Definition libmseed.h:583
nstime_t earliest
Time of earliest sample.
Definition libmseed.h:596
double(* samprate)(const MS3Record *msr)
Pointer to function that returns sample rate tolerance.
Definition libmseed.h:641
void * prvtptr
Private pointer for general use, unused by library.
Definition libmseed.h:598
void * datasamples
Data samples, numsamples of type sampletype.
Definition libmseed.h:582
char sampletype
Sample type code, see Sample Types.
Definition libmseed.h:585
struct MS3TraceSeg * prev
Pointer to previous segment.
Definition libmseed.h:588
int64_t samplecnt
Number of samples in trace coverage.
Definition libmseed.h:581
char sid[LM_SIDLEN]
Source identifier as URN, max length LM_SIDLEN.
Definition libmseed.h:594
struct MS3TraceSeg * last
Pointer to last of list of segments.
Definition libmseed.h:601
uint32_t numtraceids
Number of traces IDs in list.
Definition libmseed.h:608
double(* time)(const MS3Record *msr)
Pointer to function that returns time tolerance.
Definition libmseed.h:640
double samprate
Nominal sample rate (Hz)
Definition libmseed.h:580
struct MS3TraceSeg * next
Pointer to next segment, NULL if the last.
Definition libmseed.h:589
nstime_t starttime
Time of first sample.
Definition libmseed.h:578
uint32_t numsegments
Number of segments for this ID.
Definition libmseed.h:599
int64_t mstl3_unpack_recordlist(MS3TraceID *id, MS3TraceSeg *seg, void *output, uint64_t outputsize, int8_t verbose)
Unpack data samples in a Record List associated with a MS3TraceList.
Definition tracelist.c:1630
void mstl3_printsynclist(const MS3TraceList *mstl, const char *dccid, ms_subseconds_t subseconds)
Print SYNC trace list summary information for a MS3TraceList.
Definition tracelist.c:2356
void mstl3_printtracelist(const MS3TraceList *mstl, ms_timeformat_t timeformat, int8_t details, int8_t gaps, int8_t versions)
Print trace list summary information for a MS3TraceList.
Definition tracelist.c:2224
int64_t mstl3_pack(MS3TraceList *mstl, void(*record_handler)(char *, int, void *), void *handlerdata, int reclen, int8_t encoding, int64_t *packedsamples, uint32_t flags, int8_t verbose, char *extra)
Pack MS3TraceList data into miniSEED records.
Definition tracelist.c:1955
void mstl3_free(MS3TraceList **ppmstl, int8_t freeprvtptr)
Free all memory associated with a MS3TraceList.
Definition tracelist.c:89
int64_t mstl3_readbuffer(MS3TraceList **ppmstl, const char *buffer, uint64_t bufferlength, int8_t splitversion, uint32_t flags, const MS3Tolerance *tolerance, int8_t verbose)
Parse miniSEED from a buffer and populate a MS3TraceList.
Definition tracelist.c:832
void mstl3_printgaplist(const MS3TraceList *mstl, ms_timeformat_t timeformat, double *mingap, double *maxgap)
Print gap/overlap list summary information for a MS3TraceList.
Definition tracelist.c:2430
int64_t mstraceseg3_pack(MS3TraceID *id, MS3TraceSeg *seg, void(*record_handler)(char *, int, void *), void *handlerdata, int reclen, int8_t encoding, int64_t *packedsamples, uint32_t flags, int8_t verbose, char *extra)
Pack a MS3TraceSeg data into miniSEED records.
Definition tracelist.c:2067
int mstl3_resize_buffers(MS3TraceList *mstl)
Resize data sample buffers of MS3TraceList to what is needed.
Definition tracelist.c:1539
int64_t mstl3_readbuffer_selection(MS3TraceList **ppmstl, const char *buffer, uint64_t bufferlength, int8_t splitversion, uint32_t flags, const MS3Tolerance *tolerance, const MS3Selections *selections, int8_t verbose)
Parse miniSEED from a buffer and populate a MS3TraceList.
Definition tracelist.c:881
int mstl3_convertsamples(MS3TraceSeg *seg, char type, int8_t truncate)
Convert the data samples associated with an MS3TraceSeg to another data type.
Definition tracelist.c:1389
MS3TraceList * mstl3_init(MS3TraceList *mstl)
Initialize a MS3TraceList container.
Definition tracelist.c:54
#define MSTRACEID_SKIPLIST_HEIGHT
Maximum skip list height for MSTraceIDs.
Definition libmseed.h:574
MS3TraceID * mstl3_findID(MS3TraceList *mstl, const char *sid, uint8_t pubversion, MS3TraceID **prev)
Find matching MS3TraceID in a MS3TraceList.
Definition tracelist.c:180
MS3TraceSeg * mstl3_addmsr_recordptr(MS3TraceList *mstl, const MS3Record *msr, MS3RecordPtr **pprecptr, int8_t splitversion, int8_t autoheal, uint32_t flags, const MS3Tolerance *tolerance)
Add data coverage from an MS3Record to a MS3TraceList.
Definition tracelist.c:364
Callback functions that return time and sample rate tolerances.
Definition libmseed.h:639
Container for a trace ID, linkable.
Definition libmseed.h:593
Container for a collection of continuous trace segment, linkable.
Definition libmseed.h:607
Container for a continuous trace segment, linkable.
Definition libmseed.h:577
uint32_t ms_crc32c(const uint8_t *input, int length, uint32_t previousCRC32C)
int ms_encoding_sizetype(uint8_t encoding, uint8_t *samplesize, char *sampletype)
Return sample size and/or type for given encoding value.
Definition lookup.c:74
uint8_t ms_samplesize(char sampletype)
Determine data sample size for each type.
Definition lookup.c:39
int ms_bigendianhost(void)
Runtime test for host endianess.
Definition genutils.c:1741
uint64_t lmp_nanosleep(uint64_t nanoseconds)
Definition genutils.c:1964
nstime_t ms_sampletime(nstime_t time, int64_t offset, double samprate)
Calculate the time of a sample in an array.
Definition genutils.c:1700
int lmp_fseek64(FILE *stream, int64_t offset, int whence)
Definition genutils.c:1941
int64_t lmp_ftell64(FILE *stream)
Definition genutils.c:1924
const char * ms_encodingstr(uint8_t encoding)
Descriptive string for data encodings.
Definition lookup.c:126
const char * ms_errorstr(int errorcode)
Descriptive string for library Return codes.
Definition lookup.c:205
nstime_t lmp_systemtime(void)
Definition genutils.c:1996
int8_t flag
Definition libmseed.h:1384
#define LM_SIDLEN
Length of source ID string.
Definition libmseed.h:142
#define DEPRECATED
Definition libmseed.h:212
Type definition for data source I/O: file-system versus URL.
Definition libmseed.h:724
void * handle
Primary IO handle, either file or URL.
Definition libmseed.h:732
void * handle2
Secondary IO handle for URL.
Definition libmseed.h:733
int still_running
Fetch status flag for URL transmissions.
Definition libmseed.h:734
enum LMIO::@254045037044215310213377126306215005316170340112 type
IO handle type.
@ LMIO_FD
IO handle is a provided file descriptor.
Definition libmseed.h:730
@ LMIO_URL
IO handle is URL-type.
Definition libmseed.h:729
@ LMIO_NULL
IO handle type is undefined.
Definition libmseed.h:727
@ LMIO_FILE
IO handle is FILE-type.
Definition libmseed.h:728