| /*************************************************************************/ |
| /* */ |
| /* Copyright (c) 1994 Stanford University */ |
| /* */ |
| /* All rights reserved. */ |
| /* */ |
| /* Permission is given to use, copy, and modify this software for any */ |
| /* non-commercial purpose as long as this copyright notice is not */ |
| /* removed. All other uses, including redistribution in whole or in */ |
| /* part, are forbidden without prior written permission. */ |
| /* */ |
| /* This software is provided with absolutely no warranty and no */ |
| /* support. */ |
| /* */ |
| /*************************************************************************/ |
| |
| /************************************************************************* |
| * * |
| * address.h: Definitions used for addressing maps. * |
| * * |
| *************************************************************************/ |
| |
| |
| /* Fast subscripted access to map */ |
| /* (assumes mins = 0 and chars) */ |
| #define MAP_ADDRESS(IZ,IY,IX) (map_address+\ |
| ((IZ)*map_len[Y]+(IY))*map_len[X]+(IX)) |
| #define MAP(IZ,IY,IX) (*MAP_ADDRESS(IZ,IY,IX)) |
| |
| |
| /* Fast subscripted access to map */ |
| /* (assumes mins = 0 and chars) */ |
| #define GMAG_ADDRESS(IZ,IY,IX) (gmag_address+\ |
| ((IZ)*gmag_len[Y]+(IY))*gmag_len[X]+(IX)) |
| #define GMAG(IZ,IY,IX) (*GMAG_ADDRESS(IZ,IY,IX)) |
| |
| |
| /* Subscripted access to normal map */ |
| /* (NM GRADIENTs at each IX,IY,IZ) */ |
| |
| #define TADDR(IZ,IY,IX) (LOOKUP_HSIZE+((IZ)*LOOKUP_PREC+(IY))*2+(IX)) |
| |
| #define NORM_ADDRESS(IZ,IY,IX,D) (norm_address+\ |
| ((IZ)*norm_len[Y]+(IY))*norm_len[X]+(IX)) |
| |
| #define NORM(IZ,IY,IX,D) (*NORM_ADDRESS(IZ,IY,IX,D)) |
| |
| |
| /* Subscripted access to opacity map */ |
| /* (1 char at each IX,IY,IZ) */ |
| #define OPC_ADDRESS(IZ,IY,IX) (opc_address+\ |
| ((IZ)*opc_len[Y]+(IY))*opc_len[X]+(IX)) |
| #define OPC(IZ,IY,IX) (*OPC_ADDRESS(IZ,IY,IX)) |
| |
| |
| /* Subscripted access to normal map */ |
| /* (NM GRADIENTs at each IX,IY,IZ) */ |
| #define VOX_ADDRESS(IZ,IY,IX,D) (vox_address+\ |
| (((IZ)*vox_len[Y]+(IY))*vox_len[X]+(IX))*\ |
| 2+(D)) |
| #define VOX(IZ,IY,IX,D) (*VOX_ADDRESS(IZ,IY,IX,D)) |
| |
| |
| #define PYR_ADDRESS(ILEVEL,IZ,IY,IX)\ |
| (pyr_offset1=\ |
| ((IZ)*pyr_len[ILEVEL][Y]+(IY))*\ |
| pyr_len[ILEVEL][X]+(IX),\ |
| pyr_offset2=pyr_offset1&7,\ |
| pyr_address2=pyr_address[ILEVEL]+\ |
| (pyr_offset1>>3)) |
| #define PYR(ILEVEL,IZ,IY,IX)\ |
| (PYR_ADDRESS(ILEVEL,IZ,IY,IX),\ |
| (*pyr_address2>>pyr_offset2)&1) |
| |
| |
| #define IMAGE_ADDRESS(IY,IX) (image_address+(IY)*image_len[X]+(IX)) |
| #define IMAGE(IY,IX) (*IMAGE_ADDRESS(IY,IX)) |
| |
| /* Access to mask image */ |
| #define MASK_IMAGE_ADDRESS(IY,IX) \ |
| (mask_image_address+\ |
| (IY)*mask_image_len[X]+(IX)) |
| #define MASK_IMAGE(IY,IX) (*MASK_IMAGE_ADDRESS(IY,IX)) |