⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 output_b2k.c

📁 解吸SEED格式的源代码
💻 C
字号:
/*===========================================================================*//* SEED reader     |            output_b2k                |    subprocedure *//*===========================================================================*//*					Problems:	none known	Language:	C, hopefully ANSI standard	Author:		Chris Laughbon		Revisions:*/#include "rdseed.h"		/* SEED tables and structures */#include <stdio.h>#include <sys/errno.h>#include <sys/stat.h>#include <sys/param.h>#include <strings.h>#define TRIM(s) {char *p; if ((p = strchr(s, ' ')) != NULL) *p = 0;}		 static int file_open = FALSE;static FILE *outfile;static char prev_station[5];static char prev_channel[4];static char prev_network[3];static char prev_location[3];/* ---------------------------------------------------------------------- */int output_b2k(struct input_data_hdr *hdr, struct data_blk_2000 *b2k){	if (time_for_new_file(hdr))	{		if (file_open)			close_b2k_file();		open_file(hdr);	}		/* if file is not open */	strncpy(prev_station, hdr->station, sizeof(hdr->station));	strncpy(prev_channel, hdr->channel, sizeof(hdr->channel));	strncpy(prev_location, hdr->location, sizeof(hdr->location));	strncpy(prev_network, hdr->network, sizeof(hdr->network));	if (fwrite(b2k->opaque_buff, 			b2k->blk_length-b2k->opaque_offset, 			1, outfile) == -1)	{		fprintf(stderr, "Error, output_b2k(): Unable to write to file!\n"); 		perror("output_b2k"); 		return 0;	}	return 1;}				/* output_b2k *//* ------------------------------------------------------------------------ */int close_b2k_file(){	if (file_open)		fclose(outfile);	file_open = FALSE;}/* ------------------------------------------------------------------------ */int open_file(struct input_data_hdr *data_hdr){	char outfname[MAXPATHLEN];	char s[32];	char n[32];	char l[32];	char c[32];	strncpy(s, data_hdr->station, sizeof(data_hdr->station));	s[sizeof(data_hdr->station)] = 0;	TRIM(s);	strncpy(c, data_hdr->channel, sizeof(data_hdr->channel)); 	c[sizeof(data_hdr->channel)] = 0;	TRIM(c);	strncpy(n, data_hdr->network, sizeof(data_hdr->network)); 	n[2] = 0;        TRIM(n);          strncpy(l, data_hdr->location, sizeof(data_hdr->location)); 	l[2] = 0;        TRIM(l); 	/* give the user some indication as to what we are doing. */ 	printf("Writing:  Net/Stn/Loc/Chn %.2s:%.5s:%.2s:%.3s at %04d.%03d.%02d.%02d.%02d.%04d to disk\n",			n,			s, 			l,			c,       			data_hdr->time.year,       			data_hdr->time.day,       			data_hdr->time.hour,       			data_hdr->time.minute,       			data_hdr->time.second,       			data_hdr->time.fracsec);		sprintf (outfname,                        "%04d.%03d.%02d.%02d.%02d.%04d.%s.%s.%s.%s.OPAQUE",                		data_hdr->time.year,                		data_hdr->time.day,                		data_hdr->time.hour,                		data_hdr->time.minute,                		data_hdr->time.second,                		data_hdr->time.fracsec,                		n,                		s,                		l,                		c);	if ((outfile = fopen(outfname, "a")) == NULL)	{		fprintf(stderr, "Error, output_b2k(): Unable to open file!\n");		perror("output_b2k");		file_open = FALSE;		return 0;	}	file_open = TRUE;}/* ----------------------------------------------------------------------- */int time_for_new_file(struct input_data_hdr *h){	if (strncmp(h->station, prev_station, sizeof(h->station)) != 0)		return 1;	if (strncmp(h->channel, prev_channel, sizeof(h->channel)) != 0)		return 1;	if (strncmp(h->network, prev_network, sizeof(h->network)) != 0)                 return 1;          if (strncmp(h->location, prev_location, sizeof(h->location)) != 0)                 return 1;	return 0;}/* --------------------------------------------------------------------- */int scan_for_blk_2000(b_ptr, base)struct data_blk_hdr *b_ptr;char *base;		/* start of the logical rec */{	while (1)    	{		if (b_ptr->type == 2000)			/* eureka, we've found it */			return 1;         	if (b_ptr->next_blk_byte == 0)			return 0;		/* garbage check */		switch (b_ptr->type)		{                	case 100 :                	case 201:                	case 300:                	case 310:                	case 200:                	case 320:                	case 390:                	case 395:                	case 400:                	case 405:			case 1000:                	case 1001:				break;                	default : /* oh, oh */                             		fprintf(stderr, "scan_for_blk_2000(): Bad blockette scanned\n Blockette = %d\n", b_ptr->type);                    					return 0;		}		/* switch */			b_ptr = (struct data_blk_hdr *)(base + b_ptr->next_blk_byte);     	}   /* while */	/* Should never get here */ 	return 0;}/*----------------------------------------------------------------- */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -