Beispiel #1
0
static void paStreamCbSuccess(pa_stream *pStream, int fSuccess, void *pvUser)
{
    AssertPtrReturnVoid(pStream);

    PPULSEAUDIOSTREAM pStrm = (PPULSEAUDIOSTREAM)pvUser;
    AssertPtrReturnVoid(pStrm);

    pStrm->fOpSuccess = fSuccess;

    if (fSuccess)
        paSignalWaiter(pStrm->pDrv);
    else
        paError(pStrm->pDrv, "Failed to finish stream operation");
}
Beispiel #2
0
/**
 * Callback called when our pa_stream_drain operation was completed.
 */
static void paStreamCbDrain(pa_stream *pStream, int fSuccess, void *pvUser)
{
    AssertPtrReturnVoid(pStream);

    PPULSEAUDIOSTREAM pStrm = (PPULSEAUDIOSTREAM)pvUser;
    AssertPtrReturnVoid(pStrm);

    pStrm->fOpSuccess = fSuccess;
    if (fSuccess)
    {
        pa_operation_unref(pa_stream_cork(pStream, 1,
                                          paStreamCbSuccess, pvUser));
    }
    else
        paError(pStrm->pDrv, "Failed to drain stream");

    if (pStrm->pDrainOp)
    {
        pa_operation_unref(pStrm->pDrainOp);
        pStrm->pDrainOp = NULL;
    }
}
Beispiel #3
0
// Read one line of tokens.  It is up to the caller to destroy these tokens.
// Read up to a newline or a BEGIN token.
static bool readOneLine(void)
{
    printf("Reading one line\n");
    paSyntax syntax;
    paStaterule staterule;
    paToken token;
    utSym subSyntaxSym;

    if(paNextBeginToken == paTokenNull) {
        token = paLex();
    } else {
        token = paNextBeginToken;
        paNextBeginToken = paTokenNull;
    }
    if(token == paTokenNull) {
        return false;
    }
    // Now deal with BEGIN/END tokens.
    if(paTokenGetType(token) == PA_TOK_BEGIN) {
        printf("Starting sub-statements\n");
        if(paPrevStatement == paStatementNull) {
            paError(token, "First line may not be intented");
        }
        paOuterStatement = paPrevStatement;
        subSyntaxSym = paStateruleGetSubSyntaxSym(paStatementGetStaterule(paOuterStatement));
        if(subSyntaxSym != utSymNull) {
            syntax = paRootFindSyntax(paTheRoot, subSyntaxSym);
            if(syntax != paSyntaxNull) {
                printf("Using syntax %s\n", paSyntaxGetName(syntax));
                paCurrentSyntax = syntax;
            } else {
                paError(token, "Syntax %s not found", utSymGetName(subSyntaxSym));
            }
        }
        paTokenDestroy(token);
        token = paLex();
        if(paTokenGetType(token) == PA_TOK_NEWLINE) {
            paTokenDestroy(token);
            token = paLex();
        }
    }
    while(token != paTokenNull && paTokenGetType(token) == PA_TOK_END) {
        printf("Finished sub-statements\n");
        paOuterStatement = paStatementGetStatement(paOuterStatement);
        staterule = paStatementGetStaterule(paOuterStatement);
        if(staterule == paStateruleNull) {
            syntax = paTopSyntax;
        } else {
            syntax = paRootFindSyntax(paTheRoot, paStateruleGetSubSyntaxSym(staterule));
            if(syntax == paSyntaxNull) {
                syntax = paStateruleGetSyntax(staterule);
            }
        }
        if(syntax != paCurrentSyntax) {
            printf("Using syntax %s\n", paSyntaxGetName(syntax));
            paCurrentSyntax = syntax;
        }
        paTokenDestroy(token);
        token = paLex();
        if(paTokenGetType(token) == PA_TOK_NEWLINE) {
            paTokenDestroy(token);
            token = paLex();
        }
    }
    while(token != paTokenNull && paTokenGetType(token) != PA_TOK_NEWLINE &&
            paTokenGetType(token) != PA_TOK_BEGIN) {
        if(paTokenGetType(token) == PA_TOK_CHAR) {
            // Every character should be matched by some other token
            paError(token, "Illegal character in input");
        }
        paSyntaxAppendToken(paCurrentSyntax, token);
        paPrintToken(token);
        token = paLex();
    }
    if(token != paTokenNull) {
        if(paTokenGetType(token) == PA_TOK_BEGIN) {
            paNextBeginToken = token;
        } else {
            paTokenDestroy(token); // We no longer need the NEWLINE token
        }
    }
    return paSyntaxGetUsedToken(paCurrentSyntax) > 0;
}