void printOutput(HumdrumFile& file, Array<RationalNumber>& Bfeatures, Array<int>& Blines, Array<RationalNumber>& Dfeatures, Array<int>& Dlines, Array<int>& tickanalysis) { int lastmeasureline = -1; int pickupstate = 0; int suppressreturn = 0; int i; Array<unsigned long> abstick; if (tickQ) { unsigned long csum = 0; abstick.setSize(tickanalysis.getSize()); abstick.setAll(0); for (i=0; i<tickanalysis.getSize(); i++) { abstick[i] = csum; csum += tickanalysis[i]; } } RationalNumber minrhy(file.getMinTimeBase(), 4); RationalNumber rat; Array<RationalNumber> Binfo; Array<RationalNumber> Dinfo; Binfo.setSize(file.getNumLines()); Binfo.allowGrowth(0); Binfo.setAll(-1); Dinfo.setSize(file.getNumLines()); Dinfo.allowGrowth(0); Dinfo.setAll(-1); int measurecount = 0; for (i=0; i<Blines.getSize(); i++) { Binfo[Blines[i]] = Bfeatures[i]; if (Binfo[Blines[i]] == file[Blines[i]].getAbsBeatR()) { Binfo[Blines[i]]++; Binfo[Blines[i]] -= file.getPickupDurationR(); } if (zeroQ) { Binfo[Blines[i]]--; } } for (i=0; i<Dlines.getSize(); i++) { Dinfo[Dlines[i]] = Dfeatures[i]; } for (i=0; i<file.getNumLines(); i++) { switch (file[i].getType()) { /*case E_humrec_data_comment: if (appendQ) { cout << file[i] << "\t" << "!" << "\n"; } else if (prependQ) { cout << "!\t" << file[i] << "\n"; } else { cout << file[i] << "\n"; } break; */ case E_humrec_data_kern_measure: if (prependQ) { cout << file[i][0] << "\t"; cout << file[i] << "\n"; } else if (appendQ) { cout << file[i] << "\t"; cout << file[i][0] << "\n"; } else { cout << file[i][0] << "\n"; } lastmeasureline = i; measurecount++; break; case E_humrec_interpretation: if (appendQ) { cout << file[i] << "\t"; } if (strncmp(file[i][0], "**", 2) == 0) { if (absQ && !tickQ) { cout << "**absb"; } else if (absQ && tickQ && !rationalQ) { cout << "**atick"; } else if (absQ && tickQ && rationalQ) { cout << "**adur"; } else if (tickQ && durQ && !rationalQ) { cout << "**dtick"; } else if (tickQ && durQ && rationalQ) { cout << "**dur"; } else if (durQ && !tickQ) { cout << "**dur"; } else if (sumQ) { cout << "**beatsum"; } else { cout << "**beat"; } } else if (strcmp(file[i][0], "*-") == 0) { cout << "*-"; } else if (strncmp(file[i][0], "*>", 2) == 0) { cout << file[i][0]; } else { if ((strncmp(file[i][0], "*M", 2) == 0) && (strchr(file[i][0], '/') != NULL)) { cout << file[i][0]; } else if (strncmp(file[i][0], "*MM", 3) == 0) { cout << file[i][0]; } else if (appendQ || prependQ) { cout << "*"; } else { cout << "*"; } } if (prependQ) { cout << "\t" << file[i]; } cout << "\n"; break; case E_humrec_data: if (appendQ) { cout << file[i] << "\t"; } if (file[i][0][0] == '=') { pickupstate++; } if (durQ) { // cout << file[i].getDuration(); if (Dinfo[i] >= 0) { if (tickQ && !rationalQ) { cout << tickanalysis[i]; } else if (tickQ && rationalQ) { rat.setValue(tickanalysis[i], file.getMinTimeBase()); if (uQ) { rat *= 4; } cout << rat; } else { cout << Dinfo[i].getFloat(); } } else { if (nullQ || appendQ || prependQ) { cout << "."; } else { suppressreturn = 1; } } } else if (absQ) { if (tickQ && !rationalQ) { cout << abstick[i]; } else if (tickQ && rationalQ) { RationalNumber anumber(abstick[i], file.getMinTimeBase()); if (uQ) { anumber *= 4; } anumber.printTwoPart(cout); } else { cout << file[i].getAbsBeat(); } } else if (sumQ) { if (lastmeasureline > 0) { cout << fabs(file[lastmeasureline].getBeat()); pickupstate++; lastmeasureline = -1; } else if (pickupstate < 1) { if (!file.getPickupDurationR().isNegative()) { if (measurecount == 0) { cout << getDurationOfFirstMeasure(file).getFloat(); } else { cout << file.getPickupDuration(); } } else if (file.getPickupDurationR().isZero()) { cout << file.getTotalDurationR().getFloat(); } else { cout << file.getTotalDurationR().getFloat(); } pickupstate++; lastmeasureline = -1; } else { if (appendQ || prependQ) { cout << "."; } else { if (nullQ) { cout << "."; } else { suppressreturn = 1; } } } } else if (beatQ) { if (Binfo[i] >= 0) { if (!tickQ && !rationalQ) { cout << Binfo[i].getFloat(); } else if (tickQ && !rationalQ) { cout << (Binfo[i] * minrhy); } else { Binfo[i].printTwoPart(cout); } } else { if (nullQ || appendQ || prependQ) { cout << "."; } else { suppressreturn = 1; } } } if (prependQ) { cout << "\t" << file[i]; } if (suppressreturn) { suppressreturn = 0; } else { cout << "\n"; } break; case E_humrec_local_comment: if (appendQ) { cout << file[i] << "\t"; } cout << "!"; if (prependQ) { cout << "\t" << file[i]; } cout << "\n"; break; case E_humrec_none: case E_humrec_empty: case E_humrec_global_comment: case E_humrec_bibliography: default: cout << file[i] << "\n"; break; } } }