<commit_before>﻿/* ***************************************************************************
 * main.h -- The main functions for the LCUI normal work
 * 
 * Copyright (C) 2012-2013 by
 * <NAME>
 * 
 * This file is part of the LCUI project, and may only be used, modified, and
 * distributed under the terms of the GPLv2.
 * 
 * (GPLv2 is abbreviation of GNU General Public License Version 2)
 * 
 * By continuing to use, modify, or distribute this file you indicate that you
 * have read the license and understand and accept it fully.
 *  
 * The LCUI project is distributed in the hope that it will be useful, but 
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
 * or FITNESS FOR A PARTICULAR PURPOSE. See the GPL v2 for more details.
 * 
 * You should have received a copy of the GPLv2 along with this file. It is 
 * usually in the LICENSE.TXT file, If not, see <http://www.gnu.org/licenses/>.
 * ****************************************************************************/
 
/* ****************************************************************************
 * main.h -- 使LCUI能够正常工作的相关主要函数
 *
 * 版权所有 (C) 2012-2013 归属于
 * 刘超
 * 
 * 这个文件是LCUI项目的一部分，并且只可以根据GPLv2许可协议来使用、更改和发布。
 *
 * (GPLv2 是 GNU通用公共许可证第二版 的英文缩写)
 * 
 * 继续使用、修改或发布本文件，表明您已经阅读并完全理解和接受这个许可协议。
 * 
 * LCUI 项目是基于使用目的而加以散布的，但不负任何担保责任，甚至没有适销性或特
 * 定用途的隐含担保，详情请参照GPLv2许可协议。
 *
 * 您应已收到附随于本文件的GPLv2许可协议的副本，它通常在LICENSE.TXT文件中，如果
 * 没有，请查看：<http://www.gnu.org/licenses/>. 
 * ****************************************************************************/
#ifndef __LCUI_KERNEL_MAIN_H__
#define __LCUI_KERNEL_MAIN_H__

LCUI_BEGIN_HEADER

/**************** 任务的添加模式 *******************/
#define ADD_MODE_ADD_NEW	0 /* 新增 */
#define ADD_MODE_NOT_REPEAT	1 /* 不能重复 */
#define ADD_MODE_REPLACE	2 /* 覆盖 */

#define AND_ARG_F	1<<3	/* 第一个参数 */
#define AND_ARG_S 	1<<4	/* 第二个参数 */
/***************************************************/

typedef struct {
	/* 
	 * 函数ID，部件库需要这ID标识函数类型，往程序的任务队列添加
	 * 任务也需要该ID来标识目标程序ID 
	 * */
	LCUI_ID id;
	void (*func)(void*,void*);	/* 函数指针 */
	
	/* 以下参数该怎么传给回调函数，具体要看是如何处理事件的 */  
	void *arg[2];			/* 传给函数的两个参数 */
	LCUI_BOOL destroy_arg[2];	/* 指定是否在调用完回调函数后，销毁参数 */
} LCUI_Func, LCUI_Task;

/***************************整个LCUI的数据 *****************************/
typedef struct LCUI_System_ {
	int state;			/* 状态 */ 
	int mode;			/* LCUI的运行模式 */
	LCUI_BOOL is_inited;		/* 指示LCUI是否初始化过 */
	
	LCUI_Thread self_id;		/* 保存LCUI主程序的线程的ID */
	LCUI_Thread display_thread;	/* 保存核心处理的线程的ID */
	LCUI_Thread timer_thread;	/* 定时器列表处理线程的ID */
	LCUI_Thread dev_thread;		/* 设备输入数据处理线程的ID */

	int exit_code;			/**< 退出码 */
	void (*func_atexit)(void);	/**< 在LCUI退出时调用的函数 */
} LCUI_System;
/***********************************************************************/

typedef struct LCUI_MainLoop_ {
	LCUI_BOOL quit;
	LCUI_BOOL running;
	int level;
} LCUI_MainLoop;

extern LCUI_System  LCUI_Sys;

#ifdef LCUI_BUILD_IN_WIN32<commit_msg>移入系统事件的数据结构定义<commit_after>﻿/* ***************************************************************************
 * main.h -- The main functions for the LCUI normal work
 * 
 * Copyright (C) 2012-2013 by
 * <NAME>
 * 
 * This file is part of the LCUI project, and may only be used, modified, and
 * distributed under the terms of the GPLv2.
 * 
 * (GPLv2 is abbreviation of GNU General Public License Version 2)
 * 
 * By continuing to use, modify, or distribute this file you indicate that you
 * have read the license and understand and accept it fully.
 *  
 * The LCUI project is distributed in the hope that it will be useful, but 
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
 * or FITNESS FOR A PARTICULAR PURPOSE. See the GPL v2 for more details.
 * 
 * You should have received a copy of the GPLv2 along with this file. It is 
 * usually in the LICENSE.TXT file, If not, see <http://www.gnu.org/licenses/>.
 * ****************************************************************************/
 
/* ****************************************************************************
 * main.h -- 使LCUI能够正常工作的相关主要函数
 *
 * 版权所有 (C) 2012-2013 归属于
 * 刘超
 * 
 * 这个文件是LCUI项目的一部分，并且只可以根据GPLv2许可协议来使用、更改和发布。
 *
 * (GPLv2 是 GNU通用公共许可证第二版 的英文缩写)
 * 
 * 继续使用、修改或发布本文件，表明您已经阅读并完全理解和接受这个许可协议。
 * 
 * LCUI 项目是基于使用目的而加以散布的，但不负任何担保责任，甚至没有适销性或特
 * 定用途的隐含担保，详情请参照GPLv2许可协议。
 *
 * 您应已收到附随于本文件的GPLv2许可协议的副本，它通常在LICENSE.TXT文件中，如果
 * 没有，请查看：<http://www.gnu.org/licenses/>. 
 * ****************************************************************************/
#ifndef __LCUI_KERNEL_MAIN_H__
#define __LCUI_KERNEL_MAIN_H__

LCUI_BEGIN_HEADER

/**************** 任务的添加模式 *******************/
#define ADD_MODE_ADD_NEW	0 /* 新增 */
#define ADD_MODE_NOT_REPEAT	1 /* 不能重复 */
#define ADD_MODE_REPLACE	2 /* 覆盖 */

#define AND_ARG_F	1<<3	/* 第一个参数 */
#define AND_ARG_S 	1<<4	/* 第二个参数 */
/***************************************************/

typedef struct {
	/* 
	 * 函数ID，部件库需要这ID标识函数类型，往程序的任务队列添加
	 * 任务也需要该ID来标识目标程序ID 
	 * */
	LCUI_ID id;
	void (*func)(void*,void*);	/* 函数指针 */
	
	/* 以下参数该怎么传给回调函数，具体要看是如何处理事件的 */  
	void *arg[2];			/* 传给函数的两个参数 */
	LCUI_BOOL destroy_arg[2];	/* 指定是否在调用完回调函数后，销毁参数 */
} LCUI_Func, LCUI_Task;

/***************************整个LCUI的数据 *****************************/
typedef struct LCUI_System_ {
	int state;			/* 状态 */ 
	int mode;			/* LCUI的运行模式 */
	LCUI_BOOL is_inited;		/* 指示LCUI是否初始化过 */
	
	LCUI_Thread self_id;		/* 保存LCUI主程序的线程的ID */
	LCUI_Thread display_thread;	/* 保存核心处理的线程的ID */
	LCUI_Thread timer_thread;	/* 定时器列表处理线程的ID */
	LCUI_Thread dev_thread;		/* 设备输入数据处理线程的ID */

	int exit_code;			/**< 退出码 */
	void (*func_atexit)(void);	/**< 在LCUI退出时调用的函数 */
} LCUI_System;
/***********************************************************************/

typedef struct {
	unsigned char type;
	int key_code;
} LCUI_KeyboardEvent;

typedef struct {
	unsigned char type;
	int code;
	void *data1;
	void *data2;
} LCUI_UserEvent;

typedef struct{
	unsigned char type;
	unsigned char state;
	unsigned int x, y;
	unsigned int xrel, yrel;
} LCUI_MouseMotionEvent;

typedef struct {
	unsigned char type;
	unsigned char button;
	unsigned char state;
	unsigned int x, y;
} LCUI_MouseButtonEvent;

typedef enum {
	LCUI_KEYDOWN,
	LCUI_KEYUP,
	LCUI_MOUSEMOTION,
	LCUI_MOUSEBUTTONDOWN,
	LCUI_MOUSEBUTTONUP,
	LCUI_QUIT,
	LCUI_EVENT_TOTAL_NUM
} LCUI_SystemEventType;

typedef union {
	unsigned char type;
	LCUI_KeyboardEvent key;
	LCUI_MouseMotionEvent motion;
	LCUI_MouseButtonEvent button;
	LCUI_UserEvent user;
} LCUI_SystemEvent;

typedef struct LCUI_MainLoop_ {
	LCUI_BOOL quit;
	LCUI_BOOL running;
	int level;
} LCUI_MainLoop;

extern LCUI_System  LCUI_Sys;

#ifdef LCUI_BUILD_IN_WIN32
{'fraction_non_alphanumeric': 0.24432334241598547, 'fraction_numerical': 0.011201937632455344, 'mean_word_length': 4.671244635193133, 'pattern_counts': {'":': 0, '<': 21, '<?xml version=': 0, '>': 9, 'https://': 0, 'lorem ipsum': 0, 'www.': 4, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4120380', 'n_tokens_mistral': 2866, 'n_tokens_neox': 2866, 'n_words': 556}