summaryrefslogtreecommitdiff
path: root/Source/IFFLib.S
diff options
context:
space:
mode:
Diffstat (limited to 'Source/IFFLib.S')
-rw-r--r--Source/IFFLib.S109
1 files changed, 67 insertions, 42 deletions
diff --git a/Source/IFFLib.S b/Source/IFFLib.S
index 3ce284c..ae32a17 100644
--- a/Source/IFFLib.S
+++ b/Source/IFFLib.S
@@ -1,11 +1,11 @@
**
-** $Id: IFFLib.S,v 1.1 92/05/12 22:26:51 chris Exp $
-** $Revision: 1.1 $
+** $Id: IFFLib.S,v 21.1 92/05/15 03:22:54 chris Exp $
+** $Revision: 21.1 $
**
** $Filename: IFFLib.S $
** $Author: chris $
** $Release: 19.1 $
-** $Date: 92/05/12 22:26:51 $
+** $Date: 92/05/15 03:22:54 $
**
** Disk-resident library for simple IFF file I/O. Does not handle
** nested PROPs and CATs. Contains special ILBM support routines.
@@ -75,21 +75,27 @@
IFD PP_VERSION
XREF PPOpenIFFFunc
ENDC
+ XREF OpenIFFFunc
+ XREF PushChunkFunc
+ XREF PopChunkFunc
+ XREF WriteChunkBytesFunc
+ XREF CompressBlockFunc
+ XREF DecompressBlockFunc
IFD PP_VERSION
VERSION: EQU 100 ; D0 bei OpenLibrary
REVISION: EQU 3 ; jedesmal um 1 erhöhen
- ELSEIF
-VERSION: EQU 19 ; D0 bei OpenLibrary
-REVISION: EQU 1 ; jedesmal um 1 erhöhen
+ ELSE
+VERSION: EQU 21 ; D0 bei OpenLibrary
+REVISION: EQU 2 ; jedesmal um 1 erhöhen
ENDC
-
-*************** C O D E *****************************************************
+*****************************************************************************
+** Diese Routine wird aufgerufen wenn man iff.library als Programm startet
FirstByte:
- bra.s 1$
+ bra.b 1$
dc.b "CHW!"
1$:
*** wird aufgerufen, wenn mann die Library vom CLI aus startet
@@ -104,7 +110,7 @@ FirstByte:
move.l a0,d2
IFD PP_VERSION
moveq.l #67,d3 ; Länge des ID-Strings
- ELSEIF
+ ELSE
moveq.l #42,d3 ; Länge des ID-Strings
ENDC
JSRLIB Write
@@ -115,6 +121,7 @@ FirstByte:
rts
*****************************************************************************
+** So, nun das eigentliche Library-Zeug...
MyROMTag: DC.W RTC_MATCHWORD
DC.L MyROMTag ; RT_MATCHTAG
@@ -129,10 +136,10 @@ MyROMTag: DC.W RTC_MATCHWORD
IFD PP_VERSION
MyLibName: DC.B "iffpp.library",0
-MyLibInfo: DC.B "IFFPP 101.1 (14.05.92) Copyright © 1990-1992 by Christian A. Weber",10,0
- ELSEIF
+MyLibInfo: DC.B "IFFPP 101.1 (16.05.92) Copyright © 1990-1992 by Christian A. Weber",10,0
+ ELSE
MyLibName: DC.B "iff.library",0
-MyLibInfo: DC.B "IFF 19.1 (14.05.92) by Christian A. Weber",10,0
+MyLibInfo: DC.B "IFF 21.2 (16.05.92) by Christian A. Weber",10,0
ENDC
DOSName: DC.B "dos.library",0
@@ -144,34 +151,46 @@ Init: DC.L iffb_SIZEOF ; data space size
DC.L InitRoutine ; Initialisierungs-Routine
-FuncTable: ;; DC.W -1 ; Switch to WORD-Offset-Mode
+FuncTable: DC.W -1 ; Switch to WORD-Offset-Mode
*** Die 4 Standard Library Routinen:
- DC.L OpenFunc ; Offset -6
- DC.L CloseFunc ; Offset -12
- DC.L ExpungeFunc ; Offset -18
- DC.L ExtFunc ; Offset -24
+ DC.W OpenFunc-FuncTable ; Offset -6
+ DC.W CloseFunc-FuncTable ; Offset -12
+ DC.W ExpungeFunc-FuncTable ; Offset -18
+ DC.W ExtFunc-FuncTable ; Offset -24
*** Jetzt unsere IFF-Routinen:
- DC.L OldOpenIFFFunc ; Offset -30
- DC.L CloseIFFFunc ; Offset -36
- DC.L FindChunkFunc ; Offset -42
- DC.L GetBMHDFunc ; Offset -48
- DC.L GetColorTabFunc ; Offset -54
- DC.L DecodePicFunc ; Offset -60
- DC.L SaveBitMapFunc ; Offset -66
- DC.L SaveClipFunc ; Offset -72
- DC.L IFFErrorFunc ; Offset -78
- DC.L GetViewModesFunc ; Offset -84
- DC.L OldNewOpenIFFFunc ; Offset -90
- DC.L ModifyFrameFunc ; Offset -96
+ DC.W OldOpenIFFFunc-FuncTable ; Offset -30
+ DC.W CloseIFFFunc-FuncTable ; Offset -36
+ DC.W FindChunkFunc-FuncTable ; Offset -42
+ DC.W GetBMHDFunc-FuncTable ; Offset -48
+ DC.W GetColorTabFunc-FuncTable ; Offset -54
+ DC.W DecodePicFunc-FuncTable ; Offset -60
+ DC.W SaveBitMapFunc-FuncTable ; Offset -66
+ DC.W SaveClipFunc-FuncTable ; Offset -72
+ DC.W IFFErrorFunc-FuncTable ; Offset -78
+ DC.W GetViewModesFunc-FuncTable ; Offset -84
+ DC.W OldNewOpenIFFFunc-FuncTable ; Offset -90
+ DC.W ModifyFrameFunc-FuncTable ; Offset -96
IFD PP_VERSION
- DC.L PPOpenIFFFunc ; Offset -102
+ DC.W PPOpenIFFFunc-FuncTable ; Offset -102
+ ELSE
+ DC.W ExtFunc-FuncTable ; Offset -102
ENDC
+ DC.W ExtFunc-FuncTable ; Offset -108
+ DC.W ExtFunc-FuncTable ; Offset -114
- DC.L -1 ; End-Markierung
+ * V21-Routinen
+ DC.W OpenIFFFunc-FuncTable ; Offset -120
+ DC.W PushChunkFunc-FuncTable ; Offset -126
+ DC.W PopChunkFunc-FuncTable ; Offset -132
+ DC.W WriteChunkBytesFunc-FuncTable ; Offset -138
+ DC.W CompressBlockFunc-FuncTable ; Offset -144
+ DC.W DecompressBlockFunc-FuncTable ; Offset -150
+
+ DC.W -1 ; End-Markierung
*** Daten zur Initialisierung der Library-Struktur
@@ -219,7 +238,7 @@ OpenFunc: movem.l d1/a0-a2/a5-a6,-(SP)
*** Testen ob schon ein Node für uns vorhanden ist
bsr FindOurNode ; Set Z bit if not found
- bne.s .OpenError ; Schon vorhanden ---> Error
+ bne.b .OpenError ; Schon vorhanden ---> Error
*** Speicher für neuen Error-Node reservieren
@@ -228,7 +247,7 @@ OpenFunc: movem.l d1/a0-a2/a5-a6,-(SP)
movea.l iffb_SysBase(a5),a6
JSRLIB AllocMem
tst.l d0
- beq.s .OpenError ; Error ---> 0 zurückgeben
+ beq.b .OpenError ; Error ---> 0 zurückgeben
movea.l d0,a2 ; A2 :  ErrorNode
*** Error-Node initialisieren: Task eintragen
@@ -251,7 +270,7 @@ OpenFunc: movem.l d1/a0-a2/a5-a6,-(SP)
rts ; Library ist jetzt offen
.OpenError: moveq.l #0,d0 ; ERROR!
- bra.s 99$
+ bra.b 99$
*****************************************************************************
@@ -263,7 +282,7 @@ CloseFunc: movem.l a2/a5-a6,-(SP)
*** Error-Node suchen und entfernen
bsr FindOurNode ; our error-node nach D0 & A0
- beq.s 1$ ; nicht gefunden --->
+ beq.b 1$ ; nicht gefunden --->
movea.l d0,a2 ; ErrorNode retten
movea.l d0,a1
movea.l iffb_SysBase(a5),a6
@@ -278,11 +297,11 @@ CloseFunc: movem.l a2/a5-a6,-(SP)
moveq.l #0,d0 ; return-code
subq.w #1,LIB_OPENCNT(a6)
- bne.s 2$ ; jemand hat sie noch offen
+ bne.b 2$ ; jemand hat sie noch offen
btst.b #LIBB_DELEXP,LIB_FLAGS(a6) ; haben wir delayed Expunge?
- beq.s 2$ ; neenee --->
- bsr.s ExpungeFunc ; sonst Expunge
+ beq.b 2$ ; neenee --->
+ bsr.b ExpungeFunc ; sonst Expunge
2$:
rts ; Library ist jetzt zu
@@ -294,10 +313,10 @@ ExpungeFunc: movem.l d2/a5-a6,-(SP)
movea.l a6,a5 ; IFFBase
tst.w LIB_OPENCNT(a5) ; sind wir noch offen?
- beq.s 1$ ; nein
+ beq.b 1$ ; nein
bset.b #LIBB_DELEXP,LIB_FLAGS(a5)
moveq.l #0,d0 ; return-code
- bra.s 99$
+ bra.b 99$
1$:
movea.l a5,a1 ; LibPtr (zeigt auf NODE)
movea.l iffb_SysBase(a5),a6
@@ -316,8 +335,14 @@ ExpungeFunc: movem.l d2/a5-a6,-(SP)
move.l d2,d0 ; return-code: Segmentliste
99$: movem.l (SP)+,d2/a5-a6
+ rts
-ExtFunc: rts ; wird aufgerufen bei Offset -24
+*****************************************************************************
+
+ *** Wird aufgerufen bei Offset -24 und freien Slots
+
+ExtFunc: moveq.l #0,d0
+ rts
*****************************************************************************