1 /* j/6/loot.c
2 **
3 */
4 #include "all.h"
5 
6 
7 /* internals
8 */
9   static u3_noun
_loot_in(u3_noun cog,u3_noun dom,u3_atom axe)10   _loot_in(u3_noun cog,
11            u3_noun dom,
12            u3_atom axe)
13   {
14     if ( u3_nul == dom ) {
15       return u3_nul;
16     }
17     else {
18       u3_noun n_dom, l_dom, r_dom;
19 
20       u3r_trel(dom, &n_dom, &l_dom, &r_dom);
21       if ( c3n == u3du(n_dom) ) {
22         return u3m_bail(c3__fail);
23       }
24       else {
25         u3_noun qqn_dom = u3t(u3t(n_dom));
26         u3_noun yep = u3qf_look(cog, qqn_dom);
27 
28         if ( (u3_nul == l_dom) && (u3_nul == r_dom) ) {
29           if ( u3_nul == yep ) {
30             return u3_nul;
31           } else {
32             u3_noun u_yep = u3t(yep);
33             u3_noun pro;
34 
35             pro = u3nt(u3_nul, u3qc_peg(axe, u3h(u_yep)), u3k(u3t(u_yep)));
36             u3z(yep);
37             return pro;
38           }
39         }
40         else if ( (u3_nul == l_dom) ) {
41           if ( u3_nul == yep ) {
42             u3_noun nax = u3qc_peg(axe, 3);
43             u3_noun pro;
44 
45             pro = _loot_in(cog, r_dom, nax);
46             u3z(nax);
47             return pro;
48           }
49           else {
50             u3_noun u_yep = u3t(yep);
51             u3_noun nax   = u3qc_peg(axe, 2);
52             u3_noun pro;
53 
54             pro = u3nt(u3_nul, u3qc_peg(nax, u3h(u_yep)), u3k(u3t(u_yep)));
55             u3z(nax);
56             u3z(yep);
57             return pro;
58           }
59         }
60         else if ( (u3_nul == r_dom) ) {
61           if ( u3_nul == yep ) {
62             u3_noun nax = u3qc_peg(axe, 3);
63             u3_noun pro;
64 
65             pro = _loot_in(cog, l_dom, nax);
66             u3z(nax);
67             return pro;
68           }
69           else {
70             u3_noun u_yep = u3t(yep);
71             u3_noun nax   = u3qc_peg(axe, 2);
72             u3_noun pro;
73 
74             pro = u3nt(u3_nul, u3qc_peg(nax, u3h(u_yep)), u3k(u3t(u_yep)));
75             u3z(nax);
76             u3z(yep);
77             return pro;
78           }
79         }
80         else {
81           if ( u3_nul == yep ) {
82             u3_noun nax = u3qc_peg(axe, 6);
83             u3_noun pey;
84 
85             pey = _loot_in(cog, l_dom, nax);
86             u3z(nax);
87 
88             if ( u3_nul != pey ) {
89               return pey;
90             }
91             else {
92               u3_noun nax = u3qc_peg(axe, 7);
93               u3_noun pro;
94 
95               pro = _loot_in(cog, r_dom, nax);
96               u3z(nax);
97               return pro;
98             }
99           }
100           else {
101             u3_noun u_yep = u3t(yep);
102             u3_noun nax   = u3qc_peg(axe, 2);
103             u3_noun pro;
104 
105             pro = u3nt(u3_nul, u3qc_peg(nax, u3h(u_yep)), u3k(u3t(u_yep)));
106             u3z(nax);
107             u3z(yep);
108             return pro;
109           }
110         }
111       }
112     }
113   }
114 
115 /* functions
116 */
117   u3_noun
u3qf_loot(u3_noun cog,u3_noun dom)118   u3qf_loot(u3_noun cog,
119             u3_noun dom)
120   {
121     return _loot_in(cog, dom, 1);
122   }
123   u3_noun
u3wf_loot(u3_noun cor)124   u3wf_loot(u3_noun cor)
125   {
126     u3_noun cog, dom;
127 
128     if ( c3n == u3r_mean(cor, u3x_sam_2, &cog, u3x_sam_3, &dom, 0) ) {
129       return u3m_bail(c3__fail);
130     } else {
131       return u3qf_loot(cog, dom);
132     }
133   }
134