亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? egagraf.c

?? MSC TURBO-C圖形庫(kù)
?? C
字號(hào):
/*
 * grafix --- egagraf.c
 *
 * EGA graphics driver - hi-res mode only (on enhanced, ordinary, or
 *                         mono (i hope it works!) display)
 *
 * Written 4/87 by Scott Snyder (ssnyder@romeo.caltech.edu or @citromeo.bitnet)
 *
 */

#include <dos.h>
#include "macros.h"
#include "grafsys.h"

/* EGA parameters */

#define int_video 16
#define ega_setmode 0
#define ega_setcur 2
#define ega_setpage 5
#define ega_writech 9
#define ega_setpal 0x10
#define mde_80bw 2
#define mde_80co 3
#define mde_320 4
#define mde_640 6
#define mde_640X200c 14
#define mde_640X350m 15
#define mde_640X350c 16

#define g_linsiz 80
#define g_allmask 0xff
#define g_pixbyte 8
#define g_bitpix 1

/* Display dependent parameters */

#define g_en_pg1       (g_obj far *)0xa0000000
#define g_en_pg2       (g_obj far *)0xa0008000
#define g_en_bufsiz    28000
#define g_en_colormask 0x0f
#define g_en_xsize     640
#define g_en_ysize     350
#define g_en_xchsize   (g_en_xsize / 8)
#define g_en_ychsize   (g_en_ysize / 14)
#define g_en_aspect    0.85

#define g_cd_pg1       (g_obj far *)0xa0000000
#define g_cd_pg2       (g_obj far *)0xa0004000
#define g_cd_bufsiz    16000
#define g_cd_colormask 0x0f
#define g_cd_xsize     640
#define g_cd_ysize     200
#define g_cd_xchsize   (g_cd_xsize / 8)
#define g_cd_ychsize   (g_cd_ysize / 8)
#define g_cd_aspect    0.43

#define g_mo_pg1       (g_obj far *)0xa0000000
#define g_mo_pg2       (g_obj far *)0xa0008000	/* is this right??? */
#define g_mo_bufsiz    28000
#define g_mo_colormask 0x03
#define g_mo_xsize     640
#define g_mo_ysize     350
#define g_mo_xchsize   (g_mo_xsize / 8)
#define g_mo_ychsize   (g_mo_ysize / 14)
#define g_mo_aspect    0.85

/* EGA port and register addresses */

#define ega_gr_addr   0x3ce	/* graphics controller address register */
#define ega_gr_data   0x3cf	/* graphics controller data register    */
#define ega_gr_sr     0		/* set/reset register index		*/
#define ega_gr_sren   1		/* set/reset enable register index	*/
#define ega_gr_ccmp   2		/* color compare register index		*/
#define ega_gr_rot    3		/* data rotate				*/
#define ega_gr_mapsel 4		/* read map select			*/
#define ega_gr_mode   5		/* mode register			*/
#define ega_gr_misc   6		/* miscellaneous			*/
#define ega_gr_colorx 7		/* color don't care			*/
#define ega_gr_mask   8		/* bit mask				*/
#define ega_gr_x_xor  24	/* xor function select			*/

/* mode variables */

STATIC unsigned g_bufsiz;
STATIC unsigned g_colormask;
STATIC g_obj far *g_page1addr, far *g_page2addr;

/* utility macros */

#define swap(a, b) {int _tmp; _tmp=a; a=b; b=_tmp;}
#define trimcolor(c) c &= g_colormask

#define plot(ptr, mask, tmp) { 	/* plot a pt. grph addr. must be mask reg */ \
  outp(ega_gr_data, mask); 						     \
  tmp = *ptr;			/* a read and a write that will STAY HERE!! */\
  *ptr = 0;								     \
}

/* move one to right */
#define bumpx(ptr,mask) 	    \
  if ((mask >>= g_bitpix) == 0) {   \
    mask = 0x80;                    \
    ptr++;                          \
  }

/* move one line */
#define bumpy(ptr,ydir) { \
  if (ydir)		  \
    ptr-=g_linsiz;	  \
  else			  \
    ptr+=g_linsiz;	  \
}

/****************************************************************************\
*                             internal utilities                             *
\****************************************************************************/

/* calculate byte and bit offsets in the graphics buffer for a point */

STATIC void goffs(x, y, offs, pix)
unsigned x, y, *offs, *pix;
{
  *offs = y*g_linsiz + x/g_pixbyte;
  *pix = g_pixbyte - 1 - x%g_pixbyte;
}

/****************************************************************************
 *                     externally callable functions                        *
 ****************************************************************************/

/* fill a region with the specified color */

#ifdef __TURBOC__
# pragma warn -aus /* TC */
# pragma warn -rch
#endif
void EGA_regfill(x1, y1, x2, y2, c)
unsigned x1, y1, x2, y2, c;
{
  unsigned offs1, offs2, pix1, pix2;
  int wholeobjs;
  g_obj far *ptr1, far *ptr2;
  g_obj begmask, endmask, mask;
  register unsigned y;
  register g_obj far *p;
  register g_obj tmp;

  if (y2 < y1) swap(y1, y2);
  if (x2 < x1) swap(x1, x2);

  goffs(x1, y1, &offs1, &pix1);
  goffs(x2, y1, &offs2, &pix2);
  wholeobjs = offs2 - offs1 - 1;
  ptr1 = g_drawbuf + offs1;
  ptr2 = g_drawbuf + offs2;

  trimcolor(c);
  begmask = g_allmask >> (g_pixbyte - 1 - pix1)*g_bitpix;
  endmask = g_allmask << pix2*g_bitpix;

  /* set up EGA registers for write */

  outp(ega_gr_addr, ega_gr_sr);		/* set/reset register           */
  outp(ega_gr_data, c);
  outp(ega_gr_addr, ega_gr_sren);	/* set/reset enable register    */
  outp(ega_gr_data, g_colormask);
  outp(ega_gr_addr, ega_gr_mode);	/* mode register        	*/
  outp(ega_gr_data, 0);			/* write mode 0			*/
  outp(ega_gr_addr, ega_gr_mask);	/* select bit mask register	*/

  /* do the write */

  if (wholeobjs < 0) {			/* region is less than 8 pels wide */
    p = ptr1;
    mask = begmask & endmask;
    outp(ega_gr_data, mask);		/* set bitmask for writes	*/
    for (y=y1; y<=y2; y++) {
      tmp = *p;				/* read byte into latches	*/
      *p = 0;				/* then write there to set the	*/
					/* bits				*/
      bumpy(p, 0);
    }
  }
  else {
    p = ptr1;				/* do left edge 		*/
    outp(ega_gr_data, begmask);
    for (y=y1; y<=y2; y++) {
      tmp = *p;
      *p = 0;
      bumpy(p, 0);
    }

    p = ptr2;				/* do right egde		*/
    outp(ega_gr_data, endmask);
    for (y=y1; y<=y2; y++) {
      tmp = *p;
      *p = 0;
      bumpy(p, 0);
    }

    p = ptr1+1;				/* now fill it in		*/
    outp(ega_gr_data, g_allmask);
    for (y=y1; y<=y2; y++) {
      g_fmemset(p, g_allmask, wholeobjs); /* can write it with anything here */
      bumpy(p, 0);
    }
  }

  /* reset the EGA to something nice */

  outp(ega_gr_data, g_allmask);		/* reset bit mask		*/
  outp(ega_gr_addr, ega_gr_sren);	/* disable set/reset mode	*/
  outp(ega_gr_data, 0);
}
#ifdef __TURBOC__
# pragma warn .aus /* TC */
# pragma warn .rch
#endif

/* fill the entire buffer with a color fast */

void EGA_clearall(c)
unsigned c;
{
  /* set up EGA registers for write */

  outp(ega_gr_addr, ega_gr_sr);		/* set/reset register           */
  outp(ega_gr_data, c);
  outp(ega_gr_addr, ega_gr_sren);	/* set/reset enable register    */
  outp(ega_gr_data, g_colormask);
  outp(ega_gr_addr, ega_gr_mode);	/* mode register        	*/
  outp(ega_gr_data, 0);			/* write mode 0			*/

  g_fmemset(g_drawbuf, g_allmask, g_bufsiz);

  outp(ega_gr_addr, ega_gr_sren);	/* disable set/reset mode	*/
  outp(ega_gr_data, 0);
}

/* make the drawing buffer visible by switching pages */

void EGA_show()
{
  union REGS inregs, outregs;

  if (g_bufflg) {
    g_curpage = 1-g_curpage;
    inregs.h.ah = ega_setpage;
    inregs.h.al = g_curpage;
    int86(int_video, &inregs, &outregs);

    g_drawbuf = g_physbuf;		/* swap around buffer pointers */
    g_physbuf = g_virtbuf;
    g_virtbuf = g_drawbuf;    
  }
}

/* set the color pallette */

void EGA_setpal(p, v)
unsigned p, v;
{
  union REGS inregs, outregs;

  inregs.h.ah = ega_setpal;
  inregs.h.al = 0;
  inregs.h.bl = p;
  inregs.h.bh = v;
  int86(int_video, &inregs, &outregs);
}

/* set the background color - just use setpal() */

void EGA_setback(c)
unsigned c;
{
  EGA_setpal(0, c);
}

/* turn on graphics mode. mode has no meaning */

#ifdef __TURBOC__
# pragma warn -par /* TC */
#endif
void EGA_gopen(mode)
unsigned mode;
{
  union REGS inregs, outregs;

  if (g_display == EN) {		/* Enhanced color display	*/
    inregs.h.ah = ega_setmode;
    inregs.h.al = mde_640X350c;
    int86(int_video, &inregs, &outregs);
    g_page1addr = g_en_pg1;
    g_page2addr = g_en_pg2;
    g_bufsiz = g_en_bufsiz;
    g_colormask = g_en_colormask;
    g_xsize = g_en_xsize;
    g_ysize = g_en_ysize;
    g_xchsize = g_en_xchsize;
    g_ychsize = g_en_ychsize;
    g_aspect = g_en_aspect;
  }
  else if (g_display == CD) {		/* Ordinary color display	*/
    inregs.h.ah = ega_setmode;
    inregs.h.al = mde_640X200c;
    int86(int_video, &inregs, &outregs);
    g_page1addr = g_cd_pg1;
    g_page2addr = g_cd_pg2;
    g_bufsiz = g_cd_bufsiz;
    g_colormask = g_cd_colormask;
    g_xsize = g_cd_xsize;
    g_ysize = g_cd_ysize;
    g_xchsize = g_cd_xchsize;
    g_ychsize = g_cd_ychsize;
    g_aspect = g_cd_aspect;
  }
  else if (g_display == MO) {			/* Monochrome display	*/
    inregs.h.ah = ega_setmode;			/* THIS HAS NOT BEEN TESTED */
    inregs.h.al = mde_640X350m;
    int86(int_video, &inregs, &outregs);
    g_page1addr = g_mo_pg1;
    g_page2addr = g_mo_pg2;
    g_bufsiz = g_mo_bufsiz;
    g_colormask = g_mo_colormask;
    g_xsize = g_mo_xsize;
    g_ysize = g_mo_ysize;
    g_xchsize = g_mo_xchsize;
    g_ychsize = g_mo_ychsize;
    g_aspect = g_mo_aspect;
  }

  g_physbuf = g_page1addr;
  g_virtbuf = g_page2addr;
  g_colormax = g_colormask;
  g_pages = 2;
  g_curpage = 0;
}
#ifdef __TURBOC__
# pragma warn .par /* TC */
#endif

/* turn off graphics mode */

void EGA_gclose()
{
  union REGS inregs, outregs;

  inregs.h.ah = ega_setmode;
  inregs.h.al = mde_80co;
  int86(int_video, &inregs, &outregs);
}

/* setup for point plotting */

void EGA_point_set(c)
unsigned c;
{
  trimcolor(c);
  outp(ega_gr_addr, ega_gr_sr);		/* set/reset register           */
  outp(ega_gr_data, c);
  outp(ega_gr_addr, ega_gr_sren);	/* set/reset enable register    */
  outp(ega_gr_data, g_colormask);
  outp(ega_gr_addr, ega_gr_mode);	/* mode register        	*/
  outp(ega_gr_data, 0);			/* write mode 0			*/
  outp(ega_gr_addr, ega_gr_rot);
  outp(ega_gr_data, g_xor ? ega_gr_x_xor : 0);	/* set xor mode		*/
  outp(ega_gr_addr, ega_gr_mask);	/* set graphics addr to map reg */
}

/* reset ega afterwards */

void EGA_point_res()
{
  outp(ega_gr_data, g_allmask);		/* to map register		*/
  outp(ega_gr_addr, ega_gr_rot);	/* reset ega */
  outp(ega_gr_data, 0);
  outp(ega_gr_addr, ega_gr_sren);
  outp(ega_gr_data, 0);
}

/* plot a point */


/* This fine piece of code has now been supplanted by a weenie hunk
   of assembly.....  */
/* Well, in this case it really wasn't quite so fine but still...   */
/*
void EGA_point(x1,y1,c)
unsigned x1,y1,c;
{
  long p;
  unsigned pixoff, offs;
  g_obj far *ptr;
  g_obj mask;
  register g_obj tmp;

  /* icky, icky, icky! *

  EGA_point_set(c); 
 
  goffs(x1, y1, &offs, &pixoff);
  ptr = g_drawbuf + offs;
  mask = 1 << pixoff*g_bitpix;
  plot(ptr, mask, tmp);			/* plot pt. *

  EGA_point_res();
}
*/
/* draw a line... */

#ifdef __TURBOC__
# pragma warn -aus /* TC */
#endif
void EGA_line(x1,y1,x2,y2,c)
unsigned x1,y1,x2,y2,c;
{
  unsigned pixoff, offs;
  g_obj far *ptr;
  int delx,dely;
  int xyswap=0;
  int ydir=0;
  int i,ydelx;
  g_obj mask;
  register g_obj tmp;

  EGA_point_set(c);
 
  if (x1 > x2) { 		/* sort into left-right order */
    register int tmp;
    tmp=x1; x1=x2; x2=tmp;
    tmp=y1; y1=y2; y2=tmp;
  }
  goffs(x1, y1, &offs, &pixoff);
  ptr = g_drawbuf+offs;
  mask = 1 << pixoff*g_bitpix;
  plot(ptr, mask, tmp);		/* plot pt. */
  if (x1==x2 && y1==y2) {	/* handle 1 pt. correctly */
    EGA_point_res();
    return;
  }
  delx=x2-x1;
  dely=y2-y1;
  if (dely < 0)	{		/* handle lines from up to down */
    ydir=1;
    dely=-dely;
  }
  if (abs(dely) > delx) {	/* handle slopes > 1 */
    register int tmp;
    tmp=x1;   x1=y1;     y1=tmp;
    tmp=x2;   x2=y2;     y2=tmp;
    tmp=delx; delx=dely; dely=tmp;
    xyswap=1;
  }
  ydelx=0;
  for (i=1; i<=delx; i++) {
    if ((ydelx+=dely) >= delx) {
      bumpx(ptr, mask);		/* bump both x & y */
      bumpy(ptr, ydir);
      ydelx-=delx;
    }
    else
      if (xyswap)		/* bump x only */
        bumpy(ptr, ydir)
      else
        bumpx(ptr, mask);
    plot(ptr, mask, tmp);	/* plot point, go around again */
  }
  EGA_point_res();
}
#ifdef __TURBOC__
# pragma warn .aus /* TC */
#endif

/* since we're always writing to an EGA buffer, we can use the BIOS
   routine! */

void EGA_writech(row, col, ch, c, page)
unsigned row, col, c;
char ch;
int page;
{
  union REGS inregs, outregs;

  inregs.h.ah = ega_setcur;
  inregs.h.dh = row;
  inregs.h.dl = col;
  inregs.h.bh = page >= 0 ? page : (g_drawbuf > g_page1addr ? 1 : 0);
  int86(int_video, &inregs, &outregs);

  inregs.h.ah = ega_writech;
  inregs.h.bh = page >= 0 ? page : (g_drawbuf > g_page1addr ? 1 : 0);
  inregs.x.cx = 1;
  inregs.h.al = ch;
  inregs.h.bl = c /*| (g_xor ? 0x80 : 0)*/;
  int86(int_video, &inregs, &outregs);
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品乱码久久久久| 一本到不卡免费一区二区| 日韩精品福利网| 亚洲综合一二三区| 亚洲精品少妇30p| 亚洲精品ww久久久久久p站| 亚洲欧美在线视频观看| 1024成人网| 亚洲欧美一区二区三区久本道91 | 人妖欧美一区二区| 日日摸夜夜添夜夜添精品视频| 亚洲成av人在线观看| 午夜精品123| 九色综合狠狠综合久久| 韩国成人福利片在线播放| 国产在线精品一区二区| 福利一区二区在线| 91免费版pro下载短视频| 色94色欧美sute亚洲线路一久| 欧美亚洲自拍偷拍| 91 com成人网| 久久在线免费观看| 中文字幕在线观看一区| 一区二区三区在线视频免费观看 | 国产精品一区二区在线观看网站| 国产精品99久久久久久久女警 | 欧美日韩精品免费| 日韩精品在线一区二区| 久久亚洲一区二区三区明星换脸 | 日韩vs国产vs欧美| 国产一区 二区| 91麻豆123| 日韩视频免费观看高清完整版在线观看| 欧美xxxxx牲另类人与| 国产精品婷婷午夜在线观看| 亚洲午夜久久久久| 韩国欧美一区二区| 91年精品国产| 欧美大片在线观看| 综合婷婷亚洲小说| 蜜桃一区二区三区在线观看| 国产xxx精品视频大全| 欧美日韩一区二区三区高清| 久久久综合精品| 一区二区三区欧美久久| 国内精品自线一区二区三区视频| 91在线观看美女| 欧美成人性福生活免费看| 亚洲欧洲在线观看av| 免费观看一级特黄欧美大片| 成人性生交大合| 欧美一区二区三区四区高清| 国产精品久久久久久久久快鸭| 日日摸夜夜添夜夜添精品视频| 成人国产一区二区三区精品| 欧美日韩激情在线| 国产精品日日摸夜夜摸av| 天堂精品中文字幕在线| av福利精品导航| 精品国产免费久久| 亚洲成人中文在线| 99久久精品情趣| 精品国产伦一区二区三区观看体验| 亚洲男同性恋视频| 国产激情一区二区三区四区| 一区二区三区欧美| 成人黄色777网| 亚洲精品一区二区三区影院| 亚洲综合图片区| 成人av先锋影音| 精品人在线二区三区| 天使萌一区二区三区免费观看| 91蜜桃在线免费视频| 欧美国产丝袜视频| 韩国中文字幕2020精品| 91精品国产91久久久久久一区二区| 亚洲少妇30p| 国产不卡高清在线观看视频| 精品人在线二区三区| 日韩av电影天堂| 欧美日韩成人综合天天影院| 亚洲综合免费观看高清完整版在线| 成人av免费在线观看| 国产亚洲一区二区三区| 精品一区二区三区不卡| 91精品国产乱| 美女脱光内衣内裤视频久久网站| 欧美日韩在线一区二区| 一区二区三区成人| 日本韩国视频一区二区| 国产精品电影一区二区| 成人精品电影在线观看| 国产婷婷一区二区| 国产成人免费在线| 久久精品人人做| 国产一区二区久久| 久久欧美一区二区| 国产一区二区按摩在线观看| 久久奇米777| 国产成人午夜电影网| 久久精品亚洲国产奇米99| 国产一区二区三区免费在线观看| 日韩限制级电影在线观看| 日韩av一区二| 精品久久久久久综合日本欧美| 九九精品一区二区| 久久久久久毛片| 国产成人精品www牛牛影视| 国产午夜精品美女毛片视频| 东方aⅴ免费观看久久av| 中文字幕精品三区| 色综合天天综合狠狠| 樱桃视频在线观看一区| 欧美性三三影院| 日本不卡一区二区三区高清视频| 91精品久久久久久久99蜜桃| 99re热这里只有精品免费视频| 波多野结衣中文字幕一区| 综合激情网...| 色婷婷香蕉在线一区二区| 亚洲精品videosex极品| 欧美精品成人一区二区三区四区| 日韩精品久久理论片| 国产精品一品视频| 国产偷国产偷亚洲高清人白洁| 国内精品国产成人国产三级粉色| 国产丝袜在线精品| 欧美日韩视频在线一区二区| 国产风韵犹存在线视精品| 亚洲制服丝袜av| 国产欧美日韩亚州综合| 欧美日韩在线播放一区| 中文字幕成人av| 欧美一区二区三区四区视频| 成人av网站免费| 精品一区二区免费| 亚洲国产婷婷综合在线精品| 国产欧美日韩视频在线观看| 欧美一区二区成人6969| 色悠久久久久综合欧美99| 国内精品久久久久影院色| 丝袜美腿成人在线| 亚洲另类在线视频| 久久精品视频免费| 日韩三级中文字幕| 欧美天堂一区二区三区| 成人精品免费网站| 激情成人午夜视频| 日韩国产精品久久久| 一区二区三区在线不卡| 欧美经典一区二区| 欧美sm美女调教| 欧美年轻男男videosbes| 91女厕偷拍女厕偷拍高清| 大胆亚洲人体视频| 狂野欧美性猛交blacked| 亚洲国产日韩精品| 亚洲精品网站在线观看| 中文字幕人成不卡一区| 国产精品视频麻豆| 亚洲五码中文字幕| 欧美在线啊v一区| 久久草av在线| 在线播放中文一区| 91国产福利在线| 99r国产精品| 成人免费视频app| 国产福利精品导航| 国模少妇一区二区三区| 久久精品久久久精品美女| 日韩高清不卡在线| 午夜精品久久久久久久久| 亚洲一二三四久久| 亚洲自拍偷拍九九九| 亚洲一区在线视频| 亚洲国产精品欧美一二99 | 成人av免费在线播放| 国产91精品入口| 成人av网址在线观看| 成人91在线观看| 色综合av在线| 日本久久电影网| 精品视频在线视频| 91精品婷婷国产综合久久 | 精品一区二区av| 国产精品中文欧美| 大白屁股一区二区视频| 成人免费看黄yyy456| 91视频观看免费| 欧日韩精品视频| 精品视频一区二区不卡| 欧美高清视频不卡网| 欧美一级一区二区| www欧美成人18+| 中文字幕精品三区| 一区二区三区加勒比av| 亚洲成a人在线观看| 久久精品72免费观看| 国产精品一区2区| 99热在这里有精品免费|