(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".