📄 ectrans.c
字号:
if (hmemECLib == NULL)
return FALSE;
lpECLib = GlobalLock (hmemECLib);
if (lpECLib == NULL)
{
GlobalFree (hmemECLib);
return FALSE;
}
if (dwCnt < 27*2)
dwCnt = 27*2;
else if (!WseReadFileCache (hECCache, IndexPosTab[wLen-1],
(UINT)dwCnt, lpECLib))
{
GlobalUnlock (hmemECLib);
GlobalFree (hmemECLib);
return FALSE;
}
if (i == 0)
{
lpStr = lpECLib+27*2;
j = *(LPINT)lpECLib;
}
else
{
lpStr = lpECLib+27*2+((UINT far *)lpECLib)[i-1]*(wLen+3);
j = ((LPINT)lpECLib)[i] - ((LPINT)lpECLib)[i-1];
}
for (k = 2; j > 0 && lstrcmpi (lpEStr, lpStr+k) != NULL; j--, k += wLen+3);
if (j == 0) // Not Found, Add a New String.
{
WseRepMovsb (lpStr+wLen+3, lpStr, (int)dwCnt-(lpStr-lpECLib));
lstrcpy (lpStr+2, lpEStr);
for (j = i; j < 27; j++)
((LPINT)lpECLib)[j] ++;
*(LPINT)lpStr = 27*2+((UINT far *)lpECLib)[26]*(wLen+3);
WseRepMovsb (lpECLib+((LPINT)lpStr)[0]+lstrlen(lpCStr)+1,
lpECLib+((LPINT)lpStr)[0],
(int)dwCnt+wLen+3-((LPINT)lpStr)[0]);
lstrcpy (lpECLib+((LPINT)lpStr)[0], lpCStr);
*(LPINT)lpStr -= wCnt;
for (lpStr = lpECLib+27*2, j = 0;
(UINT)j < ((UINT far *)lpECLib)[26];
j++, lpStr += wLen+3)
*(LPINT)lpStr += wCnt;
}
else // Change the String
{
lpStr += k-2;
k = lstrlen(lpECLib+((LPINT)lpStr)[0]); // Old Chinese String Len
wCnt = lstrlen(lpCStr)-k;
k += ((LPINT)lpStr)[0]+1;
WseRepMovsb (lpECLib+((LPINT)lpStr)[0]+lstrlen (lpCStr)+1,
lpECLib+k,
(int)dwCnt-k);
lstrcpy (lpECLib+((LPINT)lpStr)[0], lpCStr);
k = ((LPINT)lpStr)[0];
for (lpStr = lpECLib+27*2, j = 0;
(UINT)j < ((UINT far *)lpECLib)[26];
j++, lpStr += wLen+3)
if (((LPINT)lpStr)[0] > k)
*(LPINT)lpStr += wCnt;
}
dwCnt += wCnt;
WseReleaseFileCache (hECCache);
hECCache = 0;
{
NPSTR szFile;
szFile = (NPSTR)LocalAlloc (LPTR, 64);
WseGetModuleFilePath (NULL, szFile, 63);
lstrcat (szFile, szECWINMLR);
hFile = _lopen (szFile, OF_READWRITE);
LocalFree ((HANDLE)szFile);
}
if (hFile != HFILE_ERROR)
{
_llseek (hFile, 64, SEEK_SET);
_lread (hFile, (LPSTR)IndexPosTab, sizeof(IndexPosTab));
if (wCnt <= 0)
{
_llseek (hFile, IndexPosTab[wLen-1], SEEK_SET);
if (dwCnt)
_lwrite (hFile, lpECLib, (int)dwCnt);
}
else
{
long dwSize = IndexPosTab[255]-IndexPosTab[wLen];
HGLOBAL hmDat = GlobalAlloc (GPTR, dwSize+16);
char huge *lpDat = GlobalLock (hmDat);
char huge *lpTmp = lpDat;
if (dwSize)
{
_llseek (hFile, IndexPosTab[wLen], SEEK_SET);
while (lpTmp < lpDat+dwSize)
lpTmp += _lread (hFile, lpTmp, (UINT)min(lpDat-lpTmp+dwSize, 0x0e000));
_llseek (hFile, IndexPosTab[wLen]+wCnt, SEEK_SET);
lpTmp = lpDat;
while (lpTmp < lpDat+dwSize)
lpTmp += _lwrite (hFile, lpTmp, (UINT)min(lpDat-lpTmp+dwSize, 0x0e000));
}
GlobalUnlock (hmDat);
GlobalFree (hmDat);
for (j = wLen; j < 256; j++)
IndexPosTab[j] += wCnt;
if (dwCnt)
{
_llseek (hFile, IndexPosTab[wLen-1], SEEK_SET);
_lwrite (hFile, lpECLib, (int)dwCnt);
}
if (wCnt)
{
_llseek (hFile, 0x40, SEEK_SET);
_lwrite (hFile, (LPSTR)IndexPosTab, sizeof(IndexPosTab));
}
}
_lclose (hFile);
i = TRUE;
}
else
i = FALSE;
GlobalUnlock (hmemECLib);
GlobalFree (hmemECLib);
WseResetECDict (NULL, NULL);
return i;
}
BOOL ECDctDeleteString (LPSTR lpEStr)
{
long dwCnt;
HGLOBAL hmemECLib;
LPSTR lpECLib, lpStr;
int wCnt, i, j;
char ch;
HFILE hFile;
NPSTR szFile;
int wLen = lstrlen (lpEStr);
if (wLen < 1 || wLen > 255)
return FALSE;
dwCnt = IndexPosTab[wLen] - IndexPosTab[wLen-1];
if (dwCnt <= 0 || dwCnt >= 0x10000)
return FALSE;
hmemECLib = GlobalAlloc (GPTR, dwCnt+10);
if (hmemECLib == NULL)
return FALSE;
lpECLib = GlobalLock (hmemECLib);
if (lpECLib == NULL)
{
GlobalFree (hmemECLib);
return FALSE;
}
if (!WseReadFileCache (hECCache, IndexPosTab[wLen-1],
(UINT)dwCnt, lpECLib))
{
GlobalUnlock (hmemECLib);
GlobalFree (hmemECLib);
return FALSE;
}
ch = lpEStr[0] & ~0x20;
if (ch < 'A' || ch > 'Z')
{
ch = lpEStr[1] & ~0x20;
if (ch < 'A' || ch > 'Z')
ch = '@';
}
i = ch - '@';
if (i == 0)
{
lpStr = lpECLib+27*2;
wCnt = *(UINT far *)lpECLib;
}
else
{
lpStr = lpECLib+27*2+((UINT far *)lpECLib)[i-1]*(wLen+3);
wCnt = ((UINT far *)lpECLib)[i] - ((UINT far *)lpECLib)[i-1];
}
while (wCnt > 0 && lstrcmpi (lpStr+2, lpEStr) != NULL)
{
lpStr += wLen+3;
wCnt--;
}
if (wCnt <= 0) // NO This String.
{
GlobalUnlock (hmemECLib);
GlobalFree (hmemECLib);
return NULL;
}
wCnt = lstrlen(lpECLib+((LPINT)lpStr)[0]); // Chinese String Len
WseRepMovsb (lpECLib+((LPINT)lpStr)[0],
lpECLib+((LPINT)lpStr)[0]+wCnt+1,
(UINT)dwCnt-(((LPINT)lpStr)[0]+wCnt+1));
for (j = 0; j < ((LPINT)lpECLib)[26]; j++)
{
if (*(LPINT)(lpECLib+27*2+j*(wLen+3)) > ((LPINT)lpStr)[0])
*(LPINT)(lpECLib+27*2+j*(wLen+3)) -= wCnt+1;
}
for (j = i; j < 27; j++)
((LPINT)lpECLib)[j]--;
WseRepMovsb (lpStr, lpStr+wLen+3, (UINT)dwCnt-(lpStr+wLen+3-lpECLib));
for (j = 0; j < ((LPINT)lpECLib)[26]; j++)
*(LPINT)(lpECLib+27*2+j*(wLen+3)) -= wLen+3;
dwCnt -= wCnt+1+wLen+3;
WseReleaseFileCache (hECCache);
hECCache = 0;
szFile = (NPSTR)LocalAlloc (LPTR, 64);
WseGetModuleFilePath (NULL, szFile, 63);
lstrcat (szFile, szECWINMLR);
hFile = _lopen (szFile, OF_READWRITE);
LocalFree ((HANDLE)szFile);
if (hFile != HFILE_ERROR)
{
_llseek (hFile, 0x40, SEEK_SET);
_lread (hFile, (LPSTR)IndexPosTab, sizeof(IndexPosTab));
_llseek (hFile, IndexPosTab[wLen-1], SEEK_SET);
_lwrite (hFile, lpECLib, (int)dwCnt);
wCnt = (int)(IndexPosTab[wLen]-IndexPosTab[wLen-1]-dwCnt);
dwCnt = IndexPosTab[255]-IndexPosTab[wLen-1];
GlobalUnlock (hmemECLib);
GlobalFree (hmemECLib);
hmemECLib = GlobalAlloc (GPTR, dwCnt+16);
lpECLib = GlobalLock (hmemECLib);
if (hmemECLib && lpECLib && dwCnt)
{
long dwSize = dwCnt;
char huge *lpTmp = lpECLib;
_llseek (hFile, IndexPosTab[wLen], SEEK_SET);
while (dwSize > 0)
{
lpTmp += _lread (hFile, lpTmp, (UINT)min(dwSize, 0x0e000));
dwSize -= 0xe000;
}
_llseek (hFile, IndexPosTab[wLen]-wCnt, SEEK_SET);
lpTmp = lpECLib;
dwSize = dwCnt;
while (dwSize > 0)
{
lpTmp += _lwrite (hFile, lpTmp, (UINT)min(dwSize, 0x0e000));
dwSize -= 0xe000;
}
for (i = wLen; i < 255; i++)
IndexPosTab[i] -= wCnt;
_llseek (hFile, 0x40, SEEK_SET);
_lwrite (hFile, (LPSTR)IndexPosTab, sizeof(IndexPosTab));
}
_lclose (hFile);
}
GlobalUnlock (hmemECLib);
GlobalFree (hmemECLib);
WseResetECDict (NULL, NULL);
return (hFile != HFILE_ERROR);
}
BOOL RebuildECEdit (HWND hDlg)
{
LPSTR lpBuff = GlobalLock (hMemECErr);
if (hMemECErr && lpBuff)
{
while (*lpBuff)
{
#ifndef ___Araaa
SendDlgItemMessage (hDlg, IDC_STRLIST,
LB_ADDSTRING, NULL,
(LPARAM)lpSSS);
#else
LPSTR lpStr;
for (lpStr = lpBuff+1;
*lpStr && (*lpStr != '=' || lpStr[-1] == '\\');
lpStr++);
if (*lpStr)
SendDlgItemMessage (hDlg, IDC_STRLIST,
LB_ADDSTRING, NULL,
(LPARAM)lpBuff);
else
{
HGLOBAL hmDat = GlobalAlloc (GPTR, 1024);
int wLen = lstrlen (lpBuff)+1;
lpStr = GlobalLock (hmDat);
lstrcat (lstrcpy (lpStr, lpBuff),"=");
FindNearestString (lpBuff, lpStr+wLen, 256);
if (*(lpStr+wLen) == '*' &&
lstrcmpi (lpStr+wLen+1, lpBuff) == NULL ||
lstrcmpi (lpStr+wLen, lpBuff) == NULL)
lpStr = lpBuff;
SendDlgItemMessage (hDlg, IDC_STRLIST,
LB_ADDSTRING, NULL,
(LPARAM)lpStr);
GlobalUnlock (hmDat);
GlobalFree (hmDat);
}
#endif
lpBuff += lstrlen (lpBuff)+1;
}
GlobalUnlock (hMemECErr);
return TRUE;
}
return FALSE;
}
BOOL CALLBACK ECDctSetModeProc (hDlg, message, wParam, lParam)
HWND hDlg;
unsigned message;
WPARAM wParam;
LPARAM lParam;
{
switch (message)
{
case WM_INITDIALOG:
{
RECT rect;
HWND hWnd;
if (hMemECErr == NULL)
hMemECErr = GlobalAlloc (GHND, ECERRBUFFSIZE+16);
hWndECDialog = hDlg;
SetClassLong (hDlg, GCL_HICON,
(LONG)LoadIcon (hInst, MAKEINTRESOURCE(IDD_MLREDIT)));
hWnd = GetDlgItem (hDlg, IDC_MIDLINE);
GetWindowRect (hWnd, &rect);
lParam = (LPARAM)rect.bottom;
ShowWindow (hWnd, SW_HIDE);
GetWindowRect (hDlg, &rect);
MoveWindow (hDlg, rect.left, rect.top,
rect.right-rect.left, (long)lParam-rect.top,
FALSE);
hWnd = (HWND)GetSystemMenu (hDlg, FALSE);
AppendMenu (hWnd, MF_SEPARATOR, NULL, NULL);
AppendMenu (hWnd, MF_BYCOMMAND | MF_STRING, IDC_ONTOP, szAlwaysOnTop);
SendMessage (hDlg, WM_SYSCOMMAND, IDC_ONTOP, NULL);
WseTranslateWindow (HTRANS_SYSTEM_DEFAULT, hDlg);
WseCenterWindow (hDlg);
}
break;
case WM_DESTROY:
DestroyIcon ((HICON)SetClassLong (hDlg, GCL_HICON, NULL));
hWndECDialog = NULL;
if (hMemECErr)
{
GlobalFree (hMemECErr);
hMemECErr = NULL;
}
break;
case WM_ACTIVATE:
if (wParam && HIWORD(lParam) == 0 && ECRecordLevel)
{
SendDlgItemMessage (hDlg, IDC_STRLIST,
LB_RESETCONTENT, NULL, NULL);
ECRecordLevel = 0;
RebuildECEdit (hDlg);
if (SendDlgItemMessage (hDlg, IDC_STRLIST, LB_GETCOUNT, NULL, NULL))
{
RECT rect;
HWND hWnd = GetDlgItem (hDlg, IDC_STRLIST);
GetWindowRect (hWnd, &rect);
wParam = rect.bottom+8;
GetWindowRect (hDlg, &rect);
ShowWindow (GetDlgItem (hDlg, IDC_MIDLINE), SW_NORMAL);
MoveWindow (hDlg, rect.left, rect.top,
rect.right-rect.left, wParam-rect.top,
TRUE);
WseCenterWindow (hDlg);
}
}
break;
case WM_SYSCOMMAND:
if (wParam == IDC_ONTOP)
{
HMENU hMenu = GetSystemMenu (hDlg, NULL);
if (GetMenuState (hMenu, IDC_ONTOP, MF_BYCOMMAND) & MF_CHECKED)
{
SetWindowPos (hDlg, HWND_NOTOPMOST,
0, 0, 0, 0,
SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE);
CheckMenuItem (hMenu, IDC_ONTOP, MF_UNCHECKED | MF_BYCOMMAND);
}
else
{
SetWindowPos (hDlg, HWND_TOPMOST,
0, 0, 0, 0,
SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE);
CheckMenuItem (hMenu, IDC_ONTOP, MF_CHECKED | MF_BYCOMMAND);
}
}
else
return FALSE;
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -