; // Copyright 2013 The Chromium Authors. All rights reserved.
; // Use of this source code is governed by a BSD-style license that can be
; // found in the LICENSE file.

SeverityNames=(Success=0x0:STATUS_SEVERITY_SUCCESS
               Informational=0x1:STATUS_SEVERITY_INFORMATIONAL
               Warning=0x2:STATUS_SEVERITY_WARNING
               Error=0x3:STATUS_SEVERITY_ERROR)

FacilityNames=(Host=0x0:FACILITY_HOST)

LanguageNames=(
{% for lang in languages %}
{{ lang | replace("-", "_") }}=0x{{ lang | GetLangId }}:MSG0{{ lang | GetLangId}}
{%- endfor %}
)

; // The categories of events.
MessageIdTypedef=WORD

MessageId=0x1
SymbolicName=HOST_CATEGORY
{%- for lang in languages %}
  {%- do SelectLanguage(lang) %}
Language={{ lang | replace("-", "_") }}
{% trans %}HOST_CATEGORY{% endtrans %}
.
{%- endfor %}

; // The message definitions.
MessageIdTypedef=DWORD

MessageId=1
Severity=Informational
Facility=Host
SymbolicName=MSG_HOST_CLIENT_CONNECTED
{%- for lang in languages %}
  {%- do SelectLanguage(lang) %}
Language={{ lang | replace("-", "_") }}
{% trans %}HOST_CLIENT_CONNECTED{% endtrans %}
.
{%- endfor %}

MessageId=2
Severity=Informational
Facility=Host
SymbolicName=MSG_HOST_CLIENT_DISCONNECTED
{%- for lang in languages %}
  {%- do SelectLanguage(lang) %}
Language={{ lang | replace("-", "_") }}
{% trans %}HOST_CLIENT_DISCONNECTED{% endtrans %}
.
{%- endfor %}

MessageId=3
Severity=Error
Facility=Host
SymbolicName=MSG_HOST_CLIENT_ACCESS_DENIED
{%- for lang in languages %}
  {%- do SelectLanguage(lang) %}
Language={{ lang | replace("-", "_") }}
{% trans %}HOST_CLIENT_ACCESS_DENIED{% endtrans %}
.
{%- endfor %}

MessageId=4
Severity=Informational
Facility=Host
SymbolicName=MSG_HOST_CLIENT_ROUTING_CHANGED
{%- for lang in languages %}
  {%- do SelectLanguage(lang) %}
Language={{ lang | replace("-", "_") }}
{% trans %}HOST_CLIENT_ROUTING_CHANGED{% endtrans %}
.
{%- endfor %}

MessageId=5
Severity=Informational
Facility=Host
SymbolicName=MSG_HOST_STARTED
{%- for lang in languages %}
  {%- do SelectLanguage(lang) %}
Language={{ lang | replace("-", "_") }}
{% trans %}HOST_STARTED{% endtrans %}
.
{%- endfor %}

; // This line makes sure that mc.exe does not complain about a single '.' at
; // the end of the file.
