OBJECT	=	1

	section Amiga_Rulez,code

	move.l	sp,stack

	move.l	#dosname,a1
	move.l	4,a6
	jsr	-408(a6)
	move.l	d0,dosbase

	move.l	#gfxname,a1
	move.l	4,a6
	jsr	-408(a6)
	move.l	d0,gfxbase

	bsr.w	program

	bsr.w	openreq

main:
	bsr.w	clearadrtab
	move.l	#alloctable,alloctableadr
	clr.w	labnum
	clr.l	labsize
	clr.l	ssek
	clr.l	sek
	clr.l	min

	lea	menu,a1
	lea	menugads,a2
	bsr.w	requester
	tst.b	d0
	beq.w	exit
	cmp.b	#2,d0
	beq.w	doc

	move.l	#ssource,tytul
	bsr.w	request
	move.l	a0,sors

	move.l	sors,a0
	jsr	filesize
	tst.l	d0
	beq.W	error
	add.l	#1,d0
	move.l	d0,sorssize

	move.l	sorssize,d0
	bsr.w	alloc
	tst.l	d0
	beq.W	dealloc
	move.l	d0,sorsadres

	move.l	sorsadres,d0
	move.l	sorssize,d1
	move.l	sors,a0
	jsr	read
	tst.l	d0
	bne.W	enddealloc

	move.l	sorsadres,a0
	add.l	sorssize,a0
	clr.b	-(a0)

	move.l	sorsadres,a0
	cmp.l	#$f9faf9fa,(a0)
	bne.s	nosavedmarks

	add.l	#40,sorsadres
	sub.l	#40,sorssize

nosavedmarks:
	move.l	sorssize,d0
	move.l	d0,d1
	asr.l	#1,d1
	add.l	d1,d0
	move.l	d0,long

	move.l	4,a6
	move.l	#$20000,d1
	jsr	-216(a6)
	move.l	d0,availmem

	move.l	#ework,tytul
	bsr.w	getlong
	move.l	#estring,tytul
	bsr.w	getstring
	move.l	long,destsize

	move.l	destsize,d0
	bsr.w	alloc
	tst.l	d0
	beq.w	enddealloc
	move.l	d0,nowy

	bsr.w	sysoff

	bsr.w	liczetykiety
	mulu	#6,d0
	move.l	d0,adressize

	move.l	labsize,d0
	bsr.w	alloc
	tst.l	d0
	beq.w	enddealloc
	move.l	d0,etykiety

	move.l	adressize,d0
	bsr.w	alloc
	tst.l	d0
	beq.w	enddealloc
	move.l	d0,adresy

	move.l	nowy,endadr
	move.l	destsize,d0
	subq	#1,d0
	add.l	d0,endadr
	lea	adrtab,a3
	move.l	adresy,a2
	move.l	etykiety,a1
	move.l	sorsadres,a0
	lea	tabela,a5
	clr.w	d0
	clr.w	d2
	bra.w	czyetykieta
findloop:
	move.b	(a0)+,d0
	tst.b	d0
	beq.s	findend
	cmp.b	#10,d0
	beq.w	czyetykieta
	bra.s	findloop
findend:
	move.l	sorsadres,a0
	lea	kawaleczek,a2
	move.l	nowy,a3
	lea	tabela,a6
	lea	comptable,a7
	clr.w	d0
	clr.w	d1
	clr.w	d3
przeploop:
	move.w	#$44f,$dff180
przeploop2:
	move.b	(a0)+,d0	; a0 - sors
	beq.w	amen
	btst	#6,$bfe001
	beq.w	edzio
	tst.b	(a7,d0.w)	; koniec slowa ?
	bgt.s	konieck
	bmi.b	special
	move.b	(a6,d0.w),(a2)	; litera -> kawaleczek
	add.b	(a2)+,d3	; d3 - suma kontrolna
	add.w	d3,d3
	move.b	d0,(a3)+	; litera -> nowy
	cmp.l	endadr,a3
	beq.w	eowork
	bra.s	przeploop2
konieck:
	cmpa.l	#kawaleczek,a2	; koniec slowa
	beq.b	dowidzenia
	clr.b	(a2)
	lea	adrtab,a2
	tst.b	(a2,d3.w)
	beq.s	dowidzenia
	lea	kawaleczek,a2
	move.l	adresy,a1
	move.w	#$200,$dff180
kloop:
	move.l	(a1)+,a5	; kolejny adres
	cmpa.l	#0,a5
	beq.s	dowidzenia
	cmp.w	(a1)+,d3	; chksum
	bne.s	kloop		; nie zgadza sie
	move.l	a2,a4
sprawdz:
	move.b	(a5)+,d1
	beq.s	hurra
	cmp.b	(a4)+,d1	; porownanie znakow
	beq.s	sprawdz
	bra.s	kloop

special:
	cmp.b	#';',d0
	beq.s	comment
text:
	move.b	d0,(a3)+
	cmp.l	endadr,a3
	beq.w	eowork
textloop:
	move.b	(a0)+,d1
	beq.w	edzio
	move.b	d1,(a3)+
	cmp.l	endadr,a3
	beq.w	eowork
	cmp.b	d0,d1
	bne.s	textloop
	bra.w	przeploop

dowidzenia:
	clr.w	d3
	move.b	d0,(a3)+
	cmp.l	endadr,a3
	beq.w	eowork
	lea	kawaleczek,a2
 	bra.w	przeploop

hurra:
	tst.b	(a4)		
	bne.s	kloop
	move.w	#$fff,$dff180	; rowne !
	move.l	chars,a2	
	add.l	#1,extnum
addloop:
	move.b	(a2)+,d2	; dodaje koncowke
	beq.s	dowidzenia
	move.b	d2,(a3)+
	cmp.l	endadr,a3
	beq.w	eowork
	bra.s	addloop

comment:
	move.b	d0,(a3)+
	cmp.l	endadr,a3
	beq.w	eowork
commentloop:
	move.b	(a0)+,d0
	beq.w	przeploop
	move.b	d0,(a3)+
	cmp.l	endadr,a3
	beq.w	eowork
	cmp.b	#10,d0
	bne.s	commentloop
	bra.w	przeploop

sysoff:
	movem.l	d0/d1/a0/a1,-(sp)
	move.l	gfxbase,a6
	move.l	34(a6),view
	suba.l	a1,a1
	jsr	-222(a6)
	bsr.w	addinterrupt
	move.l	4.w,a6
	jsr	-132(a6)
	move.w	#%0000000110100000,$dff096
	movem.l	(sp)+,d0/d1/a0/a1
	rts

syson:
	movem.l	d0/d1/a0/a1,-(sp)
	move.l	gfxbase,a6
	move.l	view,a1
	jsr	-222(a6)
	move.l	4.w,a6
	jsr	-138(a6)
	move.w	#%1000000110100000,$dff096
	bsr.w	removeinterrupt
	movem.l	(sp)+,d0/d1/a0/a1
	rts

amen:
	move.l	stack,sp
	bsr.b	syson

	move.l	a3,nowyend

	sub.l	nowy,a3
	move.l	a3,nowysize

	lea	infotext,a1
	lea	supergad,a2
	lea	sorssize,a4
	bsr.w	requester

	move.l	#sdest,tytul
	bsr.w	request
	move.l	a0,dest

	move.l	dest,a0
	move.l	nowy,d0
	move.l	nowyend,d1
	sub.l	nowy,d1
	bsr.w	write

	jsr	dealloc

	bra.w	main

czyetykieta:
	move.b	(a0),d0
	cmp.b	#"	",d0
	beq.w	findloop
	cmp.b	#0,d0
	beq.w	findloop
	cmp.b	#" ",d0
	beq.w	findloop
	cmp.b	#";",d0
	beq.w	findloop
	cmp.b	#10,d0
	beq.w	findloop
	move.l	a1,(a2)+
	move.w	#0,$dff180
	clr.w	d1
cepetla:
	move.b	(a0)+,d0
	cmp.b	#":",d0
	beq.s	zpowrotem
	cmp.b	#"	",d0
	beq.s	zpowrotem
	cmp.b	#0,d0
	beq.s	zpowrotem
	cmp.b	#10,d0
	beq.s	zpowrotem
	add.b	(a5,d0.w),d1
	add.w	d1,d1
	move.b	(a5,d0.w),(a1)+
	bra.s	cepetla
zpowrotem:
	move.b	#'!',(a3,d1.w)
	move.w	d1,(a2)+
	move.b	#0,(a1)+
	move.w	#$fff,$dff180
	bra.w	findloop

alloc:
	movem.l	d1-d7/a0-a6,-(sp)
	addq.l	#3,d0
	and.l	#$fffffffe,d0
	move.l	d0,-(sp)
	move.l	4,a6
	move.l	#$10000,d1
	jsr	-198(a6)
	move.l	(sp)+,d1
	move.l	alloctableadr,a0
	move.l	d0,(a0)+
	move.l	d1,(a0)+
	move.l	a0,alloctableadr
	movem.l	(sp)+,d1-d7/a0-a6
	rts

dealloc:
	lea	alloctable,a0
deallloop:
	move.l	(a0),a1
	clr.l	(a0)+
	cmp.l	#0,a1
	beq.s	deend
	move.l	(a0)+,d0
	addq.l	#1,d0
	and.l	#$fffffffe,d0
	movem.l	d0-d7/a0-a6,-(sp)
	move.l	4,a6
	jsr	-210(a6)
	movem.l	(sp)+,d0-d7/a0-a6
	bra.s	deallloop
deend:
	moveq	#0,d0
	rts

; a0 - name
; d0 - adr
; d1 - len

; d0 - 0:OK
; d0 - 1:ERROR

write:
	movem.l	d0-d1,-(sp)
	move.l	a0,d1
	move.l	dosbase,a6
	move.l	#1006,d2
	jsr	-30(a6)

	tst.l	d0
	beq.s	wrerr

	movem.l	(sp)+,d2-d3

	move.l	d0,file
	move.l	d0,d1
	move.l	dosbase,a6
	jsr	-48(a6)

	move.l	file,d1
	move.l	dosbase,a6
	jsr	-36(a6)

	moveq	#0,d0
	rts
wrerr:
	movem.l	(sp)+,d0-d1
	move.l	stack,sp
	bsr.w	dealloc
	lea	werrtext,a1
	lea	grrgad,a2
	bsr.w	requester
	bra.w	main

werrtext:
	dc.b	'Write error !',0

alloctableadr:
	dc.l	alloctable

; a0 - name
; d0 - adr
; d1 - len

; d0 - 0:OK
; d0 - 1:ERROR

read:
	movem.l	d0-d1,-(sp)
	move.l	a0,d1
	move.l	dosbase,a6
	move.l	#1005,d2
	jsr	-30(a6)

	tst.l	d0
	beq.s	rerr

	movem.l	(sp)+,d2-d3

	move.l	d0,file
	move.l	d0,d1
	move.l	dosbase,a6
	jsr	-42(a6)

	move.l	dosbase,a6
	jsr	-132(a6)
	tst.l	d0
	bne.s	rerr2

	move.l	file,d1
	move.l	dosbase,a6
	jsr	-36(a6)

	moveq	#0,d0
	rts

rerr:
	movem.l	(sp)+,d0-d1
rerrhere:
	move.l	stack,sp
	bsr.w	dealloc
	lea	rerrtext,a1
	lea	grrgad,a2
	bsr.w	requester
	bra.w	main
rerr2:
	move.l	file,d1
	move.l	dosbase,a6
	jsr	-36(a6)
	bra.s	rerrhere

rerrtext:
	dc.b	'Read error !',0

	even

avail:	dc.b	'Available memory: %ld bytes',0

	even

edzio:
	bsr.w	syson
	bsr.w	dealloc
	move.l	stack,sp
	bra.s	error

eowork:
	bsr.w	syson
	bsr.w	dealloc
	move.l	stack,sp
	lea	eowtext,a1
	lea	grrgad,a2
	bsr.w	requester
	bra.w	main

exit:	
	move.l	stack,sp
	bsr.w	dealloc
	bsr.w	closereq
	bra.w	quit

cancel:
	move.l	stack,sp
	bsr.w	dealloc
	bra.w	main

enddealloc:
	bsr.w	dealloc
error:
	lea	swrong,a1
	lea	grrgad,a2
	bsr.w	requester
	bra.w	main

clearadrtab:
	lea	adrtabstart,a0
	move.w	#16383,d7
clearloop:
	clr.l	(a0)+
	dbf	d7,clearloop
	rts

doc:
	lea	doctxt,a1
	lea	docgads,a2
	bsr.w	requester
	beq.w	main

	lea	doctxt2,a1
	lea	docgads2,a2
	bsr.w	requester
	bra.w	main

doctxt:
	dc.b	'This program works like the "Ext. Labels" function',10
	dc.b	"in Trash'm-One, but it's faster and more reliable.",10
	dc.b	"Trash'm-One extends labels in 15 KB source in",10
	dc.b	"two minutes (on A500), this program does this in 1 second.",10
	dc.b	"Also, Trash'm-One sometimes changes the source like",10
	dc.b	"this:     loop.main:  lea.main   table.main,a0.main",10
	dc.b	"and so on...  If you wait 10 minutes, and get",10
	dc.b	"something like this, you're very angry.",10,10
	dc.b	"So, use this program and be happy !!!",0
doctxt2:
	dc.b	"If you want to contact me, write at:",10,10
	dc.b	"Piotr Pawlow",10
	dc.b	"ul. Lewartowskiego 12 m 46",10
	dc.b	"00-185 Warszawa",10
	dc.b	"Polska",10,10
	dc.b	"WARNING: if you will try to use this program on a",10
	dc.b	"file which is not a source, it may crash !",0

docgads:
	dc.b	'More info|Shut up !',0
docgads2:
	dc.b	'Extra !',0

eowtext:
	dc.b	'Workspace too small !',0
swrong:
	dc.b	'ERROR !',0
grrgad:
	dc.b	'!@#$%^&*',0

dosname:
	dc.b	'dos.library',0
gfxname:
	dc.b	'graphics.library',0
	even

tabela:
	dc.b	000,001,002,003,004,005,006,007,008,009
	dc.b	010,011,012,013,014,015,016,017,018,019
	dc.b	020,021,022,023,024,025,026,027,028,029
	dc.b	030,031,032,033,034,035,036,037,038,039
	dc.b	040,041,042,043,044,045,046,047,048,049
	dc.b	050,051,052,053,054,055,056,057,058,059
	dc.b	060,061,062,063,064,'A','B','C','D','E'
	dc.b	'F','G','H','I','J','K','L','M','N','O'
	dc.b	'P','Q','R','S','T','U','V','W','X','Y'
	dc.b	'Z',091,092,093,094,095,096,'A','B','C'
	dc.b	'D','E','F','G','H','I','J','K','L','M'
	dc.b	'N','O','P','Q','R','S','T','U','V','W'
	dc.b	'X','Y','Z',123,124,125,126,127,128,129
	dc.b	130,131,132,133,134,135,136,137,138,139
	dc.b	140,141,142,143,144,145,146,147,148,149
	dc.b	150,151,152,153,154,155,156,157,158,159
	dc.b	160,161,162,163,164,165,166,167,168,169
	dc.b	170,171,172,173,174,175,176,177,178,179
	dc.b	180,181,182,183,184,185,186,187,188,189
	dc.b	190,191,192,193,194,195,196,197,198,199
	dc.b	200,201,202,203,204,205,206,207,208,209
	dc.b	210,211,212,213,214,215,216,217,218,219
	dc.b	220,221,222,223,224,225,226,227,228,229
	dc.b	230,231,232,233,234,235,236,237,238,239
	dc.b	240,241,242,243,244,245,246,247,248,249
	dc.b	250,251,252,253,254,255

comptable:
	dc.b	0,0,0,0,0,0,0,0,0,1	;0
	dc.b	1,0,0,0,0,0,0,0,0,0	;10
	dc.b	0,0,0,0,0,0,0,0,0,0	;20
	dc.b	0,0,1,1,-1,1,0,0,1,-1	;30
	dc.b	1,1,1,1,1,1,0,1,0,0	;40
	dc.b	0,0,0,0,0,0,0,0,1,-1	;50
	dc.b	0,1,0,0,1,0,0,0,0,0	;60
	dc.b	0,0,0,0,0,0,0,0,0,0	;70
	dc.b	0,0,0,0,0,0,0,0,0,0	;80
	dc.b	0,0,0,0,1,0,0,0,0,0	;90
	dc.b	0,0,0,0,0,0,0,0,0,0	;100
	dc.b	0,0,0,0,0,0,0,0,0,0	;110
	dc.b	0,0,0,0,0,0,0,0,0,0	;120
	dc.b	0,0,0,0,0,0,0,0,0,0	;130
	dc.b	0,0,0,0,0,0,0,0,0,0	;140
	dc.b	0,0,0,0,0,0,0,0,0,0	;150
	dc.b	0,0,0,0,0,0,0,0,0,0	;160
	dc.b	0,0,0,0,0,0,0,0,0,0	;170
	dc.b	0,0,0,0,0,0,0,0,0,0	;180
	dc.b	0,0,0,0,0,0,0,0,0,0	;190
	dc.b	0,0,0,0,0,0,0,0,0,0	;200
	dc.b	0,0,0,0,0,0,0,0,0,0	;210
	dc.b	0,0,0,0,0,0,0,0,0,0	;220
	dc.b	0,0,0,0,0,0,0,0,0,0	;230
	dc.b	0,0,0,0,0,0,0,0,0,0	;240
	dc.b	0,0,0,0,0,0		;250

; a0 - filename

; d0 - size

filesize:
	movem.l	d0-d7/a0-a6,-(sp)

	move.l	a0,d1
	moveq	#-2,d2
	move.l	dosbase,a6
	jsr	-84(a6)
	tst.l	d0
	beq.s	lerr
	move.l	d0,d1

	move.l	d1,-(sp)
	move.l	#fileinfoblock,d2
	addq.l	#3,d2
	and.l	#$fffffffc,d2
	move.l	d2,fileinfoadr
	move.l	fileinfoadr,d2
	move.l	dosbase,a6
	jsr	-102(a6)
	move.l	fileinfoadr,a0
	move.l	124(a0),fsize
	move.l	(sp)+,d1

	move.l	dosbase,a6
	jsr	-90(a6)

loadend:
	movem.l	(sp)+,d0-d7/a0-a6
	move.l	fsize,d0
	rts

lerr:
	movem.l	(sp)+,d0-d7/a0-a6
	bra.w	rerr2

; d0 - ilosc etykiet
; d1 - ilosc pamieci na etykiety

liczetykiety:
	move.l	sorsadres,a0
	bra.s	liczczyetykieta
liczloop:
	move.b	(a0)+,d0
	tst.b	d0
	beq.s	liczend
	cmp.b	#10,d0
	beq.b	liczczyetykieta
	bra.s	liczloop
liczend:
	clr.l	d0
	move.w	labnum,d0
	move.l	labsize,d1
	rts

liczczyetykieta:
	move.b	(a0),d0
	cmp.b	#"	",d0
	beq.b	liczloop
	cmp.b	#0,d0
	beq.b	liczloop
	cmp.b	#" ",d0
	beq.b	liczloop
	cmp.b	#";",d0
	beq.b	liczloop
	cmp.b	#10,d0
	beq.b	liczloop
	add.w	#1,labnum
	move.w	#0,$dff180
lipetla:
	move.b	(a0)+,d0
	add.l	#1,labsize
	cmp.b	#":",d0
	beq.s	powrot
	cmp.b	#"	",d0
	beq.s	powrot
	cmp.b	#0,d0
	beq.s	powrot
	cmp.b	#10,d0
	beq.s	powrot
	bra.s	lipetla
powrot:
	move.w	#$fff,$dff180
	bra.w	liczloop

;	PROBY Z ReqTools.library	!DARK! of Illusion
;
;Na dysku strtowym w katalogu LIBS: powinny znajdowac sie:ReqTools.library
; i DyskFont.library (dla OS2.0> nie musi, bo jest w ROM'ie)

	INCLUDE	"REQTOOLS"

exec	=	4
oldoplib		=-408
closelib		=-414

OPENREQ
	MOVE.L	EXEC,A6
	LEA	REQNAME,A1
	JSR	OLDOPLIB(A6)
	MOVE.L	D0,REQBASE
	TST.L	D0
	BEQ.W	exit
	RTS
CLOSEREQ:
	MOVE.L	EXEC,A6
	MOVE.L	REQBASE,A1
	JSR	CLOSELIB(A6)

closedos:
	move.l	4,a6
	move.l	dosbase,a1
	jsr	-414(a6)

	move.l	4,a6
	move.l	gfxbase,a1
	jsr	-414(a6)

	RTS

; *** Wyswietlenie requestera ***
; a1 - Tekst w requesterze
; a2 - gadzety

; d0 - numer wcisnietego gadzetu

requester:
	move.l	a1,-(sp)
	move.l	reqbase,a6
	moveq.l	#0,d0
	lea	zero,a0
	jsr	-30(a6)
	move.l	d0,reqfile
	move.l	(sp)+,a1

	move.l	reqbase,a6
	move.l	reqfile,a3
	lea	taglist(pc),a0
	jsr	-66(a6)
	
	move.l	d0,-(sp)
	bsr.w	freereq
	move.l	(sp)+,d0

	rts	


;==========================================================================;
getstring:
	MOVE.L	REQBASE,A6	;!!! A6 !!! NIE UZYWAC
	move.l	#250,d0
	move.l	chars,a1
	MOVE.L	tytul,A2
	move.l	#0,a3
	MOVE.L	#TAGLIST,A0
	JSR	rtGetStringA(A6)
	tst.l	d0
	beq.w	cancel
	rts

getlong:
	MOVE.L	REQBASE,A6	;!!! A6 !!! NIE UZYWAC
	lea	long,a1
	MOVE.L	tytul,A2
	move.l	#0,a3
	MOVE.L	#longTAGLIST,A0
	JSR	rtGetLongA(A6)
	tst.l	d0
	beq.w	cancel
	rts

REQUEST:
	MOVE.L	REQBASE,A6	;!!! A6 !!! NIE UZYWAC
					;przydzielenie structury
	MOVE.L	#rt_filereq,D0
	MOVE.L	#ZERO,A0
	JSR	rtAllocRequestA(A6)
	TST.L	D0
	BNE.B	r.nerr
	JSR	ERROR
	BRA.W	rtend
r.nerr	MOVE.L	D0,REQfile
	
;--------------------------------------------------------------;
					;wywoŁanie requestera
	move.l	reqfile,A1
	lea	addtag,a0
	move.l	reqbase,a6
	jsr	rtchangereqattra(a6)
	move.l	reqfile,A1
	MOVE.L	#Nazwa,A2
	MOVE.L	Tytul,A3
	MOVE.L	#TAGLIST,A0
	JSR	rtFileRequestA(A6)
		;TUTAJ POWINNA ZNAJDOWAC SIE NASZA PROCEDURA KTORA
		;OPERUJE NA WYBRANYM ZBIORZE
	tst.l	d0
	beq.w	cancel
;--------------------------------------------------------------;
	move.l	ReqFile,a0
	move.l	rtfis_Dir(a0),a0	;TERAZ W A0 ZNAJDUJE SIE ADRES
					;NAZWY KATALOGU...
	lea	string,a1
	lea	directory,a3
	move.b	(a0)+,d0
	move.b	d0,(a3)+
	tst.b	d0
	beq.s	req_nx
	move.b	d0,(a1)+
req_lop:
	move.b	(a0)+,d0
	move.b	d0,(a1)+
	move.b	d0,(a3)+
	tst.b	d0
	bne.s	req_lop
	subq	#1,a1
	cmp.b	#':',-1(a1)
	beq.s	req_nx
	move.b	#'/',(a1)+
req_nx:	move.b	(a2)+,d0
	move.b	d0,(a1)+
	tst.b	d0
	bne.s	req_nx
	bsr.b	freereq
	lea	string,a0
	rts

freereq:
	MOVE.L	REQfile,A1
	move.l	reqbase,a6
	JSR	rtFreeRequest(A6)
rtend	RTS
;==========================================================================;

REQname	dc.b	'reqtools.library',0
	even

		;-----dla FILE REQUESTER-------;
TagList	DC.L	RT_ReqPos,REQPOS_centerscr
	DC.L	RTFI_Flags,FREQF_PATGAD
	DC.L	RTFI_Height,1000
	dc.l	rtgl_width,320
	dc.l	RTgs_Width,320
	DC.L	RTFI_Dir,4
	dc.l	$80000000+100
	dc.l	0,0
longTagList
	DC.L	RT_ReqPos,REQPOS_centerscr
	dc.l	RTgs_Width,320
	dc.l	$80000000+38,avail
	dc.l	$80000000+39,availmem
	dc.l	$80000000+100
	dc.l	0,0
addtag:
	dc.l	rtfi_matchpat,pattern
	dc.l	rtfi_dir,directory
	dc.l	0,0

tytul:	dc.l	reqname

pattern:
	dc.b	'#?.S',0

ssource:
	dc.b	'Select source file',0
sdest:
	dc.b	'Save program as...',0
estring:
	dc.b	'Enter extension',0
ework:
	dc.b	'Enter workspace (in bytes)',0

	even

chars:
	dc.l	extension

sorssize:
	dc.l	0
nowysize:
	dc.l	0
	dc.w	0
labnum:
	dc.w	0
min:	dc.l	0
sek:	dc.l	0
ssek:	dc.l	0
extnum:
	dc.l	0
	dc.l	extension

menu:
	dc.b	'Labels Extender v.1.0',10,10
	dc.b	'Original code by Shocker/Termos',10
	dc.b	'Improved and speeded up by PP/Termos',0
menugads:
	dc.b	'START|Info|Quit',0

supergad:
	dc.b	'Super !',0

infotext:
	dc.b	'All done !',10,10
	dc.b	'Source size: %ld',10
	dc.b	'Destination size: %ld',10
	dc.b	'Number of labels: %ld',10,10
	dc.b	'Time: %ldm %ld.%lds',10
	dc.b	'%ld words extended with %s'

	even

filename:
	dc.l	0

Program:
	move.l	4,a6
	move.l	276(a6),a3
	tst.l	172(a3)
	bne.w	fromCLI
	if object=1
fromWB
	lea	92(a3),a0		; get wb msg
	move.l	4.w,a6
	jsr	-384(a6)
	move.l	4.w,a6
	lea	92(a3),a0
	jsr	-372(a6)
	move.l	d0,wbmsg

	move.l	wbmsg,a0
	move.l	$24(a0),a0
	beq.b	fromcli

	move.l	(a0),d1
	move.l	dosbase,a6
	jsr	-126(a6)
	endif
fromcli:
	rts

quit:	move.l	wbmsg,d2
	beq.s	nowb
	move.l	4.w,a6
	jsr	-132(a6)
	move.l	d2,a1
	move.l	4.w,a6
	jsr	-378(a6)
nowb:
	clr.l	d0
	rts

wbmsg:	dc.l	0

addinterrupt:
	move.l	4,a6
	moveq	#5,d0			; add vertical blank interrupt
	lea	myinterrupt,a1
	jsr	-168(a6)
	rts

removeinterrupt:
	move.l	4,a6
	moveq	#5,d0
	lea	myinterrupt,a1
	jsr	-174(a6)
	rts

IntProg:
	add.l	#2,ssek
	cmp.l	#100,ssek
	bne.s	out
	clr.l	ssek
	add.l	#1,sek
	cmp.l	#60,sek
	bne.s	out
	clr.l	sek
	add.l	#1,min
out:	lea	$dff000,a6
	clr.l	d0
	rts

	rts

myinterrupt:
; * Node

	dc.l	0	; Succ
	dc.l	0	; Prev
	dc.b	5	; Type
	dc.b	0	; Pri
	dc.l	IName	; Name

	dc.l	0	; is_Data
	dc.l	IntProg	; is_Code

IName:
	dc.b	'* very stupid interrupt *',0

	dc.b	'$VER: LabExt 1.0 (10.04.95)',0

	section free,bss

alloctable:
	ds.l	10

extension:
	ds.b	1024
long:	ds.b	1024

string:
	ds.b	250

kawaleczek:
	ds.b	1024

fileinfoblock:
	ds.b	262

directory:
	ds.b	250

Nazwa:		;bufor na nazwe zbiory
	ds.b	256

	even

adrtabstart:
	ds.b	32768
adrtab:
	ds.b	32768

availmem:
	ds.l	1

stack:
	ds.l	1
adressize:
	ds.l	1

file:
	ds.l	1

dosbase:
	ds.l	1
gfxbase:
	ds.l	1

nowyend:
	ds.l	1
temporary:
	ds.w	1
destsize:
	ds.l	1

endadr:	ds.l	1

EROR	ds.l	1	
ZERO	ds.l	1

REQbase	ds.l	1
REQ	ds.l	1
REQfile	ds.l	1
REQfont	ds.l	1
labsize:
	ds.l	1
fsize:
	ds.l	1
fileinfoadr:
	ds.l	1
sorsadres:
	ds.l	1

nowy:
	ds.l	1
etykiety:
	ds.l	1
adresy:
	ds.l	1

sors:	ds.l	1
dest:
	ds.l	1
view:
	ds.l	1
