To compile the main/synoptic/multimedia submodule.

§1. Before this runs, instances of figures, sounds and external files are scattered all over the Inter tree.

As this is called, Synoptic Utilities has already formed lists of sound_nodes of instances having the kind K_sound_name, and so on.

void SynopticMultimedia::compile(inter_tree *I, tree_inventory *inv) {
    if (TreeLists::len(inv->figure_nodes) > 0) {
        TreeLists::sort(inv->figure_nodes, Synoptic::module_order);
    }
    if (TreeLists::len(inv->sound_nodes) > 0) {
        TreeLists::sort(inv->sound_nodes, Synoptic::module_order);
    }
    if (TreeLists::len(inv->file_nodes) > 0) {
        TreeLists::sort(inv->file_nodes, Synoptic::module_order);
    }
    Define RESOURCEIDSOFFIGURES array1.1;
    Define RESOURCEIDSOFSOUNDS array1.2;
    Define NO_EXTERNAL_FILES1.3;
    Define TABLEOFEXTERNALFILES array1.4;
}

§1.1. Define RESOURCEIDSOFFIGURES array1.1 =

    inter_name *iname = HierarchyLocations::find(I, RESOURCEIDSOFFIGURES_HL);
    Synoptic::begin_array(I, iname);
    Synoptic::numeric_entry(0);
    for (int i=0; i<TreeLists::len(inv->figure_nodes); i++) {
        inter_package *pack = Inter::Package::defined_by_frame(inv->figure_nodes->list[i].node);
        inter_ti id = Metadata::read_numeric(pack, I"^resource_id");
        Synoptic::numeric_entry(id);
    }
    Synoptic::numeric_entry(0);
    Synoptic::end_array(I);

§1.2. Define RESOURCEIDSOFSOUNDS array1.2 =

    inter_name *iname = HierarchyLocations::find(I, RESOURCEIDSOFSOUNDS_HL);
    Synoptic::begin_array(I, iname);
    Synoptic::numeric_entry(0);
    for (int i=0; i<TreeLists::len(inv->sound_nodes); i++) {
        inter_package *pack = Inter::Package::defined_by_frame(inv->sound_nodes->list[i].node);
        inter_ti id = Metadata::read_numeric(pack, I"^resource_id");
        Synoptic::numeric_entry(id);
    }
    Synoptic::numeric_entry(0);
    Synoptic::end_array(I);

§1.3. Define NO_EXTERNAL_FILES1.3 =

    inter_name *iname = HierarchyLocations::find(I, NO_EXTERNAL_FILES_HL);
    Produce::numeric_constant(I, iname, K_value, (inter_ti) TreeLists::len(inv->file_nodes));

§1.4. Define TABLEOFEXTERNALFILES array1.4 =

    inter_name *iname = HierarchyLocations::find(I, TABLEOFEXTERNALFILES_HL);
    Synoptic::begin_array(I, iname);
    Synoptic::numeric_entry(0);
    for (int i=0; i<TreeLists::len(inv->file_nodes); i++) {
        inter_package *pack = Inter::Package::defined_by_frame(inv->file_nodes->list[i].node);
        inter_symbol *vc_s = Metadata::read_symbol(pack, I"^file_value");
        Synoptic::symbol_entry(vc_s);
    }
    Synoptic::numeric_entry(0);
    Synoptic::end_array(I);