diff options
Diffstat (limited to 'kxsldbg/kxsldbgpart/libxsldbg/param_cmds.cpp')
-rw-r--r-- | kxsldbg/kxsldbgpart/libxsldbg/param_cmds.cpp | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/kxsldbg/kxsldbgpart/libxsldbg/param_cmds.cpp b/kxsldbg/kxsldbgpart/libxsldbg/param_cmds.cpp new file mode 100644 index 00000000..e4255797 --- /dev/null +++ b/kxsldbg/kxsldbgpart/libxsldbg/param_cmds.cpp @@ -0,0 +1,175 @@ + +/*************************************************************************** + param_cmds.c - libxslt parameter commands for xsldbg + ------------------- + begin : Wed Nov 21 2001 + copyright : (C) 2001 by Keith Isdale + email : [email protected] + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include "xsldbg.h" +#include "debugXSL.h" +#include "options.h" + +#include "xsldbgmsg.h" +#include "xsldbgthread.h" /* for get thread status */ + + +/* ----------------------------------------- + + libxslt parameter related commands + + ------------------------------------------- */ + +/** + * xslDbgShellAddParam: + * @arg: A string comprised of two words separated by + * one or more spaces which are in UTF-8 + * + * Add a libxslt parameter to be sent to libxslt later on + * + * Returns 1 on success, + * 0 otherwise +*/ +int +xslDbgShellAddParam(xmlChar * arg) +{ + int result = 0; + parameterItemPtr paramItem = NULL; + static const char *errorPrompt = I18N_NOOP("Failed to add parameter"); + xmlChar *opts[2]; + + if (!arg) { + xsldbgGenericErrorFunc(i18n("Error: Invalid arguments for the command %1.\n").arg("addparam")); + }else{ + if ((xmlStrLen(arg) > 1) && splitString(arg, 2, opts) == 2) { + int count; + for (count = 0; count < arrayListCount(optionsGetParamItemList()); count++){ + paramItem = (parameterItemPtr)arrayListGet(optionsGetParamItemList(), count); + if (paramItem != NULL){ + if (xmlStrCmp(opts[0], paramItem->name) == 0){ + /* parameter exist just update its value */ + if (paramItem->value) + xmlFree(paramItem->value); + paramItem->value = xmlStrdup(opts[1]); + return 1; + } + } + } + paramItem = optionsParamItemNew(opts[0], opts[1]); + result = arrayListAdd(optionsGetParamItemList(), paramItem); + } else { + xsldbgGenericErrorFunc(i18n("Error: Invalid arguments for the command %1.\n").arg("addparam")); + } + } + if (!result) + xsldbgGenericErrorFunc(QString("Error: %1\n").arg(i18n(errorPrompt))); + else { + xsldbgGenericErrorFunc("\n"); + } + return result; +} + + +/** + * xslDbgShellDelParam: + * @arg: A single white space trimmed parameter number to look for + * + * Delet a libxslt parameter to be sent to libxslt later on + * + * Returns 1 if able to delete parameter @name, + * 0 otherwise + */ +int +xslDbgShellDelParam(xmlChar * arg) +{ + int result = 0; + static const char *errorPrompt = I18N_NOOP("Failed to delete parameter"); + long paramId; + xmlChar *opts[2]; + + if (!arg) { + xsldbgGenericErrorFunc(i18n("Error: Invalid arguments for the command %1.\n").arg("delparam")); + }else{ + if (xmlStrLen(arg) > 0) { + if (splitString(arg, 1, opts) == 1) { + if ((xmlStrlen(opts[0]) == 0) || + !sscanf((char *) opts[0], "%ld", ¶mId)) { + xsldbgGenericErrorFunc(i18n("Error: Unable to parse %1 as a line number.\n").arg(xsldbgText(opts[0]))); + } else { + result = + arrayListDelete(optionsGetParamItemList(), paramId); + if (!result) + xsldbgGenericErrorFunc(i18n("Error: Unable to find parameter %1.\n").arg(paramId)); + } + } else { + xsldbgGenericErrorFunc(i18n("Error: Invalid arguments for the command %1.\n").arg("delparam")); + } + } else { + /* Delete all parameters */ + arrayListEmpty(optionsGetParamItemList()); + result = 1; + } + } + if (!result) + xsldbgGenericErrorFunc(QString("Error: %1\n").arg(i18n(errorPrompt))); + else + xsldbgGenericErrorFunc("\n"); + + return result; +} + + +/** + * xslDbgShellShowParam: + * @arg: Not used + * + * Print list of current paramters + * + * Returns 1 on success, + * 0 otherwise + */ +int +xslDbgShellShowParam(xmlChar * arg) +{ + Q_UNUSED(arg); + int result = 0; + static const char *errorPrompt = I18N_NOOP("Unable to print parameters"); + + if (getThreadStatus() == XSLDBG_MSG_THREAD_RUN) { + int paramIndex = 0; + int itemCount = arrayListCount(optionsGetParamItemList()); + + notifyListStart(XSLDBG_MSG_PARAMETER_CHANGED); + + if (itemCount > 0) { + parameterItemPtr paramItem = NULL; + + while (paramIndex < itemCount) { + paramItem = (parameterItemPtr) + arrayListGet(optionsGetParamItemList(), paramIndex++); + if (paramItem != NULL) + notifyListQueue(paramItem); + } + } + notifyListSend(); + result = 1; + } else { + + if (optionsPrintParamList()) + result = 1; + else + xsldbgGenericErrorFunc(QString("Error: %1\n").arg(i18n(errorPrompt))); + xsldbgGenericErrorFunc("\n"); + } + return result; +} |