home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of A1200
/
World_Of_A1200.iso
/
programs
/
compress
/
filearchivers
/
lhsfx
/
source.lha
/
LhSFX
/
source
/
LHsfxV15a.s
next >
Wrap
Text File
|
1991-06-01
|
58KB
|
2,952 lines
;--------------------------------------------------------------------
;
; Proggy: LHSFX
;
;
; Version: V1.5a
;
; Date: 14/11/92
;
;
; Author: Mike Kennedy and Ralf Thanner
;
; Assembler: ASM-ONE (old syntax)
;
;--------------------------------------------------------------------
;
; This source is not well optimized and may still include some
; bugs and should therefore not be seen as an example of good
; programming. The only thing I did was adding some stuff and
; removing bugs. The decrunch header is still awfull and some
; other parts of the code too, but I'm really too lazy because
; there are other and better SFX (like LHAsfx) around.
;
; So do what you want with this piece but don't blame ME for
; this code!-)
;
; Be carefull when you assemble it with an assembler like DEVPAC
; with optimisation, coz the decrunch header includes lots of bad
; code but has a hard-coded reloc table at the end. This makes it
; a little bit complicated, and gives you only the choice either
; to rewrite the complete header or not to touch this area:-((
; Look at 'SFX header' for a short overview.
;
;--------------------------------------------------------------------
; ****** History ******
;--------------------------------------------------------------------
;
; V1.2 28/05/91 [INTERNAL]
;
; - removed Mikes bugs (LHSfx crashed sometimes; not all mem freed)
;
; - added filerequester of req.library!
; (if you don't have the req.lib you must type the name.-(
;
; - removed screen color cycle during crunch.
;
; - tried to improve the code a little bit!
; ( fixed bugs, added file req., made it more multitasking
; friendly and the code is still shorter! )
;
; - changed: DESTINATION > ram:testfile
; to ARCHIVE NAME > ram:testfile
;
;
; - changed: 'Press Left Mouse Button'
; to 'Press RIGHT Mouse Button' for DMOUSE user!
;
----------------------------------------------------------------------
;
; V1.3 14/06/91 [INTERNAL]
;
; - the filerequester is now also used for 'ARCHIV NAME' and
; 'EXTRACT PATH'.
;
; - short instructions at the beginning ( only with req.lib. ).
;
; - '.SFX' will be added automagically to archiv name.
;
; - added led-cycling during crunch. ( is he still crunching?? )
; ( In a multitasking system i prefer something more subtil than
; a flashing screen. )
;
; - added requester for '[F]ile' or '[D]isplay' choice.
;
; - 'CON' and 'ANSI' part thrown out.
; ( filelenght reduced from 18kb to 9kb! )
;
;---------------------------------------------------------------------
;
; V1.4 22/10/91 [INTERNAL]
;
; - added requester for 'Overwrite [Y]es / [N]o' decision.
;
; - removed some of my own bugs and some of Mike.
;
; - the 'EXTRACT PATH' has only to be declared once.
;
;---------------------------------------------------------------------
;
; V1.5 03/11/92 Public release
;
; - rewrote part of the code and removed bugs.
;
; - changed TASKPRI during crunch from '0' to '+8'.
;
; - handles now different 'source file dirs' correct (V1.5a).
;
;=====================================================================
; ********** Allgemeine Konstanten ***********
;=====================================================================
; a6 = $dff000 (oder execbase)
; a5 = pointer auf globales Variablenfeld (VAR)
;--------------------------------------------------------------------
disable EQU -120 ; Exec.library
enable EQU -126
forbid EQU -132
permit EQU -138
allocmem EQU -198
freemem EQU -210
availmem EQU -216
findname EQU -276
addtask EQU -282
findtask EQU -294
settaskpri EQU -300
allocsignal EQU -330
freesignal EQU -336
addport EQU -354
RemPort EQU -360
putmsg EQU -366
getmsg EQU -372
replymsg EQU -378
waitport EQU -384
findport EQU -390
closelib EQU -414
OpenDevice EQU -444
CloseDevice EQU -450
doio EQU -456
openresource EQU -498
openlib EQU -552
Center EQU -$1e ; Req-Library
SetSize EQU -$24
SetLocation EQU -$2a
ReadLocation EQU -$30
Format EQU -$36
FakeFunction1 EQU -$3c
FakeFunction2 EQU -$42
FakeFunction3 EQU -$48
FakeFunction4 EQU -$4e
FileRequester EQU -$54
ColorRequester EQU -$5a
DrawBox EQU -$60
MakeButton EQU -$66
MakeScrollBar EQU -$6c
PurgeFiles EQU -$72
GetFontHeightAndWidth EQU -$78
MakeGadget EQU -$7e
MakeString EQU -$84
MakeProp EQU -$8a
LinkGadget EQU -$90
LinkStringGadget EQU -$96
LinkPropGadget EQU -$9c
GetString EQU -$a2
RealTimeScroll EQU -$a8
TextRequest EQU -$ae
GetLong EQU -$b4
RawKeyToAscii EQU -$ba
ExtendedColorRequester EQU -$c0
NewGetString EQU -$c6
*************************************************************************
FRQSHOWINFO EQU $00000001 ; .info files to show. They default to hidden.
FRQEXTSELECT EQU $00000002 ; extended select. Default is not.
FRQCACHING EQU $00000004 ; directory caching. Default is not.
FRQGETFONTS EQU $00000008 ; font Requester rather than a file Requester.
FRQINFOGADGET EQU $00000010 ; hide-info files gadget.
FRQHIDEWILDS EQU $00000020 ; DON'T want 'show' and 'hide' string gadgets.
FRQABSOLUTEXY EQU $00000040 ; absolute x,y positions rather than centering on mouse.
FRQCACHEPURGE EQU $00000080 ; Purge the cache whenever the directory date stamp changes if this is set.
FRQNOHALFCACHE EQU $00000100 ; Don't cache a directory unless it is completely read in when this is set.
FRQNOSORT EQU $00000200 ; DON'T want sorted directories.
FRQNODRAG EQU $00000400 ; DON'T want a drag bar and depth gadgets.
FRQSAVING EQU $00000800 ; selecting a file to save to.
FRQLOADING EQU $00001000 ; selecting a file(s) to load from.
FRQDIRONLY EQU $00002000 ; select a directory, rather than a file.
DSIZE EQU 130 ;Directory SIZE ;DON'T CHANGE !!
FCHARS EQU 30 ;Filename SIZE ;DON'T CHANGE !!
WILDLENGTH EQU 30 ;Wildcards SIZE ;DON'T CHANGE !!
**********************************************************************
;=====================================================================
; ** MAIN **
;=====================================================================
; code by MIKE and me...
start:
movem.l d0-d7/a0-a6,-(SP)
MOVE.L 4.w,A6
lea VAR(PC),A5 ; master base to avoid reloc_32
; hunks and to get faster code..
suba.l a1,a1
jsr findtask(a6)
move.l d0,a4
move.l d0,my_task-var(a5)
; LEA $5c(A4),A1 ; MSG Port
; move.l a1,port1-var(a5)
tst.l $ac(a4)
bne.b cli_call
* Worbench Part
lea $5c(a4),a0
jsr waitport(a6)
lea $5c(a4),a0
jsr getmsg(a6)
move.l d0,A4 ; WB_Message
jsr forbid(a6)
move.l A4,a1
jsr replymsg(a6)
movem.l (a7)+,d0-d7/a0-a6
moveq #00,d0
rts
* CLI-PARAMETER HANDLER
cli_call
movem.l (a7)+,d0-d7/a0-a6
MOVE.L 4.w,A6
lea VAR(PC),A5
lea reqname(pc),a1 ; open req.lib
moveq #0,d0
jsr -552(a6)
move.l d0,reqbase-var(a5)
led_test
btst #1,$bfe001
seq led-var(a5)
bset #1,$bfe001
LEA doslibrary(pc),A1
moveq #0,d0
JSR -552(A6)
MOVE.L D0,dosbase-var(a5) ; dosbase
beq.w nix_dos_open
move.l d0,a6
jsr -60(a6) ; output
MOVE.L D0,conbase0-var(a5)
BEQ.W dos_open_aber_no_con
; MOVE.L #mes0,D2
lea mes0(pc),a0
MOVE.l #mes0leng,D3
bsr.w write_text ; write begin text
tst.l reqbase-var(a5)
bne.b oh_no
; MOVE.L #mes1,D2
lea mes1(pc),a0
MOVE.l #mes1leng,D3
bsr.w write_text ; write begin text
oh_no
MOVE.L #$9C40,D0
MOVE.L #$10001,D1 ; Clear&Public
MOVE.L 4.w,A6
JSR -$C6(A6)
MOVE.L D0,alloc0-var(a5) ; alloc mem
beq.w alloc0_no
overwrite_no
tst.l reqbase-var(a5)
beq.b war_nix1
bsr.w about
lea load_title1(pc),a1 ; Archivname
moveq #0,d0
bra.w use_it
war_nix1
; MOVE.L #mDestination0,D2 ; 'archiv name'
lea mDestination0(pc),a0
MOVEq #$18,D3
bsr.w write_text
moveq #0,d0
bsr.w enter_arh_name ; 0 Archiv
LEA name_buff(pc),A0
TST.L (A0)
beq.b war_nix1
CMP.L #'exit',(A0)
beq.w free_mem
CMP.L #'EXIT',(A0)
beq.w free_mem
howdi1
lea var(pc),a5
MOVE.L A0,D1
moveq #-2,D2
MOVE.L dosbase(pc),A6
JSR -$54(A6) ; lock
TST.L D0
beq.b overwrite_yes1
MOVE.L D0,lock_handle-var(a5)
MOVE.L D0,D1
; MOVE.L #info_block,D2
lea info_block(pc),a0
move.l a0,d2
MOVE.L dosbase(pc),A6
JSR -$66(A6) ; examine
MOVE.L lock_handle(PC),D1
MOVE.L dosbase(pc),A6
JSR -$5A(A6) ; unlock
MOVE.L is_it_datei(PC),D0
TST.L D0
BLT.s ask_for_overwrite
; MOVE.L #mThatsadirect,D2 ; 'That's a directory'
lea mThatsadirect(pc),a0
MOVEq #$22,D3
bsr.w write_text
bra.w overwrite_no
ask_for_overwrite
tst.l reqbase-var(a5)
beq.b ask_for_overwrite1
bra.w req_ask_overwrite
ask_for_overwrite1
; MOVE.L #mFileExistsOv,D2 ; 'File exists /overwrite?'
lea mFileExistsOv(pc),a0
MOVEq #$2B,D3
bsr.w write_text
bsr.w two_input
CMP.B #$59,(A0) ; y (overwrite?)
beq.b overwrite_yes
CMP.B #$79,(A0)
beq.b overwrite_yes
bra.w overwrite_no
overwrite_yes
MOVE.L #name_buff,D1
MOVE.L dosbase(pc),A6
JSR -72(A6) ; Delete
overwrite_yes1
MOVE.L #name_buff,D1
MOVE.L #$3EE,D2
MOVE.L dosbase(pc),A6
JSR -$1E(A6) ; Open
TST.L D0
bne.b lbC000134 ; hat geklappt
bra.w write_file_error
lbC000134
lea VAR(PC),a5
MOVE.L D0,File_handle-var(a5)
move.l d0,d1
MOVE.L #sfx_hunk,D2
MOVE.L #sfx_len,D3
JSR -$30(A6) ; Write
tst.l d0
bmi.w lbc00066e
; MOVE.L #mArchiveOpene,D2 ; 'Archiv opened..'
lea mArchiveOpene(pc),a0
MOVEq #$1C,D3
bsr.w write_text
main_loop:
lea VAR(PC),A5
tst.l reqbase-var(a5)
beq.b war_nix
lea load_title(pc),a1
moveq #1,d0
bra.w use_it
war_nix
; MOVE.L #mOriginal0m,D2 ; 'Original >'
lea mOriginal0m(pc),a0
MOVEq #$15,D3
BSR.W write_text ; text schreiben
moveq #1,d0
bsr.w enter_arh_name ; 1 File
LEA name_buff(pc),A0
TST.L (A0)
beq.w lbC000518
CMP.L #'EXIT',(A0)
beq.w lbC000692
CMP.L #'exit',(A0)
beq.w lbC000692
howdi
MOVE.L A0,D1
MOVEq #-2,D2 ; 'lese lock'
MOVE.L dosbase(pc),A6
JSR -84(A6) ; Lock
TST.L D0
beq.w lbC0006EC
MOVE.L D0,lock_handle-var(a5)
move.l d0,d1
; MOVE.L #info_block,D2
lea info_block(pc),a0
move.l a0,d2
MOVE.L dosbase(pc),A6
JSR -102(A6) ; Examine
MOVE.L lock_handle(PC),D1
MOVE.L dosbase(pc),A6
JSR -$5A(A6)
MOVE.L is_it_datei(PC),D0
TST.L D0
BLT.b lbC000206
; MOVE.L #mCannotcompre,D2 ; 'cannot compress a direc'
lea mCannotcompre(pc),a0
MOVEq #$29,D3
bsr.w write_text
bra.w main_loop
lbC000206
; MOVE.L #pfeil,D2 ; ' (xxxx) bytes'
lea pfeil(pc),a0
MOVEq #6,D3
bsr.w write_text
; MOVE.L #name_buff,D2
lea name_buff(pc),a0
MOVE.L name_len(pc),D3
bsr.w write_text
; MOVE.L #ascii,D2
lea ascii(pc),a0
MOVEq #6,D3
bsr.w write_text
MOVE.L file_len_imlock(PC),D0
BSR.W lbC00079C
; MOVE.L #ascii0,D2
lea ascii0(pc),a0
MOVEq #9,D3
bsr.w write_text
; MOVE.L #bytes1,D2
lea bytes1(pc),a0
MOVEq #9,D3
bsr.w write_text
MOVE.L file_len_imlock(PC),D0
MOVE.L D0,file_len_backsave-var(a5)
MOVE.L D0,D1
DIVU #8,D1
AND.L #$FFFF,D1
ADD.L D1,D0
ADD.L #$40,D0 ; header/file-len/packed/pack_chksum
MOVE.L D0,file_len_umgerechnet-var(a5)
MOVE.L 4.w,A6
MOVE.L #$10001,D1
JSR -$C6(A6) ; Alloc
TST.L D0
beq.w lbC00065A
MOVE.L D0,extract_buf-var(a5)
MOVE.L file_len_backsave(pc),D0
MOVE.L #$10001,D1 ; Public
; MOVE.L 4.w,A6
JSR -$C6(A6) ; Alloc
TST.L D0
beq.w lbC000646
MOVE.L D0,alloc2-var(a5)
MOVE.L #name_buff,D1
MOVE.L #$3ED,D2
MOVE.L dosbase(pc),A6
JSR -$1E(A6) ; Open
TST.L D0
beq.w lbC000632
MOVE.L D0,D1
MOVE.L D0,file_handle2-var(a5)
MOVE.L alloc2(pc),D2
MOVE.L file_len_backsave(pc),D3
MOVE.L dosbase(pc),A6
JSR -$2A(A6) ; Read
CMP.L file_len_backsave(pc),D0
bne.w lbC000622
MOVE.L file_handle2(pc),D1
MOVE.L dosbase(pc),A6
JSR -$24(A6) ; Close
; MOVE.L #mCompressingP,D2 ; 'Compressing please wait...'
lea mCompressingP(pc),a0
MOVEq #$2A,D3
bsr.w write_text
LEA crunch_strucc(pc),A0
MOVE.L alloc2(pc),(A0)+
MOVE.L file_len_backsave(pc),(A0)+
MOVE.L extract_buf(pc),(A0)
ADD.L #$40,(A0)+
MOVE.L file_len_umgerechnet(pc),(A0)+
MOVE.L alloc0(pc),(A0)+
MOVE.L #$9C40,(A0)+
CLR.L (A0)
;--------------------------------------------------------------------
set_task_pri:
move.l $04.w,a6
move.l my_task(pc),a1
moveq #8,d0
jsr -300(a6) ; set task pri
;--------------------------------------------------------------------
LEA crunch_strucc(pc),A0
bsr.w lbC0007FC ; cruncher
;--------------------------------------------------------------------
movem.l d0-d7/a0-a6,-(SP)
move.l $04.w,a6
move.l my_task(pc),a1
moveq #0,d0
jsr -300(a6) ; set task pri
movem.l (a7)+,d0-d7/a0-a6
;--------------------------------------------------------------------
MOVE.L D0,packed_len-var(a5)
MOVE.L alloc2(pc),A1
MOVE.L file_len_backsave(pc),D0
MOVE.L 4.w,A6
JSR -$D2(A6)
; MOVE.L #mCompressed,D2 ; 'Compressed xxx'
lea mCompressed(pc),a0
MOVEq #$10,D3
bsr.w write_text
; MOVE.L #ascii0,D2
MOVEq #9,D3
lea ascii0(pc),a0
bsr.w write_text
; MOVE.L #bytestobytes0,D2 ; xxxx bytes to'
lea bytestobytes0(pc),a0
MOVEq #10,D3
bsr.w write_text
MOVE.L packed_len(pc),D0
bsr.w lbC00079C
; MOVE.L #ascii0,D2 ; alte byte zahl
lea ascii0(pc),a0
MOVEq #9,D3
bsr.w write_text
; MOVE.L #bytes0m,D2 ; ' bytes'
lea bytes0m(pc),a0
MOVEq #12,D3
bsr.w write_text
MOVE.L extract_buf(pc),A0
MOVE.L packed_len(pc),D0
moveq #0,d2
moveq #0,d1
lbC0003DE
MOVE.B (A0)+,D1
ADD.L D1,D2
DBRA D0,lbC0003DE
MOVE.L D2,pack_checksum-var(a5)
lbC0003EE
tst.l reqbase-var(a5)
beq.b lbc0003ee1
bra.w ask_exit
lbC0003Ee1
; MOVE.L #mFileorDispla,D2 ; 'File or Display'
lea mFileorDispla(pc),a0
MOVEq #$20,D3
bsr.w write_text
bsr.w two_input
CMP.B #'f',(A0)
beq.b lbC000448
CMP.B #'F',(A0)
beq.b lbC000448
CMP.B #'d',(A0)
beq.b lbC000426
CMP.B #'D',(A0)
beq.b lbC000426
bra.b lbC0003EE1
sfg
MOVE.L file_len_backsave(pc),(A0)+
MOVE.L packed_len(pc),(A0)+
MOVE.L pack_checksum(pc),(A0)
rts
lbC000426
MOVE.L extract_buf(pc),A0
MOVE.L #$22222222,(A0)+ ; Display
bsr.b sfg
bra.w lbC0004C6 ; bei Display gibbet keinen
lbC000448 ; 'extract' path
MOVE.L extract_buf(pc),A0
MOVE.L #$11111111,(A0)+ ; File
bsr.b sfg
lbC000466
tst.w arq-var(a5)
bne.b do_the_complete_copy_name
move.w #-1,arq-var(a5) ; Extract Path nur einmal
tst.l reqbase-var(a5)
beq.b cli_trot
bra.w and_again ; zurueck nach lbc0004c6
do_the_complete_copy_name:
lea backsave_buf(pc),a1 ; old extract path
move.l extract_buf(pc),a0
lea $10(a0),a0
copy_dir_to_sfx:
move.b (a1)+,(a0)+
bne.b copy_dir_to_sfx
subq.l #1,a0
lea name_buff(pc),A1
MOVE.L load_dir_len-var(a5),d0
add.l d0,a1
copy_name_to_sfx:
move.b (a1)+,(a0)+
bne.b copy_name_to_sfx
clr.b -(a0)
bra.b lbC0004C6
cli_trot
; MOVE.L #mExtractPath0,D2
lea mExtractPath0(pc),a0
MOVEq #$19,D3
bsr.w write_text
MOVE.L conbase0(pc),D1
MOVE.L extract_buf(pc),D2
ADD.L #$10,D2
MOVEq #$30,D3
MOVE.L dosbase(pc),A6
JSR -42(A6) ; read
MOVE.L extract_buf(pc),A0
ADD.L #$10,A0
lbC0004A4
CMP.B #10,(A0)+
bne.b lbC0004A4
clr.b -1(a0)
move.l a0,a1
MOVE.L extract_buf(pc),A0
ADD.L #$10,A0
tst.b (a0)
beq.b cli_trot
;do_the_copy_name:
; subq.l #1,a1
; lea name_buff(pc),A0
; MOVE.L name_len-var(a5),d0
; subq.l #1,d0
;copy_cli_name_to_sfx:
; move.b (a0)+,(a1)+
; dbf d0,copy_cli_name_to_sfx
lbC0004C6
MOVE.L File_handle(pc),D1
MOVE.L extract_buf(pc),D2
MOVE.L packed_len(pc),D3
ADD.L #$40,D3
ADD.L D3,new_filepacked_len-var(a5)
MOVE.L dosbase(pc),A6
JSR -48(A6) ; write
tst.l d0
bmi.w lbc000622
MOVE.L extract_buf(pc),A1
MOVE.L file_len_umgerechnet(pc),D0
MOVE.L 4.w,A6
JSR -210(A6) ; free mem
; MOVE.L #mAddedtoArchi,D2 ; 'Added to Archive...'
lea mAddedtoArchi(pc),a0
MOVEq #$1E,D3
bsr.w write_text
bra.w main_loop
lbC000518
LEA lbL000DE0(pc),A0
MOVE.L A0,lbL000DD4-var(a5)
MOVE.L #4,lbL000DD0-var(a5)
MOVE.L new_filepacked_len(pc),D0
ADDq.L #4,D0
DIVU #4,D0
SWAP D0
TST.W D0
beq.b fix_sfx_hunk
CLR.W D0
SWAP D0
ADDq.L #1,D0
SWAP D0
SUBq.L #2,lbL000DD4-var(a5)
ADDq.L #2,lbL000DD0-var(a5)
fix_sfx_hunk
SWAP D0
LEA sfx_hunk(pc),A0 ; ARCHIV HUNK
MOVE.L D0,$1C(A0)
MOVE.L D0,$914(A0)
MOVE.L File_handle(pc),D1
; MOVE.L #lbL000DD8,D2
lea lbl000dd8(pc),a0
move.l a0,d2
MOVEq #4,D3
move.l dosbase(pc),a6
JSR -$30(A6) ; Write
tst.w d0
bmi.W lbc00066e
MOVE.L File_handle(pc),D1
MOVE.L lbL000DD4(pc),D2
MOVE.L lbL000DD0(pc),D3
JSR -$30(A6)
tst.w d0
bmi.W lbc00066e
MOVE.L File_handle(pc),D1
MOVEq #0,D2
moveq #0,d3
not.l d3
MOVE.L dosbase(pc),A6
JSR -$42(A6)
TST.L D0
BLT.B lbC00066E
MOVE.L File_handle(pc),D1
; MOVE.L #sfx_hunk,D2
lea sfx_hunk(pc),a0
move.l a0,d2
MOVE.L #sfx_len,D3
JSR -$30(A6)
tst.w d0
bmi.s lbc00066e
MOVE.L File_handle(pc),D1
MOVE.L dosbase(pc),A6
JSR -$24(A6)
; bsr moxi
; MOVE.L #mArchiveSucce,D2
lea mArchiveSucce(pc),a0
MOVE.l #malen,D3
bsr.b write_text
;right_mouse_button1:
; moveq #$0a,d1
; jsr -198(a6) ; Delay
; BTST #10,$dff016
; bne right_mouse_button1
BRA.B free_mem
;-------------------------------------------------------------------------
write_text:
movem.l d0-d1/a0-a1/a6,-(sp)
move.l a0,d2
move.l dosbase(pc),a6
move.l conbase0(pc),d1 ; window
tst.l d1
beq.b writer_no
jsr -$30(a6)
writer_no:
movem.l (SP)+,d0-d1/a0-a1/a6
rts
;--------------------------------------------------------------------------
lbC000622
MOVE.L file_handle2(pc),D1
bsr.b moxi1
; MOVE.L dosbase(pc),A6
; JSR -$24(A6)
lbC000632
; MOVE.L #mErrorreading,D2
lea mErrorreading(pc),a0
MOVEq #$2E,D3
bsr.b write_text
bra.w main_loop
moxi
MOVE.L File_handle(pc),D1
moxi1
MOVE.L dosbase(pc),A6
Jmp -$24(A6)
lbC000646
lbC00065A
; MOVE.L #mCouldntalloc,D2
lea mCouldntalloc(pc),a0
MOVEq #$30,D3
bsr.b write_text
bra.w main_loop
lbC00066E
bsr.b moxi
write_file_error
; MOVE.L #mErrorreading,D2
lea mErrorreading(pc),a0
MOVEq #$2E,D3
bsr.b write_text
bra.w overwrite_no
real_ende
lbC000692
bsr.b moxi
free_mem
MOVE.L alloc0(pc),A1
MOVE.L #$9C40,D0
MOVE.L 4.w,A6
JSR -$D2(A6)
BRA.B kurz_vor_ende
alloc0_no
; MOVE.L #mCouldntalloc,D2
lea mCouldntalloc(pc),a0
MOVEq #$30,D3
bsr.b write_text
kurz_vor_ende
;MOVE.L dosbase(pc),A6
;MOVE.L conbase0(pc),D1
;JSR -$24(A6)
;bsr moxi1
dos_open_aber_no_con
MOVE.L 4.w,A6
MOVE.L dosbase(pc),A1
JSR -414(A6) ; close dos
nix_dos_open
tst.l reqbase-var(a5)
beq.b das_warx
;lea frq_Structure(pc),a0
;move.l reqbase(pc),a6
;jsr Purgefiles(a6)
;move.l $04.w,a6
move.l reqbase(pc),a1
jsr -414(a6)
das_warx
tst.b led-var(a5) ; LED ist jetzt genauso
bne.b led_light ; wie vor aufruf...
bset #1,$bfe001
bra.b led_dark
led_light
bclr #1,$bfe001
led_dark
; movem.l (SP)+,d0-d7/a0-a6
moveq #0,d0
RTS
lbC0006EC
; MOVE.L #mThatfiledoes,D2
lea mThatfiledoes(pc),a0
MOVEq #$25,D3
bsr.w write_text
bra.w main_loop
claro
LEA name_buff(pc),A0
MOVEq #$13,D1
lbC00070C
CLR.L (A0)+
DBRA D1,lbC00070C
rts
enter_arh_name
move.l d0,-(sp)
; moveq #0,d0
bsr.b claro
LEA name_buff(pc),A0
move.l a0,d2
MOVE.L conbase0(pc),D1
MOVEq #$50,D3
MOVE.L dosbase(pc),A6
JSR -$2A(A6) ; Read
SUBq.L #1,D0 ; wegen 'Return'
MOVE.L D0,name_len-var(a5)
LEA name_buff(pc),A0
lbC000740
CMP.B #10,(A0)+ ; 'Return'
bne.b lbC000740
subq.l #1,a0 ; return weg
li move.l (sp)+,d0 ; 0 archiv | 1 file
tst.l d0
bne.b az
move.b #'.',(a0)+
move.b #'S',(a0)+
move.b #'F',(a0)+
move.b #'X',(a0)+
clr.b (a0)
addq.l #4,name_len-var(a5)
rts
az:
clr.b (A0) ; return weg
RTS
two_input:
LEA lbL000E5C(pc),A0
clr.l (a0)
MOVE.L conbase0(pc),D1
; MOVE.L #lbL000E5C,D2
lea lbl000e5c(pc),a6
move.l a6,d2
MOVEq #2,D3 ; 2 Zeichen
MOVE.L dosbase(pc),A6
JSR -$2A(A6) ; Read
LEA lbL000E5C(pc),A0
CMP.B #10,(A0)
bne.b lbC000788
CLR.L (A0)
lbC000788
RTS
lbC00079C
MOVEQ #7,D2
LEA ascii0(pc),A2
MOVE.L A2,A0
LEA lbL0007DC(pc),A1
lbC0007AC
MOVEQ #$30,D1
lbC0007AE
ADDQ.W #1,D1
SUB.L (A1),D0
BCC.b lbC0007AE
SUBQ.W #1,D1
ADD.L (A1),D0
MOVE.B D1,(A0)+
ADDq.L #4,A1
DBRA D2,lbC0007AC
MOVE.L A2,A0
lbC0007C6
clr.B (A0)+
CMP.B #$30,(A0)
beq.b lbC0007C6
RTS
cnop 0,4
VAR:
dc.b "$VER: LHSFX V1.5a (14.11.92)",0
cnop 0,4
;--------------------------------------------------------------------
; *** Variablen ***
;--------------------------------------------------------------------
backsave_buf: blk.l 40
my_task: dc.l 0
ascii0 dc.b '00000000',0
even
lbL0007DC
dc.l $989680
dc.l $F4240
dc.l $186A0
dc.l $2710
dc.l $3E8
dc.l $64
dc.l 10
dc.l 1
doslibrary
dc.b 'dos.library',0
cnop 0,4
dosbase: dc.l 0
lock_handle: dc.l 0
info_block
dc.l 0
is_it_datei
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
file_len_imlock: ; Laenge in bytes
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
file_handle2 dc.l 0
File_handle dc.l 0
alloc2 dc.l 0
extract_buf dc.l 0
file_len_backsave dc.l 0
file_len_umgerechnet dc.l 0
new_filepacked_len dc.l 0
packed_len dc.l 0
pack_checksum dc.l 0
alloc0 dc.l 0
lbL000DD0 dc.l 0
lbL000DD4 dc.l 0
lbL000DD8 dc.l $FFFFFFFF
dc.l 0
lbL000DE0 dc.l $3F2
crunch_strucc dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
conbase0 dc.l 0
;conbase1 dc.l 0
name_buff blk.l 21,0
name_len dc.l 0
dir_len: dc.l 0
load_dir_len: dc.l 0
lbL000E5C dc.l 0
arq dc.w 0
even
led dc.b 0
even
;--------------------------------------------------------------------
; *** my code (R.T.) ***
;--------------------------------------------------------------------
use_it
movem.l d0-d7/a0-a6,-(a7); save registers
move.l d0,-(sp)
bsr.w claro
lea load_dir(pc),a2
lea load_file(pc),a3
move.l load_flags(pc),d0
lea frq_1(pc),a0
lea frq_3(pc),a4
move.l a1,(a0)+
move.l a2,(a0)+
move.l a3,(a0)+
move.l d0,(a4)
lea frq_Structure(pc),a0
move.l reqbase(pc),a6
moveq #0,d0
jsr FileRequester(a6)
tst.w d0
beq.b das_war_dann_nix
moveq #0,d1
lea load_dir(pc),a0
LEA name_buff(pc),A1
lea load_file(pc),a2
work_script_string: ; A0,A1,A2 & D0
addq.w #1,d1
move.b (a0)+,(a1)+
bne.b work_script_string
subq.w #2,d1
subq.w #2,a1
move.b (a1),d0
cmp.b #':',d0
beq.b work_script_string1
cmp.b #'/',d0
beq.b work_script_string1
addq.l #1,a1
add.w #1,d1
move.b #'/',(a1)
work_script_string1
addq.l #1,a1
move.l d1,load_dir_len-var(a5)
add.l #1,load_dir_len-var(a5)
work_script_string2
addq.w #1,d1
move.b (a2)+,(a1)+
bne.b work_script_string2
subq.l #1,a1
move.l (sp)+,d0 ; 0 Archiv | 1 File
tst.l d0
bne.b wq
move.b #'.',(a1)+
move.b #'S',(a1)+
move.b #'F',(a1)+
move.b #'X',(a1)+
clr.b (a1)
movem.l (a7)+,d0-d7/a0-a6
LEA name_buff(pc),A0
bra.w howdi1
wq
MOVE.L D1,name_len-var(a5)
clr.b (a1)
movem.l (a7)+,d0-d7/a0-a6
LEA name_buff(pc),A0
bra.w howdi
das_war_dann_nix
move.l (sp)+,d0
tst.l d0
bne.b wq1
movem.l (a7)+,d0-d7/a0-a6
bra.w free_mem ; archiv
wq1
movem.l (a7)+,d0-d7/a0-a6
bra.w lBC000518 ; file
ask_exit:
movem.l d0-d7/a0-a6,-(a7); save registers
lea master_text(pc),a1
sub.l a2,a2
sub.l a3,a3
lea ask_exit_text1(pc),a4
lea ask_exit_text0(pc),a5
bsr.w set_text_req
tst.w d0
beq.b disp
movem.l (a7)+,d0-d7/a0-a6
bra.w lbc000448 ; file
disp
movem.l (a7)+,d0-d7/a0-a6
bra.w lbc000426 ; display
req_ask_overwrite
movem.l d0-d7/a0-a6,-(a7); save registers
lea master_text1(pc),a1
sub.l a2,a2
sub.l a3,a3
lea ask_exit_text2(pc),a4
lea ask_exit_text3(pc),a5
bsr.w set_text_req
tst.w d0
beq.b ov_n
movem.l (a7)+,d0-d7/a0-a6
bra.w overwrite_yes
ov_n
movem.l (a7)+,d0-d7/a0-a6
bra.w overwrite_no
cnop 0,4
nio: blk.l 4,0
master_Text:
DC.B " Do you want the just crunched part as a ",10
dc.b " [F]ile decrunched or as a TEXT [D]isplayed ?? ",10,0
EVEN
ask_exit_Text1: DC.b " »» F «« ",0
even
ask_exit_text0: DC.b " »» D «« ",0
EVEN
master_Text1:
DC.B " Archiv exists. Shall I overwrite it? ",10,0
EVEN
ask_exit_Text2: DC.b " »» Y «« ",0
even
ask_exit_text3: DC.b " »» N «« ",0
cnop 0,4
; entpack dir festlegen
and_again:
movem.l d0-d7/a0-a6,-(a7); save registers
and_agi:
lea load_title2(pc),a1
lea load_dir1(pc),a2
lea load_file1(pc),a3
move.l load_flags3(pc),d0
lea frq_1(pc),a0
lea frq_3(pc),a4
move.l a1,(a0)+
move.l a2,(a0)+
move.l a3,(a0)+
move.l d0,(a4)
lea frq_Structure(pc),a0
move.l reqbase(pc),a6
moveq #0,d0
jsr FileRequester(a6)
tst.w d0
beq.b and_agi
lea load_dir1(pc),a0
move.l extract_buf(pc),A1
lea $10(a1),a1
moveq #0,d1
work_script_string0
addq.w #1,d1
move.b (a0)+,(a1)+
bne.b work_script_string0
subq.w #2,d1
subq.l #2,a1
move.b (a1),d0
cmp.b #':',d0
beq.b work_script_string10
cmp.b #'/',d0
beq.b work_script_string10
addq.l #1,a1
addq.w #1,d1
move.b #'/',(a1)
work_script_string10
addq.w #1,d1
move.l d1,dir_len-var(a5)
addq.l #1,a1
clr.b (a1)
move.l a1,a2
; saves the extract path back
lea backsave_buf(pc),a1
move.l extract_buf(pc),a0
lea $10(a0),a0
work_script_string_buff:
move.b (a0)+,(a1)+
bne.b work_script_string_buff
; inserts the name the first time
lea name_buff(pc),A0
MOVE.L load_dir_len-var(a5),d0
add.l d0,a0
cli_name_to_sfx:
move.b (a0)+,(a2)+
bne.b cli_name_to_sfx
clr.b -1(a2)
movem.l (a7)+,d0-d7/a0-a6
bra.w lbc0004c6
;---------------------------------------------------------------------
about:
lea about_text(pc),a1
lea about_middletext(pc),a3
sub.l a4,a4
sub.l a5,a5
sub.l a2,a2
; bsr.b set_text_req
*****************************************************************************
; A1 -> message text
; A2 -> zeiger auf controls
; A3 -> middle 2
; A4 -> left 1 positive
; A5 -> right 0 negative
set_text_req:
lea TR_structure(pc),a0
move.l a1,(a0)+
move.l a2,(a0)+
addq.l #4,a0
move.l a3,(a0)+
move.l a4,(a0)+
move.l a5,(a0)
move.l reqbase(pc),a6
lea TR_Structure(pc),a0
jsr TextRequest(a6)
lea Var(pc),a5
rts
cnop 0,4
;=============================================================================
;= TextRequester-Structure =
;=============================================================================
TR_Structure:
DC.l 0 ;This is the message text, including printf() style formatting if desired.
DC.l 0 ;This is the address of the parameter list, if printf() style formatting is used.
on_my_window1:
DC.l 0 ;TR_Window ;This is an optional (zero if not used) pointer to a window on the screen you
;would like the Requester to show up on.
DC.l 0 ; lower middle (returns 2).
DC.l 0 ; lower left hand corner (returns 1).
DC.l 0 ; lower right (returns 0).
DC.l TR_title ; title for the window.
DC.w 0 ;TR_KeyMask ;This is the qualifier mask for the keyboard shortcuts.
;Use $FFFF to allow any qualifiers (or none).
;Zero means that no keyboard shortcuts are allowed.
DC.w 0 ;TR_textcolor ;Color of the text. Uses Color 1 if no Color specified.
DC.w 3 ;TR_detailcolor ;Detail and block color, as in a NewWindow structure. If
DC.w 2 ;TR_blockcolor ;both are left zero, block pen will be set to 1.
DC.w 0 ;TR_versionnumber ;Make SURE this is set to zero.
DC.l 0 ;TR_rfu1 ;Make SURE you leave these two zeroed also.
DC.l 0 ;TR_rfu2 ;Make SURE you leave these two zeroed also.
TR_Title: DC.b 0
even
;=============================================================================
;= FileRequester-Structure =
;=============================================================================
;frq_Flags: EQU FRQINFOGADGET!FRQABSOLUTEXY!FRQLOADING;
;ESS_Structure: ;ExtendedSelectStructure
; DC.l 0 ;ESS_NextFile ;This must be the first element!
; DC.w 0 ;ESS_NameLength ;File name length, not including the terminating zero.
; DC.w 0 ;ESS_Pad
; DC.l 0 ;ESS_Node ;Node that the user has extended selected.
;==============================================================================
;= When using extended select, the directory pointer is Required =
;= since only the file names are stored in the frq_ExtendedSelect linked =
;= list. When not using extended select, you can either have frq_Dir and =
;= frq_File point be initialized, or you can have frq_PathName initialized, =
;= or both. frq_PathName will contain the concatenation of the file and =
;= directory chosen. =
;==============================================================================
EVEN
frq_Structure:
DC.w 0 ; frq_VersionNumber : MUST BE ZERO !!!!!!!!!
frq_1:
DC.l 0 ;Hailing text
DC.l 0 ;Directory array (must be DSIZE+1 characters long)
DC.l 0 ;Filename array (must be FCHARS+1 characters long)
;If you initialize this variable then the file Requester will place the complete path name in here on exit.
frq_2:
DC.l frq_PathName ;Complete path name array - (must be DSIZE+FCHARS+2 long)
on_my_window:
DC.l 0 ; frq_Window : Window Requesting or NULL
;Initialize these to the number of lines and columns you want to appear in the inner window that
;displays the file names. If you leave these set to zero then default values will be used.
DC.w 15 ; frq_MaxExtendedSelect : Zero implies a maximum of 65535, as long as FRQEXTSELECT is set.
DC.w 16 ; frq_numlines : Number of lines in file window.
DC.w 32 ; frq_numcolumns : Number of columns in file window.
DC.w 12 ; frq_devcolumns : Number of columns in device window.
frq_3:
DC.l 0 ;Various - umm - flags. See above for more info.
DC.w 3 ; frq_dirnamescolor : These five colors will all default
DC.w 0 ; frq_filenamescolor : to color one if you don't specify
DC.w 3 ; frq_devicenamescolor : a color (ie; if you specify color zero).
DC.w 0 ; frq_fontnamescolor : If you want color zero to be used, specify
DC.w 3 ; frq_fontsizescolor : color 32, or some other too large number
;which mods down to zero.
DC.w 0 ; frq_detailcolor : If both of these colors are specified as
DC.w 0 ; frq_blockcolor : zero then the block pen will be set to one.
DC.w 0 ; frq_gadgettextcolor : The color for the text of the five boolean gadgets. Defaults to 1.
DC.w 0 ; frq_textmessagecolor : The color for the message at the screen top. Defaults to 1.
DC.w 0 ; frq_stringnamecolor : The color for the words Drawer, File, Hide and Show. Defaults to 3.
DC.w 0 ; frq_stringgadgetcolor : The color for the borders of the string gadgets. Defaults to 3.
DC.w 0 ; frq_boxbordercolor : The color for the boxes around the file and directory areas. Defaults to 3.
DC.w 0 ; frq_gadgetboxcolor : The color for the boxes around the five boolean gadgets. Defaults to 3.
blk.b 36,0 ; frq_RFU_Stuff,36 : This area, which is reserved for
;future use, should all be zero.
blk.b 12 ; frq_DirDateStamp,ds_SIZEOF : A copy of the cached directories date stamp. (12 Bytes !!)
;There should never be any need to change this.
DC.w 0; frq_WindowLeftEdge : These two fields are only used when the
DC.w 8; frq_WindowTopEdge : FRQABSOLUTEXY flag is set. They specify
;the location of the upper left hand
;corner of the window.
DC.w 0 ; frq_FontYSize : These fields are used to return the selected
DC.w 0 ; frq_FontStyle : font size and style, only applicable when the
;font bit is set.
;If you set the extended select bit and the user extended selects, the list of filenames will start from here.
acid:
DC.l 0 ; frq_ExtendedSelect : Linked list of ESStructures if more than one filename is chosen.
;All of the following variables you shouldn't need to touch. They contain fields that the file
;Requester sets and likes to preserve over calls, just to make life easier for the user.
frq_WildHide: DC.B "*.info"
frq_WildHide0: equ *-frq_WildHide
blk.b WILDLENGTH+2-frq_WildHide0 ; frq_Hide Wildcards for files to hide.
frq_WildShow: DC.B 0
frq_WildShow0: equ *-frq_WildShow
blk.b WILDLENGTH+2-frq_WildShow0 ; frq_Show Wildcards for files to show.
DC.w 0 ; frq_FileBufferPos : Cursor's position and first
DC.w 0 ; frq_FileDispPos : displayed character number in
DC.w 0 ; frq_DirBufferPos : the three string gadgets. No
DC.w 0 ; frq_DirDispPos : need to initialized these if
DC.w 0 ; frq_HideBufferPos : you don't want to.
DC.w 0 ; frq_HideDispPos
DC.w 0 ; frq_ShowBufferPos
DC.w 0 ; frq_ShowDispPos
;==============================================================================
;= The following fields are PRIVATE! Don't go messing with them or =
;==============================================================================
DC.l 0 ; frq_Memory : Memory allocated for dir entries.
DC.l 0 ; frq_Memory2 : Used for currently hidden files.
DC.l 0 ; frq_Lock : Contains lock on directories being read across calls.
blk.b DSIZE+2 ; frq_PrivateDirBuffer : Used for keeping a record of which
;directory we have file names for.
DC.l 0 ; frq_FileInfoBlock
DC.w 0 ; frq_NumEntries
DC.w 0 ; frq_NumHiddenEntries
DC.w 0 ; frq_filestartnumber
DC.w 0 ; frq_devicestartnumber
;=============================================================================
frq_PathName: blk.b DSIZE+FCHARS+2 ;Here Will Be The Complete PathName !!!
;-----------------------------------------------------------------------------
EVEN
reqbase: dc.l 0
reqname: dc.b 'req.library',0
EVEN
load_Flags1: EQU FRQSHOWINFO!FRQINFOGADGET!FRQABSOLUTEXY!FRQLOADING
load_flags: dc.l load_flags1
load_File: DC.b 0
load_File0: EQU *-load_File
blk.b FCHARS+1-load_File0
load_Title: DC.b "«« CHOOSE FILE TO CRUNCH »»",0
EVEN
load_Dir: DC.b "RAM:"
load_Dir0: EQU *-load_Dir
blk.b DSIZE+1-load_Dir0
even
load_Title1: DC.b "«« CHOOSE ARCHIVNAME »»",0
even
load_Title2: DC.b "«« CHOOSE EXTRACT PATH »»",0
even
load_Flags2: EQU FRQDIRONLY!FRQINFOGADGET!FRQABSOLUTEXY!FRQLOADING
load_flags3: dc.l load_flags2
load_File1: DC.b 0
load_File2: EQU *-load_File1
blk.b FCHARS+1-load_File2
even
load_Dir1: DC.b "RAM:"
load_Dir2: EQU *-load_Dir1
blk.b DSIZE+1-load_Dir2
EVEN
about_Text:
dc.b "-----------------------------------------------",10
DC.b " »» LhSFX Archive V1.5 «« ",10
dc.b " By Mike Kennedy © 1991 ",10
dc.b " Cruncher and Decruncher © by MXM ",10
dc.b " Improved by Ralf Thanner in 91/92 ",10
dc.b "-----------------------------------------------",10,10
dc.b " 1. Choose ARCHIVNAME. '.SFX' will be added. ",10
dc.b " 2. Choose FILE to crunch. ",10,10
dc.b " 3. Choose if it's [F]ile or [D]isplay. ",10,10
dc.b " 4. Choose EXTRACT path for archive. ",10,10
dc.b " 5. Now quit or go to step 2. ",10,10
dc.b " To close off and finish an archive just click ",10
dc.b " the 'FORGET IT' or 'CANCEL' icon in the file ",10
dc.b " drawer. ",10,0
even
about_middletext:
DC.b " »» OK «« ",0
EVEN
;===========================================================================
;
; A data compression system for the Commodore Amiga computer
; written by Holger P. Krekel and Olaf 'Olsen' Barthel
; © Copyright 1990, all rights reserved.
;
;===========================================================================
;
;******* Thanks for these versions ********
; LZHUF.C English version 1.0
; Based on Japanese version 29-NOV-1988
; LZSS coded by Haruhiko OKUMURA
; Adaptive Huffman Coding coded by Haruyasu YOSHIZAKI
; Edited and translated to English by Kenji RIKITAKE
;******* Many thanks to Olaf for knowledge and the above ******
;******* sourcecodes *******
;******* they were used to get to know some methods *******
;**************************************************************
;******* LZHUF Packing *******
;******* written in assembly by HPK 24/08/90 *******
;
;===========================================================================
; damm well programmed code...
lbC0007FC
MOVEM.L D2-D7/A2-A6,-(SP)
PEA (A0)
bsr.w lbC000A4E
MOVE.L (SP)+,A0
SUB.L 8(A0),A1
CMP.W #$10,D7
beq.b lbC000814
ADDQ.L #2,A1
lbC000814
MOVE.L A1,12(A0)
MOVE.L A1,D0
MOVEM.L (SP)+,D2-D7/A2-A6
RTS
lbC000820
MOVEQ #1,D4
LEA -$2078(A3),A6
LEA (A6),A2
ADD.W D0,A2
MOVE.W (A2)+,D5
ADD.W #$1001,D5
ADD.W D5,D5
MOVE.W #$2000,D6
MOVE.W D6,0(A3,D0.W)
MOVE.W D6,0(A4,D0.W)
MOVEQ #0,D6
MOVE.L A2,D3
lbC000842
MOVE.L D3,A2
lbC000844
TST.W D4
BPL.b lbC00085C
MOVE.W 0(A3,D5.W),D2
CMP.W #$2000,D2
bne.b lbC000870
MOVE.W D0,0(A3,D5.W)
MOVE.W D5,0(A5,D0.W)
RTS
lbC00085C
MOVE.W 0(A4,D5.W),D2
CMP.W #$2000,D2
bne.b lbC000870
MOVE.W D0,0(A4,D5.W)
MOVE.W D5,0(A5,D0.W)
RTS
lbC000870
MOVE.W D2,D5
LEA -$2076(A3),A6
ADD.W D2,A6
MOVE.L A2,D3
MOVE.W (A2)+,D4
SUB.W (A6)+,D4
bne.b lbC000842
MOVE.W (A2)+,D4
SUB.W (A6)+,D4
bne.b lbC000842
MOVEQ #$39,D2
lbC000888
MOVE.W (A2)+,D4
SUB.W (A6)+,D4
DBNE D2,lbC000888
NEG.W D2
ADD.W #$3C,D2
MOVE.L D3,A2
CMP.W D6,D2
BLT.b lbC000844
beq.b lbC0008B4
MOVE.W D2,D6
MOVE.W D0,D3
SUB.W D5,D3
AND.W #$1FFE,D3
MOVE.W D3,$6206(A3)
CMP.W #$3C,D2
BCS.b lbC000844
bra.b lbC0008D2
lbC0008B4
bchg #1,$bfe001
; MOVE.W D3,$DFF182
MOVE.W D0,D3
SUB.W D5,D3
AND.W #$1FFE,D3
CMP.W $6206(A3),D3
BCC.w lbC000844
MOVE.W D3,$6206(A3)
BRA.w lbC000844
lbC0008D2
MOVE.W 0(A5,D5.W),0(A5,D0.W)
MOVE.W 0(A3,D5.W),0(A3,D0.W)
MOVE.W 0(A4,D5.W),0(A4,D0.W)
MOVE.W 0(A3,D5.W),D2
MOVE.W D0,0(A5,D2.W)
MOVE.W 0(A4,D5.W),D2
MOVE.W D0,0(A5,D2.W)
MOVE.W 0(A5,D5.W),D2
CMP.W 0(A4,D2.W),D5
bne.b lbC000904
MOVE.W D0,0(A4,D2.W)
bra.b lbC000908
lbC000904
MOVE.W D0,0(A3,D2.W)
lbC000908
MOVE.W #$2000,0(A5,D5.W)
RTS
lbC000910
MOVE.W #$2000,D4
CMP.W 0(A5,D0.W),D4
beq.b lbC000992
CMP.W 0(A4,D0.W),D4
bne.b lbC000926
MOVE.W 0(A3,D0.W),D2
bra.b lbC000972
lbC000926
CMP.W 0(A3,D0.W),D4
bne.b lbC000932
MOVE.W 0(A4,D0.W),D2
bra.b lbC000972
lbC000932
MOVE.W 0(A3,D0.W),D2
CMP.W 0(A4,D2.W),D4
beq.b lbC000966
lbC00093C
MOVE.W 0(A4,D2.W),D2
CMP.W 0(A4,D2.W),D4
bne.b lbC00093C
MOVE.W 0(A5,D2.W),D3
MOVE.W 0(A3,D2.W),0(A4,D3.W)
MOVE.W 0(A3,D2.W),D3
MOVE.W 0(A5,D2.W),0(A5,D3.W)
MOVE.W 0(A3,D0.W),D3
MOVE.W D3,0(A3,D2.W)
MOVE.W D2,0(A5,D3.W)
lbC000966
MOVE.W 0(A4,D0.W),D3
MOVE.W D3,0(A4,D2.W)
MOVE.W D2,0(A5,D3.W)
lbC000972
MOVE.W 0(A5,D0.W),D3
MOVE.W D3,0(A5,D2.W)
CMP.W 0(A4,D3.W),D0
beq.b lbC00098A
MOVE.W D2,0(A3,D3.W)
MOVE.W D4,0(A5,D0.W)
RTS
lbC00098A
MOVE.W D2,0(A4,D3.W)
MOVE.W D4,0(A5,D0.W)
lbC000992
RTS
lbC000994
ADD.W D0,D0
MOVE.W D0,D1
NEG.W D1
LEA -$2A5C(A3),A2
MOVE.W -2(A2,D1.W),D1
MOVEQ #0,D3
MOVEQ #1,D2
MOVEQ #0,D4
lbC0009A8
LSR.W D2,D3
BTST D2,D1
beq.b lbC0009B2
OR.W #$8000,D3
lbC0009B2
ADD.W D2,D4
MOVE.W 0(A2,D1.W),D1
CMP.W #$4F0,D1
bne.b lbC0009A8
SWAP D3
CLR.W D3
ROL.L D7,D3
OR.W D3,(A1)
SUB.B D4,D7
BGT.b lbC0009D4
ADDQ.L #2,A1
SWAP D3
MOVE.W D3,(A1)
MOVEQ #$10,D3
ADD.W D3,D7
lbC0009D4
CMP.W #$8000,-$2CDA(A3)
beq.b lbC000A4C
LEA -$31CA(A3),A5
LEA -$2A5C(A3),A4
LEA -$256A(A3),A3
MOVEQ #1,D4
NEG.W D0
MOVE.W -2(A4,D0.W),D0
lbC0009F0
LEA 0(A5,D0.W),A2
MOVE.W (A2),D1
ADD.W D4,D1
MOVE.W D1,(A2)+
CMP.W (A2)+,D1
BLS.b lbC000A3A
lbC0009FE
CMP.W (A2)+,D1
BHI.b lbC0009FE
SUBQ.L #4,A2
MOVE.L A2,D2
SUB.L A5,D2
MOVE.W (A2),0(A5,D0.W)
MOVE.W D1,(A2)
MOVE.W 0(A3,D0.W),D1
BMI.b lbC000A18
MOVE.W D2,2(A4,D1.W)
lbC000A18
MOVE.W D2,0(A4,D1.W)
MOVE.W 0(A3,D2.W),D3
BMI.b lbC000A26
MOVE.W D0,2(A4,D3.W)
lbC000A26
MOVE.W D1,0(A3,D2.W)
MOVE.W D0,0(A4,D3.W)
MOVE.W D3,0(A3,D0.W)
MOVE.W 0(A4,D2.W),D0
bne.b lbC0009F0
bra.b lbC000A40
lbC000A3A
MOVE.W 0(A4,D0.W),D0
bne.b lbC0009F0
lbC000A40
LEA $31CA(A5),A3
LEA $51CC(A5),A4
LEA $73CE(A5),A5
lbC000A4C
RTS
lbC000A4E
PEA (A0)
MOVE.L $10(A0),A6
MOVE.L A6,A0
LEA $C60(A6),A1
LEA $76E(A6),A2
MOVEQ #-$2,D0
MOVEQ #0,D3
MOVEQ #1,D1
MOVEQ #2,D2
MOVE.W #$13C,D7
lbC000A6A
MOVE.W D1,(A0)+
MOVE.W D0,(A1)+
MOVE.W D3,-(A2)
SUB.W D2,D0
ADD.W D2,D3
DBRA D7,lbC000A6A
MOVEQ #0,D6
MOVE.L #$27A,D7
MOVE.L A6,A0
LEA $27A(A6),A1
LEA $EDA(A6),A2
LEA $76E(A6),A3
MOVEQ #4,D4
MOVEQ #2,D2
MOVE.W #$13B,D1
lbC000A96
MOVE.W (A0)+,D0
ADD.W (A0)+,D0
MOVE.W D0,(A1)+
MOVE.W D6,(A2)+
MOVE.W D7,(A3)+
MOVE.W D7,(A3)+
ADD.W D4,D6
ADD.W D2,D7
DBRA D1,lbC000A96
MOVE.W D1,(A1)
CLR.W $C5E(A6)
MOVEQ #$7F,D0
MOVE.L #$20002000,D1
LEA $71CE(A6),A0
lbC000ABC
MOVE.L D1,(A0)+
DBRA D0,lbC000ABC
MOVE.W #$3FF,D0
LEA $73CE(A6),A0
lbC000ACA
MOVE.L D1,(A0)+
MOVE.L D1,(A0)+
DBRA D0,lbC000ACA
MOVE.L (SP)+,A6
MOVE.L (A6),A0
MOVE.L 8(A6),A1
MOVE.L 4(A6),D0
MOVE.L $10(A6),A2
ADD.L A0,D0
MOVE.L D0,-(SP)
LEA $1152(A2),A6
MOVE.W #$7E2,D1
MOVEQ #0,D0
lbC000AF0
MOVE.L D0,(A6)+
DBRA D1,lbC000AF0
LEA $30DA(A2),A6
MOVEQ #0,D2
MOVEQ #0,D3
lbC000AFE
MOVE.B (A0)+,D3
CMP.L (SP),A0
BHI.b lbC000B0E
MOVE.W D3,(A6)+
ADDQ.W #1,D2
CMP.W #$3C,D2
BCS.b lbC000AFE
lbC000B0E
LEA $31CA(A2),A3
LEA $51CC(A2),A4
LEA $73CE(A2),A5
MOVE.W D2,$4206(A4)
CLR.W (A1)
MOVEQ #$10,D7
MOVEQ #0,D0
MOVE.W #$1F88,D1
MOVE.W D0,-(SP)
MOVE.W D1,-(SP)
MOVE.W D1,D0
BSR.w lbC000820
MOVE.W (SP)+,D1
MOVE.W (SP)+,D0
lbC000B36
CMP.W $4206(A4),D6
BLS.b lbC000B40
MOVE.W $4206(A4),D6
lbC000B40
CMP.W #2,D6
BCS.b lbC000C0E
MOVE.W D1,-(SP)
MOVE.W D0,-(SP)
MOVE.W D6,D0
ADD.W #$FF,D0
BSR.w lbC000994
MOVEQ #0,D0
MOVE.W $6206(A3),D0
ROR.L #7,D0
ADD.W D0,D0
MOVE.W lbW000B8E(PC,D0.W),D1
MOVE.B D1,D3
CLR.B D1
SWAP D0
LSR.W D3,D0
OR.W D0,D1
ADDQ.W #6,D3
SWAP D1
CLR.W D1
ROL.L D7,D1
OR.W D1,(A1)
SUB.B D3,D7
BGT.S lbC000B86
ADDQ.L #2,A1
SWAP D1
MOVE.W D1,(A1)
MOVEQ #$10,D1
ADD.W D1,D7
lbC000B86
MOVE.W (SP)+,D0
MOVE.W (SP)+,D1
BRA.b lbC000C24
lbC000C0E
MOVEQ #1,D6
MOVE.W D1,-(SP)
MOVE.W D0,-(SP)
LEA -$2078(A3),A6
MOVE.W 0(A6,D1.W),D0
BSR.w lbC000994
MOVE.W (SP)+,D0
MOVE.W (SP)+,D1
lbC000C24
MOVE.W D6,D5
SUBQ.W #1,D5
lbC000C28
BSR.w lbC000910
MOVE.B (A0)+,D3
CMP.L (SP),A0
BLS.w lbC000C4A
SUBQ.W #1,$4206(A4)
bne.w lbC000C60
BGT.w lbC000B36
MOVEQ #0,D0
MOVE.W #$13C,D0
BSR.w lbC000994
ADDQ.L #4,SP
RTS
cnop 0,4
lbW000B8E
dc.w 3
dc.w $2004
dc.w $3004
dc.w $4004
dc.w $5005
dc.w $5805
dc.w $6005
dc.w $6805
dc.w $7005
dc.w $7805
dc.w $8005
dc.w $8805
dc.w $9006
dc.w $9406
dc.w $9806
dc.w $9C06
dc.w $A006
dc.w $A406
dc.w $A806
dc.w $AC06
dc.w $B006
dc.w $B406
dc.w $B806
dc.w $BC06
dc.w $C007
dc.w $C207
dc.w $C407
dc.w $C607
dc.w $C807
dc.w $CA07
dc.w $CC07
dc.w $CE07
dc.w $D007
dc.w $D207
dc.w $D407
dc.w $D607
dc.w $D807
dc.w $DA07
dc.w $DC07
dc.w $DE07
dc.w $E007
dc.w $E207
dc.w $E407
dc.w $E607
dc.w $E807
dc.w $EA07
dc.w $EC07
dc.w $EE07
dc.w $F008
dc.w $F108
dc.w $F208
dc.w $F308
dc.w $F408
dc.w $F508
dc.w $F608
dc.w $F708
dc.w $F808
dc.w $F908
dc.w $FA08
dc.w $FB08
dc.w $FC08
dc.w $FD08
dc.w $FE08
dc.w $FF08
lbC000C4A
LEA -$2078(A3),A6
MOVE.B D3,1(A6,D0.W)
CMP.W #$76,D0
BCC.b lbC000C60
LEA $2000(A6),A2
MOVE.B D3,1(A2,D0.W)
lbC000C60
MOVEQ #2,D2
ADD.W D2,D0
ADD.W D2,D1
MOVE.W #$1FFE,D2
AND.W D2,D0
AND.W D2,D1
MOVE.W D5,-(SP)
MOVE.W D0,-(SP)
MOVE.W D1,D0
bsr.w lbC000820
MOVE.W (SP)+,D0
MOVE.W (SP)+,D5
DBRA D5,lbC000C28
bra.w lbC000B36
;===========================================================================
cnop 0,4
mes0:
dc.b ''
dc.b $0a,$9b,'7;32;41m'
dc.b $1b,'[1m'
dc.b ' »»» LhSFX Archive V1.5 ««« '
dc.b $9b,'0;31;40m'
dc.b $0a,$0a
dc.b $1b,'[3m'
dc.b ' LhSFX Archive V1.0 by Mike Kennedy © 1991',$0a
dc.b ' LhSFX Archive V1.5 by Ralf Thanner © 1992',$0a
dc.b ' Crunch & Decrunch © by Holger Krekel & Olaf Barthel',$0a,$0a
dc.b $1b,'[0m'
mes0end:
mes0leng = mes0end-mes0
even
mes1:
dc.b " Didn't find 'requester.library', now you must use the cli-interface! "
dc.b $0a
mes1end:
mes1leng = mes1end-mes1
even
mOriginal0m
dc.b 10
dc.b $1B
dc.b '[1mOriginal > '
dc.b $1B
dc.b '[0m',0,0
even
mThatfiledoes:
dc.b $1B
dc.b "[3mThat file doesn't exist ..."
dc.b $1B
dc.b '[0m',$A,0
dc.b 0
even
mCannotcompre dc.b $1B
dc.b '[3mCannot compress a directory ...'
dc.b $1B
dc.b '[0m',$A,0
dc.b 0
even
mFileorDispla dc.b 10
dc.b $1B
dc.b '[1m[F]ile or [D]isplay > '
dc.b $1B
dc.b '[0m',0
even
mCompressingP dc.b 10
dc.b $1B
dc.b '[3mCompressing ... Please Wait ...'
dc.b $1B
dc.b '[0m',$A,0
even
mExtractPath0 dc.b 10
dc.b $1B
dc.b '[1mExtract Path > '
dc.b $1B
dc.b '[0m',0,0
even
mDestination0 dc.b 10
dc.b $1B
dc.b '[1mARCHIV NAME > '
dc.b $1B
dc.b '[0m',0
even
pfeil
dc.l $A20BB3E
dc.w $2000
ascii dc.b ' (',0
bytes1 dc.b ' bytes)',$A,0
dc.b 0
even
mCouldntalloc dc.b 10
dc.b $1B
dc.b "[3mCouldn't allocate enough memory ..."
dc.b $1B
dc.b '[0m'
dc.b 7
dc.b 7
dc.b 10
dc.b 0
even
mThatsadirect dc.b 10
dc.b $1B
dc.b "[3mThat's a directory ..."
dc.b $1B
dc.b '[0m',$A
dc.b 7
dc.b 0
even
mFileExistsOv dc.b 10
dc.b $1B
dc.b '[1mArchiv Exists. Overwrite <y/n>? '
dc.b $1B
dc.b '[0m'
dc.b 7
dc.b 0
even
mErrorreading dc.b 10
dc.b $1B
dc.b '[3mError reading or writing file ...'
dc.b $1B
dc.b '[0m'
dc.b 7
dc.b 7
dc.b 10
dc.b 0
even
mArchiveSucce dc.b 10
dc.b $1B
dc.b '[33mArchive Successfully Completed ...',$A,$A
dc.b $1B
dc.b '[0m',$0a,$0a,0
maend
malen=maend-mArchiveSucce
even
mCompressed dc.b 10
dc.b $1B
dc.b '[1mCompressed '
bytestobytes0 dc.b ' bytes to '
bytes0m dc.b ' bytes.'
dc.b $1B
dc.b '[0m',$A
even
mArchiveOpene dc.b 10
dc.b $1B
dc.b '[1mArchive Opened ...'
dc.b $1B
dc.b '[0m',$A
even
mAddedtoArchi dc.b 10
dc.b $1B
dc.b '[1mAdded to Archive ...'
dc.b $1B
dc.b '[0m',$A
cnop 0,4
;--------------------------------------------------------------------
; *** SFX header ***
;--------------------------------------------------------------------
;
; here is still a lot to do, but now it's your turn....
;
; be carefull, don't change a bit coz othewrwise it won't decrunch
; anymore. If you want to improve it you MUST rewrite the complete
; code.
; Mike uses a hard coded reloc table (look at 'how_can_someone_do_
; such_shit') for his header and makes it therfore a little bit
; complicate to change the code... ha ha ha
;
; The rest of the code looked like this part below so you can
; surely imagine that I had some troubles...
;
sfx_hunk
lbL003D00
dc.l $3F3
dc.l 0
dc.l 3
dc.l 0
dc.l 2
dc.l $20F
dc.l $465
dc.l 1
dc.l $3E9
dc.l $20F
decruncher
LEA 0,A1
MOVE.L A1,$318
LEA $2EC,A1 ; Dosname
MOVEA.L 4,A6 ; what about '4.w' ?
JSR -$228(A6) ; OpenLib
MOVE.L D0,$2FC ; Dosbase
BEQ.L lbC003F78
MOVEA.L D0,A6
JSR -$3C(A6) ; Output
MOVE.L D0,$304 ; OutputHandle
LEA $320,A0
BSR.L lbC003F7C
LEA $308,A4
LEA 0,A5
lbC003D70
CMPI.L #$11111111,(A5) ; is it File
BEQ.L lbC003D92
CMPI.L #$22222222,(A5) ; or Display ?
BEQ.L lbC003EB4 ; Show txt and wait mouse
CMPI.L #$FFFFFFFF,(A5)
BEQ.L lbC003F44
BRA.L lbC003F60
lbC003D92 ; file entpacken
LEA $40(A5),A0
MOVE.L A0,0(A4)
MOVE.L 8(A5),4(A4)
MOVE.L 4(A5),12(A4)
MOVE.L 4(A5),D0
BSR.L lbC003FE8 ; AllocMem
BEQ.L lbC003F52
MOVE.L D0,8(A4)
LEA $10(A5),A0
BSR.L lbC003F7C
LEA $10(A5),A0
lbC003DC2
CMPI.B #$2F,(A0)
BEQ.L lbC003DDC ; Create Dir
lbC003DCA
ADDA.L #1,A0
CMPI.B #0,(A0)
BEQ.L lbC003E2C ; No DIr
BRA.L lbC003DC2
lbC003DDC
MOVE.B #0,(A0)
MOVE.L A0,$2F8
LEA $10(A5),A0
MOVE.L A0,D1
MOVE.L #$FFFFFFFE,D2
MOVEA.L $2FC,A6 ; Dosbase
JSR -$54(A6) ; Lock
TST.L D0
BNE.L lbC003E18
LEA $10(A5),A0
MOVE.L A0,D1
MOVEA.L $2FC,A6 ; Dosbase
JSR -$78(A6) ; CreateDir
TST.L D0
BEQ.L lbC003F60
lbC003E18
MOVE.L D0,D1
JSR -$5A(A6) ; Unlock
MOVEA.L $2F8,A0
MOVE.B #$2F,(A0)
BRA.L lbC003DCA
lbC003E2C
LEA $10(A5),A0
MOVE.L A0,D1
MOVE.L #$3Ec,D2 ; Mode RW
MOVEA.L $2FC,A6 ; Dosbase
JSR -$1E(A6) ; OPEN
MOVE.L D0,$300 ; FileHandle
TST.L D0
BNE.S lbC003E50
BRA.L lbC003F6A
lbC003E50
MOVE.L 12(A4),D2
LEA Bytes.MSG(PC),A2
BSR.L lbC003F9A
LEA $2DA,A0
BSR.L lbC003F7C
LEA $308,A0
BSR.L lbC00414C
MOVE.L $300,D1
MOVE.L 8(A4),D2
MOVE.L D0,D3
JSR -$30(A6) ; Write
CMP.W #$FFFF,D0
MOVE.L $300,D1
JSR -$24(A6) ; Close
CLR.L $300
MOVEA.L 8(A4),A1
MOVE.L 12(A4),D0
MOVE.L 4.w,A6
JSR -$D2(A6) ; FreeMem
LEA 8(A5),A0
ADDA.L (A0),A5
ADDA.L #$40,A5
BRA.L lbC003D70
lbC003EB4
LEA $40(A5),A0
MOVE.L A0,0(A4)
MOVE.L 8(A5),4(A4)
MOVE.L 4(A5),12(A4)
MOVE.L 4(A5),D0
BSR.L lbC003FE8 ; AllocMem
BEQ.L lbC003F52
MOVE.L D0,8(A4)
LEA $308,A0
BSR.L lbC00414C
LEA $382,A0
BSR.L lbC003F7C
MOVE.L $304,D1 ; OutputHandle
MOVE.L 8(A4),D2
MOVE.L 12(A4),D3
MOVEA.L $2FC,A6 ; Dosbase
JSR -$30(A6) ; Write
MOVEA.L 8(A4),A1
MOVE.L 12(A4),D0
MOVE.L 4.w,A6
JSR -$D2(A6) ; FreeMem
LEA $386,A0
BSR.L lbC003F7C
lbC003F1E
BTST #6,$BFE001 ; Mouse after display
BNE.L lbC003F1E
LEA $3B2,A0
BSR.L lbC003F7C
LEA 8(A5),A0
ADDA.L (A0),A5
ADDA.L #$40,A5
BRA.L lbC003D70
lbC003F44
LEA $35E,A0
BSR.L lbC003F7C
BRA.L lbC003F6A
lbC003F52
LEA $3F6,A0
BSR.L lbC003F7C
BRA.L lbC003F6A
lbC003F60
LEA $3B4,A0
BSR.L lbC003F7C
lbC003F6A
MOVEA.L $2FC,A1 ; Dosbase
MOVE.L 4.w,A6
JSR -$19E(A6) ; Close Lib
lbC003F78
; CLR.L D0
moveq #0,d0
RTS
lbC003F7C
MOVEA.L A0,A1
lbC003F7E
TST.B (A1)+
BNE.S lbC003F7E
SUBA.L A0,A1
MOVE.L A1,D3
MOVE.L A0,D2
MOVE.L $304,D1 ; OutputHandle
MOVEA.L $2FC,A6 ; Dosbase
JSR -$30(A6) ; WRITE
RTS
lbC003F9A
MOVEQ #7,D0
MOVEA.L A2,A0
LEA lbL003FC8(PC),A1
lbC003FA2
MOVEQ #$30,D1
lbC003FA4
ADDQ.W #1,D1
SUB.L (A1),D2
BCC.S lbC003FA4
SUBQ.W #1,D1
ADD.L (A1),D2
MOVE.B D1,(A0)+
ADDA.L #4,A1 ; Addq.l ???
DBRA D0,lbC003FA2
MOVEA.L A2,A0
lbC003FBC
MOVE.B #$20,(A0)+
CMPI.B #$30,(A0)
BEQ.S lbC003FBC
RTS
lbL003FC8
dc.l $989680
dc.l $F4240
dc.l $186A0
dc.l $2710
dc.l $3E8
dc.l $64
dc.l 10
dc.l 1
lbC003FE8
MOVEM.L D1-D7/A0-A6,-(SP)
MOVE.L #1,D1 ; aaargh...
MOVE.L 4.w,A6
JSR -$C6(A6) ; AllocMem
TST.L D0
MOVEM.L (SP)+,D1-D7/A0-A6
RTS
dc.w $202D
Bytes.MSG
dc.b ' Bytes',$A,0
dc.b 'dos.library',0,0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b 0
dc.b $11
dc.b $94
dc.b 10
dc.b $1B
dc.b '[42;33m LHSFX Archive '
dc.b $1B
dc.b '[0m By '
dc.b $1B
dc.b '[1mMK, MXM & RT'
dc.b $1B
dc.b '[0m '
dc.b $A9
dc.b '1992',$A,$A,0
dc.b 10
dc.b $1B
dc.b '[3mFinished Uncompressing !'
dc.b $1B
dc.b '[0m',$A,$A,0
dc.b $1B
dc.b 'c',0,0
dc.b $1B
dc.b '[23H'
dc.b $1B
dc.b '[41;30m Press Left Mouse Button '
dc.b $1B
dc.b '[0m',0,0
dc.b 10
dc.b 0
dc.b 10
dc.b $1B
dc.b '[1mError in Archive! Bad Checksum or Invali'
dc.b 'd Filetype.'
dc.b $1B
dc.b '[0m',$A,$A
dc.b 7
dc.b 0
dc.b 0
dc.b 10
dc.b $1B
dc.b '[1mUnable to Allocate Enough Memory!'
dc.b $1B
dc.b '[0m',$A,$A
dc.b 7
dc.b 0
lbC00414C
MOVEM.L D2-D7/A2-A6,-(SP)
PEA (A0)
BSR.L lbC0041E4
MOVE.L A1,D0
move.l (sp)+,A0
SUB.L 8(A0),D0
MOVE.L D0,12(A0)
MOVEM.L (SP)+,D2-D7/A2-A6
RTS
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
MOVE.B (A2)+,(A1)+
BRA.L lbC00426C
lbC0041E4
PEA (A0)
MOVEA.L $10(A0),A6
MOVEA.L A6,A0
LEA $C60(A6),A1
LEA $76E(A6),A2
MOVEQ #-2,D0
MOVEQ #0,D3
MOVEQ #1,D1
MOVEQ #2,D2
MOVE.W #$13C,D7
lbC004200
MOVE.W D1,(A0)+
MOVE.W D0,(A1)+
MOVE.W D3,-(A2)
SUB.W D2,D0
ADD.W D2,D3
DBRA D7,lbC004200
MOVEQ #0,D6
MOVE.L #$27A,D7
MOVEA.L A6,A0
LEA $27A(A6),A1
LEA $EDA(A6),A2
LEA $76E(A6),A3
MOVEQ #4,D4
MOVEQ #2,D2
MOVE.W #$13B,D1
lbC00422C
MOVE.W (A0)+,D0
ADD.W (A0)+,D0
MOVE.W D0,(A1)+
MOVE.W D6,(A2)+
MOVE.W D7,(A3)+
MOVE.W D7,(A3)+
ADD.W D4,D6
ADD.W D2,D7
DBRA D1,lbC00422C
MOVE.W D1,(A1)
CLR.W $C5E(A6)
move.l (sp)+,A5
MOVEA.L (A5),A0
MOVEA.L 8(A5),A1
MOVEA.L $10(A5),A6
MOVEA.L A6,A5
LEA $76E(A6),A4
LEA $C60(A6),A3
MOVEQ #1,D4
MOVEQ #15,D5
MOVE.W (A0)+,D6
BRA.S lbC00426C
lbC004264
NEG.W D7
LSR.W D4,D7
SUB.W D4,D7
MOVE.B D7,(A1)+
lbC00426C
MOVE.W $4F0(A3),D7
lbC004270
ADD.W D6,D6
BCC.L lbC004288
MOVE.W 2(A3,D7.W),D7
DBMI D5,lbC004270
BMI.L lbC004292
lbC004282
MOVEQ #15,D5
MOVE.W (A0)+,D6
BRA.S lbC004270
lbC004288
MOVE.W 0(A3,D7.W),D7
DBMI D5,lbC004270
BPL.S lbC004282
lbC004292
DBRA D5,lbC00429A
MOVE.W (A0)+,D6
MOVEQ #15,D5
lbC00429A
CMPI.W #$8000,$4F0(A5)
BEQ.L lbC0042F8
MOVE.W 0(A4,D7.W),D0
lbC0042A8
LEA 0(A5,D0.W),A2
MOVE.W (A2),D1
ADD.W D4,D1
MOVE.W D1,(A2)+
CMP.W (A2)+,D1
BLS.S lbC0042F2
lbC0042B6
CMP.W (A2)+,D1
BHI.S lbC0042B6
SUBQ.L #4,A2
MOVE.L A2,D2
SUB.L A5,D2
MOVE.W (A2),0(A5,D0.W)
MOVE.W D1,(A2)
MOVE.W 0(A3,D0.W),D1
BMI.S lbC0042D0
MOVE.W D2,2(A4,D1.W)
lbC0042D0
MOVE.W D2,0(A4,D1.W)
MOVE.W 0(A3,D2.W),D3
BMI.S lbC0042DE
MOVE.W D0,2(A4,D3.W)
lbC0042DE
MOVE.W D1,0(A3,D2.W)
MOVE.W D0,0(A4,D3.W)
MOVE.W D3,0(A3,D0.W)
MOVE.W 0(A4,D2.W),D0
BNE.S lbC0042A8
BRA.S lbC0042F8
lbC0042F2
MOVE.W 0(A4,D0.W),D0
BNE.S lbC0042A8
lbC0042F8
CMPI.W #$FE00,D7
BGE.L lbC004264
CMPI.W #$FD86,D7
BGT.S lbC004308
RTS
lbC004308
ROL.W #8,D6
SUBQ.W #7,D5
BCC.S lbC004328
MOVEQ #0,D3
MOVE.W (A0)+,D3
SWAP D3
NEG.W D5
ROL.L D5,D3
MOVE.W D3,D1
OR.B D6,D1
SWAP D3
MOVE.W D3,D6
NEG.W D5
MOVEQ #15,D2
ADD.W D2,D5
BRA.S lbC004336
lbC004328
MOVEQ #0,D1
MOVE.B D6,D1
CLR.B D6
DBRA D5,lbC004336
MOVE.W (A0)+,D6
MOVEQ #15,D5
lbC004336
MOVE.W D1,D3
ADD.W D3,D3
MOVE.W lbW004364(PC,D3.W),D3
CLR.W D2
MOVE.B D3,D2
CLR.B D3
LSR.W #2,D3
lbC004346
ADD.W D6,D6
ADDX.W D1,D1
DBRA D5,lbC004352
MOVEQ #15,D5
MOVE.W (A0)+,D6
lbC004352
DBRA D2,lbC004346
ANDI.W #$3F,D1
OR.W D3,D1
LEA (A1),A2
SUBA.W D1,A2
JMP lbL0043E0(PC,D7.W)
lbW004364
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w $101
dc.w $101
dc.w $101
dc.w $101
dc.w $101
dc.w $101
dc.w $101
dc.w $101
dc.w $101
dc.w $101
dc.w $101
dc.w $101
dc.w $101
dc.w $101
dc.w $101
dc.w $101
dc.w $201
dc.w $201
dc.w $201
dc.w $201
dc.w $201
dc.w $201
dc.w $201
dc.w $201
dc.w $201
dc.w $201
dc.w $201
dc.w $201
dc.w $201
dc.w $201
lbL0043E0
dc.l $2010201
dc.l $3010301
dc.l $3010301
dc.l $3010301
dc.l $3010301
dc.l $3010301
dc.l $3010301
dc.l $3010301
dc.l $3010301
dc.l $4020402
dc.l $4020402
dc.l $4020402
dc.l $4020402
dc.l $5020502
dc.l $5020502
dc.l $5020502
dc.l $5020502
dc.l $6020602
dc.l $6020602
dc.l $6020602
dc.l $6020602
dc.l $7020702
dc.l $7020702
dc.l $7020702
dc.l $7020702
dc.l $8020802
dc.l $8020802
dc.l $8020802
dc.l $8020802
dc.l $9020902
dc.l $9020902
dc.l $9020902
dc.l $9020902
dc.l $A020A02
dc.l $A020A02
dc.l $A020A02
dc.l $A020A02
dc.l $B020B02
dc.l $B020B02
dc.l $B020B02
dc.l $B020B02
dc.l $C030C03
dc.l $C030C03
dc.l $D030D03
dc.l $D030D03
dc.l $E030E03
dc.l $E030E03
dc.l $F030F03
dc.l $F030F03
dc.l $10031003
dc.l $10031003
dc.l $11031103
dc.l $11031103
dc.l $12031203
dc.l $12031203
dc.l $13031303
dc.l $13031303
dc.l $14031403
dc.l $14031403
dc.l $15031503
dc.l $15031503
dc.l $16031603
dc.l $16031603
dc.l $17031703
dc.l $17031703
dc.l $18041804
dc.l $19041904
dc.l $1A041A04
dc.l $1B041B04
dc.l $1C041C04
dc.l $1D041D04
dc.l $1E041E04
dc.l $1F041F04
dc.l $20042004
dc.l $21042104
dc.l $22042204
dc.l $23042304
dc.l $24042404
dc.l $25042504
dc.l $26042604
dc.l $27042704
dc.l $28042804
dc.l $29042904
dc.l $2A042A04
dc.l $2B042B04
dc.l $2C042C04
dc.l $2D042D04
dc.l $2E042E04
dc.l $2F042F04
dc.l $30053105
dc.l $32053305
dc.l $34053505
dc.l $36053705
dc.l $38053905
dc.l $3A053B05
dc.l $3C053D05
dc.l $3E053F05
how_can_someone_do_such_shit:
dc.l $3EC
dc.l $1D
dc.l 0
dc.l 8
dc.l 14
dc.l $1E
dc.l $2E
dc.l $34
dc.l $3E
dc.l $BA
dc.l $CC
dc.l $E2
dc.l $F8
dc.l $112
dc.l $11C
dc.l $136
dc.l $140
dc.l $14A
dc.l $15E
dc.l $168
dc.l $1B2
dc.l $1BC
dc.l $1C6
dc.l $1D4
dc.l $1EE
dc.l $204
dc.l $21E
dc.l $22C
dc.l $23A
dc.l $244
dc.l $262
dc.l $268
dc.l 1
dc.l 1
dc.l 2
dc.l 1
dc.l 2
dc.l $44
dc.l 0
dc.l $3F2
dc.l $3EB
dc.l $465
dc.l $3F2
dc.l $3EA
dc.l 1
end_of_sfx
sfx_len= end_of_sfx-sfx_hunk