From 352ff7df4e1869743f238de34c975129a97c3d33 Mon Sep 17 00:00:00 2001 From: "Christian A. Weber" Date: Mon, 24 May 1993 15:46:47 +0000 Subject: =?UTF-8?q?FORMs=20k=C3=B6nnen=20jetzt=20verschachtelt=20werden=20?= =?UTF-8?q?bei=20Push/PopChunk()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/PushChunk.S | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) (limited to 'Source/PushChunk.S') 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 ? -- cgit v1.2.3