.386
.model	tiny,c
.stack	0

tmake	segment	use16
assume	cs:tmake,ds:tmake,es:tmake
org	100h

prog:		jmp	near ptr progr

aptuf		equ	0

pmeret		equ	16384
elmer		equ	512+aptuf+1024-2

jelzo		db	0
mutato		dd	188
ifile		dw	0
ofile		dw	0
bseg		dw	0
boffs		dw	0
tseg		dw	0
toffs		dw	0
useg0		dw	0
useg1		dw	0
useg2		dw	0
useg3		dw	0
uzenet		dw	0
mennyit		dw	0
szoseg		dw	0
szavmut		dd	0
szbyt		db	0
attr		db	0
szavacska	db	34 dup(0)
ksbyt		db	0
nagybet		db	0
szohossz	dw	0
aktszo		dw	0
szocska		db	64 dup(0)
blokker		dw	0
szocskho	dw	0
olvnev		dw	0
kiterj		dw	0
ziptab		db	184 dup(0)
sorszam		dw	0
dseg		dw	36 dup(0)
vesa		dw	36 dup(0)
blokk		dw	1296 dup(0)
kseg		dw	0
asctab		db	" a oąuŁiĄebcdfghjklmnpqrstvwxyz"
		db	"AOUIEBCDFGHJKLMNPQRSTVWXYZ"
		db	"0123456789-/\'>$%*`(<[+=&@#]",34
		db	" .,;:?!){}Ä~",0,13,10,9
htx1		db	"Nincs elg szabad t r.",13,10,36
htx2		db	"Hi nyzą forr s.",13,10,36
htx3		db	"Hib s vagy nem ltez <$"
htx4		db	"> file.",13,10,36
htx5		db	"Rendben.",13,10,36
htx6		db	"Sz ml l s... $"
htx7		db	"T rol s... $"
cimbex		db	13,24,22,29, 3,0,0,0,0,0,32,19,28,17,16,33
		db	48,59,57,64,38,0,0,0,0,0,67,54,63,52,51,68
szam		dw	0
suttog		dw	0,0
vegszo		db	64 dup(0)
siptab		db	184 dup(0)
elpuf		dw	0
uan		db	0
aktum		dw	0,0

progr:		push	512
		mov	bx,70000/16+1
		popf
		mov	ah,4ah
		int	21h

		mov	ax,pmeret
		call	fogl
		jc	mhiba
		mov	bseg,ax
		mov	ax,pmeret
		call	fogl
		jc	mhiba
		mov	tseg,ax
		mov	ax,65535
		call	fogl
		jc	mhiba
		mov	useg0,ax
		mov	ax,65535
		call	fogl
		jc	mhiba
		mov	useg1,ax
		mov	ax,65535
		call	fogl
		jc	mhiba
		mov	useg2,ax
		mov	ax,65535
		call	fogl
		jc	mhiba
		mov	useg3,ax
		mov	ax,1024
		call	fogl
		jc	mhiba
		mov	kseg,ax
		mov	ax,elmer+2
		call	fogl
		jc	mhiba
		mov	elpuf,ax

		mov	si,80h
		movzx	cx,byte ptr [si]
		mov	dx,offset htx2
		jcxz	hiba
		dec	cx
		inc	si
		mov	di,offset progr
		inc	si
		push	ds
		mov	dx,si
		pop	es
		rep	movsb
		mov	byte ptr [si],"."
		movsb
		mov	olvnev,dx
		mov	kiterj,si
		mov	dword ptr [si],"cfd"
		mov	dword ptr [di],"sdt"
		mov	ax,3d00h
		int	21h
		jnc	hibok
dfhiba:		push	cs
		pop	ds
fhiba:		mov	si,82h
		jmp	hhiba
cshiba:		push	cs
		pop	ds
chiba:		mov	si,offset progr
hhiba:		mov	dx,offset htx3
		mov	ah,9
		int	21h
		mov	cx,64
		mov	ah,2
hikir:		mov	dl,[si]
		or	dl,dl
		jz	hixir
		int	21h
		inc	si
		loop	hikir
hixir:		mov	dx,offset htx4
hiba:		mov	ah,9
		int	21h
		int	20h
hibok:		mov	ofile,ax

		mov	dx,offset ziptab
		mov	cx,184+2+2*36+2*36+2*1296
		mov	bx,ofile
		mov	ah,3fh
		int	21h
		jc	fhiba
		push	ds
		pop	es
		mov	cx,92
		mov	si,offset ziptab
		mov	di,offset siptab
		rep	movsw
		mov	ax,sorszam
		add	ax,ax
		add	ax,ax
		call	fogl
		jnc	hihib
mhiba:		mov	dx,offset htx1
		jmp	hiba
hihib:		mov	szoseg,ax
		xor	si,si
secikl:		mov	ax,dseg[si]
		or	ax,ax
		jz	sgures
		inc	ax
		push	si
		call	fogl
		pop	si
		jc	mhiba
		mov	cx,vesa[si]
		mov	dseg[si],ax
		jcxz	sgures
		push	cx
		mov	ds,bseg
		push	si
		xor	dx,dx
		mov	bx,cs:ofile
		mov	ah,3fh
		int	21h
		pop	si
		pop	cx
		jc	dfhiba
		push	si
		xor	di,di
		xor	si,si
		call	unpack
		;call	unzip
		;push	es
		;pop	ds
		pop	bx
		push	bx
		shr	bx,1
		mov	al,72
		push	cs
		mul	bl
		pop	es
		add	ax,offset blokk
		xchg	ax,di
xlolp:		mov	ax,-1
		scasw
		je	bltov
		push	di
		push	es
		mov	es,es:szoseg
blszo:		cmp	si,cx
		jae	blujb
		mov	bp,si
		lodsw
		or	al,al
		js	dlujb
		lodsb
		and	ax,31
		add	si,ax
		lodsw
		add	al,al
		add	ax,ax
		xchg	ax,di
		xchg	ax,bp
		stosw
		mov	ax,bx
		stosw
		jmp	blszo
dlujb:		dec	si
blujb:		pop	es
		pop	di
bltov:		inc	bh
		cmp	bh,36
		jb	xlolp
		push	es
		pop	ds
		pop	si
sgures:		inc	si
		inc	si
		cmp	si,2*36
		jb	secikl
		mov	bx,ofile
		mov	ah,3eh
		int	21h

		mov	si,kiterj
		mov	dword ptr [si],"gsd"
		mov	dx,olvnev
		mov	ax,3d00h
		int	21h
		jc	fhiba
		mov	ofile,ax
		mov	dx,offset htx6
		mov	ah,9
		int	21h
		mov	si,80h
		mov	cx,32
npush:		push	dword ptr ds:[si]
		add	si,4
		loop	npush
		mov	fs,bseg
		mov	gs,kseg
ujszov:		call	beszov
		jc	igazi
		jcxz	ujszov
		mov	bp,cx
ujuj:		lodsb	fs:[si]
		or	al,al
		jz	szamol
		cmp	al,89
		jae	szamol
		call	szip
		jnc	szoval
szamol:		and	eax,255
		inc	dword ptr gs:[4*eax]
nemszam:	dec	bp
		jnz	ujuj
		jmp	ujszov
szoval:		and	eax,3fffh
		mov	es,useg0
		inc	dword ptr es:[4*eax]
		jmp	nemszam

igazi:		mov	bx,ofile
		mov	ah,3eh
		int	21h
		mov	si,80h+(32-1)*4
		mov	cx,32
npop:		pop	dword ptr ds:[si]
		sub	si,4
		loop	npop
		push	ds
		mov	di,offset ziptab
		mov	cx,120
		pop	es
kisker:		xor	ebx,ebx
		lea	esi,ds:[255]
nagyker:	cmp	ebx,gs:[4*esi]
		jg	nagytov
		mov	ebx,gs:[4*esi]
		mov	eax,esi
nagytov:	dec	esi
		jns	nagyker
		mov	gs:[4*eax],esi
		stosb
		loop	kisker
		mov	gs,useg0
		mov	cx,32
sisker:		xor	ebx,ebx
		lea	esi,ds:[3fffh]
sagyker:	cmp	ebx,gs:[4*esi]
		jg	sagytov
		mov	ebx,gs:[4*esi]
		mov	eax,esi
sagytov:	dec	esi
		jns	sagyker
		mov	gs:[4*eax],esi
		stosw
		loop	sisker
		mov	dx,olvnev
		mov	ax,3d00h
		int	21h
		jc	fhiba
		mov	ofile,ax
		mov	dx,offset progr
		mov	ah,3ch
		int	21h
		jc	chiba
		mov	ifile,ax
		mov	dx,offset htx7
		mov	ah,9
		int	21h
		mov	dx,offset ziptab
		mov	cx,184
		mov	bx,ifile
		mov	ah,40h
		int	21h
		inc	uzenet
		mov	dx,offset uzenet
		mov	cx,4
		mov	ah,40h
		int	21h
		dec	uzenet
		mov	cx,uzenet
		jz	siker
		mov	ds,useg3
		xor	dx,dx
		mov	ah,40h
		int	21h
		jc	cshiba
		mov	ah,40h
		int	21h
		jc	cshiba
		mov	ah,40h
		int	21h
		jc	cshiba
		mov	ah,40h
		int	21h
		jc	cshiba
		push	cs
		movzx	eax,cx
		pop	ds
		shl	eax,2
		mov	uzenet,0
		add	mutato,eax
		mov	fs,bseg
bebek:		call	beszov
		jc	siker
		mov	es,tseg
		stosw
		jcxz	semmi
		;call	szvip
		call	zip
semmi:		mov	es:[0],cx
		mov	bx,ifile
		inc	cx
		push	es
		xor	dx,dx
		inc	cx
		pop	ds
		mov	ah,40h
		int	21h
		jc	cshiba
		push	cs
		pop	ds
		add	mennyit,cx
		mov	eax,mutato
		mov	di,uzenet
		dec	di
		mov	es,useg1
		mov	es:[di],ah
		mov	es,useg0
		stosb
		dec	di
		shr	eax,16
		mov	es,useg3
		mov	es:[di],ah
		mov	es,useg2
		stosb
		mov	ax,cx
		add	mutato,eax
		jmp	bebek

siker:		mov	bx,ofile
		mov	ah,3eh
		int	21h
		mov	dx,186
		xor	cx,cx
		mov	bx,ifile
		mov	ax,4200h
		int	21h
		jc	chiba
		mov	dx,offset mennyit
		mov	cx,2
		mov	ah,40h
		int	21h
		jc	chiba
		xor	si,si
		cmp	si,uzenet
		jae	cisemm
ximbex:		mov	es,useg3
		mov	ah,es:[si]
		mov	es,useg2
		mov	al,es:[si]
		shl	eax,16
		mov	es,useg1
		mov	ah,es:[si]
		mov	es,useg0
		lodsb	es:[si]
		mov	dx,offset mutato
		mov	mutato,eax
		mov	cx,4
		mov	ah,40h
		int	21h
		jc	chiba
		cmp	si,uzenet
		jb	ximbex
cisemm:		mov	ah,3eh
		int	21h
		mov	dx,offset htx5
		mov	ah,9
		int	21h
		int	20h
;------------------------------------------------------------------------------

;------------------------------------------------------------------------------
olvalt:		mov	bx,ofile
		mov	cx,1
		mov	dx,81h
		mov	ah,3fh
		int	21h
		jc	olveg
		cmp	al,1
		jb	olveg
		mov	al,ds:[81h]
		cmp	al,"["
		je	megje
		cmp	al,"{"
		je	megje
		cmp	al,"\"
		je	ujfile
		push	ds
		mov	cx,htx1-asctab
		mov	di,offset asctab
		pop	es
		repne	scasb
		mov	ax,di
		sub	ax,offset asctab+1
olveg:		ret
megje:		add	al,2
		xchg	ax,bx
megev:		push	bx
		mov	cx,1
		mov	dx,81h
		mov	ah,3fh
		mov	bx,ofile
		int	21h
		pop	bx
		jc	olveg
		cmp	al,1
		jb	olveg
		mov	al,ds:[81h]
		cmp	al,bl
		jne	megev
		jmp	olvalt
ujfile:		mov	cx,64
		inc	dx
		mov	ah,3fh
		int	21h
		jc	fhiba
		mov	cx,ax
		mov	di,dx
		jcxz	megvan
megcikl:	cmp	byte ptr [di],33
		jb	megvan
		inc	di
		loop	megcikl
megvan:		mov	[di],ch
		mov	ah,3eh
		int	21h
		mov	ax,3d00h
		int	21h
		jc	fhiba
		mov	ofile,ax
		jmp	olvalt

olvtov:		call	olvalt
		jc	tolveg
		or	al,al
		jz	olvtov
		cmp	al,112
		jae	olvtov
		clc
tolveg:		ret
;------------------------------------------------------------------------------

;------------------------------------------------------------------------------
beszov:		mov	es,bseg		;	Betlt egy szveget BSEG-be.
		xor	di,di
		xor	cx,cx
beszop:		push	di
		push	es
		call	olvalt
		pop	es
		pop	di
		jc	tolveg
		cmp	al,91
		jne	beszop
besziv:		push	di
		push	es
		call	olvalt
		pop	es
		pop	di
		jc	bescxz
xembesz:	cmp	al,85
		je	bescxz
		cmp	al,88
		je	bembex
bembesz:	cmp	al,112
		jae	beszel
bebesz:		stosb
bebev:		jmp	besziv
beszel:		xor	al,al
		or	di,di
		mov	ah,es:[di-1]
		jz	bebesz
		cmp	al,ah
		je	bebev
		cmp	ah,96
		jb	bebesz
		cmp	ah,112
		jb	bebev
		jmp	bebesz
bembex:		push	di
		push	es
		call	olvalt
		pop	es
		pop	di
		jc	bescxz
		mov	bx,31
bebcikl:	cmp	al,cimbex[bx]
		je	bebmegv
		dec	bx
		jns	bebcikl
bexi:		cmp	al,71
		jb	bexegc
		cmp	al,81
		jae	bexegv
		sub	al,71
		xchg	ax,bx
		xor	bh,bh
		mov	ax,10
		mul	szam
		add	ax,bx
		mov	szam,ax
		push	di
		push	es
		call	olvalt
		pop	es
		pop	di
		jnc	bexi
bexegv:		cmc
bexegc:		pushf
		push	ax
		xor	ax,ax
		cmp	ax,szam
		je	xembex
		xchg	ax,szam
		stosb
xembex:		pop	ax
		popf
		jc	xembesz
bescxz:		mov	cx,di
		xor 	si,si
		xor	di,di
		inc	uzenet
		ret
bebmegv:	xchg	ax,bx
		and	al,15
		add	al,112

		cmp	al,122
		jb	bebesz
		cmp	al,127
		jae	bebesz
xexex:		push	ax
		jmp	exex
exi:		cmp	al,71
		jb	exegc
		cmp	al,81
		jae	exegv
		sub	al,71
		xchg	ax,bx
		xor	bh,bh
		mov	ax,10
		mul	szam
		add	ax,bx
		mov	szam,ax
exex:		push	di
		push	es
		call	olvalt
		pop	es
		pop	di
		jnc	exi
exegv:		cmc
exegc:		xchg	ax,dx
		pop	ax
		pushf
		xor	bx,bx
		cmp	al,117
		xchg	bx,szam
		jb	nesb
		or	bx,bx
		jz	nulla
		stosb
nesb:		mov	ax,bx
		cmp	ax,64
		jb	num3
		cmp	ax,4096
		jb	num2
num1:		shr	ax,12
		or	al,64
		stosb
		mov	ax,bx
		and	ax,4095
num2:		shr	ax,6
		or	al,64
		stosb
		xchg	ax,bx
		and	ax,63
num3:		stosb
		popf
		xchg	ax,dx
		jnc	bescxz
		cmp	al,82
		jne	xembesz
		or	byte ptr es:[di-1],128
		jmp	xexex
nulla:		popf
		xchg	ax,dx
		jc	xembesz
		jmp	bescxz
;------------------------------------------------------------------------------

;------------------------------------------------------------------------------
fogl:		or	ax,ax
		jz	nemfogl
		mov	bx,ax
		shr	bx,4
		and	al,15
		jz	lefogl
		inc	bx
lefogl:		push	bx
		mov	ah,48h
		int	21h
		pop	cx
		jc	nemfogl
		push	ax
		add	cx,cx
		mov	es,ax
		add	cx,cx
		xor	di,di
		xor	eax,eax
		rep	stosd
		pop	ax
nemfogl:	ret
;------------------------------------------------------------------------------

;------------------------------------------------------------------------------
sbelso:		shr	bx,1
		or	bl,128
		jmp	belso

szovan:		cmp	nagybet,-1
		je	nanagy
		mov	bx,62
szoros:		cmp	ax,word ptr ziptab[bx+120]
		je	sbelso
		sub	bl,2
		jns	szoros
		cmp	ah,4
		jae	nenagy
		push	bp
		mov	bl,6
		mov	bp,ax
		jmp	nelso
nanagy:		stc
nenagy:		adc	ax,ax
		push	bp
		mov	bl,7
		mov	bp,ax
		call	beforg
		mov	bx,bp
		mov	cl,10
		shr	bx,cl
nelso:		call	beforg
		mov	bx,bp
		mov	cl,5
		shr	bx,cl
		call	beforg5
		mov	bx,bp
		pop	bp
		jmp	elso

zip:		push	si		;	Szveg betmrĄtse FS:[SI]-bl
		push	di		;	ES:[DI]-be, CX db. byte-ot.
		push	cx
		mov	bp,cx
		or	bp,bp
		mov	ch,16
		jz	zilveg
zilp:		lodsb	fs:[si]
		or	al,al
		jz	nemszo
		cmp	al,89
		jae	nemszo
		call	szip
		jnc	szovan
nemszo:		mov	bx,8
nelp:		cmp	al,ziptab[bx-8]
		je	szomv
		inc	bl
		jns	nelp
		mov	bh,al
		mov	bl,5
		call	beforg
		mov	bl,bh
		jmp	zelso5
szomv:		cmp	bl,32
		jb	elso
belso:		mov	bh,bl
zelso5:		mov	cl,5
		shr	bl,cl
		call	beforg5
		mov	bl,bh
elso:		call	beforg
ziltov:		dec	bp
		jnz	zilp
zilveg:		mov	bx,bp
		call	beforg
		mov	cl,ch
		shl	dx,cl
		cmp	ch,8
		mov	ax,dx
		xchg	al,ah
		stosw
		jb	zilw
		dec	di
zilw:		pop	dx
		jmp	xilw

beforg:		mov	cl,5
beforg5:	sub	ch,cl
		jb	foforg
		shl	dx,cl
		and	bl,31
		or	dl,bl
		ret
foforg:		add	cl,ch
		jz	dxforg
		add	bl,bl
		add	bl,bl
		add	bl,bl
forcl:		add	bl,bl
		adc	dx,dx
		dec	cl
		jnz	forcl
		mov	ax,dx
		xchg	al,ah
		stosw
		mov	cl,ch
forbl:		add	bl,bl
		adc	dx,dx
		inc	cl
		jnz	forbl
		add	ch,16
		ret
dxforg:		mov	ax,dx
		mov	ch,11
		xchg	al,ah
		mov	dl,bl
		stosw
		ret

unzip:		push	si		;	Szveg kitmrĄtse DS:[SI]-bl
		xor	bp,bp
		push	di		;	ES:[DI]-be, CX db. byte-ot.
		mov	bx,bp
		mov	cx,bp
		jmp	unkezd
unzilp:		cmp	bl,8
		jae	tartab
		mov	cl,5
		cmp	bl,4
		jae	csomag
		shl	bl,cl
		mov	bh,bl
		call	kiforg5
		or	bl,bh
		xor	bh,bh
tartab:		mov	al,cs:siptab[bx-8]
teltar:		stosb
unkezd:		call	kiforg
		jnz	unzilp
xilw:		mov	cx,di
		pop	si
		pop	di
		sub	cx,si
		ret
csomag:		je	szavak
		cmp	bl,6
		je	szo10
		ja	szo15
		call	kiforg5
		mov	cl,5
		shl	bl,cl
		mov	bh,bl
		call	kiforg5
		or	bl,bh
		xor	bh,bh
		mov	al,bl
		jmp	teltar
szo15:		call	kiforg5
		mov	bp,bx
		mov	cl,5
		shl	bp,cl
		call	kiforg5
		or	bp,bx
		mov	cl,5
		shl	bp,cl
		call	kiforg5
		or	bp,bx
		mov	ax,bp
		xor	bp,bp
		jmp	szavam
szo10:		call	kiforg5
		or	bp,bx
		mov	cl,5
		shl	bp,cl
		call	kiforg5
		or	bp,bx
		mov	ax,bp
		xor	bp,bp
		jmp	szvamax
szavak:		call	kiforg5
		add	bx,bx
		mov	ax,word ptr cs:siptab[bx+120]
szvamax:	add	ax,ax
szavam:		push	cx
		push	si
		push	ds
		push	cs
		pop	ds
		call	sunzip
		pop	ds
		xor	bx,bx
		pop	si
		mov	bp,bx
		pop	cx
		jmp	unkezd

dkforg:		lodsw
		mov	ch,16
		xchg	al,ah
		mov	dx,ax
kiforg:		mov	cl,5
kiforg5:	sub	ch,cl
		jb	felforg
kifli:		rol	dx,cl
		mov	bl,dl
		and	bl,31
		ret
felforg:	add	cl,ch
		jz	dkforg
kurcl:		rol	dx,1
		adc	bl,bl
		dec	cl
		jnz	kurcl
		lodsw
		mov	cl,ch
		xchg	al,ah
		mov	dx,ax
kurbl:		rol	dx,1
		adc	bl,bl
		inc	cl
		jnz	kurbl
		add	ch,16
		and	bl,31
		ret
;------------------------------------------------------------------------------

;------------------------------------------------------------------------------
nyers:		or	ax,ax		;	Az AX. sząt betlti a sząt rbąl
		jz	rosszo		;	egy pufferba. Kimenet:
		cmp	ax,sorszam	;	DS:[SI] = kezdcĄm,
		jae	rosszo		;	CX = a szą hossza,
		cmp	ax,aktszo	;	AX = sorsz m,
		je	marad		;	CF = 1, ha rossz volt az input,
		mov	aktszo,ax	;	ZF = 0, ha nagybets a szą.
		add	ax,ax
		add	ax,ax
		mov	di,ax
		push	ds
		mov	ds,szoseg
		mov	si,[di]
		mov	ax,[di+2]
		pop	es
		mov	di,offset szbyt
		mov	bx,ax
		and	bx,63
		add	bx,bx
		mov	ds,es:dseg[bx]
		movsw
		jz	vegyes
		stosw
		mov	bl,2
vegyes:		lodsb
		test	al,64
		mov	es:ksbyt,al
		pushf
		and	ax,31
		popf
		mov	cx,ax
		jz	timpike
		jcxz	timpike
		call	kicsom
timpike:	add	al,bl
		shr	cx,1
		jnc	vevex
		movsb
vevex:		push	es
		rep	movsw
		pop	ds
		mov	szohossz,ax
		mov	byte ptr [di],128
		mov	ax,aktszo
marad:		mov	si,offset szavacska
		mov	cx,szohossz
		and	ksbyt,32
		ret
rosszo:		call	marad
		stc
		ret

sunzip:		push	ds
		shr	ax,1		;	KitmrĄtskor tal lt sząt
		pushf			;	teszi be, ahov  kell.
		push	cs
		pop	ds
		push	di
		push	es
		call	nyers
		pop	es
		pop	di
		jc	srro
		popf
		jnc	kisbet
		lodsb
		cmp	al,36
		jae	kiskis
		add	al,35
kiskis:		stosb
		dec	cx
kisbet:		shr	cx,1
		jnc	skisbet
		movsb
skisbet:	rep	movsw
		pop	ds
		ret
srro:		popf
		pop	ds
		ret

kicsom:		push	dx
		push	bp
		push	bx
		call	unzip
		mov	di,si
		pop	bx
		add	di,cx
		pop	bp
		xor	ax,ax
		pop	dx
		xchg	ax,cx
		ret
;------------------------------------------------------------------------------

;------------------------------------------------------------------------------
elso_szo:	mov	al,szocska	;	A "szącska" pufferban lv sząt
		cmp	al,36		;	keressk a sząt rban, ehhez
		jb	kisbesz		;	jelenĄti meg az els illeszked
		cmp	al,71		;	sząt a "szavacska" pufferban.
		jae	kisbesz		;	(Elszr a saj t blokkj ban,
		sub	szocska,35	;	azut n a vegyesblokkban keres.)
		mov	al,-1
kisbesz:	mov	nagybet,al
		mov	ax,szocskho
		cmp	ax,64
		jbe	szocske
		mov	ax,64
		mov	szocskho,ax
szocske:	dec	ax
		jz	vegyszo2
		js	nincszo
		mov	cx,ax
		mov	bx,word ptr szocska
		or	bl,bl
		jz	vegyszo
		or	bh,bh
		jz	vegyszo
		mov	al,36
		cmp	bl,al
		jae	vegyszo
		cmp	bh,al
		jae	vegyszo
		mov	blokker,bx
		add	bx,bx
		mul	bl
		add	al,bh
		adc	ah,ch
		mov	si,ax
		xor	bh,bh
		mov	ax,blokk[si]
bloblok:	mov	cx,dseg[bx]
		cmp	ax,-1
		je	vegyszo
		jcxz	megyszo
		mov	word ptr szavmut,ax
		mov	word ptr szavmut+2,cx

uj_szo:		mov	di,blokker	;	A kvetkez illeszked szą.
		mov	bp,szocskho
		push	ds
		pop	es
		push	ds
		lds	si,szavmut
		jmp	uscikl

megyszo:	or	bx,bx
		jnz	vegyszo
nincszo:	stc
		ret
ujveg:		or	di,di
		pop	ds
		jz	nincszo
vegyszo:	xor	ax,ax
vegyszo2:	mov	bx,ax
		mov	blokker,ax
		jmp	bloblok

suttyo:		lds	si,dword ptr es:suttog
		mov	es:suttog,0
		jmp	sutox

sajblok:	lodsw
		dec	si
		cmp	cl,3
		jb	sajaj
		cmp	ah,es:szocska+2
		jne	austov
sajaj:		mov	bl,al
		and	ax,31
		mov	cx,ax
		add	al,2
		cmp	ax,bp
		ja	xustov
		mov	word ptr es:szavacska,di
		mov	es:szohossz,ax
		mov	di,offset szavacska+2
		jmp	dekezb

csajblok:	jmp	sajblok

ustov:		lodsb
austov:		and	ax,31
sustov:		add	al,2
xustov:		add	si,ax
uscikl:		cmp	es:suttog,0
		jne	suttyo
sutox:		lodsw
		or	al,al
		js	ujveg
		mov	cx,ax
		push	ax
		mov	al,[si]
		test	al,64
		jz	ninus
		push	cx
		mov	cl,al
		push	di
		and	al,32
		mov	di,offset vegszo
		push	bp
		and	cx,31
		stosb
		jz	necsom
		inc	si
		mov	bp,si
		add	bp,cx
		push	bp
		call	kicsom
		pop	bp
		dec	si
		mov	es:suttog+2,ds
		xchg	si,bp
		push	es
		movsw
		pop	ds
		mov	suttog,si
		mov	si,bp
		or	[si],al
necsom:		pop	bp
		pop	di
		pop	cx
ninus:		and	cx,3
		pop	dx
		jz	nemkezb
		cmp	cx,bp
		ja	ustov
		or	di,di
		mov	ax,si
		jnz	csajblok
		inc	si
		mov	di,offset szocska
		repe	cmpsb
		mov	di,0
		xchg	ax,si
		jne	ustov
nemkezb:	lodsb
		mov	bl,al
		and	ax,31
		cmp	ax,bp
		ja	sustov
		mov	cx,ax
		mov	di,offset szavacska
		mov	es:szohossz,ax
dekezb:		shr	cx,1
		jnc	nemcec
		movsb
nemcec:		rep	movsw
		lodsw
		pop	ds
		add	al,al
		mov	suttog,cx
		mov	byte ptr [di],128
		mov	word ptr szavmut,si
		shr	ax,1
		and	bl,32
		mov	word ptr szbyt,dx
		mov	aktszo,ax
		mov	si,offset szavacska
		mov	cx,szohossz
		mov	di,offset szocska
		mov	ksbyt,bl
		ret
;------------------------------------------------------------------------------

;------------------------------------------------------------------------------
szip:		push	ax		;	SzvegtmrĄtskor, az
		push	cx		;	FS:[SI]-bl betlti az ott lv
		push	si		;	sząt, s ellenrzi, benne van-e
		push	di		;	a sząt rban. (Fontos: eltte
		push	es		;	m r be kell olvasni a legels
		mov	cx,bp
		push	cs		;	karaktert egy LODSB-bal!!!)
		mov	di,offset szocska
		pop	es
		jcxz	csip
		cmp	cx,62
		jbe	szippant
		mov	cx,62
		jmp	szippant
szipbe:		lodsb	fs:[si]
		;or	al,al
		;jz	szipveg
		cmp	al,89
		jae	szipveg
szippant:	stosb
		loop	szipbe
szipveg:	mov	wr es:[di],128
		sub	di,offset szocska
		cmp	di,3
		jb	csip
		push	dx
		xor	ax,ax
		test	uan,2
		mov	szocskho,di
		push	bp
		jnz	csup
		mov	aktszo,ax
		mov	aktum,ax
		mov	aktum+2,ax
		call	elso_szo
		jc	csup
szipcik:	cmp	cx,3
		mov	bx,cx
		jb	sziptov
		cmp	cx,aktum+2
		jbe	sziptov
		shr	cx,1
		jnc	szipog
		cmpsb
		jne	sziptov
szipog:		shr	cx,1
		jnc	csipog
		cmpsw
		jne	sziptov
csipog:		repe	cmpsd
		jne	sziptov
		mov	aktum,ax
		mov	aktum+2,bx
sziptov:	call	uj_szo
		jnc	szipcik
		mov	ax,aktum
		or	ax,ax
		mov	bx,aktum+2
		jnz	szup
csup:		pop	bp
		pop	dx
csip:		pop	es
		pop	di
		pop	si
		pop	cx
		pop	ax
		stc
		ret
szup:		pop	bp
		pop	dx
		pop	es
		pop	di
		dec	bx
		pop	si
		sub	bp,bx
		add	si,bx
		pop	cx
		pop	bx
		ret
;------------------------------------------------------------------------------

;include <szvip.asm>

include	<parancs.asm>
include	<pack.asm>

tmake	ends

end	prog
