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

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

?? lowgdi.c

?? 做為linux下圖形用戶界面支持系統(tǒng)之一的MicroWindows采用C++設(shè)計(jì)
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/*****************************************************************************
 *
 * Lowgdi.c: 低階繪圖介面
 *
 ****************************************************************************/

#include <dos.h>
#include "lowgdi.h"
extern char engfont[1920];

/* useful macros */
#define _lgVideoCall(a, b, c, d)    _DX=d; _CX=c; _BX=b; _AX=a; \
                                    geninterrupt(0x10);
#define _lgMouseCall(a, b, c, d)    _DX=d; _CX=c; _BX=b; _AX=a; \
                                    geninterrupt(0x33);
#define _lgOutportb(a, b)           outportb(a, b)
#define _lgAL                       _AL
#define _lgBL                       _BL
#define _lgAX                       _AX
#define _lgBX                       _BX
#define _lgCX                       _CX
#define _lgDX                       _DX

/* global variables */
int     _lgClipX1 = 0, _lgClipY1 = 0, _lgClipX2 = 639, _lgClipY2 = 479;
BOOL    _lgClipOut = FALSE;
int     _lgRX1 = 0, _lgRY1 = 0, _lgRX2 = 0, _lgRY2 = 0;
int     _lgScreenWidth = 640, _lgScreenHeight = 480;
int     _lgColor = LG_WHITE, _lgBgColor = LG_BLACK;
BOOL    _lgXOR = FALSE;
int     _lgYaddr[500];
BYTE far *_lgDBitmap = (BYTE far*)0xa0000000;
BYTE    _lgMask[8]      ={0x80, 0x40, 0x20, 0x10, 8, 4, 2, 1};
BYTE    _lgLeftMask[8]  ={0xff, 0x7f, 0x3f, 0x1f, 0x0f, 0x07, 0x03, 0x01};
BYTE    _lgRightMask[8] ={0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xff};
BYTE    _lgBitPlane [8] ={0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
BOOL    _lgMouseActive = TRUE, _lgCursorTempHide = FALSE;
BYTE    _lgMSavedImage[256];
int     _lgMLastX = 0, _lgMLastY = 0, _lgMButton = 0;
BOOL    _lgMLButtonHitted = FALSE;
BOOL    _lgMouseHided = FALSE;

BYTE _lgMScreenMask[32]=
{
    0x3f, 0xff, 0x1f, 0xff, 0x0f, 0xff, 0x07, 0xff, 0x03, 0xff,
    0x01, 0xff, 0x00, 0xff, 0x00, 0x7f, 0x00, 0x3f, 0x00, 0x1f,
    0x01, 0xff, 0x10, 0xff, 0x30, 0xff, 0xf8, 0x7f, 0xf8, 0x7f,
    0xfc, 0x3f
};

BYTE _lgMCursorMask[32]=
{
    0x00, 0x00, 0x40, 0x00, 0x60, 0x00, 0x70, 0x00, 0x78, 0x00,
    0x7c, 0x00, 0x7e, 0x00, 0x7f, 0x00, 0x7f, 0x80, 0x7f, 0xc0,
    0x7c, 0x00, 0x46, 0x00, 0x06, 0x00, 0x03, 0x00, 0x03, 0x00,
    0x00, 0x00
};

#define _lgClipAccept(a, b)     (a|b)
#define _lgClipReject(a, b)     (a&b)
#define _lgClipTop              0x08
#define _lgClipBottom           0x04
#define _lgClipRight            0x02
#define _lgClipLeft             0x01
#define _lgClipInside           0x00

void _lgLineClipper(int x1, int y1, int x2, int y2);
void _lgRectClipper(int x1, int y1, int x2, int y2);
int  _lgClipOutcode(int x , int y);
void _lgHline (int x1, int x2, int y);
void _lgVline (int x, int y1, int y2);
void _lgDisplayCursor (void);
void _lgUpdateMouse (void);
void _lgMouseTempHide (int x1, int y1, int x2, int y2);
void _lgMouseTempShow (void);
void _lgMSaveBack (void);
void _lgMRestoreBack (void);
void _lgLowPoint (int x, int y);

BOOL    _lgOpenGraphics()
{
    int i;

    _lgVideoCall (0x101a, 0xffff, 0, 0);    /* detect if VGA exists */
    if (_lgBX==0xffff) return (FALSE);      /* VGA not exists! */

    _lgVideoCall (0x12, 0, 0, 0);
    for (i=0; i<500; i++) _lgYaddr[i]=80 * i;

    /* set write mode 2 */
    _lgOutportb (0x3ce, 5);
    _lgOutportb (0x3cf, 2);

    /* set pen normal */
    _lgOutportb (0x3ce, 3);
    _lgOutportb (0x3cf, 0);

    /* initial the mouse */
    _lgMouseCall (0, 0, 0, 0);
    if (!_lgAX)
    {
        _lgMouseActive=FALSE;
        return (TRUE);
    }
    
    _lgMouseCall (2, 0, 0, 0);      /* disable the text cursor */
    _lgMouseCall (4, 0, _lgScreenWidth/2, _lgScreenHeight/2);  /* centerize */
    _lgMouseCall (7, 0, 0, _lgScreenWidth-1);   /* set X range */
    _lgMouseCall (8, 0, 0, _lgScreenHeight-1);  /* set Y range */
    _lgMSaveBack();
    _lgDisplayCursor();

    return (TRUE);
}

BOOL    _lgCloseGraphics()
{
    /* return to VGA colored text mode 80x25 */
    _lgVideoCall (0x03, 0, 0, 0);

    if (_lgMouseActive == TRUE)
    {
        _lgMouseCall (0x31, 0, 0, 0);       /* deinitial the mouse */
    }

    return (TRUE);
}

void    _lgRect     (int x1, int y1, int x2, int y2)
{
    _lgLine (x1, y1, x2, y1);
    _lgLine (x1, y2, x2, y2);
    _lgLine (x1, y1, x1, y2);
    _lgLine (x2, y1, x2, y2);
}

void    _lgPoint    (int x, int y)
{
    unsigned addr=_lgYaddr[y] + (x >> 3);
    BYTE mask = _lgMask[x & 7];

    if (x<_lgClipX1 || y<_lgClipY1 || x>_lgClipX2 || y>_lgClipY2) return;

    _lgMouseTempHide (x, y, x, y);
    _lgOutportb (0x3ce, 8);         /* setup latch register */
    _lgOutportb (0x3cf, mask);
    mask=*(_lgDBitmap+addr);
    *(_lgDBitmap+addr)=_lgColor;
    _lgMouseTempShow ();
}

void    _lgLowPoint (int x, int y)
{
    unsigned addr=_lgYaddr[y] + (x >> 3);
    BYTE mask = _lgMask[x & 7];
    _lgOutportb (0x3ce, 8);         /* setup latch register */
    _lgOutportb (0x3cf, mask);
    mask=*(_lgDBitmap+addr);
    *(_lgDBitmap+addr)=_lgColor;
}

void    _lgLine     (int x1, int y1, int x2, int y2)
{
    int dx, dy, i, e, incx, incy, inc1, inc2, x, y, tmp;

    _lgLineClipper (x1, y1, x2, y2);
    if (_lgClipOut) return;
    _lgMouseTempHide (_lgRX1, _lgRY1, _lgRX2, _lgRY2);

    if (_lgRX1==_lgRX2)
    {
        if (_lgRY1 > _lgRY2)
        {
            tmp=_lgRY2;
            _lgRY2=_lgRY1;
            _lgRY1=tmp;
        }

        _lgVline (_lgRX1, _lgRY1, _lgRY2);
    }
    else if (_lgRY1==_lgRY2)
    {
        if (_lgRX1 > _lgRX2)
        {
            tmp=_lgRX2;
            _lgRX2=_lgRX1;
            _lgRX1=tmp;
        }

        _lgHline (_lgRX1, _lgRX2, _lgRY1);
    }
    else
    {

        dx=_lgRX2-_lgRX1;
        dy=_lgRY2-_lgRY1;

        if (dx<0) dx=-dx;
        if (dy<0) dy=-dy;

        if (x2<x1) incx=-1; else incx=1;
        if (y2<y1) incy=-1; else incy=1;

        x=_lgRX1;
        y=_lgRY1;

        if (dx > dy)
        {
            _lgLowPoint (x, y);

            e       = 2* dy - dx;
            inc1    = 2* (dy-dx);
            inc2    = 2* dy;

            for (i=0; i<dx; i++)
            {
                if (e>=0)
                {
                    y+=incy;
                    e+=inc1;
                }
                else e+=inc2;

                x+=incx;
                _lgLowPoint (x, y);
            }
        }
        else
        {
            _lgLowPoint (x, y);
            e       = 2* dx - dy;
            inc1    = 2* (dx-dy);
            inc2    = 2* dx;

            for (i=0; i<dy; i++)
            {
                if (e>=0)
                {
                    x+=incx;
                    e+=inc1;
                }
                else e+=inc2;

                y+=incy;
                _lgLowPoint (x, y);
            }
        }
    }

    _lgMouseTempShow();
}

void    _lgSolidRect(int x1, int y1, int x2, int y2)
{
    int y;

    _lgRectClipper (x1, y1, x2, y2);
    if (_lgClipOut) return;
    _lgMouseTempHide (_lgRX1, _lgRY1, _lgRX2, _lgRY2);

    for (y=_lgRY1; y<=_lgRY2; y++)
    {
        _lgHline (_lgRX1, _lgRX2, y);
    }

    _lgMouseTempShow();
}

void _lgDrawText (int x, int y, char *text)
{
    int i, l = strlen (text), xc = x;
    char *fontptr;

    _lgRectClipper (x, y, x + l*8 - 1, y + 14);
    if (_lgClipOut) return;
    _lgMouseTempHide (_lgRX1, _lgRY1, _lgRX2, _lgRY2);

    for (i = 0; i < l; i++, xc += 8)
    {
        if ((unsigned)*text > 127) continue;      /* high-byte char omitted */
        fontptr = engfont + (*text++) * 15;
        _lgPutFont (fontptr, xc, y, 8, 15);
    }

    _lgMouseTempShow();
}



void _lgHline (int x1, int x2, int y)
{
    register unsigned int i;
    unsigned int addr=_lgYaddr[y], startx, endx;
    static BYTE mask;

    startx=x1 >> 3;
    endx  =x2 >> 3;

    _lgOutportb (0x3ce, 8);

    if (startx==endx)
    {

        if (x2 & 7) mask=_lgLeftMask[x1 & 7] & _lgRightMask[x2 & 7];
        else mask=_lgLeftMask[x1 & 7];
        _lgOutportb (0x3cf, mask);
        addr+=startx;
        mask=*(_lgDBitmap+addr);
        *(_lgDBitmap+addr)=_lgColor;
    }
    else
    {
        /* draw the left side */
        addr+=startx;
        mask=_lgLeftMask[x1 & 7];
        _lgOutportb (0x3cf, mask);

        mask=*(_lgDBitmap+addr);
        *(_lgDBitmap+addr)=_lgColor;

        _lgOutportb (0x3cf, 0xff);
        for (i=startx+1; i<endx; i++)
        {
            addr++;
            mask=*(_lgDBitmap+addr);
            *(_lgDBitmap+addr)=_lgColor;
        }

        /* draw the right side */
        addr++;
        mask=_lgRightMask[x2 & 7];
        _lgOutportb (0x3cf, mask);
        mask=*(_lgDBitmap+addr);
        *(_lgDBitmap+addr)=_lgColor;
    }
}

void _lgVline (int x, int y1, int y2)
{
    register unsigned int i;
    unsigned addr;
    BYTE mask=_lgMask[x & 7], tmp;

    _lgOutportb (0x3ce, 8);
    _lgOutportb (0x3cf, mask);

    for (i=y1; i<=y2; i++)
    {
        addr = _lgYaddr[i] + (x >> 3);
        tmp = *(_lgDBitmap + addr);
        *(_lgDBitmap+addr)=_lgColor;
    }

    if (tmp) ;
}


int     _lgGetScreenWidth()
{
    return (_lgScreenWidth);
}

int     _lgGetScreenHeight()
{
    return (_lgScreenHeight);
}

int     _lgGetColor ()
{
    return (_lgColor);
}

int     _lgGetBgColor ()
{
    return (_lgBgColor);
}

BOOL    _lgGetXOR ()
{
    return (_lgXOR);
}

BOOL _lgIsMouseActive()
{
    return (_lgMouseActive);
}

void    _lgSetColor (int c)
{
    _lgColor = c;
}

void    _lgSetBgColor (int c)
{
    _lgBgColor = c;
}

void    _lgSetXOR (BOOL xor)
{
    _lgXOR = xor;
    if (xor == TRUE)
    {
        _lgOutportb (0x3ce, 3);
        _lgOutportb (0x3cf, 0x18);
    }
    else
    {
        _lgOutportb (0x3ce, 3);
        _lgOutportb (0x3cf, 0);
    }
}

void    _lgResetClipping()
{
    _lgSetClippingRect (0, 0, _lgScreenWidth-1, _lgScreenHeight-1);
}

void    _lgSetClippingRect(int x1, int y1, int x2, int y2)
{
    int x3, y3, x4, y4;

    /* swapping */
    x3=x1<x2 ? x1:x2;
    x4=x1>x2 ? x1:x2;
    y3=y1<y2 ? y1:y2;
    y4=y1>y2 ? y1:y2;

    if (x3 < 0) x3 = 0;
    if (y3 < 0) y3 = 0;
    if (x4 < 0) x4 = 0;
    if (y4 < 0) y4 = 0;

    if (x3 > _lgScreenWidth-1)     x3=_lgScreenWidth-1;
    if (y3 > _lgScreenHeight-1)    y3=_lgScreenHeight-1;
    if (x4 > _lgScreenWidth-1)     x4=_lgScreenWidth-1;
    if (y4 > _lgScreenHeight-1)    y4=_lgScreenHeight-1;

    _lgClipX1=x3;
    _lgClipY1=y3;
    _lgClipX2=x4;
    _lgClipY2=y4;
}

void _lgMSaveBack()
{
    BOOL xor = _lgXOR;
    if (_lgMouseHided || _lgCursorTempHide) return;

    _lgSetXOR (FALSE);
    _lgGetImage (_lgMSavedImage, _lgMLastX, _lgMLastY,
                                 _lgMLastX+15, _lgMLastY+15);
    _lgSetXOR (xor);
}

void _lgMRestoreBack()
{
    BOOL xor = _lgXOR;
    if (_lgMouseHided || _lgCursorTempHide) return;

    _lgSetXOR (FALSE);
    _lgPutImage (_lgMSavedImage, _lgMLastX, _lgMLastY,
                                 _lgMLastX+15, _lgMLastY+15);
    _lgSetXOR (xor);
}

void _lgDisplayCursor ()
{
    int bc=_lgColor, bgc=_lgBgColor;
    int bcx1=_lgClipX1, bcx2=_lgClipX2, bcy1=_lgClipY1, bcy2=_lgClipY2;

    if (_lgMouseHided || _lgCursorTempHide) return;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品一区二区久久不卡| 国产一本一道久久香蕉| 日本成人在线一区| 成人午夜免费电影| 日韩欧美国产综合一区| 亚洲乱码日产精品bd| 国产一区二区三区综合| 欧美视频一区在线| av不卡一区二区三区| 老司机精品视频导航| 一本大道av伊人久久综合| 精品人伦一区二区色婷婷| 亚洲高清免费一级二级三级| av激情成人网| 国产三级精品视频| 九一九一国产精品| 欧美电影一区二区| 亚洲二区在线视频| 99视频精品在线| 久久久久国产精品麻豆ai换脸| 日韩成人av影视| 91成人网在线| 中文字幕在线观看不卡视频| 国产一区二区三区视频在线播放| 91精品一区二区三区久久久久久 | 欧美综合欧美视频| 中文字幕成人在线观看| 国产米奇在线777精品观看| 日韩欧美电影一区| 色欲综合视频天天天| 蜜臀久久久99精品久久久久久| 欧美激情中文字幕一区二区| 奇米777欧美一区二区| 欧美精品 日韩| 亚洲成人动漫在线免费观看| 一本大道av伊人久久综合| 亚洲欧美日韩在线| 91视视频在线观看入口直接观看www| 久久久99精品免费观看不卡| 国产一区二区三区高清播放| 亚洲精品在线网站| 国产一区二区三区日韩 | 欧美色手机在线观看| 亚洲精品大片www| 欧美在线免费播放| 天天操天天色综合| 日韩精品一区二区三区四区 | 丁香网亚洲国际| 精品sm在线观看| 国产精品亚洲一区二区三区在线| 欧美mv日韩mv国产| 国产成人午夜片在线观看高清观看| 久久免费偷拍视频| 99久久婷婷国产综合精品电影| 一区二区中文视频| 欧美日韩中文一区| 极品瑜伽女神91| 国产精品欧美一区二区三区| 91老司机福利 在线| 亚洲高清免费在线| 精品欧美乱码久久久久久1区2区| 国产二区国产一区在线观看| 自拍偷拍亚洲综合| 91精品国产综合久久婷婷香蕉 | 一区二区三区精品| 9191久久久久久久久久久| 久久se精品一区二区| 国产精品丝袜91| 欧美色爱综合网| 国产毛片精品国产一区二区三区| 一区视频在线播放| 日韩三级视频中文字幕| 成人中文字幕电影| 日韩电影在线免费看| 中文字幕免费观看一区| 欧美日本精品一区二区三区| 国产乱人伦精品一区二区在线观看 | 国产精品视频第一区| 国产美女av一区二区三区| 久久久久国色av免费看影院| 精品无码三级在线观看视频| 欧美大片一区二区| 欧美a一区二区| 欧美mv日韩mv国产网站app| 久久成人av少妇免费| 久久人人97超碰com| 欧美极品aⅴ影院| 欧美高清视频在线高清观看mv色露露十八| 狠狠色综合播放一区二区| 一个色妞综合视频在线观看| 久久精品一区二区三区不卡牛牛| 欧美色精品在线视频| 成人激情校园春色| 精品夜夜嗨av一区二区三区| 亚洲国产一区二区三区青草影视| 国产精品久久久久久久久久免费看| 91精品国模一区二区三区| 91搞黄在线观看| jiyouzz国产精品久久| 国内不卡的二区三区中文字幕| 亚洲国产欧美在线| 亚洲欧美激情小说另类| 国产精品丝袜一区| 国产欧美日韩视频在线观看| 日韩精品中文字幕一区二区三区| 欧美日本在线一区| www一区二区| 一区视频在线播放| 国产日韩欧美综合一区| 色婷婷综合视频在线观看| 色综合中文字幕国产| 国产精品成人一区二区艾草 | 538prom精品视频线放| 91久久精品一区二区二区| 不卡视频在线看| 成人性视频免费网站| 成人免费视频国产在线观看| 国产黄人亚洲片| 国产精品一区二区不卡| 国产在线精品一区二区不卡了 | 欧美一级欧美三级在线观看 | 午夜激情久久久| 亚洲一二三四在线观看| 26uuu亚洲婷婷狠狠天堂| 福利一区二区在线观看| 国产不卡视频一区| 成人av免费观看| 色综合久久久久综合体| 91九色02白丝porn| 一区二区三区日韩欧美| 亚洲同性gay激情无套| 亚洲日本成人在线观看| 一区二区三区**美女毛片| 午夜欧美电影在线观看| 日韩精品成人一区二区三区| 免费在线看成人av| 国产综合久久久久影院| 成人av小说网| 欧美曰成人黄网| 欧美一区二区黄| 久久精品人人做人人综合 | 欧美一区二区美女| 2020国产精品| 亚洲欧美一区二区三区孕妇| 一区二区三区在线高清| 日韩二区三区在线观看| 国产一区二区美女| 99国内精品久久| 中文字幕免费不卡在线| 国产亚洲一区二区在线观看| 久久色.com| 亚洲摸摸操操av| 日本午夜精品视频在线观看| 国产精品一卡二| 日本精品一区二区三区高清 | 成人不卡免费av| 在线观看精品一区| 精品少妇一区二区三区视频免付费| 中文字幕免费观看一区| 日本伊人色综合网| 丁香婷婷综合五月| 欧美日韩国产美女| 国产精品免费人成网站| 日本三级亚洲精品| 91麻豆国产香蕉久久精品| 精品一区二区国语对白| 日韩在线观看一区二区| 国产69精品久久99不卡| 欧美日本一区二区三区四区| 国产精品久久久久永久免费观看| 天天色综合成人网| 99久久综合国产精品| 精品国产精品一区二区夜夜嗨| 洋洋av久久久久久久一区| 成人小视频免费在线观看| 日韩欧美亚洲国产精品字幕久久久 | 95精品视频在线| 精品99999| 日韩 欧美一区二区三区| 日本精品一区二区三区四区的功能| 久久精品一区二区三区四区| 免费精品视频在线| 欧美酷刑日本凌虐凌虐| 亚洲男人都懂的| eeuss国产一区二区三区| 久久久亚洲高清| 久久99久久99| 久久综合久久久久88| 国产尤物一区二区| 欧美一区二区播放| 午夜一区二区三区视频| 色婷婷av一区二区三区之一色屋| 国产精品美女一区二区在线观看| 国产一区二区三区蝌蚪| 日韩精品一区二区三区四区视频 | 蜜臀av亚洲一区中文字幕| 欧美日韩国产另类一区| 亚洲电影欧美电影有声小说| 91视频在线观看免费| 亚洲日韩欧美一区二区在线|