home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / viscobv6.zip / vac22os2 / ibmcobol / samples / sdu / userexit.c < prev    next >
Text File  |  1997-03-14  |  7KB  |  129 lines

  1. #pragma title ("USEREXIT")
  2. /******************************************************************************/
  3. /*                                                                            */
  4. /* PRODUCT   = Data Description and Conversion for OS/2                       */
  5. /*                                                                            */
  6. /* SOURCE FILE NAME = USEREXIT.C                                              */
  7. /*                                                                            */
  8. /* DESCRIPTIVE NAME = User Exit Sample                                        */
  9. /*                                                                            */
  10. /* FUNCTION = This user exit sample program can be called via the             */
  11. /*            DDC/2 user exit facility.                                       */
  12. /*            It converts any character string from upper case to lower case  */
  13. /*            characters or from lower case to upper case characters,         */
  14. /*            depending on a boolean parameter.                               */
  15. /* NOTES =                                                                    */
  16. /*                                                                            */
  17. /*   DEPENDENCIES = OS/2 Release 2.0 or later                                 */
  18. /*                                                                            */
  19. /*   RESTRICTIONS = None                                                      */
  20. /*                                                                            */
  21. /* ENTRY POINTS = ConvertToUpperOrLowerCaseChar                               */
  22. /*                                                                            */
  23. /******************************************************************************/
  24.  
  25. #pragma page ()
  26. /******************************************************************************/
  27. /* Header Files.                                                              */
  28. /******************************************************************************/
  29. /*---------------- OS/2 Base Header ------------------------------------------*/
  30. #define INCL_BASE                      /* all of OS/2 Base                    */
  31. #define INCL_NOPMAPI                   /* no presentation manager functions   */
  32. #include <os2.h>
  33.  
  34. /*---------------- C Library Header ------------------------------------------*/
  35. #include <stdlib.h>
  36. #include <stdio.h>
  37. #include <ctype.h>
  38.  
  39. /*---------------- DDC/2 Global Header ---------------------------------------*/
  40. #define  FMT_NO_DCLXLRIFC FMT_NO_DCLXLRIFC    /* Exclude FMTB.H (DCLXLRIFC)   */
  41. #define  FMT_NO_CPB       FMT_NO_CPB          /* Exclude FMTC.H (CPB)         */
  42. #define  FMT_NO_CPEX      FMT_NO_CPEX         /* Exclude FMTD.H (CPEX)        */
  43. #define  FMT_NO_LCF       FMT_NO_LCF          /* Exclude FMTF.H (LCF)         */
  44. #define  FMT_NO_UTL       FMT_NO_UTL          /* Exclude FMTU.H (UTL)         */
  45. #include "FMT.H"
  46.  
  47.  
  48. VOID APIENTRY ConvertToUpperOrLowerCaseChar( LONG, VOID *[], PFMTCTOK );
  49.  
  50.  
  51. /******************************************************************************/
  52. /* User Exit Function (API)                                                   */
  53. /******************************************************************************/
  54. VOID APIENTRY ConvertToUpperOrLowerCaseChar( LONG lParamCount,
  55.                                              VOID *pParameter[],
  56.                                              PFMTCTOK pFeedBack )
  57.  
  58. /******************************************************************************/
  59. /* Expected parameters:                                                       */
  60. /*    lParamCount:   5                                                        */
  61. /*    pParameter[0]: Reference to the input charater field.                   */
  62. /*    pParameter[1]: Reference to the length of the input character field.    */
  63. /*    pParameter[2]: Reference to a boolen condition.                         */
  64. /*    pParameter[3]: Reference to output character field.                     */
  65. /*    pParameter[4]: Reference to the length of the output character field.   */
  66. /*    pFeedBack:     Reference to feedback area (NO ERROR: usMsgSev == 0).    */
  67. /******************************************************************************/
  68.  
  69. {
  70.    /***************************************************************************/
  71.    /* Declaration and initialization of variables.                            */
  72.    /***************************************************************************/
  73.    INT   i;
  74.    INT   CharToConvert;
  75.    PCHAR pImputCharField = (PCHAR)(pParameter[0]);
  76.    LONG  lByteSizeOfInputChar = *((PLONG)pParameter[1]);
  77.    BOOL  fToUpperCaseLetter = *((PBOOL)pParameter[2]);
  78.    PCHAR pOutputCharField = (PCHAR)(pParameter[3]);
  79.    LONG  lByteSizeOfOutputChar = *((PLONG)pParameter[4]);
  80.  
  81.    pFeedBack->Condition_ID.usMsgSev = 0;
  82.    pFeedBack->Condition_ID.usMsgNo = 0;
  83.  
  84.  
  85.    /***************************************************************************/
  86.    /* Check buffer sizes and parameter count                                  */
  87.    /***************************************************************************/
  88.    if ( ( lByteSizeOfInputChar <= lByteSizeOfOutputChar ) &&
  89.         ( lParamCount == 5 ) )
  90.    {
  91.  
  92.       if (fToUpperCaseLetter == TRUE)
  93.       {
  94.          /*********************************************************************/
  95.          /* Convert all lower case character to upper case character          */
  96.          /*********************************************************************/
  97.          for (i = 0; i < lByteSizeOfInputChar; i++)
  98.          {
  99.             CharToConvert = (INT)(*pImputCharField++);
  100.             CharToConvert = toupper( CharToConvert );
  101.             *pOutputCharField++ = (CHAR)CharToConvert;
  102.  
  103.          } /* endfor */
  104.       }
  105.       else
  106.       {
  107.          /*********************************************************************/
  108.          /* Convert all upper case character to lower case character          */
  109.          /*********************************************************************/
  110.          for (i = 0; i < lByteSizeOfInputChar; i++)
  111.          {
  112.             CharToConvert = (INT)(*pImputCharField++);
  113.             CharToConvert = tolower( CharToConvert );
  114.             *pOutputCharField++ = (CHAR)CharToConvert;
  115.  
  116.          } /* endfor */
  117.       } /* endif */
  118.    }
  119.    else
  120.    {
  121.       /************************************************************************/
  122.       /* Set error conditions                                                 */
  123.       /************************************************************************/
  124.       pFeedBack->Condition_ID.usMsgSev = 3;
  125.       pFeedBack->Condition_ID.usMsgNo = 2647;
  126.    } /* endif */
  127.  
  128. }
  129.