home *** CD-ROM | disk | FTP | other *** search
/ Aminet 3 / Aminet 3 - July 1994.iso / Aminet / misc / math / cp42.lha / cp42source.lha / plotgui.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-05-01  |  20.4 KB  |  666 lines

  1. /*
  2.  *  Source machine generated by GadToolsBox V2.0
  3.  *  which is (c) Copyright 1991-1993 Jaba Development
  4.  *
  5.  *  GUI Designed by : Chris Conger
  6.  */
  7.  
  8. #include <exec/types.h>
  9. #include <intuition/intuition.h>
  10. #include <intuition/classes.h>
  11. #include <intuition/classusr.h>
  12. #include <intuition/imageclass.h>
  13. #include <intuition/gadgetclass.h>
  14. #include <libraries/gadtools.h>
  15. #include <graphics/displayinfo.h>
  16. #include <graphics/gfxbase.h>
  17. #include <clib/exec_protos.h>
  18. #include <clib/intuition_protos.h>
  19. #include <clib/gadtools_protos.h>
  20. #include <clib/graphics_protos.h>
  21. #include <clib/utility_protos.h>
  22. #include <string.h>
  23. #include <clib/diskfont_protos.h>
  24.  
  25. #include "plotgui.h"
  26. #include "cp.h"
  27.  
  28. extern UBYTE *version_string;
  29.  
  30.  
  31. struct Screen         *Scr = NULL;
  32. APTR                   VisualInfo = NULL;
  33. struct Window         *PlotWindowWnd = NULL;
  34. struct Window         *delwinWnd = NULL;
  35. struct Gadget         *PlotWindowGList = NULL;
  36. struct Gadget         *delwinGList = NULL;
  37. struct Menu           *PlotWindowMenus = NULL;
  38. struct IntuiMessage    PlotWindowMsg;
  39. struct IntuiMessage    delwinMsg;
  40. struct Gadget         *PlotWindowGadgets[6];
  41. struct Gadget         *delwinGadgets[3];
  42. UWORD                  SWIDTH = STDSCREENWIDTH;
  43. UWORD                  SHEIGHT = STDSCREENHEIGHT;
  44. UWORD                  delwinWidth;
  45. UWORD                  delwinHeight;
  46. UBYTE                 *PlotWindowWdt = (UBYTE *)"ChrisP";
  47. UBYTE                 *delwinWdt = (UBYTE *)"Kill Trace";
  48. struct Window         *PreSlideWnd = NULL;
  49. struct Gadget         *PreSlideGList = NULL;
  50. struct IntuiMessage    PreSlideMsg;
  51. struct Gadget         *PreSlideGadgets[1];
  52. UBYTE                 *PreSlideWdt = (UBYTE *)"Precision for Identify Feature";
  53.  
  54. WORD GADHEIGHT;
  55. WORD GADWIDTH;
  56.  
  57.  
  58. struct NewMenu PlotWindowNewMenu[] = {
  59.      NM_TITLE, (STRPTR)"Project", NULL, 0, NULL, NULL,
  60.      NM_ITEM, (STRPTR)"Open File", (STRPTR)"O", 0, 0L, (APTR)newfile,
  61.      NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  62.      NM_ITEM, (STRPTR)"Add File", (STRPTR)"A", 0, 0L, (APTR)addClicked,
  63.      NM_ITEM, (STRPTR)"Delete Set", (STRPTR)"D", 0, 0L, (APTR)deleteClicked,
  64.      NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  65.      NM_ITEM, (STRPTR)"Print", (STRPTR)"P", 0, 0L, (APTR)PlotDump,
  66.      NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  67.      NM_ITEM, (STRPTR)"About", NULL, 0, 0L, (APTR)PlotWindowItem0,
  68.      NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  69.      NM_ITEM, (STRPTR)"Die", (STRPTR)"Q", 0, 0L, (APTR)PlotWindowItem1,
  70.      NM_TITLE, (STRPTR)"Display", NULL, 0, NULL, NULL,
  71.      NM_ITEM, (STRPTR)"Full View", (STRPTR)"F", 0L, 0L, (APTR)fullClicked,
  72.      NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  73.      NM_ITEM, (STRPTR)"Cross Hair", (STRPTR)"H", 0L, 0L, (APTR)CrossHair,
  74.      NM_ITEM, (STRPTR)"Significant Digits", NULL, 0L, 0L, (APTR)PreOpenRequest,
  75.      NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  76.      NM_ITEM, (STRPTR)"Grid", (STRPTR)"G", NULL, 0L, (APTR)gridClicked,
  77.      NM_ITEM, (STRPTR)"Symbols", (STRPTR)"S", NULL, 0L, (APTR)PlotWindowItem6,
  78.      NM_ITEM, (STRPTR)"Control Panel", (STRPTR)"C", NULL, 0L, (APTR)PlotWindowItem7,
  79.      NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  80.      NM_ITEM, (STRPTR)"Screen  Depth", NULL, 0, NULL, NULL,
  81.      NM_SUB, (STRPTR)"1", (STRPTR)"1", NULL, 0L, (APTR)NewDepth1,
  82.      NM_SUB, (STRPTR)"2", (STRPTR)"2", NULL, 0L, (APTR)NewDepth2,
  83.      NM_SUB, (STRPTR)"3", (STRPTR)"3", NULL, 0L, (APTR)NewDepth3,
  84.      NM_SUB, (STRPTR)"4", (STRPTR)"4", NULL, 0L, (APTR)NewDepth4,
  85.      NM_TITLE, (STRPTR)"Axis", NULL, 0, NULL, NULL,
  86.      NM_ITEM, (STRPTR)"XAxis", NULL, 0, NULL, NULL,
  87.      NM_SUB, (STRPTR)"Lin", NULL, 0, 0L, (APTR)PlotWindowItem2,
  88.      NM_SUB, (STRPTR)"Log", NULL, 0, 0L, (APTR)PlotWindowItem3,
  89.      NM_ITEM, (STRPTR)"YAxis", NULL, 0, NULL, NULL,
  90.      NM_SUB, (STRPTR)"Lin", NULL, 0, 0L, (APTR)PlotWindowItem4,
  91.      NM_SUB, (STRPTR)"Log", NULL, 0, 0L, (APTR)PlotWindowItem5,
  92.      NM_END, NULL, NULL, 0, 0L, NULL };
  93.  
  94.  
  95. UWORD PlotWindowGTypes[] = {
  96.      BUTTON_KIND,
  97.      BUTTON_KIND,
  98.      BUTTON_KIND,
  99.      BUTTON_KIND,
  100.      BUTTON_KIND,
  101.      BUTTON_KIND
  102. };
  103.  
  104. UWORD delwinGTypes[] = {
  105.      LISTVIEW_KIND,
  106.      BUTTON_KIND,
  107.      BUTTON_KIND
  108. };
  109.  
  110. UWORD PreSlideGTypes[] = {
  111.     SLIDER_KIND
  112. };
  113.  
  114. struct NewGadget PlotWindowNGad[] = {
  115.      NULL, NULL, NULL, NULL, (UBYTE *)"_Add", NULL, GD_add, PLACETEXT_IN, NULL, (APTR)addClicked,
  116.      NULL, NULL, NULL, NULL, (UBYTE *)"_Kill", NULL, GD_delete, PLACETEXT_IN, NULL, (APTR)deleteClicked,
  117.      NULL, NULL, NULL, NULL, (UBYTE *)"_Full", NULL, GD_full, PLACETEXT_IN, NULL, (APTR)fullClicked,
  118.      NULL, NULL, NULL, NULL, (UBYTE *)"_Zoom", NULL, GD_zoom, PLACETEXT_IN, NULL, (APTR)zoomClicked,
  119.      NULL, NULL, NULL, NULL, (UBYTE *)"_Grid", NULL, GD_grid, PLACETEXT_IN, NULL, (APTR)gridClicked,
  120.      NULL, NULL, NULL, NULL, (UBYTE *)"_Quit", NULL, GD_quit, PLACETEXT_IN, NULL, (APTR)quitClicked
  121. };
  122.  
  123. struct NewGadget delwinNGad[] = {
  124.      NULL, NULL, NULL, NULL, NULL, NULL, GD_dellist, NULL, NULL, (APTR)dellistClicked,
  125.      NULL, NULL, NULL, NULL, (UBYTE *)"_Delete", NULL, GD_delset, PLACETEXT_IN, NULL, (APTR)delsetClicked,
  126.      NULL, NULL, NULL, NULL, (UBYTE *)"_Redraw", NULL, GD_canlist, PLACETEXT_IN, NULL, (APTR)canlistClicked
  127. };
  128.  
  129. struct NewGadget PreSlideNGad[] = {
  130.     NULL, NULL, NULL, NULL, NULL, NULL, GD_pre, PLACETEXT_BELOW, NULL, (APTR)preClicked
  131. };
  132.  
  133.  
  134. ULONG PlotWindowGTags[] = {
  135.      (GT_Underscore), '_', (TAG_DONE),
  136.      (GT_Underscore), '_', (TAG_DONE),
  137.      (GT_Underscore), '_', (TAG_DONE),
  138.      (GT_Underscore), '_', (TAG_DONE),
  139.      (GT_Underscore), '_', (TAG_DONE),
  140.      (GT_Underscore), '_', (TAG_DONE)
  141. };
  142.  
  143. ULONG delwinGTags[] = {
  144.      (GTLV_ShowSelected), NULL, (TAG_DONE),
  145.      (GT_Underscore), '_', (TAG_DONE),
  146.      (GT_Underscore), '_', (TAG_DONE)
  147. };
  148.  
  149. ULONG PreSlideGTags[] = {
  150.     (GTSL_Min), 1, (GTSL_Max), 9, (GTSL_Level), NULL, (GTSL_MaxLevelLen), 3, (GTSL_LevelFormat), (ULONG)"%ld", (PGA_Freedom), LORIENT_HORIZ, (GA_RelVerify), TRUE, (TAG_DONE)
  151. };
  152.  
  153.  
  154. struct ColorSpec MonoColors[] = {
  155.       0, 0x00, 0x00, 0x00,
  156.       1, 0x0F, 0x0E, 0x0D,
  157.      ~0, 0x00, 0x00, 0x00 };
  158.  
  159. struct ColorSpec FourColors[] = {
  160.       0, 0x07, 0x06, 0x06,
  161.       1, 0x0B, 0x0A, 0x0A,
  162.       2, 0x03, 0x01, 0x03,
  163.       3, 0x0F, 0x00, 0x05,
  164.      ~0, 0x00, 0x00, 0x00 };
  165.  
  166. struct ColorSpec EightColors[] = {
  167.       0, 0x08, 0x07, 0x07,
  168.       1, 0x00, 0x00, 0x00,
  169.       2, 0x0C, 0x0C, 0x0F,
  170.       3, 0x09, 0x07, 0x08,
  171.       4, 0x0A, 0x07, 0x0F,
  172.       5, 0x0F, 0x0E, 0x08,
  173.       6, 0x03, 0x04, 0x06,
  174.       7, 0x0F, 0x0F, 0x0F,
  175.      ~0, 0x00, 0x00, 0x00 };
  176.  
  177. struct ColorSpec SixteenColors[] = {
  178.       0, 0x08, 0x07, 0x08,
  179.       1, 0x00, 0x00, 0x00,
  180.       2, 0x0F, 0x0F, 0x0F,
  181.       3, 0x07, 0x06, 0x09,
  182.       4, 0x05, 0x09, 0x0F,
  183.       5, 0x00, 0x0E, 0x08,
  184.       6, 0x0F, 0x04, 0x08,
  185.       7, 0x0F, 0x0D, 0x07,
  186.       8, 0x0B, 0x07, 0x0F,
  187.       9, 0x0F, 0x0A, 0x08,
  188.      10, 0x0F, 0x08, 0x0D,
  189.      11, 0x06, 0x00, 0x0F,
  190.      12, 0x00, 0x0F, 0x0F,
  191.      13, 0x0F, 0x05, 0x00,
  192.      14, 0x04, 0x04, 0x06,
  193.      15, 0x0F, 0x0F, 0x0F,
  194.      ~0, 0x00, 0x00, 0x00 };
  195.  
  196.  
  197. int SetupScreen( void )
  198. {
  199. UBYTE PubNum[4];
  200. struct List    *publist;
  201. struct PubScreenNode *psnode;
  202. WORD  s=0,t;
  203. WORD len;
  204. struct ColorSpec *ScreenColors;
  205. UBYTE PubName[32];
  206.  
  207. UWORD DriPens[] = {
  208.      0,1,2,2,1,3,2,0,2,~0 };
  209.  
  210. UWORD TwoPens[] = {
  211.      0,1,2,1,2,3,2,0,2,~0 };
  212.  
  213.  
  214.      strcpy(PubName,MyName);  /* OpenScreen will fail if MyName has already been used */
  215.  
  216.      if ( Stricmp(PubName,&version_string[5])==0)     /** if user didn't supply us a name **/
  217.        {
  218.         strcpy(PubName,"cP");
  219.  
  220.         len = (WORD) strlen( PubName );
  221.  
  222.         publist = LockPubScreenList();                /* Lock the public screen list     */
  223.  
  224.         for (psnode = (struct PubScreenNode *) publist->lh_Head; psnode->psn_Node.ln_Succ; psnode = (struct PubScreenNode *) psnode->psn_Node.ln_Succ)
  225.           {
  226.               if ( ! Strnicmp( psnode-> psn_Node.ln_Name, PubName, len))
  227.                   {
  228.                    t = 0;
  229.                    sscanf( &psnode-> psn_Node.ln_Name [len],"%hd", &t);
  230.                    s = max(s,t);
  231.                 }
  232.           }
  233.  
  234.          UnlockPubScreenList ();
  235.  
  236.          sprintf( PubNum,"%hd", s+1 );
  237.          strcat ( PubName, PubNum);         /* Add #s of other cP screens to name */
  238.       }
  239.  
  240.      if ( depth == 1 ) ScreenColors = &MonoColors[0];
  241.      if ( depth == 2 ) ScreenColors = &FourColors[0];
  242.      if ( depth == 3 ) ScreenColors = &EightColors[0];
  243.      if ( depth == 4 ) ScreenColors = &SixteenColors[0];
  244.  
  245.      if ( depth == 1 )
  246.        {
  247.           DriPens[0] = ~0;
  248.        }
  249.  
  250.  
  251.      if ( ! ( Scr = OpenScreenTags( NULL, SA_Left,     0,
  252.                          SA_Top,        0,
  253.                          SA_Width,      SWIDTH,
  254.                          SA_Height,     SHEIGHT,
  255.                          SA_Depth,      depth,
  256.                          SA_Colors,     ScreenColors,
  257.                          SA_Behind,    BEHIND,
  258.                          SA_Font,       cPFont,
  259.                          SA_Type,       PUBLICSCREEN,
  260.                          SA_PubName,    PubName,
  261.                          SA_DisplayID,  DEFAULT_MONITOR_ID | Disp,
  262.                          SA_Overscan,   OSCAN_TEXT,
  263.                          SA_AutoScroll, TRUE,
  264.                          SA_Pens,       (depth == 2 ? &TwoPens[0] : &DriPens[0]),
  265.                          SA_Title,      &version_string[5],
  266.                          TAG_DONE )))
  267.           return( 1L );
  268.  
  269.      if ( ! ( VisualInfo = GetVisualInfo( Scr, TAG_DONE )))
  270.           return( 2L );
  271.  
  272.      PubScreenStatus( Scr, NULL );      /* make screen public */
  273.      if ( DEFS ) SetDefaultPubScreen( PubName );  /* make screen default pub if DEFS True */
  274.  
  275.      vp = &(Scr-> ViewPort);
  276.  
  277.      return( 0L );
  278. }
  279.  
  280. void CloseDownScreen( void )
  281. {
  282. struct EasyStruct myezreq = {
  283.        sizeof (struct EasyStruct), 0,
  284.        "Close Public Screen",
  285.        "Close All Windows on this Screen",
  286.        "OK"
  287.   };
  288.  
  289.      if ( VisualInfo ) {
  290.           FreeVisualInfo( VisualInfo );
  291.           VisualInfo = NULL;
  292.      }
  293.      if ( Scr ) {
  294.  
  295.           PubScreenStatus( Scr, PSNF_PRIVATE );   /* make the screen unavailable */
  296.  
  297.           while( ! CloseScreen( Scr ))
  298.             {
  299.                Forbid();
  300.                EasyRequestArgs( Scr-> FirstWindow, &myezreq, NULL, NULL );
  301.                Permit();
  302.             }
  303.  
  304.      }
  305.      Scr = NULL;
  306. }
  307.  
  308. int HandlePlotWindowIDCMP( void )
  309. {
  310.      struct IntuiMessage *m;
  311.      struct MenuItem          *n;
  312.      int            (*func)();
  313.      BOOL           running = TRUE;
  314.  
  315.      while( m = GT_GetIMsg( PlotWindowWnd->UserPort )) {
  316.  
  317.           CopyMem(( char * )m, ( char * )&PlotWindowMsg, (long)sizeof( struct IntuiMessage ));
  318.  
  319.           GT_ReplyIMsg( m );
  320.  
  321.           switch ( PlotWindowMsg.Class ) {
  322.  
  323.                case IDCMP_REFRESHWINDOW:
  324.                     GT_BeginRefresh( PlotWindowWnd );
  325.                     GT_EndRefresh( PlotWindowWnd, TRUE );
  326.                     break;
  327.  
  328.                case IDCMP_VANILLAKEY:
  329.                     running = PlotWindowVanillaKey();
  330.                     break;
  331.  
  332.                case IDCMP_RAWKEY:
  333.                     running = PlotWindowRawKey();
  334.                     break;
  335.  
  336.                case IDCMP_MOUSEBUTTONS:
  337.                     break;
  338.  
  339.                case IDCMP_GADGETUP:
  340.                     func = ( void * )(( struct Gadget * )PlotWindowMsg.IAddress )->UserData;
  341.                     running = func();
  342.                     break;
  343.  
  344.                case IDCMP_MENUPICK:
  345.                     while( PlotWindowMsg.Code != MENUNULL ) {
  346.                          n = ItemAddress( PlotWindowMenus, PlotWindowMsg.Code );
  347.                          func = (void *)(GTMENUITEM_USERDATA( n ));
  348.                          running = func();
  349.                          PlotWindowMsg.Code = n->NextSelect;
  350.                     }
  351.                     break;
  352.           }
  353.      }
  354.      return( running );
  355. }
  356.  
  357. int OpenPlotWindowWindow( void )
  358. {
  359.      struct NewGadget    ng;
  360.      struct Gadget  *g;
  361.      UWORD          lc, tc;
  362.      WORD   GadTop;
  363.     WORD BORD = 3; /* pixels at edge and bottom of control panel */
  364.  
  365.      if ( ! ( g = CreateContext( &PlotWindowGList )))
  366.           return( 1L );
  367.  
  368.      GADWIDTH  = ( Scr-> Width - 2*BORD ) / PlotWindow_CNT;
  369.      GADHEIGHT = cPFont->ta_YSize * 2;
  370.  
  371.      GadTop = Scr-> Height - Scr-> BarHeight -1  - cPFont->ta_YSize * 2 - BORD;
  372.  
  373.      for( lc = 0, tc = 0; lc < PlotWindow_CNT; lc++ ) {
  374.  
  375.           PlotWindowNGad[ lc ] . ng_LeftEdge = GADWIDTH * lc + BORD;
  376.           PlotWindowNGad[ lc ] . ng_Width    = GADWIDTH;
  377.           PlotWindowNGad[ lc ] . ng_TopEdge  = GadTop;
  378.           PlotWindowNGad[ lc ] . ng_Height   = GADHEIGHT;
  379.  
  380.           CopyMem((char * )&PlotWindowNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  381.  
  382.           ng.ng_VisualInfo = VisualInfo;
  383.           ng.ng_TextAttr   = cPFont;
  384.  
  385.           PlotWindowGadgets[ lc ] = g = CreateGadgetA((ULONG)PlotWindowGTypes[ lc ], g, &ng, ( struct TagItem * )&PlotWindowGTags[ tc ] );
  386.  
  387.           while( PlotWindowGTags[ tc ] ) tc += 2;
  388.           tc++;
  389.  
  390.           if ( NOT g )
  391.                return( 2L );
  392.      }
  393.  
  394.      if ( ! ( PlotWindowMenus = CreateMenus( PlotWindowNewMenu, GTMN_FrontPen, 0L, TAG_DONE )))
  395.           return( 3L );
  396.  
  397.      LayoutMenus( PlotWindowMenus, VisualInfo, GTMN_TextAttr, cPFont, TAG_DONE );
  398.  
  399.  
  400.      if ( ! ( PlotWindowWnd = OpenWindowTags( NULL,
  401.                     WA_Left,  0,
  402.                     WA_Top,        Scr-> BarHeight+1,
  403.                     WA_Width, Scr-> Width,
  404.                     WA_Height,     Scr-> Height - (Scr-> BarHeight+1),
  405.                     WA_IDCMP, BUTTONIDCMP|IDCMP_MOUSEMOVE|IDCMP_MOUSEBUTTONS|IDCMP_MENUPICK|IDCMP_RAWKEY|IDCMP_VANILLAKEY,
  406.                     WA_Flags,     WFLG_SMART_REFRESH|WFLG_BACKDROP|WFLG_BORDERLESS,
  407.                     WA_Activate,   ( BEHIND ? FALSE : TRUE),
  408.                     WA_Gadgets,    ( CPANEL ? PlotWindowGList : NULL),
  409.                     WA_ScreenTitle,     MyName,
  410.                     WA_RptQueue,        0,
  411.                     WA_AutoAdjust, TRUE,
  412.                     WA_PubScreen,  Scr,
  413.                     TAG_DONE )))
  414.      return( 4L );
  415.  
  416.      SetMenuStrip( PlotWindowWnd, PlotWindowMenus );
  417.      GT_RefreshWindow( PlotWindowWnd, NULL );
  418.  
  419.      rp = PlotWindowWnd-> RPort;
  420.  
  421.      PlotWindowWnd-> RPort-> Font = fontPtr;
  422.  
  423.     BEHIND = FALSE;
  424.  
  425.      return( 0L );
  426. }
  427.  
  428. void ClosePlotWindowWindow( void )
  429. {
  430.      if ( PlotWindowMenus      ) {
  431.           ClearMenuStrip( PlotWindowWnd );
  432.           FreeMenus( PlotWindowMenus );
  433.           PlotWindowMenus = NULL;  }
  434.  
  435.      if ( PlotWindowWnd        ) {
  436.           CloseWindow( PlotWindowWnd );
  437.           PlotWindowWnd = NULL;
  438.      }
  439.  
  440.      if ( PlotWindowGList      ) {
  441.           FreeGadgets( PlotWindowGList );
  442.           PlotWindowGList = NULL;
  443.      }
  444. }
  445.  
  446. int HandledelwinIDCMP( void )
  447. {
  448.      struct IntuiMessage *m;
  449.      int            (*func)();
  450.      BOOL           running = TRUE;
  451.  
  452.      while( m = GT_GetIMsg( delwinWnd->UserPort )) {
  453.  
  454.           CopyMem(( char * )m, ( char * )&delwinMsg, (long)sizeof( struct IntuiMessage ));
  455.  
  456.           GT_ReplyIMsg( m );
  457.  
  458.           switch ( delwinMsg.Class ) {
  459.  
  460.                case IDCMP_REFRESHWINDOW:
  461.                     GT_BeginRefresh( delwinWnd );
  462.                     GT_EndRefresh( delwinWnd, TRUE );
  463.                     break;
  464.  
  465.                case IDCMP_CLOSEWINDOW:
  466.                     running = delwinCloseWindow();
  467.                     break;
  468.  
  469.                case IDCMP_VANILLAKEY:
  470.                     running = delwinVanillaKey();
  471.                     break;
  472.  
  473.                case IDCMP_RAWKEY:
  474.                     running = delwinRawKey();
  475.                     break;
  476.  
  477.                case IDCMP_GADGETUP:
  478.                case IDCMP_GADGETDOWN:
  479.                     func = ( void * )(( struct Gadget * )delwinMsg.IAddress )->UserData;
  480.                     running = func();
  481.                     break;
  482.           }
  483.      }
  484.      return( running );
  485. }
  486.  
  487. int OpendelwinWindow( void )
  488. {
  489.      struct NewGadget    ng;
  490.      struct Gadget  *g;
  491.      UWORD          lc, tc;
  492.      UWORD          offy = Scr->WBorTop + Scr->RastPort.TxHeight + 1;
  493.      WORD           xo, yo;
  494.      struct Rectangle rect;
  495.     
  496.  
  497.     delwinWidth  = fontPtr->tf_XSize * 22;
  498.     delwinHeight = cPFont->ta_YSize * 10;
  499.  
  500.     if (QueryOverscan(Disp, &rect, OSCAN_TEXT))
  501.       {
  502.  
  503.          xo = -Scr->ViewPort.DxOffset+(rect.MaxX-rect.MinX)/2 - delwinWidth/2;
  504.          yo = -Scr->ViewPort.DyOffset+(rect.MaxY-rect.MinY)/2 - delwinHeight/2;
  505.           }
  506.     else xo = yo = 100;
  507.  
  508.      if ( ! ( g = CreateContext( &delwinGList )))
  509.           return( 1L );
  510.  
  511.     delwinNGad[ 0 ] . ng_LeftEdge = Scr->WBorLeft;
  512.      delwinNGad[ 0 ] . ng_Width    = delwinWidth - Scr->WBorLeft - Scr->WBorRight;
  513.      delwinNGad[ 0 ] . ng_TopEdge  = offy;
  514.      delwinNGad[ 0 ] . ng_Height   = delwinHeight-(2*cPFont->ta_YSize) - offy;
  515.  
  516.     delwinNGad[ 1 ] . ng_LeftEdge = Scr->WBorLeft;
  517.      delwinNGad[ 1 ] . ng_Width    = (delwinWidth - Scr->WBorLeft - Scr->WBorRight)/2;
  518.      delwinNGad[ 1 ] . ng_TopEdge  = delwinHeight-(2*cPFont->ta_YSize) - Scr->WBorBottom ;
  519.      delwinNGad[ 1 ] . ng_Height   = (2*cPFont->ta_YSize);
  520.  
  521.     delwinNGad[ 2 ] . ng_LeftEdge = (delwinWidth - Scr->WBorLeft - Scr->WBorRight)/2 + Scr->WBorLeft;
  522.      delwinNGad[ 2 ] . ng_Width    = (delwinWidth - Scr->WBorLeft - Scr->WBorRight)/2;
  523.      delwinNGad[ 2 ] . ng_TopEdge  = delwinHeight-(2*cPFont->ta_YSize) - Scr->WBorBottom ;
  524.      delwinNGad[ 2 ] . ng_Height   = (2*cPFont->ta_YSize);
  525.  
  526.  
  527.      for( lc = 0, tc = 0; lc < delwin_CNT; lc++ ) {
  528.  
  529.           CopyMem((char * )&delwinNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  530.  
  531.           ng.ng_VisualInfo = VisualInfo;
  532.           ng.ng_TextAttr   = cPFont;
  533.  
  534.           delwinGadgets[ lc ] = g = CreateGadgetA((ULONG)delwinGTypes[ lc ], g, &ng, ( struct TagItem * )&delwinGTags[ tc ] );
  535.  
  536.           while( delwinGTags[ tc ] ) tc += 2;
  537.           tc++;
  538.  
  539.           if ( NOT g )
  540.                return( 2L );
  541.      }
  542.  
  543.      if ( ! ( delwinWnd = OpenWindowTags( NULL,
  544.                     WA_Left, xo,
  545.                     WA_Top, yo,
  546.                     WA_Width, delwinWidth,
  547.                     WA_Height,     delwinHeight,
  548.                     WA_IDCMP, LISTVIEWIDCMP|BUTTONIDCMP|IDCMP_CLOSEWINDOW|IDCMP_VANILLAKEY|IDCMP_RAWKEY,
  549.                     WA_Flags, WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
  550.                     WA_Gadgets,    delwinGList,
  551.                     WA_Title, delwinWdt,
  552.                     WA_ScreenTitle,     MyName,
  553.                     WA_PubScreen,  Scr,
  554.                     TAG_DONE )))
  555.      return( 4L );
  556.  
  557.      GT_RefreshWindow( delwinWnd, NULL );
  558.  
  559.  
  560.      return( 0L );
  561. }
  562.  
  563. void ClosedelwinWindow( void )
  564. {
  565.      if ( delwinWnd        ) {
  566.           CloseWindow( delwinWnd );
  567.           delwinWnd = NULL;
  568.      }
  569.  
  570.      if ( delwinGList      ) {
  571.           FreeGadgets( delwinGList );
  572.           delwinGList = NULL;
  573.      }
  574. }
  575.  
  576. int HandlePreSlideIDCMP( void )
  577. {
  578.     struct IntuiMessage    *m;
  579.     int            (*func)();
  580.     BOOL            running = TRUE;
  581.  
  582.     while( m = GT_GetIMsg( PreSlideWnd->UserPort )) {
  583.  
  584.         CopyMem(( char * )m, ( char * )&PreSlideMsg, (long)sizeof( struct IntuiMessage ));
  585.  
  586.         GT_ReplyIMsg( m );
  587.  
  588.         switch ( PreSlideMsg.Class ) {
  589.  
  590.             case    IDCMP_CLOSEWINDOW:
  591.                 running = PreSlideCloseWindow();
  592.                 break;
  593.  
  594.             case    IDCMP_GADGETUP:
  595.             case    IDCMP_GADGETDOWN:
  596.                 func = ( void * )(( struct Gadget * )PreSlideMsg.IAddress )->UserData;
  597.                 running = func();
  598.                 break;
  599.         }
  600.     }
  601.     return( running );
  602. }
  603.  
  604. int OpenPreSlideWindow( void )
  605. {
  606.     struct NewGadget    ng;
  607.     struct Gadget    *g;
  608.     UWORD          PreSlideWidth = 300;
  609.     UWORD          PreSlideHeight = 50;
  610.  
  611.     if ( ! ( g = CreateContext( &PreSlideGList )))
  612.         return( 1L );
  613.  
  614.     CopyMem((char * )&PreSlideNGad[ 0 ], (char * )&ng, (long)sizeof( struct NewGadget ));
  615.  
  616.     PreSlideWidth += Scr->BarHeight + fontPtr->tf_XSize;
  617.     PreSlideHeight += cPFont->ta_YSize;
  618.  
  619.     ng.ng_VisualInfo = VisualInfo;
  620.     ng.ng_TextAttr   = cPFont;
  621.     ng.ng_LeftEdge   = 40 + fontPtr->tf_XSize;
  622.     ng.ng_TopEdge    = 20 + Scr->BarHeight;
  623.     ng.ng_Width      = 220;
  624.     ng.ng_Height     = 20;
  625.  
  626.     PreSlideGTags[ 5 ] = precision+1;
  627.  
  628.     PreSlideGadgets[ 0 ] = g = CreateGadgetA((ULONG)PreSlideGTypes[ 0 ], g, &ng, ( struct TagItem * )&PreSlideGTags[ 0 ] );
  629.  
  630.     if ( NOT g )
  631.         return( 2L );
  632.  
  633.     if ( ! ( PreSlideWnd = OpenWindowTags( NULL,
  634.                 WA_Left,    Scr->Width/2 - PreSlideWidth/2,
  635.                 WA_Top,    Scr->Height/2 - PreSlideHeight/2,
  636.                 WA_Width,    PreSlideWidth,
  637.                 WA_Height,    PreSlideHeight + Scr->BarHeight ,
  638.                 WA_IDCMP,    SLIDERIDCMP|IDCMP_CLOSEWINDOW,
  639.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
  640.                     WA_PubScreen,  Scr,
  641.                 WA_Gadgets,    PreSlideGList,
  642.                 WA_Title,    PreSlideWdt,
  643.                 WA_ScreenTitle,    "Enter Significant Digits",
  644.                 TAG_DONE )))
  645.     return( 4L );
  646.  
  647.     GT_RefreshWindow( PreSlideWnd, NULL );
  648.  
  649.     return( 0L );
  650. }
  651.  
  652. void ClosePreSlideWindow( void )
  653. {
  654.     if ( PreSlideWnd        ) {
  655.         CloseWindow( PreSlideWnd );
  656.         PreSlideWnd = NULL;
  657.     }
  658.  
  659.     if ( PreSlideGList      ) {
  660.         FreeGadgets( PreSlideGList );
  661.         PreSlideGList = NULL;
  662.     }
  663.  
  664. }
  665.  
  666.