/********************************************************************/ /**** ****/ /**** ****/ /**** Program : Maus.c ****/ /**** ****/ /**** Version : 03.71 ****/ /**** ****/ /**** Erstversion : 14.08.1988 ****/ /**** ****/ /**** Letzte Änderung : 05.08.1990 ****/ /**** ****/ /**** Compiliert mit : siehe MAKEFILE ****/ /**** ****/ /**** Gelinkt mit : siehe MAKEFILE ****/ /**** ****/ /********************************************************************/ /**** ****/ /**** ****/ /**** Copyright by Rüdiger Dreier ****/ /**** ****/ /**** ****/ /********************************************************************/ /* Einbinden der Includes */ #ifdef DEBUG #include "Plotter.h" #include #endif #include #include #include #include /* Variablendeklaration für Abfragefenster */ struct RastPort *RastPort2; struct Window *Window2; UBYTE MinXText[8],MaxXText[8],MinYText[8],MaxYText[8]; /* Definition der Umrandungen */ SHORT paare1[]= { -2,-2,122,-2,122,10,-2,10,-2,-2 }; SHORT paare2[]= { -2,-2,222,-2,222,10,-2,10,-2,-2 }; SHORT paare3[]= { 0,0,0,9,33,9,33,0,0,0 }; struct Border Rand2= { 0,0,FARBE2,FARBE3,JAM2,5,(SHORT *)&paare2,NULL }; struct Border Rand= { 0,0,FARBE2,FARBE3,JAM2,5,(SHORT *)&paare1,NULL }; struct Border Rand1 = { -1,-1,FARBE2,FARBE3,JAM2,5,paare3,0 }; /* Definition der benötigten Texte */ struct IntuiText Bedeutung4= { FARBE1,FARBE0,JAM1,-65,0,NULL,MinXText,NULL }; struct IntuiText Bedeutung3= { FARBE1,FARBE0,JAM1,-65,0,NULL,MaxXText,NULL }; struct IntuiText Bedeutung2= { FARBE1,FARBE0,JAM1,-65,0,NULL,MinYText,NULL }; struct IntuiText Bedeutung1= { FARBE1,FARBE0,JAM1,-65,0,NULL,MaxYText,NULL }; struct IntuiText BedeutungFormel= { FARBE1,FARBE0,JAM1,6,-20,NULL,MAUS_ENTERFUNC,NULL }; /* Definitionen für TextGadgets */ struct StringInfo TextStringFormel= { Abgeleitet[0],undoFormel,0,MAXCHARS,0,0,5,0,0,0,NULL,0,NULL }; struct StringInfo TextString1= { NULL,undo1,0,20,0,0,5,0,0,0,NULL,0,NULL }; struct StringInfo TextString2= { NULL,undo1,0,20,0,0,5,0,0,0,NULL,0,NULL }; struct StringInfo TextString3= { NULL,undo1,0,20,0,0,5,0,0,0,NULL,0,NULL }; struct StringInfo TextString4= { NULL,undo1,0,20,0,0,5,0,0,0,NULL,0,NULL }; struct IntuiText Texte= { FARBE2,FARBE3,JAM2,0,0,0," OK ",0 }; /* Definitionen für Gadgets */ struct Gadget OKgadget= { NULL ,100,100,32,8,GADGHCOMP,RELVERIFY|GADGIMMEDIATE,BOOLGADGET,(APTR)&Rand1,0,&Texte,NULL,NULL,4,0 }; struct Gadget FormelGadget= { &OKgadget ,10,50,220,10,GADGHCOMP,RELVERIFY|STRINGCENTER,STRGADGET,(APTR)&Rand2,0,&BedeutungFormel,0,(APTR)&TextStringFormel,NULL,0 }; struct Gadget gadget4= { &OKgadget ,70,20,120,10,GADGHCOMP,GADGIMMEDIATE|RELVERIFY|STRINGCENTER,STRGADGET,(APTR)&Rand,0,&Bedeutung4,0,(APTR)&TextString4,3,0 }; struct Gadget gadget3= { &gadget4,70,35,120,10,GADGHCOMP,GADGIMMEDIATE|RELVERIFY|STRINGCENTER,STRGADGET,(APTR)&Rand,0,&Bedeutung3,0,(APTR)&TextString3,2,0 }; struct Gadget gadget2= { &gadget3,70,50,120,10,GADGHCOMP,GADGIMMEDIATE|RELVERIFY|STRINGCENTER,STRGADGET,(APTR)&Rand,0,&Bedeutung2,0,(APTR)&TextString2,1,0 }; struct Gadget gadget1= { &gadget2,70,65,120,10,GADGHCOMP,GADGIMMEDIATE|RELVERIFY|STRINGCENTER,STRGADGET,(APTR)&Rand,0,&Bedeutung1,0,(APTR)&TextString1,0,0 }; /* Definition des allg. Fensters */ struct NewWindow Fenster2= { 100,10,200,115,FARBE0,FARBE1,GADGETUP,ACTIVATE|WINDOWDRAG, &gadget1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, CUSTOMSCREEN }; /* Routine bestimmt Ausschnitt per Maus */ VOID AusSchnitt(DOUBLE *x1, DOUBLE *y1, DOUBLE *x2, DOUBLE *y2) { long x,y,xs=0,ys=0,xe=0,ye=0; char click=0; SetDrMd(RastPort,COMPLEMENT); /* DrawMode verändern */ while(click<=1) { /* Wartet bis 2 mal geklickt */ Wait(1L<UserPort->mp_SigBit); while(EventAbfrage(Window,&msgInfo)) { /* X/YOffset gibt linke/obere Ecke des View-Ports an */ x=msgInfo.MouseX+XOffset; y=msgInfo.MouseY+YOffset; if(xAbstand+xx) { x=Abstand+xx; } if(yAbstand+yy) { y=Abstand+yy; } switch(msgInfo.NachrichtenArt) { case MOUSEBUTTONS: { if(msgInfo.code==SELECTDOWN) { /* Erster Klick : Box neu zeichnen */ click=1; xs=xe=x; ys=ye=y; Box(RastPort,ys,ys,xe,ye); } else { /* Zweiter Klick : Box löschen */ click=2; Box(RastPort,xs,ys,xe,ye); xe=x; ye=y; }; break; } case RAWKEY: { if(Groesse==GROSS) { TastaturAbfrage(); } } case MOUSEMOVE: { if (click==1) { /* Box löschen und an neuer Position neu zeichnen */ Box(RastPort,xs,ys,xe,ye); xe=x; ye=y; Box(RastPort,xs,ys,xe,ye); } } } } } SetDrMd(RastPort,JAM1); /* Bestimmung von xmp/n und ymp/n */ if (xe>xs) { *x2=Flt(xe-Abstand); *x1=Flt(xs-Abstand); } else { *x1=Flt(xe-Abstand); *x2=Flt(xs-Abstand); } if (yeRPort; ActivateGadget(&gadget4,Window2,NULL); /* Direkte Eingabe ermöglichen */ /* Endlosschleife */ FOREVER { Wait(1L<UserPort->mp_SigBit); while(EventAbfrage(Window2,&msgInfo)) { /* Es gibt nur das Ereignis GADGETDOWN */ GadgetID=((struct Gadget *)msgInfo.IAddress)->GadgetID; switch(GadgetID) { case 4: { CloseWindow(Window2); return; } case 3: { GadgetPtr=&gadget3; goto Einsprung2; } case 2: { GadgetPtr=&gadget2; goto Einsprung2; } case 1: { GadgetPtr=&gadget1; Einsprung2: ActivateGadget(GadgetPtr,Window2,NULL); break; } case 0: { CloseWindow(Window2); return; } } } } } /* Eingabe der neuen Funktion, alter Wert wird übergeben */ VOID __asm Funktionseingabe(register __a0 UBYTE *string) { /* Siehe Grenzen */ Fenster2.FirstGadget=&FormelGadget; Fenster2.Width=240; strcpy(Abgeleitet[0],string); /* Wird zum Anzeigen des Strings benutzt */ if(!(Window2=(struct Window *)OpenWindow(&Fenster2)))return; ActivateGadget(&FormelGadget,Window2,NULL); Wait(1L<UserPort->mp_SigBit); EventAbfrage(Window2,&msgInfo); /* Wenn oder Mausklich auf -> Beenden */ CloseWindow(Window2); strcpy(string,Abgeleitet[0]); } /* Kopiert Text in die passenden Variablen, die */ /* im Fenster dann angezeigt werden. */ /* Für Intervalleingabe */ VOID TextFuerIntervall() { strcpy(MinXText,"X-Min :"); strcpy(MinYText,"Y-Min :"); strcpy(MaxXText,"X-Max :"); strcpy(MaxYText,"Y-Max :"); } /* Für Konstanteneingabe */ VOID TextFuerKonstanten() { strcpy(MinXText," A :"); strcpy(MinYText," C :"); strcpy(MaxXText," B :"); strcpy(MaxYText," D :"); }