# Icon Management

    /*
    **	(c) COPYRIGHT MIT 1995.
    **	Please first read the full copyright statement in the file COPYRIGH.
    */

This module is implemented by HTIcons.c, and it is a part of the W3C Reference Library.

    #ifndef HTICONS_H
    #define HTICONS_H

    #include "HTFormat.h"

## Icons

Icons are bound to MIME content-types and encoding. These functions bind icon URLs to given content-type or encoding templates. Templates containing a slash are taken to be content-type templates, other are encoding templates.

## Controlling globals

### Show brackets around alternative text

By default alternative text is bracketed by square brackets (the `ALT` tag to `IMG` element). Setting the global `HTDirShowBrackets` to false will turn this feature off.

    typedef struct _HTIconNode {
        char *	icon_url;
        char *	icon_alt;
        char *	type_templ;
    } HTIconNode;

    /*
     * The list element definition to bind a CGI to a filetyp for special
     * presentation like looking in an archiv (AddHref /cgi-bin/unarch? .zip .tar)
     */
    typedef struct _HTHrefNode {
        char *      href_url;
        char *      type_templ;
    } HTHrefNode;

## File Mode

This is a simplified file mode enumeration that can is used in directory listings.

    typedef  enum _HTFileMode {
        HT_IS_FILE,				/* Normal file */
        HT_IS_DIR,				/* Directory */
        HT_IS_BLANK,			/* Blank Icon */
        HT_IS_PARENT			/* Parent Directory */
    } HTFileMode;

## Public functions

All of these functions take an absolute URL and alternate text to use.

    /* Generates the alt-tag */
    extern char * HTIcon_alt_string (char * alt,
    				        BOOL   brackets);

    /*
     * General icon binding.  Use this icon if content-type or encoding
     * matches template.
     */
    extern void HTAddIcon (char *	url,
    			      char *	alt,
    			      char *	type_templ);

    /*
     * Called from HTConfig.c to build the list of all the AddHref's
     */
    extern void HTAddHref (char *    url,
                                  char *    type_templ);

    /*
     * Icon for which no other icon can be used.
     */
    extern void HTAddUnknownIcon (char * url,
    				     char * alt);

    /*
     * Invisible icon for the listing header field to make it aligned
     * with the rest of the listing (this doesn't have to be blank).
     */
    extern void HTAddBlankIcon (char * url,
    				   char * alt);

    /*
     * Icon to use for parent directory.
     */
    extern void HTAddParentIcon (char * url,
    				    char * alt);

    /*
     * Icon to use for a directory.
     */
    extern void HTAddDirIcon (char * url,
    			         char * alt);

    /*								 HTGetIcon()
    ** returns the icon corresponding to content_type or content_encoding.
    */
    extern HTIconNode * HTGetIcon (HTFileMode	mode,
    				      HTFormat		content_type,
    				      HTEncoding	content_encoding);

    /*
     * returns the HrefNode to get the URL for presentation of a file (indexing)
     */
    extern HTHrefNode * HTGetHref ( char *  filename);

#### A Predifined Set of Icons

The function `HTStdIconInit(url_prefix)` can be used to initialize a standard icon set:

- `blank.xbm` for the blank icon
- `directory.xbm` for directory icon
- `back.xbm` for parent directory
- `unknown.xbm` for unknown icon
- `binary.xbm` for binary files
- `text.xbm` for ascii files
- `image.xbm` for image files
- `movie.xbm` for video files
- `sound.xbm` for audio files
- `tar.xbm` for tar and gtar files
- `compressed.xbm` for compressed and gzipped files

    extern void HTStdIconInit (CONST char * url_prefix);

    #endif /* HTICONS */

end