From 9d8b90f654b5777f5c9d402fda445088f9fe374f Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Mon, 19 Nov 2012 14:10:40 +0100 Subject: Scintilla command ES accepting string parameter: if empty, pop value from stack otherwise pass string --- parser.cpp | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-) (limited to 'parser.cpp') diff --git a/parser.cpp b/parser.cpp index 049711f..cfeebd0 100644 --- a/parser.cpp +++ b/parser.cpp @@ -23,6 +23,7 @@ namespace States { StateFlowCommand flowcommand; StateCondCommand condcommand; StateECommand ecommand; + StateScintilla scintilla; StateInsert insert; StateSearch search; @@ -1052,8 +1053,9 @@ StateECommand::StateECommand() : State() { transitions['\0'] = this; transitions['B'] = &States::editfile; - transitions['W'] = &States::savefile; + transitions['S'] = &States::scintilla; transitions['Q'] = &States::eqcommand; + transitions['W'] = &States::savefile; } State * @@ -1073,20 +1075,6 @@ StateECommand::custom(gchar chr) throw (Error) ring.close(); break; - case 'S': { - BEGIN_EXEC(&States::start); - expressions.eval(); - if (!expressions.args()) - throw Error(" command requires at least a message code"); - - unsigned int iMessage = expressions.pop_num_calc(1, 0); - uptr_t wParam = expressions.pop_num_calc(1, 0); - sptr_t lParam = expressions.pop_num_calc(1, 0); - - expressions.push(interface.ssm(iMessage, wParam, lParam)); - break; - } - case 'X': BEGIN_EXEC(&States::start); @@ -1105,6 +1093,28 @@ StateECommand::custom(gchar chr) throw (Error) return &States::start; } +State * +StateScintilla::done(const gchar *str) throw (Error) +{ + unsigned int iMessage; + uptr_t wParam; + sptr_t lParam; + + BEGIN_EXEC(&States::start); + + expressions.eval(); + if (!expressions.args()) + throw Error(" command requires at least a message code"); + + iMessage = expressions.pop_num_calc(1, 0); + wParam = expressions.pop_num_calc(1, 0); + lParam = *str ? (sptr_t)str : expressions.pop_num_calc(1, 0); + + expressions.push(interface.ssm(iMessage, wParam, lParam)); + + return &States::start; +} + /* * NOTE: cannot support VideoTECO's I because * beginning and end of strings must be determined -- cgit v1.2.3