News and Announcements

Release 01.08.03 - Experimental Compiler Alpha I.c Release

2012-09-13: Interp Release 01.08.03 includes the Alpha Phase I.c release of the I2 compiler, with functional debug capabilities. Read all the release details in the NOTES and the CHANGELOG.

Release 01.08.02 - Experimental Compiler Infrastructure

2011-06-25: Interp Release 01.08.02 is the beginning of the work on the "experimental" I2 compiler. Currently it consists of only the modified function return stack frame, and the infrastructure for building and testing it. Read all the release details in the NOTES and the CHANGELOG.

Release 01.08.01 - Convert Command Vector Table

2011-06-25: Interp Release 01.08.01 makes the command vector table into a constant array of pointers that are initialized at compile-time. This also makes it much easier to adapt interp to a run-from-flash environment that has less RAM.

Release 01.08.00 - IIF files

2011-05-25: Interp Release 01.08.00 introduces Interp Image Format (IIF) files. They are portable binary containers for your interp programs. They are the perfect way to distribute an interp-based solution to a non-technical audience.

This release also incorporates Patch 01.07.01, Patch 01.07.02, and Patch 01.07.03 in their entirety. Keep reading the following three news items for more.

Patch 01.07.03 - Correct and Expand Documentation

2011-03-05: Patch 01.07.03 concentrates on documenting interp's build process. The new document (PDF) explains how the build process customizes interp for (embedded) Linux, RTOS, and no RTOS environments. It guides you through the build process by explaining the parameters that customize interp, and by providing command line examples (invoking make.)

There were also a few changes to the user manual (PDF.) An omission was corrected in the description of M-QUOTE (M") in chapter five. Corrections were made to the note at the beginning of chapter six, and to the descriptions of errors 8 and 9.

Patch 01.07.02 - Cleanup, Correct and Expand Test Coverage

2011-02-18: Patch 01.07.02 concentrates on the test script ( and golden_results.txt) used for regression testing each release. Recent features were incorportated into the tests along with missing tests, test corrections and general cleanup.

Patch 01.07.01 - Update the User Manual

So far, there have been no code changes, but patch 01.07.01 updated the documentation to more clearly integrate the default macros with the text, examples and tables in the User Manual (PDF), and the Interp Guide (.txt).

Call For Features

2011-01-24: The change cycle for Release 01.08.00 is officially underway, with distribution slated for sometime in July 2011. You are invited to submit your feature requests here. As changes are committed to the repository, they are logged as patches (01.07.xx) in the NOTES and the CHANGELOG.

Release 01.07.00 - Print Iterator

2011-01-14: Interp Release 01.07.00 continues to expand the interp language, especially the I/O capabilities.

Adding the 'C' modifier to QUOTE (") and M-QUOTE (M") eliminates the need to write code to filter the output to replace non-printing characters with '.'

But the really big news is the print iterator. In order to simplify writing memory and structure output routines, two new print meta-characters, '!' and '@', were added to QUOTE (") and M-QUOTE (M"). These new print facilities make it possible to print values taken directly from memory as bytes, halfword, or words. A memory address called the PRINT_ITERATOR_ADDRESS (System Constant 38) is set via "!A". This address is automatically incremented/decremented as each location is printed. Whether to increment or decrement is determinted by PRINT_ITERATOR_MODE (System Constant 39.) It is initialized to auto-increment by "!A", but can be switched to auto-decrement by "!d", or back to auto-increment by "!i". Auto-decrement requires a more complex implementation because the decrementing can only be done just before printing the value of the -next- memory location. That is handled by PRINT_ITERATOR_FIRST_ONE (System Constant 40.) It is set TRUE by "!A", "!i", and "!d", and set FALSE by the first following '@' meta-character.

As with the '#' print meta-character, the '@' may be followed by an optional modifier. Without a modifier, the value is read from memory as a 32-bit word and printed in the current output base. If a modifier (mod) is present, the value is read from memory as indicated below (BYTE is 1-byte, HALFWORD is 2-bytes, and WORD is 4-bytes):

mod modifier description
a (WORD) print the print iterator address as a notated (0x) hexadecimal word (10 characters). Print iterator address is not changed by this modifier.
A (WORD) print the print iterator address as a hexadecimal word (8 characters). Print iterator address is not changed by this modifier.
b (BYTE) print value as a notated (0x) hexadecimal byte (4 chars)
B (BYTE) print value as a hex byte (2 characters)
c (BYTE) print value as one ASCII character
C (BYTE) print value as one ASCII character, prints '.' if the character is non-printable
d (WORD) print value as free-form decimal
Dn (BYTE/HALFWORD/WORD) display decimal value right-justified in an n-digit field. The range of n is 0-9 with 0 representing a 10-digit field and all other values representing their equivalent field width. The size of memory read is determined by the specified field width:
   BYTE - D1, D2, and D3
   HALFWORD - D4 and D5
   WORD - D6, D7, D8, D9, and D0
h (HALFWORD) print value as a notated (0x) hexadecimal halfword (6 chars)
H (HALFWORD) print value as a hex halfword (4 characters)
s (WORD) use value as the address of a null-terminated string of ASCII characters, and print the entire string or "NULL" if the value (treated as pointer) is NULL.
S (string length+1) use value as a zero-terminated string of ASCII characters, and print the entire string
T (WORD) treat the value as elapsed time in microseconds and print it as hh:mm:ss.uuuuuu, where "hh" is hours, "mm" minutes, "ss" seconds, and "uuuuuu" microseconds
w (WORD) print value as a notated (0x) hexadecimal word (10 chars)
W (WORD) print value as a hex word (8 characters)

NOTE: these modifiers (bBhHwW) specify minimum field width. If the value is larger, it still prints properly.

NOTE: Each modifier (except aA) increments the print iterator address after reading the value.

NOTE: the 'S' modifier is illegal when auto-decrement mode is enabled ("!d") because of the uncertainty associated with searching backwards for the beginning of a variable-length string.

Because there are now two new print meta-characters, you are advised to check through your scripts for '!' or '@' in any QUOTE or M-QUOTE print statement, and escape them with a preceding '\' character.

For working examples that use the new print iterator, look on the Interp Code Samples page at examples 1, 4, 7, 8, and 10 thru 12.

See the changelog for the all details.

Interp Release 01.07.00 is available for download here.

Release 01.06.00 - Reduced Library Requirements and NEW LICENSE (GPLV3)

2010-07-08: Interp Release 01.06.00 continues to improve integration with embedded environments by reducing it's c library requirements. Now you can use an alternate library, source code provided, that replaces the necessary functions needed from strings.h and ctype.h. This idea can be extended to replace other library functions as needed.

At the language-level, Release 01.06.00 prevents the use of several interactive-only commands within functions: Xd (X-OUT-DEFINITION), Xg (X-OUT-FUNCTIONS), dG (GLOBAL-DEFINITION), dL (LOCAL-DEFINITION), dg (LIST-GLOBALS), dl (LIST-LOCALS), and v (VERSION.)

Interp converted to the GPLv3 license.

See the changelog for the all details.

Interp Release 01.06.00 is available for download here.

Project Web Site Update

2010-01-26: The site content expanded significantly after all the externally referenced manual page documentation and code samples were integrated.

Release 01.05.00 - "#assign" and Address Alignment Checks

2009-10-14: Interp Release 01.05.00 continues the theme of improving the usefulness of the language by adding the "#assign" directive to the outer interpreter as a way of creating macros that are defined during execution of your scripts. (Scripts are sections of interp code that are not inside function definitions - although they may call functions.) This technique can take you into the world of macros whose definitions can be calculated values or strings that are created on the spot.

At the language-level, Release 01.05.00 adds an optional run-time check to insure that your memory accesses are properly aligned to the same boundary as the data you are reading or writing. This safegard can be monitored and controlled through System Constant ("K") 37, ENFORCE_ALIGNMENT. The default setting for this new constant is ~0/TRUE.

There is also good news for porters and maintainers of customized interp installations. Release 01.05.00 includes an architecture change that moves redirected_input() out of ilowlevelio.c and into main.c where it belongs (since it is Linux-specific.) Also, ilowlevelio.c was updated with comments, more code and conditional compilation directives to provide default definitions for the features with known functionality for embedded builds. Together these changes make it easier for the porter to find the code that has to be changed for a particular embedded target.

See the changelog for the all details.

Release 01.04.00 - CLI Improvement and "#restore"

2009-07-13: This release improves the functionality of the CLI "-c command" option by enabling the use of macro definitions (such as "dup", or "YourMacro.")

It also addes the new outer interpreter directive, "#restore", which lets you restore the default macro definitions.

Several maintenance changes were made, including a Makefile change, and two example script changes.

See the changelog for the all details.

SourceForge Community Choice Awards Nominations

2009-05-16: Nominate Interp for Best Project. Nominations will be accepted until May 29th, and the ten projects with the most nominations in each category will become finalists.

Release 01.03.00 - Formatted Decimal Output

2009-04-19: This version adds formatted decimal output to QUOTE (") and M-QUOTE (M").

It also fixes a QUOTE/M-QUOTE bug in the "#T", "#c", and "#s" format options that could cause interp to either crash or print garbage.

Translators Wanted

2009-03-31: Interp's DOC directory tree is full of interesting and helpful documentation. But it's all in (American) English. If English is not your native language, you can help fix this problem. If you have the knowledge, time and desire to translate some of this documentation to another language, please email me (kingdl802 AT gmail DOT com) with your technical experience and language fluency.

Release 01.02.00 - Build Configuration Options and CLI Improvements

2009-03-19: This version adds the ability to control memory use during build-time, including the sizes of the data stack, loop control stack, function return stack, global/local variable areas, input buffer, concatenation/ execution buffer, and whether or not global and local functions have private data (their own local variables, and local functions.)

It also adds the ability to access the build configuration parameters during run-time through the system constants ("K") operator.

The "-q" CLI option and the "#quit" outer interpreter directive were also added. They allow you to tell interp to quit on the next error (which cancels the active "-C" option or "#CONTINUE" directive.)

Plus this release fixes a CLI bug that occurs when a run-time error occurs while reading input from a file via the "-f" option.

Interp Source Code in SVN

2009-01-09: Both version 01.00.00 and 01.01.00 are in SVN.

Project Web Site

2008-11-30: Interp's shiny new site has arrived.

Release 01.01.00 - Macro Processor Memory Management

2008-06-21: This release improves two aspects of interp: execution efficiency, and macro processor memory management. Execution speed improvements were made to stack operations and function call and return operations. Macro processor memory management is a new and much needed feature for interp.