home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / program / c / fldlib93 / examples / demo3.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-05-21  |  4.2 KB  |  176 lines

  1. /**************************************************************************
  2.  *                                                                        *
  3.  *                             FLDLIB DEMO 3                              *
  4.  *           Demonstrates multiple form and window management             *
  5.  *                                                                        *
  6.  **************************************************************************/
  7.  
  8. #include <stdlib.h>
  9. #include <aes.h>
  10. #include "fldlib.h"
  11. #include "demo.h"
  12.  
  13. OBJECT *form1, *form2;
  14. short form1handle, form2handle;
  15. int windowhandle;
  16. short vdihandle, work_out[57], work_in[] = {1,1,1,1,1,1,1,1,1,1,2};
  17.  
  18. void object_handle(short, short);
  19. int  main(void);
  20.  
  21.  
  22. void gem_init(void)  {
  23.     short dummy;
  24.     
  25.     vdihandle = graf_handle(&dummy, &dummy, &dummy, &dummy);
  26.     v_opnvwk(work_in, &vdihandle, work_out);
  27.     
  28.     windowhandle = wind_create(NAME|CLOSE|MOVE|SIZE|UPARROW|DNARROW|VSLIDE|LFARROW|RTARROW|HSLIDE, 100, 100, 100, 100);
  29.     wind_title(windowhandle, "Another GEM window");
  30.     wind_set(windowhandle, WF_HSLIDE, 1);
  31.     wind_set(windowhandle, WF_HSLSIZE, 1000);
  32.     wind_set(windowhandle, WF_VSLIDE, 1);
  33.     wind_set(windowhandle, WF_VSLSIZE, 1000);
  34.     wind_open(windowhandle, 100, 100, 200, 150);
  35. }
  36.  
  37.  
  38. void finish(void)  {
  39.     fld_exit();
  40.     
  41.     wind_close(windowhandle);
  42.     wind_delete(windowhandle);
  43.     
  44.     v_clsvwk(vdihandle);
  45.     
  46.     rsrc_free();
  47.     
  48.     appl_exit();
  49.     exit(0);
  50. }
  51.  
  52.  
  53. void object_handle(short object, short type)  {
  54.     switch(type)  {
  55.     case FORM1:
  56.  
  57.         switch (object)  {
  58.         case FM1_EXIT1:
  59.             form_alert(1, "[1][ Exit 1 | selected ][ OK ]");
  60.             finish();
  61.             break;
  62.         case FM1_EXIT2:
  63.             form_alert(1, "[1][ Exit 2 | selected ][ OK ]");
  64.             finish();
  65.             break;
  66.         case FM_DL2:
  67.             form2handle = fld_open(form2, FLDC_MOUSE, "FLDLIB Demo", FORM2);
  68.             form1[FM_DL2].ob_state &= ~SELECTED;
  69.             fld_draw(form1handle, FM_DL2, 0);
  70.             break;
  71.         }
  72.  
  73.         break;
  74.     case FORM2:
  75.  
  76.         switch (object)  {
  77.         case FM2_OK:
  78.             fld_close(form2handle);
  79.             form2[FM2_OK].ob_state &= ~SELECTED;
  80.             break;
  81.         }
  82.  
  83.         break;
  84.     }
  85. }
  86.  
  87.  
  88. int redraw_window(int windowhandle, GRECT *rect)  {
  89.     short pxyarray[4];
  90.     
  91.     pxyarray[0] = rect->g_x;
  92.     pxyarray[1] = rect->g_y;
  93.     pxyarray[2] = rect->g_x + rect->g_w - 1;
  94.     pxyarray[3] = rect->g_y + rect->g_h - 1;
  95.     
  96.     vsf_style(vdihandle, 8);
  97.     vsf_interior(vdihandle, 2);
  98.     vsf_color(vdihandle, WHITE);
  99.     vr_recfl(vdihandle, pxyarray);
  100.     
  101.     return 1;
  102. }
  103.  
  104.  
  105. void do_mesag(short *msgbuf)  {
  106.     switch (msgbuf[0])  {
  107.     case WM_REDRAW:
  108.         if (msgbuf[3] == windowhandle)
  109.             wind_redraw(windowhandle, (GRECT *) (msgbuf + 4), redraw_window);
  110.         break;
  111.     case WM_TOPPED:
  112.         if (msgbuf[3] == windowhandle)
  113.             wind_set(windowhandle, WF_TOP);
  114.         break;
  115.     case WM_CLOSED:
  116.         if (msgbuf[3] == windowhandle)
  117.             finish();
  118.         break;
  119.     case WM_SIZED: case WM_MOVED:
  120.         if (msgbuf[3] == windowhandle)
  121.             wind_set(windowhandle, WF_CURRXYWH, msgbuf[4], msgbuf[5], msgbuf[6], msgbuf[7]);
  122.         break;
  123.     }
  124. }
  125.  
  126.  
  127. int main(void)  {
  128.     short ret, type, handle, msgbuf[8], mx, my, mb, mk, kc, numclicks, evnts;
  129.  
  130.     appl_init();
  131.     fld_ability(FLDA_CLOSE|FLDA_ICON);
  132.  
  133.     if (!rsrc_load("DEMO.RSC"))  {
  134.         form_alert(1,"[3][ Could not find | DEMO.RSC ][ Exit ]");
  135.         appl_exit();
  136.         return 0;
  137.     }
  138.  
  139.     rsrc_gaddr(R_TREE, FORM1, &form1);
  140.     rsrc_gaddr(R_TREE, FORM2, &form2);
  141.  
  142.     form1handle = fld_open(form1, FLDC_SCREEN, "FLDLIB Demo", FORM1);
  143.     
  144.     gem_init();
  145.  
  146.     graf_mouse(ARROW, NULL);
  147.  
  148.     while (1)  {
  149.         evnts = evnt_multi(MU_KEYBD|MU_BUTTON|MU_MESAG, 2, 1, 1,  /* Flags + clicks */
  150.                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /* Rects to watch (none) */
  151.                            msgbuf, 0, 0, &mx, &my, &mb, &mk, /* Msg buffer + mouse click */
  152.                            &kc, &numclicks);
  153.  
  154.         if (evnts & MU_KEYBD)
  155.             if ((ret = fld_key(kc, &type, &handle)) != FLDR_NONE)  {
  156.                 object_handle(ret, type);
  157.             }
  158.         if (evnts & MU_BUTTON)
  159.             if ((ret = fld_mouse(mx, my, numclicks, &type, &handle)) != FLDR_NONE)  {
  160.                 object_handle(ret, type);
  161.             }
  162.         if (evnts & MU_MESAG)  {
  163.             do_mesag(msgbuf);
  164.             if ((ret = fld_mesag(msgbuf)) != FLDR_NONE)  {
  165.                 if (ret == form1handle)  {
  166.                     finish();
  167.                 } else if (ret == form2handle)  {
  168.                     fld_close(ret);
  169.                 }
  170.             }
  171.         }
  172.     }
  173.  
  174.  
  175.     return 0;
  176. }