cosmopolitan/third_party/m4
Justine Tunney f4f4caab0e Add x86_64-linux-gnu emulator
I wanted a tiny scriptable meltdown proof way to run userspace programs
and visualize how program execution impacts memory. It helps to explain
how things like Actually Portable Executable works. It can show you how
the GCC generated code is going about manipulating matrices and more. I
didn't feel fully comfortable with Qemu and Bochs because I'm not smart
enough to understand them. I wanted something like gVisor but with much
stronger levels of assurances. I wanted a single binary that'll run, on
all major operating systems with an embedded GPL barrier ZIP filesystem
that is tiny enough to transpile to JavaScript and run in browsers too.

https://justine.storage.googleapis.com/emulator625.mp4
2020-08-25 04:43:42 -07:00
..
TEST Initial import 2020-06-15 07:18:57 -07:00
COPYING Initial import 2020-06-15 07:18:57 -07:00
NOTES Initial import 2020-06-15 07:18:57 -07:00
README.txt Initial import 2020-06-15 07:18:57 -07:00
eval.c Initial import 2020-06-15 07:18:57 -07:00
expr.c Initial import 2020-06-15 07:18:57 -07:00
extern.h Initial import 2020-06-15 07:18:57 -07:00
gnum4.c Initial import 2020-06-15 07:18:57 -07:00
look.c Initial import 2020-06-15 07:18:57 -07:00
m4.1 Initial import 2020-06-15 07:18:57 -07:00
m4.mk Add x86_64-linux-gnu emulator 2020-08-25 04:43:42 -07:00
m4.ms Initial import 2020-06-15 07:18:57 -07:00
main.c Initial import 2020-06-15 07:18:57 -07:00
mdef.h Initial import 2020-06-15 07:18:57 -07:00
misc.c Initial import 2020-06-15 07:18:57 -07:00
ohash.c Initial import 2020-06-15 07:18:57 -07:00
ohash.h Initial import 2020-06-15 07:18:57 -07:00
parser.c Initial import 2020-06-15 07:18:57 -07:00
parser.h Initial import 2020-06-15 07:18:57 -07:00
parser.y Initial import 2020-06-15 07:18:57 -07:00
pathnames.h Initial import 2020-06-15 07:18:57 -07:00
stdd.h Initial import 2020-06-15 07:18:57 -07:00
tokenizer.c Initial import 2020-06-15 07:18:57 -07:00
tokenizer.l Initial import 2020-06-15 07:18:57 -07:00
trace.c Initial import 2020-06-15 07:18:57 -07:00

README.txt

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

M4(1)              Cosmopolitan General Commands Manual             -*-text-*-

๐๐€๐Œ๐„
     ๐—บ๐Ÿฐ โ€” macro language processor

๐’๐˜๐๐Ž๐๐’๐ˆ๐’
     ๐—บ๐Ÿฐ [-๐„๐—ด๐๐˜€] [-๐ƒnฬฒaฬฒmฬฒeฬฒ[=vฬฒaฬฒlฬฒuฬฒeฬฒ]] [-๐—ฑ fฬฒlฬฒaฬฒgฬฒsฬฒ] [-๐ˆ dฬฒiฬฒrฬฒnฬฒaฬฒmฬฒeฬฒ] [-๐—ผ fฬฒiฬฒlฬฒeฬฒnฬฒaฬฒmฬฒeฬฒ]
        [-๐˜ mฬฒaฬฒcฬฒrฬฒoฬฒ] [-๐”nฬฒaฬฒmฬฒeฬฒ] [fฬฒiฬฒlฬฒeฬฒ .ฬฒ.ฬฒ.ฬฒ]

๐ƒ๐„๐’๐‚๐‘๐ˆ๐๐“๐ˆ๐Ž๐
     The ๐—บ๐Ÿฐ utility is a macro processor that can be used as a front end
     to any language (e.g., C, ratfor, fortran, lex, and yacc).  If no
     input files are given, ๐—บ๐Ÿฐ reads from the standard input, otherwise
     files specified on the command line are processed in the given
     order.  Input files can be regular files, files in the m4 include
     paths, or a single dash (โ€˜-โ€™), denoting standard input.  ๐—บ๐Ÿฐ writes
     the processed text to the standard output, unless told otherwise.

     Macro calls have the form name(argument1[, argument2, ..., arguโ€
     mentN]).

     There cannot be any space following the macro name and the open
     parenthesis (โ€˜(โ€™).  If the macro name is not followed by an open
     parenthesis it is processed with no arguments.

     Macro names consist of a leading alphabetic or underscore possibly
     followed by alphanumeric or underscore characters, e.g., valid
     macro names match the pattern โ€œ[a-zA-Z_][a-zA-Z0-9_]*โ€.

     In arguments to macros, leading unquoted space, tab, and newline
     (โ€˜\nโ€™) characters are ignored.  To quote strings, use left and
     right single quotes (e.g., โ€˜ this is a string with a leading
     spaceโ€™).  You can change the quote characters with the ๐—ฐ๐—ต๐—ฎ๐—ป๐—ด๐—ฒ๐—พ๐˜‚๐—ผ๐˜๐—ฒ
     built-in macro.

     Most built-ins don't make any sense without arguments, and hence
     are not recognized as special when not followed by an open parenโ€
     thesis.

     The options are as follows:

     -๐ƒnฬฒaฬฒmฬฒeฬฒ[=vฬฒaฬฒlฬฒuฬฒeฬฒ]
             Define the symbol nฬฒaฬฒmฬฒeฬฒ to have some value (or NULL).

     -๐—ฑ fฬฒlฬฒaฬฒgฬฒsฬฒ
             Set trace flags.  fฬฒlฬฒaฬฒgฬฒsฬฒ may hold the following:

             aฬฒ       print macro arguments.

             cฬฒ       print macro expansion over several lines.

             eฬฒ       print result of macro expansion.

             fฬฒ       print filename location.

             lฬฒ       print line number.

             qฬฒ       quote arguments and expansion with the current
                     quotes.

             tฬฒ       start with all macros traced.

             xฬฒ       number macro expansions.

             Vฬฒ       turn on all options.

             By default, trace is set to "eq".

     -๐„      Set warnings to be fatal.  When a single -๐„ flag is speciโ€
             fied, if warnings are issued, execution continues but ๐—บ๐Ÿฐ
             will exit with a non-zero exit status.  When multiple -๐„
             flags are specified, execution will halt upon issuing the
             first warning and ๐—บ๐Ÿฐ will exit with a non-zero exit status.
             This behaviour matches GNU-m4 1.4.9 and later.

     -๐—ด      Activate GNU-m4 compatibility mode.  In this mode, translit
             handles simple character ranges (e.g., a-z), regular
             expressions mimic emacs behavior, multiple m4wrap calls are
             handled as a stack, the number of diversions is unlimited,
             empty names for macro definitions are allowed, and eval
             understands โ€˜0rbase:valueโ€™ numbers.

     -๐ˆ dฬฒiฬฒrฬฒnฬฒaฬฒmฬฒeฬฒ
             Add directory dฬฒiฬฒrฬฒnฬฒaฬฒmฬฒeฬฒ to the include path.

     -๐—ผ fฬฒiฬฒlฬฒeฬฒnฬฒaฬฒmฬฒeฬฒ
             Send trace output to fฬฒiฬฒlฬฒeฬฒnฬฒaฬฒmฬฒeฬฒ.

     -๐      Prefix all built-in macros with โ€˜m4_โ€™.  For example,
             instead of writing ๐—ฑ๐—ฒ๐—ณ๐—ถ๐—ป๐—ฒ, use ๐—บ๐Ÿฐ_๐—ฑ๐—ฒ๐—ณ๐—ถ๐—ป๐—ฒ.

     -๐˜€      Output line synchronization directives, suitable for
             cpp(1).

     -๐˜ mฬฒaฬฒcฬฒrฬฒoฬฒ
             Turn tracing on for mฬฒaฬฒcฬฒrฬฒoฬฒ.

     -๐”nฬฒaฬฒmฬฒeฬฒ  Undefine the symbol nฬฒaฬฒmฬฒeฬฒ.

๐’๐˜๐๐“๐€๐—
     ๐—บ๐Ÿฐ provides the following built-in macros.  They may be redefined,
     losing their original meaning.  Return values are null unless othโ€
     erwise stated.

     ๐—ฏ๐˜‚๐—ถ๐—น๐˜๐—ถ๐—ป(nฬฒaฬฒmฬฒeฬฒ)
                  Calls a built-in by its nฬฒaฬฒmฬฒeฬฒ, overriding possible
                  redefinitions.

     ๐—ฐ๐—ต๐—ฎ๐—ป๐—ด๐—ฒ๐—ฐ๐—ผ๐—บ(sฬฒtฬฒaฬฒrฬฒtฬฒcฬฒoฬฒmฬฒmฬฒeฬฒnฬฒtฬฒ, eฬฒnฬฒdฬฒcฬฒoฬฒmฬฒmฬฒeฬฒnฬฒtฬฒ)
                  Changes the start comment and end comment sequences.
                  Comment sequences may be up to five characters long.
                  The default values are the hash sign and the newline
                  character.

                        # This is a comment

                  With no arguments, comments are turned off.  With one
                  single argument, the end comment sequence is set to
                  the newline character.

     ๐—ฐ๐—ต๐—ฎ๐—ป๐—ด๐—ฒ๐—พ๐˜‚๐—ผ๐˜๐—ฒ(bฬฒeฬฒgฬฒiฬฒnฬฒqฬฒuฬฒoฬฒtฬฒeฬฒ, eฬฒnฬฒdฬฒqฬฒuฬฒoฬฒtฬฒeฬฒ)
                  Defines the open quote and close quote sequences.
                  Quote sequences may be up to five characters long.
                  The default values are the backquote character and the
                  quote character.

                        `Here is a quoted string'

                  With no arguments, the default quotes are restored.
                  With one single argument, the close quote sequence is
                  set to the newline character.

     ๐—ฑ๐—ฒ๐—ฐ๐—ฟ(aฬฒrฬฒgฬฒ)    Decrements the argument aฬฒrฬฒgฬฒ by 1.  The argument aฬฒrฬฒgฬฒ
                  must be a valid numeric string.

     ๐—ฑ๐—ฒ๐—ณ๐—ถ๐—ป๐—ฒ(nฬฒaฬฒmฬฒeฬฒ, vฬฒaฬฒlฬฒuฬฒeฬฒ)
                  Define a new macro named by the first argument nฬฒaฬฒmฬฒeฬฒ to
                  have the value of the second argument vฬฒaฬฒlฬฒuฬฒeฬฒ.  Each
                  occurrence of โ€˜$nโ€™ (where nฬฒ is 0 through 9) is
                  replaced by the nฬฒ'th argument.  โ€˜$0โ€™ is the name of
                  the calling macro.  Undefined arguments are replaced
                  by a null string.  โ€˜$#โ€™ is replaced by the number of
                  arguments; โ€˜$*โ€™ is replaced by all arguments comma
                  separated; โ€˜$@โ€™ is the same as โ€˜$*โ€™ but all arguments
                  are quoted against further expansion.

     ๐—ฑ๐—ฒ๐—ณ๐—ป(nฬฒaฬฒmฬฒeฬฒ, .ฬฒ.ฬฒ.ฬฒ)
                  Returns the quoted definition for each argument.  This
                  can be used to rename macro definitions (even for
                  built-in macros).

     ๐—ฑ๐—ถ๐˜ƒ๐—ฒ๐—ฟ๐˜(nฬฒuฬฒmฬฒ)  There are 10 output queues (numbered 0-9).  At the end
                  of processing ๐—บ๐Ÿฐ concatenates all the queues in numerโ€
                  ical order to produce the final output.  Initially the
                  output queue is 0.  The divert macro allows you to
                  select a new output queue (an invalid argument passed
                  to divert causes output to be discarded).

     ๐—ฑ๐—ถ๐˜ƒ๐—ป๐˜‚๐—บ       Returns the current output queue number.

     ๐—ฑ๐—ป๐—น          Discard input characters up to and including the next
                  newline.

     ๐—ฑ๐˜‚๐—บ๐—ฝ๐—ฑ๐—ฒ๐—ณ(nฬฒaฬฒmฬฒeฬฒ, .ฬฒ.ฬฒ.ฬฒ)
                  Prints the names and definitions for the named items,
                  or for everything if no arguments are passed.

     ๐—ฒ๐—ฟ๐—ฟ๐—ฝ๐—ฟ๐—ถ๐—ป๐˜(mฬฒsฬฒgฬฒ)
                  Prints the first argument on the standard error output
                  stream.

     ๐—ฒ๐˜€๐˜†๐˜€๐—ฐ๐—บ๐—ฑ(cฬฒmฬฒdฬฒ)
                  Passes its first argument to a shell and returns the
                  shell's standard output.  Note that the shell shares
                  its standard input and standard error with ๐—บ๐Ÿฐ.

     ๐—ฒ๐˜ƒ๐—ฎ๐—น(eฬฒxฬฒpฬฒrฬฒ[ฬฒ,ฬฒrฬฒaฬฒdฬฒiฬฒxฬฒ[ฬฒ,ฬฒmฬฒiฬฒnฬฒiฬฒmฬฒuฬฒmฬฒ]ฬฒ]ฬฒ)
                  Computes the first argument as an arithmetic expresโ€
                  sion using 32-bit arithmetic.  Operators are the stanโ€
                  dard C ternary, arithmetic, logical, shift, relaโ€
                  tional, bitwise, and parentheses operators.  You can
                  specify octal, decimal, and hexadecimal numbers as in
                  C.  The optional second argument rฬฒaฬฒdฬฒiฬฒxฬฒ specifies the
                  radix for the result and the optional third argument
                  mฬฒiฬฒnฬฒiฬฒmฬฒuฬฒmฬฒ specifies the minimum number of digits in the
                  result.

     ๐—ฒ๐˜…๐—ฝ๐—ฟ(eฬฒxฬฒpฬฒrฬฒ)   This is an alias for ๐—ฒ๐˜ƒ๐—ฎ๐—น.

     ๐—ณ๐—ผ๐—ฟ๐—บ๐—ฎ๐˜(fฬฒoฬฒrฬฒmฬฒaฬฒtฬฒsฬฒtฬฒrฬฒiฬฒnฬฒgฬฒ, aฬฒrฬฒgฬฒ1ฬฒ, .ฬฒ.ฬฒ.ฬฒ)
                  Returns fฬฒoฬฒrฬฒmฬฒaฬฒtฬฒsฬฒtฬฒrฬฒiฬฒnฬฒgฬฒ with escape sequences substituted
                  with aฬฒrฬฒgฬฒ1ฬฒ and following arguments, in a way similar to
                  printf(3).  This built-in is only available in GNU-m4
                  compatibility mode, and the only parameters impleโ€
                  mented are there for autoconf compatibility: left-padโ€
                  ding flag, an optional field width, a maximum field
                  width, *-specified field widths, and the %s and %c
                  data type.

     ๐—ถ๐—ณ๐—ฑ๐—ฒ๐—ณ(nฬฒaฬฒmฬฒeฬฒ, yฬฒeฬฒsฬฒ, nฬฒoฬฒ)
                  If the macro named by the first argument is defined
                  then return the second argument, otherwise the third.
                  If there is no third argument, the value is NULL.  The
                  word "unix" is predefined.

     ๐—ถ๐—ณ๐—ฒ๐—น๐˜€๐—ฒ(aฬฒ, bฬฒ, yฬฒeฬฒsฬฒ, .ฬฒ.ฬฒ.ฬฒ)
                  If the first argument aฬฒ matches the second argument bฬฒ
                  then ๐—ถ๐—ณ๐—ฒ๐—น๐˜€๐—ฒ() returns the third argument yฬฒeฬฒsฬฒ.  If the
                  match fails the three arguments are discarded and the
                  next three arguments are used until there is zero or
                  one arguments left, either this last argument or NULL
                  is returned if no other matches were found.

     ๐—ถ๐—ป๐—ฐ๐—น๐˜‚๐—ฑ๐—ฒ(nฬฒaฬฒmฬฒeฬฒ)
                  Returns the contents of the file specified in the
                  first argument.  If the file is not found as is, look
                  through the include path: first the directories speciโ€
                  fied with -๐ˆ on the command line, then the environment
                  variable M4PATH, as a colon-separated list of directoโ€
                  ries.  Include aborts with an error message if the
                  file cannot be included.

     ๐—ถ๐—ป๐—ฐ๐—ฟ(aฬฒrฬฒgฬฒ)    Increments the argument by 1.  The argument must be a
                  valid numeric string.

     ๐—ถ๐—ป๐—ฑ๐—ฒ๐˜…(sฬฒtฬฒrฬฒiฬฒnฬฒgฬฒ, sฬฒuฬฒbฬฒsฬฒtฬฒrฬฒiฬฒnฬฒgฬฒ)
                  Returns the index of the second argument in the first
                  argument (e.g., ๐—ถ๐—ป๐—ฑ๐—ฒ๐˜…(๐˜๐—ต๐—ฒ ๐—พ๐˜‚๐—ถ๐—ฐ๐—ธ ๐—ฏ๐—ฟ๐—ผ๐˜„๐—ป ๐—ณ๐—ผ๐˜… ๐—ท๐˜‚๐—บ๐—ฝ๐—ฒ๐—ฑ, ๐—ณ๐—ผ๐˜…)
                  returns 16).  If the second argument is not found
                  index returns -1.

     ๐—ถ๐—ป๐—ฑ๐—ถ๐—ฟ(mฬฒaฬฒcฬฒrฬฒoฬฒ, aฬฒrฬฒgฬฒ1ฬฒ, .ฬฒ.ฬฒ.ฬฒ)
                  Indirectly calls the macro whose name is passed as the
                  first argument, with the remaining arguments passed as
                  first, ... arguments.

     ๐—น๐—ฒ๐—ป(aฬฒrฬฒgฬฒ)     Returns the number of characters in the first arguโ€
                  ment.  Extra arguments are ignored.

     ๐—บ๐Ÿฐ๐—ฒ๐˜…๐—ถ๐˜(cฬฒoฬฒdฬฒeฬฒ)
                  Immediately exits with the return value specified by
                  the first argument, 0 if none.

     ๐—บ๐Ÿฐ๐˜„๐—ฟ๐—ฎ๐—ฝ(tฬฒoฬฒdฬฒoฬฒ)
                  Allows you to define what happens at the final EOF,
                  usually for cleanup purposes (e.g.,
                  ๐—บ๐Ÿฐ๐˜„๐—ฟ๐—ฎ๐—ฝ("๐—ฐ๐—น๐—ฒ๐—ฎ๐—ป๐˜‚๐—ฝ(๐˜๐—ฒ๐—บ๐—ฝ๐—ณ๐—ถ๐—น๐—ฒ)") causes the macro cleanup
                  to be invoked after all other processing is done).

                  Multiple calls to ๐—บ๐Ÿฐ๐˜„๐—ฟ๐—ฎ๐—ฝ() get inserted in sequence at
                  the final EOF.

     ๐—บ๐—ฎ๐—ธ๐—ฒ๐˜๐—ฒ๐—บ๐—ฝ(tฬฒeฬฒmฬฒpฬฒlฬฒaฬฒtฬฒeฬฒ)
                  Like ๐—บ๐—ธ๐˜€๐˜๐—ฒ๐—บ๐—ฝ.

     ๐—บ๐—ธ๐˜€๐˜๐—ฒ๐—บ๐—ฝ(tฬฒeฬฒmฬฒpฬฒlฬฒaฬฒtฬฒeฬฒ)
                  Invokes mkstemp(3) on the first argument, and returns
                  the modified string.  This can be used to create
                  unique temporary file names.

     ๐—ฝ๐—ฎ๐˜€๐˜๐—ฒ(fฬฒiฬฒlฬฒeฬฒ)  Includes the contents of the file specified by the
                  first argument without any macro processing.  Aborts
                  with an error message if the file cannot be included.

     ๐—ฝ๐—ฎ๐˜๐˜€๐˜‚๐—ฏ๐˜€๐˜(sฬฒtฬฒrฬฒiฬฒnฬฒgฬฒ, rฬฒeฬฒgฬฒeฬฒxฬฒpฬฒ, rฬฒeฬฒpฬฒlฬฒaฬฒcฬฒeฬฒmฬฒeฬฒnฬฒtฬฒ)
                  Substitutes a regular expression in a string with a
                  replacement string.  Usual substitution patterns
                  apply: an ampersand (โ€˜&โ€™) is replaced by the string
                  matching the regular expression.  The string โ€˜\#โ€™,
                  where โ€˜#โ€™ is a digit, is replaced by the corresponding
                  back-reference.

     ๐—ฝ๐—ผ๐—ฝ๐—ฑ๐—ฒ๐—ณ(aฬฒrฬฒgฬฒ, .ฬฒ.ฬฒ.ฬฒ)
                  Restores the ๐—ฝ๐˜‚๐˜€๐—ต๐—ฑ๐—ฒ๐—ณed definition for each argument.

     ๐—ฝ๐˜‚๐˜€๐—ต๐—ฑ๐—ฒ๐—ณ(mฬฒaฬฒcฬฒrฬฒoฬฒ, dฬฒeฬฒfฬฒ)
                  Takes the same arguments as ๐—ฑ๐—ฒ๐—ณ๐—ถ๐—ป๐—ฒ, but it saves the
                  definition on a stack for later retrieval by ๐—ฝ๐—ผ๐—ฝ๐—ฑ๐—ฒ๐—ณ().

     ๐—ฟ๐—ฒ๐—ด๐—ฒ๐˜…๐—ฝ(sฬฒtฬฒrฬฒiฬฒnฬฒgฬฒ, rฬฒeฬฒgฬฒeฬฒxฬฒpฬฒ, rฬฒeฬฒpฬฒlฬฒaฬฒcฬฒeฬฒmฬฒeฬฒnฬฒtฬฒ)
                  Finds a regular expression in a string.  If no further
                  arguments are given, it returns the first match posiโ€
                  tion or -1 if no match.  If a third argument is proโ€
                  vided, it returns the replacement string, with sub-
                  patterns replaced.

     ๐˜€๐—ต๐—ถ๐—ณ๐˜(aฬฒrฬฒgฬฒ1ฬฒ, .ฬฒ.ฬฒ.ฬฒ)
                  Returns all but the first argument, the remaining
                  arguments are quoted and pushed back with commas in
                  between.  The quoting nullifies the effect of the
                  extra scan that will subsequently be performed.

     ๐˜€๐—ถ๐—ป๐—ฐ๐—น๐˜‚๐—ฑ๐—ฒ(fฬฒiฬฒlฬฒeฬฒ)
                  Similar to ๐—ถ๐—ป๐—ฐ๐—น๐˜‚๐—ฑ๐—ฒ, except it ignores any errors.

     ๐˜€๐—ฝ๐—ฎ๐˜€๐˜๐—ฒ(fฬฒiฬฒlฬฒeฬฒ)
                  Similar to ๐—ฝ๐—ฎ๐˜€๐˜๐—ฒ(), except it ignores any errors.

     ๐˜€๐˜‚๐—ฏ๐˜€๐˜๐—ฟ(sฬฒtฬฒrฬฒiฬฒnฬฒgฬฒ, oฬฒfฬฒfฬฒsฬฒeฬฒtฬฒ, lฬฒeฬฒnฬฒgฬฒtฬฒhฬฒ)
                  Returns a substring of the first argument starting at
                  the offset specified by the second argument and the
                  length specified by the third argument.  If no third
                  argument is present it returns the rest of the string.

     ๐˜€๐˜†๐˜€๐—ฐ๐—บ๐—ฑ(cฬฒmฬฒdฬฒ)  Passes the first argument to the shell.  Nothing is
                  returned.

     ๐˜€๐˜†๐˜€๐˜ƒ๐—ฎ๐—น       Returns the return value from the last ๐˜€๐˜†๐˜€๐—ฐ๐—บ๐—ฑ.

     ๐˜๐—ฟ๐—ฎ๐—ฐ๐—ฒ๐—ผ๐—ป(aฬฒrฬฒgฬฒ, .ฬฒ.ฬฒ.ฬฒ)
                  Enables tracing of macro expansions for the given
                  arguments, or for all macros if no argument is given.

     ๐˜๐—ฟ๐—ฎ๐—ฐ๐—ฒ๐—ผ๐—ณ๐—ณ(aฬฒrฬฒgฬฒ, .ฬฒ.ฬฒ.ฬฒ)
                  Disables tracing of macro expansions for the given
                  arguments, or for all macros if no argument is given.

     ๐˜๐—ฟ๐—ฎ๐—ป๐˜€๐—น๐—ถ๐˜(sฬฒtฬฒrฬฒiฬฒnฬฒgฬฒ, mฬฒaฬฒpฬฒfฬฒrฬฒoฬฒmฬฒ, mฬฒaฬฒpฬฒtฬฒoฬฒ)
                  Transliterate the characters in the first argument
                  from the set given by the second argument to the set
                  given by the third.  You cannot use tr(1) style abbreโ€
                  viations.

     ๐˜‚๐—ป๐—ฑ๐—ฒ๐—ณ๐—ถ๐—ป๐—ฒ(nฬฒaฬฒmฬฒeฬฒ1ฬฒ, .ฬฒ.ฬฒ.ฬฒ)
                  Removes the definition for the macros specified by its
                  arguments.

     ๐˜‚๐—ป๐—ฑ๐—ถ๐˜ƒ๐—ฒ๐—ฟ๐˜(aฬฒrฬฒgฬฒ, .ฬฒ.ฬฒ.ฬฒ)
                  Flushes the named output queues (or all queues if no
                  arguments).

     ๐˜‚๐—ป๐—ถ๐˜…         A pre-defined macro for testing the OS platform.

     __๐—น๐—ถ๐—ป๐—ฒ__     Returns the current file's line number.

     __๐—ณ๐—ถ๐—น๐—ฒ__     Returns the current file's name.

๐„๐—๐ˆ๐“ ๐’๐“๐€๐“๐”๐’
     The ๐—บ๐Ÿฐ utility exits 0 on success, and >0 if an error occurs.

     But note that the ๐—บ๐Ÿฐ๐—ฒ๐˜…๐—ถ๐˜ macro can modify the exit status, as can
     the -๐„ flag.

๐’๐“๐€๐๐ƒ๐€๐‘๐ƒ๐’
     The ๐—บ๐Ÿฐ utility is compliant with the IEEE Std 1003.1-2008
     (โ€œPOSIX.1โ€) specification.

     The flags [-๐—ฑ๐„๐—ด๐ˆ๐๐—ผ๐˜] and the macros ๐—ฏ๐˜‚๐—ถ๐—น๐˜๐—ถ๐—ป, ๐—ฒ๐˜€๐˜†๐˜€๐—ฐ๐—บ๐—ฑ, ๐—ฒ๐˜…๐—ฝ๐—ฟ, ๐—ณ๐—ผ๐—ฟ๐—บ๐—ฎ๐˜,
     ๐—ถ๐—ป๐—ฑ๐—ถ๐—ฟ, ๐—ฝ๐—ฎ๐˜€๐˜๐—ฒ, ๐—ฝ๐—ฎ๐˜๐˜€๐˜‚๐—ฏ๐˜€๐˜, ๐—ฟ๐—ฒ๐—ด๐—ฒ๐˜…๐—ฝ, ๐˜€๐—ฝ๐—ฎ๐˜€๐˜๐—ฒ, ๐˜‚๐—ป๐—ถ๐˜…, __๐—น๐—ถ๐—ป๐—ฒ__, and
     __๐—ณ๐—ถ๐—น๐—ฒ__ are extensions to that specification.

     ๐—บ๐—ฎ๐—ธ๐—ฒ๐˜๐—ฒ๐—บ๐—ฝ is not supposed to be a synonym for ๐—บ๐—ธ๐˜€๐˜๐—ฒ๐—บ๐—ฝ, but instead
     to be an insecure temporary file name creation function.  It is
     marked by IEEE Std 1003.1-2008 (โ€œPOSIX.1โ€) as being obsolescent and
     should not be used if portability is a concern.

     The output format of ๐˜๐—ฟ๐—ฎ๐—ฐ๐—ฒ๐—ผ๐—ป and ๐—ฑ๐˜‚๐—บ๐—ฝ๐—ฑ๐—ฒ๐—ณ are not specified in any
     standard, are likely to change and should not be relied upon.  The
     current format of tracing is closely modelled on ๐—ด๐—ป๐˜‚-๐—บ๐Ÿฐ, to allow
     ๐—ฎ๐˜‚๐˜๐—ผ๐—ฐ๐—ผ๐—ป๐—ณ to work.

     The built-ins ๐—ฝ๐˜‚๐˜€๐—ต๐—ฑ๐—ฒ๐—ณ and ๐—ฝ๐—ผ๐—ฝ๐—ฑ๐—ฒ๐—ณ handle macro definitions as a
     stack.  However, ๐—ฑ๐—ฒ๐—ณ๐—ถ๐—ป๐—ฒ interacts with the stack in an undefined
     way.  In this implementation, ๐—ฑ๐—ฒ๐—ณ๐—ถ๐—ป๐—ฒ replaces the top-most definiโ€
     tion only.  Other implementations may erase all definitions on the
     stack instead.

     All built-ins do expand without arguments in many other ๐—บ๐Ÿฐ.

     Many other ๐—บ๐Ÿฐ have dire size limitations with respect to buffer
     sizes.

๐€๐”๐“๐‡๐Ž๐‘๐’
     Ozan Yigit <oฬฒzฬฒ@ฬฒsฬฒiฬฒsฬฒ.ฬฒyฬฒoฬฒrฬฒkฬฒuฬฒ.ฬฒcฬฒaฬฒ> and Richard A. O'Keefe
     <oฬฒkฬฒ@ฬฒgฬฒoฬฒaฬฒnฬฒnฬฒaฬฒ.ฬฒcฬฒsฬฒ.ฬฒrฬฒmฬฒiฬฒtฬฒ.ฬฒOฬฒZฬฒ.ฬฒAฬฒUฬฒ>.

     GNU-m4 compatibility extensions by Marc Espie
     <eฬฒsฬฒpฬฒiฬฒeฬฒ@ฬฒcฬฒvฬฒsฬฒ.ฬฒoฬฒpฬฒeฬฒnฬฒbฬฒsฬฒdฬฒ.ฬฒoฬฒrฬฒgฬฒ>.

COSMOPOLITAN                       June 15, 2017                           BSD