|<< 2010.10/1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 >>|

MAN HIMAZINE INTERFACE 4.0

この「にっき」には暴力シーンやグロテスクな表現が含まれています。

(2010.10.26)

$ NYAOS 3.1.1_0 をリリースしました [Delicious] [Livedoor Clip] [Add this entry to hatena bookmark]

  • 3.1.1_0 (2010/10/24)
    • nyaos.filter3.xxxxx を実装。
    • No Such file or directory の前にファイル名を表示するようにした。

以下、nyaos_ja.txt からの引用です。

nyaos.filter3.xxxxx (xxxxx は任意) という関数を定義しておくと、外部コマンド を呼ぶシステムコール直前に、呼び出しパラメータを加工することができます。

nyaos.filter3.xxxxx はコマンド名とフルコマンドラインの二つをパラメータとして 受け取ります。これを加工して、戻り値として二つを返すことでシステムコール (Windows だと CreateProcess、OS/2 だとDosExecPgm)のパラメータを差し替えるこ とができます。(戻り値が二個無い場合は、差し替えは行われません)

以下は、#! (shebang) を実現するための定義例です。

function drop_first_token( s )
    for i=1,string.len(s) do
        if string.sub(s,i,i) == ' ' then
            return string.sub(s,i)
        end
    end
    return ''
end

function nyaos.filter3.shebang( name , param )
    local suffix = string.lower( string.sub( name , #name - 3 ) )
    if suffix ~= '.exe' and suffix ~= '.com' then
        local fd=io.open( name , 'r' )
        local line=fd:read()
        fd:close()
        if string.sub(line,1,2)=='#!' then
            local interpretor = string.sub(line,3)
            local new_param = interpretor .. ' ' .. name .. ' ' .. drop_first_token( param )
            return interpretor , new_param
        end
    end
end

上の例だと、次のようなプログラム(hoge)を「Perl ./hoge」ではなく「./hoge」で実行することができます。

#!C:\Perl\bin\perl.exe

print "Perl executed!\n";
print "Param: $0 " . join(' ',@ARGV) . "\n";

#! 行はインタプリタのフルパスを、ディレクトリパラメータ \ で区切らないといけませんが、Lua スクリプトの方を改良すれば、/ を使うことなども出来るようになるでしょう。そこは工夫次第です。

Commentは書けるけど、絶望してたら返答できないかも [URLは入力不可!]
<(2010.10.23) ライン(BlogPet) | (2010.10.28)>

zetamattaのたいじゅー