1 | #include <xview/xview.h> |
---|
2 | #include <xview/canvas.h> |
---|
3 | #include <stdio.h> |
---|
4 | #include <string.h> |
---|
5 | #include <malloc.h> |
---|
6 | #include "loop.h" |
---|
7 | #include "globals.h" |
---|
8 | |
---|
9 | ReadSeqSet(dataset) |
---|
10 | DataSet *dataset; |
---|
11 | { |
---|
12 | int i,j,taxanum=0,len,pos,flag=TRUE; |
---|
13 | char inlin[132],temp[132],seq[20000],*name; |
---|
14 | |
---|
15 | for(i=0;fgets(inlin,132,infile);i++) |
---|
16 | { |
---|
17 | for(;(pos=Find("LOCUS",inlin)) == -1 && flag; |
---|
18 | flag = (int)fgets(inlin,132,infile)); |
---|
19 | sscanf((inlin+5+pos),"%s",temp); |
---|
20 | name=malloc(strlen(temp)); |
---|
21 | strcpy(name,temp); |
---|
22 | len=0; |
---|
23 | for(;flag && Find("ORIGIN",inlin) == -1; |
---|
24 | flag =(int)fgets(inlin,132,infile)); |
---|
25 | for(fgets(inlin,132,infile); |
---|
26 | flag && Find("//",inlin)== -1; |
---|
27 | flag = (int)fgets(inlin,132,infile)) |
---|
28 | { |
---|
29 | for(j=0;inlin[j]!='\0';j++) |
---|
30 | if(inlin[j] != ' ' && inlin[j]!='\t' |
---|
31 | && (inlin[j] <'0' || inlin[j] >'9') && |
---|
32 | inlin[j] != '\n') |
---|
33 | seq[len++]=inlin[j]; |
---|
34 | } |
---|
35 | seq[len]='\0'; |
---|
36 | if(Find(temp,"HELIX")!= -1 || |
---|
37 | Find("Helix",temp)!= -1 || |
---|
38 | Find(temp,"helix")!= -1 ) |
---|
39 | { |
---|
40 | dataset->helix.name=name; |
---|
41 | ErrorOut("malloc failed in ReadData", |
---|
42 | dataset ->helix.sequence = malloc(len)); |
---|
43 | strcpy(dataset->helix.sequence,seq); |
---|
44 | dataset->helix.len=len; |
---|
45 | } |
---|
46 | else |
---|
47 | { |
---|
48 | ErrorOut("malloc failed in ReadData", |
---|
49 | dataset ->taxa[taxanum].sequence = malloc(len)); |
---|
50 | strcpy(dataset->taxa[taxanum].sequence,seq); |
---|
51 | dataset->taxa[taxanum].len=len; |
---|
52 | dataset->taxa[taxanum++].name=name; |
---|
53 | } |
---|
54 | } |
---|
55 | dataset->siz = taxanum; |
---|
56 | dataset->len = dataset -> helix.len; |
---|
57 | } |
---|
58 | |
---|
59 | Find(a,b) |
---|
60 | char a[],b[]; |
---|
61 | { |
---|
62 | int i,j,range,fail=TRUE; |
---|
63 | range=strlen(b)-strlen(a); |
---|
64 | if(range<0) |
---|
65 | return(-1); |
---|
66 | for(j=0;j<=range && fail;j++) |
---|
67 | { |
---|
68 | fail=FALSE; |
---|
69 | for(i=0;(a[i] != '\0') && (fail == FALSE);i++) |
---|
70 | if (a[i] != b[j+i]) |
---|
71 | fail=TRUE; |
---|
72 | } |
---|
73 | return(fail ? -1:j); |
---|
74 | } |
---|
75 | |
---|
76 | |
---|
77 | |
---|
78 | Translate(dset,seqnum,blist,seqlen) |
---|
79 | DataSet *dset; |
---|
80 | Base **blist; |
---|
81 | int seqnum,*seqlen; |
---|
82 | { |
---|
83 | int pos=0,j,pair; |
---|
84 | char *helix,*seq; |
---|
85 | int stk[10000],stkp; |
---|
86 | |
---|
87 | Mxdepth = 0; |
---|
88 | *seqlen=dset->taxa[seqnum].len; |
---|
89 | ErrorOut("Error in malloc (Translate)", |
---|
90 | (*blist)=(Base*)calloc(*seqlen, sizeof(Base))); |
---|
91 | helix=dset->helix.sequence; |
---|
92 | seq=dset->taxa[seqnum].sequence; |
---|
93 | seqname=dset->taxa[seqnum].name; |
---|
94 | for(j=0;j<dset->taxa[seqnum].len;j++) |
---|
95 | if((seq[j]!='-') && (seq[j] != '.')) |
---|
96 | { |
---|
97 | (*blist)[pos].pair= -1; |
---|
98 | if(j<dset->len) |
---|
99 | { |
---|
100 | (*blist)[pos].depth=stkp; |
---|
101 | if(helix[j] =='[') |
---|
102 | { |
---|
103 | stk[stkp++]=pos; |
---|
104 | (*blist)[pos].depth=stkp; |
---|
105 | } |
---|
106 | if(helix[j] == ']') |
---|
107 | { |
---|
108 | pair=stk[--stkp]; |
---|
109 | (*blist)[pair].pair=pos; |
---|
110 | (*blist)[pos].pair=pair; |
---|
111 | } |
---|
112 | if(stkp>Mxdepth) |
---|
113 | Mxdepth = stkp; |
---|
114 | } |
---|
115 | (*blist)[pos].known=FALSE; |
---|
116 | (*blist)[pos].dir=CW; |
---|
117 | (*blist)[pos].attr=0; |
---|
118 | (*blist)[pos].size=9; |
---|
119 | (*blist)[pos].dforw.pair= -1; |
---|
120 | (*blist)[pos].dback.pair= -1; |
---|
121 | (*blist)[pos].pos=NULL; |
---|
122 | (*blist)[pos].posnum= -1; |
---|
123 | (*blist)[pos].rel_loc=j; |
---|
124 | (*blist)[pos++].nuc=seq[j]; |
---|
125 | } |
---|
126 | (*blist)[0].x=0.0; |
---|
127 | (*blist)[0].y=0.0; |
---|
128 | (*blist)[0].known=TRUE; |
---|
129 | (*blist)[pos-1].x=3.0; |
---|
130 | (*blist)[pos-1].y=0.0; |
---|
131 | (*blist)[pos-1].known=TRUE; |
---|
132 | |
---|
133 | *seqlen=pos; |
---|
134 | for(j=19;j<pos;j+=20) |
---|
135 | { |
---|
136 | baselist[j].label = (Label*)malloc(sizeof(Label)); |
---|
137 | baselist[j].label->dist = 1.5; |
---|
138 | baselist[j].label->distflag = TRUE; |
---|
139 | sprintf(baselist[j].label->text,"%d",j+1); |
---|
140 | baselist[j].attr |= BOLD; |
---|
141 | } |
---|
142 | baselist[0].label = (Label*)malloc(sizeof(Label)); |
---|
143 | baselist[0].label->dist = 1.5; |
---|
144 | baselist[0].label->distflag = TRUE; |
---|
145 | sprintf(baselist[0].label->text,"%d",1); |
---|
146 | baselist[0].attr |= BOLD; |
---|
147 | |
---|
148 | ddepth = Mxdepth+5; |
---|
149 | return; |
---|
150 | } |
---|