Filenames for a few unmanaged files included in a standard Inform installation.

§1. Inform needs a whole pile of files to have been installed on the host computer before it can run: everything from the Standard Rules to a PDF file explaining what interactive fiction is. They're never written to, only read. They are stored in subdirectories called Miscellany or HTML of the internal nest; but they're just plain old files, and are not managed by Inbuild as "copies".

enum CBLORB_REPORT_MODEL_IRES from 1
enum DOCUMENTATION_SNIPPETS_IRES
enum INTRO_BOOKLET_IRES
enum INTRO_POSTCARD_IRES
enum LARGE_DEFAULT_COVER_ART_IRES
enum SMALL_DEFAULT_COVER_ART_IRES
enum DOCUMENTATION_XREFS_IRES
enum JAVASCRIPT_FOR_STANDARD_PAGES_IRES
enum JAVASCRIPT_FOR_EXTENSIONS_IRES
enum JAVASCRIPT_FOR_ONE_EXTENSION_IRES
enum CSS_SET_BY_PLATFORM_IRES
enum CSS_FOR_STANDARD_PAGES_IRES
enum RESOURCE_JSON_REQS_IRES
enum REGISTRY_JSON_REQS_IRES
enum INBUILD_JSON_REQS_IRES
enum UNICODE_DATA_IRES
enum MIT_LICENSE_IRES
enum MIT_0_LICENSE_IRES
filename *InstalledFiles::filename(int ires) {
    pathname *internal = INSTALLED_FILES_HTML_CALLBACK();
    pathname *misc = Pathnames::down(internal, I"Miscellany");
    pathname *models = Pathnames::down(internal, I"HTML");
    switch (ires) {
        case DOCUMENTATION_SNIPPETS_IRES:
                return Filenames::in(misc, I"definitions.html");
        case INTRO_BOOKLET_IRES:
                return Filenames::in(misc, I"IntroductionToIF.pdf");
        case INTRO_POSTCARD_IRES:
                return Filenames::in(misc, I"Postcard.pdf");
        case LARGE_DEFAULT_COVER_ART_IRES:
                return Filenames::in(misc, I"DefaultCover.jpg");
        case SMALL_DEFAULT_COVER_ART_IRES:
                return Filenames::in(misc, I"Small Cover.jpg");
        case RESOURCE_JSON_REQS_IRES:
                return Filenames::in(misc, I"resource.jsonr");
        case REGISTRY_JSON_REQS_IRES:
                return Filenames::in(misc, I"registry.jsonr");
        case INBUILD_JSON_REQS_IRES:
                return Filenames::in(misc, I"inbuild.jsonr");
        case UNICODE_DATA_IRES:
                return Filenames::in(misc, I"UnicodeData.txt");
        case MIT_LICENSE_IRES:
                return Filenames::in(misc, I"MIT.html");
        case MIT_0_LICENSE_IRES:
                return Filenames::in(misc, I"MIT-0.html");

        case CBLORB_REPORT_MODEL_IRES:
                return InstalledFiles::varied_by_platform(models, I"CblorbModel.html");
        case DOCUMENTATION_XREFS_IRES:
                return InstalledFiles::varied_by_platform(models, I"xrefs.txt");
        case JAVASCRIPT_FOR_STANDARD_PAGES_IRES:
                return InstalledFiles::varied_by_platform(models, I"main.js");
        case JAVASCRIPT_FOR_EXTENSIONS_IRES:
                return InstalledFiles::varied_by_platform(models, I"extensions.js");
        case JAVASCRIPT_FOR_ONE_EXTENSION_IRES:
                return InstalledFiles::varied_by_platform(models, I"extensionfile.js");
        case CSS_SET_BY_PLATFORM_IRES:
                return InstalledFiles::varied_by_platform(models, I"platform.css");
        case CSS_FOR_STANDARD_PAGES_IRES:
                return InstalledFiles::varied_by_platform(models, I"main.css");
    }
    internal_error("unknown installation resource file");
    return NULL;
}

§2. This enables each platform to provide its own CSS and Javascript definitions, if they would prefer that:

filename *InstalledFiles::varied_by_platform(pathname *models, text_stream *leafname) {
    TEMPORARY_TEXT(variation)
    WRITE_TO(variation, "%s-%S", PLATFORM_STRING, leafname);
     NB: PLATFORM_STRING is a C string, so that %s is correct
    filename *F = Filenames::in(models, variation);
    if (TextFiles::exists(F) == FALSE) F = Filenames::in(models, leafname);
    DISCARD_TEXT(variation)
    return F;
}

§3. Or even for a different platform than the one we're running on:

filename *InstalledFiles::filename_for_platform(int ires, text_stream *platform) {
    if (Str::len(platform) == 0) return InstalledFiles::filename(ires);
    pathname *internal = INSTALLED_FILES_HTML_CALLBACK();
    pathname *models = Pathnames::down(internal, I"HTML");
    switch (ires) {
        case CBLORB_REPORT_MODEL_IRES:
                return InstalledFiles::varied_by_named_platform(models,
                    I"CblorbModel.html", platform);
        case DOCUMENTATION_XREFS_IRES:
                return InstalledFiles::varied_by_named_platform(models,
                    I"xrefs.txt", platform);
        case JAVASCRIPT_FOR_STANDARD_PAGES_IRES:
                return InstalledFiles::varied_by_named_platform(models,
                    I"main.js", platform);
        case JAVASCRIPT_FOR_EXTENSIONS_IRES:
                return InstalledFiles::varied_by_named_platform(models,
                    I"extensions.js", platform);
        case JAVASCRIPT_FOR_ONE_EXTENSION_IRES:
                return InstalledFiles::varied_by_named_platform(models,
                    I"extensionfile.js", platform);
        case CSS_SET_BY_PLATFORM_IRES:
                return InstalledFiles::varied_by_named_platform(models,
                    I"platform.css", platform);
        case CSS_FOR_STANDARD_PAGES_IRES:
                return InstalledFiles::varied_by_named_platform(models,
                    I"main.css", platform);
    }
    return InstalledFiles::filename(ires);
}

filename *InstalledFiles::varied_by_named_platform(pathname *models, text_stream *leafname,
    text_stream *platform) {
    TEMPORARY_TEXT(variation)
    WRITE_TO(variation, "%S-%S", platform, leafname);
    filename *F = Filenames::in(models, variation);
    if (TextFiles::exists(F) == FALSE) F = Filenames::in(models, leafname);
    DISCARD_TEXT(variation)
    return F;
}

§4. This directory also holds the Basic.indext and Standard.indext index structure files, but in principle we allow a wider range of these to exist, so:

filename *InstalledFiles::index_structure_file(text_stream *leaf) {
    pathname *internal = INSTALLED_FILES_HTML_CALLBACK();
    pathname *misc = Pathnames::down(internal, I"Miscellany");
    return Filenames::in(misc, leaf);
}