CeGCC

2008年6月24日 (火)

CeGCC の dup 関数は Socket ハンドルの複製には対応してなさげ…

ソースをほげっても dup 関数の実装がどこにあるかわからなかったので、cegcc.dll を LoadLibrary して dup 関数のアドレスを GetProcAddress で取得して無理やり呼び出してみました。

結果は 0 を返すものの後続の connect 処理で失敗してしまい Socket ハンドルの複製は出来なさそうでした…orz

ではどうやって Socket からの入力ストリームを実行しているスクリプトに受け渡しているんだろう…とソースをほげっていると CeGCC に含まれる PipeLib が怪しいのに気付きました。

Windows Mobile はパイプに対応していないのですが、上記の PipeLib には CreatePipe 関数が定義されています。おそらくパイプを使って Socket からの入力ストリームを実行しているスクリプトの標準入力に受け渡しているんじゃないかなーと(推測

誰か PipeLibruby-mswince に取り込んでくれないかな~(他力本願

| | コメント (0) | トラックバック (0)

2008年6月23日 (月)

CeGCC の dup 関数の実装はどこ?

CeGCCdup 関数がどうやって Sokcet ハンドルを複製しているのか調査しているんですが、行き詰ってしまいました…orz

とりあえず SVN リポジトリから trunk を丸ごとチェックアウトして dup.cdup2.c は単に fcntl 関数のラッパーということはわかったんですが、fcntl 関数の実装って fcntl.s でいいんだろうか?

ソースをみても単にシステムコールを呼び出しているだけみたいだし…。

Socket ハンドルを複製する API は提供はされてないけどもシステムコールは存在しているとうこと?

それとも見当違いのソースをみている?

教えて!エロイ人~!bearing

| | コメント (0) | トラックバック (0)

2008年6月21日 (土)

Socket 対応版 ruby-mswince キテター!

Socket に対応した ruby-mswince がリリースされていました!happy02

Target-EarthdotNet - Ruby on Windows CE & Pocket PC via ひとりぶろぐ

早速アドエスの microSD カードにインストールしてみましたが動きませんでした orz

CeGCC の制限によりマルチバイト文字を含むパス上にインストールすると動かないようです。

それにしても CeGCCdup 関数がどうやって Sokcet ハンドルを複製しているのか気になるのでソースをほげってみたいと思います。

| | コメント (5) | トラックバック (0)

2008年1月27日 (日)

Java コンパイラ「Jikes」を Windows Mobile に移植する

今回はネイティブな Java コンパイラである Jikes を Windows Mobile に移植して、Advanced W-ZERO3 [es](以下、アドエス)以外の W-ZERO3 でも Java ファイルをコンパイル出来る環境を構築します。

Jikes の移植には Windows Mobile 用クロスコンパイラ「CeGCC」を使用しました。

jikes-1.22-wince.zip」をダウンロード

展開された「jikes.exe」、「cegcc.dll」、「cegccthrd.dll」を任意のフォルダにコピーしてください(microSD カード上でも OK)。

既に「cegcc.dll」と「cegccthrd.dll」が Windows フォルダなどに存在する場合はコピー不要です。

「jikes-1.22-mswince」フォルダ以下には Windows Mobile 用に修正したソース一式が入っていますので必要ない方は削除して下さい。

ソース一式はこちら。

移植した Jikes の注意点ですが、

  • 「-encoding」オプションに指定できるのは「MS932」と「UTF-8」の 2 種類のみ。
    これは文字コード変換に libiconv ではなく MultiByteToWideChar を使用しているため。
    こちらのページで公開されている iconv.lzh を使用させて頂きました。
    オプションを指定しない場合は「MS932」として処理されます。
  • 引数などで指定するパスには日本語などのマルチバイト文字は使用できない。
    CeGCC では opendir 関数や FindFirstFile 関数がマルチバイト文字が含まれるパスに対応していないため。
    (もし対応する方法があればコメントください)

それと、Jikes を移植する際に Windows Mobile 用の native2ascii と ascii2native も作成しました。

「native2ascii-mswince.lzh」をダウンロード

展開された「ascii2native.exe」、「native2ascii.exe」を任意のフォルダにコピーしてください。

こちらの注意点は、

  • Sun の native2ascii と異なりオプションの指定はできません。
    文字コードは「MS932」固定です(手抜き)。
  • 引数も指定できず、リダイレクトのみ。
    「native2ascii 入力ファイル > 出力ファイル」のようにして実行します。

では、早速 Jikes でコンパイルしてみます。以下ようなバッチファイルを用意しておくと簡単に Jikes を実行できます。

@ECHO OFF
SET JIKES_BIN=\microSDカード\Java\jikes.exe
SET BOOT_CLASSPATH=\Java\sun-jre1.6.0_04-rt.jar
SET JIKES_OPTION=-bootclasspath "%BOOT_CLASSPATH%" -source 1.5
"%JIKES_BIN%" %JIKES_OPTION% %1 %2 %3 %4 %5 %6 %7 %8 %9
@ECHO ON

テキストエディタを起動して以下の HelloJikes.java を作成します。

public class HelloJikes {
    public static void main(String[] args) throws Exception {
        System.out.println("こんにちは、Jikes!");
        String circledDigit
            = "①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳";
        for (char digit : circledDigit.toCharArray()) {
            System.out.print(digit);
        }
    }
}

DOS窓Openを起動して Jikes でコンパイルしてみます。

Scrn0015

コンパイルは数秒で完了します。ecj とは雲泥の差です。

これで ecj とはオサラバです。


…といきたいところですが、Jikes は JDK 5 の新機能にほとんど対応していません。

対応しているのは拡張 for 文のみで、EnumBoxing/UnboxingStatic Import可変長引数Generics は使えません... orz

どこかに ecj のコードを Jikes に移植してくれるツワモノはいないですかね…。 

| | コメント (4) | トラックバック (1)

その他のカテゴリー

CeGCC | Delphi | DirectShow | iPhone | Java | JMF | Mac | Mysaifu JVM | NetBeans | onig4j | Ruby | SQLite | W-ZERO3 | Windows Mobile | ワンセグ | 開発