5153e796c57b — Laurens Holst 5 years ago
GzipArchive/ZlibArchive: Option to exclude CRC32 / Adler32 from compilation.
3 files changed, 50 insertions(+), 0 deletions(-)

M src/COM.asm
M src/GzipArchive.asm
M src/ZlibArchive.asm
M src/COM.asm +2 -0
@@ 5,6 5,8 @@ 
 	INCLUDE "Macros.asm"
 
 DEBUG: equ 1
+GZIP_CRC32: equ 1
+ZLIB_ADLER32: equ 1
 
 	org 100H
 

          
M src/GzipArchive.asm +24 -0
@@ 17,9 17,13 @@ GzipArchive: MACRO
 	inflate:
 		dw 0
 	crc32CheckEnabled:
+		IF GZIP_CRC32
 		db 0
+		ENDIF
 	crc32Checker:
+		IF GZIP_CRC32
 		dw 0
+		ENDIF
 	flags:
 		db 0
 	mtime:

          
@@ 31,7 35,9 @@ GzipArchive: MACRO
 	isize:
 		dd 0
 	crc32:
+		IF GZIP_CRC32
 		dd 0
+		ENDIF
 	_size:
 	ENDM
 

          
@@ 46,7 52,9 @@ GzipArchive_template: GzipArchive
 GzipArchive_Construct:
 	ld (ix + GzipArchive.reader),e
 	ld (ix + GzipArchive.reader + 1),d
+	IF GZIP_CRC32
 	ld (ix + GzipArchive.crc32CheckEnabled),a
+	ENDIF
 	call GzipArchive_ReadHeader
 	ld e,ixl
 	ld d,ixh

          
@@ 131,10 139,12 @@ GzipArchive_ReadHeader:
 GzipArchive_ReadFooter:
 	call GzipArchive_GetReaderIY
 	call Reader_ReadDoubleWord_IY
+	IF GZIP_CRC32
 	ld (ix + GzipArchive.crc32),l
 	ld (ix + GzipArchive.crc32 + 1),h
 	ld (ix + GzipArchive.crc32 + 2),e
 	ld (ix + GzipArchive.crc32 + 3),d
+	ENDIF
 	call Reader_ReadDoubleWord_IY
 	ld (ix + GzipArchive.isize),l
 	ld (ix + GzipArchive.isize + 1),h

          
@@ 145,15 155,19 @@ GzipArchive_ReadFooter:
 ; de = writer (min 32K)
 ; ix = this
 GzipArchive_Extract:
+	IF GZIP_CRC32
 	bit 0,(ix + GzipArchive.crc32CheckEnabled)
 	call nz,GzipArchive_CreateCRC32Checker
+	ENDIF
 	call GzipArchive_CreateInflate
 	call GzipArchive_Inflate
 	call GzipArchive_ReadFooter
 	call GzipArchive_Verify
 	call GzipArchive_DestroyInflate
+	IF GZIP_CRC32
 	bit 0,(ix + GzipArchive.crc32CheckEnabled)
 	call nz,GzipArchive_DestroyCRC32Checker
+	ENDIF
 	ret
 
 ; de = writer (min 32K)

          
@@ 183,6 197,7 @@ GzipArchive_DestroyInflate:
 ; de = writer (min 32K)
 ; ix = this
 GzipArchive_CreateCRC32Checker:
+	IF GZIP_CRC32
 	push de
 	push ix
 	call CRC32Checker_class.New

          
@@ 192,10 207,12 @@ GzipArchive_CreateCRC32Checker:
 	ld (ix + GzipArchive.crc32Checker + 1),d
 	pop de
 	ret
+	ENDIF
 
 ; de = writer (min 32K)
 ; ix = this
 GzipArchive_DestroyCRC32Checker:
+	IF GZIP_CRC32
 	ld e,(ix + GzipArchive.crc32Checker)
 	ld d,(ix + GzipArchive.crc32Checker + 1)
 	push ix

          
@@ 205,6 222,7 @@ GzipArchive_DestroyCRC32Checker:
 	call CRC32Checker_class.Delete
 	pop ix
 	ret
+	ENDIF
 
 ; ix = this
 GzipArchive_Inflate:

          
@@ 220,9 238,11 @@ GzipArchive_Verify:
 	ld hl,GzipArchive_isizeMismatchError
 	jp nz,System_TerminateWithError
 
+	IF GZIP_CRC32
 	call GzipArchive_VerifyCRC32
 	ld hl,GzipArchive_crc32MismatchError
 	jp nz,System_TerminateWithError
+	ENDIF
 	ret
 
 ; ix = this

          
@@ 274,6 294,7 @@ GzipArchive_VerifyISIZE:
 ; ix = this
 ; f <- nz: mismatch
 GzipArchive_VerifyCRC32:
+	IF GZIP_CRC32
 	bit 0,(ix + GzipArchive.crc32CheckEnabled)
 	ret z
 	ld e,(ix + GzipArchive.crc32Checker)

          
@@ 287,6 308,7 @@ GzipArchive_VerifyCRC32:
 	call CRC32Checker_VerifyCRC32
 	pop ix
 	ret
+	ENDIF
 
 ;
 GzipArchive_notGzipError:

          
@@ 302,4 324,6 @@ GzipArchive_isizeMismatchError:
 	db "Inflated size mismatch.",13,10,0
 
 GzipArchive_crc32MismatchError:
+	IF GZIP_CRC32
 	db "Inflated CRC32 mismatch.",13,10,0
+	ENDIF

          
M src/ZlibArchive.asm +24 -0
@@ 10,9 10,13 @@ ZlibArchive: MACRO
 	inflate:
 		dw 0
 	adler32CheckEnabled:
+		IF ZLIB_ADLER32
 		db 0
+		ENDIF
 	adler32Checker:
+		IF ZLIB_ADLER32
 		dw 0
+		ENDIF
 	cm:
 		db 0
 	cinfo:

          
@@ 20,7 24,9 @@ ZlibArchive: MACRO
 	flevel:
 		dd 0
 	adler32:
+		IF ZLIB_ADLER32
 		dd 0
+		ENDIF
 	_size:
 	ENDM
 

          
@@ 35,7 41,9 @@ ZlibArchive_template: ZlibArchive
 ZlibArchive_Construct:
 	ld (ix + ZlibArchive.reader),e
 	ld (ix + ZlibArchive.reader + 1),d
+	IF ZLIB_ADLER32
 	ld (ix + ZlibArchive.adler32CheckEnabled),a
+	ENDIF
 	call ZlibArchive_ReadHeader
 	ld e,ixl
 	ld d,ixh

          
@@ 127,24 135,30 @@ NoAdd:
 ZlibArchive_ReadFooter:
 	call ZlibArchive_GetReaderIY
 	call Reader_ReadDoubleWordBE_IY
+	IF ZLIB_ADLER32
 	ld (ix + ZlibArchive.adler32),l
 	ld (ix + ZlibArchive.adler32 + 1),h
 	ld (ix + ZlibArchive.adler32 + 2),e
 	ld (ix + ZlibArchive.adler32 + 3),d
+	ENDIF
 	ret
 
 ; de = writer (min 32K)
 ; ix = this
 ZlibArchive_Extract:
+	IF ZLIB_ADLER32
 	bit 0,(ix + ZlibArchive.adler32CheckEnabled)
 	call nz,ZlibArchive_CreateAdler32Checker
+	ENDIF
 	call ZlibArchive_CreateInflate
 	call ZlibArchive_Inflate
 	call ZlibArchive_ReadFooter
 	call ZlibArchive_Verify
 	call ZlibArchive_DestroyInflate
+	IF ZLIB_ADLER32
 	bit 0,(ix + ZlibArchive.adler32CheckEnabled)
 	call nz,ZlibArchive_DestroyAdler32Checker
+	ENDIF
 	ret
 
 ; de = writer (min 32K)

          
@@ 174,6 188,7 @@ ZlibArchive_DestroyInflate:
 ; de = writer (min 32K)
 ; ix = this
 ZlibArchive_CreateAdler32Checker:
+	IF ZLIB_ADLER32
 	push de
 	push ix
 	call Adler32Checker_class.New

          
@@ 183,10 198,12 @@ ZlibArchive_CreateAdler32Checker:
 	ld (ix + ZlibArchive.adler32Checker + 1),d
 	pop de
 	ret
+	ENDIF
 
 ; de = writer (min 32K)
 ; ix = this
 ZlibArchive_DestroyAdler32Checker:
+	IF ZLIB_ADLER32
 	ld e,(ix + ZlibArchive.adler32Checker)
 	ld d,(ix + ZlibArchive.adler32Checker + 1)
 	push ix

          
@@ 196,6 213,7 @@ ZlibArchive_DestroyAdler32Checker:
 	call Adler32Checker_class.Delete
 	pop ix
 	ret
+	ENDIF
 
 ; ix = this
 ZlibArchive_Inflate:

          
@@ 207,14 225,17 @@ ZlibArchive_Inflate:
 
 ; ix = this
 ZlibArchive_Verify:
+	IF ZLIB_ADLER32
 	call ZlibArchive_VerifyAdler32
 	ld hl,ZlibArchive_adler32MismatchError
 	jp nz,System_TerminateWithError
+	ENDIF
 	ret
 
 ; ix = this
 ; f <- nz: mismatch
 ZlibArchive_VerifyAdler32:
+	IF ZLIB_ADLER32
 	bit 0,(ix + ZlibArchive.adler32CheckEnabled)
 	ret z
 	ld e,(ix + ZlibArchive.adler32Checker)

          
@@ 228,6 249,7 @@ ZlibArchive_VerifyAdler32:
 	call Adler32Checker_VerifyAdler32
 	pop ix
 	ret
+	ENDIF
 
 ;
 ZlibArchive_invalidFCHECKError:

          
@@ 243,4 265,6 @@ ZlibArchive_unsupportedPresetDictionaryE
 	db "Unsupported preset dictionary.",13,10,0
 
 ZlibArchive_adler32MismatchError:
+	IF ZLIB_ADLER32
 	db "Inflated Adler32 checksum mismatch.",13,10,0
+	ENDIF