Exemplo n.º 1
0
// MEMBER      -> [ OBJECT s_dot ] <
//                k_type | k_name | k_attrib | k_version | k_uuid | k_uunm |
//                k_clsid | k_iid | k_value >
//
int P_Member(LubeToken token)
{
    ObjectType object;
    MemberType member;
    PSTATEDESC pDesc;

    if (IsObjectToken(token)) {
        object = GetObjectType(token);
        if (Object_None == object) object = s_pContext->m_curObject;

        if (_PeekToken() != Token_S_dot) {
            ErrorReport(Lube_E_InvalidMember, g_szCurrentToken);
            return Ret_Continue;
        }
        _GetToken(); // skip s_dot
        token = _GetToken();
    }
    else {
        object = s_pContext->m_curObject;
    }

    member = GetMemberType(object, token);
    if (Member_None == member) return Ret_Continue;

    pDesc = s_pContext->CreateBlockette(State_Member);
    if (!pDesc) {
        ErrorReport(Lube_E_OutOfMemory);
        return Ret_AbortOnError;
    }
    pDesc->object = object;
    pDesc->member = member;

    return Ret_Continue;
}
Exemplo n.º 2
0
// FUNC        -> ident s_lparen [ MEMBER | OBJECT | string ] s_rparen
//
int P_Func(const char *pszFunc, PSTATEDESC pDesc)
{
    int nIndex, nRet;
    LubeToken token;

    if (_PeekToken() != Token_S_lparen) {
        ErrorReport(Lube_E_UnexpectSymbol, pszFunc);
        return Ret_Continue;
    }

    nIndex = GetUserFuncIndex(pszFunc);
    if (nIndex < 0) {
        ErrorReport(Lube_E_UndefFunc, pszFunc);
        return Ret_AbortOnError;
    }
    _GetToken(); // skip s_lparen

    if (NULL == pDesc) {
        pDesc = s_pContext->CreateBlockette(State_Func);
        if (!pDesc) {
            ErrorReport(Lube_E_OutOfMemory);
            return Ret_AbortOnError;
        }
    }
    pDesc->dwExtra = (DWORD)nIndex;

    token = _GetToken();
    if (Token_string == token) {
        pDesc->uDataSize = strlen(g_szCurrentToken) + 1;
        pDesc->pvData = new char[pDesc->uDataSize];
        if (!pDesc->pvData) {
            ErrorReport(Lube_E_OutOfMemory);
            return Ret_AbortOnError;
        }
        strcpy((char *)pDesc->pvData, g_szCurrentToken);
        token = _GetToken();
    }
    else if (IsKeywordToken(token)) {
        nRet = GetMemberObject(token, pDesc);
        if (Ret_Continue != nRet) return nRet;
        token = _GetToken();
    }

    if (CheckUserFuncArg(nIndex, pDesc) < 0) {
        ErrorReport(Lube_E_InvalidFuncArg);
    }
    if (Token_S_rparen != token) {
        ErrorReport(Lube_E_ExpectSymbol, ")");
    }
    return Ret_Continue;
}
Exemplo n.º 3
0
status_t
CDDBQuery::GetSites(bool (*eachFunc)(const char *site, int port, const char *latitude,
		const char *longitude, const char *description, void *state), void *passThru)
{
	if (!_IsConnected())
		_Connect();

	BString tmp;

	tmp = "sites\n";
	STRACE((">%s", tmp.String()));

	if (fSocket.Send(tmp.String(), tmp.Length()) == -1)
		return B_ERROR;

	_ReadLine(tmp);

	if (tmp.FindFirst("210") == -1) {
		_Disconnect();
		return B_ERROR;
	}

	for (;;) {
		BString site;
		int32 sitePort;
		BString latitude;
		BString longitude;
		BString description;

		_ReadLine(tmp);
		if (tmp == ".")
			break;
		const char *scanner = tmp.String();

		scanner = _GetToken(scanner, site);
		BString portString;
		scanner = _GetToken(scanner, portString);
		sitePort = atoi(portString.String());
		scanner = _GetToken(scanner, latitude);
		scanner = _GetToken(scanner, longitude);
		description = scanner;

		if (eachFunc(site.String(), sitePort, latitude.String(), longitude.String(),
			description.String(), passThru))
			break;
	}
	_Disconnect();
	return B_OK;
}
Exemplo n.º 4
0
// STATEMENT   -> TEMPLATE | WITH | IF | FUNC | MEMBER | TEXT
//
int P_Statement()
{
    LubeToken token;
    token = _GetToken();

    switch (token) {
        case Token_text:
            return CreateTextBlockette();
        case Token_K_output:
            return P_Output();
        case Token_K_template:
            return P_Template();
        case Token_K_with:
            return P_With();
        case Token_K_if:
            return P_If();
        case Token_ident:
            return P_Func(g_szCurrentToken, NULL);
        case Token_eof:
            if (0 != *s_pContext->m_pTextBuffer) CreateTextBlockette();
            return Ret_EndOfFile;
        case Token_string:
            ErrorReport(Lube_E_UnexpectSymbol, g_szCurrentToken);
            return Ret_Continue;
        case Token_error:
            return Ret_AbortOnError;
        default:
            return P_Member(token);
    }
}
Exemplo n.º 5
0
// OUTPUT      -> k_output string { STATEMENT } k_end k_output
//
int P_Output()
{
    int nRet;
    PSTATEDESC pDesc;

    pDesc = s_pContext->CreateStatement(State_Output);
    if (!pDesc) {
        ErrorReport(Lube_E_OutOfMemory);
        return Ret_AbortOnError;
    }
    if (_GetToken() != Token_string) {
        ErrorReport(Lube_E_ExpectSymbol, "output file name");
        return Ret_AbortOnError;
    }

    pDesc->uDataSize = strlen(g_szCurrentToken) + 1;
    pDesc->pvData = new char[pDesc->uDataSize];
    if (!pDesc->pvData) {
        ErrorReport(Lube_E_OutOfMemory);
        return Ret_AbortOnError;
    }
    strcpy((char *)pDesc->pvData, g_szCurrentToken);

    while (_PeekToken() != Token_K_end) {
        nRet = P_Statement();
        if (Ret_EndOfFile == nRet) {
            ErrorReport(Lube_E_UnexpectEOF);
            return Ret_AbortOnError;
        }
        if (Ret_Continue != nRet) return nRet;
    }
    _GetToken(); // skip k_end

    if (_GetToken() != Token_K_output) {
        ErrorReport(Lube_E_UnexpectSymbol, g_szCurrentToken);
    }
    s_pContext->LeaveStatement();

    return Ret_Continue;
}
Exemplo n.º 6
0
// LUBE        -> INPUT { STATMENT }
// INPUT       -> k_input < k_module | k_class | k_interface >
//
int P_Lube()
{
    int nRet;
    LubeToken token;

    if (_GetToken() != Token_K_input) {
        ErrorReport(Lube_E_ExpectSymbol, "input");
        return Ret_AbortOnError;
    }
    switch (token = _GetToken()) {
        case Token_K_module:
            s_pContext->m_curObject = Object_Module;
            break;
        case Token_K_class:
            s_pContext->m_curObject = Object_Class;
            s_pContext->m_nClass++;
            break;
        case Token_K_interface:
            s_pContext->m_curObject = Object_Interface;
            s_pContext->m_nInterface++;
            break;
        default:
            ErrorReport(Lube_E_InvalidInput, g_szCurrentToken);
        case Token_error:
            return Ret_AbortOnError;
    }
    s_pContext->m_pCurrentState->object = s_pContext->m_curObject;

    while ((nRet = P_Statement()) == Ret_Continue);

    if (Token_K_class == token) {
        s_pContext->m_nClass--;
    }
    else if (Token_K_interface == token) {
        s_pContext->m_nInterface--;
    }
    return nRet;
}
Exemplo n.º 7
0
int GetMemberObject(LubeToken token, PSTATEDESC pDesc)
{
    if (IsObjectToken(token)) {
        pDesc->object = GetObjectType(token);
        if (Object_None == pDesc->object) {
            pDesc->object = s_pContext->m_curObject;
        }
        if (Object_LubeOption == pDesc->object) {
            pDesc->member = Member_Name;
            return Ret_Continue;
        }
        if (Object_CompilingEnv== pDesc->object) {
            pDesc->member = Member_Name;
            return Ret_Continue;
        }
        if (Object_InuptType== pDesc->object) {
            pDesc->member = Member_Name;
            return Ret_Continue;
        }

        if (_PeekToken() != Token_S_dot) return Ret_Continue;
        _GetToken(); // skip s_dot
        token = _GetToken();
    }
    else {
        pDesc->object = s_pContext->m_curObject;
    }

    if (IsMemberToken(token)) {
        pDesc->member = GetMemberType(pDesc->object, token);
    }
    else {
        ErrorReport(Lube_E_UnexpectSymbol, g_szCurrentToken);
    }
    return Ret_Continue;
}
Exemplo n.º 8
0
// TEMPLATE    -> k_template string
//
int P_Template()
{
    int nRet;
    PSTATEDESC pDesc;
    ObjectType object;

    pDesc = s_pContext->CreateStatement(State_Template);
    if (!pDesc) {
        ErrorReport(Lube_E_OutOfMemory);
        return Ret_AbortOnError;
    }
    if (_GetToken() != Token_string) {
        ErrorReport(Lube_E_ExpectSymbol, "template name");
        return Ret_AbortOnError;
    }

    nRet = FindTemplate(s_pContext->m_pLube, g_szCurrentToken);
    if (nRet < 0) {
        nRet = DoCompiling(g_szCurrentToken);
    }
    if (nRet >= 0) {
        pDesc->dwExtra = nRet;
        object = s_pContext->m_pLube->ppTemplates[nRet]->tRoot.object;
        if (Object_Class == object) {
            if (s_pContext->m_nClass > 0) {
                pDesc->object = Object_Class;
            }
            else {
                ErrorReport(Lube_E_NoValidObject, "class");
            }
        }
        else if (Object_Interface == object) {
            if (s_pContext->m_nInterface > 0) {
                pDesc->object = Object_Interface;
            }
            else {
                ErrorReport(Lube_E_NoValidObject, "interface");
            }
        }
    }

    s_pContext->LeaveStatement();
    return Ret_Continue;
}
Exemplo n.º 9
0
// IF          -> k_if CONDITION { < k_and | k_or > CONDITION } { STATEMENT }
//                [ k_else { STATEMENT } ] k_end k_if
//
int P_If()
{
    BOOL bElse = FALSE;
    int nRet;
    LubeToken token;
    PSTATEDESC pDesc, pNextDesc;

    pDesc = s_pContext->CreateStatement(State_If);
    if (!pDesc) {
        ErrorReport(Lube_E_OutOfMemory);
        return Ret_AbortOnError;
    }
    pDesc = s_pContext->CreateBlockette(State_Condition);
    if (!pDesc) {
        ErrorReport(Lube_E_OutOfMemory);
        return Ret_AbortOnError;
    }
    nRet = P_Condition(pDesc);
    if (nRet != Ret_Continue) return nRet;

    token = _PeekToken();
    while (Token_K_and == token || Token_K_or == token) {
        token = _GetToken(); // skip k_and or k_or
        pNextDesc = s_pContext->CreateBlockette(State_Condition);
        if (!pDesc) {
            ErrorReport(Lube_E_OutOfMemory);
            return Ret_AbortOnError;
        }
        nRet = P_Condition(pNextDesc);
        if (nRet != Ret_Continue) return nRet;

        pDesc->dwCondition |= (Token_K_and == token ?
                            Condition_And:Condition_Or);
        pDesc = pNextDesc;
        token = _PeekToken();
    }

    while (token != Token_K_end) {
        if (Token_K_else == token) {
            if (bElse) {
                ErrorReport(Lube_E_MultiElse);
            }
            else {
                pDesc = s_pContext->CreateBlockette(State_Else);
                if (!pDesc) {
                    ErrorReport(Lube_E_OutOfMemory);
                    return Ret_AbortOnError;
                }
                bElse = TRUE;
            }
            _GetToken(); // skip k_else
        }
        else {
            nRet = P_Statement();
            if (Ret_EndOfFile == nRet) {
                ErrorReport(Lube_E_UnexpectEOF);
                return Ret_AbortOnError;
            }
            if (Ret_Continue != nRet) return nRet;
        }
        token = _PeekToken();
    }
    _GetToken(); // skip k_end

    if (_GetToken() != Token_K_if) {
        ErrorReport(Lube_E_UnexpectSymbol, g_szCurrentToken);
    }
    s_pContext->LeaveStatement(); // leave if statement

    return Ret_Continue;
}
Exemplo n.º 10
0
// CONDITION   -> OBJCOND | MEMCOND | FUNCOND
// MEMCOND     -> MEMBER k_is [ k_not ] string
// OBJCOND     -> OBJECT k_is [ k_not ] < k_first | k_last >
// FUNCOND     -> FUNC k_is [ k_not ] < k_true | k_false >
//
int P_Condition(PSTATEDESC pDesc)
{
    LubeToken token;
    int nRet;

    token = _GetToken();
    if (Token_ident == token) {
        nRet = P_Func(g_szCurrentToken, pDesc);
        if (Ret_Continue != nRet) return nRet;
        pDesc->dwCondition |= Condition_Function;
    }
    else {
        nRet = GetMemberObject(token, pDesc);
        if (Ret_Continue != nRet) return nRet;
    }

    if (Token_K_is != _GetToken()) {
        ErrorReport(Lube_E_UnexpectSymbol, g_szCurrentToken);
        return Ret_AbortOnError;
    }
    token = _GetToken();
    if (Token_K_not == token) {
        pDesc->dwCondition |= Condition_Not;
        token = _GetToken();
    }

    if (Condition_Function & pDesc->dwCondition) {
        switch (token) {
            case Token_K_true:
                pDesc->dwCondition |= Condition_True;
                break;
            case Token_K_false:
                pDesc->dwCondition |= Condition_False;
                break;
            default:
                ErrorReport(Lube_E_UnexpectSymbol, g_szCurrentToken);
            case Token_error:
                return Ret_AbortOnError;
        }
        return Ret_Continue;
    }
    else if (Member_None == pDesc->member) {
        switch (token) {
            case Token_K_first:
                pDesc->dwCondition |= Condition_First;
                break;
            case Token_K_last:
                pDesc->dwCondition |= Condition_Last;
                break;
            default:
                ErrorReport(Lube_E_UnexpectSymbol, g_szCurrentToken);
            case Token_error:
                return Ret_AbortOnError;
        }
        if (Object_Module == pDesc->object
            || Object_Parent == pDesc->object) {
            ErrorReport(Lube_E_HasNoOrder);
        }
        return Ret_Continue;
    }
    else if (Token_string != token) {
        if (Token_error != token) {
            ErrorReport(Lube_E_UnexpectSymbol, g_szCurrentToken);
        }
        return Ret_AbortOnError;
    }

    return CheckMemberCondition(pDesc, g_szCurrentToken);
}
Exemplo n.º 11
0
// WITH        -> k_with [ k_all | k_first | k_last ]
//                  OBJECT k_do { STATEMENT } k_end k_do
//
int P_With()
{
    StatementType type;
    LubeToken token;
    PSTATEDESC pDesc;
    ObjectType origObject = Object_None;
    DWORD dwCondition = 0;
    int nRet;

    token = _GetToken();
    if (Token_K_all == token) {
        type = State_WithAll;
        token = _GetToken();
    }
    else {
        if (Token_K_first == token) {
            dwCondition = Condition_First;
            token = _GetToken();
        }
        else if (Token_K_last == token) {
            dwCondition = Condition_Last;
            token = _GetToken();
        }
        type = State_With;
    }

    pDesc = s_pContext->CreateStatement(type);
    if (!pDesc) {
        ErrorReport(Lube_E_OutOfMemory, g_szCurrentToken);
        return Ret_AbortOnError;
    }
    pDesc->dwCondition = dwCondition;

    if (type == State_WithAll || 0 != dwCondition) {
        pDesc->object = GetConditionObjectType(token);
    }
    else {
        pDesc->object = GetObjectType(token);
    }
    if (Object_None != pDesc->object) {
        origObject = s_pContext->EnterObject(pDesc->object);
    }

    if (_GetToken() != Token_K_do) {
        ErrorReport(Lube_E_UnexpectSymbol, g_szCurrentToken);
        return Ret_AbortOnError;
    }
    while (_PeekToken() != Token_K_end) {
        nRet = P_Statement();
        if (Ret_EndOfFile == nRet) {
            ErrorReport(Lube_E_UnexpectEOF);
            return Ret_AbortOnError;
        }
        if (Ret_Continue != nRet) return nRet;
    }
    _GetToken(); // skip k_end

    if (_GetToken() != Token_K_do) {
        ErrorReport(Lube_E_UnexpectSymbol, g_szCurrentToken);
    }
    s_pContext->LeaveStatement(); // leave with statement

    if (pDesc->object != Object_None) {
        s_pContext->LeaveObject(origObject);
    }
    return Ret_Continue;
}
Exemplo n.º 12
0
status_t
CDDBQuery::_ReadFromServer(BString &data)
{
	// This function queries the given CDDB server for the existence of the disc's data and
	// saves the data to file once obtained.

	// Query for the existence of the disc in the database
	char idString[10];
	sprintf(idString, "%08lx", fCDData.DiscID());
	BString query;

	int32 trackCount = GetTrackCount(&fSCSIData);
	BString offsetString = OffsetsToString(&fSCSIData);	
	int32 discLength = (fCDData.DiscTime()->GetMinutes() * 60) + fCDData.DiscTime()->GetSeconds();

	query << "cddb query " << idString << ' ' << trackCount << ' ' 
			<< offsetString << ' ' << discLength << '\n';

	STRACE((">%s", query.String()));

	if (fSocket.Send(query.String(), query.Length()) == -1) {
		_Disconnect();
		return B_ERROR;
	}

	BString tmp;
	_ReadLine(tmp);
	STRACE(("<%s", tmp.String()));

	BString category;
	BString queryDiscID(idString);

	if (tmp.FindFirst("200") != 0) {
		if (tmp.FindFirst("211") == 0) {
			// A 211 means that the query was not exact. To make sure that we don't
			// have a problem with this in the future, we will choose the first entry that
			// the server returns. This may or may not be wise, but in my experience, the first
			// one has been the right one.

			_ReadLine(tmp);

			// Get the category from the what the server returned
			_GetToken(tmp.String(), category);

			// Now we will get the disc ID for the CD. We will need this when we query for
			// the track name list. If we send the track name query with the real discID, nothing
			// will be returned. However, if we send the one from the entry, we'll get the names
			// and we can take these names attach them to the disc that we have.
			_GetToken(tmp.String() + category.CountChars(), queryDiscID);

			// This is to suck up any more search results that the server sends us.
			BString throwaway;
			_ReadLine(throwaway);
			while (throwaway.ByteAt(0) != '.')
				_ReadLine(throwaway);
		} else {
			// We get here for any time the CDDB server does not recognize the CD, amongst other things
			STRACE(("CDDB lookup error: %s\n", tmp.String()));
			fCDData.SetGenre("misc");
			return B_NAME_NOT_FOUND;
		}
	} else {
		_GetToken(tmp.String() + 3, category);
	}
	STRACE(("CDDBQuery::_ReadFromServer: Genre: %s\n", category.String()));
	if (!category.Length()) {
		STRACE(("Set genre to 'misc'\n"));
		category = "misc";
	}

	// Query for the disc's data - artist, album, tracks, etc.
	query = "";
	query << "cddb read " << category << ' ' << queryDiscID << '\n' ;
	if (fSocket.Send(query.String(), query.Length()) == -1) {
		_Disconnect();
		return B_ERROR;
	}

	while (true) {
		_ReadLine(tmp);

		if (tmp == "." || tmp == ".\n")
			break;

		data << tmp << '\n';
	}

	return B_OK;
}
void ZSimpleParser::_GetFormerNOther(FILE* fp, LPSTR lpszFormer, LPSTR lpszOther)
{
	_GetToken(fp, lpszFormer);
	_GetToken(fp, lpszOther);
}