home *** CD-ROM | disk | FTP | other *** search
- /****************************************************************
- * *
- * Filename : Main.c *
- * *
- *****************************************************************
- * *
- * Comment : Diese Datei beinhaltet alle Routinen für *
- * starten und beendigen des Demoprogrammes. *
- * Es werden hier folgende globalen Definitionen *
- * gemacht: *
- * *
- * IntuitionBase -> Basis von Intuitionlibrary *
- * GfxBase -> Basis von Graphicslibrary *
- * Sc -> Screenpointer *
- * Mw -> Mainwindowpointer *
- * Vp -> Viewportpolinter *
- * Rp -> Rastportpointer *
- * *
- * newscreen -> NewScreenstruktur *
- * mainwindow -> NewWindowstruktur *
- * Menu1 -> Menustruktur *
- * *
- * Rev : V1.0 *
- * *
- * History : V1.0 erstellen dieses Files 01.09.89 *
- * *
- * Doc : *
- * *
- * Bugs : keine bekannten *
- * *
- * Autor : Oesch Silvano *
- * *
- * Datum : 01.09.89 *
- * *
- ****************************************************************/
-
-
- /****************************************************************
- * *
- * allgemeine Includedateien *
- * *
- ****************************************************************/
-
- #include <ctype.h>
- #include <string.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <math.h>
- #include <exec/alerts.h>
- #include <exec/types.h>
- #include <exec/io.h>
- #include <intuition/intuition.h>
- #include <intuition/intuitionbase.h>
- #include <libraries/dos.h>
- #include <exec/libraries.h>
- #include <libraries/dosextens.h>
- #include <mylib/mylib.h>
- #include <libraries/reqbase.h>
- #include <proto/reqproto.h>
-
- /****************************************************************
- * *
- * programmspezifische Includedateien *
- * *
- ****************************************************************/
-
- char xminval[] = "Xmin = -5 ";
- char xmaxval[] = "Xmax = 5 ";
- char yminval[] = "Ymin = -5 ";
- char ymaxval[] = "Ymax = 5 ";
- char zminval[] = "Zmin = -5 ";
- char zmaxval[] = "Zmax = 5 ";
-
- char *valtext[] =
- {
- xminval,
- xmaxval,
- yminval,
- ymaxval,
- zminval,
- zmaxval
- };
-
- #include "Definitions.h"
- #include "FileIO.h"
- #include "menu.h" /* init. Menustruktur */
- #include "Texte.h"
- #include "Pointer.h"
- #include "Function.h"
-
- #include <Plot/PlotLib.h>
- #include <Plot/Plot.h>
- #include <Plot/Plerror.h>
-
- char about[] = " Function - P L O T \n"
- " ------------------ \n"
- " \n"
- " Ein Demonstrationsprogramm für die \n"
- " die Plotlibrary. Diese Library \n"
- " wurde geschrieben von \n"
- " Silvano Oesch \n";
-
- /****************************************************************
- * *
- * globale Definitionen *
- * *
- ****************************************************************/
-
- #define MENUTITEL MenuItem33
- #define MENUGITTER MenuItem1
- #define MENUAUTOVAL MenuItem2
- #define MENUCROSS MenuItem4
- #define MENUHIDDEN MenuItem5
- #define MENUZAXENAME SubItem3
- #define MENUZAXEUNIT SubItem4
- #define MENUYAXENAME SubItem5
- #define MENUYAXEUNIT SubItem6
- #define MENUXAXENAME SubItem7
- #define MENUXAXEUNIT SubItem8
-
- struct Process *myprocess;
- APTR olderrorwindow;
- struct FileRequester mfr;
-
- char filename[MAXPATH+FCHARS+2];
-
- int redraw = FALSE,
- loop = TRUE,
- sctitel = TRUE;
-
- DATA myfct(DATA x);
- DATA quadrat(DATA x);
-
- DATA (*funcptr[])() = /* Array von Fkt. adressen */
- {
- sin,
- cos,
- myfct,
- quadrat,
- log
- };
-
- /****************************************************************
- * *
- * externe Definitionen *
- * *
- ****************************************************************/
-
- extern struct ReqBLib *ReqBase;
-
- extern struct Screen *Sc;
- extern struct Window *Mw;
- extern struct ViewPort *Vp;
- extern struct Rastport *Rp;
- extern struct Rastport *WRp;
-
- extern int SCREENHOEHE,
- plerr;
-
- extern struct Plot *plot;
-
-
- void setminmaxval()
- {
- int i,erfolg;
- DATA value;
-
- for (i=0;i<6;i++)
- {
- erfolg = get_value(i,&value);
- if (erfolg)
- sprintf(&valtext[i][7],"% .4lg",value);
- }
- }
-
-
- DATA myfct(x) /* eine eigene Fkt */
- DATA x;
- {
- if (x == 0.0)
- return(1.0);
- else
- return((DATA)(sin(x)/x));
- }
-
- DATA quadrat(x) /* eine eigene Fkt */
- DATA x;
- {
- return((DATA)(x*x));
- }
-
- void funktionen(smenu)
- int smenu;
- {
-
- DATA min,max;
- char buffer[80];
- int id,erfolg;
-
- switch(smenu)
- {
- case FORMEL:
- SimpleRequest(funktion);
- break;
- default:
- if (GetFloat("Bitte Startwert eingeben",&min))
- {
- if (GetFloat("Bitte Endwert eingeben",&max))
- {
- id = get_data(funcptr[smenu-1],min,max,500);
- if (id == FALSE)
- SimpleRequest(get_ploterror());
- else
- {
- do
- {
- erfolg = GetString(buffer,"Kurvenname",NULL,20,40);
- }
- while(!erfolg);
- set_curvename(id,buffer);
- redraw = TRUE;
- setminmaxval();
- }
- }
- }
- break;
- }
- }
-
-
- void resetflags()
- {
- MENUGITTER.Flags &= ~CHECKED;
- MENUAUTOVAL.Flags &= ~CHECKED;
- }
-
- void filemenu(smenu)
- int smenu;
- {
- int erfolg,
- id;
- char buffer[80];
-
- switch (smenu)
- {
- case LOESCHEN:
- erfolg = TwoGadRequest("Alles löschen !\nSind Sie sicher ?\n");
- if (erfolg == TRUE)
- {
- erfolg = del_data(DELALL,NULL);
- if (erfolg == FALSE)
- SimpleRequest(get_ploterror());
- else
- {
- Move(WRp,0,0);
- ClearScreen(WRp);
- resetflags();
- setminmaxval();
- }
- }
- break;
-
- case LADEN:
- mfr.Title = "Laden";
- erfolg = FileRequester(&mfr);
- if (erfolg == TRUE)
- {
- id = load_data(filename,NULL);
- if (id == FALSE)
- SimpleRequest(get_ploterror());
- else
- {
- do
- {
- buffer[0] = 0x00;
- erfolg = GetString(buffer,"Kurvenname",NULL,20,40);
- }
- while(!erfolg);
- set_curvename(id,buffer);
- redraw = TRUE;
- setminmaxval();
- }
- }
- break;
-
- case DRUCKAUSGABE:
- erfolg = HardCopy(Sc,Mw);
- if ( erfolg == FALSE )
- SimpleRequest(hardcopy);
- break;
-
- case PLOTAUSGABE:
- erfolg = HpPlot(Sc);
- if ( erfolg == FALSE )
- SimpleRequest(get_ploterror());
- break;
-
- case BEENDEN:
- erfolg = TwoGadRequest("Programm beenden !\nSind Sie sicher ?\n");
- if (erfolg)
- {
- loop=FALSE;
- ClearPointer(Mw);
- }
- break;
-
- case HELP:
- erfolg = Help();
- if ( erfolg == FALSE )
- SimpleRequest(hardcopy);
- break;
-
- case INFORMATIONEN:
- SimpleRequest(about);
- break;
-
- default:
- SimpleRequest(funktion);
- break;
- }
- }
-
- void beschriftung (smenu,ssmenu)
- int smenu;
- {
- int erfolg;
- char buffer[50];
-
- switch (smenu)
- {
- case GRTITEL:
- if (MENUTITEL.Flags & CHECKED)
- {
- buffer[0] = 0x0;
- erfolg = GetString(buffer,"Titel der Graphik",NULL,28,49);
- if (erfolg)
- {
- erfolg = set_titel(buffer);
- if (erfolg == FALSE)
- SimpleRequest(get_ploterror());
- }
- if (erfolg == FALSE)
- MENUTITEL.Flags &= ~CHECKED;
- }
- else
- {
- erfolg = set_titel(NULL);
- if (erfolg == FALSE)
- {
- MENUTITEL.Flags |= CHECKED;
- SimpleRequest(get_ploterror());
- }
- }
- break;
-
- case X_ACHSE:
- if (ssmenu == XACHSENNAME)
- {
- if (MENUXAXENAME.Flags & CHECKED)
- {
- buffer[0] = 0x0;
- erfolg = GetString(buffer,"Titel der X-Achse",NULL,28,49);
- if (erfolg)
- {
- erfolg = set_axisname(XAXIS,buffer);
- if (erfolg == FALSE)
- SimpleRequest(get_ploterror());
- }
- if (erfolg == FALSE)
- MENUXAXENAME.Flags &= ~CHECKED;
- }
- else
- {
- erfolg = set_axisname(XAXIS,NULL);
- if (erfolg == FALSE)
- {
- MENUXAXENAME.Flags |= CHECKED;
- SimpleRequest(get_ploterror());
- }
- }
- }
- else
- {
- if (MENUXAXEUNIT.Flags & CHECKED)
- {
- buffer[0] = 0x0;
- erfolg = GetString(buffer,"Einheit der X-Achse",NULL,28,49);
- if (erfolg)
- {
- erfolg = set_unit(XAXIS,buffer);
- if (erfolg == FALSE)
- SimpleRequest(get_ploterror());
- }
- if (erfolg == FALSE)
- MENUXAXEUNIT.Flags &= ~CHECKED;
- }
- else
- {
- erfolg = set_unit(XAXIS,NULL);
- if (erfolg == FALSE)
- {
- MENUXAXEUNIT.Flags |= CHECKED;
- SimpleRequest(get_ploterror());
- }
- }
- }
- break;
-
- case Y_ACHSE:
- if (ssmenu == YACHSENNAME)
- {
- if (MENUYAXENAME.Flags & CHECKED)
- {
- buffer[0] = 0x0;
- erfolg = GetString(buffer,"Titel der Y-Achse",NULL,28,49);
- if (erfolg)
- {
- erfolg = set_axisname(YAXIS,buffer);
- if (erfolg == FALSE)
- SimpleRequest(get_ploterror());
- }
- if (erfolg == FALSE)
- MENUYAXENAME.Flags &= ~CHECKED;
- }
- else
- {
- erfolg = set_axisname(YAXIS,NULL);
- if (erfolg == FALSE)
- {
- MENUYAXENAME.Flags |= CHECKED;
- SimpleRequest(get_ploterror());
- }
- }
- }
- else
- {
- if (MENUYAXEUNIT.Flags & CHECKED)
- {
- buffer[0] = 0x0;
- erfolg = GetString(buffer,"Einheit der Y-Achse",NULL,28,49);
- if (erfolg)
- {
- erfolg = set_unit(YAXIS,buffer);
- if (erfolg == FALSE)
- SimpleRequest(get_ploterror());
- }
- if (erfolg == FALSE)
- MENUYAXEUNIT.Flags &= ~CHECKED;
- }
- else
- {
- erfolg = set_unit(YAXIS,NULL);
- if (erfolg == FALSE)
- {
- MENUYAXEUNIT.Flags |= CHECKED;
- SimpleRequest(get_ploterror());
- }
- }
- }
- break;
-
- case Z_ACHSE:
- if (ssmenu == ZACHSENNAME)
- {
- if (MENUZAXENAME.Flags & CHECKED)
- {
- buffer[0] = 0x0;
- erfolg = GetString(buffer,"Titel der Z-Achse",NULL,28,49);
- if (erfolg)
- {
- erfolg = set_axisname(ZAXIS,buffer);
- if (erfolg == FALSE)
- SimpleRequest(get_ploterror());
- }
- if (erfolg == FALSE)
- MENUZAXENAME.Flags &= ~CHECKED;
- }
- else
- {
- erfolg = set_axisname(ZAXIS,NULL);
- if (erfolg == FALSE)
- {
- MENUZAXENAME.Flags |= CHECKED;
- SimpleRequest(get_ploterror());
- }
- }
- }
- else
- {
- if (MENUZAXEUNIT.Flags & CHECKED)
- {
- buffer[0] = 0x0;
- erfolg = GetString(buffer,"Einheit der Z-Achse",NULL,28,49);
- if (erfolg)
- {
- erfolg = set_unit(ZAXIS,buffer);
- if (erfolg == FALSE)
- SimpleRequest(get_ploterror());
- }
- if (erfolg == FALSE)
- MENUZAXEUNIT.Flags &= ~CHECKED;
- }
- else
- {
- erfolg = set_unit(ZAXIS,NULL);
- if (erfolg == FALSE)
- {
- MENUZAXEUNIT.Flags |= CHECKED;
- SimpleRequest(get_ploterror());
- }
- }
- }
- break;
- default:
- SimpleRequest(funktion);
- break;
- }
- }
-
- void darstellung(smenu,ssmenu)
- int smenu,
- ssmenu;
- {
- int erfolg;
-
- switch (smenu)
- {
-
- case GITTER:
- if (MENUGITTER.Flags & CHECKED)
- {
- erfolg = set_grid(NOGRID);
- if (erfolg == FALSE)
- {
- MENUGITTER.Flags &= ~CHECKED;
- SimpleRequest(get_ploterror());
- }
- else
- redraw = TRUE;
- }
- else
- {
- erfolg = set_grid(GRID);
- if (erfolg == FALSE)
- {
- MENUGITTER.Flags |= CHECKED;
- SimpleRequest(get_ploterror());
- }
- else
- redraw = TRUE;
- }
- break;
-
- case AUTOVAL:
- if (MENUAUTOVAL.Flags & CHECKED)
- {
- erfolg = set_autoval(AUTOOFF);
- if (erfolg == FALSE)
- {
- MENUAUTOVAL.Flags &= ~CHECKED;
- SimpleRequest(get_ploterror());
- }
- }
- else
- {
- erfolg = set_autoval(AUTOON);
- if (erfolg == FALSE)
- {
- MENUAUTOVAL.Flags |= CHECKED;
- SimpleRequest(get_ploterror());
- }
- }
- break;
-
- case SCTITEL:
- sctitel ^= TRUE;
- if (sctitel)
- SetWindowTitles(Mw,(char *)-1,ScreenNamen);
- else
- SetWindowTitles(Mw,(char *)-1,NULL);
- ShowTitle(Sc,sctitel);
- break;
-
- case CROSSHATCH:
- if (MENUCROSS.Flags & CHECKED)
- {
- erfolg = set_3doptions(CROSHON);
- if (erfolg == FALSE)
- {
- MENUCROSS.Flags &= ~CHECKED;
- SimpleRequest(get_ploterror());
- }
- }
- else
- {
- erfolg = set_3doptions(CROSHOFF);
- if (erfolg == FALSE)
- {
- MENUCROSS.Flags |= CHECKED;
- SimpleRequest(get_ploterror());
- }
- }
- break;
-
- case HIDDENL:
- if (MENUHIDDEN.Flags & CHECKED)
- {
- erfolg = set_3doptions(HIDDENON);
- if (erfolg == FALSE)
- {
- MENUHIDDEN.Flags &= ~CHECKED;
- SimpleRequest(get_ploterror());
- }
- }
- else
- {
- erfolg = set_3doptions(HIDDENOFF);
- if (erfolg == FALSE)
- {
- MENUHIDDEN.Flags |= CHECKED;
- SimpleRequest(get_ploterror());
- }
- }
- break;
-
- case NEUZEICHNEN:
- redraw = TRUE;
- break;
-
- case AUFLOESUNG:
- myprocess->pr_WindowPtr = olderrorwindow;
- erfolg = Oeffne_Screen(ssmenu);
- olderrorwindow = myprocess->pr_WindowPtr;
- myprocess->pr_WindowPtr = (APTR)Mw;
- redraw = TRUE;
- break;
-
- case FARBENAENDERN:
- ColorRequester(1L);
- break;
-
- case FARBENLADEN:
- FarbenLaden();
- break;
-
- case FARBENSICHERN:
- FarbenSichern();
- break;
-
- default:
- SimpleRequest(funktion);
- break;
- }
- }
-
- void skala(menu)
- int menu;
- {
- int axis,mes,erfolg;
-
- axis = menu/3;
- mes = menu%3;
- erfolg = set_mes(axis+1,mes+1);
- if (erfolg == FALSE)
- SimpleRequest(get_ploterror());
- else
- redraw = TRUE;
- }
-
- void setnewval(smenu)
- {
- int erfolg;
- DATA value;
- switch(smenu)
- {
- case MSTAND:
- set_value(CLEAR,0.0);
- setminmaxval();
- break;
- default:
- if (GetFloat("Bitte neuen Grenzwert eingeben",&value))
- {
- erfolg = set_value(smenu,value);
- if (erfolg )
- sprintf(&valtext[smenu][7],"% .4lg",value);
- else
- SimpleRequest(get_ploterror());
- }
- break;
- }
- }
-
-
- int main(zahl,string)
- int zahl;
- char *string[];
- {
- struct IntuiMessage *message;
-
- ULONG class;
- USHORT code;
- int erfolg;
- int autodisp = TRUE;
- int menu,smenu,ssmenu;
-
- if (openall() == FALSE)
- {
- Delay (TIME);
- closeall();
- exit(5);
- }
-
- if (open_plot() == FALSE)
- {
- dis_ploterror();
- Delay (TIME);
- closeall();
- exit(5);
- }
-
- mfr.PathName = filename;
- mfr.Flags = FRQINFOGADGETM|FRQLOADINGM;
- mfr.dirnamescolor = 2;
- myprocess = (struct Process *)FindTask((char *)0);
- olderrorwindow = myprocess->pr_WindowPtr;
- myprocess->pr_WindowPtr = (APTR)Mw;
-
- while (loop)
- {
- message = (struct IntuiMessage *)GetMsg(Mw->UserPort);
- if (message==NULL)
- {
- ClearPointer(Mw);
- SetMenuStrip(Mw,&Menu1);
- Wait(1L << Mw->UserPort->mp_SigBit);
- continue;
- }
- class = message->Class;
- code = message->Code;
- ReplyMsg((struct Message *)message);
- ClearMenuStrip(Mw);
- SetPointer(Mw,sprite1,POINTERHOEHE,POINTERBREITE,
- POINTERSPOT,POINTERSPOT);
- switch (class)
- {
- case MENUPICK:
- if (code == MENUNULL) break;
- menu = MENUNUM(code);
- smenu = ITEMNUM(code);
- ssmenu = SUBNUM(code);
- if (menu == NOMENU) break;
- if (smenu == NOITEM) break;
- switch (menu)
- {
- case FILEMENU:
- filemenu(smenu);
- break;
-
- case BESCHRIFTUNG:
- beschriftung(smenu,ssmenu);
- break;
-
- case SKALA:
- skala(smenu);
- break;
-
- case GRENZEN:
- setnewval(smenu);
- break;
-
- case BERECHNUNG:
- funktionen(smenu);
- break;
-
- case DARSTELLUNG:
- darstellung(smenu,ssmenu);
- break;
-
- default:
- SimpleRequest(funktion);
- break;
- }
- break;
-
- default:
- SimpleRequest(funktion);
- break;
- }
-
- if ((redraw == TRUE)&&(autodisp == TRUE))
- {
- erfolg = display(SCREENOUT,GRAPHSET);
- redraw = FALSE;
- if ((erfolg == FALSE)&&(plerr != SEQDISP))
- SimpleRequest(get_ploterror());
- }
- }
- myprocess->pr_WindowPtr = (APTR)olderrorwindow;
- close_plot();
- closeall();
- exit (NULL);
- }
-