From 4960846668ec11e60cce49322d0c33f649d56fe1 Mon Sep 17 00:00:00 2001 From: amlan-sw Date: Sun, 26 Mar 2023 08:56:10 +0700 Subject: [PATCH 1/7] changes for x64 build --- Config/PluginConfig.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Config/PluginConfig.cpp b/Config/PluginConfig.cpp index 8540988..78cf0e3 100644 --- a/Config/PluginConfig.cpp +++ b/Config/PluginConfig.cpp @@ -309,7 +309,7 @@ void PluginConfig::settings() { ::SendMessage(nppData._nppHandle, NPPM_DOOPEN, 0, (LPARAM)iniPath); } - int lineCount = ::SendScintilla(SCI_GETLINECOUNT, 0, 0)-1; + sptr_t lineCount = ::SendScintilla(SCI_GETLINECOUNT, 0, 0)-1; ::SendScintilla(SCI_ANNOTATIONCLEARALL, 0, 0); //TODO: move this part (and other text) to const char in another file. ::SendScintilla(SCI_ANNOTATIONSETTEXT, lineCount, (LPARAM)"\ @@ -390,7 +390,7 @@ For step by step usage guide, please visit http://github.com/erinata/FingerText void PluginConfig::about() { - int length = _tcslen(TEXT(PLUGIN_NAME))+_tcslen(TEXT(VERSION_TEXT))+_tcslen(TEXT(VERSION_STAGE))+_tcslen(TEXT(VERSION_STAGE_ADD))+_tcslen(TEXT(DATE_TEXT))+_tcslen(TEXT(AUTHOR_TEXT))+_tcslen(TEXT(EMAIL_TEXT))+_tcslen(TEXT(ABOUT_TEXT))+50; + sptr_t length = _tcslen(TEXT(PLUGIN_NAME))+_tcslen(TEXT(VERSION_TEXT))+_tcslen(TEXT(VERSION_STAGE))+_tcslen(TEXT(VERSION_STAGE_ADD))+_tcslen(TEXT(DATE_TEXT))+_tcslen(TEXT(AUTHOR_TEXT))+_tcslen(TEXT(EMAIL_TEXT))+_tcslen(TEXT(ABOUT_TEXT))+50; TCHAR* versionText = new TCHAR[length]; From ec8534203139274337289f76d7ac5a449d7a4d2a Mon Sep 17 00:00:00 2001 From: amlan-sw Date: Sun, 26 Mar 2023 08:57:09 +0700 Subject: [PATCH 2/7] changes for x64 build --- Dialogs/InsertionDialog.cpp | 24 ++++++++++++------------ Dialogs/InsertionDialog.h | 2 +- Dialogs/SnippetDock.cpp | 30 +++++++++++++++--------------- Dialogs/SnippetDock.h | 14 +++++++------- 4 files changed, 35 insertions(+), 35 deletions(-) diff --git a/Dialogs/InsertionDialog.cpp b/Dialogs/InsertionDialog.cpp index 48639ed..fdf346e 100644 --- a/Dialogs/InsertionDialog.cpp +++ b/Dialogs/InsertionDialog.cpp @@ -108,7 +108,7 @@ int InsertionDlg::getEditPos() TCHAR* InsertionDlg::getEditText() { - int length = SendMessage(GetDlgItem(_hSelf, IDC_INSERTION_EDIT), EM_LINELENGTH, 0, 0); + LRESULT length = SendMessage(GetDlgItem(_hSelf, IDC_INSERTION_EDIT), EM_LINELENGTH, 0, 0); TCHAR* bufferWide = new TCHAR[length+1]; ::GetDlgItemText(_hSelf, IDC_INSERTION_EDIT ,bufferWide,length+1); return bufferWide; @@ -137,13 +137,13 @@ void InsertionDlg::setDlgText(int dlg, TCHAR* showText) } -void InsertionDlg::getSelectText(TCHAR* &buffer, int index) +void InsertionDlg::getSelectText(TCHAR* &buffer, LRESULT index) { HWND hwndList = GetDlgItem(_hSelf, IDC_INSERTION_LIST); - if (index = -1) index = SendMessage(hwndList, LB_GETCURSEL, 0, 0); + if (index == -1) index = SendMessage(hwndList, LB_GETCURSEL, 0, 0); if (index <= 0) index = 0; - int length = SendMessage(hwndList, LB_GETTEXTLEN, index, 0); + LRESULT length = SendMessage(hwndList, LB_GETTEXTLEN, index, 0); if (length >= 1) { @@ -242,7 +242,7 @@ bool InsertionDlg::completeSnippets() bool retVal = false; SendDlgItemMessage(_hSelf, IDC_INSERTION_LIST, LB_SETSEL, 0, 0); showPreview(false,true); - int length = SendMessage(GetDlgItem(_hSelf, IDC_INSERTION_EDIT), EM_LINELENGTH, 0, 0); + LRESULT length = SendMessage(GetDlgItem(_hSelf, IDC_INSERTION_EDIT), EM_LINELENGTH, 0, 0); SendDlgItemMessage(_hSelf, IDC_INSERTION_EDIT, EM_SETSEL, length, -1); //TODO: complete snippet in dialog @@ -267,11 +267,11 @@ void InsertionDlg::changeMode(bool withComment) void InsertionDlg::setTextTarget(bool fromTab) { - int index = SendMessage(GetDlgItem(_hSelf, IDC_INSERTION_LIST), LB_GETCURSEL, 0, 0); + LRESULT index = SendMessage(GetDlgItem(_hSelf, IDC_INSERTION_LIST), LB_GETCURSEL, 0, 0); if ((fromTab) || (index)==0) { - int length = SendMessage(GetDlgItem(_hSelf, IDC_INSERTION_EDIT), EM_LINELENGTH, 0, 0); + LRESULT length = SendMessage(GetDlgItem(_hSelf, IDC_INSERTION_EDIT), EM_LINELENGTH, 0, 0); SetFocus(GetDlgItem(_hSelf, IDC_INSERTION_EDIT)); SendDlgItemMessage(_hSelf, IDC_INSERTION_EDIT, EM_SETSEL, length, -1); } @@ -280,7 +280,7 @@ void InsertionDlg::setTextTarget(bool fromTab) void InsertionDlg::setListTarget() { - int count = SendMessage(GetDlgItem(_hSelf, IDC_INSERTION_LIST), LB_GETCOUNT, 0, 0); + LRESULT count = SendMessage(GetDlgItem(_hSelf, IDC_INSERTION_LIST), LB_GETCOUNT, 0, 0); if (count>0) { SetFocus(GetDlgItem(_hSelf, IDC_INSERTION_LIST)); @@ -293,7 +293,7 @@ void InsertionDlg::updateInsertionHint() { if (::GetFocus() == GetDlgItem(_hSelf, IDC_INSERTION_EDIT)) { - int length = SendMessage(GetDlgItem(_hSelf, IDC_INSERTION_EDIT), EM_LINELENGTH, 0, 0); + LRESULT length = SendMessage(GetDlgItem(_hSelf, IDC_INSERTION_EDIT), EM_LINELENGTH, 0, 0); if (length>0) { TCHAR* bufferWide = new TCHAR[length+1]; @@ -325,9 +325,9 @@ void InsertionDlg::adjustTextHintPosition() { int fontWidth = 7; int offset = 4; - int length1 = SendMessage(GetDlgItem(_hSelf, IDC_INSERTION_HINT), EM_LINELENGTH, 0, 0); - int length2 = SendMessage(GetDlgItem(_hSelf, IDC_INSERTION_HINT_HIGHLIGHT), EM_LINELENGTH, 0, 0); - int length3 = SendMessage(GetDlgItem(_hSelf, IDC_INSERTION_HINT_POST), EM_LINELENGTH, 0, 0); + LRESULT length1 = SendMessage(GetDlgItem(_hSelf, IDC_INSERTION_HINT), EM_LINELENGTH, 0, 0); + LRESULT length2 = SendMessage(GetDlgItem(_hSelf, IDC_INSERTION_HINT_HIGHLIGHT), EM_LINELENGTH, 0, 0); + LRESULT length3 = SendMessage(GetDlgItem(_hSelf, IDC_INSERTION_HINT_POST), EM_LINELENGTH, 0, 0); SetWindowPos(GetDlgItem(_hSelf, IDC_INSERTION_HINT) ,NULL,5 ,35,offset+length1*fontWidth,20,SWP_NOACTIVATE); SetWindowPos(GetDlgItem(_hSelf, IDC_INSERTION_HINT_HIGHLIGHT),NULL,5+offset+length1*fontWidth ,35,offset+length2*fontWidth,20,SWP_NOACTIVATE); diff --git a/Dialogs/InsertionDialog.h b/Dialogs/InsertionDialog.h index 9efb17e..a630b0f 100644 --- a/Dialogs/InsertionDialog.h +++ b/Dialogs/InsertionDialog.h @@ -58,7 +58,7 @@ class InsertionDlg : public StaticDialog void InsertionDlg::setListTarget(); bool InsertionDlg::completeSnippets(); int InsertionDlg::getEditPos(); - void InsertionDlg::getSelectText(TCHAR* &buffer, int index = -1); + void InsertionDlg::getSelectText(TCHAR* &buffer, LRESULT index = -1); void InsertionDlg::setDlgText(int dlg, TCHAR* showText); void InsertionDlg::changeMode(bool withComment); void InsertionDlg::changeExpand(); diff --git a/Dialogs/SnippetDock.cpp b/Dialogs/SnippetDock.cpp index 57564d7..d3eaf9f 100644 --- a/Dialogs/SnippetDock.cpp +++ b/Dialogs/SnippetDock.cpp @@ -31,7 +31,7 @@ #include "SnippetDock.h" bool normalMode = true; -int insertMode = 1; +LRESULT insertMode = 1; //int previewMode = 1; int selectMode = 1; //extern NppData nppData; @@ -71,7 +71,7 @@ void DockingDlg::resizeListBox(int height,int width) int minimumHeight = 100; - if (height = -1) + if (height == -1) { RECT rect; GetWindowRect(_hSelf, &rect); @@ -147,9 +147,9 @@ void DockingDlg::toggleSave(bool buttonOn) } -int DockingDlg::getSelection() +LRESULT DockingDlg::getSelection() { - int retVal; + LRESULT retVal; HWND hwndList = GetDlgItem(_hSelf, IDC_SNIPPET_LIST); retVal = SendMessage(hwndList, LB_GETCURSEL, 0, 0); retVal = SendMessage(hwndList, LB_GETANCHORINDEX, 0, 0); @@ -158,13 +158,13 @@ int DockingDlg::getSelection() } -void DockingDlg::getSelectText(TCHAR* &buffer, int index) +void DockingDlg::getSelectText(TCHAR* &buffer, LRESULT index) { HWND hwndList = GetDlgItem(_hSelf, IDC_SNIPPET_LIST); - if (index = -1) index = SendMessage(hwndList, LB_GETCURSEL, 0, 0); + if (index == -1) index = SendMessage(hwndList, LB_GETCURSEL, 0, 0); if (index <= 0) index = 0; - int length = SendMessage(hwndList, LB_GETTEXTLEN, index, 0); + LRESULT length = SendMessage(hwndList, LB_GETTEXTLEN, index, 0); if (length >= 1) { @@ -204,22 +204,22 @@ void DockingDlg::setupHotspotCombo() -int DockingDlg::searchSnippetList(wchar_t* key) +LRESULT DockingDlg::searchSnippetList(wchar_t* key) { return SendMessage(GetDlgItem(_hSelf, IDC_SNIPPET_LIST), LB_FINDSTRINGEXACT, -1, (LPARAM)key); } -void DockingDlg::setTopIndex(int index) +void DockingDlg::setTopIndex(LRESULT index) { SendMessage(GetDlgItem(_hSelf, IDC_SNIPPET_LIST), LB_SETTOPINDEX, index, 0); } -int DockingDlg::getTopIndex() +LRESULT DockingDlg::getTopIndex() { return SendMessage(GetDlgItem(_hSelf, IDC_SNIPPET_LIST), LB_GETTOPINDEX, 0, 0); } -void DockingDlg::selectSnippetList(int selection) +void DockingDlg::selectSnippetList(LRESULT selection) { SendMessage(GetDlgItem(_hSelf, IDC_SNIPPET_LIST), LB_SETCURSEL, selection, 0); } @@ -227,7 +227,7 @@ void DockingDlg::selectSnippetList(int selection) void DockingDlg::insertHotspot() { - int type = SendMessage(GetDlgItem(_hSelf, IDC_COMBO_HOTSPOT), CB_GETCURSEL, 0, 0); + LRESULT type = SendMessage(GetDlgItem(_hSelf, IDC_COMBO_HOTSPOT), CB_GETCURSEL, 0, 0); //::insertHotSpotSign(select); insertTagSign(type); ::SetFocus(::getCurrentScintilla()); @@ -350,7 +350,7 @@ void DockingDlg::switchDock(bool toNormal) //alert(); } -void DockingDlg::switchInsertMode(int insert) +void DockingDlg::switchInsertMode(LRESULT insert) { insertMode = insert; SendMessage(GetDlgItem(_hSelf, IDC_RADIO_INSERT), BM_SETCHECK, insert, 0); @@ -452,11 +452,11 @@ INT_PTR CALLBACK DockingDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lPa { if (::GetFocus() == GetDlgItem(_hSelf, IDC_FILTER)) { - int length = SendMessage(GetDlgItem(_hSelf, IDC_FILTER), EM_LINELENGTH, 0, 0); + LRESULT length = SendMessage(GetDlgItem(_hSelf, IDC_FILTER), EM_LINELENGTH, 0, 0); if (length>0) { TCHAR* bufferWide = new TCHAR[length+1]; - ::GetDlgItemText(_hSelf, IDC_FILTER ,bufferWide,length+1); + ::GetDlgItemText(_hSelf, IDC_FILTER ,bufferWide,(int)(length+1)); char* buffer = toCharArray(bufferWide); bool leadingSpace = 0; bool trailingSpace = 0; diff --git a/Dialogs/SnippetDock.h b/Dialogs/SnippetDock.h index e9a94af..2392a25 100644 --- a/Dialogs/SnippetDock.h +++ b/Dialogs/SnippetDock.h @@ -49,19 +49,19 @@ class DockingDlg : public DockingDlgInterface void clearDock(); void setDlgText(int dlg, TCHAR* showText); void toggleSave(bool buttonOn); - int getSelection(); + LRESULT getSelection(); //void setSelction(); void DockingDlg::setupHotspotCombo(); - void DockingDlg::switchInsertMode(int insert = 1); + void DockingDlg::switchInsertMode(LRESULT insert = 1); //int getCount(); void DockingDlg::updateSnippetCount(wchar_t* count); void DockingDlg::insertHotspot(); void DockingDlg::switchDock(bool toNormal = true); - void DockingDlg::selectSnippetList(int selection); - int DockingDlg::searchSnippetList(wchar_t* key); - int DockingDlg::getTopIndex(); - void DockingDlg::setTopIndex(int index); - void DockingDlg::getSelectText(TCHAR* &buffer, int index = -1); + void DockingDlg::selectSnippetList(LRESULT selection); + LRESULT DockingDlg::searchSnippetList(wchar_t* key); + LRESULT DockingDlg::getTopIndex(); + void DockingDlg::setTopIndex(LRESULT index); + void DockingDlg::getSelectText(TCHAR* &buffer, LRESULT index = -1); protected : From 02283c34c25b550e119472e1abf47946060e0086 Mon Sep 17 00:00:00 2001 From: amlan-sw Date: Sun, 26 Mar 2023 08:57:47 +0700 Subject: [PATCH 3/7] changes for x64 build --- DuckEval/DuckEval.cpp | 14 +++++++------- DuckEval/DuckEval.h | 6 +++--- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/DuckEval/DuckEval.cpp b/DuckEval/DuckEval.cpp index ab69975..c4d7028 100644 --- a/DuckEval/DuckEval.cpp +++ b/DuckEval/DuckEval.cpp @@ -125,8 +125,8 @@ bool Expression::isDigit(const char &c) std::string Expression::rephrasing(std::string input) { - int length = input.length(); - for (int j=0; j operand2) { @@ -427,7 +427,7 @@ long Expression::ncr(long operand1, long operand2) return factorial(operand2)/(factorial(operand1)*factorial(operand2 - operand1)); } -long Expression::npr(long operand1, long operand2) +double Expression::npr(double operand1, double operand2) { if (operand1 < 0 || operand2 < 0 || operand1 > operand2) { @@ -438,11 +438,11 @@ long Expression::npr(long operand1, long operand2) return factorial(operand2)/factorial(operand2 - operand1); } -long Expression::factorial(long number) +double Expression::factorial(double number) { if (number < 0) isError = 1; - long result = 1; - for (long i = number; i>0; i--) result = result * i; + double result = 1; + for (double i = number; i>0; i--) result = result * i; return result; } diff --git a/DuckEval/DuckEval.h b/DuckEval/DuckEval.h index 0ac5a9c..edd0599 100644 --- a/DuckEval/DuckEval.h +++ b/DuckEval/DuckEval.h @@ -49,7 +49,7 @@ class Expression void Expression::toPostfix(std::string infix); double Expression::operate(const std::string &, const double &, const double &); // calculate result by operator and operand void Expression::signReplace(std::string& str, const std::string& oldStr, const std::string& newStr,bool negative = false); - long Expression::factorial(long number); + double Expression::factorial(double number); int Expression::isNotEqual(double operand1, double operand2); int Expression::isEqual(double operand1, double operand2); int Expression::isSmallerOrEqual(double operand1, double operand2); @@ -58,8 +58,8 @@ class Expression int Expression::isGreater(double operand1, double operand2); int Expression::operateOr(double operand1, double operand2); int Expression::operateAnd(double operand1, double operand2); - long Expression::ncr(long operand1, long operand2); - long Expression::npr(long operand1, long operand2); + double Expression::ncr(double operand1, double operand2); + double Expression::npr(double operand1, double operand2); long Expression::randomNumber(double operand1); double Expression::randomFraction(double operand1); From f14337cbd6d490db8c7ff0c6f365e38b7f4a269c Mon Sep 17 00:00:00 2001 From: amlan-sw Date: Sun, 26 Mar 2023 08:58:32 +0700 Subject: [PATCH 4/7] changes for x64 build --- NppApi/NppApiHelpers.cpp | 8 ++++---- NppApi/NppApiHelpers.h | 6 +++--- NppApi/Scintilla.h | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/NppApi/NppApiHelpers.cpp b/NppApi/NppApiHelpers.cpp index 21dd628..2ca2667 100644 --- a/NppApi/NppApiHelpers.cpp +++ b/NppApi/NppApiHelpers.cpp @@ -109,7 +109,7 @@ int showMessageBox(TCHAR* text, int flags) return ::MessageBox(nppData._nppHandle, text, TEXT(PLUGIN_NAME), flags); } -int searchNext(char* searchText, bool regExp) +sptr_t searchNext(char* searchText, bool regExp) { int searchFlags = 0; if (regExp) searchFlags = SCFIND_REGEXP; @@ -117,7 +117,7 @@ int searchNext(char* searchText, bool regExp) return ::SendScintilla(SCI_SEARCHNEXT, searchFlags,(LPARAM)searchText); } -int searchPrev(char* searchText, bool regExp) +sptr_t searchPrev(char* searchText, bool regExp) { int searchFlags = 0; if (regExp) searchFlags = SCFIND_REGEXP; @@ -126,7 +126,7 @@ int searchPrev(char* searchText, bool regExp) } -unsigned int sciGetText(char **text, int start, int end) +sptr_t sciGetText(char **text, sptr_t start, sptr_t end) { if (start == -1) { @@ -143,7 +143,7 @@ unsigned int sciGetText(char **text, int start, int end) tr.chrg.cpMin = start; tr.chrg.cpMax = end; tr.lpstrText = *text; - return (int)SendScintilla(SCI_GETTEXTRANGE, 0, reinterpret_cast(&tr)); + return SendScintilla(SCI_GETTEXTRANGE, 0, reinterpret_cast(&tr)); } else { strcpy(*text,""); diff --git a/NppApi/NppApiHelpers.h b/NppApi/NppApiHelpers.h index 9f63706..4580bec 100644 --- a/NppApi/NppApiHelpers.h +++ b/NppApi/NppApiHelpers.h @@ -44,11 +44,11 @@ int setCommand(TCHAR *cmdName = TEXT(""), PFUNCPLUGINCMD pFunc = NULL, ShortcutK int showMessageBox(TCHAR* text = TEXT(""), int flags = MB_OK); // Search in Scintilla -int searchNext(char* searchText, bool regExp = false); -int searchPrev(char* searchText, bool regExp = false); +sptr_t searchNext(char* searchText, bool regExp = false); +sptr_t searchPrev(char* searchText, bool regExp = false); // Getting Text from Scintilla -unsigned int sciGetText(char **text, int start = -1, int end = -1); +sptr_t sciGetText(char **text, sptr_t start = -1, sptr_t end = -1); //unsigned int sciGetText(HWND hwnd, char **text, int start, int end) void closeTab(TCHAR* path); diff --git a/NppApi/Scintilla.h b/NppApi/Scintilla.h index c64443f..724dd4e 100644 --- a/NppApi/Scintilla.h +++ b/NppApi/Scintilla.h @@ -1063,8 +1063,8 @@ namespace Scintilla { #endif struct Sci_CharacterRange { - long cpMin; - long cpMax; + sptr_t cpMin; + sptr_t cpMax; }; struct Sci_TextRange { From 3bee00ce9d9bd4025dd262191c7bb3f74a7a1dcd Mon Sep 17 00:00:00 2001 From: amlan-sw Date: Sun, 26 Mar 2023 08:59:13 +0700 Subject: [PATCH 5/7] changes for x64 build --- Utils/ConversionUtils.cpp | 2 +- Utils/ConversionUtils.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Utils/ConversionUtils.cpp b/Utils/ConversionUtils.cpp index 95d4ab5..e512155 100644 --- a/Utils/ConversionUtils.cpp +++ b/Utils/ConversionUtils.cpp @@ -137,7 +137,7 @@ long toLong(std::string source) return l; } -std::vector toVectorString(char* str, char c, int parts) +std::vector toVectorString(char* str, TCHAR c, int parts) { int i = 1; if (parts == 0) i = -1; diff --git a/Utils/ConversionUtils.h b/Utils/ConversionUtils.h index 424fbda..07ca641 100644 --- a/Utils/ConversionUtils.h +++ b/Utils/ConversionUtils.h @@ -52,7 +52,7 @@ double toDouble(const std::string &s); long toLong(std::string source); -std::vector toVectorString(char* str, char c = ' ', int parts = 0); +std::vector toVectorString(char* str, TCHAR c = ' ', int parts = 0); std::vector toSortedVectorString(std::vector v); int toVk(char* input); From 2afb0496693c4d7a53d25128feb7bf68b5a56101 Mon Sep 17 00:00:00 2001 From: amlan-sw Date: Sun, 26 Mar 2023 09:01:03 +0700 Subject: [PATCH 6/7] changes for x64 build --- FingerText.vcxproj | 10 +- PluginDefinition.cpp | 320 +++++++++++++++++++++---------------------- PluginDefinition.h | 44 +++--- 3 files changed, 187 insertions(+), 187 deletions(-) diff --git a/FingerText.vcxproj b/FingerText.vcxproj index a2a60a6..502d709 100644 --- a/FingerText.vcxproj +++ b/FingerText.vcxproj @@ -1,5 +1,5 @@  - + Unicode Debug @@ -30,26 +30,26 @@ Unicode false true - v120_xp + v140_xp DynamicLibrary Unicode false true - v120_xp + v140_xp DynamicLibrary Unicode true - v120_xp + v140_xp DynamicLibrary Unicode true - v120_xp + v143 diff --git a/PluginDefinition.cpp b/PluginDefinition.cpp index 00961aa..02a4cde 100644 --- a/PluginDefinition.cpp +++ b/PluginDefinition.cpp @@ -108,21 +108,21 @@ bool g_freezeDock = false; bool g_enable = true; bool g_editorView; -int g_editorLineCount; +sptr_t g_editorLineCount; std::string g_snippetCount = ""; bool g_fingerTextList; -int g_lastTriggerPosition = 0; +sptr_t g_lastTriggerPosition = 0; std::string g_customClipBoard = ""; std::string g_selectedText = ""; // For option hotspot bool g_optionMode = false; -int g_optionStartPosition = 0; -int g_optionEndPosition = 0; -int g_optionCurrent = 0; +sptr_t g_optionStartPosition = 0; +sptr_t g_optionEndPosition = 0; +size_t g_optionCurrent = 0; std::vector g_optionArray; // List of acceptable tagSigns @@ -503,8 +503,8 @@ void selectionToSnippet(bool forceNew) //pc.configInt[EDITOR_CARET_BOUND]--; //HWND curScintilla = getCurrentScintilla(); - int selectionEnd = ::SendScintilla(SCI_GETSELECTIONEND,0,0); - int selectionStart = ::SendScintilla(SCI_GETSELECTIONSTART,0,0); + sptr_t selectionEnd = ::SendScintilla(SCI_GETSELECTIONEND,0,0); + sptr_t selectionStart = ::SendScintilla(SCI_GETSELECTIONSTART,0,0); bool withSelection = false; char* selection; @@ -574,8 +574,8 @@ void insertSnippet() char* buffer = toCharArray(bufferWide); buffer = quickStrip(buffer, ' '); - int scopeLength = ::strchr(buffer,'>') - buffer - 1; - int triggerTextLength = strlen(buffer)-scopeLength - 2; + size_t scopeLength = ::strchr(buffer,'>') - buffer - 1; + size_t triggerTextLength = strlen(buffer)-scopeLength - 2; char* tempTriggerText = new char [ triggerTextLength+1]; char* tempScope = new char[scopeLength+1]; @@ -595,7 +595,7 @@ void insertSnippet() void editSnippet() { - int topIndex = -1; + LRESULT topIndex = -1; if (g_editorView) topIndex = snippetDock.getTopIndex(); TCHAR* bufferWide; @@ -611,8 +611,8 @@ void editSnippet() // return; //} // - int scopeLength = ::strchr(buffer,'>') - buffer - 1; - int triggerTextLength = strlen(buffer)-scopeLength - 2; + size_t scopeLength = ::strchr(buffer,'>') - buffer - 1; + size_t triggerTextLength = strlen(buffer)-scopeLength - 2; char* tempTriggerText = new char [ triggerTextLength+1]; char* tempScope = new char[scopeLength+1]; @@ -687,7 +687,7 @@ void editSnippet() delete [] tempTriggerText; delete [] tempScope; - int scrollPos = snippetDock.searchSnippetList(bufferWide); + LRESULT scrollPos = snippetDock.searchSnippetList(bufferWide); snippetDock.selectSnippetList(scrollPos); if (topIndex == -1) { @@ -703,15 +703,15 @@ void editSnippet() void deleteSnippet() { - int topIndex = snippetDock.getTopIndex(); + LRESULT topIndex = snippetDock.getTopIndex(); TCHAR* bufferWide; snippetDock.getSelectText(bufferWide); char* buffer = toCharArray(bufferWide); buffer = quickStrip(buffer, ' '); - int scopeLength = ::strchr(buffer,'>') - buffer - 1; - int triggerTextLength = strlen(buffer)-scopeLength - 2; + size_t scopeLength = ::strchr(buffer,'>') - buffer - 1; + size_t triggerTextLength = strlen(buffer)-scopeLength - 2; char* tempTriggerText = new char [ triggerTextLength+1]; char* tempScope = new char[scopeLength+1]; @@ -752,16 +752,16 @@ bool getLineChecked(char **buffer, int lineNumber, TCHAR* errorText) ::SendScintilla(SCI_GOTOLINE,lineNumber,0); - int tagPosStart = ::SendScintilla(SCI_GETCURRENTPOS,0,0); + sptr_t tagPosStart = ::SendScintilla(SCI_GETCURRENTPOS,0,0); - int tagPosEnd; + sptr_t tagPosEnd; if (lineNumber == 3) { tagPosEnd = ::SendScintilla(SCI_GETLENGTH,0,0); } else { - int tagPosLineEnd = ::SendScintilla(SCI_GETLINEENDPOSITION,lineNumber,0); + sptr_t tagPosLineEnd = ::SendScintilla(SCI_GETLINEENDPOSITION,lineNumber,0); //char* wordChar; //if (lineNumber==2) @@ -806,7 +806,7 @@ bool getLineChecked(char **buffer, int lineNumber, TCHAR* errorText) if (lineNumber == 3) { ::SendScintilla(SCI_GOTOPOS,tagPosStart,0); - int spot = searchNext("[>END<]"); + sptr_t spot = searchNext("[>END<]"); if (spot<0) { showMessageBox(TEXT("You should put an \"[>END<]\" (without quotes) at the end of your snippet content.")); @@ -829,7 +829,7 @@ void saveSnippet() { //HWND curScintilla = getCurrentScintilla(); g_selectionMonitor--; - int docLength = ::SendScintilla(SCI_GETLENGTH,0,0); + sptr_t docLength = ::SendScintilla(SCI_GETLENGTH,0,0); // insert a space at the end of the doc so the ::SendMessage(curScintilla,SCI_SEARCHNEXT,0,(LPARAM)" "); will not get into error // TODO: Make sure that it is not necessary to keep this line //::SendMessage(curScintilla, SCI_INSERTTEXT, docLength, (LPARAM)" "); @@ -953,7 +953,7 @@ void saveSnippet() //TODO: This is not working. The scrolling works but the snippetdock reset the scrolling after thei savesnippet() finished wchar_t* searchItem = constructDockItems(toString(tagTypeText),toString(tagText),14); - int scrollPos = snippetDock.searchSnippetList(searchItem); + LRESULT scrollPos = snippetDock.searchSnippetList(searchItem); snippetDock.selectSnippetList(scrollPos); snippetDock.setTopIndex(scrollPos); @@ -966,7 +966,7 @@ void saveSnippet() } -void restoreTab(int &posCurrent, int &posSelectionStart, int &posSelectionEnd) +void restoreTab(sptr_t &posCurrent, sptr_t &posSelectionStart, sptr_t &posSelectionEnd) { // restoring the original tab action ::SendScintilla(SCI_GOTOPOS,posCurrent,0); @@ -975,18 +975,18 @@ void restoreTab(int &posCurrent, int &posSelectionStart, int &posSelectionEnd) } //TODO: refactor searchPrevMatchedSign and searchNextMatchedTail -int searchPrevMatchedSign(char* tagSign, char* tagTail) +sptr_t searchPrevMatchedSign(char* tagSign, char* tagTail) { //This function works when the caret is at the beginning of tagtail // it return the position at the beginning of the tagsign if found - int signSpot = -1; - int tailSpot = -1; - int unmatchedTail = 0; + sptr_t signSpot = -1; + sptr_t tailSpot = -1; + sptr_t unmatchedTail = 0; do { - int posCurrent = ::SendScintilla(SCI_GETCURRENTPOS,0,0); + sptr_t posCurrent = ::SendScintilla(SCI_GETCURRENTPOS,0,0); tailSpot = searchPrev(tagTail); ::SendScintilla(SCI_GOTOPOS,posCurrent,0); signSpot = searchPrev(tagSign); @@ -1015,23 +1015,23 @@ int searchPrevMatchedSign(char* tagSign, char* tagTail) return -1; } -int searchNextMatchedTail(char* tagSign, char* tagTail) +sptr_t searchNextMatchedTail(char* tagSign, char* tagTail) { // TODO: this function is not returning the position correctly, but it stop at the place where is find the tail // This function is tested to work when the position is at the end of tagSign // And this return the position at the END of tailsign, if found - int signSpot = -1; - int tailSpot = -1; - int unmatchedSign = 0; + sptr_t signSpot = -1; + sptr_t tailSpot = -1; + sptr_t unmatchedSign = 0; - int signLength = strlen(tagSign); - int tailLength = strlen(tagTail); + size_t signLength = strlen(tagSign); + size_t tailLength = strlen(tagTail); do { - int posCurrent = ::SendScintilla(SCI_GETCURRENTPOS,0,0); + sptr_t posCurrent = ::SendScintilla(SCI_GETCURRENTPOS,0,0); signSpot = searchNext(tagSign); if (signSpot != -1) signSpot = signSpot+signLength; ::SendScintilla(SCI_GOTOPOS,posCurrent,0); @@ -1061,10 +1061,10 @@ int searchNextMatchedTail(char* tagSign, char* tagTail) return -1; } -bool dynamicHotspot(int &startingPos, char* tagSign, char* tagTail) +bool dynamicHotspot(sptr_t &startingPos, char* tagSign, char* tagTail) { - int checkPoint = startingPos; + sptr_t checkPoint = startingPos; bool normalSpotTriggered = false; //char tagSign[] = "$[!["; @@ -1077,8 +1077,8 @@ bool dynamicHotspot(int &startingPos, char* tagSign, char* tagTail) char* hotSpotText = 0; char* hotSpot = 0; - int spot = -1; - int spotComplete = -1; + sptr_t spot = -1; + sptr_t spotComplete = -1; int spotType = 0; int limitCounter = 0; @@ -1102,8 +1102,8 @@ bool dynamicHotspot(int &startingPos, char* tagSign, char* tagTail) if (spotComplete>=0) { - int firstPos = ::SendScintilla(SCI_GETCURRENTPOS,0,0); - int secondPos = 0; + sptr_t firstPos = ::SendScintilla(SCI_GETCURRENTPOS,0,0); + sptr_t secondPos = 0; spotType = grabHotSpotContent(&hotSpotText, &hotSpot, firstPos, secondPos, tagSignLength,spot); @@ -1196,7 +1196,7 @@ bool dynamicHotspot(int &startingPos, char* tagSign, char* tagTail) return false; } -void paramsInsertion(int &firstPos, char* hotSpot, int &checkPoint) +void paramsInsertion(sptr_t &firstPos, char* hotSpot, sptr_t &checkPoint) { if (!g_hotspotParams.empty()) { @@ -1211,7 +1211,7 @@ void paramsInsertion(int &firstPos, char* hotSpot, int &checkPoint) //::SendScintilla(SCI_SETSEL,firstPos,secondPos+3); bool first = true; - int found; + sptr_t found; do { ::SendScintilla(SCI_GOTOPOS,firstPos,0); @@ -1239,16 +1239,16 @@ void paramsInsertion(int &firstPos, char* hotSpot, int &checkPoint) } -void chainSnippet(int &firstPos, char* hotSpotText) +void chainSnippet(sptr_t &firstPos, char* hotSpotText) { //TODO: there may be a bug here. When the chain snippet contains content with CUT, the firstPos is not updated. - int triggerPos = strlen(hotSpotText)+firstPos; + sptr_t triggerPos = strlen(hotSpotText)+firstPos; ::SendScintilla(SCI_GOTOPOS,triggerPos,0); triggerTag(triggerPos,strlen(hotSpotText)); } -void webRequest(int &firstPos, char* hotSpotText) +void webRequest(sptr_t &firstPos, char* hotSpotText) { TCHAR requestType[20]; int requestTypeLength = 0; @@ -1298,11 +1298,11 @@ void webRequest(int &firstPos, char* hotSpotText) } - int triggerPos = strlen(hotSpotText)+firstPos-requestTypeLength; + sptr_t triggerPos = strlen(hotSpotText)+firstPos-requestTypeLength; //TODO: rewrite this part so that it doesn't rely on searchNext, and separate it out to another function to prepare for the implementation of "web snippet import" SendScintilla(SCI_GOTOPOS,firstPos,0); - int spot1 = searchNext("://"); - int serverStart; + sptr_t spot1 = searchNext("://"); + sptr_t serverStart; if ((spot1<0) || (spot1>triggerPos)) { serverStart = firstPos; @@ -1312,9 +1312,9 @@ void webRequest(int &firstPos, char* hotSpotText) } SendScintilla(SCI_GOTOPOS,serverStart,0); - int spot2 = searchNext("/"); + sptr_t spot2 = searchNext("/"); - int serverEnd; + sptr_t serverEnd; if (spot2<0 || spot1>triggerPos) { serverEnd = triggerPos; @@ -1379,11 +1379,11 @@ void webRequest(int &firstPos, char* hotSpotText) // _pclose( pPipe ); //} -void executeCommand(int &firstPos, char* hotSpotText) +void executeCommand(sptr_t &firstPos, char* hotSpotText) { //TODO: cater the problem that the path can have spaces..... as shown in the security remarks in http://msdn.microsoft.com/en-us/library/ms682425%28v=vs.85%29.aspx - int triggerPos = strlen(hotSpotText)+firstPos; + sptr_t triggerPos = strlen(hotSpotText)+firstPos; ::SendScintilla(SCI_SETSEL,firstPos,triggerPos); ::SendScintilla(SCI_REPLACESEL,0,(LPARAM)""); @@ -1660,12 +1660,12 @@ std::string evaluateCall(char* expression) } -void evaluateHotSpot(int &firstPos, char* hotSpotText) +void evaluateHotSpot(sptr_t &firstPos, char* hotSpotText) { std::string evaluateResult; //TODO: should allow for a more elaborate comparison output - int triggerPos = strlen(hotSpotText)+firstPos; + sptr_t triggerPos = strlen(hotSpotText)+firstPos; SendScintilla(SCI_GOTOPOS,firstPos,0); int mode = 0; @@ -1673,14 +1673,14 @@ void evaluateHotSpot(int &firstPos, char* hotSpotText) char delimiter1 = '?'; char delimiter2 = ':'; std::string verboseText = " => "; - int offset=0; + sptr_t offset=0; if (strncmp(hotSpotText,"VERBOSE'",8) == 0) { mode = 1; ::SendScintilla(SCI_GOTOPOS,firstPos + 8,0); - int delimitEnd = searchNext("':"); + sptr_t delimitEnd = searchNext("':"); if ((delimitEnd >= 0) && (delimitEnd < firstPos+strlen(hotSpotText))) { @@ -1702,7 +1702,7 @@ void evaluateHotSpot(int &firstPos, char* hotSpotText) mode = 0; ::SendScintilla(SCI_GOTOPOS,firstPos + 8,0); - int delimitEnd = searchNext("':"); + sptr_t delimitEnd = searchNext("':"); if ((delimitEnd >= 0) && (delimitEnd < firstPos+strlen(hotSpotText))) { @@ -1765,7 +1765,7 @@ void evaluateHotSpot(int &firstPos, char* hotSpotText) double d = toDouble(evaluateResult); - if (d > secondSplit.size()-1) d = secondSplit.size()-1; + if (d > secondSplit.size()-1) d = (double)(secondSplit.size()-1); else if (d < 0) d = 0; evaluateResult = secondSplit[d]; @@ -1785,10 +1785,10 @@ void evaluateHotSpot(int &firstPos, char* hotSpotText) delete [] result; } -void launchMessageBox(int &firstPos, char* hotSpotText) +void launchMessageBox(sptr_t &firstPos, char* hotSpotText) { //TODO: need to find a better way to organize different types of messageboxes, there is probably no need to include all of them - int triggerPos = strlen(hotSpotText)+firstPos; + sptr_t triggerPos = strlen(hotSpotText)+firstPos; ::SendScintilla(SCI_SETSEL,firstPos,triggerPos); char* getTerm; @@ -1844,14 +1844,14 @@ void launchMessageBox(int &firstPos, char* hotSpotText) delete [] getTermWide; } -void textCopyCut(int sourceType, int operationType, int &firstPos, char* hotSpotText, int &startingPos, int &checkPoint) +void textCopyCut(int sourceType, int operationType, sptr_t &firstPos, char* hotSpotText, sptr_t &startingPos, sptr_t &checkPoint) { ::SendScintilla(SCI_REPLACESEL,0,(LPARAM)""); if (firstPos != 0) { - int scriptStart; - int selectionStart; - int selectionEnd; + sptr_t scriptStart; + sptr_t selectionStart; + sptr_t selectionEnd; //::SendScintilla(SCI_SETSEL,firstPos-1,firstPos); //::SendScintilla(SCI_REPLACESEL,0,(LPARAM)""); @@ -1894,9 +1894,9 @@ void textCopyCut(int sourceType, int operationType, int &firstPos, char* hotSpot paramNumber = 1; } - int targetLine = (::SendScintilla(SCI_LINEFROMPOSITION,firstPos-1,0)) - paramNumber + 1; + sptr_t targetLine = (::SendScintilla(SCI_LINEFROMPOSITION,firstPos-1,0)) - paramNumber + 1; if (targetLine<0) targetLine = 0; - int targetPos = ::SendScintilla(SCI_POSITIONFROMLINE,targetLine,0); + sptr_t targetPos = ::SendScintilla(SCI_POSITIONFROMLINE,targetLine,0); ::SendScintilla(SCI_SETSELECTION, targetPos, firstPos-1); @@ -1912,7 +1912,7 @@ void textCopyCut(int sourceType, int operationType, int &firstPos, char* hotSpot getTerm = new char[strlen(hotSpotText)]; strcpy(getTerm,hotSpotText+keywordLength); - int scriptFound = -1; + sptr_t scriptFound = -1; if (strlen(getTerm)>0) scriptFound = searchPrev(getTerm); delete [] getTerm; @@ -1984,10 +1984,10 @@ void textCopyCut(int sourceType, int operationType, int &firstPos, char* hotSpot } -void keyWordSpot(int &firstPos, char* hotSpotText, int &startingPos, int &checkPoint) +void keyWordSpot(sptr_t &firstPos, char* hotSpotText, sptr_t &startingPos, sptr_t &checkPoint) { - int hotSpotTextLength = strlen(hotSpotText); - int triggerPos = hotSpotTextLength+firstPos; + size_t hotSpotTextLength = strlen(hotSpotText); + sptr_t triggerPos = hotSpotTextLength+firstPos; ::SendScintilla(SCI_SETSEL,firstPos,triggerPos); //TODO: At least I should rearrange the keyword a little bit for efficiency @@ -2198,7 +2198,7 @@ void keyWordSpot(int &firstPos, char* hotSpotText, int &startingPos, int &checkP if (fileStream.is_open()) { fileStream.seekg (0, std::ios::end); - int length = fileStream.tellg(); + std::streamoff length = fileStream.tellg(); fileStream.seekg (0, std::ios::beg); buffer = new char [length+1]; @@ -2222,7 +2222,7 @@ void keyWordSpot(int &firstPos, char* hotSpotText, int &startingPos, int &checkP if (fileStream.is_open()) { fileStream.seekg (0, std::ios::end); - int length = fileStream.tellg(); + std::streamoff length = fileStream.tellg(); fileStream.seekg (0, std::ios::beg); buffer = new char [length+1]; @@ -2477,7 +2477,7 @@ void searchAndReplace(std::string key, std::string text, bool regexp) char* replaceText = new char[text.length()+1]; strcpy(searchKey,key.c_str()); strcpy(replaceText,text.c_str()); - int keySpot = -1; + sptr_t keySpot = -1; keySpot = searchNext(searchKey,regexp); while (keySpot >= 0) @@ -2592,7 +2592,7 @@ bool fingerTextListActive() } -int hotSpotNavigation(char* tagSign, char* tagTail) +sptr_t hotSpotNavigation(char* tagSign, char* tagTail) { int retVal = 0; // TODO: consolidate this part with dynamic hotspots? @@ -2606,7 +2606,7 @@ int hotSpotNavigation(char* tagSign, char* tagTail) char *hotSpotText; char *hotSpot; - int tagSpot = searchNext(tagTail); // Find the tail first so that nested snippets are triggered correctly + sptr_t tagSpot = searchNext(tagTail); // Find the tail first so that nested snippets are triggered correctly if (tagSpot >= 0) { @@ -2616,8 +2616,8 @@ int hotSpotNavigation(char* tagSign, char* tagTail) //int tailPos = ::SendScintilla(SCI_GETCURRENTPOS,0,0); if (searchPrev(tagSign) >= 0) { - int firstPos = ::SendScintilla(SCI_GETCURRENTPOS,0,0); - int secondPos = 0; + sptr_t firstPos = ::SendScintilla(SCI_GETCURRENTPOS,0,0); + sptr_t secondPos = 0; grabHotSpotContent(&hotSpotText, &hotSpot, firstPos, secondPos, tagSignLength, tagSpot); if (strncmp(hotSpotText,"(lis)",5) == 0) @@ -2636,7 +2636,7 @@ int hotSpotNavigation(char* tagSign, char* tagTail) ::SendScintilla(SCI_REPLACESEL, 0, (LPARAM)hotSpotText); ::SendScintilla(SCI_GOTOPOS,firstPos,0); - int triggerPos = firstPos + strlen(hotSpotText); + sptr_t triggerPos = firstPos + strlen(hotSpotText); ::SendScintilla(SCI_SETSELECTION,firstPos,firstPos+5); ::SendScintilla(SCI_REPLACESEL,0,(LPARAM)""); triggerPos -= 5; @@ -2645,13 +2645,13 @@ int hotSpotNavigation(char* tagSign, char* tagTail) int mode = 0; char* preParam; char delimiter = '|'; - int offset=0; + sptr_t offset=0; if (strncmp(hotSpotText+5,"DELIMIT'",8) == 0) // TODO: the +5 is not necessary, should delete the (opt) first...... { mode = 0; ::SendScintilla(SCI_GOTOPOS,firstPos + 8,0); - int delimitEnd = searchNext("':"); + sptr_t delimitEnd = searchNext("':"); if ((delimitEnd >= 0) && (delimitEnd < triggerPos)) { @@ -2696,7 +2696,7 @@ int hotSpotNavigation(char* tagSign, char* tagTail) std::vector rangeString = toVectorString(getTerm,'-'); delete [] getTerm; - int numLength = 1; + size_t numLength = 1; long rangeStart; long rangeEnd; @@ -2719,7 +2719,7 @@ int hotSpotNavigation(char* tagSign, char* tagTail) rangeStart = abs(rangeStart); rangeEnd = abs(rangeEnd); - int length; + size_t length; if (rangeEnd>=rangeStart) { for (int i = rangeStart; i<=rangeEnd; i++) @@ -2826,8 +2826,8 @@ int hotSpotNavigation(char* tagSign, char* tagTail) ::SendScintilla(SCI_REPLACESEL, 0, (LPARAM)hotSpotText); ::SendScintilla(SCI_GOTOPOS,firstPos,0); - int hotSpotFound=-1; - int tempPos[100]; + sptr_t hotSpotFound=-1; + sptr_t tempPos[100]; int i=1; //TODO: consider refactor this part to another function for (i=1;i<=98;i++) @@ -2883,7 +2883,7 @@ int hotSpotNavigation(char* tagSign, char* tagTail) return retVal; } -int grabHotSpotContent(char **hotSpotText,char **hotSpot, int firstPos, int &secondPos, int signLength, int tailPos) +int grabHotSpotContent(char **hotSpotText,char **hotSpot, sptr_t firstPos, sptr_t&secondPos, int signLength, sptr_t tailPos) { int spotType = 0; @@ -2982,8 +2982,8 @@ void showPreview(bool top,bool insertion) char* buffer = toCharArray(bufferWide); buffer = quickStrip(buffer, ' '); - int scopeLength = ::strchr(buffer,'>') - buffer - 1; - int triggerTextLength = strlen(buffer)-scopeLength - 2; + size_t scopeLength = ::strchr(buffer,'>') - buffer - 1; + size_t triggerTextLength = strlen(buffer)-scopeLength - 2; char* tempTriggerText = new char [ triggerTextLength+1]; char* tempScope = new char[scopeLength+1]; @@ -3152,9 +3152,9 @@ void showPreview(bool top,bool insertion) -std::vector snippetTextBrokenDown(std::string editText, std::vector params, char** tempTriggerText, char** snippetContent, int position) +std::vector snippetTextBrokenDown(std::string editText, std::vector params, char** tempTriggerText, char** snippetContent, size_t position) { - int location = 0; + size_t location = 0; if (position<=editText.length()) { @@ -3185,8 +3185,8 @@ std::vector snippetTextBrokenDown(std::string editText, std::vector std::vector spotVector; - int endPos; - int startPos; + sptr_t endPos; + sptr_t startPos; int i = g_listLength-1; do @@ -3217,7 +3217,7 @@ std::vector snippetTextBrokenDown(std::string editText, std::vector } else { ::SendScintilla(SCI_SETSEL,startPos,endPos); - int found = -1; + sptr_t found = -1; do { ::SendScintilla(SCI_REPLACESEL,0,(LPARAM)""); @@ -3315,20 +3315,20 @@ void insertEndSign() //} -void insertTagSign(int type) +void insertTagSign(LRESULT type) { if (g_editorView) { - int posStart = ::SendScintilla(SCI_GETSELECTIONSTART,0,0); - int lineCurrent = ::SendScintilla(SCI_LINEFROMPOSITION, posStart, 0); + sptr_t posStart = ::SendScintilla(SCI_GETSELECTIONSTART,0,0); + sptr_t lineCurrent = ::SendScintilla(SCI_LINEFROMPOSITION, posStart, 0); if (lineCurrent<3) ::SendScintilla(SCI_GOTOLINE,3,0); - int start = -1; - int end = -1; + sptr_t start = -1; + sptr_t end = -1; switch (type) { @@ -3425,16 +3425,16 @@ void insertTagSign(int type) } -bool replaceTag(char *expanded, int &posCurrent, int &posBeforeTag) +bool replaceTag(char *expanded, sptr_t &posCurrent, sptr_t &posBeforeTag) { char *expanded_eolfix; - int eolmode = ::SendScintilla(SCI_GETEOLMODE, 0, 0); + sptr_t eolmode = ::SendScintilla(SCI_GETEOLMODE, 0, 0); char *eol[3] = {"\r\n","\r","\n"}; expanded_eolfix = replaceAll(expanded, "\n", eol[eolmode]); - int lineCurrent = ::SendScintilla(SCI_LINEFROMPOSITION, posCurrent, 0); - int initialIndent = ::SendScintilla(SCI_GETLINEINDENTATION, lineCurrent, 0); + sptr_t lineCurrent = ::SendScintilla(SCI_LINEFROMPOSITION, posCurrent, 0); + sptr_t initialIndent = ::SendScintilla(SCI_GETLINEINDENTATION, lineCurrent, 0); ::SendScintilla(SCI_INSERTTEXT, posCurrent, (LPARAM)"____`[SnippetInserting]"); @@ -3450,15 +3450,15 @@ bool replaceTag(char *expanded, int &posCurrent, int &posBeforeTag) ::SendScintilla(SCI_GOTOPOS,posBeforeTag,0); searchNext("`[SnippetInserting]"); - int posEndOfInsertedText = ::SendScintilla(SCI_GETCURRENTPOS,0,0)+19; + sptr_t posEndOfInsertedText = ::SendScintilla(SCI_GETCURRENTPOS,0,0)+19; // adjust indentation according to initial indentation if (pc.configInt[INDENT_REFERENCE]==1) { - int lineInsertedSnippet = ::SendScintilla(SCI_LINEFROMPOSITION, posEndOfInsertedText, 0); + sptr_t lineInsertedSnippet = ::SendScintilla(SCI_LINEFROMPOSITION, posEndOfInsertedText, 0); - int lineIndent=0; - for (int i=lineCurrent+1;i<=lineInsertedSnippet;i++) + sptr_t lineIndent=0; + for (sptr_t i=lineCurrent+1;i<=lineInsertedSnippet;i++) { lineIndent = ::SendScintilla(SCI_GETLINEINDENTATION, i, 0); ::SendScintilla(SCI_SETLINEINDENTATION, i, initialIndent+lineIndent); @@ -3469,14 +3469,14 @@ bool replaceTag(char *expanded, int &posCurrent, int &posBeforeTag) ::SendScintilla(SCI_GOTOPOS,posBeforeTag,0); searchNext("[>END<]"); - int posEndOfSnippet = ::SendScintilla(SCI_GETCURRENTPOS,0,0); + sptr_t posEndOfSnippet = ::SendScintilla(SCI_GETCURRENTPOS,0,0); ::SendScintilla(SCI_SETSELECTION,posEndOfSnippet,posEndOfInsertedText); ::SendScintilla(SCI_REPLACESEL, 0, (LPARAM)""); ::SendScintilla(SCI_GOTOPOS,posBeforeTag,0); //int stopFound = searchNext(g_stopCharArray); - int stopFound = searchNext("\\$\\[.\\[",true); + sptr_t stopFound = searchNext("\\$\\[.\\[",true); //int stopFound = -1; if (stopFound"; - int scopeLength; + size_t scopeLength; scopeLength = maxlength - newText.length(); if (scopeLength < 3) scopeLength = 3; for (int i=0;i generateScopeList() } -bool triggerTag(int &posCurrent, int triggerLength) +bool triggerTag(sptr_t &posCurrent, sptr_t triggerLength) { - int paramPos = -1; + sptr_t paramPos = -1; char* previousChar; sciGetText(&previousChar, posCurrent-1, posCurrent); if (strcmp(previousChar,")")==0) paramPos = ::SendScintilla(SCI_BRACEMATCH,posCurrent-1,0); @@ -5321,7 +5321,7 @@ bool triggerTag(int &posCurrent, int triggerLength) bool tagFound = false; char *tag; - int tagLength = getCurrentTag(posCurrent, &tag, triggerLength); + size_t tagLength = getCurrentTag(posCurrent, &tag, triggerLength); if (((triggerLength<=0) && (tag[0] == '_')) || (tagLength == 0)) { @@ -5329,7 +5329,7 @@ bool triggerTag(int &posCurrent, int triggerLength) } else if (tagLength > 0) //TODO: changing this to >0 fixed the problem of tag_tab_completion, but need to investigate more about the side effect { - int posBeforeTag = posCurrent - tagLength; + sptr_t posBeforeTag = posCurrent - tagLength; std::vector scopeList = generateScopeList(); @@ -5359,8 +5359,8 @@ bool triggerTag(int &posCurrent, int triggerLength) if (paramPos>=0) { // Here the logic is, if it's chain snippet triggering, triggerLength>=0 and so the BEGINUNDOACTION is not going to fire. other wise, it will fire and tagFound will be equal to true. - int paramStart = ::SendScintilla(SCI_GETCURRENTPOS,0,0); - int paramEnd = ::SendScintilla(SCI_BRACEMATCH,paramStart,0) + 1; + sptr_t paramStart = ::SendScintilla(SCI_GETCURRENTPOS,0,0); + sptr_t paramEnd = ::SendScintilla(SCI_BRACEMATCH,paramStart,0) + 1; if (triggerLength<=0) { @@ -5653,7 +5653,7 @@ void httpToFile(TCHAR* server, TCHAR* request, TCHAR* requestType, TCHAR* pathWi -std::vector smartSplit(int start, int end, char delimiter, int parts) +std::vector smartSplit(sptr_t start, sptr_t end, TCHAR delimiter, int parts) { char filler; if (delimiter!=0) @@ -5668,8 +5668,8 @@ std::vector smartSplit(int start, int end, char delimiter, int part std::vector positions; char* partToSplit; sciGetText(&partToSplit, start, end); - int signSpot; - int tailSpot; + sptr_t signSpot; + sptr_t tailSpot; char* tagSignGet; char* tagTailGet; @@ -5690,7 +5690,7 @@ std::vector smartSplit(int start, int end, char delimiter, int part tailSpot = searchNextMatchedTail(tagSignGet,tagTailGet); if (tailSpot <= end && tailSpot> start) { - for (int i = signSpot - start; i smartSplit(int start, int end, char delimiter, int part positions.push_back(retVal[i].length()); } - int caret = start; + sptr_t caret = start; char* tempString; for (i = 0; i 0) || (dynamicSpot))) && (outBound)) { - int prevPos = g_lastTriggerPosition; + sptr_t prevPos = g_lastTriggerPosition; do { g_lastTriggerPosition = prevPos; @@ -5940,10 +5940,10 @@ void doTabActivate(bool navOnly) ::SendScintilla(SCI_AUTOCCOMPLETE,0,0); autoComplete = 1; } - int posCurrent = ::SendScintilla(SCI_GETCURRENTPOS,0,0); + sptr_t posCurrent = ::SendScintilla(SCI_GETCURRENTPOS,0,0); //int posTriggerStart = ::SendScintilla(SCI_GETCURRENTPOS,0,0); - int lineCurrent = ::SendScintilla(SCI_LINEFROMPOSITION,posCurrent,0); + sptr_t lineCurrent = ::SendScintilla(SCI_LINEFROMPOSITION,posCurrent,0); if ((g_editorView == true) && (lineCurrent <=2)) { @@ -5965,8 +5965,8 @@ void doTabActivate(bool navOnly) pc.configInt[LIVE_HINT_UPDATE]--; g_selectionMonitor--; - int posSelectionStart = ::SendScintilla(SCI_GETSELECTIONSTART,0,0); - int posSelectionEnd = ::SendScintilla(SCI_GETSELECTIONEND,0,0); + sptr_t posSelectionStart = ::SendScintilla(SCI_GETSELECTIONSTART,0,0); + sptr_t posSelectionEnd = ::SendScintilla(SCI_GETSELECTIONEND,0,0); if (g_optionMode) { @@ -5995,11 +5995,11 @@ void doTabActivate(bool navOnly) // the SCI_BEGINUNDOACTION is sent. - int navSpot = 0; + sptr_t navSpot = 0; bool dynamicSpotTemp = false; bool dynamicSpot = false; bool outBound = false; - int prevHotspotPos = -1; + sptr_t prevHotspotPos = -1; if (g_editorView == false) { @@ -6059,7 +6059,7 @@ void doTabActivate(bool navOnly) if ((!((navSpot > 0) || (dynamicSpot))) && (outBound)) { - int prevPos = g_lastTriggerPosition; //TODO: should be able to restructure and use the prevHotspotPos defined before + sptr_t prevPos = g_lastTriggerPosition; //TODO: should be able to restructure and use the prevHotspotPos defined before do { g_lastTriggerPosition = prevPos; diff --git a/PluginDefinition.h b/PluginDefinition.h index fea2b46..98a7907 100644 --- a/PluginDefinition.h +++ b/PluginDefinition.h @@ -86,22 +86,22 @@ void showInsertionDlg(); void setInsertionDialogState(int state); void toggleDisable(); -void restoreTab(int &posCurrent, int &posSelectionStart, int &posSelectionEnd); -int searchPrevMatchedSign(char* tagSign, char* tagTail); -int searchPrevMatchedTail(char* tagSign, char* tagTail); -bool dynamicHotspot(int &startingPos, char* tagSign = "$[![", char* tagTail = "]!]"); -void paramsInsertion(int &firstPos, char* hotSpot, int &checkPoint); -void textCopyCut(int sourceType, int operationType, int &firstPos, char* hotSpotText, int &startingPos, int &checkPoint); -void keyWordSpot(int &firstPos, char* hotSpotText, int &startingPos, int &checkPoint); -void webRequest(int &firstPos, char* hotSpotText); -void executeCommand(int &firstPos, char* hotSpotText); -void launchMessageBox(int &firstPos, char* hotSpotText); +void restoreTab(sptr_t &posCurrent, sptr_t &posSelectionStart, sptr_t &posSelectionEnd); +sptr_t searchPrevMatchedSign(char* tagSign, char* tagTail); +sptr_t searchPrevMatchedTail(char* tagSign, char* tagTail); +bool dynamicHotspot(sptr_t &startingPos, char* tagSign = "$[![", char* tagTail = "]!]"); +void paramsInsertion(sptr_t &firstPos, char* hotSpot, sptr_t &checkPoint); +void textCopyCut(int sourceType, int operationType, sptr_t &firstPos, char* hotSpotText, sptr_t &startingPos, sptr_t &checkPoint); +void keyWordSpot(sptr_t &firstPos, char* hotSpotText, sptr_t &startingPos, sptr_t &checkPoint); +void webRequest(sptr_t &firstPos, char* hotSpotText); +void executeCommand(sptr_t &firstPos, char* hotSpotText); +void launchMessageBox(sptr_t &firstPos, char* hotSpotText); std::string evaluateCall(char* expression); -void evaluateHotSpot(int &firstPos, char* hotSpotText); -void chainSnippet(int &firstPos, char* hotSpotText); -int hotSpotNavigation(char* tagSign = "$[![", char* tagTail = "]!]"); +void evaluateHotSpot(sptr_t &firstPos, char* hotSpotText); +void chainSnippet(sptr_t &firstPos, char* hotSpotText); +sptr_t hotSpotNavigation(char* tagSign = "$[![", char* tagTail = "]!]"); -int grabHotSpotContent(char **hotSpotText,char **hotSpot, int firstPos, int &secondPos, int signLength, int tailPos); +int grabHotSpotContent(char **hotSpotText,char **hotSpot, sptr_t firstPos, sptr_t&secondPos, int signLength, sptr_t tailPos); void showPreview(bool top = false,bool insertion = false); void doSelectionToSnippet(); @@ -119,18 +119,18 @@ void insertOptionSign(); void insertListSign(); void insertEndSign(); //void insertTagSign(char * tagSign); -void insertTagSign(int type); +void insertTagSign(LRESULT type); void searchAndReplace(std::string key, std::string text, bool regExp = false); bool getLineChecked(char **buffer, int lineNumber, TCHAR* errorText); -bool replaceTag(char *expanded, int &posCurrent, int &posBeforeTag); +bool replaceTag(char *expanded, sptr_t &posCurrent, sptr_t &posBeforeTag); void openDatabase(); -int getCurrentTag(int posCurrent, char **buffer, int triggerLength = 0); +size_t getCurrentTag(sptr_t posCurrent, char **buffer, sptr_t triggerLength = 0); void showSnippetDock(); void updateDockItems(bool withContent = true, bool withAll = false, char* tag = "%", bool populate = false, bool populateInsertion = false, bool searchType = false); -wchar_t* constructDockItems(std::string scope, std::string triggerText, int maxlength); +wchar_t* constructDockItems(std::string scope, std::string triggerText, size_t maxlength); void populateDockItems(bool withAll = true, bool insertion = false); bool fingerTextListActive(); @@ -185,12 +185,12 @@ void setFocusToWindow(); void searchWindowByName(std::string searchKey = "", HWND parentWindow = 0); //std::vector snippetTextBrokenDown(std::string editText, std::vector vs, char* tempTriggerText, char* snippetContent, int position); -std::vector snippetTextBrokenDown(std::string editText, std::vector params, char** tempTriggerText, char** snippetContent, int position); +std::vector snippetTextBrokenDown(std::string editText, std::vector params, char** tempTriggerText, char** snippetContent, size_t position); void selectionMonitor(int contentChange); std::vector generateScopeList(); -bool triggerTag(int &posCurrent,int triggerLength = 0); -int tagComplete(); +bool triggerTag(sptr_t &posCurrent, sptr_t triggerLength = 0); +sptr_t tagComplete(); void doTagComplete(); bool diagActivate(char* tag); void triggerDiagInsertion(); @@ -198,7 +198,7 @@ void triggerDiagInsertion(); void tabActivate(); void doTabActivate(bool navOnly = false); -std::vector smartSplit(int start, int end, char delimiter, int parts = 0); +std::vector smartSplit(sptr_t start, sptr_t end, TCHAR delimiter, int parts = 0); void removehook(); void installhook(); From 169b808d312126016938cd6f940a48258c309a97 Mon Sep 17 00:00:00 2001 From: amlan-sw Date: Sun, 26 Mar 2023 09:02:59 +0700 Subject: [PATCH 7/7] screenshot of build specs using VS2023 --- vs2022-x64-i386-build-specs.png | Bin 0 -> 53789 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 vs2022-x64-i386-build-specs.png diff --git a/vs2022-x64-i386-build-specs.png b/vs2022-x64-i386-build-specs.png new file mode 100644 index 0000000000000000000000000000000000000000..2c3f4737d1dc340b3a5204baa35778ad931e1ed6 GIT binary patch literal 53789 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 NY|p{n%w5NR{1g70wu1lw literal 0 HcmV?d00001