------------------------------------------------------------------------ VOGUE(ヴォーグ)・並列処理機構内蔵型構造化言語コンパイラ for PC-E500 series Pocket Computer Ver. 1.02 (c)1991,92,93 N.Kon ------------------------------------------------------------------------ ■まえがき  VOGUEは、プロセスの並列動作機構を内蔵した構造化言語コンパイラ です。C言語に似た感じはしますが、C言語ではありません。組み込み関数 が豊富なので、ライブラリの管理に煩わされることなく、お手軽なプログラ ミングを楽しむことができると思います。 ■パッケージの内容 VOGUE Ver. 1.02 に含まれているものは次のとおりです。 -------------------------------------------------------------------- VOGUE … VOGUEの実行形式 VOGUEM … 機能縮小版VOGUEの実行形式 VOGUE DOC … いまご覧になっているもの FLOAT DOC … 浮動小数点型数値処理関数説明書 Q&A DOC … Q&A SCREEN DOC … 描画処理関数説明書 STDFUNC DOC … 標準関数説明書 GRAMMER DOC … 文法説明書 TECH DOC … テクニカルマニュアル PARA DOC … 並列処理関数説明書 LIB DOC … ライブラリ関数説明書 INTRO1 DOC … 入門書(基本) INTRO2 DOC … 入門書(応用) F&P VOG … ライブラリ関数 EVAL VOG … ライブラリ関数 STRINGS VOG … ライブラリ関数 SPLIT VOG … ライブラリ関数 ARGCHK VOG … ライブラリ関数 MALLOC VOG … ライブラリ関数 RUNTIME S … VOGUEのソースプログラム SCREEN S … VOGUEのソースプログラム DATABASE S … VOGUEのソースプログラム MAIN S … VOGUEのソースプログラム VOGUE S … VOGUEのソースプログラム COMPILE S … VOGUEのソースプログラム --------------------------------------------------------------------  また、ファイルサイズと検査用数値 (CRC32) は以下のとおりです。 -------------------------------------------------------------------- 1ec83629 38058 compile.s ab36b5e1 4699 database.s 48705978 13517 main.s 956a2dce 33721 runtime.s bca2ade2 19006 screen.s 5587a767 2217 vogue.s -------------------------------------------------------------------- ■動作環境  PC-E500 系の計算機。最低 32K バイトの本体メモリのみで動作します。 ■VOGUEを使用するための準備  VOGUEは本体だけで $b9800 からの 15Kbyte 弱を占めており、少な くとも $b9800 からがマシン語エリアとして確保してあることが必要です。 $b9800 からをマシン語エリアとして確保するためには    poke &bfe03,&1a,&fd,&b,0,&64,0    call &fffd8 とすれば良いでしょう。 ■ソースプログラムの記述方法  ソースプログラムの記述方法は2つあります。1つは何らかのテキストエ ディタを用いてソースファイルを作成するもので、もう1つは BASIC のテ キストエディタを用いて BASIC のソースプログラムを作る要領で行番号つ きのテキストファイルを作成するものであります。後者の場合、TEXT モー ドで記述することが条件となります。 ■コンパイル方法ならびにオブジェクトの扱い  VOGUEが既にメモリにロードしてあるものとして BASIC のコマンド から    call &b9800  …(A) でコンパイルを実行します。この場合、コンパイル対象となるソースファイ ルは BTEXT$ で指定されたファイルであり、オブジェクトはメモリ上のコン パイラの直後に作成されます。コンパイルは1パスで全ての処理を完了しま す。  コンパイルに成功すると "Compile end" の表示とともにオブジェクトプ ログラムの最終アドレスが示されます。このオブジェクトを実行するには    call &b9803  …(B) とすればよいでしょう。  VOGUEでは   (1)コンパイラと共存するオブジェクト(メモリ上に展開)   (2)コンパイラと共存しないオブジェクト(ファイル上に展開) の2つのタイプのオブジェクトを生成することができます。オブジェクトに 関するオプションを指定しなかった場合は(1)のタイプのオブジェクトが 生成されます。(2)のタイプのオブジェクトは、「オプションについて」 に示すようなオブジェクトに関するオプションを指定した場合に生成されま す。このオブジェクトの実行方法は「オプションについて」を参照してくだ さい。  (1)のタイプのオブジェクトをファイルとして作成したい場合は、コン パイル後に SAVEM をします。開始アドレスは $b9800、終了アドレスはコン パイル終了時に表示される数値、そして実行開始アドレスを指定する場合は $b9803 を、それぞれ指定します。 ■オプションについて  コンパイルする際にオ プションを指定すると対象ソースファイルやオブ ジェクトの出力先を変更することができます。用意されているオプションは 次の通りです。 ●S:ソースファイル(ストリーム)の指定 書式:−Sソースファイル名  対象とするソースファイルを BTEXT$ で指定されたもの以外のものに します。オプションの "S" とファイル名の間を空けてはいけません。 ソースファイルの種類としては ・(1)ファイル終端コードに $1a を、もし改行コードが使われ ているならば CR+LF($0d,$0a) を用いている、標準的なテキスト ファイル ・(2)TEXT モードで作成された行番号つきテキストファイルと 同様な形式のファイル ・(3)(1)に準ずるキャラクタ・ストリーム の何れかが期待されています。(1)と(2)はファイル先頭が$FF か否かで自動的に判別されます。(3)は "KYBD:" のようなキャラク タ・デバイスからの入力も可能であることを示唆しています。これらの フォーマットに従っていないものをソースプログラムとして指定した場 合のコンパイル結果については保証できません。 ●O:オブジェクトファイル(ストリーム)の指定:その1 書式:−Oオブジェクトファイル名  オブジェクトをメモリ上ではなく、ファイルとして出力するように指 定します。オプションの "O" とファイル名の間を空けてはいけません。 出力されるファイルは SAVEM で生成されるファイルと同様のフォーマ ットです。LOADM でロードできますが自動実行はしないようになってい ます。コンパイル中にオブジェクトファイルをランダムアクセスするこ とはないのでキャラクタ・ストリームも必要であれば出力先として指定 できます。  このオブジェクトを実行するためには、コンパイル後に生成されたオ ブジェクトを LOADM してから    call &b9800 とすればよいでしょう。  オブジェクトファイルに含まれるのはランタイムルーチンと生成され たオブジェクトだけであり、コンパイラ本体は含まれません。よってコ ンパクトなオブジェクトを得ることができます。 ●F:オブジェクトファイルの指定:その2 書式:−Fオブジェクトファイル名  オブジェクトをメモリ上ではなく、ファイルとして出力するように指 定します。オプションの "F" とファイル名の間を空けてはいけません。 出力されるファイルは SAVEM で生成されるファイルと同様のフォーマ ットです。LOADM でロードできますが自動実行はしないようになってい ます。コンパイル中にオブジェクトファイルをランダムアクセスするの でブロックデバイス(クラスタ管理のデバイス)上のファイルしか指定 できません。  このオブジェクトを実行するためには、コンパイル後に生成されたオ ブジェクトを LOADM してから    call &b9800 とすればよいでしょう。  オブジェクトファイルに含まれるのはランタイムルーチンと生成され たオブジェクトだけであり、コンパイラ本体は含まれません。よってコ ンパクトなオブジェクトを得ることができます。 ※”O”オプションと”F”オプションの違いは、コンパイル中にオブ ジェクトをどこへ出力するかの違いにあります。”O”オプションを 指定した場合は、すべてのオブジェクトをメモリ上に展開し、コンパ イルが終了した時点で初めてファイルへの書き込みを開始します。そ のために、出力先のファイルをランダムアクセスすることはなく、ま た、高速にオブジェクトを展開することが可能です。ただし、オブジ ェクトはコンパイラの後方に存在するフリーエリアに展開されるので、 このエリアに収まる程度の大きさのオブジェクトしか作成できません。 一方、”F”オプションを指定した場合は、オブジェクトのすべてを コンパイル開始時点からファイルへ出力します。コンパイル中はオブ ジェクトの書き換えが頻繁に発生するために、ランダムアクセスの出 来るデバイスしか指定できません。また、ファイルを頻繁にアクセス するためにコンパイル速度もあまり速くありません。しかし、作業を ファイル上で行なうために、このコンパイラで実行することの出来る 最大限の大きさを持つオブジェクトまで作成することが可能です。作 業内容に応じて”O”オプションと”F”オプションを使い分けると 良いでしょう。  さて、オプションの利用方法ですが、BASIC のコマンドから実行する場合 には   call &b9800"-sFOO.VOG とでもすればよいでしょう。オプションは大文字でも小文字でも構いません。 ■エラーメッセージについて  コンパイル中にソースプログラムの不備を発見するとコンパイラはその旨 をユーザーに報告し、コンパイル作業を中断します。その際、コンパイラは エラーの発生原因をエラーメッセージとして、エラーの発生した行番号と発 生原因として疑わしいシンボルを添えて報告します。なお、ソースプログラ ムの不備以外によって発生したエラーの場合は疑わしいシンボルとして 「(file?) 」が報告されます。エラーメッセージとその詳細は以下の通りで す。 Source not opened … ソースファイルを読み込むことがで きない Object not opened … オブジェクトファイルを作成するこ とができない Object write error … オブジェクトファイルの書き込みに 失敗した Bad option … 存在しないオプションを指定した Unexpected EOF … コンパイル途中でソースファイルの 終わりまで来てしまった Too long identifier … 名前が長すぎる(最大7文字) Syntax error … 何らかの構文違反が存在する Undefined identifier … 未定義の名前を使用しようとした Duplicate identifier … 重複してはいけない名前を重複させ ようとした ';' expected … ';' が必要であると思われる Type specifier expected … "char","int","pnt" のうちのいず れかが必要であると思われる Constant number expected … 定数が必要であると思われる(配列 宣言など) Illegal type of identifier … 期待されているものとは異なるタイ プの識別子が使用されている(左辺 値であるべき所に左辺値が存在しな いなど) '(' expected … 左小カッコが必要であると思われる ')' expected … 右小カッコが必要であると思われる ':' expected … ':' が必要であると思われる Table overflow … ユーザー定義の名前が多すぎる Type conflict … プロトタイプ宣言で宣言された型と、 関数本体の型が一致しない Undefined function exist … プロトタイプ宣言をしておきながら、 本体のない関数が依然として存在す る Memory exhausted … メモリが足りない Division by zero … ゼロで除算を行なおうとした User break … コンパイル中に [ON] キーの押下が 生じた  また、オブジェクト走行時にも致命的なエラーが発生するとエラーメッセ ージを表示して実行が中止されます。エラーメッセージとその詳細は以下の 通りです。 Memory exhausted … メモリが足りない Division by zero … ゼロで除算を行なおうとした User break … [ON] キーの押下が生じた  コンパイルを一度も行なっていない場合やコンパイル中にエラーが発生し た場合には、強制的にメモリ上のオブジェクトを実行させようとしても "User break" を表示して、実行を拒否します。 ■注意 ●ファイルの取り扱いには IOCS を用いていますが、ポケット・ディスク・ ドライブ (X:) は IOCS がサポートしていないために、これを取り扱うこ とは一切出来ません。これは実行中のオブジェクトについても同様です。 ●ドキュメント中のサンプル・プログラムは、容量に余裕のあるシステム上 で作成して動作することを確認したものです。容量に余裕のないシステム 上ではサンプルプログラムのロードができないことがあるかもしれません。 ●このコンパイラを使って作ったプログラムを公の場に発表しようとする人 がいないとも限りませんが、コンパイラの生成したオブジェクトプログラ ムのみを公開することはこれを厳しく禁止します。ソースプログラム単体 もしくはソースプログラムを付加したオブジェクトプログラムの形で公開 することを条件とします。 ●このプログラムの実行、または実行に係る取扱中に発生したいかなる損害 についても、これを免責とさせていただきます。 ■機能縮小版 VOGUE "VOGUEM" について Ver. 1.02 より、機能縮小版 VOGUE "VOGUEM" を同梱しています。VOGUEM は VOGUE と比べて ・描画処理関数が装備されていない ・浮動小数点型数値処理関数が装備されていない ・開始アドレスが $b8000 からとなっている という点が異なっています。VOGUE の説明文中で "$b98??" とある部分は "$b80??" と読み変える必要があります。 ■履歴 Ver. 1.00 (93/01/??) … ・ポケコン・プログラム集[1]に初版発表 ver. 1.01 (93/02/24) … ・strcmp の仕様をC言語と同一のものとした ・定数表現において 0x..., 0b... という表記 を可能にした ・局所 static 変数を取り入れた ・関数情報演算子 "?" と、関数呼び出し関数 "exec" を取り入れた ・プログラムカウンタを直接操作する setjmp,nearjmp 関数を取り入れた ・実行終了時に未クローズファイルハンドルを 強制的に閉じていたのを廃止した ・$BFBFF までのマシン語エリアをフルに使用 するようにした ・メモリブロック確保関数として sbrk2 を取 り入れた ・文字列処理関数として strup, strdown, strchr, strrchr を取り入れた ・文字列定数が本当の定数になった Ver. 1.02 (93/12/31) … ・関数パラメータを直接参照するための関数と して argpf を追加した ・機能縮小版を同梱 ■参考にしたもの ・B.W.カーニハン/D.M.リッチー 著 石田晴久 訳:「プログラ ミング言語C 第2版」,共立出版株式会社 ・近藤嘉雪:「yacc によるCコンパイラプログラミング」,ソフトバンク ・Niklaus Wirth 著 片山卓也 訳:「アルゴリズム+データ構造=プログ ラム」,日本コンピュータ協会 ・御手洗 毅:「BDS Cプログラミング」,工学図書株式会社 ・河西朝雄:「TURBO Pascal ハンディマニュアル」,ナツメ社 ・「PC−E500*PC−1480U活用研究」,工学社 ・足立茂夫:「Tiny-C compiler Ver.1 」,ポケコン・ジャーナル '90 Number 8 ・SONY:NEWS−OS リリース4.1R オンライン・マニュアル 他 ・MIT(マサチューセツ工科大学):X−WINDOWシステム (X11R5) ・加古英児:「VWRITE/VREAD for ESPRIT 」,Pocket Mailing-List on JUNET ・山田勝巳:「ポケコン・テクニック・ルーム 〜DDAによる描線〜」, PJ[電子手帳とポケコン] '91 Number 11 ・「’86 C−MOS IC規格表」,CQ出版社 ・近 成人:「MIDI信号制御の実験」,ポケコン・ジャーナル '90 Number 3 ・近 成人:「ESPRIT」,ポケコン・ジャーナル '91 Number 6 〜8 ■著作権等について  このプログラムの著作権は近 成人が所有します。アーカイブ内容を改変 しない限りアーカイブの再配布は自由です。譲渡もこれに準じます。 ■おわりに  良い感想、悪い感想、改良点、なんでも結構ですのでご意見をお寄せくだ さい。電子メールは以下のものが利用可能です。    ・ポケット通信 … ID = 1481 (N.Kon) [TEL: 03-3299-8661] ・NIFTYserve … KFD02231    ・JUNET     … kon@cs.titech.ac.jp, kfd02231@niftyserve.or.jp    ・Amateur Radio … JK1OSG Dec. 31st, 1993 近 成人