IFND UTILITY_PACK_I UTILITY_PACK_I EQU 1 ** ** $VER: pack.i 39.3 (04.09.92) ** Includes Release 39.108 ** ** Control attributes for Pack/UnpackStructureTags() ** ** (C) Copyright 1992 Commodore-Amiga Inc. ** All Rights Reserved ** ******************************************************************************* * * PackStructureTags() and UnpackStructureTags(), two very important routines * for 3.0... * ******************************************************************************* * include "exec/types.i" include "exec/macros.i" include "utility/tagitem.i" * ******************************************************************************* * * PackTable definition: * * The PackTable is a simple array of LONGWORDS that are then evaluated * by PackStructureTags and UnpackStructureTags. * * The table contains compressed information such as the tag offset from * the base tag. The tag offset has a limited range so the base tag is * defined in the first longword. * * After the first longword, the fields look as follows: * * +--------- 1 = signed, 0 = unsigned (for bits, 1=inverted boolean) * | * | +------ 00 = Pack/Unpack, 10 = Pack, 01 = Unpack, 11 = special * | / \ * | | | +-- 00 = Byte, 01 = Word, 10 = Long, 11 = Bit * | | | / \ * | | | | | /----- For bit operations: 1 = TAG_EXISTS is TRUE * | | | | | | * | | | | | | /-------------------- Tag offset from base tag value * | | | | | | | \ * m n n o o p q q q q q q q q q q r r r s s s s s s s s s s s s s * \ | | | * Bit offset (for bit operations) ----/ | | * \ | * Offset into data structure -----------------------------------/ * * A -1 longword signifies that the next longword will be a new base tag * * A 0 longword signifies that it is the end of the pack table. * * What this implies is that there are only 13-bits of address offset * and 10 bits for tag offsets from the base tag. For most uses this * should be enough, but when this is not, either multiple pack tables * or a pack table with extra base tags would be able to do the trick. * The goal here was to make the tables small and yet flexible enough to * handle most cases. * BITDEF PST,SIGNED,31 BITDEF PST,UNPACK,30 ; Note that these are active low... BITDEF PST,PACK,29 ; Note that these are active low... BITDEF PST,EXISTS,26 ; Tag exists bit true flag hack... * ******************************************************************************* * ; Macros will go here... * ******************************************************************************* * ENDC