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
- Jul 2014: Neatroff through neatpost supports \X'rotate deg' for
rotating the current page and \X'eps file [width [height]]' for
including EPS files.
- Jul 2014: Neatroff now supports utf-8 hyphenation
patterns (.hpf, .hpfa and .hcode requests).
Also mktrfn was renamed to neatmkfn.
- Jun 2014: Neatroff supports conditional interpolation with
\?'cond@expr1@expr2@' escape sequence. More information
is included in neatroff introduction.
- May 2014: Neatroff can now format whole paragraphs at once to
obtain paragraphs with more uniform spacing. Also now it is
possible to specify the hyphenation penalty (.hyp), the amount of
sentence space (the second argument of .ss),
and the amount by which spaces in a line may
be shrunk while filling (.ssh).
- 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)
- elfloc to find elf symbols around a virtual address
I prepare almost all of my documents with these programs.
- my troff clone neatroff
and its postscript postprocessor neatpost;
neatroff supports utf-8 text encoding, named environments,
long register and macro names, changing text colour,
arbitrary font ligatures and pairwise kerning,
paragraph-at-once line formatting,
bidirectional text rendering, and keshideh justification;
here's a brief introduction.
Here's the set of basic troff
macros and an output device for neatroff
(the output devices can be created using the
This script fetches, compiles and sets up neatroff
and neatpost (see the included comments for more information).
- The dir branch of neatroff supports right-to-left text rendering as described
here and here's a short
introduction in Farsi.
- 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.
- I wrote neatmkfn to create neatroff
font description files from AFM, OTF and TTF files
- ctxt to write formatted documents (including
- nref manages document references; it can be used as
a troff preprocessor
- my mailx clone, a fast and simple mail client
- my pop3 client; appends mails to
different mbox files based on the specified rules (uses polarssl)
- my smtp client (uses polarssl)
- mailpg, my 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
- my repeat after me typing exercise
- my small utf-8 unix fmt(1) clone (not completely compatible though)
- ethcat is my tcpdump/tcpreplay replacement
- my 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.
- my simple hex file viewer
I am Ali Gholami Rudi (ali at rudi dot ir).
Hosted by tuxfamily.org.