⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 plstafcommandparser.cpp

📁 Software Testing Automation Framework (STAF)的开发代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*****************************************************************************//* Software Testing Automation Framework (STAF)                              *//* (C) Copyright IBM Corp. 2004                                              *//*                                                                           *//* This software is licensed under the Common Public License (CPL) V1.0.     *//*****************************************************************************/#define PERL_NO_GET_CONTEXT#include "STAFCommandParser.h"#include "EXTERN.h"#include "perl.h"#include "XSUB.h"//The following is needed to compile on z/OS#ifdef THING    #undef THING#endif#include "PLSTAFCommandParser.h"XS(XS_STAFCommandParser_new){    dXSARGS;    if (items < 1 || items > 3)        Perl_croak(aTHX_ "Usage: $parser = STAFCommandParser->new($maxArgs=0, $caseSensitive=0)");    {        //cerr << "Entering constructor (STAFCommandParser)." << endl;        const char *    CLASS = (const char *)SvPV_nolen(ST(0));        unsigned int    maxArgs;        unsigned int            caseSensitive;        STAFCommandParser *RETVAL;        if (items < 2)            maxArgs = 0;        else {            maxArgs = (unsigned int)SvUV(ST(1));        }        if (items < 3)            caseSensitive = false;        else {            caseSensitive = SvTRUE(ST(2));        }        RETVAL = new STAFCommandParser(maxArgs, caseSensitive);        if (RETVAL == NULL) {            Perl_croak(aTHX_ "Failed due to insufficient memory.");        }        ST(0) = sv_newmortal();        sv_setref_pv(ST(0), CLASS, (void*)RETVAL);        //cerr << "Leaving constructor (STAFCommandParser)." << endl;    }    XSRETURN(1);}XS(XS_STAFCommandParser_DESTROY){    dXSARGS;    if (items != 1)        Perl_croak(aTHX_ "Usage: $parser->DESTROY()");    {        //cerr << "Entering destructor (STAFCommandParser)." << endl;        STAFCommandParser *THING;        if (SvROK(ST(0))) {            IV tmp = SvIV((SV*)SvRV(ST(0)));            THING = INT2PTR(STAFCommandParser *,tmp);        }        else            Perl_croak(aTHX_ "Object is not a reference");        delete THING;        //cerr << "Leaving destructor (STAFCommandParser)." << endl;    }    XSRETURN_EMPTY;}XS(XS_STAFCommandParser_addOption){    dXSARGS;    if (items != 4)        Perl_croak(aTHX_ "Usage: $parser->addOption($optionName, $numAllowed, $valueReq)");    {        //cerr << "Entering addOption." << endl;        STAFCommandParser *THING;        STAFString       optionName;        unsigned int     numAllowed = (unsigned int)SvUV(ST(2));        STAFCommandParser::ValueRequirement valueReq   =            (STAFCommandParser::ValueRequirement)SvIV(ST(3));        if (sv_derived_from(ST(0), "STAFCommandParser")) {            IV tmp = SvIV((SV*)SvRV(ST(0)));            THING = INT2PTR(STAFCommandParser *,tmp);        }        else            Perl_croak(aTHX_ "Object is not of type STAFCommandParser");        if (SvPOK(ST(1))) {            STRLEN len;            #ifdef STAF_OS_NAME_ZOS                char *tmp = (char *)SvPVbyte(ST(1), len);                optionName = STAFString(tmp, len);            #else                 char *tmp = (char *)SvPVutf8(ST(1), len);                optionName = STAFString(tmp, len, STAFString::kUTF8);            #endif        }        else            Perl_croak(aTHX_ "ST(1) is not of type STAFString");        THING->addOption(optionName, numAllowed, valueReq);        //cerr << "Leaving addOption." << endl;    }    XSRETURN_EMPTY;}XS(XS_STAFCommandParser_addOptionGroup){    dXSARGS;    if (items != 4)        Perl_croak(aTHX_ "Usage: $parser->addOptionGroup($optionGroup, $minAllowed, $maxAllowed)");    {        //cerr << "Entering addOptionGroup." << endl;        STAFCommandParser *THING;        STAFString      optionGroup;        unsigned int    minAllowed = (unsigned int)SvUV(ST(2));        unsigned int    maxAllowed = (unsigned int)SvUV(ST(3));        if (sv_derived_from(ST(0), "STAFCommandParser")) {            IV tmp = SvIV((SV*)SvRV(ST(0)));            THING = INT2PTR(STAFCommandParser *,tmp);        }        else            Perl_croak(aTHX_ "Object is not of type STAFCommandParser");        if (SvPOK(ST(1))) {            STRLEN len;             #ifdef STAF_OS_NAME_ZOS                char *tmp = (char *)SvPVbyte(ST(1), len);                optionGroup = STAFString(tmp, len);            #else                 char *tmp = (char *)SvPVutf8(ST(1), len);                optionGroup = STAFString(tmp, len, STAFString::kUTF8);            #endif        }        else            Perl_croak(aTHX_ "ST(1) is not of type STAFString");        THING->addOptionGroup(optionGroup, minAllowed, maxAllowed);        //cerr << "Leaving addOptionGroup." << endl;    }    XSRETURN_EMPTY;}XS(XS_STAFCommandParser_addOptionNeed){    dXSARGS;    if (items != 3)        Perl_croak(aTHX_ "Usage: $parser->addOptionNeed($needers, $needees)");    {        //cerr << "Entering addOptionNeed." << endl;        STAFCommandParser *THING;        STAFString    needers;        STAFString    needees;        if (sv_derived_from(ST(0), "STAFCommandParser")) {            IV tmp = SvIV((SV*)SvRV(ST(0)));            THING = INT2PTR(STAFCommandParser *,tmp);        }        else            Perl_croak(aTHX_ "Object is not of type STAFCommandParser");        if (SvPOK(ST(1))) {            STRLEN len;            #ifdef STAF_OS_NAME_ZOS                char *tmp = (char *)SvPVbyte(ST(1), len);                needers = STAFString(tmp, len);            #else                 char *tmp = (char *)SvPVutf8(ST(1), len);                needers = STAFString(tmp, len, STAFString::kUTF8);            #endif        }        else            Perl_croak(aTHX_ "ST(1) is not of type STAFString");        if (SvPOK(ST(2))) {            STRLEN len;            #ifdef STAF_OS_NAME_ZOS                char *tmp = (char *)SvPVbyte(ST(2), len);                needees = STAFString(tmp, len);            #else                 char *tmp = (char *)SvPVutf8(ST(2), len);                needees = STAFString(tmp, len, STAFString::kUTF8);            #endif        }        else            Perl_croak(aTHX_ "ST(2) is not of type STAFString");        THING->addOptionNeed(needers, needees);        //cerr << "Leaving addOptionNeed." << endl;    }    XSRETURN_EMPTY;}XS(XS_STAFCommandParser_parseRequest){    dXSARGS;    if (items != 2)        Perl_croak(aTHX_ "Usage: $result = $parser->parseRequest($request)");    {        //cerr << "Entering parse." << endl;        STAFCommandParser *THING;        STAFString    request;        STAFCommandParseResultPtr *RETVAL;        STAFCommandParseResultPtr result;         if (sv_derived_from(ST(0), "STAFCommandParser")) {            IV tmp = SvIV((SV*)SvRV(ST(0)));            THING = INT2PTR(STAFCommandParser *,tmp);        }        else            Perl_croak(aTHX_ "Object is not of type STAFCommandParser");        if (SvPOK(ST(1))) {            STRLEN len;            #ifdef STAF_OS_NAME_ZOS                char *tmp = (char *)SvPVbyte(ST(1), len);                request = STAFString(tmp, len);            #else                 char *tmp = (char *)SvPVutf8(ST(1), len);                request = STAFString(tmp, len, STAFString::kUTF8);            #endif        }        else            Perl_croak(aTHX_ "ST(1) is not of type STAFString");          result = THING->parse(request);        RETVAL = new STAFCommandParseResultPtr(result);          if (RETVAL == NULL) {            Perl_croak(aTHX_ "Failed due to insufficient memory.");        }        ST(0) = sv_newmortal();        sv_setref_pv(ST(0), "STAFCommandParseResultPtr", (void*)RETVAL);        //cerr << "Leaving parse." << endl;    }    XSRETURN(1);}XS(XS_STAFCommandParseResultPtr_rc){    dXSARGS;    if (items != 1)        Perl_croak(aTHX_ "Usage: $rc = $result->rc()");    {        //cerr << "Entering rc." << endl;        STAFCommandParseResultPtr *THING;        STAFRC_t     RETVAL;        dXSTARG;        if (sv_derived_from(ST(0), "STAFCommandParseResultPtr")) {            IV tmp = SvIV((SV*)SvRV(ST(0)));            THING = INT2PTR(STAFCommandParseResultPtr *,tmp);        }        else            Perl_croak(aTHX_ "Object is not of type STAFCommandParseResultPtr");        RETVAL = (*THING)->rc;        XSprePUSH;        PUSHu((UV)RETVAL);        //cerr << "Leaving rc." << endl;    }    XSRETURN(1);}XS(XS_STAFCommandParseResultPtr_errorBuffer){    dXSARGS;    if (items != 1)        Perl_croak(aTHX_ "Usage: $message = $result->errorBuffer()");    {        //cerr << "Entering errorBuffer." << endl;        STAFCommandParseResultPtr *THING;        STAFString  RETVAL;        if (sv_derived_from(ST(0), "STAFCommandParseResultPtr")) {            IV tmp = SvIV((SV*)SvRV(ST(0)));            THING = INT2PTR(STAFCommandParseResultPtr *,tmp);        }        else            Perl_croak(aTHX_ "Object is not of type STAFCommandParseResultPtr");        RETVAL = (*THING)->errorBuffer;        ST(0) = sv_newmortal();        {            unsigned int len;            const char *tmp;            #ifdef STAF_OS_NAME_ZOS                STAFStringBufferPtr ptr = RETVAL.toCurrentCodePage();                tmp = ptr->buffer();                len = ptr->length();                sv_setpvn((SV*)ST(0), tmp, len);            #else                tmp = RETVAL.buffer(&len);                sv_setpvn((SV*)ST(0), tmp, len);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -