home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_300 / 344_02 / video.c < prev    next >
Text File  |  1989-10-29  |  4KB  |  183 lines

  1.  
  2.  
  3.  
  4. /*  Video.c maps boxes and borders to the screen : determines video hardware */
  5.  
  6. /*  Uses memrite : an assembler routine that writes directly to video ram  */
  7.  
  8. #include <conio.h>
  9. #include <dos.h>
  10. #include <string.h>
  11. #include <mem.h>
  12. #include "video.h"
  13. #include "crt.h"
  14.  
  15.  
  16. int box(int left, int top, int right, int bot,int vpage, int style, int atr)
  17. {
  18. register int i;
  19. int x,v_bar,h_bar,ul_corner,ur_corner,ll_corner,lr_corner;
  20. unsigned char top_line[81], mid_line[81], bot_line[81];
  21.  
  22.        if(right < (left + 2) || bot < (top + 2))
  23.                return(0);
  24.  
  25.     if(style == 0)
  26.        ul_corner = ur_corner = ll_corner = lr_corner = h_bar = v_bar = 32;
  27.     else if(style == 1 ) {
  28.        ul_corner = 218;
  29.        ur_corner = 191;
  30.        h_bar = 196;
  31.        v_bar = 179;
  32.        ll_corner = 192;
  33.        lr_corner = 217;
  34.     }
  35.     else if(style == 2) {
  36.        ul_corner = 201;
  37.        ur_corner = 187;
  38.        h_bar = 205;
  39.        v_bar = 186;
  40.        ll_corner = 200;
  41.        lr_corner = 188;
  42.     }
  43.     else
  44.     return(0);
  45.  
  46.     x = right - left;
  47.     top_line[0] = ul_corner;
  48.     mid_line[0] = v_bar;
  49.     bot_line[0] = ll_corner;
  50.  
  51.     for(i = 1;i < x; i++) {
  52.     top_line[i] = bot_line[i] = h_bar;
  53.     mid_line[i] = 32;
  54.     }
  55.  
  56.     top_line[i] = ur_corner;
  57.     mid_line[i] = v_bar;
  58.     bot_line[i] = lr_corner;
  59.     i++;
  60.     top_line[i] = mid_line[i] = bot_line[i] = '\0';
  61.  
  62.     x = bot - top;
  63.  
  64.     memrite(atr,top,left,vpage,HORIZ,top_line);
  65.     for(i = 1; i < x; i++)
  66.     memrite(atr,(top+i),left,vpage,HORIZ,mid_line);
  67.  
  68.     memrite(atr,(top+i),left,vpage,HORIZ,bot_line);
  69.  
  70.     return(1);
  71. }
  72.  
  73. int border(int left,int top,int right,int bot,int vpage,int style,int atr)
  74. {
  75. register int i;
  76. int x,v_bar,h_bar,ul_corner,ur_corner,ll_corner,lr_corner;
  77. unsigned char top_line[81], mid_line[52], bot_line[81];
  78.  
  79.     if(right < (left + 2) || bot < (top + 2))
  80.     return(0);
  81.  
  82.     if(style == 0)
  83.     ul_corner = ur_corner = ll_corner = lr_corner = h_bar = v_bar = 32;
  84.     else if(style == 1 ) {
  85.     ul_corner = 218;  /* Single line border */
  86.     ur_corner = 191;
  87.     h_bar = 196;
  88.     v_bar = 179;
  89.     ll_corner = 192;
  90.     lr_corner = 217;
  91.     }
  92.     else if(style == 2) {
  93.     ul_corner = 201;
  94.     ur_corner = 187;
  95.     h_bar = 205;
  96.     v_bar = 186;
  97.     ll_corner = 200;
  98.     lr_corner = 188;
  99.     }
  100.     else
  101.     return(0);
  102.  
  103.     x = right - left;
  104.     top_line[0] = ul_corner;
  105.     bot_line[0] = ll_corner;
  106.  
  107.     for(i = 1;i < x; i++)
  108.     top_line[i] = bot_line[i] = h_bar;
  109.  
  110.     top_line[i] = ur_corner;
  111.     bot_line[i] = lr_corner;
  112.     i++;
  113.     top_line[i] = bot_line[i] = '\0';
  114.     x = bot - top;
  115.     memset(mid_line,v_bar,x);
  116.     mid_line[x] = '\0';
  117.  
  118.     memrite(atr,top,left,vpage,HORIZ,top_line);
  119.     memrite(atr,(top+1),left,vpage,VERT,mid_line);
  120.     memrite(atr,(top+1),right,vpage,VERT,mid_line);
  121.     memrite(atr,bot,left,vpage,HORIZ,bot_line);
  122.  
  123.     return(1);
  124. }
  125.  
  126. unsigned char getmode()
  127. {
  128.     _AH = 15;
  129.     _BH = 0;
  130.     geninterrupt(0x10);
  131.     return(_AL);
  132. }
  133.  
  134. enum VIDEO_CARD get_adaptor()
  135. {
  136. unsigned char equip_code = 0;
  137.  
  138.     _AX = 0x1A00;
  139.     geninterrupt(0x10);
  140.     if(_AL == 0x1A) {
  141.     switch(_BL) {
  142.         case 0: return(NONE);
  143.         case 1: return(MDA);
  144.         case 2: return(CGA);
  145.         case 4: return(EGACOLOR);
  146.         case 5: return(EGAMONO);
  147.         case 7: return(VGAMONO);
  148.         case 8: return(VGACOLOR);
  149.         case 10:
  150.         case 12:return(MCGACOLOR);
  151.         case 11:return(MCGAMONO);
  152.  
  153.     default:        return(CGA);
  154.     }
  155.     }
  156.     else {
  157.     _AH = 0x12;
  158.     _BX = 0x0010;
  159.     geninterrupt(0x10);
  160.     if(_BX != 0x10)
  161.         if(_BH == 0)
  162.         return(EGACOLOR);
  163.         else
  164.         return(EGAMONO);
  165.     else {
  166.         geninterrupt(0x11);
  167.         equip_code = (_AL & 0x30) >> 4;
  168.         switch(equip_code) {
  169.         case 1:
  170.         case 2: return(CGA);
  171.         case 3: return(MDA);
  172.  
  173.         default:    return(NONE);
  174.         }
  175.     }
  176.     }
  177. }
  178.  
  179.  
  180.  
  181.  
  182.  
  183.