Annotation of OpenXM_contrib2/asir2000/io/biovar.c, Revision 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>