* event.s

* In diesen Files stecken diverse Deklarationen und Makros.
* Schauen Sie mal rein!

	incdir	":include/"

	include	intuition/intuition.i
	include	intuition/intuition_lib.i
	include	exec/exec_lib.i
	include	graphics/graphics_lib.i

* Text im Fenster zeichnen
* ------------------------
PRINT	macro
	moveq	\1,d0		     ;X-Position
	moveq	\2,d1		     ;Y
	move.l	windowptr,a1	     ;Via Window-Zeiger
	move.l	wd_RPort(a1),a1	     ;  Rast-Port-Adresse holen
	CALLGRAF Move                ;Funtion Move to X,Y
	move.l	windowptr,a1         ;brauche wieder Rastport
	move.l	wd_RPort(a1),a1
	lea	\3,a0	             ;Adresse Text
	moveq	\4,d0           ;seine Laenge
	CALLGRAF Text                ;und ausgeben
	endm
	

_main

* Intuition Library oeffnen:
* --------------------------
	lea	intname,a1                 
	moveq	#0,d0		
	CALLEXEC OpenLibrary
	tst.l	d0
	beq	abbruch	
	move.l	d0,_IntuitionBase    ;Basis-Zeiger sichern	

* Graphics Library oeffnen
* ------------------------
	lea	grafname,a1
	moveq	#0,d0
	CALLEXEC OpenLibrary
	tst.l	d0
	beq	closeint
	move.l	d0,_GfxBase          ;Basis-Zeiger sichern


* Window oeffnen
* --------------
	lea	windowdef,a0 	     ;zeige auf Window-Struktur
	CALLINT	OpenWindow	     ;oeffne Window
	tst.l	d0 		     ;ging was schief?
	beq	closegraf	     ;wenn ja		
	move.l	d0,windowptr	     ;Window-Zeiger sichern

* Menu installieren
* -----------------
	move.l	d0,a0		     ;^Window
	lea	Menu0,a1             ;^Menu		  
	CALLINT	SetMenuStrip         ;do it


* Auf Event warten, dann auswerten 
* --------------------------------
event
        move.l	windowptr,a0         ;zeige auf Window-Struktur
	move.l	wd_UserPort(a0),a0   ;nun auf Message-Port
	move.l	a0,a5		     ;rette Port-Adresse
	move.b	MP_SIGBIT(a0),d1     ;Signal Bit holen	  	
	moveq	#0,d0		     ;Nummer in
	bset	d1,d0		     ;Maske wandeln				
	CALLEXEC Wait		     ;Schlaf gut!
			
	move.l	 a5,a0		     ;hole Port-Adresse
	CALLEXEC GetMsg	             ;hole Message
	move.l	 d0,a1		     ;muss nach a1
	move.l	 im_Class(a1),d4     ;Msg-Typ
	move.w   im_Code(a1),d5      ;Untergruppe
	move.l   im_IAddress(a1),a4  ;Adr. f. Gadgets
	CALLEXEC ReplyMsg            ;quittiere Msg in a1

	cmpi.l	 #CLOSEWINDOW,d4     ;Window Closed?
	beq      closewindow         ;wenn so

	cmpi.l	 #MENUPICK,d4        ;Menu angewaehlt?
	beq	 do_menu	     ;wenn so	
	
	cmpi.l	 #GADGETUP,d4	     ;und so fuer jedes
	beq	 do_gadget	     ;jedes Bit

        bra      event

do_menu
	cmpi	 #MENUNULL,d5	     ;Item selektiert?
	beq	 event		     ;wenn nicht
	move	 d5,d2		     ;Code
	lea      buffer+8,a0	     ;in hex anzeigen
        bsr      hex                 ;Routine aufrufen
	PRINT    #50,#50,buffer,#12	
	bra      event

do_gadget
	sub.l	a0,a0
	CALLINT	DisplayBeep	     ;Damit was passiert		
	bra      event

	
closewindow
	move.l	windowptr,a0         ;wir sind wieder wach
	CALLINT	CloseWindow	     ;Fenster zu


* Libraries schliessen
* --------------------
closegraf
	move.l	_GfxBase,a1
	CALLEXEC CloseLibrary

closeint
	move.l	_IntuitionBase,a1
	CALLEXEC CloseLibrary

abbruch
	moveq	#0,d0               ;oder normales Ende
	rts

* Konvertiere d2.w in ASCII-String ab (a0)
* ---------------------------------------- 
hex
	moveq	#3,d1		;fuer 4 Nibble 
next	rol	#4,d2		;hole 1 Nibble
	move	d2,d3		;nach d3 retten 
	and.b	#$0f,d3		;maskiere es
        add.b   #48,d3		;in ASCII wandeln
	cmp.b	#58,d3		;ist es >9 ?
	bcs     out		;wenn nicht
	addq.b	#7,d3		;sonst muss es A-F sein
out	move.b	d3,(a0)+	;1 Zeichen abspeichern
	dbra	d1,next		;next nibble
	rts

buffer  dc.b	'Code =  xxxx  hex'
	cnop	0,2	 
       
W_Gadgets equ   WINDOWSIZING!WINDOWDRAG!WINDOWDEPTH!WINDOWCLOSE
W_Extras  equ   SMART_REFRESH!ACTIVATE

W_Title dc.b    'Fenster-Titel',0

windowdef	
        dc.w	200,50              ;links, oben
	dc.w	300,100		    ;Breite, Hoehe
	dc.b	-1,-1		    ;Pens des Screen
	dc.l	CLOSEWINDOW!MENUPICK!GADGETUP!GADGETDOWN
        dc.l    W_Gadgets!W_Extras  ;Window Flags
	dc.l	Gadget0		    ;erstes User-Gadget
	dc.l	0	            ;keine User-Checkmark
	dc.l	W_Title  	    ;Titel des Window	
	dc.l	0	            ;kein eigener Screen
	dc.l	0		    ;keine Super Bitmap
	dc.w	100,20              ;Min. Groesse
        dc.w    640,200             ;Max.
	dc.w	WBENCHSCREEN	    ;Use Workbench Screen

Menu0	
	dc.l	0		    ;keines mehr
	dc.w	50,0		    ;x,y
	dc.w	60,0                ;breit, hoch
	dc.w    MENUENABLED	    ;Flags
	dc.l	MName0              ;^Titel
	dc.l	Item0		    ;^Item-Liste
	dc.w	0,0,0,0	            ;System-Use
Item0
	dc.l	Item1	            ;^next Item
	dc.w	0,0		    ;x,y
	dc.w    100,12	            ;breit, hoch
	dc.w	ITEMENABLED!ITEMTEXT!HIGHCOMP!COMMSEQ  ;Flags
	dc.l	0		    ;keine Excludes
	dc.l	IName0		    ;^Text
	dc.l	0 	            ;Select Fill
	dc.b	'N'		    ;Cmd-Key
	dc.b	0		    ;Dummy
	dc.l	0	            ;Kein Sub-Item
	dc.w	0		    ;     next Select
		
Item1
	dc.l	0	            ;^next Item
	dc.w	0,12		    ;x,y
	dc.w    100,12	            ;breit, hoch
	dc.w	ITEMENABLED!ITEMTEXT!HIGHCOMP!COMMSEQ  ;Flags
	dc.l	0		    ;keine Excludes
	dc.l	IName1		    ;^Text
	dc.l	0 	            ;Select Fill
	dc.b	'E'		    ;Cmd-Key
	dc.b	0		    ;Dummy
	dc.l	0	            ;Kein Sub-Item
	dc.w	0		    ;     next Select


IName0
	dc.b	0,2		    ;Pens
	dc.b	RP_JAM1,0	    ;Schreibmodus
	dc.w	2,2		    ;x,y
	dc.l	0		    ;System-Font
	dc.l	stri0	            ;^Text
	dc.l	0		    ;kein Text mehr
IName1
	dc.b	0,2		    ;Pens
	dc.b	RP_JAM1,0	    ;Schreibmodus
	dc.w	2,2		    ;x,y
	dc.l	0		    ;System-Font
	dc.l	stri1	            ;^Text
	dc.l	0		    ;kein Text mehr

MName0	dc.b	'Menu 0',0
	cnop	0,2
stri0	dc.b	'Item 0',0
	cnop	0,2
stri1	dc.b	'Item 1',0
	cnop	0,2


* Gadget-Strukturen
* -----------------

Gadget0	
	dc.l	Gadget1		;noch eins
	dc.w	20,20		;x,y
	dc.w	40,20		;breit,hoch
	dc.w	GADGHCOMP	;flags
	dc.w	RELVERIFY	;Aktivierung
	dc.w	BOOLGADGET	;Typ
	dc.l    Border0		;^Border-Strukt.
	dc.l	0
	dc.l	G0text		;^Text-Strukt.
	dc.l	0,0
	dc.w	0		;ID
	dc.l	0
Border0
	dc.w	0,0		;x,y
	dc.b	15,0		;Pens
	dc.b	RP_JAM1
	dc.b	5		;Paare
	dc.l	paar0		;^Liste
	dc.l	0		;kein Border mehr
paar0	
	dc.w	0,0		;Koord.-Liste
	dc.w	0,19
	dc.w	39,19
	dc.w	39,0
	dc.w	0,0
G0text
	dc.b	7,0		;Pens
	dc.b	RP_JAM1
	dc.w	10,7		;x,y
	dc.l	0		;Sys-Font
	dc.l	strg0
	dc.l	0
strg0	dc.b	'G0',0
	cnop	0,2

Gadget1	
	dc.l	0
	dc.w	80,20		;x,y
	dc.w	40,20		;breit,hoch
	dc.w	GADGHCOMP	;flags
	dc.w	RELVERIFY	;Aktivierung
	dc.w	BOOLGADGET	;Typ
	dc.l    Border1		;^Border-Strukt.
	dc.l	0
	dc.l	G1text		;^Text-Strukt.
	dc.l	0,0
	dc.w	0		;ID
	dc.l	0
Border1
	dc.w	0,0		;x,y
	dc.b	15,0		;Pens
	dc.b	RP_JAM1
	dc.b	5		;Paare
	dc.l	paar1		;^Liste
	dc.l	0		;kein Border mehr
paar1	
	dc.w	0,0		;Koord.-Liste
	dc.w	0,19
	dc.w	39,19
	dc.w	39,0
	dc.w	0,0
G1text
	dc.b	7,0		;Pens
	dc.b	RP_JAM1
	dc.w	10,7		;x,y
	dc.l	0		;Sys-Font
	dc.l	strg1
	dc.l	0
strg1	dc.b	'G1',0
	cnop	0,2

intname		INTNAME		    ;Name Intuition Lib (via Makro)
grafname	GRAFNAME	    ;Name Graphics Lib

                
_IntuitionBase	ds.l	1	   ;Speicher fuer Zeiger	
_GfxBase	ds.l	1	
windowptr	ds.l	1	

