📄 ksg_file.cpp
字号:
// (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 + -