Electrical-Forenics Home ray@RayFranco.com                       601.529.7473
   © Dr. Ray Franco, PhD, PE  -  208 Fairways Dr., Vicksburg, MS 39183

Update on 03/19/2023.

foo2zjs.rkkda.com

Foo2zjs is an open-source printer driver

From 2002 until 2021, the source code was hosted at: http://foo2zjs.rkkda.com. Almost all of the code was written by Rick Richardson with very few contributors. The name of the website comes from: rick, kathleen, Kelsey, dylan, abby.

Archives of http://foo2zjs.com are available at: WayBackMachine-foo2zjs.rikkda. The last capture image was Jan 29, 2021.

Near the end, there was a dramatic increase in size of the compressed tar file. Investigate this.

Because the website is dead, Debian uses a foreign website that was a mirror image of it: Add Link

foo2zjs.rkkda.com with HBPLv1 - Dell 1250c, C1660 and C17560

foo2zjs included a driver for version 2 of the Host Based Printer Languages (HBPLv2), foo2hbpl2. However, it did not include a driver for version 1 of HBPL. In 2014, David Coffin wrote a driver for HBPLv1, foo2hbpl1 and Rick Richardson wrote the wrapper files for it.

The foo2hbpl1 driver added support for the following printers: Dell 1205c, C1660, C1760, Epson-AcuLaser_C1700, and Fuji-Xerox DocuPrint CP105b.

Because of a bug, the foo2hbpl1 driver and its wrapper files were never included in any official releases at http://foo2zjs.rkkda.com.

However, David Coffin in an Internet article, Using HBPL Printers in Linux, provides a link to a modified foo2zjs package that does include the foo2hbpl1 driver, its wrapper files, and the printer PPD files.

Clicking this link will download the modified package: foo2zjs.tar.xy - modified version

The "foo2hbpl1-wrapper.in" Bug

The bug is not in the foo2hbpl1 driver, but in its wrapper file, "foo2hbpl1-wrapper.in". A case statement in this file, is expecting a string value for the page size, but it receives a number value. The fix is to add the number values with an OR operator.

I believe this bug was first fixed in 2016 by Mark Nicholson when he added support for HBPLv1 to Debian's foo2zjs (20160407dfsg0-1) package:

Nicholson only built Debian i386 and amd64 packages.

However, Cees de Groot, in Canada, download Nicholson's source and patch code from the above referenced, and he built Debian armhf (32-bit) packages for his Raspberry Pi 3. His website, "CUPS on Raspberry Pi for HBPL1": "http://evrl.com/linux/2016/07/22/c1660w-rpi.html" is now dead, but the packages can still be downloaded via the Way Back Machine:

https://web.archive.org/web/20220113164134/http://evrl.com/linux/2016/07/22/c1660w-rpi.html

I downloaded Cees de Groot's packages, and this was the first success that I had with my Dell C1760nw.

In 2018, the bug and its fix were rediscovered on the Raspberry Pi Forum - Dell C1760nw / Xerox Phaser 6000B - Page2.

In 2020, the bug and its fix were again rediscovered, bug (245128). This website clearly depicts what needs to be patched:

The lines that need to be patched.

Even though support for HBPLv1 printers never got rolled into any official releases at http://foo2zjs.rkkda.com, we are fortunate that David Coffin published the code anyway. Now others have fixed it.

Debians foo2zjs Package

foo2zjs.rkkda.com source files contain a Makefile. It only takes two commands to compile and install the driver.

sudo make
sudo make install

However, it takes considerably more work and expertise to convert the source files into a Debian binary package that can be distributed. Debian provides tools (software packages) for doing this: xxxxx. In the debian sub-directory, you must have a rules file, and a control file. In the control file, you name the package or packages that will be created. Then you, create input file(s) for the package(s) that you named in the control file. The input file(s) specify the files that will be installed and where to install them (the directories).

Debian's control file for foo2zjs has two packages:

The common package contains: wrapper files (script files), printer PPD's files and man page files. The other package contains, the driver files, which are compiled binary executables that depend on the computer architecture and OS.

This allows Debian to have a common package that is architecturally independence (the same regardless of the processor) and an architecturally dependence package (changes depending on the processor (intel or arm) and the OS).

Debian rule file for foo2zjs is very complex with lots of overrides.

Therefore, Nicholson changed as little as he could. In the control file, he added a third package:

and he added a corresponding input file for this package:

that specified where to place the new driver foo2hbpl1, its wrapper files, the added printer PPD files, and the added man pages.

With Nicholson's approach, you have to install three packages. Cees de Groot used Nicholson's control and imput files to produce three packages for his Raspberry Pi 3:

Note, the armhf architecture specifies an ARM 32-bit processor with hardware floating point. His driver should only be installed on a 32-bit OS.

I do not known exactly how or why Debian adds the date of the original package, the dfsg package and the architecture code to the final package names.

This raises the question, if you use the exact same source files that Debian used, does this change Debian's binaries: printer-driver-foo2zjs-common and/or printer-driver-foo2zjs. If not, you should be able to install Debian's standard foo2zjs package, and then just install the foo2zjs-hbpl1 package, and/or can you just install the foo2zjs-hbpl1 package without installing the other two packages.

GitHub Repositories

* Mark Nicholson's GitHub repository is active, and the last changes he made to foo2zjs were in 2018: https://github.com/mark-nicholson/foo2zjs . There is a link in his repository to "Quality Improvements for HBPL1 Printers".

* Gees de Groot's GitHub repository is active, and the last changes he made to foo2zjs were in 2019: https://github.com/cdegroot/foo2zjs

mikerr's GitHub repository's appears to be David Coffin's modified foo2zjs.rkkda.com package. However, mikerr did fix the bug in 2023: https://github.com/mikerr/foo2zjs

koenkooi's GitHub repository's appears to a 2015 snap shot of foo2zjs.rkkda.com https://github.com/koenkooi/foo2zjs

Linux Distro's with foo2zjs

This was an excellent open-source printer driver. It made its way into most Linux distributions: Arch, Debian, Ubuntu, RedHat, Fedora, SUSE, BSD, Gentoo, MacOSX, Mandrake/Manrivia and Xandros. However, some of these distos do not support as many of the printers that were supported at http://foo2zjs.rddka.com. The reason for this is copyrights and licenses. Debian not only wants the software to be open source but free from any present or future restrictions. Ubuntu is less restrictive, etc.

A Pictorial View of how foo2zjs.rddka.com works is below::

foo2zjs.png