This page lists many small programs that I have written for my
RECENT CHANGES AND COMMENTS
- Jul 2016: Neatroff now supports Groff-like .tkf request for tracking
- Jul 2016: Neatcc now uses a new register allocation algorithm.
The old noic branch produces more optimised code, however.
- Jun 2016: In neatroff, the edges of polygons (\D'p ..') can
now be lines, arcs, or splines.
- May 2016: Uploaded a patch to rotate the output
of fbpad 180 degrees.
- Apr 2016: Neatcc introduction is updated.
- Apr 2016: Neatcc is
updated to include intermediate code optimisations (instead
of the old two-pass compilation) and cleaner intermediate and
final code generation (the old_ic branch contains the history
of these changes).
- Apr 2016: Neatcc_make
includes a makefile to obtain and build neatcc,
neatld, and neatlibc.
- Mar 2016: A new section in getting started with neatroff
describes how to use neatroff without installing it.
- Feb 2016: Neatvi now highlights neatmail listings.
- Feb 2016: I use this wrapper script for neatmail.
- Jan 2016: I have uploaded fbpad_mkfn,
a replacement for ft2tf, for generating fbpad font files. It
can use either stb truetype header or freetype library.
- Jan 2016: neatrefer now
supports "\*[cite label]" citations and replaces them
with "\*[cite refno]", in which refno is the reference number
of the entry with the given label.
- Jan 2016: pop3 and
smtp can now use
either mbedtls (polarssl) or openssl.
- Dec 2015: I am writing neatmail,
my new mail client.
- Dec 2015: Neatcc may be changed to adopt a new intermediate code.
- Nov 2015: Note that neatvi can use terminal 256-colour
palette if available, as specified in this conf.h.
- Sep 2015: Uploaded a new version of pdftxt
to work with mupdf-1.7a (patch contributed by Laura Michaels).
- Jul 2015: Uploaded dnsred to redirect DNS
queries to other UDP/TCP DNS servers; it is very simple but
could be easily extended to support simultaneous queries and
- Jun 2015: Added breakcost command to neateqn to specify line-break
cost after top-level operators; neateqn introduction
includes more details.
- May 2015: I am writing neatvi,
a vi/ex editor for editing bidirectional utf-8 files.
- Mar 2015: After more than two years I have updated fbff: now it
features more accurate seeking commands and vi-like marks, as
- Mar 2015: Neateqn can now break long equations after binary and
- Jan 2015: Neatroff_make now
includes manual pages for neatroff and its helper programs (contributed
by Larry Kollar).
- Jan 2015: Uploaded getting started with neatroff.
- Dec 2014: Uploaded a neateqn 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: 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))".
For a guide to set up neatroff read getting started with neatroff.
- 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,
bidirectional text rendering, and keshideh justification;
consult neatroff introduction 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. The dir branch also supports cursive scripts
(connecting glyphs at their cursive attachment positions,
as defined in some OpenType 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.
Here is a brief neateqn introduction.
- 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.
- To make setting up neatroff easier,
obtains, builds, and installs
neatroff and its pre- and post-processors. It also contains
a set of standard troff macros from Plan 9.
- neatvi is
a vi/ex editor for editing bidirectional utf-8 files.
- ctxt to write formatted documents (including
- nref manages document references; it can be used as
a troff preprocessor.
I no longer use X11.
- fbpdf, a linux framebuffer PDF,
XPS, EPUB, and CBZ viewer using mupdf
library. It can also use libpoppler for PDF and can view DJVU files via
- fbvis is a framebuffer image viewer;
includes stbi and
and does not depend on external image libraries.
- fbff, an ffmpeg-based linux
framebuffer media player. The libmpeg3 branch uses libmpeg3 instead
- fbpad, a small linux framebuffer
virtual terminal. It manages many terminals through single-letter tags.
The fbpad_mkfn program (or
its predecessor ft2tf) can generate
fbpad font files (for testing, you can try courier regular,
italic and bold tinyfonts).
Here are a few screen shots with Ubuntu monospaced,
Ubuntu monospaced, and Monofur.
Archwiki has a nice but out of date introduction.
- 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 neatcc.
- neatcc is a small ARM/X86(_64) C compiler;
here's a brief introduction, which also describes how
to set up neatcc, 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.
- tdq, a fast dictionary lookup program (xdxf and stardict
files can be imported).
- dnsred redirects DNS queries to other UDP/TCP DNS servers.
- 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.
- neatmail is my new mail client.
- My old mailx clone and
mailpg, a mail pager.
- A pop3 client; appends mails to
different mbox files based on the specified rules.
- A smtp client.
- 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).
- I started rope (a python refactoring library)
in 2006; it is now maintained by Matěj Cepl.
- dc16, a trivial stack-based calculator supporting
0x1f style hex numbers; handy when doing hex calculations.
- A simple hex file viewer.
I am Ali Gholami Rudi (ali at rudi dot ir).
Hosted by tuxfamily.org.