home *** CD-ROM | disk | FTP | other *** search
/ Vectronix 2 / VECTRONIX2.iso / FILES_01 / LATTIC_3.LZH / LESSONS / WTEST.C < prev   
C/C++ Source or Header  |  1990-01-28  |  4KB  |  204 lines

  1. /*     lc -w -csfm -v -O -Lavg wtest */
  2.  
  3. /*
  4.  * wtest.c - the WERCS test program for Lattice C 5
  5.  *
  6.  * Copyright (c) 1990 HiSoft
  7.  */
  8.  
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12. #include <aes.h>
  13. #include "wrsc.h"
  14.  
  15. /* global variables */
  16. OBJECT *menu_ptr;
  17. short screenx,screeny,screenw,screenh;
  18. int radio;
  19. int deskflag,finished=0;
  20. int checked;
  21. char edit[20];
  22.  
  23. void initialise(void)
  24. {
  25.     if (appl_init())
  26.         exit(EXIT_FAILURE);
  27.     if (!rsrc_load("WRSC.RSC"))
  28.     {
  29.         form_alert(1,"[1][Resource file error][ Quit ]");
  30.         exit(EXIT_FAILURE);
  31.     }
  32.     deskflag=0;
  33.     rsrc_gaddr(R_TREE,Menu1,&menu_ptr);
  34.     menu_bar(menu_ptr,1);
  35.  
  36.     wind_get(DESK,WF_WORKXYWH,&screenx,&screeny,&screenw,&screenh);
  37.     graf_mouse(ARROW,NULL);
  38.     *edit=0;
  39.     radio=DRadio1;
  40. }
  41.  
  42. void setdesk(OBJECT *newdesk)
  43. {
  44.     wind_newdesk(newdesk,ROOT);
  45.     /* force the AES to redraw the whole screen */
  46.     form_dial(FMD_FINISH,0,0,0,0,screenx,screeny,screenw,screenh);
  47. }
  48.  
  49. void deinitialise(void)
  50. {
  51.     if (deskflag)
  52.     {
  53.         setdesk(NULL);
  54.         deskflag=0;
  55.     }
  56.     menu_bar(menu_ptr,0);
  57.     rsrc_free();
  58.     appl_exit();
  59. }
  60.  
  61. int handle_dialog(OBJECT *dlog,int editnum)
  62. {
  63.     short x,y,w,h;
  64.     int but;
  65.     
  66.     form_center(dlog,&x,&y,&w,&h);
  67.     form_dial(FMD_START,0,0,0,0,x,y,w,h);
  68.     form_dial(FMD_GROW,x+w/2,y+h/2,0,0,x,y,w,h);
  69.     objc_draw(dlog,0,10,x,y,w,h);
  70.     but=form_do(dlog,editnum);
  71.     form_dial(FMD_SHRINK,x+w/2,y+h/2,0,0,x,y,w,h);
  72.     form_dial(FMD_FINISH,0,0,0,0,x,y,w,h);
  73.     dlog[but].ob_state&=~SELECTED;    /* de-select exit button */
  74.     return but;
  75. }
  76.  
  77.  
  78. /*
  79.  * copy a string into a TEDINFO structure.
  80.  */
  81. void set_tedinfo(OBJECT *tree,int obj,char *source)
  82. {
  83.     char *dest;
  84.     
  85.     dest=((TEDINFO *)tree[obj].ob_spec)->te_ptext;
  86.     strcpy(dest,source);
  87. }
  88.  
  89. /*
  90.  * copy the string from a TEDINFO into another string
  91.  */
  92. void get_tedinfo(OBJECT *tree, int obj, char *dest)
  93. {
  94.     char *source;
  95.  
  96.     source=((TEDINFO *)tree[obj].ob_spec)->te_ptext;    /* extract address */
  97.     strcpy(dest,source);
  98. }
  99.  
  100. void set_button(OBJECT *tree,int parent,int button)
  101. {
  102.     int b;
  103.     
  104.     for (b=tree[parent].ob_head; b!=parent; b=tree[b].ob_next)
  105.         if (b==button)
  106.             tree[b].ob_state|=SELECTED;
  107.         else
  108.             tree[b].ob_state&=~SELECTED;
  109. }
  110.  
  111. int get_button(OBJECT *tree,int parent)
  112. {
  113.     int b;
  114.  
  115.     b=tree[parent].ob_head;
  116.     for (; b!=parent && !(tree[b].ob_state&SELECTED); b=tree[b].ob_next)
  117.         ;
  118.  
  119.     return b;
  120. }
  121.  
  122. void test_dialog(void)
  123. {
  124.     OBJECT *dlog;
  125.     int result;
  126.     
  127.     rsrc_gaddr(R_TREE,TestDialog,&dlog);
  128.     set_tedinfo(dlog,DEditable,edit);
  129.     set_button(dlog,DParent,radio);
  130.     result=handle_dialog(dlog,DEditable);
  131.     if (result==DOK)
  132.     {
  133.         get_tedinfo(dlog,DEditable,edit);
  134.         radio=get_button(dlog,DParent);
  135.     }
  136. }
  137.  
  138. void handle_menu(int title,int item)
  139. {
  140.     char *aboutstr;
  141.  
  142.     switch (item)
  143.     {
  144.         case MAbout:
  145.             rsrc_gaddr(R_STRING,AAlert,&aboutstr);
  146.             form_alert(1,aboutstr);
  147.             break;
  148.             
  149.         case MQuit:
  150.             finished=1;
  151.             break;
  152.  
  153.         case MCheckme:
  154.             checked^=1;
  155.             menu_icheck(menu_ptr,MCheckme,checked);
  156.             break;
  157.  
  158.         case MDialog:
  159.             test_dialog();
  160.             break;
  161.  
  162.         case MInstall:
  163.             if (deskflag)
  164.             {
  165.                 deskflag=0;
  166.                 setdesk(NULL);
  167.             }
  168.             else
  169.             {
  170.                 OBJECT *temp;
  171.                 
  172.                 deskflag=1;
  173.                 rsrc_gaddr(R_TREE,NewDesktop,&temp);
  174.                 temp[0].ob_x=screenx;
  175.                 temp[0].ob_y=screeny;
  176.                 temp[0].ob_width=screenw;
  177.                 temp[0].ob_height=screenh;
  178.                 setdesk(temp);
  179.             }
  180.             break;
  181.     }
  182.     menu_tnormal(menu_ptr,title,1);
  183. }
  184.  
  185. void handle_events(void)
  186. {
  187.     short mbuff[8];
  188.  
  189.     for (; !finished;)
  190.     {
  191.         evnt_mesag(mbuff);
  192.         if (mbuff[0]==MN_SELECTED)
  193.             handle_menu(mbuff[3],mbuff[4]);
  194.     }
  195. }
  196.  
  197. int main(void)
  198. {
  199.     initialise();
  200.     handle_events();
  201.     deinitialise();
  202.     return EXIT_SUCCESS;
  203. }
  204.