WebPetSystem ver.2.0 マニュアル


この度はWebPetSystemをご利用頂きありがとうございます。このファイルはWebPetSystem(以下WPS)のマニュアルです。ご質問・ご要望はどんぞこCGIまでお願いします。

目次

  1. はじめに
    1. WPSとは何か
    2. 概要
  2. ファイル構成
  3. 設置方法
    1. ファイル・ディレクトリ
    2. 設定ファイル
    3. テスト起動
  4. WPSの起動
    1. 準備
    2. WPS-Scriptデータの作成
  5. WPS-Script リファレンス
    1. 索引
    2. リファレンス
  6. その他
    1. 利用規約
    2. サポート
    3. 謝辞
    4. 後書き

1.はじめに

i. WPSとは何か

 あなたがWeb上でCGIを使ってアドベンチャーゲームやシミュレーションゲームを作ろうとします。この時、2つの壁があなたの前に立ちはだかります。その一つはシステムの構築です。例えばあなたがPerlを使って一からゲームづくりを始めようとするならば、長い時間と労力を必要とするでしょう。しかしWPSはWPS-Scriptという簡易スクリプト言語を使用し、コマンドを並べるだけでゲームをつくることができます。WPS-ScriptはBASIC以上に簡単なので、何らかのプログラミング言語を扱ったことがあれば簡単に使いこなせるでしょうし、初心者の方でも十分理解が可能です。

 もう一つの壁とは、データとセッションの管理です。アドベンチャーにしろ、シミュレーションにしろ、プレイヤーの進行状況を管理しなければゲームになりません。この時クッキーを使えば簡単にセッション管理ができます。しかし時にはクッキーを受け入れない設定にしている人もいます。また、そもそもクッキーでは容易にデータを書き換えることができます。クッキーは非常に強力なアイテムですが、データを簡単に改竄することができてしまうという点で、ゲームをつくる人にとっては、不都合が生じ得るのです。これに対し、WPSはクッキーを使いません(もちろん改造すれば使えますが)。データやセッションの管理はサーバ上のファイルで行います(WPSはPerl v.5001以降で動くCGIです)

 WPSではゲームのプレーヤーがブラウザの「戻る」ボタンや「再読込」ボタンを使用するとエラーが出るようにできています。これにより、やり直しのきかないより緊張感のあるゲームをつくることができます。

ii. 概要

 既にWPSになじみのある方はここを読み飛ばしても構いませんが、これからWPSで遊んでみようと思われる方は、次の単語について簡単に知っておいてください。

WPS動作フローチャート
 ■WPSにログイン
    ↓
  ユーザーデータの読み込み
    ↓
  スクリプトデータの読み込み
    
  スクリプトに従って処理
    ↓
  結果の表示と一時データファイルへの書き出し

 ■ログイン中(選択肢を選ぶこと=WPSへのアクセス)
    ↓
  一時データファイルの読み込み
    ↓
  スクリプトデータの読み込み
    
  スクリプトに従って処理
    ↓
  結果の表示と一時データファイルへの書き出し

 ■ログアウト
    ↓
  一時データファイルの読み込み
    ↓
  スクリプトデータの読み込み
    
  スクリプトに従って処理
    ↓
  結果の表示とユーザーデータの保存

2.ファイル構成

 圧縮ファイル(拡張子が.lzhやtar.gz)を適当なディレクトリに展開するといくつかのファイルがつくられます。下の例をパーミッション等の参考にしてください。

ファイル構成例  ......... permission

wps_200/         ......... 700 or 705
(ファイル)
      /wps.cgi     .... 700 or 705
      /wps_base2.pl  .... 600 or 604
      /config.cgi   ..... 600 or 604
(サブディレクトリ)
      /data/    ......... 700 or 707
           /user.dat .... 600 or 606
           /temp.dat .... 600 or 606
      /lock/    ......... 700 or 707
           /lock
      /script/  ......... 700 or 705
             /sampl.dat.. 600 or 604

 wps_200(このディレクトリは任意の名前)のパーミッションは705か700に設定してください。これに限らず、数字が小さい方がセキュリティは高まりますが、お使いのサーバの仕様によっては700などには設定できない場合があります。

 CGIが所有者権限で動く場合は700にすることができます(最近のプロバイダなどでは、所有者権限でCGI動く場合その旨がHPに記載されていることが多いです)。このディレクトリにはwps.cgi、wps_base2.pl、config.cgiといった、WPSのエンジン部分を設置します。

 wps.cgiを置くディレクトリに、さらにいくつかのサブディレクトリを設置します。dataディレクトリ(名前は任意)には、ユーザーのデータに関わるファイル群を置きます。このディレクトリには一時ファイルがつくられますので、パーミッションを、707にする必要があります。ただし、CGIが所有者権限で動く場合は、700にするべきです。

 lockファイルには、lockというなまえの空のファイルを設置します。このlockディレクトリ(lockファイルではない)には、起動されたCGIごとに固有の番号がついたロックファイルが生成され、ユーザーデータに二重に書き込みがされないようにします。そのため、lockディレクトリのパーミッションは、707にする必要があります。dataディレクトリ同様、所有者権限で動くサーバであるなら、700を推奨します。

(参考:ファイルのパーミッションとは異なり、ディレクトリのパーミッションが「書込可」の場合、ファイルを作成したり削除したり、ファイルの名前を変えることができます。これはファイルのパーミッションに関係しません。)

 最後に、scriptディレクトリをつくります。これは、必ずしも必要があるわけではないのですが、WPS-Scriptデータを設置する場所として利用すればファイルの管理がしやすくなるかもしれません。デフォルトでscript/になります。

 以上のサブディレクトリは全て、config.cgi中の設定により任意の名前をつけることができます。本文では以後、特に断りが内限りデフォルトの名前(data/ lock/ script/)を使って説明していきます。

3.設置方法

i.ファイル・ディレクトリ

 dataディレクトリにはユーザーデータファイルとテンポラリファイルを設置します。デフォルトでそれぞれuser.dat、temp.datとなりますが、config.cgiの設定を変えることによって、任意の名前をつけることができます。どちらのファイルもパーミッションを「書き込み可」にします。user.datは、実際の登録ユーザーのデータが書き込まれます。temp.datには、ユーザーがWPSにログインしている間のデータが書き込まれます。なお、拡張子がdatの場合、お使いのサーバによっては、ブラウザからデータ内容がみえることがあります。この場合、ファイルの名前を変えたり、拡張子をcgiにしてしまうことによって、回避してください。また、CGIが所有者権限で動くサーバでは、user.dat,temp.datのパーミッションを600にすることができます。

 scriptディレクトリには、WPS-Scriptデータを設置します。このアーカイブにはサンプルとして、簡単なチュートリアル用のデータが付属しています。これらのデータはパーミッションを第三者に対して絶対に「書き込み可」にしないでください。具体的には604ないしは600(CGIが所有者権限で動く場合)です。

 lockディレクトリは既に述べたように、lockという名前の空のファイルをおいておけば良いです。パーミッションは特に気にすることはありません(lockディレクトリは気にしてください)。

ii.設定ファイル

 WPSは、設定ファイルとしてwps.cgiと同じディレクトリにあるconfig.cgiを読み込みます。このファイル自体はPerlで記述されいていますので、書き間違えた状態でwps.cgiを起動すると、Wps Errorという文字とともに、エラー箇所が表示されます。

 設定ファイルのパーミッションは、所有者以外は「書込不可」にしてください。wps.cgiはconfig.cgiが所有者以外に書き込みを許可している場合、config.cgiを読み込まずにエラーを出して終了します。
 このため、Windows上で起動する場合config.cgiを読み込み専用に設定しないとエラーになります。いちいち読みとり専用に設定するのが面倒な方は、wps.cgiのBEGINで囲まれているブロック内の所定の位置をコメントアウト(行頭に#をつける)してください。

 設定ファイルの最初の数行は、動作チェックのさいに、日本語コードの判定用に使用されます。もっとも、このファイルでは日本語が必要になる箇所は1箇所だけなので、本当はどうでも良いのですが。

(表記について:n…数字 str…文字 url…ページのアドレス file…ファイル名 dir…ディレクトリ名)

テストモードの設定

$test=n;

 テストモードの設定です。CGIを設置したら、まず値を2にしてください。この状態でwps.cgiを起動すると、動作チェックを行います。動作チェックに入った時点でwps.cgi本体は正常に動作しています。さらにコメントの中に赤字の表示がなければ、WPSはシステム全体として正しく動作しうることになります。
 赤字が出ていればその箇所が青字になるように、設定ファイルやディレクトリ名、ファイル名を修正してくだださい。

 $testの値を1にすると、デバッグモードになります。通常WPSは、ブラウザの「戻る」や「再読込」を行うと、エラーを出して処理を終えるのですが、デバッグモードではエラーになりませんので、テストプレーの際に必須となるでしょう。全てが順調であることが確認できたら最終的に値を0にします。

データファイルの設定

$script_dir = 'dir';

 WPS-Scriptデータ(後述)を格納するためのディレクトリです。設定しなくて問題ありませんが、初期設定は`script/'になっています。後ろのスラッシュ / はディレクトリを表しますので必要です。$script_dirが設定されていると、WPSはWPS-Scriptを読み込む際に$script_dirを補ってファイルをみつけようとします。

$wps_datafile = 'file';

 WPS-Scriptデータ(後述)のメインデータの場所を表します。WPSはここに記述されたファイル名に、後で説明する$script_dirで設定されたディレクトリ名を補って、データを読み込みます。WPS-Scriptはいくつも分割できるのですが、WPSはまず一番最初にこのデータファイルを読み込んで処理を開始します。

$reg_datafile = 'file';

 WPS-Scriptデータの登録モード用データの場所を表します。WPS-Scriptは通常$wps_datafileで設定されたファイルを読み込みますが、ユーザーを登録するための処理に際しては、こちらで設定されたデータファイルを呼び出します。これは、$wps_datafileのデータ量を減らす為に設けられた設定です。WPSはここに記述されたファイル名に、先に説明した$script_dirで設定されたディレクトリ名を補って、登録用データを読み込みます。

ユーザーデータ管理関連の設定

$data_dir = 'dir';

 データ(WPS-Scriptデータではなく、ユーザーデータ)を保存するディレクトリを設定します。初期設定では data/ となっています。このディレクトリの元に、ユーザーデータファイルとテンポラリファイルを設置します。このディレクトリは必ず設定する必要があります。というのも、これらのデータを置くディレクトリは、書き込み可能になっていなければならないのですが、最近のサーバではCGIを置いているディレクトリが書き込み可になっていると起動できない設定になっているものが多いからです。

$user_file = 'file';

 ユーザーデータのファイル名を設定します。中身は一行につき一人のデータがカンマ,で区切られたものです。

$temp_file = 'temp.dat';

 テンポラリデータのファイル名を設定します。ログイン中のユーザーデータはここで管理され、ログアウトした時にユーザーデータファイルへとデータが移行します。

システム関連の設定

$jcode = 'file';

 WPSで日本語を扱う際にはjcode.plが必要です。jcode.plを持っていない方は入手する必要があります。

jcode.pl officiak page : http://srekcah.org/jcode/

$lock_dir = 'dir';

 ファイルロック用のディレクトリを設定します。WPSは一つのファイルに同時にアクセスすることのないよう、ロックをかけます。その際、OS依存のflockを使わずに、ロック中を示すファイルを作成しています。そのロックファイルを格納するのがこのディレクトリで、書き込み可でなければなりません。

$lock_file = 'file';

 $lock_dirに設置するファイル名です。このファイル自身に何か書き込んだり読み込んだりすることはないので、パーミッションを気にする必要はありません。このファイルが存在しない場合、WPSは「大変混雑しています」というエラーを出すでしょう。

$log_mode = n;

 WPSはユーザー登録時やログイン時にIPアドレスを記録することができます。$log_modeの値を1にすると登録時にだけ記録されます。値を2にするとログイン時にも記録されます。このデータは次の$log_fileで設定されたファイルに追加書き込みされていきます。

$log_file = 'file';

 $log_modeで1か2を設定した際に記録されるIPアドレスを書き込むファイル名を設定します。

$img_dir = 'dir';

 wps_img.cgiを利用する際にデフォルトで画像を置いておくディレクトリです。wps_img.cgiはほとんど利用価値がありませんので、この部分を設定する意味はたぶんほとんどないでしょう。詳細は別項にて扱います。

$max_user_num = n;

 ここで設定された値が、ユーザーを登録できる数の上限になります。

$max_temp_num = n;

 テンポラリファイルに書き込むことが出来る最大ユーザー数です。この値は小さめにしておいた方が良いでしょう。

$timeout = n;

 ログインしたユーザーが一定時間何もしない場合にセッションを無効にするまでの時間です。単位は秒です。タイムアウトしたユーザーは再度ログインしなければなりませんが、saveコマンドでデータがセーブされていない限り、タイムアウト時のデータは記録されません。

$deltime = n;

 登録したユーザーが一定期間ログインしなかった場合に強制的に登録抹消になるまでの時間です。単位は時間です。24 * 7 などのようにしておけば、計算が楽になります。

システムエラー時

$error_template = 'file';

 WPSはエラーを表示する場合、非常に簡素な画面になります。しかし、せっかく管理者がクールなデザインでゲームをつくっているのにエラー画面だけ浮いてしまうのも悲しいので、エラー画面はhtml形式のファイルにしておき、ここで設定しておけばWPSはテンプレートを読み込んでエラー画面にしてくれます。エラーメッセージは、テンプレートの中に<! error> という文字列を入れておくと置き換わります。

$body[0] = "str";
$body[1] = "str";
$body[2] = "str";
$body[3] = "str";
$body[4] = "str";

 以下順に、デフォルトのエラー画面における背景色、テキスト色、リンク色、既リンク色の指定をします。$error_templateが設定されている場合は無効になります。

$width = n (or "str");

 デフォルトのエラー画面の横幅です。

$errorback = 'url';

 デフォルトのエラー画面における戻るページのアドレスを指定します。

$modoru = "str";

 デフォルトのエラー画面で戻るページのリンクで表示される文字です。

(上3つの設定は$error_templateが設定されている場合は無効になります。)

iii.テスト起動

 まずWPSが動作するかを確認します。最低限、wps.cgiとconfig.cgiの二つだけがあれば、動作チェックは可能です。

 設定ファイルの中の$testの値を2にすると、動作チェックモードになります。このモードの時にwps.cgiを起動すると、CGIは各ファイルやディレクトリが存在するかどうか、パーミッションが正しく設定されているかどうかを調べます。WPSの設置がうまくいかない方は、必ずこのモードで走らせて正しく動作しているかどうか確認してみてください。

 WPSは、Perlのバージョン5.001以降でないと動きません。また設定ファイルが存在しなかったり、設定ファイルが正しく記述されていなかった場合は Wps Error : xxxxx というエラーを出して終了します。

(補足:WPSは乱数の種をしこむためにsrand()を使用していますが、Perlの5.004以降と以前とで若干の仕様の違いがあります。5.004以降であるならば、特に問題ありませんが、それより古いバージョンの場合は、wps.cgiを開いてコメントアウトしている箇所の指示に従って修正を加えてください。)

4.WPSの起動

i.準備

 WPSに初めて触れる方は、まずはサンプルデータを使って練習してみます。既にWPSになれている方は読み飛ばしてください。

WPS-Scriptデータの確認

 main.dat(通常WPS-Scriptデータ)とregist.dat(登録用WPS-Scriptデータ)を`script/'ディレクトリに設置してあることを確認します。

登録モードでwps.cgiにアクセスするページを作成

 wps.cgiを起動するために、wps.cgiにリンクをはります。このとき、登録モードとして起動する必要がありますので、wps.cgi?mode=regとします。もちろん、管理者の環境に合わせてリンク先を指定してください。

ログイン用にwps.cgiにアクセスするためのフォームを作成

 名前の入力欄のname属性は、"username"に、パスワード欄は"password"にしてください。

参考:
<FORM action="wps.cgi" method="POST"> ←あるいはGET
  お名前:<INPUT TYPE="text" NAME="username"><br>
パスワード:<INPUT TYPE="password" NAME="password">
<INPUT TYPE="submit">
</FORM>

 登録したユーザーは次回から入力フォームに自分の名前とパスワードを入れてwps.cgiにアクセス(ログイン)します。

(補足:入力フォームに入れたパスワードは平文でネットを流れていきます。ですから他でも利用しているような重要なパスワードを使うことは避けるべきです。SSLを使うという手もあるでしょうが…)

 登録、ログインともに問題なく動作すれば完了です。さあ、今度はあなたのオリジナルなゲームを作ってみましょう。とはいえ、WPS-Scriptになれるまでは、付属のTipsなどを参照して試行錯誤することになるかもしれません。

ii.WPS-Scriptデータの作成

WPS-Scriptのルール

一行目について

 perlやshellで書かれたCGIを一度でも設置してみた方は先頭行に#!ではじまる一文をみたことがあるはずです。WPSもこれを少し真似してWPS-Scriptデータの一行目は#で始まってモジュールを指定します。ここの指定を変えればモジュールを変更することができますが、実際にはwps_base.plとwps_base2.plしかないので通常`wps_base2'を指定してください。`.pl'は必要ありません。wps.cgiが補ってファイルを呼び出します。(本当は拡張モジュールの読み込みをする予定だったのですが…)

 「#wps_base2」という一文は、main.datとregist.dat(またはそれに対応するWPS-Scriptデータファイル)にだけ書きます。後で説明しますがopenによって読み込まれる追加のWPS-Scriptデータには#wps_baseはいりません。

コマンド及び処理群

 次に「コマンド」と「処理群」という概念について説明しておきます。WPSは「メッセージを表示しろ」とか、「選択肢を出せ」といったひとつひとつのコマンド(命令)を順々に処理していくことによって成り立ちます。このひとつひとつのコマンドがいくつか集まって「処理群」をつくります。

 WPSデータは処理群から処理群へと移動(goやcallというコマンドを使う)することによって処理が進みます。そしてグループ内の一つ一つのコマンドは上から順に実行されます。次のグループへのジャンプがない(goがないということ)時点で、(あるいはendなどの明示的に処理を終了させるコマンドを出したとき)データ処理は終了します。

 処理群には一意的な名前をつけます。これは行の先頭から書きます。そして処理群内の各コマンドは行の最初にタブ(TAB)を一つ入れて書きます(caseの「条件」だけはタブを2ついれます)。今のところ、一行につきひとつのコマンドしか書けません。

以下に簡単な例を示します

1 |#wps_base2
2 |Start
3 |	var->A B C
4 |	$A=1
5 |	mes->"\$Aの値は$Aです。"
6 |	go->Tugi
7 |Tugi
8 |	rand(10)
9 |	$RANDOM+1
10|	mes->"ただいまの乱数は$RANDOMです。"
11|	case{$RANDOM}
12|		(-3) mes->"3以下の値"
13|		(4)  mes->"きっかり4"
14|		(5-7)mes->"5から7の値"
15|		(8-) mes->"8以上の値"
16|go->Owari
17|Owari
18|	mes->"これで終了です。"

(便宜的に行番号をつけていますが、実際にはつけないでください。)

1行目:#wps_base2と書くことによってwps_base2.plを呼び出します。
2行目:行の先頭に処理群名「Start」。次の行からはタブをひとついれてコマンドを書きます。
3行目:変数(内部的に番号が振られている)に順にA,B,Cという名前をつけて使用することを宣言しています。実際に変数を使用するときは$A,$B,$Cの形で書きます。
4行目:変数$Aに「1」を代入。WPSでは原則として変数には数値しか代入できません(strというコマンドで特殊な変数に文字列を代入可)。
5行目:「$Aの値は1です。」とブラウザに表示されます。$の前に\をつけることで$がついていても変数とみなされません。
6行目:次のグループ「TUGI」に移動します。
7行目:グループ「TUGI」
8行目:0から9までの数を「予約変数$RANDOM」に代入します。
9行目:「ただいまの乱数は○です。」と表示。
11行目:条件分岐するためのコマンド"case"。下のかっこにはいっている数字が実際の条件です。
12行目:$RANDOMが3以下の時「3以下のの値」と表示されます。
13行目:$RANDOMが4の時。
14行目:$RANDOMが5以上7以下の時。
15行目:$RANDOMが8以上の時。
16行目:グループ「Owari」に移動
17行目:グループOwari
18行目:「これで終了です。」と表示。ここでもう別のグループに移動することがないので処理は終了です。

選択肢について

 menuというコマンドを使うと、選択肢を表示することができます。選択肢には全て数値が当てられています。ユーザーがこの選択肢を選ぶと、$SELECT_NUMという変数にその数値が代入されます。WPSではこの数値を利用してユーザーの選択に応じた処理を行っていくのです。

1 |#wps_base2
2 |Start
3 |	if{$SELECT_NUM >= 100} go->$SELECT_NUM
4 |	go->MENU
5 |
6 |MENU
7 |	mes->"次の選択肢を選んでください。"
8 |	menu(101)->"これは選択番号1です"
9 |	menu(102)->"これは選択番号2です"
10|101
11|	mes->"1番が選ばれました。"
12|	menu(1)->"もう一度"
13|102
14|	mes->"2番が選ばれました。"
15|	menu(1)->"もう一度"

3行目:もし$SELECT_NUMの値が100以上ならその数値と同じ名前の処理群に移動。
4行目:MENUという処理群に移動。これは3行目の条件に当てはまらなかった場合に行われる処理です。
8,9行目:それぞれ選択肢を表示をします。それぞれの選択肢は101と102という値を持っています。ユーザがどちらかの選択肢を選ぶと、WPSは再びStartから処理を始めますが、この時$SELECT_NUMの値が101か102なので、3行目の処理が行われます。

 このように、WPSはブラウザ上でユーザーが選択肢を選ぶたびに、WPS-Scriptデータの一行目から処理を行っていくのです。そしてcaseやifなどの条件分岐を利用して、ゲームを進めていきます。

条件分岐

 既にみたように、WPS-Scriptはユーザーの保持するデータを検討し、処理を行っていきます。WPS-Scriptにはcaseとifとselectという条件分岐用のコマンドがあります。このほかにも文字列用のstrck、userckなどがあります。

変数について

 変数は半角英数字(a〜z,A〜Z,0〜9,アンダーバー"_")から構成します。WPSの予約変数がかなりあるため、小文字を推奨。

WPS-Scriptにおける変数の代入には次の方法があります。

$HOGE=1		# $HOGEに1を代入
$HOGE+		# $HOGEに+1します
$HOGE+1		# これも$HOGEに1プラス
$HOGE+++	# $HOGEに3プラスします
$HOGE=$FOO	# $HOGEに$FOOの値を代入します
$HOGE+$FOO	# $HOGEに$FOOの値をたします

$HOGE-		# $HOGEの値から1引きます
$HOGE---	# $HOGEの値から3引きます
$HOGE-$FOO	# $HOGEから$FOOの値を引きます

 変数同士の計算に注意してください。これは普通のプログラミング言語とは全くかけ離れた表記となります。例えば$HOGEに$FOOの値を足したいときに$HOGE = $HOGE + $FOO とはできません。$HOGE + $FOO となります。

 宣言された変数(予約変数以外)は0以上99999999以下の整数値しかとりません。また、0以下の値になったときは強制的に0に、99999999以上の値の場合は99999999に設定されます。ただし時間変数のいくつかは例外的な振るまいをします。

 mes->"STR"など、大概のコマンドでは変数を展開することができます。$hoge=5なら mes->"$hogeだよ" とすることで、「5だよ」となります。ただし、mes->"$hogeDAYO!" というふうに、半角英数字アンダーバーを変数のすぐ後につづけてしまうと、WPSはそれを$hogeDAYOという変数にとってしまいます。このばあいは、変数の最後に"\"をつけることによって、その文字を変数の名前ではないとWPSに判断させます。mes->"$hoge\DAYO!" これで「5DAYO!」という表示に。

予約変数について

 次の変数はWPSが使用するために予約された変数です。変数宣言でこれらの名前を使うことはできませんが、スクリプト内で自由に使用することはできます。

$USERNAME	ユーザー名(文字列)
$PETNAME	ペット名(文字列)
$SELECT_NUM	選択肢番号が代入されます
$CLICK_COUNT	今回WPSにアクセスしてから選択肢をクリックした回数
$RANDOM		rand()を使うとこの変数に数値が代入されます
$IMG_NAME	画像の名前(imgコマンドで変更可能)
$IMG_ALT	画像のALT属性(imgコマンドで変更可能)
$IMG_WIDTH	画像の横幅(imgコマンドで変更可能)
$IMG_HEIGHT	画像の縦幅(imgコマンドで変更可能)
$MENU_AC	選択肢番号の不正チェック用変数
$Wps_var	使用しているWps.cgiのバージョンです
$Wps_Script_var	使用しているWPS-Scriptモジュールのバージョンです
$Process_end	値を1以上にすると直ちに処理を終了することができます
$Wps_Mode	テストモードの時、1以上の数値になります
$Browser	使用ブラウザ
$Strings_ck	strckコマンドを使用した際に利用します

($Browserは、"DoCoMo","J-PHONE","EZWEB","MSIE","Mozilla","Lynx"のいずれかを識別しますが、それ以外は"Unknown"となります。)

時間変数

 これも予約変数ですが利用頻度が高く重要です。

$PTIME	現在の時間
$STIME	ユーザー登録をした時間
$LTIME	前回のログイン時間
$ATIME	今回のログイン時間

 上の「時間変数」の値は1970年1月1日からの秒数です。

$PSTIME	登録してから現在までの時間
$PLTIME	前回ログアウトしてから現在までの時間
$PATIME	前回の選択肢選びから現在までの時間
$ASTIME	登録してから前回の選択肢を選んだまでの時間
$ALTIME	前回ログアウトから前回の選択肢を選んだまでの時間
$LSTIME	登録してから前回アクセスまでの時間
文字列変数

 $Strings0, $Strings1...$Strings15までの16個の変数は予約変数です。str(N)->"XXX"で $StringsN(nは対応する数字)にXXXという文字列が代入されます。ただしこの変数はデータに記録されないので気を付けてください。WPSでは、ペットネーム以外、文字列を保存することができないのです。

データに関して

 WPS-Scriptデータは改行をLF形式にしてください。WPSは自動的にとを最後につけます。この二つのタグ以外は管理者がmesコマンドによって出力しなければなりません。近々、テンプレートによる出力に対応する予定です。main.dat,regist.datの先頭行以外で行頭に`#'を置くとコメントと見なされます。

データの大きさ

 WPSはスクリプトデータファイルを最大64kbまでしか読み込めません。これは一度に読めるファイルサイズということではありません。openを使って何度かに分けて読み込んでも総計が64kbを越えることは出来ません。また、スクリプトデータの行数は最大3000行までに設定されています(コメントは除く)。これも総計が3000までということです。

ユーザーデータの書式

 ユーザーデータのフォーマットはインチキCSV形式(半角カンマは大文字のカンマに変換されてしまう)です。

$USERNAME,$PASSWORD,$PETNAME,$STIME,$LTIME,$var0,$var1,$var2.....

 ユーザーデータは上のような順番で一行毎に記録されます。$var0以降が管理者が自由に設定できる変数部分です。

テンポラリファイルの書式

 テンポラリデータのフォーマットもインチキCSV形式です。

$ID,$KEY,$PETNAME,$STIME,$LTIME,$ATIME,$IMG_NAME, $CLICK_COUNT,$MENU_AC,$var0,$var1,$var2.....

 テンポラリファイルには上のような順番で一時的にユーザーのデータが記録・処理されます。$MENU_ACは、その時点で選択可能な選択肢の番号を'&'でつなげたものです。これによって不正な選択を防ぎます。$IDは$USERNAMEと同じですが、$KEYは$PASSWORDに対応するのではなく、セッション管理のためのUNIQUEな文字列です。WPSはこのIDとKEYをみてユーザーが本人であるかどうかを判断しています。

スクリプトデータの著作権表示

 モジュールを呼び出すスクリプトデータ(#wps_base2の行ではじまるデータ)に ^AUTHOR="XXX" という行があると、XXX部分がフッターに表示されますので、データの作者表示などに利用すると良いでしょう。

5.WPS-Script リファレンス

i.索引

ver 1.0以降
	var
	演算(=+-*/%)
	mes
	go
	menu
	slect
	rand
	case
	open
	regform
	input
	submit
	regist
	save
	del
	end
	record
	img
	str
	userck
	strck
	call
	return
	split
	tvar
	addmenu
	if
	chgform
	chgpn
	chgpd
	insert
	strlgt
	userok
ver 2.0以降
	getuser
	setuser
	adduser
	chgoupn
	del(…ver.1.0の段階で存在するが機能追加された)
	特殊な時間変数

ii.リファレンス

var

 データで使用する変数の設定をします。WPSでは変数を使用するさいには予めvarで変数の名前を設定する必要があります。変数の名前は半角英数文字にします。varによって設定された変数は宣言した順番にそってユーザデータに記録されます。宣言の仕方には二種類あります。

例1: var->A B C
例2: var(9)->J

 例1では変数$A $B $Cが設定されます。WPSではユーザーデータに記録される変数は全て順番が固定しており(0,1,2,3...となる)、上の例ではユーザーデータファイルにはABCの順番で変数が記録されます。そのため、途中でvar->A C B などと変更するとデータが狂ってしまいます。そのためテスト段階で変数の順番を変えたり、途中に新たな変数を追加したときには、ユーザー登録しなおす必要があるでしょう。
 例2(例1を実行した後の話と仮定します)では変数データ10番目に$Jが設定されます(0から数えるから)。

 WPSは起動したときに、ユーザーデータを読み込みます。この時点では記録された変数は内部的に0から順番に番号がついているだけです。その後、スクリプトデータを読み込むことによって、変数に名前が与えられ、自由に変数を利用することが出来るようになります。WPSはend、save、registコマンドを実行したとき、ユーザーデータファイルに各変数の値を順番に記録します。
 変数は0から99999999の整数値しか代入できません(0以下は0に、99999999以上は99999999になる)。例外は$STIME,$PTIMEなどの時間変数で、これらは99999999以上の数が代入されても問題ありません(しかし加減計算の結果は0から99999999までしかとれません)。

 varで宣言できる変数は32個までです。それ以上宣言したいときはwps_base.plを改造してください(別にこれに限ったことではないですね…)。

	var->AA BB CC
	var(9)->JJ KK LL
	var->DD EE FF

 というふうにやると、まず1-3番目の変数が宣言されたことになり、次に10,11,12番目の変数が宣言され、最後に4-6番目の変数が宣言されたことになります。

演算(=,+,-,*,/,%)

 変数の数値計算。下の例を参照。

 $HOGE=1	# $HOGEに1を代入
 $HOGE+	# $HOGEに+1します
 $HOGE+1	# これも$HOGEに1プラス
 $HOGE+++	# $HOGEに3プラス
 $HOGE=$FOO	# $HOGEに$FOOの値を代入
 $HOGE+$FOO	# $HOGEに$FOOの値をたします

 $HOGE-	# $HOGEの値から1引きます
 $HOGE---	# $HOGEの値から3引きます
 $HOGE-$FOO	# $HOGEから$FOOの値を引きます

($HOGE+ が$HGOE+1であり、$HOGE++ は$HOGE+2になることに注意)

 かけ算とわり算、余り

 $HOGE * $FOO	# $HOGEに$FOOをかける
 $HOGE * 10	# $HOGEを10倍する
 
 $HOGE / 10	# $HOGEを10で割る
 $HOGE / $FOO	# $HOGEを$FOOで割る

 [注意:小数以下は切り捨てになります!]

 $HOGE % 10	# $HOGEを10で割ったときの余り
 $HOGE % $FOO	# $HOGEを$FOOで割ったときの余り

 時間変数に関しては、$VAR = $PLTIME_DAYなどのようにして、イコールで他の変数に代入することができます。これは代入だけです。代入した変数に対する計算は通常通りですが、値が99999999を越えることはできません。

mes->"xxx"

 文字列を表示します。

mes->"STRINGS"

 文字列は「"」で囲む必要があります。変数の$の前に\をつけると$を表示します。mes->"\$HOGE" で「$HOGE」と表示されます。もし\をつけないと$HOGEの値を表示していまいます。また、\nで改行をいれます。

 mes->"[-- img --]"とすることでwps_img.cgiを呼び出します。

go->XXX

 別の処理群に移動します。XXXの部分は半角英数・アンダーバーを使用してください。mesと違い、通常はダブルクォーテーションで囲まなくても利用できます。

go->START

 go->$VAR というふうに変数の利用が可能です。例えば、go->$SELECT_NUMとすると、menu(200)->"HOGEHOGE" を選択したときに、"200"という処理群へ移動することになります。

さらに、go->"$Strings"も可能です。

	str(0)->"TEST"
	$var = 5
	go->"$Strings0$var"

go->"TEST5" と同等。「"」を忘れずに。

menu(n)->"xxx"

 選択肢を表示します。選択肢番号をつける必要があります。

menu(5)->"Click"

 「クリック」と表示される選択肢が表示されます。この選択肢には「5」という選択肢番号がつけられます。menu($VAR)->"STRINGS" も可能です。

	$HOGE = 100
	str(0)->"進む"
	menu($HOGE)->"$Strings0"

menu(100)->"進む"と同等です。

select(n)

 選択肢番号に基づいてコマンドを実行します。

select(5) go->NEXT

 選択肢番号5を選んだ時、go->NEXTを実行します。なお、これは

	case{$SELECT_NUM}
		(5) go->NEXT
あるいは
	if{$SELECT_NUM == 5} go->NEXT

と同じ結果になります。

rand(n)

 rand(N)で、0からN-1までの乱数を$RANDOMという変数に代入します。Nは0以上の整数です。また、rand($VAR) というふうに変数を代入することが可能です。rand(n)->$VARで$VARに直接値を代入できます。

case{VAR}

 case{$A}で$Aの値によって条件分岐することができます。

	case{$A}
		(0-9) go->001
		(10)  go->002
		(11-) $POINT+50

 条件分岐は重要ですので、別項でも説明をしています。

open->"xxx"

 スクリプトデータを追加で読み込みます。

open->"next.dat"

 config.cgiで設定した$script_dirにあるnext.datというスクリプトデータファイルを読み込みます。追加データには#wps_baseという一行は必要ありません。$script_dirを設定していない場合はディレクトリ名も補う必要があります。

regform(n)

 ユーザー登録用のフォームをつくります。regform(n)で、nが1以上の値の時、nは選択肢番号となります。n=0の時、フォームの終了を意味します。

input(n)->a,b

 データ入力用の欄をつくります。n=1の時、ユーザーネームの入力欄、n=2の時、ペットネームの入力欄、n=3の時、パスワードの入力欄、n=4の時、パスワードの確認用の入力欄になります。パスワードと確認用の入力欄は同時に使う必要があります。aはsize、bはmaxlengthの値です。

	input(2)->a,b,"XX"

 という表記が可能です。これは、ペットネームに関してのみ、入力フォームに初期値「XX」を設定できるということです。

 また、chgpd用にn=5指定も存在します。

submit->"xxx"

 value="xxx" の submitボタンをつくります。

regform,input,submitの使用例:

	regform(3)
	mes->"    お名前:"
	input(1)->16,16
	mes->"  パスワード:"
	input(3)->16,16
	mes->"確認でもう一度:"
	input(4)->16,16
	submit->"登録"
	regform(0)

 上の場合、登録ボタンを押すと選択肢番号3の選択肢を選んだことになります。( regform(3)だから )

regist

 ユーザーデータファイルに登録します。登録モードでしか利用できません。

save

 その時点でのユーザーデータをユーザーデータファイルに記録します。

del

 ユーザー登録データから記録を削除します。

end

 ユーザーデータファイルにデータを書き込んで、テンポラリファイルから一時ユーザーデータを削除し終了します。

record->"xxx"

 指定されたファイルにユーザーデータを追加書き込みします。データの恒久保存や、リストアップなどに利用できます。record->"FILE" 0というふうに、スペースの後に"0"(数字のゼロ)をいれると、ファイルの先頭行にデータを記録します。これにより、新しいデータを前の方に持ってくることができます。

 この記録ファイルは書き込み可能なディレクトリに存在する必要があります。

img->"xxx",a,b,"yyy"

 wps_img.cgiはこのコマンドで設定された画像を表示します。xxxは画像ファイル名、aは画像の横幅、bは高さ、yyyはALTを設定します。  mes->"[-- img --]" で wps_img.cgiを呼び出します。

 config.cgiの$img_dirで設定されたディレクトリにある画像を呼び出します。

 wps_img.cgiが必要になるのは、画像ファイルの表示がWPSの処理よりも早くこなければならない場合です。例えば、ユーザのステータスに応じて画像が変わるとします。ステータス処理よりも表示のために先にmesを使う場合にこのコマンドを利用することで対処が可能になるわけです。しかしながら、今後このコマンド及びwps_img.cgiは廃止される可能性があります。

str(N)->"XXX" (Nは0から15までの数字)

 $StringN(Nは対応する数字)に文字列 XXX を代入。この変数はテンポラリファイル、ユーザーデータファイルに記録されません。他の変数同様 mes コマンドでこの変数を利用することができます。

	str(0)->"ほえほえ"
	str(1)->"$Strings0の冒険"

 $Strings0に「ほえほえ」という文字列が代入される。$Strings1に「ほえほえの冒険」が代入される。str(-1)->"XXX"というふうに、-1を入れると$PETNAMEを変更できます(str(-1)->"$VAR"も可能)。

userck COMMAND あるいは userck->"FILE" COMMAND

 ユーザー名登録時にこのコマンドを使うと既に他の人がその名前を使っていた場合の例外処理が出来ます。付属のサンプルデータ・チュートリアルを参照してください。

	userck go->NG_SYORI

 上の例は登録名が既に別の人に使われていた場合処理群「NG_SYOTI」に移動します。

	userck->"FILE" COMMAND

 上の例はFILEという名前のファイルにユーザー名が記録されていないかをチェックします。これをrecordによってログに記録されたデータファイルに対して行うことによって様々な用途が得られるかもしれません。

strck($STR)->"XXX" COMMAND

 userckとよくにていいるコマンドです。$STRに格納されている文字列をチェックし、「XXX」と一致していた場合に例外処理COMMANDを行います。かっこ内に$REG_USERNAMEという変数を入れるとユーザー登録時の例外処理userckと同等かそれ以上のことができます。

	strck($REG_USERNAME)->"ほえほえ" go->NG_SYORI

 上記の例ではユーザー登録時に「ほえほえ」という名前を登録しようとするとNG_SYORIに移動します。

 strckで文字列と一致した場合、$Strings_ckという変数に1が代入されます。一度1が代入されるとその回のアクセス処理が終了するまで有効となります(アクセス処理の度に0にリセット)。この変数に0を代入することもできます。

 strck($VAR)->"$HOEHOE" というように、チェックする文字列の側にも変数を利用できます。

call->XXX

 処理群名XXXへ処理を移動します。移動先の処理が終了すると再びcallコマンドを使用した処理群へ戻り次の行から処理を再開します。call先の処理群で再びcallを利用することはできません。

return

 call先で利用することにより直ちにcallを呼び出した場所へ戻ります。

split($VAR,N)->$VAR2

 変数$VARの左からN桁目の数字を別の変数$VAR2に代入します。Nの部分は変数を使っても構いません。

split($VAR,$VAR2)->$VAR3

 このコマンドを活用するには、予め特定の変数の桁数が一定になるように決めておくべきです。また、WPSは変数を数字として扱うので、一番左の桁は0以外の数字にしないと、セーブするさいに、桁数が変わってしまいます。例:$VAR=00100は、ユーザーデータに記録される段階で、$VAR=100に変わってしまいます。そのため、$VAR=10000などとして、一番左の桁だけは、1以上にしておく必要があります。

tvar->VAR

 ユーザーデータやテンポラリデータに記録されない変数$VARを宣言できます。宣言後は、varで宣言された変数と全く同様に扱うことができますが、データの記録はされませんので、WPS起動中の処理にしか使えません。varと違い、変数の数に制限はありません。また、var同様、tvar->VAR1 VAR2 というふうに、一度に複数宣言できます。

addmenu(n)

 menu以外で選択肢をつくりたい場合があるでしょう(たとえば、セレクトタグなどや、Javescriptなどを利用したい場合)。そのときに、通常では、不正な選択ができないようにmenuコマンドで指定された選択肢しか選ぶことができません。そこでこのaddmenuコマンドで指定された番号も選択肢として使用できるようになります。

(例1)
	addmenu(10)
	addmenu(20)
	mes->"<FORM action="./wps.cgi">"
	mes->"<INPUT TYPE="hidden" NAME="mode" VALUE="sel">"
	mes->"<INPUT TYPE="hidden" NAME="id" VALUE="$ID">"
	mes->"<INPUT TYPE="hidden" NAME="key" VALUE="$KEY">"
	mes->"<INPUT TYPE="hidden" NAME="dummy" VALUE="123">"

	mes->"<SELECT NAME="select_num">\n"
	mes->"<OPTION value="10">選択1"
	mes->"<OPTION value="20">選択2"
	mes->"</SELECT>"
	mes->"<INPUT TYPE="submit">"
	mes->"</FORM>"

 通常モードではmode属性の値をselにします(登録モードでの利用では値をregに)。select_num属性の値が、選択肢の値(通常 menu(n) で表されるもの)になります。これで、通常はできないような方法で選択肢をつくったり、METAタグで一定時間たったら強制的に別の選択肢を選ばせるなどができるようになります。なお、dummyの値は好きにしてかまいません。INPUTタグは、上の例を定型にしてしまえばよいでしょう。

(例2 登録モード時の場合)

	addmenu(4)
	addmenu(5)
	addmenu(6)

	mes->"<FORM action="./wps.cgi">\n"
	mes->"<INPUT TYPE="hidden" NAME="mode" VALUE="reg">\n"
	mes->"<INPUT TYPE="hidden" NAME="id" VALUE="$ID">\n"
	mes->"<INPUT TYPE="hidden" NAME="key" VALUE="$KEY">\n"
	mes->"<INPUT TYPE="hidden" NAME="dummy" VALUE="123">\n"

	mes->"<SELECT NAME="select_num">"
	mes->"<OPTION value="4">初級"
	mes->"<OPTION SELECTED value="5">中級"
	mes->"<OPTION value="6">上級"
#------(略)


(例3 10秒経つと強制的に移動)
	mes->"<META HTTP-EQUIV="Refresh"
 CONTENT="10;URL=wps.cgi?id=$ID&key=$KEY&select_num=100&dummy=123">"
if{ 式 } コマンド

 $HOGE と $FOO を比較して、$HOGEの方が大きい値の時に何か処理を行いたいという場合、ifを使うと楽です。

	if{$HOGE == $FOO} mes->"\$HOGEと\$FOOの値は等しいです"
	if{$HOGE > $FOO}  mes->"\$HOGEの方が大きいです"
	if{$HOGE >= 5}    mes->"\$HOGEの値は5以上です"
	if{$HOGE != $FOO} mes->"\$HOGEと\$FOO方は等しくありません"

 気をつけることとして、式は{}で囲みます。比較は <,>,<=,>=,!=,== が出来ます。等号・不等号と変数、数字の間はスペースであけます。

 and や or は使用できませんが、次のような方法で擬似的にandの機能を果たします。

	if{$HOGE > 3} if{$HOGE < 10} go->SYORI

 上の例では$HOGEの値が4〜9の時、SYORIという処理群に移動します。上では2つですが、実際にはifはいくつでもつなげられます。

quit

 通常、goのない処理群の最後の行まできたところで処理が終了しますが、quitは関係なく途中で処理を終了します。これは内部的には$Process_endに1を代入しているだけです。

chgform(n)

 通常モードにおけるペットネーム及びパスワードの変更を可能にするフォームをつくります。chgform(n)で、nが1以上の値の時、nは選択肢番号となります。n=0の時、フォームの終了を意味します。nの部分には変数を利用することもできます。

	$HOGE = 10
	chgform($HOGE) #←chgform(10)に同じ
input(5)->a,b

 新たに数値5が代入できます。これはパスワード変更時に、以前のパスワードを入れる入力欄を生成します。ちなみにn=1の時、ユーザーネームの入力欄、n=2の時、ペットネームの入力欄、n=3の時、パスワードの入力欄、n=4の時、パスワードの確認用の入力欄になります。パスワードと確認用の入力欄は同時に使う必要があります。aはsize、bはmaxlengthの値です。

chgpn

 ペットネームの変更をデータに登録します。

chgpd

 パスワード変更をデータに登録します。

パスワード及びペットネーム変更の例
MAIN
	menu(402)->"ペットネームの変更"
	mes->"<br>\n"
	menu(410)->"パスワードの変更"
	go->Footer

402
	mes->"今のペット名:$PETNAME"
	chgform(403)
	input(2)->8,8
	submit->"ok"
	chgform(0)
403
	strck($reg_petname)->"" go->403_NG
	chgpn
	mes->"新しいペット名:$PETNAME"
403_NG
	mes->"名前を入力してください<P>"
	go->402

410
	mes->"$USERNAMEのパスワード変更<br>"
	chgform(411)
	mes->"今までのパスワード<br>"
	input(5)->8,8
	mes->"<br>"
	mes->"新しいパスワード<br>"
	input(3)->8,8
	mes->"<br>"
	mes->"確認でもう一度<br>"
	input(4)->8,8
	mes->"<br>"
	submit->"ok"
	chgform(0)
411
	strck($reg_password1)->"" go->411_NG
	strck($reg_password2)->"" go->411_NG
	strck($reg_password3)->"" go->411_NG
	mes->"$USERNAMEのパスワードを変更しました<br>"
	chgpd
411_NG
	mes->"パスワードを正しく入力してください<P>"
	go->410
insert($HOGE,N)->"Xn"

 $HOGEの左からN桁目にXn式の計算を行う式は+,-,=と一桁の数字からなります。+1あるいは単に+ならその桁に+1。+NはN足します。-は同様に引き算です。桁の値が9の時、+してもそれ以上数値は大きくなりません。同様に桁の値が0の時、-してもそれ以上数値は小さくなりません。=NはNを代入します。当然数値は0-9の間しかとれません。$HOGEの現存する桁数以上の桁を指定した場合はエラーになります。

 insert($HOGE,N)->"$var"なども可能です。

strlgt($HOGE)->$FOO

 $HOGE内の字数を半角を1文字として数えます。文字変数に対しても行えます。全角文字は2文字として数えます。数えた値は$FOOに代入。

	str(0)->"あいうえお"
	strlgt($Strings0)->$VAR

 上の例では$VARには10が代入されます。

userok

 wps_img.cgiで画像表示をする場合、ユーザー登録の段階でstrckやuserckで名前の判定を行うと、エラー画像が表示されてしまいます。これは、ユーザー名が確定されたかどうかをwps.cgi本体が判断することができないために生じる問題です。
 これを回避するために、名前が確定した段階で、userokというコマンドを使用します。入力されたユーザー名がuserckやstrckに引っかからずに済んだ段階で、userokをいれます。これにより、WPSは登録モードで名前が確定していることを判断し、正しくwps_img.cgiにユーザーIDを渡します。

getuser(n)->"filename"

 ユーザーデータのフォーマットに基づいて、filenameのn行目のデータを取り出します。これを使うと、他のユーザー情報を利用することができます。この場合filenameにはuser.dataかtemp.datを使います。但し、ディレクトリ名まで含めて記述する必要があります。

getuser(10)->"data/user.dat"

 getuserを使うと、`$OU_'(other user)で始まる変数に値が代入されます。対応は以下の通り。

$USERDATA → $OU_USERNAME
$PETNAME  → $OU_PETNAME
$OU_PASS  … 使用不可
$STIME    → $OU_STIME
$LTIME  → $OU_LTIME
$VAR1     → $OU_VAR_1
(以下変数順に$OU_VAR_2,$OU_VAR_3...)

 getuserを利用するたびに変数の値は上書きされるので、必要ならば別の変数に待避させておきます。

 $OU_PETNAMEの値(文字列)を変更するには、str(-2)->"str" とします。入力フォームから$OU_PETNAMEを変更するには、chgoupnを利用します。

 getuser(0)->"filename" というふうに、nに0を指定すると、filenameの全行数が$OU_USERNAMEに代入されます。この値を使って繰り返し処理をすることができます。

	getuser(0)->"data/user.dat"
	$num = $OU_USERNAME
	go->Syori
Syori
	if{$num <= 0} go->End
	#ここに処理
	$num - 1
	go->Syori
	#↑ループ

 temp.datはuser.datと書式が大きく異なりますが、setuserは正しく対応する変数を代入してくれます。また、user.datやtemp.dat以外のファイルも指定できます(もちろんフォーマットが対応している必要があります)。

setuser(n)->"filename"

 $filenameのn行目に対し、データを書き換えます。書き変わるデータは`$OU_'で始まる一連の変数です。getuserの時に指定したnの値とsetuserで指定するnの値は一致しなければなりません。そうしないと、別のユーザーのデータを破壊してしまいます!

	str(3)->"data/user.dat"
	$num = 10
	getuser($num)->"$Strings3"
	$OU_VAR2 + 1
	$OU_VAR3 - 2
	setuser($num)->"$Strings3"

 temp.datを書き換えるときは慎重になる必要があります。他のユーザーが利用しているのですから。

adduser->"filename"

 filenameに対して、ユーザーデータを追加します。いうまでもなく追加される値は`$OU_'で始まる変数群です。このコマンドにより、任意のユーザーデータを任意のファイルにつくることが出来ます。このfileは書き込み可能なディレクトリにないとエラーを出します。

 setuserは対応する行がなければデータを書き換えることができませんが、adduserは付け加えるだけなので、空のファイルでもディレクトリとファイルのパーミッションさえ適切であれば書き込むことができるのです。

chgoupn

 str(-2)->"str" で$OU_PETNAMEを変更することができるますが、入力フォームからの変更を行うにはchgoupnを使います。ちょうどchgpnと同じような感じです。

del(n)-"filename"

 filenameのn行目のデータを削除する。nの指定方法は、-n(n以下) n(ちょうどn)m-n(mからn)n-(n以上)に対応します。また、変数を利用することも出来ます。

del($start-$end)->"data/user.dat"

 delやsetuser,adduserの利用は極めて慎重を期するべきです。簡単にデータを破壊することができてしまいます。これらのコマンドを利用する際には何度もテストを行ってください。

特殊な時間変数

 以下の時間変数は計算や代入などをすることができませんが、mes->"XXX"で使用したり、case{VAR}で使用することができます。

$xTIME_SEC		秒
$xTIME_MIN		分
$xTIME_HOUR		時間
$xTIME_DAY 		日
$xTIME_MON		月
$xTIME_YEAR		年
$xTIME_WEEK		曜日(日から土を0-6で表示)

 xにはP,S,L,Aがはいります。例:$PTIME_DAY…今日の日付 また_MIN,_HOUR,_DAYにはPSやPLなども利用できます。例:$PLTIME_DAY(前回アクセスからの日数)

※さらに細かい情報は同梱の補足ファイルを参照してください。

6.その他

i.利用規約

(WebPetSystemをご利用の際には下記に同意してください)

  1. wps2xxxx.lzh(xxxxはバージョン)内のファイル(本規約においてまとめてWebPetSystemと称します)の著作権はまかまか般若波羅蜜に属します。圧縮ファイルの中身を改変しない限りにおいて二次配布をして構いません。WebPetSystemは無償で利用することができます。
  2. WebPetSystemを利用して生じた直接的・間接的な一切の結果に対してまかまか般若波羅蜜は責任を負いません。
  3. WebPetSystemを改造するのはご自由ですが、オリジナルの著作権がまかまか般若波羅蜜にあることを明記してください。また改造したCGIは、オリジナルの著作権を明記したドキュメントを付属する限り二次配布をしても構いません。
  4. WebPetSystemを動作させて生じるサービスの営利利用は構いません。ただしWebPetSystemのファイル及びこれを改造したスクリプト(CGIやモジュール等)を代価と引き替えに提供することは禁止します。オリジナル同様、改造したスクリプトも無償で公開する必要があります。
  5. WebPetSystem用のScriptデータはそのデータをつくった人に著作権があります。

ii.サポートについて

 本CGIの設置に関するサポートは受け付けておりません。本CGIはある程度CGI設置に慣れた方を対象としています。
 設置に関すること以外のサポートはメールか掲示板にて。メールを送る場合はhtmlを添付しないでください。エラーなどに関しては出来るだけ詳しく情報を教えてください。

iii.謝辞

 WPS ver.2.0を完成させるにあたって多くの方のご協力を頂きました。ver.1.0期にお世話になりました杜野いちご様、うさ王様、はんみょう様、ver.2.0移行期にあたって様々な要望や励ましをくださいました、み様、L様、Y様、まそほ様、雪兵みかん様、その節は本当にありがとうございます。そしてここに挙げることはできませんでしたが、まだまだ本当にたくさんの方々に支えて頂きました。そして何よりもWPSに触れてくださいました全ての方々に心より感謝申し上げます。

iv.後書き

 というわけで、完成しましたよ。ver.2.0が。精も根も疲れ果てました。しかもなんだか安定して動くのかいまいち自信ないです。どうか許してやってください。

 vre.1.0でも書きましたが、私は小・中学校時代にゲームブックで遊びながら育ちました。殊に鈴木直人氏の『ドルアーガの塔』三部作や『ブラックオニキス』、『パンタクル』シリーズ…(いずれも創元推理文庫、絶版)は心に残るものがありました。本を開いていた瞬間、確かに私は一人の冒険者として「今とは別の時代、別の世界」に立っていたのです。
 時は流れてもこの思いは消えることなく心の何処かに残っていました。「育てゲー」をつくるために作成をはじめたWPSは、当初から「ゲームブックを簡単にweb上でつくれるようにしたい」という観点からつくられたものです。ですからゲームブックをつくるのに適しているはずです。もっともver.2.0はゲームブックの枠を越えて他のユーザーのデータを変更したり、全く独自にファイルにデータを蓄えるなどの機能がつきましたが。

 素晴らしいことに、2001年末から鈴木直人氏の新作や旧作を再び書店で手に取ることができるようになりました。鈴木氏以外の作品も楽しむことができそうです(創土社)。誠に嬉しいことです。もはや再びゲームブックがかつてのような盛り上がりをみせることはないでしょう。それでも、ゲームブックの醍醐味を忘れられない人のいる限り、形は変えて残りましょう。その一つの形態がwebコンテンツであることは言うまでもありません。WPSがその一助になることを願ってやみません。もちろん、WPSはシミュレーションやゲームブック以外の様々な可能性を秘めているはずです…と思いたいのですが、よくわかりません。

 私は実際にWPSを使って自分のサイトでいくつかの実験的な作品をつくってきました。今後もつくっていくと思います。ですが、私はWPSを利用した素敵な作品が誰かによって生み出されることを、そしてそういった作品に出会えることを心から楽しみにしています。WPSをご利用してくださった方からご一報いただければこれほど嬉しいことはありません。また、WPS自体についても、バグ報告やご要望、ご感想を頂ければ幸いです。

 いずれWPSはスクリプトを全面的に書き直して、ソースを見やすくすると同時に安定するものにしたいと思っています。もしかしたらWPS for SQL を先につくるかもしれません(これはもうある程度実験を行っています)。あ、でもそうなったら、ただでさえ利用しにくいWPSがなお利用されなくなるかも… 真面目な話、WPSなんぞ使わなくても、FlashやJava使えばいいんですものね… いやいやそうはいっても、ある程度慣れればWPSも使いやすいであろうことと、データ保存、セッション管理の面でCGIは有効であると信じたいです。

 さて、ここまでおつきあいしてくださってありがとうございます。またどこかでお会いしましょう。っていうか、私のサイトで掲示板に書き込んでくださればお返事しますので。ではまた〜 (まかまか般若波羅蜜@どんぞこCGI 2002年7月21日)