📄 ceditdoc.cpp
字号:
m_hWnd,
MB_OK | MB_ICONEXCLAMATION | MB_TOPMOST,
GSTR_APPNAME,
"%s\nは現在他のプロセスによって書込みが禁止されています。",
IsFilePathAvailable() ? GetFilePath() : "(未命名)"
);
m_hLockedFile = NULL;
/* 親ウィンドウのタイトルを更新 */
SetParentCaption();
return;
}
m_hLockedFile = ::_lopen( GetFilePath(), nAccessMode | m_pShareData->m_Common.m_nFileShareMode );
if( HFILE_ERROR == m_hLockedFile ){
switch( m_pShareData->m_Common.m_nFileShareMode ){
case OF_SHARE_EXCLUSIVE: /* 読み書き */
pszMode = "読み書き禁止モード";
break;
case OF_SHARE_DENY_WRITE: /* 書き */
pszMode = "書き込み禁止モード";
break;
default:
pszMode = "未定義のモード(問題があります)";
break;
}
::MessageBeep( MB_ICONEXCLAMATION );
MYMESSAGEBOX(
m_hWnd,
MB_OK | MB_ICONEXCLAMATION | MB_TOPMOST,
GSTR_APPNAME,
"%s\nを%sでロックできませんでした。\n現在このファイルに対する排他制御は無効となります。",
IsFilePathAvailable() ? GetFilePath() : "(未命名)",
pszMode
);
/* 親ウィンドウのタイトルを更新 */
SetParentCaption();
return;
}
/* 排他制御しないけどロックされているかのチェックは行う場合 */
if( bCheckOnly ){
/* ロックを解除する */
DoFileUnLock();
}
return;
}
/* ファイルの排他ロック解除 */
void CEditDoc::DoFileUnLock( void )
{
if( NULL != m_hLockedFile ){
/* ロック解除 */
::_lclose( m_hLockedFile );
m_hLockedFile = NULL;
/* ファイルの排他制御モード */
m_nFileShareModeOld = 0;
}
return;
}
/*
C関数リスト作成はCEditDoc_FuncList1.cppへ移動
*/
/*! PL/SQL関数リスト作成 */
void CEditDoc::MakeFuncList_PLSQL( CFuncInfoArr* pcFuncInfoArr )
{
const char* pLine;
int nLineLen;
int nLineCount;
int i;
int nCharChars;
char szWordPrev[100];
char szWord[100];
int nWordIdx = 0;
int nMaxWordLeng = 70;
int nMode;
char szFuncName[80];
int nFuncLine;
int nFuncId;
int nFuncNum;
int nFuncOrProc = 0;
int nParseCnt = 0;
szWordPrev[0] = '\0';
szWord[nWordIdx] = '\0';
nMode = 0;
nFuncNum = 0;
for( nLineCount = 0; nLineCount < m_cDocLineMgr.GetLineCount(); ++nLineCount ){
pLine = m_cDocLineMgr.GetLineStr( nLineCount, &nLineLen );
for( i = 0; i < nLineLen; ++i ){
/* 1バイト文字だけを処理する */
nCharChars = CMemory::MemCharNext( pLine, nLineLen, &pLine[i] ) - &pLine[i];
if( 0 == nCharChars ){
nCharChars = 1;
}
// if( 1 < nCharChars ){
// i += (nCharChars - 1);
// continue;
// }
/* シングルクォーテーション文字列読み込み中 */
if( 20 == nMode ){
if( '\'' == pLine[i] ){
if( i + 1 < nLineLen && '\'' == pLine[i + 1] ){
++i;
}else{
nMode = 0;
continue;
}
}else{
}
}else
/* コメント読み込み中 */
if( 8 == nMode ){
if( i + 1 < nLineLen && '*' == pLine[i] && '/' == pLine[i + 1] ){
++i;
nMode = 0;
continue;
}else{
}
}else
/* 単語読み込み中 */
if( 1 == nMode ){
if( (1 == nCharChars && (
'_' == pLine[i] ||
'~' == pLine[i] ||
('a' <= pLine[i] && pLine[i] <= 'z' )||
('A' <= pLine[i] && pLine[i] <= 'Z' )||
('0' <= pLine[i] && pLine[i] <= '9' )
) )
|| 2 == nCharChars
){
// ++nWordIdx;
if( nWordIdx >= nMaxWordLeng ){
nMode = 999;
continue;
}else{
// szWord[nWordIdx] = pLine[i];
// szWord[nWordIdx + 1] = '\0';
memcpy( &szWord[nWordIdx], &pLine[i], nCharChars );
szWord[nWordIdx + nCharChars] = '\0';
nWordIdx += (nCharChars);
}
}else{
if( 0 == nParseCnt && 0 == _stricmp( szWord, "FUNCTION" ) ){
nFuncOrProc = 1;
nParseCnt = 1;
nFuncLine = nLineCount + 1;
}else
if( 0 == nParseCnt && 0 == _stricmp( szWord, "PROCEDURE" ) ){
nFuncOrProc = 2;
nParseCnt = 1;
nFuncLine = nLineCount + 1;
}else
if( 0 == nParseCnt && 0 == _stricmp( szWord, "PACKAGE" ) ){
nFuncOrProc = 3;
nParseCnt = 1;
nFuncLine = nLineCount + 1;
}else
if( 1 == nParseCnt && 3 == nFuncOrProc && 0 == _stricmp( szWord, "BODY" ) ){
nFuncOrProc = 4;
nParseCnt = 1;
}else
if( 1 == nParseCnt ){
if( 1 == nFuncOrProc ||
2 == nFuncOrProc ||
3 == nFuncOrProc ||
4 == nFuncOrProc ){
++nParseCnt;
strcpy( szFuncName, szWord );
}else
if( 3 == nFuncOrProc ){
}
}else
if( 2 == nParseCnt ){
if( 0 == _stricmp( szWord, "IS" ) ){
if( 1 == nFuncOrProc ){
nFuncId = 11; /* ファンクション本体 */
}else
if( 2 == nFuncOrProc ){
nFuncId = 21; /* プロシージャ本体 */
}else
if( 3 == nFuncOrProc ){
nFuncId = 31; /* パッケージ仕様部 */
}else
if( 4 == nFuncOrProc ){
nFuncId = 41; /* パッケージ本体 */
}
++nFuncNum;
/*
カーソル位置変換
物理位置(行頭からのバイト数、折り返し無し行位置)
→
レイアウト位置(行頭からの表示桁位置、折り返しあり行位置)
*/
int nPosX;
int nPosY;
m_cLayoutMgr.CaretPos_Phys2Log(
0,
nFuncLine - 1,
&nPosX,
&nPosY
);
pcFuncInfoArr->AppendData( nFuncLine, nPosY + 1, szFuncName, nFuncId );
nParseCnt = 0;
}
if( 0 == _stricmp( szWord, "AS" ) ){
if( 3 == nFuncOrProc ){
nFuncId = 31; /* パッケージ仕様部 */
++nFuncNum;
/*
カーソル位置変換
物理位置(行頭からのバイト数、折り返し無し行位置)
→
レイアウト位置(行頭からの表示桁位置、折り返しあり行位置)
*/
int nPosX;
int nPosY;
m_cLayoutMgr.CaretPos_Phys2Log(
0,
nFuncLine - 1,
&nPosX,
&nPosY
);
pcFuncInfoArr->AppendData( nFuncLine, nPosY + 1 , szFuncName, nFuncId );
nParseCnt = 0;
}else
if( 4 == nFuncOrProc ){
nFuncId = 41; /* パッケージ本体 */
++nFuncNum;
/*
カーソル位置変換
物理位置(行頭からのバイト数、折り返し無し行位置)
→
レイアウト位置(行頭からの表示桁位置、折り返しあり行位置)
*/
int nPosX;
int nPosY;
m_cLayoutMgr.CaretPos_Phys2Log(
0,
nFuncLine - 1,
&nPosX,
&nPosY
);
pcFuncInfoArr->AppendData( nFuncLine, nPosY + 1 , szFuncName, nFuncId );
nParseCnt = 0;
}
}
}
strcpy( szWordPrev, szWord );
nWordIdx = 0;
szWord[0] = '\0';
nMode = 0;
i--;
continue;
}
}else
/* 記号列読み込み中 */
if( 2 == nMode ){
if( '_' == pLine[i] ||
'~' == pLine[i] ||
('a' <= pLine[i] && pLine[i] <= 'z' )||
('A' <= pLine[i] && pLine[i] <= 'Z' )||
('0' <= pLine[i] && pLine[i] <= '9' )||
'\t' == pLine[i] ||
' ' == pLine[i] ||
CR == pLine[i] ||
LF == pLine[i] ||
'{' == pLine[i] ||
'}' == pLine[i] ||
'(' == pLine[i] ||
')' == pLine[i] ||
';' == pLine[i] ||
'\'' == pLine[i] ||
'/' == pLine[i] ||
'-' == pLine[i]
){
strcpy( szWordPrev, szWord );
nWordIdx = 0;
szWord[0] = '\0';
nMode = 0;
i--;
continue;
}else{
// ++nWordIdx;
if( nWordIdx >= nMaxWordLeng ){
nMode = 999;
continue;
}else{
// szWord[nWordIdx] = pLine[i];
// szWord[nWordIdx + 1] = '\0';
memcpy( &szWord[nWordIdx], &pLine[i], nCharChars );
szWord[nWordIdx + nCharChars] = '\0';
nWordIdx += (nCharChars);
}
}
}else
/* 長過ぎる単語無視中 */
if( 999 == nMode ){
/* 空白やタブ記号等を飛ばす */
if( '\t' == pLine[i] ||
' ' == pLine[i] ||
CR == pLine[i] ||
LF == pLine[i]
){
nMode = 0;
continue;
}
}else
/* ノーマルモード */
if( 0 == nMode ){
/* 空白やタブ記号等を飛ばす */
if( '\t' == pLine[i] ||
' ' == pLine[i] ||
CR == pLine[i] ||
LF == pLine[i]
){
continue;
}else
if( i < nLineLen - 1 && '-' == pLine[i] && '-' == pLine[i + 1] ){
break;
}else
if( i < nLineLen - 1 && '/' == pLine[i] && '*' == pLine[i + 1] ){
++i;
nMode = 8;
continue;
}else
if( '\'' == pLine[i] ){
nMode = 20;
continue;
}else
if( ';' == pLine[i] ){
if( 2 == nParseCnt ){
if( 1 == nFuncOrProc ){
nFuncId = 10; /* ファンクション宣言 */
}else{
nFuncId = 20; /* プロシージャ宣言 */
}
++nFuncNum;
/*
カーソル位置変換
物理位置(行頭からのバイト数、折り返し無し行位置)
→
レイアウト位置(行頭からの表示桁位置、折り返しあり行位置)
*/
int nPosX;
int nPosY;
m_cLayoutMgr.CaretPos_Phys2Log(
0,
nFuncLine - 1,
&nPosX,
&nPosY
);
pcFuncInfoArr->AppendData( nFuncLine, nPosY + 1 , szFuncName, nFuncId );
nParseCnt = 0;
}
nMode = 0;
continue;
}else{
if( (1 == nCharChars && (
'_' == pLine[i] ||
'~' == pLine[i] ||
('a' <= pLine[i] && pLine[i] <= 'z' )||
('A' <= pLine[i] && pLine[i] <= 'Z' )||
('0' <= pLine[i] && pLine[i] <= '9' )
) )
|| 2 == nCharChars
){
strcpy( szWordPrev, szWord );
nWordIdx = 0;
// szWord[nWordIdx] = pLine[i];
// szWord[nWordIdx + 1] = '\0';
memcpy( &szWord[nWordIdx], &pLine[i], nCharChars );
szWord[nWordIdx + nCharChars] = '\0';
nWordIdx += (nCharChars);
nMode = 1;
}else{
strcpy( szWordPrev, szWord );
nWordIdx = 0;
// szWord[nWordIdx] = pLine[i];
// szWord[nWordIdx + 1] = '\0';
memcpy( &szWord[nWordIdx], &pLine[i], nCharChars );
szWord[nWordIdx + nCharChars] = '\0';
nWordIdx += (nCharChars);
nMode = 2;
}
}
}
i += (nCharChars - 1);
}
}
return;
}
/*! テキスト?トピックリスト作成
@date 2002.04.01 YAZAKI CDlgFuncList::SetText()を使用するように改訂。
@date 2002.11.03 Moca 階層が最大値を超
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -