home *** CD-ROM | disk | FTP | other *** search
/ gondwana.ecr.mu.oz.au/pub/ / Graphics.tar / Graphics / avogl.tar.gz / avogl.tar / vogl / drivers / ibmpc / sigma.c < prev    next >
C/C++ Source or Header  |  1992-09-22  |  2KB  |  141 lines

  1. #include "vogl.h"
  2.  
  3. #define S_PIX_ASPECT    1.2 
  4. static    int            old_mode = 3;
  5. extern    unsigned int    _cur_color;
  6. extern    unsigned int    _buffer_segment;
  7.  
  8. static    unsigned char     pal[17] = {0, 4, 2, 14, 1, 5, 3, 15,
  9.                         12, 10, 6, 9, 11, 13, 14, 15, 0};
  10.  
  11. extern    void    
  12.         sig_line(),
  13.         sig_set_colors();
  14.  
  15. extern    int    sigmaclear(),
  16.         pc_fill(),
  17.         pc_font(),
  18.         pc_getkey(),
  19.         pc_checkkey(),
  20.         pc_locator(),
  21.         pc_string(),
  22.         setmode();
  23.  
  24. static    int
  25. noop()
  26. {
  27.     return (-1);
  28. }
  29.  
  30.  
  31. static    unsigned    int    loc_val;
  32.  
  33. int
  34. sigma_init()
  35. {
  36.  
  37.     vdevice.sizeX = 399 * S_PIX_ASPECT;
  38.     vdevice.sizeY = 399;
  39.     vdevice.sizeSx = 639;
  40.     vdevice.sizeSy = 399;
  41.     vdevice.depth = 4;
  42.     _buffer_segment = (unsigned)0xB800;
  43.     old_mode = setmode(0x42);
  44.     sigma_set_colors(pal);
  45.     set_loc(64);
  46.     pc_locinit(vdevice.sizeSx, vdevice.sizeSy);
  47.     return (1);
  48. }
  49.  
  50.  
  51. /* 
  52.  * sigma_vclear
  53.  *
  54.  *    Just clears the current viewport.
  55.  */
  56. void
  57. sigma_vclear()
  58. {
  59.     int     x[4], y[4];
  60.  
  61.     if (vdevice.maxVx != vdevice.sizeSx
  62.         || vdevice.maxVy != vdevice.sizeSy
  63.         || vdevice.minVx != vdevice.sizeSx
  64.         || vdevice.minVy != vdevice.sizeSy) {
  65.         x[0] = x[1] = vdevice.maxVx;
  66.         y[0] = vdevice.maxVy;
  67.         y[1] = y[2] = vdevice.minVy;
  68.         x[2] = x[3] = vdevice.minVx;
  69.         y[3] = vdevice.maxVy;
  70.  
  71.         pc_fill(4, x, y);
  72.     } else {
  73.         sigmaclear();
  74.     }
  75. }
  76.  
  77. /*
  78.  * sigma_exit
  79.  *
  80.  *    Sets the display back to text mode.
  81.  */
  82. sigma_exit()
  83. {
  84.     unshowmouse();
  85.     (void)setmode(3);
  86.     return (1);
  87. }
  88.  
  89. sigma_draw(x, y)
  90.     int    x, y;
  91. {
  92.     sig_line(vdevice.cpVx, vdevice.sizeSy - vdevice.cpVy, x, vdevice.sizeSy - y, _cur_color);
  93.     vdevice.cpVx = x;
  94.     vdevice.cpVy = y;
  95. }
  96.  
  97. sigma_char(c)
  98.     int    c;
  99. {
  100.     sigmachar(c, vdevice.cpVx, vdevice.sizeSy - vdevice.cpVy, _cur_color);
  101. }
  102.  
  103. sigma_color(i)
  104.     int    i;
  105. {
  106.     _cur_color = (unsigned)i;
  107. }
  108.  
  109. static DevEntry sigmadev = {
  110.     "sigma",
  111.     "large",
  112.     "small",
  113.     noop,
  114.     sigma_char,
  115.     pc_checkkey,
  116.     sigma_vclear,
  117.     sigma_color,
  118.     sigma_draw,
  119.     sigma_exit,
  120.     pc_fill,
  121.     pc_font,
  122.     noop,
  123.     pc_getkey,
  124.     sigma_init,
  125.     pc_locator,
  126.     noop,
  127.     pc_string,
  128.     noop
  129. };
  130.  
  131. /*
  132.  * _sigma_devcpy
  133.  *
  134.  *    copy the pc device into vdevice.dev.
  135.  */
  136. _sigma_devcpy()
  137. {
  138.     vdevice.dev = sigmadev;
  139. }
  140.  
  141.