posts - 403, comments - 310, trackbacks - 0, articles - 7
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          不想一天到晚呆坐電腦前,灌灌水,聊聊天

          還是讀點村上的

          《挪威的森林》估計是因為太喜歡,帶到學校里了

          那就先重讀《國境以南,太陽以西》

          當時應該是一行推薦我看安妮的書,然后我看到99的書單上安妮推薦了這本書,于是我就沒買安妮的,買了這本 =_=

          從此就迷上村上的小說了。盡管這本和《挪威的森林》與村上其他作品的風格還是有一定出入的。

          posted @ 2008-02-11 23:47 ZelluX 閱讀(365) | 評論 (0)編輯 收藏

          發現自己對Python的語法的興趣遠比對使用Python本身的興趣濃厚得多
          為什么水木上的帖子每行末尾都是用空格填充的,每次轉載還要先放到vim里面處理一下。。。

          by ilovecpp

          讓Python支持true closure有多難?
          只需修改11行代碼。

          如果你不知道什么是true closure,這里簡單解釋一下。Python支持lexicalscope:

          >>> def add_n(n):
          ...     def f(m):
          ...             return n+m
          ...     return f
          >>> add_2 = add_n(2)
          >>> add_2(0)
          2
          >>> add_2(2)
          4

          f引用了外層函數add_n的局部變量n。有趣的是,f引用n的時候,add_n已經結束,n似乎不存在了。f所以能正常工作,是因為創建它的時候就把n作為f的上下文(closure)保存了下來,并不隨add_n結束而消失。
          但是,Python的lexical scope和Scheme/Smalltalk/Ruby還有一點區別:不能在內層函數中rebind外層函數的局部變量。
          >>> def f():
          ...     def g():
          ...             n=1
          ...     n=0
          ...     g()
          ...     return n
          ...
          >>> f()
          0

          這是因為Python沒有變量聲明, n=1 自動使n成為g的局部變量,也就無法rebind f中的n了。可以說Python的closure是只讀的。如果你聽到有人說"Python不支持true closure",就是指這個。其實,Python VM能夠支持true closure。因為,Python支持內層函數看見外層函數的name rebinding:

          >>> def f():
          ...     def g():
          ...             yield n
          ...             yield n
          ...     x = g()
          ...     n = 0
          ...     print x.next()
          ...     n = 1
          ...     print x.next()
          ...
          >>> f()
          0
          1

          對于Python的closure實現(flat closure),"外層函數rebind name"和"內層函數rebind name"其實沒有區別。我們知道用global關鍵字可以rebind module scopename。如果增加一個類似的outer關鍵字,就可以支持rebind outer scope name。真正的限制是Guido不愿意為支持true closure增加關鍵字。

          也可以不增加關鍵字,而是把global n的語義改為"如果outer scope定義了n,rebind outer scope n;否則rebind module scope n"。簡單起見,我沒有修改Python的built-in compiler,而是修改了compiler module(用Python實現的Python compiler)。你只需把下面這個patch打到compiler/symbols.py(Python 2.5.1)就可以體驗true closure了:

          C:\Python\Lib>diff -u compiler/symbols.py.orig compiler/symbols.py
          --- compiler/symbols.py.orig    Thu Aug 17 10:28:56 2006
          +++ compiler/symbols.py Mon Feb 11 12:03:01 2008
          @@ -21,6 +21,7 @@
                   self.params = {}
                   self.frees = {}
                   self.cells = {}
          +        self.outers = {}
                   self.children = []
                   # nested is true if the class could contain free variables,
                   # i.e. if it is nested within another function.
          @@ -54,8 +55,10 @@
                   if self.params.has_key(name):
                       raise SyntaxError, "%s in %s is global and parameter" % \
                             (name, self.name)
          -        self.globals[name] = 1
          -        self.module.add_def(name)
          +        if self.nested:
          +            self.outers[name] = 1
          +        else:
          +            self.globals[name] = 1

               def add_param(self, name):
                   name = self.mangle(name)
          @@ -90,6 +93,8 @@
                   """
                   if self.globals.has_key(name):
                       return SC_GLOBAL
          +        if self.outers.has_key(name):
          +            return SC_FREE
                   if self.cells.has_key(name):
                       return SC_CELL
                   if self.defs.has_key(name):
          @@ -107,6 +112,7 @@
                       return ()
                   free = {}
                   free.update(self.frees)
          +        free.update(self.outers)
                   for name in self.uses.keys():
                       if not (self.defs.has_key(name) or
                               self.globals.has_key(name)):
          @@ -134,6 +140,9 @@
                   free.
                   """
                   self.globals[name] = 1
          +        if self.outers.has_key(name):
          +            self.module.add_def(name)
          +            del self.outers[name]
                   if self.frees.has_key(name):
                       del self.frees[name]
                   for child in self.children:

          因為我們沒有修改built-in compiler,所以程序要寫在字符串里,用compiler.compile編譯,用exec執行:
          >>> from compiler import compile
          >>> s = '''
          ... def counter():
          ...     n = 0
          ...     def inc():
          ...             global n
          ...             n += 1
          ...     def dec():
          ...             global n
          ...             n -= 1
          ...     def get():
          ...             return n
          ...     return inc, dec, get
          ... '''
          >>> exec compile(s, '', 'exec')
          >>> inc, dec, get = counter()
          >>> get()
          0
          >>> inc()
          >>> get()
          1
          >>> dec()
          >>> get()
          0

          后記

          1 搞這個東西的緣起是Selfless Python(http://www.voidspace.org.uk/python/weblog/arch_d7_2006_12_16.shtml#e583)。很有趣的bytecode hack,給一個類中的所有函數補上self參數。既然PythonVM支持true closure,能不能用類似的手法讓Python支持true closure呢?不過很快就明白這個在bytecode層面不好弄,還是得修改編譯器。不過改起來還真是出乎意料地簡單。

          2 Guido早已明確表示不能改變global的語義(因為會影響現有代碼),所以這個只是玩玩而已,不用指望成為現實。當然你可以只發布bytecode,大概還能把反編譯器搞掛掉。:-)
          3 我可以理解Guido的決定。除非你之前一直在用Scheme,否則我覺得像上面counter例子那種一組共享狀態的函數還是寫成class為好,至少共享狀態是什么一目了然。Lexical scope太implicit,用在開頭add_n那種地方挺方便,再復雜就不好了。

          又:很抱歉"幕后的故事"拖了這么久。寫起來才發現自己還是不懂descriptor。
          不過我肯定不會讓它爛尾的。

           

          posted @ 2008-02-11 16:18 ZelluX 閱讀(815) | 評論 (0)編輯 收藏

          zz from 游俠
          http://game.ali213.net/viewthread.php?tid=1874905

          轉自巴哈姆特,原帖主clover0425

          原帖地址
          http://forum.gamer.com.tw/C.php?bsn=01223&snA=9101


          ==============(等級~等級)============================

          怪物(分類)等級+怪物(分類)等級=怪物(分類)等級

          合成結果如下:

          ==============(LV.1~LV.10)============================

          青蛙(生物)LV.1+蟾蜍(生物)LV.1=蟾蜍(生物)LV.1
          青蛙(生物)LV.1+刺胡蜂(生物)LV.3=蟾蜍(生物)LV.1
          青蛙(生物)LV.1+通臂猖猿(精怪)LV.4=青蛙(生物)LV.1

          草妖(精怪)LV.1+草妖(精怪)LV.1=泥童(活尸)LV.2

          泥童(活尸)LV.2 +草妖(精怪)LV.1=青蛙(生物)LV.1
          泥童(活尸)LV.2 +泥童(活尸)LV.2=草妖(精怪)LV.1

          蟾蜍(生物)LV.1+蟾蜍(生物)LV.1=蟾蜍(生物)LV.1
          蟾蜍(生物)LV.1+草妖(精怪)LV.1=蟾蜍(生物)LV.1
          蟾蜍(生物)LV.1+刺胡蜂(生物)LV.3=蟾蜍(生物)LV.1
          蟾蜍(生物)LV.1+通臂猖猿(精怪)LV.4=蟾蜍(生物)LV.1
          蟾蜍(生物)LV.1+長頸鬼(活尸)LV.5=毒蛇(生物)LV.2
          ★備注:魏國士兵無法收服,所以無法煉化。

          蝙蝠(生物) LV.1+蝙蝠(生物) LV.1=蟾蜍(生物)LV.1
          蝙蝠(生物) LV.1+蟾蜍(生物)LV.1=蟾蜍(生物)LV.1
          蝙蝠(生物) LV.1+毒蛇(生物)LV.2=蟾蜍(生物)LV.1
          蝙蝠(生物) LV.1+刺胡蜂(生物)LV.3=蟾蜍(生物)LV.1
          蝙蝠(生物) LV.1+通臂猖猿(精怪)LV.4=蟾蜍(生物)LV.1

          刺胡蜂(生物)LV.3+刺胡蜂(生物)LV.3=魏國亡兵(鬼魂)LV.7
          刺胡蜂(生物)LV.3+通臂猖猿(精怪)LV.4=魏國亡兵(鬼魂)LV.7

          毒蛇(生物)LV.2+蟾蜍(生物)LV.1=蟾蜍(生物)LV.1
          毒蛇(生物)LV.2+毒蛇(生物)LV.2=蟾蜍(生物)LV.1
          毒蛇(生物)LV.2+刺胡蜂(生物)LV.3=蟾蜍(生物)LV.1
          毒蛇(生物)LV.2+通臂猖猿(精怪)LV.4=蟾蜍(生物)LV.1

          蜘蛛(生物) LV.2+蝙蝠(生物) LV.1=蟾蜍(生物)LV.1
          蜘蛛(生物) LV.2+蜘蛛(生物) LV.2=魏國亡兵(鬼魂)LV.7
          蜘蛛(生物) LV.2+通臂猖猿(精怪)LV.4=魏國亡兵(鬼魂)LV.7
          蜘蛛(生物) LV.2+魏國亡兵(鬼魂)LV.7=青蛙(生物)LV.1

          狐精(妖靈) LV.2+狐精(妖靈)LV.2=蟾蜍(生物)LV.1
          狐精(妖靈) LV.2+魏國亡兵(鬼魂)LV.7=青蛙(生物)LV.1

          通臂猖猿(精怪)LV.4+泥童(生物)LV.2 =長頸鬼(活尸)LV.5
          通臂猖猿(精怪)LV.4+通臂猖猿(精怪)LV.4=魏國亡兵(鬼魂)LV.7

          魏國亡兵(鬼魂)LV.7+毒蛇(生物)LV.2=青蛙(生物)LV.1
          魏國亡兵(鬼魂)LV.7+通臂猖猿(精怪)LV.4=青蛙(生物)LV.1
          魏國亡兵(鬼魂)LV.7+魏國亡兵(鬼魂)LV.7=角鷹(生物)LV.10

          芙蕖精(仙靈)LV.10+污泥怪(活尸)LV.25=玄龜(神獸)LV.39
          芙蕖精(仙靈)LV.10+雨女(妖靈)LV.11=颙(妖靈)LV.21
          角鷹(生物)LV.10+角鷹(生物)LV.10=等活獄兵(?)LV.?

          獍(魔獸)LV.10+碧鬼魔(魔神)LV.22=娥仙(仙靈)LV.17

          ==============(LV.11~LV.20)============================

          雨女(妖靈)LV.11+雨女(妖靈)LV.11=赑屃(神獸)LV.30

          九曜神兵(天神)LV.13+角鷹(生物)LV.10=赑屃(神獸)LV.30

          娥仙(仙靈)LV.17+仙芝(仙靈)LV.14=蛟蝮魔(魔獸)LV.24

          髑髏(活尸)LV.18+仙芝(仙靈)LV.14=玄龜(神獸)LV.39

          無頭鬼(鬼魂)LV.19+鬼瞳(鬼魂)LV.22=馬面(魔神)LV.42

          ==============(LV.21~LV.30)============================

          颙(妖靈)LV.21+獍(魔獸)LV.10=牛頭(魔神)LV.42
          颙(妖靈)LV.21+白玉瓊漿(?)LV.30=赤焰仙子(仙靈)LV.31
          颙(妖靈)LV.21+鹿皮靴(?)LV.14=馬面(魔神)LV.42

          碧鬼魔(魔神)LV.22+羆(生物)LV.14=污泥怪(活尸)LV.25
          碧鬼魔(魔神)LV.22+碧鬼魔(魔神)LV.22=希夷(?)LV.28

          竦斯(妖靈)LV.23+蛟蝮魔(魔獸)LV.24=馬面(?)LV.42

          蛟蝮魔(魔獸)LV.24+藥草(?)LV.1=牛頭(魔神)LV.42
          博木妖(精怪)LV.25+博木妖(精怪)LV.25=陰顱(活尸)LV.36

          鎖爺(鬼魂)LV.26+鎖爺(鬼魂)LV.26=黑血巨蟒(生物)LV.36
          巨怪(魔獸)LV.26+蛟蝮魔(魔獸)LV.24=丹頂(仙靈)Lv.32

          化虎(?)LV.27+武虎虎王(?)LV.35=夜叉(?)LV.44

          魔劍客(妖靈)LV.29+化虎(妖靈)LV.27=英招(神獸)LV.42
          魔劍客(妖靈)LV.29+五方天兵(天神)LV.18=金線草妖(精怪)LV.30
          魔劍客(妖靈)LV.29+苞娘(精怪)lv.30=靈目鬼(鬼魂)lv.35
          魔劍客(妖靈)LV.29+食人妖花(精怪)lv.23=怨魂(鬼魂)lv.29
          魔劍客(妖靈)LV.29+赤焰仙子(仙靈)lv.31=山神(仙靈)lv.33
          魔劍客(妖靈)LV.29+蝶仙(仙靈)LV.32=晶硥(妖靈)LV.32

          ==============(LV.31~LV.40)============================

          赤焰仙子(仙靈)LV.31+赤焰仙子(仙靈)LV.31=虣虎王(?)LV.35
          赤焰仙子(仙靈)LV.31+硥(妖靈)LV.25=蝶仙(仙靈)LV.32

          蝶仙(仙靈)LV.32+怨魂(鬼魂)LV.27=鬼菇(精怪)LV..38
          蝶仙(仙靈)LV.32+鬼朣(鬼魂)LV..22=寒玉藤(精怪)LV..32

          陰顱(活尸)LV.36+黑血巨莽(生物)LV.36)=殍髏(活尸LV.40

          巨靈神將(天神)LV.38+巨?怪(魔獸)LV.20=青尾鳳友(生物)LV.50
          巨靈神將(天神)LV.38+苞娘(精怪)LV.30=女英(仙靈)LV.35
          巨靈神將(天神)LV.38+金線草妖(精怪)LV.30=娥皇(仙靈)LV.35
          巨靈神將(天神)LV.38+食人妖花(精怪)LV.23=鎮山元帥(仙靈)LV.34

          九天玄女(仙靈)LV.38+娥皇(仙靈)LV.35=炎羆獸(魔獸)LV.40
          九天玄女(仙靈)LV.38+山神(仙靈)LV.35=天火假猿(魔獸)LV.38
          九天玄女(仙靈)LV.38+食火蛛(妖靈)LV.36=朱[舌鳥](仙靈)LV.36
          黑繩獄卒(鬼魂)LV.38+苞娘(精怪)LV.30=枷爺(鬼魂)LV.40

          鴸(妖靈)LV.40+苞娘(精怪)LV.30=冥府鬼焰(鬼魂LV.40
          鴸(妖靈)LV.40+金線草妖(精怪)LV.30=吳兵亡靈(鬼魂)LV.42
          鴸(妖靈)LV.40+山神(仙靈)LV.35=朱[舌鳥](仙靈)LV.30

          ==============(LV.41~LV.50)============================

          牛頭(魔神)LV.42+鎮山元帥(?)LV.?=阿鼻獄使(鬼魂)LV.49

          英昭(神獸)LV.42+蛟腹魔(魔獸)LV.24=玄龜(神獸)LV.39

          夜叉(魔神)LV.44+蝶仙(仙靈)LV.32=阿鼻獄使(鬼魂)LV.49
          夜叉(魔神)LV.44+玄龜(天神)LV.39=戰死尸鬼(活尸)LV.45
          夜叉(魔神)LV.44+枷爺(鬼魂)LV.40=赤滕(妖靈)LV.47
          夜叉(魔神)LV.44+吳兵亡靈(鬼魂)LV.42=鬼魈(妖靈)LV.48
          夜叉(魔神)LV.44+殍髏(活尸)LV.42=蝮魔王(魔獸)LV.44

          諸懷(神獸)LV.45+蝮魔王(魔獸)LV.44=白虎(神獸)LV.52
          諸懷(神獸)LV.45+獨目鬼(魔獸)LV.46=青龍(神獸)LV.52
          諸懷(神獸)LV.45+吳兵亡靈(鬼魂)LV.42=上元夫人(仙靈)LV.52
          諸懷(神獸)LV.45+炎羆獸(魔獸)LV.40=開明獸(仙靈)LV.52

          雷電靈霸(魔獸)LV.50+開明獸(神獸)LV.52=麒麟(神獸)LV.55
          雷電靈霸(魔獸)LV.50+誅懷(神獸)LV.45=黑龍(神獸)LV.55
          雷電靈霸(魔獸)LV.50+黑龍(神獸)LV.55)=兕(魔獸)LV.58

          ==============(LV.51~LV.60)============================

          青龍(神獸)LV.52+黑龍(神獸)LV.55=奇[倉鳥](妖靈)LV.56
          青龍(神獸)LV.52+蛟腹魔(魔獸)LV.24=希有(神獸)LV.49
          青龍(神獸)LV.52+鬼火(鬼魂)LV.20=朱舌鳥(仙靈)LV.36

          上元夫人(仙靈)LV.52+騎督亡靈(鬼魂)LV.47=鬼薔(精怪)LV.56

          阿修羅(魔神)LV.55+夜叉(魔神)LV.44=托塔天王(天神)LV.58

          麒麟(神獸)LV.55+蛟腹魔(魔獸)LV.24=哮天犬(神獸)LV.50
          云生獸(神獸)LV.55+殍髏(活尸)LV.40=焰尾朱鳥(生物)LV.54
          云生獸(神獸)LV.55+蠱使(鬼魂)LV.45=鎮元大仙(仙靈)LV.52
          云生獸(神獸)LV.55+炎羆獸(魔獸)LV.40=黑龍(神獸)LV.55
          云生獸(神獸)LV.55+蝮魔王(魔獸)LV.44=犎魔元帥(魔獸)LV.55
          云生獸(神獸)LV.55+天火假元(魔獸)LV.38=雷電靈霸(魔獸)LV.50
          云生獸(神獸)LV.55+兕(魔獸)LV.58=龍王(神獸)LV.62

          托塔天王(天神)LV.58+阿修羅(魔神)LV.52=菩提祖師(天神)LV.62
          托塔天王(天神)LV.58+焰尾朱鳥(生物)LV.54)=云生獸(神獸)LV.55

          兕(魔獸)LV.58+開明獸(神獸)LV.52=鳳凰(神獸)LV.60

          posted @ 2008-02-11 12:24 ZelluX 閱讀(1852) | 評論 (0)編輯 收藏

          zz from 游俠
          http://game1.ali213.net/thread-1874977-1-1.html

          轉自巴哈姆特,原帖主fitbtm6810,修正部分錯字加重新排版。

          原帖地址
          http://forum.gamer.com.tw/C.php?bsn=01223&snA=9714
          http://forum.gamer.com.tw/C.php?bsn=01223&snA=9751

          ==========================================================

          武器:

          煉化規則:
          神獸+飾品 & 鬼魂+飾品 & 活尸+防具 & 奇物+防具 & 飾品+飾品 & 武器+防具 (出現武器或防具)

          劍:
          昆吾劍15級=泥童+沉勝衣
          雁翎刀20級=月隱服+振心散 & 赑屃+金牛角
          青釭劍26級=無法利用煉化出現
          龍鱗32級=玄雀+沉勝衣 & 金剛月牙+沉勝衣
          純鈞劍40級=無法利用煉化出現
          百辟48級=青龍+云隱戒指 & 神臂弓+九霄連擺甲
          封魔刀55級=純鉤劍+銀狐裘 & 百辟+神影游龍服

          刃:
          五毒刀13級=振心散+誡袍
          炎突18級=鐵甲+振心散
          星馳24級=無法利用煉化出現
          玄雀30級=雁翎刀+水鏡銀衫 & 火神弓+須彌琉璃甲
          九絕38級=無法利用煉化出現
          鬼眼46級=無法利用煉化出現
          翔風53級=百辟+九霄連擺甲 & 百辟+赤焰霓裳

          戟:
          玄鐵槍16級=無法利用煉化出現
          透甲槍21級=樊木+鐵甲 & 赤焰連環甲+抑神粉
          蛇矛27級=無法利用煉化出現
          鐵戟33級=龍鱗+天星甲 & 玄龜+明日香包
          百勝戟41級=玄雀+九霄連擺甲 & 金星白玉錘+水鏡銀衫
          競月勾49級=青龍+藍玉戒指 & 青龍+琥珀戒指 & 九絕+神影游龍服
          逐日戟56級=護法神杖+玄溟戰甲 & 振心粉+水鏡銀衫
          鎮魂神槍60級=封魔刀+銀狐裘

          杖:
          夜叉杵13級=等活獄兵+金牛角
          樊木18級=無法利用煉化出現
          天師誠24級=無法利用煉化出現
          金剛月牙30級=污泥怪+沉勝衣 & 火神弓+沉勝衣
          沖霄神杖38級=無法利用煉化出現
          太虛神杖46級=百戰戟+水鏡銀衫 & 九霄連擺甲+龍鱗
          無極53級=百戰戟+御靈圣環鎧
          護法神杖56級=封魔刀+神影游龍服 & 翔風+銀狐裘

          弓:
          桑弧弓14級=無法利用煉化出現
          火神弓19級=等活獄兵+神草結 & 振心散+天羽彩衣
          伏魔弓25級=無法利用煉化出現
          逐日弓31級=藍玉戒指+鬼瞳 & 透甲槍+沉勝衣
          神臂弓39級=金星白玉錘+天星甲 & 鐵戟+須彌琉璃甲
          剛侯弓47級=金剛月牙+神影游龍服 & 太虛神杖+水鏡銀衫

          斧:
          開明斧19級=無法利用煉化出現
          誅剌25級=沉勝衣+抑神粉
          金星白玉錘39級=逐日弓+水鏡銀衫
          狂章47級=無法利用煉化出現
          雷公震54級=無法利用煉化出現

          ==========================================================

          防具:

          煉化規則:
          天神+武器 & 精怪+靈藥 & 生物+靈藥 & 武器+足具 & 靈藥+靈藥 & 武器+防具 (出現武器或防具)

          武士:
          銑甲17級=藥草+返魂香
          赤焰連環甲21級=跌打傷藥+返魂香
          天星甲27級=白玉瓊漿+返魂香 & 雁翎刀+沉勝衣
          須彌琉璃甲33級=逐日弓+沉勝衣 & 金剛月牙+天星甲
          九霄連擺甲41級=龍鱗+赤焰霓裳 & 神臂弓+水鏡銀衫
          御靈圣環鎧49級=太虛神杖+九霄連擺甲 & 龍鱗+銀狐裘
          玄冥戰甲56級=無極+神影游龍服 & 翔風+御靈圣環鎧

          法師:
          天羽彩衣15級=解毒草+返魂香
          月隱服20級=消疲丸+返魂香
          沉勝衣26級=活絡散(靈仙酒)+返魂香 & 返魂香+返魂香
          水鏡銀衫32級=雁翎刀+須彌琉璃甲 & 白玉瓊漿+白玉瓊漿
          赤焰霓裳40級=龍鱗+水鏡銀衫 & 鐵戟+水鏡銀衫
          神影游龍服48級=百勝戟+九霄連擺甲 & 百勝戟+赤焰霓裳
          銀狐裘55級=神影游龍服+太虛神杖 & 百辟+攀云踏風鞋

          ==========================================================

          足具:

          煉化規則:
          神獸+防具 & 飾品+防具 & 鬼魂+防具 & 活尸+奇物 & 奇物+奇物 & 奇物+足具 (出現足具或奇物)

          鹿皮靴14級=鐵甲+金牛角
          馳云履19級=振心散+抑神粉
          鬼爪履25級=沉勝衣+神草結 & 沉勝衣+漢兵亡靈
          龍麟百足靴31級=赑屃+天星甲 & 水鏡銀衫+漢兵亡靈
          追風流光鞜39級=須彌琉璃甲+赑屃 & 九霄連擺甲+藍玉戒指
          攀云踏風鞋47級=玄龜+九霄連擺甲 & 玄龜+赤焰霓裳
          疾風鞮54級=諸懷+神影游龍服 & 云生獸+40級以上防具

          ==========================================================

          飾品:

          煉化規則:
          天神+靈藥 & 生物+足具 & 精怪+足具 & 武器+武器 & 靈藥+足具

          金牛角03級=草藥+布鞋
          防御手環03級=短刃+短刃
          防毒香包08級=跌打藥傷+布鞋
          驅邪香包08級=消疲丸+布鞋
          天仙符10級=返魂香+布鞋
          凰羽10級=活絡散+布鞋
          醒腦香包12級=九曜神兵+活絡散
          神草結15級=五方神兵+返魂香
          明目香包15級=五方神兵+活絡散
          照妖鏡18級=龍鱗+雁翎刀
          芭蕉扇18級=金剛月牙+雁翎刀
          太極護符18級=龍鱗+金星白玉錘
          鎮心煉18級=龍鱗+龍鱗
          萬寶節環20級=
          護身令牌20級=
          云隱戒指22級=金星白玉錘+金星白玉錘
          玄冥戒25級=
          龜蛇旗25級=
          藍玉戒指25級=
          琥珀戒指25級=
          天女絲巾28級=
          北斗掛日鏈30級=
          白玉龍紋佩35級=鎮魂神槍+護法神杖

          ==========================================================

          靈藥:

          煉化原則:
          神獸+奇物 & 活尸+飾品 & 鬼魂+奇物 & 防具+防具 & 奇物+飾品

          恢復生命:
          跌打傷藥15級=赤焰連環甲+鐵甲
          金創藥24級=抑神粉+玄龜
          天創藥32級=九霄連擺甲+九霄連擺甲(須彌琉璃甲)
          地脈血泉08級=赤焰連環甲+藤甲
          不死泉水18級=赑屃+振心散
          破元仙露26級=須彌琉璃甲+天星甲(水鏡銀衫)

          恢復體力:
          消疲丸10級=鎮心煉+長頸鬼
          活絡散20級=沉勝衣+沉勝衣
          活骨靈藥28級=九霄連擺甲+天星甲
          靈山雪參35級=

          恢復靈力:
          金蜂蜜10級=天羽彩衣+天羽彩衣
          靈仙酒20級=天星甲+天星甲
          蟠桃28級=水鏡銀衫+赤焰連環甲
          歸元花露水35級=赤焰霓裳+赤焰霓裳

          恢復生命&體力&靈力:
          九命貓腦漿40級=

          狀態恢復:
          返思鈴01級=藤甲+護身短甲
          絕情膏12級=鐵甲+鐵甲
          潤喉丸06級=護身短甲+護身短甲
          龍爪花15級=赤焰連環甲+赤焰連環甲
          目藥粉06級=誡袍+誡袍
          溶石魔羽15級=天星甲+鐵甲
          返魂香25級=九霄連擺甲+赤焰連環甲
          白玉瓊漿30級=
          輪回盤40級=

          ==========================================================

          奇物:

          煉化原則:
          天神+足具 & 武器+生物 & 足具+足具 & 武器+精怪 & 武器+靈藥 & 足具+奇物

          土地神符8級=草藥+銅劍
          誘敵女娃8級=跌打傷藥+銅劍
          振心散15級=消疲丸+銅劍
          抑神粉15級=活絡散(返魂香)+昆吾劍
          神秘果60級=無法煉化
          雪肌冰飽60級=無法煉化

          posted @ 2008-02-11 12:23 ZelluX 閱讀(3171) | 評論 (0)編輯 收藏

          新絕代雙驕的插曲,當時蠻有感覺的,突然想起來我還沒聽過完整的。
          http://www.whjsr.com/dc.mp3

          我的雙腳陷進愛中
          等了已好久好久
          你的手從指間經過
          只能碰卻不能握
          心里好多話對你說
          你卻看著我沉默
          這樣的相愛那兒有錯
          連云也難說服我
          我不是個稻草人
          不能動不能說
          已把愛緊緊綁心中
          我不是個稻草人
          沒人愛沒人懂
          再難再瘋我要結果
          我不是個稻草人
          看天亮看日落
          就等你給我一雙手
          我不是個稻草人
          不做夢不還手
          別用淚水逼我放手

          就算全界都笑我
          愛個人誰敢說錯
          就算全世界都怪我
          我只要你跟我走

          posted @ 2008-02-10 21:32 ZelluX 閱讀(357) | 評論 (1)編輯 收藏

          借用里面的話來說,就是
          連年動眾,未能成功——蓋應變、將略,非其所長!

          posted @ 2008-02-10 21:28 ZelluX 閱讀(1644) | 評論 (3)編輯 收藏

               摘要: /proc文件系統不是直接從內核的存儲區中讀寫數據,二是通過回調函數實現文件讀寫的。struct proc_dir_entry有一對讀寫操作函數指針read_proc_t, write_proc_t。 一個編寫內核模塊操作proc文件系統的例子,書上的源程序是在2.4.18下跑起來的,改了三個地方在2.6.23下成功運行。當然Makefile也按照2.6中make modules的方式寫了。 ...  閱讀全文

          posted @ 2008-02-10 18:53 ZelluX 閱讀(915) | 評論 (0)編輯 收藏

           

          作者:晏渭川
          隨著Linux2.6的發布,由于2.6內核做了新的改動,各個設備的驅動程序在不同程度上要進行改寫。為了方便各位Linux愛好者我把自己整理的這分 文檔share出來。該文當列舉了2.6內核同以前版本的絕大多數變化,可惜的是由于時間和精力有限沒有詳細列出各個函數的用法。

          1、 使用新的入口
          必須包含 <linux/init.h>
          module_init(your_init_func);
          module_exit(your_exit_func);
          老版本:int init_module(void);
          void cleanup_module(voi);
          2.4中兩種都可以用,對如后面的入口函數不必要顯示包含任何頭文件。

          2、 GPL
          MODULE_LICENSE("Dual BSD/GPL");
          老版本:MODULE_LICENSE("GPL");

          3、 模塊參數
          必須顯式包含<linux/moduleparam.h>
          module_param(name, type, perm);
          module_param_named(name, value, type, perm);
          參數定義
          module_param_string(name, string, len, perm);
          module_param_array(name, type, num, perm);
          老版本:MODULE_PARM(variable,type);
          MODULE_PARM_DESC(variable,type);

          4、 模塊別名
          MODULE_ALIAS("alias-name");
          這是新增的,在老版本中需在/etc/modules.conf配置,現在在代碼中就可以實現。

          5、 模塊計數
          int try_module_get(&module);
          module_put();
          老版本:MOD_INC_USE_COUNT 和 MOD_DEC_USE_COUNT

          http://www.fsl.cs.sunysb.edu/~sean/parser.cgi?modules

          In 2.4 modules, the MOD_INC_USE_COUNT macro is used to prevent unloading of the module while there is an open file. The 2.6 kernel, however, knows not to unload a module that owns a character device that's currently open.
          However, this requires that the module be explicit in specifying ownership of character devices, using the THIS_MODULE macro.

          You also have to take out all calls to MOD_INC_USE_COUNT and MOD_DEC_USE_COUNT.
                 
              static struct file_operations fops =
          {
                   .owner = THIS_MODULE,
                   .read = device_read,
                   .write = device_write,
                   .open = device_open,
                   .release = device_release
          }    
                 

          The 2.6 kernel considers modules that use the deprecated facility to be unsafe, and does not permit their unloading, even with rmmod -f.

          2.6,2.5的kbuild不需要到處加上MOD_INC_USE_COUNT來消除模塊卸載競爭(module unload race)

          6、 符號導出
          只有顯示的導出符號才能被其他模塊使用,默認不導出所有的符號,不必使用EXPORT_NO_SYMBOLS
          老板本:默認導出所有的符號,除非使用EXPORT_NO_SYMBOLS

          7、 內核版本檢查
          需要在多個文件中包含<linux/module.h>時,不必定義__NO_VERSION__
          老版本:在多個文件中包含<linux/module.h>時,除在主文件外的其他文件中必須定義__NO_VERSION__,防止版本重復定義。

          8、 設備號
          kdev_t被廢除不可用,新的dev_t拓展到了32位,12位主設備號,20位次設備號。
          unsigned int iminor(struct inode *inode);
          unsigned int imajor(struct inode *inode);
          老版本:8位主設備號,8位次設備號
          int MAJOR(kdev_t dev);
          int MINOR(kdev_t dev);

          9、 內存分配頭文件變更
          所有的內存分配函數包含在頭文件<linux/slab.h>,而原來的<linux/malloc.h>不存在
          老版本:內存分配函數包含在頭文件<linux/malloc.h>

          10、 結構體的初試化
          gcc開始采用ANSI C的struct結構體的初始化形式:
          static struct some_structure = {
          .field1 = value,
          .field2 = value,
          ..
          };
          老版本:非標準的初試化形式
          static struct some_structure = {
          field1: value,
          field2: value,
          ..
          };

          11、 用戶模式幫助器
          int call_usermodehelper(char *path, char **argv, char **envp, int wait);
          新增wait參數

          12、 request_module()
          request_module("foo-device-%d", number);
          老版本:
          char module_name[32];
          printf(module_name, "foo-device-%d", number);
          request_module(module_name);

          13、 dev_t引發的字符設備的變化
          1、取主次設備號為
          unsigned iminor(struct inode *inode);
          unsigned imajor(struct inode *inode);
          2、老的register_chrdev()用法沒變,保持向后兼容,但不能訪問設備號大于256的設備。
          3、新的接口為
          a)注冊字符設備范圍
          int register_chrdev_region(dev_t from, unsigned count, char *name);
          b)動態申請主設備號
          int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, char *name);
          看了這兩個函數郁悶吧^_^!怎么和file_operations結構聯系起來啊?別急!
          c)包含 <linux/cdev.h>,利用struct cdev和file_operations連接
          struct cdev *cdev_alloc(void);
          void cdev_init(struct cdev *cdev, struct file_operations *fops);
          int cdev_add(struct cdev *cdev, dev_t dev, unsigned count);
          (分別為,申請cdev結構,和fops連接,將設備加入到系統中!好復雜啊!)
          d)void cdev_del(struct cdev *cdev);
          只有在cdev_add執行成功才可運行。
          e)輔助函數
          kobject_put(&cdev->kobj);
          struct kobject *cdev_get(struct cdev *cdev);
          void cdev_put(struct cdev *cdev);
          這一部分變化和新增的/sys/dev有一定的關聯。

          14、 新增對/proc的訪問操作
          <linux/seq_file.h>
          以前的/proc中只能得到string, seq_file操作能得到如long等多種數據。
          相關函數:
          static struct seq_operations 必須實現這個類似file_operations得數據中得各個成員函數。
          seq_printf();
          int seq_putc(struct seq_file *m, char c);
          int seq_puts(struct seq_file *m, const char *s);
          int seq_escape(struct seq_file *m, const char *s, const char *esc);
          int seq_path(struct seq_file *m, struct vfsmount *mnt,
          struct dentry *dentry, char *esc);
          seq_open(file, &ct_seq_ops);
          等等

          15、 底層內存分配
          1、<linux/malloc.h>頭文件改為<linux/slab.h>
          2、分配標志GFP_BUFFER被取消,取而代之的是GFP_NOIO 和 GFP_NOFS
          3、新增__GFP_REPEAT,__GFP_NOFAIL,__GFP_NORETRY分配標志
          4、頁面分配函數alloc_pages(),get_free_page()被包含在<linux/gfp.h>中
          5、對NUMA系統新增了幾個函數:
          a) struct page *alloc_pages_node(int node_id, unsigned int gfp_mask, unsigned int order);
          b) void free_hot_page(struct page *page);
          c) void free_cold_page(struct page *page);
          6、 新增Memory pools
          <linux/mempool.h>
          mempool_t *mempool_create(int min_nr, mempool_alloc_t *alloc_fn, mempool_free_t *free_fn, void *pool_data);
          void *mempool_alloc(mempool_t *pool, int gfp_mask);
          void mempool_free(void *element, mempool_t *pool);
          int mempool_resize(mempool_t *pool, int new_min_nr, int gfp_mask);

          16、 per-CPU變量
          get_cpu_var();
          put_cpu_var();
          void *alloc_percpu(type);
          void free_percpu(const void *);
          per_cpu_ptr(void *ptr, int cpu)
          get_cpu_ptr(ptr)
          put_cpu_ptr(ptr)
          老版本使用
          DEFINE_PER_CPU(type, name);
          EXPORT_PER_CPU_SYMBOL(name);
          EXPORT_PER_CPU_SYMBOL_GPL(name);
          DECLARE_PER_CPU(type, name);
          DEFINE_PER_CPU(int, mypcint);
          2.6內核采用了可剝奪得調度方式這些宏都不安全。

          17、 內核時間變化
          1、現在的各個平臺的HZ為
          Alpha: 1024/1200; ARM: 100/128/200/1000; CRIS: 100; i386: 1000; IA-64: 1024; M68K: 100; M68K-nommu: 50-1000; MIPS: 100/128/1000; MIPS64: 100; PA-RISC: 100/1000; PowerPC32: 100; PowerPC64: 1000; S/390: 100; SPARC32: 100; SPARC64: 100; SuperH: 100/1000; UML: 100; v850: 24-100; x86-64: 1000.
          2、由于HZ的變化,原來的jiffies計數器很快就溢出了,引入了新的計數器jiffies_64
          3、#include <linux/jiffies.h>
          u64 my_time = get_jiffies_64();
          4、新的時間結構增加了納秒成員變量
          struct timespec current_kernel_time(void);
          5、他的timer函數沒變,新增
          void add_timer_on(struct timer_list *timer, int cpu);
          6、新增納秒級延時函數
          ndelay();
          7、POSIX clocks 參考kernel/posix-timers.c

          18、 工作隊列(workqueue)
          1、任務隊列(task queue )接口函數都被取消,新增了workqueue接口函數
          struct workqueue_struct *create_workqueue(const char *name);
          DECLARE_WORK(name, void (*function)(void *), void *data);
          INIT_WORK(struct work_struct *work,
          void (*function)(void *), void *data);
          PREPARE_WORK(struct work_struct *work,
          void (*function)(void *), void *data);
          2、申明struct work_struct結構
          int queue_work(struct workqueue_struct *queue, struct work_struct *work);
          int queue_delayed_work(struct workqueue_struct *queue, struct work_struct *work,
          unsigned long delay);
          int cancel_delayed_work(struct work_struct *work);
          void flush_workqueue(struct workqueue_struct *queue);
          void destroy_workqueue(struct workqueue_struct *queue);
          int schedule_work(struct work_struct *work);
          int schedule_delayed_work(struct work_struct *work, unsigned long delay);

          19、 新增創建VFS的"libfs"
          libfs給創建一個新的文件系統提供了大量的API.
          主要是對struct file_system_type的實現。
          參考源代碼:
          drivers/hotplug/pci_hotplug_core.c
          drivers/usb/core/inode.c
          drivers/oprofile/oprofilefs.c
          fs/ramfs/inode.c
          fs/nfsd/nfsctl.c (simple_fill_super() example)

          20、 DMA的變化
          未變化的有:
          void *pci_alloc_consistent(struct pci_dev *dev, size_t size, dma_addr_t *dma_handle);
          void pci_free_consistent(struct pci_dev *dev, size_t size, void *cpu_addr, dma_addr_t dma_handle);
          變化的有:
          1、 void *dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, int flag);
          void dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, dma_addr_t dma_handle);
          2、列舉了映射方向:
          enum dma_data_direction {
          DMA_BIDIRECTIONAL = 0,
          DMA_TO_DEVICE = 1,
          DMA_FROM_DEVICE = 2,
          DMA_NONE = 3,
          };
          3、單映射
          dma_addr_t dma_map_single(struct device *dev, void *addr, size_t size, enum dma_data_direction direction);
          void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, enum dma_data_direction direction);
          4、頁面映射
          dma_addr_t dma_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction direction);
          void dma_unmap_page(struct device *dev, dma_addr_t dma_addr, size_t size, enum dma_data_direction direction);
          5、有關scatter/gather的函數:
          int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction direction);
          void dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries, enum dma_data_direction direction);
          6、非一致性映射(Noncoherent DMA mappings)
          void *dma_alloc_noncoherent(struct device *dev, size_t size, dma_addr_t *dma_handle, int flag);
          void dma_sync_single_range(struct device *dev, dma_addr_t dma_handle, unsigned long offset, size_t size,
          enum dma_data_direction direction);
          void dma_free_noncoherent(struct device *dev, size_t size, void *cpu_addr, dma_addr_t dma_handle);
          7、DAC (double address cycle)
          int pci_dac_set_dma_mask(struct pci_dev *dev, u64 mask);
          void pci_dac_dma_sync_single(struct pci_dev *dev, dma64_addr_t dma_addr, size_t len, int direction);

          21、 互斥
          新增seqlock主要用于:
          1、少量的數據保護
          2、數據比較簡單(沒有指針),并且使用頻率很高
          3、對不產生任何副作用的數據的訪問
          4、訪問時寫者不被餓死
          <linux/seqlock.h>
          初始化
          seqlock_t lock1 = SEQLOCK_UNLOCKED;
          或seqlock_t lock2; seqlock_init(&lock2);
          void write_seqlock(seqlock_t *sl);
          void write_sequnlock(seqlock_t *sl);
          int write_tryseqlock(seqlock_t *sl);
          void write_seqlock_irqsave(seqlock_t *sl, long flags);
          void write_sequnlock_irqrestore(seqlock_t *sl, long flags);
          void write_seqlock_irq(seqlock_t *sl);
          void write_sequnlock_irq(seqlock_t *sl);
          void write_seqlock_bh(seqlock_t *sl);
          void write_sequnlock_bh(seqlock_t *sl);
          unsigned int read_seqbegin(seqlock_t *sl);
          int read_seqretry(seqlock_t *sl, unsigned int iv);
          unsigned int read_seqbegin_irqsave(seqlock_t *sl, long flags);
          int read_seqretry_irqrestore(seqlock_t *sl, unsigned int iv, long flags);

          22、 內核可剝奪
          <linux/preempt.h>
          preempt_disable();
          preempt_enable_no_resched();
          preempt_enable_noresched();
          preempt_check_resched();

          23、 眠和喚醒
          1、原來的函數可用,新增下列函數:
          prepare_to_wait_exclusive();
          prepare_to_wait();
          2、等待隊列的變化
          typedef int (*wait_queue_func_t)(wait_queue_t *wait, unsigned mode, int sync);
          void init_waitqueue_func_entry(wait_queue_t *queue, wait_queue_func_t func);

          24、 新增完成事件(completion events)
          <linux/completion.h>
          init_completion(&my_comp);
          void wait_for_completion(struct completion *comp);
          void complete(struct completion *comp);
          void complete_all(struct completion *comp);

          25、 RCU(Read-copy-update)
          rcu_read_lock();
          void call_rcu(struct rcu_head *head, void (*func)(void *arg),
          void *arg);

          26、 中斷處理
          1、中斷處理有返回值了。
          IRQ_RETVAL(handled);
          2、cli(), sti(), save_flags(), 和 restore_flags()不再有效,應該使用local_save
          _flags() 或local_irq_disable()。
          3、synchronize_irq()函數有改動
          4、新增int can_request_irq(unsigned int irq, unsigned long flags);
          5、 request_irq() 和free_irq() 從 <linux/sched.h>改到了 <linux/interrupt.h>

          27、 異步I/O(AIO)
          <linux/aio.h>
          ssize_t (*aio_read) (struct kiocb *iocb, char __user *buffer, size_t count, loff_t pos);
          ssize_t (*aio_write) (struct kiocb *iocb, const char __user *buffer, size_t count, loff_t pos);
          int (*aio_fsync) (struct kiocb *, int datasync);
          新增到了file_operation結構中。
          is_sync_kiocb(struct kiocb *iocb);
          int aio_complete(struct kiocb *iocb, long res, long res2);

          28、 網絡驅動
          1、struct net_device *alloc_netdev(int sizeof_priv, const char *name, void (*setup)(struct net_device *));
          struct net_device *alloc_etherdev(int sizeof_priv);
          2、新增NAPI(New API)
          void netif_rx_schedule(struct net_device *dev);
          void netif_rx_complete(struct net_device *dev);
          int netif_rx_ni(struct sk_buff *skb);
          (老版本為netif_rx())

          29、 USB驅動
          老版本struct usb_driver取消了,新的結構體為
          struct usb_class_driver {
          char *name;
          struct file_operations *fops;
          mode_t mode;
          int minor_base;
          };
          int usb_submit_urb(struct urb *urb, int mem_flags);
          int (*probe) (struct usb_interface *intf,
          const struct usb_device_id *id);

          30、 block I/O 層
          這一部分做的改動最大。不祥敘。

          31、 mmap()
          int remap_page_range(struct vm_area_struct *vma, unsigned long from, unsigned long to, unsigned long size, pgprot_t prot);
          int io_remap_page_range(struct vm_area_struct *vma, unsigned long from, unsigned long to, unsigned long size, pgprot_t prot);
          struct page *(*nopage)(struct vm_area_struct *area, unsigned long address, int *type);
          int (*populate)(struct vm_area_struct *area, unsigned long address, unsigned long len, pgprot_t prot, unsigned long pgoff, int nonblock);
          int install_page(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long addr, struct page *page, pgprot_t prot);
          struct page *vmalloc_to_page(void *address);

          32、 零拷貝塊I/O(Zero-copy block I/O)
          struct bio *bio_map_user(struct block_device *bdev, unsigned long uaddr, unsigned int len, int write_to_vm);
          void bio_unmap_user(struct bio *bio, int write_to_vm);
          int get_user_pages(struct task_struct *task, struct mm_struct *mm, unsigned long start, int len, int write, int force, struct page **pages, struct vm_area_struct **vmas);

          33、 高端內存操作kmaps
          void *kmap_atomic(struct page *page, enum km_type type);
          void kunmap_atomic(void *address, enum km_type type);
          struct page *kmap_atomic_to_page(void *address);
          老版本:kmap() 和 kunmap()。

          34、 驅動模型
          主要用于設備管理。
          1、 sysfs
          2、 Kobjects

          推薦文章:
          http:/www-900.ibm.com/developerWorks/cn/linux/kernel/l-kernel26/index.shtml
          http:/www-900.ibm.com/developerWorks/cn/linux/l-inside/index.shtml

          2.6里不需要再定義“__KERNEL__”和“MODULE”了。
          用下面的Makefile文件編譯:

          代碼:

              obj-m   := hello.o

              KDIR   := /lib/modules/$(shell uname -r)/build
              PWD      := $(shell pwd)
              default:
                        $(MAKE) -C $(KDIR) M=$(PWD) modules

          posted @ 2008-02-10 17:00 ZelluX 閱讀(1764) | 評論 (1)編輯 收藏

          4.2. Data Structures

          The GPU Memory Model
          通常使用二維的texture保存,一是因為一維texture能存放的東西很少,二是因為現在的GPU很難高效地寫入一列3維texture。
          Iteration
          stream編程模型包含了一種隱式的流的并行遍歷。????
          Generalized Arrays via Address Translation
          在GPGPU編程中主要使用的數據結構是隨機訪問的多位容器,包括稀疏/稠密數組等。每個結構定義了一個虛擬域virual grid domain和一個物理域physical grid domaiin,以及之間相互轉換的address translator。

          4.2.1. Dense Arrays
          多維數組通常先映射到一維,然后再到二維。
          4.2.2. Sparse Arrays
          根據非零元素的位置和數量是否變化分兩種,靜態和動態。
          4.2.3. Adaptive Structures

          posted @ 2008-02-10 16:13 ZelluX 閱讀(371) | 評論 (0)編輯 收藏

          搗鼓了半天,硬是沒用gcc成功編譯。還是用make modules算了。
          2.6內核編譯系統提供了一種不同的寫法。
          這里obj-m是樹根,hello-objs是hello的兩個結點。

          ifneq ($(KERNELRELEASE),)
                  obj-m :
          = hello.o
                  hello-objs :
          = start.o stop.o
          else
                  KERNELDIR ?
          = /lib/modules/$(shell uname -r)/build
                  PWD  :
          = $(shell pwd)

          default:
                  $(MAKE) -C $(KERNELDIR) M
          =$(PWD) modules

          endif

          posted @ 2008-02-10 12:34 ZelluX 閱讀(575) | 評論 (1)編輯 收藏

          僅列出標題
          共39頁: First 上一頁 5 6 7 8 9 10 11 12 13 下一頁 Last 
          主站蜘蛛池模板: 科尔| 凌源市| 璧山县| 祁东县| 西城区| 澳门| 丽水市| 永登县| 江津市| 东海县| 云和县| 苗栗市| 昌乐县| 伊春市| 共和县| 湖北省| 崇义县| 雷山县| 嘉荫县| 云南省| 南和县| 台州市| 大渡口区| 界首市| 安仁县| 鹤庆县| 乌鲁木齐市| 方城县| 荆州市| 岑溪市| 岳普湖县| 成安县| 深州市| 河东区| 清涧县| 湄潭县| 当涂县| 呼和浩特市| 景谷| 合山市| 永城市|