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

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

?? pygrub

?? xen 3.2.2 源碼
??
?? 第 1 頁 / 共 2 頁
字號:
#!/usr/bin/python## pygrub - simple python-based bootloader for Xen## Copyright 2005-2006 Red Hat, Inc.# Jeremy Katz <katzj@redhat.com>## This software may be freely redistributed under the terms of the GNU# general public license.## You should have received a copy of the GNU General Public License# along with this program; if not, write to the Free Software# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.#import os, sys, string, struct, tempfile, reimport copyimport loggingimport platformimport curses, _curses, curses.wrapper, curses.textpad, curses.asciiimport getoptsys.path = [ '/usr/lib/python' ] + sys.pathimport fsimageimport grub.GrubConfimport grub.LiloConfPYGRUB_VER = 0.6def enable_cursor(ison):    if ison:        val = 2    else:        val = 0            try:        curses.curs_set(val)    except _curses.error:        passdef is_disk_image(file):    fd = os.open(file, os.O_RDONLY)    buf = os.read(fd, 512)    os.close(fd)    if len(buf) >= 512 and \           struct.unpack("H", buf[0x1fe: 0x200]) == (0xaa55,):        return True    return Falsedef get_active_partition(file):    """Find the offset for the start of the first active partition "    "in the disk image file."""    fd = os.open(file, os.O_RDONLY)    buf = os.read(fd, 512)    for poff in (446, 462, 478, 494): # partition offsets        # active partition has 0x80 as the first byte        if struct.unpack("<c", buf[poff:poff+1]) == ('\x80',):            return buf[poff:poff+16]    # if there's not a partition marked as active, fall back to    # the first partition    return buf[446:446+16]SECTOR_SIZE=512DK_LABEL_LOC=1DKL_MAGIC=0xdabeV_ROOT=0x2def get_solaris_slice(file, offset):    """Find the root slice in a Solaris VTOC."""    fd = os.open(file, os.O_RDONLY)    os.lseek(fd, offset + (DK_LABEL_LOC * SECTOR_SIZE), 0)    buf = os.read(fd, 512)    if struct.unpack("<H", buf[508:510])[0] != DKL_MAGIC:        raise RuntimeError, "Invalid disklabel magic"    nslices = struct.unpack("<H", buf[30:32])[0]    for i in range(nslices):        sliceoff = 72 + 12 * i        slicetag = struct.unpack("<H", buf[sliceoff:sliceoff+2])[0]        slicesect = struct.unpack("<L", buf[sliceoff+4:sliceoff+8])[0]        if slicetag == V_ROOT:            return slicesect * SECTOR_SIZE    raise RuntimeError, "No root slice found"      def get_fs_offset_gpt(file):    fd = os.open(file, os.O_RDONLY)    # assume the first partition is an EFI system partition.    os.lseek(fd, SECTOR_SIZE * 2, 0)    buf = os.read(fd, 512)    return struct.unpack("<Q", buf[32:40])[0] * SECTOR_SIZEFDISK_PART_SOLARIS=0xbfFDISK_PART_SOLARIS_OLD=0x82FDISK_PART_GPT=0xeedef get_fs_offset(file):    if not is_disk_image(file):        return 0    partbuf = get_active_partition(file)    if len(partbuf) == 0:        raise RuntimeError, "Unable to find active partition on disk"    offset = struct.unpack("<L", partbuf[8:12])[0] * SECTOR_SIZE    type = struct.unpack("<B", partbuf[4:5])[0]    if type == FDISK_PART_SOLARIS or type == FDISK_PART_SOLARIS_OLD:        offset += get_solaris_slice(file, offset)    if type == FDISK_PART_GPT:        offset = get_fs_offset_gpt(file)        return offsetclass GrubLineEditor(curses.textpad.Textbox):    def __init__(self, screen, startx, starty, line = ""):        screen.addstr(startx, starty, "> ")        screen.refresh()        win = curses.newwin(1, 74, startx, starty + 2)        curses.textpad.Textbox.__init__(self, win)                self.line = list(line)        self.pos = len(line)        self.cancelled = False        self.show_text()    def show_text(self):        """Show the text.  One of our advantages over standard textboxes        is that we can handle lines longer than the window."""        self.win.clear()        p = self.pos        off = 0        while p > 70:            p -= 55            off += 55        l = self.line[off:off+70]        self.win.addstr(0, 0, string.join(l, ("")))        if self.pos > 70:            self.win.addch(0, 0, curses.ACS_LARROW)        self.win.move(0, p)    def do_command(self, ch):        # we handle escape as well as moving the line around, so have        # to override some of the default handling        self.lastcmd = ch        if ch == 27: # esc            self.cancelled = True            return 0        elif curses.ascii.isprint(ch):            self.line.insert(self.pos, chr(ch))            self.pos += 1        elif ch == curses.ascii.SOH:  # ^a            self.pos = 0        elif ch in (curses.ascii.STX,curses.KEY_LEFT):            if self.pos > 0:                self.pos -= 1        elif ch in (curses.ascii.BS,curses.KEY_BACKSPACE):            if self.pos > 0:                self.pos -= 1                if self.pos < len(self.line):                    self.line.pop(self.pos)        elif ch == curses.ascii.EOT:                           # ^d            if self.pos < len(self.line):                self.line.pop(self.pos)        elif ch == curses.ascii.ENQ:                           # ^e            self.pos = len(self.line)        elif ch in (curses.ascii.ACK, curses.KEY_RIGHT):            if self.pos < len(self.line):                self.pos +=1        elif ch == curses.ascii.VT:                            # ^k            self.line = self.line[:self.pos]        else:            return curses.textpad.Textbox.do_command(self, ch)        self.show_text()        return 1    def edit(self):        r = curses.textpad.Textbox.edit(self)        if self.cancelled:            return None        return string.join(self.line, "")        class Grub:    def __init__(self, file, fs = None):        self.screen = None        self.entry_win = None        self.text_win = None        if file:            self.read_config(file, fs)    def draw_main_windows(self):        if self.screen is None: #only init stuff once            self.screen = curses.initscr()            self.screen.timeout(1000)            if hasattr(curses, 'use_default_colors'):                try:                    curses.use_default_colors()                except:                    pass # Not important if we can't use colour            enable_cursor(False)            self.entry_win = curses.newwin(10, 74, 2, 1)            self.text_win = curses.newwin(10, 70, 12, 5)            curses.def_prog_mode()                curses.reset_prog_mode()        self.screen.clear()        self.screen.refresh()        # create basic grub screen with a box of entries and a textbox        self.screen.addstr(1, 4, "pyGRUB  version %s" %(PYGRUB_VER,))        self.entry_win.box()        self.screen.refresh()    def fill_entry_list(self):        self.entry_win.clear()        self.entry_win.box()        maxy = self.entry_win.getmaxyx()[0]-3 # maxy - 2 for the frame + index        if self.selected_image > self.start_image + maxy:            self.start_image = self.selected_image        if self.selected_image < self.start_image:            self.start_image = self.selected_image                for y in range(self.start_image, len(self.cf.images)):            i = self.cf.images[y]            if y > self.start_image + maxy:                break            if y == self.selected_image:                attr = curses.A_REVERSE            else:                attr = 0            self.entry_win.addstr(y + 1 - self.start_image, 2, i.title.ljust(70), attr)        self.entry_win.refresh()    def edit_entry(self, origimg):        def draw():            self.draw_main_windows()            self.text_win.addstr(0, 0, "Use the U and D keys to select which entry is highlighted.")            self.text_win.addstr(1, 0, "Press 'b' to boot, 'e' to edit the selected command in the")            self.text_win.addstr(2, 0, "boot sequence, 'c' for a command-line, 'o' to open a new line")            self.text_win.addstr(3, 0, "after ('O' for before) the selected line, 'd' to remove the")            self.text_win.addstr(4, 0, "selected line, or escape to go back to the main menu.")            self.text_win.addch(0, 8, curses.ACS_UARROW)            self.text_win.addch(0, 14, curses.ACS_DARROW)            (y, x) = self.text_win.getmaxyx()            self.text_win.move(y - 1, x - 1)            self.text_win.refresh()        curline = 1        img = copy.deepcopy(origimg)        while 1:            draw()            self.entry_win.clear()            self.entry_win.box()            for idx in range(1, len(img.lines)):                # current line should be highlighted                attr = 0                if idx == curline:                    attr = curses.A_REVERSE                # trim the line                l = img.lines[idx].ljust(70)                if len(l) > 70:                    l = l[:69] + ">"                                    self.entry_win.addstr(idx, 2, l, attr)            self.entry_win.refresh()            c = self.screen.getch()            if c in (ord('q'), 27): # 27 == esc                break            elif c == curses.KEY_UP:                curline -= 1            elif c == curses.KEY_DOWN:                curline += 1            elif c == ord('b'):                self.isdone = True                break            elif c == ord('e'):                l = self.edit_line(img.lines[curline])                if l is not None:                    img.set_from_line(l, replace = curline)            elif c == ord('d'):                img.lines.pop(curline)            elif c == ord('o'):                img.lines.insert(curline+1, "")                curline += 1            elif c == ord('O'):                img.lines.insert(curline, "")            elif c == ord('c'):                self.command_line_mode()                if self.isdone:                    return                            # bound at the top and bottom            if curline < 1:                curline = 1            elif curline >= len(img.lines):                curline = len(img.lines) - 1        if self.isdone:            origimg.reset(img.lines)    def edit_line(self, line):        self.screen.clear()        self.screen.addstr(1, 2, "[ Minimal BASH-like line editing is supported.  ")        self.screen.addstr(2, 2, "  ESC at any time cancels.  ENTER at any time accepts your changes. ]")        self.screen.refresh()        t = GrubLineEditor(self.screen, 5, 2, line)        enable_cursor(True)        ret = t.edit()        if ret:            return ret        return None    def command_line_mode(self):        self.screen.clear()        self.screen.addstr(1, 2, "[ Minimal BASH-like line editing is supported.  ESC at any time ")        self.screen.addstr(2, 2, "  exits.  Typing 'boot' will boot with your entered commands. ] ")        self.screen.refresh()        y = 5        lines = []        while 1:            t = GrubLineEditor(self.screen, y, 2)            enable_cursor(True)                        ret = t.edit()            if ret:                if ret in ("quit", "return"):                    break                elif ret != "boot":

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜国产精品影院在线观看| 色综合久久久久久久久| 国产成人啪午夜精品网站男同| 色综合天天综合网天天看片| 日韩免费视频一区| 一区二区三区精品在线| 国产不卡视频一区| 日韩欧美亚洲一区二区| 亚洲国产另类精品专区| 成人深夜在线观看| 精品国内二区三区| 青青草原综合久久大伊人精品| 99re在线视频这里只有精品| 精品剧情v国产在线观看在线| 亚洲国产美女搞黄色| gogo大胆日本视频一区| 久久网站热最新地址| 免费欧美在线视频| 欧美日韩国产综合久久| 一区二区三区鲁丝不卡| 91视频.com| 亚洲视频图片小说| 成人h动漫精品| 国产精品麻豆网站| 成人黄色国产精品网站大全在线免费观看 | 久久综合国产精品| 另类成人小视频在线| 在线不卡a资源高清| 午夜欧美一区二区三区在线播放| 91豆麻精品91久久久久久| 亚洲人123区| 色欧美乱欧美15图片| 怡红院av一区二区三区| 色94色欧美sute亚洲线路一ni| 国产精品每日更新| 一本大道久久a久久综合婷婷| 中文字幕亚洲一区二区va在线| 成人黄色在线看| 亚洲人成影院在线观看| 91美女在线视频| 亚洲国产你懂的| 555夜色666亚洲国产免| 久久精品99久久久| 国产无人区一区二区三区| 成人av在线播放网址| 亚洲免费资源在线播放| 欧美日韩在线三级| 久久精品久久综合| 国产精品丝袜黑色高跟| 91视频91自| 日韩成人av影视| 国产清纯美女被跳蛋高潮一区二区久久w| 久久66热re国产| 国产日韩三级在线| 91视频你懂的| 日本不卡一区二区三区| 国产日韩亚洲欧美综合| 色老综合老女人久久久| 青青国产91久久久久久| 国产网站一区二区| 欧洲色大大久久| 国产自产v一区二区三区c| 中文字幕一区二区三区不卡在线 | 成人av网址在线观看| 日韩理论片在线| 欧美一级高清大全免费观看| 国产成人综合自拍| 五月婷婷另类国产| 欧美极品aⅴ影院| 6080午夜不卡| 成人午夜在线免费| 日韩国产在线一| 国产精品美女久久久久久久久| 欧美在线播放高清精品| 国产精品综合视频| 婷婷一区二区三区| 国产精品福利影院| 欧美一级一区二区| 在线观看国产精品网站| 国产在线乱码一区二区三区| 亚洲一区二区三区不卡国产欧美| 国产色产综合产在线视频| 欧美日韩一区小说| 99久精品国产| 国产麻豆日韩欧美久久| 图片区小说区国产精品视频 | 精品国产1区2区3区| 日本久久电影网| 成人性视频网站| 国产乱对白刺激视频不卡| 婷婷成人综合网| 亚洲精品菠萝久久久久久久| 亚洲国产精品成人综合色在线婷婷 | 亚洲精品一区二区三区精华液| 色综合久久66| 成人性视频免费网站| 黄色日韩网站视频| 蜜桃精品在线观看| 日韩黄色在线观看| 亚洲成人久久影院| 一区二区三区日韩| 亚洲一区二区三区影院| √…a在线天堂一区| 欧美韩日一区二区三区四区| 久久久精品蜜桃| 久久婷婷综合激情| 国产日韩欧美在线一区| 精品久久久久久久一区二区蜜臀| 欧美精品三级在线观看| 欧美男女性生活在线直播观看| 欧美影院一区二区| 欧美综合在线视频| 欧美三电影在线| 欧美日韩精品一区二区在线播放| 一本色道亚洲精品aⅴ| 99久久婷婷国产综合精品| 成+人+亚洲+综合天堂| 成人av在线资源网站| 91在线你懂得| 色天使色偷偷av一区二区| 日本韩国欧美在线| 欧美日韩在线播放三区| 欧美一级淫片007| 久久精品亚洲精品国产欧美kt∨| 日本一区二区不卡视频| 成人免费小视频| 亚洲午夜免费电影| 日韩精品乱码免费| 国产另类ts人妖一区二区| 丁香一区二区三区| 色综合久久综合网欧美综合网 | 不卡的电影网站| 一本一道波多野结衣一区二区| 欧美亚洲日本一区| 日韩一级视频免费观看在线| 国产午夜精品久久久久久久| 国产精品久久久久久久久免费相片| 国产精品国产三级国产普通话99| 亚洲美女一区二区三区| 天堂va蜜桃一区二区三区漫画版 | 久久影院视频免费| 国产精品美女久久久久aⅴ| 一区二区不卡在线播放| 美女视频黄久久| www.视频一区| 7777精品伊人久久久大香线蕉完整版| 欧美videofree性高清杂交| 国产婷婷精品av在线| 亚洲一区在线免费观看| 黄页视频在线91| 欧美在线啊v一区| 久久久久国产精品麻豆ai换脸| 亚洲精品videosex极品| 韩国成人在线视频| 色呦呦国产精品| 国产亚洲欧洲997久久综合| 亚洲综合激情另类小说区| 国产一区二区三区久久久| 日本丰满少妇一区二区三区| 精品国精品自拍自在线| 亚洲黄色在线视频| 国产精品1区二区.| 91精品国产一区二区三区香蕉| 国产精品嫩草久久久久| 日韩av一区二区三区四区| 99精品久久只有精品| 精品久久久久久最新网址| 亚洲一区二区精品久久av| 成人免费视频一区| 精品国产乱码久久久久久免费| 亚洲欧洲韩国日本视频| 国产精品一区三区| 日韩免费看网站| 日欧美一区二区| 色婷婷亚洲精品| 国产精品美日韩| 国产91丝袜在线播放0| 日韩欧美一区二区在线视频| 亚洲一区二区3| 99久久精品免费看国产免费软件| 久久网站最新地址| 美女诱惑一区二区| 91精品国产综合久久蜜臀| 亚洲精品中文在线观看| 成人av午夜电影| 国产精品日韩精品欧美在线| 国产一区二区三区精品视频| 精品成人a区在线观看| 日本中文在线一区| 欧美日本国产一区| 亚洲成人三级小说| 欧美在线视频你懂得| 亚洲欧美另类在线| 色欧美片视频在线观看| 亚洲视频中文字幕| 91丨porny丨中文| 亚洲午夜私人影院| 欧美日韩成人在线| 日本最新不卡在线| 日韩无一区二区|