#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 ToolBase { struct Library Node; LONG SegList; struct Library *SysBase; struct GfxBase *GfxBase; struct IntuitionBase *IntuitionBase; struct Library *MathIeeeDoubBasBase; struct Library *MathIeeeDoubTransBase; }; struct Block { LONG Links,Rechts; LONG RechenArt,Valid; LONG Konstante; LONG Fehler; char *String; DOUBLE Wert; struct Block *Left,*Right; }; 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 Print(struct RastPort *RP, char *text, LONG col, LONG xpos, LONG ypos); ULONG EventAbfrage(struct Window *Window, struct info *MsgInfo); LONG request(char *JaPointer, char *NeinPointer, char *BodyPointer); VOID Fak(DOUBLE *Ziel, LONG i); VOID NuK(DOUBLE *Ziel,LONG n,LONG k); VOID Free_Block(struct Block *First); VOID Free_Konst(APTR Zeiger); APTR Init_Konst(VOID); LONG Set_Konst_P(APTR Zeiger,LONG Nummer,DOUBLE *Wert_P); struct Block *Init_Mem(char *string); LONG Init_Block(struct Block *Zeiger); LONG check(LONG z1,LONG z2, LONG l, LONG r, char *string); LONG checkback(LONG z1,LONG z2, LONG l, LONG r, char *string); VOID copy(LONG i, LONG Anzahl, char *Ziel,char *Source); LONG PreCalc(struct Block *Zeiger,APTR Konst); VOID GetKonst_P(DOUBLE *Ziel,APTR Konst,LONG Nummer); DOUBLE GetKonst(APTR Konst,LONG Nummer); LONG Calc_P(DOUBLE *Ziel, struct Block *Zeiger, DOUBLE *x); LONG AnzahlKlammern(char *string); VOID berechnen(DOUBLE *Ziel, UBYTE *string, DOUBLE *var, struct Konstanten *kon, LONG *Fehler); VOID left(char *Ziel, char *string, LONG Anzahl); VOID right(char *Ziel, char *string, LONG Anzahl); VOID mid(char *Ziel, char *string, LONG Anfang, LONG Anzahl); VOID UmwStoF(DOUBLE *Ziel, char *string); VOID UmwFtoS(char *Ziel, DOUBLE *Zahl1, LONG Nachkomma); LONG NewRequest(struct Window *AktWindow, char *JaPointer, char *NeinPointer, char *BodyPointer); VOID Box(struct RastPort *RastPort, /* Der RastPort */ LONG xs, /* Start: X */ LONG ys, /* Start: Y */ LONG xe, /* Ende : X */ LONG ye); /* Ende : Y */ VOID Center(struct Window *Window, /* Das Fenster */ char *string, /* Der Text */ LONG Color, /* Die Farbe */ LONG y_Pos); /* Die Y-Pos. */ VOID Gadget_On(struct Gadget *Gadget, /* Das Gadget */ struct Window *Window); /* Das Fenster */ VOID Gadget_Off(struct Gadget *Gadget, /* Das Gadget */ struct Window *Window); /* Das Fenster */ LONG GetPropPosH(struct Gadget *Gadget,/* Das Gadget */ LONG MaxPos); /* Max. Pos. */ LONG GetPropPosV(struct Gadget *Gadget,/* Das Gadget */ LONG MaxPos); /* Max. Pos. */ VOID SetPropPosH(struct Gadget *Gadget,/* Das Gadget */ struct Window *Window, LONG MaxPos, /* Die MaxPos */ LONG Schrittweite, /* Schrittweite */ LONG NewPos); /* Neue Posit. */ VOID SetPropPosV(struct Gadget *Gadget,/* Das Gadget */ struct Window *Window, LONG MaxPos, /* Die MaxPos */ LONG Schrittweite, /* Schrittweite */ LONG NewPos); /* Neue Posit. */ LONG PrepareTmpRas(struct RastPort *RP);/* Der RastPort */ VOID ClearTmpRas(struct RastPort *RP); /* Der RastPort */ LONG PrepareArea(struct RastPort *RP, LONG MaxPoints); VOID ClearArea(struct RastPort *RP); struct Menu *LastMenu(struct Menu *menu); struct MenuItem *LastItem(struct Menu *menu); struct MenuItem *LastSub(struct Menu *menu); struct Menu *AddMenu(struct Menu *menu, char *Titel, USHORT Flags); struct Item *AddItem(struct Menu *menu, char *Titel, USHORT Flags, char HotKey); struct Item *AddSub(struct Menu *menu, char *Titel, USHORT Flags, char HotKey); struct MenuItem *GetItem(struct Menu *menu, char *Titel, USHORT Flags, char HotKey); VOID ClearMenu(struct Menu *menu); struct MenuItem *FreeItem(struct MenuItem *item); struct Menu *FreeMenu(struct Menu *menu); VOID NewSetMenuStrip(struct Window *Window, struct Menu *menu); #pragma libcall ToolBase left 1e 9803 #pragma libcall ToolBase right 24 9803 #pragma libcall ToolBase mid 2a 109804 #pragma libcall ToolBase UmwFtoS 30 9803 #pragma libcall ToolBase copy 36 321004 #pragma libcall ToolBase check 3c 8321005 #pragma libcall ToolBase checkback 42 8321005 #pragma libcall ToolBase AnzahlKlammern 48 801 #pragma libcall ToolBase request 4e 21003 #pragma libcall ToolBase NewRequest 54 210804 #pragma libcall ToolBase EventAbfrage 5a 9802 #pragma libcall ToolBase Print 60 2108905 #pragma libcall ToolBase Box 66 3210905 #pragma libcall ToolBase Center 6c 108904 #pragma libcall ToolBase Gadget_On 72 9802 #pragma libcall ToolBase Gadget_Off 78 9802 #pragma libcall ToolBase GetPropPosH 7e 802 #pragma libcall ToolBase GetPropPosV 84 802 #pragma libcall ToolBase SetPropPosH 8a 2109805 #pragma libcall ToolBase SetPropPosV 90 2109805 #pragma libcall ToolBase PrepareTmpRas 96 901 #pragma libcall ToolBase ClearTmpRas 9c 901 #pragma libcall ToolBase PrepareArea a2 902 #pragma libcall ToolBase ClearArea a8 901 #pragma libcall ToolBase UmwStoF ae 9802 #pragma libcall ToolBase Fak b4 802 #pragma libcall ToolBase NuK ba 10803 #pragma libcall ToolBase berechnen c0 3210805 #pragma libcall ToolBase Init_Konst c6 0 #pragma libcall ToolBase Init_Mem cc 801 #pragma libcall ToolBase Init_Block d2 801 #pragma libcall ToolBase Set_Konst_P d8 10803 #pragma libcall ToolBase GetKonst_P de 19803 #pragma libcall ToolBase PreCalc e4 1002 #pragma libcall ToolBase Calc_P ea a9803 #pragma libcall ToolBase Free_Konst f0 801 #pragma libcall ToolBase Free_Block f6 801 #pragma libcall ToolBase CreatePort fc 802 #pragma libcall ToolBase DeletePort 102 801 #pragma libcall ToolBase CreateExtIO 108 802 #pragma libcall ToolBase DeleteExtIO 10e 802 #pragma libcall ToolBase CreateStdIO 114 801 #pragma libcall ToolBase DeleteStdIO 11a 801 #pragma libcall ToolBase LastMenu 120 801 #pragma libcall ToolBase LastItem 126 801 #pragma libcall ToolBase LastSub 12c 801 #pragma libcall ToolBase AddMenu 132 9803 #pragma libcall ToolBase AddItem 138 109804 #pragma libcall ToolBase AddSub 13e 109804 #pragma libcall ToolBase GetItem 144 109804 #pragma libcall ToolBase ClearMenu 14a 801 #pragma libcall ToolBase FreeItem 150 801 #pragma libcall ToolBase FreeMenu 156 801 #pragma libcall ToolBase NewSetMenuStrip 15c 8902