home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PASCAL / AAKXREF.ZIP / REV_POS.FUN < prev    next >
Encoding:
Text File  |  1986-06-23  |  2.2 KB  |  49 lines

  1. (********************************************************************)
  2. (* THIS FUNCTION WILL RETURN THE POSITION OF THE SEARCH STRING IN   *)
  3. (*   THE GIVEN STRING SEARCHING FROM BACK TO FRONT INSTEAD OF FRONT *)
  4. (*   TO BACK                                                        *)
  5. (* INPUT        : Search_Str,Pattern_Str                            *)
  6. (* INPUT/OUTPUT : NONE                                              *)
  7. (* OUTPUT       : INTEGER                                           *)
  8. (* USES         : NO SIDE EFFECTS                                   *)
  9. (* CALLS        : NONE                                              *)
  10. (* ERRORS       : NONE                                              *)
  11. (* GLOBAL VARS  : NONE                                              *)
  12. (* SUBJECT      : STRINGS, CONTAININ                                *)
  13. (* DOMAIN       : ARNO A. KARNER                      LEVEL : 000   *)
  14. (********************************************************************)
  15.  
  16. FUNCTION Rev_Pos ( Pattern_Str, Search_Str : Work_String ) : INTEGER;
  17.  
  18. VAR
  19.    No_Match        : BOOLEAN ;
  20.    Slen , Plen , I : INTEGER ;
  21.  
  22. BEGIN (* FUNC *)
  23.    Slen := LENGTH ( Search_Str ) ;
  24.    Plen := LENGTH ( Pattern_Str ) ;
  25.    IF ( Plen > Slen ) OR ( Plen = 0 )
  26.    THEN BEGIN (* NO WAY HOSEA *)
  27.            Rev_Pos := 0 ;
  28.         END   (* NO WAY HOSEA *)
  29.    ELSE BEGIN (* SAME LENGTH OR LESS *)
  30.            IF Plen = Slen
  31.            THEN BEGIN (* STRINGS SAME LENGTH *)
  32.                   IF Search_Str = Pattern_Str
  33.                   THEN Rev_Pos := 1
  34.                   ELSE Rev_Pos := 0 ;
  35.                 END   (* STRINGS SAME LENGTH *)
  36.            ELSE BEGIN (* SEARCH FOR PATTERN *)
  37.                    I := Slen - Plen + 1 ;
  38.                    No_Match := TRUE ;
  39.                    WHILE ( I > 0 ) AND No_Match DO
  40.                    BEGIN (* WHILE 00 *)
  41.                       No_Match:=(Pattern_Str<>COPY(Search_Str,I,Plen));
  42.                       IF No_Match THEN I := I -1 ;
  43.                    END ;
  44.                    IF NOT No_Match
  45.                    THEN Rev_Pos := I (* PATTERN MATCHED AT THE Ith Pos *)
  46.                    ELSE Rev_Pos := 0 ;
  47.                 END ; (* SEARCH FOR PATTERN *)
  48.         END ; (* SAME LENGTH OR LESS *)
  49. END ; (* FUNC *)