
/* This file was automatically generated by pclu.*/

#include "pclu_err.h"
#include "pclu_sys.h"


extern errcode stringOPsize();
extern errcode intOPfrom_to_by();
extern errcode intOPsub();
extern errcode boolOPnot();
extern errcode charOPequal();
extern errcode stringOPfetch();
extern errcode intOPadd();

/**** BEGIN PROCEDURE string_lindexs ****/

errcode string_lindexs(pat, s, ret_1)
CLUREF pat;
CLUREF s;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF z;
    CLUREF i;
    CLUREF ok;
    CLUREF j;
    enter_proc(3);

  LINE(5);
    {
        {CLUREF T_1_1;
        err = stringOPsize(pat, &T_1_1);
        if (err != ERR_ok) goto ex_0;
        z.num = T_1_1.num;
        }
        }

  LINE(6);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    CLUREF T_1_3;
    CLUREF T_1_4;
        err = stringOPsize(s, &T_1_1);
        if (err != ERR_ok) goto ex_0;
        T_1_3.num = z.num;
        T_1_4.num = -1;
        for (T_1_2.num = T_1_1.num; ((T_1_4.num == 0) || ((T_1_4.num > 0)? (T_1_2.num <= T_1_3.num) : (T_1_2.num >= T_1_3.num))); T_1_2.num += T_1_4.num) {
            i.num = T_1_2.num;

  LINE(7);
            {
                {ok.tf = true;
                }
                }

  LINE(8);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            CLUREF T_2_3;
            CLUREF T_2_4;
                T_2_1.num = z.num - 1;
                 if ((T_2_1.num >= 0 && z.num < 0 && (-1) < 0) || 
                     (T_2_1.num <= 0 && z.num > 0 && (-1) > 0)) {
                    err = ERR_overflow;
                    goto ex_0;}
                T_2_3.num = 0;
                T_2_4.num = -1;
                for (T_2_2.num = T_2_1.num; ((T_2_4.num == 0) || ((T_2_4.num > 0)? (T_2_2.num <= T_2_3.num) : (T_2_2.num >= T_2_3.num))); T_2_2.num += T_2_4.num) {
                    j.num = T_2_2.num;

  LINE(9);
                    {
                    CLUREF T_3_1;
                    CLUREF T_3_2;
                    CLUREF T_3_3;
                    CLUREF T_3_4;
                    CLUREF T_3_5;
                    CLUREF T_3_6;
                    T_3_1.num = z.num - j.num;
                     if ((T_3_1.num >= 0 && z.num < 0 && (-j.num) < 0) || 
                         (T_3_1.num <= 0 && z.num > 0 && (-j.num) > 0)) {
                        err = ERR_overflow;
                        goto ex_0;}
                    err = stringOPfetch(pat, T_3_1, &T_3_2);
                    if (err != ERR_ok) goto ex_0;
                    T_3_3.num = i.num - j.num;
                     if ((T_3_3.num >= 0 && i.num < 0 && (-j.num) < 0) || 
                         (T_3_3.num <= 0 && i.num > 0 && (-j.num) > 0)) {
                        err = ERR_overflow;
                        goto ex_0;}
                    err = stringOPfetch(s, T_3_3, &T_3_4);
                    if (err != ERR_ok) goto ex_0;
                    T_3_5.num = (T_3_2.ch == T_3_4.ch)? true : false;
                    T_3_6.num = T_3_5.num ^ 1;
                    if (T_3_6.num == true) {

  LINE(10);
                        {
                        ok.tf = false;
                        }

  LINE(11);
                        goto end_inline_for_2;
                        }
                        }/* end if */
                }
            }
            end_inline_for_2:;

  LINE(14);
            {
            if (ok.num == true) {

  LINE(15);
                {
                {
                CLUREF T_3_1;
                CLUREF T_3_2;
                T_3_1.num = i.num - z.num;
                 if ((T_3_1.num >= 0 && i.num < 0 && (-z.num) < 0) || 
                     (T_3_1.num <= 0 && i.num > 0 && (-z.num) > 0)) {
                    err = ERR_overflow;
                    goto ex_0;}
                T_3_2.num = T_3_1.num + 1;
                 if ((T_3_2.num > 0 && T_3_1.num < 0 && 1 < 0) || 
                     (T_3_2.num < 0 && T_3_1.num > 0 && 1 > 0)) {
                    err = ERR_overflow;
                    goto ex_0;}
                ret_1->num = T_3_2.num;
                }
                {signal (ERR_ok);}}
                }
                }/* end if */
        }
    }
    end_inline_for_1:;

  LINE(17);
    {
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    err = stringOPsize(s, &T_1_1);
    if (err != ERR_ok) goto ex_0;
    T_1_2.num = T_1_1.num + 1;
     if ((T_1_2.num > 0 && T_1_1.num < 0 && 1 < 0) || 
         (T_1_2.num < 0 && T_1_1.num > 0 && 1 > 0)) {
        err = ERR_overflow;
        goto ex_0;}
    ret_1->num = T_1_2.num;
    }
    {signal (ERR_ok);}}
    goto end_0;
    ex_0:
        {
            if (err == ERR_failure) {signal(ERR_failure);}
            elist[0] = _pclu_erstr(err);
            {signal(ERR_failure);}
        }
    end_0: elist[0].str = no_return_values_STRING;
        {signal(ERR_failure);}
    }

/**** END PROCEDURE string_lindexs ****/

