home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / viscobv6.zip / vac22os2 / ibmcobol / samples / hostdata / hostdata.cbl < prev    next >
Text File  |  1997-03-22  |  16KB  |  443 lines

  1. PROCESS CHAR(EBCDIC) FLOAT(HEX) BINARY(S390)
  2.        IDENTIFICATION DIVISION.
  3.       *
  4.        PROGRAM-ID. HOSTDATA.
  5.       *
  6.       * Employee VSAM file utility program
  7.       * - Read   FILE2 using file name from EMPLIST environment variable
  8.       * - Write  FILE1 with a list of employee names using EMPVSAM
  9.       * - Update FILE1 record with key supplied by user
  10.       * - Delete FILE1 record with key supplied by user
  11.       *
  12.        ENVIRONMENT DIVISION.
  13.        INPUT-OUTPUT SECTION.
  14.        FILE-CONTROL.
  15.            SELECT FILE1 ASSIGN TO EMPVSAM
  16.                   ORGANIZATION IS INDEXED
  17.                   ACCESS MODE IS DYNAMIC
  18.                   RECORD KEY IS EMP-NAME
  19.                   FILE STATUS IS FILE1-STATUS
  20.                          FILE8-STAT.
  21.            SELECT FILE2 ASSIGN TO EMPLIST
  22.                   ORGANIZATION IS LINE SEQUENTIAL
  23.       *           ORGANIZATION IS SEQUENTIAL
  24.       *  on MVS switch from "LINE SEQUENTIAL" to "SEQUENTIAL"
  25.                   ACCESS MODE IS SEQUENTIAL
  26.                   FILE STATUS IS SYSIN-STATUS.
  27.  
  28.        DATA DIVISION.
  29.        FILE SECTION.
  30.        FD  FILE1.
  31.       *    RECORD CONTAINS 81 CHARACTERS.
  32.        01  FILE1-R1.
  33.            05 EMP-NAME.
  34.               10 EMP-LAST-NAME      PIC X(15).
  35.               10 EMP-FIRST-NAME     PIC X(10).
  36.               10 EMP-MIDDLE-INITIAL PIC X(1).
  37.            05  EMP-DEPT             PIC X(3).
  38.            05  EMP-PHONE            PIC X(12).
  39.            05  EMP-HIRE             PIC X(6).
  40.       * Binary types
  41.            05  B1                   PIC 99 COMP.
  42.            05  B2                   PIC 99V99 BINARY.
  43.            05  B3                   PIC 9(5)V9(5) COMP-4.
  44.       * Floating point types
  45.            05  F1                   COMP-1.
  46.            05  F2                   COMP-2.
  47.       * Packed Decimal types
  48.            05  PD1                  PIC 99 COMP-3.
  49.            05  PD2                  PIC 99V99 COMP-3.
  50.            05  PD3                  PIC S9(8)V9(5) PACKED-DECIMAL.
  51.  
  52.        FD  FILE2
  53.            RECORDING MODE IS F
  54.            RECORD CONTAINS 47 CHARACTERS.
  55.        01  SYSIN-R1.
  56.            05  EMPL-NAME            PIC X(26) USAGE DISPLAY NATIVE.
  57.            05  EMPL-DEPT            PIC X(3)  USAGE DISPLAY NATIVE.
  58.            05  EMPL-PHONE           PIC X(12) USAGE DISPLAY NATIVE.
  59.            05  EMPL-HIRE            PIC X(6)  USAGE DISPLAY NATIVE.
  60.  
  61.        WORKING-STORAGE SECTION.
  62.        01  FILE1-STATUS.
  63.            05  FILE1-STATUS-A       PIC X.
  64.            05  FILE1-STATUS-B       PIC X.
  65.        01  FILE8-STAT.
  66.            05 VSAM-RC        COMP   PIC S9(4).
  67.            05 VSAM-FUNC      COMP   PIC S9(4).
  68.            05 VSAM-FEED      COMP   PIC S9(4).
  69.        01  SYSIN-STATUS.
  70.            05  SYSIN-STATUS-A       PIC X.
  71.            05  SYSIN-STATUS-B       PIC X.
  72.        01  GOOD-STATUS              PIC X(2).
  73.        01  END-OF-FILE              PIC X(2).
  74.        01  ACCEPT-AREA              PIC X.
  75.        01  PADAREA                  PIC X(7).
  76.        01  LOOP-NBR          COMP   PIC 99.
  77.       *
  78.       * Output file buffer
  79.       *
  80.        01  FILE1-OUT.
  81.            05  EMP-KEY-O            PIC X(26).
  82.            05  FILLER               PIC X(1).
  83.            05  EMP-DEPT-O           PIC X(3).
  84.            05  FILLER               PIC X(2).
  85.            05  EMP-PHONE-O          PIC X(12).
  86.            05  FILLER               PIC X(1).
  87.            05  EMP-HIRE-DATE-O      PIC X(6).
  88.       * Binary types
  89.            05  emp-b1               PIC 99 COMP.
  90.            05  emp-b2               PIC 99V99 BINARY.
  91.            05  emp-b3               PIC 9(5)V9(5) COMP-4.
  92.       * Floating point types
  93.            05  emp-f1               COMP-1.
  94.            05  emp-f2               COMP-2.
  95.       * Packed Decimal types
  96.            05  emp-PD1              PIC 99 COMP-3.
  97.            05  emp-PD2              PIC 99V99 COMP-3.
  98.            05  emp-PD3              PIC S9(8)V9(5) PACKED-DECIMAL.
  99.  
  100.        PROCEDURE DIVISION.
  101.            MOVE 00 TO GOOD-STATUS.
  102.            MOVE 10 TO END-OF-FILE.
  103.            Display " "
  104.            Display "Create or Maintain a VSAM employee file."
  105.            Display " "
  106.            Display "Enter a choice:"
  107.            Display " 1 to Create"
  108.            Display " 2 to Report"
  109.            Display " 3 to Update a single record"
  110.            Display " 4 to Delete a single record"
  111.            Display " "
  112.            Accept accept-area
  113.            Evaluate accept-area
  114.              when "1"
  115.                Perform Hostdata-create thru Hostdata-create-exit
  116.              when "2"
  117.                Perform hostdata-read thru Hostdata-read-exit
  118.              when "3"
  119.                Perform hostdata-update thru Hostdata-update-exit
  120.              when "4"
  121.                Perform hostdata-delete thru Hostdata-delete-exit
  122.              when other
  123.                Display "Invalid choice."
  124.            End-evaluate.
  125.  
  126.            Display " "
  127.            Display "Press enter to exit"
  128.            accept accept-area
  129.            GOBACK.
  130.       *
  131.       * Create the file
  132.       *
  133.        Hostdata-create.
  134.            Display "Opening for CREATE"
  135.            Display " "
  136.            Display "Starting VSAM file loader..."
  137.            Display "Using EMPVSAM variable for name of output file"
  138.            Display "..... EMPLIST for name of input file."
  139.  
  140.            OPEN INPUT FILE2.
  141.            IF SYSIN-STATUS NOT EQUAL TO GOOD-STATUS THEN
  142.                 DISPLAY "Error opening INPUT file. Status code = ",
  143.                         SYSIN-STATUS
  144.                 GO TO Hostdata-create-exit
  145.            END-IF.
  146.            Display "SYSIN file opened OK using EMPLIST variable"
  147.            OPEN OUTPUT FILE1.
  148.            IF FILE1-STATUS NOT EQUAL TO GOOD-STATUS THEN
  149.                 DISPLAY "Error opening OUTPUT file. Status code = ",
  150.                         FILE1-STATUS
  151.                 Display "Verify your environment variable points ",
  152.                         "to a valid remote drive."
  153.                 GO TO Hostdata-create-exit
  154.            END-IF.
  155.            Display "OUTPUT file opened OK using EMPVSAM variable"
  156.            READ FILE2 NEXT RECORD END-READ.
  157.            Initialize B1.
  158.            PERFORM
  159.                    UNTIL SYSIN-STATUS NOT EQUAL TO GOOD-STATUS
  160.                          OR file1-status NOT EQUAL TO good-status
  161.                MOVE EMPL-NAME TO EMP-NAME
  162.                MOVE EMPL-PHONE TO EMP-PHONE
  163.                MOVE EMPL-HIRE TO EMP-HIRE
  164.                MOVE EMPL-DEPT  TO EMP-DEPT
  165.  
  166.                COMPUTE B1 = 1 + B1
  167.                COMPUTE B2 = 1.23 + B1
  168.                COMPUTE B3 = 12345.4321 + B1
  169.                COMPUTE F1 = 3.14 + B1
  170.                COMPUTE F2 = 3.14567 + B1
  171.                COMPUTE PD1 = B1
  172.                COMPUTE PD2 = 9.87 + B1
  173.                COMPUTE PD3 = 12345678.54321 + B1
  174.  
  175.                WRITE FILE1-R1
  176.                IF FILE1-STATUS NOT EQUAL TO GOOD-STATUS THEN
  177.                  DISPLAY "Error writing to OUTPUT file, Status code = ",
  178.                           FILE1-STATUS
  179.                  GO TO Hostdata-create-exit
  180.                END-IF
  181.  
  182.                DISPLAY "Loading...." EMP-NAME EMP-DEPT " " B1 " " B3
  183.  
  184.                READ FILE2 NEXT RECORD END-READ
  185.            END-PERFORM.
  186.  
  187.            IF sysin-status NOT EQUAL TO good-status
  188.               AND sysin-status NOT EQUAL TO END-OF-FILE
  189.            THEN
  190.                 DISPLAY "Error reading input. Status code = ",
  191.                         SYSIN-STATUS
  192.            END-IF.
  193.            IF FILE1-STATUS NOT EQUAL TO GOOD-STATUS THEN
  194.                 DISPLAY "Error Writing output. Status code = ",
  195.                         FILE1-STATUS
  196.            END-IF.
  197.            CLOSE FILE2.
  198.            CLOSE FILE1.
  199.  
  200.            DISPLAY "  "
  201.            DISPLAY "After close of OUTPUT file:"
  202.            DISPLAY "Status: " FILE1-STATUS,
  203.                    " VSAM-RC=" VSAM-RC,
  204.                    " VSAM-FUNC=" VSAM-FUNC,
  205.                    " VSAM-FEED=" VSAM-FEED
  206.            MOVE 00 TO GOOD-STATUS.
  207.            MOVE 10 TO END-OF-FILE.
  208.  
  209.            Display " "
  210.            Display "Reopen the OUTPUT file to verify its usable"
  211.            Display " "
  212.            OPEN I-O    FILE1.
  213.            IF FILE1-STATUS NOT EQUAL TO GOOD-STATUS THEN
  214.                 DISPLAY "Error opening OUTPUT file:"
  215.                 DISPLAY "Status: " FILE1-STATUS,
  216.                         " VSAM-RC=" VSAM-RC,
  217.                         " VSAM-FUNC=" VSAM-FUNC,
  218.                         " VSAM-FEED=" VSAM-FEED
  219.            ELSE
  220.                 DISPLAY "OUTPUT file is ok, file open status =" ,
  221.                         file1-status
  222.  
  223.            END-IF.
  224.  
  225.            READ  FILE1 NEXT RECORD END-READ.
  226.            Display "First record=" emp-last-name
  227.            .
  228.        Hostdata-create-exit.
  229.            CLOSE FILE1.
  230.            Exit.
  231.       *
  232.       * Read the existing file
  233.       *
  234.        Hostdata-read.
  235.            MOVE 00 TO GOOD-STATUS.
  236.            MOVE 10 TO END-OF-FILE.
  237.            Display " "
  238.            Display "Using EMPVSAM variable...for name of employee file."
  239.            Display "Opening for REPORT"
  240.            OPEN Input FILE1.
  241.            IF FILE1-STATUS NOT EQUAL TO GOOD-STATUS THEN
  242.                 DISPLAY "Error opening FILE1. Status code = ",
  243.                         FILE1-STATUS
  244.                 Display "Verify your environment variable points ",
  245.                         "to an existing remote VSAM file."
  246.                 CLOSE FILE1
  247.                 GO TO Hostdata-read-exit
  248.            END-IF.
  249.  
  250.            DISPLAY "  "
  251.            DISPLAY "Employee-Name              Dept Phone        Hired "
  252.            DISPLAY "-------------------------- ---  ------------ ------"
  253.  
  254.            Initialize file1-r1
  255.            Initialize padarea
  256.            Read FILE1 NEXT RECORD End-read.
  257.            PERFORM
  258.                    UNTIL FILE1-STATUS NOT EQUAL TO GOOD-STATUS
  259.                Move spaces to file1-out
  260.                Move emp-name to emp-key-o
  261.                Move emp-dept to emp-dept-o
  262.                Move emp-phone to emp-phone-o
  263.                Move emp-hire to emp-hire-date-o
  264.                Move B1 to emp-b1
  265.                Move B2 to emp-b2
  266.                Move B3 to emp-b3
  267.                Move F1 to emp-f1
  268.                Move F2 to emp-f2
  269.                Move PD1 to emp-pd1
  270.                Move PD2 to emp-pd2
  271.                Move PD3 to emp-pd3
  272.                Display emp-key-o " " emp-dept-o "  " emp-phone-o " ",
  273.                        emp-hire-date-o " "
  274.                Display padarea " " emp-b1 " " emp-b2 " " emp-b3
  275.                Display padarea " " emp-f1
  276.                Display padarea " " emp-f2
  277.                Display padarea " " emp-pd1 " " emp-pd2 " " emp-pd3
  278.                Move spaces to emp-name
  279.                Move spaces to file1-r1
  280.                READ FILE1 NEXT RECORD
  281.            END-PERFORM.
  282.  
  283.            DISPLAY "  "
  284.            DISPLAY "Reading done -- last read status code=" FILE1-STATUS
  285.            IF FILE1-status NOT EQUAL TO good-status
  286.               AND FILE1-status NOT EQUAL TO END-OF-FILE
  287.            THEN
  288.                 DISPLAY "Error subsequent records. Status code = ",
  289.                         FILE1-STATUS
  290.            END-IF.
  291.  
  292.            Display " "
  293.            .
  294.        Hostdata-read-exit.
  295.            CLOSE FILE1.
  296.            Exit.
  297.       *
  298.       * Update a record in the existing file
  299.       *
  300.        Hostdata-update.
  301.            MOVE 00 TO GOOD-STATUS.
  302.            MOVE 10 TO END-OF-FILE.
  303.            Display " "
  304.            Display "Using EMPVSAM variable...for name of employee file."
  305.            Display "Opening for UPDATE"
  306.            OPEN I-O FILE1.
  307.            IF FILE1-STATUS NOT EQUAL TO GOOD-STATUS THEN
  308.                 DISPLAY "Error opening VSAM file. Status code = ",
  309.                         FILE1-STATUS
  310.                 CLOSE FILE1
  311.                 GO TO Hostdata-update-exit
  312.            END-IF.
  313.  
  314.            Initialize file1-r1
  315.            Display " "
  316.            Display "Enter employee name to update in three parts."
  317.            Display " "
  318.            Display "Enter LAST NAME:"
  319.            Display " "
  320.            Accept emp-last-name
  321.            Display " "
  322.            Display "FIRST NAME:"
  323.            Display " "
  324.            Accept emp-first-name
  325.            Display " "
  326.            Display "Middle Initial:"
  327.            Display " "
  328.            Accept emp-middle-initial
  329.            Display " "
  330.  
  331.            READ FILE1 KEY IS emp-name END-READ.
  332.            Evaluate file1-status
  333.              When Good-status
  334.                Display "Status code=00 - Record found"
  335.                Display "Updating...." EMP-NAME
  336.              When "23"
  337.                Display "Status code=23 - Record not found"
  338.                Display "Adding..." EMP-NAME
  339.              When Other
  340.                Display "Status code=" file1-status "is unexpected."
  341.                Display "Bailing out..."
  342.                GO TO Hostdata-update-exit
  343.            End-evaluate.
  344.  
  345.            Display " "
  346.            Display "Enter fields you wish to add or change."
  347.            Display " "
  348.            Display "Dept?"
  349.            Accept emp-dept
  350.            Display " "
  351.            Display "Hire Date?"
  352.            Accept emp-hire
  353.            Display " "
  354.            Display "Phone?"
  355.            Accept emp-phone
  356.            Display " "
  357.  
  358.            If file1-status = good-status
  359.              ReWRITE FILE1-R1
  360.            Else
  361.              WRITE FILE1-R1.
  362.            Evaluate file1-status
  363.              When good-status
  364.                Display "Status code=00 - update complete."
  365.              When "22"
  366.                Display "Status code=22 - record is a duplicate"
  367.              When Other
  368.                Display "Status code=" file1-status " is unexpected."
  369.                Display "Error updating VSAM file."
  370.                Display "Bailing out..."
  371.            End-evaluate.
  372.  
  373.        Hostdata-update-exit.
  374.            Close FILE1.
  375.            Exit.
  376.       *
  377.       * Delete a record in the existing file
  378.       *
  379.        Hostdata-delete.
  380.            MOVE 00 TO GOOD-STATUS.
  381.            MOVE 10 TO END-OF-FILE.
  382.            Display " "
  383.            Display "Using EMPVSAM variable...for name of employee file."
  384.            Display "Opening for DELETE"
  385.            OPEN I-O FILE1.
  386.            IF FILE1-STATUS NOT EQUAL TO GOOD-STATUS THEN
  387.                 DISPLAY "Error opening VSAM file. Status code = ",
  388.                         FILE1-STATUS
  389.                 CLOSE FILE1
  390.                 GO TO Hostdata-delete-exit
  391.            END-IF.
  392.  
  393.            Initialize file1-r1
  394.            Display " "
  395.            Display "Enter employee name to delete in three parts."
  396.            Display " "
  397.            Display "Enter LAST NAME:"
  398.            Display " "
  399.            Accept emp-last-name
  400.            Display " "
  401.            Display "Enter FIRST NAME:"
  402.            Display " "
  403.            Accept emp-first-name
  404.            Display " "
  405.            Display "Enter Middle Initial:"
  406.            Display " "
  407.            Accept emp-middle-initial
  408.            Display " "
  409.  
  410.            READ FILE1 KEY IS emp-name END-READ.
  411.            Evaluate file1-status
  412.              When Good-status
  413.                Display "Status code=00 - Record found"
  414.                Display "Deleting..." EMP-NAME
  415.              When "23"
  416.                Display "Status code=23 - Record not found"
  417.                GO TO Hostdata-delete-exit
  418.              When Other
  419.                Display "Status code=" file1-status "is unexpected."
  420.                Display "Bailing out..."
  421.                GO TO Hostdata-delete-exit
  422.            End-evaluate.
  423.  
  424.            Delete FILE1
  425.            Evaluate file1-status
  426.              When good-status
  427.                Display "Status code=00 - Record deleted"
  428.                Continue
  429.              When Other
  430.                Display "Status code=" file1-status " is unexpected."
  431.                Display "Error deleting VSAM file record."
  432.                Display "Bailing out..."
  433.                GO TO Hostdata-delete-exit
  434.            End-evaluate.
  435.  
  436.        Hostdata-delete-exit.
  437.            Close FILE1.
  438.            Exit.
  439.  
  440.        END PROGRAM HOSTDATA.
  441.  
  442.  
  443.