DSN8BE3

This module uses the class emp_db2 to list or update employee phone numbers from a Db2 database .

 /*********************************************************************/
 /*                                                                   */
 /*  Module name = DSN8BD3                                            */
 /*                                                                   */
 /*  Descriptive name = DB2  SAMPLE APPLICATION                       */
 /*                     PHONE APPLICATION                             */
 /*                     BATCH                                         */
 /*                     C++ LANGUAGE                                  */
 /*                                                                   */
 /*    LICENSED MATERIALS - PROPERTY OF IBM                           */
 /*    5625-DB2                                                       */
 /*    (C) COPYRIGHT 1982, 2003 IBM CORP.  ALL RIGHTS RESERVED.       */
 /*                                                                   */
 /*    STATUS = VERSION 8                                             */
 /*                                                                   */
 /*  Function = This module uses the class emp_db2 to list or update  */
 /*             employee phone numbers from a DB2 database            */
 /*                                                                   */
 /*  Module type    = C++ program                                     */
 /*     Processor   = DB2  precompiler, C++ compiler                  */
 /*     Module size = see link edit                                   */
 /*     Attributes  = not reentrant or reusable                       */
 /*                                                                   */
 /*  Entry point = DSN8BD3                                            */
 /*     Purpose  = see function                                       */
 /*     Linkage  = invoked from DSN command processor subcommand RUN  */
 /*                                                                   */
 /*     Input    = symbolic label/name = CARDIN                       */
 /*                description = INPUT REQUEST FILE                   */
 /*                                                                   */
 /*     Output   = symbolic label/name = REPORT                       */
 /*                description = PRINTED REPORT AND RESULTS           */
 /*                                                                   */
 /*  Exit-normal = return code 0 normal completion                    */
 /*                                                                   */
 /*  Exit-error =                                                     */
 /*                                                                   */
 /*     Return code    = none                                         */
 /*                                                                   */
 /*     Abend codes    = none                                         */
 /*                                                                   */
 /*     Error-messages =                                              */
 /*           DSN8000I - REQUEST IS:  ...                             */
 /*           DSN8068E - INVALID REQUEST, SHOULD BE 'L' OR 'U'        */
 /*                      RETURN CODE IS:                              */
 /*                                                                   */
 /*  External references  =                                           */
 /*     Routines/services = none                                      */
 /*                                                                   */
 /*     Data-areas        = none                                      */
 /*                                                                   */
 /*     Control-blocks    = none                                      */
 /*                                                                   */
 /*  Tables               = none                                      */
 /*                                                                   */
 /*  Change-activity      =                                           */
 /*      02/05/96 Katja      KFD0024  C++ sample (D9031)              */
 /*                                   Created based on C sample       */
 /*                                                                   */
 /*********************************************************************/

 #include <string.h>
 /*********************************************************************/
 /* Include emp_db2 C++ class definition                              */
 /*    (includes other global declarations)                           */
 /*********************************************************************/
 #include "DSN8BEH"

   /*******************************************************************/
   /* Input record structure                                          */
   /*******************************************************************/
   struct {
     char action[2];                /* L for list or U for update     */
     char lname[16];                /* last name or pattern- L mode   */
     char fname[13];                /* first name or pattern-L mode   */
     char eno[7];                   /* employee number- U mode        */
     char newno[5];                 /* new phone number- U mode       */
   } ioarea;

   char slname[16];                 /* unmodified last name pattern   */
   class emp_db2 proc1;             /* DB2 employee object           */

   /*******************************************************************/
   /* Function to process the current request                         */
   /*******************************************************************/
   void Do_req(FILE *outfile)
   {
     char *blankloc;                /* string translation pointer     */

     /*****************************************************************/
     /* Report headings                                               */
     /*****************************************************************/
     struct
     {
       char hdr111[30];
       char hdr112[22];
       char hdr113[30];
     } hdr1 = {
               "-----------------------------",
               " TELEPHONE DIRECTORY ",
               "-----------------------------"};
     #define rpthdr1 hdr1.hdr111,hdr1.hdr112,hdr1.hdr113

     struct
     {
       char hdr211[10];
       char hdr212[11];
       char hdr213[ 8];
       char hdr214[ 6];
       char hdr215[ 9];
       char hdr216[ 5];
       char hdr217[ 5];
       char hdr221[ 7];
       char hdr222[ 7];
       char hdr223[ 5];
       char hdr224[ 5];
       char hdr225[ 5];
     } hdr2 = {
                "LAST NAME",
                "FIRST NAME",
                "INITIAL",
                "PHONE",
                "EMPLOYEE",
                "WORK",
                "WORK",
                "NUMBER",
                "NUMBER",
                "DEPT",
                "DEPT",
                "NAME"};
     #define rpthdr2 hdr2.hdr211,hdr2.hdr212,hdr2.hdr213,hdr2.hdr214,\
                     hdr2.hdr215,hdr2.hdr216,hdr2.hdr217,hdr2.hdr221,\
                     hdr2.hdr222,hdr2.hdr223,hdr2.hdr224,hdr2.hdr225

     /*****************************************************************/
     /* Report formats                                                */
     /*****************************************************************/
     static char fmt1[] = "\n %s\n %s\n %s\n";
     static char fmt2[] =
      " %9s%17s%10s%6s%10s%5s%5s\n%43s%8s%7s%5s%5s\n";

     /*****************************************************************/
     /* Start processing input record                                 */
     /*****************************************************************/
     strcpy(slname, ioarea.lname);  /* save untranslated last name    */
     while (blankloc = strpbrk(ioarea.lname, " "))
       *blankloc = '%';             /* translate blanks into %        */
     while (blankloc = strpbrk(ioarea.fname, " "))
       *blankloc = '%';             /* translate blanks into %        */

     /* Determine request type */
     switch (ioarea.action[0])
     {

       /* Process LIST request */
       case 'L':
         /* Print the report headings */
         fprintf(outfile, fmt1, rpthdr1);
         fprintf(outfile, fmt2, rpthdr2);

         if (!strcmp(slname,"*              "))
           /* List all employees */
           proc1.Listall(outfile);
         else
         {
           if (strpbrk(slname, "%"))
             /* List generic employees */
             proc1.Listsome(outfile,ioarea.lname);
           else
             /* List specific employee */
             proc1.Listone(outfile,slname,ioarea.fname);
         } /* else - list selected employees */
         break; /* end 'L' request */

       /* Update an employee phone number */
       case 'U':
         proc1.Empupdate(outfile,ioarea.newno,ioarea.eno);
         break;

       /* Invalid request type */
       default:
         DSN8MDG(module, "068E", outmsg);        /* Display error msg */
         fprintf(outfile, " %s\n", outmsg);
     } /* endswitch */
     return;
   } /* end Do_req */

   /*******************************************************************/
   /* Function to read a request from an open file                    */
   /*******************************************************************/
   int Read_req(FILE *infile)
   {
     static char fmt4[] = " %1c%15c%12c%6c%4c%43c";   /* input format */
     char trail[43];                /* unused part of input record    */
     char *newlloc;                 /* addr of newline char in field  */

     strcpy(ioarea.action," ");
     strcpy(ioarea.lname,"               ");
     strcpy(ioarea.fname,"            ");
     strcpy(ioarea.eno,"      ");
     strcpy(ioarea.newno,"      ");
     /* Read the next request */
     if (fscanf(infile, fmt4,
                         ioarea.action,
                         ioarea.lname,
                         ioarea.fname,
                         ioarea.eno,
                         ioarea.newno,
                         trail) == 6)
     {
       if ((newlloc = strpbrk(ioarea.lname, "\n")) != NULL)
         *newlloc = ' ';            /* change to blank for now        */
       if ((newlloc = strpbrk(ioarea.fname, "\n")) != NULL)
         *newlloc = ' ';            /* change to blank for now        */
       ioarea.eno[6] = '\0';
       ioarea.newno[4] = '\0';
       return 0;
     }
     else
       return 1;
   } /* end Read_req */

   /*******************************************************************/
   /* Function to echo a request                                      */
   /*******************************************************************/
   void Echo_req(FILE *outfile)
   {
     /* Local declarations */
     struct                                      /* report header     */
     {
       char hdr011[31];
       char hdr012[33];
     } hdr0 = {
               "    REQUEST  LAST NAME        ",
               "FIRST NAME    EMPNO    NEW XT.NO"};
     #define rpthdr0 hdr0.hdr011

     static char fmt5[] =                        /* output format     */
      "\n\n %s\n %s%s\n   --%-7s--%-15s--%-12s--%-7s--%-9s--\n";
     /* End local declarations */

     /* Display the request */
     DSN8MDG(module, "000I", outmsg);
     fprintf(outfile, fmt5,
                           outmsg,
                           hdr0.hdr011,
                           hdr0.hdr012,
                           ioarea.action,
                           ioarea.lname,
                           ioarea.fname,
                           ioarea.eno,
                           ioarea.newno);
       return;
   } /* end Echo_req */

 /*********************************************************************/
 /* main program routine                                              */
 /*********************************************************************/
 extern main()
 {
   int retcode;
   FILE *cardin;                    /* Input control cards            */
   FILE *report;                    /* Output phone report            */

   /* Open the input and output files */
   cardin = fopen
             ("DD:CARDIN","r,recfm=fb,lrecl=80,blksize=80");
   report = fopen("DD:REPORT","w");

   /* While more input, process */
   while (!feof(cardin))
   {
     /* Read the next request */
     retcode = Read_req(cardin);
     if (retcode == 0)
     {
       /* Display the request */
       Echo_req(report);
       Do_req(report);
     }
   } /* endwhile */
   fclose(report);
 } /* end main */