home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / utility / 602 / programm.ing / vdi-xmpl.c
Encoding:
C/C++ Source or Header  |  1992-04-23  |  4.6 KB  |  191 lines

  1. /*
  2.  *  This program is adopted from DRI test program distributed
  3.  *  with GEM on MS-DOS machines.  It changed quite a  bit.
  4.  *
  5.  */
  6.  
  7.  
  8. #include <compiler.h>
  9. #include <gemfast.h>
  10. #include <stdlib.h>
  11. #include <stdarg.h>
  12. #include <vdibind.h>
  13. #include <aesbind.h>
  14. /* #include <vdibez.h> */
  15. /* #include "vdibez.h" */
  16.  
  17. void pmsg (const char *format, ...);
  18. void gem_exit(int handle, int code);
  19.  
  20. #define   WHITE   0
  21. #define   BLACK   1
  22. #define   BSIZE   0x3ffe
  23.  
  24. /* Coordinates for the ellipse */
  25. int  vvar1[]={188,112, 252,112, 305,156, /* 305,211, */
  26.           305,211, 305,265, 252,310, /* 188,310, */
  27.           188,310, 124,310,  72,265, /* 72,211,  */
  28.            72,211,  72,156, 124,112, 188,112};
  29.  
  30. /* Flags for the ellipse */
  31. unsigned char vfar1[]={1,0,0,1,0,0,1,0,0,1,0,0,0};
  32.  
  33. /* Coordinates for the funny shape */
  34. int    vvar2[]={290,380, 377,239, 551,253, /* 464,338, */
  35.         464,338, 551,338, 348,310, /* 377,338, */
  36.         377,338, 406,366, 421,380, 290,380};
  37.  
  38. /* Flags for the funny shape */
  39. unsigned char vfar2[]={0,0,0,1,0,0,1,0,0,0};
  40.  
  41. /* Coordinates for the rectangle */
  42. int    vvar3[]={377,70,  /* 377,70,  464,70,  464,70, */
  43.         464,70,  /* 464,70,  464,169, 464,169, */
  44.         464,169, /* 464,169, 377,169, 377,169, */
  45.         377,169, /* 377,169, 377,70,*/  377,70};
  46. /* Flags for the rectangle */
  47. unsigned char vfar3[]={0,0,0,0,0};
  48.  
  49. /* #define BEZ_DRAW v_bez_fill */
  50. #define BEZ_DRAW v_bez
  51.  
  52. /*
  53.  * if this program gets any argument it will be used
  54.  * for quality settings in v_bez_qual call
  55.  */
  56.  
  57. int clip_rect[4] = {0, 0, 0, 0};
  58.  
  59. int
  60. main(int argc, char **argv)
  61. {
  62.     void *bezbuff;
  63.     int dummy, actual, qual;
  64.     int ii;
  65.     int vhandle, work_in[11], work_out[57];
  66.     int brextent[4];
  67.     int bnpoints, bnmoves;
  68.     double yscale, xscale;
  69.     
  70.     if (argc > 1) {
  71.     argv++;
  72.     qual = atoi (*argv);
  73.     }
  74.     else {
  75.     qual = 100;
  76.     }
  77.     
  78.     if(appl_init()==-1)
  79.     return(0);
  80.     vhandle = graf_handle(&ii,&ii,&ii,&ii);
  81.     graf_mouse(M_OFF, (int *)0);
  82.     v_clrwk(vhandle);
  83.     
  84.     for(ii = 0; ii < 10; ii++)
  85.     work_in[ii] = 1;
  86.     work_in[10] = 2;            /* raster coordinates */
  87.     v_opnvwk(work_in, &vhandle, work_out);
  88.     clip_rect[2] = work_out[0];
  89.     clip_rect[3] = work_out[1];
  90.     vs_clip(vhandle, 1, clip_rect);
  91.  
  92.     /* adjust coordinates of figures to a screen */
  93.     if (639 != clip_rect[2] || 399 != clip_rect[3]) {
  94.     xscale = ((double) (clip_rect[2] + 1)) / 640;
  95.     yscale = ((double) (clip_rect[3] + 1)) / 400;
  96.     for (ii = 0; ii < sizeof(vvar1)/ sizeof(int); ) {
  97.         vvar1[ii++] *=xscale;
  98.         vvar1[ii++] *=yscale;
  99.     }
  100.     for (ii = 0; ii < sizeof(vvar2)/ sizeof(int); ) {
  101.         vvar2[ii++] *=xscale;
  102.         vvar2[ii++] *=yscale;
  103.     }
  104.     for (ii = 0; ii < sizeof(vvar3)/ sizeof(int); ) {
  105.         vvar3[ii++] *=xscale;
  106.         vvar3[ii++] *=yscale;
  107.     }
  108.     }
  109.  
  110.  
  111. #if 0
  112.     /* It looks like that one may skip this call on ST */
  113.  
  114.     bezbuff = 0;
  115.     v_set_app_buff((void *)bezbuff,0);
  116. #endif
  117.  
  118. #if 0
  119. /**
  120.     if (0 == (bezbuff = (int *) malloc(BSIZE * sizeof(short)))) {
  121.     pmsg("No memory");
  122.     gem_exit (vhandle, 1);
  123.     }
  124.     v_set_app_buff((void *)bezbuff, BSIZE);
  125. **/
  126. #endif
  127.     v_bez_on(vhandle);      /* Turn on bezier functionality */
  128.  
  129.     actual = v_bez_qual(vhandle, qual, &ii);
  130.     pmsg("Bezier curves quality|requested %3d|actual %3d", qual, actual);
  131.  
  132.     
  133.     vsf_color(vhandle,BLACK);
  134.     
  135.     /* Draw an ellipse */
  136.     ii = BEZ_DRAW(vhandle, sizeof(vvar1)/(2 * sizeof(int)), vvar1,
  137.           (char *) vfar1,
  138.           brextent, &bnpoints, &bnmoves);
  139.     pmsg("Boundig box|%3d %3d %3d %3d|pnts = %d|moves = %d",
  140.      brextent[0], brextent[1], brextent[2], brextent[3],
  141.      ii, bnmoves);
  142.     
  143.     /* Draw a funny shape */
  144.     ii = BEZ_DRAW(vhandle, sizeof(vvar2)/(2 * sizeof(int)), vvar2,
  145.           (char *) vfar2,
  146.           brextent, &bnpoints, &bnmoves);
  147.     pmsg("Boundig box|%3d %3d %3d %3d|pnts = %d|moves = %d",
  148.      brextent[0], brextent[1], brextent[2], brextent[3],
  149.      ii, bnmoves);
  150.     
  151.     /* Draw a rectangle */
  152.     ii = BEZ_DRAW(vhandle, sizeof(vvar3)/(2 * sizeof(int)), vvar3,
  153.           (char *) vfar3,
  154.           brextent, &bnpoints, &bnmoves);
  155.     pmsg("Boundig box|%3d %3d %3d %3d|pnts = %d|moves = %d",
  156.      brextent[0], brextent[1], brextent[2], brextent[3],
  157.      ii, bnmoves);
  158.  
  159.     (void) evnt_keybd();
  160.     v_bez_off(vhandle);
  161.     gem_exit(vhandle, 0);
  162.     return 0;          /* for a compiler to chew on */
  163. }
  164.  
  165.  
  166. void
  167. gem_exit(handle, code)
  168. int handle;
  169. int code;
  170. {
  171.     v_clsvwk(handle);
  172.     graf_mouse(M_ON, (int *)0);
  173.     appl_exit();
  174.     exit(code);
  175. }
  176.  
  177. void
  178.     pmsg (const char *format, ...)
  179. {
  180.     va_list args;
  181.     char albuf[80];
  182.     char *pos = albuf;
  183.     
  184.     pos += sprintf(pos, "[3][");
  185.     va_start(args, format);
  186.     pos += vsprintf(pos, format, args);
  187.     va_end(args);
  188.     (void) sprintf(pos,"][ OK ]");
  189.     form_alert(1,albuf);
  190. }
  191.