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