Annotation of OpenXM_contrib2/asir2000/io/biovar.c, Revision 1.1.1.1
1.1 noro 1: /* $OpenXM: OpenXM/src/asir99/io/biovar.c,v 1.1.1.1 1999/11/10 08:12:30 noro Exp $ */
2: #include "ca.h"
3: #include "parse.h"
4: #include "ox.h"
5:
6: static V *vtab;
7: VL file_vl;
8:
9: void savevl(s,vl)
10: FILE *s;
11: VL vl;
12: {
13: int n,i;
14: VL tvl;
15:
16: for ( tvl = vl, n = 0; tvl; tvl = NEXT(tvl))
17: if ( tvl->v->attr != (pointer)V_UC && tvl->v->attr != (pointer)V_PF )
18: n++;
19: write_int(s,&n);
20: vtab = (V *)CALLOC(n,sizeof(V));
21: for ( tvl = vl, i = 0; i < n; tvl = NEXT(tvl) )
22: if ( tvl->v->attr != (pointer)V_UC && tvl->v->attr != (pointer)V_PF ) {
23: vtab[i] = tvl->v; savev(s,vtab[i]); i++;
24: }
25: }
26:
27: void loadvl(s)
28: FILE *s;
29: {
30: int n,i,need_reorder;
31: V v1,v2;
32: VL t,t1;
33:
34: read_int(s,&n);
35: vtab = (V *)CALLOC(n,sizeof(V));
36: for ( i = 0; i < n; i++ )
37: loadv(s,&vtab[i]);
38: need_reorder = 0;
39: for ( i = 0; i < n-1; i++ ) {
40: v1 = vtab[i]; v2 = vtab[i+1];
41: for ( t = CO; t->v != v1 && t->v != v2; t = NEXT(t) );
42: if ( t->v == v2 ) {
43: need_reorder = 1; break;
44: }
45: }
46: if ( need_reorder ) {
47: for ( i = n-1, t = 0; i >= 0; i-- ) {
48: NEWVL(t1); t1->v = vtab[i]; NEXT(t1) = t; t = t1;
49: }
50: file_vl = t;
51: } else
52: file_vl = 0;
53: }
54:
55: void skipvl(s)
56: FILE *s;
57: {
58: int n,i,size,len;
59:
60: read_int(s,&n);
61: for ( i = 0, size = 0; i < n; i++ ) {
62: read_int(s,&len); size += len;
63: }
64: fseek(s,size,1L);
65: }
66:
67: void savev(s,v)
68: FILE *s;
69: V v;
70: {
71: savestr(s,NAME(v));
72: }
73:
74: void loadv(s,vp)
75: FILE *s;
76: V *vp;
77: {
78: P p;
79: char *name;
80:
81: loadstr(s,&name);
82: if ( name ) {
83: makevar(name,&p);
84: *vp = VR(p);
85: } else
86: *vp = 0;
87: }
88:
89: int save_convv(v)
90: V v;
91: {
92: int i;
93:
94: if ( ox_do_count )
95: return 0;
96: if ( v->attr == (pointer)V_PF )
97: return -1;
98: for ( i = 0; vtab[i]; i++ )
99: if ( vtab[i] == v )
100: return i;
101: }
102:
103: V load_convv(vindex)
104: int vindex;
105: {
106: return vtab[vindex];
107: }
108:
109: void swap_bytes(ptr,unit,size)
110: char *ptr;
111: int unit,size;
112: {
113: char *p;
114: int i,j,hunit;
115: char t;
116:
117: for ( i = 0, p = ptr, hunit = unit/2; i < size; i++, p += unit )
118: for ( j = 0; j < hunit; j++ ) {
119: t = p[j]; p[j] = p[unit-j-1]; p[unit-j-1] = t;
120: }
121: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>