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

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

?? console.c

?? Minix3.11的源碼。[MINIX 3是一個為高可靠性應用而設計的自由且簡潔的類UNIX系統。]
?? 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一区二区三区免费野_久草精品视频
亚洲电影欧美电影有声小说| 色综合色综合色综合 | 亚洲第一精品在线| 在线电影院国产精品| 精东粉嫩av免费一区二区三区| 欧美大胆一级视频| 高清shemale亚洲人妖| 亚洲色图视频免费播放| 欧美人与禽zozo性伦| 久久疯狂做爰流白浆xx| 亚洲人精品午夜| 久久婷婷国产综合精品青草| 色婷婷香蕉在线一区二区| 国产一区二区三区久久悠悠色av | 欧美成人三级电影在线| 成人午夜电影小说| 国产在线一区观看| 亚洲素人一区二区| 一区二区在线观看视频在线观看| 亚洲最新视频在线观看| 日日骚欧美日韩| k8久久久一区二区三区 | 久久久三级国产网站| 国产精品久久久久婷婷| 亚洲国产精品影院| 高清国产午夜精品久久久久久| 99久久精品国产毛片| 日韩亚洲欧美成人一区| 中文字幕一区二区视频| 蜜臀a∨国产成人精品| 国产成人一区二区精品非洲| 欧美日韩视频在线第一区 | 国产精品视频线看| 国产精品美女久久久久高潮| 国产精品久久免费看| 国产精品久久久久久久久免费丝袜| 欧美成人猛片aaaaaaa| 日韩欧美一区在线| 久久久久久99久久久精品网站| 久久久午夜精品理论片中文字幕| 久久久国产精华| 亚洲一区二区美女| 久久丁香综合五月国产三级网站| 国v精品久久久网| 精品视频1区2区| 国产午夜精品理论片a级大结局| 欧美精品一区视频| 亚洲欧洲综合另类在线| 免费高清在线一区| 国产女同互慰高潮91漫画| 国产精品久久久久影院亚瑟| 国产一区高清在线| 久久久久久免费| 国产激情一区二区三区四区| 久久―日本道色综合久久| 免费的国产精品| 亚洲人成网站在线| 亚洲成人综合网站| 国产一区二区三区在线观看精品 | 国产一区二区调教| 欧美最猛性xxxxx直播| 精品久久久久久久久久久久久久久久久| 日韩精品一区二区三区在线| 亚洲免费观看高清在线观看| 久久99精品国产.久久久久 | 96av麻豆蜜桃一区二区| 久久久久久久久久久久久夜| 秋霞成人午夜伦在线观看| 在线观看精品一区| 亚洲精品国产无套在线观| 成人午夜av在线| 国产欧美精品一区二区三区四区| 日本在线不卡视频一二三区| 欧美日韩另类一区| 亚洲一区二区精品视频| 欧美久久婷婷综合色| 午夜精品福利久久久| 欧美日韩成人在线| 美女诱惑一区二区| 久久久久国色av免费看影院| 国产中文字幕精品| 中文无字幕一区二区三区| aaa欧美日韩| 男人的天堂亚洲一区| 久久欧美一区二区| av在线免费不卡| 午夜国产精品影院在线观看| 欧美一区二区三区四区在线观看| 极品尤物av久久免费看| 亚洲欧美偷拍另类a∨色屁股| 欧美色图免费看| 久久av中文字幕片| 国产精品婷婷午夜在线观看| 欧美日韩三级在线| 国产成人免费视频网站| 亚洲蜜臀av乱码久久精品| 欧美一区二区女人| 成人亚洲一区二区一| 亚洲成av人片在www色猫咪| 国产农村妇女毛片精品久久麻豆 | 日韩影视精彩在线| 国产精品久久久久久久久免费桃花| 欧美日韩国产系列| 成人爽a毛片一区二区免费| 视频一区二区中文字幕| 中文字幕一区二区三| 337p粉嫩大胆噜噜噜噜噜91av| 欧美视频精品在线观看| 99国产精品99久久久久久| 激情综合色丁香一区二区| 亚洲午夜在线电影| 国产精品久久久久久久蜜臀| 国产日韩欧美电影| 欧美国产日本韩| 欧美国产一区二区| 国产午夜精品在线观看| 国产欧美日韩三区| 欧美经典一区二区| 亚洲欧美日韩电影| 亚洲蜜臀av乱码久久精品| 一区二区三区日本| 亚洲高清免费观看 | 久久99蜜桃精品| 国产精品一区二区在线观看不卡| 国产真实乱子伦精品视频| 一本到不卡精品视频在线观看| jlzzjlzz欧美大全| 色欧美日韩亚洲| 欧美麻豆精品久久久久久| 在线成人小视频| 国产日韩欧美在线一区| 亚洲天堂久久久久久久| 日韩电影在线免费看| 国产精品一区二区果冻传媒| 91在线云播放| 精品少妇一区二区三区日产乱码| 国产精品视频一区二区三区不卡| 亚洲永久免费av| 国产一区二区在线影院| 色偷偷88欧美精品久久久| 日韩精品综合一本久道在线视频| 欧美激情综合网| 舔着乳尖日韩一区| www.日韩在线| 国产三级欧美三级| 日韩在线一二三区| 色猫猫国产区一区二在线视频| 欧美一级片在线| 丝袜美腿亚洲色图| 欧美在线999| 亚洲精品国产高清久久伦理二区| 裸体健美xxxx欧美裸体表演| 欧美日韩精品是欧美日韩精品| 久久久亚洲国产美女国产盗摄 | 欧美高清www午色夜在线视频| 国产精品成人免费| 99热这里都是精品| 国产精品乱码妇女bbbb| 国产一区二区三区| 91精品国产麻豆| 亚洲自拍与偷拍| 亚洲精品国产一区二区三区四区在线| 日韩黄色免费电影| av成人免费在线观看| 日韩午夜精品视频| 椎名由奈av一区二区三区| 亚洲国产综合视频在线观看| 国产乱码一区二区三区| 91激情五月电影| 91精品婷婷国产综合久久性色 | 久久久久国产一区二区三区四区| 亚洲人123区| 国产高清视频一区| 粉嫩av一区二区三区| 国产一区在线精品| 天天色天天爱天天射综合| www激情久久| 欧美视频一区二区三区四区| 精品中文字幕一区二区小辣椒| 亚洲黄色片在线观看| 国产女人aaa级久久久级| 亚洲男人的天堂一区二区| 国产午夜精品在线观看| 欧美日韩精品欧美日韩精品| av中文字幕不卡| 看片网站欧美日韩| 久久97超碰色| 黄色日韩三级电影| 一区二区三区在线视频观看| 一区精品在线播放| 国产精品国产馆在线真实露脸| 国产欧美日韩久久| 国产精品久久久久久亚洲伦| 国产精品视频一二三| 亚洲精选一二三| 首页亚洲欧美制服丝腿| 久久99精品一区二区三区| 国产一区二区三区黄视频| 99国产精品99久久久久久| 日韩欧美一区二区三区在线|