;------------------------------------------------------------------------
;	PROGRAMM :  STARTUP-MENU
;	© by Christian Wenner in 1988
;
;  ADRESSE :
;		Christian Wenner
;		Zum Wenigenberg 28
;		5560	Wittlich-12
;		Tel:	06571 / 7584
;------------------------------------------------------------------------

_SysBase         equ   4		;Execbase
_LVOOpenLibrary  equ  -552  		;Library öffnen
_LVOCloseLibrary equ  -414		;Library schliessen
_LVOOpen         equ  -30		;Öffnen
_LVOClose        equ  -36		;Schließen
_LVOExecute	 equ  -222		;Programm aufrufen
_LVOWrite	 equ  -48		;Schreiben
_LVORead	 equ  -42		;Lesen
_WindowToBack	 equ  -306		;Fenster nach hinten
_WindowToFront	 equ  -312		;Fenster nach vorne

Mode_OldFile     equ  1005		;Modus: File existiert



Start	move.l	#dosname,a1		;DOS-Lib-Name 
	moveq	#0,d0			;egal welche Version
	move.l  _SysBase,a6		;Execbase
        jsr     _LVOOpenLibrary(a6)	;DOS-Library oeffnen
	tst.l	d0			;Fehler?
	beq	Ende			;wenn ja dann Ende
	move.l	d0,dosbase    		;sonst Dosbase merken

	move.l	#intname,a1		;INTUITION-Lib-Name 
	moveq	#0,d0			;egal welche Version
	move.l  _SysBase,a6		;Execbase
        jsr     _LVOOpenLibrary(a6)	;INTUITION-Library öffnen
	tst.l	d0			;Fehler?
	beq	Closedos		;wenn ja dann Dos schließen
	move.l	d0,intbase    		;sonst Intuitionbase merken

	move.l	dosbase,a6
        move.l  #rawname,d1		;Name von RAW:
        move.l  #Mode_OldFile,d2	;RAW: existiert
        jsr     _LVOOpen(a6)		;und öffnen
        tst.l   d0			;Fehler?
        beq     Closeint		;wenn ja dann Intuition schließen
	move.l	d0,d5

	lea.l	message,a0		;Adresse des Ausgabetextes
        move.l  (a0)+,d3		;Text-Länge
        move.l  d5,d1			;Handle holen
        move.l  a0,d2			;Adresse muß hier hin
        jsr	_LVOWrite(a6)		;Text ausgeben


loop	jsr     Readkey			;Taste lesen
	cmp.b	#$1b,(a3)		;Ist es die Escapetaste
	beq	Quit			;wenn ja dann Schluß
	cmp.b   #$9B,(a3)		;Ist es eine Funktionstaste ?
        bne     loop			;nein dann wieder zurück
	jsr	Readkey			;sonst lese Tastencode

;Code auswerten

	move.b  (a3),d0                 ;Code nach d0
        ext.w   d0                      ;auf Wort erweitern wegen SUB-Befehl
        sub.w   #$30,d0			;Code $30 bis $39 in Zahl 0 bis 9
					;umwandeln
	cmp.l	Anzahl,d0		;ist Zahl im zulassigen Bereich ?
	bge	loop	                ;nein dann zurück
	move.w	#40,d1			;sonst Zahl mit	
        mulu.w	d1,d0                   ;40 multiplizieren
	ext.l	d0			;d0 auf Long erweitern
        lea.l   beftable,a2             ;Adresse der Befehlstabelle
	move.l	a2,d1
        add.l	d0,d1			;Adresse nach d1

	movem.l	d0-d7/a0-a6,-(sp)	;Register retten
	move.l	intbase,a6		;Intutitionbase holen
	move.l	$34(a6),a0		;Zeiger auf aktives Fenster
					;(hier unser Fenster)
	jsr	_WindowToBack(a6)	;Fenster nach hinten
	movem.l	(sp)+,d0-d7/a0-a6	;Register zurückholen

	clr.l	d2			;Ein/Ausgabe im Cli-Fenster
	clr.l	d3
	jsr	_LVOExecute(a6)

;Warteschleife:

wait	jsr Readkey			;Taste lesen
	cmp.b	#$0d,(a3)		;Ist es Returntaste
	bne	wait			;nein dann weiter warten

	movem.l	d0-d7/a0-a6,-(sp)	;Register retten
	move.l	intbase,a6		;Intutitionbase holen
	move.l	$34(a6),a0		;Zeiger auf aktives Fenster
					;(hier unser Fenster)
	jsr	_WindowToFront(a6)	;unser Fenster wieder nach vorne
	movem.l	(sp)+,d0-d7/a0-a6	;Register zurückholen
	
        bra     loop			;und wieder zur Warteschleife

 

Quit	move.l	d5,d1			;Handle holen
	jsr	_LVOClose(a6)		;RAW: schliessen

Closeint
        move.l  intbase,a1 	        ;Intbase
	move.l  _SysBase,a6		;Execbase
        jsr     _LVOCloseLibrary(a6)	;DOS schliessen

Closedos
        move.l  dosbase,a1 	        ;Dosbase
	move.l  _SysBase,a6		;Execbase
        jsr     _LVOCloseLibrary(a6)	;DOS schliessen

Ende	rts				;Ende,zurück zum CLI


;Unterprogramme:

Readkey	move.l  d5,d1			;Handle holen
        lea.l   buffer,a3		;Adresse unseres Eingabepuffers
        move.l  a3,d2			;Pufferadresse holen
        move.l  #1,d3			;1 Zeichen
        jsr     _LVORead(a6)		;Zeichen lesen
	rts


;Daten:

Anzahl	dc.l	7			;Anzahl der erlaubten Funktionstasten

dosbase	dc.l	0
intbase	dc.l	0

dosname	dc.b	'dos.library',0
intname	dc.b	'intuition.library'
	 cnop	0,2

rawname	 dc.b   'RAW:0/0/640/200/'
Titel	 dc.b	'     STARTUP-MENU V1.2   © in 1988 by Christian Wenner',0
	 dc.b	'                  '
         cnop   0,2


buffer   ds.b   8			;unser Eingabepuffer
         cnop   0,4

beftable 				;in diese Tabelle müssen die Befehle
					;mit komplettem Pfad und Parametern
					;eingetragen werden
f1	dc.b	'Dirutil-5',0
f1_size	equ *-f1
	ds.b	40-f1_size

f2	dc.b	'Diskzap',0
f2_size	equ *-f2
	ds.b	40-f2_size

f3	dc.b	'Filezap c/Dir',0
f3_size	equ *-f3
	ds.b	40-f3_size

f4	dc.b	'Sectormap',0
f4_size	equ *-f4
	ds.b	40-f4_size

f5	dc.b	'Dir',0
f5_size	equ *-f5
	ds.b	40-f5_size

f6	dc.b	'Info',0
f6_size	equ *-f6
	ds.b	40-f6_size

f7	dc.b	'Microemacs',0
f7_size	equ *-f7
	ds.b	40-f7_size

f8	dc.b	'',0
f8_size	equ *-f8
	ds.b	40-f8_size

f9	dc.b	'',0
f9_size	equ *-f9
	ds.b	40-f9_size

f10	dc.b	'',0
f10_size	equ *-f10
	ds.b	40-f10_size


message	dc.l	mes_size
	dc.b	10,10,9,'Dies ist ein Beispiel für eine DISK-UTILITIES '
	dc.b	'Diskette, auf der',10,10,9
	dc.b	'ich einige nützliche Public-Domain Programme gesammelt habe !'
	dc.b	10,10,10
	dc.b	9,27,'[32m Taste  F1 : ',27,'[31m'
	dc.b	'Dirutil-5	(wie CLI-MATE)',10
	dc.b	9,27,'[32m Taste  F2 : ',27,'[31m'
	dc.b	'Diskzap	(Disk-Monitor)',10
	dc.b	9,27,'[32m Taste  F3 : ',27,'[31m'
	dc.b	'Filezap c/Dir	(Filemonitor ,zeigt Dir-Befehl',10
	dc.b	9,27,'[32m Taste  F4 : ',27,'[31m'
	dc.b	'Sectormap	(Zeigt Disk-Bitmap)',10
	dc.b	9,27,'[32m Taste  F5 : ',27,'[31m'
	dc.b	'Dir		(Zeigt Inhaltsverzeichnis)',10
	dc.b	9,27,'[32m Taste  F6 : ',27,'[31m'
	dc.b	'Info		(Zeigt Systembelegung)',10
	dc.b	9,27,'[32m Taste  F7 : ',27,'[31m'
	dc.b	'MicroEmacs	(Texteditor)',10,10,10
	dc.b	9,9,27,'[42m   Mit ESCAPE können Sie Dieses Menü wieder '
	dc.b	'verlassen ',27,'[40m',10
mes_size	equ	*-message-4


	END
