× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



Has anyone written RPG interfaces for IBM's Linguistic Tools (written in C)?
I have interfaced with many C programs (without knowing much C), but I can't
seem to figure out how to interface with procedures like the following.

What kind of data type is LX_CB_P?  I am assuming that it is a C object, but
I don't see how to obtain the C object in the first place.  There are many
other source files that come with IBM's Linguistic Tools and I searched them
all looking for a place where LX_CB_P was defined - I found nothing.  Any
insight is appreciated.

/* ================================================================
 *
 *  Function Name:  SpellVerify
 *
 *  Description:    Verifies spellings in a block of text
 *
 *  Input  Fields:  pNLPCB - Pointer to NLP Control Block.  The
 *                           following fields MUST already be set:
 *                             lx_serv_area_p
 *                             lx_dict_tkns
 *                             lx_dict_tkns_ct
 *                  pText  - Pointer to null-delimited block of text
 *
 *  Output Fields:  (None)
 *
 *  Return Value:   (None)
 *
 *  Side Effects:   Values set in NLP Control Block
 *
 * ================================================================ */
void SpellVerify(LX_CB_P   pNLPCB,
                 LX_PUCHAR pText)
  {
  LX_ELEMENT  DataEle;    /* Data Element structure for Poe input   */
  LX_PUCHAR   pReplyArea; /* Dynamically allocated reply area.      */
  LX_ULONG    nElem;      /* output element loop counter            */
  LX_UINT     nChar;      /* character loop counter                 */
  LX_PELEMENT pCurrEle;   /* Used to parse reply area output        */
  LX_UINT     ReplySize;  /* Reply area size                        */

  /*----------------------------------------------------------------*/
  /* When determining the size of reply area to hold output from    */
  /* block-format spell verify, allocate an area large enough to    */
  /* hold at least one LX_ELEMENT structure.  Whatever the reply    */
  /* area size, if a return code of LX_REPLY_FULL is produced, the  */
  /* application must issue a continue reply to process the rest of */
  /* the output.  This sample provides a reply area big enough to   */
  /* hold the result for one hundred words.                         */
  /*----------------------------------------------------------------*/
  ReplySize = 100 * sizeof(LX_ELEMENT);
  pReplyArea = malloc(ReplySize);

  /* Create data element structure based on input string */
  DataEle.lx_data_p   = pText;
  DataEle.lx_data_len = strlen(pText);
  DataEle.lx_type     = LX_TEXT;

  /* Set up parms in NLP control block */
  pNLPCB->lx_rqst_type     = LX_NEW_REQ;
  pNLPCB->lx_func_code     = LX_SPELL_VERIFY;
  pNLPCB->lx_spell_ver_f   = LX_TRUE;
  pNLPCB->lx_art_checker_f = LX_TRUE;
#if defined(LX_OS400) || defined(LX_OS390_OE)
  pNLPCB->lx_num_cpg      = LX_CP_LATIN_HOST;
#elif defined(LX_AIX) || defined(LX_HPUX) || defined(LX_SUN) ||
defined(LX_SCO) || defined(LX_SEQUENT) || defined(LX_MONTEREY) ||
defined(LX_LINUX)
  pNLPCB->lx_num_cpg      = LX_CP_LATIN_ISO;
#elif defined(LX_MAC)
  pNLPCB->lx_num_cpg      = LX_CP_LATIN_MAC;
#elif defined(LX_OS232)
  pNLPCB->lx_num_cpg      = LX_CP_LATIN_PC;
#elif defined(LX_WIN) || defined(LX_WIN32)
  pNLPCB->lx_num_cpg      = LX_CP_LATIN_WIN;
#endif
  pNLPCB->lx_reply_p       = pReplyArea;
  pNLPCB->lx_reply_size    = ReplySize;

  /* Block input format */
  pNLPCB->lx_elt_format    = LX_BLOCK_FORMAT;
  pNLPCB->lx_elements_ct   = 1;
  pNLPCB->lx_elements_p    = &DataEle;

  NlpEntry(pNLPCB);

  printf("Spell verify rc = %d\n", pNLPCB->lx_rc);

  /* Print data (if any) in reply area */
  pCurrEle = (LX_PELEMENT) pReplyArea;
  for (nElem = 0; nElem < pNLPCB->lx_delivered_out_units; ++nElem)
    {
    printf("    %d ", pCurrEle->lx_rc);
    printf(" %d ", pCurrEle->lx_data_len);

    for (nChar = 0; nChar < pCurrEle->lx_data_len; ++nChar)
      printf("%c", pCurrEle->lx_data_p[nChar]);

    if (pCurrEle->lx_rc == LX_WORD_NOT_FOUND)
      printf("\t<-- Word not found");

    if (pCurrEle->lx_databyte & LX_BAD_PREV)
      printf("\tLX_BAD_PREV");

    if (pCurrEle->lx_databyte & LX_BAD_NEXT)
      printf("\tLX_BAD_NEXT");

    printf("\n");
    ++pCurrEle;
    }

  free(pReplyArea);
  pNLPCB->lx_reply_p = NULL;

  printf("\n");

  return;
  }

As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.