home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 329.lha / MultiPlot / source / gethowto.c < prev    next >
C/C++ Source or Header  |  1990-01-05  |  11KB  |  401 lines

  1. #include <stdio.h>
  2. #include <exec/types.h>
  3. #include "struct.h"
  4. #include "plot.h"
  5. #include "howto1.h"
  6. #include "howto2.h"
  7.  
  8. extern char *gets();
  9. extern char *getwrd();
  10. extern struct Window *FrontWindow;
  11. extern struct Screen *screen;
  12.  
  13. extern struct NewWindow NewFrontWindow;
  14. extern struct RastPort *p;
  15. extern struct ViewPort *vp;
  16.  
  17. extern int debug;
  18.  
  19. #define LINEPLOT 0
  20. #define POINTPLOT 1
  21. USHORT PlotType;
  22.  
  23. #define DEFAULT 0
  24. #define CHOOSE 1
  25. USHORT PlotPrefs;
  26.  
  27. #define STOP 0
  28. #define GO 1
  29. extern int QuitFrontFlag;
  30. short firstcall = TRUE;
  31.  
  32.  
  33. void GetHowTo(Pict)
  34. struct Pict *Pict;
  35. {
  36.    short i;
  37.    struct Plot *Plot;
  38.    struct IntuiMessage  *p_message;         /* pointer to message */
  39.    void ProcHowMes(), ProcCustMes(), GadMXSel();
  40.  
  41.    QuitFrontFlag=GO;
  42.  
  43.    if (debug) {
  44.       printf("GetHowTo: entry\n");
  45.       printf("   Pict->ErrBar = %d\n",Pict->ErrBar);
  46.       printf("   Pict->ShowErr = %d\n",Pict->ShowErr);
  47.    }
  48.    if (firstcall) {
  49.       firstcall = FALSE;
  50.       /*** ESTABLISH DEFAULTS ***/
  51.       PlotType=LINEPLOT;
  52.       Pict->Grid = FALSE;
  53.       Pict->ShowErr = Pict->ErrBar;
  54.       Pict->Tics->NX = Pict->Tics->NY = 5;
  55.    }
  56.  
  57.    PlotPrefs=DEFAULT;
  58.    Gadget18.Flags=(GADGHIMAGE+GADGIMAGE);
  59.  
  60.  
  61.    if (Pict->Grid == TRUE) Gadget15.Flags=(GADGHIMAGE+SELECTED+GADGIMAGE);
  62.    else Gadget15.Flags=(GADGHIMAGE+GADGIMAGE);
  63.  
  64.    if (PlotType == POINTPLOT) Gadget16.Flags=(GADGHIMAGE+SELECTED+GADGIMAGE);
  65.    else Gadget16.Flags=(GADGHIMAGE+GADGIMAGE);
  66.  
  67.    if (Pict->ErrBar==FALSE) Gadget14.Flags=(GADGHIMAGE+SELECTED+GADGDISABLED+GADGIMAGE);
  68.    else if (Pict->ShowErr==FALSE) Gadget14.Flags=(GADGHIMAGE+SELECTED+GADGIMAGE);
  69.    else Gadget14.Flags=(GADGHIMAGE+GADGIMAGE);
  70.  
  71.    NewFrontWindow.Title = title0;
  72.    NewFrontWindow.FirstGadget = &Gadget13;
  73.    NewFrontWindow.Screen = screen;
  74.    FrontWindow = (struct Window *)OpenWindow(&NewFrontWindow);
  75.  
  76.    p = FrontWindow->RPort;
  77.    PrintIText(p,&IText11,0,0);
  78.  
  79.   while (QuitFrontFlag !=STOP)
  80.     {
  81.        Wait(1l<<FrontWindow->UserPort->mp_SigBit);        /* wait for a message */
  82.        while (p_message = (struct IntuiMessage *)GetMsg(FrontWindow->UserPort))
  83.          ProcHowMes(p_message,Pict);
  84.  
  85.      }
  86.  
  87.    CloseWindow(FrontWindow);
  88.    if (Gadget17SInfo.LongInt<1)
  89.       {
  90.          Gadget17SInfo.LongInt=1;
  91.          strcpy(Gadget17SIBuff,"1");
  92.       }
  93.    if (Gadget17SInfo.LongInt>20)
  94.       {
  95.          Gadget17SInfo.LongInt=20;
  96.          strcpy(Gadget17SIBuff,"20");
  97.       }
  98.  
  99.    Pict->Tics->NX = Gadget17SInfo.LongInt;
  100.    Pict->Tics->NY = Pict->Tics->NX;
  101.  
  102.  
  103.    if (PlotPrefs==DEFAULT) {
  104.  
  105.       Plot = Pict->Plot;
  106.       i = 0;
  107.       while (Plot) {
  108.          Plot->Enabled = TRUE;
  109.          Plot->Color = PLOTCOLORBASE + i;
  110.          if (PlotType==POINTPLOT) Plot->PointSize = DEFAULT_POINT_SIZE;
  111.          else  Plot->PointSize = 0;
  112.  
  113.          while (Plot->Continued) {
  114.             Plot->NextPlot->Color = Plot->Color;
  115.             Plot->NextPlot->PointSize = Plot->PointSize;
  116.             Plot->NextPlot->Enabled = Plot->Enabled;
  117.             Plot = Plot->NextPlot;
  118.          }
  119.          Plot = Plot->NextPlot;
  120.          i++;
  121.       }
  122.    }
  123.  
  124.    else {
  125.       /* INIT ALL PLOTS TO "DISABLED" */
  126.       Plot = Pict->Plot;
  127.       while (Plot) {Plot->Enabled = FALSE; Plot = Plot->NextPlot;}
  128.  
  129.       /* GET USER'S INSTRUCTIONS FOR EACH PLOT */
  130.       Plot = Pict->Plot;
  131.  
  132.     for(i=0;i<Pict->NPlt;i++) {
  133.       IText16.IText=SetText[i];
  134.       NewFrontWindow.Title = title1;
  135.       NewFrontWindow.FirstGadget = &Gadget43;
  136.       NewFrontWindow.Screen = screen;
  137.       FrontWindow = (struct Window *)OpenWindow(&NewFrontWindow);
  138.       if (i==0) GadMXSel(FrontWindow,&Gadget45,&Gadget44,NULL,NULL,NULL,NULL);
  139.  
  140.       p = FrontWindow->RPort;
  141.       PrintIText(p,&IText16,0,0);
  142.  
  143.       QuitFrontFlag=GO;
  144.  
  145.       while (QuitFrontFlag !=STOP)
  146.          {
  147.             Wait(1l<<FrontWindow->UserPort->mp_SigBit);        /* wait for a message */
  148.             while (p_message = (struct IntuiMessage *)GetMsg(FrontWindow->UserPort))
  149.               ProcCustMes(p_message,Pict);
  150.  
  151.          }
  152.  
  153.          if (Gadget44.Flags & SELECTED)  Plot->Enabled = FALSE;
  154.  
  155.          else {
  156.             Plot->Enabled = TRUE;
  157.  
  158.             if (Gadget45.Flags & SELECTED) Plot->Color = PLOTCOLORBASE + i;
  159.             else Plot->Color = PLOTCOLORBASE + Gadget48SInfo.LongInt;
  160.  
  161.             if (Gadget47.Flags & SELECTED)  Plot->PointSize = Gadget46SInfo.LongInt;
  162.             else  Plot->PointSize = 0; /* GETS LINE PLOT */
  163.          }
  164.  
  165.          while (Plot->Continued) {
  166.             Plot->NextPlot->Color = Plot->Color;
  167.             Plot->NextPlot->PointSize = Plot->PointSize;
  168.             Plot->NextPlot->Enabled = Plot->Enabled;
  169.             Plot = Plot->NextPlot;
  170.          }
  171.          Plot = Plot->NextPlot;
  172.          CloseWindow(FrontWindow);
  173.       }
  174.    }
  175.    if (debug) printf("GetHowTo: exit\n");
  176.  
  177. }
  178.  
  179.  
  180. void ProcHowMes(p_message,Pict)
  181. struct IntuiMessage *p_message;
  182. struct Pict *Pict;
  183.  
  184. {
  185. ULONG MesClass;        /*     Fields for storing      */
  186. USHORT MesCode;        /*     intuimessage data       */
  187. APTR Pointer;          /*                             */
  188. void HandleHowEvent();
  189.  
  190.    MesClass = p_message->Class;             /* Store values */
  191.    MesCode = p_message->Code;
  192.    Pointer = p_message->IAddress;
  193.    ReplyMsg(p_message);                     /* Reply to message */
  194.    HandleHowEvent(MesClass,MesCode,Pointer,Pict);
  195. }
  196.  
  197. void ProcCustMes(p_message,Pict)
  198. struct IntuiMessage *p_message;
  199. struct Pict *Pict;
  200.  
  201. {
  202. ULONG MesClass;        /*     Fields for storing      */
  203. USHORT MesCode;        /*     intuimessage data       */
  204. APTR Pointer;          /*                             */
  205. void HandleCustEvent();
  206.  
  207.    MesClass = p_message->Class;             /* Store values */
  208.    MesCode = p_message->Code;
  209.    Pointer = p_message->IAddress;
  210.    ReplyMsg(p_message);                     /* Reply to message */
  211.    HandleCustEvent(MesClass,MesCode,Pointer,Pict);
  212. }
  213.  
  214.  
  215. void HandleHowEvent(MesClass,MesCode,Pointer,Pict)
  216. struct Pict *Pict;
  217.  
  218. ULONG MesClass;        /*     Fields for storing      */
  219. USHORT MesCode;        /*     intuimessage data       */
  220. APTR Pointer;          /*                             */
  221. {
  222.  
  223.   if ( MesClass == GADGETDOWN)
  224.     {
  225.  
  226.       if (Pointer == (APTR)&Gadget13)  QuitFrontFlag = STOP;
  227.       if (Pointer == (APTR)&Gadget14)
  228.           {
  229.             if (Gadget14.Flags & SELECTED) Pict->ShowErr = FALSE;
  230.             else  Pict->ShowErr = Pict->ErrBar;
  231.           }
  232.       if (Pointer == (APTR)&Gadget15)
  233.           {
  234.             if (Pict->Grid==TRUE) Pict->Grid=FALSE;
  235.             else Pict->Grid=TRUE;
  236.           }
  237.       if (Pointer == (APTR)&Gadget16)
  238.           {
  239.             if (PlotType==LINEPLOT) PlotType=POINTPLOT;
  240.             else PlotType=LINEPLOT;
  241.           }
  242.       if (Pointer == (APTR)&Gadget18)
  243.           {
  244.             if (PlotPrefs==DEFAULT) PlotPrefs=CHOOSE;
  245.             else PlotPrefs=DEFAULT;
  246.           }
  247.       else ;
  248.     }
  249.   if ( MesClass == RAWKEY)
  250.     {
  251.       if (MesCode ==196)  /* RETURN key RELEASED */
  252.          {
  253.             QuitFrontFlag = STOP;
  254.          }
  255.       else ;
  256.     }
  257.   else ;
  258. }
  259.  
  260. void HandleCustEvent(MesClass,MesCode,Pointer,Pict)
  261. struct Pict *Pict;
  262.  
  263. ULONG MesClass;        /*     Fields for storing      */
  264. USHORT MesCode;        /*     intuimessage data       */
  265. APTR Pointer;          /*                             */
  266. {
  267. void GadMXSel(), GadMXSD();
  268.  
  269.  
  270.    if ( MesClass == GADGETDOWN)
  271.      {
  272.         if (Pointer == (APTR)&Gadget45)
  273.           {
  274.              if (Gadget45.Flags & SELECTED)
  275.                {
  276.                   RemoveGadget(FrontWindow,&Gadget45);
  277.                   Gadget45.Flags &= ~SELECTED;
  278.                   AddGadget(FrontWindow,&Gadget45,-1L);
  279.                   RefreshGadgets(&Gadget45,FrontWindow,NULL);
  280.                 }
  281.              else
  282.                 {
  283.                    GadMXSel(FrontWindow,&Gadget45,&Gadget44,NULL,NULL,NULL,NULL);
  284.                  }
  285.           }
  286.         else if (Pointer == (APTR)&Gadget44)
  287.           {
  288.              if (Gadget44.Flags & SELECTED)
  289.                {
  290.                   RemoveGadget(FrontWindow,&Gadget44);
  291.                   Gadget44.Flags &= ~SELECTED;
  292.                   AddGadget(FrontWindow,&Gadget44,-1L);
  293.                   RefreshGadgets(&Gadget44,FrontWindow,NULL);
  294.                 }
  295.              else
  296.                 {
  297.                    GadMXSel(FrontWindow,&Gadget44,&Gadget45,NULL,NULL,NULL,NULL);
  298.                  }
  299.           }
  300.  
  301.         else if (Pointer == (APTR)&Gadget43) QuitFrontFlag = STOP;
  302.         else ;
  303.      }
  304.    if ( MesClass == RAWKEY)
  305.      {
  306.       if (MesCode ==196)  /* RETURN key RELEASED */
  307.          {
  308.              QuitFrontFlag = STOP;
  309.          }
  310.       else ;
  311.      }
  312.    else ;
  313. }
  314.  
  315. /**
  316. *
  317. *   This routine selects gad1 and deselects the previously selected one.
  318. *   Maximum number of gadgets to be mutually excluded is six, obviously.
  319. *   Extension to more gadgets is obvious, too. This routine assumes that
  320. *   only one gadget is selected at a time.
  321. *
  322. **/
  323.  
  324. void GadMXSel(win,gad1,gad2,gad3,gad4,gad5,gad6)
  325. struct Window *win;
  326. struct Gadget *gad1,*gad2,*gad3,*gad4,*gad5,*gad6;
  327. {
  328. void GadMXSD();
  329. static struct Gadget *gadprev;
  330.  
  331.    gadprev = NULL;
  332.    if (gad1 != NULL)
  333.       if (gad1->Flags & SELECTED) return;
  334.    if (gad2 != NULL)
  335.       if (gad2->Flags & SELECTED) gadprev = gad2;
  336.    if (gad3 != NULL)
  337.       if (gad3->Flags & SELECTED) gadprev = gad3;
  338.    if (gad4 != NULL)
  339.       if (gad4->Flags & SELECTED) gadprev = gad4;
  340.    if (gad5 != NULL)
  341.       if (gad5->Flags & SELECTED) gadprev = gad5;
  342.    if (gad6 != NULL)
  343.       if (gad6->Flags & SELECTED) gadprev = gad6;
  344.  
  345.    GadMXSD(win,gad1,gadprev);
  346.  
  347.    return;
  348. }
  349.  
  350. /**
  351. *
  352. *   This routine selects gad1 and deselects gad2.
  353. *   Notice, that this version removes gadgets from the gadget list and adds
  354. *   them to the end. If you're sensitive to the location of the gadgets
  355. *   in the gadgetlist, you have to use: gadloc = RemoveGadget... and
  356. *   AddGadget(...,...,(long) gadloc), where gadloc is a USHORT. Then you
  357. *   have to refresh all gadgets to make sure the two you changed get
  358. *   refreshed.
  359. *
  360. **/
  361.  
  362. void GadMXSD(win,gad1,gad2)
  363. struct Window *win;
  364. struct Gadget *gad1,*gad2;
  365. {
  366. /*
  367. *   First select gad2 (yes!) and refresh.
  368. */
  369.    if (gad2 != NULL) {
  370.       RemoveGadget(win,gad2);
  371.       gad2->Flags |= SELECTED;
  372.       AddGadget(win,gad2,-1L);
  373.    }
  374.  
  375.    if (gad2 != NULL) RefreshGadgets(gad2,win,NULL);
  376. /*
  377. *   Now select gad1 and deselect gad2 and refresh.
  378. */
  379.    if (gad1 != NULL) {
  380.       RemoveGadget(win,gad1);
  381.       gad1->Flags |= SELECTED;
  382.       AddGadget(win,gad1,-1L);
  383.    }
  384.  
  385.    if (gad2 != NULL) {
  386.       RemoveGadget(win,gad2);
  387.       gad2->Flags &= ~SELECTED;
  388.       AddGadget(win,gad2,-1L);
  389.    }
  390.  
  391.    if (gad1 != NULL) RefreshGadgets(gad1,win,NULL);
  392.  
  393.    return;
  394. }
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.