Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 プログラム作成リファレンス COBOL言語編


6.1.3 SPPの例(サービスプログラム)

SPPのサービスプログラムのコーディング例を次に示します。

  10       *  
  20       ********************************************************
  30       * SPPサービスプログラム  SVR01                         *
  40       ********************************************************
  50       *
  60        IDENTIFICATION DIVISION.  
  70       *
  80        PROGRAM-ID. SVR01.  
  90       *
 100       ********************************************************
 110       * データ領域の設定                                     *
 120       ********************************************************
 130       *  
 140        DATA DIVISION.  
 150        WORKING-STORAGE SECTION.  
 160        01  FD-ID EXTERNAL.  
 170            10  FD-SAVE      PIC S9(9) COMP.  
 180        01  DAM-ARG1.  
 190            02  REQUEST      PIC X(8) VALUE SPACE.  
 200            02  STATUS-CODE  PIC X(5) VALUE SPACE.  
 210            02  FILLER       PIC X(3).  
 220            02  FILE-NAME    PIC X(8).  
 230            02  KEY-NO       PIC S9(9) COMP VALUE ZERO.  
 240            02  BUFFER-LEN   PIC S9(9) COMP VALUE ZERO.  
 250            02  FILDES       PIC S9(9) COMP VALUE ZERO.  
 260            02  FILLER       PIC X(28).  
 270        01  DAM-ARG2.  
 280            02  ACCESS-CODE  PIC X(4).  
 290            02  FLAG1        PIC X(1).  
 300            02  FLAG2        PIC X(1).  
 310            02  FLAG3        PIC X(1).  
 320            02  FLAG4        PIC X(1).  
 330            02  FLAGS        PIC S9(9) COMP VALUE ZERO.  
 340            02  DAMKEY.  
 350                03  FIRST-BLOCK-NO PIC S9(9) COMP.  
 360                03  LAST-BLOCK-NO  PIC S9(9) COMP.  
 370       *  
 380        01  CNTL-BUFFER.  
 390            02  W-COUNT      PIC S9(9) COMP.  
 400            02  RWT-DATA     PIC X(18) VALUE SPACE.  
 410            02  FILLER       PIC X(483) VALUE SPACE.  
 420       *  
 430        01  W-BUFFER.  
 440            02  FILLER       PIC X(504).  
 450       *  
 460         LINKAGE SECTION.  
 470         77  IN-DATA      PIC X(32).  
 480         77  IN-LENG      PIC S9(9) COMP.  
 490         77  OUT-DATA     PIC X(32).  
 500         77  OUT-LENG     PIC S9(9) COMP.  
 510       *  
 520         PROCEDURE DIVISION USING IN-DATA IN-LENG OUT-DATA OUT-LENG.  
 530         SVR01 SECTION.  
 540         DISPLAY  'SVR01:PROCEDURE START' .  
 550       * 
 560        ********************************************************
 570        * DAM-READ(論理ファイルからブロックの入力)             *
 580        ********************************************************
 590        *  
 600         MOVE 'DCDAMSVC' TO REQUEST     OF DAM-ARG1.  
 610         MOVE 'damfile0' TO FILE-NAME   OF DAM-ARG1.  
 620         MOVE 1          TO KEY-NO      OF DAM-ARG1.  
 630         MOVE 504        TO BUFFER-LEN  OF DAM-ARG1.  
 640         MOVE FD-SAVE    TO FILDES      OF DAM-ARG1.  
 650         MOVE 'READ'     TO ACCESS-CODE OF DAM-ARG2.  
 660         MOVE 'M'        TO FLAG1       OF DAM-ARG2.  
 670         MOVE SPACE      TO FLAG2       OF DAM-ARG2.  
 680         MOVE 0          TO FIRST-BLOCK-NO OF DAMKEY.  
 690         MOVE 0          TO LAST-BLOCK-NO  OF DAMKEY.  
 700         CALL 'CBLDCDAM' USING DAM-ARG1 DAM-ARG2 CNTL-BUFFER.  
 710             IF STATUS-CODE OF DAM-ARG1 NOT = '00000' THEN  
 720                DISPLAY 'SVR01:DAM-READ FAILED. CODE ='  
 730                STATUS-CODE OF DAM-ARG1  
 740                MOVE 'SVR01: DAM READ FAILED' TO OUT-DATA  
 750                MOVE 25 TO OUT-LENG  
 760                GO TO PROG-END  
 770             END-IF.  
 780        *  
 790        ********************************************************
 800        * DAM-WRITE(論理ファイルへブロックの出力)              *
 810        ********************************************************
 820        *  
 830         DAM-WRITE.  
 840         ADD 1 TO W-COUNT OF CNTL-BUFFER.  
 850         MOVE 'DCDAMSVC' TO REQUEST     OF DAM-ARG1.  
 860         MOVE 'damfile0' TO FILE-NAME   OF DAM-ARG1.  
 870         MOVE 1          TO KEY-NO      OF DAM-ARG1.  
 880         MOVE 504        TO BUFFER-LEN  OF DAM-ARG1.  
 890         MOVE FD-SAVE    TO FILDES      OF DAM-ARG1.  
 900         MOVE 'WRIT'     TO ACCESS-CODE OF DAM-ARG2.  
 910         MOVE W-COUNT OF CNTL-BUFFER TO FIRST-BLOCK-NO OF DAMKEY.  
 920         MOVE 0          TO LAST-BLOCK-NO OF DAMKEY.  
 930         MOVE IN-DATA TO W-BUFFER.  
 940         CALL 'CBLDCDAM' USING DAM-ARG1 DAM-ARG2 W-BUFFER.  
 950             IF STATUS-CODE OF DAM-ARG1 NOT = '00000' THEN  
 960               IF STATUS-CODE OF DAM-ARG1 = '01606' THEN  
 970                 MOVE 0 TO W-COUNT OF CNTL-BUFFER  
 980                 GO TO DAM-WRITE  
 990               END-IF  
1000               DISPLAY 'SVR01:DAM-WRITE FAILED. CODE = '  
1010               STATUS-CODE OF DAM-ARG1  
1020               MOVE 'SVR01:DAM WRITE FAILED' TO OUT-DATA  
1030               MOVE 26 TO OUT-LENG  
1040               GO TO PROG-END  
1050             END-IF.  
1060        *  
1070        ********************************************************
1080        * DAM-REWRITE(論理ファイルのブロックの更新)            *
1090        ********************************************************
1100        *  
1110         MOVE 'DCDAMSVC' TO REQUEST     OF DAM-ARG1.
1120         MOVE 'damfile0' TO FILE-NAME   OF DAM-ARG1.  
1130         MOVE 1          TO KEY-NO      OF DAM-ARG1.  
1140         MOVE 504        TO BUFFER-LEN  OF DAM-ARG1.  
1150         MOVE FD-SAVE    TO FILDES      OF DAM-ARG1.  
1160         MOVE 'REWT'     TO ACCESS-CODE OF DAM-ARG2.  
1170         MOVE 'U'        TO FLAG1       OF DAM-ARG2.  
1180         MOVE 0         TO FIRST-BLOCK-NO OF DAMKEY.  
1190         MOVE 0         TO LAST-BLOCK-NO  OF DAMKEY.  
1200         MOVE 'REWRITE COMPLETE' TO RWT-DATA OF CNTL-BUFFER.
1210         CALL 'CBLDCDAM' USING DAM-ARG1 DAM-ARG2 CNTL-BUFFER.  
1220             IF STATUS-CODE OF DAM-ARG1 NOT = '00000' THEN  
1230               DISPLAY 'SVR01:DAM-REWRITE FAILED. CODE = '  
1240               STATUS-CODE OF DAM-ARG1  
1250               MOVE 'SVR01:DAM REWRITE FAILED' TO OUT-DATA  
1260               MOVE 28 TO OUT-LENG  
1270               GO TO PROG-END  
1280             END-IF.  
1290         MOVE 'SVR01:PROCESS COMPLETE' TO OUT-DATA.  
1300         MOVE 26 TO OUT-LENG.  
1310         PROG-END.  
1320         DISPLAY 'SVR01:Good-By!!'.  
1330         END PROGRAM SVR01.