packages icon
   stp stands for "simple text (pre)processor". It lets you
   conditionally include bits of text, have macros for commonly used
   things, and stuff, thus allowing you to create dynamic text files.
   It's kinda like the pre-processor you have for C/C++ (#define, #ifdef,
   #include etc.).
Download it from
   It probably compiles on most Linux systems, and most modern UNIX
   without much problem.
The statements

   stp can process any text file. It only processes lines that begin with
   '@' (at). Any others are just printed as-is.
   I think it should be straight forward to use, once you know what the
   'commands' are. Each are a single line, beginning on a on a new line.
   You can make them span across several lines, only for readability, by
   putting a '\' (back-slash) at the end of the line, like:
   @define moo \
   which will be asumed as @define moo blah. To actually use a newline
   character in a statement, use the %nl macro.
  Using variables/macros
   You know what they are. Here's how to use them...
   @define name value
   Variable/macro names are words that begin with a '%' (percent),
   looking like %name. You can also do something like
   blah%{somemacro}blah. Note that they are only expanded in lines that
   begin with an @. You can pass arguements to macros, like
   %macro(arg1,arg2), which are set as %1 and %2 within the macro. For
   example, to make a macro to produce an HTML link, using the first
   argument as the link destination, and the 2nd as the next, you'd do:
   @define link <a href="%1">%2</a>
   So %link(aaaa,moo) will produce <a href="aaaa">moo</a>.
   There are several pre-defined macros, which are described later
  Conditional execution
   @if, @ifnot, @elseif, @elseifnot, @else and @endif. It shouldn't be
   too hard to figure out what these do. Here's an example:
   @if (something)
   process this stuff if something is true
   @elseif (something-else)
   process this stuff if something is not true, but something-else is.
   @else (something-else)
   process this stuff if neither something or something-else is true.
   Yes, you can nest @if[not]..@endif statments within each other, and
   the @else* statements are optional (but only allowed inside
   @if[not]..@endif pairs).
   If you want, you can just use a single-lined @if[not] statement, like:
   @if (something) do this
   In that case, a following @endif is not needed.
  Other stuff
   @:text evaluates the macros in text. @exec command executes command
   and includes the output. This is passed to the shell (using
   system(3)). No, stp doesn't process the output of command, just
   includes it as-is. You can, however, work around this with @exec echo
   `command` | stp.
   @include file includes file as though it is part of the current file.
   The contents of these files are parsed by stp. This allows you to have
   standard headers, and stuff. If you don't want stp to parse the
   contents of this file, just do @exec cat file.
   @eof treats this position in the file as the end, and everything else
   after is is ignored... as simple as that.
Built-in macros

   %date([format]) expands to the current date, in the specified format,
   defaulting to what would produce "Mon Sep 25 19:02:27 2000". See the
   man pages strftime(3) or date(1) for more information on the format.
   %time([format]) is just the same as %date, but the default for format
   being "%H:%M:%S".
   %filename expands to the name of the file (as specified on the
   command-line, or @include) or nothing, if reading from standard input.
   %env(var) expands to the environment variable var.
   %nl puts in a newline character.
   %chr(num) does ascii character num.
   %asc(char) is the ascii number of char.
   %linenum is the current line-number of the current file.
   %rand([[min,]max]) produces a random number between min and max. min
   and max defaulting to 0 and 10,000 respectively. 
   %pwd - print working directory; simple.
   %version - this version of stp.
   %stdin is 1 if reading from standard input, or 0 if reading from a
   file, either specified from the command line, or a @include line.

   Copyright (c) 2000 Steve Grundell