	opt	l-			;nicht linken!
* CASE X OF 

	include  OpenDos.i

_LVOOpen        equ  -30
_LVOClose       equ  -36Š
        move.l  #name,d1		;Name von RAW:
        move.l  #1005,d2		;Status = gibt es
        jsr     _LVOOpen(a6)		;nun oeffnen
	move.l	d0,d5			;Handle merken
        tst.l   d0			;Fehler?
        beq     fini			;wenn ja, abbrechen

        lea     buffer,a3		;Adresse des Puffers

loop	jsr     GetKey			;Lese Taste

* Key in Tabelle gueltiger Keys suchen
* ------------------------------------
        move.b  (a3),d0                 ;Code -> d0
        bclr    #5,d0              	;force uppercase
        lea     keys,a0                 ;Tab. gueltige Keys
        move    #count,d1               ;deren Anzahl
search  cmp.b   (a0)+,d0                ;Key hier?
        dbeq    d1,search               ;wenn nicht
	tst     d1                      ;Key gefunden?
        bmi     loop                    ;wenn nicht

* Rechne Adresse zu Key
* ---------------------
	neg	d1			;sub d1,#count
	add	#count,d1		;ergibt Platz-Nr. von Key
	lsl	#2,d1			;die mal 4 
        lea     table,a0                ;Zeiger auf Tabelle
        move.l  0(a0,d1),a0		;Adresse -> a0

        jsr     (a0)			;Routine aufrufen

        bra     loop			;bis F4 kommt

 
Eingabe	lea      E_text,a0  	   	;Adresse Text
        bsr      print			;drucken
        rts

Rechnen	lea      R_text,a0    	 	;Adresse Text
        bsr      print			;drucken
        rts


Stoppen	move.l  (sp)+,d0                ;Kill Return Adress
        move.l	d5,d1			;RAW wieder schliessen
        jsr     _LVOClose(a6)

* Zum Schluss immer die Lib schliessen!
        move.l  a6,a1                   ;DOS-Lib-Basis
	move.l  _SysBase,a6		;Basis Exec
        jsr     _LVOCloseLibrary(a6)	;Funktion "Schliessen"
fini	rts				;Return zum CLI

GetKey  move.l  d5,d1			;von RAW lesen
        move.l  a3,d2			;in diesen Puffer
        move.l  #1,d3			;1 Zeichen
        jsr     _LVORead(a6)		;Lesen aufrufen
	rts

print   move.l  a0,a1			;kopiere Textzeiger
p1      addq.l  #1,a1			;+1
        cmp.b   #0,(a1)+		;Null-Byte?
        bne     p1			;wenn nicht
        sub.l   a0,a1			;= Textlaenge

        move.l  a1,d3			;Laenge     
        move.l  d5,d1			;Handle
        move.l  a0,d2			;Adresse Text
        jsr	_LVOWrite(a6)		;Funktion "Schreiben"
	rts

* Datenbereich:

table    dc.l   Eingabe
         dc.l   Rechnen
         dc.l   Stoppen

keys	 dc.b	'E','R','S'
count	 equ    *-keys
	 cnop   0,4

dosname	 dc.b	'dos.library',0
	 cnop	0,2
name	 dc.b   'RAW:40/100/580/80/Stop mit S',0
         cnop   0,2

E_text	 dc.b	'Hier Eingabe',10,0
	 cnop   0,2
R_text	 dc.b	'Hier Rechnen',10,0
	 cnop   0,2

buffer   ds.b   8
         cnop   0,4

hbuf     ds.b   10

