(1)IDLマッピング
IDL言語で固定小数点型fixedを指定した場合、COBOLでは有効桁数と小数点位置により以下のようにデータ宣言します。
// 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 のとき
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定義例をもとに説明します。
module ODsample { interface fixedtest { fixed <10,3> op1( in fixed <5,10> fixed1, out fixed <10,-3> fixed2, inout fixed <10,10> fixed3 ); }; };
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 IN CORBA. . * 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 CORBA REPLACING 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".