gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnunet-scheme] branch master updated (2b653c6 -> bf87f7d)


From: gnunet
Subject: [gnunet-scheme] branch master updated (2b653c6 -> bf87f7d)
Date: Mon, 05 Sep 2022 21:33:52 +0200

This is an automated email from the git hooks/post-receive script.

maxime-devos pushed a change to branch master
in repository gnunet-scheme.

    from 2b653c6  doc: Document maybe-send-control-message!.
     new b1bcdc8  doc: Correct maybe-send-control-message! documentation.
     new 3b1a407  doc: Document maybe-send-control-message!*.
     new c402edd  hat-let: Port to Racket Scheme.
     new 9381d0d  Add infrastructure for Racketifying source code.
     new ce2e9ce  Add ;#!r6rs comments.
     new fe4e23e  data-string: Port to Racket.
     new e36c503  Makefile.am: Enable --r7rs, for the r7rs-symbols.
     new 1930e62  Use r7rs-symbols, for compatibility with Racket.
     new e3c7d7e  SCM_LOG_DRIVER.
     new 8b76bb3  tests/form: Use Unicode escapes instead of the unportable 
\x....
     new ffc4f25  Don't mutate source files, instead make new ones.
     new 5ead9f9  Makefile.am: Reuse old .ss when still good.
     new 722f55d  doc: Abandon the Racket port for now because of complications.
     new b54bc4e  Merge branch 'racket-port'
     new dbc04e7  Update version number.
     new bf87f7d  Update documentation indices.

The 16 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .gitignore                                    |   3 +-
 Makefile.am                                   |  13 +-
 doc/contributing.tm                           |  27 +-
 doc/scheme-gnunet.tm                          | 565 ++++++++++++++++----------
 doc/service-communication.tm                  |   9 +-
 gnu/extractor/enum.scm                        |   1 +
 gnu/gnunet/block.scm                          |   1 +
 gnu/gnunet/cadet/client.scm                   |  17 +-
 gnu/gnunet/cadet/network.scm                  |  17 +-
 gnu/gnunet/cadet/struct.scm                   |   1 +
 gnu/gnunet/concurrency/lost-and-found.scm     |   3 +-
 gnu/gnunet/concurrency/repeated-condition.scm |   3 +-
 gnu/gnunet/concurrency/update.scm             |   1 +
 gnu/gnunet/config/db.scm                      |   1 +
 gnu/gnunet/config/expand.scm                  |  23 +-
 gnu/gnunet/config/fs.scm                      |   5 +-
 gnu/gnunet/config/parser.scm                  |  93 ++---
 gnu/gnunet/config/value-parser.scm            |   1 +
 gnu/gnunet/crypto.scm                         |   1 +
 gnu/gnunet/crypto/struct.scm                  |   1 +
 gnu/gnunet/data-string.scm                    |   4 +-
 gnu/gnunet/dht/client.scm                     |  17 +-
 gnu/gnunet/dht/network.scm                    |  17 +-
 gnu/gnunet/dht/struct.scm                     |   1 +
 gnu/gnunet/directory.scm                      |   1 +
 gnu/gnunet/fs-uri.scm                         |   1 +
 gnu/gnunet/hashcode-ascii.scm                 |   1 +
 gnu/gnunet/hashcode.scm                       |   1 +
 gnu/gnunet/hashcode/struct.scm                |   1 +
 gnu/gnunet/icmp/struct.scm                    |   1 +
 gnu/gnunet/message/protocols.scm              |   1 +
 gnu/gnunet/metadata.scm                       |   1 +
 gnu/gnunet/metadata/struct.scm                |   1 +
 gnu/gnunet/mq-impl/stream.scm                 |   1 +
 gnu/gnunet/mq.scm                             |   3 +-
 gnu/gnunet/mq/envelope.scm                    |   1 +
 gnu/gnunet/mq/error-reporting.scm             |   1 +
 gnu/gnunet/mq/handler.scm                     |   1 +
 gnu/gnunet/mq/prio-prefs.scm                  |   1 +
 gnu/gnunet/mq/prio-prefs2.scm                 |   1 +
 gnu/gnunet/netstruct/procedural.scm           |   1 +
 gnu/gnunet/netstruct/syntactic.scm            |   1 +
 gnu/gnunet/nse/client.scm                     |   1 +
 gnu/gnunet/nse/struct.scm                     |   1 +
 gnu/gnunet/scripts/download-store.scm         |   1 +
 gnu/gnunet/scripts/guix-stuff.scm             |   1 +
 gnu/gnunet/scripts/publish-store.scm          |   1 +
 gnu/gnunet/server.scm                         |   1 +
 gnu/gnunet/util/cmsg.scm                      |   1 +
 gnu/gnunet/util/struct.scm                    |   1 +
 gnu/gnunet/util/time.scm                      |   1 +
 gnu/gnunet/utils/bv-slice.scm                 |   1 +
 gnu/gnunet/utils/cut-syntax.scm               |   1 +
 gnu/gnunet/utils/decompress.scm               |   1 +
 gnu/gnunet/utils/hat-let.scm                  | 120 +++---
 gnu/gnunet/utils/netstruct.scm                |   1 +
 gnu/gnunet/utils/platform-enum.scm            |   1 +
 gnu/gnunet/utils/tokeniser.scm                |   1 +
 guix.scm                                      |   2 +-
 tests/config-expand.scm                       |  28 +-
 tests/config-parser.scm                       | 120 +++---
 tests/form.scm                                |   4 +-
 tests/lost-and-found.scm                      |   2 +-
 tests/network-size.scm                        |  10 +-
 tests/utils.scm                               |  16 +-
 65 files changed, 705 insertions(+), 457 deletions(-)

diff --git a/.gitignore b/.gitignore
index d3e08a3..0965466 100644
--- a/.gitignore
+++ b/.gitignore
@@ -31,4 +31,5 @@
 /doc/scheme-gnunet-*.png
 /.cache
 /.TeXmacs
-/.dbus
\ No newline at end of file
+/.dbus
+*.ss
\ No newline at end of file
diff --git a/Makefile.am b/Makefile.am
index 3a643ea..f2a6bb1 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -101,6 +101,7 @@ modules = \
   \
   gnu/gnunet/server.scm
 
+SS_modules = $(modules:%.scm=%.ss)
 GOBJECTS = $(modules:%.scm=%.go)
 nobase_dist_guilesite_DATA = $(modules) gnu/gnunet/config/default.conf
 
@@ -157,13 +158,16 @@ nobase_nodist_guilesiteccache_DATA = $(GOBJECTS)
 # in Guix does not have .scm files (but it does in Guile).
 # XXX: Use the C locale for when Guile lacks
 # 
<https://git.sv.gnu.org/cgit/guile.git/commit/?h=stable-2.0&id=e2c6bf3866d1186c60bacfbd4fe5037087ee5e3f>.
+#
+# Use --r7rs to allow |foo bar| symbols, as #{foo bar}# is non-standard and
+# not portable to Racket Scheme.
 %.go: %.scm
        $(AM_V_GUILEC)$(MKDIR_P) "`dirname "$@"`" ;                     \
        $(AM_V_P) && out=1 || out=- ;                                   \
        LC_ALL=C                                                        \
        builddir="$(top_builddir)"                                      \
        GUILE_AUTO_COMPILE=0                                            \
-       $(GUILD) compile -O2 --target="$(host)"                         \
+       $(GUILD) compile -O2 --target="$(host)" --r7rs                  \
          -L "$(top_srcdir)"                                            \
          -Wformat -Wunbound-variable -Warity-mismatch                  \
          -o "$@" "$<" >&$$out
@@ -178,7 +182,7 @@ TESTS =
 # sent’ requires optimisation to avoid keeping references.  Set XDG_CACHE_HOME
 # because $HOME may be unwritable and to reduce clutter.
 SCM_LOG_DRIVER = \
-  env XDG_CACHE_HOME="$(abs_builddir)" $(GUILE) --auto-compile -L \
+  env XDG_CACHE_HOME="$(abs_builddir)" $(GUILE) --auto-compile --r7rs -L \
     $(top_srcdir) -C $(top_builddir) -e main \
     $(top_srcdir)/build-aux/test-driver.scm
 
@@ -247,3 +251,8 @@ nodist_pdf_DATA = doc/scheme-gnunet.pdf
 
 clean-local:
        rm -f $(GOBJECTS)
+
+# Convert the code from Guile Scheme into Racket Scheme
+make-racket: $(SS_modules)
+%.ss: %.scm
+       sed -e '1s/^;#!r6rs/#!r6rs/' "$<" > "$@"
diff --git a/doc/contributing.tm b/doc/contributing.tm
index 0a8863e..740bcbf 100644
--- a/doc/contributing.tm
+++ b/doc/contributing.tm
@@ -18,7 +18,15 @@
 
     <item><hlink|GNU Guile|https://www.gnu.org/software/guile/> (at least
     version 3), with the patch from 
<slink|https://debbugs.gnu.org/cgi/bugreport.cgi?bug=49623>
-    applied
+    applied <todo|make optional, choice between Racket and Guile>
+
+    <item>Optionally, Racket, to build the work-in-progress Racket port.
+
+    <\warning>
+      Racket is currently unsupported, at it only recognises <scm|\|symbol\|>
+      in Racket mode and not in R6RS mode. Once the \<#2018\>r7rs' Racket
+      package is packaged in distributions, the porting can continue.
+    </warning>
 
     <item><hlink|Purely Functional Data Structures in Scheme
     (pfds)|https://github.com/ijp/pfds/>
@@ -45,7 +53,9 @@
 
     ./configure
 
-    make
+    make make-racket # only when using Racket
+
+    make # only when using Guile Scheme
 
     make check
   </shell-code>
@@ -58,6 +68,8 @@
 
   <\shell-code>
     $ guile -L . -C . -l examples/nse-web.scm
+
+    \ \ <todo|TODO racket equivalent>
   </shell-code>
 
   <subsection|Authenticating new source code><index|authentication>
@@ -116,6 +128,17 @@
   <verbatim|SCM_TESTS> in <verbatim|Makefile.am> and use <scm|srfi
   :64>.<space|1em>To run the test suite, run <verbatim|make check>.
 
+  <section|Writing portable Scheme code>
+
+  Scheme-GNUnet aims to be portable between Schemes. It primarily supports
+  Guile Scheme, but also supports Racket Scheme. However, the two different
+  Schemes are incompatible. One of these is that Racket expects Scheme files
+  to use <verbatim|.ss> as file extension, whereas Guile uses
+  <verbatim|.scm>.. Another incompatibility is that Racket expects the Scheme
+  files to start with <verbatim|#!r6rs>. To smooth over these two
+  differences, <code*|make make-racket> generates <verbatim|.ss> from the
+  <verbatim|.scm> files.
+
   <section|Contact>
 
   Scheme-GNUnet is currently maintained on NotABug:
diff --git a/doc/scheme-gnunet.tm b/doc/scheme-gnunet.tm
index ad5b4a1..23fe51c 100644
--- a/doc/scheme-gnunet.tm
+++ b/doc/scheme-gnunet.tm
@@ -3,7 +3,7 @@
 <style|<tuple|tmmanual|british|doc>>
 
 <\body>
-  <doc-data|<doc-title|Scheme-GNUnet (0.2)
+  <doc-data|<doc-title|Scheme-GNUnet (0.3)
   manual>|<doc-author|<author-data|<author-name|Maxime
   Devos>|<author-email|maximedevos@telenet.be>>>>
 
@@ -33,171 +33,235 @@
     1.2.<space|2spc>Writing tests 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
     <no-break><pageref|auto-6>
 
-    1.3.<space|2spc>Contact 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+    1.3.<space|2spc>Writing portable Scheme code
+    
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
     <no-break><pageref|auto-8>
 
-    1.4.<space|2spc>License 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+    1.4.<space|2spc>Contact 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
     <no-break><pageref|auto-9>
 
+    1.5.<space|2spc>License 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+    <no-break><pageref|auto-10>
+
     
<vspace*|1fn><with|font-series|bold|math-font-series|bold|font-shape|small-caps|2.<space|2spc>Application
     guide> 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <pageref|auto-10><vspace|0.5fn>
+    <pageref|auto-11><vspace|0.5fn>
 
     
<vspace*|1fn><with|font-series|bold|math-font-series|bold|font-shape|small-caps|3.<space|2spc>Concurrency>
     
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <pageref|auto-11><vspace|0.5fn>
+    <pageref|auto-12><vspace|0.5fn>
 
     <with|par-left|4tab|Repeated conditions
     
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <no-break><pageref|auto-12><vspace|0.15fn>>
+    <no-break><pageref|auto-13><vspace|0.15fn>>
+
+    3.1.<space|2spc>Waiting for unreachability of objects
+    
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+    <no-break><pageref|auto-14>
 
     
<vspace*|1fn><with|font-series|bold|math-font-series|bold|font-shape|small-caps|4.<space|2spc>Configuration>
     
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <pageref|auto-13><vspace|0.5fn>
+    <pageref|auto-20><vspace|0.5fn>
 
     4.1.<space|2spc>Locating configuration files
     
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <no-break><pageref|auto-22>
+    <no-break><pageref|auto-29>
 
     4.2.<space|2spc>Loading configuration files
     
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <no-break><pageref|auto-30>
+    <no-break><pageref|auto-37>
 
     
<vspace*|1fn><with|font-series|bold|math-font-series|bold|font-shape|small-caps|5.<space|2spc>Manipulation
     of network structures> 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <pageref|auto-35><vspace|0.5fn>
+    <pageref|auto-42><vspace|0.5fn>
 
     5.1.<space|2spc>Documentation 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <no-break><pageref|auto-41>
+    <no-break><pageref|auto-48>
 
     5.2.<space|2spc>Reading and writing 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <no-break><pageref|auto-45>
+    <no-break><pageref|auto-53>
 
     5.3.<space|2spc>Primitive types 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <no-break><pageref|auto-50>
+    <no-break><pageref|auto-58>
 
     5.4.<space|2spc>Packing 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <no-break><pageref|auto-51>
+    <no-break><pageref|auto-59>
+
+    
<vspace*|1fn><with|font-series|bold|math-font-series|bold|font-shape|small-caps|6.<space|2spc>Typeclasses
+    \U common patterns> 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+    <pageref|auto-60><vspace|0.5fn>
+
+    6.1.<space|2spc>Server objects 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+    <no-break><pageref|auto-61>
+
+    6.2.<space|2spc>Server-associated objects
+    
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+    <no-break><pageref|auto-66>
 
-    
<vspace*|1fn><with|font-series|bold|math-font-series|bold|font-shape|small-caps|6.<space|2spc>Communication
+    
<vspace*|1fn><with|font-series|bold|math-font-series|bold|font-shape|small-caps|7.<space|2spc>Communication
     with services> 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <pageref|auto-52><vspace|0.5fn>
+    <pageref|auto-67><vspace|0.5fn>
 
-    6.1.<space|2spc>Asynchronuously connecting
+    7.1.<space|2spc>Asynchronuously connecting
     
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <no-break><pageref|auto-56>
+    <no-break><pageref|auto-72>
 
-    6.2.<space|2spc>Message handler 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <no-break><pageref|auto-60>
+    7.2.<space|2spc>Message handler 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+    <no-break><pageref|auto-76>
 
-    6.3.<space|2spc>Message type database
+    7.3.<space|2spc>Message type database
     
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <no-break><pageref|auto-68>
+    <no-break><pageref|auto-84>
 
-    6.4.<space|2spc>Error handler 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <no-break><pageref|auto-74>
+    7.4.<space|2spc>Sending messages 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+    <no-break><pageref|auto-90>
+
+    7.5.<space|2spc>Error handler 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+    <no-break><pageref|auto-92>
 
-    6.5.<space|2spc>Ordering of injected errors and messages and sent
+    7.6.<space|2spc>Ordering of injected errors and messages and sent
     messages 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <no-break><pageref|auto-85>
+    <no-break><pageref|auto-103>
 
-    6.6.<space|2spc>Disconnecting 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <no-break><pageref|auto-86>
+    7.7.<space|2spc>Disconnecting 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+    <no-break><pageref|auto-104>
 
-    6.7.<space|2spc>Error reporting 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <no-break><pageref|auto-90>
+    7.8.<space|2spc>Error reporting 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+    <no-break><pageref|auto-108>
+
+    7.9.<space|2spc>Testing service code 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+    <no-break><pageref|auto-114>
+
+    7.10.<space|2spc>Writing service communication code
+    
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+    <no-break><pageref|auto-115>
 
-    
<vspace*|1fn><with|font-series|bold|math-font-series|bold|font-shape|small-caps|7.<space|2spc>Estimation
+    
<vspace*|1fn><with|font-series|bold|math-font-series|bold|font-shape|small-caps|8.<space|2spc>Estimation
     of the size of the network> 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <pageref|auto-96><vspace|0.5fn>
+    <pageref|auto-122><vspace|0.5fn>
 
-    
<vspace*|1fn><with|font-series|bold|math-font-series|bold|font-shape|small-caps|8.<space|2spc>Accessing
+    
<vspace*|1fn><with|font-series|bold|math-font-series|bold|font-shape|small-caps|9.<space|2spc>Accessing
     the DHT> 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <pageref|auto-111><vspace|0.5fn>
+    <pageref|auto-138><vspace|0.5fn>
 
-    8.1.<space|2spc>Data in the DHT 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <no-break><pageref|auto-120>
+    9.1.<space|2spc>Data in the DHT 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+    <no-break><pageref|auto-147>
 
-    8.2.<space|2spc>Accessing data in the DHT
+    9.2.<space|2spc>Accessing data in the DHT
     
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <no-break><pageref|auto-152>
+    <no-break><pageref|auto-179>
 
-    8.3.<space|2spc>Constructing and analysing network messages
+    9.3.<space|2spc>Constructing and analysing network messages
     
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <no-break><pageref|auto-162>
+    <no-break><pageref|auto-190>
 
-    8.4.<space|2spc>How to handle invalid data
+    9.4.<space|2spc>How to handle invalid data
     
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <no-break><pageref|auto-178>
+    <no-break><pageref|auto-208>
 
-    8.5.<space|2spc>Monitoring: spying on what other applications and peers
+    9.5.<space|2spc>Monitoring: spying on what other applications and peers
     are doing 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <no-break><pageref|auto-179>
+    <no-break><pageref|auto-209>
+
+    
<vspace*|1fn><with|font-series|bold|math-font-series|bold|font-shape|small-caps|10.<space|2spc>Communication
+    between peers> 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+    <pageref|auto-210><vspace|0.5fn>
 
-    
<vspace*|1fn><with|font-series|bold|math-font-series|bold|font-shape|small-caps|9.<space|2spc>Cryptography>
+    10.1.<space|2spc>Qualities and limitations \V avoiding reinventing the
+    wheel 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+    <no-break><pageref|auto-216>
+
+    10.2.<space|2spc>Addresses 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+    <no-break><pageref|auto-218>
+
+    10.3.<space|2spc>Listening at an address
+    
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+    <no-break><pageref|auto-221>
+
+    10.4.<space|2spc>Connecting to an address
+    
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+    <no-break><pageref|auto-222>
+
+    10.5.<space|2spc>Performing I/O \U GNUnet style
+    
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+    <no-break><pageref|auto-226>
+
+    10.6.<space|2spc>Performing I/O \U BSD style
+    
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+    <no-break><pageref|auto-227>
+
+    10.7.<space|2spc>BSD socket integration
     
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <pageref|auto-180><vspace|0.5fn>
+    <no-break><pageref|auto-228>
+
+    10.8.<space|2spc>Constructing and analysing network messages
+    
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+    <no-break><pageref|auto-229>
+
+    
<vspace*|1fn><with|font-series|bold|math-font-series|bold|font-shape|small-caps|11.<space|2spc>Miscellaneous>
+    
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+    <pageref|auto-238><vspace|0.5fn>
 
     
<vspace*|1fn><with|font-series|bold|math-font-series|bold|font-shape|small-caps|Appendix
     A.<space|2spc>GNU Free Documentation License>
     
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <pageref|auto-184><vspace|0.5fn>
+    <pageref|auto-251><vspace|0.5fn>
 
     0. <with|font-shape|small-caps|Preamble>
     
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <no-break><pageref|auto-185>
+    <no-break><pageref|auto-252>
 
     1. <with|font-shape|small-caps|Applicability and definitions>
     
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <no-break><pageref|auto-186>
+    <no-break><pageref|auto-253>
 
     2. <with|font-shape|small-caps|Verbatim copying>
     
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <no-break><pageref|auto-187>
+    <no-break><pageref|auto-254>
 
     3. <with|font-shape|small-caps|Copying in quantity>
     
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <no-break><pageref|auto-188>
+    <no-break><pageref|auto-255>
 
     4. <with|font-shape|small-caps|Modifications>
     
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <no-break><pageref|auto-189>
+    <no-break><pageref|auto-256>
 
     5. <with|font-shape|small-caps|Combining documents>
     
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <no-break><pageref|auto-190>
+    <no-break><pageref|auto-257>
 
     6. <with|font-shape|small-caps|Collections of documents>
     
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <no-break><pageref|auto-191>
+    <no-break><pageref|auto-258>
 
     7. <with|font-shape|small-caps|Aggregation with independent works>
     
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <no-break><pageref|auto-192>
+    <no-break><pageref|auto-259>
 
     8. <with|font-shape|small-caps|Translation>
     
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <no-break><pageref|auto-193>
+    <no-break><pageref|auto-260>
 
     9. <with|font-shape|small-caps|Termination>
     
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <no-break><pageref|auto-194>
+    <no-break><pageref|auto-261>
 
     10. <with|font-shape|small-caps|Future revisions of this license>
     
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <no-break><pageref|auto-195>
+    <no-break><pageref|auto-262>
 
     11. <with|font-shape|small-caps|Relicensing>
     
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <no-break><pageref|auto-196>
+    <no-break><pageref|auto-263>
 
     <with|font-shape|small-caps|Addendum>: How to use this License for your
     documents 
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <no-break><pageref|auto-197>
+    <no-break><pageref|auto-264>
 
     
<vspace*|1fn><with|font-series|bold|math-font-series|bold|font-shape|small-caps|Index>
     
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
-    <pageref|auto-198><vspace|0.5fn>
+    <pageref|auto-265><vspace|0.5fn>
   </table-of-contents>
 
   <chapter|Installation and contributing guide>
@@ -287,301 +351,392 @@
   <include|fdl.tm>
 
   <\the-index|idx>
-    <index+1|analyse-client-get|<pageref|auto-172>>
+    <index+1|analyse-client-get|<pageref|auto-201>>
 
-    <index+1|analyse-client-put|<pageref|auto-174>>
+    <index+1|analyse-client-get-stop|<pageref|auto-203>>
 
-    <index+1|analyse-client-result|<pageref|auto-176>>
+    <index+1|analyse-client-put|<pageref|auto-204>>
 
-    <index+1|analysis procedures|<pageref|auto-164>>
+    <index+1|analyse-client-result|<pageref|auto-206>>
+
+    <index+1|analysis procedures|<pageref|auto-192>>
 
     <index+1|authentication|<pageref|auto-5>>
 
-    <index+1|close-queue!|<pageref|auto-88>>
+    <index+1|CADET address|<pageref|auto-220>>
+
+    <index+1|CADET|<pageref|auto-211>>
+
+    <index+1|channel-message-queue|<pageref|auto-224>>
+
+    <index+1|close-channel!|<pageref|auto-225>>
+
+    <index+1|close-queue!|<pageref|auto-106>>
 
-    <index+1|~/.config/gnunet.conf|<pageref|auto-27>>
+    <index+1|~/.config/gnunet.conf|<pageref|auto-34>>
 
-    <index+1|configuration|<pageref|auto-14>>
+    <index+1|configuration|<pageref|auto-21>>
 
-    <index+2|configuration|system|<pageref|auto-24>>
+    <index+2|configuration|system|<pageref|auto-31>>
 
-    <index+2|configuration|user|<pageref|auto-23>>
+    <index+2|configuration|user|<pageref|auto-30>>
 
-    <index+1*|connect>
+    <index+1|connect|<pageref|auto-63>>
 
-    <index+2|connect|DHT|<pageref|auto-118>>
+    <index+2|connect|CADET|<pageref|auto-213>>
 
-    <index+2|connect|NSE|<pageref|auto-100>>
+    <index+2|connect|DHT|<pageref|auto-143>>
 
-    <index+1|connect/fibers|<pageref|auto-54>>
+    <index+2|connect|NSE|<pageref|auto-126>>
 
-    <index+1|connecting to services|<pageref|auto-57>>
+    <index+1|connect/fibers|<pageref|auto-69>>
 
-    <index+1|connection:connected|<pageref|auto-59>, <pageref|auto-78>>
+    <index+1|connecting to services|<pageref|auto-73>>
 
-    <index+1|connection:interrupted|<pageref|auto-79>, <pageref|auto-89>>
+    <index+1|connection:connected|<pageref|auto-75>, <pageref|auto-96>>
 
-    <index+1|construct-client-get|<pageref|auto-166>>
+    <index+1|connection:interrupted|<pageref|auto-97>, <pageref|auto-107>>
 
-    <index+1|construct-client-put|<pageref|auto-168>>
+    <index+1|construct-client-get|<pageref|auto-194>>
 
-    <index+1|construct-client-result|<pageref|auto-170>>
+    <index+1|construct-client-get-stop|<pageref|auto-196>>
 
-    <index+1|construction procedures|<pageref|auto-165>>
+    <index+1|construct-client-put|<pageref|auto-197>>
 
-    <index+1|copy-datum|<pageref|auto-159>>
+    <index+1|construct-client-result|<pageref|auto-199>>
 
-    <index+1|copy-insertion|<pageref|auto-160>>
+    <index+1|construct-close-local-port|<pageref|auto-232>>
 
-    <index+1|copy-query|<pageref|auto-158>>
+    <index+1|construction procedures|<pageref|auto-193>>
 
-    <index+1|copy-search-result|<pageref|auto-161>>
+    <index+1|construct-local-acknowledgement|<pageref|auto-236>>
 
-    <index+1|datum?|<pageref|auto-129>>
+    <index+1|construct-local-data|<pageref|auto-234>>
 
-    <index+1|datum object|<pageref|auto-121>>
+    <index+1|construct-open-local-port|<pageref|auto-230>>
 
-    <index+1|datum-expiration|<pageref|auto-128>>
+    <index+1|control channel|<pageref|auto-116>>
 
-    <index+1|datum-\<gtr\>insertion|<pageref|auto-132>>
+    <index+1|copy-datum|<pageref|auto-187>>
 
-    <index+1|datum-\<gtr\>search-result|<pageref|auto-141>>
+    <index+1|copy-insertion|<pageref|auto-188>>
 
-    <index+1|datum-key|<pageref|auto-126>>
+    <index+1|copy-query|<pageref|auto-186>>
 
-    <index+1|datum-value|<pageref|auto-127>>
+    <index+1|copy-search-result|<pageref|auto-189>>
 
-    <index+1|define-type|<pageref|auto-38>>
+    <index+1|data-\<gtr\>string|<pageref|auto-247>>
 
-    <index+1|DHT server object|<pageref|auto-116>>
+    <index+1|datum?|<pageref|auto-156>>
 
-    <index+1|DHT|<pageref|auto-113>>
+    <index+1|datum object|<pageref|auto-148>>
 
-    <index+1|/dht:path-element|<pageref|auto-144>>
+    <index+1|datum-expiration|<pageref|auto-155>>
 
-    <index+1*|disconnect!>
+    <index+1|datum-\<gtr\>insertion|<pageref|auto-159>>
 
-    <index+2|disconnect!|DHT|<pageref|auto-119>>
+    <index+1|datum-\<gtr\>search-result|<pageref|auto-168>>
 
-    <index+2|disconnect!|NSE|<pageref|auto-106>>
+    <index+1|datum-key|<pageref|auto-153>>
 
-    <index+1|disconnecting|<pageref|auto-87>>
+    <index+1|datum-value|<pageref|auto-154>>
 
-    <index+1|distributed hash table|<pageref|auto-112>>
+    <index+1|define-type|<pageref|auto-45>>
 
-    <index+1|documentation|<pageref|auto-43>>
+    <index+1|DHT server object|<pageref|auto-145>>
 
-    <index+1|error handler|<pageref|auto-75>>
+    <index+1|DHT|<pageref|auto-140>>
 
-    <index+1|error reporting|<pageref|auto-91>>
+    <index+1|/dht:path-element|<pageref|auto-171>>
 
-    <index+1|error-handler|<pageref|auto-58>>
+    <index+1|disconnect!|<pageref|auto-65>, <pageref|auto-121>>
 
-    <index+1|error-reporter|<pageref|auto-95>>
+    <index+2|disconnect!|CADET|<pageref|auto-215>>
 
-    <index+1|estimate|<pageref|auto-105>>
+    <index+2|disconnect!|DHT|<pageref|auto-144>>
 
-    <index+1|estimate object|<pageref|auto-104>>
+    <index+2|disconnect!|NSE|<pageref|auto-129>, <pageref|auto-133>>
 
-    <index+1|estimate:logarithmic-number-peers|<pageref|auto-107>>
+    <index+1|disconnecting|<pageref|auto-105>>
 
-    <index+1|estimate:number-peeers|<pageref|auto-108>>
+    <index+1|distributed hash table|<pageref|auto-139>>
 
-    <index+1|estimate:standard-deviation|<pageref|auto-110>>
+    <index+1|documentation|<pageref|auto-50>>
 
-    <index+1|estimate:timestamp|<pageref|auto-109>>
+    <index+1|error handler|<pageref|auto-93>>
 
-    <index+1|/etc/gnunet.conf|<pageref|auto-29>>
+    <index+1|error reporting|<pageref|auto-109>>
 
-    <index+1|get path|<pageref|auto-146>>
+    <index+1|error-handler|<pageref|auto-74>>
 
-    <index+1|(gnu extractor enum)|<pageref|auto-72>>
+    <index+1|error-reporter|<pageref|auto-113>>
 
-    <index+1|(gnu gnunet config db)|<pageref|auto-15>>
+    <index+1|estimate|<pageref|auto-132>>
 
-    <index+1|(gnu gnunet config fs)|<pageref|auto-25>>
+    <index+1|estimate object|<pageref|auto-131>>
 
-    <index+1|(gnu gnunet crypto)|<pageref|auto-181>>
+    <index+1|estimate:logarithmic-number-peers|<pageref|auto-134>>
 
-    <index+1|(gnu gnunet dht client)|<pageref|auto-115>>
+    <index+1|estimate:number-peeers|<pageref|auto-135>>
 
-    <index+1|(gnu gnunet dht network)|<pageref|auto-163>>
+    <index+1|estimate:standard-deviation|<pageref|auto-137>>
 
-    <index+1|(gnu gnunet message protocols)|<pageref|auto-70>>
+    <index+1|estimate:timestamp|<pageref|auto-136>>
 
-    <index+1|(gnu gnunet mq error-reporting)|<pageref|auto-92>>
+    <index+1|/etc/gnunet.conf|<pageref|auto-36>>
 
-    <index+1|(gnu gnunet mq-impl stream)|<pageref|auto-55>>
+    <index+1|found|<pageref|auto-17>>
 
-    <index+1|(gnu gnunet nse client)|<pageref|auto-99>>
+    <index+1|get path|<pageref|auto-173>>
+
+    <index+1|(gnu extractor enum)|<pageref|auto-88>>
+
+    <index+1|(gnu gnunet cadet client)|<pageref|auto-212>>
+
+    <index+1|(gnu gnunet concurrency lost-and-found)|<pageref|auto-15>>
+
+    <index+1|(gnu gnunet config db)|<pageref|auto-22>>
+
+    <index+1|(gnu gnunet config fs)|<pageref|auto-32>>
+
+    <index+1|(gnu gnunet crypto)|<pageref|auto-239>>
+
+    <index+1|(gnu gnunet data-string)|<pageref|auto-246>>
+
+    <index+1|(gnu gnunet dht client)|<pageref|auto-142>>
+
+    <index+1|(gnu gnunet dht network)|<pageref|auto-191>>
+
+    <index+1|(gnu gnunet message protocols)|<pageref|auto-86>>
+
+    <index+1|(gnu gnunet mq error-reporting)|<pageref|auto-110>>
+
+    <index+1|(gnu gnunet mq-impl stream)|<pageref|auto-70>>
+
+    <index+1|(gnu gnunet nse client)|<pageref|auto-125>>
+
+    <index+1|GNUNET_STRINGS_data_to_string|<pageref|auto-249>>
+
+    <index+1|GNUNET_STRINGS_string_to_data|<pageref|auto-250>>
 
     <index+1|Guix|<pageref|auto-3>>
 
-    <index+1|handler procedure|<pageref|auto-67>>
+    <index+1|handler procedure|<pageref|auto-83>>
+
+    <index+1|hash-\<gtr\>configuration|<pageref|auto-23>>
+
+    <index+1|hash-key|<pageref|auto-24>>
+
+    <index+1|hash/sha512!|<pageref|auto-240>>
+
+    <index+1|hash/sha512|<pageref|auto-241>>
+
+    <index+1|inject-error!|<pageref|auto-94>>
 
-    <index+1|hash-\<gtr\>configuration|<pageref|auto-16>>
+    <index+1|input:overly-small|<pageref|auto-100>>
 
-    <index+1|hash-key|<pageref|auto-17>>
+    <index+1|input:premature-end-of-file|<pageref|auto-99>>
 
-    <index+1|hash/sha512!|<pageref|auto-182>>
+    <index+1|input:regular-end-of-file|<pageref|auto-98>>
 
-    <index+1|hash/sha512|<pageref|auto-183>>
+    <index+1|inserting data into the DHT|<pageref|auto-181>>
 
-    <index+1|inject-error!|<pageref|auto-76>>
+    <index+1|insertion?|<pageref|auto-162>>
 
-    <index+1|input:overly-small|<pageref|auto-82>>
+    <index+1|insertion object|<pageref|auto-149>>
 
-    <index+1|input:premature-end-of-file|<pageref|auto-81>>
+    <index+1|insertion-desired-replication-level|<pageref|auto-161>>
 
-    <index+1|input:regular-end-of-file|<pageref|auto-80>>
+    <index+1|insertion-\<gtr\>datum|<pageref|auto-160>>
 
-    <index+1|inserting data into the DHT|<pageref|auto-154>>
+    <index+1|interposer|<pageref|auto-81>>
 
-    <index+1|insertion?|<pageref|auto-135>>
+    <index+1|&invalid-public-key-encoding|<pageref|auto-244>>
 
-    <index+1|insertion object|<pageref|auto-122>>
+    <index+1|invalid-public-key-encoding?|<pageref|auto-245>>
 
-    <index+1|insertion-desired-replication-level|<pageref|auto-134>>
+    <index+1|key=?|<pageref|auto-25>>
 
-    <index+1|insertion-\<gtr\>datum|<pageref|auto-133>>
+    <index+1|key|<pageref|auto-95>>
 
-    <index+1|interposer|<pageref|auto-65>>
+    <index+1|\<less\>losable\<gtr\>|<pageref|auto-19>>
 
-    <index+1|key=?|<pageref|auto-18>>
+    <index+1|\<less\>server\<gtr\>|<pageref|auto-119>>
 
-    <index+1|key|<pageref|auto-77>>
+    <index+1|load-configuration|<pageref|auto-41>>
 
-    <index+1|load-configuration|<pageref|auto-34>>
+    <index+1|load-configuration/port!|<pageref|auto-38>>
 
-    <index+1|load-configuration/port!|<pageref|auto-31>>
+    <index+1|locate-system-configuration|<pageref|auto-35>>
 
-    <index+1|locate-system-configuration|<pageref|auto-28>>
+    <index+1|locate-user-configuration|<pageref|auto-33>>
 
-    <index+1|locate-user-configuration|<pageref|auto-26>>
+    <index+1|logic:ill-formed|<pageref|auto-102>>
 
-    <index+1|logic:ill-formed|<pageref|auto-84>>
+    <index+1|logic:no-handler|<pageref|auto-101>>
 
-    <index+1|logic:no-handler|<pageref|auto-83>>
+    <index+1|lost|<pageref|auto-16>>
 
-    <index+1|make-datum|<pageref|auto-125>>
+    <index+1|lost-and-found|<pageref|auto-18>>
 
-    <index+1|make-expanded-configuration|<pageref|auto-33>>
+    <index+1|make-datum|<pageref|auto-152>>
 
-    <index+1|make-message-handler|<pageref|auto-63>>
+    <index+1|make-disconnect!|<pageref|auto-120>>
 
-    <index+1|make-query|<pageref|auto-136>>
+    <index+1|make-expanded-configuration|<pageref|auto-40>>
 
-    <index+1|&malformed-path|<pageref|auto-151>>
+    <index+1|make-message-handler|<pageref|auto-79>>
 
-    <index+1|%max-datum-value-length|<pageref|auto-130>>
+    <index+1|make-query|<pageref|auto-163>>
 
-    <index+1|message handler|<pageref|auto-61>>
+    <index+1|&malformed-path|<pageref|auto-178>>
+
+    <index+1|%max-datum-value-length|<pageref|auto-157>>
+
+    <index+1|maybe-sending|<pageref|auto-117>>
+
+    <index+1|message handler|<pageref|auto-77>>
+
+    <index+1|message queue|<pageref|auto-71>>
 
     <index+1*|message type>
 
-    <index+2|message type|database|<pageref|auto-69>>
+    <index+2|message type|database|<pageref|auto-85>>
+
+    <index+2|message type|of handler|<pageref|auto-80>>
+
+    <index+1|message-handler|<pageref|auto-78>>
+
+    <index+1|message-symbol|<pageref|auto-52>>
+
+    <index+1|/:msg:cadet:local:acknowledgemeent|<pageref|auto-237>>
+
+    <index+1|/:msg:cadet:local:data|<pageref|auto-235>>
+
+    <index+1|/:msg:cadet:local:port:close|<pageref|auto-233>>
 
-    <index+2|message type|of handler|<pageref|auto-64>>
+    <index+1|/:msg:cadet:local:port:open|<pageref|auto-231>>
 
-    <index+1|message-handler|<pageref|auto-62>>
+    <index+1|/:msg:dht:client:get|<pageref|auto-195>>
 
-    <index+1|/:msg:dht:client:get|<pageref|auto-167>>
+    <index+1|/:msg:dht:client:put|<pageref|auto-198>, <pageref|auto-205>>
 
-    <index+1|/:msg:dht:client:put|<pageref|auto-169>\U<pageref|auto-175>>
+    <index+1|/:msg:dht:client:result|<pageref|auto-200>, <pageref|auto-202>,
+    <pageref|auto-207>>
 
-    <index+1|/:msg:dht:client:result|<pageref|auto-171>\U<pageref|auto-177>>
+    <index+1|netstruct|<pageref|auto-44>>
 
-    <index+1|netstruct|<pageref|auto-37>>
+    <index+1|network size estimation|<pageref|auto-123>>
 
-    <index+1|network size estimation|<pageref|auto-97>>
+    <index+1|network structure|<pageref|auto-43>>
 
-    <index+1|network structure|<pageref|auto-36>>
+    <index+1|NSE server object|<pageref|auto-127>>
 
-    <index+1|NSE server object|<pageref|auto-101>>
+    <index+1|NSE|<pageref|auto-124>>
 
-    <index+1|NSE|<pageref|auto-98>>
+    <index+1|open-channel!|<pageref|auto-223>>
 
-    <index+1|&overly-large-datum|<pageref|auto-131>>
+    <index+1|&overly-large-datum|<pageref|auto-158>>
 
-    <index+1|&overly-large-paths|<pageref|auto-150>>
+    <index+1|&overly-large-paths|<pageref|auto-177>>
 
-    <index+1|path element|<pageref|auto-145>>
+    <index+1|path element|<pageref|auto-172>>
 
-    <index+1|properties|<pageref|auto-44>>
+    <index+1|port|<pageref|auto-219>>
 
-    <index+1|put!|<pageref|auto-157>>
+    <index+1|properties|<pageref|auto-51>>
 
-    <index+1|put path|<pageref|auto-147>>
+    <index+1|put!|<pageref|auto-185>>
 
-    <index+1|query?|<pageref|auto-140>>
+    <index+1|put path|<pageref|auto-174>>
 
-    <index+1|query object|<pageref|auto-123>>
+    <index+1|query?|<pageref|auto-167>>
 
-    <index+1|query-desired-replication-level|<pageref|auto-139>>
+    <index+1|query object|<pageref|auto-150>>
 
-    <index+1|query-key|<pageref|auto-138>>
+    <index+1|query-desired-replication-level|<pageref|auto-166>>
 
-    <index+1|query-type|<pageref|auto-137>>
+    <index+1|query-key|<pageref|auto-165>>
 
-    <index+1|R5N|<pageref|auto-114>>
+    <index+1|query-type|<pageref|auto-164>>
 
-    <index+1|read%|<pageref|auto-46>>
+    <index+1|R5N|<pageref|auto-141>>
 
-    <index+1|read-value|<pageref|auto-20>>
+    <index+1|read%|<pageref|auto-54>>
 
-    <index+1|report-error|<pageref|auto-93>>
+    <index+1|read-value|<pageref|auto-27>>
 
-    <index+1|search object|<pageref|auto-156>>
+    <index+1|report-error|<pageref|auto-111>>
 
-    <index+1|search result object|<pageref|auto-124>>
+    <index+1|search object|<pageref|auto-183>>
 
-    <index+1|searching the DHT|<pageref|auto-153>>
+    <index+1|search result object|<pageref|auto-151>>
 
-    <index+1|search-result?|<pageref|auto-143>>
+    <index+1|searching the DHT|<pageref|auto-180>>
 
-    <index+1|search-result-get-path|<pageref|auto-148>>
+    <index+1|search-result?|<pageref|auto-170>>
 
-    <index+1|search-result-\<gtr\>datum|<pageref|auto-142>>
+    <index+1|search-result-get-path|<pageref|auto-175>>
 
-    <index+1|search-result-put-path|<pageref|auto-149>>
+    <index+1|search-result-\<gtr\>datum|<pageref|auto-169>>
 
-    <index+1|select|<pageref|auto-49>>
+    <index+1|search-result-put-path|<pageref|auto-176>>
 
-    <index+1*|server object>
+    <index+1|select|<pageref|auto-57>>
 
-    <index+2|server object|DHT|<pageref|auto-117>>
+    <index+1|send-message!|<pageref|auto-91>>
 
-    <index+2|server object|NSE|<pageref|auto-102>>
+    <index+1|server object|<pageref|auto-64>>
 
-    <index+1|services|<pageref|auto-53>>
+    <index+2|server object|CADET|<pageref|auto-214>>
 
-    <index+1|set%!|<pageref|auto-47>>
+    <index+2|server object|DHT|<pageref|auto-146>>
 
-    <index+1|set-value!|<pageref|auto-19>>
+    <index+2|server object|NSE|<pageref|auto-128>>
 
-    <index+1|sizeof|<pageref|auto-48>>
+    <index+1|service|<pageref|auto-62>>
 
-    <index+1|start-get!|<pageref|auto-155>>
+    <index+1|services|<pageref|auto-68>>
 
-    <index+1|structure/packed|<pageref|auto-39>>
+    <index+1|set%!|<pageref|auto-55>>
 
-    <index+1|symbol-value|<pageref|auto-71>>
+    <index+1|set-value!|<pageref|auto-26>>
 
-    <index+1|synopsis|<pageref|auto-42>>
+    <index+1|sizeof|<pageref|auto-56>>
+
+    <index+1|start-get!|<pageref|auto-182>>
+
+    <index+1|stop-get!|<pageref|auto-184>>
+
+    <index+1|string-\<gtr\>data|<pageref|auto-248>>
+
+    <index+1|string-\<gtr\>ecdsa-public-key|<pageref|auto-243>>
+
+    <index+1|string-\<gtr\>eddsa-public-key|<pageref|auto-242>>
+
+    <index+1|structure/packed|<pageref|auto-46>>
+
+    <index+1|symbol-value|<pageref|auto-87>>
+
+    <index+1|synopsis|<pageref|auto-49>>
+
+    <index+1|terminal condition|<pageref|auto-118>>
 
     <index+1|tests|<pageref|auto-7>>
 
-    <index+1|textual-error-reporting-port|<pageref|auto-94>>
+    <index+1|textual-error-reporting-port|<pageref|auto-112>>
+
+    <index+1|tunnel|<pageref|auto-217>>
 
-    <index+1|&undefined-key-error|<pageref|auto-21>>
+    <index+1|&undefined-key-error|<pageref|auto-28>>
 
-    <index+1|update procedure|<pageref|auto-103>>
+    <index+1|update procedure|<pageref|auto-130>>
 
-    <index+1|value-\<gtr\>index|<pageref|auto-73>>
+    <index+1|value-\<gtr\>index|<pageref|auto-89>>
 
-    <index+1|variable assignment|<pageref|auto-32>>
+    <index+1|variable assignment|<pageref|auto-39>>
 
-    <index+1|verifier|<pageref|auto-66>>
+    <index+1|verifier|<pageref|auto-82>>
   </the-index>
 </body>
 
diff --git a/doc/service-communication.tm b/doc/service-communication.tm
index 3b08e55..cf8d96f 100644
--- a/doc/service-communication.tm
+++ b/doc/service-communication.tm
@@ -496,13 +496,20 @@
   </explain|<todo|???>>
 
   <\explain>
-    <scm|(maybe-send-control-message! <var|server> <var|message>)>
+    <scm|(maybe-send-control-message! <var|server> . <var|message>)>
   <|explain>
     Maybe-send the message <var|message> to the service. If sent, return
     <scm|#true>. If the control loop is not active anymore (i.e., the
     terminal condition was signalled), return <scm|#false> instead.
   </explain>
 
+  <\explain>
+    <scm|(maybe-send-control-message!* <var|terminal-condition>
+    <var|control-channel> . <var|message>)>
+  </explain|This is like <scm|maybe-send-control-message!>, except it doesn't
+  need a reference to the <scm|\<less\>server\<gtr\>> object, which sometimes
+  is required for GC reasons.>
+
   <\explain>
     <scm|(make-disconnect! <var|type?>)><index|make-disconnect!>
   <|explain>
diff --git a/gnu/extractor/enum.scm b/gnu/extractor/enum.scm
index d4b4ce7..ca20854 100644
--- a/gnu/extractor/enum.scm
+++ b/gnu/extractor/enum.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;;   This file is part of scheme-GNUnet, a partial Scheme port of GNUnet
 ;;   scheme-GNUnet contains scheme-extractor.
 ;;   scheme-extractor is a partial Scheme port of libextractor.
diff --git a/gnu/gnunet/block.scm b/gnu/gnunet/block.scm
index 7374cd2..3682b65 100644
--- a/gnu/gnunet/block.scm
+++ b/gnu/gnunet/block.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;; This file is part of GNUnet.
 ;; Copyright (C) 2010, 2021 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/cadet/client.scm b/gnu/gnunet/cadet/client.scm
index e296e5a..bc1b8b8 100644
--- a/gnu/gnunet/cadet/client.scm
+++ b/gnu/gnunet/cadet/client.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;; This file is part of Scheme-GNUnet.
 ;; Copyright © 2022 GNUnet e.V.
 ;;
@@ -28,19 +29,19 @@
          ;; Network manipulation procedures
          ;; (these belong to (gnu gnunet cadet network)).
          (rename (analyse-local-channel-create
-                  #{ analyse-local-channel-create}#)
+                  | analyse-local-channel-create|)
                  (construct-local-channel-create
-                  #{ construct-local-channel-create}#)
+                  | construct-local-channel-create|)
                  (analyse-local-channel-destroy
-                  #{ analyse-local-channel-destroy}#)
+                  | analyse-local-channel-destroy|)
                  (construct-local-channel-destroy
-                  #{ construct-local-channel-destroy}#)
-                 (analyse-local-data #{ analyse-local-data}#)
-                 (construct-local-data #{ construct-local-data}#)
+                  | construct-local-channel-destroy|)
+                 (analyse-local-data | analyse-local-data|)
+                 (construct-local-data | construct-local-data|)
                  (analyse-local-acknowledgement
-                  #{ analyse-local-acknowledgement}#)
+                  | analyse-local-acknowledgement|)
                  (construct-local-acknowledgement
-                  #{ construct-local-acknowledgement}#)))
+                  | construct-local-acknowledgement|)))
   (import (only (gnu extractor enum)
                value->index symbol-value)
          (only (gnu gnunet cadet struct)
diff --git a/gnu/gnunet/cadet/network.scm b/gnu/gnunet/cadet/network.scm
index 9e51482..dddeecf 100644
--- a/gnu/gnunet/cadet/network.scm
+++ b/gnu/gnunet/cadet/network.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;; This file is part of Scheme-GNUnet.
 ;; Copyright © 2022 GNUnet e.V.
 ;;
@@ -21,17 +22,17 @@
          construct-local-data analyse-local-data
          construct-local-acknowledgement analyse-local-acknowledgement)
   (import (rename (gnu gnunet cadet client)
-                 (#{ construct-local-channel-create}#
+                 (| construct-local-channel-create|
                   construct-local-channel-create)
-                 (#{ analyse-local-channel-create}#
+                 (| analyse-local-channel-create|
                   analyse-local-channel-create)
-                 (#{ construct-local-channel-destroy}#
+                 (| construct-local-channel-destroy|
                   construct-local-channel-destroy)
-                 (#{ analyse-local-channel-destroy}#
+                 (| analyse-local-channel-destroy|
                   analyse-local-channel-destroy)
-                 (#{ construct-local-data}# construct-local-data)
-                 (#{ analyse-local-data}# analyse-local-data)
-                 (#{ construct-local-acknowledgement}#
+                 (| construct-local-data| construct-local-data)
+                 (| analyse-local-data| analyse-local-data)
+                 (| construct-local-acknowledgement|
                   construct-local-acknowledgement)
-                 (#{ analyse-local-acknowledgement}#
+                 (| analyse-local-acknowledgement|
                   analyse-local-acknowledgement))))
diff --git a/gnu/gnunet/cadet/struct.scm b/gnu/gnunet/cadet/struct.scm
index 772d49d..28cfafa 100644
--- a/gnu/gnunet/cadet/struct.scm
+++ b/gnu/gnunet/cadet/struct.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;; This file is part of Scheme-GNUnet.
 ;; Copyright © 2001-2011, 2022 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/concurrency/lost-and-found.scm 
b/gnu/gnunet/concurrency/lost-and-found.scm
index 4d3be1f..711f3a6 100644
--- a/gnu/gnunet/concurrency/lost-and-found.scm
+++ b/gnu/gnunet/concurrency/lost-and-found.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;; This file is part of Scheme-GNUnet
 ;; Copyright © 2022 GNUnet e.V.
 ;;
@@ -21,7 +22,7 @@
   (export make-lost-and-found lost-and-found? collect-lost-and-found-operation
          make-losable <losable> losable? losable-lost-and-found
          ;; exported for tests
-         (rename (add-found! #{ add-found!}#)))
+         (rename (add-found! | add-found!|)))
   (import (only (rnrs base)
                begin let define lambda quote if cond eq? assert cons list)
          (only (rnrs control)
diff --git a/gnu/gnunet/concurrency/repeated-condition.scm 
b/gnu/gnunet/concurrency/repeated-condition.scm
index 6a78375..f0c0c8b 100644
--- a/gnu/gnunet/concurrency/repeated-condition.scm
+++ b/gnu/gnunet/concurrency/repeated-condition.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;; This file is part of scheme-GNUnet.
 ;; Copyright (C) 2021 GNUnet e.V.
 ;;
@@ -29,7 +30,7 @@
                let^)
          (prefix (only (fibers conditions)
                        make-condition signal-condition! wait-operation)
-                 #{cvar:}#)
+                 |cvar:|)
          (only (fibers operations)
                choice-operation perform-operation)
          (only (ice-9 atomic)
diff --git a/gnu/gnunet/concurrency/update.scm 
b/gnu/gnunet/concurrency/update.scm
index 2bdcfc8..d8d1f88 100644
--- a/gnu/gnunet/concurrency/update.scm
+++ b/gnu/gnunet/concurrency/update.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;; This file is part of scheme-GNUnet.
 ;; Copyright (C) 2021 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/config/db.scm b/gnu/gnunet/config/db.scm
index 2806d1d..a5437fe 100644
--- a/gnu/gnunet/config/db.scm
+++ b/gnu/gnunet/config/db.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;; This file is part of scheme-GNUnet, a partial Scheme port of GNUnet.
 ;; Copyright (C) 2021 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/config/expand.scm b/gnu/gnunet/config/expand.scm
index 338df3b..5a5fd0c 100644
--- a/gnu/gnunet/config/expand.scm
+++ b/gnu/gnunet/config/expand.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;; This file is part of scheme-GNUnet, a partial Scheme port of GNUnet.
 ;; Copyright (C) 2006, 2007, 2008, 2009, 2013, 2020, 2021 GNUnet e.V.
 ;;
@@ -47,10 +48,10 @@
          (only (gnu gnunet config parser)
                literal-position? expo:literal-start expo:literal-end
                $-position? expo:$-name-start expo:$-name-end
-               #{${}-position?}# #{expo:${}-name-start}#
-               #{expo:${}-name-end}# #{${:-}-position?}#
-               #{expo:${:-}-name-start}# #{expo:${:-}-name-end}#
-               #{expo:${:-}-value-parts}#)
+               |${}-position?| #{expo:${}-name-start}#
+               |expo:${}-name-end| #{${:-}-position?}#
+               |expo:${:-}-name-start| #{expo:${:-}-name-end}#
+               |expo:${:-}-value-parts|)
          (only (gnu gnunet utils hat-let)
                let^))
   (begin
@@ -157,21 +158,21 @@ No restrictions are set on what constitutes a line."
                   (<-- (line expo-list)
                        (query-required line start end)))
                  (recurse/visit line expo-list start end)))
-          (#{${}-position?}#
-           (let^ ((! start (#{expo:${}-name-start}# expo))
-                  (! end (#{expo:${}-name-end}# expo))
+          (|${}-position?|
+           (let^ ((! start (|expo:${}-name-start| expo))
+                  (! end (|expo:${}-name-end| expo))
                   (<-- (line expo-list)
                        (query-required line start end)))
                  (recurse/visit line expo-list start end)))
-          (#{${:-}-position?}#
-           (let^ ((! start (#{expo:${:-}-name-start}# expo))
-                  (! end (#{expo:${:-}-name-end}# expo)))
+          (|${:-}-position?|
+           (let^ ((! start (|expo:${:-}-name-start| expo))
+                  (! end (|expo:${:-}-name-end| expo)))
                  (call-with-values
                      (lambda () (query line start end))
                    (case-lambda
                      ;; If this variable is undefined, use the default.
                      (()
-                      (recurse line (#{expo:${:-}-value-parts}# expo) visited))
+                      (recurse line (|expo:${:-}-value-parts| expo) visited))
                      ((line expo-list)
                       (recurse/visit line expo-list start end)))))))))
       (for-each expand expo-list)
diff --git a/gnu/gnunet/config/fs.scm b/gnu/gnunet/config/fs.scm
index bce8296..e709c1f 100644
--- a/gnu/gnunet/config/fs.scm
+++ b/gnu/gnunet/config/fs.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;; This file is part of scheme-GNUnet, a partial Scheme port of GNUnet.
 ;; Copyright (C) 2021 GNUnet e.V.
 ;;
@@ -138,7 +139,7 @@ where @var{value} is a list of expansible objects."
          ...))
       (define-loops
        (((no-section no-section*))
-        (cond ((#{[]-position?}# object)
+        (cond ((|[]-position?| object)
                (section*
                 (substring line
                            (position:section-name-start object)
@@ -153,7 +154,7 @@ where @var{value} is a list of expansible objects."
               ;; comments, empty line
               (#t (no-section*))))
        (((section section*) section-name)
-        (cond ((#{[]-position?}# object)
+        (cond ((|[]-position?| object)
                (section*
                 (substring line
                            (position:section-name-start object)
diff --git a/gnu/gnunet/config/parser.scm b/gnu/gnunet/config/parser.scm
index 3ac11c9..956e19e 100644
--- a/gnu/gnunet/config/parser.scm
+++ b/gnu/gnunet/config/parser.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;;   This file is part of scheme-GNUnet, a partial Scheme port of GNUnet.
 ;;   Copyright (C) 2006, 2007, 2008, 2009, 2013, 2020, 2021 GNUnet e.V.
 ;;
@@ -25,12 +26,12 @@
   (export parse-line ;; line parser
          <position:%> make-%-position %-position?
          position:%
-         <position:#> make-#-position #{#-position?}#
+         <position:#> make-#-position |#-position?|
          position:#
          <position:=> make-=-position =-position?
          position:variable-start position:variable-end
          position:= position:value-start position:value-end
-         #{<position:[]>}# #{make-[]-position}# #{[]-position?}#
+         |<position:[]>| #{make-[]-position}# #{[]-position?}#
          position:section-name-start position:section-name-end
          <position:@inline@> make-@inline@-position @inline@-position?
          position:@inline@-start position:@inline@-end
@@ -39,15 +40,15 @@
          ;; expansion parser (data types)
          <expo:literal> make-literal-position literal-position?
          <expo:$> make-$-position $-position?
-         #{<expo:${}>}# #{make-${}-position}# #{${}-position?}#
-         #{<expo:${:-}>}# #{make-${:-}-position}# #{${:-}-position?}#
+         |<expo:${}>| #{make-${}-position}# #{${}-position?}#
+         |<expo:${:-}>| #{make-${:-}-position}# #{${:-}-position?}#
 
          expo:literal-start expo:literal-end
          expo:$-name-start expo:$-name-end
-         #{expo:${}-name-start}# #{expo:${}-name-end}#
-         #{expo:${:-}-name-start}# #{expo:${:-}-name-end}#
-         #{expo:${:-}-value-start}# #{expo:${:-}-value-end}#
-         #{expo:${:-}-value-parts}#
+         |expo:${}-name-start| #{expo:${}-name-end}#
+         |expo:${:-}-name-start| #{expo:${:-}-name-end}#
+         |expo:${:-}-value-start| #{expo:${:-}-value-end}#
+         |expo:${:-}-value-parts|
 
          ;; expansion parser (conditions)
          &expansion-violation &empty-variable-violation &missing-close
@@ -128,8 +129,8 @@
       "@var{%} is the position of the @code{#\\%} comment character in
 a comment.")
 
-    (define-positions-type (<position:#> make-#-position #{#-position?}#)
-      ((#{#}# position:#))
+    (define-positions-type (<position:#> make-#-position |#-position?|)
+      ((|#| position:#))
       ()
       "@var{#} is the position of the @code{#\\#} comment character in
 a comment.")
@@ -152,7 +153,7 @@ If the value is empty, then by convention 
@var{variable-start} and
 @var{variable-end} are the positions right after the equality sign.")
 
     (define-positions-type
-      (#{<position:[]>}# #{make-[]-position}# #{[]-position?}#)
+      (|<position:[]>| #{make-[]-position}# #{[]-position?}#)
       ((section-name-start position:section-name-start)
        (section-name-end position:section-name-end))
       ;; TODO: should empty section names be allowed?
@@ -216,7 +217,7 @@ of other types may be returned."
             ;; Is this a section name?  Then stop.
             (? (and (char=? #\[ first-important-character)
                     (char=? #\] (string-ref line end-inclusive)))
-               (#{make-[]-position}# (+ 1 start-inclusive) end-inclusive))
+               (|make-[]-position| (+ 1 start-inclusive) end-inclusive))
             ;; Is this an inclusion directive?  Then stop.
             ;; TODO upstream GNUnet compares case-insensitively.
             ;; Is this a bug or a feature?
@@ -268,29 +269,29 @@ the start and end positions of a region of texts without 
expansions.")
       "@var{$-name-start} (inclusive) and @var{$-name-end} (exclusive) are the
 start and end positions of a variable name in an expansion X/$VAR/etcetera.")
 
-    (define-positions-type (#{<expo:${}>}# #{make-${}-position}#
-                           #{${}-position?}#)
-      ((#{${}-name-start}# #{expo:${}-name-start}#)
-       (#{${}-name-end}# #{expo:${}-name-end}#))
-      ((< #{${}-name-start}# #{${}-name-end}#))
+    (define-positions-type (|<expo:${}>| #{make-${}-position}#
+                           |${}-position?|)
+      ((|${}-name-start| #{expo:${}-name-start}#)
+       (|${}-name-end| #{expo:${}-name-end}#))
+      ((< |${}-name-start| #{${}-name-end}#))
       "@var{$@{@}-name-start} (inclusive) and @var{$@{@}-name-end}
 (exclusive) are the start and end positions of a variable name in an expansion
 ${VAR}.")
 
-    (define-record-type (#{<expo:${:-}>}# #{make-${:-}-position}#
-                        #{${:-}-position?}#)
-      (fields (immutable #{${:-}-name-start}# #{expo:${:-}-name-start}#)
-             (immutable #{${:-}-name-end}# #{expo:${:-}-name-end}#)
-             (immutable #{${:-}-value-start}# #{expo:${:-}-value-start}#)
-             (immutable #{${:-}-value-end}# #{expo:${:-}-value-end}#)
-             (immutable #{${:-}-value-parts}# #{expo:${:-}-value-parts}#))
+    (define-record-type (|<expo:${:-}>| #{make-${:-}-position}#
+                        |${:-}-position?|)
+      (fields (immutable |${:-}-name-start| #{expo:${:-}-name-start}#)
+             (immutable |${:-}-name-end| #{expo:${:-}-name-end}#)
+             (immutable |${:-}-value-start| #{expo:${:-}-value-start}#)
+             (immutable |${:-}-value-end| #{expo:${:-}-value-end}#)
+             (immutable |${:-}-value-parts| #{expo:${:-}-value-parts}#))
       (sealed #t)
       (opaque #t)
       (protocol
        (lambda (%make)
-        (lambda (#{${:-}-name-start}# #{${:-}-name-end}#
-                 #{${:-}-value-start}# #{${:-}-value-end}#
-                 #{${:-}-value-parts}#)
+        (lambda (|${:-}-name-start| #{${:-}-name-end}#
+                 |${:-}-value-start| #{${:-}-value-end}#
+                 |${:-}-value-parts|)
           "@var{$@{:-@}-name-start} (inclusive) and @var{$@{:-@}-name-end}
 (exclusive) are the start and end positions of a variable name in an expansion
 @samp{$@{VAR:-DEFAULT-VALUE@}}.  @var{$@{:-@}-value-start} (inclusive) and
@@ -299,17 +300,17 @@ DEFAULT-VALUE.  @var{${:-}-value-parts} is an ordered 
list of contiguous
 expansion position objects, representing the structure of @samp{DEFAULT-VALUE}
 (unverified)."
           (assert (and (exact-integers?
-                        #{${:-}-name-start}# #{${:-}-name-end}#
-                        #{${:-}-value-start}# #{${:-}-value-end}#)
-                       (<= 0 #{${:-}-name-start}#)
-                       (< #{${:-}-name-start}# #{${:-}-name-end}#)
-                       (= (- #{${:-}-value-start}# #{${:-}-name-end}#) 2)
-                       (<= #{${:-}-value-start}# #{${:-}-value-end}#)
-                       (or (pair? #{${:-}-value-parts}#)
-                           (null? #{${:-}-value-parts}#))))
-          (%make #{${:-}-name-start}# #{${:-}-name-end}#
-                 #{${:-}-value-start}# #{${:-}-value-end}#
-                 #{${:-}-value-parts}#)))))
+                        |${:-}-name-start| #{${:-}-name-end}#
+                        |${:-}-value-start| #{${:-}-value-end}#)
+                       (<= 0 |${:-}-name-start|)
+                       (< |${:-}-name-start| #{${:-}-name-end}#)
+                       (= (- |${:-}-value-start| #{${:-}-name-end}#) 2)
+                       (<= |${:-}-value-start| #{${:-}-value-end}#)
+                       (or (pair? |${:-}-value-parts|)
+                           (null? |${:-}-value-parts|))))
+          (%make |${:-}-name-start| #{${:-}-name-end}#
+                 |${:-}-value-start| #{${:-}-value-end}#
+                 |${:-}-value-parts|)))))
 
     ;; Now define the possible syntax errors.
     (define-condition-type &expansion-violation &lexical
@@ -333,7 +334,7 @@ expansions with a default, @code{$@{@}} for braced variable 
expansions without
 default and @code{$} for unbraced variable expansions."
       (assert (and (exact-integers? position)
                   (<= 0 position)
-                  (memq kind '($ #{${}}# #{${:-}}#))))
+                  (memq kind '($ |${}| #{${:-}}#))))
       (%make-empty-variable-violation position kind))
 
     (define-condition-type &missing-close &expansion-violation
@@ -348,7 +349,7 @@ indicates the type of variable expansion found, as in
 @code{empty-variable-violation}, though it cannot be @code{$@}."
       (assert (and (exact-integers? position)
                   (<= 0 position)
-                  (memq kind '(#{${}}# #{${:-}}#))))
+                  (memq kind '(|${}| #{${:-}}#))))
       (%make-missing-close-violation position kind))
 
     (define cs::-or-close (char-set #\: #\}))
@@ -431,7 +432,7 @@ If @var{nested?} is Scheme-falsish, then the second return 
value is simply
                       ;; There should eventually be at least
                       ;; a closing }.
                       (? (not name-end)
-                         (raise (make-missing-close-violation end '#{${}}#)))
+                         (raise (make-missing-close-violation end '|${}|)))
                       (! name-end-character
                          (string-ref text name-end))
                       ;; Empty variable names are not allowed.
@@ -439,13 +440,13 @@ If @var{nested?} is Scheme-falsish, then the second 
return value is simply
                          (raise (make-empty-variable-violation
                                  name-end
                                  (if (char=? name-end-character #\:)
-                                     '#{${:-}}#
-                                     '#{${}}#))))
+                                     '|${:-}|
+                                     '|${}|))))
                       ;; Was this ${NAME}?
                       (? (char=? name-end-character #\})
                          ;; Then add it to @var{accumulated} and
                          ;; continue.
-                         (loop (cons (#{make-${}-position}# name-start 
name-end)
+                         (loop (cons (|make-${}-position| name-start name-end)
                                      accumulated)
                                (+ 1 name-end)))
                       ;; Otherwise, it was ${NAME:-VALUE}.
@@ -461,7 +462,7 @@ If @var{nested?} is Scheme-falsish, then the second return 
value is simply
                       ;; This procedure call will verify a close
                       ;; brace at @var{default-end} exist.
                       (<-- (value-parts value-end)
-                           (parse-expandable* text value-start end '#{${:-}}#))
+                           (parse-expandable* text value-start end '|${:-}|))
                       ;; This was violated at some draft of this procedure.
                       ;; Verify it is fixed.
                       (!! (or (pair? value-parts)
@@ -471,7 +472,7 @@ If @var{nested?} is Scheme-falsish, then the second return 
value is simply
                       (!! (char=? #\} (string-ref text value-end))))
                      ;; Add the variable expansion to @var{accumulated}
                      ;; and continue.
-                     (loop (cons (#{make-${:-}-position}# name-start name-end
+                     (loop (cons (|make-${:-}-position| name-start name-end
                                   value-start value-end value-parts)
                                  accumulated)
                            ;; + 1: eat the closing brace.
diff --git a/gnu/gnunet/config/value-parser.scm 
b/gnu/gnunet/config/value-parser.scm
index 7cf4ce0..dd6d7e8 100644
--- a/gnu/gnunet/config/value-parser.scm
+++ b/gnu/gnunet/config/value-parser.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;; This file is part of scheme-GNUnet.
 ;; Copyright © 2005--2022 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/crypto.scm b/gnu/gnunet/crypto.scm
index 04d5b28..c62b753 100644
--- a/gnu/gnunet/crypto.scm
+++ b/gnu/gnunet/crypto.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;; This file is part of GNUnet
 ;; Copyright © 2021, 2022 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/crypto/struct.scm b/gnu/gnunet/crypto/struct.scm
index a19b8b6..b305523 100644
--- a/gnu/gnunet/crypto/struct.scm
+++ b/gnu/gnunet/crypto/struct.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;;   This file is part of scheme-GNUnet, a partial Scheme port of GNUnet
 ;;   Copyright (C) 2001-2013, 2021 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/data-string.scm b/gnu/gnunet/data-string.scm
index 54150d0..377ab7f 100644
--- a/gnu/gnunet/data-string.scm
+++ b/gnu/gnunet/data-string.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;;   This file is part of scheme-GNUnet, a partial Scheme port of GNUnet.
 ;;   Copyright (C) 2005--2007, 2020, 2022 GNUnet e.V.
 ;;
@@ -43,7 +44,8 @@
 
   (define data->string
     (case-lambda
-      "Convert binary data to ASCII encoding using Crockford Base32 encoding.
+     ;; No docstrings in Racket
+     #;"Convert binary data to ASCII encoding using Crockford Base32 encoding.
 
 This corresponds with the @code{GNUNET_STRINGS_data_to_string} function
 of the C implementation.
diff --git a/gnu/gnunet/dht/client.scm b/gnu/gnunet/dht/client.scm
index 55ba62a..f2088ac 100644
--- a/gnu/gnunet/dht/client.scm
+++ b/gnu/gnunet/dht/client.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;; This file is part of GNUnet
 ;; Copyright (C) 2004-2013, 2016, 2021, 2022 GNUnet e.V.
 ;;
@@ -50,14 +51,14 @@
 
          ;; Network message manipulation procedures
          ;; (these belong to (gnu gnunet dht network)).
-         (rename (construct-client-get #{ construct-client-get}#)
-                 (construct-client-get-stop #{ construct-client-get-stop}#)
-                 (construct-client-put #{ construct-client-put}#)
-                 (construct-client-result #{ construct-client-result}#)
-                 (analyse-client-get #{ analyse-client-get}#)
-                 (analyse-client-get-stop #{ analyse-client-get-stop}#)
-                 (analyse-client-put #{ analyse-client-put}#)
-                 (analyse-client-result #{ analyse-client-result}#))
+         (rename (construct-client-get | construct-client-get|)
+                 (construct-client-get-stop | construct-client-get-stop|)
+                 (construct-client-put | construct-client-put|)
+                 (construct-client-result | construct-client-result|)
+                 (analyse-client-get | analyse-client-get|)
+                 (analyse-client-get-stop | analyse-client-get-stop|)
+                 (analyse-client-put | analyse-client-put|)
+                 (analyse-client-result | analyse-client-result|))
 
          (rename (server:dht? server?))
 
diff --git a/gnu/gnunet/dht/network.scm b/gnu/gnunet/dht/network.scm
index 79b16fe..cb8dfe6 100644
--- a/gnu/gnunet/dht/network.scm
+++ b/gnu/gnunet/dht/network.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;; This file is part of Scheme-GNUnet
 ;; Copyright © 2022 GNUnet e.V.
 ;;
@@ -19,11 +20,11 @@
   (export construct-client-get construct-client-put construct-client-result
          analyse-client-get analyse-client-put analyse-client-result)
   (import (rename (gnu gnunet dht client)
-                 (#{ construct-client-get}# construct-client-get)
-                 (#{ construct-client-get-stop}# construct-client-get-stop)
-                 (#{ construct-client-put}# construct-client-put)
-                 (#{ construct-client-result}# construct-client-result)
-                 (#{ analyse-client-get}# analyse-client-get)
-                 (#{ analyse-client-get-stop}# analyse-client-get-stop)
-                 (#{ analyse-client-put}# analyse-client-put)
-                 (#{ analyse-client-result}# analyse-client-result))))
+                 (| construct-client-get| construct-client-get)
+                 (| construct-client-get-stop| construct-client-get-stop)
+                 (| construct-client-put| construct-client-put)
+                 (| construct-client-result| construct-client-result)
+                 (| analyse-client-get| analyse-client-get)
+                 (| analyse-client-get-stop| analyse-client-get-stop)
+                 (| analyse-client-put| analyse-client-put)
+                 (| analyse-client-result| analyse-client-result))))
diff --git a/gnu/gnunet/dht/struct.scm b/gnu/gnunet/dht/struct.scm
index f516f15..7c1f166 100644
--- a/gnu/gnunet/dht/struct.scm
+++ b/gnu/gnunet/dht/struct.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;; This file is part of GNUnet.
 ;; Copyright (C) 2001-2013, 2022 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/directory.scm b/gnu/gnunet/directory.scm
index f0c75d7..470c7a8 100644
--- a/gnu/gnunet/directory.scm
+++ b/gnu/gnunet/directory.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;;   This file is part of scheme-GNUnet, a partial Scheme port of GNUnet.
 ;;   Copyright (C) 2003, 2004, 2006, 2009, 2020 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/fs-uri.scm b/gnu/gnunet/fs-uri.scm
index dd610bf..685c493 100644
--- a/gnu/gnunet/fs-uri.scm
+++ b/gnu/gnunet/fs-uri.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;;   This file is part of scheme-GNUnet, a partial Scheme port of GNUnet.
 ;;   Copyright (C) 2003--2014, 2020 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/hashcode-ascii.scm b/gnu/gnunet/hashcode-ascii.scm
index 4ad98fb..95d8d36 100644
--- a/gnu/gnunet/hashcode-ascii.scm
+++ b/gnu/gnunet/hashcode-ascii.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;;   This file is part of scheme-GNUnet, a partial Scheme port of GNUnet.
 ;;   Copyright (C) 2001--2013, 2020 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/hashcode.scm b/gnu/gnunet/hashcode.scm
index 0689804..ff36dfa 100644
--- a/gnu/gnunet/hashcode.scm
+++ b/gnu/gnunet/hashcode.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;;   This file is part of scheme-GNUnet, a partial Scheme port of GNUnet.
 ;;   Copyright (C) 2006--2020 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/hashcode/struct.scm b/gnu/gnunet/hashcode/struct.scm
index d742161..b9b7779 100644
--- a/gnu/gnunet/hashcode/struct.scm
+++ b/gnu/gnunet/hashcode/struct.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;;   This file is part of scheme-GNUnet, a partial Scheme port of GNUnet.
 ;;   Copyright (C) 2006--2021 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/icmp/struct.scm b/gnu/gnunet/icmp/struct.scm
index 6009492..38b7a8e 100644
--- a/gnu/gnunet/icmp/struct.scm
+++ b/gnu/gnunet/icmp/struct.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;; This file is part of scheme-GNUnet.
 ;; Copyright (C) 2021 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/message/protocols.scm b/gnu/gnunet/message/protocols.scm
index c323161..5b60744 100644
--- a/gnu/gnunet/message/protocols.scm
+++ b/gnu/gnunet/message/protocols.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;; -*- scheme -*- Constants for network protocols
 ;; This file is part of scheme-GNUnet.
 ;; Copyright (C) 2001--2021 GNUnet e.V.
diff --git a/gnu/gnunet/metadata.scm b/gnu/gnunet/metadata.scm
index fc57c48..2877b0b 100644
--- a/gnu/gnunet/metadata.scm
+++ b/gnu/gnunet/metadata.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;;   This file is part of scheme-GNUnet, a partial Scheme port of GNUnet.
 ;;   Copyright (C) 2003, 2004, 2005, 2006, 2008, 2009, 2010, 2020 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/metadata/struct.scm b/gnu/gnunet/metadata/struct.scm
index 28e1f32..0e645d1 100644
--- a/gnu/gnunet/metadata/struct.scm
+++ b/gnu/gnunet/metadata/struct.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;;   This file is part of scheme-GNUnet, a partial Scheme port of GNUnet.
 ;;   Adapted from an iteration of (gnu gnunet metadata)
 ;;   Copyright (C) 2003, 2004, 2005, 2006, 2008, 2009, 2010, 2020 GNUnet e.V.
diff --git a/gnu/gnunet/mq-impl/stream.scm b/gnu/gnunet/mq-impl/stream.scm
index c9b1b0d..23129f4 100644
--- a/gnu/gnunet/mq-impl/stream.scm
+++ b/gnu/gnunet/mq-impl/stream.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;; This file is part of scheme-GNUnet.
 ;; Copyright (C) 2021 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/mq.scm b/gnu/gnunet/mq.scm
index dd42a52..7e00eb1 100644
--- a/gnu/gnunet/mq.scm
+++ b/gnu/gnunet/mq.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;; This file is part of GNUnet.
 ;; Copyright (C) 2012-2019, 2021 GNUnet e.V.
 ;;
@@ -80,7 +81,7 @@
          (prefix (only (pfds queues)
                        make-queue dequeue enqueue queue-length
                        queue-empty? queue->list list->queue)
-                 #{pfds:}#))
+                 |pfds:|))
   (begin
     (define-record-type (<message-queue> make-message-queue message-queue?)
       (fields (immutable handlers message-queue-handlers)
diff --git a/gnu/gnunet/mq/envelope.scm b/gnu/gnunet/mq/envelope.scm
index 14d8b66..592f66c 100644
--- a/gnu/gnunet/mq/envelope.scm
+++ b/gnu/gnunet/mq/envelope.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;; This file is part of GNUnet.
 ;; Copyright © 2012-2019, 2021, 2022 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/mq/error-reporting.scm 
b/gnu/gnunet/mq/error-reporting.scm
index 5ce7c63..c66a8fe 100644
--- a/gnu/gnunet/mq/error-reporting.scm
+++ b/gnu/gnunet/mq/error-reporting.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;; This file is part of scheme-GNUnet, a partial Scheme port of GNUnet.
 ;; Copyright (C) 2021 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/mq/handler.scm b/gnu/gnunet/mq/handler.scm
index 96520dd..2498eef 100644
--- a/gnu/gnunet/mq/handler.scm
+++ b/gnu/gnunet/mq/handler.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;; This file is part of scheme-GNUnet.
 ;; Copyright (C) 2021 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/mq/prio-prefs.scm b/gnu/gnunet/mq/prio-prefs.scm
index babcf37..1c28c70 100644
--- a/gnu/gnunet/mq/prio-prefs.scm
+++ b/gnu/gnunet/mq/prio-prefs.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;; This file is part of scheme-GNUnet.
 ;; Copyright © 2012-2016, 2021-2022 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/mq/prio-prefs2.scm b/gnu/gnunet/mq/prio-prefs2.scm
index 5bc2eb5..ba41189 100644
--- a/gnu/gnunet/mq/prio-prefs2.scm
+++ b/gnu/gnunet/mq/prio-prefs2.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;; This file is part of scheme-GNUnet.
 ;; Copyright (C) 2012-2016, 2021 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/netstruct/procedural.scm 
b/gnu/gnunet/netstruct/procedural.scm
index 8850322..525e6a6 100644
--- a/gnu/gnunet/netstruct/procedural.scm
+++ b/gnu/gnunet/netstruct/procedural.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;;   This file is part of scheme-GNUnet, a partial Scheme port of GNUnet.
 ;;   Copyright (C) 2020, 2021 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/netstruct/syntactic.scm 
b/gnu/gnunet/netstruct/syntactic.scm
index dde6664..ff388af 100644
--- a/gnu/gnunet/netstruct/syntactic.scm
+++ b/gnu/gnunet/netstruct/syntactic.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;;   This file is part of scheme-GNUnet, a partial Scheme port of GNUnet.
 ;;   Copyright (C) 2020, 2021 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/nse/client.scm b/gnu/gnunet/nse/client.scm
index 50edd5f..9487497 100644
--- a/gnu/gnunet/nse/client.scm
+++ b/gnu/gnunet/nse/client.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;; This file is part of scheme-GNUnet, a partial Scheme port of GNUnet.
 ;; Copyright © 2021, 2022 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/nse/struct.scm b/gnu/gnunet/nse/struct.scm
index d07b1eb..41a73f6 100644
--- a/gnu/gnunet/nse/struct.scm
+++ b/gnu/gnunet/nse/struct.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;; This file is part of scheme-GNUnet
 ;; Copyright (C) 2001-2011, 2021 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/scripts/download-store.scm 
b/gnu/gnunet/scripts/download-store.scm
index 9a2ce1f..59ae42e 100644
--- a/gnu/gnunet/scripts/download-store.scm
+++ b/gnu/gnunet/scripts/download-store.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;;   This file is part of scheme-GNUnet, a partial Scheme port of GNUnet.
 ;;   Copyright (C) 2021 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/scripts/guix-stuff.scm 
b/gnu/gnunet/scripts/guix-stuff.scm
index 49b7822..1ec2931 100644
--- a/gnu/gnunet/scripts/guix-stuff.scm
+++ b/gnu/gnunet/scripts/guix-stuff.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
diff --git a/gnu/gnunet/scripts/publish-store.scm 
b/gnu/gnunet/scripts/publish-store.scm
index 49eea3e..62f408f 100644
--- a/gnu/gnunet/scripts/publish-store.scm
+++ b/gnu/gnunet/scripts/publish-store.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;;   This file is part of scheme-GNUnet, a partial Scheme port of GNUnet.
 ;;   Copyright (C) 2021 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/server.scm b/gnu/gnunet/server.scm
index ca1b1e2..e1dd031 100644
--- a/gnu/gnunet/server.scm
+++ b/gnu/gnunet/server.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;; This file is part of Scheme-GNUnet
 ;; Copyright © 2021, 2022 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/util/cmsg.scm b/gnu/gnunet/util/cmsg.scm
index 8379220..38e7257 100644
--- a/gnu/gnunet/util/cmsg.scm
+++ b/gnu/gnunet/util/cmsg.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;;   This file is part of scheme-GNUnet, a partial Scheme port of GNUnet.
 ;;   Copyright (C) 2021 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/util/struct.scm b/gnu/gnunet/util/struct.scm
index c4618b2..67743c7 100644
--- a/gnu/gnunet/util/struct.scm
+++ b/gnu/gnunet/util/struct.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;; This file is part of GNUnet.
 ;; Copyright (C) 2006-2021 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/util/time.scm b/gnu/gnunet/util/time.scm
index f53df1a..bea0062 100644
--- a/gnu/gnunet/util/time.scm
+++ b/gnu/gnunet/util/time.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;; This file is part of GNUnet.
 ;; Copyright (C) 2001-2013, 2018 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/utils/bv-slice.scm b/gnu/gnunet/utils/bv-slice.scm
index c171039..d7418f8 100644
--- a/gnu/gnunet/utils/bv-slice.scm
+++ b/gnu/gnunet/utils/bv-slice.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;;   This file is part of scheme-GNUnet, a partial Scheme port of GNUnet.
 ;;   Copyright (C) 2020, 2021, 2022 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/utils/cut-syntax.scm b/gnu/gnunet/utils/cut-syntax.scm
index bc4ee9d..269537a 100644
--- a/gnu/gnunet/utils/cut-syntax.scm
+++ b/gnu/gnunet/utils/cut-syntax.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;; This file is part of Scheme-GNUnet
 ;; Copyright © 2022 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/utils/decompress.scm b/gnu/gnunet/utils/decompress.scm
index 3dd0bf7..bcff6fa 100644
--- a/gnu/gnunet/utils/decompress.scm
+++ b/gnu/gnunet/utils/decompress.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;;; Zlib bindings, adapted from Guile-zlib
 ;;; Copyright © 2016, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2020 Mathieu Othacehe <othacehe@gnu.org>
diff --git a/gnu/gnunet/utils/hat-let.scm b/gnu/gnunet/utils/hat-let.scm
index 582d452..39d05a3 100644
--- a/gnu/gnunet/utils/hat-let.scm
+++ b/gnu/gnunet/utils/hat-let.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;;   This file is part of scheme-GNUnet, a partial Scheme port of GNUnet.
 ;;   Copyright (C) 2020--2022 GNUnet e.V.
 ;;
@@ -38,66 +39,65 @@
 
 (library (gnu gnunet utils hat-let (2 5))
   (export let^)
-  (import (except (rnrs base) _)
-         (rename (rnrs base) (_ rnrs:_)))
-
+  (import (for (rnrs base) run expand)
+         (for (rnrs syntax-case) expand))
   ;; A generalisation of let*, and-let*, receive, begin,
   ;; and generalised let for avoiding nesting.
   (define-syntax let^
-    (syntax-rules (? ! !! _ rnrs:_ <- <-- /o/)
-      ((: () code ...)
-       (let () code ...))
-      ;; if x, then return @code{(begin esc esc* ...)}
-      ((: ((? x esc esc* ...) etc ...) code ...)
-       (if x
-          (begin esc esc* ...)
-          (let^ (etc ...) code ...)))
-      ;; Define a procedure
-      ((: ((! (x . args) body ...) etc ...) code ...)
-       (let ((x (lambda args body ...)))
-        (let^ (etc ...)
-              code ...)))
-      ;; Define a procedure, and let the body of the procedure be
-      ;; a let^ form.  @var{docstring} is assumed to be a literal string.
-      ((: ((!^ (x . args) docstring bindings body ...) etc ...) code ...)
-       (let^ ((! (x . args)
-                docstring
-                (let^ bindings body ...))
-             etc ...)
-            code ...))
-      ;; Bind y to x
-      ((: ((! x y) etc ...) code ...)
-       (let ((x y))
-        (let^ (etc ...) code ...)))
-      ;; Assert it is true!
-      ((: ((!! x) etc ...) code ...)
-       (begin
-        (assert x)
-        (let^ (etc ...) code ...)))
-      ;; Throw a result away.  Allow both RnRS _ and unbound _.
-      ((: ((_ x) etc ...) code ...)
-       (begin
-        x
-        (let^ (etc ...) code ...)))
-      ((: ((rnrs:_ x) etc ...) code ...)
-       (begin
-        x
-        (let^ (etc ...) code ...)))
-      ;; Assign multiple values (from a thunk).
-      ;; This is a historical mistake, use <--
-      ;; instead (see mini changelog).
-      ((: ((<- (x ...) thunk) etc ...) code ...)
-       (call-with-values thunk
-        (lambda (x ...)
-          (let^ (etc ...)
-                code ...))))
-      ;; Assign multiple values.
-      ((: ((<-- dotted-variable-list exp) etc ...) code ...)
-       (call-with-values (lambda () exp)
-        (lambda dotted-variable-list
-          (let^ (etc ...) code ...))))
-      ;; Tail-call into a generalised let
-      ((: ((/o/ loop (x y) ...) etc ...) code ...)
-       (let loop ((x y) ...)
-        (let^ (etc ...)
-              code ...))))))
+    (lambda (s)
+      (syntax-case s (? ! !! <- <-- /o/)
+       ((: () code ...)
+        #'(let () code ...))
+       ;; if x, then return @code{(begin esc esc* ...)}
+       ((: ((? x esc esc* ...) etc ...) code ...)
+        #'(if x
+              (begin esc esc* ...)
+              (let^ (etc ...) code ...)))
+       ;; Define a procedure
+       ((: ((! (x . args) body ...) etc ...) code ...)
+        #'(let ((x (lambda args body ...)))
+            (let^ (etc ...)
+                  code ...)))
+       ;; Define a procedure, and let the body of the procedure be
+       ;; a let^ form.  @var{docstring} is assumed to be a literal string.
+       ((: ((!^ (x . args) docstring bindings body ...) etc ...) code ...)
+        #'(let^ ((! (x . args)
+                    docstring
+                    (let^ bindings body ...))
+                 etc ...)
+                code ...))
+       ;; Bind y to x
+       ((: ((! x y) etc ...) code ...)
+        #'(let ((x y))
+            (let^ (etc ...) code ...)))
+       ;; Assert it is true!
+       ((: ((!! x) etc ...) code ...)
+        #'(begin
+            (assert x)
+            (let^ (etc ...) code ...)))
+       ;; Throw a result away.  Allow both RnRS _ and unbound _.  We used to
+       ;; write two cases here for the RnRS _ and unbound _, but Racket Scheme
+       ;; forbids using _ as a literal, so do some syntax-case tricks instead.
+       ((: ((underscore x) etc ...) code ...)
+        (eq? (syntax->datum #'underscore) '_)
+        #'(begin
+            x
+            (let^ (etc ...) code ...)))
+       ;; Assign multiple values (from a thunk).
+       ;; This is a historical mistake, use <--
+       ;; instead (see mini changelog).
+       ((: ((<- (x ...) thunk) etc ...) code ...)
+        #'(call-with-values thunk
+            (lambda (x ...)
+              (let^ (etc ...)
+                    code ...))))
+       ;; Assign multiple values.
+       ((: ((<-- dotted-variable-list exp) etc ...) code ...)
+        #'(call-with-values (lambda () exp)
+            (lambda dotted-variable-list
+              (let^ (etc ...) code ...))))
+       ;; Tail-call into a generalised let
+       ((: ((/o/ loop (x y) ...) etc ...) code ...)
+        #'(let loop ((x y) ...)
+            (let^ (etc ...)
+                  code ...)))))))
diff --git a/gnu/gnunet/utils/netstruct.scm b/gnu/gnunet/utils/netstruct.scm
index 639d018..13ef3e3 100644
--- a/gnu/gnunet/utils/netstruct.scm
+++ b/gnu/gnunet/utils/netstruct.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;;   This file is part of scheme-GNUnet, a partial Scheme port of GNUnet.
 ;;   Copyright (C) 2020, 2021 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/utils/platform-enum.scm 
b/gnu/gnunet/utils/platform-enum.scm
index 5e984d2..221ef1d 100644
--- a/gnu/gnunet/utils/platform-enum.scm
+++ b/gnu/gnunet/utils/platform-enum.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;; This file is part of scheme-GNUnet.
 ;; Copyright (C) 2021 GNUnet e.V.
 ;;
diff --git a/gnu/gnunet/utils/tokeniser.scm b/gnu/gnunet/utils/tokeniser.scm
index 893ad21..71e00c8 100644
--- a/gnu/gnunet/utils/tokeniser.scm
+++ b/gnu/gnunet/utils/tokeniser.scm
@@ -1,3 +1,4 @@
+;#!r6rs
 ;; This file is part of scheme-GNUnet, a Scheme port of GNUnet .
 ;;  Copyright (C) 2010, 2016, 2017, 2021 GNUnet e.V.
 ;;
diff --git a/guix.scm b/guix.scm
index b5ff740..755bfcc 100644
--- a/guix.scm
+++ b/guix.scm
@@ -40,7 +40,7 @@
 (define-public scheme-gnunet
   (package
    (name "scheme-gnunet")
-   (version "0.2")
+   (version "0.3")
    (source (local-file %source-dir
                       #:recursive? #t
                       #:select? (git-predicate %source-dir)))
diff --git a/tests/config-expand.scm b/tests/config-expand.scm
index 510481d..22ac32b 100644
--- a/tests/config-expand.scm
+++ b/tests/config-expand.scm
@@ -83,14 +83,14 @@
   (expand->string (alist->query `(("var" "variable"
                                   (,(make-literal-position 3 8)))))
                  region=?/not "${var}"
-                 (list (#{make-${}-position}# 2 5))))
+                 (list (|make-${}-position| 2 5))))
 
 (test-equal "variable reference (${:-})"
   "iable"
   (expand->string (alist->query `(("var" "variable"
                                   (,(make-literal-position 3 8)))))
                  region=?/not "${var:-default}"
-                 (list (#{make-${:-}-position}# 2 5 7 14 '()))))
+                 (list (|make-${:-}-position| 2 5 7 14 '()))))
 
 ;; This is the expander, not the parser.
 (test-equal "expander does not care about delimiters ($)"
@@ -105,20 +105,20 @@
   (expand->string (alist->query `(("#@}!/" "variable"
                                   (,(make-literal-position 3 8)))))
                  region=?/not "${pre}#@}!/${post}"
-                 (list (#{make-${}-position}# 6 11))))
+                 (list (|make-${}-position| 6 11))))
 
 (test-equal "expander does not care about delimiters (${:-})"
   "iable"
   (expand->string (alist->query `(("#@}!/" "variable"
                                   (,(make-literal-position 3 8)))))
                  region=?/not "${pre}#@}!/${post}"
-                 (list (#{make-${:-}-position}# 6 11 13 15 '()))))
+                 (list (|make-${:-}-position| 6 11 13 15 '()))))
 
 (test-equal "undefined variable -> default (${:-})"
   "default"
   (expand->string (alist->query '(("var")))
                  region=?/not "var  default"
-                 (list (#{make-${:-}-position}# 0 3 5 12
+                 (list (|make-${:-}-position| 0 3 5 12
                         (list (make-literal-position 5 12))))))
 
 (test-equal "undefined variable -> default (${:-}, recursive)"
@@ -127,7 +127,7 @@
                                  ("var2" "default"
                                   (,(make-literal-position 0 7)))))
                  region=?/not "var  var2"
-                 (list (#{make-${:-}-position}# 0 3 5 9
+                 (list (|make-${:-}-position| 0 3 5 9
                         (list (make-$-position 5 9))))))
 
 ;; § Exceptions (undefined variable)
@@ -167,7 +167,7 @@
     (end 3))
   (expand->string/catch (alist->query '(("var")))
                        region=?/not "var"
-                       (list (#{make-${}-position}# 0 3))))
+                       (list (|make-${}-position| 0 3))))
 
 ;; Like @code{region=?}, but #(line start end) must be in @var{acceptable}.
 (define (region=?/restricted . acceptable)
@@ -199,7 +199,7 @@
     (start 9)
     (end 13))
   (expand->string/catch (alist->query `(("var1" "var1 = ${var2}"
-                                        (,(#{make-${}-position}# 9 13)))
+                                        (,(|make-${}-position| 9 13)))
                                        ("var2")))
                        (region=?/restricted
                         #("$var1" 1 5)
@@ -237,16 +237,16 @@
             #("$var" 1 4)))
   (expand->string/catch (alist->query `(("variable"
                                         "variable = ${var}"
-                                        (,(#{make-${}-position}# 13 16)))
+                                        (,(|make-${}-position| 13 16)))
                                        ("var"
                                         "var = the ${variable}"
-                                        (,(#{make-${}-position}# 12 20)))))
+                                        (,(|make-${}-position| 12 20)))))
                        (region=?/restricted
                         #("variable = ${var}" 13 16)
                         #("var = the ${variable}" 12 20)
                         #("$var" 1 4))
                        "$var"
-                       (list (#{make-$-position}# 1 4))))
+                       (list (|make-$-position| 1 4))))
 
 
 (test-equal "loop (${:-}, ${:-})"
@@ -257,10 +257,10 @@
   (expand->string/catch
    (alist->query `(("variable"
                    "variable = ${var:-}"
-                   (,(#{make-${:-}-position}# 13 16 18 18 '())))
+                   (,(|make-${:-}-position| 13 16 18 18 '())))
                   ("var"
                    "var = the ${variable:-}"
-                   (,(#{make-${:-}-position}# 12 20 22 22 '())))))
+                   (,(|make-${:-}-position| 12 20 22 22 '())))))
    (region=?/restricted
     #("variable = ${var:-}" 13 16)
     #("var = the ${variable:-}" 12 20)
@@ -280,7 +280,7 @@
     #("var = $var" 7 10)
     #("${does-not-exist:-$var}" 19 22))
    "${does-not-exist:-$var}"
-   (list (#{make-${:-}-position}# 2 16 18 22
+   (list (|make-${:-}-position| 2 16 18 22
          (list (make-$-position 19 22))))))
 
 ;; This should _not_ lead to an &expansion-loop-error.
diff --git a/tests/config-parser.scm b/tests/config-parser.scm
index 705132b..214157a 100644
--- a/tests/config-parser.scm
+++ b/tests/config-parser.scm
@@ -38,15 +38,15 @@
 (define (lipo=? x y)
   "Are two line position objects equal?"
   (cond/pos (x y)
-           (#{%-position?}# position:%)
-           (#{#-position?}# position:#)
+           (|%-position?| position:%)
+           (|#-position?| position:#)
            (=-position?
             position:variable-start
             position:variable-end
             position:=
             position:value-start
             position:value-end)
-           (#{[]-position?}#
+           (|[]-position?|
             position:section-name-start
             position:section-name-end)
            (@inline@-position?
@@ -67,39 +67,39 @@
 (test-lipo "empty line: tab" "\t" #t)
 
 (test-lipo "section name" "[hello]"
-          (#{make-[]-position}# 1 6))
+          (|make-[]-position| 1 6))
 (test-lipo "section name with spaces" "[  hello ]"
-          (#{make-[]-position}# 1 9))
+          (|make-[]-position| 1 9))
 ;; Used for some services.
 (test-lipo "section name with dots" "[hell.o.gnu]"
-          (#{make-[]-position}# 1 11))
+          (|make-[]-position| 1 11))
 ;; Allowed in upstream.
 (test-lipo "section name with leading space" "\t[hello]"
-          (#{make-[]-position}# 2 7))
+          (|make-[]-position| 2 7))
 (test-lipo "section name with more leading space" "\t [hello]"
-          (#{make-[]-position}# 3 8))
+          (|make-[]-position| 3 8))
 (test-lipo "section name with trailing space" "[hello]\t"
-          (#{make-[]-position}# 1 6))
+          (|make-[]-position| 1 6))
 (test-lipo "section name with more trailing space" "[hello]\t\t"
-          (#{make-[]-position}# 1 6))
+          (|make-[]-position| 1 6))
 
 (test-lipo "section name with missing ]" "[hell" #f)
 (test-lipo "section name with missing [" "hell]" #f)
 
-(test-lipo "empty % comment" "%" (#{make-%-position}# 0))
-(test-lipo "empty # comment" "#" (#{make-#-position}# 0))
-(test-lipo "% comment with text" "%text" (#{make-%-position}# 0))
-(test-lipo "# comment with text" "#text" (#{make-#-position}# 0))
+(test-lipo "empty % comment" "%" (|make-%-position| 0))
+(test-lipo "empty # comment" "#" (|make-#-position| 0))
+(test-lipo "% comment with text" "%text" (|make-%-position| 0))
+(test-lipo "# comment with text" "#text" (|make-#-position| 0))
 (test-lipo "% comment with leading whitespace" " %text"
-          (#{make-%-position}# 1))
+          (|make-%-position| 1))
 (test-lipo "# comment with leading whitespace" " #text"
-          (#{make-#-position}# 1))
+          (|make-#-position| 1))
 (test-lipo "% comment with more leading whitespace" " \t%text"
-          (#{make-%-position}# 2))
+          (|make-%-position| 2))
 (test-lipo "# comment with more leading whitespace" " \t#text"
-          (#{make-#-position}# 2))
-(test-lipo "# comment with %" "#%stuff" (#{make-#-position}# 0))
-(test-lipo "% comment with #" "%#stuff" (#{make-%-position}# 0))
+          (|make-#-position| 2))
+(test-lipo "# comment with %" "#%stuff" (|make-#-position| 0))
+(test-lipo "% comment with #" "%#stuff" (|make-%-position| 0))
 
 (test-lipo "= not allowed with empty variable name" "=value" #f)
 (test-lipo "even with spaces" "   =value" #f)
@@ -207,13 +207,13 @@ in-bounds for the string @var{line}."
   (cond ((%-position? pos)
         (and (<= 0 (position:% pos))
              (< (position:% pos) (string-length line))))
-       ((#{#-position?}# pos)
-        (and (<= 0 (#{position:#}# pos))
-             (< (#{position:#}# pos) (string-length line))))
+       ((|#-position?| pos)
+        (and (<= 0 (|position:#| pos))
+             (< (|position:#| pos) (string-length line))))
        ((=-position? pos)
         (and (<= 0 (position:= pos))
              (< (position:= pos) (string-length line))))
-       ((#{[]-position?}# pos)
+       ((|[]-position?| pos)
         (and (<= 0 (position:section-name-start pos)
                  (position:section-name-end pos))
              (< (position:section-name-end pos)
@@ -273,12 +273,12 @@ in-bounds for the string @var{line}."
 (define (expo:start expo)
   "Given a position object, return the starting position of
 the region of text it covers."
-  (cond ((#{${:-}-position?}# expo)
+  (cond ((|${:-}-position?| expo)
         ;; - 2: remove the ${ in ${VAR:-DEFAULT}
-        (- (#{expo:${:-}-name-start}# expo) 2))
-       ((#{${}-position?}# expo)
+        (- (|expo:${:-}-name-start| expo) 2))
+       ((|${}-position?| expo)
         ;; - 2: remove the ${ in ${VAR}
-        (- (#{expo:${}-name-start}# expo) 2))
+        (- (|expo:${}-name-start| expo) 2))
        (($-position? expo)
         ;; - 1: remove the $ in $VAR
         (- (expo:$-name-start expo) 1))
@@ -288,12 +288,12 @@ the region of text it covers."
 (define (expo:end expo)
   "Given a position object, return the end position (exclusive) of
 the region of text it covers."
-  (cond ((#{${:-}-position?}# expo)
+  (cond ((|${:-}-position?| expo)
         ;; + 1: add the } in ${VAR:-DEFAULT}
-        (+ 1 (#{expo:${:-}-value-end}# expo) 1))
-       ((#{${}-position?}# expo)
+        (+ 1 (|expo:${:-}-value-end| expo) 1))
+       ((|${}-position?| expo)
         ;; + 1: add the } in ${VAR}
-        (+ (#{expo:${}-name-end}# expo) 1))
+        (+ (|expo:${}-name-end| expo) 1))
        (($-position? expo)
         (expo:$-name-end expo))
        ((literal-position? expo)
@@ -304,12 +304,12 @@ the region of text it covers."
 If so, return the last object in @var{expos}.  Otherwise, return
 @code{#f}."
   (define (internally-contiguous? x)
-    (cond ((#{${:-}-position?}# x)
-          (let ((parts (#{expo:${:-}-value-parts}# x)))
+    (cond ((|${:-}-position?| x)
+          (let ((parts (|expo:${:-}-value-parts| x)))
             (if (null? parts)
                 x
                 (expo:contiguous? parts))))
-         ((#{${}-position?}# x) #t)
+         ((|${}-position?| x) #t)
          (($-position? x) #t)
          ((literal-position? x) #t)
          (#t (error "what is this madness?"))))
@@ -325,7 +325,7 @@ If so, return the last object in @var{expos}.  Otherwise, 
return
   (char-set->arbitrary (string->char-set "${:-}ab")))
 (define-syntax-rule ($choose-with-eq? x ...)
   ($choose ((cute eq? x) ($const x)) ...))
-(define $nested ($choose-with-eq? #f '#{${}}# '#{${:-}}#))
+(define $nested ($choose-with-eq? #f '|${}| '#{${:-}}#))
 
 (define-syntax-rule (true-if-parse-error exp exp* ...)
   (with-exception-handler
@@ -407,20 +407,20 @@ is invariant under translations."
        (($-position? pos)
         `($ ,(- (expo:$-name-start pos) start)
             ,(- (expo:$-name-end pos) start)))
-       ((#{${}-position?}# pos)
-        `(#{${}}#
-          ,(- (#{expo:${}-name-start}# pos) start)
-          ,(- (#{expo:${}-name-end}# pos) start)))
+       ((|${}-position?| pos)
+        `(|${}|
+          ,(- (|expo:${}-name-start| pos) start)
+          ,(- (|expo:${}-name-end| pos) start)))
        ;; HACK: work-around buggy Emacs parenthesis
        ;; matching detection.
-       ((#{${:-}-position?}# pos)
+       ((|${:-}-position?| pos)
         `(,(string->symbol "${:-}")
-          ,(- (#{expo:${:-}-name-start}# pos) start)
-          ,(- (#{expo:${:-}-name-end}# pos) start)
-          ,(- (#{expo:${:-}-value-start}# pos) start)
-          ,(- (#{expo:${:-}-value-end}# pos) start)
+          ,(- (|expo:${:-}-name-start| pos) start)
+          ,(- (|expo:${:-}-name-end| pos) start)
+          ,(- (|expo:${:-}-value-start| pos) start)
+          ,(- (|expo:${:-}-value-end| pos) start)
           ,(map (cute expansible->sexp <> start)
-                (#{expo:${:-}-value-parts}# pos))))))
+                (|expo:${:-}-value-parts| pos))))))
 
 (test-assert "start and end are respected"
   (quickcheck
@@ -477,12 +477,12 @@ is invariant under translations."
        (= (expansion-violation-position c) 5)))
 
 ;; Test unbraced variable expansion, nested.
-(test-expansion-error ("$ + }, nested" '#{${:-}}#)
+(test-expansion-error ("$ + }, nested" '|${:-}|)
   (c "$}")
   (and (empty-variable-violation? c)
        (eq? (empty-variable-kind c) '$)
        (= (expansion-violation-position c) 1)))
-(test-expansion-error ("$ + } + delimiter, nested" '#{${:-}}#)
+(test-expansion-error ("$ + } + delimiter, nested" '|${:-}|)
   ;; don't interpret this as the variable } expanded
   ;; folowed by a slash!
   (c "$}/")
@@ -494,32 +494,32 @@ is invariant under translations."
 (test-expansion-error ("empty braced variable" #f)
   (c "${}")
   (and (empty-variable-violation? c)
-       (eq? (empty-variable-kind c) '#{${}}#)
+       (eq? (empty-variable-kind c) '|${}|)
        (= (expansion-violation-position c) 2)))
 (test-expansion-error ("empty braced variable with empty default" #f)
   (c "${:-}")
   (and (empty-variable-violation? c)
-       (eq? (empty-variable-kind c) '#{${:-}}#)
+       (eq? (empty-variable-kind c) '|${:-}|)
        (= (expansion-violation-position c) 2)))
 (test-expansion-error ("empty braced variable with nonempty default" #f)
   (c "${:-def}")
   (and (empty-variable-violation? c)
-       (eq? (empty-variable-kind c) '#{${:-}}#)
+       (eq? (empty-variable-kind c) '|${:-}|)
        (= (expansion-violation-position c) 2)))
 (test-expansion-error ("unclosed braced variable" #f)
   (c "${")
   (and (missing-close-violation? c)
-       (eq? (missing-close-kind c) '#{${}}#)
+       (eq? (missing-close-kind c) '|${}|)
        (= (expansion-violation-position c) 2)))
 (test-expansion-error ("unclosed braced variable with text" #f)
   (c "${text")
   (and (missing-close-violation? c)
-       (eq? (missing-close-kind c) '#{${}}#)
+       (eq? (missing-close-kind c) '|${}|)
        (= (expansion-violation-position c) 6)))
 (test-expansion-error ("unclosed braced variable with default" #f)
   (c "${text:-default")
   (and (missing-close-violation? c)
-       (eq? (missing-close-kind c) '#{${:-}}#)
+       (eq? (missing-close-kind c) '|${:-}|)
        (= (expansion-violation-position c) 15)))
 (test-expansion-error ("unclosed braced variable and weird character after -" 
#f)
   (c "${text:@") ; <-- allowed in upstream
@@ -541,21 +541,21 @@ is invariant under translations."
 (test-expansion "$TMP/gnunet_arm.sock"
                (make-$-position 1 4)
                (make-literal-position 4 20))
-(test-expansion "${TMP}" (#{make-${}-position}# 2 5))
+(test-expansion "${TMP}" (|make-${}-position| 2 5))
 (test-expansion "${TMP}/gnunet_arm.sock"
-               (#{make-${}-position}# 2 5)
+               (|make-${}-position| 2 5)
                (make-literal-position 6 22))
 (test-expansion "${TMP:-/tmp}"
-               (#{make-${:-}-position}# 2 5 7 11
+               (|make-${:-}-position| 2 5 7 11
                 (list (make-literal-position 7 11))))
 (test-expansion "${TMP:-/tmp}/gnunet_arm.sock"
-               (#{make-${:-}-position}# 2 5 7 11
+               (|make-${:-}-position| 2 5 7 11
                 (list (make-literal-position 7 11)))
                (make-literal-position 12 28))
 (test-expansion "some ${STUFF:-${TMP:-/tmp}/etc$etera}/other"
                (make-literal-position 0 5)
-               (#{make-${:-}-position}# 7 12 14 36
-                (list (#{make-${:-}-position}# 16 19 21 25
+               (|make-${:-}-position| 7 12 14 36
+                (list (|make-${:-}-position| 16 19 21 25
                        (list (make-literal-position 21 25)))
                       (make-literal-position 26 30)
                       (make-$-position 31 36)))
diff --git a/tests/form.scm b/tests/form.scm
index 28f5cc2..85e0b54 100644
--- a/tests/form.scm
+++ b/tests/form.scm
@@ -33,8 +33,8 @@
 (test-decode "two fields" "x=y&z=w" '(("x" . "y") ("z" . "w")))
 (test-decode "spaces" "x+x+x=z+z+z" '(("x x x" . "z z z")))
 (test-decode "forgot to encode spaces" "x x x=z z z" #f)
-(test-decode "%-encoding" "x%01%02=x%03z" '(("x\x01\x02" . "x\x03z")))
-(test-decode "%-encoding (NULL)" "%00x%01%02=x%03z" '(("\x00x\x01\x02" . 
"x\x03z")))
+(test-decode "%-encoding" "x%01%02=x%03z" '(("x\u0001\u0002" . "x\u0003z")))
+(test-decode "%-encoding (NULL)" "%00x%01%02=x%03z" '(("\u0000x\u0001\u0002" . 
"x\u0003z")))
 (test-decode "= in keys and values" "x%3Dz=0%3D1" '(("x=z" . "0=1")))
 
 (test-decode "zero-length values" "x=&y=" '(("x" . "") ("y" . "")))
diff --git a/tests/lost-and-found.scm b/tests/lost-and-found.scm
index 908f72b..91942bd 100644
--- a/tests/lost-and-found.scm
+++ b/tests/lost-and-found.scm
@@ -154,7 +154,7 @@
     ;; also allowed.
     (memq result '(blocking ()))))
 
-(define add-found! #{ add-found!}#)
+(define add-found! | add-found!|)
 
 ;; There is no rule against the GC hook being called from within the GC hook,
 ;; or the GC hook being called in parallel from another thread running the
diff --git a/tests/network-size.scm b/tests/network-size.scm
index 7e3e352..ddeef8b 100644
--- a/tests/network-size.scm
+++ b/tests/network-size.scm
@@ -26,7 +26,7 @@
        (gnu gnunet utils cut-syntax)
        (only (rnrs base)
              assert)
-       (prefix (gnu gnunet nse client) #{nse:}#)
+       (prefix (gnu gnunet nse client) |nse:|)
        (gnu gnunet nse struct)
        (only (gnu gnunet utils bv-slice)
              slice-length make-slice/read-write)
@@ -36,7 +36,7 @@
        (ice-9 match)
        (ice-9 suspendable-ports)
        (ice-9 control)
-       (prefix (rnrs hashtables) #{rnrs:}#)
+       (prefix (rnrs hashtables) |rnrs:|)
        (srfi srfi-1)
        (srfi srfi-26)
        (srfi srfi-43)
@@ -49,7 +49,7 @@
 (test-assert "close, not connected --> all fibers stop, no callbacks called"
   (close-not-connected-no-callbacks
    "nse" nse:connect nse:disconnect!
-   #:rest (list #:disconnected #{don't-call-me}#)))
+   #:rest (list #:disconnected |don't-call-me|)))
 
 (test-assert "garbage collectable"
   (garbage-collectable "nse" nse:connect))
@@ -204,7 +204,7 @@
       (lambda (somewhere)
        (define where (in-vicinity somewhere "sock.et"))
        (define config (trivial-service-config "nse" where))
-       (define (#{don't-call-me}# . rest)
+       (define (|don't-call-me| . rest)
          (error "oops ~a" rest))
        (define connected? #f)
        (define disconnected? #f)
@@ -223,7 +223,7 @@
        (define server (nse:connect config #:spawn spawn
                                    #:connected connected
                                    #:disconnected disconnected
-                                   #:updated #{don't-call-me}#))
+                                   #:updated |don't-call-me|))
        (define listening (socket AF_UNIX SOCK_STREAM 0))
        (make-nonblocking! listening)
        (bind listening AF_UNIX where)
diff --git a/tests/utils.scm b/tests/utils.scm
index ac43e6f..40329c9 100644
--- a/tests/utils.scm
+++ b/tests/utils.scm
@@ -19,11 +19,11 @@
   #:use-module (srfi srfi-8)
   #:use-module (ice-9 match)
   #:use-module (ice-9 weak-vector)
-  #:use-module ((rnrs hashtables) #:prefix #{rnrs:}#)
+  #:use-module ((rnrs hashtables) #:prefix |rnrs:|)
   #:use-module ((rnrs arithmetic bitwise)
                #:select (bitwise-ior))
   #:use-module ((rnrs base) #:select (assert))
-  #:use-module ((fibers) #:prefix #{fibers:}#)
+  #:use-module ((fibers) #:prefix |fibers:|)
   #:autoload (fibers conditions) (make-condition signal-condition! wait)
   #:autoload (fibers timers) (sleep)
   #:autoload (gnu gnunet config db)
@@ -39,7 +39,7 @@
                             make-nonblocking!
                             call-with-absent-service
                             trivial-service-config
-                            #{don't-call-me}#
+                            |don't-call-me|
                             close-not-connected-no-callbacks
                             garbage-collectable
                             disconnect-after-eof-after-connected
@@ -210,7 +210,7 @@ cannot be connected to."
      (define config (trivial-service-config what where))
      (proc config))))
 
-(define (#{don't-call-me}# . rest)
+(define (|don't-call-me| . rest)
   (error "oops ~a" rest))
 
 (define* (close-not-connected-no-callbacks service connect disconnect!
@@ -224,8 +224,8 @@ callbacks were not called.  Also verify that all spawned 
fibers exit."
       service
       (lambda (config)
        (define server (apply connect config #:spawn spawn
-                             #:connected #{don't-call-me}#
-                             #:disconnected #{don't-call-me}#
+                             #:connected |don't-call-me|
+                             #:disconnected |don't-call-me|
                              rest))
        ;; Sleep to give the client fibers a chance to mistakenly
        ;; call a callback.
@@ -252,8 +252,8 @@ fiber exit and the fibers do not keep a reference to the 
service object."
        (lambda (config)
          (define reference
            (weak-vector
-            (connect config #:spawn spawn #:connected #{don't-call-me}#
-                     #:disconnected #{don't-call-me}#)))
+            (connect config #:spawn spawn #:connected |don't-call-me|
+                     #:disconnected |don't-call-me|)))
          ;; Sleep to give the client fibers a chance to mistakenly
          ;; call a callback and to allow the fibers to actually stop.
          (let loop ((delay 0.0005))

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]