summaryrefslogtreecommitdiff
path: root/Source/CloseIFF.S
diff options
context:
space:
mode:
authorChristian A. Weber <chris@gna.ch>1992-05-15 03:21:49 +0000
committerChristian A. Weber <chris@gna.ch>1992-05-15 03:21:49 +0000
commita851912f3c42b7eb8a1e870bab0045ec0ddd0f64 (patch)
tree9cfab60297bb4dab0618cfdbe1d4a39ca722144a /Source/CloseIFF.S
parente556b972d1ad64453b3372b486191e2a59c91dda (diff)
downloadiff-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.S105
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