home *** CD-ROM | disk | FTP | other *** search
/ STraTOS 1997 April & May / STraTOS 1 - 1997 April & May.iso / CD01 / INTERNET / SITES / GRAHAM / XAAES_S.ZIP / XAAES / TESTAPP / TEST.C < prev    next >
Encoding:
C/C++ Source or Header  |  1996-01-13  |  7.6 KB  |  284 lines

  1. #include <AES.H>
  2.  
  3. void main(void)
  4. {
  5.     short work_in[11]={1,1,1,1,1,1,1,1,1,1,2};
  6.     short work_out[57];
  7.     short ap_id,w_id1,w_id2;
  8.     short msg[16],x,y,w,h,cx,cy,cw,ch,wx,wy,ww,wh,clip[4],pnt[4];
  9.     short dummy=0, my_handle, open_windows=2;
  10.     short offs_x=0, offs_y=0;
  11.     short e,evx,evy,a,kc_shstate,kc_key,click_count;
  12.     GRECT dirty, walk;
  13.     char win1_name[20],ktest[202];
  14.     short kt_p=1;
  15.     
  16.     ap_id=appl_init();
  17.     
  18.     my_handle=graf_handle(&x,&y,&w,&h);        // Open a virtual workstation
  19.     v_opnvwk(work_in,&my_handle,work_out);
  20.     
  21.     w_id1=wind_create(NAME|CLOSE|MOVER|FULLER|INFO, 0,0,200,100);
  22.     w_id2=wind_create(NAME|CLOSE|MOVER|SIZER|FULLER|LFARROW|RTARROW|UPARROW|DNARROW|HSLIDE|VSLIDE|INFO, 0,0,240,100);
  23.  
  24.     wind_set(w_id1,WF_NAME, ADDR("XaAES Demo (1)"));
  25.     sprintf(win1_name,"PID=%d,WinHandle=%d",ap_id,w_id2);
  26.     wind_set(w_id1,WF_INFO, ADDR(win1_name));
  27.     wind_set(w_id2,WF_NAME, ADDR("XaAES Demo (2)"));
  28.     sprintf(ktest,">");
  29.     wind_set(w_id2,WF_INFO, ADDR(ktest));
  30.  
  31.     wind_open(w_id2,10,10,300,150);    // Open a couple of Windows
  32.     wind_open(w_id1, 20,80,150,100);
  33.  
  34.     graf_mouse(POINT_HAND, (void*)0);
  35.  
  36.     while(open_windows)
  37.     {
  38.         e=evnt_multi(MU_MESAG|MU_KEYBD,258,3,0,0,0,0,0,0,0,0,0,0,0,
  39.             msg,0,0,&evx,&evy,&a,&kc_shstate,&kc_key,&click_count);
  40.  
  41.         if (e&MU_KEYBD)
  42.         {
  43.             if (kt_p==80)
  44.                 kt_p=1;
  45.             
  46.             ktest[kt_p]=(char)(kc_key&0xff);
  47.             kt_p++;
  48.             ktest[kt_p]='\0';
  49.             wind_set(w_id2,WF_INFO, ADDR(ktest));
  50.         }
  51.  
  52.         if (e&MU_MESAG)
  53.         {
  54.             dummy=msg[0];
  55.             switch(dummy)
  56.             {
  57.                 case WM_CLOSED:    // did someone close one of our windows?
  58.                     wind_close(msg[3]);
  59.                     open_windows--;
  60.                     break;
  61.                 case WM_HSLID:
  62.                     if (msg[3]==w_id2)
  63.                     {
  64.                         wind_set(msg[3], WF_HSLIDE, msg[4], 0, 0, 0);
  65.                         wind_update(BEG_UPDATE);
  66.                         wind_get(msg[3], WF_WORKXYWH, &wx, &wy, &ww, &wh);
  67.                         dirty.g_x=wx;
  68.                         dirty.g_y=wy;
  69.                         dirty.g_w=ww;
  70.                         dirty.g_h=wh;
  71.                         cw=ww/2; ch=wh/2;
  72.                         cx=wx+cw; cy=wy+ch;
  73.                         cw-=5; ch-=5;
  74.                         offs_x=msg[4]/2;
  75.                         pnt[0]=wx; pnt[1]=wy; pnt[2]=wx+ww; pnt[3]=wy+wh;
  76.                         wind_get(msg[3], WF_FIRSTXYWH, &x, &y, &w, &h);
  77.                         graf_mouse(M_OFF, NULL);
  78.                         while(h)
  79.                         {
  80.                             walk.g_x=x;
  81.                             walk.g_y=y;
  82.                             walk.g_w=w;
  83.                             walk.g_h=h;
  84.                             if (rc_intersect(&dirty,&walk))
  85.                             {
  86.                                 clip[0]=walk.g_x; clip[1]=walk.g_y;
  87.                                 clip[2]=walk.g_x+walk.g_w; clip[3]=walk.g_y+walk.g_h;
  88.                                 vs_clip(my_handle, 1, clip);
  89.                                 vsf_color(my_handle,WHITE);
  90.                                 v_bar(my_handle,pnt);
  91.                                 vsf_color(my_handle,RED);
  92.                                 v_ellipse(my_handle, cx+offs_x, cy+offs_y, cw, ch);
  93.                             }
  94.                             wind_get(msg[3], WF_NEXTXYWH, &x, &y, &w, &h);
  95.                         }
  96.                         vs_clip(my_handle, 0, clip);
  97.                         graf_mouse(M_ON, NULL);
  98.                         wind_update(END_UPDATE);
  99.                     }
  100.                     break;
  101.                 case WM_VSLID:
  102.                     if (msg[3]==w_id2)
  103.                     {
  104.                         wind_set(msg[3], WF_VSLIDE, msg[4], 0, 0, 0);
  105.                         wind_update(BEG_UPDATE);
  106.                         wind_get(msg[3], WF_WORKXYWH, &wx, &wy, &ww, &wh);
  107.                         offs_y=msg[4]/2;
  108.                         dirty.g_x=wx;
  109.                         dirty.g_y=wy;
  110.                         dirty.g_w=ww;
  111.                         dirty.g_h=wh;
  112.                         cw=ww/2; ch=wh/2;
  113.                         cx=wx+cw; cy=wy+ch;
  114.                         cw-=5; ch-=5;
  115.                         pnt[0]=wx; pnt[1]=wy; pnt[2]=wx+ww; pnt[3]=wy+wh;
  116.                         wind_get(msg[3], WF_FIRSTXYWH, &x, &y, &w, &h);
  117.                         graf_mouse(M_OFF, NULL);
  118.                         while(h)
  119.                         {
  120.                             walk.g_x=x;
  121.                             walk.g_y=y;
  122.                             walk.g_w=w;
  123.                             walk.g_h=h;
  124.                             if (rc_intersect(&dirty,&walk))
  125.                             {
  126.                                 clip[0]=walk.g_x; clip[1]=walk.g_y;
  127.                                 clip[2]=walk.g_x+walk.g_w; clip[3]=walk.g_y+walk.g_h;
  128.                                 vs_clip(my_handle, 1, clip);
  129.                                 vsf_color(my_handle,WHITE);
  130.                                 v_bar(my_handle,pnt);
  131.                                 vsf_color(my_handle,RED);
  132.                                 v_ellipse(my_handle, cx+offs_x, cy+offs_y, cw, ch);
  133.                             }
  134.                             wind_get(msg[3], WF_NEXTXYWH, &x, &y, &w, &h);
  135.                         }
  136.                         vs_clip(my_handle, 0, clip);
  137.                         graf_mouse(M_ON, NULL);
  138.                         wind_update(END_UPDATE);
  139.                     }
  140.                     break;
  141.                 case WM_ARROWED:
  142.                     if (msg[3]==w_id2)
  143.                     {
  144.                         x=msg[4];
  145.                         switch(x)
  146.                         {
  147.                             case WA_LFLINE:
  148.                                 if(offs_x>=4) offs_x-=4;
  149.                                 break;
  150.                             case WA_RTLINE:
  151.                                 offs_x+=4;
  152.                                 break;
  153.                             case WA_UPLINE:
  154.                                 if(offs_y>=4) offs_y-=4;
  155.                                 break;
  156.                             case WA_DNLINE:
  157.                                 offs_y+=4;
  158.                                 break;
  159.                             case WA_LFPAGE:
  160.                                 if(offs_x>=40) offs_x-=40;
  161.                                 break;
  162.                             case WA_RTPAGE:
  163.                                 offs_x+=40;
  164.                                 break;
  165.                             case WA_UPPAGE:
  166.                                 if(offs_y>=40) offs_y-=40;
  167.                                 break;
  168.                             case WA_DNPAGE:
  169.                                 offs_y+=40;
  170.                                 break;
  171.                         }
  172.  
  173.                         wind_set(msg[3], WF_HSLIDE, offs_x*2, 0, 0, 0);
  174.                         wind_set(msg[3], WF_VSLIDE, offs_y*2, 0, 0, 0);
  175.     
  176.                         wind_update(BEG_UPDATE);
  177.                         wind_get(msg[3], WF_WORKXYWH, &wx, &wy, &ww, &wh);
  178.                         dirty.g_x=wx;
  179.                         dirty.g_y=wy;
  180.                         dirty.g_w=ww;
  181.                         dirty.g_h=wh;
  182.                         cw=ww/2; ch=wh/2;
  183.                         cx=wx+cw; cy=wy+ch;
  184.                         cw-=5; ch-=5;
  185.                         pnt[0]=wx; pnt[1]=wy; pnt[2]=wx+ww; pnt[3]=wy+wh;
  186.                         wind_get(msg[3], WF_FIRSTXYWH, &x, &y, &w, &h);
  187.                         graf_mouse(M_OFF, NULL);
  188.                         while(h)
  189.                         {
  190.                             walk.g_x=x;
  191.                             walk.g_y=y;
  192.                             walk.g_w=w;
  193.                             walk.g_h=h;
  194.                             if (rc_intersect(&dirty,&walk))
  195.                             {
  196.                                 clip[0]=walk.g_x; clip[1]=walk.g_y;
  197.                                 clip[2]=walk.g_x+walk.g_w; clip[3]=walk.g_y+walk.g_h;
  198.                                 vs_clip(my_handle, 1, clip);
  199.                                 vsf_color(my_handle,WHITE);
  200.                                 v_bar(my_handle,pnt);
  201.                                 vsf_color(my_handle,RED);
  202.                                 v_ellipse(my_handle, cx+offs_x, cy+offs_y, cw, ch);
  203.                             }
  204.                             wind_get(msg[3], WF_NEXTXYWH, &x, &y, &w, &h);
  205.                         }
  206.                         vs_clip(my_handle, 0, clip);
  207.                         graf_mouse(M_ON, NULL);
  208.                         wind_update(END_UPDATE);
  209.                     }
  210.                     break;
  211.                 case WM_SIZED:
  212.                 case WM_MOVED:
  213.                     wind_set(msg[3], WF_CURRXYWH,msg[4], msg[5], msg[6], msg[7]);
  214.                     break;
  215.                 case WM_REDRAW:
  216.                     dirty.g_x=msg[4];
  217.                     dirty.g_y=msg[5];
  218.                     dirty.g_w=msg[6];
  219.                     dirty.g_h=msg[7];
  220.                     wind_update(BEG_UPDATE);
  221.                     wind_get(msg[3], WF_WORKXYWH, &wx, &wy, &ww, &wh);
  222.                     walk.g_x=wx;
  223.                     walk.g_y=wy;
  224.                     walk.g_w=ww;
  225.                     walk.g_h=wh;
  226.                     cw=ww/2; ch=wh/2;
  227.                     cx=wx+cw; cy=wy+ch;
  228.                     cw-=5; ch-=5;
  229.                     pnt[0]=wx; pnt[1]=wy; pnt[2]=wx+ww; pnt[3]=wy+wh;
  230.                     wind_get(msg[3], WF_FIRSTXYWH, &x, &y, &w, &h);
  231.                     rc_intersect(&walk,&dirty);
  232.                     graf_mouse(M_OFF, NULL);
  233.                     while(h)
  234.                     {
  235.                         walk.g_x=x;
  236.                         walk.g_y=y;
  237.                         walk.g_w=w;
  238.                         walk.g_h=h;
  239.                         if (rc_intersect(&dirty,&walk))
  240.                         {
  241.                             clip[0]=walk.g_x; clip[1]=walk.g_y;
  242.                             clip[2]=walk.g_x+walk.g_w; clip[3]=walk.g_y+walk.g_h;
  243.                             vs_clip(my_handle, 1, clip);
  244.                             vsf_color(my_handle,WHITE);
  245.                             v_bar(my_handle,pnt);
  246.                             if (msg[3]==w_id2)
  247.                             {
  248.                                 vsf_color(my_handle,RED);
  249.                                 v_ellipse(my_handle, cx+offs_x, cy+offs_y, cw, ch);
  250.                             }else{
  251.                                 vsf_color(my_handle,BLUE);
  252.                                 v_ellipse(my_handle, cx, cy, cw, ch);
  253.                             }
  254.                         }
  255.                         wind_get(msg[3], WF_NEXTXYWH, &x, &y, &w, &h);
  256.                     }
  257.                     vs_clip(my_handle, 0, clip);
  258.                     graf_mouse(M_ON, NULL);
  259.                     wind_update(END_UPDATE);
  260.                     break;
  261.                 case WM_FULLED:
  262.                     wind_get(msg[3], WF_FULLXYWH, &x, &y, &w, &h);
  263.                     wind_get(msg[3], WF_CURRXYWH, &wx, &wy, &ww, &wh);
  264.                     if ((((x==wx)&&(y==wy))&&(w==ww))&&(h==wh))
  265.                         wind_get(msg[3], WF_PREVXYWH, &x, &y, &w, &h);
  266.                     wind_set(msg[3], WF_CURRXYWH, x, y, w, h);
  267.                     break;
  268.                 case WM_TOPPED:
  269.                     wind_set(msg[3], WF_TOP, 0, 0, 0, 0);
  270.                     break;
  271.                 case WM_BOTTOMED:
  272.                     wind_set(msg[3], WF_BOTTOM, 0, 0, 0, 0);
  273.                     break;
  274.             }
  275.         }
  276.     }
  277.     
  278. //    dummy=evnt_button(2,2,2,&dummy,&dummy,&dummy,&dummy);
  279.     
  280.     v_clsvwk(my_handle);
  281.         
  282.     appl_exit();
  283. }
  284.