You can store all used bplanes one after another, as raw. You might want to crunch it a bit, probably.
Size is bmap\_ebwidth*\_height*\_depth. Addresses of planes are in bmap\data[0....7]
I am not sure about any size limit in shapes. I'll try. '\bltsize' is word; a full screen lowres 8bits is about 80kB which exceeds word boundary. But this could be blitter releated; maybe bltsize is per plane.
Code:
NEWTYPE.shape
_pixwidth.w ;00: NULL if no shape present,
; else pixel width of shape
_pixheight.w ;02: pixel height of shape
_depth.w ;04: depth, in bitplanes, of shape
_ebwidth.w ;06: even byte width of shape
_bltsize.w ;08: BLTSIZE of shape
_xhandle.w ; 10: horizontal handle of shape
_yhandle.w ; 72: vertical handle of shape
_data.l ; 14: pointer to graphic data - Plane 1, Plane2...
_cookie.l ; 75: pointer to one bitplane cookiecut
_onebpmem.w ;22: memory taken by one bitplane of shape
_onebpmemx.w ;24: memory taken by one bitplane of shape,
; plus an extra word per bitplane per vertical pixel
_allbpmem.w ;26: memory taken by entire shape.
_allbpmemx.w ;28: memory taken by entire shape, plus an
; extra word per bitplane per vertical
; pixel
_pad.b(2) ;30:
;32: sizeof
End NEWTYPE
Code:
NEWTYPE.bitmap
_ebwidth.w ;00: even byte width of bitmap
_height.w ;02: pixel height of bitmap
_depth. w ; 04: depth, in bitplanes, of bitmap
_pad.b(2) ;06:
_data .l (8) ;08: Max of 8 pointers to bitplanes
_pad2.b(22) ;40:
isreal.w ;62: =0 : no bitmap present
;<0 : bitmap present
;>0 : bitmap present, but not ours
;64: sizeof
End NEWTYPE