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

📄 csharedata.cpp

📁 日本的开源编辑器源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	int		nRowNum;	//編集ウインドウ数
	int		nCount;		//実際の追加数
	int		nInsert;	//挿入ポイント
	int		i, j, k;
	int		*pnIndex;

	//編集ウインドウ数を取得する。
	nRowNum = GetEditorWindowsNum();
	if( nRowNum <= 0 )
	{
		*ppEditNode = NULL;
		return 0;
	}

	//編集ウインドウリスト格納領域を作成する。
	*ppEditNode = new EditNode[ nRowNum ];
	if( NULL == *ppEditNode ) return 0;
	pnIndex = new int[ nRowNum ];
	if( NULL == pnIndex )
	{
		delete [] *ppEditNode;
		*ppEditNode = NULL;
		return 0;
	}

	nCount = 0;
	for( i = 0; i < m_pShareData->m_nEditArrNum; i++ )
	{
		//編集ウインドウか?
		if( IsEditWnd( m_pShareData->m_pEditArr[ i ].m_hWnd ) )
		{
			nInsert = nCount;
			if( bSort )
			{
				//挿入ポイントを探す。
				for( j = 0; j < nCount; j++ )
				{
					if( (*ppEditNode)[ j ].m_nIndex > m_pShareData->m_pEditArr[ i ].m_nIndex )
					{
						nInsert = j;
						break;
					}
				}
				
				//後ろにずらす。
				for( k = nCount; k > j; k-- )
				{
					(*ppEditNode)[ k ] = (*ppEditNode)[ k - 1 ];
					pnIndex[ k ] = pnIndex[ k - 1 ];
				}
			}

			//情報をコピーする。
			(*ppEditNode)[ nInsert ] = m_pShareData->m_pEditArr[ i ];
			pnIndex[ nInsert ] = i;

			nCount++;
		}

		if( nCount >= nRowNum ) break;	//ガード
	}

	//インデックスを付ける。
	//このインデックスは m_pEditArr の配列番号です。
	for( i = 0; i < nRowNum; i++ )
	{
		(*ppEditNode)[ i ].m_nIndex = pnIndex[ i ];
	}

	delete [] pnIndex;

	return nRowNum;
}


/*!
	アウトプットウインドウに出力

	アウトプットウインドウが無ければオープンする
	@param lpFmt [in] 書式指定文字列
*/
void CShareData::TraceOut( LPCTSTR lpFmt, ... )
{

	if( NULL == m_pShareData->m_hwndDebug
	|| !IsEditWnd( m_pShareData->m_hwndDebug )
	){
		CEditApp::OpenNewEditor( NULL, NULL, "-DEBUGMODE", CODE_SJIS, FALSE, true );
		//	2001/06/23 N.Nakatani 窓が出るまでウエイトをかけるように修正
		//アウトプットウインドウが出来るまで5秒ぐらい待つ。
		//	Jun. 25, 2001 genta OpenNewEditorの同期機能を利用するように変更

		/* 開いているウィンドウをアクティブにする */
		/* アクティブにする */
		ActivateFrameWindow( m_pShareData->m_hwndDebug );
	}
	va_list argList;
	va_start( argList, lpFmt );
	wvsprintf( m_pShareData->m_szWork, lpFmt, argList );
	va_end( argList );
	::SendMessage( m_pShareData->m_hwndDebug, MYWM_ADDSTRING, 0, 0 );
	return;
}

/*
	CShareData::CheckMRUandOPENFOLDERList
	MRUとOPENFOLDERリストの存在チェックなど
	存在しないファイルやフォルダはMRUやOPENFOLDERリストから削除する

	@note 現在は使われていないようだ。
	@par History
	2001.12.26 削除した。(YAZAKI)
	
*/
/*!	idxで指定したマクロファイル名(フルパス)を取得する.

	@param pszPath [in]	パス名の出力先.長さのみを知りたいときはNULLを入れる.
	@param idx [in]		マクロ番号
	@param nBufLen [in]	pszPathで指定されたバッファのバッファサイズ

	@retval >0 : パス名の長さ.
	@retval  0 : エラー,そのマクロは使えない,ファイル名が指定されていない.
	@retval <0 : バッファ不足.必要なバッファサイズは -(戻り値)+1

	@author YAZAKI
	@date 2003.06.08 Moca ローカル変数へのポインタを返さないように仕様変更
	@date 2003.06.14 genta 文字列長,ポインタのチェックを追加
	@date 2003.06.24 Moca idxが-1のとき、キーマクロのフルパスを返す.
	
	@note idxは正確なものでなければならない。(内部で正当性チェックを行っていない)
*/
int CShareData::GetMacroFilename( int idx, char *pszPath, int nBufLen )
{
	if( -1 != idx && !m_pShareData->m_MacroTable[idx].IsEnabled() )
		return 0;
//	char fbuf[_MAX_PATH * 2];
	char *ptr;
	char *pszFile;

	if( -1 == idx ){
		pszFile = "RecKey.mac";
	}else{
		pszFile = m_pShareData->m_MacroTable[idx].m_szFile;
	}
	if( pszFile[0] == '\0' ){	//	ファイル名が無い
		if( pszPath != NULL ){
			pszPath[0] = '\0';
		}
		return 0;
	}
	ptr = pszFile;
	int nLen = strlen( ptr ); // Jul. 21, 2003 genta strlen対象が誤っていたためマクロ実行ができない

	if( !_IS_REL_PATH( pszFile )	// 絶対パス
		|| m_pShareData->m_szMACROFOLDER[0] == '\0' ){	//	フォルダ指定なし
		if( pszPath == NULL || nBufLen <= nLen ){
			return -nLen;
		}
		strcpy( pszPath, pszFile );
		return nLen;
	}
	else {	//	フォルダ指定あり
		//	相対パス→絶対パス
		int nFlen = strlen( m_pShareData->m_szMACROFOLDER );
		int nFolderSep = AddLastChar( m_pShareData->m_szMACROFOLDER, sizeof(m_pShareData->m_szMACROFOLDER), '\\' );
		int nAllLen = nLen + nFlen + ( 0 == nFolderSep ? 0 : 1 );

		 // 2003.06.24 Moca フォルダも相対パスなら実行ファイルからのパス
		if( _IS_REL_PATH( m_pShareData->m_szMACROFOLDER ) ){
			char szExeDir[_MAX_PATH];
			int nExeLen;
			GetExecutableDir( szExeDir, NULL );
			nExeLen = strlen( szExeDir );
			nAllLen += nExeLen + 1;
			if( pszPath == NULL || nBufLen <= nAllLen ){
				return -nAllLen;
			}
			strcpy( pszPath, szExeDir );
			ptr = pszPath + nExeLen;
			*ptr++ = '\\';
		}else{
			ptr = pszPath;
		}

		if( pszPath == NULL || nBufLen <= nAllLen ){
			return -nAllLen;
		}

		strcpy( ptr, m_pShareData->m_szMACROFOLDER );
		ptr += nFlen;
		if( -1 == nFolderSep ){
			*ptr++ = '\\';
		}
		strcpy( ptr, pszFile );
		return nAllLen;
	}

}

/*!	idxで指定したマクロのm_bReloadWhenExecuteを取得する。
	idxは正確なものでなければならない。
	YAZAKI
*/
bool CShareData::BeReloadWhenExecuteMacro( int idx )
{
	if( !m_pShareData->m_MacroTable[idx].IsEnabled() )
		return false;

	return ( m_pShareData->m_MacroTable[idx].m_bReloadWhenExecute == TRUE );
}

/*!	m_szSEARCHKEYArrにpszSearchKeyを追加する。
	YAZAKI
*/
void CShareData::AddToSearchKeyArr( const char* pszSearchKey )
{
/*
	CMemory	pcmWork( pszSearchKey, lstrlen( pszSearchKey ) );
	int		i;
	int		j;
	for( i = 0; i < m_pShareData->m_nSEARCHKEYArrNum; ++i ){
		if( 0 == strcmp( pszSearchKey, m_pShareData->m_szSEARCHKEYArr[i] ) ){
			break;
		}
	}
	if( i < m_pShareData->m_nSEARCHKEYArrNum ){
		for( j = i; j > 0; j-- ){
			strcpy( m_pShareData->m_szSEARCHKEYArr[j], m_pShareData->m_szSEARCHKEYArr[j - 1] );
		}
	}else{
		for( j = MAX_SEARCHKEY - 1; j > 0; j-- ){
			strcpy( m_pShareData->m_szSEARCHKEYArr[j], m_pShareData->m_szSEARCHKEYArr[j - 1] );
		}
		++m_pShareData->m_nSEARCHKEYArrNum;
		if( m_pShareData->m_nSEARCHKEYArrNum > MAX_SEARCHKEY ){
			m_pShareData->m_nSEARCHKEYArrNum = MAX_SEARCHKEY;
		}
	}
	strcpy( m_pShareData->m_szSEARCHKEYArr[0], pcmWork.GetPtr() );
*/
	CRecent	cRecentSearchKey;

	cRecentSearchKey.EasyCreate( RECENT_FOR_SEARCH );
	cRecentSearchKey.AppendItem( pszSearchKey );
	cRecentSearchKey.Terminate();

	return;
}

/*!	m_szREPLACEKEYArrにpszReplaceKeyを追加する
	YAZAKI
*/
void CShareData::AddToReplaceKeyArr( const char* pszReplaceKey )
{
/*
	CMemory pcmWork( pszReplaceKey, lstrlen( pszReplaceKey ) );
	int		i;
	int		j;
	for( i = 0; i < m_pShareData->m_nREPLACEKEYArrNum; ++i ){
		if( 0 == strcmp( pszReplaceKey, m_pShareData->m_szREPLACEKEYArr[i] ) ){
			break;
		}
	}
	if( i < m_pShareData->m_nREPLACEKEYArrNum ){
		for( j = i; j > 0; j-- ){
			strcpy( m_pShareData->m_szREPLACEKEYArr[j], m_pShareData->m_szREPLACEKEYArr[j - 1] );
		}
	}else{
		for( j = MAX_REPLACEKEY - 1; j > 0; j-- ){
			strcpy( m_pShareData->m_szREPLACEKEYArr[j], m_pShareData->m_szREPLACEKEYArr[j - 1] );
		}
		++m_pShareData->m_nREPLACEKEYArrNum;
		if( m_pShareData->m_nREPLACEKEYArrNum > MAX_REPLACEKEY ){
			m_pShareData->m_nREPLACEKEYArrNum = MAX_REPLACEKEY;
		}
	}
	strcpy( m_pShareData->m_szREPLACEKEYArr[0], pcmWork.GetPtr() );
*/
	CRecent	cRecentReplaceKey;

	cRecentReplaceKey.EasyCreate( RECENT_FOR_REPLACE );
	cRecentReplaceKey.AppendItem( pszReplaceKey );
	cRecentReplaceKey.Terminate();

	return;
}

/*!	m_szGREPFILEArrにpszGrepFileを追加する
	YAZAKI
*/
void CShareData::AddToGrepFileArr( const char* pszGrepFile )
{
/*
	CMemory pcmWork( pszGrepFile, lstrlen( pszGrepFile ) );
	int		i;
	int		j;
	for( i = 0; i < m_pShareData->m_nGREPFILEArrNum; ++i ){
		if( 0 == strcmp( pszGrepFile, m_pShareData->m_szGREPFILEArr[i] ) ){
			break;
		}
	}
	if( i < m_pShareData->m_nGREPFILEArrNum ){
		for( j = i; j > 0; j-- ){
			strcpy( m_pShareData->m_szGREPFILEArr[j], m_pShareData->m_szGREPFILEArr[j - 1] );
		}
	}else{
		for( j = MAX_GREPFILE - 1; j > 0; j-- ){
			strcpy( m_pShareData->m_szGREPFILEArr[j], m_pShareData->m_szGREPFILEArr[j - 1] );
		}
		++m_pShareData->m_nGREPFILEArrNum;
		if( m_pShareData->m_nGREPFILEArrNum > MAX_GREPFILE ){
			m_pShareData->m_nGREPFILEArrNum = MAX_GREPFILE;
		}
	}
	strcpy( m_pShareData->m_szGREPFILEArr[0], pcmWork.GetPtr() );
*/
	CRecent	cRecentGrepFile;

	cRecentGrepFile.EasyCreate( RECENT_FOR_GREP_FILE );
	cRecentGrepFile.AppendItem( pszGrepFile );
	cRecentGrepFile.Terminate();

	return;
}

/*!	m_nGREPFOLDERArrNumにpszGrepFolderを追加する
	YAZAKI
*/
void CShareData::AddToGrepFolderArr( const char* pszGrepFolder )
{
/*
	CMemory pcmWork( pszGrepFolder, lstrlen( pszGrepFolder ) );
	int		i;
	int		j;
	for( i = 0; i < m_pShareData->m_nGREPFOLDERArrNum; ++i ){
		if( 0 == strcmp( pszGrepFolder, m_pShareData->m_szGREPFOLDERArr[i] ) ){
			break;
		}
	}
	if( i < m_pShareData->m_nGREPFOLDERArrNum ){
		for( j = i; j > 0; j-- ){
			strcpy( m_pShareData->m_szGREPFOLDERArr[j], m_pShareData->m_szGREPFOLDERArr[j - 1] );
		}
	}else{
		for( j = MAX_GREPFOLDER - 1; j > 0; j-- ){
			strcpy( m_pShareData->m_szGREPFOLDERArr[j], m_pShareData->m_szGREPFOLDERArr[j - 1] );
		}
		++m_pShareData->m_nGREPFOLDERArrNum;
		if( m_pShareData->m_nGREPFOLDERArrNum > MAX_GREPFOLDER ){
			m_pShareData->m_nGREPFOLDERArrNum = MAX_GREPFOLDER;
		}
	}
	strcpy( m_pShareData->m_szGREPFOLDERArr[0], pcmWork.GetPtr() );
*/
	CRecent	cRecentGrepFolder;

	cRecentGrepFolder.EasyCreate( RECENT_FOR_GREP_FOLDER );
	cRecentGrepFolder.AppendItem( pszGrepFolder );
	cRecentGrepFolder.Terminate();

	return;
}

/*!	外部Winヘルプが設定されているか確認。
*/
bool CShareData::ExtWinHelpIsSet( int nTypeNo )
{
	if (m_pShareData->m_Common.m_szExtHelp[0] != '\0'){
		return true;	//	共通設定に設定されている
	}
	if (nTypeNo < 0 || MAX_TYPES <= nTypeNo ){
		return false;	//	共通設定に設定されていない&nTypeNoが範囲外。
	}
	if (m_pShareData->m_Types[nTypeNo].m_szExtHelp[0] != '\0'){
		return true;	//	タイプ別設定に設定されている。

⌨️ 快捷键说明

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