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

📄 csharedata.cpp

📁 日本的开源编辑器源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
//	$Id: CShareData.cpp,v 1.92 2005/04/22 23:27:32 genta Exp $
/*!	@file
	@brief プロセス間共有データへのアクセス

	@author Norio Nakatani
	@date 1998/05/26  新規作成
	$Revision: 1.92 $
*/
/*
	Copyright (C) 1998-2001, Norio Nakatani
	Copyright (C) 2002, MIK
	Copyright (C) 2003, MIK

	This source code is designed for sakura editor.
	Please contact the copyright holder to use this code for other purpose.
*/

#include <io.h>
#include "CShareData.h"
#include "CEditApp.h"
#include "mymessage.h"
#include "debug.h"
#include "global.h"
#include "etc_uty.h"
#include "CRunningTimer.h"
#include "my_icmp.h" // 2002/11/30 Moca 追加
#include "my_tchar.h" // 2003/01/06 Moca

struct ARRHEAD {
	int		nLength;
	int		nItemNum;
};

//!	共有メモリのバージョン
/*!
	共有メモリのバージョン番号。共有メモリの形式を変更したときはここを1増やす。

	この値は共有メモリのバージョンフィールドに格納され、異なる構造の共有メモリを
	使うエディタが同時に起動しないようにする。

	設定可能な値は 1~unsinged intの最大値

	@sa Init()

	Version 1~24:
	いろいろ
	
	Version 25:
	m_bStopsBothEndsWhenSearchWord追加
	
	Version 26:
	MacroRecに、m_bReloadWhenExecuteを追加 2002/03/11 YAZAKI
	FileInfoに、m_szDocType追加 Mar. 7, 2002 genta
	
	Version 27:
	Typesに、m_szOutlineRuleFilenameを追加 2002.04.01 YAZAKI 
	
	Version 28:
	PRINTSETTINGに、m_bPrintKinsokuHead、m_bPrintKinsokuTailを追加 2002.04.09 MIK
	Typesに、m_bKinsokuHead、m_bKinsokuTail、m_szKinsokuHead、m_szKinsokuTailを追加 2002.04.09 MIK

	Version 29:
	PRINTSETTINGに、m_bPrintKinsokuRetを追加 2002.04.13 MIK
	Typesに、m_bKinsokuRetを追加 2002.04.13 MIK

	Version 30:
	PRINTSETTINGに、m_bPrintKinsokuKutoを追加 2002.04.17 MIK
	Typesに、m_bKinsokuKutoを追加 2002.04.17 MIK

	Version 31:
	Commonに、m_bStopsBothEndsWhenSearchParagraphを追加 2002/04/26 YAZAKI

	Version 32:
	CommonからTypesへ、m_bAutoIndent、m_bAutoIndent_ZENSPACEを移動 2002/04/30 YAZAKI

	Version 33:
	Commonに、m_lf_khを追加 2002/05/21 ai
	m_nDiffFlgOptを追加 2002.05.27 MIK
	Types-ColorにCOLORIDX_DIFF_APPEND,COLORIDX_DIFF_CHANGE,COLORIDX_DIFF_DELETEを追加

	Version 34:
	Typesにm_bUseDocumentIcon 追加. 2002.09.10 genta
	
	Version 35:
	Commonにm_nLineNumRightSpace 追加.2002.09.18 genta

	Version 36:
	Commonのm_bGrepKanjiCode_AutoDetectを削除、m_nGrepCharSetを追加 2002/09/21 Moca

	Version 37:
	TypesのLineComment関連をm_cLineCommentに変更.  @@@ 2002.09.23 YAZAKI
	TypesのBlockComment関連をm_cBlockCommentに変更.@@@ 2002.09.23 YAZAKI

	Version 38:
	Typesにm_bIndentLayoutを追加. @@@ 2002.09.29 YAZAKI
	2002.10.01 genta m_nIndentLayoutに名前変更

	Version 39:
	Commonにm_nFUNCKEYWND_GroupNumを追加. 2002/11/04 Moca

	Version 40:
	ファイル名簡易表記関連を追加. 2002/12/08~2003/01/15 Moca

	Version 41:
	Typesのm_szTabViewStringサイズ拡張
	m_nWindowSizeX/Y m_nWindowOriginX/Y追加 2003.01.26 aroka

	Version 42:
	Typesに独自TABマークフラグ追加 2003.03.28 MIK

	Version 43:
	最近使ったファイル?フォルダにお気に入りを追加 2003.04.08 MIK

	Version 44:
	Window Caption文字列領域をCommonに追加 2003.04.05 genta

	Version 45:
	タグファイル作成用コマンドオプション保存領域(m_nTagsOpt,m_szTagsCmdLine)を追加 2003.05.12 MIK

	Version 46:
	編集ウインドウ数修正、タブウインドウ用情報追加

	Version 47:
	ファイルからの補完をTypesに追加 2003.06.28 Moca

	Version 48:
	Grepリアルタイム表示追加 2003.06.28 Moca

	Version 49:
	ファイル情報にIsDebug追加 (タブ表示用) 2003.10.13 MIK
	
	Version 50:
	ウィンドウ位置固定?継承を追加 2004.05.13 Moca

	Version 51:
	タグジャンプ機能追加 2004/06/21 novice

	Version 52:
	前回と異なる文字コードのときに問い合わせを行うかどうかのフラグ追加	2004.10.03 genta

	Version 53:
	存在しないファイルを開こうとした場合に警告するフラグの追加	2004.10.09 genta

	Version 54:
	マウスサイドボタン対応 2004/10/10 novice

	Version 55:
	マウス中ボタン対応 2004/10/11 novice

	Version 56:
	インクリメンタルサーチ(Migemo path用) 2004/10/13 isearch
	
	Version 57:
	強調キーワード指定拡大 2005/01/13 MIK
	
	Version 58:
	強調キーワードセット可変長割り当て 2005/01/25 Moca

	Version 59:
	マクロ数を増やした 2005/01/30 genta
	
	Version 60:
	キーワード指定タグジャンプ履歴保存 2005/04/03 MIK
*/

const unsigned int uShareDataVersion = 60;

/*
||	Singleton風
*/
CShareData* CShareData::_instance = NULL;

CShareData* CShareData::getInstance()
{
	return _instance;
}

/*!
	共有メモリ領域がある場合はプロセスのアドレス空間から?
	すでにマップされているファイル ビューをアンマップする。
*/
CShareData::~CShareData()
{
	if( NULL != m_pShareData ){
		/* プロセスのアドレス空間から? すでにマップされているファイル ビューをアンマップします */
		::UnmapViewOfFile( m_pShareData );
		m_pShareData = NULL;
	}
	return;
}


//! CShareDataクラスの初期化処理
/*!
	CShareDataクラスを利用する前に必ず呼び出すこと。

	@retval true 初期化成功
	@retval false 初期化失敗

	@note 既に存在する共有メモリのバージョンがこのエディタが使うものと
	異なる場合は致命的エラーを防ぐためにfalseを返します。CProcess::Initialize()
	でInit()に失敗するとメッセージを出してエディタの起動を中止します。
*/
bool CShareData::Init( void )
{
	MY_RUNNINGTIMER(cRunningTimer,"CShareData::Init" );

	if (CShareData::_instance == NULL)	//	Singleton風
		CShareData::_instance = this;

	int		i;
	int		j;
	char	szExeFolder[_MAX_PATH + 1];
	char	szPath[_MAX_PATH + 1];

	/* exeのあるフォルダ */
	::GetModuleFileName(
		::GetModuleHandle( NULL ),
		szPath, sizeof( szPath )
	);
	/* ファイルのフルパスを、フォルダとファイル名に分割 */
	/* [c:\work\test\aaa.txt] → [c:\work\test] + [aaa.txt] */
	::SplitPath_FolderAndFile( szPath, szExeFolder, NULL );
	strcat( szExeFolder, "\\" );

	/* ファイルマッピングオブジェクト */
	m_hFileMap = ::CreateFileMapping(
		INVALID_HANDLE_VALUE,	//	Sep. 6, 2003 wmlhq
		NULL,
		PAGE_READWRITE | SEC_COMMIT,
		0,
		sizeof( DLLSHAREDATA ),
		GSTR_CSHAREDATA
	);
	if( NULL == m_hFileMap ){
		::MessageBox(
			NULL,
			"CreateFileMapping()に失敗しました",
			"予期せぬエラー",
			MB_OK | MB_APPLMODAL | MB_ICONSTOP
		);
		return false;
	}
	if( GetLastError() != ERROR_ALREADY_EXISTS ){
		/* オブジェクトが存在していなかった場合 */
		/* ファイルのビューを? 呼び出し側プロセスのアドレス空間にマップします */
		m_pShareData = (DLLSHAREDATA*)::MapViewOfFile(
			m_hFileMap,
			FILE_MAP_ALL_ACCESS,
			0,
			0,
			0
		);
		m_pShareData->m_vStructureVersion = uShareDataVersion;
//		m_pShareData->m_CKeyMacroMgr.Clear();			/* キーワードマクロのバッファ */
		strcpy(m_pShareData->m_szKeyMacroFileName, "");	/* キーワードマクロのファイル名 */ //@@@ 2002.1.24 YAZAKI
		m_pShareData->m_bRecordingKeyMacro = FALSE;		/* キーボードマクロの記録中 */
		m_pShareData->m_hwndRecordingKeyMacro = NULL;	/* キーボードマクロを記録中のウィンドウ */

		// 2004.05.13 Moca リソースから製品バージョンの取得
		GetAppVersionInfo( NULL, VS_VERSION_INFO,
			&m_pShareData->m_dwProductVersionMS, &m_pShareData->m_dwProductVersionLS );
		m_pShareData->m_hwndTray = NULL;
		m_pShareData->m_hAccel = NULL;
		m_pShareData->m_hwndDebug = NULL;
		m_pShareData->m_nSequences = 0;					/* ウィンドウ連番 */
		m_pShareData->m_nEditArrNum = 0;

		//From Here 2003.05.31 MIK
		//タブウインドウ情報
		m_pShareData->m_TabWndWndpl.length = 0;
		//To Here 2003.05.31 MIK

		m_pShareData->m_Common.m_nMRUArrNum_MAX = 15;	/* ファイルの履歴MAX */	//Oct. 14, 2000 JEPRO 少し増やした(10→15)
//@@@ 2001.12.26 YAZAKI MRUリストは、CMRUに依頼する
		CMRU cMRU;
		cMRU.ClearAll();
		m_pShareData->m_Common.m_nOPENFOLDERArrNum_MAX = 15;	/* フォルダの履歴MAX */	//Oct. 14, 2000 JEPRO 少し増やした(10→15)
//@@@ 2001.12.26 YAZAKI OPENFOLDERリストは、CMRUFolderにすべて依頼する
		CMRUFolder cMRUFolder;
		cMRUFolder.ClearAll();

		m_pShareData->m_nSEARCHKEYArrNum = 0;
		for( i = 0; i < MAX_SEARCHKEY; ++i ){
			strcpy( m_pShareData->m_szSEARCHKEYArr[i], "" );
			//m_pShareData->m_bSEARCHKEYArrFavorite[i] = false;	//お気に入り	//@@@ 2003.04.08 MIK
		}
		m_pShareData->m_nREPLACEKEYArrNum = 0;
		for( i = 0; i < MAX_REPLACEKEY; ++i ){
			strcpy( m_pShareData->m_szREPLACEKEYArr[i], "" );
			//m_pShareData->m_bREPLACEKEYArrFavorite[i] = false;	//お気に入り	//@@@ 2003.04.08 MIK
		}
		m_pShareData->m_nGREPFILEArrNum = 0;
		for( i = 0; i < MAX_GREPFILE; ++i ){
			strcpy( m_pShareData->m_szGREPFILEArr[i], "" );
			//m_pShareData->m_bGREPFILEArrFavorite[i] = false;	//お気に入り	//@@@ 2003.04.08 MIK
		}
		m_pShareData->m_nGREPFILEArrNum = 1;
		strcpy( m_pShareData->m_szGREPFILEArr[0], "*.*" );
		//m_pShareData->m_bSEARCHKEYArrFavorite[0] = true;	//お気に入り	//@@@ 2003.04.08 MIK

		m_pShareData->m_nGREPFOLDERArrNum = 0;
		for( i = 0; i < MAX_GREPFOLDER; ++i ){
			strcpy( m_pShareData->m_szGREPFOLDERArr[i], "" );
			//m_pShareData->m_bGREPFOLDERArrFavorite[i] = false;	//お気に入り	//@@@ 2003.04.08 MIK
		}
		strcpy( m_pShareData->m_szMACROFOLDER, szExeFolder );	/* マクロ用フォルダ */
		strcpy( m_pShareData->m_szIMPORTFOLDER, szExeFolder );	/* 設定インポート用フォルダ */

		for( i = 0; i < MAX_TRANSFORM_FILENAME; ++i ){
			strcpy( m_pShareData->m_szTransformFileNameFrom[i], "" );
			strcpy( m_pShareData->m_szTransformFileNameTo[i], "" );
		}
		strcpy( m_pShareData->m_szTransformFileNameFrom[0], "%DeskTop%\\" );
		strcpy( m_pShareData->m_szTransformFileNameTo[0], "デスクトップ\\" );
		strcpy( m_pShareData->m_szTransformFileNameFrom[1], "%Personal%\\" );
		strcpy( m_pShareData->m_szTransformFileNameTo[1], "マイドキュメント\\" );
		strcpy( m_pShareData->m_szTransformFileNameFrom[2], "%Cache%\\Content.IE5\\" );
		strcpy( m_pShareData->m_szTransformFileNameTo[2], "IEキャッシュ\\" );
		strcpy( m_pShareData->m_szTransformFileNameFrom[3], "%TEMP%\\" );
		strcpy( m_pShareData->m_szTransformFileNameTo[3],   "TEMP\\" );
		strcpy( m_pShareData->m_szTransformFileNameFrom[4], "%Common DeskTop%\\" );
		strcpy( m_pShareData->m_szTransformFileNameTo[4],   "共有デスクトップ\\" );
		strcpy( m_pShareData->m_szTransformFileNameFrom[5], "%Common Documents%\\" );
		strcpy( m_pShareData->m_szTransformFileNameTo[5], "共有ドキュメント\\" );
		m_pShareData->m_nTransformFileNameArrNum = 6;
		
		/* m_PrintSettingArr[0]を設定して、残りの1~7にコピーする。
			必要になるまで遅らせるために、CPrintに、CShareDataを操作する権限を与える。
			YAZAKI.
		*/
		CPrint::Initialize();	//	初期化命令。

		//	Jan. 30, 2005 genta 関数として独立
		InitKeyAssign( m_pShareData );

//	From Here Sept. 19, 2000 JEPRO コメントアウトになっていた初めのブロックを復活しその下をコメントアウト
//	MS ゴシック標準スタイル10ptに設定
//		/* LOGFONTの初期化 */
		memset( &m_pShareData->m_Common.m_lf, 0, sizeof( LOGFONT ) );
		m_pShareData->m_Common.m_lf.lfHeight			= -13;
		m_pShareData->m_Common.m_lf.lfWidth				= 0;
		m_pShareData->m_Common.m_lf.lfEscapement		= 0;
		m_pShareData->m_Common.m_lf.lfOrientation		= 0;
		m_pShareData->m_Common.m_lf.lfWeight			= 400;
		m_pShareData->m_Common.m_lf.lfItalic			= 0x0;
		m_pShareData->m_Common.m_lf.lfUnderline			= 0x0;
		m_pShareData->m_Common.m_lf.lfStrikeOut			= 0x0;
		//m_pShareData->m_Common.m_lf.lfCharSet			= 0x80;
		m_pShareData->m_Common.m_lf.lfCharSet			= GB2312_CHARSET;
		m_pShareData->m_Common.m_lf.lfOutPrecision		= 0x3;
		m_pShareData->m_Common.m_lf.lfClipPrecision		= 0x2;
		m_pShareData->m_Common.m_lf.lfQuality			= 0x1;
		m_pShareData->m_Common.m_lf.lfPitchAndFamily	= 0x31;
		//strcpy( m_pShareData->m_Common.m_lf.lfFaceName, "MS ゴシック" );
    strcpy( m_pShareData->m_Common.m_lf.lfFaceName, "Fixedsys" );

		// キーワードヘルプのフォント ai 02/05/21 Add S
		::SystemParametersInfo(
			SPI_GETICONTITLELOGFONT,				// system parameter to query or set
			sizeof(LOGFONT),						// depends on action to be taken
			(PVOID)&m_pShareData->m_Common.m_lf_kh,	// depends on action to be taken
			NULL									// user profile update flag
		);
		// ai 02/05/21 Add E

//	To Here Sept. 19,2000

		m_pShareData->m_Common.m_bFontIs_FIXED_PITCH = TRUE;				/* 現在のフォントは固定幅フォントである */



		/* バックアップ */
		m_pShareData->m_Common.m_bBackUp = FALSE;				/* バックアップの作成 */
		m_pShareData->m_Common.m_bBackUpDialog = TRUE;			/* バックアップの作成前に確認 */

⌨️ 快捷键说明

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