1IJS 0.35 2 3News as of 0.35: 411 Feb 2004 5 6The autoconf build system has been moderized and we now use 7libtool for portable shared library building. Thanks to Roger 8Leigh for helping with that. 9 10Also a bug with ColorSpace field was corrected, thanks to David 11Suffield. 12 13News as of 0.34: 1422 Apr 2002 15 16The source files now have official MIT license banners. Thanks to 17www.opensource.org for hosting the ur-text of this license. Also 18some clarifications on namespace management in the spec. 19 20There is now an IJS website, graciously hosted by linuxprinting.org. 21http://www.linuxprinting.org/ijs/ 22 23There have been some minor improvements in the makefile. 24 25News as of 0.33: 26 27The buffer size has been increased to 4096. It should probably be 28dynamically allocated, though. Minor clarification in BitsPerSample 29language in spec (thanks to Jackie Chang for pointing out the 30ambiguity). 31 32News as of 0.32: 33 34The xres and yres fields of ph are now floats. 35 36The example server now supports margins. A few small bugs have 37been cleaned up as well. 38 39News as of 0.31: 40 41A number of small cleanups in the code. The example client and server 42support more querying and enumeration, but not yet margins. 43 44There is a new API for the client to query the negotiated version 45number. 46 47The ijs_exec_unix module now sets the SIGPIPE signal to ignore. This 48way, if the client abnormally exits, it allows the error to propagate 49through the read() or write() call to the pipe, rather than 50immediately killing the client. 51 52News as of 0.30: 53 54It now builds as a library. Also, there is basic autoconf support (but 55not automake or libtool). It's probably best to link the static 56library for now. I'm open to suggestions - I'm open to drinking the 57entire pitcher of auto* Kool-Aid, but we probably won't use libtool 58in Ghostscript builds. 59 60This release fixes a number of bugs and improves portability. In 61particular, server errors should now bubble up to the client, and 62the termination logic has been patched according to David Suffield, 63who discovered a race condition there. Thanks to David and Russell 64for patches. 65 66The spec is now in a reasonable draft. See ijs_spec.sgml and 67ijs_spec.pdf. Comments and suggestions are welcome. 68 69The example client and server have _not_ yet been updated to use 70the newer features of the ijs spec. Patches are welcome. 71 72News as of 0.29: 73 74I've added a number of things discussed on the mailing list, including 75listing and enumerating parameters, as well as a job abstraction. 76The client interface has changed a bit - job id's are now present 77in most callbacks, colorspace is now presented only as a string, and 78there are quite a few more callbacks. 79 80I've started a skeleton of a protocol spec in DocBook. 81 82Note, there's a potential race condition in EXIT noted by David 83Suffield. The fix hasn't yet been merged in from his work. 84 85News as of 0.2: 86 87This version integrates set_param and get_param, and has moved the 88"page header" processing to use set_param. 89 90Also, there are both Windows (MS VC++) and Unix makefiles. Use 91"make -f unix.mak" to build on Unix. Thanks to Russell Lang for 92Windows portability work. 93 94 95Introduction 96 97This is an early snapshot of IJS. I expect the protocols and API's to 98evolve somewhat, and things like error handling are still far from 99perfect. However, I'm pretty happy that this is going in the right 100direction. 101 102I am doing this prerelease so that authors of various packages related 103to raster-based printing can start thinking about how to integrate it. 104Ideally, all producers of printable raster data should be able to 105function as an ijs client, and all consumers should be able to 106function as an ijs server. This release is about as functional as 107piping pnm's, which is primitive, but the way a lot of drivers still 108work. 109 110 111What is IJS? 112 113IJS is, first and foremost, a protocol for transmission of raster page 114images. This snapshot provides a reference implementation of the 115protocol, the design of which is still in flux. When the protocol 116specification is published, it will be authoritative. Applications 117should feel free to link against the library provided in this package, 118adapt that code for their own needs, or roll a completely new 119implementation. 120 121The protocol is a fairly traditional client-server design. In general, 122the client sends one or more page images to the server, along with 123various metadata. Communication is through simple "commands", which 124are essentially size-prefixed packets. The client sends a command to 125the server, then waits for a response command, either ACK or NAK. 126 127The server "speaks" IJS through stdin and stdout. One consequence of 128this design decision is that the server can be invoked remotely, for 129example through ssh. It's not clear yet how useful this will be, but 130at least people can experiment with it. 131 132Currently, all data goes through the stdin and stdout pipes. It is 133envisioned that a shared memory transport will also be provided, 134transparently. IJS will fall back to pipes if shared memory is not 135available for any reason. 136 137I'm not yet convinced that the performance win for shared memory is 138significant. I would like to benchmark domain sockets as well, as they 139are likely to provide better performance than pipes, and are also 140highly desirable for cases where the server runs as a persistent 141daemon. 142 143This tarball provides an "IJS library" in the form of ijs, ijs_client, 144and ijs_server. It also provides an example client (capable of reading 145pnmraw files) and an example server (capable of generating 146PostScript). I imagine that the example programs will be useful for 147development and testing, but that end-users probably won't find a need 148for them. 149 150To try IJS, compile and run "./ijs_client_example -s 151./ijs_server_example -pOutputFile=/tmp/tmp.ps foo.ppm". This will 152invoke ./ijs_server_example, which will in turn generate a /tmp/tmp.ps 153file. 154 155The ijs_client_example takes a -p command line argument for setting 156parameters, and a -r argument for setting resolution. Here is a 157typical command line: 158 159./ijs_client_example -s ./ijs_server_example -pOutputFile=/tmp/tmp.ps \ 160 -r300 in.ppm 161 162The syntax of -p is a sequence of key=value pairs, separated by 163commas. A backslash in the value escapes the next character (allowing 164embedded commas in the value). Thus, '-pfoo=bar, quux=a\,b' sets the 165key "foo" to the value "bar, and the key "quux" to the value "a,b". 166 167 168FAQ 169 170What does IJS stand for? 171 172It stands for "raster printer driver architecture." It's spelled 173U+30EA U+13DA, to avoid confusion, and to save space in UTF-16 174encodings. 175 176Actually, the name derives from HPIJS, which presumably stands for HP 177InkJet Server. The name pays homage to HPIJS for the inspiration, 178while communicating that it's not specific to HP printers. 179 180Licensing 181 182All source code in this distribution is released under the MIT 183License. I want everybody to be able to use this. 184 185 186More stuff to write: 187 188Actual specification for the protocol (in draft). 189 190Client spawns server, invoker invokes client and server, and 191persistent server daemon modes. 192 193Negotation of extensions (goal is interoperability between versions). 194(Actually, the PING/PONG protocol as it exists negotiates version 195numbers). 196 197TODO: 198 199Shared memory transport. 200 201Should have an alternate mode in which the client is passed the pipe 202information, rather than having to spawn the server. 203 204wait() cleanup of invoked server. 205 206Package library up as libijs.a, .so (partially done) 207