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

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

?? graf.c

?? MSC TURBO-C圖形庫
?? C
字號:
/*
 * grafix --- graf.c
 *
 * graphics interface
 *
 * Written 4/87 by Scott Snyder (ssnyder@romeo.caltech.edu or @citromeo.bitnet)
 *
 * 5/29/87 sss - fixed bug in box() and allow for different memory models
 *
 */

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

#define int_video   0x10
#define video_point 0x0c
#define ega_altsel  0x12
#define egaalt_info 0x10

/* utility macros */

#define swap(a, b) {int _tmp; _tmp=a; a=b; b=_tmp;}
#define inrange(a, x, b) ((a)<=(x) && (x)<=(b))
#define clipto(x, lo, hi) { \
  if (x < lo)               \
    x = lo;                 \
  else if (x > hi)          \
    x = hi;                 \
}

/*****************************************************************************
 *                            variable definitions                           *
 *****************************************************************************/

unsigned NEAR g_card;		/* graphics card we're using */
unsigned NEAR g_display;	/* type of display we're using */

g_obj far * NEAR g_drawbuf;	/* graphics drawing buffer */
g_obj far * NEAR g_physbuf;	/* physical screen address */
g_obj far * NEAR g_virtbuf;	/* virtual buffer address  */
unsigned NEAR g_colormax;	/* maximum color value     */
unsigned NEAR g_xsize, NEAR g_ysize; /* physical size of screen */
unsigned NEAR g_xchsize, NEAR g_ychsize; /* size of screen in characters */
unsigned NEAR g_xor;		/* xor mode flag */
unsigned NEAR g_bufflg;		/* buffered mode flag */
unsigned NEAR g_pages;		/* number of pagse available */
unsigned NEAR g_curpage;	/* page currently visible */

int NEAR g_xcliplo, NEAR g_xcliphi; /* clipping boundaries */
int NEAR g_ycliplo, NEAR g_ycliphi;

float NEAR g_aspect;		/* aspect ratio */

/*****************************************************************************
 *                       interfaces to graphics drivers                      *
 *****************************************************************************/

/************************* calls for internal use only ***********************/

STATIC void nocl_regfill(x1, y1, x2, y2, c)
unsigned x1, y1, x2, y2, c;
{
  switch(g_card) {
    case (CGA): CGA_regfill(x1, y1, x2, y2, c); break;
    case (EGA): EGA_regfill(x1, y1, x2, y2, c); break;
  }
}

STATIC void nocl_point(x, y, c)
unsigned x, y, c;
{
  switch(g_card) {
    case (CGA): CGA_point(x, y, c); break;
    case (EGA): EGA_point(x, y, c); break;
  }
}

STATIC void nocl_line(x1, y1, x2, y2, c)
unsigned x1, y1, x2, y2, c;
{
  switch(g_card) {
    case (CGA): CGA_line(x1, y1, x2, y2, c); break;
    case (EGA): EGA_line(x1, y1, x2, y2, c); break;
  }
}

STATIC void write_pix(x1, y1, x2, y2, c)
int x1, y1, x2, y2;
unsigned c;
{
  switch(g_card) {
    case (CGA): CGA_write_pix(x1, y1, x2, y2, c); break;
    case (EGA): EGA_write_pix(x1, y1, x2, y2, c); break;
  }
}

/* set up for plotting mucho points */

STATIC void point_set(c)
unsigned c;
{
  switch(g_card) {
    case (CGA): CGA_point_set(c); break;
    case (EGA): EGA_point_set(c); break;
  }
}

STATIC void point_res()
{
  switch(g_card) {
    case (CGA): CGA_point_res(); break;
    case (EGA): EGA_point_res(); break;
  }
}

/******************** calls safe for anyone to use **************************/

void g_clearall(c)
unsigned c;
{
  switch(g_card) {
    case (CGA): CGA_clearall(c); break;
    case (EGA): EGA_clearall(c); break;
  }
}

void g_show()
{
  switch(g_card) {
    case (CGA): CGA_show(); break;
    case (EGA): EGA_show(); break;
  }
}

void g_setback(c)
unsigned c;
{
  switch(g_card) {
    case (CGA): CGA_setback(c); break;
    case (EGA): EGA_setback(c); break;
  }
}

void g_setpal(pallette, value)
unsigned pallette, value;
{
  switch(g_card) {
    case (CGA): CGA_setpal(pallette, value); break;
    case (EGA): EGA_setpal(pallette, value); break;
  }
}

/* g_open also sets clipping boundaries to the physical screen size */
/* and initializes other things... */

void g_open(mode)
unsigned mode;
{
  switch(g_card) {
    case (CGA): CGA_gopen(mode); break;
    case (EGA): EGA_gopen(mode); break;
  }
  g_xcliplo = 0;
  g_ycliplo = 0;
  g_xcliphi = g_xsize-1;
  g_ycliphi = g_ysize-1;

  g_xor = g_bufflg = 0;

/* set g_drawbuf to something appropriately */

  g_setbuf(g_bufflg);
}

void g_close()
{
  switch(g_card) {
    case (CGA): CGA_gclose(); break;
    case (EGA): EGA_gclose(); break;
  }
}

void g_writech(row, col, ch, c, page)
unsigned row, col, c;
char ch;
int page;
{
  switch(g_card) {
    case (CGA): CGA_writech(row, col, ch, c, page); break;
    case (EGA): EGA_writech(row, col, ch, c, page); break;
  }
}

/***************************************************************************
 *                    graphics drawing and control routines                *
 ***************************************************************************/

/* fill a region with the specified color */

void g_regfill(x1, y1, x2, y2, c)
int x1, y1, x2, y2;
unsigned c;
{
  if (x1 > x2)
    swap(x1, x2);
  if (y1 > y2)
    swap(y1, y2);

  if (x1 < g_xcliplo)
    x1 = g_xcliplo;
  else if (x1 > g_xcliphi)
    return;

  if (x2 < g_xcliplo)
    return;
  else if (x2 > g_xcliphi)
    x2 = g_xcliphi;

  if (y1 < g_ycliplo)
    y1 = g_ycliplo;
  else if (y1 > g_ycliphi)
    return;

  if (y2 < g_ycliplo)
    return;
  else if (y2 > g_ycliphi)
    y2 = g_ycliphi;

  nocl_regfill(x1, y1, x2, y2, c);
}

/* plot a point */

void g_point(x, y, c)
int x, y;
unsigned c;
{
  if (inrange(g_xcliplo, x, g_xcliphi) &&
      inrange(g_ycliplo, y, g_ycliphi))
    nocl_point(x, y, c);
}

/* routine to clip one endpoint of a line */

STATIC int clipln(x1,y1,xc,yc,x2,y2)
int x1,y1,x2,y2,*xc,*yc;
{
  int delx,dely,xx,yy;
 
  if (x1 >= g_xcliplo && x1 <= g_xcliphi &&
      y1 >= g_ycliplo && y1 <= g_ycliphi) {
    *xc=x1; *yc=y1;
     return(1);
  }
  dely=y2-y1;
  delx=x2-x1;
  if (y1 > g_ycliphi || y1 < g_ycliplo) {
    if (dely == 0)
      return(0);
    if (y1 > g_ycliphi) {
      if (dely > 0 || y2 > g_ycliphi) return (0);
      yy=g_ycliphi;
    }
    else {
      if (dely < 0 || y2 < g_ycliplo) return(0);
      yy=g_ycliplo;
    }
    xx=(float)(yy-y1)*delx/dely+x1;
    if (xx >= g_xcliplo && xx <= g_xcliphi) {
      *xc=xx; *yc=yy;
      return(1);
    }
  }
  if (x1 > g_xcliphi || x1 < g_xcliplo) {
    if (delx == 0)
      return(0);
    if (x1 > g_xcliphi) {
      if (delx > 0 || x2 > g_xcliphi) return(0);
      xx=g_xcliphi;
    }
    else {
      if (delx < 0 || x2 < g_xcliplo) return(0);
      xx=g_xcliplo;
    }
    yy=(float)(xx-x1)*dely/delx+y1;
    if (yy >= g_ycliplo && yy <= g_ycliphi) {
      *xc=xx; *yc=yy;
      return(1);
    }
  }
  return(0);
}
 
/* draw a clipped line */
 
void g_line(x1,y1,x2,y2,c)
int x1,y1,x2,y2;
unsigned c;
{
  if (clipln(x1,y1,&x1,&y1,x2,y2) &&
      clipln(x2,y2,&x2,&y2,x1,y1)) {
    nocl_line(x1,y1,x2,y2,c);
  }
}

/* draw an ellipse with aspect aspect and half-major axis length r_sum_m */
/* from a routine by Tim Hogan in Dr. Dobb's Journal May '85 p. 40       */

void g_ellipse(x, y, r_sub_m, aspect, c)
int x,y,r_sub_m;
unsigned c;
float aspect;
{
  long alpha, beta, two_alpha, four_alpha, two_beta, four_beta, d;
  int row, col, two_x, two_y, rel_x, rel_y;
  double square_aspect;

  if (aspect < 0.004) aspect = 0.004;

  square_aspect = aspect*aspect;

  if (aspect < 1.0) {
    alpha = (long)r_sub_m * (long)r_sub_m;
    beta = alpha * square_aspect;
    row = y + r_sub_m*aspect;
  }
  else {
    beta = (long)r_sub_m * (long)r_sub_m;
    alpha = beta / square_aspect;
    row = y + r_sub_m;
  }

  if (alpha == 0L) alpha = 1L;
  if (beta  == 0L) beta  = 1L;

  col = x;
  two_x = x<<1;
  two_y = y<<1;
  rel_y = row-y;
  two_alpha  = alpha<<1;
  four_alpha = alpha<<2;
  two_beta   =  beta<<1;
  four_beta  =  beta<<2;

  d = two_alpha*((long)(rel_y-1)*rel_y) + alpha + two_beta*(1-alpha);

  point_set(c);			/* set up for point plotting */

  while (alpha*(rel_y = row-y) > beta*(rel_x = col-x)) {
    write_pix(col, row, two_x-col, two_y-row, c);
    if (d>=0) {
      d += four_alpha*(1-rel_y);
      row--;
    }
    d += two_beta*(3+(rel_x<<1));
    col++;
  }

  d = two_beta * ((long)rel_x * (rel_x+1)) + two_alpha*((long)rel_y*(rel_y-2)+1) +
      beta*(1-two_alpha);

  while ((rel_y = row-y) + 1) {
    write_pix(col, row, two_x-col, two_y-row, c);
    if (d<=0) {
      d += four_beta*(1+col-x);
      col++;
    }
    d += two_alpha*(3-(rel_y<<1));
    row--;
  }
  point_res();				/* reset the graphics device */
}

/* draw a circle */

void g_circle(x, y, r, c)
int x, y, r;
unsigned c;
{
  g_ellipse(x, y, r, g_aspect, c);
}

/* draw a box */

void g_box(x1, y1, x2, y2, c)
int x1, y1, x2, y2;
unsigned c;
{
  g_line(x1, y1, x2, y1, c);
  g_line(x2, y1, x2, y2, c);
  g_line(x2, y2, x1, y2, c);
  g_line(x1, y2, x1, y1, c);
}

/* set xor mode */

void g_setxor(flag)
unsigned flag;
{
  g_xor = flag;
}

/* set clipping boundaries */

void g_setclip(x1, y1, x2, y2)
int x1, y1, x2, y2;
{
  if (x1 > x2)
    swap(x1, x2);
  if (y1 > y2)
    swap(y1, y2);

  clipto(x1, 0, g_xsize-1);
  clipto(x2, 0, g_xsize-1);
  clipto(y1, 0, g_ysize-1);
  clipto(y2, 0, g_ysize-1);

  g_xcliplo = x1;
  g_xcliphi = x2;
  g_ycliplo = y1;
  g_ycliphi = y2;
}

/* clear screen within clipping boundaries */

void g_clear(c)
unsigned c;
{
  nocl_regfill(g_xcliplo, g_ycliplo, g_xcliphi, g_ycliphi, c);
}

/* set buffered mode flag and initialize drawbuf appropriately */

void g_setbuf(flag)
unsigned flag;
{
  g_bufflg = flag;
  if (flag)
    g_drawbuf = g_virtbuf;
  else
    g_drawbuf = g_physbuf;
}

/* initialize graphics system */

void g_init(card, display)
unsigned card;
unsigned display;			/* ignored if card = 0 */
{
  unsigned swt;
  union REGS inregs, outregs;

/* try to get EGA information. if we have enough memory for 2 hi-res
   pages, then say we have an EGA. if not, or if the card does not
   respond, assume we have a CGA. if argument is nonzero however, force
   result to that.
*/

  if (card == 0) {
    inregs.h.ah = ega_altsel;
    inregs.h.bl = egaalt_info;
    int86(int_video, &inregs, &outregs);
    if (outregs.h.bl != 3) {              /* not valid | mem. < 256k */
      g_card = CGA;
      g_display = CD;
    }
    else {
      g_card = EGA;

  /* now look at the adapter switch settings (in cl) and try to figure
     out what sort of display is attached */

      swt = outregs.h.cl & 0x0e;
      swt = (swt >= 6 ? swt-6 : swt);
      if (swt == 4)
        g_display = MO;
      else if (swt == 2)
        g_display = EN;
      else if (swt == 0)
        g_display = CD;
      else
        g_display = CD;
    }
  }
  else {
    g_card = card;
    g_display = display;
  }

  g_xor = 0;
  g_bufflg = 0;
  g_xcliplo = g_xcliplo = g_ycliphi = g_ycliplo = 0;
}

/* write a string tty style with color c at row, col */

void g_writestr(row, col, s, c, page)
unsigned row, col;
unsigned c;
char *s;
int page;
{
  while (*s) {
    if (col >= g_xchsize) {	/* do wrapping */
      col = 0;
      row++;
    }
    if (row >= g_ychsize) 	/* abort if we run out of screen */
      return;
    if (*s == '\012')		/* newline */
      col = g_xchsize;		/* force a wrap next time around */
    else if (*s == '\015')	/* ignore any carriage returns (for compat) */
      ;
    else {
      g_writech (row, col, *s, c, page);
      col++;
    }
    s++;
  }
}

/* get information about physical graphics device */

void g_info(p)
struct g_info *p;
{
  p->card     = g_card;
  p->display  = g_display;
  p->xsize    = g_xsize;
  p->ysize    = g_ysize;
  p->colormax = g_colormax;
  p->pages    = g_pages;
  p->curpage  = g_curpage;
  p->xchsize  = g_xchsize;
  p->ychsize  = g_ychsize;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美女mm1313爽爽久久久蜜臀| 欧美色综合影院| 艳妇臀荡乳欲伦亚洲一区| 在线综合视频播放| aaa欧美日韩| 一区二区三区精品在线观看| 久久人人爽人人爽| 91精品国产日韩91久久久久久| av电影在线观看完整版一区二区| 国内精品久久久久影院色| 亚洲影院免费观看| 中文字幕一区在线观看视频| 日韩欧美一二三区| 成人av在线电影| 久久er精品视频| 肉肉av福利一精品导航| 亚洲一区二区三区不卡国产欧美| 亚洲免费资源在线播放| 中文字幕综合网| 一区在线观看视频| 亚洲欧美日韩在线播放| 日韩美女视频一区| 一区二区三区四区乱视频| 国产精品色哟哟| 久久久噜噜噜久久人人看| 久久亚洲春色中文字幕久久久| 欧美一区二区三区视频在线| 日韩一级完整毛片| 日韩欧美国产一区二区在线播放| 欧美大片顶级少妇| 国产午夜亚洲精品理论片色戒| 日韩美女视频在线| 精品久久久久久久久久久久久久久 | 久久精品视频在线免费观看| 日韩一级高清毛片| 久久色视频免费观看| 2020国产精品自拍| 中文字幕二三区不卡| 亚洲视频1区2区| 亚洲一卡二卡三卡四卡| 秋霞av亚洲一区二区三| 奇米一区二区三区| 国产精品88av| 色老头久久综合| 日韩欧美www| 制服丝袜中文字幕一区| 2022国产精品视频| 日韩美女啊v在线免费观看| 中文字幕+乱码+中文字幕一区| 亚洲色图清纯唯美| 久久国内精品视频| 91亚洲国产成人精品一区二区三 | 欧美日韩mp4| 这里只有精品电影| 国产蜜臀97一区二区三区 | 亚洲同性gay激情无套| 日韩电影在线观看网站| 视频一区二区欧美| 蜜臀久久99精品久久久久久9| 国产一区二区三区黄视频 | 久久精品一二三| 性做久久久久久免费观看 | 欧美一区二区三区免费大片| 日韩中文字幕麻豆| 亚洲视频中文字幕| 日韩女优电影在线观看| 久久九九国产精品| 亚洲精品美腿丝袜| 国产一区亚洲一区| 精品一区二区三区蜜桃| www国产成人| 91一区一区三区| 国产一区二区调教| 亚洲一二三四在线观看| 欧美日韩和欧美的一区二区| 99国内精品久久| 日本不卡123| 亚洲人午夜精品天堂一二香蕉| 国产精品一区二区三区四区| 欧美国产日韩一二三区| 欧美大尺度电影在线| 麻豆精品久久久| 欧美精品久久天天躁| 韩国三级在线一区| 日韩视频国产视频| 国产成人自拍在线| 国产美女av一区二区三区| 美女视频黄免费的久久| 偷拍一区二区三区| 成人av在线观| 国产日韩一级二级三级| 蜜臀精品久久久久久蜜臀| 色av综合在线| 亚洲特黄一级片| 色系网站成人免费| 一区二区三区欧美亚洲| 欧美日韩一区二区在线视频| 欧美精品国产精品| 日韩一级免费一区| 国产精品久久毛片av大全日韩| 久久综合色天天久久综合图片| 91精品国产色综合久久不卡蜜臀| 欧美日韩国产123区| 国产亚洲欧美日韩俺去了| 亚洲国产日韩a在线播放性色| 亚洲已满18点击进入久久| 日本aⅴ免费视频一区二区三区 | 99久久精品久久久久久清纯| 国产成人日日夜夜| 日韩一卡二卡三卡国产欧美| 日韩电影在线免费| 一区二区三区在线高清| 国产精品1024久久| 免费在线观看一区| 国产精品蜜臀在线观看| 欧美v日韩v国产v| 色综合久久天天| 成人高清免费观看| 日本aⅴ亚洲精品中文乱码| 伊人性伊人情综合网| 欧美老女人第四色| 亚洲一区二区黄色| 欧美一区二区在线不卡| 亚洲最大的成人av| 在线一区二区观看| 亚洲精品v日韩精品| 色综合婷婷久久| 亚洲一区二区三区美女| 国产成人激情av| 91精品国模一区二区三区| 久久精品久久精品| 一区二区三区久久久| 久久久久久久精| 欧美美女一区二区在线观看| 成人午夜激情视频| 美洲天堂一区二卡三卡四卡视频| 国产精品卡一卡二| 久久久久久久久岛国免费| 欧美一区二区三区在线电影| 日本精品免费观看高清观看| 高清日韩电视剧大全免费| 久久99日本精品| 94-欧美-setu| 91精品91久久久中77777| 欧美色图天堂网| 日本亚洲天堂网| 精品1区2区在线观看| 色成年激情久久综合| 99国内精品久久| av成人免费在线观看| 欧美日韩在线播放一区| 色综合激情五月| 日韩精品中文字幕一区| 欧美国产日韩在线观看| 亚洲国产wwwccc36天堂| 麻豆高清免费国产一区| 欧美日韩国产影片| 99r国产精品| 成人一区二区三区视频| 国产麻豆欧美日韩一区| 午夜电影久久久| 国产日韩精品一区二区浪潮av| 成人h动漫精品一区二| 国产精品欧美一区二区三区| 色婷婷久久久亚洲一区二区三区 | 欧美亚洲综合另类| 日韩一区二区在线观看| 中文字幕一区二区三区不卡在线| 日韩欧美电影在线| 欧美国产精品专区| 亚洲精品乱码久久久久久黑人| 欧美精品一区二区三区蜜桃视频| 亚洲日本成人在线观看| 日韩影院免费视频| 国产成人免费在线观看| www.欧美亚洲| 久久午夜国产精品| 亚洲精品五月天| 韩国av一区二区三区| 国产成人啪免费观看软件| 在线成人免费视频| 国产精品福利一区二区| 日本成人中文字幕| 欧美aaa在线| 欧美日韩亚洲综合| 国产精品色婷婷| 日本在线不卡视频| 在线区一区二视频| 欧美激情综合五月色丁香| 亚洲福利一区二区| 波多野结衣欧美| 国产精品国产自产拍高清av| 免费av成人在线| 91官网在线观看| 欧美大胆人体bbbb| 精品一区二区三区av| 欧美艳星brazzers| 综合亚洲深深色噜噜狠狠网站| 久久国产精品免费| 555www色欧美视频|