execbase        =    4
;-- exec --
forbid          = -132
findtask        = -294
waitport        = -384
getmsg          = -372
replymsg        = -378
oldopenlib      = -408
allocmem        = -198
freemem         = -210
availmem        = -216
;-- dos --
open            = - 30
close           = - 36
read            = - 42
write           = - 48
delay           = -198
;-- intuition --
clearmenustrip  = - 54
closescreen     = - 66
closewindow     = - 72
displayalert    = - 90
initrequester   = -138
movewindow      = -168
offgadget       = -174
offmenu         = -180
ongadget        = -186
onmenu          = -192
openscreen      = -198
openwindow      = -204
screentoback    = -246
screentofront   = -252
setmenustrip    = -264
setwindowtitles = -276
sizewindow      = -288
viewadress      = -294
viewportadress  = -300
windowtoback    = -306
windowtofront   = -312
;graphics-------------
WaitTOF         = -270
;register-------------
taste           = $bfec01
mouse           = $bfe001
led             = mouse
run:
jmp		wbtest			;start
getdosbase:
move.l		execbase,a6		;basis exec
lea.l		dosname,a1		;zeiger auf namen
jsr		oldopenlib(a6)		;dos.lib öffnen
move.l		d0,dosbase		;basis retten
rts					;fehler später prüfen
getintbase:
move.l		execbase,a6		;
lea.l		intname,a1		;zeiger auf namen
jsr		oldopenlib(a6)		;intuition.lib öffnen
move.l		d0,intbase		;basis retten
rts					;falls fehler später prüfen
getgraphbase:
move.l		execbase,a6		;
lea.l		graphname,a1		;zeiger auf namen
jsr		oldopenlib(a6)		;graphics.lib öffnen
move.l		d0,graphbase		;basis retten
rts					;
stackpointer:	dc.l		0 	;stackpointer
message:	dc.l		0	;zeiger auf message
error:		dc.l		0	;um returncode zu geben
dosbase:	dc.l		0	;zeiger auf dos.lib
intbase:	dc.l		0	;zeiger auf intuition.lib
graphbase:	dc.l		0	;zeiger auf graphics.lib
dosname:
dc.b		"dos.library",0
even
intname:
dc.b		"intuition.library",0
even
graphname:
dc.b		"graphics.library",0
even
dc.b		"Klaus Deppisch",0
even
wbtest:
move.l		execbase,a6		;basis exec
move.l		a7,stackpointer		;stackpointer retten
clr.l		message			;messagepointer auf null
move.l		#0,a1			;a1 löschen
jsr		findtask(a6)		;zeiger auf eigenen task
move.l		d0,a4			;zeiger nach a4
tst.l		$ac(a4)			;test auf CLI-start
bne		start			;ja dann gleich rein
lea.l		$5c(a4),a0		;zeiger auf messageport
jsr		waitport(a6)		;auf botschaft warten
jsr		getmsg(a6)		;und abholen
move.l		d0,message		;message retten
start:
jsr		main			;muß mit rts enden
tst.l		message			;message holen
beq.s		nomessage		;cli-start
move.l		execbase,a6		;basis exec
jsr		forbid(a6)		;task-switching aus
move.l		message,a1		;zeiger auf message
jsr		replymsg(a6)		;zurückgeben
nomessage:
move.l		stackpointer,a7		;alten wert holen
move.l		error,d0		;wert holen für returncode
rts					;feierabend
;--------------------------------------------------------
main:
jsr		getdosbase		;dos öffnen
jsr		getgraphbase		;graphics öffnen
jsr		getintbase		;intuition öffnen
tst.l		dosbase			;basis gefunden ?
beq		nixram			;feierabend
move.l		#$01,requirements	;nicht verschieben
move.l		#131072,bytesize	;128kByte
jsr		allocmem_exec		;raffen
tst.l		adressa			;speicher da ?
beq		nixram			;feierabend
jsr		openmainraw		;fenster öffnen
tst.l		mainwindowhandle	;handle da ?
beq		feierabend		;dann halt nicht
jsr		printmainmenue		;text ausgeben		
jmp 		menuekey		;menue abfragen
quit:
jsr		closemainraw		;fenster schließen
feierabend:
move.l		adressa,memblock	;adresse holen
jsr		freemem_exec		;speicher weg
nixram:
move.l		#0,error		;kein fehler
rts					;feierabend
;--------------------------------------------------------
even
writetext:
move.l		#0,textlength		;text löschen
move.l		dosbase,a6		;basis dos
move.l		mainwindowhandle,d1	;fensternummer
move.l		#cursoron,d2		;zeiger auf zeichen
move.l		#3,d3			;länge
jsr		write(a6)		;ausgeben
move.l		mainwindowhandle,d1	;fensternummer
move.l		#screenclear,d2		;zeiger auf buffer
move.l		#screenclearend-screenclear,d3	;länge
jsr		write(a6)		;ausgeben
clr.l		d0			;löschen
move.w		attribute,d0		;holen
add.b		#$30,d0			;ASCII
lea.l		textstile,a0		;adresse holen
add.l		#1,a0			;+1
move.b		d0,(a0)			;einschreiben
move.l		mainwindowhandle,d1	;nummer
move.l		#textstile,d2		;buffer
move.l		#textstilee-textstile,d3;4 zeichen
jsr		write(a6)		;ausgeben
move.l		adressa,a0		;anfang holen
move.w		attribute,(a0)		;attribute einschreiben
add.l		#2,a0			;erhöhen
move.l		a0,textstart		;merken
inputloop:
move.l		dosbase,a6		;basis dos
move.l		mainwindowhandle,d1	;fensternummer
move.l		#inputbuff,d2		;zeiger auf buffer
move.l		#10,d3			;max. 10 Zeichen haha
jsr		read(a6)		;einlesen
lea.l		inputbuff,a0		;in a0 holen
move.b		(a0),d0			;ein byte holen
cmpi.b		#$1b,d0			;ESCape ?
beq		mainmenue		;ja ? dann hauptmenue
cmpi.b		#$9b,d0			;CSI ?
beq		sondertaste		;dann nachhaken
cmpi.b		#$0d,d0			;return ?
beq		return			;ja
cmpi.b		#$08,d0			;backspace ?
beq		backspace		;ja
cmpi.b		#$20,d0			;SPACE ?
beq		leertaste		;ja
cmpi.b		#$7f,d0			;DEL ?
beq		delete			;ja
move.l		textstart,a1		;adresse holen
move.l		textlength,d1		;länge holen
move.b		d0,0(a1,d1)		;zeichen einschreiben
add.l		#1,textlength		;länge erhöhen
cmpi.l		#131000,textlength	;max länge erreicht ?
bge		warning			;warnen !!!
move.b		d0,outputbuff		;in buffer schreiben
move.l		mainwindowhandle,d1	;fensternummer
move.l		#outputbuff,d2		;zeiger auf buffer
move.l		#1,d3			;länge
jsr		write(a6)		;ausgeben
bra		inputloop		;und weiter im text
sondertaste:
move.l		mainwindowhandle,d1	;fensternummer
move.l		#inputbuff,d2		;bufferadress
move.l		#10,d3			;max length ha
jsr		read(a6)		;einlesen
lea.l		inputbuff,a0		;adresse holen
move.b		(a0),d0			;holen
cmpi.b		#$3f,d0			;HELP ?
beq		scrclr			;64er läßt grüßen
cmpi.b		#$41,d0			;cursor UP ?
beq		crsrup			;auf 
cmpi.b		#$42,d0			;cursor DOWN ?
beq		crsrdown		;ab
cmpi.b		#$43,d0			;cursor LEFT ?
beq		crsrleft		;links
cmpi.b		#$44,d0			;cursor RIGHT ?
beq		crsrright		;rechts
bra		inputloop		;nichts von alledem
scrclr:
move.l		mainwindowhandle,d1	;fensternummer
move.l		#screenclear,d2		;zeiger auf zeichen
move.l		#screenclearend-screenclear,d3	;länge
jsr		write(a6)		;ausgeben
move.l		textstart,a0		;anfang text
move.l		textlength,d0		;länge
move.b		#$00,0(a0,d0)		;einschreiben
add.l		#1,textlength		;inc
bra		inputloop		;wer's glaubt
crsrup:
move.l		mainwindowhandle,d1	;fensternummer
move.l		#cursorauf,d2		;buffer
move.l		#2,d3			;länge
jsr		write(a6)		;ausgeben
move.l		textstart,a0		;anfang
move.l		textlength,d0		;länge
move.b		#$01,0(a0,d0)		;crsrup
add.l		#1,textlength		;länge erhöhen
bra		inputloop		;fertig
crsrdown:
move.l		mainwindowhandle,d1	;fensternummer
move.l		#cursorab,d2		;buffer
move.l		#2,d3			;länge
jsr		write(a6)		;ausgeben
move.l		textstart,a0		;anfang
move.l		textlength,d0		;länge
move.b		#$02,0(a0,d0)		;crsrdown
add.l		#1,textlength		;länge erhöhen
bra		inputloop		;fertig
crsrleft:
move.l		mainwindowhandle,d1	;fensternummer
move.l		#cursorlinks,d2		;buffer
move.l		#2,d3			;länge
jsr		write(a6)		;ausgeben
move.l		textstart,a0		;anfang
move.l		textlength,d0		;länge
move.b		#$03,0(a0,d0)		;crsrleft
add.l		#1,textlength		;länge erhöhen
bra		inputloop		;fertig
crsrright:
move.l		mainwindowhandle,d1	;fensternummer
move.l		#cursorrechts,d2	;buffer
move.l		#2,d3			;länge
jsr		write(a6)		;ausgeben
move.l		textstart,a0		;anfang
move.l		textlength,d0		;länge
move.b		#$04,0(a0,d0)		;crsrright
add.l		#1,textlength		;länge erhöhen
bra		inputloop		;fertig
return:
move.l		mainwindowhandle,d1	;nummer
move.l		#linefeed,d2		;buffer
move.l		#2,d3			;2 zeichen
jsr		write(a6)		;ausgeben
move.l		textstart,a0		;anfang
move.l		textlength,d0		;länge
move.b		#$0d,0(a0,d0)		;linefeed
add.l		#1,textlength		;länge erhöhen
bra		inputloop		;fertig
backspace:
move.l		mainwindowhandle,d1	;fensternummer
move.l		#backleer,d2		;buffer
move.l		#4,d3			;länge
jsr		write(a6)		;ausgeben
move.l		textstart,a0		;anfang
move.l		textlength,d0		;länge
move.b		#$08,0(a0,d0)		;backspace
add.l		#1,textlength		;länge erhöhen
bra		inputloop		;fertig
leertaste:
move.l		mainwindowhandle,d1	;fensternummer
move.l		#space,d2		;buffer
move.l		#5,d3			;länge
jsr		write(a6)		;ausgeben
move.l		textstart,a0		;anfang
move.l		textlength,d0		;länge
move.b		#$20,0(a0,d0)		;leer
add.l		#1,textlength		;länge erhöhen
bra		inputloop		;fertig
delete:
move.l		mainwindowhandle,d1	;fensternummer
move.l		#loesche,d2		;buffer
move.l		#3,d3			;länge
jsr		write(a6)		;ausgeben
move.l		textstart,a0		;anfang
move.l		textlength,d0		;länge
move.b		#$7f,0(a0,d0)		;delete
add.l		#1,textlength		;länge erhöhen
bra		inputloop		;fertig

warning:
move.l		intbase,a6		;int. basis holen
move.l		#0,d0			;alertnummer
move.l		#28,d1			;höhe von alert
lea.l		alerttext,a0		;adresse text
jsr		displayalert(a6)	;alert ausgeben
move.l		dosbase,a6		;dos base holen
bra		inputloop		;das war's
alerttext:
		dc.b	$00,$0a,$10,$20
		dc.b	" >> WARNING << you've typed nearly 128k"
		dc.b	" Byte --> NEAR OUT OF HEAP SPACE !!! ",0,0

even
outputbuff:	blk.b	10,0		
inputbuff:	blk.b	10,0
textstart:	dc.l	0
textstile:	dc.b	$9b,"0;31;40m"
textstilee:
even
cursoron:	dc.b	$9b,$20,$70,0
screenclear:	dc.b	$9b,"0;0H",$9b,$4a
screenclearend:
even
space:		dc.b	$9b,$31,$40,$9b,$43,$00
loesche:	dc.b	$9b,$31,$50,$00
backleer:	dc.b	$08,$9b,$31,$50
linefeed:	dc.b	$0d,$0a
cursorauf:	dc.b	$9b,$41
cursorab:	dc.b	$9b,$42
cursorlinks:	dc.b	$9b,$43
cursorrechts:	dc.b	$9b,$44
;--------------------------------------------------------
even
continue:
move.l		textlength,d0		;länge holen
cmpi.l		#0,d0			;null ?
beq		mainmenue		;dann nicht !!!
move.l		dosbase,a6		;basis dos
move.l		mainwindowhandle,d1	;fenster
move.l		#continit,d2		;buffer
move.l		#continite-continit,d3	;länge
jsr		write(a6)		;ausgeben
move.w		attribute,d0		;holen
lea.l		contstyle,a0		;holen
add.l		#1,a0			;+1
add.b		#$30,d0			;ASCII
move.b		d0,(a0)			;einschreiben
move.l		mainwindowhandle,d1	;fenster
move.l		#contstyle,d2		;adresse buffer
move.l		#contstylee-contstyle,d3;länge
jsr		write(a6)		;ausgeben
clr.l		contcounter		;initialisieren
contloop:
move.l		dosbase,a6		;dosbasis
move.l		textstart,a5		;startadresse
move.l		contcounter,d5		;holen
add.l		#1,contcounter		;erhöhen
move.b		0(a5,d5),d0		;byte holen
cmpi.b		#$00,d0			;Help ?
beq		conthelp		;ja
cmpi.b		#$01,d0			;crsrup ?
beq		contup			;ja
cmpi.b		#$02,d0			;crsrdown ?
beq		contdown		;ja
cmpi.b		#$03,d0			;crsrleft ?
beq		contleft		;ja
cmpi.b		#$04,d0			;crsrright ?
beq		contright		;ja
cmpi.b		#$08,d0			;backspace ?
beq		contback		;ja
cmpi.b		#$0d,d0			;return ?
beq		contreturn		;ja
cmpi.b		#$20,d0			;space ?
beq		contspace		;ja
cmpi.b		#$7f,d0			;delete ?
beq		contdelete		;ja
move.b		d0,contbuffer		;in buffer
move.l		mainwindowhandle,d1	;nummer
move.l		#contbuffer,d2		;zeiger auf text (1 zeichen)
move.l		#1,d3			;anzahl
jsr		write(a6)		;und ausgeben
contpoint:
move.b		taste,d0		;register holen
move.b		#0,taste		;löschen
ror.b		#1,d0			;schieben
not.b		d0			;invertieren
cmpi.b		#$45,d0			;ESCape ?
beq		mainmenue		;schluß
move.l		textlength,d0		;holen
move.l		contcounter,d1		;holen
cmp.l		d0,d1			;ende ?
bne		contloop		;nein !!!
jmp		inputloop		;weiter eingeben

conthelp:
move.l		mainwindowhandle,d1	;fensternummer
move.l		#contclear,d2		;zeiger auf auszugebende zeic.
move.l		#contcleare-contclear,d3;anzahl
jsr		write(a6)		;ausgeben
bra		contpoint		;zurück

contup:
move.l		mainwindowhandle,d1	;kanalnummer
move.l		#contcursorauf,d2	;buffer
move.l		#2,d3			;anzahl
jsr		write(a6)		;ausgeben		
bra		contpoint		;zurück

contdown:
move.l		mainwindowhandle,d1	;kein kommentar mehr
move.l		#contcursorab,d2	;
move.l		#2,d3			;
jsr		write(a6)		;ausgeben
bra		contpoint		;zurück

contleft:
move.l		mainwindowhandle,d1	;kein kommentar mehr
move.l		#contcursorlinks,d2	;
move.l		#2,d3			;
jsr		write(a6)		;ausgeben
bra		contpoint		;zurück

contright:
move.l		mainwindowhandle,d1	;kein kommentar mehr
move.l		#contcursorrechts,d2	;
move.l		#2,d3			;
jsr		write(a6)		;ausgeben
bra		contpoint		;zurück

contback:
move.l		mainwindowhandle,d1	;kein kommentar mehr
move.l		#contbackleer,d2	;
move.l		#4,d3			;
jsr		write(a6)		;ausgeben
bra		contpoint		;zurück

contreturn:
move.l		mainwindowhandle,d1	;kein kommentar mehr
move.l		#contlinefeed,d2	;
move.l		#2,d3			;
jsr		write(a6)		;ausgeben
bra		contpoint		;zurück

contspace:
move.l		mainwindowhandle,d1	;kein kommentar mehr
move.l		#contleer,d2		;
move.l		#5,d3			;
jsr		write(a6)		;ausgeben
bra		contpoint		;zurück

contdelete:
move.l		mainwindowhandle,d1	;kein kommentar mehr
move.l		#contloesche,d2		;
move.l		#3,d3			;
jsr		write(a6)		;ausgeben
bra		contpoint		;zurück

contdelay:
move.l		#1,d1			;50*1/50 sekunde
jsr		delay(a6)		;timeout
rts					;das war's

contbuffer:	dc.b	0		;ein byte buffer
even
contcounter:		dc.l	0	;merker
even
continit:	
		dc.b	$9b,$20,$70	;cursor an
		dc.b	$9b,"0;0H"	;cursor home
		dc.b	$9b,$4a		;fenster ab crsr löschen
continite:
contstyle:	even
		dc.b	$9b,"0;31;40m"
contstylee:
contclear:	dc.b	$9b,"0;0H",$9b,$4a
contcleare:
even
contleer:		dc.b	$9b,$31,$40,$9b,$43,$00
contloesche:		dc.b	$9b,$31,$50,$00
contbackleer:		dc.b	$08,$9b,$31,$50
contlinefeed:		dc.b	$0d,$0a
contcursorauf:		dc.b	$9b,$41
contcursorab:		dc.b	$9b,$42
contcursorlinks:	dc.b	$9b,$43
contcursorrechts:	dc.b	$9b,$44

;--------------------------------------------------------
even
cleartext:
move.l		dosbase,a6		;sicherheitshalber
move.l		mainwindowhandle,d1	;handle
move.l		#clearsabbel,d2		;adresse text
move.l		#sabbelend-clearsabbel,d3	;länge
jsr		write(a6)		;ausgeben
move.l		mainwindowhandle,d1	;handle
move.l		#surebuffer,d2		;adresse buffer
move.l		#4,d3			;max 4 zeichen ha ha
jsr		read(a6)		;lesen
lea.l		surebuffer,a0		;adresse buffer holen
move.b		(a0),d0			;inhalt holen
cmpi.b		#$4e,d0			;N ?
beq		no			;nein
cmpi.b		#$6e,d0			;n ?
beq		no			;nein
cmpi.b		#$59,d0			;Y ?
beq		yes			;ja
cmpi.b		#$79,d0			;y ?
beq		yes			;ja
bra		cleartext		;nichts von beidem
yes:
move.w		#0,attribute		;auf normal darstellung
move.l		#0,textlength		;zeiger auf textlänge = 0
no:
jmp		mainmenue		;das war's
textlength:	dc.l	0		;länge des textes
surebuffer:	dc.l	0
clearsabbel:
		dc.b	$9b,$20,$70
		dc.b	$9b,"0;0H",$9b,$4a,$0a,$0a,$0d
		dc.b	"Sure ?  [ Y/N ] ",$9b,$30,$20,$70
sabbelend:
;--------------------------------------------------------
even
showtext:
move.l		textlength,d0		;länge holen
cmpi.l		#0,d0			;null ?
beq		mainmenue		;dann nicht !!!
move.l		dosbase,a6		;basis dos
move.l		mainwindowhandle,d1	;fenster
move.l		#showinit,d2		;buffer
move.l		#showinite-showinit,d3	;länge
jsr		write(a6)		;ausgeben
move.w		attribute,d0		;holen
lea.l		showstyle,a0		;holen
add.l		#1,a0			;+1
add.b		#$30,d0			;ASCII
move.b		d0,(a0)			;einschreiben
move.l		mainwindowhandle,d1	;fenster
move.l		#showstyle,d2		;adresse buffer
move.l		#showstylee-showstyle,d3;länge
jsr		write(a6)		;ausgeben
clr.l		showcounter		;initialisieren
showloop:
move.l		dosbase,a6		;dosbasis
move.l		textstart,a5		;startadresse
move.l		showcounter,d5		;holen
add.l		#1,showcounter		;erhöhen
move.b		0(a5,d5),d0		;byte holen
cmpi.b		#$00,d0			;Help ?
beq		showhelp		;ja
cmpi.b		#$01,d0			;crsrup ?
beq		showup			;ja
cmpi.b		#$02,d0			;crsrdown ?
beq		showdown		;ja
cmpi.b		#$03,d0			;crsrleft ?
beq		showleft		;ja
cmpi.b		#$04,d0			;crsrright ?
beq		showright		;ja
cmpi.b		#$08,d0			;backspace ?
beq		showback		;ja
cmpi.b		#$0d,d0			;return ?
beq		showreturn		;ja
cmpi.b		#$20,d0			;space ?
beq		showspace		;ja
cmpi.b		#$7f,d0			;delete ?
beq		showdelete		;ja
move.b		d0,showbuffer		;in buffer
move.l		mainwindowhandle,d1	;nummer
move.l		#showbuffer,d2		;zeiger auf text (1 zeichen)
move.l		#1,d3			;anzahl
jsr		write(a6)		;und ausgeben
showpoint:
move.b		taste,d0		;holen
move.b		#0,taste		;löschen
ror.b		#1,d0			;bit0 nach 7
not.b		d0			;negieren
cmpi.b		#$45,d0			;ESC ?
beq		mainmenue		;dann schluß
jsr		showdelay		;verzögern !!!
move.l		textlength,d0		;holen
move.l		showcounter,d1		;holen
cmp.l		d0,d1			;ende ?
bne		showloop		;nein !!!

waitesc:
move.l		dosbase,a6		;basis dos
move.l		mainwindowhandle,d1	;nummer
move.l		#escbuffer,d2		;zeiger auf buffer
move.l		#2,d3			;max. länge
jsr		read(a6)		;einlesen
lea.l		escbuffer,a0		;holen
cmpi.b		#$1b,(a0)		;ESC ?
bne		waitesc			;nein !
bra		mainmenue		;fertig

showhelp:
move.l		mainwindowhandle,d1	;fensternummer
move.l		#showclear,d2		;zeiger auf auszugebende zeic.
move.l		#showcleare-showclear,d3;anzahl
jsr		write(a6)		;ausgeben
bra		showpoint		;zurück

showup:
move.l		mainwindowhandle,d1	;kanalnummer
move.l		#showcursorauf,d2	;buffer
move.l		#2,d3			;anzahl
jsr		write(a6)		;ausgeben		
bra		showpoint		;zurück

showdown:
move.l		mainwindowhandle,d1	;kein kommentar mehr
move.l		#showcursorab,d2	;
move.l		#2,d3			;
jsr		write(a6)		;ausgeben
bra		showpoint		;zurück

showleft:
move.l		mainwindowhandle,d1	;kein kommentar mehr
move.l		#showcursorlinks,d2	;
move.l		#2,d3			;
jsr		write(a6)		;ausgeben
bra		showpoint		;zurück

showright:
move.l		mainwindowhandle,d1	;kein kommentar mehr
move.l		#showcursorrechts,d2	;
move.l		#2,d3			;
jsr		write(a6)		;ausgeben
bra		showpoint		;zurück

showback:
move.l		mainwindowhandle,d1	;kein kommentar mehr
move.l		#showbackleer,d2	;
move.l		#4,d3			;
jsr		write(a6)		;ausgeben
bra		showpoint		;zurück

showreturn:
move.l		mainwindowhandle,d1	;kein kommentar mehr
move.l		#showlinefeed,d2	;
move.l		#2,d3			;
jsr		write(a6)		;ausgeben
bra		showpoint		;zurück

showspace:
move.l		mainwindowhandle,d1	;kein kommentar mehr
move.l		#showleer,d2		;
move.l		#5,d3			;
jsr		write(a6)		;ausgeben
bra		showpoint		;zurück

showdelete:
move.l		mainwindowhandle,d1	;kein kommentar mehr
move.l		#showloesche,d2		;
move.l		#3,d3			;
jsr		write(a6)		;ausgeben
bra		showpoint		;zurück

showdelay:
bset		#1,led			;led aus
move.l		#4,d1			;4*1/50 sekunde
jsr		delay(a6)		;timeout
bclr		#1,led			;led an
rts					;das war's

escbuffer:	dc.b	$00,$00		;nur so
showbuffer:	dc.b	0		;ein byte buffer
even
delaycount:		dc.l	0	;merker
showcounter:		dc.l	0	;merker
even
showinit:	
		dc.b	$9b,$20,$70	;cursor an
		dc.b	$9b,"0;0H"	;cursor home
		dc.b	$9b,$4a		;fenster ab crsr löschen
showinite:
showstyle:	even
		dc.b	$9b,"0;31;40m"
showstylee:
showclear:	dc.b	$9b,"0;0H",$9b,$4a
showcleare:
even
showleer:		dc.b	$9b,$31,$40,$9b,$43,$00
showloesche:		dc.b	$9b,$31,$50,$00
showbackleer:		dc.b	$08,$9b,$31,$50
showlinefeed:		dc.b	$0d,$0a
showcursorauf:		dc.b	$9b,$41
showcursorab:		dc.b	$9b,$42
showcursorlinks:	dc.b	$9b,$43
showcursorrechts:	dc.b	$9b,$44
;--------------------------------------------------------
even
loadtext:
jsr		openloadcon		;loadfenster öffnen
move.l		loadconhandle,conhandle	;handle einschreiben
jsr		getfilename		;namen holen
jsr		loadfile		;file einlesen
jsr		closeloadcon		;loadfenster schließen
bra		mainmenue		;ins hauptmenue
;--------------------------------------------------------
even
savetext:
jsr		opensavecon		;savefenster öffnen
move.l		saveconhandle,conhandle	;handle holen
jsr		getfilename		;namen holen
jsr		savefile		;speichern
jsr		closesavecon		;fenster zu
bra		mainmenue		;das war's
;--------------------------------------------------------
even
writemen:
move.l		dosbase,a6		;basis dos
move.l		mainwindowhandle,d1	;fensternummer
move.l		#wmentext,d2		;zeiger auf text
move.l		#wmentexte-wmentext,d3	;länge text
jsr		write(a6)		;ausgeben
writemenloop:
move.b		taste,d0		;sondertastenregister
not		d0			;invertieren
ror.b		#1,d0			;rechts rotieren
cmpi.b		#$50,d0			;F1 ?
beq		normalwrite		;normal darstellung
cmpi.b		#$51,d0			;F2 ?
beq		boldwrite		;fettschrift
cmpi.b		#$52,d0			;F3 ?
beq		italicwrite		;kursiv darstellung
cmpi.b		#$53,d0			;F4 ?
beq		underlinewrite		;unterstichene darstellung
cmpi.b		#$54,d0			;F5 ?
beq		inverswrite		;inverse darstellung
cmpi.b		#$59,d0			;F10 ?
beq		writetext		;schreiben
cmpi.b		#$45,d0			;ESCape ?
beq		mainmenue		;ins hauptmenue
bra		writemenloop		;nichts dabei
normalwrite:
move.w		#0,attribute		;merken
bra		writemenloop		;in schleife
boldwrite:
move.w		#1,attribute		;merken
bra		writemenloop		;und in schleife
italicwrite:
move.w		#3,attribute		;merken
bra		writemenloop		;und in schleife
underlinewrite:
move.w		#4,attribute		;merken
bra		writemenloop		;in schleife
inverswrite:
move.w		#7,attribute		;merken
bra		writemenloop		;in schleife
mainmenue:
jsr		printmainmenue		;hauptmenue ausgeben
jmp		menuekey		;einspringen

attribute:	dc.w	0		;merker für schriftart
wmentext:	dc.b 	$9b,$37,$37,$75	;zeilenlänge
		dc.b	$9b,$31,$30,$78	;abstand links in pixel
		dc.b	$9b,$31,$35,$79	;abstand oben in pixel
		dc.b	$9b,$32,$39,$74	;anzahl zeilen
		dc.b	$9b,$20,$70	;cursor an
		dc.b	$9b,"0;31;40m"	;normal darstellung
		dc.b	$9b,"0;0H"	;cursor home setzen
		dc.b	$9b,$4a		;fenster ab crsr löschen
		dc.b	$0a,$0a,$0d	;zwei mal cr
dc.b	"	*** Writemenue *** 	",$0a,$0a,$0d
dc.b	"	Select Stile --->	",$0a,$0a,$0d
dc.b	"	F1  - Normal		",$0a,$0a,$0d
		dc.b	$9b,"1;31;40m"	;fettschrift
dc.b	"	F2  - Bold		",$0a,$0a,$0d
		dc.b	$9b,"0;31;40m"	;schmal
		dc.b	$9b,"3;31;40m"	;kursiv
dc.b	"	F3  - Italic		",$0a,$0a,$0d
		dc.b	$9b,"0;31;40m"	;schmal
		dc.b	$9b,"4;31;40m"	;unterstrichen
dc.b	"	F4  - Underline		",$0a,$0a,$0d
		dc.b	$9b,"0;31;40m"	;schmal
		dc.b	$9b,"7;31;40m"	;invers
dc.b	"	F5  - Invers		",$0a,$0a,$0a,$0a,$0d
		dc.b	$9b,"0;31;40m"	;normal
dc.b	"        F10 - Start writing    ",$9b,$30,$20,$70,$00
wmentexte:

;--------------------------------------------------------
even
loadmen:
jmp loadtext
;--------------------------------------------------------
even
savemen:
jmp savetext
;--------------------------------------------------------
even
menuekey:
move.b		taste,d0		;register in d0
not		d0			;invertieren
ror.b		#1,d0			;einmal nach rechts rotieren
cmpi.b		#$50,d0			;F1 ?
beq		writemen		;ja
cmpi.b		#$51,d0			;F2 ?
beq		continue   		;ja
cmpi.b		#$52,d0			;F3 ?
beq		cleartext		;ja
cmpi.b		#$53,d0			;F4
beq		showtext 		;ja
cmpi.b		#$54,d0			;F5 ?
beq		loadmen 		;ja
cmpi.b		#$55,d0			;F6 ?
beq		savemen 		;ja
cmpi.b		#$56,d0			;F7 ?
beq		quit			;ja
jmp		menuekey		;zurück

;--------------------------------------------------------

even
printmainmenue:
move.l		dosbase,a6		;basis dos
move.l		mainwindowhandle,d1	;handle des fensters
move.l		#maintext,d2		;zeiger auf text
move.l		#maintextend-maintext,d3;textlänge
jmp		write(a6)		;text ausgeben

maintext:  dc.b $9b,$20,$70
	   dc.b $9b,"0;31;40m"
           dc.b	$9b,"0;0H",$9b,$4a,$0a,$0a,$0d	
	   dc.b "        *** Mainmenue  ***",$0a,$0a,$0d
maintext0: dc.b	"        F1 - Write Text",$0a,$0a,$0d
maintext1: dc.b	"        F2 - Continue  ",$0a,$0a,$0d
maintext2: dc.b	"        F3 - Clear Text",$0a,$0a,$0d
maintext3: dc.b	"        F4 - Show Text ",$0a,$0a,$0d
maintext4: dc.b	"        F5 - Load Text ",$0a,$0a,$0d
maintext5: dc.b	"        F6 - Save Text ",$0a,$0a,$0d
maintext6: dc.b	"        F7 - Quit ",$0a,$0a,$0a,$0d
           dc.b $9b,$30,$20,$70,$00
maintextend:

;--------------------------------------------------------

even
openmainraw:
move.l		dosbase,a6		;zeiger auf dos
move.l		#mainwindowname,d1	;zeiger auf name
move.l		#1005,d2		;accessmode
jsr		open(a6)		;fenster aufmachen
move.l		d0,mainwindowhandle	;handle merken
rts					;das war's
mainwindowhandle:
dc.l		0
mainwindowname:
dc.b		"RAW:0/0/640/256/ Amiga Screen Writer 1.00    "
dc.b		"        hit ESCape to go to the mainmenue    ",0

;---------------------------------------------------------

even
closemainraw:
move.l		dosbase,a6		;zeiger auf dos
move.l		mainwindowhandle,d1	;handle übergeben
jsr		close(a6)		;schließen
rts					;muß klappen

;---------------------------------------------------------
even
openloadcon:
move.l		dosbase,a6		;sicher
move.l		#loadconname,d1		;adresse text
move.l		#1005,d2		;mode old
jsr		open(a6)		;öffnen
move.l		d0,loadconhandle	;handle merken
move.l		loadconhandle,d1	;nummer
move.l		#ladetext,d2		;zeiger auf text
move.l		#6,d3			;länge
jsr		write(a6)		;ausgeben
rts					;das war's
loadconhandle:	dc.l	0		;
loadconname:
		dc.b	"CON:0/180/640/30/ Filename (Path!)  "
		dc.b	"+ Return        (Return only aborts)",0
even
ladetext:	dc.b	"Load  ",0
;---------------------------------------------------------
even
closeloadcon:
move.l		dosbase,a6		;sicher
move.l		loadconhandle,d1	;nummer
jmp		close(a6)		;schließen
;---------------------------------------------------------
even
opensavecon:
move.l		dosbase,a6		;sicher
move.l		#saveconname,d1		;adresse text
move.l		#1005,d2		;mode old
jsr		open(a6)		;öffnen
move.l		d0,saveconhandle	;handle merken
move.l		saveconhandle,d1	;nummer
move.l		#speichertext,d2	;zeiger auf text
move.l		#6,d3			;länge
jsr		write(a6)		;ausgeben
rts					;das war's
saveconhandle:	dc.l	0		;
saveconname:
		dc.b	"CON:0/180/640/30/ Filename (Path!)  "
		dc.b	"+ Return        (Return only aborts)",0
even
speichertext:	dc.b	"Save  ",0
;---------------------------------------------------------
even
closesavecon:
move.l		dosbase,a6		;holen
move.l		saveconhandle,d1	;nummer
jmp		close(a6)		;schließen
;---------------------------------------------------------
even
getfilename:
move.l		dosbase,a6		;dosbase holen
move.l		conhandle,d1		;handle
move.l		#filename,d2		;zeiger auf buffer
move.l		#75,d3			;max. länge
jsr		read(a6)		;einlesen
move.l		d0,namelength		;länge merken
lea.l		filename,a0		;adresse buffer
cmpi.b		#$0a,(a0)		;nur return ?
beq		abort			;nix war's
lea.l		filename,a0		;adresse buffer
clr.l		d0			;löschen
getreturn:
add.l		#1,d0			;+1
cmpi.b		#$0a,0(a0,d0)		;return ?
bne		getreturn		;nein
add.l		d0,a0			;addiere
move.b		#".",(a0)+		;einschreiben
move.b		#"a",(a0)+		;amiga
move.b		#"s",(a0)+		;screen
move.b		#"w",(a0)+		;writer
move.b		#$00,(a0)		;ende kennung
rts					;das war's (hoffentlich)

abort:
move.l		conhandle,d1		;fensternummer
jsr		close(a6)		;schließen
move.l		(sp)+,d0		;stapel in ordnung bringen
bra		mainmenue		;und zurück
conhandle:	dc.l	0
namelength:	dc.l	0
;---------------------------------------------------------
even
loadfile:
move.l		dosbase,a6		;sicher
move.l		#filename,d1		;adresse name
move.l		#1005,d2		;mode old
jsr		open(a6)		;öffnen
move.l		d0,loadhandle		;handle merken
beq		fileerror		;nix war's
move.l		loadhandle,d1		;handle
move.l		adressa,d2		;adresse buffer
move.l		#131000,d3		;max length
jsr		read(a6)		;file einlesen
move.l		d0,loadlength		;länge merken
bmi		readerror		;fehler
move.l		loadlength,d0		;holen
sub.l		#2,d0			;attribute abziehen
move.l		d0,textlength		;einschreiben
move.l		adressa,a0		;adresse holen
move.w		(a0),attribute		;attribute einschreiben
add.l		#2,a0			;+2
move.l		a0,textstart		;startadresse text
move.l		loadhandle,d1		;handle
jsr		close(a6)		;file schließen
clr.l		lserror			;errorflag löschen
rts					;das war's
readerror:
move.l		loadhandle,d1		;handle
jsr		close(a6)		;file schließen
fileerror:
move.l		#-1,lserror		;fag setzen
rts					;das war's
loadhandle:	dc.l	0
loadlength:	dc.l	0
lserror:	dc.l	0
filename:	blk.b   80,0
;---------------------------------------------------------
even
savefile:
move.l		adressa,a0		;holen
move.w		attribute,(a0)		;einschreiben
move.l		dosbase,a6		;schon wieder
move.l		#filename,d1		;adresse name	
move.l		#1006,d2		;mode neu
jsr		open(a6)		;öffnen
move.l		d0,savehandle		;merken
beq		fileerror		;nix war's
move.l		savehandle,d1		;nummer
move.l		adressa,d2		;startadresse
move.l		textlength,d3		;länge holen
add.l		#2,d3			;+ attribute
jsr		write(a6)		;speichern
tst.l		d0			;testen
bmi		saveerror		;fehler
move.l		savehandle,d1		;
jsr		close(a6)		;schließen
clr.l		lserror			;fag löschen
rts					;das war's
saveerror:
move.l		savehandle,d1		;nummer
jsr		close(a6)		;schließen
move.l		#-1,lserror		;flag setzen
rts					;das war's
savehandle:	dc.l 	0
;---------------------------------------------------------
even
freemem_exec:
move.l		execbase,a6		;basis exec
move.l		bytesize,d0		;anzahl bytes
move.l		memblock,a1		;speicherlage
jmp		-210(a6)		;freemem aufrufen
bytesize:	dc.l	0		;anzahl bytes
memblock:	dc.l	0		;adresse 
even

;--------------------------------------------------------

even
allocmem_exec:
move.l		execbase,a6		;basis exec
move.l		bytesize,d0		;anzahl bytes
move.l		requirements,d1		;speichertyp
jsr		-198(a6)		;allocmem aufrufen
move.l		d0,adressa		;adresse merken
rts					;das war's
requirements:	dc.l	0		;typ 
adressa:	dc.l	0		;merker für adresse

;---------------------------------------------------------

even
findtask_exec:
move.l		execbase,a6		;basis exec
jsr		-294(a6)		;findtask aufrufen
move.l		d0,thistask		;zeiger auf (eigenen) task
rts					;das war's
thistask:	dc.l	0		;merker
even

;---------------------------------------------------------

even
availmem_exec:
move.l		execbase,a6		;basis exec
move.l		requirm,d1		;speichertyp
jsr		-216(a6)		;availmem aufrufen
move.l		d0,bytesizeav		;wieviel ist da
rts					;das war's
requirm:	dc.l	0		;anforderungen
bytesizeav:	dc.l	0		;adresse 
