[EventsElement::] Events Element. To write the Events element (Ev) in the index. @ There are two tables, one for timed events, the other for those of no fixed time. = void EventsElement::render(OUTPUT_STREAM) { inter_tree *I = Index::get_tree(); tree_inventory *inv = Synoptic::inv(I); TreeLists::sort(inv->rule_nodes, Synoptic::module_order); int when_count = 0, tt_count = 0; @; @; if ((when_count == 0) && (tt_count == 0)) { HTML_OPEN("p"); WRITE("None."); HTML_CLOSE("p"); } } @ = for (int i=0; irule_nodes); i++) { inter_package *pack = Inter::Package::defined_by_frame(inv->rule_nodes->list[i].node); if (Metadata::exists(pack, I"^timed")) { if (Metadata::exists(pack, I"^timed_for") == FALSE) { if (when_count == 0) { HTML_OPEN("p"); WRITE("Events with no specific time"); HTML_CLOSE("p"); } when_count++; HTML_OPEN_WITH("p", "class=\"tightin2\""); WRITE("%S", Metadata::read_textual(pack, I"^preamble")); int at = (int) Metadata::read_optional_numeric(pack, I"^at"); if (at > 0) Index::link(OUT, at); WRITE(" (where triggered: "); inter_tree_node *D = Inter::Packages::definition(pack); LOOP_THROUGH_INTER_CHILDREN(C, D) { if (C->W.data[ID_IFLD] == PACKAGE_IST) { inter_package *entry = Inter::Package::defined_by_frame(C); if (Inter::Packages::type(entry) == PackageTypes::get(I, I"_timed_rule_trigger")) { int at = (int) Metadata::read_optional_numeric(entry, I"^used_at"); if (at > 0) Index::link(OUT, at); } } } WRITE(")"); HTML_CLOSE("p"); } } } @ = for (int i=0; irule_nodes); i++) { inter_package *pack = Inter::Package::defined_by_frame(inv->rule_nodes->list[i].node); if (Metadata::exists(pack, I"^timed")) { if (Metadata::exists(pack, I"^timed_for")) { if (tt_count == 0) { HTML_OPEN("p"); WRITE("Timetable"); HTML_CLOSE("p"); } tt_count++; HTML_OPEN_WITH("p", "class=\"in2\""); WRITE("%S", Metadata::read_textual(pack, I"^preamble")); int at = (int) Metadata::read_optional_numeric(pack, I"^at"); if (at > 0) Index::link(OUT, at); HTML_CLOSE("p"); } } }