Example #1
0
void look_door() {
  if(query_open("door 2")) message("my_action", "It is open.", this_player());
    else message("my_action", "It has been closed.", this_player());
}   
Example #2
0
static pllAlignmentData *
pllParseFASTA (const char * filename)
{
    int i,j;
    int status;

    pllAlignmentData * alignmentData;

    if (!query_open(filename))
    {
        errno = PLL_ERROR_FILE_OPEN;
        return NULL;
    }

    alignmentData = (pllAlignmentData *) malloc(sizeof(pllAlignmentData));
    alignmentData->sequenceData = NULL;
    alignmentData->sequenceLabels = NULL;

    int prev_qseqlen = -1;
    while(1)
    {
        char * qhead;
        int query_head_len;
        char *qseq;
        int qseqlen;
//    int query_no = -1;

        if ((status = query_getnext(&qhead, &query_head_len,
                                    &qseq, &qseqlen, &query_no)) > 0)
        {
            alignmentData->sequenceData = (unsigned char **)realloc(alignmentData->sequenceData,
                                          (query_no + 2)*sizeof(unsigned char *));
            alignmentData->sequenceLabels = (char **)realloc(alignmentData->sequenceLabels,
                                            (query_no + 2)*sizeof(char *));

            /* remove trailing whitespace from sequence names */
            j = query_head_len-1;
            while(j>0 && (qhead[j] == ' ' || qhead[j] == '\t'))
            {
                qhead[j] = 0;
            }
            alignmentData->sequenceData[query_no+1] = (unsigned char *)strdup(qseq);
            alignmentData->sequenceLabels[query_no+1] = strdup(qhead);

            if (prev_qseqlen != -1)
            {
                /* fasta sequences not aligned, free everything except last read
                   which will be freed by query_close() */
                if (qseqlen != prev_qseqlen)
                {
                    errno = PLL_ERROR_FASTA_SYNTAX;
                    _pll_free_temp_alignment(alignmentData, query_no+1);
                    query_close();
                    return NULL;
                }
            }
            else
            {
                alignmentData->sequenceLength = qseqlen;
                alignmentData->originalSeqLength = qseqlen;
                prev_qseqlen = qseqlen;
            }
        }
        else if (status == -1)
        {
            errno = PLL_ERROR_FASTA_SYNTAX;
            _pll_free_temp_alignment(alignmentData, query_no+1);
            query_close();
            return NULL;
        }
        else break;
    }
    alignmentData->sequenceCount  = query_no+1;
    query_close();

    alignmentData->siteWeights = (int *) rax_malloc (alignmentData->sequenceLength * sizeof (int));
    for (i = 0; i < alignmentData->sequenceLength; ++ i)
        alignmentData->siteWeights[i] = 1;

    /* ugly hack to turn it to one contiguous block of memory. This should be redesigned */
    void * mem = malloc((alignmentData->sequenceCount)*(alignmentData->sequenceLength+1)*sizeof(unsigned char));
    for (i = 1; i <= alignmentData->sequenceCount; ++i)
    {
        void * tmp = alignmentData->sequenceData[i];
        alignmentData->sequenceData[i] = (unsigned char *) (mem + (i - 1) * (alignmentData->sequenceLength + 1) * sizeof (unsigned char));
        memcpy(alignmentData->sequenceData[i], tmp, alignmentData->sequenceLength);
        alignmentData->sequenceData[i][alignmentData->sequenceLength] = 0;
        free(tmp);
    }
    alignmentData->sequenceData[0] = NULL;

    return (alignmentData);
}