| 1 | |
|---|
| 2 | #include <xview/xview.h> |
|---|
| 3 | #include <xview/canvas.h> |
|---|
| 4 | #include <stdio.h> |
|---|
| 5 | #include <string.h> |
|---|
| 6 | #include <malloc.h> |
|---|
| 7 | #include "loop.h" |
|---|
| 8 | #include "globals.h" |
|---|
| 9 | |
|---|
| 10 | SaveTemp() |
|---|
| 11 | { |
|---|
| 12 | int i,j; |
|---|
| 13 | FILE *outfile; |
|---|
| 14 | Base base; |
|---|
| 15 | |
|---|
| 16 | outfile = fopen("loop.temp","w"); |
|---|
| 17 | if(outfile == NULL) |
|---|
| 18 | { |
|---|
| 19 | fprintf(stderr,"Sorry, cannot open save file\n"); |
|---|
| 20 | return; |
|---|
| 21 | } |
|---|
| 22 | |
|---|
| 23 | for(i=0;i<seqlen;i++) |
|---|
| 24 | { |
|---|
| 25 | base = baselist[i]; |
|---|
| 26 | fprintf(outfile,"index %d\n",base.rel_loc); |
|---|
| 27 | fprintf(outfile,"attr %d\n",base.attr); |
|---|
| 28 | fprintf(outfile,"size %d\n",base.size); |
|---|
| 29 | fprintf(outfile,"dir %d\n",base.dir); |
|---|
| 30 | if(base.label !=NULL) |
|---|
| 31 | fprintf(outfile,"label %s\n",base.label->text); |
|---|
| 32 | if(base.dforw.pair != -1) |
|---|
| 33 | fprintf(outfile,"distance %d %f\n", |
|---|
| 34 | baselist[base.dforw.pair].rel_loc,base.dforw.dist); |
|---|
| 35 | if(base.posnum>0) |
|---|
| 36 | { |
|---|
| 37 | fprintf(outfile,"positional %d\n",base.posnum); |
|---|
| 38 | for(j=0;j<base.posnum;j++) |
|---|
| 39 | fprintf(outfile,"%d %f %f\n", |
|---|
| 40 | baselist[base.pos->pair].rel_loc, |
|---|
| 41 | base.pos->dx,base.pos->dy); |
|---|
| 42 | } |
|---|
| 43 | } |
|---|
| 44 | fclose(outfile); |
|---|
| 45 | return; |
|---|
| 46 | } |
|---|
| 47 | |
|---|
| 48 | ImposeTemp() |
|---|
| 49 | { |
|---|
| 50 | int i,j,k,nxd,temp; |
|---|
| 51 | double x,y,ftemp; |
|---|
| 52 | char inlin[132]; |
|---|
| 53 | |
|---|
| 54 | for(;fgets(inlin,132,tempfile) != NULL;) |
|---|
| 55 | { |
|---|
| 56 | if(find("index",inlin)) |
|---|
| 57 | { |
|---|
| 58 | sscanf(inlin,"%*6c%d",&temp); |
|---|
| 59 | nxd = ReltoAbs(temp); |
|---|
| 60 | } |
|---|
| 61 | |
|---|
| 62 | else if(find("attr",inlin)) |
|---|
| 63 | { |
|---|
| 64 | sscanf(inlin,"%*5c%d",&temp); |
|---|
| 65 | baselist[nxd].attr = temp; |
|---|
| 66 | } |
|---|
| 67 | |
|---|
| 68 | else if(find("size",inlin)) |
|---|
| 69 | { |
|---|
| 70 | sscanf(inlin,"%*5c%d",&temp); |
|---|
| 71 | baselist[nxd].size = temp; |
|---|
| 72 | } |
|---|
| 73 | |
|---|
| 74 | else if(find("dir",inlin)) |
|---|
| 75 | { |
|---|
| 76 | sscanf(inlin,"%*4c%d",&temp); |
|---|
| 77 | baselist[nxd].dir = temp; |
|---|
| 78 | } |
|---|
| 79 | |
|---|
| 80 | else if(find("distance",inlin)) |
|---|
| 81 | { |
|---|
| 82 | sscanf(inlin,"%*9c%d %f",&temp,&ftemp); |
|---|
| 83 | baselist[nxd].dforw.pair = ReltoAbs(temp); |
|---|
| 84 | baselist[nxd].dforw.dist = ftemp; |
|---|
| 85 | } |
|---|
| 86 | |
|---|
| 87 | else if(find("positional",inlin)) |
|---|
| 88 | { |
|---|
| 89 | sscanf(inlin,"%*11c%d",&k); |
|---|
| 90 | for(j=0;j<k;j++) |
|---|
| 91 | { |
|---|
| 92 | baselist[nxd].posnum = -1; |
|---|
| 93 | fscanf(tempfile,"%d %f %f",&temp,&x,&y); |
|---|
| 94 | SetPos(nxd,ReltoAbs(temp),x,y); |
|---|
| 95 | } |
|---|
| 96 | } |
|---|
| 97 | } |
|---|
| 98 | return; |
|---|
| 99 | } |
|---|
| 100 | |
|---|
| 101 | |
|---|
| 102 | ReltoAbs(ndx) |
|---|
| 103 | int ndx; |
|---|
| 104 | { |
|---|
| 105 | int i,j; |
|---|
| 106 | for(j=0;j<seqlen;j++) |
|---|
| 107 | if(baselist[j].rel_loc == ndx) |
|---|
| 108 | return(j); |
|---|
| 109 | fprintf(stderr," Rel to Abs: not found in %d positions\n",seqlen); |
|---|
| 110 | return(-1); |
|---|
| 111 | } |
|---|
| 112 | |
|---|
| 113 | find(a,b) |
|---|
| 114 | char *a,*b; |
|---|
| 115 | { |
|---|
| 116 | int i,j,len1,len2,dif,flag = FALSE; |
|---|
| 117 | |
|---|
| 118 | dif = (len2 = strlen(b)) - (len1 = strlen(a)); |
|---|
| 119 | |
|---|
| 120 | for(j=0;j<dif && flag == FALSE;j++) |
|---|
| 121 | { |
|---|
| 122 | flag = TRUE; |
|---|
| 123 | for(i=0;i<len1 && flag;i++) |
|---|
| 124 | flag = (a[i] == b[i+j])?TRUE:FALSE; |
|---|
| 125 | |
|---|
| 126 | } |
|---|
| 127 | return(flag); |
|---|
| 128 | } |
|---|