home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 302.lha / ILBMLib / ILBMinterface.asm < prev    next >
Assembly Source File  |  1980-12-08  |  19KB  |  917 lines

  1. ; 1). Set your editor's TAB width to 3.
  2. ; 2). Delete the following 2 directives if not using MANX. If using LATTICE,
  3. ;        make sure that you assemble this module with large CODE and DATA
  4. ;     model.
  5.  
  6.   far code  ;for Manx only, it means large code, large data (int = 32 bits)
  7.   far data  ;this module must be assembled expecting passed ints as 32 bits
  8.  
  9. ; 3). Alter the following equates to only include the ilbm lib routines that
  10. ;        you expect to call. This will make your application smaller.
  11.  
  12.  ;change the following equates to a 0 if you don't need that lib routine
  13. DecompBODY        equ 1
  14. SetupBitmap        equ 1
  15. ScaleImage        equ 1
  16. SearchPROP        equ 1
  17. GetPROPStruct    equ 1
  18. FreePROPStruct    equ 1
  19. CopyILBMProp    equ 1
  20. DecodeVKPlane    equ 1
  21. DecompDLTA        equ 1
  22. MakeYTable        equ 1
  23. SaveANIM            equ 1
  24. OpenRIFF            equ 1
  25. FileLength        equ 1
  26. OpenRGroup        equ 1
  27. CloseRGroup        equ 1
  28. IFFReadBytes    equ 1
  29. GetChunkHdr        equ 1
  30. GetFChunkHdr    equ 1
  31. GetF1ChunkHdr    equ 1
  32. GetPChunkHdr    equ 1
  33. GetCMAP            equ 1
  34. GetBODY            equ 1
  35. UnPackRow        equ 1
  36. HandleCCRT        equ 1
  37. HandleCRNG        equ 1
  38. HandleCAMG        equ 1
  39. LoadIFF            equ 1
  40. LoadILBM            equ 1
  41. LoadIFFToWindow    equ 1
  42.  
  43. SaveWindowToIFF    equ 1
  44. SaveILBM            equ 1
  45. IFFWriteBytes    equ 1
  46. PackRow            equ 1
  47. PutBODY            equ 1
  48. PutCMAP            equ 1
  49. OpenWIFF            equ 1
  50. OpenWGroup        equ 1
  51. StartWGroup        equ 1
  52. PutCkHdr            equ 1
  53. PutCk                equ 1
  54. PutCkEnd            equ 1
  55. EndWGroup        equ 1
  56. CloseWGroup        equ 1
  57. InitBMHdr        equ 1
  58.  
  59. GetIFFPMsg        equ 1
  60. BlankPointer    equ 1
  61.  
  62. ; 4). Assemble this module and link it with your C application modules.
  63.  
  64.     INCLUDE    "IFF.i"    ;supplies the LVO offsets
  65.  
  66.     XDEF    _ILBMBase    ;ilbm.library opened from C code, and base stored there
  67.  
  68.     SECTION    ilbmcode,CODE
  69.     
  70.     IF    GetIFFPMsg=1
  71.  
  72.     XDEF    _GetIFFPMsg,__GetIFFPMsg
  73. _GetIFFPMsg:
  74.     movea.l    _ILBMBase,a6
  75. __GetIFFPMsg:
  76.     move.l    4(sp),d0
  77.     jmp        _LVOGetIFFPMsg(a6)
  78.  
  79.     ENDC
  80.  
  81.     IF BlankPointer=1
  82.  
  83.     XDEF    _BlankPointer,__BlankPointer
  84. _BlankPointer:
  85.     movea.l    _ILBMBase,a6
  86. __BlankPointer:
  87.     movea.l    4(sp),a0
  88.     jmp        _LVOBlankPointer(a6)
  89.  
  90.     ENDC
  91.  
  92. ;######################## IFF READER ROUTINES ##########################
  93.  
  94. ;***********************************************************************
  95. ;BOOL = LoadIFFToWindow(fileName, ILBMFrame)
  96. ; d0                                d1                a1
  97.  
  98.     IF LoadIFFToWindow=1
  99.  
  100.     XDEF    _LoadIFFToWindow,__LoadIFFToWindow
  101. _LoadIFFToWindow:
  102.     movea.l    _ILBMBase,a6
  103. __LoadIFFToWindow:
  104.     move.l    4(sp),d1
  105.     movea.l    8(sp),a1
  106.     jmp        _LVOLoadIFFToWindow(a6)
  107.  
  108.     ENDC
  109.  
  110. ;**************************** LoadIFF() *********************************
  111. ; IFFP = LoadIFF(fileHandle, Vectors, masterFrame)
  112. ;  d0                        d1            a0                a1
  113.  
  114.   IF LoadIFF=1
  115.  
  116.     XDEF    _LoadIFF,__LoadIFF
  117. _LoadIFF:
  118.     movea.l    _ILBMBase,a6
  119. __LoadIFF:
  120.     movem.l    4(sp),d1/a0/a1
  121.     bsr.s        SetVectors
  122.     jmp        _LVOLoadIFF(a6)
  123.  
  124.     ENDC
  125.  
  126. ;**************************** ScaleImage() *********************************
  127. ;BOOL ScaleImage(dest_rectangle,source_rectangle,dest_rport,source_bitmap)
  128. ;                            a0                    a1                        a2                a4
  129.  
  130.   IF ScaleImage=1
  131.  
  132.     XDEF    _ScaleImage,__ScaleImage
  133. _ScaleImage:
  134.     movea.l    _ILBMBase,a6
  135. __ScaleImage:
  136.     movem.l    a2/a4,-(sp)
  137.     movem.l    12(sp),a0/a1/a2/a4
  138.     jsr        _LVOScaleImage(a6)
  139.     movem.l    (sp)+,a2/a4
  140.     rts
  141.  
  142.     ENDC
  143.  
  144. ;**************************** SetupBitmap() *********************************
  145. ; SetupBitmap(raster, Bitmap, BMHD)
  146. ;                    d0            a0        a1
  147.  
  148.   IF SetupBitmap=1
  149.  
  150.     XDEF    _SetupBitmap,__SetupBitmap
  151. _SetupBitmap:
  152.     movea.l    _ILBMBase,a6
  153. __SetupBitmap:
  154.     movem.l    4(sp),d0/a0/a1
  155.     jmp        _LVOSetupBitmap(a6)
  156.  
  157.     ENDC
  158.  
  159. ;**************************** DecompBODY() *********************************
  160. ; DecompBODY(BODY, BMHD, Bitmap)
  161. ;                    a0        a1        a2
  162. ; Decompresses the BODY chunk into the passed BitMap's planes based on the
  163. ; passed BMHD's w, h, numPlanes, and pageWidth. This is used for the first
  164. ; frame of the ANIM (ANHD's opmode = 0). BODY is the address of the loaded
  165. ; BODY chunk of the first frame of the ANIM file (minus the 8 byte header).
  166.  
  167.   IF DecompBODY=1
  168.  
  169.     XDEF    _DecompBODY,__DecompBODY
  170. _DecompBODY:
  171.     movea.l    _ILBMBase,a6
  172. __DecompBODY:
  173.     move.l    a2,-(sp)
  174.     movem.l    8(sp),a0/a1/a2
  175.     jsr        _LVODecompBODY(a6)
  176.     movea.l    (sp)+,a2
  177.     rts
  178.  
  179.     ENDC
  180.  
  181. ;**************************** LoadILBM() *********************************
  182. ; IFFP = LoadILBM(fileHandle, Vectors, ILBMFrame)
  183. ;  d0                        d1            a0                a1
  184.  
  185.   IF LoadILBM=1
  186.  
  187.     XDEF    _LoadILBM,__LoadILBM
  188. _LoadILBM:
  189.     movea.l    _ILBMBase,a6
  190. __LoadILBM:
  191.     movem.l    4(sp),d1/a0/a1
  192.     bsr.s        SetVectors
  193.     jmp        _LVOLoadILBM(a6)
  194.  
  195.     ENDC
  196.  
  197. SetVectors:
  198.     movem.l    a0/a2/a3,-(sp)
  199.     ;---Setup CInterface to PROP handler
  200.     lea        PROPVector,a3
  201.     move.l    (a0)+,(a3)+
  202.     beq.s        noPROP
  203.     lea        PropHandler,a2
  204.     move.l    a2,-4(a0)
  205. noPROP:
  206.     ;---Setup CInterface to FORM handler
  207.     move.l    (a0)+,(a3)+
  208.     beq.s        noFORM
  209.     lea        FormHandler,a2
  210.     move.l    a2,-4(a0)
  211. noFORM:
  212.     ;---Setup CInterface to Chunk handler
  213.     move.l    (a0)+,(a3)+
  214.     beq.s        noChunk
  215.     lea        ChunkHandler,a2
  216.     move.l    a2,-4(a0)
  217. noChunk:
  218.     ;---Setup CInterface to Non-ILBM FORM handler
  219.     move.l    (a0),(a3)
  220.     beq.s        noNon
  221.     lea        NONILBM,a2
  222.     move.l    a2,(a0)
  223. noNon:
  224.     movem.l    (sp)+,a0/a2/a3
  225.     rts
  226.  
  227. ; Calls C PROP routine as follows:
  228. ; IFFP = PropRoutine(chunkID,PropID,Context,Vectors,Frame,PROPList)
  229. PropHandler:
  230.     movem.l    d0/d2/a0/a2/a3/a4,-(sp)
  231.     movea.l    PROPVector,a1
  232.     jsr        (a1)
  233.     movem.l    (sp)+,d1/d2/a0/a2/a3/a4
  234.     rts
  235.  
  236. ; Calls C FORM routine as follows:
  237. ; IFFP = FormRoutine(chunkID,Context,Vectors,Frame,PROPList)
  238. FormHandler:
  239.     movea.l    FORMVector,a1
  240. do_hand:
  241.     movem.l    d0/a0/a2/a3/a4,-(sp)
  242.     jsr        (a1)
  243.     movem.l    (sp)+,d1/a0/a2/a3/a4
  244.     rts
  245.  
  246.  ; An Unknown chunk in an ILBM (i.e. DLTA, ANHD, DEST, GRAB...)
  247. ChunkHandler:
  248.     movea.l    ChunkVector,a1
  249.     bra.s        do_hand
  250.  
  251.  ; A Non-ILBM FORM
  252. NONILBM:
  253.     movea.l    NonILBMVector,a1
  254.     bra.s        do_hand
  255.  
  256. ;*************************** GetPROPStruct() *****************************
  257. ; PropStruct = GetPROPStruct(size, PropID, PROPList)
  258. ;        d0                                d0        d1            a1
  259.  
  260.     IF GetPROPStruct=1
  261.  
  262.     XDEF _GetPROPStruct,__GetPROPStruct
  263. _GetPROPStruct:
  264.     movea.l    _ILBMBase,a6
  265. __GetPROPStruct:
  266.     movem.l    4(sp),d0/d1/a1
  267.     jmp        _LVOGetPROPStruct(a6)
  268.  
  269.     ENDC
  270.  
  271. ;*************************** SearchPROP() *****************************
  272. ; PropStruct = SearchPROP(PropID, PROPList)
  273. ;        d0                            d0            a1
  274.  
  275.     IF SearchPROP=1
  276.  
  277.     XDEF _SearchPROP,__SearchPROP
  278. _SearchPROP:
  279.     movea.l    _ILBMBase,a6
  280. __SearchPROP:
  281.     movem.l    4(sp),d0/a1
  282.     jmp        _LVOSearchPROP(a6)
  283.  
  284.     ENDC
  285.  
  286. ;*************************** CopyILBMProp() *****************************
  287. ; CopyILBMProp(FromFrame, ToFrame)
  288. ;                        d0            a1
  289.  
  290.     IF CopyILBMProp=1
  291.  
  292.     XDEF _CopyILBMProp,__CopyILBMProp
  293. _CopyILBMProp:
  294.     movea.l    _ILBMBase,a6
  295. __CopyILBMProp:
  296.     movem.l    4(sp),d0/a1
  297.     jmp        _LVOCopyILBMProp(a6)
  298.  
  299.     ENDC
  300.  
  301. ;*************************** FreePROPStruct() *****************************
  302. ; FreePROPStruct(PROPList)
  303. ;                        a1
  304.  
  305.     IF FreePROPStruct=1
  306.  
  307.     XDEF _FreePROPStruct,__FreePROPStruct
  308. _FreePROPStruct:
  309.     movea.l    _ILBMBase,a6
  310. __FreePROPStruct:
  311.     movea.l    4(sp),a1
  312.     jmp        _LVOFreePROPStruct(a6)
  313.  
  314.     ENDC
  315.  
  316. ;*************************** HandleCAMG() *******************************
  317. ; HandleCAMG(Context,ILBMFrame)
  318. ;                    a0            a1
  319.  
  320.     IF    HandleCAMG=1
  321.  
  322.     XDEF _HandleCAMG,__HandleCAMG
  323. _HandleCAMG:
  324.         movea.l    _ILBMBase,a6
  325. __HandleCAMG:
  326.         movem.l    4(sp),a0/a1
  327.         jmp        _LVOHandleCAMG(a6)
  328.  
  329.     ENDC
  330.  
  331. ;*************************** HandleCRNG() *******************************
  332. ; HandleCRNG(Context,ILBMFrame)
  333. ;                    a0            a1
  334.  
  335.     IF    HandleCRNG=1
  336.  
  337.     XDEF _HandleCRNG,__HandleCRNG
  338. _HandleCRNG:
  339.         movea.l    _ILBMBase,a6
  340. __HandleCRNG:
  341.         movem.l    4(sp),a0/a1
  342.         jmp        _LVOHandleCRNG(a6)
  343.  
  344.     ENDC
  345.  
  346. ;*************************** HandleCCRT() *******************************
  347. ; HandleCCRT(Context,ILBMFrame)
  348. ;                    a0            a1
  349.  
  350.     IF    HandleCCRT=1
  351.  
  352.     XDEF _HandleCCRT,__HandleCCRT
  353. _HandleCCRT:
  354.         movea.l    _ILBMBase,a6
  355. __HandleCCRT:
  356.         movem.l    4(sp),a0/a1
  357.         jmp        _LVOHandleCCRT(a6)
  358.  
  359.     ENDC
  360.  
  361. ;**************************** OpenRIFF() *******************************
  362. ; IFFP = OpenRIFF(fileHandle, newContext, Frame)
  363. ;  d0                        d1                a0            a1
  364.  
  365.     IF    OpenRIFF=1
  366.  
  367.     XDEF    _OpenRIFF,__OpenRIFF
  368. _OpenRIFF:
  369.     movea.l    _ILBMBase,a6
  370. __OpenRIFF:
  371.     movem.l    4(sp),d1/a0/a1
  372.     jmp        _LVOOpenRIFF(a6)
  373.  
  374.     ENDC
  375.  
  376. ;**************************** FileLength() *****************************
  377. ;FileSize = FileLength(fileHandle)
  378. ;    d0                                d1
  379.  
  380.    IF FileLength=1
  381.  
  382.     XDEF    _FileLength,__FileLength
  383. _FileLength:
  384.     movea.l    _ILBMBase,a6
  385. __FileLength:
  386.     move.l    4(sp),d1
  387.     move.l    a6,-(sp)
  388.     jsr        _LVOFileLength(a6)
  389.     movea.l    (sp)+,a6
  390.     rts
  391.  
  392.     ENDC
  393.  
  394. ;********************** OpenRGroup() *****************************
  395. ; IFFP = OpenRGroup(parent, new)   passed 2 Context structures
  396. ;  d0                        a0         a1
  397.  
  398.     IF    OpenRGroup=1
  399.  
  400.     XDEF    _OpenRGroup,__OpenRGroup
  401. _OpenRGroup:
  402.     movea.l    _ILBMBase,a6
  403. __OpenRGroup:
  404.     movea.l    4(sp),a0
  405.     movea.l    8(sp),a1
  406.     jmp        _LVOOpenRGroup(a6)
  407.  
  408.     ENDC
  409.  
  410. ;***************************** CloseRGroup ******************************
  411. ; IFFP = CloseRGroup(context)
  412. ;  d0                            a0
  413.  
  414.    IF CloseRGroup=1
  415.  
  416.     XDEF    _CloseRGroup,__CloseRGroup
  417. _CloseRGroup:
  418.     movea.l    _ILBMBase,a6
  419. __CloseRGroup:
  420.     movea.l    4(sp),a0
  421.     jmp        _LVOCloseRGroup(a6)
  422.  
  423.     ENDC
  424.  
  425. ;*************************** SkipFwd() **********************************
  426. ; IFFP = SkipFwd(context, bytes)
  427. ;  d0              a0       d1
  428.  
  429.     IF    SkipFwd=1
  430.  
  431.     XDEF    _SkipFwd,__SkipFwd
  432. _SkipFwd:
  433.     movea.l    _ILBMBase,a6
  434. _SkipFwd:
  435.     movea.l    4(sp),a0
  436.     move.l    8(sp),d1
  437.     jmp        _LVOSkipFwd(a6)
  438.  
  439.     ENDC
  440.  
  441. ;*************************** GetChunkHdr *******************************
  442. ; ID = GetChunkHdr(context)
  443. ; d0                        a0
  444.  
  445.     IF    GetChunkHdr=1
  446.  
  447.     XDEF    _GetChunkHdr,__GetChunkHdr
  448. _GetChunkHdr:
  449.     movea.l    _ILBMBase,a6
  450. __GetChunkHdr:
  451.     movea.l    4(sp),a0
  452.     jmp        _LVOGetChunkHdr(a6)
  453.  
  454.     ENDC
  455.  
  456. ;************************** IFFReadBytes ********************************
  457. ; IFFP = IFFReadBytes(nBytes, context, buffer)
  458. ;  d0                            d0            a0            a1
  459.  
  460.     IF    IFFReadBytes=1
  461.  
  462.     XDEF    _IFFReadBytes,__IFFReadBytes
  463. _IFFReadBytes:
  464.     movea.l    _ILBMBase,a6
  465. __IFFReadBytes:
  466.     movem.l    4(sp),d0/a0/a1
  467.     jmp        _LVOIFFReadBytes(a6)
  468.  
  469.     ENDC
  470.  
  471. ;************************* GetFChunkHdr() ******************************
  472. ; ID = GetFChunkHdr(context)
  473. ; d0                        a0
  474.  
  475.     IF    GetFChunkHdr=1
  476.  
  477.     XDEF    _GetFChunkHdr,__GetFChunkHdr
  478. _GetFChunkHdr:
  479.     movea.l _ILBMBase,a6
  480. __GetFChunkHdr:
  481.     movea.l    4(sp),a0
  482.     jmp        _LVOGetFChunkHdr(a6)
  483.  
  484.     ENDC
  485.  
  486. ;************************* GetF1ChunkHdr() ******************************
  487. ; ID = GetF1ChunkHdr(context)
  488. ; d0                            a0
  489.  
  490.     IF GetF1ChunkHdr=1
  491.  
  492.     XDEF    _GetF1ChunkHdr,__GetF1ChunkHdr
  493. _GetF1ChunkHdr:
  494.     movea.l    _ILBMBase,a6
  495. __GetF1ChunkHdr:
  496.     movea.l    4(sp),a0
  497.     jmp        _LVOGetF1ChunkHdr(a6)
  498.  
  499.     ENDC
  500.  
  501. ;**************************** GetPChunkHdr ****************************
  502. ; ID = GetPChunkHdr(context)
  503. ; d0                  a0
  504.  
  505.     IF    GetPChunkHdr=1
  506.  
  507.     XDEF    _GetPChunkHdr,__GetPChunkHdr
  508. _GetPChunkHdr:
  509.     movea.l    _ILBMBase,a6
  510. __GetPChunkHdr:
  511.     movea.l    4(sp),a0
  512.     jmp        _LVOGetPChunkHdr(a6)
  513.  
  514.     ENDC
  515.  
  516. ;**************************** GetCMAP() *******************************
  517. ; IFFP = GetCMAP(Context, colorMap, pNColorRegs)
  518. ;  d0                        d0            a0            a1
  519.  
  520.     IF    GetCMAP=1
  521.  
  522.     XDEF    _GetCMAP,__GetCMAP
  523. _GetCMAP:
  524.     movea.l    _ILBMBase,a6
  525. __GetCMAP:
  526.     movem.l    4(sp),d0/a0/a1
  527.     jmp        _LVOGetCMAP(a6)
  528.  
  529.     ENDC
  530.  
  531. ;****************************** GetBODY() *******************************
  532. ; IFFP = GetBODY(bitmap, mask, context, BMHD)
  533. ;  d0                    d0            d1        a0            a1
  534.  
  535.     IF GetBODY=1
  536.  
  537.     XDEF    _GetBODY,__GetBODY
  538. _GetBODY:
  539.     movea.l    _ILBMBase,a6
  540. __GetBODY:
  541.     movem.l    4(sp),d0/d1/a0/a1
  542.     jmp        _LVOGetBODY(a6)
  543.  
  544.     ENDC
  545.  
  546. ;*********************************************************************
  547. ;BOOL = UnPackRow(dstBytes0, srcBytes0, Source, Dest)
  548. ; d0                        d1                d3            a2        a3
  549.  
  550.     IF UnPackRow=1
  551.  
  552.     XREF    _UnPackRow,__UnPackRow
  553. _UnPackRow:
  554.     movea.l    _ILBMBase,a6
  555. __UnPackRow:
  556.     movem.l    d3/a2/a3,-(sp)
  557.     movem.l    16(sp),d1/d3/a2/a3
  558.     jsr        _LVOUnPackRow(a6)
  559.     movem.l    (sp)+,d3/a2/a3
  560.     rts
  561.  
  562.     ENDC
  563.  
  564. ;****************************** DecompDLTA() *******************************
  565. ; DecompDLTA(DLTA,bitmap)
  566. ;                  a0        a2
  567.  
  568.     IF DecompDLTA=1
  569.  
  570.     XDEF    _DecompDLTA,__DecompDLTA
  571. _DecompDLTA:
  572.     movea.l    _ILBMBase,a6
  573. __DecompDLTA:
  574.     move.l    a2,-(sp)
  575.     movem.l    8(sp),a0/a2
  576.     jsr        _LVODecompDLTA(a6)
  577.     movea.l    (sp)+,a2
  578.     rts
  579.  
  580.     ENDC
  581.  
  582. ;****************************** DecodeVKPlane() *******************************
  583. ; DecodeVKPlane(linebytes, ytable, in, out)
  584. ;                         d0                d1        a0     a1
  585.  
  586.     IF DecodeVKPlane=1
  587.  
  588.     XDEF    _DecodeVKPlane,__DecodeVKPlane
  589. _DecodeVKPlane:
  590.     movea.l    _ILBMBase,a6
  591. __DecodeVKPlane:
  592.     movem.l    4(sp),d0/d1/a0/a1
  593.     jmp        _LVODecodeVKPlane(a6)
  594.  
  595.     ENDC
  596.  
  597. ;****************************** MakeYTable() *******************************
  598. ; MakeYTable(width, height, table)
  599. ;                  d0        d1            a0
  600.  
  601.     IF MakeYTable=1
  602.  
  603.     XDEF    _MakeYTable,__MakeYTable
  604. _MakeYTable:
  605.     movea.l    _ILBMBase,a6
  606. __MakeYTable:
  607.     movem.l    4(sp),d0/d1/a0
  608.     jmp        _LVOMakeYTable(a6)
  609.  
  610.     ENDC
  611.  
  612. ;######################## IFF WRITER ROUTINES #########################
  613.  
  614. ;*************************************************************************
  615. ; IFFP = SaveWindowToIFF(fileName, window)
  616. ;  d0                       d1       a0
  617.  
  618.    IF SaveWindowToIFF=1
  619.  
  620.    XDEF   _SaveWindowToIFF,__SaveWindowToIFF
  621. _SaveWindowToIFF:
  622.     movea.l _ILBMBase,a6
  623. __SaveWindowToIFF:
  624.     movem.l 4(sp),d1/a0
  625.     jmp     _LVOSaveWindowToIFF(a6)
  626.  
  627.    ENDC
  628.  
  629. ;******************************* SaveILBM() ******************************
  630. ;IFFP = SaveILBM(ViewModes,Compress,fhandle,Mask,CTable,BitMap,xyPnt,Handler)
  631. ; d0                 d0       d1       d2    d3    a0      a1    a2     a3
  632.  
  633.    IF SaveILBM=1
  634.  
  635.    XREF _SaveILBM,__SaveILBM
  636. _SaveILBM:
  637.     movea.l _ILBMBase,a6
  638. __SaveILBM:
  639.     movem.l d2/d3/a2/a3,-(sp)
  640.     movem.l 20(sp),d0/d1/d2/d3/a2/a3
  641.     move.l  a3,C_Vector1
  642.     beq.s   noCHand
  643.     lea     C_Handler1,a3
  644. noCHand:
  645.     jsr     _LVOSaveILBM(a6)
  646.     movem.l (sp)+,d2/d3/a2/a3
  647.     rts
  648.  
  649. C_Handler1:
  650.     move.l    a0,-(sp)        ;pass Context to C routine
  651.     movea.l    C_Vector1,a1
  652.     jsr        (a1)
  653.     movea.l    (sp)+,a0
  654.     rts
  655.  
  656.   ENDC
  657.  
  658. ;******************************* SaveANIM() ******************************
  659. ;IFFP = SaveANIM(Modes,Compress,fhandle,Mask,CTable,BitMap,xyPnt,Handler,ANHD)
  660. ; d0              d0      d1       d2    d3    a0      a1    a2     a3    a4
  661.  
  662.    IF SaveANIM=1
  663.  
  664.    XREF _SaveANIM,__SaveANIM
  665. _SaveANIM:
  666.     movea.l _ILBMBase,a6
  667. __SaveANIM:
  668.     movem.l d2/d3/a2/a3/a4,-(sp)
  669.     movem.l 24(sp),d0/d1/d2/d3/a2/a3/a4
  670.     move.l  a3,C_Vector2
  671.     beq.s   noCHand2
  672.     lea     C_Handler2,a3
  673. noCHand2:
  674.     jsr     _LVOSaveANIM(a6)
  675.     movem.l (sp)+,d2/d3/a2/a3/a4
  676.     rts
  677.  
  678. C_Handler2:
  679.     movem.l    a0/a1,-(sp)        ;pass Context and Parent to C routine
  680.     movea.l    C_Vector2,a1
  681.     jsr        (a1)
  682.     movem.l    (sp)+,a0/a1
  683.     rts
  684.  
  685.     ENDC
  686.  
  687. ;**************************** OpenWIFF() *****************************
  688. ;IFFP = OpenWIFF(limit, fileHandle, newContext)
  689. ; d0                    d0            d1                a0
  690.  
  691.     IF    OpenWIFF=1
  692.  
  693.     XDEF    _OpenWIFF,__OpenWIFF
  694. _OpenWIFF:
  695.     movea.l    _ILBMBase,a6
  696. __OpenWIFF:
  697.     movem.l    4(sp),d0/d1/a0
  698.     jmp        _LVOOpenWIFF(a6)
  699.  
  700.     ENDC
  701.  
  702. ;*************************** StartWGroup() ********************************
  703. ;IFFP = StartWGroup(groupType, groupSize, subtype, parent, new)
  704. ; d0                            d0                d1            d2            a0        a1
  705.  
  706.     IF    StartWGroup=1
  707.  
  708.     XDEF    _StartWGroup,__StartWGroup
  709. _StartWGroup:
  710.     movea.l _ILBMBase,a6
  711. __StartWGroup:
  712.     move.l   d2,-(sp)
  713.     movem.l  8(sp),d0/d1/d2/a0/a1
  714.     jsr     _LVOStartWGroup(a6)
  715.     move.l  (sp)+,d2
  716.     rts
  717.  
  718.     ENDC
  719.  
  720. ;*************************** OpenWGroup() *******************************
  721. ;IFFP = OpenWGroup(parent, new)
  722. ; d0                 a0    a1
  723.  
  724.   IF OpenWGroup=1
  725.  
  726.    XDEF _OpenWGroup,__OpenWGroup
  727. _OpenWGroup:
  728.     movea.l _ILBMBase,a6
  729. __OpenWGroup:
  730.     movea.l 4(sp),a0
  731.     movea.l 8(sp),a1
  732.     jmp     _LVOOpenWGroup(a6)
  733.  
  734.   ENDC
  735.  
  736. ;***************************** EndWGroup() ********************************
  737. ;IFFP = EndWGroup(old)
  738. ; d0               a0
  739.  
  740.    IF EndWGroup=1
  741.  
  742.    XDEF _EndWGroup,__EndWGroup
  743. _EndWGroup:
  744.     movea.l _ILBMBase,a6
  745. __EndWGroup:
  746.     movea.l 4(sp),a0
  747.     jmp     _LVOEndWGroup(a6)
  748.  
  749.   ENDC
  750.  
  751. ;************************ CloseWGroup *********************************
  752. ;IFFP = CloseWGroup(old)
  753. ; d0                a0
  754.  
  755.    IF CloseWGroup=1
  756.   
  757.    XDEF _CloseWGroup,__CloseWGroup
  758. _CloseWGroup:
  759.     movea.l _ILBMBase,a6
  760. __CloseWGroup:
  761.     movea.l 4(sp),a0
  762.     jmp     _LVOCloseWGroup(a6)
  763.  
  764.   ENDC
  765.  
  766. ;******************************* PutCk **********************************
  767. ;IFFP = PutCk(ckID, ckSize, context, data)
  768. ; d0           d0     d1      a0      a1
  769.  
  770.    IF PutCk=1
  771.  
  772.    XDEF   _PutCk,__PutCk
  773. _PutCk:
  774.     movea.l _ILBMBase,a6
  775. __PutCk:
  776.     movem.l  4(sp),d0/d1/a0/a1
  777.     jmp     _LVOPutCk(a6)
  778.  
  779.    ENDC
  780.  
  781. ;******************************* PutCkHdr() ****************************
  782. ;IFFPreturn = PutCkHdr(chunkID, chunkSize, context)
  783. ;                        d0        d1        a0
  784.  
  785.    IF PutCkHdr=1
  786.  
  787.    XDEF   _PutCkHdr,__PutCkHdr
  788. _PutCkHdr:
  789.     movea.l _ILBMBase,a6
  790. __PutCkHdr:
  791.     movem.l  4(sp),d0/d1/a0
  792.     jmp     _LVOPutCkHdr(a6)
  793.  
  794.   ENDC
  795.  
  796. ;*************************** IFFWriteBytes() ***************************
  797. ;IFFP IFFWriteBytes(nBytes, context, data)
  798. ;                     d0       a0     a1
  799.  
  800.    IF IFFWriteBytes=1
  801.  
  802.    XDEF   _IFFWriteBytes,__IFFWriteBytes
  803. _IFFWriteBytes:
  804.     movea.l _ILBMBase,a6
  805. __IFFWriteBytes:
  806.     movem.l  4(sp),d0/a0/a1
  807.     jmp     _LVOIFFWriteBytes(a6)
  808.  
  809.   ENDC
  810.  
  811. ;****************************** PutCkEnd() ******************************
  812. ;IFFP = PutCkEnd(context)
  813. ; d0               a0
  814.  
  815.   IF PutCkEnd=1
  816.  
  817.    XDEF   _PutCkEnd,__PutCkEnd
  818. _PutCkEnd:
  819.     movea.l _ILBMBase,a6
  820. __PutCkEnd:
  821.     move.l  4(sp),a0
  822.     jmp     _LVOPutCkEnd(a6)
  823.  
  824.   ENDC
  825.  
  826. ;*************************** InitBMHdr() ********************************
  827. ;IFFP InitBMHdr(masking, compression, transparentColor,
  828. ;                 d0          d1              d2
  829. ;               pageWidth, pageHeight, BMHD, bitmap)
  830. ;                   d3         d4       a0     a1
  831.  
  832.    IF InitBMHdr=1
  833.  
  834.    XDEF   _InitBMHdr,__InitBMHdr
  835. _InitBMHdr:
  836.     movea.l _ILBMBase,a6
  837. __InitBMHdr:
  838.     movem.l  d2/d3/d4,-(sp)
  839.     movem.l  16(sp),d0/d1/d2/d3/d4/a0/a1
  840.     jsr      _LVOInitBMHdr(a6)
  841.     movem.l  (sp)+,d2/d3/d4
  842.     rts
  843.  
  844.   ENDC
  845.  
  846. ;**************************** PutCMAP() *********************************
  847. ;IFFP PutCMAP(depth, context, colorTable)
  848. ;               d0     a0        a1
  849.  
  850.    IF PutCMAP=1
  851.  
  852.    XDEF _PutCMAP,__PutCMAP
  853. _PutCMAP:
  854.     movea.l _ILBMBase,a6
  855. __PutCMAP:
  856.     movem.l  4(sp),d0/a0/a1
  857.     jmp     _LVOPutCMAP(a6)
  858.  
  859.   ENDC
  860.  
  861. ;******************************** PutBODY() ******************************
  862. ;IFFP = PutBODY(mask, context, bmHdr, bitmap)
  863. ; d0             d0     d1       a0     a1
  864.  
  865.    IF PutBODY=1
  866.  
  867.    XDEF _PutBODY,__PutBODY
  868. _PutBODY:
  869.     movea.l _ILBMBase,a6
  870. __PutBODY:
  871.     movem.l  4(sp),d0/d1/a0/a1
  872.     jmp     _LVOPutBODY(a6)
  873.  
  874.   ENDC
  875.  
  876. ;============================ PackRow ===========================
  877. ;bytes = PackRow(rowSize, pSource, pDest)
  878. ; d0               d0       a0      a1
  879.  
  880.    IF PackRow=1
  881.  
  882.    XDEF _PackRow,__PackRow
  883. _PackRow:
  884.     movea.l _ILBMBase,a6
  885. __PackRow:
  886.     movem.l  4(sp),d0/a0/a1
  887.     jsr     _LVOPackRow(a6)
  888.     move.l  a6,d1
  889.     lea     _sourceptr,a6
  890.     move.l  a0,(a6)+
  891.     move.l  a1,(a6)
  892.     movea.l d1,a6
  893.     rts
  894.  
  895.   ENDC
  896.  
  897.   SECTION  ilbmdata,DATA
  898.  
  899.   IF  SaveANIM=1
  900. C_Vector2    dc.l 0
  901.   ENDC
  902.  
  903.   IF  SaveILBM=1
  904. C_Vector1    dc.l 0
  905.   ENDC
  906.  
  907.   IF  PackRow=1
  908.   XDEF _sourceptr,_destptr
  909. _sourceptr: dc.l 0
  910. _destptr    dc.l 0
  911.   ENDC
  912.  
  913. PROPVector        dc.l 0
  914. FORMVector        dc.l 0
  915. ChunkVector        dc.l 0
  916. NonILBMVector    dc.l 0
  917.