(1)IDLマッピング
IDL言語でシーケンス型sequenceを指定した場合、COBOLでは以下の構造体(シーケンス構造体)をデータ宣言します。また、シーケンス構造体の領域獲得関数(関数名:“CORBA-SEQUENCE-データ型-ALLOC”、以降XX-ALLOC関数と呼ぶ)と、シーケンスデータ域の獲得関数(関数名:“CORBA-SEQUENCE-データ型-ALLOCBUF”、以降XX-ALLOCBUF関数と呼ぶ)がIDLコンパイラで生成されます。
01 CORBA-SEQUENCE.
* シーケンス配列の最大個数
03 SEQ-MAXIMUM PIC S9(9) COMP-5.
* シーケンス配列の使用個数
03 SEQ-LENGTH PIC S9(9) COMP-5.
* シーケンスのデータ域へのポインタ
03 SEQ-BUFFER USAGE POINTER.以降では、以下のIDL定義例をもとに説明します。
シーケンス(基本型)
module ODsample{
interface seqtest{
typedef sequence<long> sampleseq;
sampleseq op1(in sampleseq seq1, out sampleseq seq2,
inout sampleseq seq3 );
};
};シーケンス(構造体型)
module ODsample{
interface seqtest{
struct structV { string st; };
typedef sequence<structV> sampleseq;
sampleseq op1(in sampleseq seq1, out sampleseq seq2,
inout sampleseq seq3 );
};
}; 01 ODSAMPLE-SEQTEST-SAMPLESEQ.
* シーケンスの最大長
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-MAXIMUM.
* シーケンスの長さ
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-LENGTH.
* シーケンスのデータ
02 SEQ-BUFFER USAGE IS POINTER.(2)クライアントアプリケーションで扱うパラメタ
クライアントアプリケーションのパラメタの扱いについて、以下に示します。
パラメタ | サーバへ渡すパラメタ | サーバから渡されたパラメタ |
|---|---|---|
in | シーケンス構造体のメンバとして、配列の最大個数/使用個数/データ域のアドレスを設定します。 シーケンス構造体/SEQ-BUFFERの領域獲得する場合は、XX-ALLOC関数/XX-ALLOCBUF関数を使用します。 | - |
inout | シーケンス構造体のメンバとして、配列の最大個数/使用個数/データ域のアドレスを設定します。 シーケンス構造体/SEQ-BUFFERの領域獲得する場合は、XX-ALLOC関数/XX-ALLOCBUF関数を使用します。 リリースフラグにCORBA-TRUE-VALUEを設定する場合、データ部の領域はスタブにより解放されます。 | 領域は、スタブで自動的に獲得されます(各メンバも設定されます)。 |
out | - | (inoutパラメタと同じ) |
注意
クライアントおよびスタブで獲得した領域は、不要になった時点でCORBA-FREE関数で解放する必要があります。このとき、データ域の領域(XX-ALLOCBUF関数で獲得)を解放するかどうかを、リリースフラグで指定します。
リリースフラグの参照/設定は、以下の関数/フラグを使用します。
[関数]
CALL "CORBA-SEQUENCE-GET-RELEASE" USING
BUFFER
RET-VAL.
CALL "CORBA-SEQUENCE-SET-RELEASE" USING
BUFFER
CORBA-TRUE-VALUE.[フラグ]
CORBA-TRUE-VALUE:CORBA-FREE関数発行時、SEQ-BUFEERの指す領域も解放されます。
CORBA-FALSE-VALUE:CORBA-FREE関数発行時、SEQ-BUFEERの指す領域は解放されません(デフォルト)。
なお、スタブで獲得されたoutパラメタ、復帰値のリリースフラグは、CORBA-TRUE-VALUEに設定されます。
クライアントアプリケーションでの処理例を以下に示します。
シーケンス(基本型)
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY CONST IN CORBA.
01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV.
01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ.
01 SEQ1.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-MAXIMUM.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-LENGTH.
02 SEQ-BUFFER USAGE IS POINTER.
01 SEQ2 USAGE POINTER.
01 SEQ3-P USAGE POINTER.
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY I.
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY LONG-V.
01 BUF-IN-P USAGE POINTER.
01 LONG-IN-P USAGE POINTER.
01 BUF-IO-P USAGE POINTER.
01 LONG-IO-P USAGE POINTER.
LINKAGE SECTION.
01 SEQ3.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-MAXIMUM.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-LENGTH.
02 SEQ-BUFFER USAGE IS POINTER.
PROCEDURE DIVISION.
* inパラメタの処理
MOVE 2 TO SEQ-MAXIMUM OF SEQ1.
MOVE 2 TO SEQ-LENGTH OF SEQ1.
CALL "CORBA-SEQUENCE-LONG-ALLOCBUF" USING
SEQ-LENGTH OF SEQ1
SEQ-BUFFER OF SEQ1.
MOVE 10 TO LONG-V.
MOVE FUNCTION ADDR (SEQ1) TO BUF-IN-P.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > SEQ-LENGTH OF SEQ1
COMPUTE LONG-V = 20 + LONG-V
MOVE FUNCTION ADDR(LONG-V) TO LONG-IN-P
CALL "CORBA-SEQUENCE-ELEMENT-SET" USING
BUF-IN-P
I
LONG-IN-P
END-PERFORM
* inoutパラメタの処理
CALL "CORBA-SEQUENCE-LONG-ALLOC" USING
SEQ3-P.
SET ADDRESS OF SEQ3 TO SEQ3-P.
MOVE 3 TO SEQ-MAXIMUM OF SEQ3.
MOVE 3 TO SEQ-LENGTH OF SEQ3.
CALL "CORBA-SEQUENCE-LONG-ALLOCBUF" USING
SEQ-LENGTH OF SEQ3
SEQ-BUFFER OF SEQ3.
MOVE 5 TO LONG-V.
MOVE FUNCTION ADDR (SEQ3) TO BUF-IO-P.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > SEQ-LENGTH OF SEQ3
COMPUTE LONG-V = 30 + LONG-V
MOVE FUNCTION ADDR(LONG-V) TO LONG-IO-P
CALL "CORBA-SEQUENCE-ELEMENT-SET" USING
BUF-IO-P
I
LONG-IO-P
END-PERFORM
CALL "CORBA-SEQUENCE-SET-RELEASE" USING
SEQ3-P
CORBA-TRUE-VALUE.
CALL “ODSAMPLE-SEQTEST-OP1” USING
OBJ
SEQ1
SEQ2
SEQ3-P
ENV
SEQ0.
CALL "CORBA-FREE" USING
SEQ0.
CALL "CORBA-FREE" USING
SEQ-BUFFER OF SEQ1.
CALL "CORBA-FREE" USING
SEQ2.
CALL "CORBA-FREE" USING
SEQ3-P.シーケンス(構造体型)
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY CONST IN CORBA.
01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV.
01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ.
01OP1-IN-P.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-MAXIMUM.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-LENGTH.
02 SEQ-BUFFER USAGE IS POINTER.
01 OP1-OUT-P USAGE POINTER.
01 OP1-IO-P USAGE POINTER.
01 OP1-RESULT USAGE IS POINTER.
01 TMP-ODSAMPLE-SEQTEST-STRUCTV..
02 ST USAGE IS POINTER.
01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY WS-NUM.
01 TMP-POINTER USAGE IS POINTER.
01 TMP-SEQ-ADDR USAGE IS POINTER.
01 TMP-BUF PIC X(20).
01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY TMP-LEN.
LINKAGE SECTION.
01 TMP-ODSAMPLE-SEQTEST-SAMPLESEQ.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-MAXIMUM.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-LENGTH.
02 SEQ-BUFFER USAGE IS POINTER.
PROCEDURE DIVISION.
* inパラメタの処理
MOVE 10 TO SEQ-MAXIMUM OF OP1-IN-P.
MOVE 10 TO SEQ-LENGTH OF OP1-IN-P.
CALL "CORBA-SEQUENCE-ODSAMPLE-SEQTEST-STRUCTV-ALLOCBUF" USING
SEQ-MAXIMUM OF OP1-IN-P
SEQ-BUFFER OF OP1-IN-P.
MOVE 10 TO LONG-V.
MOVE FUNCTION ADDR( OP1-IN-P ) TO TMP-SEQ-ADDR.
PERFORM VARYING WS-NUM FROM 1 BY 1 UNTIL WS-NUM > SEQ-LENGTH OF OP1-IN-P
MOVE "ABC" TO TMP-BUF
MOVE FUNCTION LENG( TMP-BUF ) TO TMP-LEN
CALL "CORBA-STRING-SET" USING
ST OF TMP-ODSAMPLE-SEQTEST-STRUCTV
TMP-LEN
TMP-BUF
MOVE FUNCTION ADDR( TMP-ODSAMPLE-SEQTEST-STRUCTV ) TO TMP-POINTER
CALL "CORBA-SEQUENCE-ELEMENT-SET" USING
TMP-SEQ-ADDR
WS-NUM
TMP-POINTER
END-PERFORM.
MOVE FUNCTION ADDR( OP1-IN-P ) TO TMP-SEQ-ADDR
PERFORM VARYING WS-NUM FROM 1 BY 1 UNTIL WS-NUM > SEQ-LENGTH OF OP1-IN-P
CALL "CORBA-SEQUENCE-ELEMENT-GET" USING
TMP-SEQ-ADDR
WS-NUM
TMP-POINTER
SET ADDRESS OF TMP-ODSAMPLE-SEQTEST-STRUCTV-L TO TMP-POINTER
MOVE FUNCTION LENG( TMP-BUF ) TO TMP-LEN
CALL "CORBA-STRING-GET" USING
ST OF TMP-ODSAMPLE-SEQTEST-STRUCTV-L
TMP-LEN
TMP-BUF
END-PERFORM.
* inoutパラメタの処理
CALL "CORBA-SEQUENCE-ODSAMPLE-SEQTEST-STRUCTV-ALLOC" USING
OP1-IO-P.
SET ADDRESS OF TMP-ODSAMPLE-SEQTEST-SAMPLESEQ TO OP1-IO-P.
MOVE 10 TO SEQ-MAXIMUM OF TMP-ODSAMPLE-SEQTEST-SAMPLESEQ.
MOVE 10 TO SEQ-LENGTH OF TMP-ODSAMPLE-SEQTEST-SAMPLESEQ.
CALL "CORBA-SEQUENCE-ODSAMPLE-SEQTEST-STRUCTV-ALLOCBUF" USING
SEQ-MAXIMUM OF TMP-ODSAMPLE-SEQTEST-SAMPLESEQ
SEQ-BUFFER OF TMP-ODSAMPLE-SEQTEST-SAMPLESEQ
MOVE FUNCTION ADDR( TMP-ODSAMPLE-SEQTEST-SAMPLESEQ ) TO TMP-SEQ-ADDR
PERFORM VARYING WS-NUM FROM 1 BY 1 UNTIL WS-NUM > SEQ-LENGTH
OF TMP-ODSAMPLE-SEQTEST-SAMPLESEQ
MOVE "DEF" TO TMP-BUF
MOVE FUNCTION LENG( TMP-BUF ) TO TMP-LEN
CALL "CORBA-STRING-SET" USING
ST OF TMP-ODSAMPLE-SEQTEST-STRUCTV
TMP-LEN
TMP-BUF
MOVE FUNCTION ADDR( TMP-ODSAMPLE-SEQTEST-STRUCTV ) TO TMP-POINTER
CALL "CORBA-SEQUENCE-ELEMENT-SET" USING
TMP-SEQ-ADDR
WS-NUM
TMP-POINTER
END-PERFORM.
SET ADDRESS OF TMP-ODSAMPLE-SEQTEST-SAMPLESEQ TO OP1-IO-P.
MOVE FUNCTION ADDR( TMP-ODSAMPLE-SEQTEST-SAMPLESEQ ) TO TMP-SEQ-ADDR
PERFORM VARYING WS-NUM FROM 1 BY 1 UNTIL WS-NUM > SEQ-LENGTH
OF TMP-ODSAMPLE-SEQTEST-SAMPLESEQ
CALL "CORBA-SEQUENCE-ELEMENT-GET" USING
TMP-SEQ-ADDR
WS-NUM
TMP-POINTER
SET ADDRESS OF TMP-ODSAMPLE-SEQTEST-STRUCTV-L TO TMP-POINTER
MOVE FUNCTION LENG( TMP-BUF ) TO TMP-LEN
CALL "CORBA-STRING-GET" USING
ST OF TMP-ODSAMPLE-SEQTEST-STRUCTV-L
TMP-LEN
TMP-BUF
END-PERFORM.
CALL "CORBA-SEQUENCE-SET-RELEASE" USING
OP1-IO-P
CORBA-TRUE-VALUE.
CALL "ODSAMPLE-SEQTEST-OP1" USING
OBJ
OP1-IN-P
OP1-OUT-P
OP1-IO-P
ENV
OP1-RESULT.
CALL "CORBA-FREE" USING
OP1-RESULT.
CALL "CORBA-FREE" USING
SEQ-BUFFER OF OP1-IN-P.
CALL "CORBA-FREE" USING
OP1-OUT-P.
CALL "CORBA-FREE" USING
OP1-IO-P.(3)サーバアプリケーションで扱うパラメタ
シーケンス構造体のメンバとして、配列の最大個数/使用個数/データ域のアドレスを設定します。
シーケンス構造体/SEQ-BUFFERの領域獲得する場合、XX-ALLOC関数/XX-ALLOCBUF関数を使用します。
サーバアプリケーションのパラメタの扱いについて、以下に示します。
パラメタ | クライアントから渡されたパラメタ | クライアントへ渡すパラメタ |
|---|---|---|
in | 各領域(シーケンス構造体/データ域)は、スケルトンで自動的に獲得/解放されます。 | - |
inout | 各領域(シーケンス構造体/データ域)は、スケルトンで自動的に獲得されます。 | inoutデータの領域を更新する場合は、以下の処理を実施してください。 リリースフラグにCORBA-TRUE-VALUEを設定する、またはリリースフラグを設定しない場合、領域はスケルトンで自動的に解放されます。 |
out | - | シーケンス構造体/SEQ-BUFFER域をXX-ALLOC関数/XX-ALLOCBUF関数で獲得します。 リリースフラグにCORBA-TRUE-VALUEを設定する場合、領域はスケルトンで自動的に解放されます。 |
サーバアプリケーションでの処理例を以下に示します。
シーケンス(基本型)
IDENTIFICATION DIVISION.
PROGRAM-ID. "ODSAMPLE-SEQTEST-OP1".
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
SYMBOLIC CONSTANT
COPY SYMBOL-CONST IN CORBA.
.
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY CONST IN CORBA.
01 STR USAGE POINTER.
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY LSIZE.
01 STR-WORK PIC X(30).
03 IDL-ID USAGE POINTER.
03 MINOR PIC 9(9) COMP-5.
03 IDL-STATUS PIC 9(9) COMP-5.
03 PARAM USAGE POINTER.
03 MAGIC PIC 9(9) COMP-5.
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY I.
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY NUM.
01 LONG-OUT-P USAGE POINTER.
01 LONG-IO-P USAGE POINTER.
01 LONG-RET-P USAGE POINTER.
01 BUF-OUT-P USAGE POINTER.
01 BUF-IO-P USAGE POINTER.
01 BUF-RET-P USAGE POINTER.
LINKAGE SECTION.
01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ.
01 SEQ.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-MAXIMUM.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-LENGTH.
02 SEQ-BUFFER USAGE POINTER.
01 SEQ1.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-MAXIMUM.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-LENGTH.
02 SEQ-BUFFER USAGE POINTER.
01 SEQ2.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-MAXIMUM.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-LENGTH.
02 SEQ-BUFFER USAGE POINTER.
01 SEQ3.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-MAXIMUM.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-LENGTH.
02 SEQ-BUFFER USAGE POINTER.
01 SEQ1-P USAGE POINTER.
01 SEQ2-P USAGE POINTER.
01 SEQ3-P USAGE POINTER.
01 ENV.
03 MAJOR PIC 9(9) COMP-5.
88 CORBA-NO-EXCEPTION VALUE 0.
88 CORBA-USER-EXCEPTION VALUE 1.
88 CORBA-SYSTEM-EXCEPTION VALUE 2.
01 SEQ-P USAGE POINTER.
PROCEDURE DIVISION USING
OBJ
SEQ1
SEQ2-P
SEQ3-P
ENV
SEQ-P.
MAIN.
* outパラメタの処理
CALL "CORBA-SEQUENCE-LONG-ALLOC" USING
SEQ2-P
SET ADDRESS OF SEQ2 TO SEQ2-P.
MOVE 4 TO SEQ-MAXIMUM OF SEQ2.
MOVE 4 TO SEQ-LENGTH OF SEQ2.
CALL "CORBA-SEQUENCE-LONG-ALLOCBUF" USING
SEQ-LENGTH OF SEQ2
SEQ-BUFFER OF SEQ2.
MOVE FUNCTION ADDR (SEQ2) TO BUF-OUT-P.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > SEQ-LENGTH OF SEQ2
COMPUTE NUM = I * 100
MOVE FUNCTION ADDR(NUM) TO LONG-OUT-P
CALL "CORBA-SEQUENCE-ELEMENT-SET" USING
BUF-OUT-P
I
LONG-OUT-P
END-PERFORM
CALL "CORBA-SEQUENCE-SET-RELEASE" USING
SEQ2-P
CORBA-TRUE-VALUE.
* inoutパラメタの処理
SET ADDRESS OF SEQ3 TO SEQ3-P.
CALL "CORBA-FREE" USING
SEQ-BUFFER OF SEQ3.
MOVE 5 TO SEQ-MAXIMUM OF SEQ3.
MOVE 5 TO SEQ-LENGTH OF SEQ3.
CALL "CORBA-SEQUENCE-LONG-ALLOCBUF" USING
SEQ-LENGTH OF SEQ3
SEQ-BUFFER OF SEQ3.
MOVE FUNCTION ADDR (SEQ3) TO BUF-IO-P.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > SEQ-LENGTH OF SEQ3
COMPUTE NUM = I * 1000
MOVE FUNCTION ADDR(NUM) TO LONG-IO-P
CALL "CORBA-SEQUENCE-ELEMENT-SET" USING
BUF-IO-P
I
LONG-IO-P
END-PERFORM
CALL "CORBA-SEQUENCE-SET-RELEASE" USING
SEQ3-P
CORBA-TRUE-VALUE.
* 復帰値の処理
CALL "CORBA-SEQUENCE-LONG-ALLOC" USING
SEQ-P.
SET ADDRESS OF SEQ TO SEQ-P.
MOVE 6 TO SEQ-MAXIMUM OF SEQ.
MOVE 6 TO SEQ-LENGTH OF SEQ.
MOVE FUNCTION ADDR(SEQ) TO BUF-RET-P.
CALL "CORBA-SEQUENCE-LONG-ALLOCBUF" USING
SEQ-LENGTH OF SEQ
SEQ-BUFFER OF SEQ.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > SEQ-LENGTH OF SEQ
COMPUTE NUM = I * 10000
MOVE FUNCTION ADDR(NUM) TO LONG-RET-P
CALL "CORBA-SEQUENCE-ELEMENT-SET" USING
BUF-RET-P
I
LONG-RET-P
END-PERFORM
CALL "CORBA-SEQUENCE-SET-RELEASE" USING
SEQ-P
CORBA-TRUE-VALUE.
MAIN-END.
END PROGRAM "ODSAMPLE-SEQTEST-OP1".シーケンス(構造体型)
IDENTIFICATION DIVISION.
PROGRAM-ID. "ODSAMPLE-SEQTEST-OP1".
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
SYMBOLIC CONSTANT
COPY SYMBOL-CONST IN CORBA.
.
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY CONST IN CORBA.
01 TMP-POINTER USAGE IS POINTER.
01 TMP-SEQ-ADDR USAGE IS POINTER.
01 TMP-BUF PIC X(20).
01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY TMP-LEN.
01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY WS-NUM.
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY WS-LONG.
01 TMP-ODSAMPLE-SEQTEST-STRUCTV.
02 ST USAGE IS POINTER.
LINKAGE SECTION.
01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ.
01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV.
01 OP1-IN-P.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-MAXIMUM.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-LENGTH.
02 SEQ-BUFFER USAGE IS POINTER.
01 OP1-OUT-P USAGE IS POINTER.
01 OP1-IO-P USAGE IS POINTER.
01 OP1-RESULT USAGE IS POINTER.
01 TMP-ODSAMPLE-SEQTEST-SAMPLESEQ.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-MAXIMUM.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-LENGTH.
02 SEQ-BUFFER USAGE IS POINTER.
01 TMP-ODSAMPLE-SEQTEST-STRUCTV-L.
02 ST USAGE IS POINTER.
PROCEDURE DIVISION USING
OBJ
OP1-IN-P
OP1-OUT-P
OP1-IO-P
ENV
OP1-RESULT.
MAIN.
* outパラメタの処理
CALL "CORBA-SEQUENCE-ODSAMPLE-SEQTEST-STRUCTV-ALLOC" USING OP1-OUT-P.
CALL "CORBA-SEQUENCE-SET-RELEASE" USING OP1-OUT-P CORBA-TRUE-VALUE.
SET ADDRESS OF TMP-ODSAMPLE-SEQTEST-SAMPLESEQ TO OP1-OUT-P.
MOVE 10 TO SEQ-MAXIMUM OF TMP-ODSAMPLE-SEQTEST-SAMPLESEQ.
MOVE 10 TO SEQ-LENGTH OF TMP-ODSAMPLE-SEQTEST-SAMPLESEQ.
CALL "CORBA-SEQUENCE-ODSAMPLE-SEQTEST-STRUCTV-ALLOCBUF" USING
SEQ-MAXIMUM OF TMP-ODSAMPLE-SEQTEST-SAMPLESEQ
SEQ-BUFFER OF TMP-ODSAMPLE-SEQTEST-SAMPLESEQ
MOVE FUNCTION ADDR( TMP-ODSAMPLE-SEQTEST-SAMPLESEQ ) TO TMP-SEQ-ADDR
PERFORM VARYING WS-NUM FROM 1 BY 1 UNTIL WS-NUM > SEQ-LENGTH
OF TMP-ODSAMPLE-SEQTEST-SAMPLESEQ
MOVE "JKL" TO TMP-BUF
MOVE FUNCTION LENG( TMP-BUF ) TO TMP-LEN
CALL "CORBA-STRING-SET" USING
ST OF TMP-ODSAMPLE-SEQTEST-STRUCTV
TMP-LEN
TMP-BUF
MOVE FUNCTION ADDR( TMP-ODSAMPLE-SEQTEST-STRUCTV ) TO TMP-POINTER
CALL "CORBA-SEQUENCE-ELEMENT-SET" USING
TMP-SEQ-ADDR
WS-NUM
TMP-POINTER
END-PERFORM.
SET ADDRESS OF TMP-ODSAMPLE-SEQTEST-SAMPLESEQ TO OP1-OUT-P.
MOVE FUNCTION ADDR( TMP-ODSAMPLE-SEQTEST-SAMPLESEQ ) TO TMP-SEQ-ADDR
PERFORM VARYING WS-NUM FROM 1 BY 1 UNTIL WS-NUM > SEQ-LENGTH
OF TMP-ODSAMPLE-SEQTEST-SAMPLESEQ
CALL "CORBA-SEQUENCE-ELEMENT-GET" USING
TMP-SEQ-ADDR
WS-NUM
TMP-POINTER
SET ADDRESS OF TMP-ODSAMPLE-SEQTEST-STRUCTV-L TO TMP-POINTER
MOVE FUNCTION LENG( TMP-BUF ) TO TMP-LEN
CALL "CORBA-STRING-GET" USING
ST OF TMP-ODSAMPLE-SEQTEST-STRUCTV-L
TMP-LEN
TMP-BUF
END-PERFORM.
CALL "CORBA-SEQUENCE-SET-RELEASE" USING
OP1-OUT-P
CORBA-TRUE-VALUE.
* inoutパラメタの処理
CALL "CORBA-SEQUENCE-ODSAMPLE-SEQTEST-STRUCTV-ALLOC" USING OP1-IO-P.
CALL "CORBA-SEQUENCE-SET-RELEASE" USING OP1-IO-P CORBA-TRUE-VALUE.
SET ADDRESS OF TMP-ODSAMPLE-SEQTEST-SAMPLESEQ TO OP1-IO-P.
MOVE 10 TO SEQ-MAXIMUM OF TMP-ODSAMPLE-SEQTEST-SAMPLESEQ.
MOVE 10 TO SEQ-LENGTH OF TMP-ODSAMPLE-SEQTEST-SAMPLESEQ.
CALL "CORBA-SEQUENCE-ODSAMPLE-SEQTEST-STRUCTV-ALLOCBUF" USING
SEQ-MAXIMUM OF TMP-ODSAMPLE-SEQTEST-SAMPLESEQ
SEQ-BUFFER OF TMP-ODSAMPLE-SEQTEST-SAMPLESEQ
MOVE FUNCTION ADDR( TMP-ODSAMPLE-SEQTEST-SAMPLESEQ ) TO TMP-SEQ-ADDR
PERFORM VARYING WS-NUM FROM 1 BY 1 UNTIL WS-NUM > SEQ-LENGTH
OF TMP-ODSAMPLE-SEQTEST-SAMPLESEQ
MOVE "GHI" TO TMP-BUF
MOVE FUNCTION LENG( TMP-BUF ) TO TMP-LEN
CALL "CORBA-STRING-SET" USING
ST OF TMP-ODSAMPLE-SEQTEST-STRUCTV
TMP-LEN
TMP-BUF
MOVE FUNCTION ADDR( TMP-ODSAMPLE-SEQTEST-STRUCTV ) TO TMP-POINTER
CALL "CORBA-SEQUENCE-ELEMENT-SET" USING
TMP-SEQ-ADDR
WS-NUM
TMP-POINTER
END-PERFORM.
SET ADDRESS OF TMP-ODSAMPLE-SEQTEST-SAMPLESEQ TO OP1-IO-P.
MOVE FUNCTION ADDR( TMP-ODSAMPLE-SEQTEST-SAMPLESEQ ) TO TMP-SEQ-ADDR
PERFORM VARYING WS-NUM FROM 1 BY 1 UNTIL WS-NUM > SEQ-LENGTH
OF TMP-ODSAMPLE-SEQTEST-SAMPLESEQ
CALL "CORBA-SEQUENCE-ELEMENT-GET" USING
TMP-SEQ-ADDR
WS-NUM
TMP-POINTER
SET ADDRESS OF TMP-ODSAMPLE-SEQTEST-STRUCTV-L TO TMP-POINTER
MOVE FUNCTION LENG( TMP-BUF ) TO TMP-LEN
CALL "CORBA-STRING-GET" USING
ST OF TMP-ODSAMPLE-SEQTEST-STRUCTV-L
TMP-LEN
TMP-BUF
END-PERFORM.
CALL "CORBA-SEQUENCE-SET-RELEASE" USING
OP1-IO-P
CORBA-TRUE-VALUE.
* 復帰値の処理
CALL "CORBA-SEQUENCE-ODSAMPLE-SEQTEST-STRUCTV-ALLOC" USING OP1-RESULT.
CALL "CORBA-SEQUENCE-SET-RELEASE" USING OP1-RESULT CORBA-TRUE-VALUE.
SET ADDRESS OF TMP-ODSAMPLE-SEQTEST-SAMPLESEQ TO OP1-RESULT.
MOVE 10 TO SEQ-MAXIMUM OF TMP-ODSAMPLE-SEQTEST-SAMPLESEQ.
MOVE 10 TO SEQ-LENGTH OF TMP-ODSAMPLE-SEQTEST-SAMPLESEQ.
CALL "CORBA-SEQUENCE-ODSAMPLE-SEQTEST-STRUCTV-ALLOCBUF" USING
SEQ-MAXIMUM OF TMP-ODSAMPLE-SEQTEST-SAMPLESEQ
SEQ-BUFFER OF TMP-ODSAMPLE-SEQTEST-SAMPLESEQ
MOVE FUNCTION ADDR( TMP-ODSAMPLE-SEQTEST-SAMPLESEQ ) TO TMP-SEQ-ADDR
PERFORM VARYING WS-NUM FROM 1 BY 1 UNTIL WS-NUM > SEQ-LENGTH
OF TMP-ODSAMPLE-SEQTEST-SAMPLESEQ
MOVE "MNO" TO TMP-BUF
MOVE FUNCTION LENG( TMP-BUF ) TO TMP-LEN
CALL "CORBA-STRING-SET" USING
ST OF TMP-ODSAMPLE-SEQTEST-STRUCTV
TMP-LEN
TMP-BUF
MOVE FUNCTION ADDR( TMP-ODSAMPLE-SEQTEST-STRUCTV ) TO TMP-POINTER
CALL "CORBA-SEQUENCE-ELEMENT-SET" USING
TMP-SEQ-ADDR
WS-NUM
TMP-POINTER
END-PERFORM.
SET ADDRESS OF TMP-ODSAMPLE-SEQTEST-SAMPLESEQ TO OP1-RESULT.
MOVE FUNCTION ADDR( TMP-ODSAMPLE-SEQTEST-SAMPLESEQ ) TO TMP-SEQ-ADDR
PERFORM VARYING WS-NUM FROM 1 BY 1 UNTIL WS-NUM > SEQ-LENGTH
OF TMP-ODSAMPLE-SEQTEST-SAMPLESEQ
CALL "CORBA-SEQUENCE-ELEMENT-GET" USING
TMP-SEQ-ADDR
WS-NUM
TMP-POINTER
SET ADDRESS OF TMP-ODSAMPLE-SEQTEST-STRUCTV-L TO TMP-POINTER
MOVE FUNCTION LENG( TMP-BUF ) TO TMP-LEN
CALL "CORBA-STRING-GET" USING
ST OF TMP-ODSAMPLE-SEQTEST-STRUCTV-L
TMP-LEN
TMP-BUF
END-PERFORM.
CALL "CORBA-SEQUENCE-SET-RELEASE" USING
OP1-RESULT
CORBA-TRUE-VALUE.
MAIN-END.
END PROGRAM "ODSAMPLE-SEQTEST-OP1".