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

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


extern struct dbg_info* dbg_info_quicksort;
#undef MY_TRACE_FLAG
#define MY_TRACE_FLAG quicksort_TRACE
int quicksort_TRACE;
extern struct OPS *int_ops;
static Vlist0 owns_quicksort = {0, 0};

typedef struct {
int count;
} quicksort_of_t_REQS;

quicksort_of_t_REQS quicksort_of_t_reqs_actual = {0};

struct REQS * quicksort_of_t_reqs = (struct REQS *)&quicksort_of_t_reqs_actual;


typedef struct {
    int count;
    OWNPTR type_owns;
    OWNPTR op_owns;
    } quicksort_of_t_OPS;

extern errcode intOPsub();
extern errcode intOPgt();
extern errcode intOPlt();
extern errcode sisort();
extern errcode qsort();
extern struct REQS *array_of_t_reqs;
extern OWN_req array_ownreqs;
extern struct OPS *array_ops;
extern OWN_req int_ownreqs;
extern struct REQS *sisort_of_t_reqs;
extern OWN_req sisort_ownreqs;
extern struct REQS *qsort_of_t_reqs;
extern OWN_req qsort_ownreqs;

typedef struct {
    int quicksort_own_init;
    quicksort_of_t_OPS *t_ops;
    struct OPS *array_of_t_table;
    struct OPS *array_of_t_ops;
    OWNPTR array_of_t_owns;
    struct OPS *sisort_of_t_table;
    struct OPS *sisort_of_t_ops;
    OWNPTR sisort_of_t_owns;
    struct OPS *qsort_of_t_table;
    struct OPS *qsort_of_t_ops;
    OWNPTR qsort_of_t_owns;
    } quicksort_OWN_DEFN;
OWN_req quicksort_ownreqs = {sizeof(quicksort_OWN_DEFN), 1};


/**** BEGIN PROCEDURE quicksort ****/

errcode quicksort(items, low, high, less)
CLUREF items;
CLUREF low;
CLUREF high;
CLUREF less;
    {
    struct {
        struct dbg_info *DBG_INFO;
        int DBG_LINE;
        errcode err;
        errcode ecode2;
        quicksort_OWN_DEFN *op_own_ptr;
        CLUREF size;
        CLUREF items;
        CLUREF low;
        CLUREF high;
        CLUREF less;
        } locals;
    locals.size.num = UNINIT;
    locals.items.num = UNINIT;
    locals.low.num = UNINIT;
    locals.high.num = UNINIT;
    locals.less.num = UNINIT;
    locals.DBG_INFO = dbg_info_quicksort;
    locals.items = items;
    locals.low = low;
    locals.high = high;
    locals.less = less;
    locals.op_own_ptr = (quicksort_OWN_DEFN*) CUR_PROC_VAR.proc->op_owns;
        if (locals.op_own_ptr->quicksort_own_init == 0) {
        add_parm_info_type(0, locals.op_own_ptr->t_ops, array_of_t_reqs);
        find_type_instance(array_ops, 1, &array_ownreqs, &(locals.op_own_ptr->array_of_t_ops));
        add_parm_info_type(0, locals.op_own_ptr->t_ops, sisort_of_t_reqs);
        find_prociter_instance(sisort, 1, &sisort_ownreqs, &(locals.op_own_ptr->sisort_of_t_ops));
        add_parm_info_type(0, locals.op_own_ptr->t_ops, qsort_of_t_reqs);
        find_prociter_instance(qsort, 1, &qsort_ownreqs, &(locals.op_own_ptr->qsort_of_t_ops));
        }
        if (locals.op_own_ptr->quicksort_own_init == 0) {
        locals.op_own_ptr->quicksort_own_init = 1;
    }
    enter_proc(18);

  LINE(23);
    {
        {CLUREF T_1_1;
        locals.err = intOPsub(locals.high, locals.low, &T_1_1);
        if (locals.err != ERR_ok) goto ex_0;
        locals.size.num = T_1_1.num;
        }
        }

  LINE(25);
    {
    CLUREF T_1_1;
    T_1_1.num = (locals.size.num > 0)? true : false;
    if (T_1_1.num == true) {

  LINE(26);
        {
        CLUREF T_3_1;
        T_3_1.num = (locals.size.num < 10)? true : false;
        if (T_3_1.num == true) {

  LINE(27);
            {
            generic_CLU_proc.type_owns = 0;
            generic_CLU_proc.op_owns = (int)locals.op_own_ptr->sisort_of_t_ops->op_owns;
            generic_CLU_proc.proc = sisort;
            CUR_PROC_VAR.proc = &generic_CLU_proc;
            locals.err = sisort(locals.items, locals.low, locals.high, locals.less);
            if (locals.err != ERR_ok) goto ex_1;
            }
            }
        else {

  LINE(28);
            {
            generic_CLU_proc.type_owns = 0;
            generic_CLU_proc.op_owns = (int)locals.op_own_ptr->qsort_of_t_ops->op_owns;
            generic_CLU_proc.proc = qsort;
            CUR_PROC_VAR.proc = &generic_CLU_proc;
            locals.err = qsort(locals.items, locals.low, locals.high, locals.size, locals.less);
            if (locals.err != ERR_ok) goto ex_1;
            }
            }}/* end if */
        goto end_1;
        ex_1:
            if (locals.err == ERR_bounds) {signal(ERR_bounds);}
            else {
                goto ex_0;}
        end_1:;
        }
    else {
    CLUREF T_1_2;
    CLUREF T_1_3;
    T_1_2.num = -1;
    T_1_3.num = (locals.size.num < T_1_2.num)? true : false;
    if (T_1_3.num == true) {

  LINE(32);
        {
        {signal (ERR_bounds);}}
        }
        }}/* end if */
    goto end_0;
    ex_0:
        {
            if (locals.err == ERR_failure) {signal(ERR_failure);}
            elist[0] = _pclu_erstr(locals.err);
            {signal(ERR_failure);}
        }
    end_0: {signal(ERR_ok);}
    }

/**** END PROCEDURE quicksort ****/

typedef struct {
    int hdr;
    int count;
    char *name;
    char *fname;
    bool is_iter;
    int is_parmd;
    int addr;
    int nargs;
    Vlist0 *vals;
    siglist1 *sigs;
    Vlist8 *locals;
    Vlist0 *owns;
    Vlist0 *ptowns;
    Vlist11 *popowns;
    Slist0 *type_formals;
    Slist1 *op_formals;
    } dbg_info_quicksort_actual;
static Vlist0 vals_quicksort = {0, 0};
static sig_desc0 sig_quicksort_1 = {0, 3, "bounds", {0, 0
}};
static siglist1 sigs_quicksort = {0, 1, (sig_desc*)&sig_quicksort_1};
static Vlist8 locals_quicksort = {0, 8,{ {0, 2, "err", &int_ops},  {0, 2, "ecode2", &int_ops},  {0, 2, "op_own_ptr", &int_ops},  {0, 2, "size", &int_ops},  {0, 2, "items", zero_ops, "array_of_t_ops"},  {0, 2, "low", &int_ops},  {0, 2, "high", &int_ops},  {0, 2, "less", m1_ops}}
};
static Vlist11 popowns_quicksort = {0, 11,{ {0, 2, "quicksort_init", &int_ops}
, {0, 2, "t_ops", &NULL_OPS}, {0, 2, "array_of_t_table", &NULL_OPS}, {0, 2, "array_of_t_ops", &NULL_OPS}, {0, 2, "array_of_t_owns", &NULL_OPS}, {0, 2, "sisort_of_t_table", &NULL_OPS}, {0, 2, "sisort_of_t_ops", &NULL_OPS}, {0, 2, "sisort_of_t_owns", &NULL_OPS}, {0, 2, "qsort_of_t_table", &NULL_OPS}, {0, 2, "qsort_of_t_ops", &NULL_OPS}, {0, 2, "qsort_of_t_owns", &NULL_OPS}}};
Slist0 tformals_quicksort = {0, 0};
Slist1 opformals_quicksort = {0, 1, "t"};
dbg_info_quicksort_actual dbg_info_quicksort_data = {0, 12, 
    "quicksort", "/common/pub/dcurtis-temp/pclu/lib/clu/quicksort.clu", 0, 1, (int)quicksort, 4, 
    &vals_quicksort, &sigs_quicksort, &locals_quicksort, &NO_VALS, &NO_VALS, &popowns_quicksort, &NO_PARMS, &opformals_quicksort};
    struct dbg_info *dbg_info_quicksort = (struct dbg_info*)&dbg_info_quicksort_data;

extern struct dbg_info* dbg_info_qsort;
#undef MY_TRACE_FLAG
#define MY_TRACE_FLAG qsort_TRACE
int qsort_TRACE;
static Vlist0 owns_qsort = {0, 0};

typedef struct {
int count;
} qsort_of_t_REQS;

qsort_of_t_REQS qsort_of_t_reqs_actual = {0};

struct REQS * qsort_of_t_reqs = (struct REQS *)&qsort_of_t_reqs_actual;


typedef struct {
    int count;
    OWNPTR type_owns;
    OWNPTR op_owns;
    } qsort_of_t_OPS;

extern errcode intOPdiv();
extern errcode intOPadd();
extern errcode arrayOPfetch();
extern errcode boolOPnot();
extern errcode arrayOPstore();
extern errcode intOPequal();

typedef struct {
    int qsort_own_init;
    qsort_of_t_OPS *t_ops;
    struct OPS *array_of_t_table;
    struct OPS *array_of_t_ops;
    OWNPTR array_of_t_owns;
    struct OPS *sisort_of_t_table;
    struct OPS *sisort_of_t_ops;
    OWNPTR sisort_of_t_owns;
    struct OPS *qsort_of_t_table;
    struct OPS *qsort_of_t_ops;
    OWNPTR qsort_of_t_owns;
    } qsort_OWN_DEFN;
OWN_req qsort_ownreqs = {sizeof(qsort_OWN_DEFN), 1};


/**** BEGIN PROCEDURE qsort ****/

errcode qsort(items, low, high, size, less)
CLUREF items;
CLUREF low;
CLUREF high;
CLUREF size;
CLUREF less;
    {
    struct {
        struct dbg_info *DBG_INFO;
        int DBG_LINE;
        errcode err;
        errcode ecode2;
        qsort_OWN_DEFN *op_own_ptr;
        CLUREF temp;
        CLUREF median;
        CLUREF miditem;
        CLUREF left;
        CLUREF right;
        CLUREF smlsize;
        CLUREF items;
        CLUREF low;
        CLUREF high;
        CLUREF size;
        CLUREF less;
        } locals;
    locals.temp.num = UNINIT;
    locals.median.num = UNINIT;
    locals.miditem.num = UNINIT;
    locals.left.num = UNINIT;
    locals.right.num = UNINIT;
    locals.smlsize.num = UNINIT;
    locals.items.num = UNINIT;
    locals.low.num = UNINIT;
    locals.high.num = UNINIT;
    locals.size.num = UNINIT;
    locals.less.num = UNINIT;
    locals.DBG_INFO = dbg_info_qsort;
    locals.items = items;
    locals.low = low;
    locals.high = high;
    locals.size = size;
    locals.less = less;
    locals.op_own_ptr = (qsort_OWN_DEFN*) CUR_PROC_VAR.proc->op_owns;
        if (locals.op_own_ptr->qsort_own_init == 0) {
        add_parm_info_type(0, locals.op_own_ptr->t_ops, array_of_t_reqs);
        find_type_instance(array_ops, 1, &array_ownreqs, &(locals.op_own_ptr->array_of_t_ops));
        add_parm_info_type(0, locals.op_own_ptr->t_ops, sisort_of_t_reqs);
        find_prociter_instance(sisort, 1, &sisort_ownreqs, &(locals.op_own_ptr->sisort_of_t_ops));
        add_parm_info_type(0, locals.op_own_ptr->t_ops, qsort_of_t_reqs);
        find_prociter_instance(qsort, 1, &qsort_ownreqs, &(locals.op_own_ptr->qsort_of_t_ops));
        }
        if (locals.op_own_ptr->qsort_own_init == 0) {
        locals.op_own_ptr->qsort_own_init = 1;
    }
    enter_proc(39);

  LINE(43);
    locals.temp.num = UNINIT;

  LINE(44);
    {

  LINE(45);
        for (;;) {
            CLUREF T_3_1;
            T_3_1.num = (10 < locals.size.num)? true : false;
            if (T_3_1.num != true) { break; }

  LINE(47);
            {
                {CLUREF T_4_1;
                CLUREF T_4_2;
                locals.err = intOPadd(locals.low, locals.high, &T_4_1);
                if (locals.err != ERR_ok) goto ex_1;
                locals.err = intOPdiv(T_4_1, CLU_2, &T_4_2);
                if (locals.err != ERR_ok) goto ex_1;
                locals.median.num = T_4_2.num;
                }
                }

  LINE(50);
            {
            CLUREF T_4_1;
            CLUREF T_4_2;
            CLUREF T_4_3;
            locals.err = arrayOPfetch(locals.items, locals.low, &T_4_1);
            if (locals.err != ERR_ok) goto ex_1;
            locals.err = arrayOPfetch(locals.items, locals.median, &T_4_2);
            if (locals.err != ERR_ok) goto ex_1;
            CUR_PROC_VAR = locals.less;
            locals.err = locals.less.proc->proc(T_4_1, T_4_2, &T_4_3);
            if (locals.err != ERR_ok) goto ex_1;
            if (T_4_3.num == true) {

  LINE(51);
                {
                CLUREF T_5_1;
                CLUREF T_5_2;
                CLUREF T_5_3;
                CLUREF T_5_4;
                locals.err = arrayOPfetch(locals.items, locals.median, &T_5_1);
                if (locals.err != ERR_ok) goto ex_1;
                locals.err = arrayOPfetch(locals.items, locals.high, &T_5_2);
                if (locals.err != ERR_ok) goto ex_1;
                CUR_PROC_VAR = locals.less;
                locals.err = locals.less.proc->proc(T_5_1, T_5_2, &T_5_3);
                if (locals.err != ERR_ok) goto ex_1;
                T_5_4.num = T_5_3.num ^ 1;
                if (T_5_4.num == true) {

  LINE(53);
                    {
                    CLUREF T_6_1;
                    locals.err = arrayOPfetch(locals.items, locals.median, &T_6_1);
                    if (locals.err != ERR_ok) goto ex_1;
                    locals.temp.num = T_6_1.num;
                    }

  LINE(54);
                    {
                    CLUREF T_6_1;
                    locals.err = arrayOPfetch(locals.items, locals.high, &T_6_1);
                    if (locals.err != ERR_ok) goto ex_1;
                    locals.err = arrayOPstore(locals.items, locals.median, T_6_1);
                    if (locals.err != ERR_ok) goto ex_1;
                    }

  LINE(55);
                    {
                    locals.err = arrayOPstore(locals.items, locals.high, locals.temp);
                    if (locals.err != ERR_ok) goto ex_1;
                    }

  LINE(56);
                    {
                    CLUREF T_6_1;
                    CLUREF T_6_2;
                    CLUREF T_6_3;
                    CLUREF T_6_4;
                    locals.err = arrayOPfetch(locals.items, locals.low, &T_6_1);
                    if (locals.err != ERR_ok) goto ex_1;
                    locals.err = arrayOPfetch(locals.items, locals.median, &T_6_2);
                    if (locals.err != ERR_ok) goto ex_1;
                    CUR_PROC_VAR = locals.less;
                    locals.err = locals.less.proc->proc(T_6_1, T_6_2, &T_6_3);
                    if (locals.err != ERR_ok) goto ex_1;
                    T_6_4.num = T_6_3.num ^ 1;
                    if (T_6_4.num == true) {

  LINE(58);
                        {
                        CLUREF T_7_1;
                        locals.err = arrayOPfetch(locals.items, locals.low, &T_7_1);
                        if (locals.err != ERR_ok) goto ex_1;
                        locals.temp.num = T_7_1.num;
                        }

  LINE(59);
                        {
                        CLUREF T_7_1;
                        locals.err = arrayOPfetch(locals.items, locals.median, &T_7_1);
                        if (locals.err != ERR_ok) goto ex_1;
                        locals.err = arrayOPstore(locals.items, locals.low, T_7_1);
                        if (locals.err != ERR_ok) goto ex_1;
                        }

  LINE(60);
                        {
                        locals.err = arrayOPstore(locals.items, locals.median, locals.temp);
                        if (locals.err != ERR_ok) goto ex_1;
                        }
                        }
                        }/* end if */
                    }
                    }/* end if */
                }
            else {

  LINE(63);
                {
                CLUREF T_5_1;
                CLUREF T_5_2;
                CLUREF T_5_3;
                locals.err = arrayOPfetch(locals.items, locals.median, &T_5_1);
                if (locals.err != ERR_ok) goto ex_1;
                locals.err = arrayOPfetch(locals.items, locals.high, &T_5_2);
                if (locals.err != ERR_ok) goto ex_1;
                CUR_PROC_VAR = locals.less;
                locals.err = locals.less.proc->proc(T_5_1, T_5_2, &T_5_3);
                if (locals.err != ERR_ok) goto ex_1;
                if (T_5_3.num == true) {

  LINE(65);
                    {
                    CLUREF T_6_1;
                    locals.err = arrayOPfetch(locals.items, locals.low, &T_6_1);
                    if (locals.err != ERR_ok) goto ex_1;
                    locals.temp.num = T_6_1.num;
                    }

  LINE(66);
                    {
                    CLUREF T_6_1;
                    locals.err = arrayOPfetch(locals.items, locals.median, &T_6_1);
                    if (locals.err != ERR_ok) goto ex_1;
                    locals.err = arrayOPstore(locals.items, locals.low, T_6_1);
                    if (locals.err != ERR_ok) goto ex_1;
                    }

  LINE(67);
                    {
                    locals.err = arrayOPstore(locals.items, locals.median, locals.temp);
                    if (locals.err != ERR_ok) goto ex_1;
                    }

  LINE(68);
                    {
                    CLUREF T_6_1;
                    CLUREF T_6_2;
                    CLUREF T_6_3;
                    CLUREF T_6_4;
                    locals.err = arrayOPfetch(locals.items, locals.median, &T_6_1);
                    if (locals.err != ERR_ok) goto ex_1;
                    locals.err = arrayOPfetch(locals.items, locals.high, &T_6_2);
                    if (locals.err != ERR_ok) goto ex_1;
                    CUR_PROC_VAR = locals.less;
                    locals.err = locals.less.proc->proc(T_6_1, T_6_2, &T_6_3);
                    if (locals.err != ERR_ok) goto ex_1;
                    T_6_4.num = T_6_3.num ^ 1;
                    if (T_6_4.num == true) {

  LINE(70);
                        {
                        CLUREF T_7_1;
                        locals.err = arrayOPfetch(locals.items, locals.median, &T_7_1);
                        if (locals.err != ERR_ok) goto ex_1;
                        locals.temp.num = T_7_1.num;
                        }

  LINE(71);
                        {
                        CLUREF T_7_1;
                        locals.err = arrayOPfetch(locals.items, locals.high, &T_7_1);
                        if (locals.err != ERR_ok) goto ex_1;
                        locals.err = arrayOPstore(locals.items, locals.median, T_7_1);
                        if (locals.err != ERR_ok) goto ex_1;
                        }

  LINE(72);
                        {
                        locals.err = arrayOPstore(locals.items, locals.high, locals.temp);
                        if (locals.err != ERR_ok) goto ex_1;
                        }
                        }
                        }/* end if */
                    }
                else {

  LINE(75);
                    {
                    CLUREF T_6_1;
                    locals.err = arrayOPfetch(locals.items, locals.low, &T_6_1);
                    if (locals.err != ERR_ok) goto ex_1;
                    locals.temp.num = T_6_1.num;
                    }

  LINE(76);
                    {
                    CLUREF T_6_1;
                    locals.err = arrayOPfetch(locals.items, locals.high, &T_6_1);
                    if (locals.err != ERR_ok) goto ex_1;
                    locals.err = arrayOPstore(locals.items, locals.low, T_6_1);
                    if (locals.err != ERR_ok) goto ex_1;
                    }

  LINE(77);
                    {
                    locals.err = arrayOPstore(locals.items, locals.high, locals.temp);
                    if (locals.err != ERR_ok) goto ex_1;
                    }
                    }}/* end if */
                }}/* end if */

  LINE(82);
            {
                {CLUREF T_4_1;
                locals.err = arrayOPfetch(locals.items, locals.median, &T_4_1);
                if (locals.err != ERR_ok) goto ex_1;
                locals.miditem.num = T_4_1.num;
                }
                }

  LINE(84);
            {
                {locals.left.num = locals.low.num;
                }
                }

  LINE(85);
            {
                {locals.right.num = locals.high.num;
                }
                }

  LINE(87);
            for (;;) {
                CLUREF T_4_1;
                T_4_1.num = (locals.left.num < locals.right.num)? true : false;
                if (T_4_1.num != true) { break; }

  LINE(89);
                {
                CLUREF T_5_1;
                locals.err = intOPadd(locals.left, CLU_1, &T_5_1);
                if (locals.err != ERR_ok) goto ex_1;
                locals.left.num = T_5_1.num;
                }

  LINE(90);
                for (;;) {
                    CLUREF T_5_1;
                    CLUREF T_5_2;
                    locals.err = arrayOPfetch(locals.items, locals.left, &T_5_1);
                    if (locals.err != ERR_ok) goto ex_1;
                    CUR_PROC_VAR = locals.less;
                    locals.err = locals.less.proc->proc(T_5_1, locals.miditem, &T_5_2);
                    if (locals.err != ERR_ok) goto ex_1;
                    if (T_5_2.num != true) { break; }
                    {
                    CLUREF T_6_1;
                    locals.err = intOPadd(locals.left, CLU_1, &T_6_1);
                    if (locals.err != ERR_ok) goto ex_1;
                    locals.left.num = T_6_1.num;
                    }
                    }
                    end_while_3:;

  LINE(92);
                {
                CLUREF T_5_1;
                locals.err = intOPsub(locals.right, CLU_1, &T_5_1);
                if (locals.err != ERR_ok) goto ex_1;
                locals.right.num = T_5_1.num;
                }

  LINE(93);
                for (;;) {
                    CLUREF T_5_1;
                    CLUREF T_5_2;
                    locals.err = arrayOPfetch(locals.items, locals.right, &T_5_1);
                    if (locals.err != ERR_ok) goto ex_1;
                    CUR_PROC_VAR = locals.less;
                    locals.err = locals.less.proc->proc(locals.miditem, T_5_1, &T_5_2);
                    if (locals.err != ERR_ok) goto ex_1;
                    if (T_5_2.num != true) { break; }
                    {
                    CLUREF T_6_1;
                    locals.err = intOPsub(locals.right, CLU_1, &T_6_1);
                    if (locals.err != ERR_ok) goto ex_1;
                    locals.right.num = T_6_1.num;
                    }
                    }
                    end_while_4:;

  LINE(95);
                {
                CLUREF T_5_1;
                T_5_1.num = (locals.left.num < locals.right.num)? true : false;
                if (T_5_1.num == true) {

  LINE(96);
                    {
                    CLUREF T_6_1;
                    locals.err = arrayOPfetch(locals.items, locals.left, &T_6_1);
                    if (locals.err != ERR_ok) goto ex_1;
                    locals.temp.num = T_6_1.num;
                    }

  LINE(97);
                    {
                    CLUREF T_6_1;
                    locals.err = arrayOPfetch(locals.items, locals.right, &T_6_1);
                    if (locals.err != ERR_ok) goto ex_1;
                    locals.err = arrayOPstore(locals.items, locals.left, T_6_1);
                    if (locals.err != ERR_ok) goto ex_1;
                    }

  LINE(98);
                    {
                    locals.err = arrayOPstore(locals.items, locals.right, locals.temp);
                    if (locals.err != ERR_ok) goto ex_1;
                    }
                    }
                    }/* end if */
                }
                end_while_2:;

  LINE(103);
            {
            CLUREF T_4_1;
            locals.err = intOPadd(locals.right, CLU_1, &T_4_1);
            if (locals.err != ERR_ok) goto ex_1;
            locals.left.num = T_4_1.num;
            }

  LINE(106);
            {
            CLUREF T_4_1;
            locals.err = intOPsub(locals.high, locals.left, &T_4_1);
            if (locals.err != ERR_ok) goto ex_1;
            locals.size.num = T_4_1.num;
            }

  LINE(107);
            {
                {CLUREF T_4_1;
                locals.err = intOPsub(locals.right, locals.low, &T_4_1);
                if (locals.err != ERR_ok) goto ex_1;
                locals.smlsize.num = T_4_1.num;
                }
                }

  LINE(109);
            {
            CLUREF T_4_1;
            T_4_1.num = (locals.smlsize.num < locals.size.num)? true : false;
            if (T_4_1.num == true) {

  LINE(110);
                {
                CLUREF T_5_1;
                T_5_1 = locals.low;
                locals.low.num = locals.left.num;
                locals.left.num = T_5_1.num;
                }
                }
            else {

  LINE(111);
                {
                CLUREF T_5_1;
                T_5_1 = locals.right;
                locals.right.num = locals.high.num;
                locals.high.num = T_5_1.num;
                }

  LINE(112);
                {
                CLUREF T_5_1;
                T_5_1 = locals.size;
                locals.size.num = locals.smlsize.num;
                locals.smlsize.num = T_5_1.num;
                }
                }}/* end if */

  LINE(118);
            {
            CLUREF T_4_1;
            CLUREF T_4_2;
            T_4_1.num = (locals.smlsize.num == 0)? true : false;
            T_4_2.num = T_4_1.num ^ 1;
            if (T_4_2.num == true) {

  LINE(119);
                {
                CLUREF T_5_1;
                T_5_1.num = (locals.smlsize.num < 10)? true : false;
                if (T_5_1.num == true) {

  LINE(120);
                    {
                    generic_CLU_proc.type_owns = 0;
                    generic_CLU_proc.op_owns = (int)locals.op_own_ptr->sisort_of_t_ops->op_owns;
                    generic_CLU_proc.proc = sisort;
                    CUR_PROC_VAR.proc = &generic_CLU_proc;
                    locals.err = sisort(locals.items, locals.left, locals.right, locals.less);
                    if (locals.err != ERR_ok) goto ex_1;
                    }
                    }
                else {

  LINE(121);
                    {
                    generic_CLU_proc.type_owns = 0;
                    generic_CLU_proc.op_owns = (int)locals.op_own_ptr->qsort_of_t_ops->op_owns;
                    generic_CLU_proc.proc = qsort;
                    CUR_PROC_VAR.proc = &generic_CLU_proc;
                    locals.err = qsort(locals.items, locals.left, locals.right, locals.smlsize, locals.less);
                    if (locals.err != ERR_ok) goto ex_1;
                    }
                    }}/* end if */
                }
                }/* end if */
            }
            end_while_1:;

  LINE(127);
        {
        generic_CLU_proc.type_owns = 0;
        generic_CLU_proc.op_owns = (int)locals.op_own_ptr->sisort_of_t_ops->op_owns;
        generic_CLU_proc.proc = sisort;
        CUR_PROC_VAR.proc = &generic_CLU_proc;
        locals.err = sisort(locals.items, locals.low, locals.high, locals.less);
        if (locals.err != ERR_ok) goto ex_1;
        }
        }
    goto end_1;
    ex_1:
        if (locals.err == ERR_bounds) {signal(ERR_bounds);}
        else {
            goto ex_0;}
    end_1:;
    goto end_0;
    ex_0:
        {
            if (locals.err == ERR_failure) {signal(ERR_failure);}
            elist[0] = _pclu_erstr(locals.err);
            {signal(ERR_failure);}
        }
    end_0: {signal(ERR_ok);}
    }

/**** END PROCEDURE qsort ****/

typedef struct {
    int hdr;
    int count;
    char *name;
    char *fname;
    bool is_iter;
    int is_parmd;
    int addr;
    int nargs;
    Vlist0 *vals;
    siglist1 *sigs;
    Vlist14 *locals;
    Vlist0 *owns;
    Vlist0 *ptowns;
    Vlist11 *popowns;
    Slist0 *type_formals;
    Slist1 *op_formals;
    } dbg_info_qsort_actual;
static Vlist0 vals_qsort = {0, 0};
static sig_desc0 sig_qsort_1 = {0, 3, "bounds", {0, 0
}};
static siglist1 sigs_qsort = {0, 1, (sig_desc*)&sig_qsort_1};
static Vlist14 locals_qsort = {0, 14,{ {0, 2, "err", &int_ops},  {0, 2, "ecode2", &int_ops},  {0, 2, "op_own_ptr", &int_ops},  {0, 2, "temp", zero_ops, "t_ops"},  {0, 2, "median", &int_ops},  {0, 2, "miditem", zero_ops, "t_ops"},  {0, 2, "left", &int_ops},  {0, 2, "right", &int_ops},  {0, 2, "smlsize", &int_ops},  {0, 2, "items", zero_ops, "array_of_t_ops"},  {0, 2, "low", &int_ops},  {0, 2, "high", &int_ops},  {0, 2, "size", &int_ops},  {0, 2, "less", m1_ops}}
};
static Vlist11 popowns_qsort = {0, 11,{ {0, 2, "qsort_init", &int_ops}
, {0, 2, "t_ops", &NULL_OPS}, {0, 2, "array_of_t_table", &NULL_OPS}, {0, 2, "array_of_t_ops", &NULL_OPS}, {0, 2, "array_of_t_owns", &NULL_OPS}, {0, 2, "sisort_of_t_table", &NULL_OPS}, {0, 2, "sisort_of_t_ops", &NULL_OPS}, {0, 2, "sisort_of_t_owns", &NULL_OPS}, {0, 2, "qsort_of_t_table", &NULL_OPS}, {0, 2, "qsort_of_t_ops", &NULL_OPS}, {0, 2, "qsort_of_t_owns", &NULL_OPS}}};
Slist0 tformals_qsort = {0, 0};
Slist1 opformals_qsort = {0, 1, "t"};
dbg_info_qsort_actual dbg_info_qsort_data = {0, 12, 
    "qsort", "/common/pub/dcurtis-temp/pclu/lib/clu/quicksort.clu", 0, 1, (int)qsort, 5, 
    &vals_qsort, &sigs_qsort, &locals_qsort, &NO_VALS, &NO_VALS, &popowns_qsort, &NO_PARMS, &opformals_qsort};
    struct dbg_info *dbg_info_qsort = (struct dbg_info*)&dbg_info_qsort_data;

extern struct dbg_info* dbg_info_sisort;
#undef MY_TRACE_FLAG
#define MY_TRACE_FLAG sisort_TRACE
int sisort_TRACE;
static Vlist0 owns_sisort = {0, 0};

typedef struct {
int count;
} sisort_of_t_REQS;

sisort_of_t_REQS sisort_of_t_reqs_actual = {0};

struct REQS * sisort_of_t_reqs = (struct REQS *)&sisort_of_t_reqs_actual;


typedef struct {
    int count;
    OWNPTR type_owns;
    OWNPTR op_owns;
    } sisort_of_t_OPS;

extern errcode sisort_IB_1();
extern errcode intOPfrom_to();
extern errcode intOPle();

typedef struct {
    int sisort_own_init;
    sisort_of_t_OPS *t_ops;
    struct OPS *array_of_t_table;
    struct OPS *array_of_t_ops;
    OWNPTR array_of_t_owns;
    } sisort_OWN_DEFN;
OWN_req sisort_ownreqs = {sizeof(sisort_OWN_DEFN), 1};


/**** BEGIN PROCEDURE sisort ****/

errcode sisort(items, low, high, less)
CLUREF items;
CLUREF low;
CLUREF high;
CLUREF less;
    {
    struct {
        struct dbg_info *DBG_INFO;
        int DBG_LINE;
        errcode err;
        errcode ecode2;
        sisort_OWN_DEFN *op_own_ptr;
        CLUREF top;
        CLUREF item;
        CLUREF hole;
        CLUREF trial;
        CLUREF items;
        CLUREF low;
        CLUREF high;
        CLUREF less;
        } locals;
    locals.top.num = UNINIT;
    locals.item.num = UNINIT;
    locals.hole.num = UNINIT;
    locals.trial.num = UNINIT;
    locals.items.num = UNINIT;
    locals.low.num = UNINIT;
    locals.high.num = UNINIT;
    locals.less.num = UNINIT;
    locals.DBG_INFO = dbg_info_sisort;
    locals.items = items;
    locals.low = low;
    locals.high = high;
    locals.less = less;
    locals.op_own_ptr = (sisort_OWN_DEFN*) CUR_PROC_VAR.proc->op_owns;
        if (locals.op_own_ptr->sisort_own_init == 0) {
        add_parm_info_type(0, locals.op_own_ptr->t_ops, array_of_t_reqs);
        find_type_instance(array_ops, 1, &array_ownreqs, &(locals.op_own_ptr->array_of_t_ops));
        }
        if (locals.op_own_ptr->sisort_own_init == 0) {
        locals.op_own_ptr->sisort_own_init = 1;
    }
    enter_proc(136);

  LINE(141);
    {
        CLUREF T_2_1;
        locals.err = intOPadd(locals.low, CLU_1, &T_2_1);
        if (locals.err != ERR_ok) goto ex_1;
        locals.err = intOPfrom_to(T_2_1, locals.high, sisort_IB_1, &locals, &locals.ecode2);
        if (locals.err == ERR_iterbodyreturn) {
        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_1;
        }
    goto end_1;
    ex_1:
        if (locals.err == ERR_bounds) {signal(ERR_bounds);}
        else {
            goto ex_0;}
    end_1:;
    goto end_0;
    ex_0:
        {
            if (locals.err == ERR_failure) {signal(ERR_failure);}
            elist[0] = _pclu_erstr(locals.err);
            {signal(ERR_failure);}
        }
    end_0: {signal(ERR_ok);}
    }

/**** END PROCEDURE sisort ****/

typedef struct {
    int hdr;
    int count;
    char *name;
    char *fname;
    bool is_iter;
    int is_parmd;
    int addr;
    int nargs;
    Vlist0 *vals;
    siglist1 *sigs;
    Vlist11 *locals;
    Vlist0 *owns;
    Vlist0 *ptowns;
    Vlist5 *popowns;
    Slist0 *type_formals;
    Slist1 *op_formals;
    } dbg_info_sisort_actual;
static Vlist0 vals_sisort = {0, 0};
static sig_desc0 sig_sisort_1 = {0, 3, "bounds", {0, 0
}};
static siglist1 sigs_sisort = {0, 1, (sig_desc*)&sig_sisort_1};
static Vlist11 locals_sisort = {0, 11,{ {0, 2, "err", &int_ops},  {0, 2, "ecode2", &int_ops},  {0, 2, "op_own_ptr", &int_ops},  {0, 2, "top", &int_ops},  {0, 2, "item", zero_ops, "t_ops"},  {0, 2, "hole", &int_ops},  {0, 2, "trial", &int_ops},  {0, 2, "items", zero_ops, "array_of_t_ops"},  {0, 2, "low", &int_ops},  {0, 2, "high", &int_ops},  {0, 2, "less", m1_ops}}
};
static Vlist5 popowns_sisort = {0, 5,{ {0, 2, "sisort_init", &int_ops}
, {0, 2, "t_ops", &NULL_OPS}, {0, 2, "array_of_t_table", &NULL_OPS}, {0, 2, "array_of_t_ops", &NULL_OPS}, {0, 2, "array_of_t_owns", &NULL_OPS}}};
Slist0 tformals_sisort = {0, 0};
Slist1 opformals_sisort = {0, 1, "t"};
dbg_info_sisort_actual dbg_info_sisort_data = {0, 12, 
    "sisort", "/common/pub/dcurtis-temp/pclu/lib/clu/quicksort.clu", 0, 1, (int)sisort, 4, 
    &vals_sisort, &sigs_sisort, &locals_sisort, &NO_VALS, &NO_VALS, &popowns_sisort, &NO_PARMS, &opformals_sisort};
    struct dbg_info *dbg_info_sisort = (struct dbg_info*)&dbg_info_sisort_data;

/**** BEGIN ITERATOR BODIES for sisort ****/

errcode sisort_IB_1(iv_1, locals, iecode)
errcode *iecode;
CLUREF iv_1;
struct {
    struct dbg_info *DBG_INFO;
    int DBG_LINE;
    errcode err;
    errcode ecode2;
sisort_OWN_DEFN *op_own_ptr;
    CLUREF top;
    CLUREF item;
    CLUREF hole;
    CLUREF trial;
    CLUREF items;
    CLUREF low;
    CLUREF high;
    CLUREF less;
    } *locals;
{
    locals->top.num = iv_1.num;
    enter_iter_body_proc(143);

  FB_LINE(143);
    {
        {CLUREF T_1_1;
        locals->err = arrayOPfetch(locals->items, locals->top, &T_1_1);
        if (locals->err != ERR_ok) goto ex_0;
        locals->item.num = T_1_1.num;
        }
        }

  FB_LINE(145);
    {
        {locals->hole.num = locals->top.num;
        }
        }

  FB_LINE(146);
    {
        {CLUREF T_1_1;
        locals->err = intOPsub(locals->top, CLU_1, &T_1_1);
        if (locals->err != ERR_ok) goto ex_0;
        locals->trial.num = T_1_1.num;
        }
        }

  FB_LINE(148);
    for (;;) {
        CLUREF T_1_1;
        CLUREF T_1_2;
        CLUREF T_1_3;
        CLUREF T_1_4;
        T_1_2.num = (locals->low.num <= locals->trial.num)? true : false;
        T_1_1.num = T_1_2.num;
        if (T_1_2.num) {
            locals->err = arrayOPfetch(locals->items, locals->trial, &T_1_3);
            if (locals->err != ERR_ok) goto ex_0;
            CUR_PROC_VAR = locals->less;
            locals->err = locals->less.proc->proc(locals->item, T_1_3, &T_1_4);
            if (locals->err != ERR_ok) goto ex_0;
            T_1_1.num = T_1_4.num;
        }
        if (T_1_1.num != true) { break; }

  FB_LINE(152);
        {
        CLUREF T_2_1;
        locals->err = arrayOPfetch(locals->items, locals->trial, &T_2_1);
        if (locals->err != ERR_ok) goto ex_0;
        locals->err = arrayOPstore(locals->items, locals->hole, T_2_1);
        if (locals->err != ERR_ok) goto ex_0;
        }

  FB_LINE(153);
        {
        locals->hole.num = locals->trial.num;
        }

  FB_LINE(154);
        {
        CLUREF T_2_1;
        locals->err = intOPsub(locals->trial, CLU_1, &T_2_1);
        if (locals->err != ERR_ok) goto ex_0;
        locals->trial.num = T_2_1.num;
        }
        }
        end_while_1:;

  FB_LINE(158);
    {
    locals->err = arrayOPstore(locals->items, locals->hole, locals->item);
    if (locals->err != ERR_ok) goto ex_0;
    }
    {signal(ERR_ok);}
    ex_0:
        {
            *iecode = locals->err;
            {signal(ERR_iterbodyexit);}}
    end_0: {signal(ERR_ok);}
    }/* end sisort_IB_1 */

/**** END ITERATOR BODIES for sisort ****/

