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

📄 ksg_file.cpp

📁 对日本KSG震动探测仪器编写的伴侣服务代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// (Version 1.00 :: 10-Mar-1999 :: Harutoshi Yoshida)
/*===================================================================
	恔搙忣曬僱僢僩儚乕僋僔僗僥儉
	-----------------------------------
		File Control Module
	-----------------------------------
	Program Name        : KSG_File.CPP
	Program Start       : 17-Dec-1998
	Program Completed   : 
===================================================================*/

#include "stdafx.h"
#include <math.h>
#include "C_File.h"
#include "C_Proc.h"
#include "C_Work.h"
#include "KSG_Main.h"

#if !C_DEFINE_INC
	#include	"C_Define.h"
#endif

// 18-Feb-1999
struct	S_WaveData	wave;

void	make_dummy_wavedata(char *wdtname, int num)
{
	CC_File	pFile;
	char	fname[MAX_PATH];
	int		i, j, hdl;
	double	pi = 3.1415926535;
	double	d;

	// 攇宍僨乕僞嶌惉
	for (i=0; i<3; i++) {
		for (j=0; j<MAX_WAVE_CNT; j++) {
			d = (double)(j % 360);
			d = d / 180 * pi;
			switch (i) {
			case 0:
				wave.Wave[j][i] = (float)(sin(d) * num);
				break;
			case 1:
				wave.Wave[j][i] = (float)(cos(d) * num);
				break;
			case 2:
				wave.Wave[j][i] = (float)(sin(d) * cos(d) * num);
				break;
			}

		}
	}
	// 攇宍僨乕僞僼傽僀儖嶌惉
	sprintf(fname, "%s%s", Data_dir[DIR_WDT], wdtname);
	if (pFile.C_FileFind(fname) == 0) {		// 側偟
		hdl = pFile.Creat(fname);
		pFile.Close(hdl);
	}
	hdl = pFile.Open(fname, _O_BINARY | _O_WRONLY);
	if (hdl != -1) {
		pFile.Write(hdl, (char*)&wave, SIZE_WAVE);
	}
	pFile.Close(hdl);
}

void	make_dummy_database()
{
	struct	S_DtbData	dtb;
	CC_File	pFile;
	int		i, j, k, num = 44, hdl, f = 0, mag = 1, chk = 0, pnt;
	char	fname[MAX_PATH], new_name[MAX_PATH];

	// 摨堦抧恔僨乕僞僼傽僀儖嶌惉
	for (i=0; i<12; i++) {
		for (j=0; j<1; j++) {
			sprintf(fname, "%sDataBase.TMP", Data_dir[DIR_EDT]);
			if (pFile.C_FileFind(fname) == 0) {		// 側偟
				hdl = pFile.Creat(fname);
				pFile.Close(hdl);
			}
			hdl = pFile.Open(fname, _O_BINARY | _O_WRONLY);
			if (hdl != -1) {
				pFile.Write(hdl, (char*)&num, 4);
				// MAX
				pnt = 0;
				for (k=0; k<MAX_PNT_ALL; k++) {
					dtb.EntNum = k;
					sprintf(dtb.HstId, "Host ID");
					sprintf(dtb.TrmId, "M抧揰%03d", pnt);
					dtb.R_dt.yer = 1998;		dtb.R_dt.mon = i+1;
					dtb.R_dt.day = j+1;			dtb.R_dt.hor = j+2;
					dtb.R_dt.min = j+3;			dtb.R_dt.sec = j+4+k;
					dtb.Stt      = (0xf0f0000 << k);
					dtb.SinLev   = (float)(mag+0.2);
					dtb.SinKai   = mag;
					mag ++;
					#if ATSUGI
						if (mag == 10) mag = 0;
					#else
						if (mag == 13) mag = 0;
					#endif
					dtb.T_dt     = dtb.R_dt;	dtb.C_dt     = dtb.R_dt;
					dtb.MaxAcc   = (double)((i*100)+(j*10)+(k*1)+0.2);
					dtb.AccX     = (double)((i*100)+(j*10)+(k*1)+0.3);
					dtb.AccY     = (double)((i*100)+(j*10)+(k*1)+0.4);
					dtb.AccZ     = (double)((i*100)+(j*10)+(k*1)+0.5);
					sprintf(dtb.FileName, "MAX_%02d%02d.DAT", i+1, j+1);
					dtb.FileEnable = 0;
					sprintf(dtb.WdtFile, "%02d_%4d_%02d_%02d_%02d_%02d_%02d.WDT", dtb.EntNum,
						dtb.R_dt.yer, dtb.R_dt.mon, dtb.R_dt.day,
						dtb.R_dt.hor, dtb.R_dt.min, dtb.R_dt.sec);
// 23-Jan:HY
//					dtb.MemCap = 100 + i + j + k;
					if (chk == 3 ) {
						dtb.FileEnable = 1;
						make_dummy_wavedata(dtb.WdtFile, (100-num));
						chk = -1;
					}
					chk ++;
					pnt ++;
					if (pnt == MAX_CH) pnt = 0;
					pFile.Write(hdl, (char*)&dtb, SIZE_DTB);
				}
				// 徻嵶
				pnt = 0;
				for (k=0; k<num; k++) {
					dtb.EntNum = k % 8;
					sprintf(dtb.HstId, "Host ID");
					sprintf(dtb.TrmId, "I抧揰%03d", pnt);
					dtb.R_dt.yer = 1998;		dtb.R_dt.mon = i+1;
					dtb.R_dt.day = j+1;			dtb.R_dt.hor = j+2;
					dtb.R_dt.min = j+3;			dtb.R_dt.sec = (j+4+k) % 60;
					dtb.Stt      = (0xff00 >> k);
					dtb.SinLev   = (float)(mag+0.1);
					dtb.SinKai   = mag;
					mag ++;
					#if ATSUGI
						if (mag == 10) mag = 0;
					#else
						if (mag == 13) mag = 0;
					#endif
					dtb.T_dt     = dtb.R_dt;	dtb.C_dt     = dtb.R_dt;
					dtb.MaxAcc   = (double)((i*100)+(j*10)+(k*1)+0.2);
					dtb.AccX     = (double)((i*100)+(j*10)+(k*1)+0.3);
					dtb.AccY     = (double)((i*100)+(j*10)+(k*1)+0.4);
					dtb.AccZ     = (double)((i*100)+(j*10)+(k*1)+0.5);
					sprintf(dtb.FileName, "DTB_%02d%02d.DAT", i+1, j+1);
					dtb.FileEnable = 0;
					sprintf(dtb.WdtFile, "%02d_%4d_%02d_%02d_%02d_%02d_%02d.WDT", dtb.EntNum,
						dtb.R_dt.yer, dtb.R_dt.mon, dtb.R_dt.day,
						dtb.R_dt.hor, dtb.R_dt.min, dtb.R_dt.sec);
// 23-Jan:HY
//					dtb.MemCap = 200 + i + j + k;
					if (chk == 3) {
						dtb.FileEnable = 1;
						make_dummy_wavedata(dtb.WdtFile, (100-num));
						chk = -1;
					}
					chk ++;
					pnt ++;
					if (pnt == MAX_CH) pnt = 0;
					pFile.Write(hdl, (char*)&dtb, SIZE_DTB);
				}
				num += 44;
				pFile.Close(hdl);
				sprintf(new_name, "%s1998_%02d_%02d_%02d_%02d_%02d_00.DAT", Data_dir[DIR_EDT], i+1, j+1, j+2, j+3, j+4);
				pFile.C_Rename(fname, new_name);
			}
		}
	}
}

/*-------------------------------------
						m:17-Dec-1998
@p	<< 僨乕僞僼傽僀儖悢庢摼 >>
堷悢		側偟
栠抣		側偟
-------------------------------------*/
void get_dtb_entry()
{
	CListBox*	pList;
	_finddata_t fd;
	char		find_name[MAX_PATH], file_name[MAX_PATH];
	char		drive[_MAX_DRIVE], dir[_MAX_DIR], fname[_MAX_FNAME], ext[_MAX_EXT];
	int			cnt, hdl, flg;

	pList = (CListBox*)pKSGView->GetDlgItem(IDC_LIST_FILE_NAME);
	// 僇僂儞僩傪僋儕傾
	pList->ResetContent();
	Dtb_ent_cnt = cnt = 0;
	sprintf(find_name, "%s*.DAT", Data_dir[DIR_EDT]);
	// 僼傽僀儖専嶕
	hdl = _findfirst(find_name, &fd);
	if (hdl != -1) {
		do {
			if (strcmp(fd.name, ".\0" ) && strcmp(fd.name, "..\0")) {
				if (fd.attrib != _A_SUBDIR) {
					sprintf(file_name, "%s%s", Data_dir[DIR_EDT], fd.name);
					_splitpath(file_name, drive, dir, fname, ext );
					if (strlen(fname) == 22) {
						if (!strcmp(ext, ".DAT")) {
							cnt ++;
							pList->AddString(fd.name);
						}
					}
				}
			}
			flg = _findnext(hdl, &fd);
		} while (!flg);
		_findclose(hdl);			// 19-Feb-2004
	}
	Dtb_ent_cnt = cnt;
}

/*-------------------------------------
						m:17-Dec-1998
@p	<< 僨乕僞僼傽僀儖柤庢摼 >>
堷悢		n			僨乕僞昞帵No.(彫偝偄傎偳怴偟偄)
			fname		僼傽僀儖柤
栠抣		0			惉岟
			-1			Error
-------------------------------------*/
int	get_dtb_name(int n, char *fname)
{
	CListBox*	pList;
	char		buf[MAX_PATH];
	int			ret = -1, cnt;

	pList = (CListBox*)pKSGView->GetDlgItem(IDC_LIST_FILE_NAME);
	cnt = pList->GetCount();
	if (cnt <= n) {
		ret = -1;
	}
	else {
		pList->GetText(cnt-n-1, buf);
		sprintf(fname, "%s%s", Data_dir[DIR_EDT], buf);
		ret = 0;
	}
	return ret;
}

/*-------------------------------------
						m:22-Dec-1998
@p	<< 僨乕僞儀乕僗僨乕僞悢庢摼 >>
堷悢		fname		僼傽僀儖柤
栠抣		0 <=		僨乕僞悢
			-1			僼傽僀儖専嶕僄儔乕
			-2			僨乕僞撉傒崬傒僄儔乕
-------------------------------------*/
int	get_dtb_cnt(char *fname)
{
	CC_File	pFile;
	int		ret, hdl, r_cnt, cnt;

	hdl = pFile.Open(fname, _O_BINARY | _O_RDONLY);
	if (hdl != -1) {
		r_cnt = pFile.Read(hdl, (char*)&cnt, 4);
		if (r_cnt == 4) {
			ret = cnt;
		}
		else {
			ret = -2;
		}
		pFile.Close(hdl);
	}
	else {
		ret = -1;
	}
	return ret;
}

/*-------------------------------------
						m:17-Dec-1998
@p	<< 僨乕僞儀乕僗僨乕僞庢摼 >>
堷悢		wrt_f		1:彂偒崬傒乛0:撉傒弌偟
			fname		僼傽僀儖柤
			max			1:MAX 僨乕僞
						0:捠忢僨乕僞
			n			僨乕僞No.
			buf			僨乕僞僶僢僼傽
栠抣		0			惉岟
			-1			僼傽僀儖専嶕僄儔乕
			-2			僨乕僞撉傒崬傒僄儔乕
-------------------------------------*/
int		DtbDataAccess(int wrt_f, char *fname, int max, int n, char *buf)
{
	CC_File	pFile;
	int		hdl, sp, r_cnt, ofs, ret, pnt;

	ofs = 4;
	hdl = pFile.Open(fname, _O_BINARY | _O_RANDOM | _O_RDWR);
	if (hdl != -1) {
		if (max == 0) {
			sp = MAX_PNT_ALL * SIZE_DTB + ofs;
		}
		else {
			sp = ofs;
		}
		sp += (SIZE_DTB * n);
		pnt = pFile.Seek(hdl, sp, SEEK_SET);
		if (pnt == sp) {
			if (wrt_f){
				r_cnt = pFile.Write(hdl, buf, SIZE_DTB);
			}
			else{
				r_cnt = pFile.Read(hdl, buf, SIZE_DTB);
			}
			if (r_cnt == SIZE_DTB) {
				ret = 0;
			}
			else {
				ret = -2;
			}
		}
		else {
			ret = -2;
		}
		pFile.Close(hdl);
	}
	else {
		ret = -1;
	}
	return ret;
}

/*-------------------------------------
						m:17-Dec-1998
@p	<< 攇宍僨乕僞庢摼 >>
堷悢		fname		僼傽僀儖柤
			buf			僨乕僞僶僢僼傽
栠抣		0			惉岟
			-1			僼傽僀儖専嶕僄儔乕
			-2			僨乕僞撉傒崬傒僄儔乕
-------------------------------------*/
int	get_wave_data(char *fname, char *buf)
{
	CC_File	pFile;
	int		ret, r_cnt, hdl;

	ret = -1;
	hdl = pFile.Open(fname, _O_BINARY | _O_RDONLY);
	if (hdl != -1) {
		r_cnt = pFile.Read(hdl, buf, SIZE_WAVE);
		if (r_cnt == SIZE_WAVE) {
			ret = 0;
		}
		else {
			ret = -2;
		}
		pFile.Close(hdl);
	}
	return ret;
}

/*-------------------------------------
						m:21-Dec-1998
@p	<< 俠俽倁僼傽僀儖曐懚 >>
堷悢		fname	僼傽僀儖柤
			wdat	攇宍僨乕僞僶僢僼傽
			ddat	僨乕僞僶僢僼傽
栠抣		0		惉岟
			-1		僼傽僀儖嶌惉僄儔乕
			-2		僼傽僀儖僆乕僾儞僄儔乕
			-3		僼傽僀儖彂崬傒僄儔乕
			-4		僨傿僗僋偺嬻偒梕検偑懌傝側偄
-------------------------------------*/
int	put_csv_data(int sel_ch, char *fname, struct S_WaveData *wdat, struct S_Dsp_Data *ddat)
{
	CC_File	pFile;
	char	buf[MAX_PATH];
	int		i, hdl, err, w_cnt, len, ofs;

	err = 0;
	strcpy(buf, fname);
	len = strlen(buf);
	sprintf(&buf[len-4], "_s%d.csv", sel_ch+1);
	ofs = sel_ch * MAX_WAVE_CNT;

	if (pFile.C_FileFind(buf) == 0) {			// 僼傽僀儖側偟
		hdl = pFile.Creat(buf);
		if (hdl == -1) {
			err = -1;							// 僼傽僀儖嶌惉僄儔乕
		}
		pFile.Close(hdl);
	}
	if (!err) {
		hdl = pFile.Open(buf, _O_BINARY | _O_WRONLY);
		if (hdl == -1) {
			err = -2;							// 僼傽僀儖僆乕僾儞僄儔乕
		}
		else {
			sprintf(buf, "%s,%s,%04d/%02d/%02d %02d:%02d:%02d,%8.3lf,%f\r\n", 
				CSV_header, ddat->Pnt,
				ddat->R_dt.yer, ddat->R_dt.mon, ddat->R_dt.day,
				ddat->R_dt.hor, ddat->R_dt.min, ddat->R_dt.sec,
				ddat->MaxAcc, ddat->SinLev);
			len = strlen(buf);
			w_cnt = pFile.Write(hdl, buf, len);
			if (w_cnt != len) {
				if (errno == 28) {				// ENOSPC == 28
					err = -4;					// 僨傿僗僋嬻偒梕検偑偨傝側偄
				}
				else {
					err = -3;					// 僼傽僀儖彂崬傒僄儔乕
				}
			}
			if (!err) {
				for (i=0; i<MAX_WAVE_CNT; i++) {
					sprintf(buf, "%8.3lf,%8.3lf,%8.3lf\r\n",
							wdat->Wave[i+ofs][0],
							wdat->Wave[i+ofs][1],
							wdat->Wave[i+ofs][2]
					);
					len = strlen(buf);
					w_cnt = pFile.Write(hdl, buf, len);
					if (w_cnt != len) {
						if (errno == 28) {		// ENOSPC == 28
							err = -4;			// 僨傿僗僋嬻偒梕検偑偨傝側偄
						}
						else {
							err = -3;			// 僼傽僀儖彂崬傒僄儔乕
						}
						break;
					}
				}
			}
			pFile.Close(hdl);
		}
	}
	return err;
}

/*-------------------------------------
						m:21-Dec-1998
@p	<< 俠俽倁僼傽僀儖撉傒崬傒 >>
堷悢		fname	僼傽僀儖柤
			wdat	攇宍僨乕僞僶僢僼傽
			ddat	僨乕僞僶僢僼傽
栠抣		0		惉岟
			-1		僼傽僀儖専嶕僄儔乕
			-2		僼傽僀儖僆乕僾儞僄儔乕
			-3		僼傽僀儖撉傒崬傒僄儔乕
			-4		僼僅乕儅僢僩僄儔乕
			-5		僨乕僞悢懌傝側偄
-------------------------------------*/
int	get_csv_data(int sel_ch, char *fname, struct S_WaveData *wdat, struct S_Dsp_Data *ddat)
{
	CC_File	pFile;
	char	r_buf[512], buf[256], a_buf[128], header[50];
	int		i, hdl, err, r_cnt, phs, r_pnt, w_pnt, n, exe, keep, stp, c_pnt, w, r, xyz, ofs, len;
	float	tmp;

	err = 0;
	strcpy(r_buf, fname);
	len = strlen(r_buf);
	sprintf(&r_buf[len-4-3], "_s%d.csv", sel_ch+1);
	ofs = sel_ch * MAX_WAVE_CNT;

	if (pFile.C_FileFind(r_buf) == 0) {			// 僼傽僀儖側偟
		err = -1;								// 僼傽僀儖専嶕僄儔乕
	}
	if (!err) {
		hdl = pFile.Open(r_buf, _O_BINARY | _O_RDONLY);
		if (hdl == -1) {
			err = -2;							// 僼傽僀儖僆乕僾儞僄儔乕
		}
		else {
			phs = 10;
			n = r_pnt = w_pnt = 0;
			keep = 1;
			exe = d00_on;
			while (keep) {
				r_cnt = 512;
				if (exe & d00_on) {
					r_cnt = pFile.Read(hdl, r_buf, 512);
					exe &= d00_off;
					r_pnt = 0;
				}
				stp = 0;
				for (i=0; ;i++) {
					buf[w_pnt++] = r_buf[r_pnt++];
					if (r_pnt == (512+1)) {
						exe |= d00_on;
						stp = 1;
						if (w_pnt > 0) w_pnt --;
					}
					if (buf[w_pnt-1] == '\n') {
						buf[w_pnt] = NULL;
						exe |= d01_on;
						stp = 1;
					}
					if (w_pnt == 256) w_pnt = 0;
					if (stp == 1) break;
				}
				if (exe & d01_on) {
					switch (phs) {
					case 10:

⌨️ 快捷键说明

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