'===========================================================================
' Subject: FIND POSITION OF WORD IN STRING    Date: 05-01-96 (19:29)       
'  Author: Dave Navarro, Jr.                  Code: PB                     
'  Origin: dave@powerbasic.com              Packet: TEXT.ABC
'===========================================================================
'=============================================================================
'                   Source code snippet: PowerBASIC for DOS
'
'           Author: Dave Navarro, Jr. (dave@powerbasic.com)
' Copyright status: Public Domain
'
' Returns the position of a word in a string.  It must be a complete word,
' and not part of another word (such as "BOB" in "BOBBY").
'
'=============================================================================

DIM Text AS STRING
DIM Find AS STRING

Text = "Main$ = UCASE$(Main$)"
Find = "UCASE$"

PRINT Find
PRINT Text
x = IsWord(0, Text, Find)
IF x THEN PRINT SPACE$(x-1);"^"

'****************************************************************************
'IsWord - Return the position of the specified complete word in a string
'
FUNCTION IsWord(BYVAL Start AS INTEGER, BYVAL Main AS STRING, BYVAL Search AS STRING)

  DIM Delimeters AS STRING
  DIM FrontChr   AS STRING
  DIM BackChr    AS STRING
  DIM Where      AS INTEGER

  Delimeters = " ()+-*\/<>;=:',^" + CHR$(34)

  Main   = UCASE$(Main)
  Search = UCASE$(Search)

  IF Start < 1 THEN
    Start = 1
  END IF

  Where   = INSTR(Start, Main$, Search$)

  IF Where THEN
    IF Where > 1 THEN
      FrontChr = MID$(Main, Where-1, 1)
    END IF
    IF Where + LEN(Search) <= LEN(Main) THEN
      BackChr = MID$(Main, Where+LEN(Search), 1)
    END IF

    IF (LEN(FrontChr) = 0) OR (INSTR(FrontChr, ANY Delimeters) > 0) THEN
      Front = -1
    END IF
    IF (LEN(BackChr) = 0) OR (INSTR(BackChr, ANY Delimeters) > 0) THEN
      Back  = -1
    END IF

    IF (Front = -1) AND (Back = -1) THEN
      FUNCTION = Where
    END IF
  END IF

END FUNCTION
