496
static void ProcessSeqEntryList (DRFlagPtr drfp, CharPtr filename)
497
static void ReleaseDiscrepancyReportSeqEntries (DRFlagPtr drfp)
498
ValNodePtr discrepancy_list, vnp;
502
Boolean need_ofp_close = FALSE;
503
Char path [PATH_MAX];
506
if (drfp == NULL || drfp->sep_list == NULL) return;
508
if (drfp->outfp == NULL) {
509
if (StringDoesHaveText (drfp->output_dir)) {
510
if (StringLen (drfp->output_dir) > PATH_MAX) {
511
Message (MSG_ERROR, "Unable to generate output file - path name is too long");
514
StringCpy (path, drfp->output_dir);
516
ptr = StringRChr (filename, '\\');
517
if (path[StringLen(path) - 1] != '\\') {
518
StringCat (path, "\\");
521
ptr = StringRChr (filename, '/');
522
if (path[StringLen(path) - 1] != '/') {
523
StringCat (path, "/");
527
StringNCat (path, filename, PATH_MAX - StringLen(path) - 1);
529
StringNCat (path, ptr + 1, PATH_MAX - StringLen(path) - 1);
532
StringNCpy_0 (path, filename, sizeof (path));
534
ptr = StringRChr (path, '.');
538
if (StringDoesHaveText (drfp->output_suffix)) {
539
StringNCat (path, drfp->output_suffix, PATH_MAX - StringLen(path) - 1);
540
path[PATH_MAX - 1] = 0;
542
StringCat (path, ".dr");
544
if (drfp->outfp == NULL) {
545
ofp = FileOpen (path, "w");
546
need_ofp_close = TRUE;
554
discrepancy_list = CollectDiscrepancies (&(drfp->dcd), drfp->sep_list, taxlookup);
555
WriteAsnDiscReport (discrepancy_list, ofp, &(drfp->ocd), TRUE);
556
discrepancy_list = FreeClickableList (discrepancy_list);
557
507
for (vnp = drfp->sep_list; vnp != NULL; vnp = vnp->next) {
558
508
sep = vnp->data.ptrvalue;
559
509
SeqEntryFree (sep);
566
516
SeqEntrySetScope (NULL);
567
517
drfp->sep_list = ValNodeFree (drfp->sep_list);
569
drfp->ocd.filename_list = FreeFilenameList (drfp->ocd.filename_list);
571
519
drfp->bsplist = UnlockFarComponents (drfp->bsplist);
573
if (ofp != NULL && need_ofp_close) {
523
static void ProcessSeqEntryList (DRFlagPtr drfp, CharPtr filename)
525
ValNodePtr discrepancy_list;
527
Char path [PATH_MAX];
530
if (drfp == NULL || drfp->sep_list == NULL) return;
532
if (StringDoesHaveText (drfp->output_dir)) {
533
if (StringLen (drfp->output_dir) > PATH_MAX) {
534
Message (MSG_ERROR, "Unable to generate output file - path name is too long");
537
StringCpy (path, drfp->output_dir);
539
ptr = StringRChr (filename, '\\');
540
if (path[StringLen(path) - 1] != '\\') {
541
StringCat (path, "\\");
544
ptr = StringRChr (filename, '/');
545
if (path[StringLen(path) - 1] != '/') {
546
StringCat (path, "/");
550
StringNCat (path, filename, PATH_MAX - StringLen(path) - 1);
552
StringNCat (path, ptr + 1, PATH_MAX - StringLen(path) - 1);
555
StringNCpy_0 (path, filename, sizeof (path));
557
ptr = StringRChr (path, '.');
561
if (StringDoesHaveText (drfp->output_suffix)) {
562
StringNCat (path, drfp->output_suffix, PATH_MAX - StringLen(path) - 1);
563
path[PATH_MAX - 1] = 0;
565
StringCat (path, ".dr");
567
ofp = FileOpen (path, "w");
569
discrepancy_list = CollectDiscrepancies (drfp->global_report->test_config, drfp->sep_list, taxlookup);
570
WriteAsnDiscReport (discrepancy_list, ofp, drfp->global_report->output_config, TRUE);
571
discrepancy_list = FreeClickableList (discrepancy_list);
682
680
if (sep != NULL) {
683
681
ValNodeAddPointer (&(drfp->sep_list), 0, sep);
684
ValNodeAddInt (&(drfp->ocd.filename_list), FILENAME_LIST_ENTITY_ID_ITEM, (Int4) entityID);
685
ValNodeAddPointer (&(drfp->ocd.filename_list), FILENAME_LIST_FILENAME_ITEM, StringSave (filename));
687
683
if (drfp->lock) {
688
684
bsplist_next = DoLockFarComponents (sep, drfp);
886
static void ProcessOneRecord (
883
static void ProcessSeqEntryListWithCollation (GlobalDiscrepReportPtr g, ValNodePtr sep_list, CharPtr filename)
888
if (g == NULL || sep_list == NULL) return;
890
for (vnp = sep_list; vnp != NULL; vnp = vnp->next) {
891
sep = vnp->data.ptrvalue;
892
AddSeqEntryToGlobalDiscrepReport (sep, g, filename);
898
static void ProcessOneRecord (CharPtr filename, Pointer userdata)
900
908
ProcessSingleRecord (filename, drfp);
902
911
if (drfp->outfp == NULL) {
903
912
ProcessSeqEntryList (drfp, filename);
914
ProcessSeqEntryListWithCollation (drfp->global_report, drfp->sep_list, filename);
916
ReleaseDiscrepancyReportSeqEntries (drfp);
907
920
/* Args structure contains command-line arguments */
989
1003
TRUE, 'X', ARG_STRING, 0.0, 0, NULL},
990
1004
{"Summary Report", "F", NULL, NULL,
991
1005
TRUE, 'S', ARG_BOOLEAN, 0.0, 0, NULL},
1006
{"Big Sequence Report", "F", NULL, NULL,
1007
TRUE, 'B', ARG_BOOLEAN, 0.0, 0, NULL},
992
1008
{"Max Count", "0", NULL, NULL,
993
1009
TRUE, 'C', ARG_INT, 0.0, 0, NULL},
1024
1041
CharPtr enabled_list, disabled_list, err_msg;
1025
1042
Boolean batch, binary, compressed, dorecurse,
1026
1043
indexed, local, lock, remote, usethreads;
1028
1045
DRFlagData dfd;
1046
Boolean big_sequence_report;
1030
1048
/* standard setup */
1099
1117
lock = (Boolean) myargs [l_argLockFar].intvalue;
1100
1118
usethreads = (Boolean) myargs [T_argThreads].intvalue;
1101
1119
dfd.farFetchCDSproducts = (Boolean) myargs [Z_argRemoteCDS].intvalue;
1102
ExpandDiscrepancyReportTestsFromString ((CharPtr) myargs [X_argExpandCategories].strvalue, TRUE, &dfd.ocd);
1103
dfd.ocd.summary_report = (Boolean) myargs [S_argSummaryReport].intvalue;
1105
1121
/* set up Discrepancy Report Configuration */
1122
dfd.global_report = GlobalDiscrepReportNew ();
1123
dfd.global_report->test_config = DiscrepancyConfigNew();
1125
ExpandDiscrepancyReportTestsFromString ((CharPtr) myargs [X_argExpandCategories].strvalue, TRUE, dfd.global_report->output_config);
1126
dfd.global_report->output_config->summary_report = (Boolean) myargs [S_argSummaryReport].intvalue;
1128
big_sequence_report = (Boolean) myargs [B_argBigSequenceReport].intvalue;
1106
1130
enabled_list = (CharPtr) myargs [e_argEnableTests].strvalue;
1107
1131
disabled_list = (CharPtr) myargs [d_argDisableTests].strvalue;
1134
#ifdef INTERNAL_NCBI_ASNDISC
1135
dfd.global_report->taxlookup = CheckTaxNamesAgainstTaxDatabase;
1109
1138
err_msg = NULL;
1110
1139
if (StringDoesHaveText (enabled_list) && StringDoesHaveText (disabled_list)) {
1111
1140
err_msg = StringSave ("Cannot specify both -e and -d. Choose -e to enable only a few tests and disable the rest, choose -d to disable only a few tests and enable the rest.");
1112
1141
} else if (StringDoesHaveText (disabled_list)) {
1113
for (k = 0; k < MAX_DISC_TYPE; k++) {
1114
dfd.dcd.conf_list[k] = TRUE;
1142
if (big_sequence_report) {
1143
ConfigureForBigSequence (dfd.global_report->test_config);
1145
ConfigureForGenomes (dfd.global_report->test_config);
1116
DisableTRNATests (&(dfd.dcd));
1118
1148
/* now disable tests from string */
1119
err_msg = SetDiscrepancyReportTestsFromString (disabled_list, FALSE, &(dfd.dcd));
1149
err_msg = SetDiscrepancyReportTestsFromString (disabled_list, FALSE, dfd.global_report->test_config);
1120
1150
} else if (StringDoesHaveText (enabled_list)) {
1121
for (k = 0; k < MAX_DISC_TYPE; k++) {
1122
dfd.dcd.conf_list[k] = FALSE;
1151
if (big_sequence_report) {
1152
ConfigureForBigSequence (dfd.global_report->test_config);
1154
ConfigureForGenomes (dfd.global_report->test_config);
1124
1156
/* now enable tests from string */
1125
err_msg = SetDiscrepancyReportTestsFromString (enabled_list, TRUE, &(dfd.dcd));
1157
err_msg = SetDiscrepancyReportTestsFromString (enabled_list, TRUE, dfd.global_report->test_config);
1127
/* enable all tests by default */
1128
for (k = 0; k < MAX_DISC_TYPE; k++) {
1129
dfd.dcd.conf_list[k] = TRUE;
1159
if (big_sequence_report) {
1160
ConfigureForBigSequence (dfd.global_report->test_config);
1162
ConfigureForGenomes (dfd.global_report->test_config);
1131
DisableTRNATests (&(dfd.dcd));
1133
1165
if (err_msg != NULL) {
1134
1166
Message (MSG_FATAL, err_msg);
1226
1258
AsnIndexedLibFetchEnable (asnidx, TRUE);
1229
/* recurse through all files within source directory or subdirectories */
1231
1261
if (StringDoesHaveText (directory)) {
1233
1262
DirExplore (directory, NULL, suffix, dorecurse, ProcessOneRecord, (Pointer) &dfd);
1234
if (dfd.outfp != NULL) {
1235
ProcessSeqEntryList (&dfd, NULL);
1238
1264
} else if (StringDoesHaveText (infile)) {
1240
1266
ProcessOneRecord (infile, (Pointer) &dfd);
1241
if (dfd.outfp != NULL) {
1242
ProcessSeqEntryList (&dfd, NULL);
1246
1268
if (dfd.outfp != NULL) {
1269
WriteGlobalDiscrepancyReport (dfd.global_report, dfd.outfp);
1247
1270
FileClose (dfd.outfp);
1274
dfd.global_report = GlobalDiscrepReportFree (dfd.global_report);
1250
1276
/* close fetch functions */