初期化処理の後、サーバアプリケーションで実装するインタフェースの処理を記述します。インタフェース実装関数のパラメタには、オブジェクトリファレンス、IDLで定義したパラメタ、CORBA_Environmen構造体へのポインタが渡されます。
なお、アプリケーションで使用可能なCORBAのデータ型については、“6.8 データ型に対するマッピング”を参照してください。
IDENTIFICATION DIVISION. * calculateメソッドの実装関数 PROGRAM-ID. "ODDEMO-CALCULATOR-CALCULATE". AUTHOR. OD/IDLCOMPILER VER.2.0. INSTALLATION. IDL FILE NAME IS COBSAMPLE.IDL. SECURITY. THIS SOURCE CODE WAS GENERATED BASE ON YOUR IDL FILE. WHEN THIS STUB/SKELETON SOURCE CODE IS CHANGED, THE OPERATION. GURANTEED IS NOT DONE. DATE-WRITTEN. TUE MAY 6 11:03:40 1997 * ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. ARGUMENT-NUMBER IS ARG-C ARGUMENT-VALUE IS ARG-V SYMBOLIC CONSTANT COPY SYMBOL-CONST IN CORBA. . * INPUT-OUTPUT SECTION. * DATA DIVISION. * WORKING-STORAGE SECTION. COPY CONST IN CORBA. 01 MESS PIC X(30). 01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY STRING-LENGTH. 01 COPY ORB IN CORBA REPLACING CORBA-ORB BY ORB. 01 COPY BOA IN CORBA REPLACING CORBA-BOA BY BOA. 01 STRING-TMP PIC X(10). 01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY FLAGS. 01 TEMP-BUF USAGE POINTER. 01 EXCEP. 03 COPY LONG IN CORBA REPLACING CORBA-LONG BY EXCEP-L. 01 EXCEP-A USAGE POINTER. 01 EX-ODDEMO-CALCULATOR-ZEROPARAM PIC X(35) VALUE "IDL:ODdemo/calculator/ZEROPARAM:1.0". 01 COPY EXCEPTION-TYPE IN CORBA REPLACING CORBA-EXCEPTION-TYPE BY EX-STATUS. 01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY C-ARG-C. 01 C-ARG-V. 02 FILLER OCCURS 2. 03 ARG-V-VALUE USAGE POINTER. 01 APLI-NAME PIC X(8) VALUE "simple_s". LINKAGE SECTION. 01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ. 01 COPY LONG IN CORBA REPLACING CORBA-LONG BY PARAM1. 01 COPY LONG IN CORBA REPLACING CORBA-LONG BY PARAM2. 01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV. 01 A-RESULT. 02 COPY LONG IN CORBA REPLACING CORBA-LONG BY ADD-RESULT. 02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SUBTRACT-RESULT. 02 COPY LONG IN CORBA REPLACING CORBA-LONG BY MULTIPLE-RESULT. 02 COPY FLOAT IN CORBA REPLACING CORBA-FLOAT BY DEVIDE-RESULT. * PROCEDURE DIVISION USING * サーバのオブジェクトリファレンス OBJ * 入力値 PARAM1 * 入力値 PARAM2 * エラー値 ENV * 演算結果 A-RESULT. * MAIN. COMPUTE C-ARG-C = 1. MOVE FUNCTION LENG (APLI-NAME) TO STRING-LENGTH. CALL "CORBA-STRING-SET" USING ARG-V-VALUE (1) STRING-LENGTH APLI-NAME. SET ARG-V-VALUE(2) TO NULL. MOVE 12 TO STRING-LENGTH. CALL "CORBA-STRING-SET" USING TEMP-BUF STRING-LENGTH FJ-OM-ORB-ID. CALL "CORBA-ORB-INIT" USING C-ARG-C C-ARG-V TEMP-BUF ENV ORB. MOVE "CORBA-ORB-INIT" TO MESS. PERFORM ENV-CHECK CALL "CORBA-FREE" USING TEMP-BUF. MOVE 15 TO STRING-LENGTH. CALL "CORBA-STRING-SET" USING TEMP-BUF STRING-LENGTH CORBA-BOA-OA-ID. CALL "CORBA-ORB-BOA-INIT" USING ORB C-ARG-C C-ARG-V TEMP-BUF ENV BOA. MOVE "CORBA-ORB-BOA-INIT" TO MESS. PERFORM ENV-CHECK. * 0除算チェック IF PARAM2 = 0 MOVE 1 TO FLAGS MOVE FUNCTION LENG(EX-ODDEMO-CALCULATOR-ZEROPARAM) TO STRING-LENGTH CALL "CORBA-STRING-SET" USING TEMP-BUF STRING-LENGTH EX-ODDEMO-CALCULATOR-ZEROPARAM MOVE 0 TO EXCEP-L OF EXCEP MOVE FUNCTION ADDR (EXCEP) TO EXCEP-A CALL "CORBA-BOA-SET-EXCEPTION" USING BOA FLAGS TEMP-BUF EXCEP-A ENV ELSE * Calculate COMPUTE ADD-RESULT OF A-RESULT = PARAM1 + PARAM2 COMPUTE SUBTRACT-RESULT OF A-RESULT = PARAM1 - PARAM2 COMPUTE MULTIPLE-RESULT OF A-RESULT = PARAM1 * PARAM2 COMPUTE DEVIDE-RESULT OF A-RESULT = PARAM1 / PARAM2 END-IF. EXIT PROGRAM. MAIN-END.