1*40865Sbostic /*- 2*40865Sbostic * Copyright (c) 1979 The Regents of the University of California. 3*40865Sbostic * All rights reserved. 4*40865Sbostic * 5*40865Sbostic * %sccs.include.redist.c% 6*40865Sbostic */ 71713Smckusick 8*40865Sbostic #ifndef lint 9*40865Sbostic static char sccsid[] = "@(#)UNPACK.c 1.4 (Berkeley) 04/09/90"; 10*40865Sbostic #endif /* not lint */ 111713Smckusick 121713Smckusick /* 131713Smckusick * unpack(z,a,i) 141713Smckusick * 151713Smckusick * with: z and a as in pack 161713Smckusick * 171713Smckusick * semantics: for j := u to v do 181713Smckusick * a[j-u+i] := z[j] 191713Smckusick */ 201713Smckusick 211713Smckusick UNPACK(i, a, z, size_a, lb_a, ub_a, size_z) 221713Smckusick 233038Smckusic long i; /* subscript into a to begin packing */ 241713Smckusick char *a; /* pointer to structure a */ 251713Smckusick char *z; /* pointer to structure z */ 263038Smckusic long size_a; /* sizeof(a_type) */ 273038Smckusic long lb_a; /* lower bound of structure a */ 283038Smckusic long ub_a; /* (upper bound of a) - (lb_a + sizeof(z_type)) */ 293038Smckusic long size_z; /* sizeof(z_type) */ 301713Smckusick { 311713Smckusick int subscr; 321713Smckusick register char *cp; 331713Smckusick register char *zp = z; 341713Smckusick register char *limit; 351713Smckusick 361713Smckusick subscr = i - lb_a; 371713Smckusick if (subscr < 0 || subscr > ub_a) { 383869Smckusic ERROR("i = %D: Bad i to unpack(z,a,i)\n", i); 391713Smckusick return; 401713Smckusick } 411713Smckusick cp = &a[subscr * size_a]; 421713Smckusick limit = cp + size_z; 431713Smckusick do { 441713Smckusick *cp++ = *zp++; 451713Smckusick } while (cp < limit); 461713Smckusick } 47