poke-elf 1.0 released

2024-03-30 Thread Jose E. Marchesi


I am happy to announce the first release of poke-elf, version 1.0.

The tarball poke-elf-1.0.tar.gz is now available at
https://ftp.gnu.org/gnu/poke/poke-elf-1.0.tar.gz.

  poke-elf (https://jemarch.net/poke-elf) is a full-fledged GNU poke
  pickle for editing ELF object files, executables, shared libraries and
  core dumps.  It supports many architectures and extensions.

  This pickle is part of the GNU poke project.

  GNU poke (https://jemarch.net/poke) is an interactive, extensible
  editor for binary data.  Not limited to editing basic entities such
  as bits and bytes, it provides a full-fledged procedural,
  interactive programming language designed to describe data
  structures and to operate on them.

Please send us comments, suggestions, bug reports, *patches*,
questions, complaints, bitcoins, or whatever, to poke-de...@gnu.org.

Happy ELF poking!

--
Jose E. Marchesi
Frankfurt am Main
30 March 2024



GNU poke 4.0 released

2024-03-30 Thread Jose E. Marchesi


I am happy to announce a new major release of GNU poke, version 4.0.

This release is the result of a year of development.  A lot of things
have changed and improved with respect to the 3.x series; we have
fixed many bugs and added quite a lot of new exciting and useful
features.  See below for a description of many of them.

The tarball poke-4.0.tar.gz is now available at
https://ftp.gnu.org/gnu/poke/poke-4.0.tar.gz.

  GNU poke (http://www.jemarch.net/poke) is an interactive, extensible
  editor for binary data.  Not limited to editing basic entities such
  as bits and bytes, it provides a full-fledged procedural,
  interactive programming language designed to describe data
  structures and to operate on them.

Thanks to the people who contributed with code and/or documentation to
this release.

Once again, our special thanks to Bruno Haible for his invaluable
advise and his help in throughfully testing this new release in many
different platforms and configurations.

What is new in this release:

User interface updates
==

  - The `dump' command now accepts an argument :val.  This argument is
a mapped value, and makes `dump' to dump the bytes corresponding
to the value, using colors for the different fields.  This command
is useful in order to get a visual representation of the
constituents of the value and their corresponding bytes.

  - It is now possible to compare Poke values of type `any' using the
equality and inequality operators == and !=.

  - GNU poke now acknowledges the POKE_LOAD_PATH environment variable
whose value, if defined, gets prepended to the load_path when poke
starts.

  - When the poke compiler finds an error in an inline asm template it
now emits a proper parse error.

  - The poked program now recognizes the -S command line option
properly.

  - The poked program now uses a socket in /tmp/poked-UID.pic where
UID is the user ID of the effective user running the program.
This is better than the previous behavior of always using
/tmp/poked.ipc, since it allows for several poked instances to be
run in the system.

  - The poke program now allows referring to IO spaces by name/handler
with $, where STR is a non-ambiguous substring of some open
IO space handler.  Examples are $ and $<*0*>, which could
be referred to as $ and $<0> respectively.

  - A new utility called pokefmt has been added to the GNU poke
distribution, which implements a simple template system.  See the
manual for details on how to use this utility.

  - The poke prompt can now be customized by the user.  This is done
by re-defining a function called pk_prompt.  The default value for
this function just returns "(poke)", but it can be made as complex
as desired.

  - The poke prompt can now be styled using the `prompt' styling
class.

  - The new dot-command `.compiler ast EXPR' will compile EXPR and
then print its abstract syntax tree (AST).  This is useful for
debugging the compiler.

  - The dot-command `.info type' now accepts both expressions or Poke
type specifiers as argument.  In the first case it prints
information about the type of the value to which the expression
evaluates.  In the second case it prints information about the
type denoted by the given specifier.

  - The dot-command `.info type' no longer shows field pretty-printer
methods, nor anonymous fields in the list of methods and fields.

  - A dot-command `.mmap FILENAME, BASE, SIZE' is now available to
poke at devices and files that require mmap.  This is the case of
many devices provided by kernel drivers.

Poke Language updates
=

  - The Poke language now supports using the `t' and `T' suffixes to
denote the uint<1> (bit) values 0t and 1t.

  - It is now possible to specify pretty-printers for particular
fields in struct type definitions, rather than having to
pretty-print the whole value.  To pretty-print a field FNAME, just
define the pretty-printer as a method called _print_FNAME.

  - A new immutable variable pk_version is made available, that
contains a string with the version of the running poke.

  - A new struct type Pk_Version is defined, that denotes the version
of a GNU poke system, or of a pickle.  Accompanying functions
pk_version_parse and pk_vercmp are available for parsing
PK_Version values from strings and for comparing versions,
respectively.  The version comparing function accepts either
Pk_Version or string formatted versions indistinctly.

  - The new built-in function `rtrace' prints out the current call
stack in the PVM, a function name in each line.  It makes use of
the new PVM instruction of the same name.

  - The new built-in function `iosearch' allows searching for IO
spaces by name/handler from Poke programs.

Standard Poke Library updates
=

  - The new built-in `openmmap