1 /* j/5/parse.c
2 **
3 */
4 #include "all.h"
5 
6 
7   static u3_noun
_slip(u3_noun weq,u3_noun naz)8   _slip(u3_noun weq,
9         u3_noun naz)
10   {
11     u3_noun p_naz, q_naz;
12 
13     u3x_cell(naz, &p_naz, &q_naz);
14     if ( 10 == weq ) {
15       return u3nc(u3x_good(u3i_vint(u3k(p_naz))),
16                            1);
17     } else {
18       return u3nc(u3k(p_naz),
19                   u3x_good(u3i_vint(u3k(q_naz))));
20     }
21   }
22 
23   static u3_noun
_fail(u3_noun tub)24   _fail(u3_noun tub)
25   {
26     u3_noun p_tub, q_tub;
27 
28     u3x_cell(tub, &p_tub, &q_tub);
29     return u3nc(u3k(p_tub), u3_nul);
30   }
31 
32   static u3_noun
_last(u3_noun zyc,u3_noun naz)33   _last(u3_noun zyc,
34         u3_noun naz)
35   {
36     u3_noun p_zyc, q_zyc, p_naz, q_naz;
37 
38     u3x_cell(zyc, &p_zyc, &q_zyc);
39     u3x_cell(naz, &p_naz, &q_naz);
40 
41     if ( !_(u3a_is_cat(p_zyc)) || !_(u3a_is_cat(q_zyc)) ||
42          !_(u3a_is_cat(p_naz)) || !_(u3a_is_cat(q_naz)) )
43     {
44       return u3m_bail(c3__fail);
45     } else {
46       if ( p_zyc == p_naz ) {
47         return (q_zyc > q_naz) ? u3k(zyc) : u3k(naz);
48       }
49       else {
50         return (p_zyc > p_naz) ? u3k(zyc) : u3k(naz);
51       }
52     }
53   }
54 
55   static u3_noun
_next(u3_noun tub)56   _next(u3_noun tub)
57   {
58     u3_noun p_tub, q_tub;
59     u3_noun zac;
60 
61     u3x_cell(tub, &p_tub, &q_tub);
62     if ( c3n == u3du(q_tub) ) {
63       return _fail(tub);
64     }
65     else {
66       u3_noun iq_tub = u3h(q_tub);
67       u3_noun tq_tub = u3t(q_tub);
68 
69       zac = _slip(iq_tub, p_tub);
70 
71       return u3nc(zac,
72                   u3nq(u3_nul,
73                        u3k(iq_tub),
74                        u3k(zac),
75                        u3k(tq_tub)));
76     }
77   }
78 
79 /* bend
80 */
81   static u3_noun
_cqe_bend_fun(u3_noun raq,u3_noun vex,u3_noun sab)82   _cqe_bend_fun(u3_noun raq,
83                 u3_noun vex,
84                 u3_noun sab)
85   {
86     u3_noun p_vex, q_vex;
87 
88     u3x_cell(vex, &p_vex, &q_vex);
89     if ( c3n == u3du(q_vex) ) {
90       return u3k(vex);
91     } else {
92       u3_noun uq_vex = u3t(q_vex);
93       u3_noun puq_vex, quq_vex;
94       u3_noun yit, yur;
95       u3_noun p_yit, q_yit;
96       u3_noun ret;
97 
98       u3x_cell(uq_vex, &puq_vex, &quq_vex);
99       yit = u3x_good(u3n_slam_on(u3k(sab), u3k(quq_vex)));
100 
101       u3x_cell(yit, &p_yit, &q_yit);
102       yur = _last(p_vex, p_yit);
103 
104       if ( c3n == u3du(q_yit) ) {
105         ret = u3nc(yur, u3k(q_vex));
106       }
107       else {
108         u3_noun uq_yit = u3t(q_yit);
109         u3_noun puq_yit, quq_yit;
110         u3_noun vux;
111 
112         u3x_cell(uq_yit, &puq_yit, &quq_yit);
113 
114         vux = u3x_good(u3n_slam_on(u3k(raq),
115                                    u3nc(u3k(puq_vex),
116                                    u3k(puq_yit))));
117         if ( u3_nul == vux ) {
118           ret = u3nc(yur, u3k(q_vex));
119         }
120         else {
121           ret = u3nq(yur,
122                      u3_nul,
123                      u3k(u3t(vux)),
124                      u3k(quq_yit));
125           u3z(vux);
126         }
127       }
128       u3z(yit);
129       return ret;
130     }
131   }
132 
133   u3_noun
u3we_bend_fun(u3_noun cor)134  u3we_bend_fun(u3_noun cor)
135   {
136     u3_noun van, raq, vex, sab;
137 
138     if ( (c3n == u3r_mean(cor, u3x_sam_2, &vex,
139                                u3x_sam_3, &sab,
140                                u3x_con, &van, 0)) ||
141          (u3_none == (raq = u3r_at(u3x_sam, van))) )
142     {
143       return u3m_bail(c3__fail);
144     } else {
145       return _cqe_bend_fun(raq, vex, sab);
146     }
147   }
148 
149 /* cold
150 */
151   static u3_noun
_cqe_cold_fun(u3_noun cus,u3_noun sef,u3_noun tub)152   _cqe_cold_fun(u3_noun cus,
153                 u3_noun sef,
154                 u3_noun tub)
155   {
156     u3_noun vex = u3x_good(u3n_slam_on(u3k(sef), u3k(tub)));
157     u3_noun p_vex, q_vex;
158 
159     u3x_cell(vex, &p_vex, &q_vex);
160 
161     if ( c3n == u3du(q_vex) ) {
162       return vex;
163     }
164     else {
165       u3_noun uq_vex = u3t(q_vex);
166       u3_noun quq_vex;
167       u3_noun ret;
168 
169       u3x_cell(uq_vex, 0, &quq_vex);
170       ret = u3nq(u3k(p_vex),
171                  u3_nul,
172                  u3k(cus),
173                  u3k(quq_vex));
174 
175       u3z(vex);
176       return ret;
177     }
178   }
179 
180   u3_noun
u3we_cold_fun(u3_noun cor)181  u3we_cold_fun(u3_noun cor)
182   {
183     u3_noun van, cus, sef, tub;
184 
185     if ( (c3n == u3r_mean(cor, u3x_sam, &tub, u3x_con, &van, 0)) ||
186          (c3n == u3r_mean(van, u3x_sam_2, &cus, u3x_sam_3, &sef, 0)) )
187     {
188       return u3m_bail(c3__fail);
189     } else {
190       return _cqe_cold_fun(cus, sef, tub);
191     }
192   }
193 
194 /* cook
195 */
196   static u3_noun
_cqe_cook_fun(u3_noun poq,u3_noun sef,u3_noun tub)197   _cqe_cook_fun(u3_noun poq,
198                 u3_noun sef,
199                 u3_noun tub)
200   {
201     u3_noun vex = u3x_good(u3n_slam_on(u3k(sef), u3k(tub)));
202     u3_noun p_vex, q_vex;
203 
204     u3x_cell(vex, &p_vex, &q_vex);
205 
206     if ( c3n == u3du(q_vex) ) {
207       return vex;
208     }
209     else {
210       u3_noun uq_vex = u3t(q_vex);
211       u3_noun puq_vex, quq_vex;
212       u3_noun wag;
213       u3_noun ret;
214 
215       u3x_cell(uq_vex, &puq_vex, &quq_vex);
216       wag = u3x_good(u3n_slam_on(u3k(poq), u3k(puq_vex)));
217       ret = u3nq(u3k(p_vex),
218                  u3_nul,
219                  wag,
220                  u3k(quq_vex));
221 
222       u3z(vex);
223       return ret;
224     }
225   }
226 
227   u3_noun
u3we_cook_fun(u3_noun cor)228  u3we_cook_fun(u3_noun cor)
229   {
230     u3_noun van, poq, sef, tub;
231 
232     if ( (c3n == u3r_mean(cor, u3x_sam, &tub, u3x_con, &van, 0)) ||
233          (c3n == u3r_mean(van, u3x_sam_2, &poq, u3x_sam_3, &sef, 0)) )
234     {
235       return u3m_bail(c3__fail);
236     } else {
237       return _cqe_cook_fun(poq, sef, tub);
238     }
239   }
240 
241 /* comp
242 */
243   static u3_noun
_cqe_comp_fun(u3_noun raq,u3_noun vex,u3_noun sab)244   _cqe_comp_fun(u3_noun raq,
245                 u3_noun vex,
246                 u3_noun sab)
247   {
248     u3_noun p_vex, q_vex;
249 
250     u3x_cell(vex, &p_vex, &q_vex);
251     if ( c3n == u3du(q_vex) ) {
252       return u3k(vex);
253     } else {
254       u3_noun uq_vex = u3t(q_vex);
255       u3_noun puq_vex, quq_vex;
256       u3_noun yit, yur;
257       u3_noun p_yit, q_yit;
258       u3_noun ret;
259 
260       u3x_cell(uq_vex, &puq_vex, &quq_vex);
261       yit = u3x_good(u3n_slam_on(u3k(sab), u3k(quq_vex)));
262 
263       u3x_cell(yit, &p_yit, &q_yit);
264       yur = _last(p_vex, p_yit);
265 
266       if ( c3n == u3du(q_yit) ) {
267         ret = u3nc(yur, u3k(q_yit));
268       }
269       else {
270         u3_noun uq_yit = u3t(q_yit);
271         u3_noun puq_yit, quq_yit;
272 
273         u3x_cell(uq_yit, &puq_yit, &quq_yit);
274         ret = u3nq(yur,
275                    u3_nul,
276                    u3x_good(u3n_slam_on(u3k(raq),
277                                         u3nc(u3k(puq_vex),
278                                              u3k(puq_yit)))),
279                    u3k(quq_yit));
280       }
281       u3z(yit);
282       return ret;
283     }
284   }
285 
286   u3_noun
u3we_comp_fun(u3_noun cor)287  u3we_comp_fun(u3_noun cor)
288   {
289     u3_noun van, raq, vex, sab;
290 
291     if ( (c3n == u3r_mean(cor, u3x_sam_2, &vex,
292                                u3x_sam_3, &sab,
293                                u3x_con, &van, 0)) ||
294          (u3_none == (raq = u3r_at(u3x_sam, van))) )
295     {
296       return u3m_bail(c3__fail);
297     } else {
298       return _cqe_comp_fun(raq, vex, sab);
299     }
300   }
301 
302 /* easy
303 */
304   static u3_noun
_cqe_easy_fun(u3_noun huf,u3_noun tub)305   _cqe_easy_fun(u3_noun huf,
306                 u3_noun tub)
307   {
308     u3_noun p_tub, q_tub;
309 
310     u3x_cell(tub, &p_tub, &q_tub);
311     return u3nq(u3k(p_tub),
312                 u3_nul,
313                 u3k(huf),
314                 u3k(tub));
315   }
316 
317   u3_noun
u3we_easy_fun(u3_noun cor)318   u3we_easy_fun(u3_noun cor)
319   {
320     u3_noun van, huf, tub;
321 
322     if ( (c3n == u3r_mean(cor, u3x_sam, &tub, u3x_con, &van, 0)) ||
323          (u3_none == (huf = u3r_at(u3x_sam, van))) )
324     {
325       return u3m_bail(c3__fail);
326     } else {
327       return _cqe_easy_fun(huf, tub);
328     }
329   }
330 
331 /* glue
332 */
333   static u3_noun
_cqe_glue_fun(u3_noun bus,u3_noun vex,u3_noun sab)334   _cqe_glue_fun(u3_noun bus,
335                 u3_noun vex,
336                 u3_noun sab)
337   {
338     u3_noun p_vex, q_vex;
339 
340     u3x_cell(vex, &p_vex, &q_vex);
341     if ( c3n == u3du(q_vex) ) {
342       return u3k(vex);
343     }
344     else {
345       u3_noun uq_vex = u3t(q_vex);
346       u3_noun puq_vex, quq_vex;
347       u3_noun yit, yur;
348       u3_noun p_yit, q_yit;
349       u3_noun ret;
350 
351       u3x_cell(uq_vex, &puq_vex, &quq_vex);
352       yit = u3x_good(u3n_slam_on(u3k(bus), u3k(quq_vex)));
353 
354       u3x_cell(yit, &p_yit, &q_yit);
355       yur = _last(p_vex, p_yit);
356 
357       if ( c3n == u3du(q_yit) ) {
358         ret = u3nc(yur, u3_nul);
359       }
360       else {
361         u3_noun uq_yit = u3t(q_yit);
362         u3_noun puq_yit, quq_yit;
363         u3_noun wam, p_wam, q_wam, goy;
364 
365         u3x_cell(uq_yit, &puq_yit, &quq_yit);
366         wam = u3x_good(u3n_slam_on(u3k(sab), u3k(quq_yit)));
367 
368         u3x_cell(wam, &p_wam, &q_wam);
369         goy = _last(yur, p_wam);
370         u3z(yur);
371 
372         if ( c3n == u3du(q_wam) ) {
373           ret = u3nc(goy, u3_nul);
374         } else {
375           u3_noun uq_wam = u3t(q_wam);
376           u3_noun puq_wam, quq_wam;
377 
378           u3x_cell(uq_wam, &puq_wam, &quq_wam);
379           ret = u3nq(goy,
380                      u3_nul,
381                      u3nc(u3k(puq_vex),
382                           u3k(puq_wam)),
383                      u3k(quq_wam));
384         }
385         u3z(wam);
386       }
387       u3z(yit);
388       return ret;
389     }
390   }
391 
392   u3_noun
u3we_glue_fun(u3_noun cor)393  u3we_glue_fun(u3_noun cor)
394   {
395     u3_noun van, bus, vex, sab;
396 
397     if ( (c3n == u3r_mean(cor, u3x_sam_2, &vex,
398                                 u3x_sam_3, &sab,
399                                 u3x_con, &van, 0)) ||
400          (u3_none == (bus = u3r_at(u3x_sam, van))) )
401     {
402       return u3m_bail(c3__fail);
403     } else {
404       return _cqe_glue_fun(bus, vex, sab);
405     }
406   }
407 
408 /* here
409 */
410   static u3_noun
_cqe_here_fun(u3_noun hez,u3_noun sef,u3_noun tub)411   _cqe_here_fun(u3_noun hez,
412                 u3_noun sef,
413                 u3_noun tub)
414   {
415     u3_noun vex = u3x_good(u3n_slam_on(u3k(sef), u3k(tub)));
416     u3_noun p_vex, q_vex;
417 
418     u3x_cell(vex, &p_vex, &q_vex);
419 
420     if ( c3n == u3du(q_vex) ) {
421       return vex;
422     }
423     else {
424       u3_noun uq_vex = u3t(q_vex);
425       u3_noun p_tub, q_tub;
426       u3_noun puq_vex, quq_vex, pquq_vex;
427       u3_noun gud, wag;
428       u3_noun ret;
429 
430       u3x_cell(tub, &p_tub, &q_tub);
431       u3x_cell(uq_vex, &puq_vex, &quq_vex);
432       u3x_cell(quq_vex, &pquq_vex, 0);
433       gud = u3nc(
434                   u3nc(u3k(p_tub),
435                                u3k(pquq_vex)),
436                   u3k(puq_vex));
437 
438       wag = u3x_good(u3n_slam_on(u3k(hez), gud));
439       ret = u3nq(u3k(p_vex),
440                  u3_nul,
441                  wag,
442                  u3k(quq_vex));
443 
444       u3z(vex);
445       return ret;
446     }
447   }
448 
449   u3_noun
u3we_here_fun(u3_noun cor)450  u3we_here_fun(u3_noun cor)
451   {
452     u3_noun van, hez, sef, tub;
453 
454     if ( (c3n == u3r_mean(cor, u3x_sam, &tub, u3x_con, &van, 0)) ||
455          (c3n == u3r_mean(van, u3x_sam_2, &hez, u3x_sam_3, &sef, 0)) )
456     {
457       return u3m_bail(c3__fail);
458     }
459     else {
460       return _cqe_here_fun(hez, sef, tub);
461     }
462   }
463 
464 /* just
465 */
466   static u3_noun
_cqe_just_fun(u3_noun daf,u3_noun tub)467   _cqe_just_fun(u3_noun daf,
468                 u3_noun tub)
469   {
470     u3_noun p_tub, q_tub;
471 
472     u3x_cell(tub, &p_tub, &q_tub);
473 
474     if ( c3n == u3du(q_tub) ) {
475       return _fail(tub);
476     }
477     else {
478       u3_noun iq_tub = u3h(q_tub);
479 
480       if ( c3y == u3r_sing(daf, iq_tub) ) {
481         return _next(tub);
482       }
483       else return _fail(tub);
484     }
485   }
486   u3_noun
u3we_just_fun(u3_noun cor)487  u3we_just_fun(u3_noun cor)
488   {
489     u3_noun van, daf, tub;
490 
491     if ( (c3n == u3r_mean(cor, u3x_sam, &tub, u3x_con, &van, 0)) ||
492          (u3_none == (daf = u3r_at(u3x_sam, van))) )
493     {
494       return u3m_bail(c3__fail);
495     } else {
496       return _cqe_just_fun(daf, tub);
497     }
498   }
499 
500 /* mask
501 */
502   static u3_noun
_cqe_mask_fun(u3_noun bud,u3_noun tub)503   _cqe_mask_fun(u3_noun bud,
504                 u3_noun tub)
505   {
506     u3_noun p_tub, q_tub;
507 
508     u3x_cell(tub, &p_tub, &q_tub);
509 
510     if ( c3n == u3du(q_tub) ) {
511       return _fail(tub);
512     }
513     else {
514       u3_noun iq_tub = u3h(q_tub);
515 
516       while ( c3y == u3du(bud) ) {
517         if ( c3y == u3r_sing(u3h(bud), iq_tub) ) {
518           return _next(tub);
519         }
520         bud = u3t(bud);
521       }
522       return _fail(tub);
523     }
524   }
525   u3_noun
u3we_mask_fun(u3_noun cor)526  u3we_mask_fun(u3_noun cor)
527   {
528     u3_noun van, bud, tub;
529 
530     if ( (c3n == u3r_mean(cor, u3x_sam, &tub, u3x_con, &van, 0)) ||
531          (u3_none == (bud = u3r_at(u3x_sam, van))) )
532     {
533       return u3m_bail(c3__fail);
534     } else {
535       return _cqe_mask_fun(bud, tub);
536     }
537   }
538 /* pfix
539 */
540   static u3_noun
_cqe_pfix(u3_noun vex,u3_noun sab)541   _cqe_pfix(u3_noun vex,
542             u3_noun sab)
543   {
544     u3_noun p_vex, q_vex;
545 
546     u3x_cell(vex, &p_vex, &q_vex);
547     if ( c3n == u3du(q_vex) ) {
548       return u3k(vex);
549     }
550     else {
551       u3_noun uq_vex = u3t(q_vex);
552       u3_noun puq_vex, quq_vex;
553       u3_noun yit, p_yit, q_yit;
554       u3_noun ret;
555 
556       u3x_cell(uq_vex, &puq_vex, &quq_vex);
557       yit = u3x_good(u3n_slam_on(u3k(sab), u3k(quq_vex)));
558 
559       u3x_cell(yit, &p_yit, &q_yit);
560       ret = u3nc(_last(p_vex, p_yit),
561                  u3k(q_yit));
562 
563       u3z(yit);
564       return ret;
565     }
566   }
567   u3_noun
u3we_pfix(u3_noun cor)568   u3we_pfix(u3_noun cor)
569   {
570     u3_noun vex, sab;
571 
572     if ( (c3n == u3r_mean(cor, u3x_sam_2, &vex, u3x_sam_3, &sab, 0)) ) {
573       return u3m_bail(c3__exit);
574     } else {
575       return _cqe_pfix(vex, sab);
576     }
577   }
578 
579 /* plug
580 */
581   static u3_noun
_cqe_plug(u3_noun vex,u3_noun sab)582   _cqe_plug(u3_noun vex,
583             u3_noun sab)
584   {
585     u3_noun p_vex, q_vex;
586 
587     u3x_cell(vex, &p_vex, &q_vex);
588     if ( c3n == u3du(q_vex) ) {
589       return u3k(vex);
590     }
591     else {
592       u3_noun uq_vex = u3t(q_vex);
593       u3_noun puq_vex, quq_vex;
594       u3_noun yit, yur;
595       u3_noun p_yit, q_yit;
596       u3_noun ret;
597 
598       u3x_cell(uq_vex, &puq_vex, &quq_vex);
599       yit = u3x_good(u3n_slam_on(u3k(sab), u3k(quq_vex)));
600 
601       u3x_cell(yit, &p_yit, &q_yit);
602       yur = _last(p_vex, p_yit);
603 
604       if ( c3n == u3du(q_yit) ) {
605         ret = u3nc(yur, u3k(q_yit));
606       }
607       else {
608         u3_noun uq_yit = u3t(q_yit);
609         u3_noun puq_yit, quq_yit;
610 
611         u3x_cell(uq_yit, &puq_yit, &quq_yit);
612         ret = u3nq(yur,
613                    u3_nul,
614                    u3nc(u3k(puq_vex),
615                         u3k(puq_yit)),
616                    u3k(quq_yit));
617       }
618       u3z(yit);
619       return ret;
620     }
621   }
622   u3_noun
u3we_plug(u3_noun cor)623   u3we_plug(u3_noun cor)
624   {
625     u3_noun vex, sab;
626 
627     if ( (c3n == u3r_mean(cor, u3x_sam_2, &vex, u3x_sam_3, &sab, 0)) ) {
628       return u3m_bail(c3__exit);
629     } else {
630       return _cqe_plug(vex, sab);
631     }
632   }
633 
634 /* pose
635 */
636   u3_noun
u3qe_pose(u3_noun vex,u3_noun sab)637   u3qe_pose(u3_noun vex,
638             u3_noun sab)
639   {
640     u3_noun p_vex, q_vex;
641 
642     u3x_cell(vex, &p_vex, &q_vex);
643     if ( c3y == u3du(q_vex) ) {
644       return u3k(vex);
645     } else {
646       u3_noun roq = u3x_good(u3n_kick_on(u3k(sab)));
647       u3_noun p_roq, q_roq;
648       u3_noun ret;
649 
650       u3x_cell(roq, &p_roq, &q_roq);
651       ret = u3nc(_last(p_vex, p_roq),
652                  u3k(q_roq));
653 
654       u3z(roq);
655       return ret;
656     }
657   }
658   u3_noun
u3we_pose(u3_noun cor)659   u3we_pose(u3_noun cor)
660   {
661     u3_noun vex, sab;
662 
663     if ( (c3n == u3r_mean(cor, u3x_sam_2, &vex, u3x_sam_3, &sab, 0)) ) {
664       return u3m_bail(c3__exit);
665     } else {
666       return u3qe_pose(vex, sab);
667     }
668   }
669 
670 /* sfix
671 */
672   static u3_noun
_cqe_sfix(u3_noun vex,u3_noun sab)673   _cqe_sfix(u3_noun vex,
674             u3_noun sab)
675   {
676     u3_noun p_vex, q_vex;
677 
678     u3x_cell(vex, &p_vex, &q_vex);
679     if ( c3n == u3du(q_vex) ) {
680       return u3k(vex);
681     }
682     else {
683       u3_noun uq_vex = u3t(q_vex);
684       u3_noun puq_vex, quq_vex;
685       u3_noun yit, p_yit, q_yit, yur;
686       u3_noun ret;
687 
688       u3x_cell(uq_vex, &puq_vex, &quq_vex);
689       yit = u3x_good(u3n_slam_on(u3k(sab), u3k(quq_vex)));
690 
691       u3x_cell(yit, &p_yit, &q_yit);
692       yur = _last(p_vex, p_yit);
693 
694       if ( c3n == u3du(q_yit) ) {
695         ret = u3nc(yur, u3_nul);
696       }
697       else {
698         u3_noun uq_yit = u3t(q_yit);
699         u3_noun puq_yit, quq_yit;
700 
701         u3x_cell(uq_yit, &puq_yit, &quq_yit);
702 
703         ret = u3nq(yur,
704                    u3_nul,
705                    u3k(puq_vex),
706                    u3k(quq_yit));
707       }
708       u3z(yit);
709       return ret;
710     }
711   }
712   u3_noun
u3we_sfix(u3_noun cor)713   u3we_sfix(u3_noun cor)
714   {
715     u3_noun vex, sab;
716 
717     if ( (c3n == u3r_mean(cor, u3x_sam_2, &vex, u3x_sam_3, &sab, 0)) ) {
718       return u3m_bail(c3__exit);
719     } else {
720       return _cqe_sfix(vex, sab);
721     }
722   }
723 
724 /* shim
725 */
726   static u3_noun
_cqe_shim_fun(u3_noun zep,u3_noun tub)727   _cqe_shim_fun(u3_noun zep,
728                 u3_noun tub)
729   {
730     u3_noun p_tub, q_tub;
731 
732     u3x_cell(tub, &p_tub, &q_tub);
733 
734     if ( c3n == u3du(q_tub) ) {
735       return _fail(tub);
736     }
737     else {
738       u3_noun p_zep, q_zep;
739       u3_noun iq_tub = u3h(q_tub);
740 
741       u3x_cell(zep, &p_zep, &q_zep);
742       if ( _(u3a_is_cat(p_zep)) &&
743            _(u3a_is_cat(q_zep)) &&
744            _(u3a_is_cat(iq_tub)) )
745       {
746         if ( (iq_tub >= p_zep) && (iq_tub <= q_zep) ) {
747           return _next(tub);
748         }
749         else return _fail(tub);
750       }
751       else {
752         return u3m_bail(c3__fail);
753       }
754     }
755   }
756   u3_noun
u3we_shim_fun(u3_noun cor)757  u3we_shim_fun(u3_noun cor)
758   {
759     u3_noun van, zep, tub;
760 
761     if ( (c3n == u3r_mean(cor, u3x_sam, &tub, u3x_con, &van, 0)) ||
762          (u3_none == (zep = u3r_at(u3x_sam, van))) )
763     {
764       return u3m_bail(c3__fail);
765     } else {
766       return _cqe_shim_fun(zep, tub);
767     }
768   }
769 
770 /* stag
771 */
772   static u3_noun
_cqe_stag_fun(u3_noun gob,u3_noun sef,u3_noun tub)773   _cqe_stag_fun(u3_noun gob,
774                 u3_noun sef,
775                 u3_noun tub)
776   {
777     u3_noun vex = u3x_good(u3n_slam_on(u3k(sef), u3k(tub)));
778     u3_noun p_vex, q_vex;
779 
780     u3x_cell(vex, &p_vex, &q_vex);
781 
782     if ( c3n == u3du(q_vex) ) {
783       return vex;
784     }
785     else {
786       u3_noun uq_vex = u3t(q_vex);
787       u3_noun puq_vex, quq_vex;
788       u3_noun wag;
789       u3_noun ret;
790 
791       u3x_cell(uq_vex, &puq_vex, &quq_vex);
792       wag = u3nc(u3k(gob), u3k(puq_vex));
793       ret = u3nq(u3k(p_vex),
794                  u3_nul,
795                  wag,
796                  u3k(quq_vex));
797 
798       u3z(vex);
799       return ret;
800     }
801   }
802 
803   u3_noun
u3we_stag_fun(u3_noun cor)804  u3we_stag_fun(u3_noun cor)
805   {
806     u3_noun van, gob, sef, tub;
807 
808     if ( (c3n == u3r_mean(cor, u3x_sam, &tub, u3x_con, &van, 0)) ||
809          (c3n == u3r_mean(van, u3x_sam_2, &gob, u3x_sam_3, &sef, 0)) )
810     {
811       return u3m_bail(c3__fail);
812     } else {
813       return _cqe_stag_fun(gob, sef, tub);
814     }
815   }
816 
817 /* stew
818 */
819   static u3_noun
_stew_wor(u3_noun ort,u3_noun wan)820   _stew_wor(u3_noun ort,
821             u3_noun wan)
822   {
823     if ( !_(u3a_is_cat(ort)) ) {
824       return u3m_bail(c3__fail);
825     }
826     else {
827       if ( c3n == u3du(wan) ) {
828         if ( !_(u3a_is_cat(wan)) ) {
829           return u3m_bail(c3__fail);
830         }
831         else return (ort < wan) ? c3y : c3n;
832       }
833       else {
834         u3_noun h_wan = u3h(wan);
835 
836         if ( !_(u3a_is_cat(h_wan)) ) {
837           return u3m_bail(c3__fail);
838         }
839         else return (ort < h_wan) ? c3y : c3n;
840       }
841     }
842   }
843 
844   static u3_noun
_cqe_stew_fun(u3_noun hel,u3_noun tub)845   _cqe_stew_fun(u3_noun hel,
846                 u3_noun tub)
847   {
848     u3_noun p_tub, q_tub;
849 
850     u3x_cell(tub, &p_tub, &q_tub);
851     if ( c3n == u3du(q_tub) ) {
852       return _fail(tub);
853     }
854     else {
855       u3_noun iq_tub = u3h(q_tub);
856 
857       if ( !_(u3a_is_cat(iq_tub)) ) {
858         return u3m_bail(c3__fail);
859       }
860       else while ( 1 ) {
861         if ( c3n == u3du(hel) ) {
862           return _fail(tub);
863         }
864         else {
865           u3_noun n_hel, l_hel, r_hel;
866           u3_noun pn_hel, qn_hel;
867           c3_o    bit_o;
868 
869           u3x_trel(hel, &n_hel, &l_hel, &r_hel);
870           u3x_cell(n_hel, &pn_hel, &qn_hel);
871 
872           if ( (c3n == u3du(pn_hel)) ) {
873             bit_o = __((iq_tub == pn_hel));
874           }
875           else {
876             u3_noun hpn_hel = u3h(pn_hel);
877             u3_noun tpn_hel = u3t(pn_hel);
878 
879             if ( !_(u3a_is_cat(hpn_hel)) ||
880                  !_(u3a_is_cat(tpn_hel)) ) {
881               return _fail(tub);
882             }
883             else bit_o = __((iq_tub >= hpn_hel) && (iq_tub <= tpn_hel));
884           }
885 
886           if ( c3y == bit_o ) {
887             return u3x_good
888               (u3n_slam_on(u3k(qn_hel), u3k(tub)));
889           } else {
890             if ( c3y == _stew_wor(iq_tub, pn_hel) ) {
891               hel = l_hel;
892             }
893             else hel = r_hel;
894           }
895         }
896       }
897     }
898   }
899  u3_noun
u3we_stew_fun(u3_noun cor)900  u3we_stew_fun(u3_noun cor)
901   {
902     u3_noun con, hel, tub;
903 
904     if ( (c3n == u3r_mean(cor, u3x_sam, &tub, u3x_con, &con, 0)) ||
905          (u3_none == (hel = u3r_at(2, con))) )
906     {
907       return u3m_bail(c3__fail);
908     } else {
909       return _cqe_stew_fun(hel, tub);
910     }
911   }
912 
913 /* stir
914 */
915   static u3_noun
_cqe_stir_fun(u3_noun rud,u3_noun raq,u3_noun fel,u3_noun tub)916   _cqe_stir_fun(u3_noun rud,
917                 u3_noun raq,
918                 u3_noun fel,
919                 u3_noun tub)
920   {
921     u3_noun vex = u3x_good(u3n_slam_on(u3k(fel), u3k(tub)));
922     u3_noun p_vex, q_vex;
923     u3_noun ret;
924 
925     u3x_cell(vex, &p_vex, &q_vex);
926     if ( c3n == u3du(q_vex) ) {
927       ret = u3nq(u3k(p_vex),
928                  u3_nul,
929                  u3k(rud),
930                  u3k(tub));
931     }
932     else {
933       u3_noun uq_vex = u3t(q_vex);
934       u3_noun puq_vex, quq_vex;
935       u3_noun wag, p_wag, q_wag, uq_wag, puq_wag, quq_wag;
936 
937       u3x_cell(uq_vex, &puq_vex, &quq_vex);
938       wag = _cqe_stir_fun(rud, raq, fel, quq_vex);
939 
940       u3x_cell(wag, &p_wag, &q_wag);
941       if ( c3n == u3du(q_wag) ) {
942         return u3m_bail(c3__fail);
943       }
944       uq_wag = u3t(q_wag);
945       u3x_cell(uq_wag, &puq_wag, &quq_wag);
946 
947       ret = u3nq(_last(p_vex, p_wag),
948                  u3_nul,
949                  u3x_good(u3n_slam_on(u3k(raq),
950                                       u3nc(u3k(puq_vex),
951                                            u3k(puq_wag)))),
952                  u3k(quq_wag));
953       u3z(wag);
954     }
955     u3z(vex);
956     return ret;
957   }
958 
959   u3_noun
u3we_stir_fun(u3_noun cor)960   u3we_stir_fun(u3_noun cor)
961   {
962     u3_noun van, rud, raq, fel, tub;
963 
964     if ( (c3n == u3r_mean(cor, u3x_sam, &tub, u3x_con, &van, 0)) ||
965          (c3n == u3r_mean(van, u3x_sam_2, &rud,
966                                u3x_sam_6, &raq,
967                                u3x_sam_7, &fel,
968                                0)) )
969     {
970       return u3m_bail(c3__fail);
971     } else {
972       return _cqe_stir_fun(rud, raq, fel, tub);
973     }
974   }
975