diff options
-rw-r--r-- | Source/IFFLib.S | 109 |
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 ***************************************************************************** |