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

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

?? console.c

?? minix3的源碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
  }}/*===========================================================================* *				stop_beep				     * *===========================================================================*/PRIVATE void stop_beep(tmrp)timer_t *tmrp;{/* Turn off the beeper by turning off bits 0 and 1 in PORT_B. */  int port_b_val;  if (sys_inb(PORT_B, &port_b_val)==OK && 	sys_outb(PORT_B, (port_b_val & ~3))==OK)		beeping = FALSE;}/*===========================================================================* *				scr_init				     * *===========================================================================*/PUBLIC void scr_init(tp)tty_t *tp;{/* Initialize the screen driver. */  console_t *cons;  phys_bytes vid_base;  u16_t bios_columns, bios_crtbase, bios_fontlines;  u8_t bios_rows;  int line;  int s;  static int vdu_initialized = 0;  unsigned page_size;  /* Associate console and TTY. */  line = tp - &tty_table[0];  if (line >= nr_cons) return;  cons = &cons_table[line];  cons->c_tty = tp;  tp->tty_priv = cons;  /* Initialize the keyboard driver. */  kb_init(tp);  /* Fill in TTY function hooks. */  tp->tty_devwrite = cons_write;  tp->tty_echo = cons_echo;  tp->tty_ioctl = cons_ioctl;  /* Get the BIOS parameters that describe the VDU. */  if (! vdu_initialized++) {	/* How about error checking? What to do on failure??? */  	s=sys_vircopy(SELF, BIOS_SEG, (vir_bytes) VDU_SCREEN_COLS_ADDR,  		SELF, D, (vir_bytes) &bios_columns, VDU_SCREEN_COLS_SIZE);  	s=sys_vircopy(SELF, BIOS_SEG, (vir_bytes) VDU_CRT_BASE_ADDR,   		SELF, D, (vir_bytes) &bios_crtbase, VDU_CRT_BASE_SIZE);  	s=sys_vircopy(SELF, BIOS_SEG, (vir_bytes) VDU_SCREEN_ROWS_ADDR,   		SELF, D, (vir_bytes) &bios_rows, VDU_SCREEN_ROWS_SIZE);  	s=sys_vircopy(SELF, BIOS_SEG, (vir_bytes) VDU_FONTLINES_ADDR,   		SELF, D, (vir_bytes) &bios_fontlines, VDU_FONTLINES_SIZE);  	vid_port = bios_crtbase;  	scr_width = bios_columns;  	font_lines = bios_fontlines;  	scr_lines = machine.vdu_ega ? bios_rows+1 : 25;  	if (color) {		vid_base = COLOR_BASE;		vid_size = COLOR_SIZE;  	} else {		vid_base = MONO_BASE;		vid_size = MONO_SIZE;  	}  	if (machine.vdu_ega) vid_size = EGA_SIZE;  	wrap = ! machine.vdu_ega;  	s = sys_segctl(&vid_index, &vid_seg, &vid_off, vid_base, vid_size);  	vid_size >>= 1;		/* word count */  	vid_mask = vid_size - 1;  	/* Size of the screen (number of displayed characters.) */  	scr_size = scr_lines * scr_width;  	/* There can be as many consoles as video memory allows. */  	nr_cons = vid_size / scr_size;  	if (nr_cons > NR_CONS) nr_cons = NR_CONS;  	if (nr_cons > 1) wrap = 0;  	page_size = vid_size / nr_cons;  }  cons->c_start = line * page_size;  cons->c_limit = cons->c_start + page_size;  cons->c_cur = cons->c_org = cons->c_start;  cons->c_attr = cons->c_blank = BLANK_COLOR;  if (line != 0) {        /* Clear the non-console vtys. */  	blank_color = BLANK_COLOR;	mem_vid_copy(BLANK_MEM, cons->c_start, scr_size);  } else {	int i, n;	/* Set the cursor of the console vty at the bottom. c_cur	 * is updated automatically later.	 */	scroll_screen(cons, SCROLL_UP);	cons->c_row = scr_lines - 1;	cons->c_column = 0;  }  select_console(0);  cons_ioctl(tp, 0);}/*===========================================================================* *				kputc					     * *===========================================================================*/PUBLIC void kputc(c)int c;{#if 0	cons_putk(c);#else/* Accumulate a single character for a kernel message. Send a notification * the to output driver if an END_OF_KMESS is encountered.  */  if (c != 0) {      kmess.km_buf[kmess.km_next] = c;	/* put normal char in buffer */      if (kmess.km_size < KMESS_BUF_SIZE)          kmess.km_size += 1;		      kmess.km_next = (kmess.km_next + 1) % KMESS_BUF_SIZE;  } else {      notify(LOG_PROC_NR);  }#endif}/*===========================================================================* *				do_new_kmess				     * *===========================================================================*/PUBLIC void do_new_kmess(m)message *m;{/* Notification for a new kernel message. */  struct kmessages kmess;			/* kmessages structure */  static int prev_next = 0;			/* previous next seen */  int size, next;  int bytes;  int r;  /* Try to get a fresh copy of the buffer with kernel messages. */#if DEAD_CODE	  /* During shutdown, the reply is garbled because new notifications arrive   * while the system task makes a copy of the kernel messages buffer.   * Hence, don't check the return value.    */  if ((r=sys_getkmessages(&kmess)) != OK) {  	printf("TTY: couldn't get copy of kmessages: %d, 0x%x\n", r,r);  	return;  }#endif  sys_getkmessages(&kmess);  /* Print only the new part. Determine how many new bytes there are with    * help of the current and previous 'next' index. Note that the kernel   * buffer is circular. This works fine if less then KMESS_BUF_SIZE bytes   * is new data; else we miss % KMESS_BUF_SIZE here.     * Check for size being positive, the buffer might as well be emptied!   */  if (kmess.km_size > 0) {      bytes = ((kmess.km_next + KMESS_BUF_SIZE) - prev_next) % KMESS_BUF_SIZE;      r=prev_next;				/* start at previous old */       while (bytes > 0) {			          cons_putk( kmess.km_buf[(r%KMESS_BUF_SIZE)] );          bytes --;          r ++;      }      cons_putk(0);			/* terminate to flush output */  }  /* Almost done, store 'next' so that we can determine what part of the   * kernel messages buffer to print next time a notification arrives.   */  prev_next = kmess.km_next;}/*===========================================================================* *				do_diagnostics				     * *===========================================================================*/PUBLIC void do_diagnostics(m_ptr)message *m_ptr;			/* pointer to request message */{/* Print a string for a server. */  char c;  vir_bytes src;  int count;  int result = OK;  int proc_nr = m_ptr->DIAG_PROC_NR;  if (proc_nr == SELF) proc_nr = m_ptr->m_source;  src = (vir_bytes) m_ptr->DIAG_PRINT_BUF;  for (count = m_ptr->DIAG_BUF_COUNT; count > 0; count--) {	if (sys_vircopy(proc_nr, D, src++, SELF, D, (vir_bytes) &c, 1) != OK) {		result = EFAULT;		break;	}	cons_putk(c);  }  cons_putk(0);			/* always terminate, even with EFAULT */  m_ptr->m_type = result;  send(m_ptr->m_source, m_ptr);}/*===========================================================================* *				do_get_kmess				     * *===========================================================================*/PUBLIC void do_get_kmess(m_ptr)message *m_ptr;			/* pointer to request message */{/* Provide the log device with debug output */  vir_bytes dst;  int r;  dst = (vir_bytes) m_ptr->GETKM_PTR;  r= OK;  if (sys_vircopy(SELF, D, (vir_bytes)&kmess, m_ptr->m_source, D,	dst, sizeof(kmess)) != OK) {	r = EFAULT;  }  m_ptr->m_type = r;  send(m_ptr->m_source, m_ptr);}/*===========================================================================* *				cons_putk				     * *===========================================================================*/PRIVATE void cons_putk(c)int c;				/* character to print */{/* This procedure is used to print a character on the console. */  if (c != 0) {	if (c == '\n') cons_putk('\r');	out_char(&cons_table[0], (int) c);  } else {	flush(&cons_table[0]);  }}/*===========================================================================* *				toggle_scroll				     * *===========================================================================*/PUBLIC void toggle_scroll(){/* Toggle between hardware and software scroll. */  cons_org0();  softscroll = !softscroll;  printf("%sware scrolling enabled.\n", softscroll ? "Soft" : "Hard");}/*===========================================================================* *				cons_stop				     * *===========================================================================*/PUBLIC void cons_stop(){/* Prepare for halt or reboot. */  cons_org0();  softscroll = 1;  select_console(0);  cons_table[0].c_attr = cons_table[0].c_blank = BLANK_COLOR;}/*===========================================================================* *				cons_org0				     * *===========================================================================*/PRIVATE void cons_org0(){/* Scroll video memory back to put the origin at 0. */  int cons_line;  console_t *cons;  unsigned n;  for (cons_line = 0; cons_line < nr_cons; cons_line++) {	cons = &cons_table[cons_line];	while (cons->c_org > cons->c_start) {		n = vid_size - scr_size;	/* amount of unused memory */		if (n > cons->c_org - cons->c_start)			n = cons->c_org - cons->c_start;		vid_vid_copy(cons->c_org, cons->c_org - n, scr_size);		cons->c_org -= n;	}	flush(cons);  }  select_console(ccurrent);}/*===========================================================================* *				select_console				     * *===========================================================================*/PUBLIC void select_console(int cons_line){/* Set the current console to console number 'cons_line'. */  if (cons_line < 0 || cons_line >= nr_cons) return;  ccurrent = cons_line;  curcons = &cons_table[cons_line];  set_6845(VID_ORG, curcons->c_org);  set_6845(CURSOR, curcons->c_cur);}/*===========================================================================* *				con_loadfont				     * *===========================================================================*/PUBLIC int con_loadfont(m)message *m;{/* Load a font into the EGA or VGA adapter. */  int result;  static struct sequence seq1[7] = {	{ GA_SEQUENCER_INDEX, 0x00, 0x01 },	{ GA_SEQUENCER_INDEX, 0x02, 0x04 },	{ GA_SEQUENCER_INDEX, 0x04, 0x07 },	{ GA_SEQUENCER_INDEX, 0x00, 0x03 },	{ GA_GRAPHICS_INDEX, 0x04, 0x02 },	{ GA_GRAPHICS_INDEX, 0x05, 0x00 },	{ GA_GRAPHICS_INDEX, 0x06, 0x00 },  };  static struct sequence seq2[7] = {	{ GA_SEQUENCER_INDEX, 0x00, 0x01 },	{ GA_SEQUENCER_INDEX, 0x02, 0x03 },	{ GA_SEQUENCER_INDEX, 0x04, 0x03 },	{ GA_SEQUENCER_INDEX, 0x00, 0x03 },	{ GA_GRAPHICS_INDEX, 0x04, 0x00 },	{ GA_GRAPHICS_INDEX, 0x05, 0x10 },	{ GA_GRAPHICS_INDEX, 0x06,    0 },  };  seq2[6].value= color ? 0x0E : 0x0A;  if (!machine.vdu_ega) return(ENOTTY);  result = ga_program(seq1);	/* bring font memory into view */  result = sys_physcopy(m->PROC_NR, D, (vir_bytes) m->ADDRESS,   	NONE, PHYS_SEG, (phys_bytes) GA_VIDEO_ADDRESS, (phys_bytes)GA_FONT_SIZE);  result = ga_program(seq2);	/* restore */  return(result);}/*===========================================================================* *				ga_program				     * *===========================================================================*/PRIVATE int ga_program(seq)struct sequence *seq;{  pvb_pair_t char_out[14];  int i;  for (i=0; i<7; i++) {      pv_set(char_out[2*i], seq->index, seq->port);      pv_set(char_out[2*i+1], seq->index+1, seq->value);      seq++;  }   return sys_voutb(char_out, 14);}/*===========================================================================* *				cons_ioctl				     * *===========================================================================*/PRIVATE int cons_ioctl(tp, try)tty_t *tp;int try;{/* Set the screen dimensions. */  tp->tty_winsize.ws_row= scr_lines;  tp->tty_winsize.ws_col= scr_width;  tp->tty_winsize.ws_xpixel= scr_width * 8;  tp->tty_winsize.ws_ypixel= scr_lines * font_lines;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
高清不卡一二三区| 欧美经典一区二区| 国产老肥熟一区二区三区| 欧美日韩亚洲另类| 午夜精品视频在线观看| 91麻豆精品久久久久蜜臀| 午夜av区久久| 日韩一区二区三区在线观看| 青青青伊人色综合久久| 久久亚洲综合av| 波多野结衣精品在线| 亚洲欧美另类小说视频| 欧美高清你懂得| 国产剧情在线观看一区二区| 亚洲私人影院在线观看| 欧美亚洲国产bt| 狂野欧美性猛交blacked| 国产日韩精品一区二区浪潮av| 成人免费黄色在线| 亚洲综合久久久| 亚洲精品一区二区三区福利| 成人18视频在线播放| 亚洲高清在线精品| 久久久五月婷婷| 91高清视频在线| 国内成人免费视频| 亚洲午夜精品在线| 国产午夜精品久久久久久久| 91久久精品午夜一区二区| 精品一区二区三区日韩| 亚洲黄色性网站| 久久久99久久精品欧美| 色综合色狠狠综合色| 人人精品人人爱| 亚洲欧美福利一区二区| 欧美变态tickling挠脚心| 成人黄色一级视频| 美腿丝袜在线亚洲一区| 亚洲男人的天堂av| 精品乱码亚洲一区二区不卡| 91福利精品视频| 国产成人精品亚洲777人妖| 亚洲福利电影网| 国产精品美女久久久久久久| 日韩视频在线观看一区二区| 色哟哟一区二区| 丁香六月久久综合狠狠色| 丝袜a∨在线一区二区三区不卡| 欧美激情中文不卡| 26uuu亚洲综合色欧美| 欧美另类变人与禽xxxxx| 成人aa视频在线观看| 国产精品一区二区视频| 日韩av二区在线播放| 一区二区视频免费在线观看| 国产人成亚洲第一网站在线播放| 欧美另类久久久品| 在线精品视频免费播放| www.99精品| 成人综合婷婷国产精品久久 | 美女视频一区二区| 亚洲午夜精品17c| 亚洲精品自拍动漫在线| 国产精品久久久久久久岛一牛影视| 日韩欧美激情一区| 欧美变态凌虐bdsm| 欧美大片一区二区三区| 欧美岛国在线观看| 91精品国产综合久久久久久| 欧美精品粉嫩高潮一区二区| 欧美日精品一区视频| 欧美网站大全在线观看| 在线一区二区三区四区五区| 91麻豆成人久久精品二区三区| 91在线观看污| 91婷婷韩国欧美一区二区| 99视频热这里只有精品免费| kk眼镜猥琐国模调教系列一区二区| 国产一区二区三区在线观看免费视频| 另类成人小视频在线| 麻豆极品一区二区三区| 国内成+人亚洲+欧美+综合在线| 久久精品久久综合| 国产激情视频一区二区三区欧美| 精品午夜久久福利影院| 国产一区二区精品久久99| 国产精品小仙女| www.欧美日韩| 欧美视频一区在线| 欧美高清激情brazzers| 欧美不卡激情三级在线观看| 国产午夜精品一区二区三区嫩草| 中文字幕精品—区二区四季| 亚洲欧洲日韩女同| 亚洲综合999| 免费视频一区二区| 国产黄色91视频| 91片在线免费观看| 欧美高清dvd| 精品国产一区二区三区av性色| 久久亚洲精精品中文字幕早川悠里| 国产亚洲精品aa午夜观看| 亚洲女子a中天字幕| 婷婷成人综合网| 国产99精品视频| 色呦呦日韩精品| 欧美一区二区福利在线| 欧美激情一区在线| 亚洲一区影音先锋| 精品无人区卡一卡二卡三乱码免费卡| 成人免费毛片app| 欧美年轻男男videosbes| 精品国产91洋老外米糕| ...av二区三区久久精品| 天堂一区二区在线| 国产成人在线色| 欧美三级一区二区| 久久蜜桃一区二区| 亚洲一区二区中文在线| 久久国产欧美日韩精品| 一本久道中文字幕精品亚洲嫩| 91精品国产色综合久久| 综合中文字幕亚洲| 免费成人在线播放| 一本色道综合亚洲| 国产亚洲欧美在线| 日韩精品成人一区二区三区| 粉嫩av一区二区三区粉嫩| 欧美蜜桃一区二区三区| 中文字幕欧美激情| 久久精品国产亚洲高清剧情介绍 | 久久影音资源网| 亚洲成人免费电影| 99精品视频在线观看| 精品国产精品一区二区夜夜嗨| 一区二区三区久久久| 懂色av噜噜一区二区三区av| 欧美日韩国产高清一区二区三区| 国产精品久久免费看| 精品一区二区三区视频在线观看| 欧美色精品在线视频| |精品福利一区二区三区| 国产一区二区三区蝌蚪| 欧美一区二区私人影院日本| 一区二区三区在线播放| 成人免费的视频| 久久久精品国产免费观看同学| 亚洲午夜电影在线| 在线视频国内自拍亚洲视频| 亚洲国产成人自拍| 精品一区二区三区在线观看| 日韩一级二级三级| 天天色综合成人网| 欧美三级一区二区| 亚洲一区二区精品3399| 色88888久久久久久影院野外| 国产精品国模大尺度视频| 国产69精品一区二区亚洲孕妇| 日韩美女一区二区三区四区| 视频一区二区中文字幕| 宅男在线国产精品| 蜜桃在线一区二区三区| 日韩一区二区高清| 男女激情视频一区| 日韩欧美在线影院| 久久爱另类一区二区小说| 欧美videos中文字幕| 久热成人在线视频| 精品福利在线导航| 国产乱色国产精品免费视频| 久久综合久久综合亚洲| 国产高清在线观看免费不卡| 国产精品污污网站在线观看 | 国产一区 二区| 久久久亚洲国产美女国产盗摄| 国产东北露脸精品视频| 国产精品三级视频| 99国产精品久| 亚洲最新在线观看| 制服丝袜日韩国产| 久草精品在线观看| 国产视频视频一区| www.日韩av| 天堂va蜜桃一区二区三区漫画版| 欧美一级片在线看| 国产东北露脸精品视频| 亚洲色图欧美在线| 欧美日本在线一区| 国产在线视视频有精品| 国产精品国产三级国产普通话三级 | 久久久久久黄色| 成av人片一区二区| 亚洲国产精品视频| 日韩女优av电影| 不卡视频在线看| 亚洲第一精品在线| 国产亚洲1区2区3区| 色婷婷av一区二区三区软件| 日韩电影在线免费看| 欧美国产禁国产网站cc|