Squirrel おまけ

Squirrelの話は前回で終了しているのですが、おまけとして日本語を使用する方法を。

Squirrelは基本的にASCIIコードしか使用できません。
日本語の代表とも言えるSJISはその特殊性からSquirrelでは使用できません。
例えば

print("ソース")

という命令を実行してもらえばわかると思います。エラーが出るはずです。
SJISはASCIIコードの使用していない部分を利用して、この数値が入ってきたら2バイトで処理をする、という感じになっています。
つまり、その処理をきちんとしない限りSJISは使用できません。
しかし、日本のゲームでSquirrelを使用するつもりなら日本語は使用できないと困ります。
その方法は2つ。
1つはUNICODEを使用する方法。もう1つはソースをいじってSJISを使用できるようにすることです。

UNICODEを使用するのは簡単です。
Squirrelのヘッダファイルをインクルードする前に以下の文字列を定義するだけです。

#define UNICODE
#define _UNICODE

Squirrelは標準的にUNICODEが使用できるようになっています。
ただし、UNICODEを使用する場合はASCIIコードが使用できなくなります。
日本でだけ発売することが前提のゲームや同人ゲームならUNICODEでなくても問題ありませんが、日本、北米以外でも発売するようならUNICODEは有効です。
韓国やヨーロッパなどではUNICODEがあると便利だと思います。

もう1つのソースをいじってSJISを使用できるようにする方法ですが、これもそんなに難しくありません。
ソースの sqlexer.cpp の330行目に以下のような命令を追加します。

#ifndef SQUNICODE
    if(((CUR_CHAR >= 0x81) && (CUR_CHAR <= 0x9F))
        || ((CUR_CHAR >= 0xE0) && (CUR_CHAR <= 0xFF))){
            APPEND_CHAR(CUR_CHAR);
            NEXT();
    }
#endif

UNICODEが使用されている場合はこの部分の処理が行われないようにする必要があります。
要は、SJISの2バイトコードの範囲が入ってきたらその次の文字も利用するという感じになります。
これで少なくとも"ソース"という文字列は出力できるようになるはずです。

使う場面次第ですが、商業用のアプリでならUNICODE、同人などの趣味ならSJISでいいのではないかと思います。