/* SUBGOAL switch-on ?knob * SUBGOAL switch-off ?knob */ void PA_SwitchX(Context *cx, Subgoal *sg, Ts *ts, Obj *a, Obj *o) { Obj *p; Dbg(DBGPLAN, DBGOK, "PA_SwitchX", E); switch (sg->state) { case STBEGIN: if (!ISA(N("lock"), I(o,1))) { TOSTATE(cx, sg, 1); return; } if (!(p = R1EI(2, ts, L(N("key-of"), I(o,1), ObjWild, E)))) { Dbg(DBGPLAN, DBGBAD, "PA_SwitchX: no key found"); goto failure; } SG(cx, sg, 1, STFAILURE, L(N("inside"), p, I(o,1), E)); return; case 1: if (!(p = PA_GetFreeHand(ts, a))) goto failure; SG(cx, sg, STSUCCESS, STFAILURE, L(N("flip-to"), p, I(o,1), ObjNA, I(o,0), E)); return; default: Dbg(DBGPLAN, DBGBAD, "PA_SwitchX: undefined state %d", sg->state); } failure: TOSTATE(cx, sg, STFAILURE); }
/* Assumes srclang != tgtlang. */ Obj *TranslateCompoundTense(Obj *comptense, int srclang, int tgtlang) { Obj *rel, *r; if (comptense == NULL) return(NULL); if (tgtlang == F_FRENCH) rel = N("fr-translation-of"); else rel = N("eng-translation-of"); if ((r = R1EI(2, &TsNA, L(rel, comptense, ObjWild, E)))) { return(r); } return(comptense); }