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;
        CodeGen::Inventory::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 = Packaging::register_submodule(I"activities");
    H_BEGIN(HierarchyLocations::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(HierarchyLocations::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::ctr(I, id, n,    Translation::same(),      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), and for some of the names in category (2) which the main compiler needs to refer to. For example, the Inform compiler generates calls to an Inter function called BlkValueCopy. This is a function in the kit BasicInformKit, but it has a hierarchy location ID, BLKVALUECOPY_HL, so that the compiler can refer to it.

void Hierarchy::establish(void) {
    H_BEGIN_DECLARATIONS
    Establish locations for material created by the compiler8.1;
    Establish locations for material expected to be added by linking8.2;
    InterNames::to_symbol(Hierarchy::find(SELF_HL));
    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 extensions8.1.20;
    Establish external files8.1.22;
    Establish grammar8.1.24;
    Establish instances8.1.26;
    Establish int-fiction8.1.28;
    Establish kinds8.1.30;
    Establish phrases8.1.32;
    Establish properties8.1.34;
    Establish relations8.1.36;
    Establish rulebooks8.1.38;
    Establish rules8.1.40;
    Establish tables8.1.42;
    Establish variables8.1.44;
    Establish enclosed matter8.1.46;
    The rest8.1.48;

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

    Establish veneer resources8.2.2;
    Establish kit-defined resources8.2.4;

§8.1.1. Basics.

enum NULL_HL from 0
enum WORD_HIGHBIT_HL
enum WORD_NEXTTOHIGHBIT_HL
enum IMPROBABLE_VALUE_HL
enum REPARSE_CODE_HL
enum MAX_POSITIVE_NUMBER_HL
enum MIN_NEGATIVE_NUMBER_HL
enum I7_VERSION_NUMBER_HL
enum I7_FULL_VERSION_NUMBER_HL
enum RANKING_TABLE_HL
enum MAX_WEAK_ID_HL
enum NO_VERB_VERB_DEFINED_HL
enum NO_TEST_SCENARIOS_HL
enum MEMORY_HEAP_SIZE_HL
enum KIT_CONFIGURATION_BITMAP_HL
enum KIT_CONFIGURATION_LOOKMODE_HL
enum LOCALPARKING_HL
enum MAX_FRAME_SIZE_NEEDED_HL
enum RNG_SEED_AT_START_OF_PLAY_HL
enum SUBMAIN_HL

§8.1.2. Establish basics8.1.2 =

    submodule_identity *basics = Packaging::register_submodule(I"basics");

    H_BEGIN(HierarchyLocations::generic_submodule(I, basics))
        H_C_T(NULL_HL,                        I"NULL")
        H_C_T(WORD_HIGHBIT_HL,                I"WORD_HIGHBIT")
        H_C_T(WORD_NEXTTOHIGHBIT_HL,          I"WORD_NEXTTOHIGHBIT")
        H_C_T(IMPROBABLE_VALUE_HL,            I"IMPROBABLE_VALUE")
        H_C_T(REPARSE_CODE_HL,                I"REPARSE_CODE")
        H_C_T(MAX_POSITIVE_NUMBER_HL,         I"MAX_POSITIVE_NUMBER")
        H_C_T(MIN_NEGATIVE_NUMBER_HL,         I"MIN_NEGATIVE_NUMBER")
        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(RANKING_TABLE_HL,               I"RANKING_TABLE")
        H_C_T(MAX_WEAK_ID_HL,                 I"MAX_WEAK_ID")
        H_C_T(NO_VERB_VERB_DEFINED_HL,        I"NO_VERB_VERB_DEFINED")
        H_C_T(MEMORY_HEAP_SIZE_HL,            I"MEMORY_HEAP_SIZE")
        H_C_T(KIT_CONFIGURATION_BITMAP_HL,    I"KIT_CONFIGURATION_BITMAP")
        H_C_T(KIT_CONFIGURATION_LOOKMODE_HL,  I"KIT_CONFIGURATION_LOOKMODE")
        H_C_T(LOCALPARKING_HL,                I"LocalParking")
    H_END

    H_BEGIN(HierarchyLocations::synoptic_submodule(I, basics))
        H_C_T(MAX_FRAME_SIZE_NEEDED_HL,       I"MAX_FRAME_SIZE_NEEDED")
        H_C_T(RNG_SEED_AT_START_OF_PLAY_HL,   I"RNG_SEED_AT_START_OF_PLAY")
    H_END

    submodule_identity *basic_extras = Packaging::register_submodule(I"BasicInformExtrasKit");
    H_BEGIN(HierarchyLocations::generic_submodule(I, basic_extras))
        H_F_T(SUBMAIN_HL,                     I"Submain_fn", I"Submain")
    H_END

§8.1.3. Modules.

enum EXT_CATEGORY_METADATA_HL
enum EXT_TITLE_METADATA_HL
enum EXT_AUTHOR_METADATA_HL
enum EXT_VERSION_METADATA_HL

§8.1.4. Establish modules8.1.4 =

    H_BEGIN(HierarchyLocations::any_package_of_type(I"_module"))
        H_C_U(EXT_CATEGORY_METADATA_HL,       I"^category")
        H_C_U(EXT_TITLE_METADATA_HL,          I"^title")
        H_C_U(EXT_AUTHOR_METADATA_HL,         I"^author")
        H_C_U(EXT_VERSION_METADATA_HL,        I"^version")
    H_END

§8.1.5. Actions.

enum BOGUS_HAP from 0
enum ACTIONS_HAP
enum ACTION_NAME_METADATA_HL
enum ACTION_BASE_NAME_HL
enum WAIT_HL
enum TRANSLATED_BASE_NAME_HL
enum DOUBLE_SHARP_NAME_HL
enum PERFORM_FN_HL
enum CHECK_RB_HL
enum CARRY_OUT_RB_HL
enum REPORT_RB_HL
enum ACTION_STV_CREATOR_FN_HL
enum ACTIONCODING_HL
enum ACTIONDATA_HL
enum ACTIONHAPPENED_HL
enum AD_RECORDS_HL
enum CCOUNT_ACTION_NAME_HL
enum DB_ACTION_DETAILS_HL
enum SACTIONS_HAP
enum MISTAKEACTIONPACKAGE_HL
enum MISTAKEACTION_HL
enum MISTAKEACTIONSUB_HL

§8.1.6. Establish actions8.1.6 =

    submodule_identity *actions = Packaging::register_submodule(I"actions");

    H_BEGIN(HierarchyLocations::local_submodule(actions))
        H_BEGIN_AP(ACTIONS_HAP,               I"action", I"_action")
            H_C_U(ACTION_NAME_METADATA_HL,    I"^name")
            H_C_U(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_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_F_U(ACTION_STV_CREATOR_FN_HL,   I"stv_creator_fn")
            H_C_T(MISTAKEACTION_HL,           I"##MistakeAction")
            H_F_T(MISTAKEACTIONSUB_HL,        I"MistakeActionSub_fn", I"MistakeActionSub")
        H_END
    H_END

    H_BEGIN(HierarchyLocations::synoptic_submodule(I, actions))
        H_C_T(ACTIONCODING_HL,                I"ActionCoding")
        H_C_T(ACTIONDATA_HL,                  I"ActionData")
        H_C_T(ACTIONHAPPENED_HL,              I"ActionHappened")
        H_C_T(AD_RECORDS_HL,                  I"AD_RECORDS")
        H_C_T(CCOUNT_ACTION_NAME_HL,          I"CCOUNT_ACTION_NAME")
        H_F_T(DB_ACTION_DETAILS_HL,           I"DB_Action_Details_fn", I"DB_Action_Details")
        H_BEGIN_AP(SACTIONS_HAP,              I"action", I"_action")
        H_END
        H_PKG(MISTAKEACTIONPACKAGE_HL,        I"mistake_action", I"_action")
    H_END

§8.1.7. Activities.

enum ACTIVITIES_HAP
enum ACTIVITY_NAME_METADATA_HL
enum ACTIVITY_HL
enum BEFORE_RB_HL
enum FOR_RB_HL
enum AFTER_RB_HL
enum ACTIVITY_STV_CREATOR_FN_HL
enum ACTIVITY_AFTER_RULEBOOKS_HL
enum ACTIVITY_ATB_RULEBOOKS_HL
enum ACTIVITY_BEFORE_RULEBOOKS_HL
enum ACTIVITY_FOR_RULEBOOKS_HL
enum ACTIVITY_VAR_CREATORS_HL

§8.1.8. Establish activities8.1.8 =

    submodule_identity *activities = Packaging::register_submodule(I"activities");

    H_BEGIN(HierarchyLocations::local_submodule(activities))
        H_BEGIN_AP(ACTIVITIES_HAP,            I"activity", I"_activity")
            H_C_U(ACTIVITY_NAME_METADATA_HL,  I"^name")
            H_C_G(ACTIVITY_HL,                I"V")
            H_PKG(BEFORE_RB_HL,               I"before_rb", I"_rulebook")
            H_PKG(FOR_RB_HL,                  I"for_rb", I"_rulebook")
            H_PKG(AFTER_RB_HL,                I"after_rb", I"_rulebook")
            H_F_U(ACTIVITY_STV_CREATOR_FN_HL, I"stv_creator_fn")
        H_END
    H_END

    H_BEGIN(HierarchyLocations::synoptic_submodule(I, activities))
        H_C_T(ACTIVITY_AFTER_RULEBOOKS_HL,    I"Activity_after_rulebooks")
        H_C_T(ACTIVITY_ATB_RULEBOOKS_HL,      I"Activity_atb_rulebooks")
        H_C_T(ACTIVITY_BEFORE_RULEBOOKS_HL,   I"Activity_before_rulebooks")
        H_C_T(ACTIVITY_FOR_RULEBOOKS_HL,      I"Activity_for_rulebooks")
        H_C_T(ACTIVITY_VAR_CREATORS_HL,       I"activity_var_creators")
    H_END

§8.1.9. Adjectives.

enum ADJECTIVES_HAP
enum ADJECTIVE_HL
enum ADJECTIVE_MEANINGS_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 = Packaging::register_submodule(I"adjectives");

    H_BEGIN(HierarchyLocations::local_submodule(adjectives))
        H_BEGIN_AP(ADJECTIVES_HAP,            I"adjective", I"_adjective")
            H_C_U(ADJECTIVE_HL,               I"adjective")
            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(ADJECTIVE_MEANINGS_HAP,    I"adjective_meaning", I"_adjective_meaning")
            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

§8.1.12. Establish bibliographic8.1.12 =

    submodule_identity *bibliographic = Packaging::register_submodule(I"bibliographic");

    H_BEGIN(HierarchyLocations::synoptic_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_END

§8.1.13. Chronology.

enum PAST_ACTION_PATTERNS_HAP
enum PAP_FN_HL
enum TIMEDEVENTSTABLE_HL
enum TIMEDEVENTTIMESTABLE_HL
enum PASTACTIONSI6ROUTINES_HL
enum NO_PAST_TENSE_CONDS_HL
enum NO_PAST_TENSE_ACTIONS_HL
enum TESTSINGLEPASTSTATE_HL

§8.1.14. Establish chronology8.1.14 =

    submodule_identity *chronology = Packaging::register_submodule(I"chronology");

    H_BEGIN(HierarchyLocations::local_submodule(chronology))
        H_BEGIN_AP(PAST_ACTION_PATTERNS_HAP,  I"past_action_pattern", I"_past_action_pattern")
            H_F_G(PAP_FN_HL,                  I"pap_fn", I"PAPR")
        H_END
    H_END
    H_BEGIN(HierarchyLocations::synoptic_submodule(I, chronology))
        H_C_T(TIMEDEVENTSTABLE_HL,            I"TimedEventsTable")
        H_C_T(TIMEDEVENTTIMESTABLE_HL,        I"TimedEventTimesTable")
        H_C_T(PASTACTIONSI6ROUTINES_HL,       I"PastActionsI6Routines")
        H_C_T(NO_PAST_TENSE_CONDS_HL,         I"NO_PAST_TENSE_CONDS")
        H_C_T(NO_PAST_TENSE_ACTIONS_HL,       I"NO_PAST_TENSE_ACTIONS")
        H_F_T(TESTSINGLEPASTSTATE_HL,         I"test_fn", I"TestSinglePastState")
    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_METADATA_HL
enum MODAL_CONJUGATION_FN_HL
enum VERBS_HAP
enum VERB_NAME_METADATA_HL
enum NONMODAL_CONJUGATION_FN_HL
enum VERB_FORMS_HAP
enum FORM_FN_HL
enum CONJUGATION_FN_HL

§8.1.16. Establish conjugations8.1.16 =

    submodule_identity *conjugations = Packaging::register_submodule(I"conjugations");

    H_BEGIN(HierarchyLocations::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(HierarchyLocations::local_submodule(conjugations))
        H_BEGIN_AP(MVERBS_HAP,                I"mverb", I"_modal_verb")
            H_C_U(MVERB_NAME_METADATA_HL,     I"^name")
            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_METADATA_HL,      I"^name")
            H_F_G(NONMODAL_CONJUGATION_FN_HL, I"conjugation_fn", I"ConjugateVerb")
            H_BEGIN_AP(VERB_FORMS_HAP,        I"form", I"_verb_form")
                H_F_U(FORM_FN_HL,             I"form_fn")
            H_END
        H_END
    H_END

§8.1.17. Equations.

enum EQUATIONS_HAP
enum SOLVE_FN_HL

§8.1.18. Establish equations8.1.18 =

    submodule_identity *equations = Packaging::register_submodule(I"equations");

    H_BEGIN(HierarchyLocations::local_submodule(equations))
        H_BEGIN_AP(EQUATIONS_HAP,             I"equation", I"_equation")
            H_F_U(SOLVE_FN_HL,                I"solve_fn")
        H_END
    H_END

§8.1.19. Extensions.

enum SHOWEXTENSIONVERSIONS_HL
enum SHOWFULLEXTENSIONVERSIONS_HL
enum SHOWONEEXTENSION_HL

§8.1.20. Establish extensions8.1.20 =

    submodule_identity *extensions = Packaging::register_submodule(I"extensions");

    H_BEGIN(HierarchyLocations::synoptic_submodule(I, extensions))
        H_F_T(SHOWEXTENSIONVERSIONS_HL,       I"showextensionversions_fn", I"ShowExtensionVersions")
        H_F_T(SHOWFULLEXTENSIONVERSIONS_HL,   I"showfullextensionversions_fn", I"ShowFullExtensionVersions")
        H_F_T(SHOWONEEXTENSION_HL,            I"showoneextension_fn", I"ShowOneExtension")
    H_END

§8.1.21. External files.

enum EXTERNAL_FILES_HAP
enum FILE_HL
enum IFID_HL

§8.1.22. Establish external files8.1.22 =

    submodule_identity *external_files = Packaging::register_submodule(I"external_files");

    H_BEGIN(HierarchyLocations::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.23. Grammar.

enum COND_TOKENS_HAP
enum CONDITIONAL_TOKEN_FN_HL
enum CONSULT_TOKENS_HAP
enum CONSULT_FN_HL
enum TESTS_HAP
enum SCRIPT_HL
enum REQUIREMENTS_HL
enum LOOP_OVER_SCOPES_HAP
enum LOOP_OVER_SCOPE_FN_HL
enum MISTAKES_HAP
enum MISTAKE_FN_HL
enum NAMED_ACTION_PATTERNS_HAP
enum NAP_FN_HL
enum NAMED_TOKENS_HAP
enum PARSE_LINE_FN_HL
enum NOUN_FILTERS_HAP
enum NOUN_FILTER_FN_HL
enum PARSE_NAMES_HAP
enum PARSE_NAME_FN_HL
enum PARSE_NAME_DASH_FN_HL
enum SCOPE_FILTERS_HAP
enum SCOPE_FILTER_FN_HL
enum SLASH_TOKENS_HAP
enum SLASH_FN_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 TESTSCRIPTSUB_HL
enum INTERNALTESTCASES_HL
enum COMMANDS_HAP
enum VERB_DECLARATION_ARRAY_HL

§8.1.24. Establish grammar8.1.24 =

    submodule_identity *grammar = Packaging::register_submodule(I"grammar");

    H_BEGIN(HierarchyLocations::local_submodule(grammar))
        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_BEGIN_AP(CONSULT_TOKENS_HAP,        I"consult_token", I"_consult_token")
            H_F_G(CONSULT_FN_HL,              I"consult_fn", I"Consult_Grammar")
        H_END
        H_BEGIN_AP(TESTS_HAP,                 I"test", I"_test")
            H_C_U(SCRIPT_HL,                  I"script")
            H_C_U(REQUIREMENTS_HL,            I"requirements")
        H_END
        H_BEGIN_AP(LOOP_OVER_SCOPES_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_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(NAMED_ACTION_PATTERNS_HAP, I"named_action_pattern", I"_named_action_pattern")
            H_F_G(NAP_FN_HL,                  I"nap_fn", I"NAP")
        H_END
        H_BEGIN_AP(NAMED_TOKENS_HAP,          I"named_token", I"_named_token")
            H_F_G(PARSE_LINE_FN_HL,           I"parse_line_fn", I"GPR_Line")
        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_F_G(PARSE_NAME_FN_HL,           I"parse_name_fn", I"Parse_Name_GV")
            H_F_G(PARSE_NAME_DASH_FN_HL,      I"parse_name_fn", I"PN_for_S")
        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(HierarchyLocations::synoptic_submodule(I, grammar))
        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_F_T(TESTSCRIPTSUB_HL,               I"TestScriptSub_fn", I"TestScriptSub")
        H_F_T(INTERNALTESTCASES_HL,           I"run_tests_fn", I"InternalTestCases")
        H_BEGIN_AP(COMMANDS_HAP,              I"command", I"_command")
            H_F_G(VERB_DECLARATION_ARRAY_HL,  NULL, I"GV_Grammar")
        H_END
    H_END

§8.1.25. Instances.

enum INSTANCES_HAP
enum INSTANCE_NAME_METADATA_HL
enum INSTANCE_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

§8.1.26. Establish instances8.1.26 =

    submodule_identity *instances = Packaging::register_submodule(I"instances");

    H_BEGIN(HierarchyLocations::local_submodule(instances))
        H_BEGIN_AP(INSTANCES_HAP,             I"instance", I"_instance")
            H_C_U(INSTANCE_NAME_METADATA_HL,  I"^name")
            H_C_U(INSTANCE_HL,                I"I")
            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_BEGIN_AP(INLINE_PROPERTIES_HAP, I"inline_property", I"_inline_property")
                H_C_U(INLINE_PROPERTY_HL,     I"inline")
            H_END
        H_END
    H_END

§8.1.27. Interactive Fiction.

enum INITIAL_MAX_SCORE_HL
enum NO_DIRECTIONS_HL
enum SHOWSCENESTATUS_HL
enum DETECTSCENECHANGE_HL
enum MAP_STORAGE_HL
enum INITIALSITUATION_HL
enum PLAYER_OBJECT_INIS_HL
enum START_OBJECT_INIS_HL
enum START_ROOM_INIS_HL
enum START_TIME_INIS_HL
enum DONE_INIS_HL
enum DIRECTIONS_HAP
enum DIRECTION_HL

§8.1.28. Establish int-fiction8.1.28 =

    submodule_identity *interactive_fiction = Packaging::register_submodule(I"interactive_fiction");

    H_BEGIN(HierarchyLocations::synoptic_submodule(I, interactive_fiction))
        H_C_T(INITIAL_MAX_SCORE_HL,           I"INITIAL_MAX_SCORE")
        H_C_T(NO_DIRECTIONS_HL,               I"No_Directions")
        H_F_T(SHOWSCENESTATUS_HL,             I"show_scene_status_fn", I"ShowSceneStatus")
        H_F_T(DETECTSCENECHANGE_HL,           I"detect_scene_change_fn", I"DetectSceneChange")
        H_C_T(MAP_STORAGE_HL,                 I"Map_Storage")
        H_C_T(INITIALSITUATION_HL,            I"InitialSituation")
        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(DONE_INIS_HL,                   I"DONE_INIS")
        H_BEGIN_AP(DIRECTIONS_HAP,            I"direction", I"_direction")
            H_C_G(DIRECTION_HL,               I"DirectionObject")
        H_END
    H_END

§8.1.29. Kinds.

enum K_UNCHECKED_HL
enum K_UNCHECKED_FUNCTION_HL
enum K_TYPELESS_INT_HL
enum K_TYPELESS_STRING_HL
enum RUCKSACK_CLASS_HL
enum KIND_HAP
enum KIND_NAME_METADATA_HL
enum KIND_CLASS_HL
enum KIND_HL
enum WEAK_ID_HL
enum ICOUNT_HL
enum ILIST_HL
enum DEFAULT_VALUE_HL
enum DECREMENT_FN_HL
enum INCREMENT_FN_HL
enum PRINT_FN_HL
enum PRINT_DASH_FN_HL
enum RANGER_FN_HL
enum DEFAULT_CLOSURE_FN_HL
enum GPR_FN_HL
enum INSTANCE_GPR_FN_HL
enum INSTANCE_LIST_HL
enum FIRST_INSTANCE_HL
enum NEXT_INSTANCE_HL
enum COUNT_INSTANCE_1_HL
enum COUNT_INSTANCE_2_HL
enum COUNT_INSTANCE_3_HL
enum COUNT_INSTANCE_4_HL
enum COUNT_INSTANCE_5_HL
enum COUNT_INSTANCE_6_HL
enum COUNT_INSTANCE_7_HL
enum COUNT_INSTANCE_8_HL
enum COUNT_INSTANCE_9_HL
enum COUNT_INSTANCE_10_HL
enum COUNT_INSTANCE_HL
enum KIND_INLINE_PROPERTIES_HAP
enum KIND_INLINE_PROPERTY_HL
enum DEFAULTVALUEOFKOV_HL
enum DEFAULTVALUEFINDER_HL
enum PRINTKINDVALUEPAIR_HL
enum KOVCOMPARISONFUNCTION_HL
enum KOVDOMAINSIZE_HL
enum KOVISBLOCKVALUE_HL
enum I7_KIND_NAME_HL
enum KOVSUPPORTFUNCTION_HL
enum SHOWMEDETAILS_HL
enum BASE_KIND_HWM_HL

§8.1.30. Establish kinds8.1.30 =

    submodule_identity *kinds = Packaging::register_submodule(I"kinds");

    H_BEGIN(HierarchyLocations::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_TYPELESS_INT_HL,              I"K_typeless_int")
        H_C_T(K_TYPELESS_STRING_HL,           I"K_typeless_string")
        H_C_T(RUCKSACK_CLASS_HL,              I"RUCKSACK_CLASS")
    H_END

    H_BEGIN(HierarchyLocations::local_submodule(kinds))
        H_BEGIN_AP(KIND_HAP,                  I"kind", I"_kind")
            H_C_U(KIND_NAME_METADATA_HL,      I"^name")
            H_C_G(KIND_CLASS_HL,              I"K")
            H_C_G(KIND_HL,                    I"KD")
            H_C_I(WEAK_ID_HL)
            H_C_I(ICOUNT_HL)
            H_C_I(ILIST_HL)
            H_C_U(DEFAULT_VALUE_HL,           I"default_value")
            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(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_C_S(FIRST_INSTANCE_HL,          I"_First")
            H_C_S(NEXT_INSTANCE_HL,           I"_Next")
            H_C_T(COUNT_INSTANCE_1_HL,        I"IK1_Count")
            H_C_T(COUNT_INSTANCE_2_HL,        I"IK2_Count")
            H_C_T(COUNT_INSTANCE_3_HL,        I"IK3_Count")
            H_C_T(COUNT_INSTANCE_4_HL,        I"IK4_Count")
            H_C_T(COUNT_INSTANCE_5_HL,        I"IK5_Count")
            H_C_T(COUNT_INSTANCE_6_HL,        I"IK6_Count")
            H_C_T(COUNT_INSTANCE_7_HL,        I"IK7_Count")
            H_C_T(COUNT_INSTANCE_8_HL,        I"IK8_Count")
            H_C_T(COUNT_INSTANCE_9_HL,        I"IK9_Count")
            H_C_T(COUNT_INSTANCE_10_HL,       I"IK10_Count")
            H_C_S(COUNT_INSTANCE_HL,          I"_Count")
            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_END
    H_END

    H_BEGIN(HierarchyLocations::synoptic_submodule(I, kinds))
        H_C_T(BASE_KIND_HWM_HL,               I"BASE_KIND_HWM")
        H_F_T(DEFAULTVALUEOFKOV_HL,           I"defaultvalue_fn", I"DefaultValueOfKOV")
        H_F_T(DEFAULTVALUEFINDER_HL,          I"defaultvaluefinder_fn", I"DefaultValueFinder")
        H_F_T(PRINTKINDVALUEPAIR_HL,          I"printkindvaluepair_fn", I"PrintKindValuePair")
        H_F_T(KOVCOMPARISONFUNCTION_HL,       I"comparison_fn", I"KOVComparisonFunction")
        H_F_T(KOVDOMAINSIZE_HL,               I"domainsize_fn", I"KOVDomainSize")
        H_F_T(KOVISBLOCKVALUE_HL,             I"blockvalue_fn", I"KOVIsBlockValue")
        H_F_T(I7_KIND_NAME_HL,                I"printkindname_fn", I"I7_Kind_Name")
        H_F_T(KOVSUPPORTFUNCTION_HL,          I"support_fn", I"KOVSupportFunction")
        H_F_T(SHOWMEDETAILS_HL,               I"showmedetails_fn", I"ShowMeDetails")
    H_END

§8.1.31. Phrases.

enum CLOSURES_HAP
enum CLOSURE_DATA_HL
enum PHRASES_HAP
enum REQUESTS_HAP
enum PHRASE_FN_HL
enum LABEL_STORAGES_HAP
enum LABEL_ASSOCIATED_STORAGE_HL

§8.1.32. Establish phrases8.1.32 =

    submodule_identity *phrases = Packaging::register_submodule(I"phrases");

    H_BEGIN(HierarchyLocations::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_F_U(PHRASE_FN_HL,           I"phrase_fn")
            H_END
        H_END
    H_END

    H_BEGIN(HierarchyLocations::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

§8.1.33. Properties.

enum PROPERTIES_HAP
enum PROPERTY_NAME_METADATA_HL
enum PROPERTY_HL
enum EITHER_OR_GPR_FN_HL
enum CCOUNT_PROPERTY_HL

§8.1.34. Establish properties8.1.34 =

    submodule_identity *properties = Packaging::register_submodule(I"properties");

    H_BEGIN(HierarchyLocations::local_submodule(properties))
        H_BEGIN_AP(PROPERTIES_HAP,            I"property", I"_property")
            H_C_U(PROPERTY_NAME_METADATA_HL,  I"^name")
            H_C_T(PROPERTY_HL,                I"P")
            H_F_G(EITHER_OR_GPR_FN_HL,        I"either_or_GPR_fn", I"PRN_PN")
        H_END
    H_END

    H_BEGIN(HierarchyLocations::synoptic_submodule(I, properties))
        H_C_T(CCOUNT_PROPERTY_HL,             I"CCOUNT_PROPERTY")
    H_END

§8.1.35. 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_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 CREATEDYNAMICRELATIONS_HL
enum CCOUNT_BINARY_PREDICATE_HL
enum ITERATERELATIONS_HL
enum RPROPERTY_HL

§8.1.36. Establish relations8.1.36 =

    submodule_identity *relations = Packaging::register_submodule(I"relations");

    H_BEGIN(HierarchyLocations::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(HierarchyLocations::local_submodule(relations))
        H_BEGIN_AP(RELATIONS_HAP,             I"relation", I"_relation")
            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_END
    H_END

    H_BEGIN(HierarchyLocations::synoptic_submodule(I, relations))
        H_F_T(CREATEDYNAMICRELATIONS_HL,      I"creator_fn", I"CreateDynamicRelations")
        H_C_T(CCOUNT_BINARY_PREDICATE_HL,     I"CCOUNT_BINARY_PREDICATE")
        H_F_T(ITERATERELATIONS_HL,            I"iterator_fn", I"IterateRelations")
        H_F_T(RPROPERTY_HL,                   I"property_fn", I"RProperty")
    H_END

§8.1.37. Rulebooks.

enum EMPTY_RULEBOOK_INAME_HL
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_METADATA_HL
enum OUTCOME_HL
enum RULEBOOKS_HAP
enum RULEBOOK_NAME_METADATA_HL
enum RULEBOOK_PNAME_METADATA_HL
enum RULEBOOK_VARC_METADATA_HL
enum RULEBOOK_RUN_FN_METADATA_HL
enum RULEBOOK_ID_HL
enum RUN_FN_HL
enum RULEBOOK_STV_CREATOR_FN_HL
enum NUMBER_RULEBOOKS_CREATED_HL
enum RULEBOOK_VAR_CREATORS_HL
enum SLOW_LOOKUP_HL
enum RULEBOOKS_ARRAY_HL
enum RULEBOOKNAMES_HL

§8.1.38. Establish rulebooks8.1.38 =

    submodule_identity *rulebooks = Packaging::register_submodule(I"rulebooks");

    H_BEGIN(HierarchyLocations::generic_submodule(I, rulebooks))
        H_F_T(EMPTY_RULEBOOK_INAME_HL,        I"empty_fn", I"EMPTY_RULEBOOK")
        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(HierarchyLocations::local_submodule(rulebooks))
        H_BEGIN_AP(OUTCOMES_HAP,              I"rulebook_outcome", I"_outcome")
            H_C_U(OUTCOME_NAME_METADATA_HL,   I"^name")
            H_C_U(OUTCOME_HL,                 I"outcome")
        H_END
        H_BEGIN_AP(RULEBOOKS_HAP,             I"rulebook", I"_rulebook")
            H_C_U(RULEBOOK_NAME_METADATA_HL,  I"^name")
            H_C_U(RULEBOOK_PNAME_METADATA_HL, I"^printed_name")
            H_C_U(RULEBOOK_RUN_FN_METADATA_HL, I"^run_fn")
            H_C_U(RULEBOOK_VARC_METADATA_HL,  I"^var_creator")
            H_C_U(RULEBOOK_ID_HL,             I"rulebook_id")
            H_F_U(RUN_FN_HL,                  I"run_fn")
            H_F_U(RULEBOOK_STV_CREATOR_FN_HL, I"stv_creator_fn")
        H_END
    H_END

    H_BEGIN(HierarchyLocations::synoptic_submodule(I, rulebooks))
        H_C_T(NUMBER_RULEBOOKS_CREATED_HL,    I"NUMBER_RULEBOOKS_CREATED")
        H_C_T(RULEBOOK_VAR_CREATORS_HL,       I"rulebook_var_creators")
        H_F_T(SLOW_LOOKUP_HL,                 I"slow_lookup_fn", I"MStack_GetRBVarCreator")
        H_C_T(RULEBOOKS_ARRAY_HL,             I"rulebooks_array")
        H_C_T(RULEBOOKNAMES_HL,               I"RulebookNames")
    H_END

§8.1.39. Rules.

enum RULES_HAP
enum RULE_NAME_METADATA_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 LAUNCHER_HL
enum RESP_VALUE_METADATA_HL
enum RULE_METADATA_HL
enum MARKER_METADATA_HL
enum GROUP_HL
enum RULEPRINTINGRULE_HL
enum RESPONSETEXTS_HL
enum NO_RESPONSES_HL
enum RESPONSEDIVISIONS_HL

§8.1.40. Establish rules8.1.40 =

    submodule_identity *rules = Packaging::register_submodule(I"rules");

    H_BEGIN(HierarchyLocations::local_submodule(rules))
        H_BEGIN_AP(RULES_HAP,                 I"rule", I"_rule")
            H_C_U(RULE_NAME_METADATA_HL,      I"^name")
            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_METADATA_HL, I"^value")
                H_C_U(RULE_METADATA_HL,       I"^rule")
                H_C_U(MARKER_METADATA_HL,     I"^marker")
                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_F_U(LAUNCHER_HL,            I"launcher")
            H_END
        H_END
    H_END

    H_BEGIN(HierarchyLocations::synoptic_submodule(I, rules))
        H_C_T(RESPONSEDIVISIONS_HL,           I"ResponseDivisions")
        H_C_T(RESPONSETEXTS_HL,               I"ResponseTexts")
        H_C_T(NO_RESPONSES_HL,                I"NO_RESPONSES")
        H_F_T(RULEPRINTINGRULE_HL,            I"print_fn", I"RulePrintingRule")
    H_END

§8.1.41. Tables.

enum TABLES_HAP
enum TABLE_NAME_METADATA_HL
enum TABLE_DATA_HL
enum TABLE_COLUMNS_HAP
enum COLUMN_DATA_HL
enum TC_KOV_HL
enum TB_BLANKS_HL

§8.1.42. Establish tables8.1.42 =

    submodule_identity *tables = Packaging::register_submodule(I"tables");

    H_BEGIN(HierarchyLocations::local_submodule(tables))
        H_BEGIN_AP(TABLES_HAP,                I"table", I"_table")
            H_C_U(TABLE_NAME_METADATA_HL,     I"^name")
            H_C_U(TABLE_DATA_HL,              I"table_data")
            H_BEGIN_AP(TABLE_COLUMNS_HAP,     I"table_column", I"_table_column")
                H_C_U(COLUMN_DATA_HL,         I"column_data")
            H_END
        H_END
    H_END

    H_BEGIN(HierarchyLocations::synoptic_submodule(I, tables))
        H_C_T(TB_BLANKS_HL,                   I"TB_Blanks")
        H_F_T(TC_KOV_HL,                      I"weak_kind_ID_of_column_entry_fn", I"TC_KOV")
    H_END

§8.1.43. Variables.

enum VARIABLES_HAP
enum VARIABLE_NAME_METADATA_HL
enum VARIABLE_HL

§8.1.44. Establish variables8.1.44 =

    submodule_identity *variables = Packaging::register_submodule(I"variables");

    H_BEGIN(HierarchyLocations::local_submodule(variables))
        H_BEGIN_AP(VARIABLES_HAP,             I"variable", I"_variable")
            H_C_U(VARIABLE_NAME_METADATA_HL,  I"^name")
            H_C_G(VARIABLE_HL,                I"V")
        H_END
    H_END

§8.1.45. 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

§8.1.46. Establish enclosed matter8.1.46 =

    H_BEGIN(HierarchyLocations::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_C_U(RTP_HL,                         I"rtp")
    H_END

§8.1.47.

enum K_OBJECT_XPACKAGE from 0
enum K_NUMBER_XPACKAGE
enum K_TIME_XPACKAGE
enum K_TRUTH_STATE_XPACKAGE
enum K_TABLE_XPACKAGE
enum K_VERB_XPACKAGE
enum K_FIGURE_NAME_XPACKAGE
enum K_SOUND_NAME_XPACKAGE
enum K_USE_OPTION_XPACKAGE
enum K_EXTERNAL_FILE_XPACKAGE
enum K_RULEBOOK_OUTCOME_XPACKAGE
enum K_RESPONSE_XPACKAGE
enum K_SCENE_XPACKAGE
enum V_COMMAND_PROMPT_XPACKAGE
enum TESTUSEOPTION_HL
enum PRINT_USE_OPTION_HL
enum TABLEOFTABLES_HL
enum TABLEOFVERBS_HL
enum CAPSHORTNAME_HL
enum COMMANDPROMPTTEXT_HL
enum DECIMAL_TOKEN_INNER_HL
enum NO_USE_OPTIONS_HL
enum RESOURCEIDSOFFIGURES_HL
enum RESOURCEIDSOFSOUNDS_HL
enum TIME_TOKEN_INNER_HL
enum TRUTH_STATE_TOKEN_INNER_HL
enum PRINT_TABLE_HL
enum PRINT_RULEBOOK_OUTCOME_HL
enum PRINT_RESPONSE_HL
enum PRINT_FIGURE_NAME_HL
enum PRINT_SOUND_NAME_HL
enum PRINT_EXTERNAL_FILE_NAME_HL
enum NO_EXTERNAL_FILES_HL
enum TABLEOFEXTERNALFILES_HL
enum PRINT_SCENE_HL

§8.1.48. The rest8.1.48 =

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

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

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

    H_BEGIN(HierarchyLocations::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

    H_BEGIN(HierarchyLocations::this_exotic_package(K_TABLE_XPACKAGE))
        H_C_T(TABLEOFTABLES_HL,               I"TableOfTables")
        H_F_T(PRINT_TABLE_HL,                 I"print_fn", I"PrintTableName")
    H_END

    H_BEGIN(HierarchyLocations::this_exotic_package(K_VERB_XPACKAGE))
        H_C_T(TABLEOFVERBS_HL,                I"TableOfVerbs")
    H_END

    H_BEGIN(HierarchyLocations::this_exotic_package(K_FIGURE_NAME_XPACKAGE))
        H_C_T(RESOURCEIDSOFFIGURES_HL,        I"ResourceIDsOfFigures")
        H_F_T(PRINT_FIGURE_NAME_HL,           I"print_fn", I"PrintFigureName")
    H_END

    H_BEGIN(HierarchyLocations::this_exotic_package(K_SOUND_NAME_XPACKAGE))
        H_C_T(RESOURCEIDSOFSOUNDS_HL,         I"ResourceIDsOfSounds")
        H_F_T(PRINT_SOUND_NAME_HL,            I"print_fn", I"PrintSoundName")
    H_END

    H_BEGIN(HierarchyLocations::this_exotic_package(K_USE_OPTION_XPACKAGE))
        H_C_T(NO_USE_OPTIONS_HL,              I"NO_USE_OPTIONS")
        H_F_T(TESTUSEOPTION_HL,               I"test_fn", I"TestUseOption")
        H_F_T(PRINT_USE_OPTION_HL,            I"print_fn", I"PrintUseOption")
    H_END

    H_BEGIN(HierarchyLocations::this_exotic_package(V_COMMAND_PROMPT_XPACKAGE))
        H_F_T(COMMANDPROMPTTEXT_HL,           I"command_prompt_text_fn", I"CommandPromptText")
    H_END

    H_BEGIN(HierarchyLocations::this_exotic_package(K_EXTERNAL_FILE_XPACKAGE))
        H_C_T(NO_EXTERNAL_FILES_HL,           I"NO_EXTERNAL_FILES")
        H_C_T(TABLEOFEXTERNALFILES_HL,        I"TableOfExternalFiles")
        H_F_T(PRINT_EXTERNAL_FILE_NAME_HL,    I"print_fn", I"PrintExternalFileName")
    H_END

    H_BEGIN(HierarchyLocations::this_exotic_package(K_RULEBOOK_OUTCOME_XPACKAGE))
        H_F_T(PRINT_RULEBOOK_OUTCOME_HL,      I"print_fn", I"RulebookOutcomePrintingRule")
    H_END

    H_BEGIN(HierarchyLocations::this_exotic_package(K_RESPONSE_XPACKAGE))
        H_F_T(PRINT_RESPONSE_HL,              I"print_fn", I"PrintResponse")
    H_END

    H_BEGIN(HierarchyLocations::this_exotic_package(K_SCENE_XPACKAGE))
        H_F_T(PRINT_SCENE_HL,                 I"print_fn", I"PrintSceneName")
    H_END

§8.2.1. Veneer-defined symbols. The "veneer" in the Inform 6 compiler consists of a few constants and functions automatically created by the compiler itself, and which therefore have no source code producing them. For example, WORDSIZE is a constant which gives the size of a word of data in bytes — for Inform 6, this is always either 2 or 4.

The Inform compiler only needs to refer to a few of these symbols directly, and here they are. For their meanings, see the Inform 6 Technical Manual.

enum SELF_HL
enum DEBUG_HL
enum TARGET_ZCODE_HL
enum TARGET_GLULX_HL
enum DICT_WORD_SIZE_HL
enum WORDSIZE_HL
enum INDIV_PROP_START_HL

§8.2.2. Establish veneer resources8.2.2 =

    H_BEGIN(HierarchyLocations::the_veneer(I))
        H_C_T(SELF_HL,                        I"self")
        H_C_T(DEBUG_HL,                       I"DEBUG")
        H_C_T(TARGET_ZCODE_HL,                I"TARGET_ZCODE")
        H_C_T(TARGET_GLULX_HL,                I"TARGET_GLULX")
        H_C_T(DICT_WORD_SIZE_HL,              I"DICT_WORD_SIZE")
        H_C_T(WORDSIZE_HL,                    I"WORDSIZE")
        H_C_T(INDIV_PROP_START_HL,            I"INDIV_PROP_START")
    H_END

§8.2.3. Kit-defined symbols. The Inform 7 compiler creates none of the constants below. (Note that some are the addresses of functions, but they are constants for our purposes here.) Instead, they are defined using Inform 6 notation in one of the kits. We don't need to know which kit; we simply leaves them as "plugs" to be connected to "sockets" in the linking stage — see Connectors (in bytecode).

enum THESAME_HL
enum PLURALFOUND_HL
enum THEDARK_HL
enum ACT_REQUESTER_HL
enum ACTION_HL
enum ACTIONCURRENTLYHAPPENINGFLAG_HL
enum ACTOR_HL
enum ACTOR_LOCATION_HL
enum ADJUSTPARAGRAPHPOINT_HL
enum ALLOWINSHOWME_HL
enum ANIMATE_HL
enum ARGUMENTTYPEFAILED_HL
enum ARTICLEDESCRIPTORS_HL
enum AUXF_MAGIC_VALUE_HL
enum AUXF_STATUS_IS_CLOSED_HL
enum BLKVALUECOPY_HL
enum BLKVALUECOPYAZ_HL
enum BLKVALUECREATE_HL
enum BLKVALUECREATEONSTACK_HL
enum BLKVALUEERROR_HL
enum BLKVALUEFREE_HL
enum BLKVALUEFREEONSTACK_HL
enum BLKVALUEWRITE_HL
enum C_STYLE_HL
enum CHECKKINDRETURNED_HL
enum CLEARPARAGRAPHING_HL
enum COMPONENT_CHILD_HL
enum COMPONENT_PARENT_HL
enum COMPONENT_SIBLING_HL
enum CONSTANT_PACKED_TEXT_STORAGE_HL
enum CONSTANT_PERISHABLE_TEXT_STORAGE_HL
enum CONSULT_FROM_HL
enum CONSULT_WORDS_HL
enum CONTAINER_HL
enum CUBEROOT_HL
enum DA_NAME_HL
enum DB_RULE_HL
enum DEADFLAG_HL
enum DEBUG_RULES_HL
enum DEBUG_SCENES_HL
enum DECIMALNUMBER_HL
enum DETECTPLURALWORD_HL
enum DIGITTOVALUE_HL
enum DIVIDEPARAGRAPHPOINT_HL
enum DOUBLEHASHSETRELATIONHANDLER_HL
enum DURINGSCENEMATCHING_HL
enum ELEMENTARY_TT_HL
enum EMPTY_TABLE_HL
enum EMPTY_TEXT_PACKED_HL
enum EMPTY_TEXT_VALUE_HL
enum EMPTYRELATIONHANDLER_HL
enum ENGLISH_BIT_HL
enum ETYPE_HL
enum EXISTSTABLELOOKUPCORR_HL
enum EXISTSTABLELOOKUPENTRY_HL
enum EXISTSTABLEROWCORR_HL
enum FLOATPARSE_HL
enum FOLLOWRULEBOOK_HL
enum formal_par0_HL
enum formal_par1_HL
enum formal_par2_HL
enum formal_par3_HL
enum formal_par4_HL
enum formal_par5_HL
enum formal_par6_HL
enum formal_par7_HL
enum FORMAL_RV_HL
enum FOUND_EVERYWHERE_HL
enum GENERATERANDOMNUMBER_HL
enum GENERICVERBSUB_HL
enum GETGNAOFOBJECT_HL
enum GPR_FAIL_HL
enum GPR_NUMBER_HL
enum GPR_PREPOSITION_HL
enum GPR_TT_HL
enum GPROPERTY_HL
enum HASHLISTRELATIONHANDLER_HL
enum I7SFRAME_HL
enum INDENT_BIT_HL
enum INP1_HL
enum INP2_HL
enum INTEGERDIVIDE_HL
enum INTEGERREMAINDER_HL
enum INVENTORY_STAGE_HL
enum KEEP_SILENT_HL
enum KINDATOMIC_HL
enum LATEST_RULE_RESULT_HL
enum LIST_ITEM_BASE_HL
enum LIST_ITEM_KOV_F_HL
enum LIST_OF_TY_DESC_HL
enum LIST_OF_TY_GETITEM_HL
enum LIST_OF_TY_GETLENGTH_HL
enum LIST_OF_TY_INSERTITEM_HL
enum LIST_OF_TY_SAY_HL
enum LIST_OF_TY_SETLENGTH_HL
enum LOCATION_HL
enum LOCATIONOF_HL
enum LOOPOVERSCOPE_HL
enum LOS_RV_HL
enum MSTACK_HL
enum MSTVO_HL
enum MSTVON_HL
enum NAME_HL
enum NEWLINE_BIT_HL
enum NEXTBEST_ETYPE_HL
enum NEXTWORDSTOPPED_HL
enum NOARTICLE_BIT_HL
enum NOTINCONTEXTPE_HL
enum NOUN_HL
enum NUMBER_TY_ABS_HL
enum NUMBER_TY_TO_REAL_NUMBER_TY_HL
enum NUMBER_TY_TO_TIME_TY_HL
enum OTOVRELROUTETO_HL
enum PACKED_TEXT_STORAGE_HL
enum PARACONTENT_HL
enum PARAMETER_VALUE_HL
enum PARSED_NUMBER_HL
enum PARSER_ACTION_HL
enum PARSER_ONE_HL
enum PARSER_TRACE_HL
enum PARSER_TWO_HL
enum PARSERERROR_HL
enum PARSETOKENSTOPPED_HL
enum PAST_CHRONOLOGICAL_RECORD_HL
enum PLACEINSCOPE_HL
enum PLAYER_HL
enum PNTOVP_HL
enum PRESENT_CHRONOLOGICAL_RECORD_HL
enum PRINTORRUN_HL
enum PRIOR_NAMED_LIST_HL
enum PRIOR_NAMED_LIST_GENDER_HL
enum PRIOR_NAMED_NOUN_HL
enum PROPERTY_LOOP_SIGN_HL
enum PROPERTY_TO_BE_TOTALLED_HL
enum REAL_LOCATION_HL
enum REAL_NUMBER_TY_ABS_HL
enum REAL_NUMBER_TY_APPROXIMATE_HL
enum REAL_NUMBER_TY_COMPARE_HL
enum REAL_NUMBER_TY_CUBE_ROOT_HL
enum REAL_NUMBER_TY_DIVIDE_HL
enum REAL_NUMBER_TY_MINUS_HL
enum REAL_NUMBER_TY_NAN_HL
enum REAL_NUMBER_TY_NEGATE_HL
enum REAL_NUMBER_TY_PLUS_HL
enum REAL_NUMBER_TY_POW_HL
enum REAL_NUMBER_TY_REMAINDER_HL
enum REAL_NUMBER_TY_ROOT_HL
enum REAL_NUMBER_TY_SAY_HL
enum REAL_NUMBER_TY_TIMES_HL
enum REAL_NUMBER_TY_TO_NUMBER_TY_HL
enum REASON_THE_ACTION_FAILED_HL
enum RELATION_EMPTYEQUIV_HL
enum RELATION_EMPTYOTOO_HL
enum RELATION_EMPTYVTOV_HL
enum RELATION_RSHOWOTOO_HL
enum RELATION_SHOWEQUIV_HL
enum RELATION_SHOWOTOO_HL
enum RELATION_SHOWVTOV_HL
enum RELATION_TY_EQUIVALENCEADJECTIVE_HL
enum RELATION_TY_NAME_HL
enum RELATION_TY_OTOOADJECTIVE_HL
enum RELATION_TY_OTOVADJECTIVE_HL
enum RELATION_TY_SYMMETRICADJECTIVE_HL
enum RELATION_TY_VTOOADJECTIVE_HL
enum RELATIONTEST_HL
enum RELFOLLOWVECTOR_HL
enum RELS_EMPTY_HL
enum RESPONSEVIAACTIVITY_HL
enum RLANY_CAN_GET_X_HL
enum RLANY_CAN_GET_Y_HL
enum RLANY_GET_X_HL
enum RLIST_ALL_X_HL
enum RLIST_ALL_Y_HL
enum RLNGETF_HL
enum ROUNDOFFVALUE_HL
enum ROUTINEFILTER_TT_HL
enum RR_STORAGE_HL
enum RTP_RELKINDVIOLATION_HL
enum RTP_RELMINIMAL_HL
enum RULEBOOKFAILS_HL
enum RULEBOOKPARBREAK_HL
enum RULEBOOKSUCCEEDS_HL
enum RUNTIMEPROBLEM_HL
enum SAY__N_HL
enum SAY__P_HL
enum SAY__PC_HL
enum SCENE_ENDED_HL
enum SCENE_ENDINGS_HL
enum SCENE_LATEST_ENDING_HL
enum SCENE_STARTED_HL
enum SCENE_STATUS_HL
enum SCOPE_STAGE_HL
enum SCOPE_TT_HL
enum SECOND_HL
enum SHORT_NAME_HL
enum SIGNEDCOMPARE_HL
enum SPECIAL_WORD_HL
enum SQUAREROOT_HL
enum STACKFRAMECREATE_HL
enum STORED_ACTION_TY_CURRENT_HL
enum STORED_ACTION_TY_TRY_HL
enum STORY_TENSE_HL
enum SUPPORTER_HL
enum SUPPRESS_SCOPE_LOOPS_HL
enum SUPPRESS_TEXT_SUBSTITUTION_HL
enum TABLE_NOVALUE_HL
enum TABLELOOKUPCORR_HL
enum TABLELOOKUPENTRY_HL
enum TESTACTIONBITMAP_HL
enum TESTACTIVITY_HL
enum TESTREGIONALCONTAINMENT_HL
enum TESTSCOPE_HL
enum TESTSTART_HL
enum TEXT_TY_COMPARE_HL
enum TEXT_TY_EXPANDIFPERISHABLE_HL
enum TEXT_TY_SAY_HL
enum THE_TIME_HL
enum THEEMPTYTABLE_HL
enum THEN1__WD_HL
enum TIMESACTIONHASBEENHAPPENING_HL
enum TIMESACTIONHASHAPPENED_HL
enum TRYACTION_HL
enum TRYGIVENOBJECT_HL
enum TURNSACTIONHASBEENHAPPENING_HL
enum UNDERSTAND_AS_MISTAKE_NUMBER_HL
enum UNICODE_TEMP_HL
enum VTOORELROUTETO_HL
enum VTOVRELROUTETO_HL
enum WHEN_SCENE_BEGINS_HL
enum WHEN_SCENE_ENDS_HL
enum WN_HL
enum WORDADDRESS_HL
enum WORDINPROPERTY_HL
enum WORDLENGTH_HL

§8.2.4. Establish kit-defined resources8.2.4 =

    H_BEGIN(HierarchyLocations::plug())
        H_C_T(THESAME_HL,                          I"##TheSame")
        H_C_T(PLURALFOUND_HL,                      I"##PluralFound")
        H_C_T(THEDARK_HL,                          I"thedark")
        H_C_T(ACT_REQUESTER_HL,                    I"act_requester")
        H_C_T(ACTION_HL,                           I"action")
        H_C_T(ACTIONCURRENTLYHAPPENINGFLAG_HL,     I"ActionCurrentlyHappeningFlag")
        H_C_T(ACTOR_HL,                            I"actor")
        H_C_T(ACTOR_LOCATION_HL,                   I"actor_location")
        H_C_T(ADJUSTPARAGRAPHPOINT_HL,             I"AdjustParagraphPoint")
        H_C_T(ALLOWINSHOWME_HL,                    I"AllowInShowme")
        H_C_T(ANIMATE_HL,                          I"animate")
        H_C_T(ARGUMENTTYPEFAILED_HL,               I"ArgumentTypeFailed")
        H_C_T(ARTICLEDESCRIPTORS_HL,               I"ArticleDescriptors")
        H_C_T(AUXF_MAGIC_VALUE_HL,                 I"AUXF_MAGIC_VALUE")
        H_C_T(AUXF_STATUS_IS_CLOSED_HL,            I"AUXF_STATUS_IS_CLOSED")
        H_C_T(BLKVALUECOPY_HL,                     I"BlkValueCopy")
        H_C_T(BLKVALUECOPYAZ_HL,                   I"BlkValueCopyAZ")
        H_C_T(BLKVALUECREATE_HL,                   I"BlkValueCreate")
        H_C_T(BLKVALUECREATEONSTACK_HL,            I"BlkValueCreateOnStack")
        H_C_T(BLKVALUEERROR_HL,                    I"BlkValueError")
        H_C_T(BLKVALUEFREE_HL,                     I"BlkValueFree")
        H_C_T(BLKVALUEFREEONSTACK_HL,              I"BlkValueFreeOnStack")
        H_C_T(BLKVALUEWRITE_HL,                    I"BlkValueWrite")
        H_C_T(C_STYLE_HL,                          I"c_style")
        H_C_T(CHECKKINDRETURNED_HL,                I"CheckKindReturned")
        H_C_T(CLEARPARAGRAPHING_HL,                I"ClearParagraphing")
        H_C_T(COMPONENT_CHILD_HL,                  I"component_child")
        H_C_T(COMPONENT_PARENT_HL,                 I"component_parent")
        H_C_T(COMPONENT_SIBLING_HL,                I"component_sibling")
        H_C_T(CONSTANT_PACKED_TEXT_STORAGE_HL,     I"CONSTANT_PACKED_TEXT_STORAGE")
        H_C_T(CONSTANT_PERISHABLE_TEXT_STORAGE_HL, I"CONSTANT_PERISHABLE_TEXT_STORAGE")
        H_C_T(CONSULT_FROM_HL,                     I"consult_from")
        H_C_T(CONSULT_WORDS_HL,                    I"consult_words")
        H_C_T(CONTAINER_HL,                        I"container")
        H_C_T(CUBEROOT_HL,                         I"CubeRoot")
        H_C_T(DA_NAME_HL,                          I"DA_Name")
        H_C_T(DB_RULE_HL,                          I"DB_Rule")
        H_C_T(DEADFLAG_HL,                         I"deadflag")
        H_C_T(DEBUG_RULES_HL,                      I"debug_rules")
        H_C_T(DEBUG_SCENES_HL,                     I"debug_scenes")
        H_C_T(DECIMALNUMBER_HL,                    I"DecimalNumber")
        H_C_T(DETECTPLURALWORD_HL,                 I"DetectPluralWord")
        H_C_T(DIGITTOVALUE_HL,                     I"DigitToValue")
        H_C_T(DIVIDEPARAGRAPHPOINT_HL,             I"DivideParagraphPoint")
        H_C_T(DOUBLEHASHSETRELATIONHANDLER_HL,     I"DoubleHashSetRelationHandler")
        H_C_T(DURINGSCENEMATCHING_HL,              I"DuringSceneMatching")
        H_C_T(ELEMENTARY_TT_HL,                    I"ELEMENTARY_TT")
        H_C_T(EMPTY_TABLE_HL,                      I"TheEmptyTable")
        H_C_T(EMPTY_TEXT_PACKED_HL,                I"EMPTY_TEXT_PACKED")
        H_C_T(EMPTY_TEXT_VALUE_HL,                 I"EMPTY_TEXT_VALUE")
        H_C_T(EMPTYRELATIONHANDLER_HL,             I"EmptyRelationHandler")
        H_C_T(ENGLISH_BIT_HL,                      I"ENGLISH_BIT")
        H_C_T(ETYPE_HL,                            I"etype")
        H_C_T(EXISTSTABLELOOKUPCORR_HL,            I"ExistsTableLookUpCorr")
        H_C_T(EXISTSTABLELOOKUPENTRY_HL,           I"ExistsTableLookUpEntry")
        H_C_T(EXISTSTABLEROWCORR_HL,               I"ExistsTableRowCorr")
        H_C_T(FLOATPARSE_HL,                       I"FloatParse")
        H_C_T(FOLLOWRULEBOOK_HL,                   I"FollowRulebook")
        H_C_T(formal_par0_HL,                      I"formal_par0")
        H_C_T(formal_par1_HL,                      I"formal_par1")
        H_C_T(formal_par2_HL,                      I"formal_par2")
        H_C_T(formal_par3_HL,                      I"formal_par3")
        H_C_T(formal_par4_HL,                      I"formal_par4")
        H_C_T(formal_par5_HL,                      I"formal_par5")
        H_C_T(formal_par6_HL,                      I"formal_par6")
        H_C_T(formal_par7_HL,                      I"formal_par7")
        H_C_T(FORMAL_RV_HL,                        I"formal_rv")
        H_C_T(FOUND_EVERYWHERE_HL,                 I"FoundEverywhere")
        H_C_T(GENERATERANDOMNUMBER_HL,             I"GenerateRandomNumber")
        H_C_T(GENERICVERBSUB_HL,                   I"GenericVerbSub")
        H_C_T(GETGNAOFOBJECT_HL,                   I"GetGNAOfObject")
        H_C_T(GPR_FAIL_HL,                         I"GPR_FAIL")
        H_C_T(GPR_NUMBER_HL,                       I"GPR_NUMBER")
        H_C_T(GPR_PREPOSITION_HL,                  I"GPR_PREPOSITION")
        H_C_T(GPR_TT_HL,                           I"GPR_TT")
        H_C_T(GPROPERTY_HL,                        I"GProperty")
        H_C_T(HASHLISTRELATIONHANDLER_HL,          I"HashListRelationHandler")
        H_C_T(I7SFRAME_HL,                         I"I7SFRAME")
        H_C_T(INDENT_BIT_HL,                       I"INDENT_BIT")
        H_C_T(INP1_HL,                             I"inp1")
        H_C_T(INP2_HL,                             I"inp2")
        H_C_T(INTEGERDIVIDE_HL,                    I"IntegerDivide")
        H_C_T(INTEGERREMAINDER_HL,                 I"IntegerRemainder")
        H_C_T(INVENTORY_STAGE_HL,                  I"inventory_stage")
        H_C_T(KEEP_SILENT_HL,                      I"keep_silent")
        H_C_T(KINDATOMIC_HL,                       I"KindAtomic")
        H_C_T(LATEST_RULE_RESULT_HL,               I"latest_rule_result")
        H_C_T(LIST_ITEM_BASE_HL,                   I"LIST_ITEM_BASE")
        H_C_T(LIST_ITEM_KOV_F_HL,                  I"LIST_ITEM_KOV_F")
        H_C_T(LIST_OF_TY_DESC_HL,                  I"LIST_OF_TY_Desc")
        H_C_T(LIST_OF_TY_GETITEM_HL,               I"LIST_OF_TY_GetItem")
        H_C_T(LIST_OF_TY_GETLENGTH_HL,             I"LIST_OF_TY_GetLength")
        H_C_T(LIST_OF_TY_INSERTITEM_HL,            I"LIST_OF_TY_InsertItem")
        H_C_T(LIST_OF_TY_SAY_HL,                   I"LIST_OF_TY_Say")
        H_C_T(LIST_OF_TY_SETLENGTH_HL,             I"LIST_OF_TY_SetLength")
        H_C_T(LOCATION_HL,                         I"location")
        H_C_T(LOCATIONOF_HL,                       I"LocationOf")
        H_C_T(LOOPOVERSCOPE_HL,                    I"LoopOverScope")
        H_C_T(LOS_RV_HL,                           I"los_rv")
        H_C_T(MSTACK_HL,                           I"MStack")
        H_C_T(MSTVO_HL,                            I"MstVO")
        H_C_T(MSTVON_HL,                           I"MstVON")
        H_C_T(NAME_HL,                             I"name")
        H_C_T(NEWLINE_BIT_HL,                      I"NEWLINE_BIT")
        H_C_T(NEXTBEST_ETYPE_HL,                   I"nextbest_etype")
        H_C_T(NEXTWORDSTOPPED_HL,                  I"NextWordStopped")
        H_C_T(NOARTICLE_BIT_HL,                    I"NOARTICLE_BIT")
        H_C_T(NOTINCONTEXTPE_HL,                   I"NOTINCONTEXT_PE")
        H_C_T(NOUN_HL,                             I"noun")
        H_C_T(NUMBER_TY_ABS_HL,                    I"NUMBER_TY_Abs")
        H_C_T(NUMBER_TY_TO_REAL_NUMBER_TY_HL,      I"NUMBER_TY_to_REAL_NUMBER_TY")
        H_C_T(NUMBER_TY_TO_TIME_TY_HL,             I"NUMBER_TY_to_TIME_TY")
        H_C_T(OTOVRELROUTETO_HL,                   I"OtoVRelRouteTo")
        H_C_T(PACKED_TEXT_STORAGE_HL,              I"PACKED_TEXT_STORAGE")
        H_C_T(PARACONTENT_HL,                      I"ParaContent")
        H_C_T(PARAMETER_VALUE_HL,                  I"parameter_value")
        H_C_T(PARSED_NUMBER_HL,                    I"parsed_number")
        H_C_T(PARSER_ACTION_HL,                    I"parser_action")
        H_C_T(PARSER_ONE_HL,                       I"parser_one")
        H_C_T(PARSER_TRACE_HL,                     I"parser_trace")
        H_C_T(PARSER_TWO_HL,                       I"parser_two")
        H_C_T(PARSERERROR_HL,                      I"ParserError")
        H_C_T(PARSETOKENSTOPPED_HL,                I"ParseTokenStopped")
        H_C_T(PAST_CHRONOLOGICAL_RECORD_HL,        I"past_chronological_record")
        H_C_T(PLACEINSCOPE_HL,                     I"PlaceInScope")
        H_C_T(PLAYER_HL,                           I"player")
        H_C_T(PNTOVP_HL,                           I"PNToVP")
        H_C_T(PRESENT_CHRONOLOGICAL_RECORD_HL,     I"present_chronological_record")
        H_C_T(PRINTORRUN_HL,                       I"PrintOrRun")
        H_C_T(PRIOR_NAMED_LIST_HL,                 I"prior_named_list")
        H_C_T(PRIOR_NAMED_LIST_GENDER_HL,          I"prior_named_list_gender")
        H_C_T(PRIOR_NAMED_NOUN_HL,                 I"prior_named_noun")
        H_C_T(PROPERTY_LOOP_SIGN_HL,               I"property_loop_sign")
        H_C_T(PROPERTY_TO_BE_TOTALLED_HL,          I"property_to_be_totalled")
        H_C_T(REAL_LOCATION_HL,                    I"real_location")
        H_C_T(REAL_NUMBER_TY_ABS_HL,               I"REAL_NUMBER_TY_Abs")
        H_C_T(REAL_NUMBER_TY_APPROXIMATE_HL,       I"REAL_NUMBER_TY_Approximate")
        H_C_T(REAL_NUMBER_TY_COMPARE_HL,           I"REAL_NUMBER_TY_Compare")
        H_C_T(REAL_NUMBER_TY_CUBE_ROOT_HL,         I"REAL_NUMBER_TY_Cube_Root")
        H_C_T(REAL_NUMBER_TY_DIVIDE_HL,            I"REAL_NUMBER_TY_Divide")
        H_C_T(REAL_NUMBER_TY_MINUS_HL,             I"REAL_NUMBER_TY_Minus")
        H_C_T(REAL_NUMBER_TY_NAN_HL,               I"REAL_NUMBER_TY_Nan")
        H_C_T(REAL_NUMBER_TY_NEGATE_HL,            I"REAL_NUMBER_TY_Negate")
        H_C_T(REAL_NUMBER_TY_PLUS_HL,              I"REAL_NUMBER_TY_Plus")
        H_C_T(REAL_NUMBER_TY_POW_HL,               I"REAL_NUMBER_TY_Pow")
        H_C_T(REAL_NUMBER_TY_REMAINDER_HL,         I"REAL_NUMBER_TY_Remainder")
        H_C_T(REAL_NUMBER_TY_ROOT_HL,              I"REAL_NUMBER_TY_Root")
        H_C_T(REAL_NUMBER_TY_SAY_HL,               I"REAL_NUMBER_TY_Say")
        H_C_T(REAL_NUMBER_TY_TIMES_HL,             I"REAL_NUMBER_TY_Times")
        H_C_T(REAL_NUMBER_TY_TO_NUMBER_TY_HL,      I"REAL_NUMBER_TY_to_NUMBER_TY")
        H_C_T(REASON_THE_ACTION_FAILED_HL,         I"reason_the_action_failed")
        H_C_T(RELATION_EMPTYEQUIV_HL,              I"Relation_EmptyEquiv")
        H_C_T(RELATION_EMPTYOTOO_HL,               I"Relation_EmptyOtoO")
        H_C_T(RELATION_EMPTYVTOV_HL,               I"Relation_EmptyVtoV")
        H_C_T(RELATION_RSHOWOTOO_HL,               I"Relation_RShowOtoO")
        H_C_T(RELATION_SHOWEQUIV_HL,               I"Relation_ShowEquiv")
        H_C_T(RELATION_SHOWOTOO_HL,                I"Relation_ShowOtoO")
        H_C_T(RELATION_SHOWVTOV_HL,                I"Relation_ShowVtoV")
        H_C_T(RELATION_TY_EQUIVALENCEADJECTIVE_HL, I"RELATION_TY_EquivalenceAdjective")
        H_C_T(RELATION_TY_NAME_HL,                 I"RELATION_TY_Name")
        H_C_T(RELATION_TY_OTOOADJECTIVE_HL,        I"RELATION_TY_OToOAdjective")
        H_C_T(RELATION_TY_OTOVADJECTIVE_HL,        I"RELATION_TY_OToVAdjective")
        H_C_T(RELATION_TY_SYMMETRICADJECTIVE_HL,   I"RELATION_TY_SymmetricAdjective")
        H_C_T(RELATION_TY_VTOOADJECTIVE_HL,        I"RELATION_TY_VToOAdjective")
        H_C_T(RELATIONTEST_HL,                     I"RelationTest")
        H_C_T(RELFOLLOWVECTOR_HL,                  I"RelFollowVector")
        H_C_T(RELS_EMPTY_HL,                       I"RELS_EMPTY")
        H_C_T(RESPONSEVIAACTIVITY_HL,              I"ResponseViaActivity")
        H_C_T(RLANY_CAN_GET_X_HL,                  I"RLANY_CAN_GET_X")
        H_C_T(RLANY_CAN_GET_Y_HL,                  I"RLANY_CAN_GET_Y")
        H_C_T(RLANY_GET_X_HL,                      I"RLANY_GET_X")
        H_C_T(RLIST_ALL_X_HL,                      I"RLIST_ALL_X")
        H_C_T(RLIST_ALL_Y_HL,                      I"RLIST_ALL_Y")
        H_C_T(RLNGETF_HL,                          I"RlnGetF")
        H_C_T(ROUNDOFFVALUE_HL,                    I"RoundOffValue")
        H_C_T(ROUTINEFILTER_TT_HL,                 I"ROUTINE_FILTER_TT")
        H_C_T(RR_STORAGE_HL,                       I"RR_STORAGE")
        H_C_T(RTP_RELKINDVIOLATION_HL,             I"RTP_RELKINDVIOLATION")
        H_C_T(RTP_RELMINIMAL_HL,                   I"RTP_RELMINIMAL")
        H_C_T(RULEBOOKFAILS_HL,                    I"RulebookFails")
        H_C_T(RULEBOOKPARBREAK_HL,                 I"RulebookParBreak")
        H_C_T(RULEBOOKSUCCEEDS_HL,                 I"RulebookSucceeds")
        H_C_T(RUNTIMEPROBLEM_HL,                   I"RunTimeProblem")
        H_C_T(SAY__N_HL,                           I"say__n")
        H_C_T(SAY__P_HL,                           I"say__p")
        H_C_T(SAY__PC_HL,                          I"say__pc")
        H_C_T(SCENE_ENDED_HL,                      I"scene_ended")
        H_C_T(SCENE_ENDINGS_HL,                    I"scene_endings")
        H_C_T(SCENE_LATEST_ENDING_HL,              I"scene_latest_ending")
        H_C_T(SCENE_STARTED_HL,                    I"scene_started")
        H_C_T(SCENE_STATUS_HL,                     I"scene_status")
        H_C_T(SCOPE_STAGE_HL,                      I"scope_stage")
        H_C_T(SCOPE_TT_HL,                         I"SCOPE_TT")
        H_C_T(SECOND_HL,                           I"second")
        H_C_T(SHORT_NAME_HL,                       I"short_name")
        H_C_T(SIGNEDCOMPARE_HL,                    I"SignedCompare")
        H_C_T(SPECIAL_WORD_HL,                     I"special_word")
        H_C_T(SQUAREROOT_HL,                       I"SquareRoot")
        H_C_T(STACKFRAMECREATE_HL,                 I"StackFrameCreate")
        H_C_T(STORED_ACTION_TY_CURRENT_HL,         I"STORED_ACTION_TY_Current")
        H_C_T(STORED_ACTION_TY_TRY_HL,             I"STORED_ACTION_TY_Try")
        H_C_T(STORY_TENSE_HL,                      I"story_tense")
        H_C_T(SUPPORTER_HL,                        I"supporter")
        H_C_T(SUPPRESS_SCOPE_LOOPS_HL,             I"suppress_scope_loops")
        H_C_T(SUPPRESS_TEXT_SUBSTITUTION_HL,       I"suppress_text_substitution")
        H_C_T(TABLE_NOVALUE_HL,                    I"TABLE_NOVALUE")
        H_C_T(TABLELOOKUPCORR_HL,                  I"TableLookUpCorr")
        H_C_T(TABLELOOKUPENTRY_HL,                 I"TableLookUpEntry")
        H_C_T(TESTACTIONBITMAP_HL,                 I"TestActionBitmap")
        H_C_T(TESTACTIVITY_HL,                     I"TestActivity")
        H_C_T(TESTREGIONALCONTAINMENT_HL,          I"TestRegionalContainment")
        H_C_T(TESTSCOPE_HL,                        I"TestScope")
        H_C_T(TESTSTART_HL,                        I"TestStart")
        H_C_T(TEXT_TY_COMPARE_HL,                  I"TEXT_TY_Compare")
        H_C_T(TEXT_TY_EXPANDIFPERISHABLE_HL,       I"TEXT_TY_ExpandIfPerishable")
        H_C_T(TEXT_TY_SAY_HL,                      I"TEXT_TY_Say")
        H_C_T(THE_TIME_HL,                         I"the_time")
        H_C_T(THEEMPTYTABLE_HL,                    I"TheEmptyTable")
        H_C_T(THEN1__WD_HL,                        I"THEN1__WD")
        H_C_T(TIMESACTIONHASBEENHAPPENING_HL,      I"TimesActionHasBeenHappening")
        H_C_T(TIMESACTIONHASHAPPENED_HL,           I"TimesActionHasHappened")
        H_C_T(TRYACTION_HL,                        I"TryAction")
        H_C_T(TRYGIVENOBJECT_HL,                   I"TryGivenObject")
        H_C_T(TURNSACTIONHASBEENHAPPENING_HL,      I"TurnsActionHasBeenHappening")
        H_C_T(UNDERSTAND_AS_MISTAKE_NUMBER_HL,     I"understand_as_mistake_number")
        H_C_T(UNICODE_TEMP_HL,                     I"unicode_temp")
        H_C_T(VTOORELROUTETO_HL,                   I"VtoORelRouteTo")
        H_C_T(VTOVRELROUTETO_HL,                   I"VtoVRelRouteTo")
        H_C_T(WHEN_SCENE_BEGINS_HL,                I"WHEN_SCENE_BEGINS_RB")
        H_C_T(WHEN_SCENE_ENDS_HL,                  I"WHEN_SCENE_ENDS_RB")
        H_C_T(WN_HL,                               I"wn")
        H_C_T(WORDADDRESS_HL,                      I"WordAddress")
        H_C_T(WORDINPROPERTY_HL,                   I"WordInProperty")
        H_C_T(WORDLENGTH_HL,                       I"WordLength")
    H_END

§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 = HierarchyLocations::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 Kinds::Behaviour::package(K_object);
        case K_NUMBER_XPACKAGE:           return Kinds::Behaviour::package(K_number);
        case K_TIME_XPACKAGE:             return Kinds::Behaviour::package(K_time);
        case K_TRUTH_STATE_XPACKAGE:      return Kinds::Behaviour::package(K_truth_state);
        case K_TABLE_XPACKAGE:            return Kinds::Behaviour::package(K_table);
        case K_VERB_XPACKAGE:             return Kinds::Behaviour::package(K_verb);
        case K_FIGURE_NAME_XPACKAGE:      return Kinds::Behaviour::package(K_figure_name);
        case K_SOUND_NAME_XPACKAGE:       return Kinds::Behaviour::package(K_sound_name);
        case K_USE_OPTION_XPACKAGE:       return Kinds::Behaviour::package(K_use_option);
        case K_EXTERNAL_FILE_XPACKAGE:    return Kinds::Behaviour::package(K_external_file);
        case K_RULEBOOK_OUTCOME_XPACKAGE: return Kinds::Behaviour::package(K_rulebook_outcome);
        case K_RESPONSE_XPACKAGE:         return Kinds::Behaviour::package(K_response);
        case K_SCENE_XPACKAGE:            return Kinds::Behaviour::package(K_scene);
        case V_COMMAND_PROMPT_XPACKAGE:
            return InterNames::location(
                RTVariables::iname(RTTemporaryVariables::command_prompt_variable()));
    }
    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.

inter_name *Hierarchy::find(int id) {
    return HierarchyLocations::find(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::find_in_package(Emit::tree(), id, P, EMPTY_WORDING,
        NULL, -1, NULL);
}

§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_HL, declared abover as H_C_G(ACTIVITY_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::find_in_package(Emit::tree(), id, P, W, NULL, -1, NULL);
}

§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::find_in_package(Emit::tree(), id, P, W,
        NULL, x, NULL);
    Hierarchy::make_available(iname);
    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::find_in_package(Emit::tree(), id, P, EMPTY_WORDING,
        from, -1, NULL);
}

§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::find_in_package(Emit::tree(), id, P, EMPTY_WORDING,
        NULL, -1, name);
}

§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 Connectors (in bytecode) for more.

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

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

    H_BEGIN(HierarchyLocations::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) {
    return HierarchyLocations::attach_new_package(Emit::tree(), C, NULL, hap_id);
}

§19. If we just want the compilation unit in which the current 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 HierarchyLocations::attach_new_package(Emit::tree(),
        CompilationUnits::find(at), NULL, 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);
}

§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::package_in_package(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_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)
}