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

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


extern struct dbg_info* dbg_info__job_stuff;
#undef MY_TRACE_FLAG
#define MY_TRACE_FLAG _job_stuff_TRACE
int _job_stuff_TRACE;
extern struct OPS *int_ops;
extern struct OPS *bool_ops;
extern struct OPS *array_of_string_ops;
static Vlist3 owns__job_stuff = {0, 3,{ {0, 2, "_init", &int_ops}
,  {0, 2, "init", &bool_ops},  {0, 2, "dirs", &array_of_string_ops}}
};
extern errcode _job_stuff_IB_1();
extern errcode file_name_fill();
extern errcode file_nameOPunparse();
extern errcode stringOPempty();
extern errcode file_nameOPget_dir();
extern errcode boolOPnot();
extern errcode _environ();
extern errcode arrayOPnew();
extern errcode intOPadd();
extern errcode _bytevecOPindexc();
extern errcode _cvt();
extern errcode intOPequal();
extern errcode stringOPsize();
extern errcode stringOPsubstr();
extern errcode intOPsub();
extern errcode stringOPequal();
extern errcode stringOPappend();
extern errcode arrayOPaddh();
extern errcode arrayOPelements();
extern errcode stringOPconcat();
extern errcode _file_access();
extern errcode _file_exists();
extern errcode intOPgt();
extern errcode stringOPindexc();
extern errcode _bytevecOPfetch();
extern errcode _bytevecOPstore();
extern errcode _wordvecOPcreate();
extern errcode _wordvecOPstore();
extern errcode charOPequal();
extern OWN_req string_ownreqs;
extern struct OPS *string_ops;
extern struct REQS *array_of_t_reqs;
extern OWN_req array_ownreqs;
extern struct OPS *array_ops;
struct OPS *array_of_string_table;
struct OPS *array_of_string_ops;
struct OPS *array_of_string_ops;
OWNPTR array_of_string_owns;
CLUREF STR_;
CLUREF STR_PATH;
CLUREF STR__072_057bin_072_057usr_057bin;
CLUREF STR__056;
CLUREF STR_no_040such_040executable_040file;
CLUREF STR__040_011_000;
CLUREF STR__000;
static int _job_stuff_own_init = 0;
CLUREF _job_stuffOPinit;
CLUREF _job_stuffOPdirs;

/**** BEGIN PROCEDURE _job_stuff ****/

errcode _job_stuff(fn, jcl, ret_1, ret_2, ret_3)
CLUREF fn;
CLUREF jcl;
CLUREF *ret_1;
CLUREF *ret_2;
CLUREF *ret_3;
    {
    struct {
        struct dbg_info *DBG_INFO;
        int DBG_LINE;
        errcode err;
        errcode ecode2;
        CLUREF fs;
        CLUREF s;
        CLUREF j;
        CLUREF i;
        CLUREF ws;
        CLUREF b;
        CLUREF chars;
        CLUREF cnt;
        CLUREF v;
        CLUREF fn;
        CLUREF jcl;
        } locals;
    locals.fs.num = UNINIT;
    locals.s.num = UNINIT;
    locals.j.num = UNINIT;
    locals.i.num = UNINIT;
    locals.ws.num = UNINIT;
    locals.b.num = UNINIT;
    locals.chars.num = UNINIT;
    locals.cnt.num = UNINIT;
    locals.v.num = UNINIT;
    locals.fn.num = UNINIT;
    locals.jcl.num = UNINIT;
    locals.DBG_INFO = dbg_info__job_stuff;
    locals.fn = fn;
    locals.jcl = jcl;
        if (_job_stuff_own_init == 0) {
        add_parm_info_type(0, string_ops, array_of_t_reqs);
        find_type_instance(array_ops, 1, &array_ownreqs, &(array_of_string_ops));
        stringOPcons("", CLU_1, CLU_0, &STR_);
        stringOPcons("PATH", CLU_1, CLU_4, &STR_PATH);
        stringOPcons(":/bin:/usr/bin", CLU_1, CLU_14, &STR__072_057bin_072_057usr_057bin);
        stringOPcons(".", CLU_1, CLU_1, &STR__056);
        stringOPcons("no such executable file", CLU_1, CLU_23, &STR_no_040such_040executable_040file);
        stringOPcons(" \t\000", CLU_1, CLU_3, &STR__040_011_000);
        stringOPcons("\000", CLU_1, CLU_1, &STR__000);
        _job_stuff_own_init = 1;
        {
            {_job_stuffOPinit.tf = false;
            }
            }
        _job_stuffOPdirs.num = UNINIT;
    }
    enter_proc(3);

  LINE(9);
    {
    CLUREF T_1_1;
    locals.err = file_name_fill(locals.fn, STR_, &T_1_1);
    if (locals.err != ERR_ok) goto ex_0;
    locals.fn.num = T_1_1.num;
    }

  LINE(10);
    {
        {CLUREF T_1_1;
        locals.err = file_nameOPunparse(locals.fn, &T_1_1);
        if (locals.err != ERR_ok) goto ex_0;
        locals.fs.num = T_1_1.num;
        }
        }

  LINE(11);
    {
    CLUREF T_2_1;
    CLUREF T_2_2;
    locals.err = file_nameOPget_dir(locals.fn, &T_2_1);
    if (locals.err != ERR_ok) goto ex_1;
    locals.err = stringOPempty(T_2_1, &T_2_2);
    if (locals.err != ERR_ok) goto ex_1;
    if (T_2_2.num == true) {

  LINE(12);
        {
        CLUREF T_3_1;
        T_3_1.num = _job_stuffOPinit.num ^ 1;
        if (T_3_1.num == true) {

  LINE(13);
            {
                {CLUREF T_5_1;
                locals.err = _environ(STR_PATH, &T_5_1);
                if (locals.err != ERR_ok) goto ex_2;
                locals.s.num = T_5_1.num;
                }
                }
                goto end_2;
                ex_2:
                    if ((locals.err == ERR_not_found)) {

  LINE(14);
                        {
                        locals.s = STR__072_057bin_072_057usr_057bin;
                        }
                    }
                    else {
                        goto ex_1;
                    }
                end_2:;

  LINE(15);
            {
            CLUREF T_4_1;
            locals.err = arrayOPnew(&T_4_1);
            if (locals.err != ERR_ok) goto ex_1;
            _job_stuffOPdirs.num = T_4_1.num;
            }

  LINE(16);
            {
                {locals.j.num = 0;
                }
                }

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

  LINE(18);
                {
                    {CLUREF T_6_1;
                    locals.err = intOPadd(locals.j, CLU_1, &T_6_1);
                    if (locals.err != ERR_ok) goto ex_3;
                    locals.i.num = T_6_1.num;
                    }
                    }

  LINE(19);
                {
                CLUREF T_6_1;
                CLUREF T_6_2;
                CLUREF T_6_3;
                T_6_1.ch = ':';
                T_6_2.num = locals.s.num;
                locals.err = _bytevecOPindexc(T_6_1, T_6_2, locals.i, &T_6_3);
                if (locals.err != ERR_ok) goto ex_3;
                locals.j.num = T_6_3.num;
                }

  LINE(22);
                {
                CLUREF T_6_1;
                T_6_1.num = (locals.j.num == 0)? true : false;
                if (T_6_1.num == true) {

  LINE(23);
                    {
                    CLUREF T_7_1;
                    CLUREF T_7_2;
                    locals.err = stringOPsize(locals.s, &T_7_1);
                    if (locals.err != ERR_ok) goto ex_3;
                    locals.err = intOPadd(T_7_1, CLU_1, &T_7_2);
                    if (locals.err != ERR_ok) goto ex_3;
                    locals.j.num = T_7_2.num;
                    }
                    }
                    }/* end if */

  LINE(24);
                {
                    {CLUREF T_6_1;
                    CLUREF T_6_2;
                    locals.err = intOPsub(locals.j, locals.i, &T_6_1);
                    if (locals.err != ERR_ok) goto ex_3;
                    locals.err = stringOPsubstr(locals.s, locals.i, T_6_1, &T_6_2);
                    if (locals.err != ERR_ok) goto ex_3;
                    locals.ws.num = T_6_2.num;
                    }
                    }

  LINE(25);
                {
                CLUREF T_6_1;
                locals.err = stringOPequal(locals.ws, STR__056, &T_6_1);
                if (locals.err != ERR_ok) goto ex_3;
                if (T_6_1.num == true) {

  LINE(26);
                    {
                    locals.ws = STR_;
                    }
                    }
                else {

  LINE(27);
                    {
                    CLUREF T_7_1;
                    CLUREF T_7_2;
                    T_7_1.ch = '/';
                    locals.err = stringOPappend(locals.ws, T_7_1, &T_7_2);
                    if (locals.err != ERR_ok) goto ex_3;
                    locals.ws.num = T_7_2.num;
                    }
                    }}/* end if */

  LINE(29);
                {
                locals.err = arrayOPaddh(_job_stuffOPdirs, locals.ws);
                if (locals.err != ERR_ok) goto ex_3;
                }
                }
                end_while_1:;
                goto end_3;
                ex_3:
                    if ((locals.err == ERR_bounds)) {
                    }
                    else {
                        goto ex_1;
                    }
                end_3:;

  LINE(31);
            {
            _job_stuffOPinit.tf = true;
            }
            }
            }/* end if */

  LINE(33);
        {
            locals.err = arrayOPelements(_job_stuffOPdirs, _job_stuff_IB_1, &locals, &locals.ecode2);
            if (locals.err == ERR_iterbodyreturn) {
            ret_1->num = elist[0].num;
            ret_2->num = elist[1].num;
            ret_3->num = elist[2].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_4;
            }
        goto end_4;
        ex_4:
            if (locals.err == ERR_not_possible) {signal(ERR_not_possible);}
            else {
                goto ex_1;}
        end_4:;

  LINE(40);
        {
        elist[0] = STR_no_040such_040executable_040file;
        {signal (ERR_not_possible);}}
        }
        }/* end if */
        goto end_1;
        ex_1:
            if ((locals.err == ERR_found)) {
            }
            else {
                goto ex_0;
            }
        end_1:;

  LINE(42);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    T_1_1.ch = '\000';
    locals.err = stringOPappend(locals.fs, T_1_1, &T_1_2);
    if (locals.err != ERR_ok) goto ex_0;
    locals.fs.num = T_1_2.num;
    }

  LINE(43);
    {
        {CLUREF T_1_1;
        CLUREF T_1_2;
        CLUREF T_1_3;
        CLUREF T_1_4;
        T_1_1.ch = '\000';
        locals.err = stringOPappend(locals.jcl, T_1_1, &T_1_2);
        if (locals.err != ERR_ok) goto ex_0;
        locals.err = stringOPconcat(locals.fs, T_1_2, &T_1_3);
        if (locals.err != ERR_ok) goto ex_0;
        T_1_4.num = T_1_3.str;
        locals.b.num = T_1_4.num;
        }
        }

  LINE(44);
    {
        {locals.chars = STR__040_011_000;
        }
        }

  LINE(45);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    CLUREF T_1_3;
    T_1_1.ch = '\000';
    locals.err = stringOPindexc(T_1_1, locals.jcl, &T_1_2);
    if (locals.err != ERR_ok) goto ex_0;
    T_1_3.num = (T_1_2.num > 0)? true : false;
    if (T_1_3.num == true) {

  LINE(46);
        {
        locals.chars = STR__000;
        }
        }
        }/* end if */

  LINE(47);
    {
        {locals.cnt.num = 0;
        }
        }

  LINE(48);
    {
        {CLUREF T_1_1;
        locals.err = stringOPsize(locals.fs, &T_1_1);
        if (locals.err != ERR_ok) goto ex_0;
        locals.i.num = T_1_1.num;
        }
        }

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

  LINE(50);
        {
        CLUREF T_3_1;
        locals.err = intOPadd(locals.cnt, CLU_1, &T_3_1);
        if (locals.err != ERR_ok) goto ex_5;
        locals.cnt.num = T_3_1.num;
        }

  LINE(51);
        for (;;) {
            CLUREF T_3_1;
            CLUREF T_3_2;
            CLUREF T_3_3;
            locals.err = _bytevecOPfetch(locals.b, locals.i, &T_3_1);
            if (locals.err != ERR_ok) goto ex_5;
            locals.err = stringOPindexc(T_3_1, locals.chars, &T_3_2);
            if (locals.err != ERR_ok) goto ex_5;
            T_3_3.num = (T_3_2.num == 0)? true : false;
            if (T_3_3.num != true) { break; }

  LINE(52);
            {
            CLUREF T_4_1;
            locals.err = intOPadd(locals.i, CLU_1, &T_4_1);
            if (locals.err != ERR_ok) goto ex_5;
            locals.i.num = T_4_1.num;
            }
            }
            end_while_3:;

  LINE(54);
        for (;;) {
            CLUREF T_3_1;
            CLUREF T_3_2;
            CLUREF T_3_3;
            locals.err = _bytevecOPfetch(locals.b, locals.i, &T_3_1);
            if (locals.err != ERR_ok) goto ex_5;
            locals.err = stringOPindexc(T_3_1, locals.chars, &T_3_2);
            if (locals.err != ERR_ok) goto ex_5;
            T_3_3.num = (T_3_2.num > 0)? true : false;
            if (T_3_3.num != true) { break; }

  LINE(55);
            {
            CLUREF T_4_1;
            T_4_1.ch = '\000';
            locals.err = _bytevecOPstore(locals.b, locals.i, T_4_1);
            if (locals.err != ERR_ok) goto ex_5;
            }

  LINE(56);
            {
            CLUREF T_4_1;
            locals.err = intOPadd(locals.i, CLU_1, &T_4_1);
            if (locals.err != ERR_ok) goto ex_5;
            locals.i.num = T_4_1.num;
            }
            }
            end_while_4:;
        }
        end_while_2:;
        goto end_5;
        ex_5:
            if ((locals.err == ERR_bounds)) {
            }
            else {
                goto ex_0;
            }
        end_5:;

  LINE(59);
    {
        {CLUREF T_1_1;
        CLUREF T_1_2;
        locals.err = intOPadd(locals.cnt, CLU_2, &T_1_1);
        if (locals.err != ERR_ok) goto ex_0;
        locals.err = _wordvecOPcreate(T_1_1, &T_1_2);
        if (locals.err != ERR_ok) goto ex_0;
        locals.v.num = T_1_2.num;
        }
        }

  LINE(60);
    {
    locals.err = _wordvecOPstore(locals.v, CLU_1, locals.cnt);
    if (locals.err != ERR_ok) goto ex_0;
    }

  LINE(61);
    {
    locals.cnt.num = 1;
    }

  LINE(62);
    {
    locals.i.num = 1;
    }

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

  LINE(64);
        {
        CLUREF T_3_1;
        locals.err = intOPadd(locals.cnt, CLU_1, &T_3_1);
        if (locals.err != ERR_ok) goto ex_6;
        locals.cnt.num = T_3_1.num;
        }

  LINE(65);
        {
        locals.err = _wordvecOPstore(locals.v, locals.cnt, locals.i);
        if (locals.err != ERR_ok) goto ex_6;
        }

  LINE(66);
        {
        CLUREF T_3_1;
        CLUREF T_3_2;
        T_3_1.ch = '\000';
        locals.err = _bytevecOPindexc(T_3_1, locals.b, locals.i, &T_3_2);
        if (locals.err != ERR_ok) goto ex_6;
        locals.i.num = T_3_2.num;
        }

  LINE(67);
        for (;;) {
            CLUREF T_3_1;
            CLUREF T_3_2;
            CLUREF T_3_3;
            locals.err = _bytevecOPfetch(locals.b, locals.i, &T_3_1);
            if (locals.err != ERR_ok) goto ex_6;
            T_3_2.ch = '\000';
            T_3_3.num = (T_3_1.ch == T_3_2.ch)? true : false;
            if (T_3_3.num != true) { break; }

  LINE(68);
            {
            CLUREF T_4_1;
            locals.err = intOPadd(locals.i, CLU_1, &T_4_1);
            if (locals.err != ERR_ok) goto ex_6;
            locals.i.num = T_4_1.num;
            }
            }
            end_while_6:;
        }
        end_while_5:;
        goto end_6;
        ex_6:
            if ((locals.err == ERR_bounds)) {
            }
            else {
                goto ex_0;
            }
        end_6:;

  LINE(71);
    {
    {
    ret_1->num = locals.v.num;
    }
    {
    ret_2->num = locals.b.num;
    }
    {
    ret_3->num = locals.fs.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 _job_stuff ****/

extern struct OPS *_wordvec_ops;
extern struct OPS *_bytevec_ops;
extern struct OPS *file_name_ops;
typedef struct {
    int hdr;
    int count;
    char *name;
    char *fname;
    bool is_iter;
    int is_parmd;
    int addr;
    int nargs;
    Vlist3 *vals;
    siglist1 *sigs;
    Vlist13 *locals;
    Vlist3 *owns;
    Vlist0 *ptowns;
    Vlist0 *popowns;
    Slist0 *type_formals;
    Slist0 *op_formals;
    } dbg_info__job_stuff_actual;
static Vlist3 vals__job_stuff = {0, 3, { {0, 2, "", &_wordvec_ops},  {0, 2, "", &_bytevec_ops},  {0, 2, "", &string_ops}}
};
static sig_desc1 sig__job_stuff_1 = {0, 4, "not_possible", {0, 1
, { {0, 2, "", &string_ops}}}};
static siglist1 sigs__job_stuff = {0, 1, (sig_desc*)&sig__job_stuff_1};
static Vlist13 locals__job_stuff = {0, 13,{ {0, 2, "err", &int_ops},  {0, 2, "ecode2", &int_ops},  {0, 2, "fs", &string_ops},  {0, 2, "s", &string_ops},  {0, 2, "j", &int_ops},  {0, 2, "i", &int_ops},  {0, 2, "ws", &string_ops},  {0, 2, "b", &_bytevec_ops},  {0, 2, "chars", &string_ops},  {0, 2, "cnt", &int_ops},  {0, 2, "v", &_wordvec_ops},  {0, 2, "fn", &file_name_ops},  {0, 2, "jcl", &string_ops}}
};
static Vlist0 popowns__job_stuff = {0, 0};
Slist0 tformals__job_stuff = {0, 0};
Slist0 opformals__job_stuff = {0, 0};
dbg_info__job_stuff_actual dbg_info__job_stuff_data = {0, 12, 
    "_job_stuff", "/common/pub/dcurtis-temp/pclu/lib/clu/_job_stuff.clu", 0, 0, (int)_job_stuff, 2, 
    &vals__job_stuff, &sigs__job_stuff, &locals__job_stuff, &owns__job_stuff, &NO_VALS, &NO_VALS, &NO_PARMS, &NO_PARMS};
    struct dbg_info *dbg_info__job_stuff = (struct dbg_info*)&dbg_info__job_stuff_data;

/**** BEGIN ITERATOR BODIES for _job_stuff ****/

errcode _job_stuff_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 fs;
    CLUREF s;
    CLUREF j;
    CLUREF i;
    CLUREF ws;
    CLUREF b;
    CLUREF chars;
    CLUREF cnt;
    CLUREF v;
    CLUREF fn;
    CLUREF jcl;
    } *locals;
{
    locals->s.num = iv_1.num;
    enter_iter_body_proc(34);

  FB_LINE(34);
    {
    CLUREF T_1_1;
    locals->err = stringOPconcat(locals->s, locals->fs, &T_1_1);
    if (locals->err != ERR_ok) goto ex_0;
    locals->s.num = T_1_1.num;
    }

  FB_LINE(35);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    CLUREF T_1_3;
    CLUREF T_1_4;
    locals->err = _file_access(locals->s, CLU_1, &T_1_2);
    if (locals->err != ERR_ok) goto ex_0;
    T_1_1.num = T_1_2.num;
    if (T_1_2.num) {
        locals->err = _file_exists(locals->s, CLU_4, &T_1_3);
        if (locals->err != ERR_ok) goto ex_0;
        T_1_4.num = T_1_3.num ^ 1;
        T_1_1.num = T_1_4.num;
    }
    if (T_1_1.num == true) {

  FB_LINE(36);
        {
        locals->fs.num = locals->s.num;
        }

  FB_LINE(37);
        {
            locals->err = ERR_found;
            goto ex_0;
            }
        }
        }/* end if */
    {signal(ERR_ok);}
    ex_0:
        {
            *iecode = locals->err;
            {signal(ERR_iterbodyexit);}}
    end_0: {signal(ERR_ok);}
    }/* end _job_stuff_IB_1 */

/**** END ITERATOR BODIES for _job_stuff ****/

