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

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

?? pygrub

?? xen虛擬機源代碼安裝包
??
?? 第 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', '/usr/lib64/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:                self.entry_win.attron(curses.A_REVERSE)            self.entry_win.addstr(y + 1 - self.start_image, 2, i.title.ljust(70))            if y == self.selected_image:                self.entry_win.attroff(curses.A_REVERSE)        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                if idx == curline:                    self.entry_win.attron(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)                if idx == curline:                    self.entry_win.attroff(curses.A_REVERSE)            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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久欧美一区二区| 亚洲夂夂婷婷色拍ww47| 亚洲激情av在线| 久久精品999| 91久久精品午夜一区二区| 精品福利av导航| 午夜电影网一区| 成人亚洲一区二区一| 91精品国产欧美一区二区| 日韩一区在线播放| 国产成人在线看| 26uuu亚洲综合色欧美| 日韩精品久久理论片| 91美女视频网站| 中文字幕av一区 二区| 精品午夜久久福利影院| 欧美精品一二三| 亚洲一区二区视频在线| gogogo免费视频观看亚洲一| 久久看人人爽人人| 精品无人码麻豆乱码1区2区| 日韩一区二区在线播放| 日韩成人伦理电影在线观看| 欧美色网站导航| 一区二区三区四区精品在线视频| 成人在线一区二区三区| 日本一区二区三区在线观看| 国产精品99久久久| 国产三级精品在线| 国产91精品精华液一区二区三区| 久久久久久免费| 国产精品一二三区在线| 国产偷v国产偷v亚洲高清| 国产一区二区网址| 国产午夜精品一区二区三区视频| 国产成人一区在线| 欧美高清在线一区| 91日韩在线专区| 一区二区三区视频在线看| 91国偷自产一区二区使用方法| 亚洲欧美一区二区三区极速播放 | 国产三级一区二区三区| 精品一区二区三区在线视频| 欧美精品一区二区三区很污很色的 | 蜜臀av一级做a爰片久久| 日韩一级高清毛片| 国产呦萝稀缺另类资源| 国产目拍亚洲精品99久久精品| eeuss鲁片一区二区三区在线看| 伊人色综合久久天天人手人婷| 精品视频资源站| 奇米色一区二区| 欧美国产一区二区在线观看| 91麻豆高清视频| 午夜激情综合网| 久久老女人爱爱| 在线免费观看日本欧美| 免费成人小视频| 亚洲国产高清不卡| 欧美色大人视频| 国产精品一区二区视频| 亚洲精选免费视频| 亚洲精品一区二区三区香蕉| eeuss鲁一区二区三区| 日韩成人精品在线| 国产精品麻豆一区二区 | 爽爽淫人综合网网站| 精品国产免费人成电影在线观看四季 | 日韩专区一卡二卡| 久久久不卡网国产精品二区| 91啦中文在线观看| 久久国产尿小便嘘嘘| 亚洲免费伊人电影| 精品99一区二区三区| 在线欧美日韩国产| 丁香桃色午夜亚洲一区二区三区| 一区二区三区av电影| 久久视频一区二区| 欧美日韩一区二区三区四区| 成熟亚洲日本毛茸茸凸凹| 午夜激情久久久| 中文字幕一区二区三区视频| 欧美tk丨vk视频| 精品视频一区二区不卡| 国产jizzjizz一区二区| 久久精品国产999大香线蕉| 亚洲美女免费在线| 国产精品久久久久久久久果冻传媒| 欧美日韩激情一区二区三区| aa级大片欧美| 国产成人一级电影| 国产综合久久久久久鬼色| 亚洲国产精品影院| 亚洲天堂精品视频| 国产亚洲精品aa午夜观看| 91精品国产色综合久久不卡电影| 色综合视频在线观看| 国产成人精品一区二区三区网站观看| 日本不卡1234视频| 亚洲国产乱码最新视频| 一区二区视频在线看| 国产精品成人免费精品自在线观看| 久久亚洲一区二区三区四区| 制服丝袜中文字幕一区| 欧美熟乱第一页| 在线国产电影不卡| 91国模大尺度私拍在线视频| 91在线高清观看| 成人激情动漫在线观看| 成人免费视频一区| 成人午夜av影视| 成人性视频免费网站| 成人免费毛片a| 成人一区二区三区中文字幕| 成人av第一页| 91精品福利在线| 色老汉av一区二区三区| 欧美专区日韩专区| 欧美美女黄视频| 日韩免费观看高清完整版| 欧美r级电影在线观看| 日韩亚洲国产中文字幕欧美| 91精品国产欧美一区二区成人| 3751色影院一区二区三区| 日韩欧美激情一区| 国产亚洲人成网站| 最近中文字幕一区二区三区| 一区二区在线电影| 日韩电影在线观看电影| 国产又粗又猛又爽又黄91精品| 国产福利不卡视频| 91蝌蚪porny九色| 欧美日韩视频在线第一区| 欧美一区二区三区免费视频| 久久综合久色欧美综合狠狠| 中文一区二区完整视频在线观看| 亚洲欧美一区二区在线观看| 亚洲高清免费在线| 狠狠v欧美v日韩v亚洲ⅴ| proumb性欧美在线观看| 欧美三级日韩三级国产三级| 精品久久久久香蕉网| 国产精品每日更新| 午夜婷婷国产麻豆精品| 国内外成人在线| 日本韩国欧美三级| 日韩美一区二区三区| 中文字幕中文字幕在线一区| 日韩av一级片| 成人激情动漫在线观看| 欧美精品一级二级| 国产精品久久二区二区| 日本美女一区二区三区视频| 成人一区二区三区视频在线观看| 欧美日韩一二三| 国产亚洲精久久久久久| 首页国产欧美久久| 成人激情动漫在线观看| 日韩午夜三级在线| 亚洲女子a中天字幕| 国产真实乱偷精品视频免| 色哟哟在线观看一区二区三区| 精品国产91亚洲一区二区三区婷婷| 亚洲欧美aⅴ...| 国产成人亚洲综合色影视| 91麻豆精品国产91久久久久| 中文字幕一区二区视频| 久久99国产精品免费网站| 欧美亚洲综合久久| 中文字幕欧美国产| 青青草精品视频| 欧美视频你懂的| 亚洲天堂2016| 国产v综合v亚洲欧| 精品国产免费视频| 日韩国产欧美视频| 日本高清成人免费播放| 久久精品亚洲乱码伦伦中文| 蜜臀av性久久久久蜜臀aⅴ流畅 | 一区二区三区.www| 国产不卡高清在线观看视频| 日韩欧美久久久| 免费观看成人av| 欧美一区日韩一区| 午夜精品久久久久久久久久| 色综合久久88色综合天天| 国产精品免费视频网站| 国产精品香蕉一区二区三区| 精品国产露脸精彩对白| 蜜臀av一区二区在线免费观看| 欧美午夜精品久久久久久孕妇| 中文字幕佐山爱一区二区免费| 国产69精品一区二区亚洲孕妇| 精品人在线二区三区| 免费成人性网站| 日韩一区二区电影| 久久99精品国产.久久久久| 日韩一级成人av| 久久99在线观看| 精品国产亚洲一区二区三区在线观看|