home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fish 'n' More 2
/
fishmore-publicdomainlibraryvol.ii1991xetec.iso
/
fish
/
libraries
/
ilbm
/
c
/
ilbminterface.asm
< prev
next >
Wrap
Assembly Source File
|
1991-02-15
|
17KB
|
729 lines
; 1). Set your editor's TAB width to 3 in order to correctly view this file.
; 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). Copy the file "IFF.i" to the current directory.
; 4). Assemble this module and link it with your C application modules.
;
;As an additional savings in size, you may wish to clip out the interface code
;for any routines that you do not wish to use. For example, if you don't plan
;on using "GetIFFPMsg", delete the 7 lines starting at XDEF _GetIFFPMsg.
SECTION ilbmcode,CODE
INCLUDE "IFF.i" ;supplies the LVO offsets
XREF _ILBMBase ;ilbm.library opened from C code, and base stored there
XDEF _GetIFFPMsg
XDEF __GetIFFPMsg
_GetIFFPMsg:
movea.l _ILBMBase,a6
__GetIFFPMsg:
move.l 4(sp),d0
jmp _LVOGetIFFPMsg(a6)
XDEF _BlankPointer
XDEF __BlankPointer
_BlankPointer:
movea.l _ILBMBase,a6
__BlankPointer:
movea.l 4(sp),a0
jmp _LVOBlankPointer(a6)
;######################## IFF READER ROUTINES ##########################
;***********************************************************************
;BOOL = LoadIFFToWindow(fileName, ILBMFrame)
; d0 d1 a1
XDEF _LoadIFFToWindow,__LoadIFFToWindow
_LoadIFFToWindow:
movea.l _ILBMBase,a6
__LoadIFFToWindow:
move.l 4(sp),d1
movea.l 8(sp),a1
jmp _LVOLoadIFFToWindow(a6)
;**************************** LoadIFF() *********************************
; IFFP = LoadIFF(fileHandle, Vectors, masterFrame)
; d0 d1 a0 a1
XDEF _LoadIFF,__LoadIFF
_LoadIFF:
movea.l _ILBMBase,a6
__LoadIFF:
movem.l 4(sp),d1/a0/a1
bsr.s SetVectors
jmp _LVOLoadIFF(a6)
;**************************** ScaleImage() *********************************
;BOOL ScaleImage(dest_rectangle,source_rectangle,dest_rport,source_bitmap)
; a0 a1 a2 a4
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
;**************************** SetupBitmap() *********************************
; SetupBitmap(raster, Bitmap, BMHD)
; d0 a0 a1
XDEF _SetupBitmap,__SetupBitmap
_SetupBitmap:
movea.l _ILBMBase,a6
__SetupBitmap:
movem.l 4(sp),d0/a0/a1
jmp _LVOSetupBitmap(a6)
;**************************** 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).
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
;**************************** LoadILBM() *********************************
; IFFP = LoadILBM(fileHandle, Vectors, ILBMFrame)
; d0 d1 a0 a1
XDEF _LoadILBM,__LoadILBM
_LoadILBM:
movea.l _ILBMBase,a6
__LoadILBM:
movem.l 4(sp),d1/a0/a1
bsr.s SetVectors
jmp _LVOLoadILBM(a6)
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
XDEF _GetPROPStruct,__GetPROPStruct
_GetPROPStruct:
movea.l _ILBMBase,a6
__GetPROPStruct:
movem.l 4(sp),d0/d1/a1
jmp _LVOGetPROPStruct(a6)
;*************************** SearchPROP() *****************************
; PropStruct = SearchPROP(PropID, PROPList)
; d0 d0 a1
XDEF _SearchPROP,__SearchPROP
_SearchPROP:
movea.l _ILBMBase,a6
__SearchPROP:
movem.l 4(sp),d0/a1
jmp _LVOSearchPROP(a6)
;*************************** CopyILBMProp() *****************************
; CopyILBMProp(FromFrame, ToFrame)
; d0 a1
XDEF _CopyILBMProp,__CopyILBMProp
_CopyILBMProp:
movea.l _ILBMBase,a6
__CopyILBMProp:
movem.l 4(sp),d0/a1
jmp _LVOCopyILBMProp(a6)
;*************************** FreePROPStruct() *****************************
; FreePROPStruct(PROPList)
; a1
XDEF _FreePROPStruct,__FreePROPStruct
_FreePROPStruct:
movea.l _ILBMBase,a6
__FreePROPStruct:
movea.l 4(sp),a1
jmp _LVOFreePROPStruct(a6)
;*************************** HandleCAMG() *******************************
; HandleCAMG(Context,ILBMFrame)
; a0 a1
XDEF _HandleCAMG,__HandleCAMG
_HandleCAMG:
movea.l _ILBMBase,a6
__HandleCAMG:
movem.l 4(sp),a0/a1
jmp _LVOHandleCAMG(a6)
;*************************** HandleCRNG() *******************************
; HandleCRNG(Context,ILBMFrame)
; a0 a1
XDEF _HandleCRNG,__HandleCRNG
_HandleCRNG:
movea.l _ILBMBase,a6
__HandleCRNG:
movem.l 4(sp),a0/a1
jmp _LVOHandleCRNG(a6)
;*************************** HandleCCRT() *******************************
; HandleCCRT(Context,ILBMFrame)
; a0 a1
XDEF _HandleCCRT,__HandleCCRT
_HandleCCRT:
movea.l _ILBMBase,a6
__HandleCCRT:
movem.l 4(sp),a0/a1
jmp _LVOHandleCCRT(a6)
;**************************** OpenRIFF() *******************************
; IFFP = OpenRIFF(fileHandle, newContext, Frame)
; d0 d1 a0 a1
XDEF _OpenRIFF,__OpenRIFF
_OpenRIFF:
movea.l _ILBMBase,a6
__OpenRIFF:
movem.l 4(sp),d1/a0/a1
jmp _LVOOpenRIFF(a6)
;**************************** FileLength() *****************************
;FileSize = FileLength(fileHandle)
; d0 d1
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
;********************** OpenRGroup() *****************************
; IFFP = OpenRGroup(parent, new) passed 2 Context structures
; d0 a0 a1
XDEF _OpenRGroup,__OpenRGroup
_OpenRGroup:
movea.l _ILBMBase,a6
__OpenRGroup:
movea.l 4(sp),a0
movea.l 8(sp),a1
jmp _LVOOpenRGroup(a6)
;***************************** CloseRGroup ******************************
; IFFP = CloseRGroup(context)
; d0 a0
XDEF _CloseRGroup,__CloseRGroup
_CloseRGroup:
movea.l _ILBMBase,a6
__CloseRGroup:
movea.l 4(sp),a0
jmp _LVOCloseRGroup(a6)
;*************************** SkipFwd() **********************************
; IFFP = SkipFwd(context, bytes)
; d0 a0 d1
XDEF _SkipFwd,__SkipFwd
_SkipFwd:
movea.l _ILBMBase,a6
__SkipFwd:
movea.l 4(sp),a0
move.l 8(sp),d1
jmp _LVOSkipFwd(a6)
;*************************** GetChunkHdr *******************************
; ID = GetChunkHdr(context)
; d0 a0
XDEF _GetChunkHdr,__GetChunkHdr
_GetChunkHdr:
movea.l _ILBMBase,a6
__GetChunkHdr:
movea.l 4(sp),a0
jmp _LVOGetChunkHdr(a6)
;************************** IFFReadBytes ********************************
; IFFP = IFFReadBytes(nBytes, context, buffer)
; d0 d0 a0 a1
XDEF _IFFReadBytes,__IFFReadBytes
_IFFReadBytes:
movea.l _ILBMBase,a6
__IFFReadBytes:
movem.l 4(sp),d0/a0/a1
jmp _LVOIFFReadBytes(a6)
;************************* GetFChunkHdr() ******************************
; ID = GetFChunkHdr(context)
; d0 a0
XDEF _GetFChunkHdr,__GetFChunkHdr
_GetFChunkHdr:
movea.l _ILBMBase,a6
__GetFChunkHdr:
movea.l 4(sp),a0
jmp _LVOGetFChunkHdr(a6)
;************************* GetF1ChunkHdr() ******************************
; ID = GetF1ChunkHdr(context)
; d0 a0
XDEF _GetF1ChunkHdr,__GetF1ChunkHdr
_GetF1ChunkHdr:
movea.l _ILBMBase,a6
__GetF1ChunkHdr:
movea.l 4(sp),a0
jmp _LVOGetF1ChunkHdr(a6)
;**************************** GetPChunkHdr ****************************
; ID = GetPChunkHdr(context)
; d0 a0
XDEF _GetPChunkHdr,__GetPChunkHdr
_GetPChunkHdr:
movea.l _ILBMBase,a6
__GetPChunkHdr:
movea.l 4(sp),a0
jmp _LVOGetPChunkHdr(a6)
;**************************** GetCMAP() *******************************
; IFFP = GetCMAP(Context, colorMap, pNColorRegs)
; d0 d0 a0 a1
XDEF _GetCMAP,__GetCMAP
_GetCMAP:
movea.l _ILBMBase,a6
__GetCMAP:
movem.l 4(sp),d0/a0/a1
jmp _LVOGetCMAP(a6)
;****************************** GetBODY() *******************************
; IFFP = GetBODY(bitmap, mask, context, BMHD)
; d0 d0 d1 a0 a1
XDEF _GetBODY,__GetBODY
_GetBODY:
movea.l _ILBMBase,a6
__GetBODY:
movem.l 4(sp),d0/d1/a0/a1
jmp _LVOGetBODY(a6)
;*********************************************************************
;BOOL = UnPackRow(dstBytes0, srcBytes0, Source, Dest)
; d0 d1 d3 a2 a3
XDEF _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
;****************************** DecompDLTA() *******************************
; DecompDLTA(DLTA,bitmap)
; a0 a2
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
;****************************** DecodeVKPlane() *******************************
; DecodeVKPlane(linebytes, ytable, in, out)
; d0 d1 a0 a1
XDEF _DecodeVKPlane,__DecodeVKPlane
_DecodeVKPlane:
movea.l _ILBMBase,a6
__DecodeVKPlane:
movem.l 4(sp),d0/d1/a0/a1
jmp _LVODecodeVKPlane(a6)
;****************************** MakeYTable() *******************************
; MakeYTable(width, height, table)
; d0 d1 a0
XDEF _MakeYTable,__MakeYTable
_MakeYTable:
movea.l _ILBMBase,a6
__MakeYTable:
movem.l 4(sp),d0/d1/a0
jmp _LVOMakeYTable(a6)
;######################## IFF WRITER ROUTINES #########################
;*************************************************************************
; IFFP = SaveWindowToIFF(fileName, window)
; d0 d1 a0
XDEF _SaveWindowToIFF,__SaveWindowToIFF
_SaveWindowToIFF:
movea.l _ILBMBase,a6
__SaveWindowToIFF:
movem.l 4(sp),d1/a0
jmp _LVOSaveWindowToIFF(a6)
;******************************* SaveILBM() ******************************
;IFFP = SaveILBM(ViewModes,Compress,fhandle,Mask,CTable,BitMap,xyPnt,Handler)
; d0 d0 d1 d2 d3 a0 a1 a2 a3
XDEF _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
;******************************* SaveANIM() ******************************
;IFFP = SaveANIM(Modes,Compress,fhandle,Mask,CTable,BitMap,xyPnt,Handler,ANHD)
; d0 d0 d1 d2 d3 a0 a1 a2 a3 a4
XDEF _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
;**************************** OpenWIFF() *****************************
;IFFP = OpenWIFF(limit, fileHandle, newContext)
; d0 d0 d1 a0
XDEF _OpenWIFF,__OpenWIFF
_OpenWIFF:
movea.l _ILBMBase,a6
__OpenWIFF:
movem.l 4(sp),d0/d1/a0
jmp _LVOOpenWIFF(a6)
;*************************** StartWGroup() ********************************
;IFFP = StartWGroup(groupType, groupSize, subtype, parent, new)
; d0 d0 d1 d2 a0 a1
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
;*************************** OpenWGroup() *******************************
;IFFP = OpenWGroup(parent, new)
; d0 a0 a1
XDEF _OpenWGroup,__OpenWGroup
_OpenWGroup:
movea.l _ILBMBase,a6
__OpenWGroup:
movea.l 4(sp),a0
movea.l 8(sp),a1
jmp _LVOOpenWGroup(a6)
;***************************** EndWGroup() ********************************
;IFFP = EndWGroup(old)
; d0 a0
XDEF _EndWGroup,__EndWGroup
_EndWGroup:
movea.l _ILBMBase,a6
__EndWGroup:
movea.l 4(sp),a0
jmp _LVOEndWGroup(a6)
;************************ CloseWGroup *********************************
;IFFP = CloseWGroup(old)
; d0 a0
XDEF _CloseWGroup,__CloseWGroup
_CloseWGroup:
movea.l _ILBMBase,a6
__CloseWGroup:
movea.l 4(sp),a0
jmp _LVOCloseWGroup(a6)
;******************************* PutCk **********************************
;IFFP = PutCk(ckID, ckSize, context, data)
; d0 d0 d1 a0 a1
XDEF _PutCk,__PutCk
_PutCk:
movea.l _ILBMBase,a6
__PutCk:
movem.l 4(sp),d0/d1/a0/a1
jmp _LVOPutCk(a6)
;******************************* PutCkHdr() ****************************
;IFFPreturn = PutCkHdr(chunkID, chunkSize, context)
; d0 d1 a0
XDEF _PutCkHdr,__PutCkHdr
_PutCkHdr:
movea.l _ILBMBase,a6
__PutCkHdr:
movem.l 4(sp),d0/d1/a0
jmp _LVOPutCkHdr(a6)
;*************************** IFFWriteBytes() ***************************
;IFFP IFFWriteBytes(nBytes, context, data)
; d0 a0 a1
XDEF _IFFWriteBytes,__IFFWriteBytes
_IFFWriteBytes:
movea.l _ILBMBase,a6
__IFFWriteBytes:
movem.l 4(sp),d0/a0/a1
jmp _LVOIFFWriteBytes(a6)
;****************************** PutCkEnd() ******************************
;IFFP = PutCkEnd(context)
; d0 a0
XDEF _PutCkEnd,__PutCkEnd
_PutCkEnd:
movea.l _ILBMBase,a6
__PutCkEnd:
move.l 4(sp),a0
jmp _LVOPutCkEnd(a6)
;*************************** InitBMHdr() ********************************
;IFFP InitBMHdr(masking, compression, transparentColor,
; d0 d1 d2
; pageWidth, pageHeight, BMHD, bitmap)
; d3 d4 a0 a1
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
;**************************** PutCMAP() *********************************
;IFFP PutCMAP(depth, context, colorTable)
; d0 a0 a1
XDEF _PutCMAP,__PutCMAP
_PutCMAP:
movea.l _ILBMBase,a6
__PutCMAP:
movem.l 4(sp),d0/a0/a1
jmp _LVOPutCMAP(a6)
;******************************** PutBODY() ******************************
;IFFP = PutBODY(mask, context, bmHdr, bitmap)
; d0 d0 d1 a0 a1
XDEF _PutBODY,__PutBODY
_PutBODY:
movea.l _ILBMBase,a6
__PutBODY:
movem.l 4(sp),d0/d1/a0/a1
jmp _LVOPutBODY(a6)
;============================ PackRow ===========================
;bytes = PackRow(rowSize, pSource, pDest)
; d0 d0 a0 a1
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
SECTION ilbmdata,DATA
C_Vector2 dc.l 0
C_Vector1 dc.l 0
XDEF _sourceptr,_destptr
_sourceptr: dc.l 0
_destptr dc.l 0
PROPVector dc.l 0
FORMVector dc.l 0
ChunkVector dc.l 0
NonILBMVector dc.l 0
END