11713Smckusick /* Copyright (c) 1979 Regents of the University of California */ 21713Smckusick 3*3038Smckusic static char sccsid[] = "@(#)UNPACK.c 1.2 03/07/81"; 41713Smckusick 51713Smckusick #include "h01errs.h" 61713Smckusick 71713Smckusick /* 81713Smckusick * unpack(z,a,i) 91713Smckusick * 101713Smckusick * with: z and a as in pack 111713Smckusick * 121713Smckusick * semantics: for j := u to v do 131713Smckusick * a[j-u+i] := z[j] 141713Smckusick */ 151713Smckusick 161713Smckusick UNPACK(i, a, z, size_a, lb_a, ub_a, size_z) 171713Smckusick 18*3038Smckusic long i; /* subscript into a to begin packing */ 191713Smckusick char *a; /* pointer to structure a */ 201713Smckusick char *z; /* pointer to structure z */ 21*3038Smckusic long size_a; /* sizeof(a_type) */ 22*3038Smckusic long lb_a; /* lower bound of structure a */ 23*3038Smckusic long ub_a; /* (upper bound of a) - (lb_a + sizeof(z_type)) */ 24*3038Smckusic long size_z; /* sizeof(z_type) */ 251713Smckusick { 261713Smckusick int subscr; 271713Smckusick register char *cp; 281713Smckusick register char *zp = z; 291713Smckusick register char *limit; 301713Smckusick 311713Smckusick subscr = i - lb_a; 321713Smckusick if (subscr < 0 || subscr > ub_a) { 331713Smckusick ERROR(EPACK, i); 341713Smckusick return; 351713Smckusick } 361713Smckusick cp = &a[subscr * size_a]; 371713Smckusick limit = cp + size_z; 381713Smckusick do { 391713Smckusick *cp++ = *zp++; 401713Smckusick } while (cp < limit); 411713Smckusick } 42