To provide an enforced structure and set of naming conventions for packages and names in the Inter code we generate.


§1. Introduction. See What This Module Does for an overview of how Inter hierarchies work.

This section of code amounts to a detailed rundown of exactly how Inform's hierarchy of packages fits together: it's a sort of directory listing of every resource we might compile. In actual runs, of course, not all of them will be.

This section makes extensive use of Hierarchy Locations (in building), which provides a general way to set up Inter hierarchies.

Adding this to the source text of a project:

Include Inter hierarchy in the debugging log.

causes the following function to log the Inter hierarchy before and after linking the kits:

void Hierarchy::log(void) {
    if (Log::aspect_switched_on(HIERARCHY_DA)) {
        LOG("+==============================================================+\n");
        LOG("Inventory of current Inter tree:\n");
        LOG("+--------------------------------------------------------------+\n");
        LOG_INDENT;
        InvTarget::inv_to(DL, Emit::tree());
        LOG_OUTDENT;
        LOG("+==============================================================+\n\n");
    }
}

§2. Notation. Cower, puny mortal! Know thou not, thou hast entered Macro Valley?

The code given below looks like structured data, but it's actually code, even if the macros give it the look of having a mini-language of its own. But it's easy to read with practice.

We are going to give a series of declarations about what can go into a given position in the hierarchy (a "location requirement"). Each will be a block beginning either H_BEGIN or H_BEGIN_AP, and ending H_END. These can be nested, so we store the requirements on a stack.

An H_BEGIN(location) block declares what can go into a position in the hierarchy matching the location.

An H_BEGIN_AP(id, name, type) block can only be given inside another block, and says that there is an "attachment position" at this location. This means that a family of similarly-structured packages there, and each one has the contents which follow. Attachment positions like id are numbered with the *_HAP enumeration. Names for the packages are generated using name (they will then be numbered in sequence name_0, name_1 and so on), and they have type as their package type.

For example, this:

    submodule_identity *activities = LargeScale::register_submodule_identity(I"activities");
    H_BEGIN(LocationRequirements::local_submodule(activities))
        H_BEGIN_AP(ACTIVITIES_HAP,            I"activity", I"_activity")
            ...
        H_END
    H_END

declares that each compilation unit will have a package called activities of type _submodule. Inside that will be a numbered series of packages called activity_0, activity_1, ..., each one of type _activity. And inside each of those packages will be the ingredients specified by ....

Note that H_BEGIN_AP ... H_END blocks can be nested inside each other; in principle to any depth, though as it happens we never exceed 3.

define MAX_H_REQUIREMENTS_DEPTH 10
define H_BEGIN_DECLARATIONS 
    inter_tree *I = Emit::tree();
    location_requirement requirements[MAX_H_REQUIREMENTS_DEPTH];
    int req_sp = 0;
define H_BEGIN(r) 
    if (req_sp >= MAX_H_REQUIREMENTS_DEPTH) internal_error("too deep for me");
    requirements[req_sp++] = r;
define H_BEGIN_AP(a, b, c)
    HierarchyLocations::att(I, a, b, c, H_CURRENT);
    H_BEGIN(LocationRequirements::any_package_of_type(c))
define H_END 
    if (req_sp == 0) internal_error("too many H-exits");
    req_sp--;
define H_CURRENT 
    requirements[req_sp-1]
define H_END_DECLARATIONS 
    if (req_sp != 0) internal_error("hierarchy misaligned");

§3. So, other than H_BEGIN_AP ... H_END blocks, what can appear inside a block? The answer is that we can define four different things.

§4. A package can appear. id is the location ID, one of the *_HL enumerated values. name and type are then the package name and type.

define H_PKG(id, name, type) HierarchyLocations::pkg(I, id, name, type, H_CURRENT);

§5. A constant can appear. Constants, like cats, have three different names: the id is one of the *_HL enumeration values; the identifier is the identifier this constant will have within its Inter package; and the translation is the identifier that will be translated to when the Inter code is eventually converted to, say, Inform 6 code in our final output.

An important difference here is that Inter identifiers only have to be unique within their own packages, which are in effect namespaces. But translated identifiers have to be unique across the whole compiled program. Several different strategies are used to concoct these translated identifiers:

define H_C_T(id, n) HierarchyLocations::con(I, id, n,                              H_CURRENT);
define H_C_G(id, n) HierarchyLocations::ctr(I, id, NULL, Translation::generate(n), H_CURRENT);
define H_C_S(id, n) HierarchyLocations::ctr(I, id, NULL, Translation::suffix(n),   H_CURRENT);
define H_C_P(id, n) HierarchyLocations::ctr(I, id, NULL, Translation::prefix(n),   H_CURRENT);
define H_C_U(id, n) HierarchyLocations::ctr(I, id, n,    Translation::uniqued(),   H_CURRENT);
define H_C_I(id) HierarchyLocations::ctr(I, id, NULL, Translation::imposed(),   H_CURRENT);

§6. Functions use the same conventions, except that "imposition" never happens.

define H_F_T(id, n, t) HierarchyLocations::fun(I, id, n, Translation::to(t),       H_CURRENT);
define H_F_G(id, n, t) HierarchyLocations::fun(I, id, n, Translation::generate(t), H_CURRENT);
define H_F_S(id, n, t) HierarchyLocations::fun(I, id, n, Translation::suffix(t),   H_CURRENT);
define H_F_P(id, n, t) HierarchyLocations::fun(I, id, n, Translation::prefix(t),   H_CURRENT);
define H_F_U(id, n)    HierarchyLocations::fun(I, id, n, Translation::uniqued(),   H_CURRENT);

§7. Last and least, a datum can appear. id is the location ID, one of the *_HL enumerated values.

define H_D_T(id, ident, final) HierarchyLocations::dat(I, id, ident, Translation::to(final), H_CURRENT);

§8. We can finally give the single function which sets up almost the entire hierarchy. The eventual hierarchy will contain both

(1) material generated in the main compiler, such as functions derived from rule definitions, and also

(2) material added later in linking, for example from kits like WorldModelKit.

The following catalogue contains location and naming conventions for everything in category (1). Names in category (2) are set up in Synoptic Hierarchy (in pipeline) and The Standard Kits (in pipeline), but by very similar methods.

void Hierarchy::establish(void) {
    Packaging::incarnate(LargeScale::module_request(Emit::tree(), I"generic")->where_found);
    SynopticHierarchy::establish(Emit::tree());
    KitHierarchy::establish(Emit::tree());
    H_BEGIN_DECLARATIONS
    Establish locations for material created by the compiler8.1;
    Establish locations for material expected to be added by linking8.2;
    Prevent architectural symbols from being doubly defined8.3;
    H_END_DECLARATIONS
}

§8.1. Establish locations for material created by the compiler8.1 =

    Establish basics8.1.1;
    Establish modules8.1.2;
    Establish actions8.1.3;
    Establish activities8.1.4;
    Establish adjectives8.1.5;
    Establish bibliographic8.1.6;
    Establish chronology8.1.7;
    Establish conjugations8.1.8;
    Establish equations8.1.9;
    Establish external files8.1.10;
    Establish grammar8.1.11;
    Establish instances8.1.12;
    Establish int-fiction8.1.13;
    Establish internal files8.1.14;
    Establish kinds8.1.15;
    Establish literal patterns8.1.16;
    Establish mapping hints8.1.17;
    Establish phrases8.1.18;
    Establish properties8.1.19;
    Establish relations8.1.20;
    Establish rulebooks8.1.21;
    Establish rules8.1.22;
    Establish tables8.1.23;
    Establish use options8.1.24;
    Establish variables8.1.25;
    Establish enclosed matter8.1.26;
    The rest8.1.27;

§8.2. Establish locations for material expected to be added by linking8.2 =

    Establish architectural resources8.2.1;

§8.1.1. Basics.

enumerate BOGUS_HAP 0
enumerate I7_VERSION_NUMBER_HL 
enumerate I7_FULL_VERSION_NUMBER_HL 
enumerate VM_MD_HL 
enumerate VM_ICON_MD_HL 
enumerate LANGUAGE_ELEMENTS_USED_MD_HL 
enumerate LANGUAGE_ELEMENTS_NOT_USED_MD_HL 
enumerate MEMORY_ECONOMY_MD_HL 
enumerate MAX_INDEXED_FIGURES_HL 
enumerate COPYRIGHT_LICENCES_HL 
enumerate NO_TEST_SCENARIOS_HL 
enumerate MEMORY_HEAP_SIZE_HL 
enumerate LOCALPARKING_HL 
enumerate RNG_SEED_AT_START_OF_PLAY_HL 
enumerate MAX_FRAME_SIZE_NEEDED_HL 
enumerate SUBMAIN_HL 
enumerate AFTER_ACTION_HOOK_HL 
enumerate HEADINGS_HAP 
enumerate HEADING_INDEXABLE_MD_HL 
enumerate HEADING_TEXT_MD_HL 
enumerate HEADING_PARTS_MD_HL 
enumerate HEADING_PART1_MD_HL 
enumerate HEADING_PART2_MD_HL 
enumerate HEADING_PART3_MD_HL 
enumerate HEADING_AT_MD_HL 
enumerate HEADING_LEVEL_MD_HL 
enumerate HEADING_INDENTATION_MD_HL 
enumerate HEADING_WORD_COUNT_MD_HL 
enumerate HEADING_SUMMARY_MD_HL 
enumerate HEADING_ID_HL 
enumerate RTPS_HAP 
enumerate RTP_SOURCE_HL 
enumerate DEBUGGING_ASPECTS_HAP 
enumerate DEBUGGING_ASPECT_NAME_MD_HL 
enumerate DEBUGGING_ASPECT_USED_MD_HL 

Establish basics8.1.1 =

    submodule_identity *basics = LargeScale::register_submodule_identity(I"basics");

    H_BEGIN(LocationRequirements::completion_submodule(I, basics))
        H_C_T(I7_VERSION_NUMBER_HL,           I"I7_VERSION_NUMBER")
        H_C_T(I7_FULL_VERSION_NUMBER_HL,      I"I7_FULL_VERSION_NUMBER")
        H_C_T(VM_MD_HL,                       I"^virtual_machine")
        H_C_T(VM_ICON_MD_HL,                  I"^virtual_machine_icon")
        H_C_T(LANGUAGE_ELEMENTS_USED_MD_HL,   I"^language_elements_used")
        H_C_T(LANGUAGE_ELEMENTS_NOT_USED_MD_HL, I"^language_elements_not_used")
        H_C_T(MEMORY_ECONOMY_MD_HL,           I"^memory_economy")
        H_C_T(MEMORY_HEAP_SIZE_HL,            I"MEMORY_HEAP_SIZE")
        H_C_T(LOCALPARKING_HL,                I"LocalParking")
        H_C_T(RNG_SEED_AT_START_OF_PLAY_HL,   I"RNG_SEED_AT_START_OF_PLAY")
        H_C_T(MAX_INDEXED_FIGURES_HL,         I"^max_indexed_figures")
        H_C_T(COPYRIGHT_LICENCES_HL,          I"COPYRIGHT_LICENCE_TEXT")
        H_C_T(MAX_FRAME_SIZE_NEEDED_HL,       I"MAX_FRAME_SIZE_NEEDED")
        H_F_T(SUBMAIN_HL,                     I"Submain_fn", I"Submain")
        H_C_T(AFTER_ACTION_HOOK_HL,           I"AfterActionHook")
        H_BEGIN_AP(HEADINGS_HAP,              I"heading", I"_heading")
            H_C_U(HEADING_INDEXABLE_MD_HL,    I"^indexable")
            H_C_U(HEADING_TEXT_MD_HL,         I"^text")
            H_C_U(HEADING_PARTS_MD_HL,        I"^parts")
            H_C_U(HEADING_PART1_MD_HL,        I"^part1")
            H_C_U(HEADING_PART2_MD_HL,        I"^part2")
            H_C_U(HEADING_PART3_MD_HL,        I"^part3")
            H_C_U(HEADING_AT_MD_HL,           I"^at")
            H_C_U(HEADING_LEVEL_MD_HL,        I"^level")
            H_C_U(HEADING_INDENTATION_MD_HL,  I"^indentation")
            H_C_U(HEADING_WORD_COUNT_MD_HL,   I"^word_count")
            H_C_U(HEADING_SUMMARY_MD_HL,      I"^summary")
            H_C_U(HEADING_ID_HL,              I"id")
        H_END
        H_BEGIN_AP(RTPS_HAP,                  I"rtp_source", I"_rtp_source")
            H_C_U(RTP_SOURCE_HL,              I"location")
        H_END
        H_BEGIN_AP(DEBUGGING_ASPECTS_HAP,     I"debugging_aspect", I"_debugging_aspect")
            H_C_U(DEBUGGING_ASPECT_NAME_MD_HL, I"^name")
            H_C_U(DEBUGGING_ASPECT_USED_MD_HL, I"^used")
        H_END
    H_END

§8.1.2. Modules.

enumerate EXT_CATEGORY_MD_HL 
enumerate EXT_AT_MD_HL 
enumerate EXT_TITLE_MD_HL 
enumerate EXT_AUTHOR_MD_HL 
enumerate EXT_VERSION_MD_HL 
enumerate EXT_CREDIT_MD_HL 
enumerate EXT_EXTRA_CREDIT_MD_HL 
enumerate EXT_MODESTY_MD_HL 
enumerate EXT_WORD_COUNT_MD_HL 
enumerate EXT_INCLUDED_AT_MD_HL 
enumerate EXT_INCLUDED_BY_MD_HL 
enumerate EXT_AUTO_INCLUDED_MD_HL 
enumerate EXT_STANDARD_MD_HL 
enumerate EXTENSION_ID_HL 

Establish modules8.1.2 =

    H_BEGIN(LocationRequirements::any_package_of_type(I"_module"))
        H_C_U(EXT_CATEGORY_MD_HL,       I"^category")
        H_C_U(EXT_AT_MD_HL,             I"^at")
        H_C_U(EXT_TITLE_MD_HL,          I"^title")
        H_C_U(EXT_AUTHOR_MD_HL,         I"^author")
        H_C_U(EXT_VERSION_MD_HL,        I"^version")
        H_C_U(EXT_CREDIT_MD_HL,         I"^credit")
        H_C_U(EXT_EXTRA_CREDIT_MD_HL,   I"^extra_credit")
        H_C_U(EXT_MODESTY_MD_HL,        I"^modesty")
        H_C_U(EXT_WORD_COUNT_MD_HL,     I"^word_count")
        H_C_U(EXT_INCLUDED_AT_MD_HL,    I"^included_at")
        H_C_U(EXT_INCLUDED_BY_MD_HL,    I"^included_by")
        H_C_U(EXT_AUTO_INCLUDED_MD_HL,  I"^auto_included")
        H_C_U(EXT_STANDARD_MD_HL,       I"^standard")
        H_C_U(EXTENSION_ID_HL,          I"extension_id")
    H_END

§8.1.3. Actions.

enumerate ACTIONS_HAP 
enumerate ACTION_NAME_MD_HL 
enumerate ACTION_DISPLAY_NAME_MD_HL 
enumerate ACTION_PAST_NAME_MD_HL 
enumerate ACTION_AT_MD_HL 
enumerate ACTION_VARC_MD_HL 
enumerate DEBUG_ACTION_MD_HL 
enumerate ACTION_DSHARP_MD_HL 
enumerate NO_CODING_MD_HL 
enumerate OUT_OF_WORLD_MD_HL 
enumerate REQUIRES_LIGHT_MD_HL 
enumerate CAN_HAVE_NOUN_MD_HL 
enumerate CAN_HAVE_SECOND_MD_HL 
enumerate NOUN_ACCESS_MD_HL 
enumerate SECOND_ACCESS_MD_HL 
enumerate NOUN_KIND_MD_HL 
enumerate SECOND_KIND_MD_HL 
enumerate ACTION_CHECK_MD_HL 
enumerate ACTION_CARRY_OUT_MD_HL 
enumerate ACTION_REPORT_MD_HL 
enumerate ACTION_INDEX_HEADING_MD_HL 
enumerate ACTION_INDEX_SUBHEADING_MD_HL 
enumerate ACTION_SPECIFICATION_MD_HL 
enumerate ACTION_DESCRIPTION_MD_HL 
enumerate ACTION_ID_HL 
enumerate ACTION_BASE_NAME_HL 
enumerate WAIT_HL 
enumerate TRANSLATED_BASE_NAME_HL 
enumerate DOUBLE_SHARP_NAME_HL 
enumerate PERFORM_FN_HL 
enumerate DEBUG_ACTION_FN_HL 
enumerate CHECK_RB_HL 
enumerate CARRY_OUT_RB_HL 
enumerate REPORT_RB_HL 
enumerate ACTION_SHV_ID_HL 
enumerate ACTION_STV_CREATOR_FN_HL 
enumerate CG_LINES_PRODUCING_HAP 
enumerate CG_LINE_PRODUCING_MD_HL 
enumerate ACTION_VARIABLES_HAP 
enumerate ACTION_VAR_NAME_MD_HL 
enumerate ACTION_VAR_AT_MD_HL 
enumerate ACTION_VAR_DOCUMENTATION_MD_HL 
enumerate ACTION_VAR_KIND_MD_HL 
enumerate NAMED_ACTION_PATTERNS_HAP 
enumerate NAP_FN_HL 
enumerate NAP_NAME_MD_HL 
enumerate NAP_AT_MD_HL 
enumerate NAMED_ACTION_ENTRIES_HAP 
enumerate NAPE_TEXT_MD_HL 
enumerate NAPE_AT_MD_HL 

Establish actions8.1.3 =

    submodule_identity *actions = LargeScale::register_submodule_identity(I"actions");

    H_BEGIN(LocationRequirements::local_submodule(actions))
        H_BEGIN_AP(ACTIONS_HAP, I"action", I"_action")
            H_C_U(ACTION_NAME_MD_HL,             I"^name")
            H_C_U(ACTION_DISPLAY_NAME_MD_HL,     I"^display_name")
            H_C_U(ACTION_PAST_NAME_MD_HL,        I"^past_name")
            H_C_U(ACTION_AT_MD_HL,               I"^at")
            H_C_U(ACTION_VARC_MD_HL,             I"^var_creator")
            H_C_U(DEBUG_ACTION_MD_HL,            I"^debug_fn")
            H_C_U(ACTION_DSHARP_MD_HL,           I"^double_sharp")
            H_C_U(NO_CODING_MD_HL,               I"^no_coding")
            H_C_U(OUT_OF_WORLD_MD_HL,            I"^out_of_world")
            H_C_U(REQUIRES_LIGHT_MD_HL,          I"^requires_light")
            H_C_U(CAN_HAVE_NOUN_MD_HL,           I"^can_have_noun")
            H_C_U(CAN_HAVE_SECOND_MD_HL,         I"^can_have_second")
            H_C_U(NOUN_ACCESS_MD_HL,             I"^noun_access")
            H_C_U(SECOND_ACCESS_MD_HL,           I"^second_access")
            H_C_U(NOUN_KIND_MD_HL,               I"^noun_kind")
            H_C_U(SECOND_KIND_MD_HL,             I"^second_kind")
            H_C_U(ACTION_CHECK_MD_HL,            I"^check_rulebook")
            H_C_U(ACTION_CARRY_OUT_MD_HL,        I"^carry_out_rulebook")
            H_C_U(ACTION_REPORT_MD_HL,           I"^report_rulebook")
            H_C_U(ACTION_INDEX_HEADING_MD_HL,    I"^index_heading")
            H_C_U(ACTION_INDEX_SUBHEADING_MD_HL, I"^index_subheading")
            H_C_U(ACTION_SPECIFICATION_MD_HL,    I"^specification")
            H_C_U(ACTION_DESCRIPTION_MD_HL,      I"^description")
            H_C_U(ACTION_ID_HL,                  I"action_id")
            H_C_G(ACTION_BASE_NAME_HL,           I"A")
            H_C_T(WAIT_HL,                       I"Wait")
            H_C_I(TRANSLATED_BASE_NAME_HL)
            H_C_P(DOUBLE_SHARP_NAME_HL,          I"##")
            H_F_S(PERFORM_FN_HL,                 I"perform_fn", I"Sub")
            H_F_S(DEBUG_ACTION_FN_HL,            I"debug_fn", I"Dbg")
            H_PKG(CHECK_RB_HL,                   I"check_rb", I"_rulebook")
            H_PKG(CARRY_OUT_RB_HL,               I"carry_out_rb", I"_rulebook")
            H_PKG(REPORT_RB_HL,                  I"report_rb", I"_rulebook")
            H_C_U(ACTION_SHV_ID_HL,              I"var_id")
            H_F_U(ACTION_STV_CREATOR_FN_HL,      I"stv_creator_fn")
            H_BEGIN_AP(CG_LINES_PRODUCING_HAP,   I"cg_line", I"_cg_line")
                H_C_U(CG_LINE_PRODUCING_MD_HL,   I"^line")
            H_END
            H_BEGIN_AP(ACTION_VARIABLES_HAP, I"action_variable", I"_shared_variable")
                H_C_U(ACTION_VAR_NAME_MD_HL,     I"^name")
                H_C_U(ACTION_VAR_AT_MD_HL,       I"^at")
                H_C_U(ACTION_VAR_DOCUMENTATION_MD_HL, I"^documentation")
                H_C_U(ACTION_VAR_KIND_MD_HL,     I"^kind")
            H_END
        H_END
    H_END

    submodule_identity *naps = LargeScale::register_submodule_identity(I"named_action_patterns");

    H_BEGIN(LocationRequirements::local_submodule(naps))
        H_BEGIN_AP(NAMED_ACTION_PATTERNS_HAP, I"named_action_pattern", I"_named_action_pattern")
            H_F_U(NAP_FN_HL,                  I"nap_fn")
            H_C_U(NAP_NAME_MD_HL,             I"^name")
            H_C_U(NAP_AT_MD_HL,               I"^at")
            H_BEGIN_AP(NAMED_ACTION_ENTRIES_HAP, I"named_action_pattern_entry", I"_named_action_pattern_entry")
                H_C_U(NAPE_TEXT_MD_HL,         I"^text")
                H_C_U(NAPE_AT_MD_HL,           I"^at")
            H_END
        H_END
    H_END

§8.1.4. Activities.

enumerate ACTIVITIES_HAP 
enumerate ACTIVITY_NAME_MD_HL 
enumerate ACTIVITY_AT_MD_HL 
enumerate ACTIVITY_VAR_CREATOR_MD_HL 
enumerate ACTIVITY_BEFORE_MD_HL 
enumerate ACTIVITY_FOR_MD_HL 
enumerate ACTIVITY_AFTER_MD_HL 
enumerate ACTIVITY_UFA_MD_HL 
enumerate ACTIVITY_HID_MD_HL 
enumerate ACTIVITY_INDEX_ID_MD_HL 
enumerate ACTIVITY_DOCUMENTATION_MD_HL 
enumerate ACTIVITY_XREFS_HAP 
enumerate XREF_TEXT_MD_HL 
enumerate XREF_AT_MD_HL 
enumerate ACTIVITY_ID_HL 
enumerate ACTIVITY_VALUE_HL 
enumerate ACTIVITY_BEFORE_RB_HL 
enumerate ACTIVITY_FOR_RB_HL 
enumerate ACTIVITY_AFTER_RB_HL 
enumerate ACTIVITY_EMPTY_MD_HL 
enumerate ACTIVITY_SHV_ID_HL 
enumerate ACTIVITY_VARC_FN_HL 

Establish activities8.1.4 =

    submodule_identity *activities = LargeScale::register_submodule_identity(I"activities");

    H_BEGIN(LocationRequirements::local_submodule(activities))
        H_BEGIN_AP(ACTIVITIES_HAP,            I"activity", I"_activity")

            H_C_U(ACTIVITY_NAME_MD_HL,        I"^name")
            H_C_U(ACTIVITY_AT_MD_HL,          I"^at")
            H_C_U(ACTIVITY_BEFORE_MD_HL,      I"^before_rulebook")
            H_C_U(ACTIVITY_FOR_MD_HL,         I"^for_rulebook")
            H_C_U(ACTIVITY_AFTER_MD_HL,       I"^after_rulebook")
            H_C_U(ACTIVITY_EMPTY_MD_HL,       I"^empty")
            H_C_U(ACTIVITY_UFA_MD_HL,         I"^used_by_future")
            H_C_U(ACTIVITY_HID_MD_HL,         I"^hide_in_debugging")
            H_C_U(ACTIVITY_VAR_CREATOR_MD_HL, I"^var_creator")
            H_C_U(ACTIVITY_DOCUMENTATION_MD_HL, I"^documentation")
            H_C_U(ACTIVITY_INDEX_ID_MD_HL,    I"^index_id")
            H_BEGIN_AP(ACTIVITY_XREFS_HAP,    I"activity_xref", I"_activity_xref")
                H_C_U(XREF_TEXT_MD_HL,        I"^text")
                H_C_U(XREF_AT_MD_HL,          I"^at")
            H_END
            H_C_U(ACTIVITY_ID_HL,             I"activity_id")
            H_C_G(ACTIVITY_VALUE_HL,          I"V")
            H_PKG(ACTIVITY_BEFORE_RB_HL,      I"before_rb", I"_rulebook")
            H_PKG(ACTIVITY_FOR_RB_HL,         I"for_rb", I"_rulebook")
            H_PKG(ACTIVITY_AFTER_RB_HL,       I"after_rb", I"_rulebook")
            H_C_U(ACTIVITY_SHV_ID_HL,         I"var_id")
            H_F_U(ACTIVITY_VARC_FN_HL,        I"stv_creator_fn")
        H_END
    H_END

§8.1.5. Adjectives.

enumerate ADJECTIVES_HAP 
enumerate ADJECTIVE_HL 
enumerate ADJECTIVE_TEXT_MD_HL 
enumerate ADJECTIVE_INDEX_MD_HL 
enumerate MEASUREMENTS_HAP 
enumerate MEASUREMENT_FN_HL 
enumerate ADJECTIVE_PHRASES_HAP 
enumerate DEFINITION_FN_HL 
enumerate ADJECTIVE_TASKS_HAP 
enumerate TASK_FN_HL 

Establish adjectives8.1.5 =

    submodule_identity *adjectives = LargeScale::register_submodule_identity(I"adjectives");

    H_BEGIN(LocationRequirements::local_submodule(adjectives))
        H_BEGIN_AP(ADJECTIVES_HAP,            I"adjective", I"_adjective")
            H_C_U(ADJECTIVE_HL,               I"adjective")
            H_C_U(ADJECTIVE_TEXT_MD_HL,       I"^text")
            H_C_U(ADJECTIVE_INDEX_MD_HL,      I"^index_entry")
            H_BEGIN_AP(ADJECTIVE_TASKS_HAP,   I"adjective_task", I"_adjective_task")
                H_F_U(TASK_FN_HL,             I"task_fn")
            H_END
        H_END
        H_BEGIN_AP(MEASUREMENTS_HAP,          I"measurement", I"_measurement")
            H_F_G(MEASUREMENT_FN_HL,          I"measurement_fn", I"MADJ_Test")
        H_END
        H_BEGIN_AP(ADJECTIVE_PHRASES_HAP,     I"adjective_phrase", I"_adjective_phrase")
            H_F_G(DEFINITION_FN_HL,           I"measurement_fn", I"ADJDEFN")
        H_END
    H_END

§8.1.6. Bibliographic.

enumerate UUID_ARRAY_HL 
enumerate STORY_HL 
enumerate HEADLINE_HL 
enumerate STORY_AUTHOR_HL 
enumerate RELEASE_HL 
enumerate SERIAL_HL 
enumerate IFID_MD_HL 
enumerate STORY_MD_HL 
enumerate HEADLINE_MD_HL 
enumerate GENRE_MD_HL 
enumerate AUTHOR_MD_HL 
enumerate RELEASE_MD_HL 
enumerate STORY_VERSION_MD_HL 
enumerate SERIAL_MD_HL 
enumerate LANGUAGE_MD_HL 
enumerate DESCRIPTION_MD_HL 
enumerate LICENCE_MD_HL 
enumerate COPYRIGHT_MD_HL 
enumerate ORIGIN_URL_MD_HL 
enumerate RIGHTS_HISTORY_MD_HL 
enumerate EPISODE_NUMBER_MD_HL 
enumerate SERIES_NAME_MD_HL 
enumerate YEAR_MD_HL 

Establish bibliographic8.1.6 =

    submodule_identity *bibliographic = LargeScale::register_submodule_identity(I"bibliographic");

    H_BEGIN(LocationRequirements::completion_submodule(I, bibliographic))
        H_C_T(UUID_ARRAY_HL,                  I"UUID_ARRAY")
        H_D_T(STORY_HL,                       I"Story_datum", I"Story")
        H_D_T(HEADLINE_HL,                    I"Headline_datum", I"Headline")
        H_D_T(STORY_AUTHOR_HL,                I"Author_datum", I"Story_Author")
        H_D_T(RELEASE_HL,                     I"Release_datum", I"Release")
        H_D_T(SERIAL_HL,                      I"Serial_datum", I"Serial")
        H_C_T(IFID_MD_HL,                     I"^IFID")
        H_C_T(STORY_MD_HL,                    I"^title")
        H_C_T(HEADLINE_MD_HL,                 I"^headline")
        H_C_T(GENRE_MD_HL,                    I"^genre")
        H_C_T(AUTHOR_MD_HL,                   I"^author")
        H_C_T(RELEASE_MD_HL,                  I"^release")
        H_C_T(STORY_VERSION_MD_HL,            I"^version")
        H_C_T(SERIAL_MD_HL,                   I"^serial")
        H_C_T(LANGUAGE_MD_HL,                 I"^language")
        H_C_T(DESCRIPTION_MD_HL,              I"^description")
        H_C_T(LICENCE_MD_HL,                  I"^licence")
        H_C_T(COPYRIGHT_MD_HL,                I"^copyright")
        H_C_T(ORIGIN_URL_MD_HL,               I"^origin")
        H_C_T(RIGHTS_HISTORY_MD_HL,           I"^rights")
        H_C_T(EPISODE_NUMBER_MD_HL,           I"^episode")
        H_C_T(SERIES_NAME_MD_HL,              I"^series")
        H_C_T(YEAR_MD_HL,                     I"^year")
    H_END

§8.1.7. Chronology.

enumerate PAST_TENSE_CONDS_HAP 
enumerate PTC_ID_HL 
enumerate PTC_VALUE_MD_HL 
enumerate PTC_FN_HL 
enumerate ACTION_HISTORY_CONDS_HAP 
enumerate AHC_ID_HL 
enumerate AHC_VALUE_MD_HL 
enumerate AHC_FN_HL 

Establish chronology8.1.7 =

    submodule_identity *chronology = LargeScale::register_submodule_identity(I"chronology");

    H_BEGIN(LocationRequirements::local_submodule(chronology))
        H_BEGIN_AP(PAST_TENSE_CONDS_HAP, I"past_condition", I"_past_condition")
            H_C_U(PTC_ID_HL,                  I"ptc_id")
            H_C_U(PTC_VALUE_MD_HL,            I"^value")
            H_F_G(PTC_FN_HL,                  I"pcon_fn", I"PCONR")
        H_END
        H_BEGIN_AP(ACTION_HISTORY_CONDS_HAP,  I"action_history_condition", I"_action_history_condition")
            H_C_U(AHC_ID_HL,                  I"ahc_id")
            H_C_U(AHC_VALUE_MD_HL,            I"^value")
            H_F_G(AHC_FN_HL,                  I"pap_fn", I"PAPR")
        H_END
    H_END

§8.1.8. Conjugations.

enumerate CV_MEANING_HL 
enumerate CV_MODAL_HL 
enumerate CV_NEG_HL 
enumerate CV_POS_HL 
enumerate MVERBS_HAP 
enumerate MVERB_NAME_MD_HL 
enumerate MVERB_AT_MD_HL 
enumerate MVERB_INFINITIVE_MD_HL 
enumerate MODAL_CONJUGATION_FN_HL 
enumerate VERBS_HAP 
enumerate VERB_NAME_MD_HL 
enumerate VERB_AT_MD_HL 
enumerate VERB_INFINITIVE_MD_HL 
enumerate VERB_MEANING_MD_HL 
enumerate VERB_MEANINGLESS_MD_HL 
enumerate VERB_PRESENT_MD_HL 
enumerate VERB_PAST_MD_HL 
enumerate VERB_PRESENT_PERFECT_MD_HL 
enumerate VERB_PAST_PERFECT_MD_HL 
enumerate NONMODAL_CONJUGATION_FN_HL 
enumerate VERB_FORMS_HAP 
enumerate FORM_VALUE_MD_HL 
enumerate FORM_SORTING_MD_HL 
enumerate FORM_FN_HL 
enumerate CONJUGATION_FN_HL 
enumerate PREPOSITIONS_HAP 
enumerate PREPOSITION_NAME_MD_HL 
enumerate PREPOSITION_AT_MD_HL 

Establish conjugations8.1.8 =

    submodule_identity *conjugations = LargeScale::register_submodule_identity(I"conjugations");

    H_BEGIN(LocationRequirements::generic_submodule(I, conjugations))
        H_C_T(CV_MEANING_HL,                  I"CV_MEANING")
        H_C_T(CV_MODAL_HL,                    I"CV_MODAL")
        H_C_T(CV_NEG_HL,                      I"CV_NEG")
        H_C_T(CV_POS_HL,                      I"CV_POS")
    H_END

    H_BEGIN(LocationRequirements::local_submodule(conjugations))
        H_BEGIN_AP(MVERBS_HAP,                 I"modal_verb", I"_modal_verb")
            H_C_U(MVERB_NAME_MD_HL,            I"^name")
            H_C_U(MVERB_AT_MD_HL,              I"^at")
            H_C_U(MVERB_INFINITIVE_MD_HL,      I"^infinitive")
            H_F_G(MODAL_CONJUGATION_FN_HL,     I"conjugation_fn", I"ConjugateModalVerb")
        H_END
        H_BEGIN_AP(VERBS_HAP,                  I"verb", I"_verb")
            H_C_U(VERB_NAME_MD_HL,             I"^name")
            H_C_U(VERB_AT_MD_HL,               I"^at")
            H_C_U(VERB_INFINITIVE_MD_HL,       I"^infinitive")
            H_C_U(VERB_MEANING_MD_HL,          I"^meaning")
            H_C_U(VERB_MEANINGLESS_MD_HL,      I"^meaningless")
            H_C_U(VERB_PRESENT_MD_HL,          I"^present")
            H_C_U(VERB_PAST_MD_HL,             I"^past")
            H_C_U(VERB_PRESENT_PERFECT_MD_HL,  I"^present_perfect")
            H_C_U(VERB_PAST_PERFECT_MD_HL,     I"^past_perfect")
            H_F_G(NONMODAL_CONJUGATION_FN_HL,  I"conjugation_fn", I"ConjugateVerb")
            H_BEGIN_AP(VERB_FORMS_HAP,         I"form", I"_verb_form")
                H_C_U(FORM_VALUE_MD_HL,        I"^verb_value")
                H_C_U(FORM_SORTING_MD_HL,      I"^verb_sorting")
                H_F_U(FORM_FN_HL,              I"form_fn")
            H_END
        H_END
        H_BEGIN_AP(PREPOSITIONS_HAP,           I"preposition", I"_preposition")
            H_C_U(PREPOSITION_NAME_MD_HL,      I"^text")
            H_C_U(PREPOSITION_AT_MD_HL,        I"^at")
        H_END
    H_END

§8.1.9. Equations.

enumerate EQUATIONS_HAP 
enumerate IDENTIFIER_FN_HL 
enumerate EQUATION_NAME_MD_HL 
enumerate EQUATION_TEXT_MD_HL 
enumerate EQUATION_AT_MD_HL 

Establish equations8.1.9 =

    submodule_identity *equations = LargeScale::register_submodule_identity(I"equations");

    H_BEGIN(LocationRequirements::local_submodule(equations))
        H_BEGIN_AP(EQUATIONS_HAP,             I"equation", I"_equation")
            H_C_U(EQUATION_NAME_MD_HL,        I"^name")
            H_C_U(EQUATION_TEXT_MD_HL,        I"^text")
            H_C_U(EQUATION_AT_MD_HL,          I"^at")
            H_F_U(IDENTIFIER_FN_HL,           I"identifier_fn")
        H_END
    H_END

§8.1.10. External files.

enumerate EXTERNAL_FILES_HAP 
enumerate FILE_HL 
enumerate IFID_HL 

Establish external files8.1.10 =

    submodule_identity *external_files = LargeScale::register_submodule_identity(I"external_files");

    H_BEGIN(LocationRequirements::local_submodule(external_files))
        H_BEGIN_AP(EXTERNAL_FILES_HAP,        I"external_file", I"_external_file")
            H_C_U(FILE_HL,                    I"file")
            H_C_U(IFID_HL,                    I"ifid")
        H_END
    H_END

§8.1.11. Grammar.

enumerate COND_TOKENS_HAP 
enumerate CONDITIONAL_TOKEN_FN_HL 
enumerate TESTS_HAP 
enumerate SCRIPT_HL 
enumerate TEST_MD_HL 
enumerate TEST_NAME_MD_HL 
enumerate TEST_LENGTH_MD_HL 
enumerate REQUIREMENTS_HL 
enumerate MISTAKES_HAP 
enumerate MISTAKE_FN_HL 
enumerate NOUN_FILTERS_HAP 
enumerate NOUN_FILTER_FN_HL 
enumerate PARSE_NAMES_HAP 
enumerate PARSE_NAME_FN_HL 
enumerate SCOPE_FILTERS_HAP 
enumerate SCOPE_FILTER_FN_HL 
enumerate SLASH_TOKENS_HAP 
enumerate SLASH_FN_HL 
enumerate REPARSE_CODE_HL 
enumerate DICT_ENTRY_BYTES_HL 
enumerate DICT_WORD_SIZE_HL 
enumerate VERB_DIRECTIVE_META_HL 
enumerate VERB_DIRECTIVE_NOUN_FILTER_HL 
enumerate VERB_DIRECTIVE_SCOPE_FILTER_HL 
enumerate VERB_DIRECTIVE_CREATURE_HL 
enumerate VERB_DIRECTIVE_DIVIDER_HL 
enumerate VERB_DIRECTIVE_HELD_HL 
enumerate VERB_DIRECTIVE_MULTI_HL 
enumerate VERB_DIRECTIVE_MULTIEXCEPT_HL 
enumerate VERB_DIRECTIVE_MULTIHELD_HL 
enumerate VERB_DIRECTIVE_MULTIINSIDE_HL 
enumerate VERB_DIRECTIVE_NOUN_HL 
enumerate VERB_DIRECTIVE_NUMBER_HL 
enumerate VERB_DIRECTIVE_RESULT_HL 
enumerate VERB_DIRECTIVE_REVERSE_HL 
enumerate VERB_DIRECTIVE_SLASH_HL 
enumerate VERB_DIRECTIVE_SPECIAL_HL 
enumerate VERB_DIRECTIVE_TOPIC_HL 
enumerate OBJECT_NOUNS_HAP 
enumerate NAME_ARRAY_HL 
enumerate COMMANDS_HAP 
enumerate VERB_DECLARATION_ARRAY_HL 
enumerate MISTAKEACTION_HL 
enumerate MISTAKEACTIONSUB_HL 
enumerate COMMAND_GRAMMARS_HAP 
enumerate CG_IS_COMMAND_MD_HL 
enumerate CG_IS_TOKEN_MD_HL 
enumerate CG_IS_SUBJECT_MD_HL 
enumerate CG_IS_VALUE_MD_HL 
enumerate CG_IS_CONSULT_MD_HL 
enumerate CG_IS_PROPERTY_NAME_MD_HL 
enumerate CG_AT_MD_HL 
enumerate CG_NAME_MD_HL 
enumerate CG_COMMAND_MD_HL 
enumerate PROPERTY_GPR_FN_HL 
enumerate PARSE_LINE_FN_HL 
enumerate CONSULT_FN_HL 
enumerate NO_VERB_VERB_DEFINED_HL 
enumerate CG_COMMAND_ALIASES_HAP 
enumerate CG_ALIAS_MD_HL 
enumerate CG_LINES_HAP 
enumerate CG_XREF_SYMBOL_HL 
enumerate CG_LINE_TEXT_MD_HL 
enumerate CG_LINE_AT_MD_HL 
enumerate CG_ACTION_MD_HL 
enumerate CG_LINE_REVERSED_MD_HL 
enumerate CG_TRUE_VERB_MD_HL 

Establish grammar8.1.11 =

    submodule_identity *grammar = LargeScale::register_submodule_identity(I"grammar");

    H_BEGIN(LocationRequirements::generic_submodule(I, grammar))
        H_C_T(REPARSE_CODE_HL,                I"REPARSE_CODE")
        H_C_T(DICT_ENTRY_BYTES_HL,            I"DICT_ENTRY_BYTES")
        H_C_T(DICT_WORD_SIZE_HL,              I"DICT_WORD_SIZE")
        H_C_T(VERB_DIRECTIVE_META_HL,         I"VERB_DIRECTIVE_META")
        H_C_T(VERB_DIRECTIVE_NOUN_FILTER_HL,  I"VERB_DIRECTIVE_NOUN_FILTER")
        H_C_T(VERB_DIRECTIVE_SCOPE_FILTER_HL, I"VERB_DIRECTIVE_SCOPE_FILTER")
        H_C_T(VERB_DIRECTIVE_CREATURE_HL,     I"VERB_DIRECTIVE_CREATURE")
        H_C_T(VERB_DIRECTIVE_DIVIDER_HL,      I"VERB_DIRECTIVE_DIVIDER")
        H_C_T(VERB_DIRECTIVE_HELD_HL,         I"VERB_DIRECTIVE_HELD")
        H_C_T(VERB_DIRECTIVE_MULTI_HL,        I"VERB_DIRECTIVE_MULTI")
        H_C_T(VERB_DIRECTIVE_MULTIEXCEPT_HL,  I"VERB_DIRECTIVE_MULTIEXCEPT")
        H_C_T(VERB_DIRECTIVE_MULTIHELD_HL,    I"VERB_DIRECTIVE_MULTIHELD")
        H_C_T(VERB_DIRECTIVE_MULTIINSIDE_HL,  I"VERB_DIRECTIVE_MULTIINSIDE")
        H_C_T(VERB_DIRECTIVE_NOUN_HL,         I"VERB_DIRECTIVE_NOUN")
        H_C_T(VERB_DIRECTIVE_NUMBER_HL,       I"VERB_DIRECTIVE_NUMBER")
        H_C_T(VERB_DIRECTIVE_RESULT_HL,       I"VERB_DIRECTIVE_RESULT")
        H_C_T(VERB_DIRECTIVE_REVERSE_HL,      I"VERB_DIRECTIVE_REVERSE")
        H_C_T(VERB_DIRECTIVE_SLASH_HL,        I"VERB_DIRECTIVE_SLASH")
        H_C_T(VERB_DIRECTIVE_SPECIAL_HL,      I"VERB_DIRECTIVE_SPECIAL")
        H_C_T(VERB_DIRECTIVE_TOPIC_HL,        I"VERB_DIRECTIVE_TOPIC")
        H_C_T(MISTAKEACTION_HL,               I"##MistakeAction")
    H_END

    H_BEGIN(LocationRequirements::local_submodule(grammar))
        H_BEGIN_AP(TESTS_HAP,                 I"test", I"_test")
            H_C_U(TEST_NAME_MD_HL,            I"^name")
            H_C_U(TEST_LENGTH_MD_HL,          I"^length")
            H_C_U(SCRIPT_HL,                  I"script")
            H_C_U(REQUIREMENTS_HL,            I"requirements")
        H_END
        H_BEGIN_AP(MISTAKES_HAP,              I"mistake", I"_mistake")
            H_F_G(MISTAKE_FN_HL,              I"mistake_fn", I"Mistake_Token")
        H_END
        H_BEGIN_AP(NOUN_FILTERS_HAP,          I"noun_filter", I"_noun_filter")
            H_F_G(NOUN_FILTER_FN_HL,          I"filter_fn", I"Noun_Filter")
        H_END
        H_BEGIN_AP(SCOPE_FILTERS_HAP,         I"scope_filter", I"_scope_filter")
            H_F_G(SCOPE_FILTER_FN_HL,         I"filter_fn", I"Scope_Filter")
        H_END
        H_BEGIN_AP(PARSE_NAMES_HAP,           I"parse_name", I"_parse_name")
        H_END
        H_BEGIN_AP(SLASH_TOKENS_HAP,          I"slash_token", I"_slash_token")
            H_F_G(SLASH_FN_HL,                I"slash_fn", I"SlashGPR")
        H_END
    H_END

    H_BEGIN(LocationRequirements::completion_submodule(I, grammar))
        H_BEGIN_AP(OBJECT_NOUNS_HAP,          I"object_noun", I"_object_noun")
            H_F_G(NAME_ARRAY_HL,              I"name_array", I"name_array")
            H_F_G(PARSE_NAME_FN_HL,           I"parse_name_fn", I"parse_name")
        H_END
        H_BEGIN_AP(COMMANDS_HAP,              I"command", I"_command")
            H_F_G(VERB_DECLARATION_ARRAY_HL,  NULL, I"GV_Grammar")
            H_C_T(NO_VERB_VERB_DEFINED_HL,    I"NO_VERB_VERB_DEFINED")
        H_END
        H_BEGIN_AP(COMMAND_GRAMMARS_HAP,      I"command_grammar", I"_command_grammar")
            H_C_U(CG_IS_COMMAND_MD_HL,        I"^is_command")
            H_C_U(CG_IS_TOKEN_MD_HL,          I"^is_token")
            H_C_U(CG_IS_SUBJECT_MD_HL,        I"^is_subject")
            H_C_U(CG_IS_VALUE_MD_HL,          I"^is_value")
            H_C_U(CG_IS_CONSULT_MD_HL,        I"^is_consult")
            H_C_U(CG_IS_PROPERTY_NAME_MD_HL,  I"^is_property_name")
            H_C_U(CG_AT_MD_HL,                I"^at")
            H_C_U(CG_NAME_MD_HL,              I"^name")
            H_C_U(CG_COMMAND_MD_HL,           I"^command")
            H_F_G(PROPERTY_GPR_FN_HL,         I"either_or_GPR_fn", I"PRN_PN")
            H_F_G(PARSE_LINE_FN_HL,           I"parse_line_fn", I"GPR_Line")
            H_F_G(CONSULT_FN_HL,              I"consult_fn", I"Consult_Grammar")
            H_BEGIN_AP(CG_COMMAND_ALIASES_HAP, I"cg_alias", I"_cg_alias")
                H_C_U(CG_ALIAS_MD_HL,         I"^alias")
            H_END
            H_BEGIN_AP(CG_LINES_HAP,          I"cg_line", I"_cg_line")
                H_C_U(CG_XREF_SYMBOL_HL,      I"line_ref")
                H_C_U(CG_LINE_TEXT_MD_HL,     I"^text")
                H_C_U(CG_LINE_AT_MD_HL,       I"^at")
                H_C_U(CG_ACTION_MD_HL,        I"^action")
                H_C_U(CG_TRUE_VERB_MD_HL,     I"^true_verb")
                H_C_U(CG_LINE_REVERSED_MD_HL, I"^reversed")
            H_END
        H_END
        H_BEGIN_AP(COND_TOKENS_HAP,           I"conditional_token", I"_conditional_token")
            H_F_G(CONDITIONAL_TOKEN_FN_HL,    I"conditional_token_fn", I"Cond_Token")
        H_END
        H_F_T(MISTAKEACTIONSUB_HL,            I"MistakeActionSub_fn", I"MistakeActionSub")
    H_END

§8.1.12. Instances.

enumerate INSTANCES_HAP 
enumerate INSTANCE_NAME_MD_HL 
enumerate INSTANCE_DECLARATION_ORDER_MD_HL 
enumerate INSTANCE_PRINTED_NAME_MD_HL 
enumerate INSTANCE_ABBREVIATION_MD_HL 
enumerate INSTANCE_AT_MD_HL 
enumerate INSTANCE_KIND_SET_AT_MD_HL 
enumerate INSTANCE_PROGENITOR_SET_AT_MD_HL 
enumerate INSTANCE_REGION_SET_AT_MD_HL 
enumerate INSTANCE_VALUE_MD_HL 
enumerate INSTANCE_KIND_MD_HL 
enumerate INSTANCE_KIND_XREF_MD_HL 
enumerate INSTANCE_INDEX_KIND_MD_HL 
enumerate INSTANCE_INDEX_KIND_CHAIN_MD_HL 
enumerate INSTANCE_IS_OBJECT_MD_HL 
enumerate INSTANCE_IS_SCENE_MD_HL 
enumerate INSTANCE_IS_ENTIRE_GAME_MD_HL 
enumerate INSTANCE_SCENE_STARTS_MD_HL 
enumerate INSTANCE_SCENE_STARTS_ON_CONDITION_MD_HL 
enumerate INSTANCE_SCENE_STARTS_ON_BEAT_MD_HL 
enumerate INSTANCE_SCENE_ENDS_ON_BEAT_MD_HL 
enumerate INSTANCE_SCENE_RECURS_MD_HL 
enumerate INSTANCE_SCENE_NEVER_ENDS_MD_HL 
enumerate INSTANCE_IS_EXF_MD_HL 
enumerate INSTANCE_IS_INF_MD_HL 
enumerate INSTANCE_FILE_VALUE_MD_HL 
enumerate INSTANCE_INTERNAL_FILE_FORMAT_MD_HL 
enumerate INSTANCE_INTERNAL_FILE_ID_MD_HL 
enumerate INSTANCE_FILE_IS_BINARY_MD_HL 
enumerate INSTANCE_FILE_OWNED_MD_HL 
enumerate INSTANCE_FILE_OWNED_BY_OTHER_MD_HL 
enumerate INSTANCE_FILE_OWNER_MD_HL 
enumerate INSTANCE_LEAFNAME_MD_HL 
enumerate INSTANCE_IS_FIGURE_MD_HL 
enumerate INSTANCE_FIGURE_ID_MD_HL 
enumerate INSTANCE_FIGURE_FILENAME_MD_HL 
enumerate INSTANCE_IS_SOUND_MD_HL 
enumerate INSTANCE_SOUND_FILENAME_MD_HL 
enumerate INSTANCE_SOUND_ID_MD_HL 
enumerate INSTANCE_SSF_MD_HL 
enumerate INSTANCE_SCF_MD_HL 
enumerate INSTANCE_IS_WORN_MD_HL 
enumerate INSTANCE_IS_EVERYWHERE_MD_HL 
enumerate INSTANCE_IS_A_PART_MD_HL 
enumerate INSTANCE_IS_YOURSELF_MD_HL 
enumerate INSTANCE_IS_BENCHMARK_ROOM_MD_HL 
enumerate INSTANCE_IS_START_ROOM_MD_HL 
enumerate INSTANCE_IS_THING_MD_HL 
enumerate INSTANCE_IS_SUPPORTER_MD_HL 
enumerate INSTANCE_IS_PERSON_MD_HL 
enumerate INSTANCE_IS_ROOM_MD_HL 
enumerate INSTANCE_IS_DOOR_MD_HL 
enumerate INSTANCE_SPATIAL_DEPTH_MD_HL 
enumerate INSTANCE_DOOR_OTHER_SIDE_MD_HL 
enumerate INSTANCE_DOOR_SIDE_A_MD_HL 
enumerate INSTANCE_DOOR_SIDE_B_MD_HL 
enumerate INSTANCE_IS_REGION_MD_HL 
enumerate INSTANCE_IS_DIRECTION_MD_HL 
enumerate INSTANCE_OPPOSITE_DIRECTION_MD_HL 
enumerate INSTANCE_IS_BACKDROP_MD_HL 
enumerate INSTANCE_BACKDROP_PRESENCES_MD_HL 
enumerate INSTANCE_REGION_ENCLOSING_MD_HL 
enumerate INSTANCE_SIBLING_MD_HL 
enumerate INSTANCE_CHILD_MD_HL 
enumerate INSTANCE_PROGENITOR_MD_HL 
enumerate INSTANCE_INCORP_SIBLING_MD_HL 
enumerate INSTANCE_INCORP_CHILD_MD_HL 
enumerate INSTANCE_MAP_MD_HL 
enumerate INSTANCE_USAGES_MD_HL 
enumerate INSTANCE_BRIEF_INFERENCES_MD_HL 
enumerate INSTANCE_SPECIFIC_INFERENCES_MD_HL 
enumerate SCENE_ENDS_HAP 
enumerate SCENE_END_NAME_MD_HL 
enumerate SCENE_END_AT_MD_HL 
enumerate SCENE_END_CONDITION_MD_HL 
enumerate SCENE_END_RULEBOOK_MD_HL 
enumerate SCENE_CONNECTORS_HAP 
enumerate SCENE_CONNECTOR_TO_MD_HL 
enumerate SCENE_CONNECTOR_END_MD_HL 
enumerate SCENE_CONNECTOR_AT_MD_HL 
enumerate INST_SHOWME_MD_HL 
enumerate INST_SHOWME_FN_HL 
enumerate INSTANCE_HL 
enumerate SCENE_STATUS_FN_HL 
enumerate SCENE_CHANGE_FN_HL 
enumerate BACKDROP_FOUND_IN_FN_HL 
enumerate REGION_FOUND_IN_FN_HL 
enumerate SHORT_NAME_FN_HL 
enumerate SHORT_NAME_PROPERTY_FN_HL 
enumerate TSD_DOOR_DIR_FN_HL 
enumerate TSD_DOOR_TO_FN_HL 
enumerate INLINE_PROPERTIES_HAP 
enumerate INLINE_PROPERTY_HL 
enumerate DIRECTION_HL 
enumerate INSTANCE_IS_DB_MD_HL 
enumerate INSTANCE_IS_DL_MD_HL 
enumerate INSTANCE_IS_DC_MD_HL 
enumerate BEAT_ARRAY_MD_HL 
enumerate BEAT_ARRAY_HL 
enumerate BEAT_AVAILABLE_FN_HL 
enumerate BEAT_RELEVANT_FN_HL 
enumerate BEAT_STRUCTURE_HL 
enumerate BEAT_SPEAKERS_HL 
enumerate LINE_ARRAY_MD_HL 
enumerate LINE_ARRAY_HL 
enumerate LINE_AVAILABLE_FN_HL 
enumerate LINE_SPEAKER_FN_HL 
enumerate LINE_INTERLOCUTOR_FN_HL 
enumerate LINE_MENTIONING_FN_HL 
enumerate LINE_ACTION_FN_HL 
enumerate CHOICE_ARRAY_MD_HL 
enumerate CHOICE_ARRAY_HL 
enumerate CHOICE_AVAILABLE_FN_HL 
enumerate CHOICE_ACTION_MATCH_FN_HL 
enumerate CHOICE_PERFORMANCE_FN_HL 

Establish instances8.1.12 =

    submodule_identity *instances = LargeScale::register_submodule_identity(I"instances");

    H_BEGIN(LocationRequirements::local_submodule(instances))
        H_BEGIN_AP(INSTANCES_HAP,                           I"instance", I"_instance")
            H_C_U(INSTANCE_NAME_MD_HL,                      I"^name")
            H_C_U(INSTANCE_DECLARATION_ORDER_MD_HL,         I"^declaration_order")
            H_C_U(INSTANCE_PRINTED_NAME_MD_HL,              I"^printed_name")
            H_C_U(INSTANCE_ABBREVIATION_MD_HL,              I"^abbreviation")
            H_C_U(INSTANCE_AT_MD_HL,                        I"^at")
            H_C_U(INSTANCE_KIND_SET_AT_MD_HL,               I"^kind_set_at")
            H_C_U(INSTANCE_PROGENITOR_SET_AT_MD_HL,         I"^progenitor_set_at")
            H_C_U(INSTANCE_REGION_SET_AT_MD_HL,             I"^region_set_at")
            H_C_U(INSTANCE_VALUE_MD_HL,                     I"^value")
            H_C_U(INSTANCE_KIND_MD_HL,                      I"^kind")
            H_C_U(INSTANCE_KIND_XREF_MD_HL,                 I"^kind_xref")
            H_C_U(INSTANCE_INDEX_KIND_MD_HL,                I"^index_kind")
            H_C_U(INSTANCE_INDEX_KIND_CHAIN_MD_HL,          I"^index_kind_chain")
            H_C_U(INSTANCE_IS_OBJECT_MD_HL,                 I"^is_object")
            H_C_U(INSTANCE_IS_SCENE_MD_HL,                  I"^is_scene")
            H_C_U(INSTANCE_IS_WORN_MD_HL,                   I"^is_worn")
            H_C_U(INSTANCE_IS_EVERYWHERE_MD_HL,             I"^is_everywhere")
            H_C_U(INSTANCE_IS_A_PART_MD_HL,                 I"^is_a_part")
            H_C_U(INSTANCE_IS_YOURSELF_MD_HL,               I"^is_yourself")
            H_C_U(INSTANCE_IS_BENCHMARK_ROOM_MD_HL,         I"^is_benchmark_room")
            H_C_U(INSTANCE_IS_START_ROOM_MD_HL,             I"^is_start_room")
            H_C_U(INSTANCE_IS_ENTIRE_GAME_MD_HL,            I"^is_entire_game")
            H_C_U(INSTANCE_SCENE_STARTS_MD_HL,              I"^starts")
            H_C_U(INSTANCE_SCENE_STARTS_ON_CONDITION_MD_HL, I"^starts_on_condition")
            H_C_U(INSTANCE_SCENE_STARTS_ON_BEAT_MD_HL,      I"^starts_on_beat")
            H_C_U(INSTANCE_SCENE_ENDS_ON_BEAT_MD_HL,        I"^ends_on_beat")
            H_C_U(INSTANCE_SCENE_RECURS_MD_HL,              I"^recurs")
            H_C_U(INSTANCE_SCENE_NEVER_ENDS_MD_HL,          I"^never_ends")
            H_C_U(INSTANCE_SSF_MD_HL,                       I"^scene_status_fn")
            H_C_U(INSTANCE_SCF_MD_HL,                       I"^scene_change_fn")
            H_BEGIN_AP(SCENE_ENDS_HAP,                      I"scene_end", I"_scene_end")
                H_C_U(SCENE_END_NAME_MD_HL,                 I"^name")
                H_C_U(SCENE_END_AT_MD_HL,                   I"^at")
                H_C_U(SCENE_END_CONDITION_MD_HL,            I"^condition")
                H_C_U(SCENE_END_RULEBOOK_MD_HL,             I"^rulebook")
                H_BEGIN_AP(SCENE_CONNECTORS_HAP,            I"scene_connector", I"_scene_connector")
                    H_C_U(SCENE_CONNECTOR_TO_MD_HL,         I"^to")
                    H_C_U(SCENE_CONNECTOR_END_MD_HL,        I"^end")
                    H_C_U(SCENE_CONNECTOR_AT_MD_HL,         I"^at")
                H_END
            H_END
            H_C_U(INSTANCE_IS_EXF_MD_HL,                    I"^is_file")
            H_C_U(INSTANCE_IS_INF_MD_HL,                    I"^is_internal_file")
            H_C_U(INSTANCE_FILE_VALUE_MD_HL,                I"^file_value")
            H_C_U(INSTANCE_FILE_OWNED_MD_HL,                I"^file_owned")
            H_C_U(INSTANCE_FILE_OWNED_BY_OTHER_MD_HL,       I"^file_owned_by_other")
            H_C_U(INSTANCE_FILE_OWNER_MD_HL,                I"^file_owner")
            H_C_U(INSTANCE_INTERNAL_FILE_FORMAT_MD_HL,      I"^internal_file_format")
            H_C_U(INSTANCE_INTERNAL_FILE_ID_MD_HL,          I"^resource_id")
            H_C_U(INSTANCE_FILE_IS_BINARY_MD_HL,            I"^is_binary")
            H_C_U(INSTANCE_LEAFNAME_MD_HL,                  I"^leafname")
            H_C_U(INSTANCE_IS_FIGURE_MD_HL,                 I"^is_figure")
            H_C_U(INSTANCE_FIGURE_FILENAME_MD_HL,           I"^filename")
            H_C_U(INSTANCE_FIGURE_ID_MD_HL,                 I"^resource_id")
            H_C_U(INSTANCE_IS_SOUND_MD_HL,                  I"^is_sound")
            H_C_U(INSTANCE_SOUND_FILENAME_MD_HL,            I"^filename")
            H_C_U(INSTANCE_SOUND_ID_MD_HL,                  I"^resource_id")
            H_C_U(INST_SHOWME_MD_HL,                        I"^showme_fn")
            H_C_U(INSTANCE_IS_THING_MD_HL,                  I"^is_thing")
            H_C_U(INSTANCE_IS_SUPPORTER_MD_HL,              I"^is_supporter")
            H_C_U(INSTANCE_IS_PERSON_MD_HL,                 I"^is_person")
            H_C_U(INSTANCE_IS_ROOM_MD_HL,                   I"^is_room")
            H_C_U(INSTANCE_IS_DOOR_MD_HL,                   I"^is_door")
            H_C_U(INSTANCE_SPATIAL_DEPTH_MD_HL,             I"^spatial_depth")
            H_C_U(INSTANCE_DOOR_OTHER_SIDE_MD_HL,           I"^other_side")
            H_C_U(INSTANCE_DOOR_SIDE_A_MD_HL,               I"^side_a")
            H_C_U(INSTANCE_DOOR_SIDE_B_MD_HL,               I"^side_b")
            H_C_U(INSTANCE_IS_REGION_MD_HL,                 I"^is_region")
            H_C_U(INSTANCE_IS_DIRECTION_MD_HL,              I"^is_direction")
            H_C_U(INSTANCE_OPPOSITE_DIRECTION_MD_HL,        I"^opposite_direction")
            H_C_U(INSTANCE_IS_BACKDROP_MD_HL,               I"^is_backdrop")
            H_C_U(INSTANCE_BACKDROP_PRESENCES_MD_HL,        I"^backdrop_presences")
            H_C_U(INSTANCE_REGION_ENCLOSING_MD_HL,          I"^region_enclosing")
            H_C_U(INSTANCE_SIBLING_MD_HL,                   I"^sibling")
            H_C_U(INSTANCE_CHILD_MD_HL,                     I"^child")
            H_C_U(INSTANCE_PROGENITOR_MD_HL,                I"^progenitor")
            H_C_U(INSTANCE_INCORP_SIBLING_MD_HL,            I"^incorp_sibling")
            H_C_U(INSTANCE_INCORP_CHILD_MD_HL,              I"^incorp_child")
            H_C_U(INSTANCE_MAP_MD_HL,                       I"^map")
            H_C_U(INSTANCE_USAGES_MD_HL,                    I"^usages")
            H_C_U(INSTANCE_BRIEF_INFERENCES_MD_HL,          I"^brief_inferences")
            H_C_U(INSTANCE_SPECIFIC_INFERENCES_MD_HL,       I"^specific_inferences")
            H_C_U(INSTANCE_HL,                              I"I")
            H_F_U(SCENE_STATUS_FN_HL,                       I"scene_status_fn")
            H_F_U(SCENE_CHANGE_FN_HL,                       I"scene_change_fn")
            H_F_U(BACKDROP_FOUND_IN_FN_HL,                  I"backdrop_found_in_fn")
            H_F_G(SHORT_NAME_FN_HL,                         I"short_name_fn", I"SN_R")
            H_F_G(SHORT_NAME_PROPERTY_FN_HL,                I"short_name_property_fn", I"SN_R_A")
            H_F_G(REGION_FOUND_IN_FN_HL,                    I"region_found_in_fn", I"RFI_for_I")
            H_F_G(TSD_DOOR_DIR_FN_HL,                       I"tsd_door_dir_fn", I"TSD_door_dir_value")
            H_F_G(TSD_DOOR_TO_FN_HL,                        I"tsd_door_to_fn", I"TSD_door_to_value")
            H_C_U(INSTANCE_IS_DB_MD_HL,                     I"^is_dialogue_beat")
            H_C_U(INSTANCE_IS_DL_MD_HL,                     I"^is_dialogue_line")
            H_C_U(INSTANCE_IS_DC_MD_HL,                     I"^is_dialogue_choice")
            H_C_U(BEAT_ARRAY_MD_HL,                         I"^beat_data")
            H_C_U(BEAT_ARRAY_HL,                            I"beat_data")
            H_F_U(BEAT_AVAILABLE_FN_HL,                     I"available_fn")
            H_F_U(BEAT_RELEVANT_FN_HL,                      I"relevant_fn")
            H_C_U(BEAT_STRUCTURE_HL,                        I"structure")
            H_C_U(BEAT_SPEAKERS_HL,                         I"speakers")
            H_C_U(LINE_ARRAY_MD_HL,                         I"^line_data")
            H_C_U(LINE_ARRAY_HL,                            I"line_data")
            H_F_U(LINE_AVAILABLE_FN_HL,                     I"available_fn")
            H_F_U(LINE_SPEAKER_FN_HL,                       I"speaker_fn")
            H_F_U(LINE_INTERLOCUTOR_FN_HL,                  I"interlocutor_fn")
            H_F_U(LINE_MENTIONING_FN_HL,                    I"mentioning_fn")
            H_F_U(LINE_ACTION_FN_HL,                        I"action_fn")
            H_C_U(CHOICE_ARRAY_MD_HL,                       I"^choice_data")
            H_C_U(CHOICE_ARRAY_HL,                          I"choice_data")
            H_F_U(CHOICE_AVAILABLE_FN_HL,                   I"available_fn")
            H_F_U(CHOICE_ACTION_MATCH_FN_HL,                I"action_match_fn")
            H_F_U(CHOICE_PERFORMANCE_FN_HL,                 I"performance_fn")
            H_F_U(INST_SHOWME_FN_HL,                        I"showme_fn")
            H_BEGIN_AP(INLINE_PROPERTIES_HAP,               I"inline_property", I"_inline_property")
                H_C_U(INLINE_PROPERTY_HL,                   I"inline")
            H_END
            H_C_G(DIRECTION_HL,                             I"DirectionObject")
        H_END
    H_END

§8.1.13. Interactive Fiction.

enumerate PLAYER_OBJECT_INIS_HL 
enumerate START_OBJECT_INIS_HL 
enumerate START_ROOM_INIS_HL 
enumerate START_TIME_INIS_HL 
enumerate START_BEAT_INIS_HL 
enumerate DONE_INIS_HL 
enumerate NO_DIRECTIONS_HL 
enumerate MAP_STORAGE_HL 
enumerate INITIALSITUATION_HL 

Establish int-fiction8.1.13 =

    submodule_identity *interactive_fiction = LargeScale::register_submodule_identity(I"interactive_fiction");

    H_BEGIN(LocationRequirements::generic_submodule(I, interactive_fiction))
        H_C_T(PLAYER_OBJECT_INIS_HL,          I"PLAYER_OBJECT_INIS")
        H_C_T(START_OBJECT_INIS_HL,           I"START_OBJECT_INIS")
        H_C_T(START_ROOM_INIS_HL,             I"START_ROOM_INIS")
        H_C_T(START_TIME_INIS_HL,             I"START_TIME_INIS")
        H_C_T(START_BEAT_INIS_HL,             I"START_BEAT_INIS")
        H_C_T(DONE_INIS_HL,                   I"DONE_INIS")
    H_END

    H_BEGIN(LocationRequirements::completion_submodule(I, interactive_fiction))
        H_C_T(NO_DIRECTIONS_HL,               I"No_Directions")
        H_C_T(MAP_STORAGE_HL,                 I"Map_Storage")
        H_C_T(INITIALSITUATION_HL,            I"InitialSituation")
    H_END

§8.1.14. Internal files.

enumerate INTERNAL_FILES_HAP 
enumerate INTERNAL_FILE_HL 

Establish internal files8.1.14 =

    submodule_identity *internal_files = LargeScale::register_submodule_identity(I"internal_files");

    H_BEGIN(LocationRequirements::local_submodule(internal_files))
        H_BEGIN_AP(INTERNAL_FILES_HAP,        I"internal_file", I"_internal_file")
            H_C_U(INTERNAL_FILE_HL,           I"file")
        H_END
    H_END

§8.1.15. Kinds.

enumerate K_UNCHECKED_HL 
enumerate K_UNCHECKED_FUNCTION_HL 
enumerate K_UNCHECKED_LIST_HL 
enumerate K_INT32_HL 
enumerate K_INT2_HL 
enumerate K_STRING_HL 
enumerate KIND_HAP 
enumerate KIND_NAME_MD_HL 
enumerate KIND_SOURCE_ORDER_MD_HL 
enumerate KIND_DECLARATION_ORDER_MD_HL 
enumerate KIND_SPECIFICATION_MD_HL 
enumerate KIND_AT_MD_HL 
enumerate KIND_CLASS_MD_HL 
enumerate KIND_PNAME_MD_HL 
enumerate KIND_INDEX_VARIANCE_MD_HL 
enumerate KIND_INDEX_SINGULAR_MD_HL 
enumerate KIND_INDEX_PLURAL_MD_HL 
enumerate KIND_SHOWME_MD_HL 
enumerate KIND_IS_BASE_MD_HL 
enumerate KIND_IS_PROPER_MD_HL 
enumerate KIND_IS_QUASINUMERICAL_MD_HL 
enumerate KIND_IS_DEF_MD_HL 
enumerate KIND_IS_OBJECT_MD_HL 
enumerate INDEX_SUPERKIND_MD_HL 
enumerate KIND_IS_SKOO_MD_HL 
enumerate KIND_HAS_BV_MD_HL 
enumerate KIND_WEAK_ID_MD_HL 
enumerate KIND_STRONG_ID_MD_HL 
enumerate KIND_PRINT_FN_MD_HL 
enumerate KIND_CMP_FN_MD_HL 
enumerate KIND_CREATE_FN_MD_HL 
enumerate KIND_CAST_FN_MD_HL 
enumerate KIND_COPY_FN_MD_HL 
enumerate KIND_COPY_SHORT_BLOCK_FN_MD_HL 
enumerate KIND_QUICK_COPY_FN_MD_HL 
enumerate KIND_DESTROY_FN_MD_HL 
enumerate KIND_MAKE_MUTABLE_FN_MD_HL 
enumerate KIND_HASH_FN_MD_HL 
enumerate KIND_SHORT_BLOCK_SIZE_MD_HL 
enumerate KIND_LONG_BLOCK_SIZE_MD_HL 
enumerate KIND_LONG_BLOCK_SIZE_FN_MD_HL 
enumerate KIND_SERIALISE_FN_MD_HL 
enumerate KIND_UNSERIALISE_FN_MD_HL 
enumerate KIND_MKDEF_FN_MD_HL 
enumerate KIND_DSIZE_MD_HL 
enumerate KIND_DOCUMENTATION_MD_HL 
enumerate KIND_INDEX_PRIORITY_MD_HL 
enumerate SUPERKIND_MD_HL 
enumerate RUCKSACK_CLASS_MD_HL 
enumerate MIN_VAL_INDEX_MD_HL 
enumerate MAX_VAL_INDEX_MD_HL 
enumerate KIND_INDEX_NOTATION_MD_HL 
enumerate DIMENSIONS_INDEX_MD_HL 
enumerate KIND_SHADED_MD_HL 
enumerate KIND_FINITE_DOMAIN_MD_HL 
enumerate KIND_HAS_PROPERTIES_MD_HL 
enumerate KIND_UNDERSTANDABLE_MD_HL 
enumerate KIND_INDEX_DEFAULT_MD_HL 
enumerate KIND_INSTANCE_COUNT_MD_HL 
enumerate KIND_INFERENCES_MD_HL 
enumerate KIND_BRIEF_INFERENCES_MD_HL 
enumerate WEAK_ID_HL 
enumerate ICOUNT_HL 
enumerate FWMATRIX_SIZE_HL 
enumerate NUM_DOORS_HL 
enumerate NUM_ROOMS_HL 
enumerate ENUMERATION_ARRAY_MD_HL 
enumerate KIND_XREF_SYMBOL_HL 
enumerate DECREMENT_FN_HL 
enumerate INCREMENT_FN_HL 
enumerate PRINT_FN_HL 
enumerate PRINT_DASH_FN_HL 
enumerate MKDEF_FN_HL 
enumerate RANGER_FN_HL 
enumerate INDEXING_FN_HL 
enumerate DEFAULT_CLOSURE_FN_HL 
enumerate GPR_FN_HL 
enumerate SHOWME_FN_HL 
enumerate INSTANCE_GPR_FN_HL 
enumerate INSTANCE_LIST_HL 
enumerate FIRST_INSTANCE_HL 
enumerate INSTANCES_ARRAY_HL 
enumerate NEXT_INSTANCE_HL 
enumerate BASE_IK_1_HL 
enumerate BASE_IK_2_HL 
enumerate BASE_IK_3_HL 
enumerate BASE_IK_4_HL 
enumerate BASE_IK_5_HL 
enumerate BASE_IK_6_HL 
enumerate BASE_IK_7_HL 
enumerate BASE_IK_8_HL 
enumerate BASE_IK_9_HL 
enumerate BASE_IK_10_HL 
enumerate BASE_IK_HL 
enumerate KIND_INLINE_PROPERTIES_HAP 
enumerate KIND_INLINE_PROPERTY_HL 
enumerate KIND_PROPERTIES_HAP 
enumerate KIND_CONFORMANCE_HAP 
enumerate CONFORMED_TO_MD_HL 
enumerate DERIVED_KIND_HAP 
enumerate DK_NEEDED_MD_HL 
enumerate DK_STRONG_ID_HL 
enumerate DK_KIND_HL 
enumerate DK_DEFAULT_VALUE_HL 
enumerate KIND_CLASS_HL 
enumerate MULTIPLICATION_RULE_HAP 
enumerate SET_AT_MD_HL 
enumerate LEFT_OPERAND_MD_HL 
enumerate RIGHT_OPERAND_MD_HL 
enumerate RESULT_MD_HL 
enumerate LEFT_OPERAND_BM_MD_HL 
enumerate RIGHT_OPERAND_BM_MD_HL 
enumerate RESULT_BM_MD_HL 

Establish kinds8.1.15 =

    submodule_identity *kinds = LargeScale::register_submodule_identity(I"kinds");

    H_BEGIN(LocationRequirements::generic_submodule(I, kinds))
        H_C_T(K_UNCHECKED_HL,                 I"K_unchecked")
        H_C_T(K_UNCHECKED_FUNCTION_HL,        I"K_unchecked_function")
        H_C_T(K_UNCHECKED_LIST_HL,            I"K_unchecked_list")
        H_C_T(K_INT32_HL,                     I"K_int32")
        H_C_T(K_INT2_HL,                      I"K_int2")
        H_C_T(K_STRING_HL,                    I"K_string")
    H_END

    H_BEGIN(LocationRequirements::local_submodule(kinds))
        H_BEGIN_AP(KIND_HAP,                  I"kind", I"_kind")
            H_C_U(KIND_NAME_MD_HL,            I"^name")
            H_C_U(KIND_SOURCE_ORDER_MD_HL,    I"^source_order")
            H_C_U(KIND_DECLARATION_ORDER_MD_HL, I"^declaration_order")
            H_C_U(KIND_SPECIFICATION_MD_HL,   I"^specification")
            H_C_U(KIND_AT_MD_HL,              I"^at")
            H_C_U(KIND_CLASS_MD_HL,           I"^object_class")
            H_C_U(KIND_PNAME_MD_HL,           I"^printed_name")
            H_C_U(KIND_INDEX_SINGULAR_MD_HL,  I"^index_singular")
            H_C_U(KIND_INDEX_PLURAL_MD_HL,    I"^index_plural")
            H_C_U(KIND_INDEX_VARIANCE_MD_HL,  I"^variance")
            H_C_U(KIND_SHOWME_MD_HL,          I"^showme_fn")
            H_C_U(KIND_IS_BASE_MD_HL,         I"^is_base")
            H_C_U(KIND_IS_PROPER_MD_HL,       I"^is_proper")
            H_C_U(KIND_IS_QUASINUMERICAL_MD_HL, I"^is_quasinumerical")
            H_C_U(KIND_IS_DEF_MD_HL,          I"^is_definite")
            H_C_U(KIND_IS_OBJECT_MD_HL,       I"^is_object")
            H_C_U(KIND_IS_SKOO_MD_HL,         I"^is_subkind_of_object")
            H_C_U(INDEX_SUPERKIND_MD_HL,      I"^index_superkind")
            H_C_U(KIND_HAS_BV_MD_HL,          I"^has_block_values")
            H_C_U(KIND_WEAK_ID_MD_HL,         I"^weak_id")
            H_C_U(KIND_STRONG_ID_MD_HL,       I"^strong_id")
            H_C_U(KIND_CMP_FN_MD_HL,          I"^cmp_fn")
            H_C_U(KIND_PRINT_FN_MD_HL,        I"^print_fn")
            H_C_U(KIND_CREATE_FN_MD_HL,       I"^create_fn")
            H_C_U(KIND_CAST_FN_MD_HL,         I"^cast_fn")
            H_C_U(KIND_COPY_FN_MD_HL,         I"^copy_fn")
            H_C_U(KIND_COPY_SHORT_BLOCK_FN_MD_HL, I"^copy_short_block_fn")
            H_C_U(KIND_QUICK_COPY_FN_MD_HL,   I"^quick_copy_fn")
            H_C_U(KIND_DESTROY_FN_MD_HL,      I"^destroy_fn")
            H_C_U(KIND_MAKE_MUTABLE_FN_MD_HL, I"^make_mutable_fn")
            H_C_U(KIND_HASH_FN_MD_HL,         I"^hash_fn")
            H_C_U(KIND_SHORT_BLOCK_SIZE_MD_HL, I"^short_block_size")
            H_C_U(KIND_LONG_BLOCK_SIZE_MD_HL, I"^long_block_size")
            H_C_U(KIND_LONG_BLOCK_SIZE_FN_MD_HL, I"^long_block_size_fn")
            H_C_U(KIND_SERIALISE_FN_MD_HL,    I"^serialise_fn")
            H_C_U(KIND_UNSERIALISE_FN_MD_HL,  I"^unserialise_fn")
            H_C_U(KIND_MKDEF_FN_MD_HL,        I"^mkdef_fn")
            H_C_U(KIND_DSIZE_MD_HL,           I"^domain_size")
            H_C_U(RUCKSACK_CLASS_MD_HL,       I"^rucksack_class")
            H_C_U(MIN_VAL_INDEX_MD_HL,        I"^min_value")
            H_C_U(MAX_VAL_INDEX_MD_HL,        I"^max_value")
            H_C_U(KIND_INDEX_NOTATION_MD_HL,  I"^notation")
            H_C_U(DIMENSIONS_INDEX_MD_HL,     I"^dimensions")
            H_C_U(KIND_DOCUMENTATION_MD_HL,   I"^documentation")
            H_C_U(KIND_INDEX_PRIORITY_MD_HL,  I"^index_priority")
            H_C_U(SUPERKIND_MD_HL,            I"^superkind")
            H_C_U(KIND_SHADED_MD_HL,          I"^shaded_in_index")
            H_C_U(KIND_FINITE_DOMAIN_MD_HL,   I"^finite_domain")
            H_C_U(KIND_HAS_PROPERTIES_MD_HL,  I"^has_properties")
            H_C_U(KIND_UNDERSTANDABLE_MD_HL,  I"^understandable")
            H_C_U(KIND_INDEX_DEFAULT_MD_HL,   I"^index_default")
            H_C_U(KIND_INSTANCE_COUNT_MD_HL,  I"^instance_count")
            H_C_U(KIND_BRIEF_INFERENCES_MD_HL, I"^brief_inferences")
            H_C_U(KIND_INFERENCES_MD_HL,      I"^inferences")
            H_C_I(WEAK_ID_HL)
            H_C_I(ICOUNT_HL)
            H_C_U(ENUMERATION_ARRAY_MD_HL,    I"^enumeration_array")
            H_C_U(FWMATRIX_SIZE_HL,           I"FWMATRIX_SIZE")
            H_C_U(NUM_DOORS_HL,               I"NUM_DOORS")
            H_C_U(NUM_ROOMS_HL,               I"NUM_ROOMS")
            H_C_U(KIND_XREF_SYMBOL_HL,        I"kind_ref")
            H_F_U(MKDEF_FN_HL,                I"mkdef_fn")
            H_F_U(DECREMENT_FN_HL,            I"decrement_fn")
            H_F_U(INCREMENT_FN_HL,            I"increment_fn")
            H_F_U(PRINT_FN_HL,                I"print_fn")
            H_F_G(PRINT_DASH_FN_HL,           I"print_fn", I"E")
            H_F_U(RANGER_FN_HL,               I"ranger_fn")
            H_F_U(INDEXING_FN_HL,             I"indexing_fn")
            H_F_U(DEFAULT_CLOSURE_FN_HL,      I"default_closure_fn")
            H_F_U(GPR_FN_HL,                  I"gpr_fn")
            H_F_U(INSTANCE_GPR_FN_HL,         I"instance_gpr_fn")
            H_C_U(INSTANCE_LIST_HL,           I"instance_list")
            H_F_U(SHOWME_FN_HL,               I"showme_fn")
            H_C_S(FIRST_INSTANCE_HL,          I"_First")
            H_C_S(NEXT_INSTANCE_HL,           I"_Next")
            H_C_S(INSTANCES_ARRAY_HL,         I"_Array")
            H_C_T(BASE_IK_1_HL,               I"IK1_Count")
            H_C_T(BASE_IK_2_HL,               I"IK2_Count")
            H_C_T(BASE_IK_3_HL,               I"IK3_Count")
            H_C_T(BASE_IK_4_HL,               I"IK4_Count")
            H_C_T(BASE_IK_5_HL,               I"IK5_Count")
            H_C_T(BASE_IK_6_HL,               I"IK6_Count")
            H_C_T(BASE_IK_7_HL,               I"IK7_Count")
            H_C_T(BASE_IK_8_HL,               I"IK8_Count")
            H_C_T(BASE_IK_9_HL,               I"IK9_Count")
            H_C_T(BASE_IK_10_HL,              I"IK10_Count")
            H_C_S(BASE_IK_HL,                 I"_Count")
            H_C_G(KIND_CLASS_HL,              I"K")
            H_BEGIN_AP(KIND_INLINE_PROPERTIES_HAP, I"inline_property", I"_inline_property")
                H_C_U(KIND_INLINE_PROPERTY_HL, I"inline")
            H_END
            H_BEGIN_AP(KIND_CONFORMANCE_HAP,  I"conformance", I"_conformance")
                H_C_U(CONFORMED_TO_MD_HL,     I"^conformed_to")
            H_END
        H_END
        H_BEGIN_AP(DERIVED_KIND_HAP,          I"derived_kind", I"_derived_kind")
            H_C_U(DK_NEEDED_MD_HL,            I"^default_value_needed")
            H_C_U(DK_STRONG_ID_HL,            I"strong_id")
            H_C_G(DK_KIND_HL,                 I"DK")
            H_C_U(DK_DEFAULT_VALUE_HL,        I"default_value")
        H_END
        H_BEGIN_AP(KIND_PROPERTIES_HAP,       I"property", I"_property")
        H_END
    H_END

    H_BEGIN(LocationRequirements::completion_submodule(I, kinds))
        H_BEGIN_AP(MULTIPLICATION_RULE_HAP,   I"multiplication_rule", I"_multiplication_rule")
            H_C_U(SET_AT_MD_HL,               I"^at")
            H_C_U(LEFT_OPERAND_MD_HL,         I"^left_operand")
            H_C_U(RIGHT_OPERAND_MD_HL,        I"^right_operand")
            H_C_U(RESULT_MD_HL,               I"^result")
            H_C_U(LEFT_OPERAND_BM_MD_HL,      I"^left_operand_benchmark")
            H_C_U(RIGHT_OPERAND_BM_MD_HL,     I"^right_operand_benchmark")
            H_C_U(RESULT_BM_MD_HL,            I"^result_benchmark")
        H_END
    H_END

§8.1.16. Literal patterns.

enumerate LITERAL_PATTERNS_HAP 
enumerate LP_PRINT_FN_HL 
enumerate LP_PARSE_FN_HL 

Establish literal patterns8.1.16 =

    submodule_identity *literals = LargeScale::register_submodule_identity(I"literal_patterns");

    H_BEGIN(LocationRequirements::local_submodule(literals))
        H_BEGIN_AP(LITERAL_PATTERNS_HAP,      I"literal_pattern", I"_literal_pattern")
            H_F_U(LP_PRINT_FN_HL,             I"print_fn")
            H_F_U(LP_PARSE_FN_HL,             I"parse_fn")
        H_END
    H_END

§8.1.17. Mapping hints.

enumerate MAPPING_HINTS_HAP 
enumerate MH_FROM_HL 
enumerate MH_TO_HL 
enumerate MH_DIR_HL 
enumerate MH_AS_DIR_HL 
enumerate MH_NAME_HL 
enumerate MH_SCOPE_LEVEL_HL 
enumerate MH_SCOPE_INSTANCE_HL 
enumerate MH_TEXT_HL 
enumerate MH_NUMBER_HL 
enumerate MH_ANNOTATION_HL 
enumerate MH_POINT_SIZE_HL 
enumerate MH_FONT_HL 
enumerate MH_COLOUR_HL 
enumerate MH_OFFSET_HL 
enumerate MH_OFFSET_FROM_HL 

Establish mapping hints8.1.17 =

    submodule_identity *hints = LargeScale::register_submodule_identity(I"mapping_hints");

    H_BEGIN(LocationRequirements::completion_submodule(I, hints))
        H_BEGIN_AP(MAPPING_HINTS_HAP,      I"mapping_hint", I"_mapping_hint")
            H_C_U(MH_FROM_HL,              I"^from")
            H_C_U(MH_TO_HL,                I"^to")
            H_C_U(MH_DIR_HL,               I"^dir")
            H_C_U(MH_AS_DIR_HL,            I"^as_dir")
            H_C_U(MH_NAME_HL,              I"^name")
            H_C_U(MH_SCOPE_LEVEL_HL,       I"^scope_level")
            H_C_U(MH_SCOPE_INSTANCE_HL,    I"^scope_instance")
            H_C_U(MH_TEXT_HL,              I"^text")
            H_C_U(MH_NUMBER_HL,            I"^number")
            H_C_U(MH_ANNOTATION_HL,        I"^annotation")
            H_C_U(MH_POINT_SIZE_HL,        I"^point_size")
            H_C_U(MH_FONT_HL,              I"^font")
            H_C_U(MH_COLOUR_HL,            I"^colour")
            H_C_U(MH_OFFSET_HL,            I"^offset")
            H_C_U(MH_OFFSET_FROM_HL,       I"^offset_from")
        H_END
    H_END

§8.1.18. Phrases.

enumerate CLOSURES_HAP 
enumerate CLOSURE_DATA_HL 
enumerate PHRASES_HAP 
enumerate REQUESTS_HAP 
enumerate PHRASE_SYNTAX_MD_HL 
enumerate PHRASE_FN_HL 
enumerate LABEL_STORAGES_HAP 
enumerate LABEL_ASSOCIATED_STORAGE_HL 
enumerate PHRASEBOOK_SUPER_HEADING_HAP 
enumerate PHRASEBOOK_SUPER_HEADING_TEXT_MD_HL 
enumerate PHRASEBOOK_HEADING_HAP 
enumerate PHRASEBOOK_HEADING_TEXT_MD_HL 
enumerate PHRASEBOOK_ENTRY_HAP 
enumerate PHRASEBOOK_ENTRY_TEXT_MD_HL 

Establish phrases8.1.18 =

    submodule_identity *phrases = LargeScale::register_submodule_identity(I"phrases");

    H_BEGIN(LocationRequirements::local_submodule(phrases))
        H_BEGIN_AP(PHRASES_HAP,               I"phrase", I"_to_phrase")
            H_BEGIN_AP(CLOSURES_HAP,          I"closure", I"_closure")
                H_C_U(CLOSURE_DATA_HL,        I"closure_data")
            H_END
            H_BEGIN_AP(REQUESTS_HAP,          I"request", I"_request")
                H_C_U(PHRASE_SYNTAX_MD_HL,    I"^phrase_syntax")
                H_F_U(PHRASE_FN_HL,           I"phrase_fn")
            H_END
        H_END
    H_END

    H_BEGIN(LocationRequirements::any_enclosure())
        H_BEGIN_AP(LABEL_STORAGES_HAP,        I"label_storage", I"_label_storage")
            H_C_U(LABEL_ASSOCIATED_STORAGE_HL, I"label_associated_storage")
        H_END
    H_END

    H_BEGIN(LocationRequirements::completion_submodule(I, phrases))
        H_BEGIN_AP(PHRASEBOOK_SUPER_HEADING_HAP,       I"phrasebook_super_heading", I"_phrasebook_super_heading")
            H_C_U(PHRASEBOOK_SUPER_HEADING_TEXT_MD_HL, I"^text")
            H_BEGIN_AP(PHRASEBOOK_HEADING_HAP,         I"phrasebook_heading", I"_phrasebook_heading")
                H_C_U(PHRASEBOOK_HEADING_TEXT_MD_HL,   I"^text")
                H_BEGIN_AP(PHRASEBOOK_ENTRY_HAP,       I"phrasebook_entry", I"_phrasebook_entry")
                    H_C_U(PHRASEBOOK_ENTRY_TEXT_MD_HL, I"^text")
                H_END
            H_END
        H_END
    H_END

§8.1.19. Properties.

enumerate PROPERTIES_HAP 
enumerate PROPERTY_NAME_MD_HL 
enumerate PROPERTY_ORDER_MD_HL 
enumerate PROPERTY_ID_HL 
enumerate PROPERTY_HL 

Establish properties8.1.19 =

    submodule_identity *properties = LargeScale::register_submodule_identity(I"properties");

    H_BEGIN(LocationRequirements::local_submodule(properties))
        H_BEGIN_AP(PROPERTIES_HAP,            I"property", I"_property")
            H_C_U(PROPERTY_NAME_MD_HL,        I"^name")
            H_C_U(PROPERTY_ORDER_MD_HL,       I"^source_order")
            H_C_U(PROPERTY_ID_HL,             I"property_id")
            H_C_G(PROPERTY_HL,                I"P")
        H_END
    H_END

§8.1.20. Relations.

enumerate RELS_ASSERT_FALSE_HL 
enumerate RELS_ASSERT_TRUE_HL 
enumerate RELS_EQUIVALENCE_HL 
enumerate RELS_LIST_HL 
enumerate RELS_LOOKUP_ALL_X_HL 
enumerate RELS_LOOKUP_ALL_Y_HL 
enumerate RELS_LOOKUP_ANY_HL 
enumerate RELS_ROUTE_FIND_COUNT_HL 
enumerate RELS_ROUTE_FIND_HL 
enumerate RELS_SHOW_HL 
enumerate RELS_SYMMETRIC_HL 
enumerate RELS_TEST_HL 
enumerate RELS_X_UNIQUE_HL 
enumerate RELS_Y_UNIQUE_HL 
enumerate REL_BLOCK_HEADER_HL 
enumerate TTF_SUM_HL 
enumerate MEANINGLESS_RR_HL 
enumerate RELATIONS_HAP 
enumerate RELATION_NAME_MD_HL 
enumerate RELATION_DESCRIPTION_MD_HL 
enumerate RELATION_AT_MD_HL 
enumerate RELATION_TERM0_MD_HL 
enumerate RELATION_TERM1_MD_HL 
enumerate RELATION_VALUE_MD_HL 
enumerate RELATION_CREATOR_MD_HL 
enumerate RELATION_ID_HL 
enumerate RELATION_RECORD_HL 
enumerate BITMAP_HL 
enumerate ABILITIES_HL 
enumerate ROUTE_CACHE_HL 
enumerate HANDLER_FN_HL 
enumerate RELATION_INITIALISER_FN_HL 
enumerate GUARD_F0_FN_HL 
enumerate GUARD_F1_FN_HL 
enumerate GUARD_TEST_FN_HL 
enumerate GUARD_MAKE_TRUE_FN_HL 
enumerate GUARD_MAKE_FALSE_INAME_HL 
enumerate RELATION_FN_HL 
enumerate RELATION_CREATOR_FN_HL 

Establish relations8.1.20 =

    submodule_identity *relations = LargeScale::register_submodule_identity(I"relations");

    H_BEGIN(LocationRequirements::generic_submodule(I, relations))
        H_C_T(RELS_ASSERT_FALSE_HL,           I"RELS_ASSERT_FALSE")
        H_C_T(RELS_ASSERT_TRUE_HL,            I"RELS_ASSERT_TRUE")
        H_C_T(RELS_EQUIVALENCE_HL,            I"RELS_EQUIVALENCE")
        H_C_T(RELS_LIST_HL,                   I"RELS_LIST")
        H_C_T(RELS_LOOKUP_ALL_X_HL,           I"RELS_LOOKUP_ALL_X")
        H_C_T(RELS_LOOKUP_ALL_Y_HL,           I"RELS_LOOKUP_ALL_Y")
        H_C_T(RELS_LOOKUP_ANY_HL,             I"RELS_LOOKUP_ANY")
        H_C_T(RELS_ROUTE_FIND_COUNT_HL,       I"RELS_ROUTE_FIND_COUNT")
        H_C_T(RELS_ROUTE_FIND_HL,             I"RELS_ROUTE_FIND")
        H_C_T(RELS_SHOW_HL,                   I"RELS_SHOW")
        H_C_T(RELS_SYMMETRIC_HL,              I"RELS_SYMMETRIC")
        H_C_T(RELS_TEST_HL,                   I"RELS_TEST")
        H_C_T(RELS_X_UNIQUE_HL,               I"RELS_X_UNIQUE")
        H_C_T(RELS_Y_UNIQUE_HL,               I"RELS_Y_UNIQUE")
        H_C_T(REL_BLOCK_HEADER_HL,            I"REL_BLOCK_HEADER")
        H_C_T(TTF_SUM_HL,                     I"TTF_sum")
        H_C_T(MEANINGLESS_RR_HL,              I"MEANINGLESS_RR")
    H_END

    H_BEGIN(LocationRequirements::local_submodule(relations))
        H_BEGIN_AP(RELATIONS_HAP,             I"relation", I"_relation")
            H_C_U(RELATION_NAME_MD_HL,        I"^name")
            H_C_U(RELATION_AT_MD_HL,          I"^at")
            H_C_U(RELATION_DESCRIPTION_MD_HL, I"^description")
            H_C_U(RELATION_TERM0_MD_HL,       I"^term0")
            H_C_U(RELATION_TERM1_MD_HL,       I"^term1")
            H_C_U(RELATION_VALUE_MD_HL,       I"^value")
            H_C_U(RELATION_CREATOR_MD_HL,     I"^creator")
            H_C_U(RELATION_ID_HL,             I"relation_id")
            H_C_G(RELATION_RECORD_HL,         I"Rel_Record")
            H_C_U(BITMAP_HL,                  I"as_constant")
            H_C_U(ABILITIES_HL,               I"abilities")
            H_C_U(ROUTE_CACHE_HL,             I"route_cache")
            H_F_U(HANDLER_FN_HL,              I"handler_fn")
            H_F_U(RELATION_INITIALISER_FN_HL, I"relation_initialiser_fn")
            H_F_U(GUARD_F0_FN_HL,             I"guard_f0_fn")
            H_F_U(GUARD_F1_FN_HL,             I"guard_f1_fn")
            H_F_U(GUARD_TEST_FN_HL,           I"guard_test_fn")
            H_F_U(GUARD_MAKE_TRUE_FN_HL,      I"guard_make_true_fn")
            H_F_U(GUARD_MAKE_FALSE_INAME_HL,  I"guard_make_false_iname")
            H_F_U(RELATION_FN_HL,             I"relation_fn")
            H_F_U(RELATION_CREATOR_FN_HL,     I"creator_fn")
        H_END
    H_END

§8.1.21. Rulebooks.

enumerate RBNO4_INAME_HL 
enumerate RBNO3_INAME_HL 
enumerate RBNO2_INAME_HL 
enumerate RBNO1_INAME_HL 
enumerate RBNO0_INAME_HL 
enumerate OUTCOMES_HAP 
enumerate OUTCOME_NAME_MD_HL 
enumerate OUTCOME_HL 
enumerate RULEBOOKS_HAP 
enumerate RULEBOOK_AT_MD_HL 
enumerate RULEBOOK_NAME_MD_HL 
enumerate RULEBOOK_PNAME_MD_HL 
enumerate RULEBOOK_VARC_MD_HL 
enumerate RULEBOOK_INDEX_ID_MD_HL 
enumerate RULEBOOK_RUN_FN_MD_HL 
enumerate RULEBOOK_ID_HL 
enumerate RULEBOOK_TRANS_ID_HL 
enumerate RULEBOOK_FOCUS_MD_HL 
enumerate RUN_FN_HL 
enumerate RULEBOOK_STV_CREATOR_FN_HL 
enumerate RULEBOOK_ENTRIES_HAP 
enumerate RULE_ENTRY_MD_HL 
enumerate TOOLTIP_TEXT_MD_HL 
enumerate NEXT_RULE_SPECIFICITY_MD_HL 
enumerate LAW_APPLIED_MD_HL 
enumerate BRULE_NAME_MD_HL 
enumerate RULE_INDEX_NAME_MD_HL 
enumerate RULE_FIRST_LINE_MD_HL 
enumerate RULE_INDEX_NUMBER_MD_HL 
enumerate BRULE_AT_MD_HL 
enumerate RULE_DURING_MD_HL 
enumerate RULE_DURING_TEXT_MD_HL 
enumerate RULE_ACTION_RELEVANCES_HAP 
enumerate RULE_ACTION_RELEVANCE_MD_HL 
enumerate RULEBOOK_PLACEMENTS_HAP 
enumerate PLACEMENT_TEXT_MD_HL 
enumerate PLACEMENT_AT_MD_HL 
enumerate RULEBOOK_AUTOMATIC_MD_HL 
enumerate RULEBOOK_DEFAULT_SUCCEEDS_MD_HL 
enumerate RULEBOOK_DEFAULT_FAILS_MD_HL 
enumerate RULEBOOK_OUTCOMES_HAP 
enumerate OUTCOME_TEXT_MD_HL 
enumerate OUTCOME_SUCCEEDS_MD_HL 
enumerate OUTCOME_FAILS_MD_HL 
enumerate OUTCOME_IS_DEFAULT_MD_HL 

Establish rulebooks8.1.21 =

    submodule_identity *rulebooks = LargeScale::register_submodule_identity(I"rulebooks");

    H_BEGIN(LocationRequirements::local_submodule(rulebooks))
        H_BEGIN_AP(OUTCOMES_HAP,                       I"rulebook_outcome", I"_outcome")
            H_C_U(OUTCOME_NAME_MD_HL,                  I"^name")
            H_C_U(OUTCOME_HL,                          I"outcome")
            H_C_U(RBNO4_INAME_HL,                      I"RBNO4_OUTCOME")
            H_C_U(RBNO3_INAME_HL,                      I"RBNO3_OUTCOME")
            H_C_U(RBNO2_INAME_HL,                      I"RBNO2_OUTCOME")
            H_C_U(RBNO1_INAME_HL,                      I"RBNO1_OUTCOME")
            H_C_U(RBNO0_INAME_HL,                      I"RBNO0_OUTCOME")
        H_END
        H_BEGIN_AP(RULEBOOKS_HAP,                      I"rulebook", I"_rulebook")
            H_C_U(RULEBOOK_AT_MD_HL,                   I"^at")
            H_C_U(RULEBOOK_NAME_MD_HL,                 I"^name")
            H_C_U(RULEBOOK_PNAME_MD_HL,                I"^printed_name")
            H_C_U(RULEBOOK_RUN_FN_MD_HL,               I"^run_fn")
            H_C_U(RULEBOOK_VARC_MD_HL,                 I"^var_creator")
            H_C_U(RULEBOOK_INDEX_ID_MD_HL,             I"^index_id")
            H_C_U(RULEBOOK_FOCUS_MD_HL,                I"^focus")
            H_C_U(RULEBOOK_ID_HL,                      I"rulebook_id")
            H_C_U(RULEBOOK_TRANS_ID_HL,                I"translated_rulebook_id")
            H_F_U(RUN_FN_HL,                           I"run_fn")
            H_F_U(RULEBOOK_STV_CREATOR_FN_HL,          I"stv_creator_fn")
            H_BEGIN_AP(RULEBOOK_ENTRIES_HAP,           I"entry", I"_rulebook_entry")
                H_C_U(RULE_ENTRY_MD_HL,                I"^rule")
                H_C_U(TOOLTIP_TEXT_MD_HL,              I"^tooltip")
                H_C_U(NEXT_RULE_SPECIFICITY_MD_HL,     I"^specificity")
                H_C_U(LAW_APPLIED_MD_HL,               I"^law")
                H_C_U(BRULE_NAME_MD_HL,                I"^name")
                H_C_U(RULE_INDEX_NAME_MD_HL,           I"^index_name")
                H_C_U(RULE_FIRST_LINE_MD_HL,           I"^first_line")
                H_C_U(RULE_INDEX_NUMBER_MD_HL,         I"^index_number")
                H_C_U(BRULE_AT_MD_HL,                  I"^at")
                H_C_U(RULE_DURING_MD_HL,               I"^during")
                H_C_U(RULE_DURING_TEXT_MD_HL,          I"^during_text")
                H_BEGIN_AP(RULE_ACTION_RELEVANCES_HAP, I"relevant_action", I"_relevant_action")
                    H_C_U(RULE_ACTION_RELEVANCE_MD_HL, I"^action")
                H_END
            H_END
            H_BEGIN_AP(RULEBOOK_PLACEMENTS_HAP,        I"placement", I"_rulebook_placement")
                H_C_U(PLACEMENT_TEXT_MD_HL,            I"^text")
                H_C_U(PLACEMENT_AT_MD_HL,              I"^at")
            H_END
            H_C_U(RULEBOOK_AUTOMATIC_MD_HL,            I"^automatically_generated")
            H_C_U(RULEBOOK_DEFAULT_SUCCEEDS_MD_HL,     I"^default_succeeds")
            H_C_U(RULEBOOK_DEFAULT_FAILS_MD_HL,        I"^default_fails")
            H_BEGIN_AP(RULEBOOK_OUTCOMES_HAP,          I"outcome", I"_rulebook_outcome")
                H_C_U(OUTCOME_TEXT_MD_HL,              I"^text")
                H_C_U(OUTCOME_SUCCEEDS_MD_HL,          I"^succeeds")
                H_C_U(OUTCOME_FAILS_MD_HL,             I"^fails")
                H_C_U(OUTCOME_IS_DEFAULT_MD_HL,        I"^is_default")
            H_END
        H_END
    H_END

§8.1.22. Rules.

enumerate RULES_HAP 
enumerate RULE_ANCHOR_HL 
enumerate RULE_NAME_MD_HL 
enumerate RULE_PREAMBLE_MD_HL 
enumerate RULE_PNAME_MD_HL 
enumerate RULE_AT_MD_HL 
enumerate RULE_VALUE_MD_HL 
enumerate RULE_TIMED_MD_HL 
enumerate RULE_TIMED_FOR_MD_HL 
enumerate TIMED_RULE_TRIGGER_HAP 
enumerate RULE_USED_AT_MD_HL 
enumerate SHELL_FN_HL 
enumerate RULE_FN_HL 
enumerate EXTERIOR_RULE_HL 
enumerate RESPONDER_FN_HL 
enumerate RESPONSES_HAP 
enumerate AS_CONSTANT_HL 
enumerate AS_BLOCK_CONSTANT_HL 
enumerate PARKING_ARRAY_HL 
enumerate LAUNCHER_HL 
enumerate RESP_VALUE_MD_HL 
enumerate RULE_MD_HL 
enumerate MARKER_MD_HL 
enumerate INDEX_TEXT_MD_HL 
enumerate GROUP_HL 
enumerate DEFERRED_RESPONSES_HAP 
enumerate DEF_RESPONSE_ID_HL 
enumerate RULE_APPLICABILITY_CONDITIONS_HAP 
enumerate AC_TEXT_MD_HL 
enumerate AC_AT_MD_HL 

Establish rules8.1.22 =

    submodule_identity *rules = LargeScale::register_submodule_identity(I"rules");

    H_BEGIN(LocationRequirements::local_submodule(rules))
        H_BEGIN_AP(RULES_HAP,                 I"rule", I"_rule")
            H_C_U(RULE_ANCHOR_HL,             I"anchor")
            H_C_U(RULE_NAME_MD_HL,            I"^name")
            H_C_U(RULE_PREAMBLE_MD_HL,        I"^preamble")
            H_C_U(RULE_PNAME_MD_HL,           I"^printed_name")
            H_C_U(RULE_AT_MD_HL,              I"^at")
            H_C_U(RULE_VALUE_MD_HL,           I"^value")
            H_C_U(RULE_TIMED_MD_HL,           I"^timed")
            H_C_U(RULE_TIMED_FOR_MD_HL,       I"^timed_for")
            H_BEGIN_AP(TIMED_RULE_TRIGGER_HAP, I"timed_rule_trigger", I"_timed_rule_trigger")
                H_C_U(RULE_USED_AT_MD_HL,     I"^used_at")
            H_END
            H_F_U(SHELL_FN_HL,                I"shell_fn")
            H_F_U(RULE_FN_HL,                 I"rule_fn")
            H_C_U(EXTERIOR_RULE_HL,           I"exterior_rule")
            H_F_S(RESPONDER_FN_HL,            I"responder_fn", I"M")
            H_BEGIN_AP(RESPONSES_HAP,         I"response", I"_response")
                H_C_U(RESP_VALUE_MD_HL,       I"^value")
                H_C_U(RULE_MD_HL,             I"^rule")
                H_C_U(MARKER_MD_HL,           I"^marker")
                H_C_U(INDEX_TEXT_MD_HL,       I"^index_text")
                H_C_U(GROUP_HL,               I"^group")
                H_C_U(AS_CONSTANT_HL,         I"response_id")
                H_C_U(AS_BLOCK_CONSTANT_HL,   I"as_block_constant")
                H_C_U(PARKING_ARRAY_HL,       I"response_local_parking")
                H_F_U(LAUNCHER_HL,            I"launcher")
            H_END
            H_BEGIN_AP(DEFERRED_RESPONSES_HAP, I"deferred_response", I"_deferred_response")
                H_C_U(DEF_RESPONSE_ID_HL,     I"deferred_response_id")
            H_END
            H_BEGIN_AP(RULE_APPLICABILITY_CONDITIONS_HAP, I"applicability_condition", I"_applicability_condition")
                H_C_U(AC_TEXT_MD_HL,          I"^text")
                H_C_U(AC_AT_MD_HL,            I"^at")
            H_END
        H_END
    H_END

§8.1.23. Tables.

enumerate TABLES_HAP 
enumerate TABLE_NAME_MD_HL 
enumerate TABLE_PNAME_MD_HL 
enumerate TABLE_VALUE_MD_HL 
enumerate RANKING_TABLE_MD_HL 
enumerate TABLE_ROWS_MD_HL 
enumerate TABLE_BLANK_ROWS_MD_HL 
enumerate TABLE_BLANK_ROWS_FOR_MD_HL 
enumerate TABLE_DEFINES_MD_HL 
enumerate TABLE_DEFINES_TEXT_MD_HL 
enumerate TABLE_DEFINES_AT_MD_HL 
enumerate TABLE_ID_HL 
enumerate TABLE_DATA_HL 
enumerate TABLE_COLUMN_USAGES_HAP 
enumerate COLUMN_DATA_HL 
enumerate COLUMN_IDENTITY_HL 
enumerate COLUMN_BITS_HL 
enumerate COLUMN_BLANKS_HL 
enumerate COLUMN_BLANK_DATA_HL 
enumerate TABLE_CONTRIBUTION_HAP 
enumerate TABLE_CONTRIBUTION_AT_MD_HL 
enumerate TABLE_COLUMNS_HAP 
enumerate TABLE_COLUMN_ID_HL 
enumerate TABLE_COLUMN_NAME_MD_HL 
enumerate TABLE_COLUMN_CONTENTS_MD_HL 
enumerate TABLE_COLUMN_KIND_MD_HL 

Establish tables8.1.23 =

    submodule_identity *tables = LargeScale::register_submodule_identity(I"tables");

    H_BEGIN(LocationRequirements::local_submodule(tables))
        H_BEGIN_AP(TABLES_HAP,                I"table", I"_table")
            H_C_U(TABLE_NAME_MD_HL,           I"^name")
            H_C_U(TABLE_PNAME_MD_HL,          I"^printed_name")
            H_C_U(TABLE_VALUE_MD_HL,          I"^value")
            H_C_U(RANKING_TABLE_MD_HL,        I"^ranking_table")
            H_C_U(TABLE_ROWS_MD_HL,           I"^rows")
            H_C_U(TABLE_BLANK_ROWS_MD_HL,     I"^blank_rows")
            H_C_U(TABLE_BLANK_ROWS_FOR_MD_HL, I"^blank_rows_for_each")
            H_C_U(TABLE_DEFINES_MD_HL,        I"^defines")
            H_C_U(TABLE_DEFINES_TEXT_MD_HL,   I"^defines_text")
            H_C_U(TABLE_DEFINES_AT_MD_HL,     I"^defines_at")
            H_C_U(TABLE_ID_HL,                I"table_id")
            H_C_U(TABLE_DATA_HL,              I"table_data")
            H_BEGIN_AP(TABLE_COLUMN_USAGES_HAP, I"column", I"_table_column_usage")
                H_C_U(COLUMN_DATA_HL,         I"column_data")
                H_C_U(COLUMN_IDENTITY_HL,     I"column_identity")
                H_C_U(COLUMN_BITS_HL,         I"column_bits")
                H_C_U(COLUMN_BLANKS_HL,       I"column_blanks")
                H_C_U(COLUMN_BLANK_DATA_HL,   I"^column_blank_data")
            H_END
            H_BEGIN_AP(TABLE_CONTRIBUTION_HAP, I"contribution", I"_table_contribution")
                H_C_U(TABLE_CONTRIBUTION_AT_MD_HL, I"^at")
            H_END
        H_END
    H_END

    submodule_identity *table_columns = LargeScale::register_submodule_identity(I"table_columns");
    H_BEGIN(LocationRequirements::local_submodule(table_columns))
        H_BEGIN_AP(TABLE_COLUMNS_HAP,         I"table_column", I"_table_column")
            H_C_U(TABLE_COLUMN_ID_HL,         I"table_column_id")
            H_C_U(TABLE_COLUMN_NAME_MD_HL,    I"^name")
            H_C_U(TABLE_COLUMN_CONTENTS_MD_HL, I"^contents")
            H_C_U(TABLE_COLUMN_KIND_MD_HL,    I"^column_kind")
        H_END
    H_END

§8.1.24. Use options.

enumerate USE_OPTIONS_HAP 
enumerate USE_OPTION_MD_HL 
enumerate USE_OPTION_PNAME_MD_HL 
enumerate USE_OPTION_ON_MD_HL 
enumerate USE_OPTION_USED_AT_MD_HL 
enumerate SOURCE_FILE_SCOPED_MD_HL 
enumerate USED_IN_SOURCE_TEXT_MD_HL 
enumerate USED_IN_OPTIONS_MD_HL 
enumerate USED_IN_EXTENSION_MD_HL 
enumerate USE_OPTION_CV_MD_HL 
enumerate USE_OPTION_ID_HL 

Establish use options8.1.24 =

    submodule_identity *use_options = LargeScale::register_submodule_identity(I"use_options");

    H_BEGIN(LocationRequirements::local_submodule(use_options))
        H_BEGIN_AP(USE_OPTIONS_HAP,           I"use_option", I"_use_option")
            H_C_U(USE_OPTION_MD_HL,           I"^name")
            H_C_U(USE_OPTION_USED_AT_MD_HL,   I"^at")
            H_C_U(USE_OPTION_PNAME_MD_HL,     I"^printed_name")
            H_C_U(USE_OPTION_ON_MD_HL,        I"^active")
            H_C_U(SOURCE_FILE_SCOPED_MD_HL,   I"^source_file_scoped")
            H_C_U(USED_IN_SOURCE_TEXT_MD_HL,  I"^used_in_source_text")
            H_C_U(USED_IN_OPTIONS_MD_HL,      I"^used_in_options")
            H_C_U(USED_IN_EXTENSION_MD_HL,    I"^used_in_extension")
            H_C_U(USE_OPTION_CV_MD_HL,        I"^configured_value")
            H_C_U(USE_OPTION_ID_HL,           I"use_option_id")
        H_END
    H_END

§8.1.25. Variables.

enumerate VARIABLES_HAP 
enumerate VARIABLE_NAME_MD_HL 
enumerate VARIABLE_AT_MD_HL 
enumerate VARIABLE_HEADING_MD_HL 
enumerate VARIABLE_INDEXABLE_MD_HL 
enumerate VARIABLE_UNDERSTOOD_MD_HL 
enumerate VARIABLE_CONTENTS_MD_HL 
enumerate VARIABLE_DOCUMENTATION_MD_HL 
enumerate VARIABLE_COUNTERPART_MD_HL 
enumerate VARIABLE_HL 
enumerate COMMANDPROMPTTEXT_HL 
enumerate INITIAL_MAX_SCORE_HL 

Establish variables8.1.25 =

    submodule_identity *variables = LargeScale::register_submodule_identity(I"variables");

    H_BEGIN(LocationRequirements::local_submodule(variables))
        H_BEGIN_AP(VARIABLES_HAP,             I"variable", I"_variable")
            H_C_U(VARIABLE_NAME_MD_HL,        I"^name")
            H_C_U(VARIABLE_AT_MD_HL,          I"^at")
            H_C_U(VARIABLE_HEADING_MD_HL,     I"^heading")
            H_C_U(VARIABLE_INDEXABLE_MD_HL,   I"^indexable")
            H_C_U(VARIABLE_UNDERSTOOD_MD_HL,  I"^understood")
            H_C_U(VARIABLE_CONTENTS_MD_HL,    I"^contents")
            H_C_U(VARIABLE_DOCUMENTATION_MD_HL, I"^documentation")
            H_C_U(VARIABLE_COUNTERPART_MD_HL, I"^counterpart")
            H_C_G(VARIABLE_HL,                I"V")
            H_F_T(COMMANDPROMPTTEXT_HL,       I"command_prompt_text_fn", I"CommandPromptText")
            H_C_T(INITIAL_MAX_SCORE_HL,       I"INITIAL_MAX_SCORE")
        H_END
    H_END

§8.1.26. Enclosed matter.

enumerate LITERALS_HAP 
enumerate TEXT_LITERAL_HL 
enumerate LIST_LITERAL_HL 
enumerate TEXT_SUBSTITUTION_HL 
enumerate TEXT_SUBSTITUTION_FN_HL 
enumerate PROPOSITIONS_HAP 
enumerate PROPOSITION_HL 
enumerate RTP_HL 
enumerate BLOCK_CONSTANTS_HAP 
enumerate BLOCK_CONSTANT_HL 
enumerate BOX_QUOTATIONS_HAP 
enumerate BOX_FLAG_HL 
enumerate BOX_QUOTATION_FN_HL 
enumerate GROUPS_TOGETHER_HAP 
enumerate GROUP_TOGETHER_FN_HL 
enumerate LOOPS_OVER_SCOPE_HAP 
enumerate LOOP_OVER_SCOPE_FN_HL 
enumerate DIGIT_MANAGERS_HAP 
enumerate DIGIT_MANAGER_HL 

Establish enclosed matter8.1.26 =

    H_BEGIN(LocationRequirements::any_enclosure())
        H_BEGIN_AP(LITERALS_HAP,              I"literal", I"_literal")
            H_C_U(TEXT_LITERAL_HL,            I"text")
            H_C_U(LIST_LITERAL_HL,            I"list")
            H_C_U(TEXT_SUBSTITUTION_HL,       I"ts_array")
            H_F_U(TEXT_SUBSTITUTION_FN_HL,    I"ts_fn")
        H_END
        H_BEGIN_AP(PROPOSITIONS_HAP,          I"proposition", I"_proposition")
            H_F_U(PROPOSITION_HL,             I"prop")
        H_END
        H_BEGIN_AP(BLOCK_CONSTANTS_HAP,       I"block_constant", I"_block_constant")
            H_C_U(BLOCK_CONSTANT_HL,          I"bc")
        H_END
        H_BEGIN_AP(BOX_QUOTATIONS_HAP,        I"block_constant", I"_box_quotation")
            H_C_U(BOX_FLAG_HL,                I"quotation_flag")
            H_F_U(BOX_QUOTATION_FN_HL,        I"quotation_fn")
        H_END
        H_BEGIN_AP(GROUPS_TOGETHER_HAP,       I"group_together", I"_group_together")
            H_F_U(GROUP_TOGETHER_FN_HL,       I"group_together_fn")
        H_END
        H_BEGIN_AP(LOOPS_OVER_SCOPE_HAP,      I"loop_over_scope", I"_loop_over_scope")
            H_F_G(LOOP_OVER_SCOPE_FN_HL,      I"loop_over_scope_fn", I"LOS")
        H_END
        H_C_U(RTP_HL,                         I"rtp")
        H_BEGIN_AP(DIGIT_MANAGERS_HAP,        I"digit_manager", I"_digit_manager")
            H_C_U(DIGIT_MANAGER_HL,           I"dm")
        H_END
    H_END

§8.1.27.

enumerate K_OBJECT_XPACKAGE 0
enumerate K_NUMBER_XPACKAGE 
enumerate K_TIME_XPACKAGE 
enumerate K_TRUTH_STATE_XPACKAGE 
enumerate CAPSHORTNAME_HL 
enumerate DECIMAL_TOKEN_INNER_HL 
enumerate TIME_TOKEN_INNER_HL 
enumerate TRUTH_STATE_TOKEN_INNER_HL 

The rest8.1.27 =

    H_BEGIN(LocationRequirements::this_exotic_package(K_OBJECT_XPACKAGE))
        H_C_T(CAPSHORTNAME_HL,                I"cap_short_name")
    H_END

    H_BEGIN(LocationRequirements::this_exotic_package(K_NUMBER_XPACKAGE))
        H_F_T(DECIMAL_TOKEN_INNER_HL,         I"gpr_fn", I"DECIMAL_TOKEN_INNER")
    H_END

    H_BEGIN(LocationRequirements::this_exotic_package(K_TIME_XPACKAGE))
        H_F_T(TIME_TOKEN_INNER_HL,            I"gpr_fn", I"TIME_TOKEN_INNER")
    H_END

    H_BEGIN(LocationRequirements::this_exotic_package(K_TRUTH_STATE_XPACKAGE))
        H_F_T(TRUTH_STATE_TOKEN_INNER_HL,     I"gpr_fn", I"TRUTH_STATE_TOKEN_INNER")
    H_END

§8.2.1. Architectural symbols. These are built-in constants (and one built-in variable, self) which come from the platform we are compiling to. See Large-Scale Structure (in building).

There are other architectural symbols besides these, but these are the only ones which the inform7-compiled code needs to refer to.

enumerate SELF_HL 
enumerate NULL_HL 
enumerate MAX_POSITIVE_NUMBER_HL 
enumerate MIN_NEGATIVE_NUMBER_HL 

Establish architectural resources8.2.1 =

    H_BEGIN(LocationRequirements::architectural_package(I))
        H_C_T(SELF_HL,                        I"self")
        H_C_T(NULL_HL,                        I"NULL")
        H_C_T(MAX_POSITIVE_NUMBER_HL,         I"MAX_POSITIVE_NUMBER")
        H_C_T(MIN_NEGATIVE_NUMBER_HL,         I"MIN_NEGATIVE_NUMBER")
    H_END

§8.3. Note that because these are automatically created by the building machinery anyway, we need to make sure that a call to Hierarchy::find does not create a duplicate with a name like NULL_1. This is a race condition, and the easiest way to avoid it is to force the issue now:

Prevent architectural symbols from being doubly defined8.3 =

    inter_name *self_iname = Hierarchy::find(SELF_HL);
    self_iname->symbol = LargeScale::find_architectural_symbol(I, I"self");
    InterNames::to_symbol(Hierarchy::find(MAX_POSITIVE_NUMBER_HL));
    InterNames::to_symbol(Hierarchy::find(MIN_NEGATIVE_NUMBER_HL));
    InterNames::to_symbol(Hierarchy::find(NULL_HL));

§9. Heaven knows, that all seems like plenty, but there's one final case. Neptune files inside kits -- which define built-in kinds like "number" -- need to make reference to constants in those kits which give their default values. For example, the "description of K" kind constructor is created by BasicInformKit, and its default value compiles to the value Prop_Falsity. This is a function also defined in BasicInformKit. But there is no id PROP_FALSITY_HL because the main compiler doesn't want to hardwire this: perhaps the implementation in the kit will change at some point, after all.

So the compiler reserves a block of location IDs to be used by default values of kinds in kits. On demand, it then allocates these to be used; so, for example, Prop_Falsity might be given KIND_DEFAULT5_HL.

There are only a few of these, and the absolute limit here doesn't seem problematic right now.

enumerate KIND_DEFAULT1_HL 
enumerate KIND_DEFAULT2_HL 
enumerate KIND_DEFAULT3_HL 
enumerate KIND_DEFAULT4_HL 
enumerate KIND_DEFAULT5_HL 
enumerate KIND_DEFAULT6_HL 
enumerate KIND_DEFAULT7_HL 
enumerate KIND_DEFAULT8_HL 
enumerate KIND_DEFAULT9_HL 
enumerate KIND_DEFAULT10_HL 
enumerate KIND_DEFAULT11_HL 
enumerate KIND_DEFAULT12_HL 
enumerate KIND_DEFAULT13_HL 
enumerate KIND_DEFAULT14_HL 
enumerate KIND_DEFAULT15_HL 
enumerate KIND_DEFAULT16_HL 
define MAX_KIND_DEFAULTS 16
int no_kind_defaults_used;
kind_constructor *kind_defaults_used[MAX_KIND_DEFAULTS];
int Hierarchy::kind_default(kind_constructor *con, text_stream *Inter_constant_name) {
    for (int i=0; i<no_kind_defaults_used; i++)
        if (con == kind_defaults_used[i])
            return KIND_DEFAULT1_HL + i;
    if (no_kind_defaults_used >= MAX_KIND_DEFAULTS)
        internal_error("too many Neptune file-defined kinds have default values");
    location_requirement plug = LocationRequirements::plug();
    int hl = KIND_DEFAULT1_HL + no_kind_defaults_used;
    kind_defaults_used[no_kind_defaults_used++] = con;
    HierarchyLocations::con(Emit::tree(), hl, Inter_constant_name, plug);
    return hl;
}

§10. A few of the above locations were "exotic packages", which are not really very exotic, but which are locations not easily falling into patterns. Here they are:

package_request *Hierarchy::exotic_package(int x) {
    switch (x) {
        case K_OBJECT_XPACKAGE:            return RTKindConstructors::kind_package(K_object);
        case K_NUMBER_XPACKAGE:            return RTKindConstructors::kind_package(K_number);
        case K_TIME_XPACKAGE:              return RTKindConstructors::kind_package(K_time);
        case K_TRUTH_STATE_XPACKAGE:       return RTKindConstructors::kind_package(K_truth_state);
    }
    internal_error("unknown exotic package");
    return NULL;
}

§11. Finding where to put things. So, for example, Hierarchy::find(ACTIVITY_VAR_CREATORS_HL) returns the iname at which this array should be placed, by calling, e.g., EmitArrays::begin_word.

inter_name *Hierarchy::find(int id) {
    return HierarchyLocations::iname(Emit::tree(), id);
}

§12. That's fine for one-off inames. But now suppose we have this:

        H_BEGIN_AP(EXTERNAL_FILES_HAP,        I"external_file", I"_external_file")
            H_C_U(FILE_HL,                    I"file")
            H_C_U(IFID_HL,                    I"ifid")
        H_END

...and we are compiling a file, so that we need a FILE_HL iname. To get that, we call Hierarchy::make_iname_in(FILE_HL, P), where P represents the _external_file package holding it. (P can in turn be obtained using the functions below.)

If this is called where P is some other package -- i.e., not of package type _external_file -- an internal error is thrown, in order to enforce the rules.

inter_name *Hierarchy::make_iname_in(int id, package_request *P) {
    return HierarchyLocations::make_iname_in(Emit::tree(), id, P);
}

§13. There are then some variations on this function. This version adds the wording W to the name, just to make the Inter code more comprehensible. An example would be ACTIVITY_VALUE_HL, declared abover as H_C_G(ACTIVITY_VALUE_HL, I"V"). The resulting name "generated" (hence the G in H_C_G) might be, for example, V1_starting_the_virtual_mach. The number 1 guarantees uniqueness; the (truncated) text following is purely for the reader's convenience.

inter_name *Hierarchy::make_iname_with_memo(int id, package_request *P, wording W) {
    return HierarchyLocations::make_iname_with_memo(Emit::tree(), id, P, W);
}
inter_name *Hierarchy::make_iname_with_shorter_memo(int id, package_request *P, wording W) {
    return HierarchyLocations::make_iname_with_shorter_memo(Emit::tree(), id, P, W);
}

§14. And this further elaboration supplies the number to use, in place of the 1. This is needed only for kinds, where the kits expect to find classes called, e.g., K7_backdrop, even though in some circumstances this may not be number 7 in class inheritance tree order.

inter_name *Hierarchy::make_iname_with_memo_and_value(int id, package_request *P,
    wording W, int x) {
    inter_name *iname =
        HierarchyLocations::make_iname_with_memo_and_value(Emit::tree(), id, P, W, x);
    return iname;
}

inter_name *Hierarchy::make_iname_with_shorter_memo_and_value(int id, package_request *P,
    wording W, int x) {
    inter_name *iname =
        HierarchyLocations::make_iname_with_shorter_memo_and_value(Emit::tree(), id, P, W, x);
    return iname;
}

§15. When a translated name has to be generated from the name of something related to it (e.g. by adding a prefix or suffix), the following should be used:

inter_name *Hierarchy::derive_iname_in(int id, inter_name *from, package_request *P) {
    return HierarchyLocations::derive_iname_in(Emit::tree(), id, from, P);
}

inter_name *Hierarchy::derive_iname_in_translating(int id, inter_name *from, package_request *P) {
    return HierarchyLocations::derive_iname_in_translating(Emit::tree(), id, from, P);
}

§16. For the handful of names with "imposed translation", where the caller has to supply the translated name, the following should be used:

inter_name *Hierarchy::make_iname_with_specific_translation(int id, text_stream *name,
    package_request *P) {
    return HierarchyLocations::make_iname_with_specific_translation(Emit::tree(),
        id, name, P);
}

§17. Availability. Just as the code generated by the compiler needs to be able to access code in the kits, so also the other way around: code in a kit may need to call a function which we're compiling. Kits can only see those inames which we "make available", using the following, which creates a socket. Again, see The Wiring (in bytecode) for more.

void Hierarchy::make_available(inter_name *iname) {
    text_stream *ma_as = InterNames::get_translation(iname);
    if (Str::len(ma_as) == 0) ma_as = InterNames::to_text(iname);
    LargeScale::package_type(Emit::tree(), I"_linkage");
    inter_symbol *S = InterNames::to_symbol(iname);
    Wiring::socket(Emit::tree(), ma_as, S);
}

void Hierarchy::make_available_one_per_name_only(inter_name *iname) {
    text_stream *ma_as = InterNames::get_translation(iname);
    if (Str::len(ma_as) == 0) ma_as = InterNames::to_text(iname);
    LargeScale::package_type(Emit::tree(), I"_linkage");
    inter_symbol *S = InterNames::to_symbol(iname);
    Wiring::socket_one_per_name_only(Emit::tree(), ma_as, S);
}

§18. Adding packages at attachment points. Consider the following example piece of declaration:

    H_BEGIN(LocationRequirements::local_submodule(kinds))
        H_BEGIN_AP(KIND_HAP,                  I"kind", I"_kind")
            ...
        H_END
    H_END

Here, the "attachment point" (AP) is a place where multiple packages can be placed, each with the same internal structure (defined by the ... part omitted here). kinds is a submodule name, and the "local" part means that each compilation unit will become its own module, which will have its own individual kinds submodule. Each of those will have multiple packages inside of package type _kind.

Well, given that picture, Hierarchy::package(C, KIND_HAP) will create a new such _kind package inside C. For example, it might return a new package main/locksmith_by_emily_short/kinds/K_lock.

package_request *Hierarchy::package(compilation_unit *C, int hap_id) {
    module_request *M = (C) ? (CompilationUnits::to_module_package(C)) : NULL;
    return HierarchyLocations::attach_new_package(Emit::tree(), M, NULL, hap_id);
}

§19. If we just want the compilation unit in which a given sentence lies:

package_request *Hierarchy::local_package(int hap_id) {
    return Hierarchy::local_package_to(hap_id, current_sentence);
}

package_request *Hierarchy::local_package_to(int hap_id, parse_node *at) {
    return Hierarchy::package(CompilationUnits::find(at), hap_id);
}

§20. There is just one package called synoptic, so there's no issue of what compilation unit is meant: that's why it's "synoptic".

package_request *Hierarchy::synoptic_package(int hap_id) {
    return HierarchyLocations::attach_new_package(Emit::tree(), NULL, NULL, hap_id);
}

package_request *Hierarchy::completion_package(int hap_id) {
    return HierarchyLocations::attach_new_package(Emit::tree(), NULL, NULL, hap_id);
}

§21. Attachment points do not always have to be at the top level of submodules, as the KIND_HAP example was. For example:

        H_BEGIN_AP(VERBS_HAP,                 I"verb", I"_verb")
            ...
            H_BEGIN_AP(VERB_FORMS_HAP,        I"form", I"_verb_form")
                ...
            H_END
        H_END

Here a _verb_form package has to be created inside a _verb package. Calling Hierarchy::package_within(VERB_FORMS_HAP, P) indeed constructs a new one inside the package P; if P does not have type _verb, an internal error will automatically trip, in order to enforce the layout rules.

package_request *Hierarchy::package_within(int hap_id, package_request *super) {
    return HierarchyLocations::attach_new_package(Emit::tree(), NULL, super, hap_id);
}

§22. Adding packages not at attachment points. Just a handful of packages are made other than with the *_HAP attachment point system, and for those:

package_request *Hierarchy::make_package_in(int id, package_request *P) {
    return HierarchyLocations::subpackage(Emit::tree(), id, P);
}

§23. Metadata. These are convenient functions for marking up packages with metadata:

void Hierarchy::apply_metadata(package_request *P, int id, text_stream *value) {
    inter_name *iname = Hierarchy::make_iname_in(id, P);
    Emit::text_constant(iname, value);
}

void Hierarchy::apply_metadata_from_number(package_request *P, int id, inter_ti N) {
    inter_name *iname = Hierarchy::make_iname_in(id, P);
    Emit::numeric_constant(iname, N);
}

void Hierarchy::apply_metadata_from_iname(package_request *P, int id, inter_name *val) {
    inter_name *iname = Hierarchy::make_iname_in(id, P);
    Emit::iname_constant(iname, K_value, val);
}

void Hierarchy::apply_metadata_from_wording(package_request *P, int id, wording W) {
    TEMPORARY_TEXT(ANT)
    WRITE_TO(ANT, "%W", W);
    Hierarchy::apply_metadata(P, id, ANT);
    DISCARD_TEXT(ANT)
}

void Hierarchy::apply_metadata_from_raw_wording(package_request *P, int id, wording W) {
    TEMPORARY_TEXT(ANT)
    WRITE_TO(ANT, "%+W", W);
    Hierarchy::apply_metadata(P, id, ANT);
    DISCARD_TEXT(ANT)
}

void Hierarchy::apply_metadata_from_filename(package_request *P, int id, filename *F) {
    TEMPORARY_TEXT(as_text)
    WRITE_TO(as_text, "%f", F);
    Hierarchy::apply_metadata(P, id, as_text);
    DISCARD_TEXT(as_text)
}

void Hierarchy::apply_metadata_from_heading(package_request *P, int id, heading *h) {
    Hierarchy::apply_metadata_from_iname(P, id, CompletionModule::heading_id(h));
}