	opt l-,d+,s-,n+
	plen 72
	llen 80
	ttl "Chart-Darstellung"
	
* INCLUDE-Files laden

	include df0:include/exec/exec_lib.i
	include df0:include/math/mathffp_lib.i
	include df0:include/intuition/intuition_lib.i
	include df0:include/math/mathtrans_lib.i
	include df0:include/graphics/graphics_lib.i
	include df0:include/libraries/dos_lib.i
	include df0:include/libraries/diskfont_lib.i

* MACRO-Definitionen		
	
* Intuition-Text ausgeben

PRINTOUT    	macro
		lea \1,a1
		move.l #\2,d0
		move.l #\3,d1
		move.l windowpointer,a0
		move.l 50(a0),a0
		CALLINT PrintIText
		endm

*Struktur für Ausgabe-Text

TEXTOUT		macro
		dc.b 3,0 	 ;Farben
		dc.b  0      	 ;Farbmodus
		even
		dc.w  0     	 ;x-Koordinate 
		dc.w  0		 ;y-Koordinate
		dc.l  0      	 ;Zeichensatz
		dc.l  \1   	 ;Textpointer
		dc.l  0      	 ;Weiterer Text      
		endm

TEXTOUT1	macro
		dc.b 0,0 	 ;Farben
		dc.b  0      	 ;Farbmodus
		even
		dc.w \1      	 ;x-Koordinate 
		dc.w \2		 ;y-Koordinate
		dc.l  0      	 ;Zeichensatz
		dc.l \3   	 ;Textpointer
		dc.l  0      	 ;Weiterer Text      
		endm

*Struktur für Menü

MENUE           macro
		dc.l \1		;naechstes Menue
		dc.w \2,\3	;x,y des Menuetitels
		dc.w 70,10	;Breite,Höhe des Menuetitels
		dc.w 1		;Menue wählbar
		dc.l \4		;Menütitel
		dc.l \5		;Menüeinträge
		dc.w 0,0,0,0
		endm

*Struktur für Menüpunkte

MENUPUNKT       macro
		dc.l  \1	;naechster Menupunkt
		dc.w  \2,\3     ;x,y-Position
		dc.w  \4        ;Breite
		dc.w  10	;Höhe
		dc.w  \5        ;Flag
		dc.l 0          ;kein Ausschluß
		dc.l  \6	;Zeiger auf Textstruktur
		dc.l  0		;keine Zeichnung
		dc.b  \7        ;Amiga-Taste
		even
		dc.l  \8	;Zeiger auf Untermenü
		dc.l  0
		endm

* Struktur für Windows

WINDOW       macro							
             dc.w       \1      ;Linke Ecke
             dc.w       \2	;Obere Ecke
             dc.w       \3	;Breite
             dc.w       \4	;Hoehe
             dc.b       0,1	;Farben
             dc.l       \5	;Flags für Events
             dc.l       \9      ;Window Flags
             dc.l       \6      ;Zeiger auf erstes Gadget
             dc.l       0       ;Check Mark
             dc.l       \7      ;Windowname						
\8           dc.l       0	;Screenpointer
             dc.l       0	;Bit Map
             dc.w      \3	;Mindest-Breite
             dc.w      \4 	;Mindest-Hoehe
             dc.w      \3	;Maximale Breite
             dc.w      \4	;Maximale Hoehe
             dc.w      15	;Window-Typ
	     endm

* Struktur für Screens

SCREEN		macro  
	   dc.w       0		;linke Ecke
	   dc.w       0		;obere Ecke
	   dc.w       \1	;Breite
	   dc.w       \2	;Höhe
	   dc.w       2		;Tiefe (Bitplanes)
	   dc.b       2,3	;Farben
	   dc.w       \3	;Modus
	   dc.w      15		;Screentyp
	   dc.l       0		;Zeichensatz
	   dc.l       \4	;Screentitel
	   dc.l       0		;Gadgets
	   dc.l       0		;Bitmap
		endm

* Struktur für Gadgets

GADGET   macro 
	 dc.l       \1   ;naechstes Gadget
	 dc.w       \2   ;obere Ecke x
	 dc.w       \3   ;obere Ecke y
	 dc.w      122   ;Breite
	 dc.w       10   ;Hoehe
	 dc.w        0   ;Flags
	 dc.w       \4   ;Activation-Flags
	 dc.w       \5   ;Gadget-Typ
	 dc.l       \6   ;Gadget-Boarder
	 dc.l        0   ;kein Select-Gadget
	 dc.l       \7   ;Gadget-Text
	 dc.l        0   ;kein Exclude
	 dc.l       \8   ;Special-Info
	 dc.w       \9   ;Gadget-ID
	 dc.l        0   ;User-Data
	 endm

* Struktur für Eingaben bei Stringgadgets

STRINF          macro 
	        dc.l  \1	;Textpuffer
	        dc.l  undo 	;Undo-Puffer
	        dc.w  0		;Cursor-Position
	        dc.w  15	;Anzahl Zeichen (max)
		dc.w  0		;Ausgabeposition Cursor
		dc.w  0		;Position Undo-Puffer
		dc.w  0		;Anzahl Zeichen im Textpuffer
		dc.w  0		;Anzahl sichtbare Zeichen
		dc.w  0         ;horizontaler Offset	
		dc.w  0		;vertikaler Offset
		dc.l  0		;Zeiger auf Rastport
		dc.l  0         ;Integer-Wert					                       
		dc.l  0		;Tastatur-Belegung
		endm

* Textstruktur für Gadgets

STRING         macro
               dc.b  1,0	;Farben
               dc.b  1		;Farbmodus
	even
               dc.w  \1,\2	;Positionen
               dc.l  0		;Zeichensatz
               dc.l  \3		;Textpointer
               dc.l  \4		;naechster Text
	       endm

* Puffer für Stringgadets

ZAHLEN 		 macro
		 dc.b "0",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
		 dc.b "0",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
		 dc.b "0",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
		 dc.b "0",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
		 dc.b "0",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
		 dc.b "0",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
		 dc.b "0",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
		 dc.b "0",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
		 dc.b "0",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
		 dc.b "0",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
		 endm

* Zeichensatz

ZEICHEN		macro
		dc.l \1		;Pointer auf Name
		dc.w \2		;Größe in Pixeln
		dc.b \3		;Style
		dc.b \4		;Flag
		endm


	include df0:include/startup


undo		dc.l  0,0,0,0		;Undo-Puffer für Stringgadets

begin	lea ffpname,a1		;Math-Library öffnen
	clr.l d0
	CALLEXEC OpenLibrary
	tst.l d0
	beq fini1
	move.l d0,_MathBase

	lea intname,a1		;Intuition-Library öffnen
	clr.l d0
	CALLEXEC OpenLibrary
	tst.l d0			
	beq fini2
	move.l d0,_IntuitionBase

	lea mathtransname,a1	;Mathtrans-Library öffnen
	clr.l d0
	CALLEXEC OpenLibrary
	tst.l d0
	beq fini3
	move.l d0,_MathTransBase
	
	lea grafname,a1		;Grafik-Library öffnen
	clr.l d0
	CALLEXEC OpenLibrary
	tst.l d0
	beq fini4
	move.l d0,_GfxBase

	lea dosname,a1		;DOS-Library öffnen
	clr.l d0
	CALLEXEC OpenLibrary
	tst.l d0
	beq fini5
	move.l d0,_DOSBase

	lea diskfontname,a1		;Diskfont-Library öffnen
	clr.l d0
	CALLEXEC OpenLibrary
	tst.l d0
	beq fini6
	move.l d0,_DiskfontBase
	
	lea screen_defs,a0		;Screen öffnen
	CALLINT OpenScreen
	move.l d0,screenpointer		;Pointer für
	move.l d0,point1
	move.l d0,point2		;windows
	move.l d0,point3

* Zeichensätze holen
	
	bsr opdifo			;von Diskette
	bsr opfo			;aus dem ROM
	bsr adfo			;Zeichensätze holen

	move.l #640,d0			;Speicherplatz für
	move.l #256,d1			;FLOOD bereitstellen
	CALLGRAF AllocRaster		;(Breite,Höhe Bildschirm)
	move.l d0,mempoint		;Pointer sichern
		
	lea areainf,a0		;Platz für Area-Infos
	lea platz,a1		;Platz für Koordinaten
	move.l #10,d0			;max. 10 Einträge
	CALLGRAF InitArea		;Area initialisieren
		
	move.l mempoint,a1		;Pointer auf Puffer
	move.l #40960,d0		;Größe in Bytes
	lea tmpras,a0		;Start Puffer 
	CALLGRAF InitTmpRas		;Puffer initialisieren
		
* menueaufbau, abfrage

	lea startwindow,a0		;Startwindow öffnen
	CALLINT OpenWindow
	move.l d0,windowpointer

	bsr print

	move.l windowpointer,a0
	lea menu,a1
	CALLINT SetMenuStrip		;Menü setzen

	move.l windowpointer,a0		;aktuellen Zeichensatz
	move.l 50(a0),a1
	lea zeichenleer,a0		;sichern
	CALLGRAF AskFont
	lea zeichenleer,a0		;in leere Struktur
	CALLGRAF OpenFont
	lea leer,a0
	move.l d0,(a0)
	bra wait11
	
wait	move.l windowpointer,a0		;Startzeichensatz
	move.l 50(a0),a1
	lea leer,a0			;reaktivieren
	move.l (a0),a0
	CALLGRAF SetFont


wait11	move.l windowpointer,a0
	move.l 86(a0),a0		;User-Port holen
  	move.l a0,a5			;Adresse retten
	move.b 15(a0),d1		;Signal-Bit holen
	moveq #0,d0			;Nummer in Maske
	bset d1,d0			;wandeln
	CALLEXEC Wait			;Auf Wiedersehen !
	move.l a5,a0	
	CALLEXEC GetMsg			;Message holen
	move.l d0,a1
	clr.l d7
	move.w $18(a1),d7    		;Menüpunkt holen
	move.l $1C(a1),d6		;Adresse Gadget holen
	move.l $14(a1),d5		;IDCMP-Flag holen
	CALLEXEC ReplyMsg		;Message quittieren
	cmpi.l #$100,d5			;Menüpunkt ?
	beq menü			;Ja !

* Kein Menüpunkt, also Gadget angewählt

	move.l d6,a2
	move.w $26(a2),d2		;ID aus Gadget-Struktur
	cmpi.w #111,d2			
	beq torte			;Tortengrafik
	cmpi.w #112,d2
	beq saeule			;Saeulengrafik
	bne wait11			;Datensatz-Gadget

* Behandlung Menüpunkte

menü	cmpi.w #$ffff,d7			;Keiner
	beq wait11
	bsr wert			;Menüpunkt auswerten
	lea tab,a4
spring	adda.l d5,a4
	move.l (a4),a4			;Menüpunkt feststellen
	adda.l d6,a4
	move.l (a4),a4
	jmp (a4)			;und anspringen

tabmenu1	 dc.l endof			;Menüpunkt Menü1
tabmenu2         dc.l eingeben,laden,speichern	;Menüpunkte Menü2

tab		 dc.l tabmenu1,tabmenu2		;Menüs 1 bis 2

* Menüpunkt auswerten

wert	move.w d7,d6
	lsr #7,d7
	lsr #4,d7			
	lsl #2,d7			;Untermenü*4 in D7
	move.w d6,d5				
	andi.l #%00000000000000000000011111100000,d6
	lsr #3,d6			;Menüpunkt*4 in D6
	andi.l #%00000000000000000000000000011111,d5	
	lsl #2,d5			;Menü*4 in D5
	rts

* ERSTES MENÜ (DATEN)

* Menüpunkt Daten eingeben

eingeben	clr.w seite		;Zähler löschen
weiein		move.w #160,d0
		move.w seite,d1		;Stringstart=
		mulu d1,d0
		addi.l #wertestr,d0	;Tabellenanfag+160*Seite
		move.l d0,a0
		move.w #40,d0		;Daten in Puffer kopieren
		lea puffer,a1
einloop		move.l (a0)+,(a1)+
		subq.w #1,d0
		bne einloop

		move.b seite+1,d0	;Strings vorbereiten:
		addi.b #48,d0
		move.w #10,d1		;Seitennummer + 48 (ASCII)
		lea stringtabg,a0
einloop1	move.l (a0)+,a1		;=Zehnerstelle
		move.b d0,(a1)
		subq.w #1,d1
		bne einloop1

		lea einwindow,a0	;Window für Eingabe
		bsr mainwindow		;öffnen
		move.l iwindowpointer,a0
		CALLINT CloseWindow	;Fenster schliessen
		move.w d2,a4		;Gadget-ID retten
		move.w #160,d0
		move.w seite,d1		;Stringstart=
		mulu d1,d0
		addi.l #wertestr,d0	;Tabellenanfag+160*Seite
		move.l d0,a0
		move.w #40,d0		;Puffer zurückkopieren
		lea puffer,a1
einloop2	move.l (a1)+,(a0)+
		subq.w #1,d0
		bne einloop2
		move.w #40,d0
		move.w seite,d1		;Fliesskommastart=
		mulu d1,d0
		addi.l #werte,d0		;Tabellenanfag+40*Seite
		move.l d0,a3
		bsr wandel		;umwandeln in Fliesskomma
		move.w a4,d0
		cmpi.w #111,d0
		bne endein		;weitere Eingaben gewünscht
		move.w seite,d0
		addq #1,d0
		move.w d0,seite		;schon 10 Seiten bearbeitet
		cmpi.w #10,d0
		bne weiein		;nein, weitere Eingaben
endein		bra exit		;fertig

seite		dc.w 0

stringtabg	dc.l string101,string111,string121,string131,string141
		dc.l string151,string161,string171,string181,string191

* Menüpunkt laden
		
laden		lea diskwindow,a0	;Window öffnen
		bsr mainwindow
		cmpi.w #111,d2		;Abbruch
		bne exit10		
ld1		move.l #1005,d2		;Modus alt
		move.l #puffer+160,d1	;Zeiger auf Filenamen
		CALLDOS Open		;File öffnen
		move.l d0,file		;Pointer sichern
		beq fehler		;Fehler !
		move.l d0,d1
		move.l #wertestr,d2	;Zeiger auf Daten
		move.l #2000,d3		;Datei lesen
		CALLDOS Read
		bra Schliess		;Datei schliessen

fehler		bsr requester		;Fehler abfragen
		tst.l d0
		bne ld1			;nochmal versuchen
		bra exit10
		

* Menüpunkt speichern

speichern	lea diskwindow,a0	;Window öffnen
		bsr mainwindow
		cmpi.w #111,d2		;Abbruch
		bne exit10
sp1		move.l #1006,d2		;Modus neu
		move.l #puffer+160,d1	;Zeiger auf Filenamen
		CALLDOS Open		;File öffnen
		move.l d0,file		;Pointer sichern
		beq fehler1		;Fehler !
		move.l d0,d1
		move.l #wertestr,d2	;Zeiger auf Daten
		move.l #2000,d3		;2000 Bytes schreiben
		CALLDOS Write
Schliess	move.l file,d1		;Pointer laden
		CALLDOS Close		;Datei schliessen
		bra exit10		

fehler1		bsr requester		;Fehler abfragen
		tst.l d0
		bne sp1			;nochmal versuchen
		
exit10		move.l iwindowpointer,a0	
		CALLINT CloseWindow	;Fenster schliessen
		bra exit		

file		dc.l 0			;File-Pointer

* ZWEITES MENÜ (OPTION)

* Menüpunkt Ende

endof		bra ende


* Darstellung Tortengrafik

torte		lea werte,a0
		move.l (a0),d0		;Keine Werte vorhanden ?
		beq wait11
		bsr plot		;Bildschirm aufbauen
		bsr reserve		;Platz reservieren			

* Torte mit "normalen" Grafikbefehlen aufbauen

		move.l iwindowpointer,a0	
		move.l 50(a0),d7	;Rast-Port holen
		clr.l d5		;Startwinkel=PI Halbe
		move.l PI,d6	        ;Endwinkel = 3 * PI Halbe
		move.l ym,d0		;Mittelpunkt y
		add.l off,d0
		bsr ellipse		;Ellipsenteil zeichnen
		clr.l d5		;Startwinkel
		move.l PIm2,d6		;Endwinkel = 2 * PI
		move.l ym,d0		;Mittelpunkt y
		bsr ellipse		;Ellipse zeichnen
		move.l d7,a1		;Rastport holen
		move.l xm,d0
		sub.l xr,d0
		move.l ym,d1
		CALLGRAF Move		;Verbindungslinie
		move.l d7,a1
		move.l xm,d0		;linke Seite zeichnen
		sub.l xr,d0
		move.l ym,d1
		add.l off,d1
		CALLGRAF Draw
		move.l d7,a1		;Rastport holen
		move.l xm,d0
		add.l xr,d0
		move.l ym,d1
		CALLGRAF Move		;Verbindungslinie
		move.l d7,a1
		move.l xm,d0		;rechte Seite zeichnen
		add.l xr,d0
		move.l ym,d1
		add.l off,d1
		CALLGRAF Draw
		bsr vor		 	;Ausgabe vorbereiten
		move.l d2,d6		;Zähler für Summenbildung
		move.l d4,a5
		clr.l d0		;Summe löschen
summe		move.l (a5)+,d1		;Nächster Wert
		CALLFFP SPAdd		;hinzuaddieren
		subq #1,d6		;Zähler abgelaufen ?
		bne summe
		move.l d0,d5
		
* Tortenstücke malen

		clr.l altx
		clr.l alty
		move.l xrfloat,d0	;Faktoren durch zwei
		move.l zwei,d1
		CALLFFP SPDiv		;vorbereiten
		move.l d0,xrfloatd2
		move.l yrfloat,d0
		move.l zwei,d1
		CALLFFP SPDiv
		move.l d0,yrfloatd2
		move.l PIm2,d0		;2*PI/Summe=Schrittweite
		move.l d5,d1		;des Winkels
		CALLFFP SPDiv
		move.l d0,d5
		move.l d7,a1		;Rast-Port holen
		move.l xm,d0
		move.l ym,d1		;Startpunkt setzen
		CALLGRAF Move
		move.l d7,a1		;Rast-Port holen
		move.l xm,d0		;Linie zum
		add.l xr,d0
		move.l ym,d1		;Tortenrand
		CALLGRAF Draw		;zeichnen
		clr.l d6		;aktueller Winkel
		move.b #1,flag		;Flag setzen
		move.l d4,a3
torteloop	move.l (a3)+,d0		;Wert holen
		move.l d5,d1		;mit Winkel-Schrittweite
		CALLFFP SPMul		;multiplizieren
		move.l d6,d1		;Zu Startwinkel addieren
		CALLFFP SPAdd
		move.l d0,d3		;und merken
		CALLMATHTRANS SPCos	;Cosinus bilden
		move.l xrfloat,d1
		CALLFFP SPMul		;mal x-Radius=Offset
		move.l xmfloat,d1	;plus x-Mittelpunkt=
		CALLFFP SPAdd		;Koordinate
		CALLFFP SPFix		;Integer
		move.l d0,a4		;merken
		move.l d3,d0		;Winkel wiederholen
		CALLMATHTRANS SPSin	;Sinus bilden
		move.l yrfloat,d1
		CALLFFP SPMul		;mal y-Radius=Offset
		move.l ymfloat,d1	;plus y-Mittelpunkt=
		CALLFFP SPAdd		;Koordinate
		CALLFFP SPFix		;Integer
		move.l d0,a5		;merken
		move.l d7,a1		;Rast-Port holen
		move.l xm,d0
		move.l ym,d1		;Startpunkt setzen
		CALLGRAF Move
		move.l d7,a1		;Rast-Port holen
		move.l a4,d0		;Linie zum
		move.l a5,d1		;Tortenrand
		CALLGRAF Draw		;zeichnen
		tst.b flag		;Jedes zweite Stück
		bne nofill		;ausfüllen		

* Tortenstück füllen

		move.l d2,a2		;d2 retten
		move.l d3,d0
		move.l d6,d1		;Winkel Tortenstück
		CALLFFP SPSub		
		move.l zwei,d1		;durch 2 teilen
		CALLFFP SPDiv
		move.l d6,d1		;zu altem Winkel
		CALLFFP SPAdd		;addieren
		move.l d0,winkel	;und merken
		CALLMATHTRANS SPCos	;Cosinus bilden
		move.l xrfloatd2,d1
		CALLFFP SPMul		;mal x-Radius/2=Offset
		move.l xmfloat,d1	;plus x-Mittelpunkt=
		CALLFFP SPAdd		;Koordinate
		CALLFFP SPFix		;Integer
		move.l d0,xmerk		;merken
		move.l winkel,d0	;Winkel wiederholen
		CALLMATHTRANS SPSin	;Sinus bilden
		move.l yrfloatd2,d1
		CALLFFP SPMul		;mal y-Radius/2=Offset
		move.l ymfloat,d1	;plus y-Mittelpunkt=
		CALLFFP SPAdd		;Koordinate
		CALLFFP SPFix		;Integer
		move.l d0,ymerk		;merken
		move.l d7,a1		;Rastport holen
		moveq.l #1,d2		;Füllmodus
		move.l xmerk,d0
		move.l ymerk,d1		;Koordinaten
		CALLGRAF Flood		;Tortenstück füllen
		move.l a2,d2		;d2 wiederholen

nofill		move.l d3,d0
		move.l PI,d1		;Vorderansicht ?
		CALLFFP SPCmp
		cmpi.l #-1,d0
		beq no3D1		;Nein, keine
		move.l d7,a1
		move.l a4,d0		;Ja, Linie auf
		move.l a5,d1
		add.l off,d1		;Vorderseite zeichnen
		CALLGRAF Draw

no3D1		tst.b flag
		bne no3D		;nur jedes zweite Stück
		move.l alty,d0		;PI überschritten ?
		cmpi.l #100,d0
		bls no3D		;Ja, nicht füllen
		
* Vorderansicht füllen

		move.l d2,a2		;d2 retten
		move.l altx,d0
		subq.l #1,d0		;Startpunkt fast in Ecke
		move.l alty,d1		;(x-1, y+5)
		addi.l #15,d1
		move.l d7,a1		;Rastport holen	
		moveq.l #1,d2		;Füllmodus setzen
		CALLGRAF Flood
		move.l a2,d2		;d2 wiederholen

no3D		move.l a4,altx		;Werte merken
		move.l a5,alty
		move.l d3,d6		;Winkel neu setzen
		eor.b #1,flag
		subq #1,d2		
		bne torteloop		;nächstes Stück zeichnen

		bra mainpl		;Fertig
		
mempoint	dc.l 0				

PId2		dc.b $C9,$0F,$DA,$41	;PI durch 2		
PI		dc.b $C9,$0F,$DA,$42	;PI
PIm3d2		dc.b $96,$CB,$E5,$43	;PI mal 3 durch 2
PIm2		dc.b $C9,$0F,$DA,$43	;PI mal 2
VIERH		dc.b $C8,$00,$00,$49	;400 (Durchmesser Ellipse)
zwei		dc.b $80,$00,$00,$42	;Zwei (Teilfaktor)

xm		dc.l 320	;Mittelpunkt x
ym		dc.l 100	;Mittelpunkt y
xr		dc.l 160	;x-Radius
yr		dc.l 56		;y-Radius
off		dc.l 25		;3D-Ellipsenversatz

xmfloat		dc.l 0
ymfloat		dc.l 0
xrfloat		dc.l 0
yrfloat		dc.l 0
xrfloatd2	dc.l 0
yrfloatd2	dc.l 0
xmerk		dc.l 0
ymerk		dc.l 0
winkel		dc.l 0
altx		dc.l 0
alty		dc.l 0



* Ellipse(nabschnitt) zeichnen 

ellipse		CALLFFP SPFlt	;ym in Fliesskomma
		move.l d0,ymfloat
		move.l xm,d0	;xm in Fliesskomma
		CALLFFP SPFlt	
		move.l d0,xmfloat
		move.l xr,d0	;xr in Fliesskomma
		CALLFFP SPFlt
		move.l d0,xrfloat
		move.l yr,d0	;yr in Fliesskomma
		CALLFFP SPFlt
		move.l d0,yrfloat
		move.l VIERH,d1	;Schrittweite berechnen
		move.l PIm2,d0
		CALLFFP SPDiv
		move.l d0,schritt
		move.l d5,d3	;Startwinkel setzen
		move.b #1,flag	;Flag setzen
elloop		move.l d3,d0
		CALLMATHTRANS SPCos
		move.l xrfloat,d1
		CALLFFP SPMul	;x-Offset=xr*cos(w)
		move.l xmfloat,d1
		CALLFFP SPAdd	;Punkt=Mittelpunkt+Offset
		CALLFFP SPFix	;Integer-Wert
		move.l d0,d2	;merken
		move.l d3,d0	;Winkel wiederholen
		CALLMATHTRANS SPSin
		move.l yrfloat,d1
		CALLFFP SPMul	;y-Offset=yr*sin(w)
		move.l ymfloat,d1
		CALLFFP SPAdd	;Punkt=Mittelpunkt+Offset
		CALLFFP SPFix	;Integer-Wert
		move.l d0,d1	;merken
		move.l d2,d0	;x-Wert holen
		move.l d7,a1	;Rast-Port holen
		tst.b flag	;Erstes Mal: Punkt setzen
		bne Pixel
		CALLGRAF Draw	;Sonst: Linie
		bra Linie
Pixel		CALLGRAF Move
Linie		clr.b flag	;Flag setzen
		move.l d3,d1
		move.l schritt,d0
		CALLFFP SPAdd	;Winkel erhöhen
		move.l d0,d3	;und neu setzen
		move.l d6,d1	;mit Endwinkel
		CALLFFP SPCmp	;vergleichen
		cmpi.l #-1,d0
		bne elloop	;noch nicht erreicht
		rts

schritt		dc.l 0		
flag		dc.b 0
		even
		

* Darstellung Saeulengrafik

saeule		lea werte,a0
		move.l (a0),d0		;Keine Werte vorhanden ?
		beq wait11
		bsr plot		;Bildschirm aufbauen
		bsr reserve		;Platz reservieren			

* Feld für Säulen aufbauen und Masstab ausrechnen
		
		move.l iwindowpointer,a0	
		move.l 50(a0),a1	;Zeiger auf Rastport
		move.l a1,d7		;und merken
		move.l #94,d0		;Startpunkt setzen
		move.l #27,d1
		CALLGRAF Move		;(Grafikcursor)
		move.l d7,a1		;Rastport wiederholen
		lea koord,a0		;Koordinatenangaben
		move.l #23,d0		;23 Koordinatenpaare
		CALLGRAF PolyDraw	;Polygon zeichnen
		bsr vor			;Daten vorbereiten
		move.l d2,d6		;Zähler setzen
		move.l d4,a5
		clr.l maximum	;Maximum löschen
maxloop		move.l (a5)+,d0		;Wert holen
		move.l maximum,d1	;Mit Maximum
		CALLFFP SPCmp		;Vergleichen
		cmpi.l #-1,d0		;Grösser ?
		bne nomax		;Nein
		move.l -(a5),maximum	;Ja, neues Maximum
		move.l (a5)+,d0		;Zeiger korrigieren
nomax		subq.b #1,d6
		bne maxloop		;Weitere Werte prüfen
		move.l einhuvier,d0	;140 in Fliesskomma
		move.l maximum,d1	;Masstab=140 Punkte
		CALLFFP SPDiv		;durch maximalen Wert
		move.l d0,höhenmass	;für Höhe Säulen
		move.l d2,d0		;Anzahl der Werte
		CALLFFP SPFlt		;in Fliesskomma
		move.l d0,d1		
		move.l vierhufünf,d0	;450 in Fliesskomma
		CALLFFP SPDiv		;durch Anzahl = DX
		move.l d0,d6		;merken
		CALLFFP SPFix		;Integer
		move.l d0,gesamtbreit	
		move.l d6,d0
		move.l nullsieben,d1	;0.75 in Fliesskomma (70%)
		CALLFFP SPMul		;=Säulenbreite
		CALLFFP SPFix
		move.l d0,säulenbreit
		
* Einzelne Säulen aufbauen		

		move.l #50,xstart	;linker Eckpunkt von Säule
		move.l d7,a0		;Rastport holen
		move.l #areainf,$10(a0)	;Area Pointer in Rastport
		move.l d4,a5		;Zeiger auf Werte
		clr.b flag		;Flag löschen
säulenloop	move.l d7,a1		;Rastport holen
		moveq.l #1,d0		;Farbe setzen für Front
		CALLGRAF SetAPen	
		move.l (a5)+,d0		;Wert holen
		move.l höhenmass,d1	;mal Masstab
		CALLFFP SPMul		;=Höhe in Punkten
		CALLFFP SPFix		;natürlich Integer-Wert
		move.l d0,höhe		;merken
		move.l d2,a2		;d2 retten
		move.l xstart,d0	
		move.l #185,d3
		move.l d3,d1
		sub.l höhe,d1		;oberer Punkt links
		move.l d1,d4		;merken
		move.l d0,d2		;unterer Punkt rechts
		add.l säulenbreit,d2		
		move.l d2,d5		;merken
		move.l d7,a1		;Rastport holen
		CALLGRAF RectFill	;Vorderfront zeichnen
		move.l d7,a1		;Rastport holen
		moveq.l #3,d0		;Farbe setzen für 
		CALLGRAF SetAPen	;restliche Seiten
		move.l xstart,d0
		move.l d4,d1
		move.l d7,a1
		CALLGRAF AreaMove	;Erster Eintrag
		move.l xstart,d0
		addi.l #54,d0		;x plus 45
		move.l d0,d6		;merken
		move.l d4,d1		;y holen
		subi.l #18,d1		;minus 15
		move.l d1,a4		;merken
		move.l d7,a1
		CALLGRAF AreaDraw	;Zweiter Eintrag
		move.l d6,d0		;x plus
		add.l säulenbreit,d0	;Säulenbreite
		move.l d0,d6		;merken
		move.l a4,d1		;y bleibt gleich
		move.l d7,a1		
		CALLGRAF AreaDraw	;Dritter Eintrag
		move.l d6,d0		;x bleibt gleich
		move.l a4,d1
		add.l höhe,d1		;y plus Höhe
		move.l d7,a1
		CALLGRAF AreaDraw	;Vierter Eintrag
		move.l d5,d0		;altes x holen
		move.l #185,d1		;altes y holen
		move.l d7,a1		;Rastport holen
		CALLGRAF AreaDraw	;Fünfter Eintrag
		move.l d5,d0		;x bleibt
		move.l d4,d1		;195 minus Höhe
		move.l d7,a1		;Rastport holen
		CALLGRAF AreaDraw	;Sechster Eintrag
		move.l xstart,d0	;Start x
		move.l d4,d1		;195 minus Höhe
		move.l d7,a1		;Rastport holen
		CALLGRAF AreaDraw	;Siebter Eintrag
		move.l d7,a1
		CALLGRAF AreaEnd	;Polygon schliessen+füllen
		move.l xstart,d0
		add.l gesamtbreit,d0	;Startwert für nächste
		move.l d0,xstart	;Säule setzen
		move.l a2,d2		;d2 wiederholen
		subq.w #1,d2
		bne säulenloop
		move.l d7,a1		;Rastport holen
		clr.l d0		;alte Farbe setzen 
		CALLGRAF SetAPen	
		bra mainpl		;Fertig


koord		dc.w 94,27,40,45,40,185,94,167,94,27,547,27
		dc.w 547,167,94,167,40,185,493,185,547,167,547,132
		dc.w 94,132,40,150,40,115,94,97,547,97,547,62
		dc.w 94,62,40,80,40,45,94,27,94,167			

vierhufünf	dc.b $E1,$00,$00,$49	;450 in Fliesskomma
einhuvier	dc.b $8C,$00,$00,$48	;140 in Fliesskomma
nullsieben	dc.b $C0,$00,$00,$40	;0.75 in Fliesskomma

säulenbreit 	dc.l 0
gesamtbreit	dc.l 0
höhenmass	dc.l 0
maximum		dc.l 0
xstart		dc.l 0
höhe		dc.l 0

platz		ds.l 20

* Reserviert Platz für Area-Befehle und Flood
	
reserve		move.l iwindowpointer,a0
		move.l 50(a0),a0	;Rast-Port holen
		move.l #tmpras,$0C(a0)	;Strukur eintragen
		rts
			
* Plotschirm aufbauen

plot	lea plot_defs,a0		;Screen öffnen
	CALLINT OpenScreen
	move.l d0,plotpointer		;Pointer für
	move.l d0,point4
	lea plotwindow,a0
	CALLINT OpenWindow		;Window öffnen
	move.l d0,iwindowpointer
	rts

* Ausgabe vorbereiten

vor	lea strinfo13,a0		;Startsatz holen
	move.l 28(a0),d3		;aus Stringinfo
	lea strinfo14,a0		;Zielsatz holen
	move.l 28(a0),d2		;aus Stringinfo
	move.l d3,d4			;Startadresse erster
	lsl.l #2,d4			;Datensatz berechnen 
	addi.l #werte,d4			;(*4 wegen Langwörtern)
	sub.l d3,d2			;Anzahl Datensätze
	addq.l #1,d2			;berechnen
	rts 	

* Nach Grafikaufbau: Menü, Zeichensätze setzen und auswerten

mainpl	lea plotmenu,a1
	move.l iwindowpointer,a0
	CALLINT SetMenuStrip		;Menü setzen
wait1	move.l iwindowpointer,a0
	move.l 86(a0),a0		;Warten auf Message
	CALLEXEC GetMsg
	tst.l d0
	beq wait1 			;keine
	move.l d0,a0
	move.l $14(a0),d2		;Wert holen:
	cmpi.l #$200,d2			;Close-Gadget
	beq endplot
	cmpi.l #$08,d2
	beq maus			;Maustaste
	clr.l d7
	move.w $18(a0),d7    		;Welcher Menüpunkt ?
	cmpi.w #$ffff,d7			;Keiner
	beq wait1
	bsr wert			;Menüpunkt auswerten
	lea tabplot,a4
	bra spring			;und anspringen

zsatz	dc.l topaz,ruby,sapphire,opal,diamond,garnet,emerald
style	dc.l unter,fett,schräg,breit

tabplot dc.l zsatz,style               ;Menüs

maske 	dc.b 0
	even

* Text aus Gadget ausgeben nach Maustastendruck

maus	move.l iwindowpointer,a0
	clr.l d0
	move.w $0E(a0),d0		;x-Koordinate
	move.l d0,setx+2
	move.w $0C(a0),d0		;y-Koordinate
	move.l d0,sety+2
	bsr plprint			;Text ausgeben
	bra wait1			;fertig		

	
* MENÜ ZEICHENSATZ

* MENÜPUNKT 1 (TOPAZ)

topaz	move.l #topazstart,d0		;Tabellenstart
	bra mainzei

topazstart	dc.l topaz9,topaz8

* MENÜPUNKT 2 (RUBY)

ruby	move.l #rubystart,d0
	bra mainzei

rubystart	dc.l ruby8,ruby12,ruby15

* MENÜPUNKT 3 (SAPPHIRE)

sapphire  move.l #sapphirestart,d0
	bra mainzei

sapphirestart	dc.l sapphire14,sapphire19

* MENÜPUNKT 4 (OPAL)

opal	move.l #opalstart,d0
	bra mainzei

opalstart	dc.l opal9,opal12

* MENÜPUNKT 5 (DIAMOND)

diamond  move.l #diamondstart,d0
	 bra mainzei

diamondstart	dc.l diamond12,diamond20

* MENÜPUNKT 6 (GARNET)

garnet	 move.l #garnetstart,d0
	 bra mainzei

garnetstart	dc.l garnet9,garnet16

* MENÜPUNKT 7  (EMERALD)

emerald	 move.l #emeraldstart,d0
	 bra mainzei

emeraldstart	dc.l emerald17,emerald20

* Zeichensatz neu setzen

mainzei	add.l d7,d0			;plus Untermenü * 4
	move.l d0,a0
	move.l (a0),a0			;Adresse holen
	move.l (a0),a0			;Textfont holen
	move.l iwindowpointer,a1	;Rastport holen
	move.l 50(a1),a1
	CALLGRAF SetFont		;Zeichensatz setzen
	bsr clrstyle			;Alle Styles löschen
	bra wait1			;fertig


* MENÜ STYLE

* MENÜPUNKT 1 (UNTERSTRICHEN)

unter	bsr holmaske		;Maske holen
	bchg.b #0,d2		;Bit 1 umdrehen
	bra setzmaske

* MENÜPUNKT 2  (FETTDRUCK)

fett	bsr holmaske		;Maske holen
	bchg.b #1,d2		;Bit 2 umdrehen
	bra setzmaske

* MENÜPUNKT 3  (SCHRÄGSCHRIFT)

schräg	bsr holmaske		;Maske holen
	bchg.b #2,d2		;Bit 3 umdrehen
	bra setzmaske

* MENÜPUNKT 4  (BREITSCHRIFT)

breit	bsr holmaske		;Maske holen
	bchg.b #3,d2		;Bit 4 umdrehen
	bra setzmaske

* Alte Zeichensatz-Stil-Maske holen (codiert)

holmaske  move.l iwindowpointer,a1 ;Rastport holen
	  move.l 50(a1),a1
	  CALLGRAF AskSoftStyle	;Maske holen
	  move.b maske,d2	
	  rts

* Neue Zeichensatz-Stil-Maske setzen

setzmaske bsr setmaske		;ausführen
	  bra wait1		;fertig


setmaske  move.b d2,maske	;Neue Maske retten
	  move.b d0,d1
	  move.b d2,d0		;Alles löschen
	  move.l iwindowpointer,a1 ;Rastport holen
	  move.l 50(a1),a1
	  CALLGRAF SetSoftStyle	;Maske setzen
	  rts	
	  
* Alle gesetzten Styles löschen
		
clrstyle moveq.l #4,d0			;4 Menüpunkte
	 lea menuptab,a0		;Startadresse Struktur
clrloop  move.l (a0)+,a1		;Menüpunkt holen
	 bclr #8,12(a1)   		;CHECKED-Bit löschen
	 subq.w #1,d0
	 bne clrloop
	 bsr holmaske			;Alle Styles
	 clr.b d2			;löschen
	 bra setmaske

* Ende des Plottems

endplot bsr clrstyle			;Alle Styles löschen
	move.l iwindowpointer,a0
	CALLINT ClearMenuStrip		;Menü löschen
	move.l iwindowpointer,a0
	CALLINT CloseWindow		;Window schliessen
	move.l plotpointer,a0
	CALLINT CloseScreen		;Screen schliessen
	bra wait

menuptab dc.l eintrag1100,eintrag1101,eintrag1102,eintrag1103

* Zeichensätze von Disk ins System holen

opdifo	lea zeichensatz,a2		;Start der Struktur
	lea ruby8,a3			;Start Pointer
	move.w #13,d2			;13 Zeichensätze
zloop	move.l a2,a0
	CALLDISKFONT OpenDiskFont	;Zeichensatz holen
	move.l d0,(a3)+			;Zeiger sichern
	adda.l #8,a2
	subq.w #1,d2
	bne zloop			;Alle Sätze ?
	rts
	
* Zeichensätze vom ROM ins System holen

opfo	lea zeichensatz+112,a0	;s.o.
	lea topaz9,a3
	CALLGRAF OpenFont
	move.l d0,(a3)+
	lea zeichensatz+104,a0
	CALLGRAF OpenFont
	move.l d0,(a3)
	rts

* Zeichensätze verfügbar machen

adfo	move.w #15,d2			;15 Zeichensätze
	lea ruby8,a3		;Start Zeiger
adloop	move.l (a3),a1
	CALLGRAF AddFont		;ausführen
	move.l (a3)+,a1			;Zeiger erhöhen
	subq.w #1,d2
	bne adloop
	rts
	
* Zeichensätze löschen

clfo	move.w #13,d2			;15 Zeichensätze
	lea ruby8,a3		;Start Zeiger
clloop	move.l (a3),a1
	CALLGRAF CloseFont		;ausführen
	move.l (a3)+,a1			;Zeiger erhöhen
	subq.w #1,d2
	bne clloop
	rts


* Window öffnen und Message auswerten

mainwindow	CALLINT OpenWindow
		move.l d0,iwindowpointer	
         
iloop   	move.l iwindowpointer,a0
		move.l 86(a0),a0
		CALLEXEC GetMsg
		tst.l d0		;keine Message
		beq iloop
		move.l d0,a2
		move.l $14(a2),d2	;Wert holen:
		cmpi.l #$200,d2		;Close-Gadget
		beq close
		move.l d0,a2
		move.l $1C(a2),a2	;Adresse User-Gadget
		move.w $26(a2),d2	;Gadget-ID aus Gadget
		cmpi.w #111,d2		;Struktur holen
		beq close
		cmpi.w #112,d2
		bne iloop
close		rts


* Umwandlung String - Fliesskomma

stringfloat     clr.l float
		clr.l d0
		clr.l d3
		move.l (a1),d5		;Start Stringstruktur   
		addi.l #16,d5
		move.l d5,a5
		clr.l d5
		move.w (a5),d5          ;Länge Text holen
		move.b (a2),d0          ;erstes Zeichen
		clr.l d0		;Position
		move.l a2,a0
strloop2	move.b (a0)+,d3 	;Zeichen holen
		cmpi.b #".",d3
		beq found		;Punkt gefunden
		addq #1,d0
		cmp.w d0,d5		;alles durchsucht
		beq nopoint
		bra strloop2

found		subq #1,d0
		move.l d0,d4 		;höchster Exponent
		addq #1,d0
		move.l a2,a0		;Punkt aus String
strloop3	move.l a0,d1
		add.l d0,d1		;eleminieren
		move.l d1,a6
		move.b 1(a6),(a6)
		addq #1,d0
		cmp.w d0,d5
		bne strloop3
		subq #1,d5
		bra weiter1

nopoint		move.l d5,d4
		subq #1,d4  		;höchster Exponent
		
weiter1 	clr.l d6		;Position
		move.l a2,a5

strloop4	move.l d4,d0		;Exponenten holen
		CALLFFP SPFlt		;in Fliesskomma
		move.l d0,d1
		move.l stellentab,d0	;10 in Fliesskomma
		CALLMATHTRANS SPPow	;10 hoch x rechnen
		move.l a5,d1            ;Faktor holen (ASCII)
		add.l d6,d1
		move.l d1,a6
		clr.l d1
		move.b (a6),d1
		subi.b #"0",d1		;minus 48 ("0") =
		move.l d0,d7		;Zahl in Fliesskomma
		move.l d1,d0		;mit 10 hoch x
		CALLFFP SPFlt
		move.l d7,d1
		CALLFFP SPMul		;Multiplizieren
		move.l float,d1
		CALLFFP SPAdd		;zu bisheriger Summe
		move.l d0,float		;addieren
		subq.l #1,d4		;Exponenten verringern
		addq #1,d6 		;Position erhöhen
		cmp.l d6,d5		;fertig ?
		bne strloop4
		move.l float,d0		;Negativ-Flag einblenden
		move.l d0,(a3)
		move.l (a1)+,d0		;und Wert in Tabelle
		move.l a2,d0
		addi.l #16,d0		;schreiben
		move.l d0,a2
		move.l (a3)+,d0
		rts

float		dc.l 0

stellentab   	dc.b $A0,00,00,$44	;10 in Fliesskomma

* Tabelle mit Stringanfängen

strinfotab	dc.l strinfo1,strinfo2,strinfo3,strinfo4,strinfo5
		dc.l strinfo6,strinfo7,strinfo8,strinfo9,strinfo10


* Wandelt Eingaben in Fliesskomma

wandel		lea strinfotab,a1	 ;Tabelle mit Anfängen
		move.b #10,d2		 ;Anzahl Gadgets
		lea puffer,a2
strloop5	bsr stringfloat
		subq #1,d2
		bne strloop5
		rts



* ENDE MENÜPUNKTE

exit	bra wait11		 ;Von vorne
		

* E N D E   P R O G R A M M

ende 	move.l mempoint,a0		;Speicherplatz
	move.l #640,d0			;für FLOOD wieder
	move.l #256,d1			;freigeben
	CALLGRAF FreeRaster

	bsr clfo			;Fonts entfernen

	move.l windowpointer,a0		;Menü löschen
	CALLINT ClearMenuStrip

	move.l windowpointer,a0		;Window schliessen
	CALLINT CloseWindow	
				
	move.l screenpointer,a0		;Screen schliessen
	CALLINT CloseScreen

fini7	move.l _DiskfontBase,a1		
	CALLEXEC CloseLibrary
fini6	move.l _DOSBase,a1		;Alle Librarys schliessen
	CALLEXEC CloseLibrary
fini5	move.l _GfxBase,a1
	CALLEXEC CloseLibrary
fini4	move.l _MathTransBase,a1
	CALLEXEC CloseLibrary
fini3	move.l _IntuitionBase,a1
	CALLEXEC CloseLibrary
fini2 	move.l _MathBase,a1
	CALLEXEC CloseLibrary
fini1	rts

	cnop 0,2

		
_DOSBase  dc.l 0			;Basis-Pointer Librarys
_MathBase dc.l 0
_IntuitionBase  dc.l 0
_MathTransBase  dc.l 0
_GfxBase dc.l 0
_DiskfontBase	dc.l 0			
		
dosname  dc.b "dos.library",0		;Namen Librarys
	cnop 0,2
grafname  dc.b "graphics.library",0
	cnop 0,2
ffpname  dc.b "mathffp.library",0
	cnop 0,2
intname  dc.b "intuition.library",0
	cnop 0,2
mathtransname dc.b "mathtrans.library",0
	cnop 0,2
diskfontname	dc.b "diskfont.library",0
	cnop 0,2

* Strukturen
* a) SCREENS

screen_defs	SCREEN 320,200,2,screentitel
plot_defs	SCREEN 640,400,$8000,plottitel

screentitel  dc.b "Chart-Darstellung",0
	cnop 0,4

plottitel   dc.b "Charts plotten",0
	cnop 0,4

screenpointer  dc.l 0
plotpointer	dc.l 0
  
* b) WINDOWS

einwindow  WINDOW 0,57,320,143,$60,igadget1,ewindowname,point1,$1006             
diskwindow   WINDOW 0,100,320,80,$60,igadget20,dwindowname,point2,$1006      
startwindow   WINDOW 20,20,280,180,$360,igadget30,swindowname,point3,$1006	     
plotwindow   WINDOW 0,0,640,256,$308,igadget40,pwindowname,point4,$100E

ewindowname  dc.b   "Dateneingabe",0
	cnop 0,2
dwindowname  dc.b   "Daten laden/speichern",0
	cnop 0,2
swindowname  dc.b   "Chart-Darstellung",0
	cnop 0,2
pwindowname  dc.b "Grafische Chartdarstellung",0
	cnop 0,4


iwindowpointer  dc.l 0
windowpointer dc.l 0

		even	

* c) TEXTE


error  		TEXTOUT1 30,7,errortop
error1		TEXTOUT1 8,4,errorleft
error2		TEXTOUT1 8,4,errorright

errortop	dc.b "Ein- Ausgabefehler",0
		even
errorleft	dc.b "Nochmal",0
		even
errorright	dc.b "Abbruch",0
		even

*Requester aufrufen

requester	move.l iwindowpointer,a0
		lea error,a1
		lea error1,a2
		lea error2,a3
		clr.l d0
		clr.l d1
		move.l #220,d2
		move.l #55,d3
		CALLINT AutoRequest
		rts


print		PRINTOUT text1,54,20
		PRINTOUT text2,26,40
		PRINTOUT text3,72,60
		
		rts


 
text1		TEXTOUT text11
text2		TEXTOUT text22
text3		TEXTOUT text33
 
		even
text11          dc.b "Chart-Darstellung V1.0",0
		even
text22          dc.b "(w) 1988 by F.Riemenschneider",0
		even
text33		dc.b "Bitte wählen Sie:",0
		even

* Ausgabe des Wahltextes ins Plotfenster

plprint		lea textplot,a1
setx		move.l #100,d0
sety		move.l #100,d1
		move.l iwindowpointer,a0
		move.l 50(a0),a0
		CALLINT PrintIText
		rts

textplot	TEXTOUT	 puffer+16*11


* d) MENÜS

		
menu		MENUE  menu1,10,0,titel0,eintrag000
menu1		MENUE  0,80,0,titel1,eintrag100

eintrag000	MENUPUNKT 0,0,0,80,$56,text000,"E",0

eintrag100      MENUPUNKT eintrag110,0,0,100,$56,text100,"I",0
eintrag110	MENUPUNKT eintrag120,0,15,100,$56,text110,"L",0
eintrag120	MENUPUNKT 0,0,30,100,$56,text120,"S",0

		even
titel0          dc.b "Option",0
		even
titel1          dc.b "Daten",0
		even

text000         TEXTOUT1 0,0,textt000
text100		TEXTOUT1 0,0,textt100
text110		TEXTOUT1 0,0,textt110
text120		TEXTOUT1 0,0,textt120

		even
textt000	dc.b "Ende",0
		even
textt100	dc.b "Eingabe",0
		even
textt110	dc.b "Laden",0
		even
textt120	dc.b "Speichern",0
		even


 
plotmenu	MENUE  plotmenu1,10,0,titel10,eintrag1000
plotmenu1	MENUE  0,100,0,titel11,eintrag1100

eintrag1000	MENUPUNKT eintrag1001,0,0,100,$52,text1000,0,submenu1
eintrag1001	MENUPUNKT eintrag1002,0,15,100,$52,text1001,0,submenu2
eintrag1002     MENUPUNKT eintrag1003,0,30,100,$52,text1002,0,submenu3
eintrag1003	MENUPUNKT eintrag1004,0,45,100,$52,text1003,0,submenu4
eintrag1004	MENUPUNKT eintrag1005,0,60,100,$52,text1004,0,submenu5
eintrag1005	MENUPUNKT eintrag1006,0,75,100,$52,text1005,0,submenu6
eintrag1006     MENUPUNKT 0,0,90,100,$52,text1006,0,submenu7

submenu1	MENUPUNKT submenu11,100,0,20,$52,text1010,0,0
submenu11	MENUPUNKT 0,100,15,20,$52,text1011,0,0
submenu2	MENUPUNKT submenu21,100,0,20,$52,text1020,0,0
submenu21	MENUPUNKT submenu22,100,15,20,$52,text1021,0,0
submenu22	MENUPUNKT 0,100,30,20,$52,text1022,0,0
submenu3	MENUPUNKT submenu31,100,0,20,$52,text1030,0,0
submenu31	MENUPUNKT 0,100,15,20,$52,text1031,0,0
submenu4	MENUPUNKT submenu41,100,0,20,$52,text1040,0,0
submenu41	MENUPUNKT 0,100,15,20,$52,text1041,0,0
submenu5	MENUPUNKT submenu51,100,0,20,$52,text1050,0,0
submenu51	MENUPUNKT 0,100,15,20,$52,text1051,0,0
submenu6	MENUPUNKT submenu61,100,0,20,$52,text1060,0,0
submenu61	MENUPUNKT 0,100,15,20,$52,text1061,0,0
submenu7	MENUPUNKT submenu71,100,0,20,$52,text1070,0,0
submenu71	MENUPUNKT 0,100,15,20,$52,text1071,0,0


eintrag1100     MENUPUNKT eintrag1101,5,0,180,$5F,text1100,"U",0
eintrag1101	MENUPUNKT eintrag1102,5,15,180,$5F,text1101,"F",0
eintrag1102	MENUPUNKT eintrag1103,5,30,180,$5F,text1102,"S",0
eintrag1103	MENUPUNKT 0,5,45,180,$5F,text1103,"B",0


		even
titel10         dc.b "Z-Satz",0
		even
titel11         dc.b "Style",0
		even

text1000        TEXTOUT1 0,0,textt1000
text1001        TEXTOUT1 0,0,textt1001
text1002        TEXTOUT1 0,0,textt1002
text1003        TEXTOUT1 0,0,textt1003
text1004        TEXTOUT1 0,0,textt1004
text1005        TEXTOUT1 0,0,textt1005
text1006        TEXTOUT1 0,0,textt1006


text1100	TEXTOUT1 25,0,textt1100
text1101	TEXTOUT1 25,0,textt1101
text1102	TEXTOUT1 25,0,textt1102
text1103	TEXTOUT1 25,0,textt1103


text1010        TEXTOUT1 0,0,textt1010
text1011        TEXTOUT1 0,0,textt1011
text1020        TEXTOUT1 0,0,textt1020
text1021        TEXTOUT1 0,0,textt1021
text1022        TEXTOUT1 0,0,textt1022
text1030        TEXTOUT1 0,0,textt1030
text1031        TEXTOUT1 0,0,textt1031
text1040        TEXTOUT1 0,0,textt1040
text1041        TEXTOUT1 0,0,textt1041
text1050        TEXTOUT1 0,0,textt1050
text1051        TEXTOUT1 0,0,textt1051
text1060        TEXTOUT1 0,0,textt1060
text1061        TEXTOUT1 0,0,textt1061
text1070        TEXTOUT1 0,0,textt1070
text1071        TEXTOUT1 0,0,textt1071

		even
textt1000	dc.b "Topaz",0
		even
textt1001	dc.b "Ruby",0
		even
textt1002	dc.b "Sapphire",0
		even
textt1003	dc.b "Opal",0
		even
textt1004	dc.b "Diamond",0
		even
textt1005	dc.b "Garnet",0
		even
textt1006	dc.b "Esmerald",0
		even


textt1100	dc.b "Unterstrichen",0
		even
textt1101	dc.b "Fettschrift",0
		even
textt1102	dc.b "Schrägschrift",0
		even
textt1103	dc.b "Breitschrift",0
		even


		even
textt1010	dc.b " 8",0
		even
textt1011	dc.b " 9",0
		even
textt1020	dc.b " 8",0
		even
textt1021	dc.b "12",0
		even
textt1022	dc.b "15",0
		even
textt1030	dc.b "14",0
		even
textt1031	dc.b "19",0
		even
textt1040	dc.b " 9",0
		even
textt1041	dc.b "12",0
		even
textt1050	dc.b "12",0
		even
textt1051	dc.b "20",0
		even
textt1060       dc.b " 9",0
		even
textt1061	dc.b "16",0
		even
textt1070	dc.b "17",0
		even
textt1071	dc.b "20",0
		even


* e) GADGETS

boarder 
	 dc.w 0,0  	;x,y-Offset
	 dc.b 3,1	;Farben
	 dc.b   0	;Farbmodus
	 dc.b   5	;Zahl Koordinatenpaare
	 dc.l  koord1	;Koordinatenpointer
	 dc.l   0	;Nächster Boarder

koord1          

	dc.w 	 -2,-2
	dc.w     122,-2
	dc.w     122,9
	dc.w     -2,9
	dc.w     -2,-2


string22        dc.b  "Weitere Eingabe",0
	even
string33        dc.b  "Eingabe beenden",0
	even
string11	dc.b  "---------------------------------------",0
	even
string44a	dc.b  "Tortengrafik",0
	even
string44b	dc.b  "Säulengrafik",0
	even
string44c	dc.b  "Startsatz:",0
	even
string44d	dc.b  "Zielsatz:",0
	even
string66	dc.b  "Ausführen",0
	even
string77	dc.b  "Abbrechen",0
	even
string88	dc.b  "Filename:",0
	even
string99	dc.b  "Eingabetext:",0
	even
string101	dc.b "00",0
	even
string111	dc.b "01",0
	even
string121	dc.b "02",0
	even
string131	dc.b "03",0
	even
string141	dc.b "04",0
	even
string151	dc.b "05",0
	even
string161	dc.b "06",0
	even
string171	dc.b "07",0
	even
string181	dc.b "08",0
	even
string191	dc.b "09",0
	even


string1         STRING -27,-11,string11,string2
string2         STRING 0,0,string22,0
string3         STRING 0,0,string33,0
string4a	STRING 12,0,string44a,0
string4b	STRING 12,0,string44b,0
string4c	STRING 0,-15,string44c,0
string4d	STRING 0,-15,string44d,0
string6		STRING 23,0,string66,0
string7		STRING 23,0,string77,0
string8		STRING -90,0,string88,0

string00	STRING -20,0,string101,0
string01	STRING -20,0,string111,0
string02	STRING -20,0,string121,0
string03	STRING -20,0,string131,0
string04	STRING -20,0,string141,0
string05	STRING -20,0,string151,0
string06	STRING -20,0,string161,0
string07	STRING -20,0,string171,0
string08	STRING -20,0,string181,0
string09	STRING -20,0,string191,0

string9		STRING -105,0,string99,0

* Eingabe-Gadgets 

igadget1     	GADGET igadget2,30,20,1,4,boarder,string00,strinfo1,1
igadget2        GADGET igadget3,30,40,1,4,boarder,string01,strinfo2,2
igadget3        GADGET igadget4,30,60,1,4,boarder,string02,strinfo3,3
igadget4     	GADGET igadget5,30,80,1,4,boarder,string03,strinfo4,4
igadget5        GADGET igadget6,30,100,1,4,boarder,string04,strinfo5,5
igadget6        GADGET igadget7,187,20,1,4,boarder,string05,strinfo6,6
igadget7        GADGET igadget8,187,40,1,4,boarder,string06,strinfo7,7
igadget8        GADGET igadget9,187,60,1,4,boarder,string07,strinfo8,8
igadget9        GADGET igadget10,187,80,1,4,boarder,string08,strinfo9,7
igadget10       GADGET igadget11,187,100,1,4,boarder,string09,strinfo10,9
igadget11	GADGET igadget12,30,125,1,1,boarder,string1,0,111
igadget12	GADGET 0,187,125,1,1,boarder,string3,0,112

strinfo1         STRINF puffer  
strinfo2         STRINF puffer+16*1
strinfo3         STRINF puffer+16*2
strinfo4         STRINF puffer+16*3
strinfo5         STRINF puffer+16*4
strinfo6         STRINF puffer+16*5
strinfo7         STRINF puffer+16*6
strinfo8         STRINF puffer+16*7
strinfo9         STRINF puffer+16*8
strinfo10        STRINF puffer+16*9
strinfo11	 STRINF puffer+16*10
strinfo12	 STRINF puffer+16*11
strinfo13	 STRINF puffer+16*12
strinfo14	 STRINF puffer+16*13

* Startgadets

igadget30     	GADGET igadget31,70,90,1,1,0,string4a,0,111
igadget31       GADGET igadget32,70,115,1,1,0,string4b,0,112
igadget32	GADGET igadget33,12,155,$801,4,boarder,string4c,strinfo13,1
igadget33	GADGET 0,148,155,$801,4,boarder,string4d,strinfo14,1

* Diskgadets

igadget20     	GADGET igadget21,145,20,1,4,boarder,string8,strinfo11,111
igadget21	GADGET igadget22,20,48,1,1,boarder,string6,0,111
igadget22       GADGET 0,175,48,1,1,boarder,string7,0,112

* Plot-Gadget

igadget40     	GADGET 0,270,240,1,4,boarder,string9,strinfo12,1

puffer		 ZAHLEN
		 dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
		 dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
		 dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
		 dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
		 cnop 0,4



wertestr	 ZAHLEN
		 ZAHLEN
		 ZAHLEN
		 ZAHLEN
		 ZAHLEN
		 ZAHLEN
		 ZAHLEN
		 ZAHLEN
		 ZAHLEN
		 ZAHLEN
		

werte		ds.l  100

* Zeichensatzpointer

ruby8		dc.l 0
ruby12		dc.l 0
ruby15		dc.l 0
sapphire14	dc.l 0
sapphire19	dc.l 0
opal9		dc.l 0
opal12		dc.l 0
diamond12	dc.l 0
diamond20	dc.l 0
garnet9		dc.l 0
garnet16	dc.l 0
emerald17	dc.l 0
emerald20	dc.l 0
topaz9		dc.l 0
topaz8		dc.l 0
leer		dc.l 0

* Zeichensatzstrukturen

zeichensatz	ZEICHEN ruby.font,8,0,$62
		ZEICHEN ruby.font,12,0,$62
		ZEICHEN ruby.font,15,0,$62
		ZEICHEN sapphire.font,14,0,$62
		ZEICHEN sapphire.font,19,0,$62
		ZEICHEN opal.font,9,0,$62
		ZEICHEN opal.font,12,0,$62
		ZEICHEN diamond.font,12,0,$62
		ZEICHEN diamond.font,20,0,$62
		ZEICHEN garnet.font,9,0,$62
		ZEICHEN garnet.font,16,0,$62
		ZEICHEN emerald.font,17,0,$62
		ZEICHEN emerald.font,20,0,$62
		ZEICHEN topaz.font,8,0,$41
		ZEICHEN topaz.font,9,0,$49
zeichenleer	ZEICHEN	0,0,0,0	

ruby.font	dc.b "ruby.font",0
		even
sapphire.font	dc.b "sapphire.font",0
		even
opal.font	dc.b "opal.font",0
		even
diamond.font	dc.b "diamond.font",0
		even
garnet.font	dc.b "garnet.font",0
		even
emerald.font	dc.b "emerald.font",0
		even
topaz.font	dc.b "topaz.font",0
		even

tmpras		ds.l 10
areainf		ds.l 10
