From a851912f3c42b7eb8a1e870bab0045ec0ddd0f64 Mon Sep 17 00:00:00 2001 From: "Christian A. Weber" Date: Fri, 15 May 1992 03:21:49 +0000 Subject: An neue Include-Files angepasst, Schreib-Modus implementiert. --- Source/CloseIFF.S | 105 ++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 83 insertions(+), 22 deletions(-) (limited to 'Source/CloseIFF.S') diff --git a/Source/CloseIFF.S b/Source/CloseIFF.S index b463eaa..3c85bd5 100644 --- a/Source/CloseIFF.S +++ b/Source/CloseIFF.S @@ -1,13 +1,13 @@ ** -** $Id: $ -** $Revision: $ +** $Id: CloseIFF.S,v 1.1 92/05/12 22:26:30 chris Exp $ +** $Revision: 1.1 $ ** ** $Filename: CloseIFF.S $ -** $Author: Christian A. Weber $ +** $Author: chris $ ** $Release: 19.1 $ -** $Date: 92/05/11 21:11:27 $ +** $Date: 92/05/12 22:26:30 $ ** -** iff.library/IFFLib_CloseIFF +** iff.library/IFFL_CloseIFF ** ** COPYRIGHT (C) 1987-1992 BY CHRISTIAN A. WEBER, BRUGGERWEG 2, ** CH-8037 ZUERICH, SWITZERLAND. ALL RIGHTS RESERVED. NO PART @@ -17,7 +17,7 @@ ** - IDNT IFFLib_CloseIFF + IDNT IFFL_CloseIFF SECTION text,CODE INCLUDE "IffLib.i" @@ -26,42 +26,103 @@ XDEF CloseIFFFunc -******* iff.library/IFFLib_CloseIFF ***************************************** +******* iff.library/IFFL_CloseIFF ******************************************* * * NAME -* IFFLib_CloseIFF -- Close an IFF-file and deallocate buffers +* IFFL_CloseIFF -- Close an IFF file and deallocate buffers * * SYNOPSIS -* IFFLib_CloseIFF( ifffile ) -* A1 +* IFFL_CloseIFF( iff ) +* A1 * -* void IFFLib_CloseIFF( IFFFILE ) +* void IFFL_CloseIFF( IFFL_HANDLE ) * * FUNCTION -* Returns the memory previously allocated by OpenIFF(). +* Returns the memory previously allocated by IFFL_OpenIFF(). * * INPUTS -* ifffile - IFF file pointer, from OpenIFF() +* iff - IFF file handle, from IFFL_OpenIFF() * * RESULTS * For now, always results TRUE (this may change in the future). * * SEE ALSO -* IFFLib_OpenIFF() +* IFFL_OpenIFF() * ***************************************************************************** -CloseIFFFunc: movem.l a5-a6,-(SP) - movea.l a6,a5 ; IFFBase für ClearError() +CloseIFFFunc: movem.l d2-d3/a2/a5-a6,-(SP) + movea.l a6,a5 ; IFFBase für ClearError() - move.l a1,d0 ; Ist a1 == NULL ? - beq.s 1$ ; ja ---> don't free anything - move.l -(a1),d0 ; Grösse des reservierten Bereichs - movea.l ib_SysBase(a5),a6 + move.l a1,d0 ; Ist a1 == NULL ? + beq.b .End ; ja ---> don't free anything + + cmpi.l #IFFFH_MAGIC,ifffh_Magic(a1) + beq.b .WriteMode + + *** Read-Modus + + move.l -(a1),d0 ; Grösse des reservierten Bereichs + movea.l iffb_SysBase(a5),a6 + JSRLIB FreeMem ; Bereich freigeben + bra.b .End ; ---> fertig + + *** Write-Modus + +.WriteMode: movea.l a1,a2 ; A2 : IFF-Handle + movea.l iffb_DOSBase(a5),a6 ; A6 : DOSBase + + move.l ifffh_File(a2),d1 + beq.b .FileNotOpen ; File nicht offen ---> + + *** Pad-Word schreiben falls FORM-Länge nicht LONG-aligned ist + + moveq.l #3,d0 ; LONG-Bitmaske + and.l ifffh_FormSize(a2),d0 ; Bits gesetzt ? + beq.b .NoPad ; noe ---> + clr.l -(SP) + move.l SP,d2 + moveq.l #2,d3 ; 1 WORD + JSRLIB Write + add.l d3,ifffh_FormSize(a2) +.NoPad: + + *** An Offset 4 (FORM-Längen-Eintrag) des Files seeken + + move.l ifffh_File(a2),d1 + moveq.l #4,d2 + moveq.l #OFFSET_BEGINNING,d3 + JSRLIB Seek + tst.l d0 + bmi.b .SeekError + + *** FORM-Länge updaten + + move.l ifffh_File(a2),d1 + lea ifffh_FormSize(a2),a0 + move.l a0,d2 + moveq.l #4,d3 + JSRLIB Write +.SeekError: + + *** File schliessen + + move.l ifffh_File(a2),d1 + JSRLIB Close +.FileNotOpen: + + *** IFF-Handle freigeben + + movea.l a2,a1 ; IFF-Handle + moveq.l #ifffh_SIZEOF,d0 ; Grösse + movea.l iffb_SysBase(a5),a6 JSRLIB FreeMem -1$: bsr ClearError ; IFFError zurücksetzen, D0 := 1 - movem.l (SP)+,a5-a6 + *** Routine beenden + +.End: bsr ClearError ; IFFError zurücksetzen, D0 := 1 + + movem.l (SP)+,d2-d3/a2/a5-a6 rts END -- cgit v1.2.3