void RTTIBuilder::push_void_array(llvm::Constant* CI, Type* valtype, Dsymbol* mangle_sym) { std::string initname(mangle_sym->mangle()); initname.append(".rtti.voidarr.data"); LLGlobalVariable* G = new llvm::GlobalVariable( *gIR->module, CI->getType(), true, TYPEINFO_LINKAGE_TYPE, CI, initname); G->setAlignment(valtype->alignsize()); push_void_array(getTypePaddedSize(CI->getType()), G); }
LLGlobalVariable * IrStruct::getClassInfoSymbol() { if (classInfo) return classInfo; // create the initZ symbol std::string initname("_D"); initname.append(aggrdecl->mangle()); if (aggrdecl->isInterfaceDeclaration()) initname.append("11__InterfaceZ"); else initname.append("7__ClassZ"); llvm::GlobalValue::LinkageTypes _linkage = DtoExternalLinkage(aggrdecl); ClassDeclaration* cinfo = ClassDeclaration::classinfo; DtoType(cinfo->type); IrTypeClass* tc = stripModifiers(cinfo->type)->irtype->isClass(); assert(tc && "invalid ClassInfo type"); // classinfos cannot be constants since they're used as locks for synchronized classInfo = new llvm::GlobalVariable( *gIR->module, tc->getMemoryLLType(), false, _linkage, NULL, initname); #if USE_METADATA // Generate some metadata on this ClassInfo if it's for a class. ClassDeclaration* classdecl = aggrdecl->isClassDeclaration(); if (classdecl && !aggrdecl->isInterfaceDeclaration()) { // Gather information LLType* type = DtoType(aggrdecl->type); LLType* bodyType = llvm::cast<LLPointerType>(type)->getElementType(); bool hasDestructor = (classdecl->dtor != NULL); bool hasCustomDelete = (classdecl->aggDelete != NULL); // Construct the fields MDNodeField* mdVals[CD_NumFields]; mdVals[CD_BodyType] = llvm::UndefValue::get(bodyType); mdVals[CD_Finalize] = LLConstantInt::get(LLType::getInt1Ty(gIR->context()), hasDestructor); mdVals[CD_CustomDelete] = LLConstantInt::get(LLType::getInt1Ty(gIR->context()), hasCustomDelete); // Construct the metadata and insert it into the module. llvm::SmallString<64> name; llvm::NamedMDNode* node = gIR->module->getOrInsertNamedMetadata( llvm::Twine(CD_PREFIX, initname).toStringRef(name)); node->addOperand(llvm::MDNode::get(gIR->context(), llvm::makeArrayRef(mdVals, CD_NumFields))); } #endif // USE_METADATA return classInfo; }
void RTTIBuilder::push_void_array(llvm::Constant *CI, Type *valtype, Dsymbol *mangle_sym) { std::string initname(mangle(mangle_sym)); initname.append(".rtti.voidarr.data"); const LinkageWithCOMDAT lwc(TYPEINFO_LINKAGE_TYPE, supportsCOMDAT()); auto G = new LLGlobalVariable(gIR->module, CI->getType(), true, lwc.first, CI, initname); setLinkage(lwc, G); G->setAlignment(DtoAlignment(valtype)); push_void_array(getTypeAllocSize(CI->getType()), G); }
void RTTIBuilder::push_array(llvm::Constant * CI, uint64_t dim, Type* valtype, Dsymbol * mangle_sym) { std::string tmpStr(valtype->arrayOf()->toChars()); tmpStr.erase( remove( tmpStr.begin(), tmpStr.end(), '[' ), tmpStr.end() ); tmpStr.erase( remove( tmpStr.begin(), tmpStr.end(), ']' ), tmpStr.end() ); tmpStr.append("arr"); std::string initname(mangle_sym?mangle_sym->mangle():".ldc"); initname.append(".rtti."); initname.append(tmpStr); initname.append(".data"); LLGlobalVariable* G = new llvm::GlobalVariable( *gIR->module, CI->getType(), true, TYPEINFO_LINKAGE_TYPE, CI, initname); G->setAlignment(valtype->alignsize()); push_array(dim, DtoBitCast(G, DtoType(valtype->pointerTo()))); }
LLGlobalVariable * IrStruct::getVtblSymbol() { if (vtbl) return vtbl; // create the initZ symbol std::string initname("_D"); initname.append(aggrdecl->mangle()); initname.append("6__vtblZ"); llvm::GlobalValue::LinkageTypes _linkage = DtoExternalLinkage(aggrdecl); LLType* vtblTy = stripModifiers(type)->irtype->isClass()->getVtbl(); vtbl = new llvm::GlobalVariable( *gIR->module, vtblTy, true, _linkage, NULL, initname); return vtbl; }
LLGlobalVariable * IrAggr::getInitSymbol() { if (init) return init; // create the initZ symbol std::string initname("_D"); initname.append(mangle(aggrdecl)); initname.append("6__initZ"); init = getOrCreateGlobal(aggrdecl->loc, gIR->module, init_type, true, llvm::GlobalValue::ExternalLinkage, NULL, initname); // set alignment init->setAlignment(type->alignsize()); StructDeclaration *sd = aggrdecl->isStructDeclaration(); if (sd && sd->alignment != STRUCTALIGN_DEFAULT) init->setAlignment(sd->alignment); return init; }
void RTTIBuilder::push_array(llvm::Constant *CI, uint64_t dim, Type *valtype, Dsymbol *mangle_sym) { std::string tmpStr(valtype->arrayOf()->toChars()); tmpStr.erase(remove(tmpStr.begin(), tmpStr.end(), '['), tmpStr.end()); tmpStr.erase(remove(tmpStr.begin(), tmpStr.end(), ']'), tmpStr.end()); tmpStr.append("arr"); std::string initname(mangle_sym ? mangle(mangle_sym) : ".ldc"); initname.append(".rtti."); initname.append(tmpStr); initname.append(".data"); const LinkageWithCOMDAT lwc(TYPEINFO_LINKAGE_TYPE, supportsCOMDAT()); auto G = new LLGlobalVariable(gIR->module, CI->getType(), true, lwc.first, CI, initname); setLinkage(lwc, G); G->setAlignment(DtoAlignment(valtype)); push_array(dim, DtoBitCast(G, DtoType(valtype->pointerTo()))); }
void inputdata() { /* read species data */ long i, j, k, l, m, m0, n, p; double sum; if (printdata) { fprintf(outfile, "\nName"); if (contchars) fprintf(outfile, " Phenotypes\n"); else fprintf(outfile, " Gene Frequencies\n"); fprintf(outfile, "----"); if (contchars) fprintf(outfile, " ----------\n"); else fprintf(outfile, " ---- -----------\n"); putc('\n', outfile); if (!contchars) { for (j = 1; j <= nmlngth - 8; j++) putc(' ', outfile); fprintf(outfile, "locus:"); p = 1; for (j = 1; j <= loci; j++) { if (all) n = alleles[j - 1]; else n = alleles[j - 1] - 1; for (k = 1; k <= n; k++) { fprintf(outfile, "%10ld", j); if (p % 6 == 0 && (all || p < df)) { putc('\n', outfile); for (l = 1; l <= nmlngth - 2; l++) putc(' ', outfile); } p++; } } fprintf(outfile, "\n\n"); } } for (i = 0; i < spp; i++) { scan_eoln(infile); initname(i); if (printdata) for (j = 0; j < nmlngth; j++) putc(nayme[i][j], outfile); m = 1; p = 1; for (j = 1; j <= loci; j++) { m0 = m; sum = 0.0; if (contchars) n = 1; else if (all) n = alleles[j - 1]; else n = alleles[j - 1] - 1; for (k = 1; k <= n; k++) { if (eoln(infile)) scan_eoln(infile); if (fscanf(infile, "%lf", &x[i][m - 1]) != 1) { printf("ERROR: unable to read allele frequency" "for species %ld, locus %ld\n", i+1, j); exxit(-1); } sum += x[i][m - 1]; if (!contchars && x[i][m - 1] < 0.0) { printf("\n\nERROR: locus %ld in species %ld: an allele", j, i+1); printf(" frequency is negative\n"); exxit(-1); } if (printdata) { fprintf(outfile, "%10.5f", x[i][m - 1]); if (p % 6 == 0 && (all || p < df)) { putc('\n', outfile); for (l = 1; l <= nmlngth; l++) putc(' ', outfile); } } p++; m++; } if (all && !contchars) { if (fabs(sum - 1.0) > epsilon2) { printf( "\n\nERROR: Locus %ld in species %ld: frequencies do not add up to 1\n", j, i + 1); printf("\nFrequencies are:\n"); for (l = m0; l <= m-3; l++) printf("%f+", x[i][l]); printf("%f = %f\n\n", x[i][m-2], sum); exxit(-1); } else { for (l = 0; l <= m-2; l++) x[i][l] /= sum; } } if (!all && !contchars) { x[i][m-1] = 1.0 - sum; if (x[i][m-1] < 0.0) { if (x[i][m-1] > -epsilon2) { for (l = 0; l <= m-2; l++) x[i][l] /= sum; x[i][m-1] = 0.0; } else { printf("\n\nERROR: Locus %ld in species %ld: ", j, i + 1); printf("frequencies add up to more than 1\n"); printf("\nFrequencies are:\n"); for (l = m0-1; l <= m-3; l++) printf("%f+", x[i][l]); printf("%f = %f\n\n", x[i][m-2], sum); exxit(-1); } } m++; } } if (printdata) putc('\n', outfile); } scan_eoln(infile); if (printdata) putc('\n', outfile); } /* inputdata */
void inputdata(boolean replicates, boolean printdata, boolean lower, boolean upper, vector *x, intvector *reps) { /* read in distance matrix */ /* used in fitch & neighbor */ long i=0, j=0, k=0, columns=0; boolean skipit=false, skipother=false; if (replicates) columns = 4; else columns = 6; if (printdata) { fprintf(outfile, "\nName Distances"); if (replicates) fprintf(outfile, " (replicates)"); fprintf(outfile, "\n---- ---------"); if (replicates) fprintf(outfile, "-------------"); fprintf(outfile, "\n\n"); } for (i = 0; i < spp; i++) { x[i][i] = 0.0; scan_eoln(infile); initname(i); for (j = 0; j < spp; j++) { skipit = ((lower && j + 1 >= i + 1) || (upper && j + 1 <= i + 1)); skipother = ((lower && i + 1 >= j + 1) || (upper && i + 1 <= j + 1)); if (!skipit) { if (eoln(infile)) scan_eoln(infile); if (fscanf(infile, "%lf", &x[i][j]) != 1) { printf("The infile is of the wrong type\n"); exxit(-1); } if (replicates) { if (eoln(infile)) scan_eoln(infile); if (fscanf(infile, "%ld", &reps[i][j]) != 1) { printf("The infile is of the wrong type\n"); exxit(-1); } } else reps[i][j] = 1; } if (!skipit && skipother) { x[j][i] = x[i][j]; reps[j][i] = reps[i][j]; } if ((i == j) && (fabs(x[i][j]) > 0.000000001)) { printf("\nERROR: diagonal element of row %ld of distance matrix ", i+1); printf("is not zero.\n"); printf(" Is it a distance matrix?\n\n"); exxit(-1); } if ((j < i) && (fabs(x[i][j]-x[j][i]) > 0.000000001)) { printf("ERROR: distance matrix is not symmetric:\n"); printf(" (%ld,%ld) element and (%ld,%ld) element are unequal.\n", i+1, j+1, j+1, i+1); printf(" They are %10.6f and %10.6f, respectively.\n", x[i][j], x[j][i]); printf(" Is it a distance matrix?\n\n"); exxit(-1); } } } scan_eoln(infile); if (!printdata) return; for (i = 0; i < spp; i++) { for (j = 0; j < nmlngth; j++) putc(nayme[i][j], outfile); putc(' ', outfile); for (j = 1; j <= spp; j++) { fprintf(outfile, "%10.5f", x[i][j - 1]); if (replicates) fprintf(outfile, " (%3ld)", reps[i][j - 1]); if (j % columns == 0 && j < spp) { putc('\n', outfile); for (k = 1; k <= nmlngth + 1; k++) putc(' ', outfile); } } putc('\n', outfile); } putc('\n', outfile); } /* inputdata */
int main(int argc, char **argv) { char *algname = NULL, *classname = NULL; char *filename = NULL, *dir = NULL, *namestr; char *lookaside = NULL; char *endp; int ch; unsigned int dtype = DNS_DSDIGEST_SHA1; isc_boolean_t both = ISC_TRUE; isc_boolean_t usekeyset = ISC_FALSE; isc_boolean_t showall = ISC_FALSE; isc_result_t result; isc_log_t *log = NULL; isc_entropy_t *ectx = NULL; dns_rdataset_t rdataset; dns_rdata_t rdata; dns_rdata_init(&rdata); if (argc == 1) usage(); result = isc_mem_create(0, 0, &mctx); if (result != ISC_R_SUCCESS) fatal("out of memory"); dns_result_register(); isc_commandline_errprint = ISC_FALSE; while ((ch = isc_commandline_parse(argc, argv, "12Aa:c:d:Ff:K:l:sv:h")) != -1) { switch (ch) { case '1': dtype = DNS_DSDIGEST_SHA1; both = ISC_FALSE; break; case '2': dtype = DNS_DSDIGEST_SHA256; both = ISC_FALSE; break; case 'A': showall = ISC_TRUE; break; case 'a': algname = isc_commandline_argument; both = ISC_FALSE; break; case 'c': classname = isc_commandline_argument; break; case 'd': fprintf(stderr, "%s: the -d option is deprecated; " "use -K\n", program); /* fall through */ case 'K': dir = isc_commandline_argument; if (strlen(dir) == 0U) fatal("directory must be non-empty string"); break; case 'f': filename = isc_commandline_argument; break; case 'l': lookaside = isc_commandline_argument; if (strlen(lookaside) == 0U) fatal("lookaside must be a non-empty string"); break; case 's': usekeyset = ISC_TRUE; break; case 'v': verbose = strtol(isc_commandline_argument, &endp, 0); if (*endp != '\0') fatal("-v must be followed by a number"); break; case 'F': /* Reserved for FIPS mode */ /* FALLTHROUGH */ case '?': if (isc_commandline_option != '?') fprintf(stderr, "%s: invalid argument -%c\n", program, isc_commandline_option); /* FALLTHROUGH */ case 'h': usage(); default: fprintf(stderr, "%s: unhandled option -%c\n", program, isc_commandline_option); exit(1); } } if (algname != NULL) { if (strcasecmp(algname, "SHA1") == 0 || strcasecmp(algname, "SHA-1") == 0) dtype = DNS_DSDIGEST_SHA1; else if (strcasecmp(algname, "SHA256") == 0 || strcasecmp(algname, "SHA-256") == 0) dtype = DNS_DSDIGEST_SHA256; #ifdef HAVE_OPENSSL_GOST else if (strcasecmp(algname, "GOST") == 0) dtype = DNS_DSDIGEST_GOST; #endif else if (strcasecmp(algname, "SHA384") == 0 || strcasecmp(algname, "SHA-384") == 0) dtype = DNS_DSDIGEST_SHA384; else fatal("unknown algorithm %s", algname); } rdclass = strtoclass(classname); if (usekeyset && filename != NULL) fatal("cannot use both -s and -f"); /* When not using -f, -A is implicit */ if (filename == NULL) showall = ISC_TRUE; if (argc < isc_commandline_index + 1 && filename == NULL) fatal("the key file name was not specified"); if (argc > isc_commandline_index + 1) fatal("extraneous arguments"); if (ectx == NULL) setup_entropy(mctx, NULL, &ectx); result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE); if (result != ISC_R_SUCCESS) fatal("could not initialize hash"); result = dst_lib_init(mctx, ectx, ISC_ENTROPY_BLOCKING | ISC_ENTROPY_GOODONLY); if (result != ISC_R_SUCCESS) fatal("could not initialize dst: %s", isc_result_totext(result)); isc_entropy_stopcallbacksources(ectx); setup_logging(verbose, mctx, &log); dns_rdataset_init(&rdataset); if (usekeyset || filename != NULL) { if (argc < isc_commandline_index + 1 && filename != NULL) { /* using zone name as the zone file name */ namestr = filename; } else namestr = argv[isc_commandline_index]; result = initname(namestr); if (result != ISC_R_SUCCESS) fatal("could not initialize name %s", namestr); if (usekeyset) result = loadkeyset(dir, &rdataset); else result = loadsetfromfile(filename, &rdataset); if (result != ISC_R_SUCCESS) fatal("could not load DNSKEY set: %s\n", isc_result_totext(result)); for (result = dns_rdataset_first(&rdataset); result == ISC_R_SUCCESS; result = dns_rdataset_next(&rdataset)) { dns_rdata_init(&rdata); dns_rdataset_current(&rdataset, &rdata); if (verbose > 2) logkey(&rdata); if (both) { emit(DNS_DSDIGEST_SHA1, showall, lookaside, &rdata); emit(DNS_DSDIGEST_SHA256, showall, lookaside, &rdata); } else emit(dtype, showall, lookaside, &rdata); } } else { unsigned char key_buf[DST_KEY_MAXSIZE]; loadkey(argv[isc_commandline_index], key_buf, DST_KEY_MAXSIZE, &rdata); if (both) { emit(DNS_DSDIGEST_SHA1, showall, lookaside, &rdata); emit(DNS_DSDIGEST_SHA256, showall, lookaside, &rdata); } else emit(dtype, showall, lookaside, &rdata); } if (dns_rdataset_isassociated(&rdataset)) dns_rdataset_disassociate(&rdataset); cleanup_logging(&log); dst_lib_destroy(); isc_hash_destroy(); cleanup_entropy(&ectx); dns_name_destroy(); if (verbose > 10) isc_mem_stats(mctx, stdout); isc_mem_destroy(&mctx); fflush(stdout); if (ferror(stdout)) { fprintf(stderr, "write error\n"); return (1); } else return (0); }
void seqboot_inputdata() { /* input the names and sequences for each species */ long i, j, k, l, m, n, basesread, basesnew=0; double x; Char charstate; boolean allread, done; nodep = matrix_char_new(spp, sites); j = nmlngth + (sites + (sites - 1) / 10) / 2 - 5; if (j < nmlngth - 1) j = nmlngth - 1; if (j > 37) j = 37; interleaved = (interleaved && ((data == seqs) || (data == restsites))); basesread = 0; allread = false; while (!allread) { /* eat white space -- if the separator line has spaces on it*/ do { charstate = gettc(infile); } while (charstate == ' ' || charstate == '\t'); ungetc(charstate, infile); if (eoln(infile)) scan_eoln(infile); i = 1; while (i <= spp) { if ((interleaved && basesread == 0) || !interleaved) initname(i-1); j = interleaved ? basesread : 0; done = false; while (!done && !eoff(infile)) { if (interleaved) done = true; while (j < sites && !(eoln(infile) ||eoff(infile))) { charstate = gettc(infile); if (charstate == '\n' || charstate == '\t') charstate = ' '; if (charstate == ' ' || (data == seqs && charstate >= '0' && charstate <= '9')) continue; uppercase(&charstate); j++; if (charstate == '.') charstate = nodep[0][j-1]; nodep[i-1][j-1] = charstate; } if (interleaved) continue; if (j < sites) scan_eoln(infile); else if (j == sites) done = true; } if (interleaved && i == 1) basesnew = j; scan_eoln(infile); if ((interleaved && j != basesnew) || ((!interleaved) && j != sites)) { printf("\n\nERROR: sequences out of alignment at site %ld", j+1); printf(" of species %ld\n\n", i); exxit(-1); } i++; } if (interleaved) { basesread = basesnew; allread = (basesread == sites); } else allread = (i > spp); } if (!printdata) return; } /* seqboot_inputdata */
void seqboot_inputdata() { /* input the names and sequences for each species */ long i, j, k, l, m, n, basesread, basesnew=0; double x; Char charstate; boolean allread, done; if (data == genefreqs) { nodef = matrix_double_new(spp, sites); } else { nodep = matrix_char_new(spp, sites); } j = nmlngth + (sites + (sites - 1) / 10) / 2 - 5; if (j < nmlngth - 1) j = nmlngth - 1; if (j > 37) j = 37; if (printdata) { fprintf(outfile, "\nBootstrapping algorithm, version %s\n\n\n",VERSION); if (bootstrap) { if (blocksize > 1) { if (regular) fprintf(outfile, "Block-bootstrap with block size %ld\n\n", blocksize); else fprintf(outfile, "Partial (%2.0f%%) block-bootstrap with block size %ld\n\n", 100*fracsample, blocksize); } else { if (regular) fprintf(outfile, "Bootstrap\n\n"); else fprintf(outfile, "Partial (%2.0f%%) bootstrap\n\n", 100*fracsample); } } else { if (jackknife) { if (regular) fprintf(outfile, "Delete-half Jackknife\n\n"); else fprintf(outfile, "Delete-%2.0f%% Jackknife\n\n", 100*(1.0-fracsample)); } else { if (permute) { fprintf(outfile, "Species order permuted separately for each"); if (data == genefreqs) fprintf(outfile, " locus\n\n"); if (data == seqs) fprintf(outfile, " site\n\n"); if (data == morphology) fprintf(outfile, " character\n\n"); if (data == restsites) fprintf(outfile, " site\n\n"); } else { if (ild) { if (data == genefreqs) fprintf(outfile, "Locus"); if (data == seqs) fprintf(outfile, "Site"); if (data == morphology) fprintf(outfile, "Character"); if (data == restsites) fprintf(outfile, "Site"); fprintf(outfile, " order permuted\n\n"); } else { if (lockhart) if (data == genefreqs) fprintf(outfile, "Locus"); if (data == seqs) fprintf(outfile, "Site"); if (data == morphology) fprintf(outfile, "Character"); if (data == restsites) fprintf(outfile, "Site"); fprintf(outfile, " order permuted separately for each species\n\n"); } } } } if (data == genefreqs) fprintf(outfile, "%3ld species, %3ld loci\n\n", spp, loci); else { fprintf(outfile, "%3ld species, ", spp); if (data == seqs) fprintf(outfile, "%3ld sites\n\n", sites); else if (data == morphology) fprintf(outfile, "%3ld characters\n\n", sites); else if (data == restsites) fprintf(outfile, "%3ld sites\n\n", sites); } fprintf(outfile, "Name"); for (i = 1; i <= j; i++) putc(' ', outfile); fprintf(outfile, "Data\n"); fprintf(outfile, "----"); for (i = 1; i <= j; i++) putc(' ', outfile); fprintf(outfile, "----\n\n"); } interleaved = (interleaved && ((data == seqs) || (data == restsites))); if (data == genefreqs) { for (i = 1; i <= (spp); i++) { initname(i - 1); j = 1; while (j <= sites && !eoff(infile)) { if (eoln(infile)) scan_eoln(infile); if ( fscanf(infile, "%lf", &x) != 1) { printf("ERROR: Invalid value for locus %ld of species %ld\n", j, i); exxit(-1); } else if ((unsigned)x > 1.0) { printf("GENE FREQ OUTSIDE [0,1] in species %ld\n", i); exxit(-1); } else { nodef[i - 1][j - 1] = x; j++; } } scan_eoln(infile); } return; } basesread = 0; allread = false; while (!allread) { /* eat white space -- if the separator line has spaces on it*/ do { charstate = gettc(infile); } while (charstate == ' ' || charstate == '\t'); ungetc(charstate, infile); if (eoln(infile)) scan_eoln(infile); i = 1; while (i <= spp) { if ((interleaved && basesread == 0) || !interleaved) initname(i-1); j = interleaved ? basesread : 0; done = false; while (!done && !eoff(infile)) { if (interleaved) done = true; while (j < sites && !(eoln(infile) ||eoff(infile))) { charstate = gettc(infile); if (charstate == '\n' || charstate == '\t') charstate = ' '; if (charstate == ' ' || (data == seqs && charstate >= '0' && charstate <= '9')) continue; uppercase(&charstate); j++; if (charstate == '.') charstate = nodep[0][j-1]; nodep[i-1][j-1] = charstate; } if (interleaved) continue; if (j < sites) scan_eoln(infile); else if (j == sites) done = true; } if (interleaved && i == 1) basesnew = j; scan_eoln(infile); if ((interleaved && j != basesnew) || ((!interleaved) && j != sites)){ printf("\n\nERROR: sequences out of alignment at site %ld", j+1); printf(" of species %ld\n\n", i); exxit(-1);} i++; } if (interleaved) { basesread = basesnew; allread = (basesread == sites); } else allread = (i > spp); } if (!printdata) return; if (data == genefreqs) m = (sites - 1) / 8 + 1; else m = (sites - 1) / 60 + 1; for (i = 1; i <= m; i++) { for (j = 0; j < spp; j++) { for (k = 0; k < nmlngth; k++) putc(nayme[j][k], outfile); fprintf(outfile, " "); if (data == genefreqs) l = i * 8; else l = i * 60; if (l > sites) l = sites; if (data == genefreqs) n = (i - 1) * 8; else n = (i - 1) * 60; for (k = n; k < l; k++) { if (data == genefreqs) fprintf(outfile, "%8.5f", nodef[j][k]); else { if (j + 1 > 1 && nodep[j][k] == nodep[0][k]) charstate = '.'; else charstate = nodep[j][k]; putc(charstate, outfile); if ((k + 1) % 10 == 0 && (k + 1) % 60 != 0) putc(' ', outfile); } } putc('\n', outfile); } putc('\n', outfile); } putc('\n', outfile); } /* seqboot_inputdata */
void restdist_inputdata() { /* read the species and sites data */ long i, j, k, l, sitesread = 0, sitesnew = 0; Char ch; boolean allread, done; if (printdata) putc('\n', outfile); j = nmlngth + (sites + (sites - 1) / 10) / 2 - 5; if (j < nmlngth - 1) j = nmlngth - 1; if (j > 39) j = 39; if (printdata) { fprintf(outfile, "Name"); for (i = 1; i <= j; i++) putc(' ', outfile); fprintf(outfile, "Sites\n"); fprintf(outfile, "----"); for (i = 1; i <= j; i++) putc(' ', outfile); fprintf(outfile, "-----\n\n"); } sitesread = 0; allread = false; while (!(allread)) { allread = true; if (eoln(infile)) { fscanf(infile, "%*[^\n]"); getc(infile); } i = 1; while (i <= spp ) { if ((interleaved && sitesread == 0) || !interleaved) initname(i - 1); if (interleaved) j = sitesread; else j = 0; done = false; while (!done && !eoff(infile)) { if (interleaved) done = true; while (j < sites && !(eoln(infile) || eoff(infile))) { ch = getc(infile); if (ch == '\n') ch = ' '; if (ch == ' ') continue; uppercase(&ch); if (ch != '1' && ch != '0' && ch != '+' && ch != '-' && ch != '?') { printf(" WARNING -- BAD SYMBOL %c",ch); printf(" AT POSITION %5ld OF SPECIES %3ld\n",j,i); exxit(-1); } if (ch == '1') ch = '+'; if (ch == '0') ch = '-'; j++; y[i - 1][j - 1] = ch; } if (interleaved) continue; if (j < sites) { fscanf(infile, "%*[^\n]"); getc(infile); } else if (j == sites) done = true; } if (interleaved && i == 1) sitesnew = j; fscanf(infile, "%*[^\n]"); getc(infile); if ((interleaved && j != sitesnew ) || ((!interleaved) && j != sites)){ printf("ERROR: SEQUENCES OUT OF ALIGNMENT\n"); exxit(-1);} i++; } if (interleaved) { sitesread = sitesnew; allread = (sitesread == sites); } else allread = (i > spp); } if (printdata) { for (i = 1; i <= ((sites - 1) / 60 + 1); i++) { for (j = 0; j < spp; j++) { for (k = 0; k < nmlngth; k++) putc(nayme[j][k], outfile); fprintf(outfile, " "); l = i * 60; if (l > sites) l = sites; for (k = (i - 1) * 60 + 1; k <= l; k++) { putc(y[j][k - 1], outfile); if (k % 10 == 0 && k % 60 != 0) putc(' ', outfile); } putc('\n', outfile); } putc('\n', outfile); } putc('\n', outfile); } } /* restdist_inputdata */
void inputdata2(pointptr2 treenode) { /* input the names and character state data for species */ /* used in Mix & Penny */ long i, j, l; char k; Char charstate; /* possible states are '0', '1', 'P', 'B', and '?' */ if (printdata) headings(chars, "Characters", "----------"); for (i = 0; i < (chars); i++) extras[i] = 0; for (i = 1; i <= spp; i++) { initname(i-1); if (printdata) { for (j = 0; j < nmlngth; j++) putc(nayme[i - 1][j], outfile); } fprintf(outfile, " "); for (j = 0; j < (words); j++) { treenode[i - 1]->fulstte1[j] = 0; treenode[i - 1]->fulstte0[j] = 0; treenode[i - 1]->empstte1[j] = 0; treenode[i - 1]->empstte0[j] = 0; } for (j = 1; j <= (chars); j++) { k = (j - 1) % bits + 1; l = (j - 1) / bits + 1; do { if (eoln(infile)) scan_eoln(infile); charstate = gettc(infile); if (charstate == '\n' || charstate == '\t') charstate = ' '; } while (charstate == ' '); if (charstate == 'b') charstate = 'B'; if (charstate == 'p') charstate = 'P'; if (charstate != '0' && charstate != '1' && charstate != '?' && charstate != 'P' && charstate != 'B') { printf("\n\nERROR: Bad character state: %c ",charstate); printf("at character %ld of species %ld\n\n", j, i); exxit(-1); } if (printdata) { newline(outfile, j, 55, nmlngth + 3); putc(charstate, outfile); if (j % 5 == 0) putc(' ', outfile); } if (charstate == '1') { treenode[i-1]->fulstte1[l-1] = ((long)treenode[i-1]->fulstte1[l-1]) | (1L << k); treenode[i-1]->empstte1[l-1] = treenode[i-1]->fulstte1[l-1]; } if (charstate == '0') { treenode[i-1]->fulstte0[l-1] = ((long)treenode[i-1]->fulstte0[l-1]) | (1L << k); treenode[i-1]->empstte0[l-1] = treenode[i-1]->fulstte0[l-1]; } if (charstate == 'P' || charstate == 'B') extras[j-1] += weight[j-1]; } scan_eoln(infile); if (printdata) putc('\n', outfile); } fprintf(outfile, "\n\n"); } /* inputdata2 */
void inputdata(pointptr treenode,boolean dollo,boolean printdata,FILE *outfile) { /* input the names and character state data for species */ /* used in Dollop, Dolpenny, Dolmove, & Move */ long i, j, l; char k; Char charstate; /* possible states are '0', '1', 'P', 'B', and '?' */ if (printdata) headings(chars, "Characters", "----------"); for (i = 0; i < (chars); i++) extras[i] = 0; for (i = 1; i <= spp; i++) { initname(i-1); if (printdata) { for (j = 0; j < nmlngth; j++) putc(nayme[i - 1][j], outfile); fprintf(outfile, " "); } for (j = 0; j < (words); j++) { treenode[i - 1]->stateone[j] = 0; treenode[i - 1]->statezero[j] = 0; } for (j = 1; j <= (chars); j++) { k = (j - 1) % bits + 1; l = (j - 1) / bits + 1; do { if (eoln(infile)) scan_eoln(infile); charstate = gettc(infile); } while (charstate == ' ' || charstate == '\t'); if (charstate == 'b') charstate = 'B'; if (charstate == 'p') charstate = 'P'; if (charstate != '0' && charstate != '1' && charstate != '?' && charstate != 'P' && charstate != 'B') { printf("\n\nERROR: Bad character state: %c ",charstate); printf("at character %ld of species %ld\n\n", j, i); exxit(-1); } if (printdata) { newline(outfile, j, 55, nmlngth + 3); putc(charstate, outfile); if (j % 5 == 0) putc(' ', outfile); } if (charstate == '1') treenode[i - 1]->stateone[l - 1] = ((long)treenode[i - 1]->stateone[l - 1]) | (1L << k); if (charstate == '0') treenode[i - 1]->statezero[l - 1] = ((long)treenode[i - 1]->statezero[l - 1]) | (1L << k); if (charstate == 'P' || charstate == 'B') { if (dollo) extras[j - 1] += weight[j - 1]; else { treenode[i - 1]->stateone[l - 1] = ((long)treenode[i - 1]->stateone[l - 1]) | (1L << k); treenode[i - 1]->statezero[l - 1] = ((long)treenode[i - 1]->statezero[l - 1]) | (1L << k); } } } scan_eoln(infile); if (printdata) putc('\n', outfile); } if (printdata) fprintf(outfile, "\n\n"); } /* inputdata */
void restdist_inputdata() { /* read the species and sites data */ long i, j, k, l, sitesread = 0, sitesnew = 0; Char ch; boolean allread, done; if (printdata) putc('\n', outfile); j = nmlngth + (sites + (sites - 1) / 10) / 2 - 5; if (j < nmlngth - 1) j = nmlngth - 1; if (j > 39) j = 39; if (printdata) { fprintf(outfile, "Name"); for (i = 1; i <= j; i++) putc(' ', outfile); fprintf(outfile, "Sites\n"); fprintf(outfile, "----"); for (i = 1; i <= j; i++) putc(' ', outfile); fprintf(outfile, "-----\n\n"); } sitesread = 0; allread = false; while (!(allread)) { /* eat white space -- if the separator line has spaces on it*/ do { ch = gettc(infile); } while (ch == ' ' || ch == '\t'); ungetc(ch, infile); if (eoln(infile)) scan_eoln(infile); i = 1; while (i <= spp ) { if ((interleaved && sitesread == 0) || !interleaved) initname(i - 1); if (interleaved) j = sitesread; else j = 0; done = false; while (!done && !eoff(infile)) { if (interleaved) done = true; while (j < sites && !(eoln(infile) || eoff(infile))) { ch = gettc(infile); if (ch == '\n' || ch == '\t') ch = ' '; if (ch == ' ') continue; uppercase(&ch); if (ch != '1' && ch != '0' && ch != '+' && ch != '-' && ch != '?') { printf(" ERROR -- Bad symbol %c",ch); printf(" at position %ld of species %ld\n", j+1, i); exxit(-1); } if (ch == '1') ch = '+'; if (ch == '0') ch = '-'; j++; y[i - 1][j - 1] = ch; } if (interleaved) continue; if (j < sites) scan_eoln(infile); else if (j == sites) done = true; } if (interleaved && i == 1) sitesnew = j; scan_eoln(infile); if ((interleaved && j != sitesnew ) || ((!interleaved) && j != sites)){ printf("ERROR: SEQUENCES OUT OF ALIGNMENT\n"); exxit(-1);} i++; } if (interleaved) { sitesread = sitesnew; allread = (sitesread == sites); } else allread = (i > spp); } if (printdata) { for (i = 1; i <= ((sites - 1) / 60 + 1); i++) { for (j = 0; j < spp; j++) { for (k = 0; k < nmlngth; k++) putc(nayme[j][k], outfile); fprintf(outfile, " "); l = i * 60; if (l > sites) l = sites; for (k = (i - 1) * 60 + 1; k <= l; k++) { putc(y[j][k - 1], outfile); if (k % 10 == 0 && k % 60 != 0) putc(' ', outfile); } putc('\n', outfile); } putc('\n', outfile); } putc('\n', outfile); } } /* restdist_inputdata */