; 1). Set your editor's TAB width to 3.
; 2). Delete the following 2 directives if not using MANX. If using LATTICE,
;		make sure that you assemble this module with large CODE and DATA
;     model.

  far code  ;for Manx only, it means large code, large data (int = 32 bits)
  far data  ;this module must be assembled expecting passed ints as 32 bits

; 3). Alter the following equates to only include the ilbm lib routines that
;		you expect to call. This will make your application smaller.

 ;change the following equates to a 0 if you don't need that lib routine
DecompBODY		equ 1
SetupBitmap		equ 1
ScaleImage		equ 1
SearchPROP		equ 1
GetPROPStruct	equ 1
FreePROPStruct	equ 1
CopyILBMProp	equ 1
DecodeVKPlane	equ 1
DecompDLTA		equ 1
MakeYTable		equ 1
SaveANIM			equ 1
OpenRIFF			equ 1
FileLength		equ 1
OpenRGroup		equ 1
CloseRGroup		equ 1
IFFReadBytes	equ 1
GetChunkHdr		equ 1
GetFChunkHdr	equ 1
GetF1ChunkHdr	equ 1
GetPChunkHdr	equ 1
GetCMAP			equ 1
GetBODY			equ 1
UnPackRow		equ 1
HandleCCRT		equ 1
HandleCRNG		equ 1
HandleCAMG		equ 1
LoadIFF			equ 1
LoadILBM			equ 1
LoadIFFToWindow	equ 1

SaveWindowToIFF	equ 1
SaveILBM			equ 1
IFFWriteBytes	equ 1
PackRow			equ 1
PutBODY			equ 1
PutCMAP			equ 1
OpenWIFF			equ 1
OpenWGroup		equ 1
StartWGroup		equ 1
PutCkHdr			equ 1
PutCk				equ 1
PutCkEnd			equ 1
EndWGroup		equ 1
CloseWGroup		equ 1
InitBMHdr		equ 1

GetIFFPMsg		equ 1
BlankPointer	equ 1

; 4). Assemble this module and link it with your C application modules.

	INCLUDE	"IFF.i"	;supplies the LVO offsets

	XDEF	_ILBMBase	;ilbm.library opened from C code, and base stored there

	SECTION	ilbmcode,CODE
	
	IF	GetIFFPMsg=1

	XDEF	_GetIFFPMsg,__GetIFFPMsg
_GetIFFPMsg:
	movea.l	_ILBMBase,a6
__GetIFFPMsg:
	move.l	4(sp),d0
	jmp		_LVOGetIFFPMsg(a6)

	ENDC

	IF BlankPointer=1

	XDEF	_BlankPointer,__BlankPointer
_BlankPointer:
	movea.l	_ILBMBase,a6
__BlankPointer:
	movea.l	4(sp),a0
	jmp		_LVOBlankPointer(a6)

	ENDC

;######################## IFF READER ROUTINES ##########################

;***********************************************************************
;BOOL = LoadIFFToWindow(fileName, ILBMFrame)
; d0								d1				a1

	IF LoadIFFToWindow=1

	XDEF	_LoadIFFToWindow,__LoadIFFToWindow
_LoadIFFToWindow:
	movea.l	_ILBMBase,a6
__LoadIFFToWindow:
	move.l	4(sp),d1
	movea.l	8(sp),a1
	jmp		_LVOLoadIFFToWindow(a6)

	ENDC

;**************************** LoadIFF() *********************************
; IFFP = LoadIFF(fileHandle, Vectors, masterFrame)
;  d0						d1			a0				a1

  IF LoadIFF=1

	XDEF	_LoadIFF,__LoadIFF
_LoadIFF:
	movea.l	_ILBMBase,a6
__LoadIFF:
	movem.l	4(sp),d1/a0/a1
	bsr.s		SetVectors
	jmp		_LVOLoadIFF(a6)

	ENDC

;**************************** ScaleImage() *********************************
;BOOL ScaleImage(dest_rectangle,source_rectangle,dest_rport,source_bitmap)
;							a0					a1						a2				a4

  IF ScaleImage=1

	XDEF	_ScaleImage,__ScaleImage
_ScaleImage:
	movea.l	_ILBMBase,a6
__ScaleImage:
	movem.l	a2/a4,-(sp)
	movem.l	12(sp),a0/a1/a2/a4
	jsr		_LVOScaleImage(a6)
	movem.l	(sp)+,a2/a4
	rts

	ENDC

;**************************** SetupBitmap() *********************************
; SetupBitmap(raster, Bitmap, BMHD)
;					d0			a0		a1

  IF SetupBitmap=1

	XDEF	_SetupBitmap,__SetupBitmap
_SetupBitmap:
	movea.l	_ILBMBase,a6
__SetupBitmap:
	movem.l	4(sp),d0/a0/a1
	jmp		_LVOSetupBitmap(a6)

	ENDC

;**************************** DecompBODY() *********************************
; DecompBODY(BODY, BMHD, Bitmap)
;					a0		a1		a2
; Decompresses the BODY chunk into the passed BitMap's planes based on the
; passed BMHD's w, h, numPlanes, and pageWidth. This is used for the first
; frame of the ANIM (ANHD's opmode = 0). BODY is the address of the loaded
; BODY chunk of the first frame of the ANIM file (minus the 8 byte header).

  IF DecompBODY=1

	XDEF	_DecompBODY,__DecompBODY
_DecompBODY:
	movea.l	_ILBMBase,a6
__DecompBODY:
	move.l	a2,-(sp)
	movem.l	8(sp),a0/a1/a2
	jsr		_LVODecompBODY(a6)
	movea.l	(sp)+,a2
	rts

	ENDC

;**************************** LoadILBM() *********************************
; IFFP = LoadILBM(fileHandle, Vectors, ILBMFrame)
;  d0						d1			a0				a1

  IF LoadILBM=1

	XDEF	_LoadILBM,__LoadILBM
_LoadILBM:
	movea.l	_ILBMBase,a6
__LoadILBM:
	movem.l	4(sp),d1/a0/a1
	bsr.s		SetVectors
	jmp		_LVOLoadILBM(a6)

	ENDC

SetVectors:
	movem.l	a0/a2/a3,-(sp)
	;---Setup CInterface to PROP handler
	lea		PROPVector,a3
	move.l	(a0)+,(a3)+
	beq.s		noPROP
	lea		PropHandler,a2
	move.l	a2,-4(a0)
noPROP:
	;---Setup CInterface to FORM handler
	move.l	(a0)+,(a3)+
	beq.s		noFORM
	lea		FormHandler,a2
	move.l	a2,-4(a0)
noFORM:
	;---Setup CInterface to Chunk handler
	move.l	(a0)+,(a3)+
	beq.s		noChunk
	lea		ChunkHandler,a2
	move.l	a2,-4(a0)
noChunk:
	;---Setup CInterface to Non-ILBM FORM handler
	move.l	(a0),(a3)
	beq.s		noNon
	lea		NONILBM,a2
	move.l	a2,(a0)
noNon:
	movem.l	(sp)+,a0/a2/a3
	rts

; Calls C PROP routine as follows:
; IFFP = PropRoutine(chunkID,PropID,Context,Vectors,Frame,PROPList)
PropHandler:
	movem.l	d0/d2/a0/a2/a3/a4,-(sp)
	movea.l	PROPVector,a1
	jsr		(a1)
	movem.l	(sp)+,d1/d2/a0/a2/a3/a4
	rts

; Calls C FORM routine as follows:
; IFFP = FormRoutine(chunkID,Context,Vectors,Frame,PROPList)
FormHandler:
	movea.l	FORMVector,a1
do_hand:
	movem.l	d0/a0/a2/a3/a4,-(sp)
	jsr		(a1)
	movem.l	(sp)+,d1/a0/a2/a3/a4
	rts

 ; An Unknown chunk in an ILBM (i.e. DLTA, ANHD, DEST, GRAB...)
ChunkHandler:
	movea.l	ChunkVector,a1
	bra.s		do_hand

 ; A Non-ILBM FORM
NONILBM:
	movea.l	NonILBMVector,a1
	bra.s		do_hand

;*************************** GetPROPStruct() *****************************
; PropStruct = GetPROPStruct(size, PropID, PROPList)
;		d0								d0		d1			a1

	IF GetPROPStruct=1

	XDEF _GetPROPStruct,__GetPROPStruct
_GetPROPStruct:
	movea.l	_ILBMBase,a6
__GetPROPStruct:
	movem.l	4(sp),d0/d1/a1
	jmp		_LVOGetPROPStruct(a6)

	ENDC

;*************************** SearchPROP() *****************************
; PropStruct = SearchPROP(PropID, PROPList)
;		d0							d0			a1

	IF SearchPROP=1

	XDEF _SearchPROP,__SearchPROP
_SearchPROP:
	movea.l	_ILBMBase,a6
__SearchPROP:
	movem.l	4(sp),d0/a1
	jmp		_LVOSearchPROP(a6)

	ENDC

;*************************** CopyILBMProp() *****************************
; CopyILBMProp(FromFrame, ToFrame)
;						d0			a1

	IF CopyILBMProp=1

	XDEF _CopyILBMProp,__CopyILBMProp
_CopyILBMProp:
	movea.l	_ILBMBase,a6
__CopyILBMProp:
	movem.l	4(sp),d0/a1
	jmp		_LVOCopyILBMProp(a6)

	ENDC

;*************************** FreePROPStruct() *****************************
; FreePROPStruct(PROPList)
;						a1

	IF FreePROPStruct=1

	XDEF _FreePROPStruct,__FreePROPStruct
_FreePROPStruct:
	movea.l	_ILBMBase,a6
__FreePROPStruct:
	movea.l	4(sp),a1
	jmp		_LVOFreePROPStruct(a6)

	ENDC

;*************************** HandleCAMG() *******************************
; HandleCAMG(Context,ILBMFrame)
;					a0			a1

	IF	HandleCAMG=1

	XDEF _HandleCAMG,__HandleCAMG
_HandleCAMG:
		movea.l	_ILBMBase,a6
__HandleCAMG:
		movem.l	4(sp),a0/a1
		jmp		_LVOHandleCAMG(a6)

	ENDC

;*************************** HandleCRNG() *******************************
; HandleCRNG(Context,ILBMFrame)
;					a0			a1

	IF	HandleCRNG=1

	XDEF _HandleCRNG,__HandleCRNG
_HandleCRNG:
		movea.l	_ILBMBase,a6
__HandleCRNG:
		movem.l	4(sp),a0/a1
		jmp		_LVOHandleCRNG(a6)

	ENDC

;*************************** HandleCCRT() *******************************
; HandleCCRT(Context,ILBMFrame)
;					a0			a1

	IF	HandleCCRT=1

	XDEF _HandleCCRT,__HandleCCRT
_HandleCCRT:
		movea.l	_ILBMBase,a6
__HandleCCRT:
		movem.l	4(sp),a0/a1
		jmp		_LVOHandleCCRT(a6)

	ENDC

;**************************** OpenRIFF() *******************************
; IFFP = OpenRIFF(fileHandle, newContext, Frame)
;  d0						d1				a0			a1

	IF	OpenRIFF=1

	XDEF	_OpenRIFF,__OpenRIFF
_OpenRIFF:
	movea.l	_ILBMBase,a6
__OpenRIFF:
	movem.l	4(sp),d1/a0/a1
	jmp		_LVOOpenRIFF(a6)

	ENDC

;**************************** FileLength() *****************************
;FileSize = FileLength(fileHandle)
;	d0								d1

   IF FileLength=1

	XDEF	_FileLength,__FileLength
_FileLength:
	movea.l	_ILBMBase,a6
__FileLength:
	move.l	4(sp),d1
	move.l	a6,-(sp)
	jsr		_LVOFileLength(a6)
	movea.l	(sp)+,a6
	rts

	ENDC

;********************** OpenRGroup() *****************************
; IFFP = OpenRGroup(parent, new)   passed 2 Context structures
;  d0						a0		 a1

	IF	OpenRGroup=1

	XDEF	_OpenRGroup,__OpenRGroup
_OpenRGroup:
	movea.l	_ILBMBase,a6
__OpenRGroup:
	movea.l	4(sp),a0
	movea.l	8(sp),a1
	jmp		_LVOOpenRGroup(a6)

	ENDC

;***************************** CloseRGroup ******************************
; IFFP = CloseRGroup(context)
;  d0							a0

   IF CloseRGroup=1

	XDEF	_CloseRGroup,__CloseRGroup
_CloseRGroup:
	movea.l	_ILBMBase,a6
__CloseRGroup:
	movea.l	4(sp),a0
	jmp		_LVOCloseRGroup(a6)

	ENDC

;*************************** SkipFwd() **********************************
; IFFP = SkipFwd(context, bytes)
;  d0              a0       d1

	IF	SkipFwd=1

	XDEF	_SkipFwd,__SkipFwd
_SkipFwd:
	movea.l	_ILBMBase,a6
_SkipFwd:
	movea.l	4(sp),a0
	move.l	8(sp),d1
	jmp		_LVOSkipFwd(a6)

	ENDC

;*************************** GetChunkHdr *******************************
; ID = GetChunkHdr(context)
; d0						a0

	IF	GetChunkHdr=1

	XDEF	_GetChunkHdr,__GetChunkHdr
_GetChunkHdr:
	movea.l	_ILBMBase,a6
__GetChunkHdr:
	movea.l	4(sp),a0
	jmp		_LVOGetChunkHdr(a6)

	ENDC

;************************** IFFReadBytes ********************************
; IFFP = IFFReadBytes(nBytes, context, buffer)
;  d0							d0			a0			a1

	IF	IFFReadBytes=1

	XDEF	_IFFReadBytes,__IFFReadBytes
_IFFReadBytes:
	movea.l	_ILBMBase,a6
__IFFReadBytes:
	movem.l	4(sp),d0/a0/a1
	jmp		_LVOIFFReadBytes(a6)

	ENDC

;************************* GetFChunkHdr() ******************************
; ID = GetFChunkHdr(context)
; d0						a0

	IF	GetFChunkHdr=1

	XDEF	_GetFChunkHdr,__GetFChunkHdr
_GetFChunkHdr:
	movea.l _ILBMBase,a6
__GetFChunkHdr:
	movea.l	4(sp),a0
	jmp		_LVOGetFChunkHdr(a6)

	ENDC

;************************* GetF1ChunkHdr() ******************************
; ID = GetF1ChunkHdr(context)
; d0							a0

	IF GetF1ChunkHdr=1

	XDEF	_GetF1ChunkHdr,__GetF1ChunkHdr
_GetF1ChunkHdr:
	movea.l	_ILBMBase,a6
__GetF1ChunkHdr:
	movea.l	4(sp),a0
	jmp		_LVOGetF1ChunkHdr(a6)

	ENDC

;**************************** GetPChunkHdr ****************************
; ID = GetPChunkHdr(context)
; d0                  a0

	IF	GetPChunkHdr=1

	XDEF	_GetPChunkHdr,__GetPChunkHdr
_GetPChunkHdr:
	movea.l	_ILBMBase,a6
__GetPChunkHdr:
	movea.l	4(sp),a0
	jmp		_LVOGetPChunkHdr(a6)

	ENDC

;**************************** GetCMAP() *******************************
; IFFP = GetCMAP(Context, colorMap, pNColorRegs)
;  d0						d0			a0			a1

	IF	GetCMAP=1

	XDEF	_GetCMAP,__GetCMAP
_GetCMAP:
	movea.l	_ILBMBase,a6
__GetCMAP:
	movem.l	4(sp),d0/a0/a1
	jmp		_LVOGetCMAP(a6)

	ENDC

;****************************** GetBODY() *******************************
; IFFP = GetBODY(bitmap, mask, context, BMHD)
;  d0					d0			d1		a0			a1

	IF GetBODY=1

	XDEF	_GetBODY,__GetBODY
_GetBODY:
	movea.l	_ILBMBase,a6
__GetBODY:
	movem.l	4(sp),d0/d1/a0/a1
	jmp		_LVOGetBODY(a6)

	ENDC

;*********************************************************************
;BOOL = UnPackRow(dstBytes0, srcBytes0, Source, Dest)
; d0						d1				d3			a2		a3

	IF UnPackRow=1

	XREF	_UnPackRow,__UnPackRow
_UnPackRow:
	movea.l	_ILBMBase,a6
__UnPackRow:
	movem.l	d3/a2/a3,-(sp)
	movem.l	16(sp),d1/d3/a2/a3
	jsr		_LVOUnPackRow(a6)
	movem.l	(sp)+,d3/a2/a3
	rts

	ENDC

;****************************** DecompDLTA() *******************************
; DecompDLTA(DLTA,bitmap)
;				  a0		a2

	IF DecompDLTA=1

	XDEF	_DecompDLTA,__DecompDLTA
_DecompDLTA:
	movea.l	_ILBMBase,a6
__DecompDLTA:
	move.l	a2,-(sp)
	movem.l	8(sp),a0/a2
	jsr		_LVODecompDLTA(a6)
	movea.l	(sp)+,a2
	rts

	ENDC

;****************************** DecodeVKPlane() *******************************
; DecodeVKPlane(linebytes, ytable, in, out)
; 						d0				d1		a0	 a1

	IF DecodeVKPlane=1

	XDEF	_DecodeVKPlane,__DecodeVKPlane
_DecodeVKPlane:
	movea.l	_ILBMBase,a6
__DecodeVKPlane:
	movem.l	4(sp),d0/d1/a0/a1
	jmp		_LVODecodeVKPlane(a6)

	ENDC

;****************************** MakeYTable() *******************************
; MakeYTable(width, height, table)
;  				d0		d1			a0

	IF MakeYTable=1

	XDEF	_MakeYTable,__MakeYTable
_MakeYTable:
	movea.l	_ILBMBase,a6
__MakeYTable:
	movem.l	4(sp),d0/d1/a0
	jmp		_LVOMakeYTable(a6)

	ENDC

;######################## IFF WRITER ROUTINES #########################

;*************************************************************************
; IFFP = SaveWindowToIFF(fileName, window)
;  d0                       d1       a0

   IF SaveWindowToIFF=1

   XDEF   _SaveWindowToIFF,__SaveWindowToIFF
_SaveWindowToIFF:
    movea.l _ILBMBase,a6
__SaveWindowToIFF:
    movem.l 4(sp),d1/a0
    jmp     _LVOSaveWindowToIFF(a6)

   ENDC

;******************************* SaveILBM() ******************************
;IFFP = SaveILBM(ViewModes,Compress,fhandle,Mask,CTable,BitMap,xyPnt,Handler)
; d0                 d0       d1       d2    d3    a0      a1    a2     a3

   IF SaveILBM=1

   XREF _SaveILBM,__SaveILBM
_SaveILBM:
    movea.l _ILBMBase,a6
__SaveILBM:
    movem.l d2/d3/a2/a3,-(sp)
    movem.l 20(sp),d0/d1/d2/d3/a2/a3
    move.l  a3,C_Vector1
    beq.s   noCHand
    lea     C_Handler1,a3
noCHand:
    jsr     _LVOSaveILBM(a6)
    movem.l (sp)+,d2/d3/a2/a3
    rts

C_Handler1:
	move.l	a0,-(sp)		;pass Context to C routine
	movea.l	C_Vector1,a1
	jsr		(a1)
	movea.l	(sp)+,a0
	rts

  ENDC

;******************************* SaveANIM() ******************************
;IFFP = SaveANIM(Modes,Compress,fhandle,Mask,CTable,BitMap,xyPnt,Handler,ANHD)
; d0              d0      d1       d2    d3    a0      a1    a2     a3    a4

   IF SaveANIM=1

   XREF _SaveANIM,__SaveANIM
_SaveANIM:
    movea.l _ILBMBase,a6
__SaveANIM:
    movem.l d2/d3/a2/a3/a4,-(sp)
    movem.l 24(sp),d0/d1/d2/d3/a2/a3/a4
    move.l  a3,C_Vector2
    beq.s   noCHand2
    lea     C_Handler2,a3
noCHand2:
    jsr     _LVOSaveANIM(a6)
    movem.l (sp)+,d2/d3/a2/a3/a4
    rts

C_Handler2:
	movem.l	a0/a1,-(sp)		;pass Context and Parent to C routine
	movea.l	C_Vector2,a1
	jsr		(a1)
	movem.l	(sp)+,a0/a1
	rts

	ENDC

;**************************** OpenWIFF() *****************************
;IFFP = OpenWIFF(limit, fileHandle, newContext)
; d0					d0			d1				a0

	IF	OpenWIFF=1

	XDEF	_OpenWIFF,__OpenWIFF
_OpenWIFF:
	movea.l	_ILBMBase,a6
__OpenWIFF:
	movem.l	4(sp),d0/d1/a0
	jmp		_LVOOpenWIFF(a6)

	ENDC

;*************************** StartWGroup() ********************************
;IFFP = StartWGroup(groupType, groupSize, subtype, parent, new)
; d0							d0				d1			d2			a0		a1

	IF	StartWGroup=1

	XDEF	_StartWGroup,__StartWGroup
_StartWGroup:
	movea.l _ILBMBase,a6
__StartWGroup:
	move.l   d2,-(sp)
	movem.l  8(sp),d0/d1/d2/a0/a1
	jsr     _LVOStartWGroup(a6)
	move.l  (sp)+,d2
	rts

	ENDC

;*************************** OpenWGroup() *******************************
;IFFP = OpenWGroup(parent, new)
; d0                 a0    a1

  IF OpenWGroup=1

   XDEF _OpenWGroup,__OpenWGroup
_OpenWGroup:
    movea.l _ILBMBase,a6
__OpenWGroup:
    movea.l 4(sp),a0
    movea.l 8(sp),a1
    jmp     _LVOOpenWGroup(a6)

  ENDC

;***************************** EndWGroup() ********************************
;IFFP = EndWGroup(old)
; d0               a0

   IF EndWGroup=1

   XDEF _EndWGroup,__EndWGroup
_EndWGroup:
    movea.l _ILBMBase,a6
__EndWGroup:
    movea.l 4(sp),a0
    jmp     _LVOEndWGroup(a6)

  ENDC

;************************ CloseWGroup *********************************
;IFFP = CloseWGroup(old)
; d0                a0

   IF CloseWGroup=1
  
   XDEF _CloseWGroup,__CloseWGroup
_CloseWGroup:
    movea.l _ILBMBase,a6
__CloseWGroup:
    movea.l 4(sp),a0
    jmp     _LVOCloseWGroup(a6)

  ENDC

;******************************* PutCk **********************************
;IFFP = PutCk(ckID, ckSize, context, data)
; d0           d0     d1      a0      a1

   IF PutCk=1

   XDEF   _PutCk,__PutCk
_PutCk:
    movea.l _ILBMBase,a6
__PutCk:
    movem.l  4(sp),d0/d1/a0/a1
    jmp     _LVOPutCk(a6)

   ENDC

;******************************* PutCkHdr() ****************************
;IFFPreturn = PutCkHdr(chunkID, chunkSize, context)
;                        d0        d1        a0

   IF PutCkHdr=1

   XDEF   _PutCkHdr,__PutCkHdr
_PutCkHdr:
    movea.l _ILBMBase,a6
__PutCkHdr:
    movem.l  4(sp),d0/d1/a0
    jmp     _LVOPutCkHdr(a6)

  ENDC

;*************************** IFFWriteBytes() ***************************
;IFFP IFFWriteBytes(nBytes, context, data)
;                     d0       a0     a1

   IF IFFWriteBytes=1

   XDEF   _IFFWriteBytes,__IFFWriteBytes
_IFFWriteBytes:
    movea.l _ILBMBase,a6
__IFFWriteBytes:
    movem.l  4(sp),d0/a0/a1
    jmp     _LVOIFFWriteBytes(a6)

  ENDC

;****************************** PutCkEnd() ******************************
;IFFP = PutCkEnd(context)
; d0               a0

  IF PutCkEnd=1

   XDEF   _PutCkEnd,__PutCkEnd
_PutCkEnd:
    movea.l _ILBMBase,a6
__PutCkEnd:
    move.l  4(sp),a0
    jmp     _LVOPutCkEnd(a6)

  ENDC

;*************************** InitBMHdr() ********************************
;IFFP InitBMHdr(masking, compression, transparentColor,
;                 d0          d1              d2
;               pageWidth, pageHeight, BMHD, bitmap)
;                   d3         d4       a0     a1

   IF InitBMHdr=1

   XDEF   _InitBMHdr,__InitBMHdr
_InitBMHdr:
    movea.l _ILBMBase,a6
__InitBMHdr:
    movem.l  d2/d3/d4,-(sp)
    movem.l  16(sp),d0/d1/d2/d3/d4/a0/a1
    jsr      _LVOInitBMHdr(a6)
    movem.l  (sp)+,d2/d3/d4
    rts

  ENDC

;**************************** PutCMAP() *********************************
;IFFP PutCMAP(depth, context, colorTable)
;               d0     a0        a1

   IF PutCMAP=1

   XDEF _PutCMAP,__PutCMAP
_PutCMAP:
    movea.l _ILBMBase,a6
__PutCMAP:
    movem.l  4(sp),d0/a0/a1
    jmp     _LVOPutCMAP(a6)

  ENDC

;******************************** PutBODY() ******************************
;IFFP = PutBODY(mask, context, bmHdr, bitmap)
; d0             d0     d1       a0     a1

   IF PutBODY=1

   XDEF _PutBODY,__PutBODY
_PutBODY:
    movea.l _ILBMBase,a6
__PutBODY:
    movem.l  4(sp),d0/d1/a0/a1
    jmp     _LVOPutBODY(a6)

  ENDC

;============================ PackRow ===========================
;bytes = PackRow(rowSize, pSource, pDest)
; d0               d0       a0      a1

   IF PackRow=1

   XDEF _PackRow,__PackRow
_PackRow:
    movea.l _ILBMBase,a6
__PackRow:
    movem.l  4(sp),d0/a0/a1
    jsr     _LVOPackRow(a6)
    move.l  a6,d1
    lea     _sourceptr,a6
    move.l  a0,(a6)+
    move.l  a1,(a6)
    movea.l d1,a6
    rts

  ENDC

  SECTION  ilbmdata,DATA

  IF  SaveANIM=1
C_Vector2	dc.l 0
  ENDC

  IF  SaveILBM=1
C_Vector1	dc.l 0
  ENDC

  IF  PackRow=1
  XDEF _sourceptr,_destptr
_sourceptr: dc.l 0
_destptr    dc.l 0
  ENDC

PROPVector		dc.l 0
FORMVector		dc.l 0
ChunkVector		dc.l 0
NonILBMVector	dc.l 0
