ui.cpp (353edbd3) | ui.cpp (69b08be0) |
---|---|
1/* 2 * PROJECT: ReactOS msctfime.ime 3 * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) 4 * PURPOSE: User Interface of msctfime.ime 5 * COPYRIGHT: Copyright 2024 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com> 6 */ 7 8#include "msctfime.h" --- 770 unchanged lines hidden (view full) --- 779LRESULT CALLBACK 780UIComposition::CompWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 781{ 782 if (uMsg == WM_CREATE) 783 return -1; // FIXME 784 return 0; 785} 786 | 1/* 2 * PROJECT: ReactOS msctfime.ime 3 * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) 4 * PURPOSE: User Interface of msctfime.ime 5 * COPYRIGHT: Copyright 2024 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com> 6 */ 7 8#include "msctfime.h" --- 770 unchanged lines hidden (view full) --- 779LRESULT CALLBACK 780UIComposition::CompWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 781{ 782 if (uMsg == WM_CREATE) 783 return -1; // FIXME 784 return 0; 785} 786 |
787/// @implemented 788HRESULT UIComposition::OnImeNotifySetCompositionWindow(CicIMCLock& imcLock) 789{ 790 return UpdateCompositionRect(imcLock); 791} 792 793/// @unimplemented 794HRESULT UIComposition::UpdateCompositionRect(CicIMCLock& imcLock) 795{ 796 return E_NOTIMPL; 797} 798 799/// @implemented 800INT UIComposition::GetLevelFromIMC(CicIMCLock& imcLock) 801{ 802 DWORD dwStyle = imcLock.get().cfCompForm.dwStyle; 803 if (dwStyle == CFS_DEFAULT) 804 return 1; 805 if (!(dwStyle & (CFS_FORCE_POSITION | CFS_POINT | CFS_RECT))) 806 return 0; 807 808 RECT rc; 809 ::GetClientRect(imcLock.get().hWnd, &rc); 810 if (!::PtInRect(&rc, imcLock.get().cfCompForm.ptCurrentPos)) 811 return 1; 812 813 INPUTCONTEXT *pIC = &imcLock.get(); 814 if ((pIC->cfCompForm.dwStyle & CFS_RECT) && 815 (pIC->cfCompForm.rcArea.top == pIC->cfCompForm.rcArea.bottom) && 816 (pIC->cfCompForm.rcArea.left == pIC->cfCompForm.rcArea.right)) 817 { 818 return 1; 819 } 820 821 return 2; 822} 823 824/// @implemented 825HRESULT UIComposition::OnImeSetContextAfter(CicIMCLock& imcLock) 826{ 827 if ((!m_pDefCompFrameWindow || !::IsWindow(*m_pDefCompFrameWindow)) && !::IsWindow(m_CompStrs[0].m_hWnd)) 828 { 829 m_dwUnknown56[0] &= ~0x8000; 830 return S_OK; 831 } 832 833 if (FAILED(imcLock.m_hr)) 834 return imcLock.m_hr; 835 836 INT Level = GetLevelFromIMC(imcLock); 837 if ((Level == 1 || Level == 2) && (m_dwUnknown56[0] & 0x80000000) && m_dwUnknown56[1]) 838 { 839 DWORD dwCompStrLen = 0; 840 UpdateShowCompWndFlag(imcLock, &dwCompStrLen); 841 842 if (Level == 1) 843 { 844 ::ShowWindow(*m_pDefCompFrameWindow, (m_bHasCompStr ? SW_SHOWNOACTIVATE : SW_HIDE)); 845 } 846 else if (Level == 2 && !m_bHasCompStr && dwCompStrLen) 847 { 848 for (INT iCompStr = 0; iCompStr < 3; ++iCompStr) 849 { 850 m_CompStrs[iCompStr].m_Caret.HideCaret(); 851 ::ShowWindow(m_CompStrs[iCompStr].m_Caret, SW_HIDE); 852 } 853 } 854 } 855 else 856 { 857 ::ShowWindow(*m_pDefCompFrameWindow, SW_HIDE); 858 859 for (INT iCompStr = 0; iCompStr < 3; ++iCompStr) 860 { 861 m_CompStrs[iCompStr].m_Caret.HideCaret(); 862 ::ShowWindow(m_CompStrs[iCompStr].m_Caret, SW_HIDE); 863 } 864 } 865 866 return S_OK; 867} 868 |
|
787/***********************************************************************/ 788 789// For GetWindowLongPtr/SetWindowLongPtr 790#define UI_GWLP_HIMC 0 791#define UI_GWLP_UI sizeof(HIMC) 792#define UI_GWLP_SIZE (UI_GWLP_UI + sizeof(UI*)) 793 794/// @implemented --- 53 unchanged lines hidden (view full) --- 848 m_pComp->OnImeSetContext(imcLock, m_hWnd, wParam, lParam); 849} 850 851/***********************************************************************/ 852 853struct CIMEUIWindowHandler 854{ 855 static LRESULT CALLBACK ImeUIMsImeHandler(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); | 869/***********************************************************************/ 870 871// For GetWindowLongPtr/SetWindowLongPtr 872#define UI_GWLP_HIMC 0 873#define UI_GWLP_UI sizeof(HIMC) 874#define UI_GWLP_SIZE (UI_GWLP_UI + sizeof(UI*)) 875 876/// @implemented --- 53 unchanged lines hidden (view full) --- 930 m_pComp->OnImeSetContext(imcLock, m_hWnd, wParam, lParam); 931} 932 933/***********************************************************************/ 934 935struct CIMEUIWindowHandler 936{ 937 static LRESULT CALLBACK ImeUIMsImeHandler(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); |
856 static LRESULT CALLBACK ImeUIMsImeMouseHandler(HWND hWnd, WPARAM wParam, LPARAM lParam); | 938 static HRESULT CALLBACK ImeUIMsImeMouseHandler(HWND hWnd, WPARAM wParam, LPARAM lParam); |
857 static LRESULT CALLBACK ImeUIMsImeModeBiasHandler(HWND hWnd, WPARAM wParam, LPARAM lParam); 858 static LRESULT CALLBACK ImeUIMsImeReconvertRequest(HWND hWnd, WPARAM wParam, LPARAM lParam); 859 static LRESULT CALLBACK ImeUIWndProcWorker(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); | 939 static LRESULT CALLBACK ImeUIMsImeModeBiasHandler(HWND hWnd, WPARAM wParam, LPARAM lParam); 940 static LRESULT CALLBACK ImeUIMsImeReconvertRequest(HWND hWnd, WPARAM wParam, LPARAM lParam); 941 static LRESULT CALLBACK ImeUIWndProcWorker(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); |
942 static HRESULT CALLBACK ImeUIDelayedReconvertFuncCall(HWND hWnd); 943 static HRESULT CALLBACK ImeUIOnLayoutChange(LPARAM lParam); 944 static HRESULT CALLBACK ImeUIPrivateHandler(UINT uMsg, WPARAM wParam, LPARAM lParam); 945 static LRESULT CALLBACK ImeUINotifyHandler(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); |
|
860}; 861 | 946}; 947 |
862/// @unimplemented 863LRESULT CALLBACK | 948/// @implemented 949HRESULT CALLBACK |
864CIMEUIWindowHandler::ImeUIMsImeMouseHandler(HWND hWnd, WPARAM wParam, LPARAM lParam) 865{ | 950CIMEUIWindowHandler::ImeUIMsImeMouseHandler(HWND hWnd, WPARAM wParam, LPARAM lParam) 951{ |
866 return 0; //FIXME | 952 if ((BYTE)wParam == 0xFF) 953 return TRUE; 954 955 CicIMCLock imcLock((HIMC)lParam); 956 if (FAILED(imcLock.m_hr)) 957 return imcLock.m_hr; 958 959 CicIMCCLock<CTFIMECONTEXT> imeContext(imcLock.get().hCtfImeContext); 960 if (FAILED(imeContext.m_hr)) 961 return FALSE; 962 963 HRESULT hr = E_FAIL; 964 CicInputContext *pCicIC = imeContext.get().m_pCicIC; 965 if (pCicIC) 966 { 967 UINT keys = 0; 968 if (wParam & MK_LBUTTON) 969 keys |= 0x1; 970 if (wParam & MK_SHIFT) 971 keys |= 0x10; 972 if (wParam & MK_RBUTTON) 973 keys |= 0x2; 974 if (wParam & MK_MBUTTON) 975 keys |= 0x780000; 976 else if (wParam & MK_ALT) 977 keys |= 0xFF880000; 978 hr = pCicIC->MsImeMouseHandler(HIWORD(wParam), HIBYTE(LOWORD(wParam)), keys, imcLock); 979 } 980 981 return hr; |
867} 868 | 982} 983 |
869/// @unimplemented | 984/// @implemented 985HRESULT CALLBACK CIMEUIWindowHandler::ImeUIOnLayoutChange(LPARAM lParam) 986{ 987 CicIMCLock imcLock((HIMC)lParam); 988 if (FAILED(imcLock.m_hr)) 989 return S_OK; 990 991 CicIMCCLock<CTFIMECONTEXT> imeContext(imcLock.get().hCtfImeContext); 992 if (FAILED(imeContext.m_hr)) 993 return S_OK; 994 995 CicInputContext *pCicIC = imeContext.get().m_pCicIC; 996 if (pCicIC) 997 { 998 auto pContextOwnerServices = pCicIC->m_pContextOwnerServices; 999 pContextOwnerServices->AddRef(); 1000 pContextOwnerServices->OnLayoutChange(); 1001 pContextOwnerServices->Release(); 1002 } 1003 1004 return S_OK; 1005} 1006 1007/// @implemented 1008HRESULT CALLBACK 1009CIMEUIWindowHandler::ImeUIPrivateHandler(UINT uMsg, WPARAM wParam, LPARAM lParam) 1010{ 1011 CicIMCLock imcLock((HIMC)lParam); 1012 if (FAILED(imcLock.m_hr)) 1013 return imcLock.m_hr; 1014 1015 CicIMCCLock<CTFIMECONTEXT> imeContext(imcLock.get().hCtfImeContext); 1016 if (FAILED(imeContext.m_hr)) 1017 return imeContext.m_hr; 1018 1019 CicInputContext *pCicIC = imeContext.get().m_pCicIC; 1020 if (pCicIC && wParam == 0x10) 1021 pCicIC->EscbClearDocFeedBuffer(imcLock, TRUE); 1022 1023 return S_OK; 1024} 1025 1026/// @implemented |
870LRESULT CALLBACK 871CIMEUIWindowHandler::ImeUIMsImeModeBiasHandler(HWND hWnd, WPARAM wParam, LPARAM lParam) 872{ | 1027LRESULT CALLBACK 1028CIMEUIWindowHandler::ImeUIMsImeModeBiasHandler(HWND hWnd, WPARAM wParam, LPARAM lParam) 1029{ |
873 return 0; //FIXME | 1030 if (!wParam) 1031 return TRUE; 1032 1033 CicIMCLock imcLock((HIMC)lParam); 1034 if (FAILED(imcLock.m_hr)) 1035 return imcLock.m_hr; 1036 1037 CicIMCCLock<CTFIMECONTEXT> imeContext(imcLock.get().hCtfImeContext); 1038 if (FAILED(imeContext.m_hr)) 1039 return FALSE; 1040 1041 CicInputContext *pCicIC = imeContext.get().m_pCicIC; 1042 if (!pCicIC) 1043 return FALSE; 1044 1045 if (wParam == 1) 1046 { 1047 if (lParam == 0 || lParam == 1 || lParam == 4 || lParam == 0x10000) 1048 { 1049 GUID guid = pCicIC->m_ModeBias.ConvertModeBias((DWORD)lParam); 1050 pCicIC->m_ModeBias.SetModeBias(guid); 1051 1052 pCicIC->m_dwUnknown7[2] |= 1; 1053 pCicIC->m_pContextOwnerServices->AddRef(); 1054 pCicIC->m_pContextOwnerServices->OnAttributeChange(GUID_PROP_MODEBIAS); 1055 pCicIC->m_pContextOwnerServices->Release(); 1056 return TRUE; 1057 } 1058 } 1059 else if (wParam == 2) 1060 { 1061 return pCicIC->m_ModeBias.ConvertModeBias(pCicIC->m_ModeBias.m_guid); 1062 } 1063 1064 return FALSE; |
874} 875 | 1065} 1066 |
876/// @unimplemented | 1067/// @implemented |
877LRESULT CALLBACK 878CIMEUIWindowHandler::ImeUIMsImeReconvertRequest(HWND hWnd, WPARAM wParam, LPARAM lParam) 879{ | 1068LRESULT CALLBACK 1069CIMEUIWindowHandler::ImeUIMsImeReconvertRequest(HWND hWnd, WPARAM wParam, LPARAM lParam) 1070{ |
880 return 0; //FIXME | 1071 if (wParam == 0x10000000) 1072 return TRUE; 1073 1074 HIMC hIMC = (HIMC)::GetWindowLongPtrW(hWnd, UI_GWLP_HIMC); 1075 CicIMCLock imcLock(hIMC); 1076 if (FAILED(imcLock.m_hr)) 1077 return FALSE; 1078 1079 CicIMCCLock<CTFIMECONTEXT> imeContext(imcLock.get().hCtfImeContext); 1080 if (FAILED(imeContext.m_hr)) 1081 return FALSE; 1082 1083 CicInputContext *pCicIC = imeContext.get().m_pCicIC; 1084 TLS *pTLS = TLS::GetTLS(); 1085 if (!pCicIC || !pTLS) 1086 return FALSE; 1087 1088 auto pThreadMgr = pTLS->m_pThreadMgr; 1089 auto pProfile = pTLS->m_pProfile; 1090 if (!pThreadMgr || !pProfile) 1091 return FALSE; 1092 1093 UINT uCodePage = 0; 1094 pProfile->GetCodePageA(&uCodePage); 1095 pCicIC->SetupReconvertString(imcLock, pThreadMgr, uCodePage, WM_MSIME_RECONVERT, FALSE); 1096 pCicIC->EndReconvertString(imcLock); 1097 return TRUE; |
881} 882 883/// @implemented 884LRESULT CALLBACK 885CIMEUIWindowHandler::ImeUIMsImeHandler(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 886{ 887 if (uMsg == WM_MSIME_MOUSE) 888 return ImeUIMsImeMouseHandler(hWnd, wParam, lParam); --- 11 unchanged lines hidden (view full) --- 900 if (PRIMARYLANGID(LangID) == LANG_KOREAN) 901 return FALSE; 902 } 903 return TRUE; 904 } 905 return 0; 906} 907 | 1098} 1099 1100/// @implemented 1101LRESULT CALLBACK 1102CIMEUIWindowHandler::ImeUIMsImeHandler(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 1103{ 1104 if (uMsg == WM_MSIME_MOUSE) 1105 return ImeUIMsImeMouseHandler(hWnd, wParam, lParam); --- 11 unchanged lines hidden (view full) --- 1117 if (PRIMARYLANGID(LangID) == LANG_KOREAN) 1118 return FALSE; 1119 } 1120 return TRUE; 1121 } 1122 return 0; 1123} 1124 |
1125/// @implemented 1126HRESULT CALLBACK 1127CIMEUIWindowHandler::ImeUIDelayedReconvertFuncCall(HWND hWnd) 1128{ 1129 HIMC hIMC = (HIMC)::GetWindowLongPtrW(hWnd, UI_GWLP_HIMC); 1130 CicIMCLock imcLock(hIMC); 1131 if (FAILED(imcLock.m_hr)) 1132 return imcLock.m_hr; 1133 CicIMCCLock<CTFIMECONTEXT> imeContext(imcLock.get().hCtfImeContext); 1134 if (FAILED(imeContext.m_hr)) 1135 return imeContext.m_hr; 1136 CicInputContext *pCicIC = imeContext.get().m_pCicIC; 1137 if (pCicIC) 1138 pCicIC->DelayedReconvertFuncCall(imcLock); 1139 return S_OK; 1140} 1141 |
|
908/// @unimplemented 909LRESULT CALLBACK | 1142/// @unimplemented 1143LRESULT CALLBACK |
1144CIMEUIWindowHandler::ImeUINotifyHandler(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 1145{ 1146 HIMC hIMC = (HIMC)::GetWindowLongPtrW(hWnd, UI_GWLP_HIMC); 1147 CicIMCLock imcLock(hIMC); 1148 if (FAILED(imcLock.m_hr)) 1149 return imcLock.m_hr; 1150 CicIMCCLock<CTFIMECONTEXT> imeContext(imcLock.get().hCtfImeContext); 1151 if (FAILED(imeContext.m_hr)) 1152 return imeContext.m_hr; 1153 1154 CicInputContext *pCicIC = imeContext.get().m_pCicIC; 1155 if (pCicIC) 1156 { 1157 switch (wParam) 1158 { 1159 case IMN_CLOSECANDIDATE: 1160 { 1161 pCicIC->m_bCandidateOpen = FALSE; 1162 HWND hImeWnd = ::ImmGetDefaultIMEWnd(NULL); 1163 if (::IsWindow(hImeWnd)) 1164 ::PostMessage(hImeWnd, WM_IME_NOTIFY, 0x10, (LPARAM)hIMC); 1165 break; 1166 } 1167 case IMN_OPENCANDIDATE: 1168 { 1169 pCicIC->m_bCandidateOpen = TRUE; 1170 pCicIC->ClearPrevCandidatePos(); 1171 break; 1172 } 1173 case IMN_SETCANDIDATEPOS: 1174 { 1175 //FIXME 1176 break; 1177 } 1178 case IMN_SETCOMPOSITIONFONT: 1179 { 1180 //FIXME 1181 break; 1182 } 1183 case IMN_SETCOMPOSITIONWINDOW: 1184 { 1185 //FIXME 1186 break; 1187 } 1188 case 0xF: 1189 { 1190 CIMEUIWindowHandler::ImeUIOnLayoutChange(lParam); 1191 break; 1192 } 1193 case 0x10: 1194 { 1195 CIMEUIWindowHandler::ImeUIPrivateHandler(uMsg, 0x10, lParam); 1196 break; 1197 } 1198 case 0x13: 1199 { 1200 CIMEUIWindowHandler::ImeUIOnLayoutChange(lParam); 1201 break; 1202 } 1203 case 0x14: 1204 { 1205 //FIXME 1206 break; 1207 } 1208 case 0x16: 1209 { 1210 ::SetTimer(hWnd, 2, 100, NULL); 1211 break; 1212 } 1213 case 0x17: 1214 { 1215 return (LRESULT)hWnd; 1216 } 1217 case 0x10D: 1218 { 1219 //FIXME 1220 break; 1221 } 1222 case 0x10E: 1223 pCicIC->m_dwQueryPos = 0; 1224 break; 1225 } 1226 } 1227 1228 return 0; 1229} 1230 1231/// @implemented 1232LRESULT CALLBACK |
|
910CIMEUIWindowHandler::ImeUIWndProcWorker(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 911{ 912 TLS *pTLS = TLS::GetTLS(); 913 if (pTLS && (pTLS->m_dwSystemInfoFlags & IME_SYSINFO_WINLOGON)) 914 { 915 if (uMsg == WM_CREATE) 916 return -1; | 1233CIMEUIWindowHandler::ImeUIWndProcWorker(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 1234{ 1235 TLS *pTLS = TLS::GetTLS(); 1236 if (pTLS && (pTLS->m_dwSystemInfoFlags & IME_SYSINFO_WINLOGON)) 1237 { 1238 if (uMsg == WM_CREATE) 1239 return -1; |
917 return DefWindowProcW(hWnd, uMsg, wParam, lParam); | 1240 return ::DefWindowProcW(hWnd, uMsg, wParam, lParam); |
918 } 919 920 switch (uMsg) 921 { 922 case WM_CREATE: 923 { 924 UI::OnCreate(hWnd); 925 break; --- 23 unchanged lines hidden (view full) --- 949 break; 950 } 951 case WM_IME_COMPOSITION: 952 { 953 if (lParam & GCS_COMPSTR) 954 { 955 pUI->m_pComp->OnImeCompositionUpdate(imcLock); 956 ::SetTimer(hWnd, 0, 10, NULL); | 1241 } 1242 1243 switch (uMsg) 1244 { 1245 case WM_CREATE: 1246 { 1247 UI::OnCreate(hWnd); 1248 break; --- 23 unchanged lines hidden (view full) --- 1272 break; 1273 } 1274 case WM_IME_COMPOSITION: 1275 { 1276 if (lParam & GCS_COMPSTR) 1277 { 1278 pUI->m_pComp->OnImeCompositionUpdate(imcLock); 1279 ::SetTimer(hWnd, 0, 10, NULL); |
957 //FIXME | 1280 pUI->m_pComp->m_bInComposition = TRUE; |
958 } 959 break; 960 } 961 case WM_IME_ENDCOMPOSITION: 962 { 963 ::KillTimer(hWnd, 0); 964 pUI->m_pComp->OnImeEndComposition(); 965 break; 966 } 967 case WM_IME_SETCONTEXT: 968 { 969 pUI->OnImeSetContext(imcLock, wParam, lParam); 970 ::KillTimer(hWnd, 1); 971 ::SetTimer(hWnd, 1, 300, NULL); 972 break; 973 } 974 case WM_TIMER: 975 { | 1281 } 1282 break; 1283 } 1284 case WM_IME_ENDCOMPOSITION: 1285 { 1286 ::KillTimer(hWnd, 0); 1287 pUI->m_pComp->OnImeEndComposition(); 1288 break; 1289 } 1290 case WM_IME_SETCONTEXT: 1291 { 1292 pUI->OnImeSetContext(imcLock, wParam, lParam); 1293 ::KillTimer(hWnd, 1); 1294 ::SetTimer(hWnd, 1, 300, NULL); 1295 break; 1296 } 1297 case WM_TIMER: 1298 { |
976 //FIXME 977 ::KillTimer(hWnd, wParam); | 1299 switch (wParam) 1300 { 1301 case 0: 1302 ::KillTimer(hWnd, wParam); 1303 pUI->m_pComp->m_bInComposition = FALSE; 1304 pUI->m_pComp->OnImeNotifySetCompositionWindow(imcLock); 1305 break; 1306 case 1: 1307 ::KillTimer(hWnd, wParam); 1308 pUI->m_pComp->OnImeSetContextAfter(imcLock); 1309 break; 1310 case 2: 1311 ::KillTimer(hWnd, wParam); 1312 CIMEUIWindowHandler::ImeUIDelayedReconvertFuncCall(hWnd); 1313 break; 1314 default: 1315 break; 1316 } |
978 break; 979 } 980 case WM_IME_NOTIFY: 981 case WM_IME_SELECT: 982 default: 983 { 984 pUI->m_pComp->OnPaintTheme(wParam); 985 break; 986 } 987 } 988 break; 989 } 990 default: 991 { 992 if (IsMsImeMessage(uMsg)) 993 return CIMEUIWindowHandler::ImeUIMsImeHandler(hWnd, uMsg, wParam, lParam); | 1317 break; 1318 } 1319 case WM_IME_NOTIFY: 1320 case WM_IME_SELECT: 1321 default: 1322 { 1323 pUI->m_pComp->OnPaintTheme(wParam); 1324 break; 1325 } 1326 } 1327 break; 1328 } 1329 default: 1330 { 1331 if (IsMsImeMessage(uMsg)) 1332 return CIMEUIWindowHandler::ImeUIMsImeHandler(hWnd, uMsg, wParam, lParam); |
994 return DefWindowProcW(hWnd, uMsg, wParam, lParam); | 1333 return ::DefWindowProcW(hWnd, uMsg, wParam, lParam); |
995 } 996 } 997 998 return 0; 999} 1000 1001/***********************************************************************/ 1002 --- 68 unchanged lines hidden --- | 1334 } 1335 } 1336 1337 return 0; 1338} 1339 1340/***********************************************************************/ 1341 --- 68 unchanged lines hidden --- |