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

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

?? asmstub.c

?? Linux啟動程序grub的源碼分析與實現(xiàn);
?? C
?? 第 1 頁 / 共 2 頁
字號:
  return c;}/* like 'getkey', but doesn't wait, returns -1 if nothing available */intconsole_checkkey (void){#ifdef HAVE_LIBCURSES  if (use_curses)    {      int c;      /* Check for SAVE_CHAR. This should not be true, because this	 means checkkey is called twice continuously.  */      if (save_char != ERR)	return save_char;      c = getch ();      /* If C is not ERR, then put it back in the input queue.  */      if (c != ERR)	save_char = c;      return console_translate_key (c);    }#endif  /* Just pretend they hit the space bar, then read the real key when     they call getkey. */  return ' ';}/* returns packed BIOS/ASCII code */intconsole_getkey (void){  int c;#ifdef HAVE_LIBCURSES  if (use_curses)    {      /* If checkkey has already got a character, then return it.  */      if (save_char != ERR)	{	  c = save_char;	  save_char = ERR;	  return console_translate_key (c);	}      wtimeout (stdscr, -1);      c = getch ();      wtimeout (stdscr, 100);    }  else#endif    c = getchar ();  /* Quit if we get EOF. */  if (c == -1)    stop ();    return console_translate_key (c);}/* returns packed values, LSB+1 is x, LSB is y */intconsole_getxy (void){  int y, x;#ifdef HAVE_LIBCURSES  if (use_curses)    getyx (stdscr, y, x);  else#endif  y = x = 0;  return (x << 8) | (y & 0xff);}voidconsole_gotoxy (int x, int y){#ifdef HAVE_LIBCURSES  if (use_curses)    move (y, x);#endif}/* low-level character I/O */voidconsole_cls (void){#ifdef HAVE_LIBCURSES  if (use_curses)    clear ();#endif}voidconsole_setcolorstate (color_state state){  console_current_color =     (state == COLOR_STATE_HIGHLIGHT) ? A_REVERSE : A_NORMAL;}voidconsole_setcolor (int normal_color, int highlight_color){  /* Nothing to do.  */}intconsole_setcursor (int on){  return 1;}/* Low-level disk I/O.  Our stubbed version just returns a file   descriptor, not the actual geometry. */intget_diskinfo (int drive, struct geometry *geometry){  /* FIXME: this function is truly horrid.  We try opening the device,     then severely abuse the GEOMETRY->flags field to pass a file     descriptor to biosdisk.  Thank God nobody's looking at this comment,     or my reputation would be ruined. --Gord */  /* See if we have a cached device. */  if (disks[drive].flags == -1)    {      /* The unpartitioned device name: /dev/XdX */      char *devname = device_map[drive];      char buf[512];      if (! devname)	return -1;      if (verbose)	grub_printf ("Attempt to open drive 0x%x (%s)\n",		     drive, devname);      /* Open read/write, or read-only if that failed. */      if (! read_only)	disks[drive].flags = open (devname, O_RDWR);      if (disks[drive].flags == -1)	{	  if (read_only || errno == EACCES || errno == EROFS || errno == EPERM)	    {	      disks[drive].flags = open (devname, O_RDONLY);	      if (disks[drive].flags == -1)		{		  assign_device_name (drive, 0);		  return -1;		}	    }	  else	    {	      assign_device_name (drive, 0);	      return -1;	    }	}      /* Attempt to read the first sector.  */      if (read (disks[drive].flags, buf, 512) != 512)	{	  close (disks[drive].flags);	  disks[drive].flags = -1;	  assign_device_name (drive, 0);	  return -1;	}      if (disks[drive].flags != -1)	get_drive_geometry (&disks[drive], device_map, drive);    }  if (disks[drive].flags == -1)    return -1;#ifdef __linux__  /* In Linux, invalidate the buffer cache, so that left overs     from other program in the cache are flushed and seen by us */  ioctl (disks[drive].flags, BLKFLSBUF, 0);#endif  *geometry = disks[drive];  return 0;}/* Read LEN bytes from FD in BUF. Return less than or equal to zero if an   error occurs, otherwise return LEN.  */static intnread (int fd, char *buf, size_t len){  int size = len;  while (len)    {      int ret = read (fd, buf, len);      if (ret <= 0)	{	  if (errno == EINTR)	    continue;	  else	    return ret;	}      len -= ret;      buf += ret;    }  return size;}/* Write LEN bytes from BUF to FD. Return less than or equal to zero if an   error occurs, otherwise return LEN.  */static intnwrite (int fd, char *buf, size_t len){  int size = len;  while (len)    {      int ret = write (fd, buf, len);      if (ret <= 0)	{	  if (errno == EINTR)	    continue;	  else	    return ret;	}      len -= ret;      buf += ret;    }  return size;}/* Dump BUF in the format of hexadecimal numbers.  */static voidhex_dump (void *buf, size_t size){  /* FIXME: How to determine which length is readable?  */#define MAX_COLUMN	70  /* use unsigned char for numerical computations */  unsigned char *ptr = buf;  /* count the width of the line */  int column = 0;  /* how many bytes written */  int count = 0;  while (size > 0)    {      /* high 4 bits */      int hi = *ptr >> 4;      /* low 4 bits */      int low = *ptr & 0xf;      /* grub_printf does not handle prefix number, such as %2x, so	 format the number by hand...  */      grub_printf ("%x%x", hi, low);      column += 2;      count++;      ptr++;      size--;      /* Insert space or newline with the interval 4 bytes.  */      if (size != 0 && (count % 4) == 0)	{	  if (column < MAX_COLUMN)	    {	      grub_printf (" ");	      column++;	    }	  else	    {	      grub_printf ("\n");	      column = 0;	    }	}    }  /* Add a newline at the end for readability.  */  grub_printf ("\n");}intbiosdisk (int subfunc, int drive, struct geometry *geometry,	  int sector, int nsec, int segment){  char *buf;  int fd = geometry->flags;  /* Get the file pointer from the geometry, and make sure it matches. */  if (fd == -1 || fd != disks[drive].flags)    return BIOSDISK_ERROR_GEOMETRY;  /* Seek to the specified location. */#if defined(__linux__) && (!defined(__GLIBC__) || \	((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1))))  /* Maybe libc doesn't have large file support.  */  {    loff_t offset, result;    static int _llseek (uint filedes, ulong hi, ulong lo,			loff_t *res, uint wh);    _syscall5 (int, _llseek, uint, filedes, ulong, hi, ulong, lo,	       loff_t *, res, uint, wh);    offset = (loff_t) sector * (loff_t) SECTOR_SIZE;    if (_llseek (fd, offset >> 32, offset & 0xffffffff, &result, SEEK_SET))      return -1;  }#else  {    off_t offset = (off_t) sector * (off_t) SECTOR_SIZE;    if (lseek (fd, offset, SEEK_SET) != offset)      return -1;  }#endif  buf = (char *) (segment << 4);  switch (subfunc)    {    case BIOSDISK_READ:#ifdef __linux__      if (sector == 0 && nsec > 1)	{	  /* Work around a bug in linux's ez remapping.  Linux remaps all	     sectors that are read together with the MBR in one read.  It	     should only remap the MBR, so we split the read in two 	     parts. -jochen  */	  if (nread (fd, buf, SECTOR_SIZE) != SECTOR_SIZE)	    return -1;	  buf += SECTOR_SIZE;	  nsec--;	}#endif      if (nread (fd, buf, nsec * SECTOR_SIZE) != nsec * SECTOR_SIZE)	return -1;      break;    case BIOSDISK_WRITE:      if (verbose)	{	  grub_printf ("Write %d sectors starting from %d sector"		       " to drive 0x%x (%s)\n",		       nsec, sector, drive, device_map[drive]);	  hex_dump (buf, nsec * SECTOR_SIZE);	}      if (! read_only)	if (nwrite (fd, buf, nsec * SECTOR_SIZE) != nsec * SECTOR_SIZE)	  return -1;      break;    default:      grub_printf ("unknown subfunc %d\n", subfunc);      break;    }  return 0;}voidstop_floppy (void){  /* NOTUSED */}/* Fetch a key from a serial device.  */intserial_hw_fetch (void){  fd_set fds;  struct timeval to;  char c;  /* Wait only for the serial device.  */  FD_ZERO (&fds);  FD_SET (serial_fd, &fds);  to.tv_sec = 0;  to.tv_usec = 0;    if (select (serial_fd + 1, &fds, 0, 0, &to) > 0)    {      if (nread (serial_fd, &c, 1) != 1)	stop ();      return c;    }    return -1;}/* Put a character to a serial device.  */voidserial_hw_put (int c){  char ch = (char) c;    if (nwrite (serial_fd, &ch, 1) != 1)    stop ();}voidserial_hw_delay (void){#ifdef SIMULATE_SLOWNESS_OF_SERIAL  struct timeval otv, tv;  gettimeofday (&otv, 0);  while (1)    {      long delta;            gettimeofday (&tv, 0);      delta = tv.tv_usec - otv.tv_usec;      if (delta < 0)	delta += 1000000;            if (delta >= 1000000 / (serial_speed >> 3))	break;    }#endif /* SIMULATE_SLOWNESS_OF_SERIAL */}static speed_tget_termios_speed (int speed){  switch (speed)    {    case 2400: return B2400;    case 4800: return B4800;    case 9600: return B9600;    case 19200: return B19200;    case 38400: return B38400;#ifdef B57600    case 57600: return B57600;#endif#ifdef B115200          case 115200: return B115200;#endif    }  return B0;}/* Get the port number of the unit UNIT. In the grub shell, this doesn't   make sense.  */unsigned shortserial_hw_get_port (int unit){  return 0;}/* Initialize a serial device. In the grub shell, PORT is unused.  */intserial_hw_init (unsigned short port, unsigned int speed,		int word_len, int parity, int stop_bit_len){  struct termios termios;  speed_t termios_speed;  int i;    /* Check if the file name is specified.  */  if (! serial_device)    return 0;  /* If a serial device is already opened, close it first.  */  if (serial_fd >= 0)    close (serial_fd);    /* Open the device file.  */  serial_fd = open (serial_device,		    O_RDWR | O_NOCTTY#if defined(O_SYNC)		    /* O_SYNC is used in Linux (and some others?).  */		    | O_SYNC#elif defined(O_FSYNC)		    /* O_FSYNC is used in FreeBSD.  */		    | O_FSYNC#endif		    );  if (serial_fd < 0)    return 0;  /* Get the termios parameters.  */  if (tcgetattr (serial_fd, &termios))    goto fail;  /* Raw mode.  */  cfmakeraw (&termios);  /* Set the speed.  */  termios_speed = get_termios_speed (speed);  if (termios_speed == B0)    goto fail;    cfsetispeed (&termios, termios_speed);  cfsetospeed (&termios, termios_speed);  /* Set the word length.  */  termios.c_cflag &= ~CSIZE;  switch (word_len)    {    case UART_5BITS_WORD:      termios.c_cflag |= CS5;      break;    case UART_6BITS_WORD:      termios.c_cflag |= CS6;      break;    case UART_7BITS_WORD:      termios.c_cflag |= CS7;      break;    case UART_8BITS_WORD:      termios.c_cflag |= CS8;      break;    default:      goto fail;    }  /* Set the parity.  */  switch (parity)    {    case UART_NO_PARITY:      termios.c_cflag &= ~PARENB;      break;    case UART_ODD_PARITY:      termios.c_cflag |= PARENB;      termios.c_cflag |= PARODD;      break;    case UART_EVEN_PARITY:      termios.c_cflag |= PARENB;      termios.c_cflag &= ~PARODD;      break;    default:      goto fail;    }  /* Set the length of stop bit.  */  switch (stop_bit_len)    {    case UART_1_STOP_BIT:      termios.c_cflag &= ~CSTOPB;      break;    case UART_2_STOP_BITS:      termios.c_cflag |= CSTOPB;      break;    default:      goto fail;    }  /* Set the parameters.  */  if (tcsetattr (serial_fd, TCSANOW, &termios))    goto fail;#ifdef SIMULATE_SLOWNESS_OF_SERIAL  serial_speed = speed;#endif /* SIMUATE_SLOWNESS_OF_SERIAL */  /* Get rid of the flag TERM_NEED_INIT from the serial terminal.  */  for (i = 0; term_table[i].name; i++)    {      if (strcmp (term_table[i].name, "serial") == 0)	{	  term_table[i].flags &= ~(TERM_NEED_INIT);	  break;	}    }    return 1; fail:  close (serial_fd);  serial_fd = -1;  return 0;}/* Set the file name of a serial device (or a pty device). This is a   function specific to the grub shell.  */voidserial_set_device (const char *device){  if (serial_device)    free (serial_device);    serial_device = strdup (device);}/* There is no difference between console and hercules in the grub shell.  */voidhercules_putchar (int c){  console_putchar (c);}inthercules_getxy (void){  return console_getxy ();}voidhercules_gotoxy (int x, int y){  console_gotoxy (x, y);}voidhercules_cls (void){  console_cls ();}voidhercules_setcolorstate (color_state state){  console_setcolorstate (state);}voidhercules_setcolor (int normal_color, int highlight_color){  console_setcolor (normal_color, highlight_color);}inthercules_setcursor (int on){  return 1;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品美女在线观看| 91猫先生在线| 精品剧情v国产在线观看在线| 三级久久三级久久| 日韩欧美一卡二卡| 美女久久久精品| 精品国产百合女同互慰| 国产精品中文字幕欧美| 中文字幕第一页久久| 色香蕉成人二区免费| 午夜影院在线观看欧美| 日韩欧美中文字幕精品| 国产一区二区美女| 自拍偷拍欧美精品| 欧美色电影在线| 久久99精品一区二区三区三区| 久久久午夜电影| 一本色道久久加勒比精品| 爽好多水快深点欧美视频| 欧美成人a在线| 成人国产精品免费观看视频| 亚洲国产婷婷综合在线精品| 日韩欧美一二三四区| 波多野结衣视频一区| 亚洲h精品动漫在线观看| 欧美r级在线观看| 99久久久无码国产精品| 蜜臀av一区二区在线免费观看 | 亚洲1区2区3区视频| 日韩一级大片在线| 99热精品国产| 免费成人av资源网| 国产精品理论片| 91精品婷婷国产综合久久性色| 国产伦精品一区二区三区免费 | 日本一区二区三区高清不卡| 在线亚洲一区二区| 国产一区二区在线视频| 亚洲国产色一区| 欧美r级在线观看| 91在线观看一区二区| 毛片一区二区三区| 一区二区三区美女视频| www一区二区| 欧美另类高清zo欧美| 91在线免费看| 国产福利91精品| 日本色综合中文字幕| 亚洲视频综合在线| 26uuu国产电影一区二区| 欧美午夜视频网站| 成人h动漫精品一区二区| 麻豆传媒一区二区三区| 亚洲高清视频的网址| 中文字幕亚洲一区二区av在线| 欧美videofree性高清杂交| 色狠狠一区二区三区香蕉| 国产成人在线看| 日韩国产精品久久久| 一区二区三区在线免费观看| 国产精品精品国产色婷婷| 久久久国产综合精品女国产盗摄| 日韩午夜av一区| 制服丝袜中文字幕一区| 欧美无乱码久久久免费午夜一区| 91视频.com| 91色九色蝌蚪| 91热门视频在线观看| 成人禁用看黄a在线| 国产高清视频一区| 国产成人综合在线播放| 国产精品一区二区三区四区 | 久久99久久精品| 日本在线观看不卡视频| 天堂va蜜桃一区二区三区漫画版| 亚洲夂夂婷婷色拍ww47 | 国产午夜久久久久| 精品国产91亚洲一区二区三区婷婷| 欧美一区二区在线不卡| 91精品国产欧美一区二区| 欧美伦理电影网| 欧美一级在线视频| 欧美成人高清电影在线| 精品少妇一区二区三区免费观看| 日韩欧美一区二区久久婷婷| 精品美女在线观看| 国产欧美日韩视频在线观看| 久久久久青草大香线综合精品| 国产午夜精品一区二区三区视频 | 国产精品国产三级国产普通话99 | 日本久久一区二区三区| 在线这里只有精品| 欧美日韩高清一区二区| 欧美一区永久视频免费观看| 欧美大片一区二区| 久久久99精品免费观看不卡| 国产精品美女一区二区三区| 亚洲欧美国产毛片在线| 午夜精品久久久久久久99樱桃| 天堂成人免费av电影一区| 蜜桃久久av一区| 国产馆精品极品| 色av一区二区| 欧美一二区视频| 国产精品拍天天在线| 一区二区三区美女| 久久爱另类一区二区小说| 丁香桃色午夜亚洲一区二区三区| 99久久伊人精品| 欧美一区二区视频观看视频| 久久久精品2019中文字幕之3| 自拍偷拍欧美精品| 免费成人在线观看| www.亚洲人| 日韩一级黄色大片| 国产精品久久久久久久久免费相片| 亚洲综合在线电影| 另类小说综合欧美亚洲| jlzzjlzz国产精品久久| 日韩一卡二卡三卡| 亚洲丝袜另类动漫二区| 美女精品一区二区| 日本乱码高清不卡字幕| 久久青草欧美一区二区三区| 亚洲女人****多毛耸耸8| 美女视频黄 久久| 色婷婷久久久亚洲一区二区三区 | 91精品欧美一区二区三区综合在 | 一区二区三区日韩在线观看| 精品亚洲成a人| 在线视频观看一区| 国产日韩欧美麻豆| 日日嗨av一区二区三区四区| 99久久精品免费看国产 | 国产欧美日韩中文久久| 五月天一区二区| 91小视频免费看| 久久精品亚洲精品国产欧美kt∨| 亚洲高清久久久| 91免费视频观看| 久久精品一区四区| 蜜臀91精品一区二区三区| 91国产免费看| 国产精品久久久久久久久搜平片| 黄一区二区三区| 日韩亚洲欧美高清| 亚洲一级二级三级在线免费观看| 丰满少妇久久久久久久| 欧美精品一区二区三区四区| 视频一区二区三区在线| 欧美吻胸吃奶大尺度电影| 亚洲视频免费看| 成人免费视频播放| 国产农村妇女精品| 国产伦精品一区二区三区免费| 日韩一二三区不卡| 免费高清在线一区| 欧美疯狂性受xxxxx喷水图片| 亚洲综合免费观看高清完整版在线 | 日韩午夜在线观看视频| 香蕉乱码成人久久天堂爱免费| 91久久精品国产91性色tv| 国产精品福利一区| 成人午夜激情影院| 中文字幕精品一区二区精品绿巨人| 久久国产成人午夜av影院| 日韩精品最新网址| 毛片基地黄久久久久久天堂| 日韩一区二区精品葵司在线| 蜜桃视频一区二区三区在线观看 | 精品国产一区二区三区av性色| 日本少妇一区二区| 日韩欧美一级二级| 九色|91porny| 久久久国产午夜精品| 成人免费黄色大片| 中文字幕人成不卡一区| 99视频一区二区三区| 亚洲精品久久久久久国产精华液| 日本精品一区二区三区高清| 亚洲自拍偷拍欧美| 制服视频三区第一页精品| 久久精品国产成人一区二区三区 | 国产精品网曝门| 91在线观看视频| 亚洲第一福利一区| 日韩亚洲欧美综合| 风间由美一区二区三区在线观看 | 日韩一区精品字幕| 精品久久久久一区| 成人精品视频网站| 亚洲精品一卡二卡| 欧美日韩成人一区| 免费成人在线观看视频| 国产欧美一区二区精品秋霞影院| 99久久99久久久精品齐齐| 亚洲高清久久久| 久久久久久99精品| 在线观看免费一区| 国模娜娜一区二区三区|