RIPscrip グラフィックスプロトコル仕様書

Remote Imaging Protocol


Copyright (c)  1992-1993
TeleGrafix Communications, Inc.
All Rights Reserved
Revision 1.54

翻訳:株式会社メディア・インターフェイス
電話:03-5261-0301

1993年7月19日


【イントロダクション】

 多くのBBSシステムのシステムオペレーターとして、私たちは、自分たちのBBSのために、なにか良いグラフィカル・ユーザインタフェース (Graphical User Interface) の方式はないものか、と考えていた。多くのシスオペと同様、私たちは多くの方式を見つけた。けれどもそれらはすべて「帯に短したすきに長し」だった。機能が不完全だったり、組込が難しかったり、あまりにも複雑だったり、あるいはグラフィックス開発の道具に欠けたりしていた。要するに、私たちは落胆した。
 それで、私たちは、自分たちの独自のグラフィクス・スクリプト言語 (Graphical Script Language) を書くことに決めた。
 RIPscrip とは、"Remote Imaging Protocol スクリプト" 言語、を意味する。このグラフィカル言語は私たちの、 BBSコミュニティのグラフィックスへの要求への答えであって、BBSシステムに組み込んで実用的に使用するための高機能のツールを持っている。
 RIPaint、 RIPdraw、 RIPterm あるいは RIPscrip 開発ツール( RIP2C、 RIP2PAS など)、についての詳しい情報が必要な方は、次の所に連絡を取ってほしい。

TeleGrafix Communications, Inc
16458 Bolsa Chica (Bolsa Chica) #15
ハンティントンビーチ、CA、92649
電  話:(714)379-2131
 ファクス:(714)379-2132
 BBS: (714)379-2133( ArenaBBS、Major BBS)32回線)

 [訳注]TeleGrafix社はバージニア州に移転したため、この連絡先は現在は使用できない。日本国内では、リップジャパン株式会社(TEL. 03-5744-7171)へ連絡をしていただきたい。


【改訂履歴の記述法】

 このドキュメントは、改訂履歴を含んだドキュメントである。RIPscrip には、何度か改訂が加えられ、仕様が変更されている。付加・変更の加えられた部分は、ドキュメントの右端のマークで容易に知ることができる。変更のあった段落の右端には、 RIPscrip プロトコル規定 (RIPscrip Protocol Specification) の v1.54 の改訂で変更が加えられたことを表すシンボル「 > 1.54」がある。この表記は、変更された部分をすばやく容易に知ることができるように加えられた。
 [訳注]この区別は日本のユーザーには意味が少ないので、削除した。


【RIPscrip 言語の使用】

 RIPscrip 言語は公開が許されており、TeleGrafix Communications, Inc は、この言語の使用をフリーライセンスとしている。フリーライセンスによって、私たちはこの言語が他のソフトウェア製品の開発に使われることを意図している。しかし、RIPscrip はパブリックドメインであるわけではない。TeleGrafix社は RIPscrip 言語の著作権を保持している。(訳注:現在のバージョンでは、フリーライセンス制は変更されている。)
 RIPscrip、 RIPaint、 RIPdraw、RIPterm は TeleGrafix Communications, Inc の商標である。もしあなたが RIPscrip を使う製品を作るなら、あなたのプログラムの "About Box" とドキュメンテーションの中で、その製品が RIPscrip を使用していることと、商標に関する注意書きが必要である。
 また、製品の名前にRIPterm、 RIPaint、 RIPdraw、およびRIPterm を使用してはならない。
 これらの問題に関して質問があれば、714/379-2131(訳注:現在は使用不可)において TeleGrafix Communications, Inc. と連絡を取っていただきたい。


【定義】

 RIPscrip はオンラインでのグラフィックス表示のための、テキストベースのスクリプト言語である。このスクリプト言語は、拡張アスキー (Extended ASCII) 文字の使用を避け、7ビットの ASCII 文字だけで構成されている。8ビットのデータ通信をサポートしていない、 X.25 及びその他のネットワーク上での送信が可能である。RIPscrip では、RIPscrip のコードと、プリント可能なASCIIテキスト、さらに事実上の標準になっている ANSI 及び Vt100 の制御コードが混在可能である。RIPscrip はダイナミックにどれがグラフィックスでどれがテキストかを識別し、それぞれ別のウインドウ(グラフィックスウインドウとテキストウインドウ)に、正しく表示する。もしあなたが独自のコマンドを使用したいなら、RIPscrip にはそのための空領域がある。


【どのように RIPscrip は働くか?】

 RIPscrip はグラフィック表現に、非常に柔軟で効率的なスクリプト言語を使う。その効率性は、コンパクトな記述と、開発方針に由来している。それは、データ伝送の効率化と強力な画像編集能力(例えば RIPaint を使った)を実現する、ラスタ指向に代わるオブジェクト指向である。この言語は、実に何兆という異なったグラフィックスコマンドを、必要に応じて組み込めるように、制限のない構造を採用している。RIPscrip は閉鎖的な独自規格ではなくて、外部からの要求に対して開かれている。

 以前のグラフィカルスクリプト言語(たとえば avatar と Skypix)においては、どのグラフィックス命令を実行するかを示すために、特別な制御文字を使用していた。これは伝送文字がプリント可能な ASCII テキストに限定されたシステムの上で使用することを妨げる。伝統的なスクリプト言語では、処理内容を表現するために英語の単語を使っている( たとえば、"BOX 0,0 100,50")。こうすると、信じられないほどデータが大きくなる。特に、大抵の場合単純とは言えないばかりか、何百何千もの個別のグラフィック処理( eg、ライン、円、フィル、テキストなど)を必要とするイメージを描画するようなときに顕著である。それを念頭におくと、人間が読めるスクリプト言語は、従来のような比較的限定されたバンド幅のモデムには全く不適当であった。

 だから、この言語を開発する際の主な戦略は、バイナリーコードを使用しないことで、可能な限り効率を高めるというものであった。こうすることで、どんなASCIIテキストベースのホストシステムに対しても、すぐに組み込めるようになった。この言語は、完全に ASCII 表示可能文字で成り立っているからである。私たちは今日のモデムと電話回線の限界から、この言語の読解不可能性が正当化されると考える。言語はコンパクトでなけばならない。


【RIPscrip プロトコル − 一般的な構造 −】

 ここからのドキュメントで、 RIPscrip プロトコル規定 (RIPscrip Protocol Specification) のバージョン1.54までの RIPscrip コマンドを記述する。

 RIPscrip はグラフィックコマンドを10のレベルに分けて組織化している(0の低いレベルから、9の高いレベルまで)。レベル - 0コマンドは RIPscrip の基本的なコマンドである。システムの基本的な図形要素はすべてレベル - 0コマンドであり、線、長方形、円、カラー、フォントなどのコマンドラインを含んでいる。RIPscrip の各レベルは、順々に高い概念を持つようになっている。例えば、レベル - 1コマンドには、マウス領域、アイコンとフォーマット済みテキスト領域がある。

 基本的な文法は次の通りである:

1. RIPscrip コマンドは、テキストの行頭から開始される。行の中央に置かれた RIPscrip コマンドラインは、文字テキストとして取り扱われる。これは人々が電子会議メッセージ中に、有害な命令や類似のいたずらを行うコードを入れることを妨げる。これへの唯一の例外が、項目6の「長い行の分割」と、項目12の「代理 RIPscrip 起動シーケンス」で述べられている。

2.RIPscrip コマンドラインは感嘆符(!)から始まる。

3.個々の RIPscrip 命令は、縦線(|)のデリミタによって開始される。

4.複数の RIPscrip コマンドは、デリミタ(縦線)で分割されて、同じ行の上にまとめることができる。

5.RIPscrip コマンドあるいはコマンドラインは、バックスラッシュ(\)を使用して、複数の行に分割できる。こうすれば RIPscrip 命令行を右端マージンに従わせることができ、2行にまたがることを避けることができる。

 例:
    !|c02|L02030405|P0901020102010201020102\
    0102010201020102

6. RIPscrip では、 RIPscrip コマンドに標準テキストを混ぜることができる。もし RIPscrip コードとして識別できないテキストが、同じライン上でRIPscrip コマンドの後に現われたら、そのテキストは無視される(コマンドは無視されない)。 "!|" で始まらない行は、生のテキストとみなされ、 TTY テキストウインドウに流し込まれる(下の「8」参照)。

7. RIPscrip では、グラフィックウインドウ (Graphical Window) とテキストウインドウ (Text Window) が提供される。グラフィックウインドウには、すべての RIPscrip グラフィックスが表示される。テキストウインドウには生のテキストが表示される。生のテキストには、ANSI の色指定コードとカーソルの移動コード( Vt. - 100端末エミュレーションのサブセット)を含む。

8. RIPscrip コマンドの縦線 "|" に続いてレベル番号が記述される。もし "|" の後の第1番目の桁が数であるなら(1-9)であるなら、それは RIPscrip コマンドレベルである。もし第1番目の桁が1-9の数字ではないなら、そのコマンドはレベル - 0コマンドである。もし第1番目の桁が数字の1-9であり、そして2番目も同じく数字であるなら、それは RIPscrip レベルのサブレベルを意味する。

 例えば:
    !|L   RIPscrip レベル - 0、コマンド「L」
    !|1L   RIPscrip レベル - 1、コマンド L」
    !|15L   RIPscrip レベル - 1、サブレベル−5、コマンド「L」

 上記の例では、それぞれ、互いに混同されないユニークなコマンドである。サブレベルは、最大9レベルまで続けてもよい。(例えば "!|123456789<コマンド>")。

9.すべての RIPscrip コマンドは、コマンド文字を含む。レベル - 0コマンドでは、縦線のすぐ後にコマンド文字が続く。他のレベルの場合、コマンド文字はレベル数字の後に続く。コマンド文字には、数字以外のあらゆる文字が使用される。

10.コマンド文字のあとには、0あるいはもっと多くのパラメータが続く。コマンドが文字列を必要とする場合、常にラストパラメータとなる。数値のパラメータは、どのようなデリミタ(コンマ、ダッシュ、スペースなど)も持たない。文字数可変のパラメータが、ラストパラメータとして用いられることもある。これは最大の効率を考慮してのことである。数は36を基数として表現される。これによって、10進数形式と比べて3/5程度の桁数にまで、数値表現を圧縮できる。この数値表現方式は、専門的には「36進数」と呼ばれているが、「メガナム(MegaNums)」の愛称でもよばれる。0から9、AからFを使う16進数と異なり、 MegaNums は0から9の数字とアルファベット全文字、AからZを利用する。

11.感嘆符(!)あるいは縦線 "|" 自身は、バックスラッシュ(\)を前に置くことによって RIPscrip テキスト変数に表わすことができる。文字としてのバックスラッシュは、二重のバックスラッシュ(\\)で表される。

12.感嘆符を Ctrl-A(SOH)または Ctrl-B(STX)で置き換えれば、 RIPscrip シーケンスを 0 桁目以外の位置からはじめることもできる。BBS の99.9%は、ユーザに大部分の制御文字を入力することを許さないので、ユーザはコマンドラインの中で RIPscrip シーケンスを始めることはできないであろう。ただホストだけに可能である。これは過剰な RIPscrip シーケンスが電子会議やホストの他の部分にあふれないよう阻止する。

13.もし RIPscrip テキスト行の最後の数バイトがバックスラッシュであるなら、それらが行の継続マークと解釈されないように、特別に注意しなければなない。文字のバックスラッシュが危険な行末の位置に置かれなければならない場合、ダブルバックスラッシュ(すなわち、"\\")として明示されなくてはならない。危険な使用法なのだが、行の継続マークが行末に使われる時には、次のような3つのバックスラッシュがなければならない:

  !|@2233これは文字としてのバックスラッシュを行末に置いた\\\
  テキスト行である.

 これは次のテキストを(22,33)[meganum]の位置に出力する。

   これは文字としてのバックスラッシュを行末に置いた\テキスト行である.


【ANSI シーケンス(自動識別)】

 RIPscrip は主として非 ANSI のコマンドシーケンスを使う。しかしいくつかの状況において、特定の機能を実行するために ANSI シーケンスの使用が許される。種々の処理を行うために RIPscrip プロトコルには現在3つの異なる ANSI シーケンスが定義されている。それらは次の通りである:

ESC[! RIPscrip バージョン番号を照会。
RIPterm はRIPSCRIPxxyyvs と返答した場合 "xx" がメジャーバージョン番号(前ゼロつき)、"yy" がマイナーバージョン番号(前ゼロつき)、"v" が通信ソフトのベンダーコード(下記参照)、そして "s" がソフトウェアのサブバージョンのコードである。例えばRIPterm (ベンダーコード "1")V1.54 が返すシーケンスは RIPSCRIP015410 である。また、ベンダーコード"2"、v1.23、サブバージョンが "5" であれば、 RIPSCRIP012325 を返答する。

正規なベンダーコード (Vendor Codes) は次の通り:
コード  ベンダー
==================================================================
0 ノーブランド RIPscrip 通信ソフト
1  RIPterm ( TeleGrafix 社から)
2 Qmodem Pro (ムスタングソフトウェア (Mustang Software) 社から)

 この ANSI シーケンスはよく、RIPscrip 通信ソフトが端末で使用されているかを「自動識別」するために使われる。もし RIPscrip 非対応の通信ソフトがこの ANSI シーケンスを受け取っても、無視されるであろう。

ESC[0! ESC[! と同じ(上記参照))

ESC[1! すべての RIPscrip 処理を無効にする。
どんな RIPscrip シーケンスも、生のテキストと解釈される。

ESC[2! RIPscrip 処理を有効にする。
すべての RIPscrip シーケンスが解析され、処理される。


【その他/インフォメーション】

 このドキュメントの後半部分で、マウスフィールド とマウスボタンのリファレンスが記述される。特に、これらのタイプのコマンドが128まで同時にスクリーン上に存在できることを注意したい。これはあなたが128のマウスフィールド、128のマウスボタン、あるいは上記の組み合わせを持つことができることを意味する。それらの合計の数は128を超えることができない。
 
ユーザがスクリーンの上でマウスをクリックすると、すべてのマウス領域(マウスフィールドあるいはマウスボタンであるか否かにかかわらず)は、直近に定義されたものから最後のものまでスキャンされる。これは、もう1つのマウス領域と重なったマウス領域がユーザーにクリックされたら、直近に定義されたものが最初にマウスクリックを認識することを意味する。

 あなたが RIPscrip グラフィックスをサポートする通信ソフトを開発している場合、すべての定義済みテキスト変数を100%サポートすることは意図していなくても、少なくともそれらを認識して、何も手を出さない方がよい。たとえば、サウンドを作るためのテキスト変数があって、あなたがそれをサポートしないというような場合、その変数は無視すべきである。そうでないと、あなたのユーザのスクリーン上にダイアログ・ボックスが現れて、例えば $MUSIC$という変数のためのデータを入力するように言われてしまう!