Interstage Application Server アプリケーション作成ガイド (CORBAサービス編)
目次 索引 前ページ次ページ

第8章 アプリケーションの開発(OOCOBOL)> 8.8 データ型に対するマッピング

8.8.6 固定小数点型

(1)IDLマッピング

 IDL言語で固定小数点fixedを指定した場合、数字項目(PICTURE句)でデータ宣言します。
 有効桁数と小数点位置による数字項目の定義形式を以下に示します。

IDL言語

  // fixed<digits,scale> とした場合 (digits=有効桁数,scale=小数点位置) 
  typedef fixed <10,2>  fixed1;    // digits > scale > 0 のとき
  typedef fixed <2,10>  fixed2;    // 0 < digits < scale のとき
  typedef fixed <10,10> fixed3;    // digits = scale のとき
  typedef fixed <10,0>  fixed4;    // scale = 0 のとき
  typedef fixed <10,-2> fixed5;    // scale < 0 のとき

OOCOBOL

   01 FIXED1 PIC S9(8)V9(2)  PACKED-DECIMAL. 
   01 FIXED2 PIC SVP(8)9(2)  PACKED-DECIMAL. 
   01 FIXED3 PIC SV9(10)     PACKED-DECIMAL. 
   01 FIXED4 PIC S9(10)      PACKED-DECIMAL. 
   01 FIXED5 PIC S9(10)P(2)  PACKED-DECIMAL. 

 以降では、以下のIDL定義例をもとに説明します。

IDL言語

  module ODsample {
      typedef fixed <10,3>  fixed0; 
      interface fixedtest { 
          fixed0  op1( 
              in       fixed <5,10>    fixed1, 
              out      fixed <10,-3>   fixed2, 
              inout    fixed <10,10>   fixed3 ); 
      }; 
  };

OOCOBOL

  * データ型宣言(固定小数点)
     01 FIXED0  PIC  S9(7)V9(3)  PACKED-DECIMAL.

(2)クライアントアプリケーション例

 クライアントアプリケーション例を以下に示します。

   IDENTIFICATION         DIVISION.
   PROGRAM-ID.            "CLIENT-MAIN".
  *
   ENVIRONMENT            DIVISION.
   CONFIGURATION          SECTION.
   REPOSITORY.
       COPY               CORBA--REP.
       COPY               COSNAMING--REP.
       COPY               SIMPLE--REP.
       .
   SPECIAL-NAMES.
       SYMBOLIC CONSTANT
       COPY               CORBA--CONST.
       COPY               COSNAMING--CONST.
       COPY               SIMPLE--CONST.
       .
  *
   DATA                   DIVISION.
   WORKING-STORAGE        SECTION.
   COPY                   CORBA--COPY.
   COPY                   COSNAMING--COPY.
   COPY                   SIMPLE--COPY.
  *
   01 ORB                 USAGE OBJECT REFERENCE CORBA-ORB.
   01 OBJ                 USAGE OBJECT REFERENCE CORBA-OBJECT.
   01 NAMING-CONTEXT      USAGE OBJECT REFERENCE COSNAMING-NAMINGCONTEXT.
   01 NAME                TYPE                   COSNAMING-NAME.
   01 NAME-COMPONENT      USAGE OBJECT REFERENCE COSNAMING-NAMECOMPONENT.
   01 NAME-ID             USAGE OBJECT REFERENCE CORBA-STRING.
   01 NAME-KIND           USAGE OBJECT REFERENCE CORBA-STRING.
  *
   01 EXCEPTION-ID        USAGE OBJECT REFERENCE CORBA-STRING.
   01 EXCEPTION-ID-VALUE  PIC   X(50).
   01 API-NAME            PIC   X(50).
  *
   01 TARGET-OBJ          USAGE OBJECT REFERENCE ODSAMPLE-FIXEDTEST.
   01 FIXED0              TYPE ODSAMPLE-FIXED0.
   01 FIXED1              PIC SVP(5)9(5) PACKED-DECIMAL.
   01 FIXED2              PIC S9(10)P(3) PACKED-DECIMAL.
   01 FIXED3              PIC SV9(10)    PACKED-DECIMAL.
  *
   PROCEDURE              DIVISION.
  *
   DECLARATIVES.
  *
   OTHER-ERROR SECTION.
       USE EXCEPTION CORBA-EXCEPTION.
       DISPLAY "CORBA::Exception: " API-NAME.
       SET EXCEPTION-ID TO IDL-ID OF EXCEPTION-OBJECT AS CORBA-EXCEPTION.
       INVOKE EXCEPTION-ID "GET-VALUE" RETURNING EXCEPTION-ID-VALUE.
       DISPLAY "   Exception-id: " EXCEPTION-ID-VALUE.
       EXIT PROGRAM.
   END-OTHER-ERR.
  *
   END DECLARATIVES.
  *
   MAIN SECTION.
  *
       MOVE "CORBA::ORB_init" TO API-NAME.
       INVOKE CORBA "ORB_INIT"
                          USING     "simple_c"
                                    FJ-OM_ORBID
                          RETURNING ORB.
  *
       MOVE "CORBA::ORB::resolve_initial_references" TO API-NAME.
       INVOKE ORB "RESOLVE_INITIAL_REFERENCES"
                          USING     CORBA-ORB-OBJECTID_NAMESERVICE
                          RETURNING OBJ.
  *
       INVOKE COSNAMING-NAMINGCONTEXT "NARROW"
                          USING     OBJ
                          RETURNING NAMING-CONTEXT.
  *
       INVOKE CORBA-STRING "NEW-WITH-VALUE"
                          USING     "ODsample::fixedtest"
                          RETURNING NAME-ID.
  *
       INVOKE CORBA-STRING "NEW-WITH-VALUE"
                          USING     " "
                          RETURNING NAME-KIND.
  *
       INVOKE COSNAMING-NAMECOMPONENT "NEW"
                          RETURNING NAME-COMPONENT.
  *
       SET IDL-ID OF NAME-COMPONENT TO NAME-ID.
       SET KIND   OF NAME-COMPONENT TO NAME-KIND.
  *
       INVOKE SEQUENCE-NAMECOMPONENT-001 "NEW-WITH-LENGTH"
                          USING     1
                          RETURNING NAME.
  *
       INVOKE NAME "SET-VALUE"
                          USING     1
                                    NAME-COMPONENT.
  *
       MOVE "CosNaming::NamingContext::resolve" TO API-NAME.
       INVOKE NAMING-CONTEXT "RESOLVE"
                          USING     NAME
                          RETURNING OBJ.
  *
       INVOKE ODSAMPLE-FIXEDTEST "NARROW"
                          USING     OBJ
                          RETURNING TARGET-OBJ.
  *
  *  ODsample::samplefix
  *
  *  SET IN PARAMETER
       MOVE 0.  23 TO FIXED1.
  *
  *  SET INOUT PARAMETER
       MOVE 0.  33 TO FIXED3.
  *
       MOVE "ODdemo::fixedtest::op1" TO API-NAME.
       INVOKE TARGET-OBJ "OP1"
                          USING     FIXED1
                                    FIXED2
                                    FIXED3
                          RETURNING FIXED0.
  *
       STOP RUN.
  *
   END-MAIN.
  *
   END PROGRAM "CLIENT-MAIN".

(3)サーバアプリケーション例

 サーバアプリケーション例を以下に示します。

   CLASS-ID.              ODSAMPLE-FIXEDTEST-IMPL
       INHERITS           ODSAMPLE-FIXEDTEST.
  *
   ENVIRONMENT            DIVISION.
   CONFIGURATION          SECTION.
   REPOSITORY.
       COPY               CORBA--REP.
       COPY               SIMPLE--REP.
       .
   SPECIAL-NAMES.
       SYMBOLIC CONSTANT
       COPY               CORBA--CONST.
       COPY               SIMPLE--CONST.
       .
  *
   OBJECT.
    DATA                  DIVISION.
    WORKING-STORAGE       SECTION.
    COPY                  CORBA--COPY.
    COPY                  SIMPLE--COPY.
  *
    PROCEDURE             DIVISION.
  *
     METHOD-ID.           OP1 OVERRIDE.
     DATA                 DIVISION.
     WORKING-STORAGE      SECTION.
     01 STR-WORK          USAGE OBJECT REFERENCE CORBA-STRING.
     LINKAGE              SECTION.
   01 FIXED0              TYPE ODSAMPLE-FIXED0.
     01 FIXED1            PIC SVP(5)9(5) PACKED-DECIMAL.
     01 FIXED2            PIC S9(10)P(3) PACKED-DECIMAL.
     01 FIXED3            PIC SV9(10)    PACKED-DECIMAL.
  *
     PROCEDURE            DIVISION
                          USING     FIXED1
                                    FIXED2
                                    FIXED3
                          RETURNING FIXED0
                          RAISING   CORBA-SYSTEMEXCEPTION.
  *
  *  SET OUT PARAMETER
       MOVE   0 TO FIXED2.
  *
  *  SET INOUT PARAMETER
       MOVE 0.   TO FIXED3.
  *
  *  SET RESULT
       MOVE 200.33 TO FIXED0.
  *
     END METHOD OP1.
  *
   END OBJECT.
  *
   END CLASS ODSAMPLE-FIXEDTEST-IMPL.

目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2005