MacroExpressions Products

Home Products Services Download Contact us
General introduction to MacroExpressions ^
<You are here>
Consulting, products customization, custom development C-Slang, Unimal and Snob are available for evaluation Email, telephone and fax numbers

Click on a button below to go to a product details page
All things embedded




This page contains brief executive summaries of software products by MacroExpressions: Unimal, C-SLang, Maestra and Snob.

MacroExpressions uniform End User License Agreement (EULA) applies to all commercial MacroExpressions products (Unimal, C-SLang and Snob). It is also available in PDF format here.

For a pitch on what they are for, visit the home page. To go for more detailed descriptions, please, click an appropriate button on the left.


A well-developed macro language allows very sophisticated static initialization, including automatic compile-time generation of auxiliary (e.g., lookup) tables, tabulating hard-to-compute functions etc. UNIfied MAcro Language (Unimal) adds the necessary features to high-level languages in a way independent of the target language.

In addition, it allows sharing parameters among different programming languages, exporting parameters (e.g., array size) to separate files. It also does 32-bit math on the parameters.

Unimal allows reducing the code maintenance complexity, reducing the project's memory requirements and to put in ROM what otherwise had to be calculated in runtime.

Unimal supplements HLLs with:

  • (a) capabilities of early evaluation of constant numerical or string expressions,
  • (b) freely definable calculated names,
  • (c) capabilities of repeated scanning of a segment of the source code.

The Unimal language consists of two related parts: Unimal operators and Unimal target language interface. It is the specially designed target language interface that makes Unimal 100% independent of the target programming language.

Who can benefit from harnessing Unimal? We think, anyone involved in code maintenance and reuse, especially in projects with multiple personalities, such as "product line." But don't take our word on it and see for yourself.

To learn more about the benefits of Unimal, please, visit Unimal page, or just download Unimal along with complete documentation and several application notes and evaluate the product applied to your project.


In some cases code size must be kept to the absolute minimum regardless of execution speed. Examples include

  • ROM-based software support of various software and hardware test procedures
  • Reaction to slow events, e.g., human interface.

Important special case is downloadable code, such as for

  • in-depth testing of embedded systems in design, manufacturing or failure analysis.
  • "n:1" standby controllers

For more analysis, please, see the white paper, "Solving testability problems of resource-constrained embedded systems with interpreted languages", which is also available in pdf.

C-SLang is a language for this class of software components. Its design is optimized for code density and is motivated by an unusual company: 8-bit assemblers, FORTRAN and Java.

C-SLang source resembles assembly code but compiles into executable (or, rather, interpreted) bytecode by a regular ANSI C compiler, because instructions are implemented as C macros, albeit unusual. The bytecode can be linked into your project or exported in downloadable (stand-alone) format.

Bytecode interpreter, or C-SLang virtual machine (SVIRM), which runs C-SLang, also implements freely configurable hardware abstraction layer. It's worth noting that SVIRM has remarkably small footprint.

To learn more about C-SLang, please, visit C-Slang page, or just go to the download page and get the evaluation version with complete documentation.


Maestra is a free reference implementation of a unit test environment described in the Maestra page.

It is applicable to C and to an extent to C++ unit testing and is targeted primarility at embedded and/or safety-related product development environments.

Its key feature is a unique method of code instrumentation that allows to demonstrate code/branch coverage. The method is based on an unorthodox use of C preprocessor and depends only on the compiler, without a need for external tools.


If you distribute the source code of the whole or part of your project distribution and want to protect your intellectual property embodied in the code, Snob is an inexpensive and versatile tool for you to achieve this goal.

Even if you are distributing a pre-compiled library, you may want to obfuscate the names that are not part of your API because relocation tables in the library (and/or its modules) do contain names from your source code.

"Snob" stands for "simple (or stupid, if you like it better) name obfuscator".
Snob removes comments and replaces meaningful names (identifiers) in your source code with meaningless and similarly looking ones. This makes the code very hard to read for a human being (but not a computer). As a usual practice, a name obfuscator is used when the source code containing proprietary knowledge needs to be distributed. When a reader encounters your obfuscated code, at the very least he understands that you wanted to protect it and that it is not really for human eyes. If he still wants to figure out how the code works, the task is much harder if the names are meaningless.

We do not require you to register in order to gain access to downloads but we would appreciate if you send an acknowledgment email to info@macroexpressions.com