§1. External files are written in Inter as their array names:
typedef struct external_file_compilation_data { struct inter_name *exf_iname; struct inter_name *IFID_array_iname; } external_file_compilation_data; external_file_compilation_data RTExternalFiles::new_data(wording W) { external_file_compilation_data efcd; package_request *P = Hierarchy::local_package(EXTERNAL_FILES_HAP); efcd.exf_iname = Hierarchy::make_iname_with_memo(FILE_HL, P, W); efcd.IFID_array_iname = Hierarchy::make_iname_with_memo(IFID_HL, P, W); return efcd; } void RTExternalFiles::arrays(void) { inter_name *iname = Hierarchy::find(NO_EXTERNAL_FILES_HL); Emit::named_numeric_constant(iname, (inter_ti) (NUMBER_CREATED(files_data))); Hierarchy::make_available(Emit::tree(), iname); files_data *exf; LOOP_OVER(exf, files_data) { if (exf->file_ownership == OWNED_BY_SPECIFIC_PROJECT) { packaging_state save = Emit::named_string_array_begin(exf->compilation_data.IFID_array_iname, K_value); TEMPORARY_TEXT(II) WRITE_TO(II, "//%S", exf->IFID_of_owner); Emit::array_text_entry(II); DISCARD_TEXT(II) Emit::array_end(save); } } LOOP_OVER(exf, files_data) { packaging_state save = Emit::named_array_begin(exf->compilation_data.exf_iname, K_value); Emit::array_iname_entry(Hierarchy::find(AUXF_MAGIC_VALUE_HL)); Emit::array_iname_entry(Hierarchy::find(AUXF_STATUS_IS_CLOSED_HL)); if (exf->file_is_binary) Emit::array_numeric_entry(1); else Emit::array_numeric_entry(0); Emit::array_numeric_entry(0); TEMPORARY_TEXT(WW) WRITE_TO(WW, "%w", Lexer::word_raw_text(exf->unextended_filename)); Str::delete_first_character(WW); Str::delete_last_character(WW); Emit::array_text_entry(WW); DISCARD_TEXT(WW) switch (exf->file_ownership) { case OWNED_BY_THIS_PROJECT: Emit::array_iname_entry(RTBibliographicData::IFID_iname()); break; case OWNED_BY_ANOTHER_PROJECT: Emit::array_null_entry(); break; case OWNED_BY_SPECIFIC_PROJECT: Emit::array_iname_entry(exf->compilation_data.IFID_array_iname); break; } Emit::array_end(save); } iname = Hierarchy::find(TABLEOFEXTERNALFILES_HL); packaging_state save = Emit::named_array_begin(iname, K_value); Emit::array_numeric_entry(0); LOOP_OVER(exf, files_data) Emit::array_iname_entry(exf->compilation_data.exf_iname); Emit::array_numeric_entry(0); Emit::array_end(save); Hierarchy::make_available(Emit::tree(), iname); }
- The structure external_file_compilation_data is private to this section.