Crossword Maestro file format (.CMO)

This is the file format for Crossword Maestro crosswords. The files have the file extension .CMO

Anyone is free to use this information for their own purposes and in their own applications. There are no royalties to be paid if you do so.

All we ask in return is the following:

  • You refer to this file format as "Crossword Maestro format" and provide a web link to:
    http://www.crosswordmaestro.com/ so people know what is being talked about.
  • You acknowledge that "Crossword Maestro" is a trademark of Genius 2000 Software.
  • You save out the files with the .CMO file extension.

If you are producing a crossword tool or similar that uses this file format we would be interested in hearing about it. We may want to pass details on to the thousands of Crossword Maestro customers. Please email us

Overview

In the following, string is a string, dword is four bytes and byte is a single byte.

They are stored using the MFC standard serializations of CString, DWORD and BYTE. For strings this is a single byte giving the length of the string followed by the string itself (without a termination character).

Please do to not assume that the "future expansion" fields are blank. Your application may be asked to read a new version of this format and will break if you make such assumptions. When writing the file format you should write out zeroes or blank strings. However, when reading you should read the data and throw it away whatever it is. For strings this could be a real string. If you assume that this string is a single byte your application will break if it isn't.

Some sample files are linked to at the end of this page.

Header

string: "Crossword Maestro"
string: the version number of CM used to save (e.g. "1.00")
string: title (e.g. "Times 10248")
string: copyright
string: author
string: notes
string: blank (future expansion)
string: blank (future expansion)
string: blank (future expansion)
dword : cryptic (0 if non-cryptic, 1 if puzzle is cryptic)
dword : quick (opposite of cryptic - don't ask why this is here)
dword : 0 (future expansion)
dword : barred (1 if a barred crossword, 0 if not)
dword : blocked (1 if a blocked crossword, 0 if not)
dword : 0 (future expansion)
dword : width (number of squares across)
dword : height (number of squares down)
dword : 0 (future expansion)
dword : 0 (future expansion)

Squares

These are listed one after the other starting at top left and moving left to right in "reading" order. Each square is described as follows:

dword : block (1 if the square is a block, 0 otherwise)
dword : visible (1 if the square is visible, 0 otherwise. If invisible make it a block too. Used for funny shaped crosswords.)
dword : bar right (1 if the square has a bar to the right, 0 otherwise)
dword : bar bottom (1 if the square has a bar at the bottom, 0 otherwise)
byte : inked in letter ('A' to 'Z' or 0 if blank)
dword : confidence (a number from 0 to 100 indicating confidence for letter being right - use 100)
byte : solution ('A' to 'Z' or 0 - the official solution to the square, 0 if not stored)
byte : wrong (1 if the inked in letter is labelled as incorrect, 0 otherwise)
byte : 0 (future expansion)
byte : 0 (future expansion)
byte : 0 (future expansion)
dword : 0 (future expansion)
dword : 0 (future expansion)
string: "" (future expansion)

Clues

Clues are listed across then down in numerical order, exactly as they would appear in a newspaper. Numbering is inferred from the order and the grid and is not stored.

Crossword Maestro clues have the length description in brackets at the end as part of the text. e.g. "dog (5-5)". If the length description is missed out Crossword Maestro should add an asterisked length description when loaded.

Each clue is described as follows:

string: clue text with length description (or "unclued" if not yet entered)
dword : 0 (future expansion)
dword : 0 (future expansion)
dword : 0 (future expansion)
string: "" (future expansion)
string: "" (future expansion)
string: "" (future expansion)

Example files