home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / magazine / pcmagazi / 1991 / 08 / rat.c < prev    next >
Text File  |  1991-03-03  |  2KB  |  65 lines

  1. /* RAT.C
  2.    RAT.BIN source, compile/link with:
  3.    TCC -mc -c rat                 : memory model MUST BE compact,
  4.    TLINK /i rat,,,D:\TC\LIB\CC    : data is far, use dBIV's stack
  5.                                   : assuming CC.LIB is in D:\TC\LIB\
  6.    EXE2BIN rat                    : creates RAT.BIN
  7.    DEL rat.obj
  8.    DEL rat.exe
  9.  
  10.    to use from dBASE IV only(!):
  11.    .LOAD rat
  12.    .srchstr="the quick sly fox jumped over the..."
  13.    .position=CALL("rat",0,srchstr,"the")
  14.    * now position = 31
  15.    * All parameters can be fields, expressions, memvars, or literals.
  16.    * The numeric parameter MUST be numeric and the last two MUST be
  17.    * strings.
  18. */
  19.  
  20. #include <dos.h>
  21. #include <string.h>
  22. #include <stdlib.h>
  23.  
  24. short rat(char *s,char *f);
  25.  
  26. void far main(void)
  27. {
  28.    char **argv;
  29.    short retval;
  30.  
  31.    if (_CX != 3)                            /* If there aren't three */
  32.       return;                                  /* parameters, return */
  33.  
  34.    argv = (char **) MK_FP(_ES, _DI);     /* point to dBASE parameter */
  35.                                                    /* table in ES:DI */
  36.    retval = rat(argv[1],argv[2]);
  37.  
  38.    itoa(retval,argv[0],10);            /* convert number to a string */
  39.    return;                                          /* back to dBASE */
  40. }
  41.  
  42. short rat(char *srchstr, char *findstr)
  43. {
  44.    char *mark;
  45.    char *astring = srchstr;
  46.  
  47.    if (*srchstr == 0 || *findstr == 0)   /* If one of them isn't set */
  48.       return(0);                                         /* return 0 */
  49.  
  50.    mark = strstr(astring, findstr);         /* Call library function */
  51.  
  52.    if (mark == NULL)                         /* If not found, return */
  53.       return(0);
  54.  
  55.    astring++;                             /* Bump past that position */
  56.  
  57.    while (mark != NULL)                /* While we keep finding them */
  58.    {
  59.       astring = mark;
  60.       mark = strstr(astring + 1, findstr);      /* Keep finding them */
  61.    }
  62.                                       /* Return position of last one */
  63.    return(astring - srchstr + 1);
  64. }
  65.