1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
/*****************************************************************************
*
* packfilt.c
* Packs input stream if Bioseq-set of SeqEntry
*
*****************************************************************************/
#include <sequtil.h>
#include <objall.h>
Args myargs[] = {
{"Filename for asn.1 input","stdin",NULL,NULL,TRUE,'a',ARG_FILE_IN,0.0,0,NULL},
{"Input is a Seq-entry","F", NULL ,NULL ,TRUE,'e',ARG_BOOLEAN,0.0,0,NULL},
{"Input asnfile in binary mode","F",NULL,NULL,TRUE,'b',ARG_BOOLEAN,0.0,0,NULL},
{"Output Filename","stdout", NULL,NULL,TRUE,'o',ARG_FILE_OUT,0.0,0,NULL},
{"Output asnfile in binary mode","F",NULL,NULL,TRUE,'p',ARG_BOOLEAN,0.0,0,NULL},
{"Output error logfile","stderr", NULL,NULL,TRUE,'l',ARG_FILE_OUT,0.0,0,NULL},
};
Int2 Main(void)
{
AsnIoPtr aip, aipout;
AsnTypePtr atp = NULL, atp1, atp2;
AsnModulePtr amp;
Boolean error_msgs=TRUE;
SeqEntryPtr the_set;
Int4 num = 0;
DataVal av;
if ( ! GetArgs("packfilt", sizeof(myargs)/sizeof(Args), myargs))
return 1;
ErrSetMessageLevel(SEV_NONE);
ErrSetOptFlags(EO_SHOW_CODES);
if (! SeqEntryLoad())
ErrShow();
atp = AsnFind("Bioseq-set"); /* get the initial type pointers */
if (atp == NULL)
ErrShow();
atp2 = AsnFind("Bioseq-set.seq-set.E");
if (atp2 == NULL)
ErrShow();
/* open the i/o files in the right mode */
if ((aip =
AsnIoOpen (myargs[0].strvalue, myargs[2].intvalue?"rb":"r")) == NULL){
ErrPostEx(SEV_ERROR,0,0, "Can't read %s", myargs[0].strvalue);
exit (1);
}
if ((aipout =
AsnIoOpen (myargs[3].strvalue, myargs[4].intvalue?"wb":"r")) == NULL){
ErrPostEx(SEV_ERROR,0,0, "Can't write %s", myargs[3].strvalue);
exit (1);
}
if (myargs[5].strvalue != NULL) { /* log errors instead of die */
if (! ErrSetLog (myargs[5].strvalue))
ErrShow();
else
ErrSetOpts (ERR_TEE, ERR_LOG_ON);
}
amp = AsnAllModPtr();
if (amp == NULL)
ErrShow();
if (myargs[1].intvalue) {
the_set = SeqEntryAsnRead(aip, NULL);
SeqEntryPack(the_set);
num ++;
SeqEntryAsnWrite (the_set, aipout, NULL);
SeqEntryFree(the_set);
} else {
while ((atp = AsnReadId(aip, amp, atp)) != NULL) {
if (atp == atp2) { /* top level Seq-entry */
the_set = SeqEntryAsnRead(aip, atp);
SeqEntryPack(the_set);
num ++;
SeqEntryAsnWrite (the_set, aipout, atp);
SeqEntryFree(the_set);
} else {
AsnReadVal(aip, atp, &av);
AsnWrite(aipout, atp, &av);
AsnKillValue(atp, &av);
}
}
}
ErrPostEx(SEV_INFO, 1, 1, "[%ld] entries have been packed from %s.\n", num,myargs[0].strvalue);
AsnIoClose(aip);
AsnIoClose(aipout);
return(0);
}
|