(57)【要約】      （修正有）【課題】ネットワーク上のコンピュータ間のコンピュータ・プログラムの記憶と転送とを光学的に制御して対話型プログラム使用を促進するコンピュータ化されたシステムとそれに伴なう方法を提供する。【解決手段】方法においては、アプリケーション・プログラムが複数の個別かつ独立なマシン実行可能コード・モジュールの形で第１のコンピュータの不揮発性メモリに記憶される。ネットワーク・リンクを介して送信された第２のコンピュータからの要求に応じて、第１のコンピュータはメモリからの選択されたマシン実行可能コード・モジュールのみを検索して、ネットワーク・リンクを介して該選択されたマシン実行可能コード・モジュールを第２のコンピュータに送信する。【選択図】図１
2009009584.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーション・プログラムを個別に独立してマシン実行可能である複数のコード・モジュールとして第１のコンピュータの不揮発性メモリに記憶し、ネットワーク・リンクを介して転送された第２のコンピュータからの要求に応じて前記不揮発性メモリからマシン実行可能なコード・モジュールの選択されたうちの１個を検索し、ならびに前記ネットワーク・リンクを介して該選択されたマシン実行可能なコード・モジュールを前記第２のコンピュータに転送することを含んでなり、前記第１のコンピュータがサーバー・コンピュータでありかつ前記第２のコンピュータがネットワーク上の第２のサーバーであり、さらに前記第１のコンピュータに指示された要求に応じてユーザー要求を前記第１のコンピュータから前記第２のコンピュータに転送して処理せしめ、この処理のために前記第２のコンピュータをして前記の選択されたマシン実行可能なコード・モジュールを要求させることを特徴とするネットワーク上においてコンピュータ間でのコンピュータ・プログラムの記憶と転送を制御する方法。
【請求項２】
前記第１のコンピュータのメモリに前記ネットワーク上の各第２のサーバーに関する応答時間を含んだリストを記憶し、前記応答時間を更新するに際して（ａ）エコーパックを前記第１のコンピュータから前記第２のサーバーに送りかつ（ｂ）前記第１のコンピュータにおいて前記エコーパックの送りと各第２のサーバーからの前記エコーパックに対する応答の受取りとの間の遅延を測定し、前記第２のサーバーの中から最も短い前記応答時間を有した第２のサーバーとして前記第２のコンピュータを選択することを特徴とする請求項１に記載の方法。
【請求項３】
アプリケーション・プログラムを個別に独立してマシン実行可能である複数のコード・モジュールとして第１のコンピュータの不揮発性メモリに記憶し、ネットワーク・リンクを介して転送された第２のコンピュータからの要求に応じて前記不揮発性メモリからマシン実行可能なコード・モジュールの選択されたうちの１個を検索し、ならびに前記ネットワーク・リンクを介して該選択されたマシン実行可能なコード・モジュールを前記第２のコンピュータに転送することを含んでなり、さらに前記不揮発性メモリ中にユーザー確認コードのリストを記憶し、前記第２のコンピュータからの要求を受けて要求中のユーザー確認コードを前記不揮発性メモリ中の前記ユーザー確認コードのリストと比較し、前記要求中のユーザー確認コードが前記リスト中のユーザー確認コードと合致した場合のみ、選択されたマシン実行可能モード・モジュールの検索と送信を続行することを特徴とするネットワーク上においてコンピュータ間でのコンピュータ・プログラムの記憶と転送を制御する方法。
【請求項４】
前記第２のコンピュータからの要求が暗号パケットであって、さらに前記要求中のユーザー確認コードと前記不揮発性メモリ中の前記ユーザー確認コードのリストの比較の前に、該暗号パケットを解読することを特徴とする請求項３に記載の方法。
【請求項５】
アプリケーション・プログラムを個別に独立してマシン実行可能である複数のコード・モジュールとして第１のコンピュータの不揮発性メモリに記憶し、ネットワーク・リンクを介して転送された第２のコンピュータからの要求に応じて前記不揮発性メモリからマシン実行可能なコード・モジュールの選択されたうちの１個を検索し、ならびに前記ネットワーク・リンクを介して該選択されたマシン実行可能なコード・モジュールを前記第２のコンピュータに転送することを含んでなり、前記第２のコンピュータからの要求が前記第２のコンピュータから前記第１のコンピュータに指示された第２の要求であって、さらに前記ネットワーク・リンクを介して前記第２のコンピュータから前記第１のコンピュータに指示された第１の要求（マシン実行可能なコード・モジュールに含まれた特定のコード・モジュールの第１のバージョンの送信を求める）を受けて、前記ネットワーク・リンクを介して前記第１のコンピュータから前記第２のコンピュータに前記特定のコード・モジュールの最新のバージョン（選択されたマシン実行可能なコード・モジュールである）が使用可能であることを示す信号を送信することを特徴とするネットワーク上においてコンピュータ間でのコンピュータ・プログラムの記憶と転送を制御する方法。
【請求項６】
アプリケーション・プログラムを個別に独立してマシン実行可能である複数のコード・モジュールとして第１のコンピュータの不揮発性メモリに記憶し、ネットワーク・リンクを介して転送された第２のコンピュータからの要求に応じて前記不揮発性メモリからマシン実行可能なコード・モジュールの選択されたうちの１個を検索し、ならびに前記ネットワーク・リンクを介して該選択されたマシン実行可能なコード・モジュールを前記第２のコンピュータに転送することを含んでなり、前記のマシン実行可能なコード・モジュールがユーザー使い勝手なプログラム・コードに書き込まれており、前記第２のコンピュータにおいて前記プログラム・コードから選択されたコード・モジュールを前記第２のコンピュータが直接使用可能なマシン・コードに翻訳することを特徴とするネットワーク上においてコンピュータ間でのコンピュータ・プログラムの記憶と転送を制御する方法。
【請求項７】
個別に独立してマシン実行可能である複数のコード・モジュールを含んだアプリケーション・プログラムの一部のみを第１のコンピュータに記憶し、前記第１のコンピュータにおいて少なくとも１個のマシン実行可能なコード・モジュールを実行し、ネットワーク・リンクを介して前記アプリケーション・プログラムのさらなるマシン実行可能なコード・モジュールの要求を第２のコンピュータに送信し、前記ネットワーク・リンクを介して前記第２のコンピュータからの該さらなるマシン実行可能なコード・モジュールを前記第１のコンピュータにおいて受け、前記第１のコンピュータにおいて該さらなるマシン実行可能なコード・モジュールを実行することを含んでなるネットワーク上のコンピュータ間でのコンピュータ・プログラムの記憶と転送と制御する方法。
【請求項８】
前記第１のコンピュータからさらなるコンピュータに前記ネットワーク上のサーバーのリストの要求を送り、前記さらなるコンピュータから前記第１のコンピュータへの前記サーバーのリストの送信後に、（ａ）前記第１のコンピュータから前記サーバーにエコー・パケットを送りかつ（ｂ）前記第１のコンピュータにおいて前記エコー・パケットの送りと各サーバーからの前記エコー・パケットへの応答の受取りとの間の遅延を測定することにより、応答時間を決定し、前記サーバーの中から最も応答時間の短いサーバーとして前記第２のコンピュータを選択し、その後上記のさらなるマシン実行可能なコード・モジュールの送信を実行することを特徴とする請求項７に記載の方法。
【請求項９】
前記第１のコンピュータからの要求が前記第１のコンピュータから前記第２のコンピュータに指示された第２の要求であって、前記ネットワークを介してさらに前記第１のコンピュータからの第１の要求が前記第２のコンピュータに送信され、前記第１の要求が前記アプリケーション・プログラムの特定のマシン実行可能なコード・モジュールの第１のバージョンへのものであって、該特定のマシン実行可能なコード・モジュールのより最新のバージョンを示す前記第２のコンピュータからの信号に応じて前記第２の要求が送信され、前記第２の要求が前記特定のマシン実行可能なコード・モジュールのより最新のバージョンへのものであることを特徴とする請求項７に記載の方法。
【請求項１０】
前記第２のコンピュータが前記アプリケーション・プログラムの少なくとも１個の前記マシン実行可能なコード・モジュールを記憶し、前記第１のコンピュータによるマシン実行可能なコード・モジュールの実行に応じて、前記第２のコンピュータが少なくとも１個の前記マシン実行可能なコード・モジュールを実行し、かつ前記ネットワークを介して前記第１と第２のコンピュータが対話型処理に関与することを特徴とする請求項７に記載の方法。
【請求項１１】
前記のマシン実行可能なコード・モジュールがユーザー使い勝手なプログラム・コードに書き込まれ、前記第２のコンピュータにおいて前記プログラム・コードから選択された１個のコード・モジュールを前記第２のコンピュータが利用できるマシン・コードに翻訳することを特徴とする請求項７に記載の方法。
【請求項１２】
前記マシン実行可能なコード・モジュールのそれぞれには作成者識別を組み込んであり、前記ネットワークを介して前記第１のコンピュータにより受け取られた指令に応じてかつ１個の前記マシン実行可能なコード・モジュールを前記第１のコンピュータ上で実行する前に、前記マシン実行可能なコード・モジュールに組み込まれた特定の作成者識別が許諾された識別であるか否かを決定し、前記特定の作成者識別が許諾された識別である場合には該マシン実行可能なコード・モジュールの実行を続行することを特徴とする請求項７に記載の方法。
【請求項１３】
前記第１のコンピュータに前記アプリケーション・プログラムの前記一部を記憶するに際して、前記第１のコンピュータ内の不揮発性メモリにコード・モジュールを捕捉することを特徴とする請求項７に記載の方法。
【請求項１４】
前記第１のコンピュータの遊休時間中に、マシン実行可能なコード・モジュールへの要求を前記第１のコンピュータから前記第２のコンピュータへ送信することを特徴とする請求項７に記載の方法。
【請求項１５】
デジタル処理回路と、
一般の作業プログラムおよび個別に独立してマシン実行可能である複数のコード・モジュールを含んだアプリケーション・プログラムを記憶し、前記デジタル処理回路が接続されて前記デジタル処理回路がアクセス可能である不揮発性メモリと、
ネットワークを介して遠隔コンピュータとデータおよびプログラムを通信する通信リンクと、
前記不揮発性メモリおよび前記通信リンクに作動接続されて、マシン実行可能なコード・モジュールから単一のコード・モジュールを検索しかつ前記遠隔コンピュータからの要求に応じて該単一のコード・モジュールを前記遠隔コンピュータに転送するコード・モジュール交換手段とを含んでなるコンピュータ・システムであって、
前記コンピュータ・システムが前記ネットワーク上のサーバー・コンピュータであることを特徴とするコンピュータ・システム。
【請求項１６】
前記不揮発性メモリが前記ネットワーク上の第２のサーバーのリストを含んでおり、該リストが各第２のサーバーのための応答時間を含んでおり、コンピュータ・システムの過負荷状態を検知する検知手段と、該検知手段に作動接続されたサーバー選択手段とを含んでなり、前記不揮発性メモリと前記通信リンクとがどの前記第２のサーバーが最も短い応答時間を有しているかを決定し、ユーザー要求が到着したときに過負荷状態だと、最短の応答時間で前記第２のサーバーに前記ユーザー要求が到着することを遮断することを特徴とする請求項１５に記載のコンピュータ・システム。
【請求項１７】
前記のユーザー要求が遮断された前記第２のサーバーが前記遠隔コンピュータであって、前記遠隔コンピュータをしてユーザー要求を処理させるべく前記単一のコード・モジュールが要求されることを特徴とする請求項１６に記載のコンピュータ・システム。
【請求項１８】
さらに更新手段が前記不揮発性メモリと前記通信リンクとに作動接続されていて、これにより（Ｉ）エコー・パケットを周期的に前記第２のサーバーに送り、(ＩＩ) 前記エコー・パケットの送りと各第２のサーバーからの前記エコー・パケットの受取りとの間の遅延を測定し、かつ（ＩＩＩ）測定された遅延に応じて前記リスト中の応答時間を更新することを特徴とする請求項１６に記載のコンピュータ・システム。
【請求項１９】
前記ネットワークがインター・ネットであることを特徴とする請求項１５に記載のコンピュータ・システム。
【請求項２０】
デジタル処理回路と、
一般の作業プログラムおよび個別に独立してマシン実行可能である複数のコード・モジュールを含んだアプリケーション・プログラムを記憶し、前記デジタル処理回路が接続されて前記デジタル処理回路がアクセス可能である不揮発性メモリと、
ネットワークを介して遠隔コンピュータとデータおよびプログラムを通信する通信リンクと、
前記不揮発性メモリおよび前記通信リンクに作動接続されて、マシン実行可能なコード・モジュールから単一のコード・モジュールを検索しかつ前記遠隔コンピュータからの要求に応じて該単一のコード・モジュールを前記遠隔コンピュータに転送するコード・モジュール交換手段とを含んでなり、
前記不揮発性メモリがユーザー確認コードの記憶されたリストを含んでおり、さらに比較手段が含まれていて、要求中のユーザー確認コードと前記不揮発性メモリ中のユーザー確認コードの前記リストを比較して、前記要求中のユーザー確認コードが前記リスト中のユーザー確認コードに対応しないときには、コード−モジュール検索と送信とを阻止することを特徴とするコンピュータ・システム。
【請求項２１】
前記の要求が暗号パケット中に含まれており、さらに前記通信リンクおよび前記比較手段に解読手段が接続されていて、前記要求中のユーザー確認コードを前記不揮発性メモリ中のユーザー確認コードの前記リストとの比較前に、前記暗号パケットを解読することを特徴とする請求項２０に記載のコンピュータ・システム。
【請求項２２】
デジタル処理回路と、
一般の作業プログラムおよび個別に独立してマシン実行可能である複数のコード・モジュールを含んだアプリケーション・プログラムを記憶し、前記デジタル処理回路が接続されて前記デジタル処理回路がアクセス可能である不揮発性メモリと、
ネットワークを介して遠隔コンピュータとデータおよびプログラムを通信する通信リンクと、
前記不揮発性メモリおよび前記通信リンクに作動接続されて、マシン実行可能なコード・モジュールから単一のコード・モジュールを検索しかつ前記遠隔コンピュータからの要求に応じて該単一のコード・モジュールを前記遠隔コンピュータに転送するコード・モジュール交換手段とを含んでなり、
さらに決定手段が設けられていて、要求されたコード・モジュールが更新されたバージョンを有しているか否かを決定し、かつ前記遠隔コンピュータへの勧誘を伴った要求に応答して、要求されたコード・モジュールの更新されたバージョンを受け取ることを特徴とするコンピュータ・システム。
【請求項２３】
デジタル処理回路と、
一般の作業プログラムおよび個別に独立してマシン実行可能である複数のコード・モジュールを含んだアプリケーション・プログラムを記憶し、前記デジタル処理回路が接続されて前記デジタル処理回路がアクセス可能である不揮発性メモリと、
ネットワークを介して遠隔コンピュータとデータおよびプログラムを通信する通信リンクと、
前記不揮発性メモリおよび前記通信リンクに作動接続されて、マシン実行可能なコード・モジュールから単一のコード・モジュールを検索しかつ前記遠隔コンピュータからの要求に応じて該単一のコード・モジュールを前記遠隔コンピュータに転送するコード・モジュール交換手段とを含んでなり、
前記マシン実行可能なコード・モジュールがユーザー使い勝手なプログラム・コード中に書き込まれており、さらにインタープリタが設けられていて、前記プログラム・コードを前記デジタル処理回路が直接利用できるマシン・コードに翻訳することを特徴とするコンピュータ・システム。
【請求項２４】
第１のコンピュータと、
該第１のコンピュータに対して遠隔配置された第２のコンピュータと、
前記第１および第２のコンピュータにおいてネットワークを介して前記第１および第２のコンピュータを互いに結ぶ通信リンクとを含んでなり、
前記第１のコンピュータがアプリケーション・プログラムの少なくとも一部を記憶する不揮発性メモリを有しており、該アプリケーション・プログラムが個別に独立してマシン実行可能である複数のコード・モジュールを含んでおり、各コンピュータが他のコンピュータのコード・モジュール交換手段と協働するコード・モジュール交換手段を有していて、マシン実行可能なコード・モジュールからの単一のコード・モジュールを前記第１のコンピュータから前記第２のコンピュータへ転送し、前記第１のコンピュータが前記ネットワーク上の第１のサーバーであり、前記第２のコンピュータが前記ネットワーク上の第２のサーバーであり、前記第１のコンピュータが自身の過負荷状態を検知する検知手段を有しており、前記検知手段および前記第１のコンピュータにおける前記通信リンクに作動接続された遮断手段を第１のコンピュータが有しており、ユーザー要求の到着時に過負荷状態ならば前記第２のコンピュータへの前記ユーザー要求の到着を遮断することを特徴とするコンピュータ・システム。
【請求項２５】
前記第１のコンピュータが前記不揮発性メモリと前記通信リンクとに作動接続された更新手段を含んでおり、かつこれにより（Ｉ）前記ネットワーク上の複数の第２のサーバーにエコー・パケットを周期的に送り、（ＩＩ）前記エコー・パケットの送りと各第２のサーバーからの前記エコー・パケットへの応答との受取りの間の遅延を測定し、かつ（ＩＩＩ）測定された遅延に応じて前記不揮発性メモリ中のリスト中の応答時間を更新することを特徴とする請求項２４に記載のコンピュータ・システム。
【請求項２６】
個別に独立してマシン実行可能である複数のコード・モジュールを含んだアプリケーション・プログラムの一部のみを記憶するメモリと、
該メモリに作動接続されて少なくとも１個のマシン実行可能なコード・モジュールを実行するデジタル処理回路と、
ネットワークを介して遠隔コンピュータにデータおよびプログラムを通信する通信リンクと、
前記メモリと前記通信リンクとに作動接続されかつネットワーク・リンクを介して前記遠隔コンピュータと通信して前記アプリケーション・プログラムの別のマシン実行可能なコード・モジュールを前記遠隔コンピュータから得るコード・モジュール交換手段とを含んでなり、
前記デジタル処理回路が前記コード・モジュール交換手段に作動接続されて前記遠隔コンピュータから前記別のマシン実行可能なコード・モジュールを受けたときにこれを実行するコンピュータ・システムであって、前記コンピュータ・システムがユーザーコンピュータであり、かつ前記遠隔コンピュータがサーバー・コンピュータであることを特徴とするコンピュータ・システム。
【請求項２７】
前記メモリが前記ネットワーク上のサーバーのリストを含んでおり、該リストが各サーバーへの応答時間を含んでおり、さらに前記メモリと前記コード・モジュール交換手段にはサーバー選択手段が作動接続されていて、前記のサーバー群から選ばれた最短の応答時間を有したサーバーと通信すべく前記コード・モジュール交換手段に指示し、かつ前記遠隔コンピュータが該選ばれたサーバーであることを特徴とする請求項２６に記載のシステム。
【請求項２８】
さらに前記メモリと前記通信リンクには更新手段が作動接続されていて、これにより（Ｉ）前記サーバーに周期的にエコー・パケットを送り，（ＩＩ）前記エコー・パケットの送りと各サーバーからの前記エコー・パケットへの応答の受取りとの間の遅延を測定し、かつ（ＩＩＩ）測定された遅延に応じて前記リストにおける応答時間を更新することを特徴とする請求項２７に記載のシステム。
【請求項２９】
個別に独立してマシン実行可能である複数のコード・モジュールを含んだアプリケーション・プログラムの一部のみを記憶するメモリと、
該メモリに作動接続されて少なくとも１個のマシン実行可能なコード・モジュールを実行するデジタル処理回路と、
ネットワークを介して遠隔コンピュータにデータおよびプログラムを通信する通信リンクと、
前記メモリと前記通信リンクとに作動接続されかつネットワーク・リンクを介して前記遠隔コンピュータと通信して前記アプリケーション・プログラムの別のマシン実行可能なコード・モジュールを前記遠隔コンピュータから得るコード・モジュール交換手段とを含んでなり、
前記デジタル処理回路が前記コード・モジュール交換手段に作動接続されて前記遠隔コンピュータから前記別のマシン実行可能なコード・モジュールを受けたときにこれを実行し、前記コード・モジュール交換手段にはソフトウエア変更回路が作動接続されており、これにより前記遠隔コンピュータに送信された通信を暗号化しかつ前記遠隔コンピュータから受けた通信を解読することを特徴とするコンピュータ・システム。
【請求項３０】
個別に独立してマシン実行可能である複数のコード・モジュールを含んだアプリケーション・プログラムの一部のみを記憶するメモリと、
該メモリに作動接続されて少なくとも１個のマシン実行可能なコード・モジュールを実行するデジタル処理回路と、
ネットワークを介して遠隔コンピュータにデータおよびプログラムを通信する通信リンクと、
前記メモリと前記通信リンクとに作動接続されかつネットワーク・リンクを介して前記遠隔コンピュータと通信して前記アプリケーション・プログラムの別のマシン実行可能なコード・モジュールを前記遠隔コンピュータから得るコード・モジュール交換手段とを含んでなり、
前記デジタル処理回路が前記コード・モジュール交換手段に作動接続されて前記遠隔コンピュータから前記別のマシン実行可能なコード・モジュールを受けたときにこれを実行し、前記マシン実行可能なコード・モジュールがユーザー使い勝手なプログラム・コードに書き込まれ、かつインタープリタが設けられていて、前記プログラム・コードを前記デジタル処理回路が直接利用できるマシン・コードに翻訳することを特徴とするコンピュータ・システム。
【請求項３１】
第１のコンピュータの不揮発性メモリにアプリケーション・プログラムを個別に独立してマシン実行可能である複数のコード・モジュールの形で記憶し、前記第１のコンピュータ上において該アプリケーション・プログラムの一部を実行し、ネットワーク・リンクを介して前記第１のコンピュータから全能力では稼動していない第２のコンピュータへ前記第１のコンピュータの負荷を引き受ける要求を送信し、前記第２のコンピュータからの要求に応じて前記ネットワーク・リンクを介して前記第１のコンピュータから前記第２のコンピュータに前記アプリケーション・プログラムの全体未満のマシン実行可能なコード・モジュールを選択的に送信し、送信されたコード・モジュール中のプログラム指令に従って前記第２のコンピュータに作動させて、前記第１のコンピュータの負荷の実行を助けることを含んでなるネットワーク上でコンピュータ間に処理を分配する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はコンピューター・ネットワーク上でのコンピューティングならびに通信に関する。より具体的には、本発明は、ネットワーク上にあるコンピューター間のコンピューター・プログラムの記憶ならびに転送を最適コントロールして対話型プログラムの使用を可能にするコンピューター化したシステムならびに関連する方法に関する。
【背景技術】
【０００２】
この数年間、インターネットとして知られるコンピューターのグローバル・ネットワークにアクセスした個人、会社その他の法人は増加の一途をたどっている。より詳細に述べるのであれば、インターネットは世界中に散在する地域的 コンピューター・ネットワークのネットワークである。１日当たりで見れば、５０以上の国の２０2×１００万人のユーザーがインターネットに接続している。この数字は、当面の間、年々増え続けると見られる。
【０００３】
インターネットは、テキスト、ビデオ、グラフィックス、およびサウンドを含む形式の膨大な情報に対する個人のアクセスを可能にした。このマルチメディアの塊または情報の抽象的空間は、一般に「ワールド・ワイド・ウェブ」と呼ばれ、技術的には「ドキュメントの大母集団に対する共通アクセスを与えることを目的としたワイドエリア・ハイパーメディア情報検索イニシアチブ」となる。コンピューターのオペレータは、ワールド・ワイド・ウェブに対するアクセスを得るためにブラウザと呼ばれるソフトウェアを使用する。米国においてもっとも一般的なブラウザは、ネットスケープ・ナビゲータ（Ｎｅｔｓｃａｐｅ  Ｎａｖｉｇａｔｏｒ）およびマイクロソフト・インターネットエクスプローラ（Ｍｉｃｒｏｓｏｆｔ  Ｉｎｔｅｒｎｅｔ  Ｅｘｐｌｏｒｅｒ）である。
【０００４】
ウェブの動作は、いわゆるハイパーテキストに基づいてユーザーの対話を可能にする。ハイパーテキストは、記憶、読み出し、探索および編集がなされ得るという点において基本的に通常のテキストと同じであるが、１つの重要な例外がある。すなわち、ハイパーテキスト・ドキュメントは、他のドキュメントに対するリンクを含むという点である。一例を挙げると、第１のドキュメントにおける単語「ハイパーテキスト」の選択は、たとえば「ハイパーテキスト」の辞書上の定義あるいはハイパーテキストのヒストリを含む第２のドキュメントをユーザーのコンピューター・スクリーン上に呼び出す。これらの第２のドキュメントもまた、別のドキュメントへの接続を有することもあり、次々と別のドキュメントへとことばの選択を続けることによってユーザーは、情報内を自由に連想して旅することができる。このようにしてハイパーテキスト・リンクまたは「ハイパーリンク」は、複雑な仮想接続網（ウェブ）を作り出すことができる。
【０００５】
ハイパーメディアには、別のテキストへのリンクだけでなく、サウンド、画像およびビデオ等の他のメディアに対するリンクを含むハイパーテキスト・ドキュメントが含まれる。画像自体を、サウンドまたはドキュメントに対するリンクのために選択することもできる。
【０００６】
ハイパーメディア・ドキュメントの作成および認識のためにウェブで使用される標準言語は、ハイパーテキスト・マーク付け言語（「ＨＴＭＬ」言語）である。この言語は、コンピューティング社会の一部で広く使用されているドキュメント・フォーマット言語である標準一般化マーク付け言語（「ＳＧＭＬ」）と緩やかな関連を有するが、技術的にはそのサブセットではない。ウェブ・ドキュメントは、通常ＨＴＭＬで記述され、レイアウト（テキスト・スタイル、ドキュメントのタイトル、段落、リスト）およびハイパーリンクに関する情報を備えたフォーマッティング・コードを伴う標準テキスト・ファイルを超えるものではない。
【０００７】
ＨＴＭＬは、表示機能（テキスト、アニメーション、グラフィックス、およびオーディオ）およびフォームの提示に制限されている。基本的なＨＴＭＬプロトコル（コンピューター間で交換されるメッセージのフォーマットを支配するソフトウェア・エンコードされた規則のセット）に内在する欠点は、今日のデスクトップ・コンピューターで一般に使用されているタイプのプログラム機能の実装を妨げる設計上の制限である。この制限があることから、業界ならびに消費者から現在求められているインターネット・アプリケーションをサポートするために必要な機能を含めたＨＴＭＬドキュメントの強化が不可能になっている。
【０００８】
サン・マイクロシステムズ（Ｓｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ）およびネットスケープ・コミュニケーションズ（Ｎｅｔｓｃａｐｅ  Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ）は、サンのジャバ（Ｊａｖａ）プログラミング言語をブラウザのプラグインとして実装することを通じて追加のプログラム機能を導入することを試みている。マイクロソフトは、ジャバのサポートに加えて、ブラウザのプラグインとしてアクティブＸ（Ａｃｔｉｖｅ−Ｘ）を導入した。現在、２年の開発期間を経てもなお、ジャバならびにアクティブＸは、ともにワーキング・ソフトウェアの配給に成功していない。これらの言語は、より新しいオペレーティング・システムとクラッシュするというソフトウェア・エラーに悩まされている。これらの言語の開発者、すなわちサンならびにマイクロソフトでさえ、自らがこれらの言語のケイパビリティを立証するために記述したジャバ・アプリケーションおよびアクティブＸアプリケーションに大きな問題を抱え込んでいる。
【０００９】
ジャバ、アクティブＸおよびほとんどすべての他のプログラミング言語は、１９７０年代にユニックス（ＵＮＩＸ）オペレーティング・システムを開発するためにＡＴ＆Ｔによって開発された「Ｃ」プログラミング言語を基礎とするプログラミング・パラダイムを使用している。「Ｃ」は、オペレーティング・システム開発に好ましい適合を見せるが、インターネット・コンテンツ配信に関して２つの主要な欠点を有する。第１の欠点は、全体のプログラムをロードした後でなければそのプログラムを使用して何も実行できないことである。インターネット・コンテンツはオープン・エンドであることから、大半のアプリケーションは非常に大きくなる可能性を有し、ほとんどのインターネット接続では帯域幅の制限からダウンロードの実用性が失われる。一般的なジャバ・アプリケーションおよびアクティブＸアプリケーションにおいては、実行開始前にダウンロードのための数分間が必要になる。一方「Ｃ」をベースにしたプログラムの使用における第２の欠点は、コンテンツ開発の効率が非常に悪いことである。「Ｃ」言語および「Ｃ」パラダイムに基礎を置くプログラミング言語は、現在、ワードプロセッサー、スプレッドシート、およびオペレーティング・システム等のソフトウェア・ツールならびにユーティリティの作成に使用されている。ソフトウェア開発者は、現存するユーザーに対する製品の反復販売が膨大な投資額を回収するという認識の下に長期プロジェクトに多数のプログラマーを割り当てることができる。しかしながら、インターネット・コンテンツの開発者には、この種のアプローチをとるゆとりはなく、開発の経済性から非常にシンプルなＨＴＭＬプロトコルに逆戻りしている。
【００１０】
ところがこのＨＴＭＬは、インターネット上での対話型プログラミングの伝達を可能にするという点、あるいはそれを容易にするという点で充分ではない。ＨＴＭＬは、受動的なマルチメディア情報の提供に良好に適合されているが、能動的および対話型のソフトウェアの使用ならびに開発には極めて制限されている。このようなことからインターネット上で商業活動を展開しようと努めている会社は、ＨＴＭＬに代わるか、あるいはこの言語の能力を大きく高めるプログラミング・ツールまたは情報交換方法を求めている。「Ｃ」パラダイムに基づいているアプリケーション・プログラムとは対照的に、インターネット・アプリケーション・プログラムは一般に繰り返し使用の傾向にない。むしろインターネット・プログラムは使い捨てであり、プログラムは、一般的なユーザーによって１度しか使用されない。ワードプロセッサー、スプレッドシート、Ｅメール等の個別のコンピューターで使用するために開発されたユーティリティ・タイプのソフトウェアは、各個人によってそれが何回にもわたり繰り返し使用されることから、高い価格で販売することができる。
【００１１】
「Ｃ」プログラミング・パラダイムをベースにするプログラミング言語は、コンピューターのディスプレイ・スクリーンを伴うプログラミングの対話に関して扱いにくさがある。たとえば、スプライト（他のグラフィック・オブジェクトに影響を与えることなくバックグラウンドで移動できるグラフィック・イメージ）を操作するマイクロソフトのプログラムは、８００行を超える「Ｃ」コードならびに２９０量を超えるアッセンブラ・コードを必要とする。同じプログラムをＴｅｎＣＯＲＥ言語で記述すれば、わずか６行で足りる。
【００１２】
ＴｅｎＣＯＲＥは、ディスク・ドライブとＲＡＭの間における情報の転送を容易にするため、特に対話型の命令を受け渡しするために（「コンピューター・ベースのトレーニング」）１９８０年代の初頭に設計されたモジュラー型プログラミング言語である。その時点においては、ディスク・ドライブは非常に遅く、小さいＲＡＭは避けられなかった。このようなハードウェア上の制限に適合させるため、ＴｅｎＣＯＲＥは個別の機能を実行するための小さな独立したコード・モジュールの使用を導入し、それによって遅いディスク・ドライブからロードした個別のコード・モジュールとして、つまり単一の対話として効率な実行が可能になった。実質的に独立なコード・モジュールの形を持つプログラミングはオープンエンドであり、各個別の学生にどのような矯正指示が必要になるかわからない教育ソフトウェアにとっては必須の特性である。ＴｅｎＣＯＲＥは、基本的なすべての必要機能を効果的に実装する「インタープリター」と呼ばれるプログラムを使用する。インタープリター自体はコンテンツをまったく含まない。コンテンツはシステム・メモリーにロードされインタープリターに対してコマンドを発する非常に多くの小さい疑似コード・モジュールからもたらされる。プログラムの記述においては、プログラマーの関与が単純なコマンドの発行にまで縮小され、実装に関するあらゆる困難がインタープリターに委ねられる。
【００１３】
ＴｅｎＣＯＲＥとは対照的に「Ｃ」タイプのプログラミングは、コンパイル時に互いにリンクされるあらかじめ記述済みの一連のコード・ライブラリーを包含する。理論上は、新しいマイクロプロセッサーの設計時にコード・ライブラリーの書き直しのみが必要となり、その後新しいライブラリーを使用してすべてのプログラムをリコンパイルすることができる。しかしながらこの２０年の間に、こういったコード・ライブラリーの数は増大し、マイクロプロセッサー間のわずかな相違の補正における困難から、異なるマイクロプロセッサーのためにリライトを行うという原始コンセプトが実用性を失うポイントまで来ている。残されたものは習熟に数年を要し、デバッグが非常に難しい複雑かつ難解なプログラム・シンタクスである。
【００１４】
（発明の目的）
本発明の包括的な目的はコンピューター・ネットワークを介した通信のための方法を提供することにある。
【００１５】
より詳細に述べれば、本発明の目的はインターネット等のコンピューター・ネットワークを介して対話型プログラムの伝達を可能にするため、あるいはそれを容易にするための方法を提供することである。
【００１６】
本発明の関連目的は、コンピューター・ネットワークを介してソフトウェアを交換するための方法を提供し、当該ネットワークを介した高度な対話型コンピューター使用を可能にすることである。
【００１７】
本発明の別の目的は、インターネット等のコンピューター・ネットワークを介して対話型プログラムの伝達を可能にするため、あるいはそれを容易にするためのコンピューター・システムを提供することである。
【００１８】
本発明のさらに別の目的は、コンピューター・ネットワークを介してソフトウェアを交換するためのコンピューター・システムを提供し、当該ネットワークを介した高度な対話型コンピューター使用を可能にすることである。
【００１９】
以上ならびにその他の本発明の目的は、これに示す図面を参照した説明から明らかになろう。
【００２０】
（発明の要約）
本発明は、ネットワーク上のコンピューター間におけるコンピューター・プログラムの記憶ならびに転送を最適コントロールし、対話型プログラムの使用を促進するためのコンピューター化したシステムおよびそれに関連する方法に向けられている。この方法によれば、アプリケーション・プログラムが、複数の個別かつ独立のマシン実行可能コード・モジュールとして第１のコンピューターの不揮発性メモリーに記憶される。この第１のコンピューターは、ネットワーク・リンクを介して第２のコンピューターから送信された要求に応答して、マシン実行可能コード・モジュールの選択された１つ、つまり選択されたそのコード・モジュールだけをメモリーから検索し、選択されたそのコード・モジュールをネットワーク・リンクを介して第２のコンピューターに送信する。
【００２１】
本発明の１つの重要な使用分野において、第１のコンピューターはネットワーク上のサーバー・コンピューターとなる。その場合、第２のコンピューターは、ユーザー・コンピューターあるいは２次サーバーとすることができる。それに代えて、これら２つのコンピューターをネットワーク上の２台の独立したユーザー・コンピューターとしてもよい。
【００２２】
第２のコンピューターをユーザー・コンピューターとする場合、ユーザーがアプリケーション・プログラム内の希望する機能を実行するために実行可能コード・モジュールを必要とすることからそのコード・モジュールを求める要求が生じる。ユーザーのコンピューターには、そのアプリケーション・プログラムのすべてのコード・モジュールがなく、新しいコード・モジュールが必要になったときにのみそれらのモジュールを獲得する。アプリケーション・プログラムの実行可能コードが個別の実行可能モジュールに分解されていることから、ユーザーによるプログラム実行のために個別のモジュールが必要になったとき、モジュールごとに逐次プログラムをダウンロードすることができる。したがってユーザーは、プログラム全体がロードされるまで待たなくてもそのプログラムの使用を開始することができる。
【００２３】
第１のコンピューターおよび第２のコンピューターがそれぞれ１次サーバー、２次サーバーである場合、本発明は１次サーバーにユーザーの要求またはタスクを処理する余裕がないとき、１次サーバーから２次サーバーへその要求またはタスクを渡すことを可能にする。１次サーバーは、過負荷を生ずることから処理不能な要求またはタスクをユーザーから受け取ったとき、好ましくは使用可能なもっとも処理余裕のある２次サーバーにその要求またはタスクを渡す。これに続いて２次サーバーは、このユーザー要求を処理し、クライアント／ユーザーにダイレクトに応答する。２次サーバーがユーザーの要求を処理するために必要なコード・モジュール、データ・ファイル、またはその他の資源を有していない場合は、１次サーバーからその２次サーバーに必要なコード・モジュール、データ・ファイル、またはその他の資源を転送することができる。このようなユーザー要求の分路は、異なるインターネット接続上に配置される複数の２次サーバーの使用を企図したものである。本発明は、このようにインターネットならびに他のコンピューター・ネットワークにおける帯域幅ならびにサーバー負荷に関する問題のほとんどを解消する。
【００２４】
当然のことながらサーバー・コンピューターは、最大キャパシティに到達する前にその負荷を分離し、分路されたユーザー要求またはタスクを満たすために２次サーバーが必要とする資源が２次サーバーから要求されたとき、その要求を満たすに充分なシステム資源（プロセッサー、メモリー等）の空きを残しておかなければならない。
【００２５】
２次サーバーはクライアント・マシンとコンタクトできないとき、そのクライアント・マシンに対して別の２次サーバーからダイレクトなアクセスが得られる可能性があることから、そのユーザー要求を別の２次サーバーに渡して処理させることができる。
【００２６】
２次サーバーをバックアップ・サーバーとして機能させてもよい。その場合、コード・モジュール、データ・ファイル、およびその他の資源の１つをクライアントが要求するまで待つことなく、１次サーバーに対して直ちにこれらの資源を要求する。クライアントまたは２次サーバーが１次サーバーに対して要求を発し、アクセス不能であることがわかったとき、その要求はバックアップ・サーバーに向けられる。この方法においては１次サーバーが万一フェイルしても、１次サーバー上にあった情報のアクセス可能性がバックアップ・サーバーを通じて残される。バックアップ・サーバーにおける最新資源の維持を容易にするため、資源が生成されたとき、あるいは更新されたときそのつど１次サーバーがから各バックアップ・サーバーに通知パケットが送られる。それによりバックアップ・サーバーは、１次サーバーに対して新しい更新済みの資源のコピーを要求するので、１次サーバーと最新性を常時共有することができる。
【００２７】
ユーザー要求の処理を最適化するため、１次サーバーはそのメモリー内にネットワーク上の２次サーバーのリスト、つまりそれぞれの２次サーバーに関する応答時間と負荷統計（プロセッサーの使用等）を含むリストを記憶する。１次サーバーは、エコーパケットを２次サーバーに送り、エコーパケットを送信してから、それぞれの２次サーバーからの応答が受信されるまでの遅延を測定することによって、定期的にこれらの応答時間を更新する。サーバーはまた、２次サーバーに対して現在の負荷統計を要求することにより、定期的に負荷統計も更新する。１次サーバーは、受け取った最新のユーザー要求の処理に対して、メモリー内のこのリストをスキャンし、もっとも負荷が軽くもっとも応答時間の短い２次サーバーを選択する。
【００２８】
セキュリティ問題に関しては、コード・モジュールを始めデータ・ファイル等のその他の資源が暗号化された形式で送信される。暗号化は、コード・モジュール、ファイル、ドキュメントまたはその他の送信可能資源を暗号パケットのデータ・エリア内に収めることによって達成される。暗号パケットは受信されると解読され、続いてコード・モジュール、ファイル、ドキュメントまたはその他の送信可能資源が通常のプロシージャに従って処理される。暗号化／解読プロセスはプラグイン・コード・モジュールによって扱うことができる。本発明によれば、一度にデータならびにコード転送システム内に任意数のプラグイン暗号化コード・モジュールが存在することが許容される。暗号パケットのヘッダには、解読のために使用しなければならないプラグイン暗号化コード・モジュールの表示が含まれている。これらの暗号化／解読コード・モジュールは、コード・モジュール交換プロトコルによりリアルタイムで引き渡すことができる。
【００２９】
システムのセキュリティをさらに強化するため、１次サーバーはメモリー内にユーザー確認コードのリストを記憶している。要求を受け取ると、たとえば別のコンピューターからマシン実行可能コード・モジュールを求める要求を受けとると、１次サーバーはその要求に含まれているユーザー確認コードと記憶しているユーザー確認コードのリストを比較する。１次サーバーは、要求に含まれていたユーザー確認コードが記憶しているリスト内のユーザー確認コードと合致したときに限り、選択されたマシン実行可能コード・モジュールの検索および送信に進む。マシン実行可能コード・モジュールを求める到来した要求が暗号パケットに収められている場合、サーバーは、要求に含まれているユーザー確認コードとメモリー内のユーザー確認コードのリストを比較する前に、暗号パケットの解読を行う。暗号パケットの暗号化ならびに解読を始め、ユーザー確認コードのチェックは２次サーバー（１ないしは複数）によって実行してもよい。本発明によれば、セキュリティ処置を行うために必要となるどのようなプログラミングまたはデータでも１次サーバーから送信することができる。
【００３０】
本発明は、ユーザーのマシンにあるアプリケーション・プログラムの更新を提供する。ユーザーがサーバーに対してコード・モジュールの要求を送るとき、求めているプログラム・コードのバージョンの明細がその要求に含められる。その要求を処理するサーバーは、要求されたバージョンが使用可能な最新バージョンであるか否かをチェックする。要求されたコード・モジュールについてより新しいバージョンがあると、サーバーはユーザーにそれを通知し、ユーザーが要求したモジュールについて、より新しいバージョンを使用できるか否か問い合わせる。これによりユーザーは、希望するコード・モジュールの更新済みバージョンを求める要求を送ることができる。
【００３１】
希望するコード・モジュールの更新済みバージョンがそれより古いバージョンの他のコード・モジュールと互換性がないときは、古いバージョンの希望コード・モジュールがサーバーからユーザーに送信される。古いバージョンがないときは、ユーザーは新しいバージョンの追加モジュールの送信を要求することができる。
【００３２】
概して言えば、ＴｅｎＣＯＲＥ等のユーザー使い勝手なプログラミング・コードを用いてマシン実行可能コード・モジュールを記述することが企図されている。その場合、ソフトウェア実装によるユーザー・コンピューターのインタープリター・ユニットは、プログラミング・コードからのコード・モジュールをユーザー・コンピューターによって直接使用することができるマシン・コードに翻訳する。この種のインタープリターが使用されるとき、インタープリター自体をアプリケーション・プログラムまたはコード・モジュールと同様の態様で更新することができる。インタープリターを更新する目的からインタープリターは、大きな単一のコード・モジュールとして扱われる。
【００３３】
ネットワーク上のコンピューター間におけるコンピューター・プログラムの記憶ならびに転送を最適コントロールして対話型プログラムの使用を容易にするための、本発明に従った関連方法においては、アプリケーション・プログラムの一部が第１のコンピューターに記憶される。アプリケーション・プログラムは、複数の個別かつ独立したマシン実行可能コード・モジュールからなる。つまり、マシン実行可能コード・モジュールのいくつかだけが第１のコンピューター内に記憶される。この方法は、第１のコンピューター上において少なくとも１つのマシン実行可能コード・モジュールを実行するステップ、第２のコンピューターに対しネットワーク・リンクを介してアプリケーション・プログラムの追加のマシン実行可能コード・モジュールを求める要求を送るステップ、第１のコンピューターにおいて当該ネットワーク・リンクを介して第２のコンピューターからの追加のマシン実行可能コード・モジュールを受信するステップ、および第１のコンピューター上において追加マシン実行可能コード・モジュールを実行するステップを含む。
【００３４】
ネットワーク上におけるプログラム転送をさらに容易にするため、第１のコンピューターはサーバーの利用可能性を調査することができる。本発明のこの特徴に従うと、第１のコンピューター（例：ユーザー）から別のコンピューター（例：１次サーバー）に対して、ネットワーク上のサーバー（例：２次サーバー）のリストを求める要求が送られる。第１のコンピューターは、このサーバーのリストが送信されると、（ａ）第１のサーバーからこれらのサーバーにエコーパケットを送り、（ｂ）第１のコンピューターにおいてエコーパケット送信から受信までの遅延を測定し、（ｃ）これらのサーバーに対して現在のサーバー負荷（プロセッサーの使用等）を問い合わせることによって各サーバーの応答時間を決定する。追加のマシン実行可能コード・モジュールの要求は、負荷がもっとも軽く測定した応答時間がもっとも短かったサーバーに対して送られる。このサーバーのリストは、第１のコンピューターのメモリー内にキャッシュすることが可能であり、リストの要求がなされたサーバーが使用できなくなったとき、あるいは要求を処理する余裕がなくなったとき、その情報に対する別のアクセスを容易にする。
【００３５】
要求したコード・モジュールにおいて更新が行われた場合、第１のコンピューターから行われた特定バージョンのコード・モジュールを求める要求が、第１のコンピューターにおけるそのコード・モジュールの更新済みバージョンの使用の可否を尋ねる問い合わせをトリガすることがある。第１のコンピューターは、更新済みのバージョンの使用が可能であれば、希望コード・モジュールの更新済みバージョンを求める２番目の要求を送信する。
【００３６】
２つのコンピューターがいずれもユーザー・コンピューターである場合、本発明による方法は対話処理を容易にする。各コンピューターは、他方のコンピューターによるコード・モジュールの実行に応答して１ないし複数の選択されたコード・モジュールを交換する。つまり、いずれのコンピューターもアプリケーション・プログラムのマシン実行可能コード・モジュールを少なくともいくつか記憶している。一方のコンピューターにおいて、現在メモリーに記憶していないコード・モジュールが必要になることがある。そのコンピューターは他方のコンピューターから必要なコード・モジュールを獲得することができる。当該他のコンピューターが要求されたモジュールを持っていないときは、アプリケーション・プログラムが完全な形で存在するサーバーに対してその要求が向けられることになる。
【００３７】
マシン実行可能コード・モジュールがユーザー使い勝手なプログラミング・コードを用いて記述されている場合、各ユーザー・コンピューターは、コード・モジュールをプログラミング・コードから各コンピューターが使用可能なマシン・コードに翻訳する、ソフトウェア修正可能な汎用ディジタル処理回路として実装されるインタープリター・モジュールを備える。
【００３８】
本発明の１つの特徴によれば、マシン実行可能コード・モジュールにはそれぞれオーサー識別が組み込まれている。このためこの方法は、さらにネットワークを介してユーザー・コンピューターによって受信される命令に応答し、ユーザー・コンピューター上でマシン実行可能コード・モジュールの１つが実行される前に、マシン実行可能コード・モジュールの１つに組み込まれた特定のオーサー識別が、許容可能な識別であるか否かを判断するステップを含む。ユーザー・コンピューターは、特定のオーサー識別が許容可能な識別である場合に限り、コード・モジュールの実行に進む。概して、コード・モジュールが許容されたオーサーによって記述されたか否かを判断する命令は、ブラックリストされたオーサーのリストである。
【００３９】
本発明のオーサー識別機能は、ウイルス等の悪意のあるプログラムの作成および、本発明のコード・モジュール交換プロトコルを使用したその配信を防ぐ働きがある。本発明に従って個別のマシン実行可能コード・モジュールのコーディングをサポートするすべてのコンパイラーは、個々のオーサー識別コードを各マシン実行可能コード・モジュールに組み込む。このオーサー識別は互いに固有である。悪意のあるプログラムが発見されたとき、そのオーサーの識別がネットワーク中に配信されてブラックリストされ、ブラックリストされたオーサーの識別を含むコード・モジュールの実行が防止される。この機能の追加の利点としては、それぞれのオーサー識別の下に記述された悪意のあるプログラムが存在するとき、各ユーザーがそれに対して責任を持つことになるため、ユーザーによるオーサリング・パッケージの不法コピーの配布を抑制するという効果が挙げられる。
【００４０】
ユーザー・コンピューター内にアプリケーション・プログラム・モジュールを記憶させるステップには、ユーザー・コンピューターの不揮発性メモリーにコード・モジュールをキャッシュするステップを含めることができる。
【００４１】
ここで、本発明が、ユーザー・コンピューターのアイドル時間の間に使用が予測されるコード・モジュールを送信することを許容している点に注意されたい。ユーザー・コンピューターからのマシン実行可能コード・モジュールを求める要求は、ユーザー・コンピューターのアイドル時間の間にサーバーあるいは他のコンピューターに送信される。
【００４２】
本発明によれば、コンピューティング・システムは、ディジタル処理回路および、汎用オペレーション・プログラムならびにアプリケーション・プログラムを記憶する不揮発性メモリーからなる。アプリケーション・プログラムは複数の個別かつ独立なマシン実行可能コード・モジュールを含んでいる。メモリーは処理回路に接続され、それによりメモリーに対する処理回路によるアクセスが可能になる。ネットワークを介したリモート・コンピューターに対するデータならびにプログラムの伝達のため、通信リンクが備えられる。コード・モジュール交換手段は、メモリーならびにこの通信リンクと機能的に接続されており、リモート・コンピューターからの単一のコード・モジュールを求める要求に応答してマシン実行可能コード・モジュールから当該単一のコード・モジュールを検索し、その単一のコード・モジュールをリモート・コンピューターに転送する。
【００４３】
前述したように、本発明によるコンピューティング・システムは、ネットワーク上のサーバー・コンピューターであってもよい。このサーバーのメモリーには、ネットワーク上の２次サーバーのリストが作られることもあり、当該リストには各２次サーバーの応答時間が含まれる。その場合このコンピューティング・システムは、さらに検出回路を備え、通常これは、コンピューティング・システムの過負荷条件を検出するためのソフトウェア修正可能な汎用ディジタル回路として実装される。また、この検出回路、メモリー、および通信リンクには、通常ソフトウェア修正可能な汎用ディジタル回路として実装されるサーバー・セレクターが機能的に接続されており、いずれの２次サーバーが最短の応答時間を有するかを判断し、ユーザーの要求が到着した時点で過負荷条件が存在していれば、到来したユーザー要求を最短の応答時間を有する２次サーバーに分路する。
【００４４】
たとえば、このコンピューティング・システムに対してコード・モジュールの要求を送信するリモート・コンピューターは、ユーザー要求が分路された２次サーバーとなることもある。その場合、要求された単一コード・モジュールは、コンピューティング・システムに代わってリモート・コンピューターがユーザー要求を処理するために必要となる。
【００４５】
本発明の別の特徴に従うと、コンピューティング・システムはさらに更新ユニットを備え、好ましくはそれがソフトウェア修正可能な汎用ディジタル回路として実装され、メモリーならびに通信リンクと機能的に接続されており（１）２次サーバーに対して定期的にエコーパケットを送り、（２）エコーパケットを送信してから、当該エコーパケットに対する応答を各２次サーバーから受信するまでの遅延を測定し、（３）測定した遅延に従ってリスト内の応答時間を更新する。
【００４６】
セキュリティ目的のためには、コンピューティング・システムのメモリーにユーザー確認コードを記憶させることができる。この場合コンピューティング・システムは比較ユニットを備え、好ましくはそれがソフトウェア修正可能な汎用ディジタル回路として実装され、到来した要求に含まれているユーザー確認コードとメモリー内のユーザー確認コードを比較し、要求に含まれていたユーザー確認コードに対応するユーザー確認コードがリスト内に存在しない場合には、コード・モジュールの検索ならびに送信を行わない。
【００４７】
到来した、コード・モジュールを求める要求が暗号パケット内に収められている場合、コンピューティング・システムは、さらにソフトウェア実装され、通信リンクならびに比較ユニットに接続される解読回路を備え、要求に含まれているユーザー確認コードとメモリー内のユーザー確認コードのリストを比較する前に、暗号パケットの解読を行う。
【００４８】
本発明の別の特徴によれば、コンピューティング・システムは、要求されたコード・モジュールに係る更新済みのバージョンがあるか否かを判断し、リモート・コンピューターに対して要求コード・モジュールの更新済みバージョンの受け入れの送信勧誘を返す。
【００４９】
マシン実行可能コード・モジュールは、ユーザー使い勝手なプログラミング・コードを用いて記述されることが企図されている。コンピューティング・システムがそれ自体でアプリケーション・コードを使用する場合、コンピューティング・システムは、さらにプログラミング・コードを、処理回路による直接使用が可能なマシン・コードに翻訳するためのインタープリターを備える。このインタープリターは、翻訳機能を実行する、プログラミングによって修正可能な汎用ディジタル処理回路の形式としてもよい。
【００５０】
また本発明によるコンピューティング・システム（例：ネットワーク上のユーザー・コンピューター）は、複数の個別かつ独立なマシン実行可能コード・モジュールを有するアプリケーション・プログラムの一部を記憶するメモリーを備え、当該メモリーには当該マシン実行可能コード・モジュールのいくつかだけが記憶される。このメモリーにはディジタル処理回路が機能的に接続され、少なくとも１つのマシン実行可能コード・モジュールを実行する。またネットワークを介してリモート・コンピューターにデータならびにプログラムを伝達するために通信リンクが備えられる。メモリーおよびこの通信リンクにはコード・モジュール交換ユニットが機能的に接続され、通信リンクを介してリモート・コンピューター（例：ネットワーク上のサーバー）と通信し、当該リモート・コンピューターからアプリケーション・プログラムに係る追加のマシン実行可能コード・モジュールを獲得する。ディジタル処理回路はこのコード・モジュール交換ユニットと機能的に結合され、リモート・コンピューターから追加のマシン実行可能コード・モジュールを受け取ると、それに応答してそのコード・モジュールを実行する。
【００５１】
クライアントまたはユーザ・マシンが完全なキャパシティで動作していないとき（プロセッサーのアイドル時間が所定のスレッショルドを超えているとき、またはネットワーク・トラフィックが所定のスレッショルドに満たないとき）このマシンは、同一のバーチャル・ネットワーク上において、プロセッサー集約タスクの真っただ中にある他のクライアント・マシンを探し、負荷の一部を引き受けることができる。必要であれば、このタスクを処理するコード・モジュールをアイドリング中のクライアント・マシンに転送することができる。同一のプロジェクトに関して共働する複数クライアントの場合は、カスタム・サブプロトコルを使用して互いに通信することが可能である。このクライアント・サイドで行われる処理の分散は、プロセッサー集約タスクのパフォーマンスを著しく向上させる。
【００５２】
本発明は、インターネット・コンテンツ開発者特有のニーズを解決するプログラミング・パラダイムを提供する。本発明によるソフトウェア・システムおよびコンピューター通信方法は、インターネットを介して実用的なプログラミング・パラダイムを迅速に引き渡し、提供し、それが迅速かつ経済的なコンテンツの開発をサポートし、インターネット・ソフトウェアならびにシステム・マネジメントにおける新しいケイパビリティを促進する。
【００５３】
デスクトップ・コンピューターのディスク・ドライブと中央処理ユニットの間のプログラム転送を容易にするために設計された小さな効率的コード・モジュールを使用するモジュラー型プログラミング言語、ＴｅｎＣＯＲＥは、本発明を実施するために容易に修正することができる。ネットワーク・リンクにわたる作用に対する転送ケイパビリティの適応には、最小限の修正しか必要としない。
【００５４】
本発明は、今日のソフトウェア設計者がインターネットに取り組み、制限されたその帯域幅と遅い接続に対処しようとして直面している問題は、１９８０年にＴｅｎＣＯＲＥの開発者が直面していた問題とまったく等しいという発明者らによる認識からその一部が生まれている。インターネット・アプリケーションはオープンエンドでなければならず、プログラミングは、帯域幅の制限に抗して迅速に届けられなければならない。つまり、ＴｅｎＣＯＲＥによって提供される解決策は、インターネット上における対話型ソフトウェアに係る今日的問題を解決する上で有用なのである。ＴｅｎＣＯＲＥのモジュラー型プログラミングは、インターネットを介して単一のＴｅｎＣＯＲＥネット・プログラミング・モジュールの迅速なダウンロードが可能なことから、迅速なインターネット・パフォーマンスを可能にする。なおＴｅｎＣＯＲＥネット・プログラミング・モジュールは、マイクロコンピューターのディスク・ドライブからではなく、インターネット・サーバーからのダウンロードを可能にすべく修正されたＴｅｎＣＯＲＥプログラミング・モジュールのことである。
【００５５】
ＴｅｎＣＯＲＥならびにＴｅｎＣＯＲＥネットは、翻訳済み言語であり、機械語疑似コード・プログラムに翻訳するための働きを有し、翻訳されると表示されているオペレーションが実行される。「疑似コード」は、特定のコンピューターのハードウェアに拘束されず、コンピューターによってプログラムが使用されるためには、コンピューターが使用するコードへの変換を必要とする。インターネット接続を持つコンピューターにＴｅｎＣＯＲＥネットのインタープリターが実装されると、マウスを用いて、ＴｅｎＣＯＲＥネット・アプリケーションをポイントする従来のワールド・ワイド・ウェブのハイパーリンクをクリックすることにより自動的にインターネットのブラウザ・ソフトウェアがバイパスされ、そのアプリケーションが起動される。必要なモジュールのみがインターネットを介して送信されること、およびＴｅｎＣＯＲＥネット・モジュールが非常に小さいことから、インターネット・パフォーマンスは非常に高速である。
【発明を実施するための最良の形態】
【００５６】
図１に示す通り、コンピューター・ネットワークは、ネットワーク・リンク１６の複合体によって１次サーバー・コンピューター１４と動作可能に接続された複数のユーザー・コンピューター１２を含む。１次サーバー１４は、不揮発性メモリー２０（図２）の領域１８において、１個以上のコンピューター１２での使用に所望され得るアプリケーション・プログラムを記憶する。本明細書において使用する用語「アプリケーション・プログラム」は、オペレーティングシステムおよび基本的なマシン機能を制御するための他の基本的プログラム以外のいずれかのコンピューター・コードの実行可能な集合をいう。
【００５７】
さらに図１に示す通り、ネットワークは、ユーザー・コンピューター１２からの要求に応答して１次サーバー１４を支援するために使用可能な複数の２次サーバー２２を含む。より詳細には、図２に示すように、１次サーバー１４は、１次サーバー１４が実行しなければならないジョブまたはタスクの待ち行列を連続的に監視する過負荷検出回路２４を有する。過負荷検出回路２４は、待ち行列内のタスクの数およびサイズが所定のスレッショルドを超えているか否かを判定する。スレッショルドに達すると、過負荷検出回路２４は、最もビジーでない２次サーバー２２を識別するためにメモリー２０の領域２８にアクセスする２次サーバー・セレクター２６に信号を送る。そのために、メモリー領域２８は、２次サーバー２２のリストおよび、各サーバーに関する測定された応答時間を含んでいる。
【００５８】
メモリー領域２８の２次サーバー・リストにある応答時間は、各２次サーバー２２にエコーパケットをディスパッチし、１次サーバー１４からの各エコーパケットの送信と各２次サーバー２２からの応答の受信との間の遅延を測定することによって、周期的に測定される。この測定を行うために、１次サーバー１４および、詳細にはその処理装置３０は、エコーパケット・ディスパッチャー３２および応答時間モニター３４を含む。１次サーバー１４のネットワーク通信インターフェース３６を介して２次サーバー２２にエコーパケットを送信する際に、ディスパッチャー３２は、パケットの送信および送信が行われた２次サーバー２２について応答時間モニター３４に通知する。モニター３４は、エコーパケットの送信と、各２次サーバー２２からネットワーク・リンク１６および通信インターフェース３６を経た応答の着信との間の時間をカウントする。応答時間更新ユニット３８は、メモリー領域２８に記憶された２次サーバー・リストに更新された応答時間を書き込むために応答時間モニター３４およびメモリー領域２８と接続されている。
【００５９】
メモリー２０のアプリケーション・プログラム・ストア１８は、多数の個別かつ独立したマシン実行可能コード・モジュールを含んでいる。従って、アプリケーション・プログラムにより作業するユーザー・コンピューター１２は、オペレーションの処理を開始するためにプログラム全体をロードする必要はない。アプリケーション・プログラムのユーザーによる実行がユーザーのコンピューター・メモリーに含まれていないコード・モジュールを要する場合、ユーザー・コンピューター１２からネットワーク・リンク１６によって１次サーバー１４へ要求が送信される。１次サーバー１４は、過負荷でなければ、要求されたコード・モジュールをプログラム・ストア１８から検索し、それを通信インターフェース３６およびネットワーク・リンク１６を通じて、要求を行ったユーザー・コンピューターに送信する。
【００６０】
１次サーバー１４の処理装置３０は、メモリー領域１８に記憶された単数または複数のアプリケーション・プログラムのコード・モジュールに対する到来要求を処理するコード・モジュール・エクスチェンジャー４０を有する。エクスチェンジャー４０は、特定コード・モジュールの要求されたバージョンがストア１８にある最新バージョンであるか否かを判定するためにアプリケーション・プログラム・ストア１８と相談するバージョン検出回路４２と協働する。最新バージョンでなければ、バージョン検出回路４２およびコード・モジュール・エクスチェンジャー４０は、要求されたコード・モジュールの最新バージョンが要求者によって利用可能であるか否かに関する照会を休止コンピューターに送信する。要求コード・モジュールの新しいバージョンが古いバージョンに代わり使用できる場合、その新しいバージョンが通信インターフェース３６およびネットワーク・リンク１６を通じて送信される。
【００６１】
コード・モジュールおよび、データ・ファイルといった他の資源は、セキュリティのために暗号化形式で送信できる。暗号化は、コード・モジュール、ファイル、文書その他の送信可能な資源を、暗号パケットのデータ領域に入れることによって行われる。暗号化されたパケットが通信インターフェース３６を介して処理装置３０により受信されると、パケットは、解読のために暗号化／解読ユニット４４へ汎用処理装置５０によって転送される。暗号化／解読ユニット４４は、複数の可能な暗号化キーを含むメモリー領域４６と相談し、ユーザー要求を含む暗号パケットにヘッダー情報により識別される暗号化キーを選択する。到来暗号パケットの解読時に、そこに含まれるユーザー要求またはコード・モジュール交換パケットは、処理のためにコード・モジュール・エクスチェンジャー４０に転送される。暗号化／解読処理は、暗号化／解読ユニット４４およびメモリー領域４６の機能を実行するプラグイン・コード・モジュールによって扱うことができる。任意の数のプラグイン暗号化コード・モジュールが任意の時点でデータ・コード転送システムに存在し得る。暗号パケットのヘッダーは、いずれのプラグイン暗号化コード・モジュールが解読のために使用されなければならないかに関する指示を含む。
【００６２】
実行可能コード・モジュールの交換のためのプロトコルを有するコンピューター・ネットワークのセキュリティをさらに強化するために、１次サーバー１４は、メモリー領域４８にユーザー確認コードのリストを記憶している。別のコンピューターからの例えばマシン実行可能コード・モジュールの要求に応答して、処理装置３０のコンパレーター５２は、その要求のユーザー確認コードとメモリー領域４８に記憶されたユーザー確認コードのリストとを比較照合する。コード・モジュール・エクスチェンジャー４０は、要求のユーザー確認コードが記憶されたリストのユーザー確認コードと合致した場合にのみ、選択されたマシン実行可能コード・モジュールの検索および送信を進める。マシン実行可能コード・モジュールの到来要求が暗号パケットに含まれている場合、暗号化／解読ユニット４４は、その要求のユーザー確認コードとメモリー領域４８のユーザー確認コードのリストとのコンパレーター５２による比較照合の前に、暗号パケットを解読する。ユーザー要求がセレクター２６により選択された２次サーバー２２に中継される場合、２次サーバーは暗号パケットの暗号化および解読のために暗号化／解読ユニットおよび確認コードコンパレーターを組み込み、ユーザー確認コードの確認を２次サーバーにより実行することができる。これらのセキュリティ対策を実行するために必要なあらゆるプログラムまたはデータは、１次サーバー１４から選択された２次サーバー２２に送信できる。
【００６３】
図３に示す通り、ユーザー・コンピューター１２の処理装置５４は、ユーザーによりアプリケーション・プログラムの実行中に当該コード・モジュールが要求された時に、アプリケーション・プログラムの所要のコード・モジュールに対する要求を生成するコード・モジュール・エクスチェンジャー５６を備える。コード・モジュール要求は、ユーザー・コンピューター１２のネットワーク通信インターフェース５８、ネットワーク・リンク１６（図１）および１次サーバー１４の通信インターフェース３６を介して１次サーバー１４のコード・モジュール・エクスチェンジャー４０に送信される。
【００６４】
セキュリティ強化システムにおいて、ユーザー・コンピューター１２の処理装置５４は、コード・モジュール要求パケットおよび他の情報転送パケットを、ユーザー・コンピューター１２の不揮発性メモリー６４の領域６２に記憶された複数のキーから選択される暗号化キーを有する各暗号パケットのデータ領域に挿入する暗号化／解読ユニット６０を備える。やはり、ユーザー・コンピューター１２における暗号化／解読処理は、暗号化／解読ユニット６０および領域６２の機能を実行するプラグイン・コード・モジュールによって扱うことができる。暗号化／解読ユニット６０により生成された暗号パケットのヘッダーは、１次サーバー１４のいずれのプラグイン暗号化コード・モジュールが解読のために使用されなければならないかに関する指示を含んでいる。
【００６５】
一般に図１のコンピューティング・システム、特にユーザー・コンピューター１２をコンピューター・ウイルスその他の有害なプログラムから保護するために使用されるさらなるセキュリティ強化策では、処理装置５４に、メモリー６４のオーサー識別リスト６８にアクセスするオーサー識別コンパレーター６６が備えられる。オーサー識別リスト６８は、１次サーバー１４からの到来命令に応答してオーサー識別コンパレーター６６および汎用処理回路７０の他の機能変換ブロックによって周期的に更新される。オーサー識別リスト６８は、許可されたオーサーのリストまたは、恐らくより効率的には、ウイルスその他の有害なプログラムをネットワークに流したことによりブラックリストに載せられたオーサーのリストを含んでいる。到来マシン実行可能コード・モジュールの使用の前に、パケット・ヘッダーのオーサー識別が、その特定のコード・モジュールのオーサーがブラックリストに載っていないかどうかを判定するためにコンパレーター６６により確認される。オーサーがユーザー・コンピューター１２の実行可能コード・モジュールを作成する許可を得ている場合、到来コード・モジュールの処理は正常に進行する。他方、到来コード・モジュールのオーサーがブラックリストに載っていた場合、そのコード・モジュールは決して実行されず、メモリー６４のアプリケーション・プログラム・ストア７２に記憶される前に破棄されるであろう。
【００６６】
図１および２によって上述した通り、１次サーバー１４は、１次サーバーおよび２次サーバーの負荷状態にもとづき、２次サーバー２２への到来ユーザー要求を場合に応じて渡すことができる。一般に、ユーザーの要求に応答する責任のこのハンドオフは、ユーザーにとって透過である。すなわち、ユーザーの要求の処理はユーザーによる知識または介在を伴わずに進行する。また、ユーザー・コンピューター１２が１次コンピューター１４から２次コンピューター２２の選択を引き受けることも可能である。そのために、ユーザー・コンピューター１２の処理装置５４には、メモリー６４の２次サーバーのリスト７６にアクセスする２次サーバー・セレクター７４が備わっている。一般に、セレクター７４は、各ユーザー・コンピューター１２に関して最小応答時間を伴う２次サーバー２２を選択する。そのために、処理装置５４はさらに、エコーパケット・ディスパッチャー７８、応答時間モニター８０および応答時間更新ユニット８２を備える。ディスパッチャー７８は通信インターフェース５８およびネットワーク・リンク１６（図１）を介して２次サーバー２２にエコーパケットを送信し、モニター８０は各２次サーバーからの応答の遅延を判定する。更新ユニット８２は、ディスパッチャー７８およびモニター８０によって実行された測定に従ってリスト７６の応答時間データを補正する。リスト７６の２次サーバー応答時間の更新は、ユーザー・コンピューター１２が１次サーバー１４からユーザー・モジュールまたは他の資源を要求し、そのサーバーがビジーでそのユーザー要求を取り扱うことができない場合にのみ実施されることが想定されている。
【００６７】
ユーザー・コンピューター１２の処理装置５４は、処理装置５４が大きなタスクの処理をネットワークの他のユーザー・コンピューターと分担できるようにする分散処理回路８４を有する。従って、ユーザー・コンピューターが全能力で実行していない（処理装置５４が５０％以上アイドルであり、ネットワーク・トラフィックがまったく存在しない）場合、その分散処理回路８４は、プロセッサー集約的タスクの途中にあり、各ユーザー・コンピューター１２の処理装置５４に対して負荷の一部を転送できるような他のユーザー・コンピューター１２を探す。必要な場合、そのタスクを取り扱うコード・モジュールをアイドルのユーザー・コンピューター１２へ転送することもできる。このクライアント側での分散処理はプロセッサー集約的タスクの性能を著しく向上させる。
【００６８】
ユーザー・コンピューター１２の処理装置５４はまた、支払いの義務がある内容に対するアクセスを制御する計量配信・支払請求回路８６も有する。回路８６がアクセス可能であるメモリー６４のクレジット・レジスタ８８は、特定のユーザーが各自のアカウントに対して有するクレジットを記憶する。１次サーバー１４により維持または監視されるアカウントのクレジットが低下した場合、回路８６は、その特定のユーザーに１次サーバー１４からさらにクレジットを転送するように構成することができる。計量配信・支払請求回路８６はクレジットで支払う請求方法を備える。一般に、クレジット要求およびそれに対する応答は暗号化されなければならない。
【００６９】
ユーザー・コンピューター１２の処理装置５４はさらに、１次サーバー１４または選択された２次サーバー２２に対してデータ・ファイルをアップロードするためにメモリー６４のデータ・ファイル９２にアクセスする一方向データ提示・収集回路９０を備える。データ提示・収集回路９０は、ユーザー・コンピューターがサーバーからデータを読み返す必要がない場合に動作する。この回路は、オンライン注文、フォーム提示および、とりわけ（統計データを含む）データ収集に特に有用である。
【００７０】
一般に、書き込むべきデータを有するパケットは、１次サーバー１４へ直接送信されなければならず、シャントされることはできない。これにより、書き込まれた資源の異なるバージョン間の競合が防止される。サーバーに書き戻されたデータはユーザー確認を要求するべきである。ユーザー確認は、書き戻しがオーサーの制御下のプログラムによってのみ行われた場合でも使用するべきである。その場合、ユーザー確認コードおよびパスワードはそのプログラムに組み込むことができる。この理由は、別のオーサーが、同一のデータを書き戻し、恐らくそれを破壊するようなプログラムを書くことを防ぐためである。
【００７１】
メモリー領域１８（図２）およびモジュール・ストア７２（図３）に記憶されたアプリケーション・プログラム・コード・モジュールは、ディスク駆動装置とデスクトップ・コンピューターの中央処理装置との間のプログラム転送を助成するために小さな効率的なコード・モジュールを使用するために本来設計されたモジュラー・プログラミング言語である、ＴｅｎＣＯＲＥで書かれている。ＴｅｎＣＯＲＥは、例えばコード転送機能をネットワーク・リンクによって動作するように適応させるために、容易に修正できる。ユーザー・コンピューター１２、１次サーバー１４および２次サーバー２２で使用するためにそのように修正されたプログラムを「ＴｅｎＣＯＲＥ  Ｎｅｔ」と呼ぶことができる。
【００７２】
ＴｅｎＣＯＲＥ  Ｎｅｔは、各機能を実行するために小さな個別のコード・モジュールを使用し、それにより、各コード・モジュールが１次サーバー１４または選択された２次サーバー２２から単一の対話でダウンロードされる際に効率的な性能を可能にする。ＴｅｎＣＯＲＥ  Ｎｅｔでのプログラミングはオープンエンドであるので、ユーザー・コンピューター１２は、当該アプリケーション・プログラムがメモリー６４のプログラム・ストア７２に部分的にしか記憶されていない場合でもアプリケーション・プログラムの命令を実行する。
【００７３】
メモリー・ストア７２に保持されたコード・モジュールは、直接的なマシン使用には翻訳または解釈されなければならないユーザー使い勝手な疑似コード言語となっている。そのために、処理装置５４は、全部の基本的な所要の機能を効率的にインプリメントするプログラムまたはプログラムされたインタープリター回路９４を備える。このインタープリターはそれ自体いかなる内容も持たない。内容は、メモリー・ストア７２にロードされ、インタープリター９４にコマンドを効果的に発行する、潜在的に無限数の小さな疑似コード・モジュールから得られる。プログラムを書くうえでプログラマーまたはオーサーの関与は、単にインタープリターにコマンドを発行し、インプリメンテーションの難題のすべてはインタープリターに任せるまでに低減する。
【００７４】
ＴｅｎＣＯＲＥは、ネットワーク使用を可能にするために２通りに修正することができる。第１に、実行に意図されたコードがアプリケーション・プログラム・メモリー領域７２に存在するか否かを確認するためのサブルーチンまたは命令セットをコンピューター・コードの各コール行の前に挿入することができる。存在しなければ、コード・モジュール・エクスチェンジャー５６は、所要のコード・モジュールを１次サーバー１４から取得するように命令される。所要のコード・モジュールがメモリー領域７２にダウンロードされると、それは処理回路７０による実行前にインタープリター回路９４によって翻訳される。
【００７５】
モジュール型アプリケーション・プログラムならびにコード・モジュール・エクスチェンジャー４０および５６の使用により、ネットワーク上のコンピューター１２、１４および２２間におけるコンピュータープログラムの記憶および転送の制御は最適化され、それにより対話型プログラムの使用を助成する。１次サーバー１４の不揮発性メモリー領域１８に記憶されたアプリケーション・プログラムは、モジュール方式で各ユーザー・コンピューター１２に転送され得る。ユーザー・コンピューター１２または選択された２次サーバー２２からネットワーク・リンク１６によって送信された要求に応答して、１次サーバー１４は、メモリー領域１８から選択されたマシン実行可能コード・モジュールおよびその選択されたコード・モジュールだけを検索し、その選択されたコード・モジュールをネットワーク・リンク１６によってユーザー・コンピューターまたは２次サーバーに送信する。
【００７６】
アプリケーション・プログラムが例えばドローまたはペイント・プログラムである場合、ユーザー・コンピューター１２は、切頭角錐台といった三次元幾何学図形を描画するように命令され得る。プログラム・ストア７２にあるアプリケーション・プログラムがそのタスクを実行するために必要なコード・モジュールを欠いていると処理回路７０が認知すると、コード・モジュール・エクスチェンジャー５６はその必要なモジュールが１次サーバー１４から転送されるように要求する。その要求に応答して、バージョン検出回路４２は、所要のモジュールの最新バージョンが存在することを確かめ、その最新バージョンが各ユーザー・コンピューターによる使用のために受け入れ可能であるか否かをコード・モジュール・エクスチェンジャー５６に問合わせる。
【００７７】
このようにして、ユーザー・コンピューター１２は、アプリケーション・プログラムのコード・モジュールの全部を有することはなく、それらのモジュールが必要な場合にのみ新しいコード・モジュールを取得する。アプリケーション・プログラムの実行可能コードが個別に実行可能なモジュールに分解されるので、プログラムは、個々のモジュールがプログラムのユーザー実行に必要とされる時に、モジュールごとに少しずつダウンロードすることができる。従って、ユーザーは、プログラムを使用開始できる前に、プログラム全体がダウンロードされるのを待つ必要がない。
【００７８】
同様に、選択された２次サーバー２２は、プログラム全体および、１次サーバー１４によるプログラムの配布の取扱に関する他の資源を持たなくとも、転送またはシャントされたユーザー要求を処理し、そのクライアント／ユーザーに直接応答し始めることができる。選択された２次サーバー２２がユーザー要求を取り扱うために必要なコード・モジュール、データ・ファイルまたは他の資源を持っていない場合、所要のコード・モジュール、データ・ファイルまたは他の資源は１次サーバーから２次サーバーへ転送され得る。それ故、２次サーバー２２はエクスチェンジャー４０および５６と同様のコード・モジュール・エクスチェンジャーを備える。
【００７９】
当然ながら、１次サーバー１４は、その全能力に到達する以前に自己の負荷を分散させ、それにより、２次サーバーがシャントされたユーザー要求またはタスクを履行するために必要な資源に対する２次サーバーからのあらゆる要求を満たすために十分なシステム資源（プロセッサー、メモリーなど）を自由にさせておかなければならない。
【００８０】
セキュリティが重要なネットワークでは、２次サーバー２２は、確認コンパレーター５２とともに、ユニット４４のような暗号化／解読ユニットを備える。マシン実行可能コード・モジュールの到来要求が暗号パケットに含まれている場合、２次サーバーは、要求のユーザー確認コードとメモリーのユーザー確認コードのリストとの比較照合の前に、暗号パケットを解読する。こうしたセキュリティ対策を行うために必要なあらゆるプログラムまたはデータは、１次サーバー１４から送信され得る。
【００８１】
２次サーバーは、クライアント・マシンと連絡できない場合、他の２次サーバーがそのクライアント・マシンと直接連絡がとれるかもしれないので、処理のために別の２次サーバーへユーザー要求を転送することができる。
【００８２】
処理装置５４のコード・モジュール・エクスチェンジャー５６は、ネットワークでの対話型処理を助成する。各ユーザー・コンピューター１２は、他のコンピューターによるコード・モジュールの実行に応答して、１個以上の選択されたコード・モジュールを実行する。従って、両方のコンピューターは、アプリケーション・プログラムのマシン実行可能コード・モジュールの少なくとも一部を記憶している。時には、一方のコンピューターが現在のメモリーに有していないコード・モジュールを必要とすることもある。その場合、そのコンピューターは他方のコンピューターから必要なコード・モジュールを取得することができる。他方のコンピューターも所要のモジュールを持っていない場合、アプリケーション・プログラムが全体として存在するサーバーに対して要求がなされるであろう。
【００８３】
このように、ネットワーク上のクライアントまたはユーザーは、相互にコード・モジュールを交換することができる。第１のユーザーおよび第２のユーザーが対話型ホワイトボード・セッションに関わっており、第２のユーザーがそのホワイトボード・プログラムのバージョンにないツールにより第１のユーザーが描画し始めた場合、そのツールの単数または複数のコード・モジュールが自動的に第１のユーザーのコンピューターから第２のユーザーのコンピューターへ転送され得る。
【００８４】
コード・モジュール・エクスチェンジャー５６は、ユーザー・コンピューターのアイドル時間中に、使用が予想されるコード・モジュールの送信を開始するように命令できることを指摘しておかなければならない。ユーザー・コンピューター１２からの要求は、そのユーザー・コンピューターのアイドル時間中にマシン実行可能コード・モジュールのために１次サーバー１４または他のコンピューターへ送信される。アイドル時間ダウンロードのために生成される資源要求はそうしたものとしてフラグが立てられるはずであり、その結果、コード・モジュール・エクスチェンジャー５６は、負荷の均衡および分散のために標準要求と異なる優先順位を割り当てることができる。資源要求のステータスは、ユーザーがアプリケーションの関係するセクションにアクセスしようと試みた場合に、アイドル時間からリアルタイムに更新され得る。
【００８５】
処理装置３０および５４の各種専用機能ブロックがソフトウエア修正汎用ディジタル処理回路として一般的かつ好適にインプリメントされていることを指摘しておかなければならない。それに応じて、コード・モジュール・エクスチェンジャー４０および５６は、サーバー１４または２２とユーザー・コンピューター１２との間でのコード・モジュールの交換のためのプロトコルとして特徴づけることができる。このコード・モジュール交換プロトコルは、負荷分散、ユーザー確認および暗号化を取り扱う「モジュール化コード・マスタ・プロトコル」（ＭＣＭＰ）のサブプロトコルとみなされる。負荷分散は、詳細には、１次サーバー１４においてプロセッサー過負荷検出回路２４および２次サーバー・セレクター２６により扱われ、ユーザー確認および暗号化は、１次サーバーおよび２次サーバー２２においてコンパレーター５２および暗号化／解読ユニット４４によって扱われる。
【００８６】
ＭＣＭＰは、４個のサブプロトコル、すなわち、「コード・モジュール交換プロトコル」（ＣＭＸＰ）、「一方向データ提示・収集プロトコル」（ＵＤＳＣＰ）、「計量配信・支払請求プロトコル」（ＭＤＢＰ）および「分散処理プロトコル」（ＤＰＰ）を有する。コード・モジュール交換プロトコルは、１次サーバー１４および２次サーバー２２の処理装置３０のコード・モジュール・エクスチェンジャー４０およびユーザー・コンピューター１２の処理装置５４のコード・モジュール・エクスチェンジャー５６によって実施される。一方向データ提示・収集プロトコルは、ユーザー・コンピューター１２の回路９０および、１次サーバー１４の図示していないが対応するプログラム修正処理回路によってインプリメントされる。計量配信・支払請求プロトコルは、ユーザー・コンピューター１２の回路８６および１次サーバー１４の図示していないが対応するプログラム修正処理回路によって実現される。分散処理プロトコルはユーザー・コンピューター１２の処理装置５４の回路８４の形態をとっている。
【００８７】
図４は、２次サーバー２２の可用性の更新リスト２８を維持するために１次サーバー１４の処理装置３０のエコー・ディスパッチャー３２、応答時間モニター３４および更新ユニット３８その他の処理回路が引き受けるオペレーションを例示している。同じ工程は、２次サーバー応答時間の更新リストを取得するためにユーザー・コンピューター１２の処理装置５４のエコー・ディスパッチャー７８、応答時間モニター８０および更新ユニット８２その他の処理回路によっても実行されるであろう。問合わせ１００において、エコー・ディスパッチャー３２もしくは７８または汎用処理回路５０もしくは７０は、最後のエコー試験からの時間が所定の最大期間ＴＭＲよりも大きいかどうかを問合わせる。最大期間を超えている場合、エコーパケット・ディスパッチャー３２または７８は、工程１０２で、最も以前に試験された２次サーバー２２にエコーパケットを送信する。応答時間モニター３４または８０は、問合わせ１０４で、応答が目標の２次サーバー２２から受信されたかどうかを判断する。応答が受信されておらず、かつ、所定数の測定試行を超えていなければ、決定結合子１０６で判断される通り、工程１０２で別のエコーパケットがディスパッチされる。応答が目標の２次サーバー２２から受信されていれば、更新ユニット３８または８２は、リスト２８または７６に、ディスパッチャー３２または７８による最初のパケット送信とモニター３４または８０によるエコーパケットの受信との間の時間を記録する。この記録は工程１０８で行われる。決定結合子１０６での判断に従って、２次サーバー応答時間測定の試行の数が所定の数を超えた場合、そのサーバーはリスト２８または７６で使用不可としてマークされる（工程１１０）。サーバーの管理者に知らせるためにメッセージまたは警告信号を生成することも可能であろう。問合わせ１００において、最後のエコー試験からの時間が所定の最大期間ＴＭＲよりも小さいと判定された場合、処理装置３０または５４は、１１２において、ＭＣＭＰ到来パケット待ち行列にパケットが存在するかどうかを調べる。存在しなければ、図４のメンテナンス・ループに再び入る。存在すれば、パケット処理オペレーション１１４が実行される。ＭＣＭＰ到来パケット待ち行列は、ネットワークから受信されたパケットおよび、ＭＣＭＰプロトコルにより待ち行列に入れられたパケットの両方を含むことに留意しなければならない。
【００８８】
図６Ａ〜６Ｅは、１次サーバー１４またはオーバーフロー処理のために選択された２次サーバー２２の処理装置３０によりＭＣＭＰプロトコルの下で実行されるオペレーション１１４を示す。最初の問合わせ１２４において、過負荷検出回路２４は、処理装置３０が到来パケット（例えば、コード・モジュールのユーザー要求としてよい）を取り扱えないほどビジーであるか否かを判断する。肯定であれば、処理回路５０は、そのパケットが２次サーバー２２にシャントできるか否かを判断するために結合子１２６においてＭＣＭＰパケット・ヘッダーを調べる。肯定であれば、その到来パケットがすでにシャントされたか否かを判断するためにさらに調査１２８が行われる。パケットが発信コンピューターによって直接サーバーに送信された（すなわち、シャントされていない）場合、２次サーバー・セレクター２６は工程１３０で最も負荷の軽い２次サーバー２２を見つけるためにリスト２８にアクセスする。その後の問合わせ１３２で、処理装置３０、より詳細にはサーバー・セレクター２６は、選択された２次サーバーが到来パケットの責任の転送に適しているか否かを判断する。選択された２次サーバーが適格であれば、パケットは、サービス・ハンドオフの結果としてフラグが立てられ、選択された２次サーバーへ転送される（工程１３４）。
【００８９】
工程１３０で選択された２次サーバーがハンドオフに適格でない場合、例えば、２次サーバーの応答時間が、問合わせ１３２での判断に従って、所定の最大値より大きい場合、到来パケットがサービス・ハンドオフの結果であるか否かに関する問合わせ１３６がなされる。この問合わせ１３６は、決定結合子１２６での判断に従って、そのパケットがシャントできない場合にも行われる。
【００９０】
問合わせ１３６での判断に従って、到来ＭＣＭＰパケットがサービス・ハンドオフの結果である場合、処理回路５０は要求された資源が使用可能であるか否かに関する調査１３８を行う。資源が使用可能でれば、処理回路５０は、１４０において、その資源が所定の有効期限を過ぎているか否かを尋ねる。肯定であれば、その資源の新しいバージョンが使用可能であるか否かを判断するために工程１４２で信号が資源のソースに送信される。決定結合子１４４での確認に従って、新しいバージョンが使用可能であれば、資源の新しいバージョンの要求が工程１４６でそのソースに送信される。この要求は、シャント不可能としてフラグが立てられ、さらに、優先要求としてフラグが立てられるはずである。
【００９１】
コード・モジュールのユーザー要求などの到来パケットの処理の前に、処理装置３０は、パケットがユーザー確認情報を含んでいるか否かを判断するために問合わせ１５０において到来パケットのヘッダー情報を調べる。ユーザー確認情報が見つかれば、１５２においてそのパケットの以前の暗号化ステータスが判断される。パケットが暗号化されていなければ、ユーザー確認が失敗したことを報告するためにメッセージが工程１５４で生成される。到来パケットが暗号化されていた場合、ソース・サーバーが指定されているか否かを判断するために１５６においてＭＣＭＰヘッダー情報が検査される。ソース・サーバーの指定がまったく存在しなければ、ユーザー確認失敗が工程１５４で報告される。ソース・サーバーがＭＣＭＰヘッダー情報で指定されており、かつ、決定結合子１５８での判断に従って、そのソース・サーバーがホスト・サーバーではない場合、メモリー領域４８がユーザー確認データの満了していないキャッシュコピーを有しているか否かに関する調査１６０が（確認コードコンパレーター５２によって）行われる。メモリー領域４８にユーザー確認データの満了していないキャッシュコピーがまったく存在しない場合、コンパレーター５２は、処理回路５０に、そのユーザーの確認データをソース・サーバーから取得させ、そのデータをメモリー領域４８に記憶させる（工程１６２）。評価１６４でのコンパレーター５２による判断に従って、ＭＣＭＰパケット・ヘッダー情報に含まれたユーザーのパスワードがキャッシュされたパスワードと合致しない場合、または、チェックポイント１６６での処理回路５０による認知に従って、ユーザーがソース・サーバーによりリストされていない場合、工程１６８においてユーザー確認は失敗したものとして報告される。また、ユーザー確認失敗の報告（工程１５４）は、ソース・サーバーがホスト・サーバーでない場合（決定結合子１５８）および、コンパレーター５２が調査１７０においてパケットヘッダーのユーザー確認データがメモリー領域４８のいずれのユーザー確認データとも一致しないと認めた場合にも行われる。
【００９２】
コンパレーター５２が、調査１７０または評価１６４での判断に従って、到来パケットの確認コードとメモリー領域４８のユーザー確認データとの間の合致を認めると、または、到来パケットがユーザー確認コードを含まない場合、評価１７１は、パケットがＭＣＭＰプロトコルによって直接扱われるべきか、または、別のプロトコルによって扱われるべきかを判断する。そのパケットがＭＣＭＰプロトコルによって直接扱われるべきであると評価１７１が判断した場合、パケットは、図５に示すように工程１７３において相応に処理される。評価１７１がそのパケットは特定のプロトコルによって扱われるべきであると判断した場合、処理回路５０は、いずれのプロトコル（例えば、ＣＭＸＤ、ＵＤＳＣＰ、ＭＤＢＰ、ＤＰＰ）がそのパケットの内容を取り扱うために適切であるかを判断する。応答が選択されたプロトコルのもとで処理装置３０または主たるＭＣＭＰプロトコルによって生成された場合、その応答は、工程１７６において、その要求を最初に行ったクライアントに送信される。サービス・ハンドオフが存在した場合、すなわち、パケットがホスト・サーバーへシャントされた場合、応答は、ホストがそのパケットを受信したコンピューター以外のコンピューターへ送信されることになる。工程１７８において、処理装置３０は、待ち行列の次のパケットの処理を始めるか、または、新しいパケットが着信するのを待つ。
【００９３】
図５に示す通り、処理オペレーション１７３は、パケットのタイプの初期問合わせ１１６を含む。パケットが暗号パケットであれば、暗号化／解読ユニット３８または６０が工程１１８で起動され、適切な解読モジュールまたはキーを用いてパケットを解読する。その後の工程１２０では、暗号パケットのデータ領域に格納されたパケットは、シャント不可能としてフラグが立てられ、ＭＣＭＰ到来パケット待ち行列に戻される。問合わせ１１６においてパケットが暗号パケットではないと判断されると、未知のパケット・タイプを指示するＭＣＭＰステータス報告が工程１２２で発行され、そのパケットは破棄される。ＭＣＭＰプロトコルの機能性は、付加的なパケットのタイプに関する条件を含むように図５に示すプロセスを増強することによって後で強化することもできる。
【００９４】
コード・モジュール交換プロトコル（ＣＭＸＰ）は、実行可能コードのダウンロード、プログラム・バージョン制御、クライアント−クライアント間モジュール交換、ウイルスおよび有害プログラムに対する保護、データアップロード、アイドル時間ダウンロードおよびコード・モジュール・キャッシングを扱う。これらの機能は、サーバー１４および２２においてコード・モジュール・エクスチェンジャー４０およびバージョン検出回路４２によって、また、ユーザー・コンピューター１２においてコード・モジュール・エクスチェンジャー５６、オーサー識別コンパレーター６６および一方向データ提示・収集回路８６によって、さらに各種無指定の汎用処理回路５０および７０によって、多様に実行される。コード・モジュール・エクスチェンジャー４０により部分的にインプリメントされるＣＭＸＰプロトコルのサーバー側部分は、コード・モジュールおよび、図形イメージおよびフォントといった支援資源の配信を取り扱う。ＣＭＸＰサーバーおよびコード・モジュール・エクスチェンジャー４０への要求は、ファイル、（コード・モジュールといった）ファイルの一部または、コード・モジュールまたは他の支援モジュールの一部を参照できる。プログラムは別々のコード・モジュールに分解されるので、これらのコード・モジュールは必要に応じて配信することができ、その実行が開始可能となる以前にプログラム全体をダウンロードする必要をなくす。
【００９５】
プログラムが少しずつモジュールごとに配信される、アップグレードを適応または組み込む方法がいくつかある。新旧バージョンが完全に互換可能である（例えば、新しいバージョンがダイアログボックスの文字表記の誤りの訂正の結果として作成された）場合、新しいモジュールは古いモジュールとマージすることができる。バージョン情報は、コード・モジュール単位でとともにファイル単位でも記憶される。これは、バージョン・アップグレードで変更されていないコード・モジュールは再度ダウンロードされる必要がないことを意味する。新旧バージョンが互換可能でなくマージできない場合、かつ、プログラム全体がローカルでキャッシュされているか、またはサーバーからまだ入手可能である場合、そのプログラムの古いバージョンはプログラムが次に再始動される時まで実行し続けることができる。新旧バージョンが互換可能でなくマージできない場合、かつ、プログラムの古いバージョンが全体としてもはや入手できない場合、そのプログラムはただちに終了され、新バージョンのコード・モジュールによって再始動されるはずである。プログラムのオーサーは、プログラムの新バージョンにカスタム・コード・モジュールを含めることによってこれらの更新プロシージャのいずれかに優先させることができる。このコード・モジュールは、バージョンの競合が生じた際に、（必要に応じて）ダウンロードされ実行される。その後、上記のプロシージャのいずれかまたは、そのプログラムのメモリー領域の内容を再マップし新バージョンにより使用可能にするといったカスタム・プロシージャを実行するために選択を行うことができる。
【００９６】
コード・モジュールおよび関係する資源は、ユーザー・コンピューター１２および２次サーバー２２の両方によってキャッシュされる。キャッシング規則は、ＣＭＸＰプロトコルおよび／またはアプリケーション・プログラム自体に組み込むことができる。これにより、カスタム・キャッシング規則をアプリケーションに組み込むことが可能となり、特殊なキャッシング規則およびハイブリッド・アプリケーションを付与することができる。コード・モジュールのダウンロードが進行中、完了したバイト数は、ダウンロードされた実際のデータとともにキャッシュに記憶される。ダウンロードが割り込まれた場合、残りの箇所から後に再開できる。
【００９７】
図７は、ＣＭＸＰプロトコルに従って機能的に修正されている処理装置３０のディジタル処理回路によって実行されるオペレーションを示している。これらのオペレーションにはオーサー識別の検査を含む。一般に、ユーザー・コンピューター１２のメモリー領域６８のオーサー・ブラックリストは、リストを更新させるための保守オペレーション（図８）を引き受けるサーバーからユーザー・コンピューターへ送信される。
【００９８】
図７に示す通り、１８０において、処理回路５０は到来パケットが資源要求をなすものであるか否かを問合わせる。この問合わせに対する肯定応答は、その要求された資源が匿名アクセスに使用可能であるか否かに関する以後の問合わせ１８２につながる。資源が制限されている場合、要求側ユーザーが要求資源へのアクセス権を持っているか否かに関する判断１８４が行われる。ユーザーがそうした権利を持っていなければ、工程１８６で要求者に対して「アクセス拒否」のメッセージが返される。要求資源が要求側に使用可能である場合、処理回路５０は決定結合子１８８において要求資源が実行可能コードを含んでいるか否かを判断する。肯定判断は、オーサーの指紋の有効性に関する問合わせ1９０を生じる。指紋またはオーサーの識別が無効である場合、工程１９２で責任者へのメッセージが生成される。その後の工程１９４で資源のローカル・コピーが削除され、工程１９６で「資源配布禁止」のメッセージが要求側に送信される。
【００９９】
問合わせ１９０に応答して要求された資源のオーサーの指紋が有効であるとわかった場合、そのオーサーがブラックリストに載っているか否かの検査１９８が行われる。ブラックリストに載っている場合、工程１９４での資源のローカル・コピーの削除および工程１９６での「資源配布禁止」メッセージの発行につながる。オーサーがブラックリストに載っていない場合または、決定結合子１８８での判断に従って要求資源が実行可能コードを含んでいない場合、処理装置３０は、２００において、そのクライアントがすでに資源の最新コピーを有しているか否かを問合わせる。クライアントまたはユーザーがすでに資源の最新バージョンを有していれば、その旨のメッセージが工程２０２で送信される。クライアントまたはユーザーの資源のコピーが古いバージョンである場合、要求された資源が工程２０４でクライアントに送信される。
【０１００】
問合わせ１８０に対する応答で確定された通り、到来パケットが資源の要求となっていない場合、そのパケットが資源を修正する要求をなすものであるか否かに関する調査２０６が行われる。肯定であり、かつ、決定結合子２０８での判断に従ってその資源が匿名での修正に使用できない場合、処理装置３０は２１０において、ユーザーがその資源を修正する権利を有するか否かを問合わせる。ユーザーがそうした権利を持っていない場合、工程２１２で要求者に対して「アクセス拒否」のメッセージが返される。資源が誰によっても（決定結合子２０８）または特定のユーザーによる（決定結合子２１０）修正に使用可能である場合、処理装置３０は、工程２１４でその資源に対する要求された修正を行い、工程２１６で資源の変更を主要な２次サーバーに通知する。
【０１０１】
問合わせ１８０の応答で確定された通り、到来パケットが資源の要求となっておらず、かつ、調査２０６での判断に従って、資源を修正する要求でもない場合、処理装置３０は２１８において、パケットが、禁止されたユーザーまたはブラックリストに載ったオーサーのリストといった禁止リストに対する更新であるか否かを検査する。決定結合子２２０での判断に従ってパケットがそのような更新であり暗号化されている場合、処理装置３０はそのパケットがシステム・ユーザー・アカウントのもとで送られたか否かを問合わせ２２２で判断する。肯定であれば、禁止リストのキャッシュされたコピーは工程２２４で更新され、工程２２６で全部の２次サーバーにその更新が通知される。到来更新要求が暗号化されていないか（決定結合子２２０）またはシステム・ユーザー・アカウントのもとで送られていない（問合わせ２２２）場合、工程２２８で適切な当事者に対して警告メッセージが発せられる。工程２３０では、未知のパケット・タイプが受信された場合に、特殊なステータス報告が発行される。
【０１０２】
ブラックリストに載ったオーサーのリストを更新するための図８に示すＣＭＸＰメンテナンス・ループでは、処理装置３０は、最初の問合わせ２３２において、最後のリスト更新からの時間が所定の時間数より大きいか否かを尋ねる。大きい時間が経過していた場合、その問合わせを行っているサーバーの上流の次のサーバーと連絡する試み２３４がなされる。スキャン２３６での判断に従って、当該サーバーと連絡がとれない場合、使用可能な他のサーバーがあるか否かの検査２３８が行われる。別のサーバーが使用可能であれば、そのサーバーと連絡する試み２４０がなされる。いずれのサーバーとも連絡がとれない場合、２４２において時間が再び検査される。最終更新から所定の間隔が経過していた場合、工程２４４で適切な当事者に対して警告メッセージが付与される。
【０１０３】
スキャン２３６での判断に従って、サーバーと連絡がとれた場合、工程２４６で、禁止リストの最終修正の日付がそのサーバーから取得される。比較２４８において、処理装置３０は、リストが処理装置によってキャッシュされてから禁止リストが修正されたか否かを判断する。そのような修正が生じていた場合、工程２５０で禁止リストのコピーが取得される。取得されたリストの暗号化ステータスは工程２５２で調査される。禁止リストが非暗号化コピーであるとわかると、工程２５４での警告ステータスにつながるが、暗号パケットは２５６において、そのパケットがシステム・ユーザー・アカウントのもとで送られたか否かを判断するために調査される。適正に送信されたパケットは、工程２５８における禁止リストのキャッシュされたコピーの更新および工程２６０における全サーバーへのその更新の通知を生じる。
【０１０４】
一方向データ提示・収集プロトコル（ＵＤＳＣＰ）によってデータを提示または収集するための２通りの基本的方法が存在する。第１の方法に従えば、提示は１次サーバー１４または２次サーバー２２のいずれか一方に指示され得る。全部の提示はその後、それらの提示がアプリケーション特定サーバー側モジュールによって処理される中央サーバーに収集される。この方法は、全部のフォーム提示を、ＬＡＮベースのメール・システムに組み込むことができる１個のサーバーで収集する際に特に有用であろう。第２の方法では、提示はやはり１次サーバー１４または２次サーバー２２のいずれか一方で指示され得る。それらの提示は、それらが本来提示されたサーバーで収集される（または、標準のロード収集規則によってシャントされる）。提示はその後アプリケーション特定サーバー側モジュールによって処理される。このモジュールは、例えば、全部の提示をインターネット電子メール・アドレスに電子メールできるであろう。
【０１０５】
図９は、ＵＤＳＣＰプロトコルに従って機能的に修正される処理装置３０のディジタル処理回路が引き受けるプログラム工程を例示している。これらの回路は、ユーザー・コンピューター１２から、詳細には処理装置５４の一方向データ提示・収集回路９０から、および、他のサーバーから送信されたデータ提示を取り扱う。第１の問合わせ２６２において、処理装置３０は到来パケットがデータ提示であるか否かを問合わせる。肯定であれば、そのデータは即時的に収集されなければならないものであるか否かに関する別の問合わせ２６４がなされる。即時収集が要求された場合、処理装置３０が受ける次の質問２６６は、そのデータがソース・サーバーで収集されなければならないものであるか否かである。否定であれば、そのパケットは工程２６８で、最終的なデータ収集を扱うモジュールへ渡される。このモジュールは、提示の電子メーリング、データベースへの記録、ファイルへの書き込みまたは、そのデータによる他のいずれかの所要のサーバー側タスクの実行を取り扱う。その後、調査２７０において、要求がデータ収集モジュールによって処理されたか否かが検査される。肯定であれば、パケットは工程２７２において、そのパケットが取得された場所と仮定してＵＤＳＣＰ提示処理待ち行列から除去される。その後、データパケット送信成功を示すステータス報告が工程２７４で発行される。調査２７０で要求がデータ処理モジュールによって処理されていないと判明した場合、処理装置３０は２７６において、処理の失敗が想定し得る一時的な条件によるものであるか否かを尋ねる。この質問２７６の応答が否定であれば、そのエラー状態を説明するステータス報告２７８が発行される。質問２７６の応答が肯定であれば、その状態を説明し、データの処理における遅延の可能性を示すステータス報告２８０が発行される。その後パケットは工程２８２でＵＤＳＣＰ処理待ち行列に追加される。
【０１０６】
問合わせ２６２および２６４での判断に従って、到来パケットが即時的に収集されなくてもよいデータ提示である場合、成功を示すステータス報告２８４が発行された後、パケットは工程２８６でＵＤＳＣＰ処理待ち行列に追加される。問合わせ２６２および２６４での判断ならびに質問２６６の応答に従って、到来データパケットがソース・サーバーにおいて即時的に収集されなければならないデータ提示である場合、ホスト・サーバーがソース・サーバーであるか否かに関する検査２８８が行われる。肯定であれば、そのパケットは工程２６８で、最終的なデータ収集を扱うモジュールへ渡される。否定であれば、処理装置３０はソース・サーバーと連絡がとれるか否かに関する調査２９０を行う。連絡が不可能である場合、そのデータの処理に遅延が生じることを示すステータス報告２９２が生成された後、パケットは工程２８６でＵＤＳＣＰ処理待ち行列に追加される。ソース・サーバーと連絡できる場合、データは工程２９４でそのサーバーに送信される。処理装置３０のＵＤＳＣＰ機能修正汎用処理回路にデータ提示以外のパケットが与えられた場合、そのパケットが未知のタイプのものであることを示す報告が工程２９６で作成される。
【０１０７】
図１０は、ＵＤＳＣＰプロトコルに従って機能的に修正される処理装置３０の汎用ディジタル処理回路が引き受けるメンテナンス・ループの工程を例示している。最初に、ＵＤＳＣＰ提示処理待ち行列にエントリが存在するか否かに関する問合わせ２９８が行われる。肯定であれば、第１のエントリが工程３００で読み出される。その後、処理装置３０は、エントリの日付およびタイムスタンプからＸ秒以上が経過しているか否かを結合子３０２で決定する。否定であれば、ＵＤＳＣＰ提示処理待ち行列が３０４において、待ち行列に他のいずれかのエントリが存在するか否かを確認するために調査される。肯定であれば、次のエントリが工程３０６で読み出され、処理装置３０は再びそのエントリの日付およびタイムスタンプからＸ秒以上が経過しているか否かを結合子３０２で決定する。経過時間が所定の限界値より大きければ、サーバーがそのデータ提示を取り扱うには過度にビジーであるか否かに関する問合わせ３０８が行われる。サーバーが実際に過度にビジーである場合、処理装置３０は３１０において、データが即時的に収集されなければならないか否かを尋ねる。データ収集が緊急でなければ、処理装置３０は３１２においてデータの日付およびタイムスタンプが特定時点より以前のものであるか否かを判断する。日付およびタイムスタンプが新しければ、処理装置３０は、ＵＤＳＣＰ提示待ち行列の残りのデータ提示を検査するために調査３０４に戻る。
【０１０８】
サーバーがデータ提示を扱うために過度にビジーではない場合（問合わせ３０８）、データが即時的に収集されなければならない場合（問合わせ３１０）または日付およびタイムスタンプがデータ提示に一定の経過を示している場合（判断３１２）、処理装置３０は決定結合子３１４でそのデータがソース・サーバーにより収集されなければならないか否かを判断する。否定であれば、そのパケットは工程３１６で、最終的なデータ収集を扱うモジュールへ渡される。このモジュールは、提示の電子メーリング、データベースへの記録、ファイルへの書き込みまたは、そのデータによる他のいずれかの所要のサーバー側タスクの実行を取り扱う。その後、処理装置３０は３１８において、そのデータ提示がデータ収集モジュールによって処理されたか否か検査する。実際に処理が行われていれば、パケットは工程３２０でＵＤＳＣＰ提示処理待ち行列から除去され、処理装置３０は待ち行列にさらにいずれかのエントリがあるか否かを確認するために調査３０４に戻る。３１８において判明した通り、データ提示パケットが処理されていない場合、その要求の失敗が想定し得る一時的な条件によるものであるか否かの問合わせ３２２がなされる。否定であれば、適切な者に失敗を警告するために通知３２４が生成される。肯定であれば、そのデータ提示の日付およびタイムスタンプは工程３２６で更新される。
【０１０９】
処理装置３０が決定結合子３１４においてデータがソース・サーバーにより収集されなければならないと判断し、さらにその後の決定結合子３２８においてホスト（自体）がソース・サーバーであると判断した場合、パケットは処理される（工程３１６）。あるいはまた、ソース・サーバーがデータ収集を行わなければならず、決定結合子３２８での判断に従って、それが異なるコンピューターである場合、ソース・サーバーと連絡をとる試み３３０がなされる。ソース・サーバーと連絡がとれなければ、データ提示の日付およびタイムスタンプは工程３２６で更新される。ソース・サーバーが使用可能であれば、データ提示は工程３３２でソース・サーバーに送信され、そのパケットは工程３３４でＵＤＳＣＰ処理待ち行列から除去される。
【０１１０】
上述のように、ＭＣＭＰプロトコルは、負荷分散、ユーザー確認および暗号化を扱う。他の全部の機能はサブプロトコルによって扱われる。ＭＣＭＰプロトコルは４個のサブプロトコルを有する。コード・モジュール交換プロトコル（ＣＭＸＰ）、一方向データ提示・収集プロトコル（ＵＤＳＣＰ）、計量配信・支払請求プロトコル（ＭＤＢＰ）および分散処理プロトコル（ＤＰＰ）が存在する。このプロトコルのセットは、ＭＣＭＰプロトコルの付加的な機能性を追加するために将来拡張され得る。
【０１１１】
基本ＭＣＭＰパケット構造
全部のＭＣＭＰパケットは、ＭＣＭＰヘッダーに続き、オプションによる１個以上の資源識別子および、パケット・ボディと称するデータ領域より構成される（図１）。ＭＣＭＰパケットの全サイズは、１２８＋ＲｓｒｃＩＤＬｅｎ＋ＰａｃｋｅｔＳｉｚｅとして計算できる。ここで、ＲｓｒｃＩＤＬｅｎおよびＰａｃｋｅｔＳｉｚｅはＭＣＭＰヘッダーの要素である（以下参照）。
【０１１２】
ＭＣＭＰヘッダーは、そのパケットが属するサブプロトコルおよび、パケットのタイプを識別する。さらに、ＭＣＭＰヘッダーは負荷分散、ユーザー確認および暗号化情報を含んでいる。資源識別子は、そのパケットにおいて参照されるいずれかの資源を識別する（ＲｅｓｏｕｒｃｅＲｅｑフラグが設定される）。ＭＣＭＰパケット・ボディは、パケット・タイプ特定情報を含み、常にサブプロトコル・ハンドラによって解釈される。パケット・ボディは、オプションであり、ＭＣＭＰヘッダーのＰａｃｋｅｔＳｉｚｅ要素を０に設定することによって省略できる。
【０１１３】
ＭＣＭＰヘッダーの構造は以下のように定義される。
ＭＣＭＰＨｅａｄｅｒ，１２８    ＄＄ＭＣＭＰヘッダー構造
・ＭＰＶｅｒｓｉｏｎ，４          ＄＄マスタ・プロトコル・バージョン
・ＰｒｏｔｏＶｅｎｄｏｒ，８      ＄＄プロトコル・ベンダー
・ＰｒｏｔｏＩＤ，８              ＄＄プロトコルＩＤ
・ＰｒｏｔｏＶｅｒ，４            ＄＄プロトコル・バージョン
・ＴｒａｎｓＩＤ，２              ＄＄クライアント割り当てトランザクショ
ンＩＤ
・ＰａｃｋｅｔＴｙｐｅ，２        ＄＄プロトコル特定パケット・タイプ
・ＰａｃｋｅｔＶｅｒｓｉｏｎ，４  ＄＄パケット・バージョン番号
・ＰａｃｋｅｔＳｉｚｅ，４        ＄＄パケット・ボディのバイト単位でのサ
イズ
・ＯｒｉｇＩＰ，４                ＄＄発信元ホストのＩＰアドレス
・ＯｒｉｇＰｏｒｔ，２            ＄＄発信元ホストのポート番号
・ＵｓｅｒＩＤ，１０              ＄＄クライアント確認用ユーザーＩＤ
・Ｐａｓｓｗｏｒｄ，１０          ＄＄クライアント確認用パスワード
・ＲｓｒｃＩＤＬｅｎ，２          ＄＄資源識別子の長さ
・ＲｓｒｃＩＤｓ，２              ＄＄資源識別子の数
・ＲｓｒｃＳｒｃＩＰ，４          ＄＄資源ソースＩＰ
・Ｆｌａｇｓ，２                  ＄＄フラグ、下記の機能参照
・，６４                          ＄＄予約
＊フラグ
Ｓｈｕｎｔｅｄ＝ｂｉｔ（Ｆｌａｇｓ，１）      ＄＄パケットはシャントされ
た
Ｓｈｕｎｔａｂｌｅ＝ｂｉｔ（Ｆｌａｇｓ，２）  ＄＄パケットはシャントされ
得る
Ｅｎｃｒｙｐｔｅｄ＝ｂｉｔ（Ｆｌａｇｓ，３）  ＄＄パケットは暗号パケット
に格納されていた
ＲｅｓｏｕｒｃｅＲｅｑ＝ｂｉｔ（Ｆｌａｇｓ，４）＄＄パケットは資源要求と
なっている
【０１１４】
この構造の各要素について以下に詳述する。
【０１１５】
ＭＰＶｅｒｓｉｏｎ：これはマスタ・プロトコルの４文字バージョン識別子である。ＭＣＭＰヘッダーの構造またはマスタ・プロトコル構造の他のいずれかの主要コンポーネントが改訂された場合、このバージョン番号は増分される。
【０１１６】
ＰｒｏｔｏＶｅｎｄｏｒ：これは、そのパケットが属するサブプロトコルのサブプロトコル指定を維持する責任を有するソフトウエア・ベンダーのイニシャルを記述する８バイト・テキスト・リテラルである。
【０１１７】
ＰｒｏｔｏＩＤ：これはＰｒｏｔｏＶｅｎｄｏｒ要素で指定されたソフトウエア・ベンダーにより割り当てられた８バイト・テキスト・リテラルである。これはそのパケットが属するサブプロトコルを識別する。ＰｒｏｔｏＶｅｎｄｏｒとＰｒｏｔｏＩＤの組合せはサブプロトコルを一意に識別する。
【０１１８】
ＰｒｏｔｏＶｅｒ：これはＰｒｏｔｏＶｅｎｄｏｒおよびＰｒｏｔｏＩＤ要素で指定されたサブプロトコルのバージョンを指定する４バイトのテキスト・ストリングである。最初の２文字はメジャー・バージョン、第２の２文字はマイナー・バージョンである。全部の文字を使用しなければならないので、メジャー・バージョンが１文字長である場合、それは１ではなく、０１のように書かなければならない。この値は小数点は含まない。例えば、バージョン２．４は、０２４０となる。
【０１１９】
パケット・タイプ識別子（ＰａｃｋｅｔＴｙｐｅ）：あるサブプロトコル内でそのパケット・タイプを一意に識別するベンダーにより割り当てられた２バイト整数。
【０１２０】
ＰａｃｋｅｔＶｅｒｓｉｏｎ：これはパケット・バージョンの４文字識別子である。パケットの構造が変更されると、このバージョン番号は増分される。これは、パケット構造が変更される必要がある場合には、ＭＣＭＰサーバーで走行するサブプロトコル・ハンドラが新旧両方のパケット構造を取り扱えるようにする。ストリングのフォーマットはＭＣＭＰヘッダーのＰｒｏｔｏＶｅｒ要素のフォーマットと同じである。
【０１２１】
シャント済フラグ（Ｓｈｕｎｔｅｄ）：そのパケットがサービス・ハンドオフの結果としてシャントされたか否かを指示するフラグ。
【０１２２】
シャント可能フラグ（Ｓｈｕｎｔａｂｌｅ）：そのパケットがシャントされ得るか否かを指示するフラグ。このフラグとシャント済フラグとは相互に排他的である。
【０１２３】
暗号化フラグ（Ｅｎｃｒｙｐｔｅｄ）：そのパケットが暗号化されていたか否かを指示するフラグ。このフラグは、パケットがＭＣＭＰサーバー到来パケット待ち行列に入れられるとクリアされる。ただし、パケットが解読システムによって入れられた場合にはその限りではなく、その場合にはフラグが設定される。
【０１２４】
資源要求フラグ（ＲｅｓｏｕｒｃｅＲｅｑ）：そのパケットが資源の要求をなすものであるか否かを指示する。
【０１２５】
資源識別子数（ＲｓｒｃＩＤｓ）：ＭＣＭＰヘッダー構造の後の資源識別子の数を指定する。
【０１２６】
資源識別子長（ＲｓｒｃＩＤＬｅｎ）：ＭＣＭＰヘッダー構造の後の全部の資源識別子の結合長を指定する。
【０１２７】
発信元ホスト・アドレス（ＯｒｉｇＩＰ，ＯｒｉｇＰｏｒｔ）：これは、その要求が発信されたホストのＩＰアドレスである。そのパケットがシャントされた場合、これは、その要求を最初に送信したホストのＩＰアドレスであり、要求を転送したサーバーのアドレスではない。
【０１２８】
資源ソースＩＰ（ＲｓｒｃＳｒｃＩＰ）：これは、資源要求フラグが真である場合、要求された資源のオリジナル・コピーが存在するホストのＩＰアドレスである。
【０１２９】
キャッシュ・コピーの日付／タイムスタンプ（ＣａｃｈｅＤａｔｅ，ＣａｃｈｅＴｉｍｅ）：これは、資源のキャッシュされたコピーの日付およびタイムスタンプであり、キャッシュされたコピーがまったく存在しない場合はゼロである。資源の日付およびタイムスタンプがこの日付およびタイムスタンプと合致した場合、資源内容は返されない。
【０１３０】
パケット・ボディのサイズ（ＰａｃｋｅｔＳｉｚｅ）：ＭＣＭＰヘッダーおよび（存在する場合に）資源識別子の後のパケット・ボディの（バイト単位での）サイズ。
【０１３１】
クライアント確認用ユーザーＩＤおよびパスワード（ＵｓｅｒＩＤ，Ｐａｓｓｗｏｒｄ）：クライアントを確認するために使用されるユーザーＩＤおよびパスワード。ユーザーのＩＤおよびパスワードの管轄者は資源ソースＩＰサーバーである。パスワード保護された資源に対する要求が２次サーバーになされた場合、その２次サーバーはパスワード確認を１次サーバー（またはソース・サーバー）に確認しなければならない。この情報はそのセッションの期間キャッシュできる。
【０１３２】
トランザクションＩＤ（ＴｒａｎｓＩＤ）：そのトランザクションを開始するホストによって割り当てられる一意のＩＤ。これは、１個以上のサービス・ハンドオフにわたりトランザクションを追跡するために使用される。暗号パケットの場合、（格納されたパケットにおいて非ゼロの値に設定できるが）これはゼロに設定されなければならない。
【０１３３】
ＭＣＭＰ資源識別子
パケットが１個以上の資源を参照している（ＲｅｓｏｕｒｃｅＲｅｑフラグが設定されている）場合、資源識別子はそのパケットが参照している単数または複数の資源を識別する。資源識別子はヌル終端テキスト・ストリングである。資源識別子の基本フォーマットは下記の通りである。
−ｔｙｐｅ：［ｌｏｃａｔｏｒ／ｓ；］ｌｅｎｇｔｈ［；ｄａｔｅ［，ｔｉｍｅ］］
ここで、
ｔｙｐｅ            資源のタイプを識別する。この引数の可能な値はサブプロ
トコル特定である。
ｌｏｃａｔｏｒ／ｓ  その資源をロケートするために使用される１個以上の値
（コンマを含む場合は二重引用符に入れられ、それらが値
内で使用される場合は二重引用符を二重にする）。
ｌｅｎｇｔｈ      （サブプロトコルに特定の単位で）読み出す資源の量。こ
れは常に資源識別子の最終項である。資源の始めから開始
するｎ単位を指定するためのフォーマット「ｎ」、ある範囲
（両端を含む）の単位を指定するためのフォーマット「ｎ
／ｎ」、開始単位および単位数を指定するためのフォーマッ
「ｎ／ｎ」、または、資源全体を指定するためのフォーマッ
ト「＊」とすることができる。
ｄａｔｅ            その資源のキャッシュ・コピーが最後に修正されたｍｍ／
ｄｄ／ｙｙｙｙフォーマットでの日付。このフィールドは
月および日については一桁および二桁の両方を受け付ける
が、年は４文字のフルストリングとして指定しなければな
らない。区切り文字としてフォワード・スラッシュを使用
しなければならない。
ｔｉｍｅ            その資源のキャッシュ・コピーが最後に修正されたｈｈ：
ｍｍ：ｓｓ２４時間フォーマットでの時刻。ｈｈは一桁ま
たは二桁の数としてよいが、ｍｍおよびｓｓは二桁数でな
ければならない（必要に応じて０を前置使用する）。
【０１３４】
資源ＩＤはオプションであるので、ＲｅｓｏｕｒｃｅＲｅｑフラグが設定されていない限り、ＭＣＭＰパケットに含める必要はない。
【０１３５】
資源ＩＤのいくつかの例は以下の通りである。
ｄａｔａ：“＼ｃａｔｈａｒｏｎ＼ｄｅｍｏｓ＼ｍｅｄｉａ．，”“ｖｉｄｅｏ．ｂｉｎ”，“ｐｌａｙ３０”；＊
ｐｒｏｈｉｂｉｔｅｄｌｉｓｔ：＊
ｄｉｒ：“＼”；＊
ｄａｔａ：“＼ｃａｔｈａｒｏｎ＼ｄｅｍｏｓ＼”，“ｍａｇ２．ｄａｔ”；０／２５６
ｄａｔａ：“＼ｔｒａｉｎｉｎｇ”，“ａｉｒ．ｂｉｎ．”，“Ｒｕｄｄｅｒ”；＊；１０／０３／１９９５，４：０３：３０
【０１３６】
ＭＣＭＰパケット・タイプ
以下のサブプロトコルは、サブプロトコル特定的ではなく、ＭＣＭＰプロトコルについて相応に定義される。
ＭＣＭＰ＿Ｅｎｒｙｐｔ＝ｈ０００２              ＄＄暗号化
ＭＣＭＰ＿Ｓｔａｔｕｓ＝ｈ０００３              ＄＄ステータス報告
ＭＣＭＰ＿ＰｅｒｆＳｔａｔＲｅｑ＝ｈ０００６    ＄＄性能統計要求
ＭＣＭＰ＿ＰｅｒｆＳｔａｔＲｅｓｐ＝ｈ０００７  ＄＄性能統計応答
ＭＣＭＰ＿ＵｓｅｒＩＲｅｑ＝ｈ０００８          ＄＄ユーザー情報要求
ＭＣＭＰ＿ＵｓｅｒＩＲｅｓｐ＝ｈ０００９        ＄＄ユーザー情報応答
ＭＣＭＰ＿ＥｃｈｏＲｅｑ＝ｈ０００ａ            ＄＄エコー要求
ＭＣＭＰ＿ＥｃｈｏＲｅｓｐ＝ｈ０００ｂ          ＄＄エコー応答
【０１３７】
これらのパケット・タイプについて以下に詳述する。
【０１３８】
暗号化（ＭＣＭＰ＿Ｅｎｒｙｐｔ）：暗号パケットは、データが暗号化されなければならない時に使用される。暗号化されるパケットはＭＣＭＰシステム暗号パケットのデータ領域に格納される。暗号パケットのＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：  ＭＣＭＰ＿Ｅｎｒｙｐｔ（ｈ０００２）
ＰａｃｋｅｔＳｉｚｅ：  暗号化形式での格納パケットのサイズ＋３２バイト
ＲｅｓｏｕｒｃｅＩＤ’ｓ：  無
Ｓｈｕｎｔａｂｌｅ：  格納パケットから継承
ＲｅｓｏｕｒｃｅＲｅｑ：  偽
【０１３９】
暗号パケットのパケット・ボディは以下の通りである。
バイト０〜３１：    暗号化ヘッダー
バイト３２〜終わり：  暗号パケット
【０１４０】
暗号パケットのヘッダーは以下の通りである。
ＰＴ＿Ｅｎｃｒｙｐｔ＿Ｈｅａｄｅｒ，３２
・ＤｅｃｒｙｐｔＬｅｓｓ，８  ＄＄解読を扱うためのコード・モジュール
・ＤｅｃｒｙｐｔＵｎｉｔ，８
・ＥｎｃｏｄｉｎｇＭｅｔｈｏｄ，２  ＄＄符号化方法
・，１４                            ＄＄予約
【０１４１】
ステータス報告（ＭＣＭＰ＿Ｓｔａｔｕｓ）：ステータス報告パケットはオペレーションのステータスを返すために使用される。使用される場合、それは必ず以前に送信された要求に対する応答である。ステータス・パケットは、エラーの英語による説明または、エラーコードを解釈できない場合にアプリケーションによって表示可能なステータス値を含め、詳細なエラー情報を含む。
【０１４２】
ステータス報告パケット・ボディは、可変長である１個以上の情報フィールドより構成される。最初の情報フィールドは必ずステータス報告ヘッダーである。各情報フィールドは、その情報フィールドの長さおよびタイプを示す８バイトのヘッダーと、後続するフィールド自体より構成される。
【０１４３】
ステータス報告パケットのＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：        ＭＣＭＰ＿Ｓｔａｔｕｓ（ｈ０００２）
ＰａｃｋｅｔＳｉｚｅ：        可変
ＲｅｓｏｕｒｃｅＩＤ’ｓ：    無
Ｓｈｕｎｔａｂｌｅ：          不可
ＲｅｓｏｕｒｃｅＲｅｑ：      無
【０１４４】
ステータス報告パケットの情報フィールド・ヘッダーは以下の通りである。
ＭＣＭＰ＿ＳｔＲｐｒｔＩＦｌｄＨｄｒ，８
・ＩｆｌｄＳｉｚｅ，２        ＄＄情報フィールドのサイズ
・ＩｆｌｄＣｌａｓｓ，１      ＄＄フィールド・クラス（１＝標準、２＝
プロトコル特定）
・ＩｆｌｄＴｙｐｅ，２        ＄＄フィールド・タイプ
・，３                        ＄＄予約
【０１４５】
標準情報フィールド・タイプは以下の通りである（ＩＦｌｄＣｌａｓｓ＝１）。
ＭＳＲ＿Ｈｅａｄｅｒ          ＝１        ＄＄ヘッダー
ＭＳＲ＿ＳｈｏｒｔＤｅｓｃ    ＝２        ＄＄短い説明
ＭＳＲ＿ＬｏｎｇＤｅｓｃ      ＝３        ＄＄長い説明
ＭＳＲ＿ＤｅｔａｉｌＤｅｓｃ  ＝４        ＄＄詳細な説明（技術的）
ＭＳＲ＿ＸＥｒｒ７０          ＝１０２    ＄＄ＬＡＳ７．０実行エラ
ー・データ
ＭＳＲ＿ＸＥｒｒ７０ｄｏ      ＝１０３    ＄＄ＬＡＳ７．０実行エラ
ー・ドゥ・スタック
【０１４６】
これらの情報フィールド・タイプについて以下に詳述する。
【０１４７】
総ステータス報告ヘッダー（ＭＳＲ＿Ｈｅａｄｅｒ）は、全部のステータス報告パケットに必ず存在し、常にパケットの最初の情報フィールドである。それは以下の構造を有する。
ＭＳＲＨｅａｄｅｒ＿Ｓｔｒｕｃ，３２
●ＰｒｏｔｏＶｅｎｄｅｒ，８  ＄＄そのエラーを報告するプロトコルのベンダ
ー
・ＰｒｏｔｏＩＤ，８          ＄＄そのエラーを報告するプロトコルのＩＤ
・ＰｒｏｔｏＶｅｒ，４        ＄＄そのエラーを報告するプロトコルのバージ
ョン
・Ｓｅｖｅｒｉｔｙ，１          ＄＄エラーの深刻さ
・＊                            −１＝成功の通知
・＊                            ０＝警告（オペレーションは何とか進行する
が、問題の可能性がある）
・＊                            １＝エラー（オペレーションは進行できない）
・＊                            ２＝不測のエラー
・ＰｒｏｔｏＳｐｅｃｉｆｉｃ，１  ＄＄プロトコル特定エラーフラグ
・ＥｒｒｏｒＴｙｐｅ，２          ＄＄サブプロトコル特定エラータイプ
・ＥｒｒｏｒＣｏｄｅ，２          ＄＄サブプロトコル特定エラーコード
・，６                            ＄＄予約
【０１４８】
ＰｒｏｔｏＳｐｅｃｉｆｉｃフラグが設定されている場合、ＥｒｒｏｒＴｙｐｅおよびＥｒｒｏｒＣｏｄｅはプロトコル特定的である。設定されていなければ、ＥｒｒｏｒＴｙｐｅは以下のいずれかとなる。
ＥＲＲＴ＿Ｚｒｅｔｕｒｎ＝１  ＄＄ゼロ復帰エラー
ＥＲＲＴ＿ＸＥｒｒ＝２        ＄＄ＴｅｎＣＯＲＥ実行エラー
ＥＲＲＴ＿ＣＥｒｒ＝３        ＄＄ＴｅｎＣＯＲＥ圧縮エラー
ＥＲＲＴ＿Ｄｏｓｄａｔａ＝４  ＄＄Ｃａｔｈａｒｏｎドスデータスタイル
エラー
【０１４９】
プロトコル特定的であるＭＣＭＰ＿Ｓｔａｔｕｓパケットにおけるいずれかについて、ステータス報告ヘッダーのうちのＰｒｏｔｏＶｅｎｄｅｒおよびＰｒｏｔｏＩＤがそのプロトコルを識別するために使用される。
【０１５０】
短い説明の情報フィールド・タイプ（ＭＳＲ＿ＳｈｏｒｔＤｅｓｃ）は、リストで使用できるかまたは、簡単な易しいエラーの説明が必要とされる場合の、４０文字長以下のエラーの短い説明である。このパケットは、４０バイト長であり、以下の構造となっている。
ＭＳＲ＿ＳｈｏｒｔＤｅｓｃ  ｓｔｒｔｌｃ，４０
・ＳｈｏｒｔＥｒｒＤｅｓｃ，４０  ＄＄エラーの短い説明
【０１５１】
長い説明の情報フィールド・タイプ（ＭＳＲ＿ＬｏｎｇＤｅｓｃ）はエラーの長い説明であり、最大２０４８文字まで長さを変えることができる。この説明は、各行を復帰文字（ｈ０ｄ）で終端させて複数の行に及ぶことができる。この説明の長さは情報フィールドの長さによって決定され、情報フィールドの内容全体は、その説明をテキストとして含む１個の長いバッファ変数である。１行の最大長はまったくなく、その説明が表示される際の任意の位置でワードラップすることができる。
【０１５２】
詳細な説明の情報フィールド・タイプ（ＭＳＲ＿ＤｅｔａｉｌＤｅｓｃ）は、全部の診断エラー情報を含むエラーの詳細な技術的説明である。例えば、それは、Ｃａｔｈａｒｏｎによってｃａｔｈａｒｏｎ．ｅｒｒログ・ファイルに書き込まれるような標準的なＴｅｎＣＯＲＥ実行エラーであるかもしれない。これは最大４０９６文字まで長さを変えられる。説明は、各行を復帰文字（ｈ０ｄ）で終端させて複数の行に及ぶことができる。行は８０文字以下でなければならない。８０文字を超える行は表示の際に切り捨てられることになる。この説明は、決してワードラップされず、必ず固定ピッチ・フォントで表示されるので、個々の行の項目を整列し、空白を用いてフォーマットすることができる（表はこの方法により作成できるであろう）。この説明の長さは情報フィールドの長さによって決定され、情報フィールドの内容全体はその説明をテキストとして含む１個の長いバッファ変数である。
【０１５３】
ＴｅｎＣＯＲＥ７．０実行エラー・データ（ＭＳＲ＿ＸＥｒｒ７０）は、ＴｅｎＣＯＲＥ実行エラーにより生成されるデータの正確なスナップショットであり、ＴｅｎＣＯＲＥにより実行エラー・メモリー・ブロックに返される。これは２５６バイト長である。この情報フィールド・タイプは通常、報告されたエラーがＴｅｎＣＯＲＥ実行エラーである場合に包含されるにすぎない。
【０１５４】
ＴｅｎＣＯＲＥ７．０実行エラー・トゥ・スタック（ＭＳＲ＿ＸＥｒｒ７０ｄｏ）は、ＴｅｎＣＯＲＥ実行エラー・ドゥ・スタックの正確なスナップショットである。データのサイズは、エラーの際のＴｅｎＣＯＲＥドゥ・スタックのサイズにもとづいて変化する。
【０１５５】
性能統計要求（ＭＣＭＰ＿ＰｅｒｆＳｔａｔＲｅｑ）：性能統計要求パケットはサーバーの現在の性能および負荷統計を要求する。
【０１５６】
性能統計要求パケットのＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：      ＭＣＭＰ＿ＰｅｒｆＳｔａｔＲｅｑ（ｈ００
０５）
ＰａｃｋｅｔＳｉｚｅ：      ０
ＲｅｓｏｕｒｃｅＩＤ’ｓ：  無
Ｓｈｕｎｔａｂｌｅ：        不可（これは、そのパケットがアドレス指定
されたサーバーに関する統計の要求である
ので、シャンティング・ミー・パケットは無
意味な結果を生じることになる）。
【０１５７】
このパケットの応答は、ＭＣＭＰ＿ＰｅｒｆＳｔａｔＲｅｓｐまたはＭＣＭＰ＿Ｓｔａｔｕｓパケットのいずれか一方となるはずである。
【０１５８】
性能統計報告（ＭＣＭＰ＿ＰｅｒｆＳｔａｔＲｅｓｐ）：このパケットは、ＭＣＭＰ＿ＰｅｒｆＳｔａｔＲｅｑパケットの応答であり、それがアドレス指定されたサーバーに関する性能統計報告を含む。
【０１５９】
性能統計報告パケットのＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：  ＭＣＭＰ＿ＰｅｒｆＳｔａｔＲｅｓｐ（ｈ０００６）
ＰａｃｋｅｔＳｉｚｅ：      ３２
ＲｅｓｏｕｒｃｅＩＤ’ｓ：  無
Ｓｈｕｎｔａｂｌｅ：        不可
ＲｅｓｏｕｒｃｅＲｅｑ：    無
【０１６０】
性能統計報告パケットのパケット・ボディは以下の通りである。
ＰｅｒｆＳｔａｔｓ，３２
・Ｐｕｓａｇｅ，１            ＄＄プロセッサー使用率（％）
・ＣｕｒＲｅｑｓ，２          ＄＄処理中の要求の現在数
・ＴｏｔａｌＲｅｇｓ，２      ＄＄処理できる要求の総数
・ＳｈｕｎｔＲｅｇｓ，２      ＄＄シャントが開始される要求単位での
スレッショルド
・ＰｍｅｍＴｏｔａｌ，４      ＄＄システムの全物理メモリー
・ＰｍｅｍＵｓｅｄ，４        ＄＄システムの使用メモリー
・ＶｍｅｍＴｏｔａｌ，４      ＄＄システムの全仮想メモリー
・ＶｍｅｍＵｓｅｄ，４        ＄＄システムの使用仮想メモリー
・ＡｒｅｑＰＭｅｔｈｏｄ，１  ＄＄追加要求を処理する現在の方法
・，８                        ＄＄予約
【０１６１】
パケット・ボディ構造の要素の詳細は以下の通りである。
Ｐｕｓａｇｅ：現在のプロセッサー使用度の百分率（０％〜１００％）。プ
ロセッサー使用率が入手できない場合は−１に設定される。
ＣｕｒＲｅｑｓ：  現在処理中である要求の概数。
ＴｏｔａｌＲｅｑｓ：一度に処理され得る要求の総数。
ＳｈｕｎｔＲｅｑｓ：シャントが生起するまでの要求の最大数。これは通常、
要求をシャントするためにある程度余分なシステム資
源を見込むためにＴｏｔａｌＲｅｑｓ未満である。
ＰｍｅｍＴｏｔａｌ：サーバーの物理メモリーのバイト数または、量が不明
の場合は−１となる。
ＰｍｅｍＵｓｅｄ：使用されている物理メモリーのバイト数または、量が不明の
場合は−１となる。
ＶｍｅｍＴｏｔａｌ：  サーバーで使用可能な仮想メモリーのバイト数、不明の場
合は−１となる。
ＶｍｅｍＵｓｅｄ：使用中の仮想メモリーのバイト数または、不明の場合は−１
となる。
ＡｒｅｑＰＭｅｔｈｏｄ：そのパケットの他の統計にもとづく、新しい到来要求
を扱うためにサーバーによって使用される方法。これ
は、数値１、２または３をとり得る。１は新しい要求
が通常通りに処理されることを示し、２は新しい要求
がシャントされることを示し、３は新しい要求が拒絶
されることを示す。
【０１６２】
ユーザー確認情報要求（ＭＣＭＰ＿ＵｓｅｒＩＲｅｑ）：このパケットは特定のユーザーに関するユーザー確認情報を要求する。このパケットは暗号化されなければならず、２次サーバーから１次サーバーへのみ送られる。受信側サーバーは、この要求に応答する前に、送信側が２次サーバーとしてリストに載っていることを確認しなければならない。
【０１６３】
期待される応答は、ＭＣＭＰ＿ＳｔａｔｕｓまたはＭＣＭＰ＿ＵｓｅｒＩＲｅｓｐパケットである。
【０１６４】
このパケットは、特殊なタイプの資源識別子を使用し、それは以下のように定義される。
ｔｙｐｅ：ｕｓｅｒ［，ｕａｄｂｉｔｅｍ］；ｌｅｎｇｔｈ［；ｄａｔｅ，ｔｉｍｅ］
ここで、
ｔｙｐｅ  資源タイプを識別し、必ず「ｕｓｅｒａｄｂ」である。
ｕｓｅｒ  当該ユーザーの名前。
ｕａｄｂｉｔｅｍ  検索するユーザー確認データベース項目のパス。省略され
た場合、指定されたユーザーのユーザー確認データツリー
全体を含むツリー・ファイルがレジュームされる。レジュ
ームされたツリー・ファイルのルートは、ユーザー・デー
タベース・ファイルの＼ＬｏｃａｌＵｓｅｒｓ＼ｕｓｅｒ
ｎａｍｅに相当する。
ｌｅｎｇｔｈ  レジュームされる項目の部分。
【０１６５】
実例は以下の通りである。
ｕｓｅｒａｄｂ：ＪｏｈｎＳ．＼Ｃａｔｈａｒｏｎ＼ＲＡｄｍｉｎ＼Ｒｉｇｈｔｓ；；＊；０３／１３／１９５５；１２：２０：４８
ｕｓｅｒａｄｂ：ＨｕｇｏＣ；＊
ｕｓｅｒａｄｂ：ＪＤｏｕｇｌａｓ，＼ＸＹＺＷｉｄＳｔ＼ＷＤＢＰ＼ＧｒｏｕｐＭｅｍｂｅｒｓｈｉｐ；２５６；Ｓ／１２／１９９６，０１：００：３０
【０１６６】
ユーザー確認データベース（ＵＡＤＢ）はツリー・ファイルに記憶されている。ユーザー情報は＼ＬｏｃａｌＵｓｅｒｓに記憶される。そのユーザーのＩＤにもとづいて命名される各ユーザーのフォルダは、＼ＬｏｃａｌＵｓｅｒｓフォルダの中にある。各ユーザーのフォルダには、各ベンダーのフォルダ（すなわち、「Ｃａｔｈａｒｏｎ」、「ＣＴＣ」など）があり、それらのベンダー・フォルダの中にはそのベンダーによって定義された各プロトコルのフォルダがある。プロトコル・フォルダーの内容は、プロトコル特定である。資源ＩＤで指定されたパスは＼ＬｏｃａｌＵｓｅｒｓ＼ｕｓｅｒｎａｍｅでルートとなる。
【０１６７】
基本ユーザー確認情報は＼Ｃａｔｈａｒｏｎ＼ＭＣＭＰ＼ＢａｓｅＡｕｔｈＤａｔａに記憶されている。この構造は以下の通りである。
ＵｓｅｒＡｕｔｈＤａｔａ，３２
・ＵｓｅｒＩＤ，１０        ＄＄ユーザー名／ＩＤ
・ＵｓｅｒＰａｓｓ，１０    ＄＄ユーザーのパスワード
・ＥｘｐＴｉｍｅ，３        ＄＄データの有効期限が切れるまでの秒単
位での時間（１０〜８６４０００）
・ＢｉｎＵＩＤ，４          ＄＄バイナリのユーザーＩＤ
・，５                      ＄＄予約
【０１６８】
２次サーバーが下記の形式の要求を送った場合、
ｕｓｅｒａｄｂ：ｕｓｅｚ，２ａｍｅ；＊［；ｄａｔｅ，ｔｉｍｅ］
その指定されたユーザーについてユーザー確認ツリー全体が検索される。ユーザー確認ツリーから特定の項目を読み出す能力は、今後の用途および拡張可能性に備えている。
【０１６９】
ユーザー確認データを検索した後、そのデータは、ＵｓｅｒＡｕｔｈＤａｔａ構造のＥｘｐＴｉｍｅ要素で指定された期間、キャッシュされ得る。ユーザー確認データは指定された時間より長くキャッシュされることはできない。
【０１７０】
ユーザー確認情報要求のＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：    ＭＣＭＰ＿ＵｓｅｒＩＲｅｑ（ｈ０００８）
ＰａｃｋｅｔＳｉｚｅ：    ０
ＲｅｓｏｕｒｃｅＩＤ’ｓ：１。検索すべきユーザーおよびどのような情報
を検索するかを指定する。
Ｓｈｕｎｔａｂｌｅ：不可（１次サーバーがユーザーに関する情報の唯一の
権限ソースであるので、１次サーバーによって処理さ
れなければならない）。
ＲｅｓｏｕｒｃｅＲｅｑ：  有
【０１７１】
ユーザー確認情報応答（ＭＣＭＰ＿ＵｓｅｒＩＲｅｓｐ）：ＭＣＭＰ＿ＵｓｅｒＩＲｅｑパケットに対する応答であり、このパケットはそのデータ領域に要求された情報を含む。このデータは、ユーザー・データベースの要求されたデータ・ブロックから読み出された生データであるか、または、（ｕｓｅｒａｄｂが省略された場合）指定されたユーザーのユーザー情報ツリー全体を含むツリー・ファイルであり、そのファイルのルートはＵＡＤＢの＼ＬｏｃａｌＵｓｅｒｓ＼ｕｓｅｒｎａｍｅに相当する。
【０１７２】
ユーザー確認情報応答のＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：  ＭＣＭＰ＿ＵｓｅｒＩＲｅｓｐ（ｈ０００９）
ＰａｃｋｅｔＳｉｚｅ：      可変
ＲｅｓｏｕｒｃｅＩＤ’ｓ：  無
Ｓｈｕｎｔａｂｌｅ：        不可
ＲｅｓｏｕｒｃｅＲｅｑ：    無
【０１７３】
エコー要求（ＭＣＭＰ＿ＥｃｈｏＲｅｑ）：このパケットは特定のＭＣＭＰホストとの接続を計時するために使用される。このパケットがＭＣＭＰホストにより受信されると、ＭＣＭＰ＿ＥｃｈｏＲｅｓｐパケットがただちに送り返される。データ領域は、最大２０４８バイトのサイズまでの何らかのデータを含むことができる。返信パケットのデータ領域は同一データを含むことになる。
【０１７４】
エコー要求のＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：  ＭＣＭＰ＿ＥｃｈｏＲｅｑ（ｈ０００ａ）
ＰａｃｋｅｔＳｉｚｅ：      任意
ＲｅｓｏｕｒｃｅＩＤ’ｓ：  無
Ｓｈｕｎｔａｂｌｅ：        不可
ＲｅｓｏｕｒｃｅＲｅｑ：    無
【０１７５】
エコー応答（ＭＣＭＰ＿ＥｃｈｏＲｅｓｐ）：このパケットはＭＣＭＰ＿ＥｃｈｏＲｅｑパケットに応答して送られる。
【０１７６】
エコー応答のＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：  ＭＣＭＰ＿ＥｃｈｏＲｅｓｐ（ｈ０００ｂ）
ＰａｃｋｅｔＳｉｚｅ：  元のＭＣＭＰ＿ＥｃｈｏＲｅｑパケットと同一
ＲｅｓｏｕｒｃｅＩＤ’ｓ：  無
Ｓｈｕｎｔａｂｌｅ：        不可
ＲｅｓｏｕｒｃｅＲｅｑ：    無
【０１７７】
ディレクトリの一部のファイルは付加的なアクセス許可情報をサポートできる。例えば、ツリー・ファイルは、ツリー・ファイル内の個々の単位のアクセス許可の情報を含むことができる。
【０１７８】
ＣＭＸＰ資源識別子
ＣＭＸＰパケットの資源識別子は以下のように定義される。
ｔｙｐｅ：ｐａｔｈ，ｆｉｌｅ［,ｕｎｉｔ］］；ｌｅｎｇｔｈ［；ｄａｔｅ，ｔｉｍｅ］
ここで、
ｔｙｐｅ−−資源タイプを識別する。これは、指定された資源からデータを読み出すための「Ｄａｔａ」または、含まれる資源のディレクトリを読み出すための「Ｄｉｒ」のいずれか一方とすることができる。
ｐａｔｈ  ディレクトリへのパスであり、少なくともバックスラッシュ「＼」
がなければならない。ファイルおよびユニットが指定されていない
場合、ディレクトリは読み出される資源とみなされる。指定されて
いれば、参照されたファイルまたはユニットは指定ディレクトリに
位置するものと仮定される。ファイルおよびユニットが指定されて
いない場合、タイプは「Ｄｉｒ」でなければならない。
ｆｉｌｅ  ファイル名。ユニットが指定されていない場合、ファイルは資源と
見なされる。指定されていれば、ユニットは指定ディレクトリに位
置するものと仮定される。ファイル資源は「Ｄｉｒ」および「Ｄａ
ｔａ」の両資源タイプによりアクセスできる。「Ｄｉｒ」は含まれた
ユニットのリストを参照し、「Ｄａｔａ」はファイルに含まれた実際
のデータを参照する。
ｕｎｉｔ  ユニット名。指定された場合、そのユニットが資源とみなされる。
これは「Ｄｉｒ」および「Ｄａｔａ」の両資源タイプによりアクセ
スできる。「Ｄｉｒ」は下位ユニットのリストを参照し、「Ｄａｔａ」
はリストに含まれたデータにアクセスする。
ｌｅｎｇｔｈ  読み出す資源の部分。タイプが「Ｄａｔａ」の場合、この値は
バイト単位である。タイプが「Ｄｉｒ」の場合、この値はディ
レクトリエントリ単位である。
ｄａｔｅ／ｔｉｍｅ  要求パケットにおいて指定できるにすぎない。指定され
た日付／時刻から資源が修正されていない限り、受信側
プロセスにその要求を無視させる。これは、クライアン
ト側でキャッシュされてから変更があった場合にのみ資
源を送信するように要求するためにＣＭＸＰ＿Ｒｅａｄ
Ｒｅｑパケットと連係して使用できる。
【０１７９】
ＣＭＸＰパケット・タイプ
以下は、現在ＣＭＸＰプロトコルによって使用されるパケット・タイプのリストである。ＣＭＸＰプロトコルの機能性は、このパケット・タイプのリストに追加することによって将来拡張できる。
ＣＭＸＰ＿ＲｅａｄＲｓｒｃＲｅｑ＝ｈ０００２
ＣＭＸＰ＿ＲｅａｄＲｓｒｃＲｅｓｐ＝ｈ０００３
ＣＭＸＰ＿ＷｒｉｔｅＲｓｒｃ＝ｈ０００４
ＣＭＸＰ＿ＣｒｅａｔｅＲｓｒｃ＝ｈ０００５
ＣＭＸＰ＿ＤｅｓｔｒｏｙＲｓｒｃ＝ｈ０００６
ＣＭＸＰ＿ＲｅｎａｍｅＲｓｒｃ＝ｈ０００７
ＣＭＸＰ＿ＣｏｐｙＲｓｒｃ＝ｈ０００８
ＣＭＸＰ＿ＭｏｖｅＲｓｒｃ＝ｈ０００９
ＣＭＸＰ＿ＡｌｔＳＬｉｓｔＲｅｑ＝ｈ０００ａ
ＣＭＸＰ＿ＡｌｔＳＬｉｓｔＲｅｓｐ＝ｈ０００ｂ
【０１８０】
これらのパケット・タイプについて以下に詳述する。
【０１８１】
資源読み出し要求（ＣＭＸＰ＿ＲｅａｄＲｓｒｃＲｅｑ）：このパケットは１個以上の資源を読み出すための要求である。これは、資源をダウンロードするためにクライアントからサーバーへ、プラグイン・モジュールのコード・モジュール転送を要求するためにクライアントからクライアントへ、または、クライアント要求にサービスするための適切な資源の転送を要求するためにサーバーからサーバーへ送られる。ＣＭＸＰ＿ＲｅａｄＲｓｒｃＲｅｑパケットは、資源内容または資源情報のいずれか一方、またはその両方を要求することができる。資源の定義はファイル・ディレクトリおよびコード・モジュール・ディレクトリを含むので、このパケットは、ディレクトリ内のファイルまたはファイル内のコード・モジュールのリストを要求するために使用することもできる。
【０１８２】
このパケットは、（各要求資源について１個ずつ）一連のパケットにより応答される。それらのパケットは、ＣＭＸＰ＿ＲｅａｄＲｓｒｃＲｅｓｐ（資源がうまく読み出された場合）またはＭＣＭＰ＿Ｓｔａｔｕｓ（資源の読み出しにエラーがあった場合）のいずれか一方である。
【０１８３】
資源読み出し要求パケットのＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：  ＣＭＸＰ＿ＲｅａｄＲｓｒｃＲｅｑ（ｈｏｎｅｙ）
ＰａｃｋｅｔＳｉｚｅ：    ３２
ＲｅｓｏｕｒｃｅＩＤ’ｓ：１個以上。読み出す資源を識別する。
Ｓｈｕｎｔａｂｌｅ：      可
ＲｅｓｏｕｒｃｅＲｅｑ：  有
【０１８４】
資源読み出し要求パケットのパケット・ボディは以下の通りである。
ＲｅａｄＲｓｒｃＲｅｑＨｅａｄｅｒ，３２
・ＲＨＦｌａｇｓ，２  ＄＄フラグ
・，３０              ＄＄予約
＊フラグ：
ＩｎｃｌｕｄｅＩｎｆｏ＝ｂｉｔ（ＲＨＦｌａｇｓ，１）  ＄＄資源情報を含む
ＩｎｃｌｕｄｅＤａｔａ＝ｂｉｔ（ＲＨＦｌａｇｓ，２）  ＄＄資源内容を含む
ＩｄｌｅＰｒｅＣａｃｈｅ＝ｂｉｔ（ＲＨＦｌａｇｓ，３）＄＄要求はアイドル
時間プレキャッシング・オペレーションの結果である。
【０１８５】
パケット・ボディの各要素の詳細は以下の通りである。
ＩｎｃｌｕｄｅＩｎｆｏ：設定された場合、このフラグはその資源に関する情報
を返信させる。
ＩｎｃｌｕｄｅＤａｔａ：設定された場合、このフラグは資源内容を返信させる。
ＩｄｌｅＰｒｅＣａｃｈｅ：設定された場合、その要求がユーザーの関与を伴わずクライアントにより開始されたアイドル時間プレキャッシング・オペレーションの結果であることを示す。ＣＭＸＰサーバーは、このフラグが設定されているパケットを処理する前に、このフラグをクリアしてパケットを処理する。ＣＭＸＰサーバーへの負荷が大きくなりすぎて全部の要求を扱えなくなり、しかも要求をシャントできない場合、このフラグが設定された要求は、このフラグを有する要求がクリアされる前に脱落されるはずである。
【０１８６】
ＩｎｃｌｕｄｅＩｎｆｏおよびＩｎｃｌｕｄｅＤａｔａは両方とも同一の要求において設定することができる。その場合、応答は、資源情報の後に資源内容が続く。これは最も一般的な要求タイプである。上記のフラグの少なくとも１個が各要求パケットにおいて設定されなければならない。
【０１８７】
資源読み出し応答（ＣＭＸＰ＿ＲｅａｄＲｓｒｃＲｅｓｐ）：ＣＭＸＰ＿ＲｅａｄＲｓｒｃＲｅｑパケットに応答して送信されるこのパケットは、要求された情報を含む。このパケットは、エラー状態が存在する場合にはＣＭＸＰ＿ＲｅａｄＲｓｒｃＲｅｑに応答して送信されることは決してない点に留意されたい。代わって、ＭＣＭＰ＿Ｓｔａｔｕｓパケットが送信される。
【０１８８】
ＣＭＸＰ＿ＲｅａｄＲｓｒｃＲｅｑパケットのＩｎｃｌｕｄｅＩｎｆｏおよびＩｎｃｌｕｄｅＤａｔａフラグの状態に応じて、パケット・ボディは資源情報および／または資源内容を含むことができる。存在する場合には資源情報が必ずパケット・ボディ内で前に来て、その後に資源内容が続く（存在する場合）。資源情報のサイズは、プログラムの古いバージョンからのコード・モジュールと、うまくマージできるプログラムのバージョンのＲｅｓｏｕｒｃｅＩｎｆｏＳｉｚｅを読み出すことによって決定できる。
【０１８９】
ＲｓＭａｘＳｕｂｓ：その資源が含むことができる従属物の最大数。
ＲａＳｉｚｅＡＩｎｆｏ：その資源の関係する情報（ＲｓＡＩｎｆｏ）のバイト単位でのサイズ（１〜８）。
ＲｓＳｉｚｅＳｕｂＮａｍｅ：その資源の従属物の名前の文字単位での最大長。
ＲｓＨｅｉｇｈｔ，ＲｓＷｉｄｔｈ：そのデフォールト・スケーリングでの資源の境界矩形の高さおよび幅（適用可能な場合）。これは、オブジェクト・ベースの描画、画像などに使用される。
ＲｓＰＴｉｍｅ：資源のデフォールトのプレーイング速度での秒単位でのプレーイング時間（適用可能な場合）。ビデオクリップ、ｗａｖファイル、ＭＩＤＩファイル、動画などに使用される。
【０１９０】
資源書き込み（ＣＭＸＰ＿ＷｒｉｔｅＲｓｒｃ）：このパケットは指定された資源にデータを書き込む。これは、シャントされ得ない１次サーバーへの送信を要するので、サーバーの負荷を増大させ得る。フォーム提示および他の一方向提示の場合、ＣＭＸＰプロトコルの書き込み機能よりもＵＤＳＣＰプロトコルが勧奨される。
【０１９１】
ＣＭＸＰ＿ＷｒｉｔｅＲｓｒｃ要求は、特に、ユーザーが指定された資源への書き込みを許可されていないということにより、失敗することがある。こうした状況は、ユーザーＩＤおよびパスワードが指定された要求を繰り返す（この場合、要求はＭＣＭＰ＿Ｅｎｃｒｙｐｔパケットに格納される）ことによって救済されるであろう。
【０１９２】
ユーザー確認の失敗のためにアクセスが拒否された場合に返されるステータス・コードは２種類ある。一方の種類は、クライアントがユーザー名およびパスワードを入力しなければならないことを指示する。これは、その資源がユーザー名およびパスワードによってアクセス可能であるという、クライアントへの「ヒント」である。これは決定的なものではない。すなわち、「アクセス拒否」コードでのほうは、アクセスが実際に誰にでも使用可能であるかどうかを指示するものではなく、クライアントが問合わせなければならないか否かを指示するにすぎない。例えば、ユーザー制御のもとでなく、プログラム制御のもとでアクセスされるように設計された資源が存在することがあり、それは、「自動化ユーザー」のユーザー確認を必要とし、ユーザーＩＤ／パスワードの入力指示さえ伴わず残り時間でアクセスを拒否する。
【０１９３】
パケット・ボディは資源に書き込まれるデータを含む。
【０１９４】
資源書き込みパケットのＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：  ＣＭＸＰ＿ＷｒｉｔｅＲｓｒｃ（ｈ０００４）
ＰａｃｋｅｔＳｉｚｅ：    可変
ＲｅｓｏｕｒｃｅＩＤ’ｓ：１個。書き込む資源のＩＤ。
Ｓｈｕｎｔａｂｌｅ：      不可
ＲｅｓｏｕｒｃｅＲｅｑ：  有
【０１９５】
資源作成（ＣＭＸＰ＿ＣｒｅａｔｅＲｓｒｃ）：このパケットは指定された資源において従属物を作成する。それは、ファイル、ディレクトリおよびユニットを含む。ＣＭＸＰ＿ＷｒｉｔｅＲｓｒｃパケットに適用されるものと同じユーザー確認に関する規則がこのパケットに適用される。
【０１９６】
資源作成パケットのＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：  ＣＭＸＰ＿ＣｒｅａｔｅＲｓｒｃ（ｈ０００５）
ＰａｃｋｅｔＳｉｚｅ：      可変
ＲｅｓｏｕｒｃｅＩＤ’ｓ：  １個。新しい従属物を作成する資源のＩＤ。
Ｓｈｕｎｔａｂｌｅ：        不可
ＲｅｓｏｕｒｃｅＲｅｑ：    有
【０１９７】
資源作成パケットのパケット・ボディは以下の通りである。
ＮｅｗＲｓｒｃ，３００
・ＲｓＳｉｚｅ，４                ＄＄資源のバイト単位でのサイズ
・ＲｓＡＩｎｆｏ，８            ＄＄関係する情報（適用可能な場合）
・ＲｓＭａｘＳｕｂｓ，２        ＄＄従属物の最大数
・ＲｓＳｉｚｅＡＩｎｆｏ，１    ＄＄関係する情報のバイト単位でのサイズ
・ＲｓＳｉｚｅＳｕｂＮａｍｅ，２＄＄従属物の名前の最大長
・ＲｓＮａｍｅ，２５６          ＄＄資源名
・ＲｓＮａｍｅ２，８            ＄＄２次資源名
・ＲｓＴｙｐｅ，８              ＄＄資源タイプ
・，１１                        ＄＄予約
【０１９８】
パケット・ボディの各要素の詳細は以下の通りである。
ＲｅＳｉｚｅ：新しい資源のバイト単位でのサイズ。ＴｅｎＣＯＲＥネームセットまたはデータセットを作成する場合、それは、２５６バイトの倍数でなければならず、（レコードからバイトに変換するために）−ｃｒｅａｔｅｎ−コマンドのｒｅｃｏｒｄｓ引数に２５６を掛けたものに相当する。新しいディレクトリを作成する場合はこれは無視される。
Ｒ−ＡＩｎｆｏ：適用可能な場合、資源の関係する情報（上記のＣＭＸＰ＿ＣｒｅａｔｅＲｓｒｃ参照）。
ＲｓＭａｘＳｕｂｓ：適用可能な場合、資源において許容される従属物の数。これは、ＴｅｎＣＯＲＥネームセットに必要とされ、−ｃｒｅａｔｅｎ−コマンドのｎａｍｅ引数に相当する。ほとんど、ＴｅｎＣＯＲＥネームセットを扱わない場合は無視される。
Ｒ−ＳｉｚｅＡＩｎｆｏ：資源の関係する情報のサイズ。ネームセットの場合、これは−ｃｒｅａｔｅｎ−コマンドのｉｎｆｏｌｅｎｇｔｈ引数に相当する。
ＲｓＳｉｚｅＳｕｂＮａｍｅ：従属物の名前の最大長。ＴｅｎＣＯＲＥネームセットの場合、これは−ｃｒｅａｔｅｎ−コマンドのｎａｍｅｌｅｎｇｔｈ引数に相当する。ほとんど、ＴｅｎＣＯＲＥネームセットを扱わない場合は無視される。
ＲｅＮａｍｅ：作成する資源の名前。この名前の長さおよび許容される文字の規則は作成される資源のタイプによって異なる。
ＲａＮａｍｅ２：これは資源の２次的名前である。現在は使用されていないが、将来の使用に備えている。これは、例えば、Ｗｉｎｄｏｗｓ９５／ＮＴでのロング・ファイルネームに対応するショート・ファイルネーム・エイリアスを指定するために使用することができる。
ＲａＴｙｐｅ：これは作成される資源のタイプを指定する。それらが作成され得る全部の可能な資源について、必ずしも全部の資源タイプが有効であるとは限らない（すなわち、ユニットの内部にファイルを作成することはできない）点に留意されたい。ある内容の資源についてただ１個の資源タイプが可能である場合には、値「ｄｅｆａｕｌｔ」が使用される（例えば、ＴｅｎＣＯＲＥネームセット内部で作成できる資源の唯一のタイプはブロックである）。この値は８バイトのテキスト・リテラルである。
【０１９９】
以下の資源タイプが現在ＣＭＸＰプログラムについて定義されている。
ｃｏｕｒｓｅ    コース・ファイル（．ＣＲＳ拡張子を有するＴｅｎＣＯＲＥネ
ームセット）
ｇｒｏｕｐ      グループ・ファイル（．ＧＲＰ拡張子を有するＴｅｎＣＯＲＥ
ネームセット）
ｎａｍｅｓｅｔ  汎用ネームセット・ファイル（．ＮＡＭ拡張子を有するＴｅｎ
ＣＯＲＥネームセット）
ｒｏｓｔｅｒ    ロースター・ファイル（．ＲＴＲ拡張子を有するＴｅｎＣＯＲ
Ｅネームセット）
ｓｏｕｒｓｅ    ソース・ファイル（．ＳＲＳ拡張子を有するＴｅｎＣＯＲＥネ
ームセット）
ｓｔｕｄａｔａ  スチューデント・データ・ファイル（．ＳＤＦ拡張子を有する
ＴｅｎＣＯＲＥネームセット）
ｔｐｒ          プロデューサー・ファイル（．ＴＰＲ拡張子を有するＴｅｎＣ
ＯＲＥネームセット）
ｂｉｎａｒｙ    バイナリ・ファイル（．ＢＩＮ拡張子を有するＴｅｎＣＯＲＥ
ネームセット）
ｆｉｌｅ        オペレーティングシステム・ファイル
ｄｉｒ          オペレーティングシステム・フォルダまたはディレクトリ
ｄａｔａｓｅｔ  ＴｅｎＣＯＲＥデータセット
ｔｒｅｅ        Ｃａｔｈａｒｏｎツリー・ファイル
ｄｅｆａｕｌｔ  コンテナのデフォールト・タイプ
ｂｌｏｃｋ      データ・ブロック（ネームセットまたはツリー・ファイルにお
いて）
ｆｏｌｄｅｒ    フォルダ（タイム・ファイルにおいて）
【０２００】
資源破壊（ＣＭＸＰ＿ＤｅｓｔｒｏｙＲｓｒｃ）：このパケットは指定された資源を破壊する。ＣＭＸＰ＿ＷｒｉｔｅＲｓｒｃパケットに適用されたものと同じユーザー確認に関する規則がこのパケットに適用される。このパケットのＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：  ＣＭＸＰ＿ＤｅｓｔｒｏｙＲｓｒｃ（ｈ０００６）
ＰａｃｋｅｔＳｉｚｅ：      ０
ＲｅｓｏｕｒｃｅＩＤ’ｓ：  １個。破壊する資源のＩＤ。
Ｓｈｕｎｔａｂｌｅ：        不可
ＲｅｓｏｕｒｃｅＲｅｑ：    有
【０２０１】
資源リネーム（ＣＭＸＰ＿ＲｅｎａｍｅＲｓｒｃ）：このパケットは指定された資源をリネームする。ＣＭＸＰ＿ＷｒｉｔｅＲｓｒｃパケットに適用されたものと同じユーザー確認に関する規則がこのパケットに適用される。パケット・ボディはその資源の新しい名前を含んでいる。このパケットのＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：  ＣＭＸＰ＿ＲｅｎａｍｅＲｓｒｃ（ｈ０００７）
ＰａｃｋｅｔＳｉｚｅ：      ２７２
ＲｅｓｏｕｒｃｅＩＤ’ｓ：  １個。リネームする資源のＩＤ。
Ｓｈｕｎｔａｂｌｅ：        不可
ＲｅｓｏｕｒｃｅＲｅｑ：    有
【０２０２】
資源リネーム・パケットのパケット・ボディは以下の通りである。
ＲｅｎａｍｅＲｓｒｃ，２７２
・ＲｅｓｏｕｒｃｅＮａｍｅ，２５６  ＄＄資源の新しい名前
・ＲｅｓｏｕｒｃｅＳｅｃｏｎｄａｒｙＮａｍｅ，８  ＄＄資源の２次的名前（適用可能な場合）
・，９          ＄＄予約
【０２０３】
資源コピー（ＣＭＸＰ＿ＣｏｐｙＲｓｒｃ）：このパケットは指定された資源をコピーする。ＣＭＸＰ＿ＷｒｉｔｅＲｓｒｃパケットに適用されたものと同じユーザー確認に関する規則がこのパケットに適用される。資源コピーパケットのＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：  ＣＭＸＰ＿ＣｏｐｙＲｓｒｃ（ｈ０００８）
ＰａｃｋｅｔＳｉｚｅ：    ０
ＲｅｓｏｕｒｃｅＩＤ’ｓ：２個。第１はコピーする資源のロケーション
であり、第２はその資源の新しいコピーを作成
するロケーションである。
Ｓｈｕｎｔａｂｌｅ：      不可
ＲｅｓｏｕｒｃｅＲｅｑ：  有
【０２０４】
資源移動（ＣＭＸＰ＿ＭｏｖｅＲｓｒｃ）：このパケットは指定された資源を移動する。ＣＭＸＰ＿ＷｒｉｔｅＲｓｒｃパケットに適用されたものと同じユーザー確認に関する規則がこのパケットに適用される。資源移動パケットのＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：  ＣＭＸＰ＿ＭｏｖｅＲｓｒｃ（ｈ０００９）
ＰａｃｋｅｔＳｉｚｅ：    ０
ＲｅｓｏｕｒｃｅＩＤ’ｓ：２個。第１は資源の古いロケーションであり、
第２は資源の新しいロケーションである。
Ｓｈｕｎｔａｂｌｅ：      不可
ＲｅｓｏｕｒｃｅＲｅｑ：  有
【０２０５】
代替サーバー・リスト要求（ＣＭＸＰ＿ＡｌｔＳＬｉｓｔＲｅｑ）：このパケットは、指定された資源に使用可能な２次サーバーのリストを要求する。サーバーは、エラーの場合を除き、ＣＭＸＰ＿ＡｌｔＳＬｉｓｔＲｅｓｐにより応答しなければならない。エラーの場合にはＭＣＭＰ＿Ｓｔａｔｕｓパケットが返されるはずである。このパケットのＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：  ＣＭＸＰ＿ＡｌｔＳＬｉｓｔＲｅｑ（ｈ０００ａ）
ＰａｃｋｅｔＳｉｚｅ：    ０
ＲｅｓｏｕｒｃｅＩＤ’ｓ：１個。２次サーバーをリストするものの資源。
Ｓｈｕｎｔａｂｌｅ：      可
ＲｅｓｏｕｒｃｅＲｅｑ：  有
【０２０６】
代替サーバーリスト応答（ＣＭＸＰ＿ＡｌｔＳＬｉｓｔＲｅｓｐ）：このパケットは、ＣＭＸＰ＿ＡｌｔＳＬｉｓｔＲｅｑパケットに応答して送信され、代替サーバーのリストを含んでいる。ＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：ＣＭＸＰ＿ＡｌｔＳＬｉｓｔＲｅｓｐ（ｈ０００ｂ）
ＰａｃｋｅｔＳｉｚｅ：    可変
ＲｅｓｏｕｒｃｅＩＤ’ｓ：無。
Ｓｈｕｎｔａｂｌｅ：      不可
ＲｅｓｏｕｒｃｅＲｅｑ：  無
【０２０７】
ＣＭＸＰ＿ＡｌｔＳＬｉｓｔＲｅｓｐパケットのパケット・ボディは以下の通りである。
ＡｌｔＳＬｉｓｔ（ｎｎ），１６
・ＩＰ，４      ＄＄サーバーのＩＰアドレス
・Ｐｏｒｔ，２    ＄＄アクセスするサーバーのポート
・Ｌｏａｄ，１    ＄＄サーバーへの最後の既知のロード
・Ｐｉｎｇ，４    ＄＄サーバーに対する最後の既知のｐｉｎｇ
・，４          ＄＄予約
【０２０８】
ＵＤＳＣＰパケット・タイプ
以下は、現在ＵＤＳＣＰプロトコルによって使用されるパケット・タイプのリストである。ＵＤＳＣＰプロトコルの機能性は、このパケット・タイプのリストに追加することによって将来拡張できる。
ＵＤＳＣＰ＿Ｓｕｂｍｉｓｓｉｏｎ＝ｈ０００２
ＵＤＳＣＰ＿ＱｕｅｕｅＳｔａｔｕｓＲｅｑ＝ｈ０００３
ＵＤＳＣＰ＿ＱｕｅｕｅＳｔａｔｕｓＲｅｓｐ＝ｈ０００４
【０２０９】
これらのパケット・タイプについて以下に詳述する。
【０２１０】
データ提示（ＵＤＳＣＰ＿Ｓｕｂｍｉｓｓｉｏｎ）：これはＵＤＳＣＰプロトコルの基本プロトコル・タイプである。これはクライアントによって生成され、収集点に到達するまでサーバーからサーバーへ転送される。パケット・ボディは、ＵＤＳＣＰヘッダーに続き、提示の内容により構成される。
【０２１１】
データ提示パケットのＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：  ＵＤＳＣＰ＿Ｓｕｂｍｉｓｓｉｏｎ（ｈ０００２）
ＰａｃｋｅｔＳｉｚｅ：      ３２＋提示されるデータのサイズ
ＲｅｓｏｕｒｃｅＩＤ’ｓ：  無。
Ｓｈｕｎｔａｂｌｅ：        可
ＲｅｓｏｕｒｃｅＲｅｑ：    無
【０２１２】
ＵＤＳＣＰヘッダーは以下の通りである。
ＵＤＳＣＰＳｕｂｍｉｔＨｅａｄｅｒ，３２
・ＨｅａｄｅｒＳｉｚｅ，２  ＄＄ＵＤＳＣＰＳｕｂｍｉｔＨｅａｄｅｒの
サイズ
・ＤａｔａＳｉｚｅ，４      ＄＄提示されるデータのサイズ
・Ｃｍｅｔｈｏｄ，１        ＄＄収集方法（１＝中央、２＝２次）
・ＣｐｏｉｎｔＩＰ，４      ＄＄収集点ＩＰアドレス
・Ｐｒｉｏｒｉｔｙ，１      ＄＄優先度（０＝低、１＝通常、２＝緊急）
・Ｌｅｓｓｏｎ，８          ＄＄提示を処理するＴｅｎＣＯＲＥレッスン／ユ
ニット
・Ｕｎｉｔ，８
・Ｆｌａｇｓ，２            ＄＄フラグ
・，２
＊フラグ：
Ｆｏｒｗａｒｄｅｄ＝ｂｉｔ（Ｆｌａｇｓ，１）  ＄＄提示はサーバーにより転送された
【０２１３】
ＵＤＳＣＰヘッダーの各要素について以下に詳述する。
ＨｅａｄｅｒＳｉｚｅ：ＵＤＳＣＰＳｕｂｍｉｔＨｅａｄｅｒ構造のバイト単位でのサイズ。この値は、構造全体のサイズを決定するために読み取られなければならず、それにより、現行のコードに影響を与えることなく構造を将来拡張することができる。
ＤａｔａＳｉｚｅ：ＵＤＳＣＰヘッダーに続く提示の内容のバイト単位でのサイズ。
Ｃｍｅｔｈｏｄ：使用される収集方法。これは整数値である。設定値１は中央サーバーにおいてデータを収集および処理させ、設定値２は２次サーバーにおいてデータを処理させる。
ＣｐｏｉｎｔＩＰ：収集点（中央サーバー）のＩＰアドレス。Ｃｍｅｔｈｏｄ＝２の場合、これは無視される。
Ｐｒｉｏｒｉｔｙ：提示の優先度。これは、整数値であり、低い場合０、通常の場合１または高い優先度の場合２のいずれかが可能である。ＵＤＳＣＰサーバーは、高優先度の提示はただちに処理を試みるが、通常および低い優先度の提示はＵＤＳＣＰ提示待ち行列に保持され、サーバーがアイドルとなった時に処理される。通常および低い優先度の提示がユーザー構成可能な期限より長くＵＤＳＣＰ待ち行列に残された場合、サーバーは、負荷に関わらずただちにそれを処理しようと試みるか、または、それができない場合は責任者に通知する。通常および低優先度の提示の期限は個別に構成可能であり、低優先度の提示は一般に長いタイムアウトで構成される。
Ｌｅｓｓｏｎ，Ｕｎｉｔ：提示を処理するＴｅｎＣＯＲＥレッスンおよびユニットの名前。
Ｆｏｒｗａｒｄｅｄ：このフラグは、その提示がＵＤＳＣＰサーバーによって転送された場合に設定され、または、それがその提示を取り扱う最初のＵＤＳＣＰサーバーである（すなわち、提示がクライアントから来た）場合にはクリアされる。
【０２１４】
待ち行列ステータス要求（ＵＤＳＣＰ＿ＱｕｅｕｅＳｔａｔｕｓＲｅｑ）：このパケットはＵＤＳＣＰ待ち行列のステータスを要求する。期待される応答は、ＭＣＭＰ＿ＳｔａｔｕｓパケットまたはＵＤＳＣＰ＿ＱｕｅｕｅＳｔａｔｕｓＲｅｓｐパケットのいずれか一方である。
【０２１５】
待ち行列ステータス要求のＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：  ＵＤＳＣＰ＿ＱｕｅｕｅＳｔａｔｕｓＲｅｑ（ｈ
０００３）
ＰａｃｋｅｔＳｉｚｅ：    ０
ＲｅｓｏｕｒｃｅＩＤ’ｓ：無。
Ｓｈｕｎｔａｂｌｅ：      不可
ＲｅｓｏｕｒｃｅＲｅｑ：  無。
【０２１６】
待ち行列ステータス応答（ＵＤＳＣＰ＿ＱｕｅｕｅＳｔａｔｕｓＲｅｓｐ）：このパケットはＵＤＳＣＰ＿ＱｕｅｕｅＳｔａｔｕｓＲｅｑパケットの応答である。これはＵＤＳＣＰサーバーの現在のＵＤＳＣＰ待ち行列のステータスに関する情報を含む。ＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：  ＵＤＳＣＰ＿ＱｕｅｕｅＳｔａｔｕｓＲｅｓｐ（ｈ
０００４）
ＰａｃｋｅｔＳｉｚｅ：    ０
ＲｅｓｏｕｒｃｅＩＤ’ｓ：無。
Ｓｈｕｎｔａｂｌｅ：      不可
ＲｅｓｏｕｒｃｅＲｅｑ：  無。
【０２１７】
このステータス応答パケットのパケット・ボディは以下の通りである。
ＱｕｅｕｅＳｔａｔｕｓ，６４
・Ｅｎｔｒｉｅｓ，４        ＄＄待ち行列のエントリの総数
・ＬｏｗＥｎｔＡｇｅ，４    ＄＄待ち行列の最新エントリの秒単位での
経過時間
・ＨｉｇｈＥｎｔＡｇｅ，４  ＄＄待ち行列の最旧エントリの経過時間
・ＡｖｇＥｎｔＡｇｅ，４    ＄＄平均的待ち行列エントリの経過時間
・ＨｉｇｈＰｒｉＥｎｔ，４  ＄＄待ち行列の高優先度エントリの経過時間
・ＬｏｗＰｒｉＥｎｔ，４    ＄＄待ち行列の低優先度エントリの経過時間
・ＦｗｄＥｎｔ，４          ＄＄転送されたエントリの数
・ＴｏＦｗｄＥｎｔ，４      ＄＄転送されなければならないエントリの数
・，３２                    ＄＄予約
【０２１８】
計量配信・支払請求プロトコル（ＭＤＢＰ）は、内容について支払うためのクレジットの配信および、内容が購入された後のローヤルティー情報の収集を含め、有料内容へのアクセスを制御する。
【０２１９】
ＭＤＢＰパケット・タイプ
ＭＤＢＰプロトコルはＣＭＸＰプロトコルと緊密に作業する。ＣＭＸＰプロトコルは暗号化形式で内容を配信するために使用される。内容はその後、クライアント・マシンでＭＤＢＰプロトコルによりアンロックされた時に解読される。内容は、ローカル・マシンにおいてクレジットにより支払いがなされた時にアンロックされる。クレジットはＭＤＢＰプロトコルによって再び充足できる。
【０２２０】
クレジットがローカル・マシンで再び充足されると、ローヤルティー情報がクレジット・サーバーに報告され、それはその後、利益の適切な配分を取り扱う。
【０２２１】
標準的なクレジット購入トランザクションでは、３個のパケットが交換される。
・ＭＤＢＰ＿ＣｒｅｄｉｔＲｅｑがクライアントからサーバーへ送られる。
・サーバーはＭＤＢＰ＿ＣｒｅｄｉｔＴｒａｎｓｆｅｒにより応答する。
・クライアントはＭＤＢＰ＿ＰｕｒｃｈａｓｅＲｅｐｏｒｔをサーバーへ送る。
【０２２２】
クレジットがユーザーにより購入される前に、そのユーザーはクレジット・サーバーにより登録されなければならない。
【０２２３】
以下は、現在ＭＤＢＰプロトコルによって使用されるパケット・タイプのリストである。ＭＤＢＰプロトコルの機能性は、このパケット・タイプのリストに追加することによって将来拡張できる。
ＭＤＢＰ＿ＣｒｅｄｉｔＲｅｑ＝２                ＄＄追加クレジットの要求
ＭＤＢＰ＿ＣｒｅｄｉｔＴｒａｎｓｆｅｒ＝３      ＄＄ＭＤＢＰ＿Ｃｒｅｄｉ
ｔＲｅｑに対する応答
ＭＤＢＰ＿ＲｅｇｉｓｔｅｒＵｓｅｒ＝４          ＄＄ユーザーを登録
ＭＤＢＰ＿ＲｅｇｉｓｔｅｒＵｓｅｒＲｅｓｐ＝５  ＄＄ＭＤＢＰ＿Ｒｅｇｉｓ
ｔｅｒＵｓｅｒに対する応
答
ＭＤＢＰ＿ＷｒｉｔｅＵｓｅｒＤａｔａ＝６        ＄＄ユーザー・データを書
き込む
ＭＤＢＰ＿ＲｅａｄＵｓｅｒＤａｔａ＝７          ＄＄ユーザー・データを読
み出す
ＭＤＢＰ＿ＲｅａｄＵｓｅｒＤａｔａＲｅｓｐ＝８  ＄＄ＭＤＢＰ＿ＲｅａｄＵ
ｓｅｒＤａｔａへの応答
ＭＤＢＰ＿ＰｕｒｃｈａｓｅＲｅｐｏｒｔ＝９      ＄＄購入／ローヤルティー
報告
【０２２４】
ＭＤＢＰパケット・タイプについて以下に詳述する。
【０２２５】
追加クレジット要求（ＭＤＢＰ＿ＣｒｅｄｉｔＲｅｑ）：このパケットはサーバーから追加のクレジットを要求する。パケット・ボディは、ユーザー・データベースにおけるユーザーのデータにアクセスするために使用されるユーザーのＩＤコードおよび、購入されるクレジットの量を含む。このパケットは暗号化されなければならない。期待される応答は、ＭＤＢＰ＿ＣｒｅｄｉｔＲｅｓｐまたはＭＣＭＰ＿Ｓｔａｔｕｓパケットのいずれか一方である。
【０２２６】
クレジット要求パケットのＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：  ＭＤＢＰ＿ＣｒｅｄｉｔＲｅｑ（ｈ０００２）
ＰａｃｋｅｔＳｉｚｅ：  ２２
ＲｅｓｏｕｒｃｅＩＤ’ｓ：無。
Ｓｈｕｎｔａｂｌｅ：      不可
ＲｅｓｏｕｒｃｅＲｅｑ：  無。
【０２２７】
クレジット要求パケットのパケット・ボディは以下の通りである。
ＵｓｅｒＩＤ，８        ＄＄ユーザーＩＤ。８バイト整数値
Ｐａｓｓｗｏｒｄ，１０  ＄＄ユーザーのパスワード
Ｃｒｅｄｉｔ，４，ｒ    ＄＄購入するクレジットの額（ドル単位）
【０２２８】
クレジット転送（ＭＤＢＰ＿ＣｒｅｄｉｔＴｒａｎｓｆｅｒ）：このパケットはＭＤＢＰ＿ＣｒｅｄｉｔＲｅｑに対する応答である。それは実際にサーバーからクライアントへのクレジットの転送を実行する。パケット・ボディはクレジット転送に関する情報を含む。このパケットは暗号化されなければならない。
【０２２９】
クレジット転送パケットのＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：  ＭＤＢＰ＿ＣｒｅｄｉｔＴｒａｎｓｆｅｒ（ｈ０
００３）
ＰａｃｋｅｔＳｉｚｅ：    ２０
ＲｅｓｏｕｒｃｅＩＤ’ｓ：無。
Ｓｈｕｎｔａｂｌｅ：      不可
ＲｅｓｏｕｒｃｅＲｅｑ：  無。
【０２３０】
クレジット転送パケットのパケット・ボディは以下の通りである。
ＵｓｅｒＩＤ，８      ＄＄そのクレジットを受け取るべきユーザーのＩＤ
Ｃｒｅｄｉｔ，４，ｒ  ＄＄購入されたクレジットの額（ドル単位）
Ｔｓｅｒｉａｌ，８    ＄＄トランザクションを追跡するために使用される
連続番号
【０２３１】
ユーザー登録（ＭＤＢＰ＿ＲｅｇｉｓｔｅｒＵｓｅｒ）：このパケットは、クレジット・サーバーによるユーザーの初期登録に使用される。これはユーザー登録データベースに新規エントリを作成させる。パケット・ボディは、そのユーザーの新規レコードの標準フィールドに書き込まれるユーザーに関する情報を含んでいる。この情報は、ＭＤＢＰ＿ＷｒｉｔｅＵｓｅｒＤａｔａおよびＭＤＢＰ＿ＲｅａｄＵｓｅｒＤａｔａパケットを用いて後に読み出しおよび修正することができる。このパケットは暗号化されなければならない。このパケットに対して期待される応答は、ＭＤＢＰ＿ＲｅａｄＵｓｅｒＤａｔａＲｅｓｐまたはＭＣＭＰ＿Ｓｔａｔｕｓパケットである。
【０２３２】
ユーザー登録パケットのＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：ＭＤＢＰ＿ＲｅｇｉｓｔｅｒＵｓｅｒ（ｈ０００４）
ＰａｃｋｅｔＳｉｚｅ：
ＲｅｓｏｕｒｃｅＩＤ’ｓ：無。
Ｓｈｕｎｔａｂｌｅ：      不可
ＲｅｓｏｕｒｃｅＲｅｑ：  無。
【０２３３】
ユーザー登録パケットのパケット・ボディは以下の通りである。
ＲｅｇｉｓｔｅｒＵｓｅｒ，５１２
・Ｎａｍｅ，５４              ＄＄氏名
・Ｃｏｍｐａｎｙ，５４        ＄＄会社名
・Ａｄｄｒｅｓｓ１，４５      ＄＄街路住所の行１
・Ａｄｄｒｅｓｓ２，４５      ＄＄街路住所の行２
・Ｃｉｔｙ，２０              ＄＄都市名
・Ｓｔａｔｅ，２              ＄＄２文字の州の略称
・Ｐｃｏｄｅ，１６            ＄＄郵便番号（ジップコード）
・Ｃｏｕｎｔｒｙ，３０        ＄＄国名
・Ｔｅｌｅｐｈｏｎｅ，１６    ＄＄電話番号
・ＡＸ，１６                  ＄＄ＦＡＸ番号
・Ｅｍａｉｌ，１００          ＄＄電子メール・アドレス
・ＣａｒｄＮｏ，２０          ＄＄クレジットカード番号（ｎｎｎｎ  ｎ
ｎｎｎ  ｎｎｎｎ  ｎｎｎｎ）
・ＣａｒｄＥｘｐＤａｔｅ，５  ＄＄クレジットカード有効期限（ｍｍ／ｙ
ｙまたはｍｍ−ｙｙ）
・Ｐａｓｓｗｏｒｄ，１０      ＄＄パスワード
・，７９                      ＄＄予約
【０２３４】
ユーザー登録応答（ＭＤＢＰ＿ＲｅｇｉｓｔｅｒＵｓｅｒＲｅｓｐ）：このパケットは、ＭＤＢＰ＿ＲｅｇｉｓｔｅｒＵｓｅｒパケットに対する応答である。そのユーザーが登録されたことを確認し、ユーザーの割り当てられたＩＤコードを返す。このパケットのＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：  ＭＤＢＰ＿ＲｅｇｉｓｔｅｒＵｓｅｒＲｅｓｐ（ｈ
０００５）
ＰａｃｋｅｔＳｉｚｅ：    ８
ＲｅｓｏｕｒｃｅＩＤ’ｓ：無。
Ｓｈｕｎｔａｂｌｅ：      不可
ＲｅｓｏｕｒｃｅＲｅｑ：  無。
【０２３５】
パケット・ボディは以下の通りである。
ｕｓｅｒＩＤ，８    ＄＄ユーザーＩＤ。８バイト整数値
【０２３６】
ユーザー・データ書き込み（ＭＤＢＰ＿ＷｒｉｔｅＵｓｅｒＤａｔａ）：このパケットはユーザー・データベースにデータを書き込む。これは、書き込むユーザー登録データベースの要素を識別するために資源識別子を使用する。パケット・ボディは書き込まれるデータである。このパケットは特殊なタイプの資源識別子を使用し、それは下記のように定義される。
ｔｙｐｅ  ｕｓｅｒｉｄ［，ｄｂｉｔｅｍ］；ｌｅｎｇｔｈ［；ｄａｔｅ，ｔｉｍｅ］
ここで、
ｔｙｐｅ        資源タイプを識別し、必ず「ｍｄｂｐｕｓｅｒ」である。
ｕｓｅｒｉｄ    当該ユーザーのＩＤ（１６進数）。
ｄｂｉｔｅｍ    検索するユーザー・データベース項目のパス。省略された
場合、指定されたユーザーのユーザー・データ・ツリー全
体を含むツリー・ファイルがレジュームされる。
ｌｅｎｇｔｈ    返される項目の部分。
例：
ｍｄｂｐｕｓｅｒ：０００００００００００００３ｅ４，＼Ｃａｔｈａｒｏｎ＼ＲＡｄｍｉｎ＼Ｒｉｇｈｔｓ；＊；０３／１３／１９９５，１２：２０：４８
ｍｄｂｐｕｓｅｒ：００００００００００００００１４；＊
ｍｄｂｐｕｓｅｒ：００００００００００００２ａｆｆ＼ＸＹＺＷｉｄｇｔ＼ＷＤＢＰ＼ＧｒｏｕｐＭｅｍｂｅｒｓｈｉｐ；２５６；５／１２／１９９６，０１：００：３０
【０２３７】
ユーザー・データベースは、システム・フォルダおよびパブリッシャー・フォルダを含む。システム・フォルダは、初期のユーザー登録パケットで指定されたデータを含み、追加データを含むために拡張できる。パブリッシャー・フォルダは、パブリッシャーの名前にもとづき命名される、各パブリッシャーのサブフォルダを含み、パブリッシャー・フォルダはさらにパブリケーションにもとづき命名されるパブリケーション・フォルダを含む。パブリケーション・フォルダ内のデータの編成はパブリケーションに特定である。
【０２３８】
ユーザー・データ書き込みパケットのＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：ＭＤＢＰ＿ＷｒｉｔｅＵｓｅｒＤａｔａ（ｈ０００
６）
ＰａｃｋｅｔＳｉｚｅ：    可変
ＲｅｓｏｕｒｃｅＩＤ’ｓ：１個（書き込む資源）
Ｓｈｕｎｔａｂｌｅ：      不可
ＲｅｓｏｕｒｃｅＲｅｑ：  有
【０２３９】
ユーザー・データ読み出し（ＭＤＢＰ＿ＲｅａｄＵｓｅｒＤａｔａ）：このパケットはユーザー・データベースからデータを読み出す。読み出すユーザー登録データベースの要素を識別するために資源識別子を使用する。資源識別子のフォーマットは、ＭＤＢＰ＿ＷｒｉｔｅＵｓｅｒＤａｔａパケットで使用される資源識別子のものと同じである。
【０２４０】
複数の資源識別子を指定でき、ユーザー登録データベースの指定された要素の各々を返させる。
【０２４１】
このパケットは一連のパケット（各要求資源について１個ずつ）により応答される。これらのパケットは、（資源がうまく読み出された場合の）ＭＤＢＰ＿ＲｅａｄＵｓｅｒＤａｔａＲｅｓｐまたは（資源の読み出しにエラーがあった場合の）ＭＣＭＰ＿Ｓｔａｔｕｓのいずれか一方である。
【０２４２】
ユーザー・データ読み出しパケットのＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：ＭＤＢＰ＿ＲｅａｄＵｓｅｒＤａｔａ（ｈ０００７）
ＰａｃｋｅｔＳｉｚｅ：    ０
ＲｅｓｏｕｒｃｅＩＤ’ｓ：１個以上
Ｓｈｕｎｔａｂｌｅ：      不可
ＲｅｓｏｕｒｃｅＲｅｑ：  有
【０２４３】
ユーザー・データ読み出し応答（ＭＤＢＰ＿ＲｅａｄＵｓｅｒＤａｔａＲｅｓｐ）：このパケットはＭＤＢＰ＿ＲｅａｄＵｓｅｒＤａｔａパケットに対する応答である。これはユーザー登録データベースの要求された要素の内容を含む。ボディは読み出されたデータである。ＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：ＭＤＢＰ＿ＲｅａｄＵｓｅｒＤａｔａＲｅｓｐ（ｈ
０００８）
ＰａｃｋｅｔＳｉｚｅ：    可変
ＲｅｓｏｕｒｃｅＩＤ’ｓ：無
Ｓｈｕｎｔａｂｌｅ：      不可
ＲｅｓｏｕｒｃｅＲｅｑ：  無
【０２４４】
購入／ローヤルティー報告（ＭＤＢＰ＿ＰｕｒｃｈａｓｅＲｅｐｏｒｔ）：これらのパケットの１個以上は、クライアントが報告するべき購入またはローヤルティー情報を有している場合に、ＭＤＢＰ＿ＣｒｅｄｉｔＲｅｑパケットの応答をクライアントが受信した後にクライアントからサーバーに送信される。
【０２４５】
データ領域は、総称ローヤルティー報告ヘッダーに続き、パブリケーション特定ローヤルティー報告データ領域を含む。場合によっては、ローヤルティー報告ヘッダーが所要のローヤルティー情報を報告するために十分であるので、データ領域はオプションとなり、含まなくてもよいことがある。ローヤルティー報告ヘッダーに続くあらゆるデータは、パブリケーション特定データと仮定される。
【０２４６】
ローヤルティー報告パケットのＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：  ＭＤＢＰ＿ＰｕｒｃｈａｓｅＲｅｐｏｒｔ（ｈ０
００９）
ＰａｃｋｅｔＳｉｚｅ：    可変
ＲｅｓｏｕｒｃｅＩＤ’ｓ：無
Ｓｈｕｎｔａｂｌｅ：      不可
ＲｅｓｏｕｒｃｅＲｅｑ：  無
【０２４７】
ローヤルティー報告ヘッダーは以下の通りである。
ＲｏｙａｌｔｙＲｅｐｏｒｔ，１２８
・ＨｅａｄｅｒＳｉｚｅ，２        ＄＄ローヤルティー報告ヘッダー
のバイト単位でのサイズ
・Ｐｕｂｌｉｓｈｅｒ，４５        ＄＄パブリッシャーの名前
・Ｐｕｂｌｉｃａｔｉｏｎ，４５    ＄＄パブリケーションの名前
・ＶｏｌＩｓｓｕｅ，２０      ＄＄適用可能な場合、パブリケーシ
ョンの巻および／または号数
・Ｖｅｒｓｉｏｎ，４              ＄＄適用可能な場合、パブリケーシ
ョンのバージョン
・ＵｓｅｒＩＤ，８                ＄＄そのパブリケーションを読ん
でいるユーザーのＩＤ
・ＣｒｅｄｉｔＳｐｅｎｔ，４，ｒ  ＄＄そのパブリケーションに関して支
払われたドル単位でのクレジット
【０２４８】
ＤＰＰパケット・タイプ
分散処理プロトコル（ＤＰＰ）は、あるタスクによって生じる処理負荷を、複数のコンピューターに分散させることによって低減させるために使用される。このプロトコルは、アイドル状態のシステムを探索し突き止め、（ＣＭＸＰプロトコルと連係して）そのタスクを支援できるようにそれらのシステムに適切なコード・モジュールを送信するために使用される。タスクが完了すると、プロトコルは、全部の「支援」マシンから結果を集め、そのタスクを開始したマシンでそれらを収集し編集するために使用される。
【０２４９】
このプロトコルによって付与される機能性は、主たるＭＣＭＰプロトコルによって付与される負荷分散機能性と混同してはならない。ＭＣＭＰプロトコルの負荷分散は、クライアントの要求を多様なロケーションにある多様なマシンに分散させることによって作用する。ＤＰＰプロトコルは、単一のタスクを完遂するために協働する複数のマシンを使用するものであり、ローカル・エリア・ネットワークおよび、三次元画像のレンダリングといったプロセッサー集約的タスクにとって、より適している。
【０２５０】
分散処理プロセスに関与する各システムは、自己がタスクを支援できるシステムおよび自己のタスクを支援してもらえるシステムのリストによって構成されなければならない。このリストは、ワイルドカードによるエントリを含むことができ、１９２．１６８．１２３．Ｃレベルのネットワーク全体について１９２．１６８．１２３．＊といったネットワーク全体を指定できる。
【０２５１】
このシステム構成の目的は、システム・プロセッサーを利用できる者を管理するためである。例えば、ある会社は、セキュリティの理由で、自社の内部ネットワーク内でのシステムに対する共用処理を制限したいかもしれない。
【０２５２】
システムは、コンピューターのプロセッサーへのアクセスの優先順位を割り当てることもできる。例えば、ある会社が、自社のコンピューターの全部に、他の要求に優先して自社のネットワーク上の他のコンピューターからの分散処理要求を許可させたいかもしれない。しかし、その会社が他のいずれかの会社と提携した場合、自社のコンピューターのいずれも処理支援を求めていない限り、分散処理のために自社のコンピューターに対する当該他社のアクセスを許可するように望むこともあろう。
【０２５３】
以下は、現在ＤＰＰプロトコルによって使用されるパケット・タイプのリストである。ＤＰＰプロトコルの機能性は、このパケット・タイプのリストに追加することによって将来拡張できる。
ＤＰＰ＿ＡｓｓｉｓｔＲｅｑ＝２            ＄＄処理支援の要求
ＤＰＰ＿ＡｓｓｉｓｔＲｅｓｐ＝３          ＄＄ＤＰＰ＿ＡｓｓｉｓｔＲｅ
ｑの応答
ＤＰＰ＿ＥｎｄＴａｓｋＲｅｑ＝４          ＄＄処理支援の終了の要求
ＤＰＰ＿ＥｎｄＴａｓｋＮｏｔｉｆｙ＝５    ＄＄支援終了の通知
ＤＰＰ＿ＵｐｄａｔｅＲｅｑ＝６            ＄＄タスク・ステータスの更新                                              
要求
ＤＰＰ＿ＵｐｄａｔｅＲｅｓｐ＝７          ＄＄ＵｐｄａｔｅＲｅｑの応答
【０２５４】
これらのパケット・タイプについて以下に詳述する。
【０２５５】
処理支援要求（ＡｓｓｉｓｔＲｅｑ）：このパケットは、処理支援を必要とするシステムによって、当該システムからの処理支援を要求するために別のシステムへ送信される。このパケットは、必要に応じてＣＭＸＰによってコード・モジュールを取り出すことができるように、その処理を扱うための初期コード・モジュールの資源識別子を含め、分散プロセスを開始するために必要な全部の情報を含んでいる。このパケットに対する応答は、（受信側システムが支援できる場合の）ＤＰＰ＿ＡｓｓｉｓｔＲｅｓｐパケットまたは（受信側システムが支援できない場合の）ＭＣＭＰ＿Ｓｔａｔｕｓパケットのいずれか一方である。
【０２５６】
ＭＣＭＰ＿Ｓｔａｔｕｓパケットの生じ得る理由には以下が含まれる。
・アクセス拒否
パケットが送信されたシステムが要求を支援するために許可されていなかった。
これは、要求を生成したシステムが受信側システムの適切なコンフィギュレー
ション・ファイルにリストされていなかった結果である。
・自由なシステム資源の不足
要求を受信したシステムにそのシステムが分散プロセスを支援するために十分
な自由なシステム資源が存在しない。場合によっては、システムがこのステー
タス値を返せないほどビジーであることもある。
・要求の交替
これは、システムが十分な自由なプロセッサー時間を有しておらず、要求を送
信したシステムに優先して別のシステムを支援するように選択したことを示す。
「要求の交替」が「アクセス拒否」と別のステータス・コードである理由は、「ア
クセス拒否」のほうが、支援するシステムを探索するプログラムがエラーに遭
遇した場合に、（ユーザーに想定可能なコンフィギュレーションのエラーを通
知するために）エラーを発生し得るのに対し、「要求の交替」は単に、そのシス
テムがその時点においてタスクを支援するために使用できないことを示すにす
ぎず、従ってエラーを発生しないという点にある。
・タスク特定エラー
これはタスクを取り扱うコード・モジュールによってレジュームされる。ＭＣ
ＭＰ＿Ｓｔａｔｕｓパケットは、発生した特定エラーを示す付加的なタスク特
定エラーコードを含むはずである。タスク特定エラーは、システムがハードウ
エアの制約のためにタスクを支援する能力がないことを示すエラーを含むかも
しれない。
【０２５７】
支援要求パケットのパケット・ボディは、３２バイトのヘッダーに続き、資源識別子で参照されたコード・モジュールがタスクの処理の際に必要であるという何らかの情報を含むタスク特定データ領域によって構成される。それは例えば、（画像を処理しなければならない場合の）画像または、レンダリングされる三次元環境の記述を含むことができよう。
【０２５８】
タスク特定データ領域は、システムが作業するべきタスクの部分（例えば、画像における開始および終わりの線）および、支援側システムが開始側システムを処理済データにより更新する頻度を示す情報も含む。
【０２５９】
支援要求パケットのＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：  ＤＰＰ＿ＡｓｓｉｓｔＲｅｑ（ｈ０００２）
ＰａｃｋｅｔＳｉｚｅ：    ３２＋タスク特定データのサイズ
ＲｅｓｏｕｒｃｅＩＤ’ｓ：１個（分散プロセスを扱うコード・モジュー
ルのＩＤ）
Ｓｈｕｎｔａｂｌｅ：      不可
ＲｅｓｏｕｒｃｅＲｅｑ：  無
【０２６０】
ＤＰＰ＿ＡｓｓｉｓｔＲｅｑヘッダーは以下の通りである。
ＤＰＰ＿ＡｓｓｉｓｔＲｅｑＨｄｒ，３２
・ＰｒｏｃｅｓｓＩＤ，２    ＄＄プロセス識別子
・，３０                    ＄＄予約
【０２６１】
ＤＰＰ＿ＡｓｓｉｓｔＲｅｑヘッダーの要素について以下に詳述する。
ＰｒｏｃｅｓｓＩＤ：これはそのプロセスを識別する２バイト整数値である。これはプロセスを開始したシステムによって割り当てられ、そのシステムのＩＰアドレスと組み合わされた時に一意の識別子となる。
【０２６２】
支援応答（ＤＰＰ＿ＡｓｓｉｓｔＲｅｓｐ）：このパケットは、ＤＰＰ＿ＡｓｓｉｓｔＲｅｑに応答して、そのシステムがタスクの支援を開始したことを肯定応答するために送信される。これは単に肯定応答メッセージであるので、資源ＩＤは存在せず、パケット・ボディもまったく存在しない。ＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：  ＤＰＰ＿ＡｓｓｉｓｔＲｅｓｐ（ｈ０００３）
ＰａｃｋｅｔＳｉｚｅ：    ０
ＲｅｓｏｕｒｃｅＩＤ’ｓ：無
Ｓｈｕｎｔａｂｌｅ：      不可
ＲｅｓｏｕｒｃｅＲｅｑ：  無
【０２６３】
タスク終了要求（ＤＰＰ＿ＥｎｄＴａｓｋＲｅｑ）：このパケットは、支援側システムに対して、当該システムがタスクの支援を早期（そのタスクが完了する前）に終了するように命令するために送られる。これは例えば、開始側システムのユーザーが「キャンセル」ボタンをクリックしてタスクを打ち切った場合に使用されるであろう。ＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：  ＤＰＰ＿ＥｎｄＴａｓｋＲｅｑ（ｈ０００４）
ＰａｃｋｅｔＳｉｚｅ：    １６
ＲｅｓｏｕｒｃｅＩＤ’ｓ：１個（分散プロセスを取り扱うコード・モジ
ュールのＩＤ）
Ｓｈｕｎｔａｂｌｅ：      不可
ＲｅｓｏｕｒｃｅＲｅｑ：  無
【０２６４】
タスク終了要求パケットのパケット・ボディは以下の通りである。
ＤＰＰ＿ＥｎｄＴａｓｋＲｅｑ，１６
・ＰｒｏｃｅｓｓＩＤ，２    ＄＄終了するプロセスのＩＤ
・，１４                    ＄＄予約
【０２６５】
タスク終了通知（ＤＰＰ＿ＥｎｄＴａｓｋＮｏｔｉｆｙ）：このパケットは、支援側システムによって、それがもはやタスクの支援を行えないことを開始側システムに通知するために送られる。これは、それ自体で使用されることも、また、ＤＰＰ＿ＥｎｄＴａｓｋＲｅｑパケットの肯定応答としても使用される。これは例えば、支援側システムがタスクの支援を続行できないほどビジーになった場合、または、支援側システムがタスクを打ち切るように開始側システムにより命令された場合に送信されるであろう。このパケットは、タスクが完了したことを開始側システムに通知するために使用することもできる。ＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：  ＤＰＰ＿ＥｎｄＴａｓｋＮｏｔｉｆｙ（ｈ０００５）
ＰａｃｋｅｔＳｉｚｅ：    １６
ＲｅｓｏｕｒｃｅＩＤ’ｓ：１個（分散プロセスを取り扱うコード・モジ
ュールのＩＤ）
Ｓｈｕｎｔａｂｌｅ：      不可
ＲｅｓｏｕｒｃｅＲｅｑ：  無
【０２６６】
タスク終了通知パケットのパケット・ボディは以下の通りである。
ＤＰＰ＿ＥｎｄＴａｓｋＲｅｑ，１６
・ＰｒｏｃｅｓｓＩＤ，２  ＄＄終了するプロセスのＩＤ
・ＴＳｔａｔｕｓ，１      ＄＄タスク・ステータス。１＝完了、０＝不完
了（打ち切り）
・，１３                  ＄＄予約
【０２６７】
更新要求（ＤＰＰ＿ＵｐｄａｔｅＲｅｑ）：このパケットは、支援側システムが処理済データ（ＤＰＰ＿ＵｐｄａｔｅＲｅｓｐパケット）を送信するように命令するために開始側システムによって送られる。例えば、画像が処理されている場合、このパケットにより支援側システムは、自己がそれまでに処理した画像の部分を構成するデータにより応答することになる。このパケット・タイプの使用はタスクに依存する。一部のタスクはこのパケットをまったく使用することなく、そのタスクが完了した時に、多様な間隔でＤＰＰ＿ＵｐｄａｔｅＲｅｓｐパケットを自動的に生成するであろう。ＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：  ＤＰＰ＿ＵｐｄａｔｅＲｅｑ（ｈ０００６）
ＰａｃｋｅｔＳｉｚｅ：    ６
ＲｅｓｏｕｒｃｅＩＤ’ｓ：１個（分散プロセスを取り扱うコード・モジ
ュールのＩＤ）
Ｓｈｕｎｔａｂｌｅ：      不可
ＲｅｓｏｕｒｃｅＲｅｑ：  無
【０２６８】
更新要求パケットのパケット・ボディは以下の通りである。
ＤＰＰ＿ＥｎｄＴａｓｋＲｅｓｐ，１６
・ＰｒｏｃｅｓｓＩＤ，２  ＄＄処理済データを返すプロセスのＩＤ
・，１４                  ＄＄予約
【０２６９】
更新応答（ＤＰＰ＿ＵｐｄａｔｅＲｅｓｐ）：このパケットは支援側システムから開始側システムへ送られる。これは、当該タスクの一部としてそれまでに処理されたデータを含んでいる。例えば、画像が処理されている場合、このパケットはすでに処理された画像の部分を含むであろう。これらのパケットで送られたデータは累積的ではない点に留意されたい。すなわち、２個のパケットが連続して送られた場合、第２のパケットは第１のパケットに含まれていないデータだけを含んでいる。
【０２７０】
これらのパケットはたいていＤＰＰ＿ＵｐｄａｔｅＲｅｑパケットに応答して送信されるが、タスク中およびタスク完了時に、タスク支援を取り扱うプログラムによって自動的に送信されることもできる。
【０２７１】
パケット・ボディは、ヘッダーに続き、タスク特定データにより構成される。ヘッダーの全部のデータではなく一部がタスク特定データとしてみなされる。
【０２７２】
更新応答パケットのＭＣＭＰヘッダーは以下の通りである。
ＰａｃｋｅｔＴｙｐｅ：    ＤＰＰ＿ＵｐｄａｔｅＲｅｓｐ（ｈ０００７）
ＰａｃｋｅｔＳｉｚｅ：    １６＋タスク特定データのサイズ
ＲｅｓｏｕｒｃｅＩＤ’ｓ：１個（分散プロセスを取り扱うコード・モジュ
ールのＩＤ）
Ｓｈｕｎｔａｂｌｅ：      不可
ＲｅｓｏｕｒｃｅＲｅｑ：  無
【０２７３】
ＤＰＰ＿ＥｎｄＴａｓｋＲｅｓｐヘッダーは以下の通りである。
ＤＰＰ＿ＥｎｄＴａｓｋＲｅｓｐ，１６
・ＨｅａｄｅｒＳｉｚｅ，２  ＄＄ＤＰＰ＿ＥｎｄＴａｓｋＲｅｓｐヘッダ
ーのバイト単位でのサイズ
・ＰｒｏｃｅｓｓＩＤ，２    ＄＄処理済データを返すプロセスのＩＤ
・，１２                    ＄＄予約
【０２７４】
用語「コード・モジュール」は、本明細書において、当該アプリケーション・プログラムの特定オペレーションの実行に専用化された、アプリケーション・プログラムの自立的部分を意味するために使用される。例えば、ペインティング・プログラムでは、１個のコード・モジュールが線の描画を制御し、別のコード・モジュールが塗色を実施し、さらに別のコード・モジュールが円といった幾何学図形を作成するために使用され得る。これらのコード・モジュールは、それらの少なくとも一部が何らかの特定のオペレーションを実行するために必要とされないという点で、独立である。ある結果を生じるために２個以上のモジュールが必要とされる場合もある。しかし、いかなる場合も全部のモジュールが要求されることはない。
【０２７５】
本明細書において使用される用語「マシン実行可能」は、コンピューターのオペレーションを制御し、汎用ディジタル・コンピューターの算術論理回路の状態を変更し、それにより汎用ディジタル・コンピューターの機能性を変更する能力がある、プログラム・モジュールであるコード・モジュールについて言及する。それ故、「マシン実行可能コード・モジュール」は、データ・ファイルおよび、他の受動的電子符号化情報を包含しない。
【０２７６】
本明細書において使用される用語「アプリケーション・プログラム」は、オペレーティングシステムおよび、基本的マシン機能を制御するための他の基礎的プログラム以外のコンピューター・コードのいずれかの実行可能な集合をいう。従って、モジュール化コード・マスタ・プロトコルは、そのサブプロトコルを含め、それ自体モジュール化され、ネットワークによってコード・モジュール単位で送信可能である、アプリケーション・プログラムである。例えば、少なくとも一部のサブプロトコルは一部の２次サーバーに存在しないことがある。そのようなサブプロトコルが、タスクを計算するまたはユーザーの要求を処理するために２次サーバーに必要となった場合、その所要のサブプロトコルは１次サーバーから２次サーバーへネットワークを介して送信され得る。
【０２７７】
サブプロトコルは、各ＭＣＭＰヘッダーに付属するＭＣＭＰヘッダーにサブプロトコル識別子を含めることによって取り扱われる。ＭＣＭＰサーバーでは、それらのサブプロトコルを扱うための回路は、ＣＭＸＰプロトコルによってリアルタイムで取り扱われるプラグイン・モジュールとすることができる。到来パケットが受信されると、適切なサブプロトコル・ハンドラが呼び出される。サブプロトコル・ハンドラは、必要とされるいずれかの方法でそのパケットを処理できる。プロトコル・ハンドラは、ＭＣＭＰサーバーが、資源がどのようなフォーマットになっているか、それらをサーバー間でどのように転送するか、または、キャッシング規則がどのようなものであるかを知る方法を有していないので、負荷分散プロセスにおいて関与することになる。サブプロトコル・ハンドラは、プロトコル特定資源のアクセス、転送およびキャッシングを扱わなければならない。サブプロトコル・ハンドラは、ＭＣＭＰサーバーのメイン処理ループにおいて定期的に呼び出され、各種メンテナンス・タスクをそれが実行できるようにする。あるいはまた、サブプロトコル・ハンドラは、個別のスレッドで走行するループから呼び出されることもできよう。
【０２７８】
特定のサブプロトコルのためのハンドラは、ＭＣＭＰサーバーが、プロプライエタリー・ダイアログ・モード（ＰＤＭ）にあるとしてソケットにフラグを設定するように要求することができる。ＰＤＭソケットでは、全部の到来パケットは、ＭＣＭＰサーバーによる処理を伴わずに、サブプロトコル・ハンドラに直接渡される。ソケットがＰＤＭオペレーションからノーマル・オペレーションに戻されると、サブプロトコル・ハンドラは、それが１個以上のＭＣＭＰパケットの一部を読み出したかもしれないので、ＭＣＭＰサーバーに何らかの「余分な」未処理データを渡さなければならない。
【０２７９】
用語「１次サーバー」または「ソース・サーバー」は、本明細書において、特定のアプリケーションに関連する資源の権限のあるソースを意味するために使用される。例えば、ＴｅｎＣＯＲＥ  Ｎｅｔ  Ｄｅｍｏの１次サーバーは、そのデモの最新バージョンが常に配置されているサーバーであろう。
【０２８０】
本明細書において使用される用語「２次サーバー」は、１次サーバーからサービス・ハンドオフを受け取るサーバーを意味する。２次サーバーは通常、２次サーバー用の１次サーバーの内容をミラーしている。例えば、ＴｅｎＣＯＲＥ  ＮｅｔＤｅｍｏの２次サーバーは、１次サーバーが過度にビジーになった場合にクライアントへのサービスを引き継ぐサーバーであろう。２次サーバーは、２次サーバーが必要な時に１次サーバーからそれらの資源を要求できる限り、２次サーバー用の資源のミラーを必ずしも含んでいるわけではない。
【０２８１】
単一のマシンが１次サーバーおよび２次サーバーの両者になることができる。例えば、あるマシンが、ＴｅｎＣＯＲＥ  Ｎｅｔ  Ｄｅｍｏの１次サーバーであり、かつ、Ｃｏｕｎｔｒｙ  Ｃｌｏｓｅｔ  Ｃｌｏｔｈｉｎｇ  Ｃａｔａｌｏｇの２次サーバーであることも可能であろう。
【０２８２】
単一のマシンが、複数のアプリケーションの１次サーバーとして機能し、複数のアプリケーションの２次サーバーとして機能することができる。
【０２８３】
用語「資源」は、本明細書において、サーバーまたはクライアントによって使用され得るデータのいずれかのブロックを意味するために使用される。資源は、ファイル、コード・モジュール、ファイルの一部、コード・モジュール、コード・モジュールの一部、ファイル・ディレクトリ、コード・モジュール・ディレクトリ、または、ＣＭＸＰ禁止リストを含め情報のいずれかの関係する一部とすることができる。また、用語「資源」は、プロセッサー時間およびメモリーといった、ハードウエアおよびシステム資源に言及するためにも使用される。
【０２８４】
用語「ツリー・ファイル」は、Ｃａｔｈａｒｏｎ  Ｔｒｅｅ−Ｓｔｒｕｃｔｕｒｅ  Ｎａｍｅｓｅｔ  Ｆｉｌｅをいう。ツリー・ファイルは、（オペレーティングシステムのファイル・システムに類似の）ツリー状構造に分類され入れ子型にされた、一連の命名されたレコードの組を含んでいる。ツリー・ファイルでは、パーセント記号「％」で始まる名前は内部使用のために予約されている。他の任意の名前は、ツリー・ファイルを維持しているアプリケーションによって使用することができる。現在、ただ１個のパーセント記号付き名前が割り当てられている。それは「＼％Ｓｙｓｔｅｍ」であり、これは、（オプションで）ファイルを作成したアプリケーションの名前、そのもとでファイルが最後に編集されたネットワーク・アカウントのユーザー、ファイルが最後に編集された日付および時刻、ファイルにある各種資源のロケーション、（無指定の場合の）デフォールト・フォルダのロケーションおよびファイルの関連情報を含め、ファイルに関する一般情報を含んでいる。
【０２８５】
上述の通り、ＴｅｎＣＯＲＥは疑似コードを使用するインタープリター言語である。上記の説明に従って修正されたようなＴｅｎＣＯＲＥプログラミング言語との使用に適したインタープリター・プログラムは、現在普通に使用されている。
【０２８６】
ＴｅｎＣＯＲＥプログラミング言語の説明を以下に述べる。言語の基本的特徴を最初に述べ、その後、変数の処理を述べる。最後に、この言語で使用される全部の重要なコマンドの解説を行う。上述の説明と同様、この情報からも、当業者は、本発明での使用に適するモジュラー・プログラミング言語を生成できよう。
【０２８７】
ＴｅｎＣＯＲＥ言語の基本
ＴｅｎＣＯＲＥ言語オーサリング・システムは、コンピューターをベースとするトレーニング用として特に強化された完全プログラミング環境である。システムのエディターは、ソース・コード、画像、フォント、画面表示、データ操作を補助する。言語には、構造化されたプログラミング環境内における表示作成、応答の入力および分析、データ操作を行う機能一式が揃っている。
【０２８８】
コマンドの構文
言語の一次ビルディングブロックはコマンドである。ＴｅｎＣＯＲＥには約１７５のコマンドが含まれており、コマンドが実行する機能のニーモニック表現を使って命名されている。ほとんどのコマンドのあとには、通常、必要な機能をより詳細に定義するキーワードを持つタグがある。コマンドとタグをまとめてステートメントと呼ぶ。他のすべての言語と同じように、タグの構文を決定する規則や特定のタスクを実行する一連のステートメント間の相互作用を決定する規則がある。
【０２８９】
ＴｅｎＣＯＲＥ言語は固定フィールド言語である。いちばん簡単な形式の構文を以下に示す。
ｃｏｍｍａｎｄ  ｔａｇ
【０２９０】
ｃｏｍｍａｎｄフィールドは最大８文字のコマンド名を含んでいる。ｔａｇフィールドは文字位置９から始まり（ソース・エディター内では、ここにタブ・ストップがある）、その行の残りの位置に最大１１９文字まで記述できる。多数のコマンドの場合、次行のコマンド・フィールドにタブで（空白のままとして）移動することによってタグを複数行に継続できる。標準のコード行を以下に示す。
ａｔ        ５：１０
ｃｏｌｏｒ  ｙｅｌｌｏｗ
ｗｒｉｔｅ  Ｗｅｌｃｏｍｅ  ｔｏ  Ｂａｓｉｃ  Ｓｉｇｎ  Ｌａｎｇｕａｇｅ
Ｔｏｄａｙ’ｓ  ｌｅｓｓｏｎ  ｃｏｎｓｉｓｔｓ  ｏｆ．．．
【０２９１】
各ステートメントはコマンドで始まり、そのあとにタグが続く。１行目にあるａｔコマンドは、表示の５行目文字位置１０にカーソルを移動する。２番目のｃｏｌｏｒコマンドは、後続グラフィックスとテキストに使用する色に黄を選択する。最後のｗｒｉｔｅコマンドは、すでに指定された位置と色に基づいてテキストを表示する。ｗｒｉｔｅステートメントのタグは、後続コマンド・フィールドをタブで移動することによって複数行に継続する。
【０２９２】
選択形式
多数のコマンドは以下の選択形式を持つ。
ｃｏｍｍａｎｄＳＥＬＥＣＴＯＲ；ｎｅｇＴＡＧ；ｚｅｒｏＴＡＧ；ｏｎｅＴＡＧ；．．．ｎＴＡＧ
【０２９３】
ＳＥＬＥＣＴＯＲは変数、定数、または、計算で構成される数式で、評価され、リストから特定のタグを選択するのに使用される。各種区切り文字も使用できるが通常はセミコロンを使ってタグを区切る。ｎＴＡＧケースは、ＳＥＬＥＣＴＯＲがｎまたはそれ以上に評価する場合に選択される。リスト内の空白入力（；；）は、特定ケースのコマンドの実行をスキップするのに使用できる。特定の曜日を保持する整数型変数としてｄａｙが定義されている場合、以下のステートメントは該当曜日を画面に表示する。
ａｔ          ５：１０
ｗｒｉｔｅ    Ｔｏｄａｙ  ｉｓ
ｗｒｉｔｅｃ  ｄａｙ；；；  Ｍｏｎｄａｙ；  Ｔｕｅｓｄａｙ；  Ｗｅｄｎｅｓｄａｙ；  Ｔｈｕｒｓａｙ；  Ｆｒｉｄａｙ；  Ｓａｔｕｒｄａｙ；  Ｓｕｎｄａｙ
【０２９４】
ＴｅｎＣＯＲＥは真の論理値を−１（または、任意の負の値）、偽の論理値を０（または、任意の正の値）と定義するので、２つの選択タグは真または偽の判定として機能する。
ｃｏｍｍａｎｄ  ＳＥＬＥＣＴＯＲ；ｔｒｕｅＴＡＧ；ｆａｌｓｅＴＡＧ
【０２９５】
条件形式
コマンドによっては（特に判定用コマンドの場合）、コマンドを実行するかどうかの決定に使用するタグとしてＣＯＮＤＩＴＩＯＮ（条件）だけしかないものがある。条件とは、論理的に真（−１）、または、偽（０）と評価するすべての数式のことである。
ｃｏｍｍａｎｄ  ＣＯＮＤＩＴＩＯＮ
【０２９６】
たとえば、生徒が３度マッチングを試行したあとスペルミスを容認する場合、現在までの判定試行回数を保持するシステム変数ｚｔｒｉｅｓをベースにした条件式を使用できる。
ｏｋｓｐｅｌｌ  ｚｔｒｉｅｓ＞３
ａｎｓｗｅｒ  Ｍｉｓｓｉｓｓｉｐｐｉ
【０２９７】
埋め込み
テキストの取り扱いに関連する多数のコマンドでは、テキストの本体部分にさらにコマンドを埋め込むことができる。
ｃｏｍｍａｎｄＴＥＸＴ≪ｃｏｍｍａｎｄ，ｔａｇ≫ＴＥＸＴ
【０２９８】
≪、≫の記号は、［ＡＬＴ］［，］と［ＡＬＴ］［．］キーを使ってアクセスされる埋め込み記号である。埋め込まれたコマンドの名前は、通常、最初の１文字または２文字で略記してスペースを節減できる。たとえば、埋め込みコマンドがｓｈｏｗの場合、ｓと略記する。埋め込みは、変数の表示やテキスト・ステートメント内のプロット属性の制御によく使用され、表示全体を効率よくコーディングできる。
ｗｒｉｔｅ  <<ｃｏｌｏｒ，ｒｅｄ>>Ｙｏｕｒ  ｓｃｏｒｅ<<ｃｏｌｏｒ，ｗｈｉｔｅ>>  ｉｓ  <<ｓｈｏｗ，ｓｃｏｒｅ>>％
Ｔｈｅ<<ｃ，ｇｒｅｅｎ>>ｃｌａｓｓ  ａｖｅｒａｇｅ<<ｃ，ｗｈｉｔｅ>>  ｉｓ<<ｓ，ａｖｅｒａｇｅ>>％
【０２９９】
コメント、スペーシング、継続コマンド
行頭のアスタリスク（＊）は、行全体がコンパイラーによって取り除かれて実行に影響を与えないコメントであることを指示する。コメントは、２つのドル記号＄＄に続けて記述してコードの任意の行に入れることができる。コンパイラーが取り除くため、コメントはコードの実行に影響を与えない。
ｃａｌｃ  ｔｅｍｐ(ｔｅｍｐ＊９／５  ＋  ３２  ＄＄摂氏から華氏への変換
【０３００】
通常、タグのたち下がりスペースはコンパイラーによって取り除かれて実行に影響を与えない。これは、２つのドル記号＄＄をコメント記号として使用する場合も同じである。コンパイラーがコメントとすべてのスペースを取り除いて実タグに戻す。一部のテキスト・コマンドではタグのたち下がりスペースが実際に必要なことがあり、オンライン・コメントと３つのドル記号＄＄＄を組み合わせて使用して、コンパイラーにスペースを維持するよう指示できる。例とその表示結果を以下に示す。
Ｗｅｌｃｏｍｅ  Ｂｏｂ：
ｗｒｉｔｅ  Ｗｅｌｃｏｍｅ＄＄＄  ｍａｉｎｔａｉｎ  ｓｉｎｇｌｅ  ｔｒａｉｌｉｎｇ  ｓｐａｃｅ
ｓｈｏｗａ  ｎａｍｅ
【０３０１】
非選択タグを持つほとんどのコマンドは、コマンド・フィールドに再入力することなく繰り返せる。ほとんどのコードの行間にも「スペース」を追加して、コーディングを読みやすくできる。
＊ Ｔｈｉｓ  ｓｃｔｉｏｎ  ｏｆ  ｃｏｄｅ  ｉｎｉｔｉａｌｉｚｅｓ  ｐａｒａｍｅｔｅｒｓ．
ｃａｌｃ      ｆｒａｍｅ(2045            ＄＄開始フレーム番号
ｆｉｌｅ(’ｂａｎｇｓ’    ＄＄エクスプロージョン・ライブ
ラリを使用
ｂｌｏｃｋ(’ｍｅｇａ’    ＄＄ビッグ・エクスプロージョン
を使用
ｔｙｐｅ(’ｎａｍｅｓｅｔ’＄＄これらはネームセット・ファ
イル
ａｔｔａｃｈ  ｆｉｌｅ；ｔｙｐｅ          ＄＄ファイルをアタッチ
【０３０２】
ユニット
一連のＴｅｎＣＯＲＥステートメントは、他の言語における手順またはサブルーチンに似たユニットと呼ばれる機能エンティティーを構成する。
【０３０３】
コマンドは、意味をなす方法でユニットに分けられる。簡単な「ページめくり」のレッスンは教材の複数フレームで構成され、それぞれのフレームはユニットになり得る。レッスンの複数個所で使用される複雑なグラフィックスを一度１つのユニットに入れておくと、その後必要個所で参照される。シミュレーションは、ユニットの中に個々の機能部分を持つことができる。
【０３０４】
個々のユニットは、アルファベット文字で始まる最大８文字の固有な名前を持たなければならない。句読点、特殊記号およびシステムに予約された２つの名前ｘとｑは使えない。
【０３０５】
ユニットの参照
同じレッスンにおいて１つのユニットを参照したい場合、該当ユニット名を単に記述する。
ｄｏ  ｃｌｏｃｋ  ＄＄ユニット・クロックを呼び出してタイミングを開始
【０３０６】
実行中以外のレッスンのユニットをアクセスしたい場合、レッスンとユニットの両方の名前を指示しなければならない。
ｄｏ  ｍａｐｓ，ｉｌｌｉｎｏｉｓ  ＄＄イリノイ州の地図を表示
【０３０７】
最後に、ユニットまたはレッスンを明示的に記述するのでなく、変数に計算された名前を参照したほうがよい場合がある。これは、明示的な名前が通常現れる場所に変数を埋め込むことによって実現する。埋め込み作業として変数を≪≫で囲む。たとえば、あるプロジェクトのすべてのレッスン名とユニット名が８バイト配列のレッスンとユニットに入っているとすれば、必要なユニットを指示するための索引を設定することによって任意のユニットをアクセスできる。
ｄｏ  <<ｌｅｓｓｏｎｓ（ｉ）>>，<<ｕｎｉｔｓ（ｊ）>>
【０３０８】
総称ユニット名
現レッスンのメイン・ユニット、または、システムへ戻るための総称分岐先を提供するためにシステム・キーワード名が存在する。たとえば、ユニット名に＝ｎｅｘｔや＝ｂａｃｋを使用して現レッスンの中の次または前のメイン・ユニットへジャンプできる。＝ｅｘｉｔを使用すると、現レッスンを終了してＤＯＳ、エディター、または、システム・アクティビティー・マネージャーへ戻れる。９つの総称ユニット名を説明するリストと使用例をｊｕｍｐの記述に示す。
【０３０９】
ユニット用語
ユニットは、その使用方法に依存して実行中に多数の役割を果たせる。ユニットは、ユーザーが経験する主要表示と相互作用、つまり、レッスンの「ページ」に対応することもあれば、主要ユニットの１つに呼び出されてサブタスクを実行するサブルーチンにすぎない場合もある。各種機能ユニットの記述には以下の用語が使用される。
【０３１０】
メイン・ユニット
メイン・ユニットとは、レッスンにおいて最初に実行されるユニットおよびｊｕｍｐ分岐先の他のユニットをいう。このユニットはレッスンにおける１「ページ」または１ユーザー状況に対応する。すべてのユーザー相互作用はメイン・ユニットから始まる。実行中にメイン・ユニットの終わりに達すると、システムはキーの押下、または、他の相互作用を待ってユーザーを次のメイン・ユニットへ分岐させる。新規メイン・ユニットへ分岐にすると、通常、以下が行われる。
●画面の消去
●すべてのプロット・パラメーターの再初期化
●レッスンのデフォルト分岐点へのリセット
●すべてのポインター・エリアのクリアー
●レッスンにおける新規メイン参照位置の確立
【０３１１】
現ユニット
ｃｕｒｒｅｎｔユニットとは現在実行中のユニットをいう。現ユニットはメイン・ユニット、または、メイン・ユニットからｄｏやｆｌｏｗコマンドによって呼び出されるサブルーチンである。
【０３１２】
終了ユニット
ｄｏｎｅまたは被呼び出しユニットは、サブルーチンとして実行されるユニットの指示に使用される。ｄｏｎｅユニットの終わりに達すると、起動したユニットの呼び出しコマンドの次のコマンド、または、ｆｌｏｗ分岐を発生させた場所の待ち状態へコントロールが戻る。
【０３１３】
ベース・ユニット
ｂａｓｅユニットとは、ｂａｓｅキーワードで変更された分岐が発生したときのメイン・ユニットである。このユニットを使用すると、呼び出し元メイン・ユニットへ自動的に戻れる共通ヘルプ・シーケンスをセットアップできる。ベース・ユニットへのリターンは、総称名＝ｂａｓｅを使用した分岐を行うと発生する。
【０３１４】
スタートアップ・ユニット
ｓｔａｒｔｕｐユニットとは、レッスンの初めにＤＯＳまたはシステム・アクティビティー・マネージャーのようなルーターから実行されるユニットである。このユニットは、通常、レッスン・ファイルの最初の物理ユニットで、ＤＯＳから直接ユニットへ入る場合はｓｔａｒｔｕｐコマンドを含んでいなければならない。
【０３１５】
リスタート・ユニット
ｒｅｓｔａｒｔユニットは、学習セッションにおいて割り込みからの戻りが発生するレッスンの流れに入れる。通常、ユニットの中にｒｅｓｔａｒｔコマンドがある。割り込み後生徒を改めて位置付ける表示を持つ必要がある。生徒がサインオンしたときに「ｃｏｎｔｉｎｕｅ  ｌａｓｔ  ｌｅｓｓｏｎ（前のレッスンを継続する）」オプションを選択した場合、システム・アクティビティー・マネージャーがこれらのユニットの１つにユーザーを分岐させる。
【０３１６】
コントロール・ブロック
コントロール・ブロックは、レッスンの開始や終了あるいはメイン・ユニット間の移動など、主要イベントのコントロールを拡張する手段を提供する。レッスンのコントロール・ブロックにおけるコーディングは、特定のスタート、終了、関連メイン・ユニットに関係なく、これらの主要イベントにおいて自動的に実行される。したがって、必要な初期化や一掃を確実に実行できる便利性がある。コントロール・ブロックは、ブロック・ディレクトリ・ページのエディターに作成される。以下以外のコントロール・ブロックはＵｐｄａｔｅの章に説明されている。
【０３１７】
＋ｉｎｉｔｉａｌ
＋ｉｎｉｔｉａｌコントロール・ブロックのコードは、ｊｕｍｐを使って外部からレッスンへ分岐すると実行される。ＤＯＳからレッスンをスタートする、エディターからレッスンを実行する、他のレッスンやアクティビティー・マネージャーから現レッスンへジャンプする場合がその例である。このブロックを使用すると、レッスンへのエントリーが発生する場所に関係なくフォントのロード、プロット条件の設定、データ保守の初期化などを実現できる。
【０３１８】
＋ｍａｉｎ
＋ｍａｉｎコントロール・ブロックは、新規メイン・ユニットに移行すると実行される。このブロックは、レッスンに含まれるすべてのメイン・ユニットを開始するための共通オペレーションの実行に使用される。たとえば、レッスン全体のバックグランド画像およびフロー・バーの表示、リスタート情報の保存、現在のメイン・ユニット名などのレッスン編集作業中におけるデバッグ情報の表示に使用できる。
【０３１９】
＋ｅｘｉｔ
＋ｅｘｉｔコントロール・ブロックは、コントロールが現レッスンから移動するときに実行される。別なレッスンへのｊｕｍｐ時、終了してＤＯＳへ移行するとき、実行中のレッスンをスタートした呼び出し元プログラムへ移行するときなどがその例である。このコントロール・ブロックを使用すると、レッスン終了時の集約情報の収集、レッスンに使用するためにスイッチを入れたデバイスの電源の切断などを行える。
【０３２０】
＋ｅｄｉｔｏｒ
＋ｅｄｉｔｏｒコントロール・ブロックはファイルの編集を行うと実行される。このコントロール・ブロックはテキスト編集用フォントのロードなどに使用できる。
【０３２１】
画面解像度
オリジナルＣＧＡ、ＥＧＡアダプターからＭＣＧＡ、ＶＧＡ、強化ＶＧＡアダプターにいたる広範囲のＰＣ表示ハードウェアがサポートされている。これらのすべての表示装置は、グラフィックスとテキストの画面解像度およびカラー機能の増大集合体を含んでいる。ＴｅｎＣＯＲＥコースウェアは、通常、コースウェアの実行時マシンの目標ポピュレーションにおいてサポートされる特定画面解像度とカラー範囲を使用して作成され、最小公分母が一般に使用される。ｓｃｒｅｅｎコマンドはこれらのパラメーターを選択する。通常、レッスンの＋ｉｎｉｔｉａｌコントロール・ブロックの中にコマンドが配置される。
【０３２２】
グラフィックス座標
特定の画面ピクセルは、画面の左下隅の座標値を０、０とするｘ、ｙグラフィックス座標を使って指定される。
ｄｏｔ  １００，２００  ＄＄  ピクセルをｘ＝１００，ｙ＝２００の座標に書
く
ａｔ    ３２０，２４０  ＄＄  ｖｇａ画面の中心
ｃｉｒｃｌｅ，  ７５，ｆｉｌｌ  ＄＄  半径７５の塗りつぶし円を描画
【０３２３】
ほとんどの表示コマンドは、オペレーションの一部としてｚｘ、ｚｙシステム変数を更新することによって画面の現在位置を定義する。
【０３２４】
文字座標
テキストの指定は、行数と文字位置を指示する文字座標を使ってより簡単に行える。行数と文字位置は、グラフィックス座標と区別するためにコロンで区切られる。
ａｔ  ５：１５  ＄＄  行５、文字位置１５
ｗｒｉｔｅ  Ｔｅｘｔ  ｏｎ  ｌｉｎｅ  ５．．．
【０３２５】
デフォルト
グラフィックス・コマンド、テキスト・コマンドは、前景色、背景色、プロット・モード、テキスト・サイズ、影付けなど多数の属性の現在設定値を使って表示を行う。これらの属性は使用直前に設定できる。
ｃｏｌｏｒ    ｙｅｌｌｏｗ      ＄＄  以下黄色を使用
ｍｏｄｅ      ｗｒｉｔｅ      ＄＄  重ね打ちプロット・モード
ｔｅｘｔ      ｓｈａｄｏｗ；ｏｎ    ＄＄  テキストの影付け
ｔｅｘｔ      ｓｉｚｅ；２                ＄＄  フォント・サイズ２
ａｔ          ５：１０                    ＄＄  行５、文字位置１
ｗｒｉｔｅ  Ａ  ｃｒｏｓｓ  ｓｅｃｔｉｏｎ  ｏｆ  ｔｈｅ  ｓｕｎ 
【０３２６】
属性にはデフォルト値がある。デフォルト値は、レッスンの開始時ｉｎｉｔｉａｌまたはｓｃｒｅｅｎコマンドを実行するときにシステムによって設定される。たとえば、システムのデフォルト前景色は白、デフォルト・テキスト・サイズは１である。属性は各メイン・ユニットをスタートすると自動的にデフォルト値に戻るほか、ｓｔａｔｕｓ  ｒｅｓｔｏｒｅ；ｄｅｆａｕｌステートメントを使うことによって、すべての属性をまとめていつでもデフォルト値に強制的に戻せる。上に示すコード例を実行したあと新規メイン・ユニットへジャンプすると、サイズ１のテキストと白が再び有効になる。表示属性とそれらの標準デフォルト値のリストについては、ｉｎｉｔｉａｌコマンドを参照のこと。
【０３２７】
レッスンに含まれるすべてのユニットを開始するときに属性値をデフォルト値に設定すると、簡単にレッスンに共通性を与えることができる。したがって、デフォルト値に設定後レッスン全体に使用するフォントをゴシックに変更する場合、フォントのデフォルト値を簡単に変更してレッスン全体に適用できる。ｓｔａｔｕｓ  ｓａｖｅ；ｄｅｆａｕｌｔステートメントを使うと、属性のデフォルト値を現在値に戻すことができる。
ｃｏｌｏｒ    ｙｅｌｌｏｗ
ｔｅｘｔ            ｓｐａｃｉｎｇ；ｖａｒｉａｂｌｅ
ｔｅｘｔ    ｓｈａｄｏｗ，ｏｎ
ｔｅｘｔ    ｍａｒｇｉｎ；  ｗｏｒｄｗｒａｐ
ｓｔａｔｕｓ    ｓａｖｅ；ｄｅｆａｕｌｔ  ＄＄  以上がレッスンの現              在属性値
【０３２８】
レッスンのデフォルト値は、通常、レッスンの＋ｉｎｉｔｉａｌコントロール・ブロックに設定する。
【０３２９】
変数
オーサー定義変数
ＴｅｎＣＯＲＥはローカル変数とグローバル変数の両方をサポートする。
【０３３０】
ローカル変数は、特定ユニットに定義してそのユニットだけで使用できる。ユニットの最後に達するか新規メイン・ユニットへ分岐することによってユニットを終了すると、ローカル変数の値が消失する。
【０３３１】
グローバル変数は、変数が定義されているレッスン全体で使用でき、変数の値がプログラム全体に対して保持される。ＴｅｎＣＯＲＥアクティビティー・マネージャーやそれに類似するプログラムで補助すると、すべてのＴｅｎＣＯＲＥセッションに対してグローバル変数の値を保持することさえ可能である。
【０３３２】
ローカル変数
ローカル変数は、ソース・ユニットの中でｄｅｆｉｎｅ  ｌｏｃａｌステートメントとｄｅｆｉｎｅ  ｅｎｄステートメント間に定義して作成される。
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｈｅｉｇｈｔ，２    ＄＄  ２バイトの整数型変数で高さを定義
ｌｅｎｇｔｈ，４，ｒ    ＄＄  ４バイトの実数型変数で長さを定義
ｄｅｆｉｎｅ    ｅｎｄ
【０３３３】
この方法で定義した変数は変数が定義されているユニットだけにわかり、任意のコマンドを使ってユニットを終了して新規メイン・ユニットへ移行すると、変数に割り当てた値が消失する。
【０３３４】
ローカル変数は、ループ索引のような、通常、現在ユニット以外で必要にならない一時的な情報に使用される。
【０３３５】
グローバル変数
ｄｅｉｎｅｓと呼ばれる特殊ブロックは、通常、グローバル変数定義の保持に使用される。ｄｅｉｎｅｓブロックの中で以下の形式を持つ行を挿入して、変数が定義される。
ｎａｍｅ，ｓｉｚｅ［，ｔｙｐｅ］
例：
ｄｅｆｉｎｅｓ
ｈｅｉｇｈｔ，２      ＄＄  ２バイトの整数型変数で高さを定義
ｌｅｎｇｔｈ，４，ｒ    ＄＄  ４バイトの実数型変数で長さを定義
【０３３６】
ｄｅｆｉｎｅｓブロック内に定義される変数は、グローバル変数である。これらの変数はファイルの中にあるすべてのユニットで使用でき、通常、プログラム内のユーザーの名前やステータスなど、複数個所で必要な情報を記憶するのに使用される。
【０３３７】
すべてのレッスンのグローバル変数は、グローバル変数の記憶に予約された１つのメモリー領域の初めから記憶される。そのため、プログラムが複数ファイルへ分かれる場合、すべてのソース・ファイルが同じ定義を使用し、この領域の使用を調整することが重要である。詳細は、「変数の物理的割り当て」の章に説明されている。
【０３３８】
グローバル変数のローカル定義
グローバル変数は、ローカル変数と同じようにｄｅｆｉｎｅ  ｇｌｏｂａｌステートメントとｄｅｆｉｎｅ  ｅｎｄステートメント間に定義できる。
ｄｅｆｉｎｅ      ｇｌｏｂａｌ
ｈｅｉｇｈｔ，２
ｌｅｎｇｔｈ，４，ｒ
ｄｅｆｉｎｅ      ｅｎｄ
【０３３９】
ｄｅｆｉｎｅ  ｇｌｏｂａｌとｄｅｆｉｎｅ  ｅｎｄ間に定義された変数はグローバル変数記憶領域を使用するが、それらの変数は定義されているユニットにしかわからない。
【０３４０】
ｄｅｆｉｎｅ  ｇｌｏｂａｌコマンドは、切り離されたテスト・ユニットや特殊な目的を持つ少数のユーティリティーにのみ使用すべきである。グローバル変数にスペースが割り当てられる方法を理解しないでｄｅｆｉｎｅ  ｇｌｏｂａｌコマンドを使用すると、矛盾する変数定義やプログラムの動作が予測できなくなる原因になりかねない。詳細については、「変数の物理的割り当て」の章を参照のこと。
【０３４１】
変数名の優先順序
ローカル変数には、既存グローバル変数と同じ名前を付けることができる。この場合、ローカル変数が同名のグローバル変数より優先される。
グローバル（ｄｅｆｉｎｅｓブロック）
ｕｓｅｒ，２０
ｓｃｒｅｅｎ，５
ｄｅｆｉｎｅ      ｌｏｃａｌ
ｕｓｅｒ，４，ｒ
ｄｅｆｉｎｅ      ｅｎｄ
【０３４２】
ここの「ユーザー」はグローバル変数とローカル変数の両方として定義されている。ユニットｓｃｒｅｅｎ，５の中では、グローバル変数「ｕｓｅｒ」をアクセスできない。したがって、「ｕｓｅｒ」がユニットｓｃｒｅｅｎ５に現れると、常にローカル変数が参照される。
【０３４３】
変数名
変数名は、１から８文字で指定する。変数名には以下を使用できる。
●アルファベット文字（A、Oなど拡張文字に含まれるアルファベット文字を含む）
●数字
●ピリオド（．）、下線（＿）、キャレット（^）、チルド（〜）
●拡張ＡＳＣＩＩ文字
【０３４４】
変数名の最初の文字に数字やピリオドを使用できない。有効な変数名の例を以下に示す。
ｕｓｅｒｎａｍｅ
Ｌｅｓｓｏｎ
ｘＬＯＣＡＴ
ｘ．ｌｏｃ
ｌａｓｔ＿ｘ
■ｌｉｓｔ
ｒｏｏｔ
【０３４５】
無効な変数名の例を以下に示す。
２ｓｔｕｄｅｎｔ          数字で始まってはならない。
ｕｓｅｒａｄｄｒｅｓｓ    名前が８文字を超えている。
ｕｎｉｔ’ｎ              句読文字は使用できない。
【０３４６】
大文字と小文字の区別が必要である。変数”ａ”と変数”Ａ”は異なり、変数”ａｌｐｈａ”は変数”Ａｌｐｈａ”や”ＡＬＰＨＡ”とは異なる。
【０３４７】
変数定義要素の前後のスペーシングは特に重要ではない。変数の定義に以下のどちらかの方法を使用するオーサーが多い。
ｄｅｆｉｎｅ      ｌｏｃａｌ
ｗｉｄｔｈ，２
ｈｅｉｇｈｔ，２
ａｒｅａ，２
ｌｅｎｇｔｈ，２
ｍａｓｓ，４，ｒ
ｄｅｆｉｎｅ      ｅｎｄ
【０３４８】
上に示すスタイルでは、各変数の長さと種類が変数名の直後に指定される。よく使用されるもう１つのスタイルを以下に示す。
ｄｅｆｉｎｅ        ｌｏｃａｌ
ｗｉｄｔｈ  ，２
ｈｅｉｇｈｔ  ，２
ａｒｅａ  ，２
ｌｅｎｇｔｈ  ，２
ｍａｓｓ  ，４，ｒ
ｄｅｆｉｎｅ        ｅｎｄ
上に示すスタイルでは、すべての定義の長さを表形式に揃えている。
２つのスタイルは機能的には同じである。
【０３４９】
変数の種類
３種類の変数はすべてグローバルまたはローカルに定義できる。ＴｅｎＣＯＲＥの変数の種類は「固定的ではない」ので、ある種類の変数として定義されたものでも、基本的には他の種類の変数を対象としたオペレーションで使用できる。
【０３５０】
整数型変数
整数型変数は正と負の整数値を記憶する。整数型変数は以下のように定義される。
ａ，１
ｘ，２
ｌｉｎｅ，３
ｔｅｍｐ，４
ｔｏｔａｌ，８
【０３５１】
ここでの標準形式はｎａｍｅ，ｓｉｚｅである。整数型変数のサイズには１，２，３，４，８バイトを使用できる。サイズは変数が記憶できる値の範囲を決定する。
【表１】
2009009584.tif 000003
【０３５２】
整数型変数は、その範囲内に含まれるすべての値に対して意味を持つ。加減算や整数値と整数の乗算からは丸め誤差は発生しない。ただし、実数を整数型変数に割り当てた場合や整数除算を行うと丸め処理が実行される。
【０３５３】
整数型変数は、以下のように省略可能な種類変更子ｉｎｔｅｇｅｒをオプションとしてとる。
ａｓｉ：
ｘ，２，ｉ
ｌｉｎｅ，３，ｉｎｔｅｇｅｒ
【０３５４】
ＴｅｎＣＯＲＥは、整数値を自然な順序（上位バイトから下位バイト）で記憶する。（多数のＭＳ−ＤＯＳプログラムは、下位バイトから上位バイトの順に整数値を記憶する。）
【０３５５】
実数型変数
整数以外の数値を記憶するために、ＴｅｎＣＯＲＥでは以下に定義する実数型変数が提供されている。
ｆｏｒｃｅ，８，ｒｅａｌ
ａｒｅａ，４，ｒ
【０３５６】
ここでの標準形式はｎａｍｅ，ｓｉｚｅ，ｒｅａｌである。実数型変数の長さには４バイトまたは８バイトを使用でき、変数を定義するとサイズ指定の次にタグｒｅａｌまたはｒを略記しなければならない。
【０３５７】
実数型変数のサイズは、変数が記憶できる値の範囲と値を記憶するための（有効数字で測定された）精度を決定する。
【表２】
2009009584.tif 000004
【０３５８】
記憶スペースに余裕がある場合は８バイトの実数型変数を使用すべきである。４バイトの実数型変数を使用しなければならない場合は、他の４バイトの実数型変数とのみ比較すべきである。ｉｆ  ｌｅｎｇｔｈ＝１．１形式の比較は、４バイト実数型変数の精度上の限界により予測しない結果になることがある。
【０３５９】
実数型変数はＩＥＥＥ形式で記憶される。下位から上位方向に記憶される  プログラムとは異なり、バイトは整数型変数と同じように自然な順序（上位バイトから下位バイト）で記憶される。
【０３６０】
サイズと種類が宣言されていない変数は、４バイトの実数型変数として作成される。
【０３６１】
非数字バッファ変数
テキストや他の情報を保持するために、非数字変数は１〜３２７６７バイト範囲内の任意のサイズを使用して定義できる（ただし、変数のスペースが十分あることを前提とする）。以下に例を示す。
ｕｓｅｒｎａｍｅ，２０
ｕｎｉｔｎａｍｅ，８
ｉｔａｌｉｃｓ，２０５２
【０３６２】
一般形式はｎａｍｅ，ｓｉｚｅである。非数字変数はテキストの記憶にいちばんよく使用されるが、バッファを必要とする他の任意情報の記憶にも使用できる。
【０３６３】
長さが１、２、３、４または８バイトの非数字変数定義と、同じサイズの整数型変数定義の間に相違はない。変数が整数を保持するか非数字データを保持するかは、変数が使用されているコンテキストからしかわからない。
【０３６４】
ＴｅｎＣＯＲＥコマンド構文では、非数字変数は「バッファ」と呼ばれる。
【０３６５】
配列
前述したすべての変数の種類はそれぞれの変数が１つの値しか保持しないスカラー変数であるが、ＴｅｎＣＯＲＥは配列変数もサポートする。配列とは同じサイズと同じ種類の一連の変数である。すべての変数には同じ名前が使用されるため、索引を使って配列内の個々の要素を指定する。配列索引とはカッコで囲んだ数字にすぎず、配列名の直後に現れる。
ａｖｅｒａｇｅ（１００），４，ｒｅａｌ  ＄＄４バイト実数１００個の配列
ｃｏｕｎｔ（５），２，ｉ    ＄＄２バイト整数５個の配列
ｂｉｇｎｕｍ（２０），８    ＄＄８バイト整数２０個の配列
ｔａｂｌｅ（１０），２５６    ＄＄２５６バイト非数字変数１０個の配列
【０３６６】
配列変数定義はスカラー変数と同じように見えるが、配列が保持しなければならない要素の数（値）を指定する数字をカッコに入れて変数名のあとに記述する違いがある。配列を定義する一般形式を以下に示す。
ｎａｍｅ（ｅｌｅｍｅｎｔｓ），ｓｉｚｅ，ｔｙｐｅ
【０３６７】
配列はＴｅｎＣＯＲＥコードで以下のように参照することができる。
ｃａｌｃ      ｃｏｕｎｔ（３）(１０
ｄａｔａｉｎ      １，ｔａｂｌｅ（ｉｎｄｅｘ），１
【０３６８】
ブラケットはカッコと同じ意味を持ち、ブラケットを使用して以下のように表記することもできる。
ｃａｌｃ        ｃｏｕｎｔ［３］＜＝１０
ｄａｔａｉｎ        １，ｔａｂｌｅ（ｉｎｄｅｘ），１
【０３６９】
ＴｅｎＣＯＲＥは１次元の配列しかサポートしない。２次元以上の配列は関数を使ってエミュレートできる。
【０３７０】
システム定義変数
ＴｅｎＣＯＲＥは、プログラムの現在の状態に関する情報を記憶するための多数のシステム定義変数を提供する。システム定義変数（一般にシステム変数に短縮される）とは、数字または他の変数情報の表現としてＴｅｎＣＯＲＥが認識する名前にすぎない。
【０３７１】
システム変数は、頻繁に必要な情報、または、オーサーがオーサー定義変数に維持するのに時間がかかるまたは維持できない情報を提供する。
【０３７２】
たとえば、システム変数ｚｔｒｉｅｓを使用すると、現在アクティブな矢印構造へユーザーが応答を入力した回数を参照できる。
ｉｆ    ｚｔｒｉｅｓ  ＞３
．      ｗｒｉｔｅ  Ｔｈｅｃｏｒｒｅｃｔａｎｓｗｅｒ  ｉｓ：ｇｒｅｅｎｅｎｄｉｆ
【０３７３】
この例は、ユーザーが回答試行をすでに３回以上行ったかどうかの質問に対して正しい応答を表示する。
【０３７４】
すべてのシステム変数は、「ｚ」の文字で始めて認識しやすくする。したがって、適正なプログラミング・スタイルを実現するためにも「ｚ」で始まるオーサー定義変数名を使用すべきでない。システム変数と同名のオーサー定義変数を作成することは可能である。この場合、オーサー定義変数が優先され、システム定義変数の値は使用できなくなる。
【０３７５】
他のシステム変数の例を以下に示す。
●ｚｒｅｔｕｒｎは、多数のコマンドによって設定されてコマンドの成功または障害を指示する。負のｚｒｅｔｕｒｎ値は成功を指示する。一方、負以外の各種数値はそれぞれのコマンド障害の理由を示す。ｚｒｅｔｕｒｎはｃｏｍｍａｎｄ  ｓｔａｔｕｓを反映する１バイトの整数である。
●ｚｃｏｌｏｒは、現在使用している前景のプロット色を表す値に設定される。これはｄｉｓｐｌａｙ  ｃｏｎｔｒｏｌに関連する２バイトの整数である。
●ｚｍａｉｎｕは現メイン・ユニットの名前を含んでいる。これは分岐に関連する８バイト変数である。
【０３７６】
値を直接システム変数に割り当てることはできない。ただし、システム変数によっては、対応するコマンドの影響を受けるものがある。たとえば、ｚｃｏｌｏｒは現在選択されている前景色を指示するので、ｃｏｌｏｒコマンドの影響を受ける。ｃｏｌｏｒ  ｗｈｉｔｅ＋を実行すると、明るい白に相当する値１５にｚｃｏｌｏｒが設定される。
【０３７７】
システム変数を種類別に整理した総合リストを以下に示す。また、多数のコマンドの説明では、コマンドの影響を受けるシステム変数を参照するよう指示されている。
【０３７８】
システム変数
ｚａｒｅａｃｎｔ  ２（整数）現在定義されているエリア数。
ｚａｒｅａｈｌ        ２（整数）現在強調表示されているエリアのＩＤ。（強調
表示されているエリアがない場合は０）
ｚａｒｇｓ    １（整数）−ｒｅｃｅｉｖｅ−ｏｒまたは−ｄｏの返却引
数リストが実際に受け取る非ヌル引数の数。
ｚａｒｇｓｉｎ        １（整数）−ｄｏ，ｊｕｍｐ−，または、−ｊｕｍｐｏ
ｐによって送られた引数の数。
ｚａｒｇｓｏｕｔ      １（整数）返却されると起動側ユニットが予測する引数  
の数。
ｚａｓｐｅｃｔｘ      ２（整数）ｘ比訂正係数
ｚａｓｐｅｃｔｙ      ２（整数）ｙ比訂正係数
ｚａｕｔｈｓｙｓ      １（整数）ＴｅｎＣＯＲＥエクゼキュターの種類を示す。
−１＝ＬＡＳ  オーサー・エクゼキュター（ＴＣＡＵＴ
ＨＯＲ．ＥＸＥ）
０＝生徒エクゼキュター（ＴＣＲＵＮ．ＥＸＥ）
１＝プロデューサー・エクゼキュター（ＴＰＲ．ＥＸＥ）
ｚｂｉｎａｒｙ        １（整数）「ｚｌｅｓｓｏｎ」ロード元ファイルの種類。  
−１＝バイナリー；０＝ＬＡＳソース；１＝プロデュー
サー・ソース
ｚｃｈａｒｂ      ２（整数）標準サイズ１フォント・ベースラインのオフ
セット。
ｚｃｈａｒｈ          ２（整数）ドット数で表わした、標準フォントまたは文
字セットの高さ。
ｚｃｈａｒｗ          ２（整数）ドット数で表わした、標準フォントまたは文
字セットの幅。注：すべてのテキスト・ポジショニング
は、現在フォントではなく標準フォント（ｚｃｈａｒｗ，
ｚｃｈａｒｈ，ｚｃｈａｒｂ）をベースとする。
ｚｃｌｉｐｘ１        ２（整数）クリッピング・エリア左下隅のＸ座標
ｚｃｌｉｐｘ２        ２（整数）クリッピング・エリア右上隅のＸ座標
ｚｃｌｉｐｙ１        ２（整数）クリッピング・エリア左下隅のＹ座標
ｚｃｌｉｐｙ２        ２（整数）クリッピング・エリア右上隅のＹ座標
ｚｃｌｏｃｋ          ４（整数）システム・クロックの値。精度：５５ｍｓ
ｚｃｏｌｏｒ          ２（整数）−ｃｏｌｏｒで設定された前景色
ｚｃｏｌｏｒｅ        ２（整数）−ｃｏｌｏｒｅで設定された消去色
ｚｃｏｌｏｒｇ        ２（整数）−ｃｏｌｏｒｇで設定された背景色
ｚｄｄｉｓｋ          １（整数）ＤＯＳデフォルト・ドライブ：１＝Ａ：，  ２
＝Ｂ：，  ３＝Ｃ：
ｚｄｉｓｋ            １（整数）データ・ファイルを検索する方法。「ｚｅｄｉ
ｓｋ」と同じ値。
ｚｄｉｓｋｓ          ４（ビット）ＴｅｎＣＯＲＥがアクセスできるドライブ
のビットマップ。ＳＥＴ  ＣＤＩＳＫＳ＝によってＤＯ
Ｓに設定される。
ｚｄｉｓｐｌａｙ      １（整数）現在アクティブな表示装置番号（デュアル画
面ドライバーのみ）
ｚｄｉｓｐｘ          ２（整数）現ウィンドウのＸ方向のサイズ
ｚｄｉｓｐｙ          ２（整数）現ウィンドウのＹ方向のサイズ
ｚｄｏｌｅｖｅｌ      ２（整数）種類がｄｏのコマンド・スタックの現在レベ
ル（ｄｏ，ｌｉｂｒａｒｙ，ｆｌｏｗ  ｄｏ，ｆｌｏｗ  ｌ
ｉｂｒａｒｙ）
ｚｄｏｍｃｎｔ        ２（整数）既存ドメイン数
ｚｄｏｍｎａｍｅ      ８（アルファベット）現ドメインの名前
ｚｄｏｍｐａｒ        ８（アルファベット）親ドメインの名前
ｚｄｏｓｅｒｒ        １（整数）ＤＯＳディスク・エラー・コード。「ｚｒｅｔ
ｕｒｎ」＝０の場合にだけ設定されてディスク・エラー
を指示する。
０  ディスクがライト・プロテクトされている。
２  ドライブの準備ができていない（ドアが閉まって
いないかドライブに障害がある）
４  ＣＲＣエラー（データにエラーがあることが検出
された）
６  シーク・エラー（ドライブまたはディスケットに
障害がある）
７  不明なメディアの種類（ディスケットが認識され
ない）
８  セクターが見つからない（ドライブまたはディス
ケットに障害がある）
１２  一般的な障害（ドライブまたはディスケットに障
害がある）
ｚｄｏｓｖｅｒ        ４（アルファベット）  「Ｘ．ＸＸ」形式のＤＯＳバー
ジョン数
ｚｅｄｉｓｋ          １（整数）ソース／バイナリー・ファイルを検索する方
法
−１＝すべてのドライブを検索；０＝「ｚｄｄｉｓｋ」  
だけを検索
−２＝システムの擬似ドライブだけを検索
１，２，３，．．．＝ドライブＡ：，Ｂ：，Ｃ：だけを検
索
ｚｅｄｏｓｅｒｒ      ８（整数）「ｚｒｅｔｕｒｎ」＝０時に設定されるＤＯＳ
拡張エラー・コード。ＤＯＳ３．０またはそれ以上で作
動している場合にしか有効でない。フォーマットを以下
に示す。
２バイト・エラー・コード  
１バイト・エラー・クラス
１バイト・アクション
１バイト・ローカス
残り３バイトは予約されている。
ｚｅｎａｂｌｅ        ４（ビット）−ｅｎａｂｌｅ−フラッグ
この変数は１から３２までのビットのセットである。特
定のビットは−ｅｎａｂｌｅ−コマンドに以下のように
対応する。
１  アブソリュートのエネーブル  ９  （予約）
２  ポインターのエネーブル  １０  （予約）
３  モードのエネーブル    １１  （予約）
４  カーソルのエネーブル    １２  ブレークの
エネー  ブル
５  ｐｔｒｕｐのエネーブル  １３  矢印のエネ
ーブル
６  フォントのエネーブル    １４  （予約）
７  エリアのエネーブル    １５  フィルブレ
ークのエネーブル
８  （予約）      （ビット１４−３２
は予約）
ビット（）関数を使用して「ｚｅｎａｂｌｅ」をテスト
すること。たとえば、ｂｉｔ（ｚｅｎａｂｌｅ，２）は、
ポインターがエネーブルされている場合−１、エネーブ
ルされていない場合は０。
ｚｅｎｖｌｅｎ    ４（整数）  バイトで表わしたＤＯＳ環境バッファの長
さ
ｚｅｎｖｌｏｃ    ４（整数）  ＤＯＳ環境バッファのメモリーの絶対位置
ｚｅｒｒｃｏｄｅ    ２（整数）  「ｚｅｄｏｓｅｒｒ」からの「エラー・コ
ード」値
ｚｅｒｒｌｅｖｌ    ２（整数）  最後の  ｅｘｅｃ  ｆｉｌｅ；−ｃｏｍｍ
ａｎｄから返るＤＯＳ変数「ｅｒｒｏｒｌｅｖｅｌ」
ｚｅｒｒｏｒｌ    ８（アルファベット）実行エラー発生時に実行するユニ
ットのレッスン名。−ｅｒｒｏｒによって設定される。
ｚｅｒｒｏｒｕ    ８（アルファベット）  実行エラー時に実行するユニッ
トのユニット名
ｚｅｘｉｔｂｉｎ    １（整数）  ＝ｅｘｉｔロード元ファイルの種類
−１＝バイナリー；  ０＝ソース；  １＝ｔｐｒ
ｚｅｘｉｔｌ      ８（アルファベット）−ｊｕｍｐ＝ｅｘｉｔ時の分岐先
レッスン名
ｚｅｘｉｔｕ      ８（アルファベット）−ｊｕｍｐ＝ｅｘｉｔ時の分岐先
ユニット名
ｚｆｃｒｅｃｓ    ４（整数）添付されているネームセット・タイプ・ファ
イル内の連続フリー・レコードの数
ｚｆｄｉｓｋ      １（整数）添付ファイルが常駐するディスク
１＝ドライブＡ；，２＝ドライブＢ：など
−２＝システム・パス
ｚｆｌｏｗｃｎｔ    ２（整数）現在定義されているフロー分岐の数
ｚｆｎａｍｅ      ８（アルファベット）添付ファイルの名前。添付されて
いない場合は０
ｚｆｎａｍｅｓ    ２（整数）  添付ファイルに含まれている名前の総数。                    
データセット・ファイルには意味がない。
ｚｆｏｎｔｂ      ２（整数）  現在のフォント・ベースラインのオフセッ
ト
ｚｆｏｎｔｆ      ４（ビット）フォント・グループについては、適合する
属性と合成属性を指示する。ビットは以下のように定義
される。
６＝太字属性が要求に合致
７＝斜体が要求に合致
８＝サイズ属性が要求に合致
１６＝ナロー属性が要求に合致
２２＝合成太字
２３＝合成斜体
２４＝合成サイズ
以上のうち合成可能なビットについては、属性が要求に
合致しない場合があるが、合成されない場合もある。た
とえば、フォント・グループに太字項目しかなく、現在
属性が太字以外のフォントを指定する場合、６と２２の
両方のビットがオフになる。
ｚｆｏｎｔｈ      ２（整数）  ドット数で表わした、現在アクティブなフ
ォントの高さ
ｚｆｏｎｔｒｅｔ    １（整数）  選択されたフォントが、要求されたパラメ
ーターに適合する程度を示す情報。すべての値をフォン
ト・グループに使用できる。フォントには−１，２，３
の値を使用できる。−ｆｏｎｔ，−ｔｅｘｔ−，ｓｔａ
ｔｕｓ  ｒｅｓｔｏｒｅ−によって設定される。
−２＝一部合致。ある程度合成することが必要。
−１＝完全に合致
＝一部合致。一部の合成不可属性は合致しない。
１＝不適切な合致が見つかった。ベース・フォントが有
効。
２＝ベース・フォントが使用不可。標準フォントが有効。
３＝標準フォントが使用不可。文字セットが有効。
ｚｆｏｎｔｗ      ２（整数）ドット数で表わした、現在アクティブなフォ
ントの幅
ｚｆｏｒｃｅ      ２（ビット）ｆｏｒｃｅ−フラグ
この変数は、１から１６までのビットのセットである。
特定のビットは−ｆｏｒｃｅ−コマンドに以下のように
対応する。
１  ｃｕｒｓｏｒ  ｌｏｃｋ−ｚｉｎｆｏを強制８
（整数）添付ファイルのおいて選択されている名前の対応
イト。データセット・ファイルには意味がない。
２  ｎｕｍｂｅｒ  ｌｏｃｋ−を強制
３  ｅｘｔｅｎｄｅｄ−を強制
４  ｃｈａｒｓｅｔ−を強制
（５−１６までのビットは未使用）
ｂｉｔ（）関数を使って「ｚｆｏｒｃｅ」をテストする
こと。たとえば、−ｆｏｒｃｅｃｕｒｓｏｒ  ｌｏｃｋ
−が有効であればｂｉｔ（ｚｆｏｒｃｅ，１）は−１、
有効でなければ０である。
ｚｆｒｅｃｓ      ４（整数）  添付ファイルの中のデータレコード総数
ｚｆｒｏｍｂｉｎ    １（整数）  「ｚｆｒｏｍ１」ロード元ファイルの種類
−１＝バイナリー；  ０＝ソース；  １＝ｔｐｒ
ｚｆｒｏｍｄ      １（整数）「ｚｆｒｏｍ１」ロード元ドライブ。ｚｌｄ
ｉｓｋと同じ値。
ｚｆｒｏｍ      ８（アルファベット）  −ｄｏ−，−ｌｉｂｒａｒｙ−、
または、メイン・ユニットの分岐を経由して現ユニット
を起動したユニットのレッスン名
ｚｆｒｏｍｌｉｎ    ２（整数）  現ユニットを起動した「ｚｆｒｏｍｕ」内
コマンドの行番号
ｚｆｒｏｍｕ      ８（アルファベット）  現ユニットを起動したユニット
のユニット名
ｚｆｒｅｃｓ      ４（整数）  添付ファイル内のデータレコード総数
ｚｆｔｙｐｅ      ８（アルファベット）添付ファイルの種類。添付されて
いない場合は０。ファイルの種類：ｓｏｕｒｃｅ，ｔｐ
ｒ，ｄａｔａｓｅｔ，ｎａｍｅｓｅｔ，ｂｉｎａｒｙ，
ｒｏｓｔｅｒ，ｃｏｕｒｓｅ，ｓｔｕｄａｔａ，ｇｒｏｕｐｚｆｕｎａｍｅｓ    ２（整数）  添付ファイルの中で使用している名前の数
ｚｆｕｒｅｃｓ    ４（整数）  添付ファイルの中で使用しているレコード
の数。データセット・ファイルには意味がない。
ｚｆｖｅｒ            ４（アルファベット）  添付ネームセットを「Ｘ．ＸＸ」
として作成したＴｅｎＣＯＲＥバージョン
ｚｈｃｏｌｏｒ    ２（整数）  −ｃｏｌｏｒで設定したハードウェア・カ
ラー
ｚｈｃｏｌｏｒｅ    ２（整数）  −ｃｏｌｏｒｅで設定したハードウェア消
去色
ｚｈｃｏｌｏｒｇ    ２（整数）  −ｃｏｌｏｒｇで設定したハードウェア背
景色
ｚｈｄｉｓｐｘ    ２（整数）  現在の画面タイプの物理ｘ−サイズ
ｚｉｎｆｏ      ８（整数）  添付ファイル内で選択されている名前の対
応情報バイト。データセット・ファイルには意味がない。
ｚｉｎｐｕｔ      ２（整数）  最後に処理されたキーのキープレス値
０  入力なし
１−  ２５５標準または拡張文字
＞２５５  文字以外のキープレス
「ｚｉｎｐｕｔ」は２バイトのキープレス値を含んでい
る。
「ｚｉｎｐｕｔ」に値が入っているかどうかを決定する
には、以下のフォームの１つが必要である。
ｚｉｎｐｕｔ＝％”ｃｈａｒａｃｔｅｒ”
ｚｉｎｐｕｔ＝％ａｌｔ”ｃｈａｒａｃｔｅｒ”
ｚｉｎｐｕｔ＝％ｃｔｌ”ｃｈａｒａｃｔｅｒ”  
ｚｉｎｐｕｔ＝％ａｌｔｃｔｌ”ｃｈａｒａｃｔｅｒ”
ｚｉｎｐｕｔ＝％ｋｅｙｎａｍｅ
％ａｌｔ，％ｃｔｌ、％ａｌｔｃｔｌ変更子は、標準Ａ
ＳＣＩＩ単独文字に動作する（ｈ２０−ｈ７ｆ）。％変更
子は二重引用符で囲んだ標準文字と拡張文字（ｈ２０−
ｈＯｆｆ）および指名されたキーに動作する。
ｚｉｎｐｕｔａ    ２（整数）  現ｚｉｎｐｕｔ値を発生させるエリアのエ
リアＩＤ（エリアによってｚｉｎｐｕｔが発生しない場
合は０）。ｚｉｎｐｕｔ更新時に設定される。
ｚｉｎｐｕｔａｉｎｆｏ    ８（整数）  この分岐を発生させたエリアに対す
る情報タグの値
ｚｉｎｐｕｔｆ      ４（ビット）  最後に行われた入力時のキーボードとポ
インターのステータス。
この変数は１から３２までのビットのセットである。特
定のビットは、キーボード・ステータスとポインター・
ステータスに以下のように対応する。
１  Ｉｎｓｅｒｔ  オン
２  ＣａｐｓＬｏｃｋ  オン
３  ＮｕｍＬｏｃｋ  オン
４  ＳｃｒｏｌｌＬｏｃｋ  オン
５  どちらかのＡｌｔキーが押された
６  どちらかのＣｔｒｌキーが押された
７  左Ｓｈｉｆｔキーが押された
８  右Ｓｈｉｆｔキーが押された
９  ＳｙｓＲｅｑキーが押された
１０    ＣａｐｓＬｏｃｋキーが押された
１１    ＮｕｍＬｏｃｋキーが押された
１２    ＳｃｒｏｌｌＬｏｃｋキーが押された
１３    右Ａｌｔキーが押された
１４    右Ｃｔｒｌキーが押された
１５    左Ａｌｔキーが押された
１６    左Ｃｔｒｌキーが押された
１７    拡張キーボードの「ｅｘｔｒａ」キー
１８    Ａｌｔ＋ｎｕｍｂｅｒｓからのキーである
１９    ポインター・アクションからのキーである。
２０  「ポインター・アップ」アクションからのキー
である。
２１  タッチ・デバイスからのキーである。
（２２から２９までのビットは予約）
３０  マウスの中ボタンが押された（マウスによっては、
中ボタンを押すとビット３０ではなく３１と３２
を生成する。）
３１  マウスの右ボタンが押された
３２  マウスの左ボタンが押されたｂｉｔ（）関数を使
用して「ｚｉｎｐｕｔｆ」をテスト  すること。
たとえば、「ｚｉｎｐｕｔ」での入力中にＣａｐｓ
Ｌｏｃｋをオンにした場合、ｂｉｔ（ｚｉｎｐｕ
ｔｆ，２）は１、オンにしなければ０である。
ｚｉｎｐｕｔｘ    ２（整数）  「ｚｉｎｐｕｔ」を最後に更新したときの  
ポインターのグラフィックスｘ座標
ｚｉｎｐｕｔｙ    ２（整数）  「ｚｉｎｐｕｔ」を最後に更新したときの  
ポインターのグラフィックスｙ座標
ｚｉｎｔｉｎｃｒ    ２（整数）  −ｐａｌｅｔｔｅ内Ｉ値の有効最小増分値
ｚｉｎｔｎｕｍ    １（整数）  ＴｅｎＣＯＲＥデバイス・ドライバーが使
用する割り込み番号。
ｚｋｅｙｓｅｔ    ２（整数）  最後に処理されたキーのシフト・フラグ・
バイトおよびスキャン・コード。
上位バイト＝シフト・フラグ
下位バイト＝スキャン・コード
上位バイトは、「ｚｉｎｐｕｔｆ」内の最初の８ビット
を複写する、ビット番号１から８までのセット。  
下位バイトは物理キーを識別する「ｓｃａｎ  ｃｏｄｅ」。
ｚｌｄｉｓｋ          １（整数）  現在実行中レッスンのロード元ドライブ。
１，２，３．．．＝Ａ：，Ｂ：，Ｃ：．．．；−２＝システム・
ドライブ
ｚｌｅｎｇｔｈ        ２（整数）  −ｐｕｔ後の判定バッファの長さ
ｚｌｅｓｓｏｎ        ８（アルファベット）  現在ユニットのファイル名
ｚｌｉｄｅｎｔ        ８（アルファベット）  現在のバイナリー・ファイルに
記憶されている識別子
ｚｌｉｎｅ            ２（整数）  現在の文字行
ｚｌｉｎｆｏ          ２（整数）  添付ファイル用対応情報のバイト数。デー  
タセット・ファイルには意味がない。
ｚｌｎａｍｅ          ２（整数）  文字数で表わした、最長添付ファイル名。
データセット・ファイルには意味がない。
ｚｍａｉｎｌ          ８（アルファベット）  メイン・ユニットのファイル名
ａｍａｉｎｕ      ８（アルファベット）  メイン・ユニットのユニット名
ｚｍａｒｇｉｎ        ２（整数）  テキスト左マージンのｘ座標
ｚｍａｘａｒｅａ      ２（整数）  エリア最大数。デフォルト値＝１０００
ｚｍａｘｃｏｌ        ２（整数）  現表示装置で使用可能な最大カラー数
ｚｍａｘｄｏｍ        ２（整数）  使用可能な最大ドメイン数
ｚｍａｘｆｌｏｗ      ２（整数）  定義可能な最大フロー分岐数
ｚｍａｘｐａｇｅ      ２（整数）  使用可能なハードウェア表示ページ数
ｚｍｌｅｎｇｔｈ      ４（整数）  バイト数で表した、最後に参照したメモリ
ー・ブロックのサイズ。
ウィンドウズのメモリー管理とディスク・スワップファ
イルによって、有効メモリー・プールのサイズは、通常、
標準ウィンドウ・システム上ではＴｅｎＣＯＲＥのニー
ズを満たす以上の余裕がある。ただし、メモリーが特に
少ないウィンドウズ・システムではメモリーの関連コマ
ンドが障害になる可能性があるため、ｚｒｅｔｕｒｎを
常時チェックすべきである。互換性の理由から、ｚｍｅ
ｍ，ｚｒｍｅｍ，ｚｆｍｅｍは５１２Ｋ（５２４，２８
８）以上の値を絶対に返さない。ただし、使用可能なメ
モリーが十分ある場合は、１，０４８，５６０バイト（１
６進ＦＦＦＦ０）相当のメモリー・ブロックを作成でき
る。ｚｘｍｅｍも互換性の理由からかならず０の値を返
す。
ｚｍｅｍ              ４（整数）  バイト数で表わしたメモリー・プールの現
在のサイズ
ｚｆｍｅｍ      ４（整数）  メモリー・プールに割り当て可能な最大ブ
ロック
ｚｒｍｅｍ            ４（整数）  メモリー・プールに割り当て可能な最大ブ
ロック
ｚｘｍｅｍ            ４（整数）  ０に設定すること。
ｚｍｏｄｅ      ２（整数）  現在の画面表示モード
０＝反転  ３＝ライト  ６＝追加
１＝リライト  ４＝プロットなし  ７＝サブ
２＝消去  ５＝ｘｏｒ
ｚｍｏｕｓｅ      １（整数）  マウス・ドライバーがロードされているか
どうかを指示する。
−１＝ロードされている。
０＝ロードされていない。
ｚｍｓｔａｒｔ        ４（整数）  最後に参照されたメモリー・ブロックの絶
対アドレス。最初の２バイトはセグメント、最後の２バ
イトはゼロで、ｍｅｍｌｏｃ（ａ，ｚｍｓｔａｒｔ）の
中できる標準ａｂｓｌｏｃアドレスに準拠する。
ｚｍｘｎａｍｅｓ    ４（整数）添付されたネームセット・タイプ・ファイル
の可される名前の最大数。
ｚｎａｍｅ            ８（アルファベット）添付ファイルの中で選択された名
前の最初の８文字。データセット・ファイルには意味が
ない。
ｚｎｄｉｓｋｓ        １（整数）  ＣＯＮＦＩＧ．ＳＹＳの中のＬＡＳＴＤＲ
ＩＶＥ＝によって設定され、ＤＯＳ内に定義されるドラ
イブ数
ｚｎｉｎｄｅｘ    ２（整数）添付ネームセット・タイプ・ファイル内にお
いて選択された名前のポジション
ｚｎｕｍｂｅｒ    ２（整数）−ｐｕｔを使用して実現された置換数
ｚｏｒｉｇｉｎｘ    ２（整数）−ｏｒｉｇｉｎで設定されたオリジン相対ｘ
座標
ｚｏｒｉｇｉｎｙ      ２（整数）−ｏｒｉｇｉｎで設定されたオリジン相対ｙ
座標
ｚｐａｌｉｎｃｒ    ２（整数）−ｐａｌｅｔｔｅ内のＲ，Ｇ，Ｂ値に適用さ
れる最小有効増大値
ｚｐｃｏｌｏ      ２（整数）最後に入力されたポインター位置におけるド
ットの色。テキスト・モードでは、文字の前景色
ｚｐｌｏｔｘｈ        ２（整数）上方ｘテキスト・エクステント（テキスト・
メジャーを参照)
ｚｐｌｏｔｘｌ        ２（整数）下方ｘテキスト・エクステント（テキスト・
メジャーを参照)
ｚｐｌｏｔｙｈ        ２（整数）上方ｙテキスト・エクステント（テキスト・
メジャーを参照)
ｚｐｌｏｔｙｌ        ２（整数）下方ｙテキスト・エクステント（テキスト・
メジャーを参照)
ｚｒｅｃ              ４（整数）添付ファイル内で選択された名前に対応付け
られたレコードの数。データセットの場合、「ｚｆｒｅｃ
ｓ」に等しい。
ｚｒｅｔｕｒｎ        １（整数）このシステム変数を設定するコマンドが成功
したか障害になったかを指示する。「ｚｒｅｔｕｒｎ」は、
通常、ディスクまたはＴｅｎＣＯＲＥメモリー・プール
をアクセスするコマンドによって設定される。「ｚｒｅ
ｔｕｒｎ」に設定できる値を以下に示す。
２重複オペレーション
（アクションは実行されない）
−１  オペレーションに成功
０  ディスク・エラー。「ｚｄｏｓｅｒｒ」を参照のこ
と。
１  ファイルは添付されていない
２  ブロックが範囲外
３  メモリーまたは値が範囲外
４  存在しない
５  無効なデバイスが選択された
６  名前が重複している
７  ディレクトリがフル
８  ディスク・レコードが不足している
９  有効な名前がない
１０  名前またはブロックがみつからない
１１  無効な種類
１２  名前の長さが無効
１３  情報の長さが無効
１４  ネームセット内に名前またはレコードが多すぎる
１５  ネームセット・ディレクトリが破損している
１６  無効な名前
１７  無効な画像またはデータ
１８  メモリー・プール・リクエストを処理できない
１９  コンテキスト的に無効なオペレーション                      
２０  ロックされたデータに対するｄａｔａｉｎ
２１  他のユーザーのロックとの競合
２２  １つの名前にロックが多すぎる
２３  画面座標が範囲外
２４  要求された名前またはレコード・ロックがみつか          
らない
ｚｒｍａｒｇｉｎ    ２（整数）  テキスト右マージンのｘ座標
ｚｒｏｔａｔｅ    ２（整数）  回転角度数
ｚｒｏｔａｔｅｘ    ２（整数）  回転オリジンのｘ座標
ｚｒｏｔａｔｅｙ    ２（整数）  回転オリジンのｙ座標
ｚｒｐａｇｅ      １（整数）  −ｐａｇｅによって設定された読み取りペ
ージを表示する
ｚｒｓｔａｒｔｌ    ８（アルファベット）−ｒｅｓｔａｒｔによって設定さ
れた、リスタート・ユニットのレッスン名
ｚｒｓｔａｒｔｕ    ８（アルファベット）  −ｒｅｓｔａｒｔによって設定
された、リスタート・ユニットのユニット名
ｚｓｃａｌｅｏｘ      ２（整数）  スケーリング・オリジンのｘ座標
ｚｓｃａｌｅｏｙ      ２（整数）  スケーリング・オリジンのｙ座標
ｚｓｃａｌｅｘ    ８（実数）  ｘスケーリング係数
ｚｓｃａｌｅｙ    ９（実数）  ｙスケーリング係数
ｚｓｃｒｅｅｎ    １（整数）  現在のハードウェア（ＢＩＯＳ）画面
０，１  ４０ｘ２５テキスト          ｃｇａ，テキスト、ミディアム
４，５  ３２０ｘ２００グラフ４色    ｃｇａ、グラフィックス、ミディアム
６    ６４０ｘ３００グラフ２色    ｃｇａ、グラフィックス、ハイ
７    ８０ｘ２５白黒テキスト    ｍｄａ
１３  ３２０ｘ２００グラフ１６色    ｅｇａ、グラフィックス、ロー
１４  ６４０ｘ２００グラフ１６色    ｅｇａ、グラフィックス、ミディアム
１６  ６４０ｘ３５０グラフ１６色    ｅｇａ、グラフィックス、ハイ
１７  ６４０ｘ４８０グラフ２色      ｍｃｇａ、グラフィックス、ハイ
１８  ６４０ｘ４８０グラフ１６色    ｖｇａ、グラフィックス、ミディアム
１９  ３２０ｘ２００グラフ２５６色  ｍｃｇａ、グラフィックス、ミディアム
ｚｓｃｒｅｅｎｃ  １（整数）  −ｓｃｒｅｅｎ−コマンドで選択した、画                            
面色の現在の種類。０＝カラー；  １＝白黒
ｚｓｃｒｅｅｎｈ  １（整数）  画面ハードウェア・ドライブ（＊．ＤＩＳファ
イル）。実際に検出されたハードウェアに調整さ
れる。
０  ｃｇａ      １０  ｖｇａ
２  ｈｅｒｃｕｌｅｓ        １１  ｍｃｇａ
３  ｅｇａ                      ４  ｅｖｇａ  
９  ａｔｔ
ｚｓｃｒｅｅｎｍ  １（整数）  −ｓｃｒｅｅｎ−コマンドで選択した、現在の  
画面モード。０＝グラフィックス、１＝テキス
ト
ｓｃｒｅｅｎｒ    １（整数）  −ｓｃｒｅｅｎ−コマンドで選択した、現在の
画面解像度。
０  ロー          ２  ハイ
１  ミディアム    ３  ａｌｔ１
４  ａｌｔ２      ５  ａｌｔ３
ｚｓｃｒｅｅｎｔ  １（整数）  −ｓｃｒｅｅｎ−コマンドで選択した、現在の
画面の種類。
０  ｃｇａ        ５  ｎｃｒ      １０  ｖｇａ
１  ｔｅｃｍａｒ  ６（予約）      １１  ｍｃｇａ
２  ｈｅｒｃｕｌｅｓ    ７（予約）  １２  オンライン
３  ｅｇａ        ８  ｎｏｋｉａ  １３  （予約）
４  （予約）      ９  ａｔｔ      １４  ｅｖｇａ
ｚｓｄｉｓｋｓ  ４（ビット）  ＳＥＴ  ＴＣＳＥＡＲＣＨ＝でＤＯＳに設
定した、自動検索に含めるドライブのビットマップ
ｚｓｅｒｉａｌ  ８（アルファベット）  ８文字で構成される、ＴｅｎＣＯＲ
Ｅエクゼキュターの通し番号
ｚｓｅｔｒｅｔ  １（整数）  −ｓｅｔｎａｍｅ−実行時に見つかった合致
の種類。可能性のある値を以下に示す。
Ｎ    固有な一部合致（文字数：Ｎ−１）
−１  完全な合致。名前が選択される。
０    合致なし。セレクションがクリアーされる。名前は
選択されない。
＋Ｎ  固有ではない一部合致（文字数：Ｎ）。最初に見つ
かった一部合致する名前が選択される。
ｚｓｐａｃｅ    ２（整数）  現在の文字カラム
ｚｓｙｓｖｅｒ  ４（アルファベット）  「Ｘ．ＸＸ」形式のＴｅｎＣＯ
ＲＥバージョン
ｚｔｅｌｍａｉｎ  ４（整数）  前メイン・ユニットに消費した時間
ｚｔｍｍａｉｎ  ４（整数）  メイン・ユニット開始時のシステム・クロ
ック
ｚｔｍｕｎｉｔ      ４（整数）  現ユニット開始時のシステム・クロック
ｚｕｎｃｏｖｅｒ  ２（整数）  ｕｎｃｏｖｅｒコマンドで設定した現在の
アンカバー・キー
ｚｕｎｉｔ          ８（アルファベット）  現ユニットのユニット名
ｚｖａｒｓｌ        ４（整数）  バイト数で表わした、グローバル変数のトー
タル・サイズ
ｚｗｉｄｔｈ        １（整数）  −ｗｉｄｔｈ−で設定した、グラフィックス
行の幅。描画、円、楕円、多角形、ドットに影響する。
ｚｗｉｎｄｏｗｓ  ２（整数）  開いているウィンドウ数（最初のウィンドウ
以外）
ｚｗｉｎｄｏｗｘ  ２（整数）  ウィンドウの左下隅絶対ｘ座標
ｚｗｉｎｄｏｗｙ  ２（整数）  ウィンドウの左下隅絶対ｙ座標
ｚｗｐａｇｅ        １（整数）  −ｐａｇｅで設定した書き込みページを表示
する。
ｚｘ                ２（整数）  グラフィックの横方向現在位置
ｚｘｍａｘ          ２（整数）  現在のウィンドウにおけるｘ最大座標
ｚｘｙｃｏｌｏｒ    ２（整数）  画面現在位置におけるドットの色
テキスト・モードでは文字の前景色
ｚｙ                ２（整数）  グラフィックの縦方向現在位置
ｚｙｍａｘ          ２（整数）  現在のウィンドウにおけるｙ最大座標
【０３７９】
変数内容の表示
数値型変数の表示
数値情報を含んでいる変数は、ｓｈｏｗコマンドを使って表示できる。
ａｔ        １７：２１
ｓｈｏｗ    ｚｔｒｉｅａ
【０３８０】
標準形式はｓｈｏｗ  ｖａｒｎａｍｅで、ｖａｒｎａｍｅは表示対象変数の名前を表す。
【０３８１】
整数の場合、ｓｈｏｗは最初の非ゼロ桁から最大２０桁を画面の現在位置から表示する。実数の場合、画面の現在位置から小数点と小数点以下３桁を含む最大２４桁を表示する。これは、以下のようにフィールドと右タグを追加することによって変更できる。
ｓｈｏｗ  ｒｅａｌ８，２，６
その結果、最大１２桁（小数点を含む）を表示する。たち下りゼロを含む６桁は、小数点の右に表示される。この場合、「ｒｅａｌ８」の値が１．２３４５であれば、以下のように表示される。
１．２３４５００
（↑  開始画面位置）
【０３８２】
表形式の表示
数値情報の２番目の表示形式であるｓｈｏｗｔは、変数を表示するときに右に寄せたうえフィールドにスペースを埋める。この形式は数字のカラムを揃えるのに有効である。以下に例を示す。
ｄｅｆｉｎｅ  ｌｏｃａｌ
ｖａｒ１        ，８，ｒ
ｖａｒ２        ，８，ｒ
ｖａｒ３        ，８，ｒ
ｖａｒ４        ，８，ｒ
ｄｅｆｉｎｅ    ｅｎｄ
ｓｅｔ          ｖａｒ１  (１．１，２０．０２，３００．００３，４０００．
０００４
ａｔ            ５：５
ｓｈｏｗｔ      ｖａｒ１，１２，４
ａｔ            ６：５
ｓｈｏｗｔ      ｖａｒ２，１２，４
ａｔ            ７：５
ｓｈｏｗｔ      ｖａｒ３，１２，４
ａｔ            ８：５
ｓｈｏｗｔ      ｖａｒ４，１２，４
上のコードは以下に似た出力を生成する。
１．１０００
２０．０２００
３００．００３０
４０００．０００４
【０３８３】
１６進表示
ｓｈｏｗｈコマンドは、変数のそれぞれのバイトに１６進２桁を使って変数の内容を表示する。以下に例を示す。
ｃａｌｃ      ｉｎｔ４(３２７６６
ｓｈｏｗｈ    ｉｎｔ４
は以下を表示する。
００００７ｆｆｅ
【０３８４】
オプションの長さタグが指定されていないかぎり、ｓｈｏｗｈは変数全体を表示するのに必要な桁数を表示する（たとえば、１バイトの変数には２桁、２バイトの変数には４桁）。
【０３８５】
英数字表示
通常、テキスト情報はｓｈｏｗａ（”ｓｈｏｗ  ａｌｐｈａｎｕｍｅｒｉｃ”）コマンドを使って表示される。
ｐａｃｋｚ  ｔｅｘｔｂｕｆ；；Ｇｏｏｄ  ｍｏｒｎｉｎｇ
ａｔ        ５：５
ｓｈｏｗａ  ｔｅｘｔｂｕｆ  ＄＄  Ｇｏｏｄ  ｍｏｒｎｉｎｇを表示
【０３８６】
ｓｈｏｗａコマンドは、変数の長さに対応するかオプションとして指定された長さの文字を表示する。
ｓｈｏｗａ  ｔｅｘｔｂｕｆ，６  ＄＄  ”Ｇｏｏｄ  ｍ”を表示
【０３８７】
埋め込み表示
現実にはｓｈｏｗコマンドとその変形は、通常、以下の例に示すようにｗｒｉｔｅコマンドに埋め込む。
ａｔ          ５：５
ｗｒｉｔｅ    ≪ｓｈｏｗ，ｒｅａｌｌ≫  ≪ｓ，ｒｅａｌｌ≫  ＄＄’ｓ’は
（ｓ）ｈｏｗを表す
≪ｓｈｏｗｔ，ｒｅａｌｌ≫  ≪ｔ，ｒｅａｌｌ≫  ＄＄’ｔ’は
ｓｈｏｗ（ｔ）を表す
≪ｓｈｏｗｈ，ｒｅａｌｌ≫  ≪ｈ，ｒｅａｌｌ≫  ＄＄’ｈ’は
ｓｈｏｗ（ｈ）を表す
≪ｓｈｏｗａ，ｔｅｘｔ≫  ≪ａ，ｔｅｘｔ≫  ＄＄’ａ’は
ｓｈｏｗ(ａ)を表す
なお、ｓ，ｔ，ａなどの略記文字も使用できる。
【０３８８】
≪≫は埋め込み記号と呼ばれる。左埋め込み記号は［ＡＬＴ］［＜］、右埋め込み記号は［ＡＬＴ］［＞］を押して生成する。
【０３８９】
ｗｒｉｔｅにｓｈｏｗコマンドを埋め込む一般形式を以下に示す。
≪ｃｏｍｍａｎｄ，ｅｘｐｒｅｓｓｉｏｎ≫
【０３９０】
ｃｏｍｍａｎｄはｓｈｏｗコマンドの１つかその略記である。ｅｘｐｒｅｓｓｉｏｎは、以下のように数字、変数、または、そのどちらかが関係する計算である。
ｗｒｉｔｅ  Ｔｈｅ  Ｆａｈｒｅｎｈｅｉｔ  ｔｅｍｐｅｒａｔｕｒｅ  ｉｓ≪ｓ，９＊ｃｅｌｓｉｕｓ／５＋３２≫
【０３９１】
変数への値の割り当て
値を変数に割り当てる方法は、変数の種類と、変数に記憶する情報の種類によって変わる。
【０３９２】
数値
数値型変数には、ｃａｌｃコマンドを使って値を割り当てる。
ｄｅｆｉｎｅ          ｌｏｃａｌ
ｒａｔｉｏ，４，    ｒｅａｌ
ｄｅｆｉｎｅ        ｅｎｄ
ｃａｌｃ            ｒａｔｉｏ(１／３
ｃａｌｃの一般形式を以下に示す。
ｃａｌｃ  変数(数式
変数  オーサーが定義した任意の数値型変数
(割り当て矢印（［ＡＬＴ］［Ａ］を押して生成）は値を変数へ割り
当てる演算子
数式は有効な算式と論理式またはそのどちらか
【０３９３】
上の例の場合、ＴｅｎＣＯＲＥは１の値を３で割り算して、その商を変数「ｒａｉｔｏ」に記憶する。
【０３９４】
ｃａｌｃ  コマンドは以下に示すように複数の行へ継続できる。
ｃａｌｃ  ａ(１
ｂ(２
ｃ(ｂ／３
ｄ(ｃ＋ｂ
【０３９５】
上のｃａｌｃコマンドは、各行にコマンドを繰り返すことなく４つの異なる変数に値を割り当てる。
【０３９６】
整数型変数へ実数値を割り当てると、いちばん近い整数に値が丸められる。
【０３９７】
ｃａｌｃコマンドは、有効な数値型変数（すなわち、１、２，３，４，８バイトの整数、および４と８バイトの実数）に有効で、５、６，７バイトの変数や８バイト以上の変数には無効である。
【０３９８】
ｃａｌｃに使用できる算術演算子や論理演算子一式および数値を表す代替方法については、この章に後述されている「リテラル・データの表現方法」を参照のこと。
【０３９９】
選択形式
ｃａｌｃコマンドには、ｃａｌｃｃとｃａｌｃｓの２つの選択形式がある。詳細については、それぞれのコマンドの説明を参照のこと。
【０４００】
テキスト値
ｃａｌｃコマンドは定義された長さが１、２、３、４または８バイトの変数のような数値型変数だけに有効なため、テキストを変数に割り当てることは適切ではない。
【０４０１】
テキストの割り当てには、ｐａｃｋｚコマンドを使用する。一般形式を以下に示す。
ｐａｃｋｚ  ｂｕｆｆｅｒ；［ｌｅｎｇｔｈ］；ｔｅｘｔ
ｂｕｆｆｅｒ    テキストを受け取るバッファ
ｌｅｎｇｔｈ    ｖａｒｉａｂｌｅに割り当てられた文字数を変数が受け取るた
めのオプションのフラグ（オーサーではなくｐａｃｋｚコマン
ドがｌｅｎｇｔｈを設定する）
ｔｅｘｔ        ｖａｒｉａｂｌｅへ割り当てるテキスト情報
【０４０２】
ｐａｃｋｚの「ｚ」は、テキストの記憶に使用しないバッファのすべてのバイトにゼロを埋めることを指示している。「ｇｅｒａｎｉｕｍ」がすでに入っているバッファへゼロを埋め込まないで「ｒｏｓｅ」をパックすると、「ｒｏｓｅｎｉｕｍ」になってしまう。ゼロを埋めたくない場合は、ｐａｃｋコマンドを使用すること。
ｄｅｆｉｎｅ      ｌｏｃａｌ
ｓｕｂｌｅｎ，２
ｓｕｂｊｅｃｔ，４０
ｄｅｆｉｎｅ      ｅｎｄ
＊
ｐａｃｋｚ  ｓｕｂｊｅｃｔ；ｓｕｂｌｅｎ；Ｇｅｏｇｒａｐｈｙ  １０１
＊
ａｔ        ５：５
ｗｒｉｔｅ  Ｔｈｅ  ｈｅａｄｉｎｇ  ≪ａ，ｓｕｂｊｅｃｔ≫  ｉｓ  ≪ｓ，ｓｕｂｌｅｎ≫  ｂｙｔｅｓ  ｌｏｎｇ．
【０４０３】
ｌｅｎｇｔｈタグは省略できる。その場合、変数と割り当てられるテキストの間に２つのセミコロンが続く。
ｐａｃｋｚ  ｓｕｂｊｅｃｔ；；Ｇｅｏｇｒａｐｈｙ  １０１
＊
ａｔ        ５：５
ｗｒｉｔｅ  Ｔｈｅ  ｈｅａｄｉｎｇ  ｉｓａ，ｓｕｂｊｅｃｔ．
【０４０４】
ｗｒｉｔｅコマンドと同じように、ｐａｃｋｚも複数行に継続できる。
ｐａｃｋｚ  ｔｅｘｔ２；；Ｔｈｉｓ  ｉｓｌｉｎｅ  ｏｎｅ．
Ｔｈｉｓ  ｉｓ  ｌｉｎｅ  ｔｗｏ．
Ｔｈｉｓ  ｉｓ  ｌｉｎｅ  ｔｈｒｅｅ．
どのｓｈｏｗコマンドも、それらをｗｒｉｔｅコマンドに埋め込めるようにｐａｃｋｚコマンドのテキスト・タグにも埋め込める。
ｐａｃｋｚ  ｔｅｘｔ；ｔｅｘｔｌｅｎ；ａｔｏｍｉｃ  ｗｅｉｇｈｔ  ｏｆ≪ａ，ｅｌｅｍｅｎｔ≫  ｉｓ  ≪ｓ，ｗｅｉｇｈｔ≫．
ａｔ      ５：５
ｓｈｏｗ  ｔｅｘｔ
【０４０５】
ｐａｃｋｚコマンドにｓｈｏｗａを埋め込むと、埋め込まれた変数内のヌル文字（値が０のバイト）をコピーしないでスキップする。特殊なアプリケーションにおいてヌル文字もコピーする必要がある場合は、ｓｈｏｗａの代わりにｓｈｏｗｖコマンドを使用できる。ｓｈｏｗｖコマンドは、ｐａｃｋｚコマンドにおいてヌル文字もコピーされるか、または、ｗｒｉｔｅコマンドに表示されるという重要な相違点以外は、ｓｈｏｗａコマンドとまったく同じように機能する。
【０４０６】
ｓｈｏｗｖコマンドには埋め込み形式（≪ｖ，≫に略記）と非埋め込み形式の２つの形式があるが、ｐａｃｋｚコマンドに埋め込むのが本来の使用法である。
【０４０７】
選択形式
ｐａｃｋｚコマンドにはｐａｃｋｚｃと呼ぶ選択形式がある。詳細については、それぞれのコマンドの説明を参照のこと。
【０４０８】
非数値データのコピー
ｍｏｖｅコマンドを使用すると、非数値データを１つの変数から他の変数へいちばん簡単にコピーできる。コマンドの一般形式を以下に示す。
ｍｏｖｅ    ｓｏｕｒｃｅ，ｄｅｓｔｉｎａｔｉｏｎ，ｌｅｎｇｔｈ
ｓｏｕｒｃｅ            任意の定義済み変数またはリテラル
ｄｅｓｔｉｎａｔｉｏｎ  任意の定義済み変数
ｌｅｎｇｔｈ            移動するバイト数を指定する数式  
【０４０９】
４０バイトの変数「ｎｅｗｎａｍｅ」の内容を変数「ｏｌｄｎａｍｅ」へコピーする例を以下に示す。
ｍｏｖｅ  ｎｅｗｎａｍｅ，ｏｌｄｎａｍｅ，４０
【０４１０】
テキストの数字への変換
ｃｏｍｐｕｔｅコマンドは、数値文字ストリングを数値へ変換する。
ｐａｃｋ            ｔｅｘｔ；ｔｅｘｔ１；−１２３４５
ｃｏｍｐｕｔｅ      ｔｅｓｔ，ｔｅｘｔ１，ｒｅｓｕｌｔ
ａｔ                １．１
ｓｈｏｗ            ｒｅｓｕｌｔ
【０４１１】
一般形式を以下に示す。
ｃｏｍｐｕｔｅ    ｂｕｆｆｅｒ，ｌｅｎｇｔｈ，ｒｅｓｕｌｔ
ｂｕｆｆｅｒ    文字ストリング
ｌｅｎｇｔｈ    変換対象文字数
ｒｅｓｕｌｔ    結果を記憶する変数
【０４１２】
変換されるストリングは以下を含むことができる。
●０から９の桁
●単項＋−文字（正または負の符号）
●小数点（ピリオド）１つ
【０４１３】
ストリング内の他の文字はｃｏｍｐｕｔｅの障害原因になり、−１より大きいｚｒｅｔｕｒｎ値で指示される。障害になると、ｃｏｍｐｕｔｅは「ｒｅｓｕｌｔ」に記憶されている値を変更しない。
【０４１４】
ａｒｒｏｗにおける入力から数値情報を抽出する方法については、ｓｔｏｒｅおよびｓｔｏｒｅｎコマンドの説明を参照のこと。
【０４１５】
変数の初期化
オーサーが定義したグローバル変数は、通常、使用する前に初期化すべきである。初期化は、ほとんどの場合、プログラムのスタートアップ・ユニットの中でｚｅｒｏコマンドを使用して実現する。
【０４１６】
ｚｅｒｏ
いちばん簡単なゼロの形式は、定義された長さにかかわらず１つの変数をゼロに設定する。
ｚｅｒｏ    ｕｓｅｒａｎｅ
【０４１７】
ｚｅｒｏのもう１つの形式は、指名された変数から指定されたバイト数クリアーする。
ｚｅｒｏ    ｓｃｏｒｅｓ，２２
【０４１８】
これは「ｓｃｏｒｅｓ」から２２バイトをゼロにする。多数のバイトをクリアーするための一般形式を以下に示す。
ｚｅｒｏ    ｖａｒｉａｂｌｅ，ｌｅｎｇｔｈ
ｖａｒｉａｂｌｅ  スタート位置の変数名
ｌｅｎｇｔｈ      ゼロにクリアーするバイト数
【０４１９】
スタートアップ・ユニットは、通常、すべてのグローバル変数スペースをクリアーしてから変数へ値を割り当てるので、きれいな石板をレッスンで使用することができる。
【０４２０】
グローバル変数のスペースをクリアーするため、システム変数ｚｖａｒｓｌはグローバル変数（定義されていないスペースを含む）の記憶に予約されている合計バイト数を提供する。いちばん初めに定義されているグローバル変数が「ｆｉｒｓｔｖａｒ」の場合、以下のコマンドがすべてのグローバル変数をゼロにクリアーする。
ｚｅｒｏ    ｆｉｒｓｔｖａｒ，  ｚｖａｒｓｌ
【０４２１】
いちばん初めに定義されているグローバル変数が「ｆｉｒｓｔｖａｒ」でない場合、ｌｅｎｇｔｈのエリアｚｖａｓｌバイトはグローバル変数スペースの終わりを超える。この場合、上に示すｚｅｒｏコマンドは実行エラーになる。
【０４２２】
ローカル変数を明示的にゼロに設定する必要はない。ユニットのすべてのローカル変数は、ユニットの実行が開始すると自動的にゼロに設定される。
ｓｅｔ
【０４２３】
ｓｅｔコマンドを使って変数を初期化する方法もある。この方法では変数をゼロに設定しないで、ｓｅｔが一連の値を連続する変数へ割り当てる。
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｊａｎ          ，１
ｆｅｂ          ，１
．                  ＄＄  １２カ月全部
．
ｎｏｖ          ，１
ｄｅｃ          ，１
ｄｅｆｉｎｅ  ｅｎｄ
ｓｅｔ          ｊａｎ(３１，２８，３１，３０，３１，３０，３１，３１，３
０，３１，３０，３１
【０４２４】
この例は、３１を「ｊａｎ」へ、２８を「ｆｅｂ」へ、以下同様に割り当てる。これは１２個のｃａｌｃコマンドと同じ結果になる。
タグの標準形式を以下に示す。
ｓｅｔ    ｖａｒｉａｂｌｅ(ｖａｌｕｅ  ｌｉｓｔ
ｖａｒｉａｂｌｅ  最初の値の割り当て先変数
ｖａｌｕｅ  ｌｉｓｔ  ｖａｒｉａｂｌｅ以降に割り当てる値
【０４２５】
ｓｅｔコマンドはバウンド・チェックを実行しない。割り当ては、以降の変数の定義方法に関係なく、タグに指名されている変数の定義済み長さをベースにして行われる。上に示す例では、「ｊａｎ」は１バイトの整数として定義されているので、ｓｅｔタグの中の値が「ｊａｎ」から１２バイトへ割り当てられる。「ｊａｎ」の直後に定義されている１１変数がすべて１でない場合、これらの変数は期待値を含まない。
【０４２６】
ｓｅｔコマンドには、選択形式ｓｅｔｃがある。詳細については、該当コマンドの説明を参照のこと。
【０４２７】
比較と検索
２つの変数は、ｃｏｍｐａｒｅコマンドを使用して比較できる。このコマンドは、２つの比較ストリングの中で合致する先行文字数を返す。
ｄｅｆｉｎｅ  ｌｏｃａｌ
ｓｔｒｉｎｇ１，２６
ｓｔｒｉｎｇ２，２６
ｒｅｓｕｌｔ，１
ｄｅｆｉｎｅ  ｅｎｄ
ｐａｃｋ      ｓｔｒｉｎｇ１；；ａｂｃｄｅｆｇｈｉｊｋｌｍｎｏｐｑｒｓｔ                  
ｕｖｗｘｙｚ
ｐａｃｋ      ｓｔｒｉｎｇ２；；ａｂｃｄｅｆｇｈｉｊｋｌｍｎｏｐｑｒｓｔ
ｕｖｗｘｙｚ
ｃｏｍｐａｒｅ  ｓｔｒｉｎｇ１，ｓｔｒｉｎｇ２，２６，ｒｅｓｕｌｔ
【０４２８】
これは「ｓｒｉｎｇ１」と「ｓｔｒｉｎｇ２」を比較して、合致した先行文字数を「ｒｅｓｕｌｔ」に設定する例である。この場合、「ａｂｃ」を表す３が設定される。
【０４２９】
ｃｏｍｐａｒｅコマンドの一般形式を以下に示す。
ｃｏｍｐａｒｅ  ｖａｒ１，ｖａｒ２，ｌｅｎｇｔｈ，ｒｅｓｕｌｔ
ｖａｒ１        比較する変数の１つ
ｖａｒ２        比較するもう１つの変数
ｌｅｎｇｔｈ    比較するバイト数
ｒｅｓｕｌｔ    合致する最終バイト・ポジションが設定される。ｖａｒ
１とｖａｒ２が同じ場合は−１が設定され、合致しない
場合は０に設定される。
ｆｉｎｄ
【０４３０】
ｆｉｎｄコマンドを使用すると、変数を検索して特定の内容を探し出せる。
ｄｅｆｉｎｅ          ｌｏｃａｌ
ａｌｐｈａｂｅｔ，    ２６
ａｉｐｈａｌｅｎ，    ２
ｌｏｃａｔｉｏｎ，    ２
ｐａｃｋｚ  ａｌｐｈａｂｅｔ；ａｌｐｈａｌｅｎ；ａｂｃｄｅｆｇｈｉｊｋｌ
ｍｎｏｐｑｒｓｔｕｖｗｘｙｚ
ｆｉｎｄ    ’ｅｆ’，２，ａｌｐｈａｂｅｔ，ａｌｐｈａｌｅｎ，１，ｌｏｃａ
ｔｉｏｎ
【０４３１】
これは、変数「ａｌｐｈａｂｅｔ」からストリング「ｅｆ」を検索する例である。見つかれば、「ｅｆ」が検索エリア内５バイト目にあるので変数「ｌｏｃａｔｉｏｎ」に５が設定される。
【０４３２】
ｆｉｎｄコマンドの一般形式を以下に示す。
ｆｉｎｄ  ｏｂｊｅｃｔ，ｏｂｊｅｃｔ−ｌｅｎｇｔｈ，ｓｔａｒｔ−ｖａｒ，ｌｉｓｔ−ｌｅｎ，ｉｎｃｒ，ｌｏｃａｔｉｏｎ
ｏｂｊｅｃｔ  検索する値。これはリテラル、変数、バッファの１つ。
ｏｂｊｅｃｔ−ｌｅｎｇｔｈ  バイト数で表した、検索対象の長さ。
ｓｔａｒｔ−ｖａｒ  検索開始点
ｌｉｓｔ−ｌｅｎ    検索対象エントリー数。エントリーの長さはｉ
ｎｃｒ(増大値）によって指定され、複数バイト。
ｉｎｃｒ            各エントリーの長さ
ｌｏｃａｔｉｏｎ    検索対象が見つかった場所のエントリー番号。
検索対象が見つからない場合、−１がｌｏｃａ
ｔｉｏｎに設定される。
【０４３３】
例
次の例は以下の変数が定義されていることを前提とする。
ｄｅｆｉｎｅ      ｌｏｃａｌ  
ｎａｍｅ          ，１５    ＄＄検索する名前
ｆｏｕｎｄ        ，２      ＄＄「ｎａｍｅ」が見つかったリスト中の位置
ｌｉｓｔ（５）    ，１５    ＄＄ｎａｍｅのリスト
ｄｅｆｉｎｅ                ｅｎｄ
【０４３４】
変数「ｌｉｓｔ」は５ネームを含み、それぞれが１５文字を占めている。「ｌｉｓｔ」の内容を以下に示す。
ｊｏｈｎ  ｍｉｌｌｅｒ．．．ｍａｒｋ  ｈｏ．．．．．．．．ｓａｒａｈ  ｊｏｈｏｎｓｏｎ．ｊａｍｅｓ  ｈｅｆｌｉｎ  ｌｉｓａ  ｂｅｒｇｅｒ
↑１        ↑１６        ↑３１        ↑４６        ↑６１
【０４３５】
ヌル文字を使用して判読性の向上を図り、バイト数を計算しやすくするために数字を追加している。
【０４３６】
リテラル・オブジェクト
以下のｆｉｎｄステートメントは、氏名ｍａｒｋ  ｈｏを検索する。
ｆｉｎｄ  ’ｍａｒｋ  ｈｏ’，７，ｌｉｓｔ（１），５，１５，ｆｏｕｎｄ  ＄＄検索結果は２
【０４３７】
名前は９文字以下であるため、テキスト・リテラル’ｍａｒｋ  ｈｏ’として提供できる。名前のあとに検索オブジェクトの長さ７文字を指定する。リストの開始点はｌｉｓｔ（１）として与えられ、その長さはそれぞれが１５バイトの５エントリーである。
【０４３８】
検索後の「見つかった」変数には２が含まれる。これは、ｍａｒｋ  ｈｏが見つかった場所がリストの２番目の位置（２バイト目ではない）であるからである。
【０４３９】
変数オブジェクト
８バイト以上の名前はテキスト・リテラルにはできないので、名前を変数にパックしなければならない。以下は、ｊａｍｅｓ  ｈｅｆｌｉｎを検索する例である。
ｐａｃｋｚ  ｎａｍｅ；；ｊａｍｅｓ  ｈｅｆｌｉｎ
ｆｉｎｄ    ｎａｍｅ，１５，ｌｉｓｔ（１），５，１５，ｆｏｕｎｄ
【０４４０】
変数「ｆｏｕｎｄ」は４の値をとる。理由は、ｊａｍｅｓ  ｈｅｆｌｉｎが見つかった場所が４番目の位置であるからである。
【０４４１】
バイト単位
姓名を検索するには、以下のようなｆｉｎｄを実行することができる。
ｐａｃｋｚ  ｎａｍｅ；；ｍｉｌｌｅｒ
ｆｉｎｄ    ｎａｍｅ，６，ｌｉｓｔ（１），７５，１，ｆｏｕｎｄ
【０４４２】
この例を実行すると、「ｆｏｕｎｄ」は６の値になる。
【０４４３】
姓の長さは、エントリー全体ではなくエントリーの一部を探し出すので６として与えられる。
【０４４４】
同様に、リストは１５バイト構成の５エントリーではなく、１バイト構成の７５エントリーとして指定される。このため、ｆｉｎｄはそれぞれの１５バイト・ネーム・フィールドの初めだけではなく、すべての文字からｍｉｌｌｅｒを検索する。これは、検索オブジェクトが検索処理に提供されているエントリーの名目上の長さ以上になり得ることを示している。
【０４４５】
エントリー単位の逆方向検索
逆方向に検索するには、インクリメントに負の値を指定する。以下はリストの終わりからｊｏｈｎを検索する例で、それぞれの１５バイト・エントリーの初めしか調べない。
ｆｉｎｄ  ’ｊｏｈｎ’，４，ｌｉｓｔ（１），５，−１５，ｆｏｕｎｄ
【０４４６】
この例の「ｆｏｕｎｄ」は値１になる。検索処理はリストの終わりから逆方向に実行されるが、位置は常にリストの初めからカウントされる。
【０４４７】
バイト単位の逆方向検索
以下に逆方向検索のもう１つの例を示す。
ｆｉｎｄ  ’ｊｏｈｎ’，４，ｌｉｓｔ（１），７５，−１，ｆｏｕｎｄ
【０４４８】
この例では、−１のインクリメントを使用してリストの終わりからすべての文字を調べて検索する。
【０４４９】
この場合の「ｆｏｕｎｄ」は３７の値になるが、これはバイト単位で逆方向に検索したときに最初に見つかるｊｏｈｎがｓａｒａｈ  ｊｏｈｎｓｔｏｎの中に存在するからである。順方向に検索したのであれば、ｊｏｈｎ  ｍｉｌｌｅｒが最初に見つかり、「ｆｏｕｎｄ」は１の値になったはずである。
【０４５０】
リテラル・データの表現方法
ｃａｌｃコマンドで使用するデータや他の数値コンテキストは、多数のリテラル形式で表現できる。
【０４５１】
ここでは説明することを目的に、ｌｉｔｅｒａｌを使用して、変数や数式としてではなく直接表現されている１，２，３，４、または８バイトの値を識別する。５，６，または７バイトの値はリテラルとして使用できるが、内部では８バイト値として表現される。
【０４５２】
整数リテラル
小数点を使わないで一連の桁として記述されたすべての有効数字が、整数リテラルである。整数リテラルの初めには正や負の符号を付けることができる。
【０４５３】
実数リテラル
実数リテラルは、小数点の存在によって整数リテラルと区別される。小数点の後に桁が存在しない場合でも、小数点が存在するので値は実数値として扱われる。
【０４５４】
テキスト・リテラル
テキスト・リテラルは、引用符で囲んだ１から８文字のストリングである。多数のコマンドでは、ファイル名、ユニット名、他のブロック名をテキスト・リテラルとして記述することができる。
ｉｍａｇｅ  ｐｌｏｔ；’ｐｉｃｔｕｒｅｓ’，’ｂｉｒｄ’
【０４５５】
上のｉｍａｇｅコマンドは、ファイルｐｉｃｔｕｒｅｓ、ブロックｂｉｒｄに記憶されている画面イメージを表示する。
【０４５６】
テキスト・リテラルは、内部ではかならず８バイトとして記憶される。テキスト右端の未使用バイトにはゼロが設定される。つまり、テキスト・リテラルは左に寄せて８バイトにして記憶される。
【０４５７】
テキスト・リテラルの長さが８バイトであるため、ｃａｌｃコマンドを使用してテキスト・リテラルを８バイトの変数へ割り当てることができる。
ｃａｌｃ  ｆｉｌｅｎａｍｅ(  ’ｐｉｃｔｕｒｅｓ’
【０４５８】
変数は８バイトの長さで定義していなければならない。それより短い変数を使
用した場合、テキスト・リテラルの初めの文字を失うことは明らかである。
【０４５９】
文字リテラル
文字リテラルは、通常、２重引用符で囲んだ１文字である。
ｉｆ  ｎａｍｅ（２）＝”ａ”
【０４６０】
このような文字リテラルは内部では１バイトとして記憶される。
【０４６１】
文字リテラルは、ｃａｌｃを使って整数と互換性のある変数へ直接割り当てることができる。
ｃａｌｃ  ｎａｍｅ（２）(”ｚ”
【０４６２】
また、以下のように２から８文字のストリングを２重引用符で囲んで複数バイトの文字リテラルを作成することも、例外的といえるが可能である。
ｃａｌｃ  ｃｈａｒｓ(”ａｂｃ”
【０４６３】
このようなリテラルは、かならず１，２，３，４，または、８バイトのうちできるだけ小さいサイズで記憶される。リテラルが５，６，または、７文字を含んでいる場合、ゼロの値のバイトがリテラルの左端に追加されて最高８バイトに丸められる。つまり、文字リテラルは、右に寄せて１，２，３，４，または８バイトのできるだけ小さいサイズにして記憶される。
【０４６４】
複数バイトの文字リテラル（２重引用符で囲む）は、テキスト・リテラル（引用符で囲む）の代用にはならない。したがって、ファイル名やユニット名などのすべてのテキスト系リテラルには引用符を使用し、２重引用符を単一文字にだけ使用するのが適正な使用法である。
【０４６５】
キープレス・リテラル
最後に処理されたキーをレポートするシステム定義変数ｚｉｎｐｕｔを調べる場合、キープレス・リテラルがよく使用される。
【０４６６】
キープレス・リテラルは、通常、１％”ａ”のようにパーセント符号を接頭辞とした１バイトの文字リテラルである。パーセント符号は、１バイトの文字リテラルをｚｉｎｐｕｔに準拠する２バイトの内部表現に変換する。
【０４６７】
他にも％ａｌｔ，％ｃｔｌ，％ａｌｔｃｔｌ，％ｃｔｌａｌｔ（最後の２つは等価）など、多数の接頭辞が存在する。したがって、最後に処理されたキーが［ＣＴＲＬ］［Ａ］かどうかを決定するには、以下を記述できる。
ｉｆ ｚｉｎｐｕｔ＝％ｃｔｌ”ａ”
【０４６８】
すべてのキープレス・リテラルは、内部では２バイトの正の値として表現される。形式の詳細についてはｚｉｎｐｕｔの説明を参照のこと。
【０４６９】
１６進リテラル
１６進（基数が１６）リテラルの説明は、オプションの上級教材とみなすべきである。これまでに１６進数を扱った経験がない場合は、この情報が必要ない可能性が大きいので次の「定数」へ進んでかまわない。
【０４７０】
１６進リテラルは、アルファベット文字ｈ、その後に０−９の１桁、さらに１６進桁０−９のゼロまたはそれ以上の桁、そして、ａ−ｆとして記述する（１６進法では、１０から１５までの値はａからｆの文字で表す）。
【０４７１】
有効な１６リテラルを以下に示す。
ｈ４        （１０進数４に等しい）
ｈ１０      （１０進数１６に等しい）
ｈ０ｆ      （１０進数１５に等しい）
ｈｌｅｃ４  （１０進数７８７６に等しい）
ｈｆｆｆｆ  （１０進数−１に等しい）
【０４７２】
なお、ｈｆは有効な１６進リテラルではない。理由は、ｈのあとの最初の桁が０−９の範囲内になければならないからである。１６値の最初の桁がａからｆの１つであれば、ｈ０ｆのようにｈのあとに余分な０が必要になる。
【０４７３】
１６進リテラルは右から左へ逆方向に評価されると考えると有効である。リテラルの桁は右からペアで読み取られ、それぞれの桁ペアは値の内部表現の１バイトに対応する。個々の新規の桁ペアに対して、新規のバイトがリテラルの内部表現へ追加される。リテラルの左端にペアにならない桁が残る場合も、残りの桁がゼロでないかぎり１バイトが追加される。リテラルの左端に残るペアにならない桁は、かならず破棄される。内部表現の長さが５、６、または７バイトになる場合、ゼロ値のバイトを値の左に埋め込んで８バイトにする。
【０４７４】
整数値としての１６進リテラル
計算上では１６進リテラルはかならず整数値としてみなされる。１６進リテラルを変数へ割り当てる場合、変数の長さとリテラルの長さを区別することが重要である。以下の例を検討する。
ｄｅｆｉｎｅ      ｌｏｃａｌ
ｔｅｍｐ，４
ｄｅｆｉｎｅ      ｅｎｄ
＊
ｃａｌｃ  ｔｅｍｐ(ｈ９１
【０４７５】
ここでは、１バイト・リテラルの値が４バイトの整数値へ割り当てられる。リテラルの整数値は変数の長さを考慮する前に評価される。リテラルの長さが１バイトであるため、その値はｈ９１であり、１０進値１００１０００１１に相当する。左端のビットが「１」であるため、値は１１１の負の数字として解釈される。この値が変数「ｔｅｍｐ」へ割り当てられる。２バイトのリテラルｈ００９１または４バイトのリテラルｈ００００００９１であったなら異なる結果、つまり、１４５の正数になる。これが、１６進リテラルの長さに注意しなければならない理由である。
【０４７６】
ビット・パターンとしての１６進リテラル
１６進リテラルを使用して、特定のビット・パターンを実数型変数へ割り当てるとよい場合がある。ｃａｌｃを使ってこれを行うことはできない。理由は、計算過程において１６リテラルが整数として解釈され、実数をＴｅｎＣＯＲＥに記憶するのに使用するＩＥＥＥ形式へ整数の値を変換するからである。数値は保持されるがビット・パターンは保持されない。
【０４７７】
ｍｏｖｅコマンドを使用すると、数値解釈を行わずに１６進リテラルをビット・パターンとして変数へコピーすることができる。
ｄｅｆｉｎｅ        ｌｏｃａｌ
ｈｅｉｇｈｔ，４，  ｒｅａｌ
ｄｅｆｉｎｅ        ｅｎｄ
＊
ｍｏｖｅ            ｈ７ｆ８０００００，ｈｅｉｇｈｔ，４
【０４７８】
上の例は、不定値１／０に対する４バイト・ビット・パターンを４バイトの実数型変数「ｈｅｉｇｈｔ」へコピーする。計算を行わないため、ビット・パターンの変換処理を実行しない。
【０４７９】
定数
定数とは、リテラル・データの指名項目である。定数は、＝符号を使ってグローバルまたはローカルに定義できる。
ａ＝１
ｇｒｅｅｔ＝’Ｈｅｌｌｏ’
【０４８０】
定数の定義に使用する一般構文は、ｎａｍｅ＝ｌｉｔｅｒａｌである。定数には、変数に有効な任意の名前を指定できる。定数は、変数を定義できる任意の位置に定義できる。１度定義すると、定数が表すリテラル・データを使用できるすべての場所でその定数を使用できる。
ｄｅｆｉｎｅ        ｌｏｃａｌ
Ｐｉｃｆｉｌｅ＝’ｐｉｃｔｕｒｅｓ’
ｐｉｃｂｌｏｃｋ＝’ｆｉｓｈ’
Ｐｘ＝１４０
Ｐｙ＝１００
ｄｅｆｉｎｅ  ｅｎｄ
＊
ｉｍａｇｅ    ｐｌｏｔ；ｂｌｏｃｋ，Ｐｉｃｆｉｌｅ，Ｐｉｃｂｌｏｃｋ；Ｐｘ，Ｐｙ
【０４８１】
上のｉｍａｇｅコマンドは以下に相当する。
ｉｍａｇｅ  ｐｌｏｔ；ｂｌｏｃｋ，’ｐｉｃｔｕｒｅｓ’，’ｆｉｓｈ’；１４０，１００
【０４８２】
定数は他の変数を定義するのによく使用される。
ＭＡＸＮＡＭＥＳ＝２０
ｎａｍｅ（ＭＡＸＮＡＭＥＳ），２０
ａｇｅ（ＭＡＸＮＡＭＥＳ），２
ａｄｄｒｅｓｓ（ＭＡＸＮＡＭＥＳ），４０
【０４８３】
上の例は、長さが２０の３つの配列を定義する。ＭＡＸＮＡＭＥＳ定義を変更すると、３つのすべての配列長さを変更できる。
【０４８４】
変数名との混同を避けるために定数名に大文字を使用することを規則とするプログラマが多い。
【０４８５】
同じ規則は、他の場所で使用されるリテラルや定数定義内に使用されるリテラルに適用される。定数には、値、種類（整数または実数）、長さ(内部表現のバイト数）がある。他のリテラル・データと同じように、計算に定数を使用する場合はこれら３つの特性をすべて考慮しなければならないことがある。
【０４８６】
演算子
ＴｅｎＣＯＲＥは、リテラル、定数、変数を数式に結合するのに使用される豊富な種類の演算子をサポートしている。ＴｅｎＣＯＲＥは多数の数学関数もサポートし、オーサーが他の関数を定義するのに必要なメカニズムを提供する。
【０４８７】
算術演算子
＋  加算
＜＝割り当て（例：ａ＜＝ｂはｂの値をａへ割り当てることを意味する）［ＣＴＲＬ］［Ｃ］［Ａ］または［ＡＬＴ］［Ａ］
−  減算
＊またはｘ  乗算、実数計算［ＣＴＲＬ］［Ｃ］［＋］
＄ｉｍｕｌ＄  乗算、整数計算
または÷  除算、実数計算［ＣＴＲＬ］［Ｃ］［／］
＄ｉｄｉｖ＄  除算、整数計算
＊＊  指数（例：ａ＊＊ｂは、ａのｂ乗を意味する）
°  前の値を「度」からラジアンへ変換する。［ＣＴＲＬ］［Ｃ］［°］
【０４８８】
論理演算子
論理演算子は、式を比較して真または偽に対応する戻り値を返す。たとえば、以下のコマンド・シーケンスは、２は３より小さいので真をプロットする。
ｉｆ  ２＜３
．  ｗｒｉｔｅ  Ｔｒｕｅ
ｅｎｄｉｆ
これは、以下の質問と同じである。
真または偽：２は３より小さい。
【０４８９】
論理演算子は、式のオペランドを比較した後、式の結果が真であれば戻り値−１を返し、偽であれば０を返す。以下に、標準外文字の入力に使用するキー・シーケンスを示す。
＝  等しい（オペランドが同じであれば真）
≠  等しくない（オペランドが同じでなければ真）
＜  より小さい（左のオペランドが右のオペランドより小さければ真）
＞  より大きい（左のオペランドが右のオペランドより大きければ真）
≦  等しいかまたは小さい（左のオペランドが右のオペランドより小さいかまた
は等しければ真）
≧  等しいかまたは大きい（左のオペランドが右のオペランドより大きいかまた
は等しければ真）
＄ａｎｄ＄  論理積（両方のオペランドが真であれば真）
＄ｏｒ＄    論理和（どちらかのオペランドが真であれば真）
【０４９０】
以上のオペランド以外に、ｎｏｔ（）関数はカッコ内のオペランドが偽の場合に真を返し、真の場合に偽を返す。
【０４９１】
論理演算子のオペランドは数値でなくてよい。たとえば、ＡＳＣＩＩ文字を相互に比較できる。
【０４９２】
ＴｅｎＣＯＲＥでは、真は−１の値で、偽は０で表現される。数式と数値の例を以下に示す。
２  ＜  ３            ＄＄−１を返す。真
２  ＝  ３            ＄＄０を返す。偽
２  ＞  ３            ＄＄０を返す。偽
ｎｏｔ（２＞３）      ＄＄−１を返す。真（真は偽でないと同じ）
【０４９３】
より一般には、ＴｅｎＣＯＲＥは、すべての負の値を真、負以外の値を偽として扱う。
【０４９４】
真と偽には対応する数値があるので、通常、論理式はコマンド選択形式の中でセレクタとして使用される。
ｗｒｉｔｅ  ２＜３；Ｔｒｕｅ；Ｆａｌｓｅ
【０４９５】
上の例は２が３より小さいので真を印刷し、数式の結果はしたがって−１になる。数式が偽になる場合の数値は０で、この例は偽を印刷する。
【０４９６】
通常、論理演算子は組み合わせて使用するが、ときとして以下のように算術演算子と一緒に使用することもある。
ｃａｌｃ  ｓｃｏｒｅ(ｓｃｏｒｅ−（ａｎｓｗｅｒ＝ｃｏｒｒｅｃｔ）
＊  ｉｎｃｒｅｍｅｎｔｓ”ｓｃｏｒｅ”ｂｙ  １  ｉｆ  ａｎｓｓｗｅｒ＝ｃｏｒｒｅｃｔ
【０４９７】
上の例は、「ａｎｓｗｅｒ」と「ｃｏｒｒｅｃｔ」の値が相違する場合、「ｓｃｏｒｅ」を変更しないでそのまま残す結果になる。理由は、ａｎｓｗｅｒ＝ｃｏｒｒｅｃｔの値が偽(０)になり、「ｓｃｏｒｅ」へ割り当てた値がｓｃｏｒｅ−(０)であるからである。しかし、「ａｎｓｗｅｒ」と「ｃｏｒｒｅｃｔ」の値が等しい場合は、ａｎｓｗｅｒ＝ｃｏｒｒｅｃｔが真の値(−１)になり、ｓｃｏｒｅへ割り当てた値はｓｃｏｒｅ＋１に相当するｓｃｏｒｅ−(−１)である。
【０４９８】
ビットワイズ演算子
ビットワイズ演算子は、各演算子を数値としてではなくビットのパターンとして扱う。
【０４９９】
ビットワイズ演算子と演算子が実行するオペレーションを以下に示す。
＄ｍａｓｋ＄  論理積。対応ビットが両方のオペランドに設定されていれば、結
果の各ビットが設定される。
ｕｎｉｏｎ＄  論理和。対応ビットがどちらかのオペランドに設定されていれば、
結果の各ビットが設定される。
＄ｄｉｆｆ＄  排他的論理和。対応ビットが１つのオペランドに設定され、もう
１つのオペランドに設定されていなければ、結果の各ビットが設
定される。
＄ａｒｓ＄    算術右送り。最初のオペランドのビット・パターンが、第２オペ
ランドに指定されている桁数だけ右方向へ移動する。いちばん左
の（符号）ビットは右へ移動し、右端で溢れたビットは破棄され
る。
＄ｃｌｓ１＄  １バイト単位の循環左送り。最初のオペランドのビット・パター
ンが、第２オペランドに指定されている桁数だけ左方向へ移動す
る。左端で溢れたビットは右端に現れる。
＄ｃｌｓ２＄  ２バイト単位の循環左送り。
＄ｃｌｓ３＄  ３バイト単位の循環左送り。
＄ｃｌｓ４＄  ４バイト単位の循環左送り。
＄ｃｌｓ８＄  ８バイト単位の循環左送り。
【０５００】
たとえば、＄ｍａｓｋ＄，＄ｕｎｉｏｎ＄，＄ｄｉｆｆ＄は以下の結果になる。
＄ｍａｓｋ＄        ＄ｕｎｉｏｎ＄      ＄ｄｉｆｆ＄
４５    ００１０１１０１    ００１０１１０１    ００１０１１０１
８４    ０１０１０１００    ０１０１０１００    ０１０１０１００
１２１  ０００００１００    ０１１１１１０１    ０１１１１００１
【０５０１】
したがって、４５＄ｍａｓｋ＄８４は４に等しく、４５＄ｕｎｉｏｎ＄８４は１２５に等しく，４５＄ｄｉｆｆ＄８４は１２１に等しい。
【０５０２】
ビットワイズ演算子は、整数値および有効整数サイズ（１、２、３、４または８バイト)を持つ非数値だけに対して使用することを意図している。実数値への適用には適していない。
【０５０３】
システム定義関数
ＴｅｎＣＯＲＥは、カッコ内に引数をとる多数のシステム定義関数をサポートしている。これらの関数には、三角法、対数、論理、算術、アドレス関数を含む。
対数
ａｌｏｇ（ｘ）      ｘの真数底１０（１０のｘ乗）
ｅｘｐ（ｘ）        数学定数Ｃのｘ乗
ｌｎ（ｘ）          ｘの自然対数
ｌｏｇ（ｘ）        ｘの対数底１０
ｌｏｇｘ（ｎ，ｘ）  ｘの対数底ｎ
否定
ｃｏｍｐ（ｘ）      ビットワイズ補集合。オペランドｘのすべてのビットが反
転する（「１」を含むビットは「０」にリセットされ、「０」
を含むビットは「１」にリセットされる。）
ｎｏｔ（ｘ）        論理否定。オペランドｘが偽の場合は真（−１）を返し、
真の場合は偽を返す。
三角法
ａｃｏｓ（ｘ）      逆余弦(ラジアンのｘ）
ａｓｉｎ（ｘ）      逆正弦(ラジアンのｘ）
ａｔａｎ（ｘ）      逆正接(ラジアンのｘ）
ｃｏｓ（ｘ）        コサイン（ラジアンのｘ）
ｓｉｎ（ｘ）        サイン(ラジアンのｘ）
ｔａｎ（ｘ）    タンジェント(ラジアンのｘ）
アドレス
ａｂｓｌｏｃ（ｖ）          変数ｖのメモリーにおける４バイト絶対アドレス
ｓｙｓｌｏｃ（グローバル）  グローバル変数スペースのセグメント・アドレス
ｓｙｓｌｏｃ（ローカル）    現ユニットに対するローカル変数のセグメント・
アドレス
ｖａｒｌｏｃ（ｖ）          変数ｖに対するローカルまたはグローバル変数の
初めからのオフセット
算術
ａｂｓ（ｘ）                ｘの絶対値
ｂｉｔ（ｖ，ｘ）            変数ｖ内ビットｘの論理値（ビットが１の場合−
１）
ｂｉｔｃｎｔ（ｖ，ｎ）      変数またはバッファＶに設定されている、ｎビッ
ト範囲内のビット数。
ｆｒａｃ（ｘ）              ｘの分数部
ｉｍｏｄ（ｘ，ｙ）          ｘはｙを法として合同
ｉｎｔ（ｘ）                変数ｘの整数部
ｍｏｄ（ｘ，ｙ）            ｘはｙを法として合同
ｒａｎｄｉ（ｘ）            １からｘまでの任意の整数
ｒａｎｄｉ（ｘ，ｙ）        ｘからｙまでの任意の整数
ｒａｎｄｒ（ｘ）            ０．０からｘまでの任意実数値
ｒａｎｄｒ（ｘ，ｙ）        ｘからｙまでの任意実数値
ｒｏｕｎｄ（ｘ）            いちばん近い整数に丸めたｘ
ｓｉｇｎ（ｘ）              ｘが負であれば−１
変数ｘが正であれば０
ｓｑｒｔ（ｘ）              ｘの平方根
π                          Ｐｉ（３．１４１５９２６５３５８９７９３１２）
［ＣＴＲＬ］［Ｃ］［Ｐ］
【０５０４】
数式の評価
この項には、ＴｅｎＣＯＲＥが数式を評価する方法が詳細に説明されている。最初の「演算子の優先順序」はすべてのオーサーに有効である。残りの説明は、計算を最適化して最高の実行効率を実現する必要のあるオーサーを対象とするオプション情報と考えてよい。
【０５０５】
演算子と関数の優先順序
数式の評価過程において、ＴｅｎＣＯＲＥは演算子のある一定の優先順序に準拠する。したがって、５＋４＊３の数式は２７ではなく１７に等しい。これは、乗算演算子＊の優先度が加算演算子＋の優先度よりも高く、先に実行されるからである。その結果、９＊３ではなく５＋１２の数式になる。
【０５０６】
カッコは標準の順序を無効にするので、カッコ内の演算子を（標準の順序）まず処理してからその結果が数式内の関連オペレーションに適用される。ＴｅｎＣＯＲＥ演算子と関数を実行順序にしたがって以下に示す。クラス１はクラス２より先に、クラス２はクラス３より先に、以下同じように実行される。
１  指数（＊＊）と関数
２  単項マイナス、単項プラス
３  乗除算（＊、／、÷、＄ｉｍｕｌ＄，＄ｉｄｉｖ＄）
４  加減算（＋、−）
５  ビットワイズ演算子（＄ｕｎｉｏｎ＄，＄ｍａｓｋ＄，＄ｄｉｆｆ＄，＄ａ
ｒｓ＄，＄ｃｌｓ１＄ｃｌｓ２＄，＄ｃｌｓ３＄，＄ｃｌｓ４＄，＄ｃｌｓ
８＄）
６  比較演算子（＝，≠，＜，＞，≦，≧）
７  論理演算子（＄ａｎｄ＄，＄ｏｒ＄）
８  度からラジアンへの変換（４５°の°）
９  割り当て（＜＝）
【０５０７】
丸め処理
正確に．５の小数部を持つ値を丸めると、かならず端数のない整数になる。つまり、小数部が．５の値は
●整数部が奇数であれば切り上げる
●整数部が偶数であれば切り下げる
【０５０８】
例
ｃａｌｃ  ｉｎｔｖａｒ(７＜＝５    ＄＄”ｉｎｔｖａｒ”に値８が割り当てら
れる
ｉｎｔｖａｒ(８＜＝５    ＄＄”ｉｎｔｖａｒ”に値８を割り当てら
れる
【０５０９】
サブ数式の圧縮
サブ数式によっては、実行時ではなくユニットをバイナリー形式へ変換するときに評価および圧縮されるものがある。
ｃａｌｃ  ｒａｔｉｏ＜＝（４＋５）／ｌｉｍｉｔ
【０５１０】
サブ数式（４＋５）は整数だけを含み、プログラムを実行する前にその値がすでにわかっているので、内部においてコマンドは以下のように表現される。
ｃａｌｃ  ｒａｔｉｏ＜＝９／ｌｉｍｉｔ
【０５１１】
以下の要素だけを含んでいれば、変換時にサブ数式を評価および圧縮することができる。
●４バイト以下に収まる整数リテラル
●４バイト以下に収まる整数型定数
●＋−＄ｉｍｕｌｓ＄ｉｄｉｖ＄の演算子
他の要素を含んでいるサブ数式は、圧縮時に評価不可能となり圧縮されない。
【０５１２】
演算子の種類
特定の演算子および関数は、特定の種類の実数値や整数値にしか動作しない。準拠していない値は、オペレーションが実行される前に内部において演算子や関数が予想する種類に変換される。
【０５１３】
実数値に動作する演算子を以下に示す。
＊    実数乗算
／    実数除算
＊＊  指数
°    度からラジアンへの変換
【０５１４】
さらに、三角関数、指数および対数関数、ｉｎｔ（），ｆｒａｃ（），ｒｏｕｎｄ（）は実数値にかならず動作する。
【０５１５】
これらの演算子や関数を整数オペランドに使用すると、最初にオペランドが実数値へ変換される。結果を整数型変数へ割り当てるか整数値を予想するコマンドの中で使用すると、結果が再変換されて整数に戻る。
【０５１６】
整数値だけに動作する演算子を以下に示す。
＄ｉｍｕｌ＄  整数乗算
＄ｉｄｉｖ＄  整数除算
【０５１７】
さらに、論理演算子、ビットワイズ演算子、ｉｍｏｄ（），ｎｏｔ（），ｃｏｍｐ（）関数は、整数値にかならず動作する。
【０５１８】
これらの演算子および関数を実数オペランドに使用すると、最初にオペランドが整数値に変換される。結果が実数型変数へ割り当てる場合、割り当て前に実数に変換される。
【０５１９】
他の演算子および関数は実数値や整数値に動作でき、内部変換は行われない。
【０５２０】
演算子の種類は、通常、プログラム実行速度にしか影響を与えない。ただし、暗示的な変換を銘記しないで特定の整数演算子を実数値へ適用すると、予期しない結果になることがある。特に、ビットワイズ演算子をｃｏｍｐ（）関数と一緒に実数値へ適用した場合、それほど意味のある結果が出ない。
【０５２１】
中間値と速度の最適化
内部表現が結果の正確度に影響を与えることはないので、ＴｅｎＣＯＲＥのオーサーは、通常、数式の評価に使用する中間値が内部においてどのように表現されるかを知る必要はない。ただし、この情報は計算速度の最適化には有効である。
【０５２２】
中間値は、かならず４バイトの整数かまたは拡張精度１０バイトの実数として表される。以下の３つの条件をすべて満たす場合は、４バイト整数が使用される。
●実数オペランドがない。
●実数値を必要とする演算子がない。
●４バイトを超えるオペランドがない。
【０５２３】
上の条件が１つでも満たされない場合は、１０バイトの実数が使用される。１０バイトの実数計算に要する時間は４バイト整数の計算所要時間より数倍長くなるため、本来（４バイトの）整数式であったにもかかわらずたった１つの実数オペランドが存在することによって評価に時間がかかることになる。これは、現実には、数値演算プロセッサが存在しなく、速度がきわめて重要なアプリケーションの場合にしか問題にならない。
【０５２４】
オーサー定義関数
オーサー定義関数とは命名された数式である。定数と同じように、＝符号を使って関数を定義する。
ｐｒｅｓｓｕｒｅ＝ｗｅｉｇｈｔ／ａｒｅａ
【０５２５】
関数定義のいちばん簡単な構文は、ｎａｍｅ＝ｅｘｐｒｅｓｓｉｏｎである。関数には、変数に有効な任意の名前を指定できる。関数定義は、変数を定義できる任意の位置に記述できる。一度定義しておくと、関数が表す数式を使用できる任意の位置で使用できる。
【０５２６】
引数
以下に示すように引数を使って関数を定義できる。
ｆａｈｒ（ｘｘ）＝９*ｘｘ／５＋３２
ｉｎｒａｎｇｅ（ａａ，ｂｂ，ｃｃ）＝ａａ≦ｂｂ＄ａｎｄ＄ｂｂ≦ｃｃ
【０５２７】
上に定義されている「ｆａｈｒ（）」は、摂氏温度に対応する華氏温度を提供する。これは以下のように使用できる。
ｗｒｉｔｅ  １５°  ｃｅｌｓｉｕｓ  ｉｓ≪ｓ．ｆａｈｒ（１５）≫Ｆａｈｒｅｎｈｅｉｔ
【０５２８】
関数「ｉｎｒａｎｇｅ（）」は、１つの値が他の２つの値で指定された範囲内にあるかどうかを決定して真か偽を戻す。これは以下のように使用できる。
ｉｆ    ｉｎｒａｎｇｅ（１００，ｚｉｎｐｕｔｘ，２００）  ＄ａｎｄ＄  ｉ
ｎｒａｎｇｅ（１４０，ｚｉｎｐｕｔｙ，１８０）  ｗｒｉｔｅ  Ｇｏ
ｏｄ！  Ｙｏｕ  ｐｏｉｎｔｅｄ  ｉｎｓｉｄｅ  ｔｈｅ  ｂｏｘ．ｅ
ｎｄｉｆ
【０５２９】
この例は、（システム変数ｚｉｎｐｕｔｘ，ｚｉｎｐｕｔｙで指定された）最終入力ポインターが、反対側のかどが１００、１４０および２００、１８０の長方形内にあるかどうかをチェックする。
【０５３０】
引数を使用する関数を定義する一般構文を以下に示す。
ｎａｍｅ（ａｒｇ１，ａｒｇ２，．．．，ａｒｇｎ）＝ｅｘｐｒｅｓｓｉｏｎ
【０５３１】
引数には変数に有効な任意の名前を指定できるが、すでに定義されている変数名を重複して指定してはならない。変数名や定数名と競合が起きる引数名の使用を回避するために、ａａ，ｂｂのように文字をダブルで使用するオーサーが多い。
【０５３２】
オーサー定義関数の目的は、ソース・コードの判読性を向上させ、変更を簡単にすることにある。プログラムをバイナリー形式へ変換するとき、関数への各参照は定義の全長に拡張される。したがって、関数の使用は最終サイズやプログラムの効率にはまったく影響を与えない。
【０５３３】
定数への縮小
全体を評価して圧縮できるすべての整数型関数は、圧縮時に定数に縮小される（この章に前述されている「サブ数式の圧縮」の項を参照のこと）。以下に示す２つの定義は等価である。
ｌｅｎｇｔｈ＝４＋２５６＋１２８
ｌｅｎｇｔｈ＝３８８
簡単な関数の定数への縮小は、以下のような構造が可能になるので変数を定義するときに特に有効である。
ｄｅｆｉｎｅ      ｌｏｃａｌ
ＨＥＡＤＥＲ    ＝４
ＥＮＴＲＩＥＳ      ＝２０
ＬＥＮＧＴＨ        ＝ＨＥＡＤＥＲ  ＋  ＥＮＴＲＩＥＳ
ｌｉｓｔ（ＬＥＮＧＴＨ），１
ｄｅｆｉｎｅ        ｅｎｄ
【０５３４】
種類と長さ
リテラル、定数、変数と同じように、関数には対応する種類と長さがある。これらの要素は前述した数式評価規則に基づいて決定されるので、関数の値はかならず４バイトの整数、または、８バイトの実数である。ただし、ＴｅｎＣＯＲＥがすべての必要な種類の変換を自動的に実行するため、これは現実にはそれほど重要ではない。
【０５３５】
変数スペースの物理的割り当て
４章に説明されているグローバル変数とローカル変数間の特性および使用法の相違に相まって、これら２種類の変数はコンピューター・メモリーの別な物理セグメントへ記憶される。
【０５３６】
グローバル変数の記憶
グローバル変数は、ＴｅｎＣＯＲＥをスタートしたときに予約されるメモリー・セグメントを占め、ＴｅｎＣＯＲＥを終了するまで保持される。グローバル記憶に使用するメモリー・セグメントの数は１つしかない。すべてのｄｅｆｉｎｅｓブロックやｄｅｆｉｎｅ  ｇｌｏｂａｌステートメントは、この単一セグメントの初めから変数の記憶場所を割り当てる。
【０５３７】
システム定義変数ｚｖａｒｓｌは、グローバル変数に対して割り当てるメモリー・セグメントの長さを指示する。
【０５３８】
ローカル変数の記憶
ローカル変数は、変数が定義されているユニットに固有なメモリー・セグメントを占める。各ユニットはそれぞれ独自のローカル記憶セグメントを持ち、このセグメントはユニットがアクティブな間しか存在しない。セグメントは、ユニットの実行開始時にゼロに設定した状態で予約される。新規メイン・ユニットへ分岐するか、ユニットの終わりに到達するか、あるいはｒｅｔｕｒｎやｇｏｔｏ  ｑを使うことによってユニットを終了すると、当該ユニットのローカル変数用スペースは解放される。
【０５３９】
スペースの割り当て
１組のグローバルまたはローカル定義内では、記憶する連続バイトがグローバル・セグメントまたはローカル・セグメントの初めから順番に割り当てられる。以下に例を示す。
【表３】
2009009584.tif 000005
【０５４０】
以下の２つのシステム定義関数は、メモリー内の変数の位置を返す。
ｖａｒｌｏｃ（）  （ローカルまたはグローバル）変数スペース内のオフセット
を返す。
ａｂｓｌｏｃ（）  コンピューター・メモリー内の絶対位置を返す。
【０５４１】
上に示すそれぞれの変数の開始バイトは、以下のように表示される。
ａｔ        ５：５
ｗｒｉｔｅ  ｖａｒ１  ｓｔａｒｔｓ  ａｔ  ｂｙｔｅ  ≪ｓ，ｖａｒｌｏｃ（ｖ
ａｒ１）≫
ｖａｒ２  ｓｔａｒｔｓ  ａｔ  ｂｙｔｅ  ≪ｓ，ｖａｒｌｏｃ（ｖ
ａｒ２）≫
ｒｅａｌｖａｒ  ｓｔａｒｔｓ  ａｔ  ｂｙｔｅ≪ｓ，ｖａｒｌｏ
ｃ（ｒｅａｌｖａｒ）≫
ｕｓｅｒｎａｍｅ  ｓｔａｒｔｓａｔ  ｂｙｔｅ  ≪ｓ，ｖａｒｌ
ｏｃ（ｂｕｆｆｅｒ）≫
【０５４２】
ストレージ・バイトは次例に示すようにスキップできる。
ｖａｒ１，２
，４
ｖａｒ２，２
ここの４は、未使用の４バイトを割り当てる。
【０５４３】
絶対定義
以下のフォーマットを使用して、（ローカルまたはグローバル変数のどちらか該当する開始点からの）絶対オフセット位置に変数を定義できる。
＠ｏｆｆｓｅｔ，ｎａｍｅ，ｌｅｎｇｔｈ，ｔｙｐｅ
【０５４４】
フォーマット内の＠は、指定された位置から変数がスタートすることを示す。以下に例を示す。
＠０，ｆｉｒｓｔ，１              ＄＄変数スペースの最初のバイト
＠１０００，ｎａｍｅ，８，ｉ    ＄＄オフセット１０００における８バイトの
整数
【０５４５】
例にある変数「ｆｉｒｓｔ」は、以下に示すようにすべてのグローバル変数をゼロに設定するｚｅｒｏと組み合わせて使用できる。
ｚｅｒｏ  ｆｉｒｓｔ，ｚｖａｒｓ１
【０５４６】
うっかりしてｄｅｆｉｎｅｓブロック内の「ｆｉｒｓｔ」より手前に他の変数定義を挿入した場合でも、（ｄｅｆｉｎｅｓブロック内の最初に位置付けるのではなく）絶対位置に「ｆｉｒｓｔ」を定義することによって、オーサーはグローバル・ストレージの最初のバイトから常にｚｅｒｏコマンドをスタートさせることができる。
【０５４７】
絶対定義された変数のオフセットは、定義済み定数として指示できる。
ｌｏｃ＝２０００      ＄＄ｄｅｆｉｎｅｄ  ｃｏｎｓｔａｎｔ
＠ｌｏｃ，ｘｙｚ，ｒ    ＄＄”ｘｙｚ”  ｓｔａｒｔｓ  ａｔ  ｏｆｆｓｅｔ  ２
０００
【０５４８】
絶対定義を使用してもそれ以降の変数割り当てに影響を与えない。そのため、絶対変数定義を使用しない最後の変数の次から順番に割り当て処理が継続する。
【０５４９】
再定義
絶対定義に非常によく似ている手法が再定義である。再定義では、前に定義された変数と同じ位置からスタートするように変数が定義される。再定義フォーマットを以下に示す。
＠ｏｌｄｎａｍｅ，ｎｅｗｎａｍｅ，ｂｙｔｅｓ，ｔｙｐｅ
【０５５０】
上の＠の記号は、変数のｎｅｗｎａｍｅがｏｌｄｎａｍｅと同じ位置からスタートすることを指示する。以下に例を示す。
ｕｓｅｒｎａｍｅ，４０                    ＄＄ユーザーのフルネーム
＠ｕｓｅｒｎａｍｅ，ｕｓｅｒｃｈａｒ，１    ＄＄再定義された最初の文字／１
バイトの整数
【０５５１】
この例の変数「ｕｓｅｒｃｈａ」をｉｆと組み合わせて使用して、最初の文字（したがって、おそらく名前全体）がヌルかどうかをテストできる。
ｉｆ    ｕｓｅｒｃｈａｒ＝０
．      ｄｏ  ｇｅｔｎａｍｅ
ｅｎｄｉｆ
【０５５２】
絶対定義と同じように、再定義はそれ以降の変数割り当てに影響を与えない。そのため、再定義を使用していない最後の変数の次から順番に割り当て処理が継続する。
【０５５３】
セグメンテーション（区分化）
名前を指定して参照できるセグメントに変数を分割することができる。
ｄｅｆｉｎｅ      ｌｏｃａｌ
ｓｙｓｔｅｍ                            ，４
．                  ｈｏｕｒｓ          ，１
．                  ｍｉｎｕｔｅｓ      ，１
．                  ｓｅｃｏｎｄｓ      ，１
．                  ｈｕｎｄｒ          ，１
ｄｅｆｉｎｅ        ｅｎｄ
ｃｌｏｃｋ          ｓｙｓｔｉｍｅ
ａｔ                ３：３
ｗｒｉｔｅ          ｔｉｍｅ：≪ｓ，ｈｏｕｒｓ≫  ｈｒｓ，  ≪ｓ，ｍｉｎｕｔｅｓ≫  ｍｉｎ，  ≪ｓ，ｓｅｃｏｎｄｓ≫  ｓｅｃ
【０５５４】
上に示すように「ｓｙｓｔｉｍｅ」をセグメントに分割した状態では、バイトをまとめて（ｃｌｏｃｋコマンド時のように）参照するか、または、個々に（ｗｒｉｔｅコマンド時のように）参照できる。
【０５５５】
セグメントは、所属先変数定義のあとに定義しなければならない。最初の位置にピリオド、次に７スペース文字（１タブ）、最後にセグメント名とサイズを定義する。
【０５５６】
かならず２５６バイトのデータを使用する、ディスク・オペレーション用バッファの定義にセグメンテーションを使用する場合がある。
ｒｅｃｏｒｄ，２５６
．  ｎａｍｅ，４０
．  ｒｅｓｐｏｎｓｅ（６４），１
．  ｓｃｏｒｅ，４
ｔｉｍｅ，４
【０５５７】
ここで、「ｒｅｃｏｒｄ」は、セグメントが４０＋６４＋４または１０８バイトしか必要としない場合でも２５６バイトを予約する。このため、「ｔｉｍｅ」や他の隣接する変数に影響を与えることなく２５６バイトのディスク・レコードの内容を読むことができる。
【０５５８】
この例からわかるように、セグメントの合計がセグメント化された変数のフル・サイズになる必要はないが、通常、サイズを超過してはならない。
【０５５９】
セグメント化された変数を定義するときの字下げは１レベルに限定される。セグメントをそれ以上のサブセグメントに分割する必要がある場合は、セグメンテーションと再定義を組み合わせて実現できる。
ｕｓｅｒｉｄ，２０
．  ｕ．ｉｄ１，１０
．  ｕ．ｄｉｖ，１
．  ｕ．ｉｄ２，２１
＊＠ｕ．ｉｄ１，，１０    ＄＄ｕ．ｉｄ１の再定義
．  ｕ．ｉｄ１．ａ，１
．  ｕ．ｉｄ１．ｂ，９
【０５６０】
定義された変数は命名されていない。「ｘｕｉｄ１」のような固有な名前を指定することは可能であるが、目的が「ｕ．ｉｄ１」を（サブ）セグメント化することだけにあったため、名前を省略してより簡単にしている。
【０５６１】
変数内に使用しているピリオド（．）は、ピリオドを他の有効文字と同じように扱うＴｅｎＣＯＲＥにおいて特別な意味を持たないが、論理的構造を強調するのに有効である。
【０５６２】
配列のセグメンテーション
配列のセグメンテーションは、個々の（スカラー）変数のセグメンテーションに似ている。ただし、配列をセグメントに分割すると、配列のサイズが指定されていなくてもそれぞれのセグメント自体が配列になる。
ｄｅｆｉｎｅ        ｌｏｃａｌ
ｓｙｓｔｉｍｅ（３）                ，４
．                  ｈｏｕｒｓ      ，１
．                  ｍｉｎｕｔｅｓ  ，１
．                  ｓｅｃｏｎｄｓ  ，１
．                  ｈｕｎｄｒ      ，１
ｄｅｆｉｎｅ  ｅｎｄ
＊
ｃｌｏｃｋ          ｓｙｓｔｉｍｅ（１）
ｃｌｏｃｋ          ｓｙｓｔｉｍｅ（２）
ｃｌｏｃｋ          ｓｙｓｔｉｍｅ（３）
＊
ｗｒｉｔｅ  Ｔｈｅ  ｔｈｒｅｅ  ｔｉｍｅｓ  ａｒｅ：
≪ｓ，ｈｏｕｒｓ（１）≫  ｈｒｓ，≪ｓ，ｍｉｎｕｔｅｓ（１）≫  ｍｉｎ，≪ｓ，ｓｅｃｏｎｄｓ（１）≫  ｓｅｃｏｎｄｓ
≪ｓ，ｈｏｕｒｓ（２）≫  ｈｒｓ，≪ｓ，ｍｉｎｕｔｅｓ（２）≫  ｍｉｎ，≪ｓ，ｓｅｃｏｎｄｓ（２）≫  ｓｅｃｏｎｄｓ
≪ｓ，ｈｏｕｒｓ（３）≫  ｈｒｓ，≪ｓ，ｍｉｎｕｔｅｓ（３）≫  ｍｉｎ，≪ｓ，ｓｅｃｏｎｄｓ（３）≫  ｓｅｃｏｎｄｓ
【０５６３】
３要素を持つ配列として変数「ｓｙｓｔｉｍｅ（３）」を定義したため、「ｈｏｕｒｓ」、「ｍｉｎｕｔｅｓ」、「ｓｅｃｏｎｄｓ」や「ｈｕｎｄｒ」の各セグメントは配列として扱われ、カッコで囲んだ索引を使って参照される。
【０５６４】
特殊セグメンテーション
ａｎａｙｓのような特定の場合、定義された長さ以上に変数をセグメント化するとよい。これを行うと、通常、プログラムを実行する前にコンパイルした時にエラーが発生するが、セグメント定義のあとにキーワード「ｓｐｅｃｉａｌ（略記ｓ）」を追加することによって、元の変数の長さ以降のセグメント化チェックを省略できる。このキーワードには、デフォルト変数定義を使用できない。長さと種類を明示的に指定し、種類のあとにキーワードｓｐｅｃｉａｌを追加しなければならない。
【０５６５】
変数の終わり以降をセグメント化しても、変数へバイトが追加割り当てされることはない。特殊セグメントの定義後、最後に定義した変数の次の位置から残りの変数が開始する。
【０５６６】
例
以下に、２バイトの整数と８バイトの整数の混在するデータを含むデータ域を定義する方法を示す。個々のデータには後続データの種類を指示する１バイトの接頭辞が付く。
ｄａｔａ，８１９２
＠ｄａｔａ，ｂｕｆ１（８１９２），１
．  ｔｙｐｅ１，１，ｉ，ｓ  ＄＄接頭辞バイト
．  ｄａｔａ１，２，ｉ，ｓ  ＄＄すべてのバイトにおいて２バイト・ワードを
アクセス
＠ｄａｔａ，ｂｕｆ１（８１９２），１
．  ｔｙｐｅ２，１，ｉ，ｓ  ＄＄接頭辞バイト
．  ｄａｔａ２，８，ｉ，ｓ  ＄＄すべてのバイトにおいて８バイト・ワードを
アクセス
ｎｅｗｖａｒ，１    ＄＄「ｄａｔａ」のあと８１９２バイトをスタート
＄＄特殊セグメントによってｎｅｗｅｒを上書き
【０５６７】
個々のエントリーの開始バイトを知ることによって、種類を決定し、適正な変数名（「ｄａｔａ１」または「ｄａｔａ２」）を使って適正形式のデータをアクセスできる。次のエントリーは、索引を現エントリーの長さ（３または９）によって配列へインクリメントすることによって検索する。
【０５６８】
ブロック
セグメンテーションに似ているが規模的により大きい手法が変数ブロックである。変数ブロックを定義すると、変数スペースのセクションを予約する。変数ブロック内には、スカラー変数と配列変数を定義してセグメント化できる。
変数ブロックを定義する標準形式を以下に示す。
ｎａｍｅ，ｓｉｚｅ，ｂｌｏｃｋ
ここで、ｎａｍｅは変数に有効な任意の名前、ｓｉｚｅはブロック用として予約するバイト数、ｂｌｏｃｋはこれが変数ブロックであることを指示する（ｂｌｏｃｋはｂと略記可能）。
【０５６９】
以下に「ｄｉｓｋｉｏ」という名前の２５６バイトのブロックを定義する例を示す。
ｄｉｓｋｉｏ，２５６，ｂｌｏｃｋ  ＄＄ディスクＩ／Ｏ用２５６バイトのデー
タ域
，１０                            ＄＄１０バイト未使用
ｎａｍｅ，２０                    ＄＄ユーザー名
ｄａｔｅ，６                      ＄＄最後に使用した日付
ｔｉｍｅ，４                      ＄＄最後に使用した時間
．                                ｈｏｕｒｓ  ，１
．                                ｍｉｎｕｔｅ  ，１
．                                ｓｅｃｏｎｄｓ，１
．                                ｈｕｎｄ  ，１
ｓｃｏｒｅ，２                    ＄＄最近のテスト得点
ｓｔａｔｕｓ，２５６，ｂｌｏｃｋ  ＄＄次のブロックはここから始まる
【０５７０】
変数ブロックを定義すると、その定義から次の変数ブロックが定義されるまでのすべての変数定義は、定義されたブロックの一部になる。変数ブロック内の定義がブロックに対して予約されている以上のスペースを使用する場合は、コンパイル・エラーが発生する。
【０５７１】
変数ブロックの長さがわからない場合はｓｉｚｅ引数を空白のままにしておくことができる。この場合、その後定義するすべての変数を保持できるサイズが次のブロックを定義するまでの範囲内で提供される。
【０５７２】
ソース・ファイル間での定義の共有
プログラムが複数のソース・ファイルに分かれる場合、変数定義がファイル間で一致するよう注意しなければならない。これは、通常、すべてのグローバル定義を１ファイルにまとめ、以下のｕｓｅコマンドを使って定義コピーを他のファイルに含めることによって実現される。
ｔａｘ１，ｇｌｏｂａｌｓ（ｄｅｆｉｎｅｓ  ｂｌｏｃｋ）
ｌａｓｔｎａｍｅ，１５
ｆｉｒｓｔａｎａｍ，１０
ｍｉ，１
ｓｔｕｎｕｍ，９
ｐａ（６４），１
ｓｃｏｒｅ，４
ｔａｘ１ａ，ｇｌｏｂａｌｓ（ｄｅｆｉｎｅｓ  ｂｌｏｃｋ）
ｕｓｅ      ｔａｘ１，ｇｌｏｂａｌｓ
ｔａｘ１ｂ，ｇｌｏｂａｌｓ（ｄｅｆｉｎｅｓ  ｂｌｏｃｋ）
ｕｓｅ      ｔａｘ１，ｇｌｏｂａｌｓ
【０５７３】
この例では、ファイルｔａｘ１，ｔａｘ１ａ，ｔａｘ１ｂのすべての変数はｔａｘ１に定義される。ｔａｘ１ａとｔａｘ１ｂの中のｕｓｅコマンドは、ｔａｘ１にすでに存在する定義のコピーを含めるにすぎない。
【０５７４】
すべての定義ではなく一部の定義の共有
すべてのソース・ファイルが使用する変数の一部を定義し、さらに、個々のソース・ファイルが使用する変数を定義するとよい場合がある。すべてのグローバル変数にはメモリー域が１つしかないので、当然ながら個々のソース・ファイルの変数定義を一致させて、定義の矛盾が発生しないようにしなければならない。これは、変数ブロックと再定義を組み合わせて使用することによって実現できる。
【０５７５】
ｔａｘ１ａとｔａｘ１ｂに定義されている変数を追加することによってこの手法をファイルｔａｘ１，ｔａｘ１ａ，ｔａｘ１ｂへ適用する例を以下に示す。
ｔａｘ１，ｇｌｏｂａｌｓ（ｄｅｆｉｎｅｓ  ｂｌｏｃｋ）
ｌａｓｔｎａｍｅ，１５
ｆｉｒｓｔａｎａｍ，１０
ｍｉ，１
ｓｔｕｎｕｍ，９
ｐａ（６４），１
ｓｃｏｒｅ，４
＊
ｔａｘ１ａ，２０４８，ｂｌｏｃｋ
ｔａｘ１ｂ，２０４８，ｂｌｏｃｋ
ｔａｘ１ａ，ｇｌｏｂａｌｓ（ｄｅｆｉｎｅｓ  ｂｌｏｃｋ）
ｕｓｅ    ｔａｘ１，ｇｌｏｂａｌｓ
＊
＠ｔａｘ１ａ，ｏｗｎｖａｒｓ，２０４８，ｂｌｏｃｋ
＊
ｘｌｏｃ，２
ｙｌｏｃ，２
ｉｎｔｅｒｅｓｔ，８，ｒ
ｔａｘ１ｂ，ｇｌｏｂａｌｓ（ｄｅｆｉｎｅｓ  ｂｌｏｃｋ）
ｕｓｅ    ｔａｘ１，ｇｌｏｂａｌｓ
＊
＠ｔａｘ１ｂ，ｏｗｎｖａｒｓ，２０４８，ｂｌｏｃｋ
ｌｉｎｅ１１ａ，８，ｒ
ｌｉｎｅ１１ｂ，８，ｒ
ｌｉｎｅ１２，８，ｒ
【０５７６】
上の例では、３ファイル全部が使用する定義は２０４８バイトの変数ブロック「ｔａｘ１ａ」と「ｔａｘ１ｂ」を含んでいる。これらの変数ブロックは，同名のソース・ファイルに対して予約されたデータ域である。ソース・ファイルｔａｘ１ａとｔａｘ１ｂは、名前ｏｗｎｖａｒｓを使ってそれぞれ独自のブロックを再定義し、このブロック内に自分の変数を定義する。「ｏｗｎｖａｒｓ」をブロック変数にすると、ｔａｘ１ａとｔａｘ１ｂ内の変数定義がそれぞれに予約されたエリアに収まる。
【０５７７】
他の再定義変数とは異なり、再定義されたブロック変数は変数の割り当てに永久に影響する。ｔａｘ１ａが他のブロックを「ｏｗｎｖａｒｓ」以降に定義する場合、このブロックはｔａｘ１ｂに定義された変数と矛盾することになる。
【０５７８】
他のメモリー・セグメントのアクセス
ローカルおよびグローバル変数スペースではなく、メモリー域に記憶されているデータをアクセスするとよい場合がある。これは、ｔｒａｓｆｒやｅｘｃｈａｎｇコマンドを使って実現できる。
ｔｒａｎｓｆｒ
ｔｒａｎｓｆｒコマンドは、データをある位置から他の位置へ転送する。コマンドの一般形式を以下に示す。
ｔｒａｎｓｆｒ  ｆｒｏｍ−ｂａｓｅ−ａｄｄｒｅｓｓ，ｏｆｆｓｅｔ；ｔｏ−ｂａｓｅ−ａｄｄｒｅｓｓ，ｏｆｆｓｅｔ；ｌｅｎｇｔｈ
ｆｒｏｍ−ｂａｓｅもｔｏ−ｂａｓｅも以下のキーワードからでなければならない。
●ｒｏｕｔｖａｒｓ，ｒ
ルーター変数。これは構造化されていない特別な２５６バイトのバッファで、ｔｒａｎｓｆｒとｅｘｅｃｈａｎｇからしかアクセスできない。ルーター・バッファは、通常、レッスンが使用しないデータ領域を提供する。このバッファは、アクティビティー・マネージャーが利用するユーザー・パフォーマンス・データの保持などに使用される。
●ｄｉｓｐｌａｙ，ｄ
ＣＧＡ画面表示メモリー。なお、（ＥＧＡやＶＧＡなど）他の表示タイプの表示メモリーは、ｔｒａｎｓｆｒを使ってアクセスできない。
●ｇｌｏｂａｌ，ｇ
グローバル変数
●ｌｏｃａｌ，ｌ
ローカル変数
●ｓｙｓｖａｒｓ，ｓ
システム・データ域。注意：この領域をデータの記憶に使用しないこと。
●ｓｙｓｐｒｏｇ，ｐ
システム・プログラム域。注意：この領域をデータの記憶に使用しないこと。
●ａｂｏｌｕｔｅ，ａ
絶対メモリー域
【０５７９】
ルーター変数をローカル変数へ転送して生徒のサインーオン名を表示する例を以下に示す。
ｄｅｆｉｎｅ  ｌｏｃａｌ
ｌｏｃａｌｒ，２５６
．  ｉｎｆｏ，８
．  ｎａｍｅ，２０００
ｄｅｆｉｎｅ  ｅｎｄ
ｔｒａｎｓｆｒ  ｒｏｕｔｖａｒｓ，０；ｌｏｃａｌ，ｖａｒｌｏｃ（ｌｏｃａｌｒ）；２５６
ａｔ  １０：５
ｗｒｉｔｅ  Ｔｈｅ  ｓｔｕｄｅｎｔ  ｎａｍｅ  ｉｓ  ≪ａ，ｎａｍｅ≫
【０５８０】
ｅｘｃｈａｎｇ
ｅｘｃｈａｎｇコマンドはｔｒａｎｓｆｒコマンドに似ているが、メモリーの２つの領域をスワップする。
【０５８１】
以下のコードはｅｘｃｈａｎｇコマンドを使って１組の２バイト変数をスワップする。
ｉｆ  ｘ１＜ｘ０
．  ｅｘｃｈａｎｇ  ｇ，ｖａｒｌｏｃ（ｘ０）；ｇ，ｖａｒｌｏｃ（ｘ１）；２
ｅｎｄｉｆ
【０５８２】
上のコードは以下と同等であるがより簡単である。
ｉｆ      ｘ１＜ｘ０
．                ｃａｌｃ  ｔｅｍｐ(ｘ０
ｘ０    (ｘ１
．                ｘ１(ｔｅｍｐ
ｅｎｄｉｆ
【０５８３】
絶対メモリーのアクセス
ｔｒａｎｓｒとｅｘｃｈａｎｇコマンドは、コンピューターのすべての絶対メモリー・アドレスをアクセスするのにも使用できる。このアクセスは、ベース・アドレス・キーワードａｂｓｏｌｕｔｅを使って実現できる。その場合、４バイト整数位置にオフセットされる。
絶対メモリー位置との転送に有効な関数として、変数のメモリー内絶対位置を返すａｂｓｏｌｏｃ（）がある。この関数は以下に示すように、データ位置をライブラリ・ルーチンへ渡すのによく使用される。
ｐａｃｋ  ｎａｍｅ；ｎａｍｅｌｅｎ；Ｗｅｎｄｅｌｌ  Ｏｌｉｖｅｒ  Ｈｏｌｍｅｓ
ｌｉｂｒａｒｙ  ｍｃｌｉｂ，ａｎｓｗｅｒ（ａｂｓｏｌｏｃ（ｎａｍｅ），ｎａｍｌｅｎ）
【０５８４】
ここでａｂｓｌｏｃ（）を使用する利点は、ローカルとグローバルのどちらのセグメントにデータがあるかをユニットｍｃｌｉｂ，ａｎｓｗｅｒが知らなくてすむことにある。理由は、関数がデータを絶対メモリー位置から直接コピーできるからである。
【０５８５】
絶対アドレスに関するテクニカル・ノート
ａｂｓｌｏｃ（）関数は、連続する整数範囲の４バイトの値を返す。ａｂｓｌｏｃ（）値を、ＤＯＳ関数へデータを渡すのに必要なｓｅｇｍｅｎｔ：ｏｆｆｓｅｔ形式へ変換するには、以下の計算を使用できる。
ｄｅｆｉｎｅ  ｌｏｃａｌ
ｔｅｍｐ        ，４
ｓｅｇｍｅｎｔ  ，２
ｏｆｆｓｅｔ    ，２
ｄｅｆｉｎｅ  ｅｎｄ
ｃａｌｃ  ｔｅｍｐ        (ａｂｓｌｏｃ（ｍｙｖａｒ）
ｓｅｇｍｅｎｔ  (ｔｅｍｐ＄ａｒｓ＄４
ｏｆｆｓｅｔ    (ｔｅｍｐ＄ｍａｓｋ＄  ｈｏｏｆ  ＄＄余分な０
が必要
【０５８６】
この計算からは、最高セグメント・アドレスと最低オフセット・アドレスを得られる。
【０５８７】
既存ｓｅｇｍｅｎｔ：ｏｆｆｓｅｔアドレスから絶対整数アドレスへ移動するための計算を以下に示す。
ｃａｌｃ  ｓｅｇｍｅｎｔ(ｓｙｓｌｏｃ（ｇｌｏｂａｌ）  ＄＄またはローカ
ル
ｏｆｆｓｅｔ  (ｖａｒｌｏｃ（ｖａｒｉａｂｌｅ）  
ｔｅｍｐ      (（（ｓｅｇｍｅｎｔ  ＄ｍａｓｋ＄  ｈ００００
ｆｆｆｆ）  ＄ｃｌｓ４＄  ４）＋
（ｏｆｆｓｅｔ＄ｍａｓｋ＄ｈ００００ｆｆｆｆ）
【０５８８】
メモリー・プールのアクセス
データは、以下に示すように変数からＴｅｎＣＯＲＥメモリー・プールへも転送できる。
ｍｅｍｏｒｙ  ｗｒｉｔｅ，ｍｅｍｐｏｏｌ，ｍｏｆｆｓｅｔ，ｂｉｇｂｕｆ，ｂｕｆｓｉｚｅ
【０５８９】
ここで、ｗｒｉｔｅは転送方向を指示するキーワード、「ｍｅｍｐｏｏｌ」はメモリー・プール・ブロック名、「ｍｏｆｆｓｅｔ」はメモリー・プール・ブロックへのオフセット、「ｂｉｇｂｕｆ」は転送開始点における変数、「ｂｕｆｓｉｚｅ」は転送対象バイト数である。
【０５９０】
キーワードｗｒｉｔｅは転送が変数スペースからメモリー・プールへであることを指示し、ｒｅａｄはメモリー・プールから変数スペースへ転送し、ｅｘｃｈａｎｇｅは２つの内容を交換する。
【０５９１】
このトピックまたは一次や二次メモリー・プールの詳細については、ｍｅｍｏｒｙコマンドを参照のこと。
【０５９２】
コマンド・リスト
段落番号
ａｒｅａ                                                    ０５９３
ａｓｍｃａｌｌ                                              ０６８２
ａｔ／ａｆｆ                                                ０６９１
ｂｅｅｐ                                                    ０７０２
ｂｌｏｃｋ                                                  ０７０８
ｂｏｘ                                                      ０７１５
ｂｒａｎｃｈ                                                ０７２５
ｃａｌｃ                                                    ０７２９
ｃａｌｃｃ                                                  ０７３６
ｃａｌｃｓ                                                  ０７４４
ｃｉｒｃｌｅ                                                ０７５０
ｃｌｅａｒｕ                                                ０７５９
ｃｌｏｃｋ                                                  ０７６８
ｃｏｌｏｒ                                                  ０７７４
ｃｏｌｏｒｅ                                                ０７８８
ｃｏｍｐｕｔ                                                ０８０５
ｄａｔｅ                                                    ０８１１
ｄｅｂｕｇ                                                  ０８１６
ｄｅｖｉｃｅ                                                ０８２２
ｄｉｓａｂｌｅ                                              ０８２７
ｄｏ                                                        ０８４５
ｄｏｔ                                                      ０８５６
ｄｒａｗ                                                    ０８６３
ｅｌｌｉｐｓｅ                                              ０８７１
ｅｌｓｅ                                                    ０８７６
ｅｌｓｅｉｆ                                                ０８８０
ｅｎａｂｌｅ                                                ０８８３
ｅｎｄｉｆ                                                  ０９０２
ｅｎｄｌｏｏｐ                                              ０９０５
ｅｒａｓｅ                                                  ０９１０
ｅｒｒｏｒ                                                  ０９１９
ｅｘｃｈａｎｇ                                              ０９２６
ｅｘｅｃ                                                    ０９４２
ｅｘｉｔｓｙｓ                                              ０９５９
ｅｘｔｉｎ                                                  ０９６４
ｅｘｔｏｕｔ                                                ０９７０
ｆｉｌｌ                                                    ０９７６
ｆｉｎｄ                                                    ０９８２
ｆｌｏｗ                                                    ０９９８
ｆｏｎｔ                                                    １０７５
ｇｏｔｏ                                                    １１２８
ｉｆ                                                        １１３３
ｉｍａｇｅ                                                  １１４２
ｉｎｉｔｉａｌ                                              １１８７
ｉｎｔｃａｌｌ                                              １１９９
ｌｏａｄｕ                                                  １２３５
ｌｏｏｐ                                                    １２４０
ｍｅｍｏｒｙ                                                １２５０
ｍｏｄｅ                                                    １２８５
ｍｏｖｅ                                                    １３０７
ｎｅｘｔｋｅｙ                                              １３１１
ｎｏｃｈｅｃｋ                                              １３２２
ｏｐｅｒａｔｅ                                              １３２６
ｏｒｉｇｉｎ                                                １３３７
ｏｕｔｌｏｏｐ                                              １３４６
ｐａｃｋ，ｐａｋｚ，ｐａｃｋｃ，ｐａｃｋｚｃ                １３５１
ｐａｇｅ                                                    １３６７
ｐａｌｅｔｔｅ                                              １３７７
ｐａｕｓｅ                                                  １３９７
ｐｅｒｍ                                                    １４３０
ｐｏｌｙｇｏｎ                                              １４５８
ｐｒｅｓｓ                                                  １４６４
ｐｒｉｎｔ                                                  １４７５
ｐｕｔ                                                      １４９０
ｒｅｃｅｉｖｅ                                              １４９９
ｒｅｌｏｏｐ                                                １５０８
ｒｅｔｕｒｎ                                                １５１３
ｒｏｔａｔｅ                                                １５２３
ｓｃａｌｅ                                                  １５３３
ｓｃｒｅｅｎ                                                １５４２
ｓｅｅｄ                                                    １５６１
ｓｅｔ                                                      １５６７
ｓｅｔｂｉｔ                                                １５７３
ｓｅｔｃ                                                    １５７９
ｓｈｏｗ                                                    １５８６
ｓｈｏｗａ                                                  １５９４
ｓｈｏｗｈ                                                  １６００
ｓｈｏｗｔ                                                  １６０５
ｓｈｏｗｖ                                                  １６１２
ｓｔａｔｕｓ                                                １６１７
ｔｅｘｔ                                                    １６３９
ｗｉｄｔｈ                                                  １７１１
ｗｉｎｄｏｗ                                                １７１６
ｗｒｉｔｅ                                                  １７３８
ｗｒｉｔｅｃ                                                １７５０
ｚｅｒｏ                                                    １７５６
【０５９３】
ａｒｅａ
ポインタの入力エリアをマネージする。
ａｒｅａ  キーワード;...
ｄｅｆｉｎｅ          ポインタ・エリアを定義する。
ｈｉｇｈｌｉｇｈｔ    強調のタイプと色を指定する。
ｄｉｓａｂｌｅ        現在のポインタ・エリアを一時的に非アクティブにす
る。
ｅｎａｂｌｅ          ディセーブルしたポインタ・エリアを再びアクティブ
にする。
ｃｌｅａｒ            現在のポインタ・エリアを削除する。
ｓｅｌｅｃｔ          ポインタ・エリアを強調する。
ｓａｖｅ              現在のポインタ・エリアを名前を付けてメモリ・ブロ
ックにセーブする。
ｒｅｓｔｏｒｅ        指定した名前のメモリ・ブロックからポインタ・エリ
アを復元
ｄｅｌｅｔｅ          指定した名前のポインタ・エリアのメモリ・ブロック
を削除。
ｒｅｓｅｔ            名前を付けた全ポインタ・エリアのメモリ・ブロック
を削除。
ｔｏｇｇｌｅ          ポインタ・エリアの強調、非強調を切り替える。
ｉｎａｒｅａ          ポインタ・エリア内のロケーションであるか否かを判
断する。
ｄｉｒ                アクティブになっているポインタ・エリアの識別子の
リストを返す。
ｋｅｙ                指定キーのエリア識別子を返す。
ｉｎｆｏ              ポインタ・エリアに関連する属性をレポートする。
ｒｅｐｏｓ            ウィンドウ内のすべてのポインタ・エリアを再配置す
る。
【０５９４】
説明
スクリーンの定義済みエリア内のポインタ入力を容易にする。ポインタ・エリアの定義後は、当該エリア内での「クリック」もしくは他のポインタ・アクションにより、キーボードのキーが押された場合とまったく同じに、特定の入力値が生成される。適切なコーディングを行えば、この種の入力によって他のユニットへの「ｆｌｏｗ」（フロー）分岐のトリガ、「ｐａｉｓｅ」（ポーズ）の中止、「ａｒｒｏｗ」（入力プロンプト）におけるタイピング、あるいはその他の希望するアクションを生じさせることができる。
【０５９５】
最大５０のポインタ・エリアが存在できるが、この数は、「／ｓａ＝」コマンド行オプションを用いて増加することができる。現在の定義済みポインタ・エリアの数は、システム変数「ｚａｒｅａｃｎｔ」に格納される。「ｚｍａｘａｒｅａ」は、許容されたエリアの最大数を保持する。
【０５９６】
「ａｒｅａ」定義は、新しいメイン・ユニットに対する「ｊｕｍｐ」分岐が生成されるとクリアされる。新しいメイン・ユニットに関する初期化の一部として、「ａｒｅａ」のデフォルト・セットがアクティブになる。「ａｒｅａ」定義は、ウィンドウを開くとセーブされ、ウィンドウを閉じると「ｗｉｎｄｏｗ  ｃｌｏｓｅ」において「ｎｏａｒｅａ」を使用していない限り直前の状態に復元される。
【０５９７】
ポインタ・エリアの強調および非強調は、エリア内にポインタが入るとき、またはそこから出るとき、それに応じて自動的に設定することができる。現在のポインタ・エリアは、その特性とともに、名前を指定したメモリ・ブロック内にセーブすることが可能であり、この名前を使用してそのアクティブと非アクティブを切り替えることができる。またポインタ・エリアを一時的にディセーブルし、イネーブルすることができる。
【０５９８】
ａｒｅａ  ｄｅｆｉｎｅ；[ロケーション]; [ロケーション]; 
[アクション＝KEY,    アクション＝KEY...]
対角が２つのロケーションによって識別される矩形のスクリーン・エリアであって、その内側において、リストされたポインタのアクションがあると対応する入力キーを生成するエリアを定義する。定義済みのアクションおよびキー値を伴うポインタ・エリアは、続く行に継続することができる。
【０５９９】
次に示すポインタ・アクションは入力値を生成することができる。各ポインタ・アクションは、独自のキーワードを有する。
ｃｌｉｃｋ＝                いずれかのポインタ・ボタンが押された。
ｌｅｆｔ＝，  ｒｉｇｈｔ＝  左または右のポインタ・ボタンが押された。
ｃｌｉｃｋｕｐ＝            いずれかのポインタ・ボタンが放された。
ｌｅｆｔｕｐ＝，  ｒｉｇｈｔｕｐ＝  左または右のポインタ・ボタンが放さ
れた。
ａｄｄ＝，  ｓｕｂ＝       ２番目のボタンが押された、または放された。
ｅｎｔｅｒ＝，  ｅｘｉｔ＝  ポインタがエリアに入った、またはエリアから
出た。
【０６００】
「ｌｅｆｔ」または「ｒｉｇｈｔ」が使用されているときは「ｃｌｉｃｋ」を使用することはできない。「ｌｅｆｔｕｐ」または「ｒｉｇｈｔｕｐ」が使用されているときは「ｃｌｉｃｋｕｐ」を使用することはできない。「ｃｌｉｃｋ＝」が唯一の指定されたアクションであるとき、キーワード「ｃｌｉｃｋ＝」を省略することができる。
【０６０１】
「ＫＥＹ」は、「ａ」「ｂ」「ｃ」「％ｆ１」等の通常のキー値、または疑似キー「％ｉｎｐｕｔ１」〜「９９９」の１つとすることができる。
【０６０２】
例１
１０：２０；  １１：３０によって定義されるエリア内でボタンがクリックされたとき、値「％ｅｎｔｅｒ」を入力する。この場合、キーワード「ｃｌｉｃｋ＝」は省略することができる（ｃｌｉｃｋ＝％ｅｎｔｅｒ）。続く「ｆｌｏｗ」コマンドは、「ａｒｅａ」の入力（クリック）に応答してユニット「ｎｅｘｔｕｎｉｔ」への「ｊｕｍｐ」すなわちジャンプを生じさせる。
ａｒｅａ      ｄｅｆｉｎｅ；  １０：２０；  １１：３０；  ％ｅｎｔｅｒ
ｆｌｏｗ      ｊｕｍｐ；  ％ｅｎｔｅｒ；  ｎｅｘｔｕｎｉｔ
【０６０３】
例２
左ボタンが押されたとき値「％”Ｌ”」、右ボタンが押されたとき値「％”Ｒ”」を入力する。
ａｒｅａ      ｄｅｆｉｎｅ；  １００，２００；  ３００，２５０；  ｌｅｆｔ＝Ｌ，  ｒｉｇｈｔ＝Ｒ
【０６０４】
例３
５：３；  ６：１０によって定義されるエリア内にポインタが入ると疑似キー「％ｉｎｐｕｔ９９９」を入力する。このエリア内で左ボタンが放されると「％ｆ１０」が生成される。
ａｒｅａ      ｄｅｆｉｎｅ；  ５：３；  ６：１０；  ｌｅｆｔｕｐ＝％ｆ１０，  ｅｎｔｅｒ＝％ｉｎｐｕｔ９９９
【０６０５】
例４
スクリーン全体をポインタ・エリアとして定義する。右ボタンのクリックは、疑似キー「％ｏｔｈｅｒ」の入力となる。
ａｒｅａ      ｄｅｆｉｎｅ；  ；  ；  ｒｉｇｈｔ＝％ｏｔｈｅｒ
【０６０６】
例５
１０：１０から３０文字２行分の矩形エリアを定義する。この中でのポインタ・ボタンのクリックは「％ｆ１」キー入力となる。
ａｔ        １０：１０
ａｒｅａ      ｄｅｆｉｎｅ；  ３０，２；  ；  ｃｌｉｃｋ＝％ｆ１
【０６０７】
例６
固定または可変文字間隔を考慮したテキスト「Ｔｏｐｉｃ  １  ：  Ｉｎｔｒｏｄｕｃｔｉｏｎ」つまり「トピック１：始めに」という意味の英文の周囲に矩形エリアを定義する。エリア内でクリックがあると「％”１”」を入力する。
ａｔ        １５：１０
ｗｒｉｔｅ    Ｔｏｐｉｃ  １  ：  Ｉｎｔｒｏｄｕｃｔｉｏｎ
ａｒｅａ      ｄｅｆｉｎｅ；  １５：１０；  ｚｘ，  ｚｙ＋ｚｆｏｎｔｈ；  ｃｌｉｃｋ＝％”１”
【０６０８】
例７
２行にわたって続ける。
ａｒｅａ      ｄｅｆｉｎｅ；  ２００，１５０；  ４００，１７０；  ｌｅｆｔ＝ａ，  ｒｉｇｈｔ＝％ｈｏｍｅ，
ｌｅｆｔｕｐ＝ｂ，  ｒｉｇｈｔｕｐ＝  ＜＜ｈｏ１＞＞  ，ｅｎｔｅｒ＝％ｉｎｐｕｔ１，  ｅｘｉｔ＝％ｉｎｐｕｔ２５５
【０６０９】
ａｒｅａ  ｄｅｆｉｎｅ； [ロケーション]; [ロケーション]; [アクション＝ＫＥＹ， 
アクション＝ＫＥＹ...] [;修飾子;修飾子 ...]
【０６１０】
修飾子
次に示す修飾子は、「ａｒｅａ  ｄｅｆｉｎｅ」ステートメントのオプションとして使用することができる。任意数の修飾子が使用可能であり、リストする順序も任意でよい。ただし「ｓｅｔｉｄ」と「ｇｅｔｉｄ」を同時には使用できない。
【０６１１】
ｄｅｆａｕｌｔ
続くすべてのメイン・ユニットに関するアクティブのポインタ・エリアを保存する。（通常、スクリーンをイレースする新しいメイン・ユニットへの分岐は、すべてのポインタ・エリアをクリアする。）「Ｄｅｆａｕｌｔ  Ａｒｅａ  Ｈｉｇｈｌｉｇｈｔｉｎｇ」の説明も参照されたい。
【０６１２】
ｐｒｉｏｒｉｔｙ
オーバーラップしているエリアに関して優先順を設定するために、０から１５までの優先順位を割り当てる。レベル１５がもっとも優先される。
優先順位が設定されていないエリアには、レベル０が割り当てられる。オーバーラップしている２ないし３以上のポインタ・エリア内でポインタのアクティビティが発生した場合、もっとも優先順位の高いエリアが優先される。オーバーラップしているエリアが同一のレベルを有するときは、もっとも新しく定義されたエリアが優先される。
【０６１３】
ｇｅｔｉｄ
ポインタ・エリアが定義されたとき、システムによって自動的に生成される２バイトの固有のポインタ・エリア識別子を保持する変数を指定する。システムが生成する識別子は必ず−３２，７６８から−１までの負数になる。このＩＤは、「ａｒｅａ」コマンドの形で特定のエリアの識別に使用され、システム変数「ｚｉｎｐｕｔａ」に返される。
【０６１４】
ｓｅｔｉｄ
ポインタ・エリアの固有識別子になる数を指定する。オーサー指定識別子は、１から３２，７６７までの値とし、システム生成識別子との衝突を避けなければならない。現存するポインタ・エリアの識別子と同じ識別子を持つポインタ・エリアの定義は、現存するポインタ・エリアの再定義となる。このＩＤは、「ａｒｅａ」コマンドの形で特定のエリアの識別に使用され、システム変数「ｚｉｎｐｕｔａ」に返される。
【０６１５】
例１
新しいメイン・ユニットに入ったときのポインタ・エリア定義を「ｄｅｆａｕｌｔ」（デフォルト）エリアにする。このエリアは、変数「ａｒｅａＩＤ」が受け取るＩＤを使用して参照することができる。
ａｒｅａ      ｄｅｆｉｎｅ；  ５：１０；  １０：２５；  ｌｅｆｔ＝ｂ，  ｒｉｇｈｔ＝Ｂ；  ｄｅｆａｕｌｔ；  ｇｅｔｉｄ  ａｒｅａＩＤ
【０６１６】
例２
ポインタが矩形エリア内にあるとき、いずれかのボタンが押されると疑似キー「％ｉｎｐｕｔ１」を入力する。このエリアは、ＩＤ値「１」により参照することができる。
ａｒｅａ      ｄｅｆｉｎｅ；  １００，１００；  ２００，１１０；  ％ｉｎｐｕｔ１；  ｓｅｔｉｄ，１
【０６１７】
例３
ポインタが矩形エリア内に入ると１６進数「７０００」の入力を生成する。このエリアとオーバーラップする優先順位の低い他のポインタ・エリアがある場合にこのエリアを優先させるために、このエリアには最高位の優先レベルを持たせる。
ａｒｅａ      ｄｅｆｉｎｅ；  ４００，１５０；  ４５０，２００；  ｅｎｔｅｒ＝＜＜ｈ７０００＞＞  ；    ｐｒｉｏｒｉｔｙ，  １５
【０６１８】
ａｒｅａ  ｈｉｇｈｌｉｇｈｔ；  カラー  ｜  ｏｆｆ  ［；  ｘｏｒ］  ［ｔｒａｃｋ  ｜  ｔｏｇｇｌｅ］
続くすべてのポインタ・エリアの強調色をコントロールする。デフォルトでは強調がオフになる。単独の「ａｒｅａ  ｈｉｇｈｌｉｇｈｔ」ステートメントは、それに続くすべての「ａｒｅａ  ｄｅｆｉｎｅ」ステートメントに影響を与えるが、すでに定義済みのポインタ・エリアは影響されない。なお、この強調は「ｉｎｉｔｉａｌ」ステートメントによって「ｏｆｆ」にリセットされる。
【０６１９】
システム変数「ｚａｒｅａｈｌ」は、現在強調されているエリアのエリアＩＤ（強調されているエリアがないときは０）を保持している。
【０６２０】
所定色の強調は、スクリーン・エリア上の色とのエクスクルーシブオア（ＸＯＲ）モードでボックスをプロットすることによって生成される。スクリーンを希望強調色にＸＯＲするボックスの色の決定にはスクリーン・エリアの左上のピクセルが使用される。
【０６２１】
修飾子
次に示す修飾子は、「ａｒｅａ  ｈｉｇｈｌｉｇｈｔ」ステートメントのオプションとして使用することができるが、色の指定を行うときに限られる。ただし「ｔｒａｃｋ」と「ｔｏｇｇｌｅ」は、同時に使用できない。
【０６２２】
ｘｏｒ
ポインタ・エリアが、指定色とスクリーンの直接的なＸＯＲによって強調されることを指定する。
【０６２３】
ｔｒａｃｋ
ポインタが、強調がイネーブルになっている他のエリア内に入ったときに限り、現在のエリアを非強調にする。
【０６２４】
ｔｏｇｇｌｅ
自動エリア強調をディセーブルし、オーサー・コントロールの強調を許可する（「ａｒｅａ  ｔｏｇｇｌｅ」参照）。
【０６２５】
デフォルト・エリアの強調
デフォルト・エリアが有効であり、「ｊｕｍｐ」タイプの分岐を介してメイン・ユニットに入ったときは、次に示すいずれかのイベントの後でなければ強調が行われない。
●分岐コマンドが実行される（ｌｏｏｐ、ｊｕｍｐ、ｊｕｍｐｏｐ、ｂｒａｎｃｈ、ｄｏｔｏ、ｇｏｔｏ）。
●入力がシステムから要求される（ｐａｕｓｅ、ａｒｒｏｗ、
ｎｅｘｔｋｅｙ、ｄｅｌａｙ）。
●エンド・オブ・ユニット（ユニット終了）に到達。
●実行に長時間を要する可能性のある特定のコマンドが実行される
（ｉｍａｇｅ、ｆｉｌｌ）。
●キーワード「ａｒｅａ」「ｐｏｉｎｔｅｒ」または「ｂｒｅａｋ」を伴う「ｅｎａｂｌｅ」  
コマンドが実行される。
【０６２６】
これらは、ポインタ・ポジションのチェック・ポイント、つまりポインタが強調エリアに入ったこと、またはそこから出たことを調べるチェック・ポイントと同じである。
【０６２７】
このイベントの発生を待つという遅延は、オーサーに、強調を希望するスクリーン上の表示を獲得する時間を与える。スクリーンを構成する前に分岐が必要な場合、あるいは入力が必要な場合、オーサーはまず、「ｄｉｓａｂｌｅ  ａｒｅａ」ステートメントを生成して強調をディセーブルしなければならない。スクリーンを構成した後、「ｅｎａｂｌｅ  ａｒｅａ」を使用すれば強調がオンになる。
【０６２８】
例１
明るいレッド（ｒｅｄ＋）の強調エリアを作成する。これは、ＸＯＲの参照色としてエリアの左上コーナーを使用する。つまり、２５０，３２０（エリアの左上コーナー）のピクセルの色を使用し、明るいレッドを生成するためにこのエリアとＸＯＲする色を決定する。
ａｒｅａ      ｈｉｇｈｌｉｇｈｔ；  ｒｅｄ＋
ａｒｅａ      ｄｅｆｉｎｅ；  ２５０，３００；  ４００，３２０；  ｃｌｉｃｋ＝％ｆ１０
【０６２９】
例２
これ以降に定義されるすべてのポインタ・エリアの強調をオフにする。
ａｒｅａ      ｈｉｇｈｌｉｇｈｔ；  ｏｆｆ
【０６３０】
例３
これ以降に定義されるポインタ・エリアをブルーとＸＯＲする。エリアはポインタがそのエリアに入ると強調され、別のエリアに入るまで強調が解除されない。
ａｒｅａ      ｈｉｇｈｌｉｇｈｔ；  ｂｌｕｅ；  ｘｏｒ；  ｔｒａｃｋ
【０６３１】
例４
自動エリア強調をディセーブルする。これらのエリアを強調するためには、「ａｒｅａ  ｔｏｇｇｌｅ」を使用することができる。
ａｒｅａ      ｈｉｇｈｌｉｇｈｔ；  ｗｈｉｔｅ；  ｔｏｇｇｌｅ
【０６３２】
ａｒｅａ  ｄｉｓａｂｌｅ；  ［；  ａｒｅａＩＤ／ｓ］  ［；  ｎｏｐｌｏｔ］
指定した識別子を有するポインタ・エリアを一時的にディセーブルする。キーワード「ｄｉｓａｂｌｅ」の単独使用は、すべての定義済みエリアを一時的にディセーブルする。ディセーブルされたポインタ・エリアは、ポインタ入力を生成することもなく、強調が行われることもない。ポインタ・エリアが強調されているときディセーブルされると、「ｎｏｐｌｏｔ」修飾子がない限りは強調がオフになる。
【０６３３】
例１
変数「ｉｄｖａｒ」内に格納されている識別子で示されるポインタ・エリアをディセーブルする。ただしそのポインタ・エリアが現在強調されていれば、強調されたままになる。
ａｒｅａ      ｄｉｓａｂｌｅ；  ｉｄｖａｒ；  ｎｏｐｌｏｔ
【０６３４】
例２
識別子が１と２のポインタ・エリアをディセーブルする。
ａｒｅａ      ｄｉｓａｂｌｅ；  １，２
【０６３５】
例３
すべてのポインタ・エリアを一時的にディセーブルする。
ａｒｅａ      ｅｎａｂｌｅ
【０６３６】
ａｒｅａ  ｅｎａｂｌｅ  ［；  ａｒｅａＩＤ／ｓ］
これ以前に「ａｒｅａ  ｄｉｓａｂｌｅ」によってディセーブルされたポインタ・エリアをイネーブルする。
【０６３７】
例１
配列の要素「ａｒｅａＩＤ（１），  ａｒｅａＩＤ（２），  ａｒｅａＩＤ（３）」内に格納されている識別子で示されるポインタ・エリアをイネーブルする。
ａｒｅａ      ｅｎａｂｌｅ；  ａｒｅａＩＤ（１），  ａｒｅａＩＤ（２），  ａｒｅａＩＤ（３）
【０６３８】
例２
すべてのポインタ・エリアをイネーブルする。
ａｒｅａ      ｅｎａｂｌｅ
【０６３９】
ａｒｅａ  ｃｌｅａｒ  ［；  ［ａｒｅａＩＤ／ｓ］  ［；  ｎｏｐｌｏｔ］  ［；  ｄｅｆａｕｌｔ］］
「ｃｌｅａｒ」をエリア識別子とともに使用すると、指定したポインタ・エリアが削除される。エリア識別子なしで使用すると「ｃｌｅａｒ」によって、すべてのエリアが削除される。エリアのクリア（削除）は、イネーブル／ディセーブルに関係なく行われる。
【０６４０】
ポインタ・エリアが強調されているときそれがクリアされると、「ｎｏｐｌｏｔ」を使用していない限り強調がオフになる。
【０６４１】
「ｄｅｆａｕｌｔ」修飾子は、「ｄｅｆａｕｌｔ」修飾子を伴ってセットされたすべてのエリア定義を削除するとき使用する。
【０６４２】
例１
変数「ＩＤ１」および「ＩＤ２」内に格納されている識別子で示されるポインタ・エリアを削除する。
ａｒｅａ      ｃｌｅａｒ；  ＩＤ１，  ＩＤ２
【０６４３】
例２
すべてのポインタ・エリアを削除する。これに続く「ｊｕｍｐ」分岐は、すべての「ｄｅｆａｕｌｔ」ポインタ・エリアを復元させる。
ａｒｅａ      ｃｌｅａｒ
【０６４４】
例３
スクリーン全体からすべてのポインタ・エリアを削除し、オンになっている強調があればそれを残す。ウィンドウが閉じられたとき、それ以前にあったエリアを復元する。
ｗｉｎｄｏｗ    ｏｐｅｎ；  １００，１００；  ３００，３００
ａｒｅａ      ｃｌｅａｒ；  ；ｎｏｐｌｏｔ
．．．
ｗｉｎｄｏｗ    ｃｌｏｓｅ
【０６４５】
ａｒｅａ  ｓｅｌｅｃｔ  ；ａｒｅａＩＤ  ｜  ｐｏｉｎｔｅｒ  ｜  ｏｆｆ
識別子によって指定されるエリアまたは現在ポインタの下にあるエリアを強調する。「ｏｆｆ」を指定すると、強調されているすべてのエリアがオフになる。「ｓｅｌｅｃｔ」を「ｔｏｇｇｌｅ」強調エリアに使用することはできない。
【０６４６】
一度に強調できるエリアは１つだけであり、これ以前に強調したエリアがあればオフになる。
【０６４７】
例１
変数「ａＩＤ」内に格納されている識別子で示されるエリアを強調する。
ａｒｅａ      ｓｅｌｅｃｔ；  ａＩＤ
【０６４８】
例２
強調されているすべてのエリアをオフにする。
ａｒｅａ      ｓｅｌｅｃｔ；  ｏｆｆ
【０６４９】
例３
ウィンドウを開く前にすべてのエリアをディセーブルする。これは、強調されているすべてのエリアをオフにする。ウィンドウを閉じた後は、これらのエリアが再度イネーブルになり、ポインタの下にあるエリアが強調される。
ａｒｅａ        ｄｉｓａｂｌｅ            ＄＄  すべてのエリアおよび強
調をオフ
ｗｉｎｄｏｗ    ｏｐｅｎ，  １００，．１００；  ３００，３００
．．．
ｗｉｎｄｏｗ    ｃｌｏｓｅ
ａｒｅａ        ｅｎａｂｌｅ            ＄＄  エリアを再度オン
ａｒｅａ        ｓｅｌｅｃｔ；  ｐｏｉｎｔｅｒ  ＄＄  エリア上にポイン
タがあればそれを強調
【０６５０】
ａｒｅａ      ｓａｖｅ；  ’名前’  ｜  ｌｏｃａｌ
ａｒｅａ      ｓａｖｅ；  ｄｅｆａｕｌｔ
現在のエリア定義のセットをメモリ・プールのブロックまたは「ｄｅｆａｕｌｔ」（デフォルト）バッファにセーブする。名前は、テキストのリテラルとして指定するか、変数を使用する。名前を付けたブロックは、この後、任意のユニットで復元することができる。
【０６５１】
キーワード「ｌｏｃａｌ」は、エリアのセッティングを現在のユニットに固有のメモリ・プールのブロックにセーブする。ローカル・ブロックは、それをセーブしたユニット内に限って復元することが可能であり、そのユニットを終了したとき自動的に削除される。
【０６５２】
現在のエリアのセッティングを「ｄｅｆａｕｌｔ」バッファにセーブすると、すべての新しいメイン・ユニットのためのデフォルトの「ａｒｅａ」セッティングになる。これは、別のユニットに「ｊｕｍｐ」したとき、自動的にリセットされる。
【０６５３】
メモリ・プールは、コマンド「ｍｅｍｏｒｙ」「ｉｍａｇｅ」「ｗｉｎｄｏｗ」「ｓｔａｔｕｓ」「ａｒｅａ」「ｆｌｏｗ」「ｆｏｎｔ」および「ｐｅｒｍ」によって使用される。メモリ・ブロックは、生成時に特定のコマンド・タイプに属するものとしてタグ付けされ、メモリ・プールを使用する他のコマンドによってアクセスすることはできない。したがって異なるコマンドで同じ名前を使用しても衝突することはない。
【０６５４】
例１
現在のポインタ・エリアを「ｌｅｖｅｌ１」という名前を付けてメモリ・ブロックにセーブする。
ａｒｅａ      ｓａｖｅ；  ’ｌｅｖｅｌ１’
【０６５５】
例２
変数「ａｒｅａｖａｒ」に格納されている名前を使用して現在のポインタ・エリアをセーブする。
ａｒｅａ      ｓａｖｅ；  ａｒｅａｖａｒ
【０６５６】
例３
サブルーチン呼び出しにおいて、アクティブになっているフロー・セッティングを、それを実行しているユニットに固有のメモリ・プールのブロックにセーブした後、サブルーチンから復帰後に復元する。ブロックは、ユニットを終了したとき自動的に削除される。
ａｒｅａ      ｓａｖｅ；  ｌｏｃａｌ
ｄｏ        ｒｏｕｔｉｎｅｓ，  ｇｒａｐｈ
ａｒｅａ      ｒｅｓｔｏｒｅ；  ｌｏｃａｌ
【０６５７】
例４
現在のエリアのセッティングを、「ｊｕｍｐ」分岐によって入るこれ以降のすべてのユニットデフォルトに指定する。
ａｒｅａ      ｓａｖｅ；  ｄｅｆａｕｌｔ
【０６５８】
ａｒｅａ  ｒｅｓｔｏｒｅ；  ’名前’  ｜  ｌｏｃａｌ  ［；  ｄｅｌｅｔｅ  ］  ［；  ｎｏｐｌｏｔ］
ａｒｅａ  ｒｅｓｔｏｒｅ；  ｄｅｆａｕｌｔ  ［；  ｎｏｐｌｏｔ］
現在のエリア・セッティングをすでにセーブしているセットと置き換える。オプションとして「ｄｅｌｅｔｅ」修飾子を使用すれば、そのメモリ・プールから名前または「ｌｏｃａｌ」ブロックを削除することができる。
【０６５９】
「ｎｏｐｌｏｔ」修飾子を使用しない限り、セーブ時に強調されていたエリアは、復元時に強調される。
【０６６０】
例１
ライブラリ呼び出しの前後にわたって現在のエリア・セッティングをセーブし、その後復元する。ライブラリ・ルーチンは、リターン時に、それを呼び出したプログラムに影響を残すことなく、望ましい形にアクティブ・エリアのセッティングを変更することができる。これに代えて「ａｒｅａ  ｓａｖｅ」および「ｒｅｓｔｏｒｅ」をライブラリ・ルーチンに組み込めば、より簡単なツールが得られる。
ａｒｅａ        ｓａｖｅ；  ’ａｒｅａｓ’
ｌｉｂｒａｒｙ  ｒｏｕｔｉｎｅｓ，  ｇｒａｐｈ
ａｒｅａ        ｒｅｓｔｏｒｅ；  ’ａｒｅａｓ’
【０６６１】
例２
サブルーチン呼び出しにおいて、アクティブになっているフロー・セッティングを、それを実行しているユニットに固有のメモリ・プールのブロックにセーブし、サブルーチンから復帰後に復元する。ブロックは、ユニットを終了したとき自動的に削除される。強調状態は復元されない。
ａｒｅａ      ｓａｖｅ；  ｌｏｃａｌ
ｄｏ          ｒｏｕｔｉｎｅｓ，  ｇｒａｐｈ
ａｒｅａ      ｒｅｓｔｏｒｅ；  ｌｏｃａｌ；  ｎｏｐｌｏｔ
【０６６２】
例３
ポインタ・エリアをユニットのデフォルト・セットに復元する。
ａｒｅａ      ｒｅｓｔｏｒｅ；  ｄｅｆａｕｌｔ
【０６６３】
ａｒｅａ  ｄｅｌｅｔｅ；  ’名前’  ｜  ｌｏｃａｌ
現在のポインタ・エリアの定義に影響を与えることなく、保存済みのポインタ・エリアのセットをメモリ・プールから削除する。
【０６６４】
例
「ｍｅｎｕ」という名前を付けてセーブしたエリアをメモリから削除する。
ａｒｅａ      ｄｅｌｅｔｅ；  ’ｍｅｎｕ’
【０６６５】
ａｒｅａ  ｒｅｓｅｔ
現在の定義に影響を与えることなく、名前を付けたすべてのポインタ・エリアのセットをメモリ・プールから削除する。ただし、エリア・セッティングの「ｄｅｆａｕｌｔ」セットには影響しない。
【０６６６】
ａｒｅａ      ｔｏｇｇｌｅ；  ａｒｅａＩＤ
指定されている識別子に対応するポインタ・エリアの強調のオン／オフを切り替える（トグルする）。このキーワード・オプションは、「トグル」するポインタ・エリア（「ａｒｅａ  ｈｉｇｈｌｉｇｈｔ」によりセット）にのみ作用する。これには、オーサーがポインタ・エリアの強調に関して包括的なコントロールを望むことが意図されている。「ｅｒｅａ  ｓｅｌｅｃｔ」と異なり、ここでは複数のエリアを強調することができる。
【０６６７】
例
変数「ｃＩＤ」に格納されている識別子で示されるポインタ・エリアを強調する。
ａｒｅａ      ｔｏｇｇｌｅ；  ｃＩＤ
【０６６８】
ａｒｅａ  ｉｎａｒｅａ：  ロケーション；  ａｒｅａＩＤ
指定したロケーションがポインタ・エリア内にあるか否かを判断する。エリア内にあるときはそのエリアの識別子が変数「ａｒｅａＩＤ」に格納される。このロケーションが複数のエリア内にあるときは、優先順位のもっとも高いエリアが、また優先順位のもっとも高いエリアが複数存在するときは最後に定義したエリアが優先される。
【０６６９】
このロケーションがいずれのエリア内にも含まれないときは、変数が０にセットされる。
【０６７０】
例
ここでは、変数「ｗｈｉｃｈＩＤ」が、優先順位１５のポインタ・エリアに属する識別子「１」にセットされる。
ａｒｅａ      ｄｅｆｉｎｅ；  ９０，１００；  １２０，１６０；  
ｃｌｉｃｋ＝％ｓｐａｃｅ；ｐｒｉｏｒｉｔｙ，  １５；
ｓｅｔｉｄ，１
ａｒｅａ      ｄｅｆｉｎｅ；  ９０，１００；  １２０，１６０；
ｃｌｉｃｋ＝％ｈｏｍｅ；ｐｒｉｏｒｉｔｙ，  ６；
ｓｅｔｉｄ，２
．．．
ａｒｅａ      ｉｎａｒｅａ：  １００，１５５；  ｗｈｉｃｈＩＤ
【０６７１】
ａｒｅａ  ｄｉｒ；  ｉｄＢｕｆｆｅｒ  ［；  ｌｅｎｇｔｈ］
アクティブになっているすべてのポインタ・エリアの識別子を返す。最大数のポインタ・エリアのレポートを可能にするためには、エリア識別子のバッファの長さを「ｚｍａｘａｒｅａ」×２バイトとする必要がある。
【０６７２】
例
現在アクティブになっているすべてのポインタ・エリアのエリア識別子を配列バッファ「ｉｄ」に返す。
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｉｄ（５０）  ，２                ＄＄  アレイの長さにシステムのデフォ
ルトを使用
ｄｅｆｉｎｅ    ｅｎｄ
．．．
ａｒｅａ      ｄｉｒ；  ｉｄ（１）；  ２＊ｚａｒｅａｃｎｔ
【０６７３】
ａｒｅａ  ｋｅｙ；  ＫＥＹ；  ａｒｅａＩＤ
指定されたキーをポインタのアクション・リストに含むポインタ・エリアの識別子を返す。指定されたキーを含むエリアが２つあるときは、もっとも高い優先順位を有するエリアの識別子を返す。これらのエリアの優先順位が等しいときは、最後に定義されたポインタ・エリアの識別子を返す。
【０６７４】
ａｒｅａ      ｉｎｆｏ；  ａｒｅａＩＤ；  ｉｎｆｏＢｕｆｆｅｒ４８
イネーブルになっているポインタ・エリアの属性を指定されたバッファに返す。識別子が与えられていばポインタ・エリアの選択を行う。４８バイトのバッファの構造を次に示す。
【表４】
2009009584.tif 000006
【０６７５】
例
変数「ＩＤ２」に格納されている識別子で示されるエリアから情報を、「ａｒｅａｄａｔａ」という名前のバッファに読み出す。
ａｒｅａ      ｉｎｆｏ；  ＩＤ２；  ａｒｅａｄａｔａ
【０６７６】
このステートメントの実行時にウィンドウがアクティブであれば、指定される座標が現在のウィンドウに対する相対座標になる。
【０６７７】
ａｒｅａ  ｒｅｐｏｓ；  ｘＯｆｆｓｅｔ，ｙＯｆｆｓｅｔ
指定した絶対スクリーン寸法を用いてすべてのポインタ・エリアを再配置する。１ないしは複数のウィンドウが開いている場合は、現在のウィンドウを開いている間に生成されたエリアに対してのみ作用する。
【０６７８】
例
すべてのポインタ・エリアを左に２０ピクセル、上に１００ピクセル移動する。
ａｒｅａ      ｒｅｐｏｓ；  −２０，  １００
【０６７９】
システム変数
ｚｒｅｔｕｒｎ
メモリ・プールを使用する「ｓａｖｅ」「ｒｅｓｔｏｒｅ」「ｒｅｓｅｔ」および「ｄｅｌｅｔｅ」形式の「ａｒｅａ」コマンドは、オペレーションの成功または失敗を「ｚｒｅｔｕｒｎ」に返す。さらに「ｓｅｌｅｃｔ」および「ｔｏｇｇｌｅ」形式も「ｚｒｅｔｕｒｎ」を通じてエラー条件を返す。これら以外のすべての形式では「ｚｒｅｔｕｒｎ」にＯＫ、すなわち（−１）が返される。主要な「ｚｒｅｔｕｒｎ」値を次に示す。
−２      冗長なオペレーション；エリアはすでに選択されている。
−１      オペレーションは成功した。
１０      名前が見つからない。
１１      無効な強調タイプの「ｓｅｌｅｃｔ」または「ｔｏｇｇｌｅ」
１８      メモリ・プールは要求を満たすことができない。
【０６８０】
その他
ｚａｒｅａｃｎｔ    現在定義されているポインタ・エリアの数。
ｚａｒｅａｈｌ      現在強調されているエリアのエリア識別子（ないときは０）。
ｚｉｎｐｕｔａ      「ｚｉｎｐｕｔ」の更新時に現在の「ｚｉｎｐｕｔ」値をもたらしたエリアのエリア識別子（ないときは０）。
ｚｍａｘａｒｅａ    定義可能な最大エリア数。
【０６８１】
ａｓｍｃａｌｌ
変数にロードされているアッセンブリ言語ルーチンを呼び出す。
【０６８２】
ａｓｍｃａｌｌ  ｂｕｆｆｅｒ  ［，ｖａｒｉａｂｌｅ］
ｂｕｆｆｅｒ        ルーチンがロードされたときの開始変数。
ｖａｒｉａｂｌｅ    指定した変数のオフセットをレジスタＢＸに格納する。
【０６８３】
説明
ローカル変数またはグローバル変数にロード済みのアッセンブリ言語ルーチンを呼び出す。セグメント・レジスタＤＳは、変数の開始をポイントする。オプションの「ｖａｒｉａｂｌｅ」を使用すると、「ｖａｒｉａｂｌｅ」のオフセットがレジスタＢＸにセットされる。この結果、「ＤＳ：［ＢＸ］」が２番目のタグとしてリストされる変数をポイントする。ルーチン終了時にコントロールをルーチンからＴｅｎＣＯＲＥに返すためには、遠端「ｒｅｔｕｒｎ」を実行しなければならない。ＡＬレジスタの値は、ＴｅｎＣＯＲＥのシステム変数「ｚｒｅｔｕｒｎ」に返される。
【０６８４】
アッセンブリ言語ルーチンは、すべてのマイクロプロセッサ・レジスタを変更することがあるが、ＳＳおよびＳＰの変更があった場合には、ＴｅｎＣＯＲＥに戻る前にそれをオリジナルの値に復元しなければならない。
【０６８５】
アドレス
「ａｓｍｃａｌｌ」では、次に示すシステム定義関数の参照が役立つことがある。
【０６８６】
ｓｙｓｌｏｃ（グローバル）
グローバル変数のセグメント・アドレス
ｓｙｓｌｏｃ（ローカル）
ローカル変数のセグメント・アドレス
ｖａｒｌｏｃ（ｖａｒｉａｂｌｅ）
「ｖａｒｉａｂｌｅ」のオフセット・アドレス
ａｂｓｌｏｃ（ｖａｒｉａｂｌｅ）
メモリ内の「ｖａｒｉａｂｌｅ」の絶対アドレスであり、セグメントを伴わ
ない４バイトのオフセットとして表される。これは、次に示す形の「セグメ
ント：オフセット」アドレスに相当する。
セグメント＝  ａｂｓｌｏｃ（）  ＄ａｒｓ＄  ４
オフセット＝  ａｂｓｌｏｃ（）  ＄ｍａｓｋ＄  ｈｏｆ
【０６８７】
セグメントとオフセットの使用中に絶対ロケーションへの変換を希望する場合は、次に示す計算を使用する。
ａｂｓｌｏｃ  ＝  （（セグメント  ＄ｍａｓｋ＄  ｈ００００ｆｆｆｆ）  ＄ｃｌｓ４＄  ４）  ＋（オフセット  ＄ｍａｓｋ＄  ｈ００００ｆｆｆｆ）
【０６８８】
例
バイト内のビットを反転する。
＊
ｄｅｆｉｎｅ    ｇｌｏｂａｌ
ａｓｍｂｕｆｆ（１２）  ，１          ＄＄  アッセンブリ言語プログラム用のバッファ
ａｓｍｄａｔａ  ，１            ＄＄  戻した結果の整数バイト
ｄｅｆｉｎｅ    ｅｎｄ
*
＊        直接実行により短いアッセンブリ言語ルーチンをロード
＊
●ＴｅｎＣＯＲＥ変数に「ａｓｍｄａｔａ」をポイントするＤＳ：
●ＢＸを伴ってルーチンが開始。プログラムがロードされ、バイトを反転し、レジスタＡＬにそれを格納する。「ａｓｍｃａｌｌ」の実行後、「ｚｒｅｔｕｒｎ」がＡＬに残された値にセットされる。
＊          
＊        ここで使用している「ｓｅｔ」コマンドによりプログラマは、ア
ッセンブラ・プログラミングに使用される構造のエミュレーション
を可能にする。
＊
ｓｅｔ      ａｓｂｕｆｆ（１）    ＄＄  ｍｉｒｒｏｒ  ｐｒｏｃ  ｆａｒ
ｈ８ａ，    ｈ２７        ＄＄  ｍｏｖ  ａｈ，  ［ｂｘ］  ；
バイトをフェッチ
ｈ０ｂ９，  ｈ０８，  ｈ００  ＄＄  ｍｏｖ  ｃｘ，０００８
；８ビット・シフト
＊          ＄＄  ｍｉｒｒｏｒｉ：
ｈ０ｄ０，  ｈ０ｅｃ      ＄＄  ｓｈ  ｒａｈ，  ０１      
ｈ０ｄ０，  ｈｄ０        ＄＄  ｒｃｌ  ａｌ，  ０１      ；
ＣＦをＡＬにシフト
ｈ０ｅ２，  ｈ０ｆａ      ＄＄  ｌｏｏｐ        ｍｉｒｒｏｒ１
＊
ｈ０ｃｂ              ＄＄  ｒｅｔｆ            ；遠端リターン
＊                            ＄＄  ｅｎｄｐ
＊
ｃａｌｃ      ａｓｍｄａｔａ  ←  ｈ５５  ＄＄  ビット反転を立証するためのトライアル値
ａｓｍｃａｌｌ  ａｓｍｂｕｆｆ（１），  ａｓｍｄａｔａ  ＄＄  ルーチンを呼び出し、データをポイント
ａｔ        ４：４
ｗｒｉｔｅ    Ｏｒｉｇｉｎａｌ  ｖａｌｕｅ  ＝  ＜＜ｈ，  
ａｓｍｄａｔａ＞＞  ｈｅｘ
Ｒｅｖｅｒｓｅｄ  ｖａｌｕｅ  ＝  ＜＜ｈ，  
ｚｒｅｔｕｒｎ＞＞  ｈｅｘ
（この「write」ステートメントの意味：「オリジナルの値は〜、反転した値は〜です。」）
【０６８９】
システム変数
ｚｒｅｔｕｒｎ    リターン時にＡＬレジスタの値を保持する。
【０６９０】
ａｔ／ａｔｆ
スクリーンのロケーションおよびテキストのマージンをセットする。
【０６９１】
ａｔ        ［ロケーション］  ［；  ロケーション］
【０６９２】
説明
現在のスクリーンのｘ−ｙロケーションおよびテキストの左側マージンをタグ内の最初の「ロケーション」にセットする。システム変数「ｚｘ」「ｘｙ」および「ｚｍａｒｇｉｎ」は、この新しいロケーションに更新される。文字座標を使用して「ａｔ」ロケーションを指定する場合には、文字セルの左下のグラフィック座標が「ｚｘ」と「ｘｙ」に格納される。
【０６９３】
テキストの右側マージン（当初はスクリーンまたはウィンドウの右側境界にセットされる）は、２番目の「ロケーション」を指定することによってセットすることができる。右側マージンは、システム変数「ｚｒｍａｒｇｉｎ」で調べることができる。右側マージンに到達したテキストは、自動的に折り返されて（ラップされて）左側マージンに戻る。テキストの折り返しに関するオプションについては、「ｔｅｘｔ  ｍａｒｇｉｎ」を参照されたい。なお、絶対「ｃｈａｒｓｅｔ」文字のプロットにおいては右側マージンが無視される。
【０６９４】
タグをブランクにすると、左側マージンが現在のスクリーンのロケーションにセットされる。この形は次に示すステートメントに等しい。
ａｔ        ｚｘ，  ｚｙ
【０６９５】
「ａｔｆ」形式のこのコマンドを使用すると、それに続いて最初に実際にプロットされる文字の高さを基準にして「ｚｙ」のポジションが自動調整される。この最初に実際にプロットされる文字の上端ピクセルは、標準フォント文字の上端と同じｙポジションに置かれる。この「ａｔｆ」のアクションにより、サイズおよびフォント等の埋め込まれたテキストの属性が開始時に未知の場合であっても、テキストの上側マージンを明確に固定することができる。「ｚｙ」に対する調整は、これに続く「ｗｒｉｔｅ」または「ｓｈｏｗ」ステートメントにおいて最初に文字がスクリーン上に実際にプロットされたとき行われる。
【０６９６】
例
例１
ｘ＝１０、ｙ＝１５０からテキストを書き始める。
ａｔ        １０，１５０
ｗｒｉｔｅ    Ｔｈｉｓ  ｉｓ  ｌｉｎｅ  ｏｎｅ  ｏｆ  ｍｙ  ｔｅｘｔ．
Ｔｈｉｓ  ｉｓ  ｌｉｎｅ  ｔｗｏ  ａｔ  ｔｈｅ  ｓａｍｅ  ｌｅｆｔ  ｍａｒｇｉｎ．
（この「ｗｒｉｔｅ」ステートメントの意味：「これは私のテキストの１行目です」「これは同じ左側マージンで始まる２行目です」）
【０６９７】
例２
７行目の３文字目からテキストを書き始める。
ａｔ        ７：３
ｗｒｉｔｅ    Ｔｈｅ  ｌｉｎｅ：ｃｈａｒａｃｔｅｒ  ｆｏｒｍａｔ  ｉｓ  ｕｓｅｄ  ｆｏｒ  ｔｅｘｔ  ｍｏｒｅ  ｏｆｔｅｎ  ｔｈａｎ  
ｇｒａｐｈｉｃ  ｘ，ｙ  ｆｏｒｍａｔ．
（テキストの意味：「テキストには行数：文字数形式の方が、グラフィック座標のｘ，ｙ形式より頻繁に使用されます」）
【０６９８】
例３
「ｗｏｒｄｗｒａｐ」を伴う「ｔｅｘｔ  ｍａｒｇｉｎ」ステートメントは、次に示す「ａｔ」の２つのロケーションに示されたテキストの右側マージンにおいて、自動的にワードラップを実行するプロットをセットする。「ａｔ」の２番目のロケーションは、スクリーン上の３０番目の文字のポジションを右側マージンにセットする（または現在のウィンドウの右側境界）。システム・プロッタでは２番目のロケーションの行数を使用しない。
ｔｅｘｔ      ｍａｒｇｉｎ；ｗｏｒｄｗｒａｐ
ａｔ          ５：１０；  ２０：３０
ｗｒｉｔｅ    Ｔｈｉｓ  ｔｅｘｔ  ｗｉｌｌ  ａｐｐｅａｒ  ｏｎ  ｔｈｅ  ｓｃｒｅｅｎ  ａｓ  ａ  ｐａｒａｇｒａｐｈ  ｏｎｌｙ  ２０  ｃｈａｒａｃｔｅｒｓ  ｗｉｄｅ  ｒｅｇａｒｄｌｅｓｓ  ｏｆ  ｈｏｗ  ｌｏｎｇ  ｔｈｅ  ｌｉｎｅｓ  ｌｏｏｋ  ｉｎ  ｓｏｕｒｃｅ  ｃｏｄｅ．．．
（この「ｗｒｉｔｅ」ステートメントの意味：「このテキストは、ソース・コード内における行の長さとは無関係に幅が２０文字の段落としてスクリーン上に現れます」）
【０６９９】
例４
「ａｔｆ」コマンドを使用することにより、２つの「ｗｒｉｔｅ」ステートメントによるテキストの上端が、共通の上側マージンを持つようにスクリーン上に現れる。先頭に「サイズ２」を指定するコード・シーケンスが埋め込まれ他２番目の「ｗｒｉｔｅ」ステートメントが、「Ｓ」のプロット時にシステム変数「ｚｙ」を調整するので、「Ｓ」の上端が標準サイズのフォントの上端と同じロケーションに現れる。
ａｔｆ        １０：１０
ｗｒｉｔｅ    Ｓｉｚｅ  １  ｔｅｘｔ
（この「ｗｒｉｔｅ」ステートメントの意味：「サイズ１のテキスト」）
ａｔｆ        １０：３０
ｗｒｉｔｅ    Ｓｉｚｅ  ２  ｔｅｘｔ
（この「ｗｒｉｔｅ」ステートメントの意味：「サイズ２のテキスト」）（前の「ｗｒｉｔｅ」ステートメントのテキストより大きいサイズで示されている）
＊        ＄＄  テキスト先頭にサイズ２の指定が埋め込まれている。
【０７００】
システム変数
「ａｔ」ステートメントのアクションは、次に示すシステム変数に反映される。
ｚｘ              スクリーン・ロケーションのＸ座標
ｚｙ              スクリーン・ロケーションのＹ座標
ｚｌｉｎｅ        行番号
ｚｓｐａｃｅ      文字番号
ｚｘｙｃｏｌｏｒ  スクリーン・ロケーションにおけるピクセルの色
ｚｍａｒｇｉｎ    テキストの左側マージン
ｚｒｍａｒｇｉｎ  テキストの右側マージン
【０７０１】
ｂｅｅｐ
コントロールされたビープ音をスピーカから出力する。
【０７０２】
ｂｅｅｐ      ｄｕｒａｔｉｏｎ  ［，  ｈｅｒｔｚ］
ｄｕｒａｔｉｏｎ        秒数で表したビープ音の長さ。
ｈｅｒｔｚ              １秒当たりの繰り替えし数で表した周波数。
【０７０３】
説明
タグ内に指定した周波数と長さを持ったトーンを生成する。周波数を指定しない場合にはデフォルトの１０００Ｈｚが使用される。
【０７０４】
例
例１
短い、おそらく聞き覚えのある曲を生成する。
ｂｅｅｐ      ．１５，  ２６１．３      ＄＄  ド
ｂｅｅｐ      ．２，  ３４９．６６      ＄＄  ファ
ｂｅｅｐ      ．２，  ４４０．８８      ＄＄  ラ
ｂｅｅｐ      ．４，  ５２３．２５      ＄＄  ド
ｂｅｅｐ      ．２，  ４４０．８８      ＄＄  ラ
ｂｅｅｐ      ．４，  ５２３．２５      ＄＄  ド
【０７０５】
例２
「ｂｅｅｐ」コマンドのユーザ・コントロールを実証する。
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｌｅｎｇｈ    ，４，ｒ            ＄＄  ビープ音の長さ
ｄｅｆｉｎｅ    ｅｎｄ
＊
ａｔ        ５：５
ｗｒｉｔｅ    Ｈｏｗ  ｍａｎｙ  ｓｅｃｏｎｄｓ  ｄｏ  ｙｏｕ  ｗａｎｔ  ｔｈｅ  ｓｐｅａｋｅｒ  ｔｏ  ｂｅｅｐ？
（この「ｗｒｉｔｅ」ステートメントによって表示されるテキストの意味：「ビープ音の長さは何秒にしますか？」）
ａｒｒｏｗ    ６：５
ｓｔｏｒｅ    ｌｅｎｇｔｈ
．            ａｔ  ８：７
．            ｗｒｉｔｅ    Ｐｌｅａｓｅ  ｅｎｔｅｒ  ａ  ｎｕｍｂｅｒ，ｌｉｋｅ  ２，３  ｏｒ  ５  
（この「ｗｒｉｔｅ」ステートメントの意味：「数字を入力してください。例：２，３，５。」）
ｏｋ
．        ｂｅｅｐ    ｌｅｎｇｔｈ
ｅｎｄａｒｒｏｗ
【０７０６】
周波数
中音の「ド」から１オクターブの範囲の音の周波数を次に示す。２倍または２分の１にすれば１オクターブずらすことができる。
ド      ２６１．６３
ド＃    ２７７．１８
レ      ２９３．６６
レ＃    ３１１．１３
ミ      ３２９．６３
ファ    ３４９．２３
ファ＃  ３６９．９９
ソ      ３２９．００
ソ＃    ４１５．３０
ラ      ４４０．００
ラ＃    ４６６．１６
シ      ４９３．８８
ド      ５２３．２５
【０７０７】
より詳細な周波数を計算から求めるときは、標準の「ラ」音として１１０の倍数を使用し、半音階上がるごとに２の１２乗根を乗じる。
【０７０８】
ｂｌｏｃｋ
ｂｌｏｃｋ    ［ロケーション］；［ロケーション］；［ロケーション］
［；［ｆｒｏｍ  ｐａｇｅ］  ［，ｔｏ  ｐａｇｅ］］
【０７０９】
説明
矩形のスクリーン・エリアを、１つのロケーションから、表示ページの渡りも含めて別のロケーションにコピーする。１６色または２５６色のスクリーン上でのみ機能する。「ｂｌｏｃｋ」コマンドは、絶対プロット座標を伴って単独で機能する。「ｏｒｉｇｉｎ」「ｒｏｔａｔｅ」または「ｓｃａｌｅ」コマンドの影響を受けない。
【０７１０】
最初の２つのロケーションは、コピーするソース・エリアの対角コーナーを指定する。指定を省略すると、デフォルトでスクリーン全体が指定される。３番目のロケーションは、コピー先の左上コーナーである。このデフォルトは、ソース・エリアと同じポジションになる。
【０７１１】
４番目の引数（ｆｒｏｍｐａｇｅ）は、ソース・ページ番号であり、デフォルトは現在の読み出しページ（ｚｒｐａｇｅ）になる。
【０７１２】
最後の引数（ｔｏｐａｇｅ）は、コピー先ページ番号であり、デフォルトは現在の書き込みページ（ｚｗｐａｇｅ）になる。
【０７１３】
ｂｌｏｃｋ    ｘ１，ｙ１；  ｘ２，ｙ２；  ｘ３，ｙ３  
＄＄  スクリーンの１つのエリアを他の場所にコピー
ｂｌｏｃｋ    ｘ１，ｙ１；  ｘ２，ｙ２；  ；  ２，１    
＄＄  ページ２からページ１へコピー
ｂｌｏｃｋ    ｘ１，ｙ１；  ｘ２，ｙ２；；  ２        
＄＄    ページ２から現在のページへコピー
ａｔ        １０：１０
ｂｌｏｃｋ    ６，５；；５：１０    
＄＄  １０：１０から５：１０に５行６文字をコピー
【０７１４】
ｂｏｘ
不透明のボックスまたは枠をスクリーン上に描く。
【０７１５】
ｂｏｘ      ［ロケーション］  ［；  ［ロケーション］  ［；  Ｘｆｒａｍｅ  ［，  Ｙｆｒａｍｅ］］］
【０７１６】
説明
フォアグラウンドの色で塗りつぶされたボックスまたはフレームをスクリーン上に描く。「ロケーション」の説明については「コマンド・シンタクス規約」を参照されたい。「ｅｒａｓｅ」コマンドはバックグラウンドの色を用いることを除けば「ｂｏｘ」と同一である。
【０７１７】
フレーム幅の引数がある場合には、塗りつぶしのボックスではなく、フレームが描かれる。左右の（線の）幅については、最初のフレーム引数により、上下の（線の）幅については２番目のフレーム引数によりピクセル数を単位として指定する。２番目のフレーム引数を省略すると、スクリーンに現れたとき左右の線幅との関係がもっとも適切になる線幅に上下の線幅が設定される。
【０７１８】
例
例１
スクリーン（またはウィンドウ）全体をブルーに変え、その周囲を５ピクセルの幅を持ったフレームで囲む。
ｃｏｌｏｒ    ｂｌｕｅ
ｂｏｘ
ｃｏｌｏｒ    ｗｈｉｔｅ＋
ｂｏｘ      ；；５
【０７１９】
例２
フォアグランドの色で塗りつぶされた幅２００ピクセル、高さ１００ピクセルの矩形をスクリーン上に描く。各ロケーションのｘ，ｙ座標は、グラフィック座標を使用して指定する。
ｂｏｘ      １０１，１０１；  ３００，２００
【０７２０】
例３
「ｗｒｉｔｅ」ステートメント内のテキストを幅２ピクセルの赤いフレームで囲む。「ｔｅｘｔ  ｍｅａｓｕｒｅ」コマンドは、それに続くテキストの段落をスクリーン上にプロットするスクリーン・エリアを決定するために使用されている。このコマンドは、システム変数「ｚｐｌｏｔｘｌ」および「ｚｐｌｏｔｙｌ」に左下コーナーの座標を、「ｚｐｌｏｔｘｈ」および「ｚｐｌｏｔｙｈ」に右上コーナーの座標をそれぞれ返す。
【０７２１】
ｔｅｘｔ      ｍｅａｓｕｒｅ          ＄＄  テキスト測定の初期化
＊
ａｔ        １００，１５０
ｗｒｉｔｅ    Ｔｈｉｓ  ｉｓ  ａ  ｐａｒａｇｒａｐｈ  ｏｆ  ｔｅｘｔ
ｏｆ  ａｒｂｉｔｒａｒｙ  ｌｅｎｇｔｈ  ｔｈａｔ  ｗｉｌｌ  ｂｅ  
ｎｉｃｅｌｙ  ｆｒａｍｅｄ．．．
（この「ｗｒｉｔｅ」ステートメント内のテキストの意味：「任意長のテキストの段落が格好よくフレームで囲まれます」）
＊
ｃｏｌｏｒ    ｒｅｄ＋
ｂｏｘ      ｚｐｌｏｔｘｌ−２，ｚｐｌｏｔｙｌ−２；ｚｐｌｏｔｘｈ＋２，ｚｐｌｏｔｙｈ＋２；  ２
＄＄  テキストの枠囲み
【０７２２】
例４
幅２０文字、高さ１０行のブルーのボックスを１０行目の先頭からスクリーン上に描く。「box」コマンドは、「at」コマンドを用いてセットしたシステム変数「zx」および「zy」に影響しないので、テキストの開始も第１０行からになる。
【０７２３】
ａｔ          １０：１
ｃｏｌｏｒ    ｂｌｕｅ
ｂｏｘ        ２０，１０
ｃｏｌｏｒ    ｗｈｉｔｅ＋
ｗｒｉｔｅ    Ｔｈｉｓ  ｔｅｘｔ  ａｐｐｅａｒｓ  ｉｎ  ｔｈｅ  ｂｏｘ．．．
（この「ｗｒｉｔｅ」ステートメント内のテキストの意味：「このテキストがボックス内に現れます．．．」）
【０７２４】
ｂｒａｎｃｈ
同じユニット内のラベルが付けられたポイントに実行を移す。
【０７２５】
ｂｒａｎｃｈ    ｌａｂｅｌ  ｜  ｑ
ｂｒａｎｃｈ    セレクタ；  ｌａｂｅｌ  ｜  ｑ；  ｌａｂｅｌ  ｜  ｑ；．．．
ｌａｂｅｌ    現在のユニット内にある任意の有効なラベル。ラベルは、数
字とそれに続く１文字から７文字までの文字または数字で
あり、行のコマンド・フィールド内で指定する。
ｑ        現在のユニットの末尾に分岐する。
【０７２６】
説明
指定したラベルのに続く行、またはキーワード「ｑ」を使用した場合にはユニットの末尾に実行を移すことによりユニット内の実行のフローを変更する。選択リスト内のエントリを空欄にすると、その次に続くコマンドに実行が移る。
【０７２７】
例
次に示す例においては、「ｎａｍｅ」がすでにセットされていれば「ｂｒａｎｃｈ」コマンドによって「ａｒｒｏｗ」構造がスキップされる。
ｂｒａｎｃｈ    ｎａｍｅ＝０；；１ｓｋｉｐ
ａｔ            １０：１０
ｗｒｉｔｅ      Ｅｎｔｅｒ  ｙｏｕｒ  ｎａｍｅ．
（この「ｗｒｉｔｅ」ステートメント内のテキストの意味：「名前を入力してください」）
ｌｏｎｇ        ８
ａｒｒｏｗ      １１：１０
ｓｔｏｒｅａ    ｎａｍｅ
ｏｋ
ｅｎｄａｒｒｏｗ
＊
１ｓｋｉｐ
ａｔ            １５：１０
ｗｒｉｔｅ    Ｗｅｌｃｏｍｅ，＜＜ｓｈｏｗａ，ｎａｍｅ＞＞．
（この「ｗｒｉｔｅ」ステートメント内のテキストの意味：「ようこそ〜さん」）
【０７２８】
ｃａｌｃ
変数に値または式を割り当てる。
【０７２９】
ｃａｌｃ      ｖａｒｉａｂｌｅ  ←  式
【０７３０】
説明
割り当て矢印の右側の式は、単一の数値として値が求まる限り、定数、文字係数、変数、演算子、および関数の任意の組み合わせとすることができる。
【０７３１】
「ｃａｌｃ」は、８バイトを超えるサイズの変数を扱うことができない。
【０７３２】
追加の計算行にはコマンド名を繰り返す必要がない。
【０７３３】
計算、割り当て、および変数については、それぞれ変数、計算およびデータ転送のセクションを参照されたい。
【０７３４】
例
カウンタをインクリメントし、パーセンテージを計算し、複雑な計算を実行する。
ｃａｌｃ      ｃｏｕｎｔ  ←  ｃｏｕｎｔ  ＋  １
ｓｃｏｒｅ    ←  ｃｏｒｒｅｃｔ  ／  ｔｏｔａｌ
ｄｉｓｔ      ←  （１／２）  ＊  ｇ  ＊  （ｔ＊＊２）
【０７３５】
ｃａｌｃｃ
全体の計算および割り当てを選択的に実行する。
【０７３６】
ｃａｌｃｃ    セレクタ；  ｖａｒ１  ←  ｅｘｐ１；  ｖａｒ２  ←  ｅｘｐ２；；．．．
【０７３７】
説明
「ｃａｌｃｃ」は選択形式の「ｃａｌｃ」であり、「セレクタ」の値に基づいて計算のリストの１つを実行する。リスト内の各計算では、異なる変数に異なる値を割り当てることができる。「セレクタ」の特定の値に対して実行する計算がないときはヌル・タグ（；；）を使用する。
【０７３８】
「ｃａｌｃｃ」ステートメントでは、続く複数行にわたってタグ・フィールドを継続させることができる。
【０７３９】
例
例１
セレクタ「ｒｉｇｈｔ」が１のとき「ｒｅｖｉｅｗ」がセットされ；「ｒｉｇｈｔ」が２以上のとき「ｓｃｏｒｅ」が割り当てられる。「ｒｉｇｈｔ」がゼロまたは負の値のときは何も生じない。
ｃａｌｃｃ    ｒｉｇｈｔ；；；  ｒｅｖｉｅｗ  ←  −１；  ｓｃｏｒｅ  ←  （ｒｉｇｈｔ／５）＊１００
【０７４０】
例２
セレクタ「ｃｏｍｐｌｅｔｅ」が真であれば「ｓｅｃｔｉｏｎ」に４が割り当てられ、偽であれば割り当てが行われない。
ｃａｌｃｃ    ｃｏｍｐｌｅｔｅ；  ｓｅｃｔｉｏｎ  ←  ４；；
【０７４１】
例３
「ｓｅｌｅｃｔ」が１のときは「ｃｏｌｕｍｎ」の割り当てが行われ、「ｓｅｌｅｃｔ」が２のときは「ａｐｐｌｅｓ」の割り当てが行われ、「ｓｅｌｅｃｔ」が３のときは「ｔｏｔａｌ」に５０が割り当てられる。「ｓｅｌｅｃｔ」が負、ゼロまたは４以上のときは何も生じない。
【０７４２】
ｃａｌｃｃ    ｓｅｌｅｃｔ，，，
ｃｏｌｕｍｎ  ←  ２２  ＋  ｐｏｉｎｔｅｒ；
ａｐｐｌｅｓ  ←  ｂｕｓｈｅｌｓ＊４７
ｔｏｔａｌ    ←  ５０；；
【０７４３】
ｃａｌｃｓ
選択的に値を変数に割り当てる。
【０７４４】
ｃａｌｃｓ    セレクタ；  ｖａｒｉａｂｌｅ  ←  ｅｘｐ１；  ｅｘｐ２；；．．．
【０７４５】
説明
「ｃａｌｃｓ」は選択形式の「ｃａｌｃ」であり、リストされた式の１つの値を求め、指定の変数に割り当てる。「セレクタ」の値に基づいて割り当て矢印の右側にあるリストから式が選択されて値が求められ、指定した変数に対する割り当てが行われる。「セレクタ」の特定の値に対応して実行する割り当てがないときはヌル・タグ（；；）を使用する。この場合、変数は変更されない。
【０７４６】
「ｃａｌｃｓ」ステートメントでは、続く複数行にわたってタグ・フィールドを継続させることができる。
【０７４７】
例
例１
セレクタ「ｍｏｎｔｈ」を使用し、変数「ｄａｙｓ」を正しい値にセットする。選択的な割り当ては２行にわたっている。
ｃａｌｃｓ    ｍｏｎｔｈ；  ｄａｙｓ  ←  ；；３１；２８；３１；３０；３１；３０；
３１；３１；３０；３１；３０；３１
【０７４８】
例２
「ｃｏｍｐｌｅｔｅ」がが真であれば「ｓｅｃｔｉｏｎ」に４が割り当てられ、偽であれば式「ｌａｓｔ＊２」の値がセットされる。
ｃａｌｃｓ    ｃｏｍｐｌｅｔｅ；  ｓｅｃｔｉｏｎ  ←  ４；
ｌａｓｔ＊２
【０７４９】
ｃｉｒｃｌｅ
円を描画する。
【０７５０】
ｃｉｒｃｌｅ    半径  ［  ，ｆｉｌｌ  ｜  ａｎｇｌｅ１  ，ａｎｇｌｅ２］
【０７５１】
説明
フォアグラウンドの色を用いて現在のスクリーン・ロケーションに指定した半径の円が描かれる。
【０７５２】
オプションのキーワード「ｆｉｌｌ」を使用すると、現在のフォアグラウンドの色により円の内側が塗りつぶされる。
【０７５３】
タグが１つの「ｃｉｒｃｌｅ」では、現在のスクリーン・ロケーションが変更されないため、スクリーン・ロケーションを再セットしなくても同心円を描くことができる。
【０７５４】
タグが３つの「ｃｉｒｃｌｅ」は弧を描くとき使用する。弧は、必ず「ａｎｇｌｅ１」に指定した角度から「ａｎｇｌｅ２」に指定した角度に向かって反時計回りに描かれる。つまり、いずれの角度を先に指定するかによって描かれる弧の形状が異なることになる。たとえば、「ｃｉｒｃｌｅ  １００，０，９０」では、０度から９０度まで４分の１の円が描かれる。しかし「ｃｉｒｃｌｅ  １００，９０，０」では、９０度から３６０度（または０度）までの４分の３の円が描かれる。
【０７５５】
弧を描く場合は、現在のスクリーン・ロケーションが更新され、弧の描き終わりのポジション（終点）になる。
【０７５６】
例
スクリーン上に中心設定した円を１つ、中心が同じで半径が異なる２つの弧を描き、さらに内側を塗りつぶした円を描く。
【０７５７】
ｓｃｒｅｅｎ    ｖｇａ，ｇｒａｐｈｉｃｓ，ｍｅｄｉｕｍ，ｃｏｌｏｒ
ａｔ            ３２０，２４０      ＄＄  円の中心をセット。
ｃｉｒｃｌｅ    ８０                ＄＄  半径８０の円を描く。
ｃｉｒｃｌｅ    ６０，０，９０      ＄＄  ４分の１の弧を描く。
ａｔ            ３２０，２４０      ＄＄  円の中心を元に戻す。
ｃｉｒｃｌｅ    ７０，９０，０      ＄＄  ４分の３の弧を描く。
ａｔ            ３２０，２４０      ＄＄  円の中心を元に戻す。
ｃｉｒｃｌｅ    ４０，ｆｉｌｌ      ＄＄  内側を塗りつぶした円を中央に
描く。
【０７５８】
ｃｌｅａｒｕ
ユニット・キャッシュからユニット（１ないしは複数）を削除する。
【０７５９】
ｃｌｅａｒｕ    ［ユニット］
ｃｌｅａｒｕ    セレクタ；  ユニット；  ユニット；．．．
【０７６０】
説明
ユニットは、必要に応じて仮想メモリの中央ユニット・キャッシュに自動的にロードされ、新しいユニットのためにスペースを確保する必要が生じると削除される。「ｃｌｅａｒｕ」は、ユニット・キャッシュから特定のユニットを手動で削除するとき使用する。
【０７６１】
タグをブランクにすると、現在のユニットを除くすべてのユニットがユニット・キャッシュから削除される。
【０７６２】
「ｃｌｅａｒｕ」は、現在のオペレーション・モードに対応するタイプのファイルからロードされたユニットだけをクリアする。オペレーション・モードについては「ｏｐｅｒａｔｅ」を参照されたい。
【０７６３】
「ｃｌｅａｒｕ」は、「ｅｄｉｓｋ」コマンドの影響を受ける。１つのファイルのコピーが、異なるドライブ上に複数存在する可能性があることから、ユニット・キャッシュ内には１つのユニットのコピーが複数個存在することがある。「ｚｅｄｉｓｋ」が−１であれば、すべてのドライブのサーチによってユニットがフェッチされている。「ｃｌｅａｒｕ」のタグ内の「ｌｅｓｓｏｎ／ｕｎｉｔ」指定に一致し、現在のオペレーション・モード（ソースまたはバイナリ）に一致するすべてのユニットが、ユニット・キャッシュからクリアされる。「ｚｅｄｉｓｋ」が−１でなければ、現在の実行ディスクからのユニットだけがユニット・キャッシュからクリアされる。
【０７６４】
ユニットの参照およびオペレーション・モードの指定に一致するユニットが存在しないため、ユニット・キャッシュからクリアするユニットがない場合は、「ｚｒｅｔｕｒｎ」が−２にセットされる。また、現在実行中のユニットに対する明示的なクリアが試みられた場合には、「ｚｒｅｔｕｒｎ」が１９にセットされる。
【０７６５】
「ｃｌｅａｒｕ」は、どのバージョンのユニットをメモリ内に残すか、あるいはどのバージョンのユニットをメモリから削除して他のユニットのためのスペースを空けるかということをコントロールするために、基本的にユーティリティ・プログラムによって使用される。
【０７６６】
システム変数
ｚｒｅｔｕｒｎ
−２      冗長なオペレーション；アクションなし。
−１      オペレーションは成功した。
１９      無効なオペレーション。現在のユニットのクリアが試みられた。
【０７６７】
ｃｌｏｃｋ
システム・クロックの読み出しまたは書き込みを行う。
【０７６８】
ｃｌｏｃｋ    ｔｉｍｅ４  ［  ，ｓｅｔ］
【０７６９】
説明
システム・クロックからの情報を指定した４バイトのバッファにコピーする。「ｓｅｔ」キーワードは、そのバッファ内の時刻にシステム・クロックをセットする。
【０７７０】
システム・クロックは、４バイトとして格納される。各１バイトは、時、分、秒、および１００分の１秒を表す。
【０７７１】
例
システム・クロックを読み出し、時および分を単位として現在の時刻を表示する。
【０７７２】
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｓｙｓｃｌｏｃｋ，    ４            ＄＄  時刻を保持させる変数
．        ｈｏｕｒｓ，  １
．        ｍｉｎｕｔｅｓ，  １
．        ｓｅｃｏｎｄｓ，  １
．        ｈｕｎｄｒｔｈｓ，  １
ｄｅｆｉｎｅ    ｅｎｄ
＊
ｃｌｏｃｋ    ｓｙｓｃｌｏｃｋ        ＄＄  現在の時刻を読み出す
ａｔ        ５：５
ｗｒｉｔｅ    Ｔｈｅ  ｃｕｒｒｅｎｔ  ｔｉｍｅ  ｉｓ：  ＜＜ｔ，  ｈｏｕｒｓ，２＞＞：＜＜ｔ，  ｍｉｎｕｔｅｓ，２＞＞）
（この「ｗｒｉｔｅ」ステートメントの意味：「現在の時刻：ｈｏｕｒｓ時ｍｉｎｕｔｅｓ分」）
【０７７３】
ｃｏｌｏｒ
フォアグラウンドの色をセットする。
【０７７４】
ｃｏｌｏｒ    カラー
ｃｏｌｏｒ    セレクタ；  カラー；  カラー；．．．
ｗｒｉｔｅ    ＜＜ｃｏｌｏｒ  ｜  ｃ，  カラー＞＞
【０７７５】
説明
これに続くテキストおよびグラフィックスに用いるフォアグラウンドの色を選択する。
【０７７６】
キーワードの後ろの「＋」はその色の明るいバージョンを示す。キーワード「ｂａｃｋｇｎｄ」は、バックグラウンドの色を指定する（「ｃｏｌｏｒ」コマンドの最後に指定する）。キーワードに代えて、数式によりハードウェア色番号を表してもよい。
【０７７７】
キーワードは、最初の１６色をセットする（キーワード色については「コマンド・シンタクスの説明」を参照されたい）。色番号は、１５より高いコードを付した色に使用しなければならない。
【０７７８】
デフォルトのフォアグラウンド色は「ｗｈｉｔｅ」つまりホワイトである。このデフォルトは、「ｃｏｌｏｒ」に続けて「ｓｔａｔｕｓ  ｓａｖｅ；  ｄｅｆａｕｌｔ」を使用することにより変更することができる。
【０７７９】
テキストの色は、「ｗｒｉｔｅ」コマンドのタグにテキストの属性を埋め込むことによって変更することができる。
【０７８０】
ＣＧＡの使用時の制約
コンポジット・カラー・モニタ上でＣＧＡグラフィック表示を使用するときは、シックネス・オプションをオン（ｔｈｉｃｋ  ｏｎ）にすると、より正確な色が生成される。
【０７８１】
ｓｃｒｅｅｎ        ｃｇａ，  ｇｒａｐｈｉｃｓ，  ｍｅｄｉｕｍ，  
ｃｏｌｏｒ
ｓｃｒｅｅｎ        ｃｇａ，  ｇｒａｐｈｉｃｓ，  ｍｅｄｉｕｍ，  
ｍｏｎｏ
【０７８２】
「ｓｃｒｅｅｎ  ｃｇａ，  ｇｒａｐｈｉｃｓ，  ｍｅｄｉｕｍ」使用時は、４つグループの色が使用できる。
【表５】
2009009584.tif 000007
【０７８３】
表示上のすべての色は、同じグループから選択しなければならない。表示上にある色のグループと異なるグループから１色を選ぶと、スクリーン上のすべての色が新しく選択されたグループの対応する色に変化してしまう。
【０７８４】
例
ブルーのボックス内にテキストをイエロで表示する。
【０７８５】
ｓｃｒｅｅｎ    ｖｇａ
ｃｏｌｏｒ      ｂｌｕｅ
ｂｏｘ          ５：１０；１０：５０
ｃｏｌｏｒ      ｙｅｌｌｏｗ
ａｔ            ６：１５；１０：５０
ｗｒｉｔｅ    Ａ  ｐａｒａｇｒａｐｈ  ｏｆ  ｙｅｌｌｏｗ  ｔｅｘｔ．．．
（この「ｗｒｉｔｅ」ステートメントの意味：「イエロで表示したテキストの段落は．．．」）
【０７８６】
システム変数
ｚｃｏｌｏｒ    カラー・キーワードの名前によりセットしたときは色番号、
色番号でセットしたときは−１。
ｚｈｃｏｌｏｒ  ハードウェア色番号
【０７８７】
ｃｏｌｏｒｅ
イレースの色をセットする。
【０７８８】
ｃｏｌｏｒｅ    カラー
ｃｏｌｏｒｅ    セレクタ；  カラー；  カラー；．．．
ｗｒｉｔｅ    ＜＜ｃｏｌｏｒ  ｜  ｃｅ，  カラー＞＞
【０７８９】
説明
イレースに使用するイレース色をセットする。これには、「ｍｏｄｅ  ｅｒａｓｅ」のプロット、スクリーン全体のイレース、「ｅｒａｓｅ」コマンド、および「ｍｏｄｅ  ｒｅｗｒｉｔｅ」における文字バックグラウンドのプロットが含まれる。スクリーンまたはウィンドウをイレース色により塗りつぶすためには、「ｃｏｌｏｒｅ」の実行後にフルスクリーンのイレースを実行しなければならない。
【０７９０】
カラー・キーワードは、最初の１６色をセットする（「コマンド・シンタクス規約」参照）。色番号は、１５より高いコードを付した色に使用しなければならない。
【０７９１】
キーワードに代えて、数式によりハードウェア色番号を表してもよい。
【０７９２】
ＣＧＡグラフィック表示においては、「ｃｏｌｏｒｅ」にも「ｃｏｌｏｒ」と同じ制約がある。詳細については「ｃｏｌｏｒ」コマンドの説明を参照されたい。ＣＧＡテキスト表示においては、「ｃｏｌｏｒｅ」により明るいバージョンの色（８〜１５）を使用することはできない。
【０７９３】
デフォルトのイレース色は「ｂｌａｃｋ」つまりブラックである。このデフォルトは、「ｃｏｌｏｒｅ」に続けて「ｓｔａｔｕｓ  ｓａｖｅ；  ｄｅｆａｕｌｔ」を使用することにより変更することができる。
【０７９４】
例        
「実行（ＥＮＴＥＲ）」キーが押された後、スクリーンをブルーでイレースする。
【０７９５】
ｓｃｒｅｅｎ    ｖｇａ
ｃｏｌｏｒ      ｗｈｉｔｅ＋
ａｔ            ５：５
ｗｒｉｔｅ    Ｐｒｅｓｓ  Ｅｎｔｅｒ  ｔｏ  ｓｅｅ  ｔｈｅ  ｂａｃｋｇｒｏｕｎｄ  ｃｏｌｏｒ  ｃｈａｎｇｅ．
（この「ｗｒｉｔｅ」ステートメントの意味：「実行（ＥＮＴＥＲ）キーを押せばバックグラウンド色が変化します。」）
ｃｏｌｏｒｅ    ｂｌｕｅ
ｐａｕｓｅ    ｐａｓｓ＝  ％ｅｎｔｅｒ
ｅｒａｓｅ
ａｔ        ５：５
ｗｒｉｔｅ    Ｔｈｅ  ｓｃｒｅｅｎ  ｈａｓ  ｂｅｅｎ  ｅｒａｓｅｄ  ｔｏ  ｃｈａｎｇｅ  ｔｈｅ
ｂａｃｋｇｒｏｕｎｄ  ｃｏｌｏｒ．
（この「ｗｒｉｔｅ」ステートメントの意味：「スクリーンがイレースされ、バックグラウンド色が変更されました。）
【０７９６】
システム変数
ｚｃｏｌｏｒｅ  カラー・キーワードの名前によりセットしたときは色番号、色
番号でセットしたときは−１。
ｚｈｃｏｌｏｒｅ  ハードウェア・イレース色番号
【０７９７】
ｃｏｍｐａｒｅ
２つのテキスト文字列を比較する。
【０７９８】
ｃｏｍｐａｒｅ  ｓｔｒｉｎｇ１，  ｓｔｒｉｎｇ２，  ｌｅｎｇｔｈ，  ｒｅｓｕｌｔ
【０７９９】
ｓｔｒｉｎｇ１  基準文字列。一般に変数または８バイト以下の左寄せ文字係数
ｓｔｒｉｎｇ２  比較文字列。変数に格納しなければならない。
ｌｅｎｇｔｈ    比較するバイト数
ｒｅｓｕｌｔ    −１＝一致；  ０＝不一致；  ＞０＝最後に一致した文字
【０８００】
説明
バイトごとに２つの文字列を比較する。可変境界をクロスすることができる。「ｃｏｍｐａｒｅ」が成功すれば「ｒｅｓｕｌｔ」に値が返される。文字列が部分的に一致する場合は、最後に一致した文字のポジションが「ｒｅｓｕｌｔ」に返される。
【０８０１】
「ｃｏｍｐａｒｅ」は、文字列が一致すると「ｒｅｓｕｌｔ」に加えて、「ｚｒｅｔｕｒｎ」を−１にセットする。文字列が一致しない場合、「ｚｒｅｔｕｒｎ」は「英数字的に」いずれが小さいかを示すべくセットされ、最初の方が小さければ０、後の方が小さければ１にセットされる。一致しないときは最初から順に文字のＡＳＣＩＩコードが比較されていずれの文字列が「数字的に」小さいか決定される。たとえば「ａａａ」と「ａａｂ」を比較する場合、最初の文字列の３番目の文字「ａ」の方が次の文字列の３番目の文字「ｂ」より小さいことから「ｚｒｅｔｕｒｎ」が０にセットされる。
なお、いずれの文字列にもシステム変数を使用することはできない。
【０８０２】
例
ユーザに先進むことを許可する前に「パスワード」をチェックする。
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｉｎｐｕｔ    ，８              ＄＄  ユーザの入力
ｐａｓｓｗｏｒｄ  ＝  ’ｓａｔｕｒｄａｙ’    ＄＄  本日のパスワード
ｒｅｔｕｒｎ    ，２              ＄＄  「ｃｏｍｐａｒｅ」によって返さ
れる値
ｄｅｆｉｎｅ    ｅｎｄ
＊
ａｔ        ３：２
ｗｒｉｔｅ    Ｅｎｔｅｒ  ｔｈｅ  ｐａｓｓｗｏｒｄ  ｏｆ  ｔｈｅ  ｄａｙ．．．
（この「ｗｒｉｔｅ」ステートメントの意味：「本日のパスワードを入力してください．．．」）
ｌｏｎｇ        ８
ａｒｒｏｗ      ４：２
ｚｏｒｏ        ｉｎｐｕｔ
ｓｔｏｒｅａ    ｉｎｐｕｔ
ｃｏｍｐａｒｅ  ｐａｓｓｗｏｒｄ，  ｉｎｐｕｔ，８，ｒｅｔｕｒｎ
ｏｋ        ｒｅｔｕｒｎ
．        ｗｒｉｔｅ      Ｇｏｏｄ．  Ｌｅｔ’ｓ  ｃｏｎｔｉｎｕｅ
（この「ｗｒｉｔｅ」ステートメントの意味：「パスワードが一致しました。続けてください。」）
ｎｏ
．        ｗｒｉｔｅ      Ｓｏｒｒｙ，  ｗｒｏｎｇ  ｐａｓｓｗｏｒｄ．  Ｅｒａｓｅ  ａｎｄ  ｔｒｙ  ａｇａｉｎ．
（この「ｗｒｉｔｅ」ステートメントの意味：「パスワードに誤りがあります。消去してから再入力してください。」）
ｅｎｄａｒｒｏｗ
【０８０３】
システム変数
ｚｒｅｔｕｒｎ
−１      最初の文字列＝２番目の文字列
０      最初の文字列＜２番目の文字列
１      ２番目の文字列＞最初の文字列
【０８０４】
ｃｏｍｐｕｔｅ
文字列の数値を計算する。
【０８０５】
ｃｏｍｐｕｔｅ  ｓｔｒｉｎｇ，  ｌｅｎｇｔｈ，  ｒｅｓｕｌｔ
ｓｔｒｉｎｇ    数値的な値を求める文字列を格納するためのテキスト変数。
ｌｅｎｇｔｈ    値を求める文字数。
ｒｅｓｕｌｔ    計算結果を保持するためのテキスト変数。
【０８０６】
説明
文字列を数値に変換する。文字列は前後の空白、先頭の＋または−、および小数点を含むことができる。文字列は、これ以外の演算子を含むことができない。変換が成功すると、その値が「ｒｅｓｕｌｔ」に返される。「ｃｏｍｐｕｔｅ」が失敗した場合（「ｚｒｅｔｕｒｎ」＝０）は「ｒｅｓｕｌｔ」が元のまま維持され、変更されない。
【０８０７】
例      
文字列を数値に変換し、その値を使用して演算を行い、再度それを文字列に戻す。
【０８０８】
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｓｔｒｉｎｇ，  １０              ＄＄  変換する文字列を保持する
ｌｅｎｇｔｈ    ，２              ＄＄  文字列の長さ
ｎｕｍｂｅｒ    ，４，ｒ          ＄＄  結果の実数
ｄｅｆｉｎｅ    ｅｎｄ
＊
ｐａｃｋ      ｓｔｒｉｎｇ；  ｌｅｎｇｔｈ  ；２３．６５
ｃｏｍｐｕｔｅ  ｓｔｒｉｎｇ，  ｌｅｎｇｔｈ，  ｎｕｍｂｅｒ        
＄＄  数値に変換
ｃａｌｃ      ｎｕｍｖｅｒ  ←  ｎｕｍｂｅｒ  ＊  ４．８３
ｐａｃｋｚ    ｓｔｒｉｎｇ；；＜＜ｓｈｏｗ，  ｎｕｍｂｅｒ＞＞    
＄＄  文字列に変換
ａｔ        ５：５
ｗｒｉｔｅ    Ｔｈｅ  ｎｅｗ  ｓｔｒｉｎｇ  ｉｓ＜＜ｓｈｏｗａ，  ｓｔｒｉｎｇ  ＞＞
（この「ｗｒｉｔｅ」ステートメントの意味：「新しい文字列は〜です。」）
【０８０９】
システム変数
ｚｒｅｔｕｒｎ
−１      オペレーションは成功した。
０      文字列内に有効な数が見つからない。
１      変換後の数値を結果の変数に格納しようとしたがオーバー
フローした。結果の変数を大きくする必要がある。
【０８１０】
ｄａｔｅ
現在の日付の読み出しまたはセットを行う。
【０８１１】
ｄａｔｅ      ｄａｔｅ４  ［  ，ｓｅｔ］
【０８１２】
説明
システム・クロックから日付を読み出し、変数に格納する。「ｓｅｔ」キーワードを使用すると、その変数内に格納した日付にシステムの日付がセットされる。
【０８１３】
システムの日付は、４バイトとして格納される。２バイトが年、１バイトが月、１バイトが日である。
【０８１４】
例
現在の日付を表示する。
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｔｏｄａｙ，４
．        ｙｅａｒ，    ２，  ｉｎｔｅｇｅｒ
．        ｍｏｎｔｈ，  １，  ｉｎｔｅｇｅｒ
．        ｄａｙ，  １，  ｉｎｔｅｇｅｒ
ｄｅｆｉｎｅ    ｅｎｄ
＊
ｄａｔｅ      ｔｏｄａｙ
＊
ａｔ        １０：１０
ｗｒｉｔｅ    Ｔｏｄａｙ  ｉｓ  ＄＄＄
ｗｒｉｔｅｃ    ｍｏｎｔｈ；；；Ｊａｎｕａｒｙ  ；Ｆｅｂｒｕａｒｙ  ；Ｍａｒｃｈ  ；Ａｐｒｉｌ  ；Ｍａｙ  ；Ｊｕｎｅ  ；
ｕｌｙ  ；Ａｕｇｕｓｔ  ；Ｓｅｐｔｅｍｂｅｒ  ；Ｏｃｔｏｂｅｒ  ；Ｎｏｖｅｍｂｅｒ  ；Ｄｅｃｅｍｂｅｒ  ；
ｗｒｉｔｅ    ＜＜ｓｈｏｗ，ｄａｙ＞＞，  ＜＜ｓｈｏｗ，ｙｅａｒ＞＞．
【０８１５】
ｄｅｂｕｇ
プログラムのステップ実行をオンまたはオフにする。
【０８１６】
ｄｅｂｕｇ    ｏｎ  ｜  ｏｆｆ
ｄｅｂｕｇ    セレクタ；  ｏｎ  ｜  ｏｆｆ  ；  ｏｎ  ｜  ｏｆｆ；．．．
【０８１７】
説明
「ｄｅｂｕｇ  ｏｎ」は、現在のユニットの実行を停止し、デバッガを起動する。デバッガからは、コマンドごとに実行を継続し（ステップ・モード）、あるいは指定したコマンドまたはユニットに到達するまで実行を継続することができる（ブレークポイント・モード）。「ｄｅｂｕｇ  ｏｆｆ」は通常の実行に戻る。
【０８１８】
デバッグ・ツールの終了方法を次に示す。
●  「ｄｅｂｕｇ  ｏｆｆ」の実行。
●  「キャンセル（ＥＳＣ）」を押してデバッグを終了する。
●  システム・ツール・ウィンドウを介して終了する。
●  エディタに戻る（通常「シフト」＋「Ｆ２」）。
●  実行エラー。
【０８１９】
「ｄｅｂｕｇ」は、通常、ソース・モードの実行間においてのみ機能する。バイナリ作成時には、このオプションを選択することによってバイナリ・モードでこれを機能させることができる。「ｄｅｂｕｇ」は、ステューデント・エクスキュータから機能させることはできない。
【０８２０】
デバッガは、ユニットを実行する間に「シフト」＋「２」を押し、その後「Ｓｙｓｔｅｍ  ｋｅｙ  ｏｐｔｉｏｎ（システム・キー・オプション）」メニューから「Ｄｅｂｕｇ（デバッグ）」を選択することによっても起動することができる。
【０８２１】
ｄｅｖｉｃｅ
ＴｅｎＣＯＲＥデバイス・ドライバをコントロールする。
【０８２２】
ｄｅｖｉｃｅ    ｄｅｖｉｃｅ，  ｆｕｎｃｔｉｏｎ  
［，  ｖａｒｉａｂｌｅ  ［  ，ｌｅｎｇｔｈ］］
ｄｅｖｉｃｅ        呼び出すデバイスの番号、０から２５５までの範囲。
ｆｕｎｃｔｉｏｎ    呼び出すデバイス固有の機能番号、０から２５５まで
の範囲。
ｖａｒｉａｂｌｅ    指定した機能によって必要となるデータ変数。
ｌｅｎｇｔｈ        「ｖａｒｉａｂｌｅ」の長さ、定義済み以外の長さが
ある場合に使用。
【０８２３】
説明
「ｄｅｖｉｃｅ」は、ＴｅｎＣＯＲＥ言語によって直接サポートされていないが、ＴｅｎＣＯＲＥデバイス・サポート・ファイルを通じて実装されるハードウェア・デバイスに対するコントロールをオーサーに提供する。これには、特殊マウス、タッチパネル、および対話型ビデオといった、ＴｅｎＣＯＲＥコマンドに組み込まれた標準サポートを超える機能が含まれる。「ｖａｒｉａｂｌｅ」タグは、この機能がデータ変数を必要とするときに限り使用される。
【０８２４】
デバイス・サポート・ファイル
「ｄｅｖｉｃｅ」を使用するためには、ＴｅｎＣＯＲＥデバイス・サポート・ファイルが必要になる。デバイス・サポート・ファイルは、ＴｅｎＣＯＲＥエクスキュータを開始する前に実行（ロード）され、メモリ内に常駐する。「ｄｅｖｉｃｅ」の用法は、アドレスされているデバイス・サポート・ファイルによる。
【０８２５】
システム変数
ｚｒｅｔｕｒｎ
リターン前にプロセッサのレジスタＡＬの値にセットされる。デバイス・サポート・ファイルの一部には、ステータス情報を返すためにこの機能を使用するものがある。
【０８２６】
ｄｉｓａｂｌｅ
システムの機能をディセーブルする（「ｅｎａｂｌｅ」の逆）。
【０８２７】
ｄｉｓａｂｌｅ  キーワード（１つないしは複数）
ｐｏｉｎｔｅｒ    ポインタの表示ならびに全ポインタ入力をディセーブル
する。
ｐｔｒｕｐ        ポインタ・アップ入力をディセーブルする。
ｃｕｒｓｏｒ      テキスト・モード表示でのカーソルの点滅をディセーブ
する。
ａｒｒｏｗ      「ａｒｒｏｗ」プロンプトのプロットをディセーブルする。
ａｂｓｏｌｕｔｅ  絶対スクリーン・プロットをディセーブルする。
ｂｒｅａｋ        割り込み処理からの「ｂｒｅａｋ」修飾「ｆｌｏｗ」分
岐をディセーブルする。
ａｒｅａ        「ａｒｅａ」入力をディセーブルする。
ｆｏｎｔ          フォントからではなく文字セットから文字をプロットす
る。
ｍｏｄｅ          テキストに埋め込まれたモード変更をディセーブルする。
【０８２８】
単一の「ｄｉｓａｂｌｅ」ステートメントによって複数の機能をディセーブルすることができる。これらのシステム機能の初期状態については、「デフォルト」のセクションを参照されたい。
【０８２９】
説明
ｄｉｓａｂｌｅ  ｐｏｉｎｔｅｒ
ポインタの表示ならびにポインティング・デバイスからの全入力をディ
セーブルする。
【０８３０】
ｄｉｓａｂｌｅ  ｐｔｒｕｐ
ポインティング・デバイスからのボタン・アップ入力をオフにする。
【０８３１】
ｄｉｓａｂｌｅ  ｃｕｒｓｏｒ
テキスト・モード・スクリーンにおけるカーソルの点滅をディセーブル
する。
【０８３２】
ｄｉｓａｂｌｅ  ａｒｒｏｗ
「ａｒｒｏｗ」プロンプト文字「＞」およびそれに続く空白文字の表示をディセーブルする。ユーザ入力が発生するロケーションは、「ａｒｒｏｗ」コマンド内に与えられたロケーションとまったく同じになる。
【０８３３】
ｄｉｓａｂｌｅ  ａｂｓｏｌｕｔｅ
「ｅｎａｂｌｅ  ａｂｓｏｌｕｔｅ」プロット・モードをオフにする。これ以降は、スクリーン上のグラフィックスが「ｓｃａｌｅ」「ｒｏｔａｔｅ」「ｗｉｎｄｏｗ」および「ｏｒｉｇｉｎ」コマンドによって修正されることになる。
【０８３４】
ｄｉｓａｂｌｅ  ｂｒｅａｋ
割り込みプログラム実行からの「ｂｒｅａｋ」で修飾された「ｆｌｏｗ」分岐をディセーブルする。この場合でも、標準入力処理ロケーションにおいては「ｆｌｏｗ」分岐が発生する（説明については「ｆｌｏｗ」コマンドを参照されたい）。「ｂｒｅａｋ」は、全体が完全実行されなければならない重要なコード・ブロック（例：ファイル操作およびその「ｚｒｅｔｕｒｎ」チェック）においてしばしばディセーブルされる。終了手段がこれ以外にないプログラム・ループにおいては、「ｂｒｅａｋ」のディセーブルを避けるべく充分な注意が必要である。「シフト」＋「１」および「シフト」＋「２」等のシステムのルーティング・キーが、「ｄｉｓａｂｌｅ  ｂｒｅａｋ」によってオフになり、システムのハングアップを招く可能性がある。
【０８３５】
ｄｉｓａｂｌｅ  ａｒｅａ
「ａｒｅａ」入力をディセーブルする。「ａｒｅａ」入力がディセーブルの間も新しい「ａｒｅａ」の定義は可能であるが、「ａｒｅａ」入力がイネーブルになるまでそこからの入力は発生しない。
【０８３６】
ｄｉｓａｂｌｅ  ｆｏｎｔ
フォントからではなく文字セットから文字をプロットする。文字セットは、旧式の文字定義形式である。
【０８３７】
ｄｉｓａｂｌｅ  ｍｏｄｅ
テキストに埋め込まれたモード変更をディセーブルする。
【０８３８】
デフォルト
「ｅｎａｂｌｅ」および「ｄｉｓａｂｌｅ」コマンド機能のシステム・デフォルトは、「ｉｎｉｔｉａｌ」コマンドを実行することによって次のようにセットされる。
オン        ａｒｅａ，  ａｒｒｏｗ，  ｂｒｅａｋ，  ｆｏｎｔ，  
ｍｏｄｅ
オフ        ａｂｓｏｌｕｔｅ，  ｃｕｒｓｏｒ，  ｐｏｉｎｔｅｒ，  
ｐｔｒｕｐ
【０８３９】
ディセーブル機能の状態
「ｄｉｓａｂｌｅ」コマンドによって影響を受けているシステム機能の現在のオン／オフ状態は、４バイトのシステム変数「ｚｅｎａｂｌｅ」のビットマップから知ることができる。
【０８４０】
ｚｅｎａｂｌｅのビット        機能
１                  ａｂｓｏｌｕｔｅ
２                  ｐｏｉｎｔｅｒ
３                  ｍｏｄｅ
４                  ｃｕｒｓｏｒ
５                  ｐｔｒｕｐ
６                  ｆｏｎｔ
７                  ａｒｅａ
１２                  ｂｒｅａｋ
１３                  ａｒｒｏｗ
【０８４１】
「ｚｅｎａｂｌｅ」は、「ｂｉｔ」関数を使用して調べる。ビットがセットされていればオン、セットされていなければオフである。一例を次に示す。
ｂｉｔ（ｚｅｎａｂｌｅ，２）＝−１であれば「ｐｏｉｎｔｅｒ」はオンである。
ｂｉｔ（ｚｅｎａｂｌｅ，２）＝０であれば「ｐｏｉｎｔｅｒ」はオフである。
【０８４２】
例
ファイルをアタッチする間「ｆｌｏｗ」分岐をオフにし、結果の成否を試みる
【０８４３】
ｆｌｏｗ          ｄｏ；  ％ｆ１０；  ｇｌｏｓｓａｒｙ；  ｂｒｅａｋ      
＄＄    「ｆｌｏｗ  ｂｒｅａｋ」分岐
．．．
ｄｉｓａｂｌｅ    ｂｒｅａｋ                                    
＄＄    割り込み禁止
ａｔｔａｃｈ      ’ａｆｉｌｅ’；  ｎａｍｅｓｅｔ                
＄＄    ファイルのオープンを試みる
ｊｕｍｐ          ｚｒｅｔｕｒｎ；；ｅｒｒｏｒｕ              
＄＄    成否をチェック
ｅｎａｂｌｅ      ｂｒｅａｋ                                        
＄＄    「ｆｌｏｗ  ｂｒｅａｋ」をイネーブ
ルに戻す
【０８４４】
ｄｏ
サブルーチンとしてユニットを実行する。
【０８４５】
ｄｏ        ユニット［（［１６以下の引数］  ［；  １６以下の戻り値］）］
ｄｏ        セレクタ；  ユニット［（［１６以下の引数］  ［；  １６以下の戻り値］）］；  ．．．
【０８４６】
説明
指定したユニットをサブルーチンとして実行する。サブルーチンの実行完了時は、「ｄｏ」コマンドの直後のコマンドに実行が戻る。サブルーチンは、２０レベルの深さまでネスティングすることができる。
【０８４７】
「ｄｏ」コマンドを含むユニットは、「呼び出し」ユニットと呼ばれることがあり、サブルーチンは「呼び出される」ユニットと呼ばれる。
【０８４８】
サブルーチンの間に新しいメイン・ユニットへの「ｊｕｍｐ」分岐がある場合は、「ｄｏ」コマンドの続きに実行が戻ることはなく「ｄｏ」スタックがクリアされる。
【０８４９】
「ｄｏ」は最大で１６個の引数をサブルーチンに渡し、最大で１６個の引数をサブルーチンから受け取ることができる。送り側の引数のリストと受け側の引数のリストの区別にはセミコロンが使用され、リスト内の引数の区別にはカンマが使用される。
「呼び出された」ユニットは、渡された引数を「ｒｅｃｅｉｖｅ」コマンドを用いて受け取る必要があり（「ｎｏｃｈｅｃｋ  ｒｅｃｅｉｖｅ」コマンドが有効である場合を除く）、それを行わないと実行エラーを招く。「呼び出された」ユニットは、戻り値として要求されている引数を「ｒｅｔｕｒｎ」コマンドを用いて返す必要があり（「ｎｏｃｈｅｃｋ  ｒｅｔｕｒｎ」コマンドが有効である場合を除く）、それを行わないと実行エラーを招く。
【０８５０】
すべての引数は、値として渡され、返される。しかしながら、変数のアドレスについては、「ｖａｒｌｏｃ（）」関数を使用する値として送ることができる。
【０８５１】
例
例１
コースウェアの記述においては、複数の場所で使用される表示およびルーチンを１つの場所に格納し、サブルーチンとして必要に応じて呼び出せるようにすると都合の良いことがある。ユニット「ｈｅａｄｅｒ」は、レッスンのこのセグメント用のページに現れるタイトル・バーのためのコーディングを含んでいる。ユニット「ｄｉａｇｒａｍ１」は、レッスンのこのセグメントに共通な画像その他のグラフィックスをプロットすることができる。レッスン「ｔｏｏｌ」において、ユニット「ｎａｖｉｇａｔｅ」に対する「ｄｏ」呼び出しを使用し、この一連のレッスンにおけるすべてのレッスンを通じてステューデント・ナビゲーション・オプションの標準ディスプレイを表示する。
【０８５２】
ｄｏ        ｈｅａｄｅｒ            ＄＄  現在のレッスン内
ｄｏ        ｄｉａｇｒａｍｌ        ＄＄  現在のレッスン内
ａｔ        ２０：１０
ｗｒｉｔｅ    Ｔｈｉｓ  ｄｉａｇｒａｍ  ｓｈｏｗｓ  ｔｈｅ  
ｓｙｓｔｅｍ  ｗｅ  ｗｉｌｌ  ｂｅ  ｓｔｕｄｙｉｎｇ
ｎｅｘｔ  ａｔ  ｔｈｅ  ｓｔａｒｔ  ｏｆ  ｉｔｓ  ｃｏｍｂｕｓｔｉｏｎ  ｃｙｃｌｅ．
（この「ｗｒｉｔｅ」ステートメントの意味：「この図は、次に学習するこの燃焼サイクルの開始時における系を示しています。」）
ｄｏ        ｔｏｏｌｓ，ｎａｖｉｇａｔｅ  ＄＄  レッスン・ツール内
【０８５３】
例２
この「ｄｏ」ステートメントは、値３をサブルーチン「ｍｏｎｔｈ」に渡し、数字識別される月名および日数を戻り値として求める。「ｄｏ」コマンドの引数リストは、セミコロンによって２つの部分に区分されており、最初の部分は送り側の引数、２番目の部分は戻り側の引数である。
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｎａｍｅ，８
ｄａｙｓ，１
ｄｅｆｉｎｅ    ｅｎｄ
ｄｏ        ｍｏｎｔｈ（３；  ｎａｍｅ，ｄａｙｓ）    ＄＄  ３番目の月
の名前と日数を獲得
＊        
ｗｒｉｔｅ    ＜＜ａ，ｎａｍｅ＞＞  ｈａｓ  ＜＜ｓ，ｄａｙｓ＞＞  
ｄａｙｓ．
＊
ｕｎｉｔ      ｍｏｎｔｈ
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｌｎｕｍｂｅｒ，１
ｌｎａｍｅ，８
ｌｄａｙｓ，１
ｄｅｆｉｎｅ    ｅｎｄ
ｒｅｃｅｉｖｅ  ｌｎｕｍｂｅｒ                ＄＄  月番号の引数を獲得
ｐａｃｋｚｃ    ｌｎｕｍｂｅｒ；  ｌｎａｍｅ；  ；  ；  ；Ｊａｎｕａｒｙ；Ｆｅｂｒｕａｒｙ；Ｍａｒｃｈ；Ａｐｒｉｌ．．．
ｃａｌｃｓ    ｌｎｕｍｂｅｒ；  ｌｄａｙｓ  ←  ；  ；  ３１；  ２８；  ３１；  ３０．．．
ｒｅｔｕｒｎ    ｌｎａｍｅ，ｌｄａｙｓ          ＄＄  名前と日数を返す
【０８５４】
例３
残念そうな顔または喜んでいる顔のイメージによりステューデントの状態をグラフィック表示するユニット「ｓａｄ」および「ｓｍｉｌｅ」のいずれか一方を選択するための真／偽セレクタとして式「ｓｃｏｒｅ  ＜  ７５」を使用する。
ｄｏ        ｓｃｏｒｅ  ＜  ７５；  ｓａｄ；  ｓｍｉｌｅ
【０８５５】
ｄｏｔ
スクリーン上に単一のピクセルをプロットする。
【０８５６】
ｄｏｔ      ［ロケーション］
【０８５７】
説明
指定されたロケーションに現在のプロット・モードおよび色を使用して単一のピクセルをプロットする。ロケーションを指定しないと、現在のロケーション（ｚｘ，  ｚｙ）が使用される。
【０８５８】
「ｄｏｔ」コマンドは、「ｔｈｉｃｋ」の影響を受ける。「ｔｈｉｃｋ  ｏｎ」であればすべてのドットが２ピクセルの厚さでプロットされ、「ｔｈｉｃｋ  ｏｆｆ」であればすべてのドットが１ピクセルの厚さでプロットされる。
【０８５９】
例
例１
ポーズが再開されたとき、マウスのポインタのあるロケーション（ｚｉｎｐｕｔｘ，  ｚｉｎｐｕｔｙ）にドットを表示する。
ｅｎａｂｌｅ    ｐｏｉｎｔｅｒ
ｐａｕｓｅ      ｐａｓｓ＝％ｐｏｉｎｔｅｒ
ｄｏｔ          ｚｉｎｐｕｔｘ，ｚｉｎｐｕｔｙ
【０８６０】
例２
「ｄｏｔ」を使用してサイン・カーブを描く。
【０８６１】
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｘ        ，８，ｒ            ＄＄  ｘ座標の実数
ｄｅｆｉｎｅ    ｅｎｄ
＊
ｌｏｏｐ      ｘ  ←    ０，  ２＊  π，  ０．１
．        ｄｏｔ        ５０＊ｘ，  １００＋５０＊ｓｉｎ（ｘ）
ｅｎｄｌｏｏｐ
システム変数
ｚｘ        現在の水平グラフィック・スクリーン・ロケーション
ｚｙ        現在の垂直グラフィック・スクリーン・ロケーション  
【０８６２】
ｄｒａｗ
２つのスクリーン・ロケーションの間に直線を描画する。
【０８６３】
ｄｒａｗ      ［ロケーション］；  ［ロケーション］；  ［ロケーション］；．．．
【０８６４】
説明
現在のプロット・モードプロット・モードおよび色を使用して直線を描く。直線は、セミコロンで分けた各ロケーションをつなぐ形で描かれる。「ｄｒａｗ」は、二重セミコロン（；；）に到達すると、次のロケーションにスキップする。
【０８６５】
「ｄｒａｗ」コマンドを使用して複数の直線を続けて描くことができる。タグをセミコロンで開始すれば、現在のスクリーン・ロケーションから直線が開始される。
【０８６６】
「ｔｈｉｃｋ  ｏｎ」であればすべてのドットが２ピクセルの太さでプロットされ、「ｔｈｉｃｋ  ｏｆｆ」であればすべてのドットが１ピクセルの太さでプロットされる。
【０８６７】
例
例１
１つの「ｄｒａｗ」コマンドを使用してスクリーン上にボックスおよび三角形を描く。ここで二重セミコロンを使用して２つの図形を分離していること、複数の直線を連続させて各図形を描画していることに注意されたい。
ｄｒａｗ      １０，１０；  ８０，１０；  ８０，１００；  １０，１００  
；  １０，１０；；  １０，１３０；
１００，１３０；  １０，１９０；  １０，１３０
【０８６８】
例２
スクリーン（またはウィンドウ）の任意のロケーションに連続する線分を描く。先頭のセミコロンは、現在のスクリーン・ロケーションを各描画の開始とするために使用されているが、これは、直前の描画の終了ポイントである。
【０８６９】
ｌｏｏｐ
．        ｃｏｌｅｒ        ｒａｎｄｉ（１，１５）      
＄＄  任意の色を選択
．        ｄｒａｗ        ；ｒａｎｄｉ（０，ｚｄｉｓｐｘ），  
ｒａｎｄｉ  （０，  ｚｄｉｓｐｙ）
．        ｄｅｌａｙ      ．０１
ｅｎｄｌｏｏｐ
【０８７０】
ｅｌｌｉｐｓｅ
楕円を描画する。
【０８７１】
ｅｌｌｉｐｓｅ  Ｘ半径，  Ｙ半径  ［，  ｆｉｌｌ  ｜  ａｎｇｌｅ１，  ａｎｇｌｅ２］
【０８７２】
説明
現在のスクリーン・ロケーションを中心として楕円（または楕円の一部）を描く。キーワード「ｆｉｌｌ」を使用すると、現在のフォアグラウンドの色により楕円の内側が塗りつぶされる。完全な楕円を描く場合には、描画の前後でスクリーン・ロケーションが同じになる。したがってスクリーン・ロケーションを再セットしなくても中心が共通の楕円を描くことができる。
【０８７３】
タグが２つの形式は完全な楕円の描画に使用する。タグが４つの形式は、開始角度と終了角度によりで指定される楕円の弧、つまり部分的な楕円を描くとき使用する。弧は、必ず最初の角度から２番目の角度に向かって反時計回りに描かれる。たとえば、「ｅｌｌｉｐｓｅ  １００，６０，０，９０」というコマンドでは、４分の１の楕円が描かれる。しかし「ｅｌｌｉｐｓｅ  １００，６０，９０，０」というコマンドでは、４分の３の楕円が描かれる。なお、弧の描画（４タグの「ｅｌｌｉｐｓｅ」）においては、描画後は現在のスクリーン・ロケーションが更新される。
【０８７４】
例
スクリーン上に中心が共通の楕円と２つの部分楕円（弧）を描く。
ａｔ        ｚｘｍａｘ／２，  ｚｙｍａｘ／２        ＄＄  楕円の中心をセット
ｅｌｌｉｐｓｅ  ９５，  ５０                ＄＄  完全な楕円を描く
ｅｌｌｉｐｓｅ  ９０，  ４０，  ０，  ９０  ＄＄  ４分の１の楕円を描く
ａｔ      ｘｍａｘ／２，  ｚｙｍａｘ／２    ＄＄  楕円の中心を再セット
ｅｌｌｉｐｓｅ  ７０，  ３０，  ９０，  ０  ＄＄  ４分の３の楕円を描く
【０８７５】
ｅｌｓｅ
「ｉｆ／ｅｌｓｅ」プログラム構造において他方の選択肢を与える。
【０８７６】
ｅｌｓｅ
【０８７７】
説明
直前の「ｉｆ」または「ｅｌｓｅｉｆ」コマンドが偽である場合に、「ｅｌｓｅ」と「ｅｎｄｉｆ」の間のインデントしたコマンドが実行される。「ｉｆ」構造は、必ずしも「ｅｌｓｅ」コマンドを必要としない。「ｉｆ」構造についての詳細は、「ｉｆ」コマンドの説明を参照されたい。
【０８７８】
例
ｉｆ        ｓｃｏｒｅ        ＞  ９０
．        ｗｒｉｔｅ        Ｖｅｒｙ  Ｇｏｏｄ！
（この「ｗｒｉｔｅ」ステートメントの意味：「たいへんよくできました」）
ｅｌｓｅｉｆ    ｓｃｏｒｅ        ＞  ７５
．        ｗｒｉｔｅ        ＯＫ，  ｂｕｔ  ｙｏｕ  ｃｏｕｌｄ  ｄｏ  ｂｅｔｔｅｒ．
（この「ｗｒｉｔｅ」ステートメントの意味：「よくできました」）
ｅｌｓｅ
．        ｗｒｉｔｅ        Ｙｏｕ  ｎｅｅｄ  ｍｏｒｅ  ｐｒａｃｔｉｃｅ．
（この「ｗｒｉｔｅ」ステートメントの意味：「もうすこしがんばりましょう」）
ｅｎｄｉｆ
【０８７９】
ｅｌｓｅｉｆ
「ｉｆ／ｅｌｓｅ」プログラム構造において別の条件を与える。
【０８８０】
ｅｌｓｅｉｆ    条件
【０８８１】
説明
「ｉｆ」コマンドおよびこれ以前のすべての「ｅｌｓｅｉｆ」が偽であると評価され、現在の「ｅｌｓｅｉｆ」が真であると評価されると、これに続くインデントしたコマンドが実行される。その後「ｅｎｄｉｆ」に続くコマンドにコントロールが渡される。「ｉｆ」構造についての詳細は、「ｉｆ」コマンドの説明を参照されたい。
【０８８２】
例
ｉｆ        ｓｃｏｒｅ        ＞  ９０
．        ｗｒｉｔｅ        Ｖｅｒｙ  Ｇｏｏｄ！
（この「ｗｒｉｔｅ」ステートメントの意味：「たいへんよくできました」）
ｅｌｓｅｉｆ    ｓｃｏｒｅ        ＞  ７５
．        ｗｒｉｔｅ        ＯＫ，  ｂｕｔ  ｙｏｕ  ｃｏｕｌｄ  ｄｏ
ｂｅｔｔｅｒ．
（この「ｗｒｉｔｅ」ステートメントの意味：「よくできました」）
ｅｌｓｅ
．        ｗｒｉｔｅ      Ｙｏｕ  ｎｅｅｄ  ｍｏｒｅ  ｐｒａｃｔｉｃｅ．
（この「ｗｒｉｔｅ」ステートメントの意味：「もうすこしがんばりましょう」）
ｅｎｄｉｆ
【０８８３】
ｅｎａｂｌｅ
システム機能をイネーブルする（「ｄｉｓａｂｌｅ」の逆）。
【０８８４】
ｅｎａｂｌｅ    キーワード（１つないしは複数）
ｅｎａｂｌｅ  ＜＜ｖａｒｉａｂｌｅ４＞＞
ｐｏｉｎｔｅｒ  ポインタの表示ならびに入力をオンにする。
ｐｔｒｕｐ      ポインタ・アップ入力をイネーブルする。
ｃｕｒｓｏｒ    テキスト・モード表示におけるカーソルの点滅をオンにする。
ａｒｒｏｗ    「ａｒｒｏｗ」プロンプトのプロットを再イネーブルする。
ａｂｓｏｌｕｔｅ  絶対スクリーン・プロットをオンにする。
ｂｒｅａｋ    割り込み処理への「ｂｒｅａｋ」修飾「ｆｌｏｗ」分岐を再イ
ネーブルする。
ａｒｅａ      「ａｒｅａ」入力を再イネーブルする。
ｆｏｎｔ      フォントからの文字プロットを再イネーブルする。
ｍｏｄｅ      テキストに埋め込まれたモード変更を再イネーブルする。
【０８８５】
単一の「ｅｎａｂｌｅ」ステートメントによって複数の機能をイネーブルすることができる。これらのシステム機能の初期状態については、「デフォルト」のセクションを参照されたい。
【０８８６】
説明
ｅｎａｂｌｅ  ｐｏｉｎｔｅｒ
ポインタの表示ならびにポインティング・デバイスからの入力をオンにする。
【０８８７】
ｅｎａｂｌｅ  ｐｔｒｕｐ
ポインタ・アップ入力をイネーブルする。「ｐｔｒｕｐ」がイネーブルになっていない場合は、ボタンが押し下げられたときだけポインティング・デバイスが入力を生成する。
【０８８８】
ｅｎａｂｌｅ  ｃｕｒｓｏｒ
テキスト・モード・スクリーンにおけるカーソルの点滅をオンにする。このコマンドは、グラフィック・スクリーンには影響しない。
【０８８９】
ｅｎａｂｌｅ  ａｒｒｏｗ
「ａｒｒｏｗ」プロンプト文字「＞」およびそれに続く空白文字のプロットを再イネーブルする。
【０８９０】
ｅｎａｂｌｅ  ａｂｓｏｌｕｔｅ
絶対スクリーン・プロット・モードをオンにする。これ以降は、スクリーン上のグラフィックスが「ｓｃａｌｅ」「ｒｏｔａｔｅ」「ｗｉｎｄｏｗ」および「ｏｒｉｇｉｎ」コマンドによって修正されない。なお「ｓｃａｌｅ」「ｒｏｔａｔｅ」および「ｏｒｉｇｉｎ」コマンドは、「ｒｅｌａｔｉｖｅ」オフおよび「ｃｌｉｐ」オフによってウィンドウの修正が開始されると、事実上にオフになる。
【０８９１】
ｅｎａｂｌｅ  ｂｒｅａｋ
プログラム実行に割り込みを発生する「ｂｒｅａｋ」修飾「ｆｌｏｗ」分岐を再イネーブルする。
【０８９２】
ｅｎａｂｌｅ  ａｒｅａ
「ａｒｅａ」入力を再イネーブルする。すでに定義済みの現在の「ａｒｅａ」は、「ａｒｅａ」入力がディセーブルの間に定義されたものも含めて、この時点でアクティブになる。
【０８９３】
ｅｎａｂｌｅ  ｆｏｎｔ
文字セットからではなくフォントからの文字プロットに戻る。文字セットは、旧式の文字定義形式である。
【０８９４】
ｅｎａｂｌｅ  ｍｏｄｅ
テキストに埋め込まれたモード変更を再イネーブルする。
【０８９５】
ｅｎａｂｌｅ  ＜＜ｖａｒｉａｂｌｅ４＞＞
変数形式の「ｅｎａｂｌｅ」コマンドを使用すると、４バイトの変数内のビット・セッティングに従ってすべての機能をイネーブル／ディセーブルすることができる。この変数は、通常、システム変数「ｚｅｎａｂｌｅ」セーブするためのコピーであり、このコピーは、この後すべての機能を以前の状態に戻すとき使用できる。機能のビットマップについては、この後の「イネーブル機能の状態」で説明する。
【０８９６】
デフォルト
「ｅｎａｂｌｅ」および「ｄｉｓｂｌｅ」コマンド機能に関するシステム・デフォルトは、「ｉｎｉｔｉａｌ」コマンドを実行することによって次のようにセットされる。
オン        ａｒｅａ，  ａｒｒｏｗ，  ｂｒｅａｋ，  ｆｏｎｔ，  
ｍｏｄｅ
オフ        ａｂｓｏｌｕｔｅ，  ｃｕｒｓｏｒ，  ｐｏｉｎｔｅｒ，
ｐｔｒｕｐ
【０８９７】
イネーブル機能の状態
「ｅｎａｂｌｅ」コマンドによって影響を受けているシステム機能の現在のオン／オフ状態は、４バイトのシステム変数「ｚｅｎａｂｌｅ」のビットマップから知ることができる。
【０８９８】
ｚｅｎａｂｌｅのビット        機能
１                  ａｂｓｏｌｕｔｅ
２                  ｐｏｉｎｔｅｒ
３                  ｍｏｄｅ
４                  ｃｕｒｓｏｒ
５                  ｐｔｒｕｐ
６                  ｆｏｎｔ
７                  ａｒｅａ
１２                  ｂｒｅａｋ
１３                  ａｒｒｏｗ
【０８９９】
「ｚｅｎａｂｌｅ」は、「ｂｉｔ」関数を使用して調べる。ビットがセットされていればオン、セットされていなければオフである。一例を次に示す。
ｂｉｔ（ｚｅｎａｂｌｅ，２）＝−１であれば「ｐｏｉｎｔｅｒ」はオンである。
ｂｉｔ（ｚｅｎａｂｌｅ，２）＝０であれば「ｐｏｉｎｔｅｒ」はオフである。
【０９００】
例
ポインタの絶対スクリーン・ロケーションをポインタ・ロケーションに表示する。この座標および表示は物理的なスクリーンに対して相対的であり、「ｗｉｎｄｏｗ」「ｏｒｉｇｉｎ」「ｓｃａｌｅ」または「ｒｏｔａｔｅ」コマンドによる影響を受けない。
ｅｎａｂａｌｅ  ｐｏｉｎｔｅｒ，ａｂｓｏｌｕｔｅ
＄＄  「ｐｏｉｎｔｅｒ」および「ａｂｓｏｌｕｔｅ」をオンにす
る
ｌｏｏｐ
．        ｐａｕｓｅ                ＄＄  マウスを移動し、ボタンを押す
．        ａｔ        ｚｉｎｐｕｔｘ，ｚｉｎｐｕｔｙ    
＄＄  ポインタのロケーション
．        ｗｒｉｔｅ    ＜ｓ，ｚｉｎｐｕｔｘ＞  −  ＜ｓ，ｚｉｎｐｕｔ
ｙ＞＞    ＄＄  座標の表示
ｅｎｄｌｏｏｐ
【０９０１】
ｅｎｄｉｆ
「ｉｆ／ｅｌｓｅ」プログラム構造を終了する。
【０９０２】
ｅｎｄｉｆ
【０９０３】
説明
「ｉｆ」構造の終了を示す。各「ｉｆ」は、同じインデント・レベルにそれと対になる「ｅｎｄｉｆ」を備えていなければならない。「ｉｆ」構造についての詳細は、「ｉｆ」コマンドの説明を参照されたい。
【０９０４】
例
ｉｆ        ｓｃｏｒｅ        ＞  ９０
．        ｗｒｉｔｅ        Ｖｅｒｙ  Ｇｏｏｄ！
（この「ｗｒｉｔｅ」ステートメントの意味：「たいへんよくできました」）
ｅｌｓｅｉｆ    ｓｃｏｒｅ        ＞  ７５
．        ｗｒｉｔｅ        ＯＫ，  ｂｕｔ  ｙｏｕ  ｃｏｕｌｄ  ｄｏ  
ｂｅｔｔｅｒ．
（この「ｗｒｉｔｅ」ステートメントの意味：「よくできました」）
ｅｌｓｅ
．        ｗｒｉｔｅ      Ｙｏｕ  ｎｅｅｄ  ｍｏｒｅ  ｐｒａｃｔｉｃｅ．
（この「ｗｒｉｔｅ」ステートメントの意味：「もうすこしがんばりましょう」）
ｅｎｄｉｆ
【０９０５】
ｅｎｄｌｏｏｐ
「ｌｏｏｐ」プログラム構造を終了する。
【０９０６】
ｅｎｄｌｏｏｐ
説明
「ｌｏｏｐ」構造の終了を示す。各「ｌｏｏｐ」は、同じインデント・レベルにそれと対になる「ｅｎｄｌｏｏｐ」を備えていなければならない。「ｌｏｏｐ」構造についての詳細は、「ｌｏｏｐ」コマンドの説明を参照されたい。
【０９０７】
例
スクリーン上に５０個のＸを表示する。
【０９０８】
ｌｏｏｐ      ｉｎｄｅｘ      ←  １，５０
．        ｗｒｉｔｅ      Ｘ
ｅｎｄｌｏｏｐ
【０９０９】
ｅｒａｓｅ
スクリーン上のボックス、フレーム、あるいは文字をイレースする。
【０９１０】
ｅｒａｓｅ    ［ロケーション］  ［；  ［ロケーション］  
［；  Ｘｆｒａｍｅ  ［，  Ｙｆｒａｍｅ］］］
【０９１１】
説明
バックグラウンドの色でスクリーン上のボックス、フレームをイレースする。「ロケーション」の説明については「コマンド・シンタクス規約」を参照されたい。「ｂｏｘ」コマンドはフォアグラウンドの色を用いることを除けば「ｅｒａｓｅ」と同一である。
【０９１２】
フレーム幅の引数がある場合には、塗りつぶしのボックスではなく、フレームでイレースされる。左右の（線の）幅は、最初のフレーム引数により、上下の（線の）幅は２番目のフレーム引数によりピクセル数を単位として指定する。２番目のフレーム引数を省略すると、スクリーンに現れたとき左右の線幅との関係がもっとも適切になる線幅に上下の線幅が設定される。
【０９１３】
例
例１
スクリーン（またはウィンドウ）全体をブルーでイレースする。
ｃｏｌｏｒｅ    ｂｌｕｅ
ｅｒａｓｅ
【０９１４】
例２
幅２００ピクセル、高さ１００ピクセルの矩形をバックグランドの色でイレースする。各ロケーションのｘ，ｙ座標は、グラフィック座標を使用して指定する。
ｅｒａｓｅ    １０１，１０１；  ３００，２００
【０９１５】
例３
「ｗｒｉｔｅ」ステートメントによりテキストを表示した後、ポーズを置いてイレースする。「ｔｅｘｔ  ｍｅａｓｕｒｅ」コマンドは、それに続くテキストの段落をスクリーン上にプロットするスクリーン・エリアを決定するために使用されている。このコマンドは、システム変数「ｚｐｌｏｔｘｌ」および「ｚｐｌｏｔｙｌ」に左下コーナーの座標を、「ｚｐｌｏｔｘｈ」および「ｚｐｌｏｔｙｈ」に右上コーナーの座標をそれぞれ返す。
【０９１６】
ｔｅｘｔ      ｍｅａｓｕｒｅ          ＄＄  テキスト測定を初期化
＊
ａｔ          １００，１５０
ｗｒｉｔｅ    Ｔｈｉｓ  ｉｓ  ａ  ｐａｒａｇｒａｐｈ  ｏｆ  ｔｅｘｔ  
ｏｆ  ａｒｂｉｔｒａｒｙ
ｌｅｎｇｔｈ  ｔｈａｔ  ｗｉｌｌ  ｂｅ  ｅｒａｓｅｄ．．．
（この「ｗｒｉｔｅ」ステートメント内のテキストの意味：「任意長のテキストの段落がイレースされます」）
＊
ｐａｕｓｅ
ｅｒａｓｅ    ｚｐｌｏｔｘｌ，  ｚｐｌｏｔｙｌ；  ｚｐｌｏｔｘｈ，  ｚｐｌｏｔｙｈ
【０９１７】
例４
１０文字をイレースする。
ａｔ          １０：１
ｅｒａｓｅ    １０  
【０９１８】
ｅｒｒｏｒ
実行エラー・ユニットを指定する。
【０９１９】
ｅｒｒｏｒ    ［ユニット］
ｅｒｒｏｒ    セレクタ；  ユニット；  ユニット；．．．
【０９２０】
説明
実行エラー・レッスンおよびユニットをセットする。実行エラーが発生すると、システムは「ｅｒｒｏｒ」により指定したユニットにジャンプする。ユニットを指定しないと、ＴｅｎＣＯＲＥシステム・エラー・メッセージが表示される。
【０９２１】
ブランク・タグ形式はエラーが発生したレッスンおよびユニットをクリアする。一度エラー・ユニットをセットすると、別の「ｅｒｒｏｒ」コマンドが到来するまで有効になる。
【０９２２】
「エラー・ユニット」は、通常システムの起動時に「ｒｏｕｔｅｒ  ｌｅｓｓｏｎ」によってセットされる。
【０９２３】
「ｅｒｒｏｒ」が実行されると、現在のオペレーション・モード（バイナリまたはソース）がエラー・レッスンおよびユニットの名前とともにセーブされる。エラーによりエラー・ユニットへの分岐が生じると、セーブされているオペレーション・モードが使用され、バイナリ・ファイルとソース・ファイルのいずれからエラー・ユニットをフェッチするかが決定される。
【０９２４】
システム変数
ｚｅｒｒｏｒｌ      エラー・レッスンの名前
ｚｅｒｒｏｒｕ      エラー・ユニットの名前
【０９２５】
ｅｘｃｈａｎｇ
メモリの２つの領域の内容を交換する。
【０９２６】
ｅｘｃｈａｎｇ      キーワード，  ｏｆｆｓｅｔ；  キーワード，  
ｏｆｆｓｅｔ；  ｌｅｎｇｔｈ
キーワード  ｒｏｕｔｖａｒｓ  ｜  ｒ      ルータ変数
ｄｉｓｐｌａｙ  ｜  ｄ      ＣＧＡスクリーンのディスプレイ・メモリ
ｇｌｏｂａｌ  ｜  ｇ        グローバル変数
ｌｏｃａｌ  ｜  ｌ          ローカル変数
ｓｙｓｖａｒｓ  ｜  ｓ      システム・データ領域
ｓｙｓｐｒｏｇ  ｜  ｐ      システム・プログラム領域
ａｂｓｏｌｕｔｅ  ｜  ａ    絶対メモリ・ロケーション
ｏｆｆｓｅｔ                メモリ・ベースからのオフセット
ｌｅｎｇｔｈ                交換するバイト数
【０９２７】
説明
２つのメモリ領域間でバイトを交換する。最大６５，５３５（６４Ｋ−１）バイトを交換することができる。オフセット０は、メモリ領域の先頭を指定する。
【０９２８】
相対アドレッシングを行うため、ＴｅｎＣＯＲＥはコンピュータのメモリを複数の領域に分割し、各領域は固有のキーワードを有する。ロケーションは、キーワードおよびそれに続いてオフセットを与えることによって指定される。オフセット０は、その領域の先頭のバイトを示す。
【０９２９】
各キーワードについての追加情報を次に示す。
【０９３０】
ｒｏｕｔｖａｒｓ
２５６バイトのメモリ領域であり、「ｅｘｃｈａｎｇ」および「ｔｒａｎｓｆｒ」を経由するときだけアクセスが可能になる。この領域は、ユーザが操作を行っている間、ステューデント・ルータによってデータを格納するために使用される。なお、このルータを使用するときは、この領域の先頭の１２８バイトを変更しないように注意しなければならない。
【０９３１】
ｄｉｓｐｌａｙ
ＣＧＡスクリーンのディスプレイ・メモリ。「ｅｘｃｈａｎｇ」は、これ以外のディスプレイ・タイプ（ＥＧＡ、ＶＧＡ等）のディスプレイ・メモリにアクセスすることができない。
【０９３２】
ｓｙｓｖａｒｓ
この領域はデータの格納に使用できない。
【０９３３】
ｓｙｓｐｒｏｇ
この領域はデータの格納に使用できない。
【０９３４】
ａｂｓｏｌｕｔｅ
絶対メモリ・ロケーションを参照するプログラムは、マルチタスク環境で機能しないことがある。
【０９３５】
「ｅｘｃｈａｎｇ」は、コンピュータ内のすべてのメモリ領域にアクセスできることから、使用には充分な注意が必要である。
【０９３６】
変数を用いてオフセットを指定する場合は、「ｖａｒｌｏｃ（）」関数を使用して特定の変数のオフセットを指定することができる。
【０９３７】
同様に、「ａｂｓｌｏｃ（）」関数を使用して絶対メモリ・ロケーションを指定することができる。しかしながら、ウィンドウズ（Ｗｉｎｄｏｗｓ）やＯＳ／２等のマルチタスク動作環境では「ａｂｓｌｏｃ（）」が適切に機能しないことがある。
【０９３８】
「ｖａｒｌｏｃ（）」を使用する場合、ローカルに定義した名前は、グローバルに定義した名前より高い優先レベルを有する。このため、「ｅｘｃｈａｎｇ」とともに「ｖａｒｌｏｃ（）」を使用すると予期しない結果が生じる可能性がある。
【０９３９】
例
例１
式「ｖａｒｌｏｃ（ｓｃｏｒｖａｒ）」は、ユーザの成績が収められたグローバル変数の先頭を指定する。
ｅｘｃｈａｎｇ  ｇｌｏｂａｌ，  ｖａｒｌｏｃ（ｓｃｏｒｖａｒ）  ；  
ｒｏｕｔｖａｒｓ，１２８；  １２８
＊        「ｒｏｕｔｖａｒｓ」の後ろ半分を使用する。
【０９４０】
例２
Ｘ０内の２バイトの値がＸ１内の２バイト値より確実に小さくなるようにする。
ｉｆ        ｘ０  ＞  ｘ１
．        ｅｘｃｈａｎｇ  ｇｌｏｂａｌ，ｖａｒｌｏｃ  （ｘ０）  ；ｇｌｏｂａｌ，ｖａｒｌｏｃ  （ｘ１）  ；２
ｅｎｄｉｆ
【０９４１】
ｅｘｅｃ
ＤＯＳのプログラムまたはコマンドを実行する。
【０９４２】
ｅｘｅｃ      キーワード．．．
ｃｏｍｍａｎｄ    ＤＯＳコマンド・プロセッサを通してプログラムまたは
コマンドを実行するか、ＤＯＳプロンプトへのアクセス
を提供する。
ｆｉｌｅ        プログラムをダイレクトに実行する。
【０９４３】
説明
ｅｘｅｃ  ｃｏｍｍａｎｄ  ［，  ａｌｌ  ｜  ｍｅｍｏｒｙＳｉｚｅ  ］
ＤＯＳコマンド行のプロンプトへのアクセスを提供する。ＴｅｎＣＯＲＥに戻るときは、ＤＯＳプロンプトで「ｅｘｉｔ」とタイプする。
【０９４４】
ＤＯＳプロンプトで入力されるプログラムまたはコマンドは、ＴｅｎＣＯＲＥによって現在使用されていないメモリをＤＯＳメモリとして使用することができる。「ａｌｌ」オプションを指定すると、一時的にＴｅｎＣＯＲＥのほとんどが削除されて、ＤＯＳの使用可能メモリが最大になる。メモリ・サイズ（ｍｅｍｏｒｙＳｉｚｅ）を指定すれば、システムは指定キロバイト数のメモリを空にすることを試みる。ＤＯＳコマンド・プロセッサがこのメモリの一部を使用することに注意する必要がある。
【０９４５】
ｅｘｅｃ  ｃｏｍｍａｎｄ  ［，  ａｌｌ  ｜  ｍｅｍｏｒｙＳｉｚｅ  ］；  
ｂｕｆｆｅｒ  ［，ｌｅｎｇｔｈ  ］
ＤＯＳコマンド・プロセッサがロードされ、バッファの内容が渡され、それをＤＯＳプロンプトにタイプ入力した場合と同じ効果を生じる。パスのサーチおよびバッチ・ファイル実行等のＤＯＳプロンプトの機能も使用可能である。長さ（ｌｅｎｇｔｈ）を指定しなければ、定義済みのバッファ長が使用される。その場合、バッファ末尾の未使用のバイトをゼロで埋める必要がある。
【０９４６】
ＤＯＳに渡されたプログラムまたはコマンドは、ＴｅｎＣＯＲＥによって現在使用されていないメモリをＤＯＳメモリとして使用することができる。「ａｌｌ」オプションを指定すると、一時的にＴｅｎＣＯＲＥのほとんどが削除されて、使用可能メモリが最大になる。メモリ・サイズ（ｍｅｍｏｒｙＳｉｚｅ）を指定すれば、システムは指定キロバイト数のメモリを空にすることを試みる。ＤＯＳコマンド・プロセッサが、このメモリの一部を使用する。
ｅｘｅｃ  ｆｉｌｅ  ［，  ａｌｌ  ｜  ｍｅｍｏｒｙＳｉｚｅ  ］；
ｂｕｆｆｅｒ  ［，ｌｅｎｇｔｈ  ］
「．ｅｘｅ」ファイルおよび「．ｃｏｍ」ファイル（のみ）を実行する。完全なファイル名（拡張子「．ｅｘｅ」または「．ｃｏｍ」を含む）を始め、ドライブおよびパスを指定しなければならない。パスのサーチおよびバッチ・ファイル実行等のＤＯＳプロンプトの機能は使用できない。最初が空白文字またはスラッシュ（／）で始まる文字列は、引数として実行ファイルに渡される。長さ（ｌｅｎｇｔｈ）を指定しなければ、定義済みのバッファ長が使用される。その場合、バッファ末尾の未使用のバイトをゼロで埋める必要がある。
【０９４７】
実行ファイルは、ＴｅｎＣＯＲＥによって現在使用されていないメモリをＤＯＳメモリとして使用することができる。「ａｌｌ」オプションを指定すると、一時的にＴｅｎＣＯＲＥのほとんどが削除されて、ＤＯＳの使用可能メモリが最大になる。メモリ・サイズ（ｍｅｍｏｒｙＳｉｚｅ）を指定すれば、システムは指定キロバイト数のメモリを空にすることを試みる。
【０９４８】
「ｆｉｌｅ」形式の「ｅｘｅｃ」は、ＤＯＳコマンド・プロセッサがロードされないことから「ｃｏｍｍａｎｄ」形式より効率が高い。この形式においては、実行したプログラムに関するエラー・レポートにアクセスすることができる（「ｃｏｍｍａｎｄ」形式はＤＯＳコマンド・プロセッサにエラーをレポートする）。
【０９４９】
例
ここでは、これ以下に示す例のすべてに次の定義を使用する。
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｂｕｆ，  １００
ｄｅｆｉｎｅ    ｅｎｄ
【０９５０】
例１
「ｃｏｍｍａｎｄ」形式の「ｅｘｅｃ」を使用し、「ａｒｒｏｗ」（プロンプトの矢印）の位置にタイプしたＤＯＳディレクティブまたはプログラム名を実行する。使用可能メモリは最大にする。
ｗｒｉｔｅ    Ｅｎｔｅｒ  ＤＯＳ  ｃｏｍｍａｎｄ  ｔｏ  ｅｘｅｃｕｔｅ：
（この「ｗｒｉｔｅ」ステートメントの意味：「実行したいＤＯＳコマンドを入力してください」
ｌｏｎｇ      １００
ａｒｒｏｗ
ｓｔｏｒｅａ    ｂｕｆ              ＄＄  入力を変数に格納する
ｏｋ
ｅｎｄａｒｒｏｗ
ｅｘｅｃ      ｃｏｍｍａｎｄ，ａｌｌ；ｂｕｆ
ｗｒｉｔｅｃ    ｚｒｅｔｕｒｎ；；Ｅｒｒｏｒ：ｚｒｅｔｕｒｎ  ＝  ＜＜ｓｈｏｗｔ，ｚｒｅｔｕｒｎ＞＞
【０９５１】
例２
「ｃｏｍｍａｎｄ」形式の「ｅｘｅｃ」を使用し、カレント・ディレクトリにある全ＴｅｎＣＯＲＥデータセットをドライブ「ａ：」にコピーする。使用可能メモリは最大にする。
ｐａｃｋｚ    ｂｕｆ；；ｘｃｏｐｙ  ＊．ｄａｔ  ａ：
ｅｘｅｃ      ｃｏｍｍａｎｄ，ａｌｌ；ｂｕｆ
ｗｒｉｔｅｃ    ｚｒｅｔｕｒｎ；；Ｅｒｒｏｒ：  ｚｒｅｔｕｒｎ  ＝  ＜＜ｓｈｏｗｔ，ｚｒｅｔｕｒｎ＞＞
【０９５２】
例３
「ｆｉｌｅ」形式の「ｅｘｅｃ」を使用し、ディレクトリ「Ｄ：￥ＰＲＯＧＳ」にあるオートデスク・アニメータ・アニメーション・プログラム「ＱＵＩＣＫＦＬＩ．ＥＸＥ」を呼び出し、ディレクトリ「Ｃ：￥ＡＮＩＭＳ」にあるアニメーション「ＢＡＣＫＨＯＥ．ＦＬＩ」を再生する。２５０キロバイトのメモリが必要になる。
【０９５３】
ｓｃｒｅｅｎ    ｍｃｇａ，ｍｅｄｉｕｍ
ｐａｃｋｚ    ｂｕｆ；；ｄ：￥ｐｒｏｇｓ￥ｑｕｉｃｋｆｌｉ．ｅｘｅ  ｃ：￥ａｎｉｍｓ￥ｂａｃｋｈｏｅ．ｆｌｉ
ｅｘｅｃ      ｆｉｌｅ，２５０；ｂｕｆ
ｗｒｉｔｅｃ    ｚｒｅｔｕｒｎ；；Ｅｒｒｏｒ：  ｚｒｅｔｕｒｎ  ＝  ＜＜ｓｈｏｗｔ，ｚｒｅｔｕｒｎ＞＞
【０９５４】
システム変数
「ｅｘｅｃ」コマンドは、次に示すシステム変数をセットする。
【０９５５】
「ｃｏｍｍａｎｄ」形式
ｚｒｅｔｕｒｎ      オペレーション成功時のレポート
−１              ＤＯＳコマンド・プロセッサは実行に成功した。
０              ＤＯＳコマンド・プロセッサをロードする充分なメモ
リがないか、要求された量のメモリを提供できない。
１              ＤＯＳコマンド・プロセッサ（ＣＯＭＭＡＮＤ．ＣＯ
Ｍ）が見つからない。
【０９５６】
「ｆｉｌｅ」形式
ｚｒｅｔｕｒｎ    オペレーション成功時のレポート
−１    ＤＯＳコマンド・プロセッサは実行に成功した。
０    プログラムをロードする充分なメモリがないか、
要求された量のメモリを提供できない。
１    プログラムが見つからない。
ｚｒｒｌｅｖｌ    実行したプログラムから返される「ＤＯＳ  ＥＲＲＯＲＬＥＶＥＬ」の値。
【０９５７】
いずれの形式も拡張ＤＯＳエラー情報を提供するシステム変数「ｚｅｄｏｓｅｒｒ」および「ｚｅｒｒｃｏｄｅ」をセットする。
【０９５８】
ｅｘｉｔｓｙｓ
ＤＯＳまたはＴｅｎＣＯＲＥを呼び出したプログラムに戻る。
【０９５９】
ｅｘｉｔｓｙｓ  ［  ｅｒｒｏｒ  ［  ，ｎｏｅｒａｓｅ  ］］
ｅｒｒｏｒ      ＤＯＳ変数「ＥＲＲＯＲＬＥＶＥＬ」に渡される１バイト
の整数。
ｎｏｅｒａｓｅ  スクリーン・モードの変更およびスクリーンのイレースは
行われない。
【０９６０】
説明
ＴｅｎＣＯＲＥエクスキュータを呼び出したプログラムにコントロールを返す。通常、ユーザはＤＯＳプロンプトに戻る。ＴｅｎＣＯＲＥがＤＯＳのバッチ・ファイル経由で起動された場合は、バッチ・ファイル内の次のコマンドが実行される。「ｅｒｒｏｒ」を指定している場合は、ＤＯＳ変数「ＥＲＲＯＲＬＥＶＥＬ」に値が渡され、ＤＯＳコマンドを使用してそれをテストすることができる。また「ｎｏｅｒａｓｅ」キーワードを使用すれば、スクリーン・モードの変更およびスクリーンのイレースは行われない。このキーワードは、戻り値「ｅｒｒｏｒ」を使用している場合に限り指定することができる。
【０９６１】
「ＥＲＲＯＲＬＥＶＥＬ」値
ＴｅｎＣＯＲＥは、各種のエラー条件を示すために「ＥＲＲＯＲＬＥＶＥＬ」値を使用する。オーサーは、０から３１までの値を「ｅｘｉｔｓｙｓ」とともに使用することを避けたほうがよい。
【０９６２】
０          「ｅｘｉｔｓｙｓ（タグなし）」経由の正常終了。
１          コピー・プロテクト違反。
２          ＴｅｎＣＯＲＥコマンド行オプションにエラーがある。
３          ＴｅｎＣＯＲＥを実行するためのメモリが不足している。
４          ディスプレイ・ドライバが見つからない。
５          ディスプレイ・ドライバにエラーがある。
（例：無効なバージョン番号）
６          ＴｅｎＣＯＲＥ環境の文字列のシンタクスにエラーがある。
７〜１５    将来使用するために予約。
１６        開始ユニットが見つからない。
１７        最初のユニット実行時にスタートアップが見つからなかった。
１８        開始ユニットのバージョンがエクスキュータと矛盾する。
１９        すべてのドライブは「ＴＣＤＩＳＫ」または「ＴＣＳＥＡＲＣＨ
」により実行された。
２０〜３０  将来使用するために予約。
３１        汎用実行エラーディスプレイから「シフト」＋「７」が操作さ
れた。
【０９６３】
ｅｘｔｉｎ
外部Ｉ／Ｏポートからデータを読み取る。
【０９６４】
ｅｘｔｉｎ      ｐｏｒｔ，  ｂｕｆｆｅｒ，  ｌｅｎｇｔｈ
ｐｏｒｔ      読み取り元のＩ／Ｏポートのアドレス
ｂｕｆｆｅ    ポートからデータを受信するためのバッファ
ｌｅｎｇｔ    受信するバイト数
【０９６５】
説明
指定した外部Ｉ／Ｏポートから指定バイト数のデータ読み取る。このコマンドを使用し、シリアル・ポートまたはパラレル・ポート経由で外部デバイスをコントロールすることができる。シリアル・ポートおよびパラレル・ポートのアドレッシングならびにコントロールの詳細については「ＩＢＭテクニカル・リファレンス・マニュアル（Ｔｅｃｈｎｉｃａｌ  Ｒｅｆｅｒｅｎｃｅ  Ｍａｎｕａｌ）」を参照されたい。「ｅｘｔｉｎ」の逆は「ｅｘｔｏｕｔ」である。
【０９６６】
例
例１
ＣＯＭ１から１バイト分のデータを読み取る。
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｒｓｔａｔｕｓ  ，  １              ＄＄  データを読み込む変数
ｄｅｆｉｎｅ    ｅｎｄ
＊
ｅｘｔｉｎ    １０１６，ｒｓｔａｔｕｓ，１
●アドレス１０１６（ｈ３Ｆ８）から「ｒｓｔａｔｕｓ」に１バイト
を読み込む
【０９６７】
例２
ｘｏｎ／ｘｏｆｆプロトコルを使用し、「ｅｘｔｉｎ」および「ｅｘｔｏｕｔ」によりＣＯＭ１ポートにバイトを送信する。このルーチンは、プリンタをコントロールするルーチンの基礎とすることができる。
【０９６８】
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｓｔａｔｕｓ    ，１    ＄＄  「ｃｏｍ１」用のステータス・フラグ
ｄｒ        ，１        ＄＄  データ・レディ。ステータス・フラグのビッ
ト０がセットされていれば、データの読み出
し可能
ｒｓｔａｔｕｓ  ，１    ＄＄  「ｃｏｍ１」から読み取る１文字
ｔｘ        ，１        ＄＄  送信ステータス。０であればポートは別の１
文字の送信を受け付けることができる。
ｘｏｎｏｆｆ    ，１    ＄＄  「ｘｏｎ／ｘｏｆｆ」フラグ。１は「ｘｏｆ
ｆ」それ以外「ｘｏｎ」
ｃｈａｒ      ，１      ＄＄  ポートから送信する１文字
＊
ｌｓｒ  ＝  １０２１    ＄＄  行ステータス・レジスタのアドレス
ｒｘｖａｒ    ＝  １０１６    ＄＄  受信変数レジスタのアドレス
ｔｘｖａｒ    ＝  １０１６    ＄＄  送信変数レジスタのアドレス
ｄｅｆｉｎｅ    ｅｎｄ
＊
ｌｏｏｐ
．        ｌｏｏｐ
．        ．        ｅｘｔｉｎ          ｌｓｒ，ｓｔａｔｕｓ，１
＊        ．        「ｓｔａｔｕｓ」の最初のビットをチェックし、
＊        ．        「ｘｏｎ／ｘｏｆｆ」が送信されたか調べる
．        ．        ｃａｌｃ          ｄｒ  ←  ｓｔａｔｕｓ
＄ｍａｓｋ＄  １
．        ｏｕｔｌｏｏｐ  ｄｒ  ＝  ０        ＄＄  「ｘｏｎ／ｘｏｆｆ
」がないので先に進む
●「ｘｏｎ／ｘｏｆｆ」があれば、それを読み取りフラグをセットす
●  る
．        ．          ｅｘｔｉｎ        ｒｘｖａｒ，ｒｓｔａｔｕｓ，１
．        ．          ｃａｌｃｓ        ｒｓｔａｔｕｓ＝１７；  
ｘｏｎｏｆｆ  ←  ０，１
．        ｅｎｄｌｏｏｐ
ｒｅｌｏｏｐ    ｘｏｎｏｆｆ  ＝  １    ＄＄  ｘｏｆｆであるのでループ
を繰り返す
＊        「ｓｔａｔｕｓ」のビット５を調べ、次の文字の送信が可能か調べ        
．        ｃａｌｃ      ｔｘ  ←  ｓｔａｔｕｓ  ＄ｍａｓｋ＄  ３２
ｏｕｔｌｏｏｐ  ｔｘ＝３２    ＄＄  ＯＫであれば送信、それ以外はループ
を繰り返す
ｅｎｄｌｏｏｐ
ｅｘｔｏｕｔ    ｔｘｖａｒ，ｃｈａｒ，１          ＄＄  文字を送る
【０９６９】
ｅｘｔｏｕｔ
外部Ｉ／Ｏポートにデータを書き込む。
【０９７０】
ｅｘｔｏｕｔ    ｐｏｒｔ，  ｂｕｆｆｅｒ，  ｌｅｎｇｔｈ
ｐｏｒｔ        書き込み先のＩ／Ｏポートのアドレス
ｂｕｆｆｅｒ    ポートに送信するデータを格納するバッファ
ｌｅｎｇｔｈ    送信するバイト数
【０９７１】
説明
指定した外部Ｉ／Ｏポートに指定バイト数のデータ書き込む。このコマンドを使用し、シリアル・ポートまたはパラレル・ポート経由で外部デバイスをコントロールすることができる。シリアル・ポートおよびパラレル・ポートのアドレッシングならびにコントロールの詳細については「ＩＢＭテクニカル・リファレンス・マニュアル（Ｔｅｃｈｎｉｃａｌ  Ｒｅｆｅｒｅｎｃｅ  Ｍａｎｕａｌ）」を参照されたい。「ｅｘｔｏｕｔ」の逆は「ｅｘｔｉｎ」である。
【０９７２】
例
例１
「ｒｓｔａｔｕｓ」の内容をＣＯＭ１に書き込む。
【０９７３】
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｒｓｔａｔｕｓ  ，１
ｄｅｆｉｎｅ    ｅｎｄ
＊
ｅｘｔｏｕｔ    １０１６，ｒｓｔａｔｕｓ，１  ＄＄  「ｒｓｔａｔｕｓ
」をＣＯＭ１
（ｈ３Ｆ８）に書き込む
【０９７４】
例２
別な例については、「ｅｘｔｉｎ」コマンドの説明に示した例２を参照されたい。
【０９７５】
ｆｉｌｌ
スクリーン上の任意の囲まれたエリアを塗りつぶす。
【０９７６】
ｆｉｌｌ      ［  ｃｏｌｏｒ  ［，  ｂｏｕｎｄａｒｙ  ］］
ｃｏｌｏｒ        塗りつぶす色
ｂｏｕｎｄａｒｙ    塗りつぶすエリアの境界を明示する色
【０９７７】
説明
現在のカーソル・ポジションから開始し、指定された色で閉じたエリアを塗りつぶす。「ｃｏｌｏｒ」を指定しないと、そのエリアがフォアグラウンドの色で塗りつぶされる。「ｂｏｕｎｄａｒｙ」色の指定を行わないと、開始ポイントのオリジナルの色と異なる任意の色で塗りつぶしが行われる。
【０９７８】
塗りつぶすエリアが閉じていないときは、スクリーン全体が塗りつぶされる。
「ｆｉｌｌ」コマンドは、通常、塗りつぶしの開始をセットする「ａｔ」コマンドの後に続けられる。
「ｆｉｌｌ」は、現在のプロット・モードを使用しない。指定した色は、モードと無関係に現れる。
【０９７９】
例
明るいホワイトの輪郭を持った三角形に内接するレッドの円を描く。最初の遅延の後、三角形の上側をシアンで塗りつぶす。次の遅延の後、この上側部分をマゼンタに変える。さらに最後の遅延の後、全体をブルーで塗りつぶし、ホワイトの輪郭を持ったブルーの三角形に変える。
【０９８０】
ｓｃｒｅｅｎ    ｖｇａ
ｃｏｌｏｒ      ｒｅｄ
ａｔ            ３２０，２１６
ｃｉｒｃｌｅ    ６５，ｆｉｌｌ
ｃｏｌｏｒ      ｗｈｉｔｅ＋
ｄｒａｗ        ３２０，３３５；  ２００，１５０；  ４４０，１５０；
３２０，３３５
ｄｅｌａｙ      １
ｃｏｌｏｒ      ｃｙａｎ
ａｔ            ３２０，３３４
ｆｉｌｌ
ｄｅｌａｙ      １
ｆｉｌｌ        ｍａｇｅｎｔａ
ｄｅｌａｙ      １
ｆｉｌｌ        ｂｌｕｅ，  ｗｈｉｔｅ＋
【０９８１】
ｆｉｎｄ
リスト内をサーチしてデータ対象物のポジションを見つける。
【０９８２】
ｆｉｎｄ      ｏｂｊｅｃｔ，  ｌｅｎｇｔｈ，  ｂｕｆｆｅｒ，  
ｅｎｔｒ  ｉｅｓ，  ｉｎｃｒ，  ｒｅｔｕｒｎ
ｏｂｊｅｃｔ    サーチするデータ対象物
ｌｅｎｇｔｈ    バイト単位で表した対象物の長さ
ｂｕｆｆｅｒ    サーチを開始するための変数
ｅｎｔｒｉｅｓ  リスト内のエントリ数
ｉｎｃｒ        バイト単位で表したバッファ内の各エントリの長さ
ｒｅｔｕｒｎ    最初に見つかったエントリの番号
【０９８３】
説明
文字エントリまたは数字エントリのリスト内をサーチして、希望の文字列対象物を探し出す。「ｆｉｎｄ」は、変数の定義サイズまたは境界とは無関係に、「ｂｕｆｆｅｒ」の先頭から「ｏｂｊｅｃｔ」を「ｉｎｃｒ」バイトごとにサーチする。「ｂｕｆｆｅｒ」の先頭は、「ｅｎｔｒｉｅｓ」および「ｉｎｃｒ」によって完全に特性が定義されたリストの最初のバイトと見なされる。
【０９８４】
「ｉｎｃｒ」が負数のときは、リストの末尾から先頭に向かって逆方向にサーチが行われる。
【０９８５】
「ｒｅｔｕｒｎ」は、リスト内で「ｏｂｊｅｃｔ」を見つけたポジションを示し、最初のエントリであれば１になる。「ｏｂｊｅｃｔ」が見つからなければ−１が返される。「ｒｅｔｕｒｎ」内の値は、サーチが逆方向に行われた場合であっても、必ずリストの先頭を基準とした相対的な値になる。
【０９８６】
例
次の定義を前提としていくつかの例を示す。
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｎａｍｅ，１５        ＄＄  サーチする名前
ｆｏｕｎｄ，２        ＄＄  リスト内で「ｎａｍｅ」を見つけたポジション
ｌｉｓｔ（５），１５  ＄＄  名前のリスト
ｄｅｆｉｎｅ    ｅｎｄ
【０９８７】
それぞれの例に使用するリストは、５人の名前を含み、それぞれの名前は１５文字からなる。その内容を次に示す。
Ｊｏｈｎ  ｍｉｌｌｅｒ．．．ｍａｒｋ  ｈｏ．．．．ｓａｒａｈ  ｊｏｈｎｓｔｏｎ．ｊａｍｅｓ  ｈｅｆｌｉｎ．．．ｌｉｓａ  ｂｅｒｇｅｒ．．
↑            ↑          ↑              ↑              ↑
１          １６        ３１            ４６            ６１
視認性を考慮してヌル文字をドットで示し、バイトのカウントを容易にするため下に番号を示した。
【０９８８】
例１：リテラル対象物
名前「ｍａｒｋ  ｈｏ」をサーチする。
ｆｉｎｄ  ’ｍａｒｋ  ｈｏ’，７，ｌｉｓｔ（１），５，１５，ｆｏｕｎｄ
＄＄  「ｆｏｕｎｄ」は２になる
【０９８９】
対象となる名前が８文字以下であることから、テキスト・リテラル’ｍａｒｋ  ｈｏ’として与えることができる。次は長さであり、つまり７文字が来る。リストの開始は「ｌｉｓｔ（１）」として与えられ、その長さはそれぞれ１５バイトの５つのエントリとして表される。
「ｍａｒｋ  ｈｏ」はこのリストの２番目のポジション（２バイト目ではない）にあることから、サーチを終了すると「ｆｏｕｎｄ」の値が２になる。
【０９９０】
例２：変数対象物
８バイトを超える対象物は、テキスト・リテラルとして与えることができず、変数に格納しなければならない。次に示す例では「ｊａｍｅｓ  ｈｅｆｌｉｎ」を探し出す。
ｐａｃｋｚ    ｎａｍｅ；；ｊａｍｅｓ  ｈｅｆｌｉｎ
ｆｉｎｄ      ｎａｍｅ，１５，ｌｉｓｔ（１），５，１５，ｆｏｕｎｄ
「ｊａｍｅｓ  ｈｅｆｌｉｎ」は４番目のポジションなので「ｆｏｕｎｄ」に
４が返される。
【０９９１】
例３：バイトごとのサーチ
姓を探し出す。
ｐａｃｋｚ    ｎａｍｅ；；ｍｉｌｌｅｒ
ｆｉｎｄ      ｎａｍｅ，６，ｌｉｓｔ（１），７５，１，ｆｏｕｎｄ
【０９９２】
この例を実行すると、「ｆｏｕｎｄ」に６が返される。
この場合、エントリ全体ではなくその一部を探し出すことから、「ｎａｍｅ」の長さが６になっている。
【０９９３】
またこの場合のリストは、５つの１５バイトのエントリとしてではなく、７５個の１バイトのエントリとして定義される。これにより「ｆｉｎｄ」は、１５バイトのエントリごとではなく、各バイトごとに、それから始まる「ｍｉｌｌｅｒ」を探し出す。これは、サーチの対象物がそれに与えられている公称エントリ長より長くなり得ることを示している。
【０９９４】
例４：逆方向サーチ
逆方向にサーチするときは、エントリの長さとして負数を指定する。リストを末尾からサーチして各１５バイトのエントリの先頭のバイトから始まる「Ｊｏｈｎ」を探し出す。
ｆｉｎｄ      ’ｊｏｈｎ’，４，ｌｉｓｔ（１），５，−１５，ｆｏｕｎｄ
この場合「ｆｏｕｎｄ」には値１が返される。このサーチはリストの末尾から行われるが、ポジションはリストの先頭からカウントされる。
【０９９５】
例５：ビットごとの逆方向サーチ
逆方向サーチの別の例を次に示す。
ｆｉｎｄ      ’ｊｏｈｎ’，４，ｌｉｓｔ（１），７５，−１，ｆｏｕｎｄ
この場合、エントリの長さとして−１が使用され、「ｆｉｎｄ」は、リストの末尾から開始し、各バイトごとに戻る。
【０９９６】
バイトごとに逆方向にサーチすると、「ｓａｒａｈ  ｊｏｈｎｓｔｏｎ」の中で最初に「ｊｏｈｎ」が見つかることから、「ｆｏｕｎｄ」に値３７が返される。順方向にサーチすれば、「ｊｏｈｎ  ｍｉｌｌｅｒ」で最初に見つかることから、「ｆｏｕｎｄ」に返される値は１になる。
【０９９７】
ｆｌｏｗ
イベント主導のユニット分岐によってレッスンの流れをマネージする。
【０９９８】
ｆｌｏｗ        キーワード
ｊｕｍｐ      スクリーンのイレースを伴うイベント主導のユニット分岐を
定義する。
ｊｕｍｐｏｐ  「ｊｕｍｐ」に類似だがスクリーンのイレースを伴わない。
ｄｏ          イベント主導サブルーチン呼び出しを定義する。
ｌｉｂｒａｒｙ  「ｄｏ」に類似だがバイナリ・サブルーチン呼び出しが強
制される。
ｃｌｅａｒ    アクティブになっているフロー・イベントのセッティングを
クリアする。
ｓａｖｅ      アクティブになっているフロー・イベントのセットをセーブ
する。
ｒｅｓｔｏｒｅ  セーブ済みのフロー・イベントのセットをアクティブ状態
に復元する。
ｄｅｌｅｔｅ  セーブ済みのフロー・イベントのセットを削除する。
ｒｅｓｅｔ    セーブ済みのフロー・イベントのセットをすべて削除する。
ｄｉｒ        アクティブになっているフロー・イベントのリストを返す。
ｉｎｆｏ      アクティブになっているフロー・イベントに関する分岐情報
を提供する。
【０９９９】
説明
イベント主導の分岐をマネージする。イベントは、キー操作、ポインタ入力、タイムアップ等とすることができる。特定のイベントによって、新しいメイン・ユニットにジャンプし、あるいはサブルーチンを呼び出すことが可能になる。
【１０００】
一度に、５０の互いに異なるイベントをアクティブにすることができる。フロー・イベントのセットおよび関連する分岐は、１つのレッスンを通じた新しいメイン・ユニットのためのデフォルトの環境として定義することができる。上級オプションとしては、レッスンのフロー・セッティングを操作し、ルータあるいはライブラリ・ルーチンに対するクリーンな接続を提供する方法もある。
【１００１】
フロー・イベントは通常、次のようなレッスン内の待機状態において発生する。
●  フロー・キー入力を許可する「ｐａｕｓｅ」において
●  ユーザのキー操作を処理する「ａｒｒｏｗ」において
●  ユニットの実行完了において（「エンド・オブ・ユニット」）
【１００２】
コーディングのシーケンスは、「ｆｌｏｗ」定義を「ｂｒｅａｋ」によって修飾してプログラムの割り込みを許可しない限り、これ以外の部分でフロー・イベントにより割り込みが行われることがない。
【１００３】
ｆｌｏｗ  ｊｕｍｐ  ｜  ｊｕｍｐｏｐ  ｜  ｄｏ  ｜  ｌｉｂｒａｒｙ；  ＫＥＹ／ｓ；  ＵＮＩＴ  ［修飾子；  修飾子；．．．］
キー操作（また他のイベント）とユニットへの分岐の間の接続を定義する。最初の引数は分岐のタイプを指定するキーワードである。「ＫＥＹ」については、「シンタクス規約」のセクションに完全な説明がある。複数の「ＫＥＹ」をカンマを用いて区切ることが認められており、それが押されると「ＵＮＩＴ」への分岐が発生する。複数の「ｆｌｏｗ」コマンドによって生成されるものを合計して、最大５０の異なるイベントをアクティブにすることができる。ただし一度に１つの分岐に関係付けられるイベントは１つである。同じイベントを２つの異なる「ｆｌｏｗ」コマンドにおいて定義した場合には、もっとも新しい定義が優先権を有する。修飾子は、コマンドの標準動作を変更する。引数を渡すことはサポートされていない。
【１００４】
ｊｕｍｐ
現在のユニットを終了し、新しいメイン・ユニットに分岐する。好ましい初期化には次のようなものがある。
●  スクリーンをデフォルトのバックグラウンド色でイレースする。
●  「ｆｌｏｗ」イベントおよび「ａｒｅａ」定義をクリアし、それらのメイン・ユニット・デフォルトにリセットする。
●  すべてのディスプレイ・パラメータをそれらのメイン・ユニット・デフォルトに（「ｓｔａｔｕｓ  ｓａｖｅ；  ｄｅｆａｕｌｔ」によってセットされたとおりに）リセットする。
●  このユニットを処理および「ｆｌｏｗ」イベントのための新しいメイン・ユニットにする。
【１００５】
ｊｕｍｐｏｐ
現在のユニットを終了し、スクリーンをイレースせずに（「ｏｐ」は「ｏｎ  ｐａｇｅ」つまり「ページ上で」を意味する）新しいメイン・ユニットに分岐する。次に示す初期化だけが実行される。
●  すべての「ｆｌｏｗ」イベントがクリアされ、それらのメイン・ユニット・デフォルトにリセットされる。
●  このユニットが「ｆｌｏｗ」イベントのための新しいメイン・ユニットになる。
【１００６】
ｄｏ
ユニットをサブルーチンとして呼び出す。初期化は実行されない。サブルーチン・ユニットから戻ると、「ｆｌｏｗ  ｄｏ」イベントが発生したところから実行が継続される。サブルーチンは、最大２０レベルまでネスティングすることができる。「ｆｌｏｗ  ｄｏ」の実行モードがソース・モードになるかバイナリ・モードになるかは、呼び出したレッスンのモードによる。
【１００７】
ｌｉｂｒａｒｙ
ユニットをバイナリ・サブルーチンとして呼び出す。初期化は実行されない。サブルーチン・ユニットから戻ると、「ｆｌｏｗ  ｄｏ」イベントが発生したところから実行が継続される。サブルーチンは、最大２０レベルまでネスティングすることができる。「ｆｌｏｗ  ｌｉｂｒａｒｙ」は、バイナリ形式のコーディングのみを有するサード・パーティのソフトウェアを呼び出すためによく使用される。
【１００８】
例１
現在のレッスンで「実行（ＥＮＴＥＲ）」キーが押されると、分岐してコントロールを「ｑｕｉｚ１」に渡す。スクリーンはイレースし、すべてのディスプレイ・セッティング、フロー分岐、ポインタ・エリアは、それらのメイン・ユニットのデフォルトにリセットする。「Ｆ８」キーが押されると、「ｍｏｒｅｉｎｆｏ」をサブルーチンとして呼び出すが、コントロールは呼び出したユニットに残す。ユニット「ｍｏｒｅｉｎｆｏ」は、スクリーン上にすでにある情報に新しい情報を追加するコーディングを含んでいる。
ｗｒｉｔｅ  Ｐｒｅｓｓ  Ｅｎｔｅｒ  ｔｏ  Ｂｅｇｉｎ  ｔｈｅ  Ｑｕｉｚ．
Ｐｒｅｓｓ  Ｆ８  ｆｏｒ  ｍｏｒｅ  ｉｎｆｏｒｍａｔｉｏｎ．
（この「ｗｒｉｔｅ」ステートメントの意味：「実行（ＥＮＴＥＲ）を押すとクイズが開始されます。Ｆ８を押せばさらに詳しい説明がみられます」
ｆｌｏｗ      ｊｕｍｐ；  ％ｅｎｔｅｒ；  ｑｕｉｚｌ
ｆｌｏｗ      ｄｏ；  ％ｆ８；  ｍｏｒｅｉｎｆｏ
【１００９】
例２
「Ｆ１」キーまたは「キャンセル（ＥＳＣ）」キーが押されると、分岐してコントロールを「ｑｕｉｚ１」に渡す。「ページアップアップ（ｐａｇｅ  ｕｐ）」キーが押されるとバイナリ・サブルーチン「ｓｃｒｏｌｌ」を実行する。「ｓｃｒｏｌｌ」から戻ったとき、呼び出したユニットにコントロールが戻される。
ｆｌｏｗ  ｊｕｍｐ；  ％ｆｌ，％ｅｓｃ；  ａｅｒｏｌ，ｉｎｄｅｘ
ｆｌｏｗ  ｌｉｂｒａｒｙ；  ％ｐｇｕｐ；  ｓｃｒｏｌｌ
【１０１０】
例３
「ａ」「ｂ」「ｃ」または変数「ｘｋｅｙ」に格納されている値が入力されると、変数「ｕｎｉｔＶａｒ」に格納された名前のユニットに分岐する。
ｆｌｏｗ  ｊｕｍｐ；  ａ，ｂ，ｃ，  ＜＜ｘｋｅｙ＞＞  ；＜＜ｕｎｉｔｖａｒ＞＞
【１０１１】
例４
「Ｆ１」キーが押されるか、それに関係付けたエリア内で「Ｃｌｉｃｋ」が発生すると（つまりエリアがクリックされると）、スクリーンをイレースする分岐が生じる。「Ｆ２」キーが押されるか、それに関係付けたエリア内で「Ｃｌｉｃｋ」が発生すると、スクリーンをイレースせずに「ｍｏｒｅ」に分岐する。いずれの場合にも、コントロールが新しいユニットに渡される。
ａｒｅａ  ｄｅｆｉｎｅ；  １００，０；  １５０，２０；  ｃｌｉｃｋ＝％ｆ１
ａｒｅａ  ｄｅｆｉｎｅ；  ２００，０；  ２５０，２０；  ｃｌｉｃｋ＝％ｆ２
ｆｌｏｗ  ｊｕｍｐ；  ％ｆｌ；  ｈｅｌｐ
ｆｌｏｗ  ｊｕｍｐｏｐ；  ％ｆ２；  ｍｏｒｅ
【１０１２】
共通ユニット名
共通分岐名は、新しいメイン・ユニットに共通の「ｊｕｍｐ」先を提供する。
【１０１３】
＝ｎｅｘｔ  レッスン内の現在のメイン・ユニットと物理的に続いて            
いる次のユニット。それがないときは分岐が無視される。
＝ｂａｃｋ  レッスン内の現在のメイン・ユニットと物理的に続いて
いる手前のユニット。それがないときは分岐が無視され              
る。
＝ｆｉｒｓｔ現在のレッスンの最初の実行可能ユニット。
＝ｌａｓｔ  現在のレッスンの最後の実行可能ユニット。
＝ｍａｉｎ  システム変数「ｚｍａｉｎｌ」「ｚｍａｉｎｕ」に保                
持されている現在のメイン・レッスンおよびユニット。
＝ｂａｓｅ  最後に「ｂａｓｅ」修飾の「ｆｌｏｗ」分岐が発生したか、
「ｂａｓｅ」コマンドによってセットされたメイン・レッ
スンおよびユニット。それがないときは分岐が無視される。
現在のベース（ｂａｓｅ）レッスンおよびユニットは、シ
ステム変数「ｚｂａｓｅｌ」「ｚｂａｓｅｕ」に保持され
ている。通常、学習のメイン・ラインに対するヘルプ等の、
その後のレッスンのシーケンスから戻るために使用され
る。「ｂａｓｅ」修飾子については＄＄＄ページを参照さ
れたい。
＝ｅｄｉｔｏｒ  オーサリング・システムで使用された場合はソース・
エディタ（および編集するソース・ブロックとして現
在の実行ユニット）
；ステューデント・エクスキュータでは無視される。
＝ｅｘｉｔ  「ｅｘｉｔｌｅｓ」コマンドによってセットされ、システ
ム変数「ｚｅｘｉｔｌ」「ｚｅｘｉｔｕ」に保持されてい
る内容に従ってレッスンが終了する。ステューデント・ユ
ーザの場合は、通常この分岐により、ＴｅｎＣＯＲＥアク
ティビティ・マネージャまたはそれがないときはＤＯＳに
戻る。レッスンをテストしているオーサーの場合は、ファ
イル・ディレクトリに戻る。
＝ｓｙｓｔｅｍ  計算機、イメージ・キャプチャ、カーソル等を含む
システム・オプションのウィンドウを開く。オーサ
リングの間は、ＴｅｎＣＯＲＥのシステム・デフォ
ルトとして「Ｆ２」がこの分岐とともにロードされ
る；ステューデント・エクスキュータでは無視され
る。
【１０１４】
例１
レッスンの間、「キャンセル（ＥＳＣ）」キーが押されると現在のメイン・ユニットの次のユニットへ、「Ｆ６」キーが押されると手前のユニットへ分岐する。レッスン内の最初のユニットまたは最後のユニットのときは、分岐が無視される。直線的にページをめくる形式のレッスンの基本的な流れが、これにより容易にプログラムできる。
ｆｌｏｗ      ｊｕｍｐ；  ％ｅｎｔｅｒ；  ＝ｎｅｘｔ
ｆｌｏｗ      ｊｕｍｐ；  ％ｆ６；  ＝ｂａｃｋ
【１０１５】
例２
「キャンセル（ＥＳＣ）」キーが押されると「ｅｘｉｔｌｅｓ」コマンドによって指定された終了ユニットまたはそれがないときはＤＯＳに分岐する。
ｆｌｏｗ      ｊｕｍｐ；  ％ｅｓｃａｐｅ；  ＝ｅｘｉｔ
【１０１６】
予期していない入力
フロー・イベントは、疑似キー「％ｏｔｈｅｒ」を使用することによって、正常な待機状態において発生したすべての予期していない入力を定義することができる。この「その他の（ｏｔｈｅｒ）」イベントは、可能性のある「ｆｌｏｗ」分岐または入力状態に適用することができない入力があったとき発生する。
【１０１７】
例１
通常はシステムが無視するキー入力があるとユニット「ｒｅｃｏｒｄ」にシステムを分岐させる。つまり後の参考のために、期待されていない入力を記録する。
ｆｌｏｗ  ｄｏ；  ％ｏｔｈｅｒ；  ｒｅｃｏｒｄ； ｅｆａｕｌｔ；ｂｒｅａｋ
【１０１８】
例２
「ｐａｕｓｅ」において、キー「ａ」「ｂ」および「ｃ」の入力があればユニットの実行を継続する。アクティブになっている「ｆｌｏｗ」イベントで指定されている「実行（ＥＮＴＥＲ）」および「Ｆ６」等の入力は定義どおりに作用する。これ以外の入力があると、ユニット「ｃｏｎｔｉｎｕｅ」に分岐する。
【１０１９】
ｆｌｏｗ      ｊｕｍｐ；  ％ｅｎｔｅｒ；  ＝ｎｅｘｔ
ｆｌｏｗ      ｊｕｍｐ；  ％ｆ６；  ＝ｂａｃｋ
...
ｆｌｏｗ      ｊｕｍｐ；  ％ｏｔｈｅｒ；  ｃｏｎｔｉｎｕｅ
．．．
ｐａｕｓｅ    ｆｌｏｗ＝ａｌｌ；ｐａｓｓ＝ａ，ｂ，ｃ
【１０２０】
例３
「ａｒｒｏｗ」コマンドにおいて、「ａ」「ｂ」および「ｃ」等の標準的なＡＳＣＩＩ入力があれば、スクリーン上にそのとおりの表示を行う。このほかの「ａｒｒｏｗ」関連の機能、すなわちイレース、コピー、「実行（ＥＮＴＥＲ）」キーによる判定等についても予定されたとおりの結果がもたらされる。ユニット「ａｈａ」への分岐といった定義済みの「ｆｌｏｗ」イベントはすべてアクティブであり、未定義の「Ｆ１２」等の期待していない入力があるとユニット「ｈｅｌｐ」に分岐する。
【１０２１】
ｆｌｏｗ      ｄｏ；  ％ｏｔｈｅｒ；  ｈｅｌｐ
ｆｌｏｗ      ｊｕｍｐ；  ％ｆ３；  ａｈａ
．．．
ａｒｒｏｗ    １０：２０
【１０２２】
修飾子
「ｆｌｏｗ」ステートメントに修飾子を用いると、このコマンドのデフォルトのアクションが変更される。セミコロンで分ければ複数の修飾子を用いることも可能であり、その順序も随意だが、一部には両立しない修飾子もある。
【１０２３】
ｄｅｆａｕｌｔ
これ以降のすべての新しいメイン・ユニットに関する「ｆｌｏｗ」分岐のデフォルト・セッティングとなる。「ｄｅｆａｕｌｔ」修飾されたフロー・セッティングは、「ｉｎｉｔｉａｌ」ステートメントによって、あるいは「ｄｅｆａｕｌｔ」または「ｒｏｕｔｅｒ」修飾子を伴う「ｆｌｏｗ  ｃｌｅａｒ」ステートメントによってクリアされる。レッスン全体の「ｄｅｆａｕｌｔ」セッティングは、レッスンに何らかの入力を伴ってセットされるように、そのレッスンの「＋ｉｎｉｔｉａｌ」コントロール・ブロック内に置かれることも多い。
【１０２４】
ｃｏｍｐｌｅｔｅ
「ｐａｕｓｅ」または「ａｒｒｏｗ」ステートメントも含め、ユニット内のすべての処理が完了するまで、「ｆｌｏｗ」コマンドを待機させる。「ｆｌｏｗ」は、エンド・オブ・ユニットにおいてのみ作用する。たとえば、すべての「ａｒｒｏｗ」が完了するまで、次のユニットに進むことができないという状況をユーザに与えることができる。「ｃｏｍｐｌｅｔｅ」修飾子と「ｂｒｅａｋ」修飾子は、同時に使用することができない。
【１０２５】
ｒｏｕｔｅｒ
これに続くユニット全体にわたる恒久的なフロー・セッティングを設定する。これは、「ｉｎｉｔｉａｌ」ステートメントによってクリアされない。「ｒｏｕｔｅｒ」修飾子によりマネジメント・ソフトウェア（ＴｅｎＣＯＲＥアクティビティ・マネージャ等）は、アプリケーション内のルーティングに使用するためのキーを恒久的にセットすることができる。「ｒｏｕｔｅｒ」のフロー・セッティングは、「ｒｏｕｔｅｒ」修飾子付きで「ｆｌｏｗ  ｃｌｅａｒ」を使用した場合に限りクリアすることができる。
【１０２６】
たとえば、ＴｅｎＣＯＲＥシステムにより、ステューデント・エクスキュータの起動時に「シフト」＋「１」によりＤＯＳに分岐する「ｒｏｕｔｅｒ」修飾された終了分岐がセットされる。アクティビティ・マネージャが使用されると、それがこの「ｆｌｏｗ」分岐をリセットし、アプリケーションを起動する前にアクティビティ・マネージャ内のリターン・ユニットにユーザを戻す。
【１０２７】
ユーザがアプリケーション内から出られなくなる状態を招き得ることから、アプリケーション・レッスン内の「ｒｏｕｔｅｒ」フロー・セッティングをクリアする場合には充分な注意が必要である。なお、レッスン内のすべての状況においてルータ終了キーが了承されている場合を除けば、「ｒｏｕｔｅｒ」修飾子と「ｂｒｅａｋ」修飾子をともに使用することが最善といえよう。
【１０２８】
ｂｒｅａｋ
「ｆｌｏｗ」分岐を任意のポイントで発生させ、プログラムの割り込みつまり処理の「ｐａｕｓｅ」を可能にする。「ｂｒｅａｋ」修飾された「ｆｌｏｗ」分岐は、「ｄｉｓａｂｌｅ  ｂｒｅａｋ」によって一時的にオフにされている場合を除き、常に機能する。「ｂｒｅａｋ」の主な使用は、キーをチェックしないプログラミング・ループに対する割り込みである。「ｂｒｅａｋ」修飾子は、アプリケーション・レッスン内において終了分岐を確実に作用させるために、しばしば「ｒｏｕｔｅｒ」修飾子とともにルータによって使用される。なお「ｂｒｅａｋ」修飾子と「ｃｏｍｐｌｅｔｅ」修飾子は、同時に使用することができない。
【１０２９】
「ｂｒｅａｋ」修飾された「ｆｌｏｗ  ｄｏ」または「ｆｌｏｗ  ｌｉｂｒａｒｙ」イベントが処理中の（プログラミング・ループ内にある）コマンドに対する割り込みを発生すると、現在のプログラム・ステートメントが完了され、サブルーチンが実行され、その後、次のステートメントの処理が続けられる。時限付きの「ｐａｕｓｅ」または［ｄｅｌａｙ」においてブレークが発生すると、サブルーチンから戻るまでそのタイミングが保留される。サブルーチン呼び出しの間「ｆｌｏｗ」イベントは、再帰防止のために一時的にディセーブルになり、そのサブルーチンを終了すると再度イネーブルになる。これに加えて、システム変数「ｚｉｎｐｕｔ」「ｚｉｎｐｕｔｆ」「ｚｉｎｐｕｔｘ」「ｚｉｎｐｕｔｙ」「ｚｉｎｐｕｔａ」「ｚｒｅｔｕｒｎ」がセーブされ、サブルーチンから戻ると復元される。
【１０３０】
「ｄｏ」または「ｌｉｂｒａｒｙ」形式の「ｆｌｏｗ」の使用時は信頼性のない結果を回避するために充分な注意が必要である。「ｂｒｅａｋ」割り込みが随所で起こり得ることから、割り込み「ｄｏ」または「ｌｉｂｒａｒｙ」呼び出しレベルにおいて変数（特にシステム変数）が偶発的に変更され、呼び出しから戻ったときそれらが無効になることがある。重要なコーディングにおいては、「ｄｉｓａｂｌｅ  ｂｒｅａｋ」ステートメントを使用して「ｂｒｅａｋ」の属性をオフにすることを奨める。例４を参照されたい。
【１０３１】
ｃｌｅａｒｋｅｙ
分岐時に処理を完了していないすべての入力を入力バッファから削除する。「ｃｌｅａｒｋｅｙ」は、フルページ表示等のイベントの終了待ちをもたらしている「完了待ち」キー入力を削除する。
【１０３２】
ｂａｓｅ
「ｂａｓｅ」修飾子付きの「ｆｌｏｗ」分岐は、その分岐が発生したメイン・レッスンおよびユニットをベース・レッスンおよびユニットとし、システム変数「ｚｂａｓｅｌ」および「ｚｂａｓｅｕ」に格納する。「ｂａｓｅ」修飾の「ｆｌｏｗ」が、ヘルプ等の補助レッスン・シーケンスを開始するときは、「＝ｂａｓｅ」汎用ユニットのロケーションを使用し、ユーザを開始のベース・ロケーションに戻すことができる。
【１０３３】
ｗｉｎｄｏｗｃｌｏｓｅ
現在アクティブのウィンドウがあれば、「ｆｌｏｗ」分岐を実行する前にそれを閉じる。
【１０３４】
ｗｉｎｄｏｗｒｅｓｅｔ
開いているウィンドウがあれば、「ｆｌｏｗ」分岐を実行する前にすべて閉じる。
【１０３５】
ｏｐｅｒａｔｅ
分岐する前に、「ｆｌｏｗ」ステートメントの直前に有効になってた実行モードを復元する（「ｏｐｅｒａｔｅ」コマンド参照）。
【１０３６】
ｂｉｎａｒｙ
分岐する前に、バイナリ実行・モードに変更する。
【１０３７】
ｓｏｕｒｃｅ
分岐する前に、ソース実行・モードに変更する。
【１０３８】
ｔｐｒ
分岐する前に、ｔｐｒ（プロデューサ）実行・モードに変更する。
【１０３９】
例１
「実行（ＥＮＴＥＲ）」キーが押されると、直ちにレッスン内の次のユニットに直線的に分岐する。続くメイン・ユニットはすべてこのフロー・セッティングにデフォルト設定される。このステートメントをレッスン全体に適用するときは、「＋ｉｎｉｔｉａｌ」コントロール・ブロックにこれを入れておく必要がある。
ｆｌｏｗ      ｊｕｍｐ；  ％ｅｎｔｅｒ；  ＝ｎｅｘｔ；  ｄｅｆａｕｌｔ；  ｂｒｅａｋ
【１０４０】
例２
ルータ終了キーとして「キャンセル（ＥＳＣ）」キーをセットする。これは、「ｉｎｉｔｉａｌ」コマンドを介して恒久的に維持され、あらゆるプログラミング状態（「ｂｒｅａｋ」がディセーブルされている場合を除く）を「ｂｒｅａｋ」し、ウィンドウを閉じ、「ｒｏｕｔｅ」、「ｒｅｔｕｒｎ」にジャンプする。
ｆｌｏｗ      ｊｕｍｐ；  ％ｅｓｃａｐｅ；  ｒｏｕｔｅ，ｒｅｔｕｒｎ；  ｒｏｕｔｅｒ；  ｂｒｅａｋ；  ｗｉｎｄｏｗｒｅｓｅｔ
【１０４１】
エンド・オフ・ユニットにおいて「実行（ＥＮＴＥＲ）」キーが押されると、ユニット「ｑｕｅｓ６」に分岐する。「ｐａｕｓｅ」または「ａｒｒｏｗ」があれば、分岐前に完了しなければならない。それ以外の「完了待ち」入力については削除する。
ｆｌｏｗ      ｊｕｍｐ；  ％ｅｎｔｅｒ；  ｑｕｅｓ６；  ｃｏｍｐｌｅｔｅ；  ｃｌｅａｒｋｅｙｓ
【１０４２】
例４
「Ｆ１０」キーが押されたとき、または「％ｔｉｍｅｕｐ」入力が発生したとき、ライブラリ・ユニット（レッスン「ｒｏｕｔｉｎｅｓ」内の「ｃｌｏｃｋ」）をインストールし、ユーザに時刻を表示する。ライブラリ・ルーチン自体の中では、ユーザがメイン・ユニット内にとどまっている間に１秒間隔で「％ｔｉｍｅｕｐ」キーを発生させてクロックが「リフレッシュ」されるように、終了前に「ｔｉｍｅ  １」ステートメントを実行する。予期しない割り込みの影響を受けると考えられるレッスン内の重要なコーディングについては、コーディング全体にわたって「ｂｒｅａｋ」属性をディセーブルすることにより保護し、コーディング実行後に再度イネーブルする。
【１０４３】
ｆｌｏｗ  ｌｉｂｒａｒｙ；  ％ｆ１０，％ｔｉｍｅｕｐ；  ｒｏｕｔｉｎｅｓ，ｃｌｏｃｋ；  ｂｒｅａｋ；  ｄｅｆａｕｌｔ
．．．
ｄｉｓａｂｌｅ  ｂｒｅａｋ  ＄＄  重要なコーディングを保護す
る
ａｔｔａｃｈ    ’ｆｉｌｅ’；ｎａｍｅｓｅｔ  ＄＄  ユニット「ｃｌｏｃｋ」の「ａｔｔａｃｈ」も考えられる
ｄｏ            ｚｒｅｔｕｒｎ；；ｅｒｒｏｒｕ
ｓｅｔｎａｍｅ  ’ｂｌｏｃｋ’  ＄＄  さらにその「ｓｅｔｎａｍｅ」も考えられる
．．．
ｅｎａｂｌｅ  ｂｒｅａｋ  ＄＄  ブレークの再イネーブル
【１０４４】
ｆｌｏｗ  ｃｌｅａｒ  ［；  ［  ＫＥＹＳ／ｓ  ］  ［；  ｄｅｆａｕｌｔ  ｜  ｒｏｕｔｅｒ］］
アクティブ・リストから、またオプションとして「ｄｅｆａｕｌｔ」および「ｒｏｕｔｅｒ」リストからフロー・セッティングを削除する。この場合の「ｄｅｆａｕｌｔ」修飾子は、「ｄｅｆａｕｌｔ」修飾子を用いてセットしたすべての「ｆｌｏｗ」定義を削除するために使用する。また「ｒｏｕｔｅｒ」修飾子を使用すると、「ｄｅｆａｕｌｔ」修飾および「ｒｏｕｔｅｒ」修飾によるフロー・セッティングをともに削除することができる。
【１０４５】
例１
「ｒｏｕｔｅｒ」修飾されたフロー・セッティングを除くすべてのフロー・セッティングを削除する。「ｄｅｆａｕｌｔ」修飾子を用いてセットしたセッティングは、新しいメイン・ユニットへの「ｊｕｍｐ」時に再度アクティブになる。
ｆｌｏｗ      ｃｌｅａｒ
【１０４６】
例２
「ｒｏｕｔｅｒ」修飾子を用いて定義されたフロー・セッティングを除く、アクティブになっているすべてのフロー・セッティングを「実行（ＥＮＴＥＲ）」または「Ｆ６」キーに応答して削除する。これらのキー入力を「ｄｅｆａｕｌｔ」修飾子を用いて定義した場合には、新しいメイン・ユニットへの「ｊｕｍｐ」時に再度アクティブになる。
ｆｌｏｗ      ｃｌｅａｒ；  ％ｅｎｔｅｒ，％ｆ６
【１０４７】
例３
「ｒｏｕｔｅｒ」属性を有しているものを除き、アクティブになっているフロー・セッティングおよび「ｄｅｆａｕｌｔ」フロー・セッティングを「実行（ＥＮＴＥＲ）」に応答して削除する。
ｆｌｏｗ      ｃｌｅａｒ；  ％ｅｎｔｅｒ，ｄｅｆａｕｌｔ
【１０４８】
例４
「ｒｏｕｔｅｒ」により修飾されているものを除き、アクティブになっているフロー・セッティングおよび「ｄｅｆａｕｌｔ」フロー・セッティングをすべて削除する。「ｉｎｉｔｉａｌ」ステートメントもこのタスクを実行することができる。
ｆｌｏｗ      ｃｌｅａｒ；；ｄｅｆａｕｌｔ
【１０４９】
例５
どのようにセットされたかということとは無関係に、「実行（ＥＮＴＥＲ）」に応答してすべてのフロー・セッティングを削除する。
ｆｌｏｗ      ｃｌｅａｒ；  ％ｅｎｔｅｒ；  ｒｏｕｔｅｒ
【１０５０】
例６
どのように定義されたかということとは無関係に、すべてのフロー・セッティングを削除する。「シフト」＋「Ｆ１」等のシステム「ｆｌｏｗ」セッティングもすべて削除され、ほかに終了手段がないときは終了が不可能になることから、充分な注意が必要である。
ｆｌｏｗ      ｃｌｅａｒ；；ｒｏｕｔｅｒ
【１０５１】
ｆｌｏｗ  ｓａｖｅ  ’名前’  ｜  ｌｏｃａｌ
ｆｌｏｗ  ｓａｖｅ；  ｄｅｆａｕｌｔ
アクティブになっているフロー定義をメモリ・プール・ブロック内または「ｄｅｆａｕｌｔ」バッファにセーブする。名前はテキスト・リテラルにより指定することもできるが、変数内に収めることもできる。名前を付けたブロックは、その後任意のユニットで復元することができる。
【１０５２】
キーワード「ｌｏｃａｌ」を使用すると、現在のユニットに固有のメモリ・プール・ブロックにフロー・セッティングがセーブされる。ローカル・ブロックは、それをセーブしたユニット内でのみ復元することが可能であり、そのユニットの実行が終了すると自動的に削除される。
【１０５３】
アクティブになっている「ｆｌｏｗ」セッティングを「ｄｅｆａｕｌｔ」バッファ内にセーブすると、すべての新しいメイン・ユニットに対するデフォルトの「ｆｌｏｗ」セッティングとなる。これは、別のユニットへの「ｊｕｍｐ」または「ｊｕｍｐｏｐ」により自動的にリセットされる。
【１０５４】
このメモリ・プールは、コマンド「ｍｅｍｏｒｙ」「ｉｍａｇｅ」「ｗｉｎｄｏｗ」「ｓｔａｔｕｓ」「ａｒｅａ」「ｆｌｏｗ」「ｆｏｎｔ」および「ｐｅｒｍ」によって使用される。メモリ・ブロックは、生成時に特定のコマンドに属するものとしてタグが付けられ、メモリ・プールを使用する別のコマンドからアクセスすることはできない。したがって異なるコマンドで同じ名前を使用しても衝突することがない。
【１０５５】
例１
アクティブになっているフロー・セッティングを、名前「ｆｌｏｗｓ」を付けてメモリ・プール内にセーブする。
ｆｌｏｗ      ｓａｖｅ；  ’ｆｌｏｗｓ’
【１０５６】
例２
サブルーチン呼び出しのため、アクティブになっているフロー・セッティングをこのユニットに固有のブロックにセーブし、その後復元する。ブロックは、このユニットの終了時に自動的に削除される。
ｆｌｏｗ      ｓａｖｅ；  ｌｏｃａｌ
ｄｏ          ｒｏｕｔｉｎｅｓ，ｇｒａｐｈ
ｆｌｏｗ      ｒｅｓｔｏｒｅ；  ｌｏｃａｌ
【１０５７】
例３
「ｊｕｍｐ」または「ｊｕｍｐｏｐ」によって開始される、これ以降のすべてのユニットのデフォルトとして、アクティブになっているフロー・セッティングを設定する。
ｆｌｏｗ      ｓａｖｅ；  ｄｅｆａｕｌｔ
【１０５８】
ｆｌｏｗ  ｒｅｓｔｏｒｅ；  ’名前’  ｜  ｌｏｃａｌ  ［；  ｄｅｌｅｔｅ］
ｆｌｏｗ  ｒｅｓｔｏｒｅ；  ｄｅｆａｕｌｔ
アクティブになっているフローセッティングを、それ以前にセーブしたセットに置き換える。オプションとして、「ｄｅｌｅｔｅ」修飾子を使用すれば、名前を付けたブロックまたは「ｌｏｃａｌ」ブロックをメモリ・プールから削除することができる。
【１０５９】
例１
ライブラリ呼び出しのため、アクティブになっているフロー・セッティングをブロックにセーブし、その後復元する。ライブラリ・ルーチンは、リターン時に呼び出したプログラムに影響を与えることなく、アクティブになっているフロー・セッティングを自由に変更することができる。これに変えて「ｆｌｏｗ  ｓａｖｅ」および「ｒｅｓｔｏｒｅ」をライブラリ・ルーチン内に組み込めば、使用がより簡単なツールが得られる。
ｆｌｏｗ        ｓａｖｅ；  ’ｆｌｏｗｓ’
ｌｉｂｒａｒｙ  ｒｏｕｔｉｎｅｓ，ｇｒａｐｈ
ｆｌｏｗ        ｒｅｓｔｏｒｅ；  ’ｆｌｏｗｓ’
【１０６０】
例２
変数「ｓｅｔＵｐ」に格納されている名前で示されるフロー・セッティングを再度アクティブにする。その後、このメモリ・ブロックを削除する。
ｆｌｏｗ      ｒｅｓｔｏｒｅ；  ｓｅｔＵｐ；  ｄｅｌｅｔｅ
【１０６１】
ｆｌｏｗ  ｄｅｌｅｔｅ；  ’名前’  ｜  ｌｏｃａｌ
メモリ・プールにセーブしたフロー・セッティングを削除する。
【１０６２】
例
メモリ・プールから、セーブ済みの「ｆｌｏｗ」イベントのセット「ｑｕｉｚ」を削除する。
ｆｌｏｗ      ｄｅｌｅｔｅ；  ’ｑｕｉｚ’
【１０６３】
ｆｌｏｗ      ｒｅｓｅｔ
名前を付けてメモリ・プールにセーブしたすべてのフロー・セッティングを削除する。フロー・セッティングの「ｄｅｆａｕｌｔ」セットには影響しない。
【１０６４】
ｆｌｏｗ  ｄｉｒ；  ｋｅｙＢｕｆｆｅｒ  ［，  ｌｅｎｇｔｈ］
アクティブになっているすべての「ｆｌｏｗ」イベントについて、キーのリストを作成する。キー入力は、２バイトの値のシーケンス（可能な場合にはゼロで終了する）として、「ｋｅｙＢｕｆｆｅｒ」内に返される。これらの値を「ｆｌｏｗ  ｉｎｆｏ」の入力として使用し、「ｆｌｏｗ」イベントに関する完全な情報を取り込むことができる。システム変数「ｚｆｌｏｗｃｎｔ」は、アクティブになっている「ｆｌｏｗ」イベントの数を保持する。
【１０６５】
例
アクティブになっているすべての「ｆｌｏｗ」イベントについて、入力キーの値を獲得する。各入力は、５０エレメント（最大）の配列「ｖａｌｕｅ」内に２バイトで返される。
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｖａｌｕｅ（５０），２
ｄｅｆｉｎｅ    ｅｎｄ
．．．
ｆｌｏｗ  ｄｉｒ；  ｖａｌｕｅ（１），  ｚｆｌｏｗｃｎｔ  ＊  ２    ＄＄  アクティブ「ｆｌｏｗ」キーを読み出す
【１０６６】
ｆｌｏｗ  ｉｎｆｏ；  ＫＥＹ；  ｉｎｆｏＢｕｆｆｅｒ  ［，  ｌｅｎｇｔｈ］
指定バッファ内の指定したキー入力に対応するフロー・セッティングのパラメータを返す。返される情報は、最大で２２バイトになる。オプションの引数「ｌｅｎｇｔｈ」を使用すれば、返されるバイト数を制限することができる。「ｆｌｏｗ  ｉｎｆｏ」を使用した詳細なコーディング例については、レッスン「ＴＣＳＡＭＰＬＥ」ユニットの「ｉ／ｆｌｏｗ」を参照されたい。
【１０６７】
【表６】
2009009584.tif 000008
【１０６８】
システムのデフォルト・フロー・セッティング
レッスン実行間の「シフト」＋「Ｆ１」、「Ｆ２」および「シフト」＋「Ｆ２」は、オーサリング・システムによって次のようにあらかじめ定義されている。
ｆｌｏｗ    ｊｕｍｐ；  ％Ｆ１；  ＝ｅｘｉｔ；  ｂｒｅａｋ；  ｒｏｕｔｅｒ
ｆｌｏｗ    ｊｕｍｐ；  ％Ｆ２；  ＝ｅｄｉｔｏｒ；  ｂｒｅａｋ；  ｒｏｕｔｅｒ
ｆｌｏｗ    ｊｕｍｐ；  ％ｆ２；  ＝ｓｙｓｔｅｍ；  ｂｒｅａｋ；  ｒｏｕｔｅｒ
【１０６９】
ステューデント・システムにおいては、次に示す「シフト」＋「Ｆ１」だけがあらかじめ定義されている。
ｆｌｏｗ      ｊｕｍｐ；  ％Ｆ１；  ＝ｅｘｉｔ；  ｂｒｅａｋ；  ｒｏｕｔｅｒ
【１０７０】
これらのフロー・セッティングは、「ｒｏｕｔｅｒ」修飾子とともに「ｆｌｏｗ  ｃｌｅａｒ」を使用することによって、再定義または削除することができる。しかしながら、レッスンを終了するための代替手段を用意しないと、ユーザがＤＯＳにさえ戻れなくなることから、充分な注意が必要である。
【１０７１】
「ｌｉｂｒａｒｙ」呼び出しの中、あるいはその前後にわたってアクティブおよびデフォルトのフロー・セッティングの一時的なセーブ、削除および復元を行う方法を次に示す。
ｆｌｏｗ    ｓａｖｅ；’ｃｕｒｒｅｎｔｓ’    ＄＄  アクティブ・フロー・セッティングをセーブ
ｆｌｏｗ    ｒｅｓｔｏｒｅ；ｄｅｆａｕｌｔ      ＄＄  デフォルトをアクティブに戻す
ｆｌｏｗ    ｓａｖｅ；’ｄｅｆｓａｖｅ’      ＄＄  デフォルト・フロー・セッティングをセーブ
ｆｌｏｗ    ｃｌｅａｒ；；ｄｅｆａｕｌｔ        ＄＄  ルータ・セッティング以外を削除
．．．
ｌｉｂｒａｒｙ  ｒｏｕｔｉｎｅｓ，ｓｔｕｆｆ    ＄＄  ルータ・セッティング以外は変更可能
．．．
ｆｌｏｗ    ｒｅｓｔｏｒｅ；’ｄｅｆｓａｖｅ’  ＄＄  セーブ済みデフォルト・セッティングの読み出し
ｆｌｏｗ    ｓａｖｅ；ｄｅｆａｕｌｔ            ＄＄  デフォルトに戻す
ｆｌｏｗ    ｒｅｓｔｏｒｅ；’ｃｕｒｒｅｎｔｓ’＄＄  セーブ済みアクティブ・セッティングに復元する
【１０７２】
システム変数
ｚｒｅｔｕｒｎ
メモリ・プールを使用する「ｓａｖｅ」「ｒｅｓｔｏｒｅ」「ｒｅｓｅｔ」および「ｄｅｌｅｔｅ」形式の「ｆｌｏｗ」コマンドは、成否に関するレポートを「ｚｒｅｔｕｒｎ」に返す。これ以外の形式では、「ｚｒｅｔｕｒｎ」にＯＫ（−１）が返される。「ｚｒｅｔｕｒｎ」の主な値を次に示す。
−１      オペレーションは成功した。
１０      名前が見つからない。
１８      メモリ・プールの要求を満たすことができない。
【１０７３】
その他
ｚｆｌｏｗｃｎｔ    アクティブになっているフロー・セッティングの数
ｚｍａｘｆｌｏｗ    許容されているフロー・セッティングの最大数
【１０７４】
ｆｏｎｔ
テキストの表示用フォントを選択する。
【１０７５】
ｆｏｎｔ  ［’レッスン’，］  ’フォント’  ［；ｆｏｎｔＮｕｍｂｅｒ  ｜  ｓｔａｎｄａｒｄ  ［；ｎｏｌｏａｄ］］
ｆｏｎｔ  ［’レッスン’，］  ’フォント・グループ’  ［；ｆｏｎｔＮｕｍｂｅｒ  ｜  ｓｔａｎｄａｒｄ  ［；ｎｏｌｏａｄ］］
ｆｏｎｔ  ；  ｆｏｎｔＮｕｍｂｅｒ
ｆｏｎｔ  ｓｔａｎｄａｒｄ  ［；ｓｔａｎｄａｒｄ］
ｆｏｎｔ  ｉｎｆｏ；  ｉｎｆｏＢｕｆｆｅｒ  ［，ｌｅｎｇｔｈ］
【１０７６】
説明
フォントはレッスン内の名前のついたブロックである。これは、ＡＳＣＩＩ文字コード０〜２５５の一部または全部に対応する文字デザインを含んでいる。フォント・グループもレッスン内の名前のついたブロックである。これには、異なるテキスト属性を持った関連フォントのリストが収められている。
【１０７７】
「ｓｉｚｅ」「ｂｏｌｄ」「ｉｔａｌｉｃ」および「ｎａｒｒｏｗ」といった「ｔｅｘｔ」コマンドの属性は、フォントおよびフォント・グループと相互作用する。フォントについては、属性を表す形が合成される（「ｎａｒｒｏｗ」を除く）。フォント・グループがアクティブのとき、システムは随時、イネーブルされているテキスト属性にもっとも適切なメンバ・フォントを自動的に選択する。
【１０７８】
必ず１つのフォントまたはフォント・グループを「ｓｔａｎｄａｒｄ」、すなわち標準として指定する。標準フォントは、現在のテキスト表示に別のフォントが選択されている場合であっても、文字スクリーン座標の基準になる。たとえば、「ａｔ  ５：１０」は、スクリーン上端から標準フォントの高さ５つ分、左から標準フォントの幅９つ分のスクリーン・ポジションを指定する。「ｉｎｉｔｉａｌ」または「ｓｃｒｅｅｎ」コマンドを実行すると、標準として現在のスクリーン解像度に適切なフォント・グループが割り当てられる。しかしながら、この標準は、別のフォントもしくはフォント・グループによって置き換えられ、その結果文字グリッドが変化することがある。
【１０７９】
フォントまたはフォント・グループは、オプションで参照番号と関連付けることができる。この番号は、その後フォントを再選択するために単独で用いることができる。
【１０８０】
「ｓｔａｔｕｓ」コマンドを使用すれば、「ｆｏｎｔ」および「ｔｅｘｔ」の全パラメータすなわち、選択されたフォントまたはフォント・グループ、「ｓｔａｎｄａｒｄ」フォント、フォント番号テーブル、およびテキストの属性をセーブし、復元することができる。ユニットへの「ｊｕｍｐ」分岐の前後でこれらのパラメータを維持するためには、「ｓｔａｔｕｓ  ｓａｖｅ；ｄｅｆａｕｌｔ」ステートメントを使用してセーブする必要がある。
【１０８１】
フォントおよびフォント・グループは、メモリ・プールに維持される。メモリから明示的にフォントを削除する必要はなく、他のメモリ・プール・オブジェクトにスペースが必要になると自動的に削除され、再び必要になったとき再ロードされる。
【１０８２】
システムの標準フォントは、レッスン「ＴＣＳＴＤＦＮＴ」に収められている。またレッスン「ＴＣＦＯＮＴＳ」には飾り付きフォント・グループの追加セットが収められている。これらのレッスンでは、フォント・エディタ（Ｆｏｎｔ  Ｅｄｉｔｏｒ）を使用して任意のフォントを修正し、他のソースからフォントをインポートし、あるいはスクラッチ・パッドからカスタム・フォントを作成することができる。
【１０８３】
ｆｏｎｔ  ［’レッスン’，］  ’フォント’
現在のレッスン、またはオプションとして指定した名前のレッスンから特定のフォントを選択する。フォントは、ディスクからメモリ・プールにロードされ、別の「ｆｏｎｔ」コマンドによって置き換えられるまで、またはデフォルト・フォントにリセットするユニットに「ｊｕｍｐ」分岐するまでアクティブ状態が継続する。
【１０８４】
例１
「ｉｎｉｔｉａｌ」コマンドは、プロット・パラメータを、現在のスクリーン解像度に対応する「ｓｔａｎｄａｒｄ」フォントも含めてそのシステムの標準デフォルトにセットする。続いて現在のレッスンに「ｇｏｔｈｉｃ」フォントをロードし、その次の「ｗｒｉｔｅ」ステートメントによるテキストに使用する。その後、テキストの属性を変更し、最後の「ｗｒｉｔｅ」ステートメントの表示には、合成形式の「ｇｏｔｈｉｃ」フォントを使用する。ディスクからフォントをロードするときにシステム・エラーが生ずれば「ｚｒｅｔｕｒｎ」に示される。すべての「ｆｏｎｔ」コマンドの後に「ｚｒｅｔｕｒｎ」のチェックが推奨されるが、次に示す例においてはスペースの関係から省略している。
【１０８５】
ｉｎｉｔｉａｌ
ｗｒｉｔｅ    Ｔｈｉｓ  ｔｅｘｔ  ｕｓｅｓ  ｔｈｅ  ｓｙｓｔｅｍ  ｓｔａｎｄａｒｄ  ｆｏｎｔ．
（この「ｗｒｉｔｅ」ステートメントの意味：「このテキストにはシステムの標準フォントが使用されています」）
ｆｏｎｔ    ’ｇｏｔｈｉｃ’
ｉｆ          ｚｒｅｔｕｒｎ  ＞  −１
．            ｗｒｉｔｅ  Ｅｒｒｏｒ  ＜＜ｓ，ｚｒｅｔｕｒｎ＞＞  ｌｏａｄｉｎｇ  Ｇｏｔｈｉｃ
（この「ｗｒｉｔｅ」ステートメントの意味：「ゴシックのロードでエラーが発生しました」）
ｅｎｄｉｆ
ｗｒｉｔｅ    Ｔｈｉｓ  ｗｒｉｔｉｎｇ  ｕｓｅｓ  ｃｈａｒａｃｔｅｒ  ｄｅｓｉｇｎｓ  ｉｎ  ｆｏｎｔ  Ｇｏｔｈｉｃ．
（この「ｗｒｉｔｅ」ステートメントの意味：「これにはゴシック・フォントの文字デザインが使用されています」）
ｔｅｘｔ      ｓｉｚｅ；  ２
ｔｅｘｔ      ｂｏｌｄ；  ｏｎ
ｗｒｉｔｅ    Ｔｈｉｓ  ｗｔｒｉｔｉｎｇ  ｕｓｅｓ  ａ  ｂｏｌｄ  ａｎｄ  ｄｏｕｂｌｅ  ｓｉｚｅ  ｆｏｎｔ  ｓｙｎｔｈｅｓｉｚｅｄ  ｆｒｏｍ  ｆｏｎｔ  Ｇｏｔｈｉｃ．
（この「ｗｒｉｔｅ」ステートメントの意味：「これにはゴシック・フォントから合成した太字倍サイズのフォントが使用されています」）
【１０８６】
例２
レッスン「ＴＣＦＯＮＴＳ」にある飾りフォント・ライブラリから「ｂｕｒ４８」フォントを選択する。これは、高さ４８ドットのバージョンのバーレスク（ｂｕｒｌｅｓｋ）フォントである。
ｆｏｎｔ      ’ｔｃｆｏｎｔｓ’，’ｂｕｒ４８’
ｗｒｉｔｅ    Ｔｈｉｓ  ｔｅｘｔ  ｉｓ  ｕｓｉｎｇ  Ｂｕｒｌｅｓｋ  ｃｈａｒａｃｔｅｒ  ｄｅｆｉｎｉｔｉｏｎｓ．
（この「ｗｒｉｔｅ」ステートメントの意味：「このテキストにはバーレスク文字定義が使用されています」）
【１０８７】
例３
変数「ｆｏｎｔＬｉｂ」に格納されている名前のレッスンから、変数「ｆｏｎｔＶａｒ」に格納されている名前のフォントを選択する。
ｆｏｎｔ      ｆｏｎｔＬｉｂ，  ｆｏｎｔＶａｒ
【１０８８】
ｆｏｎｔ  ［’レッスン’，］  ’フォント・グループ’
「ｆｏｎｔ  ｇｒｏｕｐ」をアクティブにして、現在の「ｔｅｘｔ」属性に基づいてグループからフォントを選択する。それぞれのフォントは、テキストの属性、すなわち「ｓｉｚｅ」（サイズ）（１から９まで）、「ｉｔａｌｉｃ」（斜体）、「ｂｏｌｄ」（太字）および「ｎａｒｒｏｗ」（狭幅）に考えられる７２とおりの組み合わせすべてに関して１つのフォント・グループ内に収めることができる。「ｔｅｘｔ」コマンドは（埋め込みおよび裸コード形式とともに）これらの属性をセットし、この結果、グループから選択するフォントが決定される。必要な属性に適合するフォントがグループ内に存在しないときは、もっとも一致度の高いフォントが使用され、可能なときは一致していない属性が合成される。構成可能な属性は「ｓｉｚｅ」（２から４までのみ）、「ｉｔａｌｉｃ」および「ｂｏｌｄ」である。システム変数「ｚｆｏｎｔｒｅｔ」および「ｚｆｏｎｔｆ」（後述の「システム変数」参照）は、そのグループからの現在のフォント選択が、現在有効なテキストの属性にどの程度近いかを示す。
【１０８９】
「ｆｏｎｔ」ステートメントを調べても、フォントまたはフォント・グループの参照の有無を知ることはできない。しかしながら、ブロックのタイプは「ブロック・ディレクトリ（Ｂｌｏｃｋ  Ｄｉｒｅｃｔｏｒｙ）」のページに表示される。
【１０９０】
例１
フォント・グループ「ｍｉｎｅ」は、サイズ１および２の標準および斜体で特別にデザインされた４種類のフォントを有するが、太字は有していない。「ｗｒｉｔｅ」ステートメント内のテキスト属性の裸コードは、斜体と太字を選択している。斜体にはグループ内のデザイン済みフォントの１つが使用されるが、太字は合成される。
【１０９１】
ｆｏｎｔ      ’ｍｉｎｅ’
ｔｅｘｔ      ｓｉｚｅ；  １
ｗｒｉｔｅ    Ｔｈｉｓ  ｎｏｒｍａｌ  ａｎｄ  ｉｔａｌｉｃ  ｔｅｘｔ  ｃｏｍｅｓ  ｄｉｒｅｃｔｌｙ  ｆｒｏｍ  ｓｐｅｃｉｆｉｃａｌｌｙ  ｄｅｓｉｇｎｅｄ  ｆｏｎｔｓ  ｂｕｔ  ｂｏｌｄ  ｉｓ  ｓｙｎｔｈｅｓｉｚｅｄ．
（この「ｗｒｉｔｅ」ステートメントの意味：「標準および斜体のテキストには、特別デザインのフォントが直接使用されていますが、太字は合成されました」）
ｔｅｘｔ      ｓｉｚｅ；  ２
ｗｒｉｔｅ    Ｔｈｉｓ  ｓｉｚｅ  ２  ｎｏｒｍａｌ  ａｎｄ  ｉｔａｌｉｃ  ｔｅｘｔ  ｃｏｍｅｓ  ｄｉｒｅｃｔｌｙ  ｆｒｏｍｄｅｓｉｇｎｅｄ  ｆｏｎｔｓ  ｗｈｉｌｅ  ｂｏｌｄ  ｉｓ  ｓｙｎｔｈｅｓｉｚｅｄ  ｓｔａｒｔｉｎｇ  ｆｒｏｍ  ｔｈｅ  ｓｉｚｅ  ２  ｎｏｒｍａｌ  ａｎｄ  ｉｔａｌｉｃ  ｆｏｎｔｓ．
（この「ｗｒｉｔｅ」ステートメントの意味：「サイズ２の標準および斜体のテキストには、デザイン済みのフォントが直接使用されていますが、太字はサイズ２の標準および斜体フォントから合成されました」）
【１０９２】
例２
「ｓｉｚｅ」属性は、飾りフォント・グループのそれぞれからサイズ２のフォントを選択する。
ｔｅｘｔ      ｓｉｚｅ；  ２
ｆｏｎｔ      ’ｔｃｆｏｎｔｓ’，’ｂｕｒｌｅｓｋ’
ｗｒｉｔｅ    Ｔｈｉｓ  ｗｒｉｔｉｎｇ  ｕｓｅｓ  ｔｈｅ  ｆｏｎｔ  ｇｒｏｕｐ  ｂｕｒｌｅｓｋ．
（この「ｗｒｉｔｅ」ステートメントの意味：「これはフォント・グループ『バーレスク』を使用しています」）
ｆｏｎｔ      ’ｔｃｆｏｎｔｓ’，’ｏｐｅｒａ’
ｗｒｉｔｅ    Ｔｈｉｓ  ｗｒｉｔｉｎｇ  ｕｓｅｓ  ｔｈｅ  ｆｏｎｔ  ｇｒｏｕｐ  ｏｐｅｒａ．
（この「ｗｒｉｔｅ」ステートメントの意味：「これはフォント・グループ『オペラ』を使用しています」）
【１０９３】
ｆｏｎｔ      ｓｔａｎｄａｒｄ
標準フォントまたはフォント・グループを選択する。次のセクションで説明する置き換えが行われない限り、これはレッスン「ＴＣＳＴＤＦＮＴ」にあるシステム標準フォントの１つとなる。
【１０９４】
例
ｆｏｎｔ      ’ｇｏｔｈｉｃ’
ｗｒｉｔｅ    Ｔｈｉｓ  ｔｅｘｔ  ｉｓ  ｉｎ  Ｇｏｔｈｉｃ
（この「ｗｒｉｔｅ」ステートメントの意味：「このテキストはゴシックです」）
ｆｏｎｔ        ｓｔａｎｄａｒｄ
ｗｒｉｔｅ      ｗｈｉｌｅ  ｔｈｉｓ  ｉｓ  ｉｎ  ｓｔａｎｄａｒｄ．
（この「ｗｒｉｔｅ」ステートメントの意味：「またこれは標準フォントです」）
【１０９５】
ｆｏｎｔ  ［’レッスン’，］  ’フォント’  ；  ｓｔａｎｄａｒｄ
ｆｏｎｔ  ［’レッスン’，］  ’フォント・グループ’  ；  ｓｔａｎｄａｒｄ
【１０９６】
フォントの選択にオプションのキーワード「ｓｔａｎｄａｒｄ」を使用すると、指定した名前のフォントまたはフォント・グループによってシステムの標準フォント・グループが置き換えられ、それが新しい標準になる。続く「ｆｏｎｔ  ｓｔａｎｄａｒｄ」ステートメントは、「ｊｕｍｐ」分岐が発生するまで新しい標準フォントとしてこれを選択する。
【１０９７】
新しい「ｓｔａｎｄａｒｄ」フォントの選択をレッスン全体で恒久的なものとするためには、「ｓｔａｔｕｓ  ｓａｖｅ；ｄｅｆａｕｌｔ」を使用して、その選択を「ｊｕｍｐ」分岐に応答して復元されるデフォルトの表示パラメータの一部にする。その後は、「ｉｎｉｔｉａｌ」「ｓｃｒｅｅｎ」「ｓｔａｔｕｓ  ｒｅｓｔｏｒｅ；ｓｔａｎｄａｒｄ」または「ｆｏｎｔ  ｓｔａｎｄａｒｄ；ｓｔａｎｄａｒｄ」ステートメントだけがレッスン「ＴＣＳＴＤＦＮＴ」にあるシステムの「ｓｔａｎｄａｒｄ」フォント・グループを復元することができる。
【１０９８】
システム変数「ｚｃｈａｒｗ」および「ｚｃｈａｒｈ」は、サイズ１の標準フォントの幅および高さをレポートする。これらの値は、文字スクリーン座標の基礎になる。
【１０９９】
例
変数「ｔｙｐｅｆａｃｅ」には、アクティブにするフォントの名前が格納されており、それを「ｓｔａｎｄａｒｄ」フォントにする。フォントが高さ３２ピクセル、幅３２ピクセルであれば、システム変数「ｚｃｈａｒｗ」および「ｚｃｈａｒｈ」がともに３２になる。「ｓｃｒｅｅｎ  ｖｇａ，ｍｅｄｉｕｍ」の場合（高さ４８０ピクセル、幅６４０ピクセル）は、文字座標のグリッドが１５行（４８０／３２）２０列（６４０／３２）になる。「ｗｒｉｔｅ」ステートメントのテキストは、グラフィック座標ｘ＝１２８（＝（５−１）×３２）、ｙ＝４１６（＝４８０−（２×３２））である。この文字グリッドは、「ｓｔａｎｄａｒｄ」フォントが置換されるまで有効になる。
ｓｃｒｅｅｎ    ｖｇａ，  ｍｅｄｉｕｍ
ｆｏｎｔ        ｔｙｐｅｆａｃｅ；  ｓｔａｎｄａｒｄ
ａｔ            ２：５
ｗｒｉｔｅ      Ｃｈａｒａｃｔｅｒ  ｐｏｓｉｔｉｏｎ  ５  ｏ  ｎ  ｌｉｎｅ  ２．
（この「ｗｒｉｔｅ」ステートメントの意味：「第２行５文字目のポジションです」）
【１１００】
ｆｏｎｔ  ｓｔａｎｄａｒｄ；ｓｔａｎｄａｒｄ
システムの標準フォント・グループをレッスン「ＴＣＳＴＤＦＮＴ」にあるフォント・グループに復元する。これ以前に標準フォントが置換されていると、これがディセーブルになっていることがある。
【１１０１】
レッスン「ＴＣＳＴＤＦＮＴ」には、システム「ｓｔａｎｄａｒｄ」フォントおよびフォント・グループが格納されており、それぞれの名前は「ｓｔｄ」で始まり、その後ろにスクリーンの垂直解像度を表す数字が続く。たとえば「ｓｔｄ３５０」は「ｅｇａ，ｍｅｄｉｕｍ」スクリーン用であり、「ｓｔｄ４８０」は「ｖｇａ，ｍｅｄｉｕｍ」スクリーン用、「ｓｔｄ６００」は「ｖｇａ，ｈｉｇｈ」スクリーン用である。「ｆｏｎｔ  ｓｔａｎｄａｒｄ；ｓｔａｎｄａｒｄ」もしくは「ｉｎｉｔｉａｌ」、「ｓｃｒｅｅｎ」または「ｓｔａｔｕｓ  ｒｅｓｔｏｒｅ；ｓｔａｎｄａｒｄ」ステートメントが実行されると、現在のスクリーン解像度が使用されてシステム「ｓｔａｎｄａｒｄ」フォント・グループが選択される。これはフォント・グループであることから、グループから選択されるフォントは現在のテキストの属性に応じたものとなる。
【１１０２】
システムの標準フォントおよびフォント・グループは、レッスン「ＴＣＳＴＤＦＮＴ」内のフォントおよびフォント・グループを編集し、その後新しいバイナリを作成して「ＴＣＳＴＤＦＮＴ．ＢＩＮ」を書き換えることにより変更することができる。
【１１０３】
ｆｏｎｔ  ［’レッスン’，］  ’フォント’  ；  ｆｏｎｔＮｕｍｂｅｒ  ［；ｎｏｌｏａｄ］
ｆｏｎｔ  ［’レッスン’，］  ’フォント・グループ’  ；  ｆｏｎｔＮｕｍｂｅｒ  ［；ｎｏｌｏａｄ］
フォントまたはフォント・グループを選択し、１から３５までの固有番号を割り当てる。番号付けしたフォントは、テキスト内に埋め込まれた裸コード・シーケンスによってアクセスすることができる。これによって、たとえば単一の「ｗｒｉｔｅ」コマンド内でフォントの切り替えができる。
【１１０４】
ソース・エディタにおいて、シーケンス「［ＣＴＲＬ］［Ａ］，［Ｆ］，［１］−［９］」を入力すると、９までの番号のフォントに関する裸コードが入力され、「［ＣＴＲＬ］［Ａ］，［Ｆ］，［Ａ］−［Ｚ］」を入力すると、１０番から３５番までのフォントのコードが入力される。ステューデント・モードでは、「ａｒｒｏｗ」において同様なコード・シーケンスを使用すればフォントを切り替えることができるが、デフォルトの裸コード・シーケンスの始まりが異なる：［ＣＴＲＬ］［Ｕ］，［Ｍ］，［Ｆ］，［Ａ］−［Ｚ］。
【１１０５】
番号付けした「ｆｏｎｔ」ステートメントをレッスンの「＋ｅｄｉｔｏｒ」コントロール・ブロックに含ませて、フォント選択シーケンスが埋め込まれたテキストが編集の間、正しいフォントで表れるようにすることができる。
【１１０６】
フォント番号の割り当てのセーブおよび復元には、「ｓｔａｔｕｓ」コマンドを使用する。
【１１０７】
複数の「ｆｏｎｔ」コマンドの使用により、単一のフォントまたはフォント・グループに複数の番号が割り当てられることがある。その場合、いずれの番号を使用してもそれを選択することができる。しかしながら、一度に複数のフォントまたはフォント・グループに１つの番号を関連付けることはできない。それを行った場合、もっとも新しいフォント番号の割り当てによって、それ以前の割り当てが置換される。
【１１０８】
オプションのキーワード「ｎｏｌｏａｄ」を使用すると、メモリ内に実際にフォントをロードしないで、フォントまたはフォント・グループにフォント番号の関係を持たせることができる。このオプションにより、複数のフォントにフォント番号を関連付ける必要のあるルーチンの起動時において、ディスクの読み込み時間を短縮することができる。その後フォントは、必要に応じて、「ｗｒｉｔｅ」ステートメントに埋め込まれた番号によって参照されたとき、自動的にロードされる。
【１１０９】
例１
２つの番号付けしたフォントをロードする。裸コード・シーケンスを使用して「ｗｒｉｔｅ」ステートメントのテキスト内でフォントを切り替える（裸コード・シーケンスは、ソース・エディタ内で隠し文字の表示をオンにすると現れる）。
ｆｏｎｔ      ’ｇｏｔｈｉｃ’；  ２
ｆｏｎｔ      ’ｇｅｎｅｖａ’；  ３
ｗｒｉｔｅ    Ｔｈｉｓ  ｔｅｘｔ  ｉｓ  Ｇｅｎｅｖａ，  ■ｆ３  ｓｗｉｔｃｈｅｓ  ｔｏ  Ｇｏｔｈｉｃ，  ｔｈｅｎ  ．■ｆ２  ｂａｃｋ  ｔｏ  Ｇｅｎｅｖａ．
（この「ｗｒｉｔｅ」ステートメントの意味：「このテキストはＧｅｎｅｖａです。■ｆ３を押せばＧｏｔｈｉｃに切り替わり、その後、■ｆ２を押せばＧｏｔｈｉｃに戻ります」）
【１１１０】
例２
「＋ｉｎｉｔｉａｌ」コントロール・ブロックにおいて、３つの番号付けしたフォントをデフォルト表示の「ｓｔａｔｕｓ」バッファに格納する。ユニットに対する「ｊｕｍｐ」分岐により、これら３つの番号付けしたフォントにリセットされるので、「ｗｒｉｔｅ」「ｐａｃｋ」等のステートメントのテキスト内で裸コードを通じてこれらを使用することができる。さらに「ｆｏｎｔ」ステートメントを「＋ｅｄｉｔｏｒ」コントロール・ブロックに入れておけば、そのフォントの裸コードを伴うテキスト（この例では「ｗｒｉｔｅ」ステートメント）が、編集の間、選択したフォントで表示される。オプションのキーワード「ｎｏｌｏａｄ」は、スタートアップの遅延を回避するために使用されている。
【１１１１】
＊                「＋ｉｎｉｔｉａｌ」コントロール・ブロックにおいて
ｆｏｎｔ    ’ｔｃｆｏｎｔｓ’，’ｇｅｎｅｖａ’；  １        ；  ｎｏｌｏａｄ
ｆｏｎｔ    ’ｔｃｆｏｎｔｓ’，’ｐｏｓｔｅｒ’；  ２        ；  ｎｏｌｏａｄ
ｆｏｎｔ      ’ｍｉｎｅ’，’ｆｉｒｅｗｏｒｋ’；  ３        ；  ｎｏｌｏａｄ
ｓｔａｔｕｓ    ｓａｖｅ；  ｄｅｆａｕｌｔ
＊                レッスン全体のユニットにおいて
ｗｒｉｔｅ    ■ｆ１  Ｇｅｎｅｖａ，  ■ｆ２  Ｐｏｓｔｅｒ，  ■ｆ３  Ｆｉｒｅｗｏｒｋｓ
（この「ｗｒｉｔｅ」ステートメントの意味：「■ｆ１でＧｅｎｅｖａ、■ｆ２でＰｏｓｔｅｒ、■ｆ３でＦｉｒｅｗｏｒｋｓ」）
【１１１２】
ｆｏｎｔ  ；ｆｏｎｔＮｕｍｂｅｒ
すでに番号を割り当てているフォントまたはフォント・グループを選択する。
【１１１３】
例
２つの番号付けしたフォントをロードする。いくつかの「ｗｒｉｔｅ」ステートメントにおいて、その番号だけを参照して２つのフォントを切り替える。
ｆｏｎｔ      ’ｇｏｔｈｉｃ’；  ２
ｆｏｎｔ      ’ｇｅｎｅｖａ’；  ３
ｗｒｉｔｅ    Ｔｈｉｓ  ｔｅｘｔ  ｉｓ  Ｇｅｎｅｖａ  ｔｈｅｎ
（この「ｗｒｉｔｅ」ステートメントの意味：「このテキストはＧｅｎｅｖａです」）
ｆｏｎｔ      ；２
ｗｒｉｔｅ    ｓｗｉｔｃｈｅｓ  ｔｏ  Ｇｏｔｈｉｃ  ｔｈｅｎ
（この「ｗｒｉｔｅ」ステートメントの意味：「Ｇｏｔｈｉｃに切り替わりました」）
ｆｏｎｔ      ；３
ｗｒｉｔｅ    ｂａｃｋ  ｔｏ  Ｇｅｎｅｖａ．
（この「ｗｒｉｔｅ」ステートメントの意味：「Ｇｅｎｅｖａに戻りました」）
【１１１４】
ｆｏｎｔ      ｉｎｆｏ；  ｉｎｆｏＢｕｆｆｅｒ  ［，  ｌｅｎｇｔｈ］
選択しているフォントまたはフォント・グループの情報を、「ｌｅｎｇｔｈ」により指定したバイト数分だけバッファに読み込む。長さを指定しない場合は、定義済みの長さのバッファが使用される。
【１１１５】
次に示す２５６バイトの情報が得られる。
【表７】
2009009584.tif 000009
【１１１６】
【表８】
2009009584.tif 000010
【１１１７】
例
「ｓｔａｎｄａｒｄ」フォントの著作権メッセージを表示する。
ｄｅｆｉｎｅ      ｌｏｃａｌ
ｉｎｆｏｂｕｆ，２５６
．    ，１７６                  ＄＄  他のフィールドをスキップ
．    ｃｏｐｙｒｔ，８０        ＄＄  著作権フィールド
ｄｅｆｉｎｅ    ｅｎｄ
．．．
ｆｏｎｔ      ｓｔａｎｄａｒｄ
ｆｏｎｔ      ｉｎｆｏ；ｉｎｆｏｂｕｆ
ａｔ          １０：１
ｓｈｏｗａ    ｃｏｐｙｒｔ，８０
【１１１８】
システム変数
ｚｒｅｔｕｒｎ
「ｆｏｎｔ」コマンド実行後、「ｚｒｅｔｕｒｎ」にフォントのロードの成功が示される。
−１    オペレーションは成功した。
０    ディスク・エラー（「ｚｄｏｓｅｒｒ」「ｚｅｄｏｓｅｒｒ」          参照）。
２    グループ内にフォントがない。
４    ファイルが見つからない。
１０    フォント名が見つからない。
１５    ファイル・ディレクトリ・エラー、回復不能。
１８    メモリ・プールが要求を満たすことができない。
【１１１９】
ｚｆｏｎｔｒｅｔ
システム変数「ｚｆｏｎｔｒｅｔ」は、現在のフォントと、現在有効なテキストの属性との一致度を示す。
【１１２０】
「ｆｏｎｔ」の場合の「ｚｆｏｎｔｒｅｔ」
−１    フォントは異常なくロードされた。
２    フォントをロードできない；「ｓｔａｎｄａｒｄ」フォント
を使用する。
３    「ｓｔａｎｄａｒｄ」フォントをロードできない；文字セッ
トを使用する。
【１１２１】
「ｆｏｎｔ  ｇｒｏｕｐ」の場合の「ｚｆｏｎｔｒｅｔ」（テキストの属性が変化すると更新される）
−２    属性と完全一致；一部で合成を使用する。
−１    属性と完全一致。
０    属性と部分的一致。
１    適切な一致がない；ベース・フォントを使用する。
２    ベース・フォントをロードできない；「ｓｔａｎｄａｒｄ」
フォントを使用する。
３    「ｓｔａｎｄａｒｄ」フォントをロードできない；文字セッ
トを使用する。
【１１２２】
ｚｆｏｎｔｆ
フォントがロードされたとき、あるいはテキストの属性が変更されてグループ内の別のフォントが選択されたとき、「ｆｏｎｔ  ｇｒｏｕｐ」に関してのみ「ｚｆｏｎｔｆ」が、属性が作られた方法をそのビット・フィールドにレポートする。
【１１２３】
「ｚｆｏｎｔｆ」のビット  意味
６          フォント・グループ内の一致する太字。
７          フォント・グループ内の一致する斜体。
８          フォント・グループ内の一致するサイズ。
１６          フォント・グループ内の一致する狭幅。
２２          合成による太字。
２３          合成による斜体。
２４          合成によるサイズ。
【１１２４】
属性が要求と一致しないことがあり、また合成されないこともある。たとえば、フォント・グループが太字のみを有しており、現在の属性が太字でない文字を指定している場合、ビット６およびビット２２がともにオフになる。
【１１２５】
その他
次に示すシステム変数は、フォントのロード後にセットされ、テキスト属性の変更があると必要に応じて更新される。
【１１２６】
ｚｆｏｎｔｈ      選択されたフォントの文字の高さおよび幅。
ｚｆｏｎｔｗ      
ｚｃｈａｒｈ      サイズ１の「ｓｔａｎｄａｒｄ」フォントの文字
の高さおよび幅。
ｚｃｈａｒｗ      （文字座標系の基礎）
ｚｆｏｎｔｂ      選択されたフォントのベースライン・オフセット。
ｚｃｈａｒｂ      サイズ１の「ｓｔａｎｄａｒｄ」フォントのベー
スライン・オフセット。
【１１２７】
ｇｏｔｏ
別のユニットに、またはエンド・オブ・ユニットに実行を移す。
【１１２８】
ｇｏｔｏ    ユニット  ｜  ｑ
ｇｏｔｏ    セレクタ；  ユニット  ｜  ｑ；  ユニット  ｜  ｑ；．．．
【１１２９】
説明
現在のユニットから別のユニットへの論理の継続を可能にする。「ｇｏｔｏ」は、実行を指定されたユニットに切り替えるが、スクリーンのイレース、「ｄｏ」のリターン・マークのクリア、メインユニットの変更、あるいはヘルプ・シーケンスの変更は行わない。
【１１３０】
キーワード「ｑ」は、実行をエンド・オブ・ユニットまで移動する。
【１１３１】
「ｇｏｔｏ」コマンドは、一般に、構造プログラミングによって適切に置き換えることができる旧式のプログラミング方法であると考えられている。
【１１３２】
ｉｆ
「ｉｆ」構造を開始する。
【１１３３】
ｉｆ        条件
【１１３４】
説明
「ｉｆ」構造の開始をマークする。条件が真であれば、それに続いてインデントしたコードが実行される。条件が偽であれば、次のインデントしていない「ｅｌｓｅｉｆ」「ｅｌｓｅ」または「ｅｎｄｉｆ」に実行が引き継がれる。
【１１３５】
「ｉｆ」構造は、ＴｅｎＣＯＲＥ言語における主要な条件構造である。「ｉｆ」構造を構成するコマンドを次に示す。
ｉｆ
ｅｌｓｅｉｆ（オプション；数は任意）
ｅｌｓｅ（オプション）
ｅｎｄｉｆ
【１１３６】
「ｉｆ」構造は、「ｉｆ」で開始し、「ｅｎｄｉｆ」で終了する。特定の条件が真のとき実行するコマンドは、「ｉｆ」「ｅｌｓｅｉｆ」または「ｅｌｓｅ」の次からインデントして記述する。ＴｅｎＣＯＲＥ内では、最初のピリオド文字に続く空白文字７文字（ソース・コード・エディタのタブ１つ分）によってコマンド・フィールドのインデントが表される。これに続いて、通常どおりコマンドおよびインデントしたコマンドのタグをタイプする。
【１１３７】
すべての「ｉｆ」構造において、インデントしたコマンドのセットは１組だけ実行される。条件については、「ｉｆ」および「ｅｌｓｅｉｆ」ごとに順にチェックされる。最初に真となった「ｉｆ」または「ｅｌｓｅｉｆ」に続くインデントしたコマンドが実行され、それが終了するとコントロールが「ｅｎｄｉｆ」の次のコマンドに渡される。「ｉｆ」または「ｅｌｓｅｉｆ」が真になる条件が存在しないときは、「ｅｌｓｅ」に続くインデントしたコマンドが実行される。
【１１３８】
例
例１
変数「ｓｃｏｒｅ」の値が７５を超えていれば、インデントしたコマンドが実行される。
ｉｆ      ｓｃｏｒｅ  ＞  ７５
．        ｄｏ  ｇｏｏｄｆｂ
．        ｊｕｍｐ      ｅｎｄｌｅｓｓ
ｅｎｄｉｆ
【１１３９】
例２
「ｅｌｓｅｉｆ」および「ｅｌｓｅ」が使用された「ｉｆ」構造の例を示す。
ｉｆ          ｒｉｇｈｔ  ＝  ０    ＄＄  全問不正解
．    ｄｏ          ｖｅｒｙｂａｄ
．    ｊｕｍｐ      ｈｅｌｐｐｇ
ｅｌｓｅｉｆ  ｒｉｇｈｔ  ＜  ５    ＄＄  １問ないし４問が正解
．    ｄｏ          ｎｏｔｇｏｏｄ
．    ｊｕｍｐ      ｑｕｉｚ
ｅｌｓｅｉｆ  ｒｉｇｈｔ  ＜  １０  ＄＄  ５問ないし９問が正解
．    ｄｏ      ｇｏｏｄ
．    ｊｕｍｐ  ｒｅｖｉｅｗ
ｅｌｓｅ                            ＄＄  正解が９問を超える
．    ｄｏ      ｇｒｅａｔ
．    ｊｕｍｐ  ｅｎｄｌｅｓｓ
ｅｎｄｉｆ
【１１４０】
例３
ネスティングされた「ｉｆ」構造の例を示す。
ｉｆ        ｗｒｏｎｇ  ＞  ５      ＄＄  不正解が５問を超える
．          ｗｒｉｔｅ      Ｙｏｕ  ａｒｅ  ｍａｋｉｎｇ  ｔｏｏ  ｍａｎｙ  ｍｉｓｔａｋｅｓ！
（この「ｗｒｉｔｅ」ステートメントの意味：「誤りが多すぎます」）
．        ｐａｕｓｅ
．        ｉｆ      ｗｒｏｎｇ  ＞  １０  ＄＄  不正解が１０問
を超える
．        ．        ｊｕｍｐ  ｑｕｉｔ
．        ｅｎｄｉｆ
ｅｎｄｉｆ
【１１４１】
ｉｍａｇｅ
スクリーン・イメージの表示、取り込み、およびマネージを行う。
【１１４２】
ｉｍａｇｅ    キーワード
ｐｌｏｔ        指定したイメージを表示する。
ｓａｖｅ        スクリーンの一部または全部を指定した先に取
り込む。
ｍｏｖｅ        記憶領域内でイメージを移動する。
ｉｎｆｏ        イメージに関する情報を返す。
ｄｅｌｅｔｅ    指定したイメージをメモリ・プールから削除する。
ｒｅｓｅｔ      すべてのイメージをメモリ・プールから削除する。
ｃｏｍｐｒｅｓｓ  イメージ・データの圧縮をオン／オフする。
ｐａｌｅｔｔｅ    イメージからパレット情報を読み出す。
【１１４３】
説明
「ｉｍａｇｅ」コマンドは、完成したピクチャをスクリーンにプロットするとき、スクリーンからイメージを取り込むとき、変数、メモリ・プール・ブロック、およびディスクの記憶ロケーション（名前セット、データセット、およびレッスン）の間でピクチャを移動するとき使用する。ピクチャは、イメージ・エディタによってイメージ・ブロック内に生成されるか、「ｐａｉｎｔｂｒｕｓｈ」（ペイントブラシ）プログラムによって作成された現存するビットマップ・イメージからイメージ・ブロックにインポートされるか、あるいはシステム・キー「Ｆ２」を押す「ｉｍａｇｅ」のオプション「−ａｆｔｅｒ」もしくは「ｉｍａｇｅ  ｓａｖｅ」コマンドの実行によってイメージ・ブロックに直接取り込まれてセーブされる。
【１１４４】
ｉｍａｇｅ  ｐｌｏｔ；  ｆｒｏｍ  ［  ；［  ロケーション］  ［  ；  ｐａｌｅｔｔｅ］
指定のロケーションまたは指定がなければセーブしたときと同じロケーションに指定されたイメージをプロットする。いずれの場合においても、現在のスクリーン・ロケーションは変更されない。イメージのプロットには、「ｍｏｄｅ」コマンドによってセットした表示モードが使用される（詳細は「ｍｏｄｅ」を参照されたい）。キーワード「ｐａｌｅｔｔｅ」を指定しなければ、パレットは変更されない。イメージは、指定したロケーションから下側に向かってプロットされるので、このロケーションはイメージの左上コーナーとなる。
【１１４５】
「ｆｒｏｍ」のキーワードおよびシンタクス
ｂｌｏｃｋ  ｜  ｂ，  ’名前’
指定したレッスンのイメージ・ブロックからプロットする。イメージの名前のみを指定した場合には、現在のレッスンが指定されたものと見なされる。
【１１４６】
ｆｉｌｅ  ｜  ｆ  ［，  ｒｅｃｏｒｄ］
開始レコード（「ｒｅｃｏｒｄ」）番号を指定しなければレコード１から開始して、アタッチされたデータセットまたは名前セットからのプロットを行う。名前セットについては、あらかじめ「ｓｅｔｎａｍｅ」コマンドにより有効な名前が指定されていなければならない。
【１１４７】
ｍｅｍｏｒｙ  ｜  ｍ，  ’名前’
メモリ・プールのブロックからプロットする。名前については、リテラルをシングル・コーテーション・マークで囲むか、変数を使用する。
【１１４８】
ｖａｒｓ  ｜  ｖ，  変数  ［  ，ｌｅｎｇｔｈ］
変数からプロットする。「ｌｅｎｇｔｈ」（長さ）を指定しないときは、その変数の長さが使用される。
【１１４９】
例
ｉｍａｇｅ  ｐｌｏｔ；ｂｌｏｃｋ，  ’ｈｏｒｓｅ’；２０，１００
＊    名前「ｈｏｒｓｅ」のブロックからロケーション２０，１００にプロットする。
【１１５０】
ｉｍａｇｅ  ｐｌｏｔ；ｂｌｏｃｋ，  ’ｌｉｂｒａｒｙ’，’ｈｏｒｓｅ’
＊    ファイル「ｌｉｂｒａｒｙ」内のブロック「ｈｏｒｓｅ」からプロットする。
【１１５１】
ｉｍａｇｅ  ｐｌｏｔ；ｆｉｌｅ
＊    現在アタッチされているファイルからプロットする。
【１１５２】
ｉｍａｇｅ  ｐｌｏｔ；ｍｅｍｏｒｙ，ｍｙｉｍａｇｅ
＊    変数「ｍｙｉｍａｇｅ」に格納された名前でメモリ・プールからプロット。
【１１５３】
ｉｍａｇｅ  ｐｌｏｔ；  ｖａｒｓ  ，ｐｉｃｓａｖｅ
＊    変数「ｐｉｃｓａｖｅ」内のイメージをプロットする。
【１１５４】
ｉｍａｇｅ  ｐｌｏｔ；ｍｅｍｏｒｙ，’ｓｈｏｗ’；１５：０１；ｐａｌｅｔｔｅ
＊    イメージとともに格納されているパレットを使用してプロットする。
【１１５５】
ｉｍａｇｅ  ｓａｖｅ；  ｄｅｓｔｉｎａｔｉｏｎ  ［；［ロケーション］；［ロケーション］［；ｐａｌｅｔｔｅ  ［，変数］］］
矩形エリアによって指定されるスクリーン・エリアを「ｄｅｓｔｉｎａｔｉｏｎ」にセーブする。スクリーン・エリアを指定しないときは、スクリーン全体がセーブされる。「ｐａｌｅｔｔｅ」キーワードを使用すると、現在のパレットがイメージとともにセーブされる。「変数」を指定すると、「変数」内で指定した色だけがイメージとともにセーブされる。「変数」のフォーマットについては「ｐａｌｅｔｔｅ  ｒｅａｄ」を参照されたい。イメージのセーブには、使用する記憶領域を可能な限り小さくするために、特殊な圧縮フォーマットが使用される。
【１１５６】
「ｄｅｓｔｉｎａｔｉｏｎ」のキーワードおよびシンタクス
ｆｉｌｅ  ｜  ｆ  ［，  ｒｅｃｏｒｄ］
開始レコード（「ｒｅｃｏｒｄ」）番号を指定しなければレコード１から開始して、アタッチされたデータセットまたは名前セットにセーブする。名前セットについては、あらかじめ「ｓｅｔｎａｍｅ」コマンドにより有効な名前が指定されていなければならない。１つのイメージのセーブに必要なレコード数は、次の式を用いて計算することができる：（バイト数＋２５５）＄ｉｄｉｖ＄２５６。
【１１５７】
ｍｅｍｏｒｙ  ｜  ｍ，  ’名前’
メモリ・プール内のブロックにセーブする。名前は、リテラルをシングル・コーテーション・マークで囲むか、変数を使用する。指定した名前と同じ名前を使用してすでにイメージをセーブしているときは、それが上書きされる。「ｉｍａｇｅ」によって作成されるメモリ・プール内の名前は、他のコマンドによって作成される名前と独立している。たとえば、「ｍｅｍｏｒｙ」コマンドと「ｉｍａｇｅ」コマンドにより同じ「ｃａｔ」という名前をメモリ・プール内に作成しても衝突することはない。なお「ｉｎｉｔｉａｌ」コマンドを実行すると、メモリ・プールからすべてのイメージが削除される。
【１１５８】
ｖａｒｓ  ｜  ｖ，  変数  ［  ，ｌｅｎｇｔｈ］
変数にセーブする。「ｌｅｎｇｔｈ」（長さ）を指定しないときは、その変数の長さが使用される。定義済みの変数の長さが充分でないときは、イメージが切り捨てられることがある。
【１１５９】
例
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｐａｌｂｏｌｃｋ（１６），６
．        ｐａｌｓｌｏｔ，２
ｄｅｆｉｎｅ    ｅｎｄ
ｉｍａｇｅ    ｓａｖｅ；ｆｉｌｅ；５０，２０；１５０，８０
＊        現在アタッチされているファイルにセーブする。
【１１６０】
ｉｍａｇｅ  ｓａｖｅ；ｍｅｍｏｒｙ，’ｐｉｃ’；０，０；９９，９９
＊          メモリ・プール内の「ｐｉｃ」にセーブする。
【１１６１】
ｉｍａｇｅ  ｓａｖｅ；ｍｅｍｏｒｙ，’ｓａｖｅ’；０，０；ｚｘｍａｘ，ｚｙｍａｘ；ｐａｌｅｔｔｅ，ｐａｌｂｌｏｃｋ（１），１０
＊          パレットの先頭の１０エントリをセーブする。
【１１６２】
ｉｍａｇｅ  ｍｏｖｅ；  ｆｒｏｍ；  ｄｅｓｔｉｎａｔｉｏｎ
「ｆｒｏｍ」および「ｄｅｓｔｉｎａｔｉｏｎ」がいずれもスクリーンでないとき、これらの間でイメージのコピーを行う。
【１１６３】
例
ｉｍａｇｅ  ｍｏｖｅ；ｂｌｏｃｋ，’ａｂｃ’；ｍｅｍｏｒｙ，’ｄｅｆ’
＊          現在のファイル内の「ａｂｃ」からメモリ・プール内の「ｄｅｆ」へ
【１１６４】
「ｂｌｏｃｋ」を「ｄｅｓｔｉｎａｔｉｏｎ」に使用すると実行中のレッスンのソース・ファイルを変更することから、それを使用することはできない。また、「ｄｅｓｔｉｎａｔｉｏｎ」に「ｆｉｌｅ」を用いる場合は、「ｆｒｏｍ」が「ｍｅｍｏｒｙ」または「ｖａｒｓ」に限られる。
【１１６５】
ｉｍａｇｅ  ｉｎｆｏ；  ｂｕｆｆｅｒ；  ｆｒｏｍ  ｜  ｌａｓｔ  ［；  ｐａｌｅｔｔｅ］
ｉｍａｇｅ  ｉｎｆｏ；  ｂｕｆｆｅｒ；  ｄｉｓｐｌａｙ  ｜  ｄ，  ロケーション  ［；［ロケーション］［；  ｐａｌｅｔｔｅ］］
「ｆｒｏｍ」によって指定されるイメージに関する情報を返す。この情報は、次の固定フォーマットを有する２４バイトのコードとして、指定したバッファに返される。
１バイト：  イメージのタイプ
０＝バイト・オリエンテッド（ＣＧＡ，ＥＶＧＡ等）
１＝プレーン・オリエンテッド（ＥＧＡ，ＶＧＡ等）
２＝テキスト・イメージ
１バイト：  ビット毎ピクセル（バイト・オリエンテッド）または面
の数
２バイト：  スクリーン左側からのバイアス
２バイト：  スクリーン上端からのバイアス
２バイト：  イメージの幅
２バイト：  イメージの高さ
４バイト：  イメージ・ブロックによって使用されるバイト数
１０バイト：予約
【１１６６】
バイアス、幅および高さは、バイト・オリエンテッドまたはプレーン・オリエンテッドのイメージにおいてはピクセルで、テキスト・イメージにおいては文字で与えられる。
【１１６７】
「ｐａｌｅｔｔｅ」キーワードを使用すると、返されるイメージの長さにパレット情報が含められる。
【１１６８】
「ｉｍａｇｅ  ｉｎｆｏ」には、追加の「ｆｒｏｍ」キーワードおよびシンタクスが存在する。
【１１６９】
ｄｉｓｐｌａｙ  ｜  ｄ，  ロケーション  ［；［ロケーション］  ［；  ｐａｌｅｔｔｅ］］
直接スクリーンから取り込まれるイメージ。この形式を使用すれば、スクリーン上の特定のイメージを保持するファイルを作成する前に、そのイメージに必要なスペースを判断することができる。
【１１７０】
ｌａｓｔ
「ｉｍａｇｅ」コマンドを使用して生成した最後のイメージ。
【１１７１】
例
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｉｎｆｏｖａｒ，２４
．        ｔｙｐｅ，１
．        ｂｉｔｓ，１
．        ｘｓｔａｒｔ，２
．        ｙｓｔａｒｔ，２
．        ｘｓｉｚｅ，２
．        ｙｓｉｚｅ，２
．        ｌｅｎｇｔｈ，４
．        ，１０
ｄｅｆｉｎｅ    ｅｎｄ
＊
ｉｍａｇｅ  ｉｎｆｏ；ｉｎｆｏｖａｒ；ｄｉｓｐｌａｙ，５０，５０；１００，１００
ａｔ        ２：１
ｗｒｉｔｅ    Ｉｍａｇｅ  ｗｉｌｌ  ｒｅｑｕｒｉｅ  ＜＜ｓ，ｌｅｎｇｔｈ＞＞  ｂｙｔｅｓ  ｆｏｒ  ｓｔｏｒａｇｅ
（この「ｗｒｉｔｅ」ステートメントの意味：「このイメージのセーブには〜バイト必要です」）
ｐａｕｓｅ    ｐａｓｓ＝  ａｌｌ
ｃｒｅａｔｅｄ  ’ｉｍａｇｅｌ’，（ｌｅｎｇｔｈ＋２５５）  ＄ｉｄｉｖ＄  ２５６
ｄｏ          ｚｒｅｔｕｒｎ；；ｅｒｒｏｒ（’ｃｒｅａｔｅｄ’）    ＄＄  必ず「ｚｒｅｔｕｒｎ」をチェック
ｉｍａｇｅ    ｓａｖｅ；ｆｉｌｅ；５０，５０；１００，１００
【１１７２】
ｉｍａｇｅ  ｄｅｌｅｔｅ；  ’名前’
メモリ・プールから指定したイメージを削除する。
【１１７３】
ｉｍａｇｅ  ｒｅｓｅｔ
メモリ・プールからすべてのイメージを削除する。
【１１７４】
ｉｍａｇｅ  ｃｏｍｐｒｅｓｓ；  ［  ｏｎ  ｜  ｏｆｆ  ］
イメージの圧縮のオン／オフを切り替える。イメージを圧縮した場合には、必要なメモリまたはディスクのスペースが小さくなり、イメージを圧縮しない場合には、プロット速度が速くなる。デフォルトは「ｏｎ」が選択されている。
【１１７５】
ｉｍａｇｅ  ｐａｌｅｔｔｅ；  ｆｒｏｍ；  ｂｕｆｆｅｒ，  ｅｎｔｒｉｅｓ
イメージ・パレットのエントリをバッファに読み出す。バッファは、次のフォーマットを有する６バイトのパレット・エントリを少なくとも１つ格納できるものでなければならない。
スロット    （２バイト）
レッド      （１バイト）
グリーン    （１バイト）
ブルー      （１バイト）
強度        （１バイト）
【１１７６】
「スロット」の値は、「ｉｍａｇｅ  ｐａｌｅｔｔｅ」の実行前に各パレット・エントリに対応させてプリセットしておく必要がある。各スロットの値は、そのエントリに情報を読み込むパレット・スロットを決定する。たとえば、特定のエントリに対応する「スロット」の値が８であれば、パレット・スロット８の情報がエントリに読み込まれる。「スロット」の値がセットされていないとき、スロット０がすべてのエントリに読み込まれる。パレット・エントリのサブセットは、適切なスロット値をセットすることによって読み出しまたは書き込みが可能になる。
【１１７７】
「ｅｎｔｒｉｅｓ」は、読み出すエントリ数を決定する。
【１１７８】
例
１６のベース・パレット・エントリのパレット情報をイメージからメモリ・ブロック「ｔｅｓｔ」に読み込む。
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｐｖａｒ（１６）  ，６
．        ｓｌｏｔ，２
．        ｐｒｅｄ，１
．        ｐｇｒｅｅｎ，１
．        ｐｂｌｕｅ，１
．        ｉｎｔｅｎｓｔｙ．１
ｃｏｕｎｔ    ，２
ｄｅｆｉｎｅ  ｅｎｄ
＊
ｌｏｏｐ  ｃｏｕｎｔ  ←  １，  １６
＊        スロット番号を初期化しなければならない。
．        ｃａｌｃ  ｓｌｏｔ（ｃｏｕｎｔ）  ←  ｃｏｕｎｔ−１
ｅｎｄｌｏｏｐ
＊
ｉｍａｇｅ    ｐａｌｅｔｔｅ；  ｍｅｍｏｒｙ，  ’ｔｅｓｔ’；ｐｖａｒ（１），１６
【１１７９】
スクリーンの取り込み
１つのスクリーンから別のスクリーンにイメージを表示するためには、両者が同じタイプでなければならない。イメージには次に示す３つのタイプがある。
●バイト・オリエンテッドのグラフィックス：ＣＧＡ、Ｈｅｒｃｕｌｅｓ、ＭＣＧＡ、およびＥＶＧＡ等。
●  プレーン・オリエンテッドのグラフィックス：ＥＧＡ、ＶＧＡ等。
●  テキスト
【１１８０】
グラフィックス・スクリーンについては、ビット毎ピクセル数（バイト・オリエンテッド）または面の数（プレーン・オリエンテッド）が一致していなければならない。テキスト・イメージは、すべてのテキスト・スクリーン・タイプの間で互換性がある。
【１１８１】
イメージの特性は、「ｉｍａｇｅ  ｉｎｆｏ」コマンドを使用して判断することができる。現在ＴｅｎＣＯＲＥによってサポートされているグラフィックス・スクリーンの特性を次の表に示す。
【１１８２】
【表９】
2009009584.tif 000011
【１１８３】
【表１０】
2009009584.tif 000012
【１１８４】
たとえば、バイト・オリエンテッドのグループにおいては、「ｃｇａ  ｈｉｇｈ」「ｈｅｒｃｕｌｅｓ」および「ｍｃｇａ  ｈｉｇｈ」のイメージは互いに互換性を有する。プレーン・オリエンテッドのグループにおいては、リストしたすべてのスクリーンの間に互換性がある。警告：１つのスクリーンからのイメージが別のスクリーンと互換性を有する場合であっても、縦横比の相違から異なって現れることがある。たとえば、「ｖｇａ  ｍｅｄｉｕｍ」スクリーン上に「ｅｇａ  ｈｉｇｈ」のイメージをプロットさせると、幅は同じになるが、高さはオリジナルの約７３％にしかならない。
【１１８５】
システム変数
ｚｒｅｔｕｒｎ
−１      オペレーションは成功した。
０      ディスク・エラー（「ｚｄｏｓｅｒｒ」「ｚｅｄｏｓｅｒｒ」
参照）。
１      ファイルがアタッチされていない。
２      ブロックが範囲外。
３      メモリが範囲外。
４      ファイルが見つからない。
５      イメージのスクリーン・タイプが実行スクリーン・タイプ
に一致しない。
８      ディスクのレコードが不充分。
９      有効な名前がない。
１０      名前またはブロックが見つからない。
１１      無効なタイプ。
１６      無効な名前。
１７      無効なイメージ。
１８      メモリ・プールが要求を満たすことができない。
【１１８６】
ｉｎｉｔｉａｌ
システムを標準の状態に初期化する。
【１１８７】
ｉｎｉｔｉａｌ      ［  ｎｏｄｅｔａｃｈ  ］
【１１８８】
説明
システムを標準の状態にセットする。通常、すべてのシステム・パラメータを既知の状態にするために、レッスンの開始時に「＋ｉｎｉｔｉａｌ」コントロール・ブロック内で使用される。
【１１８９】
「ｎｏｄｅｔａｃｈ」キーワードは、現在アタッチされているファイルのデタッチを禁止し、共有ファイルについて有効なロックがあればすべて保存する。
【１１９０】
「ｉｎｉｔｉａｌ」コマンドは、次に示すコマンドの初期化を行う。
【１１９１】
ディスプレイ
ｗｉｎｄｏｗ      ｒｅｓｅｔ；  ｎｏｐｌｏｔ
ｓｔａｔｕｓ      ｒｅｓｔｏｒｅ；  ｓｔａｎｄａｒｄ
ｂｌｉｎｋ        ｏｆｆ
ｃｏｌｏｒ        ｗｈｉｔｅ
ｃｏｌｏｒｅ      ｂｌａｃｋ
ｃｏｌｏｒｇ      ｂｌａｃｋ
ｄｉｓａｂｌｅ    ｃｕｒｓｏｒ
ｅｎａｂｌｅ      ｆｏｎｔ
ｆｏｎｔ          ｓｔａｎｄａｒｄ；  ｓｔａｎｄａｒｄ
ｍｏｄｅ          ｗｒｉｔｅ
ｏｒｉｇｉｎ      ０，０
ｒｏｔａｔｅ      ０
ｓｃａｌｅ        １，１
ｔｅｘｔ          ａｌｉｇｎ；  ｂａｓｅｌｉｎｅ
ｔｅｘｔ          ｂｏｌｄ；  ｏｆｆ
ｓｔａｔｕｓ      ｓａｖｅ；  ｄｅｆａｕｌｔ
ｐａｌｅｔｔｅ    ｉｎｉｔ
ｄｉｓａｂｌｅ    ａｂｓｏｌｕｔｅ
ｔｅｘｔ          ｄｅｌａｙ；  ０
ｔｅｘｔ          ｄｉｒｅｃｔｉｏｎ；  ｒｉｇｈｔ
ｔｅｘｔ          ｉｎｃｒｅｍｅｎｔ；  ０，０
ｔｅｘｔ          ｉｔａｌｉｃ；  ｏｆｆ
ｔｅｘｔ          ｍａｒｇｉｎ；  ｗｒａｐ
ｔｅｘｔ          ｎａｒｒｏｗ；  ｏｆｆ
ｔｅｘｔ          ｒｅｖｅａｌ；  ｏｆｆ
ｔｅｘｔ          ｒｏｔａｔｅ；  ０
ｔｅｘｔ          ｓｈａｄｏｗ；  ｏｆｆ，ｗｈｉｔｅ
ｔｅｘｔ          ｓｉｚｅ；  １
ｔｅｘｔ          ｓｐａｃｉｎｇ；  ｆｉｘｅｄ
ｔｅｘｔ          ｕｎｄｅｒｌｉｎｅ；  ｏｆｆ，ｆｏｒｅｇｎｄ
ｔｈｉｃｋ        ｏｆｆ
ｐａｇｅ          １
ｄｉｓｐｌａｙ    １
【１１９２】
入力
ｄｉｓａｂｌｅ    ｐｏｉｎｔｅｒ
ｄｉｓａｂｌｅ    ｐｔｒｕｐ
ｅｎａｂｌｅ      ａｒｅａ
ａｒｅａ          ｃｌｅａｒ；  ｄｅｆａｕｌｔ
ａｒｅａ          ｈｉｇｈｌｉｇｈｔ；  ｏｆｆ
ｕｎｃｏｖｅｒ    ％ｃｔｌ”ｕ”
ｆｏｒｃｅ        ｎｏ  ｌｏｃｋ
ｔｉｍｅ          ｃｌｅａｒ        ＄＄  ルータを除く
【１１９３】
分岐
ｆｌｏｗ          ｃｌｅａｒ；  ｄｅｆａｕｌｔ
ｅｎａｂｌｅ      ｂｒｅａｋ
ｂａｓｅ
【１１９４】
ディスク
ｄｉｓｋ          −１    ＄＄  全ドライブ上でファイルをサー
チする
ｅｄｉｓｋ        −１
ｄｅｔａｃｈ      ａｌｌ
ｎｓｄｉｒｗｒ    −１    ＄＄  常に名前セット・ディレクトリを
書き込む
【１１９５】
判断
ｅｎａｂｌｅ      ａｒｒｏｗ
ｏｋｗｏｒｄ      ’ｏｋ’
ｎｏｗｏｒｄ      ’ｎｏ’
【１１９６】
全般
ｍｅｍｏｒｙ      ｒｅｓｅｔ      ＄＄  ルータを除く
ｓｔａｔｕｓ      ｒｅｓｅｔ
ａｒｅａ          ｒｅｓｅｔ
ｆｌｏｗ          ｒｅｓｅｔ      ＄＄  ルータを除く
ｐｅｒｍ          ｒｅｓｅｔ
ｉｍａｇｅ        ｒｅｓｅｔ
ｖｅｒｓｉｏｎ                    ＄＄  バージョンのエミュレ
ーションなし
【１１９７】
ビデオディスクのオーバーレイ
ｖｉｄｅｏ        ｉｎｉｔ
ｖｉｄｅｏ        ｕｎｉｔｉｎｉｔ，  ｏｎ
【１１９８】
ｉｎｔｃａｌｌ
ソフトウェア割り込みを呼び出す。
【１１９９】
ｉｎｔｃａｌｌ    ｎｕｍｂｅｒ，  ｐａｓｓ，  ｒｅｃｅｉｖｅ  ［  ；ｅｘｔｅｎｄｅｄ］
ｎｕｍｂｅｒ      呼び出す割り込みルーチン
ｐａｓｓ          割り込みルーチンに渡すデータ（８または２０バ
イト）
ｒｅｃｅｉｖｅ    割り込みルーチンから返されるデータ（８または
２０バイト）
ｅｘｔｅｎｄｅｄ  拡張レジスタの使用を強制
【１２００】
説明
「ｎｕｍｂｅｒ」によって指定した割り込みを呼び出す。非拡張形式においては、レジスタＡＸ、ＢＸ、ＣＸ、およびＤＸに「ｐａｓｓ」からの４つの２バイト値がセットされる。レジスタＤＳおよびＥＳは、「ｐａｓｓ」変数に適切なグローバル変数またはローカル変数のセグメントをポイントすべくセットされる。ＳＩおよびＤＩには、セグメント内のオフセットがセットされる。ルーチンの終了時には、レジスタＡＸ、ＢＸ、ＣＸ、およびＤＸ内にある４つの２バイト値が「ｒｅｃｅｉｖｅ」に返される。「ｚｒｅｔｕｒｎ」には、ＦＬＡＧＳレジスタの下位バイトが格納される。
【１２０１】
「ｅｘｔｅｎｄｅｄ」キーワードは、２０バイトの「ｐａｓｓ」および「ｒｅｃｅｉｖｅ」変数に対し、次に示す順序を有する拡張レジスタ・セットの使用を強制する：
ＡＸ、ＢＸ、ＣＸ、ＤＸ、ＳＩ、ＤＩ、ＢＰ、ＤＳ、ＥＳ、ＦＬＡＧＳ
【１２０２】
アドレス
「ｉｎｔｃａｌｌ」とともに使用されるレジスタのセットまたは解釈において、次に示すシステム定義関数の参照を使用すると役立つことがある。
【１２０３】
ｓｙｓｌｏｃ（ｇｌｏｂａｌ）  グローバル変数のセグメント・アドレ
ス
ｓｙｓｌｏｃ（ｌｏｃａｌ）    ローカル変数のセグメント・アドレス
ｖａｒｌｏｃ（ｖａｒ）        変数「ｖａｒ」のオフセット・アドレ
ス
ａｂｓｌｏｃ（ｖａｒ）        メモリ内の「ｖａｒ」の絶対ロケーシ
ョン；セグメントを伴わない４バイト
のオフセットとして表される。セグメ
ント（ｓｅｇｍｅｎｔ）とオフセット
（ｏｆｆｓｅｔ）アドレスの関係は、
次に示すとおりである。
ｓｅｇｍｅｎｔ＝ａｂｓｌｏｃ（）  ＄ａｒｓ＄  ４
ｏｆｆｓｅｔ＝ａｂｓｌｏｃ（）    ＄ｍａｓｋ＄  ｈ０ｆ
ａｂｓｌｏｃ＝（（ｓｅｇｍｅｎｔ  ＄ｍａｓｋ＄  ｈ００００ｆｆｆｆ）  ＄ｃｌｓ４＄  ４）  ＋  （ｏｆｆｓｅｔ  ＄ｍａｓｋ＄  ｈ００００ｆｆｆｆ）
【１２０４】
例
メモリ・サイズを返す割り込みルーチン「ｈ１２」を実行する。この割り込みルーチンは入力データがないので、入出力に同じ変数が使用されている。
ｄｅｆｉｎｅ      ｌｏｃａｌ
ｒｅｇｓｔｒｓ，８
．        ａｘ，  ２              ＄＄  ＡＸのデータ
．        ｂｘ，  ２              ＄＄  ＢＸのデータ
．        ｃｘ，  ２              ＄＄  ＣＸのデータ
．        ｄｘ，  ２              ＄＄  ＤＸのデータ
ｄｅｆｉｎｅ    ｅｎｄ
＊    「ＢＩＯＳ」割り込み「ｈ１２」を呼び出す。
＊    「メモリ・サイズ読み取り」は入力パラメータがないため、
＊    入力と出力に同一の変数が使用できる。
＊
ｉｎｔｃａｌｌ  ｈ１２，  ｒｅｇｓｔｒｓ，  ｒｅｇｓｔｒｓ
ａｔ        ５：５
ｗｒｉｔｅ  Ｙｏｕ  ｈａｖｅ  ＜＜ｓ，  ａｘ  ＄ｉｍｕｌ＄  １０２４＞＞  ｂｙｔｅｓ  ｏｆ  ｍｅｍｏｒｙ．
（この「ｗｒｉｔｅ」ステートメントの意味：「実装メモリは〜バイトです」）
【１２０５】
システム変数
「ｚｒｅｔｕｒｎ」には、コンピュータの内部フラグ・レジスタの下位バイトが格納される。ソフトウェア割り込みによってエラー条件の存在を示すためにしばしばセットされるキャリー（ＣＹ）ビットをテストするためには、関数参照「ｂｉｔ（ｚｒｅｔｕｒｎ，８）」を使用することができる。ＦＬＡＧＳレジスタの定義については、「ｉｎｔｃａｌｌ」のオンライン・ドキュメントを参照されたい。
【１２０６】
ｊｕｍｐ
新しいメイン・ユニットに分岐する。
【１２０７】
ｊｕｍｐ    ユニット    ［（１６以下の引数）］
ｊｕｍｐ    セレクタ；  ユニット［（１６以下の引数）］；ユニット［（１６以下の引数）］；．．．
ｊｕｍｐｏｐ  ユニット    ［（１６以下の引数）］
ｊｕｍｐｏｐ  セレクタ；  ユニット［（１６以下の引数）］；ユニット［（１６以下の引数）］；．．．
【１２０８】
説明
「ｊｕｍｐ」および「ｊｕｍｐｏｐ」は、指定されたユニットに分岐し、それを新しいメイン・ユニットに設定する。新しいメイン・ユニットには、オプションで１６以下の引数を渡すことができる。すべての「ｆｌｏｗ」分岐セッティングはクリアされ（「ｒｏｕｔｅｒ」セッティングを除く）、デフォルト復元される。
【１２０９】
「ｊｕｍｐ」分岐は、すべてのプロット・パラメータをデフォルトの値（「ｓｔａｔｕｓ」参照）に戻し、スクリーン（またはウィンドウ）を「ｃｏｌｏｒｅ」色でイレースする。すべてのポインタ・エリアはクリアされ、そのデフォルトが復元される。
【１２１０】
「ｊｕｍｐｏｐ」（「ｊｕｍｐ  ｏｎ  ｐａｇｅ」つまり「ページ上でジャンプ」）は、プロット・パラメータおよび「ａｒｅａ」セッティングの変更、あるいはスクリーンのイレースを行わない。
【１２１１】
「ｊｕｍｐ」キーワードを伴う「ｆｌｏｗ」コマンドの機能はこれに類似している。しかしながら、「ｆｌｏｗ」が遅延付きのイベント主導分岐であるのに対し、「ｊｕｍｐ」ではコマンド実行時に直ちに分岐が生じる。また「ｊｕｍｐ」は引数を持つことができるが、「ｆｌｏｗ」ではそれが使用できない。
【１２１２】
「セレクタ」については「シンタクス規約」に説明がある。「ｊｕｍｐ」はさらに追加の「ｑ」（終了を表す「ｑｕｉｔ」の「ｑ」）リスト・エントリ形式があり、それが選択されると、現在のユニットの先を実行せずに終了する。例４を参照されたい。
【１２１３】
最大で１６の引数をカンマを用いて区切り、分岐時に渡すことができる。これらは、「ｊｕｍｐ」の実行に伴って値が求められ、その値が次のユニットに渡される。次のユニットでは、「ｒｅｃｅｉｖｅ」コマンドを使用してこの引数を受け取る。引数の引き渡しおよび、引数を渡すときセットされるシステム変数「ｚａｒｇｓ」および「ｚａｒｇｓｉｎ」については「ｒｅｃｅｉｖｅ」コマンドの説明を参照されたい。
【１２１４】
例
例１
ｊｕｍｐ      ｔｗｏ
現在のレッスンのユニット「ｔｗｏ」に直ちに分岐する。スクリーンはイレースされ、すべてのデフォルトが再び設定される。
【１２１５】
例２
ｊｕｍｐ      ｒｉｖｅｒｓ，＜＜ｎａｍｅ＞＞
変数「ｎａｍｅ」によって指定されるレッスン「ｒｉｖｅｒｓ」のユニットに分岐する。
【１２１６】
例３
ｊｕｍｐｏｐ    ｂｕｉｌｄ  （９８．６，  ｍｅｎ＋ｗｏｍｅｎ，  ｓｉｚｅ）
．．．
ｒｅｃｅｉｖｅ  ｔｅｍｐ，  ｔｏｔａｌ，  ｓｉｚｅ    ＄＄  ユニット「ｂｕｉｌｄ」内
【１２１７】
現在のレッスンのユニット「ｂｕｉｌｄ」に分岐し（スクリーンのイレースなし）、引数、つまり定数９８．６、式「ｍｅｎ＋ｗｏｍｅｎ」の値、および変数「ｓｉｚｅ」内の値を渡す。ユニット「ｂｕｉｌｄ」に置いては、渡された引数を「ｒｅｃｅｉｖｅ」ステートメントが変数に格納する。「ｊｕｍｐｏｐ」ではスクリーンがイレースされないことから、ユニット「ｂｕｉｌｄ」によって現在のスクリーンの表示に、さらに情報を追加することができる。
【１２１８】
例４
ｊｕｍｐ      ｘ−２；  ｏｎｅ；  ｔｗｏ；  ｔｈｒｅｅ；  ｑ
この選択形式の「ｊｕｍｐ」は、「ｘ−２」が負のときはユニット「ｏｎｅ」へ、０のときはユニット「ｔｗｏ」へ、１のときはユニット「ｔｈｒｅｅ」へ分岐し、それが１を超えるときは、現在のユニット内にあるこれ以降のコマンドの実行を終了する。
【１２１９】
汎用ユニット番号
新しいメイン・ユニットに対する共通の「ｊｕｍｐ」先として汎用分岐名が用意されている。
【１２２０】
＝ｎｅｘｔ    レッスン内の現在のメイン・ユニットと物理的に続いて
いる次のユニット。それがないときは分岐が無視される。
＝ｂａｃｋ    レッスン内の現在のメイン・ユニットと物理的に続いて
いる手前のユニット。それがないときは分岐が無視され
る。
＝ｆｉｒｓｔ  現在のレッスンの最初の実行可能ユニット。
＝ｌａｓｔ    現在のレッスンの最後の実行可能ユニット。
＝ｍａｉｎ    システム変数「ｚｍａｉｎｌ」「ｚｍａｉｎｕ」に保持
されている現在のメイン・レッスンおよびユニット。
＝ｂａｓｅ    最後に「ｂａｓｅ」修飾の「ｆｌｏｗ」分岐が発生した、
「ｂａｓｅ」コマンドによってセットされたメイン・レ
ッスンおよびユット。それがないときは分岐が無視され
る。現在のベース（ｂａｓｅ）レッスンおよびユニット
は、システム変数「ｚｂａｓｅｌ」「ｚｂａｓｅｕ」に
保持されている。通常、学習のメイン・ラインに対する
ヘルプ等の、その後のレッスンのシーケンスから戻るた
めに使用される。
＝ｅｄｉｔｏｒ  オーサリング・システムで使用された場合はソース・
エディタ（現在の実行ユニットとともにロードされ
る）；ステューデント・エクスキュータでは無視され
る。
＝ｅｘｉｔ      「ｅｘｉｔｌｅｓ」コマンドによってセットされ、シ
ステム変数「ｚｅｘｉｔｌ」「ｚｅｘｉｔｕ」に保持
されている内容に従ってレッスンが終了する。ステュ
ーデント・ユーザの場合は、通常この分岐により、Ｔ
ｅｎＣＯＲＥアクティビティ・マネージャまたはそれ
がないときはＤＯＳに戻る。レッスンをテストしてい
るオーサーの場合は、ファイル・ディレクトリに戻る。
＝ｓｙｓｔｅｍ  計算機、イメージ・キャプチャ、カーソル等を含むシ
ステム・オプションのウィンドウを開く。オーサリン
グの間は、ＴｅｎＣＯＲＥのシステム・デフォルトと
して「Ｆ２」がこの分岐とともにロードされる；ステ
ューデント・エクスキュータでは無視される。
【１２２１】
例
最初のトライで質問に正しく解答できると、学習者は次のメイン・ユニットに進むことができる。２ないし３回のトライが必要なときは、現在のメイン・ユニットを再度実施する。トライがそれ以上のときは、ベース・ユニット・ポインタがセットされ、学習者は「ｔｒｏｕｂｌｅ」という名前のヘルプ・ユニットに分岐する。ユニット「ｔｒｏｕｂｌｅ」においては、「＝ｂａｓｅ」に対する「ｊｕｍｐ」により学習者はベース・ユニットに戻り、同じ質問に再度トライする。このコードは、メイン・ユニットの一部として、またはレッスン内のすべての質問によって呼び出されるサブルーチンとして同様に使用することができる。
ｉｆ  ｔｒｉｅｓ  ＝  １
．    ｊｕｍｐ    ＝ｎｅｘｔ  ＄＄  次の質問に進む
ｅｌｓｅｉｆ  ｔｒｉｅｓ  ＜  ４
．    ｊｕｍｐ    ＝ｍａｉｎ  ＄＄  このユニットを再度実施する
ｅｌｓｅ
．    ｂａｓｅ    ＜＜ｚｍａｉｎｕ＞＞  ＄＄  ベースを現在のメ
イン・ユニットにする
．    ｊｕｍｐ    ｔｒｏｕｂｌｅ        ＄＄  学習者にヘルプを
提供する
ｅｎｄｉｆ
【１２２２】
ｌｉｂｒａｒｙ
バイナリ・ユニットに対してサブルーチン呼び出しを行う。
【１２２３】
ｌｉｂｒａｒｙ  ユニット［（［１６以下の引数］  ［；１６以下の戻り値］）］
ｌｉｂｒａｒｙ  セレクタ；  ユニット［（［１６以下の引数］［；１６以下の戻り値］）］；．．．
【１２２４】
説明
「ｄｏ」コマンド（「ｄｏ」コマンド参照）の特殊な形式であり、呼び出し側となる実行中のユニットがソース・モードであるかバイナリ・モードであるかによらず、外部バイナリ・ライブラリに対するサブルーチン呼び出しを行う。フォーマットは、呼び出されるユニットとの間で授受する引数も含めて「ｄｏ」とまったく同じになる。このコマンドは、完成ルーチンまたはバイナリ形式でのみ存在するサード・パーティのＴｅｎＣＯＲＥソフトウェアの呼び出しに使用される。
【１２２５】
呼び出したユニットが（ソース・コード・エディタから直接ソース・コードを実行することによって）ソース・モードで実行されている場合、「ｌｉｂｒａｒｙ」はサブルーチン呼び出しのためにバイナリ実行モードに切り替える。呼び出されたユニットから呼び出したユニットに戻るとき、ソース・モードの実行に戻される。呼び出されたライブラリ・ルーチンが新しいメイン・ユニットに「ｊｕｍｐ」する場合は、バイナリ・モードでの実行が継続され、「編集にリターン」するキー「Ｆ２」は機能しなくなる。
【１２２６】
ソースならびにバイナリの実行モードおよびそれを明示的にコントロールする方法については、「ｏｐｅｒａｔｅ」コマンドを参照されたい。
【１２２７】
ｌｏａｄｌｉｂ
バイナリ・ユニットをユニット・バッファにロードする。
【１２２８】
ｌｏａｄｌｉｂ  ユニット
ｌｏａｄｌｉｂ  セレクタ；  ユニット；  ユニット；．．．
【１２２９】
説明
これ以降の「ｌｉｂｒａｒｙ」コマンドによる実行のために、バイナリ・ユニットをバッファ・キャッシュにロードする。ユニットは、このコマンドを実行するユニットのタイプ（ソースまたはバイナリ）または「ｏｐｅｒａｔｅ」によってセットされた状態とは無関係に、バイナリ・ファイルからフェッチされる。
【１２３０】
「ｌｏａｄｌｉｂ」を使用し、ユニットの実行前に、あるいはそれをメモリに格納する前にその存在をチェックすることができる。これは、続くコードのセクションをスピードアップするとき、あるいはユニットが存在するディスクの取り出しを許可するとき役立つ。
【１２３１】
「ｌｏａｄｌｉｂ」は使用に注意が必要である：ユニットの実行にスペースが必要な場合は、実行していないユニットがメモリからパージされることがある。
【１２３２】
例
レッスン「ｌｉｂｆｉｌｅ」のバイナリ・コピーからユニット「ｃｏｐｙｆｉｌｅ」をあらかじめロードする。ユニット「ｃｏｐｙｆｉｌｅ」は、１つのディスクから別のディスクにファイルをコピーする。ロード完了後は、レッスン「ｌｉｂｆｉｌｅ」が格納されているディスクを取り出す。
ｌｏａｄｌｉｂ  ｌｉｂｆｉｌｅ，  ｃｏｐｙｆｉｌｅ
＊    バイナリ・ユニット「ｃｏｐｙｆｉｌｅ」をメモリに格納する。
ｊｕｍｐ    ｚｒｅｔｕｒｎ；；  ｅｒｒｏｒｕ    ＄＄  「ｚｒｅｔｕｒｎ」を必ずチェック
ａｔ        ５：５
ｗｒｉｔｅ  Ｎｏｗ  ｐｕｔ  ｔｈｅ  ｄｉｓｋｅｔｔｅ  ｔｏ  ｃｏｐｙ  ＦＲＯＭ  ｉｎ  ｄｒｉｖｅ  Ａ  ａｎｄ  ｔｈｅ  ｄｉｓｋｅｔｔｅ  ｔｏ  ｃｏｐｙ  ＴＯ  ｉｎ  ｄｒｉｖｅ  Ｂ．
Ｐｒｅｓｓ  Ｅｎｔｅｒ  ｔｏ  ｂｅｇｉｎ  ｔｈｅ  ｃｏｐｙ
（この「ｗｒｉｔｅ」ステートメントの意味：「コピー元のディスクをドライブＡに、コピー先のディスクをドライブＢにセットしてください。実行キーを押せばコピーが開始されます」）
ｐａｕｓｅ  ｐａｓｓ  ＝  ％ｅｎｔｅｒ
ｌｉｂｒａｒｙ  ｌｉｂｆｉｌｅ，  ｃｏｐｙｆｉｌｅ    ＄＄  メモリ内にあることが保証される
【１２３３】
システム変数
ｚｒｅｔｕｒｎ
−１      オペレーションは成功した。
０      ディスク・エラー（「ｚｄｏｓｅｒｒ」「ｚｅｄｏｓｅｒ
ｒ」参照）。
４      レッスンが見つからない。
１０      ユニットが見つからない。
１１      無効なタイプ
１６      無効な名前。
２１      別のユーザのロックと衝突した。
【１２３４】
ｌｏａｄｕ
ユニットをユニット・バッファにロードする。
【１２３５】
ｌｏａｄｕ    ユニット
ｌｏａｄｕ    セレクタ；  ユニット；  ユニット；．．．
【１２３６】
説明
指定されたユニットを実行せずにディスクからユニットバッファ・キャッシュにロードする。「ｌｏａｄｕ」を使用して１ないしは複数のユニットをあらかじめロードしておけば、その後にディスク・アクセスによる遅延を回避することができる。また、ユニットの有無をチェックするため、あるいは取り出し予定のディスクからユニットをロードしておくためにも使用できる。
【１２３７】
例
ユニット「ｃｏｐｙｆｉｌｅ」をあらかじめロードする。ユニット「ｃｏｐｙｆｉｌｅ」は、１つのディスクから別のディスクにファイルをコピーする。ロード完了後は、このルーチンが格納されているディスクを取り出す。
ｌｏａｄｕ    ｃｏｐｙｆｉｌｅ  ＄＄  ユニット「ｃｏｐｙｆｉｌｅ」をメモリに格納する
ｊｕｍｐ    ｚｒｅｔｕｒｎ；；  ｅｒｒｏｒｕ    ＄＄  「ｚｒｅｔｕｒｎ」を必ずチェック
ａｔ        ５：５
ｗｒｉｔｅ  Ｎｏｗ  ｐｕｔ  ｔｈｅ  ｄｉｓｋ  ｔｏ  ｃｏｐｙ  ＦＲＯＭ  ｉｎ  ｄｒｉｖｅ  Ａ  ａｎｄ  ｔｈｅ  ｄｉｓｋ  ｔｏ  ｃｏｐｙ  ＴＯ  ｉｎ  ｄｒｉｖｅ  Ｂ．
Ｐｒｅｓｓ  Ｅｎｔｅｒ  ｔｏ  ｂｅｇｉｎ  ｔｈｅ  ｃｏｐｙ．
（この「ｗｒｉｔｅ」ステートメントの意味：「コピー元のディスクをドライブＡに、コピー先のディスクをドライブＢにセットしてください。実行キーを押せばコピーが開始されます」）
ｐａｕｓｅ  ｐａｓｓ  ＝  ％ｅｎｔｅｒ
ｊｕｍｐ    ｃｏｐｙｆｉｌｅ    ＄＄  メモリ内にあることが保証される
【１２３８】
システム変数
ｚｒｅｔｕｒｎ
−１      オペレーションは成功した。
０      ディスク・エラー（「ｚｄｏｓｅｒｒ」「ｚｅｄｏｓｅｒ
ｒ」参照）。
４      レッスンが見つからない。
１０      ユニットが見つからない。
１１      無効なタイプ
１６      無効な名前。
２１      別のユーザのロックと衝突した。
【１２３９】
ｌｏｏｐ
「ｌｏｏｐ」構造を開始する。
【１２４０】
ｌｏｏｐ      ［条件］
ｌｏｏｐ      ｃｏｕｎｔｅｒ  ←  ｓｔａｒｔ，  ｅｎｄ  ［  ，
ｉｎｃｒｅｍｅｎｔ］
ｃｏｕｎｔｅｒ    インデクス・カウンタとして機能
する変数
ｓｔａｒｔ        「ｃｏｕｎｔｅｒ」を開始する値
ｅｎｄ            「ｃｏｕｎｔｅｒ」を終了する値
ｉｎｃｒｅｍｅｎｔインデクス・カウンタのインクリ
メント（デクリメント）値
【１２４１】
説明
「ｅｎｄｌｏｏｐ」で終了するループ構造を開始する。ループ構造は、一連のコマンドを指定回数にわたって、あるいは条件が真になるまで繰り返し実行する。「ｌｏｏｐ」構造は、同じインデントレベルに「ｒｅｌｏｏｐ」コマンドおよび「ｏｕｔｌｏｏｐ」コマンド（「ｒｅｌｏｏｐ」および「ｏｕｔｌｏｏｐ」参照）を含めることができる。これら以外のコマンドは、すべてインデントしなければならない。ループは、互いにネスティングすることができるが、内側のループの範囲が外側のループの範囲内に完全に収まらなければならない。
【１２４２】
割り当て矢印（←）は、「繰り返し」ループと「ＷＨＩＬＥ」ループを区別する。
【１２４３】
ｌｏｏｐ  ［条件］
「ＷＨＩＬＥ」ループ内のコードは、「条件」が真になるまで、反復実行される。タグなしで使用すると、「ｏｕｔｌｏｏｐ」「ｊｕｍｐ」等を介して終了がもたらされるまで反復が継続する。
【１２４４】
「条件」を示した場合は、実行が「ｌｏｏｐ」コマンドに戻るごとに値がテストされる。「条件」が真になれば、新しい繰り返しが開始されるが、偽であればループが終了する。
【１２４５】
例
「ＷＨＩＬＥ」ループ使用してスクリーン上にＸのラインをプロットする。
ａｔ      ５：１
ｌｏｏｐ  ｚｓｐａｃｅ  ＜  ８０      ＄＄  「ｚｓｐａｃｅ」が８０より小さくなるまで
．        ｗｒｉｔｅ  Ｘ
ｅｎｄｌｏｏｐ
【１２４６】
ｌｏｏｐ  ｃｏｕｎｔｅｒ  ←  ｓｔａｒｔ，  ｅｎｄ  ［  ，ｉｎｃｒｅｍｅｎｔ］
「繰り返し」ループは、コントロール引数によって示される回数にわたって実行を繰り返す。「ｃｏｕｎｔｅｒ」には「ｓｔａｒｔ」の値が割り当てられる。各実行がループの先頭に戻るごとに、「ｃｏｕｎｔｅｒ」に「ｉｎｃｒｅｍｅｎｔ」が加算される。「ｉｎｃｒｅｍｅｎｔ」を省略すると、デフォルトの値「１」が使用される。「ｉｎｃｒｅｍｅｎｔ」が負数のときは「ｃｏｕｎｔｅｒ」がデクリメントされる。「ｃｏｕｎｔｅｒ」が「ｅｎｄ」の値を（ループがカウントしている方向において）通過するとループが終了する。
【１２４７】
例１
ｌｏｏｐ  ｉｎｄｅｘ  ←  １，１０      ＄＄  １から１０までの
ループ
．        ａｔ        ｉｎｄｅｘ：４
．        ｗｒｉｔｅ  ｉｎｄｅｘ  ｉｓ  ＜＜ｓ，ｉｎｄｅｘ＞＞
（この「ｗｒｉｔｅ」ステートメントの意味：「インデクスは〜です」）
ｅｎｄｌｏｏｐ
【１２４８】
例２
「ＷＨＩＬＥ」ループは、スクリーン上の水平方向のプロットを制限するために使用する。「繰り返し」ループは、「ＷＨＩＬＥ」ループの各繰り返しにおいて任意数のＸをプロットするために使用する。
ａｔ      １０：１
ｌｏｏｐ  ｚｓｐａｃｅ    ＜    ８０    ＄＄  「ｚｓｐａｃｅ」が８０より小さくなるまで
．        ｃａｌｃ          ｒａｎｄｏｍ  ←  ｒａｎｄｉ（１０）
．        ｌｏｏｐ          ｉｎｄｅｘ  ←  １，  ｒａｎｄｏｍ
．        ．          ｗｒｉｔｅ  Ｘ
．        ｅｎｄｌｏｏｐ
．        ｐａｕｓｅ      ．５
ｅｎｄｌｏｏｐ
【１２４９】
ｍｅｍｏｒｙ
メモリ・プールのデータ格納をマネージする。
【１２５０】
ｍｅｍｏｒｙ        キーワード
ｃｒｅａｔｅ      新しいメモリ・ブロックを割り当てる。
ｒｅａｄ          メモリ・ブロックから変数にデータを読み込む。
ｗｒｉｔｅ        変数からメモリ・ブロックにデータを書き込む。
ｅｘｃｈａｎｇｅ  メモリ・ブロックと変数の間でデータを交換す
る。
ｍｏｖｅ          メモリ・ブロック間でデータを移動する。
ｄｅｌｅｔｅ      指定した名前のメモリ・ブロックを削除する。
ｒｅｓｅｔ        すべてのメモリ・ブロックを削除する。
ｒｅｎａｍｅ      メモリ・ブロックの名前を変更する。
ｒｅｓｉｚｅ      メモリ・ブロックのサイズを変更する。
ｉｎｆｏ          システム変数にブロック情報を返す。
ｔｏｔａｌ        メモリ・プールの合計サイズを変更する。
【１２５１】
説明
メモリ・プールへのアクセスを提供する。プール内のメモリは、指定した名前のブロックごとに割り当てが行われる。変数（バッファ）内のデータは、指定した名前のメモリ・プールのブロックに書き込み、あるいはそこから読み出すことができる。システムは、ブロックの作成、削除およびサイズ変更があると、自動的にメモリ・プールをコントロールする。メイン・メモリ・プールは、６４０キロバイト未満の未使用のＤＯＳメモリからなる。エクスパンデッド・メモリ（ＥＭＳ）、エクステンデッド・メモリ（ＸＭＳ）、およびディスク・メモリ等の２次（仮想）メモリは、メイン・メモリ・プールの拡張に使用される。
【１２５２】
ほとんどの「ｍｅｍｏｒｙ」コマンド呼び出しでは、続いて「ｚｒｅｔｕｒｎ」のチェックが行われ実行の成否が検証される。
【１２５３】
「ｉｎｉｔｉａｌ」コマンドは、すべてのメモリ・ブロックを削除する。実行エラーもまた、すべてのブロックを削除し、スタートアップ時におけるサイズにメモリ・プールのサイズを戻す。
【１２５４】
メモリ・プールはコマンド「ｍｅｍｏｒｙ」「ｉｍａｇｅ」「ｗｉｎｄｏｗ」「ｓｔａｔｕｓ」「ａｒｅａ」「ｆｌｏｗ」「ｆｏｎｔ」および「ｐｅｒｍ」によって使用される。メモリ・ブロックは、生成時に特定のコマンドに属するものとしてタグが付けられ、メモリ・プールを使用する別のコマンドからアクセスすることはできない。したがって異なるコマンドで同じ名前を使用しても衝突することがない。
【１２５５】
ｍｅｍｏｒｙ  ｃｒｅａｔｅ；  ’名前’，ｓｉｚｅ  ［；  ｆｉｘｅｄ  ｜  ｒｏｕｔｅｒ  ｜  ｔｅｍｐｏｒａｒｙ］
指定サイズのゼロで満たされたメモリ・プールを作成し、指定した名前を付ける。メモリ・プール内にブロックが割り当てられるとき、そのサイズは１６バイトの倍数に切り上げられる。各メモリ・ブロックは、切り上げられたこの長さのほかに、追加の１６バイトをプールから使用する。
【１２５６】
オプションの修飾子「ｆｉｘｅｄ」は、このブロックをメモリ内の固定位置に拘束させる。そのアドレスは、システム変数「ｚｍｓｔａｒｔ」から知ることができる。固定ブロックは、メモリ・プールのオペレーションを低下させることから、絶対に必要な場合を除いて避けるべきである。固定ブロックの使用例としては、外部プログラムを使用する通信バッファが挙げられる。
【１２５７】
通常、メモリ・ブロックは、オプションのキーワード「ｒｏｕｔｅｒ」が示されていなければ、「ｉｎｉｔｉａｌ」または「ｍｅｍｏｒｙ  ｒｅｓｅｔ」によって削除される。「ｒｏｕｔｅｒ」修飾されたメモリ・ブロックは、明示的な「ｍｅｍｏｒｙ  ｄｅｌｅｔｅ；  ’名前’」または「ｍｅｍｏｒｙ  ｒｅｓｅｔ  ；  ｒｏｕｔｅｒ」ステートメントによってのみ削除することができる。「ｒｏｕｔｅｒ」修飾されたメモリ・ブロックは、任意のドメインからアクセスされるが、それを作成したドメインを削除しても削除されない。
【１２５８】
「ｔｅｍｐｏｒａｒｙ」修飾されたメモリ・ブロックは、システムが追加のメモリ・プール・スペースを必要とするとき、自動的に削除される。データを保持しておき、必要に応じて再生できるようにすると役に立つ。
【１２５９】
修飾子は相互に排他的であり、「ｍｅｍｏｒｙ  ｃｒｅａｔｅ」ステートメント内において１つだけ使用できる。
【１２６０】
例１
「ｔｅｍｐ」という名前の１０００バイトのメモリ・ブロックをメモリ・プール内に作成する。メモリ不足等のエラーが発生すると、ユニット「ｅｒｒｏｒ」にジャンプする。
ｍｅｍｏｒｙ    ｃｒｅａｔｅ；  ’ｔｅｍｐ’，１０００
ｊｕｍｐ      ｚｒｅｔｕｒｎ；；ｅｒｒｏｒ
【１２６１】
例２
８バイトの変数「ｎａｍｅ」に格納されている名前を用いて、２００バイトの「ｆｉｘｅｄ」メモリ・ブロックを作成する。
ｍｅｍｏｒｙ    ｃｒｅａｔｅ；  ｎａｍｅ，２００；  ｆｉｘｅｄ
ｊｕｍｐ      ｚｒｅｔｕｒｎ；；ｅｒｒｏｒ
【１２６２】
ｍｅｍｏｒｙ  ｗｒｉｔｅ；  ’名前’，  ｏｆｆｓｅｔ；  ｂｕｆｆｅｒ；  ｌｅｎｇｔｈ
変数バッファから指定長さ分のデータを、指定した名前を持つメモリ・ブロックに書き込み、書き始めを「ｏｆｆｓｅｔ」だけオフセットする。メモリ・ブロック内のオフセットはすべて０から始まる。メモリ・ブロックの先頭を参照する場合は、オフセットを０にする。
【１２６３】
例
変数「ｓｃｏｒｅ」から８バイト分のデータをメモリ・ブロック「ｒｅｓｕｌｔｓ」に書き込み、書き始めをブロック「ｒｅｓｕｌｔｓ」の先頭（オフセット０）から３２バイトずらす。異常が発生したときは「ｅｒｒｏｒ」ルーチンにジャンプする。
ｍｅｍｏｒｙ    ｗｒｉｔｅ；  ’ｒｅｓｕｌｔｓ’，３２；  ｓｃｏｒｅ；  ８
ｊｕｍｐ      ｚｒｅｔｕｒｎ；；ｅｒｒｏｒ
【１２６４】
ｍｅｍｏｒｙ  ｒｅａｄ；  ’名前’，  ｏｆｆｓｅｔ；  ｂｕｆｆｅｒ；  ｌｅｎｇｔｈ
指定した名前を持つメモリ・ブロックの「ｏｆｆｓｅｔ」から始まる指定した長さ分のデータを読み出し、変数バッファに格納する。
【１２６５】
例１
メモリ・ブロック「ｉｎｆｏ」の先頭（オフセット０）から２５６バイト分のデータをバッファ「ｉｎｆｏｂｕｆ」に読み出す。異常が発生したときは「ｅｒｒｏｒ」ルーチンににジャンプする。
ｍｅｍｏｒｙ  ｒｅａｄ；’ｉｎｆｏ’，Ｏ；  ｉｎｆｏｂｕｆ；  ２５６
ｊｕｍｐ      ｚｒｅｔｕｒｎ；；ｅｒｒｏｒ
【１２６６】
例２
すべてのグローバル変数をライブラリ・サブルーチンの呼び出し前にセーブし、その後復元する。まず「ｓａｖｅＶａｒｓ」という名前でメモリ・ブロックを作成する。グローバル変数はこのメモリ・プール・ブロックに退避する。その後、ライブラリ・サブルーチンを呼び出すが、そこではグローバル変数の内容が必要に応じて変更されることがある。最後に、グローバル変数を復元する。
ｄｅｆｉｎｅ    ｇｌｏｂａｌ
ｇｌｏｂａｌｓ＝２９６９６    ＄＄  デフォルトのグローバル・ス
ペースを仮定（２９キロバイト）
ｖａｒＢｌｏｃｋ，ｇｌｏｂａｌｓ，ｂｌｏｃｋ
ｄｅｆｉｎｅ    ｅｎｄ
＊
ｍｅｍｏｒｙ  ｃｒｅａｔｅ；  ’ｓａｖｅｖａｒｓ’，ｇｌｏｂａｌｓ  ＄＄「ｇｌｏｂａｌｓ」のブロックを作成
ｊｕｍｐ      ｚｒｅｔｕｒｎ；  ；  ｅｒｒｏｒ
ｍｅｍｏｒｙ  ｗｒｉｔｅ；  ’ｓａｖｅｖａｒｓ’，Ｏ；  ｖａｒＢｌｏｃｋ；  ｇｌｏｂａｌｓ  ＄＄「ｇｌｏｂａｌｓ」をセーブ
ｊｕｍｐ      ｚｒｅｔｕｒｎ；；ｅｒｒｏｒ
．．．
ｚｅｒｏ      ｖａｒＢｌｏｃｋ，ｇｌｏｂａｌｓ    ＄＄  全グローバルの「ｚｅｒｏ」も考えられる
ｌｉｂｒａｒｙ  ｒｏｕｔｉｎｅｓ，ｇｒａｐｈ      ＄＄  全グローバル変数を使用可能
．．．
ｍｅｍｏｒｙ  ｒｅａｄ；  ’ｓａｖｅｖａｒｓ’，Ｏ；  ｖａｒＢｌｏｃｋ；  ｇｌｏｂａｌｓ    ＄＄  グローバルを復元
ｊｕｍｐ      ｚｒｅｔｕｒｎ；；ｅｒｒｏｒ
【１２６７】
ｍｅｍｏｒｙ  ｅｘｃｈａｎｇｅ；  ’名前’，  ｏｆｆｓｅｔ；  ｂｕｆｆｅｒ；  ｌｅｎｇｔｈ
指定した名前を持つメモリ・ブロックの「ｏｆｆｓｅｔ」から始まる指定した長さ分のデータと変数バッファ内のデータを交換する。
【１２６８】
例
ｍｅｍｏｒｙ    ｅｘｃｈａｎｇｅ；  ｂｌｏｃｋ，Ｏ；  ｂｕｆ（ｉ）；  １２
「ｂｌｏｃｋ」という名前のメモリ・ブロックの先頭から１２バイト分のデータを、「ｂｕｆ（ｉ）」で始まる配列バッファのデータと交換する。
【１２６９】
ｍｅｍｏｒｙ  ｍｏｖｅ；  ’移動元の名前’，  ｏｆｆｓｅｔ；  ’移動先の名前’，  ｏｆｆｓｅｔ；  ｌｅｎｇｔｈ
メモリ・ブロック間でデータを移動する。
【１２７０】
例
ｍｅｍｏｒｙ    ｍｏｖｅ；  ’ｄａｔａｂｕｆ’，Ｏ；  ’ｂａｃｋｕｐ’，３；  ２５６
メモリ・ブロック「ｄａｔａｂｕｆ」の先頭から２５６バイト分のデータをメモリ・ブロック「ｂａｃｋｕｐ」のオフセット３から始まる領域に移動する。
【１２７１】
ｍｅｍｏｒｙ  ｄｅｌｅｔｅ；  ’名前’
指定した名前のブロックをメモリ・プールから削除する。
【１２７２】
ｍｅｍｏｒｙ  ｒｅｓｅｔ  ［；ｒｏｕｔｅｒ］
「ｍｅｍｏｒｙ  ｒｅｓｅｔ」は、「ｒｏｕｔｅｒ」修飾子付きで作成されたメモリ・ブロックを除くすべてのメモリ・ブロックを削除する。オプションの修飾子「ｒｏｕｔｅｒ」を使用すれば、「ｒｏｕｔｅｒ」修飾子付きで作成されたメモリ・ブロックも含めたすべてのメモリ・ブロックが削除される。
【１２７３】
ｍｅｍｏｒｙ  ｒｅｎａｍｅ；  ’名前’，’新しい名前’
メモリ・ブロックの名前を変更する。
【１２７４】
ｍｅｍｏｒｙ  ｒｅｓｉｚｅ；  ’名前’，ｓｉｚｅ
指定した名前のメモリ・ブロックのサイズを変更する。このメモリ・ブロックに、「ｆｉｘｅｄ」ブロックを指定することはできない。新しいサイズが大きくなる場合は、その分の末尾のバイトがゼロで埋められる。新しいサイズが小さくなる場合は、不足分のバイトが末尾から取り除かれる。いずれの場合においても、残されたデータは変更されない。
【１２７５】
ｍｅｍｏｒｙ  ｉｎｆｏ；  ’名前’
指定した名前のブロックのサイズを、バイトを単位としてシステム変数「ｚｍｌｅｎｇｔｈ」に返す（ブロックが存在していないときは０）。指定したブロックが「ｆｉｘｅｄ」タイプのときは、そのブロックのメモリ・プール内の絶対アドレスがシステム変数「ｚｍｓｔａｒｔ」にセットされる。このコマンドを使用して、特定の名前のメモリ・ブロックが存在するか否かをチェックすることができる。
【１２７６】
例
「ｚｒｅｔｕｒｎ」のチェックを使用して、８バイトの変数「ｔｅｓｔ」に格納された名前のメモリ・ブロックが存在することを検証する。メモリ・プール内にあれば、その長さおよびアドレス（「ｆｉｘｅｄ」以外は０）が表示される。
ｍｅｍｏｒｙ  ｉｎｆｏ；  ｔｅｓｔ
ｉｆ          ｚｒｅｔｕｒｎ  ＄＄  成否をテスト（成功＝−１）
．            ｗｒｉｔｅ      ｌｅｎｇｔｈ＝  ＜＜ｓ，ｚｍｌｅｎｇｔｈ＞＞  ａｄｄｒｅｓｓ＝  ＜＜ｓ，ｚｍｓｔａｒｔ＞＞
（この「ｗｒｉｔｅ」ステートメントの意味：「長さ＝〜、アドレス＝〜」）
ｅｌｓｅｉｆ  ｚｒｅｔｕｒｎ＝１０
．          ｗｒｉｔｅ  Ｎａｍｅ  ｄｏｅｓ  ｎｏｔ  ｅｘｉｓｔ
（この「ｗｒｉｔｅ」ステートメントの意味：「この名前は存在しません」）
ｅｌｓｅ
．            ｗｒｉｔｅ  Ｏｔｈｅｒ  Ｅｒｒｏｒ
（この「ｗｒｉｔｅ」ステートメントの意味：「その他のエラーが発生しました」）
ｅｎｄｉｆ
【１２７７】
ｍｅｍｏｒｙ  ｔｏｔａｌ；  ｓｉｚｅ
メモリ・プールのサイズを変更する。サイズを増加した場合には、ＤＯＳに追加メモリが要求され、減少した場合には、使用しないメモリがＤＯＳに返される。デフォルトでは、すべての未使用のＤＯＳメモリ（６４０Ｋ未満）がメモリ・プールに割り当てられる。したがって、ＴｅｎＣＯＲＥ起動時にコマンド行のオプションにより特別に制限していない限り、メモリ・プールのサイズを増加することは不可能である。また、ＴｅｎＣＯＲＥ起動後にメモリ常駐プログラムをロードした場合には、メモリ・プールのサイズを増加できなくなる。
【１２７８】
２次メモリ・プール
メモリ・プール内のスペースが足りなくなるとプール内の現存するブロックが自動的に２次メモリ・プールに移動され、新しいブロックのためのスペースが空けられる。２次メモリ・プールは、エクスパンデッド（ＥＭＳ）メモリ、エクステンデッド（ＸＭＳ）メモリ、およびディスクのいずれかまたはすべてとすることができる。メモリ・タイプが複数存在するときは、最初にエクスパンデッド（ＥＭＳ）メモリが、次にエクステンデッド（ＸＭＳ）メモリが、最後にディスクが使用される。
【１２７９】
ＴｅｎＣＯＲＥ起動時に使用可能なＥＭＳ、ＸＭＳおよびディスク・スペースが自動的に２次メモリ・プールに割り当てられる。変更を希望する場合には、システムのスタートアップ時にそれぞれの量をセットすることができる。
【１２８０】
２次メモリ・プールが使用できる場合でも、ブロックの最大サイズはメイン・メモリ・プールのサイズによって制限されるが、現存するブロックを２次メモリ・プールに移動できることから、より多くのメモリ・プール・ブロックを作成することができる。
【１２８１】
「ｆｉｘｅｄ」メモリ・プール・ブロックは２次メモリに移動できないことから、それを作成すると、その後のメモリ・プール・ブロックの最大サイズが制限される。一般に「ｆｉｘｅｄ」メモリ・ブロックの使用は推奨されていない。
【１２８２】
システム変数
ｚｒｅｔｕｒｎ
「ｍｅｍｏｒｙ」コマンドによりセットされる「ｚｒｅｔｕｒｎ」は次のように解釈される。
１      オペレーションは成功した。
３      変数の参照が範囲外である。
６      名前が重複している。
１０      名前が存在しない。
１１      無効なタイプ（「ｆｉｘｅｄ」のサイズ変更）
１６      無効な名前。
１８      プール内に充分なメモリがない（キーワード「ｃｒｅａ
ｔｅ」「ｒｅｓｉｚｅ」）またはプールに追加できる充分
なＤＯＳメモリがない（キーワード「ｔｏｔａｌ」）。
【１２８３】
その他
次に示すシステム変数は、メモリ・ブロック名を参照するすべての「ｍｅｍｏｒｙ」コマンドの実行後にセットされる（「ｄｅｌｅｔｅ」を除く）。
ｚｍｌｅｎｇｔｈ    最後に参照したメモリ・ブロックのサイズ；バ
イトを単位とする。
ｚｍｓｔａｒｔ      最後に参照したメモリ・ブロックが「ｆｉｘｅ
ｄ」のとき、その絶対アドレス。それ以外の場
合は１。
【１２８４】
次に示すシステム変数は、ＴｅｎＣＯＲＥのメモリ・プールに関する情報を提供する。
ｚｒｍｅｍ        「ｆｉｘｅｄ」を除く新しいメモリ・ブロックの
最大可能サイズ。
ｚｆｍｅｍ        新しい「ｆｉｘｅｄ」メモリ・ブロックの最大可
能サイズ。
ｚｍｅｍ          メモリ・プールのサイズ。
ｚｘｍｅｍ        メモリ・プールに（「ｍｅｍｏｒｙ  ｔｏｔａｌ」
を用いて）追加可能な余剰ＤＯＳメモリの量。
【１２８５】
ｍｏｄｅ
グラフィックス、テキストおよびイメージをスクリーン上にプロットする方法をコントロールする。
【１２８６】
ｍｏｄｅ      ｍｏｄｅ
ｍｏｄｅ      セレクタ；  ｍｏｄｅ；  ｍｏｄｅ；．．．
ｗｒｉｔｅ    ＜＜ｍｏｄｅ  ｜  ｍ，  ｍｏｄｅ＞＞
【１２８７】
「ｍｏｄｅ」のプロット・キーワードを次に示す。
ｗｒｉｔｅ      フォアグラウンド色を使用する。
ｅｒａｓｅ      バックグラウンド色を使用する。
ｒｅｗｒｉｔｅ  フォアグラウンド色を使用し、文字バックグラウン
ドでイレースする。
ｉｎｖｅｒｓｅ  バックグラウンド（イレース）色を使用し、文字バ
ックグラウンドでプロットする。
ｎｏｐｌｏｔ    表示を変更せずにプロットをシミュレートする。
ｘｏｒ          フォアグラウンド色を使用し、現存する表示とのエ
クスクルーシブオア演算を行う。
ａｄｄ          フォアグラウンド色を使用し、現存する表示とのオ
ア演算を行う。
ｓｕｂ          反転したフォアグラウンド色を使用し、現存する表
示とのアンド演算を行う。
【１２８８】
説明
グラフィックス、文字およびイメージをスクリーン上にプロットする方法をコントロールする。これら３つのタイプのオブジェクトは、それぞれ「ｍｏｄｅ」および「ｃｏｌｏｒ」コマンドと相互作用する。「ｄｒａｗ」および「ｃｉｒｃｌｅ」等のグラフィック・オブジェクトは、そのオブジェクトを定義するドットから構成される。これらには、スクリーンへのプロットにおいてフォアグラウンド色が使用される。文字は、文字を定義するフォアグラウンドのドットおよび文字セルの残りの部分として残されるバックグラウンドのドットからなる；フォアグラウンドとバックグラウンドのドットは、フォアグラウンド色およびバックグラウンド色を使用する各種のモードにおいて異なるタスクを実行する。イメージは、フォアグラウンド色またはバックグラウンド色以外の色をすでに持ったドットの矩形エリアからなる。しかしながら、イメージ内のブラック（パレット・スロット０）ドットは、すでにある表示に対して透明な部分として使用することができる。
【１２８９】
テキスト・オンリーの表示スクリーンに関しては、個別のドットにアドレスすることができない。文字全体のポジションだけが変更可能であり、多くのモードの機能がこれによって制限される。テキスト・オンリー・モードのオペレーションについては、他と区別して最後に説明する。
【１２９０】
ユニットに対する「ｊｕｍｐ」分岐時にはデフォルト・モードにモードがリセットされる。モードに最初のからセットされているデフォルトは「ｗｒｉｔｅ」である。これは、「ｓａｖｅ」ステートメントを使用して変更することができる。
【１２９１】
「ｗｒｉｔｅ」ステートメント内に埋め込まれた「ｍｏｄｅ」コマンドを通じて行われるモード変更は、その「ｗｒｉｔｅ」ステートメントだけに有効である。「ｗｒｉｔｅ」の実行終了時には、「ｗｒｉｔｅ」の実行開始前のモードが復元される。
【１２９２】
ｍｏｄｅ  ｗｒｉｔｅ
グラフィックスおよび文字のドットをフォアグラウンド色でプロットする。イメージは、それにデザインされた色でプロットされる。文字のバックグラウンドおよびイメージにおけるスロット０の色は、すでにあるすべての表示に対して透明である。
【１２９３】
ｍｏｄｅ  ｅｒａｓｅ
グラフィックスおよび文字のドットをバックグラウンド（イレース）色でイレースする。イメージは、「ｍｏｄｅ  ｓｕｂ」としてイレースされる。
【１２９４】
ｍｏｄｅ  ｒｅｗｒｉｔｅ
グラフィックスおよび文字のドットをフォアグラウンド色でプロットする。文字のバックグラウンドは、バックグラウンド（イレース）色でイレースされる。イメージはスロット０の色も含めて、デザインされた色を用いて完全にプロットされる。
【１２９５】
例
「ｃｏｕｎｔ−ｄｏｗｎ」は、実行されると１０から０までカウントダウンし、その後「ＢＡＮＧ！」を表示する。
ｍｏｄｅ      ｒｅｗｒｉｔｅ
ｌｏｏｐ      ｃｏｕｎｔ  ←  １０，０，−１
．        ａｒ  １０：２５
．        ｓｈｏｗｔ        ｃｏｕｎｔ，２
．        ｐａｕｓｅ        １
ｅｎｄｌｏｏｐ
ａｔ        １０：２５
ｗｒｉｔｅ  ＢＡＮＧ！
この「ｗｒｉｔｅ」ステートメントの意味：「バーン！」）
【１２９６】
ｍｏｄｅ  ｉｎｖｅｒｓｅ
グラフィックスおよび文字のドットをバックグラウンド（イレース）色でプロットする。文字のバックグラウンドは、フォアグラウンド色でプロットされる。イメージの場合は、まずすべての色がビットワイズで補色に変換され、その後スロット０の色も含めて、完全にプロットされる。
【１２９７】
ｍｏｄｅ  ｎｏｐｌｏｔ
スクリーンを変更せずにプロットをシミュレートする。スクリーン・ロケーションおよび「ｍｏｄｅ」を除くすべてのプロットの属性は、実際にプロットが行われたかのように更新される。
【１２９８】
例
最初に、「ｍｏｄｅ  ｎｏｐｌｏｔ」を使用してテキスト行の長さ決定し、それを変数「ｌｅｎｇｔｈ」に格納する。これは、「ａｔ」を使用してスクリーンのｘポジションを０とし、そこから「ｍｏｄｅ  ｎｏｐｌｏｔ」でテキストをプロットした後、システム変数「ｚｘ」を参照してエンド・ポジションを求めることによって達成される。その後、スクリーンまたは表示ウィンドウの中心にセンタリングして、テキストを実際にプロットする。これは、最後の「ａｔ」ステートメントにおいて、表示幅の２分の１（ｚｘｍａｘ／２）のポジションからテキスト幅の２分の１（ｌｅｎｇｔｈ／２）だけ戻ったポジションを設定することによって可能になる。
【１２９９】
ｍｏｄｅ    ｎｏｐｌｏｔ      ＄＄  スクリーンへの影響なし
ａｔ        ０，１００        ＄＄  ｘ＝０から開始
ｗｒｉｔｅ  Ｈａｎｄｌｉｎｇ  Ｓｎａｋｅｓ    ＄＄  テキストのプロットをシミュレート
ｃａｌｃ    ｌｅｎｇｔｈ  ←  ｚｘ  ＄＄  システム変数「ｚｘ」はテキストの長さ
＊                            ＄＄  を表す
ｍｏｄｅ    ｗｒｉｔｅ        ＄＄  標準的なプロット・モ  ードをセット
ａｔ      ｚｘｍａｘ／２  −  ｌｅｎｔｈ／２，１００    ＄＄  センタリングのためのテキストの
＊                            ＄＄  開始位置をセットする
ｗｒｉｔｅ  Ｈａｎｄｌｉｎｇ  Ｓｎａｋｅｓ
（この「ｗｒｉｔｅ」ステートメントの意味：「蛇の取り扱い」）
【１３００】
ｍｏｄｅ  ｘｏｒ
エクスクルーシブオア演算によりグラフィックス、文字ドットおよびイメージとすでに存在している表示を組み合わせる。このモードにおいて同一のマテリアルをスクリーン上の同一のロケーションに２回プロットすると、表示がオリジナルの構成に戻る。
【１３０１】
例
「ＯＲＢＩＴ」という単語をスクリーンの中心から円を描くように移動させる。「ＯＲＢＩＴ」がバックグラウンドのグラフィックを通るときは、バックグラウンドに変更を加えずにそこを通過する。「ｒａｄ」は実数変数であり「ｓｉｎ」「ｃｏｓ」の計算結果を保持する。
ｓｃｒｅｅｎ    ｖｇａ
ｃａｌｃ        ｒａｄ  ←  ０
ｍｏｄｅ        ｘｏｒ          ＄＄  エクスクルーシブオア・プロットに切り替え
ｌｏｏｐ
．              ａｔ        ｓｉｎ（ｒａｄ）＊１００  ＋  ３２０，  ｃｏｓ（ｒａｄ）＊１００  ＋  ２４０
．              ｗｒｉｔｅ      ＯＲＢＩＴ
．              ｐａｕｓｅ      ．０１
．              ａｔ        ｓｉｎ（ｒａｄ）＊１００  ＋  ３２０，  ｃｏｓ（ｒａｄ）＊１００  ＋２４０
．              ｗｒｉｔｅ      ＯＲＢＩＴ
．              ｃａｌｃ      ｒａｄ  ←  ｒａｄ  ＋  ．０５
ｅｎｄｌｏｏｐ
【１３０２】
ｍｏｄｅ  ａｄｄ
オア演算によりグラフィックス、文字ドットおよびイメージとすでに存在している表示を組み合わせる。
【１３０３】
ｍｏｄｅ  ｓｕｂ
グラフィックス、文字ドットおよびイメージの色を反転し、アンド演算によりすでに存在している表示を組み合わせる。
【１３０４】
テキスト・オンリーのハードウェア・スクリーン
「ｍｏｄｅ  ｗｒｉｔｅ」「ｍｏｄｅ  ｅｒａｓｅ」「ｍｏｄｅ  ｒｅｗｒｉｔｅ」および「ｍｏｄｅ  ｉｎｖｅｒｓｅ」については、文字のフォアグラウンドおよびバックグラウンドの色に適当な期待どおりの変化がもたらされる。論理モードの「ｘｏｒ」「ａｄｄ」および「ｓｕｂ」においては、フォアグラウンドの文字色がすでに説明したように変化する。しかしながら「ｘｏｒ」プロットを使用すると、空白文字（スペース）が存在するスクリーン上の部位では文字がプロットされるが、それ以外の部位ではスクリーンの文字がイレースされる。
【１３０５】
システム変数
ｚｍｏｄｅ
０      ｉｎｖｅｒｓｅ
１      ｒｅｗｒｉｔｅ
２      ｅｒａｓｅ
３      ｗｒｉｔｅ
４      ｎｏｐｌｏｔ
５      ｘｏｒ
６      ａｄｄ
７      ｓｕｂ
【１３０６】
ｍｏｖｅ
リテラルまたは変数から指定バイト数のデータを変数に移動する。
【１３０７】
ｍｏｖｅ      ｆｒｏｍ，  ｔｏ，  ｌｅｎｇｔｈ
【１３０８】
説明
指定した数のバイトを１つのロケーションから別のロケーションに移動する。「ｆｒｏｍ」および「ｔｏ」がともに変数の場合はオーバーラップが可能であり、また移動されるデータの長さがいずれか一方の定義長を超えることもできる。「ｍｏｖｅ」コマンドは極めて高速である。
【１３０９】
例
「ｒｅｃ（２）」から「ｒｅｃ（５）」までを１レコードずつ移動する。
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｒｅｃｌｅｎ  ＝２５６        ＄＄  ＴｅｎＣＯＲＥのデータ・レコードは常に２５６バイト
ｒｅｃ（６），ｒｅｃｌｅｎ      ＄＄  ６レコードの配列
ｄｅｆｉｎｅ    ｅｎｄ
＊
ｍｏｖｅ      ｒｅｃ（２），  ｒｅｃ（３），  ４＊ｒｅｃｌｅｎ    ＄＄  レコードを先に進める
【１３１０】
ｎｅｘｔｋｅｙ
システム・キー入力バッファおよび変数を進める。
【１３１１】
ｎｅｘｔｋｅｙ      ［キーワード］
空欄        キー・バッファを進めて「ｚｉｎｐｕｔ」を更新する。
ｔｅｓｔ    キー・バッファを進めずに「ｚｉｎｐｕｔ」を更新す
る。
ｃｌｅａｒ  キー入力バッファをクリアする。
ｆｌａｇｓ  「ｚｉｎｐｕｔｆ」および「ｚｋｅｙｓｅｔ」を更新
する。
ｐｏｉｎｔｅｒ  「ｚｉｎｐｕｔｘ」「ｚｉｎｐｕｔｙ」および「ｚ
ｉｎｐｕｔｆ」を更新し、「ｚｉｎｐｕｔ」を「％
ｐｔｒｉｎｆｏ」にセットする。
【１３１２】
説明
「ｎｅｘｔｋｅｙ」は、システム・キー入力バッファからペンディングになっているキーを読み出す。入力は、通常メイン・ユニットの終了、「ｐａｕｓｅ」もしくは「ａｒｒｏｗ」に出会うまで、または「ｎｏ」の判定があるまでバッファされる。「ｎｅｘｔｋｅｙ」は、これらを待つことなく入力バッファを直ちにチェックする。ブランク（空欄）タグ形式は、バッファ内にある次のキーを「ｚｉｎｐｕｔ」にコピーし、バッファからそのキーを削除する。
【１３１３】
キー・バッファが空であれば、システム変数「ｚｉｎｐｕｔ」がゼロにセットされる。
【１３１４】
「ｎｅｘｔｋｅｙ」を実行することによって、現在の「ｆｌｏｗ」セッティングがアクティブになることはない。
【１３１５】
ｎｅｘｔｋｅｙ
入力バッファ内にある次のキーを用いて「ｚｉｎｐｕｔ」「ｚｉｎｐｕｔｆ」および「ｚｋｅｙｓｅｔ」を更新し、バッファからそのキーを削除する。ポインタがイネーブルであれば、このとき「ｚｉｎｐｕｔｘ」および「ｚｉｎｐｕｔｙ」も更新される。
【１３１６】
ｎｅｘｔｋｅｙ  ｔｅｓｔ
ブランク・タグ形式と同様に「ｚｉｎｐｕｔ」「ｚｉｎｐｕｔｆ」および「ｚｋｅｙｓｅｔ」を更新するが、ペンディングになっているキーは削除せずに残す。
【１３１７】
ｎｅｘｔｋｅｙ  ｃｌｅａｒ
入力バッファからペンディングになっているすべてのキーをクリアする。「ｚｉｎｐｕｔ」はクリアしない。
【１３１８】
ｎｅｘｔｋｅｙ  ｆｌａｇｓ
「ｚｉｎｐｕｔｆ」および「ｚｋｅｙｓｅｔ」の最左端バイトを更新し、「ｚｋｅｙｓｅｔ」の最右端バイトをゼロにセットする。「ｚｉｎｐｕｔｘ」および「ｚｉｎｐｕｔｙ」は変更されない。
【１３１９】
ｎｅｘｔｋｅｙ  ｐｏｉｎｔｅｒ
「ｚｉｎｐｕｔｘ」「ｚｉｎｐｕｔｙ」および「ｚｉｎｐｕｔｆ」を更新し、「ｚｉｎｐｕｔ」を「％ｐｔｒｉｎｆｏ」にセットする。
【１３２０】
例
質問「Ｗｈａｔ  ｇｏｅｓ  ｍｅｏｗ？」（ニャオニャオはだれ？）が電光掲示板形式で表示の上端に示される。ユーザがキーボードの文字を押すと、その文字が次の「ａｒｒｏｗ」に現れる。変数「ｘ」は２バイトの整数とする。
ｍａｒｇｉｎ  ｗｒａｐ  ＄＄  スクリーン周囲で折り返し
ｍｏｄｅ      ｒｅｗｒｉｔｅ  ＄＄  後ろ側のテキストを置き換える
ｃａｌｃ      ｘ  ←  ｚｘｍａｘ  ／  ２  ＄＄  スクリーン中央から開始
ｎｅｘｔｋｅｙ  ｃｌｅａｒ  ＄＄  ペンディングになっているキーをすべてクリア
ｎｅｘｔｋｅｙ              ＄＄  「ｚｉｎｐｕｔ」もクリアする
＊
ｌｏｏｐ      ｚｉｎｐｕｔ  ＝０  ＄＄  入力キーがあるまでループ
．      ａｔ  ｘ，ｚｙｍａｘ−２０  ＄＄  スクリーンの上端近く
．      ｗｒｉｔｅ  Ｗｈａｔ  ｇｏｅｓ  ｍｅｏｗ？  ＄＄  ループ内でテキストが左方に移動
この「ｗｒｉｔｅ」ステートメントの意味：（「ニャオニャオはだれ？」）
．      ｃａｌｃ  ｘ  ←  ｘ  −  １  ＄＄  開始ｘを左に１ピクセル移動
．      ｃａｌｃｓ  ｘ  ＜  ０；  ｘ  ←  ｚｍａｘ；；  ＄＄  スクリーンのラップをチェック
．      ｎｅｘｔｋｅｙ  ｔｅｓｔ  ＄＄  「ｚｉｎｐｕｔ」を更新
ｅｎｄｌｏｏｐ
＊
ａｒｒｏｗ      １０，ｚｙｍａｘ−４０
ａｎｓｗｅｒ    ｃａｔ
ｅｎｄａｒｒｏｗ
【１３２１】
システム変数
ｚｉｎｐｕｔ      ０：入力なし
１〜２５５：最後にキーが押された文字の値
＞２５５：文字以外のキー
ｚｉｎｐｕｔｆ    「ｚｉｎｐｕｔ」内の入力に関するフラグ
ｚｋｅｙｓｅｔ    「ｚｉｎｐｕｔ」内の入力に関するフラグおよび
スキャン・コード
ｚｉｎｐｕｔｘ    「ｚｉｎｐｕｔ」内の入力に関するポインタ・デ
バイスのＸ座標
ｚｉｎｐｕｔｙ    「ｚｉｎｐｕｔ」内の入力に関するポインタ・デ
バイスのＹ座標
【１３２２】
ｎｏｃｈｅｃｋ
サブルーチン呼び出しにおける引数の数のチェックをキャンセルする。
ｎｏｃｈｅｃｋ      ｒｅｔｕｒｎ  ｜  ｒｅｃｅｉｖｅ
ｎｏｃｈｅｃｋ      ｒｅｔｕｒｎ  ，  ｒｅｃｅｉｖｅ
ｒｅｔｕｒｎ        「ｒｅｔｕｒｎ」コマンドに関して引数の数の
チェックをオフにする。
ｒｅｃｅｉｖｅ      「ｒｅｃｅｉｖｅ」コマンドに関して引数の数
のチェックをオフにする。
【１３２３】
説明
「ｒｅｔｕｒｎ」および／または「ｒｅｃｅｉｖｅ」コマンドの実行時に、引き渡される引数の数が正しいことを保証するために行われる自動チェックをディセーブルする。
【１３２４】
「ｎｏｃｈｅｃｋ」を使用すると、サブルーチンを呼び出したコマンド（「ｄｏ」「ｌｉｂｒａｒｙ」または「ｊｕｍｐ」）によって指定される引数の数と無関係に、「ｒｅｔｕｒｎ」または「ｒｅｃｅｉｖｅ」内に任意数のタグを含ませることができる。
【１３２５】
「ｎｏｃｈｅｃｋ」は、その影響を受ける「ｒｅｔｕｒｎ」または「ｒｅｃｅｉｖｅ」コマンドと同じユニット（つまり呼び出されたユニット）に存在しなければならない。
【１３２６】
ｏｐｅｒａｔｅ
異なる実行モードに切り替える。
【１３２７】
ｏｐｅｒａｔｅ      ｍｏｄｅ
ｏｐｅｒａｔｅ      セレクタ；  ｍｏｄｅ；  ｍｏｄｅ；  ．．．
【１３２８】
キーワード「ｍｏｄｅ」を次に示す。
ｓｏｕｒｃｅ        これ以降のユニットを「．ＳＲＣ」ファイルか
ら実行する。
ｂｉｎａｒｙ        これ以降のユニットを「．ＢＩＮ」ファイルか
ら実行する。
ｔｐｒ              これ以降のユニットを「．ＴＰＲ」ファイルか
ら実行する。
【１３２９】
説明
システムがファイルを実行するためのオペレーション・モードを「ｓｏｕｒｃｅ」「ｂｉｎａｒｙ」または「ｔｐｒ」にセットする。システムによるユニットへのアクセスを要求するコマンドが実行されるときは、このオペレーション・モードによって、「ｓｏｕｒｃｅ」（．ＳＲＣ）ファイル、「ｂｉｎａｒｙ」（．ＢＩＮ）ファイルまたは「ｔｐｒ」（．ＴＰＲ）ファイルのいずれからユニットを探し出すべきか決定される。デフォルトは、現在のユニットがロードされたファイルと同じタイプへのアクセスである。
【１３３０】
「ｏｐｅｒａｔｅ」コマンドは、別の「ｏｐｅｒａｔｅ」コマンド、「ｌｉｂｒａｒｙ」コマンド、「ｅｒｒｏｒ」分岐、または「ｏｐｅｒａｔｅ」タグ付きの「ｆｌｏｗ」が実行されるまで有効になる。
【１３３１】
「ｆｌｏｗ  ｄｏ」によってモードが変更された場合は、「ｄｏ」シーケンスの完了時に復元される。しかし「ｆｌｏｗ  ｊｕｍｐ」によってモードが変更された場合には復元されない。
【１３３２】
ステューデント・エクスキュータにおいて「ｏｐｅｒａｔｅ  ｓｏｕｒｃｅ」を実行すると「無効な引数の値」であることを表す実行エラー１１が生成される。
【１３３３】
「ｅｒｒｏｒ」は、コマンド実行時（分岐ポインタがロードされたとき）のオペレーション・モードをセーブする。「ｅｒｒｏｒ」分岐が行われると、オペレーション・モードが、ポインタのロード時に有効だったモードにリセットされる。
【１３３４】
「ｌｉｂｒａｒｙ」コマンドとの相互作用
「ｌｉｂｒａｒｙ」の実行は、一時的にオペレーション・モードをバイナリにセットする。バイナリ・ユニットから実行が正常に返れば、オリジナルのオペレーション・モードが復元される。
【１３３５】
しかしながら、次に示すようにすれば、オリジナルのオペレーション・モードへの復元を回避することができる。
●  ライブラリ・ユニットから新しいメイン・ユニットに入れば、「ｌｉｂｒａｒｙ」からの復帰が生じないため、バイナリ・オペレーションが継続される。
●  ライブラリ・ユニット内にある間に「ｏｐｅｒａｔｅ」を実行すると、呼び出したユニットに戻るとき、オペレーション・モードの復元が行われない。呼び出したユニット自体が「ｌｉｂｒａｒｙ」から呼び出された場合には、その呼び出したユニットに戻るとき、オペレーション・モードが復元される。
【１３３６】
ｏｒｉｇｉｎ
表示座標系の原点をセットする。
【１３３７】
ｏｒｉｇｉｎ    ［ロケーション］
【１３３８】
説明
座標系の原点をデフォルトのロケーション（０，０）から指定したロケーションに移動する。これ以降の表示コマンドは、指定した原点と相対的に配置される。
【１３３９】
新しいメイン・ユニットのそれぞれを開始するときは、原点が（０，０）にセットされる。これは、「ｏｒｉｇｉｎ」に続いて「ｓｔａｔｕｓ  ｓａｖｅ；  ｄｅｆａｕｌｔ」を実行することにより変更することができる。
【１３４０】
タグをブランクにしておけば原点が（０，０）にリセットされる。
【１３４１】
例
スクリーン上の３つの異なるエリアに、「ｘ」が内接するボックスを表示する。
【１３４２】
原点
ｏｒｉｇｉｎ  １２０，７０    ＄＄  最初のボックスおよび「ｘ」
のための原点をセット
ｄｏ          ｘｂｏｘ        ＄＄  再配置してプロット
ｏｒｉｇｉｎ  １６０，１００  ＄＄  ２番目のボックス
ｄｏ          ｘｂｏｘ
ｏｒｉｇｉｎ  ２００，１３０  ＄＄  ３番目のボックス
ｄｏ          ｘｂｏｘ
【１３４３】
「ｘｂｏｘ」
＊        このユニットは、「ｘ」が内接する４ピクセルの太さの
＊        ボックスを描く。通常の状態では、ボックスは表示の
＊        左下コーナーにプロットされる。
＊
ｂｏｘ    ０，０；２０，２０；４  ＄＄  ボックスの描画
ｄｒａｗ  ０，０；２０，２０；；０，２０；２０，０  ＄＄  「ｘ」の描画
【１３４４】
システム変数
ｚｏｒｉｇｉｎｘ    現在の原点の絶対Ｘ座標
ｚｏｒｉｇｉｎｙ    現在の原点の絶対Ｙ座標
【１３４５】
ｏｕｔｌｏｏｐ
ループ構造内の任意のポイントでループ構造を終了する。
【１３４６】
ｏｕｔｌｏｏｐ      ［条件］
【１３４７】
説明
ループ構造内の任意のポイントにループ構造の終了を提供する。タグがブランクのとき、または条件が真のとき、「ｏｕｔｌｏｏｐ」によって、このときのループ構造に関係する「ｅｎｄｌｏｏｐ」に続くコマンドに進む。条件が偽であれば、なにもアクションを生じずにループ構造内を進み、次のコマンドを実行する。
【１３４８】
インデントされた他の構造によって「ｏｕｔｌｏｏｐ」が囲まれている場合であっても、「ｏｕｔｌｏｏｐ」は、必ずそれが終了するループ構造と同じインデント・レベルに記述される。
【１３４９】
例
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｃｏｕｎｔｅｒ，  ２                  ＄＄  カウンタ
ｄｅｆｉｎｅ    ｅｎｄ
ｌｏｃａｌ
＊
ａｔ          ５：３
ｗｒｉｔｅ    Ｐｒｅｓｓ  Ｅｎｔｅｒ  ｔｏ  ｉｎｃｒｅｍｅｎｔ  ｔｈｅ  ｃｏｕｎｔｅｒ，  ｏｒ
Ｅｓｃ  ｔｏ  ｅｘｉｔ  ｔｈｅ  ｌｏｏｐ．
（この「ｗｒｉｔｅ」ステートメントの意味：「カウンタを進める場合には実行（ＥＮＴＥＲ）キー、ループを終了する場合にはキャンセル（ＥＳＣ）キーを押してください」）
ｃａｌｃ      ｃｏｕｎｔｅｒ  ←  １
ｌｏｏｐ
．          ａｔ        ８：３
．          ｅｒａｓｅ    ５０
．          ｗｒｉｔｅ    Ｔｈｅ  ｃｏｕｎｔｅｒ  ｖａｌｕｅ  ｉｓ  ＜＜ｓｈｏｗ，  ｃｏｕｎｔｅｒ＞＞．
（この「ｗｒｉｔｅ」ステートメントの意味：「カウンタの値は〜です」）
．          ｐａｕｓｅ    ｐａｓｓ＝  ％ｅｓｃａｐｅ，  ％ｅｎｔｅｒ
ｏｕｔｌｏｏｐ  ｚｉｎｐｕｔ  ＝  ％ｅｓｃａｐｅ    ＄＄  ＥＳＣキーが押されると終了する
．          ｃａｌｃ      ｃｏｕｎｔｅｒ  ←  ｃｏｕｎｔｅｒ  ＋  １
ｅｎｄｌｏｏｐ
＊
ａｔ        １０：３
ｗｒｉｔｅ  Ｙｏｕ  ｅｘｉｔｅｄ  ｔｈｅ  ｌｏｏｐ！
（この「ｗｒｉｔｅ」ステートメントの意味：「ループが中断されました！」）
【１３５０】
ｐａｃｋ，  ｐａｃｋｚ
ｐａｃｋｃ，  ｐａｃｋｚｃ
テキスト文字列をバッファに格納する。
【１３５１】
ｐａｃｋ      ｂｕｆｆｅｒ；  ［  ｌｅｎｇｔｈ  ］；  テキスト
ｐａｃｋｚ    ｂｕｆｆｅｒ；  ［  ｌｅｎｇｔｈ  ］；  テキスト
ｐａｃｋｃ    セレクタ；  ｂｕｆｆｅｒ；  ［  ｌｅｎｇｔｈ  ］；  テキスト；  テキスト；．．．
ｐａｃｋｚｃ  セレクタ；  ｂｕｆｆｅｒ；  ［  ｌｅｎｇｔｈ  ］；  テキスト；  テキスト；．．．
ｂｕｆｆｅｒ  テキスト文字列が格納される変数。
ｌｅｎｇｔｈ  バッファに格納する文字数が割り当てられるオプションの変数。
テキスト      バッファに格納するテキスト文字列。
セレクタ      「テキスト」の１つを選択するために使用される式。
【１３５２】
説明
テキスト文字列を指定されたバッファに格納し、「ｌｅｎｇｔｈ」変数が指定されていれる場合には、さらに実際に格納した文字数を返す。指定したバッファがテキスト文字列より長いとき、「ｐａｃｋ」形式では余ったバイトが変更されないが、「ｐａｃｋｚ」形式ではそれがゼロで埋められる。なお、このコマンドの「ｃ」（条件付きを表す英語「ｃｏｎｄｉｔｉｏｎａｌ」から）サフィクスは、「セレクタ」形式であることを表す。
【１３５３】
テキスト文字列には、「ｓｈｏｗ」「ｓｈｏｗｔ」および「ｓｈｏｗａ」といった「ｓｈｏｗ」タイプのコマンドを埋め込むことができる。テキストが１行を超えて延びる場合は、追加の行を継続する前に改行（コード１３）がバッファ内にパックされる。テキスト文字列が空の行にわたって継続するときは、複数の改行が含められる。なおテキスト文字列の長さが不要であれば、「ｌｅｎｇｔｈ」にヌル引数を使用する。
【１３５４】
「ｐａｃｋ」コマンドは、バウンド・チェックを行わない。パックされる文字によってバッファがオーバーランされ、続く変数が置き換えられ、あるいはそれらが定義外に及べば実行エラーが生じることもある。テキスト文字列の最大可能長を割り当てる必要がある。
【１３５５】
セレクタのデリミタ
「ｌｅｎｇｔｈ」引数に続くデリミタは、場合分けするテキスト文字列を区切るために「ｐａｃｋｃ」および「ｐａｃｋｚｃ」によって使用される。使用可能なデリミタを次に示す。
カンマ                    ，
セミコロン                ；
コロン                    ：
エンド・オブ・ライン      」
ユニバーサル・デリミタ    ｜
【１３５６】
連続する２つのデリミタはヌル・タグを示し、それに対応する「セレクタ」の値に対しては、バッファに何も格納されない。エンド・オブ・ライン以外のデリミタを使用した場合、単一の文字列を複数行にわたらせることが可能であり、その場合、エンド・オブ・ラインに到来するごとに改行がパックされる。
【１３５７】
ヌル・コード
埋め込み「ｓｈｏｗａ」コマンドのヌル文字（コード０）はすべてスキップされる。結果として得られる文字列にはヌル文字が現れない。ただし、ヌル文字を含む変数とともに埋め込み「ｓｈｏｗｖ」コマンドを使用すれば、パックされる文字列にヌル文字を強制的に含ませることができる。
【１３５８】
例
例１
３行のテキストをバッファ「ｌｉｎｅｓ」に格納する。それぞれのテキストは、改行コードによりバッファ内で区分される。パックする文字列の長さは「ｃｏｕｎｔ」にセットする。「ｓｈｏｗａ」ステートメントは、３行のテキスト文字列を表示する。
【１３５９】
ｐａｃｋ    ｌｉｎｅｓ；ｃｏｕｎｔ；Ｔｈｅ  ｆｉｒｓｔ  ｌｉｎｅ  ｏｆ  ｔｅｘｔ．
Ｔｈｅ  ｓｅｃｏｎｄ  ｌｉｎｅ  ｏｆ  ｔｅｘｔ．
Ｔｈｅ  ｌａｓｔ  ｌｉｎｅ  ｏｆ  ｔｅｘｔ．
（パックされるテキストの意味：「１行目のテキスト、２行目のテキスト、３行目のテキスト」）
ｓｈｏｗａ  ｌｉｎｅｓ，ｃｏｕｎｔ
【１３６０】
例２
バッファ「ｉｎｔｒｏｂｕｆ」にパックするテキスト文字列に、埋め込みコマンドを使用してバッファ「ｎａｍｅ」内の名前および変数「ａｇｅ」内の整数を含ませる。バッファ「ｉｎｔｒｏｂｕｆ」内の余ったスペースはゼロで埋める。「ｌｅｎｇｔｈ」引数は使用しない。「ｓｈｏｗａ」ステートメントは、「Ｍｙ  ｎａｍｅ  ｉｓ  Ａｌｅｘ．Ｉ  ａｍ  ２３  ｙｅａｒｓ  ｏｌｄ．（私の名前はアレックスです。２３歳です。）」といったメッセージを表示する。「ｉｎｔｒｏｂｕｆ」内にあるこれに続くゼロは、システムのプロット・ルーチンによってスキップされる。
【１３６１】
ｐａｃｋｚ    ｉｎｔｒｏｂｕｆ；；Ｍｙ  ｎａｍｅ  ｉｓ  ＜＜ａ，ｎａｍｅ＞＞．Ｉ  ａｍ  ＜＜ｓ，ａｇｅ＞＞  ｙｅａｒｓ  ｏｌｄ．
（パックされるテキストの意味：「私の名前は〜です。〜歳です。」）
ｓｈｏｗａ    ｉｎｔｒｏｂｕｆ
【１３６２】
例３
変数「ｎｕｍｂｅｒ」に基づく条件付きの配置でテキスト「ｎｅｇａｔｉｖｅ」「ｚｅｒｏ」または「ｐｏｓｉｔｉｖｅ」を「ｔｅｘｔＢｕｆ」に格納し、格納される文字数を「ｃｏｕｎｔ」をセットする。セレクタのデリミタとしてエンド・オフ・ラインを使用する。「ｔｅｘｔＢｕｆ」内の未使用のスペースはゼロで埋める。
【１３６３】
ｐａｃｋｚｃ    ｎｕｍｂｅｒ；ｔｅｘｔＢｕｆ；ｃｏｕｎｔ
ｎｅｇａｔｉｖｅ
ｚｅｒｏ
ｐｏｓｉｔｉｖｅ
【１３６４】
例４
バッファ「ｔｅｘｔＤａｔｅ」を現在の日付を伴う文字列（例：「Ｊａｎｕａｒｙ  １，  １９９３」）にセットする。変数「ｔｅｍｐ」は、日および年とともに「ｔｅｘｔＤａｔｅ」にパックするまで、月名を保持しておくために使用する。ここで「ｐａｃｋｚｃ」コマンドの３つのヌル引数に注意されたい。１つ目は長さ情報が必要ないことを表し、２つ目および３つ目は、月が負またはゼロにならないことから負またはゼロのセレクタを処理するために使用されている。
【１３６５】
ｄｅｆｉｎｅ      ｌｏｃａｌ
ｔｏｄａｙ，      ４
．                ｙｅａｒ，      ２
．                ｍｏｎｔｈ，    １
．                ｄａｙ，      １
ｔｅｍｐ，        ９
ｔｅｘｔＤａｔｅ，２０
ｄｅｆｉｎｅ      ｅｎｄ
＊
ｄａｔｅ          ｔｏｄａｙ        ＄＄  システムの日付情報を獲得する
＊
ｐａｃｋｚｃ    ｍｏｎｔｈ；ｔｅｍｐ；；；；Ｊａｎｕａｒｙ；Ｆｅｂｒｕａｒｙ；Ｍａｒｃｈ；Ａｐｒｉｌ；Ｍａｙ；Ｊｕｎｅ；Ｊｕｌｙ；Ａｕｇｕｓｔ；Ｓｅｐｔｅｍｂｅｒ；Ｏｃｔｏｂｅｒ；Ｎｏｖｅｍｂｅｒ；Ｄｅｃｅｍｂｅｒ
＊
ｐａｃｋｚ      ｔｅｘｔＤａｔｅ；；  ＜＜ａ，ｔｅｍｐ＞＞  ＜＜ｓ，ｄａｙ＞＞，  ＜＜ｓ，ｙｅａｒ＞＞
＊
ａｔ            ５：１０
ｓｈｏｗａ      ｔｅｘｔＤａｔｅ      ＄＄  現在の日付を表示する
【１３６６】
ｐａｇｅ
プロットおよび表示に使用するハードウェア・スクリーンのページを選択する。
【１３６７】
ｐａｇｅ    ｓｈｏｗｐａｇｅ  ［  ，ｗｒｉｔｅｐａｇｅ  ］
ｓｈｏｗｐａｇｅ    表示するページ番号
ｗｒｉｔｅｐａｇｅ    プロットするページ
【１３６８】
説明
表示ハードウェアの中には、ページと呼ばれるいくつかの独立した完全な表示を有するものがある。「ｐａｇｅ」はこれらをコントロールするとき使用する。
【１３６９】
１引数形式の「ｐａｇｅ」は、アクティブになっている表示ページを指定された別のページに変更する。そのページのコンテンツは、直ちに表示され、その後のすべてのプロットはそのページ上で行われる。
【１３７０】
２引数形式では、最初に指定したページが表示用になり、次に指定したページがその後のプロットに使用される。これにより、ユーザが表示されたページを見ている間に、メモリ内に新しい、隠れたページを作成するプログラムが可能になる。
【１３７１】
新しいメイン・ユニットに入ると、プロット用に選択されているページだけがイレースされる。
【１３７２】
使用可能なページ数は、使用している表示ハードウェア、使用可能な表示メモリ、および選択したスクリーン解像度に依存する。システム変数「ｚｍａｘｐａｇｅ」には、現在のスクリーンがサポートしているページ数が格納されている。
【１３７３】
例
「ｆｉｓｈ」という名前のイメージを「ｍｏｄｅ  ｘｏｒ」でアニメーションさせる。「ｍｏｄｅ  ｘｏｒ」を用いたオブジェクトの再表示においては、表示からきれいにオブジェクトが削除されるため、アニメーションするオブジェクトが他のオブジェクトを壊さずにそこを通らなければならないときは、「ｍｏｄｅ  ｘｏｒ」が使用される。「ｐａｇｅ」を使用しないと、「ｍｏｄｅ  ｘｏｒ」によるアニメーションは、通常、ちらつきが多すぎて使用できない。
ページ１は奇数のｘロケーション、たとえば２０１、２０３、２０５にイメージを表示するために使用する。
ページ２は偶数のｘロケーション、たとえば２０２、２０４、２０６にイメージを表示するために使用する。これらのページを交番させることにより、２０１、２０２、２０３、２０４、２０５、２０６というようにロケーションが移動してイメージが現れる。
【１３７４】
ｓｃｒｅｅｎ  ｅｇａ，  ｇｒａｐｈｉｃｓ，ｍｅｄｉｕｍ，ｃｏｌｏｒ
ｄｅｆｉｎｅ  ｌｏｃａｌ
ｘ，  ２
ｄｅｆｉｎｅ  ｅｎｄ
＊        モードをセットし、イメージをメモリにロードする。
ｍｏｄｅ      ｘｏｒ
ｉｍａｇｅ    ｍｏｖｅ；  ｂｌｏｃｋ，  ’ｆｉｓｈ’；  ｍｅｍｏｒｙ，  ’ｆｉｓｈ’
＊        最初のイメージをページ１に表示する。
ｉｍａｇｅ    ｐｌｏｔ；  ｍｅｍｏｒｙ，  ’ｆｉｓｈ’；  ２０１，１００
＊        ページ１を表示している間に、ページ２をイレースし、
＊        次のイメージをそこに配置する。
ｐａｇｅ      １，２
ｅｒａｓｅ
ｉｍａｇｅ    ｐｌｏｔ；  ｍｅｍｏｒｙ，  ’ｆｉｓｈ’；  ２０２，１００
ｌｏｏｐ    ｘ  ←  ２０１，４００
．          ＊  ページ１の表示内容を変更している間はページ２を表示する。
．          ＊．．．古い「ｆｉｓｈ」をページ１に再表示（つまり削除）
．          ＊．．．新しい「ｆｉｓｈ」を２ピクセル右にずらしてページ１に配置
．          ＊  その後、ｘロケーション・カウンタを１インクリメントする。
．          ｐａｇｅ    ２，１
．          ｉｍａｇｅ  ｐｌｏｔ；  ｍｅｍｏｒｙ，  ’ｆｉｓｈ’；  ｘ，１００
．          ｉｍａｇｅ  ｐｌｏｔ；  ｍｅｍｏｒｙ，  ’ｆｉｓｈ’；  ｘ＋２，１００
．          ｃａｌｃ    ｘ  ←  ｘ  ＋１
．          ＊  ページ２の表示内容を変更している間はページ２を表示する。
．        ｐａｇｅ  １，２
．        ｉｍａｇｅ  ｐｌｏｔ；  ｍｅｍｏｒｙ，  ’ｆｉｓｈ’；  ｘ，１００
．        ｉｍａｇｅ  ｐｌｏｔ；  ｍｅｍｏｒｙ，  ’ｆｉｓｈ’；  ｘ＋２，１００
ｅｎｄｌｏｏｐ
【１３７５】
システム変数
ｚｒｐａｇｅ      現在表示しているページ。
ｚｗｐａｇｅ      テキストおよびグラフィックスを書き込んでい
るページ。
ｚｍａｘｐａｇｅ  現在のスクリーンで使用可能な最大ページ数。
【１３７６】
ｐａｌｅｔｔｅ
パレットを変更する。
【１３７７】
ｐａｌｅｔｔｅ    キーワード
ｉｎｉｔ        パレットをデフォルト状態に初期化する。
ｓｅｔ          個別のパレット・エントリにカラー値をセットす
る。
ｒｅａｄ        ハードウェアから変数にパレット・エントリを読
み出す。
ｗｒｉｔｅ      変数からハードウェアにパレット・エントリを書
き込む。
ｃｏｌｏｒ      カラー・キーワードとパレット・エントリを関連
付ける。
【１３７８】
説明
パレット・ベースのハードウェア、つまりＥＧＡ、ＭＣＧＡ、ＶＧＡ、ＥＶＧＡおよび互換グラフィック・アダプタに使用可能な色セットを変更する。「ｐａｌｅｔｔｅ」は、次に示すように、いくつかの異なる機能をサポートする。
【１３７９】
●  現在のパレットの一部または全部を変更する。
●  現在のパレット・セッティングの一部または全部を変数に読み出す。
●  カラー・キーワードを変更し、別のパレット・エントリに対応させる。
【１３８０】
「パレット」は、ハードウェアのカラー・スロットに割り当てられた色セットである。ＶＧＡスクリーンは１６のカラー・スロット、ＭＣＧＡおよびＥＶＧＡスクリーンは２５６のカラー・スロットを有する。「標準パレット」は、これらのスロットに関するデフォルト値のセットを指す。
【１３８１】
各色は３つの色、つまりレッド、グリーンおよびブルーの値の組み合わせてある。これらは、まとめてＲＧＢと呼ばれる。いくつかのモードでは、各色の相対的な明度を表すために強度バイトが使用される。ＴｅｎＣＯＲＥの標準パレットは、次に示す色割り当てを使用する。
【１３８２】
０  ブラック  ４  レッド    ８  ブラック＋    １２  レッド＋
１  ブルー    ５  マゼンタ  ９  ブルー＋      １３  マゼンタ＋
２  グリーン  ６  ブラウン  １０  グリーン＋  １４  ブラウン＋
３  シアン    ７  ホワイト  １１  シアン＋    １５  ホワイト＋
【１３８３】
スロット番号とそれが有しているＲＧＢ値との間に本質的なつながりはない。これは同一のスクリーン上で複数のイメージを表示するときに意味を持つ。これらのイメージが異なるパレットを使用していると、最後に表示されたイメージのパレットがアクティブになる。同じスロットが別のイメージによって使用されていることから、異なるパレットがアクティブになるとそれらの色が変化することがある。複数のイメージをスクリーン上に表示するときは、慎重に共通パレットを設計する必要がある。
【１３８４】
新しいメイン・ユニットに入ると、必ずデフォルトのパレットが復元される。デフォルトのパレットは、パレットの変更後、「ｐａｌｅｔｔｅ」修飾子の付いた「ｓｔａｔｕｓ  ｓａｖｅ」を実行することによって変更することができる。また、「ｓｔａｔｕｓ  ｒｅｓｔｏｒｅ；ｓｔａｎｄａｒｄ；ｐａｌｅｔｔｅ」を実行すると、パレットが標準のデフォルトにリセットされる。
【１３８５】
ｐａｌｅｔｔｅ  ｉｎｉｔ  ［  ；ｎｕｍｂｅｒ］
パレットを標準のデフォルト状態に初期化する。複数のデフォルトをサポートするカードにおいては、「ｎｕｍｂｅｒ」を用いて希望するデフォルトのパレットを指定する。
【１３８６】
ｐａｌｅｔｔｅ  ｓｅｔ；  ＣＯＬＯＲ，  ｒｅｄ，  ｇｒｅｅｎ，  ｂｌｕｅ，  ［  ，ｉｎｔｅｎｓｉｔｙ］
「ＣＯＬＯＲ」によって参照されるパレット・スロットに対応させる、レッド（ｒｅｄ）、グリーン（ｇｒｅｅｎ）、ブルー（ｂｌｕｅ）の値、およびオプションでその強度（ｉｎｔｅｎｓｉｔｙ）をセットする。パレット・スロットは、番号またはカラー・キーワードによって指定することができる。
【１３８７】
「ＣＯＬＯＲ」は、使用中のハードウェアに有効な任意のハードウェア色番号である。「ｒｅｄ」「ｇｒｅｅｎ」「ｂｌｕｅ」および「ｉｎｔｅｎｓｉｔｙ」の範囲は０から２５５までである。ワイド・レンジをサポートしていないハードウェアについては、これらの値が自動的にスケーリングされる。つまり、２５５＝最大強度、１２８＝中央の強度等となる。システム変数「ｚｐａｌｉｎｃｒ」は、色値に関する最小有意インクリメントをレポートし、「ｚｉｎｔｉｎｃｒ」は強度に関する最小有意インクリメントをレポートする。
【１３８８】
「ｉｎｔｅｎｓｉｔｙ」（強度）は、２つのスクリーン・タイプ、すなわち「ｅｇａ，ｇｒａｐｈｉｃｓ，ｌｏｗ」および「ｅｇａ，ｇｒａｐｈｉｃｓ，ｍｅｄｉｕｍ」に限って意味を持つ。その他のスクリーン・タイプにおいては「ｚｉｎｔｉｎｃｒ」が０となり、「ｉｎｔｅｎｓｉｔｙ」の値は無視される。このため、これら２つのタイプのいずれかでオリジナルが生成されたパレットを別のスクリーン・タイプ上で使用するとき、新しいスクリーン・タイプ上でパレットが「薄暗く」なるという問題を生じることがある。これは、強度が使用できなくなったからであり、パレットのＲＧＢ値を調整して修正しなければならない。
【１３８９】
ｐａｌｅｔｔｅ  ｒｅａｄ；  ｂｕｆｆｅｒ，  ｎｕｍｂｅｒ
指定された番号のパレット・エントリを変数「ｂｕｆｆｅｒ」に読み出す。「ｂｕｆｆｅｒ」の構造については後述する。
【１３９０】
ｐａｌｅｔｔｅ  ｗｒｉｔｅ；  ｂｕｆｆｅｒ，  ｎｕｍｂｅｒ
変数「ｂｕｆｆｅｒ」から指定された番号のパレット・エントリを書き込む。「ｂｕｆｆｅｒ」の構造については後述する。
【１３９１】
ｐａｌｅｔｔｅ  ｃｏｌｏｒ；  ＣＯＬＯＲ，  ｓｌｏｔ
ＴｅｎＣＯＲＥのカラー・キーワードをパレット・スロットに関連付ける。ＴｅｎＣＯＲＥのカラー名は、デフォルトで先頭の１６パレット・スロットに対応している。オーサーは、「ｃｏｌｏｒ」オプションを使用して、パレット・スロットとカラー名の対応関係を変更することができる。
【１３９２】
パレット変数
キーワード「ｒｅａｄ」および「ｗｒｉｔｅ」により、パレット・スロットのエントリをバッファに読み出し、あるいはその逆に書き込むことができる。パレット・バッファは、１ないしは複数の６バイトのパレット・エントリを含み、次のフォーマットを有する。
スロット    （２バイト）
レッド      （１バイト）
グリーン    （１バイト）
ブルー      （１バイト）
強度        （１バイト）
【１３９３】
「スロット」の値は、「ｒｅａｄ」または「ｗｒｉｔｅ」の実行前に、各パレット・エントリに対応させてセットしなければならない。適切な「スロット」値をセットすることによって、パレット・エントリの任意のサブセットを読み出し、あるいは書き込むことができる。
【１３９４】
例
デフォルトの１６のＴｅｎＣＯＲＥカラー・スロットについて、パレット情報を読み出す。
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｐａｌｅｔｔｅ（１６），  ６
．        ｓｌｏｔ，  ２
．        ｒｅｄ，  １
．        ｇｒｅｅｎ，  １
．        ｂｌｕｅ，  １
．        ｉｎｔｅｎｓｔｙ，  １
ｃｏｕｎｔ    ，  ２
ｄｅｆｉｎｅ    ｅｎｄ
＊
ｌｏｏｐ      ｃｏｕｎｔ  ←  １，  １６
＊        スロット番号の初期化を忘れてはならない
．            ｃａｌｃ        ｓｌｏｔ（ｃｏｕｎｔ）  ←  ｃｏｕｎｔ  −  １
ｅｎｄｌｏｏｐ
＊
ｐａｌｅｔｔｅ  ｒｅａｄ；  ｐａｌｅｔｔｅ（１），  １６
【１３９５】
システム変数
ｚｐａｌｉｎｃｒ    現在のスクリーン・タイプ対応の色値における最小有意インクリメント
ｚｉｎｔｉｎｃｒ    現在のスクリーン・タイプ対応の強度における最小有意インクリメント
【１３９６】
ｐａｕｓｅ
イベントが発生するまで、実行を中断する。
【１３９７】
ｐａｕｓｅ  ［ｔｉｍｅ；］  ［ｆｌｏｗ＝ａｌｌ  ｜  ＫＥＹ／ｓ；］  ［ｐａｓｓ＝ａｌｌ  ｜  ＫＥＹ／ｓ］
ｐａｕｓｅ  ［ｔｉｍｅ；］  ｔｅｓｔｋｅｙｓ＝ａｌｌ  ｜  ＫＥＹ／ｓ
ｔｉｍｅ        実行を再開するまでの秒で表した遅延時間。
ｆｌｏｗ＝      「ｆｌｏｗ」分岐のためのキーリスト。
ｐａｓｓ＝      実行を継続するためのキーリスト。
ｔｅｓｔｋｅｙｓ＝  ｐａｓｓ＝と類似だが、入力バッファからキーが削除されない。
【１３９８】
説明
キー操作等の受け入れ可能なイベントが発生するまで実行を中断する。キー操作により、「ｐａｕｓｅ」を通過して実行を継続し、あるいは「ｆｌｏｗ」定義のキー分岐を実行することができる。通常は「ｐａｕｓｅ」によるキー操作の処理時に、入力バッファからそれが削除され、新しいイベントを反映すべく「ｚｉｎｐｕｔ」等のシステム入力変数が更新される。
【１３９９】
「ｂｒｅａｋ」修飾付きの「ｆｌｏｗ」分岐は常に機能し、「ｐａｕｓｅ」に割り込みを発生してそのタスクを実行する。それ以外の「ｆｌｏｗ」分岐は、「ｆｌｏｗ＝」のキーリストに指定されたキーが操作されたときに限り、「ｐａｕｓｅ」においてアクティブになる。いずれの場合でも、「ｆｌｏｗ」が「ｄｏ」または「ｌｉｂｒａｒｙ」分岐であれば、サブルーチンが終了すると「ｐａｕｓｅ」にコントロールが戻る。
【１４００】
「ｔｉｍｅ」を指定した場合は、指定時間の経過によりデフォルトの「％ｔｉｍｅｕｐ」キーを発行するクロックがセットされる。「％ｔｉｍｅｕｐ」キーは、自動的に「ｐａｓｓ＝」のキーリストに追加され、指定時間の経過前に他の受け入れ可能なイベントが発生しない限り、「％ｔｉｍｅｕｐ」によって実行が再開される。「ｆｌｏｗ  ｄｏ」または「ｆｌｏｗ  ｌｉｂｒａｒｙ」分岐が時限「ｐａｕｓｅ」の間に発生するとタイマを一時停止し、サブルーチンからコントロールが「ｐａｕｓｅ」に返されるとそれを復帰する。
【１４０１】
「ｐａｕｓｅ」コマンドは、複数行にわたって記述することが可能であり、必要であればすべてのオプションをリストすることができる。ブランクのコマンド・フィールドは継続を表す。
【１４０２】
ｐａｕｓｅ
タグを付けていない「ｐａｕｓｅ」コマンドは、任意のイベントが発生するまで待機し、それが発生すると実行を再開する。これは一時的なプログラムの停止を提供しユーザが任意のキーを押すとプログラムが再開する。「ｂｒｅａｋ」修飾された「ｆｌｏｗ」分岐以外は、次に続くコマンドが必然的に実行される。
【１４０３】
例
ｗｒｉｔｅ    Ｐｒｅｓｓ  Ａｎｙ  Ｋｅｙ  ｔｏ  Ｃｏｎｔｉｎｕｅ
（この「ｗｒｉｔｅ」ステートメントの意味：「任意のキーを押せば再開されます」）
ｐａｕｓｅ
ｗｒｉｔｅ    Ｇｏｏｄ，  ｎｏｗ  ｌｅｔ’ｓ  ｏｐｅｎ  ｔｈｅ  ｖａｌｖｅ  ａｎｄ  ｓｅｅ  ｗｈａｔ  ｈａｐｐｅｎｓ．．．
（この「ｗｒｉｔｅ」ステートメントの意味：「よくできました。次にバルブを開いて何が起こるか見てみましょう．．．」）
【１４０４】
ｐａｕｓｅ  ｔｉｍｅ
「ｔｉｍｅ」だけを伴う「ｐａｕｓｅ」は、指定された時間が経過するまで遅延を設定する。この遅延に対しては、「ｂｒｅａｋ」修飾された「ｆｌｏｗ」分岐のみが割り込むことができる。それ以外のすべてのイベントは無視され、キー入力バッファから削除される。遅延の間に発生したイベントを入力バッファから削除しない遅延を強制設定するときは「ｄｅｌａｙ」コマンドを使用する。
【１４０５】
「ｐａｕｓｅ」および「ｔｉｍｅ」コマンドの両方に対して唯一のデフォルト・タイマ・キー「％ｔｉｍｅｕｐ」が使用される。「ｐａｕｓｅ」以前に「ｔｉｍｅ」コマンドによってデフォルトのタイマがセットされているときは、「ｐａｕｓｅ」のタイマ設定がそれに置き替わる。
【１４０６】
例１
ａｔ        ５：１０
ｗｒｉｔｅ  Ｓｏｍｅ  ｔｅｘｔ．．．
（この「ｗｒｉｔｅ」ステートメントの意味：「適当な文章．．．」）
ｐａｕｓｅ  ５
ａｔ        ７：１０
ｗｒｉｔｅ  Ｓｏｍｅ  ｍｏｒｅ  ｔｅｘｔ．．．
（この「ｗｒｉｔｅ」ステートメントの意味：「適当な文章の続き．．．」）
これにおいては、５秒間の遅延の後、追加のテキストが表示される。
【１４０７】
例２
ｆｌｏｗ      ｄｏ；  ％ｆ５；  ｄａｔａ；  ｂｒｅａｋ
．．．
ｔｉｍｅ      ３０
．．．
ｐａｕｓｅ    ５
これにおいてプログラムは５秒間のポーズを設定するが、これによって、それ以前のタイマ設定（ｔｉｍｅ  ３０）はキャンセルされる。「Ｆ５」キーが押されると、タイマを一時停止して「ｂｒｅａｋ」修飾された「ｆｌｏｗ」分岐によりユニット「ｄａｔａ」に分岐する。分岐からコントロールが戻ると、「ｐａｕｓｅ」は残りの時間を待機する。
【１４０８】
ｐａｕｓｅ  ［ｔｉｍｅ；］  ｆｌｏｗ＝ａｌｌ  ｜  ＫＥＹ／ｓ
「ｆｌｏｗ＝」キーリストを伴う「ｐａｕｓｅ」は、指定した分岐だけ、または「ａｌｌ」の場合はすべての分岐を有効にする。「ｄｏ」または「ｌｉｂｒａｒｙ」分岐が発生した場合には、サブルーチンの終了時にコントロールが戻る。オプションとしてタイマを使用し、指定した秒数の経過後に「ｐａｕｓｅ」を終了することもできる。なお、「ｂｒｅａｋ」修飾された「ｆｌｏｗ」分岐は、それがリストされていなくても常に優先される。
【１４０９】
例１
ｐａｕｓｅ    ｆｌｏｗ＝ａｌｌ
これにおいてプログラムは、いずれかのフロー分岐が発生するまで待機する。「ｐａｕｓｅ」の後ろに続くコードが実行されることはない。
【１４１０】
例２
ｆｌｏｗ      ｊｕｍｐ；  ％ｆ１；  ｏｕｔ
ｆｌｏｗ      ｄｏ；  ％ｆ２；  ｉｎｆｏ
ｆｌｏｗ      ｄｏ；  ％ｆ３；  ｄａｔａ
．．．
ｐａｕｓｅ    １０；  ｆｌｏｗ＝  ％ｆ１，  ％ｆ２
これにおいてプログラムは、「Ｆ１」が押されてユニット「ｏｕｔ」に「ｊｕｍｐ」しない限り、１０秒間のポーズを設定する。「Ｆ２」が押されると、ユニット「ｉｎｆｏ」がサブルーチンとして実行される間、タイマが一時停止される。ユニット「ｉｎｆｏ」からコントロールが戻ると、「ｐａｕｓｅ」は残りの時間を待機する。ユニット「ｄａｔａ」は、分岐キーが「ｆｌｏｗ＝」のキーリストにリストされていないことから、このポーズの間はアクセスできない。
【１４１１】
ｐａｕｓｅ  ［ｔｉｍｅ  ；］  ｐａｓｓ＝  ａｌｌ  ｜  ＫＥＹ／ｓ
「ｐａｓｓ＝」キーリストを伴う「ｐａｕｓｅ」は、指定したキーまたは「ａｌｌ」の場合は任意のキー操作により「ｐａｕｓｅ」を通過して続くコマンドから実行を再開する。オプションとしてタイマを使用し、指定した秒数の経過後に「ｐａｕｓｅ」を終了することも可能であり、タイムアップの結果発生する「％ｔｉｍｅｕｐ」キーは自動的に「ｐａｓｓ＝」キーリストにエントリされる。ここでは、「ｂｒｅａｋ」修飾された「ｆｌｏｗ」分岐のみが有効になり、「ｐａｓｓ＝」キーリストのすべてのキーに優先される。
【１４１２】
例１
選択ページでは、ユーザが学習のテーマを選択することができる。「ｐａｕｓｅ」においてオプションを１つ選択すると、プログラムが再開してレッスンの適切なセクションに（引数とともに）分岐する。この「ｐａｕｓｅ」の間は、ユニット「ｉｎｄｅｘ」に分岐する「ｂｒｅａｋ」修飾された「ｆｌｏｗ」分岐だけが発生する。
【１４１３】
ｆｌｏｗ      ｊｕｍｐ；  ％ｆ１；  ｉｎｄｅｘ；  ｂｒｅａｋ
ｆｌｏｗ      ｊｕｍｐ；  ％ｆ２；  ｎｏｔｅｓ
．．．
ｗｒｉｔｅ    Ｃｈｏｏｓｅ  ａｎ  ｏｐｔｉｏｎ：
ａ．  ａｎｔｈｒａｃｉｔｅ  ｃｏａｌ
ｂ．  ｂｉｔｕｍｉｎｏｕｓ  ｃｏａｌ
ｃ．  ｐｅａｔ
（この「ｗｒｉｔｅ」ステートメントの意味：「オプションを選択してください：ａ．無煙炭；ｂ．歴青炭；ｃ．ピート」）
ｐａｕｓｅ    ｐａｓｓ＝  ａ，  ｂ，  ｃ              ＄＄  ａ，  ｂ，  ｃのみを受け入れる
ｉｆ        ｚｉｎｐｕｔ  ＝  ”ａ”
．          ｊｕｍｐ      ｕｎｉｔａ（３，５，１）
ｅｌｓｅｉｆ    ｚｉｎｐｕｔ  ＝  ”ｂ”                ＄＄  以下同様
．．．
【１４１４】
例２
ｐａｕｓｅ    １０，ｐａｓｓ＝ａ，ｂ，ｃ，ｄ，ｅ，ｆ，ｇ，ｈ，ｉ，ｊ，ｋ，ｌ，ｍ，
ｎ，ｏ，ｐ，ｑ，ｒ，ｓ，ｔ，ｕ，ｖ，ｗ，ｘ，ｙ，ｚ，
０，１，２，３，４，５，６，７，８，９
「ｐａｕｓｅ」コマンドのタグは、複数行にわたることができる。この例の「ｐａｕｓｅ」は、１０秒経過するか、リストしたキーが操作されるまで待機する。
【１４１５】
例３
ｗｒｉｔｅ      Ｌｏｔｓ  ａｎｄ  ｌｏｔｓ  ｏｆ  ｔｅｘｔ
ｏｖｅｒ  ｍａｎｙ，
ｍａｎｙ  ｌｉｎｅｓ．
（この「ｗｒｉｔｅ」ステートメントの意味：「何行にもわたる長い長いテキスト」）
ｎｅｘｔｋｅｙ  ｃｌｅａｒ
ｐａｕｓｅ      ｐａｓｓ＝ａ，ｂ，ｃ，
【１４１６】
大きな表示等の時間を多く必要とするコーディングがある場合、「ｐａｕｓｅ」コマンドが実行される前に入力バッファがキーで埋まる可能性もある。「ｐａｕｓｅ」は、該当するキーが現れるまで、処理待ちのキーの処理を許可する。これは、ユーザのタイプ入力を先行させることから、望ましいことが多い。タイプの先行が望ましくないときは、「ｐａｕｓｅ」の手前で「ｎｅｘｔｋｅｙ  ｃｌｅａｒ」ステートメントを使用する。これによってペンディングされているすべてのキーがキー入力バッファから削除される。
【１４１７】
ｐａｕｓｅ  ［ｔｉｍｅ；］  ｆｌｏｗ＝  ａｌｌ  ｜  ＫＥＹ／ｓ  ；  ｐａｓｓ＝  ａｌｌ  ｜  ＫＥＹ／ｓ
「ｆｌｏｗ＝」および「ｐａｓｓ＝」のキーリストをともに同じステートメント内に含ませることができるが「ｆｌｏｗ＝」キーより「ｐａｓｓ＝」キーが優先される。オプションとしてタイマを使用し、指定した秒数の経過後に「ｐａｕｓｅ」を終了することもできる。なお、「ｂｒｅａｋ」修飾された「ｆｌｏｗ」分岐は、常に有効になる。
【１４１８】
いずれのキーリストにおいても、疑似キー値「％ｏｔｈｅｒ」を使用し、個別に割り当てられていないすべてのキーを含ませることができる。「ｆｌｏｗ＝」キーリストに含めた場合（または「ａｌｌ」キーワードを使用した場合）、「％ｏｔｈｅｒ」疑似キーを伴う任意の「ｆｌｏｗ」ステートメントがアクティブになる。
【１４１９】
例１
ｐａｕｓｅ    ｆｌｏｗ＝ａｌｌ；  ｐａｓｓ＝％ｏｔｈｅｒ
これにおいては、すべての「ｆｌｏｗ」キーがアクティブになる。それ以外の任意のキー操作により「ｐａｕｓｅ」を通過してユニットの実行が再開される。
【１４２０】
例２
ｆｌｏｗ      ｊｕｍｐ；  ％ｔｉｍｅｕｐ；  ｔｉｍｅｏｕｔ
．．．
ｔｉｍｅ      １０
ｐａｕｓｅ    ｆｌｏｗ＝ａｌｌ；  ｐａｓｓ＝ａ，ｂ，ｃ，
この場合の「ｐａｕｓｅ」は、手前でセットされたタイマを置き換えない。システムが「％ｔｉｍｅｕｐ」キーを生成すると、ユニット「ｔｉｍｅｏｕｔ」への「ｆｌｏｗ」分岐が発生する。
【１４２１】
例３
ｆｌｏｗ      ｊｕｍｐ；  ％ｆ１；  ＝ｅｘｉｔ
ｆｌｏｗ      ｊｕｍｐ；  ％ｆ２；  ｉｎｄｅｘ
ｆｌｏｗ      ｄｏ；  ％ｆ５；  ｄａｔａ
ｆｌｏｗ      ｊｕｍｐ；  ％ｔｉｍｅｕｐ；  ｔｉｍｅｏｕｔ
．．．
ｐａｕｓｅ    １０；  ｆｌｏｗ＝ａｌｌ；  ｐａｓｓ＝ａ，ｂ，ｃ，％ｐｏｉｎｔｅｒ
「Ａ」「Ｂ」もしくは「Ｃ」またはポインタのクリックによって続くコマンドから再開される。指定された「ｆｌｏｗ」キー（「％ｔｉｍｅｕｐ」を除く）のいずれかが入力されると定義済みの「ｆｌｏｗ」関数を実行する。１０秒が経過するまでそれ以外の受け入れ可能なイベントが発生しないと、「ｐａｕｓｅ」に続くコマンドから実行が再開される。「ｐａｕｓｅ」コマンドのタイマ設定が自動的に「ｐａｓｓ＝」キーリストに「％ｔｉｍｅｕｐ」を含め、それが「ｆｌｏｗ」割り当てより優先されることから、コントロールがユニット「ｔｉｍｅｏｕｔ」に渡ることはない。
【１４２２】
例４
ｆｌｏｗ      ｊｕｍｐ；  ％ｆ１；  ＝ｅｘｉｔ
ｆｌｏｗ      ｊｕｍｐ；  ％ｆ２；  ｉｎｄｅｘ
ｆｌｏｗ      ｄｏ；  ％ｐｇｕｐ，％ｐｇｄｎ；  ｎｅｘｔｕｎｉｔ
ｆｌｏｗ      ｄｏ；  ％ｏｔｈｅｒ；  ｂａｄＫｅｙｓ
．．．
ｐａｕｓｅ    ｆｌｏｗ＝ａｌｌ；  ｐａｓｓ＝ａ，ｂ，ｃ，％ｓｐａｃｅ，％ｆ２
「Ａ」「Ｂ」「Ｃ」「スペース」もしくは「Ｆ２」キーの操作により「ｐａｕｓｅ」を通過して続くコマンドに進む。「％ｆ２」キーは、優先順位の高い「ｐａｓｓ＝」キーリストにリストされていることから、それによる「ｆｌｏｗ」分岐は生じない。「ｆｌｏｗ＝ａｌｌ」があることから「％ｆ１」キーの「ｆｌｏｗ」分岐および残りすべての「ｆｌｏｗ」分岐は有効である。「ｐａｓｓ＝」キーリストにリストされているキーおよび他の「ｆｌｏｗ」ステートメントに定義されているキーを除く任意のキーの操作があると、予期しないキーの操作を処理するユニット「ｂａｄＫｅｙｓ」に分岐する「ｆｌｏｗ  ｄｏ」が実行される。
【１４２３】
ｐａｕｓｅ  ［ｔｉｍｅ；］  ｔｅｓｔｋｅｙｓ＝  ａｌｌ  ｜  ＫＥＹ／ｓ
「ｔｅｓｔｋｅｙｓ＝」形式は「ｐａｓｓ＝」形式に類似しているが、通過されたキーが入力バッファから削除されない。しかし、「ｚｉｎｐｕｔ」等のシステム変数が更新されることから、ペンディングの入力をテストするためにこれが使用される。通過されたキーは、次の入力処理ポイント（「ｐａｕｓｅ」「ａｒｒｏｗ」「ｎｅｘｔｋｅｙ」エンド・オブ・ユニット）まで入力バッファ内に残る。「ｔｅｓｔｋｅｙｓ＝」は、「ｎｅｘｔｋｅｙ  ｔｅｓｔ」コマンドの「ｐａｕｓｅ」形式である。
【１４２４】
「ｔｅｓｔｋｅｙｓ＝」は、他のキーリスト形式と同時に使用できない。
【１４２５】
例
ｐａｕｓｅ    ｔｅｓｔｋｅｙｓ＝０，１，２，３，４，５，６，７，８，９
ｌｏｎｇ      １，ｊｕｄｇｅ
ａｒｒｏｗ    １０：１０
ａｎｓｗｅｒ    ３
．        ｗｒｉｔｅ        Ｇｒｅａｔ！
（この「ｗｒｉｔｅ」ステートメントの意味：「たいへんよくできました」）
ｗｒｏｎｇ    ２
．        ｗｒｉｔｅ        Ｎｏ，  ｔｈａｔ’ｓ  Ｍａｒｓ．
（この「ｗｒｉｔｅ」ステートメントの意味：「正解は火星です」）
ｗｒｏｎｇ    １
．        ｗｒｉｔｅ        Ｎｏ，  ｔｈａｔ’ｓ  Ｍｅｒｃｕｒｙ．
（この「write」ステートメントの意味：「正解は水星です」）
...
ｅｎｄａｒｒｏｗ
【１４２６】
この場合、数字キーだけが「ｐａｕｓｅ」を終了できる。「ｔｅｓｔｋｅｙｓ＝」形式においては、通過されるキーが入力バッファから削除されないことから、それに続く「ａｒｒｏｗ」の入力として残る。このキーは、スクリーン上の「ａｒｒｏｗ」に現れた直後に、「ｌｏｎｇ  １，ｊｕｄｇｅ」による判断を生じさせる。
【１４２７】
以前用いられていた形式
以前のバージョンのシステムに用いられていた両義性のある「ｋｅｙｓ＝」形式は、「ｐａｓｓ＝」および「ｆｌｏｗ＝」という明示的なキーリスト形式に置き換えられた。「ｋｅｙｓ＝」キーリストのみを見て、リストされているキーにより「ｆｌｏｗ」分岐すべきか「ｐａｕｓｅ」を通過して次のコマンドに進むべきかを予測することは不可能だった。上方互換の理由から「ｋｅｙｓ＝」形式の有効性は残されているが、ユーザには新しい一義的な形式の使用が推奨される。
【１４２８】
システム変数
ｚｉｎｐｕｔ        最新のキー操作、ポインタ入力または疑似キー
ｚｉｎｐｕｔａ      現在の「ｚｉｎｐｕｔ」値をもたらしたエリアＩＤ
ｚｉｎｐｕｔｆ      イベント発生時のキーボード条件のビットマップ
ｚｉｎｐｕｔｘ      イベント発生時のポインタのＸ座標
ｚｉｎｐｕｔｙ      イベント発生時のポインタのＹ座標
ｚｋｅｙｓｅｔ      キーボードのスキャン・コード
ｚｐｃｏｌｏｒ      イベント発生時にポインタの下にあったスクリーンの色
【１４２９】
ｐｅｒｍ
順列リストをマネージする。
【１４３０】
ｐｅｒｍ        キーワード
ｃｒｅａｔｅ    メモリ内に順列リストを作成する。
ｎｅｘｔ        順列リストから次の数を獲得する。
ｒｅｍｏｖｅ    順列リストから指定数を削除する。
ｒｅｐｌａｃｅ  順列リストに指定数を戻す。
ｃｏｐｙ        順列リストのコピーを作成する。
ｄｅｌｅｔｅ    メモリから順列リストを削除する。
ｒｅｓｅｔ      メモリからすべての順列リストを削除する。
ｒｅａｄ        順列リストを変数に読み出す。
ｗｒｉｔｅ      変数内のリストを順列リストに書き込む。
【１４３１】
説明
「ｐｅｒｍ」コマンドによって提供される縦列マネージ・オプションは、数字リストからの数字のランダム選択、削除および置換を可能にする。これにおいては、複数の順列リストに同時にアクセスすることができる。リストのコピーをメモリさらにはディスクに随時セーブし、復元できるため、順列を使用して得られる複数セッションにわたるストラテジが可能になる。
【１４３２】
順列リストは、システムのデフォルト（「ｄｅｆａｕｌｔ」）バッファの１つ、または名前を指定した任意数のバッファ内に作成することができる。デフォルト・バッファの使用が可能なときには、それを使用すれば名前引数が省略可能になり、順列の使用がシンプルになる。ただし「ｐｅｒｍ」コマンド用の「ｄｅｆａｕｌｔ」バッファは、すべてのユニットで共有される。
【１４３３】
順列リストのバッファは、メモリ・プール内のメモリ・ブロックとして維持される。メモリ・プールは、「ｍｅｍｏｒｙ」「ｉｍａｇｅ」「ｗｉｎｄｏｗ」「ｓｔａｔｕｓ」「ａｒｅａ」「ｆｌｏｗ」「ｆｏｎｔ」および「ｐｅｒｍ」によって使用される。メモリ・ブロックは、生成時に特定コマンド・タイプに属するものとしてタグ付けされ、メモリ・プールを使用する他のコマンドによってアクセスすることはできない。したがって異なるコマンドで同じ名前を使用しても衝突することはない。
【１４３４】
ｐｅｒｍ  ｃｒｅａｔｅ；  ｌｅｎｇｔｈ  ［；  ’名前’  ｜  ｄｅｆａｕｌｔ］
１から指定した値まで（最大３２，７６７）の整数が、重複することなくランダム配置された順列リストを作成する。このリストはデフォルト（「ｄｅｆａｕｌｔ」）としてまたはメモリ・プール内のユーザが名前を付けたバッファに格納される。新しいデフォルト・リストの作成は、それ以前のデフォルト・バッファの使用に置き換わる。名前を付けたリストを作成するとき、その名前のリストがすでに存在していればエラーが発生する。同じ名前を再使用する場合には、「ｄｅｌｅｔｅ」オプションを最初に使用する。
【１４３５】
例１
１から１０までのデフォルトの順列リストを作成する。
ｐｅｒｍ      ｃｒｅａｔｅ；  １０
【１４３６】
例２
１から２５までの順列リストを作成し、そのリストを「ｑｕｉｚ１」という名前を付けたメモリ・ブロックにセーブする。
ｐｅｒｍ      ｃｒｅａｔｅ；  ２５；  ’ｑｕｉｚ１’
【１４３７】
ｐｅｒｍ  ｎｅｘｔ；  ｖａｒｉａｂｌｅ  ［；  ’名前’  ｜  ｄｅｆａｕｌｔ］
順列数をランダムに選択しそれを変数に格納する。選択された数は、順列リストから削除される。順列リストが空になるかエラーが発生すると、０が返される。
【１４３８】
例１
デフォルトの順列リストから次の数を取り込み、変数「ｑｕｅｓｔｉｏｎ」に格納する。この数は、リストから削除する。
ｐｅｒｍ      ｎｅｘｔ；  ｑｕｅｓｔｉｏｎ
【１４３９】
例２
例１と同じだが、数を「ｑｕｉｚ１」という名前を付けたリストから獲得する。
ｐｅｒｍ      ｎｅｘｔ；  ｑｕｅｓｔｉｏｎ；  ’ｑｕｉｚ１’
【１４４０】
例３
５アイテムの順列をデフォルト・バッファ内に作成する。ループ内においては、「Ｑ１」から「Ｑ５」までの５つの質問がランダムな順序で示される。リストが空になったとき、変数「ｑｕｅｓｔｉｏｎ」に返される値０を使用してループ構造を終了する。
【１４４１】
ｐｅｒｍ      ｃｒｅａｔｅ；  ５  ＄＄  デフォルトの順列リストを作成する
ｊｕｍｐ      ｚｒｅｔｕｒｎ；  ；  ｅｒｒｏｒ
ｌｏｏｐ
．        ｐｅｒｍ        ｎｅｘｔ；  ｑｕｅｓｔｉｏｎ  ＄＄  次の数を獲得する
．        ｄｏ  ｑｕｅｓｔｉｏｎ；；；Ｑ１；Ｑ２；Ｑ３；Ｑ４：Ｑ５  ＄＄  質問を呼び出す
ｏｕｔｌｏｏｐ  ｑｕｅｓｔｉｏｎ  ＝  ０  ＄＄  リストが空であればループを終了する
ｅｎｄｌｏｏｐ
【１４４２】
ｐｅｒｍ  ｒｅｍｏｖｅ；  ｉｔｅｍＮｕｍｂｅｒ  ［；  ’名前’  ｜  ｄｅｆａｕｌｔ］
指定したアイテムを順列リストから削除する。削除された整数は、「ｐｅｒｍ  ｎｅｘｔ」ステートメントで使用できなくなる。
【１４４３】
例
デフォルトの順列リストから「ｐｒｏｂｌｅｍ」にある値を削除する。
ｐｅｒｍ      ｒｅｍｏｖｅ；  ｐｒｏｂｏｅｍ
【１４４４】
ｐｅｒｍ  ｒｅｐｌａｃｅ；  ｉｔｅｍＮｕｍｂｅｒ  ［；  ’名前’  ｜  ｄｅｆａｕｌｔ］
指定したアイテムを順列リストに戻す。戻されたされた整数は、「ｐｅｒｍ  ｎｅｘｔ」ステートメントで再度使用できるようになる。
【１４４５】
例
デフォルトの順列リストに「ｐｒｏｂｌｅｍ」にある値を戻す。
ｐｅｒｍ      ｒｅｐｌａｃｅ；  ｐｒｏｂｌｅｍ
【１４４６】
ｐｅｒｍ  ｃｏｐｙ；  ［  ’コピー元’  ｜  ｄｅｆａｕｌｔ］  ；  ［  ’コピー先’  ｜  ｄｅｆａｕｌｔ］  
順列リストのコピーを作成する。コピー先のリストがすでに存在する場合は、それが上書きされる。このステートメントにおいては、いずれか一方だけにデフォルト（「ｄｅｆａｕｌｔ」）のリストを使用することができる。
【１４４７】
例１
順列リスト「ｆｉｒｓｔ」を「ｓｅｃｏｎｄ」という名前のリストにコピーする。
ｐｅｒｍ      ｃｏｐｙ；  ’ｆｉｒｓｔ’；  ’ｓｅｃｏｎｄ’
【１４４８】
例２
デフォルトの順列リストを変数「ｎｅｗＬｉｓｔ」内に格納されている名前で指定されるリストにコピーする。
ｐｅｒｍ      ｃｏｐｙ；  ｄｅｆａｕｌｔ；  ｎｅｗＬｉｓｔ
【１４４９】
ｐｅｒｍ  ｄｅｌｅｔｅ  ［；  ’名前’  ｜  ｄｅｆａｕｌｔ］
メモリから順列リストを削除する。
【１４５０】
ｐｅｒｍ  ｒｅｓｅｔ
メモリからすべての順列リストを削除する。
【１４５１】
ｐｅｒｍ  ｒｅａｄ；  ｐｅｒｍＢｕｆｆｅｒ  ［，ｌｅｎｇｔｈ］  ［；  ’名前’  ｜  ｄｅｆａｕｌｔ］
順列リストから「ｌｅｎｇｔｈ」で指定したバイト数を指定したバッファに読み出す。バイト数を指定しない場合は、バッファの定義長が使用される。
【１４５２】
「ｐｅｒｍ」コマンドの「ｒｅａｄ」形式および「ｗｒｉｔｅ」形式は、複数セッションにわたって学習者の順列リストをディスクにセーブし、復元するために使用される。
【１４５３】
バッファの構造を次に示す。
【表１１】
2009009584.tif 000013
【１４５４】
アイテム・ビットマップのフォーマットは、各ビットが順列リスト内の数に対応する形になり、ビットが「１」であればアイテムがまだ存在し、「０」であれば削除されている。たとえば、ビット３が１にセットされていれば、数３は順列リストからまだ削除されていない。アイテム・ビットマップの長さは、リストの長さによって決定される。各バイトが８つのアイテムの状態を保持できることから、Ｎはリストの長さを８で除し、切り上げた値となる。
つまり、ｉｎｔ（（長さ＋７）／８）または（（長さ＋７）÷８）から計算で求めることができる。
【１４５５】
ｐｅｒｍ  ｗｒｉｔｅ；  ｐｅｒｍＢｕｆｆｅｒ  ［，ｌｅｎｇｔｈ］  ［；  ’名前’  ｜  ｄｅｆａｕｌｔ］
バッファから指定したバイト数を順列リストに書き込む。バイト数を指定しない場合は、バッファの定義長が使用される。
【１４５６】
システム変数
ｚｒｅｔｕｒｎ
−２      冗長オペレーション：リスト内にすでにある数の置き換えま
たは削除済みの数の削除が試みられた。
−１      オペレーションは成功した。
３      範囲外：３２，７６７を超えるリストの作成またはリストの
サイズより大きい数の置換または削除が試みられた。
６      重複する名前の作成。
１０      名前が見つからない。
１７      無効な順列リストのデータの書き込みが試みられた。
１８      メモリ・プール内に充分なスペースがない。
【１４５７】
ｐｏｌｙｇｏｎ
多角形を描画する。
【１４５８】
ｐｏｌｙｇｏｎ  ［ロケーション］；［ロケーション］；［ロケーション］．．．［；ｆｉｌｌ］
【１４５９】
説明
頂点として指定した「ロケーション」を使用して、フォアグラウンド色の多角形を描く。オプションの修飾子「ｆｉｌｌ」は、多角形の塗りつぶしを指定する。塗りつぶしは、凸状の多角形だけに可能であり、凹状の多角形を塗りつぶすときは、複数の凸状の多角形に分割する（後述）。ここでは、少なくとも３つのポイントを指定しなければならない。指定可能なポイントの最大数は５０である。最後のポイントが最初のポイントに一致しないときは、その間が接続される。
【１４６０】
多角形は、「ｓｃａｌｅ」「ｒｏｔａｔｅ」および「ｗｉｄｔｈ」の影響を受ける。多角形の塗りつぶしは、水平ラインがその多角形上の２点で交差するときだけ機能する。
【１４６１】
複数の凸状の多角形に分割すれば、任意形状の凹状の多角形を作ることができる。
【１４６２】
ｐｏｌｙｇｏｎ  ０，１００；  ２００，０；  ２００，１００          ＄＄  三角形を描く
ｐｏｌｙｇｏｎ  １０：１０；  １０：２０；  ２０：２０；  ２０：１０    ＄＄  四角形を描く
ｐｏｌｙｇｏｎ  ０，１００；  ２００，０；  ２００，１００；  ｆｉｌｌ  ＄＄  塗りつぶした多角形を描く
【１４６３】
ｐｒｅｓｓ
入力値を生成する。
【１４６４】
ｐｒｅｓｓ    ＫＥＹ  ｜  式  ［；ｆｉｒｓｔ］
ｐｒｅｓｓ    ＫＥＹ  ｜  式  ［；ｉｎｐｕｔＦ  ［，ｉｎｐｕｔＸ，ｉｎｐｕｔＹ  ［，ｉｎｐｕｔＡ  ］］］  ［；  ｆｉｒｓｔ］
【１４６５】
説明
「ｐｒｅｓｓ」コマンドは、指定したキーが押された場合と同様にそのキーを入力バッファに格納する。次の入力処理ポイント（「ｐａｕｓｅ」「ａｒｒｏｗ」「ｎｅｘｔｋｅｙ」エンド・オブ・ユニット）においては、このキーが処理され、システム変数「ｚｉｎｐｕｔ」の更新も含めて、実際のキー操作があった場合に等しい機能が実行される。
【１４６６】
オプションの修飾子「ｆｉｒｓｔ」を使用すれば、入力バッファ内にあるペンディングのキーの先頭に挿入され、最初に処理されるキーとなる。
【１４６７】
オプションとして、システム変数「ｚｉｎｐｕｔｆ」「ｚｉｎｐｕｔｘ」「ｚｉｎｐｕｔｙ」「ｚｉｎｐｕｔａ」の値の指定が可能であり、これらの値はキーの処理時に「ｚｉｎｐｕｔ」の更新とともにセットされる。値を指定しなければ、対応するシステム変数はゼロにセットされる。
【１４６８】
「ｐｒｅｓｓ」においては「ＫＥＹ」の値が制限されている。埋め込み形式および単純な「ａ」「ｂ」「ｃ」形式は使用できない。しかしながら、定数、変数または計算等の式を使用することはできる。
【１４６９】
例
例１
キーボード上のスペース・キーが押されたかのように、「％ｓｐａｃｅ」を入力バッファに格納する。
ｐｒｅｓｓ    ％ｓｐａｃｅ
【１４７０】
例２
入力バッファ内の処理待ちのキーの先頭に「％Ｆ１」キーを挿入し、最初に処理されるキーとする。
ｐｒｅｓｓ    ％Ｆ１；  ｆｉｒｓｔ
【１４７１】
例３
キー値「％ｐｏｉｎｔｅｒ」とともにロケーションおよびエリアＩＤの情報を入力バッファ内に格納することによって、ポインタのクリックをシミュレートする。次の入力処理ポイントにおいては、「ｚｉｎｐｕｔ」が「％ｐｏｉｎｔｅｒ」、「ｚｉｎｐｕｔｘ」が３２０、「ｚｉｎｐｕｔｙ」が２４０、「ｚｉｎｐｕｔａ」が５になる。「ｚｉｎｐｕｔｆ」は、値を指定していないので０になる。
ｐｒｅｓｓ    ％ｐｏｉｎｔｅｒ，，３２０，２４０，５
【１４７２】
例４
質問に正しく答えられなかった学習者には、「ａｒｒｏｗ」（プロンプトの矢印）に続いて正解の最初の数文字がヒントとしてタイプされる。
ｗｒｉｔｅ    Ｗｈｏ  ｉｓ  ｂｕｒｉｅｄ  ｉｎ  Ｇｒａｎｔ’ｓ  ｔｏｍｂ？
（この「ｗｒｉｔｅ」ステートメントの意味：「グラントの墓に埋葬されているのは誰でしょう？」）
ａｒｒｏｗ
ａｎｓｗｅｒ    ＜＜Ｕ，Ｕｌｙｓｓｅｓ，Ｓ＞＞  Ｇｒａｎｔ
ｎｏ
．        ｗｒｉｔｅ        Ｐｒｅｓｓ  ａｎｙ  ｋｅｙ  ｆｏｒ  ａ  ｈｉｎｔ．
（この「ｗｒｉｔｅ」ステートメントの意味：「どれかのキーを押せばヒントが現れます」）
．        ｐａｕｓｅ
．        ｐｒｅｓｓ        ％ｅｎｔｅｒ            ＄＄  誤りをイレースする
．        ｐｒｅｓｓ        ％”Ｇ”
．        ｐｒｅｓｓ        ％”ｒ”
ｅｎｄａｒｒｏｗ
【１４７３】
システム変数
ｚｒｅｔｕｒｎ
−１      オペレーションは成功した。
０      キー・バッファがオーバーフローした。
【１４７４】
ｐｒｉｎｔ
出力をプリンタに送る、またはプリント・パラメータを変更する。
【１４７５】
ｐｒｉｎｔ    ｖａｒｉａｂｌｅ，  ｌｅｎｇｔｈ
ｐｒｉｎｔ    ｉｎｉｔｉａｌ；  ｐｒｎ  ｜  ｌｐｔ１  ｜  ｌｐｔ２  ｜  ｌｐｔ３  ｜  ｃｏｍ１  ｜  ｃｏｍ２  ｜  
ｐｒｉｎｔ    ｉｎｉｔｉａｌ；  ｆｉｌｅ，  ’ファイル名’  ［  ，ｌｅｎｇｔｈ］
ｐｒｉｎｔ    ｅｎｄ
ｂｕｆｆｅｒ      プリンタに出力するための変数バッファ
ｌｅｎｇｔｈ      プリンタに送るバイト数
ｉｎｉｔｉａｌ    プリンタ・ドライバを変更
ｅｎｄ        ネットワークのスプーリングを終了しプリンタを「ｌｐｔ１」にリセット
【１４７６】
説明
指定したバイト数を標準のプリンタ・デバイス「ｌｐｔ１」または、「ｐｒｉｎｔ  ｉｎｉｔｉａｌ」により指定したほかのプリンタ・デバイスもしくはファイルに転送する。
【１４７７】
「ｐｒｉｎｔ」に認められているデバイスは次のとおりである。
ｐｒｎ、ｌｐｔ１、ｌｐｔ２、ｌｐｔ３、ｃｏｍ１、ｃｏｍ２
【１４７８】
キーワード「ｉｎｉｔｉａｌ」は、プリントに使用するデバイスを変更する。ファイル名は「ｆｉｌｅ」形式を用いて指定する。ＡＳＣＩＩファイル名文字列は、ドライブおよびパスを含ませることができるが、ヌル・バイトで終了しなければならない。バイト数を指定しなかった場合には、変数の定義長が使用される。
【１４７９】
指定したファイルがすでに存在している場合は、プリントの準備においてその長さが０に初期化される。
【１４８０】
「ｅｎｄ」キーワードは、「ｐｒｉｎｔ  ｉｎｉｔｉａｌ」が設定したプリンタ接続をすべてクリアする。ネットワーク・システムにおいては、これによりプリンタ出力のスプーリングが終了され、プリントが開始される。
【１４８１】
「ｐｒｉｎｔ  ｉｎｉｔｉａｌ」を用いて特に指定しない限り、出力は「ｌｐｔ１」に送られる。
【１４８２】
「ｐｒｉｎｔ」のみの場合は、指定した文字がプリンタに送られる。プリンタのコントロール文字は出力に加えられない。プリンタのコントロール・コードについてはメーカのマニュアルを参照されたい。
【１４８３】
ほとんどのプリンタにおいては、ＡＳＣＩＩ復帰コード（ｈ０ｄ）または改行復帰シーケンス（ｈ０ｄ０ａ）を各行末に挿入し、プリントヘッドおよび用紙のポジションを次の行に合わせる必要がある。
【１４８４】
テクニカル・ノート：有効なプリンタ接続がないとき、プリンタ出力はＢＩＯＳ  ＩＮＴ  １７Ｈプリンタ・ドライバ、デバイス０に送られ、リダイレクトしない限りこれは「ｌｐｔ１」となる。プリンタ接続がアクティブのときは、標準ＤＯＳ「ｗｒｉｔｅ」呼び出しを経由してプリンタ出力がデバイスに送られる。
【１４８５】
例
例１
報告書のタイトル行をプリントする。ユーザの名前は「ｕｓｅｒｎａｍｅ」に格納する。改行復帰シーケンスが含められている点に注意されたい。
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｕｓｅｒｎａｍｅ，  ２０              ＄＄  ユーザの名前
ｔｅｓｔ，１００                      ＄＄  プリントするテキスト
ｔｅｘｔｅｎ，  ２                    ＄＄  プリントするテキストの
長さ
ＣＲＬＦ  ＝  ｈ０ｄ０ａ              ＄＄  改行復帰
ｄｅｆｉｎｅ      ｅｎｄ
＊
ｐａｃｋｚ    ｔｅｘｔ；ｔｅｘｔｌｅｎ；Ｔｅｓｔ  ｒｅｓｕｌｔｓ  ｆｏｒ  ＜＜ｓｈａｗａ，ｕｓｅｒｎａｍｅ＞＞
＜＜  ｓｈａｗａ，ＣＲＬＦ  ＞＞
＊
ｐｒｉｎｔ    ｔｅｘｔ，  ｔｅｘｔｌｅｎ        ＄＄  行をプリント
【１４８６】
例２
将来のプリントをファイル「ｌｐｔ２」にリダイレクトする。
ｐｒｉｎｔ    ｉｎｉｔｉａｌ；  ｌｐｔ２        ＄＄  「ｌｐｔ２」を初期化
【１４８７】
例３
将来のプリントをファイル「Ｃ：￥ＴＥＮＰＲＩＮＴ．ＰＲＮ」にリダイレクトする。
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｆｉｌｅｎａｍｅ，４０
ｄｅｆｉｎｅ    ｅｎｄ
ｐａｃｋｚ    ｆｉｌｅｎａｍｅ；；ｃ：￥ｔｅｎｐｒｉｎｔ．ｐｒｎ  ＄＄  ファイル名を変数に格納
ｐｒｉｎｔ    ｉｎｉｔｉａｌ；  ｆｉｌｅ，  ｆｉｌｅｎａｍｅ    ＄＄  出力をファイルにリダイレクト
【１４８８】
システム変数
ｚｒｅｔｕｒｎ
−１      オペレーションは成功した。
０      ディスク・エラー（「ｚｄｏｓｅｒｒ」「ｚｅｄｏｓｅｒｒ」
参照）。
【１４８９】
ｐｕｔ
文字列を別の文字列に置換する。
【１４９０】
ｐｕｔ  ｆｒｏｍＴＥＸＴ；  ｔｏＴＥＸＴ  ［，ｂｕｆｆｅｒ  ［  ，ｌｅｎｇｔｈ］］
ｆｒｏｍＴＥＸＴ    探し出す被置換テキスト文字列。これが置
換される。
ｔｏＴＥＸＴ        置換する置換テキスト文字列（ヌルにする
ことができる）。
ｂｕｆｆｅｒ        置換が行われるユーザ変数バッファ。
ｌｅｎｇｔｈ        バッファの最大長。
【１４９１】
説明
「ａｒｒｏｗ」において、ステューデント応答バッファまたは任意の指定されたバッファ内に「ｆｒｏｍＴＥＸＴ」が生じるごとに「ｔｏＴＥＸＴ」により置換する。テキストはクォーテーションマークのない形となり、埋め込み「ｓｈｏｗ」コマンドを含めることもできる。
【１４９２】
例
例１
解答の判定において、「ｐｕｔ」を使用して略語を正式名に変更する方法を示す。
ｗｒｉｔｅ    Ｗｈａｔ  ｉｓ  ｔｈｅ  ｂｉｇｇｅｓｔ  ＵＳ  ｃｉｔｙ？
（この「ｗｒｉｔｅ」ステートメントの意味：「米国最大の都市は？」）
ａｒｒｏｗ      １０：１０
ｐｕｔ          ＮＹ，Ｎｅｗ  Ｙｏｒｋ
ａｎｓｗｅｒ    Ｎｅｗ  Ｙｏｒｋ
．        ｗｒｉｔｅ        Ｇｒｅａｔ！
（この「ｗｒｉｔｅ」ステートメントの意味：「たいへんよくできました！」）
ｅｎｄａｒｒｏｗ
【１４９３】
例２
バッファ「ｍｙｓｔｒｉｎｇ」に「ｄｏｇ」が生成されるごとに「ｅｌｅｐｈａｎｔ」に置き換える。
ｐｕｔ      ｄｏｇ，ｅｌｅｐｈａｎｔ，ｍｙｓｔｒｉｎｇ
【１４９４】
例３
「ｆｒｏｍ」文字列および「ｔｏ」文字列のいずれにも埋め込みテキストを使用することができる。
ｐｕｔ      ＜＜ａ，ｏｌｄｃｈａｒｓ，ｏｌｄｌｅｎ＞＞，＜＜ａ，ｎｅｗｃｈａｒｓ，ｎｅｗｌｅｎ＞＞，ｔｅｘｔｖａｒ，ｌｅｎｇｔｈ
【１４９５】
例４
ここでは、２４時間表示の時計を表示する。時または分を示す値が１０未満のときは、「ｐａｃｋ」にある「ｓｈｏｗｔ」の１０の位にスペースが含まれる。「ｐｕｔ」は、「ｖａｒ」内のスペースをすべて０に置き換える。
ｐａｃｋ      ｖａｒ，  ｌｅｎｇｔｈ，＜＜ｓｈｏｗｔ，  ｈｒｓ，  ２＞＞：＜＜ｓｈｏｗｔ，  ｍｉｎｓ，  ２＞＞
ｐｕｔ        ，０，  ｖａｒ，  ｌｅｎｇｔｈ        ＄＄  「ｆｏｒｍ」文字列は単一のスペース
＊                                  スペースを０で置き換える。
ｓｈｏｗａ        ｖａｒ，  ｌｅｎｇｔｈ
【１４９６】
システム変数
ｚｒｅｔｕｒｎ
−１      オペレーションは成功した。
０      置換する充分なスペースがない。
【１４９７】
その他
ｚｌｅｎｇｔｈ    置換後のテキスト文字列の長さ。
ｚｎｕｍｂｅｒ    置換箇所の数。
ｚｃｏｕｎｔ      応答バッファの長さ、使用された場合のみ。
【１４９８】
ｒｅｃｅｉｖｅ
サブルーチンに渡された引数の値を受け取る。
【１４９９】
ｒｅｃｅｉｖｅ  １６以下の引数
【１５００】
説明
サブルーチン・ユニットに渡された引数を受け取り、それらの値を指定された変数に格納する。ヌル引数の指定は、引数リスト内のブランク・エントリ（，，）によって行われる。
【１５０１】
「ｄｏ」「ｌｉｂｒａｒｙ」「ｊｕｍｐ」および「ｊｕｍｐｏｐ」コマンドは、引数を渡すことができる。「ｒｅｃｅｉｖｅ」には、次に示す事項が適用される。
【１５０２】
●  引数リスト内の任意のエレメントをヌルにすることができる。引数リスト内のヌル・エレメントにより、対応する引き渡し引数の値が無視される。
●  リテラルを受け取り引数として使用すると圧縮エラーを生じる。
●  引数リストでは、整数および実数変数のみが有効である。これにおいて、８文字以下のテキスト変数は数と見なされる。
●  任意数の「ｒｅｃｅｉｖｅ」コマンドを実行することが可能であり、いずれの「ｒｅｃｅｉｖｅ」コマンドも任意回数の実行が許されている。「ｒｅｃｅｉｖｅ」が実行されるごとに、最初に渡した引数が使用される。
●  他のユニットに対する介入呼び出し（それにおいては独自の引数を渡し、受け取ることができる）は、現在のユニットにおいて受け取る値に影響しない（渡される値は、それぞれのユニットに収められる）。
●  ヌル引数が送られた場合、「ｒｅｃｅｉｖｅ」リスト内の対応するエレメントは変更されない。
●  通常、受け取る引数の数は、引き渡す引数の数に一致する必要があり、一致しないときは実行エラーが発生する。「ｎｏｃｈｅｃｋ  ｒｅｃｅｉｖｅ」を使用することにより、これを無視することができる。
【１５０３】
例
ユニット「ｏｎｅ」は、サブルーチン「ｃｉｒｃｌｅｓ」に引数を渡す。
【１５０４】
ユニット「ｏｎｅ」
．
．
．
ｄｏ        ｃｉｒｃｌｅｓ（１６０，  １００，  ５）
．  
．  
．  
【１５０５】
サブルーチン「ｃｉｒｃｌｅｓ」
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｘ，        ２      ＄＄  円の中心
ｙ，        ２
ｎ，        ２      ＄＄  円の数
ｒ，        ２      ＄＄  円の半径
ｄｅｆｉｎｅ    ｅｎｄ
＊
ｒｅｃｅｉｖｅ  ｘ，  ｙ，  ｎ
ａｔ        ｘ，ｙ
ｌｏｏｐ      ｒ  ←  １０，  ｎ  ＊  １０，  １０
．        ｃｉｒｃｌｅ    ｒ
ｅｎｄｌｏｏｐ
【１５０６】
システム変数
ｚａｒｇｓｉｎ      サブルーチンに渡す引数の数（ヌルも含む）。
ｚａｒｇｓｏｕｔ    戻される引数に予定された数。
ｚａｒｇｓ          実際に受け取ったヌル以外の引数の数。
【１５０７】
ｒｅｌｏｏｐ
ループ構造の最初に戻る。
【１５０８】
ｒｅｌｏｏｐ      ［条件］
【１５０９】
説明
ループ構造をリスタートするために使用される。タグがブランクのとき、または条件が真のとき、「ｅｎｄｌｏｏｐ」が実行された場合と同様に、「ｒｅｌｏｏｐ」によってそのループ構造の先頭に実行が戻る。条件が偽のとき、次のコマンドが引き続き実行される。「ｒｅｌｏｏｐ」は、インデントされた他の構造によってその「ｒｅｌｏｏｐ」が囲まれている場合であっても、戻り先となる「ｌｏｏｐ」コマンドと同じインデント・レベルに記述される。
【１５１０】
ループ構造についての詳細は、「ｌｏｏｐ」コマンドを参照されたい。
【１５１１】
例
次に、「ｃｏｕｎｔｅｒ」が１３になる場合をスキップする「繰り返し」ループの例を示す。
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｉｎｄｅｘ，  ２                      ＄＄  ループ・カウンタ
ｄｅｆｉｎｅ    ｅｎｄ
＊
ｌｏｏｐ      ｉｎｄｅｘ  ←  １，２０
ｒｅｌｏｏｐ    ｉｎｄｅｘ  ＝  １３
．        ａｔ  ｉｎｄｅｘ：５
．        ｗｒｉｔｅ        Ｔｈｉｓ  ｉｓ  ｌｉｎｅ  ＜＜ｓｈｏｗ，  ｉｎｄｅｘ＞＞
（この「ｗｒｉｔｅ」ステートメントの意味：：これは第〜行です」）
ｅｎｄｌｏｏｐ
【１５１２】
ｒｅｔｕｒｎ
サブルーチンの実行を終了し、オプションで引数を返す。
【１５１３】
ｒｅｔｕｒｎ    ［１６以下の引数］
【１５１４】
説明
現在のユニットが「ｄｏ」または「ｌｉｂｒａｒｙ」によって呼び出されたユニットである場合、直ちにそれを終了する。現在のユニットが「ｄｏ」または「ｌｉｂｒａｒｙ」によって呼び出されたユニットでない場合は実行エラーが生じる。
【１５１５】
ブランク・タグ形式では、呼び出したユニットに戻す引数を持たずにユニットを終了する。
【１５１６】
呼び出したユニット戻す引数のリストが指定されている場合は、呼び出したユニットに複数の戻り値を返す。戻すリスト内にヌル・エントリがある場合、受け取るときの引数のリスト内にあるそれに対応する値は変更されない。
【１５１７】
引数の引き渡しについては、「ｒｅｃｅｉｖｅ」および「ｎｏｃｈｅｃｋ」コマンドの説明を参照されたい。
【１５１８】
例
ユニット「ｔｅｓｔ」は、サブルーチン「ｓｑｕａｒｅ」を呼び出し、それに引数を１つ渡す。サブルーチン「ｓｑｕａｒｅ」はこの引数を受け取り、それを使用して計算を行い、結果の値をユニット「ｔｅｓｔ」の変数「ｎｕｍｓｑｕａｒ」に返す。
【１５１９】
ユニット「ｔｅｓｔ」
．
．
ｄｏ        ｓｑｕａｒｅ（１２；ｎｕｍｓｑｕａｒ）
ｓｈｏｗ      ｎｕｍｓｑｕａｒ
．
．
【１５２０】
サブルーチン「ｓｑｕａｒｅ」
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｎｕｍｂｅｒ
ｎｕｍｂｅｒ２
ｄｅｆｉｎｅ    ｅｎｄ
＊
ｒｅｃｅｉｖｅ  ｎｕｍｂｅｒ
ｃａｌｃ      ｎｕｍｂｅｒ２  ←  ｎｕｍｂｅｒ  ＊  ｎｕｍｂｅｒ
ｒｅｔｕｒｎ    ｎｕｍｂｅｒ２
【１５２１】
システム変数
その他
ｚａｒｇｓｉｎ      ヌルも含めた、サブルーチンに渡す引数の数。
ｚａｒｇｓｏｕｔ    呼び出した「ｄｏ」または「ｌｉｂｒａｒｙ」が期待する戻される引数の数。
ｚａｒｇｓ        「ｒｅｃｅｉｖｅ」によって実際に受け取ったヌル以外の引数の数。
【１５２２】
ｒｏｔａｔｅ
続くグラフィック・オブジェクトを回転する。
【１５２３】
ｒｏｔａｔｅ    ［角度  ［  ；ロケーション］］
【１５２４】
説明
続いてプロットされるグラフィック・オブジェクトを指定した角度（単位：度）だけ回転させる。この回転は、反時計回りに行われ、回転の中心は、オプションの「ロケーション」を指定しない限り、「ｏｒｉｇｉｎ」コマンドによって指定したプロットの原点となる。回転原点の指定は、これ以降に回転するオブジェクトだけに影響する。
【１５２５】
システムのデフォルトは、「ｉｎｉｔｉａｌ」および「ｓｔａｔｕｓ  ｒｅｓｔｏｒｅ；  ｄｅｆａｕｌｔ」によって各メイン・ユニットにおいて「ｒｏｔａｔｅ  ０」（回転なし）にセットされる。ブランク・タグ形式によっても、回転のない標準のデフォルトをセットすることができる。このデフォルトは、「ｒｏｔａｔｅ」に続いて「ｓｔａｔｕｓ  ｓａｖｅ；  ｄｅｆａｕｌｔ」を実行することによって変更することができる。
【１５２６】
「ｒｏｔａｔｅ」を含めたグラフィック変換コマンドの効果は、「ｅｎａｂｌｅ  ａｂｓｏｌｕｔｅ」によって一時的に無効になり、「ｄｉｓａｂｌｅ  ａｂｓｏｌｕｔｅ」によって復帰する。
【１５２７】
表示をコントロールするコマンドは、次に示す順序で適用される。
ｓｃａｌｅ
ｒｏｔａｔｅ
縦横比修正
ｏｒｉｇｉｎ
ウィンドウの相対座標
ウィンドウのクリッピング（切り取り）
【１５２８】
次に示すオブジェクトは回転の対象にならない。
テキスト
イメージ
ウィンドウ
文字数および行数を用いて指定したボックス、イレース（例：ｂｏｘ  １０，３）
【１５２９】
テキストの回転については、「ｔｅｘｔ  ｒｏｔａｔｅ」コマンドを参照されたい。
【１５３０】
例
スクリーンの中心に対してボックスを連続的に回転する。
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｄｅｇｒｅｅ    ，  ２
ｄｅｆｉｎｅ    ｅｎｄ
＊
ｏｒｉｇｉｎ    ｚｄｉｓｐｘ／２，  ｚｄｉｓｐｙ／２              ＄＄  スクリーンの中心
ｍｏｄｅ      ｘｏｒ
ｌｏｏｐ
．      ｒｏｔａｔｅ    ｄｅｇｒｅｅ
ｂｏｘ        −５０，−５０；  ５０，５０；１      ＄＄  ボックスをプロット
ｄｅｌａｙ      ０１
．      ｂｏｘ        −５０，−５０；  ５０，５０；１      ＄＄  ボックスをイレース
．      ｃａｌｃ      ｄｅｇｒｅｅ  ←  ｄｅｇｒｅｅ  ＋１
ｅｎｄｌｏｏｐ
【１５３１】
システム変数
ｚｒｏｔａｔｅ        回転角度（単位：度）
ｚｒｏｔａｔｅｘ      回転原点のＸ座標
ｚｒｏｔａｔｅｙ      回転原点のＹ座標
【１５３２】
ｓｃａｌｅ
グラフィック・オブジェクトのスケーリングを行う。
【１５３３】
ｓｃａｌｅ    ［  ｆａｃｔｏｒ  ｜  Ｘｆａｃｔｏｒ，Ｙｆａｃｔｏｒ  ［ロケーション］］
【１５３４】
説明
これ以降にプロットされるグラフィック・オブジェクトを「ｆａｃｔｏｒ」により示される倍率により、あるいはｘ（水平）方向とｙ（垂直）方向の倍率が個別に示されている場合（Ｘｆａｃｔｏｒ、Ｙｆａｃｔｏｒ）はそれに応じてスケーリングする。たとえば、「ｓｃａｌｅ  ．５」はこれ以降のグラフィックが２分の１のサイズでプロットされ、「ｓｃａｌｅ  ２，３」では、ｘ方向に２倍、ｙ方向に３倍のサイズでプロットされる。スケーリングは、オプションの「ロケーション」を指定しない限り、「ｏｒｉｇｉｎ」コマンドによって指定したプロットの原点と相対的に行われる。
【１５３５】
スケーリング原点の指定は、これ以降にスケーリングするオブジェクトだけに影響する。
【１５３６】
標準のデフォルトは、「ｉｎｉｔｉａｌ」および「ｓｔａｔｕｓ  ｒｅｓｔｏｒｅ；  ｄｅｆａｕｌｔ」によって各メイン・ユニットにおいて「ｓｃａｌｅ  １」（スケーリングなし）にセットされる。ブランク・タグ形式によっても、スケーリングのない標準のデフォルトをセットすることができる。このデフォルトは、「ｓｔａｔｕｓ  ｓａｖｅ；  ｄｅｆａｕｌｔ」を実行することによって変更することができる。
【１５３７】
「ｓｃａｌｅ」を含めたグラフィック変換コマンドの効果は、「ｅｎａｂｌｅ  ａｂｓｏｌｕｔｅ」によって一時的に無効になり、「ｄｉｓａｂｌｅ  ａｂｓｏｌｕｔｅ」によって復帰する。
【１５３８】
表示のグラフィック変換は、次に示す順序で適用される。
ｓｃａｌｅ
ｒｏｔａｔｅ
縦横比修正
ｏｒｉｇｉｎ
ウィンドウの相対座標
ウィンドウのクリッピング（切り取り）
【１５３９】
次に示すオブジェクトはスケーリングの対象にならない。
テキスト
イメージ
ウィンドウ
文字数および行数を用いて指定したボックス、イレース（例：ｂｏｘ  １０，３）
【１５４０】
例
中心が共通の一連のボックスを作成する。
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｆａｃｔｏｒ，  ２
ｄｅｆｉｎｅ    ｅｎｄ
＊
ｏｒｉｇｉｎ    ｚｄｉｓｐｘ／２，  ｚｄｉｓｐｙ／２
＊
ｌｏｏｐ        ｆａｃｔｏｒ  ←  １，１０
．              ｓｃａｌｅ      ｆａｃｔｏｒ
．              ｂｏｘ        −１０，−１０；１０，１０；１
ｅｎｄｌｏｏｐ
【１５４１】
システム変数
ｚｓｃａｌｅｘ      水平方向のスケーリング・ファクタ（８バイト実数）
ｚｓｃａｌｅｙ      垂直方向のスケーリング・ファクタ（８バイト実数）
ｚｓｃａｌｅｏｘ    スケーリング原点のＸ座標
ｚｓｃａｌｅｏｙ    スケーリング原点のＹ座標
【１５４２】
ｓｃｒｅｅｎ
スクリーン解像度のタイプをセットまたはテストする。
ｓｃｒｅｅｎ    ［  ｔｅｓｔ，］  ｔｙｐｅ  ［，ｍｏｄｅ］  ［，ｒｅｓｏｌｕｔｉｏｎ］  ［，ｃｈｒｏｍｅ］
ｓｃｒｅｅｎ    ［  ｔｅｓｔ，］  ｖａｒｉａｂｌｅ，  ｔｙｐｅ，  ｍｏｄｅ，  ｒｅｓｏｌｕｔｉｏｎ，  ｃｈｒｏｍｅ
ｓｃｒｅｅｎ    ｎａｔｉｖｅ  ｜  ｅｄｉｔ
ｔｙｐｅ（タイプ）キーワードおよび値
ｃｇａ        ０
ｅｇａ        ３
ｖｇａ        １０
ｍｃｇａ      １１
ｃｖｇａ      １
ｍｏｄｅ（モード）キーワードおよび値
ｇｒａｐｈｉｃｓ  ０
ｔｅｘｔ          １
ｒｅｓｏｌｕｔｉｏｎ（分解能）キーワードおよび値
ｌｏｗ            ０
ｍｅｄｉｕｍ      １
ｈｉｇｈ          ２
ａｌｔ１          ３
ａｌｔ２          ４
ａｌｔ３          ５
ｃｈｒｏｍｅ（クローム）キーワードおよび値
ｃｏｌｏｒ        ０
ｍｏｎｏ          １
ｔｅｓｔ：  指定されたセッティングが有効か否かだけをチェックし、結果を「ｚｒｅｔｕｒｎ」に返す。実際にセッティングは変更しない。
ａｃｔｉｖｅ：  スクリーンを指定されたディスプレイ・ドライバに関する最大可能セッティング（ｖｇａまで）にセットする。
ｖａｒｉａｂｌｅ：「ｔｙｐｅ」「ｍｏｄｅ」「ｒｅｓｏｌｕｔｉｏｎ」および「ｃｈｒｏｍｅ」について、キーワードではなく数値を使用する。
【１５４３】
説明
スクリーン・ハードウェアを指定したタイプ、モード、解像度およびクロームにセットする。スクリーン・セッティングの選択は、ディスプレイ・ドライバ、ディスプレイ・コントローラ、および使用中のモニタによって制限される。ＤＯＳソフトウェア・プラットフォームを直接使用する各種のＩＢＭ  ＰＣ上で走るコースウェアの作成においては、共通のディスプレイ・ハードウェアのうち、もっとも低いものと互換性があるスクリーンを選択する必要がある。
【１５４４】
通常「ｓｃｒｅｅｎ」コマンドは、レッスンの開始時に実行される「＋ｉｎｉｔｉａｌ」コントロール・ブロック内に一度だけ現れる。
【１５４５】
「ｓｃｒｅｅｎ」コマンドがスクリーン・セッティングを変更すると、次に示すステートメントを実行した場合と同様に、スクリーンがイレースされ、表示ページが１にリセットされ、すべてのプロット・パラメータが「ｓｔａｎｄａｒｄ」にリセットされる。
ｓｔａｔｕｓ    ｒｅｓｔｏｒｅ；  ｓｔａｎｄａｒｄ
ｓｔａｔｕｓ    ｓａｖｅ；  ｄｅｆａｕｌｔ
【１５４６】
ショートハンド表記
もっとも一般的なスクリーン・セッティングについては、すべての引数を入力しないでも選択できる。「ｇｒａｐｈｉｃｓ」および「ｃｏｌｏｒ」はデフォルトのセッティングである。解像度は、通常、ディスプレイ・コントローラのタイプに対する標準値がデフォルトになる。
【１５４７】
【表１２】
2009009584.tif 000014
【１５４８】
例
例１
６４０×４８０×１６色（ｖｇａ，ｍｅｄｉｕｍ，ｇｒａｐｈｉｃｓ，ｃｏｌｏｒ）のスクリーンをセットする。このスクリーンのセットが可能でないとき、分岐を終了して呼び出したシステムに戻る前にメッセージを表示する。
ｓｃｒｅｅｎ  ｖｇａ
ｉｆ      ｎｏｔ（ｚｒｅｔｕｒｎ）        ＄＄  セット不可能の場合
．        ｗｒｉｔｅ        Ｗａｒｎｉｎｇ．
ＶＧＡ  Ｓｃｒｅｅｎ  Ｔｙｐｅ  ｎｏｔ  ａｖａｉｌａｂｌｅ．
（この「ｗｒｉｔｅ」ステートメントの意味：「警告：ＶＧＡスクリーン・タイプは使用できません。」）
ｐａｕｓｅ
．       ｊｕｍｐ        ＝ｅｘｉｔ          ＄＄  ルータまたはＤＯＳに戻る
ｅｎｄｉｆ
【１５４９】
例２
１２８０×１０２４×２５６色のスクリーンが使用できるか否かをテストする。使用可能である場合は、高解像度バージョンの化学のレッスンを使用する。不可能な場合は、低解像度バージョンのレッスンを使用する。
ｓｃｒｅｅｎ    ｔｅｓｔ，  ｅｖｇａ，  ａｌｔ２
ｉｆ        ｚｒｅｔｕｒｅ                  ＄＄  真（−１）の場合
．        ｊｕｍｐ    ｃｈｅｍＨｉｇｈ，ｓｔａｒｔ    ＄＄  高解像度バージョンを使用する
ｅｌｓｅ
．        ｊｕｍｐ    ｃｈｅｍＬｏｗ，ｓｔａｒｔ    ＄＄  低解像度バージョンを使用する
ｅｎｄｉｆ
【１５５０】
スクリーンのタイプおよびディスプレイ解像度
【表１３】
2009009584.tif 000015
＊    ＶＧＡ．ＤＩＳまたはＥＶＧＡ．ＤＩＳ使用時の表示可能な色数は２６２，１４４色。
＊＊    各スクリーンをサポートするディスプレイ・ドライバは、次に示す文字で示される。
Ｃ      ＣＧＡ．ＤＩＳ
Ｅ      ＥＧＡ．ＤＩＳ
Ｖ      ＶＧＡ．ＤＩＳ
Ｓ      ＥＶＧＡ．ＤＩＳ
＊＊＊  直接またはＶＥＳＡ標準を通じてサポートされている最高スーパーＶＧＡ。
【１５５１】
システム変数
ｚｒｅｔｕｒｎ
「ｓｃｒｅｅｎ」コマンドは、「ｚｒｅｔｕｒｎ」を次の値にセットする。
−２  ＯＫ、スクリーンは変更しない：
要求スクリーンはすでにセットされている。
−１  ＯＫ、スクリーンを変更した（「ｓｃｒｅｅｎ  ｔｅｓｔ」形式では変更なし）
０  ディスプレイ・ドライバ・ファイルに無効なスクリーン
１  ディスプレイ・アダプタは要求されたスクリーンをサポートしてい
ない。
【１５５２】
「ｓｃｒｅｅｎ」コマンドの実行が成功すると、次に示すシステム変数がリセットされる。ただし、「ｓｃｒｅｅｎ  ｔｅｓｔ」形式では変更されない。
【１５５３】
ｚｓｃｒｅｅｎｔ      選択されたスクリーン・タイプ
０              ｃｇａ
２              ｈｅｒｃｕｌｅｓ
３              ｅｇａ
９              ａｔｔ
１０              ｖｇａ
１１              ｍｃｇａ
１４              ｅｖｇａ
【１５５４】
ｚｓｃｒｅｅｎｍ      スクリーン・アドレッシング・モード
０              ｇｒａｐｈｉｃｓ（グラフィックス）
１              ｔｅｘｔ（テキスト）
【１５５５】
ｚｓｃｒｅｅｎｒ      スクリーン解像度
０              ｌｏｗ
１              ｍｅｄｉｕｍ
２              ｈｉｇｈ
３              ａｌｔ１
４              ａｌｔ２
Ｓ              ａｌｔ３
【１５５６】
ｚｓｃｒｅｅｎｃ      スクリーン・クローム
０              ｃｏｌｏｒ（カラー）
１              ｍｏｎｏ（モノ）
【１５５７】
ｚｓｃｒｅｅｎ        ＢＩＯＳによってレポートされるスクリーン・タイプ
【表１４】
2009009584.tif 000016
【１５５８】
ｚｓｃｒｅｅｎｈ      使用中のディスプレイ・ドライバ・ファイル（．ＤＩ
Ｓファイル）（実際に検出されたディスプレイ・ハード
ウェア用に適合される：たとえばＥＶＧＡ．ＤＩＳがＶ
ＧＡハードウェアを検出すると「ｚｓｃｒｅｅｎｈ」は
１０になる）。
０              ｃｇａ
２              Ｈｅｒｃｕｌｅｓ
３              ｅｇａ
９              ａｔｔ
１０              ｖｇａ
１１              ｍｃｇａ
１４              ｅｖｇａ
【１５５９】
ｚｉｎａｘｃｏｌ      現在のスクリーン・タイプで使用可能な最大色数。
ｚｐａｌｉｎｃｒ      表示色に効果が現れるために必要なＲＧＢ値におけ最
小の変化（「ｚｉｎｔｉｎｃｒ」参照）。
ｚｉｎｔｉｎｃｒ      表示色に効果が現れるために必要な強度値における最
小の変化（「ｚｐａｌｉｎｃｒ」参照）。
ｚｍａｘｐａｇｅ      使用可能な最大ページ数。
【１５６０】
ｓｅｅｄ
乱数のシードを獲得またはセットする。
【１５６１】
ｓｅｅｄ      ｖａｒｉａｂｌｅ４  ［；  ｓｅｔ］
【１５６２】
説明
乱数の計算に置いて使用される。新しい乱数が生成されるごとにシステムはシードを新しくセットする。乱数のシードは、「ｐｅｒｍ」コマンドおよび「ｒａｎｄｉ」関数ならびに「ｒａｎｄｆ」関数によって使用される。
【１５６３】
現在のシードは、「ｓｅｅｄ」コマンドに対する単一の引数として４バイトの整数変数に取り込むことができる。シードは、４バイトの整数値（０から４，２９４，９６７，２９５まで）を指定し、「ｓｅｔ」キーワードを使用することによってセットできる。なおシステムは、スタートアップ時に「ｚｃｌｏｃｋ」の任意値を使用してシードをセットする。
【１５６４】
「ｓｅｅｄ」コマンドは、通常、反復可能な乱数列に使用される。初期シードをセーブし、その後復元することによって同一の乱数列を生成することができる。たとえば、同じシード値から開始して生成した２つの順列リストは、まったく同じになる。
【１５６５】
例
まず、１００個のドットをランダムに散らばっているグラフをスクリーンに配置し、間を少し置いてからイレースする。これにおいて、ランダム・ドットを最初に生成する前にシードをセーブし、次にそれを復元して同一のドットを生成することにより「イレース」する。
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｓａｖｅ，４，ｉｎｔｅｇｅｒ
ｉｎｄｅｘ，２
ｄｅｆｉｎｅ    ｅｎｄ
．．．
ｓｅｅｄ      ｓａｖｅ                ＄＄  シードをセーブする
ｌｏｏｐ      ｉｎｄｅｘ  ←  １，  １００
．            ｄｏｔ          ｉｎｄｅｘ，ｒａｎｄｉ（１００）
ｅｎｄｌｏｏｐ
ｐａｕｓｅ
ｍｏｄｅ      ｅｒａｓｅ
ｓｅｅｄ      ｓａｖｅ；  ｓｅｔ      ＄＄  セーブしたシードを復元する
ｌｏｏｐ      ｉｎｄｅｘ  ←  １，  １００
【１５６６】
ｓｅｔ
一連の値を連続する変数に割り当てる。
【１５６７】
ｓｅｔ      ｖａｒｉａｂｌｅ  ←  値１，  値２，．．．
ｖａｒｉａｂｌｅ    割り当てのための開始変数。
【１５６８】
説明
指定された変数のロケーションから開始する連続したメモリ・ロケーションに値のリストを割り当てる。割り当て矢印の右隣の最初の値は、「ｖａｒｉａｂｌｅ」に割り当てられる。その後、「ｖａｒｉａｂｌｅ」に続く変数の定義によらず、「ｖａｒｉａｂｌｅ」と同じサイズ、同じタイプの連続するメモリ・ロケーションとしてタグ内の残りの値が割り当てられる。「ｓｅｔ」ステートメント内の変数は、しばしば配列の最初のエレメントになるが、「ｃａｌｃ」に有効な変数であればどのような変数でもよい。「ｓｅｔ」のタグは、続く行のタグ・フィールドに継続して記述することができる。
【１５６９】
割り当てをスキップするときはヌル「値」を使用する。
【１５７０】
例
一連の値を配列に割り当てる。「ａｒｒａｙ（３）」に対する割り当てがなく、オリジナルの値が保持される点に注意されたい。
ｄｅｆｉｎｅ    ｌｏｃａｌ
ａｒｒａｙ（４），  ２
ｄｅｆｉｎｅ    ｅｎｄ
ｓｅｔ          ａｒｒａｙ（１）←  １５，  ９６， ，ｓｃｏｒｅ＊１００
ｏｒ
ｓｅｔ          ａｒｒａｙ（１）←  １５，  ＄＄  複数行にわたって記述
する場合
９６，  ，
ｓｃｏｒｅ＊１００
【１５７１】
上記の「ｓｅｔ」コマンドは、次に示す「ｃａｌｃ」コマンドに等しい。
ｃａｌｃ      ａｒｒａｙ（１）  ←  １５
ｃａｌｃ      ａｒｒａｙ（２）  ←  ９６
ｃａｌｃ      ａｒｒａｙ（４）  ←  ｓｃｏｒｅ＊１００
【１５７２】
ｓｅｔｂｉｔ
変数内のビットをセットする。
【１５７３】
ｓｅｔｂｉｔ  ｖａｒｉａｂｌｅ，ｂｉｔ，ｖａｌｕｅ
ｖａｒｉａｂｌｅ  セットするビットを含んでいる変数。
ｂｉｔ            セットするビット番号
ｖａｌｕｅ        ビットの値（０または１）
【１５７４】
説明
変数内の単一のビットをセットする。このコマンドを使用すると、単一の変数を多数の１ビット・フラグとして使用できるので、可変スペースの使用がより効率的になる。
【１５７５】
ビット１は、最左翼ビット（最上位ビット）である。可変境界をクロスするビット番号を指定することができる。ビットをセットする値が０または１でない場合は、その値の最右翼ビットが使用される。
【１５７６】
算術関数「ｂｉｔ  （ｖａｌｕｅ，  ｂｉｔｓ）」を使用すればセットしたビットの「読み出し」が、また「ｂｉｔｃｎｔ（ｖａｌｕｅ，  ｂｉｔ）」を使用すればセット変数内にセットされているビット数をカウントすることができる。
【１５７７】
例
４バイトの変数「ｃｏｒｒｅｃｔ」内の１ビット・フラグを使用し、学習者に対する２５の質問の判定を追跡する。現在の質問番号は「ｉｎｄｅｘ」に格納される。質問は、配列「ｐｒｏｂ（）」内にあり、答えは配列「ａｎｓ（）」内に収められる。試験終了後、「ｂｉｔｃｎｔ」関数を使用して正解の数を表示する。
＊        ２５の質問にすべて答えるまでループ、質問を表示し、
＊        答えを読み取り、適切にフラグをセットする。
ｌｏｏｐ  ｉｎｄｅｘ  ←  １，  ２５
．        ａｔ        ５：３
．        ｓｈｏｗａ  ｐｒｏｂ（ｉｎｄｅｘ）  ＄＄  質問を表示
．        ａｒｒｏｗ          ２０：３
．        ａｎｓｗｅｒ    ＜＜ｓｈｏｗａ，  ａｎｓｗ（ｉｎｄｅｘ）＞＞
．        ．  ｓｅｔｂｉｔ ｃｏｒｒｅｃｔ，ｉｎｄｅｘ，１  ＄＄  正解
．        ｎｏ
．        ． ｓｅｔｂｉｔ  ｃｏｒｒｅｃｔ，ｉｎｄｅｘ，０  ＄＄  不正解
．        ．  ｊｕｄｇｅ  ｑｕｉｔ          ＄＄  「ａｒｒｏｗ」を終了
．        ｅｎｄａｒｒｏｗ
．        ｅｒａｓｅ        ＄＄  次の質問のためにスクリーンをイレース
ｅｎｄｏｌｏｏｐ
＊
ａｔ        ２５：３
ｗｒｉｔｅ    Ｔｈｅ  ｎｕｍｂｅｒ  ｃｏｒｒｅｃｔ  ｉｓ  ＜＜
ｓ，ｂｉｔｃｎｔ（ｃｏｒｒｅｃｔ，２５）  ＞＞
（この「ｗｒｉｔｅ」ステートメントの意味：正解は〜個でした。」）
【１５７８】
ｓｅｔｃ
選択的に変数に値のリストをセットする。
【１５７９】
ｓｅｔｃ    セレクタ；  ｖａｒｉａｂｌｅ  ←  値（１つ以上）；値（１つ以上）；．．．
ｖａｒｉａｂｌｅ    値のリストを割り当てる開始変数。
【１５８０】
説明
「ｓｅｔ」の選択形式。「ｓｅｔｃ」は、「セレクタ」の値に基づいてタグ内の値のリストの１つを選択し、それらの値を連続する変数に割り当てる。
【１５８１】
各値のリストは、セミコロン（；）によって区切らなければならない。リスト内の値は、カンマ（，）を用いて区切る必要がある。ヌル値を使用すれば、割り当てがスキップされる。「ｓｅｔｃ」のタグは、続く行のタグ・フィールドに継続して記述してもよい。
【１５８２】
開始変数は配列である必要はない。その後に続く可変スペースの連続したバイトは、開始変数の長さとタイプに基づいて割り当てられる。
【１５８３】
例
「ｆｌａｇ」に基づいて一連の値を配列に割り当てる。
ｄｅｆｉｎｅ    ｌｏｃａｌ
ａｒｒａｙ（１０），  ４
ｆｌａｇ，  １
ｄｅｆｉｎｅ    ｅｎｄ
＊
ｓｅｔｃ      ｆｌａｇ，  ａｒｒａｙ（１）  ←  １，２，３，４；
４，３，２，１；；１，２，，８
【１５８４】
上記の「ｓｅｔｃ」コマンドは、次に示すコマンドに等しい。
ｉｆ        ｆｌａｇ  ＜  ０
．        ｃａｌｃ    ａｒｒａｙ（１）    ←  １
．        ｃａｌｃ    ａｒｒａｙ（２）    ←  ２
．        ｃａｌｃ    ａｒｒａｙ（３）    ←  ３
．        ｃａｌｃ    ａｒｒａｙ（４）    ←  ４
ｅｌｓｅｉｆ    ｆｌａｇ    ＝  ０
．        ｃａｌｃ    ａｒｒａｙ（１）    ←  ４
．        ｃａｌｃ    ａｒｒａｙ（２）    ←  ３
．        ｃａｌｃ    ａｒｒａｙ（３）    ←  ２
．        ｃａｌｃ    ａｒｒａｙ（４）    ←  １
ｅｌｓｅｉｆ    ｆｌａｇ    ＝１      ＄＄  スキップされるセクション
ｅｌｓｅｉｆ    ｆｌａｇ    ＞＝  ２
．              ｃａｌｃ    ａｒｒａｙ（１）    ←  １
．              ｃａｌｃ    ａｒｒａｙ（２）    ←  ２
．              ｃａｌｃ    ａｒｒａｙ（４）    ←  ８
ｅｎｄｉｆ
最後のリスト割り当てにおいて「ａｒｒａｙ（３）」がスキップされていることに注意されたい。
【１５８５】
ｓｈｏｗ
変数または数式を表示する。
【１５８６】
ｓｈｏｗ      式  ［，ｆｉｅｌｄ  ［，ｒｉｇｈｔ］］
ｗｒｉｔｅ    ＜＜ｓｈｏｗ  ｜ｓ，式［，ｆｉｅｌｄ［，ｒｉｇｈｔ］］＞＞
ｆｉｅｌｄ    小数点も含めた表示する最大桁数。
ｒｉｇｈｔ    表示する小数点以下の桁数。
【１５８７】
説明
数値変数または式の値を表示する。オプションのタグは、数の表示フォーマットをコントロールする。値はフィールド内に左寄せで表示され、スクリーン・ロケーションは、最後の表示文字の次の文字ポジションに更新される（先頭のブランクまたは、ゼロによる末尾のパディングを伴わない）。
【１５８８】
小数点に左側の桁数は、「ｆｉｅｌｄ」の値から「ｒｉｇｈｔ」の値を減じ、さらに１を減じた値に等しい。
【１５８９】
「ｓｈｏｗ」は、次に示すエラー条件を示すために特殊記号を使用する。
＊＊＊＊＊＊    表示する数が指定されたフィールドに収まらない。
？？？？？？    数が無効である。これは通常、不正な浮動小数点演算の結果としてもたらされる。
【１５９０】
次に示すデフォルトの値を使用する場合は、オプションのタグを省略することができる。
【表１５】
2009009584.tif 000017
【１５９１】
例
例１
１０のクイズの成績を表示する。
ａｔ        ３：５
ｗｒｉｔｅ   Ｈｅｒｅ  ａｒｅ  ｙｏｕｒ  ｌａｓｔ  １０  ｑｕｉｚ
ｓｃｏｒｅｓ：
（この「ｗｒｉｔｅ」ステートメントの意味：「最後の１０問の成績です：」）
ｌｏｏｐ      ｉｎｄｅｘ  ←  １，  １０
．            ａｔ  ｉｎｄｅｘ＋５：１０
．            ｓｈｏｗ      ｑｕｉｚｓｃｏｒ（ｉｎｄｅｘ）
ｅｎｄｌｏｏｐ
【１５９２】
例２
「ｗｒｉｔｅ」ステートメント内で埋め込み「ｓｈｏｗ」コマンドを使用して、ページ番号を表示の上端に示す。
１
＊
ａｔ        １：６５
ｗｒｉｔｅ    Ｐａｇｅ      ＜＜ｓｈｏｗ，ｐａｇｅ  ＞＞  ｏｆ  ５０．
【１５９３】
ｓｈｏｗａ
変数に格納されているテキストを表示する。
【１５９４】
ｓｈｏｗａ    ｂｕｆｆｅｒ  ［，ｌｅｎｇｔｈ］
ｗｒｉｔｅ    ＜＜ｓｈｏｗａ  ｜ａ，ｂｕｆｆｅｒ［，ｌｅｎｇｔｈ］＞＞
【１５９５】
説明
変数「ｂｕｆｆｅｒ」から「ｌｅｎｇｔｈ」で示される数の文字を英数文字として表示する。「ｌｅｎｇｔｈ」を省略した場合には、「ｂｕｆｆｅｒ」の定義長が使用される。あらゆる数字変数の内容の表示が可能であり、それに非数字が含まれる場合でも表示することができる。
【１５９６】
「ｓｈｏｗａ」実行後は、スクリーン・ロケーションが最後の表示文字の次の文字ポジションに更新される。表示されるテキスト内のエスケープ・シーケンスの結果生じたプロット・パラメータの変更は、「ｓｈｏｗａ」実行後も有効になる。
【１５９７】
例
例１
ユーザ名を「ｓｔｕｎａｍｅ」に格納した後、「ｓｈｏｗａ」を使用して表示する。
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｓｔｕｎａｍｅ，  ２０        ＄＄  ユーザ名
ｄｅｆｉｎｅ    ｅｎｄ
＊
ａｔ            ３：３
ｗｒｉｔｅ      Ｐｌｅａｓｅ  ｅｎｔｅｒ  ｙｏｕｒ  ｎａｍｅ．
（この「ｗｒｉｔｅ」ステートメントの意味：「名前を入力してください。」）
ｌｏｎｇ      ２０
ａｒｒｏｗ    ４：３
ｓｔｏｒｅａ    ｓｔｕｎａｍｅ，  ｚｃｏｕｎｔ
ｏｋ
ｅｎｄａｒｒｏｗ
ａｔ        ８：３
ｗｒｉｔｅ    Ｔｈａｎｋ  ｙｏｕ，  ＄＄＄  末尾のスペースを保持
ｓｈｏｗａ    ｓｔｕｎａｍｅ，  ｚｃｏｕｎｔ
ｗｒｉｔｅ    ．      ＄＄  最後にピリオドを付ける
（２の「ｗｒｉｔｅ」ステートメントの意味：「お疲れさま、〜さん。」）
【１５９８】
例２
現在のレッスン名およびユニット名を左上コーナーに表示する。
ａｔ        １：１
ｗｒｉｔｅ    ＜＜ａ，ｚｌｅｓｓｏｎ  ＞＞：＜＜  ａ，ｚｕｎｉｔ  ＞＞
【１５９９】
ｓｈｏｗｈ
１６進表記でデータを表示する。
【１６００】
ｓｈｏｗｈ    ｂｕｆｆｅｒ  ［，ｌｅｎｇｔｈ］
ｗｒｉｔｅ    ＜＜ｓｈｏｗｈ  ｜ｈ，ｂｕｆｆｅｒ［，ｌｅｎｇｔｈ］＞＞
【１６０１】
説明
データを１６進形式で「ｌｅｎｇｔｈ」で示される桁数だけ表示する。「ｌｅｎｇｔｈ」を省略した場合には、「ｂｕｆｆｅｒ」の全定義長の表示に充分な桁数が使用される。変数の各バイトは、２桁の１６進数として表される。任意の長さの変数を表示することができる。
【１６０２】
「ｓｈｏｗｈ」実行後は、スクリーン・ロケーションが最後の表示文字の次の文字ポジションに更新される。
【１６０３】
例
実数変数の内容を１６進形式で正確に表示する。
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｆｌｏａｔ，  ８，  ｒｅａｌ              ＄＄  実数変数
ｄｅｆｉｎｅ    ｅｎｄ
＊
ｃａｌｃ      ｆｌｏａｔ  ←  π          ＄＄  πの値
ａｔ        ５：３
ｗｒｉｔｅ    π  ｌｏｏｋｓ  ｌｉｋｅ  ｔｈｉｓ  ｉｎ  ”ｈｅｘ”
（この「ｗｒｉｔｅ」ステートメントの意味：「１６進数でπを表すと次のようになります。」）
ａｔ        ６：３
ｓｈｏｗｈ      ｆｌｏａｔ
【１６０４】
ｓｈｏｗｔ
数値変数または数式を表形式で表示する。
【１６０５】
ｓｈｏｗｔ    ｖａｒｉａｂｌｅ  ［，ｆｉｅｌｄ  ［，ｒｉｇｈｔ］］
ｗｒｉｔｅ    ＜＜ｓｈｏｗｔ  ｜  ｔ，ｖａｒｉａｂｌｅ  ［，ｆｉｅｌｄ  ［，ｒｉｇｈｔ］］＞＞
ｆｉｅｌｄ    先頭の空白、数字および小数点を含めた表示フィールドの
合計サイズ。
ｒｉｇｈｔ    表示する小数点以下の桁数。
【１６０６】
説明
数値変数または数式の値を、必要に応じて先頭の空白および末尾のゼロを補って右寄せの表形式で表示する。
【１６０７】
「ｓｈｏｗｔ」実行後は、スクリーン・ロケーションが最後の表示文字の次の文字ポジションに更新される。
【１６０８】
デフォルト値
オプションのタグを省略すると、次に示すデフォルト値が使用される。
【表１６】
2009009584.tif 000018
【１６０９】
「ｓｈｏｗ」は、次に示すエラー条件を示すために特殊記号を使用する。
＊＊＊＊＊＊    表示する数が指定されたフィールドに収まらない。
？？？？？？    数が無効である。これは通常、不正な浮動小数点演算の結果としてもたらされる。
【１６１０】
例
いくつかのエントリを表形式で表示する。
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｒａｔｅ（４），  ８，  ｒｅａｌ          ＄＄  賃金レート
ｄｅｆｉｎｅ    ｅｎｄ
＊
ｃａｌｃ  ｒａｔｅ（１）  ←  ４．０５
ｒａｔｅ（２）  ←  １２．７６
ｒａｔｅ（３）  ←  ８．６３
ｒａｔｅ（４）  ←  ５．２５
ａｔ      ５：３
ｗｒｉｔｅ    Ｙｏｕｒ  ｐａｙｒｏｌｌ  ｓｉｔｕａｔｉｏｎ  ｎｏｗ
ｌｏｏｋｓ  ｌｉｋｅ  ｔｈｉｓ：
（この「ｗｒｉｔｅ」ステートメントの意味：「あなたの賃金は次のようになっています。」）
ａｔ        ７：３
ｗｒｉｔｅ  ＥＭＰＬＯＹＥＥ    ＨＯＵＲＬＹ  ＲＡＴＥ ＹＥＡＲＬＹ
ＳＡＬＡＲＹ
（この「ｗｒｉｔｅ」ステートメントの意味：「従業員名  時給  年間支給額」）
ａｔ
８：３０
ｗｒｉｔｅ    Ａｎｄｅｒｓｏｎ
Ｃａｒｍｅｎ
Ｅｎｇｄａｈｌ
Ｌｉｌｌｉｔｈ
（この「ｗｒｉｔｅ」ステートメントの意味：「アンダーソン  カルメン  エンゲル  リリス」）
ａｔ        ８：１８
ｗｒｉｔｅ    ＜＜ｔ，ｒａｔｅ（１），５，２＞＞
＜＜ｔ，ｒａｔｅ（２），５，２＞＞
＜＜ｔ，ｒａｔｅ（３），５，２＞＞
＜＜ｔ，ｒａｔｅ（４），５，２＞＞
ａｔ        ８：３１
ｗｒｉｔｅ    ＄＜＜ｔ，ｒａｔｅ（１）＊２０８０，８，２＞＞
＄＜＜ｔ，ｒａｔｅ（２）＊２０８０，８，２＞＞
＄＜＜ｔ，ｒａｔｅ（３）＊２０８０，８，２＞＞
＄＜＜ｔ，ｒａｔｅ（４）＊２０８０，８，２＞＞
【１６１１】
ｓｈｏｗｖ
ヌル・コードも含めてテキスト・バッファを表示する。
【１６１２】
ｓｈｏｗｖ    ｂｕｆｆｅｒ  ［，ｌｅｎｇｔｈ］
ｗｒｉｔｅ    ＜＜ｓｈｏｗｖ  ｜ｖ，ｂｕｆｆｅｒ［，ｌｅｎｇｔｈ］＞＞
【１６１３】
説明
ヌル文字（１６進の値ｈ００）も含めてバッファの内容を英数文字として表示し、ヌル文字はスクリーン上での実際のプロットにおいて、空白文字コードに変換して表示される。「ｓｈｏｗａ」コマンドの場合は、この「ｓｈｏｗｖ」とは異なり、ヌル文字が無視される。
「ｓｈｏｗｖ」は、基本的に「ｐａｃｋ」および「ｐｕｔ」の埋め込み形式として使用される。その場合の「ｓｈｏｗｖ」は、ヌル文字を他の文字と同様に扱い、それを無視することもなく、またスペースに変換することもない。
【１６１４】
「ｓｈｏｗｖ」実行後は、スクリーン・ロケーションが最後の表示文字の次の文字ポジションに更新される。
【１６１５】
例
次に示す例においては、「ｓｈｏｗａ」により「ＡＢＣ」が、「ｓｈｏｗｖ」により「ＡＢ  Ｃ」が表示される。
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｖａｒ，４
ｄｅｆｉｎｅ    ｅｎｄ
＊
ｃａｌｃ    ｖａｒ←ｈ４１  ４２ ００  ４３＄＄  Ａ  Ｂ  ｎｕｌｌ  Ｃ
ａｔ        １０：１０
ｓｈｏｗａ    ｖａｒ                        ＄＄  ＡＢＣ
ａｔ        １１：１０
ｓｈｏｗｖ    ｖａｒ                        ＄＄  ＡＢ  Ｃ
【１６１６】
ｓｔａｔｕｓ
表示ステータス情報のセーブおよび復元を行う。
【１６１７】
ｓｔａｔｕｓ  キーワード
ｓａｖｅ        現在の表示セッティングをメモリ・ブロックにセーブする。
ｒｅｓｔｏｒｅ  メモリ・ブロックから表示セッティングを復元する。
ｄｅｌｅｔｅ    名前を付けたステータスのメモリ・ブロックを削除する。
ｒｅｓｅｔ      すべてのステータスのメモリ・ブロックを削除する。
【１６１８】
説明
現在のプロット・パラメータ（フォアグラウンド色、バックグラウンド色、モード、フォント等）のステータスをメモリ・プール・ブロックまたはデフォルト・バッファにセーブする。セーブしたステータスは、その後復元し、すべてのプロット・パラメータをその時に状態に戻すことができる。「ｓｔａｔｕｓ」は、サブルーチン呼び出しの前後にわたってプロット・パラメータを維持するため、あるいはデフォルトにリセットすることによってレッスンにおけるすべてのメイン・ユニットの外観を共通にするために使用することができる。「ｒｅｓｔｏｒｅ」オプションは、システムの「ｓｔａｎｄａｒｄ」セッティング、またはユニット内の直前の「ａｒｒｏｗ」におけるセッティングの復元を可能にする。
【１６１９】
「ｓｔａｔｕｓ」は、次に示すアイテムのセーブおよび復元を行う。
●  現在のスクリーン・ロケーション
●  マージン（左右とも）
●  現在の標準フォントも含めたロード済みの全フォント
●  パレット（要求されている場合）
【１６２０】
「ｓｔａｔｕｓ」は、次に示すコマンドのセッティングについてもセーブおよび復元を行う。ここでは、それぞれのシステム「ｓｔａｎｄａｒｄ」セッティングを用いて示しているが、これらは、「ｓｔａｔｕｓ  ｒｅｓｔｏｒｅ；ｓｔａｎｄａｒｄ」オプション（または「ｉｎｉｔｉａｌ」コマンド）によりブロックとしてセットすることができる。
●  ｂｌｉｎｋ      ｏｆｆ
●  ｃｏｌｏｒ      ｗｈｉｔｅ
●  ｃｌｏｒｅ      ｂｌａｃｋ
●  ｃｏｌｏｒｇ    ｂｌａｃｋ
●  ｄｉｓａｂｌｅ  ｃｕｒｓｏｒ
●  ｅｎａｂｌｅ    ｆｏｎｔ
●  ｆｏｎｔ        ｓｔａｎｄａｒｄ；ｓｔａｎｄａｒｄ
●  ｍｏｄｅ        ｗｒｉｔｅ
●  ｏｒｉｇｉｎ    ０，０
●  ｒｏｔａｔｅ    ０
●  ｓｃａｌｅ      １，１
●  ｔｅｘｔ        ａｌｉｇｎ；ｂａｓｅｌｉｎｅ（文字そろえ；ベースラ
イン）
ｂｏｌｄ；ｏｆｆ            （太字；オフ）
ｄｅｌａｙ；０            （遅延；０）
ｄｉｒｅｃｔｉｏｎ；ｒｉｇｈｔ（方向；右）
ｉｎｃｒｅｍｅｎｔ；０，０（インクリメント；０，０）
ｉｔａｌｉｃ；ｏｆｆ          （斜体；オフ）
ｍａｒｇｉｎ；ｗｒａｐ        （マージン；ラップ）
ｎａｒｒｏｗ；ｏｆｆ          （狭幅；オフ）
ｒｅｖｅａｌ；ｏｆｆ          （隠し文字表示；オフ）
ｒｏｔａｔｅ；０              （回転；０）
ｓｈａｄｏｗ；ｏｆｆ，ｗｈｉｔｅ（影付き；オフ、ホ
ワイト）
ｓｉｚｅ；１                  （サイズ；１）
ｓｐａｃｉｎｇ；ｆｉｘｅｄ    （間隔；固定）
ｕｎｄｅｒｌｉｎｅ；ｏｆｆ，ｆｏｒｅｇｎｄ
（アンダーライン；オフ、フォアグラウンド）
●  ｔｈｉｃｋ      ｏｆｆ
【１６２１】
ｓｔａｔｕｓ  ｓａｖｅ；  ’名前’  ｜ｌｏｃａｌ  ［；  ｐａｌｅｔｔｅ］
ｓｔａｔｕｓ  ｓａｖｅ；  ｄｅｆａｕｌｔ  ［；  ｐａｌｅｔｔｅ］
現在のプロット・セッティングをメモリ・プール・ブロックまたは「ｄｅｆａｕｌｔ」（デフォルト）バッファにセーブする。名前を付けたブロックにセーブしたセッティングは、この後、任意のユニットで復元することができる。「ｐａｌｅｔｔｅ」修飾子を使用すれば、現在のパレットのセッティングもセーブされる。
【１６２２】
「ｌｏｃａｌ」キーワードは、現在のユニットに固有のメモリ・プール・ブロック、つまりローカル・ブロック内にステータスをセーブする。ローカル・ブロックは、それをセーブしたユニット内だけで復元でき、そのユニットを終了するとき自動的に削除される。
【１６２３】
ステータスを「ｄｅｆａｕｌｔ」バッファにセーブすると、それが「ｊｕｍｐ」分岐によって入るすべての新しいメイン・ユニットのデフォルトになる。
【１６２４】
メモリ・プールは、コマンド「ｍｅｍｏｒｙ」「ｉｍａｇｅ」「ｗｉｎｄｏｗ」「ｓｔａｔｕｓ」「ａｒｅａ」「ｆｌｏｗ」「ｆｏｎｔ」および「ｐｅｒｍ」によって使用される。メモリ・ブロックは、生成時に特定のコマンドに属するものとしてタグが付けられ、メモリ・プールを使用する別のコマンドからアクセスすることはできない。したがって異なるコマンドで同じ名前を使用しても衝突することがない。
【１６２５】
例１
プロット・パラメータを「＋ｉｎｉｔｉａｌ」コントロール・ブロック内で初期化し、その後デフォルトのステータス・バッファにセーブする。これらのセッティングは、それ以降に「ｊｕｍｐ」分岐によって入るすべての新しいメイン・ユニットのデフォルトになる。「ｅｒａｓｅ」コマンドの使用は、このレッスンに最初に分岐した場合にもスクリーンのバックグラウンドをブルーする。
【１６２６】
＊        「＋ｉｎｉｔｉａｌ」コントロール・ブロック内
ｉｎｉｔｉａｌ
ｃｏｌｏｒ      ｙｅｌｌｏｗ
ｃｏｌｏｒｅ    ｂｌｕｅ
ｓｉｚｅ        ２
ｆｏｎｔ        ｇｅｎｅｖａ
ｓｔａｔｕｓ    ｓａｖｅ；  ｄｅｆａｕｌｔ
ｅｒａｓｅ
【１６２７】
例２
現在のプロット・パラメータおよびパレットを「ｓｔａｔｕｓ１」という名前でメモリ・プールにセーブする。
ｓｔａｔｕｓ    ｓａｖｅ；  ’ｓｔａｔｕｓ１’；  ｐａｌｅｔｔｅ
【１６２８】
ｓｔａｔｕｓ  ｒｅｓｔｏｒｅ；  ’名前’  ｜  ｌｏｃａｌ  ［；  ｄｅｌｅｔｅ］
ｓｔａｔｕｓ  ｒｅｓｔｏｒｅ；  ｄｅｆａｕｌｔ  ｜  ａｒｒｏｗ
ｓｔａｔｕｓ  ｒｅｓｔｏｒｅ；  ｓｔａｎｄａｒｄ
現在のプロット・ステータスをすでにセーブ済みのセットに置き換える。パレットがそこにセーブされていれば、その復元も行われる。オプションとして「ｄｅｌｅｔｅ」修飾子を使用すれば、名前を指定したブロックまたは「ｌｏｃａｌ」（ローカル）ブロックをメモリ・プールから削除することができる。
【１６２９】
「ａｒｒｏｗ」オプションは、最後に「ａｒｒｏｗ」コマンドが現れたとき有効だったステータスを復元する。パレットは復元されない。
【１６３０】
「ｓｔａｎｄａｒｄ」オプションは、パレットを除くシステムの標準プロット・ステータスを復元する。標準パレットを復元する場合には、「ｐａｌｅｔｔｅ  ｉｎｉｔ」を使用する。
【１６３１】
例１
デフォルトのプロット・パラメータ（「ｓｔａｔｕｓ  ｓａｖｅ；ｄｅｆａｕｌｔ」ステートメントを使用して最後にセーブされたプロット・パラメータ）を復元する。
ｓｔａｔｕｓ    ｒｅｓｔｏｒｅ；  ｄｅｆａｕｌｔ
【１６３２】
例２
ライブラリ呼び出しの前後にわたり、プロットおよびパレットのセッティングをセーブし、復元する。ライブラリ・ルーチンは、呼び出したプログラムに戻ったときそれに影響を残すことなく、表示セッティングを自由に変更することができる。これに代えて、「ｓｔａｔｕｓ  ｓａｖｅ」および「ｒｅｓｔｏｒｅ」をライブラリ・ルーチンに組み込めば、それをさらに使用容易なツールにすることができる。
ｓｔａｔｕｓ    ｓａｖｅ；  ｌｏｃａｌ；  ｐａｌｅｔｔｅ
ｌｉｂｒａｒｙ  ｒｏｕｔｉｎｅｓ，ｇｒａｐｈ
ｓｔａｔｕｓ    ｒｅｓｔｏｒｅ；  ｌｏｃａｌ
【１６３３】
例３
変数「ｍｙｓｔａｔ」に格納された名前で指定されるセッティングを復元する。その後このメモリ・ブロックは削除する。
ｓｔａｔｕｓ    ｒｅｓｔｏｒｅ；  ｍｙｓｔａｔ；  ｄｅｌｅｔｅ
【１６３４】
ｓｔａｔｕｓ  ｄｅｌｅｔｅ；  ’名前’  ｜  ｌｏｃａｌ
セーブ済みのステータス・ブロックをメモリ・プールから削除する。
【１６３５】
例
メモリ・プールに「ｐａｇｅ１」という名前でセーブしているセッティングを削除する。
ｓｔａｔｕｓ    ｄｅｌｅｔｅ；  ’ｐａｇｅ１’
【１６３６】
ｓｔａｔｕｓ  ｒｅｓｅｔ
名前をつけたステータス・ブロックをすべてメモリ・プールから削除する。「ｄｅｆａｕｌｔ」「ｌｏｃａｌ」「ａｒｒｏｗ」および「ｓｔａｎｄａｒｄ」には影響しない。
【１６３７】
システム変数
ｚｒｅｔｕｒｎ
−１    オペレーションは成功した。
６    名前が重複している。
１０    名前が見つからない（その名前でステータスがセーブされてい
ない）
１６    無効な名前
１８    メモリ・プール内に充分なスペースがない。
【１６３８】
ｔｅｘｔ
テキストの属性をコントロールする。
【１６３９】
ｔｅｘｔ  キーワード
ｓｉｚｅ     指定サイズのフォントを選択する。               ２
ｂｏｌｄ      太字フォントを選択する。                      ３
ｉｔａｌｉｃ    斜体フォントを選択する。                    ４
ｎａｒｒｏｗ    狭幅フォントを選択する。                    ４
ｓｐａｃｉｎｇ    文字間隔をコントロールする。              ４
ｓｈａｄｏｗ    影付きをコントロールする。                  ５
ｕｎｄｅｒｌｉｎｅ  アンダーラインをコントロールする。      ６
ｄｅｌａｙ      文字間の遅延をセットする。                  ７
ｉｎｃｒｅｍｅｎｔ  文字間隔を追加する。                    ７
ｒｏｔａｔｅ    テキストのベースラインを回転する。          ７
ｄｉｒｅｃｔｉｏｎ  ベースラインに対するプロット方向をコントロールす
る。                                    ８
ｍａｒｇｉｎ    マージンでのテキストのワードラップをコントロールする。
９
ａｌｉｇｎ      フォント間の整列をコントロールする。      １０
ｒｅｖｅａｌ    機能ではなく裸テキスト・コードを表示する。１２
ｍｅａｓｕｒｅ    テキスト範囲の測定を初期化する。        １２
ｉｎｆｏ      テキストの属性情報を返す。                  １３
【１６４０】
説明
スクリーン上に現れるテキストの外観を変更する。テキストの属性は、「ｉｎｉｔｉａｌ」「ｓｃｒｅｅｎ」または「ｓｔａｔｕｓ  ｒｅｓｔｏｒｅ；  ｓｔａｎｄａｒｄ」コマンドによってシステムのデフォルトに初期化される。特定のレッスンについてテキストの属性を選択した後、修正したセッティングは、「ｓｔａｔｕｓ」コマンドを使用してセーブおよび復元を行うことができる。修正したセッティングが「ｄｅｆａｕｌｔ」ステータス・バッファにセーブされている（つまり「＋ｉｎｉｔｉａｌ」コントロール・バッファ内にプログラム）ときは、「ｊｕｍｐ」による分岐先となるすべてのユニットの開始時のテキスト属性になる。
【１６４１】
ソース・エディタにおけるテキスト行への入力では、裸エスケープ・コードまたは埋め込みコマンド・シンタクスを使用することによって、ほとんどの「ｔｅｘｔ」属性を操作することができる。次にエスケープ・コードを示す。
【１６４２】
色                                エスケープ・コード
ブラック／ブラック＋（グレイ）              ａ／Ａ
ブルー／ブルー＋                            ｕ／Ｕ
グリーン／グリーン＋                        ｇ／Ｇ
シアン／シアン＋                            ｃ／Ｃ
レッド／レッド＋                            ｒ／Ｒ
マゼンタ／マゼンタ＋                        ｍ／Ｍ
ブラウン／ブラウン＋                        ｂ／Ｂ
ホワイト／ホワイト＋                        ｗ／Ｗ
【１６４３】
プロット・モード                  エスケープ・コード
イレース                                    −
反転                                        ！
ノープロット                                ＿
リライト                                    ＝
書き込み                                    ＋
エクスクルーシブ・オア                      ＊
【１６４４】
フォント                          エスケープ・コード
フォント番号１〜９                          ｆ１−９
フォント番号１０〜３５                      ｆａ−ｚ
フォント標準／テキスト開始                  ｆ＠／＆
【１６４５】
フォント・コントロール            エスケープ・コード
太字オン／オフ                              Ｆｂ／Ｂ
斜体オン／オフ                              Ｆｉ／Ｉ
影付きオン／オフ                            Ｆｓ／Ｓ
影の色                                      Ｆ／ｃｏｌｏｒ
アンダーラインのオン／オフ                  Ｆｕ／Ｕ
アンダーラインの色                          Ｆ＿ｃｏｌｏｒ
【１６４６】
機能                              エスケープ・コード
サイズ１〜９                                １−９
間隔可変／固定                              ｖ／Ｖ
狭幅オン／オフ                              ｎ／Ｎ
ステータス  デフォルト／テキスト開始        ＠／＆
イレース色                                  ｄ  ｃｏｌｏｒ
マージンのラップ／ラップなし                ＞／＜
マージン送り／左にセット                    ＣＲ／ｌ
【１６４７】
文字機能                          エスケープ・コード
改行なしスペース                            ＃
改行なしハイフォン                          ｈ
改行                                        ￥
継続記述                                    ｜
【１６４８】
「ｓｉｚｅ（サイズ）」「ｂｏｌｄ（太字）」「ｉｔａｌｉｃ（斜体）」および「ｎａｒｒｏｗ（狭幅）」属性は、それぞれのフォントに基づいて合成されるか、あるいはフォント・グループからもっとも一致するフォントを選択する。属性のセッティングに対してもっとも一致度の高いフォントをフォント・グループから選択する方法については、「ｆｏｎｔ」コマンドおよびシステム変数「ｚｆｏｎｔｆ」および「ｚｆｏｎｔｒｅｔ」の説明を参照されたい。
【１６４９】
ｔｅｘｔ  ｓｉｚｅ；  ｓｉｚｅ
サイズ属性をコントロールする。デフォルトは「ｓｉｚｅ  １」である。
【１６５０】
フォントに関しては、水平および垂直方向の寸法において最大でベースのサイズの４倍まで拡大したフォントが合成される。フォント・グループに関しては、サイズが９以下であれば、システムがそのグループ内で適切なサイズの選択を試みる。そのグループ内に指定サイズが１つのフォントとして存在しない場合、大きいサイズのデフォルトがサイズ１に設定され、サイズ４までのフォントが合成される。
【１６５１】
例１
フォントの使用時、ベースのフォントを２倍にした文字を合成する。フォント・グループを伴うときは、グループ内の適切なサイズ２のフォントが使用されるが、そのフォントが存在しなければ、ベースのサイズ１のフォントから合成する。
ｔｅｘｔ      ｓｉｚｅ；  ２
【１６５２】
例２
サイズは、埋め込み記号「＜＜」および「＞＞」を使用してテキスト行に埋め込むことができるテキスト属性の１つである。埋め込みによる方法は、ソース・エディタで表示している間もテキストが変更されないこと、またより好ましいコーディングのプリントが得られることからエスケープ・コードによる方法より有利である。
ｗｒｉｔｅ      ＜＜ｓｉｚｅ，１＞＞Ｓｔａｒｔ  ｏｕｔ  ｓｍａｌｌ，  ＜＜ｓｉｚｅ，２＞＞ｅｎｄ  ｕｐ  ｂｉｇ．
（この「ｗｒｉｔｅ」ステートメントの意味：「小さい文字で始まり（サイズ１を使用）、大きい文字で終わる。（サイズ２を使用）」
【１６５３】
ｔｅｘｔ  ｓｉｚｅ；  ｓｉｚｅＸ，ｓｉｚｅＹ
サイズ値４を最大として水平と垂直で独立した拡大倍率を使用する。ＸとＹの値が異なるときは、常に文字が合成される。ＸとＹの値が等しければ、アクティブのフォント・グループから一致するフォントが選択されるか、あるいは合成される。
【１６５４】
例
引数を２つ伴う形式の「ｓｉｚｅ」コマンドを使用し、１６とおりの拡大を行った文字「Ｘ」からなる４行４列のマトリクスを表示する。「ｌｅｔｔｅｒｓ」を「ｆｏｎｔ  ｇｒｏｕｐ」にすると、「ｓｉｚｅＸ＝ｓｉｚｅＹ」のエントリでマッチングが試みられ、他の合成フォントとスタイルが一致しないグループ・フォントが使用されることから、「ｆｏｎｔ」とする必要がある。
ｆｏｎｔ      ’ｌｅｔｔｅｒｓ’
ｌｏｏｐ      ｓｉｚｅＸ  ←  １，４
．        ｌｏｏｐ      ｓｉｚｅＹ  ←１，４
．        ．        ａｔ      ４＊ｓｉｚｅＸ＋１：  ４＊ｓｉｚｅＹ＋１
．        ．        ｔｅｘｔ    ｓｉｚｅ；  ｓｉｚｅＸ，ｓｉｚｅＹ
．        ．        ｗｒｉｔｅ  Ｘ
．        ｅｎｄｌｏｏｐ
ｅｎｄｌｏｏｐ
【１６５５】
ｔｅｘｔ  ｂｏｌｄ；  ｏｎ  ｜  ｏｆｆ  ｜  条件
太字属性をコントロールする。デフォルトは「ｏｆｆ」（オフ）である。
【１６５６】
例１
文字の各ピクセルを水平方向に重複させることにより、フォント「ｂｉｇ」を太字にする。
ｆｏｎｔ      ｂｉｇ’          ＄＄  フォント・ブロック
ｔｅｘｔ      ｂｏｌｄ；  ｏｎ
ｗｒｉｔｅ    Ｔｈｉｓ  ｔｅｘｔ  ｉｓ ｓｙｎｔｈｅｓｉｚｅｄ
ｂｏｌｄ．
（この「ｗｒｉｔｅ」ステートメントの意味：「このテキストには合成した太字が使用されています」）
【１６５７】
例２
「＋ｉｎｉｔｉａｌ」コントロール・ブロックにおいては、フォントも含めたすべてのプロット・パラメータが「ｉｎｉｔｉａｌ」コマンドによってシステムの標準にセットされる。その後、テキスト属性のいくつかを変更し、「ｄｅｆａｕｌｔ」（デフォルト）ステータス・バッファにセーブする。これ以降の「ｊｕｍｐ」では、これらのデフォルトのテキスト属性のセッティングにリセットされる。システムの標準フォントがフォント・グループであることから、「ｂｏｌｄ」属性は、このグループから太字フォントを選択する。
＊        「＋ｉｎｉｔｉａｌ」ブロックにおいて
ｉｎｉｔｉａｌ
ｔｅｘｔ      ｂｏｌｄ；  ｏｎ
ｔｅｘｔ      ｓｐａｃｉｎｇ；  ｖａｒｉａｂｌｅ
．．．
ｓｔａｔｕｓ    ｓａｖｅ；  ｄｅｆａｕｌｔ
【１６５８】
ｔｅｘｔ  ｉｔａｌｉｃ；  ｏｎ  ｜  ｏｆｆ  ｜  条件
斜体属性をコントロールする。デフォルトは「ｏｆｆ」（オフ）である。
【１６５９】
例
単語「ａｍｏｒｏｕｓ」の前後に斜体をオン、オフするエスケープ・コードが挿入されている。ソース・エディタにおいて、「ＣＴＲＬ」＋「Ａ」＋「｜」および、「ＣＴＲＬ」＋「Ａ」＋「シフト」＋「｜」を押せばこれらが挿入される。斜体は、現在のフォントから合成されるか、フォント・グループがアクティブであれば、グループ内にある適切な斜体フォントが直接使用される。
ｗｒｉｔｅ    Ｔｈｅ  ｗｏｒｄ  ａｍｏｒｏｕｓ  ｉｓ  ｄｅｒｉｖｅｄ  ｆｒｏｍ  Ｌａｔｉｎ．
（この「ｗｒｉｔｅ」ステートメントの意味：「ａｍｏｒｏｕｓという単語はラテン語を語源とします。」）（原文のａｍｏｒｏｕｓは斜体で示されている。）
【１６６０】
ｔｅｘｔ  ｎａｒｒｏｗ；  ｏｎ  ｜  ｏｆｆ  ｜  条件
幅の狭い狭幅フォントをコントロールする。デフォルトは「ｏｆｆ」（オフ）である。
【１６６１】
「ｎａｒｒｏｗ」属性は、ＣＧＡ等の低解像度スクリーンにおいて、スクリーン上に表示されるテキストの量を最大にするために使用される。狭幅フォントは、旧バージョンのＴｅｎＣＯＲＥシステムとの上方互換のため、システムの標準フォント・グループに備えられている。「ｎａｒｒｏｗ」を合成することはできない。
【１６６２】
ｔｅｘｔ  ｓｐａｃｉｎｇ；  ｆｉｘｅｄ  ｜  ｖａｒｉａｂｌｅ  ｜  ｓｐａｃｉｎｇ
文字間隔をコントロールする。デフォルトは「ｆｉｘｅｄ」である。
【１６６３】
「ｆｉｘｅｄ」（固定）間隔を使用すると、同一の水平間隔に各文字が収められ、その間隔は、そのフォントの最大文字幅として定義される。数値の表、または強調にしばしば使用される。
【１６６４】
「ｖａｒｉａｂｌｅ」（可変）間隔においては、各文字が必要な水平間隔だけを占有する。たとえば、小文字の「ｉ」は、大文字の「Ｍ」より水平間隔が狭くなる。「ｖａｒｉａｂｌｅ」は、「ｆｉｘｅｄ」より１行当たりの文字数が多くなる。研究では可変間隔の方が読書速度が早くなることが明らかになっている。
【１６６５】
変数タグ形式では、−１＝「ｖａｒｉａｂｌｅ」（可変）、０＝「ｆｉｘｅｄ」（固定）が値として使用される。
【１６６６】
例１
標準フォントを使用するとき、固定間隔の１行目のテキストより、可変間隔の２行目のテキストの方がテキスト全体の幅が短くなる。
ａｔ        １０：１
ｔｅｘｔ      ｓｐａｃｉｎｇ；  ｆｉｘｅｄ
ｗｒｉｔｅ    Ｔｈｉｓ  ｔｅｘｔ  ｒｕｎｓ  ｔｏ  ｈｅｒｅ．
（この「ｗｒｉｔｅ」ステートメントの意味：「このテキストはここまで」）
ａｔ        １１：１
ｔｅｘｔ      ｓｐａｃｉｎｇ；  ｖａｒｉａｂｌｅ．
ｗｒｉｔｅ    Ｔｈｉｓ  ｔｅｘｔ  ｒｕｎｓ  ｔｏ  ｈｅｒｅ  ｐｌｕｓ．
（この「ｗｒｉｔｅ」ステートメントの意味：「このテキストはここまでと少し」）
【１６６７】
例２
可変間隔をラベルに使用するが、数字がそろわない問題を固定間隔を使用して解決する。
ａｔ        ６：１０
ｔｅｘｔ      ｓｐａｃｉｎｇ；  ｖａｒｉａｂｌｅ
ｗｒｉｔｅ    Ｐｏｒｋ
Ｂｅｅｆ
Ｃｈｉｃｋｅｎ
（この「ｗｒｉｔｅ」ステートメントの意味：「ポーク、ビーフ、チキン」）
ａｔ        ６：２０
ｔｅｘｔ      ｓｐａｃｉｎｇ；  ｆｉｘｅｄ
ｗｒｉｔｅ    ３６５
４
１５１２
【１６６８】
ｔｅｘｔ  ｓｈａｄｏｗ；  ｏｎ  ｜  ｏｆｆ  ｜  条件  ［，色］
影付き文字をコントロールする。デフォルトは「ｏｆｆ」（オフ）であり、影の色は「ｗｈｉｔｅ」（ホワイト）である。
【１６６９】
影付き文字の効果は、各文字を２回表示することによって生成され、最初にオフセットさせた影の色の文字をプロットし、次にオフセットせずにフォアグラウンド色で文字をプロットする。フォントに対応する影のオフセットは、フォント・エディタにおいてセットする。影の色を指定しない場合は、最後に指定した色が使用される。この影の色は、「ｉｎｉｔｉａｌ」コマンド後に「ｗｈｉｔｅ」（ホワイト）にデフォルト設定される。
【１６７０】
例
強い愛国心を込めて「Ａｍｅｒｉｃａ」を表示する。
ｃｏｌｏｒｅ  ｂｌｕｅ
ｅｒａｓｅ
ｃｏｌｏｒ    ｗｈｉｔｅ＋
ｔｅｘｔ      ｓｈａｄｏｗ；  ｏｎ，ｒｅｄ＋
ｔｅｘｔ      ｓｉｚｅ；  ２
ａｔ          １０：１０
ｗｒｉｔｅ    Ａｎ  Ａｍｅｒｉｃａｎ  ｓｔａｔｅｍｅｎｔ．
（この「ｗｒｉｔｅ」ステートメントの意味：「（青地に赤い文字で）アメリカの声明」
【１６７１】
ｔｅｘｔ  ｕｎｄｅｒｌｉｎｅ；  ｏｎ  ｜  ｏｆｆ  ｜  条件  ［，色  ｜  ｆｏｒｅｇｎｄ］
文字のアンダーラインをコントロールする。デフォルトは「ｏｆｆ」（オフ）であり、アンダーラインのデフォルト色は、文字のプロットに使用されているフォアグラウンド（キーワード「ｆｏｒｅｇｎｄ」）色である。
【１６７２】
アンダーラインのロケーションおよび下側のギャップは、フォント対応でフォント・エディタにおいてセットする。アンダーラインの色を指定しない場合は、最後に指定した色が使用される。このアンダーラインの色は、「ｉｎｉｔｉａｌ」コマンド後に「ｆｏｒｅｇｎｄ」にデフォルト設定される。
【１６７３】
例
最初の文章にはフォアグラウンド色のアンダーラインを引き、２番目の文章にはブルーのアンダーラインを引く。アンダーラインのオン、オフを切り替える別の方法としてテキスト内でエスケープ・コードを使用する方法がある。
ｔｅｘｔ      ｕｎｄｅｒｌｉｎｅ；  ｏｎ，ｆｏｒｅｇｎｄ
ｗｒｉｔｅ    Ｔｈｉｓ  ｔｅｘｔ  ｉｓ  ｕｎｄｅｒｌｉｎｅｄ  ｉｎ  ｔｈｅ  ｓａｍｅ  ｃｏｌｏｒ  ａｓ  ｔｈｅ  ｔｅｘｔ．
（この「ｗｒｉｔｅ」ステートメントの意味：「テキストと同じ色を使用してアンダーラインを引きました。」）
ｔｅｘｔ      ｕｎｄｅｒｌｉｎｅ；  ｏｎ，  ｂｌｕｅ
ｗｒｉｔｅ    Ｔｈｉｓ  ｔｅｘｔ  ｉｓ  ｕｎｄｅｒｌｉｎｅｄ  ｉｎ  ｂｌｕｅ．
（この「ｗｒｉｔｅ」ステートメントの意味：「ブルーを使用してアンダーラインを引きました。」）
【１６７４】
ｔｅｘｔ  ｄｅｌａｙ；  ｓｅｃｏｎｄｓ  ［；ｂｒｅａｋ］
各文字をプロットした後、指定秒数の遅延を行う。デフォルトは０である。オプションの「ｂｒｅａｋ」修飾子を使用すると、長い遅延を含む「ｔｅｘｔ」ステートメントを実行した直後に、任意の「ｂｒｅａｋ」修飾子付きの「ｆｌｏｗ」イベントを発生させることができる。その場合、残りの出力の間、一時的に遅延がオフになりコマンドを迅速に完了させるのでフロー分岐の発生が可能になる。
【１６７５】
例
メッセージがスクリーンにゆっくりと現れるようにする（各文字が現れる時間間隔を４分の１秒にする）。
ｔｅｘｔ      ｄｅｌａｙ；  ０．２５
ｔｅｘｔ      ｓｉｚｅ；２
ｃｏｌｏｒ    ｒｅｄ＋
ｗｒｉｔｅ    ＷＡＲＮＩＮＧ！
（この「ｗｒｉｔｅ」ステートメントの意味：「警告！」）
【１６７６】
ｔｅｘｔ  ｉｎｃｒｅｍｅｎｔ；  ｘ，ｙ
文字のプロット後の間隔に、オフセットをさらに追加する。デフォルトは「０，０」である。
【１６７７】
文字をプロットした後、ｘオフセットを水平ロケーションに加え、ｙオフセットを垂直ロケーションに加える。負のオフセット値も使用することができる。
【１６７８】
例
連続する各文字を、正常なポジションより２ピクセル右に、３ピクセル下にオフセットしてプロットする。
ｔｅｘｔ      ｉｎｃｒｅｍｅｎｔ；  ２，−３
ｗｒｉｔｅ    Ｄｅｓｃｅｎｄｉｎｇ  ｔｅｘｔ！
（この「ｗｒｉｔｅ」ステートメントの意味：「右下がりのテキスト！」）
【１６７９】
ｔｅｘｔ  ｒｏｔａｔｅ；  ｄｅｇｒｅｅｓ
文字プロットのベースラインを指定角度回転する。デフォルトは０度である。
【１６８０】
最適の結果を得るためには、縦横比が１：１のスクリーン上（一般にタイプＶＧＡまたはＥＶＧＡ）で９０度の倍数となる回転を使用する。
【１６８１】
例１
グラフの垂直軸に「ＴＥＭＰＥＲＡＴＵＲＥ」というラベルを記入するために、文字プロットのベースラインを版時計方向に９０度回転させる。
ａｔ        ２５０，２００
ｔｅｘｔ      ｒｏｔａｔｅ；  ９０
ｗｒｉｔｅ    ＴＥＭＰＥＲＡＴＵＲＥ
【１６８２】
例２
スクリーンの中点を中心として回転させたアルファベットを表示する。
ｌｏｏｐ  ａｎｇｌｅ  ←  ０，  ２７０，  ９０
．        ａｔ  ｚｘｍａｘ／２，  ｚｙｍａｘ／２
．        ｔｅｘｔ      ｒｏｔａｔｅ；  ａｎｇｌｅ
．        ｗｒｉｔｅ    ＡＢＣＤＥＦＧＨＩＪＫＬＭＮＯＰＱＲＳＴＵＶＷＸＹＺ
ｅｎｄｌｏｏｐ
【１６８３】
ｔｅｘｔ  ｄｉｒｅｃｔｉｏｎ；  ｒｉｇｈｔ  ｜  ｌｅｆｔ  ｜  ｕｐ  ｜  ｄｏｕｎ  ｜  ｄｉｒｅｃｔｉｏｎ
文字プロットのベースラインに対する、テキストの表示方向をコントロールする。デフォルトは「ｒｉｇｈｔ」（右）である。
【１６８４】
あらかじめ「ｔｅｘｔ  ｒｏｔａｔｅ」ステートメントにより回転させない限り、文字グリッドは回転されない。
【１６８５】
文字を表示する方向は、次に示すキーワード（または変数の値）によって指定される。
ｒｉｇｈｔ    （０）      左から右へ
ｌｅｆｔ      （１８０）  右から左へ
ｕｐ          （９０）    下から上へ
ｄｏｕｎ      （２７０）  上から下へ
【１６８６】
方向を「ｌｅｆｔ」（左）にセットし、適切なフォントを用いれば、アラビア語やヘブライ語等の左方にプロットする言語を表示することができる。
【１６８７】
例
ｔｅｘｔ      ｄｉｒｅｃｔｉｏｎ；  ｌｅｆｔ
ｔｅｘｔ      ｄｅｌａｙ；  ．１
ｗｒｉｔｅ    ｄｒａｗｔｆｅｌ  ｇｎｉｏｇ
（この「ｗｒｉｔｅ」ステートメントの意味：「左に向かっています」）
【１６８８】
この場合、右から左に向かってゆっくりと文字が現れ、最終的に「ｇｏｉｎｇ  ｌｅｆｔｗａｒｄ」という文章が表示される。
【１６８９】
ｔｅｘｔ  ｍａｒｇｉｎ；  ａｄｖａｎｃｅ  ｜  ｒｅｌｅａｓｅ  ｜  ｗｒａｐ  ｜  ｗｏｒｄｗｒａｐ  ｜  ｍａｒｇｉｎ
右側のマージンまたはスクリーンもしくはウィンドウのエッジを通過するときのテキストの処理方法をコントロールする。デフォルトは「ａｄｖａｎｃｅ」であり、文字が次の行にプロットされる。
【１６９０】
「ａｄｖａｎｃｅ」オプションは、複数行のテキストを表示するときのデフォルトになっている。あらかじめ右側のマージンまたはスクリーンもしくはウィンドウのエッジを超えてプロットする文字の有無をチェックし、それがあるときは、次の行の左側マージンにその文字を進める。
【１６９１】
「ｗｏｒｄｗｒａｐ」オプションは、あらかじめ右側のマージンまたはスクリーンもしくはウィンドウのエッジをまたいでプロットする単語の有無をチェックし、それがあるときは、次の行の左側マージンにその単語ごと移動、つまり「ワードラップ」する。このモードは、ワードプロセッシングに広く使用されており、ディスプレイ・エディタで「ｗｒｉｔｅ」オブジェクトを編集する間にアクセスすることができる。改行禁止スペースおよび改行禁止ハイフン等のワードラップ・モードで使用するための特殊文字が存在する。
【１６９２】
「ｗｒａｐ」オプションは、スクリーンもしくはウィンドウのエッジを超えて延びる文字およびその一部を、スクリーンの逆側のエッジに折り返して（ラップさせて）プロットを継続する。この場合「ａｔ」によりセットしたマージンは無視される。ラップは、文字の途中でも発生し、そのため、その文字が部分的にスクリーンの両側に現れることがある。スクリーンの周囲に巻き付いた形でテキストが移動する電光掲示板形式の効果が得られる。
【１６９３】
「ｒｅｌｅａｓｅ」オプションはウィンドウまたはスクリーンの外に継続する、あるいは外から始まる文字プロットを可能にする。この場合「ａｔ」によりセットしたマージンは無視される。改行は行われない。標準クリッピングが有効であれば、ウィンドウ内にある文字およびその一部だけが表示される。
【１６９４】
変数タグ形式において使用される値は次のようになる：−１＝「ａｄｖａｎｃｅ」、０＝「ｗｒａｐ」、１＝「ｒｅｌｅａｓｅ」、２＝「ｗｏｒｄｗｒａｐ」。
【１６９５】
例
この例では、「次のコードにより、ワードラップ・モードでこの段落がプロットされると、現在ご覧の状態と同じように表示されます。」という意味の英文、
Ｔｈｉｓ  ｐｒａｇｒａｐｈ  ｏｆ  ｔｅｘｔ
ｌｏｏｋｓ  ｊｕｓｔ  ｌｉｋｅ  ｔｈｉｓ  ｗｈｅｎ
ｐｌｏｔｔｅｄ  ｉｎ  ｗｏｒｄｗｒａｐ  ｍｏｄｅ  
ｂｙ  ｔｈｅ  ｆｏｌｌｏｗｉｎｇ  ｃｏｄｅ．
が表示される。
ｓｃｒｅｅｎ    ｖｇａ
ｔｅｘｔ        ｍａｒｇｉｎ；  ｗｏｒｄｗｒａｐ
ａｔ            ０，４６４；２０４，  ０
ｗｒｉｔｅ    Ｔｈｉｓ  ｐｒａｇｒａｐｈ  ｏｆ  ｔｅｘｔ  ｌｏｏｋｓ  ｊｕｓｔ  ｌｉｋｅ  ｔｈｉｓ  ｗｈｅｎ  ｐｌｏｔｔｅｄ  ｉｎ
ｗｏｒｄｗｒａｐ  ｍｏｄｅ  ｂｙ  ｔｈｅ  ｆｏｌｌｏｗｉｎｇ  ｃｏｄｅ．
【１６９６】
例２
次に示すコードは、「基礎航空学へようこそ」という意味の英文「Ｗｅｌｃｏｍｅ  ｔｏ  ＡＶＩＡＴＩＯＮ  ＢＡＳＩＣＳ」を電光掲示板の形式でスクリーンの左から右に向かって移動させ、また左端から出てくるという形に循環させる。「ｃａｌｃ」ステートメントは、スクリーンの右側エッジをチェックし、それに応じて変数「ｘ」を１インクリメントするか、０にリセットするかを決定する。続く「ａｔ」ステートメントは、「ｌｏｏｐ」の各繰り返しにおいて、スクリーンを循環するテキストの開始ポイントを進める。「ｗｒｉｔｅ」ステートメント内のテキストは、スペースで開始し、それが「ｒｅｗｒｉｔｅ」モードで表示されたとき、直前の繰り返しで表示された「Ｗ」の始まりの部分を削除する。この例を左に移動するように変更するときは、末尾にスペースを追加する。
ｚｅｒｏ      ｘ
ｔｅｘｔ      ｍａｒｇｉｎ；  ｗｒａｐ  ＄＄ラップ・モードをオンにする
ｔｅｘｔ      ｓｉｚｅ；  ２
ｍｏｄｅ      ｒｅｗｒｉｔｅ            ＄＄  下側の表示を置き換える
ｆｌｏｗ      ｊｕｍｐ；  ％ｏｔｈｅｒ；  ｓｔａｒｔ；  ｂｒｅａｋ
＄＄  任意のキーで終了
ｌｏｏｐ
．        ｃａｌｃｓ  ｘ  ＝  ｚｘｍａｘ；  ｘ  ←  ０；  ｘ＋１
．        ａｔ        ｘ，ｚｙｍａｘ／２＄＄  スクリーンの上下方向の
中央
．        ｗｒｉｔｅ    Ｗｅｌｃｏｍｅ  ｔｏ  ＡＶＩＡＴＩＯＮ  ＢＡＳＩＣＳ  ＄＄  先頭のスペースに注意
ｅｎｄｌｏｏｐ
【１６９７】
ｔｅｘｔ  ａｌｉｇｎ；  ｂａｓｅｌｉｎｅ  ｜  ｂｏｔｔｏｍ  ｜  ａｌｉｇｎ
サイズまたはフォントの異なる文字をそろえる。デフォルトは「ｂａｓｅｌｉｎｅ」（ベースライン）である。
【１６９８】
「ａｌｉｇｎ」オプションは、サイズまたはフォントの異なる文字を互いに対して相対的にプロットする方法をコントロールする。これは各文字のベースラインまたは文字セルの底辺を直線上にそろえることによって行われる。ベースラインは、通常、ディセンダを持たない活字の下端のポイントであり、フォント・エディタにおいて各フォント対応でセットされる。
【１６９９】
「ｂａｓｅｌｉｎｅ」の文字並びが選択されていれば、それぞれの文字のベースラインが直線に並ぶ形で文字がそろえられる。サイズおよびスタイルの異なるフォントが同一直線の上に乗っているように現れる。
（原文には、段階的に大きくなる４つの「ｙ」および中程度のサイズの「ｖｅｒｙ」それよりかなり大きい「ｆｕｎｎｙ」がベースラインを一致させた形で示され、共通のベースラインを示す直線が描かれた図が挿入されている。）
【１７００】
「ｂｏｔｔｏｍ」の文字並びが選択されていれば、文字セルの底辺に沿って文字がそろえられる。サイズおよびスタイルの異なる文字を底辺が直線に並ぶ形で並べると、ディセンダを有する文字のためにそのサイズに応じた下側部分が必要になることから、共通の直線上に配置されているように見えなくなる。
（原文には、段階的に大きくなる４つの「ｙ」および中程度のサイズの「ｖｅｒｙ」それよりかなり大きい「ｆｕｎｎｙ」が文字セルの底辺を一致させた形で示され、共通の底辺を示す直線が描かれた図が挿入されている。）
【１７０１】
「ｂａｓｅｌｉｎｅ」の文字並びが選択されているときは、「ｓｔａｎｄａｒｄ」（標準）フォントのベースラインが使用され、スクリーン上の他のすべてのフォントによる文字の配置が決定される。「ｓｔａｎｄａｒｄ」のサイズ１のフォントにおいては、文字セルの底辺から「ｚｃｈａｒｂ」だけ上の位置がベースラインとなる。現在選択しているフォントおよび拡大されたサイズに関しては、セルの底辺から「ｚｆｏｎｔｂ」だけ上の位置がベースラインである。ベースラインが文字の整列に使用されることから、現在のフォントは、サイズ１の「ｓｔａｎｄａｒｄ」（標準）フォントの底辺がプロットされる「ｚｙ」ロケーションから垂直に「ｚｃｈａｒｂ」から「ｚｆｏｎｔｂ」を減じた値のドット数だけ移動したロケーションをそのセルの底辺としてプロットされる。
【１７０２】
変数タグ形式において使用される値は次のようになる：−１＝「ｂａｓｅｌｉｎｅ」、０＝「ｂｏｔｔｏｍ」
【１７０３】
ｔｅｘｔ  ｒｅｖｅａｌ；  ｏｆｆ  ｜  ａｌｌ  ｜  ａｌｌｃｒ  ｜  ｅｄｉｔｏｒ  ｜  ｒｅｖｅａｌ
隠しテキスト・コードの表示をコントロールする。デフォルトは「ｏｆｆ」（オフ）である。
【１７０４】
裸のエスケープ・コード、上付き文字、下付き文字および改行（ＣＲ）等のテキスト内に現れる隠しコードを、機能としてではなく、そのとおりに表示する。隠しコード表示は、単一の記号、または四角形記号文字に続く隠し機能を指定する１文字ないし３文字によって表示される。次にキーワードを示すが、キーワードに続く数字は変数タグで使用される値である。
【１７０５】
ａｌｌ      （２）  ＣＲを除く隠しコードを表示；ＣＲは機能する。
ａｌｌｃｒ  （３）  隠しコードおよびＣＲを表示；ＣＲは機能する。
ｅｄｉｔｏｒ（４）  隠しコードおよびＣＲを表示；ＣＲは機能しない。
ｏｆｆ      （０）  隠しコードを機能で示す形式に戻す。
【１７０６】
ｔｅｘｔ  ｍｅａｓｕｒｅ
テキストの段落で形成される矩形の範囲を決定するために使用されるテキスト測定系変数を初期化する。システム変数はこの矩形を次のように定義する：（ｚｐｌｏｔｘｌ，  ｚｐｌｏｔｙｌ）；（ｚｐｌｏｔｘｈ，  ｚｐｌｏｔｙｈ）。
【１７０７】
例
任意の幅および高さを持つ段落を枠で囲む。この例では単一の「ｗｒｉｔｅ」ステートメントで示しているが、多数の「ｗｒｉｔｅ」および「ｓｈｏｗ」コマンドを使用することができる。
ｔｅｘｔ      ｍｅａｓｕｒｅ
ｗｒｉｔｅ    Ｔｈｉｓ  ｉｓ  ａ  ｐａｒａｇｒａｐｈ
ｏｆ  ｔｅｘｔ．．．
（この「ｗｒｉｔｅ」ステートメントの意味：「これはテキストの段落．．．」）
ｂｏｘ      ｚｐｌｏｔｘｌ，ｚｐｌｏｔｙｌ；  ｚｐｌｏｔｘｈ，  
ｚｐｌｏｔｙｈ；  ２
【１７０８】
ｔｅｘｔ  ｉｎｆｏ；  ｉｎｆｏＢｕｆｆｅｒ  ［，ｌｅｎｇｔｈ］
「ｔｅｘｔ」オプションの現在のセッティングに関する情報を読み取り、「ｌｅｎｇｔｈ」で指定されるバイト数だけバッファに格納する。「ｌｅｎｇｔｈ」を指定しないと、そのバッファの定義長が使用される。バッファのフォーマットを次に示す。
【１７０９】
【表１７】
2009009584.tif 000019
＊  旧バージョンの「ｒｅｖｅａｌ  ｏｎ」コマンド
【１７１０】
例
現在のテキスト属性のセッティングを読み出して表示する。
ｄｅｆｉｎｅ    ｌｏｃａｌ
ｓｅｔｔｉｎｇｓ，５４
．        ｓｉｚｅｘ，２
．        ｓｉｚｅｙ，２
．        ｂｏｌｄ，１
．．．
ｄｅｆｉｎｅ    ｅｎｄ
＊
ｔｅｘｔ      ｉｎｆｏ；  ｓｅｔｔｉｎｇｓ
ｗｒｉｔｅ    Ｔｈｅ  ｃｕｒｒｅｎｔ  Ｘ−ｓｉｚｅ  ＝  ＜＜ｓ，  ｓｉｚｅｘ＞＞
Ｙ−ｓｉｚｅ  ＝  ＜＜ｓ，  ｓｉｚｅｙ＞＞
ａｎｄ  ｂｏｌｄ  ｉｓ
（この「ｗｒｉｔｅ」ステートメントの意味：「現在の水平サイズは〜、垂直サイズは〜、太字は〜」）
ｗｒｉｔｅｃ    ｂｏｌｄ；  ｏｎ；  ｏｆｆ
【１７１１】
ｗｉｄｔｈ
説明
グラフィックスの線幅を指定し、デフォルトは１ピクセルである。システム変数「ｚｗｉｄｔｈ」は、現在の幅の値を保持している。ドット以外の基本グラフィック・エレメントの場合、「ｗｉｄｔｈ」が両方向に対象に追加されるが、ドットの場合は単純に大きくなる。
【１７１２】
次に示すコマンドがこの影響を受ける。
ｄｏｔ
ｄｒａｗ
ｐｏｌｙｇｏｎ    （塗りつぶしなしのみ）
ｃｉｒｃｌｅ      （塗りつぶしなしのみ）
ｅｌｌｉｐｓｅ    （塗りつぶしなしのみ）
【１７１３】
「ｂｏｘ」および「ｅｒａｓｅ」は、「ｗｉｄｔｈ」コマンドの影響を直接受けない。しかしながらこれらのコマンドは、それぞれの「ｗｉｄｔｈ」引数としてシステム変数「ｚｗｉｄｔｈ」を使用することが可能であり、これによって結びつけることができる。なお、これらのグラフィックは、すでに存在している「ｗｉｄｔｈ」引数定義があることから内側に限って線幅を「広げる」ことが許される点に注意が必要である。
【１７１４】
現在の「ｗｉｄｔｈ」セッティングは、ステータス・バッファの一部である。
ｗｉｄｔｈ    ｅｘｐｒｅｓｓｉｏｎ
ｗｉｄｔｈ    ５      ＄＄  以降のグラフィックの線幅が５ピクセルになる
ｗｉｄｔｈ    ｖａｒ  ＄＄  変数の値に応じた線幅
【１７１５】
ｗｉｎｄｏｗ
表示ウィンドウをマネージする。
【１７１６】
ｗｉｎｄｏｗ  キーワード
ｏｐｅｎ        相対座標を使用して表示ウィンドウを開く。
ｏｐｅｎａｂｓ  絶対座標を使用する以外は「ｏｐｅｎ」と同じ。
ｃｌｏｓｅ      現在のウィンドウを閉じ、以前の表示ステータスを復元す
る。
ｒｅｓｅｔ      全ウィンドウを閉じ、以前の表示ステータスを復元する。
ｆｒａｍｅ      相対座標を使用してウィンドウの境界を変更する。
ｆｒａｍｅａｂｓ  絶対座標を使用する以外は「ｆｒａｍｅ」と同じ。
ｒｅｌａｔｉｖｅ  ウィンドウの相対座標をコントロールする。
ｃｌｉｐ          ウィンドウを超えるグラフィックスの切取りをコントロ
ール。
ｃｏｍｐｒｅｓｓ  裏側にあるセーブ済みの表示の圧縮をコントロールする。
【１７１７】
説明
「ｗｉｎｄｏｗ」コマンドは、表示ウィンドウを開き、閉じ、変更する。１つのウィンドウを開くと、現在の表示ステータスおよびそのウィンドウの下になっているスクリーン表示はメモリ・プールにセーブされる。また表示オペレーションは、絶対座標機能が選択されていない限り、開いたウィンドウと相対的に、かつそのウィンドウ内にのみ現れる。ウィンドウを閉じると、セーブしてある以前の表示ステータスおよびそのウィンドウの下にあったスクリーン表示が復元される。
【１７１８】
システムの起動時、初期ウィンドウが開かれるが、これは物理的なスクリーン全体に対応する。このアウター・レベルのウィンドウは、「ｗｉｎｄｏｗ」コマンドによって特性を変更することができるが閉じることはできない。
【１７１９】
ｗｉｎｄｏｗ  ｏｐｅｎ  ［；  ロケーション［；  ロケーション］］
指定された矩形を覆う表示ウィンドウを開き、その矩形の下に隠れるスクリーン表示、表示ステータス（「ｓｔａｔｕｓ」参照）、現在のエリア・セッティング（「ａｒｅａ」参照）、および現在の相対座標（ｗｉｎｄｏｗ  ｒｅｌａｔｉｖｅ）、クリッピング（ｗｉｎｄｏｗ  ｃｌｉｐ）ならびに圧縮（「ｗｉｎｄｏｗ  ｃｏｍｐｒｅｓｓ」参照）に関するセッティングをメモリ・プールにセーブする。このウィンドウを閉じると、セーブしてあったデータが使用されて以前の状態のスクリーンが復元される。
【１７２０】
スクリーン座標は、新しく開いたウィンドウに対して相対的であり、グラフィック座標（０，０）は左下コーナーに、文字座標（１：１）はウィンドウの最上端の行の１文字目になる。表示オブジェクトがウィンドウを超えて延びる場合は、切り取られる（「ｗｉｎｄｏｗ  ｃｌｉｐ」参照）。
【１７２１】
ウィンドウを形作る矩形の座標はそれ以前に開かれたウィンドウおよび「ｏｒｉｇｉｎ」コマンドの影響を受けるが、「ｓｃａｌｅ」「ｒｏｔａｔｅ」または「ｗｉｎｄｏｗ  ｃｌｉｐ」の影響は受けない。「ｗｉｎｄｏｗ  ｏｐｅｎａｂｓ」または「ｅｎａｂｌｅ  ａｂｓｏｌｕｔｅ」を使用すれば、それ以前に開かれたウィンドウの影響を受けることなく物理的なスクリーンと相対的にウィンドウを配置することができる。なお、物理的なスクリーンの範囲を超えるとウィンドウが開かれない（「ｚｒｅｔｕｒｎ」＝２３）。
【１７２２】
矩形を示す「ロケーション」がいずれもブランクの場合は、スクリーン全体または直前の「ｗｉｎｄｏｗ」と同じであると解釈される。一方（最初）の「ロケーション」だけを指定した場合には、現在のスクリーン・ロケーションを開始ポジションとして使用し、指定した「ロケーション」は、現在選択しているフォントの文字数または文字数および行数を示していると解釈されて、そのウィンドウのサイズを決定するために使用される。
【１７２３】
例１
ＶＧＡスクリーン上で、バックグラウンドがブルーであり、境界がホワイトの、テキストを含むウィンドウを開く。任意のキーが押されると、このウィンドウを閉じ、その裏側にあった表示を復元する。
ｗｉｎｄｏｗ    ｏｐｅｎ；  １００，１００；  ４００，２５０    ＄＄  スクリーン中央にウィンドウを開く
ｃｏｌｏｒｅ    ｂｌｕｅ
ｅｒａｓｅ                  ＄＄  ウィンドウをブルーでイレースする
ｃｏｌｏｒ    ｗｈｉｔｅ＋
ｂｏｘ      ；；１          ＄＄  ウィンドウのエッジに枠を付ける
ａｔ        ２：４
ｗｒｉｔｅ  ｔｈｅ  ａｕｔｈｏｒ  ｏｆ  ｔｈｉｓ  ｌｅｓｓｏｎ  ｉｓ：
Ｄｒ，  Ｊｏｈｎ  Ｂｕｒｄｅｅｎ
Ｕｎｉｖｅｒｓｉｔｙ  ｏｆ  Ｉｌｌｉｎｏｉｓ  ａｔ  Ｕｒｂａｎａ
Ｐｒｅｓｓ  ａｎｙ  ｋｅｙ  ｔｏ  ｃｏｎｔｉｎｕｅ．．．
（この「ｗｒｉｔｅ」ステートメントの意味：「このレッスンの著者：イリノイ大学  ジョン・バーディーン博士    どれかのキーを押すと先に進みます．．．」）
ｐａｕｓｅ    ｐａｓｓ＝ａｌｌ
ｗｉｎｄｏｗ    ｃｌｏｓｅ
【１７２４】
例２
ａｔ            ５：１５
ｗｉｎｄｏｗ    ｏｐｅｎ；  ２０，５
これにより、現在のスクリーン（またはウィンドウ）の第５行１５文字のロケーションから幅２０文字、高さ５行のウィンドウが開く。
【１７２５】
ｗｉｎｄｏｗ  ｏｐｅｎａｂｓ  ［；  ロケーション［；  ロケーション］］
矩形を示すロケーションが「ｅｎａｂｌｅ  ａｂｓｏｌｕｔｅ」が有効であるとして解釈されるほかは「ｗｉｎｄｏｗ  ｏｐｅｎ」に同じである。「ロケーション」座標は、物理的なスクリーンを基準とし、それ以前に開かれたウィンドウまたは「ｏｒｉｇｉｎ」コマンドの影響を受けない。
【１７２６】
ｗｉｎｄｏｗ  ｃｌｏｓｅ  ［；  ｎｏｐｌｏｔ］  ［；  ｎｏａｒｅａ］
現在の表示ウィンドウを閉じ、その裏側にあったウィンドウ、表示「ｓｔａｔｕｓ」（ステータス）、「ａｒｅａ」（エリア）定義、および「ｗｉｎｄｏｗ  ｒｅｌａｔｉｖｅ」「ｗｉｎｄｏｗ  ｃｌｉｐ」および「ｗｉｎｄｏｗ  ｃｏｍｐｒｅｓｓ」の状態をメモリ・プールから復元する。オプションのキーワード「ｎｏｐｌｏｔ」は、ウィンドウの裏側にあった表示の復元を禁止する。またオプションの「ｎｏａｒｅａ」キーワードは、エリア定義の復元を禁止する。
【１７２７】
ｗｉｎｄｏｗ  ｒｅｓｅｔ  ［；  ｎｏｐｌｏｔ］  ［；  ｎｏａｒｅａ］
最後に開かれたウィンドウから最初に戻る順序で、開いているウィンドウをすべて閉じるが、閉じるごとに、その裏側にあったウィンドウ、表示「ｓｔａｔｕｓ」（ステータス）、「ａｒｅａ」（エリア）定義、および「ｗｉｎｄｏｗ  ｒｅｌａｔｉｖｅ」「ｗｉｎｄｏｗ  ｃｌｉｐ」および「ｗｉｎｄｏｗ  ｃｏｍｐｒｅｓｓ」の状態をメモリ・プールから復元する。オプションのキーワード「ｎｏｐｌｏｔ」は、ウィンドウの裏側にあった表示の復元を禁止する。またオプションの「ｎｏａｒｅａ」キーワードは、エリア定義の復元を禁止する。
【１７２８】
ｗｉｎｄｏｗ  ｆｒａｍｅ  ［；  ロケーション［；  ロケーション］］
現在の表示ウィンドウの境界を変更する。ウィンドウの内容およびすでにセーブしてあるそのウィンドウの下になっている表示は変更されない。「ｗｉｎｄｏｗ  ｆｒａｍｅ」は、アウター・レベルの物理的スクリーンウィンドウに対して使用することができる。
【１７２９】
ｗｉｎｄｏｗ  ｆｒａｍｅａｂｓ  ［；  ロケーション［；  ロケーション］］
矩形を示すロケーションが「ｅｎａｂｌｅ  ａｂｓｏｌｕｔｅ」が有効であるとして解釈されるほかは「ｗｉｎｄｏｗ  ｆｒａｍｅ」に同じであり、「ロケーション」座標は物理的なスクリーンを基準とする。それ以前に開かれたウィンドウまたは「ｏｒｉｇｉｎ」コマンドの影響を受けない。
【１７３０】
ｗｉｎｄｏｗ  ｒｅｌａｔｉｖｅ；  ［ｏｎ  ｜  ｏｆｆ  ｜  条件］
現在の表示ウィンドウについて、ウィンドウ相対座標を使用する（ｏｎ）、使用しない（ｏｆｆ）を切り替える。ウィンドウが開かれるときのデフォルトは使用する（ｏｎ）である。相対座標を「ｏｆｆ」にすると、座標系が現在のウィンドウに対してではなく、物理的なスクリーンに対して相対的になるが、「ｓｃａｌｅ」「ｒｏｔａｔｅ」「ｏｒｉｇｉｎ」および「ｗｉｎｄｏｗ  ｃｌｉｐ」は適用される。
【１７３１】
「条件」形式については、式の値が負のときは「ｏｎ」、ゼロまたは正のときは「ｏｆｆ」が指定されたものとして扱われる。
【１７３２】
ｗｉｎｄｏｗ  ｃｌｉｐ；  ［ｏｎ  ｜  ｏｆｆ  ｜  条件］
現在のウィンドウを超えて外に延びる表示オブジェクトの切り取りを行う（ｏｎ）、行わない（ｏｆｆ）を切り替える。ウィンドウが開かれるときのデフォルトは切り取りを行う（ｏｎ）である。切り取り「ｏｆｆ」にすると、現在のウィンドウの外に延びるオブジェクトが表示される。
【１７３３】
システム変数「ｚｃｌｉｐｘ１」「ｚｃｌｉｐｙ１」「ｚｃｌｉｐｘ２」および「ｚｃｌｉｐｙ２」には、切り取りエリアの左下コーナーおよび右上コーナーが格納される。
【１７３４】
ｗｉｎｄｏｗ  ｃｏｍｐｒｅｓｓ；  ［ｏｎ  ｜  ｏｆｆ  ｜  条件］
裏側にあるスクリーンのデータ圧縮をコントロールする。ウィンドウが開かれるときのデフォルトは「ｃｏｍｐｒｅｓｓ  ｏｎ」である。ウィンドウが開かれるとき、その裏側になる表示のコンテンツはメモリ・プールにセーブされる。圧縮が「ｏｎ」にセットされていれば、セーブされるデータが占めるメモリ・プールのスペースが極めて小さくなる。一方、圧縮が「ｏｆｆ」にセットされていれば、より多くのメモリ・プール内のスペースが消費されるが、ウィンドウの開閉がより高速になることがある。
【１７３５】
システム変数
−１      オペレーションは成功した。
１８      メモリ・プール内に充分なスペースがない。
２３      ウィンドウの一部が物理的なスクリーンの外になる。
【１７３６】
その他
次に示すシステム変数は、「ｗｉｎｄｏｗ」コマンドの影響を受ける。
ｚｄｉｓｐｘ    ウィンドウの幅および高さ。
ｚｄｉｓｐｙ    
ｚｘｍａｘ      ウィンドウ内のｘおよびｙ座標の最大値。
ｚｙｍａｘ      
ｚｗｉｎｄｏｗｘ  ウィンドウ左下コーナーの絶対ｘ座標および絶対ｙ座標
ｚｗｉｎｄｏｗｙ  
ｚｃｌｉｐｘ１    切り取りエリアの左下コーナーの絶対ｘ座標および絶対ｙ座標
ｚｃｌｉｐｙ１    
ｚｃｌｉｐｘ２    切り取りエリアの右上コーナーの絶対ｘ座標および絶対ｙ座標
ｚｃｌｉｐｙ２    
【１７３７】
ｗｒｉｔｅ
テキストを表示する。
【１７３８】
ｗｒｉｔｅ        テキスト
【１７３９】
説明
現在のスクリーン・ロケーションを開始位置としてテキストを表示する。ロケーションは、通常、これに先行する「ａｔ」コマンドによってセットされるが、これにより左側および右側のテキスト・マージンをセットすることもできる。「ｗｒｉｔｅ」のテキストは、複数行にわたって延びることが可能であり、その折り返し機能は「ｔｅｘｔ  ｍａｒｇｉｎ」コマンドによってコントロールされる。
【１７４０】
テキストの属性（例：色、アンダーライン、影付き、フォントのデザイン等）は、埋め込みテキスト属性の使用を通じて文字ごとに変更することができる。これらは、テキスト内に：ソース・コードおよび表示エディタにおけるメニュー・オプションを介して挿入される裸コード・シーケンスとして；埋め込み記号＜＜、＞＞の使用を介して含められる埋め込みコマンドとして現れる。テキスト属性については、５０を超える裸コードが存在する。属性を埋め込むことができるコマンドおよび「ｔｅｘｔ」コマンドのキーワードを次に示す。
【１７４１】
ｃｏｌｏｒ    ｜  ｃ    フォアグラウンドの表示色を選択する。
ｃｏｌｏｒｅ  ｜  ｃｅ  バックグラウンドの表示色を選択する。
ｍａｒｇｉｎ  ｜  ｍａ  テキストの折り返しをコントロールする。
ｍｏｄｅ  ｜  ｍ      現存する表示の上にテキストをプロットする方法を選
択する。
ｓｉｚｅ  ｜  ｓ      フォントのサイズを変更する。
ｓｐａｃｉｎｇ  ｜  ｓｐ  可変または固定間隔を選択する。
【１７４２】
「ｗｒｉｔｅ」の開始時にあったテキスト属性は、セーブされて「ｗｒｉｔｅ」の終了時に復元されるので、テキスト内で行った任意の属性変更がそれ以降のコマンドに影響することはない。開始時にセーブされた属性は、裸コード・シーケンス「Ｅｓｃ−＆」で示される「ｓｔａｔｕｓ  ｔｅｘｔ  ｓｔａｒｔ」を使用することにより、テキスト内で随時復元することができる。このコマンドの「ｗｒｉｔｅｘ」バリアントは、開始時のテキスト属性をセーブしない。この場合、直前の「ｗｒｉｔｅ」コマンドによってセーブされた属性を復元する。
【１７４３】
次に示す「ｓｈｏｗ」コマンドの埋め込み形式を使用すれば、変数およびバッファの内容の表示も「ｗｒｉｔｅ」のテキストに埋め込むことができる。
【１７４４】
ｓｈｏｗ    ｜  ｓ  変数または式を表示する。
ｓｈｏｗａ  ｜  ａ  バッファ内のテキストを表示する。
ｓｈｏｗｈ  ｜  ｈ  バッファを１６進形式で表示する。
ｓｈｏｗｔ  ｜  ｔ  変数を表形式で表示する。
ｓｈｏｗｖ  ｜  ｖ  ヌル・コードを含めてテキスト・バッファを表示する。
【１７４５】
テキスト行の末尾スペースはコンパイラによって削除されるが、３つのドル記号のコメント（＄＄＄）を追加することにより含ませることができる。
【１７４６】
例
例１
ソース・コード内において次の「ｗｒｉｔｅ」は３行にわたる。しかしながら、「ａｔ」コマンドによってセットされたマージンが段落の幅を非常に狭くするため、多数の行にわたって表示される。
ａｔ        １：１０；  １０：３０    ＄＄  左側マージン：１０文字
＄＄  右側マージン：３０文字
ｔｅｘｔ      ｍａｒｇｉｎ；ｗｏｒｄｗｒａｐ      
＄＄  右側マージンでワードラップ
ｗｒｉｔｅ    Ｔｈｉｓ  ｉｓ  ａ  ｐａｒａｇｒａｐｈ  ｏｆ  ｔｅｘｔ  ｔｈａｔ  ｇｏｅｓ  ｏｎ  ａｎｄ  ｏｎ．  Ｉｔ  ｗｉｌｌ
ａｐｐｅａｒ  ｎｉｃｅｌｙ  ｂｅｔｗｅｅｎ  ｔｈｅ  ｍａｒｇｉｎｓ  ａｓ  ｓｅｔ  ｂｙ  ｔｈｅ  ｐｒｅｃｅｄｉｎｇ  ａｔ
ｃｏｍｍａｎｄ．  Ｃｏｎｔｉｎｕｅｄ  ｌｉｎｅｓ  ｏｆ  ｔｅｘｔ  ｉｎ  ａ  ｗｒｉｔｅ  ｓｔａｔｅｍｅｎｔ  ｂｅｇｉｎ  
ｂｙ  ｔａｂｂｉｎｇ  ｏｖｅｒ  ｔｈｅ  ｃｏｍｍａｎｄ  ｆｉｅｌｄ．
（この「ｗｒｉｔｅ」ステートメントの意味：「この段落のテキストは、多数の行にわたっています。先行する『ａｔ』コマンドによってセットされた左右のマージンの間に格好良く表示されているはずです。『ｗｒｉｔｅ』ステートメント内では、連続するテキスト行は、コマンド・フィールドをタブで飛び越すことによって始めます。」）
【１７４７】
例２
埋め込み「ｓｈｏｗ」コマンドは、変数からのテキストおよび数字を表示することができる。次に示す例では、
Ｂｉｌｌ：
ｙｏｕｒ  ｓｃｏｒｅ  ｉｓ  ９２％
ｔｈｅ  ｃｌａｓｓ  ａｖｅｒａｇｅ  ｗａｓ  ８５％．
といった形で「ビルさん：あなたの成績は９２％です。クラス平均は８５％でした。」という意味の英文の表示が現れる。
ｗｒｉｔｅ    ＜＜ｓｈｏｗａ，  ｎａｍｅ＞＞：
ｙｏｕｒ  ｓｃｏｒｅ  ｉｓ  ＜＜ｓｈｏｗ，  ｓｃｏｒｅ＞＞％
ｔｈｅ  ｃｌａｓｓ  ａｖｅｒａｇｅ  ｗａｓ  ＜＜ｓｈｏｗ，ａｖｅｒａｇｅ＞＞％．
（この「ｗｒｉｔｅ」ステートメントの意味：「〜さん：あなたの成績は〜％です。クラス平均は〜％でした。」）
【１７４８】
例３
ｗｒｉｔｅ    Ｓｐｅｃｉａｌ  ｅｆｆｅｔｓ  ｓｕｃｈ  ａｓ  ｕｎｄｅｒｌｉｎｉｎｇ  ａｎｄ  ｉｔａｌｉｃｓ  ａｒｅ  ｅａｓｉｌｙ
ｐｕｔ  ｏｎ  ｃｈａｒａｃｔｅｒｓ  ｔｈｒｏｕｇｈ  ｉｎｓｅｒｔｉｏｎ  ｏｆ  ｅｍｂｅｄｄｅｄ  ｃｏｄｅ  
ｓｅｑｕｅｎｃｅｓ  ｉｎ  ｔｈｅ  ｅｄｉｔｏｒｓ．  Ｓｏｍｅ  ａｔｔｒｉｂｕｔｅｓ  ｓｕｃｈ  ａｓ  ｓｉｚｅ  ｃａｎ  
ｕｓｅ  ｔｈｅ  ｅｍｂｅｄｄｅｄ  ｃｏｍｍａｎｄ  ｆｏｒｍ  ｓｏ  ｔｈａｔ  ｔｈｅｙ  ＜＜ｓｉｚｅ，４＞＞  ｃａｎ  ｂｅ  
ｓｅｅｎ  ｃｌｅａｒｌｙ  ｉｎ  ＜＜ｃｏｌｏｒ，  ｒｅｄ＋＞＞ｐｒｉｎｔｏｕｔｓ  ｏｆ  ｙｏｕｒ  ｃｏｄｅ．ｗｒｉｔｅｃ
（この「ｗｒｉｔｅ」ステートメントの意味：「エディタを使用して埋め込みコード・シーケンスを挿入することにより、アンダーライン、文字に対して斜体等の特殊効果を簡単に作用させることができます。サイズ等の属性は、埋め込みコマンド形式を使用できるので、コードのプリントアウトをはっきりと見せることができます。」）
【１７４９】
ｗｒｉｔｅｃ
選択的にテキストを表示する。
【１７５０】
ｗｒｉｔｅｃ      セレクタ；  テキスト；  テキスト；．．．
【１７５１】
説明
「ｗｒｉｔｅ」コマンドの選択形式。
【１７５２】
「セレクタ」に続く最初のデリミタは、その後にあるすべてのテキストを区切るために使用され、次の区切り文字を使用することができる。
セミコロン                ；
コロン                    ：
カンマ                    ，
エンド・オブ・ライン      」
ユニバーサル・デリミタ    ｜
【１７５３】
例
例１
変数「ｍｏｎｔｈ」を使用してテキストを選択し、月名の表示を行う。最初の２つのケース（負およびゼロ）は、テキストの選択に使用しない。
ｗｒｉｔｅ        Ｔｏｄａｙ’ｓ  ｍｏｎｔｈ  ｉｓ  ＄＄＄  末尾のスペースを保持する
ｗｒｉｔｅｃ      ｍｏｎｔｈ，，，Ｊａｎｕａｒｙ，Ｆｅｂｒｕａｒｙ，Ｍａｒｃｈ，Ａｐｒｉｌ，Ｍａｙ，Ｊｕｎｅ，
Ｊｕｌｙ，Ａｕｇｕｓｔ，Ｓｅｐｔｅｍｂｅｒ，Ｏｃｔｏｂｅｒ，Ｎｏｖｅｍｂｅｒ，Ｄｅｃｅｍｂｅｒ
（このステートメントの意味：「今日は、〜月です。」）
【１７５４】
例２
各選択ケースでは、複数行のテキストを使用することができる。また、セレクタのデリミタとして使用しないデリミタをテキストに含めることができる。
ｗｒｉｔｅｃ    ｑｕｅｓｔｉｏｎ；；；
Ｗｈａｔ  ｓｉｔｙ  ｗａｓ  ｏｎｃｅ  ｃａｌｌｅｄ  Ｆｏｒｔ  Ｄｅａｒｂｏｒｎ？
Ｈｉｎｔ：  ｉｔ  ｉｓ  ａｌｓｏ  ｃａｌｌｅｄ  ｔｈｅ  Ｗｉｎｄｙ  Ｃｉｔｙ，；    ＄＄  ケース１
Ｗｈａｔ  ｉｓ  ｔｈｅ  ｌａｒｇｅｓｔ  ｃｉｔｙ  ｉｎ  ｔｈｅ  ＵＳ？
Ｈｉｎｔ：  ｉｔ  ｉｓ  ｏｎ  ｔｈｅ  ｅａｓｔ  ｃｏａｓｔ，；
＄＄  ケース２
Ｗｈａｔ  ｃｉｔｙ  ｉｓ  ｋｎｏｗｎ  ａｓ  ｔｈｅ  Ｇａｔｅｗａｙ  ｔｏ  ｔｈｅ  Ｗｅｓｔ？
Ｈｉｎｔ：  ｉｔ  ｉｓ  ｏｎ  ｔｈｅ  Ｍｉｓｓｉｓｓｉｐｐｉ．；            ＄＄  ケース３
．．．
（この「ｗｒｉｔｅｃ」ステートメントの意味：「昔フォートディアボーンと呼ばれていた都市は？」「ヒント：風の町とも呼ばれています。」「アメリカで一番大きな都市は？」「ヒント：東海岸にあります。西部への玄関として知られた都市は？」「ミシシッピ川流域にあります。」
【１７５５】
ｚｅｒｏ
使用可能なバイト数または指定バイト数をゼロで埋める。
【１７５６】
ｚｅｒｏ        ｖａｒｉａｂｌｅ  ［，ｌｅｎｇｔｈ］
【１７５７】
説明
変数のスペースをゼロで埋める。タグを１つ使用する１タグ形式では、指定した「ｖａｒｉａｂｌｅ」変数だけをゼロで埋める。２タグ形式は、指定した「ｖａｒｉａｂｌｅ」から指定バイト数分をゼロで埋める。この形式においては、変数の境界をまたぐことができる。
【１７５８】
例
１つのコマンドを用いて大きな変数をゼロで埋める。
ｄｅｆｉｎｅ    ｇｌｏｂａｌ
ｖａｒ，  １２８          ＄＄  １２８バイトのバッファ
ｄｅｆｉｎｅ    ｅｎｄ
＊
ｚｅｒｏ      ｖａｒ      ＄＄  １２８バイトすべてを０で埋める。
【１７５９】
以上、特定の実施例ならびに応用の下に本発明を説明してきたが、当業者であれば、本開示内容に照らして、本発明の真意ないしは特許請求の範囲を超えることなく追加の実施例ならびに変形が可能であろう。したがって、ここに示した図面ならびに説明は本発明の理解を容易にする方法の１つとして提示されたものであり、その範囲を限定するものではないことを理解しなければならない。
【図面の簡単な説明】
【１７６０】
【図１】本発明に従って実行可能プログラムを互いに送信する各種のサーバーおよびユーザー・コンピューターを伴うコンピューター・ネットワークを示すブロック図である。
【図２】本発明による１次サーバーを示すブロック図である。
【図３】本発明によるユーザー・コンピューターを示すブロック図である。
【図４】図２に示した１次サーバーおよび図３に示したユーザー・コンピューターで行われる選択されたプログラム修正可能な処理回路のオペレーションにおけるメンテナンス・ループを示すフローチャートである。
【図５】図２に示した１次サーバーおよび図３に示したユーザー・コンピューターで行われる選択されたプログラム修正可能な処理回路のオペレーションにおける到来したデータ・パケットを処理するためのループを示すフローチャートである。
【図６】本発明に従って行われるコード・モジュールを求める到来した要求の処理に関連する別のオペレーションを示すフローチャートである。
【図７】図２に示した１次サーバーで行われる選択されたプログラム修正可能な処理回路のオペレーションにおける到来した資源要求パケットを処理するためのサブルーチンを示すフローチャートである。
【図８】図２に示した１次サーバーまたは２次サーバーで行われる選択されたプログラム修正可能な処理回路のオペレーションにおけるメンテナンス・ループを示すフローチャートである。
【図９】図２に示した１次サーバーで行われる選択されたプログラム修正可能な処理回路のオペレーションにおける到来した資源要求パケットを処理するためのサブルーチンを示すフローチャートである。
【図１０】図２に示した１次サーバーまたは２次サーバーで行われる選択されたプログラム修正可能な処理回路のオペレーションにおけるメンテナンス・ループを示すフローチャートである。
【図１】
2009009584.tif 000020
【図２】
2009009584.tif 000021
【図３】
2009009584.tif 000022
【図４Ａ】
2009009584.tif 000023
【図４Ｂ】
2009009584.tif 000024
【図５】
2009009584.tif 000025
【図６Ａ】
2009009584.tif 000026
【図６Ｂ】
2009009584.tif 000027
【図６Ｃ】
2009009584.tif 000028
【図６Ｄ】
2009009584.tif 000029
【図６Ｅ】
2009009584.tif 000030
【図７Ａ】
2009009584.tif 000031
【図７Ｂ】
2009009584.tif 000032
【図７Ｃ】
2009009584.tif 000033
【図７Ｄ】
2009009584.tif 000034
【図７Ｅ】
2009009584.tif 000035
【図８Ａ】
2009009584.tif 000036
【図８Ｂ】
2009009584.tif 000037
【図８Ｃ】
2009009584.tif 000038
【図９Ａ】
2009009584.tif 000039
【図９Ｂ】
2009009584.tif 000040
【図９Ｃ】
2009009584.tif 000041
【図９Ｄ】
2009009584.tif 000042
【図１０Ａ】
2009009584.tif 000043
【図１０Ｂ】
2009009584.tif 000044
【図１０Ｃ】
2009009584.tif 000045
【図１０Ｄ】
2009009584.tif 000046
【図１０Ｅ】
2009009584.tif 000047
【図１０Ｆ】
2009009584.tif 000048