This page lists many small programs that I have written for my
daily needs. I have gathered them here in the hope that someone
else might find them useful or interesting.
RECENT CHANGES AND COMMENTS
- Oct 2014: To prevent paragraphs with very short last lines,
a new request, .pmll for paragraph minimum line length, is
added to neatroff to set the minimum length of a formatted
line, specified as a percentage of \n(.l; ".pmll 15", for
instance, makes sure that the length of last line of each
paragraph is at least 15% of its other lines.
Also the meaning of the argument of .hyp request is updated: now
useful values are between 0 and probably 1000; an argument of 100
assigns to each hyphenation the cost of stretching the spaces of the
line one hundred percent; the default value is zero. For
more information, read the neatroff introduction.
- Oct 2014: To make setting up neatroff easier, I have
which contains a top-level makefile to obtain, build and install
neatroff and its pre- and post-processors. Carsten Kunze
suggested it originally and helped to port it to common Unix environments.
- Sep 2014: Many of the incompatibilities of neatroff are
fixed; most of the credit goes to
Carsten Kunze and Dirk-Wilhelm Peters for finding them.
- Apr 2014: Added a script to fetch, compile, and
set up neatcc, neatld and neatlibc.
- Apr 2014: Now neateqn uses Computer Modern glyphs for brackets
and radicals if they are available (see neateqn's README).
- Feb 2014: Uploaded version 0.9 of ft2tf, which allows specifying
distinct horizontal and vertical DPIs.
- Nov 2013: A new program has been added to tdq to import Arpabet
pronunciations after converting them to IPA.
- Sep 2013: After about two years, I have merged fbpad's 256 colour
palette. Now the bold
branch is almost identical to the master branch and is removed.
- Aug 2013: When a program is specified via command line
arguments, fbpad starts the given program, disables terminal
switching commands, and exits when the program finishes.
I have also merged the scrolling history patch from the bold
branch and uploaded version 0.8 of ft2tf, which supports
full-width characters and emboldening fonts.
- Apr 2013: A command was added to fbpdf to override
page numbers; useful especially for documents that start with
- Mar 2013: I included Jörg Reinhard's patch to support mousewheel
in fbvnc. I also included a patch to move the viewing
screen for large VNC framebuffers.
- Feb 2013: I added fbvis to view images on the framebuffer.
- Feb 2013: When paused, minmad and fbff now close the OSS device
to permit other programs to open it.
- Feb 2013: Fullwidth characters are now handled correctly in
fbpad; Felix Janda tested the changes and prepared a preliminary patch.
- Jan 2013: Many of my framebuffer programs define a FB_VAL() macro
as an alias for fb_val() function.
The macro can be redefined for speed (should help especially
fbpdf, fbvis and cnoor). On 32-bit RGB framebuffers, for instance,
it can be redefined as "(((r) << 16) | ((g) << 8) | (b))".
I no longer use X11.
- fbpad, a small linux framebuffer
virtual terminal. It manages many terminals through single-letter tags.
It uses tinyfont font files; ft2tf program
converts common font formats to tinyfont
(for testing, you can try courier regular,
italic and bold tinyfonts).
Here's a screenshot with Ubuntu monospaced.
has a nice but out of date introduction.
- fbpdf, a linux framebuffer pdf
viewer using mupdf library.
It can also use libpoppler and can view djvu files via libdjvulibre.
- fbvis is a framebuffer image viewer;
includes stbi and
and does not depend on external image libraries.
- fbff, a ffmpeg-based linux
framebuffer media player. The libmpeg3 branch uses libmpeg3 instead
- fbvnc, a small framebuffer vnc viewer;
Jörg Reinhard added german keyboard support, available
SliTaz uses this
- cnoor to read the holy Quran on
Many of the programs in this page can be compiled with neat*
(using neatcc.c wrapper for neatcc, neatlibc and neatld)
or with neatcc and musllibc/dietlibc.
This script fetches, compiles, and sets up
neatcc, neatld and neatlibc.
- neatcc is a small ARM/X86(_64) C compiler;
here's a brief introduction and
here's its small testsuite.
- neatld is a simple ARM/X86(_64) static linker.
- neatas is an ARM assembler; note
that neatcc does not need an assembler, as it generates machine code directly.
- neatlibc is a very small ARM/X86(_64) libc
written mainly to bootstrap neat*; I wish to find the time to clean it up
and implement its missing functions.
- A simple ELF core file backtrace viewer (my gdb replacement).
- To find ELF symbols around a virtual address, I use elfloc.
I prepare almost all of my documents with these programs.
To make setting up neatroff easier,
obtains, builds and installs
neatroff and its pre- and post-processors, replacing the old
- A new troff implementation neatroff
and its postscript postprocessor neatpost;
neatroff supports utf-8 encoding, named environments,
long register and macro names,
advanced font features present in OpenType fonts,
paragraph-at-once line formatting, changing text colour,
bidirectional text rendering, and keshideh justification;
here's a brief introduction.
- The dir branch of neatroff supports right-to-left text rendering as
described here and here's a short
introduction in Farsi. The dir branch also supports cursive scripts
(connecting glyphs at their cursive attachment positions,
as defined in the fonts).
- neateqn is
an eqn preprocessor for neatroff, which addresses some of
the shortcomings and problems of the original eqn. It implements
most of the extensions introduced by Groff's eqn.
- neatrefer is a small and slightly
incompatible refer clone. Also bib2ref converts
bibtex files to refer databases and ref2bib does the reverse.
- Here's the port of Plan 9 troff (troff, tr2ps,
eqn, tbl, pic, and grap) to linux.
The preprocessors and the macro packages can be used with neatroff also.
- neatmkfn can create neatroff
font descriptions from AFM and TTF files (OTF files can be converted
to TTF first). It extracts information about advanced font features
present in OpenType fonts to use inside neatroff.
- ctxt to write formatted documents (including
- nref manages document references; it can be used as
a troff preprocessor.
- A mailx clone, a fast and simple mail client.
- A pop3 client; appends mails to
different mbox files based on the specified rules (uses polarssl).
- A smtp client (uses polarssl).
- mailpg, a mail pager.
- tdq, a fast dictionary lookup program (xdxf and stardict
files can be imported).
- pdftxt uses mupdf to extract text from pdf files;
prefixes each line with its page number for searching.
- rangi to detect coloured graph motifs;
more information available here.
- minmad to play mp3 files using OSS/libmad
(the alsa branch uses alsa).
- minmix is a small OSS mixer;
here's an older version for ALSA.
- llx reads commands from standard input and executes
them in parallel with an optional maximum concurrent processes limit.
- The repeat after me typing exercise.
- A small utf-8 unix fmt(1) clone (not completely compatible though).
- ethcat is my tcpdump/tcpreplay replacement
- A simple socks v5 server (no tcp bind).
- dc16, a trivial stack-based calculator supporting
0x1f style hex numbers; handy when doing hex calculations.
- I started rope (a python refactoring library)
in 2006; I do not use python any more, however.
- A simple hex file viewer.
I am Ali Gholami Rudi (ali at rudi dot ir).
Hosted by tuxfamily.org.