
	***************************
	*Installationsprogramm von*
	*        DMAP V2.1	  *
	* setzt deutsche Tastatur *
	*    setzt Systemzeit     *
	*   installiert Blanker   *
	*          usw.           *
	*   von Martin Gierich	  *
	***************************


OpenLib	= -408	;exec
CloseLib= -414
OpenDev	= -444
CloseDev= -450
DoIO	= -456
OpenRes	= -498
AddRes	= -486
RemRes	= -492
FindName= -276
AddHead	= -240
AllocMem= -198
FreeMem	= -210
FindTask= -294
SetSig	= -306
Wait	= -318
AllocSig= -330
FreeSig	= -336
AddPort	= -354
RemPort	= -360
PutMsg	= -366
GetMsg	= -372
ReplMsg	= -378
WaitPort= -384
FindPort= -390
SetFunc	= -420

Open	= -30	;dos
Close	= -36
OutP	= -60
Write	= -48
Read	= -42
Delete	= -72
Rename	= -78
Lock	= -84
UnLock	= -90
IoErr	= -132
Delay	= -198
IsInter	= -216

refram	= -456	;intuition
rethink	= -390
remake	= -384
movew	= -168
sizew	= -288
getprefs= -132
setprefs= -324
openwb	= -210
closewb	= -78
dispbeep= -96
autoreq	= -348

FileReq	= -$54	;req
Purge	= -$72
TextReq	= -$ae
ColorReq= -$5a
GetLong	= -$b4

psize	= 232		;Preferences-Size
Uhr	= $dc0000	;Adresse Echtzeituhr
UhrAlt	= $d80000	;Uhr A2000a
Custom	= $dff000
scnblk	= 180
ptrblk	=  10

begd	=	0	;von DMAP benutzt
dos	=	begd-4
int	=	dos-4
gfx	=	int-4
msgp	=	gfx-4
task	=	msgp-4
dev	=	task-4
argv	=	dev-4
argz	=	argv-4
wbup	=	argz-4
endd	=	wbup-4

infoo	=	endd-$24
dpackk	=	infoo-$44
preff	=	dpackk-psize
ioreqq	=	preff-$30
puff	=	ioreqq-26

;dos
;int
;gfx
req	=	gfx-4	;von Install benutzt
win	=	req-4
file	=	win-4
freq	=	file-4
treq	=	freq-4
dnam	=	treq-4
fnam	=	dnam-4
pnam	=	fnam-4
lang	=	pnam-4
getl	=	lang-4
enddi	=	getl-4

daten	=	0	;vom Handler benutzt
resnode	=	daten+0	;(Library-Kopf)
rname	=	resnode+34
zeiger	=	rname+18
bild	=	zeiger+1
lfdzei	=	bild+1
lfdbild	=	lfdzei+4
zeisec	=	lfdbild+4
bildsec	=	zeisec+4
accon	=	bildsec+4
hpad	=	accon+1
tast	=	hpad+3
datsize	=	tast+2


txt:	macro
	lea	t\1(pc),a0
	bsr.w	wt
	endm


inst:	link	a5,#enddi
	move.l	4.w,a6
	suba.l	a1,a1
	jsr	findtask(a6)
	tst.l	d0
	beq.w	fehl
	move.l	d0,a4
	tst.l	$ac(a4)
	bne.s	cli
	lea	$5c(a4),a0
	jsr	waitport(a6)
	lea	$5c(a4),a0
	jsr	getmsg(a6)
cli:	lea	dosn(pc),a1
	jsr	openlib(a6)
	move.l	d0,dos(a5)
	beq.w	fehl
	lea	intn(pc),a1
	jsr	openlib(a6)
	move.l	d0,int(a5)
	beq.w	fehl
	move.l	#8+46+131+31+162+356+34,d0
	move.l	d0,d4
	move.l	#1<<16!1,d1
	jsr	allocmem(a6)
	tst.l	d0
	beq.w	fehl
	move.l	d0,a0
	move.l	d4,(a0)+
	move.l	a0,treq(a5)
	lea	46(a0),a0
	move.l	a0,dnam(a5)
	lea	131(a0),a0
	move.l	a0,fnam(a5)
	lea	31(a0),a0
	move.l	a0,pnam(a5)
	lea	162(a0),a0
	move.l	a0,freq(a5)
	lea	356(a0),a0
	move.l	a0,getl(a5)
	lea	34(a0),a0

	move.l	dos(a5),a6
	move.l	#winn,d1
	move.l	#1005,d2
	jsr	open(a6)
	move.l	d0,win(a5)
	beq.w	fehl
	move.l	4.w,a6
	lea	reqn(pc),a1
	jsr	openlib(a6)
	move.l	d0,req(a5)
	bne.s	reqda
	txt	22
	move.l	dos(a5),a6
	move.l	win(a5),d1
	move.l	#gret,d2
	moveq	#2,d3
	jsr	read(a6)
	bra.w	endi
reqda:	txt	1
	move.l	req(a5),a6
	move.l	treq(a5),a0
	move.l	#ask1,0(a0)
	move.l	#pos1,16(a0)
	move.l	#neg1,20(a0)
	move.l	#tit1,24(a0)
	jsr	textreq(a6)
	tst.l	d0
	bne.B	nente
	txt	2
	bra.w	ente
nente:	move.l	req(a5),a6
	move.l	treq(a5),a0
	move.l	#ask8,0(a0)
	move.l	#pos8,16(a0)
	move.l	#neg8,20(a0)
	move.l	#tit8,24(a0)
	jsr	textreq(a6)
	tst.l	d0
	beq.B	kanl
	move.l	dos(a5),a6
	move.l	win(a5),d1
	move.l	#anl,d2
	move.l	#anle-anl,d3
	jsr	write(a6)
	move.l	win(a5),d1
	move.l	#gret,d2
	moveq	#2,d3
	jsr	read(a6)
kanl:	txt	3
nldl:	move.l	dos(a5),a6
	move.l	#150,d1
	jsr	delay(a6)
	move.l	req(a5),a6
	move.l	freq(a5),a0
	move.l	#tit2,2(a0)
	move.l	dnam(a5),6(a0)
	move.l	fnam(a5),10(a0)
	move.l	pnam(a5),14(a0)
	move.l	#$1010,30(a0)
	move.w	#2,34(a0)
	lea	dir2,a1
	move.l	dnam(a5),a2
copdir:	move.b	(a1)+,(a2)+
	bne.B	copdir
	jsr	filereq(a6)
	tst.l	d0
	beq.w	forg
	move.l	#2100,d0
	move.l	d0,d4
	moveq	#1,d1
	move.l	4.w,a6
	jsr	allocmem(a6)
	tst.l	d0
	beq.w	fehl
	move.l	d0,a4
	move.l	d4,(a4)+
	move.l	pnam(a5),d1
	move.l	#1005,d2
	move.l	dos(a5),a6
ts:	jsr	open(a6)
	move.l	d0,d7
	bne.B	lok
nlok:	txt	13
	bra.w	nldl
lok:	move.l	d7,d1
	move.l	a4,d2
	move.l	#2100,d3
	jsr	read(a6)
	move.l	d0,d6
	move.l	d7,d1
	jsr	close(a6)
	tst.l	d6
	beq.B	nlok
	bmi.B	nlok
	lea	st(pc),a0
	move.l	a4,a1
	moveq	#4,d0
vglh:	cmpm.l	(a0)+,(a1)+
	dbne	d0,vglh
	bne.w	kom
	cmp.l	#$3e9,24(a4)
	bne.w	kom
	move.l	28(a4),d0
	lsl.l	#2,d0
	cmp.l	#$3ec,32(a4,d0.l)
	bne.w	kom
	move.l	36(a4,d0.l),d1
	lsl.l	#2,d1
	move.l	d1,d2
	add.l	d0,d2
	cmp.l	#$3f2,48(a4,d2.l)
	bne.w	kom
	add.l	#m1-st,d2
	move.l	d2,d3
	moveq	#0,d7
	lsr.l	#1,d3
	lsr.l	#1,d3
	roxl.l	#1,d7
	tst.l	d7
	beq.B	jou
	addq.l	#2,d2
	moveq	#1,d7
jou:	addq.l	#4,d2
	move.l	d2,lang(a5)
	sub.l	#4+(st1-st),d2
	lsr.l	#2,d2
	lea	st(pc),a0
	move.l	d2,20(a0)
	move.l	d2,28(a0)
	lea	32(a4),a0
	lea	44(a4,d0.l),a1
	lea	m1(pc),a2
	lea	kmap(pc),a3
	move.l	d0,d2
	lsr.l	#2,d2
	subq.l	#1,d2
	move.l	d2,-16(a3)
	move.l	d0,-8(a3)
	move.l	d1,d3
	lsr.l	#2,d3
	subq.l	#1,d3
	move.l	d3,-12(a3)
	move.l	d1,-4(a3)
copm1:	move.l	(a0)+,(a2)+
	dbra	d2,copm1
copm2:	move.l	(a1)+,(a2)+
	dbra	d3,copm2
	tst.l	d7
	beq.B	jou2
	move.w	#0,(a2)+
jou2:	move.l	#$3f2,(a2)+
	cmp.l	#end,a2
	bhi.w	fehl

	txt	4.3
enl:	move.l	4.w,a6
	move.l	a4,a1
	move.l	-(a1),d0
	jsr	freemem(a6)
	bra.B	beid
kom:	txt	4.2
	move.l	4.w,a6
	move.l	a4,a1
	move.l	-(a1),d0
	jsr	freemem(a6)
	bra.w	nldl
forg:	txt	5
	move.l	#h3-st,lang(a5)
beid:	txt	6
	move.l	dos(a5),a6
	move.l	#uhr,a4
	move.b	1(a4),d4
	moveq	#100,d1
	jsr	delay(a6)
	cmp.b	1(a4),d4
	beq.B	nneu
	txt	7
	bra.B	uall
nneu:	move.l	#uhralt,a4
	move.b	1(a4),d4
	moveq	#80,d1
	jsr	delay(a6)
	cmp.b	1(a4),d4
	beq.B	nalt
	txt	8
	move.l	a4,uhrset+2
	bra.B	uall
nalt:	txt	9
uall:	move.l	dos(a5),a6
	move.l	#150,d1
	jsr	delay(a6)
	btst	#5,$dff004
	beq.B	ecs
	txt	10
	bra.B	ecsall
ecs:	txt	11
ecsall:	txt	12
saveit:	move.l	dos(a5),a6
	move.l	#150,d1
	jsr	delay(a6)
	move.l	req(a5),a6
	move.l	freq(a5),a0
	move.l	#tit4,2(a0)
	move.l	dnam(a5),6(a0)
	move.l	fnam(a5),10(a0)
	move.l	pnam(a5),14(a0)
	move.l	#$1010,30(a0)
	lea	dir4,a1
	move.l	dnam(a5),a2
codir1:	move.b	(a1)+,(a2)+
	bne.B	codir1
	lea	fil4,a1
	move.l	fnam(a5),a2
codir2:	move.b	(a1)+,(a2)+
	bne.B	codir2
	jsr	filereq(a6)
	tst.l	d0
	bne.B	nente2
	txt	15
	bra.w	ente
nente2:	move.l	pnam(a5),d1
	move.l	#1006,d2
	move.l	dos(a5),a6
	jsr	open(a6)
	move.l	d0,d7
	bne.B	okw
nokw:	txt	13
	bra.w	saveit
okw:	move.l	d7,d1
	move.l	#st,d2
	move.l	lang(a5),d3
	jsr	write(a6)
	tst.l	d0
	bmi.B	nokw2
	cmp.l	lang(a5),d0
	beq.B	okw2
nokw2:	txt	13
	move.l	d7,d1
	jsr	close(a6)
	bra.w	saveit
okw2:	move.l	d7,d1
	jsr	close(a6)
	txt	14
	move.l	req(a5),a6
	move.l	treq(a5),a0
	move.l	#ask5,0(a0)
	move.l	#mid5,12(a0)
	move.l	#pos5,16(a0)
	move.l	#neg5,20(a0)
	move.l	#tit5,24(a0)
	jsr	textreq(a6)
	tst.l	d0
	beq.B	ente
	txt	20
	subq.l	#1,d0
	beq.w	saveit
	txt	19
	bra.w	saveit

ente:	txt	21
	move.l	req(a5),a6
	move.l	treq(a5),a0
	clr.l	24(a0)
	move.l	#ask3,0(a0)
	move.l	#mid3,12(a0)
	clr.l	16(a0)
	clr.l	20(a0)
	move.l	#tit3,24(a0)
	jsr	textreq(a6)
	move.l	4.w,a6
	move.l	req(a5),a1
	jsr	closelib(a6)
endi:	move.l	dos(a5),a6
	move.l	win(a5),d1
	jsr	close(a6)
	move.l	4.w,a6
	move.l	treq(a5),a1
	move.l	-(a1),d0
	jsr	freemem(a6)
	move.l	int(a5),a1
	jsr	closelib(a6)
	move.l	dos(a5),a1
	jsr	closelib(a6)
	unlk	a5
	moveq	#0,d0
	rts

fehl:	moveq	#-1,d0
	unlk	a5
	rts



wt:	movem.l	d0-d7/a0-a6,-(a7)
	move.l	dos(a5),a6	;schreibt Text
	move.l	win(a5),d1
	move.l	a0,d2
	moveq	#0,d3
wrh:	addq.l	#1,d3
	tst.b	(a0)+
	bne.B	wrh
	subq.l	#1,d3
	move.l	d3,d4
;	lsl.l	#1,d4
	jsr	write(a6)
	move.l	d4,d1
	jsr	delay(a6)
	movem.l	(a7)+,d0-d7/a0-a6
	rts

gret:	dc.w	0
reqn:	dc.b	"req.library",0
winn:	dc.b	"CON:0/10/639/199/DMAP-Installation",0

tit1:	dc.b	"Moin,Moin",0
ask1:	dc.b	"Soll's gleich losgehen ?",0
pos1:	dc.b	"Gerne",0
neg1:	dc.b	"Hab' jetzt keine Zeit!",0
tit2:	dc.b	"Tastaturbelegung Laden",0
dir2:	dc.b	"DEVS:Keymaps",0
ask3:	dc.b	"Alles klar ?     ",0
mid3:	dc.b	"Un Tschüss !",0
tit3:	dc.b	"Das war's",0
tit4:	dc.b	"Verzeichnis auswählen",0
dir4:	dc.b	"C:",0
fil4:	dc.b	"DMAP",0
ask5:	dc.b	"Soll's nochmal gespeichert werden ?",0
neg5:	dc.b	"Lieber nicht !",0
pos5:	dc.b	"Au JA !",0
mid5:	dc.b	"Sofort !",0
tit5:	dc.b	"Und nun ?",0
tit8:	dc.b	"Wie wär's ?",0
ask8:	dc.b	"Eine kleine Anleitung gefällig ?",0
neg8:	dc.b	"  Nöö  ",0
pos8:	dc.b	" Warum nicht ? ",0
t1:	dc.b	"Willkommmen zur Installlation des Wahnsinns-"
	dc.b	"Programms  DMAP !!!",10,0
t2:	dc.b	"Dann halt nicht !",10,0
t3:	dc.b	"Auf geht's:Jetzt wird die Tastaturbelegung geladen.",10
	dc.b	"Durch Anklicken von 'Forget It' wird die Default-"
	dc.b	"Tastatur ausgewählt.",10,0
t4.2:	dc.b	"Das ist mir zu kompliziert !",10,0
t4.3:	dc.b	"Diese Belegung gefällt mir.",10,10,0
t5:	dc.b	"Die Default-Belegung tut's natürlich auch.",10,10,0
t6:	dc.b	"Wollen wir mal sehen, ob Du eine Echtzeituhr hast.",10,0
t7:	dc.b	"Wow, Du hast ja eine von der neuen Sorte.",10,0
t8:	dc.b	"Und dieses alte Museumsstück funktioniert noch ???",10,0
t9:	dc.b	"Was! Du hast ja gar keine ! Ein AMIGA ohne taugt"
	dc.b	" doch gar nix !!!",10
	dc.b	"Die Option 's' lässt Du lieber bleiben.",10,0
t10:	dc.b	10,"Du bist ja 'up to date'. Du hast ein ECS-Agnus.",10,0
t11:	dc.b	10,"Bääh! Was willst Du denn mit deinem alten Agnus"
	dc.b	" anfangen ?",10,"Die Option 'f' kannst Du damit"
	dc.b	" vergessen !",10,0
t12:	dc.b	10,"Jetzt wird der Klumps gespeichert.",10
	dc.b	"Dazu bitte Verzeichnis und Namen auswählen.",10,0
t13:	dc.b	"Das hat nicht hingehauen !",10,0
t14:	dc.b	"Das wäre geschafft !",10,0
t15:	dc.b	"Was soll denn das nun wieder ?",10,0
t19:	dc.b	"Trotzdem : Immer mit der Ruhe !",10,0
t20:	dc.b	"So ist's recht !",10,0
t21:	dc.b	10,"Na ja, das war's denn wohl.",10,0
t22:	dc.b	"Ich brauche req.library V1.4+ !",10
	dc.b	"Ansonsten mußt Du DMAP von Hand installieren.",10
	dc.b	"Drücke RETURN !",10,0

anl:	dc.b	"Kurzanleitung von DMAP V2.1 !",10,10
	dc.b	"Mit Hilfe dieses Installationsprogrammes kann eine"
	dc.b	" gewünschte Tastatur-",10
	dc.b	"belegung in DMAP eingebunden werden, und dann DMAP"
	dc.b	" auf Diskette oder",10
	dc.b	"Festplatte gespeichert werden. Danach kann DMAP aus"
	dc.b	" dem CLI benutzt werden.",10,10
	dc.b	"Folgende Optionen können benutzt werden :",10
	dc.b	"d  : Damit wird die installierte Tastatur gesetzt"
	dc.b	" oder wieder aktiviert.",10
	dc.b	"D  : Dasselbe wie d, öffnet aber kein CLI-Fenster"
	dc.b	" aus der Startup-Sequence",10
	dc.b	"     unter KS 2.0+.",10
	dc.b	"s  : Die aktuelle Zeit wird aus der Echtzeituhr gelesen"
	dc.b	" und als",10
	dc.b	"     Systemzeit gesetzt.",10
	dc.b	"r  : Es wird angezeigt, welche resetfesten Programme"
	dc.b	" vorhanden sind.",10
	dc.b	"     So werden fast alle Viren gefunden.",10
	dc.b	"R  : Wie r, unterdrückt aber die Meldung: Nichts"
	dc.b	" resetfest",10
	dc.b	"b##: Der Bildschirm wird nach der Zeit xx Sekunden"
	dc.b	" schwarzgeschaltet.",10
	dc.b	"m##: Der Mauszeiger wird nach der Zeit xx Sekunden"
	dc.b	" ausgeschaltet.",10
	dc.b	"t  : Der Mausbeschleuniger wird eingeschaltet",10
	dc.b	"T  : Mausbeschleuniger ausschalten",10
	dc.b	"g  : Das aktuelle Fenster wird auf maximale Größe"
	dc.b	" vergrößert.",10
	dc.b	"f  : Die Bildwechselfrequenz wird auf ca. 55 Hz (PAL)"
	dc.b	" bzw. 70 Hz (NTSC)",10
	dc.b	"     vergrößert. Das Bild flimmert dann weniger.",10
	dc.b	"F  : Option f ausschalten",10
	dc.b	"l  : Sicherheitsabfrage vor dem Löschen von Files.",10
	dc.b	"L  : Option l ausschalten",10
	dc.b	"a# : Backup-Abfrage vor dem Überschreiben von Files",10
	dc.b	"A  : Option A ausschalten",10,10
	dc.b	"## steht für eine (mehrstellige) Zahl.",10
	dc.b	"# steht für eine Ziffer.",10
	dc.b	"Es können mehrere Optionen gleichzeitig angegeben"
	dc.b	" werden.",10
	dc.b	"Folgt nach b oder m keine Zahl, so wird die"
	dc.b	" entsprechende",10
	dc.b	"Funktion abgeschaltet.",10
	dc.b	"Bildschirm ausblenden: SHIFT-Links + CTRL + A ",10
	dc.b	"Anwendungsbeispiel: DMAP b300da2r",10,10
	dc.b	"Bitte RETURN drücken.",10
anle:


;****************************************************************
;		Hier beginnt das Programm selbst
;****************************************************************

	even
st:	dc.l	$3f3,0,1,0,0,(h2-st1+3)/4,$3e9,(h2-st1+3)/4 ;Hunk-Länge
st1:	link	a5,#endd-$24-$44-psize-$30-26
	move.l	a0,argv(a5)
	move.l	d0,argz(a5)
	move.l	4.w,a6
	lea	dosn(pc),a1
	jsr	openlib(a6)
	move.l	d0,dos(a5)
	beq.b	fehlj
	lea	intn(pc),a1
	jsr	openlib(a6)
	move.l	d0,int(a5)
	beq.b	fehlj
	lea	gfxn(pc),a1
	jsr	openlib(a6)
	move.l	d0,gfx(a5)
	beq.b	fehlj
	suba.l	a1,a1
	jsr	findtask(a6)
	move.l	d0,task(a5)
fehlj:	beq.b	fehler
	move.l	d0,a4
	lea	$5c(a4),a0
	move.l	a0,msgp(a5)

hauptl:	subq.l	#1,argz(a5)	;Hauptschleife
	beq.b	ende
	move.l	argv(a5),a0
	move.b	(a0),d0
	addq.l	#1,argv(a5)
	lea	zeitab(pc),a0
	lea	jmptab(pc),a1
	lea	st(pc),a2
	lea	verwe(pc),a3
	move.l	#$3857f0c4,d1
	eor.l	#$7f3e95b6,d1
	cmp.l	-8(a3),d1
	bne.b	ende
	moveq	#-1,d1
noo:	tst.b	(a0)
	beq.s	hauptl
	addq.w	#1,d1
	cmp.b	(a0)+,d0
	bne.s	noo
	lsl.w	#2,d1
	move.l	0(a1,d1.w),a0
	add.l	a2,a0
	move.l	4.w,a6
	jsr	(a0)
	bra.s	hauptl

fehler:	moveq	#-1,d0	;Falls was nicht stimmt
	unlk	a5
	rts

ende:	move.l	4.w,a6
	move.l	gfx(a5),a1	;Un Tschüssssssssss
	jsr	closelib(a6)
	move.l	int(a5),a1
	jsr	closelib(a6)
	move.l	dos(a5),a1
	jsr	closelib(a6)
	unlk	a5
	moveq	#0,d0
	rts


clrio:	lea	ioreqq(a5),a1	;initialisiert IO-Request
	move.l	a1,a0
	moveq	#$2f,d0
clst3:	clr.b	(a0)+
	dbra	d0,clst3
	move.b	#5,8(a1)
	move.l	msgp(a5),a0
	move.l	a0,14(a1)
	move.w	#$30,18(a1)
	rts		;a1:IO-Request


infos:	move.l	dos(a5),a6		;???
	jsr	outp(a6)
	move.l	d0,d1
	beq.s	wb1
	lea	verw(pc),a0
	move.l	a0,d2
	move.l	#verwe-verw,d3
	jsr	write(a6)
wb1:	move.l	4.w,a6
	rts

setmap2: moveq	#-1,d7			;DDD
	bra.s	setgh
setmap:	moveq	#0,d7			;ddd
setgh:	bsr.s	clrio
	move.w	#$30,18(a1)
	lea	condev(pc),a0
	moveq	#-1,d0
	moveq	#0,d1
	jsr	opendev(a6)
	tst.l	d0
	bne.w	fehler

res:	lea	keyres(pc),a1
	moveq	#0,d0
	jsr	openres(a6)
	tst.l	d0
fehlj2:	beq.w	fehler
	move.l	d0,a0
	lea	14(a0),a0
	move.l	a0,d4
	lea	kmap(pc),a4
	move.l	10(a4),a1
	add.l	a4,a1
	jsr	findname(a6)
	move.l	d0,d3
	bne.s	noadd

addh:	move.l	-8(a4),d0
	moveq	#1,d1
	jsr	allocmem(a6)
	move.l	d0,d3
	beq.b	fehlj2
	move.l	a4,a0
	add.l	-8(a4),a0
	move.l	-12(a4),d1
	move.l	a4,a1
	moveq	#0,d0
wdh:	move.l	0(a0,d0),d2
	add.l	d3,0(a1,d2)
	addq.l	#4,d0
	dbf	d1,wdh
	move.l	-16(a4),d0
	move.l	d3,a2
cpy:	move.l	(a1)+,(a2)+
	dbf	d0,cpy
	move.l	d4,a0
	move.l	d3,a1
	jsr	addhead(a6)
noadd:	move.l	d3,a2	;keymap->a2

defkm:	lea	ioreqq(a5),a1
	move.l	#$20,36(a1)
	lea	14(a2),a3
	move.l	a3,40(a1)
	move.w	#12,28(a1)
	jsr	doio(a6)
	tst.l	d0
	bne.w	fehler

	tst.w	d7
	bne.w	endmap		WB-START ?
nochm:	lea	infoo(a5),a0	;Clear dpack,info
	moveq	#$23,d0
clst1:	clr.b	(a0)+
	dbra	d0,clst1
	lea	dpackk(a5),a0
	move.l	a0,a1
	moveq	#$43,d0
clst2:	clr.b	(a1)+
	dbra	d0,clst2
	move.l	task(a5),a1
	lea	$14(a0),a3
	move.l	a3,$a(a0)
	move.l	a0,$14(a0)
	lea	$5c(a1),a3
	move.l	a3,$e(a0)
	move.l	a3,$18(a0)
	move.l	#$19,$1c(a0)
	lea	infoo(a5),a4
	move.l	a4,d0
	lsr.l	#2,d0
	move.l	d0,$28(a0)
	move.l	a0,d6
	move.l	$a4(a1),a1
	exg	a0,a1
	jsr	putmsg(a6)
	move.l	a3,a0
waitp:	jsr	waitport(a6)
	move.l	d0,d5
	move.l	a3,a0
	jsr	getmsg(a6)
	tst.l	d0
	beq.w	fehler
	cmp.l	d6,d5
	bne.B	waitp
	lea	infoo(a5),a0
	tst.l	$20(a0)
	beq.s	nochm
	move.l	$20(a0),a0
	move.l	$18(a0),a0
	lea	ioreqq(a5),a1
	move.l	#$20,36(a1)
	lea	14(a2),a3
	move.l	a3,40(a1)
	move.w	#10,28(a1)
	clr.w	30(a1)
	move.l	a0,24(a1)
	jsr	doio(a6)
	tst.l	d0
	bne.w	fehler

endmap:	lea	ioreqq(a5),a1
	clr.w	28(a1)
	move.l	#-1,24(a1)
	jsr	closedev(a6)
	rts


zeit:	move.l	dos(a5),a6		;sss
	lea	uhr,a4
	jsr	outp(a6)
	move.l	d0,d1
	beq.s	wb
uhrset:	lea	puff(a5),a3
	moveq	#0,d3
	lea	dat(pc),a0
next:	moveq	#0,d0
	move.b	(a0)+,d0
	btst	#0,d0
	beq.s	zei
	move.b	0(a4,d0),d0
	and.b	#$f,d0
	add.b	#$30,d0
zei:	bsr.b	wc
	cmp	#10,d0
	bne.s	next
	move.l	a3,d2
	jsr	write(a6)
wb:	bra.s	jpur
				;Unterroutinen :
wc:	move.b	d0,0(a3,d3)	;Write Char
	addq.l	#1,d3
	rts

get:	move.b	0(a4,d6),d1	;Get Clock
	move.b	4(a4,d6),d0
	addq.l	#8,d6
	and.w	#$f,d0
	and.w	#$f,d1
	mulu	#10,d0
	add.w	d1,d0
	ext.l	d0
	rts

jpur:	move.l	4.w,a6
	move.b	53(a4),d0
	or.b	#1,d0
	move.b	d0,53(a4)
clkw:	btst	#1,53(a4)
	bne.b	clkw
	moveq	#0,d7
	moveq	#1,d6
	bsr.b	get	;sec
	move.b	d0,d7
	bsr.b	get	;min
	mulu	#smin,d0
	add.l	d0,d7
	bsr.b	get	;std
	mulu	#sst,d0
	add.l	d0,d7
	bsr.b	get	;tag
	subq.l	#1,d0
	move.l	d0,d5
	bsr.b	get	;monat
	cmp.w	#12,d0
	bhi.w	endtim
	move.l	d0,d2
	lea	mon(pc),a0
	move.b	#28,1(a0)	;Pfusch !
	bsr.b	get	;jahr
	cmp.w	#140,d0
	bhi.w	endtim
	move.b	53(a4),d3
	and.b	#$0e,d3
	move.b	d3,53(a4)
	move.l	d0,d3
	and.w	#3,d0
	bne.s	nosj
	move.b	#29,1(a0)
nosj:	subq.l	#2,d2
	bmi.s	jan
madd:	move.b	0(a0,d2),d0
	ext.w	d0
	add.w	d0,d5
	dbf	d2,madd
jan:	cmp.b	#78,d3
	beq.s	tset
	subq.l	#1,d3
	moveq	#0,d1
jadd:	add.w	#tjahr,d5
	move.l	d3,d0
	and.w	#3,d0
	bne.s	nosj2
	addq.l	#1,d5
nosj2:	cmp.b	#78,d3
	dbeq	d3,jadd
	move.l	#stag,d1
	move.l	d5,d0
	bsr.b	mul
	add.l	d0,d7
	cmp.l	#$70000000,d7
	bhi.s	endtim

tset:	bsr.w	clrio
	move.l	a1,a2
	move.w	#$28,18(a1)
	lea	timdev(pc),a0
	moveq	#1,d0
	moveq	#0,d1
	jsr	opendev(a6)
	tst.l	d0
fehlj4:	bne.w	fehler
	move.l	a2,a1
	move.w	#11,28(a1)
;	clr.w	30(a1)
	move.l	d7,32(a1)
;	clr.l	36(a1)
;	clr.l	40(a1)
	jsr	doio(a6)
	tst.l	d0
	bne.s	fehlj4
	move.l	a2,a1
	clr.l	28(a1)
	jsr	closedev(a6)
endtim:	rts

mul:	move.l	d1,d2		;Multipliziere
	mulu	d0,d2
	move.l	d1,d3
	swap	d3
	mulu	d0,d3
	swap	d3
	clr.w	d3
	add.l	d2,d3
	move.l	d3,d0
	rts

vector2: moveq	#-1,d7			;RRR
	bra.s	vegh
vector:	moveq	#0,d7			;rrr
vegh:	move.l	dos(a5),a4
	exg.l	a4,a6
	moveq	#2,d0
	lea	$2a(a4),a0
chk1:	tst.l	(a0)+
	bne.s	vir
	dbra	d0,chk1
	moveq	#2,d0
	lea	$222(a4),a0
chk2:	tst.l	(a0)+
	bne.s	vir
	dbra	d0,chk2
	tst.w	d7
	bne.w	wb2
	jsr	outp(a6)
	move.l	d0,d1
	beq.w	wb2
	lea	vecok(pc),a0
	move.l	a0,d2
	move.l	#vecoke-vecok,d3
	jsr	write(a6)
	bra.w	wb2
vir:	move.w	d7,wbup(a5)
	jsr	outp(a6)
	move.l	d0,d1
	move.l	d0,d5
	beq.w	wb2
	lea	virus(pc),a0
	move.l	a0,d2
	move.l	#viruse-virus,d3
	jsr	write(a6)
	exg.l	a3,a6
	move.l	int(a5),a6
	move.l	60(a6),a0
	jsr	dispbeep(a6)
	exg.l	a3,a6
	move.l	50(a4),d7
	beq.s	nowarm
	lea	warm(pc),a0
	bsr.w	capt
	bsr.w	adr
nowarm:	move.l	46(a4),d7
	beq.s	nocool
	lea	cool(pc),a0
	bsr.w	capt
	bsr.w	adr
nocool:	move.l	42(a4),d7
	beq.s	nocold
	lea	cold(pc),a0
	bsr.w	capt
	move.l	d7,a2
	bsr.w	adr
	moveq	#0,d0
	moveq	#10,d1
setp:	add.l	(a2)+,d0
	dbra	d1,setp
	cmp.l	#$c538438d,d0
	bne.s	nocold
	move.l	d5,d1
	lea	spatch(pc),a0
	move.l	a0,d2
	move.l	#spatche-spatch,d3
	jsr	write(a6)
nocold:	bsr.w	ret
	move.l	550(a4),d4
	beq.s	nores
reswi:	bclr	#31,d4
	move.b	#">",d7
	bsr.w	cr
	move.l	d4,a3
tres:	move.l	(a3)+,d4
	beq.s	nores
	btst	#31,d4
	bne.s	reswi
	move.l	d4,a0
	move.l	14(a0),a2
	movem.l	a0,-(a7)
	tst.l	14(a0)
	beq.s	nwresn
wresn:	move.b	(a2)+,d7
	beq.s	nwresn
	bsr.s	cr
	bra.s	wresn
nwresn:	bsr.s	ret
	move.b	#"*",d7
	bsr.s	cr
	movem.l	(a7)+,a0
	move.l	18(a0),a2
	tst.l	18(a0)
	beq.s	nwresid
wresid:	move.b	(a2)+,d7
	beq.s	nwresid
	bsr.s	cr
	bra.s	wresid
nwresid:bsr.s	ret
	bra.s	tres
nores:	tst.w	wbup(a5)
	beq.s	wb2
	move.l	d5,d1
	lea	drurt(pc),a0
	move.l	a0,d2
	move.l	#drurte-drurt,d3
	jsr	write(a6)
	move.l	d5,d1
	lea	puff(a5),a0
	move.l	a0,d2
	moveq	#1,d3
	jsr	read(a6)
wb2:	rts

capt:	move.l	d5,d1		;Unterprogramme
	move.l	a0,d2
	moveq	#5,d3
	jsr	write(a6)
	rts

ret:	move.b	#10,d7	;Return
cr:	lea	puff(a5),a0	;Ein Zeichen
	move.b	d7,(a0)
	move.l	a0,d2
char:	move.l	#1,d3
	move.l	d5,d1
	jsr	write(a6)
	rts

adr:;	lsl.l	#8,d7	;Gibt Adresse aus
	move.w	#7,d6
nib:	moveq	#0,d1
	move.w	#3,d2
rot:	roxl.l	#1,d7
	roxl.b	#1,d1
	dbf	d2,rot
	lea	hex(pc),a0
	move.l	a0,d2
	add.l	d1,d2
	bsr.s	char
	dbf	d6,nib
	bsr.s	ret
	rts

hex:	dc.b	"0123456789abcdef"	;für adr
	even


resize:	move.l	int(a5),a6		;ggg
	move.l	$34(a6),a3
	move.l	$2e(a3),a1
	moveq	#-1,d2
	move.l	12(a1),d3
	sub.w	10(a3),d3
	sub.w	#10,d3
	move.w	d3,d1
	bpl.s	klein
	moveq	#0,d2
	moveq	#0,d0
	move.l	a3,a0
	jsr	sizew(a6)
klein:	moveq	#0,d0
	sub.w	4(a3),d0
	moveq	#10,d1
	sub.w	6(a3),d1
	move.l	a3,a0
	jsr	movew(a6)
	moveq	#0,d1
	tst.b	d2
	beq.s	gross
	move.w	d3,d1
gross:	swap	d3
	sub.w	8(a3),d3
	move.w	d3,d0
	move.l	a3,a0
	jsr	sizew(a6)
	jsr	rethink(a6)
	rts


freqoff: lea	custom,a4		;FFF
	move.w	#$0000,$1dc(a4)
	move.w	#$011c,d4
	moveq	#$0000,d5
	move.w	#$0100,d6
	moveq	#$001b,d7
	bra.s	ks1

freqon:	lea	custom,a4		;fff
	move.w	#$011c,d4	;Zeilenzahl=($2625a/(10*Freq.))and$ffff
	move.w	#$00ef,d5	;Verschiebung (Pref.)
	move.w	#$0100,d6	;Zeilenzahl (Screen)
	moveq	#$001b,d7	;Verschiebung (View)
	cmp.b	#50,530(a6)	;55Hz oder 70Hz ?
	beq.s	pal
	move.w	#$00df,d4
	move.w	#$00ea,d5
	move.w	#$00c8,d6
	moveq	#$0016,d7
pal:	move.w	d4,$1c8(a4)
	move.w	#$00e2,$1c0(a4)
	move.w	#$0080,$1dc(a4)
	cmp.w	#36,20(a6)	;EXEC-Version >= 36 ? (KS2.x)
	bcs.s	ks1
	move.w	#$00f1,d5
	moveq	#$001d,d7
	cmp.b	#50,530(a6)	;55Hz oder 70Hz ?
	beq.s	ks1
	moveq	#$0017,d7	NTSC-Modus
ks1:	move.l	#psize,d3
	lea	preff(a5),a0
	move.l	int(a5),a6
	move.l	d3,d0
	jsr	getprefs(a6)
	move.l	d0,a0
	move.w	d5,$76(a0)
	move.l	d3,d0
	moveq	#-1,d1
	jsr	setprefs(a6)
	move.l	gfx(a5),a3
	move.w	d4,$d4(a3)
	move.w	d6,$d8(a3)
	move.l	$22(a3),a0
	move.w	d7,$0c(a0)
	jsr	rethink(a6)
nclo:	rts


delon:	moveq	#delete,d7	;Offset		;lll
	moveq	#-fki,d5	;Einsprung
	bra.s	DPatch
bakon:	bsr	getnum
	cmp.w	#9,d0
	bhi.w	dele
	move.w	d0,d6
	beq.w	dele
	moveq	#open,d7	;Offset		;aaa
	moveq	#opfkt-delfkt-fki,d5

DPatch:	move.l	dos(a5),a4
	add.l	d7,a4
	move.w	#$4ef9,d4
	moveq	#0,d3
	cmp.w	(a4),d4
	bne.s	altt
	move.l	2(a4),a0
	sub.l	d5,a0
	move.l	12(a0),d0
	cmp.l	int(a5),d0
	beq.s	dele
	moveq	#-1,d3
	bra.s	neuu
altt:	cmp.w	#$6000,2(a4)
	bne.s	dele
neuu:	move.l	#delfkte-delfkt-fki,d2
	move.l	d2,d0
	moveq	#1,d1
	jsr	allocmem(a6)
	move.l	d0,a3
	tst.l	d0
	beq.s	dele
	lea	-fki(a3),a0
	move.w	d2,d0
	sub.w	#1-fki,d0
	lea	delfkt(pc),a1
rtu:	move.b	(a1)+,(a0)+
	dbra	d0,rtu
	move.w	d4,(a3)
	move.l	2(a4),2(a3)
	tst.w	d3
	bne.s	neuu2
	lea	4(a4),a0
	move.w	(a0),d0
	ext.l	d0
	add.l	d0,a0
	move.l	a0,4(a3)
	move.w	(a4),(a3)
	move.w	d4,2(a3)
neuu2:	move.l	d2,8(a3)
	move.l	int(a5),12(a3)
	move.w	d6,16(a3)
	move.l	a3,d0
	add.l	d5,d0
	move.l	d7,a0
	move.l	dos(a5),a1
	jsr	setfunc(a6)
dele:	rts

deloff:	moveq	#delete,d7	;Offset		;LLL
	moveq	#-fki,d6		;Einsprung
	bra.s	RPatch
bakoff:	moveq	#open,d7			;AAA
	moveq	#opfkt-delfkt-fki,d6

RPatch:	move.l	dos(a5),a4
	add.l	d7,a4
	cmp.w	#$4ef9,(a4)
	bne.s	deloe
	move.l	2(a4),a1
	sub.l	d6,a1
	move.l	12(a1),d0
	cmp.l	int(a5),d0
	bne.s	deloe
	move.w	0(a1),(a4)
	move.l	2(a1),2(a4)
	cmp.w	#$4ef9,(a1)
	beq.s	boing
	move.w	#$6000,2(a4)
	lea	4(a4),a2
	move.l	4(a1),d0
	sub.l	a2,d0
	move.w	d0,(a2)
boing:	move.l	8(a1),d0
	jsr	freemem(a6)
deloe:	rts


scnon:	bsr.w	blkon			;bbb
	bsr.w	getnum
	move.l	d0,bildsec(a3)
	bra.s	blkoff

ptron:	bsr.w	blkon			;mmm
	bsr.w	getnum
	move.l	d0,zeisec(a3)
	bra.s	blkoff

turon:	bsr.w	blkon			;ttt
	move.b	#1,accon(a3)
	bra.s	blkoff

turoff:	bsr.s	blkon			;TTT
	move.b	#0,accon(a3)
;	bra.s	blkoff

blkoff: tst.l	bildsec(a3)
	bne.s	jau
	tst.l	zeisec(a3)
	bne.s	jau
	tst.b	accon(a3)
	beq.s	nau
jau:	rts
nau:	move.w	#$81a0,custom+$96
	move.l	a3,a1
	jsr	remres(a6)
	bsr.w	clrio
	lea	inpdev(pc),a0
	moveq	#0,d0
	move.l	a1,a2
	moveq	#0,d1
	jsr	opendev(a6)
	tst.l	d0
fehlj6:	bne.w	fehler
	move.w	#10,28(a2)
	moveq	#22,d0
	move.l	d0,36(a2)
	lea	intpos-datpos(a3),a0
	move.l	a0,40(a2)
	move.l	a2,a1
	jsr	doio(a6)
	tst.l	d0
	bne.s	fehlj6
	move.l	a2,a1
	jsr	closedev(a6)
	move.l	a3,a1
	sub.w	16(a3),a1	;datpos
	moveq	#0,d0
	move.w	16(a3),d0
	add.w	18(a3),d0
	ext.l	d0
	jsr	freemem(a6)
	rts

blkon:	lea	blkres(pc),a1	;Blanker-Installation
	moveq	#0,d0
	jsr	openres(a6)
	move.l	d0,a3
	tst.l	d0
	bne.w	resda
	move.l	#endpos,d0
	move.l	#1<<16!1,d1
	jsr	allocmem(a6)
	move.l	d0,a4
	move.l	d0,a1
	lea	handbeg(pc),a0
	move.l	#(datpos+3)/4,d0
bcopy:	move.l	(a0)+,(a1)+
	dbra	d0,bcopy
	lea	datpos(a4),a3
	move.b	#8,resnode+8(a3)
	lea	rname(a3),a2
	move.l	a2,a1
	lea	blkres(pc),a0
ncopy:	move.b	(a0)+,(a1)+
	bne.s	ncopy
	move.l	a2,resnode+10(a3)
	move.w	#datpos,resnode+16(a3)
	move.w	#endpos-datpos,resnode+18(a3)
	move.w	#2,20(a3)
	move.w	#1,22(a3)
	move.l	a2,resnode+24(a3)
	move.w	#$0200+52,intpos+8(a4)	;Priorität
	move.l	a2,intpos+10(a4)	;Name
	move.l	a3,intpos+14(a4)	;Data
	move.l	a4,intpos+18(a4)	;Code
	move.l	a3,a1
	jsr	addres(a6)

	bsr.w	clrio
	move.l	a1,a2
	move.w	#$28,18(a1)
	lea	timdev(pc),a0
	moveq	#1,d0
	moveq	#0,d1
	jsr	opendev(a6)
	tst.l	d0
	bne.s	fehlj5
	move.l	a2,a1
	move.w	#10,28(a1)
	jsr	doio(a6)
	tst.l	d0
	bne.s	fehlj5
	move.l	a2,a1
	clr.l	28(a1)
	jsr	closedev(a6)
	move.l	32(a2),d0
	move.l	d0,lfdzei(a3)	;Initialisieren
	move.l	d0,lfdbild(a3)
	clr.b	tast(a3)

	bsr.w	clrio
	lea	inpdev(pc),a0
	moveq	#0,d0
	move.l	a1,a2
	moveq	#0,d1
	jsr	opendev(a6)
	tst.l	d0
fehlj5:	bne.w	fehler
	move.w	#9,28(a2)
	moveq	#22,d0
	move.l	d0,36(a2)
	lea	intpos(a4),a0
	move.l	a0,40(a2)
	move.l	a2,a1
	jsr	doio(a6)
	tst.l	d0
	bne.b	fehlj5
	move.l	a2,a1
	jsr	closedev(a6)
resda:	rts		;a3:datpos

getnum:	move.l	argv(a5),a0	;Holt Zahl aus Argument nach d0.l
	moveq	#0,d0
goon:	move.b	(a0)+,d1
	cmp.b	#"0",d1
	blo.s	genug
	cmp.b	#"9",d1
	bhi.s	genug
	sub.b	#"0",d1
	ext.w	d1
	mulu	#10,d0
	add.w	d1,d0
	addq.l	#1,argv(a5)
	subq.l	#1,argz(a5)
	bne.s	goon
	addq.l	#1,argz(a5)
genug:	ext.l	d0
	rts


***** Input-Event-Handler ! *****

handbeg:	
	movem.l	a0-a3,-(sp)
	lea	custom,a2
schleif:move.b	4(a0),d1
timer:	cmp.b	#6,d1
	bne.s	rawmou
	tst.b	bild(a1)
	bne.b	weith
	move.l	bildsec(a1),d1
	beq.s	ptrc
	move.l	14(a0),d0
	sub.l	lfdbild(a1),d0
	cmp.l	d1,d0
	blo.s	ptrc
	bsr.b	bildaus
	bra.b	weith
ptrc:	tst.b	zeiger(a1)
	bne.b	weith
	move.l	zeisec(a1),d1
	beq.b	weith
	move.l	14(a0),d0
	sub.l	lfdzei(a1),d0
	cmp.l	d1,d0
	blo.b	weith
	bsr.b	zeigaus
	bra.b	weith

rawmou:	cmp.b	#2,d1
	bne.w	rawkey
	tst.b	accon(a1)
	beq.s	accoff
	move.w	10(a0),d1	;Maus beschleunigen
	bsr.b	accalc
	move.w	d1,10(a0)
	move.w	12(a0),d1
	bsr.b	accalc
	move.w	d1,12(a0)
accoff:	bsr.b	bildan
	bsr.b	zeigan
;	bra.s	weith

weith:	move.l	(a0),d0
	move.l	d0,a0
	bne.b	schleif
	movem.l	(sp)+,a0-a3
	move.l	a0,d0
	rts

bildan:	move.w	#$8000+$180,$96(a2)
	clr.b	bild(a1)
	move.l	14(a0),lfdbild(a1)
	rts

zeigan:	move.w	#$8000+$20,$96(a2)
	clr.b	zeiger(a1)
	move.l	14(a0),lfdzei(a1)
	rts

bildaus: move.w	#0+$180,$96(a2)
	move.w	#0,$180(a2)
	move.b	#1,bild(a1)
zeigaus: move.w	#0+$20,$96(a2)
	moveq	#0,d0
	move.l	d0,$144(a2)
	move.b	#1,zeiger(a1)
	rts

accalc:	move.w	d1,d2
	muls	d2,d1
	addq.w	#3,d1
	asr.w	#2,d1
	tst.w	d2
	bpl.s	acne
	neg.w	d1
acne:	rts

rawkey:	cmp.b	#1,d1
	bne.s	weith
	lea	tastab(pc),a3
	move.w	tast(a1),d0
	beq.s	dff
	move.w	-2(a3,d0.w),d1
	bset	#7,d1
	cmp.w	6(a0),d1
	bne.s	dff
	subq.w	#2,tast(a1)
	cmp.w	#6,d0
	bne.w	weith
	clr.b	4(a0)
	bra.w	weith
dff:	move.w	0(a3,d0.w),d1
	addq.w	#2,d0
	cmp.w	6(a0),d1
	beq.s	dfg
	clr.w	d0
dfg:	move.w	d0,tast(a1)
	cmp.w	#6,d0
	bne.s	dgg
	clr.b	4(a0)	;NOP-Event
	bsr.w	bildaus
	bra.w	weith
dgg:	bsr.w	bildan
	tst.l	zeisec(a1)
	beq.w	weith
	bsr.w	zeigaus
	bra.w	weith

tastab:	dc.w	$60,$63,$20

handend:

codepos	=	0	;für IE-Handler
datpos	=	codepos+(handend-handbeg)
intpos	=	datpos+datsize
endpos	=	intpos+22


***** DOS-Library-Patch *****
fki	= -18
;fki+0	dc.w	$4ef9	;JMP $
;fki+2	dcb.b	6	;Return-Code
;fki+8	dcb.b	4	;Länge
;fki+12	dcb.b	4	;Intuition-Base
;fki+16	dcb.b	2	;Backup-Anzahl
delfkt:	movem.l	d0-d3/a0-a6,-(sp)
	lea	tx1(pc),a4
	lea	tx2(pc),a5
	lea	tx3(pc),a6
	bsr.s	autorq
	movem.l	(sp)+,d0-d3/a0-a6
	bne.s	delfkt+fki+0
	moveq	#-1,d0
	rts

autorq:	lea	bo1i(pc),a1
	move.l	d1,12(a1)
	lea	bo2i(pc),a2
	move.l	a2,16(a1)
	move.l	a6,12(a2)
	lea	noti(pc),a3
	move.l	a4,12(a3)
	lea	yesi(pc),a2
	move.l	a5,12(a2)
	moveq	#0,d0
	moveq	#$20,d1
	swap	d1
	move.w	#320,d2
	moveq	#62,d3
	move.l	delfkt+fki+12(pc),a6
	move.l	$34(a6),a0
	jsr	autoreq(a6)
	tst.l	d0
	rts

opfkt:	cmp.l	#1006,d2
	bne.s	delfkt+fki+0
	movem.l	d0-d5/a0-a6,-(sp)
	move.l	d1,d4
	moveq	#-2,d2
	jsr	lock(a6)
	move.l	d0,d1
	beq.w	srt
	jsr	unlock(a6)
	move.l	d4,a2
zut:	tst.b	(a2)+
	bne.s	zut
	sub.l	d4,a2
	addq.l	#5,a2
	move.l	a2,d0
	lsl.l	#1,d0
	moveq	#1,d1
	move.l	a6,d5
	move.l	4.w,a6
	jsr	allocmem(a6)
	tst.l	d0
	beq.w	srt
	move.l	d0,a3
	add.l	d0,a2
	move.l	d4,a4
	move.l	a2,a0
	move.l	a3,a1
zot:	move.b	(a4),(a0)+
	move.b	(a4)+,(a1)+
	bne.s	zot
	subq.l	#1,a0
	subq.l	#1,a1
	lea	fini(pc),a4
zat:	move.b	(a4),(a0)+
	move.b	(a4)+,(a1)+
	bne.s	zat
	move.l	a0,a4
	move.l	a3,d1
	moveq	#-2,d2
	move.l	d5,a6
	jsr	lock(a6)
	move.w	delfkt+fki+16(pc),d1
	add.b	#"0",d1
	move.b	d1,-2(a2)
	subq.w	#1,d1
	move.b	d1,-2(a4)
	move.l	d0,d1
	beq.w	sab
	jsr	unlock(a6)
	move.l	a3,d1
	jsr	delete(a6)
	tst.l	d0
	bra.s	oiu
sab:	move.l	d4,d1
	movem.l	a2-a4,-(sp)
	lea	tx4(pc),a4
	lea	tx5(pc),a5
	lea	tx6(pc),a6
	bsr.w	autorq
	movem.l	(sp)+,a2-a4
	bne.s	srt
	move.l	d5,a6
oiu:	cmp.b	#"0",-2(a4)
	beq.s	uio
	move.l	a2,d1
	move.l	a3,d2
	jsr	rename(a6)
	subq.b	#1,-2(a2)
	subq.b	#1,-2(a4)
	bra.s	oiu
uio:	move.l	d4,d1
	move.l	a3,d2
	jsr	rename(a6)
	tst.l	d0
	bne.s	srt
	movem.l	(sp)+,d0-d5/a0-a6
	moveq	#0,d0
	rts
srt:	movem.l	(sp)+,d0-d5/a0-a6
	bra.w	delfkt+fki+0

tx1:	dc.b	"Abbruch",0
tx2:	dc.b	"Löschen",0
tx3:	dc.b	"löschen ?",0
tx4:	dc.b	"Backup",0
tx5:	dc.b	"Überschreiben",0
tx6:	dc.b	"überschreiben ?",0
fini:	dc.b	".Bak1",0
	even

noti:	dc.b	0,0
	dc.w	0,6,3
	dc.l	0,0

yesi:	dc.b	0,0
	dc.w	0,6,3
	dc.l	0,0

bo2i:	dc.b	0,0
	dc.w	0,15,15
	dc.l	0,0

bo1i:	dc.b	0,0
	dc.w	0,15,5
	dc.l	0,0,0
delfkte:


	even
jmptab:	dc.l	infos-st,setmap-st,setmap2-st,zeit-st
	dc.l	vector-st,vector2-st,scnon-st,ptron-st,turon-st,turoff-st
	dc.l	resize-st,freqon-st,freqoff-st,delon-st,deloff-st
	dc.l	bakon-st,bakoff-st
zeitab:	dc.b	"?","d","D","s","r","R","b","m","t","T"
	dc.b	"g","f","F","l","L","a","A",0
dat:	dc.b	29,25,46,37,33,46,45,41,32,32,21,17,58,13,9,58,5,1,10
mon:	dc.b	31,28,31,30,31,30,31,31,30,31,30,31
smin	= 60
sst	= 60*smin
stag	= 24*sst
tjahr	= 365

	even
version:dc.b	"$VER: DMAP 2.1 (02.11.93)",0
keyres:	dc.b	"keymap.resource",0
blkres:	dc.b	"blanker.resource",0
condev: dc.b	"console.device",0
timdev: dc.b	"timer.device",0
inpdev:	dc.b	"input.device",0
dosn:	dc.b	"dos.library",0
intn:	dc.b	"intuition.library",0
gfxn:	dc.b	"graphics.library",0

vecok:	dc.b	"Nichts Resetfest",10
vecoke:
virus:	dc.b	$9b,"4;33;40mMöglicher Virus gefunden"
	dc.b	$9b,"0;31;40m",10
viruse:
spatch:	dc.b	"     Setpatch",10
spatche:
drurt:	dc.b	"Drücke RETURN"
drurte:
cold:	dc.b	"Cold:"
cool:	dc.b	"Cool:"
warm:	dc.b	"Warm:"
verw:	dc.b	"So geht's:",10
	dc.b	"DMAP dsrb300m10tgfla",10
	dc.b	"d:Tastatur belegen",10 
	dc.b	"D:wie d, für WB-Start",10
	dc.b	"s:Echtzeituhr lesen",10
	dc.b	"r:Resetfeste Programme",10
	dc.b	"R:wie r, für WB-Start",10
	dc.b	"b#:Bildschirmschoner nach # sec",10
	dc.b	"m#:Mauszeiger nach # sec abschalten",10
	dc.b	"t:Mausbeschleuniger ein",10
	dc.b	"T:t aus",10
	dc.b	"g:Fenster vergrößern",10
	dc.b	"f:Flimmerfrei ein",10
	dc.b	"F:f aus",10
	dc.b	"l:Löschabfrage",10
	dc.b	"L:l aus",10
	dc.b	"a#:Backupabfrage",10
	dc.b	"A:a aus",10,10
	dc.b	"b,m aus mit #=0",10
	dc.b	"Bild aus:LinkeSHIFT+CTRL+A",10
	even
	dc.b	"V2.1 von Martin Gierich",10 ;Diese Zeile nicht ändern !
verwe:

	;Default-Tastatur

	even
	dc.l	(m2-m1)/4-1,(h2-h1)/4-1,m2-m1,h2-h1	;Größe
kmap:
m1:	DC.B	$00,$00,$00,$00,$00,$00,$00,$00
	DC.B	$00,$00,$00,$00,$03,$9C,$00,$00
	DC.B	$00,$4C,$00,$00,$00,$C4,$00,$00
	DC.B	$00,$2E,$00,$00,$00,$3D,$00,$00
	DC.B	$00,$8C,$00,$00,$01,$C4,$00,$00
	DC.B	$00,$36,$00,$00,$00,$45,$00,$00
	DC.B	$FF,$07,$FF,$07,$FE,$00,$00,$00
	DC.B	$00,$00,$00,$00,$00,$FF,$BF,$FF
	DC.B	$EF,$FF,$EF,$FF,$F7,$47,$F4,$FF
	DC.B	$7F,$00,$00,$00,$07,$03,$03,$03
	DC.B	$03,$03,$07,$03,$03,$03,$03,$07
	DC.B	$03,$07,$80,$00,$07,$07,$07,$07
	DC.B	$07,$07,$07,$07,$07,$07,$07,$07
	DC.B	$80,$00,$00,$00,$07,$07,$07,$07
	DC.B	$07,$07,$07,$07,$07,$03,$03,$07
	DC.B	$80,$00,$00,$00,$01,$07,$07,$07
	DC.B	$07,$07,$07,$07,$03,$03,$07,$80
	DC.B	$00,$00,$00,$00,$02,$00,$41,$00
	DC.B	$05,$02,$00,$80,$80,$80,$00,$80
	DC.B	$41,$41,$41,$41,$41,$41,$41,$41
	DC.B	$41,$41,$41,$41,$00,$00,$05,$05
	DC.B	$00,$00,$00,$40,$80,$80,$80,$80
	DC.B	$80,$80,$80,$80,$80,$80,$80,$80
	DC.B	$80,$80,$80,$80,$80,$80,$80,$80
	DC.B	$80,$80,$80,$80,$7E,$60,$7E,$60
	DC.B	$21,$B9,$21,$31,$B2,$40,$22,$32
	DC.B	$23,$B3,$A7,$33,$A2,$B0,$24,$34
	DC.B	$25,$BC,$25,$35,$5E,$BD,$26,$36
	DC.B	$26,$BE,$2F,$37,$2A,$B7,$28,$38
	DC.B	$28,$AB,$29,$39,$29,$BB,$3D,$30
	DC.B	$5F,$2D,$3F,$DF,$00,$00,$00,$05
	DC.B	$7C,$5C,$7C,$5C,$00,$00,$00,$00
	DC.B	$00,$00,$00,$30,$C5,$E5,$51,$71
	DC.B	$B0,$B0,$57,$77,$00,$00,$45,$65
	DC.B	$AE,$AE,$52,$72,$DE,$FE,$54,$74
	DC.B	$A5,$A4,$5A,$7A,$00,$00,$55,$75
	DC.B	$00,$00,$49,$69,$00,$00,$4F,$6F
	DC.B	$B6,$B6,$50,$70,$7B,$5B,$DC,$FC
	DC.B	$7D,$5D,$2A,$2B,$00,$00,$00,$00
	DC.B	$00,$00,$00,$31,$00,$00,$00,$32
	DC.B	$00,$00,$00,$33,$00,$00,$41,$61
	DC.B	$A7,$DF,$53,$73,$D0,$F0,$44,$64
	DC.B	$00,$00,$46,$66,$00,$00,$47,$67
	DC.B	$00,$00,$48,$68,$00,$00,$4A,$6A
	DC.B	$00,$00,$4B,$6B,$A3,$A3,$4C,$6C
	DC.B	$3A,$3B,$D6,$F6,$22,$27,$C4,$E4
	DC.B	$5E,$23,$5E,$23,$00,$00,$00,$00
	DC.B	$00,$00,$00,$34,$00,$00,$00,$35
	DC.B	$00,$00,$00,$36,$00,$00,$3E,$3C
	DC.B	$00,$00,$59,$79,$F7,$D7,$58,$78
	DC.B	$C7,$E7,$43,$63,$AA,$AA,$56,$76
	DC.B	$BA,$BA,$42,$62,$00,$00,$4E,$6E
	DC.B	$BF,$B8,$4D,$6D,$3C,$2C,$3B,$2C
	DC.B	$3E,$2E,$3A,$2E,$3F,$AD,$5F,$2D
	DC.B	$00,$00,$00,$00,$00,$00,$00,$2E
	DC.B	$00,$00,$00,$37,$00,$00,$00,$38
	DC.B	$00,$00,$00,$39,$00,$00,$A0,$20
	DC.B	$00,$00,$00,$08,$00,$00,$02,$A4
	DC.B	$00,$00,$00,$0D,$00,$0A,$0A,$0D
	DC.B	$00,$00,$9B,$1B,$00,$00,$00,$7F
	DC.B	$00,$00,$00,$00,$00,$00,$00,$00
	DC.B	$00,$00,$00,$00,$00,$00,$00,$2D
	DC.B	$00,$00,$00,$00,$00,$00,$02,$AB
	DC.B	$00,$00,$02,$B3,$00,$00,$02,$BB
	DC.B	$00,$00,$02,$C4,$00,$00,$02,$CD
	DC.B	$00,$00,$02,$E5,$00,$00,$03,$02
	DC.B	$00,$00,$03,$17,$00,$00,$03,$28
	DC.B	$00,$00,$03,$38,$00,$00,$03,$48
	DC.B	$00,$00,$03,$78,$00,$00,$E5,$00
	DC.B	$00,$00,$E5,$00,$1B,$1B,$7B,$5B
	DC.B	$1D,$1D,$7D,$5D,$00,$00,$00,$2F
	DC.B	$00,$00,$00,$2A,$00,$00,$00,$2B
	DC.B	$00,$00,$03,$97,$00,$00,$00,$00
	DC.B	$00,$00,$00,$00,$00,$00,$00,$00
	DC.B	$00,$00,$00,$00,$00,$00,$00,$00
	DC.B	$00,$00,$00,$00,$00,$00,$00,$00
	DC.B	$00,$00,$00,$00,$00,$00,$00,$00
	DC.B	$00,$00,$00,$00,$00,$00,$00,$00
	DC.B	$00,$00,$00,$00,$00,$00,$00,$00
	DC.B	$00,$00,$00,$00,$00,$00,$00,$00
	DC.B	$00,$00,$00,$00,$00,$00,$00,$00
	DC.B	$00,$00,$00,$00,$00,$00,$00,$00
	DC.B	$00,$00,$00,$00,$00,$00,$00,$00
	DC.B	$00,$00,$00,$00,$00,$00,$00,$00
	DC.B	$00,$00,$00,$00,$01,$04,$02,$05
	DC.B	$09,$9B,$5A,$02,$04,$02,$06,$9B
	DC.B	$41,$9B,$54,$02,$04,$02,$06,$9B
	DC.B	$42,$9B,$53,$02,$04,$03,$06,$9B
	DC.B	$43,$9B,$20,$40,$02,$04,$03,$06
	DC.B	$9B,$44,$9B,$20,$41,$04,$04,$10
	DC.B	$08,$44,$69,$72,$0D,$53,$74,$61
	DC.B	$72,$74,$75,$70,$2D,$53,$65,$71
	DC.B	$75,$65,$6E,$63,$65,$05,$04,$14
	DC.B	$09,$4C,$69,$73,$74,$0D,$53,$79
	DC.B	$73,$74,$65,$6D,$2D,$43,$6F,$6E
	DC.B	$66,$69,$67,$75,$72,$61,$74,$69
	DC.B	$6F,$6E,$08,$04,$09,$0C,$45,$78
	DC.B	$65,$63,$75,$74,$65,$20,$4D,$6F
	DC.B	$75,$6E,$74,$4C,$69,$73,$74,$05
	DC.B	$04,$08,$09,$49,$6E,$66,$6F,$0D
	DC.B	$2E,$6C,$69,$62,$72,$61,$72,$79
	DC.B	$05,$04,$07,$09,$43,$6F,$70,$79
	DC.B	$20,$2E,$64,$65,$76,$69,$63,$65
	DC.B	$04,$04,$08,$08,$43,$6C,$73,$0D
	DC.B	$2D,$48,$61,$6E,$64,$6C,$65,$72
	DC.B	$09,$04,$23,$0D,$50,$61,$74,$68
	DC.B	$20,$52,$41,$4D,$3A,$46,$6F,$72
	DC.B	$6D,$61,$74,$20,$44,$72,$69,$76
	DC.B	$65,$20,$44,$46,$31,$3A,$20,$4E
	DC.B	$61,$6D,$65,$20,$4C,$65,$65,$72
	DC.B	$20,$4E,$6F,$69,$63,$6F,$6E,$73
	DC.B	$0F,$04,$0C,$13,$50,$61,$74,$68
	DC.B	$20,$53,$59,$53,$3A,$53,$79,$73
	DC.B	$74,$65,$6D,$49,$6E,$73,$74,$61
	DC.B	$6C,$6C,$20,$44,$46,$31,$3A,$03
	DC.B	$02,$9B,$3F,$7E,$64,$6C,$00,$4D
	DC.B	$20,$47,$69,$65,$72,$69,$63,$68
m2:

h1:	DC.B	$00,$00,$02,$40,$00,$00,$02,$20
	DC.B	$00,$00,$02,$1C,$00,$00,$02,$18
	DC.B	$00,$00,$02,$14,$00,$00,$02,$10
	DC.B	$00,$00,$02,$0C,$00,$00,$02,$08
	DC.B	$00,$00,$02,$04,$00,$00,$02,$00
	DC.B	$00,$00,$01,$FC,$00,$00,$01,$F8
	DC.B	$00,$00,$01,$F4,$00,$00,$01,$CC
	DC.B	$00,$00,$00,$2A,$00,$00,$00,$26
	DC.B	$00,$00,$00,$22,$00,$00,$00,$1E
	DC.B	$00,$00,$00,$1A,$00,$00,$00,$16
	DC.B	$00,$00,$00,$12,$00,$00,$00,$0E
	DC.B	$00,$00,$00,$0A

	even
h4:	dcb.w	(h4-st)/2-((h4-st)/4*2)	;Wäre das auch einfacher
					;möglich gewesen ?
					;Ja, mit CNOP !
h2:	dc.l	$03f2	;Hunk-Ende
h3:

	dcb.b	1000	;Platz für größere Tastaturen



end:	END

