create procedure lib_string_search (
                     strg_in varchar( 32765),
                     strg_beg smallint,
                     strg_search varchar( 32765))
                   returns (
                     strg_pos smallint)
  as
    declare variable strg_comp varchar( 32765);
    declare variable strg_len_orig smallint;
    declare variable strg_len_srch smallint;
    declare variable strg_found smallint;

    begin
      /*
        get position of substring
          strg_pos : null -> invalid parameters
                     0       search string not found
                     1 ..    first position of substring
      */

      if (   (strg_in is null)
          or (strg_beg is null)
          or (strg_beg <= 0)
          or (strg_search is null))
        then
          strg_pos = null;
        else
          begin
            strg_pos = 0;
            strg_found = 0;
            execute procedure lib_string_len :strg_in returning_values :strg_len_orig;
            execute procedure lib_string_len :strg_search returning_values :strg_len_srch;

            while (    (strg_found = 0)
                   and (strg_len_srch + strg_beg - 1 <= strg_len_orig))
              do
                begin
                  execute procedure lib_string_sub :strg_in, :strg_beg, strg_len_srch returning_values :strg_comp;

                  if (strg_comp || '.' = strg_search || '.')
                    then
                      begin
                        strg_found = 1;
                        strg_pos = strg_beg;
                      end

                  strg_beg = strg_beg + 1;
                end
          end

      suspend;
    end