• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..03-May-2022-

Makefile.inH A D23-Apr-20022.4 KiB8253

READMEH A D22-Apr-20027 KiB197138

common.makH A D01-Feb-2002608 148

configureH A D17-May-200336.3 KiB1,126892

configure.inH A D23-Apr-2002195 98

ijs-config.inH A D01-Feb-2002952 5749

ijs.cH A D22-Apr-20024.5 KiB202142

ijs.hH A D22-Apr-20023.1 KiB12577

ijs_client.cH A D22-Apr-20027.6 KiB312233

ijs_client.hH A D22-Apr-20022.5 KiB9752

ijs_client_example.cH A D22-Apr-20028.4 KiB378317

ijs_exec_unix.cH A D22-Apr-20022.7 KiB10562

ijs_exec_win.cH A D22-Apr-20025.2 KiB152106

ijs_server.cH A D22-Apr-200219.6 KiB896723

ijs_server.hH A D22-Apr-20023.4 KiB12980

ijs_server_example.cH A D22-Apr-200211.5 KiB521406

ijs_spec.psH A D01-Feb-200278.4 KiB

ijs_spec.sgmlH A D23-Apr-200236.2 KiB1,100904

install-shH A D01-Feb-20025.5 KiB252153

state.epsH A D01-Feb-20027.3 KiB

state.figH A D01-Feb-20022.9 KiB6362

unistd_.hH A D22-Apr-20021.4 KiB359

unix.makH A D01-Feb-2002294 1714

windows.makH A D01-Feb-2002179 1512

README

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