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

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


extern struct dbg_info* dbg_info_parse_line;
#undef MY_TRACE_FLAG
#define MY_TRACE_FLAG parse_line_TRACE
int parse_line_TRACE;
extern struct OPS *int_ops;
extern struct OPS *array_of_char_ops;
static Vlist2 owns_parse_line = {0, 2,{ {0, 2, "_init", &int_ops}
,  {0, 2, "accum", &array_of_char_ops}}
};
extern errcode parse_line_IB_1();
extern errcode arrayOPnew();
extern errcode intOPfrom_to();
extern errcode intOPadd();
extern errcode stringOPsize();
extern errcode stringOPfetch();
extern errcode charOPequal();
extern errcode boolOPnot();
extern errcode arrayOPempty();
extern errcode arrayOPaddh();
extern errcode stringOPac2s();
extern errcode arrayOPtrim();
extern OWN_req char_ownreqs;
extern struct OPS *char_ops;
extern struct REQS *array_of_t_reqs;
extern OWN_req array_ownreqs;
extern struct OPS *array_ops;
struct OPS *array_of_char_table;
struct OPS *array_of_char_ops;
struct OPS *array_of_char_ops;
OWNPTR array_of_char_owns;
extern struct OPS *string_ops;
struct OPS *array_of_string_table;
struct OPS *array_of_string_ops;
struct OPS *array_of_string_ops;
OWNPTR array_of_string_owns;
static int parse_line_own_init = 0;
CLUREF parse_lineOPaccum;

/**** BEGIN PROCEDURE parse_line ****/

errcode parse_line(s, ret_1)
CLUREF s;
CLUREF *ret_1;
    {
    struct {
        struct dbg_info *DBG_INFO;
        int DBG_LINE;
        errcode err;
        errcode ecode2;
        CLUREF parts;
        CLUREF pos;
        CLUREF c;
        CLUREF s;
        } locals;
    locals.parts.num = UNINIT;
    locals.pos.num = UNINIT;
    locals.c.num = UNINIT;
    locals.s.num = UNINIT;
    locals.DBG_INFO = dbg_info_parse_line;
    locals.s = s;
        if (parse_line_own_init == 0) {
        add_parm_info_type(0, char_ops, array_of_t_reqs);
        find_type_instance(array_ops, 1, &array_ownreqs, &(array_of_char_ops));
        add_parm_info_type(0, string_ops, array_of_t_reqs);
        find_type_instance(array_ops, 1, &array_ownreqs, &(array_of_string_ops));
        parse_line_own_init = 1;
        {
            {CLUREF T_0_1;
            locals.err = arrayOPnew(&T_0_1);
            if (locals.err != ERR_ok) goto ex_0;
            parse_lineOPaccum.num = T_0_1.num;
            }
            }
    }
    enter_proc(8);

  LINE(10);
    {
        {CLUREF T_1_1;
        locals.err = arrayOPnew(&T_1_1);
        if (locals.err != ERR_ok) goto ex_0;
        locals.parts.num = T_1_1.num;
        }
        }

  LINE(11);
    {
        CLUREF T_1_1;
        CLUREF T_1_2;
        locals.err = stringOPsize(locals.s, &T_1_1);
        if (locals.err != ERR_ok) goto ex_0;
        locals.err = intOPadd(T_1_1, CLU_1, &T_1_2);
        if (locals.err != ERR_ok) goto ex_0;
        locals.err = intOPfrom_to(CLU_1, T_1_2, parse_line_IB_1, &locals, &locals.ecode2);
        if (locals.err == ERR_iterbodyreturn) {
        ret_1->num = elist[0].num;
        signal(ERR_ok);}
        if (locals.err == ERR_iterbodysignal) {signal(locals.ecode2);}
        if (locals.err == ERR_break) locals.err = ERR_ok;
        if (locals.err == ERR_iterbodyexit) locals.err = locals.ecode2;
        if (locals.err != ERR_ok) goto ex_0;
        }

  LINE(22);
    {
    {
    ret_1->num = locals.parts.num;
    }
    {signal (ERR_ok);}}
    goto end_0;
    ex_0:
        {
            if (locals.err == ERR_failure) {signal(ERR_failure);}
            elist[0] = _pclu_erstr(locals.err);
            {signal(ERR_failure);}
        }
    end_0: elist[0].str = no_return_values_STRING;
        {signal(ERR_failure);}
    }

/**** END PROCEDURE parse_line ****/

extern struct OPS *array_of_string_ops;
typedef struct {
    int hdr;
    int count;
    char *name;
    char *fname;
    bool is_iter;
    int is_parmd;
    int addr;
    int nargs;
    Vlist1 *vals;
    siglist0 *sigs;
    Vlist6 *locals;
    Vlist2 *owns;
    Vlist0 *ptowns;
    Vlist0 *popowns;
    Slist1 *type_formals;
    Slist0 *op_formals;
    } dbg_info_parse_line_actual;
static Vlist1 vals_parse_line = {0, 1, { {0, 2, "", &array_of_string_ops}}
};
static siglist0 sigs_parse_line = {0, 0};
static Vlist6 locals_parse_line = {0, 6,{ {0, 2, "err", &int_ops},  {0, 2, "ecode2", &int_ops},  {0, 2, "parts", &array_of_string_ops},  {0, 2, "pos", &int_ops},  {0, 2, "c", &char_ops},  {0, 2, "s", &string_ops}}
};
static Vlist0 popowns_parse_line = {0, 0};
Slist1 tformals_parse_line = {0, 1, "t"};
Slist0 opformals_parse_line = {0, 0};
dbg_info_parse_line_actual dbg_info_parse_line_data = {0, 12, 
    "parse_line", "/common/pub/dcurtis-temp/pclu/lib/clu/parse_line.clu", 0, 0, (int)parse_line, 1, 
    &vals_parse_line, &sigs_parse_line, &locals_parse_line, &owns_parse_line, &NO_VALS, &NO_VALS, &tformals_parse_line, &NO_PARMS};
    struct dbg_info *dbg_info_parse_line = (struct dbg_info*)&dbg_info_parse_line_data;

/**** BEGIN ITERATOR BODIES for parse_line ****/

errcode parse_line_IB_1(iv_1, locals, iecode)
errcode *iecode;
CLUREF iv_1;
struct {
    struct dbg_info *DBG_INFO;
    int DBG_LINE;
    errcode err;
    errcode ecode2;
    CLUREF parts;
    CLUREF pos;
    CLUREF c;
    CLUREF s;
    } *locals;
{
    locals->pos.num = iv_1.num;
    enter_iter_body_proc(13);

  FB_LINE(12);
    {
        {CLUREF T_2_1;
        locals->err = stringOPfetch(locals->s, locals->pos, &T_2_1);
        if (locals->err != ERR_ok) goto ex_1;
        locals->c.num = T_2_1.num;
        }
        }
        goto end_1;
        ex_1:
            if ((locals->err == ERR_bounds)) {

  FB_LINE(13);
                {
                CLUREF T_2_1;
                T_2_1.ch = ' ';
                locals->c.num = T_2_1.num;
                }
            }
            else {
                goto ex_0;
            }
        end_1:;

  FB_LINE(14);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    CLUREF T_1_3;
    CLUREF T_1_4;
    CLUREF T_1_5;
    CLUREF T_1_6;
    CLUREF T_1_7;
    CLUREF T_1_8;
    T_1_3.ch = ' ';
    T_1_4.num = (locals->c.ch == T_1_3.ch)? true : false;
    T_1_2.num = T_1_4.num;
    if (!T_1_4.num) {
        T_1_5.ch = '\t';
        T_1_6.num = (locals->c.ch == T_1_5.ch)? true : false;
        T_1_2.num = T_1_6.num;
    }
    T_1_1.num = T_1_2.num;
    if (!T_1_2.num) {
        T_1_7.ch = ',';
        T_1_8.num = (locals->c.ch == T_1_7.ch)? true : false;
        T_1_1.num = T_1_8.num;
    }
    if (T_1_1.num == true) {

  FB_LINE(15);
        {
        CLUREF T_2_1;
        CLUREF T_2_2;
        T_2_1.num = (parse_lineOPaccum.array->ext_size == 0)? true : false;
        T_2_2.num = T_2_1.num ^ 1;
        if (T_2_2.num == true) {

  FB_LINE(16);
            {
            CLUREF T_3_1;
            locals->err = stringOPac2s(parse_lineOPaccum, &T_3_1);
            if (locals->err != ERR_ok) goto ex_0;
            locals->err = arrayOPaddh(locals->parts, T_3_1);
            if (locals->err != ERR_ok) goto ex_0;
            }

  FB_LINE(17);
            {
            locals->err = arrayOPtrim(parse_lineOPaccum, CLU_1, CLU_0);
            if (locals->err != ERR_ok) goto ex_0;
            }
            }
            }/* end if */
        }
    else {

  FB_LINE(19);
        {
        locals->err = arrayOPaddh(parse_lineOPaccum, locals->c);
        if (locals->err != ERR_ok) goto ex_0;
        }
        }}/* end if */
    {signal(ERR_ok);}
    ex_0:
        {
            *iecode = locals->err;
            {signal(ERR_iterbodyexit);}}
    end_0: {signal(ERR_ok);}
    }/* end parse_line_IB_1 */

/**** END ITERATOR BODIES for parse_line ****/

