1*1713Smckusick /* Copyright (c) 1979 Regents of the University of California */ 2*1713Smckusick 3*1713Smckusick static char sccsid[] = "@(#)UNPACK.c 1.1 10/30/80"; 4*1713Smckusick 5*1713Smckusick #include "h01errs.h" 6*1713Smckusick 7*1713Smckusick /* 8*1713Smckusick * unpack(z,a,i) 9*1713Smckusick * 10*1713Smckusick * with: z and a as in pack 11*1713Smckusick * 12*1713Smckusick * semantics: for j := u to v do 13*1713Smckusick * a[j-u+i] := z[j] 14*1713Smckusick */ 15*1713Smckusick 16*1713Smckusick UNPACK(i, a, z, size_a, lb_a, ub_a, size_z) 17*1713Smckusick 18*1713Smckusick int i; /* subscript into a to begin packing */ 19*1713Smckusick char *a; /* pointer to structure a */ 20*1713Smckusick char *z; /* pointer to structure z */ 21*1713Smckusick int size_a; /* sizeof(a_type) */ 22*1713Smckusick int lb_a; /* lower bound of structure a */ 23*1713Smckusick int ub_a; /* (upper bound of a) - (lb_a + sizeof(z_type)) */ 24*1713Smckusick int size_z; /* sizeof(z_type) */ 25*1713Smckusick { 26*1713Smckusick int subscr; 27*1713Smckusick register char *cp; 28*1713Smckusick register char *zp = z; 29*1713Smckusick register char *limit; 30*1713Smckusick 31*1713Smckusick subscr = i - lb_a; 32*1713Smckusick if (subscr < 0 || subscr > ub_a) { 33*1713Smckusick ERROR(EPACK, i); 34*1713Smckusick return; 35*1713Smckusick } 36*1713Smckusick cp = &a[subscr * size_a]; 37*1713Smckusick limit = cp + size_z; 38*1713Smckusick do { 39*1713Smckusick *cp++ = *zp++; 40*1713Smckusick } while (cp < limit); 41*1713Smckusick } 42