#include #include #include #include #include #include #include #include #include #include #include #include #define E 2.718281828 #define PPI 3.14159265358979323846 #define Mul(a,b) NewMul(a,b) #define Add(a,b) NewAdd(a,b) #define Sub(a,b) NewSub(a,b) #define Div(a,b) NewDiv(a,b) #define Flt(a) NewFlt(a) #define Fix(a) NewFix(a) #define Cmp(a,b) NewCmp(a,b) #define Abs(a) NewAbs(a) #define Neg(a) NewNeg(a) #define Pow(a,b) NewPow(a,b) #define Tst(a) NewTst(a) #define Log10(a) NewLog10(a) #define Floor(a) NewFloor(a) #define ACos(a) NewAcos(a) #define ASin(a) NewAsin(a) #define ATan(a) NewAtan(a) #define Sin(a) NewSin(a) #define Cos(a) NewCos(a) #define Tan(a) NewTan(a) #define Log(a) NewLog(a) #define Sqr(a) NewSqr(a) double NewSub(double a, double b); double NewSqr(double a); double NewSin(double a); double NewCos(double a); double NewTan(double a); double NewPow(double a, double b); double NewNeg(double a); double NewMul(double a, double b); double NewLog10(double a); double NewLog(double a); double NewFlt(LONG a); LONG NewFix(DOUBLE a); double NewFloor(double a); double NewDiv(double a, double b); double NewCos(double a); LONG NewCmp(double a, double b); double NewCeil(double a); double NewAtan(double a); double NewAsin(double a); double NewAdd(double a, double b); double NewAcos(double a); double NewAbs(double a); LONG NewTst(DOUBLE a); struct info { USHORT code; struct IntuiMessage *Nachricht; ULONG NachrichtenArt; APTR IAddress; SHORT MouseX,MouseY; }; struct Block { LONG Links,Rechts; LONG RechenArt,Valid; LONG Konstante; LONG Fehler; char *String; DOUBLE Wert; struct Block *Left,*Right; }; #define MAXCHARS 500 struct HilfsStruktur { char Formel[MAXCHARS]; char Hilfe[MAXCHARS]; DOUBLE Variable,Konstante1,Konstante2,Konstante3,Konstante4; LONG Fehler; }; struct Konstanten { DOUBLE k1,k2,k3,k4; }; /* Fehlercodes */ #define DIVBYZERO 1 /* Es wurde durch 0 geteilt */ #define LOGNEG 2 /* Es wurde von Zahl <= 0 der Log gebildet */ #define SQRTNEG 4 /* Es wurde von Zahl <0 die Wurzel gebildet */ #define ATRIG 8 /* Es wurde von Zahl >1 oder <-1 asin/acos gebildet */ #define UNPAKLAM 16 /* Unpaarige Klammern */ #define TEST 32 #define NOFUNC 64 /* Keine Funktion eingegeben */ #define NO_KONST 128 /* Keine solche Konstante */ #define NO_MEM 256 /* Kein Speicher für weiteren Block */ #define POWERROR 512 /* Negative Zahl hoch Bruch wurde versucht */ #define NO_FUNC 1024 /* Keine Funktion gefunden */ /* Rechenarten */ #define ADDI 1 #define SUBT 2 #define MULT 3 #define DIVI 4 #define POWE 5 #define SINU 6 #define COSI 7 #define TANG 8 #define ASIN 9 #define ACOS 10 #define ATAN 11 #define LOG1 12 #define LNAT 13 #define ABSO 14 #define SIGU 15 #define SQRT 16 #define FLOO 17 #define X 18 #define MKON 19 /* Math. Konstante */ #define UKON 20 /* User Konstante */ #define ZIFF 21 /* Ziffern */ #define KLAM 22 VOID __asm Print(register __a1 struct RastPort *RP, register __a0 char *text, register __d0 LONG col, register __d1 LONG xpos, register __d2 LONG ypos); ULONG __asm EventAbfrage(register __a0 struct Window *Window, register __a1 struct info *MsgInfo); LONG __asm request(register __d0 char *JaPointer, register __d1 char *NeinPointer, register __d2 char *BodyPointer); LONG __asm ev(register __d0 LONG l,register __d1 LONG r,register __d2 struct Block *block); VOID __asm Free_Block(register __a0 struct Block *First); VOID __asm Free_Konst(register __a0 APTR Zeiger); APTR Init_Konst(VOID); LONG __asm Set_Konst_P(register __a0 APTR Zeiger,register __d0 LONG Nummer,register __d1 DOUBLE *Wert_P); LONG Set_Konst(APTR Zeiger,LONG Nummer,DOUBLE Wert); struct Block * __asm Init_Mem(register __a0 char *string); LONG __asm Init_Block(register __a0 struct Block *Zeiger); LONG __asm check(register __d0 LONG z1,register __d1 LONG z2, register __d2 LONG l,register __d3 LONG r, register __a0 char *string); LONG __asm checkback(register __d0 LONG z1,register __d1 LONG z2, register __d2 LONG l,register __d3 LONG r, register __a0 char *string); VOID __asm copy(register __d0 LONG i,register __d1 LONG Anzahl, register __d2 char *Ziel,register __d3 char *Source); double sgn(DOUBLE x); LONG BereichsKontr(DOUBLE b); LONG __asm PreCalc(register __d0 struct Block *Zeiger,register __d1 APTR Konst); DOUBLE __asm GetKonst(register __a0 APTR Konst,register __d1 LONG Nummer); DOUBLE Calc(struct Block *Zeiger,DOUBLE x); LONG __asm AnzahlKlammern(register __a0 char *string); VOID __asm left(register __a0 char *Ziel, register __a1 char *string, register __d0 LONG Anzahl); VOID __asm right(register __a0 char *Ziel, register __a1 char *string, register __d0 LONG Anzahl); VOID __asm mid(register __a0 char *Ziel, register __a1 char *string, register __d0 LONG Anfang, register __d1 LONG Anzahl); DOUBLE stof(char *string); VOID ftos(char *Ziel, DOUBLE Zahl, LONG Nachkomma); VOID __asm UmwFtoS(register __a0 char *Ziel, register __a1 DOUBLE *Zahl1, register __d0 LONG Nachkomma); DOUBLE Vorkomma(DOUBLE Zahl); VOID __asm testfunktion(register __a0 LONG *test); LONG search(char *string); LONG __asm NewRequest(register __a0 struct Window *AktWindow, register __d0 char *JaPointer, register __d1 char *NeinPointer, register __d2 char *BodyPointer); VOID __asm Box(register __a1 struct RastPort *RastPort, /* Der RastPort */ register __d0 LONG xs, /* Start: X */ register __d1 LONG ys, /* Start: Y */ register __d2 LONG xe, /* Ende : X */ register __d3 LONG ye); /* Ende : Y */ VOID __asm Center(register __a1 struct Window *Window, /* Das Fenster */ register __a0 char *string, /* Der Text */ register __d0 LONG Color, /* Die Farbe */ register __d1 LONG y_Pos); /* Die Y-Pos. */ VOID __asm Gadget_On(register __a0 struct Gadget *Gadget, /* Das Gadget */ register __d1 struct Window *Window); /* Das Fenster */ VOID __asm Gadget_Off(register __a0 struct Gadget *Gadget, /* Das Gadget */ register __a1 struct Window *Window); /* Das Fenster */ LONG __asm GetPropPosH(register __a0 struct Gadget *Gadget,/* Das Gadget */ register __d0 LONG MaxPos); /* Max. Pos. */ LONG __asm GetPropPosV(register __a0 struct Gadget *Gadget,/* Das Gadget */ register __d0 LONG MaxPos); /* Max. Pos. */ VOID __asm SetPropPosH(register __a0 struct Gadget *Gadget,/* Das Gadget */ register __a1 struct Window *Window, register __d0 LONG MaxPos, /* Die MaxPos */ register __d1 LONG Schrittweite, /* Schrittweite */ register __d2 LONG NewPos); /* Neue Posit. */ VOID __asm SetPropPosV(register __a0 struct Gadget *Gadget,/* Das Gadget */ register __a1 struct Window *Window, register __d0 LONG MaxPos, /* Die MaxPos */ register __d1 LONG Schrittweite, /* Schrittweite */ register __d2 LONG NewPos); /* Neue Posit. */ LONG __asm PrepareTmpRas(register __a1 struct RastPort *RP);/* Der RastPort */ VOID __asm ClearTmpRas(register __a1 struct RastPort *RP); /* Der RastPort */ LONG __asm PrepareArea(register __a1 struct RastPort *RP, register __d0 LONG MaxPoints); VOID __asm ClearArea(register __a1 struct RastPort *RP); VOID __asm Fak(register __a0 DOUBLE *Ziel, register __d0 LONG i); VOID __asm NuK(register __a0 DOUBLE *Ziel, register __d0 LONG n, register __d1 LONG k); VOID __asm GetKonst_P(register __a0 DOUBLE *Ziel, register __a1 APTR Konst, register __d0 LONG Nummer); LONG __asm Calc_P(register __a0 DOUBLE *Ziel, register __a1 struct Block *Zeiger, register __a2 DOUBLE *x); VOID __asm berechnen(register __a0 DOUBLE *Ziel, register __d0 UBYTE *string, register __d1 DOUBLE *var, register __d2 struct Konstanten *kon, register __d3 LONG *Fehler); VOID __asm UmwStoF(register __a0 DOUBLE *Ziel, register __a1 char *string); struct Menu * __asm LastMenu(register __a0 struct Menu *menu); struct MenuItem * __asm LastItem(register __a0 struct Menu *menu); struct MenuItem * __asm LastSub(register __a0 struct Menu *menu); struct Menu * __asm AddMenu(register __a0 struct Menu *menu, register __a1 char *Titel, register __d0 USHORT Flags); struct Item * __asm AddItem(register __a0 struct Menu *menu, register __a1 char *Titel, register __d0 USHORT Flags, register __d1 char HotKey); struct Item * __asm AddSub(register __a0 struct Menu *menu, register __a1 char *Titel, register __d0 USHORT Flags, register __d1 char HotKey); struct MenuItem * __asm GetItem(register __a0 struct Menu *menu, register __a1 char *Titel, register __d0 USHORT Flags, register __d1 char HotKey); VOID __asm ClearMenu(register __a0 struct Menu *menu); struct MenuItem * __asm FreeItem(register __a0 struct MenuItem *item); struct Menu * __asm FreeMenu(register __a0 struct Menu *menu); VOID __asm NewSetMenuStrip(register __a1 struct Window *Window, register __a0 struct Menu *menu);