Planet GNU

Aggregation of development blogs from the GNU Project

September 06, 2018

indent @ Savannah

GNU indent 2.2.12

GNU indent version 2.2.12 (signature) has just been releases, the first release GNU indent saw in eight years.

Highlights include:

  • New options:
    • -pal / --pointer-align-left and -par / --pointer-align-right
    • -fnc / --fix-nested-comment
    • -gts / --gettext-strings
    • -slc / --single-line-conditionals
    • -as / --align-with-spaces
    • -ut / --use-tabs
    • -nut / --no-tabs
    • -sar / --spaces-around-initializers
    • -ntac / --dont-tab-align-comments
  • C99 and C11 keywords and typeof are now recognised.
  • -linux preset now includes -nbs.
  • -kr preset now includes -par.
  • Lots of bug fixes

I’d like to thank all of the contributors of this release, most importantly:

  • Tim Hentenaar for all of the fixes and refactoring he’s done in his branch
  • Petr Písař, who maintains GNU indent in Red Hat and its derivatives, who’s submitted a lot of fixes and kept supporting users on the mailing list when I couldn’t
  • Santiago Vila, who maintains GNU indent in Debian
  • Daniel P. Valentine, who helped me a lot when I initially took over the maintenance of GNU indent
  • And lots of others who submitted their patches

06 September, 2018 11:33AM by Andrej Shadura

August 13, 2018

libredwg @ Savannah

libredwg-0.6 released [alpha]

See https://www.gnu.org/software/libredwg/

API breaking changes:
* Removed dwg_obj_proxy_get_reactors(), use dwg_obj_get_reactors() instead.
* Renamed SORTENTSTABLE.owner_handle to SORTENTSTABLE.owner_dict.
* Renamed all -as-rNNNN program options to --as-rNNNN.

Other newsworthy changes:
* Removed all unused type-specific reactors and xdicobjhandle fields,
use the generic object and entity fields instead.
* Added signed BITCODE_RLd and BITCODE_BLd (int32_t) types.
* Added unknown_bits field to all UNSTABLE/DEBUGGING classes.
* Custom CFLAGS are now honored.
* Support for GNU parallel and coreutils timeout logfile and picat processing.

Important bugfixes:
* Fixed previously empty strings for r2007+ for some objects and entities (#34).
* Fixed r2010+ picture size calculation (DXF 160, 310), leading to wrong entity offsets.
* Added more checks for unstable objects: empty handles, controls, overflows, isnan.
* Fixed some common_entity_data, mostly with non-indexed colors and gradient filled HATCH
(#27, #28, #31)
* Fixed some proper relative handles, which were previously treated as NULL handle.
* Fixed writing TV strings, now the length includes the final \0 char.
* Fixed the initial minimal hash size, fixing an endless loop on very small
(truncated) DWG's (<1000 bytes).
* Much less memory leaks.
* Improved free, i.e. no more double free with EED data. (#33)
* Better perl bindings build support on Windows, prefer local dwg.h over
installed dwg.h on testing (#29).
* Fixed dejagnu compilation on C11 by using -fgnu89-inline (#2)

New features:
* Added unstable support for the objects ASSOCDEPENDENCY, ASSOCPLANESURFACEACTIONBODY,
DBCOLOR, DIMASSOC, DYNAMICBLOCKPURGEPREVENTER, HELIX, LIGHT, PERSSUBENTMANAGER,
UNDERLAYDEFINITION and the entities MULTILEADER, UNDERLAY.
* Added getopt_long() support to all programs, position independent options.
* Implemented examples/unknown to find field layouts of unknown objects.
With bd and bits helpers to decode unknowns.
Now with a http://picat-lang.org helper. See also HACKING and savannah News.
* Implemented parsing ACIS version 2 to the binary SAB format.
* Added all missing dwg_object_to_OBJECT() functions for objects.
* Added dwg_ent_minsert_set_num_cols(), dwg_ent_minsert_set_num_rows()
* Added --disable-dxf, --enable--debug configure options. With debug there are many
more unstable objects available.
* Added libredwg.pc (#30)
* Added valgrind supressions for known darwin/glibc leaks.
* Changed and clarified the semver version numbering on development checkouts with
major.minor[.patch[.build.nonmastercommits-gittag]]. See HACKING.

Here are the compressed sources:
http://ftp.gnu.org/gnu/libredwg/libredwg-0.6.tar.gz (9.4MB)
http://ftp.gnu.org/gnu/libredwg/libredwg-0.6.tar.xz (3.5MB)

https://github.com/LibreDWG/libredwg/releases/tag/0.6 (also window binaries)

Here are the GPG detached signatures[*]:
http://ftp.gnu.org/gnu/libredwg/libredwg-0.6.tar.gz.sig
http://ftp.gnu.org/gnu/libredwg/libredwg-0.6.tar.xz.sig

Use a mirror for higher download bandwidth:
https://www.gnu.org/order/ftp.html

Here are the SHA256 checksums:

995da379a27492646867fb490ee406f18049f145d741273e28bf1f38cabc4d5c libredwg-0.6.tar.gz
6d525ca849496852f62ad6a11b7b801d0aafd1fa1366c45bdb0f11a90bd6f878 libredwg-0.6.tar.xz
21d9619c6858ea25f95a9b6d8d6946e387309023ec17810f4433d8f61e8836af libredwg-0.6-win32.zip
d029d35715b8d86a68f8dacc7fdb5a5ac6405bc0a1b3457e75fc49c6c4cf6e06 libredwg-0.6-win64.zip

[*] Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact. First, be sure to download both the .sig file
and the corresponding tarball. Then, run a command like this:

gpg --verify libredwg-0.6.tar.gz.sig

If that command fails because you don't have the required public key,
then run this command to import it:

gpg --keyserver keys.gnupg.net --recv-keys B4F63339E65D6414

and rerun the 'gpg --verify' command.

13 August, 2018 09:48AM by Reini Urban

August 11, 2018

unifont @ Savannah

Unifont 11.0.02 Released

10 August 2018

Unifont 11.0.02 is now available. This is an interim release, with another released planned in the autumn of 2018. The main addition in this release is David Corbett's contribution of the over 600 glyphs in the Sutton SignWriting Unicode block.

Download this release at:

https://ftpmirror.gnu.org/unifont/unifont-11.0.02/

or if that fails,

ftp://ftp.gnu.org/gnu/unifont/unifont-11.0.02/

Enjoy!

Paul Hardy

11 August, 2018 01:53PM by Paul Hardy

July 27, 2018

libredwg @ Savannah

Revealing unknown DWG classes (2)

I've added more solver code and a more detailled explanation to the HACKING file, to find the binary layout of unknown DWG classes, in reference to public docs and generated DXF files. See https://savannah.gnu.org/forum/forum.php?forum_id=9197 for the first part.

So this is now the real AI part of examples/unknown. I've added the spec of the following classes in the meantime, in various states of completeness:
ASSOCDEPENDENCY, DIMASSOC, ASSOCACTION, the 4 SURFACE classes, HELIX, UNDERLAY and UNDERLAYDEFINITION (PDF, DGN, DWF), ASSOCALIGNEDDIMACTIONBODY, DYNAMICBLOCKPURGEPREVENTER, DBCOLOR, PERSSUBENTMANAGER, ASSOC2DCONSTRAINTGROUP, EVALUATION_GRAPH, ASSOCPERSSUBENTMANAGER, ASSOCOSNAPPOINTREFACTIONPARAM, ASSOCNETWORK, SUNSTUDY.
Many more are in work, as with the picat solver and backtracker I can now create the most promising solutions at scale.

There's a lot of code related to examples/unknown to automatically
find the field layout of yet unknown classes. At first you need
DWG/DXF pairs of unknown entities or objects and put them into
test/test-data/. At creation take care to create uniquely identifiable
names and numbers, not to create DXF fields all with the same value 0.
Then you'll never known which field in the DWG is which.

Then run make -C examples regen-unknown, which does this:

run ./logs.sh to create -v5 logfiles with the binary blobs for all
UNKNOWN_OBJ and UNKNOWN_ENT instances in those DWG's.

Then the perl script log_unknown.pl creates the include file
alldwg.inc adding all those blobs.

The next perl script log_unknown_dxf.pl parses alldwg.inc and looks
for matching DXF files, and creates the 3 include files alldxf_0.inc
with the matching blob data from alldwg.inc, alldxf_1.inc with the
matching field types and values from the DXF and alldxf_2.inc to
workaround some static initialization issues in the C file.

Next run make unknown, which does this:

Compiles and runs examples/unknown, which creates for a every string
value in the DXF some bits representations and tries to find them in
the UNKNOWN blobs. If it doesn't find them, either the string-to-bit
conversion lost too much precision to be able to find them, esp. with
doubles, or we have a different problem. make unknown creates a big
log file unknown-`git describe`.log in which you can see the
individual statistics and initial layout guesses.

E.g.
42/230=18.3%
possible: [34433333344443333334444333333311xxxxxxxxxx3443333...
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
11 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 11 1]

The x stands for a fixed field, the numbers and a dot for the number
of variants this bit is used for (the dot for >9) and a space means
this is a hole for a field which is not represented as DXF field, i.e.
a FIELD_*(name, 0) in the dwg.spec with DXF group code 0.

unknown also creates picat data files in examples/ which are then used with
picat from http://picat-lang.org/ to enhance the search for the best layout
guess for each particular class. picat is a nice mix of a functional
programming tool with an optional constraint solver. The first part in
the picat process does almost the same as unknown.c, finding the fixed
layout, possible variants and holes in a straight-forward functional
fashion. This language is very similar to erlang, untyped haskell or prolog.
The second optimization part of picat uses a solver with
constraints to improve the layout of the found variants and holes to
find the best guess for the needed dwg.spec layout.
Note that picat list and array indices are one-based, so you need to
subtract 1 from each found offset. 1-32 mean the bits 0-31.

The field names are filled in by examples/log_unknown_dxf.pl automatically.
We could parse dwg.spec for this, but for now I went with a manual solution,
as the number of unknown classes gets less, not more.

E.g. for ACAD_EVALUATION_GRAPH.pi with a high percentage from the above
possible layout, it currently produces this:

Definite result:
----------------
HOLE([1,32],01000000010100000001010000000110) len = 32
FIELD_BL (edge_flags, 93); // 32 [33,42]
HOLE([43,52],0100000001) len = 10
FIELD_BL (node_edge1, 92); // -1 [53,86]
FIELD_BL (node_edge2, 92); // -1 [87,120]
FIELD_BL (node_edge3, 92); // -1 [121,154]
FIELD_BL (node_edge4, 92); // -1 [155,188]
HOLE([189,191],100) len = 3
FIELD_H (parenthandle, 330); // 6.0.0 [192,199]
FIELD_H (evalexpr, 360); // 3.2.2E2 [200,223]
HOLE([224,230],1100111) len = 7
----------------
Todo: 32 + 178 = 210, Missing: 20
FIELD_BL (has_graph, 96); // 1 0100000001 [[1,10],[11,20],[21,30],[43,52]]
FIELD_BL (unknown1, 97); // 1 0100000001 [[1,10],[11,20],[21,30],[43,52]]
FIELD_BL (nodeid, 91); // 0 10 [[2,3],[10,11],[12,13],[20,21],[22,23],[31,32],[44,45],[52,53],[189,190],[225,226]]
FIELD_BL (num_evalexpr, 95); // 1 0100000001 [[1,10],[11,20],[21,30],[43,52]]

The next picat steps do automate the following reasoning:

The first hole 1-32 is filled by the 3 1 values from BL96, BL97 and
BL95, followed by the 0 value from BL91. The second hole is clearly
another unknown BL with value 1. The third hole at 189-191
is padding before the handle stream, and can be ignored. This is from
a r2010 file, which has seperate handle and text streams. The last
hole 224-230 could theoretically hold almost another unknown handle, but
practically it's also just padding. The last handles are always optional
reactors and the xdicobject handle for objects, and 7 bits is not enough
for a handle value. A code 4 null-handle would be 01000000.

You start by finding the DXF documentation and the ObjectARX header
file of the class, to get the names and description of the class.

You add the names and types to dwg.h and dwg.spec, change the class
type in classes.inc to DEBUGGING or UNTESTED. With DEBUGGING add the
-DDEBUG_CLASSES flag to CFLAGS in src/Makefile and test the dwg's with
programs/dwgread -v4. Some layouts are version dependent, some need
a REPEAT loop or vector with a num_field field.

The picat constraints module examples/unknown.pi is still being worked
and is getting better and better identifying all missing classes
automatically. The problem with AutoCAD DWG's is that everybody can
add their own custom classes as ObjectARX application, and that
reverse-engineering them never stops. So it has to be automated somehow.

27 July, 2018 09:55AM by Reini Urban

July 13, 2018

Revealing unknown DWG classes

I implemented three major buzzwords today in some trivial ways.

  • massive parallel processing
  • asynchronous processing
  • machine-learning: a self-improving program

The problem is mostly trivial, and the solutions also. I need to
reverse-engineer a binary closed file-format, but got some hints from
a related ASCII file-format, DWG vs DXF.

I have several pairs of files, and a helper library to convert the
ASCII data to the binary representation in the DWG. There are various
variants for most data values, and several fields are unknown, they
are not represented in the DXF, only in the DWG. So I wrote an example
program called unknown, which walks over all unknown binary blobs and
tries to find the matching known values. If a bitmap is found only
once, we have a unique match, if it's found multiple times, we have
several possibilities the fields could be laid out or if it is not
found, we have a problem, the binary representation is wrong.

When preparing the program called unknown, I decided to parse to log
files in perl and store the unknown blobs as C `.inc` files, to be
compiled into unknown as array of structs.

Several DWG files are too large and either produce too large log files
filling my hard disc or cannot be parsed properly leading to overly huge
mallocs and invalid loops, so these files need to be killed after some
timeout of 10s.

So instead of

for d in test/test-data/*.dwg; do
log=`basename "$d" .dwg`.log
echo $d
programs/dwgread -v5 "$d" 2>$log
done

I improved it to

for d in test/test-data/*.dwg; do
log=`basename "$d" .dwg`.log
echo $d
programs/dwgread -v5 "$d" 2>$log &
(sleep 10s; kill %1 2>/dev/null) &
done

The dwgread program is put into the background, with %1 being its PID,
and `sleep 10s; kill %1` implements a simple timeout via bash, not via
perl. Both processes are in the background and the second optionally
kills the first. So with some 100 files in test-data, this is
**massive parallelization**, as the dwgread processes immediately
return, and it's output appears some time later, when the process is
finished or killed. So it's also **asynchronous**, as I cannot see the
result of each individual process anymore, which returned SUCCESS,
which returned ERROR and which was killed. You need to look at the
logfiles, similar to debugging hard real-world problems, like
real-time controllers. This processing is also massively faster, but
mostly I did it to implement a simple timeout mechanism in bash.

The next problem with the background processing is that I don't know
when all the background processes stopped, so I had to add one more
line:

while pgrep dwgread; do sleep 1; done

Otherwise I would continue processing the logfiles, creating my C
structs from these, but some logfiles would still grow and I would
miss several unknown classes.

The processed data is ~10GB gigabyte large, so massive parallel
processing saves some time. The log files are only temporarily needed
to extract the binary blobs and can be removed later.

Eventually I turnned off the massive parallelization using another
timeout solution:

for d in test/test-data/*.dwg; do
log=`basename "$d" .dwg`.log
echo $d
timeout -k 1 10 programs/dwgread -v5 "$d" 2>$log
done

I could also use GNU [parallel](https://www.gnu.org/software/parallel/parallel_tutorial.html) with timeout instead to re-enable the
parallelization though and collect the async results properly.

parallel timeout 10 programs/dwgread -v5 {} \2\>{/.}.log ::: test/test-data/*.dwg
cd test/test-data
parallel timeout 10 ../../programs/dwgread -v5 {} \2\>../../{/.}_{//}.log ::: \*/\*.dwg

So now the other interesting problem, the machine-learning part.
Let me show you first some real data I'm creating.

Parsing the logfiles and DXF data via some trivial perl scripts creates an array of such structs:

{ "ACDBASSOCOSNAPPOINTREFACTIONPARAM", "test/test-data/example_2000.dxf", 0x393, /* 473 */
"\252\100\152\001\000\000\000\000\000\000\074\057\340\014\014\200\345\020\024\126\310\100", 176, NULL },

/* ACDBASSOCOSNAPPOINTREFACTIONPARAM 393 in test/test-data/example_2000.dxf */
static const struct _unknown_field unknown_dxf_473[] = {
{ 5, "393", NULL, 0, BITS_UNKNOWN, {-1,-1,-1,-1,-1} },
{ 330, "392", NULL, 0, BITS_UNKNOWN, {-1,-1,-1,-1,-1} },
{ 100, "AcDbAssocActionParam", NULL, 0, BITS_UNKNOWN, {-1,-1,-1,-1,-1} },
{ 90, "0", NULL, 0, BITS_UNKNOWN, {-1,-1,-1,-1,-1} },
{ 1, "", NULL, 0, BITS_UNKNOWN, {-1,-1,-1,-1,-1} },
{ 100, "AcDbAssocCompoundActionParam", NULL, 0, BITS_UNKNOWN, {-1,-1,-1,-1,-1} },
{ 90, "0", NULL, 0, BITS_UNKNOWN, {-1,-1,-1,-1,-1} },
{ 90, "0", NULL, 0, BITS_UNKNOWN, {-1,-1,-1,-1,-1} },
{ 90, "1", NULL, 0, BITS_UNKNOWN, {-1,-1,-1,-1,-1} },
{ 360, "394", NULL, 0, BITS_UNKNOWN, {-1,-1,-1,-1,-1} },
{ 90, "0", NULL, 0, BITS_UNKNOWN, {-1,-1,-1,-1,-1} },
{ 90, "0", NULL, 0, BITS_UNKNOWN, {-1,-1,-1,-1,-1} },
{ 330, "0", NULL, 0, BITS_UNKNOWN, {-1,-1,-1,-1,-1} },
{ 100, "ACDBASSOCOSNAPPOINTREFACTIONPARAM", NULL, 0, BITS_UNKNOWN, {-1,-1,-1,-1,-1} },
{ 90, "0", NULL, 0, BITS_UNKNOWN, {-1,-1,-1,-1,-1} },
{ 90, "1", NULL, 0, BITS_UNKNOWN, {-1,-1,-1,-1,-1} },
{ 40, "-1.0", NULL, 0, BITS_UNKNOWN, {-1,-1,-1,-1,-1} },
{ 0, NULL, NULL, 0, BITS_UNKNOWN, {-1,-1,-1,-1,-1}}
};

I prefer the data to be compiled in, so it's not on the heap but in
the .DATA segment as const. And from this data, the programs creates
this log:

ACDBASSOCOSNAPPOINTREFACTIONPARAM: 0x393 (176) test/test-data/example_2000.dxf
=bits: 010101010000001001010110100000000000000000000000000000000000000000000
0000000000000111100111101000000011100110000001100000000000110100111000010000
0101000011010100001001100000010
handle 0.2.393 (0)
search 5:"393" (24 bits of type HANDLE [0]) in 176 bits
=search (0): 010000001100000011001001
handle 4.2.392 (0)
search 330:"392" (24 bits of type HANDLE [1]) in 176 bits
=search (0): 010000101100000001001001
handle 8.0.0 (393)
search 330:"392" (8 bits of type HANDLE [1]) in 176 bits
=search (0): 00000001
330: 392 [HANDLE] found 3 at offsets 75-82, 94, 120 /176
100: AcDbAssocActionParam
search 90:"0" (2 bits of type BL [3]) in 176 bits
=search (0): 00
90: 0 [BL] found >5 at offsets 8-9, 9, 10, 11, 12, ... /176
search 1:"" (2 bits of type TV [4]) in 176 bits
=search (0): 00
1: [TV] found >5 at offsets 8-9, 9, 10, 11, 12, ... /176
100: AcDbAssocCompoundActionParam
search 90:"0" (2 bits of type BL [6]) in 176 bits
=search (0): 00
90: 0 [BL] found >5 at offsets 8-9, 9, 10, 11, 12, ... /176
search 90:"0" (2 bits of type BL [7]) in 176 bits
=search (0): 00
90: 0 [BL] found >5 at offsets 8-9, 9, 10, 11, 12, ... /176
search 90:"1" (10 bits of type BL [8]) in 176 bits
=search (0): 0000001000
field 90 already found at 176
search 90:"1" (10 bits of type BL [8]) in 7 bits
=search (169): 0000001000
search 90:"1" (10 bits of type BS [8]) in 7 bits
=search (169): 0000001000
handle 3.2.394 (0)
search 360:"394" (24 bits of type HANDLE [9]) in 176 bits
=search (0): 010011001100000000101001
handle 2.2.394 (393)
search 360:"394" (24 bits of type HANDLE [9]) in 176 bits
=search (0): 010001001100000000101001
handle 3.2.394 (393)
search 360:"394" (24 bits of type HANDLE [9]) in 176 bits
=search (0): 010011001100000000101001
handle 4.2.394 (393)
search 360:"394" (24 bits of type HANDLE [9]) in 176 bits
=search (0): 010000101100000000101001
handle 5.2.394 (393)
search 360:"394" (24 bits of type HANDLE [9]) in 176 bits
=search (0): 010010101100000000101001
handle 6.0.0 (393)
search 360:"394" (8 bits of type HANDLE [9]) in 176 bits
=search (0): 00000110
360: 394 [HANDLE] found 2 at offsets 109-116, 122-129 /176
search 90:"0" (2 bits of type BL [10]) in 176 bits
=search (0): 00
90: 0 [BL] found >5 at offsets 8-9, 9, 10, 11, 12, ... /176
search 90:"0" (2 bits of type BL [11]) in 176 bits
=search (0): 00
90: 0 [BL] found >5 at offsets 8-9, 9, 10, 11, 12, ... /176
handle 4.0.0 (0)
search 330:"0" (8 bits of type HANDLE [12]) in 176 bits
=search (0): 00000010
330: 0 [HANDLE] found 2 at offsets 8-15, 168-175 /176
100: ACDBASSOCOSNAPPOINTREFACTIONPARAM
search 90:"0" (2 bits of type BL [14]) in 176 bits
=search (0): 00
90: 0 [BL] found >5 at offsets 8-9, 9, 10, 11, 12, ... /176
search 90:"1" (10 bits of type BL [15]) in 176 bits
=search (0): 0000001000
field 90 already found at 168
search 90:"1" (10 bits of type BL [15]) in 7 bits
=search (169): 0000001000
search 90:"1" (10 bits of type BS [15]) in 7 bits
=search (169): 0000001000
search 40:"-1.0" (66 bits of type BD [16]) in 176 bits
=search (0): 000000000000000000000000000000000000000000000000001111001111010000
40: -1.0 [BD] found 1 at offset 32-97 /176
66/176=37.5%
possible: [ 8....8187 7......xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxx..81 77 7....8118.........9211 77 7..7 7...7 7..7
7..7 77 xxxxxxxx]

It converts each blob into bits of 0 or 1, converts each DXF field to
some binary types, also logged as bits, then some handwritten **membits()**
search similar to `memmem()` or `strstr()` searches the bitmask in the blob
and records all found instances. In the printed **possible [ ]** array the
xxxx represents unique finds, `1-9` and `.` multiple finds and space
holes for unknown fields, not represented in the DXF, DWG only
fields. These can be guessed from the documentation and some thinking.

Most fields itself are specialized run-length bit-encoded, so a 0.0
needs only 2 bits 10, an empty string needs the same 2 bits 10, the
number 0 as BL (bitlong) needs 2 bits 10, and 90:"1", i.e. the number
1 as BL (bitlong) needs 10 bits 0010000000. So you really need unique
values in the sample data to get enough unique finds. In this bad
example, which so far really is the best example in my data I get 37.5% of
exact matches, with 6x 90:0, i.e. 6 times the number 0. You won't know
which binary 00 is the the real number 0. Conversion from
strings to floats is also messy and inprecise. While representing a
double as 64 binary bits is always properly defined in Intel chips,
the reverse is not true, respresenting the string as double can lead
to various representations and I search various variants cutting off
the mantissa precision to find our matching binary double.

What I'll be doing then is to shuffle the values a bit in the DXF to
represent uniquely identifiable values, like 1,2,3,4,5,6, convert this
DXF back to a DWG, and analyse this pair again. This is e.g. what I did to
uniquely identify the position of the header variables in earlier DWG
versions.

Bad percentages are not processed anymore and removed from the
program. So I create a constant feedback loop, with the program
creating these logs, and a list of classes to skip and permute to
create better matches. I could do this within my program for a
complete self-learning process, but I rather create logfiles,
re-analyse them, adjust the data structures shown above, re-compile
the program and run it again. Previously I did such a re-compilation
step via shared modules, which I can compile from within the program,
dlload and dlunload it, but this is silly. Simple C structs on disc
are easier to follow than shared libs in memory. I also store the
intermediate steps in git, so I can check how the progress of the
self-improvement evolves, if at all. Several such objects were getting
worse and worse deviating to 0%, because there were no unique values
and finds anymore. Several representations are also still wrong, some
text values are really values from some external references, such as
the layer name.

So this was a short intro into massive parallel processing,
asynchronous processing, and machine-learning: a self-improving program.
The code in question is here:
https://github.com/LibreDWG/libredwg/tree/master/examples
All the `*.inc` and `*.skip` files are automatically created by make -C examples regen-unknown.

The initial plan was to create a more complex backtracking solver to
find the best matches for all possible variants, but step-wise
refinement in controllable loops and usage of several trivial tools is
so far much easier than real AI. AI really is trivial if you do it
properly.

Followed by https://savannah.gnu.org/forum/forum.php?forum_id=9203 for the actual AI part with picat.

13 July, 2018 10:11PM by Reini Urban

July 05, 2018

libredwg-0.5 released [alpha]

See https://www.gnu.org/software/libredwg/ and http://git.savannah.gnu.org/cgit/libredwg.git/tree/NEWS?h=0.5

Here are the compressed sources:
http://ftp.gnu.org/gnu/libredwg/libredwg-0.5.tar.gz (9.2MB)
http://ftp.gnu.org/gnu/libredwg/libredwg-0.5.tar.xz (3.4MB)

Here are the GPG detached signatures[*]:
http://ftp.gnu.org/gnu/libredwg/libredwg-0.5.tar.gz.sig
http://ftp.gnu.org/gnu/libredwg/libredwg-0.5.tar.xz.sig

Use a mirror for higher download bandwidth:
https://www.gnu.org/order/ftp.html

Here are the SHA256 checksums:

920c1f13378c849d41338173764dfac06b2f2df1bea54e5069501af4fab14dd1 libredwg-0.5.tar.gz
fd7b6d029ec1c974afcb72c0849785db0451d4ef148e03ca4a6c4a4221b479c0 libredwg-0.5.tar.xz

[*] Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact. First, be sure to download both the .sig file
and the corresponding tarball. Then, run a command like this:

gpg --verify libredwg-0.5.tar.gz.sig

If that command fails because you don't have the required public key,
then run this command to import it:

gpg --keyserver keys.gnupg.net --recv-keys B4F63339E65D6414

and rerun the 'gpg --verify' command.

05 July, 2018 05:35AM by Reini Urban

June 11, 2018

Major speedup for big DWG's

Thanks to David Bender and James Michael DuPont for convincing me that we need a hash table for really big DWGs. I got a DWG example with 42MB, which needed 2m to process and then 3m to free the dwg struct. I also had to fix a couple of internal problems.

We couldn't use David Bender's hashmap which he took from Android (Apache 2 licensed), and I didn't like it too much neither. So today I sat down and wrote a good int hashmap from scratch, with several performance adjustments, because we never get a key 0 and we won't need to delete keys.
So it's extremely small and simple, using cache-friendly open addressing, and I got it right at the second attempt.

Performance with this hash table now got down to 7 seconds.
Then I also removed the unneeded dwg_free calls from some cmdline apps, because the kernel does it much better then libc malloc/free. 3 minutes for free() is longer than the slowest garbage collector I've ever seen.
So now processing this 42MB dwg needs 7s.

While I was there I also had to adjust several hard coded limits used for testing our small test files. With realistic big DWG's they failed all over. There are still some minor problems, but the majority of the DWG's can be read.
And I pass through now all new error codes, with a bitmask of all occured uncritical and critical errors. On any critical error the library aborts, on some errors it just aborts for this particular object and some uncritical errors are just skipped over. See dwg.h or the docs for the error levels.

What's left is writing proper DXF's, which is apparently not that easy. With full precision mode as in newer acad's with subclass markers and all kind of internal handles, it's very strict, and I wasn't yet able to import any such DXF into acad. Should be possible though to import these into any other app.
So now I'm thinking of adding a third level of DXF: minimal, low and full (default). minimal are entities only, and are documented by acad. low would be new, the level of DXF other applications produce, such as libdxfrw or pythoncad. This is a basic DXF. Full is what teigha and acad produce.
In the end I want full, because I want to copy over parametric constraints from and to better modelers, full 3d data (3dsolid, surface) and full rendering and BIM data (Material, Sun, Lights, ...).

Reading DXF will have to wait for the next release, as I'm stuck with writing DXF's first. This needs to be elegant and maintainable, and not such a mess as with other libraries. I want to use the same code for reading and writing DXF, JSON (e.g. GeoJSON), and XML (e.g. OpenstreetMap, FreeCAD).

11 June, 2018 06:15PM by Reini Urban

unifont @ Savannah

Unifont 11.0.01 Released - Upgrade Recommended

Unifont 11.0.01 was released on 5 June 2018, coinciding with the formal release of Unicode 11.0.0 by The Unicode Consortium.

I wanted to check over this release before recommending that GNU/Linux distributions incorporate it. So far there only appears to be one new bug added: U+1C90 has an extra vertical line added to it, making the character double-width instead of single-width. This will be fixed in the next release. Unifont 10.0.x went through 7 updates in about half a year. I felt that was not stable enough for those trying to maintain GNU/Linux distributions, so I did not keep recommending that each update, with minor changes from one to the next, be propagated. I plan to have more stability in Unifont 11.0.x.

Unifont provides fonts with a glyph for each printable code point in the Unicode Basic Multilingual Plane, as well as wide coverage of the Supplemental Multilingual Plane and some ConScript Unicode Registry glyphs.

The Unifont package includes TrueType fonts for all of these ranges, and BDF and PCF fonts for the Unicode Basic Multilingual Plane. There is also a specialized PSF font for using GNU APL in console mode on GNU/Linux systems.

The web page for this project is https://savannah.gnu.org/projects/unifont/.

You can download the latest version from GNU mirror sites, accessible at http://ftpmirror.gnu.org/unifont/unifont-11.0.01. If the mirror site does not contain this latest version, you can download files directly from GNU at https://ftp.gnu.org/gnu/unifont/unifont-11.0.01/ or ftp://ftp.gnu.org/gnu/unifont/unifont-11.0.01/.

Highlights of this version:

Support for the brand new Unicode Copyleft glyph (U+01F12F), which was added in Unicode 11.0.0. This glyph is present in the Unifont package's TrueType fonts.

The addition of the space character (U+0020) to all Unifont package TrueType fonts, for more straightforward rendering of Unifont Upper (i.e., Unicode Plane 1) scripts that contain spaces.

The addition of several new scripts that were introduced in Unicode 11.0.0:

  • U+1C90..U+1CBF Georgian Extended
  • U+010D00..U+010D3F Hanifi Rohingya
  • U+010F00..U+010F2F Old Sogdian
  • U+010F30..U+010F6F Sogdian
  • U+011800..U+01184F Dogra
  • U+011D60..U+011DAF Gunjala Gondi
  • U+011EE0..U+011EFF Makasar
  • U+016E40..U+016E9F Medefaidrin
  • U+01D2E0..U+01D2FF Mayan Numerals
  • U+01EC70..U+01ECBF Indic Siyaq Numbers
  • U+01FA00..U+01FA6F Chess Symbols

Paul Hardy

GNU Unifont Maintainer

11 June, 2018 12:29PM by Paul Hardy

May 21, 2018

nano @ Savannah

GNU nano 2.9.7 was released

Accumulated changes over the last five releases include: the ability to bind a key to a string (text and/or escape sequences), a default color of bright white on red for error messages, an improvement to the way the Scroll-Up and Scroll-Down commands work, and the new --afterends option to make Ctrl+Right (next word) stop at the end of a word instead of at the beginning. Check it out.

21 May, 2018 10:36AM by Benno Schulenberg

April 19, 2018

remotecontrol @ Savannah

April 08, 2018

mcron @ Savannah

GNU Mcron 1.1.1 released

We are pleased to announce the release of GNU Mcron 1.1.1,
representing 48 commits, by 1 person over 3 weeks.

About

GNU Mcron is a complete replacement for Vixie cron. It is used to run
tasks on a schedule, such as every hour or every Monday. Mcron is
written in Guile, so its configuration can be written in Scheme; the
original cron format is also supported.

https://www.gnu.org/software/mcron/

Download

Here are the compressed sources and a GPG detached signature[*]:
https://ftp.gnu.org/gnu/mcron/mcron-1.1.1.tar.gz
https://ftp.gnu.org/gnu/mcron/mcron-1.1.1.tar.gz.sig

Use a mirror for higher download bandwidth:
https://ftpmirror.gnu.org/mcron/mcron-1.1.1.tar.gz
https://ftpmirror.gnu.org/mcron/mcron-1.1.1.tar.gz.sig

[*] Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact. First, be sure to download both the .sig file
and the corresponding tarball. Then, run a command like this:

gpg --verify mcron-1.1.1.tar.gz.sig

If that command fails because you don't have the required public key,
then run this command to import it:

gpg --keyserver keys.gnupg.net --recv-keys 0ADEE10094604D37

and rerun the 'gpg --verify' command.

This release was bootstrapped with the following tools:
Autoconf 2.69
Automake 1.16.1
Makeinfo 6.5
Help2man 1.47.5

NEWS

  • Noteworthy changes in release 1.1.1 (2018-04-08) [stable]
    • Bug fixes

The "--disable-multi-user" configure variable is not reversed anymore.
'cron' and 'crontab' are now installed unless this option is used.

The programs now sets the GUILE_LOAD_PATH and GUILE_LOAD_COMPILED_PATH
environment variables with the location of the installed Guile modules.

'next-year-from', 'next-year', 'next-month-from', 'next-month',
'next-day-from', 'next-day', 'next-hour-from', 'next-hour',
'next-minute-from', 'next-minute', 'next-second-from', and 'next-second' no
longer crashes when passing an optional argument.
[bug introduced in mcron-1.1]

    • Improvements

Some basic tests for the installed programs can be run after 'make install'
with 'make installcheck'.

The configuration files are now processed using a deterministic order.

The test suite code coverage for mcron modules is now at 66.8% in term of
number of lines (mcron-1.1 was at 23.7%).

08 April, 2018 03:46PM by Mathieu Lirzin

March 19, 2018

GNU Mcron 1.1 released

We are pleased to announce the release of GNU Mcron 1.1,
representing 124 commits, by 3 people over 4 years.

Download

Here are the compressed sources and a GPG detached signature[*]:
https://ftp.gnu.org/gnu/mcron/mcron-1.1.tar.gz
https://ftp.gnu.org/gnu/mcron/mcron-1.1.tar.gz.sig

Use a mirror for higher download bandwidth:
https://ftpmirror.gnu.org/mcron/mcron-1.1.tar.gz
https://ftpmirror.gnu.org/mcron/mcron-1.1.tar.gz.sig

[*] Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact. First, be sure to download both the .sig file
and the corresponding tarball. Then, run a command like this:

gpg --verify mcron-1.1.tar.gz.sig

If that command fails because you don't have the required public key,
then run this command to import it:

gpg --keyserver keys.gnupg.net --recv-keys 0ADEE10094604D37

and rerun the 'gpg --verify' command.

This release was bootstrapped with the following tools:
Autoconf 2.69
Automake 1.16.1

NEWS

Noteworthy changes in release 1.1 (2018-03-19) [stable]
    • New features

The 'job' procedure has now a '#:user' keyword argument which allows
specifying a different user that will run it.

Additional man pages for 'cron(8)' and 'crontab(1)' are now generated using
GNU Help2man.

    • Bug fixes

Child process created when executing a job are now properly cleaned even
when execution fails by using 'dynamic-wind' construct.

    • Improvements

GNU Guile 2.2 is now supported.

Some procedures are now written using functional style and include a
docstring. 'def-macro' usages are now replaced with hygienic macros.

Compilation is now done using a non-recursive Makefile, supports out of tree
builds, and use silent rules by default.

Guile object files creation don't rely on auto-compilation anymore and are
installed in 'site-ccache' directory.

Jobs are now internally represented using SRFI-9 records instead of vectors.

Changelog are generated from Git logs when generating the tarball using
Gnulib gitlog-to-changelog script.

A test suite is now available and can be run with 'make check'.

    • Changes in behavior

The "--enable-debug" configure variable has been removed and replaced with
MCRON_DEBUG environment variable.

The "--disable-multi-user" configure variable is now used to not build and
install the 'cron' and 'crontab' programs. It has replaced the
"--enable-no-vixie-clobber" which had similar effect.

(mcron core) module is now deprecated and has been superseeded by
(mcron base).

Please report bugs to bug-mcron@gnu.org.

19 March, 2018 12:37AM by Mathieu Lirzin

February 05, 2018

remotecontrol @ Savannah

January 07, 2018

nano @ Savannah

GNU nano 2.9.2 was released

The most important change in this version is that now you can use <Tab> to indent a marked region and <Shift+Tab> to unindent it. Furthermore, with the option 'set trimblanks' in your nanorc, nano will now snip those pesky trailing spaces when automatic hard-wrapping occurs (when using the --fill option, for example). Apart from those things, there are several small fixes and improvements. Recommended upgrade.

07 January, 2018 11:09AM by Benno Schulenberg

December 17, 2017

tar @ Savannah

Version 1.30

Version 1.30 of GNU tar is available for download. See the NEWS file, for a list of important changes in this release.

17 December, 2017 12:24PM by Sergey Poznyakoff

November 02, 2017

mailutils @ Savannah

Version 3.4

Version 3.4 is available for download. This is a bug-fix release.

02 November, 2017 11:57AM by Sergey Poznyakoff

October 18, 2017

Version 3.3 available

Mailutils version 3.3 is available for download. See the NEWS file, for information about changes in this version.

18 October, 2017 10:14AM by Sergey Poznyakoff

September 17, 2017

texinfo @ Savannah

Texinfo 6.5 released

We have released version 6.5 of Texinfo, the GNU documentation format.

It's available via a mirror (xz is much smaller than gz, but gz is available too just in case):

https://ftp.gnu.org/gnu/texinfo/texinfo-6.5.tar.xz
https://ftp.gnu.org/gnu/texinfo/texinfo-6.5.tar.gz

Please send any comments to bug-texinfo@gnu.org.

Full announcement:

http://lists.gnu.org/archive/html/info-gnu/2017-09/msg00007.html

17 September, 2017 07:43PM by Gavin D. Smith

September 14, 2017

lightning @ Savannah

GNU lightning 2.1.1 released!

GNU lightning is a library to aid in making portable programs
that compile assembly code at run time.

Development:
http://git.savannah.gnu.org/cgit/lightning.git

Download release:
ftp://ftp.gnu.org/gnu/lightning/lightning-2.1.1.tar.gz

2.1.1 adds support for jit_allocar for runtime alloca, contrary to
jit_allocai that provides a static offset allocation.
2.1.1 also adds support for jit_va_start, jit_va_arg, jit_va_arg_d
and jit_va_end, that implements C compatible varargs functions.
Note: alpha, hppa, mips (n32 abi), ppc (Darwin abi) and sparc ports
are no longer supported due to lack of a test environment.

------------------------------------------------------------------------

ia64:
o Implement cache flush.
o Do not use a dangling pointer for double to integer copy.

x86:
o Correct issues in load and store in the x32 abi.

generic:
o Correct Fibonacci number generation examples.
o Correct wrong jit_movr simplification.
o Correct wrong live register information for some complex patterns.
o Adapt for binutils 2.29.

14 September, 2017 05:58PM by Paulo César Pereira de Andrade

September 13, 2017

www @ Savannah

August 29, 2017

unifont @ Savannah

Unifont 10.0.06 Released

27 August 2017

Unifont 10.0.06 is now available. This version has many glyph improvements, most of which were contributed by David Corbett. This version also has make files with Mike Gilbert's modifications to allow parallel make, and corrects a bug in unifontpic for generation of the large Unifont graphic images. See the ChangeLog for further details.

Download this release at:

http://ftpmirror.gnu.org/unifont/unifont-10.0.06/

or if that fails,

ftp://ftp.gnu.org/gnu/unifont/unifont-10.0.06/

29 August, 2017 12:28PM by Paul Hardy

August 27, 2017

pspp @ Savannah

PSPP 1.0.1 has been released.

I'm very pleased to announce the release of a new version of GNU PSPP. PSPP is a program for statistical analysis of sampled data. It is a free replacement for the proprietary program SPSS.

This fixes a number of bugs that were reported as security vulnerabilities. I do not think that that these are serious vulnerabilities. I still recommend that users upgrade

Changes from 1.0.0 to 1.0.1:

  • Bug fixes, including fixes for CVE-2017-12958, CVE-2017-12959, CVE-2017-12960, and CVE-2017-12961.

27 August, 2017 08:02PM by Ben Pfaff

August 20, 2017

PSPP 1.0.0 has been released.

I'm very pleased to announce the release of a new version of GNU PSPP. PSPP is a program for statistical analysis of sampled data. It is a free replacement for the proprietary program SPSS.

PSPP has been in development, as part of the GNU project, since about 1996, although development has sometimes been very slow. That entire time, the version number has been less than 1.0. Now I am increasing it to 1.0 for several reasons. First, I no longer feel that PSPP must be "complete" before it can be 1.0; instead, I think that it only needs to be useful. Second, the common ways of numbering software releases have drifted over the years, so that many projects now simply increment the major version on each release, or use the year and month of release as the version number. Third, every time I make a release, RMS asks me when 1.0 is coming ;-)

Changes from 0.11.0 to 1.0.0:

  • Translation updates.

20 August, 2017 04:24PM by Ben Pfaff

August 12, 2017

PSPP 0.11.0 has been released.

I'm very pleased to announce the release of a new version of GNU PSPP. PSPP is a program for statistical analysis of sampled data. It is a free replacement for the proprietary program SPSS.

Changes from 0.10.2 to 0.11.0:

  • The REGRESSION command now has a /ORIGIN subcommand to perform regression through the origin.
  • The FACTOR command can now analyse matrix files prepared with MATRIX DATA.
  • The FACTOR command can now print the anti-image matrices.
  • The MATRIX DATA command has been added.
  • Some inappropriate properties in selection dialogs have been corrected.
  • A bug which could cause the HTML driver to go into a tight loop has been fixed.
  • An error in the FREQUENCIES procedure, where the word "Mean" was printed when "Variance" was appropriate has been fixed.
  • The ncurses library is no longer required or used.
  • A bug where the Mann-Whitney test would give misleading results if run on multiple variables and MISSING=ANALAYSIS was specified has been fixed.
  • Gtk+3.14.5 or later must now be used when building.
  • Graphical user interface changes:
    • There is a new menu: Edit|Options
    • The Non Parametric Statistics Menu has a new item: "K Independent Samples".
    • Dialog boxes can now be canceled using the <Escape> key.
  • The AUTORECODE command now accepts an optional / before INTO.
  • The short form of the VECTOR command can now create string variables.
  • Bug fixes, including fixes for CVE-2017-10791 and CVE-2017-10792.

12 August, 2017 06:34PM by Ben Pfaff

July 23, 2017

nano @ Savannah

GNU nano 2.8.6 was released

This version brings the ability to do softwrapping at whitespace (via the option --atblanks on the command line or 'set atblanks' in your nanorc, together with the softwrap option). Apart from that new feature, just a few tiny fixes.

23 July, 2017 03:23PM by Benno Schulenberg

July 08, 2017

unifont @ Savannah

Unifont 10.0.04 Released

8 July 2017
Unifont 10.0.04 is now available. This incorporates the experimental changes for combining character positioning introduced in Unifont 10.0.03. It also adds support for double diacritic combining characters, though that portion of Unifont still needs to be validated. That is the main impetus behind this release. This version also extends the unifontpic utility so that it can print Unifont charts of any Unicode plane from 0 through 17, inclusive, not just plane 0.

This release also incorporates double-width glyphs to replace the quadruple-width Chinese ideographs for transliterating Orthodox Church Slavonic. With Unicode Plane 0 now entirely represented with single- and double-width glyphs again, the 256-glyph bitmap image files are now in PNG format again rather than BMP. The PNG files are smaller, but the utilities that produce them have not been modified to support quadruple-width glyphs.

Depending on the results of testing double diacritic marks, there might or might not be a Unifont 10.0.05 release.

Download this release at:

http://ftpmirror.gnu.org/unifont/unifont-10.0.04/

or if that fails,

ftp://ftp.gnu.org/gnu/unifont/unifont-10.0.04/

08 July, 2017 04:26PM by Paul Hardy

June 30, 2017

Unifont 10.0.02 and Unifont 10.0.03 Released

30 June 2017
Unifont 10.0.02 and Unifont 10.0.03 are now available.

Unifont 10.0.02 is a minor release that touches up the U+03xx block, which includes modern Greek. It also fixes one glyph in the Aiha ConScript Unicode Registry script in the Private Use Area.

Unifont 10.0.03 is an experimental release that adjusts how combining characters are placed while being typed in a text editing application. No new glyphs have been added.

Download these releases at:

http://ftpmirror.gnu.org/unifont/unifont-10.0.02/

http://ftpmirror.gnu.org/unifont/unifont-10.0.03/

or if that fails,

ftp://ftp.gnu.org/gnu/unifont/unifont-10.0.02/

ftp://ftp.gnu.org/gnu/unifont/unifont-10.0.03/

30 June, 2017 08:06PM by Paul Hardy

June 24, 2017

texinfo @ Savannah

Texinfo 6.4 released

We have released version 6.4 of Texinfo, the GNU documentation format.

It's available via a mirror (xz is much smaller than gz, but gz is available too just in case):

http://ftpmirror.gnu.org/texinfo/texinfo-6.4.tar.xz
http://ftpmirror.gnu.org/texinfo/texinfo-6.4.tar.gz

Please send any comments to bug-texinfo@gnu.org.

Full announcement:
http://lists.gnu.org/archive/html/info-gnu/2017-06/msg00011.html

24 June, 2017 12:28PM by Gavin D. Smith

May 04, 2017

nano @ Savannah

GNU nano 2.8.2 was released

This version makes the built-in help texts searchable (with ^W). This is useful chiefly in the main help text -- when the user forgot how to scroll without moving the cursor, for example, or how to insert a keystoke verbatim. Apart from that, this release fixes a few small or unlikely bugs.

04 May, 2017 10:12AM by Benno Schulenberg

April 02, 2017

GNU nano 2.8.0 was released

This version of nano changes the way softwrap works: the <Up> and <Down> cursor keys now move through visual rows instead of jumping between logical lines. And nano now makes use of gnulib, to get rid of some custom shims and to avoid the need for new ones. The use of gnulib has increased the size of nano's tarball by some thirty percent, but... in lines of code this is the smallest nano since 2.2.0.

02 April, 2017 10:54AM by Benno Schulenberg

March 11, 2017

mailutils @ Savannah

Version 3.2

GNU mailutils version 3.2 is available for download.

New in this release:

Configuration syntax

Statements that allow for variable substitution also allow for command expansion. Commands are invoked the same way as in shell:

The following commands are defined:

  • localpart X

Treats X as an email address and returns its part preceding
the @-sign. If there is no @-sign, returns X unchanged.

  • domainpart X

Treats X as an email address and returns the part following
the @-sign. If there is no @-sign, returns empty string.

  • shell CMD [ARGS...]

Runs the shell command CMD with the given arguments. Returns
the standard output from the command. The command is invoked
using "/bin/sh -c" and can contain any valid shell construct.

imap4d

Namespace configuration completely rewritten. The namespace block statement defines a particular namespaces. Within it, one or more
prefix statements define prefixes available in that namespace, along with their mappings to the server filesystem, hierarchy delimiters etc.

An example of namespace configuration:

The following configuration statements have been withdrawn: homedir, personal-namespace, other-namespace, shared-namespace,
other-mailbox-mode, shared-mailbox-mode.

mail

Modifying attachment name and filename

Two new options are provided for modifying attachment name (a.k.a description), and file name:

--content-name=STRING
Sets the attachment name (description). Technically speaking, it
is the "name" parameter in the Content-Type MIME header.

--content-filename=NAME
Sets the file name (the "filename" parameter in the
Content-Description MIME header of the outgoing message).

Both options affect only the next --attach or --attach-fd option.

Constructing attachments from the command line

The new option --attach-fd=N instructs mail to read attachment from file descriptor N. By default, the attachments created using this
option are unnamed, i.e. neither name parameter of the Content-Type header, nor the filename parameter of the Content-Disposition header
are set. Use the --content-name and --content-filename options to change these.

The option --attach-fd=0 causes attachment to be read from the standard input. The option --attach=- has the same effect. For
obvious reasons, the interactive mode is suppressed in this case.

The --attach-fd option is useful when calling mail from another program.

The new option --skip-empty-attachments instructs mail to omit attachments that have zero-size body.

Example:

Suppose that the mail binary is opened at file descriptor 5 and the mail.c file is opened at descriptor 6, the following command
line sends them as attachments:

Click here for details.

Bugfixes

  • Fix memory leak in mu_stream_destroy.
  • Fix handling of ambiguous command line options.
  • Fix sieve logging in the maidag utility
  • Fixes in the Q RFC 2047 encoder.

11 March, 2017 02:51PM by Sergey Poznyakoff

February 03, 2017

libiconv @ Savannah

libiconv 1.15 released

GNU libiconv 1.15 is released.

New in this release:

  • The UTF-8 converter now rejects surrogates and out-of-range code points.
  • Added ISO-2022-JP-MS converter.
  • Updated the CP1255 converter to map one more character.
  • The functions now support strings longer than 2 GB.

03 February, 2017 12:35AM by Bruno Haible

January 14, 2017

vc-dwim @ Savannah

vc-dwim-1.8 released [stable]

14 January, 2017 05:20PM by Jim Meyering

December 31, 2016

m4 @ Savannah

December 13, 2016

mailutils @ Savannah

Version 3.1

Version 3.1 of GNU mailutils is available for download. In this version:

New implementation of Sieve

The Sieve library essentially rewritten. The following new extensions are implemented:

The utilities define the Sieve environment location, and phase as per the following table:

The sieve utility provides new option: --environment, for manipulating the environment.

Bugfixes

  • Fix program name duplicate in the output of "mailutils help COMMAND"
  • Fix several bugs in mhn
  • Fix expansion of #, &, %, etc. in mail copy and file commands.
  • Fix improper permissions after delivery to MH and Maildir mailboxes.
  • Fix stream flushing code
  • Fix the implementation of -nowhatnowproc option in MH

13 December, 2016 08:49PM by Sergey Poznyakoff

November 07, 2016

Mailutils 3.0 is finally available

After almost 6 years of development, the version 3.0 of GNU Mailutils is available for download. This is a major rewrite of the package. The full list of changes is too long to be listed here. Please refer to the NEWS file entry, for a detailed description.

07 November, 2016 06:59AM by Sergey Poznyakoff

September 11, 2016

texinfo @ Savannah

Texinfo 6.3 released

We have released version 6.3 of Texinfo, the GNU documentation format.
It's available via a mirror (xz is much smaller than gz, but gz is available too just in case):
http://ftpmirror.gnu.org/texinfo/texinfo-6.3.tar.xz
http://ftpmirror.gnu.org/texinfo/texinfo-6.3.tar.gz
Please send any comments to bug-texinfo@gnu.org.
Full announcement:
http://lists.gnu.org/archive/html/bug-texinfo/2016-09/msg00024.html

11 September, 2016 12:01PM by Gavin D. Smith

July 23, 2016

pspp @ Savannah

PSPP 0.10.2 has been released

I'm very pleased to announce the release of a new version of GNU PSPP. PSPP is a program for statistical analysis of sampled data. It is a free replacement for the proprietary program SPSS.

Changes from 0.10.1 to 0.10.2:

  • CROSSTABS implements a new COUNT subcommand to round case or cell weights.
  • Help will be opened as HTML in default browser if yelp is not available.
  • When plotting scatterplots with only one dataset (the simple case) the colour used for the dataset is now black. The previous default from the Tango palette was too faint to see easily.
  • The varible info dialog could previously only paste a single variable. Now it can paste multiple variables.
  • Bug fixes, including the following:
    • T-test with independent samples GUI crashed with string type variable as group variable.
    • The variable info dialog showed the previous selected variable superimposed with the currently selected one.
    • The GLM command did not properly deal with missing values. This has been fixed.

23 July, 2016 05:03PM by Ben Pfaff

July 11, 2016

www @ Savannah

June 09, 2016

wget @ Savannah

GNU wget 1.18 released

Noteworthy changes

  • By default, on server redirects to a FTP resource, use the original URL to get the local file name. Close CVE-2016-4971. This introduces a backward-incompatibility for HTTP->FTP redirects and

any script that relies on the old behaviour must use --trust-server-names.

  • Check the HSTS file is not world-writable before using it.
  • Parse <img srcset> attributes on a recursive download.
  • Fix problem with SNI server names having trailing dot(s)
  • New options --bind-dns-address and --dns-servers.
  • When Wget is built with libiconv, it now converts non-ASCII URIs to the locale's codeset when it creates files. The encoding of the remote files and URIs is taken from --remote-encoding, defaulting to UTF-8. The result is that non-ASCII URIs and files downloaded via HTTP/HTTPS and FTP will have names on the local filesystem that correspond to their remote names.

09 June, 2016 04:33PM by Giuseppe Scrivano

May 26, 2016

liberty-eiffel @ Savannah

Liberty Eiffel release: 2016.05 (Bell)

We are happy to announce the first release since LibertyEiffel officially is under the umbrella of GNU, 2016.05, code-named "Bell" (after Alexander Graham Bell - Scottish engineer).

Get it from one of the following sources
- Tarball:
http://download.savannah.gnu.org/releases/liberty-eiffel/bell.tar.gz
- Debian/Ubuntu packages:
http://apt.liberty-eiffel.org/ release main
- Git repository:
git://git.savannah.gnu.org/liberty-eiffel.git

Looking forward to a promising time with an emerging community, stay tuned and have fun!

26 May, 2016 09:07PM by Raphael Mack

May 16, 2016

tar @ Savannah

tar 1.29

GNU tar version 1.29 is available for download.

New in this release:

New options: --verbatim-files-from, --no-verbatim-files-from

The --verbatim-files-from option instructs tar to treat each line read from a file list as a file name, even if it starts with a dash.

File lists are supplied with the --files-from (-T) option. By default, each line read from a file list is first stripped off the leading and trailing whitespace and, if the result begins with a dash, it is treated as tar command line option.

Use the --verbatim-files-from option to disable this special handling. This facilitates the use of tar with file lists created automatically
(e.g. by find(1) command).

This option affects all --files-from options that occur after it in the command line. Its effect is cancelled by the --no-verbatim-files-from option.

--null option reads file names verbatim

The --null option implies --verbatim-files-from. I.e. each line read from null-delimited file lists is treated as a file name.

This restores the documented behavior, which was broken in version 1.27.

New options: --owner-map=FILE and --group-map=FILE

These two options provide fine-grained control over what user/group names (or IDs) should be mapped when adding files to archive.

For both options, FILE is a plain text file with user or group mappings. Empty lines are ignored. Comments are introduced with # sign (unless quoted) and extend to the end of the corresponding line. Each non-empty line defines translation for a single UID (GID). It must consist of two fields, delimited by any amount of whitespace:

OLDNAME is either a valid user (group) name or a ID prefixed with +. Unless NEWID is supplied, NEWNAME must also be either a valid name or a
+ID. Otherwise, both NEWNAME and NEWID need not be listed in the system user database.

New option --clamp-mtime

The new --clamp-mtime option changes the behavior of --mtime to only use the time specified if the file mtime is newer than the given time.
The --clamp-mtime option can only be used together with --mtime.

Typical use case is to make builds reproducible: to loose less information, it's better to keep the original date of an archive, except for files modified during the build process. In that case, using reference (and thus reproducible) timestamps for the latter is good enough.

See ReproducibleBuilds, for more information.

Deprecated --preserve option removed

Sparse file detection

Tar now uses SEEK_DATA/SEEK_HOLE on systems that support it. This allows for considerable speed-up in sparse-file detection.

New option --hole-detection is provided, that allows the user to select the algorithm used for hole detection. Available arguments
are:

--hole-detection=seek

Use lseek(2) SEEK_DATA and SEEK_HOLE whence parameters.

--hole-detection=raw

Scan entire file before storing it to determine where holes are located.

The default is to use seek whenever possible, and fall back to raw otherwise.

16 May, 2016 07:20PM by Sergey Poznyakoff

liberty-eiffel @ Savannah

Bell Release Candidate 1

the first release candidate for the bell release is out. Please check it out from git, download the tarball http://www.liberty-eiffel.org/bell-rc1.tar.gz or install the debian packages from http://apt.liberty-eiffel.org/ rc main

We'd appreciate any feedback on problems with the installation or any kind of bugs you find - if they are critical or easy to fix, we'll do so before the release.

Stay tuned and have fun!

16 May, 2016 07:00AM by Raphael Mack

April 25, 2016

remotecontrol @ Savannah

Release of GNU remotecontrol - Version 2.0

The GNU remotecontrol Team is proud to announce our first major upgrade release. The following changes comprise Version 2.0.

CHANGES:
-The code has been rewritten to adopt the Model-View-Controller software architectural pattern. This pattern eases code modification.

-Implemented a Data Abstraction Layer. This functionality mediates access between application and database, allowing implementations across different platforms and systems.

-A single configuration file. This simplicity eases installation effort and helps with diagnosing system performance problems.

-Added enhanced support for time zone offset and daylight savings time. MySQL Server Time Zone Support is used to identify time zone offset from UTC, in combination with input from the GUI web pages.

-Added enhanced management features for application user, thermostat device, thermostat group, and thermostat location.

-Added role-based security. This approach simplifies separating administrative accounts from user accounts.

-Added enhanced error reporting for code performance problems.

-A new Nagios monitoring check, check_forecast. This new check expands the monitoring capability of a HVAC energy system by complementing the existing check_thermostat and check_weather functionality with weather forecast information, to assist estimating future HVAC system performance.

SVN VERSION DIRECTORY:
svn checkout svn://svn.sv.gnu.org/remotecontrol/branches/Version2.0 remotecontrol-2.0

25 April, 2016 10:58PM by Stephen H. Dawson DSL

April 09, 2016

www @ Savannah

April 05, 2016

teximpatient @ Savannah

Images to be added soon

I've obtained a physical copy of the book, so hopefully I can get started on implementing the code to display images where they are in the original version. I plan to backport the code from the Chinese version of the book, available here https://bitbucket.org/zohooo/impatient/wiki/Home

05 April, 2016 09:57PM by Daniel James

April 03, 2016

pspp @ Savannah

PSPP 0.10.1 has been released

I'm very pleased to announce the release of a new version of GNU PSPP. PSPP is a program for statistical analysis of sampled data. It is a free replacement for the proprietary program SPSS.

Changes from 0.10.0 to 0.10.1:

  • Bug fixes, including the following:
    • A bug where certain dialog boxes could not be properly populated has been fixed.
    • Various commands have been hardened against errors when called with invalid syntax.
  • Translation updates. Thanks to our translators!

03 April, 2016 03:45AM by Ben Pfaff

March 31, 2016

teximpatient @ Savannah

Migrated to Git

The project has been migrated from CVS to Git. All future changes will be submitted to the Git repository.

31 March, 2016 06:55AM by Daniel James

February 10, 2016

www @ Savannah

Free Software for Education

New page with two lists of free software for education: http://www.gnu.org/software/free-software-for-education.html

10 February, 2016 08:35PM by Dora Scilipoti

February 09, 2016

License Compatibility and Relicensing

09 February, 2016 05:15PM by Ineiev

February 06, 2016

texinfo @ Savannah

Texinfo 6.1 released

We have released version 6.1 of Texinfo, the GNU documentation format.

It's available via a mirror (xz is much smaller than gz, but gz is available too just in case):
http://ftpmirror.gnu.org/texinfo/texinfo-6.1.tar.xz
http://ftpmirror.gnu.org/texinfo/texinfo-6.1.tar.gz

Please send any comments to bug-texinfo@gnu.org.

Full announcement:
http://lists.gnu.org/archive/html/bug-texinfo/2016-02/msg00035.html

06 February, 2016 01:23PM by Gavin D. Smith

December 11, 2015

wget @ Savannah

GNU wget 1.17.1 released

Noteworthy changes:

  • Fix compile error when IPv6 is disabled or SSL is not present.
  • Fix HSTS memory leak.
  • Fix progress output in non-C locales.
  • Fix SIGSEGV when -N and --content-disposition are used together.
  • Add --check-certificate=quiet to tell wget to not print any warning about invalid certificates.

11 December, 2015 07:20PM by Giuseppe Scrivano

November 15, 2015

GNU wget 1.17 released

    • Remove FTP passive to active fallback due to privacy concerns.
    • Add support for --if-modified-since.
    • Add support for metalink through --input-metalink and --metalink-over-http.
    • Add support for HSTS through --hsts and --hsts-file.
    • Add option to restrict filenames under VMS.
    • Add support for --rejected-log which logs to a separate file the reasons why URLs are being rejected and some context around it.
    • Add support for FTPS.
    • Do not download/save file on error when --spider enabled
    • Add --convert-file-only option. This option converts only the filename part of the URLs, leaving the rest of the URLs untouched.

15 November, 2015 03:12PM by Giuseppe Scrivano

November 09, 2015

stow @ Savannah

GNU Stow 2.2.2 released

After a long wait, this release contains a number of bug fixes and minor cleanups.

09 November, 2015 09:46PM by Adam Spiers

August 24, 2015

sysutils @ Savannah

Sysutils is getting some new life.

Some more shinny code and a lot of bug fixes are coming.

24 August, 2015 07:57PM by Scotty Moran

August 14, 2015

teseq @ Savannah

GNU teseq 1.1.1 release

Announcing the release of version 1.1.1 of GNU Teseq, the Escape Sequence
Illuminator.

GNU Teseq (the author pronounces it: "tea" + "seek") is a tool for
analyzing files that contain control characters and terminal control
sequences, by printing these control sequences and their meanings in
readable English. It is intended to be useful for debugging terminal
emulators, and programs that make heavy use of advanced terminal
features such as cursor movement, coloring, and other effects.

Teseq is useful for:
* creating animated, interactive demos to run on the terminal (see
<https://asciinema.org/a/7445> for a video on how to do this),
* knowing the exact output of a program (Did it have spaces at the
end of the line? Or maybe it contains invisible control
characters?),
* examining a text file's contents unambiguously, a la 'cat -v' or
the 'ed' program's 'l' command (but with much more information),
* stripping control sequences from a text file, e.g. to produce a
plain ascii text file from a typescript file generated by the
'script' command (see example below),
* examining the invisible control sequences within a text file, that
affect graphical formatting or character encoding, in order to
understand how they work and where they appear in the file, or
* debugging graphical terminal applications, and terminal emulators
(its originally-intended purpose).

The Teseq home page is located at http://www.gnu.org/software/teseq/

GNU Teseq 1.1.1 may be downloaded from http://ftp.gnu.org/gnu/teseq/
or via automatically-chosen mirrors from http://ftpmirror.gnu.org/teseq/

Online documentation is found at http://www.gnu.org/software/teseq/manual/

NEWS

Version 1.1.1

  • Updated all files to reflect new email address for maintainer:

micah@addictivecode.org (previous address, micah@cowan.name, is no
longer valid)

  • Added links in the (Texinfo) manual to playable videos that

demonstrate basic teseq functionality, and how to use teseq to create
and edit interactive terminal demos:

* https://asciinema.org/a/7443
* https://asciinema.org/a/7445

  • Added example in the manual for using teseq to strip escapes out of a

typescript file.

  • Note: a new (optional) build dependency has been introduced:

pkg-config, which is now used to find whether libcheck is installed.

  • BUG FIX: Fixed an issue where teseq could spin indefinitely churning

out \xFF bytes on no further input. Input from a command such as
$ printf '\033!!\177'
would produce this issue.

This issue was discovered by means of american fuzzy lop,
http://lcamtuf.coredump.cx/afl/

  • BUG FIX: Fixed an issue with \x7F (DEL) being treated as a valid final

character for control sequences, and being printed on teseq's output
(which should not be printing non-whitespace control characters).

Building GNU Teseq

Building Teseq requires nothing beyond a normal Unix build
environment, plus the help2man utility to generate the manpages.
Running the full suite of accompanying tests, or
building documentation, may require some additional software.

14 August, 2015 10:02PM by Micah Cowan

June 26, 2015

texinfo @ Savannah

texinfo 6.0 released

We have released version 6.0 of Texinfo, the GNU documentation format.

It's available via a mirror (xz is much smaller than gz,
but gz is available too just in case):
http://ftpmirror.gnu.org/texinfo/texinfo-6.0.tar.xz
http://ftpmirror.gnu.org/texinfo/texinfo-6.0.tar.gz

Please send any comments to bug-texinfo@gnu.org.

Full announcement:

https://lists.gnu.org/archive/html/bug-texinfo/2015-06/msg00052.html

26 June, 2015 06:42PM by Gavin D. Smith

May 22, 2015

gxmessage @ Savannah

gxmessage 3.4.1 for GTK3 has been released

gxmessage is a GTK based alternative to xmessage.

This is a maintenance release keeping up with changes in GTK3, and updated using the latest GNU tools.

Also, I'm pleased to announce a new mailing list for gxmessage users:

https://lists.gnu.org/mailman/listinfo/gxmessage

22 May, 2015 08:37AM by Timothy Musson

gxmessage 2.20.2 for GTK2 has been released

gxmessage is a GTK based alternative to xmessage.

This is a maintenance and minor bug-fix release of the GTK2 based version of gxmessage.

Also, I'm pleased to announce a new mailing list for gxmessage users:

https://lists.gnu.org/mailman/listinfo/gxmessage

22 May, 2015 08:33AM by Timothy Musson

March 09, 2015

wget @ Savannah

GNU wget 1.16.3 released

Noteworthy changes in Wget 1.16.3

Fix a regression introduced with 1.16.2, now --quiet is quiet again and doesn't print anything.

09 March, 2015 10:03AM by Giuseppe Scrivano