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

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.2;
    Establish modules8.1.4;
    Establish actions8.1.6;
    Establish activities8.1.8;
    Establish adjectives8.1.10;
    Establish bibliographic8.1.12;
    Establish chronology8.1.14;
    Establish conjugations8.1.16;
    Establish equations8.1.18;
    Establish external files8.1.20;
    Establish grammar8.1.22;
    Establish instances8.1.24;
    Establish int-fiction8.1.26;
    Establish internal files8.1.28;
    Establish kinds8.1.30;
    Establish literal patterns8.1.32;
    Establish mapping hints8.1.34;
    Establish phrases8.1.36;
    Establish properties8.1.38;
    Establish relations8.1.40;
    Establish rulebooks8.1.42;
    Establish rules8.1.44;
    Establish tables8.1.46;
    Establish use options8.1.48;
    Establish variables8.1.50;
    Establish enclosed matter8.1.52;
    The rest8.1.54;

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

    Establish architectural resources8.2.2;

§8.1.1. Basics.

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

§8.1.2. Establish basics8.1.2 =

    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.3. Modules.

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

§8.1.4. Establish modules8.1.4 =

    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.5. Actions.

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

§8.1.6. Establish actions8.1.6 =

    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.7. Activities.

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

§8.1.8. Establish activities8.1.8 =

    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.9. Adjectives.

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

§8.1.10. Establish adjectives8.1.10 =

    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.11. Bibliographic.

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

§8.1.12. Establish bibliographic8.1.12 =

    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.13. Chronology.

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

§8.1.14. Establish chronology8.1.14 =

    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.15. Conjugations.

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

§8.1.16. Establish conjugations8.1.16 =

    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.17. Equations.

enum EQUATIONS_HAP
enum IDENTIFIER_FN_HL
enum EQUATION_NAME_MD_HL
enum EQUATION_TEXT_MD_HL
enum EQUATION_AT_MD_HL

§8.1.18. Establish equations8.1.18 =

    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.19. External files.

enum EXTERNAL_FILES_HAP
enum FILE_HL
enum IFID_HL

§8.1.20. Establish external files8.1.20 =

    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.21. Grammar.

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

§8.1.22. Establish grammar8.1.22 =

    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.23. Instances.

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

§8.1.24. Establish instances8.1.24 =

    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.25. Interactive Fiction.

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

§8.1.26. Establish int-fiction8.1.26 =

    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.27. Internal files.

enum INTERNAL_FILES_HAP
enum INTERNAL_FILE_HL

§8.1.28. Establish internal files8.1.28 =

    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.29. Kinds.

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

§8.1.30. Establish kinds8.1.30 =

    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.31. Literal patterns.

enum LITERAL_PATTERNS_HAP
enum LP_PRINT_FN_HL
enum LP_PARSE_FN_HL

§8.1.32. Establish literal patterns8.1.32 =

    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.33. Mapping hints.

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

§8.1.34. Establish mapping hints8.1.34 =

    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.35. Phrases.

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

§8.1.36. Establish phrases8.1.36 =

    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.37. Properties.

enum PROPERTIES_HAP
enum PROPERTY_NAME_MD_HL
enum PROPERTY_ORDER_MD_HL
enum PROPERTY_ID_HL
enum PROPERTY_HL

§8.1.38. Establish properties8.1.38 =

    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.39. Relations.

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

§8.1.40. Establish relations8.1.40 =

    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.41. Rulebooks.

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

§8.1.42. Establish rulebooks8.1.42 =

    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.43. Rules.

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

§8.1.44. Establish rules8.1.44 =

    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.45. Tables.

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

§8.1.46. Establish tables8.1.46 =

    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.47. Use options.

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

§8.1.48. Establish use options8.1.48 =

    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.49. Variables.

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

§8.1.50. Establish variables8.1.50 =

    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.51. Enclosed matter.

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

§8.1.52. Establish enclosed matter8.1.52 =

    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.53.

enum K_OBJECT_XPACKAGE from 0
enum K_NUMBER_XPACKAGE
enum K_TIME_XPACKAGE
enum K_TRUTH_STATE_XPACKAGE
enum CAPSHORTNAME_HL
enum DECIMAL_TOKEN_INNER_HL
enum TIME_TOKEN_INNER_HL
enum TRUTH_STATE_TOKEN_INNER_HL

§8.1.54. The rest8.1.54 =

    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.

enum SELF_HL
enum NULL_HL
enum MAX_POSITIVE_NUMBER_HL
enum MIN_NEGATIVE_NUMBER_HL

§8.2.2. Establish architectural resources8.2.2 =

    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.

enum KIND_DEFAULT1_HL
enum KIND_DEFAULT2_HL
enum KIND_DEFAULT3_HL
enum KIND_DEFAULT4_HL
enum KIND_DEFAULT5_HL
enum KIND_DEFAULT6_HL
enum KIND_DEFAULT7_HL
enum KIND_DEFAULT8_HL
enum KIND_DEFAULT9_HL
enum KIND_DEFAULT10_HL
enum KIND_DEFAULT11_HL
enum KIND_DEFAULT12_HL
enum KIND_DEFAULT13_HL
enum KIND_DEFAULT14_HL
enum KIND_DEFAULT15_HL
enum 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));
}