Do

DOコマンドは、GT.Mの呼び出しスタック内のエントリを作成し、入口参照(entryref)で指定された位置へ実行を渡します。

DOコマンドのフォーマットは:

D[O][:tvexpr] [entryref[(expr|.lvn[,...])][:tvexpr][,...]]

DOの範囲内で明示的または暗黙的なQUITは、しかし、他のDO、FOR、XECUTE、または外部関数の範囲内では無く、呼び出し元のポイントの次の命令に実行を戻します。このポイントには、次のDOの引数または別のコマンドがあります。ルーチンの最後の時点、または、引数なしDOで作成されたネストレベルの最後の時点で、GT.Mは暗黙のQUITを実行します。もしその行がコメントだけが含まれている場合でさえも、先行するピリオド (.) の数を変更することにより、ネストの現在のレベルを減らす任意の行は、暗黙のQUITを引き起こします。 ZGOTOコマンドのイメージと実行を終了することは、呼び出しポイントへ実行を最終的に戻すことを回避する唯一の方法です。

DOコマンドは、必要に応じて呼び出されるサブルーチンにパラメータを渡すことができます。入口参照(entryref)とパラメータパッシングの詳細については、 第5章: “Mの一般的な言語特徴 を参照してください。

DOの例

例:

GTM>DO ^%RD

この例では、ダイレクトモードからルーチンディレクトリのユーティリティプログラム(%RD)を呼び出します。キャレット記号(^)は、DOコマンドが外部ルーチンとして%RDを呼び出すことを指定します。

例:

GTM>DO A(3)

この例では、ラベルAでサブルーチンを呼び出し、パラメータとして値3を渡します。 DOの引数はキャレット記号(^)を持っていません、したがって、それは現在のルーチンのラベルとしてAを識別します。

例:

ReportA ; Label for ReportA
        SET di="" OPEN outfile USE outfile
        FOR  SET di=$ORDER(^div(di)) QUIT:di=""  DO PREP DO  DO POST
        .SET de="",(nr,gr)=0
        .WRITE "Division ",di,!F   S de=$ORDER(^de(di,de)) QUIT:de=""   DO
        ..WRITE "Department ",de," Gross Rev: ",^grev(di,de),!
        ..WRITE "Department ",de," Net Rev: ",^nrev(di,de),!
        ..SET gr=gr+^grev(di,de),nr=nr+^nrev(di,de)
        .W "Division Gross Rev: ",gr,!,"Division Net Rev: ",nr,!
         DO PRINT^OUTPUT(outfile)
         QUIT

このルーチンは、最初に、いくつかの前処理を行うために、ラベルの引数(PREP)でDOを使用しています。次に、それはレポートをフォーマットするために、 社内(company)の各部門(division)を引数なしDOをループしながら使用しています。1番目の引数なしDOの中で、2番目の引数なしDO(4行目)は、ループしながら、部門(division)内の各部署(department)をフォーマットします。すべての部門(department)の処理の後、部門(division)の要約を出力する1番目の引数なしDOに制御が戻ります。全部門(division)の処理に続いて、ラベルの引数(POST)のDOで、いくつかの後処理が行われます。最後に、最後の行の次の行で、ルーチンは、パラメータとして出力ファイルの名前(outfile)を渡して、外部ルーチン(^OUTPUT)のラベル(PRINT)で、サブルーチンを呼び出すDOを使用しています。

例:

GTM>zprint ^SQR
SQR(z);
  set revert=0
  if $view("undef") set revert=1 view "noundef"
  if z="" write "Missing parameter.",!     view:revert "undef" quit
  else  write z*z,! view:revert "undef" quit  
GTM>do ^SQR(10)
100
GTM>do ^SQR
Missing parameter.

この例では、DOを括弧付きで使用するか、括弧なしで使用するラベル呼び出しを示しています。

inserted by FC2 system