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

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


extern errcode stringOPsize();
extern errcode intOPequal();
extern errcode stringOPfetch();
extern errcode boolOPnot();
extern errcode charOPequal();
extern errcode stringOPrest();
extern errcode intOPadd();
extern errcode intOPgt();
CLUREF STR_;
static int trim_head_own_init = 0;

/**** BEGIN PROCEDURE trim_head ****/

errcode trim_head(s, ret_1)
CLUREF s;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF len;
    CLUREF idx;
    CLUREF c;
        if (trim_head_own_init == 0) {
        stringOPcons("", CLU_1, CLU_0, &STR_);
        trim_head_own_init = 1;
    }
    enter_proc(4);

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

  LINE(6);
    {
    CLUREF T_1_1;
    T_1_1.num = (len.num == 0)? true : false;
    if (T_1_1.num == true) {
        {
        {
        ret_1->num = s.num;
        }
        {signal (ERR_ok);}}
        }
        }/* end if */

  LINE(7);
    {
        {idx.num = 1;
        }
        }

  LINE(8);
    for (;;) {
        if (true != true) { break; }

  LINE(9);
        {
            {CLUREF T_2_1;
            err = stringOPfetch(s, idx, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            c.num = T_2_1.num;
            }
            }

  LINE(10);
        {
        CLUREF T_2_1;
        CLUREF T_2_2;
        CLUREF T_2_3;
        CLUREF T_2_4;
        CLUREF T_2_5;
        CLUREF T_2_6;
        CLUREF T_2_7;
        T_2_2.ch = ' ';
        T_2_3.num = (c.ch == T_2_2.ch)? true : false;
        T_2_4.num = T_2_3.num ^ 1;
        T_2_1.num = T_2_4.num;
        if (T_2_4.num) {
            T_2_5.ch = '\t';
            T_2_6.num = (c.ch == T_2_5.ch)? true : false;
            T_2_7.num = T_2_6.num ^ 1;
            T_2_1.num = T_2_7.num;
        }
        if (T_2_1.num == true) {

  LINE(11);
            {
            {
            CLUREF T_3_1;
            err = stringOPrest(s, idx, &T_3_1);
            if (err != ERR_ok) goto ex_0;
            ret_1->num = T_3_1.num;
            }
            {signal (ERR_ok);}}
            }
            }/* end if */

  LINE(13);
        {
        CLUREF T_2_1;
        T_2_1.num = idx.num + 1;
         if ((T_2_1.num > 0 && idx.num < 0 && 1 < 0) || 
             (T_2_1.num < 0 && idx.num > 0 && 1 > 0)) {
            err = ERR_overflow;
            goto ex_0;}
        idx.num = T_2_1.num;
        }

  LINE(14);
        {
        CLUREF T_2_1;
        T_2_1.num = (idx.num > len.num)? true : false;
        if (T_2_1.num == true) {
            {
            {
            ret_1->str = STR_.str;
            }
            {signal (ERR_ok);}}
            }
            }/* end if */

  LINE(15);
        {
        CLUREF T_2_1;
        err = stringOPfetch(s, idx, &T_2_1);
        if (err != ERR_ok) goto ex_0;
        c.num = T_2_1.num;
        }
        }
        end_while_1:;
    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 trim_head ****/


extern errcode stringOPsubstr();
extern errcode intOPsub();
static int trim_tail_own_init = 0;

/**** BEGIN PROCEDURE trim_tail ****/

errcode trim_tail(s, ret_1)
CLUREF s;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF len;
    CLUREF idx;
    CLUREF c;
        if (trim_tail_own_init == 0) {
        stringOPcons("", CLU_1, CLU_0, &STR_);
        trim_tail_own_init = 1;
    }
    enter_proc(19);

  LINE(20);
    {
        {CLUREF T_1_1;
        err = stringOPsize(s, &T_1_1);
        if (err != ERR_ok) goto ex_0;
        len.num = T_1_1.num;
        }
        }

  LINE(21);
    {
    CLUREF T_1_1;
    T_1_1.num = (len.num == 0)? true : false;
    if (T_1_1.num == true) {
        {
        {
        ret_1->num = s.num;
        }
        {signal (ERR_ok);}}
        }
        }/* end if */

  LINE(22);
    {
        {idx.num = len.num;
        }
        }

  LINE(23);
    for (;;) {
        if (true != true) { break; }

  LINE(24);
        {
            {CLUREF T_2_1;
            err = stringOPfetch(s, idx, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            c.num = T_2_1.num;
            }
            }

  LINE(25);
        {
        CLUREF T_2_1;
        CLUREF T_2_2;
        CLUREF T_2_3;
        CLUREF T_2_4;
        CLUREF T_2_5;
        CLUREF T_2_6;
        CLUREF T_2_7;
        T_2_2.ch = ' ';
        T_2_3.num = (c.ch == T_2_2.ch)? true : false;
        T_2_4.num = T_2_3.num ^ 1;
        T_2_1.num = T_2_4.num;
        if (T_2_4.num) {
            T_2_5.ch = '\t';
            T_2_6.num = (c.ch == T_2_5.ch)? true : false;
            T_2_7.num = T_2_6.num ^ 1;
            T_2_1.num = T_2_7.num;
        }
        if (T_2_1.num == true) {

  LINE(26);
            {
            {
            CLUREF T_3_1;
            err = stringOPsubstr(s, CLU_1, idx, &T_3_1);
            if (err != ERR_ok) goto ex_0;
            ret_1->num = T_3_1.num;
            }
            {signal (ERR_ok);}}
            }
            }/* end if */

  LINE(28);
        {
        CLUREF T_2_1;
        T_2_1.num = idx.num - 1;
         if ((T_2_1.num >= 0 && idx.num < 0 && (-1) < 0) || 
             (T_2_1.num <= 0 && idx.num > 0 && (-1) > 0)) {
            err = ERR_overflow;
            goto ex_0;}
        idx.num = T_2_1.num;
        }

  LINE(29);
        {
        CLUREF T_2_1;
        T_2_1.num = (idx.num == 0)? true : false;
        if (T_2_1.num == true) {
            {
            {
            ret_1->str = STR_.str;
            }
            {signal (ERR_ok);}}
            }
            }/* end if */

  LINE(30);
        {
        CLUREF T_2_1;
        err = stringOPfetch(s, idx, &T_2_1);
        if (err != ERR_ok) goto ex_0;
        c.num = T_2_1.num;
        }
        }
        end_while_1:;
    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 trim_tail ****/


static int trim_both_own_init = 0;

/**** BEGIN PROCEDURE trim_both ****/

errcode trim_both(s, ret_1)
CLUREF s;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF len;
    CLUREF idx;
    CLUREF c;
        if (trim_both_own_init == 0) {
        stringOPcons("", CLU_1, CLU_0, &STR_);
        trim_both_own_init = 1;
    }
    enter_proc(34);

  LINE(35);
    {
        {CLUREF T_1_1;
        err = stringOPsize(s, &T_1_1);
        if (err != ERR_ok) goto ex_0;
        len.num = T_1_1.num;
        }
        }

  LINE(36);
    {
    CLUREF T_1_1;
    T_1_1.num = (len.num == 0)? true : false;
    if (T_1_1.num == true) {
        {
        {
        ret_1->num = s.num;
        }
        {signal (ERR_ok);}}
        }
        }/* end if */

  LINE(37);
    {
        {idx.num = 1;
        }
        }

  LINE(38);
    for (;;) {
        if (true != true) { break; }

  LINE(39);
        {
            {CLUREF T_2_1;
            err = stringOPfetch(s, idx, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            c.num = T_2_1.num;
            }
            }

  LINE(40);
        {
        CLUREF T_2_1;
        CLUREF T_2_2;
        CLUREF T_2_3;
        CLUREF T_2_4;
        CLUREF T_2_5;
        CLUREF T_2_6;
        CLUREF T_2_7;
        T_2_2.ch = ' ';
        T_2_3.num = (c.ch == T_2_2.ch)? true : false;
        T_2_4.num = T_2_3.num ^ 1;
        T_2_1.num = T_2_4.num;
        if (T_2_4.num) {
            T_2_5.ch = '\t';
            T_2_6.num = (c.ch == T_2_5.ch)? true : false;
            T_2_7.num = T_2_6.num ^ 1;
            T_2_1.num = T_2_7.num;
        }
        if (T_2_1.num == true) {
            goto end_while_1;
            }
            }/* end if */

  LINE(41);
        {
        CLUREF T_2_1;
        T_2_1.num = idx.num + 1;
         if ((T_2_1.num > 0 && idx.num < 0 && 1 < 0) || 
             (T_2_1.num < 0 && idx.num > 0 && 1 > 0)) {
            err = ERR_overflow;
            goto ex_0;}
        idx.num = T_2_1.num;
        }

  LINE(42);
        {
        CLUREF T_2_1;
        T_2_1.num = (idx.num > len.num)? true : false;
        if (T_2_1.num == true) {
            {
            {
            ret_1->str = STR_.str;
            }
            {signal (ERR_ok);}}
            }
            }/* end if */

  LINE(43);
        {
        CLUREF T_2_1;
        err = stringOPfetch(s, idx, &T_2_1);
        if (err != ERR_ok) goto ex_0;
        c.num = T_2_1.num;
        }
        }
        end_while_1:;

  LINE(45);
    for (;;) {
        if (true != true) { break; }

  LINE(46);
        {
            {CLUREF T_2_1;
            err = stringOPfetch(s, len, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            c.num = T_2_1.num;
            }
            }

  LINE(47);
        {
        CLUREF T_2_1;
        CLUREF T_2_2;
        CLUREF T_2_3;
        CLUREF T_2_4;
        CLUREF T_2_5;
        CLUREF T_2_6;
        CLUREF T_2_7;
        T_2_2.ch = ' ';
        T_2_3.num = (c.ch == T_2_2.ch)? true : false;
        T_2_4.num = T_2_3.num ^ 1;
        T_2_1.num = T_2_4.num;
        if (T_2_4.num) {
            T_2_5.ch = '\t';
            T_2_6.num = (c.ch == T_2_5.ch)? true : false;
            T_2_7.num = T_2_6.num ^ 1;
            T_2_1.num = T_2_7.num;
        }
        if (T_2_1.num == true) {

  LINE(48);
            {
            {
            CLUREF T_3_1;
            CLUREF T_3_2;
            CLUREF T_3_3;
            T_3_1.num = len.num - idx.num;
             if ((T_3_1.num >= 0 && len.num < 0 && (-idx.num) < 0) || 
                 (T_3_1.num <= 0 && len.num > 0 && (-idx.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;}
            err = stringOPsubstr(s, idx, T_3_2, &T_3_3);
            if (err != ERR_ok) goto ex_0;
            ret_1->num = T_3_3.num;
            }
            {signal (ERR_ok);}}
            }
            }/* end if */

  LINE(50);
        {
        CLUREF T_2_1;
        T_2_1.num = len.num - 1;
         if ((T_2_1.num >= 0 && len.num < 0 && (-1) < 0) || 
             (T_2_1.num <= 0 && len.num > 0 && (-1) > 0)) {
            err = ERR_overflow;
            goto ex_0;}
        len.num = T_2_1.num;
        }
        }
        end_while_2:;
    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 trim_both ****/

