diff options
author | Christian A. Weber <chris@gna.ch> | 1993-05-24 15:46:47 +0000 |
---|---|---|
committer | Christian A. Weber <chris@gna.ch> | 1993-05-24 15:46:47 +0000 |
commit | 352ff7df4e1869743f238de34c975129a97c3d33 (patch) | |
tree | 5ec9c1c07e0257f55f5b3c26b94b78f92994edd1 /Source/PushChunk.S | |
parent | 937e75f81313bfaa7d3442275f0cd6873a07d10f (diff) | |
download | iff-library-352ff7df4e1869743f238de34c975129a97c3d33.tar.gz iff-library-352ff7df4e1869743f238de34c975129a97c3d33.tar.bz2 iff-library-352ff7df4e1869743f238de34c975129a97c3d33.zip |
FORMs können jetzt verschachtelt werden bei Push/PopChunk()
Diffstat (limited to 'Source/PushChunk.S')
-rw-r--r-- | Source/PushChunk.S | 34 |
1 files changed, 22 insertions, 12 deletions
diff --git a/Source/PushChunk.S b/Source/PushChunk.S index b021340..e645da9 100644 --- a/Source/PushChunk.S +++ b/Source/PushChunk.S @@ -1,11 +1,10 @@ ** -** $Id: $ -** $Revision: $ +** $Id: PushChunk.S,v 21.1 92/05/15 03:24:41 chris Exp $ +** $Revision: 21.1 $ ** ** $Filename: PushChunk.S $ -** $Author: Christian A. Weber $ -** $Release: 21.1 $ -** $Date: 92/05/14 22:26:34 $ +** $Author: chris $ +** $Date: 92/05/15 03:24:41 $ ** ** iff.library/IFFL_PushChunk ** @@ -55,33 +54,44 @@ * Non-zero if successful or 0 if not successful (call IFFL_IFFError() * to get an IFFL_ERROR_... error code. * +* NOTE +* Currently, the level of nested FORMs is restricted to 7. +* * SEE ALSO * IFFL_PopChunk(), IFFL_WriteChunkBytes() * ***************************************************************************** -PushChunkFunc: movem.l d0-d3/a2/a5-a6,-(SP) +PushChunkFunc: movem.l d0-d3/a2/a5-a6,-(SP) ; D0 auch (siehe unten!) movea.l a6,a5 ; IFFBase für ClearError() movea.l a0,a2 ; A2 : IFF-Handle movea.l iffb_DOSBase(a5),a6 ; A6 : DOSBase - *** File-Type schreiben falls dies der erste Chunk ist + *** File-Type schreiben falls das FORM leer ist - tst.l ifffh_FormSize(a2) ; 1. Chunk ? + tst.l ifffh_ChunkSize(a2) ; 1. Chunk ? bne.b .NotFirstChunk ; nee ---> move.l ifffh_File(a2),d1 ; Filehandle - move.l SP,d2 ; Type aufm Stack + move.l SP,d2 ; Typ (D0) aufm Stack von MOVEM her moveq.l #4,d3 ; Länge: 1 Langwort JSRLIB Write cmp.l d3,d0 ; OK geschrieben ? bne.b .WriteError - add.l d3,ifffh_FormSize(a2) ; FORM-Grösse anpassen + add.l d3,ifffh_ChunkSize(a2) ; FORM-Grösse anpassen .NotFirstChunk: + *** Chunk-Stack eins nach oben rutschen + + lea iffh_CStackEnd(a2),a1 ; Destination + lea -8(a1),a0 ; Source + moveq #(iffh_CStackEnd-iffh_CStack-8)/4-1,d0 +.StackUp: move.l -(a0),-(a1) + dbf d0,.StackUp + *** Chunk im IFF-Handle initialisieren - clr.l ifffh_ChunkSize(a2) ; Chunk-Grösse resstten + clr.l ifffh_ChunkSize(a2) ; Chunk-Grösse resetten move.l ifffh_File(a2),d1 moveq.l #0,d2 ; Aktuelle Position @@ -94,7 +104,7 @@ PushChunkFunc: movem.l d0-d3/a2/a5-a6,-(SP) move.l ifffh_File(a2),d1 lea 4(SP),a0 - move.l a0,d2 ; ID und 1 LONG garbage + move.l a0,d2 ; Chunk-ID und 1 LONG garbage moveq.l #8,d3 ; ID und provisorische Länge JSRLIB Write cmp.l d3,d0 ; OK geschrieben ? |