char *cartDbMakeRandomKey(int numBits) /* Generate base64 encoding of a random key of at least size numBits returning string to be freed when done */ { int numBytes = (numBits + 7) / 8; // round up to nearest whole byte. numBytes = ((numBytes+2)/3)*3; // round up to the nearest multiple of 3 to avoid equals-char padding in base64 output FILE *f = mustOpen("/dev/urandom", "r"); // open random system device for read-only access. char *binaryString = needMem(numBytes); mustRead(f, binaryString, numBytes); carefulClose(&f); char * result = base64Encode(binaryString, numBytes); // converts 3 binary bytes into 4 printable characters int len = strlen(result); memSwapChar(result, len, '+', 'A'); // replace + and / with characters that are URL-friendly. memSwapChar(result, len, '/', 'a'); freeMem(binaryString); return result; }
int main(int argc, char *argv[]) { char *database; char *outFn; struct dnaSeq *seq; struct sqlConnection *conn2; char query2[256]; struct sqlResult *sr2; char **row2; if (argc != 4) usage(); database = argv[1]; conn2= hAllocConn(database); outFn = argv[2]; outf = mustOpen(outFn, "w"); tgtChrom = argv[3]; sqlSafef(query2, sizeof query2, "select secStr, name, chrom, chromStart, chromEnd, strand from evofold where chrom='%s'", tgtChrom); sr2 = sqlMustGetResult(conn2, query2); row2 = sqlNextRow(sr2); while (row2 != NULL) { secStr = row2[0]; id = row2[1]; chrom = row2[2]; chromStart = atoi(row2[3]); chromEnd = atoi(row2[4]); strand = *row2[5]; seq = hChromSeq(database, chrom, chromStart, chromEnd); touppers(seq->dna); if (strand == '-') reverseComplement(seq->dna, seq->size); memSwapChar(seq->dna, seq->size, 'T', 'U'); safef(javaCmd, sizeof(javaCmd), "java -cp VARNAv3-7.jar fr.orsay.lri.varna.applications.VARNAcmd -sequenceDBN %s -structureDBN '%s' -o evoFold/%s/%s.png", seq->dna, secStr, chrom, id); fprintf(outf, "%s\n", javaCmd); row2 = sqlNextRow(sr2); } sqlFreeResult(&sr2); fclose(outf); hFreeConn(&conn2); return(0); }
void searchOneMaskTrim(struct dnaSeq *seq, boolean isProt, struct genoFind *gf, FILE *outFile, struct hash *maskHash, long long *retTotalSize, int *retCount) /* Search a single sequence against a single genoFind index. */ { boolean maskQuery = (qMask != NULL); boolean lcMask = (qMask != NULL && sameWord(qMask, "lower")); Bits *qMaskBits = maskQuerySeq(seq, isProt, maskQuery, lcMask); struct dnaSeq trimmedSeq; ZeroVar(&trimmedSeq); trimSeq(seq, &trimmedSeq); if (qType == gftRna || qType == gftRnaX) memSwapChar(trimmedSeq.dna, trimmedSeq.size, 'u', 't'); searchOne(&trimmedSeq, gf, outFile, isProt, maskHash, qMaskBits); *retTotalSize += seq->size; *retCount += 1; bitFree(&qMaskBits); }
void expId() /* Print id */ { struct encodeExp *exps = NULL; int count; struct slPair *varPairs = NULL; /* transform var:val to var=val. Can't use var=val on command-line as it conflicts with standard options processing */ if (expVars == NULL) varPairs = NULL; else { memSwapChar(expVars, strlen(expVars), ':', '='); varPairs = slPairListFromString(expVars,FALSE); // don't expect quoted EDVs which should always be simple tokens. } exps = encodeExpGetFromTable(organism, lab, dataType, cellType, varPairs, table); count = slCount(exps); verbose(2, "Results: %d\n", count); if (count == 0) errAbort("Experiment not found in table %s", table); if (count > 1) errAbort("Found more than 1 match for experiment"); printf("%d\n", exps->ix); }