A plugin giving minimal support for switchable devices.

§1. The Persons plugin does just one thing: it applies an indicator property to things of the kind "animate", and a blank "before" property. This used to be accomplished by the Standard Rules in a clumsy sort of way (with a direct I6 code injection), but in the age of Inter we want to avoid that sort of tomfoolery.

    property *P_animate = NULL;
    property *P_before = NULL;

§2.

    void PL::Persons::start(void) {
        PLUGIN_REGISTER(PLUGIN_COMPLETE_MODEL, PL::Persons::IF_complete_model);
    }

The function PL::Persons::start appears nowhere else.

§3.

    int PL::Persons::IF_complete_model(int stage) {
        if ((stage == 3) && (K_person)) {
            P_animate = Properties::EitherOr::new_nameless(L"animate");
            Properties::EitherOr::implement_as_attribute(P_animate, TRUE);
            P_before = Properties::Valued::new_nameless(I"before", K_value);
            instance *I;
            LOOP_OVER_OBJECT_INSTANCES(I)
                if (Instances::of_kind(I, K_person)) {
                    Properties::EitherOr::assert(
                        P_animate, Instances::as_subject(I), TRUE, CERTAIN_CE);
                    Properties::Valued::assert(P_before, Instances::as_subject(I),
                        Rvalues::from_iname(Hierarchy::find(NULL_HL)), CERTAIN_CE);
                }
        }
        return FALSE;
    }

The function PL::Persons::IF_complete_model is used in §2.