home *** CD-ROM | disk | FTP | other *** search
/ Vectronix 2 / VECTRONIX2.iso / FILES_07 / ACS.ZIP / ACS / USERDEF / USER.C < prev    next >
C/C++ Source or Header  |  1992-01-28  |  3KB  |  140 lines

  1. /*
  2.     Beispielapplikation für ACS
  3.  
  4.     "Userdef"
  5.  
  6.     2.1.92         Stefan Bachert
  7.  
  8. */
  9.  
  10. #include    <acs.h>
  11. #include    <user.h>
  12.  
  13. static int cdecl user_obj (PARMBLK *pb);
  14. static void my_sized (Awindow *window, Axywh *xywh);
  15. static void my_fulled (Awindow *window);
  16. static Awindow *make_el (void *not_used);
  17.  
  18. #include    <user.ah>
  19.  
  20. static int cdecl user_obj (PARMBLK *pb)
  21.     /*
  22.      *    Zeichnet eine Ellipse
  23.      */
  24. {
  25.   int x, y, xrad, yrad;
  26.   int pxy [4];
  27.  
  28.   pxy [2] = pb-> pb_wc;
  29.   pxy [3] = pb-> pb_hc;
  30.   if (pxy [2] || pxy [3]) {            /* klippe */
  31.     pxy [0] = pb-> pb_xc;
  32.     pxy [1] = pb-> pb_yc;
  33.     pxy [2] += pxy [0] - 1;
  34.     pxy [3] += pxy [1] - 1;
  35.     vs_clip (vdi_handle, TRUE, pxy);
  36.   };
  37.  
  38.   xrad = (pb-> pb_w >> 1) - 2;        /* Abstand zu Rand */
  39.   yrad = (pb-> pb_h >> 1) - 2;
  40.  
  41.   x = pb-> pb_x + (pb-> pb_w >> 1);
  42.   y = pb-> pb_y + (pb-> pb_h >> 1);
  43.  
  44.   vswr_mode        (vdi_handle, MD_REPLACE);
  45.   vsf_interior    (vdi_handle, FIS_PATTERN);
  46.   vsf_style        (vdi_handle, 19);
  47.   vsf_perimeter    (vdi_handle, TRUE);
  48.   vsf_color        (vdi_handle, BLACK);
  49.   v_ellipse        (vdi_handle, x, y, xrad, yrad);
  50.  
  51.   vs_clip        (vdi_handle, FALSE, pxy);        /* klippen ausschalten */
  52.  
  53.   return (pb-> pb_currstate);
  54. }
  55.  
  56. static void my_sized (Awindow *window, Axywh *xywh)
  57.     /*
  58.      *    Fenster inneres verändern
  59.      */
  60. {
  61.   OBJECT *work;
  62.  
  63.   work = window-> work;
  64.   work [0]. ob_width =
  65.   work [USEROBJ]. ob_width = 
  66.         xywh-> w - window-> wi_act. w + window-> wi_work. w;
  67.                 /* ^^^^^^^^^^  Fenster attribute ^^^^^^^^^
  68.                                 abziehen (sizer, titlebar)
  69.                 */
  70.  
  71.   work [0]. ob_height =
  72.   work [USEROBJ]. ob_height =
  73.         xywh-> h - window-> wi_act. h + window-> wi_work. h;
  74.  
  75.   window-> state |= AWS_FORCEREDRAW; /* immer neu zeichnen */
  76.   Awi_sized (window, xywh);
  77. }
  78.  
  79.  
  80. static void my_fulled (Awindow *window)
  81.     /*
  82.      *    Fenster inneres verändern
  83.      */
  84. {
  85.   OBJECT *work;
  86.  
  87.   work = window-> work;
  88.  
  89.   if (window-> state & AWS_FULL) {    /* ist schon voll */
  90.     work [0]. ob_width =
  91.     work [USEROBJ]. ob_width =
  92.         window-> wi_normal. w - window-> wi_act. w + window-> wi_work. w;;
  93.  
  94.     work [0]. ob_height =
  95.     work [USEROBJ]. ob_height =
  96.         window-> wi_normal. h - window-> wi_act. h + window-> wi_work. h;
  97.   } else {
  98.     work [0]. ob_width  =
  99.     work [USEROBJ]. ob_width  = desk. w - 30;
  100.  
  101.     work [0]. ob_height =
  102.     work [USEROBJ]. ob_height = desk. h - 40;
  103.   };
  104.  
  105.   window-> state |= AWS_FORCEREDRAW; /* immer neu zeichnen */
  106.   Awi_fulled (window);
  107. }
  108.  
  109. static Awindow *make_el (void *not_used)
  110.     /*
  111.      *  Erzeuge Fenster
  112.      */
  113. {
  114.   Awindow *wi;
  115.  
  116.   wi = Awi_create (&WINDOW);
  117.   if (wi == NULL) return NULL;
  118.   (wi-> open) (wi);
  119.   return wi;
  120. }
  121.  
  122.  
  123. int ACSinit (void)
  124.     /*
  125.      *  Doppelklick auf NEU erzeugt ein neues Fenster
  126.      */
  127. {
  128.   Awindow *window;
  129.  
  130.   window = Awi_root ();                 /* root window */
  131.  
  132.   if (window == NULL) return FAIL;      /* lege NEU Icon an */
  133.   (window-> service) (window, AS_NEWCALL, &WINDOW. create);
  134.  
  135.   window = &WINDOW;
  136.   (window-> create) (NULL);             /* sofort ein Fenster erzeugen */
  137.  
  138.   return OK;
  139. }
  140.