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

..08-Aug-2012-

Makefile.amH A D08-Aug-20123.3 KiB12555

READMEH A D08-Aug-20127.2 KiB207145

autogen.shH A D08-Aug-20124 KiB142115

common.makH A D08-Aug-2012608 148

configure.acH A D08-Aug-20124.9 KiB165141

ijs-config.1H A D08-Aug-20122.3 KiB6447

ijs-config.inH A D08-Aug-2012952 5749

ijs.cH A D08-Aug-20124.6 KiB202142

ijs.hH A D08-Aug-20123.1 KiB12577

ijs.pc.inH A D08-Aug-2012243 119

ijs_client.cH A D08-Aug-20127.8 KiB312233

ijs_client.hH A D08-Aug-20122.7 KiB9752

ijs_client_example.cH A D08-Aug-20129.4 KiB381321

ijs_exec_unix.cH A D08-Aug-20122.7 KiB10462

ijs_exec_win.cH A D08-Aug-20125.6 KiB151107

ijs_server.cH A D08-Aug-201220.7 KiB908728

ijs_server.hH A D08-Aug-20124.1 KiB12980

ijs_server_example.cH A D08-Aug-201212.5 KiB520405

ijs_spec.psH A D08-Aug-201278.5 KiB

ijs_spec.sgmlH A D08-Aug-201236.2 KiB1,100904

state.epsH A D08-Aug-20127.3 KiB

state.figH A D08-Aug-20122.9 KiB6362

unistd_.hH A D08-Aug-20121.6 KiB4314

unix.makH A D08-Aug-2012295 1814

windows.makH A D08-Aug-2012179 1512

README

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