Setting up the use of this module.


§1. Introduction.

    define CORE_MODULE TRUE

§2. Setting up the memory manager. We need to itemise the structures we'll want to allocate:

    enum bibliographic_datum_MT
    enum heading_MT
    enum phrase_MT
    enum inference_array_MT
    enum property_MT
    enum property_permission_MT
    enum extension_file_MT
    enum rulebook_MT
    enum booking_MT
    enum phrase_option_array_MT
    enum instance_MT
    enum table_MT
    enum table_column_MT
    enum literal_text_MT
    enum text_substitution_MT
    enum invocation_array_MT
    enum implication_MT
    enum activity_MT
    enum activity_list_array_MT
    enum use_option_MT
    enum i6_memory_setting_MT
    enum definition_MT
    enum binary_predicate_MT
    enum pcalc_prop_array_MT
    enum pcalc_func_array_MT
    enum pcalc_prop_deferral_MT
    enum literal_pattern_MT
    enum generalisation_MT
    enum extension_census_datum_MT
    enum extension_dictionary_entry_MT
    enum known_extension_clash_MT
    enum i6_schema_array_MT
    enum list_together_routine_MT
    enum past_tense_condition_record_MT
    enum past_tense_action_record_MT
    enum named_rulebook_outcome_MT
    enum label_namespace_MT
    enum stacked_variable_array_MT
    enum stacked_variable_list_array_MT
    enum stacked_variable_owner_array_MT
    enum stacked_variable_owner_list_array_MT
    enum pointer_allocation_MT
    enum ph_stack_frame_box_MT
    enum i6_inclusion_matter_MT
    enum literal_list_MT
    enum extension_identifier_database_entry_array_MT
    enum control_structure_phrase_MT
    enum adjective_meaning_MT
    enum adjective_meaning_block_MT
    enum measurement_definition_MT
    enum literal_pattern_name_MT
    enum equation_MT
    enum equation_symbol_MT
    enum equation_node_MT
    enum placement_affecting_array_MT
    enum activity_crossref_array_MT
    enum VM_usage_note_MT
    enum invocation_options_array_MT
    enum inv_token_problem_token_MT
    enum application_array_MT
    enum plugin_call_array_MT
    enum plugin_MT
    enum nonlocal_variable_MT
    enum inference_subject_MT
    enum property_of_value_storage_MT
    enum to_phrase_request_MT
    enum constant_phrase_MT
    enum use_as_event_MT
    enum instance_usage_array_MT
    enum rule_MT
    enum rulebook_outcome_MT
    enum applicability_condition_MT
    enum natural_language_MT
    enum llist_entry_MT
    enum response_message_MT
    enum table_contribution_array_MT
    enum contents_entry_MT
    enum local_variable_array_MT
    enum relation_guard_MT
    enum pcalc_term_array_MT
    enum special_meaning_holder_MT
    enum runtime_kind_structure_MT
    enum internal_test_case_MT
    enum test_scenario_MT
    enum counting_data_MT
    enum kind_interaction_MT
    enum dval_written_MT
    enum nascent_array_MT
    enum value_holster_array_MT
    enum inter_namespace_MT
    enum inter_name_MT
    enum inter_name_family_MT
    enum inter_name_consumption_token_MT
    enum adjective_iname_holder_MT
    enum compilation_module_MT
    enum inter_schema_MT
    enum inter_schema_node_MT
    enum inter_schema_token_MT
    enum package_request_MT

§3. Deep breath, then: the following macros define several hundred functions.

    ALLOCATE_INDIVIDUALLY(activity)
    ALLOCATE_INDIVIDUALLY(adjective_meaning)
    ALLOCATE_INDIVIDUALLY(adjective_meaning_block)
    ALLOCATE_INDIVIDUALLY(applicability_condition)
    ALLOCATE_INDIVIDUALLY(binary_predicate)
    ALLOCATE_INDIVIDUALLY(booking)
    ALLOCATE_INDIVIDUALLY(compilation_module)
    ALLOCATE_INDIVIDUALLY(constant_phrase)
    ALLOCATE_INDIVIDUALLY(contents_entry)
    ALLOCATE_INDIVIDUALLY(control_structure_phrase)
    ALLOCATE_INDIVIDUALLY(counting_data)
    ALLOCATE_INDIVIDUALLY(definition)
    ALLOCATE_INDIVIDUALLY(dval_written)
    ALLOCATE_INDIVIDUALLY(equation_node)
    ALLOCATE_INDIVIDUALLY(equation_symbol)
    ALLOCATE_INDIVIDUALLY(equation)
    ALLOCATE_INDIVIDUALLY(extension_census_datum)
    ALLOCATE_INDIVIDUALLY(extension_dictionary_entry)
    ALLOCATE_INDIVIDUALLY(extension_file)
    ALLOCATE_INDIVIDUALLY(generalisation)
    ALLOCATE_INDIVIDUALLY(heading)
    ALLOCATE_INDIVIDUALLY(i6_inclusion_matter)
    ALLOCATE_INDIVIDUALLY(i6_memory_setting)
    ALLOCATE_INDIVIDUALLY(implication)
    ALLOCATE_INDIVIDUALLY(inference_subject)
    ALLOCATE_INDIVIDUALLY(instance)
    ALLOCATE_INDIVIDUALLY(inter_namespace)
    ALLOCATE_INDIVIDUALLY(inter_name)
    ALLOCATE_INDIVIDUALLY(inter_name_family)
    ALLOCATE_INDIVIDUALLY(inter_name_consumption_token)
    ALLOCATE_INDIVIDUALLY(internal_test_case)
    ALLOCATE_INDIVIDUALLY(inv_token_problem_token)
    ALLOCATE_INDIVIDUALLY(kind_interaction)
    ALLOCATE_INDIVIDUALLY(known_extension_clash)
    ALLOCATE_INDIVIDUALLY(label_namespace)
    ALLOCATE_INDIVIDUALLY(list_together_routine)
    ALLOCATE_INDIVIDUALLY(literal_list)
    ALLOCATE_INDIVIDUALLY(literal_pattern_name)
    ALLOCATE_INDIVIDUALLY(literal_pattern)
    ALLOCATE_INDIVIDUALLY(literal_text)
    ALLOCATE_INDIVIDUALLY(llist_entry)
    ALLOCATE_INDIVIDUALLY(measurement_definition)
    ALLOCATE_INDIVIDUALLY(named_rulebook_outcome)
    ALLOCATE_INDIVIDUALLY(nascent_array)
    ALLOCATE_INDIVIDUALLY(natural_language)
    ALLOCATE_INDIVIDUALLY(nonlocal_variable)
    ALLOCATE_INDIVIDUALLY(past_tense_action_record)
    ALLOCATE_INDIVIDUALLY(past_tense_condition_record)
    ALLOCATE_INDIVIDUALLY(pcalc_prop_deferral)
    ALLOCATE_INDIVIDUALLY(ph_stack_frame_box)
    ALLOCATE_INDIVIDUALLY(phrase)
    ALLOCATE_INDIVIDUALLY(plugin)
    ALLOCATE_INDIVIDUALLY(pointer_allocation)
    ALLOCATE_INDIVIDUALLY(property_of_value_storage)
    ALLOCATE_INDIVIDUALLY(property_permission)
    ALLOCATE_INDIVIDUALLY(property)
    ALLOCATE_INDIVIDUALLY(relation_guard)
    ALLOCATE_INDIVIDUALLY(response_message)
    ALLOCATE_INDIVIDUALLY(rule)
    ALLOCATE_INDIVIDUALLY(rulebook_outcome)
    ALLOCATE_INDIVIDUALLY(rulebook)
    ALLOCATE_INDIVIDUALLY(special_meaning_holder)
    ALLOCATE_INDIVIDUALLY(table_column)
    ALLOCATE_INDIVIDUALLY(table)
    ALLOCATE_INDIVIDUALLY(test_scenario)
    ALLOCATE_INDIVIDUALLY(text_substitution)
    ALLOCATE_INDIVIDUALLY(to_phrase_request)
    ALLOCATE_INDIVIDUALLY(use_as_event)
    ALLOCATE_INDIVIDUALLY(use_option)
    ALLOCATE_INDIVIDUALLY(VM_usage_note)
    ALLOCATE_INDIVIDUALLY(runtime_kind_structure)
    ALLOCATE_INDIVIDUALLY(adjective_iname_holder)
    ALLOCATE_INDIVIDUALLY(inter_schema)
    ALLOCATE_INDIVIDUALLY(inter_schema_node)
    ALLOCATE_INDIVIDUALLY(inter_schema_token)
    ALLOCATE_INDIVIDUALLY(package_request)

§4. So much for the managed structures: now for the unmanaged structures.

    ALLOCATE_IN_ARRAYS(activity_crossref, 100)
    ALLOCATE_IN_ARRAYS(activity_list, 1000)
    ALLOCATE_IN_ARRAYS(application, 100)
    ALLOCATE_IN_ARRAYS(extension_identifier_database_entry, 100)
    ALLOCATE_IN_ARRAYS(i6_schema, 100)
    ALLOCATE_IN_ARRAYS(inference, 100)
    ALLOCATE_IN_ARRAYS(instance_usage, 200)
    ALLOCATE_IN_ARRAYS(invocation_options, 100)
    ALLOCATE_IN_ARRAYS(local_variable, 100)
    ALLOCATE_IN_ARRAYS(pcalc_func, 1000)
    ALLOCATE_IN_ARRAYS(pcalc_prop, 1000)
    ALLOCATE_IN_ARRAYS(pcalc_term, 1000)
    ALLOCATE_IN_ARRAYS(phrase_option, 100)
    ALLOCATE_IN_ARRAYS(placement_affecting, 100)
    ALLOCATE_IN_ARRAYS(plugin_call, 100)
    ALLOCATE_IN_ARRAYS(stacked_variable_list, 100)
    ALLOCATE_IN_ARRAYS(stacked_variable_owner_list, 100)
    ALLOCATE_IN_ARRAYS(stacked_variable_owner, 100)
    ALLOCATE_IN_ARRAYS(stacked_variable, 100)
    ALLOCATE_IN_ARRAYS(table_contribution, 100)
    ALLOCATE_IN_ARRAYS(value_holster, 100)

§5. The beginning. (The client doesn't need to call the start and end routines, because the foundation module does that automatically.)

    define WORDING_LOGS_ALLOWED
    define REGISTER_WRITER(c, f) Writers::register_logger(c, &f##_writer);
    define COMPILE_WRITER(t, f)
        void f##_writer(text_stream *format, void *obj) { text_stream *SDL = DL; DL = format; if (DL) f((t) obj); DL = SDL; }
    define REGISTER_WRITER_I(c, f) Writers::register_logger_I(c, &f##_writer);
    define COMPILE_WRITER_I(t, f)
        void f##_writer(text_stream *format, int I) { text_stream *SDL = DL; DL = format; if (DL) f((t) I); DL = SDL; }
    define REGISTER_WRITER_W(c, f) Writers::register_logger_W(c, &f##_writer);
    define COMPILE_WRITER_W(f)
        void f##_writer(text_stream *format, wording W) { text_stream *SDL = DL; DL = format; if (DL) f(W); DL = SDL; }
    COMPILE_WRITER(pcalc_term *, Calculus::Terms::log)
    COMPILE_WRITER(binary_predicate *, BinaryPredicates::log)
    COMPILE_WRITER(table *, Tables::log)
    COMPILE_WRITER(booking *, Rules::Bookings::log)
    COMPILE_WRITER(table_column *, Tables::Columns::log)
    COMPILE_WRITER(pcalc_prop *, Calculus::Propositions::log)
    COMPILE_WRITER(extension_dictionary_entry *, Extensions::Dictionary::log_entry)
    COMPILE_WRITER(parse_node *, Invocations::log_list)
    COMPILE_WRITER(parse_node *, Invocations::log)
    COMPILE_WRITER(heading *, Sentences::Headings::log)
    COMPILE_WRITER(ph_type_data *, Phrases::TypeData::Textual::log)
    COMPILE_WRITER(inference *, World::Inferences::log)
    COMPILE_WRITER(i6_schema *, Calculus::Schemas::log)
    COMPILE_WRITER(inter_schema *, InterSchemas::log)
    COMPILE_WRITER(natural_language *, NaturalLanguages::log)
    COMPILE_WRITER(inference_subject *, InferenceSubjects::log)
    COMPILE_WRITER(rulebook *, Rulebooks::log)
    COMPILE_WRITER(local_variable *, LocalVariables::log)
    COMPILE_WRITER_I(int, World::Inferences::log_kind)
    COMPILE_WRITER(instance *, Instances::log)
    COMPILE_WRITER(pcalc_prop *, Calculus::Atoms::log)
    COMPILE_WRITER(unit_sequence *, Kinds::Dimensions::log_unit_sequence)
    COMPILE_WRITER(equation *, Equations::log)
    COMPILE_WRITER(phrase *, Phrases::log)
    COMPILE_WRITER(adjective_usage *, AdjectiveUsages::log)
    COMPILE_WRITER(ph_usage_data *, Phrases::Usage::log)
    COMPILE_WRITER(kind *, Kinds::Textual::log)
    COMPILE_WRITER_I(int, Sentences::VPs::log)
    COMPILE_WRITER(extension_file *, Extensions::Files::log)
    COMPILE_WRITER(package_request *, Packaging::log)
    COMPILE_WRITER(property *, Properties::log)
    COMPILE_WRITER(nonlocal_variable *, NonlocalVariables::log)
    COMPILE_WRITER(noun *, Nouns::log)

§6.

    void CoreModule::start(void) {
        <Register this module's memory allocation reasons 6.2>;
        <Register this module's stream writers 6.3>;
        <Register this module's debugging log aspects 6.5>;
        <Register this module's debugging log writers 6.6>;
        <Register this module's command line switches 6.7>;
    }

The function CoreModule::start appears nowhere else.

§6.1. Not all of our memory will be claimed in the form of structures: now and then we need to use the equivalent of traditional malloc and calloc routines.

    enum EXTENSION_DICTIONARY_MREASON
    enum INDEX_SORTING_MREASON
    enum INSTANCE_COUNTING_MREASON
    enum MAP_INDEX_MREASON
    enum PARTITION_MREASON
    enum TYPE_TABLES_MREASON
    enum INV_LIST_MREASON
    enum COMPILATION_SIZE_MREASON
    enum OBJECT_COMPILATION_MREASON
    enum DOC_FRAGMENT_MREASON
    enum RELATION_CONSTRUCTION_MREASON
    enum EMIT_ARRAY_MREASON

§6.2. <Register this module's memory allocation reasons 6.2> =

        Memory::reason_name(EXTENSION_DICTIONARY_MREASON, "extension dictionary");
        Memory::reason_name(INDEX_SORTING_MREASON, "index sorting");
        Memory::reason_name(INSTANCE_COUNTING_MREASON, "instance-of-kind counting");
        Memory::reason_name(MAP_INDEX_MREASON, "map in the World index");
        Memory::reason_name(PARTITION_MREASON, "initial state for relations in groups");
        Memory::reason_name(TYPE_TABLES_MREASON, "tables of details of the kinds of values");
        Memory::reason_name(INV_LIST_MREASON, "lists for type-checking invocations");
        Memory::reason_name(COMPILATION_SIZE_MREASON, "size estimates for compiled objects");
        Memory::reason_name(OBJECT_COMPILATION_MREASON, "compilation workspace for objects");
        Memory::reason_name(DOC_FRAGMENT_MREASON, "documentation fragments");
        Memory::reason_name(RELATION_CONSTRUCTION_MREASON, "relation bitmap storage");
        Memory::reason_name(EMIT_ARRAY_MREASON, "emitter array storage");

This code is used in §6.

§6.3. <Register this module's stream writers 6.3> =

        Writers::register_writer_I('B', &CoreModule::writer);
        Writers::register_writer('I', &Instances::writer);
        Writers::register_writer('L', &LocalVariables::writer);
        Writers::register_writer('n', &InterNames::writer);
        Writers::register_writer('X', &Extensions::IDs::writer);

This code is used in §6.

§6.4.

    enum ACTION_CREATIONS_DA
    enum ACTION_PATTERN_COMPILATION_DA
    enum ACTION_PATTERN_PARSING_DA
    enum ASSEMBLIES_DA
    enum ASSERTIONS_DA
    enum CASE_INSENSITIVE_FILEHANDLING_DA
    enum CONDITIONS_DA
    enum DEBUGGING_LOG_CONTENTS_DA
    enum DESCRIPTION_COMPILATION_DA
    enum EXPRESSIONS_DA
    enum EXTENSIONS_CENSUS_DA
    enum FIGURE_CREATIONS_DA
    enum GRAMMAR_DA
    enum GRAMMAR_CONSTRUCTION_DA
    enum HEADINGS_DA
    enum IMPLICATIONS_DA
    enum INFERENCES_DA
    enum LOCAL_VARIABLES_DA
    enum MEANING_LIST_ALLOCATION_DA
    enum MEMORY_ALLOCATION_DA
    enum NOUN_RESOLUTION_DA
    enum OBJECT_COMPILATION_DA
    enum OBJECT_CREATIONS_DA
    enum OBJECT_TREE_DA
    enum PACKAGING_DA
    enum PHRASE_COMPARISONS_DA
    enum PHRASE_COMPILATION_DA
    enum PHRASE_CREATIONS_DA
    enum PHRASE_REGISTRATION_DA
    enum PHRASE_USAGE_DA
    enum PREDICATE_CALCULUS_DA
    enum PREDICATE_CALCULUS_WORKINGS_DA
    enum PRONOUNS_DA
    enum PROPERTY_CREATIONS_DA
    enum PROPERTY_PROVISION_DA
    enum PROPERTY_TRANSLATIONS_DA
    enum RELATION_DEFINITIONS_DA
    enum RULE_ATTACHMENTS_DA
    enum RULEBOOK_COMPILATION_DA
    enum SCHEMA_COMPILATION_DA
    enum SCHEMA_COMPILATION_DETAILS_DA
    enum SPATIAL_MAP_DA
    enum SPATIAL_MAP_WORKINGS_DA
    enum SPECIFICATION_PERMISSIONS_DA
    enum SPECIFICATION_USAGE_DA
    enum SPECIFICITIES_DA
    enum TABLES_DA
    enum TEXT_SUBSTITUTIONS_DA
    enum VARIABLE_CREATIONS_DA

§6.5. <Register this module's debugging log aspects 6.5> =

        Log::declare_aspect(ACTION_CREATIONS_DA, L"action creations", FALSE, FALSE);
        Log::declare_aspect(ACTION_PATTERN_COMPILATION_DA, L"action pattern compilation", FALSE, FALSE);
        Log::declare_aspect(ACTION_PATTERN_PARSING_DA, L"action pattern parsing", FALSE, FALSE);
        Log::declare_aspect(ASSEMBLIES_DA, L"assemblies", FALSE, FALSE);
        Log::declare_aspect(ASSERTIONS_DA, L"assertions", FALSE, TRUE);
        Log::declare_aspect(CASE_INSENSITIVE_FILEHANDLING_DA, L"case insensitive filehandling", FALSE, FALSE);
        Log::declare_aspect(CONDITIONS_DA, L"conditions", FALSE, FALSE);
        Log::declare_aspect(DEBUGGING_LOG_CONTENTS_DA, L"debugging log contents", TRUE, FALSE);
        Log::declare_aspect(DESCRIPTION_COMPILATION_DA, L"description compilation", FALSE, FALSE);
        Log::declare_aspect(EXPRESSIONS_DA, L"expressions", FALSE, FALSE);
        Log::declare_aspect(EXTENSIONS_CENSUS_DA, L"extensions census", FALSE, FALSE);
        Log::declare_aspect(FIGURE_CREATIONS_DA, L"figure creations", FALSE, FALSE);
        Log::declare_aspect(GRAMMAR_DA, L"grammar", FALSE, FALSE);
        Log::declare_aspect(GRAMMAR_CONSTRUCTION_DA, L"grammar construction", FALSE, FALSE);
        Log::declare_aspect(HEADINGS_DA, L"headings", FALSE, FALSE);
        Log::declare_aspect(IMPLICATIONS_DA, L"implications", FALSE, TRUE);
        Log::declare_aspect(INFERENCES_DA, L"inferences", FALSE, TRUE);
        Log::declare_aspect(LOCAL_VARIABLES_DA, L"local variables", FALSE, FALSE);
        Log::declare_aspect(MEANING_LIST_ALLOCATION_DA, L"meaning list allocation", FALSE, FALSE);
        Log::declare_aspect(MEMORY_ALLOCATION_DA, L"memory allocation", FALSE, FALSE);
        Log::declare_aspect(NOUN_RESOLUTION_DA, L"noun resolution", FALSE, FALSE);
        Log::declare_aspect(OBJECT_COMPILATION_DA, L"object compilation", FALSE, FALSE);
        Log::declare_aspect(OBJECT_CREATIONS_DA, L"object creations", FALSE, FALSE);
        Log::declare_aspect(OBJECT_TREE_DA, L"object tree", FALSE, FALSE);
        Log::declare_aspect(PACKAGING_DA, L"packaging", FALSE, FALSE);
        Log::declare_aspect(PHRASE_COMPARISONS_DA, L"phrase comparisons", FALSE, FALSE);
        Log::declare_aspect(PHRASE_COMPILATION_DA, L"phrase compilation", FALSE, FALSE);
        Log::declare_aspect(PHRASE_CREATIONS_DA, L"phrase creations", FALSE, FALSE);
        Log::declare_aspect(PHRASE_REGISTRATION_DA, L"phrase registration", FALSE, FALSE);
        Log::declare_aspect(PHRASE_USAGE_DA, L"phrase usage", FALSE, FALSE);
        Log::declare_aspect(PREDICATE_CALCULUS_DA, L"predicate calculus", FALSE, FALSE);
        Log::declare_aspect(PREDICATE_CALCULUS_WORKINGS_DA, L"predicate calculus workings", FALSE, FALSE);
        Log::declare_aspect(PRONOUNS_DA, L"pronouns", FALSE, FALSE);
        Log::declare_aspect(PROPERTY_CREATIONS_DA, L"property creations", FALSE, FALSE);
        Log::declare_aspect(PROPERTY_PROVISION_DA, L"property provision", FALSE, FALSE);
        Log::declare_aspect(PROPERTY_TRANSLATIONS_DA, L"property translations", FALSE, FALSE);
        Log::declare_aspect(RELATION_DEFINITIONS_DA, L"relation definitions", FALSE, FALSE);
        Log::declare_aspect(RULE_ATTACHMENTS_DA, L"rule attachments", FALSE, FALSE);
        Log::declare_aspect(RULEBOOK_COMPILATION_DA, L"rulebook compilation", FALSE, FALSE);
        Log::declare_aspect(SCHEMA_COMPILATION_DA, L"schema compilation", FALSE, FALSE);
        Log::declare_aspect(SCHEMA_COMPILATION_DETAILS_DA, L"schema compilation details", FALSE, FALSE);
        Log::declare_aspect(SPATIAL_MAP_DA, L"spatial map", FALSE, FALSE);
        Log::declare_aspect(SPATIAL_MAP_WORKINGS_DA, L"spatial map workings", FALSE, FALSE);
        Log::declare_aspect(SPECIFICATION_PERMISSIONS_DA, L"specification permissions", FALSE, FALSE);
        Log::declare_aspect(SPECIFICATION_USAGE_DA, L"specification usage", FALSE, FALSE);
        Log::declare_aspect(SPECIFICITIES_DA, L"specificities", FALSE, FALSE);
        Log::declare_aspect(TABLES_DA, L"table construction", FALSE, FALSE);
        Log::declare_aspect(TEXT_SUBSTITUTIONS_DA, L"text substitutions", FALSE, FALSE);
        Log::declare_aspect(VARIABLE_CREATIONS_DA, L"variable creations", FALSE, FALSE);

This code is used in §6.

§6.6. <Register this module's debugging log writers 6.6> =

        REGISTER_WRITER('0', Calculus::Terms::log);
        REGISTER_WRITER('1', InterSchemas::log);
        REGISTER_WRITER('2', BinaryPredicates::log);
        REGISTER_WRITER('B', Tables::log);
        REGISTER_WRITER('b', Rules::Bookings::log);
        REGISTER_WRITER('C', Tables::Columns::log);
        REGISTER_WRITER('D', Calculus::Propositions::log);
        REGISTER_WRITER('d', Extensions::Dictionary::log_entry);
        REGISTER_WRITER('E', Invocations::log_list);
        REGISTER_WRITER('e', Invocations::log);
        REGISTER_WRITER('H', Sentences::Headings::log);
        REGISTER_WRITER('h', Phrases::TypeData::Textual::log);
        REGISTER_WRITER('I', World::Inferences::log);
        REGISTER_WRITER('i', Calculus::Schemas::log);
        REGISTER_WRITER('J', NaturalLanguages::log);
        REGISTER_WRITER('j', InferenceSubjects::log);
        REGISTER_WRITER('K', Rulebooks::log);
        REGISTER_WRITER('k', LocalVariables::log);
        REGISTER_WRITER_I('n', World::Inferences::log_kind)
        REGISTER_WRITER('O', Instances::log);
        REGISTER_WRITER('o', Calculus::Atoms::log);
        REGISTER_WRITER('Q', Kinds::Dimensions::log_unit_sequence);
        REGISTER_WRITER('q', Equations::log);
        REGISTER_WRITER('R', Phrases::log);
        REGISTER_WRITER('r', AdjectiveUsages::log);
        REGISTER_WRITER('U', Phrases::Usage::log);
        REGISTER_WRITER('u', Kinds::Textual::log);
        REGISTER_WRITER_I('V', Sentences::VPs::log)
        REGISTER_WRITER('X', Packaging::log);
        REGISTER_WRITER('x', Extensions::Files::log);
        REGISTER_WRITER('Y', Properties::log);
        REGISTER_WRITER('Z', NonlocalVariables::log);
        REGISTER_WRITER('z', Nouns::log);

This code is used in §6.

§6.7. <Register this module's command line switches 6.7> =

        ;

This code is used in §6.

§7.

    void CoreModule::writer(OUTPUT_STREAM, char *format_string, int wn) {
        if (Time::fixed()) {
            if (wn) WRITE("9Z99");
            else WRITE("Inform 7.99.99");
        } else {
            if (wn) WRITE("[[Build Number]]");
            else WRITE("Inform [[Version Number]]");
        }
    }

The function CoreModule::writer is used in §6.3.

§8. The end.

    void CoreModule::end(void) {
    }

The function CoreModule::end appears nowhere else.