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

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

?? console.c

?? LINUX 0.11版內核代碼。 并有代碼分析說明。
?? C
?? 第 1 頁 / 共 3 頁
字號:
  long count __asm__ ("cx");	// 設為寄存器變量。  long start __asm__ ("di");// 首先根據三種情況分別設置需要刪除的字符數和刪除開始的顯示內存位置。  switch (par)    {    case 0:			/* erase from cursor to end of display *//* 擦除光標到屏幕底端 */      count = (scr_end - pos) >> 1;      start = pos;      break;    case 1:			/* erase from start to cursor *//* 刪除從屏幕開始到光標處的字符 */      count = (pos - origin) >> 1;      start = origin;      break;    case 2:			/* erase whole display *//* 刪除整個屏幕上的字符 */      count = video_num_columns * video_num_lines;      start = origin;      break;    default:      return;    }// 然后使用擦除字符填寫刪除字符的地方。// %0 - ecx(要刪除的字符數count);%1 - edi(刪除操作開始地址);%2 - eax(填入的擦除字符)。__asm__ ("cld\n\t" "rep\n\t" "stosw\n\t"::"c" (count), "D" (start), "a" (video_erase_char):"cx", "di");}//// 刪除行內與光標位置相關的部分,以一行為單位。// ANSI 轉義字符序列:'ESC [sK'(s = 0 刪除到行尾;1 從開始刪除;2 整行都刪除)。static voidcsi_K (int par){  long count __asm__ ("cx");	// 設置寄存器變量。  long start __asm__ ("di");// 首先根據三種情況分別設置需要刪除的字符數和刪除開始的顯示內存位置。  switch (par)    {    case 0:			/* erase from cursor to end of line *//* 刪除光標到行尾字符 */      if (x >= video_num_columns)	return;      count = video_num_columns - x;      start = pos;      break;    case 1:			/* erase from start of line to cursor *//* 刪除從行開始到光標處 */      start = pos - (x << 1);      count = (x < video_num_columns) ? x : video_num_columns;      break;    case 2:			/* erase whole line *//* 將整行字符全刪除 */      start = pos - (x << 1);      count = video_num_columns;      break;    default:      return;    }// 然后使用擦除字符填寫刪除字符的地方。// %0 - ecx(要刪除的字符數count);%1 - edi(刪除操作開始地址);%2 - eax(填入的擦除字符)。__asm__ ("cld\n\t" "rep\n\t" "stosw\n\t"::"c" (count), "D" (start), "a" (video_erase_char):"cx", "di");}//// 允許翻譯(重顯)(允許重新設置字符顯示方式,比如加粗、加下劃線、閃爍、反顯等)。// ANSI 轉義字符序列:'ESC [nm'。n = 0 正常顯示;1 加粗;4 加下劃線;7 反顯;27 正常顯示。voidcsi_m (void){  int i;  for (i = 0; i <= npar; i++)    switch (par[i])      {      case 0:	attr = 0x07;	break;      case 1:	attr = 0x0f;	break;      case 4:	attr = 0x0f;	break;      case 7:	attr = 0x70;	break;      case 27:	attr = 0x07;	break;      }}//// 根據設置顯示光標。// 根據顯示內存光標對應位置pos,設置顯示控制器光標的顯示位置。static inline voidset_cursor (void){  cli ();// 首先使用索引寄存器端口選擇顯示控制數據寄存器r14(光標當前顯示位置高字節),然后寫入光標// 當前位置高字節(向右移動9 位表示高字節移到低字節再除以2)。是相對于默認顯示內存操作的。  outb_p (14, video_port_reg);  outb_p (0xff & ((pos - video_mem_start) >> 9), video_port_val);// 再使用索引寄存器選擇r15,并將光標當前位置低字節寫入其中。  outb_p (15, video_port_reg);  outb_p (0xff & ((pos - video_mem_start) >> 1), video_port_val);  sti ();}//// 發送對終端VT100 的響應序列。// 將響應序列放入讀緩沖隊列中。static voidrespond (struct tty_struct *tty){  char *p = RESPONSE;  cli ();			// 關中斷。  while (*p)    {				// 將字符序列放入寫隊列。      PUTCH (*p, tty->read_q);      p++;    }  sti ();			// 開中斷。  copy_to_cooked (tty);		// 轉換成規范模式(放入輔助隊列中)。}//// 在光標處插入一空格字符。static voidinsert_char (void){  int i = x;  unsigned short tmp, old = video_erase_char;  unsigned short *p = (unsigned short *) pos;// 光標開始的所有字符右移一格,并將擦除字符插入在光標所在處。// 若一行上都有字符的話,則行最后一個字符將不會更動??  while (i++ < video_num_columns)    {      tmp = *p;      *p = old;      old = tmp;      p++;    }}//// 在光標處插入一行(則光標將處在新的空行上)。// 將屏幕從光標所在行到屏幕底向下卷動一行。static voidinsert_line (void){  int oldtop, oldbottom;  oldtop = top;			// 保存原top,bottom 值。  oldbottom = bottom;  top = y;			// 設置屏幕卷動開始行。  bottom = video_num_lines;	// 設置屏幕卷動最后行。  scrdown ();			// 從光標開始處,屏幕內容向下滾動一行。  top = oldtop;			// 恢復原top,bottom 值。  bottom = oldbottom;}//// 刪除光標處的一個字符。static voiddelete_char (void){  int i;  unsigned short *p = (unsigned short *) pos;// 如果光標超出屏幕最右列,則返回。  if (x >= video_num_columns)    return;// 從光標右一個字符開始到行末所有字符左移一格。  i = x;  while (++i < video_num_columns)    {      *p = *(p + 1);      p++;    }// 最后一個字符處填入擦除字符(空格字符)。  *p = video_erase_char;}//// 刪除光標所在行。// 從光標所在行開始屏幕內容上卷一行。static voiddelete_line (void){  int oldtop, oldbottom;  oldtop = top;			// 保存原top,bottom 值。  oldbottom = bottom;  top = y;			// 設置屏幕卷動開始行。  bottom = video_num_lines;	// 設置屏幕卷動最后行。  scrup ();			// 從光標開始處,屏幕內容向上滾動一行。  top = oldtop;			// 恢復原top,bottom 值。  bottom = oldbottom;}//// 在光標處插入nr 個字符。// ANSI 轉義字符序列:'ESC [n@ '。// 參數 nr = 上面n。static voidcsi_at (unsigned int nr){// 如果插入的字符數大于一行字符數,則截為一行字符數;若插入字符數nr 為0,則插入1 個字符。  if (nr > video_num_columns)    nr = video_num_columns;  else if (!nr)    nr = 1;// 循環插入指定的字符數。  while (nr--)    insert_char ();}//// 在光標位置處插入nr 行。// ANSI 轉義字符序列'ESC [nL'。static voidcsi_L (unsigned int nr){// 如果插入的行數大于屏幕最多行數,則截為屏幕顯示行數;若插入行數nr 為0,則插入1 行。  if (nr > video_num_lines)    nr = video_num_lines;  else if (!nr)    nr = 1;// 循環插入指定行數nr。  while (nr--)    insert_line ();}//// 刪除光標處的nr 個字符。// ANSI 轉義序列:'ESC [nP'。static voidcsi_P (unsigned int nr){// 如果刪除的字符數大于一行字符數,則截為一行字符數;若刪除字符數nr 為0,則刪除1 個字符。  if (nr > video_num_columns)    nr = video_num_columns;  else if (!nr)    nr = 1;// 循環刪除指定字符數nr。  while (nr--)    delete_char ();}//// 刪除光標處的nr 行。// ANSI 轉義序列:'ESC [nM'。static voidcsi_M (unsigned int nr){// 如果刪除的行數大于屏幕最多行數,則截為屏幕顯示行數;若刪除的行數nr 為0,則刪除1 行。  if (nr > video_num_lines)    nr = video_num_lines;  else if (!nr)    nr = 1;// 循環刪除指定行數nr。  while (nr--)    delete_line ();}static int saved_x = 0;		// 保存的光標列號。static int saved_y = 0;		// 保存的光標行號。//// 保存當前光標位置。static voidsave_cur (void){  saved_x = x;  saved_y = y;}//// 恢復保存的光標位置。static voidrestore_cur (void){  gotoxy (saved_x, saved_y);}//// 控制臺寫函數。// 從終端對應的tty 寫緩沖隊列中取字符,并顯示在屏幕上。voidcon_write (struct tty_struct *tty){  int nr;  char c;// 首先取得寫緩沖隊列中現有字符數nr,然后針對每個字符進行處理。  nr = CHARS (tty->write_q);  while (nr--)    {// 從寫隊列中取一字符c,根據前面所處理字符的狀態state 分別處理。狀態之間的轉換關系為:// state = 0:初始狀態;或者原是狀態4;或者原是狀態1,但字符不是'[';// 1:原是狀態0,并且字符是轉義字符ESC(0x1b = 033 = 27);// 2:原是狀態1,并且字符是'[';// 3:原是狀態2;或者原是狀態3,并且字符是';'或數字。// 4:原是狀態3,并且字符不是';'或數字;      GETCH (tty->write_q, c);      switch (state)	{	case 0:// 如果字符不是控制字符(c>31),并且也不是擴展字符(c<127),則	  if (c > 31 && c < 127)	    {// 若當前光標處在行末端或末端以外,則將光標移到下行頭列。并調整光標位置對應的內存指針pos。	      if (x >= video_num_columns)		{		  x -= video_num_columns;		  pos -= video_size_row;		  lf ();		}// 將字符c 寫到顯示內存中pos 處,并將光標右移1 列,同時也將pos 對應地移動2 個字節。	    __asm__ ("movb _attr,%%ah\n\t" "movw %%ax,%1\n\t"::"a" (c), "m" (*(short *) pos):"ax");	      pos += 2;	      x++;// 如果字符c 是轉義字符ESC,則轉換狀態state 到1。	    }	  else if (c == 27)	    state = 1;// 如果字符c 是換行符(10),或是垂直制表符VT(11),或者是換頁符FF(12),則移動光標到下一行。	  else if (c == 10 || c == 11 || c == 12)	    lf ();// 如果字符c 是回車符CR(13),則將光標移動到頭列(0 列)。	  else if (c == 13)	    cr ();// 如果字符c 是DEL(127),則將光標右邊一字符擦除(用空格字符替代),并將光標移到被擦除位置。	  else if (c == ERASE_CHAR (tty))	    del ();// 如果字符c 是BS(backspace,8),則將光標右移1 格,并相應調整光標對應內存位置指針pos。	  else if (c == 8)	    {	      if (x)		{		  x--;		  pos -= 2;		}// 如果字符c 是水平制表符TAB(9),則將光標移到8 的倍數列上。若此時光標列數超出屏幕最大列數,// 則將光標移到下一行上。

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美一级二级三级久久久| 成人综合日日夜夜| 欧美精品色综合| 午夜精品久久久久久久久久| 欧美福利视频导航| 另类小说一区二区三区| www国产精品av| 国产精品丝袜91| 精品一区二区三区影院在线午夜| 精品久久久久久亚洲综合网 | 久久精品日韩一区二区三区| 韩国v欧美v日本v亚洲v| 国产精品―色哟哟| 一本大道久久精品懂色aⅴ| 亚洲国产成人精品视频| 日韩一区二区三区精品视频| 欧美色爱综合网| 日韩高清国产一区在线| 国产亚洲制服色| 在线免费视频一区二区| 蜜臀av性久久久久av蜜臀妖精| 久久久久久久久久久黄色| 色综合 综合色| 六月丁香综合在线视频| 亚洲色图视频网站| 日韩精品中文字幕在线一区| 成人av网站在线观看免费| 午夜a成v人精品| 国产视频一区二区三区在线观看| 欧美亚洲综合一区| 粉嫩久久99精品久久久久久夜| 亚洲一卡二卡三卡四卡| 国产亚洲自拍一区| 欧美丰满少妇xxxbbb| 本田岬高潮一区二区三区| 午夜精品视频在线观看| 中文字幕一区在线观看| 日韩免费在线观看| 欧洲精品一区二区三区在线观看| 精品一区二区三区香蕉蜜桃| 精品国产一区二区三区忘忧草| youjizz国产精品| 久久国产视频网| 亚洲成人免费观看| 美女脱光内衣内裤视频久久网站| 欧美国产精品久久| 日韩一区二区三区免费观看| 91福利国产精品| 成人av第一页| 久久97超碰国产精品超碰| 午夜免费欧美电影| 亚洲精品乱码久久久久| 欧美—级在线免费片| 日韩欧美高清dvd碟片| 欧美日韩国产欧美日美国产精品| va亚洲va日韩不卡在线观看| 国产白丝网站精品污在线入口| 麻豆成人av在线| 蜜桃av噜噜一区| 日韩中文字幕区一区有砖一区| 一区二区三区欧美亚洲| 中文字幕五月欧美| 国产精品色婷婷| 久久久国产综合精品女国产盗摄| 蜜桃视频一区二区三区| 99国产精品久久久久久久久久久| 久久99精品国产.久久久久| 亚洲成av人综合在线观看| 亚洲精品国产一区二区三区四区在线| 日本一区二区三级电影在线观看| 日韩精品在线一区二区| 精品免费99久久| 精品国产污网站| 国产偷国产偷亚洲高清人白洁| 久久―日本道色综合久久| 26uuu亚洲| 久久久精品2019中文字幕之3| 久久久电影一区二区三区| 亚洲精品在线观看视频| 久久精品视频免费观看| 中日韩免费视频中文字幕| 国产精品对白交换视频| 亚洲女同一区二区| 亚洲一区二区三区视频在线播放| 亚洲成av人影院在线观看网| 婷婷丁香久久五月婷婷| 看国产成人h片视频| 蜜臀av一级做a爰片久久| 青青青伊人色综合久久| 国产综合色产在线精品| 丰满亚洲少妇av| 96av麻豆蜜桃一区二区| 精品1区2区3区| 在线成人高清不卡| 久久青草国产手机看片福利盒子| 久久精品一区蜜桃臀影院| 国产精品久久久久久久久动漫| 一色桃子久久精品亚洲| 一区二区三区欧美视频| 美日韩黄色大片| av一区二区三区四区| 欧美日韩一区二区三区四区| 日韩欧美亚洲一区二区| 国产亚洲精品久| 亚洲高清免费视频| 国内欧美视频一区二区| 91蜜桃免费观看视频| 欧美日韩国产天堂| 亚洲国产精品精华液2区45| 一区二区三区日韩精品| 精品中文字幕一区二区| 99精品国产99久久久久久白柏| 欧美日韩一区二区在线观看| 久久久久九九视频| 亚洲综合免费观看高清完整版 | 天天影视网天天综合色在线播放| 奇米一区二区三区av| 国产成人超碰人人澡人人澡| 欧美色倩网站大全免费| 国产日本一区二区| 婷婷综合久久一区二区三区| 国v精品久久久网| 宅男在线国产精品| 亚洲私人影院在线观看| 精品一区二区av| 欧美日韩国产首页在线观看| 国产免费观看久久| 久久精品99国产精品| 日本韩国欧美三级| 国产精品免费aⅴ片在线观看| 日韩电影网1区2区| 色综合久久综合中文综合网| 久久一区二区视频| 美腿丝袜一区二区三区| 欧美亚洲综合色| 一区在线播放视频| 国产精品一二三在| 欧美tk丨vk视频| 亚洲国产精品久久久久婷婷884 | 久久久综合视频| 日产国产高清一区二区三区| av在线不卡电影| 国产日韩精品一区| 精品一区二区在线视频| 精品视频在线视频| 夜夜嗨av一区二区三区中文字幕 | 狠狠色伊人亚洲综合成人| 欧美日韩国产片| 亚洲高清视频中文字幕| 91久久久免费一区二区| 国产精品传媒视频| 成人18视频日本| 国产欧美日本一区视频| 国产精品亚洲成人| 久久免费午夜影院| 玖玖九九国产精品| 日韩免费性生活视频播放| 日本在线播放一区二区三区| 欧美午夜精品理论片a级按摩| 最新中文字幕一区二区三区| caoporn国产精品| 国产精品成人一区二区三区夜夜夜| 国产一区欧美日韩| 久久青草欧美一区二区三区| 国产乱人伦偷精品视频不卡| 欧美精品一区二区三区蜜臀| 狠狠v欧美v日韩v亚洲ⅴ| 日韩你懂的在线播放| 韩国三级中文字幕hd久久精品| 日韩精品在线一区二区| 国产一区不卡视频| 欧美国产精品劲爆| 91蜜桃在线免费视频| 亚洲黄色免费网站| 欧美精品在线观看播放| 免费精品99久久国产综合精品| 欧美一级黄色录像| 激情五月激情综合网| 欧美激情在线观看视频免费| hitomi一区二区三区精品| 一区二区三区色| 欧美顶级少妇做爰| 日韩中文字幕1| 蜜桃在线一区二区三区| 91精品国产综合久久精品app| 午夜伊人狠狠久久| 欧美久久免费观看| 九色综合狠狠综合久久| 久久久亚洲国产美女国产盗摄| 成人免费的视频| 尤物在线观看一区| 日韩一卡二卡三卡国产欧美| 久久国产尿小便嘘嘘尿| 国产精品国产三级国产aⅴ中文 | 国产在线一区观看| 1024成人网色www| 欧美三级一区二区| 国产乱码精品一区二区三区av| 亚洲欧洲日韩一区二区三区| 欧美日本一区二区三区|