@cholok, post #150
@Don_Adan, post #148
******************************************************* ** XFD external decruncher ** ** for Atomik Cruncher 3.4 ** ** adapted by Wanted Team ** ******************************************************* INCDIR "SYS:Programs/ASM-One/Include/" INCLUDE "SYS:Programs/ASM-One/Include/Libraries/xfdmaster.i" ; xfdForeman structure MUST be first thing in all external decrunchers ForeMan moveq #-1,d0 ;security rts dc.l XFDF_ID ;id dc.w 1 ;version dc.w 0 dc.l 0,0 ;private dc.l S_ATM4 ;first slave ************************************************** ; xfdSlave structure: this one doesn't support data scanning S_ATM4 dc.l 0 ;no more slaves dc.w 2 ;version dc.w 39 ;master version dc.l N_ATM4 ;name dc.w XFDPFF_DATA!XFDPFF_RECOGLEN!XFDPFF_USERTARGET dc.w 0 dc.l RB_ATM4 ;recog buffer dc.l DB_ATM4 ;decrunch buffer dc.l 0 ;recog segment dc.l 0 ;decrunch segment dc.w 0,0 dc.l 12+2 dc.b "$VER: ATM4 v2.0 (23 Nov 2002) by Wanted Team",10 dc.b "Special greetings to MCoder.",0 N_ATM4 dc.b "Atomik (ATM4) Cruncher 3.4",0 even ;------------------------------------------------- ; Recog buffer function: receives buffer + length in a0/d0 RB_ATM4 moveq #0,D0 cmp.l #"ATM4",(A0)+ bne.b Exit tst.b (A0) bne.b Exit move.l (A0),xfdrr_MinTargetLen(A1) move.l (A0)+,xfdrr_FinalTargetLen(A1) tst.b (A0) bne.b Exit moveq #12,D1 add.l (A0),D1 move.l D1,xfdrr_MinSourceLen(A1) moveq #1,D0 Exit rts ;------------------------------------------------- ; Decrunch buffer function: receives bufferinfo in a0 ; This style requires xfdmaster.library V39 DB_ATM4 movem.l D2-D7/A2-A6,-(A7) move.l A0,A5 move.l xfdbi_SourceBuffer(A5),A0 move.l xfdbi_UserTargetBuf(A5),A1 bsr.b D_ATM4 moveq #1,D0 movem.l (A7)+,D2-D7/A2-A6 rts ;------------------------------------------------- ; Decruncher for Atomik 3.4 Cruncher data files D_ATM4 lbC0000E0 ; MOVE.L D0,-(SP) ; LEA 4(A0,D0.L),A5 addq.l #4,A0 move.l (A0)+,D0 lea (A1,D0.L),A5 MOVE.L (A0)+,D0 MOVEA.L A0,A6 ADDA.L D0,A6 LINK.W A2,#-$1A ; LEA 0(A5),A5 MOVE.B -(A6),D7 BRA.W lbC0001F4 lbC0000FA MOVE.W D3,D5 lbC0000FC ADD.B D7,D7 lbC0000FE DBCS D5,lbC0000FC BEQ.S lbC000120 BCC.S lbC00010C SUB.W D3,D5 NEG.W D5 BRA.S lbC000130 lbC00010C MOVEQ #3,D6 BSR.S lbC00016E BEQ.S lbC000114 BRA.S lbC00012E lbC000114 MOVEQ #7,D6 BSR.S lbC00016E BEQ.S lbC000126 ADDI.W #15,D5 BRA.S lbC00012E lbC000120 MOVE.B -(A6),D7 ADDX.B D7,D7 BRA.S lbC0000FE lbC000126 MOVEQ #13,D6 BSR.S lbC00016E ADDI.W #$10E,D5 lbC00012E ADD.W D3,D5 lbC000130 LEA lbW00025A(PC),A4 MOVE.W D5,D2 BNE.S lbC000184 ADD.B D7,D7 BNE.S lbC000140 MOVE.B -(A6),D7 ADDX.B D7,D7 lbC000140 BCS.S lbC000146 MOVEQ #1,D6 BRA.S lbC000186 lbC000146 MOVEQ #3,D6 BSR.S lbC00016E TST.B -$1A(A2) BEQ.S lbC000158 MOVE.B -$10(A2,D5.W),-(A5) BRA.W lbC0001EC lbC000158 MOVE.B (A5),D0 BTST #3,D5 BNE.S lbC000162 BRA.S lbC000166 lbC000162 ADDI.B #$F0,D5 lbC000166 SUB.B D5,D0 MOVE.B D0,-(A5) BRA.W lbC0001EC lbC00016E CLR.W D5 lbC000170 ADD.B D7,D7 BEQ.S lbC00017E lbC000174 ADDX.W D5,D5 DBRA D6,lbC000170 TST.W D5 RTS lbC00017E MOVE.B -(A6),D7 ADDX.B D7,D7 BRA.S lbC000174 lbC000184 MOVEQ #2,D6 lbC000186 BSR.S lbC00016E MOVE.W D5,D4 MOVE.B 14(A4,D4.W),D6 EXT.W D6 TST.B -$19(A2) BNE.S lbC00019A ADDQ.W #4,D6 BRA.S lbC0001C8 lbC00019A BSR.S lbC00016E MOVE.W D5,D1 LSL.W #4,D1 MOVEQ #2,D6 BSR.S lbC00016E CMP.B #7,D5 BLT.S lbC0001C0 MOVEQ #0,D6 BSR.S lbC00016E BEQ.S lbC0001BA MOVEQ #2,D6 BSR.S lbC00016E ADD.W D5,D5 OR.W D1,D5 BRA.S lbC0001CA lbC0001BA OR.B -$18(A2),D1 BRA.S lbC0001C4 lbC0001C0 OR.B -$17(A2,D5.W),D1 lbC0001C4 MOVE.W D1,D5 BRA.S lbC0001CA lbC0001C8 BSR.S lbC00016E lbC0001CA ADD.W D4,D4 BEQ.S lbC0001D2 ADD.W -2(A4,D4.W),D5 lbC0001D2 LEA 1(A5,D5.W),A4 MOVE.B -(A4),-(A5) lbC0001D8 MOVE.B -(A4),-(A5) DBRA D2,lbC0001D8 BRA.S lbC0001EC lbC0001E0 ADD.B D7,D7 BNE.S lbC0001E8 MOVE.B -(A6),D7 ADDX.B D7,D7 lbC0001E8 BCS.S lbC000250 MOVE.B -(A6),-(A5) lbC0001EC CMPA.L A5,A3 BNE.S lbC0001E0 CMPA.L A6,A0 BEQ.S lbC000254 lbC0001F4 MOVEQ #0,D6 BSR.W lbC00016E BEQ.S lbC00021C MOVE.B -(A6),D0 LEA -$18(A2),A1 MOVE.B D0,(A1)+ MOVEQ #1,D1 MOVEQ #6,D2 lbC000208 CMP.B D0,D1 BNE.S lbC00020E ADDQ.W #2,D1 lbC00020E MOVE.B D1,(A1)+ ADDQ.W #2,D1 DBRA D2,lbC000208 ST -$19(A2) BRA.S lbC000220 lbC00021C SF -$19(A2) lbC000220 MOVEQ #0,D6 BSR.W lbC00016E BEQ.S lbC00023A LEA -$10(A2),A1 MOVEQ #15,D0 lbC00022E MOVE.B -(A6),(A1)+ DBRA D0,lbC00022E ST -$1A(A2) BRA.S lbC00023E lbC00023A SF -$1A(A2) lbC00023E CLR.W D3 MOVE.B -(A6),D3 MOVE.B -(A6),-(SP) MOVE.B -(A6),-(SP) MOVE.W (SP)+,D0 MOVE.B (SP)+,D0 MOVEA.L A5,A3 SUBA.W D0,A3 BRA.S lbC0001E0 lbC000250 BRA.W lbC0000FA lbC000254 UNLK A2 ; MOVE.L (SP)+,D6 RTS lbW00025A dc.w $20 dc.w $60 dc.w $160 dc.w $360 dc.w $760 dc.w $F60 dc.w $1F60 dc.w 1 dc.w $304 dc.w $506 dc.w $708
; ------------------------------------------
; PackFire 1.2k - (large depacker)
; ------------------------------------------
; ------------------------------------------
; Constants
KTOPVALUE = 16777216
KBITMODELTOTAL = 2048
KNUMMOVEBITS = 5
KNUMPOSBITSMAX = 4
KLENNUMLOWBITS = 3
KLENNUMMIDBITS = 3
KLENNUMLOWSYMBOLS = 8
KLENNUMMIDSYMBOLS = 8
KLENNUMHIGHBITS = 8
LENCHOICE2 = 1
LENLOW = 2
LENMID = 130
LENHIGH = 258
KNUMLITSTATES = 7
KSTARTPOSMODELINDEX = 4
KENDPOSMODELINDEX = 14
KNUMPOSSLOTBITS = 6
KNUMLENTOPOSSTATES = 4
KNUMALIGNBITS = 4
KMATCHMINLEN = 2
ISREP = 192
ISREPG0 = 204
ISREPG1 = 216
ISREPG2 = 228
ISREP0LONG = 240
POSSLOT = 432
SPECPOS = 688
ALIGN = 802
LENCODER = 818
REPLENCODER = 1332
LITERAL = 1846
; ------------------------------------------
; packed data in a0
; dest in a1
; probs buffer in a2 (must be 15980 bytes)
start: lea var(pc),a5
movem.l (a0)+,d0/d5
move.l d0,d2
lea (a2),a6
lea (a1),a3
clear_dest: sf.b (a3)+
subq.l #1,d0
bge.b clear_dest
move.w #7990-1,d7
fill_probs: move.w #KBITMODELTOTAL>>1,(a2)+
dbf d7,fill_probs
lea (a1),a4
moveq #0,d3
moveq #0,d4
moveq #0,d6
moveq #-1,d7
move.l d7,(a5)+
neg.l d7
move.l d7,(a5)+
move.l d7,(a5)+
move.l d7,(a5)
lea -12(a5),a5
move.l d6,a2
depack_loop: move.l d2,-(a7)
lea (a6),a1
move.l d4,d0
lsl.l #KNUMPOSBITSMAX,d0
bsr.w Check_Fix_Range2
bne.b fix_range1
lea (LITERAL*2)(a6),a3
moveq #1,d3
cmp.w #KNUMLITSTATES,d4
bmi.b max_lit_state_2
move.l a2,d0
sub.l d7,d0
moveq #0,d1
move.b (a4,d0.l),d1
max_lit_loop1: add.l d1,d1
move.l d1,d2
and.l #$100,d2
move.l d2,d0
add.w #$100,d0
add.w d0,d0
lea (a3,d0.l),a1
bsr.w Check_Code_Bound
bne.b Check_Code_Bound_1
tst.l d2
bne.b max_lit_state_2
bra.b No_Check_Code_Bound_1
Check_Code_Bound_1: tst.l d2
beq.b max_lit_state_2
No_Check_Code_Bound_1: cmp.w #$100,d3
bmi.b max_lit_loop1
max_lit_state_2: cmp.w #$100,d3
bhs.b max_lit_state_exit
bsr.w Check_Code_Bound2
bra.b max_lit_state_2
table_state: dc.b 0,0,0,0
dc.b 4-3,5-3,6-3,7-3,8-3,9-3
dc.b 10-6,11-6
max_lit_state_exit: move.b d3,d0
bsr.w store_prev_byte2
move.b table_state(pc,d4.w),d4
bra.w cont
fix_range1: lea (ISREP*2)(a6),a1
bsr.w Check_Fix_Range3
bne.b Check_Fix_Range_2
move.l rep2-var(a5),rep3-var(a5)
move.l rep1-var(a5),rep2-var(a5)
move.l d7,rep1-var(a5)
move.l d4,d0
moveq #0,d4
cmp.w #KNUMLITSTATES,d0
bmi.b change_state_3
moveq #3,d4
change_state_3: lea (LENCODER*2)(a6),a1
bra.b Check_Fix_Range_3
Check_Fix_Range_2: lea (ISREPG0*2)(a6),a1
bsr.w Check_Fix_Range3
bne.b Check_Fix_Range_4
lea (ISREP0LONG*2)(a6),a1
move.l d4,d0
lsl.l #KNUMPOSBITSMAX,d0
bsr.w Check_Fix_Range2
bne.b Check_Fix_Range_5
move.l d4,d0
moveq #9,d4
cmp.w #KNUMLITSTATES,d0
bmi.b change_state_4
moveq #11,d4
change_state_4: bsr.w store_prev_byte
bra.w cont
Check_Fix_Range_4: lea (ISREPG1*2)(a6),a1
bsr.w Check_Fix_Range3
bne.b Check_Fix_Range_6b
move.l rep1-var(a5),d1
bra.b Check_Fix_Range_7
Check_Fix_Range_6b: lea (ISREPG2*2)(a6),a1
bsr.w Check_Fix_Range3
bne.b Check_Fix_Range_8
move.l rep2-var(a5),d1
bra.b Check_Fix_Range_9
Check_Fix_Range_8: move.l rep3-var(a5),d1
move.l rep2-var(a5),rep3-var(a5)
Check_Fix_Range_9: move.l rep1-var(a5),rep2-var(a5)
Check_Fix_Range_7: move.l d7,rep1-var(a5)
move.l d1,d7
Check_Fix_Range_5: move.l d4,d0
moveq #8,d4
cmp.w #KNUMLITSTATES,d0
bmi.b change_state_5
moveq #11,d4
change_state_5: lea (REPLENCODER*2)(a6),a1
Check_Fix_Range_3: lea (a1),a3
bsr.w Check_Fix_Range
bne.b Check_Fix_Range_10
lea (LENLOW*2)+(KLENNUMLOWBITS*2)(a3),a3
moveq #0,d3
moveq #KLENNUMLOWBITS,d1
bra.b Check_Fix_Range_11
Check_Fix_Range_10: lea (LENCHOICE2*2)(a3),a1
bsr.w Check_Fix_Range
bne.b Check_Fix_Range_12
lea (LENMID*2)+(KLENNUMMIDBITS*2)(a3),a3
moveq #KLENNUMLOWSYMBOLS,d3
moveq #KLENNUMMIDBITS,d1
bra.b Check_Fix_Range_11
Check_Fix_Range_12: lea (LENHIGH*2)(a3),a3
moveq #KLENNUMLOWSYMBOLS+KLENNUMMIDSYMBOLS,d3
moveq #KLENNUMHIGHBITS,d1
Check_Fix_Range_11: move.l d1,d2
moveq #1,d6
Check_Code_Bound_Loop: exg.l d6,d3
bsr.w Check_Code_Bound2
exg.l d6,d3
subq.l #1,d2
bne.b Check_Code_Bound_Loop
moveq #1,d0
lsl.l d1,d0
sub.l d0,d6
add.l d3,d6
cmp.w #4,d4
bhs.w change_state_6
addq.w #KNUMLITSTATES,d4
move.l d6,d0
cmp.w #KNUMLENTOPOSSTATES,d0
bmi.b check_len
moveq #KNUMLENTOPOSSTATES-1,d0
check_len: lea (POSSLOT*2)(a6),a3
lsl.l #KNUMPOSSLOTBITS+1,d0
add.l d0,a3
moveq #KNUMPOSSLOTBITS,d2
moveq #1,d3
Check_Code_Bound_Loop2: bsr.w Check_Code_Bound2
subq.l #1,d2
bne.b Check_Code_Bound_Loop2
sub.w #(1<<KNUMPOSSLOTBITS),d3
cmp.w #KSTARTPOSMODELINDEX,d3
bmi.b Check_PosSlot_1
move.l d3,d1
lsr.l #1,d1
subq.l #1,d1
move.l d3,d0
moveq #1,d7
and.l d7,d0
addq.l #2,d0
move.l d0,d7
cmp.w #KENDPOSMODELINDEX,d3
bhs.b Check_PosSlot_3
lsl.l d1,d0
move.l d0,d7
lea (SPECPOS*2)(a6),a3
sub.l d3,d0
subq.l #1,d0
add.l d0,d0
add.l d0,a3
bra.b Check_PosSlot_4
Check_PosSlot_3: subq.l #KNUMALIGNBITS,d1
Shift_Range_Loop: move.l (a5),d0
lsr.l #1,d0
add.l d7,d7
move.l d0,(a5)
cmp.l d5,d0
bhi.b Check_Code
sub.l d0,d5
addq.l #1,d7
Check_Code: bsr.b Get_Code
subq.l #1,d1
bne.b Shift_Range_Loop
lea (ALIGN*2)(a6),a3
lsl.l #KNUMALIGNBITS,d7
moveq #KNUMALIGNBITS,d1
Check_PosSlot_4: moveq #1,d2
moveq #1,d3
Check_Code_Bound_Loop3: bsr.b Check_Code_Bound2
beq.b Check_Code_Bound_2
or.l d2,d7
Check_Code_Bound_2: add.l d2,d2
subq.l #1,d1
bne.b Check_Code_Bound_Loop3
bra.b Check_PosSlot_2
Check_PosSlot_1: move.l d3,d7
Check_PosSlot_2: addq.l #1,d7
change_state_6: addq.l #KMATCHMINLEN,d6
Copy_Rem_Bytes: bsr.b store_prev_byte
subq.l #1,d6
bne.b Copy_Rem_Bytes
cont: move.l (a7)+,d2
cmp.l d2,a2
bmi.w depack_loop
rts
store_prev_byte: move.l a2,d0
sub.l d7,d0
move.b (a4,d0.l),d0
store_prev_byte2: move.b d0,(a4,a2.l)
addq.l #1,a2
rts
Check_Fix_Range3: move.l d4,d0
Check_Fix_Range2: add.l d0,d0
add.l d0,a1
Check_Fix_Range: move.l (a5),d0
lsr.l #8,d0
lsr.l #3,d0
move.l d1,-(a7)
move.l d0,d1
swap d1
mulu.w (a1),d0
mulu.w (a1),d1
swap d1
add.l d1,d0
move.l (a7)+,d1
cmp.l d5,d0
bls.b Range_Lower
move.l d0,(a5)
move.w #KBITMODELTOTAL,d0
sub.w (a1),d0
lsr.w #KNUMMOVEBITS,d0
add.w d0,(a1)
Get_Code: move.l (a5),d0
cmp.l #KTOPVALUE,d0
bhs.b top_range
lsl.l #8,d0
move.l d0,(a5)
lsl.l #8,d5
move.b (a0)+,d5
top_range: moveq #0,d0
rts
Check_Code_Bound2: lea (a3),a1
Check_Code_Bound: add.l d3,d3
lea (a1,d3.l),a1
bsr.b Check_Fix_Range
beq.b Lower_Bound
addq.l #1,d3
Lower_Bound: rts
Range_Lower: sub.l d0,(a5)
sub.l d0,d5
move.w (a1),d0
lsr.w #KNUMMOVEBITS,d0
sub.w d0,(a1)
bsr.b Get_Code
moveq #1,d0
rts
var:
range: dc.l -1
rep3: dc.l 1
rep2: dc.l 1
rep1: dc.l 1; ------------------------------------------
; PackFire 1.2k - (tiny depacker)
; ------------------------------------------
; ------------------------------------------
; packed data in a0
; dest in a1
start: lea 26(a0),a2
move.b (a2)+,d7
lit_copy: move.b (a2)+,(a1)+
main_loop: bsr.b get_bit
bcs.b lit_copy
moveq #-1,d3
get_index: addq.l #1,d3
bsr.b get_bit
bcc.b get_index
cmp.w #$10,d3
beq.b depack_stop
bsr.b get_pair
move.w d3,d6 ; save it for the copy
cmp.w #2,d3
ble.b out_of_range
moveq #0,d3
out_of_range: moveq #0,d0
move.b table_len(pc,d3.w),d1
move.b table_dist(pc,d3.w),d0
bsr.b get_bits
bsr.b get_pair
move.l a1,a3
sub.l d3,a3
copy_bytes: move.b (a3)+,(a1)+
subq.w #1,d6
bne.b copy_bytes
bra.b main_loop
table_len: dc.b $04,$02,$04
table_dist: dc.b $10,$30,$20
get_pair: sub.l a6,a6
moveq #$f,d2
calc_len_dist: move.w a6,d0
and.w d2,d0
bne.b node
moveq #1,d5
node: move.w a6,d4
lsr.w #1,d4
move.b (a0,d4.w),d1
moveq #1,d4
and.w d4,d0
beq.b nibble
lsr.b #4,d1
nibble: move.w d5,d0
and.w d2,d1
lsl.l d1,d4
add.l d4,d5
addq.w #1,a6
dbf d3,calc_len_dist
get_bits: moveq #0,d3
getting_bits: subq.b #1,d1
bhs.b cont_get_bit
add.w d0,d3
depack_stop: rts
cont_get_bit: bsr.b get_bit
addx.l d3,d3
bra.b getting_bits
get_bit: add.b d7,d7
bne.b byte_done
move.b (a2)+,d7
addx.b d7,d7
byte_done: rts@Don_Adan, post #151
Poczytaj sobie, PackFire LZMA (w wersji packer) vs lha (archiwizer). 2.37MB vs 8.25MB.
LZX jest slabszy niz ARJ mode 7.
Takich testow nie robi sie tylko na 1 pliku, ale na calej grupie plikow
41˙015˙429 org 17˙244˙589 packfire 20˙062˙422 lzx (-9) 20˙408˙259 arj (m7) 20˙875˙955 lha (lh7) 20˙940˙447 zip (-9) 21˙720˙812 lha (lh5)
@tukinem, post #152
*******************************************************
** XFD external decruncher **
** for PackFire (LZMA MODE) **
** adapted by Wanted Team **
*******************************************************
INCDIR "SYS:Programs/ASM-One/Include/"
INCLUDE "Libraries/xfdmaster.i"
; xfdForeman structure MUST be first thing in all external decrunchers
ForeMan
moveq #-1,d0 ;security
rts
dc.l XFDF_ID ;id
dc.w 1 ;version
dc.w 0
dc.l 0,0 ;private
dc.l S_TUKI ;first slave
**************************************************
; xfdSlave structure: this one doesn't support data scanning
S_TUKI
dc.l 0 ;no more slaves
dc.w 2 ;version
dc.w 39 ;master version
dc.l N_TUKI ;name
dc.w XFDPFF_DATA!XFDPFF_RECOGLEN!XFDPFF_USERTARGET
dc.w 0
dc.l RB_TUKI ;recog buffer
dc.l DB_TUKI ;decrunch buffer
dc.l 0 ;recog segment
dc.l 0 ;decrunch segment
dc.w 0,0
dc.l 12+2
dc.b "$VER: TUKI v2.0 (8 Jan 2025) by Wanted Team",0
N_TUKI dc.b "PackFire 1.2k (LZMA mode)",0
even
;-------------------------------------------------
; Recog buffer function: receives buffer + length in a0/d0
RB_TUKI
moveq #0,D0
cmp.l #"TUKI",(A0)+
bne.b Exit
tst.b (A0)
bne.b Exit
moveq #8,D1
add.l (A0)+,D1
move.l D1,xfdrr_MinSourceLen(A1)
tst.b (A0)
bne.b Exit
move.l (A0),D1
move.l D1,xfdrr_FinalTargetLen(A1)
add.l #15980,D1
move.l D1,xfdrr_MinTargetLen(A1)
moveq #1,D0
Exit
rts
;-------------------------------------------------
; Decrunch buffer function: receives bufferinfo in a0
; This style requires xfdmaster.library V39
DB_TUKI
movem.l D2-D7/A2-A6,-(A7)
move.l A0,A5
move.l xfdbi_SourceBuffer(A5),A0
move.l xfdbi_UserTargetBuf(A5),A1
bsr.b D_TUKI
moveq #1,D0
movem.l (A7)+,D2-D7/A2-A6
rts
;-------------------------------------------------
; Decruncher for TUKI data files
D_TUKI
addq.l #8,A0 ; skip added header bytes
move.l (A0),D0 ; depacked size
addq.l #1,D0
bclr #0,D0 ; even length
lea (A1,D0.L), A2 ; probs buffer
; place for
; ------------------------------------------
; PackFire 1.2k - (large depacker)
; ------------------------------------------ @cholok, post #153
@Don_Adan, post #156

@tukinem, post #159
@tukinem, post #159
@Don_Adan, post #161
@Don_Adan, post #163

@tukinem, post #164
@Don_Adan, post #165
Cos do BB2 i xfdmaster.library jest na Aminecie
@Don_Adan, post #167
@tukinem, post #168
@tukinem, post #168
@cholok, post #171
41˙015˙429 org 17˙244˙589 packfire 20˙062˙422 lzx (-9) 20˙408˙259 arj (m7) 20˙875˙955 lha (lh7) 20˙940˙447 zip (-9) 21˙045˙560 zx0 (salvador) 21˙720˙812 lha (lh5)
@cholok, post #173
@cholok, post #172
W LZX użyłeś parametru -9 (max compression)?
lzx -r -e -9 a ...
lzx -r -e-9 a ...