/* Auto: smake MCalc */ /* $Revision Header built automatically *************** (do not edit) ************ ** ** © Copyright by GuntherSoft ** ** File : SnakeSYS:CPrgs/MUICalc/MCalc.c ** Created on : Saturday, 02.10.93 02:12:50 ** Created by : Kai Iske ** Current revision : V1.0 ** ** ** Purpose ** ------- ** - This is a quite flexible, powerful Calculator made for all ** those of you, who like to calc around ;) Even for ** programmers... ** ** Revision V1.0 ** -------------- ** created on Saturday, 02.10.93 02:12:50 by Kai Iske. LogMessage : ** --- Initial release --- ** *********************************************************************************/ /**********************************************************************/ /* Externals to Scanner/Parser */ /**********************************************************************/ extern UWORD PCharRead; extern UWORD PColumn; extern UWORD PError; extern UWORD NonDouble; extern int yynerrs; extern int yychar; extern int yy_init; extern int yy_start; extern FILE *yyin, *yyout; extern void *yy_current_buffer; extern UWORD RXIntType; extern UWORD RXIntBase; extern UWORD RXIntSign; extern UWORD RXIntAngle; /**********************************************************************/ /* Aehm, SAS 6.50 seams to open up a window just as it likes ;) */ /**********************************************************************/ char __stdiowin[] = "NIL:"; /**********************************************************************/ /* External variables of ARexx module */ /**********************************************************************/ extern struct MUI_Command RXCommands[]; /**********************************************************************/ /* Routines for that module */ /**********************************************************************/ static BOOL OpenLibs(void); static void CloseLibs(void); static void SetMainWinCycle(void); static BOOL OpenMainWin(void); static void CloseMainWin(void); static ULONG __saveds __asm InsertFunc(register __a0 struct Hook *MyHook, register __a2 APTR Obj, register __a1 APTR *Data); static ULONG __saveds __asm DispConstructFunc(register __a0 struct Hook *MyHook, register __a2 APTR MemPool, register __a1 struct ListStruct *Data); static ULONG __saveds __asm StdDestructFunc(register __a0 struct Hook *MyHook, register __a2 APTR MemPool, register __a1 struct ListStruct *Data); static ULONG __saveds __asm DispViewFunc(register __a0 struct Hook *MyHook, register __a2 char **array, register __a1 struct ListStruct *Data); static ULONG __saveds __asm HistoryConstructFunc(register __a0 struct Hook *MyHook, register __a2 char **array, register __a1 struct DoubleNode *Data); static ULONG __saveds __asm DeviationDispFunc(register __a0 struct Hook *MyHook, register __a2 char **array, register __a1 struct DoubleNode *Data); static ULONG __saveds __asm RegressionDispFunc(register __a0 struct Hook *MyHook, register __a2 char **array, register __a1 struct DoubleNode *Data); static ULONG __saveds __asm ConstConstructFunc(register __a0 struct Hook *MyHook, register __a2 char **array, register __a1 struct ConstNode *Data); static ULONG __saveds __asm ConstDispFunc(register __a0 struct Hook *MyHook, register __a2 char **array, register __a1 struct ConstNode *Data); static LONG __saveds __asm ConstCompFunc(register __a1 struct ConstNode *Data1, register __a2 struct ConstNode *Data2); static void InsertText(char *NewText); static void WriteClip(char *Entry); static void HandleInputs(void); /**********************************************************************/ /* Library-Bases */ /**********************************************************************/ extern struct ExecBase *SysBase; struct IntuitionBase *IntuitionBase = NULL; struct GfxBase *GfxBase = NULL; struct Library *UtilityBase = NULL; struct Library *IconBase = NULL; struct Library *MUIMasterBase = NULL; struct Library *MathIeeeDoubBasBase = NULL; struct Library *MathIeeeDoubTransBase = NULL; struct Library *IFFParseBase = NULL; /**********************************************************************/ /* The Objects */ /**********************************************************************/ static struct DiskObject *DObject = NULL; APTR AppObject = NULL; // Is referenced through ARexx module static APTR MainWindow; static APTR InOutGroup; static APTR InputGroup; APTR InputString; // Is referenced through ARexx module static APTR OutputGroup; APTR OutputBox; // Is referenced through ARexx module static APTR InGads[116]; static APTR ExeObj; static APTR ClrObj; static APTR AllClrObj; static APTR MainGroup; static APTR FuncGroup; static APTR InGroup; static APTR PrefsWindow; static APTR InOutObj; static APTR DFuncObj; static APTR DInObj; static APTR TypeObj; static APTR SizeObj; static APTR SignObj; static APTR AngleObj; static APTR LinesObj; static APTR LookObj; static APTR ClearInObj; static APTR FlushObj; static APTR StdWinObj; static APTR LinWinObj; static APTR ConstWinObj; static APTR ClipObj; static APTR OkObj; static APTR SaveObj; static APTR CancelObj; static APTR StdHistoryWindow; static APTR StdHistoryObj; static APTR LinHistoryWindow; static APTR LinHistoryObj; static APTR ConstantsWindow; static APTR ConstantsObj; /**********************************************************************/ /* Strings for Functions Cycle-Gadget */ /**********************************************************************/ static const char *FunctionEntries[] = { "Math", "Programmer", "Memory", "Std. deviation", "Lin. regression", NULL }; /**********************************************************************/ /* Strings for Prefs-Cycles */ /**********************************************************************/ static const char *InOutLookEntries[] = { "Input then Output", "Output then Input", NULL }; static const char *TypeEntries[] = { "Decimal", "HexDecimal", "Octal", "Binary", NULL }; static const char *SizeEntries[] = { "8-Bit", "16-Bit", "32-Bit", NULL }; static const char *SignEntries[] = { "Signed", "Unsigned", NULL }; static const char *AngleEntries[] = { "Radians", "Degree", "Grads", NULL }; static const char *LookEntries[] = { "Input & Output", "Output & Input", "Input", "Output", NULL }; static const char *LookTemplates[] = { "COL=0 DELTA=12 P=\033r MAW=100 MIW=0, COL=1 DELTA=12 P=\033r MAW=-1 MIW=-1", "COL=1 DELTA=12 P=\033r MAW=-1 MIW=-1, COL=0 DELTA=12 P=\033r MAW=100 MIW=0", "COL=0 DELTA=12 P=\033r MIW=100", "COL=1 DELTA=12 P=\033r MIW=100" }; /**********************************************************************/ /* Chars/String for window title */ /**********************************************************************/ static const char TypeChar[] = { 'D', 'H', 'O', 'B' }; static const char *BaseStr[] = { "8", "16", "32" }; static const char SignChar[] = { 'S', 'U', }; static const char *AngleStr[] = { "RAD", "DEG", "GRA" }; /**********************************************************************/ /* Menu-Definition */ /**********************************************************************/ static struct NewMenu MainMenuDef[] = { NM_TITLE, "Project", NULL, 0, NULL, NULL, NM_ITEM, "Preferences...", "P", 0, NULL, (APTR)ID_PREFS, NM_ITEM, NM_BARLABEL, NULL, 0, NULL, NULL, NM_ITEM, "About...", "?", 0, NULL, (APTR)ID_ABOUT, NM_ITEM, NM_BARLABEL, NULL, 0, NULL, NULL, NM_ITEM, "Quit", "Q", 0, NULL, (APTR)ID_QUIT, NM_TITLE, "Edit", NULL, 0, NULL, NULL, NM_ITEM, "Clear", "X", 0, NULL, (APTR)ID_CLEAR, NM_ITEM, "All Clear", "Y", 0, NULL, (APTR)ID_ALLCLEAR, NM_TITLE, "History", NULL, 0, NULL, NULL, NM_ITEM, "Pick left entry", "L", 0, NULL, (APTR)ID_PICKLEFT, NM_ITEM, "Pick right entry", "R", 0, NULL, (APTR)ID_PICKRIGHT, NM_ITEM, NM_BARLABEL, NULL, 0, NULL, NULL, NM_ITEM, "Copy left entry", "F", 0, NULL, (APTR)ID_CLIPCUTLEFT, NM_ITEM, "Copy right entry", "C", 0, NULL, (APTR)ID_CLIPCUTRIGHT, NM_ITEM, NM_BARLABEL, NULL, 0, NULL, NULL, NM_ITEM, "Delete entry", "K", 0, NULL, (APTR)ID_DELHISTORY, NM_TITLE, "Display Bases", NULL, 0, NULL, NULL, NM_ITEM, "Decimal", "D", CHECKIT|MENUTOGGLE, 14, (APTR)ID_DECIMAL, NM_ITEM, "Hexadecimal", "H", CHECKIT|MENUTOGGLE, 13, (APTR)ID_HEXDECIMAL, NM_ITEM, "Octal", "O", CHECKIT|MENUTOGGLE, 11, (APTR)ID_OCTAL, NM_ITEM, "Binary", "B", CHECKIT|MENUTOGGLE, 7, (APTR)ID_BINARY, NM_TITLE, "Size", NULL, 0, NULL, NULL, NM_ITEM, "8 Bit", "8", CHECKIT|MENUTOGGLE, 6, (APTR)ID_8BIT, NM_ITEM, "16 Bit", "16", CHECKIT|MENUTOGGLE, 5, (APTR)ID_16BIT, NM_ITEM, "32 Bit", "32", CHECKIT|MENUTOGGLE, 3, (APTR)ID_32BIT, NM_TITLE, "Sign", NULL, 0, NULL, NULL, NM_ITEM, "Signed", "S", CHECKIT|MENUTOGGLE, 2, (APTR)ID_SIGNED, NM_ITEM, "Unsigned", "U", CHECKIT|MENUTOGGLE, 1, (APTR)ID_UNSIGNED, NM_TITLE, "Angle", NULL, 0, NULL, NULL, NM_ITEM, "Radians", "A", CHECKIT|MENUTOGGLE, 6, (APTR)ID_RAD, NM_ITEM, "Degree", "E", CHECKIT|MENUTOGGLE, 5, (APTR)ID_DEG, NM_ITEM, "Grads", "G", CHECKIT|MENUTOGGLE, 3, (APTR)ID_GRAD, NM_TITLE, "Windows", NULL, 0, NULL, NULL, NM_ITEM, "Std.Deviation", "T", 0, 0, (APTR)ID_STDHISTORY, NM_ITEM, "Lin.Regression", "I", 0, 0, (APTR)ID_LINHISTORY, NM_ITEM, "Constants", "N", 0, 0, (APTR)ID_CONSTANTS, NM_END, NULL, NULL, 0, NULL, NULL }; /**********************************************************************/ /* Some global Variables */ /**********************************************************************/ static struct Hook InsertHook = // This is our hook for the InputGadgets { {NULL}, (APTR)InsertFunc, NULL, NULL }; static struct Hook DispConstructHook = // Hooks for multi-column display { {NULL}, (APTR)DispConstructFunc, NULL, NULL }; static struct Hook StdDestructHook = { {NULL}, (APTR)StdDestructFunc, NULL, NULL }; static struct Hook DispViewHook = { {NULL}, (APTR)DispViewFunc, NULL, NULL }; static struct Hook HistoryConstructHook = { {NULL}, (APTR)HistoryConstructFunc, NULL, NULL }; static struct Hook DeviationDispHook = { {NULL}, (APTR)DeviationDispFunc, NULL, NULL }; static struct Hook RegressionDispHook = { {NULL}, (APTR)RegressionDispFunc, NULL, NULL }; static struct Hook ConstConstructHook = { {NULL}, (APTR)ConstConstructFunc, NULL, NULL }; static struct Hook ConstDispHook = { {NULL}, (APTR)ConstDispFunc, NULL, NULL }; static struct Hook ConstCompHook = { {NULL}, (APTR)ConstCompFunc, NULL, NULL }; /**********************************************************************/ /* Constant definitions */ /**********************************************************************/ static char *ConstNames[] = { "rest mass of proton", "Faraday constant", "Bohr radius", "speed of light", "Planck constant", "gravitational constant", "elementary charge", "rest mass of electron", "atomic mass unit", "Avogadro constant", "Boltzmann constant", "molar volume", "acceleration of free fall", "molar gas constant", "permittivity of vacuum", "permeability of vacuum", "m. moment of proton", "m. moment of electron", "nuclear magneton", "Bohr magneton", "h/2 pi", "fine-structure constant", "electron radius", "rest mass of neutron", "gyromagnetic coefficient p", "Compton wavelenght p", "Compton wavelength n", "Rydberg constant", "first radiation constant", "second radiation constant", "Stefan Boltzmann constant", "fluxoid quantum" }; static char *ConstValues[] = { "1.6726485e-27", "9.648456e4", "5.2917706e-11", "299792458", "6.626176e-34", "6.672e-11", "1.6021892e-19", "9.109534e-31", "1.6605655e-27", "6.022045e23", "1.380662e-23", "0.02241383", "9.80665", "8.31441", "8.854187818e-12", "1.256637061e-6", "1.41060761e-26", "9.2847701e-24", "5.050824e-27", "9.274078e-24", "1.0545887e-34", "7.2973506e-3", "2.817938e-15", "1.6749543e-27", "2.6751987e8", "1.3214099e-15", "1.3195909e-15", "1.097373177e7", "3.741832e-16", "1.438786e-2", "5.67032e-8", "2.0678506e-15" }; static char *ConstNotation[] = { "kg", "C/mol", "m", "m/s", "J*s", "Nm²/kg²", "C", "kg", "kg", "1/mol", "J/K", "m³/mol", "m/s²", "J/(mol*K)", "F/m", "H/m", "A*m²", "A*m²", "A*m²", "A*m²", "J*s", "-", "m", "kg", "A*m²/(J*s)", "m", "m", "1/m", "W*m²", "m*K", "W*(K^4)/m²", "Wb", }; /**********************************************************************/ /* Parser related variables */ /**********************************************************************/ char *ParseInput; // This has to be global, so that the scanner my find it ;) APTR ParsePool; // Pointer to parser`s memory pool char Title[80]; // Title of main window double Value, // Value being displayed and memories IMem, JMem, KMem, LMem, MMem, NMem, OMem, PMem, QMem, RMem, SMem, TMem, UMem, VMem, WMem, XMem, YMem, ZMem; struct List StandardList; struct List LinearList; UWORD InOutLook = 0; // How to order the String and ListView gadgets UWORD NoFuncs = FALSE; // Display function gadgets ??? UWORD NoInput = FALSE; // Display input gadgets ??? UWORD IntType = ID_DECIMAL; // Current output format UWORD IntBase = ID_32BIT; // Current conversion base UWORD IntSign = ID_SIGNED; // Current ouput sign-format UWORD IntAngle = ID_RAD; // Current angle format UWORD HistLines = 32; // Default number of history lines UWORD ListLook = 0; // Look of ListView UWORD FlushOnExit = FALSE; // Flush memory on exit ??? UWORD ClearInput = FALSE; // Clear input string after RETURN/EXEC ??? UWORD OpenStdWin = FALSE; // Open the standard deviation window? UWORD OpenLinWin = FALSE; // Open the linear regression window? UWORD OpenConstWin = FALSE; // Open the constants window? UWORD ClipUnit = 0; // Number of clipboard to use UWORD ContainsUnDec; // This is to signal the main program, // that non-decimal digits have been used /**********************************************************************/ /* Do the wild thing ;) */ /**********************************************************************/ void main(void) { APTR FlushPtr; int i; // Try to open libs if(OpenLibs()) { // Init lists for standard and linear regression NewList(&StandardList); NewList(&LinearList); // Try to open the main window if(OpenMainWin()) { // Display "0" in desired format FormatOutput(FALSE); // Handle incoming inputs HandleInputs(); } CloseMainWin(); // Free lists FreeList(&StandardList); FreeList(&LinearList); } CloseLibs(); // Should memory be flushed ??? if(FlushOnExit) { for(i = 0; i < 10; i++) { if((FlushPtr = AllocMem(0x1DCD6500, MEMF_PUBLIC))) FreeMem(FlushPtr, 0x1DCD6500); } } exit(0); } /**********************************************************************/ /* Open-Up needed libraries */ /**********************************************************************/ static BOOL OpenLibs(void) { if(!(IntuitionBase = (struct IntuitionBase *)OpenLibrary("intuition.library", 37))) return(FALSE); if(!(GfxBase = (struct GfxBase *)OpenLibrary("graphics.library", 37))) return(FALSE); if(!(UtilityBase = OpenLibrary("utility.library", 37))) return(FALSE); if(!(IconBase = OpenLibrary("icon.library", 37))) return(FALSE); if(!(MathIeeeDoubBasBase = OpenLibrary("mathieeedoubbas.library", 37))) return(FALSE); if(!(MathIeeeDoubTransBase = OpenLibrary("mathieeedoubtrans.library", 37))) return(FALSE); if(!(IFFParseBase = OpenLibrary("iffparse.library", 37))) return(FALSE); if(!(MUIMasterBase = OpenLibrary("muimaster.library", 7))) return(FALSE); return(TRUE); } /**********************************************************************/ /* Close used libs */ /**********************************************************************/ static void CloseLibs(void) { if(MUIMasterBase) CloseLibrary(MUIMasterBase); if(IFFParseBase) CloseLibrary(IFFParseBase); if(MathIeeeDoubTransBase) CloseLibrary(MathIeeeDoubTransBase); if(MathIeeeDoubBasBase) CloseLibrary(MathIeeeDoubBasBase); if(IconBase) CloseLibrary(IconBase); if(UtilityBase) CloseLibrary(UtilityBase); if(GfxBase) CloseLibrary((struct Library *)GfxBase); if(IntuitionBase) CloseLibrary((struct Library *)IntuitionBase); } /**********************************************************************/ /* Set Cycle Chain for main window */ /**********************************************************************/ static void SetMainWinCycle(void) { APTR FirstCycle, LastCycle; int GadNum; if(!InOutLook) { FirstCycle = InputString; LastCycle = OutputBox; } else { FirstCycle = OutputBox; LastCycle = InputString; } // Set Cycle chanin GadNum = 0; DoMethod(MainWindow, MUIM_Window_SetCycleChain, FirstCycle, LastCycle, InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], InGads[GadNum++], ClrObj, AllClrObj, ExeObj, NULL); } /**********************************************************************/ /* Open the Calculator`s Window */ /**********************************************************************/ static BOOL OpenMainWin(void) { ULONG Dummy, GadNum = 0; // The input String Requester InputGroup = VGroup, Child, InputString = StringObject, StringFrame, MUIA_String_Contents, "0", MUIA_String_MaxLen, 256, MUIA_String_Format, MUIV_String_Format_Right, MUIA_String_BufferPos, 1, End, End; // The Output Box OutputGroup = VGroup, Child, OutputBox = ListviewObject, MUIA_Listview_Input, TRUE, MUIA_Listview_List, ListObject, InputListFrame, MUIA_Background, MUII_ListBack, MUIA_List_Format, "COL=0 DELTA=8 P=\033r MAW=50 MIW=10, COL=1 DELTA=8 P=\033r MAW=50 MIW=10", MUIA_List_ConstructHook, &DispConstructHook, MUIA_List_DestructHook, &StdDestructHook, MUIA_List_DisplayHook, &DispViewHook, End, End, End; // Create the Application window AppObject = ApplicationObject, MUIA_Application_Title, "MCalc", MUIA_Application_Version, MUIVERS, MUIA_Application_Copyright, "©1993/94 Kai Iske", MUIA_Application_Author, "Kai Iske", MUIA_Application_Description, "Quite powerful calculator, GiftWare", MUIA_Application_Base, "MCalc", MUIA_Application_SingleTask, TRUE, MUIA_Application_DiskObject, DObject = GetDiskObjectNew("PROGDIR:MCalc"), MUIA_Application_Commands, &RXCommands[0], MUIA_HelpFile, "MCalc.guide", // Now head for the main window SubWindow, MainWindow = WindowObject, MUIA_Window_Title, "MUIProCalc "REVISION" - "REVDATE, MUIA_Window_ID, 'MPCM', MUIA_Window_SizeGadget, TRUE, MUIA_Window_Menu, &MainMenuDef, MUIA_HelpNode, NODE_MAIN, // Do the gadgets WindowContents, MainGroup = VGroup, // First of all the Input and Output Group Child, InOutGroup = VGroup, GroupFrame, MUIA_HelpNode, NODE_INOUTPUT, End, // Input Area // Now check for the Function Gadgets Child, FuncGroup = VGroup, GroupFrame, MUIA_HelpNode, NODE_FUNCTIONS, // Function Buttons Child, RegisterObject, MUIA_Register_Frame, TRUE, MUIA_Register_Titles, FunctionEntries, Child, ColGroup(8), MUIA_Group_SameWidth, TRUE, // First row of Functions Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "Sin", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "Cos", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "Tan", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "ASin", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "ACos", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "ATan", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "SinH", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "CosH", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "TanH", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "Log", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "Log10", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "Exp", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "^", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "Pi", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "Sqrt", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "Abs", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "Cot", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "e", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "%", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "%ch", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "%t", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "(n k)", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "YRoot", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "Rez", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, End, // First Button Bank // Second Button-Bank Child, ColGroup(6), MUIA_Group_SameWidth, TRUE, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "Mod", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "And", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "Or", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "XOr", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "Not", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "Asl", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "Asr", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "Lsl", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "Lsr", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "Rol", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "Ror", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, HSpace(0), End, // Second Button Bank // Third Button-Bank Child, ColGroup(6), MUIA_Group_SameWidth, TRUE, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "I", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "J", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "K", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "L", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "M", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "N", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "O", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "P", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "Q", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "R", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "S", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "T", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "U", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "V", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "W", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "X", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "Y", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "Z", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, End, // Third Button Bank // Fourth Button-Bank Child, ColGroup(7), MUIA_Group_SameWidth, TRUE, MUIA_HelpNode, NODE_STDDEVIATION, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "SD", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "SD_AVE", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "SD_PDEV", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "SD_SDEV", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "SD_NUM", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "SD_QSUM", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "SD_SUM", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, End, // Fourth Button bank // Fith Button-Bank Child, ColGroup(7), MUIA_Group_SameWidth, TRUE, MUIA_HelpNode, NODE_LINREGRESSION, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "LR", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "LR_XAVE", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "LR_YAVE", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "LR_XPDEV", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "LR_YPDEV", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "LR_XSDEV", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "LR_YSDEV", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "LR_XNUM", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "LR_YNUM", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "LR_XQSUM", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "LR_YQSUM", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "LR_XSUM", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "LR_YSUM", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "LR_XYSUM", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "LR_ALPHA", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "LR_BETA", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "LR_ASSX", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "LR_ASSY", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "LR_CORR", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "LR_CCORR", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "LR_COVAR", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, End, // Fourth Button bank End, // Page-Group End, // Second Area Child, InGroup = VGroup, GroupFrame, MUIA_HelpNode, NODE_INPUTS, Child, ColGroup(7), MUIA_Group_SameWidth, TRUE, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "A", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "B", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "C", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "D", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "E", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "$", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "0x", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "7", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "8", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "9", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "/", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "F", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "\\", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "!", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "4", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "5", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "6", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "*", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, HSpace(0), Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "&", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, ClrObj = TextObject, ButtonFrame, MUIA_Text_Contents, "CLR", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "1", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "2", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "3", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "-", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "EXG", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "(", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, AllClrObj = TextObject, ButtonFrame, MUIA_Text_Contents, "ACLR", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "0", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, ".", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "=", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, InGads[GadNum++] = TextObject, ButtonFrame, MUIA_Text_Contents, "+", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, HSpace(0), Child, InGads[GadNum++]= TextObject, ButtonFrame, MUIA_Text_Contents, ")", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, Child, ExeObj = TextObject, ButtonFrame, MUIA_Text_Contents, "Exec", MUIA_Text_PreParse, "\33c", MUIA_Background, MUII_ButtonBack, MUIA_InputMode, MUIV_InputMode_RelVerify, End, End, // Input gadgets End, // Third input area End, // VGroup End, // Main window // Now generate the Prefs window SubWindow, PrefsWindow = WindowObject, MUIA_Window_Title, "MUIProCalc Preferences", MUIA_Window_ID, 'MPCP', MUIA_Window_SizeGadget, TRUE, MUIA_Window_NoMenus, TRUE, MUIA_HelpNode, NODE_PREFS, WindowContents, VGroup, Child, ColGroup(2), Child, VGroup, GroupFrameT("Window layout"), MUIA_HelpNode, NODE_LAYOUT, Child, VSpace(0), Child, HGroup, // Display functions gadget Child, HGroup, Child, TextObject, MUIA_Text_PreParse, "\033r", MUIA_Text_Contents, "No Functions", MUIA_Text_HiChar, 'f', End, Child, HSpace(1), Child, DFuncObj = ImageObject, ImageButtonFrame, MUIA_InputMode, MUIV_InputMode_Toggle, MUIA_Image_Spec, MUII_CheckMark, MUIA_Image_FreeVert, TRUE, MUIA_Selected, NoFuncs, MUIA_Background, MUII_ButtonBack, MUIA_ShowSelState, FALSE, MUIA_ControlChar, 'f', MUIA_ExportID, 'FUNC', End, End, // Display Inputs gadget Child, HGroup, Child, TextObject, MUIA_Text_PreParse, "\033r", MUIA_Text_Contents, "No Input", MUIA_Text_HiChar, 'n', End, Child, HSpace(1), Child, DInObj = ImageObject, ImageButtonFrame, MUIA_InputMode, MUIV_InputMode_Toggle, MUIA_Image_Spec, MUII_CheckMark, MUIA_Image_FreeVert, TRUE, MUIA_Selected, NoInput, MUIA_Background, MUII_ButtonBack, MUIA_ShowSelState, FALSE, MUIA_ControlChar, 'n', MUIA_ExportID, 'INPU', End, End, End, // Cycle Gadget for default type Child, ColGroup(2), Child, KeyLabel1("In/Out Order", 'O'), Child, InOutObj = CycleObject, ButtonFrame, MUIA_Cycle_Active, InOutLook, MUIA_Cycle_Entries, InOutLookEntries, MUIA_ControlChar, 'o', MUIA_ExportID, 'ORDR', End, End, Child, VSpace(0), End, // Layout gadgets Child, VGroup, GroupFrameT("Output settings"), MUIA_HelpNode, NODE_OUTPUT, Child, VSpace(0), // Cycle Gadget for default type Child, ColGroup(2), Child, KeyLabel1("Base:", 'B'), Child, TypeObj = CycleObject, ButtonFrame, MUIA_Cycle_Active, IntType - ID_DECIMAL, MUIA_Cycle_Entries, TypeEntries, MUIA_ControlChar, 'b', MUIA_ExportID, 'TYPE', End, Child, KeyLabel1("Size:", 'z'), Child, SizeObj = CycleObject, ButtonFrame, MUIA_Cycle_Active, IntBase - ID_8BIT, MUIA_Cycle_Entries, SizeEntries, MUIA_ControlChar, 'z', MUIA_ExportID, 'SIZE', End, Child, KeyLabel1("Sign:", 'i'), Child, SignObj = CycleObject, ButtonFrame, MUIA_Cycle_Active, IntSign - ID_SIGNED, MUIA_Cycle_Entries, SignEntries, MUIA_ControlChar, 'i', MUIA_ExportID, 'SIGN', End, Child, KeyLabel1("Angle:", 'a'), Child, AngleObj = CycleObject, ButtonFrame, MUIA_Cycle_Active, IntAngle - ID_RAD, MUIA_Cycle_Entries, AngleEntries, MUIA_ControlChar, 'a', MUIA_ExportID, 'ANGL', End, End, // Cycle gadgets Child, VSpace(0), End, // Output settings Child, VGroup, GroupFrameT("History settings"), MUIA_HelpNode, NODE_HISTORY, Child, VSpace(0), // Number of lines to buffer Child, ColGroup(2), Child, KeyLabel1("Lines:", 'L'), Child, LinesObj = SliderObject, MUIA_Slider_Level, HistLines, MUIA_Slider_Min, 1, MUIA_Slider_Max, 512, MUIA_ControlChar, 'l', MUIA_ExportID, 'LINE', End, Child, KeyLabel1("Entries:", 'E'), Child, LookObj = CycleObject, ButtonFrame, MUIA_Cycle_Active, ListLook, MUIA_Cycle_Entries, LookEntries, MUIA_ControlChar, 'e', MUIA_ExportID, 'LOOK', End, End, // History col group // Number of clipboard to use Child, ColGroup(2), Child, KeyLabel1("ClipUnit:", 'P'), Child, ClipObj = SliderObject, MUIA_Slider_Level, ClipUnit, MUIA_Slider_Min, 0, MUIA_Slider_Max, 255, MUIA_ControlChar, 'p', MUIA_ExportID, 'CLIP', End, End, // Clipboard group Child, VSpace(0), End, // History settings Child, VGroup, GroupFrameT("Misc"), MUIA_HelpNode, NODE_MISC, Child, VSpace(0), // Clear input checkbox Child, HGroup, Child, TextObject, MUIA_Text_PreParse, "\033r", MUIA_Text_Contents, "Clear input on exec", MUIA_Text_HiChar, 'r', End, Child, HSpace(1), Child, ClearInObj = ImageObject, ImageButtonFrame, MUIA_InputMode, MUIV_InputMode_Toggle, MUIA_Image_Spec, MUII_CheckMark, MUIA_Image_FreeVert, TRUE, MUIA_Selected, ClearInput, MUIA_Background, MUII_ButtonBack, MUIA_ShowSelState, FALSE, MUIA_ControlChar, 'r', MUIA_ExportID, 'CLRI', End, End, // Clear checkbox // Flush memory gadget Child, HGroup, Child, TextObject, MUIA_Text_PreParse, "\033r", MUIA_Text_Contents, "Flush memory", MUIA_Text_HiChar, 'm', End, Child, HSpace(1), Child, FlushObj = ImageObject, ImageButtonFrame, MUIA_InputMode, MUIV_InputMode_Toggle, MUIA_Image_Spec, MUII_CheckMark, MUIA_Image_FreeVert, TRUE, MUIA_Selected, FlushOnExit, MUIA_Background, MUII_ButtonBack, MUIA_ShowSelState, FALSE, MUIA_ControlChar, 'm', MUIA_ExportID, 'FLUS', End, End, // Flush CheckBox // Open std. deviation window Child, HGroup, Child, TextObject, MUIA_Text_PreParse, "\033r", MUIA_Text_Contents, "Deviation window", MUIA_Text_HiChar, 'D', End, Child, HSpace(1), Child, StdWinObj = ImageObject, ImageButtonFrame, MUIA_InputMode, MUIV_InputMode_Toggle, MUIA_Image_Spec, MUII_CheckMark, MUIA_Image_FreeVert, TRUE, MUIA_Selected, OpenStdWin, MUIA_Background, MUII_ButtonBack, MUIA_ShowSelState, FALSE, MUIA_ControlChar, 'd', MUIA_ExportID, 'DEVI', End, End, // Open std. deviation window // Open lin. regression window Child, HGroup, Child, TextObject, MUIA_Text_PreParse, "\033r", MUIA_Text_Contents, "Regression window", MUIA_Text_HiChar, 'g', End, Child, HSpace(1), Child, LinWinObj = ImageObject, ImageButtonFrame, MUIA_InputMode, MUIV_InputMode_Toggle, MUIA_Image_Spec, MUII_CheckMark, MUIA_Image_FreeVert, TRUE, MUIA_Selected, OpenLinWin, MUIA_Background, MUII_ButtonBack, MUIA_ShowSelState, FALSE, MUIA_ControlChar, 'g', MUIA_ExportID, 'REGR', End, End, // Open lin. regression window // Open constants window Child, HGroup, Child, TextObject, MUIA_Text_PreParse, "\033r", MUIA_Text_Contents, "Constants window", MUIA_Text_HiChar, 't', End, Child, HSpace(1), Child, ConstWinObj = ImageObject, ImageButtonFrame, MUIA_InputMode, MUIV_InputMode_Toggle, MUIA_Image_Spec, MUII_CheckMark, MUIA_Image_FreeVert, TRUE, MUIA_Selected, OpenConstWin, MUIA_Background, MUII_ButtonBack, MUIA_ShowSelState, FALSE, MUIA_ControlChar, 't', MUIA_ExportID, 'CONS', End, End, // Open constants window Child, VSpace(0), End, // Misc Group End, // Horizontal Groups // Ok, Cancel, Save gadgets Child, VGroup, GroupFrame, Child, ColGroup(3), MUIA_Group_SameWidth, TRUE, // Save Gadget Child, SaveObj = TextObject, ButtonFrame, MUIA_Background, MUII_ButtonBack, MUIA_Text_PreParse, "\33c", MUIA_Text_Contents, "Save", MUIA_Text_HiChar, 'S', MUIA_ControlChar, 's', MUIA_InputMode, MUIV_InputMode_RelVerify, End, // Use Gadget Child, OkObj = TextObject, ButtonFrame, MUIA_Background, MUII_ButtonBack, MUIA_Text_PreParse, "\33c", MUIA_Text_Contents, "Use", MUIA_Text_HiChar, 'U', MUIA_ControlChar, 'u', MUIA_InputMode, MUIV_InputMode_RelVerify, End, // Cancel Gadget Child, CancelObj = TextObject, ButtonFrame, MUIA_Background, MUII_ButtonBack, MUIA_Text_PreParse, "\33c", MUIA_Text_Contents, "Cancel", MUIA_Text_HiChar, 'C', MUIA_ControlChar, 'c', MUIA_InputMode, MUIV_InputMode_RelVerify, End, End, // ColGroup End, // Use - Cancel gadgets End, // Prefs window contents End, // Prefs window // Now generate the Standard deviation history window SubWindow, StdHistoryWindow = WindowObject, MUIA_Window_Title, "MUIProCalc Std.Deviation", MUIA_Window_ID, 'MPCS', MUIA_Window_SizeGadget, TRUE, MUIA_Window_Menu, &MainMenuDef, MUIA_Window_Activate, FALSE, MUIA_HelpNode, NODE_WINDOWS, WindowContents, VGroup, Child, StdHistoryObj = ListviewObject, MUIA_Listview_Input, TRUE, MUIA_Listview_List, ListObject, InputListFrame, MUIA_Background, MUII_ListBack, MUIA_List_Title, TRUE, MUIA_List_Format, "COL=0 DELTA=12,COL=1 P=\033r", MUIA_List_ConstructHook, &HistoryConstructHook, MUIA_List_DestructHook, &StdDestructHook, MUIA_List_DisplayHook, &DeviationDispHook, End, End, End, // Standard deviation window End, // Standard deviation window // Now generate the Linear Regression history window SubWindow, LinHistoryWindow = WindowObject, MUIA_Window_Title, "MUIProCalc Lin.Regression", MUIA_Window_ID, 'MPCL', MUIA_Window_SizeGadget, TRUE, MUIA_Window_Menu, &MainMenuDef, MUIA_Window_Activate, FALSE, MUIA_HelpNode, NODE_WINDOWS, WindowContents, VGroup, Child, LinHistoryObj = ListviewObject, MUIA_Listview_Input, TRUE, MUIA_Listview_List, ListObject, InputListFrame, MUIA_Background, MUII_ListBack, MUIA_List_Title, TRUE, MUIA_List_Format, "COL=0 DELTA=12,COL=1 P=\033r DELTA=12,COL=2 P=\033r", MUIA_List_ConstructHook, &HistoryConstructHook, MUIA_List_DestructHook, &StdDestructHook, MUIA_List_DisplayHook, &RegressionDispHook, End, End, End, // Linear Regression window End, // Linear Regression window // Now generate the Constants window SubWindow, ConstantsWindow = WindowObject, MUIA_Window_Title, "MUIProCalc Constants", MUIA_Window_ID, 'MPCC', MUIA_Window_SizeGadget, TRUE, MUIA_Window_Menu, &MainMenuDef, MUIA_Window_Activate, FALSE, MUIA_HelpNode, NODE_WINDOWS, WindowContents, VGroup, Child, ConstantsObj = ListviewObject, MUIA_Listview_Input, TRUE, MUIA_Listview_List, ListObject, InputListFrame, MUIA_Background, MUII_ListBack, MUIA_List_Title, TRUE, MUIA_List_Format, "COL=0,COL=1,COL=2", MUIA_List_ConstructHook, &ConstConstructHook, MUIA_List_DestructHook, &StdDestructHook, MUIA_List_DisplayHook, &ConstDispHook, MUIA_List_CompareHook, &ConstCompHook, End, End, End, // Constants group End, // Constants window End; // Application if(AppObject && InputGroup && OutputGroup) { int i; // Set cycle chain for Prefs window DoMethod(PrefsWindow, MUIM_Window_SetCycleChain, DFuncObj, DInObj, InOutObj, TypeObj, SizeObj, SignObj, AngleObj, LinesObj, ClipObj, LookObj, ClearInObj, FlushObj, StdWinObj, LinWinObj, ConstWinObj, OkObj, SaveObj, CancelObj, NULL); // Set stuff for main window DoMethod(MainWindow, MUIM_Notify, MUIA_Window_CloseRequest, TRUE, AppObject, 2, MUIM_Application_ReturnID, ID_QUIT); // Set default object for window set(MainWindow, MUIA_Window_DefaultObject, InputString); // // Do the Gadgets // // Set ID for String-Input DoMethod(InputString, MUIM_Notify, MUIA_String_Acknowledge, MUIV_EveryTime, AppObject, 2, MUIM_Application_ReturnID, ID_INPUT); // Attach Output box to StringGadget set(InputString, MUIA_String_AttachedList, OutputBox); // Set up control gadgets to call Hook for(i = 0; i < GadNum; i++) { // First call the Hook when released DoMethod(InGads[i], MUIM_Notify, MUIA_Pressed, FALSE, AppObject, 3, MUIM_CallHook, &InsertHook, InGads[i]); // The reactivate the string gadget DoMethod(InGads[i], MUIM_Notify, MUIA_Pressed, FALSE, MainWindow, 3, MUIM_Set, MUIA_Window_ActiveObject, InputString); } // Return ID for Exe gadget DoMethod(ExeObj, MUIM_Notify, MUIA_Pressed, FALSE, AppObject, 2, MUIM_Application_ReturnID, ID_EXEC); // Return ID for CLR gadget DoMethod(ClrObj, MUIM_Notify, MUIA_Pressed, FALSE, AppObject, 2, MUIM_Application_ReturnID, ID_CLEAR); // Return ID for ACLR gadget DoMethod(AllClrObj, MUIM_Notify, MUIA_Pressed, FALSE, AppObject, 2, MUIM_Application_ReturnID, ID_ALLCLEAR); // Do the Prefs window DoMethod(PrefsWindow, MUIM_Notify, MUIA_Window_CloseRequest, TRUE, AppObject, 2, MUIM_Application_ReturnID, ID_PREFS_QUIT); // On OK, first save the prefs to env: DoMethod(OkObj, MUIM_Notify, MUIA_Pressed, FALSE, AppObject, 2, MUIM_Application_Save, MUIV_Application_Save_ENV); // Then signal the main program, that new prefs are available DoMethod(OkObj, MUIM_Notify, MUIA_Pressed, FALSE, AppObject, 2, MUIM_Application_ReturnID, ID_PREFS_NEW); // On SAVE, save both to env: and envarc: DoMethod(SaveObj, MUIM_Notify, MUIA_Pressed, FALSE, AppObject, 2, MUIM_Application_Save, MUIV_Application_Save_ENV); DoMethod(SaveObj, MUIM_Notify, MUIA_Pressed, FALSE, AppObject, 2, MUIM_Application_Save, MUIV_Application_Save_ENVARC); // New prefs available DoMethod(SaveObj, MUIM_Notify, MUIA_Pressed, FALSE, AppObject, 2, MUIM_Application_ReturnID, ID_PREFS_NEW); // On Cancel, simply close the window DoMethod(CancelObj, MUIM_Notify, MUIA_Pressed, FALSE, AppObject, 2, MUIM_Application_ReturnID, ID_PREFS_QUIT); // Do the Std.Deviation window DoMethod(StdHistoryWindow, MUIM_Notify, MUIA_Window_CloseRequest, TRUE, AppObject, 2, MUIM_Application_ReturnID, ID_CLOSESTD); // Do the Lin.Regression window DoMethod(LinHistoryWindow, MUIM_Notify, MUIA_Window_CloseRequest, TRUE, AppObject, 2, MUIM_Application_ReturnID, ID_CLOSELIN); // Do the Constants window DoMethod(ConstantsWindow, MUIM_Notify, MUIA_Window_CloseRequest, TRUE, AppObject, 2, MUIM_Application_ReturnID, ID_CLOSECONST); DoMethod(ConstantsObj, MUIM_Notify, MUIA_Listview_DoubleClick, TRUE, AppObject, 2, MUIM_Application_ReturnID, ID_SELECTCONST); // Load the settings DoMethod(AppObject, MUIM_Application_Load, MUIV_Application_Load_ENV); // Load defaults into variables get(DFuncObj, MUIA_Selected, &Dummy); NoFuncs = Dummy; get(DInObj, MUIA_Selected, &Dummy); NoInput = Dummy; get(InOutObj, MUIA_Cycle_Active, &Dummy); InOutLook = Dummy; get(TypeObj, MUIA_Cycle_Active, &Dummy); IntType = RXIntType = Dummy + ID_DECIMAL; get(SizeObj, MUIA_Cycle_Active, &Dummy); IntBase = RXIntBase = Dummy + ID_8BIT; get(SignObj, MUIA_Cycle_Active, &Dummy); IntSign = RXIntSign = Dummy + ID_SIGNED; get(AngleObj, MUIA_Cycle_Active, &Dummy); IntAngle = RXIntAngle = Dummy + ID_RAD; get(LinesObj, MUIA_Slider_Level, &Dummy); HistLines = Dummy; get(ClipObj, MUIA_Slider_Level, &Dummy); ClipUnit = Dummy; get(LookObj, MUIA_Cycle_Active, &Dummy); ListLook = Dummy; get(ClearInObj, MUIA_Selected, &Dummy); ClearInput = Dummy; get(FlushObj, MUIA_Selected, &Dummy); FlushOnExit = Dummy; get(StdWinObj, MUIA_Selected, &Dummy); OpenStdWin = Dummy; get(LinWinObj, MUIA_Selected, &Dummy); OpenLinWin = Dummy; get(ConstWinObj, MUIA_Selected, &Dummy); OpenConstWin = Dummy; // Add in/out gadgets in correct order if(!InOutLook) { DoMethod(InOutGroup, OM_ADDMEMBER, InputGroup); DoMethod(InOutGroup, OM_ADDMEMBER, OutputGroup); } else { DoMethod(InOutGroup, OM_ADDMEMBER, OutputGroup); DoMethod(InOutGroup, OM_ADDMEMBER, InputGroup); } // Set cycle chain for main window _AFTER_ String and ListView have been added SetMainWinCycle(); // Set listview look set(OutputBox, MUIA_List_Format, LookTemplates[ListLook]); // Add/Remove groups as requested if(NoFuncs) DoMethod(MainGroup, OM_REMMEMBER, FuncGroup, TAG_DONE); if(NoInput) DoMethod(MainGroup, OM_REMMEMBER, InGroup, TAG_DONE); // Add constants to constants window for(i = 0; i < sizeof(ConstNames) / sizeof(char *); i++) { struct ConstNode New; New.Constant = ConstNames[i]; New.Value = ConstValues[i]; New.Notation = ConstNotation[i]; DoMethod(ConstantsObj, MUIM_List_InsertSingle, (APTR)&New, MUIV_List_Insert_Sorted); } // Set InputString to default object set(MainWindow, MUIA_Window_DefaultObject, InputString); // Open the main window set(MainWindow, MUIA_Window_Open, TRUE); // Now set Checkmarks DoMethod(MainWindow, MUIM_Window_SetMenuCheck, (ULONG)IntType, TRUE); DoMethod(MainWindow, MUIM_Window_SetMenuCheck, (ULONG)IntBase, TRUE); DoMethod(MainWindow, MUIM_Window_SetMenuCheck, (ULONG)IntSign, TRUE); DoMethod(MainWindow, MUIM_Window_SetMenuCheck, (ULONG)IntAngle, TRUE); // Which support window to open? if(OpenStdWin) set(StdHistoryWindow, MUIA_Window_Open, TRUE); if(OpenLinWin) set(LinHistoryWindow, MUIA_Window_Open, TRUE); if(OpenConstWin) set(ConstantsWindow, MUIA_Window_Open, TRUE); } else { if(InputGroup) MUI_DisposeObject(InputGroup); if(OutputGroup) MUI_DisposeObject(OutputGroup); } return((BOOL)(AppObject && InputGroup && OutputGroup)); } /**********************************************************************/ /* Close the main window again */ /**********************************************************************/ static void CloseMainWin(void) { // Dispose all Objects if(AppObject) { set(MainWindow, MUIA_Window_Open, FALSE); MUI_DisposeObject(AppObject); } // Dispose DiskObject if(DObject) FreeDiskObject(DObject); } /**********************************************************************/ /* Format the output string */ /**********************************************************************/ BOOL FormatOutput(BOOL ReFormat) { struct ListStruct NewEntry, *NewEntryPtr; ULONG ULong; BOOL RetVal = FALSE; // Set title of window first sprintf(Title, "MUIProCalc "REVISION" - "REVDATE" - %c%s%c %s", TypeChar[IntType - ID_DECIMAL], BaseStr[IntBase - ID_8BIT], SignChar[IntSign - ID_SIGNED], AngleStr[IntAngle - ID_RAD]); set(MainWindow, MUIA_Window_Title, Title); // Reformat entry ??? if(!ReFormat) { // Get the Gadgets buffer get(InputString, MUIA_String_Contents, &ParseInput); strcpy(NewEntry.Input, ParseInput); } else { ULONG NumEntries; // Get input from bottom entry within History get(OutputBox, MUIA_List_Entries, &NumEntries); DoMethod(OutputBox, MUIM_List_GetEntry, NumEntries - 1, &NewEntryPtr); NewEntry = *NewEntryPtr; ParseInput = NewEntry.Input; } if(strlen(ParseInput)) { // Allocate memory pool for parsing if((ParsePool = DoCreatePool(MEMF_CLEAR, 8192, 2048))) { // Reset scanner yychar = -2; yynerrs = 0; yy_init = 1; yy_start = 0; yyin = yyout = NULL; yy_current_buffer = NULL; ContainsUnDec = FALSE; // Do the parse yyparse(); // Delete pool again DoDeletePool(ParsePool); if(!yynerrs && !PError) { RetVal = TRUE; switch(IntType) { case ID_DECIMAL : { if(!ContainsUnDec) { if((Value > 4294967295.0) || (Value < -4294967295.0) || ((Value < 1.0) && (Value > -1.0))) sprintf(NewEntry.Output, "%g ", Value); else sprintf(NewEntry.Output, "%f ", Value); } else sprintf(NewEntry.Output, "%f ", Value); break; } case ID_HEXDECIMAL : { if((Value > 4294967295.0) || (Value < -4294967295.0)) strcpy(NewEntry.Output, "\0338Hex overflow"); else { sprintf(NewEntry.Output, "%f ", Value); // Now convert that output to a Long stcd_l(NewEntry.Output, (LONG *)&ULong); // And reconvert it to hex output ;) sprintf(NewEntry.Output, "$%x ", ULong); } break; } case ID_OCTAL : { if((Value > 4294967295.0) || (Value < -4294967295.0)) strcpy(NewEntry.Output, "\0338Octal overflow"); else { sprintf(NewEntry.Output, "%f ", Value); // First convert to Long stcd_l(NewEntry.Output, (LONG *)&ULong); // Now conbert to octal sprintf(NewEntry.Output, "\\%o ", ULong); } break; } case ID_BINARY : { char AddOn[2]; int i, NumBits; if((Value > 4294967295.0) || (Value < -4294967295.0)) strcpy(NewEntry.Output, "\0338Binary overflow"); else { sprintf(NewEntry.Output, "%f ", Value); switch(IntBase) { case ID_8BIT : { NumBits = 8; break; } case ID_16BIT : { NumBits = 16; break; } case ID_32BIT : { NumBits = 32; break; } } // First convert to Long stcd_l(NewEntry.Output, (LONG *)&ULong); // Set type identifier strcpy(NewEntry.Output, "&"); // Now convert to binary output AddOn[1] = '\0'; for(i = NumBits - 1; i >= 0; i--) { AddOn[0] = ((ULong & (1L << i)) ? (ULong & (1L << i)) - (1L << i) + '1' : '0'); strcat(NewEntry.Output, AddOn); // 4 Bits done -> insert a space ;) if(!(i % 4)) strcat(NewEntry.Output, " "); } } break; } } } else { if(PError == ERR_UNKNOWN_CHR) sprintf(NewEntry.Output, "\0338Unknown char in column %d", PColumn); else if(PError == ERR_DIVBY0) sprintf(NewEntry.Output, "\0338Division by Zero in column %d", PColumn); else if(PError == ERR_OVERFLOW) sprintf(NewEntry.Output, "\0338Overflow error in column %d", PColumn); else if(PError == ERR_UNDERFLOW) sprintf(NewEntry.Output, "\0338Underflow error in column %d", PColumn); else if(PError == ERR_NOMEM) strcpy(NewEntry.Output, "\0338Insufficient memory"); else sprintf(NewEntry.Output, "\0338Syntax error in column %d", PColumn); } // On "History-Overflow" remove top entry get(OutputBox, MUIA_List_Entries, &ULong); if(ULong > HistLines) DoMethod(OutputBox, MUIM_List_Remove, MUIV_List_Remove_First); NewEntryPtr = &NewEntry; DoMethod(OutputBox, MUIM_List_Insert, &NewEntryPtr, 1, MUIV_List_Insert_Bottom); set(OutputBox, MUIA_List_Active, MUIV_List_Active_Bottom); if(ClearInput) set(InputString, MUIA_String_Contents, ""); } else MUI_Request(AppObject, MainWindow, NULL, NULL, "*Ok", "Sorry, no memory for parsing"); } set(MainWindow, MUIA_Window_ActiveObject, InputString); return(RetVal); } /**********************************************************************/ /* Insert Hook for function gadgets */ /**********************************************************************/ static ULONG __saveds __asm InsertFunc(register __a0 struct Hook *MyHook, register __a2 APTR Obj, register __a1 APTR *Data) { char *Text; // Get Text of selected gadget get(*Data, MUIA_Text_Contents, &Text); // Insert text at cursor position InsertText(Text); return(0); } /**********************************************************************/ /* Hook-Function for generating a new entry for the LV */ /**********************************************************************/ static ULONG __saveds __asm DispConstructFunc(register __a0 struct Hook *MyHook, register __a2 APTR MemPool, register __a1 struct ListStruct *Data) { struct ListStruct *New; if((New = AllocVec(sizeof(struct ListStruct), MEMF_CLEAR))) { *New = *Data; return((ULONG)New); } return(NULL); } /**********************************************************************/ /* Hook-Function for removing a new entry from the LV */ /**********************************************************************/ static ULONG __saveds __asm StdDestructFunc(register __a0 struct Hook *MyHook, register __a2 APTR MemPool, register __a1 struct ListStruct *Data) { FreeVec(Data); return(0); } /**********************************************************************/ /* Put pointers into array */ /**********************************************************************/ static ULONG __saveds __asm DispViewFunc(register __a0 struct Hook *MyHook, register __a2 char **array, register __a1 struct ListStruct *Data) { *array++ = Data->Input; *array = Data->Output; return(NULL); } /**********************************************************************/ /* Construct history entry for std/lin */ /**********************************************************************/ static ULONG __saveds __asm HistoryConstructFunc(register __a0 struct Hook *MyHook, register __a2 APTR MemPool, register __a1 struct DoubleNode *Data) { struct DoubleNode *New; if((New = AllocVec(sizeof(struct DoubleNode), MEMF_CLEAR))) { *New = *Data; return((ULONG)New); } return(NULL); } /**********************************************************************/ /* Display std deviation */ /**********************************************************************/ static ULONG __saveds __asm DeviationDispFunc(register __a0 struct Hook *MyHook, register __a2 char **array, register __a1 struct DoubleNode *Data) { static char Buffer1[32], Buffer2[64]; if(Data) { sprintf(Buffer1, "Value %ld:", array[-1] + 1); sprintf(Buffer2, "%g", Data->ValueX); *array++ = Buffer1; *array = Buffer2; } else { *array++ = "Element"; *array = "X-Value"; }; return(0); } /**********************************************************************/ /* Display lin regression */ /**********************************************************************/ static ULONG __saveds __asm RegressionDispFunc(register __a0 struct Hook *MyHook, register __a2 char **array, register __a1 struct DoubleNode *Data) { static char Buffer1[32], Buffer2[64], Buffer3[64]; if(Data) { sprintf(Buffer1, "Pair %ld:", array[-1] + 1); sprintf(Buffer2, "%g", Data->ValueX); sprintf(Buffer3, "%g", Data->ValueY); *array++ = Buffer1; *array++ = Buffer2; *array = Buffer3; } else { *array++ = "Element"; *array++ = "X-Value"; *array = "Y-Value"; } return(0); } /**********************************************************************/ /* Construct constant entry */ /**********************************************************************/ static ULONG __saveds __asm ConstConstructFunc(register __a0 struct Hook *MyHook, register __a2 APTR MemPool, register __a1 struct ConstNode *Data) { struct ConstNode *New; if((New = AllocVec(sizeof(struct ConstNode), MEMF_CLEAR))) { *New = *Data; return((ULONG)New); } return(NULL); } /**********************************************************************/ /* Display constant entry */ /**********************************************************************/ static ULONG __saveds __asm ConstDispFunc(register __a0 struct Hook *MyHook, register __a2 char **array, register __a1 struct ConstNode *Data) { if(Data) { *array++ = Data->Constant; *array++ = Data->Value; *array = Data->Notation; } else { *array++ = "Name"; *array++ = "Value"; *array = "Notation"; } return(0); } /**********************************************************************/ /* Compare two constants entries (for sorting) */ /**********************************************************************/ static LONG __saveds __asm ConstCompFunc(register __a1 struct ConstNode *Data1, register __a2 struct ConstNode *Data2) { return(Stricmp(Data1->Constant, Data2->Constant)); } /**********************************************************************/ /* Insert a text-string at the current cursor-position */ /**********************************************************************/ static void InsertText(char *NewText) { char NewBuff[258], *Text; ULONG CursorPos; // No Error ?!? if(strncmp(NewText, "\0338", 2)) { // Get current cursor Position within Input-String get(InputString, MUIA_String_BufferPos, &CursorPos); get(InputString, MUIA_String_Contents, &Text); // Copy to buffer, because the string`s contents may not be // directly altered strcpy(NewBuff, Text); // insert to cursor position if((strlen(NewBuff) + strlen(NewText)) < 256) strins(&NewBuff[CursorPos], NewText); else DisplayBeep(NULL); // Set new string for String-Gadget set(InputString, MUIA_String_Contents, NewBuff); } set(MainWindow, MUIA_Window_ActiveObject, InputString); } /**********************************************************************/ /* Write the given entry to the specified clipboard */ /**********************************************************************/ static void WriteClip(char *Entry) { struct IFFHandle *Handle; BOOL Ok = FALSE; // Length > 0 ??? if(strlen(Entry) && strncmp(Entry, "\0338", 2)) { // Try to obtain an IFF Handle if((Handle = AllocIFF())) { // Open needed clipboard unit if((Handle->iff_Stream = (ULONG)OpenClipboard(ClipUnit))) { InitIFFasClip(Handle); // Open Handle for write access if(!OpenIFF(Handle, IFFF_WRITE)) { // Push first chunk (FORM) if(!PushChunk(Handle, ID_FTXT, ID_FORM, IFFSIZE_UNKNOWN)) { // Push chars chunk if(!PushChunk(Handle, 0, ID_CHRS, IFFSIZE_UNKNOWN)) { // Write data to clipboard if(WriteChunkBytes(Handle, Entry, strlen(Entry)) == strlen(Entry)) { // Pop contents chunk if(!PopChunk(Handle)) Ok = TRUE; } } // Pop FORM chunk if(Ok) PopChunk(Handle); } // Close IFF Handle CloseIFF(Handle); } // Close Clipboard again CloseClipboard((struct ClipboardHandle *)Handle->iff_Stream); } // Free IFF Handle FreeIFF(Handle); } } set(MainWindow, MUIA_Window_ActiveObject, InputString); } /**********************************************************************/ /* Delete an entry from history */ /**********************************************************************/ void DeleteHistory(LONG Entry) { // No entry specified, delete active entry if(Entry == -1) DoMethod(OutputBox, MUIM_List_Remove, MUIV_List_Remove_Active); else if(Entry == -2) DoMethod(OutputBox, MUIM_List_Remove, MUIV_List_Remove_First); else if(Entry == -3) DoMethod(OutputBox, MUIM_List_Remove, MUIV_List_Remove_Last); else DoMethod(OutputBox, MUIM_List_Remove, Entry); } /**********************************************************************/ /* This is the main controlling routine */ /**********************************************************************/ static void HandleInputs(void) { ULONG MySig, ReturnID; BOOL GoOn = TRUE; while(GoOn) { switch(ReturnID = DoMethod(AppObject, MUIM_Application_Input, &MySig)) { // Input done ;) case ID_INPUT : { FormatOutput(FALSE); break; } // Translate input case ID_EXEC : { FormatOutput(FALSE); break; } // Clear input case ID_CLEAR : { set(InputString, MUIA_String_Contents, ""); FormatOutput(FALSE); break; } // Clear input AND Memory case ID_ALLCLEAR : { IMem = JMem = KMem = LMem = MMem = NMem = OMem = PMem = QMem = RMem = SMem = TMem = UMem = VMem = WMem = XMem = YMem = ZMem = 0.0; FreeList(&StandardList); FreeList(&LinearList); UpdateHistoryWindow(FALSE); UpdateHistoryWindow(TRUE); set(InputString, MUIA_String_Contents, ""); FormatOutput(FALSE); break; } // Open Prefs window case ID_PREFS : { set(PrefsWindow, MUIA_Window_Open, TRUE); break; } // Display About case ID_ABOUT : { MUI_Request(AppObject, MainWindow, 0, NULL, "*Okay", "\033cMUIProCalc v%ld.%ld, written by Kai Iske, GiftWare\n\n" "\0338Powerful calculator, also suited for programmers\n\n" "\033l\0332To contact me, write to:\n\033c" "Kai Iske, Brucknerstrasse 18, 63452 Hanau, Germany\n" "Tel.: +49-(0)6181-850181\n\n" "\033lor use electronical mail\n\033c" "iske@informatik.uni-frankfurt.de\n" "Kai Iske, 100524,1201\n" "Kai Iske, 2:244/6302.11\n" "KAI@SWEET.RHEIN-MAIN.DE\n\n" "\033c\0332MUIProCalc is a MUI-Application\n" "MUI is © Stefan Stuntz", VERNUM, REVNUM, TAG_DONE); set(MainWindow, MUIA_Window_ActiveObject, InputString); break; } // Quit the program case ID_QUIT : case MUIV_Application_ReturnID_Quit : { set(PrefsWindow, MUIA_Window_Open, FALSE); GoOn = FALSE; break; } // Pick left entry from History ??? case ID_PICKLEFT : { struct ListStruct *LSV; ULONG ClickCol; DoMethod(OutputBox, MUIM_List_GetEntry, MUIV_List_GetEntry_Active, &LSV); if(LSV) { if(ListLook == 0 || ListLook == 2) ClickCol = 0; else if(ListLook == 1 || ListLook == 3) ClickCol = 1; if(!ClickCol) InsertText(LSV->Input); else InsertText(LSV->Output); } break; } // Pick right entry from History ??? case ID_PICKRIGHT : { struct ListStruct *LSV; ULONG ClickCol; DoMethod(OutputBox, MUIM_List_GetEntry, MUIV_List_GetEntry_Active, &LSV); if(LSV) { if(ListLook == 0 || ListLook == 3) ClickCol = 1; else if(ListLook == 1 || ListLook == 2) ClickCol = 0; if(!ClickCol) InsertText(LSV->Input); else InsertText(LSV->Output); } break; } // Copy left history entry to clipboard case ID_CLIPCUTLEFT : { struct ListStruct *LSV; ULONG ClickCol; DoMethod(OutputBox, MUIM_List_GetEntry, MUIV_List_GetEntry_Active, &LSV); if(LSV) { if(ListLook == 0 || ListLook == 2) ClickCol = 0; else if(ListLook == 1 || ListLook == 3) ClickCol = 1; if(!ClickCol) WriteClip(LSV->Input); else WriteClip(LSV->Output); } break; } // Copy left history entry to clipboard case ID_CLIPCUTRIGHT : { struct ListStruct *LSV; ULONG ClickCol; DoMethod(OutputBox, MUIM_List_GetEntry, MUIV_List_GetEntry_Active, &LSV); if(LSV) { if(ListLook == 0 || ListLook == 3) ClickCol = 1; else if(ListLook == 1 || ListLook == 2) ClickCol = 0; if(!ClickCol) WriteClip(LSV->Input); else WriteClip(LSV->Output); } break; } // Delete current entry from list case ID_DELHISTORY : { DeleteHistory(-1); break; } // Check Output Type case ID_DECIMAL : case ID_HEXDECIMAL : case ID_OCTAL : case ID_BINARY : { DoMethod(MainWindow, MUIM_Window_SetMenuCheck, (ULONG)IntType, FALSE); IntType = ReturnID; DoMethod(MainWindow, MUIM_Window_SetMenuCheck, (ULONG)IntType, TRUE); FormatOutput(TRUE); break; } // Check for Bases case ID_8BIT : case ID_16BIT : case ID_32BIT : { DoMethod(MainWindow, MUIM_Window_SetMenuCheck, (ULONG)IntBase, FALSE); IntBase = ReturnID; DoMethod(MainWindow, MUIM_Window_SetMenuCheck, (ULONG)IntBase, TRUE); FormatOutput(TRUE); break; } // Check for Signs case ID_SIGNED : case ID_UNSIGNED : { DoMethod(MainWindow, MUIM_Window_SetMenuCheck, (ULONG)IntSign, FALSE); IntSign = ReturnID; DoMethod(MainWindow, MUIM_Window_SetMenuCheck, (ULONG)IntSign, TRUE); FormatOutput(TRUE); break; } // Check angle case ID_RAD : case ID_DEG : case ID_GRAD : { DoMethod(MainWindow, MUIM_Window_SetMenuCheck, (ULONG)IntAngle, FALSE); IntAngle = ReturnID; DoMethod(MainWindow, MUIM_Window_SetMenuCheck, (ULONG)IntAngle, TRUE); FormatOutput(TRUE); break; } // Check for window open/close case ID_STDHISTORY : { set(StdHistoryWindow, MUIA_Window_Open, TRUE); break; } case ID_CLOSESTD : { set(StdHistoryWindow, MUIA_Window_Open, FALSE); break; } case ID_LINHISTORY : { set(LinHistoryWindow, MUIA_Window_Open, TRUE); break; } case ID_CLOSELIN : { set(LinHistoryWindow, MUIA_Window_Open, FALSE); break; } case ID_CONSTANTS : { set(ConstantsWindow, MUIA_Window_Open, TRUE); break; } case ID_CLOSECONST : { set(ConstantsWindow, MUIA_Window_Open, FALSE); break; } case ID_SELECTCONST : { struct ConstNode *Select; DoMethod(ConstantsObj, MUIM_List_GetEntry, MUIV_List_GetEntry_Active, &Select); if(Select) InsertText(Select->Value); break; } // // This is for the Prefs window // // Close prefs window case ID_PREFS_QUIT : { set(PrefsWindow, MUIA_Window_Open, FALSE); set(MainWindow, MUIA_Window_ActiveObject, InputString); // Reset preferences set(InOutObj, MUIA_Cycle_Active, InOutLook); set(DFuncObj, MUIA_Selected, NoFuncs); set(DInObj, MUIA_Selected, NoInput); set(TypeObj, MUIA_Cycle_Active, (ULONG)IntType); set(SizeObj, MUIA_Cycle_Active, (ULONG)IntBase); set(SignObj, MUIA_Cycle_Active, (ULONG)IntSign); set(AngleObj, MUIA_Cycle_Active, (ULONG)IntAngle); set(LinesObj, MUIA_Slider_Level, (ULONG)HistLines); set(ClipObj, MUIA_Slider_Level, (ULONG)ClipUnit); set(LookObj, MUIA_Cycle_Active, (ULONG)ListLook); set(ClearInObj, MUIA_Selected, (ULONG)ClearInput); set(FlushObj, MUIA_Selected, (ULONG)FlushOnExit); set(StdWinObj, MUIA_Selected, (ULONG)OpenStdWin); set(LinWinObj, MUIA_Selected, (ULONG)OpenLinWin); set(ConstWinObj, MUIA_Selected, (ULONG)OpenConstWin); break; } case ID_PREFS_NEW : { ULONG NewInOut, NewFunc, NewInput, NewLook; // Get clear flag get(ClearInObj, MUIA_Selected, &NewFunc); ClearInput = NewFunc; // Get flush flag get(FlushObj, MUIA_Selected, &NewFunc); FlushOnExit = NewFunc; // Get window flags get(StdWinObj, MUIA_Selected, &NewFunc); OpenStdWin = NewFunc; get(LinWinObj, MUIA_Selected, &NewFunc); OpenLinWin = NewFunc; get(ConstWinObj, MUIA_Selected, &NewFunc); OpenConstWin = NewFunc; // Get ClipBoard unit get(ClipObj, MUIA_Slider_Level, &NewFunc); ClipUnit = NewFunc; set(PrefsWindow, MUIA_Window_Open, FALSE); get(LinesObj, MUIA_Slider_Level, &NewFunc); HistLines = NewFunc; // Rebuild History get(OutputBox, MUIA_List_Entries, &NewInput); while(NewInput > HistLines) { DoMethod(OutputBox, MUIM_List_Remove, MUIV_List_Remove_First); NewInput--; } // Check for changes on layout get(InOutObj, MUIA_Cycle_Active, &NewInOut); get(DFuncObj, MUIA_Selected, &NewFunc); get(DInObj, MUIA_Selected, &NewInput); get(LookObj, MUIA_Cycle_Active, &NewLook); if((NewInOut != InOutLook) || (NewFunc != NoFuncs) || (NewInput != NoInput)) { // Close main window first set(MainWindow, MUIA_Window_Open, FALSE); // Rearrange input output order if(NewInOut != InOutLook) { InOutLook = NewInOut; // Remove groups first DoMethod(InOutGroup, OM_REMMEMBER, InputGroup); DoMethod(InOutGroup, OM_REMMEMBER, OutputGroup); // Readd groups if(!InOutLook) { DoMethod(InOutGroup, OM_ADDMEMBER, InputGroup); DoMethod(InOutGroup, OM_ADDMEMBER, OutputGroup); } else { DoMethod(InOutGroup, OM_ADDMEMBER, OutputGroup); DoMethod(InOutGroup, OM_ADDMEMBER, InputGroup); } // Reset cycle order SetMainWinCycle(); } // First remove existent groups from main group if(!NoFuncs) DoMethod(MainGroup, OM_REMMEMBER, FuncGroup); if(!NoInput) DoMethod(MainGroup, OM_REMMEMBER, InGroup); // Add Function group when needed NoFuncs = NewFunc; if(!NoFuncs) DoMethod(MainGroup, OM_ADDMEMBER, FuncGroup); // Add Input group when needed NoInput = NewInput; if(!NoInput) DoMethod(MainGroup, OM_ADDMEMBER, InGroup); // Reopen window set(MainWindow, MUIA_Window_Open, TRUE); } if(NewLook != ListLook) { // Set listview look ListLook = NewLook; set(OutputBox, MUIA_List_Format, LookTemplates[ListLook]); } set(MainWindow, MUIA_Window_Activate, TRUE); set(MainWindow, MUIA_Window_ActiveObject, InputString); break; } } if(GoOn && MySig) Wait(MySig); } } /**********************************************************************/ /* Free a list */ /**********************************************************************/ void FreeList(struct List *Lst) { struct Node *DelNode; while((DelNode = RemHead(Lst))) FreeVec(DelNode); } /**********************************************************************/ /* Update one of the history windows */ /**********************************************************************/ void UpdateHistoryWindow(BOOL LinearHistory) { struct List *Lst = (LinearHistory ? &LinearList : &StandardList); struct DoubleNode *Check = (struct DoubleNode *)Lst->lh_Head; APTR Obj = (LinearHistory ? LinHistoryObj : StdHistoryObj); // Clear old list DoMethod(Obj, MUIM_List_Clear, NULL); // Add new entries while(Check->Link.ln_Succ) { DoMethod(Obj, MUIM_List_InsertSingle, (APTR)Check, MUIV_List_Insert_Bottom); Check = (struct DoubleNode *)Check->Link.ln_Succ; } }