Top

IT Junk Box

- March, 2009 -

2009.03.01(日)

lv のタブの設定 [FreeBSD] [Linux]

 lv のタブの設定を探してみたけどわからなかったのでソースを見ると ichar.h と
いうファイルに

#define HTAB_WIDTH              8

とありました。ここを 8 から 4 にして

#define HTAB_WIDTH              4

ついでに Makefile の

LIBS=   -ltermcap

を -lncurses に変えるとタブの設定ができたんですが、

LIBS=   -lncurses

設定ファイル ~/.lv で設定できると嬉しいような。

2009.03.04(水)

objconv って何? [PC]

 Agner Fog: Object file converter

ELF や COFF なんかの .o とか .obj のファイルを相互変換できるそうで、これから
試してみます。面白そうな。ソースの中にある build.sh というファイルを見るとほ
とんどコメントで、1行だけおまじないがありました。

> g++ -o objconv -O2 *.cpp

なんとも大胆な作りです。LLVM でこしらえてみました。

> llvm-g++ -o objconv -O2 *.cpp

で、FreeBSD の Hello, world! なんですが、JWasm 用に作ったものを

    .386
    .model flat
    .code
 
_start:
                push   sizeof msg
                push   offset msg
                push   1               ; stdout
                mov    eax, 4          ; sys_write
                push   0               ; dummy argument
                int    080h
 
                xor    eax, eax        ; sys_exit
                int    080h
 
    .data
msg             db   'Hello World !!', 0ah
    end _start

MASM でアセンブルして、objconv で ELF にしてみたらあっさり動きました。

> wine ml -nologo -coff -c -Fohello.obj hello.asm
> objconv -felf32 hello.obj hello.o
> ld -s -o hello hello.o
> ./hello
Hello World !!

でも、COFF じゃなく OMF だと変換に失敗するなぁ。マニュアルを見ると 32bit の
OMF もサポートしてるみたいなんだけど、変換できない場合もあるようです。


■ LLVM Compiler 2.5 公開 [PC]

 LLVM Compiler の新しいバージョンが、公開されたようです。 Windows 版は、Wine
だと動かないんだけど、何か見落としたのかな。

2009.03.06(金)

Open Watcom C/C++ と doscmd [FreeBSD] [DOS]

 Open Watcom C/C++ でこしらえたものを doscmd で実行するとこんなエラーが出て

Unknown interrupt 21 function 63
Unknown interrupt 21 function 65

調べてみると DBCS ベクター情報の取得とか拡張国別情報の取得のコードがあるよう
です。Open Watcom C/C++ の作ったマップファイルにそれらしい __mbinit_ というの
があって Open Watcom C/C++ のソースを探してみると bld/clib/mbyte/c/mbinit.c
いうファイルに int __mbinit( int codepage ) があって原因のコードがありました。
ファイルが大きいと思ったらこんなものまで付いてくるんですねぇ。

ってことで、doscmd のパッチをこしらえてみました。こちらに置いておきます。

[ 3月 7日追記]
  doscmd のパッチを修正しました。Open Watcom C/C++ と違うパターンでもそれなり
のデータを返すようにしました。

2009.03.08(日)

nask のファイルを objconv で変換してみた [PC]

 objconv というのは、 ELF や COFF なんかの .o とか .obj のファイルを相互変換
できるツールで、nask の COFF ファイルでも試してみました。

FreeBSD の Hello, world! なんですが、nask 用にこしらえたものを

[FORMAT "WCOFF"]
[INSTRSET "i386p"]
[OPTIMIZE 1]
[OPTION 1]
[BITS 32]
[FILE 'hellof.nask']
 
global _start
 
[SECTION .data]
 
        ALIGNB  4
msg         db   'Hello World !!', 0x0A
msglen      equ  $ - msg
 
[SECTION .text]
_start:
        push   msglen
        push   msg
        push   1               ; stdout
        mov    eax, 4          ; sys_write
        push   0               ; dummy argument
        int    080h
        xor    eax, eax        ; sys_exit
        int    080h


NASKでアセンブルして、objconv で ELF にして

> nask hello.nask hello.obj
> objconv -felf32 hello.obj
> ld -s -o hello hello.o

起動したらすんなりと動きました。

> ./hello
Hello World !!

2009.03.10(火)

FreeBSD の Portsnap を使ってみた [FreeBSD]

 FreeBSD ハンドブックPorts Collection の利用に FreeBSD 6 になって追加され
た 「Portsnap を利用する方法」が、書かれていたので試してみました。

ハンドブックでは、ports の sysutils に含まれてるようになっていますが、最近の
リリースでは標準でインストールされています。/usr/sbin/portsnap というファイル
を見るとシェル・スクリプトでした。初回は、

# portsnap fetch

というおまじないでファイルを持ってきて

# portsnap extract

というおまじないでファイルを展開するようです。2回めからは、

# portsnap fetch update

だけでいいみたいです。今のところサーバーが海外にしかないようなので、転送量が
多いようだったらしばらく使わないかもしれません。1回めは、55MB でした。

 本家の FreeBSD Handbook の方は、既に修正されてました


■ 新しいブートローダーだとか [FreeBSD] [DragonFly BSD]

 FreeBSDDragonFly BSD 用の新しいブートローダーだそうで、First public test
って書いてるんで様子見した方がいいかも。

 FreeBSD Wiki: OliverFromme/BootLoader: BootLoaderTest

2009.03.11(水)

FASM のバージョンアップで -d オプションが無くなった [PC]

 FASM で暫く前に追加になった -d オプションが、無くなったようです。

version 1.67.24 (Dec 03, 2007)

[+] Added "-d" option to allow predefining symbolic constants from command line.

最新のバージョンだと

version 1.67.35 (Mar 09, 2009)

[-] Some internal code size reductions.

[-] Discontinued "-d" switch implementation.

ということに。悲しぃ。

2009.03.13(金)

IronRuby だそうで [Ruby] [Windows]

 丁稚な日々using によると IronRuby も配布されてるようで、まだアルファ版の
ようですが、気の早い方はもう試してるんですねぇ。

 @IT: .NETでRuby開発を体験してみよう

ってことで、アルファ版を手に入れましたが、.NET な環境をどこに作ろうかな!?


■ JWasm が SourceForge.net のプロジェクトに [PC]

 MASM32 のフォーラムを見ると japheth さんが、JWasmSourceForge.net に移した
ようです。で、フォーラムのモデレータも辞めてしまったようです。

[03月17日追記]
 でも、japheth さん、ここでフォーラムの運営をやってるなぁ。

2009.03.15(日)

求めるもの違い [Python] [Ruby]

 思っているよりもずっとずっと人生は短い。: Pythonな人とRubyな人の違い

両者は、どちらの方が良いか、みたいな話ではなく、あくまで適性というか、求めるもの、目指すところの違いの話で。たぶん二人とも同じ光景を見てるんだと思うのですが、私が「1.8.6もいいけど、やっぱり1.9.1もいいよね」と表現するところを、柴田さんなら「1.9.1もいいけど、やっぱり1.8.6もいいよね」と表現するんだろうなあ、と。でも、私の知っているRubyistなら、後者ではなく前者の表現を好みそうな気がするのです。同様に、Pythonな人の間では「2.6もいいけど、やっぱり3.0もいいよね」という言葉には、何かしら違和感を感じるのかもしれません。

そんな感じもするような。

マスメディアの世論誘導 [メディア] [世間]

 植草一秀の『知られざる真実』: マスメディア総動員の情報操作・国策捜査との激闘

と、国策捜査で逮捕された植草氏にリンクしてみる。

大手マスコミは、国策捜査を垂れ流すばかりで郵政外資化の報道を流さないからなぁ。
酷いもんだ。世論誘導に乗せられやすい人は、ご注意を。

2009.03.16(月)

Debian 5.0 lenny をインストール [Linux]

 久し振りに Debian をインストールしました。最近、FreeBSD を使うことが多かった
のでかなり忘れてしまってますが、また覚えていこうかと思います。

DOS と Linux で Hello World! [DOS] [Linux]

 Fun With Linux Assembly Language: dual.asm

 こちらにある dual.asm というファイルをアセンブルすると DOS でも Linux でも
実行できるファイルを作ることができます。実際に試してみましたが、何も問題無く
動きました。また、ELF フォーマットは、 8番目のデータで OS を区別しています。
Linux の実行ファイルは 3 で FreeBSD だと 9 になっているので、少し書き換える
と他の OS でも動かせます。

Linux のばやい

0000-0000  7f 45 4c 46 01 01 01 03  00 00 00 00 00 00 00 00

FreeBSD のばやい

0000-0000  7f 45 4c 46 01 01 01 09  00 00 00 00 00 00 00 00

dual.asm を参考にしてマクロを作って幾つか ELF32 の実行ファイルを作ってみました
が、セクションが1つの場合しか正常な実行ファイルを作れないようです。

FASM でも試してみましたが、ELF32 の実行ファイルを作る場合、セクションを指定する
とエラーになって実行ファイルを作れませんでした。

2009.03.19(木)

ruby 1.9.1 を使って [ruby] [nDiary]

 そろそろ、新しい ruby にも慣れとかないと浦島太郎になりそうなので練習を兼ねて
のとやさんの nDiary を ruby 1.9.1 で動くようにしてみました。といっても、PB memo
Ruby 1.9.1 への移行挑戦の記録 を参考にさせてもらったのですが。

で、作業としては、ディレクトリー filter/, lib/, plugin/ にあるファイルの1行め
に euc-jp の magic comment を追加して

# -*- coding: euc-jp -*-

ndiary-lib.rb のファイルを変更して

     246 行
変更前:   require 'ftools'
変更後:   require 'fileutils'
  
     535 行
変更前:       text.each("\n\n"){ |line|
変更後:       text.split("\n\n").each { |line|
  
     598 行
変更前:      File::makedirs(File::dirname(filename))
変更後:      FileUtils.mkdir_p(File.dirname(filename))

1行めに euc-jp の magic comment を追加したら動いてしまったような。

2009.03.20(金)

doscmd より Bochs や Qemu だそうで [FreeBSD] [DOS]

 doscmd のパッチを本家に送ってみました。そしたら、「Bochs や Qemu を使った方
がいいよ。」とお返事がありました。う〜ん、シェルスクリプトで動かせるから使って
るんだけど。

このまま放置しておくと検索サービスで見つからないので、こちらにも書いておきまし
た。また、パッチのファイルに動作確認用の DOS のプログラムを追加しておきました。

2009.03.21(土)

シェバング (shebang) の違いだとか [FreeBSD] [Linux]

 詳しいことは、68user さんの説明にお任せするとして、久し振りに Debian を使
ってるんですが、FreeBSD で使っていたスクリプトが、そのまま動かないという現実
に直面しています。まぁ、たいした数では、ないんですが。FreeBSD だと引数を渡す
のに env コマンドに -S オプションを使ったりしますが、

#!/usr/bin/env -S ruby19 -Ke

Linux だと、そんな使い方をしないってことで、env コマンドの代わりに使える exe
というツールも公開されてるようですが、数も少ないので必要に応じて書き換えよう
かと考えています。

で、改めてスクリプトを見直すとこんな1行めでも動いていたことに気付きました。
そうです、シェバング (#!) じゃなかったのにスクリプトが動いていたんです。

#/bin/sh

実は、この nDiary の変換と更新に使っていたスクリプトだったりします。

2009.03.23(月)

DOSEMU の shell スクリプトを使って [DOS] [Linux]

 久し振りに DOSEMU を使ってみました。説明書によると初期設定では、autoexec.bat
の最後に unix -e というおまじないがあって、シェルから使うときに unix -E にする
ということなので試してみました。

-e だと DOSEMU(http://www.dosemu.org/) のウインドウが、そのまま残るんだけど
-E にするとウインドウを閉じて終了しました。なるほど、そういう違いだったのか。

2009.03.28(土)

Tomahawk Desktop だとか [FreeBSD] [Linux]

 gihyo.jp: FreeBSD Daily Topics: Tomahawk Desktop OS - FreeBSDベースへ転身

 Tomahawk Computersが開発している『Tomahawk Desktop』がLinuxベース
からFreeBSDベースへ切り替わりました。

Linux のライセンスについては、こちらでも話題になってたような。

 @IT: 「GPLはもう要らない」、OSSの伝道師が異説
 dotCOMmie's Blog: Eric S. Raymond speaks heresy.

まぁ、それはともかくそろそろ PC-BSD を使ってもいい頃かも!?

2009.03.30(月)

JWasm で ELF32 の実行ファイルを [FreeBSD] [Linux]

 JWasm のマクロのこと等で Japheth さんに連絡したら、気に入ってもらえたようで
本体の方で対応することになりそうです。ということで、次のバージョンが出るのは、
また先になってしまうなぁ。たははっ。

で、新しい JWasm v1.95pre 版なんですが、DOS のリアルモードで動くバージョンも
追加されてました。

フォーマットの資料を検索して調べるより Open Watcom に置いてある資料 を見た方が
早かったような。

2009.03.31(火)

ELF フォーマットの番号って? [FreeBSD] [NetBSD] [OpenBSD] [Linux]

 FreeBSD の /usr/include/sys/elf_common.h を見ると下記のようになってます。

#define ELFOSABI_NONE       0   /* UNIX System V ABI */
#define ELFOSABI_HPUX       1   /* HP-UX operating system */
#define ELFOSABI_NETBSD     2   /* NetBSD */
#define ELFOSABI_LINUX      3   /* GNU/Linux */
#define ELFOSABI_HURD       4   /* GNU/Hurd */
#define ELFOSABI_86OPEN     5   /* 86Open common IA32 ABI */
#define ELFOSABI_SOLARIS    6   /* Solaris */
#define ELFOSABI_AIX        7   /* AIX */
#define ELFOSABI_IRIX       8   /* IRIX */
#define ELFOSABI_FREEBSD    9   /* FreeBSD */
#define ELFOSABI_TRU64      10  /* TRU64 UNIX */
#define ELFOSABI_MODESTO    11  /* Novell Modesto */
#define ELFOSABI_OPENBSD    12  /* OpenBSD */
#define ELFOSABI_OPENVMS    13  /* Open VMS */
#define ELFOSABI_NSK        14  /* HP Non-Stop Kernel */
#define ELFOSABI_ARM        97  /* ARM */
#define ELFOSABI_STANDALONE 255 /* Standalone (embedded) application */

で、NetBSD とか OpenBSD のバイナリファイルを幾つか持ってきて調べてみると

0000-0000  7f 45 4c 46 01 01 01 00  00 00 00 00 00 00 00 00

全部8番めのデータは、"00" でした。あれっ、何で?


Copyright (c) 2000-2009 by IT Junk Box
Generated by nDiary 0.9.4 and Ruby 1.9.1