diff options
author | Christian A. Weber <chris@gna.ch> | 1992-05-15 03:21:49 +0000 |
---|---|---|
committer | Christian A. Weber <chris@gna.ch> | 1992-05-15 03:21:49 +0000 |
commit | a851912f3c42b7eb8a1e870bab0045ec0ddd0f64 (patch) | |
tree | 9cfab60297bb4dab0618cfdbe1d4a39ca722144a /Source/CloseIFF.S | |
parent | e556b972d1ad64453b3372b486191e2a59c91dda (diff) | |
download | iff-library-a851912f3c42b7eb8a1e870bab0045ec0ddd0f64.tar.gz iff-library-a851912f3c42b7eb8a1e870bab0045ec0ddd0f64.tar.bz2 iff-library-a851912f3c42b7eb8a1e870bab0045ec0ddd0f64.zip |
An neue Include-Files angepasst, Schreib-Modus implementiert.
Diffstat (limited to 'Source/CloseIFF.S')
-rw-r--r-- | Source/CloseIFF.S | 105 |
1 files changed, 83 insertions, 22 deletions
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 |