お気に入りの入門書 [OSXでC言語]
ANSI対応
C言語プログラミングレッスン 入門編
結城 浩/著
http://www.amazon.co.jp/exec/obidos/ASIN/4797307579/sonet0f-22/ref%3Dnosim/249-5097862-3417117
これは良い本だと思いました。かんたんなサンプルソースやそれに付いての説明があり、基本的な事をしっかりと覚えていける構成になっています。関数の引数の扱い、構造体、メモリ、ポインタ、ポインタのポインタ、等今まで今一きちんと理解出来てなかった事も分かりやすく優しく説明されているので非常に助かりました。
プログラミング系の入門書って理解出来だすと読んでて面白くってしようがないもんですね。
とにかく動き出します [プロジェクトSHIII : FB]
C言語で Hello World!. [OSXでC言語]
この際、ソース書きからコンパイル、実行までをターミナルだけでやってみます。
まず、ターミナルを起動。起動して最初の場所はホームフォルダになってます。そこに作業用のディレクトリ(フォルダ)を作ります。名前は"DevWork"とでもしておきます。
mkdir DevWork
これでDevWorkという名前のディレクトリがホームに出来ます。
そしてそのディレクトリ内に移動。
cd DevWork
エディタ、viを起動します。
vi
--------------ここからviの操作-------------
コマンドモードになっているので入力モードに切り替えます。
i
これで入力モードに入ります。以下のソースを記入。

ターミナルの文字セットの設定が日本語になっている場合は「\n」のバックスラッシュは「¥n」となります。意味は同じなので問題ありません。ここではUTF-8の設定だったのでバックスラッシュになっています。
[esc]キーを押してコマンドモードに戻ります。
ファイルを保存します。
:wq helloW.c
これで「helloW.c」という名前のCソースファイルが保存され、viが終了します。
--------------viの操作ここまで-------------
ファイルの内容を再確認したい時はcatコマンドを使います。
cat helloW.c
もし打ち間違いがあれば、再び " vi helloW.c " と、viを立ち上げ修正します。
間違いなければコンパイルします。
cc -o helloW helloW.c
問題なければ同ディレクトリ内に「helloW」という実行ファイルが出来ます。.cファイルに間違いがあればエラーが表示されるのでまたviで修正します。
実行ファイルを走らせてみます。
./helloW
これでHello World!. と表示されます。

テキストエディットの罠 -UTF-8問題- [OSXでUNIX]
前回、ターミナルから見るのに便利だから、UTF-8で保存した方が良いかも、と書いたのですが、もしGUIのメインのエディタにテキストエディットを使ってる場合ちょっと問題があったりします。
現在テキストエディットには「自分では書き出せるUTF-8ファイル。でも自分で読み込めない。」というトホホなバグがあります。
でも全く読めないわけではないんです。ファイルを直ダブルクリックで開こうとせずに、ファイルメニューから「開く..」を選択し、その際に出る、ダイアログ内のファイル形式ポップアップでUTF-8を選択して開けば問題なく開きます。でも面倒ですね。
フリーウェアのmiでさえキチンと開いてくれます。純正アプリとしてこれじゃ駄目でしょ〜。迅速にバグフィックス希望です。
ターミナルの設定 [OSXでUNIX]
ジャガー(OSX10.2)以降のターミナルはUTF-8に対応しているので、日本語を含む多言語の表示も可能となっています。通常、デフォルトでUTF-8に設定されているはずです。
これは、
ターミナルインスペクタ(Command+i)>ディスプレイ>文字セットエンコーディング
で変更出来ます。
ターミナルインスペクタ>エミュレーション>非ASCII文字をエスケープする
のチェックボックスをONにしておけば、日本語の直接入力が可能になります。
現在のディレクトリのファイル等を表示するlsコマンドですが、そのままでは日本語フォルダは文字化けしてしまいます。これは、-vオプションを付けて実行すると、日本語も正しく表示されます。
例)
ls -v
catコマンドでテキストの中を見る場合、その書類がUTF-8フォーマットで保存されているのならば、テキスト内の日本語は正確に表示されます。しかし、例えば日本語(S-JIS)で保存されている場合、日本語テキストは文字化けてしまうので、ターミナルインスペクタで合わせて変更しないと読めません。しかも、その設定のままls -vコマンド等でファイル名を表示しても日本語ファイル名はやはり文字化けてしまいます。
その度に文字セットを切り替えるのは面倒ですが、これは、MacOSXではファイル名はUTF-8、従来のMacOSに由来する部分はS-JIS、日本語に対応したUNIXに由来する部分は日本語EUC、と、複数の文字コードが混在した仕様になっている為です。
日本語書類はできるだけ、UTF-8で保存し、ファイル名は英語を使うのが現状では一番現実的かもしれません。
vi-01 [OSXでUNIX]
viは、ほぼ全てのUNIXに搭載されているエディタで、システム管理者等が良く使用されています。勿論、UNIXベースであるOSXにも搭載されているので、ちょっと使ってみようと思います。注意すべき点は、標準でインストールされているvi(vim)は、multibite無効でコンパイルされている為、日本語は使えません。
・ ターミナルを起動し、viと打ち込みリターンキーを押すと、ターミナル内でviが起動する。
・ i を入力すると、入力モードに切り替わる。(左下に"-- INSERT --"と表示されます。)
・ とりあえず通常のエディタのように文章や文字を書いてみます。
・ escキーでコマンドモードに戻ります。
・ :w hellovi.txt [リターンキー]で、現在のディレクトリに"hellovi.txt"というテキストファイルが保存されます。
・ :q [リーターンキー]で、viを終了。
とりあえず慣れるまではこんな感じの使い方でいけるようですが、viのコマンドモードは沢山の便利なコマンドが備わっており、それらを使いこなせれば強力な編集ツールとして実力を発揮します。
-----
ターミナルからの起動時オプション
vi +[数字] filename
"filename"というファイルを読み込み[数字]行目にカーソルを移動させます。
ソースコードの編集に便利。[数字]を省略するとそのファイルの最終行に移動します。
+も省略するとそのファイルの最初の行に移動します。
vi +/REGEXP filename
ファイルを開いた後、そのファイル上の最初の正規表現の位置に移動します。
vi -R filename
view filename
読み込み専用でファイルを開きます。
vi -r filename
前回、viでの作業中にviがクラッシュしてしまった場合に内容がviによってpreserveされていれば、その内容を復旧出来ます。
vi -c COMMAND filename
ex -c COMMAND filename
起動後、実行可能なコマンドを実行します。
Javaの勉強-01 [OSXでJava]
Macintosh(OSX10.3)上でJavaを勉強していきます。
今年はJava→Cと学んでいこうと思っています。
後々の為にDeveloperToolをインストールしておきます。
しかし、基本の動作確認はターミナルで可能なのでまだ使用はしません。
とりあえず"Hello World"と表示するプログラムを試してみます。
コーディングはOSX標準装備のテキストエディットを使用。
ファイルはプレーンテキストにしないといけないので、環境設定>新規書類の属性を
"標準テキスト"にしておきます。
また、テキストエディットをプログラムソース書きに頻繁に利用する場合は、
保存オプションの「標準テキストファイルに拡張子".txt"を追加する」のチェックを外しておくと良いです。
public class Sayhello {
public static void main (String args []) {
System.out.println ("Hello World");
}
}
これを".java"の拡張子を付けてデスクトップに保存します。エンコーディング形式は"日本語(Mac OS)"のままでもOKなんですが、ソース内で日本語を使って、それをターミナルで文字化けしないように観る為に、UTF-8で保存しておくと便利です。
ターミナルを使って、コンパイルした後に実行してみます。
まずcdコマンドでデスクトップに移動します。
cd Desktop
次にjavacコマンドでコンパイルします。
javac Sayhello.java
デスクトップ上に"Sayhello.class"というJavaのプログラムファイルが出来ます。
これをjavaコマンドで実行してみます。
java Sayhello
ターミナル内に"Hello World"と表示されればOK。

〜覚え書き〜
public class [クラス名]
Javaではクラス名=ファイル名でなければならない。
public static void [メソッド名]
メソッドは"サブルーチン"。
メソッドはそれぞれ役割を持っている。
ここでの"main"メソッドは、クラスが実行されると最初に動作する働きを持つ。このクラスでのメインプログラム。
System.out.println ("Hello World");
は、とりあえず、テキスト表示はこういう命令を使うもんだと理解しておく事にする(笑)。
Popup Menuで何が選択されているかを所得 [汎用ゲームマップエディタ : FB]
DIM itemID
itemID=BUTTON(_PopW)
以上。
数値のみの入力しか受け付けなくする。Button上でのマウスカーソルアイコンを変える。 [汎用ゲームマップエディタ : FB]
数値のみの入力しか受け付けないようにする。EditFieldで色々やってみたけれど、今イチ。そこで、FutureBASIC4 CDに入っているサンプルソースで良さそうなものがあった。
Examples > ** Donations ** > Robert P's Favorite Examples > Text and Edit Fields > Key filter for EditText control
早速、実装。いい感じです。しかしこのフィルタ、入力部分の見た目はまるっきり、EditFieldなんですが実はEditFieldではなく文字入力が出来るApperanceButtonを使用しているので、先日実装した「EditField上でマウスカーソルアイコンを変える」が、数値入力部上では動作しなくなりました。そこで、
ev = DIALOG(0)
id = DIALOG(ev)
SELECT ev
〜中略〜
CASE _cursOverNothing
CURSOR = _arrowCursor
CASE _cursOverBtn,_cursOverEF
SELECT id
CASE _Mapx,_Mapy,_Stage,_ProjectNames
CURSOR = _IBeamCursor
END SELECT
〜中略〜
END SELECT
こんな感じに変えました。それぞれIDで指定しないとポップアップボタンにまで反応してしまうので。そこで気になったのが、EditFieldのTEXT内容を所得するにはEDIT$()を使うというのは知ってましたが、ApperanceButtonのTEXT内容所得ってどうやるのかは分からない。調べてみた所、それらしいやり方が見つかったので、試しに次の関数を追加してテストしてみました。最終的にはTEXTを数値に変えなければならないので、それも兼ねて。
LOCAL FN Okay //OKボタンを押すとこの関数へ
DIM dat
DIM As STR255 TextString
TextString = FN ButtonTextString$ (_Mapy) //文字所得(マップの広さのyを入力するフィールドから)
dat=VAL(TextString) //文字を数値に
PRINT dat
END FN
バッチリです。






