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()); }
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); }