1 /* list_db.c - report values from map_db.c */
3 /* copyright (c) 1999 William R. Pearson */
5 /* format of the index file:
7 1) map_db version number ["MP"+2 bytes]
8 2) number of sequences in database [4 bytes]
9 3) total length of database [8 bytes]
10 4) longest sequence in database [8 bytes]
11 5) list of offsets to definitions [num_seq+1] int*8
12 6) list of offsets to sequences [num_seq+1] int*8
13 7) list of flag characters for sequences [num_seq+1] bytes
14 (used for GCG binary to encode 2bit or 4 bit representation)
16 sequence files will be as defined by their format
24 #include "ncbl2_head.h"
26 void src_int4_write(FILE *, int);
27 void src_int4_read(FILE *, int *);
28 void src_long4_read(FILE *, long *);
29 void src_long8_write(FILE *, long);
30 void src_long8_read(FILE *, long *);
32 void newname(char *nname, char *oname, char *suff, int maxn);
34 main(int argc, char **argv)
43 int d_pos; /* start of description */
44 int s_pos; /* start of sequence */
45 int attr; /* sequence attribute */
46 int lib_aa; /* 0 => DNA, 1 => protein */
47 int nlib; /* number of entries */
49 long max_len; /* longest sequence */
50 long tot_len; /* total sequence length */
53 int lib_size; /* current space available - may be realloc'ed */
55 int lib_type; /* 1 for protein, 0 for DNA */
56 int lib_dna; /* dna=1; prot=0; */
57 long *d_pos_arr; /* array of description pointers */
58 long *s_pos_arr; /* array of description pointers */
59 char *attr_arr; /* array of attribute chars */
66 /* open the database */
67 if (argc > 1) strncpy(lname, argv[1],sizeof(lname));
69 fprintf(stderr," Entry library name: ");
70 fgets(lname,sizeof(lname),stdin);
71 if ((bp=strchr(lname,'\n'))!=NULL) *bp='\0';
74 if ((bp=strchr(lname,' '))!=NULL) {
75 lib_type = atoi(bp+1);
80 newname(iname,lname,"xin",sizeof(iname));
82 if ((libi=fopen(iname,"r"))==NULL) {
83 fprintf(stderr," cannot open %s\n",iname);
87 fread(format,1,sizeof(format),libi);
88 printf("%c%c%d %d\n",format[0],format[1],format[2],format[3]);
89 mm64_flag = (format[2]==1);
91 src_int4_read(libi,&lib_aa);
93 if (mm64_flag) src_long8_read(libi,&f_size);
94 else src_long4_read(libi,&f_size);
96 src_int4_read(libi,&nlib);
99 src_long8_read(libi,&tot_len);
100 src_long8_read(libi,&max_len);
103 src_long4_read(libi,&tot_len);
104 src_long4_read(libi,&max_len);
107 printf(" %d entries; tot: %ld; max: %ld\n",nlib,tot_len,max_len);
109 /* allocate array of description pointers */
110 if ((d_pos_arr=(long *)calloc(nlib+1, sizeof(long)))==NULL) {
111 fprintf(stderr," cannot allocate %d for desc. array\n",nlib+1);
114 /* allocate array of sequence pointers */
115 if ((s_pos_arr=(long *)calloc(nlib+1, sizeof(long)))==NULL) {
116 fprintf(stderr," cannot allocate %d for seq. array\n",nlib+1);
119 if ((attr_arr=(char *)calloc(nlib+1, sizeof(char)))==NULL) {
120 fprintf(stderr," cannot allocate %d for attr. array\n",nlib+1);
125 for (i=0; i<=nlib; i++) src_long8_read(libi,&d_pos_arr[i]);
126 for (i=0; i<=nlib; i++) src_long8_read(libi,&s_pos_arr[i]);
129 for (i=0; i<=nlib; i++) src_long4_read(libi,&d_pos_arr[i]);
130 for (i=0; i<=nlib; i++) src_long4_read(libi,&s_pos_arr[i]);
133 fread(attr_arr,nlib+1,sizeof(char),libi);
136 printf("header\tseq\n");
138 for (i=0; i<nlib; i++) printf("%ld\t%ld\n",d_pos_arr[i],s_pos_arr[i]);
141 void src_int4_read(FILE *fd, int *val)
145 fread(&tval,(size_t)4,(size_t)1,fd);
150 fread((char *)&b[0],(size_t)1,(size_t)4,fd);
152 *val = (int)((int)((int)(b[0]<<8)+(int)b[1]<<8)+(int)b[2]<<8)
157 void src_long4_read(FILE *fd, long *val)
161 fread(&tval,(size_t)4,(size_t)1,fd);
166 fread((char *)&b[0],(size_t)1,(size_t)4,fd);
168 *val = (int)((int)((int)(b[0]<<8)+(int)b[1]<<8)+(int)b[2]<<8)
173 void src_long8_read(FILE *fd, long *val)
176 fread((char *)val,(size_t)8,(size_t)1,fd);
180 fread((char *)&b[0],(size_t)1,(size_t)8,fd);
183 ((((((((int)b[0]<<8)+(int)b[1]<<8)+(int)b[2]<<8)+(int)b[3]<<8)+
184 (int)b[4]<<8)+(int)b[5]<<8)+(int)b[6]<<8)+(int)b[7];
188 void src_int4_write(FILE *fd, int val)
191 fwrite(&val,(size_t)4,(size_t)1,fd);
196 b[2] = (val=val>>8)&255;
197 b[1] = (val=val>>8)&255;
198 b[0] = (val=val>>8)&255;
200 fwrite(b,(size_t)1,(size_t)4,fd);
205 newname(char *nname, char *oname, char *suff, int maxn)
207 strncpy(nname,oname,maxn-1);
208 strncat(nname,".",1);
209 strncat(nname,suff,maxn-strlen(nname));