This page contains
brief executive summaries of software products by
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
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
- (a) capabilities of
early evaluation of constant numerical or string
- (b) freely definable
- (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
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
- 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
- "n:1" standby
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
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
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
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