#define MAXCHARS 500

/* Prototypes for functions defined in ram:abl.c */
char * __asm Ableiten(register __a0 char *string);
VOID __asm Umklammern(register __a0 char *string);
VOID Zusammensetzen(char *string,LONG Anzahl,char *ABL,struct Block *Start);
LONG __asm Mit_X(register __a0 struct Block *block);
VOID __asm Umklammern_2(register __a0 char *string);
LONG __asm Vereinfachung(register __a0 char *,
                         register __a1 char *);
char * __asm Ableitung(register __a0 struct Block *Start);

/* Prototypes for functions defined in ram:about.c */
void About(void);

/* Prototypes for functions defined in ram:berechnungsroutinen.c */
void FehlerAbfrage(VOID);
void DamageOn(void);
void DamageOff(void);
VOID __asm ZeichneFunktion(register __d0 USHORT nr,
                           register __d1 int Ableitung);
void Plotte(unsigned short nr,
            DOUBLE xl,
            DOUBLE xr,
            DOUBLE yl,
            DOUBLE yr,
            int st,
            int Ableitung);
DOUBLE FunktionsWert(unsigned short nr,
                     DOUBLE i,
                     int Ableitung);
void Verbinden(DOUBLE xr,
               DOUBLE yr);
DOUBLE Max(DOUBLE a,
           DOUBLE b);
DOUBLE Min(DOUBLE a,
           DOUBLE b);
void chkabort(void);
VOID MemCleanup(VOID);

/* Prototypes for functions defined in ram:diskussion.c */
void discuss(char *string,DOUBLE l,DOUBLE r,int modus,unsigned short sub);
DOUBLE Nullstelle(DOUBLE l,DOUBLE r);
DOUBLE Nullstelle2(DOUBLE l,DOUBLE r);
 VOID TextAusgabe(DOUBLE x,DOUBLE y,char *string);
 VOID TextAusgabe2(char *string);
void __asm Laenge(register __a0 char *string,register __d0 int laenge);
VOID __asm Full_Discussion(register __d0 USHORT sub);

/* Prototypes for functions defined in ram:drucken.c */
LONG drucken(VOID);

/* Prototypes for functions defined in ram:maus.c */
void AusSchnitt(DOUBLE *x1,
                DOUBLE *y1,
                DOUBLE *x2,
                DOUBLE *y2);
void Grenzen(char *xn,
             char *yn,
             char *xp,
             char *yp);
void __asm Funktionseingabe(register __a0 UBYTE *string);
void Genauigkeit(void);
void TextFuerIntervall(void);
void TextFuerKonstanten(void);

/* Prototypes for functions defined in ram:plot.c */
void Pset(DOUBLE x1,
          DOUBLE y1);
void DrawTo(DOUBLE x1,
            DOUBLE y1);
void zeichne(void);
void MenuWahl(void);
void main(void);
void _main(char *);
int oeffne(void);
void ende(void);
void Line(DOUBLE x1,
          DOUBLE y1,
          DOUBLE x2,
          DOUBLE y2);
void Skalierung(DOUBLE x,
                DOUBLE y,
                DOUBLE Wert);
void UmwandlungInIntervall(void);
void UmwandlungInKonstanten(void);
void UpdateMenuText(void);
void SetRXOffset(void);
void TastaturAbfrage(void);
void Loeschen(void);
void testtest(void);
VOID SetColor(VOID);
VOID SetNewColor(VOID);

VOID __asm ReMakeMenu(register __a0 struct Window *Window);
VOID MakeMenu(VOID);

struct IntuiText *GetNewText(char *string);

   #define Abstand 			15 
   #define RUNDEN  			.5001
   #define RUNDEN2 			.5001
   #define deltah  			.00000005 
   #define deltahh 			.0005
   #define KLEIN 			0
   #define GROSS 			1
   #define MAXLONG 			2147483647.0
   #define MAXPIXELY 			300
   #define GRENZE1 			0.0002
   #define GRENZE2 			0.0000002
   #define NONULL  			HUGE
   #define WHICH_FLAG			HUGE
   #define W_FLAG_2			1.79769e+307
   #define FARBE0			0
   #define FARBE1			1
   #define FARBE2			2
   #define FARBE3			3
   #define YSCREEN			256
   #define PLOT_Y			223
   
   #define ABOUT_FREEWARE		"Dies ist FreeWare"
   #define PLOT_CONT			"Weiter"
   #define PLOT_QUEST			"Wirklich Ende ?"
   #define PLOT_END			"ENDE"
   #define DISK_NULLST			"Nullstellen   :"
   #define DISK_EXTREMST		"Extremstellen :"
   #define DISK_WENDEST			"Wendestellen  :"
   #define DISK_FOR			"Diskussion für das Intervall ["
   #define MAUS_ENTERFUNC		"Geben Sie die Funktion ein"
   #define BE_ERROR			"In Ihrer Formel ist ein Fehler !"
   #define BE_JA			"Ja"
   #define BE_NEIN			"Nein"
   #define BE_QUEST			"Soll ich unterbrechen ?"

   extern APTR                 		Konstantenstart;
   extern BOOL 				KoordinatenKreuz_gezeichnet;
   extern char 				AusgabeString[125];
   extern char 				Formeleingabe[27];
   extern char 				Formel[MAXCHARS];
   extern char 				Hilfe[10],Ergebnis[MAXCHARS];
   extern char 				SubMenuTitle[10][16];
   extern char  			String1[4];
   extern DOUBLE 			BestF,BestX;
   extern double 			xmn,xmp,ymn,ymp,xm,ym,x0,y0;
   extern int 				Aufrufe;
   extern char 				flagg;
   extern int                  		GE;
   extern int                  		Groesse;
   extern LONG 				MatheFehler;
   extern LONG				xx,yy;
   extern LONG 				ypos_Diskussion;
   extern LONG				xpos_Diskussion;
   extern SHORT 			Genauigkeiten[3];
   extern SHORT 			XOffset,YOffset;
   extern struct BitMap         	bitmap;
   extern struct Block         		*StartBlock;
   extern struct GfxBase       		*GfxBase;
   extern struct info           	msgInfo;
   extern struct IntuitionBase 		*IntuitionBase;
   extern struct Konstanten 		kon;
   extern struct Layer 			*layer;
   extern struct LayersBase    		*LayersBase;
   extern struct Layer_Info     	*layerinfo;
   extern struct Library 		*MathIeeeDoubBasBase;
   extern struct ToolBase      		*ToolBase;
   extern struct Library        	*MathIeeeDoubTransBase;
   extern struct NewScreen     		Schirm;
   extern struct NewWindow     		Fenster,Fenster2,Fenster3;
   extern struct RastPort 		*RastPort2;
   extern struct RastPort      		*RastPort;
   extern struct Rectangle 		rect;
   extern struct Region 		*rgn,*OFlaeche;
   extern struct Screen        		*Screen;
   extern struct View           	*View;
   extern struct ViewPort      		*viep;
   extern struct Window 		*Window2;
   extern struct Window        		*Window;
   extern UBYTE				MinXText[8],MaxXText[8],MinYText[8];
   extern UBYTE				MaxYText[8];
   extern UBYTE				Abgeleitet[2][MAXCHARS];
   extern UBYTE				Formeln[11][MAXCHARS];
   extern UBYTE				KonAString[20],KonBString[20];
   extern UBYTE				KonCString[20],KonDString[20];
   extern UBYTE				undo1[20],undoFormel[MAXCHARS];
   extern UBYTE				xmpstring[20],xmnstring[20];
   extern UBYTE				ympstring[20],ymnstring[20];
   extern UWORD				Farb1[4],Farb2[4];
   extern struct Menu 			*Menu;
   extern struct MenuItem               *Item[7]; /* Zum Sichern der Zeiger */

/* Veränderungen:

22.10.89 Genauigkeit : Nur noch 3 Gadgets, Berechnungsroutinen angepaßt.
04.11.89 Diskussion angefügt, gibt nur auf dem Schirm aus.
18.11.89 Diskussion findet jetzt auch Nullstellen, die nur berühren (x^2) 
19.12.89 Plotter auf Benutzung der Calc-Funktionen umgestellt
19.12.89 Diskussion : Fehler, wenn Funktion immer NULL ist behoben
23.12.89 Diskussion : Fehler, wenn Polstellen sind behoben
11.02.90 Plotter.h mit Compiler autom. erstellt.
21.02.90 Set(New)Color in C geschrieben und übersetzt. Alles mit -O comp 
         -> 25956 Bytes. Alle math. Funktionen laufen über New.....
         Nullstellen werden jetzt recht genau bestimmt.
25.02.90 Abl.c ZW1 eingespart. Trotzdem leicht Stack-Overflow bei tan und sqr.
27.02.90 Fehler bei oeffne, der bei Auftritt eines Fehlers zum Absturz führt, beseitigt
15.07.90 Fehler in Ableitung beseitig (vertauschte f(x) und g(x) bei x^x
         Ableitung mit AllocMem, SimpleMenu aus Tool.Library
03.08.90 Stringkonstanten nach Plotter.h , strcmp-Abfragen in Ableitung.c 
         auf SHORT * umgestellt.
*/


#undef Add
#undef Sub
#undef Div
#undef Mul
#undef Fix
#undef Flt
#undef Neg

#define Add(a,b)	(a+b)
#define Sub(a,b)	(a-b)
#define Mul(a,b)	(a*b)
#define Div(a,b)	(a/b)
#define Fix(a)		((LONG)a)
#define Flt(a)		((DOUBLE)a)
#define Neg(a)		(-a)

