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

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

7.8.7 固定小数点型

(1)IDLマッピング

 IDL言語で固定小数点fixedを指定した場合、COBOLでは有効桁数と小数点位置により以下のようにデータ宣言します。

IDL言語

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

COBOL

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

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

IDL言語

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

COBOL

   IDENTIFICATION DIVISION.
   PROGRAM-ID. "EXEC-METHOD".
   AUTHOR. OD/IDLCOMPILER VER.2.0.
   INSTALLATION. IDL FILE NAME IS simple.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
  * ALL RIGHTS RESERVED, COPYRIGHT (C) FUJITSU LIMITED 1998
   ENVIRONMENT DIVISION.
   CONFIGURATION SECTION.
   SPECIAL-NAMES.
       SYMBOLIC CONSTANT
       COPY SYMBOL-CONST IN CORBA.
       .
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
       SELECT OBJFILE ASSIGN "obj".
  *
   DATA DIVISION.
   FILE SECTION.
   FD  OBJFILE.
   01  FILE-BUF PIC X(1024).
  *
   WORKING-STORAGE SECTION.
   COPY CONST IN CORBA.
   01 MESS PIC X(40).
   01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY STRING-LENGTH.
   01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV.
   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.
   01 FIXED0 PIC S9(7)V9(3) PACKED-DECIMAL.
  *
   LINKAGE SECTION.
  
   01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ.
   01 COPY LONG IN CORBA REPLACING CORBA-LONG BY NUM.
   01 COPY BOOLEAN IN CORBA REPLACING CORBA-BOOLEAN BY RESULT.
  
  *
   PROCEDURE DIVISION USING
           OBJ
           NUM
           RESULT.
  *
       MOVE  0.22   TO FIXED1.
       MOVE  0.55555   TO FIXED3.
  
       CALL "ODSAMPLE-FIXEDTEST-OP1" USING
             OBJ
             FIXED1
             FIXED2
             FIXED3
             ENV
             FIXED0.
       MOVE "ODSAMPLE-FIXEDTEST-OP1" TO MESS.
       PERFORM ENV-CHECK
  *
       EXIT PROGRAM.
   MAIN-END.
  
   ENV-CHECK SECTION.
       EVALUATE TRUE
           WHEN CORBA-NO-EXCEPTION OF MAJOR OF ENV
                CONTINUE
           WHEN CORBA-USER-EXCEPTION OF MAJOR OF ENV
                DISPLAY "USER-EXCEPTION   : " MESS
                MOVE FUNCTION LENG (MESS) TO STRING-LENGTH
                CALL "CORBA-STRING-GET" USING
                                    IDL-ID OF ENV
                                    STRING-LENGTH
                                    MESS
                DISPLAY "ID : " MESS
                EXIT PROGRAM
           WHEN CORBA-SYSTEM-EXCEPTION OF MAJOR OF ENV
                DISPLAY "SYSTEM-EXCEPTION : " MESS
                MOVE FUNCTION LENG (MESS) TO STRING-LENGTH
                CALL "CORBA-STRING-GET" USING
                                    IDL-ID OF ENV
                                    STRING-LENGTH
                                    MESS
                DISPLAY "ID : " MESS
                EXIT PROGRAM
       END-EVALUATE.
   ENV-CHECK-END.
       EXIT.
  *
   END PROGRAM "EXEC-METHOD".

(2)クライアントアプリケーションで扱うパラメタ

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

   IDENTIFICATION DIVISION.
   PROGRAM-ID. "CLIENT-MAIN".
   AUTHOR. OD/IDLCOMPILER VER.2.0.
   INSTALLATION. IDL FILE NAME IS simple.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
  * ALL RIGHTS RESERVED, COPYRIGHT (C) FUJITSU LIMITED 1998
   ENVIRONMENT DIVISION.
   CONFIGURATION SECTION.
   SPECIAL-NAMES.
       ARGUMENT-NUMBER   IS ARG-C
       ARGUMENT-VALUE    IS ARG-V
       SYMBOLIC CONSTANT
       COPY SYMBOL-CONST INCORBA.
       .
  *
   DATA DIVISION.
  *
   WORKING-STORAGE SECTION.
   COPY CONST IN CORBA.
   01 TEMP-BUF USAGE POINTER.
   01 MESS PIC X(30).
   01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY STRING-LENGTH.
   01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV.
   01 COPY ORB IN CORBA REPLACING CORBA-ORB BY ORB.
   01 COPY BOA IN CORBA REPLACING CORBA-BOA BY BOA.
   01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ.
   01 COPY LONG IN CORBA REPLACING CORBA-LONG BY NUM.
   01 COPY BOOLEAN IN CORBAREPLACING CORBA-BOOLEAN BY RET.
   01 COPY LONG IN CORBA REPLACING CORBA-LONG BY I.
   01 BUFFER USAGE POINTER.
   01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY BUF-LENGTH.
   01 STR-BUF PIC X(30).
   01 COPY COSNAMING-NAMINGCONTEXT IN CORBA REPLACING
           COSNAMING-NAMINGCONTEXT BY COS-NAMING.
   01 COPY COSNAMING-NAME IN CORBA REPLACING COSNAMING-NAME BY NAME.
   01 NAME-A USAGE POINTER.
   01 COPY COSNAMING-NAMECOMPONENT IN CORBA REPLACING
           COSNAMING-NAMECOMPONENT BY NAME-COMPONENT.
   01 NAME-COMPONENT-A USAGE POINTER.
  *########## ORB SETTING PARAMETER #########
   01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY CURRENT-ARG-C.
   01 CURRENT-ARG-V.
      02 FILLER OCCURS 6.
         03 CURRENT-ARG-V-VALUE USAGE POINTER.
   01 APLI-NAME PIC X(8) VALUE "simple_c".
   01 TMP-STRING-BUF PIC X(20).
   01 COPY LONG IN CORBA REPLACING CORBA-LONG BY ARG-COUNT.
  *
   PROCEDURE DIVISION.
  *
   MAIN.
  
       DISPLAY "CLIENT START!!".
  * argument set : CURRENT-ARG-V-VALUE
       ACCEPT CURRENT-ARG-C FROM ARG-C.
       COMPUTE CURRENT-ARG-C = CURRENT-ARG-C + 1.
       PERFORM VARYING ARG-COUNT FROM 1 BY 1 UNTIL ARG-COUNT > CURRENT-ARG-C
          IF ARG-COUNT = 1
             MOVE APLI-NAME TO TMP-STRING-BUF
          ELSE
             ACCEPT TMP-STRING-BUF FROM ARG-V
          END-IF
          MOVE FUNCTION LENG (TMP-STRING-BUF) TO STRING-LENGTH
          CALL "CORBA-STRING-SET" USING
                CURRENT-ARG-V-VALUE (ARG-COUNT)
                STRING-LENGTH
                TMP-STRING-BUF
       END-PERFORM.
       SET CURRENT-ARG-V-VALUE (ARG-COUNT) TO NULL.
  * ObjectDirector Initialize
       MOVE  12 TO STRING-LENGTH.
       CALL  "CORBA-STRING-SET" USING
             TEMP-BUF
             STRING-LENGTH
             FJ-OM-ORB-ID.
       CALL "CORBA-ORB-INIT" USING
             CURRENT-ARG-C
             CURRENT-ARG-V
             TEMP-BUF
             ENV
             ORB.
       CALL "CORBA-FREE" USING TEMP-BUF.
       MOVE "CORBA-ORB-INIT" TO MESS.
       PERFORM ENV-CHECK
  
       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
             CURRENT-ARG-C
             CURRENT-ARG-V
             TEMP-BUF
             ENV
             BOA.
       CALL "CORBA-FREE" USING TEMP-BUF.
       MOVE "CORBA-ORB-BOA-INIT" TO MESS.
       PERFORM ENV-CHECK.
  * NamingService repository get
       MOVE FUNCTION LENG ( CORBA-ORB-OBJECTID-NAMESERVICE ) TO STRING-LENGTH.
       CALL "CORBA-STRING-SET" USING
             TEMP-BUF
             STRING-LENGTH
             CORBA-ORB-OBJECTID-NAMESERVICE.
       CALL "CORBA-ORB-RESOLVE-INITIAL-REFERENCES" USING
             ORB
             TEMP-BUF
             ENV
             COS-NAMING.
       CALL "CORBA-FREE" USING TEMP-BUF.
       MOVE "CORBA-ORB-RESOLVE-INITIAL-REFERENCES" TO MESS.
       PERFORM ENV-CHECK.
  * ODdemo::calculator repository get
       MOVE FUNCTION LENG (STR-BUF) TO STRING-LENGTH.
       MOVE "ODsample::fixedtest" TO STR-BUF.
       CALL "CORBA-STRING-SET" USING
             IDL-ID OF NAME-COMPONENT
             STRING-LENGTH
             STR-BUF.
       MOVE " " TO STR-BUF.
       CALL "CORBA-STRING-SET" USING
             KIND OF NAME-COMPONENT
             STRING-LENGTH
             STR-BUF.
       MOVE 1 TO SEQ-LENGTH OF NAME.
       MOVE 1 TO SEQ-MAXIMUM OF NAME.
       MOVE 1 TO NUM.
       CALL "CORBA-SEQUENCE-COSNAMING-NAMECOMPONENT-ALLOCBUF" USING
             SEQ-MAXIMUM OF NAME
             SEQ-BUFFER OF NAME.
       MOVE FUNCTION ADDR ( NAME ) TO NAME-A.
       MOVE FUNCTION ADDR ( NAME-COMPONENT ) TO NAME-COMPONENT-A.
       CALL "CORBA-SEQUENCE-ELEMENT-SET" USING
             NAME-A
             NUM
             NAME-COMPONENT-A.
       CALL "COSNAMING-NAMINGCONTEXT-RESOLVE" USING
                COS-NAMING
                NAME
                ENV
                OBJ.
       MOVE "COSNAMING-NAMINGCONTEXT-RESOLVE" TO MESS.
       PERFORM ENV-CHECK.
  * CALL fixed program
       CALL "EXEC-METHOD" USING
                   OBJ
                   NUM
                   RET.
       CALL "CORBA-OBJECT-RELEASE" USING OBJ ENV.
       CALL "CORBA-OBJECT-RELEASE" USING COS-NAMING ENV.
       MOVE "CORBA-OBJECT-RELEASE" TO MESS.
       PERFORM ENV-CHECK.
       CALL "CORBA-FREE" USING SEQ-BUFFER OF NAME.
  
       STOP RUN.
   MAIN-END.
  
   ENV-CHECK SECTION.
       EVALUATE TRUE
           WHEN CORBA-NO-EXCEPTION OF MAJOR OF ENV
                CONTINUE
           WHEN CORBA-USER-EXCEPTION OF MAJOR OF ENV
                DISPLAY "USER-EXCEPTION   : " MESS
                MOVE FUNCTION LENG (MESS) TO STRING-LENGTH
                CALL "CORBA-STRING-GET" USING
                                    IDL-ID OF ENV
                                    STRING-LENGTH
                                    MESS
                DISPLAY "ID : " MESS
                EXIT PROGRAM
           WHEN CORBA-SYSTEM-EXCEPTION OF MAJOR OF ENV
                DISPLAY "SYSTEM-EXCEPTION : " MESS
                MOVE FUNCTION LENG (MESS) TO STRING-LENGTH
                CALL "CORBA-STRING-GET" USING
                                    IDL-ID OF ENV
                                    STRING-LENGTH
                                    MESS
                DISPLAY "ID : " MESS
                EXIT PROGRAM
       END-EVALUATE.
   ENV-CHECK-END.
       EXIT.
  *
   END PROGRAM "CLIENT-MAIN".

(3)サーバアプリケーションで扱うパラメタ

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

   IDENTIFICATION DIVISION.
   PROGRAM-ID. "ODSAMPLE-FIXEDTEST-OP1".
   AUTHOR. OD/IDLcompiler Ver.2.0.
   INSTALLATION. IDL FILE NAME IS simple.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
  * ALL RIGHTS RESERVED, COPYRIGHT (C) FUJITSU LIMITED 1998
   ENVIRONMENT DIVISION.
   CONFIGURATION SECTION.
  *
   INPUT-OUTPUT SECTION.
  *
   DATA DIVISION.
  *
   WORKING-STORAGE SECTION.
   COPY CONST IN CORBA.
  
   LINKAGE SECTION.
   01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ.
   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.
   01 FIXED0 PIC S9(7)V9(3) PACKED-DECIMAL.
   01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV.
  
  *
   PROCEDURE DIVISION USING
           OBJ
           FIXED1
           FIXED2
           FIXED3
           ENV
           FIXED0.
  *
   MAIN.
  *
  * SET OUT PARAMETER
       MOVE   00 TO FIXED2.
  *
  * SET INOUT PARAMETER.
       MOVE 0.88888  TO FIXED3.
  *
  * SET RETURN.
       MOVE 12345.345 TO FIXED0.
  *
   MAIN-END.
  *
   END PROGRAM  "ODSAMPLE-FIXEDTEST-OP1".

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

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