      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      * * * * * * * *  THIS MODULE IS CASE SENSITIVE  * * * * * * * *
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

       IDENTIFICATION DIVISION.
       PROGRAM-ID.     BIZCARD.

      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      *   PDFLIB CLIENT: BLOCK PROCESSING EXAMPLE                   *
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

       ENVIRONMENT DIVISION.

       DATA DIVISION.
       WORKING-STORAGE SECTION.


       01  PDFLIB-CONSTANTS.
           05  WIDTH         USAGE COMP-1 VALUE 0.20E+2.
           05  HEIGHT        USAGE COMP-1 VALUE 0.20E+2.

       01  PDFLIB-CALL-AREA.
           05  P                       PIC S9(9) BINARY.
           05  RC                      PIC S9(9) BINARY VALUE ZEROS.
           05  PDFLIB-RETURN-LONG      PIC S9(9) BINARY.
           05  PDFLIB-RETURN-CHAR      PIC X(64) VALUE SPACES.
           05  PDFLIB-RETURN-FLOAT     COMP-1 VALUE ZEROS.
           05  PDFLIB-ERR-STRING       PIC X(128).

       01  WS-WORK-FIELDS.
           05  WS-INT                  PIC S9(9) BINARY.
           05  WS-INT2                 PIC S9(9) BINARY.
           05  WS-ROW                  PIC S9(9) BINARY.
           05  WS-COL                  PIC S9(9) BINARY.
           05  WS-BLOCK-CONTAINER      PIC S9(9) BINARY.
           05  WS-PAGE                 PIC S9(9) BINARY.
           05  WS-PAGENO               PIC S9(9) BINARY.
           05  WS-FONT                 PIC S9(9) BINARY.
           05  WS-FLOAT                COMP-1.
           05  WS-FLOAT1               COMP-1.
           05  WS-FLOAT2               COMP-1.
           05  WS-FLOAT3               COMP-1.
           05  WS-DISP-FLOAT           PIC 9(9).99.
           05  WS-STRING               PIC X(128).
           05  WS-STRING1              PIC X(128).
           05  WS-STRING2              PIC X(128).
           05  WS-NULL                 PIC X(1) VALUE LOW-VALUES.




       PROCEDURE DIVISION.

      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      *   CREATE A PDF OBJECT                                       *
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

           CALL "PDNEW" USING          P,
                                       RC.


      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      *   OPEN OUTPUT PDF FILE                                      *
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

           MOVE 0 TO WS-INT.

           STRING 'BIZCARD.PDF' LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING.

           CALL "PDBEGDOC" USING       P,
                                       WS-STRING,
                                       WS-INT,
                                       WS-NULL,
                                       PDFLIB-RETURN-LONG,
                                       RC.

           IF PDFLIB-RETURN-LONG = -1
               CALL "PDERRMSG" USING   P,
                                       PDFLIB-ERR-STRING,
                                       RC.
               DISPLAY PDFLIB-ERR-STRING.
               MOVE +8 TO RETURN-CODE
               GOBACK.

      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      *   SET HYPERTEXT ENCODING FOR JAPANESE SYSTEMS COMPATABILITY *
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

           STRING 'hypertextencoding' LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING.
           STRING 'host' LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING2.

           CALL "PDSETPAR" USING       P,
                                       WS-STRING,
                                       WS-STRING2,
                                       RC.

      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      *   SET FONT LOCATIONS                                        *
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

           STRING 'FontAFM' LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING.
           STRING
           "LuciduxSans-Oblique=PDFLIB.BIND.DATA.AFM(LUCIDUXS)"
                   LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING2.

           CALL "PDSETPAR" USING       P,
                                       WS-STRING,
                                       WS-STRING2,
                                       RC.

           STRING 'FontOutline' LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING.
           STRING
           "LuciduxSans-Oblique=PDFLIB.BIND.DATA.PFA(LUCIDUXS)"
                   LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING2.

           CALL "PDSETPAR" USING       P,
                                       WS-STRING,
                                       WS-STRING2,
                                       RC.


      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      *   SET SEARCH PATH                                           *
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
           STRING 'SearchPath' LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING.
           STRING "'hlq.PDFLIB.BIND.DATA.PDF" LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING2.

           CALL "PDSETPAR" USING       P,
                                       WS-STRING,
                                       WS-STRING2,
                                       RC.


      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      *   SET PDF INFORMATION                                       *
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

           STRING 'Creator' LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING.
           STRING 'BIZCARD.cbl' LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING2.

           CALL "PDSETINF" USING       P,
                                       WS-STRING,
                                       WS-STRING2,
                                       RC.

           STRING 'Author' LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING.
           STRING 'Thomas Merz' LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING2.

           CALL "PDSETINF" USING       P,
                                       WS-STRING
                                       WS-STRING2,
                                       RC.

           STRING 'Title' LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING.
           STRING 'PDFlib block processing sample (COBOL)' LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING2.

           CALL "PDSETINF" USING       P,
                                       WS-STRING
                                       WS-STRING2,
                                       RC.


      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      *   OPEN PDI INPUT FILE                                       *
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

           STRING "BOILPLAT" LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING.
           MOVE LOW-VALUES TO WS-STRING2.
           MOVE 0 TO WS-INT.


           CALL "PDOPNPDI" USING       P,
                                       WS-STRING,
                                       WS-STRING2,
                                       WS-INT,
                                       PDFLIB-RETURN-LONG,
                                       RC.

           IF PDFLIB-RETURN-LONG = -1
               CALL "PDERRMSG" USING   P,
                                       PDFLIB-ERR-STRING,
                                       RC.
               DISPLAY PDFLIB-ERR-STRING.
               MOVE +8 TO RETURN-CODE
               GOBACK.


           MOVE PDFLIB-RETURN-LONG     TO  WS-BLOCK-CONTAINER.



      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      *   OPEN PAGE 1 OF INPUT DOCUMENT                             *
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

           MOVE 1 TO WS-PAGENO.
           CALL "PDOPNPAG" USING       P,
                                       WS-BLOCK-CONTAINER,
                                       WS-PAGENO,
                                       WS-NULL,
                                       PDFLIB-RETURN-LONG,
                                       RC.

           IF PDFLIB-RETURN-LONG = -1
               CALL "PDERRMSG" USING   P,
                                       PDFLIB-ERR-STRING,
                                       RC.
               DISPLAY PDFLIB-ERR-STRING.
               MOVE +8 TO RETURN-CODE
               GOBACK.


           MOVE PDFLIB-RETURN-LONG     TO  WS-PAGE.




      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      *   DUMMY PAGE SIZE                                           *
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

           CALL "PDBGNPAG" USING       P,
                                       WIDTH,
                                       HEIGHT,
                                       WS-NULL,
                                       RC.


      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      *   ADJUST PAGE SIZE TO BLOCK CONTAINER'S SIZE                *
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

           MOVE 0 TO WS-FLOAT1.
           MOVE 0 TO WS-FLOAT2.
           STRING 'adjustpage' LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING.

           CALL "PDFITPDI" USING       P,
                                       WS-PAGE,
                                       WS-FLOAT1,
                                       WS-FLOAT2,
                                       WS-STRING,
                                       RC.




      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      *   FILL ALL TEXT BLOCKS WITH DYNAMIC DATA                    *
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

           STRING 'embedding encoding host' LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING.



      * BLOCK 1 NAME
           STRING 'name' LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING1.
      * BLOCK 1 VALUE
           STRING 'Victor Kraxi' LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING2.


           CALL "PDFLTXBL" USING       P,
                                       WS-PAGE,
                                       WS-STRING1,
                                       WS-STRING2,
                                       WS-NULL,
                                       WS-STRING,
                                       PDFLIB-RETURN-LONG,
                                       RC.

          IF PDFLIB-RETURN-LONG = -1
               CALL "PDERRMSG" USING   P,
                                       PDFLIB-ERR-STRING,
                                       RC.
              DISPLAY 'Warning: could not fill block 1'
               DISPLAY PDFLIB-ERR-STRING.


      * BLOCK 2 NAME
           STRING 'business.title' LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING1.
      * BLOCK 2 VALUE
           STRING 'Chief Paper Officer' LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING2.


           CALL "PDFLTXBL" USING       P,
                                       WS-PAGE,
                                       WS-STRING1,
                                       WS-STRING2,
                                       WS-NULL,
                                       WS-STRING,
                                       PDFLIB-RETURN-LONG,
                                       RC.

           IF PDFLIB-RETURN-LONG = -1
               CALL "PDERRMSG" USING   P,
                                       PDFLIB-ERR-STRING,
                                       RC.
              DISPLAY 'Warning: could not fill block 2'
               DISPLAY PDFLIB-ERR-STRING.

      * BLOCK 3 NAME
           STRING 'business.address.line1' LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING1.
      * BLOCK 3 VALUE
           STRING '17, Aviation Road' LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING2.


           CALL "PDFLTXBL" USING       P,
                                       WS-PAGE,
                                       WS-STRING1,
                                       WS-STRING2,
                                       WS-NULL,
                                       WS-STRING,
                                       PDFLIB-RETURN-LONG,
                                       RC.

           IF PDFLIB-RETURN-LONG = -1
               CALL "PDERRMSG" USING   P,
                                       PDFLIB-ERR-STRING,
                                       RC.
              DISPLAY 'Warning: could not fill block 3'
               DISPLAY PDFLIB-ERR-STRING.

      * BLOCK 4 NAME
           STRING 'business.address.city' LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING1.
      * BLOCK 4 VALUE
           STRING 'Paperfield' LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING2.


           CALL "PDFLTXBL" USING       P,
                                       WS-PAGE,
                                       WS-STRING1,
                                       WS-STRING2,
                                       WS-NULL,
                                       WS-STRING,
                                       PDFLIB-RETURN-LONG,
                                       RC.

           IF PDFLIB-RETURN-LONG = -1
               CALL "PDERRMSG" USING   P,
                                       PDFLIB-ERR-STRING,
                                       RC.
              DISPLAY 'Warning: could not fill block 4'
               DISPLAY PDFLIB-ERR-STRING.

      * BLOCK 5 NAME
           STRING 'business.telephone.voice' LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING1.
      * BLOCK 5 VALUE
           STRING 'phone +1 234 567-89' LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING2.


           CALL "PDFLTXBL" USING       P,
                                       WS-PAGE,
                                       WS-STRING1,
                                       WS-STRING2,
                                       WS-NULL,
                                       WS-STRING,
                                       PDFLIB-RETURN-LONG,
                                       RC.

           IF PDFLIB-RETURN-LONG = -1
               CALL "PDERRMSG" USING   P,
                                       PDFLIB-ERR-STRING,
                                       RC.
              DISPLAY 'Warning: could not fill block 5'
               DISPLAY PDFLIB-ERR-STRING.

      * BLOCK 6 NAME
           STRING 'business.telephone.fax' LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING1.
      * BLOCK 6 VALUE
           STRING 'fax +1 234 567-98' LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING2.


           CALL "PDFLTXBL" USING       P,
                                       WS-PAGE,
                                       WS-STRING1,
                                       WS-STRING2,
                                       WS-NULL,
                                       WS-STRING,
                                       PDFLIB-RETURN-LONG,
                                       RC.

           IF PDFLIB-RETURN-LONG = -1
               CALL "PDERRMSG" USING   P,
                                       PDFLIB-ERR-STRING,
                                       RC.
              DISPLAY 'Warning: could not fill block 6'
               DISPLAY PDFLIB-ERR-STRING.

      * BLOCK 7 NAME
           STRING 'business.email' LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING1.
      * BLOCK 7 VALUE
           STRING 'victor@kraxi.com' LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING2.


           CALL "PDFLTXBL" USING       P,
                                       WS-PAGE,
                                       WS-STRING1,
                                       WS-STRING2,
                                       WS-NULL,
                                       WS-STRING,
                                       PDFLIB-RETURN-LONG,
                                       RC.

           IF PDFLIB-RETURN-LONG = -1
               CALL "PDERRMSG" USING   P,
                                       PDFLIB-ERR-STRING,
                                       RC.
              DISPLAY 'Warning: could not fill block 7'
               DISPLAY PDFLIB-ERR-STRING.

      * BLOCK 8 NAME
           STRING 'business.homepage' LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING1.
      * BLOCK 8 VALUE
           STRING 'www.kraxi.com' LOW-VALUES
                   DELIMITED BY SIZE INTO WS-STRING2.


           CALL "PDFLTXBL" USING       P,
                                       WS-PAGE,
                                       WS-STRING1,
                                       WS-STRING2,
                                       WS-NULL,
                                       WS-STRING,
                                       PDFLIB-RETURN-LONG,
                                       RC.

           IF PDFLIB-RETURN-LONG = -1
               CALL "PDERRMSG" USING   P,
                                       PDFLIB-ERR-STRING,
                                       RC.
              DISPLAY 'Warning: could not fill block 8'
               DISPLAY PDFLIB-ERR-STRING.



      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      *   CLOSE PAGE                                                *
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

           CALL "PDENDPAG" USING       P,
                                       WS-NULL,
                                       RC.




      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      *   CLOSE EVERYTHING DOWN                                     *
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

           CALL "PDENDDOC" USING       P,
                                       WS-NULL,
                                       RC.

           CALL "PDCLSPDI" USING       P,
                                       WS-BLOCK-CONTAINER,
                                       RC.


      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      *   DELETE THE PDF OBJECT                                     *
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

           CALL "PDDELETE" USING       P,
                                       RC.

      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      *   END THE PROGRAM                                           *
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

           MOVE ZERO                   TO RETURN-CODE.
           GOBACK.

       END PROGRAM BIZCARD.

