1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2<html> 3<head> 4<title>Ghostscript projects</title> 5<!-- $Id: Projects.htm,v 1.33.2.2 2002/02/01 05:31:25 raph Exp $ --> 6<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> 7</head> 8 9<body> 10<!-- [1.0 begin visible header] ============================================ --> 11 12<!-- [1.1 begin headline] ================================================== --> 13 14<h1>Ghostscript projects seeking developers</h1> 15 16<!-- [1.1 end headline] ==================================================== --> 17 18<!-- [1.2 begin table of contents] ========================================= --> 19 20<h2>Table of contents</h2> 21 22<ul> 23<li><a href="#Platforms">Platforms</a> 24<li><a href="#Driver_architecture">Driver architecture</a> 25<li><a href="#Specific_drivers">Specific drivers</a> 26<li><a href="#Graphics_functionality">Graphics functionality</a> 27<li><a href="#Performance">Performance</a> 28<li><a href="#Other_functionality">Other functionality</a> 29<li><a href="#Other_implementation">Implementation improvements</a> 30</ul> 31 32<!-- [1.2 end table of contents] =========================================== --> 33 34<!-- [1.3 begin hint] ====================================================== --> 35 36<p>For other information, see the <a href="Readme.htm">Ghostscript 37overview</a>. 38 39<!-- [1.3 end hint] ======================================================== --> 40 41<hr> 42 43<!-- [1.0 end visible header] ============================================== --> 44 45<!-- [2.0 begin contents] ================================================== --> 46 47<p> 48There are many projects that would improve Ghostscript and that we would 49like to do, but for which we don't have enough resources. If you would like 50to take responsibility for any of these projects, please <a 51href="mailto:raph@artofcode.com">contact us</a>. Additional comments on 52implementation approaches or project goals are in <I>italic type like 53this</I>. 54 55<h2><a name="Platforms"></a>Additional platforms</h2> 56 57<h3>DOS, Windows and OS/2 builds using gcc.</h3> 58 59<p> 60We would like Ghostscript to work with the free <b><tt>emx/gcc</tt></b> and 61<b><tt>rsx</tt></b> libraries, to provide an alternative DOS, Windows 6295/98/NT, and OS/2 implementation that requires no proprietary, commercial 63compilers. We think Ghostscript's existing OS/2 makefile already includes 64most of what is needed. If someone is willing to do the work, we will be 65happy to include this in our list of supported platforms and to distribute 66the makefiles. 67 68<h3>Windows driver using Ghostscript as a language monitor.</h3> 69 70<p> 71MS Windows has a "language monitor" capability which would allow Ghostscript 72to be invoked seamlessly to process input files in any language Ghostscript 73could handle (currently PostScript and PDF) and for any printer for which 74Ghostscript had a driver. Doing this properly would require integrating 75Ghostscript with Windows' "Add Printer" dialog, and would also require 76creating a PPD for Ghostscript. <I>Russell Lang's RedMon program provides 77some, but not all, of this capability.</I> 78 79<h3>Netscape browser plug-in.</h3> 80 81<p> 82Currently, Ghostscript can work as a "helper application" for the Netscape 83browser, but not as a plug-in; the latter would integrate it more closely 84with the browser. We aren't sure what doing this would involve; we've also 85heard by rumor that it's already been done. 86 87<h3>Ghostscript as an Active-X COM Object.</h3> 88 89<p> 90In order to integrate Ghostscript into XMetaL and other applications it 91would be convenient for Ghostscript to be distributed as a COM object 92along with the current gswin32.exe, gswin32c.exe and gsdll32.dll files. 93 94<hr> 95 96<h2><a name="Driver_architecture"></a>Driver Architecture</h2> 97 98<h3>Improved multi-threaded rendering support.</h3> 99 100<p> 101Currently, drivers can be written so that converting PostScript to a list of 102graphical objects can run in one thread, and rasterizing the objects can run 103in another thread. However, drivers must be written specially if they are 104going to do this. We would like to change the architecture so that any 105driver can work this way. We would also like to support dual-threaded 106operation for drivers that produce high-level output, such as the PDF 107writer. <I>Doing this would require separating banding from 108the multithreaded logic. Also, currently each thread has its own allocation 109pool: this is unnecessary in the normal case, since Ghostscript now supports 110properly locked access to the C heap, but embedded systems still need to use 111a fixed-size area for the rasterizing thread. With a locked, shared 112allocator, the rasterizing thread could use the full set of band list 113functions; with a fixed-size area and a separate allocator, only a subset is 114available, as is the case now for dual-threaded drivers. 115</I> 116 117<h3>Dynamic run-time loadable devices.</h3> 118 119<p> 120Currently, drivers must be linked into the executable. We would like to be 121able to load drivers dynamically. Doing this requires defining a 122platform-independent API (presumably extending the current gp_* APIs) that 123would work at least on Linux, vendor Unix, MS Windows, and Macintosh. Unix 124systems should include Sun, HP, AIX, IRIX, DEC; Linux ELF and a.out formats 125should both be supported. <I>Consider the Netscape plug-in 126architecture.</I> 127 128<h3>Moving 'setpagedevice' into C.</h3> 129 130<p> 131The PostScript 'setpagedevice' function implements matching of media and 132page size requests to available media, page orientation, and paper handling 133(duplex, etc.) Currently it is implemented in PostScript code, which means 134it is not available for use with other input languages. (It is available 135for PDF, which Ghostscript implements on top of PostScript, but not for the 136not-yet-freely-available PCL interpreters that use the Ghostscript library, 137or for possible future SVG or similar interpreters). We would like to move 138this function into C. <I>The device driver will be required to 139send page parameters up to PostScript to be stored in a resource. To be 140included in this project are handling policy implementations in the device 141drivers. DeferredMediaSelection should also be implemented.</I> 142 143<h3>Adding 'tee' for output to multiple devices.</h3> 144 145<p> 146In a few cases, it would be desirable to provide a 'tee' capability for 147drivers: specifically, for generating small, low-resolution 'thumbnail' 148images concurrently with other output. <I>Probably the 149simplest way to do this is to generate a band list and then process it 150twice. This is not completely trivial, since the band list does include 151device resolution information and scaling would be required for some 152constructs.</I> 153 154<h3><b><tt>OutputDevice</tt></b> resource category</h3> 155 156<p> 157Each available output device should provide an instance of the 158<b><tt>OutputDevice</tt></b> resource category, which gives the available 159page sizes, resolutions, media classes, process color models, and other 160information about the device. <I>This would replace the current 161non-standard use of a 4-element <b><tt>PageSize</tt></b> in the 162<b><tt>InputAttributes</tt></b> entry of the page device dictionary.</I> 163 164<h3>Removing the limit on the length of OutputFile.</h3> 165 166<p> 167Currently, the maximum length of the <b><tt>OutputFile</tt></b> parameter is 168a compile-time constant, <b><tt>gp_file_name_sizeof</tt></b>. This is 169appropriate for ordinary file names, since this constant is the platform's 170limit on the length of a file name. However, if <b><tt>OutputFile</tt></b> 171is a pipe, the length should not be limited in this way. <I>This is 172probably a small project: it requires allocating the file name dynamically, 173and freeing it in the finalization routine that gets called when a driver 174instance is freed.</I>. 175 176<h2><a name="Specific_drivers"></a>Specific drivers</h2> 177 178<h3>PrintGear and PPA output drivers.</h3> 179 180<p> 181We would like to provide (Adobe) PrintGear and (H-P) PPA output drivers for 182Ghostscript, but the specifications for these protocols are not published. 183If you can provide them to us without violating any agreements, please let 184us know. (Some work has already been done on reverse-engineering these 185protocols, but we don't have references to it.) 186 187<h3>Improve 'pswrite' up to the level of 'pdfwrite'.</h3> 188 189<p> 190We would like to improve the high-level PostScript-writing 191<b><tt>pswrite</tt></b> driver to bring it up to parity with the PDF-writing 192driver (including the many improvements in the latter being implemented in 193Ghostscript 7.xx). Specifically, we want it to write text as text rather 194than bitmaps, and to consistently write images in their original high-level 195form. <I>We have already started to factor out code that 196should be common to these two drivers, specifically for writing embedded 197fonts and compressed data streams.</I> 198 199<p> 200There is one small part of this project that would be especially valuable 201and could be done independently (although it might have to be partly or 202entirely redone later): compressing images. Currently the driver only 203compresses character bitmaps, and doesn't compress other images at all. 204<I>It should use the <b><tt>CCITTFaxEncode</tt></b> filter for 1-bit-deep 205images, and plane-separated <b><tt>LZWEncode</tt></b> compression for color 206images, using the <b><tt>miGIF</tt></b> algorithms that are believed to be 207free of the Welch patent for the latter. When generating LL3 PS, the 208<b><tt>Flate</tt></b> compression will work better than miGIF. It may be 209worth trying several methods on each image and use the one that works best.</I> 210 211<h3>High level graphics and text for PCL 5 and PCL XL drivers.</h3> 212 213<p> 214Currently, the PCL 5 drivers produce only bitmaps; the PCL XL driver 215produces high-level graphics and sometimes high-level images, but low-level 216text. We would like to improve these drivers to produce higher-level, 217smaller output. <I>This was a very low-priority project; it has become more 218important now that H-P's laser printers are shipping with less memory.</I> 219 220<h3>Improved high level GDI driver for Windows.</h3> 221 222<p> 223We would like a "GDI driver" for MS Windows that would implement more 224higher-level constructs (specifically for text). <I> The 225<b><tt>mswin</tt></b> and <b><tt>mswinprn</tt></b> drivers both do some of 226this. Some of the the 'xfont' support code for MS Windows should be useful. 227We were frustrated in the past because the GDI calls for getting font sizes 228and metrics consistently returned incorrect information and provided no way 229to get the correct information; perhaps this has been fixed in 32-bit 230Windows. We believe that H-P, Russell Lang, and perhaps others are working 231in this area, but we can always use more help.</I> 232 233<h3>PDF thumbnail generation.</h3> 234 235<p> 236The PDF writer needs to be able to generate thumbnails (small previews). We 237might do this through the 'tee' capability mentioned above. However, we 238currently prefer the idea of implementing a completely separate program to 239add thumbnails to an arbitrary, existing PDF file: this would allow 240Ghostscript to add thumbnails to PDF files generated by other programs. 241<I>Much of the code needed to do this has already been written 242for Ghostscript's PDF linearizer: see 243<b><tt>lib/pdfwrite.ps</tt></b>. A user has implemented this as well, 244using a separate program that calls Ghostscript: see 245<a href="http://www.uni-giessen.de/~g029/eurotex99/oberdiek/"> 246http://www.uni-giessen.de/~g029/eurotex99/oberdiek/</a>. 247</I> 248 249<h3>Consolidate inkjet drivers into a single family.</h3> 250 251<p> 252In addition to factoring out the error diffusion code as described below, we 253would like to see another attempt at reducing the enormous volume of code 254for color inkjet drivers. There are three sets of drivers (gdevcdj.c, 255gdevstc.c, gdevupd.c) with much overlapping functionality. The latter two 256driver families make good attempts at factoring out things like head 257geometry and canned control strings, but we think this problem deserves 258another pass, especially in the hope of consolidating these drivers into a 259single family. 260 261<h3>Download glyph bitmaps (with glyph decaching notification).</h3> 262 263<p> 264See below under "Notification for glyph decaching." 265 266<h3>Preserve compression when writing PDF images.</h3> 267 268<p> 269Currently, all images are decompressed by the interpreter before being 270passed to the graphics library; the PDF writer may then compress them again. 271Ordinarily, this only slows things down a little, but in the case of 272DCT-encoded images that are being DCT-encoded in the output, image 273degradation may occur. Ideally, the implementation should be smart enough 274to not decode and re-encode the image. However, making this work properly 275is difficult. <I>This would probably involve extending the library APIs for 276images so that they could pass a stream, possibly including filters, instead 277of the (fully decoded) data rows.</I> 278 279<hr> 280 281<h2><a name="Graphics_functionality"></a>Graphics functionality</h2> 282 283<h3>Support for 64-bit colors on 64-bit platforms.</h3> 284 285<p> 286Currently, the library supports a maximum of 32 bits of data per pixel; we 287would like to raise this limit to 64 bits on systems where the 'long' data 288type is 64 bits wide. <I>The <b><tt>gx_color_index</tt></b> 289type is already defined as 'long', but there are many places where the type 290<b><tt>bits32</tt></b> is used for pixel values; there is a 32-bit 291stored-image "device", but there is no 64-bit device; a few algorithms and 292tables have knowledge of the 32-bit width built into them, only because the 293C preprocessor doesn't have any kind of loop or repetition 294capability.</I> 295 296<h3>In-RIP trapping.</h3> 297 298<p> 299The PostScript specification includes an option for the interpreter to 300implement trapping (adjustments of object boundaries to prevent visual 301anomalies caused by slight misregistration of different ink layers): we 302would like to implement this. <I>This is a complex and 303difficult area; even many Adobe RIPs don't do it.</I> 304 305<h3>Hook FreeType TrueType library into graphics library.</h3> 306 307<p> 308We would like to provide an option for good integration of the FreeType font 309rasterizer into Ghostscript, since the FreeType code is better than 310Ghostscript's current rasterizers. We understand that some users in Japan 311have done this already, but we don't know if this is a good starting point 312(the only documentation is in Japanese). <I>Their work uses 313Ghostscript's 'xfont' interface, which is how Ghostscript interfaces to 314platform facilities such as the X and MS Windows font capabilities. This is 315a device-level interface and not the best place to do this: we would rather 316have the graphics library interface to FreeType directly.</I> 317 318<h3>ICC profile support for output.</h3> 319 320<p> 321Ghostscript 7.00 and later supports ICCBased color spaces of PDF 322using the icclib package from 323<a href="http://web.access.net.au/argyll/color.html "> 324http://web.access.net.au/argyll/color.html</a> 325but there is no facility to use ICC output (printer) profiles that 326may be embedded in the PDF. Also it would be useful for PostScript 327to be able to directly use a specific Intent from ICC profile to 328convert output colors (as CRD's are now used). 329<I>The primary difficulty is that the graphics library and PostScript 330always use CIE XYZ as the connection space, but ICC profiles may 331use CIELAB as the connection space, requiring conversion for use 332with the graphics library. </I> 333 334<h3>Making halftones into "objects" and adding new types.</h3> 335 336<p> 337Currently, knowledge of the specific data formats and algorithms for 338halftoning permeates too many places in the library. We would like 339halftoning to be more "object oriented" (using virtual procedures) so that 340we could support other halftoning methods such as direct use of threshold 341arrays, or the double-rectangle approach added in newer PostScript versions. 342<I>Threshold arrays take much less space than the current 343representation, generally at the expense of longer rendering time for 344black-and-white images; double-rectangle representation would give us a 345better implementation of AccurateScreens. We might want store both 346threshold arrays and the current representation.</I> 347 348<h3>Factor out error diffusion routines, integrate ETS.</h3> 349 350<p> 351Currently, several different inkjet drivers implement their own, very 352similar but slightly differing error diffusion methods. This has caused 353severe code bloat as well as tempting future driver writers to contribute to 354it further. We want to factor out error diffusion into a common set of 355facilities that drivers can use. <I>We would like to design 356these facilities so that they can easily interface to the Even-Toned 357Screening algorithms from artofcode (Raph Levien), to the extent that these 358will be Open Source.</I> 359 360<h3>Improve, or generalize, linearization for stochastic threshold 361data.</h3> 362 363<p> 364The Ghostscript distribution includes a stochastic threshold array. This 365array has some gamma correction built into it, which works well for some 366output devices and not for others. We would like to provide a version of 367this array without (or with less) gamma correction. <I>We have 368original data available from which this could be done fairly easily.</I> 369 370<h3>Change sampled functions to use new interpreted functions.</h3> 371 372<p> 373The PostScript language defines many functions relevant to graphics 374rendering as being implemented by arbitrary PostScript procedures: transfer 375(gamma correction), black generation, undercolor removal, several stages of 376CIE color space and rendering, and color mapping for Separation and DeviceN 377spaces. Since the graphics library can't call PostScript procedures, 378Ghostscript currently samples these procedures at a fixed number of points 379and interpolates linearly between the samples. As of Ghostscript 6.20, the 380library can interpret a restricted subset of PostScript procedures directly 381(basically those that only use arithmetic and comparisons: no loops, 382sub-procedures, or data structures). Changing the rendering functions to 383use this approach when possible would greatly improve output quality when 384the functions are very non-linear (which we have actually seen in practice). 385<I>This should only be done if the function is, in fact, 386severely non-linear, since interpreting the function definition will almost 387always be much slower than interpolating in the table.</I> 388 389<h3>Add optional cubic interpolation to RenderTable and other table 390lookup.</h3> 391 392<p> 393Currently, if a CIE rendering dictionary uses a lookup table for the final 394step, Ghostscript always interpolates linearly between the entries. Cubic 395interpolation should be supported as an option. A cubic interpolation 396option is also needed for general table-lookup Functions. 397 398<h3>Add better (SVG-like) alpha channel and compositing to library.</h3> 399 400<p> 401Ghostscript has partial support for alpha channel and for alpha and RasterOp 402compositing. There is some architectural support for general compositing, 403but it postdates the RasterOp implementation, and most of the RasterOp code 404doesn't use it. We expect that the more extensive compositing and alpha 405capabilities of SVG will find their way into PDF (and probably PostScript as 406well) in the course of 2000 and 2001, and we will need to implement them. 407 408<hr> 409 410<h2><a name="Performance"></a>Performance</h2> 411 412<h3>Change band list logic to defer halftoning until rendering.</h3> 413 414<p> 415Currently, when Ghostscript uses a band list, it does halftoning before 416banding. It should do halftoning after banding: this produces smaller band 417lists and shifts more work to the rasterizer (which is good because the 418rasterizer can be multi-threaded internally for higher performance on 419multiprocessors: see the next topic.) 420 421<h3>Reduce redundant data for smoothed banded images.</h3> 422 423<p> 424When smoothed ("interpolated") images are written in the band list, extra 425rows must be written above and below each band in order to provide the data 426for interpolation. Currently, the number of such rows is computed very 427conservatively; instead, the final interpolation algorithm should be 428consulted to provide the correct value. <i>This is a small task.</i> 429 430<h3>Multi-threaded rasterizing</h3> 431 432<p> 433For high-resolution devices, rasterization dominates execution time. On 434multiprocessor systems, Ghostscript can do tasks in parallel: 435 436<ul> 437 438<li>Rasterize multiple bands simultaneously; 439 440<li>Rasterize multiple color planes of a single band simultaneously (if a 441planar representation is being used); 442 443<li>For some computation-intensive tasks like smoothing images or filling 444large regions, partition the task (possibly buffering more data to allow 445larger-grain partitioning) and execute several partitions simultaneously. 446 447</ul> 448 449<p> 450We would want these facilities implemented so that no conditional 451compilation was involved: on uniprocessor systems, the locking API would 452simply have a vacuous implementation. 453 454<h3>Notification for glyph decaching.</h3> 455 456<p> 457Currently, drivers can't do a very good job of downloading rendered 458character bitmaps to the device they manage, because they can't find out 459when a bitmap is being deleted from Ghostscript's cache and therefore will 460never be referenced again. Here is a sketch of how we would add this 461capability to the graphics library: 462 463<ul> 464 465<li>The driver would implement the <b><tt>text_begin</tt></b> call, simply 466to get access to a <b><tt>gs_imager_state</tt></b> that references the 467rendered character cache. (The driver could always simply call the default 468implementation of <b><tt>text_begin</tt></b>.) 469 470<li>In the <b><tt>text_begin</tt></b> procedure, the driver would call 471 472<blockquote><pre> 473gs_glyph_decache_register(imager_state, notify_proc, proc_data) 474</pre></blockquote> 475 476<p> 477where <b><tt>proc_data</tt></b> was, or pointed to a structure that 478included, a pointer to the driver. 479 480<li><b><tt>gs_glyph_decache_register</tt></b> would use the general 481notification mechanism defined in <b><tt>gsnotify.h</tt></b> to call 482 483<blockquote><pre> 484notify_proc(proc_data, pchar_data) 485</pre></blockquote> 486 487<p> 488whenever a bitmap was removed from the character cache. 489<b><tt>pchar_data</tt></b> would point to some identification of the 490character; perhaps just the bitmap ID, but possibly a 491<b><tt>gx_cached_bits_common</tt></b> or even a <b><tt>cached_char</tt></b>. 492 493<li>The <b><tt>char_cache</tt></b> structure would be need an additional 494member, a <b><tt>gs_notify_list_t</tt></b>. It would also need to add 495finalization so that when it was freed, it would notify and unregister all 496clients, using <b><tt>gs_notify_all(list, NULL)</tt></b> and then 497<b><tt>gs_notify_release</tt></b>. 498 499</ul> 500 501<p> 502<I>This facility was requested by the Display Ghostscript project, but it 503could also be used to improve the output of the PCL XL driver and possibly 504the X and PCL5 drivers.</I> 505 506<hr> 507 508<h2><a name="Other_functionality"></a>Other functionality</h2> 509 510<h3>OpenStep (Display PostScript + NeXT) extensions to Ghostscript.</h3> 511 512<p> 513There is a project to create a GNU implementation of the OPENStep API, which 514involves extending Ghostscript to provide the full functionality of Adobe's 515Display PostScript system with some of the NeXT extensions. For more 516information, please contact Net-Community <<a 517href="mailto:scottc@net-community.com">scottc@net-community.com</a>>. 518 519<h3>Job Server implementation.</h3> 520 521<p> 522For full Adobe PostScript compatibility, Ghostscript needs a real "job 523server" to encapsulate the execution of PostScript files. 524<I>See the section on "Job Execution Environment" in the PostScript 525Language Reference Manual for details.</I> 526 527<h3>SVG (XML Structured Vector Graphics) interpreter.</h3> 528 529<p> 530Ghostscript could be adapted with some work to read SVG. This would be an 531interesting and challenging project because SVG's graphics model would 532require extending the library (see above). <I>If SVG turns out to be an 533important standard, it is important that there be a good free implementation 534of it.</I> 535 536<h3><b><tt>%font%</tt></b> and other IODevices.</h3> 537 538<p> 539Currently, the <b><tt>%font%</tt></b> IODevice is not implemented. We would 540like to see this implemented using a general framework for implementing 541IODevices (%xxxx%) entirely in PostScript, in an "object oriented" manner 542very similiar to the way Resource categories are implemented. An IODevice 543would be implemented as a dictionary with the following keys, whose values 544would be procedures that implemented the corresponding operation: 545 546<blockquote><pre> 547/File 548/DeleteFile 549/RenameFile 550/Status 551/FileNameForAll 552/GetDevParams 553/PutDevParams 554</pre></blockquote> 555 556<p> 557There would only be global IODevices, no local ones; the dictionary keeping 558track of them would be stored in global VM. 559 560<p> 561<I>This is an obscure feature that matters only because some PostScript code 562uses <b><tt>filenameforall</tt></b> with this IODevice, rather than 563<b><tt>filenameforall</tt></b> with the <b><tt>/Font</tt></b> Resource 564category, to enumerate available fonts.</I> 565 566<h3>Repairing damaged or EOL-converted PDF files.</h3> 567 568<p> 569Adobe Acrobat Reader can scan a PDF file that has had its end-of-lines 570converted by careless users transferring the file across operating systems 571as text rather than binary across, and reconstruct the cross-reference table 572which the PDF interpreter requires. This only works if the file has no 573binary data in it, which with PDF 1.3 is rarely the case. However, users 574occasionally receive PDF files that have been damaged in this way, and it 575might be useful to have a program that can repair them. <I>We think this 576should probably be done as a separate program, possibly in PostScript, 577similar to Ghostscript's PDF linearizer.</I> 578 579<h2><a name="Other_implementation"></a>Implementation improvements</h2> 580 581<h3>Fully re-entrant code.</h3> 582 583<p> 584Currently, neither the PostScript interpreter nor the graphics library is 585fully re-entrant (no writable globals). Making them fully re-entrant would 586make Ghostscript usable in multi-threaded environments, and more easily 587usable in embedded environments. Note that this is necessary, but far from 588sufficient, for Ghostscript to allow simultaneous execution of a single 589Ghostscript interpreter instance by multiple threads: that is probably 590permanently out of the question. <I>Almost all drivers, including all of 591the drivers in devs.mak which are maintained as part of the main Ghostscript 592code, are already fully re-entrant; making the remaining ones re-entrant 593should really be up to the driver author.</I> 594 595<h3>Ghostscript has no %ram% device.</h3> 596 597The %ram% device is documented in PS Supplement 3010 and 3011 dated August 30, 1999. 598This is probably not a major impediment to portability, but it would be handy. 599<p><I> 600On Unix, the suggested implementation would be to create a subdirectory 601of the temporary directory (usually /tmp), with the name chosen and the 602directory created in such a way as to avoid /tmp races and similar 603problems. Ghostscript should delete the subdirectory when it exits. 604</I> 605 606<!-- [2.0 end contents] ==================================================== --> 607 608<!-- [3.0 begin visible trailer] =========================================== --> 609<hr> 610 611<p> 612<small>Copyright © 2000 Aladdin Enterprises. All rights 613reserved.</small> 614 615<p> 616<small>This file is part of AFPL Ghostscript. See the 617<a href="Public.htm">Aladdin Free Public License</a> (the "License") for 618full details of the terms of using, copying, modifying, and redistributing 619AFPL Ghostscript.</small> 620 621<p> 622<small>Ghostscript version 7.04, 31 January 2002 623 624<!-- [3.0 end visible trailer] ============================================= --> 625 626</body> 627</html> 628