( CheckPlus ) ( By Irvin' ) ( NewPegasus ) ( 6 Sep 92 )
(                                                                          )
( {s: <string_to_match>} {s: <from_strings>} {i: <number_of_from_strings>} )
( -- {S: <matched_string>}                                                 )
(                                                                          )
( Adapted from .PMatchPlus by Parade                                       )
(                                                                          )
 
  : PopN dup 0 = if pop exit then swap pop 1 - PopN ;
 
  : PartialMatch ( {s: <string_to_match>} {s: <from_strings>} {i: <counter>}
                   -- {S: <matched_string>} )
    dup 3 pick > if
      pop dup 2 + rotate pop
      exit
    then
    dup 2 + pick
    3 pick 4 + pick
    swap over strlen strcut pop swap
    stringcmp if
      dup 2 + rotate pop
      swap 1 - swap
    else
      1 +
    then
    PartialMatch
  ;

: CheckPlus
  1 PartialMatch
  dup 1 < if pop
    ""
  else
    dup 1 > if
      PopN
      ""
    else pop
    then
  then
;