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.
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.
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.
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.
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.
2011-02-18: Patch 01.07.02 concentrates on the test script (test.int 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.
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).
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.
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.
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.
2010-01-26: The site content expanded significantly after all the externally referenced manual page documentation and code samples were integrated.
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.
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.
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.
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.
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.
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.
2009-01-09: Both version 01.00.00 and 01.01.00 are in SVN.
2008-11-30: Interp's shiny new site has arrived.
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.