		opt l-,p-

_LVOAllocMem	equ	-198
_LVOFreeMem	equ	-210
_LVOAvailMem	equ	-216
_LVOAllocAbs	equ	-204
_LVOFreeEntry	equ	-228
_LVOAddTask	equ	-282
_LVOInsert	equ	-234
_SysBase	equ	4

_LVOOpenScreen	equ	-198
_LVOOpenWindow	equ	-204
_LVOCloseScreen	equ	-66
_LVOCloseWindow	equ	-72
_LVOScreenToFront equ	-252
_LVOScreenToBack equ	-246
_LVOWindowToFront equ	-312
_LVOWindowToBack equ	-306
_LVOMoveWindow  equ	-168
_LVOModifyIDCMP	equ	-150
_LVOPolyDraw	equ	-336
_LVOMove	equ	-240
_LVOSetAPen	equ	-342
_LVORectFill	equ	-306
_LVODraw	equ	-246
_LVOText	equ	-60
_LVOScrollRaster equ	-396

_LVOWait	equ	-318
_LVOAllocSignal equ	-330
_LVOFreeSignal  equ	-336
_LVOSignal	 equ	-324
_LVOGetMsg	equ	-372
_LVOAllocMem	equ	-198
_LVOFreeMem	equ	-210

_LVOViewPortAdress equ  -300
_LVOSetRGB4	equ	-288
_LVOSetAPen	equ	-342
_LVOSetBPen	equ	-348
_LVOWritePixel	equ	-324

_LVOOpen	equ	-30
_LVOClose	equ	-36
_LVORead	equ	-42
_LVOWrite	equ	-48
_LVOOutput	equ	-60
_LVOCurrentTime	equ	-84
_LVOFindTask	equ	-294
_LVORemTask	equ	-288
_LVODelay	equ	-198
_LVOOpenLibrary	equ	-552
_LVOCloseLibrary	equ	-414

_LVOAddPort		equ	-354
_LVORemPort		equ	-360
_LVOFindPort		equ	-390
_LVOGetMsg		equ	-372
_LVOPutMsg		equ	-366
_LVOReplyMsg		equ	-378

_LVOAddIntServer	equ	-168
_LVORemIntServer	equ	-174

_SysBase         equ	4		;Basis von Exec
_LVOOpenLibrary  equ    -552  		;Library oeffnen
_LVOCloseLibrary equ    -414		;Library schliessen

_LVOLock	equ	-84
_LVOUnLock	equ	-90
_LVOExecute	equ	-222
_LVOCurrentDir	equ	-126

_LVOAllocEntry	equ	-222
_LVOKickSumData	equ	-612

	
_LVOItemAdress	equ	-144
_LVOSetMenuStrip equ	-264
_LVOClearMenuStrip equ	-54


_LVOOpenDevice		equ	-444
_LVOCloseDevice		equ	-450
_LVODoIo		equ	-456


_LVOWaitPort		equ	-384
_LVOForbid		equ	-132
pr_CLI		equ	172
pr_MsgPort	equ	92


xl1		equ	0
yl1		equ	4
xr1		equ	8
yr1		equ	12
xl2		equ	16
yl2		equ	20
xr2		equ	24
yr2		equ	28
xxl1		equ	32
yyl1		equ	36
xxr1		equ	40
yyr1		equ	44
xxl2		equ	48
yyl2		equ	52
xxr2		equ	56
yyr2		equ	60

rp		equ	-4
dfi		equ	-16		; Nr Laufwerk
bmflag		equ	-20		; mit/ohne Bitmap
tr_open		equ	-24		; Kennung für Track-Device offen/zu
bl_adr		equ	-28		; ^auf Spei für 1 Block lesen (512)
spei_verw	equ	-32		; ^ auf Speicher um Sp-Adr zu speichern
spei_off	equ	-36		; fortlaufendes Offset dazu
ueb_ga1		equ	-40		; übergabe 1 (^ auf Sp von tatsächl Werte)
ueb_ga2		equ	-44		; übergabe 2 (^ auf Spei für Adr)
ak_dir		equ	-48		; zeigt auf aktuelles Dir (n Schatten)
text_roh	equ	-52		; ^ auf Speicher f ungeordneten Text
text_geo	equ	-56		; ^ auf Speicher f geordneten Text
an_dir		equ	-60		; Anzahl Zeilen im dir
erste_im_dir	equ	-64		; Erste sichtbare (gescrollte) Zeile
erste_merken	equ	-68		; ^auf den Textspeicher der 1. sichtbaren
gr_pfad		equ	-72		; Anzahl buchstaben Pfadname
nr_gewählt	equ	-76		; gewählte Nr
all_num		equ	-80		; ^ auf Speicher mit allen Nr gezeichneter Balken 
lfd_num		equ	-84		; zeigt auf nächstes freies Nr-Feld(innerhalb von all_num)
n_chain_n	equ	-88		; ^auf Spei wo next-Chain-Nr (n Sch)
n_chain_s	equ	-92		; ^auf Spei wo next-Chain-Nr (Sch)
meldung		equ	-96		; 0 keine Meldung,1 Meldung
select_down	equ	-100		; 1 Maus down, 0 Maus up
alte_bl_nr	equ	-104
head		equ	-108		; 0,1
block		equ	-112
track		equ	-116
sektor		equ	-120
mouse_x		equ	-124		; Mousekoor. retten (f Fenster versvhieben)
mouse_y		equ	-128
text_zw		equ	-132		; ^ auf Spei für zwischen-geord. Text
spr_farben	equ	-136
select_left	equ	-140		; links runter
an_sc		equ	-144		; 1,2,3 scrollen

spei_grö_verw	equ	1000
spei_grö	equ	532
off		equ	spei_grö-512
chain		equ	124*4+off
parent		equ	125*4+off	; ^auf Patent (Schatten)
extension	equ	126*4+off	; (keine Zwischenräume beim Rechnen)
sec_type	equ	127*4+off
hasch_r		equ	77*4+off
hasch_v		equ	6*4+off	
name		equ	108*4+off
dir_eintr	equ	105*4+off	; Anzahl dir-Einträge (in n schatten vermerkt)
ist_gelesen	equ	106*4+off	; 1 dann dir bereits gelesen ( im n Schatten)
eigen		equ	1*4+off		; eigene Block-Nr
text_br		equ	40		; Speicherbreite pro Zeile bei textausgabe
spei_grö_text	equ	100*text_br
off_zei		equ	30		; ^ auf Block wo dir ( schatten)
off_dir		equ	34		; Kennung welcher typ
off_bu		equ	38		; Anzahl Buchstaben
off_hin		equ	39		; kennung zum ordnen
off_off		equ	30		; offset auf offset(*40) im Zwischentext
text_x		equ	6		; koordinaten für Textbeginn (x)
text_y		equ	35		; koordinaten für Textbeginn (y)

text_yo		equ	25		; koord Textfenster
text_xo		equ	20		; koord Textfenster
text_xu		equ	248		; koord Textfenster
text_yu		equ	233		; koord.Textfenster

xl_1		equ	290			
yl_1		equ	5			
xr_1		equ	290+11*12-2+8		
yr_1		equ	5+80*3-1+3	

xl_2		equ	460			
yl_2		equ	5			
xr_2		equ	460+11*12-2+8		
yr_2		equ	5+80*3-1+3		

an_zeilen	equ	20

	
DELAY		macro

	lea	_DosBase(pc),a6
	move.l	(a6),a6
	move.l	#\1,d1
	jsr	_LVODelay(a6)

	endm

MENUSTR		macro
men_na\1
	dc.l	\2		; Zeiger auf nächsten Menutitel
	dc.w	\3,\4		; linke,obere Ecke
	dc.w	\5,0		; Breite,Höhe (werden ignoriert)
	dc.w	1		; Flags (Menuenabled=1)
	dc.l	\6		; Zeiger auf Menutitel
	dc.l	\7		; Zeiger auf Str Menuitem
	dc.w	0,0,0,0		; Systemvariablen

	endm


ITEMSTR		macro
item\1
	dc.l	\2		; Zeiger auf nächstes Item
	dc.w	\3,\4		; links,oben
	dc.w	\5,\6		; Breite,Höhe
	dc.w	\7		; Text $2 + aktiviert $10 + kompletiert $40
	dc.l	0		; keine Abhängigkeiten
	dc.l	mentext\1	; Zeiger auf Menutext
	dc.l	0		; kein alternativer Text
	dc.b	\8		; alternative Tastaturangabe
	dc.b	0		; leer
	dc.l	0		; Zeiger auf Untermenu
	dc.w	0		; Intuition-Flag

	endm



TEXTSTR		macro
mentext\1
	dc.b	\2		; Vordergrundfarbe
	dc.b	\3		; Hintergrundfarbe
	dc.b	\6		; Zeichenmodus JAM = 2 Invertiert = 0 Normal
	dc.b	0		; leer
	dc.w	\4,\5		; linke,obere Ecke
	dc.l	0		; voreingestellter Zeichensatz
	dc.l	mtext\1		; Zeiger auf String
	dc.l	0		; keine weitere Int-Test-str

	endm

VERGLEICHMENU 	macro			; benutzt d0-d5,Mauskoor in d4,nicht überschrieben
					; d2 außerhalb erhöhen,
					; innerhalb dann d2 -> d5
	move.l	d4,d3			; y-Wert in d3
	and.l	#$ffff,d3		; und maskieren
	move.l	#0,d1			; Zählregister
	move.l	#\2,d0
	cmp.l	d0,d3
	bls	vergl1\@
	add.l	#1,d1
vergl1\@
	move.l	#\4,d0
	cmp.l	d0,d3
	bgt	vergl2\@
	add.l	#1,d1
vergl2\@
	move.l	d4,d3			; x-Wert in d3
	lsr.l	#8,d3
	lsr.l	#8,d3
	move.l	#\1,d0
	cmp.l	d0,d3
	bls	vergl3\@
	add.l	#1,d1
vergl3\@
	move.l	#\3,d0
	cmp.l	d0,d3
	bgt	vergl4\@
	add.l	#1,d1
vergl4\@
	cmp.l	#4,d1
	bne	vergl5\@
	move.l	d2,d5
vergl5\@

	endm

LIBOEFFNEN	macro

	lea	\1(pc),a1
	moveq	#0,d0
	move.l	_SysBase,a6
	jsr	_LVOOpenLibrary(a6)
	tst.l	d0
	beq	fini
	lea	\2(pc),a0
	move.l	d0,(a0)
	
	endm

LIBSCHL		macro

	lea	\1(pc),a1
	move.l	(a1),a1
	move.l	_SysBase,a6
	jsr	_LVOCloseLibrary(a6)

	endm

LINIE	macro

	lea	_GfxBase(pc),a6		
	move.l	(a6),a6		
	move.l	 rp(a5),a1
	move.l	\1,d0
	move.l	\2,d1
	
	IFEQ NARG-5
	add.l	#\5,d0
	ENDC
	
	jsr	_LVOMove(a6)
	move.l	 rp(a5),a1
	move.l	\3,d0
	move.l	\4,d1
		
	IFEQ NARG-5
	add.l	#\5,d0
	ENDC
	
	jsr	_LVODraw(a6)
	
	endm

RECHTECK macro

       	LINIE  \1,\2,\1,\4
       	LINIE  \1,\2,\1,\4,1
       	LINIE  \1,\4,\3,\4
       	LINIE  \3,\4,\3,\2
       	LINIE  \3,\4,\3,\2,-1
       	LINIE  \3,\2,\1,\2

	endm

FARBE		macro			;um Farben zu setzen
	lea	_GfxBase(pc),a6		; zuerst Farben setzen
	move.l	(a6),a6			; _GfxBase in a6
	lea	viewportadv(pc),a0
	move.l	(a0),a0
	move.l	#\1,d0
	move.l	#\2,d1
	move.l	#\3,d2
	move.l	#\4,d3
	jsr	_LVOSetRGB4(a6)

	endm


PEN 	macro
	
	lea	_GfxBase(pc),a6		; 
	move.l	(a6),a6

	move.l	 rp(a5),a1
	move.l	#\1,d0
	jsr	_LVOSetAPen(a6)
	
		
	IFEQ NARG-2
	move.l	 rp(a5),a1
	move.l	#\2,d0
	jsr	_LVOSetBPen(a6)
	ENDC
	
	
	endm

TEXT	macro

	lea	_GfxBase(pc),a6		 
	move.l	(a6),a6

	move.l	rp(a5),a1
	move.l	\1,d0			
	move.l	\2,d1
	jsr	_LVOMove(a6)

	move.l	rp(a5),a1
	move.l	#\3,d0			; Länge
	lea	\4,a0
	jsr	_LVOText(a6)

	endm


*-----------------------------------------------------------------

* Startup-Code fuer Assembler-Programme. 
* -----------------------------------------------------------


	move.l	_SysBase,a6	

	movem.l	 d0/a0,-(sp)		;rette Kommandozeile
	clr.l	 _WBenchMsg		;sicherheitshalber

* Teste, von wo wir gestartet wurden
* ----------------------------------
	sub.l	 a1,a1			;a1=0 = eigener Task
	jsr	_LVOFindTask(a6)	;wo sind wir?
	move.l	 d0,a4			;Adresse retten

	tst.l	 pr_CLI(a4)              ;Laufen wir unter WB?
	beq.s	 fromWorkbench		;wenn so

* Wir wurden vom CLI gestartet
* ----------------------------
	movem.l	 (sp)+,d0/a0		;Parms Kommandozeile holen
	bra	 run    		;und starten

* Wir wurden von  Workbench gestartet
* -----------------------------------
fromWorkbench
	lea	 pr_MsgPort(a4),a0
	jsr	_LVOWaitPort(a6)	;Warte auf Start-Message
	lea	 pr_MsgPort(a4),a0	;sie ist da
	jsr	_LVOGetMsg(a6)		;hole sie
	move.l	 d0,_WBenchMsg		;immer Msg sichern!

	movem.l	 (sp)+,d0/a0		;bringe Stack i.O.


run	bsr.s	 _main			;rufe unser Programm auf

	move.l	 d0,-(sp)		;rette seinen Return-Code

	tst.l	 _WBenchMsg             ;gibt's eine WB-Message
	beq.s	 _exit			;nein: dann war's CLI

	jsr	_LVOForbid(a6)		;keine Unterbrechung jetzt
	move.l	 _WBenchMsg(pc),a1	;hole die Message
	jsr	_LVOReplyMsg(a6)	;und gib sie zurueck

_exit
	move.l	 (sp)+,d0		;hole Return-Code
	rts				;das war's

_WBenchMsg	 ds.l	1

	cnop	 0,2


_main					; ab hier steht Prg
*-----------------------------------------------------------------

	lea	tabelle(pc),a5
	move.l	#0,dfi(a5)		; df0
	move.l	#1,bmflag(a5)		; bitmap-flag = 1 => mit bitmap
	move.l	#0,tr_open(a5)		; trackdisk-device offen = 1
	move.l	#0,meldung(a5)		; Meldungsfeld auf 0 setzen
	move.l	#0,select_down(a5)	; nicht runtergeklickt
	move.l	#0,select_left(a5)	; nicht runtergeklickt (links)
	move.l	#0,alte_bl_nr(a5)
	lea	farben_normal_1,a0
	move.l	a0,spr_farben(a5)

	LIBOEFFNEN	dosname,_DosBase
	LIBOEFFNEN	intname,_IntBase
	LIBOEFFNEN	grafname,_GfxBase


*Screen u. Window öffnen----------------------------------------- v ----

	lea	NewScreen(pc),a0	; Screen öffnen
	lea	_IntBase(pc),a6		
	move.l	(a6),a6
	jsr	_LVOOpenScreen(a6)
	lea	screen(pc),a0		; und fuer die window-struktur
	move.l	d0,(a0)
	cmp.l	#0,d0
	beq	screen_0
	
	lea	NewWindow(pc),a0	; Window öffnen,_IntBase noch vorhanden
	jsr	_LVOOpenWindow(a6)
	lea	windowv(pc),a0		; Windowzeiger sichern	
	move.l	d0,(a0)
	cmp.l	#0,d0
	beq	window_0
	move.l	d0,a0
	move.l	50(a0),d0		; Rastportadr. in d0
	lea	rastportv(pc),a0	; Rastportadr. sichern
	move.l	d0,(a0)	
	move.l	d0,rp(a5)

	lea	_IntBase(pc),a6		; Viewportadr. holen
	move.l	(a6),a6
	lea	windowv(pc),a0
	move.l	(a0),a0
	jsr	_LVOViewPortAdress(a6)
	lea	viewportadv(pc),a0
	move.l	d0,(a0)

	bsr	farben_schwarz

	lea	screen(pc),a0
	lea	screen_b(pc),a1
	move.l	(a0),(a1)

	lea	_IntBase(pc),a6		
	move.l	(a6),a6

	lea	NewWindow_b(pc),a0	; Window Block öffnen
	jsr	_LVOOpenWindow(a6)	; --------------------
	lea	window_b(pc),a0		; Windowzeiger sichern	
	move.l	d0,(a0)
	cmp.l	#0,d0
	beq	window_b0
	move.l	d0,a0
	move.l	50(a0),d0		; Rastportadr. in d0
	lea	rastport_b(pc),a0	; Rastportadr. sichern
	move.l	d0,(a0)	
	move.l	d0,rp(a5)

	lea	_IntBase(pc),a6		; Viewportadr. holen
	move.l	(a6),a6
	lea	window_b(pc),a0
	move.l	(a0),a0
	jsr	_LVOViewPortAdress(a6)
	lea	viewportad_b(pc),a0
	move.l	d0,(a0)

	lea	window_b(pc),a0		; kl Fenster nach hinten
	move.l	(a0),a0
	jsr	_LVOWindowToBack(a6)

	PEN 	13
	
	move.l	rp(a5),a1
	move.l	#0,d0
	move.l	#0,d1
	move.l	#160,d2
	move.l	#70,d3
	jsr	_LVORectFill(a6)

	PEN 	15				; weiß

	LINIE	#4,#67,#155,#67 
	LINIE	#4,#66,#155,#66 

	PEN 	0				; schwarz

	LINIE	#4,#2,#155,#2 
	LINIE	#4,#3,#155,#3 
	LINIE	#155,#4,#155,#67 
	LINIE	#154,#4,#154,#67 
	LINIE	#153,#4,#153,#66 
	LINIE	#152,#4,#152,#66 

	PEN 	15

	LINIE	#4,#2,#4,#67 
	LINIE	#5,#2,#5,#67 
	LINIE	#6,#3,#6,#67 
	LINIE	#7,#3,#7,#67 


	lea	rastportv(pc),a0
	move.l	(a0),rp(a5)

	PEN 1

	RECHTECK xl1(a5),yl1(a5),xr1(a5),yr1(a5)
	RECHTECK xl2(a5),yl2(a5),xr2(a5),yr2(a5)

	bsr	raster

	PEN 1
	bsr	tabellieren
	
	PEN 4
	move.l	rp(a5),a1
	move.l	xxl1(a5),d0
	move.l	yyl1(a5),d1
	move.l	xxr1(a5),d2
	move.l	yyr1(a5),d3
	jsr	_LVORectFill(a6)

	move.l	rp(a5),a1
	move.l	xxl2(a5),d0
	move.l	yyl2(a5),d1
	move.l	xxr2(a5),d2
	move.l	yyr2(a5),d3
	jsr	_LVORectFill(a6)
	
	
	PEN 5
	RECHTECK xxl1(a5),yyl1(a5),xxr1(a5),yyr1(a5)
	 
	LINIE	xxl1(a5),#11,xxr1(a5),#11
	LINIE	xxl1(a5),#12,xxr1(a5),#12
	LINIE	xxl1(a5),#23,xxr1(a5),#23
	LINIE	xxl1(a5),#24,xxr1(a5),#24
		
	PEN 8
	RECHTECK xxl2(a5),yyl2(a5),xxr2(a5),yyr2(a5)

	PEN 0,4
	TEXT	#80,#8,11,text2(pc)		;  x,y,Anzahl,^ auf Text
	TEXT	#10,#20,4,text3(pc)		;  x,y,Anzahl,^ auf Text
	
* ---------------------- alle dfi ermitteln -----------------------

	lea	_DosBase(pc),a0			; alle dfi ermitteln
	move.l	(a0),a0				; Dosbase in a0
	move.l	34(a0),a0			; dl_Root -> struct RootNode
	move.l	24(a0),d0			; rn_Info -> struct DosInfo
	asl.l	#2,d0				; BPTR * 4
	move.l	d0,a0
	move.l	4(a0),d0			; di_DevInfo -> struct DeviceNode
	asl.l	#2,d0				; BPTR * 4
	move.l	d0,a0

test_dev0
	cmp.l	#0,d0
	beq	test_d_out
	move.l	40(a0),a1			; ^ auf Namen
	move.l	a1,d0				; 
	asl.l	#2,d0				; BPTR * 4
	move.l	d0,a1
	move.l	#3,d1				; nach df0-df3 suchen
	lea	dfi_name(pc),a2
test_dev1
	move.l	a2,a4
	move.l	#2,d2
	move.l	a1,a3
	adda.l	#1,a3				; wegen BCPL - Namen
test_dev2
	cmpm.b	(a3)+,(a4)+
	bne	test_dev4
	dbra	d2,test_dev2
	move.l	#0,(a2)				; dann 0 anstelle des Namens eintragen
	bra	test_dev5			; und nächstes aus Liste untersuchen
test_dev4
	adda.l	#4,a2
	dbra	d1,test_dev1
test_dev5
	move.l	(a0),d0				; nächste -> struct DeviceNode
	asl.l	#2,d0				; BPTR * 4
	move.l	d0,a0
	bra	test_dev0
		
test_d_out

	lea	dfi_name(pc),a2			; nun 0 in ITEM-str setzen
	move.l	(a2)+,d0
	move.l	(a2)+,d0
	cmp.l	#0,d0				; df1 = 0 ?
	beq	nicht_1
	lea	item11(pc),a0
	move.l	#0,(a0)
nicht_1	
	move.l	(a2)+,d0
	cmp.l	#0,d0				; df2 = 0 ?
	beq	nicht_2
	lea	item12(pc),a0
	move.l	#0,(a0)
nicht_2
	move.l	(a2)+,d0
	cmp.l	#0,d0				; df3 = 0 ?
	beq	nicht_3
	lea	item13(pc),a0
	move.l	#0,(a0)
nicht_3		

* ------- Menuaufruf ----------

	lea	item22(pc),a0			; Zeiger auf Untermenü
	lea	item220(pc),a1
	move.l	a1,28(a0)

	lea	_IntBase(pc),a6		
	move.l	(a6),a6
	lea	windowv(pc),a0
	move.l	(a0),a0
	lea	Menustruktur(pc),a1	; Adr der Menustr.
	jsr	_LVOSetMenuStrip(a6)	; Menu aktivieren - liefert kein Ergebnis !


	move.l	_SysBase,a6
	move.l	#512,d0
	move.l	#$10002,d1		; Chip + clear
	jsr	_LVOAllocMem(a6)	; Speicher fuer einen block
	move.l	d0,bl_adr(a5)
	cmp.l	#0,d0
	beq	bl_0
	
	move.l	#spei_grö_verw,d0
	move.l	#$10000,d1		; clear
	jsr	_LVOAllocMem(a6)	; Speicher fuer Speicherverwaltung
	move.l	d0,spei_verw(a5)
	move.l	#0,spei_off(a5)
	cmp.l	#0,d0
	beq	spei_0
	
	move.l	#spei_grö_text,d0
	move.l	#$10000,d1		; clear
	jsr	_LVOAllocMem(a6)	; Speicher fuer Textverwaltung(roh)
	move.l	d0,text_roh(a5)
	cmp.l	#0,d0
	beq	text_roh_0
	
	move.l	#spei_grö_text,d0
	move.l	#$10000,d1		; clear
	jsr	_LVOAllocMem(a6)	; Speicher fuer Textverwaltung(geordnet)
	move.l	d0,text_zw(a5)
	cmp.l	#0,d0
	beq	text_zw_0

	move.l	#spei_grö_text,d0
	move.l	#$10000,d1		; clear
	jsr	_LVOAllocMem(a6)	; Speicher fuer Textverwaltung(geordnet)
	move.l	d0,text_geo(a5)
	cmp.l	#0,d0
	beq	text_geo_0
	
	move.l	#1760*2,d0		; speicher für alle gezeichneten Balken
	move.l	#$10000,d1		; clear
	jsr	_LVOAllocMem(a6)	; Speicher fuer Textverwaltung(geordnet)
	move.l	d0,all_num(a5)
	cmp.l	#0,d0
	beq	all_num_0
	
	bsr	farben_normal_1

warten
	bsr	frei_ermitteln

	lea	windowv(pc),a0		; Hole Adr. MessagePort des Fensters
	move.l	(a0),a0
	move.l	86(a0),a0		; steht ab 86
	move.l	_SysBase,a6
	jsr	_LVOWaitPort(a6)	; Warten auf Msg in Port

	lea	windowv(pc),a0		; Hole Adr. MessagePort des Fensters
	move.l	(a0),a0
	move.l	86(a0),a0		; steht ab 86
	move.l	_SysBase,a6
	jsr	_LVOGetMsg(a6)		; Message vom Port in a0 holen
	cmp.l	#0,d0
	beq	warten			; 0,dann ligt keine Msg vor
	move.l	d0,a1			; Zeiger auf die messagestruktur
	move.l	20(a1),d3		; Klasse der Message
	move.l	#0,d2
	move.w	24(a1),d2		; Code der Message
	move.l	32(a1),d4		; Mauskoor
	jsr	_LVOReplyMsg(a6)	; zurückschicken

	move.l	meldung(a5),d0
	cmp.l	#0,d0
	beq	k_meldung
	move.l	spr_farben(a5),a0
	jsr	(a0)
	move.l	#0,meldung(a5)
	
	PEN 4				; Feld löschen
	move.l	rp(a5),a1
	move.l	#text_x,d0
	move.l	#241,d1
	move.l	#text_xu,d2
	move.l	#249,d3
	jsr	_LVORectFill(a6)

	bsr	nr_loeschen		; alte Angaben immer löschen

	bra	maus10_1

k_meldung
	move.l	select_down(a5),d0
	cmp.l	#0,d0
	beq	mouse_links

	cmp.l	#$10,d3			; $10 = Mousemove
	bne	mouse_up
	move.l	#6,d5
	bra	nur_zw_teil


mouse_up

	cmp.l	#$8,d3				; $8 = Mousemoutton( up ?)
	bne	warten

	lea	_IntBase(pc),a6		
	move.l	(a6),a6

	lea	windowv(pc),a0
	move.l	(a0),a0
	move.l	#$108,d0		; botton 8 - Pick 100 
	jsr	_LVOModifyIDCMP(a6)

	move.l	#0,select_down(a5)

	lea	window_b(pc),a0		; kl Fenster nach hinten
	move.l	(a0),a0
	jsr	_LVOWindowToBack(a6)

	move.l	alte_bl_nr(a5),d6
	PEN 	0
	bsr	nr_um			; alte Umrandung weg
	
	bra	warten

mouse_links
	move.l	select_left(a5),d0
	cmp.l	#0,d0
	beq	mouse_bottom

	cmp.l	#$10,d3			; $10 = Mousemove
	bne	mouse_up_links
	move.l	#6,d5
	move.l	#3,d2
	VERGLEICHMENU 	text_xo,text_yo,text_xu,text_yu 
	cmp.l	#3,d5
	beq	maus0
	bra	warten

mouse_up_links

	cmp.l	#$8,d3				; $8 = Mousemoutton( up ?)
	bne	warten

	lea	_IntBase(pc),a6		
	move.l	(a6),a6

	lea	windowv(pc),a0
	move.l	(a0),a0
	move.l	#$108,d0		; botton 8 - Pick 100 
	jsr	_LVOModifyIDCMP(a6)

	move.l	#0,select_left(a5)

	bra	warten

mouse_bottom
	cmp.l	#$8,d3			; $8 = Mousebutton
	bne	menu_pick
	cmp.w	#104,d2			; Selectdown	
	bne	warten

	move.l	#0,d5			
	move.l	#1,d2
	VERGLEICHMENU 	text_xo,0,text_xu,10	 
	move.l	#2,d2
	VERGLEICHMENU 	text_xo,11,text_xu,20
	move.l	#3,d2
	VERGLEICHMENU 	text_xo,text_yo,text_xu,text_yu 
nur_zw_teil
	move.l	#4,d2
	VERGLEICHMENU 	xl_1,yl_1,xr_1,yr_1
	move.l	#5,d2
	VERGLEICHMENU 	xl_2,yl_2,xr_2,yr_2


	cmp.l	#0,d5
	beq	warten			; nichts gewählt
	cmp.l	#3,d5
	bne	maus10

maus0					; großes Feld angeklickt
	move.l	#1,select_left(a5)
	
	lea	_IntBase(pc),a6		
	move.l	(a6),a6

	lea	windowv(pc),a0
	move.l	(a0),a0
	move.l	#$118,d0		; botton 8 - Pick 100 - Move 10	
	jsr	_LVOModifyIDCMP(a6)
 
	and.l	#$ffff,d4		; y-Maus maskieren
	sub.l	#text_yo,d4
	divu	#10,d4			; Nr angeklickt in d4
	and.l	#$ffff,d4		; ohne den Rest

	move.l	erste_im_dir(a5),d0
	cmp.l	#0,d0
	beq	nicht_sc1		; wenn text oben beginnt -> n. scrollen
	cmp.l	#1,d4
	bgt	nicht_sc1		; sont > zeile 3 angeklickt -> n. scr

	bsr	n_oben_scr
wei_scr1
	lea	windowv(pc),a0		; Hole Adr. MessagePort des Fensters
	move.l	(a0),a0
	move.l	86(a0),a0		; steht ab 86
	move.l	_SysBase,a6
	jsr	_LVOGetMsg(a6)		; Message vom Port in a0 holen
	cmp.l	#0,d0
	beq	wei_scr2		; 0,dann ligt keine Msg vor
	move.l	d0,a1			; Zeiger auf die messagestruktur
	move.l	20(a1),d3		; Klasse der Message
	move.l	#0,d2
	move.w	24(a1),d2		; Code der Message
	move.l	32(a1),d4		; Mauskoor
	jsr	_LVOReplyMsg(a6)	; zurückschicken

	cmp.l	#$10,d3
	beq	mouse_links
	cmp.l	#$8,d3
	beq	mouse_up_links
wei_scr2
	lea	windowv(pc),a0		; Hole Adr. MessagePort des Fensters
	move.l	(a0),a0
	move.w	12(a0),d4		; maus-koor holen
	bra	maus0

nicht_sc1

	move.l	an_dir(a5),d1
	add.l	#an_zeilen,d0
	cmp.l	d1,d0
	bgt	nicht_sc2		; wenn text unten sichtbar -> n. scrollen
	cmp.l	#an_zeilen-2,d4
	bls	nicht_sc2		; sont > zeile 3 angeklickt -> n. scr

	bsr	n_unten_scr
	bra	wei_scr1		
	bra	warten	 
nicht_sc2
	
	move.l	erste_im_dir(a5),d0
	add.l	d4,d0
	move.l	nr_gewählt(a5),d1
	cmp.l	d0,d1
	beq	warten			; altes und neues feld identisch !
	move.l	d0,nr_gewählt(a5)
	move.l	text_geo(a5),a4
	mulu	#text_br,d0
	add.l	d0,a4
	
	move.l	off_dir(a4),d0
	cmp.w	#-3,d0
	bne	new_dir

	bsr	datei_anzeigen
	bra	warten	 

new_dir
	cmp.w	#2,d0
	bne	kein_dir

	move.l	ak_dir(a5),a0
	move.l	off_zei(a4),a1
	move.l	(a1),ak_dir(a5)		; neues aktuelles dir eintragen (ist nicht Schatten)
	move.l	(a0),a0			; -> Schatten
	move.l	ak_dir(a5),a1
	move.l	(a1),a1			; -> Schatten
	move.l	a0,parent(a1)		; im Schatten ^auf parent eintragen
	
	move.l	ak_dir(a5),a0
	move.l	ist_gelesen(a0),d0
	cmp.l	#1,d0
	beq	new0
	
	bsr	disk_eingelegt
	bsr	dir_lesen	
new0
	bsr	text_ermitteln	

	move.l	an_dir(a5),d0		; keine datei im Dir
	cmp.l	#0,d0
	beq	new1

	bsr	text_ordnen
	bsr	text_ausgeben	
new1
	bra	warten	

kein_dir
	bra	warten	 



maus10
	cmp.l	#1,d5
	bne	maus20
maus10_1				; Parent angeklickt
					; --------------------
	move.l	ak_dir(a5),a0
	move.l	(a0),a0			; -> Schatten
	move.l	parent(a0),a0		; im Schatten ^auf parent holen
	cmpa.l	#0,a0			; ^ = 0 dann Root
	beq	maus11			; dann nichts neues ausgeben !
	move.l	(a0),a0			; -> n Schatten
	move.l	a0,ak_dir(a5)		; neues aktuelles dir eintragen (ist nicht Schatten)
	
	bsr	pfad_kuerzen

	bsr	text_ermitteln	
	bsr	text_ordnen
	bsr	text_ausgeben	
maus11
	bra	warten	

maus20
	cmp.l	#2,d5
	bne	maus30
					; Dir angeklickt
	bra	warten	 		; ---------------

maus30
	cmp.l	#4,d5			; linkes Kästchenfeld angeklickt
	bne	maus40			; -------------------------------
	move.l	#xl_1,a4
	move.l	#0,head(a5)
	bsr	block_nr_aus
	bra	warten
maus40
	cmp.l	#5,d5			; rechtes Kästchenfeld angeklickt
	bne	maus50			; -------------------------------
	move.l	#xl_2,a4
	move.l	#1,head(a5)
	bsr	block_nr_aus
	bra	warten
maus50					; d5 = 6
	bra	warten


menu_pick
	cmp.l	#$100,d3		; $100=Menupick
	bne	warten			; ---------------
	cmp.w	#$ffff,d2		; $ffff=Menunull, Kein Menu gewählt
	beq	warten
	move.l	d2,d1			; Menunummer holen
	and.w	#$001f,d1		; maskieren mit 11111 = $1f
	asr.w	#5,d2			; Itemnr holen
	and.w	#$003f,d2		; durch maskieren mit 111111
					; 1.Item = d2 = 0 ! 2.Item: d2=1

	cmp.w	#0,d1			; 1. Menu gewählt ?
	bne	menu10			; -------------------
menu1
	cmp.w	#0,d2			; df0:
	bne	menu2
 	move.l	#0,dfi(a5)
	bra	menu5
menu2
	cmp.w	#1,d2			; df1:
	bne	menu3
 	move.l	#1,dfi(a5)		
	bra	menu5
menu3
	cmp.w	#2,d2			; df2:
	bne	menu4
 	move.l	#2,dfi(a5)
	bra	menu5
menu4
	cmp.w	#3,d2			; df3:
	bne	warten
 	move.l	#3,dfi(a5)
	bra	menu5
menu5

	move.l	#0,ak_dir(a5)		; als kennung wenn fehler in doppelspei
	bsr	track_auf		; trackdisk-device öffnen
	bsr	disk_eingelegt
	move.l	#880,d0			; Block Nr in d0
	bsr	block_read		; ein block lesen
	bsr	motor_aus
	movem.l	d0-d1,-(sp)		; wegen möglichen Ausspr in doppelspei
	bsr	doppel_spei		; Doppelspeicher anfordern
	lea	8(sp),sp		; Stack zurück
	move.l	ueb_ga1(a5),ak_dir(a5)	; aktuelles dir eintragen (ist nicht Schatten)
	bsr	block_umsp		; Block umspeichern
	bsr	bitmap_holen	
	move.l	bmflag(a5),d0		; Bitmap Flag 
	cmp.l	#0,d0
	beq	menu3.1
	bsr	bitmap_ausgeben
menu3.1
	bsr	dir_lesen	
	bsr	text_ermitteln	

	move.l	an_dir(a5),d0		; keine datei im Dir
	cmp.l	#0,d0
	beq	menu9

	bsr	text_ordnen
	bsr	text_ausgeben	
menu9
	bra	warten

menu10
	cmp.w	#1,d1			; 2. Menu gewählt ?
	bne	menu20			; ---------------------

	cmp.w	#0,d2			; Bitmap ?
	bne	menu12
	move.l	bmflag(a5),d0		; Flag ändern
	bchg    #0,d0
	move.l	d0,bmflag(a5)

	bsr	bitmap_ausgeben		; geänderte Bitmap ausgeben
	
	bra	warten
menu12
	cmp.w	#1,d2			; Freier speicher
	bne	menu13
	bra	warten
menu13
	cmp.w	#2,d2			; Screen zurück
	bne	menu14

	lea	_IntBase(pc),a6
	move.l	(a6),a6
	lea	screen(pc),a0
	move.l	(a0),a0
	jsr	_LVOScreenToBack(a6)

	bra	warten
menu14
	cmp.w	#3,d2			; und Coulors = 3 ?
	bne	warten

	move.l	spr_farben(a5),a0
	lea	farben_normal_1,a1
	cmpa.l	a0,a1
	bne	menu15
	lea	farben_normal_2,a0
	move.l	a0,spr_farben(a5)
	jsr	(a0)
	bra	warten

menu15
	lea	farben_normal_2,a1
	cmpa.l	a0,a1
	bne	menu16
	lea	farben_normal_3,a0
	move.l	a0,spr_farben(a5)
	jsr	(a0)
	bra	warten
menu16
	lea	farben_normal_3,a1
	cmpa.l	a0,a1
	bne	menu17
	lea	farben_normal_4,a0
	move.l	a0,spr_farben(a5)
	jsr	(a0)
	bra	warten
menu17
	lea	farben_normal_4,a1
	cmpa.l	a0,a1
	bne	menu18
	lea	farben_normal_1,a0
	move.l	a0,spr_farben(a5)
	jsr	(a0)
	bra	warten
menu18
	bra	warten


menu20
	cmp.w	#2,d1			; 3. Menu gewählt ?
	bne	warten			; --------------------

	cmp.w	#0,d2			; Info (engl) ?
	bne	menu22

	lea	_IntBase(pc),a6		
	move.l	(a6),a6
	lea	windowv(pc),a0
	move.l	(a0),a0
	move.l	#$0,d0			; keine Meldung
	jsr	_LVOModifyIDCMP(a6)

	bsr	info_engl

	lea	_IntBase(pc),a6		
	move.l	(a6),a6
	lea	windowv(pc),a0
	move.l	(a0),a0
	move.l	#$108,d0		; botton 8 - Pick 100 
	jsr	_LVOModifyIDCMP(a6)

	bra	warten
menu22
	cmp.w	#1,d2			; und Quit = 1 ?
	bne	warten

	bra	menuende

menuende

	bsr	block_sp_frei		; gibt alle geholten Sp-Blöcke Frei

	move.l	_SysBase,a6
	
	move.l	#1760*2,d0		; speicher für alle gezeichneten Balken frei
	move.l	all_num(a5),a1
	jsr	_LVOFreeMem(a6) 	
all_num_0


	move.l	#spei_grö_text,d0
	move.l	text_geo(a5),a1
	jsr	_LVOFreeMem(a6) 	; Speicher fuer Text-Verwaltung zurück
text_geo_0

	move.l	#spei_grö_text,d0
	move.l	text_zw(a5),a1
	jsr	_LVOFreeMem(a6) 	; Speicher fuer Text-Verwaltung zurück
text_zw_0

	move.l	#spei_grö_text,d0
	move.l	text_roh(a5),a1
	jsr	_LVOFreeMem(a6) 	; Speicher fuer Text-Verwaltung zurück
text_roh_0
	

	move.l	#spei_grö_verw,d0
	move.l	spei_verw(a5),a1
	jsr	_LVOFreeMem(a6) 	; Speicher fuer Sp-Verwaltung zurück
spei_0

	move.l	#512,d0
	move.l	bl_adr(a5),a1
	jsr	_LVOFreeMem(a6) 	; Speicher fuer einen block zurück
bl_0
		
	lea	_IntBase(pc),a6		
	move.l	(a6),a6
	lea	windowv(pc),a0
	move.l	(a0),a0
	jsr	_LVOClearMenuStrip(a6)	; Menu entfernen



	move.l	tr_open(a5),d0
	cmp.l	#0,d0
	beq	nie_auf			; tr war nie auf

	move.l	_SysBase,a6
	lea	readrepl,a1
	jsr	_LVORemPort(a6)		; MsgPort entfernen

	lea	diskio,a1
	jsr	_LVOCloseDevice(a6)	; Device schließen
nie_auf
	lea	_IntBase(pc),a6		; Window Block schließen		
	move.l	(a6),a6
	lea	window_b(pc),a0		
	move.l	(a0),a0
	jsr	_LVOCloseWindow(a6)
window_b0	
	lea	_IntBase(pc),a6		; Window und Screen schließen		
	move.l	(a6),a6
	lea	windowv(pc),a0		
	move.l	(a0),a0
	jsr	_LVOCloseWindow(a6)
window_0				; dann noch IntBase in a6
	lea	screen(pc),a0
	move.l	(a0),a0
	jsr	_LVOCloseScreen(a6)
screen_0	

	LIBSCHL		_GfxBase
	LIBSCHL		_IntBase
	LIBSCHL		_DosBase

fini	rts
*---------------------------------------------------------------------------------
farben_normal_1
	
	FARBE 0,0,0,0			; Farbe schwarz
	FARBE 1,15,15,0			; Farbe Bitmapumrandung(gelb)
	FARBE 2,5,5,0			; Farbe unbelegte Bitmap(dunkelgelb)
	FARBE 3,10,10,0			; Farbe belegte Bitmap(mittelgelb)

	FARBE 4,7,7,7			; Farbe linkes "Fenster"
	FARBE 5,15,0,0			; Farbe Umrandung dazu (rot)
	FARBE 6,0,0,15			; Farbe Directory (blau)

	FARBE 7,12,9,0			; Farbe Directory im text (braun)
	FARBE 8,0,15,0			; Farbe Kasten angeklickt (grün)
	FARBE 9,12,0,15			; Farbe Nr angeklickt (violett)
	FARBE 10,0,15,15		; Farbe Nr angeklickt header (violett)


	FARBE 12,15,12,0		; Farbe Umrandung (orange)
	FARBE 13,7,12,15		; Farbe Hintergrund Block-W ()
	FARBE 14,15,0,15		; Farbe weiß
	FARBE 15,15,15,15		; Farbe Menu (blau)

	rts
*---------------------------------------------------------------------------------
farben_normal_2
	
	FARBE 0,0,0,10			; Farbe schwarz
	FARBE 1,15,15,0			; Farbe Bitmapumrandung(gelb)
	FARBE 2,5,5,0			; Farbe unbelegte Bitmap(dunkelgelb)
	FARBE 3,10,10,0			; Farbe belegte Bitmap(mittelgelb)

	FARBE 4,11,15,15		; Farbe linkes "Fenster"
	FARBE 5,15,0,0			; Farbe Umrandung dazu (rot)
	FARBE 6,15,4,0			; Farbe Directory (blau)

	FARBE 7,12,9,0			; Farbe Directory im text (braun)
	FARBE 8,0,0,0			; Farbe Kasten angeklickt (grün)
	FARBE 9,0,15,0			; Farbe Nr angeklickt (violett)
	FARBE 10,15,8,8			; Farbe Nr angeklickt header (violett)


	FARBE 12,7,7,7			; Farbe Umrandung (orange)
	FARBE 13,7,7,7			; Farbe Hintergrund Block-W ()
	FARBE 14,15,0,15		; Farbe weiß
	FARBE 15,15,15,15		; Farbe Menu (blau)

	rts

*---------------------------------------------------------------------------------
farben_normal_3
	
	FARBE 0,0,0,0			; Farbe schwarz
	FARBE 1,15,15,0			; Farbe Bitmapumrandung(gelb)
	FARBE 2,0,15,15			; Farbe unbelegte Bitmap(dunkelgelb)
	FARBE 3,0,10,10			; Farbe belegte Bitmap(mittelgelb)

	FARBE 4,10,15,10		; Farbe linkes "Fenster"
	FARBE 5,15,0,0			; Farbe Umrandung dazu (rot)
	FARBE 6,6,0,15			; Farbe Directory (blau)

	FARBE 7,12,0,9			; Farbe Directory im text (braun)
	FARBE 8,0,0,15			; Farbe Kasten angeklickt (grün)
	FARBE 9,12,9,0			; Farbe Nr angeklickt (violett)
	FARBE 10,8,5,0			; Farbe Nr angeklickt header (violett)


	FARBE 12,15,12,0		; Farbe Umrandung (orange)
	FARBE 13,15,7,0			; Farbe Hintergrund Block-W ()
	FARBE 14,15,0,15		; Farbe weiß
	FARBE 15,15,15,15		; Farbe Menu (blau)

	rts
*---------------------------------------------------------------------------------
farben_normal_4
	
	FARBE 0,0,0,0			; Farbe schwarz
	FARBE 1,0,15,15			; Farbe Bitmapumrandung(gelb)
	FARBE 2,7,15,7			; Farbe unbelegte Bitmap(dunkelgelb)
	FARBE 3,5,5,15			; Farbe belegte Bitmap(mittelgelb)

	FARBE 4,15,12,5			; Farbe linkes "Fenster"
	FARBE 5,15,0,0			; Farbe Umrandung dazu (rot)
	FARBE 6,6,0,8			; Farbe Directory (blau)

	FARBE 7,12,0,9			; Farbe Directory im text (braun)
	FARBE 8,0,0,15			; Farbe Kasten angeklickt (grün)
	FARBE 9,12,9,0			; Farbe Nr angeklickt (violett)
	FARBE 10,8,5,0			; Farbe Nr angeklickt header (violett)


	FARBE 12,15,12,0		; Farbe Umrandung (orange)
	FARBE 13,15,7,0			; Farbe Hintergrund Block-W ()
	FARBE 14,15,0,15		; Farbe weiß
	FARBE 15,15,15,15		; Farbe Menu (blau)

	rts

*---------------------------------------------------------------------------------
farben_schwarz
	
	FARBE 0,0,0,0			; Farbe schwarz
	FARBE 1,0,0,0			; Farbe Bitmapumrandung(gelb)
	FARBE 2,0,0,0			; Farbe unbelegte Bitmap(dunkelgelb)
	FARBE 3,0,0,0			; Farbe belegte Bitmap(mittelgelb)

	FARBE 4,0,0,0			; Farbe linkes "Fenster"
	FARBE 5,0,0,0			; Farbe Umrandung dazu (rot)
	FARBE 6,0,0,0			; Farbe Directory (blau)

	FARBE 7,0,0,0			; Farbe Directory im text (braun)
	FARBE 8,0,0,0			; Farbe Kasten angeklickt (grün)
	FARBE 9,0,0,0			; Farbe Nr angeklickt (violett)
	FARBE 10,0,0,0			; Farbe Nr angeklickt header (violett)

	FARBE 11,0,0,0			; Farbe Meldungsschrift (rot)

	FARBE 12,0,0,0			; Farbe Directory (blau)
	FARBE 13,0,0,0			; Farbe	Directory (blau)
	FARBE 14,0,0,0			; Farbe Directory (blau)
	FARBE 15,0,0,0			; Farbe Menu (blau)

	rts
*---------------------------------------------------------------------------------
farben_meldung
	
	FARBE 8,0,15,0			; Farbe Kasten angeklickt (grün)

	FARBE 11,15,0,15		; Farbe Meldungsschrift (rot)

	rts



* ------------- trackdisk-device öffnen--------
track_auf

	move.l	tr_open(a5),d0
	cmp.l	#0,d0
	beq	tr_ist_zu

	PEN 2
	bsr	raster			; löscht Kästchenanziege
	bsr	linke_an_lö		; löscht linke Seite

	move.l	text_geo(a5),a1		; geo löschen
	move.l	#spei_grö_text,d0	
	sub.l	#1,d0
geo_l
	move.b	#0,(a1)+		; löschen
	dbra	d0,geo_l

	move.l	_SysBase,a6
	lea	readrepl,a1
	jsr	_LVORemPort(a6)		; MsgPort entfernen

	lea	diskio,a1
	jsr	_LVOCloseDevice(a6)	; Device schließen

	bsr	block_sp_frei		; gibt alle geholten Sp-Blöcke Frei

	move.l	#0,gr_pfad(a5)		; Pfad-größe = 0
	lea	pfad_name(pc),a0
	move.l	#9,d0
pfad_leer
	move.l	#'    ',(a0)+
	dbra	d0,pfad_leer
	
tr_ist_zu
	move.l	#1,tr_open(a5)		; Kennung setzen
	move.l	_SysBase,a6
	sub.l	a1,a1
	jsr	_LVOFindTask(a6)	; eigener task
	move.l	d0,readrepl+$10		; eigner task als empfänger in MsgPort

	lea	readrepl,a1
	jsr	_LVOAddPort(a6)		; neuer Port

	lea	diskio,a1		; I/O Struktur
	move.l	dfi(a5),d0		; dfi
	clr.l	d1			; keine flags
	lea	trdevice,a0		; Zeiger auf Devicename in a0
	jsr	_LVOOpenDevice(a6)	; und Device öffnen


	move.l	all_num(a5),a0		; NummernSpeicher löschen
	move.l	#1759,d0
tr_nr_loe
	move.w	#0,(a0)+
	dbra	d0,tr_nr_loe

	move.l	all_num(a5),lfd_num(a5)		;  auf Anfang setzen

	rts
*--------------------------------------------------------------------------	
disk_eingelegt				; Block-Nr 0 ...1759 in d0 !!

	move.l	_SysBase,a6

	lea	diskio,a1	
	move.l	#readrepl,14(a1)	; Zeiger auf Repl-Port
	move.w	#14,28(a1)		; 14=TD_Changestate
	move.l	bl_adr(a5),40(a1)	; puffer
	move.l	#0,36(a1)		; io_length 
	move.l	#0,44(a1)		; IO_offset 0 ... 
	jsr	_LVODoIo(a6)		; lesen

	lea	diskio,a1	
	move.l	32(a1),d0
	cmp.l	#0,d0
	bne	no_disk

	rts
no_disk
	move.l	#1,meldung(a5)		; Meldungsfeld auf 1 setzen
	bsr	farben_schwarz
	bsr	farben_meldung
	bsr	neue_meldung

	lea	text_me1(pc),a0
	move.l	#15,d0
	move.l	rp(a5),a1
	move.l	dfi(a5),d1		; i von dfi  !
	add.l	#48,d1
	move.b	d1,13(a0)
	jsr	_LVOText(a6)

	move.l	(sp)+,d0		; Stack zurücksetzen
	bra	warten

*--------------------------------------------------------------------------	
neue_meldung

	lea	_GfxBase(pc),a6
	move.l	(a6),a6

	PEN	4			; Textfenster löschen

	move.l	rp(a5),a1		; text fgewähltes feld löschen
	move.l	#text_x,d0
	move.l	#241,d1
	move.l	#text_xu,d2
	move.l	#249,d3
	jsr	_LVORectFill(a6)

	PEN 11,4			; Meldung schreiben

	move.l	rp(a5),a1
	move.l	#text_x,d0
	move.l	#248,d1
	jsr	_LVOMove(a6)

	rts

*--------------------------------------------------------------------------	
block_read				; Block-Nr 0 ...1759 in d0 !!

	move.l	_SysBase,a6

	lea	diskio,a1	
	move.l	#readrepl,14(a1)	; Zeiger auf Repl-Port
	move.w	#$2,28(a1)		; $2=Read
	move.l	bl_adr(a5),40(a1)	; puffer
	move.l	#1*512,36(a1)		; io_length 
	mulu	#512,d0
	move.l	d0,44(a1)		; IO_offset 0 ... 
	jsr	_LVODoIo(a6)		; lesen

	rts
*--------------------------------------------------------------------------	
motor_aus
	move.l	_SysBase,a6

	lea	diskio,a1
	move.w	#9,28(a1)		; Motor
	move.l	#0,36(a1)		; länge 0
	jsr	_LVODoIo(a6)

	rts

*--------------------------------------------------------------------------	
doppel_spei
	
	movem.l	d2/a2,-(sp)

	move.l	_SysBase,a6
	move.l	#1,d1
	jsr	_LVOAvailMem(a6)
	cmp.l	#10000,d0
	blt	do_e			; mindestens 10 K,damit System noch Nachrichten

	move.l	#spei_grö,d0
	move.l	#$10000,d1		; clear
	jsr	_LVOAllocMem(a6)	; Speicher fuer Speicherverwaltung
	cmp.l	#0,d0
	beq	do_e
	move.l	spei_verw(a5),a0
	move.l	spei_off(a5),d1
	move.l	d0,0(a0,d1)
	move.l	d0,d2			; retten
	add.l	#4,spei_off(a5)
	move.l	d0,ueb_ga1(a5)
	
	
	move.l	#spei_grö,d0
	move.l	#$10000,d1		; clear
	jsr	_LVOAllocMem(a6)	; Speicher fuer Speicherverwaltung
	cmp.l	#0,d0
	beq	do_e
	move.l	spei_verw(a5),a0
	move.l	spei_off(a5),d1
	move.l	d0,0(a0,d1)
	add.l	#4,spei_off(a5)
	move.l	d0,ueb_ga2(a5)

	move.l	d0,a0			; gegenseitig verketten
	move.l	d2,a2
	move.l	d0,(a2)
	move.l	d2,(a0)

	movem.l	(sp)+,d2/a2
	rts
do_e
	movem.l	(sp)+,d2/a2

	move.l	#1,meldung(a5)		; Meldungsfeld auf 1 setzen
	bsr	farben_schwarz
	bsr	farben_meldung
	bsr	neue_meldung

	lea	text_me2(pc),a0
	move.l	#17,d0
	move.l	rp(a5),a1
	jsr	_LVOText(a6)

	bsr	motor_aus

	lea	_IntBase(pc),a6		
	move.l	(a6),a6

	lea	windowv(pc),a0
	move.l	(a0),a0
	move.l	#$108,d0		; botton 8 - Pick 100 
	jsr	_LVOModifyIDCMP(a6)

	move.l	ak_dir(a5),a0		; Kennung auf nicht gelesen setzen
	move.l	#0,ist_gelesen(a0)	; kennung = nicht gelesen !

	lea	12(sp),sp		; Stack zurück
	bra	warten

*--------------------------------------------------------------------------	
ein_spei
	
	move.l	_SysBase,a6
	
	move.l	#spei_grö,d0
	move.l	#$10000,d1		; clear
	jsr	_LVOAllocMem(a6)	; Speicher fuer Speicherverwaltung
	cmp.l	#0,d0
	beq	ein_fe
	move.l	spei_verw(a5),a0
	move.l	spei_off(a5),d1
	move.l	d0,0(a0,d1)
	add.l	#4,spei_off(a5)
	move.l	d0,ueb_ga1(a5)
	move.l	#0,ueb_ga2(a5)
	
	rts

ein_fe
	lea	-12(sp),sp		; Stack runterzählen
	bra	do_e
		
*--------------------------------------------------------------------------	
block_sp_frei				; gibt die ganzen angesammelten Sp frei

	move.l	_SysBase,a6

	move.l	spei_off(a5),d6
	cmp.l	#0,d6
	beq	kein_spei
	asr.l	#2,d6			; offset durch 4
	sub.l	#1,d6	
	move.l	spei_verw(a5),a4
spei_frei
	move.l	#spei_grö,d0
	move.l	(a4)+,a1
	jsr	_LVOFreeMem(a6) 	; Speicher fuer einen block zurück
	dbra	d6,spei_frei
	
kein_spei
	move.l	#0,spei_off(a5)		; Offset zurücksetzen
	move.l	#spei_grö_verw,d0	; Verwaltung mit Nullen füllen
	sub.l	#1,d0
	move.l	spei_verw(a5),a0
mit_nullen
	move.b	#0,(a0)+
	dbra	d0,mit_nullen
	
	rts
*--------------------------------------------------------------------------	
block_umsp
	
	move.l	ueb_ga1(a5),a1
	adda.l	#off,a1
	move.l	bl_adr(a5),a0
	
	move.l	#127,d0
bl_um1
	move.l	(a0)+,(a1)+
	dbra	d0,bl_um1

	rts
	

*--------------------------------------------------------------------------	
bitmap_holen	

	move.l	ueb_ga1(a5),a4		; Orginal
	lea	79*4(a4),a4
	adda.l	#off,a4			; und anfangsoffset
	move.l	ueb_ga2(a5),a3		; Schatten
	lea	79*4(a3),a3
	adda.l	#off,a3			; und anfangsoffset
	move.l	(a4)+,d0		; Block Nr in d0
	bsr	block_read		; ein block lesen
	bsr	ein_spei		; Einfachspeicher anfordern
	bsr	block_umsp		; Block umspeichern
	move.l	ueb_ga1(a5),(a3)+	; verketten

bit_wei
	move.l	(a4)+,d0		; Block Nr in d0
	cmp.l	#0,d0
	beq	bit_ende
	bsr	block_read		; ein block lesen
	bsr	ein_spei		; Einfachspeicher anfordern
	bsr	block_umsp		; Block umspeichern
	move.l	ueb_ga1(a5),(a3)+	; verketten
	bra	bit_wei
bit_ende
	bsr	motor_aus
	rts
*--------------------------------------------------------------------------	
bitmap_ausgeben

	PEN 3				; liefert auch gfxbase in a6

	move.l	bmflag(a5),d0		; Bitmap Flag 
	cmp.l	#1,d0
	beq	bit_aus0

	PEN 2
bit_aus0
	move.l	spei_verw(a5),a4	; in algemeiner Form holen
	move.l	4(a4),a4		; Schattenblock von Root ist 2. Block
	lea	79*4(a4),a4		; Adresse auf Sp mit Bitmap
	adda.l	#off,a4			; und anfangsoffset
	move.l	#1,d6			; da erstes Bit für Block 2 steht
bit_aus1
	move.l	(a4)+,a3
	cmpa.l	#0,a3
	beq	bit_aus_e
	
	lea	4(a3),a3		; ab da BMap
	adda.l	#off,a3			; und anfangsoffset
bit_aus2
	move.l	(a3)+,d5
	move.l	#31,d4
bit_aus3
	add.l	#1,d6
	cmp.l	#1760,d6
	beq	bit_aus_e
	btst.b	#0,d5
	bne	bit_aus5		; wenn gesetzt,dann frei u nicht markieren
	bsr	nr_zei
bit_aus5		
	move.l	#1,d0
	ror.l	d0,d5
	dbra	d4,bit_aus3
	bra	bit_aus2

bit_aus_e

	PEN 4				; Feld mit angezeigtem Dateinamen löschen
	move.l	rp(a5),a1
	move.l	#text_x,d0
	move.l	#241,d1
	move.l	#text_xu,d2
	move.l	#249,d3
	jsr	_LVORectFill(a6)

	rts
*--------------------------------------------------------------------------	
nr_loeschen

	PEN 3				; liefert auch gfxbase in a6

	move.l	bmflag(a5),d0		; Bitmap Flag 
	cmp.l	#1,d0
	beq	nr_loe0

	PEN 2
nr_loe0
	move.l	all_num(a5),a4		; ^ auf Speicher aller gezeichneter Nummern
nr_loe1
	clr.l	d6
	move.w	(a4)+,d6
	cmp.l	#0,d6
	beq	nr_loe2
	move.w	#0,-2(a4)		; und nr löschen
	bsr	nr_zei
	bra	nr_loe1
nr_loe2
	move.l	all_num(a5),lfd_num(a5)		;  auf Anfang setzen


	rts
*--------------------------------------------------------------------------	
nr_zei					; Nr übergabe in d6 ! ! 
	movem.l	a2/a3,-(sp)

	move.l	d6,d0
	divu	#22,d0
	move.l	d0,d1
	ror.l	#8,d0
	ror.l	#8,d0
	and.l	#$ff,d0			; Nachkommateil 0 ... 21
	and.l	#$ff,d1			; Vorkommateil 0 ... 79  Sektor

	move.l	xl1(a5),a2		; Horizontalen x Wert  berechnen
	cmp.l	#10,d0
	ble	nr_zei1
	move.l	xl2(a5),a2
	sub.l	#11,d0
nr_zei1
	adda.l	#10,a2
	cmp.l	#4,d0
	ble	nr_zei2
	add.l	#8,a2
nr_zei2
	mulu 	#12,d0
	adda.l	d0,a2


	move.l	yl1(a5),a3		; Vertikalen y Wert  berechnen
	adda.l	#5,a3
	cmp.l	#39,d1
	ble	nr_zei5
	adda.l	#3,a3
nr_zei5
	mulu 	#3,d1
	adda.l	d1,a3

	bsr	balken

	movem.l	(sp)+,a2/a3

	rts
*--------------------------------------------------------------------------	
frei_ermitteln
	
	move.l	_SysBase,a6
	move.l	#1,d1
	jsr	_LVOAvailMem(a6)
	move.l	d0,d2
	bsr	decl
	lea	buffer(pc),a0
	lea	mtext220(pc),a1
	move.l	(a0)+,(a1)+
	move.l	(a0)+,(a1)+
	move.b	(a0)+,(a1)+

	rts

*--------------------------------------------------------------------------	
dir_lesen	

	lea	_IntBase(pc),a6		
	move.l	(a6),a6

	lea	windowv(pc),a0
	move.l	(a0),a0
	move.l	#$0,d0			; keine meldung
	jsr	_LVOModifyIDCMP(a6)

	move.l	ak_dir(a5),ueb_ga1(a5)
	move.l	ak_dir(a5),a0
	move.l	#1,ist_gelesen(a0)	; kennung ,das dir bereits gelesen

dir1
	move.l	ueb_ga1(a5),a4		; zuerst Dir vervollständigen
	move.l	a4,a3			; retten
	lea	extension(a4),a4
	move.l	(a4),d0			; Block Nr in d0
	cmp.l	#0,d0
	beq	dir2
	move.l	a1,-(sp)		; nur wegen Aussprung aus doppelsp
	bsr	block_read		; ein block lesen
	bsr	doppel_spei		; Doppelspeicher anfordern
	bsr	block_umsp		; Block umspeichern
	move.l	(sp)+,a1
	move.l	(a3),a3			; aus gegens. alter verkettung in schatten
	lea	extension(a3),a3
	move.l	ueb_ga2(a5),(a3)	; im Schatten verketten
	bra	dir1
dir2

	move.l	ak_dir(a5),a4
dir3
	move.l	a4,a3
	move.l	(a4),a2			; Schatten

	lea	hasch_v(a3),a3
	lea	hasch_v(a2),a2
	move.l	#5,d5			; Zähler für Hasch 6...77

dir5
	move.l	(a2)+,d0		; nur erhöhen
	move.l	(a3)+,d0
	add.l	#1,d5
	cmp.l	#78,d5
	beq	dir20			; dann alle bis 78 durch

	cmp.l	#0,d0
	beq	dir10			; kein eintrag
	lea	-4(a2),a1		; Adr,wohin ^auf Sp eingetragen wird
	move.l	#1,d6			; d6 ist Kennung ob weitere Blöcke
	move.l	#0,n_chain_n(a5)	; Zeiger auf next-chain nicht-schatten
	move.l	#0,n_chain_s(a5)	;           "            Schatten
dir7
	cmp.l	#0,d6
	beq	dir9

	move.l	a1,-(sp)
	bsr	block_read		; ein block lesen
	bsr	doppel_spei		; Doppelspeicher anfordern
	bsr	block_umsp		; Block umspeichern
	move.l	(sp)+,a1
	move.l	ueb_ga1(a5),a0		; chain ?
	move.l	chain(a0),d0
	cmp.l	#0,d0
	beq	dir7_1
	move.l	ueb_ga1(a5),n_chain_n(a5)	; Zeiger auf Speicher merken
	move.l	ueb_ga2(a5),n_chain_s(a5)	; Zeiger auf Speicher merken
dir7_1	
	move.l	ueb_ga2(a5),(a1)		; verketten
	move.l	#0,d6
	move.l	ueb_ga1(a5),a0
	lea	extension(a0),a0
	move.l	(a0),d0
	cmp.l	#0,d0			; nächst Extension (wird auch in bl-read gebracht)
	beq	dir8
	move.l	ueb_ga1(a5),a0
	lea	sec_type(a0),a0
	move.l	(a0),d1
	cmp.w	#-3,d1			; Section typ( -3 = File header)
	bne	dir8
	move.l	#1,d6
	move.l	ueb_ga2(a5),a0		; a1 auf extension setzen
	lea	extension(a0),a1
dir8	
	bra	dir7
dir9					; nun alle chain holen (Anhang _c  sonst fast wie oben)

dir6_c
	move.l	n_chain_s(a5),a1
	lea	chain(a1),a1		; 1.wird in Cain verkettet,danach Extension

	move.l	#1,d6			; d6 ist Kennung ob weitere Blöcke
	move.l	n_chain_n(a5),a0	; Zeiger auf next-chain nicht-schatten
	cmpa.l	#0,a0
	beq	dir10_c			; Aussprung,wenn ^auf Spei wo Chain >< 0 selbst <> 0
	move.l	chain(a0),d0		; Block-Nr holen
	move.l	#0,n_chain_n(a5)	; wieder 0 eintragen
dir7_c
	cmp.l	#0,d6
	beq	dir9_c

	move.l	a1,-(sp)
	bsr	block_read		; ein block lesen
	bsr	doppel_spei		; Doppelspeicher anfordern
	bsr	block_umsp		; Block umspeichern
	move.l	(sp)+,a1

	move.l	ueb_ga2(a5),(a1)	; verketten

	move.l	ueb_ga1(a5),a0		; chain ?
	move.l	chain(a0),d0
	cmp.l	#0,d0
	beq	dir7_1_c
	move.l	ueb_ga1(a5),n_chain_n(a5)	; Zeiger auf Speicher merken
	move.l	ueb_ga2(a5),n_chain_s(a5)	; Zeiger auf Speicher merken
dir7_1_c	
	move.l	#0,d6
	move.l	ueb_ga1(a5),a0
	lea	extension(a0),a0
	move.l	(a0),d0
	cmp.l	#0,d0			; nächst Extension (wird auch in bl-read gebracht)
	beq	dir8_c
	move.l	ueb_ga1(a5),a0
	lea	sec_type(a0),a0
	move.l	(a0),d1
	cmp.w	#-3,d1			; Section typ( -3 = File header)
	bne	dir8_c
	move.l	#1,d6
	move.l	ueb_ga2(a5),a0		; a1 auf extension setzen
	lea	extension(a0),a1
dir8_c	
	bra	dir7_c
dir9_c
	bra	dir6_c
dir10_c			



	bra	dir5
dir10
	bra	dir5
dir20

	move.l	a4,a0
	lea	extension(a0),a0
	move.l	(a0),d0
	cmp.l	#0,d0
	beq	dir30			; kein extension -> Aussprung
	move.l	(a4),a4			; Verkettung -> Schatten
	lea	extension(a4),a4
	move.l	(a4),a4			; zeigt auf erweiterung
	move.l	(a4),a4			; Verkettung auf-> n schatten

	bra	dir3
dir30
	bsr	motor_aus

	lea	_IntBase(pc),a6		
	move.l	(a6),a6

	lea	windowv(pc),a0
	move.l	(a0),a0
	move.l	#$108,d0		; botton 8 - Pick 100 
	jsr	_LVOModifyIDCMP(a6)

	rts	

*--------------------------------------------------------------------------	
text_ermitteln				; braucht alle Register

	move.l	a6,-(sp)
	move.l	text_roh(a5),a6		; a6 ist hier der Zeiger auf Textspeicher
	move.l	text_zw(a5),a0		; a6 ist hier der Zeiger auf Textspeicher
	move.l	text_geo(a5),a1		; a6 ist hier der Zeiger auf Textspeicher
	move.l	#spei_grö_text,d0	; zuerst immer löschen
	sub.l	#1,d0
erm1
	move.b	#0,(a6)+		; löschen
	move.b	#0,(a0)+		; löschen
	move.b	#0,(a1)+		; löschen
	dbra	d0,erm1
	move.l	text_roh(a5),a6		; a6 ist hier der Zeiger auf Textspeicher

	move.l	#0,d6			; zählt alle Einträge
	move.l	ak_dir(a5),a4
erm3
	move.l	a4,a3
	move.l	(a4),a2			; Schatten

	lea	hasch_v(a3),a3
	lea	hasch_v(a2),a2
	move.l	#5,d5			; Zähler für Hasch 6...77

erm5
	move.l	#0,d2			; kennung f dir  (=1)
	move.l	(a2)+,a1		; nur erhöhen
	move.l	(a3)+,d0
	add.l	#1,d5
	cmp.l	#78,d5
	beq	erm20			; dann alle bis 78 durch

	cmp.l	#0,d0
	beq	erm10			; kein eintrag
	move.l	a1,n_chain_s(a5)
	move.l	(a1),n_chain_n(a5)
erm51
	move.l	(a1),a1			; schatten -> Block

	move.l	a1,a0
	lea	sec_type(a0),a0
	move.l	(a0),off_dir(a6)	; Typ in Text eintragen

	move.l	(a1),off_zei(a6)	; Zeiger auf Block eintragen

	move.l	a6,a0			; retten um später zu erhöhen
	lea	name(a1),a1
	clr	d1
	move.b	(a1)+,d1		; Anzahl Buchstaben
	move.b	d1,off_bu(a6)
	sub.l	#1,d1

	move.l	off_dir(a6),d2		; Typ  = Dir ?
	cmp.w	#2,d2
	bne	erm6
	move.b	#' ',(a0)+		; dann 1 als Zwischenraum
erm6
erm7
	move.b	(a1)+,(a0)+
	dbra	d1,erm7

	move.l	off_dir(a6),d2		; Typ  = Dir ?
	cmp.w	#2,d2
	bne	erm8
	move.b	#' ',(a0)+		; dann (dir) dahinter schreiben
	move.b	#'(',(a0)+		
	move.b	#'d',(a0)+		
	move.b	#'i',(a0)+		
	move.b	#'r',(a0)+		
	move.b	#')',(a0)+	
	add.b	#7,off_bu(a6)
erm8

	add.l	#1,d6
	adda.l	#text_br,a6		; um text,^,kennung erhöhen
	bra	erm11
erm10
	bra	erm5			
erm11
	move.l	n_chain_n(a5),a0	; Chain-Eintrag ?
	move.l	chain(a0),d0
	cmp.l	#0,d0
	beq	erm5			; nicht,dann erm5

	move.l	n_chain_s(a5),a1
	move.l	chain(a1),a1		; chain sind im Schatten verkettet
	move.l	a1,n_chain_s(a5)
	move.l	(a1),n_chain_n(a5)
	bra	erm51
erm20

	move.l	a4,a0
	lea	extension(a0),a0
	move.l	(a0),d0
	cmp.l	#0,d0
	beq	erm30			; kein extension -> Aussprung
	move.l	(a4),a4			; Verkettung -> Schatten
	lea	extension(a4),a4
	move.l	(a4),a4			; zeigt auf erweiterung
	move.l	(a4),a4			; Verkettung auf-> n schatten

	bra	erm3
erm30
	move.l	d6,an_dir(a5)
	move.l	ak_dir(a5),a0
	move.l	d6,dir_eintr(a0)
	move.l	#0,erste_im_dir(a5)
	move.l	(sp)+,a6

	move.l	ak_dir(a5),a0		; Pfadnamen erweitern
	lea	name(a0),a0
	move.l	gr_pfad(a5),d0		; Pfad-größe 
	lea	pfad_name(pc),a1
	adda.l	d0,a1
	clr	d1
	move.b	(a0)+,d1		; Namensgröße
	add.l	d1,gr_pfad(a5)

	cmp.l	#0,d0
	beq	erm33			; wenn nicht erstes (also root-dir)
	cmp.b	#'/',-1(a1)	
	beq	erm33			; und nicht nach /
	cmp.b	#':',-1(a1)	
	beq	erm33			; und nicht nach :
	move.b	#'/',(a1)+		
	add.l	#1,gr_pfad(a5)		

erm33

	sub.l	#1,d1
erm35
	move.b	(a0)+,(a1)+
	dbra	d1,erm35

	cmp.l	#0,d0
	bne	erm36
	add.l	#1,gr_pfad(a5)		; Dir Doppelpunkt dranhängen
	move.b	#':',(a1)
	
erm36

	rts					
*--------------------------------------------------------------------------	
text_ordnen

	lea	abc_anzahl(pc),a2	; zählt die Namen zu den einzelnen Buchstaben
	move.l	text_zw(a5),a1		; text_roh wird bei Text_ermitteln gelöscht

	move.l	#25,d6			; für 26 Buchstaben
	move.l	#'A',d3
	move.l	#'a',d2
	
ordn0
	move.b	#0,(a2)+

	move.l	text_roh(a5),a0
	move.l	an_dir(a5),d5		; Anzahl Zeilen
	cmp.l	#0,d5
	beq	ordn40
	sub.l	#1,d5
	move.l	#0,d1
ordn2
	move.b	(a0),d0
	cmpi.w	#2,off_dir+2(a0)
	bne	ordn3
	move.b	1(a0),d0
ordn3
	cmp.b	d0,d3
	beq	ordn6
	cmp.b	d0,d2
	beq	ordn6
	bra	ordn16			; dann nicht der Buchstabe
ordn6
	add.b	#1,-1(a2)		; Zähler erhöhen
	clr	d4
	move.b	off_bu(a0),d4		; so lang ist der Name
	sub.l	#1,d4
	move.l	a0,a3
	move.l	a1,a4
	cmpi.w	#2,off_dir+2(a0)	; typ = dir ?
	bne	ordn7
	sub.l	#7,d4			; wird kürzer um Blank und (dir)
	adda.l	#1,a3			; 1. Blank weg
	
ordn7

ordn8
	move.b	(a3)+,d0		; buchstaben übertragen
	cmp.b	#'a',d0
	blt	ordn10
	cmp.b	#'z',d0
	bgt	ordn10
	sub.b	#32,d0
ordn10
	move.b	d0,(a4)+

	dbra	d4,ordn8		; Buchstaben umspeichern - Schl

	move.l	d1,off_off(a1)
	adda.l	#text_br,a1
	move.b	#1,off_hin(a0)		; kennung, daß übertragen	

ordn16
	add.l	#text_br,d1
	adda.l	#text_br,a0

	dbra	d5,ordn2		; 1 ... an_dir Schleife

	add.b	#1,d3			; Buchstaben erhöhen
	add.b	#1,d2

	dbra	d6,ordn0		; a - z schleife

					; zw -> geo
					; -----------
	lea	abc_anzahl(pc),a3	; tatsächl. anzahl ermitteln
	move.l	text_geo(a5),a2		; wenn überspr wird a2 hinten gebraucht
	move.l	text_roh(a5),a0
	move.l	text_zw(a5),a1
	move.l	#25,d5
ordn_20
	clr	d6
	move.b	(a3)+,d6
	cmp.l	#0,d6
	beq	ordn_30			; wenn Null- nichts umspeichern
	cmp.l	#1,d6
	bgt	ordn_22			; wenn > 1

	move.l	#0,d1
	bsr	zeile_um
	adda.l	#text_br,a1
	bra	ordn_30
ordn_22
	sub.l	#1,d6
ordn_23
	move.l	#$7FFFFFFF,a6
	clr	d3
	move.b	-1(a3),d3
	sub.l	#1,d3
	move.l	#0,d1
	move.l	#0,d2
ordn_25
	move.b	off_hin(a1,d1),d4
	cmp.b	#1,d4
	beq	ordn_27
	move.l	0(a1,d1),a4
	cmpa.l	a6,a4
	bgt	ordn_27

	move.l	0(a1,d1),a6			; kleinstes 
	move.l	d1,d2
	
ordn_27
	add.l	#text_br,d1
	dbra	d3,ordn_25

	move.l	d2,d1
	bsr	zeile_um
	move.b	#1,off_hin(a1,d1)		; Kennung setzen

	dbra	d6,ordn_23

	clr	d3				; a1 um n X text_br erhöhen
	move.b	-1(a3),d3
	sub.l	#1,d3
ordn_29
	adda.l	#text_br,a1
	dbra	d3,ordn_29


ordn_30
	dbra	d5,ordn_20




ordn33
	move.l	an_dir(a5),d6		; und den Rest übertragen
	cmp.l	#0,d6
	beq	ordn40
	sub.l	#1,d6			; die z.B. mit . beginnen
	move.l	text_roh(a5),a0
ordn34
	move.b	off_hin(a0),d0
	cmp.b	#1,d0
	beq	ordn38
	move.l	a0,a1
	move.l	#text_br,d5
	sub.l	#1,d5
ordn36
	move.b	(a1)+,(a2)+
	dbra	d5,ordn36

ordn38
	adda.l	#text_br,a0

	dbra	d6,ordn34
ordn40
	rts
*--------------------------------------------------------------------------	
zeile_um
	move.l	off_off(a1,d1),d0
	lea	0(a0,d0),a4
	move.l	#text_br,d4
	sub.l	#1,d4
zei_um1
	move.b	(a4)+,(a2)+
	dbra	d4,zei_um1

	rts
*--------------------------------------------------------------------------	
text_ausgeben	

	lea	_GfxBase(pc),a6
	move.l	(a6),a6

	bsr	linke_an_lö

	move.l	#0,nr_gewählt(a5)

	move.l	ak_dir(a5),a0
	move.l	dir_eintr(a0),an_dir(a5)

	move.l	text_geo(a5),a4
	move.l	erste_im_dir(a5),d0
	mulu	#text_br,d0
	adda.l	d0,a4			; a4 steht auf erste ausgebbare zeile
	move.l	a4,erste_merken(a5)	; um Mausclicks zu finden (überflüssig)

	move.l	erste_im_dir(a5),d6
	move.l	an_dir(a5),d5
	move.l	#text_y,d4
taus1

	PEN 0,4

	move.l	off_dir(a4),d2		; Typ  = Dir ?
	cmp.w	#2,d2
	bne	taus2

	PEN 7,4

taus2
	move.l	rp(a5),a1
	move.l	#text_x,d0
	move.l	d4,d1
	jsr	_LVOMove(a6)

	clr	d0
	move.b	off_bu(a4),d0
	move.l	a4,a0
	move.l	rp(a5),a1
	jsr	_LVOText(a6)

	add.l	#10,d4
	cmp.l	#230,d4
	bgt 	taus3

	add.l	#1,d6
	cmp.l	d5,d6
	bgt	taus3
	
	adda.l	#text_br,a4

	bra	taus1

taus3
	PEN 6,4				; dir Name ausgeben
	
	move.l	rp(a5),a1
	move.l	#50,d0
	move.l	#20,d1
	jsr	_LVOMove(a6)

	lea	pfad_name(pc),a0
	move.l	gr_pfad(a5),d0
	cmp.l	#24,d0
	bgt	taus10
	move.l	rp(a5),a1
	jsr	_LVOText(a6)

	rts
taus10
	add.l	d0,a0			; nur die letzten 29 Buchstaben
	suba.l	#24,a0
	move.l	#24,d0
	move.l	rp(a5),a1
	jsr	_LVOText(a6)

	move.l	rp(a5),a1		; und  ....
	move.l	#50,d0
	move.l	#20,d1
	jsr	_LVOMove(a6)

	lea	vier_punkte(pc),a0
	move.l	#4,d0
	move.l	rp(a5),a1
	jsr	_LVOText(a6)

	rts

*--------------------------------------------------------------------------	

linke_an_lö

	PEN	4			; Textfenster löschen

	move.l	rp(a5),a1
	move.l	#text_x,d0
	move.l	#text_yo,d1
	move.l	#text_xu,d2
	move.l	#text_yu,d3
	jsr	_LVORectFill(a6)

	move.l	rp(a5),a1		; text fgewähltes feld löschen
	move.l	#text_x,d0
	move.l	#241,d1
	move.l	#text_xu,d2
	move.l	#249,d3
	jsr	_LVORectFill(a6)

	move.l	rp(a5),a1		; Dir Name löschen
	move.l	#50,d0
	move.l	#13,d1
	move.l	#text_xu,d2
	move.l	#21,d3
	jsr	_LVORectFill(a6)

	rts

*--------------------------------------------------------------------------	
n_oben_scr
					; in d0 steht momemtane höchst Nr
					; in d1 anzahl im Dir
	movem.l	d0-d1,-(sp)
	lea	_IntBase(pc),a6		
	move.l	(a6),a6

	lea	windowv(pc),a0
	move.l	(a0),a0
	move.l	#$8,d0			; 8 nur MouseBottem (wegen Up) 
	jsr	_LVOModifyIDCMP(a6)
	movem.l	(sp)+,d0-d1


	move.l	#1,d0
	sub.l	d4,d0
	move.l	erste_im_dir(a5),d1
	move.l	d0,an_sc(a5)
	add.l	#1,an_sc(a5)
	neg.l	an_sc(a5)

	move.l	text_geo(a5),a4
	move.l	d1,d3
	mulu	#text_br,d3
	adda.l	d3,a4			; Zeiger auf textspeicherposition in geo
	move.l	#35,d5			; y- Wert	
	move.l	an_sc(a5),d6
	neg.l	d6
	move.l	#10,d3
	divu	d6,d3
	move.l	d3,d6
	sub.l	#1,d6			; 4 oder 9 in d6
oben_1
	bsr	scrollen
	suba.l	#text_br,a4
	bsr	text_scr
	sub.l	#1,d1
	cmp.l	#0,d1
	beq	oben_2
	dbra	d0,oben_1
oben_2
	move.l	d1,erste_im_dir(a5)

	lea	_IntBase(pc),a6		
	move.l	(a6),a6

	lea	windowv(pc),a0
	move.l	(a0),a0
	move.l	#$118,d0		; botton 8 - Pick 100 - Mousemove 10
	jsr	_LVOModifyIDCMP(a6)

	rts
*--------------------------------------------------------------------------	
n_unten_scr

					; in d0 steht momemtane höchst Nr
					; in d1 anzahl im Dir
	movem.l	d0-d1,-(sp)
	lea	_IntBase(pc),a6		
	move.l	(a6),a6

	lea	windowv(pc),a0
	move.l	(a0),a0
	move.l	#$8,d0			; 8 nur MouseBottem (wegen Up) 
	jsr	_LVOModifyIDCMP(a6)
	movem.l	(sp)+,d0-d1

	move.l	#an_zeilen,d2
	sub.l	d4,d2
	move.l	#1,d4
	sub.l	d2,d4
	move.l	d4,an_sc(a5)
	add.l	#1,an_sc(a5)

	move.l	text_geo(a5),a4
	move.l	d0,d3
	mulu	#text_br,d3
	adda.l	d3,a4			; Zeiger auf textspeicherposition in geo
	move.l	#225,d5			; y- Wert	
	move.l	an_sc(a5),d6
	move.l	#10,d3
	divu	d6,d3
	move.l	d3,d6
	sub.l	#1,d6			; 4 oder 9 in d6
unten_1
	bsr	scrollen
	bsr	text_scr
	adda.l	#text_br,a4
	add.l	#1,d0
	cmp.l	d1,d0
	beq	unten_2
	dbra	d4,unten_1
unten_2
	sub.l	#an_zeilen,d0
	move.l	d0,erste_im_dir(a5)


	lea	_IntBase(pc),a6		
	move.l	(a6),a6

	lea	windowv(pc),a0
	move.l	(a0),a0
	move.l	#$118,d0		; botton 8 - Pick 100 - Mousemove 10
	jsr	_LVOModifyIDCMP(a6)

	rts
*--------------------------------------------------------------------------	
scrollen

	movem.l	d0-d6,-(sp)

	lea	_GfxBase(pc),a6		
	move.l	(a6),a6

scro1					; d6 von oben und gerettet ! (auf sp)
	move.l	rp(a5),a1		
	move.l	#0,d0
	move.l	an_sc(a5),d1 
	move.l	#text_x,d2
	move.l	#text_yo+1,d3
	move.l	#text_xu,d4
	move.l	#text_yu-5,d5
	jsr	_LVOScrollRaster(a6)

	dbra	d6,scro1

	movem.l	(sp)+,d0-d6
	rts
*--------------------------------------------------------------------------	
text_scr
	movem.l	d0-d6,-(sp)

	PEN 0,4

	move.l	off_dir(a4),d2		; Typ  = Dir ?
	cmp.w	#2,d2
	bne	t_s1

	PEN 7,4

t_s1
	move.l	rp(a5),a1
	move.l	#text_x,d0
	move.l	d5,d1
	jsr	_LVOMove(a6)

	clr	d0
	move.b	off_bu(a4),d0
	move.l	a4,a0
	move.l	rp(a5),a1
	jsr	_LVOText(a6)


	movem.l	(sp)+,d0-d6
	rts

*--------------------------------------------------------------------------	
datei_anzeigen
	
	PEN 4				; Feld löschen
	move.l	rp(a5),a1
	move.l	#text_x,d0
	move.l	#241,d1
	move.l	#text_xu,d2
	move.l	#249,d3
	jsr	_LVORectFill(a6)

	move.l	a4,-(sp)
	bsr	nr_loeschen		; alte Angaben immer löschen
	move.l	(sp)+,a4

	PEN 10,4			; gewählt schreiben

	move.l	rp(a5),a1
	move.l	#text_x,d0
	move.l	#248,d1
	jsr	_LVOMove(a6)

	clr	d0
	move.b	off_bu(a4),d0
	move.l	a4,a0
	move.l	rp(a5),a1
	jsr	_LVOText(a6)


	move.l	off_zei(a4),a3		; zeigt auf Schatten
da1

	PEN 	10

	move.l	(a3),a2
	move.l	eigen(a2),d6		; eigene Block nr ausgeben
	move.l	lfd_num(a5),a0
	move.w	d6,(a0)+
	move.l	a0,lfd_num(a5)

	bsr	nr_zei
	lea	hasch_v(a2),a2
	move.l	#5,d5

	PEN 	9
da2					; und alle weiteren Blocks in anderer Farbe
	add.l	#1,d5
	cmp.l	#78,d5
	beq	da4
	move.l	(a2)+,d6
	cmp.l	#0,d6
	beq	da3

	move.l	lfd_num(a5),a0
	move.w	d6,(a0)+
	move.l	a0,lfd_num(a5)

	bsr	nr_zei
da3
	bra	da2	
da4
	move.l	extension(a3),d0
	cmp.l	#0,d0
	beq	da5
	lea	extension(a3),a3
	move.l	(a3),a3
	bra	da1
da5

	PEN 	6

	move.l	ak_dir(a5),a2		; und dazugehörige dir_Blocks ganz ausgeben
	move.l	(a2),a3			; -> Schatten
da10
	move.l	(a3),a2
	move.l	eigen(a2),d6	
	cmp.l	#0,d6
	bne	da11
	move.l	#880,d6
da11	
	move.l	lfd_num(a5),a0
	move.w	d6,(a0)+
	move.l	a0,lfd_num(a5)

	bsr	nr_zei

	move.l	extension(a3),d0
	cmp.l	#0,d0
	beq	da12
	lea	extension(a3),a3
	move.l	(a3),a3
	bra	da10
da12

	rts
	
*--------------------------------------------------------------------------	
pfad_kuerzen

	move.l	gr_pfad(a5),d0		; Pfad-größe 
	lea	pfad_name(pc),a0	; Pfadnamen um 2 kürzen
	adda.l	d0,a0

pfad_1					; zuerst Pfad bis / oder : kürzen
	move.b	-(a0),d1
	sub.l	#1,d0
	cmp.b	#'/',d1
	beq	pfad_2
	cmp.b	#':',d1
	beq	pfad_2
	bra	pfad_1
pfad_2
pfad_3					; dann bis / : oder Länge = = kürzen
	move.b	-(a0),d1
	sub.l	#1,d0
	cmp.l	#0,d0
	beq	pfad_5
	cmp.b	#'/',d1
	beq	pfad_5
	cmp.b	#':',d1
	beq	pfad_4
	bra	pfad_3
pfad_4
	add.l	#1,d0			; dann : lassen
pfad_5

	move.l	d0,gr_pfad(a5)

	rts	

*--------------------------------------------------------------------------	
*--------------------------------------------------------------------------	
raster
	PEN 2

	move.l	xl1(a5),d0		; 2 große Rechtecke
	move.l	yl1(a5),d1
	bsr	raster1

	move.l	xl2(a5),d0
	move.l	yl2(a5),d1
	bsr	raster1

	PEN 0

	move.l	xl1(a5),d0		; 2 X senkrechter dicker Strich
	move.l	yl1(a5),d1
	bsr	raster2

	move.l	xl2(a5),d0
	move.l	yl2(a5),d1
	bsr	raster2

	move.l	xl1(a5),d0		; 2 X waagerechter dicker Strich
	move.l	yl1(a5),d1
	bsr	raster3

	move.l	xl2(a5),d0
	move.l	yl2(a5),d1
	bsr	raster3

	move.l	xl1(a5),a3		; senkrechte Linien
	move.l	yl1(a5),a4
	bsr	raster4

	move.l	xl2(a5),a3
	move.l	yl2(a5),a4
	bsr	raster4

	move.l	xl1(a5),a3		; waagerechte Linien
	move.l	yl1(a5),a4
	bsr	raster5

	move.l	xl2(a5),a3
	move.l	yl2(a5),a4
	bsr	raster5
	rts


raster1					; Rechteck füllen
	move.l	rp(a5),a1
	add.l	#10,d0
	add.l	#5,d1
	move.l	d0,d2
	move.l	d1,d3
	add.l	#11*12-2+8,d2
	add.l	#80*3-1+3,d3
	jsr	_LVORectFill(a6)

	rts

raster2					; senkrechter schwarzer Balken
	move.l	rp(a5),a1
	add.l	#10,d0
	add.l	#5,d1
	move.l	d0,d2
	move.l	d1,d3
	add.l	#5*12-2,d0
	add.l	#5*12-2+8,d2
	add.l	#80*3-1+3,d3
	jsr	_LVORectFill(a6)

	rts

raster3					; waagerechter schwarzer Balken
	move.l	rp(a5),a1
	add.l	#10,d0
	add.l	#5,d1
	move.l	d0,d2
	move.l	d1,d3
	add.l	#40*3-1,d1
	add.l	#11*12-2+8,d2
	add.l	#40*3-1+3,d3
	jsr	_LVORectFill(a6)

	rts

raster4					; senkrechte Linien


	adda.l	#10+10,a3
	adda.l	#5,a4
	move.l	a4,d5
	add.l	#80*3-1+3,d5

	move.l	#4,d6
ras0
	move.l	rp(a5),a1
	move.l	a3,d0
	move.l	a4,d1
	move.l	a3,d2
	add.l	#1,d2
	move.l	d5,d3
	jsr	_LVORectFill(a6)

	adda.l	#12,a3
	dbra	d6,ras0

	suba.l	#12-8,a3			
	move.l	#5,d6
ras1
	move.l	rp(a5),a1
	move.l	a3,d0
	move.l	a4,d1
	move.l	a3,d2
	add.l	#1,d2
	move.l	d5,d3
	jsr	_LVORectFill(a6)

	adda.l	#12,a3
	dbra	d6,ras1

	rts

raster5					; waagerechte Linien

	adda.l	#10,a3
	adda.l	#5+2,a4
	move.l	a3,d5
	add.l	#11*12-2+8,d5

	move.l	#78,d6
ras5
	move.l	rp(a5),a1
	move.l	a3,d0
	move.l	a4,d1
	move.l	d5,d2
	move.l	a4,d3
	jsr	_LVORectFill(a6)

	adda.l	#3,a4
	cmp.l	#40,d6
	bne	ras6
	adda.l	#6,a4
ras6
	dbra	d6,ras5

	rts

*--------------------------------------------------------------------------	
balken

	move.l	rp(a5),a1
	move.l	a2,d0
	move.l	a3,d1
	move.l	a2,d2
	move.l	a3,d3
	add.l	#9,d2
	add.l	#1,d3
	jsr	_LVORectFill(a6)

	rts

*--------------------------------------------------------------------------	
tabellieren	
	move.l	#5,-8(a5)
	move.l	#24,-12(a5)
	move.l	xl1(a5),a2
	lea	text1(pc),a4

	move.l	#1,d6			; Ober u Unterseite
tabe1
	move.l	yl1(a5),a3
	adda.l	#5,a3

	
	move.l	#3,d5			; obere Hälfte
tabe2
	bsr	tex_bal
	adda.l	#30,a3
	dbra	d5,tabe2
	adda.l	#3,a3


	move.l	#3,d5			; untere Hälfte
tabe3
	bsr	tex_bal
	adda.l	#30,a3
	dbra	d5,tabe3
	
	move.l	#-5,-8(a5)
	move.l	#-10,-12(a5)
	move.l	xr2(a5),a2
	lea	text1(pc),a4
	
	dbra	d6,tabe1
	
	rts
*--------------------------------------------------------------------------	
tex_bal
	move.l	rp(a5),a1
	move.l	a2,d0
	move.l	a3,d1
	jsr	_LVOMove(a6)
	move.l	rp(a5),a1
	move.l	a2,d0
	sub.l	-8(a5),d0
	move.l	a3,d1
	jsr	_LVODraw(a6)

	move.l	rp(a5),a1
	move.l	a2,d0
	sub.l	-12(a5),d0
	move.l	a3,d1
	add.l	#5,d1
	jsr	_LVOMove(a6)
	
	move.l	rp(a5),a1
	move.l	#2,d0			; Länge
	move.l	a4,a0
	jsr	_LVOText(a6)
	adda.l	#2,a4

	rts

*--------------------------------------------------------------------------	
block_nr_aus				; xl_1,2 in a4, Mouse Koord in d4

	move.l	d4,d1
	and.l	#$FFFF,d1		; -> y
	move.l	d1,mouse_y(a5)
	sub.l	#yl_1,d1
	cmp.l	#40*3,d1
	bls	nr_1
	sub.l	#3,d1
nr_1
	divu	#3,d1			; ->  track in d1
	and.l	#$FFFF,d1
	move.l	d1,track(a5)

	move.l	d4,d2
	swap	d2
	and.l	#$FFFF,d2		; -> x
	move.l	d2,mouse_x(a5)
	move.l	a4,d0			; - xl_1,2
	sub.l	d0,d2
	cmp.l	#5*12,d2
	bls	nr_2
	sub.l	#6,d2
nr_2
	divu	#12,d2			; ->  sektor  in d2
	and.l	#$FFFF,d2
	move.l	d2,sektor(a5)

	move.l	d1,d0			; track * 22
	mulu	#22,d0
	add.l	d2,d0			; + sektor
	move.l	head(a5),d6
	mulu	#11,d6			; + head * 11
	add.l	d0,d6			; Block-Nr in d6
	move.l	d6,block(a5)


	move.l	alte_bl_nr(a5),d0
	cmp.l	d0,d6
	bne	nr_4

	rts
nr_4					; neue Block-Nr !
	move.l	d6,alte_bl_nr(a5)
	move.l	d0,d6

	PEN 	0
	bsr	nr_um			; alte Umrandung löschen
	
	move.l	alte_bl_nr(a5),d6
	PEN 	12
	bsr	nr_um			; neue Umrandung setzen
	
	lea	rastport_b(pc),a0
	move.l	(a0),rp(a5)

	PEN 	6,13

	move.l	block(a5),d2
	bsr	decl
	TEXT	#64,#24,8,buffer	; x,y,länge,^ auf Text
	
	move.l	track(a5),d2
	bsr	decl
	TEXT	#64,#34,8,buffer	; x,y,länge,^ auf Text
	
	move.l	head(a5),d2
	bsr	decl
	TEXT	#64,#44,8,buffer	; x,y,länge,^ auf Text
	
	move.l	sektor(a5),d2
	bsr	decl
	TEXT	#64,#54,8,buffer	; x,y,länge,^ auf Text
	
	TEXT	#24,#24,8,b_1		; x,y,länge,^ auf Text
	TEXT	#24,#34,8,b_2		; x,y,länge,^ auf Text
	TEXT	#24,#44,8,b_3		; x,y,länge,^ auf Text
	TEXT	#24,#54,8,b_4		; x,y,länge,^ auf Text

	lea	rastportv(pc),a0
	move.l	(a0),rp(a5)

	lea	_IntBase(pc),a6		
	move.l	(a6),a6

	lea	windowv(pc),a0
	move.l	(a0),a0
	move.l	#$118,d0		; botton 8 - Pick 100 - Move 10	
	jsr	_LVOModifyIDCMP(a6)

	move.l	#1,select_down(a5)

	lea	window_b(pc),a0		; kl Fenster nach vorne
	move.l	(a0),a0
	jsr	_LVOWindowToFront(a6)

	move.l	mouse_y(a5),d1
	divu	#3,d1			;  y  * 2 Drittel
	and.l	#$FFFF,d1
	mulu	#2,d1
	move.l	mouse_x(a5),d0
	sub.l	#200,d0

	lea	window_b(pc),a0		
	move.l	(a0),a0
	sub.w	4(a0),d0
	ext.l	d0
	sub.w	6(a0),d1
	ext.l	d1

	lea	window_b(pc),a0		; Window bewegen
	move.l	(a0),a0
	jsr	_LVOMoveWindow(a6)

	rts
*--------------------------------------------------------------------------	

nr_um					; Nr übergabe in d6 ! ! 
	movem.l	a2/a3,-(sp)

	move.l	d6,d0
	divu	#22,d0
	move.l	d0,d1
	ror.l	#8,d0
	ror.l	#8,d0
	and.l	#$ff,d0			; Nachkommateil 0 ... 21
	and.l	#$ff,d1			; Vorkommateil 0 ... 79  Sektor

	move.l	xl1(a5),a2		; Horizontalen x Wert  berechnen
	cmp.l	#10,d0
	ble	nr_um1
	move.l	xl2(a5),a2
	sub.l	#11,d0
nr_um1
	adda.l	#10,a2
	cmp.l	#4,d0
	ble	nr_um2
	add.l	#8,a2
nr_um2
	mulu 	#12,d0
	adda.l	d0,a2

	move.l	yl1(a5),a3		; Vertikalen y Wert  berechnen
	adda.l	#5,a3
	cmp.l	#39,d1
	ble	nr_um5
	adda.l	#3,a3
nr_um5
	mulu 	#3,d1
	adda.l	d1,a3

	suba.l	#2,a2
	suba.l	#1,a3
	
	bsr	umrandung

	movem.l	(sp)+,a2/a3

	rts
*--------------------------------------------------------------------------	
umrandung			; braucht a2,a3,d4,d5  !!

	move.l	a2,d4
	move.l	a3,d5
	add.l	#13,d4
	add.l	#3,d5
	
	RECHTECK a2,a3,d4,d5

	rts
*--------------------------------------------------------------------------	
info_engl

	lea	_IntBase(pc),a6		
	move.l	(a6),a6

	lea	screen(pc),a0
	lea	screen_d(pc),a1
	move.l	(a0),(a1)

	lea	NewWindow_d(pc),a0	; Window öffnen,_IntBase noch vorhanden
	jsr	_LVOOpenWindow(a6)
	lea	window_d(pc),a0		; Windowzeiger sichern	
	move.l	d0,(a0)
	cmp.l	#0,d0
	beq	window_d0
	move.l	d0,a0
	move.l	50(a0),d0		; Rastportadr. in d0
	lea	rastport_d(pc),a0	; Rastportadr. sichern
	move.l	d0,(a0)	
	move.l	d0,rp(a5)

	lea	_IntBase(pc),a6		; Viewportadr. holen
	move.l	(a6),a6
	lea	window_d(pc),a0
	move.l	(a0),a0
	jsr	_LVOViewPortAdress(a6)
	lea	viewportad_d(pc),a0
	move.l	d0,(a0)

	TEXT	#20,#20,46,d_1		; x,y,länge,^ auf Text
	TEXT	#20,#30,46,d_2		; x,y,länge,^ auf Text
	TEXT	#20,#40,46,d_3		; x,y,länge,^ auf Text
	TEXT	#20,#50,46,d_4		; x,y,länge,^ auf Text
	TEXT	#20,#60,46,d_5		; x,y,länge,^ auf Text
	TEXT	#20,#70,46,d_6		; x,y,länge,^ auf Text
	TEXT	#20,#80,46,d_7		; x,y,länge,^ auf Text


	PEN 	6
	
	move.l	rp(a5),a1
	move.l	#10,d0
	move.l	#15,d1
	move.l	#30,d2
	move.l	#20,d3
	jsr	_LVORectFill(a6)


	PEN 	10
	
	move.l	rp(a5),a1
	move.l	#10,d0
	move.l	#25,d1
	move.l	#30,d2
	move.l	#30,d3
	jsr	_LVORectFill(a6)


	PEN 	9
	
	move.l	rp(a5),a1
	move.l	#10,d0
	move.l	#35,d1
	move.l	#30,d2
	move.l	#40,d3
	jsr	_LVORectFill(a6)


warten_d
	lea	window_d(pc),a0		; Hole Adr. MessagePort des Fensters
	move.l	(a0),a0
	move.l	86(a0),a0		; steht ab 86
	move.l	_SysBase,a6
	jsr	_LVOGetMsg(a6)		; Message vom Port in a0 holen
	cmp.l	#0,d0
	beq	warten_d		; 0,dann ligt keine Msg vor
	move.l	d0,a1			; Zeiger auf die messagestruktur
	move.l	20(a1),d3		; Klasse der Message
	move.l	#0,d2
	move.w	24(a1),d2		; Code der Message
	move.l	32(a1),d4		; Mauskoor
	jsr	_LVOReplyMsg(a6)	; zurückschicken

	cmp.l	#$200,d3
	bne	warten_d


	lea	_IntBase(pc),a6		; Window und Screen schließen		
	move.l	(a6),a6
	lea	window_d(pc),a0		
	move.l	(a0),a0
	jsr	_LVOCloseWindow(a6)

	lea	rastportv(pc),a0
	move.l	(a0),rp(a5)		; RP Hauptfenster zurück

window_d0		

	rts

*--------------------------------------------------------------------------	

*--Screen,Window,-Strukturen-------------------------------------------
NewScreen	
		dc.w	0,0		;links,oben
		dc.w	640,256		;breite,Höhe
		dc.w	4		;depth (Tiefe Bitebenen)
		dc.b	0,1		;pens (Farbe Titel-Text u.Titelleiste)
		dc.w	$8000		;viewmodes (hier Sprite)
		dc.w	$F		;type (Customscreen)
		dc.l	0		;font
		dc.l	0		;title
		dc.l	0		;gadgets
		dc.l	0		;bitmap


NewWindow	
        dc.w	0,0                 ;links, oben
	dc.w	640,256		    ;Breite, Hoehe
	dc.b	0,1		    ;Pens des Screen
	dc.l	$108		    ; IDCMP-Flags  hier Mousebuttons $8
        dc.l    $1a00		    ;Window Flags  hier nur Borderles $800
	dc.l	0		    ;KeinUser-Gadget
	dc.l	0	            ;keine User-Checkmark
	dc.l	0	  	    ;Titel des Window	
screen	ds.l	1	            ; Zeiger auf eigenen Screen
	dc.l	0		    ;keine Super Bitmap
	dc.w	100,20,640,256      ;Limits von Window-Groesse
	dc.w	$F		    ;Use our screen, eigener Screen=$f

windowv		ds.l	1
	cnop	0,4
rastportv	ds.l	1
	cnop	0,4
viewportadv	ds.l	1
	cnop	0,4


NewWindow_d	
        dc.w	150,80              ;links, oben
	dc.w	420,90		    ;Breite, Hoehe
	dc.b	0,1		    ;Pens des Screen
	dc.l	$200		    ; IDCMP-Flags  hier nur Windowclose $200
        dc.l    $1008		    ;Window Flags  hier nur windowclose $8
	dc.l	0		    ;KeinUser-Gadget
	dc.l	0	            ;keine User-Checkmark
	dc.l	win_titel  	    ;Titel des Window	
screen_d ds.l	1	            ; Zeiger auf eigenen Screen
	dc.l	0		    ;keine Super Bitmap
	dc.w	100,20,640,256      ;Limits von Window-Groesse
	dc.w	$F		    ;Use our screen, eigener Screen=$f

win_titel	dc.b	' <- Continue <- Continue <- Continue',0
	cnop	0,4

window_d	ds.l	1
	cnop	0,4
rastport_d	ds.l	1
	cnop	0,4
viewportad_d	ds.l	1
	cnop	0,4

d_1	dc.b	'   Color of User-Directory-Block              ',0
	cnop	0,2
d_2	dc.b	'   Color of File-Header and File-List-Blocks  ',0
	cnop	0,2
d_3	dc.b	'   Color of all Data-Blocks                   ',0
	cnop	0,2
d_4	dc.b	'   - Bitmap without Boot-Blocks -             ',0
	cnop	0,2
d_5	dc.b	'   - Choosing an empty dir,the Programm stops:',0
	cnop	0,2
d_6	dc.b	'     then  continue by PARENT                 ',0
	cnop	0,2
d_7	dc.b	'   - continue now by close-gadget -           ',0
	cnop	0,2

NewWindow_b	
        dc.w	50,10               ;links, oben
	dc.w	160,70		    ;Breite, Hoehe
	dc.b	0,1		    ;Pens des Screen
	dc.l	$0		    ; IDCMP-Flags  hier keine
        dc.l    $800		    ;Window Flags  hier nur borderless $800
	dc.l	0		    ;KeinUser-Gadget
	dc.l	0	            ;keine User-Checkmark
	dc.l	0	  	    ;Titel des Window	
screen_b ds.l	1	            ; Zeiger auf eigenen Screen
	dc.l	0		    ;keine Super Bitmap
	dc.w	50,20,640,256      ;Limits von Window-Groesse
	dc.w	$F		    ;Use our screen, eigener Screen=$f

window_b	ds.l	1
	cnop	0,4
rastport_b	ds.l	1
	cnop	0,4
viewportad_b	ds.l	1
	cnop	0,4

b_1	dc.b	'Block  :',0
	cnop	0,2
b_2	dc.b	'Track  :',0
	cnop	0,2
b_3	dc.b	'Head   :',0
	cnop	0,2
b_4	dc.b	'Sektor :',0
	cnop	0,2


dosname	dc.b	'dos.library',0
	cnop	0,4
_DosBase ds.l	1
	cnop	0,4

intname	dc.b	'intuition.library',0
	cnop	0,4
_IntBase ds.l	1
	cnop	0,4

grafname dc.b	'graphics.library',0
	cnop	0,4
_GfxBase ds.l	1
	cnop	0,4
	
abc_anzahl	ds.l	8
	cnop	0,4

tabelle0	ds.l	40
tabelle
		dc.l	280			; xl1
		dc.l	0			; yl1
		dc.l	440			; xr1
		dc.l	251			; yr1
		dc.l	450			; xl2
		dc.l	0			; yl2
		dc.l	610			; xr2
		dc.l	251			; yr2
		dc.l	0			; xxl1
		dc.l	0			; yyl1
		dc.l	250			; xxr1
		dc.l	235			; yyr1
		dc.l	0			; xxl2
		dc.l	239			; yyl2
		dc.l	250			; xxr2
		dc.l	251			; yyr2
	cnop	0,4

text1		dc.b	' 010203040506070'
	cnop	0,4
text2		dc.b	'P a r e n t'
	cnop	0,4
text3		dc.b	'Dir:'
	cnop	0,4
pfad_name	ds.l	20
	cnop	0,4	
vier_punkte	dc.b	'....',0
	cnop	0,4	



*------auf Quiet warten und Win u Scr schließen, Menu entfernen----------------------

*---------------------------- U-Prg um Hex in Dezimal zuwandeln ( in ASC II)

decl	clr.b	d3			;0 = positive Zahl
	tst.l	d2			;Zahl positiv	Zahl in d2
	bpl	plus			;wenn so        -----------
	neg.l	d2			;sonst wandeln
	move.b	#1,d3 			;markiert negative Zahl			
plus	moveq	#7,d0			;8 Digits konnvertieren
	lea	buffer(pc),a0		;+1 f. Platz f. Vorzeichen
	lea	pwrof10(pc),a1		;Tabelle
nextt	moveq	#'0',d1			;Fange mit Digit '0' an
dec	addq	#1,d1			;Digit + 1
	sub.l	(a1),d2			;noch drin?
	bcc.s	dec			;wenn so
	subq	#1,d1			;korrigiere Digit
	add.l	(a1),d2			;den auch
	move.b	d1,(a0)+		;Digiit -> Buffer
	lea	4(a1),a1		;next power_10
	dbra	d0,nextt		;for 8 Digits
	lea	buffer(pc),a0		;Nun 0-Unterdr. u. Vorz.
rep	move.b	#' ',(a0)+		;fuehrende Nullen
	cmp.b	#'0',(a0)		;  durch Blanks
	beq	rep			;    ersetzen
	tst.b	d3			;war Zahl negativ?
	beq	done			;wenn nicht
	move.b  #'-',-1(a0)		;sonst - vorsetzen
done	
	lea	buffer(pc),a0
	cmp.b	#' ',7(a0)
	bne	done2
	move.b	#'0',7(a0)
done2
	rts

pwrof10	dc.l	10000000
	dc.l	1000000
	dc.l	100000
	dc.l	10000
	dc.l	1000
	dc.l	100
	dc.l	10
	dc.l	1

buffer	ds.l	3
	cnop	0,4


*-------------------------- Menuangaben----------------------

Menustruktur
	MENUSTR	 1,men_na2,0,0,100,menti1,item11   ; eigner MenuName,nächstes Menu,li,oben,Br,^Menutitel,^Itemstruktur

menti1	dc.b	'    dfi',0
	cnop	0,2

	ITEMSTR	 11,item12,0,0,100,12,$56,48	; eig.Str,nächs.Str,li,oben,Br,Höhe,Flags,ASC II

	TEXTSTR	 11,2,15,2,2,2		; Strname,V-,H-Farbe,links,oben,Z-Modus

mtext11	dc.b	'df0:',0
	cnop	0,2

	ITEMSTR	 12,item13,0,12,100,12,$56,49	; eig.Str,nächs.Str,li,oben,Br,Höhe,Flags,ASC II

	TEXTSTR	 12,2,15,2,2,2		; Strname,V-,H-Farbe,links,oben,Z-Modus

mtext12	dc.b	'df1:',0
	cnop	0,2


	ITEMSTR	 13,item14,0,24,100,12,$56,50	; eig.Str,nächs.Str,li,oben,Br,Höhe,Flags,ASC II

	TEXTSTR	 13,2,15,2,2,2		; Strname,V-,H-Farbe,links,oben,Z-Modus

mtext13	dc.b	'df2:',0
	cnop	0,2


	ITEMSTR	 14,0,0,36,100,12,$56,51	; eig.Str,nächs.Str,li,oben,Br,Höhe,Flags,ASC II

	TEXTSTR	 14,2,15,2,2,2		; Strname,V-,H-Farbe,links,oben,Z-Modus

mtext14	dc.b	'df3:',0
	cnop	0,2

*             - - - - - - - - - - - - - - - - - - - - 

	MENUSTR	 2,men_na3,100,0,100,menti2,item21	; eigner MenuName,nächstes Menu,li,oben,Br,^Menutitel,^Itemstruktur

menti2	dc.b	'   Tools',0
	cnop	0,2

	ITEMSTR	 21,item22,0,0,100,12,$11b,0	; eig.Str,nächs.Str,li,oben,Br,Höhe,Flags,ASC II

	TEXTSTR	 21,2,3,2,2,0		; Strname,V-,H-Farbe,links,oben,Z-Modus

mtext21	dc.b	'   BitMap',0
	cnop	0,2

	ITEMSTR	 22,item23,0,12,100,12,$52,0	; eig.Str,nächs.Str,li,oben,Br,Höhe,Flags,ASC II

	TEXTSTR	 22,2,3,2,2,2		; Strname,V-,H-Farbe,links,oben,Z-Modus

mtext22	dc.b	'Show Memory',0
	cnop	0,2

	ITEMSTR	 220,0,80,6,90,12,$12,0	; eig.Str,nächs.Str,li,oben,Br,Höhe,Flags,ASC II

	TEXTSTR	 220,2,3,2,2,0		; Strname,V-,H-Farbe,links,oben,Z-Modus

mtext220 dc.b	'            ',0
	cnop	0,2


	ITEMSTR	 23,item24,0,24,100,12,$52,0	; eig.Str,nächs.Str,li,oben,Br,Höhe,Flags,ASC II

	TEXTSTR	 23,2,3,2,2,2		; Strname,V-,H-Farbe,links,oben,Z-Modus

mtext23	dc.b	'Screen back',0
	cnop	0,2


	ITEMSTR	 24,0,0,36,100,12,$52,0	; eig.Str,nächs.Str,li,oben,Br,Höhe,Flags,ASC II

	TEXTSTR	 24,2,3,2,2,2		; Strname,V-,H-Farbe,links,oben,Z-Modus

mtext24	dc.b	'Colors',0
	cnop	0,2

*             - - - - - - - - - - - - - - - - - - - - 

	MENUSTR	 3,0,200,0,90,menti3,item31	; eigner MenuName,nächstes Menu,li,oben,Br,^Menutitel,^Itemstruktur

menti3	dc.b	'Info/Quit',0
	cnop	0,2

	ITEMSTR	 31,item32,0,0,90,12,$52,0	; eig.Str,nächs.Str,li,oben,Br,Höhe,Flags,ASC II

	TEXTSTR	 31,2,3,2,2,2		; Strname,V-,H-Farbe,links,oben,Z-Modus

mtext31	dc.b	'   Info ',0
	cnop	0,2

	ITEMSTR	 32,0,0,12,90,12,$52,0	; eig.Str,nächs.Str,li,oben,Br,Höhe,Flags,ASC II

	TEXTSTR	 32,2,3,2,2,2		; Strname,V-,H-Farbe,links,oben,Z-Modus

mtext32	dc.b	'   Quit',0
	cnop	0,2


*---------------------------------------------------------------

trdevice	dc.b	'trackdisk.device',0
	cnop	0,2

diskio		ds.l	20
	cnop	0,2
readrepl	ds.l	8
	cnop	0,2
diskbuffer	ds.l	10
	cnop	0,2

dfi_name	dc.b	'DF0:DF1:DF2:DF3:',0
	cnop	0,4


text_me1	dc.b	'No Disk in df :',0
	cnop	0,4
text_me2	dc.b	'Not enough Memory',0
	cnop	0,4
