894
898
SeqMgrFeatContext fcontext;
895
899
CharPtr report_str = NULL;
900
CharPtr report_fmt = "%s\t%s\t%s\t%s\n";
897
902
Char seqid [128];
899
904
if (sfp == NULL) return NULL;
900
/* want: accession number for sequence, ec number, locus tag */
905
/* want: accession number for sequence, ec number, locus tag, protein name */
902
907
/* find accession number */
903
908
if (sfp->idx.subtype == FEATDEF_PROT) {
974
report_len = StringLen (seqid) + StringLen (ec_number) + 4;
982
report_len = StringLen (seqid) + StringLen (ec_number) + StringLen (report_fmt);
975
983
if (grp != NULL) {
976
984
report_len += StringLen (grp->locus_tag);
986
if (prot_name != NULL) {
987
report_len += StringLen (prot_name);
978
989
report_str = (CharPtr) MemNew (sizeof (Char) * report_len);
979
sprintf (report_str, "%s\t%s\t%s\n", seqid, ec_number, (grp != NULL && grp->locus_tag != NULL) ? grp->locus_tag : "");
990
sprintf (report_str, report_fmt, seqid, ec_number,
991
(grp != NULL && grp->locus_tag != NULL) ? grp->locus_tag : "",
992
prot_name == NULL ? "" : prot_name);
980
993
ec_number = MemFree (ec_number);
981
994
return report_str;
1567
static Boolean MakeFieldReports (ValNodePtr report_list, ValNodePtr field_list, FILE *fp)
1569
ValNodePtr item_vnp, field_vnp;
1571
Boolean found_any = FALSE;
1574
if (report_list == NULL || fp == NULL) return FALSE;
1576
for (item_vnp = report_list; item_vnp != NULL; item_vnp = item_vnp->next)
1578
cp = GetDiscrepancyItemText (item_vnp);
1581
label = GetParentLabelForDiscrepancyItem (item_vnp);
1582
if (label != NULL) {
1583
fprintf (fp, "%s:", label);
1584
label = MemFree (label);
1586
fprintf (fp, "%s", cp);
1590
for (field_vnp = field_list; field_vnp != NULL; field_vnp = field_vnp->next) {
1591
cp = GetFieldValueForObject (item_vnp->choice, item_vnp->data.ptrvalue, field_vnp, NULL);
1592
fprintf (fp, "\t%s", cp == NULL ? "" : cp);
1601
static Boolean MakeBadInstCodeReport (ValNodePtr item_list, FILE *fp)
1603
ValNodePtr item_vnp;
1607
Boolean found_any = FALSE;
1610
if (item_list == NULL || fp == NULL) return FALSE;
1612
for (item_vnp = item_list; item_vnp != NULL; item_vnp = item_vnp->next)
1614
cp = GetDiscrepancyItemText (item_vnp);
1617
/* get rid of trailing carriage return */
1618
*(cp + StringLen (cp) - 1) = 0;
1619
label = GetParentLabelForDiscrepancyItem (item_vnp);
1622
fprintf (fp, "%s:", label);
1623
label = MemFree (label);
1625
fprintf (fp, "%s", cp);
1629
biop = GetBioSourceFromObject (item_vnp->choice, item_vnp->data.ptrvalue);
1630
if (biop != NULL && biop->org != NULL && biop->org->orgname != NULL) {
1631
for (mod = biop->org->orgname->mod; mod != NULL; mod = mod->next) {
1632
if (mod->subtype == ORGMOD_culture_collection
1633
|| mod->subtype == ORGMOD_bio_material
1634
|| mod->subtype == ORGMOD_specimen_voucher) {
1635
label = StringSave (mod->subname);
1636
cp = StringChr (label, ':');
1640
fprintf (fp, "\t%s", label == NULL ? "" : label);
1641
label = MemFree (label);
1651
static Boolean MakeBadECNumberReport (ValNodePtr ecnumber_list, FILE *fp)
1653
Boolean found_any = FALSE;
1657
if (ecnumber_list == NULL || fp == NULL) {
1661
fprintf (fp, "EC Number Errors\n");
1662
for (vnp = ecnumber_list; vnp != NULL; vnp = vnp->next) {
1663
cp = GetEcNumberReport (vnp->data.ptrvalue);
1665
fprintf (fp, "%s", cp);
1554
1675
static void MakeValidatorReport (ButtoN b)
1556
1677
ValidExtraPtr vep;
1643
1765
ValNodeAddPointer (&specific_host_list, OBJ_SEQFEAT, sfp);
1768
} else if (eip->errcode == 2 && eip->subcode == 53) {
1769
if (eip->itemtype == OBJ_SEQDESC) {
1770
sdp = SeqMgrGetDesiredDescriptor (eip->entityID, NULL, eip->itemID, 0, NULL, &dcontext);
1772
ValNodeAddPointer (&bad_inst_code, OBJ_SEQDESC, sdp);
1774
} else if (eip->itemtype == OBJ_SEQFEAT) {
1775
sfp = SeqMgrGetDesiredFeature (eip->entityID, NULL, eip->itemID, 0, NULL, &fcontext);
1777
ValNodeAddPointer (&bad_inst_code, OBJ_SEQFEAT, sfp);
1646
1780
} else if (eip->itemtype == OBJ_SEQFEAT) {
1647
1781
sfp = SeqMgrGetDesiredFeature (eip->entityID, NULL, eip->itemID, 0, NULL, &fcontext);
1648
1782
if (sfp != NULL) {
1676
1810
if (ecnumber_list != NULL) {
1677
fprintf (fp, "EC Number Errors\n");
1678
for (vnp = ecnumber_list; vnp != NULL; vnp = vnp->next) {
1679
cp = GetEcNumberReport (vnp->data.ptrvalue);
1681
fprintf (fp, "%s", cp);
1811
found_any |= MakeBadECNumberReport(ecnumber_list, fp);
1687
1812
ecnumber_list = ValNodeFree (ecnumber_list);
1693
1818
found_any = TRUE;
1821
if (bad_inst_code != NULL) {
1822
fprintf (fp, "Bad Institution Codes\n");
1823
found_any |= MakeBadInstCodeReport(bad_inst_code, fp);
1696
1826
found_any |= MakeStandardReports (chosen, report_lists, fp);
1698
1828
for (pos = 0; pos < num_reports; pos++) {