////////////////////////////////////////////////////////////////////////////
// TaEdit_std.h
// 共通的に使用する宣言を記述
////////////////////////////////////////////////////////////////////////////

#if !defined( TAEDIT_STD_H_INCLUDED_ )
#define TAEDIT_STD_H_INCLUDED_

#include <limits.h>
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <time.h>
#include <alloca.h>
#include <memory.h>
#include <string.h>
#include <wchar.h>
#include <widec.h>
#include <errno.h>
#include <sys/types.h>
#include <unistd.h>
#include <link.h>
#include <dlfcn.h>
#include <door.h>
#include <limits.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/wait.h>
#include <sys/stat.h>
#include <sys/time.h>

#include <vector>
#include <list>
#include <algorithm>
#include <map>

using namespace std;

#include "SelRange.h"
#include "../lib/VPtr.h"
#include "../lib/VClsPtr.h"
#include "../lib/Thread.h"
#include "../lib/Semaphore.h"
#include "../lib/NegCmd.h"
#include "CurPos.h"
#include "TimeSpec.h"
#include "ErrorBool.h"

using namespace NNabikiVClsPtr;
using namespace NNabikiVPtr;


// 一行に保持できる最大の文字数
#define TA_MAX_LINE_SIZE 10240

// 現在位置を示す変数のデータ型
typedef CCurPos< int > T_CurPos;

// 選択範囲を示すデータ型
typedef CSelRange< T_CurPos > T_SelRange;

// 正規表現ライブラリで使用する特殊文字
#define REGEX_SPECIALCODE L"()|.[]{}^"

// 色を保持する構造体
typedef struct {
	unsigned char r;
	unsigned char b;
	unsigned char g;
} RGBQUAD;

// マウスで文字を選択したときの判断方法
enum enumCHARSELTYPE
{
	CST_LEFT,	// 当該の文字の左側に設定
	CST_CENTER,	// 文字の中心に対して、左側か右側かでカーソルを設定する位置を決定
	CST_RIGHT	// 当該の文字の右側に設定
};

// タブ幅の計算方法
enum enumTABWIDTHCALCMETHOD
{
	TWCM_FIX,	// 固定
	TWCM_FLEX	// 可変
};

// ドロップされたファイルの開き方
enum enumDROPFILEOPENMETHOD
{
	DFOM_NEW_WINDOW,	// 新しいウインドウで開く
	DFOM_CURRENT_WINDOW	// 現在のウインドウで開く
};

// マウスの中ボタンの挙動
enum enumBTN2FUNC
{
	B2F_LEFT,		// 左ボタンと同じ
	B2F_LEFT_CTRL,	// 左ボタン+Ctrlキー
	B2F_LEFT_SHIFT	// 左ボタン+Shiftキー
};

// 言語種類コード
enum enumLANGTYPE {
	LANGTYPE_TEXT,
	LANGTYPE_CPP,
	LANGTYPE_JAVA,
	LANGTYPE_CBL,
	LANGTYPE_JS,
	LANGTYPE_VBS,
	LANGTYPE_CS,
	LANGTYPE_NAN
};

// 名前がないファイルに対する自動保存の挙動
enum enumAUTOSAVE_NEWFILE {
	ASNW_NOTHING,	// 保存しない
	ASNW_ASC_NAME	// ファイル名を聞く
};

// 再描画のタイプ
enum enumREDRAWTYPE {
	TED_REUSE_CHAR_INFO, // 全部再描画する
	TED_LINE_BASE	// 行単位での描画有無を選択
};

// 横着
#define DBG_PRINT_D( x ) printf( "%s = %d\n", #x, x );
#define DBG_PRINT_S( x ) printf( "%s = \"%s\"\n", #x, x );

// Syuhitu/TaEditのバージョン
#define TAEDIT_VERSION	15


#endif // TAEDIT_STD_H_INCLUDED_

