summaryrefslogtreecommitdiff
path: root/Source/PushChunk.S
diff options
context:
space:
mode:
authorChristian A. Weber <chris@gna.ch>1993-05-24 15:46:47 +0000
committerChristian A. Weber <chris@gna.ch>1993-05-24 15:46:47 +0000
commit352ff7df4e1869743f238de34c975129a97c3d33 (patch)
tree5ec9c1c07e0257f55f5b3c26b94b78f92994edd1 /Source/PushChunk.S
parent937e75f81313bfaa7d3442275f0cd6873a07d10f (diff)
downloadiff-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.S34
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 ?