2013-09-29 00:21:18 +04:00
|
|
|
/* j/6/cull.c
|
|
|
|
**
|
|
|
|
** This file is in the public domain.
|
|
|
|
*/
|
|
|
|
#include "all.h"
|
|
|
|
#include "../pit.h"
|
|
|
|
|
|
|
|
/* logic
|
|
|
|
*/
|
|
|
|
u2_noun
|
2014-08-21 01:18:34 +04:00
|
|
|
j2_mcx(Pt6, ut, cull)(u2_noun, u2_noun, u2_bean, u2_atom, u2_noun);
|
2013-09-29 00:21:18 +04:00
|
|
|
|
2014-04-22 05:22:11 +04:00
|
|
|
static u2_noun
|
2014-08-21 01:18:34 +04:00
|
|
|
_cull_in(
|
2013-09-29 00:21:18 +04:00
|
|
|
u2_noun van, // retain
|
|
|
|
u2_noun sut, // retain
|
|
|
|
u2_bean pol, // retain
|
|
|
|
u2_atom axe, // retain
|
|
|
|
u2_noun ref, // retain
|
|
|
|
u2_noun now, // retain
|
|
|
|
u2_noun lat, // retain
|
|
|
|
u2_noun vil) // retain
|
|
|
|
{
|
2013-12-26 21:12:07 +04:00
|
|
|
u2_noun ret, p_sut, q_sut;
|
2013-09-29 00:21:18 +04:00
|
|
|
|
2014-08-21 01:18:34 +04:00
|
|
|
if ( u2_no == u2du(sut) ) switch ( sut ) {
|
|
|
|
default: return u2_cm_bail(c3__fail);
|
2013-09-29 00:21:18 +04:00
|
|
|
|
|
|
|
case c3__noun: {
|
2014-09-03 07:36:29 +04:00
|
|
|
u2_noun pyr = u2_cqfu_repo(van, sut);
|
2014-08-21 01:18:34 +04:00
|
|
|
u2_noun yot = j2_mcx(Pt6, ut, cull)(van, pyr, pol, axe, ref);
|
2014-04-22 05:22:11 +04:00
|
|
|
|
2014-08-21 01:18:34 +04:00
|
|
|
if ( u2_yes == u2_cr_sing(pyr, yot) ) {
|
|
|
|
ret = u2k(sut);
|
2013-09-29 00:21:18 +04:00
|
|
|
} else {
|
2014-08-21 01:18:34 +04:00
|
|
|
ret = u2k(yot);
|
2013-09-29 00:21:18 +04:00
|
|
|
}
|
2014-08-21 01:18:34 +04:00
|
|
|
u2z(pyr);
|
|
|
|
u2z(yot);
|
2013-09-29 00:21:18 +04:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
case c3__void: {
|
|
|
|
ret = c3__void;
|
|
|
|
}
|
|
|
|
}
|
2014-08-21 01:18:34 +04:00
|
|
|
else switch ( u2h(sut) ) {
|
|
|
|
default: return u2_cm_bail(c3__fail);
|
2013-09-29 00:21:18 +04:00
|
|
|
|
|
|
|
case c3__atom: {
|
2014-04-22 05:22:11 +04:00
|
|
|
ret = c3__void;
|
2013-09-29 00:21:18 +04:00
|
|
|
break;
|
|
|
|
}
|
2014-08-21 01:18:34 +04:00
|
|
|
case c3__bull: u2_cx_cell(u2t(sut), &p_sut, &q_sut);
|
2013-12-26 21:12:07 +04:00
|
|
|
{
|
|
|
|
u2_noun hic = j2_mcx(Pt6, ut, cull)
|
2014-08-21 01:18:34 +04:00
|
|
|
(van, q_sut, pol, axe, ref);
|
2013-12-26 21:12:07 +04:00
|
|
|
|
2014-08-21 01:18:34 +04:00
|
|
|
if ( u2_yes == u2_cr_sing(hic, q_sut) ) {
|
|
|
|
ret = u2k(sut);
|
2013-12-26 21:12:07 +04:00
|
|
|
} else {
|
2014-09-03 07:36:29 +04:00
|
|
|
ret = u2_cqf_bull(p_sut, hic);
|
2013-12-26 21:12:07 +04:00
|
|
|
}
|
2014-08-21 01:18:34 +04:00
|
|
|
u2z(hic);
|
2013-12-26 21:12:07 +04:00
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
2014-08-21 01:18:34 +04:00
|
|
|
case c3__cell: u2_cx_cell(u2t(sut), &p_sut, &q_sut);
|
2013-09-29 00:21:18 +04:00
|
|
|
{
|
|
|
|
u2_noun hub;
|
|
|
|
|
2014-08-21 01:18:34 +04:00
|
|
|
if ( 2 == now ) {
|
|
|
|
hub = j2_mcx(Pt6, ut, cull)(van, p_sut, pol, lat, ref);
|
2014-09-03 07:36:29 +04:00
|
|
|
ret = u2_cqf_cell(hub, q_sut);
|
2013-09-29 00:21:18 +04:00
|
|
|
} else {
|
2014-08-21 01:18:34 +04:00
|
|
|
hub = j2_mcx(Pt6, ut, cull)(van, q_sut, pol, lat, ref);
|
2014-09-03 07:36:29 +04:00
|
|
|
ret = u2_cqf_cell(p_sut, hub);
|
2013-09-29 00:21:18 +04:00
|
|
|
}
|
2014-08-21 01:18:34 +04:00
|
|
|
u2z(hub);
|
2013-09-29 00:21:18 +04:00
|
|
|
break;
|
|
|
|
}
|
2014-08-21 01:18:34 +04:00
|
|
|
case c3__core: u2_cx_cell(u2t(sut), &p_sut, &q_sut);
|
2013-09-29 00:21:18 +04:00
|
|
|
{
|
2014-08-21 01:18:34 +04:00
|
|
|
if ( 3 != now ) {
|
|
|
|
ret = u2k(sut);
|
2013-09-29 00:21:18 +04:00
|
|
|
} else {
|
|
|
|
u2_noun hub = j2_mcx(Pt6, ut, cull)
|
2014-08-21 01:18:34 +04:00
|
|
|
(van, p_sut, pol, lat, ref);
|
2013-09-29 00:21:18 +04:00
|
|
|
|
2014-09-03 07:36:29 +04:00
|
|
|
ret = u2_cqf_core(hub, q_sut);
|
2013-09-29 00:21:18 +04:00
|
|
|
|
2014-08-21 01:18:34 +04:00
|
|
|
u2z(hub);
|
2013-09-29 00:21:18 +04:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
2014-08-21 01:18:34 +04:00
|
|
|
case c3__face: u2_cx_cell(u2t(sut), &p_sut, &q_sut);
|
2013-09-29 00:21:18 +04:00
|
|
|
{
|
|
|
|
u2_noun hic = j2_mcx(Pt6, ut, cull)
|
2014-08-21 01:18:34 +04:00
|
|
|
(van, q_sut, pol, axe, ref);
|
2013-09-29 00:21:18 +04:00
|
|
|
|
2014-08-21 01:18:34 +04:00
|
|
|
if ( u2_yes == u2_cr_sing(hic, q_sut) ) {
|
|
|
|
ret = u2k(sut);
|
2013-09-29 00:21:18 +04:00
|
|
|
} else {
|
2014-09-03 07:36:29 +04:00
|
|
|
ret = u2_cqf_face(p_sut, hic);
|
2013-09-29 00:21:18 +04:00
|
|
|
}
|
2014-08-21 01:18:34 +04:00
|
|
|
u2z(hic);
|
2013-09-29 00:21:18 +04:00
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
2014-08-21 01:18:34 +04:00
|
|
|
case c3__fork: u2_cx_cell(u2t(sut), &p_sut, &q_sut);
|
2013-09-29 00:21:18 +04:00
|
|
|
{
|
2014-09-03 07:36:29 +04:00
|
|
|
if ( u2_yes == u2_cqdi_has(vil, sut) ) {
|
2013-09-29 00:21:18 +04:00
|
|
|
return c3__void;
|
|
|
|
} else {
|
2014-09-03 07:36:29 +04:00
|
|
|
u2_noun zoc = u2_cqdi_put(vil, sut);
|
2013-09-29 00:21:18 +04:00
|
|
|
u2_noun sin = _cull_in
|
2014-08-21 01:18:34 +04:00
|
|
|
(van, p_sut, pol, axe, ref, now, lat, zoc);
|
2013-09-29 00:21:18 +04:00
|
|
|
u2_noun dex = _cull_in
|
2014-08-21 01:18:34 +04:00
|
|
|
(van, q_sut, pol, axe, ref, now, lat, zoc);
|
2014-04-22 05:22:11 +04:00
|
|
|
|
2014-09-03 07:36:29 +04:00
|
|
|
ret = u2_cqf_fork(sin, dex);
|
2014-08-21 01:18:34 +04:00
|
|
|
u2z(sin);
|
|
|
|
u2z(dex);
|
|
|
|
u2z(zoc);
|
2013-09-29 00:21:18 +04:00
|
|
|
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
}
|
2014-04-22 05:22:11 +04:00
|
|
|
case c3__cube:
|
|
|
|
case c3__hold:
|
2013-09-29 00:21:18 +04:00
|
|
|
{
|
2014-09-03 07:36:29 +04:00
|
|
|
u2_noun pyr = u2_cqfu_repo(van, sut);
|
2014-08-21 01:18:34 +04:00
|
|
|
u2_noun yot = _cull_in(van, pyr, pol, axe, ref, now, lat, vil);
|
2013-09-29 00:21:18 +04:00
|
|
|
|
2014-08-21 01:18:34 +04:00
|
|
|
if ( u2_yes == u2_cr_sing(pyr, yot) ) {
|
2013-09-29 00:21:18 +04:00
|
|
|
if ( c3__void == pyr ) {
|
|
|
|
ret = c3__void;
|
|
|
|
}
|
2014-08-21 01:18:34 +04:00
|
|
|
else ret = u2k(sut);
|
2013-09-29 00:21:18 +04:00
|
|
|
} else {
|
2014-08-21 01:18:34 +04:00
|
|
|
ret = u2k(yot);
|
2013-09-29 00:21:18 +04:00
|
|
|
}
|
2014-08-21 01:18:34 +04:00
|
|
|
u2z(pyr);
|
|
|
|
u2z(yot);
|
2013-09-29 00:21:18 +04:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2014-08-21 01:18:34 +04:00
|
|
|
u2z(lat);
|
2013-09-29 00:21:18 +04:00
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
u2_noun // transfer
|
2014-08-21 01:18:34 +04:00
|
|
|
j2_mcx(Pt6, ut, cull)(
|
2013-09-29 00:21:18 +04:00
|
|
|
u2_noun van, // retain
|
|
|
|
u2_noun sut, // retain
|
|
|
|
u2_bean pol, // retain
|
|
|
|
u2_atom axe, // retain
|
|
|
|
u2_noun ref) // retain
|
|
|
|
{
|
2014-08-21 01:18:34 +04:00
|
|
|
if ( 1 == axe ) {
|
2013-09-29 00:21:18 +04:00
|
|
|
if ( u2_yes == pol ) {
|
2014-09-03 07:36:29 +04:00
|
|
|
return u2_cqfu_fuse(van, sut, ref);
|
2013-09-29 00:21:18 +04:00
|
|
|
} else {
|
2014-09-03 07:36:29 +04:00
|
|
|
return u2_cqfu_crop(van, sut, ref);
|
2013-09-29 00:21:18 +04:00
|
|
|
}
|
|
|
|
} else {
|
2014-09-03 07:36:29 +04:00
|
|
|
u2_atom now = u2_cqc_cap(axe);
|
|
|
|
u2_atom lat = u2_cqc_mas(axe);
|
2013-09-29 00:21:18 +04:00
|
|
|
|
2014-08-21 01:18:34 +04:00
|
|
|
return _cull_in(van, sut, pol, axe, ref, now, lat, u2_nul);
|
2013-09-29 00:21:18 +04:00
|
|
|
}
|
|
|
|
}
|
2014-04-22 05:22:11 +04:00
|
|
|
|
2013-09-29 00:21:18 +04:00
|
|
|
/* boilerplate
|
|
|
|
*/
|
2014-04-22 05:22:11 +04:00
|
|
|
u2_ho_jet
|
2013-09-29 00:21:18 +04:00
|
|
|
j2_mcj(Pt6, ut, cull)[];
|
|
|
|
|
|
|
|
u2_noun // transfer
|
2014-08-28 23:40:40 +04:00
|
|
|
j2_mc(Pt6, ut, cull)(u2_noun cor) // retain
|
2013-09-29 00:21:18 +04:00
|
|
|
{
|
|
|
|
u2_noun sut, axe, pol, ref, van;
|
|
|
|
|
2014-08-21 01:18:34 +04:00
|
|
|
if ( (u2_no == u2_cr_mean(cor, u2_cv_sam_2, &pol,
|
2014-04-22 05:22:11 +04:00
|
|
|
u2_cv_sam_6, &axe,
|
2013-09-29 00:21:18 +04:00
|
|
|
u2_cv_sam_7, &ref,
|
|
|
|
u2_cv_con, &van, 0)) ||
|
2014-08-21 01:18:34 +04:00
|
|
|
(u2_no == u2ud(axe)) ||
|
|
|
|
(u2_none == (sut = u2_cr_at(u2_cv_sam, van))) )
|
2013-09-29 00:21:18 +04:00
|
|
|
{
|
2014-08-21 01:18:34 +04:00
|
|
|
return u2_cm_bail(c3__fail);
|
2013-09-29 00:21:18 +04:00
|
|
|
} else {
|
2014-08-21 01:18:34 +04:00
|
|
|
return j2_mcx(Pt6, ut, cull)(van, sut, pol, axe, ref);
|
2013-09-29 00:21:18 +04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
u2_noun // transfer
|
2014-09-03 07:36:29 +04:00
|
|
|
u2_cqfu_cull(u2_noun van, // retain
|
2013-09-29 00:21:18 +04:00
|
|
|
u2_noun sut, // retain
|
|
|
|
u2_bean pol, // retain
|
|
|
|
u2_noun axe, // retain
|
|
|
|
u2_noun ref) // retain
|
|
|
|
{
|
2014-08-28 23:40:40 +04:00
|
|
|
c3_m fun_m = c3__cull;
|
|
|
|
u2_noun pro = u2_cz_find_4(fun_m, sut, pol, axe, ref);
|
2013-09-29 00:21:18 +04:00
|
|
|
|
2014-08-28 23:40:40 +04:00
|
|
|
if ( u2_none != pro ) {
|
|
|
|
return pro;
|
2013-09-29 00:21:18 +04:00
|
|
|
}
|
|
|
|
else {
|
2014-08-28 23:40:40 +04:00
|
|
|
pro = j2_mcx(Pt6, ut, cull)(van, sut, pol, axe, ref);
|
2013-09-29 00:21:18 +04:00
|
|
|
|
2014-08-28 23:40:40 +04:00
|
|
|
return u2_cz_save_4(fun_m, sut, pol, axe, ref, pro);
|
2013-09-29 00:21:18 +04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
u2_weak
|
2014-08-28 23:40:40 +04:00
|
|
|
j2_mck(Pt6, ut, cull)(u2_noun cor)
|
2013-09-29 00:21:18 +04:00
|
|
|
{
|
|
|
|
u2_noun sut, pol, axe, ref, van;
|
|
|
|
|
2014-08-21 01:18:34 +04:00
|
|
|
if ( (u2_no == u2_cr_mean(cor, u2_cv_sam_2, &pol,
|
2014-04-22 05:22:11 +04:00
|
|
|
u2_cv_sam_6, &axe,
|
2013-09-29 00:21:18 +04:00
|
|
|
u2_cv_sam_7, &ref,
|
2014-04-22 05:22:11 +04:00
|
|
|
u2_cv_con, &van,
|
2013-09-29 00:21:18 +04:00
|
|
|
0)) ||
|
|
|
|
(pol > 1) ||
|
2014-08-21 01:18:34 +04:00
|
|
|
(u2_none == (sut = u2_cr_at(u2_cv_sam, van))) )
|
2013-09-29 00:21:18 +04:00
|
|
|
{
|
|
|
|
return u2_none;
|
|
|
|
} else {
|
2014-08-21 01:18:34 +04:00
|
|
|
return u2nq
|
|
|
|
(u2k(sut), pol, u2k(axe), u2k(ref));
|
2013-09-29 00:21:18 +04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* structures
|
|
|
|
*/
|
2014-04-22 05:22:11 +04:00
|
|
|
u2_ho_jet
|
2013-09-29 00:21:18 +04:00
|
|
|
j2_mcj(Pt6, ut, cull)[] = {
|
2014-04-22 05:22:11 +04:00
|
|
|
{ ".2", c3__hevy,
|
|
|
|
j2_mc(Pt6, ut, cull),
|
2013-09-29 00:21:18 +04:00
|
|
|
Tier6_b_memo,
|
|
|
|
u2_none, u2_none,
|
|
|
|
j2_mck(Pt6, ut, cull), c3__cull,
|
|
|
|
},
|
|
|
|
{ }
|
|
|
|
};
|