亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
亚洲高清免费观看高清完整版在线观看| 日韩欧美成人午夜| 国产sm精品调教视频网站| 裸体在线国模精品偷拍| 一区二区三区色| 亚洲激情五月婷婷| 一区二区三区成人在线视频| 亚洲狠狠爱一区二区三区| 亚洲综合色自拍一区| 亚洲一区二区精品久久av| 天天影视涩香欲综合网| 日本中文字幕不卡| 精品午夜一区二区三区在线观看| 国产一区二区三区在线观看免费视频 | 久久人人超碰精品| 国产人久久人人人人爽| 综合久久久久综合| 午夜日韩在线观看| 国产综合成人久久大片91| 激情综合网激情| 成人av先锋影音| 欧美精品一二三| 精品国产百合女同互慰| 国产欧美一区二区精品忘忧草| 国产欧美日韩另类一区| 亚洲一区二区三区不卡国产欧美| 日韩和欧美的一区| 国产麻豆欧美日韩一区| 91麻豆自制传媒国产之光| 在线观看视频一区二区欧美日韩| 91精品午夜视频| 国产日本亚洲高清| 一区二区三区91| 国产一区二区免费看| 色婷婷激情综合| 精品少妇一区二区三区在线播放| 国产精品另类一区| 天天免费综合色| 国产99久久久久| 69成人精品免费视频| 中文字幕+乱码+中文字幕一区| 亚洲伊人色欲综合网| 国产精品白丝av| 欧美日韩高清影院| 国产精品久久久久久久久图文区 | 国产成人在线视频播放| 成人免费视频免费观看| 欧美人妇做爰xxxⅹ性高电影| 国产无一区二区| 午夜精品在线视频一区| 99久久精品一区二区| wwwwxxxxx欧美| 亚洲香蕉伊在人在线观| 成人av影院在线| 日韩精品一区在线观看| 午夜精品久久久| 色综合天天综合狠狠| 久久久av毛片精品| 久久精品国产久精国产爱| 在线视频一区二区免费| 成人免费在线播放视频| 国产在线精品一区二区| 日韩视频一区二区在线观看| 亚洲综合一区二区三区| 91污在线观看| 中文字幕在线不卡一区| 成人免费视频网站在线观看| 2020国产成人综合网| 日韩中文字幕区一区有砖一区| 一本久久a久久免费精品不卡| 欧美成人欧美edvon| 裸体一区二区三区| 欧美成人艳星乳罩| 久久97超碰色| wwwwxxxxx欧美| 国产精品亚洲一区二区三区妖精 | 亚洲天堂福利av| 93久久精品日日躁夜夜躁欧美| 日韩欧美高清在线| 久久丁香综合五月国产三级网站| 欧美日韩一区二区三区四区| 亚洲欧美电影一区二区| 色综合天天综合狠狠| 亚洲国产综合视频在线观看| 欧美午夜片在线看| 亚洲一区二区视频| 欧美日韩不卡一区二区| 另类小说欧美激情| 亚洲影院在线观看| 91精品国产综合久久久久久漫画| 奇米精品一区二区三区在线观看 | 色网站国产精品| 亚洲在线视频一区| 日韩亚洲欧美高清| 国产成人av电影在线| 亚洲欧美国产三级| 日韩午夜在线影院| jlzzjlzz亚洲女人18| 亚洲综合在线电影| 日韩欧美一区在线| 成人av网站在线观看免费| 一区二区三区精品视频| 欧美一级日韩不卡播放免费| 国产伦精品一区二区三区在线观看| 国产欧美日韩视频在线观看| 在线免费观看视频一区| 精品一区二区在线免费观看| 中文字幕第一页久久| 欧美美女网站色| 国产v综合v亚洲欧| 亚洲综合一区二区三区| 精品福利视频一区二区三区| 色综合婷婷久久| 日韩成人一级大片| 国产精品国产三级国产aⅴ入口| 欧美日韩一卡二卡三卡 | 亚洲午夜精品久久久久久久久| 制服丝袜成人动漫| 成人高清视频免费观看| 亚洲bt欧美bt精品| 欧美极品少妇xxxxⅹ高跟鞋| 麻豆91在线播放免费| 自拍偷拍亚洲综合| 久久在线观看免费| 欧美一区二区在线视频| 大尺度一区二区| 喷水一区二区三区| 亚洲精品国产精品乱码不99| 久久久高清一区二区三区| 欧美精品日日鲁夜夜添| 成人av免费观看| 国产一区二区三区四区在线观看| 午夜视频久久久久久| 亚洲免费观看高清完整版在线观看| 亚洲另类一区二区| 欧美精彩视频一区二区三区| 日韩你懂的在线播放| 欧美日韩一区二区在线观看视频| www.一区二区| 国产白丝网站精品污在线入口| 免费黄网站欧美| 丝瓜av网站精品一区二区| 亚洲精品水蜜桃| 日本一区二区综合亚洲| 久久久蜜臀国产一区二区| 日韩欧美在线观看一区二区三区| 欧美日韩三级一区二区| 欧美少妇一区二区| 欧美性猛片aaaaaaa做受| 色婷婷精品久久二区二区蜜臀av| 北条麻妃一区二区三区| 成人18精品视频| 不卡一二三区首页| 91同城在线观看| av一本久道久久综合久久鬼色| 国产91色综合久久免费分享| 国产精品91一区二区| 国产成人精品综合在线观看 | 久久精品国产亚洲5555| 美女脱光内衣内裤视频久久网站| 日本不卡一区二区| 九色综合狠狠综合久久| 美女www一区二区| 国产又黄又大久久| 欧美久久久久免费| 日韩欧美专区在线| 久久久99免费| 亚洲精品中文字幕乱码三区 | 久久久亚洲精品石原莉奈| 久久久久久久久97黄色工厂| 国产精品午夜免费| 亚洲美女免费视频| 调教+趴+乳夹+国产+精品| 免费高清成人在线| 国产成人精品免费在线| 91麻豆精品在线观看| 欧美蜜桃一区二区三区| 精品久久久久99| 亚洲视频一二三| 午夜精品久久久久久久久久| 蜜桃一区二区三区在线观看| 国产老肥熟一区二区三区| 91丨porny丨户外露出| 3d动漫精品啪啪| 久久理论电影网| 洋洋成人永久网站入口| 麻豆一区二区99久久久久| 国产伦精品一区二区三区免费迷| www.亚洲激情.com| 欧美日韩成人一区二区| 国产欧美精品区一区二区三区| 一区二区三区视频在线观看| 久久69国产一区二区蜜臀| 91色在线porny| 欧美成va人片在线观看| 亚洲日本一区二区| 久久成人免费日本黄色| 欧美伊人精品成人久久综合97| 精品日韩av一区二区| 一区二区三区免费看视频|