General
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.
Unimal
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.
C-SLang
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
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.
Snob
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
|