C$SYSTEM

このルーチンは、「SYSTEM」および「C$RUN」の機能を兼ね備えています。このルーチンを使用すると、COBOL アプリケーション内から他のプログラムをさまざまな方法で実行できます。
注: This ACUCOBOL-GT library routine is available in this COBOL version. Any compatibility issues in this COBOL system are in the Compatibility Issues section at the end of the topic.

C$SYSTEM は、SYSTEM および C$RUN の元の機能に加えて、次の機能を提供します。

  1. すべてのオプションで統一されたプログラミング インターフェイス
  2. UNlX ホストに対して非同期操作 (C$RUN) を追加
  3. Windows ホストでウィンドウの最小化、最大化、または非表示を指定可能
  4. Windows に対する高度なシェル選択

使用法

CALL "C$SYSTEM" 
    USING CMD-LINE, FLAGS
    GIVING EXIT-STATUS

C$SYSTEM は、シン クライアント環境でプログラムを実行するために使用できます。シン クライアント環境の表示ホスト上でプログラムを実行するには、プレフィックス「@[DISPLAY]:」をクライアント マシン上にあるプログラムの名前に追加します。次に例を示します。

C$SYSTEM "@[DISPLAY]:C:\notepad myfile.txt"

パラメーター

CMD-LINE PIC X(n) 実行するオペレーティング システムのコマンド ラインを含みます。
FLAGS 符号なしの数値 (オプション) 操作のオプションを指定します。省略した場合、「0」が指定されているものとして動作します。
EXIT-STATUS (任意の数値データ項目) 呼び出し先プログラムの終了状態を返します。

フラグ

FLAGS フィールドは、コマンドの実行方法に関するさまざまなオプションを指定します。次のオプションに対応する値を合計して、FLAGS フィールドの値を決定します。

CSYS-ASYNC (値 1) このオプションを指定すると、コマンドが COBOL プログラムとは独立して実行されます。コマンドの開始後、COBOL プログラムが続行されます。このオプションを指定した場合、EXIT-STATUS で不定の結果が返されます。このフラグが使用されていない場合、COBOL プログラムは、実行されたコマンドが終了するまで待機してから処理を続行します。CSYS-ASYNC は、Windows および UNIX システムでのみ機能します。
注: UNIX マシンでは、端末への入力または出力を行うプログラムで CSYS-ASYNC を指定することはサポートされていません。
CSYS-NO-IO (値 2) 文字ベースのシステムでは、通常、コマンドを実行する前に端末がデフォルト状態に設定され、コマンドが終了したときにランタイムに必要な状態に設定が戻されます。このオプションを指定すると、画面を使用する呼び出し先アプリケーションが正しく実行されます。ただし、CSYS-NO-IO を使用すると、画面の内容がランタイムで記憶されないことがあります。これは、実行されたコマンドによって、ACUCOBOL-GT で認識されない情報が画面に表示される場合があるために発生します。そのため、C$SYSTEM の呼び出し後に作成されたウィンドウで、そのウィンドウを閉じた際に画面の内容が正しく復元されないことがあります。この問題は、C$SYSTEM から制御が戻った後に画面を再初期化することで回避できます。これを行うには、画面を消去するか、画面全体を覆うフローティング ウィンドウまたはポップアップ ウィンドウを閉じます (C$SYSTEM の呼び出しによって作成されたウィンドウである必要があります)。

実行するコマンドで画面入出力が実行されない場合は、CSYS-NO-IO オプションを使用することで、ACUCOBOL-GT の元の画面のメモリを保持するように C$SYSTEM に要求できます。これにより、前述の問題が回避されます。このオプションは、独自のウィンドウでコマンドが実行される Windows では効果がありません。

CSYS-MAXIMIZED (値 4) このオプションを指定すると、最大化されたウィンドウでコマンドが実行されます。これは、Windows で実行している場合にのみ機能します。
CSYS-MINIMIZED (値 8) このオプションを指定すると、最小化されたウィンドウでコマンドが実行されます。また、COBOL プログラムはアクティブなプログラムのままとなり、キーボード フォーカスが保持され、アクティブな表示も維持されます。これは、Windows で実行している場合にのみ機能します。
CSYS-COMPATIBILITY (値 16) このオプションを指定すると、SYSTEM ライブラリ ルーチンの動作と互換性のあるウィンドウでコマンドが実行されます。このオプションは、SYSTEM の呼び出しを C$SYSTEM の呼び出しに変更する必要がある場合に使用します。SYSTEM と C$SYSTEM のデフォルト動作にはほとんど違いがないため、このオプションが必要になることはまずありません。確認されている唯一の違いは、Microsoft Word アプリケーションに関する動作です。SYSTEM を使用して Microsoft Word を起動した場合は、常に、「通常」サイズのウィンドウ、つまり Windows によって推奨されたウィンドウ サイズで起動します。C$SYSTEM を使用して Microsoft Word を起動した場合は (FLAGS 指定なし)、最後に使われたウィンドウ サイズが適用されます。CSYS-COMPATIBILITY のフラグを指定すると、C$SYSTEM は SYSTEM と同じように動作します。したがって、C$SYSTEM の動作が必要な場合は、このフラグは使用しないでください。SYSTEM と比較して、C$SYSTEM は、基本的には、Windows 自体がプログラムを起動する方法により近いと言えます。CSYS-COMPATIBILITY フラグは、SYSTEM 呼び出しを C$SYSTEM 呼び出しに変更したときに、その違いが望ましくない場合にのみ、使用することをお勧めします。
CSYS-HIDDEN (値 32) このオプションを指定すると、ウィンドウを非表示にしてコマンドが実行されます。一部のアプリケーション、特にユーザーが頻繁に操作するようなアプリケーションでは、コマンドを非表示にするとわかりにくくなる場合がある点に注意してください。ただし、一連のファイルの名前を変更するバッチ ファイルの実行など、ユーザー インターフェイスのないシステム タスクを実行する場合には役に立ちます。このオプションは、Windows で実行している場合にのみ機能します。
CSYS-SHELL (値 64) このオプションを指定すると、C$SYSTEM で、ホストのコマンド ライン プロセッサ (ホストのシェル) を使用してコマンドが実行されます。指定されていない場合、コマンド ライン プロセッサなしでコマンドが実行されることがあります。このオプションは Windows にのみ影響します (Windows 以外のバージョンでは常にホストのシェルが使用されます)。独自のウィンドウを作成する Windows アプリケーションでは、FLAGS で指定された初期ウィンドウ サイズの要求をアプリケーションが受け付けなくなるため、シェルの使用は避けてください。「.COM」プログラム、「.BAT」プログラム、およびその他の組み込みのシェル コマンド (COPY や DIR など) では、シェルを使用する必要があります。使用しないと、コマンドが実行されない場合があります。

このオプションの機能は、COMSPEC 環境変数の値および「/C」をコマンドの前にプレフィックスとして付加することです。Windows ではこれは通常「C:\COMMAND.COM /C」のようなプレフィックスになります。

CSYS-DESKTOP (値 128) このオプションは、シン クライアント環境で実行されているアプリケーション用です。これは、アプリケーション サーバーではなくクライアント システム上でコマンドを実行する必要があることを示します。コマンドの実行時、CSYS-ASYNC オプションも指定されていない限り、コマンドが完了するまでアプリケーションが待機している間、シン クライアントは「ハング」しているように見えます。この動作は、CSYS-ASYNC フラグで回避できます。CSYS-ASYNC フラグを指定すると、非同期でコマンドが実行されます。

CSYS-DESKTOP が指定されていても、呼び出し元のプログラムがシン クライアントで実行されていない場合は、このフラグは無視され、呼び出し元のアプリケーションと同じマシン上でコマンドが実行されます。

CSYS-INHERIT-HANDLES (値 256) このオプションを指定すると、呼び出し元のプロセスが所有している継承可能な各ハンドルが新しいプロセスに継承されます。これには、stdinstdoutstderr、および呼び出し元のプロセスが開いているその他のファイル ハンドルが含まれます。

呼び出し先のプロセスでは、開いているファイルが多数継承されるため、ファイル ハンドルが不足する可能性があることに注意してください。

このオプションが必要となるのは、代替端末マネージャー ランタイムで C$SYSTEM を呼び出して別の代替端末マネージャー ランタイムを呼び出すバッチ プログラムを実行する場合です。このオプションが指定されていない場合、呼び出し先のプログラムは画面に出力を表示しません。

説明

C$SYSTEM ルーチンは、端末から入力されたコマンドであるかのように、CMD-LINE をホスト オペレーティング システムに送信します。コマンド ラインで許容される最大の長さは 1024 バイトです。

注: Windows で実行されるが独自のウィンドウを作成しないアプリケーションでは、.COM.BAT、および COPY や DIR などの組み込みのシェル コマンドを実行するために CSYS-SHELL フラグを使用する必要があります。

ウィンドウ サイズ フラグ (CSYS-MAXIMIZED、CSYS-MINIMIZED、CSYS-COMPATIBILITY、CSYS-HIDDEN) は 1 つだけ指定する必要があります。ウィンドウ サイズ フラグがない場合は、オペレーティング システムによってサイズが決定される通常ウィンドウでコマンドが実行されます。Windows プログラムでは独自のウィンドウ サイズを設定できます。これは、FLAGS によって推奨されたウィンドウ サイズをオーバーライドします。基本的に、FLAGS の値はアプリケーションに対する単なる推奨です。

ホスト システムにとって意味のないオプションは無視されますが、同じ FLAGS 設定の意味のあるオプションは適用されます。

C$SYSTEM 呼び出しの状態は、EXIT-STATUS に格納されます。これは、通常は実行されたプログラムの終了状態になりますが、C$SYSTEM が失敗した場合には -1 になります。Windows では、COMMAND.COM に組み込まれているコマンドからは 1 が返されることに注意してください。これは、COMMAND.COM では組み込み関数の終了状態が返されないためです。

互換性の問題

  • CSYS-NO-IO (値 2) は無視されます。
  • op-code のCSYS-MAXIMIZED (値 4)、CSYS-MINIMIZED (値 8)、CSYS-HIDDEN (値 32)、CSYS-SHELL (値 64)、CSYS-INHERIT-HANDLES (値 256) は Windows 専用です。
  • CSYS-INHERIT-HANDLES (値 256) は、プログラムがコマンド プロンプトから実行される場合にのみ有効です。
  • シン クライアント機能はこの COBOL システムではサポートされないため、以下もサポートされません。
    • 「@[DISPLAY]」構文
    • フラグ CSYS-DESKTOP (値 128)