Example #1
0
/* ParseStatement - parse a statement */
void ParseStatement(ParseContext *c, Token tkn)
{
    /* dispatch on the statement keyword */
    switch (tkn) {
    case T_REM:
        /* just a comment so ignore the rest of the line */
        break;
    case T_DEF:
        ParseDef(c);
        break;
    case T_END_DEF:
        ParseEndDef(c);
        break;
    case T_DIM:
        ParseDim(c);
        break;
    case T_LET:
        ParseLet(c);
        break;
    case T_IF:
        ParseIf(c);
        break;
    case T_ELSE:
        ParseElse(c);
        break;
    case T_ELSE_IF:
        ParseElseIf(c);
        break;
    case T_END_IF:
        ParseEndIf(c);
        break;
    case T_END:
        ParseEnd(c);
        break;
    case T_FOR:
        ParseFor(c);
        break;
    case T_NEXT:
        ParseNext(c);
        break;
    case T_DO:
        ParseDo(c);
        break;
    case T_DO_WHILE:
        ParseDoWhile(c);
        break;
    case T_DO_UNTIL:
        ParseDoUntil(c);
        break;
    case T_LOOP:
        ParseLoop(c);
        break;
    case T_LOOP_WHILE:
        ParseLoopWhile(c);
        break;
    case T_LOOP_UNTIL:
        ParseLoopUntil(c);
        break;
    case T_STOP:
        ParseStop(c);
        break;
    case T_GOTO:
        ParseGoto(c);
        break;
    case T_RETURN:
        ParseReturn(c);
        break;
    case T_PRINT:
        ParsePrint(c);
        break;
    case T_IDENTIFIER:
        if (SkipSpaces(c) == ':') {
            DefineLabel(c, c->token, codeaddr(c));
            break;
        }
        UngetC(c);
    default:
        SaveToken(c, tkn);
        ParseImpliedLetOrFunctionCall(c);
        break;
    }
}
int CTcapParser::DoTcapParse(unsigned char* inbuf, int inbuf_len, struct TCAPParseResult *result, unsigned char tcaptpye)
{
    int iParseRslt = -1;


    char szDebug[255];
    memset(szDebug, 0, sizeof(szDebug));

    if (NULL == inbuf || inbuf_len <= 0)
    {
        Print("!!!WARN: %s:%s:DoTcapParse... the input parameter is error!", __FILE__, __FUNCTION__);
        return -1;
    }

    STcapIEHeader stTag;
    if(ParseIEHeader(inbuf, inbuf_len, &stTag) < 0)
    {
        Print("!!!WARN: %s::%d:TCAP MESSAGE PARSE TAG ERROR!", __FILE__, __LINE__);
        return -1;
    }


    memset(result,0,sizeof(*result));
    result->ucTcapMsgType = stTag.tagID;
    if(0 == tcaptpye) //ITU-T TCAP
    {
        switch (stTag.tagID)
        {
            case TCAP_MSG_BEGIN:
                iParseRslt = ParseBegin(stTag.pData, stTag.dataLen, result);
                break;

            case TCAP_MSG_CONTINUE:
                iParseRslt = ParseContinue(stTag.pData, stTag.dataLen, result);
                break;

            case TCAP_MSG_END:
                iParseRslt = ParseEnd(stTag.pData, stTag.dataLen, result);
                break;

            case TCAP_MSG_UNIDIRE:
                iParseRslt = ParseUnidire(stTag.pData, stTag.dataLen, result);
                break;

            case TCAP_MSG_ABORT:
                iParseRslt = ParseAbort(stTag.pData, stTag.dataLen, result);
                break;

            default:
                //sprintf(szDebug, "DoTcapParse... The unknown Tcap_Message is :%02x\n",stTag.tagID);
                //DEBUG(EN_PRINT_LEVEL_WARNING)(szDebug);
                Print("DoTcapParse... The unknown Tcap_Message is :%02x\n",stTag.tagID);
                break;
        }
    }
    else // ANSI TCAP
    {
        switch(stTag.tagID)
        {
            case ANSI_TCAP_PT_UNIDIRE:
                iParseRslt = ParseANSIUnidire(stTag.pData, stTag.dataLen, result);
                break;
            case ANSI_TCAP_PT_QWP:
                iParseRslt = ParseANSIQWP(stTag.pData, stTag.dataLen, result);
                break;
            case ANSI_TCAP_PT_NQWP:
                iParseRslt = ParseANSINQWP(stTag.pData, stTag.dataLen, result);
                break;
            case ANSI_TCAP_PT_RSP:
                iParseRslt = ParseANSIRsp(stTag.pData, stTag.dataLen, result);
                break;
            case ANSI_TCAP_PT_CWP:
                iParseRslt = ParseANSICWP(stTag.pData, stTag.dataLen, result);
                break;
            case ANSI_TCAP_PT_NCWP:
                iParseRslt = ParseANSINCWP(stTag.pData, stTag.dataLen, result);
                break;
            case ANSI_TCAP_PT_ABORT:
                iParseRslt = ParseANSIAbort(stTag.pData, stTag.dataLen, result);
                break;
            default:
                break;
        }
    }

    return iParseRslt;

}