This commit is contained in:
zhouhuang 2024-07-19 17:28:02 +08:00
parent 2826f5720d
commit f8a8868964
9 changed files with 1230 additions and 1024 deletions

View File

@ -4,7 +4,7 @@ set (VERSION 1.0.1)
# set (CMAKE_CXX_STANDARD 11) # set (CMAKE_CXX_STANDARD 11)
option (USE_MQTT "use mqtt protocol" ON) option (USE_MQTT "use mqtt protocol" ON)
option (USE_WEBSOCKET "use websocket" OFF) option (USE_WEBSOCKET "use websocket" ON)
option (USE_SQLITE3 "use sqlite3" ON) option (USE_SQLITE3 "use sqlite3" ON)
if (USE_SQLITE3) if (USE_SQLITE3)
@ -145,11 +145,10 @@ if (USE_WEBSOCKET)
third_party/nopoll/nopoll_io.c third_party/nopoll/nopoll_io.c
third_party/nopoll/nopoll_log.c third_party/nopoll/nopoll_log.c
third_party/nopoll/nopoll_msg.c) third_party/nopoll/nopoll_msg.c)
set (APP_SRCS ${APP_SRCS} dlt1867/dlt1867.cpp)
set (APP_LIBS ${APP_LIBS} ssl crypto) set (APP_LIBS ${APP_LIBS} ssl crypto)
add_definitions(-DUSE_WEBSOCKET) add_definitions(-DUSE_WEBSOCKET)
add_definitions(-DNOPOLL_OS_UNIX=1) add_definitions(-DNOPOLL_OS_UNIX=1)
#add_definitions(-DSHOW_DEBUG_LOG)
add_definitions(-DNOPOLL_HAVE_VASPRINTF=1) add_definitions(-DNOPOLL_HAVE_VASPRINTF=1)
add_definitions(-DNOPOLL_HAVE_TLSv10_ENABLED=1) add_definitions(-DNOPOLL_HAVE_TLSv10_ENABLED=1)
add_definitions(-DNOPOLL_HAVE_TLSv11_ENABLED=1) add_definitions(-DNOPOLL_HAVE_TLSv11_ENABLED=1)

View File

@ -32,16 +32,19 @@ CChangeMaster::CChangeMaster()
if (gethostname(hostname, sizeof(hostname)) < 0) if (gethostname(hostname, sizeof(hostname)) < 0)
{ {
vLog(LOG_ERROR, "gethostname error.\n"); vLog(LOG_ERROR, "gethostname error.\n");
return;
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
if (NULL == (m_control.m_node = GetNode(hostname))) if (NULL == (m_control.m_node = GetNode(hostname)))
{ {
vLog(LOG_ERROR, "node table error, cann't run(%s,%s)!\n", m_control.m_node->m_machine_name, hostname); vLog(LOG_ERROR, "node table error, cann't run(%s,%s)!\n", m_control.m_node->m_machine_name, hostname);
return;
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
if (m_control.m_node == NULL) if (m_control.m_node == NULL)
{ {
vLog(LOG_ERROR, "node table error, cann't change!\n"); vLog(LOG_ERROR, "node table error, cann't change!\n");
return;
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
if ((m_control.m_node->m_tcitype != MASTER_TCI) && (m_control.m_node->m_tcitype != STANDBY_TCI)) if ((m_control.m_node->m_tcitype != MASTER_TCI) && (m_control.m_node->m_tcitype != STANDBY_TCI))
@ -444,6 +447,7 @@ void CChangeMaster::ChangeDual()
NODE_STRUCT* CChangeMaster::GetNode(char *name) NODE_STRUCT* CChangeMaster::GetNode(char *name)
{ {
return &nodes.m_node[0];
int i = 0; int i = 0;
for (i = 0; i < MAX_NODE_NUM; i++) for (i = 0; i < MAX_NODE_NUM; i++)
{ {
@ -457,6 +461,7 @@ NODE_STRUCT* CChangeMaster::GetNode(char *name)
NODE_STRUCT* CChangeMaster::GetNode(int netno) NODE_STRUCT* CChangeMaster::GetNode(int netno)
{ {
return &nodes.m_node[0];
int i = 0; int i = 0;
for (i = 0; i < MAX_NODE_NUM; i++) for (i = 0; i < MAX_NODE_NUM; i++)

File diff suppressed because it is too large Load Diff

View File

@ -23,11 +23,6 @@
#include "json.h" #include "json.h"
#define ADDR_TYPE_NORMAL 0
#define ADDR_TYPE_HEX 1
#define ADDR_TYPE_IPV4 2
#define ADDR_TYPE_IPV4_FACNO 3
#define PARAMTER_TYPE_MODBUS 1 #define PARAMTER_TYPE_MODBUS 1
#define PARAMTER_TYPE_104 2 #define PARAMTER_TYPE_104 2
#define PARAMTER_TYPE_9712 3 #define PARAMTER_TYPE_9712 3
@ -1040,6 +1035,7 @@ BOOLEAN WriteDatabaseCFG(void)
return FALSE; return FALSE;
} }
#if 0
//此处定义一个map来放置irn和协议的order的关系 //此处定义一个map来放置irn和协议的order的关系
typedef std::map<QWORD, int> mapIRN2Order; typedef std::map<QWORD, int> mapIRN2Order;
BOOLEAN processUartParam(std::string jsonvalue, int ord) BOOLEAN processUartParam(std::string jsonvalue, int ord)
@ -2101,6 +2097,7 @@ BOOLEAN ReadConfigFromSQLite(BOOLEAN enable_auto_platform, const char* issmqtt_c
return TRUE; return TRUE;
} }
#endif
void dumpLogs(void) void dumpLogs(void)
{ {
@ -2354,9 +2351,9 @@ BOOLEAN initialize_system(BOOLEAN usesqlite, BOOLEAN enable_auto_platform, const
if (usesqlite) if (usesqlite)
{ {
vLog(LOG_DEBUG, "read configuration from sqlite3 db file.\n"); vLog(LOG_DEBUG, "read configuration from sqlite3 db file.\n");
BOOLEAN ret; BOOLEAN ret = FALSE;
ret = ReadConfigFromSQLite(enable_auto_platform, pathName, codeName);
#if 0 #if 0
ret = ReadConfigFromSQLite(enable_auto_platform, pathName, codeName);
if (ret) if (ret)
{ {
WriteSystemCFG(); WriteSystemCFG();
@ -2377,6 +2374,7 @@ BOOLEAN initialize_system(BOOLEAN usesqlite, BOOLEAN enable_auto_platform, const
{ {
vLog(LOG_ERROR, "Fail load system config!\n"); vLog(LOG_ERROR, "Fail load system config!\n");
alarm(); alarm();
return FALSE;
} }
vLog(LOG_DEBUG, "Loading node config...\n"); vLog(LOG_DEBUG, "Loading node config...\n");
@ -2384,6 +2382,7 @@ BOOLEAN initialize_system(BOOLEAN usesqlite, BOOLEAN enable_auto_platform, const
{ {
vLog(LOG_ERROR, "Fail load node config!\n"); vLog(LOG_ERROR, "Fail load node config!\n");
alarm(); alarm();
return FALSE;
} }
vLog(LOG_DEBUG, "Loading database config...\n"); vLog(LOG_DEBUG, "Loading database config...\n");
@ -2391,6 +2390,7 @@ BOOLEAN initialize_system(BOOLEAN usesqlite, BOOLEAN enable_auto_platform, const
{ {
vLog(LOG_ERROR, "Fail load database config!\n"); vLog(LOG_ERROR, "Fail load database config!\n");
alarm(); alarm();
return FALSE;
} }
vLog(LOG_DEBUG, "Loading hardware config...\n"); vLog(LOG_DEBUG, "Loading hardware config...\n");
@ -2398,6 +2398,7 @@ BOOLEAN initialize_system(BOOLEAN usesqlite, BOOLEAN enable_auto_platform, const
{ {
vLog(LOG_ERROR, "Fail load hardware config!\n"); vLog(LOG_ERROR, "Fail load hardware config!\n");
alarm(); alarm();
return FALSE;
} }
vLog(LOG_DEBUG, "Loading process config...\n"); vLog(LOG_DEBUG, "Loading process config...\n");
@ -2405,6 +2406,7 @@ BOOLEAN initialize_system(BOOLEAN usesqlite, BOOLEAN enable_auto_platform, const
{ {
vLog(LOG_ERROR, "Fail load processes config!\n"); vLog(LOG_ERROR, "Fail load processes config!\n");
alarm(); alarm();
return FALSE;
} }
vLog(LOG_DEBUG, "Loading unit config...\n"); vLog(LOG_DEBUG, "Loading unit config...\n");
@ -2412,6 +2414,7 @@ BOOLEAN initialize_system(BOOLEAN usesqlite, BOOLEAN enable_auto_platform, const
{ {
vLog(LOG_ERROR, "Fail load unit config!\n"); vLog(LOG_ERROR, "Fail load unit config!\n");
alarm(); alarm();
return FALSE;
} }
vLog(LOG_DEBUG, "Loading static unit config...\n"); vLog(LOG_DEBUG, "Loading static unit config...\n");
@ -2419,6 +2422,7 @@ BOOLEAN initialize_system(BOOLEAN usesqlite, BOOLEAN enable_auto_platform, const
{ {
vLog(LOG_ERROR, "Fail load static unit config!\n"); vLog(LOG_ERROR, "Fail load static unit config!\n");
alarm(); alarm();
return FALSE;
} }
} }
return TRUE; return TRUE;

View File

@ -71,7 +71,7 @@ void CSOE::DumpSOE(void)
static_unit = fopen(pathName, "rb"); static_unit = fopen(pathName, "rb");
//打开yx.sta静态摁键 //打开yx.sta静态摁键
FILE* static_yx; FILE* static_yx;
struUnitYXStatic yx; struYXStatic yx;
snprintf(pathName, sizeof(pathName), "%s/%s", configpath, FILE_DATABASE_YX_STATIC); snprintf(pathName, sizeof(pathName), "%s/%s", configpath, FILE_DATABASE_YX_STATIC);
static_yx = fopen(pathName, "rb"); static_yx = fopen(pathName, "rb");
@ -85,9 +85,9 @@ void CSOE::DumpSOE(void)
unit.model[15] = '\0'; unit.model[15] = '\0';
} }
memset(&yx, 0, sizeof(yx)); memset(&yx, 0, sizeof(yx));
if (static_yx != NULL && fseek(static_yx, sizeof(struUnitYXStatic)*m_soes[m_load].order, SEEK_SET) == 0) if (static_yx != NULL && fseek(static_yx, sizeof(struYXStatic)*m_soes[m_load].order, SEEK_SET) == 0)
{ {
fread(&yx, sizeof(struUnitYXStatic), 1, static_yx); fread(&yx, sizeof(struYXStatic), 1, static_yx);
yx.name[63] = '\0'; yx.name[63] = '\0';
} }
fprintf(pf, "%04d/%02d/%02d %02d:%02d:%02d.%03d;%d;%s;%d;%s;%s;%d;%s\n", \ fprintf(pf, "%04d/%02d/%02d %02d:%02d:%02d.%03d;%d;%s;%d;%s;%s;%d;%s\n", \

View File

@ -74,7 +74,7 @@ void CYCBW::DumpYCBW(void)
static_unit = fopen(pathName, "rb"); static_unit = fopen(pathName, "rb");
FILE* static_yc; FILE* static_yc;
struUnitYCStatic yc; struYCStatic yc;
snprintf(pathName, sizeof(pathName), "%s/%s", configpath, FILE_DATABASE_YC_STATIC); snprintf(pathName, sizeof(pathName), "%s/%s", configpath, FILE_DATABASE_YC_STATIC);
static_yc = fopen(pathName, "rb"); static_yc = fopen(pathName, "rb");
@ -88,9 +88,9 @@ void CYCBW::DumpYCBW(void)
unit.model[15] = '\0'; unit.model[15] = '\0';
} }
memset(&yc, 0, sizeof(yc)); memset(&yc, 0, sizeof(yc));
if (static_yc != NULL && fseek(static_yc, sizeof(struUnitYCStatic)*m_ycbws[m_load].order, SEEK_SET) == 0) if (static_yc != NULL && fseek(static_yc, sizeof(struYCStatic)*m_ycbws[m_load].order, SEEK_SET) == 0)
{ {
fread(&yc, sizeof(struUnitYCStatic), 1, static_yc); fread(&yc, sizeof(struYCStatic), 1, static_yc);
yc.name[63] = '\0'; yc.name[63] = '\0';
} }
fprintf(pf, "%s;%d;%d;%d;%s;%s;%d;%s\n", fprintf(pf, "%s;%d;%d;%d;%s;%s;%d;%s\n",

View File

@ -73,7 +73,7 @@ void CYXBW::DumpYXBW(void)
static_unit = fopen(pathName, "rb"); static_unit = fopen(pathName, "rb");
FILE* static_yx; FILE* static_yx;
struUnitYXStatic yx; struYXStatic yx;
snprintf(pathName, sizeof(pathName), "%s/%s", configpath, FILE_DATABASE_YX_STATIC); snprintf(pathName, sizeof(pathName), "%s/%s", configpath, FILE_DATABASE_YX_STATIC);
static_yx = fopen(pathName, "rb"); static_yx = fopen(pathName, "rb");
@ -87,9 +87,9 @@ void CYXBW::DumpYXBW(void)
unit.model[15] = '\0'; unit.model[15] = '\0';
} }
memset(&yx, 0, sizeof(yx)); memset(&yx, 0, sizeof(yx));
if (static_yx != NULL && fseek(static_yx, sizeof(struUnitYXStatic)*m_yxbws[m_load].order, SEEK_SET) == 0) if (static_yx != NULL && fseek(static_yx, sizeof(struYXStatic)*m_yxbws[m_load].order, SEEK_SET) == 0)
{ {
fread(&yx, sizeof(struUnitYXStatic), 1, static_yx); fread(&yx, sizeof(struYXStatic), 1, static_yx);
yx.name[63] = '\0'; yx.name[63] = '\0';
} }
fprintf(pf, "%s;%d;%s;%d;%s;%s;%d;%s\n", fprintf(pf, "%s;%d;%s;%d;%s;%s;%d;%s\n",

View File

@ -14,52 +14,28 @@ const char VERSION_NO[] = "1.3.0001";
#include <stdarg.h> #include <stdarg.h>
#include <sys/timeb.h> #include <sys/timeb.h>
#include <cstring> #include <cstring>
#include <errno.h>
#ifdef WIN32 #include <error.h>
#include "pthread.h" #include <unistd.h>
#include <WinSock2.h> #include <fcntl.h>
#include <WS2tcpip.h> #include <termios.h>
#include <pthread.h>
typedef char optval_t; #include <sys/time.h>
typedef int socklen_t; #include <sys/times.h>
#include <sys/types.h>
#define msleep(msec) Sleep(msec) #include <sys/stat.h>
#define sleep(sec) Sleep(sec * 1000) #include <sys/socket.h>
#include <sys/ioctl.h>
void usleep(unsigned long usec); #include <sys/select.h>
int close(SOCKET s); #include <linux/rtc.h>
int ioctl(SOCKET s, long cmd, u_long FAR* argp); #include <netinet/in.h>
int gettimeofday(struct timeval *tp, struct timezone *tz); #include <arpa/inet.h>
int settimeofday(struct timeval *tp, struct timezone *tz); #include <linux/kd.h>
struct tm *localtime_r(long *close, struct tm *res); #include <net/if.h>
#else #include <netdb.h>
#include <errno.h> #include <sys/syscall.h>
#include <error.h> typedef int optval_t;
#include <unistd.h> typedef int SOCKET;
#include <fcntl.h>
#include <termios.h>
#include <pthread.h>
#include <sys/time.h>
#include <sys/times.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <sys/select.h>
#include <linux/rtc.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <linux/kd.h>
#include <net/if.h>
#include <netdb.h>
#include <sys/syscall.h>
#if 0
#include "threadpool.h"
#define THREADPOOL_MAX_NUM 68
#endif
typedef int optval_t;
typedef int SOCKET;
#endif //WIN32
#include <string> #include <string>
#include <vector> #include <vector>
#include <sys/stat.h> #include <sys/stat.h>
@ -212,30 +188,36 @@ const char VERSION_NO[] = "1.3.0001";
#define PROTOCOL_HOST_MODBUS_TCP 16 //MODBUS tcp主 #define PROTOCOL_HOST_MODBUS_TCP 16 //MODBUS tcp主
#define PROTOCOL_SUB_MODBUS_TCP 17 //MODBUS RTU over tcp从 #define PROTOCOL_SUB_MODBUS_TCP 17 //MODBUS RTU over tcp从
#define PROTOCOL_HOST_MODBUS_RTU_TCP 18 //MODBUS RTU over tcp主 #define PROTOCOL_HOST_MODBUS_RTU_TCP 18 //MODBUS RTU over tcp主
#define PROTOCOL_HOST_MODBUS_RTU_NCY 19 //NCY-6100系列微机保护装置MODBUS RTU主 //#define PROTOCOL_HOST_MODBUS_RTU_NCY 19 //NCY-6100系列微机保护装置MODBUS RTU主
#define PROTOCOL_HOST_MODBUS_RTU_LIYEZG 20 //浙江立业电器MODBUS RTU主 //#define PROTOCOL_HOST_MODBUS_RTU_LIYEZG 20 //浙江立业电器MODBUS RTU主
#define PROTOCOL_RTU_STATE 21 //主控状态 #define PROTOCOL_RTU_STATE 21 //主控状态
#define PROTOCOL_LOCAL_DEBUG 22 //本地调试 #define PROTOCOL_LOCAL_DEBUG 22 //本地调试
#define PROTOCOL_SUB_XT9712 23 //XT9712从 //#define PROTOCOL_SUB_XT9712 23 //XT9712从
#define PROTOCOL_HISDATA 24 //历史数据协议 //#define PROTOCOL_HISDATA 24 //历史数据协议
#define PROTOCOL_BF_FTP 25 //倍福FTP数据协议 #define PROTOCOL_BF_FTP 25 //倍福FTP数据协议
#define PROTOCOL_HOST_NSA 27 //NSA主 //#define PROTOCOL_HOST_NSA 27 //NSA主
#define PROTOCOL_HOST_DLT645V2007 30 //dlt645v2007协议 #define PROTOCOL_HOST_DLT645V2007 30 //dlt645v2007协议
#define PROTOCOL_HOST_DLT645V2007_HR 31 //中电华瑞dlt645v2007协议 #define PROTOCOL_HOST_DLT645V2007_HR 31 //中电华瑞dlt645v2007协议
#define PROTOCOL_HOST_DLT645V2007_OVERTCP 32 //中电华瑞dlt645v2007 over tcp协议 #define PROTOCOL_HOST_DLT645V2007_OVERTCP 32 //中电华瑞dlt645v2007 over tcp协议
#define PROTOCOL_CALC 37 //计算 #define PROTOCOL_CALC 37 //计算
#define PROTOCOL_DLT_1867 40 //需求响应协议dlt1867-2008 //#define PROTOCOL_DLT_1867 40 //需求响应协议dlt1867-2008
#define PROTOCOL_SUB_GDW104 47 //国网104从 #define PROTOCOL_SUB_GDW104 47 //国网104从
#define PROTOCOL_AGC 50 //功率自动控制app //#define PROTOCOL_AGC 50 //功率自动控制app
#define PROTOCOL_AVC 51 //电压自动控制app //#define PROTOCOL_AVC 51 //电压自动控制app
#define PROTOCOL_HW_MQTT 72 //华为物联平台ROMA #define PROTOCOL_HW_MQTT 72 //华为物联平台ROMA
#define PROTOCOL_ISS_MQTT 73 //软通动力mqtt //#define PROTOCOL_ISS_MQTT 73 //软通动力mqtt
#define PROTOCOL_LM_MQTT 74 //罗米mqtt //#define PROTOCOL_LM_MQTT 74 //罗米mqtt
#define PROTOCOL_GRPC_PUBLISH 76 //gRPC上传发布 //#define PROTOCOL_GRPC_PUBLISH 76 //gRPC上传发布
#define PROTOCOL_GRPC_SUBSCRIBE 77 //gRPC下载订阅 //#define PROTOCOL_GRPC_SUBSCRIBE 77 //gRPC下载订阅
#define PROTOCOL_OPCUA 78 //opcua协议 #define PROTOCOL_OPCUA 78 //opcua协议
#define PROTOCOL_HOST_MODBUS_RTU_RDS100AFT 80 //珠海瑞捷电气股份有限公司RD系列保护装置MODBUS RTU主 //#define PROTOCOL_HOST_MODBUS_RTU_RDS100AFT 80 //珠海瑞捷电气股份有限公司RD系列保护装置MODBUS RTU主
#define PROTOCOL_HOST_MODBUS_RTU_APF 81 //江苏沃海电气有限公司APFSVGMODBUS RTU主 //#define PROTOCOL_HOST_MODBUS_RTU_APF 81 //江苏沃海电气有限公司APFSVGMODBUS RTU主
#define ADDR_TYPE_NORMAL 0
#define ADDR_TYPE_HEX 1
#define ADDR_TYPE_IPV4 2
#define ADDR_TYPE_IPV4_FACNO 3
#define YKS_IDLE 0 #define YKS_IDLE 0
@ -858,6 +840,7 @@ typedef struct
typedef struct typedef struct
{ {
char name[(MAX_NAME_SIZE << 2)];
short order; short order;
BYTE value; BYTE value;
BYTE qds; //品质描述 BYTE qds; //品质描述
@ -865,18 +848,20 @@ typedef struct
BYTE m_param[MAX_UNIT_POINT_PARAM_SIZE]; BYTE m_param[MAX_UNIT_POINT_PARAM_SIZE];
DWORD update_time; DWORD update_time;
QLONG irn; QLONG irn;
//是否取反,default: 0
BOOLEAN invert;
} struUnitYX; } struUnitYX;
#if 0
typedef struct typedef struct
{ {
char name[(MAX_NAME_SIZE << 2)]; char name[(MAX_NAME_SIZE << 2)];
} struUnitYXStatic; } struUnitYXStatic;
#if 0
#define EXTREME_SAMPLE_NUM 32
#endif #endif
typedef struct typedef struct
{ {
char name[(MAX_NAME_SIZE << 2)];
short order; short order;
short factor; //比例系数 short factor; //比例系数
LONG value; //遥测值 LONG value; //遥测值
@ -888,12 +873,31 @@ typedef struct
BYTE m_param[MAX_UNIT_POINT_PARAM_SIZE]; BYTE m_param[MAX_UNIT_POINT_PARAM_SIZE];
DWORD update_time; DWORD update_time;
QLONG irn; QLONG irn;
//上界
float upBound;
//下界
float lowBound;
//限值1, default: 0
BOOLEAN limit1Enable;
//限值1下限
float limit1Low;
//限值1上限
float limit1High;
//限值2, default: 0
BOOLEAN limit2Enable;
//限值2上限
float limit2High;
//限值2下限
float limit2Low;
} struUnitYC; } struUnitYC;
#if 0
typedef struct typedef struct
{ {
char name[(MAX_NAME_SIZE << 2)]; char name[(MAX_NAME_SIZE << 2)];
} struUnitYCStatic; } struUnitYCStatic;
#endif
typedef struct typedef struct
{ {
@ -908,6 +912,7 @@ typedef struct
typedef struct typedef struct
{ {
char name[(MAX_NAME_SIZE << 2)];
short order; short order;
DWORD value; DWORD value;
float coef; float coef;
@ -917,13 +922,16 @@ typedef struct
QLONG irn; QLONG irn;
} struUnitYM; } struUnitYM;
#if 0
typedef struct typedef struct
{ {
char name[(MAX_NAME_SIZE << 2)]; char name[(MAX_NAME_SIZE << 2)];
} struUnitYMStatic; } struUnitYMStatic;
#endif
typedef struct typedef struct
{ {
char name[(MAX_NAME_SIZE << 2)];
short order; short order;
BOOLEAN selected; BOOLEAN selected;
BYTE m_param[MAX_UNIT_POINT_PARAM_SIZE]; BYTE m_param[MAX_UNIT_POINT_PARAM_SIZE];
@ -937,16 +945,19 @@ typedef struct
typedef struct typedef struct
{ {
char name[(MAX_NAME_SIZE << 2)];
short order; short order;
BOOLEAN selected; BOOLEAN selected;
BYTE m_param[MAX_UNIT_POINT_PARAM_SIZE]; BYTE m_param[MAX_UNIT_POINT_PARAM_SIZE];
QLONG irn; QLONG irn;
} struUnitYT; } struUnitYT;
#if 0
typedef struct typedef struct
{ {
char name[(MAX_NAME_SIZE << 2)]; char name[(MAX_NAME_SIZE << 2)];
} struUnitYTStatic; } struUnitYTStatic;
#endif
typedef struct typedef struct
{ {

View File

@ -301,6 +301,8 @@ bool Reader::parse(const char* beginDoc,
const char* endDoc, const char* endDoc,
Value& root, Value& root,
bool collectComments) { bool collectComments) {
fprintf(stderr, "here.\n");
if (!features_.allowComments_) { if (!features_.allowComments_) {
collectComments = false; collectComments = false;
} }