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
- Apr 2014: I have renamed my small refer clone to
- Mar 2014: Neateqn seems stable now. Updated
neatroff build script to fetch and compile neateqn too.
- Mar 2014: Neatroff now reports the bounding box of \w
argument via bbllx, bblly, bburx and bbury number registers
(added while working on neateqn).
- Feb 2014: Uploaded version 0.9 of ft2tf, which allows specifying
distinct horizontal and vertical DPIs.
- Jan 2014: Added a script to fetch, compile
and set up neatroff and neatpost. Read its comments
for more information.
- Nov 2013: I have revised neatroff's font description format.
While remaining backward compatible with the original troff,
neatroff now supports lines starting with the token "char"
to define characters and lines starting with "kern" to define
kerning pairs; mktrfn has also been updated to use the new
- Nov 2013: A new program has been added to tdq to import Arpabet
pronunciations after converting them to IPA.
- Oct 2013: Added .char, .chop and .fspecial requests to neatroff.
- Sep 2013: After about two years, I have merged fbpad's 256 color
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.
- Jul 2013: Now I use neatroff and neatpost for typesetting.
- 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.
- 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 color,
arbitrary font ligatures and pairwise kerning,
bidirectional text rendering, and keshideh line adjustment;
here's a brief introduction.
Right-to-left rendering is implemented
in its dir branch as described here.
Here's the set of basic troff
macros and an output device for neatroff
(the output devices can be created using the mktrfn
This script fetches, compiles and sets up neatroff
and neatpost (see the included comments for more information).
- 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 mktrfn 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 colored 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 anymore, however.
- my simple hex file viewer
I am Ali Gholami Rudi (ali at rudi dot ir).
Hosted by tuxfamily.org.