### Message Compiler - Header Section (Windows)

The header section contains zero or more of the following keywords:

>     MessageIdTypedef={NAME}
>     SeverityNames=({NAME}={NUMBER}:{NAME})
>     FacilityNames=({NAME}={NUMBER}:{NAME})
>     LanguageNames=({NAME}={NUMBER}:{FILENAME})

These keywords have the following meaning:

Keyword | Description
--- | ---
MessageIdTypedef | Gives a symbolic name that is output as the typedef name for each numeric MessageId value. The default value is NULL, meaning that there will be no type case output when defining symbolic names for a MessageId.
SeverityNames | Defines the set of names that are allowed as the value of the Severity keyword in the message definition. The set is delimited by left and right parentheses. Associated with each severity name is a number that, when shifted left by 30, gives the bit pattern to logically OR with the Facility value and MessageId to come up with the full 32-bit message code. The default value is:
    Severity Names=(
             Success=0x0
             Informational=0x1
             Warning=0x2
             Error=0x3
    )
FacilityNames | Defines the set of names that are allowed as the value of the Facility keyword in the message definition. The set is delimited by left and right parentheses. Associated with each facility name is a number that , when shifted left by 16 bits, gives the bit pattern to logically OR with the Severity value and MessageId to come up with the full 32-bit message code. The default value of this keyword is:
    FacilityNames=(
    		System=0x0FF
    		Application=0xFFF
    	     )
Facility codes occupy the low order 12 bits of the high order 16 bits of a 32-bit message code. Any facility code that does not fit in 12 bits is an error. This allows for the 4096 facility codes. The first 256 are reserved for use by the system software. The facility codes can be given symbolic names by following each value with :{NAME}
LanguageNames | Defines the set of names that are allowed as the value of the Language keyword in the message definition. The set is delimited by left and right parentheses. Associated with each language name is a number and a file name that will be used to name the binary output file that will contain all of the message text for that language. The number corresponds to the Language ID tag to use in the resource table. The number is separated from the file name with a colon. The initial value of this keyword is:
    LanguageNames=(English=1:MSG00001)
Any new names that an application defines in its .mc file which don't override any of the built-in names will be added to the list of valid languages. This allows an application to support private languages with descriptive names.

Message Compiler - An Overview
Message Compiler - Syntax
MKMSGF - Make Message File Utility
MKCATDEF - Preprocess Message Source File Utility