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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? console.c

?? C語言高級實例解析的源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:


#include "tdestr.h"
#include "common.h"
#include "define.h"
#include "tdefunc.h"

#include <bios.h>               






void video_config( struct vcfg *cfg )
{
#pragma pack( 1 )    

struct LOWMEMVID
{
   char     vidmode;           
   unsigned scrwid;            
   unsigned scrlen;            
   unsigned scroff;            
   struct   LOCATE
   {
      unsigned char col;
      unsigned char row;
   } csrpos[8];                
   struct   CURSIZE
   {
      unsigned char end;
      unsigned char start;
   } csrsize;                  
   char      page;             
   unsigned  addr_6845;        
   char      crt_mode_set;     
   char      crt_palette;      
   char      system_stuff[29]; 
   char      rows;             
   unsigned  points;           
   char      ega_info;         
   char      info_3;           
   char      skip[13];         
   char      kb_flag_3;        
} vid;
struct LOWMEMVID _far *pvid = &vid;
#pragma pack( )    

union REGS in, out;
unsigned char temp, active_display;

   
   _fmemmove( pvid, (void far *)0x00000449l, sizeof( vid ) );

   cfg->rescan = FALSE;
   in.x.ax =  0x1a00;
   int86( VIDEO_INT, &in, &out );
   temp = out.h.al;
   active_display = out.h.bl;
   if (temp == 0x1a && (active_display == 7 || active_display == 8))
      g_display.adapter = VGA;
   else {
      in.h.ah =  0x12;
      in.h.bl =  0x10;
      int86( VIDEO_INT, &in, &out );
      if (out.h.bl != 0x10) {         
         if (vid.ega_info & 0x08)
            g_display.adapter = vid.addr_6845 == 0x3d4 ? CGA : MDA;
         else
            g_display.adapter = EGA;
      } else if (vid.addr_6845 == 0x3d4)
         g_display.adapter = CGA;
      else
         g_display.adapter = MDA;
   }

   if (g_display.adapter == CGA || g_display.adapter == EGA) {
      if (g_display.adapter == CGA)
         cfg->rescan = TRUE;
      g_display.insert_cursor = mode.cursor_size == SMALL_INS ? 0x0607 : 0x0407;
      g_display.overw_cursor = mode.cursor_size == SMALL_INS ? 0x0407 : 0x0607;
   } else {
      g_display.insert_cursor = mode.cursor_size == SMALL_INS ? 0x0b0c : 0x070b;
      g_display.overw_cursor = mode.cursor_size == SMALL_INS ? 0x070b : 0x0b0c;
   }

   cfg->mode = vid.vidmode;
   if (vid.addr_6845 == 0x3D4) {
      cfg->color = TRUE;
      cfg->videomem = (void far *)0xb8000000l;
   } else {
      cfg->color = FALSE;
      cfg->videomem = (void far *)0xb0000000l;
   }

 
   g_display.old_overscan = vid.crt_palette;


   
   if ((vid.kb_flag_3 & 0x10) != 0)
      mode.enh_kbd = TRUE;
   else
      mode.enh_kbd = FALSE;
   if (mode.enh_kbd == FALSE)
      simulate_enh_kbd( 1 );
}




o routines, PC specific    */




int getkey( void )
{
unsigned key, num_lock, control, shift;
register scan;
register unsigned lo;


   while (waitkey( mode.enh_kbd ));

  
   if (mode.enh_kbd) {
      key = _bios_keybrd( 0x10 );
      lo  = _bios_keybrd( 0x12 );

      
      if ((key & 0x00ff) == 0x00e0 && (key & 0xff00) != 0)
         key = key & 0xff00;
   } else {
      key = _bios_keybrd( 0 );
      lo  = _bios_keybrd( 2 );
   }
   num_lock = lo & 0x20;
   control  = lo & 0x04;
   shift    = lo & 0x03;
   scan = (key & 0xff00) >> 8;
   lo = key & 0X00FF;

   if (lo == 0) {
     
      if (scan == 3)
         lo = 430;

      
      else
         lo = scan | 0x100;

  
   } else if (key == 0xffff)
      lo = CONTROL_BREAK;


   
   if (scan == 14 && lo == 0x7f)
      lo = 8;

  
   else if (scan == 0xe0) {
     
      if (lo == 13 && !shift)
         lo = 285;
      
      else if (lo == 13)
         lo = 298;
      
      else if (lo == 10)
         lo = 299;
   }

  
   if (lo < 32) {

  
      if (scan > 0x80)
         scan = 0;

     
      else if (scan == 1) {
         if (shift)
            lo = 259;
         else if (control)
            lo = 260;
         else
            lo = 258;
      }

      
      else if (scan == 28) {
         if (shift)
            lo = 263;
         else if (control)
            lo = 264;
         else
            lo = 262;
      }

   
      else if (scan == 14) {
         if (shift)
            lo = 266;
         else if (control)
            lo = 267;
         else
            lo = 265;
      }

     
      else if (scan == 15) {
         lo = 268;
      }

      
      else if (scan > 0)
         lo += 430;

   } else if (!num_lock) {
      switch (scan) {
        
         case 74 :
            lo = 423;
            break;

         
         case 78 :
            lo = 424;
            break;
      }
   }


   
   if (lo > 256 && (shift || control)) {

      
      if (shift) {
         if (lo >= 371 && lo <= 374)
            lo += 55;

        
         else if (lo >= 376 && lo <= 387)
            lo += 86;

        
         else if (lo >= 272 && lo <= 309)
            lo += 202;
      }
   }

   
   if (lo == 10  &&  scan != 0)
      lo = 425;
   return( lo );
}



int  waitkey( int enh_keyboard )
{
   return( _bios_keybrd( enh_keyboard ? 0x11 : 0x01 ) == 0 ? 1 : 0 );
}



int getfunc( int c )
{
register int i = c;
int  key_found;

   if (!g_status.key_pending) {
      i = c;
      if (i <= 256)
         i = 0;
      else
         i = key_func.key[i-256];
   } else {

      
      key_found = FALSE;
      for (i=0; i < MAX_TWO_KEYS; i++) {
         if (g_status.first_key == two_key_list.key[i].parent_key &&
                               c == two_key_list.key[i].child_key) {
            i = two_key_list.key[i].func;
            key_found = TRUE;
            break;
         }
      }
      if (key_found == FALSE)
         i = ERROR;
   }
   return( i );
}



int  two_key( WINDOW *arg_filler )
{
   s_output( "Next Key..", g_display.mode_line, 67, g_display.diag_color );
   g_status.key_pending = TRUE;
   g_status.first_key = g_status.key_pressed;
   return( OK );
}



void flush_keyboard( void )
{
   if (mode.enh_kbd) {
      while (!waitkey( mode.enh_kbd ))
         _bios_keybrd( 0x10 );
   } else {
      while (!waitkey( mode.enh_kbd ))
         _bios_keybrd( 0 );
   }
}










void xygoto( int col, int line )
{
union REGS inregs, outregs;

   inregs.h.ah = 2;
   inregs.h.bh = 0;
   inregs.h.dh = (unsigned char)line;
   inregs.h.dl = (unsigned char)col;
   int86( 0x10, &inregs, &outregs );
}



void update_line( WINDOW *window )
{
text_ptr text;      
char far *screen_ptr;
int  off;
int  attr;
int  line;
int  col;
int  bcol;
int  bc;
int  ec;
int  normal;
int  block;
int  max_col;
int  block_line;
int  len;
int  show_eol;
int  c;
long rline;
file_infos *file;

   if (window->rline > window->file_info->length || window->ll->len == EOF
             || !g_status.screen_display)
      return;
   file = window->file_info;
   max_col = window->end_col + 1 - window->start_col;
   line = window->cline;
   normal = window->ll->dirty == FALSE ? g_display.text_color : g_display.dirty_color;
   block = g_display.block_color;
   show_eol = mode.show_eol;

   screen_ptr = g_display.display_address;
   off = line * 160 + window->start_col * 2;

 
   text = window->ll->line;
   len  = window->ll->len;
   if (g_status.copied && ptoul( window->ll ) == ptoul( g_status.buff_node )) {
      text = (text_ptr)g_status.line_buff;
      len  = g_status.line_buff_len;
   }
   if (mode.inflate_tabs)
      text = tabout( text, &len );

 
   bc = window->bcol;
   if (bc > 0) {
      if (text == NULL) {
         show_eol = FALSE;
         len = 0;
      } else {
         if ((col = len) < bc) {
            bc = col;
            show_eol = FALSE;
         }
         text += bc;
         len  -= bc;
      }
   }

  
   if (len > max_col)
      len = max_col;

   bcol = window->bcol;
   rline = window->rline;
   if (file->block_type && rline >= file->block_br && rline <= file->block_er)
      block_line = TRUE;
   else
      block_line = FALSE;


   if (block_line == TRUE && (file->block_type == BOX ||
         (file->block_type == STREAM &&
         rline == file->block_br && rline == file->block_er))) {

     
      bc = file->block_bc;
      ec = file->block_ec;
      if (ec < bcol || bc >= bcol + max_col)
       
         ec = bc = max_col + 1;
      else if (ec < bcol + max_col) {
      
         ec = ec - bcol;
         if (bc < bcol)
            bc = 0;
         else
            bc = bc - bcol;
      } else if (bc < bcol + max_col) {
      
         bc = bc - bcol;
         if (ec > bcol + max_col)
            ec = max_col;
         else
            ec = ec - bcol;
      } else if (bc < bcol  &&  ec >= bcol + max_col) {
       
         bc = 0;
         ec = max_col;
      }


   ASSEMBLE {
      


        push    ds                      
        push    si                      
        push    di                      


        mov     ax, WORD PTR bc         
        mov     bl, al                  
        mov     ax, WORD PTR ec         
        mov     bh, al                  
        mov     ax, WORD PTR normal     
        mov     dl, al                  
        mov     ax, WORD PTR block      
        mov     dh, al                  
        mov     ax, WORD PTR max_col    
        mov     ch, al                  
        xor     cl, cl                  

        mov     di, WORD PTR screen_ptr         
        add     di, WORD PTR off                
        mov     ax, WORD PTR screen_ptr+2       
        mov     es, ax
        mov     si, WORD PTR text       
        mov     ax, WORD PTR text+2     
        mov     ds, ax                  
        cmp     si, 0                   
        jne     not_null                
        cmp     ax, 0                   
        je      dspl_eol                
   }
not_null:

   ASSEMBLE {
        cmp     cl, ch                  
        jge     getout                  
        cmp     cl, BYTE PTR len        
        je      dspl_eol                
   }
top:

   ASSEMBLE {
        lodsb                   
        mov     ah, dl          
        cmp     cl, bl          
        jl      ch_out1         
        cmp     cl, bh          
        jg      ch_out1         
        mov     ah, dh          
   }
ch_out1:

   ASSEMBLE {
        stosw                    attribute */
        inc     cl              
        cmp     cl, ch          
        jge     getout          
        cmp     cl, BYTE PTR len        
        jl      top             
   }
dspl_eol:

   ASSEMBLE {
        cmp     WORD PTR show_eol, FALSE        
        je      block_eol       

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩大陆在线| 亚洲人成人一区二区在线观看| 久久伊人中文字幕| 综合久久国产九一剧情麻豆| 日本不卡视频在线| 色综合天天综合色综合av| 精品福利一区二区三区| 一区二区成人在线视频| 国产高清无密码一区二区三区| 欧美日韩一区高清| 国产精品国产精品国产专区不蜜 | 久久精品一区二区| 亚洲五月六月丁香激情| 99r精品视频| 久久网站热最新地址| 日韩成人dvd| 欧美中文字幕一二三区视频| 中文字幕视频一区| 国产成人精品www牛牛影视| 日韩一区二区在线观看视频| 亚洲一区自拍偷拍| 成人国产精品免费观看动漫| 久久久三级国产网站| 日本aⅴ亚洲精品中文乱码| 欧美日韩视频专区在线播放| 亚洲欧美日韩久久| 成人av网站大全| 国产精品嫩草99a| 国产精品1区二区.| 国产校园另类小说区| 激情六月婷婷久久| 精品欧美久久久| 久热成人在线视频| 日韩精品一区二区三区swag| 日韩精品高清不卡| 日韩欧美第一区| 久久99热这里只有精品| 欧美mv和日韩mv国产网站| 久久黄色级2电影| 精品成人一区二区| 精品无人区卡一卡二卡三乱码免费卡| 欧美一区二区三区啪啪| 人禽交欧美网站| 26uuu色噜噜精品一区二区| 久久精品国产第一区二区三区| 日韩精品中文字幕在线一区| 精品在线播放免费| 国产免费久久精品| bt7086福利一区国产| 一区二区三区四区乱视频| 色嗨嗨av一区二区三区| 午夜精品久久久久久久久久 | 一区二区三区鲁丝不卡| 丁香五精品蜜臀久久久久99网站| 国产欧美日韩三级| 97se亚洲国产综合自在线观| 一区二区三区久久| 精品剧情v国产在线观看在线| 国产一区二区视频在线| 国产精品久久久久久久久图文区 | 亚洲综合999| 3atv一区二区三区| 国产在线精品一区二区不卡了 | 一区二区在线观看视频在线观看| 欧美在线一区二区三区| 蜜桃av一区二区| 国产精品美女久久久久久2018 | 中文字幕一区在线| 欧美日韩日日夜夜| 国产一区高清在线| 亚洲视频在线观看一区| 日韩免费性生活视频播放| 国产.欧美.日韩| 亚洲一区在线观看免费观看电影高清 | 色94色欧美sute亚洲线路一ni| 五月激情六月综合| 国产欧美一区二区三区在线看蜜臀| 色美美综合视频| 精品夜夜嗨av一区二区三区| 亚洲靠逼com| 精品第一国产综合精品aⅴ| 色综合网色综合| 极品美女销魂一区二区三区免费 | 国产性色一区二区| 欧美少妇性性性| 成+人+亚洲+综合天堂| 日韩影院免费视频| 亚洲天堂a在线| 久久久久久久综合色一本| 欧美在线你懂得| 国产精品一二三四| 午夜激情久久久| 亚洲图片激情小说| 国产亚洲欧美一区在线观看| 884aa四虎影成人精品一区| 99精品视频中文字幕| 久久66热re国产| 日韩电影在线一区| 亚洲成人午夜电影| 亚洲免费视频成人| 国产日韩精品一区二区三区| 日韩美一区二区三区| 这里只有精品视频在线观看| 色一情一乱一乱一91av| 国产精品一区二区无线| 久久电影国产免费久久电影| 日韩精品国产精品| 无码av免费一区二区三区试看| 亚洲精品成人在线| 亚洲视频在线观看一区| 国产精品毛片大码女人| 欧美极品美女视频| 亚洲自拍偷拍欧美| 亚洲欧洲制服丝袜| 18涩涩午夜精品.www| 亚洲欧洲国产日本综合| 亚洲国产精品激情在线观看| 久久久久久一级片| 国产欧美中文在线| 中文字幕精品一区二区精品绿巨人| 国产色综合久久| 日本一区二区视频在线观看| 国产精品久久久久久福利一牛影视 | 久久久国际精品| 久久久久久久久岛国免费| 久久久久久夜精品精品免费| 久久久国际精品| 国产精品萝li| 亚洲日本va在线观看| 一区二区三区在线观看网站| 亚洲在线视频网站| 免费人成黄页网站在线一区二区| 日本中文字幕不卡| 精品系列免费在线观看| 成人久久视频在线观看| 色综合一区二区三区| 欧美久久一二区| 337p粉嫩大胆色噜噜噜噜亚洲 | 91精品国产高清一区二区三区蜜臀| 欧美一区二区三级| 久久女同精品一区二区| 亚洲婷婷综合久久一本伊一区| 亚洲一线二线三线久久久| 日本亚洲三级在线| 成人免费观看av| 欧美日韩一区二区在线观看| 欧美xxxxxxxx| 中文字幕一区二区视频| 五月婷婷综合在线| 国产高清久久久| 欧美日韩综合色| 欧美精品一区在线观看| 玉足女爽爽91| 韩国精品免费视频| 色网综合在线观看| 日韩欧美电影一区| 成人免费小视频| 蜜桃av一区二区三区电影| av电影天堂一区二区在线观看| 日韩一级片网站| 亚洲男帅同性gay1069| 美女视频网站黄色亚洲| 91视频免费播放| 精品国产污污免费网站入口| 亚洲免费在线视频一区 二区| 免费日韩伦理电影| 色婷婷激情综合| 久久婷婷国产综合国色天香| 亚洲一区二区av电影| 成人在线视频首页| 91麻豆精品国产| 亚洲欧美日韩在线| 国产精品 欧美精品| 日韩午夜av一区| 亚洲午夜激情网站| 高清不卡在线观看av| 日韩视频不卡中文| 亚洲午夜精品久久久久久久久| 成人美女视频在线观看18| 欧美一级爆毛片| 天天综合网天天综合色| 91国偷自产一区二区开放时间 | 国产精品视频第一区| 极品瑜伽女神91| 91精品一区二区三区在线观看| 亚洲图片激情小说| 成人a区在线观看| 国产三级精品在线| 国产美女视频一区| 精品国产免费一区二区三区香蕉| 日本不卡一区二区三区| 欧美在线色视频| 一区二区久久久久| 色哟哟国产精品免费观看| 一色桃子久久精品亚洲| 99综合电影在线视频| 国产精品久久福利| 高清日韩电视剧大全免费| 国产欧美一区在线| 成人av在线一区二区三区|