WINDMC(1)

πŸ“¦
version 2.47 Β· 5 versions
, in arch rolling

πŸ’… WINDMC(1) β€” GNU Development Tools

okay so bestie, welcome to the windmc page β€” this is the gen-z tour of a very niche binutils tool and honestly it's giving main character energy for Windows message resources. ✨


🌸 NAME 🌸

windmc β€” the thing that generates Windows message resources. that's the whole vibe. πŸŽ€


πŸ¦‹ SYNOPSIS πŸ¦‹

windmc [options] input-file

literally that's it. options, then your input file. slay.


✨ DESCRIPTION ✨

so windmc reads message definitions from an input file (.mc, iykyk) and translates them into a whole little family of output files. and when we say family we mean four kinds, bestie:

  • h β€” a C header file holding the message definitions. πŸ“„
  • rc β€” a resource file that's compilable by the windres tool. πŸ› οΈ
  • bin β€” one or more binary files containing the resource data for a specific message language. πŸ”₯
  • dbg β€” a C include file that maps message ids to their symbolic name. πŸ—ΊοΈ

the exact description of these different formats lives in documentation from Microsoft (not us, we're just the messenger 🫢).

when windmc converts from the mc format to the bin format, rc, h, and optional dbg, it is acting like the Windows Message Compiler. yes, that's the whole job. no cap.


πŸŽ€ OPTIONS πŸŽ€

one bullet per flag, no skipping, we don't do that here. πŸ’–

  • -a, --ascii_in β€” says your input file is ASCII. this is the default behaviour, so it's kind of the "no thoughts head empty" option. πŸ“
  • -A, --ascii_out β€” says the messages in the output bin files should be in ASCII format.
  • -b, --binprefix β€” says bin filenames should have to be prefixed by the basename of the source file. cute little name tag. 🏷️
  • -c, --customflag β€” sets the customer bit in all message id's.
  • -C codepage, --codepage_in codepage β€” sets the default codepage used to convert the input file to UTF16. the default is codepage 1252 (the page literally spells it ocdepage 1252 and we're keeping that typo, it's iconic πŸ’€).
  • -d, --decimal_values β€” outputs the constants in the header file in decimal. default is hexadecimal output, so this is your "actually I want it the other way" button.
  • -e ext, --extension ext β€” the extension for the header file. default is the .h extension.
  • -F target, --target target β€” specifies the BFD format to use for a bin file as output. this is a BFD target name; you can use the --help option to see a list of supported targets. normally windmc uses the default format, which is the first one listed by --help. 🎯
  • -h path, --headerdir path β€” the target directory of the generated header file. default is the current directory.
  • -H, --help β€” displays a list of command-line options and then dips. πŸ‘‹
  • -m characters, --maxlength characters β€” tells windmc to generate a warning if the length of any message exceeds the number you specified. a little vibe check on your message lengths. ⚠️
  • -n, --nullterminate β€” terminates message text in bin files with zero. by default they're terminated by CR/LF instead.
  • -o, --hresult_use β€” not yet implemented, bestie. instructs windmc to generate an OLE2 header file using HRESULT definitions. status codes are used if the flag is not specified. πŸ™ˆ
  • -O codepage, --codepage_out codepage β€” sets the default codepage used to output text files. the default is codepage 1252.
  • -r path, --rcdir path β€” the target directory for the generated rc script and the generated bin files that the resource compiler script includes. default is the current directory.
  • -u, --unicode_in β€” says your input file is UTF16.
  • -U, --unicode_out β€” says the messages in the output bin file should be in UTF16 format. this is the default behaviour. πŸ’œ
  • -v, --verbose β€” enable verbose mode. she talks more. πŸ—£οΈ
  • -V, --version β€” prints the version number for windmc.
  • -x path, --xdgb path β€” the path of the dbg C include file that maps message id's to the symbolic name. no such file is generated without specifying this switch β€” so if you want the map, you gotta ask for the map. πŸ—ΊοΈ
  • @file β€” read command-line options from file. the options read are inserted in place of the original @file option. if file does not exist, or cannot be read, then the option will be treated literally, and not removed. 😭

options in file are separated by whitespace. a whitespace character may be included in an option by surrounding the entire option in either single or double quotes. any character (including a backslash) may be included by prefixing the character to be included with a backslash. the file may itself contain additional @file options; any such options will be processed recursively. πŸŒ€


🌈 SEE ALSO 🌈

the Info entries for binutils. go read 'em, they're right there. πŸ“š


Copyright (c) 1991-2026 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". 🫢


okay that's the whole page, you ate that. this was binutils-2.47, dated 2026-07-30, and it's a WINDMC(1) moment β€” periodt. πŸ’…βœ¨

πŸ“¦ where this page comes from