このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

CGI Assimilator

発言者:田中求之
( Date Tuesday, June 17, 1997 12:03:21 )


C/C++ でCGIを作るための CodeWarrior 用のライブラリが出ています。

こいつは、いわゆる Framework ではなくて、ANSI CGI script (って言い方は
初めて聞きますが、ようは UNIX 上の CGI のコードですね)を Mac に移植する
ためのものです。

ANSI C だけで、Toolbox の知識がなくとも CGI が作れるってわけですね。



→  CGI Assimilator

前薗 健一 さんからのコメント
( Wednesday, June 18, 1997 01:34:39 )

ちらっと見てきました。
推測ですけど、AppleEvent を気にしないで std in/out (標準入出力)
でプログラミングを可能にするようなものではないでしょうか。 (^^)?

MacPerl の C/C++ 版みたいなものかな?

田中求之 さんからのコメント
( Wednesday, June 18, 1997 12:22:07 )

>MacPerl の C/C++ 版みたいなものかな?

考え方としては一緒だと思います。MacPerl が "CGI Script" によって
UNIX と同じ環境(std in/out と env 変数)で CGI を書けるようにし
ているように、C でも同じように AppleEvent を隠して std in/out
で処理ができるようにするというものでしょう。

#  …記事を書いている最中にこれだもんなぁ (^_^;;


前薗 健一 さんからのコメント
( Thursday, June 19, 1997 01:18:27 )

#  …記事を書いている最中にこれだもんなぁ (^_^;;

(爆)

田中求之 さんからのコメント
( Friday, June 20, 1997 18:09:54 )

サンプルのソースを見てみましたが、まさに UNIX 感覚で CGI がかけますね。

データの読み込みは getenv() や getchar() だし、出力は printf です。

Cプログラマの人は、これで CGI を作るのが楽でしょうねぇ。


前薗 健一 さんからのコメント
( Saturday, June 21, 1997 01:22:05 )

> Cプログラマの人は、これで CGI を作るのが楽でしょうねぇ。

まあ、慣れもありますけど。UNIX, DOS の console 系プログラマには
いいでしょうね。Perl -> C の移植も楽にできそうですね。
逆に、Mac, Win の GUI 系プログラマにはどうでしょうか?
ほんとに慣れの問題だと思います。

田中求之 さんからのコメント
( Saturday, June 21, 1997 01:50:35 )

UNIXからの移植が簡単にできるというのは大きなメリットかもしれません。
それと、Cの初心者にはよいと思いますね。

>逆に、Mac, Win の GUI 系プログラマにはどうでしょうか?

このへんに慣れている人には、必要ないものでしょうし、やっぱ Toolbox を
うまくつかったほうが、速いでしょうから。


重松修 さんからのコメント
( Saturday, June 21, 1997 02:23:41 )

>UNIXからの移植が簡単にできるというのは大きなメリットかもしれません。
>それと、Cの初心者にはよいと思いますね。

大部分のCGIの場合は、速度よりも開発工数のほうが優先されるのではと思います。
でなければ、Perlなども使われないと思います。

漢字コード変換のために前薗さんのC/C++のページで落とさせていただいた、
サンプルプログラムを拝見させていただきましたが、CってJavaにそっくりですね。
お陰様で漢字コード変換、半角カナ→全角カナ変換が出来ました。

そんな便利なツールがあるなら、いっそ、FutureBASIC IIやめて、C/C++を
勉強しようかな。(^_^;;;なんか、ハンドルとかそういう面倒くさいのはだんだん
嫌になってきました。

前薗 健一 さんからのコメント
( Sunday, June 22, 1997 03:28:35 )

> CってJavaにそっくりですね。

Java が C++ を元に C++/-- みたいなもんですから。(^^;

> 漢字コード変換、半角カナ→全角カナ変換が出来ました。

これって、
日本語情報処理
Ken Lunde 著

で紹介されているコードを Mac 用に書き換えただけです。(^^;

重松修 さんからのコメント
( Monday, June 23, 1997 09:32:48 )

結局拝見させていただいたのは、コードを識別する部分です。
それ以外は意味不明であったため、論理式で書きました。
BASICの場合は、IFやSELECT,CASE分岐よりも圧倒的に高速に処理されます。
さっそくホームページにアップしておきましたので、ご覧になって見てください。

前薗 健一 さんからのコメント
( Tuesday, June 24, 1997 00:31:25 )

> さっそくホームページにアップしておきましたので、ご覧になって見てください。

URL を教えてください。(^^;

重松修 さんからのコメント
( Wednesday, June 25, 1997 13:58:47 )

すみません。以下にリンクを張っておきますので、ご覧になって見てください。

前薗さんにご紹介いただいた『日本語情報処理』は大学の図書館にあったので
早速借りてきましたが、大変分かりやすいですね。前薗さんのプログラムで分
からない部分はこの本を見て作りました。

# Cが分からないから結局自分で書きました。

別に特に必要は感じて無いのですが、何となく(処理が)遅い気がしてBASIC
では限界か、という感が拭えません。30K程度の処理(コード変換、半角カナ+
特殊文字置換他)で1〜2秒ほどPwerPC601/60Mhzでかかります。68Kコード
ですから、68Kマシンでは速いでしょうが、処理が重なると思いっきり遅く
なりそうな気がします。

FutureBASICにはアセンブラが幸いにくっついているし、非常に単純な演算
なのでいっそのことマシン語で書こうかと思っています。モード(ソフト発売元)
に聞いたのですが、参考書を教えてもらえませんでしたので、もし何か良い本を
ご存じでしたら、教えてください。よろしくお願いいたします。

P.S.
ソースは英語版のみですので、日本語変換の部分が必要であれば、おっしゃって
いただければメールいたします。まだ、ハンドルなるものが良く分かっていません
のでバグがあると嫌だからです。(^_^;;

重松修 さんからのコメント
( Wednesday, June 25, 1997 14:00:16 )

リンクを張り損ねました。

→  FutureBasic IIでCGIの部屋

田中求之 さんからのコメント
( Wednesday, June 25, 1997 16:28:09 )

68K のアセンブラについては、国内で参考文献が出ていたはずですね。ただし、
68xxx のどのシリーズまでカバーしているかは知りませんが。もっとも、
PowerPC の68Kエミュレーターは、確か 68020 のエミュレーションの
はずですので、68020 のアセンブラで書いておけばいいんでしょうが。

>ハンドルなるものが良く分かっていません

アセンブラでどうこうするより、ハンドルをきちんと押さえて、Toolbox をうまく
使えるようになったほうが、処理速度の向上には効くのではないかと思いますが。

前薗 健一 さんからのコメント
( Thursday, June 26, 1997 02:47:19 )

to 重松修 様

ホームページ見させていただきました。なかなかまとまったドキュメントに
仕上がっていると思います。
僕も10年程前は MSX BASIC でプログラムを組んでいたのですが、現在は
すっかり忘れてしまいました。(^^; 読めるけど書けないというやつです。

ハンドルの概念は理解しておいたほうがいいと思いますよ。Mac OS に限らず
Computer のメモリ管理はハンドルを使うことが多いですから。

最初に Mac (SE/30) を買った頃読んだ本で、ハンドルの解説で面白いのが
あったことを思いだしました。ハンドルの解説に水戸黄門を使っていたんですよ。
水戸黄門御一行(メモリの実態)が旅(移動)しても、風車の矢七(CPU)は宿屋の目印
(pointer)を見つけて追っかけて(アクセスして)しまう。といったような内容
でした。(^^;

重松修 さんからのコメント
( Thursday, June 26, 1997 03:23:26 )

ハンドルの件ですが、FutureBasicIIメーリングリストに参加して解決しまし
た。でも、なんかその水戸黄門の話しは笑ってしまいましたが、余計にわから
ないような気がしないでもないです。(^_^;;

自分は昔は3Dレンダリングにこっていた時期があって、少しでもきれいに結果
がみたいので、MSXを買ったのですが、浮動小数点演算がBCDだったのですべて
かき直した記憶があります。独自の形式でFACをレジスタにもつので、88のBIOS
で提供されていたものよりも10倍以上高速でした。以来全然プログラムをする機会
がなかったのと必要を感じなかったため知識が10年前のままです。

FutureBASIC IIのほうは、もう少しでCGIの日本語版のCGIのフレームとなる
部分ができるので、デバッグして公開したいと思いますが、残念ながらCGIを
FBでつくっている同志は見つかりません。(T_T)
とりあえずは、WEBPAGEの内容を充実させてFBIIユーザーの方で挑戦して
見ようかな、という方が増えるように、がんばります。

# とか、書きつつも昨日はPhotoshopのマスクプラグインを作ってつぶれました。
# FL-MASKの作者が3000万!もかせいだとかあったから、フリーで配布して、
# せめてもの抵抗です。(^^;;


田中求之 さんからのコメント
( Thursday, June 26, 1997 16:01:26 )

>水戸黄門御一行(メモリの実態)が旅(移動)しても、風車の矢七(CPU)は宿屋の目印
>(pointer)を見つけて追っかけて(アクセスして)しまう。といったような内容
>でした。(^^;

これって、藤本さんの本じゃない? 読んだ記憶がある(もともと、MacJapan に
連載されたやつだったと思うけど)


田中求之 さんからのコメント
( Thursday, June 26, 1997 22:40:32 )

>これって、藤本さんの本じゃない?

気になって調べてみたら、藤本さんの『 THINK C プログラミング講座』では、
ヤシチの話は、cdev が INIT として常駐させた部分をいかに探すかという
話で出てきてました。

この時期(本として出たのは 91年)の本は、ちょうど Toolbox に取り組み
始めた頃だったので、けっこう熱心に読んでいたので、こういう細かいことも
頭に残っていたのであった (^_^;;

前薗 健一 さんからのコメント
( Friday, June 27, 1997 00:56:54 )

> シチの話は、cdev が INIT として常駐させた部分をいかに探すか
そうでした。(^^;
僕も今確認しました。

重松修 さんからのコメント
( Thursday, February 26, 1998 06:27:44 )

すごく間抜けな質問なのですが、CodeWarrior Pro 2用の書類は
Think C 8.4Jでは使えないのでしょうか?

CGI Assimilator 1.3はThink Cではなくて、CodeWarrior Pro用の書類しか
見あたりませんでした。私は、CodeWarriorを持っていないので、Think C
でANSI Cの勉強をかねてCGIが作れればと思っているのですが。

よしもと さんからのコメント
( Thursday, February 26, 1998 08:22:43 )

えっと、一応CGI Assimilatorユーザーだったりするんですが...
多分Think Cでは使えないでしょう。

もし、どうしてもThink Cで使いたければ、作者にお願いする
しかないですね。

やはり、メジャーな開発環境じゃないと、結構大変ですね。

重松修 さんからのコメント
( Thursday, February 26, 1998 22:23:39 )

やっぱり、Think Cは過去の遺物なのかな。MLでもCodeWarriorをすすめられ
ます。(^^;;

なんか、マイナー(MacOS)な環境で更にマイナーなもの(FutureBasic)を
使ってるんですが、Think Cもこれまた、マイナーなのかな。(苦笑)

しかし、シマンテックのマニュアルのいい加減さにはうんざりです。
Hello Worldのチュートリアルで相当ひどい間違いが2カ所。たかがHello
Worldで一晩まるまるつぶれました。(ToT)

前薗 健一 さんからのコメント
( Friday, February 27, 1998 00:54:35 )

>すごく間抜けな質問なのですが、CodeWarrior Pro 2用の書類は
>Think C 8.4Jでは使えないのでしょうか?

CGI Assimilator を Think C で使いたいということですよね?
つまり、library とか .o の bainary object を Think C から利用可能
かということですよね。

推測ですが、Think C の project の設定をちゃんとすれば使えるはずです。
試してみる価値はあると思います。

library にしろ .o の binary object も、68k または PPC の binary file
ですので、Mac で使う以上、開発環境には依存しないはずです。

勘違いしていたらごめんなさい。

よしもと さんからのコメント
( Friday, February 27, 1998 08:30:13 )

えっと、素朴な疑問なんですが、それでは、なぜCGI Assimilatorに
CWのバージョンに応じたバージョンが存在するのでしょうか?

僕は、CWのバージョンにすら依存するものが、Think Cでは走らない
と思ってコメントしたんですが、これって勘違いなんですかねぇ?


前薗 健一 さんからのコメント
( Saturday, February 28, 1998 00:12:10 )

to よしもとさん

> えっと、素朴な疑問なんですが、それでは、なぜCGI Assimilatorに
> CWのバージョンに応じたバージョンが存在するのでしょうか?

この答えは CGI Assimilator の作者に直接質問して下さい。(^^;
僕には答えようがありません。

彼は CW の複数のバージョンによる CGI Assimilator の Library を公開
していますが、ユーザにとっては CW のバージョンなんてどうでもいいこと
だと思います。もちろん CW のバグによる不具合があっては困りますが。

前薗 健一 さんからのコメント
( Saturday, February 28, 1998 00:37:40 )

to 重松修 さん

試しに、Symantec C++ v8.0.4 と CW Pro2 で CGI Assimilator のテスト
をしてみました。ソースコードは以下のようなものです。

//#include <CGI Assimilator Lib.h>

#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>


void main( int argc, char* argv[] )
{  
  cout << "Server: WebSTAR/2.1\r\n"\
    "Content-type: text/html; charset=Shift_JIS\r\n\r\n";
  cout << "<html><head><title>CGI Assimilator test</title></head><body>こんにちは (^^)/</body></html>";
}

テスト用に次のような AppleScript を書いて、ScriptEditor から
sdoc AppleEvent を送りました。使い回しをしているので不要な部分が
多いです。(^^;

tell application "CGItest.acgi"
  set CGIResult to ヌevent WWWスsdocネ "path" given ヌclass methネ:"POST", ヌclass kforネ:"", ヌclass postネ:ツ
    "", ヌclass addrネ:ツ
    "pmac8500.mae.or.jp.", ヌclass frmuネ:"", ヌclass userネ:"", ヌclass passネ:ツ
    "", ヌclass svnmネ:"192.168.1.2", ヌclass svptネ:"80", ヌclass scnmネ:"/ken/easyBBS/bbs.acgi", ヌclass refrネ:ツ
    "http://www2.mae.or.jp/ken/easyBBS/bbs.acgi", ヌclass Agntネ:"Mozilla/2.01 (Macintosh; I; PPC)", ヌclass ctypネ:ツ
    "application/x-www-form-urlencoded", ヌclass Kactネ:"CGI", ヌclass Kaptネ:"/ken/easyBBS/bbs.acgi", ヌclass Kcipネ:"192.168.1.2", ヌclass Kfrqネ:"", ヌclass Kcidネ:1
end tell

CW Pro2 では compile/link もすんなり通り、問題無く動きました。

Symantec の場合

1.上記ソースコードではコメントになっていますが、

#include <CGI Assimilator Lib.h>

で compile error になってしまいました。そこで CGI Assimilator Lib.h
の中身を見てみると、内部で precompiled header を include しているのが
判明しました。この precompiled header は CW で compile されており
Symantec の precompiled header との互換性がないためにエラーに
なったと思われます。

2.つぎ
Compile error なんて無視。上記コードのコメント部分です。
Compile/link ともとおり、Application が作成されました。
ここで linker がとおったということは、先程のよしもとさんへの
答えでもあります。

さて、結果はバツでした。上記のコードでは CW, Symantec でも Console 
環境で動くのですが、Symantec の Console では Open Application
AppleEvent を受けてアプリケーションの起動はできましたが、それ以外の
、ここでは sdoc AppleEvent はハンドルしていないようです。
アプリケーション起動後に上記ソースコードの

"Server: WebSTAR/2.1\r\n"\
"Content-type: text/html; charset=Shift_JIS\r\n\r\n"\
"<html><head><title>CGI Assimilator test</title></head><body>こんにちは (^^)/</body></html>"

を console に書いたあと、「終わるんだったら enter key をおしてね」

てな具合です。

3.かすかな可能性
precompile されているヘッダの実体を手にいれることが可能ならば
Symantec でも CGI Assimilator を使うことができるかもしれません。



重松修 さんからのコメント
( Saturday, February 28, 1998 01:23:03 )

前薗さん、わざわざ試していただいてありがとうございます。

しかし、サンプルプログラムは、Hello Worldなみですね。それで、
CodeWarriorならCGIとして動くんでしょうか。もちろん、PowerPCもOKです
よね。FutureBASICの苦労は一体とか思ってしまう今日この頃です。(T_T)

あとの方の話は、正直に申し上げまして、何をおっしゃってるか難しくて
分かりませんから、今の私にはどうこうできる範囲にないと分かりました。

とりあえず、土日に普通の?(ANSI)Cを勉強しようと思います。なにぶん、
今はHello Worldのprintfの部分を書き換えてコンパイルして、喜んでいる、
その程度です。

ただ、どうせなら、CGIでHTMLで結果を返しながら学習がしたいと思いまし
たので。

今後ともご指導の程、よろしくおねがいいたします。

# 吉本先生:そのうちPerl道にも入門したいと思っていますので、よろしく
お願いします。

前薗 健一 さんからのコメント
( Saturday, February 28, 1998 02:05:48 )

> CodeWarriorならCGIとして動くんでしょうか。

動きます。

> もちろん、PowerPCもOKですよね。

PowerMac 8500/120 でテストしましたので大丈夫です。

上記コードは C++ で記述しています。あれでも C++ なんですよ。(^^;


cout << "なんたらかんたら";

の部分を

printf( "なんたらかんたら" );

の stdio に置き換えてくださいませ。

> とりあえず、土日に普通の?(ANSI)Cを勉強しようと思います。

C に限らず言語は書くことで覚えると思います。
そこで宿題です。(^^;

1.現在の日付け、時刻を表示する CGI を書きましょう。
2.クライアントのドメイン名と IP Address を表示する CGI を書きましょう。


宿題ではありませんので、重松修さんのペースで study してみてください。

よしもと さんからのコメント
( Saturday, February 28, 1998 07:09:40 )

to 前薗さん

既にテストなさっているのでお分かりと思いますが、プレコンパイル
ヘッダーがくせ者でして、僕がレジストした時は既にPro 2用のバージ
ョンが出回っていたのですが、僕はPro1を使っていたので、コンパイル
出来ず、作者に言ってPro 1用のバージョンを送ってもらいました。

よしもと さんからのコメント
( Saturday, February 28, 1998 07:12:34 )

to 重松さん

「Perl道」は、広く、なだらかです (^^;
いつでも、お待ちしております。

#それから「先生」は、なしねん :-)

重松修 さんからのコメント
( Monday, March 02, 1998 17:22:13 )

前薗さん、いろいろありがとうございます。

とりあえず、現状CodeWarriorを買うだけの資金が無いので、4月になって、
購買で買おうと思います。
# 28,000円のようなので。

1や2はFutureBASICだとすぐに作れるんですけどね。
Cではかなりきつそうです。

とりあえず、手続き的には全く同じだと思うのですが、ToolBoxとかそういう
次元でなくて、C言語自体、まだ相当不安が残っています。

今後とも修行を続けますので、宜しくお願いします。