From 4017ebe5bfa7a261cd1135801756c44e9fe93ca1 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Sun, 27 Apr 2008 00:01:14 -0700 Subject: [PATCH 01/66] XQuartz: Added missing Xquartz.man.pre to EXTRA_DIST (cherry picked from commit 03e707987f7f32e47dd0355c6d16bfb9169a379b) --- hw/xquartz/xpr/Makefile.am | 1 + 1 file changed, 1 insertion(+) diff --git a/hw/xquartz/xpr/Makefile.am b/hw/xquartz/xpr/Makefile.am index 12009fb41..41f2b8655 100644 --- a/hw/xquartz/xpr/Makefile.am +++ b/hw/xquartz/xpr/Makefile.am @@ -47,6 +47,7 @@ include $(top_srcdir)/cpprules.in cp $< $@ EXTRA_DIST = \ + Xquartz.man.pre \ dri.h \ dristruct.h \ appledri.h \ From 4b46fc931e61bec0abd6a86062e46dd7a408e745 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Mon, 28 Apr 2008 10:50:51 -0700 Subject: [PATCH 02/66] XQuartz: Updated Localizable.strings (cherry picked from commit d8d9c866b90fb24c93bd6e25fa90f8f2bf58ad34) --- .../bundle/English.lproj/Localizable.strings | Bin 1094 -> 1078 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/hw/xquartz/bundle/English.lproj/Localizable.strings b/hw/xquartz/bundle/English.lproj/Localizable.strings index c83b085365171a36c82d1c426108afa9ecb7e09a..63a1352555815c3a1f663a11e53181f56d25b72a 100644 GIT binary patch literal 1078 zcmdUuPfNo<5XIlQpJMS?q~f`Vh#q=T5IlITX-ETUHk!oZmsfu?Nl3IF1nEJRc4uea z{CO|C?;kqTTtPR=wN|01j8ns@;gn+UwPi1{p4GbFqNU^JWY2U$b|n7Bf6M*?-f9(i zEPoBU!D<{eR0(?2IqQ=ApbLI~ud`&D*^i8V!{UlLZQ`h^XWUH~U{J9NcqiD#KZ32n z?y-$&;AH$NtXw-*stuN*Q&-}Yh$*pQACwxiP5ByRhp{PI@37XZR|<6AdVa>a)?%XC zf17*ymG0ne++wd;cT+0vP=tAoTBc*rlYbezhZ)`yZwh8XWVnOZu1Cb;ik=J=9E&$Q!%tG06m?S+o&eUFTl4kOD?8bq-3 literal 1094 zcmeH{KTpFj5XIlzPhl}usE8RMgkXRHBsKec5d~OW%}uNjLkA_dG8|a-XSfl3Up%^@aVHF%fx04FOQ7;2ecM3 z#>T5dYqUZtm1vf&!fw^9YMJGnVy#ns{Qi+yLC;LDL3194end}CjCG?=NT~&VbUNq! z_w%p%dB%3m(pKNoamR*)G~eAec5FsqCJnQ-nL9nlY1_uvpdPfsXMtth_NzGC0=&&; hwvQgB@*R~6nB2tLT~__K Date: Mon, 28 Apr 2008 11:47:49 -0700 Subject: [PATCH 03/66] XQuartz: More startup / threading house cleaning. (cherry picked from commit 72653c24c00dfba64ce35a3d400598bcd77defc1) --- hw/xquartz/X11Application.h | 2 +- hw/xquartz/X11Application.m | 7 ++---- hw/xquartz/X11Controller.h | 2 +- hw/xquartz/X11Controller.m | 4 +-- hw/xquartz/quartz.h | 1 + hw/xquartz/quartzStartup.c | 50 ++++++++++++++++--------------------- 6 files changed, 28 insertions(+), 38 deletions(-) diff --git a/hw/xquartz/X11Application.h b/hw/xquartz/X11Application.h index 3869df92f..8e7fed23b 100644 --- a/hw/xquartz/X11Application.h +++ b/hw/xquartz/X11Application.h @@ -71,7 +71,7 @@ void X11ApplicationSetCanQuit (int state); void X11ApplicationServerReady (void); void X11ApplicationShowHideMenubar (int state); -void X11ApplicationMain(int argc, const char **argv); +void X11ApplicationMain(int argc, char **argv, char **envp); extern int X11EnableKeyEquivalents; extern int quartzHasRoot, quartzEnableRootless; diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m index 76804373e..e10e71e10 100644 --- a/hw/xquartz/X11Application.m +++ b/hw/xquartz/X11Application.m @@ -47,9 +47,6 @@ #include #include -#include -extern pthread_cond_t server_can_start_cond; - #define DEFAULTS_FILE "/usr/X11/lib/X11/xserver/Xquartz.plist" int X11EnableKeyEquivalents = TRUE; @@ -776,7 +773,7 @@ environment?", @"Startup xinitrc dialog"); [X11App prefs_synchronize]; } -void X11ApplicationMain (int argc, const char **argv) { +void X11ApplicationMain (int argc, char **argv, char **envp) { NSAutoreleasePool *pool; #ifdef DEBUG @@ -804,7 +801,7 @@ void X11ApplicationMain (int argc, const char **argv) { NSMaxY([[NSScreen mainScreen] visibleFrame]); /* Tell the server thread that it can proceed */ - pthread_cond_broadcast(&server_can_start_cond); + QuartzInitServer(argc, argv, envp); [NSApp run]; /* not reached */ diff --git a/hw/xquartz/X11Controller.h b/hw/xquartz/X11Controller.h index d33752ead..7942bc44b 100644 --- a/hw/xquartz/X11Controller.h +++ b/hw/xquartz/X11Controller.h @@ -100,6 +100,6 @@ #endif /* __OBJC__ */ -void X11ControllerMain(int argc, const char **argv); +void X11ControllerMain(int argc, char **argv, char **envp); #endif /* X11CONTROLLER_H */ diff --git a/hw/xquartz/X11Controller.m b/hw/xquartz/X11Controller.m index 01470e55f..df328f38c 100644 --- a/hw/xquartz/X11Controller.m +++ b/hw/xquartz/X11Controller.m @@ -756,6 +756,6 @@ objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row @end -void X11ControllerMain(int argc, const char **argv) { - X11ApplicationMain (argc, argv); +void X11ControllerMain(int argc, char **argv, char **envp) { + X11ApplicationMain (argc, argv, envp); } diff --git a/hw/xquartz/quartz.h b/hw/xquartz/quartz.h index e11602391..1b6d71f20 100644 --- a/hw/xquartz/quartz.h +++ b/hw/xquartz/quartz.h @@ -128,6 +128,7 @@ Bool QuartzAddScreen(int index, ScreenPtr pScreen); Bool QuartzSetupScreen(int index, ScreenPtr pScreen); void QuartzInitOutput(int argc,char **argv); void QuartzInitInput(int argc, char **argv); +void QuartzInitServer(int argc, char **argv, char **envp); void QuartzGiveUp(void); void QuartzProcessEvent(xEvent *xe); void QuartzDisplayChangedHandler(int screenNum, xEventPtr xe, DeviceIntPtr dev, int nevents); diff --git a/hw/xquartz/quartzStartup.c b/hw/xquartz/quartzStartup.c index 34eaf8a03..7b6a1a6fa 100644 --- a/hw/xquartz/quartzStartup.c +++ b/hw/xquartz/quartzStartup.c @@ -58,19 +58,10 @@ struct arg { char **envp; }; -pthread_cond_t server_can_start_cond = PTHREAD_COND_INITIALIZER; - static void server_thread (void *arg) { - struct arg *args = (struct arg *)arg; - - /* Wait to be told we can continue */ - pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; - pthread_mutex_lock(&mutex); - pthread_cond_wait(&server_can_start_cond, &mutex); - pthread_mutex_unlock(&mutex); - pthread_mutex_destroy(&mutex); - - exit (dix_main(args->argc, args->argv, args->envp)); + struct arg args = *((struct arg *)arg); + free(arg); + exit (dix_main(args.argc, args.argv, args.envp)); } static pthread_t create_thread (void *func, void *arg) { @@ -86,16 +77,27 @@ static pthread_t create_thread (void *func, void *arg) { return tid; } +void QuartzInitServer(int argc, char **argv, char **envp) { + struct arg *args = (struct arg*)malloc(sizeof(struct arg)); + if(!args) + FatalError("Could not allocate memory.\n"); + + args->argc = argc; + args->argv = argv; + args->envp = envp; + + APPKIT_THREAD_ID = pthread_self(); + SERVER_THREAD_ID = create_thread(server_thread, args); + + if (!SERVER_THREAD_ID) { + FatalError("can't create secondary thread\n"); + } +} + int main(int argc, char **argv, char **envp) { int i; int fd[2]; - /* Store the args to pass to dix_main() */ - struct arg args; - args.argc = argc; - args.argv = argv; - args.envp = envp; - // Make a pipe to pass events assert( pipe(fd) == 0 ); darwinEventReadFD = fd[0]; @@ -112,18 +114,8 @@ int main(int argc, char **argv, char **envp) { /* Create the audio mutex */ QuartzAudioInit(); - - pthread_cond_init(&server_can_start_cond, NULL); - - APPKIT_THREAD_ID = pthread_self(); - SERVER_THREAD_ID = create_thread(server_thread, &args); - - if (!SERVER_THREAD_ID) { - ErrorF("can't create secondary thread\n"); - exit (1); - } QuartzMoveToForeground(); - X11ControllerMain(argc, (const char **)argv); + X11ControllerMain(argc, argv, envp); exit(0); } From 54184110f6f3e5d7276d5431e739a4fcf0c3523e Mon Sep 17 00:00:00 2001 From: Owen Taylor Date: Mon, 28 Apr 2008 21:00:54 +0200 Subject: [PATCH 04/66] EXA: Use a single large glyph cache pixmap Add back exaGlyphs(); the new version copies the glyph images onto a single large glyph pixmap and draws from their to the destination surface. This reduces the management of small offscreen areas and will allow us to avoid texture unit setup between each glyph. --- exa/Makefile.am | 1 + exa/exa.c | 9 + exa/exa_glyphs.c | 745 +++++++++++++++++++++++++++++++++++++++++++++++ exa/exa_priv.h | 41 +++ 4 files changed, 796 insertions(+) create mode 100644 exa/exa_glyphs.c diff --git a/exa/Makefile.am b/exa/Makefile.am index e2f7ed302..2b3f1e416 100644 --- a/exa/Makefile.am +++ b/exa/Makefile.am @@ -18,6 +18,7 @@ libexa_la_SOURCES = \ exa.c \ exa.h \ exa_accel.c \ + exa_glyphs.c \ exa_migration.c \ exa_offscreen.c \ exa_render.c \ diff --git a/exa/exa.c b/exa/exa.c index 3a6ad988e..809fb4b00 100644 --- a/exa/exa.c +++ b/exa/exa.c @@ -739,6 +739,8 @@ exaCloseScreen(int i, ScreenPtr pScreen) PictureScreenPtr ps = GetPictureScreenIfSet(pScreen); #endif + exaGlyphsFini(pScreen); + pScreen->CreateGC = pExaScr->SavedCreateGC; pScreen->CloseScreen = pExaScr->SavedCloseScreen; pScreen->GetImage = pExaScr->SavedGetImage; @@ -752,7 +754,9 @@ exaCloseScreen(int i, ScreenPtr pScreen) #ifdef RENDER if (ps) { ps->Composite = pExaScr->SavedComposite; + ps->Glyphs = pExaScr->SavedGlyphs; ps->Trapezoids = pExaScr->SavedTrapezoids; + ps->Triangles = pExaScr->SavedTriangles; } #endif @@ -914,6 +918,9 @@ exaDriverInit (ScreenPtr pScreen, pExaScr->SavedComposite = ps->Composite; ps->Composite = exaComposite; + pExaScr->SavedGlyphs = ps->Glyphs; + ps->Glyphs = exaGlyphs; + pExaScr->SavedTriangles = ps->Triangles; ps->Triangles = exaTriangles; @@ -973,6 +980,8 @@ exaDriverInit (ScreenPtr pScreen, } } + exaGlyphsInit(pScreen); + LogMessage(X_INFO, "EXA(%d): Driver registered support for the following" " operations:\n", pScreen->myNum); assert(pScreenInfo->PrepareSolid != NULL); diff --git a/exa/exa_glyphs.c b/exa/exa_glyphs.c new file mode 100644 index 000000000..3fe433aa7 --- /dev/null +++ b/exa/exa_glyphs.c @@ -0,0 +1,745 @@ +/* + * Copyright © 2008 Red Hat, Inc. + * Partly based on code Copyright © 2000 SuSE, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Red Hat not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. Red Hat makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + * + * Red Hat DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL Red Hat + * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of SuSE not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. SuSE makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + * + * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE + * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Author: Owen Taylor + * Based on code by: Keith Packard + */ + +#ifdef HAVE_DIX_CONFIG_H +#include +#endif + +#include + +#include "exa_priv.h" + +#include "mipict.h" + +#if DEBUG_GLYPH_CACHE +#define DBG_GLYPH_CACHE(a) ErrorF a +#else +#define DBG_GLYPH_CACHE(a) +#endif + +/* Instructions for rendering a single glyph */ +typedef struct { + INT16 xSrc; + INT16 ySrc; + INT16 xDst; + INT16 yDst; + INT16 width; + INT16 height; +} ExaGlyphRenderRec, *ExaGlyphRenderPtr; + +/* Width of the pixmaps we use for the caches; this should be less than + * max texture size of the driver; this may need to actually come from + * the driver. + */ +#define CACHE_PICTURE_WIDTH 1024 + +/* Maximum number of glyphs we buffer on the stack before flushing + * rendering to the mask or destination surface. + */ +#define GLYPH_BUFFER_SIZE 256 + +typedef struct { + PicturePtr source; + ExaGlyphRenderRec glyphs[GLYPH_BUFFER_SIZE]; + int count; +} ExaGlyphBuffer, *ExaGlyphBufferPtr; + +typedef enum { + ExaGlyphSuccess, /* Glyph added to render buffer */ + ExaGlyphFail, /* out of memory, etc */ + ExaGlyphNeedFlush, /* would evict a glyph already in the buffer */ +} ExaGlyphCacheResult; + +void +exaGlyphsInit(ScreenPtr pScreen) +{ + ExaScreenPriv(pScreen); + int i = 0; + + memset(pExaScr->glyphCaches, 0, sizeof(pExaScr->glyphCaches)); + + pExaScr->glyphCaches[i].format = PICT_a8; + pExaScr->glyphCaches[i].glyphWidth = pExaScr->glyphCaches[i].glyphHeight = 16; + i++; + pExaScr->glyphCaches[i].format = PICT_a8; + pExaScr->glyphCaches[i].glyphWidth = pExaScr->glyphCaches[i].glyphHeight = 32; + i++; + pExaScr->glyphCaches[i].format = PICT_a8r8g8b8; + pExaScr->glyphCaches[i].glyphWidth = pExaScr->glyphCaches[i].glyphHeight = 16; + i++; + pExaScr->glyphCaches[i].format = PICT_a8r8g8b8; + pExaScr->glyphCaches[i].glyphWidth = pExaScr->glyphCaches[i].glyphHeight = 32; + i++; + + assert(i == EXA_NUM_GLYPH_CACHES); + + for (i = 0; i < EXA_NUM_GLYPH_CACHES; i++) { + pExaScr->glyphCaches[i].columns = CACHE_PICTURE_WIDTH / pExaScr->glyphCaches[i].glyphWidth; + pExaScr->glyphCaches[i].size = 256; + pExaScr->glyphCaches[i].hashSize = 557; + } +} + +static void +exaUnrealizeGlyphCaches(ScreenPtr pScreen, + unsigned int format) +{ + ExaScreenPriv(pScreen); + int i; + + for (i = 0; i < EXA_NUM_GLYPH_CACHES; i++) { + ExaGlyphCachePtr cache = &pExaScr->glyphCaches[i]; + + if (cache->format != format) + continue; + + if (cache->picture) { + FreePicture ((pointer) cache->picture, (XID) 0); + cache->picture = NULL; + } + + if (cache->hashEntries) { + xfree(cache->hashEntries); + cache->hashEntries = NULL; + } + + if (cache->glyphs) { + xfree(cache->glyphs); + cache->glyphs = NULL; + } + cache->glyphCount = 0; + } +} + +/* All caches for a single format share a single pixmap for glyph storage, + * allowing mixing glyphs of different sizes without paying a penalty + * for switching between source pixmaps. (Note that for a size of font + * right at the border between two sizes, we might be switching for almost + * every glyph.) + * + * This function allocates the storage pixmap, and then fills in the + * rest of the allocated structures for all caches with the given format. + */ +static Bool +exaRealizeGlyphCaches(ScreenPtr pScreen, + unsigned int format) +{ + ExaScreenPriv(pScreen); + + int depth = PIXMAN_FORMAT_DEPTH(format); + PictFormatPtr pPictFormat; + PixmapPtr pPixmap; + PicturePtr pPicture; + int height; + int i; + int error; + + pPictFormat = PictureMatchFormat(pScreen, depth, format); + if (!pPictFormat) + return FALSE; + + /* Compute the total vertical size needed for the format */ + + height = 0; + for (i = 0; i < EXA_NUM_GLYPH_CACHES; i++) { + ExaGlyphCachePtr cache = &pExaScr->glyphCaches[i]; + int rows; + + if (cache->format != format) + continue; + + rows = (cache->size + cache->columns - 1) / cache->columns; + + height += rows * cache->glyphHeight; + } + + /* Now allocate the pixmap and picture */ + + pPixmap = (*pScreen->CreatePixmap) (pScreen, + CACHE_PICTURE_WIDTH, + height, depth, 0); + if (!pPixmap) + return FALSE; + + pPicture = CreatePicture(0, &pPixmap->drawable, pPictFormat, + 0, 0, serverClient, &error); + + (*pScreen->DestroyPixmap) (pPixmap); /* picture holds a refcount */ + + if (!pPicture) + return FALSE; + + /* And store the picture in all the caches for the format */ + + for (i = 0; i < EXA_NUM_GLYPH_CACHES; i++) { + ExaGlyphCachePtr cache = &pExaScr->glyphCaches[i]; + int j; + + if (cache->format != format) + continue; + + cache->picture = pPicture; + cache->picture->refcnt++; + cache->hashEntries = xalloc(sizeof(int) * cache->hashSize); + cache->glyphs = xalloc(sizeof(ExaCachedGlyphRec) * cache->size); + cache->glyphCount = 0; + + if (!cache->hashEntries || !cache->glyphs) + goto bail; + + for (j = 0; j < cache->hashSize; j++) + cache->hashEntries[j] = -1; + + cache->evictionPosition = rand() % cache->size; + } + + /* Each cache references the picture individually */ + FreePicture ((pointer) pPicture, (XID) 0); + return TRUE; + +bail: + exaUnrealizeGlyphCaches(pScreen, format); + return FALSE; +} + +void +exaGlyphsFini (ScreenPtr pScreen) +{ + ExaScreenPriv(pScreen); + int i; + + for (i = 0; i < EXA_NUM_GLYPH_CACHES; i++) { + ExaGlyphCachePtr cache = &pExaScr->glyphCaches[i]; + + if (cache->picture) + exaUnrealizeGlyphCaches(pScreen, cache->format); + } +} + +static int +exaGlyphCacheHashLookup(ExaGlyphCachePtr cache, + GlyphPtr pGlyph) +{ + int slot; + + slot = (*(CARD32 *) pGlyph->sha1) % cache->hashSize; + + while (TRUE) { /* hash table can never be full */ + int entryPos = cache->hashEntries[slot]; + if (entryPos == -1) + return -1; + + if (memcmp(pGlyph->sha1, cache->glyphs[entryPos].sha1, sizeof(pGlyph->sha1)) == 0){ + DBG_GLYPH_CACHE((" found entry at %d\n", slot)); + return entryPos; + } + + DBG_GLYPH_CACHE((" lookup linear probe bumpalong\n")); + slot--; + if (slot < 0) + slot = cache->hashSize - 1; + } +} + +static void +exaGlyphCacheHashInsert(ExaGlyphCachePtr cache, + GlyphPtr pGlyph, + int pos) +{ + int slot; + + memcpy(cache->glyphs[pos].sha1, pGlyph->sha1, sizeof(pGlyph->sha1)); + + slot = (*(CARD32 *) pGlyph->sha1) % cache->hashSize; + + while (TRUE) { /* hash table can never be full */ + if (cache->hashEntries[slot] == -1) { + DBG_GLYPH_CACHE((" inserting entry at %d\n", slot)); + cache->hashEntries[slot] = pos; + return; + } + + slot--; + if (slot < 0) + slot = cache->hashSize - 1; + } +} + +static void +exaGlyphCacheHashRemove(ExaGlyphCachePtr cache, + int pos) +{ + int slot; + int emptiedSlot = -1; + + slot = (*(CARD32 *) cache->glyphs[pos].sha1) % cache->hashSize; + + while (TRUE) { /* hash table can never be full */ + int entryPos = cache->hashEntries[slot]; + + if (entryPos == -1) + return; + + if (entryPos == pos) { + cache->hashEntries[slot] = -1; + emptiedSlot = slot; + } else if (emptiedSlot != -1) { + /* See if we can move this entry into the emptied slot, we can't + * do that if if entry would have hashed between the current position + * and the emptied slot. (taking wrapping into account). Bad positions + * are: + * + * | XXXXXXXXXX | + * i j + * + * |XXX XXXX| + * j i + * + * i - slot, j - emptiedSlot + * + * (Knuth 6.4R) + */ + + int entrySlot = (*(CARD32 *) cache->glyphs[entryPos].sha1) % cache->hashSize; + + if (!((entrySlot >= slot && entrySlot < emptiedSlot) || + (emptiedSlot < slot && (entrySlot < emptiedSlot || entrySlot >= slot)))) + { + cache->hashEntries[emptiedSlot] = entryPos; + cache->hashEntries[slot] = -1; + emptiedSlot = slot; + } + } + + slot--; + if (slot < 0) + slot = cache->hashSize - 1; + } +} + +static ExaGlyphCacheResult +exaGlyphCacheBufferGlyph(ScreenPtr pScreen, + ExaGlyphCachePtr cache, + ExaGlyphBufferPtr buffer, + GlyphPtr pGlyph, + int xGlyph, + int yGlyph) +{ + ExaGlyphRenderPtr glyphRec; + int pos; + + if (buffer->source && buffer->source != cache->picture) + return ExaGlyphNeedFlush; + + if (!cache->picture) { + if (!exaRealizeGlyphCaches(pScreen, cache->format)) + return ExaGlyphFail; + } + + DBG_GLYPH_CACHE(("(%d,%d,%s): buffering glyph %lx\n", + cache->glyphWidth, cache->glyphHeight, cache->format == PICT_a8 ? "A" : "ARGB", + (long)*(CARD32 *) pGlyph->sha1)); + + pos = exaGlyphCacheHashLookup(cache, pGlyph); + if (pos != -1) { + DBG_GLYPH_CACHE((" found existing glyph at %d\n", pos)); + } else { + if (cache->glyphCount < cache->size) { + /* Space remaining; we fill from the start */ + pos = cache->glyphCount; + cache->glyphCount++; + DBG_GLYPH_CACHE((" storing glyph in free space at %d\n", pos)); + + exaGlyphCacheHashInsert(cache, pGlyph, pos); + + } else { + /* Need to evict an entry. We have to see if any glyphs + * already in the output buffer were at this position in + * the cache + */ + + pos = cache->evictionPosition; + DBG_GLYPH_CACHE((" evicting glyph at %d\n", pos)); + if (buffer->count) { + int x, y; + int i; + + x = (pos % cache->columns) * cache->glyphWidth; + y = (pos / cache->columns) * cache->glyphHeight; + + for (i = 0; i < buffer->count; i++) { + if (buffer->glyphs[i].xSrc == x && buffer->glyphs[i].ySrc == y) { + DBG_GLYPH_CACHE((" must flush buffer\n")); + return ExaGlyphNeedFlush; + } + } + } + + /* OK, we're all set, swap in the new glyph */ + exaGlyphCacheHashRemove(cache, pos); + exaGlyphCacheHashInsert(cache, pGlyph, pos); + + /* And pick a new eviction position */ + cache->evictionPosition = rand() % cache->size; + } + + /* Now actually upload the glyph into the cache picture */ + + CompositePicture (PictOpSrc, + GlyphPicture(pGlyph)[pScreen->myNum], + None, + cache->picture, + 0, 0, + 0, 0, + (pos % cache->columns) * cache->glyphWidth, + (pos / cache->columns) * cache->glyphHeight, + pGlyph->info.width, + pGlyph->info.height); + } + + + buffer->source = cache->picture; + + glyphRec = &buffer->glyphs[buffer->count]; + glyphRec->xSrc = (pos % cache->columns) * cache->glyphWidth; + glyphRec->ySrc = (pos / cache->columns) * cache->glyphHeight; + glyphRec->xDst = xGlyph - pGlyph->info.x; + glyphRec->yDst = yGlyph - pGlyph->info.y; + glyphRec->width = pGlyph->info.width; + glyphRec->height = pGlyph->info.height; + + buffer->count++; + + return ExaGlyphSuccess; +} + +static ExaGlyphCacheResult +exaBufferGlyph(ScreenPtr pScreen, + ExaGlyphBufferPtr buffer, + GlyphPtr pGlyph, + int xGlyph, + int yGlyph) +{ + ExaScreenPriv(pScreen); + unsigned int format = (GlyphPicture(pGlyph)[pScreen->myNum])->format; + int width = pGlyph->info.width; + int height = pGlyph->info.width; + ExaGlyphRenderPtr glyphRec; + PicturePtr source; + int i; + + if (buffer->count == GLYPH_BUFFER_SIZE) + return ExaGlyphNeedFlush; + + for (i = 0; i < EXA_NUM_GLYPH_CACHES; i++) { + ExaGlyphCachePtr cache = &pExaScr->glyphCaches[i]; + + if (format == cache->format && + width <= cache->glyphWidth && + height <= cache->glyphHeight) { + ExaGlyphCacheResult result = exaGlyphCacheBufferGlyph(pScreen, &pExaScr->glyphCaches[i], + buffer, + pGlyph, xGlyph, yGlyph); + switch (result) { + case ExaGlyphFail: + break; + case ExaGlyphSuccess: + case ExaGlyphNeedFlush: + return result; + } + } + } + + /* Couldn't find the glyph in the cache, use the glyph picture directly */ + + source = GlyphPicture(pGlyph)[pScreen->myNum]; + if (buffer->source && buffer->source != source) + return ExaGlyphNeedFlush; + + buffer->source = source; + + glyphRec = &buffer->glyphs[buffer->count]; + glyphRec->xSrc = 0; + glyphRec->ySrc = 0; + glyphRec->xDst = xGlyph - pGlyph->info.x; + glyphRec->yDst = yGlyph - pGlyph->info.y; + glyphRec->width = pGlyph->info.width; + glyphRec->height = pGlyph->info.height; + + buffer->count++; + + return ExaGlyphSuccess; +} + +static void +exaGlyphsToMask(PicturePtr pMask, + ExaGlyphBufferPtr buffer) +{ + int i; + + for (i = 0; i < buffer->count; i++) { + ExaGlyphRenderPtr glyphRec = &buffer->glyphs[i]; + + CompositePicture (PictOpAdd, + buffer->source, + None, + pMask, + glyphRec->xSrc, + glyphRec->ySrc, + 0, 0, + glyphRec->xDst, + glyphRec->yDst, + glyphRec->width, + glyphRec->height); + } + + buffer->count = 0; + buffer->source = NULL; +} + +static void +exaGlyphsToDst(CARD8 op, + PicturePtr pSrc, + PicturePtr pDst, + ExaGlyphBufferPtr buffer, + INT16 xSrc, + INT16 ySrc, + INT16 xDst, + INT16 yDst) +{ + int i; + + for (i = 0; i < buffer->count; i++) { + ExaGlyphRenderPtr glyphRec = &buffer->glyphs[i]; + + CompositePicture (op, + pSrc, + buffer->source, + pDst, + xSrc + glyphRec->xDst - xDst, + ySrc + glyphRec->yDst - yDst, + glyphRec->xSrc, + glyphRec->ySrc, + glyphRec->xDst, + glyphRec->yDst, + glyphRec->width, + glyphRec->height); + } + + buffer->count = 0; + buffer->source = NULL; +} + +/* Cut and paste from render/glyph.c - probably should export it instead */ +static void +GlyphExtents (int nlist, + GlyphListPtr list, + GlyphPtr *glyphs, + BoxPtr extents) +{ + int x1, x2, y1, y2; + int n; + GlyphPtr glyph; + int x, y; + + x = 0; + y = 0; + extents->x1 = MAXSHORT; + extents->x2 = MINSHORT; + extents->y1 = MAXSHORT; + extents->y2 = MINSHORT; + while (nlist--) + { + x += list->xOff; + y += list->yOff; + n = list->len; + list++; + while (n--) + { + glyph = *glyphs++; + x1 = x - glyph->info.x; + if (x1 < MINSHORT) + x1 = MINSHORT; + y1 = y - glyph->info.y; + if (y1 < MINSHORT) + y1 = MINSHORT; + x2 = x1 + glyph->info.width; + if (x2 > MAXSHORT) + x2 = MAXSHORT; + y2 = y1 + glyph->info.height; + if (y2 > MAXSHORT) + y2 = MAXSHORT; + if (x1 < extents->x1) + extents->x1 = x1; + if (x2 > extents->x2) + extents->x2 = x2; + if (y1 < extents->y1) + extents->y1 = y1; + if (y2 > extents->y2) + extents->y2 = y2; + x += glyph->info.xOff; + y += glyph->info.yOff; + } + } +} + +#define NeedsComponent(f) (PICT_FORMAT_A(f) != 0 && PICT_FORMAT_RGB(f) != 0) + +void +exaGlyphs (CARD8 op, + PicturePtr pSrc, + PicturePtr pDst, + PictFormatPtr maskFormat, + INT16 xSrc, + INT16 ySrc, + int nlist, + GlyphListPtr list, + GlyphPtr *glyphs) +{ + PicturePtr pPicture; + PixmapPtr pMaskPixmap = 0; + PicturePtr pMask; + ScreenPtr pScreen = pDst->pDrawable->pScreen; + int width = 0, height = 0; + int x, y; + int xDst = list->xOff, yDst = list->yOff; + int n; + GlyphPtr glyph; + int error; + BoxRec extents = {0, 0, 0, 0}; + CARD32 component_alpha; + ExaGlyphBuffer buffer; + + if (maskFormat) + { + GCPtr pGC; + xRectangle rect; + + GlyphExtents (nlist, list, glyphs, &extents); + + if (extents.x2 <= extents.x1 || extents.y2 <= extents.y1) + return; + width = extents.x2 - extents.x1; + height = extents.y2 - extents.y1; + pMaskPixmap = (*pScreen->CreatePixmap) (pScreen, width, height, + maskFormat->depth, + CREATE_PIXMAP_USAGE_SCRATCH); + if (!pMaskPixmap) + return; + component_alpha = NeedsComponent(maskFormat->format); + pMask = CreatePicture (0, &pMaskPixmap->drawable, + maskFormat, CPComponentAlpha, &component_alpha, + serverClient, &error); + if (!pMask) + { + (*pScreen->DestroyPixmap) (pMaskPixmap); + return; + } + pGC = GetScratchGC (pMaskPixmap->drawable.depth, pScreen); + ValidateGC (&pMaskPixmap->drawable, pGC); + rect.x = 0; + rect.y = 0; + rect.width = width; + rect.height = height; + (*pGC->ops->PolyFillRect) (&pMaskPixmap->drawable, pGC, 1, &rect); + FreeScratchGC (pGC); + x = -extents.x1; + y = -extents.y1; + } + else + { + pMask = pDst; + x = 0; + y = 0; + } + buffer.count = 0; + buffer.source = NULL; + while (nlist--) + { + x += list->xOff; + y += list->yOff; + n = list->len; + while (n--) + { + glyph = *glyphs++; + pPicture = GlyphPicture (glyph)[pScreen->myNum]; + + if (exaBufferGlyph(pScreen, &buffer, glyph, x, y) == ExaGlyphNeedFlush) + { + if (maskFormat) + exaGlyphsToMask(pMask, &buffer); + else + exaGlyphsToDst(op, pSrc, pDst, &buffer, + xSrc, ySrc, xDst, yDst); + + exaBufferGlyph(pScreen, &buffer, glyph, x, y); + } + + x += glyph->info.xOff; + y += glyph->info.yOff; + } + list++; + } + + if (maskFormat) + exaGlyphsToMask(pMask, &buffer); + else + exaGlyphsToDst(op, pSrc, pDst, &buffer, + xSrc, ySrc, xDst, yDst); + + if (maskFormat) + { + x = extents.x1; + y = extents.y1; + CompositePicture (op, + pSrc, + pMask, + pDst, + xSrc + x - xDst, + ySrc + y - yDst, + 0, 0, + x, y, + width, height); + FreePicture ((pointer) pMask, (XID) 0); + (*pScreen->DestroyPixmap) (pMaskPixmap); + } +} diff --git a/exa/exa_priv.h b/exa/exa_priv.h index 0138e4a7d..aaceeb81d 100644 --- a/exa/exa_priv.h +++ b/exa/exa_priv.h @@ -61,6 +61,7 @@ #define DEBUG_MIGRATE 0 #define DEBUG_PIXMAP 0 #define DEBUG_OFFSCREEN 0 +#define DEBUG_GLYPH_CACHE 0 #if DEBUG_TRACE_FALL #define EXA_FALLBACK(x) \ @@ -95,6 +96,37 @@ enum ExaMigrationHeuristic { ExaMigrationSmart }; +typedef struct { + unsigned char sha1[20]; +} ExaCachedGlyphRec, *ExaCachedGlyphPtr; + +typedef struct { + /* The identity of the cache, statically configured at initialization */ + unsigned int format; + int glyphWidth; + int glyphHeight; + + int size; /* Size of cache; eventually this should be dynamically determined */ + + /* Hash table mapping from glyph sha1 to position in the glyph; we use + * open addressing with a hash table size determined based on size and large + * enough so that we always have a good amount of free space, so we can + * use linear probing. (Linear probing is preferrable to double hashing + * here because it allows us to easily remove entries.) + */ + int *hashEntries; + int hashSize; + + ExaCachedGlyphPtr glyphs; + int glyphCount; /* Current number of glyphs */ + + PicturePtr picture; /* Where the glyphs of the cache are stored */ + int columns; /* Number of columns the glyphs are layed out in */ + int evictionPosition; /* Next random position to evict a glyph */ +} ExaGlyphCacheRec, *ExaGlyphCachePtr; + +#define EXA_NUM_GLYPH_CACHES 4 + typedef void (*EnableDisableFBAccessProcPtr)(int, Bool); typedef struct { ExaDriverPtr info; @@ -122,6 +154,8 @@ typedef struct { unsigned disableFbCount; Bool optimize_migration; unsigned offScreenCounter; + + ExaGlyphCacheRec glyphCaches[EXA_NUM_GLYPH_CACHES]; } ExaScreenPrivRec, *ExaScreenPrivPtr; /* @@ -432,6 +466,13 @@ exaTriangles (CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int ntri, xTriangle *tris); +/* exa_glyph.c */ +void +exaGlyphsInit(ScreenPtr pScreen); + +void +exaGlyphsFini (ScreenPtr pScreen); + void exaGlyphs (CARD8 op, PicturePtr pSrc, From 40eb14c9482457969e0bde97c49edad536285e02 Mon Sep 17 00:00:00 2001 From: Owen Taylor Date: Mon, 28 Apr 2008 21:00:54 +0200 Subject: [PATCH 05/66] EXA: Add exaCompositeRects() Add a function to composite multiple independent rectangles from the same source to the same destination in a single operation: this is useful for building a glyph mask. --- exa/exa_glyphs.c | 83 +++++++----------- exa/exa_priv.h | 16 ++++ exa/exa_render.c | 222 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 267 insertions(+), 54 deletions(-) diff --git a/exa/exa_glyphs.c b/exa/exa_glyphs.c index 3fe433aa7..55fdb0197 100644 --- a/exa/exa_glyphs.c +++ b/exa/exa_glyphs.c @@ -56,16 +56,6 @@ #define DBG_GLYPH_CACHE(a) #endif -/* Instructions for rendering a single glyph */ -typedef struct { - INT16 xSrc; - INT16 ySrc; - INT16 xDst; - INT16 yDst; - INT16 width; - INT16 height; -} ExaGlyphRenderRec, *ExaGlyphRenderPtr; - /* Width of the pixmaps we use for the caches; this should be less than * max texture size of the driver; this may need to actually come from * the driver. @@ -79,7 +69,7 @@ typedef struct { typedef struct { PicturePtr source; - ExaGlyphRenderRec glyphs[GLYPH_BUFFER_SIZE]; + ExaCompositeRectRec rects[GLYPH_BUFFER_SIZE]; int count; } ExaGlyphBuffer, *ExaGlyphBufferPtr; @@ -364,7 +354,7 @@ exaGlyphCacheBufferGlyph(ScreenPtr pScreen, int xGlyph, int yGlyph) { - ExaGlyphRenderPtr glyphRec; + ExaCompositeRectPtr rect; int pos; if (buffer->source && buffer->source != cache->picture) @@ -407,7 +397,7 @@ exaGlyphCacheBufferGlyph(ScreenPtr pScreen, y = (pos / cache->columns) * cache->glyphHeight; for (i = 0; i < buffer->count; i++) { - if (buffer->glyphs[i].xSrc == x && buffer->glyphs[i].ySrc == y) { + if (buffer->rects[i].xSrc == x && buffer->rects[i].ySrc == y) { DBG_GLYPH_CACHE((" must flush buffer\n")); return ExaGlyphNeedFlush; } @@ -439,13 +429,13 @@ exaGlyphCacheBufferGlyph(ScreenPtr pScreen, buffer->source = cache->picture; - glyphRec = &buffer->glyphs[buffer->count]; - glyphRec->xSrc = (pos % cache->columns) * cache->glyphWidth; - glyphRec->ySrc = (pos / cache->columns) * cache->glyphHeight; - glyphRec->xDst = xGlyph - pGlyph->info.x; - glyphRec->yDst = yGlyph - pGlyph->info.y; - glyphRec->width = pGlyph->info.width; - glyphRec->height = pGlyph->info.height; + rect = &buffer->rects[buffer->count]; + rect->xSrc = (pos % cache->columns) * cache->glyphWidth; + rect->ySrc = (pos / cache->columns) * cache->glyphHeight; + rect->xDst = xGlyph - pGlyph->info.x; + rect->yDst = yGlyph - pGlyph->info.y; + rect->width = pGlyph->info.width; + rect->height = pGlyph->info.height; buffer->count++; @@ -463,7 +453,7 @@ exaBufferGlyph(ScreenPtr pScreen, unsigned int format = (GlyphPicture(pGlyph)[pScreen->myNum])->format; int width = pGlyph->info.width; int height = pGlyph->info.width; - ExaGlyphRenderPtr glyphRec; + ExaCompositeRectPtr rect; PicturePtr source; int i; @@ -497,13 +487,13 @@ exaBufferGlyph(ScreenPtr pScreen, buffer->source = source; - glyphRec = &buffer->glyphs[buffer->count]; - glyphRec->xSrc = 0; - glyphRec->ySrc = 0; - glyphRec->xDst = xGlyph - pGlyph->info.x; - glyphRec->yDst = yGlyph - pGlyph->info.y; - glyphRec->width = pGlyph->info.width; - glyphRec->height = pGlyph->info.height; + rect = &buffer->rects[buffer->count]; + rect->xSrc = 0; + rect->ySrc = 0; + rect->xDst = xGlyph - pGlyph->info.x; + rect->yDst = yGlyph - pGlyph->info.y; + rect->width = pGlyph->info.width; + rect->height = pGlyph->info.height; buffer->count++; @@ -514,23 +504,8 @@ static void exaGlyphsToMask(PicturePtr pMask, ExaGlyphBufferPtr buffer) { - int i; - - for (i = 0; i < buffer->count; i++) { - ExaGlyphRenderPtr glyphRec = &buffer->glyphs[i]; - - CompositePicture (PictOpAdd, - buffer->source, - None, - pMask, - glyphRec->xSrc, - glyphRec->ySrc, - 0, 0, - glyphRec->xDst, - glyphRec->yDst, - glyphRec->width, - glyphRec->height); - } + exaCompositeRects(PictOpAdd, buffer->source, pMask, + buffer->count, buffer->rects); buffer->count = 0; buffer->source = NULL; @@ -549,20 +524,20 @@ exaGlyphsToDst(CARD8 op, int i; for (i = 0; i < buffer->count; i++) { - ExaGlyphRenderPtr glyphRec = &buffer->glyphs[i]; + ExaCompositeRectPtr rect = &buffer->rects[i]; CompositePicture (op, pSrc, buffer->source, pDst, - xSrc + glyphRec->xDst - xDst, - ySrc + glyphRec->yDst - yDst, - glyphRec->xSrc, - glyphRec->ySrc, - glyphRec->xDst, - glyphRec->yDst, - glyphRec->width, - glyphRec->height); + xSrc + rect->xDst - xDst, + ySrc + rect->yDst - yDst, + rect->xSrc, + rect->ySrc, + rect->xDst, + rect->yDst, + rect->width, + rect->height); } buffer->count = 0; diff --git a/exa/exa_priv.h b/exa/exa_priv.h index aaceeb81d..0d5d0f5d2 100644 --- a/exa/exa_priv.h +++ b/exa/exa_priv.h @@ -243,6 +243,15 @@ typedef struct _ExaMigrationRec { RegionPtr pReg; } ExaMigrationRec, *ExaMigrationPtr; +typedef struct { + INT16 xSrc; + INT16 ySrc; + INT16 xDst; + INT16 yDst; + INT16 width; + INT16 height; +} ExaCompositeRectRec, *ExaCompositeRectPtr; + /** * exaDDXDriverInit must be implemented by the DDX using EXA, and is the place * to set EXA options or hook in screen functions to handle using EXA as the AA. @@ -456,6 +465,13 @@ exaComposite(CARD8 op, CARD16 width, CARD16 height); +void +exaCompositeRects(CARD8 op, + PicturePtr Src, + PicturePtr pDst, + int nrect, + ExaCompositeRectPtr rects); + void exaTrapezoids (CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, diff --git a/exa/exa_render.c b/exa/exa_render.c index 1d7b8974c..43b0029e5 100644 --- a/exa/exa_render.c +++ b/exa/exa_render.c @@ -331,6 +331,228 @@ exaTryDriverSolidFill(PicturePtr pSrc, return 1; } +static int +exaTryDriverCompositeRects(CARD8 op, + PicturePtr pSrc, + PicturePtr pDst, + int nrect, + ExaCompositeRectPtr rects) +{ + ExaScreenPriv (pDst->pDrawable->pScreen); + int src_off_x, src_off_y, dst_off_x, dst_off_y; + PixmapPtr pSrcPix, pDstPix; + ExaPixmapPrivPtr pSrcExaPix, pDstExaPix; + struct _Pixmap scratch; + ExaMigrationRec pixmaps[2]; + + pSrcPix = exaGetDrawablePixmap(pSrc->pDrawable); + pSrcExaPix = ExaGetPixmapPriv(pSrcPix); + + pDstPix = exaGetDrawablePixmap(pDst->pDrawable); + pDstExaPix = ExaGetPixmapPriv(pDstPix); + + /* Check whether the accelerator can use these pixmaps. + * FIXME: If it cannot, use temporary pixmaps so that the drawing + * happens within limits. + */ + if (pSrcExaPix->accel_blocked || + pDstExaPix->accel_blocked) + { + return -1; + } + + if (pExaScr->info->CheckComposite && + !(*pExaScr->info->CheckComposite) (op, pSrc, NULL, pDst)) + { + return -1; + } + + exaGetDrawableDeltas (pDst->pDrawable, pDstPix, &dst_off_x, &dst_off_y); + + pixmaps[0].as_dst = TRUE; + pixmaps[0].as_src = exaOpReadsDestination(op); + pixmaps[0].pPix = pDstPix; + pixmaps[0].pReg = NULL; + pixmaps[1].as_dst = FALSE; + pixmaps[1].as_src = TRUE; + pixmaps[1].pPix = pSrcPix; + pixmaps[1].pReg = NULL; + exaDoMigration(pixmaps, 2, TRUE); + + pSrcPix = exaGetOffscreenPixmap (pSrc->pDrawable, &src_off_x, &src_off_y); + if (!exaPixmapIsOffscreen(pDstPix)) + return 0; + + if (!pSrcPix && pExaScr->info->UploadToScratch) + { + pSrcPix = exaGetDrawablePixmap (pSrc->pDrawable); + if ((*pExaScr->info->UploadToScratch) (pSrcPix, &scratch)) + pSrcPix = &scratch; + } + + if (!pSrcPix) + return 0; + + if (!(*pExaScr->info->PrepareComposite) (op, pSrc, NULL, pDst, pSrcPix, + NULL, pDstPix)) + return -1; + + while (nrect--) + { + INT16 xDst = rects->xDst + pDst->pDrawable->x; + INT16 yDst = rects->yDst + pDst->pDrawable->y; + INT16 xSrc = rects->xSrc + pSrc->pDrawable->x; + INT16 ySrc = rects->ySrc + pSrc->pDrawable->y; + + RegionRec region; + BoxPtr pbox; + int nbox; + + if (!miComputeCompositeRegion (®ion, pSrc, NULL, pDst, + xSrc, ySrc, 0, 0, xDst, yDst, + rects->width, rects->height)) + goto next_rect; + + REGION_TRANSLATE(pScreen, ®ion, dst_off_x, dst_off_y); + + nbox = REGION_NUM_RECTS(®ion); + pbox = REGION_RECTS(®ion); + + xSrc = xSrc + src_off_x - xDst - dst_off_x; + ySrc = ySrc + src_off_y - yDst - dst_off_y; + + while (nbox--) + { + (*pExaScr->info->Composite) (pDstPix, + pbox->x1 + xSrc, + pbox->y1 + ySrc, + 0, 0, + pbox->x1, + pbox->y1, + pbox->x2 - pbox->x1, + pbox->y2 - pbox->y1); + pbox++; + } + + next_rect: + REGION_UNINIT(pDst->pDrawable->pScreen, ®ion); + + rects++; + } + + (*pExaScr->info->DoneComposite) (pDstPix); + exaMarkSync(pDst->pDrawable->pScreen); + + return 1; +} + +/** + * Copy a number of rectangles from source to destination in a single + * operation. This is specialized for building a glyph mask: we don'y + * have a mask argument because we don't need it for that, and we + * don't have he special-case fallbacks found in exaComposite() - if the + * driver can support it, we use the driver functionality, otherwise we + * fallback straight to software. + */ +void +exaCompositeRects(CARD8 op, + PicturePtr pSrc, + PicturePtr pDst, + int nrect, + ExaCompositeRectPtr rects) +{ + PixmapPtr pPixmap = exaGetDrawablePixmap(pDst->pDrawable); + ExaPixmapPriv(pPixmap); + + int xoff, yoff; + int x1 = MAXSHORT; + int y1 = MAXSHORT; + int x2 = MINSHORT; + int y2 = MINSHORT; + RegionRec region; + RegionPtr pending_damage; + BoxRec box; + int n; + ExaCompositeRectPtr r; + + /* We have to manage the damage ourselves, since CompositeRects isn't + * something in the screen that can be managed by the damage extension, + * and EXA depends on damage to track what needs to be migrated between + * offscreen and onscreen. + */ + + /* Compute the overall extents of the composited region - we're making + * the assumption here that we are compositing a bunch of glyphs that + * cluster closely together and damaging each glyph individually would + * be a loss compared to damaging the bounding box. + */ + n = nrect; + r = rects; + while (n--) { + int rect_x2 = r->xDst + r->width; + int rect_y2 = r->yDst + r->width; + + if (r->xDst < x1) x1 = r->xDst; + if (r->xDst < y1) y1 = r->xDst; + if (rect_x2 > x2) x2 = rect_x2; + if (rect_y2 > y2) y2 = rect_y2; + + r++; + } + + if (x2 <= x1 && y2 <= y1) + return; + + box.x1 = x1; + box.x2 = x2 < MAXSHORT ? x2 : MAXSHORT; + box.y1 = y1; + box.y2 = y2 < MAXSHORT ? y2 : MAXSHORT; + + /* The pixmap migration code relies on pendingDamage indicating + * the bounds of the current rendering, so we need to force + * the actual damage into that region before we do anything, and + * (see use of DamagePendingRegion in exaCopyDirty) + */ + + REGION_INIT(pScreen, ®ion, &box, 1); + + exaGetDrawableDeltas(pDst->pDrawable, pPixmap, &xoff, &yoff); + + REGION_TRANSLATE(pScreen, ®ion, xoff, yoff); + pending_damage = DamagePendingRegion(pExaPixmap->pDamage); + REGION_UNION(pScreen, pending_damage, pending_damage, ®ion); + REGION_TRANSLATE(pScreen, ®ion, -xoff, -yoff); + + /************************************************************/ + + ValidatePicture (pSrc); + ValidatePicture (pDst); + + if (exaTryDriverCompositeRects(op, pSrc, pDst, nrect, rects) != 1) { + n = nrect; + r = rects; + while (n--) { + ExaCheckComposite (op, pSrc, NULL, pDst, + r->xSrc, r->ySrc, + 0, 0, + r->xDst, r->yDst, + r->width, r->height); + r++; + } + } + + /************************************************************/ + + /* Now we have to flush the damage out from pendingDamage => damage + * Calling DamageDamageRegion has that effect. (We could pass + * in an empty region here, but we pass in the same region we + * use above; the effect is the same.) + */ + + DamageDamageRegion(pDst->pDrawable, ®ion); + REGION_UNINIT(pScreen, ®ion); +} + static int exaTryDriverComposite(CARD8 op, PicturePtr pSrc, From fcb5949928f1c27f67f40c094c3c673786574422 Mon Sep 17 00:00:00 2001 From: Owen Taylor Date: Mon, 28 Apr 2008 21:00:54 +0200 Subject: [PATCH 06/66] EXA: Fix overlapping glyphs in glyph cache Allocate each cache at a different vertical position in the per-format pixmap. Fix width/height confusion when choosing the cache for a glyph. --- exa/exa_glyphs.c | 25 ++++++++++++++++--------- exa/exa_priv.h | 3 ++- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/exa/exa_glyphs.c b/exa/exa_glyphs.c index 55fdb0197..851e43917 100644 --- a/exa/exa_glyphs.c +++ b/exa/exa_glyphs.c @@ -173,12 +173,13 @@ exaRealizeGlyphCaches(ScreenPtr pScreen, for (i = 0; i < EXA_NUM_GLYPH_CACHES; i++) { ExaGlyphCachePtr cache = &pExaScr->glyphCaches[i]; int rows; - + if (cache->format != format) continue; - rows = (cache->size + cache->columns - 1) / cache->columns; + cache->yOffset = height; + rows = (cache->size + cache->columns - 1) / cache->columns; height += rows * cache->glyphHeight; } @@ -346,6 +347,9 @@ exaGlyphCacheHashRemove(ExaGlyphCachePtr cache, } } +#define CACHE_X(pos) (((pos) % cache->columns) * cache->glyphWidth) +#define CACHE_Y(pos) (cache->yOffset + ((pos) / cache->columns) * cache->glyphHeight) + static ExaGlyphCacheResult exaGlyphCacheBufferGlyph(ScreenPtr pScreen, ExaGlyphCachePtr cache, @@ -393,8 +397,8 @@ exaGlyphCacheBufferGlyph(ScreenPtr pScreen, int x, y; int i; - x = (pos % cache->columns) * cache->glyphWidth; - y = (pos / cache->columns) * cache->glyphHeight; + x = CACHE_X(pos); + y = CACHE_Y(pos); for (i = 0; i < buffer->count; i++) { if (buffer->rects[i].xSrc == x && buffer->rects[i].ySrc == y) { @@ -420,8 +424,8 @@ exaGlyphCacheBufferGlyph(ScreenPtr pScreen, cache->picture, 0, 0, 0, 0, - (pos % cache->columns) * cache->glyphWidth, - (pos / cache->columns) * cache->glyphHeight, + CACHE_X(pos), + CACHE_Y(pos), pGlyph->info.width, pGlyph->info.height); } @@ -430,8 +434,8 @@ exaGlyphCacheBufferGlyph(ScreenPtr pScreen, buffer->source = cache->picture; rect = &buffer->rects[buffer->count]; - rect->xSrc = (pos % cache->columns) * cache->glyphWidth; - rect->ySrc = (pos / cache->columns) * cache->glyphHeight; + rect->xSrc = CACHE_X(pos); + rect->ySrc = CACHE_Y(pos); rect->xDst = xGlyph - pGlyph->info.x; rect->yDst = yGlyph - pGlyph->info.y; rect->width = pGlyph->info.width; @@ -442,6 +446,9 @@ exaGlyphCacheBufferGlyph(ScreenPtr pScreen, return ExaGlyphSuccess; } +#undef CACHE_X +#undef CACHE_Y + static ExaGlyphCacheResult exaBufferGlyph(ScreenPtr pScreen, ExaGlyphBufferPtr buffer, @@ -452,7 +459,7 @@ exaBufferGlyph(ScreenPtr pScreen, ExaScreenPriv(pScreen); unsigned int format = (GlyphPicture(pGlyph)[pScreen->myNum])->format; int width = pGlyph->info.width; - int height = pGlyph->info.width; + int height = pGlyph->info.height; ExaCompositeRectPtr rect; PicturePtr source; int i; diff --git a/exa/exa_priv.h b/exa/exa_priv.h index 0d5d0f5d2..8a17f6590 100644 --- a/exa/exa_priv.h +++ b/exa/exa_priv.h @@ -61,7 +61,7 @@ #define DEBUG_MIGRATE 0 #define DEBUG_PIXMAP 0 #define DEBUG_OFFSCREEN 0 -#define DEBUG_GLYPH_CACHE 0 +#define DEBUG_GLYPH_CACHE 1 #if DEBUG_TRACE_FALL #define EXA_FALLBACK(x) \ @@ -121,6 +121,7 @@ typedef struct { int glyphCount; /* Current number of glyphs */ PicturePtr picture; /* Where the glyphs of the cache are stored */ + int yOffset; /* y location within the picture where the cache starts */ int columns; /* Number of columns the glyphs are layed out in */ int evictionPosition; /* Next random position to evict a glyph */ } ExaGlyphCacheRec, *ExaGlyphCachePtr; From 13fd2256300b61d88b840952d838f834523f5dd7 Mon Sep 17 00:00:00 2001 From: Owen Taylor Date: Mon, 28 Apr 2008 21:00:55 +0200 Subject: [PATCH 07/66] EXA: Clean up debug messages --- exa/exa_glyphs.c | 3 --- exa/exa_priv.h | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/exa/exa_glyphs.c b/exa/exa_glyphs.c index 851e43917..27ecd4a42 100644 --- a/exa/exa_glyphs.c +++ b/exa/exa_glyphs.c @@ -260,11 +260,9 @@ exaGlyphCacheHashLookup(ExaGlyphCachePtr cache, return -1; if (memcmp(pGlyph->sha1, cache->glyphs[entryPos].sha1, sizeof(pGlyph->sha1)) == 0){ - DBG_GLYPH_CACHE((" found entry at %d\n", slot)); return entryPos; } - DBG_GLYPH_CACHE((" lookup linear probe bumpalong\n")); slot--; if (slot < 0) slot = cache->hashSize - 1; @@ -284,7 +282,6 @@ exaGlyphCacheHashInsert(ExaGlyphCachePtr cache, while (TRUE) { /* hash table can never be full */ if (cache->hashEntries[slot] == -1) { - DBG_GLYPH_CACHE((" inserting entry at %d\n", slot)); cache->hashEntries[slot] = pos; return; } diff --git a/exa/exa_priv.h b/exa/exa_priv.h index 8a17f6590..f3b72ae66 100644 --- a/exa/exa_priv.h +++ b/exa/exa_priv.h @@ -61,7 +61,7 @@ #define DEBUG_MIGRATE 0 #define DEBUG_PIXMAP 0 #define DEBUG_OFFSCREEN 0 -#define DEBUG_GLYPH_CACHE 1 +#define DEBUG_GLYPH_CACHE 0 #if DEBUG_TRACE_FALL #define EXA_FALLBACK(x) \ From cc08c06665ffe29ad44d023d75d0f86e5338875d Mon Sep 17 00:00:00 2001 From: Owen Taylor Date: Mon, 28 Apr 2008 21:00:55 +0200 Subject: [PATCH 08/66] EXA: Use UploadToScreen() for uploads to glyph cache When possible, use UploadToScreen() rather than CompositePicture() to upload glyphs onto the glyph cache pixmap. This avoids allocating offscreen memory for each glyph making management of offscreen areas much more efficient. --- exa/exa_glyphs.c | 77 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 66 insertions(+), 11 deletions(-) diff --git a/exa/exa_glyphs.c b/exa/exa_glyphs.c index 27ecd4a42..95ff4d8d1 100644 --- a/exa/exa_glyphs.c +++ b/exa/exa_glyphs.c @@ -347,6 +347,56 @@ exaGlyphCacheHashRemove(ExaGlyphCachePtr cache, #define CACHE_X(pos) (((pos) % cache->columns) * cache->glyphWidth) #define CACHE_Y(pos) (cache->yOffset + ((pos) / cache->columns) * cache->glyphHeight) +/* The most efficient thing to way to upload the glyph to the screen + * is to use the UploadToScreen() driver hook; this allows us to + * pipeline glyph uploads and to avoid creating offscreen pixmaps for + * glyphs that we'll never use again. + */ +static Bool +exaGlyphCacheUploadGlyph(ScreenPtr pScreen, + ExaGlyphCachePtr cache, + int pos, + GlyphPtr pGlyph) +{ + ExaScreenPriv(pScreen); + PicturePtr pGlyphPicture = GlyphPicture(pGlyph)[pScreen->myNum]; + PixmapPtr pGlyphPixmap = (PixmapPtr)pGlyphPicture->pDrawable; + ExaPixmapPriv(pGlyphPixmap); + PixmapPtr pCachePixmap = (PixmapPtr)cache->picture->pDrawable; + ExaMigrationRec pixmaps[1]; + int cacheXoff, cacheYoff; + + if (!pExaScr->info->UploadToScreen || pExaScr->swappedOut || pExaPixmap->accel_blocked) + return FALSE; + + /* If the glyph pixmap is already uploaded, no point in doing + * things this way */ + if (exaPixmapIsOffscreen(pGlyphPixmap)) + return FALSE; + + /* cache pixmap must be offscreen. */ + pixmaps[0].as_dst = TRUE; + pixmaps[0].as_src = FALSE; + pixmaps[0].pPix = pCachePixmap; + pixmaps[0].pReg = NULL; + exaDoMigration (pixmaps, 1, TRUE); + + pCachePixmap = exaGetOffscreenPixmap ((DrawablePtr)pCachePixmap, &cacheXoff, &cacheYoff); + if (!pCachePixmap) + return FALSE; + + if (!pExaScr->info->UploadToScreen(pCachePixmap, + CACHE_X(pos) + cacheXoff, + CACHE_Y(pos) + cacheYoff, + pGlyph->info.width, + pGlyph->info.height, + (char *)pExaPixmap->sys_ptr, + pExaPixmap->sys_pitch)) + return FALSE; + + return TRUE; +} + static ExaGlyphCacheResult exaGlyphCacheBufferGlyph(ScreenPtr pScreen, ExaGlyphCachePtr cache, @@ -413,18 +463,23 @@ exaGlyphCacheBufferGlyph(ScreenPtr pScreen, cache->evictionPosition = rand() % cache->size; } - /* Now actually upload the glyph into the cache picture */ + /* Now actually upload the glyph into the cache picture; if + * we can't do it with UploadToScreen (because the glyph is + * offscreen, etc), we fall back to CompositePicture. + */ + if (!exaGlyphCacheUploadGlyph(pScreen, cache, pos, pGlyph)) { + CompositePicture (PictOpSrc, + GlyphPicture(pGlyph)[pScreen->myNum], + None, + cache->picture, + 0, 0, + 0, 0, + CACHE_X(pos), + CACHE_Y(pos), + pGlyph->info.width, + pGlyph->info.height); + } - CompositePicture (PictOpSrc, - GlyphPicture(pGlyph)[pScreen->myNum], - None, - cache->picture, - 0, 0, - 0, 0, - CACHE_X(pos), - CACHE_Y(pos), - pGlyph->info.width, - pGlyph->info.height); } From e7eaac59c424a205dd106fc7d70734ff4b390f28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Mon, 28 Apr 2008 21:00:55 +0200 Subject: [PATCH 09/66] EXA: Glyph cache upload tweaks. Track damage after using UploadToScreen directly. Don't waste any effort on empty glyphs. --- exa/exa_glyphs.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/exa/exa_glyphs.c b/exa/exa_glyphs.c index 95ff4d8d1..b618365e6 100644 --- a/exa/exa_glyphs.c +++ b/exa/exa_glyphs.c @@ -394,6 +394,12 @@ exaGlyphCacheUploadGlyph(ScreenPtr pScreen, pExaPixmap->sys_pitch)) return FALSE; + exaPixmapDirty (pCachePixmap, + CACHE_X(pos) + cacheXoff, + CACHE_Y(pos) + cacheYoff, + CACHE_X(pos) + cacheXoff + pGlyph->info.width, + CACHE_Y(pos) + cacheYoff + pGlyph->info.height); + return TRUE; } @@ -737,7 +743,8 @@ exaGlyphs (CARD8 op, glyph = *glyphs++; pPicture = GlyphPicture (glyph)[pScreen->myNum]; - if (exaBufferGlyph(pScreen, &buffer, glyph, x, y) == ExaGlyphNeedFlush) + if (glyph->info.width > 0 && glyph->info.height > 0 && + exaBufferGlyph(pScreen, &buffer, glyph, x, y) == ExaGlyphNeedFlush) { if (maskFormat) exaGlyphsToMask(pMask, &buffer); From a65d530040bb561ba88c5d8c71633a7c0bf11e89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Mon, 28 Apr 2008 21:03:12 +0200 Subject: [PATCH 10/66] EXA: Accumulate glyphs whenever possible, for full benefits of the glyph cache. --- exa/exa_glyphs.c | 96 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/exa/exa_glyphs.c b/exa/exa_glyphs.c index b618365e6..08ec09780 100644 --- a/exa/exa_glyphs.c +++ b/exa/exa_glyphs.c @@ -662,6 +662,79 @@ GlyphExtents (int nlist, } } +/** + * Returns TRUE if the glyphs in the lists intersect. Only checks based on + * bounding box, which appears to be good enough to catch most cases at least. + */ +static Bool +exaGlyphsIntersect(int nlist, GlyphListPtr list, GlyphPtr *glyphs) +{ + int x1, x2, y1, y2; + int n; + GlyphPtr glyph; + int x, y; + BoxRec extents; + Bool first = TRUE; + + x = 0; + y = 0; + while (nlist--) { + x += list->xOff; + y += list->yOff; + n = list->len; + list++; + while (n--) { + glyph = *glyphs++; + + if (glyph->info.width == 0 || glyph->info.height == 0) { + x += glyph->info.xOff; + y += glyph->info.yOff; + continue; + } + + x1 = x - glyph->info.x; + if (x1 < MINSHORT) + x1 = MINSHORT; + y1 = y - glyph->info.y; + if (y1 < MINSHORT) + y1 = MINSHORT; + x2 = x1 + glyph->info.width; + if (x2 > MAXSHORT) + x2 = MAXSHORT; + y2 = y1 + glyph->info.height; + if (y2 > MAXSHORT) + y2 = MAXSHORT; + + if (first) { + extents.x1 = x1; + extents.y1 = y1; + extents.x2 = x2; + extents.y2 = y2; + first = FALSE; + } else { + if (x1 < extents.x2 && x2 > extents.x1 && + y1 < extents.y2 && y2 > extents.y1) + { + return TRUE; + } + + if (x1 < extents.x1) + extents.x1 = x1; + if (x2 > extents.x2) + extents.x2 = x2; + if (y1 < extents.y1) + extents.y1 = y1; + if (y2 > extents.y2) + extents.y2 = y2; + } + x += glyph->info.xOff; + y += glyph->info.yOff; + } + } + + return FALSE; +} + #define NeedsComponent(f) (PICT_FORMAT_A(f) != 0 && PICT_FORMAT_RGB(f) != 0) void @@ -689,6 +762,29 @@ exaGlyphs (CARD8 op, CARD32 component_alpha; ExaGlyphBuffer buffer; + /* If we don't have a mask format but all the glyphs have the same format + * and don't intersect, use the glyph format as mask format for the full + * benefits of the glyph cache. + */ + if (!maskFormat) { + Bool sameFormat = TRUE; + int i; + + maskFormat = list[0].format; + + for (i = 0; i < nlist; i++) { + if (maskFormat->format != list[i].format->format) { + sameFormat = FALSE; + break; + } + } + + if (!sameFormat || (maskFormat->depth != 1 && + exaGlyphsIntersect(nlist, list, glyphs))) { + maskFormat = NULL; + } + } + if (maskFormat) { GCPtr pGC; From 8349732a6720652bfbad7874a952be73a0e8e77b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Mon, 28 Apr 2008 21:09:35 +0200 Subject: [PATCH 11/66] EXA: Try to accelerate non-antialiased text via the glyph cache as well. Treat 1 bit glyphs and masks as PICT_a8 in the glyph cache. We're not able to accelerate them otherwise. --- exa/exa_glyphs.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/exa/exa_glyphs.c b/exa/exa_glyphs.c index 08ec09780..ff665d555 100644 --- a/exa/exa_glyphs.c +++ b/exa/exa_glyphs.c @@ -374,6 +374,10 @@ exaGlyphCacheUploadGlyph(ScreenPtr pScreen, if (exaPixmapIsOffscreen(pGlyphPixmap)) return FALSE; + /* UploadToScreen only works if bpp match */ + if (pGlyphPixmap->drawable.bitsPerPixel != pCachePixmap->drawable.bitsPerPixel) + return FALSE; + /* cache pixmap must be offscreen. */ pixmaps[0].as_dst = TRUE; pixmaps[0].as_src = FALSE; @@ -524,6 +528,9 @@ exaBufferGlyph(ScreenPtr pScreen, if (buffer->count == GLYPH_BUFFER_SIZE) return ExaGlyphNeedFlush; + + if (PICT_FORMAT_BPP(format) == 1) + format = PICT_a8; for (i = 0; i < EXA_NUM_GLYPH_CACHES; i++) { ExaGlyphCachePtr cache = &pExaScr->glyphCaches[i]; @@ -796,6 +803,14 @@ exaGlyphs (CARD8 op, return; width = extents.x2 - extents.x1; height = extents.y2 - extents.y1; + + if (maskFormat->depth == 1) { + PictFormatPtr a8Format = PictureMatchFormat (pScreen, 8, PICT_a8); + + if (a8Format) + maskFormat = a8Format; + } + pMaskPixmap = (*pScreen->CreatePixmap) (pScreen, width, height, maskFormat->depth, CREATE_PIXMAP_USAGE_SCRATCH); From 07382a70c7ac9807dfb31821a4763bea2309bde6 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Mon, 28 Apr 2008 12:36:54 -0700 Subject: [PATCH 12/66] XQuartz: Added thread debugging to xprFrame.c (cherry picked from commit 41542502b321c697271c1752525b600872b6df96) --- hw/xquartz/xpr/xprFrame.c | 47 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/hw/xquartz/xpr/xprFrame.c b/hw/xquartz/xpr/xprFrame.c index 901efca12..edb412882 100644 --- a/hw/xquartz/xpr/xprFrame.c +++ b/hw/xquartz/xpr/xprFrame.c @@ -43,6 +43,8 @@ #include #include "windowstr.h" +#include "threadSafety.h" + #include #define DEFINE_ATOM_HELPER(func,atom_name) \ @@ -69,7 +71,8 @@ static inline xp_error xprConfigureWindow(xp_window_id id, unsigned int mask, const xp_window_changes *values) { - // ErrorF("xprConfigureWindow()\n"); + TA_SERVER(); + if (!no_configure_window) return xp_configure_window(id, mask, values); else @@ -84,6 +87,8 @@ xprSetNativeProperty(RootlessWindowPtr pFrame) unsigned int native_id; long data; + TA_SERVER(); + err = xp_get_native_window((xp_window_id) pFrame->wid, &native_id); if (err == Success) { @@ -108,6 +113,8 @@ xprCreateFrame(RootlessWindowPtr pFrame, ScreenPtr pScreen, unsigned int mask = 0; xp_error err; + TA_SERVER(); + wc.x = newX; wc.y = newY; wc.width = pFrame->width; @@ -169,6 +176,8 @@ xprCreateFrame(RootlessWindowPtr pFrame, ScreenPtr pScreen, void xprDestroyFrame(RootlessFrameID wid) { + TA_SERVER(); + pthread_mutex_lock(&window_hash_mutex); x_hash_table_remove(window_hash, wid); pthread_mutex_unlock(&window_hash_mutex); @@ -183,6 +192,8 @@ xprDestroyFrame(RootlessFrameID wid) void xprMoveFrame(RootlessFrameID wid, ScreenPtr pScreen, int newX, int newY) { + TA_SERVER(); + xp_window_changes wc; wc.x = newX; @@ -202,6 +213,8 @@ xprResizeFrame(RootlessFrameID wid, ScreenPtr pScreen, { xp_window_changes wc; + TA_SERVER(); + wc.x = newX; wc.y = newY; wc.width = newW; @@ -223,7 +236,9 @@ xprRestackFrame(RootlessFrameID wid, RootlessFrameID nextWid) { xp_window_changes wc; - /* Stack frame below nextWid it if it exists, or raise + TA_SERVER(); + + /* Stack frame below nextWid it if it exists, or raise frame above everything otherwise. */ if (nextWid == NULL) @@ -249,6 +264,8 @@ xprReshapeFrame(RootlessFrameID wid, RegionPtr pShape) { xp_window_changes wc; + TA_SERVER(); + if (pShape != NULL) { wc.shape_nrects = REGION_NUM_RECTS(pShape); @@ -274,6 +291,8 @@ xprUnmapFrame(RootlessFrameID wid) { xp_window_changes wc; + TA_SERVER(); + wc.stack_mode = XP_UNMAPPED; wc.sibling = 0; @@ -292,6 +311,8 @@ xprStartDrawing(RootlessFrameID wid, char **pixelData, int *bytesPerRow) unsigned int rowbytes[2]; xp_error err; + TA_SERVER(); + err = xp_lock_window((xp_window_id) wid, NULL, NULL, data, rowbytes, NULL); if (err != Success) FatalError("Could not lock window %i for drawing.", (int) wid); @@ -307,6 +328,8 @@ xprStartDrawing(RootlessFrameID wid, char **pixelData, int *bytesPerRow) void xprStopDrawing(RootlessFrameID wid, Bool flush) { + TA_SERVER(); + xp_unlock_window((xp_window_id) wid, flush); } @@ -317,6 +340,8 @@ xprStopDrawing(RootlessFrameID wid, Bool flush) void xprUpdateRegion(RootlessFrameID wid, RegionPtr pDamage) { + TA_SERVER(); + xp_flush_window((xp_window_id) wid); } @@ -328,6 +353,8 @@ void xprDamageRects(RootlessFrameID wid, int nrects, const BoxRec *rects, int shift_x, int shift_y) { + TA_SERVER(); + xp_mark_window((xp_window_id) wid, nrects, rects, shift_x, shift_y); } @@ -341,6 +368,8 @@ xprSwitchWindow(RootlessWindowPtr pFrame, WindowPtr oldWin) { DeleteProperty(serverClient, oldWin, xa_native_window_id()); + TA_SERVER(); + xprSetNativeProperty(pFrame); } @@ -352,6 +381,8 @@ Bool xprDoReorderWindow(RootlessWindowPtr pFrame) { WindowPtr pWin = pFrame->win; + TA_SERVER(); + return AppleWMDoReorderWindow(pWin); } @@ -364,6 +395,8 @@ void xprCopyWindow(RootlessFrameID wid, int dstNrects, const BoxRec *dstRects, int dx, int dy) { + TA_SERVER(); + xp_copy_window((xp_window_id) wid, (xp_window_id) wid, dstNrects, dstRects, dx, dy); } @@ -398,6 +431,8 @@ xprInit(ScreenPtr pScreen) { RootlessInit(pScreen, &xprRootlessProcs); + TA_SERVER(); + rootless_CopyBytes_threshold = xp_copy_bytes_threshold; rootless_FillBytes_threshold = xp_fill_bytes_threshold; rootless_CompositePixels_threshold = xp_composite_area_threshold; @@ -418,6 +453,8 @@ xprGetXWindow(xp_window_id wid) { RootlessWindowRec *winRec; + TA_SERVER(); + if (window_hash == NULL) return NULL; @@ -437,6 +474,8 @@ xprGetXWindowFromAppKit(int windowNumber) Bool ret; xp_window_id wid; + TA_SERVER(); + if (window_hash == NULL) return FALSE; @@ -468,6 +507,8 @@ xprIsX11Window(void *nsWindow, int windowNumber) Bool ret; xp_window_id wid; + TA_SERVER(); + if (window_hash == NULL) return FALSE; @@ -498,6 +539,8 @@ xprHideWindows(Bool hide) int screen; WindowPtr pRoot, pWin; + TA_SERVER(); + for (screen = 0; screen < screenInfo.numScreens; screen++) { pRoot = WindowTable[screenInfo.screens[screen]->myNum]; RootlessFrameID prevWid = NULL; From c3dc4bdbb018c0606d561e2dfb9a36e9297fa312 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Mon, 28 Apr 2008 15:42:02 -0700 Subject: [PATCH 13/66] XQuartz: Disabled DPMS extension (cherry picked from commit 1448fed9b6d484f471b9b2982c76ca921a9273b9) --- configure.ac | 83 ++++++++++++++++++------------------------ hw/xquartz/Makefile.am | 1 - 2 files changed, 36 insertions(+), 48 deletions(-) diff --git a/configure.ac b/configure.ac index 67606c777..f695551e4 100644 --- a/configure.ac +++ b/configure.ac @@ -524,11 +524,11 @@ AC_ARG_ENABLE(glx-tls, AS_HELP_STRING([--enable-glx-tls], [Build GLX with dnl Extensions. AC_ARG_ENABLE(registry, AS_HELP_STRING([--disable-registry], [Build string registry module (default: enabled)]), [XREGISTRY=$enableval], [XREGISTRY=yes]) -AC_ARG_ENABLE(composite, AS_HELP_STRING([--disable-composite], [Build Composite extension (default: enabled)]), [COMPOSITE=$enableval], [COMPOSITE=auto]) +AC_ARG_ENABLE(composite, AS_HELP_STRING([--disable-composite], [Build Composite extension (default: enabled)]), [COMPOSITE=$enableval], [COMPOSITE=yes]) AC_ARG_ENABLE(mitshm, AS_HELP_STRING([--disable-shm], [Build SHM extension (default: enabled)]), [MITSHM=$enableval], [MITSHM=yes]) AC_ARG_ENABLE(xres, AS_HELP_STRING([--disable-xres], [Build XRes extension (default: enabled)]), [RES=$enableval], [RES=yes]) AC_ARG_ENABLE(xtrap, AS_HELP_STRING([--disable-xtrap], [Build XTrap extension (default: enabled)]), [XTRAP=$enableval], [XTRAP=yes]) -AC_ARG_ENABLE(record, AS_HELP_STRING([--disable-record], [Build Record extension (default: disabled)]), [RECORD=$enableval], [RECORD=no]) +AC_ARG_ENABLE(record, AS_HELP_STRING([--enable-record], [Build Record extension (default: disabled)]), [RECORD=$enableval], [RECORD=no]) AC_ARG_ENABLE(xv, AS_HELP_STRING([--disable-xv], [Build Xv extension (default: enabled)]), [XV=$enableval], [XV=yes]) AC_ARG_ENABLE(xvmc, AS_HELP_STRING([--disable-xvmc], [Build XvMC extension (default: enabled)]), [XVMC=$enableval], [XVMC=yes]) AC_ARG_ENABLE(dga, AS_HELP_STRING([--disable-dga], [Build DGA extension (default: auto)]), [DGA=$enableval], [DGA=auto]) @@ -644,6 +644,40 @@ XORG_CHECK_LINUXDOC dnl Handle installing libxf86config AM_CONDITIONAL(INSTALL_LIBXF86CONFIG, [test "x$INSTALL_LIBXF86CONFIG" = xyes]) +dnl XQuartz DDX Detection... Yes, it's ugly to have it here... but we need to handle this early on +case $host_os in + darwin*) + if test x$XQUARTZ = xauto; then + AC_CACHE_CHECK([whether to build Xquartz],xorg_cv_Carbon_framework,[ + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -framework Carbon" + AC_LINK_IFELSE([char FSFindFolder(); int main() { FSFindFolder(); return 0;}], + [xorg_cv_Carbon_framework=yes], + [xorg_cv_Carbon_framework=no]) + LDFLAGS=$save_LDFLAGS]) + + if test "X$xorg_cv_Carbon_framework" = Xyes; then + XQUARTZ=yes + else + XQUARTZ=no + fi + fi + + if test "x$XQUARTZ" = xyes ; then + XQUARTZ=yes + XVFB=no + XNEST=no + + COMPOSITE=no + DGA=no + DPMSExtension=no + XF86BIGFONT=no + XF86MISC=no + XF86VIDMODE=no + fi + ;; +esac + dnl --------------------------------------------------------------------------- dnl Extension section dnl --------------------------------------------------------------------------- @@ -780,18 +814,6 @@ if test "x$XREGISTRY" = xyes; then AC_DEFINE(XREGISTRY, 1, [Build registry module]) fi -dnl XQuartz DDX Detection... Yes, it's ugly to have it here... but we need to disable COMPOSITE for -if test "x$COMPOSITE" = xauto; then - case $host_os in - darwin*) - test "x$XQUARTZ" = xyes -o "x$XQUARTZ" = xauto && COMPOSITE=no - ;; - *) - COMPOSITE=yes - ;; - esac -fi - AM_CONDITIONAL(COMPOSITE, [test "x$COMPOSITE" = xyes]) if test "x$COMPOSITE" = xyes; then AC_DEFINE(COMPOSITE, 1, [Support Composite Extension]) @@ -1706,22 +1728,6 @@ AM_CONDITIONAL(XWIN_RANDR, [test "x$XWIN" = xyes]) AM_CONDITIONAL(XWIN_XV, [test "x$XWIN" = xyes && test "x$XV" = xyes]) dnl Darwin / OS X DDX -if test "X$XQUARTZ" = Xauto; then - AC_CACHE_CHECK([whether to build Xquartz],xorg_cv_Carbon_framework,[ - save_LDFLAGS=$LDFLAGS - LDFLAGS="$LDFLAGS -framework Carbon" - AC_LINK_IFELSE([char FSFindFolder(); int main() { FSFindFolder(); return 0;}], - [xorg_cv_Carbon_framework=yes], - [xorg_cv_Carbon_framework=no]) - LDFLAGS=$save_LDFLAGS]) - - if test "X$xorg_cv_Carbon_framework" = Xyes; then - XQUARTZ=yes - else - XQUARTZ=no - fi -fi - if test "x$XQUARTZ" = xyes; then AC_DEFINE(XQUARTZ,1,[Have Quartz]) AC_DEFINE(ROOTLESS,1,[Build Rootless code]) @@ -1733,23 +1739,6 @@ if test "x$XQUARTZ" = xyes; then AC_CHECK_LIB([Xplugin],[xp_init],[:]) CFLAGS="${CFLAGS} -DROOTLESS_WORKAROUND -DNO_ALLOCA" - - if test "x$XF86MISC" = xyes || test "x$XF86MISC" = xauto; then - AC_MSG_NOTICE([Disabling XF86Misc extension]) - XF86MISC=no - fi - if test "x$XF86VIDMODE" = xyes || test "x$XF86VIDMODE" = xauto; then - AC_MSG_NOTICE([Disabling XF86VidMode extension]) - XF86VIDMODE=no - fi - if test "x$XF86BIGFONT" = xyes || test "x$XF86BIGFONT" = xauto; then - AC_MSG_NOTICE([Disabling XF86BigFont extension]) - XF86BIGFONT=no - fi - if test "x$DGA" = xyes || test "x$DGA" = xauto; then - AC_MSG_NOTICE([Disabling DGA extension]) - DGA=no - fi fi # Support for objc in autotools is minimal and not documented. diff --git a/hw/xquartz/Makefile.am b/hw/xquartz/Makefile.am index 1465a5276..b2674be4f 100644 --- a/hw/xquartz/Makefile.am +++ b/hw/xquartz/Makefile.am @@ -19,7 +19,6 @@ DIST_SUBDIRS = GL xpr bundle libXquartz_la_SOURCES = \ $(top_srcdir)/fb/fbcmap_mi.c \ $(top_srcdir)/mi/miinitext.c \ - $(top_srcdir)/Xext/dpmsstubs.c \ X11Application.m \ X11Controller.m \ applewm.c \ From 0c2312b21b6700c1425baccaf9c26150b4f0fd6a Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Mon, 28 Apr 2008 15:28:21 -0700 Subject: [PATCH 14/66] XQuartz: xprIsX11Window can be called from the Appkit thread (see X11Application.m) (cherry picked from commit 22cf72437601c07b8a6c744b4f2f1f4cd6713e60) --- hw/xquartz/xpr/xprFrame.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/hw/xquartz/xpr/xprFrame.c b/hw/xquartz/xpr/xprFrame.c index edb412882..9fa94243e 100644 --- a/hw/xquartz/xpr/xprFrame.c +++ b/hw/xquartz/xpr/xprFrame.c @@ -453,8 +453,6 @@ xprGetXWindow(xp_window_id wid) { RootlessWindowRec *winRec; - TA_SERVER(); - if (window_hash == NULL) return NULL; @@ -474,8 +472,6 @@ xprGetXWindowFromAppKit(int windowNumber) Bool ret; xp_window_id wid; - TA_SERVER(); - if (window_hash == NULL) return FALSE; @@ -507,8 +503,6 @@ xprIsX11Window(void *nsWindow, int windowNumber) Bool ret; xp_window_id wid; - TA_SERVER(); - if (window_hash == NULL) return FALSE; From d5ab89f4f1acbe2614036e8934122185ac0f81ee Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Mon, 28 Apr 2008 15:52:24 -0700 Subject: [PATCH 15/66] XQuartz: Unset CFProcessPath... blech (cherry picked from commit ce4fbfbc75c62a092214d140c7550279aebe69ef) --- hw/xquartz/quartzStartup.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/hw/xquartz/quartzStartup.c b/hw/xquartz/quartzStartup.c index 7b6a1a6fa..a4472e659 100644 --- a/hw/xquartz/quartzStartup.c +++ b/hw/xquartz/quartzStartup.c @@ -98,6 +98,12 @@ int main(int argc, char **argv, char **envp) { int i; int fd[2]; + /* Unset CFProcessPath, so our children don't inherit this kludge we need + * to load our nib. If an xterm gets this set, then it fails to + * 'open hi.txt' properly. + */ + unsetenv("CFProcessPath"); + // Make a pipe to pass events assert( pipe(fd) == 0 ); darwinEventReadFD = fd[0]; From f65a1a62f9eac2f6620d5d469dbf6c79b2eadab7 Mon Sep 17 00:00:00 2001 From: Hong Liu Date: Tue, 29 Apr 2008 09:00:11 -0700 Subject: [PATCH 16/66] Keep rotation wrappers in place while transforms are in use LeaveVT/EnterVT cycles will free/realloc shadow frame buffers. Because of this, the presense/absence of that data is insufficient to know whether the screen function wrappers are necessary. Instead, the 'transform_in_use' flag should be used. This patch also adds 'xf86RotateFreeShadow' for drivers to use at LeaveVT time to free the rotation data; it will be reallocated on EnterVT. --- hw/xfree86/loader/xf86sym.c | 1 + hw/xfree86/modes/xf86Crtc.h | 6 ++++++ hw/xfree86/modes/xf86Rotate.c | 21 +++++++++++++++++++-- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/hw/xfree86/loader/xf86sym.c b/hw/xfree86/loader/xf86sym.c index 24fc44c1b..9833d34a3 100644 --- a/hw/xfree86/loader/xf86sym.c +++ b/hw/xfree86/loader/xf86sym.c @@ -942,6 +942,7 @@ _X_HIDDEN void *xfree86LookupTab[] = { SYMFUNC(xf86CrtcDestroy) SYMFUNC(xf86CrtcInUse) SYMFUNC(xf86CrtcSetScreenSubpixelOrder) + SYMFUNC(xf86RotateFreeShadow) SYMFUNC(xf86RotateCloseScreen) SYMFUNC(xf86CrtcRotate) SYMFUNC(xf86CrtcSetMode) diff --git a/hw/xfree86/modes/xf86Crtc.h b/hw/xfree86/modes/xf86Crtc.h index 2d723a5cd..83b1f13e8 100644 --- a/hw/xfree86/modes/xf86Crtc.h +++ b/hw/xfree86/modes/xf86Crtc.h @@ -664,6 +664,12 @@ xf86CrtcSetMode (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotation, Bool xf86CrtcRotate (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotation); +/* + * free shadow memory allocated for all crtcs + */ +void +xf86RotateFreeShadow(ScrnInfoPtr pScrn); + /* * Clean up rotation during CloseScreen */ diff --git a/hw/xfree86/modes/xf86Rotate.c b/hw/xfree86/modes/xf86Rotate.c index e2d6295b9..8f34032e0 100644 --- a/hw/xfree86/modes/xf86Rotate.c +++ b/hw/xfree86/modes/xf86Rotate.c @@ -457,8 +457,7 @@ xf86RotateDestroy (xf86CrtcPtr crtc) } for (c = 0; c < xf86_config->num_crtc; c++) - if (xf86_config->crtc[c]->rotatedPixmap || - xf86_config->crtc[c]->rotatedData) + if (xf86_config->crtc[c]->transform_in_use) return; /* @@ -478,6 +477,24 @@ xf86RotateDestroy (xf86CrtcPtr crtc) } } +_X_EXPORT void +xf86RotateFreeShadow(ScrnInfoPtr pScrn) +{ + xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn); + int c; + + for (c = 0; c < config->num_crtc; c++) { + xf86CrtcPtr crtc = config->crtc[c]; + + if (crtc->rotatedPixmap || crtc->rotatedData) { + crtc->funcs->shadow_destroy(crtc, crtc->rotatedPixmap, + crtc->rotatedData); + crtc->rotatedPixmap = NULL; + crtc->rotatedData = NULL; + } + } +} + _X_EXPORT void xf86RotateCloseScreen (ScreenPtr screen) { From d70487a4c09cfeb90d996ab40a23a74b2c15be6f Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Tue, 29 Apr 2008 23:59:26 -0700 Subject: [PATCH 17/66] XQuartz: Fix to tablet-event handling code; we now scale more conservatively (to match Linux's Wacom driver) and we now receive all tablet-related events. (cherry picked from commit 588683cecca2cfc65a28de035cd6ee3d64ff59d2) --- hw/xquartz/X11Application.m | 43 ++++++++++++++++++++++++++----------- hw/xquartz/darwinEvents.c | 38 +++++++++++++++----------------- hw/xquartz/darwinEvents.h | 3 +-- 3 files changed, 48 insertions(+), 36 deletions(-) diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m index e10e71e10..646b9ef12 100644 --- a/hw/xquartz/X11Application.m +++ b/hw/xquartz/X11Application.m @@ -49,6 +49,13 @@ #define DEFAULTS_FILE "/usr/X11/lib/X11/xserver/Xquartz.plist" +#ifndef XSERVER_VERSION +#define XSERVER_VERSION "?" +#endif + +#define ProximityIn 0 +#define ProximityOut 1 + int X11EnableKeyEquivalents = TRUE; int quartzHasRoot = FALSE, quartzEnableRootless = TRUE; @@ -852,27 +859,37 @@ static void send_nsevent (NSEventType type, NSEvent *e) { tilt_y = 0; switch (type) { - case NSLeftMouseDown: ev_button=1; ev_type=ButtonPress; goto handle_mouse; - case NSOtherMouseDown: ev_button=2; ev_type=ButtonPress; goto handle_mouse; - case NSRightMouseDown: ev_button=3; ev_type=ButtonPress; goto handle_mouse; - case NSLeftMouseUp: ev_button=1; ev_type=ButtonRelease; goto handle_mouse; - case NSOtherMouseUp: ev_button=2; ev_type=ButtonRelease; goto handle_mouse; - case NSRightMouseUp: ev_button=3; ev_type=ButtonRelease; goto handle_mouse; - case NSLeftMouseDragged: ev_button=1; ev_type=MotionNotify; goto handle_mouse; - case NSOtherMouseDragged: ev_button=2; ev_type=MotionNotify; goto handle_mouse; - case NSRightMouseDragged: ev_button=3; ev_type=MotionNotify; goto handle_mouse; + case NSLeftMouseDown: ev_button=1; ev_type=ButtonPress; goto check_subtype; + case NSOtherMouseDown: ev_button=2; ev_type=ButtonPress; goto check_subtype; + case NSRightMouseDown: ev_button=3; ev_type=ButtonPress; goto check_subtype; + case NSLeftMouseUp: ev_button=1; ev_type=ButtonRelease; goto check_subtype; + case NSOtherMouseUp: ev_button=2; ev_type=ButtonRelease; goto check_subtype; + case NSRightMouseUp: ev_button=3; ev_type=ButtonRelease; goto check_subtype; + case NSLeftMouseDragged: ev_button=1; ev_type=MotionNotify; goto check_subtype; + case NSOtherMouseDragged: ev_button=2; ev_type=MotionNotify; goto check_subtype; + case NSRightMouseDragged: ev_button=3; ev_type=MotionNotify; goto check_subtype; + +check_subtype: + if ([e subtype] != NSTabletPointEventSubtype) goto handle_mouse; + // fall through to get tablet data case NSTabletPoint: pressure = [e pressure]; tilt_x = [e tilt].x; - tilt_y = [e tilt].y; // fall through - case NSMouseMoved: ev_button=0; ev_type=MotionNotify; goto handle_mouse; - handle_mouse: + tilt_y = [e tilt].y; + // fall through to normal mouse handling -// if ([e subtype] == NSTabletPointEventSubtype) pressure = [e pressure]; + case NSMouseMoved: ev_button=0; ev_type=MotionNotify; goto handle_mouse; + +handle_mouse: DarwinSendPointerEvents(ev_type, ev_button, pointer_x, pointer_y, pressure, tilt_x, tilt_y); break; + case NSTabletProximity: + DarwinSendProximityEvents([e isEnteringProximity]?ProximityIn:ProximityOut, + pointer_x, pointer_y); + break; + case NSScrollWheel: DarwinSendScrollEvents([e deltaX], [e deltaY], pointer_x, pointer_y, pressure, tilt_x, tilt_y); diff --git a/hw/xquartz/darwinEvents.c b/hw/xquartz/darwinEvents.c index 86e7704fc..cd2b49af9 100644 --- a/hw/xquartz/darwinEvents.c +++ b/hw/xquartz/darwinEvents.c @@ -65,6 +65,10 @@ in this Software without prior written authorization from The Open Group. #define SCROLLWHEELLEFTFAKE 6 #define SCROLLWHEELRIGHTFAKE 7 +/* These values were chosen to match the output of xinput under Linux */ +#define SCALEFACTOR_TILT 64.0 +#define SCALEFACTOR_PRESSURE 1000.0 + #define _APPLEWM_SERVER_ #include "applewmExt.h" #include @@ -362,26 +366,18 @@ void DarwinSendPointerEvents(int ev_type, int ev_button, int pointer_x, int poin static int darwinFakeMouseButtonMask = 0; int i, num_events; - //DEBUG_LOG("x=%d, y=%d, p=%f, tx=%f, ty=%f\n", pointer_x, pointer_y, pressure, tilt_x, tilt_y); +// DEBUG_LOG("x=%d, y=%d, p=%f, tx=%f, ty=%f\n", pointer_x, pointer_y, pressure, tilt_x, tilt_y); if(!darwinEvents) { ErrorF("DarwinSendPointerEvents called before darwinEvents was initialized\n"); return; } - /* I can't find a spec for this, but at least GTK expects that tablets are - just like mice, except they have either one or three extra valuators, in this - order: - - X coord, Y coord, pressure, X tilt, Y tilt - Pressure and tilt should be represented natively as floats; unfortunately, - we can't do that. Again, GTK seems to record the min/max of each valuator, - and then perform scaling back to float itself using that info. Soo.... */ - - int valuators[5] = {pointer_x, pointer_y, - pressure * INT32_MAX * 1.0f, - tilt_x * INT32_MAX * 1.0f, - tilt_y * INT32_MAX * 1.0f}; + int valuators[5] = {pointer_x, pointer_y, pressure * SCALEFACTOR_PRESSURE, + tilt_x * SCALEFACTOR_TILT, tilt_y * SCALEFACTOR_TILT}; + + DEBUG_LOG("Valuators: {%d,%d,%d,%d,%d}\n", + valuators[0], valuators[1], valuators[2], valuators[3], valuators[4]); if (ev_type == ButtonPress && darwinFakeButtons && ev_button == 1) { // Mimic multi-button mouse with modifier-clicks // If both sets of modifiers are pressed, @@ -450,16 +446,16 @@ void DarwinSendKeyboardEvents(int ev_type, int keycode) { } mieqEnqueue_unlock(); } -void DarwinSendProximityEvents(int ev_type, int pointer_x, int pointer_y, - float pressure, float tilt_x, float tilt_y) { +void DarwinSendProximityEvents(int ev_type, int pointer_x, int pointer_y) { int i, num_events; - int valuators[5] = {pointer_x, pointer_y, - pressure * INT32_MAX * 1.0f, - tilt_x * INT32_MAX * 1.0f, - tilt_y * INT32_MAX * 1.0f}; + // tilt and pressure have no meaning for a Prox event + int valuators[5] = {pointer_x, pointer_y, 0, 0, 0}; + + DEBUG_LOG("DarwinSendProximityEvents(%d, %d, %d)\n", ev_type, pointer_x, pointer_y); + if(!darwinEvents) { - ErrorF("DarwinSendProximityvents called before darwinEvents was initialized\n"); + ErrorF("DarwinSendProximityEvents called before darwinEvents was initialized\n"); return; } diff --git a/hw/xquartz/darwinEvents.h b/hw/xquartz/darwinEvents.h index dd3f81c30..4a619c9ac 100644 --- a/hw/xquartz/darwinEvents.h +++ b/hw/xquartz/darwinEvents.h @@ -34,8 +34,7 @@ void DarwinEQPointerPost(DeviceIntPtr pDev, xEventPtr e); void DarwinEQSwitchScreen(ScreenPtr pScreen, Bool fromDIX); void DarwinSendPointerEvents(int ev_type, int ev_button, int pointer_x, int pointer_y, float pressure, float tilt_x, float tilt_y); -void DarwinSendProximityEvents(int ev_type, int pointer_x, int pointer_y, - float pressure, float tilt_x, float tilt_y); +void DarwinSendProximityEvents(int ev_type, int pointer_x, int pointer_y); void DarwinSendKeyboardEvents(int ev_type, int keycode); void DarwinSendScrollEvents(float count_x, float count_y, int pointer_x, int pointer_y, float pressure, float tilt_x, float tilt_y); From 519581b0bab5cc6dac397877da485745f18c2120 Mon Sep 17 00:00:00 2001 From: Ben Byer Date: Tue, 29 Apr 2008 23:00:09 -0700 Subject: [PATCH 18/66] xquartz: remove unused params from DarwinEQInit (cherry picked from commit 299a056737168ca1faefd675dce6d6ab13176be9) --- hw/xquartz/darwin.c | 3 ++- hw/xquartz/darwinEvents.c | 2 +- hw/xquartz/darwinEvents.h | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/hw/xquartz/darwin.c b/hw/xquartz/darwin.c index c18b57539..6f4719453 100644 --- a/hw/xquartz/darwin.c +++ b/hw/xquartz/darwin.c @@ -499,12 +499,13 @@ int DarwinParseModifierList( void InitInput( int argc, char **argv ) { darwinPointer = AddInputDevice(DarwinMouseProc, TRUE); + darwinPointer->name = strdup("tablet"); RegisterPointerDevice( darwinPointer ); darwinKeyboard = AddInputDevice(DarwinKeybdProc, TRUE); RegisterKeyboardDevice( darwinKeyboard ); - DarwinEQInit( (DevicePtr)darwinKeyboard, (DevicePtr)darwinPointer ); + DarwinEQInit(); QuartzInitInput(argc, argv); } diff --git a/hw/xquartz/darwinEvents.c b/hw/xquartz/darwinEvents.c index cd2b49af9..e25ae84eb 100644 --- a/hw/xquartz/darwinEvents.c +++ b/hw/xquartz/darwinEvents.c @@ -307,7 +307,7 @@ static void DarwinEventHandler(int screenNum, xEventPtr xe, DeviceIntPtr dev, in } } -Bool DarwinEQInit(DevicePtr pKbd, DevicePtr pPtr) { +Bool DarwinEQInit(void) { if (!darwinEvents) darwinEvents = (xEvent *)xcalloc(sizeof(xEvent), GetMaximumEventsNum()); if (!darwinEvents) diff --git a/hw/xquartz/darwinEvents.h b/hw/xquartz/darwinEvents.h index 4a619c9ac..ef8bf392c 100644 --- a/hw/xquartz/darwinEvents.h +++ b/hw/xquartz/darwinEvents.h @@ -28,7 +28,7 @@ #ifndef _DARWIN_EVENTS_H #define _DARWIN_EVENTS_H -Bool DarwinEQInit(DevicePtr pKbd, DevicePtr pPtr); +Bool DarwinEQInit(void); void DarwinEQEnqueue(const xEventPtr e); void DarwinEQPointerPost(DeviceIntPtr pDev, xEventPtr e); void DarwinEQSwitchScreen(ScreenPtr pScreen, Bool fromDIX); From b71b51c982706501b6229532ce342752207426bb Mon Sep 17 00:00:00 2001 From: Ben Byer Date: Tue, 29 Apr 2008 23:37:58 -0700 Subject: [PATCH 19/66] xquartz: created darwinTablet, to represent tablet events (cherry picked from commit 50641bce730ee03738fa0c4beb8125b34fda556f) --- hw/xquartz/darwin.c | 50 ++++++++++++++++++++++++++++++--------- hw/xquartz/darwin.h | 1 + hw/xquartz/darwinEvents.c | 18 ++++++++------ 3 files changed, 51 insertions(+), 18 deletions(-) diff --git a/hw/xquartz/darwin.c b/hw/xquartz/darwin.c index 6f4719453..f20cce127 100644 --- a/hw/xquartz/darwin.c +++ b/hw/xquartz/darwin.c @@ -1,10 +1,9 @@ /************************************************************** * - * Shared code for the Darwin X Server - * running with Quartz or IOKit display mode + * Xquartz initialization code * + * Copyright (c) 2007-2008 Apple Inc. * Copyright (c) 2001-2004 Torrey T. Lyons. All Rights Reserved. - * Copyright (c) 2007 Apple Inc. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -112,6 +111,7 @@ int darwinFakeMouse3Mask = NX_COMMANDMASK; // devices DeviceIntPtr darwinPointer = NULL; +DeviceIntPtr darwinTablet = NULL; DeviceIntPtr darwinKeyboard = NULL; // Common pixmap formats @@ -332,14 +332,13 @@ static void DarwinChangePointerControl( #endif /* - * DarwinMouseProc - * Handle the initialization, etc. of a mouse + * DarwinMouseProc: Handle the initialization, etc. of a mouse */ static int DarwinMouseProc(DeviceIntPtr pPointer, int what) { + // 7 buttons: left, right, middle, then four scroll wheel "buttons" CARD8 map[8] = {0, 1, 2, 3, 4, 5, 6, 7}; switch (what) { - case DEVICE_INIT: pPointer->public.on = FALSE; @@ -347,15 +346,13 @@ static int DarwinMouseProc(DeviceIntPtr pPointer, int what) { InitPointerDeviceStruct((DevicePtr)pPointer, map, 7, GetMotionHistory, (PtrCtrlProcPtr)NoopDDA, - GetMotionHistorySize(), 7); - InitProximityClassDeviceStruct(pPointer); + GetMotionHistorySize(), 2); + pPointer->name = strdup("Quartz Pointing Device"); break; - case DEVICE_ON: pPointer->public.on = TRUE; AddEnabledDevice( darwinEventReadFD ); return Success; - case DEVICE_CLOSE: case DEVICE_OFF: pPointer->public.on = FALSE; @@ -366,6 +363,34 @@ static int DarwinMouseProc(DeviceIntPtr pPointer, int what) { return Success; } +static int DarwinTabletProc(DeviceIntPtr pPointer, int what) { + CARD8 map[4] = {0, 1, 2, 3}; + + switch (what) { + case DEVICE_INIT: + pPointer->public.on = FALSE; + + // Set button map. + InitPointerDeviceStruct((DevicePtr)pPointer, map, 3, + GetMotionHistory, + (PtrCtrlProcPtr)NoopDDA, + GetMotionHistorySize(), 7); + InitProximityClassDeviceStruct(pPointer); +// InitAbsoluteClassDeviceStruct(pPointer); + pPointer->name = strdup("pen"); + break; + case DEVICE_ON: + pPointer->public.on = TRUE; + AddEnabledDevice( darwinEventReadFD ); + return Success; + case DEVICE_CLOSE: + case DEVICE_OFF: + pPointer->public.on = FALSE; + RemoveEnabledDevice(darwinEventReadFD); + return Success; + } + return Success; +} /* * DarwinKeybdProc @@ -376,6 +401,7 @@ static int DarwinKeybdProc( DeviceIntPtr pDev, int onoff ) switch ( onoff ) { case DEVICE_INIT: DarwinKeyboardInit( pDev ); + pDev->name = strdup("Quartz Keyboard"); break; case DEVICE_ON: pDev->public.on = TRUE; @@ -499,9 +525,11 @@ int DarwinParseModifierList( void InitInput( int argc, char **argv ) { darwinPointer = AddInputDevice(DarwinMouseProc, TRUE); - darwinPointer->name = strdup("tablet"); RegisterPointerDevice( darwinPointer ); + darwinTablet = AddInputDevice(DarwinTabletProc, TRUE); + RegisterPointerDevice( darwinTablet ); + darwinKeyboard = AddInputDevice(DarwinKeybdProc, TRUE); RegisterKeyboardDevice( darwinKeyboard ); diff --git a/hw/xquartz/darwin.h b/hw/xquartz/darwin.h index 6d2fbd0e5..4300b9fc0 100644 --- a/hw/xquartz/darwin.h +++ b/hw/xquartz/darwin.h @@ -71,6 +71,7 @@ extern io_connect_t darwinParamConnect; extern int darwinEventReadFD; extern int darwinEventWriteFD; extern DeviceIntPtr darwinPointer; +extern DeviceIntPtr darwinTablet; extern DeviceIntPtr darwinKeyboard; // User preferences diff --git a/hw/xquartz/darwinEvents.c b/hw/xquartz/darwinEvents.c index e25ae84eb..7b3091d40 100644 --- a/hw/xquartz/darwinEvents.c +++ b/hw/xquartz/darwinEvents.c @@ -365,7 +365,8 @@ void DarwinSendPointerEvents(int ev_type, int ev_button, int pointer_x, int poin static int darwinFakeMouseButtonDown = 0; static int darwinFakeMouseButtonMask = 0; int i, num_events; - + DeviceIntPtr dev; + // DEBUG_LOG("x=%d, y=%d, p=%f, tx=%f, ty=%f\n", pointer_x, pointer_y, pressure, tilt_x, tilt_y); if(!darwinEvents) { @@ -376,7 +377,10 @@ void DarwinSendPointerEvents(int ev_type, int ev_button, int pointer_x, int poin int valuators[5] = {pointer_x, pointer_y, pressure * SCALEFACTOR_PRESSURE, tilt_x * SCALEFACTOR_TILT, tilt_y * SCALEFACTOR_TILT}; - DEBUG_LOG("Valuators: {%d,%d,%d,%d,%d}\n", + if (pressure == 0 && tilt_x == 0 && tilt_y == 0) dev = darwinPointer; + else dev = darwinTablet; + + DEBUG_LOG("Valuators: {%d,%d,%d,%d,%d}\n", valuators[0], valuators[1], valuators[2], valuators[3], valuators[4]); if (ev_type == ButtonPress && darwinFakeButtons && ev_button == 1) { // Mimic multi-button mouse with modifier-clicks @@ -410,9 +414,9 @@ void DarwinSendPointerEvents(int ev_type, int ev_button, int pointer_x, int poin } mieqEnqueue_lock(); { - num_events = GetPointerEvents(darwinEvents, darwinPointer, ev_type, ev_button, - POINTER_ABSOLUTE, 0, 5, valuators); - for(i=0; i Date: Wed, 30 Apr 2008 11:58:32 +0300 Subject: [PATCH 20/66] Add M32R architecture support (bug #10020) Still needs autotools support, so this won't actually _build_: it's just a starting point. --- hw/xfree86/common/compiler.h | 4 ++-- hw/xfree86/common/xf86Bus.c | 4 ++-- hw/xfree86/os-support/bus/Pci.h | 6 ++++++ hw/xfree86/os-support/linux/lnxResource.c | 1 + hw/xfree86/os-support/linux/lnx_video.c | 4 ++-- include/servermd.h | 20 ++++++++++++++++++++ 6 files changed, 33 insertions(+), 6 deletions(-) diff --git a/hw/xfree86/common/compiler.h b/hw/xfree86/common/compiler.h index 7b65da844..9e7f8219d 100644 --- a/hw/xfree86/common/compiler.h +++ b/hw/xfree86/common/compiler.h @@ -1363,7 +1363,7 @@ do { \ # define write_mem_barrier() /* NOP */ # if !defined(__SUNPRO_C) -# if !defined(FAKEIT) && !defined(__mc68000__) && !defined(__arm__) && !defined(__sh__) && !defined(__hppa__) && !defined(__s390__) +# if !defined(FAKEIT) && !defined(__mc68000__) && !defined(__arm__) && !defined(__sh__) && !defined(__hppa__) && !defined(__s390__) && !defined(__m32r__) # ifdef GCCUSESGAS /* @@ -1472,7 +1472,7 @@ inl(unsigned short port) # endif /* GCCUSESGAS */ -# else /* !defined(FAKEIT) && !defined(__mc68000__) && !defined(__arm__) && !defined(__sh__) && !defined(__hppa__)*/ +# else /* !defined(FAKEIT) && !defined(__mc68000__) && !defined(__arm__) && !defined(__sh__) && !defined(__hppa__) && !defined(__m32r__) */ static __inline__ void outb(unsigned short port, unsigned char val) diff --git a/hw/xfree86/common/xf86Bus.c b/hw/xfree86/common/xf86Bus.c index f7ffac85e..7e6b93a10 100644 --- a/hw/xfree86/common/xf86Bus.c +++ b/hw/xfree86/common/xf86Bus.c @@ -2773,7 +2773,7 @@ xf86FindPrimaryDevice() } } -#if !defined(__sparc) && !defined(__sparc__) && !defined(__powerpc__) && !defined(__mips__) && !defined(__arm__) +#if !defined(__sparc) && !defined(__sparc__) && !defined(__powerpc__) && !defined(__mips__) && !defined(__arm__) && !defined(__m32r__) #include "vgaHW.h" #include "compiler.h" #endif @@ -2785,7 +2785,7 @@ static void CheckGenericGA() { /* This needs to be changed for multiple domains */ -#if !defined(__sparc__) && !defined(__sparc) && !defined(__powerpc__) && !defined(__mips__) && !defined(__ia64__) && !defined(__arm__) && !defined(__s390__) +#if !defined(__sparc__) && !defined(__sparc) && !defined(__powerpc__) && !defined(__mips__) && !defined(__ia64__) && !defined(__arm__) && !defined(__s390__) && !defined(__m32r__) IOADDRESS GenericIOBase = VGAHW_GET_IOBASE(); CARD8 CurrentValue, TestValue; diff --git a/hw/xfree86/os-support/bus/Pci.h b/hw/xfree86/os-support/bus/Pci.h index b78d30720..1385eee85 100644 --- a/hw/xfree86/os-support/bus/Pci.h +++ b/hw/xfree86/os-support/bus/Pci.h @@ -237,6 +237,12 @@ # if defined(linux) # define ARCH_PCI_INIT linuxPciInit # endif +#elif defined(__m32r__) +# if defined(linux) +# define ARCH_PCI_INIT linuxPciInit +# define INCLUDE_XF86_MAP_PCI_MEM +# define INCLUDE_XF86_NO_DOMAIN +# endif #elif defined(__sparc__) || defined(sparc) # if defined(linux) # define ARCH_PCI_INIT linuxPciInit diff --git a/hw/xfree86/os-support/linux/lnxResource.c b/hw/xfree86/os-support/linux/lnxResource.c index 67af9db3d..734f4d674 100644 --- a/hw/xfree86/os-support/linux/lnxResource.c +++ b/hw/xfree86/os-support/linux/lnxResource.c @@ -65,6 +65,7 @@ xf86AccResFromOS(resPtr ret) defined(__sparc__) || \ defined(__mips__) || \ defined(__sh__) || \ + defined(__m32r__) || \ defined(__mc68000__) || \ defined(__arm__) || \ defined(__s390__) || \ diff --git a/hw/xfree86/os-support/linux/lnx_video.c b/hw/xfree86/os-support/linux/lnx_video.c index 1bd2d575f..429593784 100644 --- a/hw/xfree86/os-support/linux/lnx_video.c +++ b/hw/xfree86/os-support/linux/lnx_video.c @@ -558,7 +558,7 @@ xf86EnableIO(void) #endif } close(fd); -#elif !defined(__mc68000__) && !defined(__sparc__) && !defined(__mips__) && !defined(__sh__) && !defined(__hppa__) && !defined(__s390__) && !defined(__arm__) +#elif !defined(__mc68000__) && !defined(__sparc__) && !defined(__mips__) && !defined(__sh__) && !defined(__hppa__) && !defined(__s390__) && !defined(__arm__) && !defined(__m32r__) if (ioperm(0, 1024, 1) || iopl(3)) { if (errno == ENODEV) ErrorF("xf86EnableIOPorts: no I/O ports found\n"); @@ -585,7 +585,7 @@ xf86DisableIO(void) #if defined(__powerpc__) munmap(ioBase, 0x20000); ioBase = NULL; -#elif !defined(__mc68000__) && !defined(__sparc__) && !defined(__mips__) && !defined(__sh__) && !defined(__hppa__) && !defined(__arm__) && !defined(__s390__) +#elif !defined(__mc68000__) && !defined(__sparc__) && !defined(__mips__) && !defined(__sh__) && !defined(__hppa__) && !defined(__arm__) && !defined(__s390__) && !defined(__m32r__) iopl(0); ioperm(0, 1024, 0); #endif diff --git a/include/servermd.h b/include/servermd.h index 7b0a32840..8e6de0959 100644 --- a/include/servermd.h +++ b/include/servermd.h @@ -217,6 +217,26 @@ SOFTWARE. #endif /* SuperH */ +#if defined(__m32r__) + +#if defined(__BIG_ENDIAN__) +# define IMAGE_BYTE_ORDER MSBFirst +# define BITMAP_BIT_ORDER MSBFirst +# define GLYPHPADBYTES 4 +# define GETLEFTBITS_ALIGNMENT 1 +#else +# define IMAGE_BYTE_ORDER LSBFirst +# define BITMAP_BIT_ORDER LSBFirst +# define GLYPHPADBYTES 4 +# define GETLEFTBITS_ALIGNMENT 1 +#endif + +#define AVOID_MEMORY_READ +#define FAST_CONSTANT_OFFSET_MODE +#define LARGE_INSTRUCTION_CACHE +#define PLENTIFUL_REGISTERS + +#endif /* __m32r__ */ #if (defined(sun) && (defined(__sparc) || defined(sparc))) || \ (defined(__uxp__) && (defined(sparc) || defined(mc68000))) || \ From 28d1e21f1523d475cb757d3cfa33737ed62c534d Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Wed, 30 Apr 2008 17:30:32 -0700 Subject: [PATCH 21/66] Dix: Cleaned up sanity checking in Get{Pointer,Keyboard}Events XQuartz was crashing because the Appkit thread was trying to GetXXXEvents while the Xserver thread was exiting. This adds some more sanity checks and avoids that crash (cherry picked from commit 34ec4bd6acb834c0e3f9a5042a0cc3f52c6f3a68) --- dix/getevents.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/dix/getevents.c b/dix/getevents.c index bf9331eae..0229c0ac6 100644 --- a/dix/getevents.c +++ b/dix/getevents.c @@ -407,8 +407,8 @@ GetKeyboardValuatorEvents(xEvent *events, DeviceIntPtr pDev, int type, int num_valuators, int *valuators) { int numEvents = 0; CARD32 ms = 0; - KeySym *map = pDev->key->curKeySyms.map; - KeySym sym = map[key_code * pDev->key->curKeySyms.mapWidth]; + KeySym *map; + KeySym sym; deviceKeyButtonPointer *kbp = NULL; if (!events) @@ -419,11 +419,14 @@ GetKeyboardValuatorEvents(xEvent *events, DeviceIntPtr pDev, int type, return 0; if (!pDev->key || !pDev->focus || !pDev->kbdfeed || - (pDev->coreEvents && !inputInfo.keyboard->key)) + (pDev->coreEvents && !(inputInfo.keyboard && inputInfo.keyboard->key))) return 0; if (key_code < 8 || key_code > 255) return 0; + + map = pDev->key->curKeySyms.map; + sym = map[key_code * pDev->key->curKeySyms.mapWidth]; if (pDev->coreEvents) numEvents = 2; @@ -539,6 +542,9 @@ GetPointerEvents(xEvent *events, DeviceIntPtr pDev, int type, int buttons, if ((type == ButtonPress || type == ButtonRelease) && !pDev->button) return 0; + + if(pDev->coreEvents && !cp) + return 0; /* FIXME: I guess it should, in theory, be possible to post button events * from devices without valuators. */ From ec0419b50534006a272278b79ee51538193661cb Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Wed, 30 Apr 2008 17:30:57 -0700 Subject: [PATCH 22/66] XQuartz: Moved some relevant stuff from darwin.h to darwinEvents.h (cherry picked from commit 1fcf74a436f2e19cceb3f285b89859025d94c040) --- hw/xquartz/darwin.h | 32 -------------------------------- hw/xquartz/darwinEvents.h | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/hw/xquartz/darwin.h b/hw/xquartz/darwin.h index 4300b9fc0..bdf00468e 100644 --- a/hw/xquartz/darwin.h +++ b/hw/xquartz/darwin.h @@ -89,38 +89,6 @@ extern int darwinDesiredRefresh; extern int darwinMainScreenX; extern int darwinMainScreenY; - -/* - * Special ddx events understood by the X server - */ -enum { - kXquartzReloadKeymap // Reload system keymap - = LASTEvent+1, // (from X.h list of event names) - kXquartzActivate, // restore X drawing and cursor - kXquartzDeactivate, // clip X drawing and switch to Aqua cursor - kXquartzSetRootClip, // enable or disable drawing to the X screen - kXquartzQuit, // kill the X server and release the display - kXquartzReadPasteboard, // copy Mac OS X pasteboard into X cut buffer - kXquartzWritePasteboard, // copy X cut buffer onto Mac OS X pasteboard - kXquartzBringAllToFront, // bring all X windows to front - kXquartzToggleFullscreen, // Enable/Disable fullscreen mode - kXquartzSetRootless, // Set rootless mode - kXquartzSpaceChanged, // Spaces changed - /* - * AppleWM events - */ - kXquartzControllerNotify, // send an AppleWMControllerNotify event - kXquartzPasteboardNotify, // notify the WM to copy or paste - /* - * Xplugin notification events - */ - kXquartzDisplayChanged, // display configuration has changed - kXquartzWindowState, // window visibility state has changed - kXquartzWindowMoved, // window has moved on screen -}; - -void DarwinSendDDXEvent(int type, int argc, ...); - #define ENABLE_DEBUG_LOG 1 #ifdef ENABLE_DEBUG_LOG diff --git a/hw/xquartz/darwinEvents.h b/hw/xquartz/darwinEvents.h index ef8bf392c..a676aeb53 100644 --- a/hw/xquartz/darwinEvents.h +++ b/hw/xquartz/darwinEvents.h @@ -40,4 +40,36 @@ void DarwinSendScrollEvents(float count_x, float count_y, int pointer_x, int poi float pressure, float tilt_x, float tilt_y); void DarwinUpdateModKeys(int flags); +/* + * Special ddx events understood by the X server + */ +enum { + kXquartzReloadKeymap // Reload system keymap + = LASTEvent+1, // (from X.h list of event names) + kXquartzActivate, // restore X drawing and cursor + kXquartzDeactivate, // clip X drawing and switch to Aqua cursor + kXquartzSetRootClip, // enable or disable drawing to the X screen + kXquartzQuit, // kill the X server and release the display + kXquartzReadPasteboard, // copy Mac OS X pasteboard into X cut buffer + kXquartzWritePasteboard, // copy X cut buffer onto Mac OS X pasteboard + kXquartzBringAllToFront, // bring all X windows to front + kXquartzToggleFullscreen, // Enable/Disable fullscreen mode + kXquartzSetRootless, // Set rootless mode + kXquartzSpaceChanged, // Spaces changed + /* + * AppleWM events + */ + kXquartzControllerNotify, // send an AppleWMControllerNotify event + kXquartzPasteboardNotify, // notify the WM to copy or paste + /* + * Xplugin notification events + */ + kXquartzDisplayChanged, // display configuration has changed + kXquartzWindowState, // window visibility state has changed + kXquartzWindowMoved, // window has moved on screen +}; + +/* Send one of the above events to the server thread. */ +void DarwinSendDDXEvent(int type, int argc, ...); + #endif /* _DARWIN_EVENTS_H */ From 6899ff81e8f668382e3e2f9afdd9cdf51d0e0f7d Mon Sep 17 00:00:00 2001 From: Paulo Cesar Pereira de Andrade Date: Wed, 30 Apr 2008 16:38:42 -0300 Subject: [PATCH 23/66] Fix an off by one read error in drmSIGIOHandler(). Signed-off-by: Peter Hutterer --- hw/xfree86/dri/dri.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/xfree86/dri/dri.c b/hw/xfree86/dri/dri.c index b736c6ae0..ef1a6ea0a 100644 --- a/hw/xfree86/dri/dri.c +++ b/hw/xfree86/dri/dri.c @@ -2436,7 +2436,7 @@ static void drmSIGIOHandler(int interrupt, void *closure) #if 0 fprintf(stderr, "Trying %d\n", entry->fd); #endif - if ((count = read(entry->fd, buf, sizeof(buf))) > 0) { + if ((count = read(entry->fd, buf, sizeof(buf) - 1)) > 0) { buf[count] = '\0'; #if 0 fprintf(stderr, "Got %s\n", buf); From 01c61f3d972fc2f4e5bb536dd00d8b6bbeb0fb3d Mon Sep 17 00:00:00 2001 From: Paulo Cesar Pereira de Andrade Date: Thu, 1 May 2008 01:02:39 -0300 Subject: [PATCH 24/66] xorgcfg: Fix a crash if xorg.conf doesn't have a Files section. This patch only creates a Files section if required, so if no entries are added, an empty Files section will not be created. Signed-off-by: Peter Hutterer --- hw/xfree86/utils/xorgcfg/expert.c | 50 +++++++++++++++++++++---------- 1 file changed, 34 insertions(+), 16 deletions(-) diff --git a/hw/xfree86/utils/xorgcfg/expert.c b/hw/xfree86/utils/xorgcfg/expert.c index bb6960ce7..484c2ec4b 100644 --- a/hw/xfree86/utils/xorgcfg/expert.c +++ b/hw/xfree86/utils/xorgcfg/expert.c @@ -465,7 +465,7 @@ CreateFiles(TreeNode *files) Widget w; char *value; - value = file->file_logfile ? file->file_logfile : ""; + value = (file && file->file_logfile) ? file->file_logfile : ""; node = NewNode(files, NULL, NULL, files->node, (TreeData*)XtCalloc(1, sizeof(TreeData))); CreateFilesField(node, "LogFile", value); @@ -509,10 +509,14 @@ UpdateFiles(TreeNode *files) /* LogFile */ files = files->child; XtVaGetValues(files->data->files.text, XtNstring, &str, NULL); - XtFree(XF86Config->conf_files->file_logfile); - if (*str) + if (XF86Config->conf_files && XF86Config->conf_files->file_logfile) + XtFree(XF86Config->conf_files->file_logfile); + if (*str) { + if (XF86Config->conf_files == NULL) + XF86Config->conf_files = XtCalloc(1, sizeof(XF86ConfFilesRec)); XF86Config->conf_files->file_logfile = XtNewString(str); - else + } + else if (XF86Config->conf_files) XF86Config->conf_files->file_logfile = NULL; } @@ -527,10 +531,11 @@ CreateFontPath(TreeNode *fontpath, char *path) if (path == NULL) { if (XF86Font_path) { path = XtNewString(XF86Font_path); - if (XF86Config->conf_files && XF86Config->conf_files->file_fontpath) { + if (XF86Config->conf_files && XF86Config->conf_files->file_fontpath) XtFree(XF86Config->conf_files->file_fontpath); - XF86Config->conf_files->file_fontpath = XtNewString(path); - } + if (XF86Config->conf_files == NULL) + XF86Config->conf_files = XtCalloc(1, sizeof(XF86ConfFilesRec)); + XF86Config->conf_files->file_fontpath = XtNewString(path); } else if (XF86Config->conf_files && XF86Config->conf_files->file_fontpath) path = XtNewString(XF86Config->conf_files->file_fontpath); @@ -629,9 +634,14 @@ FontPathChanged(TreeNode *node) pos += len - 2; } - if (XF86Config->conf_files->file_fontpath) - XtFree(XF86Config->conf_files->file_fontpath); - XF86Config->conf_files->file_fontpath = fontpath; + if (XF86Config->conf_files) { + if (XF86Config->conf_files->file_fontpath) + XtFree(XF86Config->conf_files->file_fontpath); + } + else if (fontpath) + XF86Config->conf_files = XtCalloc(1, sizeof(XF86ConfFilesRec)); + if (XF86Config->conf_files) + XF86Config->conf_files->file_fontpath = fontpath; } static void @@ -703,10 +713,11 @@ CreateModulePath(TreeNode *modulepath, char *path) if (path == NULL) { if (XF86Module_path) { path = XtNewString(XF86Module_path); - if (XF86Config->conf_files && XF86Config->conf_files->file_modulepath) { + if (XF86Config->conf_files == NULL) + XF86Config->conf_files = XtCalloc(1, sizeof(XF86ConfFilesRec)); + else if (XF86Config->conf_files->file_modulepath) XtFree(XF86Config->conf_files->file_modulepath); - XF86Config->conf_files->file_modulepath = XtNewString(path); - } + XF86Config->conf_files->file_modulepath = XtNewString(path); } else if (XF86Config->conf_files && XF86Config->conf_files->file_modulepath) path = XtNewString(XF86Config->conf_files->file_modulepath); @@ -799,9 +810,14 @@ ModulePathChanged(TreeNode *node) pos += len - 2; } - if (XF86Config->conf_files->file_modulepath) - XtFree(XF86Config->conf_files->file_modulepath); - XF86Config->conf_files->file_modulepath = modulepath; + if (XF86Config->conf_files) { + if (XF86Config->conf_files->file_modulepath) + XtFree(XF86Config->conf_files->file_modulepath); + } + else if (modulepath) + XF86Config->conf_files = XtCalloc(1, sizeof(XF86ConfFilesRec)); + if (XF86Config->conf_files) + XF86Config->conf_files->file_modulepath = modulepath; } static void @@ -921,6 +937,8 @@ NewModuleCallback(Widget unused, XtPointer user_data, XtPointer call_data) DeleteNode(node); load = (XF86LoadPtr)XtCalloc(1, sizeof(XF86LoadRec)); load->load_name = XtNewString(label); + if (XF86Config->conf_modules == NULL) + XF86Config->conf_modules = XtCalloc(1, sizeof(XF86ConfModuleRec)); XF86Config->conf_modules->mod_load_lst = xf86addModule(XF86Config->conf_modules->mod_load_lst, load); From 3b8d53452cd6c74d32d7759964a7cd9ee775f161 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Thu, 1 May 2008 15:10:52 +0200 Subject: [PATCH 25/66] EXA: Fall back in CompositeRects if the driver can't accelerate Composite. Fixes http://bugs.freedesktop.org/show_bug.cgi?id=15780 . --- exa/exa_render.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/exa/exa_render.c b/exa/exa_render.c index 43b0029e5..b480c6d05 100644 --- a/exa/exa_render.c +++ b/exa/exa_render.c @@ -345,6 +345,9 @@ exaTryDriverCompositeRects(CARD8 op, struct _Pixmap scratch; ExaMigrationRec pixmaps[2]; + if (!pExaScr->info->PrepareComposite) + return -1; + pSrcPix = exaGetDrawablePixmap(pSrc->pDrawable); pSrcExaPix = ExaGetPixmapPriv(pSrcPix); From a338007be6fd4302af012109d959f43ac7eab2b1 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Thu, 1 May 2008 18:02:59 -0700 Subject: [PATCH 26/66] XQuartz: Adjust the screen origin offset properly for multimonitor setups (cherry picked from commit f2020b9836bacd0593ac0b4c8541e32714ab02a9) --- hw/xquartz/X11Controller.m | 1 + hw/xquartz/darwinEvents.c | 39 +++++++++++++++++++++----------------- hw/xquartz/xpr/xprScreen.c | 1 + 3 files changed, 24 insertions(+), 17 deletions(-) diff --git a/hw/xquartz/X11Controller.m b/hw/xquartz/X11Controller.m index df328f38c..107d8ee9b 100644 --- a/hw/xquartz/X11Controller.m +++ b/hw/xquartz/X11Controller.m @@ -42,6 +42,7 @@ #include "opaque.h" #include "darwin.h" +#include "darwinEvents.h" #include "quartz.h" #define _APPLEWM_SERVER_ #include "X11/extensions/applewm.h" diff --git a/hw/xquartz/darwinEvents.c b/hw/xquartz/darwinEvents.c index 7b3091d40..161fd9d52 100644 --- a/hw/xquartz/darwinEvents.c +++ b/hw/xquartz/darwinEvents.c @@ -81,22 +81,21 @@ int input_check_zero, input_check_flag; static int old_flags = 0; // last known modifier state xEvent *darwinEvents = NULL; +pthread_mutex_t darwinEvents_mutex = PTHREAD_MUTEX_INITIALIZER; -pthread_mutex_t mieqEnqueue_mutex = PTHREAD_MUTEX_INITIALIZER; - -static inline void mieqEnqueue_lock(void) { +static inline void darwinEvents_lock(void) { int err; - if((err = pthread_mutex_lock(&mieqEnqueue_mutex))) { - ErrorF("%s:%s:%d: Failed to lock mieqEnqueue_mutex: %d\n", + if((err = pthread_mutex_lock(&darwinEvents_mutex))) { + ErrorF("%s:%s:%d: Failed to lock darwinEvents_mutex: %d\n", __FILE__, __FUNCTION__, __LINE__, err); spewCallStack(); } } -static inline void mieqEnqueue_unlock(void) { +static inline void darwinEvents_unlock(void) { int err; - if((err = pthread_mutex_unlock(&mieqEnqueue_mutex))) { - ErrorF("%s:%s:%d: Failed to unlock mieqEnqueue_mutex: %d\n", + if((err = pthread_mutex_unlock(&darwinEvents_mutex))) { + ErrorF("%s:%s:%d: Failed to unlock darwinEvents_mutex: %d\n", __FILE__, __FUNCTION__, __LINE__, err); spewCallStack(); } @@ -413,13 +412,19 @@ void DarwinSendPointerEvents(int ev_type, int ev_button, int pointer_x, int poin return; } - mieqEnqueue_lock(); { + darwinEvents_lock(); { num_events = GetPointerEvents(darwinEvents, dev, ev_type, ev_button, POINTER_ABSOLUTE, 0, dev==darwinTablet?5:2, valuators); - for(i=0; imyNum].x; + darwinEvents[i].u.keyButtonPointer.rootY -= darwinMainScreenY + + dixScreenOrigins[miPointerCurrentScreen()->myNum].y; + mieqEnqueue (dev, &darwinEvents[i]); + } DarwinPokeEQ(); - } mieqEnqueue_unlock(); + } darwinEvents_unlock(); } void DarwinSendKeyboardEvents(int ev_type, int keycode) { @@ -443,11 +448,11 @@ void DarwinSendKeyboardEvents(int ev_type, int keycode) { } } - mieqEnqueue_lock(); { + darwinEvents_lock(); { num_events = GetKeyboardEvents(darwinEvents, darwinKeyboard, ev_type, keycode + MIN_KEYCODE); for(i=0; i Date: Fri, 2 May 2008 16:53:45 -0700 Subject: [PATCH 27/66] XQuartz: Avoid a possible crash at startup due to unfavorable context switching. (cherry picked from commit ff10c37bdd09656cf2f7ee9577f5552caa1ffdb8) --- hw/xquartz/darwinEvents.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/hw/xquartz/darwinEvents.c b/hw/xquartz/darwinEvents.c index 161fd9d52..2c95ed7c3 100644 --- a/hw/xquartz/darwinEvents.c +++ b/hw/xquartz/darwinEvents.c @@ -365,6 +365,7 @@ void DarwinSendPointerEvents(int ev_type, int ev_button, int pointer_x, int poin static int darwinFakeMouseButtonMask = 0; int i, num_events; DeviceIntPtr dev; + ScreenPtr screen; // DEBUG_LOG("x=%d, y=%d, p=%f, tx=%f, ty=%f\n", pointer_x, pointer_y, pressure, tilt_x, tilt_y); @@ -415,11 +416,12 @@ void DarwinSendPointerEvents(int ev_type, int ev_button, int pointer_x, int poin darwinEvents_lock(); { num_events = GetPointerEvents(darwinEvents, dev, ev_type, ev_button, POINTER_ABSOLUTE, 0, dev==darwinTablet?5:2, valuators); - for(i=0; imyNum].x; + dixScreenOrigins[screen->myNum].x; darwinEvents[i].u.keyButtonPointer.rootY -= darwinMainScreenY + - dixScreenOrigins[miPointerCurrentScreen()->myNum].y; + dixScreenOrigins[screen->myNum].y; mieqEnqueue (dev, &darwinEvents[i]); } DarwinPokeEQ(); From f4a68f3701889950d3b98842d021f357f3913fea Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Fri, 2 May 2008 17:35:57 -0700 Subject: [PATCH 28/66] XQuartz: Fix mouse input offsets earlier since GetPointerEvents does not like negative (x,y) values (cherry picked from commit 8d9eab3a2ec5955cc2698fdcb1fa6ed12b2aadb7) --- hw/xquartz/X11Application.m | 2 +- hw/xquartz/darwinEvents.c | 81 ++++++++++++++++++++++++------------- 2 files changed, 55 insertions(+), 28 deletions(-) diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m index 646b9ef12..691725df9 100644 --- a/hw/xquartz/X11Application.m +++ b/hw/xquartz/X11Application.m @@ -839,7 +839,7 @@ static void send_nsevent (NSEventType type, NSEvent *e) { int pointer_x, pointer_y, ev_button, ev_type; float pressure, tilt_x, tilt_y; - /* convert location to global top-left coordinates */ + /* convert location to be relative to top-left of primary display */ location = [e locationInWindow]; window = [e window]; screen = [[[NSScreen screens] objectAtIndex:0] frame]; diff --git a/hw/xquartz/darwinEvents.c b/hw/xquartz/darwinEvents.c index 2c95ed7c3..154709448 100644 --- a/hw/xquartz/darwinEvents.c +++ b/hw/xquartz/darwinEvents.c @@ -359,6 +359,28 @@ static void DarwinPokeEQ(void) { write(darwinEventWriteFD, &nullbyte, 1); } +/* Convert from Appkit pointer input values to X input values: + * Note: pointer_x and pointer_y are relative to the upper-left of primary + * display. + */ +static void DarwinPrepareValuators(int *valuators, ScreenPtr screen, + int pointer_x, int pointer_y, + float pressure, float tilt_x, float tilt_y) { + /* Fix offset between darwin and X screens */ + pointer_x -= darwinMainScreenX + dixScreenOrigins[screen->myNum].x; + pointer_y -= darwinMainScreenY + dixScreenOrigins[screen->myNum].y; + + /* Setup our array of values */ + valuators[0] = pointer_x; + valuators[1] = pointer_y; + valuators[2] = pressure * SCALEFACTOR_PRESSURE; + valuators[3] = tilt_x * SCALEFACTOR_TILT; + valuators[4] = tilt_y * SCALEFACTOR_TILT; + + DEBUG_LOG("Valuators: {%d,%d,%d,%d,%d}\n", + valuators[0], valuators[1], valuators[2], valuators[3], valuators[4]); +} + void DarwinSendPointerEvents(int ev_type, int ev_button, int pointer_x, int pointer_y, float pressure, float tilt_x, float tilt_y) { static int darwinFakeMouseButtonDown = 0; @@ -366,22 +388,26 @@ void DarwinSendPointerEvents(int ev_type, int ev_button, int pointer_x, int poin int i, num_events; DeviceIntPtr dev; ScreenPtr screen; + int valuators[5]; -// DEBUG_LOG("x=%d, y=%d, p=%f, tx=%f, ty=%f\n", pointer_x, pointer_y, pressure, tilt_x, tilt_y); + DEBUG_LOG("x=%d, y=%d, p=%f, tx=%f, ty=%f\n", pointer_x, pointer_y, pressure, tilt_x, tilt_y); if(!darwinEvents) { - ErrorF("DarwinSendPointerEvents called before darwinEvents was initialized\n"); + DEBUG_LOG("DarwinSendPointerEvents called before darwinEvents was initialized\n"); return; } - int valuators[5] = {pointer_x, pointer_y, pressure * SCALEFACTOR_PRESSURE, - tilt_x * SCALEFACTOR_TILT, tilt_y * SCALEFACTOR_TILT}; - - if (pressure == 0 && tilt_x == 0 && tilt_y == 0) dev = darwinPointer; - else dev = darwinTablet; + if (pressure == 0 && tilt_x == 0 && tilt_y == 0) + dev = darwinPointer; + else + dev = darwinTablet; + + screen = miPointerGetScreen(dev); + if(!screen) { + DEBUG_LOG("DarwinSendPointerEvents called before screen was initialized\n"); + return; + } - DEBUG_LOG("Valuators: {%d,%d,%d,%d,%d}\n", - valuators[0], valuators[1], valuators[2], valuators[3], valuators[4]); if (ev_type == ButtonPress && darwinFakeButtons && ev_button == 1) { // Mimic multi-button mouse with modifier-clicks // If both sets of modifiers are pressed, @@ -411,19 +437,13 @@ void DarwinSendPointerEvents(int ev_type, int ev_button, int pointer_x, int poin DarwinUpdateModifiers(KeyPress, darwinFakeMouseButtonMask & old_flags); darwinFakeMouseButtonMask = 0; return; - } + } + DarwinPrepareValuators(valuators, screen, pointer_x, pointer_y, pressure, tilt_x, tilt_y); darwinEvents_lock(); { num_events = GetPointerEvents(darwinEvents, dev, ev_type, ev_button, POINTER_ABSOLUTE, 0, dev==darwinTablet?5:2, valuators); - screen = miPointerGetScreen(dev); - for(i=0; imyNum].x; - darwinEvents[i].u.keyButtonPointer.rootY -= darwinMainScreenY + - dixScreenOrigins[screen->myNum].y; - mieqEnqueue (dev, &darwinEvents[i]); - } + for(i=0; i Date: Sun, 4 May 2008 10:26:25 -0700 Subject: [PATCH 29/66] Xephyr: Handle depth 30 and reject higher depths rather than crashing. --- hw/kdrive/ephyr/ephyr.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/hw/kdrive/ephyr/ephyr.c b/hw/kdrive/ephyr/ephyr.c index d69e1489b..3989d0d9f 100644 --- a/hw/kdrive/ephyr/ephyr.c +++ b/hw/kdrive/ephyr/ephyr.c @@ -150,11 +150,22 @@ ephyrScreenInitialize (KdScreenInfo *screen, EphyrScrPriv *scrpriv) screen->fb[0].depth = 16; screen->fb[0].bitsPerPixel = 16; } - else + else if (screen->fb[0].depth <= 24) { screen->fb[0].depth = 24; screen->fb[0].bitsPerPixel = 32; } + else if (screen->fb[0].depth <= 30) + { + screen->fb[0].depth = 30; + screen->fb[0].bitsPerPixel = 32; + } + else + { + ErrorF("\nXephyr: Unsupported screen depth %d\n", + screen->fb[0].depth); + return FALSE; + } hostx_get_visual_masks (screen, &redMask, &greenMask, &blueMask); From 6c1accce87c9bd640c1b4bbc49bae7d44b1cc97b Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sun, 4 May 2008 21:51:08 -0700 Subject: [PATCH 30/66] Empty the borderClip of manual redirect windows. (bug 15823) Thanks to Owen Taylor for root-causing this one. If a TreatAsTransparent window has any area in the borderClip, that will be added to the totalClip region for use by other windows. That's wrong. Instead, simply empty the borderClip for TreatAsTransparent windows right up front. --- mi/mivaltree.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mi/mivaltree.c b/mi/mivaltree.c index 74483e354..d9d07caad 100644 --- a/mi/mivaltree.c +++ b/mi/mivaltree.c @@ -255,7 +255,11 @@ miComputeClips ( if (pParent->redirectDraw != RedirectDrawNone) { if (miSetRedirectBorderClipProc) + { + if (TreatAsTransparent (pParent)) + REGION_EMPTY (pScreen, universe); (*miSetRedirectBorderClipProc) (pParent, universe); + } REGION_COPY(pScreen, universe, &pParent->borderSize); } #endif From efa65a0317e12c9ad34fa00fe90bf5eae9fa2670 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sun, 4 May 2008 21:52:58 -0700 Subject: [PATCH 31/66] Rework composite overlay window code to fix several resource management bugs. The composite overlay window code had several misunderstandings of the workings of the X server, in particular error handling paths would often double-free objects. Clean all of this up by using resource destruction as the sole mechanism for freeing resource-based objects. --- composite/Makefile.am | 1 + composite/compext.c | 193 +++++----------------------------------- composite/compinit.c | 13 +-- composite/compint.h | 24 ++++- composite/compoverlay.c | 159 +++++++++++++++++++++++++++++++++ 5 files changed, 206 insertions(+), 184 deletions(-) create mode 100644 composite/compoverlay.c diff --git a/composite/Makefile.am b/composite/Makefile.am index 21504e659..d7bead137 100644 --- a/composite/Makefile.am +++ b/composite/Makefile.am @@ -7,4 +7,5 @@ libcomposite_la_SOURCES = \ compext.c \ compint.h \ compinit.c \ + compoverlay.c \ compwindow.c diff --git a/composite/compext.c b/composite/compext.c index b3433f72b..e720f6ce7 100644 --- a/composite/compext.c +++ b/composite/compext.c @@ -54,10 +54,7 @@ static CARD8 CompositeReqCode; static DevPrivateKey CompositeClientPrivateKey = &CompositeClientPrivateKey; RESTYPE CompositeClientWindowType; RESTYPE CompositeClientSubwindowsType; -static RESTYPE CompositeClientOverlayType; - -static void deleteCompOverlayClient (CompOverlayClientPtr pOcToDel, - ScreenPtr pScreen); +RESTYPE CompositeClientOverlayType; typedef struct _CompositeClient { int major_version; @@ -107,19 +104,8 @@ static int FreeCompositeClientOverlay (pointer value, XID ccwid) { CompOverlayClientPtr pOc = (CompOverlayClientPtr) value; - ScreenPtr pScreen = pOc->pScreen; - CompScreenPtr cs; - - deleteCompOverlayClient(pOc, pScreen); - - /* Unmap overlay window when there are no more clients using it */ - cs = GetCompScreen(pScreen); - if (cs->pOverlayClients == NULL) { - if (cs->pOverlayWin != NULL) { - UnmapWindow(cs->pOverlayWin, FALSE); - } - } + compFreeOverlayClient (pOc); return Success; } @@ -304,137 +290,6 @@ ProcCompositeNameWindowPixmap (ClientPtr client) } -/* - * Routines for manipulating the per-screen overlay clients list. - * This list indicates which clients have called GetOverlayWindow - * for this screen. - */ - -/* Return the screen's overlay client list element for the given client */ -static CompOverlayClientPtr -findCompOverlayClient (ClientPtr pClient, ScreenPtr pScreen) -{ - CompScreenPtr cs = GetCompScreen(pScreen); - CompOverlayClientPtr pOc; - - for (pOc = cs->pOverlayClients; pOc != NULL; pOc = pOc->pNext) { - if (pOc->pClient == pClient) { - return pOc; - } - } - - return NULL; -} - -static int -createCompOverlayClient (ClientPtr pClient, ScreenPtr pScreen) -{ - CompScreenPtr cs = GetCompScreen(pScreen); - CompOverlayClientPtr pOc; - - pOc = (CompOverlayClientPtr) xalloc(sizeof(CompOverlayClientRec)); - if (pOc == NULL) { - return BadAlloc; - } - pOc->pClient = pClient; - pOc->pScreen = pScreen; - pOc->resource = FakeClientID(pClient->index); - pOc->pNext = cs->pOverlayClients; - cs->pOverlayClients = pOc; - - /* - * Create a resource for this element so it can be deleted - * when the client goes away. - */ - if (!AddResource (pOc->resource, CompositeClientOverlayType, - (pointer) pOc)) { - xfree(pOc); - return BadAlloc; - } - - return Success; -} - -/* - * Delete the given overlay client list element from its screen list. - */ -static void -deleteCompOverlayClient (CompOverlayClientPtr pOcToDel, ScreenPtr pScreen) -{ - CompScreenPtr cs = GetCompScreen(pScreen); - CompOverlayClientPtr pOc, pNext; - CompOverlayClientPtr pOcLast = NULL; - - pOc = cs->pOverlayClients; - while (pOc != NULL) { - pNext = pOc->pNext; - if (pOc == pOcToDel) { - xfree(pOc); - if (pOcLast == NULL) { - cs->pOverlayClients = pNext; - } else { - pOcLast->pNext = pNext; - } - break; - } - pOcLast = pOc; - pOc = pNext; - } -} - -/* - * Delete all the hide-counts list elements for this screen. - */ -void -deleteCompOverlayClientsForScreen (ScreenPtr pScreen) -{ - CompScreenPtr cs = GetCompScreen(pScreen); - CompOverlayClientPtr pOc, pTmp; - - pOc = cs->pOverlayClients; - while (pOc != NULL) { - pTmp = pOc->pNext; - FreeResource(pOc->resource, 0); - pOc = pTmp; - } - cs->pOverlayClients = NULL; -} - -/* -** If necessary, create the overlay window. And map it -** Note: I found it excessively difficult to destroy this window -** during compCloseScreen; DeleteWindow can't be called because -** the input devices are already shut down. So we are going to -** just allocate an overlay window once per screen per X server -** invocation. -*/ - -static WindowPtr -createOverlayWindow (ScreenPtr pScreen) -{ - int wid = FakeClientID(0); - WindowPtr pWin; - XID overrideRedirect = TRUE; - int result; - - pWin = CreateWindow ( - wid, WindowTable[pScreen->myNum], - 0, 0, pScreen->width, pScreen->height, 0, - InputOutput, CWOverrideRedirect, &overrideRedirect, - WindowTable[pScreen->myNum]->drawable.depth, - serverClient, pScreen->rootVisual, &result); - if (pWin == NULL) { - return NULL; - } - - if (!AddResource(wid, RT_WINDOW, (pointer)pWin)) { - DeleteWindow(pWin, None); - return NULL; - } - - return pWin; -} - static int ProcCompositeGetOverlayWindow (ClientPtr client) { @@ -456,28 +311,31 @@ ProcCompositeGetOverlayWindow (ClientPtr client) } pScreen = pWin->drawable.pScreen; + /* + * Create an OverlayClient structure to mark this client's + * interest in the overlay window + */ + pOc = compCreateOverlayClient(pScreen, client); + if (pOc == NULL) + return BadAlloc; + + /* + * Make sure the overlay window exists + */ cs = GetCompScreen(pScreen); - if (cs->pOverlayWin == NULL) { - cs->pOverlayWin = createOverlayWindow(pScreen); - if (cs->pOverlayWin == NULL) { + if (cs->pOverlayWin == NULL) + if (!compCreateOverlayWindow(pScreen)) + { + FreeResource (pOc->resource, RT_NONE); return BadAlloc; } - } rc = XaceHook(XACE_RESOURCE_ACCESS, client, cs->pOverlayWin->drawable.id, RT_WINDOW, cs->pOverlayWin, RT_NONE, NULL, DixGetAttrAccess); if (rc != Success) + { + FreeResource (pOc->resource, RT_NONE); return rc; - - MapWindow(cs->pOverlayWin, serverClient); - - /* Record that client is using this overlay window */ - pOc = findCompOverlayClient(client, pScreen); - if (pOc == NULL) { - int ret = createCompOverlayClient(client, pScreen); - if (ret != Success) { - return ret; - } } rep.type = X_Reply; @@ -504,7 +362,6 @@ ProcCompositeReleaseOverlayWindow (ClientPtr client) WindowPtr pWin; ScreenPtr pScreen; CompOverlayClientPtr pOc; - CompScreenPtr cs; REQUEST_SIZE_MATCH(xCompositeReleaseOverlayWindowReq); pWin = (WindowPtr) LookupIDByType (stuff->window, RT_WINDOW); @@ -519,18 +376,12 @@ ProcCompositeReleaseOverlayWindow (ClientPtr client) * Has client queried a reference to the overlay window * on this screen? If not, generate an error. */ - pOc = findCompOverlayClient(client, pWin->drawable.pScreen); - if (pOc == NULL) { + pOc = compFindOverlayClient (pWin->drawable.pScreen, client); + if (pOc == NULL) return BadMatch; - } /* The delete function will free the client structure */ - FreeResource (pOc->resource, 0); - - cs = GetCompScreen(pScreen); - if (cs->pOverlayClients == NULL) { - UnmapWindow(cs->pOverlayWin, FALSE); - } + FreeResource (pOc->resource, RT_NONE); return client->noClientException; } diff --git a/composite/compinit.c b/composite/compinit.c index 49b2044b0..7914a8d25 100644 --- a/composite/compinit.c +++ b/composite/compinit.c @@ -76,14 +76,6 @@ compCloseScreen (int index, ScreenPtr pScreen) pScreen->CopyWindow = cs->CopyWindow; pScreen->PositionWindow = cs->PositionWindow; - deleteCompOverlayClientsForScreen(pScreen); - - /* - ** Note: no need to call DeleteWindow; the server has - ** already destroyed it. - */ - cs->pOverlayWin = NULL; - xfree (cs); dixSetPrivate(&pScreen->devPrivates, CompScreenPrivateKey, NULL); ret = (*pScreen->CloseScreen) (index, pScreen); @@ -122,11 +114,11 @@ compChangeWindowAttributes(WindowPtr pWin, unsigned long mask) if (ret && (mask & CWBackingStore)) { if (pWin->backingStore != NotUseful) { compRedirectWindow(serverClient, pWin, CompositeRedirectAutomatic); - pWin->backStorage = TRUE; + pWin->backStorage = (pointer) (intptr_t) 1; } else { compUnredirectWindow(serverClient, pWin, CompositeRedirectAutomatic); - pWin->backStorage = FALSE; + pWin->backStorage = NULL; } } @@ -380,6 +372,7 @@ compScreenInit (ScreenPtr pScreen) return FALSE; cs->damaged = FALSE; + cs->overlayWid = FakeClientID(0); cs->pOverlayWin = NULL; cs->pOverlayClients = NULL; diff --git a/composite/compint.h b/composite/compint.h index 4b0fe0834..1c19ccd39 100644 --- a/composite/compint.h +++ b/composite/compint.h @@ -155,6 +155,7 @@ typedef struct _CompScreen { VisualID *alternateVisuals; WindowPtr pOverlayWin; + Window overlayWid; CompOverlayClientPtr pOverlayClients; } CompScreenRec, *CompScreenPtr; @@ -172,6 +173,7 @@ extern DevPrivateKey CompSubwindowsPrivateKey; extern RESTYPE CompositeClientWindowType; extern RESTYPE CompositeClientSubwindowsType; +extern RESTYPE CompositeClientOverlayType; /* * compalloc.c @@ -229,6 +231,25 @@ CompositeRegisterAlternateVisuals (ScreenPtr pScreen, Bool compScreenInit (ScreenPtr pScreen); +/* + * compoverlay.c + */ + +void +compFreeOverlayClient (CompOverlayClientPtr pOcToDel); + +CompOverlayClientPtr +compFindOverlayClient (ScreenPtr pScreen, ClientPtr pClient); + +CompOverlayClientPtr +compCreateOverlayClient (ScreenPtr pScreen, ClientPtr pClient); + +Bool +compCreateOverlayWindow (ScreenPtr pScreen); + +void +compDestroyOverlayWindow (ScreenPtr pScreen); + /* * compwindow.c */ @@ -292,9 +313,6 @@ compCopyWindow (WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc); void compWindowUpdate (WindowPtr pWin); -void -deleteCompOverlayClientsForScreen (ScreenPtr pScreen); - WindowPtr CompositeRealChildHead (WindowPtr pWin); diff --git a/composite/compoverlay.c b/composite/compoverlay.c new file mode 100644 index 000000000..94e5b0346 --- /dev/null +++ b/composite/compoverlay.c @@ -0,0 +1,159 @@ +/* + * Copyright © 2006 Sun Microsystems + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Sun Microsystems not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Sun Microsystems makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + * + * Copyright © 2003 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#ifdef HAVE_DIX_CONFIG_H +#include +#endif + +#include "compint.h" +#include "xace.h" + +/* + * Delete the given overlay client list element from its screen list. + */ +void +compFreeOverlayClient (CompOverlayClientPtr pOcToDel) +{ + ScreenPtr pScreen = pOcToDel->pScreen; + CompScreenPtr cs = GetCompScreen (pScreen); + CompOverlayClientPtr *pPrev, pOc; + + for (pPrev = &cs->pOverlayClients; (pOc = *pPrev); pPrev = &pOc->pNext) + { + if (pOc == pOcToDel) { + *pPrev = pOc->pNext; + xfree (pOc); + break; + } + } + + /* Destroy overlay window when there are no more clients using it */ + if (cs->pOverlayClients == NULL) + compDestroyOverlayWindow (pScreen); +} + +/* + * Return the client's first overlay client rec from the given screen + */ +CompOverlayClientPtr +compFindOverlayClient (ScreenPtr pScreen, ClientPtr pClient) +{ + CompScreenPtr cs = GetCompScreen(pScreen); + CompOverlayClientPtr pOc; + + for (pOc = cs->pOverlayClients; pOc != NULL; pOc = pOc->pNext) + if (pOc->pClient == pClient) + return pOc; + + return NULL; +} + +/* + * Create an overlay client object for the given client + */ +CompOverlayClientPtr +compCreateOverlayClient (ScreenPtr pScreen, ClientPtr pClient) +{ + CompScreenPtr cs = GetCompScreen(pScreen); + CompOverlayClientPtr pOc; + + pOc = (CompOverlayClientPtr) xalloc(sizeof(CompOverlayClientRec)); + if (pOc == NULL) + return NULL; + + pOc->pClient = pClient; + pOc->pScreen = pScreen; + pOc->resource = FakeClientID(pClient->index); + pOc->pNext = cs->pOverlayClients; + cs->pOverlayClients = pOc; + + /* + * Create a resource for this element so it can be deleted + * when the client goes away. + */ + if (!AddResource (pOc->resource, CompositeClientOverlayType, (pointer) pOc)) + return NULL; + + return pOc; +} + +/* + * Create the overlay window and map it + */ +Bool +compCreateOverlayWindow (ScreenPtr pScreen) +{ + CompScreenPtr cs = GetCompScreen(pScreen); + WindowPtr pRoot = WindowTable[pScreen->myNum]; + WindowPtr pWin; + XID overrideRedirect = TRUE; + int result; + + pWin = cs->pOverlayWin = + CreateWindow (cs->overlayWid, pRoot, + 0, 0, pScreen->width, pScreen->height, 0, + InputOutput, CWOverrideRedirect, &overrideRedirect, + pRoot->drawable.depth, + serverClient, pScreen->rootVisual, &result); + if (pWin == NULL) + return FALSE; + + if (!AddResource(pWin->drawable.id, RT_WINDOW, (pointer)pWin)) + return FALSE; + + MapWindow(pWin, serverClient); + + return TRUE; +} + +/* + * Destroy the overlay window + */ +void +compDestroyOverlayWindow (ScreenPtr pScreen) +{ + CompScreenPtr cs = GetCompScreen(pScreen); + + cs->pOverlayWin = NullWindow; + FreeResource (cs->overlayWid, RT_NONE); +} + From 6acc2acd0db2826add7c47e94e4061d169a41f88 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Mon, 5 May 2008 15:32:26 -0700 Subject: [PATCH 32/66] Rootless: mi doesn't let us resize root, so we need to do it ourselves... (cherry picked from commit c1ec36e28cff857664090cc8792db1ae93b783fa) --- miext/rootless/rootlessWindow.c | 67 ++++++++++++++++++++++----------- 1 file changed, 44 insertions(+), 23 deletions(-) diff --git a/miext/rootless/rootlessWindow.c b/miext/rootless/rootlessWindow.c index df1d3a879..0edafe7ea 100644 --- a/miext/rootless/rootlessWindow.c +++ b/miext/rootless/rootlessWindow.c @@ -1338,34 +1338,55 @@ RootlessResizeWindow(WindowPtr pWin, int x, int y, RegionRec saveRoot; RL_DEBUG_MSG("resizewindow start (win 0x%x) ", pWin); + + if(pWin->parent) { + if (winRec) { + oldBW = winRec->borderWidth; + oldX = winRec->x; + oldY = winRec->y; + oldW = winRec->width; + oldH = winRec->height; - if (winRec) { - oldBW = winRec->borderWidth; - oldX = winRec->x; - oldY = winRec->y; - oldW = winRec->width; - oldH = winRec->height; + newBW = oldBW; + newX = x; + newY = y; + newW = w + 2*newBW; + newH = h + 2*newBW; - newBW = oldBW; - newX = x; - newY = y; - newW = w + 2*newBW; - newH = h + 2*newBW; + resize_after = StartFrameResize(pWin, TRUE, + oldX, oldY, oldW, oldH, oldBW, + newX, newY, newW, newH, newBW); + } - resize_after = StartFrameResize(pWin, TRUE, - oldX, oldY, oldW, oldH, oldBW, - newX, newY, newW, newH, newBW); - } + HUGE_ROOT(pWin); + SCREEN_UNWRAP(pScreen, ResizeWindow); + pScreen->ResizeWindow(pWin, x, y, w, h, pSib); + SCREEN_WRAP(pScreen, ResizeWindow); + NORMAL_ROOT(pWin); - HUGE_ROOT(pWin); - SCREEN_UNWRAP(pScreen, ResizeWindow); - pScreen->ResizeWindow(pWin, x, y, w, h, pSib); - SCREEN_WRAP(pScreen, ResizeWindow); - NORMAL_ROOT(pWin); + if (winRec) { + FinishFrameResize(pWin, TRUE, oldX, oldY, oldW, oldH, oldBW, + newX, newY, newW, newH, newBW, resize_after); + } + } else { + /* Special case for resizing the root window */ + BoxRec box; - if (winRec) { - FinishFrameResize(pWin, TRUE, oldX, oldY, oldW, oldH, oldBW, - newX, newY, newW, newH, newBW, resize_after); + pWin->drawable.x = x; + pWin->drawable.y = y; + pWin->drawable.width = w; + pWin->drawable.height = h; + + box.x1 = x; box.y1 = y; + box.x2 = x + w; box.y2 = y + h; + REGION_UNINIT(pScreen, &pWin->winSize); + REGION_INIT(pScreen, &pWin->winSize, &box, 1); + REGION_COPY(pScreen, &pWin->borderSize, &pWin->winSize); + REGION_COPY(pScreen, &pWin->clipList, &pWin->winSize); + REGION_COPY(pScreen, &pWin->borderClip, &pWin->winSize); + + miSendExposures(pWin, &pWin->borderClip, + pWin->drawable.x, pWin->drawable.y); } RL_DEBUG_MSG("resizewindow end\n"); From e4ebfed1785597b48b68e1bbdde3e5c4061b749f Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Tue, 6 May 2008 16:46:37 +1000 Subject: [PATCH 33/66] xf86edid: fix typo in debug output --- hw/xfree86/modes/xf86EdidModes.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/xfree86/modes/xf86EdidModes.c b/hw/xfree86/modes/xf86EdidModes.c index 09d00393e..057b93d7b 100644 --- a/hw/xfree86/modes/xf86EdidModes.c +++ b/hw/xfree86/modes/xf86EdidModes.c @@ -363,7 +363,7 @@ DDCModeFromDetailedTiming(int scrnIndex, struct detailed_timings *timing, /* We only do seperate sync currently */ if (timing->sync != 0x03) { xf86DrvMsg(scrnIndex, X_INFO, - "%s: %dx%d Warning: We only handle seperate" + "%s: %dx%d Warning: We only handle separate" " sync.\n", __func__, timing->h_active, timing->v_active); } From d41d677ab4118e73140ea2392e0d48eb361af1cf Mon Sep 17 00:00:00 2001 From: Ben Byer Date: Mon, 5 May 2008 20:55:08 -0700 Subject: [PATCH 34/66] Xquartz: experimental embedding of Sparkle.framework (cherry picked from commit b7a1a640cef8c69442859cbf89034ad362a19684) --- .../English.lproj/main.nib/designable.nib | 79 ++++++++------ .../English.lproj/main.nib/keyedobjects.nib | Bin 37918 -> 38309 bytes hw/xquartz/bundle/Sparkle.framework/Headers | 1 + hw/xquartz/bundle/Sparkle.framework/Resources | 1 + hw/xquartz/bundle/Sparkle.framework/Sparkle | 1 + .../A/Headers/NSApplication+AppCopies.h | 13 +++ .../A/Headers/NSFileManager+Authentication.h | 11 ++ .../A/Headers/NSFileManager+Verification.h | 15 +++ .../Versions/A/Headers/NSString+extras.h | 61 +++++++++++ .../Versions/A/Headers/RSS.h | 98 ++++++++++++++++++ .../Versions/A/Headers/SUAppcast.h | 27 +++++ .../Versions/A/Headers/SUAppcastItem.h | 57 ++++++++++ .../A/Headers/SUAutomaticUpdateAlert.h | 21 ++++ .../Versions/A/Headers/SUConstants.h | 20 ++++ .../Versions/A/Headers/SUStatusChecker.h | 26 +++++ .../Versions/A/Headers/SUStatusController.h | 33 ++++++ .../Versions/A/Headers/SUUnarchiver.h | 25 +++++ .../Versions/A/Headers/SUUpdateAlert.h | 40 +++++++ .../Versions/A/Headers/SUUpdater.h | 55 ++++++++++ .../Versions/A/Headers/SUUtilities.h | 20 ++++ .../Versions/A/Headers/Sparkle.h | 22 ++++ .../Versions/A/Resources/Info.plist | 22 ++++ .../A/Resources/SUStatus.nib/classes.nib | 12 +++ .../A/Resources/SUStatus.nib/info.nib | 16 +++ .../A/Resources/SUStatus.nib/keyedobjects.nib | Bin 0 -> 6873 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 +++ .../SUAutomaticUpdateAlert.nib/info.nib | 12 +++ .../keyedobjects.nib | Bin 0 -> 6589 bytes .../ca.lproj/SUUpdateAlert.nib/classes.nib | 21 ++++ .../ca.lproj/SUUpdateAlert.nib/info.nib | 16 +++ .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10881 bytes .../A/Resources/ca.lproj/Sparkle.strings | Bin 0 -> 7138 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 +++ .../SUAutomaticUpdateAlert.nib/info.nib | 12 +++ .../keyedobjects.nib | Bin 0 -> 6559 bytes .../cs.lproj/SUUpdateAlert.nib/classes.nib | 21 ++++ .../cs.lproj/SUUpdateAlert.nib/info.nib | 16 +++ .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10744 bytes .../A/Resources/cs.lproj/Sparkle.strings | Bin 0 -> 6978 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 +++ .../SUAutomaticUpdateAlert.nib/info.nib | 12 +++ .../keyedobjects.nib | Bin 0 -> 6380 bytes .../cy.lproj/SUUpdateAlert.nib/classes.nib | 21 ++++ .../cy.lproj/SUUpdateAlert.nib/info.nib | 16 +++ .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10691 bytes .../A/Resources/cy.lproj/Sparkle.strings | Bin 0 -> 6910 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 +++ .../SUAutomaticUpdateAlert.nib/info.nib | 12 +++ .../keyedobjects.nib | Bin 0 -> 6438 bytes .../da.lproj/SUUpdateAlert.nib/classes.nib | 21 ++++ .../da.lproj/SUUpdateAlert.nib/info.nib | 16 +++ .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10841 bytes .../A/Resources/da.lproj/Sparkle.strings | Bin 0 -> 6944 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 +++ .../SUAutomaticUpdateAlert.nib/info.nib | 12 +++ .../keyedobjects.nib | Bin 0 -> 6406 bytes .../de.lproj/SUUpdateAlert.nib/classes.nib | 21 ++++ .../de.lproj/SUUpdateAlert.nib/info.nib | 16 +++ .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10689 bytes .../A/Resources/de.lproj/Sparkle.strings | Bin 0 -> 6938 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 +++ .../SUAutomaticUpdateAlert.nib/info.nib | 16 +++ .../keyedobjects.nib | Bin 0 -> 6571 bytes .../en.lproj/SUUpdateAlert.nib/classes.nib | 21 ++++ .../en.lproj/SUUpdateAlert.nib/info.nib | 16 +++ .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10634 bytes .../A/Resources/en.lproj/Sparkle.strings | Bin 0 -> 6908 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 +++ .../SUAutomaticUpdateAlert.nib/info.nib | 12 +++ .../keyedobjects.nib | Bin 0 -> 6380 bytes .../es.lproj/SUUpdateAlert.nib/classes.nib | 21 ++++ .../es.lproj/SUUpdateAlert.nib/info.nib | 16 +++ .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10634 bytes .../A/Resources/es.lproj/Sparkle.strings | Bin 0 -> 6910 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 +++ .../SUAutomaticUpdateAlert.nib/info.nib | 12 +++ .../keyedobjects.nib | Bin 0 -> 6583 bytes .../fi.lproj/SUUpdateAlert.nib/classes.nib | 21 ++++ .../fi.lproj/SUUpdateAlert.nib/info.nib | 16 +++ .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10787 bytes .../A/Resources/fi.lproj/Sparkle.strings | Bin 0 -> 6954 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 +++ .../SUAutomaticUpdateAlert.nib/info.nib | 12 +++ .../keyedobjects.nib | Bin 0 -> 6548 bytes .../fr.lproj/SUUpdateAlert.nib/classes.nib | 21 ++++ .../fr.lproj/SUUpdateAlert.nib/info.nib | 16 +++ .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10882 bytes .../A/Resources/fr.lproj/Sparkle.strings | Bin 0 -> 7344 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 +++ .../SUAutomaticUpdateAlert.nib/info.nib | 12 +++ .../keyedobjects.nib | Bin 0 -> 6498 bytes .../he.lproj/SUUpdateAlert.nib/classes.nib | 21 ++++ .../he.lproj/SUUpdateAlert.nib/info.nib | 16 +++ .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10712 bytes .../A/Resources/he.lproj/Sparkle.strings | Bin 0 -> 6212 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 +++ .../SUAutomaticUpdateAlert.nib/info.nib | 12 +++ .../keyedobjects.nib | Bin 0 -> 6380 bytes .../hu.lproj/SUUpdateAlert.nib/classes.nib | 21 ++++ .../hu.lproj/SUUpdateAlert.nib/info.nib | 16 +++ .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10634 bytes .../A/Resources/hu.lproj/Sparkle.strings | Bin 0 -> 6910 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 +++ .../SUAutomaticUpdateAlert.nib/info.nib | 12 +++ .../keyedobjects.nib | Bin 0 -> 6380 bytes .../id.lproj/SUUpdateAlert.nib/classes.nib | 21 ++++ .../id.lproj/SUUpdateAlert.nib/info.nib | 16 +++ .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10634 bytes .../A/Resources/id.lproj/Sparkle.strings | Bin 0 -> 6910 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 +++ .../SUAutomaticUpdateAlert.nib/info.nib | 12 +++ .../keyedobjects.nib | Bin 0 -> 6380 bytes .../is.lproj/SUUpdateAlert.nib/classes.nib | 21 ++++ .../is.lproj/SUUpdateAlert.nib/info.nib | 16 +++ .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10634 bytes .../A/Resources/is.lproj/Sparkle.strings | Bin 0 -> 6942 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 +++ .../SUAutomaticUpdateAlert.nib/info.nib | 12 +++ .../keyedobjects.nib | Bin 0 -> 6415 bytes .../it.lproj/SUUpdateAlert.nib/classes.nib | 21 ++++ .../it.lproj/SUUpdateAlert.nib/info.nib | 16 +++ .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10700 bytes .../A/Resources/it.lproj/Sparkle.strings | Bin 0 -> 7170 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 +++ .../SUAutomaticUpdateAlert.nib/info.nib | 12 +++ .../keyedobjects.nib | Bin 0 -> 6450 bytes .../ja.lproj/SUUpdateAlert.nib/classes.nib | 21 ++++ .../ja.lproj/SUUpdateAlert.nib/info.nib | 16 +++ .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10724 bytes .../A/Resources/ja.lproj/Sparkle.strings | Bin 0 -> 5994 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 +++ .../SUAutomaticUpdateAlert.nib/info.nib | 12 +++ .../keyedobjects.nib | Bin 0 -> 6380 bytes .../ko.lproj/SUUpdateAlert.nib/classes.nib | 21 ++++ .../ko.lproj/SUUpdateAlert.nib/info.nib | 16 +++ .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10634 bytes .../A/Resources/ko.lproj/Sparkle.strings | Bin 0 -> 6910 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 +++ .../SUAutomaticUpdateAlert.nib/info.nib | 12 +++ .../keyedobjects.nib | Bin 0 -> 6380 bytes .../nl.lproj/SUUpdateAlert.nib/classes.nib | 21 ++++ .../nl.lproj/SUUpdateAlert.nib/info.nib | 16 +++ .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10634 bytes .../A/Resources/nl.lproj/Sparkle.strings | Bin 0 -> 6910 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 +++ .../SUAutomaticUpdateAlert.nib/info.nib | 12 +++ .../keyedobjects.nib | Bin 0 -> 6380 bytes .../no.lproj/SUUpdateAlert.nib/classes.nib | 21 ++++ .../no.lproj/SUUpdateAlert.nib/info.nib | 16 +++ .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10634 bytes .../A/Resources/no.lproj/Sparkle.strings | Bin 0 -> 7056 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 +++ .../SUAutomaticUpdateAlert.nib/info.nib | 12 +++ .../keyedobjects.nib | Bin 0 -> 6565 bytes .../pl.lproj/SUUpdateAlert.nib/classes.nib | 21 ++++ .../pl.lproj/SUUpdateAlert.nib/info.nib | 16 +++ .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10720 bytes .../A/Resources/pl.lproj/Sparkle.strings | Bin 0 -> 7076 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 +++ .../SUAutomaticUpdateAlert.nib/info.nib | 12 +++ .../keyedobjects.nib | Bin 0 -> 6380 bytes .../ru.lproj/SUUpdateAlert.nib/classes.nib | 21 ++++ .../ru.lproj/SUUpdateAlert.nib/info.nib | 16 +++ .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10634 bytes .../A/Resources/ru.lproj/Sparkle.strings | Bin 0 -> 6922 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 +++ .../SUAutomaticUpdateAlert.nib/info.nib | 12 +++ .../keyedobjects.nib | Bin 0 -> 6574 bytes .../sk.lproj/SUUpdateAlert.nib/classes.nib | 21 ++++ .../sk.lproj/SUUpdateAlert.nib/info.nib | 16 +++ .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10776 bytes .../A/Resources/sk.lproj/Sparkle.strings | Bin 0 -> 6902 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 +++ .../SUAutomaticUpdateAlert.nib/info.nib | 12 +++ .../keyedobjects.nib | Bin 0 -> 6380 bytes .../sv.lproj/SUUpdateAlert.nib/classes.nib | 21 ++++ .../sv.lproj/SUUpdateAlert.nib/info.nib | 16 +++ .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10634 bytes .../A/Resources/sv.lproj/Sparkle.strings | Bin 0 -> 6912 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 +++ .../SUAutomaticUpdateAlert.nib/info.nib | 12 +++ .../keyedobjects.nib | Bin 0 -> 6380 bytes .../th.lproj/SUUpdateAlert.nib/classes.nib | 21 ++++ .../th.lproj/SUUpdateAlert.nib/info.nib | 16 +++ .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10691 bytes .../A/Resources/th.lproj/Sparkle.strings | Bin 0 -> 6910 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 +++ .../SUAutomaticUpdateAlert.nib/info.nib | 12 +++ .../keyedobjects.nib | Bin 0 -> 6568 bytes .../tr.lproj/SUUpdateAlert.nib/classes.nib | 21 ++++ .../tr.lproj/SUUpdateAlert.nib/info.nib | 16 +++ .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10773 bytes .../A/Resources/tr.lproj/Sparkle.strings | Bin 0 -> 6936 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 +++ .../SUAutomaticUpdateAlert.nib/info.nib | 12 +++ .../keyedobjects.nib | Bin 0 -> 6346 bytes .../zh_CN.lproj/SUUpdateAlert.nib/classes.nib | 21 ++++ .../zh_CN.lproj/SUUpdateAlert.nib/info.nib | 16 +++ .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10489 bytes .../A/Resources/zh_CN.lproj/Sparkle.strings | Bin 0 -> 5536 bytes .../SUAutomaticUpdateAlert.nib/classes.nib | 12 +++ .../SUAutomaticUpdateAlert.nib/info.nib | 12 +++ .../keyedobjects.nib | Bin 0 -> 6380 bytes .../zh_TW.lproj/SUUpdateAlert.nib/classes.nib | 21 ++++ .../zh_TW.lproj/SUUpdateAlert.nib/info.nib | 16 +++ .../SUUpdateAlert.nib/keyedobjects.nib | Bin 0 -> 10742 bytes .../A/Resources/zh_TW.lproj/Sparkle.strings | Bin 0 -> 8562 bytes .../Sparkle.framework/Versions/A/Sparkle | Bin 0 -> 197376 bytes .../bundle/Sparkle.framework/Versions/Current | 1 + .../bundle/X11.xcodeproj/project.pbxproj | 35 ++++++- 210 files changed, 2269 insertions(+), 33 deletions(-) create mode 120000 hw/xquartz/bundle/Sparkle.framework/Headers create mode 120000 hw/xquartz/bundle/Sparkle.framework/Resources create mode 120000 hw/xquartz/bundle/Sparkle.framework/Sparkle create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/NSApplication+AppCopies.h create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/NSFileManager+Authentication.h create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/NSFileManager+Verification.h create mode 100755 hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/NSString+extras.h create mode 100755 hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/RSS.h create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUAppcast.h create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUAutomaticUpdateAlert.h create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUConstants.h create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUStatusChecker.h create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUStatusController.h create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUUnarchiver.h create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUUpdateAlert.h create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUUpdater.h create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUUtilities.h create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/Sparkle.h create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/Info.plist create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/SUStatus.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/SUStatus.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/SUStatus.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ca.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ca.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ca.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ca.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ca.lproj/SUUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ca.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ca.lproj/Sparkle.strings create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/cy.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/cy.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/cy.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/cy.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/cy.lproj/SUUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/cy.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/cy.lproj/Sparkle.strings create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/da.lproj/Sparkle.strings create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fi.lproj/Sparkle.strings create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/he.lproj/Sparkle.strings create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/hu.lproj/Sparkle.strings create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/id.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/id.lproj/SUUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/id.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/id.lproj/Sparkle.strings create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/is.lproj/Sparkle.strings create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ja.lproj/Sparkle.strings create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ko.lproj/Sparkle.strings create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/no.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/no.lproj/SUUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/no.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/no.lproj/Sparkle.strings create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/pl.lproj/Sparkle.strings create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/sk.lproj/Sparkle.strings create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/th.lproj/Sparkle.strings create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/tr.lproj/Sparkle.strings create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/Sparkle.strings create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib/classes.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib/info.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib/keyedobjects.nib create mode 100644 hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/Sparkle.strings create mode 100755 hw/xquartz/bundle/Sparkle.framework/Versions/A/Sparkle create mode 120000 hw/xquartz/bundle/Sparkle.framework/Versions/Current diff --git a/hw/xquartz/bundle/English.lproj/main.nib/designable.nib b/hw/xquartz/bundle/English.lproj/main.nib/designable.nib index c159d6ee1..c93d02372 100644 --- a/hw/xquartz/bundle/English.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/English.lproj/main.nib/designable.nib @@ -66,6 +66,14 @@ + + + Check for updates... + + 2147483647 + + + YES @@ -1500,6 +1508,9 @@ d2hpY2ggbWF5IHByZXZlbnQgWDExIGFwcGxpY2F0aW9ucyBmcm9tIGxhdW5jaGluZy4 + + SUUpdater + @@ -2000,6 +2011,14 @@ d2hpY2ggbWF5IHByZXZlbnQgWDExIGFwcGxpY2F0aW9ucyBmcm9tIGxhdW5jaGluZy4 300394 + + + checkForUpdates: + + + + 300397 + @@ -2136,6 +2155,7 @@ d2hpY2ggbWF5IHByZXZlbnQgWDExIGFwcGxpY2F0aW9ucyBmcm9tIGxhdW5jaGluZy4 + @@ -3050,6 +3070,17 @@ d2hpY2ggbWF5IHByZXZlbnQgWDExIGFwcGxpY2F0aW9ucyBmcm9tIGxhdW5jaGluZy4 + + 300395 + + + Updater + + + 300396 + + + @@ -3121,7 +3152,6 @@ d2hpY2ggbWF5IHByZXZlbnQgWDExIGFwcGxpY2F0aW9ucyBmcm9tIGxhdW5jaGluZy4 244.IBWindowTemplateEditedContentRect 244.ImportedFromIB2 244.editorWindowContentRectSynchronizationRect - 244.lastResizeAction 244.windowTemplate.hasMaxSize 244.windowTemplate.hasMinSize 244.windowTemplate.maxSize @@ -3142,7 +3172,6 @@ d2hpY2ggbWF5IHByZXZlbnQgWDExIGFwcGxpY2F0aW9ucyBmcm9tIGxhdW5jaGluZy4 285.IBWindowTemplateEditedContentRect 285.ImportedFromIB2 285.editorWindowContentRectSynchronizationRect - 285.lastResizeAction 285.windowTemplate.hasMaxSize 285.windowTemplate.hasMinSize 285.windowTemplate.maxSize @@ -3188,6 +3217,8 @@ d2hpY2ggbWF5IHByZXZlbnQgWDExIGFwcGxpY2F0aW9ucyBmcm9tIGxhdW5jaGluZy4 300368.ImportedFromIB2 300370.IBPluginDependency 300370.ImportedFromIB2 + 300395.IBPluginDependency + 300396.IBPluginDependency 305.IBPluginDependency 305.ImportedFromIB2 310.IBPluginDependency @@ -3368,19 +3399,6 @@ d2hpY2ggbWF5IHByZXZlbnQgWDExIGFwcGxpY2F0aW9ucyBmcm9tIGxhdW5jaGluZy4 {{313, 353}, {484, 280}} {{184, 290}, {481, 345}} - - YES - - YES - IBResizeActionFinalFrame - IBResizeActionInitialFrame - - - YES - {{182, 481}, {484, 280}} - {{182, 103}, {536, 658}} - - {3.40282e+38, 3.40282e+38} @@ -3401,19 +3419,6 @@ d2hpY2ggbWF5IHByZXZlbnQgWDExIGFwcGxpY2F0aW9ucyBmcm9tIGxhdW5jaGluZy4 {{407, 545}, {454, 311}} {{433, 406}, {486, 327}} - - YES - - YES - IBResizeActionFinalFrame - IBResizeActionInitialFrame - - - YES - {{537, 554}, {454, 311}} - {{537, 576}, {471, 289}} - - {3.40282e+38, 3.40282e+38} @@ -3460,6 +3465,8 @@ d2hpY2ggbWF5IHByZXZlbnQgWDExIGFwcGxpY2F0aW9ucyBmcm9tIGxhdW5jaGluZy4 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3593,7 +3600,7 @@ d2hpY2ggbWF5IHByZXZlbnQgWDExIGFwcGxpY2F0aW9ucyBmcm9tIGxhdW5jaGluZy4 - 300394 + 300397 @@ -3623,6 +3630,18 @@ d2hpY2ggbWF5IHByZXZlbnQgWDExIGFwcGxpY2F0aW9ucyBmcm9tIGxhdW5jaGluZy4 YES + + SUUpdater + NSObject + + checkForUpdates: + id + + + IBDocumentRelativeSource + ../Sparkle.framework/Versions/A/Headers/SUUpdater.h + + X11Controller NSObject @@ -3728,7 +3747,7 @@ d2hpY2ggbWF5IHByZXZlbnQgWDExIGFwcGxpY2F0aW9ucyBmcm9tIGxhdW5jaGluZy4 0 - + ../X11.xcodeproj 3 diff --git a/hw/xquartz/bundle/English.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/English.lproj/main.nib/keyedobjects.nib index 95420e4f77d13556c624c3232b9c713cb056a537..066fdbe9eb259c9a99037890359e0707d073b5a7 100644 GIT binary patch literal 38309 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 I=FkTJ2f!?eUH||9 diff --git a/hw/xquartz/bundle/Sparkle.framework/Headers b/hw/xquartz/bundle/Sparkle.framework/Headers new file mode 120000 index 000000000..a177d2a6b --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Headers @@ -0,0 +1 @@ +Versions/Current/Headers \ No newline at end of file diff --git a/hw/xquartz/bundle/Sparkle.framework/Resources b/hw/xquartz/bundle/Sparkle.framework/Resources new file mode 120000 index 000000000..953ee36f3 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Resources @@ -0,0 +1 @@ +Versions/Current/Resources \ No newline at end of file diff --git a/hw/xquartz/bundle/Sparkle.framework/Sparkle b/hw/xquartz/bundle/Sparkle.framework/Sparkle new file mode 120000 index 000000000..b2c52731e --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Sparkle @@ -0,0 +1 @@ +Versions/Current/Sparkle \ No newline at end of file diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/NSApplication+AppCopies.h b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/NSApplication+AppCopies.h new file mode 100644 index 000000000..ee901e685 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/NSApplication+AppCopies.h @@ -0,0 +1,13 @@ +// +// NSApplication+AppCopies.h +// Sparkle +// +// Created by Andy Matuschak on 3/16/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import + +@interface NSApplication (SUAppCopies) +- (int)copiesRunning; +@end diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/NSFileManager+Authentication.h b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/NSFileManager+Authentication.h new file mode 100644 index 000000000..c995911ca --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/NSFileManager+Authentication.h @@ -0,0 +1,11 @@ +// +// NSFileManager+Authentication.m +// Sparkle +// +// Created by Andy Matuschak on 3/9/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +@interface NSFileManager (SUAuthenticationAdditions) +- (BOOL)movePathWithAuthentication:(NSString *)src toPath:(NSString *)dst; +@end diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/NSFileManager+Verification.h b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/NSFileManager+Verification.h new file mode 100644 index 000000000..f0ce7c20c --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/NSFileManager+Verification.h @@ -0,0 +1,15 @@ +// +// NSFileManager+Verification.h +// Sparkle +// +// Created by Andy Matuschak on 3/16/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import + +// For the paranoid folks! +@interface NSFileManager (SUVerification) +- (BOOL)validatePath:(NSString *)path withMD5Hash:(NSString *)hash; +- (BOOL)validatePath:(NSString *)path withEncodedDSASignature:(NSString *)encodedSignature; +@end diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/NSString+extras.h b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/NSString+extras.h new file mode 100755 index 000000000..498e4d01c --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/NSString+extras.h @@ -0,0 +1,61 @@ +/* + +BSD License + +Copyright (c) 2002, Brent Simmons +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* Neither the name of ranchero.com or Brent Simmons nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +*/ + + +/* + NSString+extras.h + NetNewsWire + + Created by Brent Simmons on Fri Jun 14 2002. + Copyright (c) 2002 Brent Simmons. All rights reserved. +*/ + + +#import +#import + + +@interface NSString (extras) + +- (NSString *)stringWithSubstitute:(NSString *)subs forCharactersFromSet:(NSCharacterSet *)set; + +- (NSString *) trimWhiteSpace; + +- (NSString *) stripHTML; + +- (NSString *) ellipsizeAfterNWords: (int) n; + ++ (BOOL) stringIsEmpty: (NSString *) s; + + +@end diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/RSS.h b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/RSS.h new file mode 100755 index 000000000..82da04a44 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/RSS.h @@ -0,0 +1,98 @@ +/* + +BSD License + +Copyright (c) 2002, Brent Simmons +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* Neither the name of ranchero.com or Brent Simmons nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +*/ + +/* + RSS.h + A class for reading RSS feeds. + + Created by Brent Simmons on Wed Apr 17 2002. + Copyright (c) 2002 Brent Simmons. All rights reserved. +*/ + + +#import +#import +#import "NSString+extras.h" + + +@interface RSS : NSObject { + + NSDictionary *headerItems; + NSMutableArray *newsItems; + NSString *version; + + BOOL flRdf; + BOOL normalize; + } + + +/*Public*/ + +- (RSS *) initWithTitle: (NSString *) title andDescription: (NSString *) description; + +- (RSS *) initWithData: (NSData *) rssData normalize: (BOOL) fl; + +- (RSS *) initWithURL: (NSURL *) url normalize: (BOOL) fl; +- (RSS *) initWithURL: (NSURL *) url normalize: (BOOL) fl userAgent:(NSString *)userAgent; + +- (NSDictionary *) headerItems; + +- (NSMutableArray *) newsItems; + +- (NSString *) version; + +// AMM's extensions for Sparkle +- (NSDictionary *)newestItem; + + +/*Private*/ + +- (void) createheaderdictionary: (CFXMLTreeRef) tree; + +- (void) createitemsarray: (CFXMLTreeRef) tree; + +- (void) setversionstring: (CFXMLTreeRef) tree; + +- (void) flattenimagechildren: (CFXMLTreeRef) tree into: (NSMutableDictionary *) dictionary; + +- (void) flattensourceattributes: (CFXMLNodeRef) node into: (NSMutableDictionary *) dictionary; + +- (CFXMLTreeRef) getchanneltree: (CFXMLTreeRef) tree; + +- (CFXMLTreeRef) getnamedtree: (CFXMLTreeRef) currentTree name: (NSString *) name; + +- (void) normalizeRSSItem: (NSMutableDictionary *) rssItem; + +- (NSString *) getelementvalue: (CFXMLTreeRef) tree; + +@end diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUAppcast.h b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUAppcast.h new file mode 100644 index 000000000..209fe2061 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUAppcast.h @@ -0,0 +1,27 @@ +// +// SUAppcast.h +// Sparkle +// +// Created by Andy Matuschak on 3/12/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import + +@class RSS, SUAppcastItem; +@interface SUAppcast : NSObject { + NSArray *items; + id delegate; +} + +- (void)fetchAppcastFromURL:(NSURL *)url; +- (void)setDelegate:delegate; + +- (SUAppcastItem *)newestItem; +- (NSArray *)items; + +@end + +@interface NSObject (SUAppcastDelegate) +- appcastDidFinishLoading:(SUAppcast *)appcast; +@end \ No newline at end of file diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h new file mode 100644 index 000000000..c0202e3d9 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h @@ -0,0 +1,57 @@ +// +// SUAppcastItem.h +// Sparkle +// +// Created by Andy Matuschak on 3/12/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import + + +@interface SUAppcastItem : NSObject { + NSString *title; + NSDate *date; + NSString *description; + + NSURL *releaseNotesURL; + + NSString *DSASignature; + NSString *MD5Sum; + + NSURL *fileURL; + NSString *fileVersion; + NSString *versionString; +} + +// Initializes with data from a dictionary provided by the RSS class. +- initWithDictionary:(NSDictionary *)dict; + +- (NSString *)title; +- (void)setTitle:(NSString *)aTitle; + +- (NSDate *)date; +- (void)setDate:(NSDate *)aDate; + +- (NSString *)description; +- (void)setDescription:(NSString *)aDescription; + +- (NSURL *)releaseNotesURL; +- (void)setReleaseNotesURL:(NSURL *)aReleaseNotesURL; + +- (NSString *)DSASignature; +- (void)setDSASignature:(NSString *)aDSASignature; + +- (NSString *)MD5Sum; +- (void)setMD5Sum:(NSString *)aMd5Sum; + +- (NSURL *)fileURL; +- (void)setFileURL:(NSURL *)aFileURL; + +- (NSString *)fileVersion; +- (void)setFileVersion:(NSString *)aFileVersion; + +- (NSString *)versionString; +- (void)setVersionString:(NSString *)versionString; + +@end diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUAutomaticUpdateAlert.h b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUAutomaticUpdateAlert.h new file mode 100644 index 000000000..fc0ac9fd0 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUAutomaticUpdateAlert.h @@ -0,0 +1,21 @@ +// +// SUAutomaticUpdateAlert.h +// Sparkle +// +// Created by Andy Matuschak on 3/18/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import + +@class SUAppcastItem; +@interface SUAutomaticUpdateAlert : NSWindowController { + SUAppcastItem *updateItem; +} + +- initWithAppcastItem:(SUAppcastItem *)item; + +- (IBAction)relaunchNow:sender; +- (IBAction)relaunchLater:sender; + +@end diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUConstants.h b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUConstants.h new file mode 100644 index 000000000..bfbe625bb --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUConstants.h @@ -0,0 +1,20 @@ +// +// SUConstants.h +// Sparkle +// +// Created by Andy Matuschak on 3/16/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +extern NSString *SUUpdaterWillRestartNotification; + +extern NSString *SUCheckAtStartupKey; +extern NSString *SUFeedURLKey; +extern NSString *SUShowReleaseNotesKey; +extern NSString *SUSkippedVersionKey; +extern NSString *SUScheduledCheckIntervalKey; +extern NSString *SULastCheckTimeKey; +extern NSString *SUExpectsDSASignatureKey; +extern NSString *SUPublicDSAKeyKey; +extern NSString *SUAutomaticallyUpdateKey; +extern NSString *SUAllowsAutomaticUpdatesKey; \ No newline at end of file diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUStatusChecker.h b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUStatusChecker.h new file mode 100644 index 000000000..e83d15206 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUStatusChecker.h @@ -0,0 +1,26 @@ +// +// SUStatusChecker.h +// Sparkle +// +// Created by Evan Schoenberg on 7/6/06. +// + +#import +#import + +@class SUStatusChecker; + +@protocol SUStatusCheckerDelegate +//versionString will be nil and isNewVersion will be NO if version checking fails. +- (void)statusChecker:(SUStatusChecker *)statusChecker foundVersion:(NSString *)versionString isNewVersion:(BOOL)isNewVersion; +@end + +@interface SUStatusChecker : SUUpdater { + id scDelegate; +} + +// Create a status checker which will notifiy delegate once the appcast version is determined. +// Notification occurs via the method defined in the SUStatusCheckerDelegate informal protocol. ++ (SUStatusChecker *)statusCheckerForDelegate:(id)delegate; + +@end diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUStatusController.h b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUStatusController.h new file mode 100644 index 000000000..19a3f89ec --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUStatusController.h @@ -0,0 +1,33 @@ +// +// SUStatusController.h +// Sparkle +// +// Created by Andy Matuschak on 3/14/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import + + +@interface SUStatusController : NSWindowController { + double progressValue, maxProgressValue; + NSString *title, *statusText, *buttonTitle; + IBOutlet NSButton *actionButton; +} + +// Pass 0 for the max progress value to get an indeterminate progress bar. +// Pass nil for the status text to not show it. +- (void)beginActionWithTitle:(NSString *)title maxProgressValue:(double)maxProgressValue statusText:(NSString *)statusText; + +// If isDefault is YES, the button's key equivalent will be \r. +- (void)setButtonTitle:(NSString *)buttonTitle target:target action:(SEL)action isDefault:(BOOL)isDefault; +- (void)setButtonEnabled:(BOOL)enabled; + +- (double)progressValue; +- (void)setProgressValue:(double)value; +- (double)maxProgressValue; +- (void)setMaxProgressValue:(double)value; + +- (void)setStatusText:(NSString *)statusText; + +@end diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUUnarchiver.h b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUUnarchiver.h new file mode 100644 index 000000000..da111c158 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUUnarchiver.h @@ -0,0 +1,25 @@ +// +// SUUnarchiver.h +// Sparkle +// +// Created by Andy Matuschak on 3/16/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import + + +@interface SUUnarchiver : NSObject { + id delegate; +} + +- (void)unarchivePath:(NSString *)path; +- (void)setDelegate:delegate; + +@end + +@interface NSObject (SUUnarchiverDelegate) +- (void)unarchiver:(SUUnarchiver *)unarchiver extractedLength:(long)length; +- (void)unarchiverDidFinish:(SUUnarchiver *)unarchiver; +- (void)unarchiverDidFail:(SUUnarchiver *)unarchiver; +@end \ No newline at end of file diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUUpdateAlert.h b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUUpdateAlert.h new file mode 100644 index 000000000..69c281749 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUUpdateAlert.h @@ -0,0 +1,40 @@ +// +// SUUpdateAlert.h +// Sparkle +// +// Created by Andy Matuschak on 3/12/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import + +typedef enum +{ + SUInstallUpdateChoice, + SURemindMeLaterChoice, + SUSkipThisVersionChoice +} SUUpdateAlertChoice; + +@class WebView, SUAppcastItem; +@interface SUUpdateAlert : NSWindowController { + SUAppcastItem *updateItem; + id delegate; + + IBOutlet WebView *releaseNotesView; + IBOutlet NSTextField *description; + NSProgressIndicator *releaseNotesSpinner; + BOOL webViewFinishedLoading; +} + +- initWithAppcastItem:(SUAppcastItem *)item; +- (void)setDelegate:delegate; + +- (IBAction)installUpdate:sender; +- (IBAction)skipThisVersion:sender; +- (IBAction)remindMeLater:sender; + +@end + +@interface NSObject (SUUpdateAlertDelegate) +- (void)updateAlert:(SUUpdateAlert *)updateAlert finishedWithChoice:(SUUpdateAlertChoice)updateChoice; +@end diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUUpdater.h b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUUpdater.h new file mode 100644 index 000000000..5f82914bc --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUUpdater.h @@ -0,0 +1,55 @@ +// +// SUUpdater.h +// Sparkle +// +// Created by Andy Matuschak on 1/4/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import + +// Before you use Sparkle in your app, you must set SUFeedURL in Info.plist to the +// address of the appcast on your webserver. If you don't already have an +// appcast, please see the Sparkle documentation to learn about how to set one up. + +// .zip, .dmg, .tar, .tbz, .tgz archives are supported at this time. + +// By default, Sparkle offers to show the user the release notes of the build they'll be +// getting, which it assumes are in the description (or body) field of the relevant RSS item. +// Set SUShowReleaseNotes to in Info.plist to hide the button. + +@class SUAppcastItem, SUUpdateAlert, SUStatusController; +@interface SUUpdater : NSObject { + SUAppcastItem *updateItem; + + SUStatusController *statusController; + SUUpdateAlert *updateAlert; + + NSURLDownload *downloader; + NSString *downloadPath; + + NSTimer *checkTimer; + NSTimeInterval checkInterval; + + BOOL verbose; + BOOL updateInProgress; +} + +// This IBAction is meant for a main menu item. Hook up any menu item to this action, +// and Sparkle will check for updates and report back its findings verbosely. +- (IBAction)checkForUpdates:sender; + +// This method is similar to the above, but it's intended for updates initiated by +// the computer instead of by the user. It does not alert the user when he is up to date, +// and it remains silent about network errors in fetching the feed. This is what you +// want to call to update programmatically; only use checkForUpdates: with buttons and menu items. +- (void)checkForUpdatesInBackground; + +// This method allows you to schedule a check to run every time interval. You can +// pass 0 to this method to cancel a previously scheduled timer. You probably don't want +// to call this directly: if you set a SUScheduledCheckInterval key in Info.plist or +// the user defaults, Sparkle will set this up for you automatically on startup. You might +// just want to call this every time the user changes the setting in the preferences. +- (void)scheduleCheckWithInterval:(NSTimeInterval)interval; + +@end \ No newline at end of file diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUUtilities.h b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUUtilities.h new file mode 100644 index 000000000..5af355083 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/SUUtilities.h @@ -0,0 +1,20 @@ +// +// SUUtilities.h +// Sparkle +// +// Created by Andy Matuschak on 3/12/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import + +id SUInfoValueForKey(NSString *key); +NSString *SUHostAppName(); +NSString *SUHostAppDisplayName(); +NSString *SUHostAppVersion(); +NSString *SUHostAppVersionString(); + +NSComparisonResult SUStandardVersionComparison(NSString * versionA, NSString * versionB); + +// If running make localizable-strings for genstrings, ignore the error on this line. +NSString *SULocalizedString(NSString *key, NSString *comment); diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/Sparkle.h b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/Sparkle.h new file mode 100644 index 000000000..13e9b2156 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Headers/Sparkle.h @@ -0,0 +1,22 @@ +// +// Sparkle.h +// Sparkle +// +// Created by Andy Matuschak on 3/16/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#import "SUUpdater.h" +#import "SUUtilities.h" +#import "SUConstants.h" +#import "SUAppcast.h" +#import "SUAppcastItem.h" +#import "SUUpdateAlert.h" +#import "SUAutomaticUpdateAlert.h" +#import "SUStatusController.h" +#import "SUUnarchiver.h" +#import "SUStatusChecker.h" + +#import "NSApplication+AppCopies.h" +#import "NSFileManager+Authentication.h" +#import "NSFileManager+Verification.h" \ No newline at end of file diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/Info.plist b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/Info.plist new file mode 100644 index 000000000..c154cb61e --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + Sparkle + CFBundleIdentifier + org.andymatuschak.Sparkle + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Sparkle + CFBundlePackageType + FMWK + CFBundleSignature + ???? + CFBundleVersion + 1.1 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/SUStatus.nib/classes.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/SUStatus.nib/classes.nib new file mode 100644 index 000000000..ff40c9ddf --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/SUStatus.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + CLASS = SUStatusController; + LANGUAGE = ObjC; + OUTLETS = {actionButton = id; }; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/SUStatus.nib/info.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/SUStatus.nib/info.nib new file mode 100644 index 000000000..99183444c --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/SUStatus.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 69 10 356 240 0 0 1280 832 + IBFramework Version + 443.0 + IBOpenObjects + + 5 + + IBSystem Version + 8H14 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/SUStatus.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/SUStatus.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..378b22f2a6e3c51f385cd62f3c93f35a69cedf27 GIT binary patch literal 6873 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 + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ca.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ca.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..15daf3081231de924d80ee94c9ede541ca4f31ec GIT binary patch literal 6589 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 + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ca.lproj/SUUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ca.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..17f2f3de0f2f6d8823af59f5861b0a0483fdea4b GIT binary patch literal 10881 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 OV?8R6O)=CKO#T79qO$h@ literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..3e65b1ff5 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {relaunchLater = id; relaunchNow = id; }; + CLASS = SUAutomaticUpdateAlert; + LANGUAGE = ObjC; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib/info.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 000000000..082030262 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,12 @@ + + + + + IBDocumentLocation + 136 94 356 240 0 0 1024 746 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..ac43a0cee6b83ce628cce69b73b65d5f32350823 GIT binary patch literal 6559 zcmai2349afwm;uDStk2TX4nyP%OXoD=>}z$F0>SAC{0@m6iS*5G>|4SNn1)Oej;$) z5JjFB6&0zVsEA%4UKiXIQBkqtj*9zp_xW6|xNy(Rq=g5*`;uQW+d1EN&j0++`OY_u z@kltC@_LT~0SX)#zz8NVgLT2MKqA-_ZdDR>!|*Q|jzz17rDE~AVX?*)N-&jd5L`b0 zY^7ZZ6{ZE!S1xE=Pu9dIY?gZtqTcobfM!*CQ{gE!$r_y|6R&*4k> z4*nZ{fPcboDEmA7L5##s97HAq$UxXb29d#JC>cXC$@yeDDIqh+OfrYeC4Mp=pVpBD zWC>BoGI9Y)kXF)8I>}mc5!pyKkt@lyOKLRv(N;eA>{ zXV6kwMrV=;EvIwnTv}B#EZP!@yf3)H0Zwp%03x_S0vY;1U+4$@VE_z-K`!&tDh}D#>KHF&qh} z+KXe+D8@6E&?8zL2_%zBQkP!n^Un>3k{IRWBA?$EXjZiI#Xf&pOnq|pkgAS8K)pUd z&)kB~UmM1WBg*`6G!$z~)(#7*^Qi;sW+2VfD{U%W3$M~1=#%w3!~W9@EKQ(=ZL!2k z)G3WcQx$<|V7Zc5fa58vQYcvK^H;@UDHdf{vem4E#aKJLimhQLb~WQ!oJH7XW@I4r zW3(F)&w*UXL&r5|Rg;*3aScLWe@$UaD%KoGg@ZM5WVlioQ4*}TDF)4-+)S( z2UXyQYMiMCyf7c?U;!+IMNp3bmMFjUl~X>&G-4|1R9k{gD@CD4L25H z7{k%!y&S65D+MZ~pP-NaSW6~&xG90Oi#!7yiCvdyw1)yVI%w%E`dwo zG6d;zxB@oe_e$7||5w4)umxk`4+b!+@tA6lCt6lQvi4sw&H|2@E>q3{0*}QiJ*~5%f)`IKkJKQmN#RP zHwYq*j_8Mj8fD9av8bLbH^BBT*bXruYZKs55kv_;x6^BGDf|OKm;7Gk>#zNAn*5pZ^!2h

-7{XR_e{g{@yESu$EQhMGv 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 + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..208496318c55d5790c7e715b344ad9e55b78548f GIT binary patch literal 10744 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 literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..232852ca0d7b3cd1a44dedab849fafb45eebe247 GIT binary patch literal 6978 zcmeI1%Z?jG6o$*&NIXF{oe_`_MH2!`gu*Cf5h5i~BtT);u{{&d*xi=x9y4C#UFQMj z6(Ijtr)#R(HenDcn+3A$?yj!Ox&G(kKmK$N-F;WM7p~TCU%wN5hOTl8Jx|?CBj;}9 z1{xb^soZi4)pxJzRY~&KJUz4 z`MKY8Mi1O~+V@rlI)Ct|@%zq|Zm#QF&rhX0c$-TGr8pUD6y8gXab4;yqc*<~|3keS zc*!ih92>12>OJ!L-Ai(zHOLiNaH8!!)4RF5qvv0>uF;8il(HnO=J0PcbE-M4JJWuRyVRP>U1@}KPW3C_>)m#zz0!{k^vubP z{Ib&QK*6d#X;%_5tJ}tJ;qF~qFFu8Y%;LZD7;zIThs&k-8|#W!;fqN7X0~n;twe=M za#Lpadj2NVa3rV4LO#2gA^l{EVR;WZz>)@n!e}2Z27J~W1vy|ps$s+ z?k+r19r>|{QZtW7mF5x?4DrGIQeSqMOHSx;qLCBr_E=BPd{jWA3-`d!wONLIGmXr3 z8n!;vI`$fP&Nzk9nWq(+3hiW9_!*0ruFrvg|4Z#=Qp;nxN78`dX27dxogq88X_UH? z;OVE{cfZ`Dp>2qoa{QAl+^o491$>-XiwB0ftj@(35f8)x{qVzDI1ytfxIOTZG~hxv zqXI1rYsej6$#cn}ENjBQ$uhwU;wdK)Q$YiA&6w>R`FH!GVtR5pbH&vsJ}>Y4oH=B+sf3WURh#4hr6{s`Fzo@n1YK0igsOx{Y858k zjFBoA&_JL`6mt_U{2)fY0#9NBiegHRqc zKJFkQ9f*-E8@s}Wk#N!0&v6Z$jQqMh==VaWMhmc~JSV+$&y$nvDbGniOR6y|ekuuD z-IB&5u=m1yXhgAlo0dhtjLM&Vg?j2h61nN9&^ep*YCjVA z$6gD?^3SfN!~YXJSH5dG6@?Rh`)!|@PW6@OK9l9sGqC>*h_!hvhYssJvEJ~U>ooF# hyOIDhBRYrwQUVsF{{M?Bl>;#| + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/cy.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/cy.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..b619eb4ab4539674743cea9361ae86faa9c1ca4f GIT binary patch literal 6380 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 l + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/cy.lproj/SUUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/cy.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..81c59b757587358bbabd4343563376b80d4c474a GIT binary patch literal 10691 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 literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..3e65b1ff5 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {relaunchLater = id; relaunchNow = id; }; + CLASS = SUAutomaticUpdateAlert; + LANGUAGE = ObjC; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib/info.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 000000000..5a7568096 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,12 @@ + + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..d371ff21d9e947292a6e7105b8e82eb4eeef951e GIT binary patch literal 6438 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 + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..d51f9ad2ebf9b29b4a30b33089cf12a4b7c07851 GIT binary patch literal 10841 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 Sk78Ob{@9o5Ps^8o&i?=mOp;dHSGp_7|=3 zz4VoKe$a!Y--K*@zDjjk>iaY_n(7zYErmiYT_zeu`&wgsU+XQSo?i)pk=_jhn^hpW z*4mNYgV3*m#0r2wBnNO8?k)TR-+@d?w3QVRQ7mjI+>!^$R_n>o-VE)0@zNH|K#2 z>xP=q)XgV9N?&dy`8klw^Vln+3=-@$)eh*>zs<*?$3W*T!h-nxWMjiu8(Bs|7kxnn zZHIfB!f*;yyk;43C~l&zW{08peVCyLdW2M9g#{hm7`8BqT1f zcUs1_hi*%QKG+L?*oCKZevY?UoLX?5>&-%(f*%*JG*evb4Y(n%M^@qso@%lBJiKV2 z-(Z9{f2bYMY^-%7aSLk}vL(!P5MzavV1cRrU=U&+j)&#z%?`_8e%P)KkA0%?XE6gC zuF@wl*R#xYSYfHt?EA0d{V+7+6h;>zD>7Bu$=~QRkuL41%WTd}*faB|85@sc73|Cm z`v|gQQDg!)`)z*bEO;I=I6JNam*ez@#=KA093(|<_?O*5mlIC)opZ`aTvw$d&C7me zn{7*eruZi}uoL(#r8lRWtKkpxf|;s`B`dHkn&T^7h?4cmffsR#5$%Uf4s;IL ziI303EhXc^?rjhoI1;u6`X*z;TWo*` z3p(ST>H9*fs$evt%dC-W5~8%oz#7Z3Q0!f46`t0PJZE-fK}tLwhUhOlAB5g_BW!G3 z-+?qWV8(kb9vN;>b4_S=g}ZZZ*fsXU$W&BgCC501XANny&%hFB(x9*ld?pu;(ttDb)8=3iI@vK8e8Fvf@u!%Ks`KZL^B&k4bQ0z9(am++m=$qRQna zTzLB^W^~28V-JK}N3k0Ah6(arw7;zOROfR4rj9Jqej6Fi-Zt#5c6b_oI#6tuI=G28 zNc(n5B}f#nl-uU54nfx*T_`&n!b#-mvR{9<^FzsgEo}4MFGp=t!+kMiJG-~nSn4i) z^2&ayx})gxY;*iwlE09Bd_QqzR5EeSZB!7{Cd1IVzbfLH&ar*n)yjRYAHv5=zo~e8 zd&Teav)nn_?&FM z%)aay{n+>J?w#+~wma155`Yvu_zQN?ZI0rr5 zqs)3xYq&$@DzRk$yUqloW{p)#H?(s{sHtZ^9`jOXEgK&Dz2xaDAG{R$YxOZ + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..0808fc651a9f9b3c54a3643bf6a87ee6da80c783 GIT binary patch literal 6406 zcmai233wD$wmzq-_qDnztSDkk9W;5JW39YsZDSE9%`fQ+MlI_Ti82qJT;suT0XH?Qmay0&}oIp@Fsf9|=} z*b)gRk{-{yfWQF{I?#gwj9{tH48(&?;Z<^cekT1T!m(&gW-`_?KQq>NksM4W8U&}$ zKTB?tLq+L^BH+4B`@sa}#pT7>TC-3f8DO|oxCN|WgB-|*@h}-Kgd&&@vtcpBAO)Ag zWx!w!Tn<;jm9Q3Wg*)Lc_#@l{o8SR>5FUbu;c<8dUVs;2C+vc5cn98tf53#rbM8qp3*bs33wJ9N+{2Tp)r38PE^H?9JOtUt~=PwEdf#q_%p2m|`C#hkb&p$U7OR^}tfnChnS&X%@o7g4Hz;0$H*1{s}My6*V3}9S0 zA?}4-$fLm3U=^2`j`0mbe}8RJDj91IB*Vel7Gk(u6p`b}ZkPZCFcBur*MgE03$%+U z_3VU6P`HGKN+qbL7SQ~j$QlHpytpJ5j0Jil=!Plez*Lw$NQGSDbT8iaER)No@lO=CE^ zyq80DTBe{5={FRkKbDFIWyZ1d*f|2n&SmE_%lohd8ek~|pplFRAp|lkqoWDJa1pG4 z2sA@jWv?=GbLB)!EE-aa zCs@IC6S5{X+rMmSR&~U#=|X1_o|$1@7aCMSNqhImzB9!RZ2=$EKgT~VO;)l1)uv-@PUw|jH5+!Jy;vfS~J{oe#P!!0xy{$PMqP3L4=L?!@<5=l9lRDdsvhDj@Og5DNI!pozI zqG)>5sUiaRUV8;#{Y-2Sts}pH$N^BE-#`Yva2wnXcaVCB2r8LWEe>D9BLO&c-DO(?weH}4_Xs3i2k41=W$^+`$%Tvk`tCVy*$sPFLF4d}!iP*n+u338o9_@lh z;W5Qon!Ml97hyn8d*ybvhPT2Kq~Rw?!%vgqa#;@ZlHS}0f1@`=YtO1$`wKj;3gQoD z=3zq{gaPgCIiCD1caGPiP$0KpB3(~VIPh0^30@`^Y)f=g*$9_OAQviA!Eh)rBOai1F}64s z32Df_3kN#k02EShWnnk~2jOq7e1U`VHM5P|5)w5zop{EjvzaQ>AJO>z;bZtj9eG|;I4RHaWRKT=6G7nF z7|plO;9w{DQ`pz3WAM4=6w78~6&u9f^zgla_L%reF;VP+p7Fkg?>57C@V&xlHH9iY z%EEFar0|*|Dhet|{a2Fz2q(6{i9RIn?Lb!3JWhs_5m|X&-+Og7`A)+xM7}ey5Ru3? znN4DaM85prAs^~B@}Ws3-*|<56G$~_@)hLtaxXXM|KJ|lVLPJ6J(WWR#G!mPu9r9{ zq6BYazoA7QV#q{dh)r13mmj~XG$bd~G^`Z46eFSbnv|q!`FVMpElGF-1I*#B4I7X8iX5m=OhW7zK6 zOva+Bbi56M=<`?0@o+2@4wh5Cj#E!!d7m~afqI&h%8@`@gCHq+JUy%;WF^fL_QkA# z6|pJ8AaUm8IcL~(VFw!~(xw6$gu_^X080t z+LYmp%{W7o1_?oH)hh%n$BHdj(IW&JUu)2fm89e_`cy>yO@X)^Dpx#=24ypwsSRC? zbGmR2&Q%;3==0Ym7F88uFRiKnAH?fbh;P6(XFE7ZiGJyRBanhTnhs&G_UqbY@GZ)%iPqxVkT zMv(-xcXMgeNjFsg%5qe>QThi~EB$-hqzkQiHEO=11fV=nhhfVp<1A$jY#D1}Ra@6`8hcRdp_}5We+}uN#cX%0g*>x6#f~LHOjyWnUq}f9QYo9 zMesBtpUp_Y=fQ#3ZVR9 zHkXlTIO@AZ)rGPHvnst6xWB-|52dYnG;6)KxU?Iu3}fSYuL4HJ-d!w&zc3R&`&T5F2N}{1ifGuB*7w> z1X0Kk1fjnc8GSI=q>!6X=F0m-R++vg+H$kG>Q1g&rF?m@_6?(y3S#==H;BGMWzpxo zNd&+gsH6S-GQ6HXo_&B{aW?LJaz39vbTx1h?lNv2w}I>Ap5S(I?{Ob<$GPvhAGx2n zQ`~9p439j|>vP)ck(V?;`{Lf_(A+oKAZROUVau|!!PEW_-6hRel33|e?R{i z|2V&ue~y2d-@|wFhxlXs7yNPlEB+h)JN^g$1bsIKRburya zT|$@AwdywN{-k?e_o{A>?tt#F?laxDy6<&A>VDFl)ScFy(W9Q%>-7EfZv9YwrhbHe zls-p4ML$hntS{A<>1XOI^p*N1{YL#?^?%oYV{jOT8_EnmL!BXDh!~OvX1LyPqv2-5 zErtz-yA1al9yL5~c+v2ZVVhxx;jrNo!!g5Yqrqr54l)ikjx|m+mKZCHb;g)6WxUFG zlkpDYR^v;?L&hVy8vthHQax!Q8Af8uCyksNo%XM&Dw6=VBKjwWIb*@ zZ4+&7o7XneR$;5O`E1p;xwaZxy=|dwv8}-tvUS=XwLNS5i|qy5cH3TCx9v0A*S3>( zqg}9{W6!jYwNJAb*-Pw|cE3GpZ@1rX-)7%$f5(2ne$f8D{RjIA`$_xH_S5z=4s;B5 z%y!Ii_#L&5d5(I=LPyB4%+cg%c5HBLaXjdF*zuU-&yJTJuQ+x&_B%dueBn6d)H$ur zVa`0~cxQogl5?`N-nr1Z*xBG*>TGm|oE^@moX+2dz|~6hn!zH zk2}9|e&hU37%of{W(l=IP*^EkDy$c76FP;*gy)3kg%^dFgl)pB!gk>eVYjeXcuP1Y zd@KAc{NggYY%YgufGg8A!Zpfufh)_E?ee(1u0mI_YmTel)#7S%G1r~0F4s2KPS-xy zhpx|DU%O6-PH~_(MjR`S6LZ8|F<+b@P818p3&pA8OtDI=6T{*Pv003XE5(GE5?jSK zv0dyC*NJzCcZqk4_lWn2_lsTP7V$yxVeu*PHSu-vO>w8VTih$YCGHpB5f6xm#pB{B z$s~!=5NWjJm2#zgX^J#eDv~Osn6y$#NGYjRYLnWf4(T#!jdX>yR=P^MMp`djFWo5J zEZr(?lwOfulU|qJly*wHrM=Qy(thb3>40=ldS5yu9g&VoA4(rdpGcod|B^nJ{w;ke zeJy<}eJ}ke{Un`|PD^JpFoVyqW!N*E83Qv0Wt@|dnK3+LWQHdrpK4F~amptp + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..aeec008765ab49756bc2a8d825d4f4f48561060a GIT binary patch literal 10689 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 O{zH$bf7^ab-~SJC{z0n% literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..92064db7fc6d197903e946d8deb2042e4803dc35 GIT binary patch literal 6938 zcmds+TW=dh6vyYepJIuqS}Ig-j|dgF1gRj>iU<(AZQ@IoI(D>P*Dary&(Nm|`2WuF zWM*xXq)jJW6xo}Z**SAA|2a4R@n`rb+zVAW2y=ZO>-$uHqc97d#%H0`%=6HMq2`8~ zISMcJ&H6;MGyONxJNGqrPn2$jy>MHjkHa*K!!ym!^{jexdm4YC4{v@F-tWErT<_29 z{ZD%7kZ1Q_UiOtvQ}6tupKHSJJ^qYeUmc zCn>71)ZUSv=;(!Mv(p}Qi#|BfX}4Nig!eT5N&A+f3H_J$f2C0)J+jBCa?VsIEk*ZO zJVSpjZXQUVeZ9J5=#l?c+R=(Kl=^Ztnu7;ycqm#f)$Q=vdgrfN@4|2TxGYOOCz?y# zv(5?7;e?rSQ{G~YcmT6VhF-wzbZvnXjh$ckg4aqohQo#Aca+tdsWn2MNBSN~2N!FR z6QMNJu1Fs{cQ$hR=U6u+U$`u6u)(xJ2tn<};mkGOFdf&m=)3 zz0_LseRu2(v;sDdZBHvC;C%)*mpqSaVy1WT_3p{><+VOgSeSpuqt)gQ9%%ltd3zAh zg%9mrf6KjDtC@vP^ZRmY>qG751jj>byw1f*B})E8o~dN%-_7W;(G~s?8pwTUI6%5a zSOG0A>51uJV%D8V-cq-4ARgdkrKjUL*(}Dw$opl{1}>vd-#?cS>Pvk#Jqzc>=y^4d z|IcdytMBqp*OT0_6!o9`DiI{ z9z0w0oY%3+z$|t#Hr@q)|5e+pggmk^e46LV!~vpHv`~s_t>LLL-&)!x*Wv5`U<>y< z$p%z4+gV?<&3J9Yo3zT?bNKJI&!#u>2st%B94k!s7G9lCY=zu#J8D+phn{bvYNbZ= zs@1b3s!y-zh$)`$mWz{*bOx0xIbF(b29~SEOpRz!DpowQ{P@^%*O+1E8b=qNMR{zd zGG;xmuRY3=zaDCpI**7qGoM98p6eWX3sIm}M=t1;ssFwb-z%LE>#=xmbLs9YhUfXh zKzcwvau70t*bCT|UH*M_6seYxYu~yjn-Sq%Nrg>1*_U`j9YL1kIw~X0W1Wz)J~A!u zCw*@>BK39B-RSRd3&AIOi|_TUEAJ<B|c@va@+N7T(ZKPSoDhIkd zN#h5y1$>m!;FIuecAAgM$OWom%<%p|U%z?8_(gcar)}ETD`@Z*t7$5LauFi;o>kbF zclC-Y=e1w0z*k=N?8Y0nrDWxw_(sRn6?AzMs&;ebH#x7|OQG)Ko}PE49U~sA-X=zF zcYtCan=TX>LO0;2(Kz<4yknK0O64_M$0hIRjtvFiGv=GSJ6x4@*x8%Mx!wIiI#kqs zQ6H7){fmtygl#0v&&0X#BU1V0Un;3)MR+I z#_^Y#*G8X+by>E74$63zpC!v8L-#l0u-sYvE^C!wM#bR@zJ{( W*m`7I^?2#O3Pg*L$MN>LU;7K07K@?) literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..3e65b1ff5 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {relaunchLater = id; relaunchNow = id; }; + CLASS = SUAutomaticUpdateAlert; + LANGUAGE = ObjC; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/info.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 000000000..2f65f2f49 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBOpenObjects + + 5 + + IBSystem Version + 8H14 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..c4201cf26aa4490d0092bd8c36f61259550aa224 GIT binary patch literal 6571 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 Zr5sj{Vqu9tM%(ey&U1`&=fCpCKLLTjt6~5E literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/classes.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..0071ac077 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/classes.nib @@ -0,0 +1,21 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + {CLASS = NSObject; LANGUAGE = ObjC; }, + { + ACTIONS = {installUpdate = id; remindMeLater = id; skipThisVersion = id; }; + CLASS = SUUpdateAlert; + LANGUAGE = ObjC; + OUTLETS = {description = NSTextField; releaseNotesView = WebView; }; + SUPERCLASS = NSWindowController; + }, + { + ACTIONS = {installUpdate = id; remindMeLater = id; skipThisVersion = id; }; + CLASS = SUUpdateAlertController; + LANGUAGE = ObjC; + OUTLETS = {releaseNotesView = id; }; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/info.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/info.nib new file mode 100644 index 000000000..2b25ad033 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..be3dbd9069137fd7dfa8bbde36f0a264de1c690c GIT binary patch literal 10634 zcmaia2Ygdy_y2jGCux&3X>XG@t8H>GLu8dMW(93QhCmrDd(^bOZ6j$?laygaA5akW z#f6ACp@4vjfQk!TxNsm_M8$=QxJ6zUqQCRpn-&EA@4xqxY=bZ03=X;*ps>V<- z7SGGu4+JPMFn|$~AQ>!^Is~HC^}(5HbYchmiUlL#iVpEep$c&t)ND=Qza z&QWVh5)JJ@7OvO>CNNJMR+_6fs|mydoNP=d3{t=f`Op)3!9~y?O5jo$2i4F7&2T*| zfQ4`aEP@;1Cb$`v!vpXjtbo<94jzMzun9K97T5-_!fUV>_Q8kn5qtv2;2ZcBeuCrh z8~hF@;UAo1BQX#ov5;)ij$A-;NdXx^O383Cf{YAVM~hC&*Le zIkJ_!KwcqllXu7`0tRK6Gjbu|;kX^xMun;-U8d#V`SR=cVJj0@_iOpuq z*i-Cj_6&QLJ;%1PZ8XlFXD_f9*-P*hdzo!#udr9yYwUIQ2HU~jWN)#z**k0}dzbBD z``N*99l}ka&?k}|Y>*0RAVE6V!2ubN2~Kc<8$95JEXal&@PQv>P@o;OhYrvYE`UyO zA#{c=&=tBtcgTevkf*_Lln%-9fl!l*!1R=rmsD4)u~@Jw7z)Pc42*=s2-!$f2kpR6 zAQn?&dh5w$<)eZ%F$8jKN?CbXph4BnrlAEwU|!~sEdJ~B(Ain^j>(CSb;v7>n!=t5O8o5C7czB&cHr{BjNbSKsZpR zMknET>g+f+9A8#GHWG>Ref%H(IX}Yp^UvlH!oT22^9bc8et_?pM}QkSNLO&W7nNQB zg;0cR*VZef;s(y9m5&?Oh|a5)gw$w!FZ6~!&=>km)EA@1ChI3*Y~BL>pm;j=Z;Hhu z4f;YRwyvmBl7^KIj8sPgZIbVW0XXZ$a0#kD5hY?Pc(Oi6DGXc%17Q#pqh3cg#RI6w zay34#tQ^1fo`a!c0}O$oFbpn(;V=S5LK%#L(J%(aLOC~cKQH19{3M638p|EOoQoA3710vs!*YW)L1+i4#d$ys8F=U=s>)FLRtBU zK$RM*l(JFD!KzX;YcO2bhN?0<&@{}EQ#`L?&Fq2Py;H|LLJoO zLJys1%*&J3!vP!vszIM=0Np_v+- zYv$lkpe}}HAE<^x*m_VjP**Xh5lw`xYJ!>uc?up5b2_ndFVEms^M06#;?$xbv(Sy^ zz*X3|ys1h|65}^;;E(XTbZuV^mplY>;TpIWILw3j+{ROR8kcxFxASCljFQI2kSdQJ zG+1s7#NujIBoM8U<0wF-lwYP!tdK7aR|gtnO(6tRjXXLMiM6i!H_Co85^yMB2;l&%CaHn>C@a?P}EH>=vy?m zo7~(BPkR;3o%=rg2NuIEa4Xz~TDl$XfF*d`2}|+&E?5S4qcO^>1L)@X8=n(WQG%zjn&_0^25ZP_#1rqQ~6Zc^5{2S~P0Mpw&IAHt3`HT2?^|tb$_nKb%eT%+`Uh zTgS8S>D|`AL#yE-Sc~W^MuD|SgrrlkecOfJbUi%01|Eh-;8ECcy773#4}w$ZAsPuG zCdCaLsSVAQl5?gA(*5MXzvUjM-A4GIbzh(Dad=`CJONLN^`ME*mJ}*G8lnce zd;yiBqQY)+es6)5*WnG=foOR%ft9!5ZFmQE!dBP?yJ3%JsnS68jJjx~DO@u!5{d}N zu0TiE&QWLRrtK!|-tnd<@0d zTV#|2@F{!-pTiNH;0yQ?zJjChHA1dcXzf=_BVa5RQr;M-R)yS1^+J(44X0grXDNwa z$h(d&pMyc6VJbpXKtk)V55B|ko$x*Upp87CJ{VVr=jHa&|N4T&cvoGvpW)LMl&APi zp?-lAx==iqcNcRY#uLN0DYSKpKg1NJdC)rEUvO$QoPxgv!nIf{dJGP#p&AY6BJYam zFD^6z2oPj`gwQjP-quC9McV}mkwA7l7!Rr9{-n0E{g`+r;)bU`lh5HIASo<(}V+@!hI=%`w&M%6Hq zol40*E~W~Q4UR--VGtgH#D0>NFN8@Z4MFHNYR2i!d*RWCkK+}lbYjP7e+3`R5m6#1 zh!o`{ImCyD3|H|x`5kyHO{4?T9x7H62X@9}ip@zUK;cD3BNyV@y5Of9agpu_Zf$0P zO5PV&I|x7h_@!D-Aw9$(-SE2PgEI#qg`@}v>PdRxy8Ga#AFg`|eqTiTBc@{-rV|c= zVOA&rF^JhD5(ByiincQ4dh{2#BFMsZt@ce?5CE(eG zU#!E^nSke65kN;+IjLAfD#*A*B%PpE4GaYv#o|OpNu26UCyIpIJW`7jk!rYP1F0b@sU>x!o&?DiWCjV51`;L_(#VJKp?ny>j1T7{ z_()#HNAb~o3?IwO1%F7S^Pv?ZN1U6Q(;AzqFuUb8MMK?DddzrTG!BY(g+zUm?8qU!1{}h;QeLrRWp{d&`O1 z_uMuKUWCJ+=b65Uiot`#^Aaayz*nA(1-+OP5E;LUIFsZp4o`7L!}Ztz;pu;??-6!H+mp zUd!uv)g$B%vV`18mXf>3GIBRrPVOQ1lKc1sK9Nu2llc@rl~3c-c_qJ`2Y9`Xp5ejx zWr3N21S7>TgnGey<#Eh27=}bnsgyGGo1;Tbb-{3~t*uwTJxHw$G=(q_&sMeeB5YJj z7w8X5LZQg41fQzWXh`gI*uy}Gd0B5Lq|mu#+xT72eljo+9@VIZ6SY}M6ILw9osh?c zaGXrN^~fNSx26UmxGqTIeyfyi_nmtCLBUvKC@@DCO%te_{@`56M?@lx0*`HB8=IS^ z>4{m^GqYrqh?HX19d8rayozilkBe;OXe)>Y1+^>{h|a#o2rr)4F>!)PEUJdoKuj%*AbC9<0Jf3mSCQv+0+yjstx-+r zFUVdJm33Q&gFNyQd6{fSk~N#p;oad< z_~#e(MXpsackW@blf0|*E3%91CVLR%d*ODn5AGoQ$pJhLlI^%FbBKIEJ|rI@B*Y5{j!)tnpOMTu2*Bo8s|ESj#O12;Q>t(P}gpsR>pOLoy%5 zo|tjYXrm3=+GLQ5cGoP^HY{pHs{weNNAb9lhb52WAN*T5|B`?BOlb#iZ#Mw|`cCwbV0_G$Fh9h8_&j*-)AVLXwlQIo3S0i8) z1k79wFa^C4C9QxF}shyZ;1}n|i31X3=b#Lw(c_PAXG{wu4IAo_3%e z=>@bCy%0jQ3++m~(e4O{vT{8xY4zmDKx~EvHvOL94j4Jm=op?vSVCCpPqfU{cBSp& zpgr|xV{zL{=SZp=78jy_V7BPr)<$?a-kwmQ`2aFEaYGwML$;RdMWBoYW~zceN~wGU zzn(AP*YQXBV?4#)I2)^sO?)BWh)e@LxTof}J%tPR>?JJHyKpYrDy=+H8%JWQ%KFX{ zqDU7~Lo_WQM=Qk40?bG%XiunE4^^<0_CZr^r^Uoa`_lp3g0;{hG*Or@MqavtuMW-Q=tI$gjO^eH@Dz-h()c?vi>oQ|M<^a4&R#Qwu?#;JQu zAFGE*S&NZ~fYq*@onT-v56j zPuGwfK-HWT`uOb{l5ay5A(E#L3&*fB3nkP(#&#GqqEG8-kX`|`bOzMZ5GkS!sP(Ye zlOm785_%<#(in|n@sSQcP{FiIBT?Lt(l=Ca?_a|m?&kzW#U!d(!JtF{K`@P~t&OR1 zvCUb5e-roQcH5y?7j3U z#NX5O8HAFSo3&c?A-+~*u35o&b-k{dt#n%p-IgFkdK%K2>wB)}Q`1Z6aNA)!eN|J_ zddwac374E1VuCGA#K}XK7Rre6dgZHdpGg^>HTo}vDlt~Jo+j9 z3^UZ{^auoKAK}T3!o6dd+MecH_*48D+%;Q-8>;oe8mvP4$+3ET$B~GLI%(9OU^+YJ zQKCSh-_Y;q4=d@n{JE9%d;TonilD``BQ^%La8Zjzof;MP*AifvwwTgL1evM6!AXyk z$6Ev|Zd)Nr{$KJkEk-$?M;5VodIE!bs_A#uejxpmo}_=_I#1y$`|}t1EBs}?9apwu zFC(ak2xFRF%j+?4)oAe(w^+>lB~ACt$dXpEB$h0+?=CCHZI@`GHi#u?4!$(OfO-0& zQfiM(QtW$bKe62MasTokT}*t%@V_3P$6U&G%HQCx@z?ndv6M>5*J>n; z{%EDP8THw4$H;m92MIf|Oy)v6F(-d(C3EvP`PQ@42ze}<<>352oP7YQ{$2hK--&at z!=V%Ftx;pzc0Ynh6zpiwv+lH+kPcuSHIT03y9G$6oY7Fr2CNI~`xrub06B>nzCSI7 zt++|G9ja&_`X_FdCGq*_kj?1jD=_oPNDsnD7Z#y;dtnCItJ|)aOllE3DEf%~aYTF# zBp5@6_&(#v!?DwGP2$zbeC=DD=?BHJdx;T|sIW5D_YqwxO{P4QYP%*;t2{y)it>at zSu{yRzp2=dO=HtpCA*vjSQV>gHB4o-td76O5Ayf#vU0oUSh%v}5eE7cZ zG8l!qrW|dT2g6ZUXh|4>CBWO-+dB)sv73)pTZdLF!Z&!m@cms1YW#70tG5kpy9+f* z`BkV*VdZ&f@q{Jr)@EnR**)YIb|1T+J-{AhE7(fb!d9`>Yz=#et!3-jdiF4TggweO zki~2x+r&1r$JrC?N&Y4O3b#Ry@~`Qkp6SC70ArN|#1R z7O6mT>N?y76)O@vhwVK>hX)ep_{x>N&knV)L)w1duu}ci>LA=^$N#bL;7jptkdN

( zpR+I6QFe@d%YI-#vE%Fn`;GmkWy#}`FHf#djwjDczAkw|^1|dr$%~WkNPaN+vE)t3k0(Ewye)Zm@}cBUlYcQK znWll7T9jH-Dg{C+hlv%_PXs| z+dd!Ssln74sST--)GJeCsZFV~Qs<;Lr_N2iHub*L z$5KB`{VDZinkTI=Z9-Zs?bfulX-}rTnD%6 zl4L?Bvr4H_N2!z4S?VfvmwHI~QlZpS>Miw^ilzS27^zm8E8Qc#A{|aoNpGKCoL-TB zUHbLucckB$epmY4>C4kw($}ZInEp=sf%Fg3kEI_^KV>)CQ|*eqi#^{y)IP~R#Xikm zX%E=1v2*);`}Ot(_C@xa?EkT^v43Fy&i;=h)zRLO?-=Nq zqK>#@j$^Uo0mlkQi(`%BamQB2YmPS@yB!A|#~jBUCo_^V92rVRmyDhn12V>BOwI^o z%*nVZ<3Aa|9mO?6eeu6AAH;;#9w>s$+5 zH@H@~4!91w4!J&b9d>=<`pk92b=-Br-PzsCJ=9&{p6(90XS!#*uX11QzQ)bn^WE3G z7r1Y5-{`)>z0|$Tz1-d6UgKWtUhjU%{ib`j`y2Pqo>Y(Iv3oK+PLJEu+0)h2-P6M} z$TQe8)N`3XU)u-m-Rr_6It7`Ue4N|bvWyXte>)uXPwCU zHS1KiFZ;smF4^6(bF=fZ3$lx{du5N!o|N5?eO30{>}#{&n&WAaF`7(X&d>wtAd|iCqe7U~izLCCBzA?UX-#Fg{U!!lnZ;5ZIZ<%ko z?_S?p-zMKq-!9)C-#*^~-$CCY--o`#zE6Cg`HuL$^d0pb^L^_(;rqi+{eHjVZ}0Eu z@8s|7@9OXF@8Qq)7y5hpd;9zPi~armgZ#XpM0v-o2l=)bMs%2WRb8qh0> literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..6bf42f79b03ffd17af6b43ea71a0ba4eda2c5f7e GIT binary patch literal 6908 zcmeHM+iuf95S{0Kg&Tni6$-aUgdi$?sE`V(gis&d*hwwYIEs^o{5){ZOqN|YQR;?l zf&{7@d+)PnX3xw{fBcl^ax96QONrkuesA!X%TOjLk7SIRTPY+%U51(~nd6u3ebf%| zm7`A^b;p?LKw9z`r57@go_s@XiFZ<~YoYuW4|~3pM=N{3s@1pT4Q4)wAnALRjlb8D zN`?28?r4ZF?ydp~DfTizEq9-yj_(;-S!?|hAdsUiQ*0)R

9bv=gE4isb}jh%C|I ziZ=HcZIv9N{1xM-n3MC*^*ceS0E!%AvvQpQR+?hoE@bBXC8T)=H0!9^&WPjgclUa+ z>b7?n-wF!of~Q~#jS_2~g26(o*Qy8VbB2d|OK>u1{S~xSqA%^^77uMBg(cBy+V^NC z&WgK2%B*kIz7u)!+lqO%h?H6WQ)P=L)}ET-SvIA_#d@qsKv3|4m4mqy3C+1UTEsI4g-GO z_PqPuJvFq7SvT47y18QQlKzn1kr5*JS$^D+OFLO=&k5Oold;(9iyJT885}w!Y<|dJJ9E8mjojrJ^JD{{@9)XR0hVFtYYU^)x_2Y9|Jht|c6oyH%Nsc3OYd#!wXs%aRNK`E z+QqpcLPXl`qW<>H_Ao@(&pkN9t3}?A+z@ zbuu>}5l7-PU~G0_*(;aNx=>5@c_nYt%}4A);wE-cmw4TXI1-=3mOXw}inG!u`53HZ zr8q0mKI-{R;_59aWbGz><4F0X7TKP{r`X*ilx|(0*it!LWd7G%h?l6|9!Hw>c{j^U zTZV{n=w_Z~Ih*71*~}=>r*o&wJ{2gt9F%3B!c}=A8N&Zt2A(&*o@$i&9~Yyo&Q>Lw wY3JC`WBiMIk7Grbu#76OVONf|8viqLq%oq!gYN$!?j9SS@JsOT{k + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..b619eb4ab4539674743cea9361ae86faa9c1ca4f GIT binary patch literal 6380 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 l + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..236c082b7b7ab556173032f83295d118589b9af1 GIT binary patch literal 10634 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 CH7pna literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..08538d327d37fcaf8b4876aa849da42eaf407b6e GIT binary patch literal 6910 zcmeHM+iuf95S{0Kg&Tni6$-aUgdi$?sE`V(gis&d*hwwYIEs^o{5){ZOqN|YQR;?l zf&{7@d+)PnX3xw{fBcl^ax96QONrkuesA!X%TOjLk7SIRTPY+%U51(~nd6u3ebf%| zm7`A^b;p?LKw9z`r57@go_s@XiFZ<~YoYuW4|~3pM=N{3s@1pT4Q4)wAnALRjlb8D zN`?28?r4ZF?ydp~DfTizEq9-yj_(;-S!?|hAdsUiQ*0)R

9bv=gE4isb}jh%C|I ziZ=HcZIv9N{1xM-n3MC*^*ceS0E!%AvvQpQR+?hoE@bBXC8T)=H0!9^&WPjgclUa+ z>b7?n-wF!of~Q~#jS_2~g26(o*Qy8VbB2d|OK>u1{S~xSqA%^^77uMBg(cBy+V^NC z&WgK2%B*kIz7u)!+lqO%h?H6WQ)P=L)}ET-SvIA_#d@qsKv3|4m4mqy3C+1UTEsI4g-GO z_PqPuJvFq7SvT47y18QQlKzn1kr5*JS$^D+OFLO=&k5Oold;(9iyJT885}w!Y<|dJJ9E8mjojrJ^JD{{@9)XR0hVFtYYU^)x_2Y9|Jht|c6oyH%Nsc3OYd#!wXs%aRNK`E z+QqpcLPXl`qW<>H_Ao@(&pkN9t3}?A+z@ zbuu>}5l7-PU~G0_*(;aNx=>5@c_nYt%}4A);wE-cmw4TXI1-=3mOXw}inG!u`53HZ zr8q0mKI-{R;_59aWbGz><4F0X7TKP{r`X*ilx|(0*it!LWd7G%h?l6|9!Hw>c{j^U zTZV{n=w_Z~Ih*71*~}=>r*o&wJ{2gt9F%3B!c}=A8N&Zt2A(&*o@$i&9~Yyo&Q>Lw wY3JC`WBiMIk7Grbu#76OVONf|8viqLq%oq!gYN$!?j9SS@JsOT{k>JvUjc}EOaK4? literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..3e65b1ff5 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {relaunchLater = id; relaunchNow = id; }; + CLASS = SUAutomaticUpdateAlert; + LANGUAGE = ObjC; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib/info.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 000000000..5a7568096 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,12 @@ + + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..e7f61432a3597b14a71c5330fd8fe062a3084efc GIT binary patch literal 6583 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 + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..ac21bcba231d538f843fbb6d8ac9616452fc6320 GIT binary patch literal 10787 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 literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fi.lproj/Sparkle.strings b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fi.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..c52cf30ced86e6628aef76744f03c40f73c271e2 GIT binary patch literal 6954 zcmd^^-EJF4429=9Pq8*yBn=9uKbJ+38mWP%1`;DpQuuOX$+jX{5+tovy|133mu=2R zYO*sc!%=FCFH#7Wc4ucf!$b0rL;v${coH6mD!d32eV^(3N}qlhhlTE^VWyGmFbF-3 z^)&J>tn|(E3yqF-)z_Q@jXjp62Vp;at-J5SD4d6(Mko5Mvax;L|Exb|ejmQdWk8fG!l0HWBaNbatucO=ddjHJucUup&w7T; z!ftqqp!%w-1_uLwR383nB#^un3Vd+SvY5_ipv2uCQ?>oWN%;?V}w)4iBp3Z}`^1 zPWD4zq_`ch0NzP#f`Ho*X-LmkMgD!^;vR{&b+xR*qmQ0Vyn%~H!#BnsyF@@w7%qjt zNWVlJaSFzt69;4SX?*!63?FSUCKe;AsXzN(x4o9RJ^f)5j}zYVwMzRXsNijm19-If zPW5DFQ9U=!+y|XcmU;qyEyFDICU>=%e=7Y4@^f@@-+gFn^mK>cpJ{xetChv^p^dfN zHIuh`43jB550D8!2MKeX~Md zS>Pq#Qzc344J2TQX%=J0#xU^OTAZ>rOT#hF%zf>O{Sr(3ItMq}FVV;Tx4CGjaq0gF*NPTzt{)Pgu&O+6J~T=;77O> zOW?t4&BVr0Q?APK!J*bAzby6J<-J%5?3!=)5>|Y(;l5mI*AgHACT_>bw%x3U+%jyq ztM;Bjwi)ujYne29jiGb7!&KWKGoGG^J#%PuEjrHzgkJplsX7De;>$|)`b;(H$mWgLwFpfQf z3wuJ8r&+Aa4rFZJd9Po%6^5YVfg8$YsArPSiJ3~U%^1gumn*Ga7pn)JS>8BPOt$rC ziYu5p9$vZ74d8ito`0?V5!FPrS2xp)alI-fQ+3bHD~;U70_9F6ze=n0lon$#)%`#W znC5RzRGu$#{m`0<)n}Kf+m5V9)8*~kc6(x6>-~@W-|usIvwH&-K5^-NsaNLVZGWis z^|m@92Yc72>o53FeoCpNWw*yts&>wG+Qnm1ot%f#N+kMzS(n*rNhE$xD+aHvg-CoOi90bmgS(gvWnOC z@j*Z=hN0}PLe(O$=#oqvF`0%Ha|JL)u~nK@_c^w+V14UjyBySVihFl zO3+V<{U=tVuiCEaonHDJ@EqsBbF(kKpIE=$+^LGSMYEM-@?JAunr2tn@g^Ukr*08Hne@|{w+h|f&b8!wFSC^v`&!-s&-a>E{=5-8!}%`h!TNs@VqdA;N%d6rn + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 439.0 + IBSystem Version + 8J133 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..552a5bdd373f32c150427e896ec6c6f8b1721bf6 GIT binary patch literal 6548 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 WWj_|5_{V4;xU_q%aqqb*FZ~;Xd73Z) literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/classes.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..0071ac077 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/classes.nib @@ -0,0 +1,21 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + {CLASS = NSObject; LANGUAGE = ObjC; }, + { + ACTIONS = {installUpdate = id; remindMeLater = id; skipThisVersion = id; }; + CLASS = SUUpdateAlert; + LANGUAGE = ObjC; + OUTLETS = {description = NSTextField; releaseNotesView = WebView; }; + SUPERCLASS = NSWindowController; + }, + { + ACTIONS = {installUpdate = id; remindMeLater = id; skipThisVersion = id; }; + CLASS = SUUpdateAlertController; + LANGUAGE = ObjC; + OUTLETS = {releaseNotesView = id; }; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/info.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/info.nib new file mode 100644 index 000000000..b0e7f7bd7 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 425 51 356 240 0 0 1280 1002 + IBFramework Version + 439.0 + IBOpenObjects + + 5 + + IBSystem Version + 8J133 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..0cd65e6c00e0d716af8aedf26ac4fa7190cd1295 GIT binary patch literal 10882 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 literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..9cca1c37057f662eb7273cef65051dd0671b96f0 GIT binary patch literal 7344 zcmdU!-Etd65QXOj@(vpp!H@#;cS%vfmEntqQevxm=QVXJ==+Pj{d0Y5((Y`YPQ|ReG8x`aab6iT(y@oaVZprkO_GreW%9 ztgn%Sbf#~fA8T~1tAXb1Y3#mMx|4R&J>7ksM(HU1q0xzctJc_#?tjpSnct*OTC?l4 z&}z*8w)JEueXq6ebRg@Gu^Zp7Q!mx}JqVq~xz~DSrMsbUE={*&d}bIlyb>i8#G zckdZ!OKjkq;6QAQmX>}Ul4IjjeXwXHy}+>+78A_{`?n!Ix*deBdskR1uLSyU0wrSX z`gFBVZIZl7pPl0>XSiT$u~CI7b1U$0++AUGH^uq(EhhGZv!PVqsr z$Ejon>%u2;cmF{h`Jux;jh5@_vjJrkW`}#`=R@j`bYo zhxdO5RZ>FRYEE z#0~Z_3Y#r32yX0-q4q<1ICedXbA^G0x5?pm8{GS1i6I`i2rhG`U*E;nb>7BnF3P2# z$qwCQrEPJrhpgwF|F3)YpUv#srRHQ(B8`fac$>&WOHL+>^ur4?|Fo-|!fDj1&lP9X zYp&4nZK_&$sae6mI?lVfvdaEqIqdaF<-G6emG~YnBM@$(UL?L@X`=fwxn62M@og_8 z_Ga=l)~~h3nXb?ro_5_toX)gZN^+k=tO7S!Y$w z!(iaUI0@vczKJ=S`(#btB?HbS)3ntC`9%_%$upyqIgy*UGv-`3867*)(I{Pr;;G&B z8XifT=6N{BcvI&+<@n}_<~Mo8>Up%tnxl%`mUV4uT7BA?^&UsJYc-!-rpu!(IQ=Fx zc_Lr8hq=>7L{MkqTX+c70X|kbZ|yf+t+}@bHx#exE_T`yY~xAoH%e7jPP8|H{Zqw6 z!IislXCC`3{nXgYcio)d@SL0>+>yaT#mAcY;kkIN^kCcb>{;Eh|BF`D{#cUu)YX*F zqxlR(FV8vYO72kvU5Dh^_c^l{Px@JPkxzYX-nZ1A+l}on?~J;$V4rZ_`k4H;-cif{ zN1($)^#Ce#0EfEIeL$agn!9p3BhULkADoSk!UO2RaFHZm9>W> z+d11D^zj)x_rK`xjHAC*y2Esi-ShD|dv)*a>V=FH>`ryj&cUTy=d)JEhB{+YkFdLQ w{42>;H{#%#bRTxcsILOsUHJ?r0CIo+|5feA^-pY literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..3e65b1ff5 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {relaunchLater = id; relaunchNow = id; }; + CLASS = SUAutomaticUpdateAlert; + LANGUAGE = ObjC; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib/info.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 000000000..082030262 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,12 @@ + + + + + IBDocumentLocation + 136 94 356 240 0 0 1024 746 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..e4c7ba07d43f7a4acc01c7f0ed63e9fa13806abf GIT binary patch literal 6498 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 literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib/classes.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..0071ac077 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib/classes.nib @@ -0,0 +1,21 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + {CLASS = NSObject; LANGUAGE = ObjC; }, + { + ACTIONS = {installUpdate = id; remindMeLater = id; skipThisVersion = id; }; + CLASS = SUUpdateAlert; + LANGUAGE = ObjC; + OUTLETS = {description = NSTextField; releaseNotesView = WebView; }; + SUPERCLASS = NSWindowController; + }, + { + ACTIONS = {installUpdate = id; remindMeLater = id; skipThisVersion = id; }; + CLASS = SUUpdateAlertController; + LANGUAGE = ObjC; + OUTLETS = {releaseNotesView = id; }; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib/info.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib/info.nib new file mode 100644 index 000000000..2b25ad033 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..af7bfbb258d69eb70caf7842c3617e1162668df1 GIT binary patch literal 10712 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 M9aVoDzoozb51-pti~s-t literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/he.lproj/Sparkle.strings b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/he.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..60da7d5eeae976b1da182f4bb2881b762a1075fb GIT binary patch literal 6212 zcmds*UvFAR5XJXpU-Bt#tVT(r*8TTbRjrlgA*z&Cm8vR_#9#-NfMp=m-_pbohlUcz zazfxkwEdkK*7p)yE|z>PwL-w|-rc>sXV09OoxlDLpM|?23lBq!-%Wm>@~MSp=uqDY zyRN4*pYu5ZNR`V@rE~Dx@6ONSPAP(a^PUBG=P*ZsjM^>Itd$njE$CG$WeQZzqR{PUN z_v5~`%^3Nfk#A|;k8|F6D}3ee&>mu+r|+2IDE>ihtUmEDj%|JApJ5#&#o;dJA*96N z#^Ow#7>YWL9$#Uf!E1514aP0{>U5v+)yY=ifzEvWUvVA9eM9IuJAY#s4cPUeVIZsr z@kN|~n2^_O*M)-f;=Da&;m#?)#CoCNocx#-uExWvv91Y5EoKm7>xSrRY;;6kgU&1X zCKla+D`Lzj&TK8tDO=AOPKnFn;KAv5vA;}QwOet&`a%7qY?jeQxsW~G)PLK(I-4P z)*Ip^e9C)#ubY&X_PQ8_0%@mkXewqg@&zl=JQF_Hq|M~3o0n*x8?4W@=d9`^54oxr zx|wTI%vI+w9)PfRHY?y?)P0RB$4XY+o$K>imA%Z4ay2b;Kk^3h4T^rm_7>Kd`xWV3 z)x1oyzU5dUw`l3CNR16KdFO+83`VXiV21`Nh8dwe|7Em$cpF7C;+;pKQgHc|gn90d zc4=2{MFUrd@(HRvf`P8?Q&8O#kuNX`BEh$90Pq}9JO?2CyDAFqWjAXGMQE~?{?VH23ci44#e&QZ$ z)ICfQP_Em382=I^$EEq(dlp4*T7;M4up*K|(Qh>Q9aGN>w?wqBkIoI_)O4??c=92B zZ_^&ii><$BjXm&7cZj4(#ht994#mh)zAeT6`KhN~-P z@E&y+*R&i9=azpRt4e%T)-GqqL@_pTA~;z-uPmlqoE7v;qMxYZH)Rc!b-kQdIGY(r z`A20Zn#?B*l*y=5Px%bbWE9`3NWICu$TOz8 zoO%8fn_1O^>As{KLdphsmO(j$q8HRHAl;%S@czU+%}aX83Oq+zo`OH(?Air>iCJZF j>Jd8E4Yw_p$|&vF`FOnQ=UcSBeD~5~ao$lnwY`4;5_Id$ literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..3e65b1ff5 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {relaunchLater = id; relaunchNow = id; }; + CLASS = SUAutomaticUpdateAlert; + LANGUAGE = ObjC; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib/info.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 000000000..5a7568096 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,12 @@ + + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..b619eb4ab4539674743cea9361ae86faa9c1ca4f GIT binary patch literal 6380 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 l + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..4fbd2d684eebafe14748acfd3d9314067dfd9bf7 GIT binary patch literal 10634 zcmaia2YeJ&_x3Hj$@a|ll4N&=BGN({5Qv}&ND&Anp_jNxCdtZXH|}mIM)ZP$s4o@} z5ep@B0RaUYD2j@xpi~hR8!BQKd2NXN&z;!>1itsn{C0Qd&MoJj`T;09*RcF+9aa&W7xD~z%XW?Aj8yDk2crYH0N8nL#Hx54KxB|z}T{w;t zXfAHRQ}9$Y2T#M(@h!L!-->78JMa>`6feWeaT8vFSK?K8HC}_)qJ{WLydH1B8&MQ* z!q4Dm@r!snei^@p-@$wFr}#7cCH@M3gTKc=<6rR^{5$@eXo!}WiG`#QfjCJP=|Zwe z4#_9ik^W==8A^tckz@jyNMuq?YREKlD`8|Nxr5wEW|Mo#{p2CCkUT;jBTL9CvYKor zTgW!@0(p_VMBX5~$-Cq|vY#9v2gxDwJ~>K0CdbLwlOn32 zI<$%Ese#(aNouDK{+{}%1f{KLYkDCH4o z8|XB;h(1f7qtDY9=!LgD`X=2&66kCC7JZw(L-*2s z^j&&@9;Qb}wuv-^!=DN^WJVU0h6H3qHe^Q*0aa2j^h-fsy4zcs>3wDAXW}nZ*n0?7oW@5s0>%n;CqOcrG97Nqw0qTKzj!`Eg$H%ER5vbmT zdZNNf(7qv_h}NkS8PhzYazPka+$UNY4Yo*r5cP&puSM5^>XTj~zKo@+V-%x4D^MTQ z7ZrkDhcqODpvY1=F|wo-zSWlfP}xS*9}PeQ(G6%28jOaZ5;PPIL&MPsRLb-$!17rg zyM@hUPqVFT2YZ>l&fa0~v7)1B6dH}jps{EiNH88{qlst|Dn~b>AgTa`_Lbv_P$Zau z6#|9AS_}&&YDbrp4h~kx;c_7ZlpLxkhGh*!YFaQgN_CFVAo&L7UK(wPRmzO8OqMPX zmcjhYa12!;8C9biR11TL&`oGE3d0paQB;p^MllpeQ3cI>B}d5d`e>v|j={o|Hq^_p zDIs|(h@xl_#=1VjHB$v+P3ad7*2H1i`^e!i)b1M#)|5@Jhb4kqRUt)#%m|lVZ^b6& zV-9B0A4XF^oN5qcDwxr9bPH52ZK&Xb#Mxa8vGwd>Rol0s>sF%~=r(jaVrV9s#mvmY z(wM-k%*Il|FpBEy!?HN6Z$Gg<7*EI*(O|4fOn?C8LQaW1rcAs(QW>m|H-rI9RpPK{ zJW*O13)LsYDLGlWm$&gNZOR7r>nBdh&&s~Mf-gDXz&>S{zjT6zLSdQ1GCoWZg{$I% zlqLPI(5A65H@}mZ+arHQC$X^`+;+>KG2;XDA2bi$hweuYfR-La^U(sh9zqM@`(d;Q zJpzkSS{Vd0hu_5XunZamOeEw;f@{7g5~_m<$Kh>JI8+ni_66&stQ8=;(|X@}O2-hn`%8 zo2DI@)m;N z_M-#JN)-nyC)dQH4Uwuo(QuR-b{QDDat}HKBd?Ff65xfJwFjzW?N}$)hP7rQ>tfSz zgb3FmH0&@sjE=xa@1vvW19S|12%0Vp-6F#eM+rEEY6WPmiiRP?+On&xIuD32xS=vs z73?1if?w%e91T~g$~}%gX+oc%LTJq+$`SM#`W$_MPQU+e zFy<2}tq)epTyCIx;b@J5(+;e?kixEJ9Y>W;2d7Xs0iektp)@#zzK8x@=m+$p((~xr zP(mJ*oz+eK>wyHyI;yh$f<9{kc?vHU>Q{6|6^doC&U_5Oc(VHzg*FfICm*6X8#VX$ zH#)ZxokRa{ge$(5x9As=!&M5-dEDjRpFb!9V1$ABVN5PUdP@^-7A+4TL=xGFP$Dez z^06&!=qJLQ6HWL)MT>lckp1t&Zhi2Yb4UhpLu+aI7; zuPjb?)(x%#Hj*S3A70!E&cpf8 zQCHjz=3M}vo-pqP@O=&L1(=R2m`)l9xLK|Mz#v4EXgFL{mx!}MkgFIz*TB_hs2~)H z2=PyG@}rJ^Eg!unR4F`ZE5&82a2Xz%^rWNZiay~` zJ)azpD9Ky3>S#P>1s;RPDs(GJj*4Qj;B+2k_^(=RJf5%`PrwuLB(=|S!2`YaogN9+ zg(_8b6$fK+J_L9LK43H^tL6XFDSuFVyb%Xi;-K2w1ZbeFt@;|c9IiyyZNybr#?`n6 z*WwVq2~WmhT!$k#itAZ_Hh>LeH?To$FdM>3*ibf%4QC@*Dd!K#a6X`H$l%LEb6R~v z1w^;3hFG{WNDmROgF+8Rgeq%AZek)}9pWtK5?7!KHXfQ|K-Ml$fpHglEEm#YDkDb> zj*ku{YRkCQ{);oXlm6{;u_Tp(Kx;9X`(9or$%~--E4))DQP!{TQmEXr zrT>nXzUdQ;46TpOG4B) zq(rG;Y&!VA3lD0Ot$14#-UcoLWVkR+Tz&Z*ets2x9>1WP@@S~St$0k^iaa zak(T4y`+IvhgeURlEyG)-*PqMXo@w@NU>W z*@NH0Zz}{V3It1JQ&~NbLr$&&lrrTq}3RjN^D8eplsJ_&vNI9{`XaL=WOa zXg)rSkHB>l?}A;KWB5b-5&jq$*FOA-65c_**WcU_g2)UOqj2G(a6*njjwdV21+=la zA(4nil-QCB;4LW~CdWe2s!-)XAoDS32@&U_I!d?ARr<=X?#jxvbPF0$asZZKF}QAK z5y5Le4}WuJU3Z>M5%#dwHXT9;Y^QW`s9r3q4aLP|4tWu;!=IyL_ymgschfi~T+G}K z;;(@s9K(N_r@C3)jfs3U4g&F-zB+CbNZ~*;aRD2qgMR^|F{bOh<{S45Wq;C zA}2l*f!17jQmg-hPp`tKn@JG#rB(oq#$ghC4#_F>RO|m2|F#1Eb}?b+dQk}A6#(-m z0Ol+Jh5=w2uLPL$C`vGXi%~JiN&F;$Ttp-iX@$y3Ytn|aC0CJl%xD#}h~UFOUy zi8dw)=JASX_vr!2_bW)w&+XcRko6pVX2Nxd~O1$*7iuaXzU7tw;Et6yAUqkef-2#9f8-KyZsI6>To(NNP$3Q82r%Du>L^1*LWSpFtGuBWuYz@+9d6 zsn0R8p*e_>O`wWZY$aR4me~eeGaTXjPA25<*YUT_C_*(z4}eok(||6@OgtOGUm z<~Sky6nC%^l(QE0Wzcn8A1XR~Tg*$N4OebgD)8f_S zT-Z>p4OKxF(o>Ar!Wl=>BdVlPeFNd_vRBCjg?vlCCqFJH-?0~$lONa%Y&(D!!VcdU zRNO^1Bz1C(ufGxiOO(kJN29<@)eTN^8b95{S#iq@LGu6NS4knr`4X^*d6SYDR6|YA zOZEfFU*s(L8|HZqX4#AFWUsMT*)EvbvV#H+m0u*+i8`qp)`_~<+smnk zy~Va)qDGWWGiWA^?}yQQgX-U9d)Yo1do6UGoNtvJSGM~BL_A@K1-+!CWeG`d+ExMS zTDG5qbo@mXm1saa&>l|_2lk^1oI-lxvk;xPL#+P`TS+154LQdwpacep7R!Jj%mt!g zgr)5UQE)BLg@fwa72>f?dWEtPTrpe^N)`J|~}7n_lM@#_n%a@9GF@2Oi zMjxk7&?R&!T}GGFCc1*I#PjHCx`wW$>*$koJ>7usqfgOIbTi#TpQg{yt?VoIH9N_^ zVW-%)>^t^7`+@z)equkv=EyJXH2amEVgF^nvEN~<b(EnyWNjGzFSIngN>8nj1B7&8?cdG;=lgXclN5)vVEM)I6&>pgE*D zqB*KLruj&7T=S{sbIl3OSDKTWQ=0EIKWGhFkG7SzgLa^{R69XCNqeKVLR+P+*4Aoo z(%!FKuHC5JrroLCqkT{Nk@jotH`;Ht-)n!+{;WN%J)`|i`+JHm#h&6!ai@4w(o@=` zb%tXsY_FzO5L3Lbn4dB9jW_MkEMQ=`l~KgC+NJowz^zhp{}29gl>YaQWw?D z)!nCCrdy}mtlOhIsyn0mP4|cHFWuj|fAmP7sSoHSeQSLieLH=7eMkNE`fB|x`Z@Xs z^h@;1^iBGe`qlci`X}|9^jr1Y^t<)@^oRAw^c-ioZVVB``!%@SRhLeUzHEHk_^I)f@mJ%2jlUcJG@dn{GoCjg z6E$f~sV2S2XcA4WOl?e8nXWcrjO`}bfCfQVD3YjLG>P%77G*hE#hUs?G zTGJNOPSak~yQcl7gQml#_e~#|J~aJc`pxvG>8$CT*=KHJ&N644bItkYZss25LUTX! zc=JSaxjAUAG~a5TZGOP~xOt6vv-vsmZu7h5qvkKo=Ph=NXlZZBwOnf%V5zjomKsaQ zGTBmRiCS*9#4Qb$sg~)MM#~J#?Uu(aPgy>){A@X!=1t2>8=V$UyFYDB+Sat4X}i<* zq`jTCH|<#3=V^bW{gw82+CKskh@cTt1Ra>2Nw5fQg?2)Fp`*}Q=py6@c|upAyU;@@ z6nY86g=%4j@Tl;baNKINwzd{p%dB@;@3hXhK4g8^`iOP0waL29y3@MXdc^vn^_2Cr z^_)#>v)CkC2V0J9fNiX8yltYb+!nOmW@ENlwmWUJZF6n+*#2W%W&6ZXhW$4s{N9mO4i|?{O}1Zg#%t+~a)TdBXX#^DkGb%j(K> z<+-}Ly1RO~3SGTi*Sd;aeOv=vH@F77N?ajVqw7xBJlA~JL#`)Wn_W-4wz{5mJ@0za zwZrwY>lN27*Xyp&T_;>$xlX#iaeeFh-ksuZ=Wg%r=R+{``8eTRFt`!4q~_YwC|_c8ZJ?&I!H-JiQpxKF#!c-niqc?NjOJd-?O&lJxz z&n=!?J-2z7XO`zq&uq_Kp1VEsJqtaHJc~U|o>iVTo^_sAJa2jSd%pGj;Z>RsVo=iTky<9*w^*SpXA zp7((FTVKE@`C9wh`r7&0`?7r5zFc2-U(9!hZ?^9)-#xwszNNn9z7@U=zHPo2efxbs z_ zIWKcV=Dy7LG7n@P$~=;JH1k;IN11>7o&Hw-w*Geh4*pL5EdLyt1a1o~3@i#P4m=ikBCs^DJg_3LDzGN7F0ekZF|arAe&9slm%v$3C;G&8 zVvg8TEEIc*{lxy_KyidPPrP4zP+TA`6c>q$#mB@a#HHeLafP@_TqCX%*NYp)P2v{u z8F8EVocMycU3^L0DZVPcCcYuQDejkyl37ZVtdd=FN^Z$3rAwJoK$4`^Qd_B=)L!Z+ zb(XqFIZ~d~Rq8JFkP4+<(zQ~N)JM8r>MsqH21!Gtq0(@vR2nIbmc~lsrHN9x6qG6@ zS*npj(qySlib^+2aj8MNO}bs0DcvL8E6tN0mKI5ir6y?&?D@hUf#jM0(GS(%=5OiQ F{{sk2E0_QP literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/hu.lproj/Sparkle.strings b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/hu.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..08538d327d37fcaf8b4876aa849da42eaf407b6e GIT binary patch literal 6910 zcmeHM+iuf95S{0Kg&Tni6$-aUgdi$?sE`V(gis&d*hwwYIEs^o{5){ZOqN|YQR;?l zf&{7@d+)PnX3xw{fBcl^ax96QONrkuesA!X%TOjLk7SIRTPY+%U51(~nd6u3ebf%| zm7`A^b;p?LKw9z`r57@go_s@XiFZ<~YoYuW4|~3pM=N{3s@1pT4Q4)wAnALRjlb8D zN`?28?r4ZF?ydp~DfTizEq9-yj_(;-S!?|hAdsUiQ*0)R

9bv=gE4isb}jh%C|I ziZ=HcZIv9N{1xM-n3MC*^*ceS0E!%AvvQpQR+?hoE@bBXC8T)=H0!9^&WPjgclUa+ z>b7?n-wF!of~Q~#jS_2~g26(o*Qy8VbB2d|OK>u1{S~xSqA%^^77uMBg(cBy+V^NC z&WgK2%B*kIz7u)!+lqO%h?H6WQ)P=L)}ET-SvIA_#d@qsKv3|4m4mqy3C+1UTEsI4g-GO z_PqPuJvFq7SvT47y18QQlKzn1kr5*JS$^D+OFLO=&k5Oold;(9iyJT885}w!Y<|dJJ9E8mjojrJ^JD{{@9)XR0hVFtYYU^)x_2Y9|Jht|c6oyH%Nsc3OYd#!wXs%aRNK`E z+QqpcLPXl`qW<>H_Ao@(&pkN9t3}?A+z@ zbuu>}5l7-PU~G0_*(;aNx=>5@c_nYt%}4A);wE-cmw4TXI1-=3mOXw}inG!u`53HZ zr8q0mKI-{R;_59aWbGz><4F0X7TKP{r`X*ilx|(0*it!LWd7G%h?l6|9!Hw>c{j^U zTZV{n=w_Z~Ih*71*~}=>r*o&wJ{2gt9F%3B!c}=A8N&Zt2A(&*o@$i&9~Yyo&Q>Lw wY3JC`WBiMIk7Grbu#76OVONf|8viqLq%oq!gYN$!?j9SS@JsOT{k>JvUjc}EOaK4? literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..3e65b1ff5 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {relaunchLater = id; relaunchNow = id; }; + CLASS = SUAutomaticUpdateAlert; + LANGUAGE = ObjC; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib/info.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 000000000..5a7568096 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,12 @@ + + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..b619eb4ab4539674743cea9361ae86faa9c1ca4f GIT binary patch literal 6380 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 l + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/id.lproj/SUUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/id.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..c815112f63daa8433d72635d772f429a05988ce6 GIT binary patch literal 10634 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 EKL&p+B>(^b literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/id.lproj/Sparkle.strings b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/id.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..08538d327d37fcaf8b4876aa849da42eaf407b6e GIT binary patch literal 6910 zcmeHM+iuf95S{0Kg&Tni6$-aUgdi$?sE`V(gis&d*hwwYIEs^o{5){ZOqN|YQR;?l zf&{7@d+)PnX3xw{fBcl^ax96QONrkuesA!X%TOjLk7SIRTPY+%U51(~nd6u3ebf%| zm7`A^b;p?LKw9z`r57@go_s@XiFZ<~YoYuW4|~3pM=N{3s@1pT4Q4)wAnALRjlb8D zN`?28?r4ZF?ydp~DfTizEq9-yj_(;-S!?|hAdsUiQ*0)R

9bv=gE4isb}jh%C|I ziZ=HcZIv9N{1xM-n3MC*^*ceS0E!%AvvQpQR+?hoE@bBXC8T)=H0!9^&WPjgclUa+ z>b7?n-wF!of~Q~#jS_2~g26(o*Qy8VbB2d|OK>u1{S~xSqA%^^77uMBg(cBy+V^NC z&WgK2%B*kIz7u)!+lqO%h?H6WQ)P=L)}ET-SvIA_#d@qsKv3|4m4mqy3C+1UTEsI4g-GO z_PqPuJvFq7SvT47y18QQlKzn1kr5*JS$^D+OFLO=&k5Oold;(9iyJT885}w!Y<|dJJ9E8mjojrJ^JD{{@9)XR0hVFtYYU^)x_2Y9|Jht|c6oyH%Nsc3OYd#!wXs%aRNK`E z+QqpcLPXl`qW<>H_Ao@(&pkN9t3}?A+z@ zbuu>}5l7-PU~G0_*(;aNx=>5@c_nYt%}4A);wE-cmw4TXI1-=3mOXw}inG!u`53HZ zr8q0mKI-{R;_59aWbGz><4F0X7TKP{r`X*ilx|(0*it!LWd7G%h?l6|9!Hw>c{j^U zTZV{n=w_Z~Ih*71*~}=>r*o&wJ{2gt9F%3B!c}=A8N&Zt2A(&*o@$i&9~Yyo&Q>Lw wY3JC`WBiMIk7Grbu#76OVONf|8viqLq%oq!gYN$!?j9SS@JsOT{k>JvUjc}EOaK4? literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..3e65b1ff5 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {relaunchLater = id; relaunchNow = id; }; + CLASS = SUAutomaticUpdateAlert; + LANGUAGE = ObjC; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib/info.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 000000000..5a7568096 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,12 @@ + + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..b619eb4ab4539674743cea9361ae86faa9c1ca4f GIT binary patch literal 6380 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 l + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..44b9da5f9eb0dc93032562a5294da0ab7e618ac3 GIT binary patch literal 10634 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 CXDjvq literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/is.lproj/Sparkle.strings b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/is.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..85c1567de213c5d7f3da25097397e45d4fa60604 GIT binary patch literal 6942 zcmeI1OK)366vt=XPjM4bwNwyZON78Gk*JUYq5{N*mJ z|L+`6XRZ^4AUZY+WZC!5nb(>BdCu|b&+t)r5UOw#7WzHb?+bkQ|5Vhu-Xa$HK6UQ{e`}a{3N_L7+tSN ze>$M=htIY0odTSGWxVlw7V6OI`P5D{*Bhs6g+i^f%tYn%wP-w->V@j#D?BZ{#H_2 zXe|2iQeSkVmL{P!2Y(|O<|D;F!ZXcr#Hw(q)lb7KSpyn}u1usmmD;b2!pf&=`|OpT ztv

`Xhx;$kie`)><3*Tw5lsKWiXI*p})o7=(r;_!C5KQ>LD3)O{Iz)GejgPSbC zab$?6M^K zV1n%355RFk_gp=VPJm7)4Rt@VR1fGS&(dioty(_+To_Mf1+_-FX5X_t&?&6qSoDS7 zF2bH>jEt6iR%7}%*H~hNM*v~~xUfQNaRFagtA8TjRfR|9_mN~5KCrPq%Kab~(rP!X z!|ee1b24^;+8D3!giQU(d1gAx&;s#>|D$$0)XHe?ND^=_dewi%Y~i*sYcKPz?|R+c zo*oHZ=SlMuA1P`KV+Auj-vUARbVDD<{8A?)Qn4pFBbK<3r%16Bk3F`?8a)F~k9g!# z$=l$szZZp^%CjgeoV*i{L40K=pTT~)g^#RnS6u84S;qwL3|3P;$=clm_ws^c!xs+^ z)qNx$IC}WfnD2tW-AQAqXi63c-k$#xp@^GNCMn)FqBEMDsI(Ne$=81aefJy*b#A#= zGs!58leN^gDTnQGSW+UJKE|WhOui`HjNJ!#P2tpf$V~Hy=HC0?tySif4`sjHxydQh zUHcnl|D8VMw)opO#iHv&%g>K3ca9lujuUwM9n>Q#bp`tK%D_mpGf|15>2AZQb47&L zl1Qu5ardpl@A@{PadRMw^tMtNY`+%gOYIVGcF|h%^Bu@H=5hXUcJGR}=R6nci%H_p z>N%VK{3c#ULU(0%M34sitC*L{${q>Vlw*-Wc?IhS)8tf1N;>^mJ>B|7>wKbF+~iyz z;GZlL{c4J#JmmX!8Uf#)-;f_}4`Z+#R{!8Pp`LrVA2+NGG|38Psux|Ft#O0B5VG90 z<7vo(JFV$B^r2i9eJtN$*1o9*PSGCP5J%6|`qtKU#^xp+;7J4N*5*J)5W z+!K#c*QpXGN#uGn6_4Iq2Cthd(O$jwIue;H^&l$!|12t9t@*^7H+3iM7aXWjP1TN- zDz8!HyK;w_%htV0&mHl^q)W9lW_8Z7|EtjtqDWrJtF6-Kr|{|+@f@VRh7K1VJ;6U# z2KxUc?xfL&c2@N|6tB>q>%*Ebn}V)Qy=c>^xUmLKmIooEj+jCUkBK` Wj(}M%HLsdJQ)M00f78lut^6+q*qg@y literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..3e65b1ff5 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {relaunchLater = id; relaunchNow = id; }; + CLASS = SUAutomaticUpdateAlert; + LANGUAGE = ObjC; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/info.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 000000000..5a7568096 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,12 @@ + + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..53fa5b31973f6c55c9bc07b504987781350fe54f GIT binary patch literal 6415 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 T(jTXOTT;)n^mEUzcgBAJl~#x8 literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/classes.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..0071ac077 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/classes.nib @@ -0,0 +1,21 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + {CLASS = NSObject; LANGUAGE = ObjC; }, + { + ACTIONS = {installUpdate = id; remindMeLater = id; skipThisVersion = id; }; + CLASS = SUUpdateAlert; + LANGUAGE = ObjC; + OUTLETS = {description = NSTextField; releaseNotesView = WebView; }; + SUPERCLASS = NSWindowController; + }, + { + ACTIONS = {installUpdate = id; remindMeLater = id; skipThisVersion = id; }; + CLASS = SUUpdateAlertController; + LANGUAGE = ObjC; + OUTLETS = {releaseNotesView = id; }; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/info.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/info.nib new file mode 100644 index 000000000..2b25ad033 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..0e8d6a6ae40560056863267417ab47cac563c677 GIT binary patch literal 10700 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 literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..7a5a38459fa813dc813331b9d9272159f1e953ce GIT binary patch literal 7170 zcmdU!-HsbY5QY0XPvNXUh6pVLE)gQDWiM7pAGK!8CSe}dx?YBrMmAv@ z#u^)I=A3Hmkyd&TPQu5!`XbE2>+rKi7y2G_#!htojo!?B96svI zu0s=Nf7uy7314gF2L&{J5~cC^CRCx;_p4~pT)(ic77CSYnQ0X3D~<7eqq~fH{y+#! zbZ;E7Sw|!rJv-5T5c)M@xz;lv3mQoD+AH0w!$V#Fq~{u~$@;hP_dr)up~y2{6*)6W zYP9Z1IDpFpS4U2*)mPyU{j%?g10usH3?;d~yH0az zjbWSTZDPFed#q8c{c5WPR=&`zCXTQ4S!piOg-oP_;Y6z;1DneGeJWYReIpIf0efd# zKfZ}N;lZ1z6&bP7uT`{np}Afg~@wH@vYRWe3XO&$Uj4vhOuPE(0 z=G{U%%r%$jG|si=pwU!XppEtTQ203t`_LGKPwt|b90NaRz^9Ql4vG4)EW43yGkp^w zMUU2pktHwV?tTlY084Ep6Zj2$*0+u0#QLwg7 z1FeK^AOR~bcQOy&LynQcw?jSKY@eQn-}I{Vw%ta=KE}h&b4JO3xIS6c#f9wieO7NH znpXz9E6If?2GRhIrH-H*2o5z))deLiMXDo~dTi9-8vJDTWgMmg4YXw?>cLdcnst$7 zTfq?h(GMwoSSE?sZ=6BDiinoskTYp)X5Hnx+%w?8L+bLw7UN#XPOJcJvm^HU+FtZ1 zxZ}|-pMyi-rPjl|>Pf|vUEwvEN_n(;2?OZLwdC3JZGSU8rjxunI!HVj6u zNj@(W%ef-M_hV^EoSSFvd(=66s+rFe>GWdmzQ_>zRWgf=KoXe@yU?}fuIWm5-6uIB zrec@Gj44msS~?=oid;6ol4HBNWfnlY=enPI>ayAOeoT!9Q4UHl2c4J^ZlvXSi<3KH zb1j^ZD#h{9CT7um6uk*MW;Vt@Sd;Zmo^T~^6cN-u#|FGh?7<1CADhPhr0cQF4zS27 zW*1RZiVNQF#hb|b#5~c-PJ@V~ZYN*ndcV>*HG&8~zW0XGB31O{8)sFnr&(kCgU2z*lAB@rUqzOOmh3NcyqUk6#Eu@0Hrv=TUc2`zskw zmew^zJp0G&k+XNQhtCB|>9zl)(ffLzkkKXoyNY-Jd@G&gQv>Kqz=YZc@1#>XpU1VO zvd^MI_~eEi?Ca=pPQ+5bXpOyFX*v}rpICZLaOIyC&QtQqkt;D#lFznw&q)7U6$TA# z#&(}uapJ>H9Q!xQQ%(SvveW0QyZ;8bGu_pgF074D+OIk4L5%yH+vNX}o + + + + IBDocumentLocation + 136 94 356 240 0 0 1024 746 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..d31704664714e4cf26e714745c86b2a4fa1dddc8 GIT binary patch literal 6450 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 + + + + IBDocumentLocation + 531 94 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..00b088deefe357bbd8b8ecb196628b870b2e1913 GIT binary patch literal 10724 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 + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..b619eb4ab4539674743cea9361ae86faa9c1ca4f GIT binary patch literal 6380 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 l + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..aeb4628f8848d1b5d132b2d8fb75b92706c1905c GIT binary patch literal 10634 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 literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ko.lproj/Sparkle.strings b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ko.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..08538d327d37fcaf8b4876aa849da42eaf407b6e GIT binary patch literal 6910 zcmeHM+iuf95S{0Kg&Tni6$-aUgdi$?sE`V(gis&d*hwwYIEs^o{5){ZOqN|YQR;?l zf&{7@d+)PnX3xw{fBcl^ax96QONrkuesA!X%TOjLk7SIRTPY+%U51(~nd6u3ebf%| zm7`A^b;p?LKw9z`r57@go_s@XiFZ<~YoYuW4|~3pM=N{3s@1pT4Q4)wAnALRjlb8D zN`?28?r4ZF?ydp~DfTizEq9-yj_(;-S!?|hAdsUiQ*0)R

9bv=gE4isb}jh%C|I ziZ=HcZIv9N{1xM-n3MC*^*ceS0E!%AvvQpQR+?hoE@bBXC8T)=H0!9^&WPjgclUa+ z>b7?n-wF!of~Q~#jS_2~g26(o*Qy8VbB2d|OK>u1{S~xSqA%^^77uMBg(cBy+V^NC z&WgK2%B*kIz7u)!+lqO%h?H6WQ)P=L)}ET-SvIA_#d@qsKv3|4m4mqy3C+1UTEsI4g-GO z_PqPuJvFq7SvT47y18QQlKzn1kr5*JS$^D+OFLO=&k5Oold;(9iyJT885}w!Y<|dJJ9E8mjojrJ^JD{{@9)XR0hVFtYYU^)x_2Y9|Jht|c6oyH%Nsc3OYd#!wXs%aRNK`E z+QqpcLPXl`qW<>H_Ao@(&pkN9t3}?A+z@ zbuu>}5l7-PU~G0_*(;aNx=>5@c_nYt%}4A);wE-cmw4TXI1-=3mOXw}inG!u`53HZ zr8q0mKI-{R;_59aWbGz><4F0X7TKP{r`X*ilx|(0*it!LWd7G%h?l6|9!Hw>c{j^U zTZV{n=w_Z~Ih*71*~}=>r*o&wJ{2gt9F%3B!c}=A8N&Zt2A(&*o@$i&9~Yyo&Q>Lw wY3JC`WBiMIk7Grbu#76OVONf|8viqLq%oq!gYN$!?j9SS@JsOT{k>JvUjc}EOaK4? literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..3e65b1ff5 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {relaunchLater = id; relaunchNow = id; }; + CLASS = SUAutomaticUpdateAlert; + LANGUAGE = ObjC; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/info.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 000000000..5a7568096 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,12 @@ + + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..b619eb4ab4539674743cea9361ae86faa9c1ca4f GIT binary patch literal 6380 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 l + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..26b2e8affa01d31ba0c939981a08e61da60cc167 GIT binary patch literal 10634 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 literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..08538d327d37fcaf8b4876aa849da42eaf407b6e GIT binary patch literal 6910 zcmeHM+iuf95S{0Kg&Tni6$-aUgdi$?sE`V(gis&d*hwwYIEs^o{5){ZOqN|YQR;?l zf&{7@d+)PnX3xw{fBcl^ax96QONrkuesA!X%TOjLk7SIRTPY+%U51(~nd6u3ebf%| zm7`A^b;p?LKw9z`r57@go_s@XiFZ<~YoYuW4|~3pM=N{3s@1pT4Q4)wAnALRjlb8D zN`?28?r4ZF?ydp~DfTizEq9-yj_(;-S!?|hAdsUiQ*0)R

9bv=gE4isb}jh%C|I ziZ=HcZIv9N{1xM-n3MC*^*ceS0E!%AvvQpQR+?hoE@bBXC8T)=H0!9^&WPjgclUa+ z>b7?n-wF!of~Q~#jS_2~g26(o*Qy8VbB2d|OK>u1{S~xSqA%^^77uMBg(cBy+V^NC z&WgK2%B*kIz7u)!+lqO%h?H6WQ)P=L)}ET-SvIA_#d@qsKv3|4m4mqy3C+1UTEsI4g-GO z_PqPuJvFq7SvT47y18QQlKzn1kr5*JS$^D+OFLO=&k5Oold;(9iyJT885}w!Y<|dJJ9E8mjojrJ^JD{{@9)XR0hVFtYYU^)x_2Y9|Jht|c6oyH%Nsc3OYd#!wXs%aRNK`E z+QqpcLPXl`qW<>H_Ao@(&pkN9t3}?A+z@ zbuu>}5l7-PU~G0_*(;aNx=>5@c_nYt%}4A);wE-cmw4TXI1-=3mOXw}inG!u`53HZ zr8q0mKI-{R;_59aWbGz><4F0X7TKP{r`X*ilx|(0*it!LWd7G%h?l6|9!Hw>c{j^U zTZV{n=w_Z~Ih*71*~}=>r*o&wJ{2gt9F%3B!c}=A8N&Zt2A(&*o@$i&9~Yyo&Q>Lw wY3JC`WBiMIk7Grbu#76OVONf|8viqLq%oq!gYN$!?j9SS@JsOT{k>JvUjc}EOaK4? literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..3e65b1ff5 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {relaunchLater = id; relaunchNow = id; }; + CLASS = SUAutomaticUpdateAlert; + LANGUAGE = ObjC; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib/info.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 000000000..5a7568096 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,12 @@ + + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..b619eb4ab4539674743cea9361ae86faa9c1ca4f GIT binary patch literal 6380 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 l + + + + IBDocumentLocation + 528 61 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/no.lproj/SUUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/no.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..36947a7baefd002f3c19113796b1c9bffc5eb7d3 GIT binary patch literal 10634 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 D8Fwp~ literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/no.lproj/Sparkle.strings b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/no.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..2c989294dd85e83ffb44c00a75fdc2ee2e8b05eb GIT binary patch literal 7056 zcmdUz-HsbY5QY0XPcc~$0TBv+mk5Pbb|pg4CIS(ZORw#99K2)8W5?u8c>&%bS0v}_ zvqg{X(e4syj3Ub(Pybe(sybEO|GZ0Iru(T%XKAkAp?)v*8K*j}^u9<-wY*N#G*a70 zE$8Wte(9g6wbs9}#yn8leXVpS9i@AE`zp=SMfyXnb3LoAwj;fNuP-CNPM>s+{${KF zD1E1u@AM$)4_P*TU#3B7^gPcR)%u5ajZhd!mzi48exNp<8}-ua@s$u5t8bLCS!E>G znmblM2>qF{Txkx-f(AQ!?WOvfbXV`cYu;LGvi_U=ztY=OC^E;Zvd>IAt+nn@GPC|% z(mWKJ+o)PIa18C18gZUiTxEH7^+OWuHPJ6Nt+X?H@ekRp?NWPVSM)*yWSeAMn0GII zd$nWH&TGx(ON%Q#1G|ydYU99Ki}bgCYaw7MYrUgg{~j=vK19G;8iO+tFuSto%d96l zZ}dgCN>PDkjgXmZEWYttUvwK}oX7I)>#bsBh%Dx#bHUVzPtvR0JJBz`z_aZ9D(}o} zb~+S7_P8#6tMu8wo=ZG|kiGqLNq9RCA7y{8rR`iR5DU|c_U-)Kh~hKhv-=1lr9BTB z@$T?iOZk`ZY;x4m=aH<3UBlyx&CCmj@KTV$KOFOTV8M8yo~76YA1)qg&e*6246%h< zR+`D%Ajc$rHPnAR4p06x?=jLFQ83JNma;1xb)4G@KfwmIK5z-~58K1{1ASQm9I@b~ zTJYV6dV8ElV9!(?;6kk@iu}2;>p+ZJ<%|^iu7N2Dd}nXDw+Kl8W3JQrSk%QsgvxkZYAC``9gE zz6o7jFYVW)VHu-v7@JUO1#dZO8`S~SG-f606u#{`6-FY?LQYN!9~v$FWy)GI?J^Tp z0Vi*GEKb%~CGI4sx~PUZJC{?|(@y4a1~B8tX`b2653o3u+9a>k4{txpI}EkwtR?NS z;^tg>aMtY$-A9>Yhw_tBEw`}-XP;lmZmv=3Z{H|9SA>%}U9~zd<8@KZcJsCIh8gfc zk12cfccwqlUK`mnPLL7HZLJ?D4%)TD&(a*(EOSInw_Y)~A5S^Ww?(^|;5yl#Np_!Y zsAyp9KzlcX_AB{gVQ%~SW-RW?e#u^6?yO3*ZqG3GzJDryvU?-cSDb9iavPu7o`LkC zL09$CFZO5h`GV`2B$@WcC{NRq)?R+=Cl>IW;C^Rf>{5KJ&HPUk@37bQxqW-QZPed6 z=(kqYTBTD-vatP_dySaxhUb8Eiz1d^>vG4Ua-o7Qb-Kl=Li~8?b zZ2!I~?$){UqMiT^?#HHjCj;O??8aSi*_9JVEp~PNz=@RG8{eqJ`0o3(D&Gt-x1Dji zZW-A>ZZJ5-vX@VmoMLa6Z`)Pke$MT>Q{tZANR<5Uy?nx@kGnn2TjQK*>_4um0v9S9 zq@QM72Ku*uJLVhiI^)ofN4=1QP0Oc$l4gBnj2E*0TDPU}zU$YxUyZ!mj{6gh^&QE6 Jc3zdr^F0HfqH6#E literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..3e65b1ff5 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {relaunchLater = id; relaunchNow = id; }; + CLASS = SUAutomaticUpdateAlert; + LANGUAGE = ObjC; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib/info.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 000000000..082030262 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,12 @@ + + + + + IBDocumentLocation + 136 94 356 240 0 0 1024 746 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..6da4ab11da41b3eba731161f1225a4d005b8e755 GIT binary patch literal 6565 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 literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib/classes.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..0071ac077 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib/classes.nib @@ -0,0 +1,21 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + {CLASS = NSObject; LANGUAGE = ObjC; }, + { + ACTIONS = {installUpdate = id; remindMeLater = id; skipThisVersion = id; }; + CLASS = SUUpdateAlert; + LANGUAGE = ObjC; + OUTLETS = {description = NSTextField; releaseNotesView = WebView; }; + SUPERCLASS = NSWindowController; + }, + { + ACTIONS = {installUpdate = id; remindMeLater = id; skipThisVersion = id; }; + CLASS = SUUpdateAlertController; + LANGUAGE = ObjC; + OUTLETS = {releaseNotesView = id; }; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib/info.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib/info.nib new file mode 100644 index 000000000..2b25ad033 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..dc2fbf34b20611c7a4057cbb3e394fb0d5f4cd58 GIT binary patch literal 10720 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 literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/pl.lproj/Sparkle.strings b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/pl.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..32c75670bc6277f736e5fb06aaa2d9c37458ce56 GIT binary patch literal 7076 zcmdU!+izP%5XSdBAfEaM0-jwbFyI8y>0kbr^+{aIW5ozB{$PUA2GEn~~py&uXKW zHul?E?{4^B>po~f&Yx^IKHr8i%=Fzgea8BQZZly}N|TX#(Y;h3-wQpZ*T;9H|3J_B zhRob>tTcC^=iu{~AvxC^a0Lr?^tGpYHVY5ceyw?x)@1#6_Pe9jP#7}DS7o1(cB-^) zPcpOqMAG~yEbExMX5h%LrAFC)#eucTns%&!W}NF#?{2XpDVF-p&ZnBo?hAX~*RM{f ziuY>uG@?}N()##xX;|rkQNpD%Ik72L8|$;ulSkn@lMKBNwG%s|PfufJYWuFYRwzEz zlYAeSaIRTXNwPE?+P9UVWJF%{<3#Y3k?Am(4)N3%rVBoFW%A9WI|yM#S9)VXrR)vc z+WWxyo!zW8)||5y&O)mAMC)-TI$fRGWf)rzdr#GOrWR{&3ll&8bsBcU6Cs3!yRU(X zd%_oz@P5{ho(t(d(l_3QwSw<$A9$7{VkeUjbk3>!#}nDkdY{0))7%?eH9A?bYjBqx zW3yds)GT;=_6lNnlw$-|@SJ0RX*Pmi&h(15={&QLtYFI-c~7+LQZ{y}6Bx?=OFi>> zk8O{>TKGfH=1he<{=IK~iPPYOv0m`&sh$%bh!7yk3NwouaAm3I1Nn3(ys#0R^E`ZM zV||oc)Kon)?FPdQjCrsQG-DTfVF&bJFL>Pb059JSzSvPqr@i_<*J`j=sTG{#-9p)CGlq_Fj(F4`y+C+)G)zG*(N^Jp?}%tbim`$YVQ8881SMDm;o_^ruFjaH#wXTuex_mKdDZ3;` z^Q;U;z@K0kKUH!qW_T`}vZ>c*#dDplJl(RVZgHR%yTj^zNdymoaK3-3{xkLX-gw!y zStOo#Z5bBxuZyL5$3SD-^oS25iR_-of(`sf&hNOwfc+IZuBCG*{J3q5J(40HoE(`2 zNs~;DJoW;6JGb#YvhkjUaz1ZAn$uZGR`Nxnir**Do;VxND8=WgX*RSdzb(thLzl7= zu=bmR-zc2-OPv*H59I-sqUy)u6FKV67zu4`i!7j?kH%9tS)JCl@L%s0o~Mx;{C^N{ za*0Q#kt`(Lpg}q2EM!Pzu-uUoD<5z0YW!m%mM)7oD_m$H{$? zj4x#!o`GTe+}hg80}i!5c_-DDnBC?$gE6w?H3y#ORfCw9&eZSOE)@XJ1~+r)?HJh1 zTqE1ES3BsFx#V6LeKbd4Pacrx`J7ExKI&1#YZdF`#GvzeYmz^=%21QZ?~?nK*8fS-kc z-&o1x{XU+Lj`??cx3A+`R{UJ7>Gzae%7dG`!X^)GGcF|wqh)g+O?IqW8hNX?2k2p-h8$WLRH%PY6}uH0|N#;q_Mc6MTC zOuUGh-uikNwId=QnODL)##r`|eKP_dtn6EU;1%95Dc)Eeag9wCRHw)W z^LuHXU5R>VU*1_Us!I`Ppw~ndCaTcxbzVX8JYg#NxD7jJd$lU!kmqxyR&iw7v9Uj- z;Vi@bcS(D$c3Znq)qX6?Ap0bG$C_!pGv|zOZ2z2)kNW={dF + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..b619eb4ab4539674743cea9361ae86faa9c1ca4f GIT binary patch literal 6380 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 l + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..b2f8b50abe452bdb19173eb17458f1da6d65a777 GIT binary patch literal 10634 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 literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..7c8b8eae513b3a25a6d325791888542e21555681 GIT binary patch literal 6922 zcmeI1T~k|C6o&W3zUpPw8)vKsP^%rqK#R?k(lkLv85A669H*Bl2{dDxFeEAR=hf$3 zD<}Je&<-8h;Dy7SbF#nJe%JTnufM~$;Xx?Eei-sT4qbaXmg)Fy+WW(pT1{|s@LZipwMNk zWB7~>%?WF}j0>ed4bL%agsu?LiN5zKW23M{`*+q&*i-wT+wX!_4b0r^dcqAKbBuP@Unm7|zkny{*7Mpyx<9BhxzRlR8Z!12F>v1z~@T*3DgLc!} zkLWpw2lTBo`kdanT2l?G@>yry6hI+HjVW@DWNiVlCzoOdwcx)IpRmI&d=RqV*i4sVr@4rq7`NaVJgM2-@*WwR6t@sn|XK`(gpLOO+Lv!**h)F8lB1kq9_9rH#ufcFskyW=SXUMOx zO*UrCO10W}fD<^-Lm%4Aa2daEXLM*uKMv_1^6T6zSkwBF^*S{>HDInhhWi6~gf@?M z7@3!lRctff1*0PDn$HlQ$Kh+6>$BV}=)6?_mYY=tHY> z-AkTOeo^tG^l*rsNIq58ykj1=vZXsoVOZ%Q1^V^{B_PB9|FI6-s+4Vd? z{z+c5+bhp4x6xna-ijz^-X`87@_$NJpxiB&U){F2{Lo_N zGP12AB&0nHO?kJ*E46|6Dfy%FOy!XWZ_QSeYc`mn+~zS^O@rJ>IZn*DF63RF`EAF2=uWxvem0KmSY_v;MSmB?1!y+Gvj*kj!yZp9?iXKV zqj48ZT^_t%RaUTmH3?3Yq$JBLP?#zb^{JFd78)iu8x@&oQHxN{n@i^BslSR$BU*e z{M%eayMr(BoTG~Qz4#+iuqImp;)}JJgN&Fb`bybV?RUln{KjIX$TPHDym@!^%`4Mh z8B#Q=3XdxJ@8@q8t2kvnTa_evcA=rFQ;&98d-AGN^;G301EK)0z$@=NGXARWQ$}h| zvH#a%GUpw!>PGtCJS4#XWZN|3pw{FrSyazq9*+h<0F&Br_i8^qSMx-*Q<+OMf`cX(*7$ljV|zP(CbzGeAV6; p@O_k|G?eW;I{X5=Gzs@D4)mC>{BK8@t5&sn#jw1d8v4xE{sT;BJ#hd4 literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..3e65b1ff5 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {relaunchLater = id; relaunchNow = id; }; + CLASS = SUAutomaticUpdateAlert; + LANGUAGE = ObjC; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib/info.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 000000000..082030262 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,12 @@ + + + + + IBDocumentLocation + 136 94 356 240 0 0 1024 746 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..7a79f4dc117e0ee56e5dd32a6c98abab06f7ad6c GIT binary patch literal 6574 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 + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..13cdb318f106dbe76d578781b2ddfdc1451489ae GIT binary patch literal 10776 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 literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/sk.lproj/Sparkle.strings b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/sk.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..fd3ec529c3273ad57b390d7ea50a2ad710d86c76 GIT binary patch literal 6902 zcmds+OLH4V6op&cZ1@Xf7a<`?li)`I`WPth`q z?6RVY$NBD^R?kR^F_4J^<&rehJ=5Ly+;h*p-TwWL@NT#jvTzv2`tIrbRDXjo3Ul30 z!c;A1p$L7o_0`f1=lZ7qv06vE8t9qZYP+S8u7&+@U3c$=VK@pWY8~r0Yqag_{$qW3 z^8N5;;{WT;kb&(+57LcO&5 z^O@`)sIPCx%nip=ERcV$;6uk6CJ*z}wFa($lIT=={&&*$pL z)AaK$e9$U8KdT>m2H_pGX@#9P^m{#gSk0$(R&!uqY2(iIGMq+Isf&NW4q6)tgm-v{q;k}i-M;oJofqOKQM_0P`I0tE3#5*b4 ziB{uSx$3Tj3GeQy^?|JhT_9Q=V=~oPQSJ;YbqAK%SepF@X06YUN=i9RH?fmg_fc2@ zntG~FPuDZ8d#qm9#fZ>T>pu%mtM+ZIU^f`$hD|%VaG>?M{%tE?%<}l+GP!iGri-6z zmx64g~m)hHgyNPn;vuhVTP;4!CAJQ6Y93_Qnc62S~44mQwb7qr!$c%C+OcM|8m+1` zhGK@tD=`F@&P-j1YH~O&R7~f3n;6N$H;T_+^{mGsye4*^SM#>ToWI5r^t_@39qgt0 zcHN~CKs|iTw7N2)yHVHw4a(?Tq1l(=nW5p_9qG>N;W%5u8vV+J8&w{aa$yRKCm83y z?TLl>LM=!B@G2gCB~wO!qzpSXb`_>gFT(@G+7hmIKGBs|>3AWRhv4xuwGjdTAB0^C z60$IByE2T3A61@t8Ca8l$=a?-o{?ky=WzuCW>O3GQPe`OKkl1KK|M))Vi(l|steYx zs$*4c^iWmSvlBJUc4VWaXfZWbs;#;j4_(e}gm(1vjz(waOBI-M!w>j`U6U&HwsJnZ z1gc~z*jSC$F$Q1X1CmjQQgE9zcINjDFF#MoZCBCU$!ND{t-JL!A}w95avpO~Yqw?d z7qY0nFN?8RxBIqoX+2MqK|Djlj~FMrEy}aET3h>FJ9XLA>x)+YP}WAp^*aCRR)0?{ zcOLmEQ#^NiXv|ONKPd(d#X0$>Vg@^D<&26=*fBAEQ|7X^rN-xpvNimh7F>oodSku% ztH%FO=+v=A+1iS-`{AqFTz=P%dcvNl{eEVEUlPyi%I}pRDo+jAJOk8QYfpJ4ShlG7 z-!^LAyIPU&L+YzVoxQSuQ8mgwzAX=?6-J(O!khTBnMIrI_GjDi_{FDheh%$Spr-t1 z`EC28C!St&+C+r`Dt=xZcP_DttIx_FW+X-O^LFZ!Bl9$8L-G0DCs~~C!O*giiQq&! zXGZPVQzl*fySdlVA|f_3Fr3>wgWv=VzjLO6diXgx6#{iG=N(j$r{THIgyM-3JJu8R z=@i6NIwG>t)9g>#m-%TCw!Y}Rs=agJM_R+I#_M0SDs-|P?mp7kWw;@ + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..b619eb4ab4539674743cea9361ae86faa9c1ca4f GIT binary patch literal 6380 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 l + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..c4116cc628a85c11df80a6e1f76713d8f7dbe673 GIT binary patch literal 10634 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 ui7QRYwaRtMJmnVUU&i+;#4l82- literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..9d3a515bc5033a73cfa7831bdd08b6be42a04079 GIT binary patch literal 6912 zcmeI1T~8B16o%)TU$GF4N(_Eo8lwcbAP_JnYPc-jwp2>nbhlLgFa8bnedctS-O^wU zOzVYd+TER3Xj1&eb~5HLJC4==q(#^nB$W)p|Fy7QJ8B+Be)= z&AgUC(hq($e$QOP6}p~!jrzJnyFw^5q)Sh&Xx~s9*NNWJYW*`I(9*lyV^ex0#~Rzx zdl35Wu`D$PWYLcmZSIlY6>eS6Uo~#5Ihp^;-)DO23Pr})tgO@1N@LC2l+4UOkTmaw zW*t@23>=rQ-J9vE53ON(FX+k^?1Hf@3fAm`-qfmR-VWGvqA$8-@>aaRkd+4Ni+^0| zi*GdKNqEiHA1rgN@tOOk6>Y}8?lSoRYvUta@yt?pc!Bv{$6c$vqZPXPZRky15=OD| zvJf*boTq>0p5Ayfdki^k2RxI6i+O$SeY`Ji2bzKX(e>yr=KF@Q;W{5bWXwJ8NQgZi zJM&?a@yir-?1FW$Zmtiw;}47o7GoWDV@l+~0}r&_j~_;4hhClwNnGd?{LxsS4RQo`8SDvl5eOqLzk@W8C18a6PBfJmugAp?n zJ{rJ)4ZUv(qs;C59$2w-&wXF(W$Xv4g;q1)zwqyKjb{bsDikR6UiLenFBFLjHs|TED94DQ`GaU$Ua1ekJ`&*R+dY#{~tI_6Cr#)g*nJljE_)NX&v*?iPRuKYe zJA;xLbBZYyWrwxOz@g;k9cB7RaI5hPy)>Y!V%6C!`KLzM*&ydCfl@-t5P z^}eP@x=j8^R*crSr!>BJ><%g`*;AU8K3AA7b9>r-c1o$@PM_O+Scox=^;1h0Jen$T z#D7*QV-D++Mxwjx(N@E@x)PZy^&#s0e;1o>*MLIhn>rNdJJ6tJ)%Cl;Dpyvss;Nz8}y=AEyg{;mbw*NN9wKy_c-wXTA{-2;KK@M+G^**tan%A+I(X=A|QuQj_ z5B;7`^$iuq5UGP^_+HPm05KVkHBGKOO7@QllBTQro=D!J;*sGwjrX01ea5Olk~vz0 e4F7?IGi-Iw?y9d + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..b619eb4ab4539674743cea9361ae86faa9c1ca4f GIT binary patch literal 6380 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 l + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..2b1c6e30ed9cf1910d5be091ea41349cdbcd1db2 GIT binary patch literal 10691 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 literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..3e65b1ff5 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {relaunchLater = id; relaunchNow = id; }; + CLASS = SUAutomaticUpdateAlert; + LANGUAGE = ObjC; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib/info.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 000000000..082030262 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,12 @@ + + + + + IBDocumentLocation + 136 94 356 240 0 0 1024 746 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..6e20460839b0b2817dc5902712091986b034dac0 GIT binary patch literal 6568 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 O7duxO=kBBW!T$ovNR9ab literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib/classes.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..0071ac077 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib/classes.nib @@ -0,0 +1,21 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + {CLASS = NSObject; LANGUAGE = ObjC; }, + { + ACTIONS = {installUpdate = id; remindMeLater = id; skipThisVersion = id; }; + CLASS = SUUpdateAlert; + LANGUAGE = ObjC; + OUTLETS = {description = NSTextField; releaseNotesView = WebView; }; + SUPERCLASS = NSWindowController; + }, + { + ACTIONS = {installUpdate = id; remindMeLater = id; skipThisVersion = id; }; + CLASS = SUUpdateAlertController; + LANGUAGE = ObjC; + OUTLETS = {releaseNotesView = id; }; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib/info.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib/info.nib new file mode 100644 index 000000000..2b25ad033 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..4f31fd7587e850f6ce885835e89ceb52dc46cd3f GIT binary patch literal 10773 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 literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..3e65b1ff5 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {relaunchLater = id; relaunchNow = id; }; + CLASS = SUAutomaticUpdateAlert; + LANGUAGE = ObjC; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib/info.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib/info.nib new file mode 100644 index 000000000..082030262 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib/info.nib @@ -0,0 +1,12 @@ + + + + + IBDocumentLocation + 136 94 356 240 0 0 1024 746 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..f165c1a8092076ef5e6b3be3b675545aad2e8bc6 GIT binary patch literal 6346 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 azL8EzXQ|DkKTi29q?~7I=dRygrvCtr&v?85 literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib/classes.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib/classes.nib new file mode 100644 index 000000000..0071ac077 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib/classes.nib @@ -0,0 +1,21 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + {CLASS = NSObject; LANGUAGE = ObjC; }, + { + ACTIONS = {installUpdate = id; remindMeLater = id; skipThisVersion = id; }; + CLASS = SUUpdateAlert; + LANGUAGE = ObjC; + OUTLETS = {description = NSTextField; releaseNotesView = WebView; }; + SUPERCLASS = NSWindowController; + }, + { + ACTIONS = {installUpdate = id; remindMeLater = id; skipThisVersion = id; }; + CLASS = SUUpdateAlertController; + LANGUAGE = ObjC; + OUTLETS = {releaseNotesView = id; }; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib/info.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib/info.nib new file mode 100644 index 000000000..2b25ad033 --- /dev/null +++ b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 425 40 356 240 0 0 1280 832 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..0d56dd12cae32325b6dd750255c05f48f7a7e3db GIT binary patch literal 10489 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

  • BSr1Y1KN3qacZOjRU!jt0> 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 literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/Sparkle.strings b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..9f7b3901ee37b2fa9bd7afab6a45eb921282b350 GIT binary patch literal 5536 zcmd5=&ubiI82;>`LehxWdg&xsyOt)KC=^7*mRL-v&Srm+nAcqynvRB(Ns@6GJYc0&^h6U#C?GvDv;`JVTA z-*^7$sGvHj3}vbk{xkSr#LrSiRmJ;~Dx;*X@+yn6EK1U98UL)$p|pr63vI?wb`m2E zs1bD>Z{w<cJgbKhje^q8`V{13s+uj9wf6=T%Boa8K(U z74gK~Re(YYdnurlyHBBv_XcWND(wv*V4*Inv8ie#Yv^mCo(R39v8xh2dB*vT1GAj#*QkBgxI=Z!qc+0*|WOL zwb!z?%p%%SA4UDBe<@rXp`taBI*>xW1-muWv{p!-NL8KEZKaiHKp7IWWCz*u1GRqnwb<&7SN>l8@#Rme zhhxv>tY|25)kh0Di(QKS_glW>YslQa==rd#3u5{8CVFah?orHpeA9!y?nX4RU)grq zLFT*AN3=-u&5oaYpz2bC87q*5C0L28-&CEfR&&QHdOfRaX=7+PqZOOJSnQLQM$YGO zu^)XRdq~vL^?LMf8(*yqnxo;rD(x#rTerp!wfE3 zBPvmd8mu(Cy(5V^#D=L5jsooim&|9@>FCp|pND=*maMJ25Ss=pmA;y%Es+xSj4JCO z*puWYIbB09@6kdsejyVNY+PS^#vJug`zEm_M&k6gT`h|Ku(;-%$C%WyN=C;K zj<@$>M!X~rcJm9?dol$2a*6dX{}S1p{~~wO_lWH&tf>K{oH*36ZSTs*VAGy>h3Dr) zle&g={$wBLbcS}j?(DKQst9rOd2Q1`O-@qsO(z45XwJErV3&RLgfE_s-RIf0D-#ahDlh^}A)>oKuOfiM6kh z--Vvoqb^MC9^ii}AIsPmbB86HV-#3mf_i7W;aX zn%RHrD*EbO#sfS17Rei#HAcbDcz|B$jT_Mm<|w^%`n-4|A0zbyP_MYWu!BBYYXbUH iQzvw6V&G{>BP;QnoQ%gtLP`0qGCN@h + + + + IBDocumentLocation + 188 142 356 240 0 0 1280 1002 + IBFramework Version + 443.0 + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..b619eb4ab4539674743cea9361ae86faa9c1ca4f GIT binary patch literal 6380 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 l + + + + IBDocumentLocation + 62 61 356 240 0 0 1280 832 + IBFramework Version + 443.0 + IBOpenObjects + + 5 + + IBSystem Version + 8I127 + + diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib/keyedobjects.nib b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..9be94287a6b35dcddd1dda04137e023c11270056 GIT binary patch literal 10742 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 literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/Sparkle.strings b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/Sparkle.strings new file mode 100644 index 0000000000000000000000000000000000000000..a5486800d7018ff468ed73ffb846e1b9e2249fbd GIT binary patch literal 8562 zcmdT~+iw(Q6#p!VxU>!OB0(M)KxEsn-K|C+ym1qx0<-P5rEUsryW5?ix81V0QbI#P zB&A?jl#3X{gYnJ8@K2~wBJctaMjuIxFDA%?fxvox-|6YhEG-w40ZFsBZ)UzZ*WdY_ zGp*bUt43ugQ)THrMeoD(msS~7px+}ZM=K@Ouli`Mk5-aujNWnFrqv96OVc?`wAQG? zs$MNnE7U6b9Z^HdQiHUfrBB1Nwt{}YOD~++tX`S*?AJW&E7aS1Z|v`fyz8`tc<)zv zdQYh$X_eD@7DyB5Tu^)Hx1n_&rEhs{p_0}=PuFGXh@pDPTD|mZh~AU*o+j<8_2s)k zLwvirD{LwIV){sFOKy$*q&3Zu+@rI~ZKxpWoh3^cq&f70_Nz$d2JP=IeQZcag`77; znh)yp3Ut()MJ9 zswRS?x2%il%bnQQ|9BZCjSwqE(ocMiD1qKNy;>bJhPGjju5zNKsIM5N9SXFXqR%1v z8`Bof zp=+^PGjMX=Ns0fOh@ootFHFp{H;g9-;rD~lo@l^M49v4X>OMWdvR#_`<q%zd9kQi5>jmQ+1i2pvmb;=oU^^OfPT{DZF}q&-4Ok6C&yfyU ziZ%!5kej0vZ-^}T+oJaZ9mfhs5??h!{^SVeRq=H%`FcdhFL3cKwUe&G3wYt+-__Lh z_Lq{+$I7<%{0-LawtM;T=if|KU-^HsNr5yUo3Y1S2qzY?rfpfRk<`A$JFF?heyzDU zc6wmTo~L7jjpWaaT1`GfRo_RSK$(>O-AilLkq+5cQ6JA>AZgBI0AD3Ll8U@ z%K$gQHGradiZs+3t|zD$SZX}UZ_zx5E8*(tD`3H*Mo?rN zc0m=CjDl3y6S8w`fj`*v!Wjnb&e(}-;U(m#Xaeb=4J-vz#yO}WKy#;B!_xccs8n7z z3fG%=CoUxB@>j^5IDWeg)i-ezn2ZRm@A#>=cJ!U-!#z=I3z_19uqC_vF|@Gv%`195A~&H> zCla5wSyTRE<%4q~N4|&OV0}a`V?XLB{J?0A`UyVB%n=v}4{{XcDI%OI%()>}c-CSF zH9Xk$Z+C}Gp!>>!g$dXIyndZpTKQlsoW7NkRpz|n^~dwM-}Rlno+2L(xhmH6 z_Q_$tqYbE)(r9OCtN~^?%!y+RcmV806oI>qC^vfs6WU;XJ#fQDj`+=gHAuWMk(3$Hiu$lV^a4+z0kce z+vRJ4rEEEHW~oIj`X0=g8Et{pqhwvIrBz7F#`z13bxRCZ>eMCf`$Q6;dtUppU*oY& zd##=Bn6}eCKn*W{4o_FKYP-M&4(fw>xT`}olF#3HFCVbMoEu|(XKNye1G8MaU!B|1 zhLr_}f#7u&oDsHO?Fe>-J134KbKi@H%%D0P4|a{VpX=V6xY8OjmsJ`RkoV5mwb;kq zkr=M};Vh8X|17MItzohn>Mfmwd zFu;bujli4MPgf4lT=#J~b%yW`no-M>%%+%6LV zf2*}ux<|1dqu%$5zwb6k-XELc3&`>`b*|Fe7}Pms39}5< zLazae6IA{CXOP?t&4$HbB1yUqS1~id>?=(;?C=q%x5Atk7>v#pdoHJ|S~bIvnc0JT zI(Pn$$Eh+C2Iwx!Jbvt`Srb{5?AEg}#Lnq~y2|D#j*iE#v`!8;$B&xN>CTAeU%Dg0 zZhoQ$vJbthGc82yJG{z0-8!2&--@XBd#1&R;LIoy{ornSS5zJ-ZJT_#{9%Xx)*06I z7}2<$WH8h=vKOSuxujulT}^#3=g`VZ6LD1 zzGODU6B>U0IpSJpm_VCJ;+4bSX!Ye^Zn zxh2%YxyfJJyFj;D78&1a;ulgR~af!xH5xq7DJ+!ga) zOt9sdp}WtM?4JuMfo{0g%|d#jb-S0^V(DO)cdB%`b6EvZTyNG@dZK@|-!LyEkPrLH z-*tw}t;uUKnLqj6W5-E$ca0BQ{^kqMyJe;i{1?QQEOKW~PxR)lfQ={msHooj!T&G( E3ljf5aR2}S literal 0 HcmV?d00001 diff --git a/hw/xquartz/bundle/Sparkle.framework/Versions/A/Sparkle b/hw/xquartz/bundle/Sparkle.framework/Versions/A/Sparkle new file mode 100755 index 0000000000000000000000000000000000000000..9dbf9e7fa1ed6ebd9ed45e0025410c23453d15b3 GIT binary patch literal 197376 zcmeFadw5jU^*%m<2vMU6HdVCL4j2&>As||aQA1#&D7O*`T6tvJn}qY z&aA!ed+oK?S?4m(fA#05JswXF{Po6PPmd?pK` zc~A6s*5ES(e|hK(R8&m!&76iW?ti=V7krZbIQ;RG|0*gXfyEJZtiGqye~He*l2slL zKiPP2{$+ZWnd6Fz`e0>vN$uQFO+`2oo!eQ5=v@lad>XnekK%C#02LKA!APLNUo%pT zcIL4dJaRF_Pq!Xuf;j&wDk?*D;gm6*d8`BN9ANX4KIrbB@<(OJUsF*>PMvvpe(mu< zZx27+|4vNvM`bwD5UiW05jyk80`2bM;Db-ME$(B-AEOkL&OF*)@_71Uh@WmBWV)1M zOl0D}ii&Y#rj2n8Fdpbk{YiTBN34p9Du2Y!BlWL4`XLkq`ZPaMp#BFQOKPgjx2`%2 z*{#O->9#vXL7K{HwQun+i*l5=ufT({ux~= zDz1yx)>lOQb87+scS~PP=4~8J{maVqH1Zq$f^`uJ)*-6HYP_=!#cz2$#TeqJ`ybbK zu?A4YX85|IVsgoqV>OT;2k_@jeVX~}0}%hgcm7C4WlgxEHV~QLJ$)V#!N=IluSg{H ziu_YNf>=_DNoO6rpxp>ees+oj7Y{Xq6`{G;1u7$5?AQ%j{xhHIoBZ$Mq1TgU(pe8f zYd*W@Q5y({{qq794S{ORM|V65;Air1`{TGYe}n@y71hDT(RvZlnMdY-lw|YSy&jws zr31&irvkjii9ddHRRCMr=v2siaZ|kDPPoo?ilk& z0`o!*OVmJTe~@;H=5cIW#GMrj{c6Q`=CMNSVLrRpgZ}W>RR$EB&OFwEhs-TLkL{1z zP*t=hP!X)F4nas~9=X^Q+5qS0v29Tsx{0#RJPv3c{5%#9dY#)>Ma6{ildkfO8*j32 zE=J~1feg?3S!(Z5GlaMYm=`Vpmi_I`iYLdZ>L$Ze99SHvj7mzbsP{+a4;wmkSZRa5 zHn1qvupm6FtlrW;cI_5qRBRv!$YEtm!jVAj zunEDr4gQ8DZoXp?S^n<1%8>9h`YN7x`Tu`-mcfvQU}Q=6Y|SV%_@lma9+>3# z;(zEnBQW=>V5ED_YE1Lx+!#OfJ|6oY{)R=v4Z~`JbNN@^G>nuZ)bdekn?iZu=5L0rC$&yL0O`So%6x-d8PxR+nI$k$u) zVq5y*>#|J?z`+x_;n238(Gz29>H%xN9}v4o%=ds@k{RL={DCXN`mkf#dcH1QdG2dRhWMs^@ z&n_7i^R?L}MKRz0xbJ~j6NPnL5_|b+hID-C136Fh$$4T-Msr(M#x@-EXl~1ugPzT8 zeKWSjrv2$lt2xtZ$*{ia6a8Ck3(0NK*ghq;ra->Y;p-nvgY}Z*$wDb6Fwm2ta zmmMc&yfJI>z1Qt&-f?%$$btNhZ|V6sIoVq{8sB*7 z^gp#Gn_tZ98C`9QB{Bh{h%s?>|Bqt_NJtjPH}{N-LTfk}U)kp$_1^sE=W^oNC)>(~ zTe4$YiZB*C*#G(14$%2lAHS{V8WP7>7k>ESmgeT?Pl)IBF>-QaO~piissEnXuFrP$ zKX81j?OUC3*xo{Lym8cHIXC?Wro}TciE9m2UaV;xhV7+m`|q)RYeBc;_|}ZC>@9@C zo^xAnyIkyXDEh{luFw>p(VqUhK=8S}g~0gA(cda9ctG2s9nde{tte zBlZ>oVM)fC(*LGg;*B*;AwilYYiS9=uw?JrWkF-fuZ$)6v8HJlwwL~jmi#JZ38Ap$ zvCqcYVu?dBDAqJnQ>0l!AT0UAHAj!8TQVfpGz()XOMay+ArO{4y=PV|-I9V>(;O0{ zS@J7dLNF{D&}Y>GW63&W$;en!6^8Al>uAZklqH11lEn3E|0|ZPqyJ;RdricQifx%s zLf^Xn2kfQy_TO{-;f!XxiLm&}j623Ixlh>>d+D=1v8AhwyrNiB4NzhS`tN|uvzD#` z**1F%VX&%y*2eM5Dj@9YKk?oZefReCt|x%b?&&pZ^{;sJ8=OW%nX6~=b-Kit23 z)rr1U@yuTK;}RB)y^1#!Z*AUjT0FCN%-0xe>Hn(4=;7mAGCsD&squ|jKe+nZfz26CcUrLpIsB(fG~r>D@_vJ~R0 zb8nw;ZoK*V?0DX3vBSf64L`sTmC0L~RWkYrmR!Gh_6f0F!*>inoY7)SD&Tw^y8gE2 z7rzZPVmpQ(7``i`RmaWdQ3L#U)i%GBOQ{EjA0EB~!K-3^b#C^kcaU6;Pm?v0K3$nL z?)|6l?JP@Xc4NVVFTHtHXIaX^QFE@^bf~i|iK^AP^_!o0y0a`(v#bz}k?doTU;qoZ0KDhqXb3Z@;GkZH_#d3Ixy(dZ^eBOXyBXs%Xb zkI6Sb5E6|zl+uXbs8L*e-k8z$?vSsHMjUf#q_Sr3ys;VgP^0W#;ywg^&n9BpTO_a= zd*9tBYZ5go%Aj|kGW-iYB#s+<{OIPg&p0=Ey~V#Wb4bavs7GV33lA1u0(X>P_#*3sfy zj^o!8o-PLU;1}aX!=aY76?N^W89QQ;{4BdXJ2ovpGnSd3Tme0;qnF)$1$bn9X8Upn zABeTs<)4BgIsa2svbnJ%Jf4MPtF_qru-N+QvRgWu4nR!=+g*1sj~iMv;1o?vauu#RL!+w5M= z$)11w{@`ua+m`_bRkPw&OC!z+#zD@={N(npjvj3tm!HK(y$yaE{3yV~UrFaa?$)fo zC0AsgCcJZ_Z(G}o%v_0n6Oy-rajS1HSm9$IKj3OOf^~j*UaWi<<=fVsd$jzb{N&6Q z9GCBpwOoQQxFx4?If<-0To@M-1NG~EoFT-bd+qYw;F4?Oq@jEt)Xl=TY}>lsMUe># zyE|bWe{lBx$0JFk474M#eTyC5BV z2e561R<3OgF0$a`lgZ9?eAz*T*;QdJ_0IQQ7*x<4A|nLJ%}= zjZU$xRW9fp%1NvyM7wU1K<2w3MSuvugz(dN1BGAYxF>m1Xl?J87K25}9?+=Ow~N8o z>f6l^P8OoYdLQ3p^2+zd^74~!K8vr$yYHGYtJiA)!)?#V@V?9}?3pFo0TDdyeaFwLg-mV;OgEHrjw zu`eLBMbR^=I#ITf^73vehZD+}Y#=)<*r*ebr(y^JiB+1HJdR3Q&;3n=n^pRsW=tGJ z!5kR+7Y^!B`Ugg=?RnSe?E@_OCAZxItfg5km*)ym4-#278;;hyToX`p9Y{IBmp&n~ zut;*XIU1God?Sz$0}e`FSCpARv8|_H5iXLEOUe22Oxs%M2z^@%Jr6@EOB!63^bsPg zycE%!n&{A0D3Q39N-+B->Re>6V=Q)gHuIgcj*#!RFH3H^8G8A$T8eY=k%wJ%MM}#;oO%&n%XNu z;9zafcg5O-a{c- zjdSmtupZ28kfp{`ZOj*WwBOY8#sDcJiyIyS%cZiS8qDpt2Ot{po_I)itB8v zjxcQF)~f~$ETF+!;*?U-1V{3@CNO;?lxmp1uN<`9q`n$xcH#(udhV_O1TOs> z36&+UI3%*?o&yBe?u<#Xi!)8Zh!$JwFk23}eS4E1+z3IaoTeijt8gCx-N=Y|4GnaA zIuvsQw+j$Og&X)7fU)QS>|$I$zE9)jIG*ETwH64d*mQj8iY-F9CN=DTQ3>XT1mkCu zqi-MlTWY30Zq50l;J|71>Ik~^(^70}C8HCh1E^u5FX7s6xrC^UKS=oQg^8doaA?l*!`(B?GV%AmB?IXF{XI2S7ZUbSQBsMxI$keN7-eJDjrk6mU!Ir;D= z3`7u1;*BB38>l!z^$!eMzP1b$lcRmuA3sIai{iy_P)JVziBd{3I~Tk)$u+nHigOA~ z=(5GR9` zqvM1&r*SmZ@QKiAB=BujhWx;B!c*FiQ)GCbKKE$fz?eoM28U?+5k!!fKE$G0D)c-d z+HZGOpK%8Jo(3W;@TS7rSYWHbxQm={rNYYi0}dpcC17jRnA++8<@k3IMUiNN`_Rb4j4yc_%seX0Y1^VrhGf+{|HJ(+j_%r zLkX5-5!r%3Td$Xs4NSypM^G)FkBw$}|08;9-0E{I6W0QPUSjURiI~#wHN!*&c!XNO zXB?L`>S!tTYjPUKE#KY@yL{{D^1V4L$8Z^PN%iqW`YFZ;{lBL({hlzTP>j9ojP2mm z^%RD?!SKn^<-2oM7W`LEaxFc(ohWGS#B&7drSxY)xb{(P)}); zFOnC7138uG&oX{uv+XLY4@X+zpkiLOtNxRn zYe@3X5t^4v@q0+jjVkAkx1qN#CF0h?M+k3gZw63B6PBA$JWC2$WVi7MJnrWw0;%O; ze2Vi2YFnwuRE(x)ivh0DkwU9N>r~?*6$6XP(*^DvwgkM`})X}SRCNcvotb)NRdBVn3|i<_dr8J)*F<=!?QE{7Bpr;L zC(8esw%f*PD5ZkmRU!k^2 zx9tN~TP?@3?L~|t2j7_TkglB`@51OFK&ZxXGKU}0p;~CH3+^I77}i)^j+4GH0p$ee z4~T`G%{@7nbm4WLU>z&KPr@h+=oQ~EkCHx96`(FjI)%(zkLd|)d`|*+gDWWhf-&px zh@4xok0Z9-Dm{dubf2yTgs$k_#T7SWgeJ8b)|lJtg#NEChs`9Ud?)TI$W05V+gzFmrr4PJsN8rzV+bmKYQ6~&uDt?mfph;wc|Vm1h<$pV(rmMYc$DP z6qUVnze5(Az(mQC5~jYV<)9~|$$Eecvyu(23_jre%jkktzn>)%X6BzR*e=4bP-SkI z!GX6KFxULUQx6f6mM_){uVbyL8!(y*$+-11<;d=1aw3pBpJEP4j#vPZ$nUc22UXl-|kS|q5^1?aMNJKoP>^(I-Z6;_kFMg17n2WkK>dhOkgzbxaCtoWuoz^Y?P z+^Xvq??DIeW{h_XV&xgP?r?DDI@2;qPs<`upiq%2-~=qOZ!#l47INMg~zk-GA!wS2rVvc z!LhBMDdIdVK(dv@T$=bgjvv<&9a)7>At! z>DE049_iN#W+i`04!FW;{n2<6YvCOrzA<|%_1{X>7yjJixuI81<0NRFj=4!Nab@cF zMwE4gj)cZzFk~lWV(5BQwAF0o=!Jb2Mx|Ik!?qrBXrI=!$H{1SBOMQbE<$eikxFwL zDQdJ);k{58jj&sn=?MT3KFu|$)V8)MX)yV>S}vD=0(=kV3_((n3HXJh(jl!~BpO8SK0 z^`OIlHiRcCIZdy_a@!WYC+>jVnfQ(bb;{i!1lj}ViXt6JEDVj4$DpO>G!QuIp^m1v^jAObX(%GeWks@+enrh}E-d~gjY ztz<^d>a96XY*oB}YNlc0j#xJ8|NE#=cfqzBBia`XHnlq?Cb$=&2EKW@-xVKI>NyXED>N{I`Dh}BJ|vt zeFca!VmGj-0GVG-v8`XQL8gVh|2x`opN8OK25rQ&z5=*f7;`zM7sh5n+47%6!*$|( z)1~|GfM7W-e@QAI&FXkz#pU@e zm!FMOV=<7CZmng^1AjIpZ&<;(I#n&zO!`)9eHlhkFrs;IiQS9n{~2TeL*ka_E_{)* zid=OBFXU-2K$e#91@>~=O0q{Jl2>W?zX(r^BV0>+84&3sflsdH!|LZLVoJ?~fow;> zO3mmOB%{e$+T>_f`yTA#t}YC>zuaVvAAB~fr^RB-AQ)pO=DReQ3|6R6^3`}&m+@gT zp3}6PDZpxUY?7NU;GP_6y5UJm(B3R!i%Hw}F*a_T{$Ac4<=-*Z9nBWPm5%QFRqg|L z_*P49UNOr%H)+oSGM2Y>4W)9q!Fx9X6_Iz+vYYcg(caST=;+az)|;G6TI)NSP+uLp zOlXb0rxgl{T{|mN{lBi{)O0@9Z#@QP|@@)xBX0{u55e_vA|{TIVmpSmJR2s zM1Y=;c3lPpr53rmoOo9SHGZ6(Ckd!hV{bT#Q=uoJmOUBGsRpB%gwpOPr;xH6 zno)!&W>b>pGElhOGE&QtaC+@*X|rX%_F=~$6+o?kq|<%4j(h64Td}434!q$*g_d@$ za!7K=wIH!pQ(+pVQr458Lc(b}DT9MIu|*>m_hkUWfom~tC-$QIVD!5c5bQJ3HBTjp z{c9Eeyn*8IJP-aEhnr~xX9Q5AR)7IiNbb18yEx0(B0>^NOCpJW%3{iKg{TDlf8tW?MEsU|5Z;7A+ zdj@9eEUgQ7(PoZE(eFoY7rC8#?R+spml?VB8fe8CDKyqw&(mozs~-5c`v9&-K%VKc zWCkUb>Y8h=Yv59$(5-?x4!}>;?Q9Xvdk0hLH`_?gX2T@q_s_96x0IgkVFr#AU@kKm z261cD8l~3W0r;em2dJ?=la$*Mp8;iRhSe^1-_@u(nn==O!n;IUO2t;P5QwOH^ep5b zYb)!~6cdEW@(+OHNzMkNR$rs&5?#fB+DKY_-hfZGA9hhqHFP_NWY`?E3{H%~AtfHJ$j8`i3N?dz29+I2HsrT+*Dx68cfn6=dh$mjy%SXXA zo&2I%DbM|UwL<=Ne|*YX9%EcEGQWLb4@bPOQLFYQ*tefdKE7O(GpJr3BoC=xo>E5$ znM<6IF)CjIIz|)jFR(t=O3VBcp7;q$L9>v*MFUECX~ec>6RsoW3+!^X6?Hf_YiIn6 zyC0fezhj6M*w*z9Mw7;9CWdpC@@*p>3F&_FWM0II`P{(a#2*8$tb6WjSy!R>h?jLy z(^b(zA|<#OB^hApoKKNDfAzy?DiYnw^x%k0PP1_bLg#~@OF43ynd4|9E;cm%7CT$J z&Fu|VCI0Q=zggj5$AK&QHa!;^Aco_dCvK)3hW`{;fVUR+WjG6y!5r2~E>cX+K!&%i z3>V$C7-;{DBphjn+zwn^)M2-maO-SmUjCrxWiW^ki@6jPPmHIhWwU!t9l?P9F4n40oF+?;Wy#NEobuM+Jkt!hY0tRr;G4&O?U?g zjb`|iO3GftClsJzmPrfTo?)acvGT^ISE9K0PuA~K80a_~&t^eJM_&!RSFjsVGo6Ts zycqjS09n2r>(qHnKxL-v>B{x>aOEmCpdQqH^LVCC`R9=QH)dmbtmL51bA6FQ z+xK8Nb-uN|T=;NnKm}OdW-rBFR;(GaEO-Fu@kIS9aFJ9#h|Lx~)hjWEau*auE{cVK z!r|}n1E=4kjCNKg9Se_^W5iC3BwRBZOI!)x0>cR5d%or{#Ni;_T5$LlMvTwlX+*&w z7q|cXlxjt%)mG%CWbU_Za+AE;%nN{Orl}_R z-Dwnz+q!qL*g$n?MU8mOQ6+HSn7y72r1jM~b+1WuF8N z)j5MFK3SbJ=(Xyc(|9m*HvStt`^kejGky3^brY|5F@6}kCU5*^l#ND1t{5%}#mYFV4 zC$c{zp)I#heg`~d_YP7A9o2H5N;}^YVEk2-{P$ES&POp&(d@RZr!*S|^d78V7WjwZ zerYCLVg{k~>B=6{8nj-(mYvfC#XUK`jY&GMAH*L z7YMi^hSRUxn_JKZFr(vS^idc72tf3?i!6&;qa%ENDzT}D&jp+V;2X2sK;zrZ>BLbV zmN{dHqaCGgbKjF-og>H2{T@Zh%|8HBc6K-43j*=D)Ugi&+qT%VAdvq186a5n-;q{{ zhXY{G$4M0X#UxndsvjO$2^9F~+SA2HdGMm+EBFkV{lI154bh8@6c{<2Y-W&6R*K-j zWoT9yB+OPekuJxo*l%y3CaG9^QVVVGtAxs0(+9>Hk!x*NPis)wg zT~CzMqr(73K(mBI?(!thpeXLx?-EnT)d@gCs=JZ{^)9Dhq$ReWrtDAoP`<F^ugghas1oCtCRDFNj?A8{lZ=UhO3)(s4A@x}XCHFn}u292KhKEhG! zipi%fSGsKZ_{XAaH&*Py2z5ohV^7tos+5$P^Pe!Tbglkcy52^9){7?ot*P2uA;J^q z60SMV21NX)9CXO2i^wS}T<&2gb`} z0A;G#BpmKLe87 zLI1o9_#*>!W7Y!5bJ4UDLOyacnXGl+z&2cvT8qfVT3{gX%ejD1{kZk;Z8(CNzW^ka zSvF~C1_DGj#tXDfOvwG@;>3G#voS9JV6z8_y)oif&F3I6nIwJivGNJsKaD0~IlPhyyYAC=VdDNW<)f#b#AVyA&OI@8T7NmM;(!Qc6 ztW)@shuVJ&dZ>J{q6pg754A$-?F2OP5xt8H1WsBis?~149rh|~9@oTFCJHi1MJE{` zc+CN@y=O`ZF;%PiD97HDED3krMJl~y&cz6el@>++ZuEe1 zd$FixLY=)8_e;Ab_DPO!8jZzdTmAWeK}TQvG-c%9U3jaAcN*m)oAT7zxo8Sl7Cepz z3tn^K&jCJ`@J4$LA6=(+zl~+6PN3toM3UlN>Ie(>4_arODe9RzlMdIGM_KzpQ^m zsVL^+)|US3vo_qe zj?Jcy7I-hGpb9>5ggZ~#RZrwQiT8vQ2#5SxD*@D0=8<)1R<{x+Y{~~fY*tji+y(v#S z8o!95uJf1UuuHM|gNw~amE zlk7EoVFQ=zZ=A??avjW#0qW$s_W8Q9O3Pu@qDbT>6v>9E^1L8QYKs{v$|lgtO6c&=wYM&ZOH(Ysl|a|urf z56yT=7am(Qk9#o^x1Q7Aen(2>13q@8jQ*W556big!t(8#VWfFpL!FwuKNf^2fu`eS z5Rr3G9j;9o@Hd1q25f6CTP*Y`7(Gp(HPE2JpN{~7Q(<+z{k1vj{ z&S_eTgG0Wb6h}{x%c|`meAn$Z=$;@$-?H}e0ge4G!pyg{(Q3_#ZQ+Yip6UTjzKmP9 z&Bf?fvDQ!SdlCRoJW{V#?~Jp*sJJNu>2XBy7mZL$-5{#yB)e9(j_Y%D zn8y~?al$H-^C(d5#4T(O%bSc;9BeR?1s5E(pt3B9$BeTP+!%Nl1IV0fwj#-iYmgPP zI{K?)yL=gOZU=i@O`ylO;Bvmaf6iXIj7kPLbbyz!__4Ohnxc)ZYsVyvdV0C z4*Gqt*SA|gfEf4ff|_bigMW;H!awd}qhib8!5MYi5ye<5{E!Zi$}U zd^iiEy(Rh(aEBQDa1|@t@LCTtYi(@Z~LtIJrq&mn=ta0FqO( z6vEx6WN9%P;1xLV!ZuKnTUSdTz=$)qeC$ka6oI?8k%M-Z1*HB5I=pPJF?7WXXVRaX zdzFSNfMcFxmpuaa3FRlpT>_niLho+4TWhP*4F%w4qouW#%%JG$!bQJTfY<-9B~DS# zz;oO4CO;_xLvDLGZReXjWpsYpfxH#q-}46eCQ9WBZIAv}Ku0h_zI!aj8O=_96TCThJa; zllK>OBzw>AkjJ?g_!|=94)oP|_UNp4McDo(7YpCO$DL4X@Cs<#|G|Mx%ONy5swX70 zBxivYvax<$!cP_(v1{lNy`F}0`#?;ly!V<`I}am_Lw(W-?sOw!@^hC%Ke`D}o*liW zO+o#s>37Reqq@e9b0FIq>P2-4dJ?gT31hM&a;!4Icni)d*f@8@VE&T+M^K+M+!#9GGm&Re$ z8-^p}A8lCMmnzb4%9AacES3PlU^F%%AZxG1yDYpU@ z1WIVA6F(`JVEoSjcU|GcT%vxIA(w`F6b6*p`b-^tNvA5D2e9)ig?akpTSZxxfcF&UIgJUV0;Xza1l!ta=+y@F zCbA4}f+eM%l$`=8azXwK2)1GJd>4LY6m$}`78tni9M2@7_Msd(zl6>r6OUt-@38US zXFTBsJs=4CSwEw!(qlSh$dkMlMfloAw?vP_O=8gqg5986GquTssH1-VHIa0wnnO1F z;n&56OckM@E~5DxHIUwa8xW~-tR0S1cmqD(&>;`%7V&RY_>~uOK&J0McwGUDAH*yi|DJrq zQzDnH5T2N1QR+;Jz=Wj0@=RB6fJe9Fl(um9^tE9|JncwO;N7MaIsu&{6)VDK&q92~ z6J=e8h24`J#@qM!qOs)LUor+*UGK#a=BXa6h}efb`dC%q;|G{04sP8VIMx{(D)j@;r5-zm+`4i zfp^kMmpjC~!%THuz4R8q(7*TatS=dOBg2hTEawfU$!oEZd?v#IIk`wMv=n6b8_{h5!@**Ez5!1adO-ej*yZqQuqj& zT(NOol^+Og(7%f0gl;vAggu>H`* zwvVtaITq2u24nU6E~0&a+8b`ha*JD2N$T67W+!F7h};M~ZX-O|#PxP^&@uB1hwoRe z$!~O^Z@Z+`0UEdFiX7PuY%3*4x)>9Hf#CX{(n-Az0ogSjs{{Gwbr;*y$TrbHwo(Ay z$@$jmeQ~|)(708eMyAvK6JyF+x9ZPnXou@^(3>u44`MuS{peVJzMbT(Q*Xwm*R3z- zlR@H6N8K}B>P{dv@6S2IiCM{EBLU|N0|w(nSnHzqfHN?HmtD~J+T<+q(9ih4;!^xT zJr)1$u@rw9!?Log@j#cEO03N%`bC2e*_RNCHxoMd=14U+U?@zMlTh5-uv{d{y3YYNnihoUr&Uk`wto&y zoC5Q`^MRtzg)3a7yMcr!#Fr^%I#E1B8%i@%m6=Gtmn0Xti^L;j;hJ{~P{;Gv8|ffz*RtrgYejl(y7ciP9ZxE!**?@r z?}tkiE*9Sr=|ek7Kh7=vlXJE0AYI@hZL6W}AF-#9vi+|B#!CBjlD?iSXuH?8_GPnSMXq)m$4Ck5t3!HWNT2@&0Gfq(<2FBSThR%hN_~ zagEGN8(H8QnV2?mqif`Xw2?)wk<-&gLavdc*SU3Lx6$bKPTI&du93fDM4Ey#euM+v z6g3HKNS2K6kle5FCmdcs9HZW@zG?I71R&OqNpeoot|R&s;#`iF2zlR=zWy zD3k-dP+8uCVqSoh=tb4^zE(g!&Ag(q%L5tRNIJP&Nr!`=L7(z$LVhZ^mcFiPhvsAPV+>)fC zW#3pXgj7kQRjx~INBDn|lRJ_B&EAFod^_C?&8(nL??~|Na&1AffQo-};S8yPFar_TZ>;uK$K(WnW;?4eicPE~Fl6Oj~yK?ZP zCSUiHXD6Ogw##MC)1etI9I*GJC%HEv=q#0tV%W(9B_4NCycf`JAEn&>2bX*Q$}v8j zQsn94`o~gqR4wtSi)TX7*;BBf9(3`$5pbN)EK$>p=dE006&T~4Ia}a*nd(lomthwJ>EnLWhukDF-ECwP<#$}wo#1z?fU55Ig2=%J9cySOMj$GiD?%~5 z%Zx(A?=kASH*MxLpFUb40a=uW%*`*aO2(mFS1j` zC4^-8B9L(-P-gydFh3cmm&Bnx7+iW=e+W3~RBHi=CmyN*j)cWm)Io>hO|4i6LB4yj-H<^eRvwS~aHDklI% z69Ul_@P(i5UeVRv8-Xf5S-~GG#}qzvC}+X3<%a@UraIh>`;7M z0Y4JKD)SrTa%$qa@(#^a@PZ{Hy{*euBRjOwF>$kj2PIsIu_cnI%_x^t4_8Bvi13$mE!N*}o&w(z~QXk{(K1 z+SiVHF(u0u7iB~z;Yvz9h&fBvNcta=-@KOW_T!vRwd*7aK1ZOWy*3Tica*Hh08aY> z?C6Eo2M3`_>Q^{cVH`7QZb29_`&nmVi;{Kys1eQ&w!s9{ZLVpX=?MJLK(W`902)tR zcQvH&{NM&T=yHDWF164u$|WDy`9W7nAI=7bnC6zWmr$m?i_An?B&CD4UjTC*mDLDc^)vzwkEUb!leX8+ktLRFG>eK zCcxr!;4jFSXAECRY^oncxXQ)K0z&6AhB;cSHHA$s%7l-mkbPnfqg2o6rG%v63;`sb zSUFR0P=YOUVdsh2tQ1KEC|MsV8GSo*Gn zl6;iRmiOU&A&cEj-E|gQ4NQ~8ijvETCySkrP2w5OKHPTk8@Ri1bMXvP>1#*d)k~7* z{{Sp(Ybm-HM*L;WJf)+YD@doiu+PGnJd)b=DI zROzaJAovw*F|G20Zj75&`Ke%a#9wGrNBR1QDPDdpmzfN&T3*u^1GW!81Dl5fyvexV ziZ$QDQGCNt8X7^JY}M&WwuO)`4?qQMcIaFfTgwQMAA*aO6f3gpOl%+?M{-!noiYwx zAlK084y8SHTx`uq3NK%Q4!Xk0vYQAJIbgH}*k;>bE8G6BWZPdS+y1@W?(ttA`SDyw zU_8!qpcG4qPn>eqYi8wxO9elNEWf`OTf-m9i(Av-YY4&L zOy7D68br?Oe?ftw`XaepCt->ao46{6{?PG4@wiyiC~}k^4o#_M3)EQq5(sFmdddfN zj{0d=lsfXf0jnK(C`1)JEOh#)9{{$t>1B|bvp-y&NLdIe+f0jBo4EjRX-<; z%h&2>f>G4U@2zrQlV5?2$&Vz%=OU41ZX1O$v~BgjAf)_$tqE88%~SgQ352qvm~EZu zioRcRDDh`5KAp5;X~<1|siy1)SG&ln(vi4!6cR55h*u%@GB?t)EnHR}yr0y%6!4B- z_*E%<${JT!?pRNmnk^GUSmVhraMCEJmgDe?I=Mt%9_FgkY3q&YYRmRzy-_?!-X$Yx zb4cbz=!1~^YM4~{_!ob z5s3`4b|%M*@RO0Q@tzz%6Td;Ve`{N>tQ{+QD?0pI;PH;i_)YbkCwlSBYa-&XrMKri zScHPYReIuPQ^btAeSi4Y*k}6v&NvU0IlP9B<8Mi24nNdU*XsKeQk`alsaoQ`PmQAs zfRENmVe(`W@}2|Sh{sW0n9YoUnA_%|X>dRA8L#=Xsmm%MZd z8Y^PBIvsfq1Kr#*J}dcfF2gvl2{AbY0cUSG2l7-$X4W2dWN<$$;nJhI5)eD_S2P|> zUc8fbl&d%bTiy zC5#d-Mm;%(I(@RHqJKX60cLRNcA10-Tt;Ppmiz~Cp+G#kmyz=-zA~a1rlT2`c?>l^ zb%Md)VbJ!i2RiN~d;}j^wr?YeIruY0nX`H;yKCzyU=~2?HhkCXP<4{MI)~<8skO#W zo-)gT=5pw1CwlRl-cv3V$n%Ug4LJ)CB&^}sLQkEXeK(`bAch2OwnQHJ$Tgz|4SSfA`YOEUb_Mf4#qa!H@hnw+-$gQ8_{+b>Usn*1e_ zo{j~37)r2!FM)vPR2z{sVB%k7uXUe?QT$K=ZPL$|EpUyF$0&p2C}N2Vow*Gyxs&jb ze1Tdu?Z1UTCTteVP0g=<&p#Tp~A%a&1av(_g`+{S?YQ72L1{e`BO$QUa8|fiY^I z3Yqf2FfK#WBb43EgTwc@sLug4X68P-iNb&{KO19wWjF056nYP&-n@i>oMtQSp$9vn zw2y_&8wee=eTFJ5#5iw}1&+oRoTq?;A314ClB@8x#jli0e|eUr<|!rnchFJRrkodO zO`(%T%N0Go-67vNpVY|A@_Udd{iEgE8EEDSD``9pL`>l(maD`DEJ2+dPB9^2Byu_qui~Pivsh3llrjJt1^cJJY3Bi_opgpVcawMB>xUP7PK37gFe2=1GaI?OXj%g)@c#)eWkp674=N6BUpat*S3Zj z!B&Jvu=TA8V3H^xBH9TIBH1YhX+-9;r-8yGn(u=r-g(r0--63b5=9KS;A4>rajBVqs&)La`o}#bH!{C zkCm3qyafL)C;!B~XiAuz6rvV*LQH!nZh5X0BD@48R~^AkUUdXF6{sV)saPGsO;gkn z+%!iW!AFXNWTn$##w^CFFPbv+7^buCPFdV zPTgg%{jE%MKQfbCG2aMKOX&6#8$Cca5s`^NfJSp%@L7PvAK5*?G;S92EEmGXKv0h) zgL0;8U;qZF@ZFCUs(c7M1_eDb?0^!fUe(@LyF2zUez0j z;)B$KUtcIPDE%x0iL+(3QhiK`S9o-K@C%PydCWe|--|!g3ryK}y%JP-fsW?Fa;WVJ zGldHc6f^Zapz%ZxjxcaVLB`qX|1dChJ975T5Wt&ZzMpByQ z!;qc0&L!jmA|q(4)BV^_aYn=sP)G38oi1y>yj)lVI@b_dMo1gRI`>`Oc5NlC>bw4e z^V#XXjB7PR?xVjUE9+degTxNCpq7!|eP71ah62v7d>~rnk0us(Rg-Z|NG9aDH!BUc4XSjd~z8<0HU0hxO659sb zvHRG|2MMyh{7KrSI|dIc49R`{l52^#X(PBKNA1KW?z&vF+Xo^{RxlrKF-qVA4$TvF_FootH;bWU1@+9=~w{R%<^F^4!+-DqwFiL&=i6 zdzQHPe>e`=wsa8ZURw6=ND!%(ebj}w3wSA>reULRXt@`;I{n4HUjUs+z8Rmaw%3Ed zesS;196~b`qkq>}zZ5Lzt-X&4Mq@i4RASpyQru?7E+%Ka!kvKn#hHg?9LOgXK7Wl* zNz`~AgKdFa+QtoqpWuaszfP|MIJkYV7UH~^*9ZFcz5>-R=Jk*>7+_CUM_|!tgj+_j zd&fd9I{bXy?kGLV8C*$tVlR6TIyP*f{Wdob*~ zKI*TT7Q&ZsbZ%G%W&|Vir~2#W1qwYWz*v91zcLtEQs}7()Xj^`2j5U_eW)%_7YSb( z3f2XxN|vPfHUw%z3j>qqUKgm0gvZxuZlsCUMIbjtTNbGIH~1sz-M;%HV~7#}lZj3D$>$Hw4C1Lz77}LJd`6GNr%j zub4IwRkh|nKJ2Tlr`tS}$|fq!l&+p(@$w7)72)qv{5i3K03f`0M1hJG2E_1- zJPUPvEL8Dv?Tr-`V@szs1Ok^VWvF--s@O_{GtAQ9Gbc`%6sjVLM4%hFJGN=#61r}P z;-U4Cc-8TohD6;e@mD;+cwvAXYwwO}Xz(u?pvT7r;mc5+zX6b7U67%t=LNBk?+kTL zS7BACGD_!I=~pW{xFwmGc`yb)jf@YT){4ARH-#snLcy*fuo~Mm`7!3Ih!dp$6oR zKxDeVCMs*{ifPlPToLeB1sY0&fto7OtwAxM73EVW6ju5x=Le>QYJ!zZ3M0YVKqwj+ z4<9uw^w$((9S4yC80(dRdd?`RCi!av5Krw2jRD|n=GC~te0RCZs)U#0$%i9R_3XX&J{-3v1+&`s#4+N2`{OO z%nw9@jO}Uj174(OFSZfPy%$?=O_jGU6j1;#@VsE>t%4JV0-e045S7b5P=y=^s`Dje zWNch$QC&^QFIj=Zp0Q+DcTU7x9jvPoc6vI!oWY^wH&((+E&P-xw19@N%CU?x%9kL* zXG2wW;nZ=Z-SFp3dWjyU!VZ6#PI0_Z-4m#*tO!Tsrm;88uupx|Zz^&1r{`wHZ)^iU22A*9^HfH~=;wG*4 z%1RzrIs3V;34?0iuj~vTui$zgFCJCX>AURY;0K=EW2Ye*H^4X^Bm7Mq&|JXE%FF8! zLV+0KpGS>p}Sx{0AGe+{ze3`AUL5umIxr}!iDnR~}X5z_FxqArYtIN-uD5agUHs3bh= z0}V+0wWWyo$v76dg(?^dv92Q2jcK?V2;strpGC8?_o`(ne8MP7163#k7lfriB))HP zFdPYwiD)%EH87mVV@=%*pM)0#>zVGcwLHwTH7-iRYLIMsv;e-x1+C`HgXi)=F z7YHi-b(H~R6}88X3pQYn2{kOy6Ykn5!MiF@?T^+(Ci?5J!J-K4cJ7>j!X8=^nhSwT z%IkuN09AfaZ|GPFJEX)jJk0#2O+Rtn;ehY3XJRK;&}`IV_0T*}#Z?YZPtd1@m;+TW zn!3fc=7o-PF4dz-@18bvYk3uxltEyh(atZIm3iCwW#t-WG$fX zU_GOaWw|X%!%z664T=kBBtBARs@j(Ir#^QG&krp!2`(6(9t;Pua=~YjBt6EsI=4oQ zBdTC$C{$x~M*5f=KzhU(3!sIb)b|Ontk9$LT^ZcWpey9^(`n4lGg-uhpG7bWa8rGk z1re{3T@a6$8_qqvR#)Y3sNzD?4wrqZDinpXN}Dk1`KljPT@7v#sihXs(>rMQoFL~ym`pDIAcYM z&}R;A8iyyM*gv^iWh$8uXK!jKMADbOQk5A_jX6`_iAI|Zs3um^;nLSl>7R==6RPWi zL!0S6S|T$EenFgLAq)^7a06Bf&)U?!VJ5Fo&(-)kvmwz>NCq=ZYv##S#)?vyo zYWGfkX8^e7pKCm=h9iG9&Vt+HK{aRMQrRRC$a5cc5;UnSRS%&`G*tk@3^<%BXIsN} zSmEqY|d`pdlIt9imV#7m+|f1Q_Gau7>hpRFNxd29W3XaLtN@m6EY61Xep zd2yB<<@t-V19SBr;F%!fJqk2HC4*>9Z zGRovX6ix|8yfB9lZV6tU(!*o{A5IFDf(d7HtgfR}qpD}BiK@X6 zE$rr`xHxR#=b_$dFqV}U(<&xyz64=SD6~LD;SbT>K`2)YA9~@?$h;edco)qNz-Rc% zIi{zK7*&cuxye`YJelze44H|#2;z^psx9V__|4uylROZ04p>L)IR`96FxipCkyM{R z71UlNr}|I>TE5;YQ(JSUhedFHT~;ppRBinX7UR%kXhBW&0&l3=tBxpVsst}&=p@XT z8n5!P7a80;6*Uqo0OEF?<3;F#1&o*JSK6gdfQ~)CKDGIz!cc`Q&ui!n=bV_DlA&7c zhOf6;S~l>KE6=)SUe2ZdPkhW8QY)qqlXYxc5&2>#CPnY!q9TLl*apLQV@p+j=6ODS ziMZ>=pH)$bPCXY=iTw|*dY-!YaoT+5rBurGq6v=F=ymJRAF&QBwB5b6Q6!%pXU7I4$L&KGuku0?c&c$olEm8RPw6awNxWKR_AB8*co z6rooeV1Ylx6$DkJg-Z0dpgP*4P?B~?4Q;s5ZR*mYprOyP2&+O^*VrZCl7#^;817|G%J`+8@%BqDA#Je{wkE8 zNcd>HAmwuxn;)pDhhryn?GgB_;EK4i-sEn zx~S57e$C*)=MM+zdFOct555@QIKhj5G90c61nRv*M_ddL3bz10g4Nz@uK7Alz30~j zyd%7`XJ5>zs#8pjT+C{ncR>D)E-RM~07`Wb|25Ql&u^&au*+}^FZB+*bXZkj;jp@B zO^tWpIk>Kye(g6HW>RCR&DzSi0NjqCAh|>SE=Yx}wD*m%&sfb2K$jj}8a| zNtPaCMyG5ROp_PYg{6%{c!j$ehjXGzT=+UhOYUpePib}HdFkxf9G4o@)%6=wRfP%% zS16zl*C(5?Lqj#vhpk=cJ)eFZS2j%oYXFX?A+#7|0~j&}p=|0{2O)(F1ZQf}$Pi|W z>b&Pq^`2c-cy^Ur0QA$W=pVz1$A$rq&quRf#oK&OF}}0UDit(3q@B*!C)Z6xzLqn`^e4)Nhm3G-t(Sc_b zu4z`zpA=Z6cO?fFm7sC!Y$BQu&SE@Bo@S}$&o9E z-S?#Ecr*cdNeq+!^?g&0h{19RsCx=fJDBgz-aIa)p97n&dv|o2cA+y?HXj$fHG*;w z^g;2Uuj8w0`szA@^#2*_I4KYC3;W|Lo{i7pGpuJcr~^nQbrD~<(qA74%Y}658Dj|c zVlGr~k8_3IE7)-fs6LzPN-D-sy75*LoL+$qdy2&G)OIFJwUZTZCR2mUV{M(#rddj% z3zct-=~#zp0{;(lgCe354&i!0?Bc2d?*%EW3j3WNx!9=TwNZ$HN^_oD5z(x6|u_b8$tm3Uv&e3sVsUr41|> zQNEZGYdor`@x1;FQV+v~eGJeEB6=&bz&JM!OdX@AT_)GjIp4uL=NKWp2sbzI<{rlq zk~{RwOkvbYT(p|+1m3;FV_qQT{Uka$pi)t>L%8X2lNbBO$`a{o;s&IJa0;)zpw}~o z*VDO+NsN_6mSEyR!;^RJ)XFgI(c%f{6~!(=a^S!gbqfWX`?`^C>}GGy1%|9pJz;7U z2`y~LHQlj(EVL@z&%ldprVp!RE7+vqT-o)p@9FDkDtA&lRSu}{jUU=eRb{ zzz2R+>iWDu7O52=Z9k_G3I~{Zb;hODsiqUdll%*Vm{B-FUDH6HT-|^paezyHmAFz6 zs+)jvIv~@c`KYFKph{0Q{gX1gtUic)92(MKT%NSEn-%?k$Y08R(h@}eLN8FFDRo5{ zJz}`i+~hV?j9^$`PjUDD#3?xUWNX0b3-EMZx(7~!famA{DQI12k=GgV4r235&TY;v z9z4|Bsf)%|f;npqMsOaq=rY>AaKuP;uUr-GVjEGA`i_mPaQH=)07=eM7gq;x-8olS zag4p%cYQR7HjUbnIj(0-)|oDt7dwnmS-I;OOxeYnF77lqZB>hr2#{ra^-=YA`zan7BByN~r0 zdL$x{Y%oinlYkI*&OOHJbP2t9pB=`k(5UC)*Vh)qldHM)7JlvcOFwTwc5pfZ(O3Jg4BoT(A@ya6?uwJ&B4gEjPyau;{1ZOR3dPx*I!cUi5$AH)|XGzU?Pqe$H_+u;^w22 zHBPfN_!b9FR~sn~C+c|@UrWDc4yafxEPn54%JyFh?D6d|eKOsGL z=@o_?`Qpqt3oKi)IO0)h4=4VJmke2Y`mfI=#7pG6B$>@}xX4|!qG0i|1qF+*TBgb7 zg&4vOpM`QUKAwUzr_$d%IYH@foUF&)1ndwO2a+!?OTKtgZMb&FD(}UhnO_H7jQiyB zU1y1>v=$drTI5!fw_?5Y_2P<37bd72cZFY5jT46)T*0rGMM@re2Vd$zkl|Txb&r{H zHO`nWxemTqQh|6<1lQwOE6dkuHGz^ zDPaE(;9e}&B-!NE8c}oZ6q`8?H>#7|$&pdM!<297aZ+6?-^+8g!jmGnm0=1n9b;JP z$7Hr1k>N*6`KZJix0&_-jqi+UPm9!MWbT>Ni78Q^e03(#v_Yb#js5@VBkv+u&6Q5b zHRC0qOF`cR$@7buAXz}2FPshI3D+a>4E+MO&b6m z291K^{}*uxN&{tq@<4?kAE-D+Z|%c`u(ulX#gr2v%g2Ag%S>~B3CqkC_XUZv%CDu*30J6+QQ}#fXxoXN)kY#?FatN}_FH>%dl6xV`8epdP zN6Gsk%lcrZ4?vc6!jy*~pJkC_A2#N{nVt;U+MhJYCs^`lK$dmL%yr}Z|kY)Wc>o0~ZYnmxnMU@Xgo-iJ*$c&GfKZJCvzZxN1`_lwj)>kusbUZ}I zOEdCY{o4vz)?l-IdsKb9qT~+9)_CZJENi=2zAsAdhitWfKV+-_4??!uGZ-ZgN0mPU z+1lTcsPvwvjP=^I=P+ceeMcZ$+aH0v(PDp9$He#wLzaEQtgi!dwnaV)`HRLccK5{b ziid2Ck0i*lpPBV%K(4UJZIG|D$VVW{K4j)ke%ja@O*sSdw=L;ikgfgifh>EMnSUgz zeB3h={Sy!QB1?V;Wb61lAjDGx*k+Pwp-F0AYWmT_eG@-L!N0#PwbpnJ{__( zy%@5b4b1lakn=2ZFJ$Zd+Yi|~{s$q;*~cuO_-s^rkXKsL8z5WTYk_PX&vwYomi*4= zH0?(gIjwu*e28A(GhQ&xDyBWr_80dU=O8oP4_VGhrksNMt@9&v$yoeB%0*4%xasWJjg1 zf@~eH63Ev2LXfTYG()!fza6r5fA5US-w#>N@@D)dzh+!3n6d-%>6Y~TD7gf3k|n(X z@(C6>4B2XbD`aat?u2YzZ#p4c$FCQ%)&6}^@<3Gi!;nw0v_A^jx?jfrVxoQVkgfBz zv45gH2~p|6sC0W&dR|m|VpMuzRC-cWx-Tj{dOn0O-@a<;U-W!vMt%QnN$-KY)*}C_ z`yq<_U;iAMH9H}EXziaL3?KThS8fd-$~w6%eCYAdza2jGgJ1ZzAG+Y_o3r41kEPvvziwUCwa9h$gZa;Ke)3orRQ-4*n{m`siQ0dn`(ZYuw-H1Q$ z{pWex4&9Mt-*)JYG>EsI12IjqJiH8l_T`=wK6FYsxQ1;={c<+`9H_^i(e~NlL!MJn z{rA7KecPd5oY1`OP|}aV?R*4(@>-j=9lHN4(WTzG?a+Jsw{1K0(L1Q+v7dp zZzA8~$MNUO!?5(uS*Wz_d-(JCd|UX?jRVl#aVf-0|6abm?S{s%wjb*OC>GSPzT$yo zU@@>cbjgG9;1fXyZ@uKfRG=M{0!jkKfsTKUd*HYSj(gy^2abE-xCf4V;J62ld*HYS zj(gy^2abE-|CR^jUR>LK_)hI!O}jz9h>rTmcO%V6PeJ+-r0d`l!9R|hmQ~a{!RLaH zgWh+>#0unIPuwH8KJLQxZ;_@o0fqM!YFZE|?KZBSSjH;FKD{rKJ!lnW{W=|a#; z|HVg*kXu1JLH(fNHt0bI!4H8(K-vSEwja7tPy@&gITe%z>V=#Qa)Lknpr+*m3qgKR z8>knQgmgcsSn`36KzCI1$e#wv201~6AU`N=2l@sKgLZ-XcA|aI2uS>%26BRepfIQv z)B)-P9RwW)9R;PruUVi%kPd1DwSmG1?mM2gN}j{+mRQP1u6vjKp{{ID6k8*fqKw~HppEdCu9ex5Bv~l1T-p$HdB6r zF$Z}-4WPr1qu-z=@a>>3P(LUZ!hR8TH-4q!1T0MbDzD3=O- zGx#=81NdR!2&e>nB1mG{E-?&}SayPnK@BK7jPE&;pNF5oX8?0St3W=GAJhgacmei< zd>|dv2xph3umKqn{#ln9Ck^}dL*pnaeL&>(0S zGy-Zyy7m%m{weYUlR+7v0?66GJkTmoHe^4r5!4LY1?mCqMEQQ;LC`R01Qgqgc0og+ zRp@UbFb$LoDgaf1!k|`A2dH0Ud=JqA+6C$Y^??q8hCw5sc--gj1swzpf{I^3{(krw zV?Xk9_zjrwD(nYkfbu|vpdhFj)CuYb4S-@%E*a!RnMC1#fw6rZwt+hCgPoW|d7xrY z6(|JKT45uw71RNe`@k)rHqb6m4`?4qzK=Nq((pZP0w@KP4sw8ULHVF!Pzh)s#{4Mi z8U&8W`1hb6FJr7>Qx~WoWc?%`MO-7ll#!1OWCyj{Y+BFXMf1g8E_8e5~UBwLi&!Gx{%nlaFb?j`sC` zq5Wc%-v$557@6g>g_(x(p9}NFpH`Naag~p>?*tX2eDRoQzW6gp`z2oFBjw{jJt&{7 zB+(xGlZ-JI`z7||BjwXTgDBtnFO)Avc^UhD#JPOT@|yg|AjH5w`$+6r<1YpU(*Ic@ zOS)O!jK6=kycvK0Zh15QtmVW1!u&DqH{;J*-qOuuvQpj}fB$ZIGyeXa^2!Fr&%aaN z8h`&zd29Sx%eNiF{}Pq5|H)ah|3<^LqANiR@9M!?f0v;%|DFa$&RWB*m{(s1f*%0? z-3l!C!u%aYplicg( zAbRkBJWEp_B&+j|^y#G4nETkngg<*Z`UJjUr=~slEzEQ9xzH~L-wIyxoB&?VZ=yf2 z)Yv;kUjbhBPvI}kGxo(?)HD4`v<-a*__r5hU&CH5_0M!-?;`)v6=(~*l-<4%ZGlfi zo~7XB+#~vra*Xqwv|A2d&IC!wQ?>wYffxPz+2}j@3+JO<@OI?6dLH})Ug~MP41Rjt zsJ{ffobRNq?_?S0xH$07&p|%uC4Vb;Ij2eeH-VS4w(z%Q8fP}iQ+O$K%%22a&Um8_ zqueFv_x*W1Q8btrx+|`A_tlz{}ZK^ts^W94LAXyqu3k|8li)E)@M1@N!-k zy%W5g6-6HlUe5EP|M^YmJN4fNFK0Z_=Ydb5J`TK`Jw^YED&wpv^?Vn+oS8+R4_?ln zqK^kJ&w_~l%}Ut%yfJ_K%d`ofQz4oDs@;sTKSg~n!go6K;3fV-;M>7VU7y!uoXP(f ze3<-g;Dg}hdU7RrANbr>JR1^39im4)Ke+|ICSL?z&cKrA<^bXoyx3g`K92l6@JD+M zeKL4C-}+#iYs2`M*}=>8imXkZT5Zzj6lmnyNa{ZQyC{#m5^s0ihWyY=%>NL)TsMjS z8{p;oN%X1U<+@Db+y-8*eX4$j=l^bnFA!tJ;BN|z``{|@DSd{YMz@ap;CAq4j3t3L z<2(d^|Fh3Y$Y74o?|+1GfIZTeN5IQ@T=*NBU^95}{bSoP4&>K^m**=)KM#B%`4hnB zk^jXuO`XltHGON?*N~RGridIr)Knzd^>n^Y(`=4RG(NV z&GqccyT{jw%fXvI`_o;p?R8^}zYRXV6@@^_M}R{3#C2mmcoJhmS#;U27`j%AZUDM| z(OYzqcdE~HDAitaKjsp6*<%vG$AOo_$2Te_yj-#d6`!yfda6p1Mwr}J>Xlw zOZipc8^BBXJn(+-Qa%g3)GO;!I`|Uk6Tv5g_kd3Vp9o&sO98}^zW{vnCk6^xF9+Zo zX}=5nLGW?RDE7%3A?-=JtRsCrM!KvuX8&Y8>VjVElQqk!awC z!OQio@M3H9M`FwLPbzrRzBKUpFJq6vTu%otw(JC-0X_@*Fn9;}6!7AQEWlKs6QGp2 zEPj*vWxfk9b(;N_dgPflu~F)g=jDXY2A>W-ggKrIeyWcRO4DZXU-U=Pt^J!SJ%qTH zF-b+D*egEny$@lHYXnp7l9-x4F6&PrpGEHJg0C&I_5y6T$Voluk45g>3;$Z=0Q^{N zkyoMLRTlXuWZfb+VE%+H^8S8IM~hs5`M=8|htbC#$m1WI=CF;+!nOXznu>FlMV2e4 zyr}%if1Q}WI7)7fk_V&YyB@bF;Yt6^`;~qHff#V)H z?t$YTIPQVt9ysoS;~p?QkZ?p!np$i;5NG|^IAQ_y`IPgBPU>?hXA`ricTmnCrc<9r zIhB};vn}q6#AXBk6PN{*_T@}2n1pMOvw(@lHAw6z@C?YF{f3hme*5uMcMQqCr3QSYFfK}@GUjdCh6h5BU5NyJ3z?UWOU@zlpr zjwNc;kN(~8+fm{OP~z(d<-^2b>W3%~5(lV1NO?bTANBo|`-le_FZ+r8#6DsVv5VM2 z+(q0;Y$K*I?ot_d@wjHR!+y^@M!yP(xx@@&3eirCC5{|0$_)|s6MKmr#5Q6RF+}te zJ;VZHE-{0cLbMZOi6d{bed2y%FR_EzMr7nSU}7rW)M?|c491Xg!6KUxS!Zd z>>#!gn}{KzpE&v#V_qKxo{8}o2Fm;#BFeS;S0I;g9(#!L{kP;x{LF|$J5b~VVm$S6 zlw*k+^`oOk{-eYZpo(Y8hl#_~4^bW@4p4uP@_ynz>ia485qqicq1;96q`rglE@C_N zJ1MsjTd8lM+)QkuK1{ih*g$=VvQ7+AAE4|fR#ESxTtf6vUrf1>xQhA$%K5}R>YbEx ziP_X=QFahBs86SyMogtXg>o`6iTXs!c47kc@s#6;vD9mnN4dTo<@z>4`3Uha^~02h zh=bG*P(Dc9PyIg1{lq@%dnxx2yQuG^+(Fz$eLLlyL}!e#f94Xihz?>pF^!l)OeQ80 z?ZkLu98n{Va=jcO9w81Bhlp8RPaRxOlenJ7zGuv>c!c`Hl!u8! z)DKb~AReTCKjnSIe(L)u_Y!-k@1opE?4W)Z<#ysu>f0!{5?iQmrrbmfQ{PCrfjG># zA0iGA4-)qg`-#289%3i4gV;{oNo*yy5Sxf$VgoTm401jMI3Ef*ADZ4b;x9z>6FtNN zVlFX*m_oD@V~Hc2A4A0b#8J!#nJ-6yX99;gPlkx{osT+~a(;M-@?4_KkNh!XzT^Q# zb`o=`&!(J3bWoo`Ih~kBeJbS?VlwqfloN?|>Juo(6XU3lrK}N08UIHa_anq3)E}li zOdO(qkn#ZWAocqx?<4k8-$%KZ*h766Gu zTs&VX}kBg%8Fl24*fu4hI$&PRzOKy{r%`7m*q`XS1L!~yCLQr=J8 zM}0r#K4LHRJ(RnMoz!I0Ph#4752 zluL+h9LH8-GqK4WUt$AMCkBarVimE3=pnW+KAIUHLB>bNfH7`u#3o{h=qGxJ1;kup z1~G+bC&m)HcrNVZd9Z`Hi~4rTJBcMcFM4=Rl<%-5uG(q;PTJoH`_F)WAM5F7`95Nh z^#oYnPwZknovf#Y_4LwS|Nk2P@DK}#xx@@&3eirCC62J3A>w|b{8q=wus4M$zv&^e z{BDP!{HBMXohZNmA+r45hoJnnhhQvGej`NWAm-!gzyMI@YY9;NeDEv68jkUy~KWwdmqQWo$(+0f#HXdUm7?>+)wN!b`aZ$O~eqKQ+lZ||bDA~q9Sh^@pn;!a{aaTl?J z*h%an_7HoCeZ+p^KH`4jLE->$kT^sfCLSgpA&wA_5=V*JpE&-+IAT08foLZt5|fC@ z#1vvGF^!l`%pf|5S;TB&F40NMBjyteh^vT&#A2d{SVHs>tB8JLfEXm|#1OH8*hmZ$ zn~2TC7Gf*0jkuH8PTWQ8Aa)YFh&{w!Vjr=exR1D>c#t?i93&1Ahlz)YM~EZDqr_37 z_GgYiF^(8dOd#5ciNqvgGBJgiN=zfB6ElboViqx*m`ijL^N9Jx0^%xSA+ea~A(jw* z#44hn7$63TIx$3SAT|=i#3o`hv4z-5Y$NU@wi9;|JBXdcE@BU{m)J+_C+;KeCmtjY z5C@4v#9`uL;t}Eq@hEYWsEu&^iE+euVgk`lOe7`|lZh$BRAL%2otQy%5VMHc#9X42 zm`BVf77$kv3yH-<53z*kBUTap!~ii!)QKTt1F?}9CN>e9i7mudVjFQMv7NY!*g@SkKZFN?>;_7 zelhr8ke7EK|3F^eeLN|_s9)ZFoIzgReY}#qy!+@UFYi7+KwjQ`93(IAKAwE4QIEX) zm`+~aef$=AdH2yzUfzA&Mqb{1e4hOK*_!q)`3vXc-4*gz&%<@iX-56>?qfE2dH2yv zUfzBD4taU^@iFr9?qffBdH3-zvyu9ytfV{l#_&4(M zzT@dh^dWrvb@K9CLL14;ZwYk>AE)6(XZW9b`8}bJ$^ZUGm`7NT#2$I~aRzyL_i-_K zdG~QGd3pD7D|vbMv6Z~M``Arh-hF(JyuADPWvqQtzr5#o8F_in(M4X~bNn88dC#$f zyu9c5K6!c1@#J%idak@1aY+7h@FnEsea5ZizYYFj^73vyx~qK&Hhh8@#1^3V{zT*5 zH_`V%e>wD6BGl(&3y-hmRDLJ=G#?qvJRhAn&cB8Y&(z12qzXyFJ|6?!yH!Ard z@VAklhdI(mK6WjBa~yR_*_|a=H%>D6FCqWe!JGA8MST|X-$4Fp@UfOW%cqa$Pq6Tr zxM3^xmwylYqb2`L>UG5SY5y@^_D!iD@gw($JH$@#a$op;@^Y{ED0#Vme4*HnJaVu3 zuTm#?xo@1pJaX?jlf2wlUO`^&MSl!CCBM3_OugJ|&al`&Z1MA7Ep}#uKSetiJ;VQQ zgQHB|4voqG40W6Q_bhoFmOS|uzQ|H%iABG|Qnt>L=T>VT3x6YQGTZ&RMc-?w=XVzV zkCr^K=&xDUkFhZM?^)`++hW7-EPXuRQZ~!NpA<7*&kBpa+QNq|{GFC|cUko3tF~-0 zb3U_gbC7pv=Wi<{fAb&D+ja$F;1tak+x*?zw|$HJg3WhqyHMF+vu(Rnm!Bh&Jhn?7 z`F8jc>R-=q2ISkN$IzRpC#Y-%kPA{mHjr` zTi^eBcnxh>8@_#;k9_u1w{HuQ|K;xO+kQa4!f%l8Nw9?v zntGotywxmwofiIp`oZLw@NLxZTdIXmS8ZuF`HlH`#<)+V@Y`t5 zqSdzWN3`>jSEhykNWQguTKF#J*;#B0zhl%hU7tHG{2=wWoMH=~#QaA(weXLr??K<6 zAiwJkTliV>#rVPf4_Hq^ZESci^*^}axj?!<3i37xbVi&QU*g|Y128ll6=)3F>ae&xQ>>{=kTZoOsAkjxGB<2yb zh-t(mVmxv5AloMn5c`Q;#CBo}v5^=g`iO zNDLBv#H9C({=^g0h+V{XVhgd67$o|Lg~U8!7P0Ytqy8Y#M=T`f5wnPC#3W)oag_BP zCJqq$O+E7s5c`Q;#CBqfDGwNSwGbPLL86aXNX#Q<5z~lC#CYPU*)C=IUz4()$p4*G z>k3i+AEn4?#3W)oag^l`69#L-_GpV&ogC$HgWMo7BP*OM2sf}i9TYXnT|8_X`o+WmH#sE5Kz7h z9|H`7u&rvp0eudV>$%?oKLY(4^daadNUn=c0gZr{>xKl-si3ccw z8}wBWT%ln&v@^k@J6as@9MHL-lR@};T*D&-+8LnVA^j`BBfvj^{s=-Bv_a4)=rfRP z!%4{VC*UWb!=T@TPKWLU(21avK#3rH<*xk=Y5xK21nvSo3;GM_8PH!r{{TG=dJ^92gGzw!}Z$md}Lve?+Xh_o2g6N5Tp;&F6?uVa3WsC@&3IJRLv zNKD({`xw{}^8$1)f?fjs6x0WL1@tQD7oY>64?&1&8{*xDc();}OnG0%W7wlS@s`#~7T7>r>I#xDkA z7K3q$!PvxLTw*XcZJ38P%u^fYrVVq`hIwkk{Ip?S+7P=j184_x(Dq9Z=9~?#wqZWn zFb{2*t2WF*8|JAE^Vf#?Yr{OXVV>H0kpC?Z;yMN~7K1pALF~mm4B7|%dmzkR8{#Jh z^Vf#?5rY_sL0rUq0R12cbJTVi^f3r?+xAD$5zr?f%w^js2=m*9`4)ruZNr?4>4w}3 z`Wfg=(BD9q(>Ba=8|JwU^W27cZ^K--VUERU_!Jctm0s$&bmls*zo^Px5eBLSN=p6Snktvu zD~2z;d|_n;{&9ST-^j60>R;|%>#g=yNDgIKdCj^N(g~V5Zo={vE3_haWqFmW+KYcs zU$fZnEuYfT1%C8pO|9SSIkvI6F28GX6U$aW@107&DB$*1`AaJ+rb?u17F1WeBJLfx zd)W%6=a#yq23PeLWm>sBZ@KrTT5pYis+O)=bEDTiWeUo{xfMtiBjM`hUZ2-h1FtT; zyrA0ay~68XSW@cqEbuR`@OTj~6V(eVYby{U3ol=_G;dj@N3t)jSX-Izub!wJALQ|j z1skip3sHtSrL~3CUO4jd>dJEEXro@5A=M)qmaSOe@i<)-9-p`R>q?IJ*yyE{o{+xW zTVA=|Yf;sB{Wq3ZX+>oVFJIvERU)J-t8=|;U9~=R#Tra2YOB1}ll{43<;p4#>_i`@ znpN(=S%vAZI&aK=~;j45_F$tHg_~HOvS>rW_V9L39O=WeN zu^vq7;)<0Es;bzqST5!CzhJL#D|c#Gqpe zx=TveA0t(TgwcQmX%zx&*@_&mS0Te|d2K~rWo6Y;70Sz2$N;Y>y%}M>Y(-w>IsxQR zb>zD$ygpGBc+0CQt1v1yzqX3XMS&``T9dnC!HUv#6>w6umnoNfy&eoIC1+)g zAAQa(t*P?4HZH^FAdOLbwYR!PEicg;b6HriQlju`m#@})d1W=L%)^)}no2LU+%Q>-?bMjRlk!VSKsI6P zvQ)ITs@e-3)-i9zdf>(y>}h7mMs3iRMZ_5W5;VnC11o8%tR6L55u&A}vbywUV>MCB zaFlXU!0X25culFlB)__JJwkV#H@e{ESi`j#`R{EyOQcxmo zOiqa`8*(17#HtG2NlhUx{G~oPOS-&brP>u;)v|+$xS|S4jIm>%9kAZ6t5yrHNBmzo z#Ug`=U0UI(++bOViWXjB=<>Yly}t3;v7)4M1NUkKsMna@6QTr8M3k^AUl}Tu$}L4`;2t0aUc6v{G4+ zzcL5)Vnmz^ki24Le(f4xsT;Oo;;XrD2IkaG!TN>lY6i$usj6C7StSELDH_!BZf2b- z`HPQii!0X4p+i>0DXK1T)s)E+zXEYB>%E+3%yn|DnoyWcGJ({jLTDGQ-B69=vW9cL zOgErPom6#Xmy>lKn^+AF?mlmFd8MqL+N>3owbgF#LKl|PSqp1wg)Y9tF?06J*|WYd zvD97VtHr8cTQk#*+xu?!*VSno>w{;eHpicuo;G{NW$G`kLN?5t{mqO^jjM|) zXtIO3+hD@>oMG{azF0DM6yxuv&SyS94E}YeU zDoy$zEv)sq{MZL-)bN2du3>8CUlx3#UavUachVglD=`=A1Hk0+nHf{JJQq-+B z0|Z!kjZ4n3Q3)kjUA@&<(IlR6Oo=3Wyf|T0x=k}#xhZ098&_hc!l*}FQDds)@>7Nb zr;Irff6b}IQE|aKI5g7I)cK-okt+&IHPOihrGB4x4h{yn-WoSzPP!9m0oKZb2IHhy zFT2D>dNY;W6%waoTPoB48oj=+N z(@N5854)VQVr4zDy5pJI%=?08$+N@^%Kk2 zj$b#-G48#1J<`#IC6%S_Xq&6OzKKt^2xd-h8h=wywXoqmuOQR(q~|+UhmC!`AftCIk1nPnFIiD*984l( zrwSPfQruF5>AljX2Gyj^_ZuX@oNM+%2*54;+s4c^{%rKgbRBWCnWH&?2m#YelE?Nz- zxUv9efXNw@52j9Xjjz9p-IW!S%WhDY!nn?@^?4S`mCY1>a&2&xsr$vtO4m%TK@Omk zZ-h^7jpMW>7+D;*{3hJ}l<+fjGIU>%X{jq<-qlby?~awVJSv~z->I7Y zm#V{+qq>u#+B|k$IkkR&WyPWjIkcH)vZ>lM@)^?@H~eq~HV4;x;@#33-nczh$JD9I zm~ApHMjg?;ol~Ry`$fK-axzS^)tC{gkz@3F@_d+7$%OcrlzOZ)2|_k4B%oawk^_SZAj5eZRi9@pfEWZs;a zk?dACX>i}XV*DH$xwe^VAstVQT)|ilDJ#d5i~dqPhcOy8)M6Q0vm+dKY`el3j zCwZm}>nUr)wyw_J>dNMe3^X$?tK9HK+00!Qfg-0&*?F0rA#dCSONND#K7Iu-;VN)a zUNZ#8^G97VOe`_gTw}vxAa+*EDOJv(6N}dv>#|W|VrKbH|M=&)2abE-|BMGd|M>5C z97;QlwVeR`5}uH21>%t_Jo%)>*o%q^7Og6PG~qKyN#ThQrh^3Wbbue5fN;iVa`~?n zf>BF~TwQDBV(S}EXm!nmM+yb;NwL%+ zRm`5EjzMJ4Mjb$9KS1h;HS0(&Dsmh5g;k35E!r19NyZyzX?O|_XgqVotPz`vitsg= zx7y{)Fj6Mh@j)I^67Y1RV5A)QX+{ZY7uO2-uHXDjQAZ)tvQdYiwGOig>YyDCLp4Pm ztw?dA4#7y<;A27NhcS`6pkRTi5*!32TTsP<)WMj*xyc2IpQ56v%EzV~^;qpkbCEKh zjXsYliBF>I7(#g&e}%{JK?MTJh^s1jT4!<{;+^wkcSQM)#Frlw2Qr{!$2jd2}@4( zWkMxW*zqsaQI4<4@l6%J-Cc`8nYs?l5yK8^Uu5l7pCUXR;VW8O8mO(J9PLy2rAK^h zL?uk>3&zB-L6Rrip~{9?$1&`1%OicPeX2U9`(VT%p5O!?Yg`Z)E(8cGnrz33c}5+A z$EssIzQmZxb)1w2HGYOrp|vlPU48JdTO__jF-08(c-lM>bpVfL2QJ?Im2Nz&p+1xA z_>z%gBO2M%|KcQzb}?VnQ>b59M?RkVmAa167v;{P^{#3)I8)fsrE0f*$v`%qKol_i zAzuL+)l6MS3|?AObsWPET`j%Y5FM>dvI7X7Qd_&8!7xqO=tc5=#;nc9-wa{sSE9 zp0z?f@H8v0bd5Y1XRUW3BFi;(tttr>s5+IsQl|?Kr2msTSKzrPJYcbL>T1nYsoAJ| z6)-V(+0HjjUwnbR*Lc@lS?ZsoE|bddD#_~*C>j(gy^2abE-xCf4V;J62ld*HYS zj(gy^2abE-xCj0}{O?#+LcLy$O)NGp@U+Js6ZQ4V@_-T}X z+PqAUO|JW%J8F!s2(k|*a*Kw{^tfRcxwH0+O(=}DEX)o;5 zBrUUXOlKLD-hKaAN3inDfY~N(NY5(LYz;BJ@w0S%hqO?O-@H|e+x(K2u=zpF9(1Db zE$%?@hA#)|_SFRH_LK!+lcP%4rUkd0A6T$O3(UP=b2wVH?D_|PA8=~7E!Mw;I(~>c zUPm2|qYl`Dn++`dW657fV!@2D%A7O1;rwSDUvEw!%fIs0X0 z!+n`$&s@E-tax7CjjQeTJ*xtBi&r`7W*}es5_{c@yX=?ENJ-9|QT6`H84dI5E`l!G z8K_(1bOdvz!I$V)&YSkEoW0LGa(?lLf}CCRf{RbH*Oep$>XH*2L2Y56Zb^*2Zpj1o z%a;5ln7QOjk1LyUmfP!6^8>-`d?Qa8@|67w_FU1BS@!aUraeI??8#nbj;VJx8h7Z&7C1 zr;i`op7&tS*jVO_>z+8aJ=DM>Tj)_QDw%Gqb_xosz;68!qZ^Sp=TU9KYO$wr`3oh zvF8e>QIEtD;{UQG2WDk1Nx1%)_8`VDD~rj^EVHjTraca^=imdGGk&}InD!KiJs<6N z^b*WnM+>#?J@1~iajrVGqdc(1IM&yj@UEucIJ#zzH>}_t`&P0t#;(t zKR%{CSBpK53}r4kG<||Sms`fGM(i0ql3DiP(FyjH$arDgWxP_vo^_R(Gh*Jg+7p>) z*NZLRztEAB_uYss$){m1#u#y<#%b*DnM*QrRxU|aaTCm59;i!3y2Q*zvEe(_nPq?7 zys~VSikZ6X)mRgd9*LLodopLZ&cixt#7prKtOqg1JYOX3fA$+kjw8Mxr_+cPYx^p0 z+g`|A^1IwA+xJWRSALLL_WC1Jwy*mC*FBjtt}LFi{p+Ot=X)GET~$-Iuf`$u?#v~d zUY@djx3vGe`!mb_`|ne>ui|07Ic58G z(*AD;GRyA#&6Mq{`Ed^BNAT#B?XQsbd)pm3S9{I&gW10^v1jf0 zag$@m`41QD2+Rw%U1$%sp6Lkc#`xE_oMxZjGTJn^r8V=KmYwtJZ~c|MUO(RvY(=^| z#$Mn3HT(Q-?{#y#uYKv7?(})}UB9!}w_fC^m+~Q`uRhN{fAtSfnY+4w`!%cc=ha{T zroBG<*N%EAzXR#FTxg$v%h-{*w~W+Xb4y@e{mt*$>x+NysLzfG)VIXgH+}jm`@BzY z4bA!V`ZuorbmzQH|9H;6Y49yaeKFFzQ9ko`_W7BWJLhI@y6T!twExYY+v}6xcWfF& z`f8*nzG! z)21y~H>J5bL zvY&DUm*0r|Dj#e?zM4nv^J*?UIH%^#Jy+Mjp6a{ooBR(tf?uvi9S;P;U(yofOt|R) z%Flk%K5zE#zcXj{TidRl4cltIi}Eq{?Uh=*ocD@xIu?3X&T%+X$+<5pd)=bTlK=SH zWyQ_UWoZdtm-AI|&iOXij33|TDjWE`SSwh+4bL`&7iw|a&e!6%xwVAwG|diOta)yH z;oPyIS-0ZM`20nIVDQX9@XqrC1wT%7m}gXJQ%IkNFZWLV!}HnqXnnyeW9*yH$IoxJ z{-LV=dkNX7Ukhe0u>)g~9`C@MI~S-9*~IWv0dpI>gTfB(;cS@&q!lIQ#z zab|qM<#wl5KOK4IBTsRC?puNSt-lV`zkejZ{@M5JSC0K9 z6KBc9`Zk;ap`Y8WWkYwt++U9M%(_>bzu=y+VW6CwQ{?m=IT^XR5l z^BisJBL3Jsb|e!WmUD7&6Z~<{`2jhji$CzCo;tS&Pn!17T%6HY7He}>mY#hyc!M@G zn3I(2R;U5~+eUqk(8U2E1q6tN%nn(=^PQXh$_7i?pL z^W!y}>O0lo9x-n#p6mjB;x1UR-;^}VporR6)dx;NmT{L7N-$MgkSfeYuedfllZ zpCi0L%Yr`}%)ZoRUKyB=YX&{^ZqHnoR*bT>(uRK5yInfY_Nq_c`E@|wt7ReWT4}f5 z{eD2&s((nX5$e2Xs~GKg>h(TN>X&x1?;YzwpTcH4GG1t-a}WAqj9HzW@555R8cXV} zI~c zgq)S9*`$7{d+wI*M42zFzZG?O>Tmru>J64ky^#IjuNPk0gA6|fm)75#s3EQsg2iVB za6Kdst;Gj#NX)PA`Ex+!ojy(KR6a+ULb;|2UjAjN_f#2g(`ISQ@Xx_jdm^^pa@e#L zwrvzU&Hm#$twj7HeGvc6eV{9-x4hF*zeC33mff?qYFhTaTCS>J{2O|w3;KIR2HyjI z8~G;iw_3_>lrOraJYq!VhfVw#oHorEBTHx=lX2Wv{`o%ng}@X^g@nzmNW z)irHSk7k=UhOwLvtOvo4c}1EHZJ#7|1aCPrpstHU@5Jfu_fuueuolUHtCo=)(Bi zd?(YBzS%N1mc2zw({Dd8T0iZjfaA$M`(!Pe)uMc7S9%pz#YY^@mgy)|F-@p&^ z>p?}DZEnkR`}O7nom=<3m#}rtfes@UH~z1zt3mIX0qM{D7o>k1Us3sPc`rfo1UH@; z*t+^a$EIKJ32f~?fO)d<5m|Fp8O&M8cf!^xS#Oo@{8!buJ}0)R>-voW6?1#Xj+*1D zhYlo|afkBPN<2tkvBqge%pQo}gZwP-P~|a~rM&Dv61Vex;GZ+*m&BLcD`}plC1gR5 zdScYN_U<>}&$s(@_q*v%E%1qc_uIW$AHe5}U_a)Z0{V6EztaucB=FoVdM{xk3<&e1HnU!!kEI{bho&FxWnZk0Zmc8kyS(EeWCeJ}%cX^tJw zIvp=RyUM9;;QZg;1KybbuuZA^RT-OPmvHp$gI-pxAYYzIdRPs8`ou=+z znK2;ix3nwcuZP}hLH-mK6WFWGHCN)a@4P2^Wc-7pbIr9PEIve;2HpKmeDJ+*sQK>H z*8fK4q{IN$q$Jf(^ii#up|?VgmpgNjXRql4@x82rr~~`WTe@Q}?q_|d_9V40A@3dV z=|;?bwf^cZElbV47nHrhtu5~)Z0&xl75U1gEm@l+59&gn*Iz5Kq2|vz%)_2Blv28^Q|Z`}vyw~x;y z{hl`+<~~)7z6wcsr&imoBc3H4{1bwZ!CMxvHdX0EykKAzI2%W7ylSB_{OmAetVS>gHN|RUVa)e zR(powqc?`YpCaqjTwT-V!M1rH$a+@$H%Xs|IwVHa+zh=jih4ZtnD0)_|E}yUi2wa^ z&XV%*>8&zGD0>1IxS#mPhv7 ze96~1ROj5)e50rF<)Q?TmH0M?f&#&VxicfZwX zjOA`0>IkCDQn6JJ?Zf=5S+Hr^*1()({J)?NjPXOCE|zqOy)fpFjHQe-Y#6~A(W%xw z_gg*SvvJNuU#mZ3UO6x2DSiRYFj9U2_8bE-&tg>BO)1|CNSm8~^@5D?=3uqNKn<=Z z{FmS?>Qv*uWna9M(;tvL)%Td=hV<-69BkPahqTQqzqAJ%B@O+Gbv&?J?D87rZ2g-S z-X54UC~I!bw@^o(bE1dVXna6M-01eQtQ83&u*5p+Uti={x;d85esR0)4nPldRecwcJ5n+wDJjYs?HBL zU8~>m`mn5dNMDLRVeXIh>CO9A8D}=FQ27sa)IC@xZI2?~1+b?;>=qx;_7><*G5f2^ zV9k~?n_hlO%3*z|`glJ2qxL7M|G!=hYJ2n}*0qE|SGaEXrd-dBeKUzNPkUUtoG|7iOSbTHPvEy%8AF6o% ze|oFI1h0C$VaxPl0-PIoF8au4!BKm1vqb+kWP4+xv-u2_GvkzyTs_ASWbECh< zvE#{Pj7N#&kvS{t2=th9Pa<#SyU4#1^of*_u`||4v#!c#&APUB_xGr=4oZLehfr@e z%HJ6|`>FA)yiL~q@TT#55_`}G>-zG%ZLCN2=_Xt|KZtt@Pl4WyTyyHMWf9uhn7vu+ zjI8CbdEPmo4?tt+1Niy#K}9llT7z1<-FG8~s(AfYxfy(&e#firj*eYw?RIJvA2U7@ z_3*1Z&G`!b+iI@<=v8&Sv+4Zr1&npIqFcZ7)v9`|tB%emf-=wa4X+m>{|^1GSC7h> zAh`BS&c}*v^(_Z+mKwwPMbl+GpF=;b{eD6Gfc~n!zaQyutBeQyc$0q5tBHsiH3ry! zan9P+gtjsxdc*+sU(sVfsW?~8Zal*zt1;a-WX+37Ma zk$jRzU0b}W&Nebe$lq(6xyyScucSwho%BJ@-V#UB5B=^}2E>LS?jM-(>3I3^R_LA~Ta6K$_rKvuk zF3Bf#sksb0kuTY_75QT&U*sAyD*j$rFgC2>ZV%!PXF|E|HEl=PSLVJnHinqWQ1>HL zOjpzzYi#+&@cRtC<&_k=wf+B5gpZ0)~f zUO#{CSg*Qm3_k4kCXf|k2bBnJ0NpF`lA1+@2Jcx z*-vLC$$nI}SM77KOY+P;@3B$iyj1px-qhza=0bm=aetuf4%Y3Lvf0};pInPeEX%d^ zy!o(ed!NIx<8kasWu^MIz6@iJD7*fmt(pz@J91?XU~jUi>!EvIk@goz8L0#1#Qxbj z^vEM=7Z~HA#Y;OlYYrMudYqe59kg}=+~N`WEuO+jc=e% ziNz#2yX!4|CCJ-t`18iyW`CvcMxSrI-{`X~1^pc|ZI%AQ-ZYfmJl@Y6YuV3y>8Cp1 zqpzwR)z=$Wn&nY83uPCL_w~k1+A^EA%wXT+RQV14g%+F4{cn|&5nG&E>EDcUrD}bL z|E41zJkWng{kv*SfL*ed=~7>)uL^eLAy4;&wxmww*U}vRPZ}YnQgwJPGxsLbnut`a0sF$)d+NlwQL2)cFs6IFWrgOY(`0 zDsDo3@Lj38|ATa_F(qpJCC~ z+NWoI0J~-GaolAc-0ad~u{Sh6hqX`E!@8=?$*6mk1#?y}?HrC$C zIglW0&D<@I#$&A>jO5w9MvY2>AN27N4k0bH*Ft4o)j}C>%WbA z6OTW77`{t`&oIZlcS`K2c#-{GojqP0hJLege{-LlsnvN{V%bQ4DIV!A{hpT+RNSdO z*845QL0EL+M~R1LW!%+0L~n*V3*SFBV&3nOz0#5M(|#EjbMMwedlQQ_I0E+|W!=##rJUmS~*SUu;Fa*Q@(_ zXF~^D-v3-n>WjHAd+a{74rGib9}Sy!Uv>_B_cL5Wx_b}mp%3|@ z&sT8XPK1s5;y2tkJMya7W1cz0M%;sucE#Uv?+3m*B6G^Lb8Gir#De=ZsYCoPYl*6h z_im83OPyQpAM1Ue{gry8ztV5kqwDwVMZes)N`Lxd?kyPGEPb}6i(b|Oq?MX|5GNd@^=loHo`I7seVJlzP$KG8MqsaTyQSIp2rkz`n z2LCj|R@_H?Y3QI$a~Ss**4zVs>7&UT%UGaZpBhuNE$OJQ z4Z3U9+%e=`xW><)_W{;>DGzuQd8?jAc)j{-X5Nb*}Q8+OziR zkWc0OGVXWLpE5o&9+StSc<@+h=Dza+=DEbUIj{A5y3Ow`T8p*FypDBh#dqj(y^D14 zw}H2luLFn=akm0~>Dm*!11j2kuMOLtTEoTVm;kx7Gay+;i6JMEB>(IH(a_EP;-;26OkrqUn z(I>9M_}+gc+8>b^#kHmEiRO3OTVK4VkZbXHjBb)XU2wnNvge3XyI$@8I8!9S=c31W zDg7HV7SNZdwG@4kwL`zBD_+0l`Bf$zUE;nAO$ve&EYUyN~vCEsn5hv{|7 zZq%=0k=MZ}=MlXFlgO%%^l9&y`mRvsogRAbh`C3h+{KI+d&Ajyexn%IeTW6LA18I8 zPILd8xcAAq0r8;X8rR#Xvt_)_!gtwkzl?_wTlZ(dFCWX8$^IgGlxf!8-6>A3@Db6Q z@gQp&((pXh{dta;?=M8U-2cj#^P|M2qsQo@tecW|59cGsSdZ9inWJhB!cQ`uGQZ|y zZ1rGQNNkt;1+*LIq~{!H>#VKs-QA(z-Fd|DccFRx=ah6Q=hUwI+j#nQs!w|8*+J+( zRC~o{Ey-7`YgyR~(@}R8?makOxnI6l)bdo_Dn`y%_p1>b>P*;o-j5JRm@7uwVk6E~ zo!`&W7N+~$x;z(>jeGRDs4H9IrZ474M@KK#QqgDQyDIBF5m|R6j?rgx?a@P>N7>g_ z*m?=a=%B==jE9yqzaow zbIw>ZpHa^OaSV3p?&lJm+OhK_0Tivy8Btg$|`mLN9;2C(A=trcJDL#uBVHeS_a<}+i{$Qx->t^ZrQckff{KgJLBU|(2uz4$`vQ!yiF?i|=7 z=SRei`P>d|ll!-ZpV)3>z2y3))+($KdZ?pK=F#}rb!IrVYt;2G_B*t_8~f%pAF6)g zY!{Mf8w#jQAJ@iy?;<#M1x#0$^(eR)6 zV%8S5POIUHZ5WN5gpbqCw7D;my+;@$3c8H`gwZ zzA2q;np6DCy{SiZ7~2m~CePrn{fdFtye8*$++(yePdDloTQ}~d*HM<@vGFcbu(<$_6#9N0s)5-AV5%h4%Q5rflQesV={q6f(&M~@if+fqM`>qS3nS4f~KWt?g(7zFRq^m2^@Dgm~+U3mObm&K=w(UlHustsxLE0R#8@7E# zKOzesOfhp~?G=#ed6bpe`1x_+*^f%!!!}Rk6?tA@ z+tQbX4`xEwgJy49y3cNx{DN=Gv|oDnP9ngAN59Oe3byAn8NA&Gw&XzyA*JEY8V|43>eNC+|9<<+7K+igm_Of|P zkulfo9jBZ7UfeG5>LVbml5oHmHKG)%He<%c+?f;r{WZC0Bk9BJG6f>a1bk`a;paQ)BN=_s|jzVSeM5t`6>Nayls-VbfjTy+;2Yloo>o3zCQxry`Z17DzeT^x4wdM_t|r% zY1?xy=*O9+)@PHOK8O8D`GYwg>&k~CY@6>c?%8S~lo-#EcEZQrIo&FH?*qJdIgIduRTKk^0iquI6%p|( zaQ-ho1cmV8%NsS@?wy8;L#(d%bcW zdF>tb&yhi#^I^?sw)LS2{EEX?Szo$295{wac{vf;CP_jX1)UwKYlvKVY-!tyyMw6+tK#n$3L6QJRWPs zN7cI5vF9l2DZ-vd_9$;Y`OnQ5&jQHJ*a5vaPK@u01H;qeJ{Wv5%8>JrenTYs{oqi4 zXoakQ#_v7g1~2ycKleoP{*`I=eRd@JubsC4hrGFzEBnK~8Qn@%cpujjS$nbWK=)>v^=0{oy6zq{_=dIbnLF?)jb4Ah0)4m&Z8nJ9c8+ca&qq{tLGUeW zrObcP{bk1gN8cfX43D+!1Na>+SO>*NH9p{q`#{5+u+h!Z#=h^T8-He*%zyYFjciN! zh<+dM_nu`v4>SMH>8Ka^x$d(pc$pRnV4n(K7kTPLX1E`cGjg%9%S8V#>}MW03m)-q zX?KhJjoqy%e*?!LvarQx^lIum$^&#{nJu5NjN{`n#%YG{um6qt5`Kow^VdJL^YVKW zw3P~*13th0mg>X>{Kg?X9YEeE60&$^4`h)J+I@zvjx&hwl=u^)o7q0v=mxDa-maWm ze?LXrU2FRzkcUh419MFM5w%0KHO7xA_KTkD-iP%YoAY$YIj=m{(!a?b#hx>0GsZVI zGH?DRqs(%iM=dqyznH^3dy3cD`gDf+CC>Dv>mfmf* zi#I(pq#fD@w0ogDDX|OKl;5j(_sX_ew`ucSNanJ4bO+BsU^5QTW?*it!=A4b z{6!+=&!pm;CakX>)Bk9DKjIINPpn1mNVL6={lz$UKnKB}r-8cLbm-|!_ARnuPp`*H zyMi>4-;;a#PzE&5Dks0d3;7L@`X2evowto|vebTG(T(3pC^A0M*Xv+AEIW4)$ezq`U*XfBofQ_GP`w8vBHs4sm`lKlYRz=tHZqFW)_i zKD;%Q--B7(GDKV0zm955*E;Sud#`S47TY2=?xsmn$Kxp1M*pJy2*v>Vxa2RC_xuIu$CJ%P zP4_nEa1X?@{>WqPn3qf5k@%zSJ?^%_LGew_;eJ)tyCpBfhT@KG@Tk}z8NbWcUffP} z^g~bfy4%0|vHOktlTo*fzrBaLaS*ac9XlSx`V5|Kd>sA!qPgqySd-+vGUda*MdG@# zmO`-T4Yaqms!sizZKcr-f8q_@nPmQZ@w1W_MiLDj>v=U+O1GppT$$`J&5czb&b|>$n;o6e}*ouQ$BRhchgm7ZrmjE7q%6;OPwtGsm_U0)JNeL zW#i|v(e@6=|Fqf-%#$K1PoA2#wYPC^!FRurh0WRMQy+d`1io^S_HofU&RFyMKRQ(cI~HV-8>5+?5th7oCXTPuMz9G+y|n zJP*S+IU)0))nhIC^NvI5?j474#<5R)^$zwIIuU}4FOn~Kd|VdU`(LsDOk?}tFNpCti8Ar|kG_;(ZB6!A3*-JTWWPtwkry@> zA-w}O1>>^t_)ys|l=m-KhaG3v?K#T^2c_SMHlN15z%!XB|8QIv4?}+zHhaKN%E?`S@o_i4FQLC;*2f}QA91ecj(h>@qv(24cH0-Q zuPd{XLZb@shBnEidH0#Och;$S-Lhx28uKQKe!8O-2O;D4RVLl&xB2EXTG0)%%U+f`+&KFG zm}TgT{$SgjrbCa1%{OU}*GI~qDDqeZ37=lxQ50MSIa)gke^p;vKK4eog)y~Cw@>DG zsIbpgrkzf@IV&sr1J(lC<+ORwN2R@B=A^ktjZB9=&|ez<{j~G!3g=akC?3+_oPc+f zs!J|;n}_~*tOYx%E40b;4r9Ed`}*DO_kgDba{kkFsC6&bB+3tImbK_+eR{4m&Lv!-$rA#Zv2MSZsOMWT;F$MUbj7(^)lS0HbDZ-wq!+-Eob z%XRhK$IzbVA3*=hTT4-QNu-^;&pQ!&%6uDo;l1SEOdY4TGStUl?$qYV`445n_m$8q zeEZpoJJh|dNc{cLybr-wndpV%UXA)HYYV53iS{8jyeFPgcwU;*dKXz_>n-rn|y-R(P%8hbhS!^k5K$#*-PBj^WoY3|#? zH{`nGU*xQxa_k0O^q;bnywQhSk>3NE<|Az%%QS|KJwpD|cRun|J?M9<44~h08_YTl zKk_k*)z(M%HofqW4|H#2@56hzz9GIg^6*2jzjK$z=aalupF2PD;6ou}$LG$`bxYnh zvVPn?l-7BlM2WKY;=--L(ejy`Gc@C3lM&SZ_#=Hzld-f!VZMTX=iSD znC0gGj&1BZ1zg8}*9pY8bG?L&-;y>VGi}p9Z?t@4*BW_XR}XD~8+9{Heurfz*X0`u zX*W=I*N%PZ{7#VHk*Dh0p5jPs_nt`g1Lu(M%E<2BE#`Z?8zx0|?aq*~L|ewU&HZcS zd%M-P=YAB~vnMFu(2IS+zUI5T4kqy2xA@)Xj`wj7)7pb?aRz;&%V?+R2fH)mJGtnd z3XhfB9@lH}|8gI|__VP-j?c>+569d4R}T*!Yusma%P~H&8zD3FuaIMB=Hq|g5P2|` zOCQ9@DHrw+IL`s$J2YO&d+OY4cRZY4fH&+Z9K(49^v$d&=O_7NxyZgj5?C=9qeh!j&)GJ&<)s)uU66rFT86I=Z@A9=7YVR z20bV2WZQrp)P1DyXWxw+zG~z`e#M9S>J0h@!UOIk9Qh`RyyE$;{~Pj9Rx-a>7tgci zLD#^KH4kTfXvg?gsMn+o4w^LbaQ&fWgXgC3x0jU1v>k2qG3lG&oDlbf_MCi$W9%4n zzN4nEW545!L}MppUyHka+plVB-QC%AC^mq0hMoUhzZi9!`TINgOoOl~VlQJZ%F=wR z+fd>DJ%3w=zny#iG_gw;viCb^=Nj*! z#jl=oSZ&if(Jk0-@QV5PSMz&4KQTV0=m>aow>QXdt|jdG9C_ag`y;%&%j*x?X{ciw z?U`NHrVn2aU&YzQ(C>YA2Wd}Kei8aPk?4I{jW6MQF!YBuigSv7DE-p!724nb%z=M# z-znPOrbG9irXIN4>*0gsyw5(ftlX1{O~}FTKgIK&(!B7&bAE7vy!#w^Pio#M^2+<4 zVfEf_=hb|BkndKT2EI;k-h;3GpfA2aTXP(F2RILqw+ngY{pYZ@#&C?8pZQSt(WVD> zg_^c}_e|bh^+)J0d92wVaDKwx!xz8*81T2_=W()D&psU22a(HczWW`Ye z+U$pQoyuirzI|x@);g|BJj;wcc7GqzSCJo%5ylkn>+4T~Ci_>| z1gxF+_etHzZ`ZB$UOBYh+2e=ut><_shrXh2@-pi~Tb3%vk3oA|_w{8=ql}ELnI-S%KW zxb&aD5%wwhTj$^pdX_zN7=M`#{?abO-};O2hx)F2KOw(wp8ziX=kJnzI{v)$=~4*t?ne)%x|iX8mqT$sOm8ZW{h>bv%D4*o3Q z(tq%m{^{g*_b~^587TkkQ2y@TpWyG>*oFDKd*CAcvA$aq{M}s!T>20Gcs}_l=I`BZ z2Y)V(lWU-Rs~Fwl}MCD1T9(gTIms z^A~Ns2!E{aDhGe$SNaeBGB3m**FR}P-;IbrDr?w1HlJ-C>&tK2b(;0^o;{$wFpP%v z?8{FKqhUSz@_oZ-Eub|Fqcwx(A4ZFSChI?KrM4RaZT_%)LC~&+ACg3R;{5U6^hh-7 zrr!s7=d*su`MmQ-EC=y_lmpMGd3UiO8zBgr|H$3>A``6BI&P60`{2jC{O#1HNAGr< zbLwm4n^y4`!7IKMlQZ*%Z>OSPkj*tWkQRyFla2Vbj5i&+Ti(c<`;&XJK<9a%+$YJJ z43!8CXc8^QWq~S{^WP8nc z)_3Pq{|X=EuG6SX_Wv9+d|#9$K7I5a%?k}&UfOslF%Q> zo;30Q@U5Fo!x&_W|7ZHT6Ee<}`+wxgj&w(}BGIN?&~~a{Eblubt)L^FZONN6*f-lZ zLEci@1M)aQ{?{zEmJR2)qP%>FYZ!&+AWE#jhW>N?!lK0{>s){k4^E zEwos^chom~i6cMGzAfBkH>Dna@|y*NgQxNae|sWt@Wk2l!Jaeec;j4vch5!tHCU1L zU%#!$`qc+k{;#03WfsQkFwS_N;Mvia#-L7&-;Q37b+za}Wfj}T^Vy~p&_2{YyS2~B zpuNpA1@?LG=TQ&(51QEj$d9F*1^ij0XGI>n>m1@w==e5kT{%26F|xhuEYf!}UsG!| zjeAy>Gw&lJ>zcOR^)b?=|F&<<^RM2kzZo;<^H+2K-x=T6aIZk!z}WtL=irH-KQVY} z=PZ?m9n^6qF~#--`dU1#V^3*XVZV56t=_aEgAtIYEr^ci)t-HX>hy-Re9zH_l< zaUM0j=C$vKI{6*wvcW$T+WM}zyup)kK>ZktXkx9K&hLLqcpoqQLcK%IP8{t-7MAUY zKJYiyJNdR@+2E<;94BpyzvXB(y;jz2+B|iLXGcT%IK}-6eR}C9_{d1`;Tm9?eTHMx z<9nIug9H3_0BeKvnftfMqjxrA&9Ja$P*=$pWe(kN?P@x-qnoluzsA6BCHBvrjrYI!7RU;V&3SkSZKXZW_#2L# zcQVhASMEP?me<;}>H$9}R|HxFb2J}uH{zrf^vE2uIKMDg zzsU7p?!m!tC-C+JuV1A7w=nNYF#mABxZ?oQ?{=g&3`_4oy7b@J&mH@L+wbXGDNBqc zelKJPWb(!N3U6@8BL@0njyrhW!}P;<{nIq`sTF*$2Q7xa_<-*{jC+3c!^irNwhr{N zkDe{dI&GDGtScgU}t>jPaE>Qkm%1Bp3!_Bq6P+j#lKo*O7O-^r6e`R9FHkx&Zyox>1 zcgv_d9Iu=21h77_e%cYc4duJdUGDEf8$Pswv&R1n@Qi!e;D>*pjBGm!p7T+sy#HA? z_{Z___W4#0=eu_M{QcY=n{ZyLZxir+8h(e;+~2VOoX^H5*w)GKubh51@*d_GVICFG zrpP$niM#GL{I0|oc$c^hdY-}Ge-Yba-<^Tpk+_G;Xk@yK-LN|wo)5F_#{W65e*2Bf zY=5&2zq7%&k~lxNN+~1qDRUy)kR2&+ge}OR|A%wTZ5gyR#{b*q0)2|TmY6jpLwGiG zY+E|cclg`9*7h$ggWtA|=dWeLSA2{<-;ehI+0-kTSM%)@&a`b?M;jP<XHU%{=U>FzA@|D zmJHgPkq5V>C3yVY%j^U5C4A%U@O8FX=ljN=`-u722j~gr;~nr5KGy(QC;Z^y_XIfa z;v9>gckSD9z@7_b7zYOUX>Qar2fy(Hzhn#a?sGE;ffpctWt_jA_Ir$Nry|iU9SQ&V zb8F+{t#`ZeHBQ@?aiyQIZ)<$L#rJCTf6xz}Ghd0{|K7Ua=+>3()N7{68YXtD{wRG{ zcl(Aib0=|SBtGZQvnLzU>^?TNHiViE)kT*L{>OHX>$1TQ{zhIu*`8dPnXqB&qLJuU z{2noF*p=q{pTfZtvTj4JqVt$%{Jw79A@2cxTWPl~eo?f(k$33ZKewpfW2Mvow~XF| z2Y^fenT|cRn|+5Yn6F)b$4TBgL)Os4^j+jz$|IlL6^dN8WW%pIk+A3K6|_OGelXbg z-eL2*VVqkwp9vfE-~IEpdDGFiWAsrQ&%#c8c9Hq}JNUZ>coTyDre7svfH>`su@hnU z>#wcuMw*%bC=1@@jt6xe#rI-jOQAdPvA6aEKi%ZSAAq3Hk@H4;@%X z_k-TabjU3PT3e)5-j`J%egJD~5WYnSX7oodhUDqL2G4v2={}@&BL8~$ z6!h`e0Y3;>*2AtWpV(F585$`>QO^uGrA zec@-`1nnfspR)Uiv=-1#pkMr*@fh%C;HLri^e_#3l75^^ux#E5XRez45On7@t>><--MA~^Z?stMC%xbm zzo}&6@F9|Nz*EXA(7T~~hbxXz_h4h74|OPWMQ`tytSpCpIAzZz&LQUIyqS0Cn{Bii z=%f6-Bb3cC-vL~4?|bLucU}^60rQ7#BTqJL#HqwwxMDrp%K4j);Aq~-gXUox+T|Vly0xfl?bW}3RcWIdt;<<1eXVuP z*VbPBf8VI|(WK+|wBQR$IoDe2Yx1|mnBHhDgWVoH$-eO09R7W)=84#&Md&{b7O`C8 zru35dIKvm3*8>{Per(xd%;s=j(~iN8^Y?vu|5e7l9{=Vo*Hi3~>4&}+dqi+gcWQf?*q%TV1cp8^9u1h@&EJ3kk4+}2k}l3WeZSN z=0Ek?(5hgYrY?8-JScNFd1e2X4Sw(5##j5Fqh7fmUb1f9HvG{7EA2k~=JaI#&L-r1 zl6URYOWIueFK8z}QeJbg=}}1~f5_jw2mS%ymB21o_Wt*k;l2sqfB*KY@^_*f zzwaHw`+1A&Z_|^jeSLW^5WT%1Qhs|I^2~>PST4pqlr7|mJ*{?`6l#KD6Z{k(Gh|l4E1?{^d4_9WnU;4%#(5`BFB-l+EEE_yF#Xgg!4k67x z2T6gh;CI1;ZAR{s|6uktgWc$Zyscy(urA=Y0L+t<6o-pc{XdyyC-Ew|K0}J|K?zT&V8`=pNtnw?e)>!Y9tOz$fs_`1>JgIJ>iO zz9)05>AjViky}@$#lID74Yu)HL7qWH{)7Fx>~4$&zp*&D;CCD_+{^R3C;SdM^$WI6 z){n?mD>?FNbu;987G+i$IlyK;1{%`1f8{(z+70NBe5)XJ;a;JvJ%V0`b-o1dzm>jM1!kMTDG zZt12^l=s>#7_Uj=`FA{q{N_N?>Kj?E9-X1iE_JiFn)?%rt?&EJ8(E?k%G{{1bd=Wbq?KR4x;b91joVX6y2;ZnFTT@w!2j}d>H{bQea&LVST z;Vn6HH{ViVZ1U!A%7Fc1pKLjyz7WTXvf^IQu7mU1z3`S2_Zv5#Kpkc7-`{+OvV)9R zN5R}{Z%IQvMRUJ?i_6`9Gxi}9#s6(ORMEvX5$iU-w+@tnKG$Bi%-(b2wb1FG>Y6X> zf;}(g9w)l_U{h-_NPFFMXmgjxn()`5k$FvOd&VwpaWqzM`9uyd8 zdbA?N+?S4TaQZZ;KOj1?0PQ{)u=4(6EzX42I?jZ~FHM{YRp8#WLVgRb>E!_C(D<3o zx~RvX$@z~t6ABDOqMJ%U8zZufR-E%#DdJy1ujKoC@ynwXu(v56P+vtiXeY2PxZBs} zg8nAUaxINCu)Ye+jg%M2YvN2OrJa3XzQmc(=2qlAbN-o7%5mm1_oe=B)D<93d!D#2 ztvC((DvVd+oM`xc>ES`XtJ1xRKU?QBbT>uLe^6G=W4P``7T&a1#vNtA6TStoe~)FH zIsY6|m+wTPu5oX%Uyi!)8;>{fE>GUqL$(JUb+skVU~a-%xiM(YV8+RB&rx4wPZfmS z2jAu#c}=>ug>&Rhn4je>%Le=9Z><5!o-IBeoNs8C;B6X8xd5-oR( z%h;W4%j`)vV%-^gyDeAtD-zw{_aLyH45?-)6&l;G+McW7}~j5Br6_W_YYIA4wmHb4<}*+%9muv_G_qY#;5o?6%9S z_*rBY>S?Eax90$T8vL$E7QRC~O@5Te4DyG($JwT|=Qsm*u2+fm=|aD=I8N^Sqz(Cv zow4_-9o%btsc{YXE=zvH#$%0p*3icKHIM$b&bYP6trq4IU3&q`iqhOkmi$b zEAhP!&UH6*d#vQ2VqQ(hcS5||#hnm-U#|!A;soMRe-88jvC4&ZZe{)P-%n&)(G9(zFP3(r-U`I$GA`dR zMZLM;F$Nm`{uzF6r*%U=c)>m)`3m*}{sMou=9AjY!FOSQ*f|})6@>D%pLRV>hx|EB z0o-j%eWQQMHqAPWcA^`Opq#vami-lf%MX7C!t9AgKa4)hZ|-5u)8ADX^HUuMoX?H+ zunqo}&E8Sg44j3YqAu8a2Q`v^)PMO6;+=yh`CcK0Gtum#zE`Th~}`qsN@D z%)blg6fG-`?SyTbjR4t2e*(Lx`rgTJ%o}gJygv3A-Y~q1^UdE{;n;s$^}D`cHSW66 zitPHP6@~q-5PP{{ehT#A2aQ4aO}9Z$7Opt93-x0^P_YyFb|U{yl#8Hz1ocEvUj+5i zC%0wsW3;{fUhcn=T@=Xi!-JvY9}L$2CTTG8o9TnizbPDy{l+`E_cuES+kW%JV8?F` z4|e|MgTaIE;ctw+H+``8y~4r%_q>D0-h(XOdt&g^dwRCa{;>aVqP{m#-_KCr&rsjb zP~Xo`-_KCr&rsjbP~Xo`-_KFs&r#pcQQyx|pZ(r|eDd6oW5BaB)=56?e;mK_<-5G` ze~*0U!H=_6CFHxj@qbmmw!P)qfc-v(vVvW^4R`t>=vKRJE=nGw>Dj*xzE zg!I-C(jz0J`$kCjjF6r^LVDUKr{{k>Li({0(z{1UZyO;!IzoEI2Qa9vUIN zbcA&G2AfSQ9~dD$HbQ!Mg!FYIr00*2?iwLI`IFP#r$$Kc8zH@O zg!DZlq}SW&x83Gz2>Na-_XdNvRaX1zg8thARe^B88w}jxuc^IlV|5L41UA6=D46rL zf}FhE0(Zfj>*f}D`j~@A%B%`O}HjdwJ8sHpmy=?b>3iUHIUl6 z4YiVROCVga+FP~BpJycqi@YIkc_7@7X9fLLo5B^Sx4JS^UFEL|*M7Y^Q04b6Y)I5w z9c8x#et?`D37Dsxh0og2XUAVf&AM|@`{rJn= zp`f?izo-KF%fpa_UGG-#n`qjqtP6WL1pSLxMGd>La$~&AlA7wuHU2QW?&#YZ_B;@- z3;XjR+<4~NL~h8X@|KD~*uMr+@LQHY7z~7JF&>2*!O4nSs%w0;td#N!c}kZT$Ln8O zySOq$u~{qDEH|7PUai?{Ytf0>-YQ>1Y&eaJ4Okt0k_|Ev%{WHe9XgMFGgNy2@Jv3MUcEa*V1rLHB`E)j3>wzUuNi3coOn z)D6%C8BWXR4SShqVFM{f^Eu9IOP9EH7#(`Fq`IckE6P>l4|@YuXsfygsx2(7twpO# z>Z*jHyz=U*Fb0lwd3`=JQGir|W)RET>~C0H1*R}Ns%wzX7w-$ou#;pgF)b5w*)Ybc z6LXrXytK;aug|k8ytO4Y{*3`dF{jMjs)H&nt=d@4GQnz?9;mi&i8m0etMRYK?5k#9 zXgM0H$}4KBtE%g2SNm_T^Vf#+(ABz{D)eo&zZUkO)}QCEsj04k?eK?h_6F-@PI*d8 zOFVwB&tJ17;1BwQw;EFcd$D$PabCH%yux2n9SoE=OhSBo_( z1Xm(Pv0>gC7)h3a1v4x`7~Wtp%ubzmliy~+GG(D3+D4UsD`dAc?8jub`6~^CgZ@02 zgCc)zIm`&V$;$2YBIsgX6;+I*lNYB`cnurl*S)f^=x(!khR;(cBgfF2kR&7I7xWXR}P`8n{#9LGA=QQ^F z@Y{nGeizKO3(E?0!G)zb=yO$7hYi7naxN5c`5+Yjgp$SOX{M-*)KyfywJKQc6|2DN zSpOnXA2YENJ=F#mv4N^Dhg};3RX(X+hug&wo@Le48XHS3V|$`RfHl62d8><-B`)jLYbSNh48iaWWF!@kPEC({tVP~-# zZ9=%cu3FY5Z)FJe14G`RLT{*=YHNKN;hGr*tj1n{eO#nQ6!(}B$eW;UbY$=R!4LZj-)Zf+vb{DiYYuARLGXBCK`WC0H346nJwU|KR zn(81@n83V+p-{Qk7(U4h`(7ESLUGJubTz!9Ivm&-DEHF#iFr4MQ|5S0UDfhxpEn3A zdJ8nFdMl{(GE2PS3fkVnI;b$@Zc68ctC`@)V^d&rd|*lH4Ebwd_$!xShO9(f+RZb{ zkcW8{CT}#u8k;gtG)a055jii61fi|Yfm;o8EmvS9_$amE+f zeluiJyEzb|xyRB9)@z}+_JW@%$8~q{7Gt^TA4q(;7seBd?s9MK<~;b+fgo)HOfN*_ z2kTgyX&Pa(7uJQt)m4kD=o8DrYpnOe28;!2Mjd2oaXrj9ZM*IBFKj4+m4yH{6<>hw z4Rw?u3p)G-$GSz`;0)yatAqOmUd=#3TCmyyYK+KbD+X?HRXLdU6|E^;6W9cSW7<-v zPMr0fS8jRH4IXbThuA`NO&zR=`V=%>FzVC>vxag!;#S@s6L`~HBmBjf$fyLeGHP3D z9J5MqeMwFArW${3?af?h$OG~Wp|S1IuuRAUNyJr$3+>jGXlQE<%o7Tfd#lR*uqtMa zEeh0Njj66_&;fTWl&IV1-{`FihL?M*u)x9zyx`cy6$)!;uzCX;Y* za`Z!7Ji88ie1{A_^E%Z5IQp}Em?+q7_+lY&?)Pz)L(;{%EyNfYf6?|^9CKdEaV%~& zjzrv7v7JdDbZ(O|2liNUYSYEBSPqedP8)|Q?5%-EkcTZH$2w43WJH!{ZSZdjRB^&KtB46H9iO=uIWO{Dm?X;P23%(azG{7N#L5 zK=#4Zf-<5XiEbL-mK#sqJJeQGZ?z3vp!ViKZ2&VD^=uWRM;$kNYv?$%3jM6E4%$4! zd~EQ;JYvTJYMzzAi_x<@OYPknh?z>4$LXhL%*&lDbizv~m=3t@eXj{XU&XpWA2Bu@ zdq}Oy=dJN^qN%`To$^)Jfmy>%E&O?&USPe$0z#e`v1^40W!!3QR_LHoKjG1b;4Z3f zPz8C5wa|T%b~;{4{KUi}q4Q-C^pVrWvUylk;V<7z7UIo+LYl*_dqW{?NMsEt3iy^l zrE4pSz1YOj_CikRV)V8`CLXxCIGZdz^WV z9Ff;Z5qhQ0Wu7nKTkS9RW3`BHCsCav-CrK?`5pF^+^wnGv zdsl8WmP*DWzBbk5!RX7mlFv>~q{WARSQ+g$s9M+zhl5{dN$&>Cnd++Z^03d89(y7q ziTVQAV?hm|9}oj(3U_U0-LMBQPseI$mAxQQPA~`?xax{t#z$TCPUc}kE@t&k;8Xy| z_;ZdA@!?p%NvA_@S@7m;y)=Ci4dmX(Y=Ty-N%%wX5^XPlYKA-mTJ3Z34S^3m^ zIJ+M;*vZA?(jNG@xMguRYRL?CVSR8J>DRidt6ZWKb)f~Q>lWF_HB{HRf`QF`*Ng&J zxY{KOaIr$Jr5m~N%XYC)xwp#2r8)o;pu05KG*_j!3J1f%2G>R`WkPq@LKk-5b=>EC z!(VHyz=ox;N||#7YF*wSTmWAKYIWJZ5uQ_^|0}AO`29YP#ENRyMnqkRvqUXC3HbdW zpbR&nTnJ`CK(%2P`b`R#2bY@nT2^Nn4ROhoAz_jFRkm8dwkT6(PX-?4WXe@tUS3xN z)5ykfdQ}tfZ%O0@(JaMq8|Jy-)f*w1qX3kFY{^c53rv+iyuei=CurEyHn_Z-;10NO zB;v1uaQ^=GW?i(h_|7SD3Q@LTb@gVWZQsD@4pjNJIkRq<72b45wrgvJA2I{Vaiyf} zW{fKWMo{F-$Wj-gEa^~S@SwE#4<%$|s>0AamNmy@@hZIbTEgyFE0@7fsSiW1WbLU8 z-9iT&{j|>=jDzihu?kh!;0V~|vwdxj{OmCH+cRe61UGJWRc~~e80%dv$_w7q2vfI~ z8hh-51$V86k3?SU3`2Oo5d%ghDK#+Gi<=mm(`vnu~WBvRkyo*k|tZ zDNE?x1?1_g6YbQo5KrtAYSnSNfE+c&A;r=P+Ny*ZcHv+gX3^#3YdZ8Fxo{Nks;q-C z+TeG=eYcH(qwtqe6#bxL&c=MOO*1+*w$DNt${dr$xw zLfu;Kni;(I+L?1u^t$U@*Iqjh(wN}FKS{0)`u!o-tn2521jo$}5ZLJYr+@l1mAYnD z`CZq$ZoPFLhpNg{YPX9~t#VzRxy{kb?N=kq#sL0TQ|X#nvysV;jw5-y>zW&9`}|vG zSJefBu4}%Gd)=XTzkymBK)TxWtsLh^V&5I-J@K6=_i>zE^gI(cT6A)$OlxF}R{KLZ z0f8dP)T7R*iKfG}a%)ws9OICV%j(2o9QH)zxcIurk=&>DpN9B}*A1`6wi>zj12Li z8Bz>twzbMNbG2)RFK>p=*#P*{swf}3D#q;!7@vv5dZTX@RsnFHvx*0e6VhS(^_5l2 zVJ}K?;*4z;&4g}Mw|WC%9yte#pr#x@3>og?e6^+3@vVO1+)^q}+#e+l?(_7XYRI*t zDTg|JxYI1JSmEDl+K*Qpt}ZoOc?UztZryf~0}=a-hk4|{9x(3Tn5_l;ZtgAgcCrLV z8OQ^lTsqEjpY{$VUN4koM!{^DyR7Bja@Wc=u65VC>eZkH_s~9)(ejS@hbHu>2X~FNc+}9qB``i=&1nWQ(Fslr zj@%qx_)Lm|#~~oE#4z}uUN&o?F_3SBeB9`>Epx~W^BD)!ei)Og@Z#EXZ^&OO7wK|l zj3o3IV`0wrI951&MRlA4=A6xOlZrIBZhT6D?G>uwnIiKKJ9Z|`94DK)X-w_BjBD?t z?2w+a(Je+ccGocvhcx(ij18QKatMU;0lJG@1-=Ez^VNFeXXMgHrC0jQ`L~_V*)ET_ znYSVw4&}|B9j{AyweT!DPJ@4c-uUSqle{U~a=lz8$$KNdFTsvK__<7l5lU=r}i ztlGXa;@PU)`eTp_uD->;;pTvUE8^JESvc>3#;OL_l{q88PJ=NKp_8F98E6O3aMr$Ru6^}!Ox8iXF zANRz2!s7Arv`n?|l{jg&-eSJqVVoDFd{3gr0iKG{9n$SHZq~(fW788k*Te&)Ef5Ot zUU1e^$oq7zVxnVf!VMUBl;I|wE4Aqu)@YFg_^QJy!Q#k+zL+NzJlxlVbi3a?n{$xS zR&|IpGmE4w`i?u>MP5uaAKo+YlFdGcHEkQ(iogb0^|9{hJ({tdLbz{$wS&mzr9fWw#?pomdW_2{R%q54kw*Mn%xwK36yBfFLyu2N z$Y98sCi18XIOo2cV`7jKlN04|+JWwJbmbJ*w1EY{yVbkd&jWpQ8`<<6UPZ+_F0?UB zA8~$;yLl=;^7|6^^FrBbW`G>~#ScOu0DD~H>2lO*h7-vvyjuboQ3%4^Y2cjPJirk> zz?EM)ZVIZais4TCWmvQxb7<}N=}=QXiEgh61@Ok9W(bYbll{EFjQ%_9ml2;F3BrEi zEKsy5aU+Z~Vu;gzLA9VS;3z9X!QPWc0r7JHZrA0sAbudgJvvB+T2;N(6;E+x z@sLaQHZuyYo#h&KTE-&?d)FEWV;{7YM{3rV>vPRpIUioJU7wS{v5@7>`C2(hV)M-9 z>eZZg@f%jeu~sj>y)J+w8M7oaT}MsknL11ommaRH3E;9y=DXm=8X+B4sI+>CJY2)3 zaS`sWH<{}dXoS8c+8PK3FO*>Ji)3lE%5X&j z4BZ*mAvEW8Fg6$^YZ5Zl#`hkJ)LeouzOzG`4+r&}{Cc-oyK*C!-n>t(e?#{TunzH) z5}Qva4Z4$aeLZ;&=vxVM!h;P=Vx1vdc*7BbyR_PDbb)_bdBLAe)N~!j}-rosA#{600lC{7xd&!L7D=W}}M%XF!xkT>l$;W{~ku;)9j2!lba z0!(opfNQsh?}eQEAHE4&E$*n5OOZ8@Xkr$t8G6!om$t%x1Z~PUX%)$6xhJ9dJ z_%E=f)WGHba7DE*?sUP{R}Q6MA|{H%^I<_8HnOboW@~Ya1EI@83g<-LyC6?|qQp0E zcre2C!q&Y~oR+W_bKfZID)w2zztrWm-+*c}V9hF5&+|4t<}Gx*ya)wg>^H$Z_Lf$2 zw}7)u7P0KSrG=}9;y3-{P<-J~{2!N=3`s9qev`rD7iY#7Sg~elT%v3b9)Da)24_z{ z{ak{+*k_`=RC%-eEG}NqAsqND;$}RN0-sapcbuOf^lzO{$7upq zh?(`SnVVfR&#MhQ+ebS7sx9nGg)dNtO%(Tkay>8;=jOcooQc)IkHN+34(y?^=MVVg z&~s*0HDfjKAHCe;DvkrOS~*_^zJ6i=5(m$;&gZ;5>jANlTcJ)H*G>=s`_;KQ; zXSjafbX}{@Pmu$5E@(VyHMdBRKXwXO|Lbw?3Y)}5UTj3|^b0KJaBifNx{@O!?=X2w z4^MR?@8#86;iU+UGHe7Q#h3-cn9NQW8FF-#AC_2KZfE^_WM`(mawI~t*G#2Z-r5ij z<-&ZzihY@hW)>GMES__{yvxUzALeL|2VD65pu!0Jqc#LsQ$+ul{}u4#0mr{Z@O2`< z3tC-5CC+~fN)(<^c*4L!#SM1h{}29u=pTA;qmy0W^bxu3y#e8C2>*bIcixalM$vNq&&5ubnla~??N9>WyH}=Gy`ffq&uIF-MPc@arn*Ohx-S_{fZTFt-(b(O~GGfuP z#@Nn3AKZQa4|8MIv^K;$V>|m>W6=%GF)OPr)_7&__nQ9Cj@bUM?2SG3X6Sp(a|U8h z{c~IFsqdr!?~jfCS;p>1I}XIgTyO1u@cG`D^^Hhu)YXw#(j&RMzH+y3S4LK6ENMme zuCF|d`oGZ=v##lhO)P1QSxX9HNiX2{Gae7dtZU0+bK7IPo=Pd$)$vf*uBT>}?t1FF z?p^KKo?RW!7wvlH4QtnvH|Oqp($l@GnZS&9Gn(QT3r@PdbTGv>f4c6 z@~tOgN&nckJN8aAHg0NPY~1A~u~F|8v~BwUR(f2oWj((RVoh@3>w#MiylhxH#>tug zg#zH?68T^703YMPOMp*w;H-bV1FrynnFFr}p6$RpfKPDX&Nhjv;J=2j`4VY*m%F#i*%>F`hh$9a}2msUxw+! z^JPQRUmO7Ll5>2mdc|d>!(7DFe8J zpO-R+;atm{<#T~M`umc5X!`5Pz^_a2^Lh?&hkm?X0=&VI-Ur;l&+Glb9sIw36!>&U ze)iunUPsuTWB%gje};_zk#)cw<28JIkCY+(ibVZK>Va1|@KeB-CGelJ|5F_}+nedY zS^k~`{svHI{x_xp&vB%)yraKw6a#n2;|xPfX{N|4-dol19!;d-wpyVPUP=R0q&T8z3IRm{p+Rv-RQ{A z`RCxLm+d*~?`;OY){*}NaL0V_Jp+7iBK=Lu=fMQt7Xt3k=i&PB3yxn#BL8syf64w{ zo=E>C`#U*-_f-IQ%#UC84#kJJ_e+k4!yf(eDDclE>iZ@8R>q)`T@-I+d9P{Hv zA8>~~emfVqL%wep19#}xi!tDi_TJ`rq$l`!oAPn+`*sAlqyKNSyrchb?*aY^{dp}D z>5lRHHTA{O{;yMkJI4Rlu34D;12sbQvL6qLVgE7@16zjkmqpu zzZ)Hzek>WdqyNLl`<4Eo^}o^q+%bROrTiT0`|)hxj`@7N0Jvj3j&pn*_Um{UxMMtz zlRsyAD{#kn9X|lvSs(S)!OwBZ&msTgXMj8O>G-*!`G1oJJToEx0Uz+sIPgZ`pLO8W z4<}B39P@9W54gjA43Hm({tcW2?�J$G{!-et`Tr@b@`Bj`i;SRN#*Bem?`aqrLaD zfjj#9zIzy61l*w??{y9lE5ViT#~>g30#uE zB?(-Tz$FP>lE5ViT#~^5UnPKh@8@v#^lS)M$>}Nt?6sf6{`=Vq(7F&mf;jg3SwX~s zlb)4^cr)U~*rvO*9PZ8!0{^)Ozo^s*c+AB8C4fE1i#EzTH81YkUqO_4zgK`b&Nmp} zov-QO>sU8Jt7YwpXuGKM*%pMo2nP^)5PA`?w}18=@{sRLglq)V_goo5(6Tz~5l}~G zGXlzWqCe~t`^dg`_9L7`IBi)!NVBXil>ZUvKgdAHLO@+VC;~klp#W)pz}F!J5m0Ye z3TRQpTL5za_aL+(97I4pKV*6t0`MR0M?k(G<|5=Hfd0b}0?Pl8bd>uc@^z8ci*OX- zW5_iXAsxYOWPA|m2a*3^4+8QWJc)4DvR+2Mm%;bTIS8o#i)E%K~cs1bqLb5pnR^orQotbr+yb!U}{|gbsv0BPfUZUq#xX0fbYC zqm5Tl$E&R400PR2-mU`-A@m@$AfS$)An#kq`<4&!vw-yoXydI`gieHm2&nTHdl5Pi zK>G#S{6#;)Nz3|WKHwR^R0Qze-;01U{pps)^Yi|CgaZhf2yF;02o(t6sUPY8o`Qg~ z|2_=?<^LV|{yiJPjr0M)BFj1&0!03Q_aUIZqk93P2r-0K;EW$c=tp3gk1gw0$tZss zFbyFC0d@Wgb^gkOP=Yd9=r79tYCS>-p&0@7{;CV%D8fmEv&e_?zXty669}mHT?+yH zzKc5FMV;@W&UaDYG4$gYXvZ=U_FL9_$ludrS-(MgPX}Nrf)Ak{A%@U~!1MuxbI6Z& z-g6;%5Rk8@1#rD(y^r{Bg9v*uug_u*fzK|K??M}0T?oCnXDpWC5h@VE2#pBM2zwCrBOJh(PQ&=+1ES0?+!$N5|4s*ZI%8P_ z7DAepG_DwVa!fvua8{2n%}ScwZ6%FI{loqxjYB)k{~CCdf6SkS{O7Es3Asv3fTVHY zL-M1X{A2!9D=95#B~9#9S^^}E17pljUgaP2Cu{tCkd%^Y^0Tkqs_eqlgl2U@2-MXZ#2DnBm*0#n@{9^w^7myww-%p#rQEU8^`Qzi8$e%Pm`+Tl!e&XYs$bWujP?&$n_HkCkaTyaS}4&kWGWpRd#C!0JF@|^_;;bU`k!v;kR6Y&yOcP%Z{4m;j2|WE%oAD*c*FWVVe$wRm z#}kMjHT>Rk7V#cKzXkbd`&sABLB!G4OQ5aILc9WT@LLK#dQcbZU%dzMX&U#K^_XQ> zgU44-nf!}05$`i~E(X8$SQQn3jyA|!VJYIx z8c#($hx%lsQ_d<>QgbYi_hevWIPBQZ{aJ&AS#+3<5vQu2cr`cV?s z>aYgIdD@OReG;ZOb{U_7bvK3)M_+}GJP@O_x$P+E2Mm21^3acC{%yISw;B2!$V0!9 z^gH%|-lBBmq2Eb*!^fbbpRB)uc}^?66mg`JUXMKVk(j@}3-t9$M;`iiLZ1dY@-Y8a z085)S+kj=wLO;kHzgsLdvjsSQ08sa)7*+Ua!|*b)8W&cF?D=9hB(HU^?e)p zj~>-{2I4)4hw%Ic=|?-wSVs#GM;+9Yrh|w_HC}=^Xw{y?}LBJZXbAgAMG;U+Lw^?qi9q9C1c*7 zHR+G;>N1dxyFeSzIQX)l5AnXEo;WYrnEQJ$*UlkNj%oXCw8?J_-id&I6miu5P6g^JLOdS< zb;%s+Kpb_+JY$^YJ=!M9yc^Rv%DfxZcmd*J%&lJJXMNC&I4{Wtck;>f-y*NbEeq*r zo3eNwe(%(_1pWeQn%bGbUpoT4CxQ1t=ce{2@LxbLr=CdQzbpfOCV}^3&%w_c?DpQl zp5=11Yvb>>0(T|wWBI^y9C#n_f&@O04!k6RzrPoFSpxs-AD0ow zFGVg%;F1I`N#K$ME=k~$1TIP7k_0YE;F1I`N#Or=37kL+Nd?&Nq$y0r)|_~XLXXn1 zHx+t;!hEG;Un}%ng*i&cUP|cLqYBJax=V5FeMp~Nk54EFu?J2g#GX&+K?A4s;geF( zr}P?p>H&Nv4<0_m-U|7w4}lA8RoG(kjcLZGq9`{eicbIuQ9tV)qxEy|_*vlNN)3Hn ziNaz7Culz=WGk-yn4tZbp#7Mj{g{w$i5w?P)BI@)Q6c2ReZ0) zJxY%$-lDKs=~2Za3LBMPuXtEtNa;bvD-`;aUZ(hZ11Ep1@QlJ!3QsB=P^fa6+^@LG zXYvunRW4JIU-VA%PwmF1D+QKy3XuAC3UU$Hs?hY)I@PGS;oCa3Uh!gu`3kcYW++TG z@b~8wo>n-ZuuoyP!UGCh6}BjBR2WpaUSYAqe1+KxGZdy8_@Cz#o>n-ZuuoyP!UGCh z6}BjBR2WpaUSYAqe1+KxGZdy8_~AK)rxgw;>@)BT#xu15^Z207?=GF+`z1YTOq;@1 zo!?P|kBca5G;rbpqel}}uP18xi6~EdI1%M(FDC9)xJT)#*ArWmu6jLD+nK2COhh|U zPrc>~D^$In7*t&KdZJJBmnnU{!gWe7RlG!DvC=(?7bz@IdcNXrg}F-4Q9N5=meMm7 zcPY$Jdb;A%6s9RXRq+&s$x62jKH;3gvxYw5W5v%XJgxLoil0HUiL zDeP7H5yg8Hb}Rj$;#~?mm3~0+4u$)b-llk~!o5o0qj*eVi_)7Fk1C8Py;1Rcg<++K z6b~w_P`Xd?GKK4vzE1H{g(XTaR@|eoNa+QN=Np)&^`>dPXJ)|aOBq-i}^gGKMt z?DDya=P1lln5i&BVYW#*s8EaVWYyJ!u1M^73M3P}pbS8PH)Ttuv4_?WLvqXQ}>K zLCKe7RT#aoR8OojrLR}I>WiiNGPzm(w5Z9)Gj`g^Dd0!e%d-Zb3V!IP{jpJS>yO&r z81N&0*-5qAM@{}Q{R+Xq_+?!NAJ?hyfPoXyj@VUgXX3|7Kcn>1ilZH|-)KkjpHLip z3H_MTwf%|O{zSAd`Fl0r5rsWU?^gVvfoaia+#W4Z^e&}$Dm{DpkwN4*U z+|+NKZc)5ZVNl_Eg~bZ<6=n-e8e6aPC9Lzsr}Q#~D9`zxQe^Oy0)?iYq)Ctq^?%Y4 zL!YGbnbfWHgGyI9O@f>x{{f||ye2_jLT^)gt3t?4=zA1b`Auq3db84_3L{EyR2==I zTqmJ_Qcprf!S81ZEbF6UNw+>S?OPw2_NFX6=r?6D%C5jg-^eDYZaq!B1Uxt22{o2pV za+RK=^lZhm6hf|&-=(jfrRdrW_=nBpdXl7;?K{+9OFikS4t zs8`PQ_9~9@9QUcHPx#k5BQUMDhz&kvGF_q zlp(nFr#^+<3Qc+IPpyi#C~Q<1RJdMYvBG?X*#`3W4C!C<_Y4JQDs(B#P?)Z8n!+@N zsR~mRCJRg&drar+QJt?xq`joEJqo*ZzN&mu+6+CV)xgV682Mc`pg8K2d4~FAe)KEe zr?6M)+RkO#&Shvv@*mWET?#P{LO-B*heGfpbmiwVo1eW(-=q0r3R{%ktawymMCpx+ z*Bdwm^{^jPw4SL*mvPth%hwzIKLdz-)|q03`3kcYW++TG@W0L}Jgsm*VV}Zog$ES2 zDr`~Ms4%E-y~1LJ`3kcYW++TG@K5Iyo>n*@Flk(h(Svcxss|q%`q(oHkzf3VqXtjW zaZTwn_~aZT$I01>XDQ57x=V4xPtxRcrB73On!;42gCEL&GWZc_8Tw_0|D?;#8v146 zQ}jUjybOHGxOFJpZ{XAx9lvISUmn!)J0Q4qrd1*G$#^y@L_XFx&aLvvHS!sUehFRs z#kW65CH=Y?vz7*wqe2L+Ae6gXA_ZT?2!q6xC6faY_Ug_%;FIA}ZOxAiP z+w~M_{sPUHZ{U=J3cC!P+N$!{`~S3e{^3zwWgfp1Cj4j!gpvXUN~dkwhL%!j1I0*N zLWU655b`iXixr(r=H6tc%r9r|kWjIUYuv4tM^W==cV#Q9ai#mTE83`7(Z(8Av}kFK zii&Hx4I0}(qeexGcE9gA-Ggp6~zmMf{MtwKN zPLjukj~T;=U)&0!{1m&%{bWB0e-)4ODdK#JN6E*@BV;dmm^?%xU+TCX@*sJD93@A{ zVRDE(L!KrF$x|e*Po;l?9MC*lMS94k(JlQYTL zWCdACE+Utb9>~G(`^j$dA@TruknABJArFy<$zJjZ`8au$>?4nn z$H{(jfILB-Bu|lp&W%w2GUD5l1*d_=_hxRyU143B*Tiv?BC3hrG+t!^OrA}gR3%(Az1ke zh9f`an@pGNfm(bFx-CyX+%E3wQ+@y$<){1;`?C^UDN`qPEH(2s6y_vcd=labYsW!$haF5FWG$)tN zoau9>tMFa;+2INuF27YXXQkHFQRto270~a}`bH1*Q}ka1{d28lpZ1*JYc2b<=gy&q z&)jOQWuNxkyS0{m+H*~tU&YuTq=QAd3WI-s@e)2?_>>zhwPf13IL^cS_3{n-^SXuS*9Uh!M4Wq#zht~IAfKF0B1bt9z*`Gb{3tG$m?0G-aTJ~pOK1*xapMCje>PF~y zYTdjZ`r}$}9foH4Y{h-Noar=;Kwr>4vOjzN_0%h%H)t*Uv**7}YuTSYe;@Ts=+9~` z`?Ket)LQmu&p)rV?9Z;eg1QR&c50MW--Uu*g8qbvSHYx(V?D_+rB_HHj=9h1G=3$9@}%5A}$sBygunyHb`1z~Cf z`U6_a?+`3FuC?snUhqS$W&id9mZ9w5Ubv9q@L9M{YuUfOkoQ{lZ!b(SyaxJVt!4lA zLYAlO-(L7M!^P)Ct!4lA!q=(cv#5&N54}li*}uK0ow^VDz0~5vvhAvbeo}{biqH3{ zZRoRFr%@lSyiDu&*FdvvK6D8BJvv$dI-NPOW=A zNQ~i7_`#96YV5nd5&A)`Z`cX_0fx_nJ|rtF{c+u!r=!~ErXl>K`{$kTnYE5Cz0uLr zU(^24quAp6Rjp%v(9dffNB*b3q;+Zxlm^$>tjy(v!0|s z@;~bt>JjL$<5T*0p1$AFmmSppAASU7>(2{+pAJ8G80DGD3tu}|N=ChRYQ`MuO5}45 zHR{HU?bJ)5yQy(4Wm~Cd<9Z*Yu7>_7wUomX)K$=%sol^fHO^l8K_@?@8y!9S9!HlQ zE;n4)NKSE&PCDB4prdEq?C5D{9qsy5o_@;FWluZW^@5|Pz3%9;pF7(1s-sKhI@;)W zbV-e)-OKW{*U=?!b+r2(j-GYe(Z-98E_=<o1Njz0A=w_mmqYE_n|a+U&zh<6U6TpVRt%=tC}hwA^sJBWmQV!9cJi%K2mN>cgefSP;VvA#;4Ug+)AbXxa1vc2>+>s>-W8tj%h9Le4G6l zbu8X*2A_-KFYjGL_<#yzh~7>G$Fps2eClyyFi2 z$&->Fc|RSrt^;^C9kkScm%O_U`j6V@1Ba33Jgpy|iTtZ;l=tKzeX0LQ=e?~6uh;s6 z8{mIVoeS@@L*7t6I4|Bk2fa<}w-3PwbpYXbpB*&H78>uygGN6f;mx@3vt}rbcjQ5r zD~)&ML0_T6m$yP+rS%Q{$j@V1S06??w<(SH?7`=HrSTp;{0PH4vEY3X_7ZFuHd11^ zZilUb-3|LYm=6X&S3hh3b^`V+>;>45VLyS5Vd?yQiBYl~whFcyhBQj1D9Buyxan>FZ&4!8X8JVfW86%3epC?7;Qy zhy4TWUtot}pMiZ2_G_fq>@rFdu&)*h=-EXbans zmHj0~X$`Sn3qF&sGb@aQjcdE~DU5oa3wwLT7 zyER7`Kf?GC#*bv^M104w3_!ulPwXSwmKlm84tq z<#BSD93%(GKC+kWA-hSNG)X_{C2PnkvXXRb{(77oCI`s@vXAT~d&q9mCQZ^$ddV8H zimW8vnj_=nFgZvLXue{TCfThy%5+BE3}-s84D&nFd1Zj#`^a9hM{|_^qx2u8|0w-O z=|7tF@8)qfX_9`@OV*H8n&%jPj^XFB;gyVc(|=s^Jinjg_jAMa8zcwFKC+kWA-hSN zG)cea`AU-MobTgzrgOfB-FC>?Uo}B>kk9tRbt&O46-)ew-X82Q|lf$sV$sv`Lf9`Va7XpQdXC#xM-9 zE{yZC5Om!R!`SA+n!)9PVXSkNz_6rnT@AYqhT*|g3c~@eyKxZ4HW!{9yKaTu0>h6w zxmLke!&bsDez}&wHo!23xZVs~4_kv{FTyY`xoW}Jz-riCusYaHuqxO(*qtz$yI?ge zKMdS4#)UbL{BWP^3UCmHIhN~k@Oc=q?(m@BBym&vb^n4752PspE=C&<&}x5=-Nn0Kg;+%x&$o~e)A6Zy#fk`L~m`V5d? zBcCC^PCiXy-l{&|C;LgQrL9Z4A|8$59}J)bucs`*X`il zIQAYahhZsTJO?`k`vweCf7dNY zVRh8tfv%@YgI?HS8wX8rV8mE$q#(^{_i(cfso5|KG6R z!2SzqJOleC49gJXTd?y8zW~3P;P>$TyD%(GjPJnyg0R0LZWin^SQ%_KtQ>|XhpxG> z3fNUJd7_8qjByh7GwA<;orPgp<5~>69(DulM%Z%LTG$3w8y-_pJo{5J7(L`c*CTWD)V}Z1tX$!PP;$|e?5eQq+q?Iz1 zW3h-pAQqNnB5iODns5!o%r${vGHJz4t=n<(bXaT22b2{HCHERD6K(g00->O7btF=I z1My(Y3N-tCc1licb=j$4I_nb+rqfx6trKnB3ry{X?!x7s`CxanN zile@vJ`qpb!MLqG>LvZ{R=bt5;^Lt)7E5>d)J5cfL+PX}d-7Sg`+PZ%`zHM#yTcM&cI1U9KN33KL#lPK(TER3*y1v1m zvaHRPT_27_%{qHa+_bt1gXkPnBx-F9#)BQjQ*2Jyk@g63i#t_s#iuxLb0*eS{P>nsB4nl0a({}Q-5-e+KMqx- zm_LHOiOzU55j3ZWzC?xGk+!l$UbHRVn@H`}eZr(h=-W}3OooERDmtPvb|Qun3h6sj zhe}eU+WU6+?4X@VqvqSGL=;YwuK+g}O)eCU?3p4~-Fkfjsgy}nsAk_r%Ti=@+MbCw zB@)T4s_HiT{6dJoXl0vIQ_bZ{f^4M;L_J*R? zHdIVi5sUyX8kM*+U2y5?w^%qbuS9~;=w4kajHwS>q1|=pXM-s_lVsqgt|ZQy_WJ64 zk&ZYDDP=LH!Lm%;bAD?~q-|WYH-Z5xxVIStgq)0__gJa4>P`wnvfY4hht$G*g3*lC zkVrAfCfrk%C#i|qFtkn?8?#+9&fyD%Ei)6fOy#>p+QFV+l>WZm5sYspGms6$aAF2i z+0c457DUq0-{qR{y^&~iJ9BKd59n@0^|u9qo4TwJM!|a{cDN-K*@HUUVHFbsb8q_D08_)JB6N2Q~GB4j)_R1 zGl&A1)CZuwp`oYrP}P!1M2orj!*Z_4F}V&zW&(M&R#oCjr$P;}BT0n^D^c)+vY~w8y6}LKN zZWw6GpcSBVVAQ62S_0k(ss~1Wsi@9(-P7ohmbYwrE9#2e@Vo$BKja7%k2B~n<{<4RnXFGF(x|noSFKpR{7&_MlvuGfT5W@lP1b_9 z;R%;M>bB)~-h_bLm+P;$FTb;0`(d%yxpH+4{tcm8h9&i647V?6u3Wu#?ONlOw`EsY z)p~`s+=EUql5F&EZF+mLSSuQhB-0oi>)J5}He-rlrfZ9OA{o8R^2su*sEeE`-XV9+ zmuXAe5gQ{wZF?eB9}cF1A*7#HHPW(ihMSA$G~Tf#y(yNo_o_@_+2uhULv@bf{$hmA zSh?_cA{A4^I-H~v&PCt=S!mj4pprvWEVR$lbhPh z!8m=vp%deaCGL3C@;sK=WW_t|!dzr?DHn>#yM^_H+>CAQZ{Tf(A}0D3KH28-xv(-?nvQzj5#qsd0ml{Hf~&Y(&N;DARae{ zC)a{BP9+0)y<}ULj9zo;=Pd>Kn$o+#Px>v%s9qKGu}8I9uNGUlEXOQjkJS>i!;%A8 z#5k*)T00>T>I8pta)JExa5F-d`G1gVD3ikAV$0)=ZJqISE?c=ZhbPc(VR49=q&&iq zF;zNvea9H+QNzu|pu#>l>pJ1)W&<&rc`@#Gpq&(?T>RWOOQ)V)FykQMeIdNNz&SdNW4e!^8}Q;^<{sT4WB-HDy@=t*U)l9nS8 zQ}n2<-Zj3Ao|xqBojOQI6g?*Yp-GX9=0_JjK7UbHJjYz|s%76)IWHW-CuZMt2Kb_R zz}Qq!Y1CEAW6q-fdgd@W3Ny&;V8Lps(#g(NoTU;AO814T^Yu)wzxlD9R@*%htFso% zR*aA>3G`!oQAwMFdm^auGFGYCSZzu_4zF!b$v`RIGLSVzFn-3ZiPH>y+FZif`GkyS zNV!2Jpf52$BY8#X#~fg?gDQjKQ9-Bw-4aT~Cm-9Xo(5p4pNX3F@=T>jIR!g|yVb+; z=1AM*6l4NA`KjP!KN+C$7Z&x@UsbHhE~b9UcWI{y!*h|`rtxUbAC9Caw&eT*<(yFm z6-fb4kfih1OJv;3A}$j;qKRqi>2zLY7TZ3KM2RrIX=2Wh+ z0zX~8#ZLP-C5M%xdYGinIdxhaGq#k^WE(?lLZJipv8uGrxaVMOHW$d4psyvNQ(ODkh-*jJk5&>NR()Qd1<<+U#^q zrbyXmRLeaf^{fhiM2I`{(A?UlSV!ta=2kFylaw7!bl{ERx$N<7-OT!te=sBO+tM<1 zq<`ammx$basmQwRQy*EU|7fGGDj7+lTx7lFPsr>AYe^m`&yNfLP=skrZuRSQ+eJNX z8Q$K&r)ae)4#=yp&sZlto36S*DD<&jLNjp~O2YfC;O> zNxs=C==c|`7$zQ3tgZ3Hl0l5Dd9zfRgHAj=t@~wt#6)NH4 Date: Tue, 6 May 2008 00:06:19 -0700 Subject: [PATCH 35/66] XQuartz: Move server bits into bundle and setup stub in /usr/X11/bin/Xquartz in prep for startup rewrite (cherry picked from commit 453a982e6382cff06ea27abba225440b07068f50) --- configure.ac | 15 +-- hw/xquartz/Makefile.am | 8 +- hw/xquartz/bundle/Makefile.am | 13 +-- .../Dutch.lproj/InfoPlist.strings | Bin .../Dutch.lproj/Localizable.strings | Bin .../Dutch.lproj/main.nib/keyedobjects.nib | Bin .../English.lproj/InfoPlist.strings | Bin .../English.lproj/Localizable.strings | Bin .../English.lproj/main.nib/designable.nib | 0 .../English.lproj/main.nib/keyedobjects.nib | Bin .../French.lproj/InfoPlist.strings | Bin .../French.lproj/Localizable.strings | Bin .../French.lproj/main.nib/keyedobjects.nib | Bin .../German.lproj/InfoPlist.strings | Bin .../German.lproj/Localizable.strings | Bin .../German.lproj/main.nib/keyedobjects.nib | Bin .../Italian.lproj/InfoPlist.strings | Bin .../Italian.lproj/Localizable.strings | Bin .../Italian.lproj/main.nib/keyedobjects.nib | Bin .../Japanese.lproj/InfoPlist.strings | Bin .../Japanese.lproj/Localizable.strings | Bin .../Japanese.lproj/main.nib/keyedobjects.nib | Bin .../Spanish.lproj/InfoPlist.strings | Bin .../Spanish.lproj/Localizable.strings | Bin .../Spanish.lproj/main.nib/keyedobjects.nib | Bin hw/xquartz/bundle/{ => Resources}/X11.icns | Bin .../da.lproj/InfoPlist.strings | Bin .../da.lproj/Localizable.strings | Bin .../da.lproj/main.nib/keyedobjects.nib | Bin .../fi.lproj/InfoPlist.strings | Bin .../fi.lproj/Localizable.strings | Bin .../fi.lproj/main.nib/keyedobjects.nib | Bin .../ko.lproj/InfoPlist.strings | Bin .../ko.lproj/Localizable.strings | Bin .../ko.lproj/main.nib/keyedobjects.nib | Bin .../no.lproj/InfoPlist.strings | Bin .../no.lproj/Localizable.strings | Bin .../no.lproj/main.nib/keyedobjects.nib | Bin .../pl.lproj/InfoPlist.strings | Bin .../pl.lproj/Localizable.strings | Bin .../pl.lproj/main.nib/keyedobjects.nib | Bin .../pt.lproj/InfoPlist.strings | Bin .../pt.lproj/Localizable.strings | Bin .../pt.lproj/main.nib/keyedobjects.nib | Bin .../pt_PT.lproj/InfoPlist.strings | Bin .../pt_PT.lproj/Localizable.strings | Bin .../pt_PT.lproj/main.nib/keyedobjects.nib | Bin .../ru.lproj/InfoPlist.strings | Bin .../ru.lproj/Localizable.strings | Bin .../ru.lproj/main.nib/keyedobjects.nib | Bin .../sv.lproj/InfoPlist.strings | Bin .../sv.lproj/Localizable.strings | Bin .../sv.lproj/main.nib/keyedobjects.nib | Bin .../zh_CN.lproj/InfoPlist.strings | Bin .../zh_CN.lproj/Localizable.strings | Bin .../zh_CN.lproj/main.nib/keyedobjects.nib | Bin .../zh_TW.lproj/InfoPlist.strings | Bin .../zh_TW.lproj/Localizable.strings | Bin .../zh_TW.lproj/main.nib/keyedobjects.nib | Bin hw/xquartz/bundle/bundle-main.c | 13 ++- hw/xquartz/quartzStartup.c | 2 +- hw/xquartz/stub/Makefile.am | 11 ++ hw/xquartz/stub/stub.c | 96 ++++++++++++++++++ hw/xquartz/xpr/Makefile.am | 11 +- 64 files changed, 129 insertions(+), 40 deletions(-) rename hw/xquartz/bundle/{ => Resources}/Dutch.lproj/InfoPlist.strings (100%) rename hw/xquartz/bundle/{ => Resources}/Dutch.lproj/Localizable.strings (100%) rename hw/xquartz/bundle/{ => Resources}/Dutch.lproj/main.nib/keyedobjects.nib (100%) rename hw/xquartz/bundle/{ => Resources}/English.lproj/InfoPlist.strings (100%) rename hw/xquartz/bundle/{ => Resources}/English.lproj/Localizable.strings (100%) rename hw/xquartz/bundle/{ => Resources}/English.lproj/main.nib/designable.nib (100%) rename hw/xquartz/bundle/{ => Resources}/English.lproj/main.nib/keyedobjects.nib (100%) rename hw/xquartz/bundle/{ => Resources}/French.lproj/InfoPlist.strings (100%) rename hw/xquartz/bundle/{ => Resources}/French.lproj/Localizable.strings (100%) rename hw/xquartz/bundle/{ => Resources}/French.lproj/main.nib/keyedobjects.nib (100%) rename hw/xquartz/bundle/{ => Resources}/German.lproj/InfoPlist.strings (100%) rename hw/xquartz/bundle/{ => Resources}/German.lproj/Localizable.strings (100%) rename hw/xquartz/bundle/{ => Resources}/German.lproj/main.nib/keyedobjects.nib (100%) rename hw/xquartz/bundle/{ => Resources}/Italian.lproj/InfoPlist.strings (100%) rename hw/xquartz/bundle/{ => Resources}/Italian.lproj/Localizable.strings (100%) rename hw/xquartz/bundle/{ => Resources}/Italian.lproj/main.nib/keyedobjects.nib (100%) rename hw/xquartz/bundle/{ => Resources}/Japanese.lproj/InfoPlist.strings (100%) rename hw/xquartz/bundle/{ => Resources}/Japanese.lproj/Localizable.strings (100%) rename hw/xquartz/bundle/{ => Resources}/Japanese.lproj/main.nib/keyedobjects.nib (100%) rename hw/xquartz/bundle/{ => Resources}/Spanish.lproj/InfoPlist.strings (100%) rename hw/xquartz/bundle/{ => Resources}/Spanish.lproj/Localizable.strings (100%) rename hw/xquartz/bundle/{ => Resources}/Spanish.lproj/main.nib/keyedobjects.nib (100%) rename hw/xquartz/bundle/{ => Resources}/X11.icns (100%) rename hw/xquartz/bundle/{ => Resources}/da.lproj/InfoPlist.strings (100%) rename hw/xquartz/bundle/{ => Resources}/da.lproj/Localizable.strings (100%) rename hw/xquartz/bundle/{ => Resources}/da.lproj/main.nib/keyedobjects.nib (100%) rename hw/xquartz/bundle/{ => Resources}/fi.lproj/InfoPlist.strings (100%) rename hw/xquartz/bundle/{ => Resources}/fi.lproj/Localizable.strings (100%) rename hw/xquartz/bundle/{ => Resources}/fi.lproj/main.nib/keyedobjects.nib (100%) rename hw/xquartz/bundle/{ => Resources}/ko.lproj/InfoPlist.strings (100%) rename hw/xquartz/bundle/{ => Resources}/ko.lproj/Localizable.strings (100%) rename hw/xquartz/bundle/{ => Resources}/ko.lproj/main.nib/keyedobjects.nib (100%) rename hw/xquartz/bundle/{ => Resources}/no.lproj/InfoPlist.strings (100%) rename hw/xquartz/bundle/{ => Resources}/no.lproj/Localizable.strings (100%) rename hw/xquartz/bundle/{ => Resources}/no.lproj/main.nib/keyedobjects.nib (100%) rename hw/xquartz/bundle/{ => Resources}/pl.lproj/InfoPlist.strings (100%) rename hw/xquartz/bundle/{ => Resources}/pl.lproj/Localizable.strings (100%) rename hw/xquartz/bundle/{ => Resources}/pl.lproj/main.nib/keyedobjects.nib (100%) rename hw/xquartz/bundle/{ => Resources}/pt.lproj/InfoPlist.strings (100%) rename hw/xquartz/bundle/{ => Resources}/pt.lproj/Localizable.strings (100%) rename hw/xquartz/bundle/{ => Resources}/pt.lproj/main.nib/keyedobjects.nib (100%) rename hw/xquartz/bundle/{ => Resources}/pt_PT.lproj/InfoPlist.strings (100%) rename hw/xquartz/bundle/{ => Resources}/pt_PT.lproj/Localizable.strings (100%) rename hw/xquartz/bundle/{ => Resources}/pt_PT.lproj/main.nib/keyedobjects.nib (100%) rename hw/xquartz/bundle/{ => Resources}/ru.lproj/InfoPlist.strings (100%) rename hw/xquartz/bundle/{ => Resources}/ru.lproj/Localizable.strings (100%) rename hw/xquartz/bundle/{ => Resources}/ru.lproj/main.nib/keyedobjects.nib (100%) rename hw/xquartz/bundle/{ => Resources}/sv.lproj/InfoPlist.strings (100%) rename hw/xquartz/bundle/{ => Resources}/sv.lproj/Localizable.strings (100%) rename hw/xquartz/bundle/{ => Resources}/sv.lproj/main.nib/keyedobjects.nib (100%) rename hw/xquartz/bundle/{ => Resources}/zh_CN.lproj/InfoPlist.strings (100%) rename hw/xquartz/bundle/{ => Resources}/zh_CN.lproj/Localizable.strings (100%) rename hw/xquartz/bundle/{ => Resources}/zh_CN.lproj/main.nib/keyedobjects.nib (100%) rename hw/xquartz/bundle/{ => Resources}/zh_TW.lproj/InfoPlist.strings (100%) rename hw/xquartz/bundle/{ => Resources}/zh_TW.lproj/Localizable.strings (100%) rename hw/xquartz/bundle/{ => Resources}/zh_TW.lproj/main.nib/keyedobjects.nib (100%) create mode 100644 hw/xquartz/stub/Makefile.am create mode 100644 hw/xquartz/stub/stub.c diff --git a/configure.ac b/configure.ac index f695551e4..9b7753492 100644 --- a/configure.ac +++ b/configure.ac @@ -562,9 +562,6 @@ AC_ARG_ENABLE(dmx, AS_HELP_STRING([--enable-dmx], [Build DMX server (d AC_ARG_ENABLE(xvfb, AS_HELP_STRING([--enable-xvfb], [Build Xvfb server (default: yes)]), [XVFB=$enableval], [XVFB=yes]) AC_ARG_ENABLE(xnest, AS_HELP_STRING([--enable-xnest], [Build Xnest server (default: auto)]), [XNEST=$enableval], [XNEST=auto]) AC_ARG_ENABLE(xquartz, AS_HELP_STRING([--enable-xquartz], [Build Xquartz server for OS-X (default: auto)]), [XQUARTZ=$enableval], [XQUARTZ=auto]) -AC_ARG_ENABLE(x11app, AS_HELP_STRING([--enable-x11app], [Build Apple's X11.app for Xquartz (default: auto)]), [X11APP=$enableval], [X11APP=auto]) -AC_ARG_WITH(x11app-archs, AS_HELP_STRING([--with-x11app-archs=ARCHS], [Architectures to build X11.app for, space delimeted (default: "ppc i386")]), [X11APP_ARCHS=$enableval], [X11APP_ARCHS="ppc i386"]) -AC_SUBST([X11APP_ARCHS]) AC_ARG_ENABLE(xwin, AS_HELP_STRING([--enable-xwin], [Build XWin server (default: auto)]), [XWIN=$enableval], [XWIN=auto]) AC_ARG_ENABLE(xprint, AS_HELP_STRING([--enable-xprint], [Build Xprint extension and server (default: no)]), [XPRINT=$enableval], [XPRINT=no]) AC_ARG_ENABLE(xgl, AS_HELP_STRING([--enable-xgl], [Build Xgl server (default: no)]), [XGL=$enableval], [XGL=no]) @@ -1756,17 +1753,6 @@ AM_CONDITIONAL(HAVE_XPLUGIN, [test "x$ac_cv_lib_Xplugin_xp_init" = xyes]) AM_CONDITIONAL(HAVE_AGL_FRAMEWORK, [test "x$xorg_cv_AGL_framework" = xyes]) AM_CONDITIONAL(XQUARTZ, [test "x$XQUARTZ" = xyes]) -if test "x$X11APP" = xauto; then - AC_MSG_CHECKING([whether to build X11.app]) - if test "x$XQUARTZ" = xyes ; then - X11APP=yes - else - X11APP=no - fi - AC_MSG_RESULT([$X11APP]) -fi -AM_CONDITIONAL(X11APP,[test "X$X11APP" = Xyes]) - if test "x$LAUNCHD" = "xauto"; then if test "x$XQUARTZ" = "xyes" ; then LAUNCHD=yes @@ -2165,6 +2151,7 @@ hw/xwin/Makefile hw/xquartz/Makefile hw/xquartz/GL/Makefile hw/xquartz/bundle/Makefile +hw/xquartz/stub/Makefile hw/xquartz/xpr/Makefile hw/kdrive/Makefile hw/kdrive/ati/Makefile diff --git a/hw/xquartz/Makefile.am b/hw/xquartz/Makefile.am index b2674be4f..bbd21f816 100644 --- a/hw/xquartz/Makefile.am +++ b/hw/xquartz/Makefile.am @@ -9,16 +9,12 @@ AM_CPPFLAGS = \ -DXFree86Server \ -I$(top_srcdir)/miext/rootless -if X11APP -X11APP_SUBDIRS = bundle -endif - -SUBDIRS = . GL xpr $(X11APP_SUBDIRS) -DIST_SUBDIRS = GL xpr bundle +SUBDIRS = bundle . GL xpr stub libXquartz_la_SOURCES = \ $(top_srcdir)/fb/fbcmap_mi.c \ $(top_srcdir)/mi/miinitext.c \ + bundle/bundle-main.c \ X11Application.m \ X11Controller.m \ applewm.c \ diff --git a/hw/xquartz/bundle/Makefile.am b/hw/xquartz/bundle/Makefile.am index 801fdc7d8..b7776967f 100644 --- a/hw/xquartz/bundle/Makefile.am +++ b/hw/xquartz/bundle/Makefile.am @@ -1,20 +1,11 @@ -bin_SCRIPTS = x11app - -.PHONY: x11app - -x11app: - xcodebuild CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" ARCHS="$(X11APP_ARCHS)" - install-data-hook: - xcodebuild install DSTROOT="/$(DESTDIR)" INSTALL_PATH="$(APPLE_APPLICATIONS_DIR)" DEPLOYMENT_LOCATION=YES SKIP_INSTALL=NO ARCHS="$(X11APP_ARCHS)" - -clean-local: - rm -rf build + ./mk_bundke.sh $(DESTDIR)$(APPLE_APPLICATIONS_DIR)/X11.app resourcedir=$(libdir)/X11/xserver resource_DATA = Xquartz.plist EXTRA_DIST = \ + mk_bundke.sh \ $(resource_DATA) \ Info.plist \ X11.icns \ diff --git a/hw/xquartz/bundle/Dutch.lproj/InfoPlist.strings b/hw/xquartz/bundle/Resources/Dutch.lproj/InfoPlist.strings similarity index 100% rename from hw/xquartz/bundle/Dutch.lproj/InfoPlist.strings rename to hw/xquartz/bundle/Resources/Dutch.lproj/InfoPlist.strings diff --git a/hw/xquartz/bundle/Dutch.lproj/Localizable.strings b/hw/xquartz/bundle/Resources/Dutch.lproj/Localizable.strings similarity index 100% rename from hw/xquartz/bundle/Dutch.lproj/Localizable.strings rename to hw/xquartz/bundle/Resources/Dutch.lproj/Localizable.strings diff --git a/hw/xquartz/bundle/Dutch.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/Dutch.lproj/main.nib/keyedobjects.nib similarity index 100% rename from hw/xquartz/bundle/Dutch.lproj/main.nib/keyedobjects.nib rename to hw/xquartz/bundle/Resources/Dutch.lproj/main.nib/keyedobjects.nib diff --git a/hw/xquartz/bundle/English.lproj/InfoPlist.strings b/hw/xquartz/bundle/Resources/English.lproj/InfoPlist.strings similarity index 100% rename from hw/xquartz/bundle/English.lproj/InfoPlist.strings rename to hw/xquartz/bundle/Resources/English.lproj/InfoPlist.strings diff --git a/hw/xquartz/bundle/English.lproj/Localizable.strings b/hw/xquartz/bundle/Resources/English.lproj/Localizable.strings similarity index 100% rename from hw/xquartz/bundle/English.lproj/Localizable.strings rename to hw/xquartz/bundle/Resources/English.lproj/Localizable.strings diff --git a/hw/xquartz/bundle/English.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/English.lproj/main.nib/designable.nib similarity index 100% rename from hw/xquartz/bundle/English.lproj/main.nib/designable.nib rename to hw/xquartz/bundle/Resources/English.lproj/main.nib/designable.nib diff --git a/hw/xquartz/bundle/English.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/English.lproj/main.nib/keyedobjects.nib similarity index 100% rename from hw/xquartz/bundle/English.lproj/main.nib/keyedobjects.nib rename to hw/xquartz/bundle/Resources/English.lproj/main.nib/keyedobjects.nib diff --git a/hw/xquartz/bundle/French.lproj/InfoPlist.strings b/hw/xquartz/bundle/Resources/French.lproj/InfoPlist.strings similarity index 100% rename from hw/xquartz/bundle/French.lproj/InfoPlist.strings rename to hw/xquartz/bundle/Resources/French.lproj/InfoPlist.strings diff --git a/hw/xquartz/bundle/French.lproj/Localizable.strings b/hw/xquartz/bundle/Resources/French.lproj/Localizable.strings similarity index 100% rename from hw/xquartz/bundle/French.lproj/Localizable.strings rename to hw/xquartz/bundle/Resources/French.lproj/Localizable.strings diff --git a/hw/xquartz/bundle/French.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/French.lproj/main.nib/keyedobjects.nib similarity index 100% rename from hw/xquartz/bundle/French.lproj/main.nib/keyedobjects.nib rename to hw/xquartz/bundle/Resources/French.lproj/main.nib/keyedobjects.nib diff --git a/hw/xquartz/bundle/German.lproj/InfoPlist.strings b/hw/xquartz/bundle/Resources/German.lproj/InfoPlist.strings similarity index 100% rename from hw/xquartz/bundle/German.lproj/InfoPlist.strings rename to hw/xquartz/bundle/Resources/German.lproj/InfoPlist.strings diff --git a/hw/xquartz/bundle/German.lproj/Localizable.strings b/hw/xquartz/bundle/Resources/German.lproj/Localizable.strings similarity index 100% rename from hw/xquartz/bundle/German.lproj/Localizable.strings rename to hw/xquartz/bundle/Resources/German.lproj/Localizable.strings diff --git a/hw/xquartz/bundle/German.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/German.lproj/main.nib/keyedobjects.nib similarity index 100% rename from hw/xquartz/bundle/German.lproj/main.nib/keyedobjects.nib rename to hw/xquartz/bundle/Resources/German.lproj/main.nib/keyedobjects.nib diff --git a/hw/xquartz/bundle/Italian.lproj/InfoPlist.strings b/hw/xquartz/bundle/Resources/Italian.lproj/InfoPlist.strings similarity index 100% rename from hw/xquartz/bundle/Italian.lproj/InfoPlist.strings rename to hw/xquartz/bundle/Resources/Italian.lproj/InfoPlist.strings diff --git a/hw/xquartz/bundle/Italian.lproj/Localizable.strings b/hw/xquartz/bundle/Resources/Italian.lproj/Localizable.strings similarity index 100% rename from hw/xquartz/bundle/Italian.lproj/Localizable.strings rename to hw/xquartz/bundle/Resources/Italian.lproj/Localizable.strings diff --git a/hw/xquartz/bundle/Italian.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/Italian.lproj/main.nib/keyedobjects.nib similarity index 100% rename from hw/xquartz/bundle/Italian.lproj/main.nib/keyedobjects.nib rename to hw/xquartz/bundle/Resources/Italian.lproj/main.nib/keyedobjects.nib diff --git a/hw/xquartz/bundle/Japanese.lproj/InfoPlist.strings b/hw/xquartz/bundle/Resources/Japanese.lproj/InfoPlist.strings similarity index 100% rename from hw/xquartz/bundle/Japanese.lproj/InfoPlist.strings rename to hw/xquartz/bundle/Resources/Japanese.lproj/InfoPlist.strings diff --git a/hw/xquartz/bundle/Japanese.lproj/Localizable.strings b/hw/xquartz/bundle/Resources/Japanese.lproj/Localizable.strings similarity index 100% rename from hw/xquartz/bundle/Japanese.lproj/Localizable.strings rename to hw/xquartz/bundle/Resources/Japanese.lproj/Localizable.strings diff --git a/hw/xquartz/bundle/Japanese.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/Japanese.lproj/main.nib/keyedobjects.nib similarity index 100% rename from hw/xquartz/bundle/Japanese.lproj/main.nib/keyedobjects.nib rename to hw/xquartz/bundle/Resources/Japanese.lproj/main.nib/keyedobjects.nib diff --git a/hw/xquartz/bundle/Spanish.lproj/InfoPlist.strings b/hw/xquartz/bundle/Resources/Spanish.lproj/InfoPlist.strings similarity index 100% rename from hw/xquartz/bundle/Spanish.lproj/InfoPlist.strings rename to hw/xquartz/bundle/Resources/Spanish.lproj/InfoPlist.strings diff --git a/hw/xquartz/bundle/Spanish.lproj/Localizable.strings b/hw/xquartz/bundle/Resources/Spanish.lproj/Localizable.strings similarity index 100% rename from hw/xquartz/bundle/Spanish.lproj/Localizable.strings rename to hw/xquartz/bundle/Resources/Spanish.lproj/Localizable.strings diff --git a/hw/xquartz/bundle/Spanish.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/Spanish.lproj/main.nib/keyedobjects.nib similarity index 100% rename from hw/xquartz/bundle/Spanish.lproj/main.nib/keyedobjects.nib rename to hw/xquartz/bundle/Resources/Spanish.lproj/main.nib/keyedobjects.nib diff --git a/hw/xquartz/bundle/X11.icns b/hw/xquartz/bundle/Resources/X11.icns similarity index 100% rename from hw/xquartz/bundle/X11.icns rename to hw/xquartz/bundle/Resources/X11.icns diff --git a/hw/xquartz/bundle/da.lproj/InfoPlist.strings b/hw/xquartz/bundle/Resources/da.lproj/InfoPlist.strings similarity index 100% rename from hw/xquartz/bundle/da.lproj/InfoPlist.strings rename to hw/xquartz/bundle/Resources/da.lproj/InfoPlist.strings diff --git a/hw/xquartz/bundle/da.lproj/Localizable.strings b/hw/xquartz/bundle/Resources/da.lproj/Localizable.strings similarity index 100% rename from hw/xquartz/bundle/da.lproj/Localizable.strings rename to hw/xquartz/bundle/Resources/da.lproj/Localizable.strings diff --git a/hw/xquartz/bundle/da.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/da.lproj/main.nib/keyedobjects.nib similarity index 100% rename from hw/xquartz/bundle/da.lproj/main.nib/keyedobjects.nib rename to hw/xquartz/bundle/Resources/da.lproj/main.nib/keyedobjects.nib diff --git a/hw/xquartz/bundle/fi.lproj/InfoPlist.strings b/hw/xquartz/bundle/Resources/fi.lproj/InfoPlist.strings similarity index 100% rename from hw/xquartz/bundle/fi.lproj/InfoPlist.strings rename to hw/xquartz/bundle/Resources/fi.lproj/InfoPlist.strings diff --git a/hw/xquartz/bundle/fi.lproj/Localizable.strings b/hw/xquartz/bundle/Resources/fi.lproj/Localizable.strings similarity index 100% rename from hw/xquartz/bundle/fi.lproj/Localizable.strings rename to hw/xquartz/bundle/Resources/fi.lproj/Localizable.strings diff --git a/hw/xquartz/bundle/fi.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/fi.lproj/main.nib/keyedobjects.nib similarity index 100% rename from hw/xquartz/bundle/fi.lproj/main.nib/keyedobjects.nib rename to hw/xquartz/bundle/Resources/fi.lproj/main.nib/keyedobjects.nib diff --git a/hw/xquartz/bundle/ko.lproj/InfoPlist.strings b/hw/xquartz/bundle/Resources/ko.lproj/InfoPlist.strings similarity index 100% rename from hw/xquartz/bundle/ko.lproj/InfoPlist.strings rename to hw/xquartz/bundle/Resources/ko.lproj/InfoPlist.strings diff --git a/hw/xquartz/bundle/ko.lproj/Localizable.strings b/hw/xquartz/bundle/Resources/ko.lproj/Localizable.strings similarity index 100% rename from hw/xquartz/bundle/ko.lproj/Localizable.strings rename to hw/xquartz/bundle/Resources/ko.lproj/Localizable.strings diff --git a/hw/xquartz/bundle/ko.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/ko.lproj/main.nib/keyedobjects.nib similarity index 100% rename from hw/xquartz/bundle/ko.lproj/main.nib/keyedobjects.nib rename to hw/xquartz/bundle/Resources/ko.lproj/main.nib/keyedobjects.nib diff --git a/hw/xquartz/bundle/no.lproj/InfoPlist.strings b/hw/xquartz/bundle/Resources/no.lproj/InfoPlist.strings similarity index 100% rename from hw/xquartz/bundle/no.lproj/InfoPlist.strings rename to hw/xquartz/bundle/Resources/no.lproj/InfoPlist.strings diff --git a/hw/xquartz/bundle/no.lproj/Localizable.strings b/hw/xquartz/bundle/Resources/no.lproj/Localizable.strings similarity index 100% rename from hw/xquartz/bundle/no.lproj/Localizable.strings rename to hw/xquartz/bundle/Resources/no.lproj/Localizable.strings diff --git a/hw/xquartz/bundle/no.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/no.lproj/main.nib/keyedobjects.nib similarity index 100% rename from hw/xquartz/bundle/no.lproj/main.nib/keyedobjects.nib rename to hw/xquartz/bundle/Resources/no.lproj/main.nib/keyedobjects.nib diff --git a/hw/xquartz/bundle/pl.lproj/InfoPlist.strings b/hw/xquartz/bundle/Resources/pl.lproj/InfoPlist.strings similarity index 100% rename from hw/xquartz/bundle/pl.lproj/InfoPlist.strings rename to hw/xquartz/bundle/Resources/pl.lproj/InfoPlist.strings diff --git a/hw/xquartz/bundle/pl.lproj/Localizable.strings b/hw/xquartz/bundle/Resources/pl.lproj/Localizable.strings similarity index 100% rename from hw/xquartz/bundle/pl.lproj/Localizable.strings rename to hw/xquartz/bundle/Resources/pl.lproj/Localizable.strings diff --git a/hw/xquartz/bundle/pl.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/pl.lproj/main.nib/keyedobjects.nib similarity index 100% rename from hw/xquartz/bundle/pl.lproj/main.nib/keyedobjects.nib rename to hw/xquartz/bundle/Resources/pl.lproj/main.nib/keyedobjects.nib diff --git a/hw/xquartz/bundle/pt.lproj/InfoPlist.strings b/hw/xquartz/bundle/Resources/pt.lproj/InfoPlist.strings similarity index 100% rename from hw/xquartz/bundle/pt.lproj/InfoPlist.strings rename to hw/xquartz/bundle/Resources/pt.lproj/InfoPlist.strings diff --git a/hw/xquartz/bundle/pt.lproj/Localizable.strings b/hw/xquartz/bundle/Resources/pt.lproj/Localizable.strings similarity index 100% rename from hw/xquartz/bundle/pt.lproj/Localizable.strings rename to hw/xquartz/bundle/Resources/pt.lproj/Localizable.strings diff --git a/hw/xquartz/bundle/pt.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/pt.lproj/main.nib/keyedobjects.nib similarity index 100% rename from hw/xquartz/bundle/pt.lproj/main.nib/keyedobjects.nib rename to hw/xquartz/bundle/Resources/pt.lproj/main.nib/keyedobjects.nib diff --git a/hw/xquartz/bundle/pt_PT.lproj/InfoPlist.strings b/hw/xquartz/bundle/Resources/pt_PT.lproj/InfoPlist.strings similarity index 100% rename from hw/xquartz/bundle/pt_PT.lproj/InfoPlist.strings rename to hw/xquartz/bundle/Resources/pt_PT.lproj/InfoPlist.strings diff --git a/hw/xquartz/bundle/pt_PT.lproj/Localizable.strings b/hw/xquartz/bundle/Resources/pt_PT.lproj/Localizable.strings similarity index 100% rename from hw/xquartz/bundle/pt_PT.lproj/Localizable.strings rename to hw/xquartz/bundle/Resources/pt_PT.lproj/Localizable.strings diff --git a/hw/xquartz/bundle/pt_PT.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/pt_PT.lproj/main.nib/keyedobjects.nib similarity index 100% rename from hw/xquartz/bundle/pt_PT.lproj/main.nib/keyedobjects.nib rename to hw/xquartz/bundle/Resources/pt_PT.lproj/main.nib/keyedobjects.nib diff --git a/hw/xquartz/bundle/ru.lproj/InfoPlist.strings b/hw/xquartz/bundle/Resources/ru.lproj/InfoPlist.strings similarity index 100% rename from hw/xquartz/bundle/ru.lproj/InfoPlist.strings rename to hw/xquartz/bundle/Resources/ru.lproj/InfoPlist.strings diff --git a/hw/xquartz/bundle/ru.lproj/Localizable.strings b/hw/xquartz/bundle/Resources/ru.lproj/Localizable.strings similarity index 100% rename from hw/xquartz/bundle/ru.lproj/Localizable.strings rename to hw/xquartz/bundle/Resources/ru.lproj/Localizable.strings diff --git a/hw/xquartz/bundle/ru.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/ru.lproj/main.nib/keyedobjects.nib similarity index 100% rename from hw/xquartz/bundle/ru.lproj/main.nib/keyedobjects.nib rename to hw/xquartz/bundle/Resources/ru.lproj/main.nib/keyedobjects.nib diff --git a/hw/xquartz/bundle/sv.lproj/InfoPlist.strings b/hw/xquartz/bundle/Resources/sv.lproj/InfoPlist.strings similarity index 100% rename from hw/xquartz/bundle/sv.lproj/InfoPlist.strings rename to hw/xquartz/bundle/Resources/sv.lproj/InfoPlist.strings diff --git a/hw/xquartz/bundle/sv.lproj/Localizable.strings b/hw/xquartz/bundle/Resources/sv.lproj/Localizable.strings similarity index 100% rename from hw/xquartz/bundle/sv.lproj/Localizable.strings rename to hw/xquartz/bundle/Resources/sv.lproj/Localizable.strings diff --git a/hw/xquartz/bundle/sv.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/sv.lproj/main.nib/keyedobjects.nib similarity index 100% rename from hw/xquartz/bundle/sv.lproj/main.nib/keyedobjects.nib rename to hw/xquartz/bundle/Resources/sv.lproj/main.nib/keyedobjects.nib diff --git a/hw/xquartz/bundle/zh_CN.lproj/InfoPlist.strings b/hw/xquartz/bundle/Resources/zh_CN.lproj/InfoPlist.strings similarity index 100% rename from hw/xquartz/bundle/zh_CN.lproj/InfoPlist.strings rename to hw/xquartz/bundle/Resources/zh_CN.lproj/InfoPlist.strings diff --git a/hw/xquartz/bundle/zh_CN.lproj/Localizable.strings b/hw/xquartz/bundle/Resources/zh_CN.lproj/Localizable.strings similarity index 100% rename from hw/xquartz/bundle/zh_CN.lproj/Localizable.strings rename to hw/xquartz/bundle/Resources/zh_CN.lproj/Localizable.strings diff --git a/hw/xquartz/bundle/zh_CN.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/zh_CN.lproj/main.nib/keyedobjects.nib similarity index 100% rename from hw/xquartz/bundle/zh_CN.lproj/main.nib/keyedobjects.nib rename to hw/xquartz/bundle/Resources/zh_CN.lproj/main.nib/keyedobjects.nib diff --git a/hw/xquartz/bundle/zh_TW.lproj/InfoPlist.strings b/hw/xquartz/bundle/Resources/zh_TW.lproj/InfoPlist.strings similarity index 100% rename from hw/xquartz/bundle/zh_TW.lproj/InfoPlist.strings rename to hw/xquartz/bundle/Resources/zh_TW.lproj/InfoPlist.strings diff --git a/hw/xquartz/bundle/zh_TW.lproj/Localizable.strings b/hw/xquartz/bundle/Resources/zh_TW.lproj/Localizable.strings similarity index 100% rename from hw/xquartz/bundle/zh_TW.lproj/Localizable.strings rename to hw/xquartz/bundle/Resources/zh_TW.lproj/Localizable.strings diff --git a/hw/xquartz/bundle/zh_TW.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/zh_TW.lproj/main.nib/keyedobjects.nib similarity index 100% rename from hw/xquartz/bundle/zh_TW.lproj/main.nib/keyedobjects.nib rename to hw/xquartz/bundle/Resources/zh_TW.lproj/main.nib/keyedobjects.nib diff --git a/hw/xquartz/bundle/bundle-main.c b/hw/xquartz/bundle/bundle-main.c index e97770a55..042fa3ab8 100644 --- a/hw/xquartz/bundle/bundle-main.c +++ b/hw/xquartz/bundle/bundle-main.c @@ -43,7 +43,9 @@ static int execute(const char *command); static char *command_from_prefs(const char *key, const char *default_value); -int main(int argc, char **argv) { +int server_main(int argc, char **argv, char **envp); + +int main(int argc, char **argv, char **envp) { Display *display; const char *s; @@ -52,7 +54,12 @@ int main(int argc, char **argv) { for(i=0; i < argc; i++) { fprintf(stderr, "\targv[%u] = %s\n", (unsigned)i, argv[i]); } - + + /* Take care of the case where we're called like a normal DDX */ + if(argc > 1 && argv[1][0] == ':') { + exit(server_main(argc, argv, envp)); + } + /* If we have a process serial number and it's our only arg, act as if * the user double clicked the app bundle: launch app_to_run if possible */ @@ -73,7 +80,7 @@ int main(int argc, char **argv) { } /* Start the server */ - if(s = getenv("DISPLAY")) { + if((s = getenv("DISPLAY"))) { fprintf(stderr, "X11.app: Could not connect to server (DISPLAY=\"%s\", unsetting). Starting X server.\n", s); unsetenv("DISPLAY"); } else { diff --git a/hw/xquartz/quartzStartup.c b/hw/xquartz/quartzStartup.c index a4472e659..43f1502a1 100644 --- a/hw/xquartz/quartzStartup.c +++ b/hw/xquartz/quartzStartup.c @@ -94,7 +94,7 @@ void QuartzInitServer(int argc, char **argv, char **envp) { } } -int main(int argc, char **argv, char **envp) { +int server_main(int argc, char **argv, char **envp) { int i; int fd[2]; diff --git a/hw/xquartz/stub/Makefile.am b/hw/xquartz/stub/Makefile.am new file mode 100644 index 000000000..3752dc111 --- /dev/null +++ b/hw/xquartz/stub/Makefile.am @@ -0,0 +1,11 @@ +AM_CPPFLAGS = \ + -DBUILD_DATE=\"$(BUILD_DATE)\" \ + -DXSERVER_VERSION=\"$(VERSION)\" + +bin_PROGRAMS = Xquartz + +Xquartz_SOURCES = \ + stub.c + +Xquartz_LDFLAGS = \ + -framework CoreServices diff --git a/hw/xquartz/stub/stub.c b/hw/xquartz/stub/stub.c new file mode 100644 index 000000000..70f222c27 --- /dev/null +++ b/hw/xquartz/stub/stub.c @@ -0,0 +1,96 @@ +/* Copyright (c) 2008 Apple Inc. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT + * HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name(s) of the above + * copyright holders shall not be used in advertising or otherwise to + * promote the sale, use or other dealings in this Software without + * prior written authorization. + */ + +#include + +#ifdef HAVE_DIX_CONFIG_H +#include +#endif + +#include +#include +#include + +#define kX11AppBundleId "org.x.X11" +#define kX11AppBundlePath "/Contents/MacOS/X11" + +static char x11_path[PATH_MAX + 1]; + +static void set_x11_path() { + CFURLRef appURL = NULL; + OSStatus osstatus = LSFindApplicationForInfo(kLSUnknownCreator, CFSTR(kX11AppBundleId), nil, nil, &appURL); + + switch (osstatus) { + case noErr: + if (appURL == NULL) { + fprintf(stderr, "xinit: Invalid response from LSFindApplicationForInfo(%s)\n", + kX11AppBundleId); + exit(1); + } + + if (!CFURLGetFileSystemRepresentation(appURL, true, (unsigned char *)x11_path, sizeof(x11_path))) { + fprintf(stderr, "xinit: Error resolving URL for %s\n", kX11AppBundleId); + exit(2); + } + + strlcat(x11_path, kX11AppBundlePath, sizeof(x11_path)); +#ifdef DEBUG + fprintf(stderr, "XQuartz: X11.app = %s\n", x11_path); +#endif + break; + case kLSApplicationNotFoundErr: + fprintf(stderr, "XQuartz: Unable to find application for %s\n", kX11AppBundleId); + exit(4); + default: + fprintf(stderr, "XQuartz: Unable to find application for %s, error code = %d\n", + kX11AppBundleId, (int)osstatus); + exit(5); + } +} + +#ifndef BUILD_DATE +#define BUILD_DATE "?" +#endif +#ifndef XSERVER_VERSION +#define XSERVER_VERSION "?" +#endif + +int main(int argc, char **argv) { + + if(argc == 2 && !strcmp(argv[1], "-version")) { + fprintf(stderr, "X.org Release 7.3\n"); + fprintf(stderr, "X.Org X Server %s\n", XSERVER_VERSION); + fprintf(stderr, "Build Date: %s\n", BUILD_DATE); + return 0; + } + + set_x11_path(); + + argv[0] = x11_path; + return execvp(x11_path, argv); +} diff --git a/hw/xquartz/xpr/Makefile.am b/hw/xquartz/xpr/Makefile.am index 41f2b8655..6bf99a402 100644 --- a/hw/xquartz/xpr/Makefile.am +++ b/hw/xquartz/xpr/Makefile.am @@ -1,4 +1,5 @@ -bin_PROGRAMS = Xquartz +x11appdir = $(APPLE_APPLICATIONS_DIR)/X11.app/Contents/MacOS +x11app_PROGRAMS = X11 AM_CFLAGS = $(XSERVER_CFLAGS) $(DIX_CFLAGS) AM_CPPFLAGS = \ @@ -6,7 +7,7 @@ AM_CPPFLAGS = \ -I$(top_srcdir)/miext \ -I$(top_srcdir)/miext/rootless -Xquartz_SOURCES = \ +X11_SOURCES = \ appledri.c \ dri.c \ xprAppleWM.c \ @@ -18,13 +19,13 @@ Xquartz_SOURCES = \ x-hook.c \ x-list.c -Xquartz_LDADD = \ +X11_LDADD = \ $(top_builddir)/hw/xquartz/libXquartz.la \ $(top_builddir)/dix/dixfonts.lo \ $(top_builddir)/miext/rootless/librootless.la \ - $(DARWIN_LIBS) $(XSERVER_LIBS) $(XSERVER_SYS_LIBS) -lXplugin + $(DARWIN_LIBS) $(XSERVER_LIBS) $(XSERVER_SYS_LIBS) -lXplugin -lX11 -Xquartz_LDFLAGS = \ +X11_LDFLAGS = \ -XCClinker -Objc \ -Wl,-u,_miDCInitialize \ -Wl,-framework,Carbon \ From 80e502c5d1f7e9221c6ae40716d6402fd28d8806 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Tue, 6 May 2008 02:28:36 -0700 Subject: [PATCH 36/66] Fixed up dist (cherry picked from commit f225222ba2bf4f03425107f258d60b73c88efaec) --- hw/xquartz/bundle/Makefile.am | 318 +++++++++--- .../bundle/X11.xcodeproj/project.pbxproj | 487 ------------------ 2 files changed, 260 insertions(+), 545 deletions(-) delete mode 100644 hw/xquartz/bundle/X11.xcodeproj/project.pbxproj diff --git a/hw/xquartz/bundle/Makefile.am b/hw/xquartz/bundle/Makefile.am index b7776967f..c61b0490c 100644 --- a/hw/xquartz/bundle/Makefile.am +++ b/hw/xquartz/bundle/Makefile.am @@ -7,62 +7,264 @@ resource_DATA = Xquartz.plist EXTRA_DIST = \ mk_bundke.sh \ $(resource_DATA) \ - Info.plist \ - X11.icns \ bundle-main.c \ - X11.xcodeproj/project.pbxproj \ - Dutch.lproj/InfoPlist.strings \ - Dutch.lproj/Localizable.strings \ - Dutch.lproj/main.nib/keyedobjects.nib \ - English.lproj/InfoPlist.strings \ - English.lproj/Localizable.strings \ - English.lproj/main.nib/designable.nib \ - English.lproj/main.nib/keyedobjects.nib \ - French.lproj/InfoPlist.strings \ - French.lproj/Localizable.strings \ - French.lproj/main.nib/keyedobjects.nib \ - German.lproj/InfoPlist.strings \ - German.lproj/Localizable.strings \ - German.lproj/main.nib/keyedobjects.nib \ - Italian.lproj/InfoPlist.strings \ - Italian.lproj/Localizable.strings \ - Italian.lproj/main.nib/keyedobjects.nib \ - Japanese.lproj/InfoPlist.strings \ - Japanese.lproj/Localizable.strings \ - Japanese.lproj/main.nib/keyedobjects.nib \ - Spanish.lproj/InfoPlist.strings \ - Spanish.lproj/Localizable.strings \ - Spanish.lproj/main.nib/keyedobjects.nib \ - da.lproj/InfoPlist.strings \ - da.lproj/Localizable.strings \ - da.lproj/main.nib/keyedobjects.nib \ - fi.lproj/InfoPlist.strings \ - fi.lproj/Localizable.strings \ - fi.lproj/main.nib/keyedobjects.nib \ - ko.lproj/InfoPlist.strings \ - ko.lproj/Localizable.strings \ - ko.lproj/main.nib/keyedobjects.nib \ - no.lproj/InfoPlist.strings \ - no.lproj/Localizable.strings \ - no.lproj/main.nib/keyedobjects.nib \ - pl.lproj/InfoPlist.strings \ - pl.lproj/Localizable.strings \ - pl.lproj/main.nib/keyedobjects.nib \ - pt.lproj/InfoPlist.strings \ - pt.lproj/Localizable.strings \ - pt.lproj/main.nib/keyedobjects.nib \ - pt_PT.lproj/InfoPlist.strings \ - pt_PT.lproj/Localizable.strings \ - pt_PT.lproj/main.nib/keyedobjects.nib \ - ru.lproj/InfoPlist.strings \ - ru.lproj/Localizable.strings \ - ru.lproj/main.nib/keyedobjects.nib \ - sv.lproj/InfoPlist.strings \ - sv.lproj/Localizable.strings \ - sv.lproj/main.nib/keyedobjects.nib \ - zh_CN.lproj/InfoPlist.strings \ - zh_CN.lproj/Localizable.strings \ - zh_CN.lproj/main.nib/keyedobjects.nib \ - zh_TW.lproj/InfoPlist.strings \ - zh_TW.lproj/Localizable.strings \ - zh_TW.lproj/main.nib/keyedobjects.nib + Resources/da.lproj/InfoPlist.strings \ + Resources/da.lproj/Localizable.strings \ + Resources/da.lproj/main.nib/keyedobjects.nib \ + Resources/Dutch.lproj/InfoPlist.strings \ + Resources/Dutch.lproj/Localizable.strings \ + Resources/Dutch.lproj/main.nib/keyedobjects.nib \ + Resources/English.lproj/InfoPlist.strings \ + Resources/English.lproj/Localizable.strings \ + Resources/English.lproj/main.nib/designable.nib \ + Resources/English.lproj/main.nib/keyedobjects.nib \ + Resources/fi.lproj/InfoPlist.strings \ + Resources/fi.lproj/Localizable.strings \ + Resources/fi.lproj/main.nib/keyedobjects.nib \ + Resources/French.lproj/InfoPlist.strings \ + Resources/French.lproj/Localizable.strings \ + Resources/French.lproj/main.nib/keyedobjects.nib \ + Resources/German.lproj/InfoPlist.strings \ + Resources/German.lproj/Localizable.strings \ + Resources/German.lproj/main.nib/keyedobjects.nib \ + Resources/Italian.lproj/InfoPlist.strings \ + Resources/Italian.lproj/Localizable.strings \ + Resources/Italian.lproj/main.nib/keyedobjects.nib \ + Resources/Japanese.lproj/InfoPlist.strings \ + Resources/Japanese.lproj/Localizable.strings \ + Resources/Japanese.lproj/main.nib/keyedobjects.nib \ + Resources/ko.lproj/InfoPlist.strings \ + Resources/ko.lproj/Localizable.strings \ + Resources/ko.lproj/main.nib/keyedobjects.nib \ + Resources/no.lproj/InfoPlist.strings \ + Resources/no.lproj/Localizable.strings \ + Resources/no.lproj/main.nib/keyedobjects.nib \ + Resources/pl.lproj/InfoPlist.strings \ + Resources/pl.lproj/Localizable.strings \ + Resources/pl.lproj/main.nib/keyedobjects.nib \ + Resources/pt.lproj/InfoPlist.strings \ + Resources/pt.lproj/Localizable.strings \ + Resources/pt.lproj/main.nib/keyedobjects.nib \ + Resources/pt_PT.lproj/InfoPlist.strings \ + Resources/pt_PT.lproj/Localizable.strings \ + Resources/pt_PT.lproj/main.nib/keyedobjects.nib \ + Resources/ru.lproj/InfoPlist.strings \ + Resources/ru.lproj/Localizable.strings \ + Resources/ru.lproj/main.nib/keyedobjects.nib \ + Resources/Spanish.lproj/InfoPlist.strings \ + Resources/Spanish.lproj/Localizable.strings \ + Resources/Spanish.lproj/main.nib/keyedobjects.nib \ + Resources/sv.lproj/InfoPlist.strings \ + Resources/sv.lproj/Localizable.strings \ + Resources/sv.lproj/main.nib/keyedobjects.nib \ + Resources/X11.icns \ + Resources/zh_CN.lproj/InfoPlist.strings \ + Resources/zh_CN.lproj/Localizable.strings \ + Resources/zh_CN.lproj/main.nib/keyedobjects.nib \ + Resources/zh_TW.lproj/InfoPlist.strings \ + Resources/zh_TW.lproj/Localizable.strings \ + Resources/zh_TW.lproj/main.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Headers/NSApplication+AppCopies.h \ + Sparkle.framework/Versions/A/Headers/NSFileManager+Authentication.h \ + Sparkle.framework/Versions/A/Headers/NSFileManager+Verification.h \ + Sparkle.framework/Versions/A/Headers/NSString+extras.h \ + Sparkle.framework/Versions/A/Headers/RSS.h \ + Sparkle.framework/Versions/A/Headers/Sparkle.h \ + Sparkle.framework/Versions/A/Headers/SUAppcast.h \ + Sparkle.framework/Versions/A/Headers/SUAppcastItem.h \ + Sparkle.framework/Versions/A/Headers/SUAutomaticUpdateAlert.h \ + Sparkle.framework/Versions/A/Headers/SUConstants.h \ + Sparkle.framework/Versions/A/Headers/SUStatusChecker.h \ + Sparkle.framework/Versions/A/Headers/SUStatusController.h \ + Sparkle.framework/Versions/A/Headers/SUUnarchiver.h \ + Sparkle.framework/Versions/A/Headers/SUUpdateAlert.h \ + Sparkle.framework/Versions/A/Headers/SUUpdater.h \ + Sparkle.framework/Versions/A/Headers/SUUtilities.h \ + Sparkle.framework/Versions/A/Resources/ca.lproj/Sparkle.strings \ + Sparkle.framework/Versions/A/Resources/ca.lproj/SUAutomaticUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/ca.lproj/SUAutomaticUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/ca.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/ca.lproj/SUUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/ca.lproj/SUUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/ca.lproj/SUUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings \ + Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/cy.lproj/Sparkle.strings \ + Sparkle.framework/Versions/A/Resources/cy.lproj/SUAutomaticUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/cy.lproj/SUAutomaticUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/cy.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/cy.lproj/SUUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/cy.lproj/SUUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/cy.lproj/SUUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/da.lproj/Sparkle.strings \ + Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings \ + Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings \ + Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings \ + Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/fi.lproj/Sparkle.strings \ + Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings \ + Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/he.lproj/Sparkle.strings \ + Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/hu.lproj/Sparkle.strings \ + Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/id.lproj/Sparkle.strings \ + Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/id.lproj/SUUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/id.lproj/SUUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/id.lproj/SUUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/Info.plist \ + Sparkle.framework/Versions/A/Resources/is.lproj/Sparkle.strings \ + Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings \ + Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/ja.lproj/Sparkle.strings \ + Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/ko.lproj/Sparkle.strings \ + Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings \ + Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/no.lproj/Sparkle.strings \ + Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/no.lproj/SUUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/no.lproj/SUUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/no.lproj/SUUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/pl.lproj/Sparkle.strings \ + Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings \ + Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/sk.lproj/Sparkle.strings \ + Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/SUStatus.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/SUStatus.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/SUStatus.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings \ + Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/th.lproj/Sparkle.strings \ + Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/tr.lproj/Sparkle.strings \ + Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/zh_CN.lproj/Sparkle.strings \ + Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/zh_TW.lproj/Sparkle.strings \ + Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib/classes.nib \ + Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib/info.nib \ + Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib/keyedobjects.nib \ + Sparkle.framework/Versions/A/Sparkle + diff --git a/hw/xquartz/bundle/X11.xcodeproj/project.pbxproj b/hw/xquartz/bundle/X11.xcodeproj/project.pbxproj deleted file mode 100644 index 711408dd5..000000000 --- a/hw/xquartz/bundle/X11.xcodeproj/project.pbxproj +++ /dev/null @@ -1,487 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 42; - objects = { - -/* Begin PBXBuildFile section */ - 527F24190B5D938C007840A7 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */; }; - 527F241A0B5D938C007840A7 /* main.nib in Resources */ = {isa = PBXBuildFile; fileRef = 02345980000FD03B11CA0E72 /* main.nib */; }; - 527F241B0B5D938C007840A7 /* X11.icns in Resources */ = {isa = PBXBuildFile; fileRef = 50459C5F038587C60ECA21EC /* X11.icns */; }; - 527F241D0B5D938C007840A7 /* bundle-main.c in Sources */ = {isa = PBXBuildFile; fileRef = 50EE2AB703849F0B0ECA21EC /* bundle-main.c */; }; - 527F241F0B5D938C007840A7 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 50F4F0A7039D6ACA0E82C0CB /* CoreFoundation.framework */; }; - 527F24200B5D938C007840A7 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 570C5748047186C400ACF82F /* SystemConfiguration.framework */; }; - 527F24370B5D9D89007840A7 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 527F24260B5D938C007840A7 /* Info.plist */; }; - 52880C6F0DCFF906003407EC /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 52880C6E0DCFF906003407EC /* Sparkle.framework */; }; - 52D9C0ED0BCDDF6B00CD2AFC /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 52D9C0EB0BCDDF6B00CD2AFC /* Localizable.strings */; }; -/* End PBXBuildFile section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 52880C8C0DCFF9FC003407EC /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - 52880C6F0DCFF906003407EC /* Sparkle.framework in CopyFiles */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 0867D6ABFE840B52C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; - 1870340FFE93FCAF11CA0CD7 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/main.nib; sourceTree = ""; }; - 3FB03E460D1B6C05005958A5 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Localizable.strings; sourceTree = ""; }; - 3FB03E470D1B6C05005958A5 /* Dutch */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Dutch; path = Dutch.lproj/Localizable.strings; sourceTree = ""; }; - 3FB03E480D1B6C05005958A5 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Localizable.strings; sourceTree = ""; }; - 3FB03E490D1B6C05005958A5 /* French */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = French; path = French.lproj/Localizable.strings; sourceTree = ""; }; - 3FB03E4A0D1B6C05005958A5 /* German */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = German; path = German.lproj/Localizable.strings; sourceTree = ""; }; - 3FB03E4B0D1B6C05005958A5 /* Italian */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Italian; path = Italian.lproj/Localizable.strings; sourceTree = ""; }; - 3FB03E4C0D1B6C05005958A5 /* Japanese */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Japanese; path = Japanese.lproj/Localizable.strings; sourceTree = ""; }; - 3FB03E4D0D1B6C05005958A5 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Localizable.strings; sourceTree = ""; }; - 3FB03E4E0D1B6C05005958A5 /* no */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = no; path = no.lproj/Localizable.strings; sourceTree = ""; }; - 3FB03E4F0D1B6C05005958A5 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = ""; }; - 3FB03E500D1B6C05005958A5 /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/Localizable.strings; sourceTree = ""; }; - 3FB03E510D1B6C05005958A5 /* pt_PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt_PT; path = pt_PT.lproj/Localizable.strings; sourceTree = ""; }; - 3FB03E520D1B6C05005958A5 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; - 3FB03E530D1B6C05005958A5 /* Spanish */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Spanish; path = Spanish.lproj/Localizable.strings; sourceTree = ""; }; - 3FB03E540D1B6C05005958A5 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = ""; }; - 3FB03E550D1B6C05005958A5 /* zh_CN */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = zh_CN; path = zh_CN.lproj/Localizable.strings; sourceTree = ""; }; - 3FB03E560D1B6C05005958A5 /* zh_TW */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = zh_TW; path = zh_TW.lproj/Localizable.strings; sourceTree = ""; }; - 3FB03E570D1B6C17005958A5 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/InfoPlist.strings; sourceTree = ""; }; - 3FB03E580D1B6C17005958A5 /* Dutch */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Dutch; path = Dutch.lproj/InfoPlist.strings; sourceTree = ""; }; - 3FB03E590D1B6C17005958A5 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/InfoPlist.strings; sourceTree = ""; }; - 3FB03E5A0D1B6C17005958A5 /* French */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = French; path = French.lproj/InfoPlist.strings; sourceTree = ""; }; - 3FB03E5B0D1B6C17005958A5 /* German */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = German; path = German.lproj/InfoPlist.strings; sourceTree = ""; }; - 3FB03E5C0D1B6C17005958A5 /* Italian */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Italian; path = Italian.lproj/InfoPlist.strings; sourceTree = ""; }; - 3FB03E5D0D1B6C17005958A5 /* Japanese */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Japanese; path = Japanese.lproj/InfoPlist.strings; sourceTree = ""; }; - 3FB03E5E0D1B6C17005958A5 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/InfoPlist.strings; sourceTree = ""; }; - 3FB03E5F0D1B6C17005958A5 /* no */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = no; path = no.lproj/InfoPlist.strings; sourceTree = ""; }; - 3FB03E600D1B6C17005958A5 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; - 3FB03E610D1B6C17005958A5 /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/InfoPlist.strings; sourceTree = ""; }; - 3FB03E620D1B6C17005958A5 /* pt_PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt_PT; path = pt_PT.lproj/InfoPlist.strings; sourceTree = ""; }; - 3FB03E630D1B6C17005958A5 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = ""; }; - 3FB03E640D1B6C17005958A5 /* Spanish */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Spanish; path = Spanish.lproj/InfoPlist.strings; sourceTree = ""; }; - 3FB03E650D1B6C17005958A5 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/InfoPlist.strings; sourceTree = ""; }; - 3FB03E660D1B6C17005958A5 /* zh_CN */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = zh_CN; path = zh_CN.lproj/InfoPlist.strings; sourceTree = ""; }; - 3FB03E670D1B6C17005958A5 /* zh_TW */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = zh_TW; path = zh_TW.lproj/InfoPlist.strings; sourceTree = ""; }; - 3FB03E680D1B6C34005958A5 /* da */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = da; path = da.lproj/main.nib; sourceTree = ""; }; - 3FB03E690D1B6C34005958A5 /* Dutch */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = Dutch; path = Dutch.lproj/main.nib; sourceTree = ""; }; - 3FB03E6A0D1B6C34005958A5 /* fi */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = fi; path = fi.lproj/main.nib; sourceTree = ""; }; - 3FB03E6B0D1B6C34005958A5 /* French */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = French; path = French.lproj/main.nib; sourceTree = ""; }; - 3FB03E6C0D1B6C34005958A5 /* German */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = German; path = German.lproj/main.nib; sourceTree = ""; }; - 3FB03E6D0D1B6C34005958A5 /* Italian */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = Italian; path = Italian.lproj/main.nib; sourceTree = ""; }; - 3FB03E6E0D1B6C34005958A5 /* Japanese */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = Japanese; path = Japanese.lproj/main.nib; sourceTree = ""; }; - 3FB03E6F0D1B6C34005958A5 /* ko */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = ko; path = ko.lproj/main.nib; sourceTree = ""; }; - 3FB03E700D1B6C34005958A5 /* no */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = no; path = no.lproj/main.nib; sourceTree = ""; }; - 3FB03E710D1B6C34005958A5 /* pl */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = pl; path = pl.lproj/main.nib; sourceTree = ""; }; - 3FB03E720D1B6C34005958A5 /* pt */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = pt; path = pt.lproj/main.nib; sourceTree = ""; }; - 3FB03E730D1B6C34005958A5 /* pt_PT */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = pt_PT; path = pt_PT.lproj/main.nib; sourceTree = ""; }; - 3FB03E740D1B6C34005958A5 /* ru */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = ru; path = ru.lproj/main.nib; sourceTree = ""; }; - 3FB03E750D1B6C34005958A5 /* Spanish */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = Spanish; path = Spanish.lproj/main.nib; sourceTree = ""; }; - 3FB03E760D1B6C34005958A5 /* sv */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = sv; path = sv.lproj/main.nib; sourceTree = ""; }; - 3FB03E770D1B6C34005958A5 /* zh_CN */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = zh_CN; path = zh_CN.lproj/main.nib; sourceTree = ""; }; - 3FB03E780D1B6C34005958A5 /* zh_TW */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = zh_TW; path = zh_TW.lproj/main.nib; sourceTree = ""; }; - 50459C5F038587C60ECA21EC /* X11.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = X11.icns; sourceTree = ""; }; - 50EE2AB703849F0B0ECA21EC /* bundle-main.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = "bundle-main.c"; sourceTree = ""; }; - 50F4F0A7039D6ACA0E82C0CB /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; - 527F24260B5D938C007840A7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = Info.plist; sourceTree = ""; }; - 527F24270B5D938C007840A7 /* X11.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = X11.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 52880C6E0DCFF906003407EC /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Sparkle.framework; sourceTree = ""; }; - 52D9C0EC0BCDDF6B00CD2AFC /* English */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/Localizable.strings; sourceTree = ""; }; - 570C5748047186C400ACF82F /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = /System/Library/Frameworks/SystemConfiguration.framework; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 527F241E0B5D938C007840A7 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 527F241F0B5D938C007840A7 /* CoreFoundation.framework in Frameworks */, - 527F24200B5D938C007840A7 /* SystemConfiguration.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 195DF8CFFE9D517E11CA2CBB /* Products */ = { - isa = PBXGroup; - children = ( - 527F24270B5D938C007840A7 /* X11.app */, - ); - name = Products; - sourceTree = ""; - }; - 20286C29FDCF999611CA2CEA /* X11 */ = { - isa = PBXGroup; - children = ( - 20286C2AFDCF999611CA2CEA /* Sources */, - 20286C2CFDCF999611CA2CEA /* Resources */, - 20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */, - 195DF8CFFE9D517E11CA2CBB /* Products */, - 527F24260B5D938C007840A7 /* Info.plist */, - ); - name = X11; - sourceTree = ""; - }; - 20286C2AFDCF999611CA2CEA /* Sources */ = { - isa = PBXGroup; - children = ( - 50EE2AB703849F0B0ECA21EC /* bundle-main.c */, - ); - name = Sources; - sourceTree = ""; - }; - 20286C2CFDCF999611CA2CEA /* Resources */ = { - isa = PBXGroup; - children = ( - 52D9C0EB0BCDDF6B00CD2AFC /* Localizable.strings */, - 50459C5F038587C60ECA21EC /* X11.icns */, - 0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */, - 02345980000FD03B11CA0E72 /* main.nib */, - ); - name = Resources; - sourceTree = ""; - }; - 20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */ = { - isa = PBXGroup; - children = ( - 52880C6E0DCFF906003407EC /* Sparkle.framework */, - 50F4F0A7039D6ACA0E82C0CB /* CoreFoundation.framework */, - 570C5748047186C400ACF82F /* SystemConfiguration.framework */, - ); - name = "External Frameworks and Libraries"; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 527F24170B5D938C007840A7 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 527F24160B5D938C007840A7 /* X11 */ = { - isa = PBXNativeTarget; - buildConfigurationList = 527F24220B5D938C007840A7 /* Build configuration list for PBXNativeTarget "X11" */; - buildPhases = ( - 527F24170B5D938C007840A7 /* Headers */, - 52880C8C0DCFF9FC003407EC /* CopyFiles */, - 527F24180B5D938C007840A7 /* Resources */, - 527F241C0B5D938C007840A7 /* Sources */, - 527F241E0B5D938C007840A7 /* Frameworks */, - 527F24210B5D938C007840A7 /* Rez */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = X11; - productName = X11; - productReference = 527F24270B5D938C007840A7 /* X11.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 20286C28FDCF999611CA2CEA /* Project object */ = { - isa = PBXProject; - buildConfigurationList = 527F24080B5D8FFC007840A7 /* Build configuration list for PBXProject "X11" */; - compatibilityVersion = "Xcode 2.4"; - hasScannedForEncodings = 1; - knownRegions = ( - English, - Japanese, - French, - German, - da, - Dutch, - fi, - Italian, - ko, - no, - pl, - pt, - pt_PT, - ru, - Spanish, - sv, - zh_CN, - zh_TW, - ); - mainGroup = 20286C29FDCF999611CA2CEA /* X11 */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 527F24160B5D938C007840A7 /* X11 */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 527F24180B5D938C007840A7 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 527F24370B5D9D89007840A7 /* Info.plist in Resources */, - 527F24190B5D938C007840A7 /* InfoPlist.strings in Resources */, - 527F241A0B5D938C007840A7 /* main.nib in Resources */, - 527F241B0B5D938C007840A7 /* X11.icns in Resources */, - 52D9C0ED0BCDDF6B00CD2AFC /* Localizable.strings in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXRezBuildPhase section */ - 527F24210B5D938C007840A7 /* Rez */ = { - isa = PBXRezBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXRezBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 527F241C0B5D938C007840A7 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 527F241D0B5D938C007840A7 /* bundle-main.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 02345980000FD03B11CA0E72 /* main.nib */ = { - isa = PBXVariantGroup; - children = ( - 1870340FFE93FCAF11CA0CD7 /* English */, - 3FB03E680D1B6C34005958A5 /* da */, - 3FB03E690D1B6C34005958A5 /* Dutch */, - 3FB03E6A0D1B6C34005958A5 /* fi */, - 3FB03E6B0D1B6C34005958A5 /* French */, - 3FB03E6C0D1B6C34005958A5 /* German */, - 3FB03E6D0D1B6C34005958A5 /* Italian */, - 3FB03E6E0D1B6C34005958A5 /* Japanese */, - 3FB03E6F0D1B6C34005958A5 /* ko */, - 3FB03E700D1B6C34005958A5 /* no */, - 3FB03E710D1B6C34005958A5 /* pl */, - 3FB03E720D1B6C34005958A5 /* pt */, - 3FB03E730D1B6C34005958A5 /* pt_PT */, - 3FB03E740D1B6C34005958A5 /* ru */, - 3FB03E750D1B6C34005958A5 /* Spanish */, - 3FB03E760D1B6C34005958A5 /* sv */, - 3FB03E770D1B6C34005958A5 /* zh_CN */, - 3FB03E780D1B6C34005958A5 /* zh_TW */, - ); - name = main.nib; - sourceTree = ""; - }; - 0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - 0867D6ABFE840B52C02AAC07 /* English */, - 3FB03E570D1B6C17005958A5 /* da */, - 3FB03E580D1B6C17005958A5 /* Dutch */, - 3FB03E590D1B6C17005958A5 /* fi */, - 3FB03E5A0D1B6C17005958A5 /* French */, - 3FB03E5B0D1B6C17005958A5 /* German */, - 3FB03E5C0D1B6C17005958A5 /* Italian */, - 3FB03E5D0D1B6C17005958A5 /* Japanese */, - 3FB03E5E0D1B6C17005958A5 /* ko */, - 3FB03E5F0D1B6C17005958A5 /* no */, - 3FB03E600D1B6C17005958A5 /* pl */, - 3FB03E610D1B6C17005958A5 /* pt */, - 3FB03E620D1B6C17005958A5 /* pt_PT */, - 3FB03E630D1B6C17005958A5 /* ru */, - 3FB03E640D1B6C17005958A5 /* Spanish */, - 3FB03E650D1B6C17005958A5 /* sv */, - 3FB03E660D1B6C17005958A5 /* zh_CN */, - 3FB03E670D1B6C17005958A5 /* zh_TW */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; - 52D9C0EB0BCDDF6B00CD2AFC /* Localizable.strings */ = { - isa = PBXVariantGroup; - children = ( - 52D9C0EC0BCDDF6B00CD2AFC /* English */, - 3FB03E460D1B6C05005958A5 /* da */, - 3FB03E470D1B6C05005958A5 /* Dutch */, - 3FB03E480D1B6C05005958A5 /* fi */, - 3FB03E490D1B6C05005958A5 /* French */, - 3FB03E4A0D1B6C05005958A5 /* German */, - 3FB03E4B0D1B6C05005958A5 /* Italian */, - 3FB03E4C0D1B6C05005958A5 /* Japanese */, - 3FB03E4D0D1B6C05005958A5 /* ko */, - 3FB03E4E0D1B6C05005958A5 /* no */, - 3FB03E4F0D1B6C05005958A5 /* pl */, - 3FB03E500D1B6C05005958A5 /* pt */, - 3FB03E510D1B6C05005958A5 /* pt_PT */, - 3FB03E520D1B6C05005958A5 /* ru */, - 3FB03E530D1B6C05005958A5 /* Spanish */, - 3FB03E540D1B6C05005958A5 /* sv */, - 3FB03E550D1B6C05005958A5 /* zh_CN */, - 3FB03E560D1B6C05005958A5 /* zh_TW */, - ); - name = Localizable.strings; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 527F24090B5D8FFC007840A7 /* Development */ = { - isa = XCBuildConfiguration; - buildSettings = { - INSTALL_MODE_FLAG = "a+rX"; - }; - name = Development; - }; - 527F240A0B5D8FFC007840A7 /* Deployment */ = { - isa = XCBuildConfiguration; - buildSettings = { - INSTALL_MODE_FLAG = "a+rX"; - }; - name = Deployment; - }; - 527F240B0B5D8FFC007840A7 /* Default */ = { - isa = XCBuildConfiguration; - buildSettings = { - INSTALL_MODE_FLAG = "a+rX"; - }; - name = Default; - }; - 527F24230B5D938C007840A7 /* Development */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", - ); - FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)\""; - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - HEADER_SEARCH_PATHS = /usr/X11/include; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = /usr/X11; - LIBRARY_SEARCH_PATHS = /usr/X11/lib; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ( - "-lXau", - "-lxcb", - "-lX11", - ); - OTHER_REZFLAGS = ""; - PRODUCT_NAME = X11; - SECTORDER_FLAGS = ""; - WARNING_CFLAGS = ( - "-Wmost", - "-Wno-four-char-constants", - "-Wno-unknown-pragmas", - ); - WRAPPER_EXTENSION = app; - }; - name = Development; - }; - 527F24240B5D938C007840A7 /* Deployment */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", - ); - FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)\""; - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - HEADER_SEARCH_PATHS = /usr/X11/include; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = /usr/X11; - LIBRARY_SEARCH_PATHS = /usr/X11/lib; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ( - "-lXau", - "-lxcb", - "-lX11", - ); - OTHER_REZFLAGS = ""; - PRODUCT_NAME = X11; - SECTORDER_FLAGS = ""; - WARNING_CFLAGS = ( - "-Wmost", - "-Wno-four-char-constants", - "-Wno-unknown-pragmas", - ); - WRAPPER_EXTENSION = app; - }; - name = Deployment; - }; - 527F24250B5D938C007840A7 /* Default */ = { - isa = XCBuildConfiguration; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", - ); - FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)\""; - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - HEADER_SEARCH_PATHS = /usr/X11/include; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = /usr/X11; - LIBRARY_SEARCH_PATHS = /usr/X11/lib; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ( - "-lXau", - "-lxcb", - "-lX11", - ); - OTHER_REZFLAGS = ""; - PRODUCT_NAME = X11; - SECTORDER_FLAGS = ""; - WARNING_CFLAGS = ( - "-Wmost", - "-Wno-four-char-constants", - "-Wno-unknown-pragmas", - ); - WRAPPER_EXTENSION = app; - }; - name = Default; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 527F24080B5D8FFC007840A7 /* Build configuration list for PBXProject "X11" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 527F24090B5D8FFC007840A7 /* Development */, - 527F240A0B5D8FFC007840A7 /* Deployment */, - 527F240B0B5D8FFC007840A7 /* Default */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Default; - }; - 527F24220B5D938C007840A7 /* Build configuration list for PBXNativeTarget "X11" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 527F24230B5D938C007840A7 /* Development */, - 527F24240B5D938C007840A7 /* Deployment */, - 527F24250B5D938C007840A7 /* Default */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Default; - }; -/* End XCConfigurationList section */ - }; - rootObject = 20286C28FDCF999611CA2CEA /* Project object */; -} From 077ced6384abad78253e857091e78f3685965b9d Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Tue, 6 May 2008 02:47:03 -0700 Subject: [PATCH 37/66] XQuartz: Added uncommitted files (cherry picked from commit e414ec462cfc63f8eb7f504f526f5a2c73f51e69) --- hw/xquartz/bundle/PkgInfo | 1 + hw/xquartz/bundle/mk_bundke.sh | 35 ++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 hw/xquartz/bundle/PkgInfo create mode 100755 hw/xquartz/bundle/mk_bundke.sh diff --git a/hw/xquartz/bundle/PkgInfo b/hw/xquartz/bundle/PkgInfo new file mode 100644 index 000000000..b8e0aec42 --- /dev/null +++ b/hw/xquartz/bundle/PkgInfo @@ -0,0 +1 @@ +APPLx11a \ No newline at end of file diff --git a/hw/xquartz/bundle/mk_bundke.sh b/hw/xquartz/bundle/mk_bundke.sh new file mode 100755 index 000000000..4b79771dc --- /dev/null +++ b/hw/xquartz/bundle/mk_bundke.sh @@ -0,0 +1,35 @@ +#!/bin/sh +# +# 'Cause xcodebuild is hard to deal with + +BUNDLE_ROOT=$1 + +mkdir -p ${BUNDLE_ROOT}/Contents/MacOS +[ -d ${BUNDLE_ROOT}/Contents/MacOS ] || exit 1 + +mkdir -p ${BUNDLE_ROOT}/Contents/Resources/English.lproj/main.nib +[ -d ${BUNDLE_ROOT}/Contents/Resources/English.lproj/main.nib ] || exit 1 + +if [[ $(id -u) == 0 ]] ; then + OWNERSHIP="-o root -g admin" +else + OWNERSHIP="" +fi + +localities="Dutch English French German Italian Japanese Spanish da fi ko no pl pt pt_PT ru sv zh_CN zh_TW" +for lang in ${localities} ; do + for f in InfoPlist.strings Localizable.strings main.nib/keyedobjects.nib ; do + if [[ $(id -u) == 0 ]] ; then + install $(OWNERSHIP) -m 644 Resources/${lang}.lproj/$f ${BUNDLE_ROOT}/Contents/Resources/${lang}.lproj/${f} + else + install $(OWNERSHIP) -m 644 Resources/${lang}.lproj/$f ${BUNDLE_ROOT}/Contents/Resources/${lang}.lproj/${f} + fi + done +done + +install $(OWNERSHIP) -m 644 Resources/English.lproj/main.nib//designable.nib ${BUNDLE_ROOT}/Contents/Resources/English.lproj/main.nib +install $(OWNERSHIP) -m 644 Resources/X11.icns ${BUNDLE_ROOT}/Contents/Resources + +install $(OWNERSHIP) -m 644 Info.plist ${BUNDLE_ROOT}/Contents +install $(OWNERSHIP) -m 644 PkgInfo ${BUNDLE_ROOT}/Contents + From a85d3ac87cc354093bb1e88697c44254e7721bb9 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Tue, 6 May 2008 02:59:13 -0700 Subject: [PATCH 38/66] XQuartz: Fixed typo (cherry picked from commit 56b7988d2662caa4d31094695b414080e4470ed4) --- hw/xquartz/bundle/mk_bundke.sh | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/hw/xquartz/bundle/mk_bundke.sh b/hw/xquartz/bundle/mk_bundke.sh index 4b79771dc..750af9cea 100755 --- a/hw/xquartz/bundle/mk_bundke.sh +++ b/hw/xquartz/bundle/mk_bundke.sh @@ -20,16 +20,15 @@ localities="Dutch English French German Italian Japanese Spanish da fi ko no pl for lang in ${localities} ; do for f in InfoPlist.strings Localizable.strings main.nib/keyedobjects.nib ; do if [[ $(id -u) == 0 ]] ; then - install $(OWNERSHIP) -m 644 Resources/${lang}.lproj/$f ${BUNDLE_ROOT}/Contents/Resources/${lang}.lproj/${f} + install ${OWNERSHIP} -m 644 Resources/${lang}.lproj/$f ${BUNDLE_ROOT}/Contents/Resources/${lang}.lproj/${f} else - install $(OWNERSHIP) -m 644 Resources/${lang}.lproj/$f ${BUNDLE_ROOT}/Contents/Resources/${lang}.lproj/${f} + install ${OWNERSHIP} -m 644 Resources/${lang}.lproj/$f ${BUNDLE_ROOT}/Contents/Resources/${lang}.lproj/${f} fi done done -install $(OWNERSHIP) -m 644 Resources/English.lproj/main.nib//designable.nib ${BUNDLE_ROOT}/Contents/Resources/English.lproj/main.nib -install $(OWNERSHIP) -m 644 Resources/X11.icns ${BUNDLE_ROOT}/Contents/Resources - -install $(OWNERSHIP) -m 644 Info.plist ${BUNDLE_ROOT}/Contents -install $(OWNERSHIP) -m 644 PkgInfo ${BUNDLE_ROOT}/Contents +install ${OWNERSHIP} -m 644 Resources/English.lproj/main.nib//designable.nib ${BUNDLE_ROOT}/Contents/Resources/English.lproj/main.nib +install ${OWNERSHIP} -m 644 Resources/X11.icns ${BUNDLE_ROOT}/Contents/Resources +install ${OWNERSHIP} -m 644 Info.plist ${BUNDLE_ROOT}/Contents +install ${OWNERSHIP} -m 644 PkgInfo ${BUNDLE_ROOT}/Contents From 718652eaf9221e0eeec2c971dd7baa97f827451b Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Tue, 6 May 2008 17:52:37 -0400 Subject: [PATCH 39/66] Bug #13104: Don't let XAA glyph pixmaps anywhere near video memory. Since glyphs are stored in pixmaps now, they can make their way into VRAM, which invalidates a bunch of fast-path assumptions in the XAA code. Thus you end up doing color-expands or WriteBitmap from la-la land and your aliased glyphs go all funny. Since XAA isn't ever growing the ability to do sane glyph accel, just force glyph pixmaps into host memory by catching them at CreatePixmap time. --- hw/xfree86/xaa/xaaInit.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hw/xfree86/xaa/xaaInit.c b/hw/xfree86/xaa/xaaInit.c index 892cbcfc3..22a35a0a0 100644 --- a/hw/xfree86/xaa/xaaInit.c +++ b/hw/xfree86/xaa/xaaInit.c @@ -342,7 +342,9 @@ XAACreatePixmap(ScreenPtr pScreen, int w, int h, int depth, unsigned usage_hint) if (!infoRec->offscreenDepthsInitialized) XAAInitializeOffscreenDepths (pScreen); - if(pScrn->vtSema && (infoRec->offscreenDepths & (1 << (depth - 1))) && + if(pScrn->vtSema && + (usage_hint != CREATE_PIXMAP_USAGE_GLYPH_PICTURE) && + (infoRec->offscreenDepths & (1 << (depth - 1))) && (size >= MIN_OFFPIX_SIZE) && !SwitchedOut && (!infoRec->maxOffPixWidth || (w <= infoRec->maxOffPixWidth)) && (!infoRec->maxOffPixHeight || (h <= infoRec->maxOffPixHeight)) ) From b6a0c6d4864f73a18beb841b16e9be56f2fcd77e Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Tue, 6 May 2008 17:06:34 -0700 Subject: [PATCH 40/66] Allow using libmd instead of libcrypto for SHA1 hashing in render/glyph.c Builders can force one or the other by passing SHA1_LIB & SHA1_CFLAGS to configure --- configure.ac | 22 ++++++++++++++++------ include/dix-config.h.in | 3 +++ render/glyph.c | 17 +++++++++++++++-- 3 files changed, 34 insertions(+), 8 deletions(-) diff --git a/configure.ac b/configure.ac index 9b7753492..beef3a21e 100644 --- a/configure.ac +++ b/configure.ac @@ -1137,15 +1137,25 @@ PKG_CHECK_MODULES([XSERVERLIBS], [$REQUIRED_LIBS]) # OpenSSL used for SHA1 hashing in render/glyph.c, but we don't need all of # the OpenSSL libraries, just libcrypto -PKG_CHECK_EXISTS([openssl], - [PKG_CHECK_MODULES([OPENSSL], [openssl], +# Some systems have matching functionality in the smaller/simpler libmd +# Builders who want to force a choice can set SHA1_LIB and SHA1_CFLAGS +if test "x$SHA1_LIB" = "x" ; then + AC_CHECK_LIB([md], [SHA1Init], [SHA1_LIB="-lmd" + AC_DEFINE([HAVE_SHA1_IN_LIBMD], [1], + [Define to use libmd SHA1 functions instead of OpenSSL libcrypto])]) +fi +if test "x$SHA1_LIB" = "x" ; then + PKG_CHECK_EXISTS([openssl], + [PKG_CHECK_MODULES([OPENSSL], [openssl], [OPENSSL_LIB_FLAGS=`$PKG_CONFIG --libs-only-L --libs-only-other openssl`])]) -LIBCRYPTO="$OPENSSL_LIB_FLAGS -lcrypto" + SHA1_LIB="$OPENSSL_LIB_FLAGS -lcrypto" + SHA1_CFLAGS="$OPENSSL_CFLAGS" +fi # Autotools has some unfortunate issues with library handling. In order to # get a server to rebuild when a dependency in the tree is changed, it must # be listed in SERVERNAME_DEPENDENCIES. However, no system libraries may be -# listed there, or some versions of autotols will break (especially if a -L +# listed there, or some versions of autotools will break (especially if a -L # is required to find the library). So, we keep two sets of libraries # detected: NAMESPACE_LIBS for in-tree libraries to be linked against, which # will go into the _DEPENDENCIES and _LDADD of the server, and @@ -1157,9 +1167,9 @@ LIBCRYPTO="$OPENSSL_LIB_FLAGS -lcrypto" # XSERVER_SYS_LIBS is the set of out-of-tree libraries which all servers # require. # -XSERVER_CFLAGS="${XSERVERCFLAGS_CFLAGS} ${OPENSSL_CFLAGS}" +XSERVER_CFLAGS="${XSERVERCFLAGS_CFLAGS} ${SHA1_CFLAGS}" XSERVER_LIBS="$DIX_LIB $CONFIG_LIB $MI_LIB $OS_LIB" -XSERVER_SYS_LIBS="${XSERVERLIBS_LIBS} ${SYS_LIBS} ${LIBS} ${LIBCRYPTO}" +XSERVER_SYS_LIBS="${XSERVERLIBS_LIBS} ${SYS_LIBS} ${LIBS} ${SHA1_LIB}" AC_SUBST([XSERVER_LIBS]) AC_SUBST([XSERVER_SYS_LIBS]) diff --git a/include/dix-config.h.in b/include/dix-config.h.in index fc1caa31a..387f65aa1 100644 --- a/include/dix-config.h.in +++ b/include/dix-config.h.in @@ -193,6 +193,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_RPCSVC_DBM_H +/* Define to use libmd SHA1 functions instead of OpenSSL libcrypto */ +#undef HAVE_SHA1_IN_LIBMD + /* Define to 1 if you have the `shmctl64' function. */ #undef HAVE_SHMCTL64 diff --git a/render/glyph.c b/render/glyph.c index 286e39d63..de0197083 100644 --- a/render/glyph.c +++ b/render/glyph.c @@ -26,8 +26,12 @@ #include #endif -#include /* buggy openssl/sha.h wants size_t */ -#include +#ifdef HAVE_SHA1_IN_LIBMD /* Use libmd for SHA1 */ +# include +#else /* Use OpenSSL's libcrypto */ +# include /* buggy openssl/sha.h wants size_t */ +# include +#endif #include "misc.h" #include "scrnintstr.h" @@ -202,6 +206,14 @@ HashGlyph (xGlyphInfo *gi, unsigned long size, unsigned char sha1[20]) { +#ifdef HAVE_SHA1_IN_LIBMD /* Use libmd for SHA1 */ + SHA1_CTX ctx; + + SHA1Init (&ctx); + SHA1Update (&ctx, gi, sizeof (xGlyphInfo)); + SHA1Update (&ctx, bits, size); + SHA1Final (sha1, &ctx); +#else /* Use OpenSSL's libcrypto */ SHA_CTX ctx; int success; @@ -220,6 +232,7 @@ HashGlyph (xGlyphInfo *gi, success = SHA1_Final (sha1, &ctx); if (! success) return BadAlloc; +#endif return Success; } From 9c2e0871cfbe54e73eec1f790a7e383d08555055 Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Wed, 7 May 2008 13:21:26 -0400 Subject: [PATCH 41/66] Bug #13104: XAA: Adapt to glyph storage changes. Glyph bits are now stored in a proper pixmap, not just hanging off the end of a GlyphRec. --- hw/xfree86/xaa/xaaPict.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/xfree86/xaa/xaaPict.c b/hw/xfree86/xaa/xaaPict.c index 74e90e3b6..76fcf09ce 100644 --- a/hw/xfree86/xaa/xaaPict.c +++ b/hw/xfree86/xaa/xaaPict.c @@ -660,7 +660,7 @@ XAADoGlyphs (CARD8 op, pnt = pntr + (row * pitch) + (column >> 5); column &= 31; dwords = ((w + 31) >> 5) - 1; - bits = (CARD32*)(glyph + 1); + bits = (CARD32 *)GlyphPixmap(glyph)[pScreen->myNum]->devPrivate.ptr; if(dwords) { while(h--) { for(i = 0; i <= dwords; i++) { From 268d61e00cf4bc52c05f19eda7ab4f6accce12c8 Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Wed, 7 May 2008 22:28:45 +0300 Subject: [PATCH 42/66] GL: Make errors non-fatal GLX, there's more to the world than just you. If you fail to load the software renderer, don't bring the entire server down. The error path probably needs better testing on this one, but it seems mostly okay to me. --- GL/glx/glxext.c | 2 +- GL/glx/glxglcore.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/GL/glx/glxext.c b/GL/glx/glxext.c index 85d8debd4..1cbc27953 100644 --- a/GL/glx/glxext.c +++ b/GL/glx/glxext.c @@ -288,7 +288,7 @@ void GlxExtensionInit(void) __glXDispatch, ResetExtension, StandardMinorOpcode); if (!extEntry) { - FatalError("__glXExtensionInit: AddExtensions failed\n"); + ErrorF("__glXExtensionInit: AddExtensions failed\n"); return; } if (!AddExtensionAlias(GLX_EXTENSION_ALIAS, extEntry)) { diff --git a/GL/glx/glxglcore.c b/GL/glx/glxglcore.c index dafa9bca7..00279b73a 100644 --- a/GL/glx/glxglcore.c +++ b/GL/glx/glxglcore.c @@ -510,7 +510,7 @@ handle_error: xfree(screen); - FatalError("GLX: could not load software renderer\n"); + ErrorF("GLX: could not load software renderer\n"); return NULL; } From 641a5f955b7b3ae04eeb6bc45fb30b0b531898e4 Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Wed, 7 May 2008 22:29:04 +0300 Subject: [PATCH 43/66] Build: Ensure xf86DefModeSet.c ends in an empty line This shuts up a warning. --- hw/xfree86/common/Makefile.am | 1 + 1 file changed, 1 insertion(+) diff --git a/hw/xfree86/common/Makefile.am b/hw/xfree86/common/Makefile.am index 0f44075ba..c4be599f1 100644 --- a/hw/xfree86/common/Makefile.am +++ b/hw/xfree86/common/Makefile.am @@ -25,6 +25,7 @@ MODEDEFSOURCES = $(srcdir)/vesamodes $(srcdir)/extramodes xf86DefModeSet.c: $(srcdir)/modeline2c.awk $(MODEDEFSOURCES) cat $(MODEDEFSOURCES) | $(AWK) -f $(srcdir)/modeline2c.awk > $@ + echo >> $@ BUILT_SOURCES = xf86DefModeSet.c From cf20df39cc78203d17b99223908af388ecbf7d0e Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Wed, 7 May 2008 22:24:19 +0300 Subject: [PATCH 44/66] XKB: Actually explain keymap failures When something went wrong building a keymap, try to explain to the user what it actually was, instead of the dreaded 'Failed to load XKB keymap' catch-all. --- xkb/ddxLoad.c | 54 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/xkb/ddxLoad.c b/xkb/ddxLoad.c index d80ce62b8..1fb097987 100644 --- a/xkb/ddxLoad.c +++ b/xkb/ddxLoad.c @@ -274,7 +274,7 @@ char tmpname[PATH_MAX]; return True; } else - DebugF("Error compiling keymap (%s)\n",keymap); + LogMessage(X_ERROR, "Error compiling keymap (%s)\n", keymap); #ifdef WIN32 /* remove the temporary file */ unlink(tmpname); @@ -282,9 +282,9 @@ char tmpname[PATH_MAX]; } else { #ifndef WIN32 - DebugF("Could not invoke keymap compiler\n"); + LogMessage(X_ERROR, "XKB: Could not invoke xkbcomp\n"); #else - DebugF("Could not open file %s\n", tmpname); + LogMessage(X_ERROR, "Could not open file %s\n", tmpname); #endif } if (nameRtrn) @@ -350,11 +350,13 @@ unsigned missing; if ((names->keycodes==NULL)&&(names->types==NULL)&& (names->compat==NULL)&&(names->symbols==NULL)&& (names->geometry==NULL)) { + LogMessage(X_ERROR, "XKB: No components provided for device %s\n", + keybd->name); return 0; } else if (!XkbDDXCompileKeymapByNames(xkb,names,want,need, nameRtrn,nameRtrnLen)){ - DebugF("Couldn't compile keymap file\n"); + LogMessage(X_ERROR, "XKB: Couldn't compile keymap\n"); return 0; } file= XkbDDXOpenConfigFile(nameRtrn,fileName,PATH_MAX); @@ -369,7 +371,7 @@ unsigned missing; (void) unlink (fileName); return 0; } - else if (xkbDebugFlags) { + else { DebugF("Loaded XKB keymap %s, defined=0x%x\n",fileName,(*xkbRtrn)->defined); } fclose(file); @@ -390,32 +392,40 @@ XkbRF_RulesPtr rules; if (!rules_name) return False; - if (XkbBaseDirectory==NULL) { - if (strlen(rules_name)+7 > PATH_MAX) - return False; - sprintf(buf,"rules/%s",rules_name); + + if (strlen(XkbBaseDirectory) + strlen(rules_name) + 8 > PATH_MAX) { + LogMessage(X_ERROR, "XKB: Rules name is too long\n"); + return False; } - else { - if (strlen(XkbBaseDirectory)+strlen(rules_name)+8 > PATH_MAX) - return False; - sprintf(buf,"%s/rules/%s",XkbBaseDirectory,rules_name); - } - if ((file= fopen(buf,"r"))==NULL) + sprintf(buf,"%s/rules/%s", XkbBaseDirectory, rules_name); + + file = fopen(buf, "r"); + if (!file) { + LogMessage(X_ERROR, "XKB: Couldn't open rules file %s\n", file); return False; - if ((rules= XkbRF_Create(0,0))==NULL) { + } + + rules = XkbRF_Create(0, 0); + if (!rules) { + LogMessage(X_ERROR, "XKB: Couldn't create rules struct\n"); fclose(file); return False; } - if (!XkbRF_LoadRules(file,rules)) { + + if (!XkbRF_LoadRules(file, rules)) { + LogMessage(X_ERROR, "XKB: Couldn't parse rules file %s\n", rules_name); fclose(file); XkbRF_Free(rules,True); return False; } - bzero((char *)names,sizeof(XkbComponentNamesRec)); - complete= XkbRF_GetComponents(rules,defs,names); + + memset(names, 0, sizeof(*names)); + complete = XkbRF_GetComponents(rules,defs,names); fclose(file); - XkbRF_Free(rules,True); + XkbRF_Free(rules, True); + + if (!complete) + LogMessage(X_ERROR, "XKB: Rules returned no components\n"); + return complete; } - - From f17ba5d5849c92603f453195aca384844ca76d74 Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Thu, 8 May 2008 16:04:24 -0400 Subject: [PATCH 45/66] Bug #13104: Remove broken XAA a1 glyph fast path. --- hw/xfree86/xaa/xaaPict.c | 144 --------------------------------------- 1 file changed, 144 deletions(-) diff --git a/hw/xfree86/xaa/xaaPict.c b/hw/xfree86/xaa/xaaPict.c index 76fcf09ce..784c649a4 100644 --- a/hw/xfree86/xaa/xaaPict.c +++ b/hw/xfree86/xaa/xaaPict.c @@ -588,150 +588,6 @@ XAADoGlyphs (CARD8 op, IS_OFFSCREEN_PIXMAP(pSrc->pDrawable)) return FALSE; - if(maskFormat && (maskFormat->depth == 1) && - (pSrc->pDrawable->width == 1) && (pSrc->pDrawable->height == 1) && - (op == PictOpOver) && infoRec->WriteBitmap && - !(infoRec->WriteBitmapFlags & NO_TRANSPARENCY)) - { - CARD16 red, green, blue, alpha; - CARD32 pixel = - *((CARD32*)(((PixmapPtr)(pSrc->pDrawable))->devPrivate.ptr)); - CARD32 *bits, *pntr, *pnt; - int x, y, i, n, left, top, right, bottom, width, height, pitch; - int L, T, R, B, X, Y, h, w, dwords, row, column, nbox; - int leftEdge, rightEdge, topLine, botLine; - BoxPtr pbox; - GlyphPtr glyph; - - if(!XAAGetRGBAFromPixel(pixel,&red,&green,&blue,&alpha,pSrc->format)) - return FALSE; - - if(alpha != 0xffff) return FALSE; - - XAAGetPixelFromRGBA(&pixel, red, green, blue, 0, pDst->format); - - if((infoRec->WriteBitmapFlags & RGB_EQUAL) && !((red == green) && (green == blue))) - return FALSE; - - x = pDst->pDrawable->x; - y = pDst->pDrawable->y; - - while(nlist--) { - x += list->xOff; - y += list->yOff; - left = right = X = x; - top = bottom = Y = y; - for(i = 0; i < list->len; i++) { - glyph = glyphs[i]; - - L = X - glyph->info.x; - if(L < left) left = L; - R = L + glyph->info.width; - if(R > right) right = R; - - T = Y - glyph->info.y; - if(T < top) top = T; - B = T + glyph->info.height; - if(B > bottom) bottom = B; - - X += glyph->info.xOff; - Y += glyph->info.yOff; - } - - width = right - left; - height = bottom - top; - - if(width && height) { - pitch = (((width + 31) & ~31) >> 5) + 1; - pntr = (CARD32*)xalloc(sizeof(CARD32) * pitch * height); - if(!pntr) - return TRUE; - bzero(pntr, sizeof(CARD32) * pitch * height); - n = list->len; - - X = x; Y = y; - while(n--) { - glyph = *glyphs++; - h = glyph->info.height; - w = glyph->info.width; - if(h && w) { - row = y - top - glyph->info.y; - column = x - left - glyph->info.x; - pnt = pntr + (row * pitch) + (column >> 5); - column &= 31; - dwords = ((w + 31) >> 5) - 1; - bits = (CARD32 *)GlyphPixmap(glyph)[pScreen->myNum]->devPrivate.ptr; - if(dwords) { - while(h--) { - for(i = 0; i <= dwords; i++) { - if(column) { - pnt[i] |= SHIFT_L(*bits, column); - pnt[i + 1] |= SHIFT_R(*bits, 32 - column); - } else - pnt[i] |= *bits; - - if(i != dwords) bits++; - } - bits++; - pnt += pitch; - } - } else { - if(column) { - while(h--) { - pnt[0] |= SHIFT_L(*bits, column); - pnt[0 + 1] |= SHIFT_R(*bits, 32 - column); - bits++; - pnt += pitch; - } - } else { - while(h--) { - *pnt |= *bits++; - pnt += pitch; - } - } - } - } - x += glyph->info.xOff; - y += glyph->info.yOff; - } - - nbox = REGION_NUM_RECTS(pDst->pCompositeClip); - pbox = REGION_RECTS(pDst->pCompositeClip); - - while(nbox && (top >= pbox->y2)) { - pbox++; nbox--; - } - - while(nbox && (bottom > pbox->y1)) { - leftEdge = max(left, pbox->x1); - rightEdge = min(right, pbox->x2); - - if(rightEdge > leftEdge) { - column = leftEdge - left; - topLine = max(top, pbox->y1); - botLine = min(bottom, pbox->y2); - h = botLine - topLine; - - if(h > 0) { - (*infoRec->WriteBitmap)(infoRec->pScrn, - leftEdge, topLine, rightEdge - leftEdge, h, - (unsigned char*)(pntr + - ((topLine - top) * pitch) + (column >> 5)), - pitch << 2, column & 31, pixel, -1, GXcopy, ~0); - } - } - nbox--; pbox++; - } - xfree(pntr); - } else { - x = X; y = Y; - } - list++; - } - - return TRUE; - } - /* * If it looks like we have a chance of being able to draw these * glyphs with an accelerated Composite, do that now to avoid From 1c54c148895225e4ab3c781fe57d09e5f64353aa Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Fri, 9 May 2008 00:26:16 +0300 Subject: [PATCH 46/66] Revert "GL: Make errors non-fatal" Turns out this just caused segfaults further down the line. Oops. This reverts commit 268d61e00cf4bc52c05f19eda7ab4f6accce12c8. --- GL/glx/glxext.c | 2 +- GL/glx/glxglcore.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/GL/glx/glxext.c b/GL/glx/glxext.c index 1cbc27953..85d8debd4 100644 --- a/GL/glx/glxext.c +++ b/GL/glx/glxext.c @@ -288,7 +288,7 @@ void GlxExtensionInit(void) __glXDispatch, ResetExtension, StandardMinorOpcode); if (!extEntry) { - ErrorF("__glXExtensionInit: AddExtensions failed\n"); + FatalError("__glXExtensionInit: AddExtensions failed\n"); return; } if (!AddExtensionAlias(GLX_EXTENSION_ALIAS, extEntry)) { diff --git a/GL/glx/glxglcore.c b/GL/glx/glxglcore.c index 00279b73a..dafa9bca7 100644 --- a/GL/glx/glxglcore.c +++ b/GL/glx/glxglcore.c @@ -510,7 +510,7 @@ handle_error: xfree(screen); - ErrorF("GLX: could not load software renderer\n"); + FatalError("GLX: could not load software renderer\n"); return NULL; } From 901978ebe0f446532255701cd536e246e805a55b Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 8 May 2008 14:05:56 +0930 Subject: [PATCH 47/66] config: remove trailing whitespaces. It makes my vim look ugly. Put "let c_space_errors=1" into your .vimrc. (cherry picked from commit 1f54c05cf8a6b82e5fc6362f7f8e8fdc2444b9e8) --- config/hal.c | 52 ++++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/config/hal.c b/config/hal.c index f15064646..7794d8e8a 100644 --- a/config/hal.c +++ b/config/hal.c @@ -119,7 +119,7 @@ get_prop_string(LibHalContext *hal_ctx, const char *udi, const char *name) return ret; } -/* this function is no longer used... keep it here in case its needed in +/* this function is no longer used... keep it here in case its needed in * the future. */ #if 0 static char * @@ -155,7 +155,7 @@ get_prop_string_array(LibHalContext *hal_ctx, const char *udi, const char *prop) return ret; } -#endif +#endif static void device_added(LibHalContext *hal_ctx, const char *udi) @@ -164,12 +164,12 @@ device_added(LibHalContext *hal_ctx, const char *udi) InputOption *options = NULL, *tmpo = NULL; DeviceIntPtr dev; DBusError error; - + LibHalPropertySet *set = NULL; LibHalPropertySetIterator set_iter; char *psi_key = NULL, *tmp_val, *tmp_key; - - + + dbus_error_init(&error); driver = get_prop_string(hal_ctx, udi, "input.x11_driver"); @@ -178,13 +178,13 @@ device_added(LibHalContext *hal_ctx, const char *udi) LogMessageVerb(X_INFO,7,"config/hal: no driver specified for device %s\n", udi); goto unwind; } - + path = get_prop_string(hal_ctx, udi, "input.device"); if (!path) { LogMessage(X_WARNING,"config/hal: no driver or path specified for %s\n", udi); goto unwind; } - + name = get_prop_string(hal_ctx, udi, "info.product"); if (!name) name = xstrdup("(unnamed)"); @@ -194,7 +194,7 @@ device_added(LibHalContext *hal_ctx, const char *udi) LogMessage(X_ERROR, "config/hal: couldn't allocate space for input options!\n"); goto unwind; } - + options->key = xstrdup("_source"); options->value = xstrdup("server/hal"); if (!options->key || !options->value) { @@ -202,14 +202,14 @@ device_added(LibHalContext *hal_ctx, const char *udi) goto unwind; } - /* most drivers use device.. not path. evdev uses both however, but the + /* most drivers use device.. not path. evdev uses both however, but the * path version isn't documented apparently. support both for now. */ add_option(&options, "path", path); add_option(&options, "device", path); - + add_option(&options, "driver", driver); add_option(&options, "name", name); - + config_info = xalloc(strlen(udi) + 5); /* "hal:" and NULL */ if (!config_info) { LogMessage(X_ERROR, "config/hal: couldn't allocate name\n"); @@ -220,58 +220,58 @@ device_added(LibHalContext *hal_ctx, const char *udi) /* ok, grab options from hal.. iterate through all properties * and lets see if any of them are options that we can add */ set = libhal_device_get_all_properties(hal_ctx, udi, &error); - + if (!set) { LogMessage(X_ERROR, "config/hal: couldn't get property list for %s: %s (%s)\n", udi, error.name, error.message); goto unwind; } - + libhal_psi_init(&set_iter,set); while (libhal_psi_has_more(&set_iter)) { /* we are looking for supported keys.. extract and add to options */ - psi_key = libhal_psi_get_key(&set_iter); - + psi_key = libhal_psi_get_key(&set_iter); + if (psi_key){ /* normal options first (input.x11_options.) */ if (!strncasecmp(psi_key, LIBHAL_PROP_KEY, sizeof(LIBHAL_PROP_KEY)-1)){ - + /* only support strings for all values */ tmp_val = get_prop_string(hal_ctx, udi, psi_key); - + if (tmp_val){ add_option(&options, psi_key + sizeof(LIBHAL_PROP_KEY)-1, tmp_val); xfree(tmp_val); } - + /* evdev's XKB options... we should probably depreciate this usage */ } else if (!strncasecmp(psi_key, LIBHAL_XKB_PROP_KEY, sizeof(LIBHAL_XKB_PROP_KEY)-1)){ - + /* only support strings for all values */ tmp_val = get_prop_string(hal_ctx, udi, psi_key); - + if (tmp_val){ /* add "xkb_" + NULL */ tmp_key = xalloc(strlen(psi_key) - ( sizeof(LIBHAL_XKB_PROP_KEY) - 1) + 5); - + if (!tmp_key){ LogMessage(X_ERROR, "config/hal: couldn't allocate memory for option %s\n", psi_key); } else { sprintf(tmp_key, "xkb_%s", psi_key + sizeof(LIBHAL_XKB_PROP_KEY)-1); add_option(&options, tmp_key, tmp_val); - + xfree(tmp_key); } xfree(tmp_val); - } + } } } - + /* psi_key doesn't need to be freed */ libhal_psi_next(&set_iter); } - + /* this isn't an error, but how else do you output something that the user can see? */ LogMessage(X_INFO, "config/hal: Adding input device %s\n", name); if (NewInputDeviceRequest(options, &dev) != Success) { @@ -413,7 +413,7 @@ config_hal_init(void) /* verbose message */ LogMessageVerb(X_INFO,7,"config/hal: initialized"); - + return 1; } From ff013b0da4e6d33b2b69ce1212e9bd62050574e1 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 8 May 2008 16:58:31 +0930 Subject: [PATCH 48/66] config: override xkb_{r,m,l,v} with Xkb{r,m,l,v} if the latter is set. The HAL spec says that input.xkb.{rmlv}* can be sent, but if the user specifies a X-specific {rmlv}, then this is overridden through the use of input.x11_options.Xkb{RMLV}. However, the way how the server parses options--by ignoring capitalisation, underscores and spaces--the HAL and the x11_options would override each other. So we simply filter the options, letting Xkb{RMLV} override xkb_{rmlv} and only actually add them to the device after parsing _all_ options. * rmlv ... rules, model, layout, variant See Bug 13037 (cherry picked from commit fc35d1e3be201e3821413bb2eeb8d43e1e56ba17) --- config/hal.c | 100 ++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 87 insertions(+), 13 deletions(-) diff --git a/config/hal.c b/config/hal.c index 7794d8e8a..67ffa0304 100644 --- a/config/hal.c +++ b/config/hal.c @@ -48,6 +48,15 @@ struct config_hal_info { LibHalContext *hal_ctx; }; +/* Used for special handling of xkb options. */ +struct xkb_options { + char* layout; + char* model; + char* rules; + char* variant; +}; + + static void remove_device(DeviceIntPtr dev) { @@ -164,10 +173,11 @@ device_added(LibHalContext *hal_ctx, const char *udi) InputOption *options = NULL, *tmpo = NULL; DeviceIntPtr dev; DBusError error; + struct xkb_options xkb_opts = {0}; LibHalPropertySet *set = NULL; LibHalPropertySetIterator set_iter; - char *psi_key = NULL, *tmp_val, *tmp_key; + char *psi_key = NULL, *tmp_val; dbus_error_init(&error); @@ -241,27 +251,71 @@ device_added(LibHalContext *hal_ctx, const char *udi) tmp_val = get_prop_string(hal_ctx, udi, psi_key); if (tmp_val){ - add_option(&options, psi_key + sizeof(LIBHAL_PROP_KEY)-1, tmp_val); - xfree(tmp_val); - } + char* tmp; - /* evdev's XKB options... we should probably depreciate this usage */ + /* xkb needs special handling. HAL specs include + * input.xkb.xyz options, but the x11-input.fdi specifies + * input.x11_options.Xkbxyz options. By default, we use + * the former, unless the specific X11 ones are specified. + * Since we can't predict the order in which the keys + * arrive, we need to store them. + */ + if ((tmp = strcasestr(psi_key, "xkb"))) + { + if (!strcasecmp(&tmp[3], "layout")) + { + if (xkb_opts.layout) + xfree(xkb_opts.layout); + xkb_opts.layout = strdup(tmp_val); + } else if (!strcasecmp(&tmp[3], "model")) + { + if (xkb_opts.model) + xfree(xkb_opts.model); + xkb_opts.model = strdup(tmp_val); + } else if (!strcasecmp(&tmp[3], "rules")) + { + if (xkb_opts.rules) + xfree(xkb_opts.rules); + xkb_opts.rules = strdup(tmp_val); + } else if (!strcasecmp(&tmp[3], "variant")) + { + if (xkb_opts.variant) + xfree(xkb_opts.variant); + xkb_opts.variant = strdup(tmp_val); + } + } else + { + /* all others */ + add_option(&options, psi_key + sizeof(LIBHAL_PROP_KEY)-1, tmp_val); + xfree(tmp_val); + } + } } else if (!strncasecmp(psi_key, LIBHAL_XKB_PROP_KEY, sizeof(LIBHAL_XKB_PROP_KEY)-1)){ /* only support strings for all values */ tmp_val = get_prop_string(hal_ctx, udi, psi_key); if (tmp_val){ - /* add "xkb_" + NULL */ - tmp_key = xalloc(strlen(psi_key) - ( sizeof(LIBHAL_XKB_PROP_KEY) - 1) + 5); + char* tmp; - if (!tmp_key){ - LogMessage(X_ERROR, "config/hal: couldn't allocate memory for option %s\n", psi_key); - } else { - sprintf(tmp_key, "xkb_%s", psi_key + sizeof(LIBHAL_XKB_PROP_KEY)-1); - add_option(&options, tmp_key, tmp_val); + tmp = &psi_key[sizeof(LIBHAL_XKB_PROP_KEY) - 1]; - xfree(tmp_key); + if (!strcasecmp(tmp, "layout")) + { + if (!xkb_opts.layout) + xkb_opts.layout = strdup(tmp_val); + } else if (!strcasecmp(tmp, "rules")) + { + if (!xkb_opts.rules) + xkb_opts.rules = strdup(tmp_val); + } else if (!strcasecmp(tmp, "variant")) + { + if (!xkb_opts.variant) + xkb_opts.variant = strdup(tmp_val); + } else if (!strcasecmp(tmp, "model")) + { + if (!xkb_opts.model) + xkb_opts.model = strdup(tmp_val); } xfree(tmp_val); } @@ -272,6 +326,17 @@ device_added(LibHalContext *hal_ctx, const char *udi) libhal_psi_next(&set_iter); } + + /* Now add xkb options */ + if (xkb_opts.layout) + add_option(&options, "xkb_layout", xkb_opts.layout); + if (xkb_opts.rules) + add_option(&options, "xkb_rules", xkb_opts.rules); + if (xkb_opts.variant) + add_option(&options, "xkb_variant", xkb_opts.variant); + if (xkb_opts.model) + add_option(&options, "xkb_model", xkb_opts.model); + /* this isn't an error, but how else do you output something that the user can see? */ LogMessage(X_INFO, "config/hal: Adding input device %s\n", name); if (NewInputDeviceRequest(options, &dev) != Success) { @@ -304,6 +369,15 @@ unwind: xfree(tmpo); } + if (xkb_opts.layout) + xfree(xkb_opts.layout); + if (xkb_opts.rules) + xfree(xkb_opts.rules); + if (xkb_opts.model) + xfree(xkb_opts.model); + if (xkb_opts.variant) + xfree(xkb_opts.variant); + dbus_error_free(&error); return; From 90b963c0da2b33bdc21483f1a089b95c7e717333 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Tue, 6 May 2008 16:07:33 -0700 Subject: [PATCH 49/66] Set CSRG_BASED on OSX (cherry picked from commit ff085deba18682caa2f93d61a75b38db87d747b1) --- configure.ac | 3 +++ 1 file changed, 3 insertions(+) diff --git a/configure.ac b/configure.ac index beef3a21e..9671adaa9 100644 --- a/configure.ac +++ b/configure.ac @@ -402,6 +402,9 @@ case $host_os in *solaris*) PKG_CHECK_EXISTS(libdrm, DRI=yes, DRI=no) ;; + darwin*) + AC_DEFINE(CSRG_BASED, 1, [System is BSD-like]) + ;; esac AM_CONDITIONAL(KDRIVE_HW, test "x$KDRIVE_HW" = xyes) From 05f23ed3ea6ee0f052aee41b6573325fe0063fd8 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Tue, 6 May 2008 16:12:41 -0700 Subject: [PATCH 50/66] XQuartz: Fixed some issue in our bundle creation (cherry picked from commit 330ffad5477e32c5ab9ed338bc628bd5ae9f4c98) --- hw/xquartz/bundle/mk_bundke.sh | 33 ++++++++++++--------------------- 1 file changed, 12 insertions(+), 21 deletions(-) diff --git a/hw/xquartz/bundle/mk_bundke.sh b/hw/xquartz/bundle/mk_bundke.sh index 750af9cea..0b2a14433 100755 --- a/hw/xquartz/bundle/mk_bundke.sh +++ b/hw/xquartz/bundle/mk_bundke.sh @@ -4,31 +4,22 @@ BUNDLE_ROOT=$1 -mkdir -p ${BUNDLE_ROOT}/Contents/MacOS -[ -d ${BUNDLE_ROOT}/Contents/MacOS ] || exit 1 - -mkdir -p ${BUNDLE_ROOT}/Contents/Resources/English.lproj/main.nib -[ -d ${BUNDLE_ROOT}/Contents/Resources/English.lproj/main.nib ] || exit 1 - -if [[ $(id -u) == 0 ]] ; then - OWNERSHIP="-o root -g admin" -else - OWNERSHIP="" -fi - localities="Dutch English French German Italian Japanese Spanish da fi ko no pl pt pt_PT ru sv zh_CN zh_TW" for lang in ${localities} ; do + mkdir -p ${BUNDLE_ROOT}/Contents/Resources/${lang}.lproj/main.nib + [ -d ${BUNDLE_ROOT}/Contents/Resources/${lang}.lproj/main.nib ] || exit 1 + for f in InfoPlist.strings Localizable.strings main.nib/keyedobjects.nib ; do - if [[ $(id -u) == 0 ]] ; then - install ${OWNERSHIP} -m 644 Resources/${lang}.lproj/$f ${BUNDLE_ROOT}/Contents/Resources/${lang}.lproj/${f} - else - install ${OWNERSHIP} -m 644 Resources/${lang}.lproj/$f ${BUNDLE_ROOT}/Contents/Resources/${lang}.lproj/${f} - fi + install -m 644 Resources/${lang}.lproj/$f ${BUNDLE_ROOT}/Contents/Resources/${lang}.lproj/${f} done done -install ${OWNERSHIP} -m 644 Resources/English.lproj/main.nib//designable.nib ${BUNDLE_ROOT}/Contents/Resources/English.lproj/main.nib -install ${OWNERSHIP} -m 644 Resources/X11.icns ${BUNDLE_ROOT}/Contents/Resources +install -m 644 Resources/English.lproj/main.nib//designable.nib ${BUNDLE_ROOT}/Contents/Resources/English.lproj/main.nib +install -m 644 Resources/X11.icns ${BUNDLE_ROOT}/Contents/Resources -install ${OWNERSHIP} -m 644 Info.plist ${BUNDLE_ROOT}/Contents -install ${OWNERSHIP} -m 644 PkgInfo ${BUNDLE_ROOT}/Contents +install -m 644 Info.plist ${BUNDLE_ROOT}/Contents +install -m 644 PkgInfo ${BUNDLE_ROOT}/Contents + +if [[ $(id -u) == 0 ]] ; then + chown -R root:admin ${BUNDLE_ROOT} +fi From a07c5ad172b343ef26d2b41ff25f143950441c23 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Thu, 8 May 2008 16:57:42 -0700 Subject: [PATCH 51/66] XQuartz: Set bundle version to 2.3.0 (cherry picked from commit 8a0524b30e1e860f3ae35741c116fc8da28aef79) --- hw/xquartz/bundle/Info.plist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/xquartz/bundle/Info.plist b/hw/xquartz/bundle/Info.plist index 6ba02dda2..4b0830f0e 100644 --- a/hw/xquartz/bundle/Info.plist +++ b/hw/xquartz/bundle/Info.plist @@ -19,7 +19,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 2.2.0 + 2.3.0 CFBundleSignature x11a CSResourcesFileMapped From 28ac79450c69219dc501e072c6e5028e7136380d Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Thu, 8 May 2008 19:47:40 -0700 Subject: [PATCH 52/66] Updated .gitignore for new Xquartz layout (cherry picked from commit cd4d2355e227549a3410485a130549dd91ccdcfe) --- .gitignore | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index a6925d98f..d6d7adfd1 100644 --- a/.gitignore +++ b/.gitignore @@ -278,8 +278,9 @@ hw/xprint/doc/Xprt.1x hw/xprint/doc/Xprt.man hw/xprint/dpmsstubs-wrapper.c hw/xprint/miinitext-wrapper.c -hw/xquartz/xpr/Xquartz -hw/xquartz/xpr/Xquartz.1 +hw/xquartz/mach-startup/X11 +hw/xquartz/mach-startup/Xquartz +hw/xquartz/doc/Xquartz.1 include/dix-config.h include/kdrive-config.h include/xgl-config.h From 315f089056da67d4c463ed002eb2b74e38493b49 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Thu, 8 May 2008 19:46:03 -0700 Subject: [PATCH 53/66] XQuartz: Reorganized some of the build system in prep for the Mach IPC startup work. (cherry picked from commit 2232c91d5c277673929eab2abb5e0495c00877cb) --- configure.ac | 3 +- hw/xquartz/Makefile.am | 3 +- hw/xquartz/bundle/Makefile.am | 1 - hw/xquartz/doc/Makefile.am | 14 ++++++++ hw/xquartz/{xpr => doc}/Xquartz.man.pre | 0 hw/xquartz/mach-startup/Makefile.am | 34 +++++++++++++++++++ .../{bundle => mach-startup}/bundle-main.c | 0 hw/xquartz/{stub => mach-startup}/stub.c | 0 hw/xquartz/stub/Makefile.am | 11 ------ hw/xquartz/xpr/Makefile.am | 34 ++----------------- 10 files changed, 53 insertions(+), 47 deletions(-) create mode 100644 hw/xquartz/doc/Makefile.am rename hw/xquartz/{xpr => doc}/Xquartz.man.pre (100%) create mode 100644 hw/xquartz/mach-startup/Makefile.am rename hw/xquartz/{bundle => mach-startup}/bundle-main.c (100%) rename hw/xquartz/{stub => mach-startup}/stub.c (100%) delete mode 100644 hw/xquartz/stub/Makefile.am diff --git a/configure.ac b/configure.ac index 9671adaa9..99b10e36d 100644 --- a/configure.ac +++ b/configure.ac @@ -2164,7 +2164,8 @@ hw/xwin/Makefile hw/xquartz/Makefile hw/xquartz/GL/Makefile hw/xquartz/bundle/Makefile -hw/xquartz/stub/Makefile +hw/xquartz/doc/Makefile +hw/xquartz/mach-startup/Makefile hw/xquartz/xpr/Makefile hw/kdrive/Makefile hw/kdrive/ati/Makefile diff --git a/hw/xquartz/Makefile.am b/hw/xquartz/Makefile.am index bbd21f816..77d662f97 100644 --- a/hw/xquartz/Makefile.am +++ b/hw/xquartz/Makefile.am @@ -9,12 +9,11 @@ AM_CPPFLAGS = \ -DXFree86Server \ -I$(top_srcdir)/miext/rootless -SUBDIRS = bundle . GL xpr stub +SUBDIRS = bundle . GL xpr mach-startup doc libXquartz_la_SOURCES = \ $(top_srcdir)/fb/fbcmap_mi.c \ $(top_srcdir)/mi/miinitext.c \ - bundle/bundle-main.c \ X11Application.m \ X11Controller.m \ applewm.c \ diff --git a/hw/xquartz/bundle/Makefile.am b/hw/xquartz/bundle/Makefile.am index c61b0490c..a8f45f8d5 100644 --- a/hw/xquartz/bundle/Makefile.am +++ b/hw/xquartz/bundle/Makefile.am @@ -7,7 +7,6 @@ resource_DATA = Xquartz.plist EXTRA_DIST = \ mk_bundke.sh \ $(resource_DATA) \ - bundle-main.c \ Resources/da.lproj/InfoPlist.strings \ Resources/da.lproj/Localizable.strings \ Resources/da.lproj/main.nib/keyedobjects.nib \ diff --git a/hw/xquartz/doc/Makefile.am b/hw/xquartz/doc/Makefile.am new file mode 100644 index 000000000..b812af1cb --- /dev/null +++ b/hw/xquartz/doc/Makefile.am @@ -0,0 +1,14 @@ +appmandir = $(APP_MAN_DIR) +appman_PRE = Xquartz.man.pre +appman_PROCESSED = $(appman_PRE:man.pre=man) +appman_DATA = $(appman_PRE:man.pre=@APP_MAN_SUFFIX@) + +CLEANFILES = $(appman_PROCESSED) $(appman_DATA) + +include $(top_srcdir)/cpprules.in + +.man.$(APP_MAN_SUFFIX): + cp $< $@ + +EXTRA_DIST = \ + Xquartz.man.pre diff --git a/hw/xquartz/xpr/Xquartz.man.pre b/hw/xquartz/doc/Xquartz.man.pre similarity index 100% rename from hw/xquartz/xpr/Xquartz.man.pre rename to hw/xquartz/doc/Xquartz.man.pre diff --git a/hw/xquartz/mach-startup/Makefile.am b/hw/xquartz/mach-startup/Makefile.am new file mode 100644 index 000000000..966871126 --- /dev/null +++ b/hw/xquartz/mach-startup/Makefile.am @@ -0,0 +1,34 @@ +AM_CPPFLAGS = \ + -DBUILD_DATE=\"$(BUILD_DATE)\" \ + -DXSERVER_VERSION=\"$(VERSION)\" + +x11appdir = $(APPLE_APPLICATIONS_DIR)/X11.app/Contents/MacOS +x11app_PROGRAMS = X11 + +X11_SOURCES = \ + bundle-main.c + +X11_LDADD = \ + $(top_builddir)/hw/xquartz/libXquartz.la \ + $(top_builddir)/hw/xquartz/xpr/libXquartzXpr.la \ + $(top_builddir)/dix/dixfonts.lo \ + $(top_builddir)/miext/rootless/librootless.la \ + $(DARWIN_LIBS) $(XSERVER_LIBS) $(XSERVER_SYS_LIBS) -lXplugin -lX11 + +X11_LDFLAGS = \ + -XCClinker -Objc \ + -Wl,-u,_miDCInitialize \ + -Wl,-framework,Carbon \ + -L/System/Library/Frameworks/OpenGL.framework/Libraries -lGL \ + -Wl,-framework,OpenGL \ + -Wl,-framework,Cocoa \ + -Wl,-framework,CoreAudio \ + -Wl,-framework,IOKit + +bin_PROGRAMS = Xquartz + +Xquartz_SOURCES = \ + stub.c + +Xquartz_LDFLAGS = \ + -Wl,-framework,CoreServices diff --git a/hw/xquartz/bundle/bundle-main.c b/hw/xquartz/mach-startup/bundle-main.c similarity index 100% rename from hw/xquartz/bundle/bundle-main.c rename to hw/xquartz/mach-startup/bundle-main.c diff --git a/hw/xquartz/stub/stub.c b/hw/xquartz/mach-startup/stub.c similarity index 100% rename from hw/xquartz/stub/stub.c rename to hw/xquartz/mach-startup/stub.c diff --git a/hw/xquartz/stub/Makefile.am b/hw/xquartz/stub/Makefile.am deleted file mode 100644 index 3752dc111..000000000 --- a/hw/xquartz/stub/Makefile.am +++ /dev/null @@ -1,11 +0,0 @@ -AM_CPPFLAGS = \ - -DBUILD_DATE=\"$(BUILD_DATE)\" \ - -DXSERVER_VERSION=\"$(VERSION)\" - -bin_PROGRAMS = Xquartz - -Xquartz_SOURCES = \ - stub.c - -Xquartz_LDFLAGS = \ - -framework CoreServices diff --git a/hw/xquartz/xpr/Makefile.am b/hw/xquartz/xpr/Makefile.am index 6bf99a402..e74580f73 100644 --- a/hw/xquartz/xpr/Makefile.am +++ b/hw/xquartz/xpr/Makefile.am @@ -1,5 +1,4 @@ -x11appdir = $(APPLE_APPLICATIONS_DIR)/X11.app/Contents/MacOS -x11app_PROGRAMS = X11 +noinst_LTLIBRARIES = libXquartzXpr.la AM_CFLAGS = $(XSERVER_CFLAGS) $(DIX_CFLAGS) AM_CPPFLAGS = \ @@ -7,7 +6,7 @@ AM_CPPFLAGS = \ -I$(top_srcdir)/miext \ -I$(top_srcdir)/miext/rootless -X11_SOURCES = \ +libXquartzXpr_la_SOURCES = \ appledri.c \ dri.c \ xprAppleWM.c \ @@ -19,36 +18,7 @@ X11_SOURCES = \ x-hook.c \ x-list.c -X11_LDADD = \ - $(top_builddir)/hw/xquartz/libXquartz.la \ - $(top_builddir)/dix/dixfonts.lo \ - $(top_builddir)/miext/rootless/librootless.la \ - $(DARWIN_LIBS) $(XSERVER_LIBS) $(XSERVER_SYS_LIBS) -lXplugin -lX11 - -X11_LDFLAGS = \ - -XCClinker -Objc \ - -Wl,-u,_miDCInitialize \ - -Wl,-framework,Carbon \ - -L/System/Library/Frameworks/OpenGL.framework/Libraries -lGL \ - -Wl,-framework,OpenGL \ - -Wl,-framework,Cocoa \ - -Wl,-framework,CoreAudio \ - -Wl,-framework,IOKit - -appmandir = $(APP_MAN_DIR) -appman_PRE = Xquartz.man.pre -appman_PROCESSED = $(appman_PRE:man.pre=man) -appman_DATA = $(appman_PRE:man.pre=@APP_MAN_SUFFIX@) - -CLEANFILES = $(appman_PROCESSED) $(appman_DATA) - -include $(top_srcdir)/cpprules.in - -.man.$(APP_MAN_SUFFIX): - cp $< $@ - EXTRA_DIST = \ - Xquartz.man.pre \ dri.h \ dristruct.h \ appledri.h \ From 2a3d1421e0cc18822ae8f478fcc272e16a9e9340 Mon Sep 17 00:00:00 2001 From: Drew Parsons Date: Fri, 9 May 2008 23:20:11 +1000 Subject: [PATCH 54/66] Disable D-BUS from Xprint. Use dummy config functions to replace those from config/config.c, and therefore do not link Xprt with $CONFIG_LIB. Works around an endlessly spinning loop in dix/dispatch.c::Dispatch() (WaitForSomething() not waiting) when built with dbus, which was causing Xprt to use 95% cpu. --- configure.ac | 2 +- hw/xprint/ddxInit.c | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index f695551e4..64fd94601 100644 --- a/configure.ac +++ b/configure.ac @@ -1610,7 +1610,7 @@ AC_MSG_RESULT([$XPRINT]) if test "x$XPRINT" = xyes; then PKG_CHECK_MODULES([XPRINTMODULES], [printproto x11 xfont $XDMCP_MODULES xau]) XPRINT_CFLAGS="$XPRINTMODULES_CFLAGS -DXPRINT" - XPRINT_LIBS="$XEXT_LIB $CONFIG_LIB $DBE_LIB $XTRAP_LIB $RECORD_LIB $RENDER_LIB $COMPOSITE_LIB $RANDR_LIB $XI_LIB $FIXES_LIB $DAMAGE_LIB $XI_LIB $GLX_LIBS $MIEXT_DAMAGE_LIB $XKB_LIB $XKB_STUB_LIB" + XPRINT_LIBS="$XEXT_LIB $DBE_LIB $XTRAP_LIB $RECORD_LIB $RENDER_LIB $COMPOSITE_LIB $RANDR_LIB $XI_LIB $FIXES_LIB $DAMAGE_LIB $XI_LIB $GLX_LIBS $MIEXT_DAMAGE_LIB $XKB_LIB $XKB_STUB_LIB" XPRINT_SYS_LIBS="$XPRINTMODULES_LIBS" xpconfigdir=$libdir/X11/xserver diff --git a/hw/xprint/ddxInit.c b/hw/xprint/ddxInit.c index d744121aa..795052120 100644 --- a/hw/xprint/ddxInit.c +++ b/hw/xprint/ddxInit.c @@ -291,6 +291,12 @@ ddxProcessArgument ( #include "XIstubs.h" #include "exglobals.h" +/* Place dummy config functions here instead of config/config.c, + since Xprint does not use D-BUS */ +void config_init() { } +void config_fini() { } + + int ChangePointerDevice ( DeviceIntPtr old_dev, From 1a01e96c6d15ef17a8b5ab1afa361fb12476a25e Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Fri, 9 May 2008 15:38:44 -0700 Subject: [PATCH 55/66] Return a valid X error when stuck in font alias loop Part of fix for Sun bug 4258475 --- dix/dixfonts.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/dix/dixfonts.c b/dix/dixfonts.c index e9a3f3963..6fb29de3a 100644 --- a/dix/dixfonts.c +++ b/dix/dixfonts.c @@ -302,8 +302,14 @@ doOpenFont(ClientPtr client, OFclosurePtr c) c->fontname = newname; c->fnamelen = newlen; c->current_fpe = 0; - if (--aliascount <= 0) + if (--aliascount <= 0) { + /* We've tried resolving this alias 20 times, we're + * probably stuck in an infinite loop of aliases pointing + * to each other - time to take emergency exit! + */ + err = BadImplementation; break; + } continue; } if (err == BadFontName) { From 9dfb525f6c91acab5d1a65765a046bf9ee2aa082 Mon Sep 17 00:00:00 2001 From: Julien Cristau Date: Sun, 11 May 2008 23:17:27 +0200 Subject: [PATCH 56/66] kdrive: allow disabling Composite KdInitOutput() used to enable Composite when it was disabled by default, but now this hack prevents ``-extension Composite'' from working. Remove it, as Composite is enabled by default anyway. --- hw/kdrive/src/kdrive.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/hw/kdrive/src/kdrive.c b/hw/kdrive/src/kdrive.c index 50148c49c..e2ee4adea 100644 --- a/hw/kdrive/src/kdrive.c +++ b/hw/kdrive/src/kdrive.c @@ -1353,12 +1353,6 @@ KdInitOutput (ScreenInfo *pScreenInfo, KdCardInfo *card; KdScreenInfo *screen; -#ifdef COMPOSITE - /* kind of a hack: we want Composite enabled, but it's disabled per - * default. */ - noCompositeExtension = FALSE; -#endif - if (!kdCardInfo) { InitCard (0); From 3b6735528efc6d69ab7a7cd63dd09c87db7ef115 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Mon, 12 May 2008 16:36:42 +1000 Subject: [PATCH 57/66] pci: don't do this pci stuff when we don't have hw access --- hw/xfree86/common/xf86Init.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c index 68dc38772..851f4dc49 100644 --- a/hw/xfree86/common/xf86Init.c +++ b/hw/xfree86/common/xf86Init.c @@ -632,10 +632,10 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv) /* * Locate bus slot that had register IO enabled at server startup */ - - xf86AccessInit(); - xf86FindPrimaryDevice(); - + if (xorgHWAccess) { + xf86AccessInit(); + xf86FindPrimaryDevice(); + } /* * Now call each of the Probe functions. Each successful probe will * result in an extra entry added to the xf86Screens[] list for each From 7e768c08f7809b8dba4db1931e63314e2b6e1cfa Mon Sep 17 00:00:00 2001 From: James Cloos Date: Mon, 12 May 2008 02:53:59 -0400 Subject: [PATCH 58/66] Clean up whitespace --- composite/compwindow.c | 70 +++++++++++++++++++++--------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/composite/compwindow.c b/composite/compwindow.c index c022027db..9c999173c 100644 --- a/composite/compwindow.c +++ b/composite/compwindow.c @@ -54,7 +54,7 @@ compCheckWindow (WindowPtr pWin, pointer data) PixmapPtr pWinPixmap = (*pScreen->GetWindowPixmap) (pWin); PixmapPtr pParentPixmap = pWin->parent ? (*pScreen->GetWindowPixmap) (pWin->parent) : 0; PixmapPtr pScreenPixmap = (*pScreen->GetScreenPixmap) (pScreen); - + if (!pWin->parent) { assert (pWin->redirectDraw == RedirectDrawNone); @@ -122,7 +122,7 @@ compSetPixmapVisitWindow (WindowPtr pWindow, pointer data) SetWinSize (pWindow); SetBorderSize (pWindow); if (HasBorder (pWindow)) - QueueWorkProc (compRepaintBorder, serverClient, + QueueWorkProc (compRepaintBorder, serverClient, (pointer) pWindow->drawable.id); return WT_WALKCHILDREN; } @@ -147,14 +147,14 @@ compCheckRedirect (WindowPtr pWin) should = pWin->realized && (pWin->drawable.class != InputOnly) && (cw != NULL); - + /* Never redirect the overlay window */ if (cs->pOverlayWin != NULL) { if (pWin == cs->pOverlayWin) { should = FALSE; } - } - + } + if (should != (pWin->redirectDraw != RedirectDrawNone)) { if (should) @@ -276,10 +276,10 @@ compClipNotify (WindowPtr pWin, int dx, int dy) ScreenPtr pScreen = pWin->drawable.pScreen; CompScreenPtr cs = GetCompScreen (pScreen); CompWindowPtr cw = GetCompWindow (pWin); - + if (cw) { - if (cw->borderClipX != pWin->drawable.x || + if (cw->borderClipX != pWin->drawable.x || cw->borderClipY != pWin->drawable.y) { REGION_TRANSLATE (pScreen, &cw->borderClip, @@ -324,7 +324,7 @@ compImplicitRedirect (WindowPtr pWin, WindowPtr pParent) ScreenPtr pScreen = pWin->drawable.pScreen; XID winVisual = wVisual (pWin); XID parentVisual = wVisual (pParent); - + if (winVisual != parentVisual && (compIsAlternateVisual (pScreen, winVisual) || compIsAlternateVisual (pScreen, parentVisual))) @@ -345,11 +345,11 @@ compMoveWindow (WindowPtr pWin, int x, int y, WindowPtr pSib, VTKind kind) WindowPtr pParent; int draw_x, draw_y; unsigned int w, h, bw; - + /* if this is a root window, can't be moved */ if (!(pParent = pWin->parent)) return; - + bw = wBorderWidth (pWin); draw_x = pParent->drawable.x + x + (int)bw; draw_y = pParent->drawable.y + y + (int)bw; @@ -390,18 +390,18 @@ compResizeWindow (WindowPtr pWin, int x, int y, WindowPtr pParent; int draw_x, draw_y; unsigned int bw; - + /* if this is a root window, can't be moved */ if (!(pParent = pWin->parent)) return; - + bw = wBorderWidth (pWin); draw_x = pParent->drawable.x + x + (int)bw; draw_y = pParent->drawable.y + y + (int)bw; compReallocPixmap (pWin, draw_x, draw_y, w, h, bw); } compCheckTree (pScreen); - + pScreen->ResizeWindow = cs->ResizeWindow; (*pScreen->ResizeWindow) (pWin, x, y, w, h, pSib); cs->ResizeWindow = pScreen->ResizeWindow; @@ -430,11 +430,11 @@ compChangeBorderWidth (WindowPtr pWin, unsigned int bw) WindowPtr pParent; int draw_x, draw_y; unsigned int w, h; - + /* if this is a root window, can't be moved */ if (!(pParent = pWin->parent)) return; - + draw_x = pWin->drawable.x; draw_y = pWin->drawable.y; w = pWin->drawable.width; @@ -481,13 +481,13 @@ compReparentWindow (WindowPtr pWin, WindowPtr pPriorParent) */ if (compImplicitRedirect (pWin, pWin->parent)) compRedirectWindow (serverClient, pWin, CompositeRedirectAutomatic); - + /* * Allocate any necessary redirect pixmap * (this actually should never be true; pWin is always unmapped) */ compCheckRedirect (pWin); - + /* * Reset pixmap pointers as appropriate */ @@ -514,7 +514,7 @@ compCopyWindow (WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc) { PixmapPtr pPixmap = (*pScreen->GetWindowPixmap) (pWin); CompWindowPtr cw = GetCompWindow (pWin); - + assert (cw->oldx != COMP_ORIGIN_INVALID); assert (cw->oldy != COMP_ORIGIN_INVALID); if (cw->pOldPixmap) @@ -526,7 +526,7 @@ compCopyWindow (WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc) RegionRec rgnDst; PixmapPtr pPixmap = (*pScreen->GetWindowPixmap) (pWin); GCPtr pGC; - + dx = ptOldOrg.x - pWin->drawable.x; dy = ptOldOrg.y - pWin->drawable.y; REGION_TRANSLATE(pWin->drawable.pScreen, prgnSrc, -dx, -dy); @@ -535,10 +535,10 @@ compCopyWindow (WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc) REGION_INTERSECT(pWin->drawable.pScreen, &rgnDst, &pWin->borderClip, prgnSrc); - - REGION_TRANSLATE (pWin->drawable.pScreen, &rgnDst, + + REGION_TRANSLATE (pWin->drawable.pScreen, &rgnDst, -pPixmap->screen_x, -pPixmap->screen_y); - + dx = dx + pPixmap->screen_x - cw->oldx; dy = dy + pPixmap->screen_y - cw->oldy; pGC = GetScratchGC (pPixmap->drawable.depth, pScreen); @@ -546,7 +546,7 @@ compCopyWindow (WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc) { BoxPtr pBox = REGION_RECTS (&rgnDst); int nBox = REGION_NUM_RECTS (&rgnDst); - + ValidateGC(&pPixmap->drawable, pGC); while (nBox--) { @@ -568,7 +568,7 @@ compCopyWindow (WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc) ptOldOrg.x += dx; ptOldOrg.y += dy; } - + pScreen->CopyWindow = cs->CopyWindow; if (ptOldOrg.x != pWin->drawable.x || ptOldOrg.y != pWin->drawable.y) { @@ -634,7 +634,7 @@ compDestroyWindow (WindowPtr pWin) FreeResource (cw->clients->id, RT_NONE); while ((csw = GetCompSubwindows (pWin))) FreeResource (csw->clients->id, RT_NONE); - + if (pWin->redirectDraw != RedirectDrawNone) compFreePixmap (pWin); ret = (*pScreen->DestroyWindow) (pWin); @@ -699,7 +699,7 @@ PictFormatPtr compWindowFormat (WindowPtr pWin) { ScreenPtr pScreen = pWin->drawable.pScreen; - + return PictureMatchVisual (pScreen, pWin->drawable.depth, compGetWindowVisual (pWin)); } @@ -716,24 +716,24 @@ compWindowUpdateAutomatic (WindowPtr pWin) int error; RegionPtr pRegion = DamageRegion (cw->damage); PicturePtr pSrcPicture = CreatePicture (0, &pSrcPixmap->drawable, - pSrcFormat, + pSrcFormat, 0, 0, serverClient, &error); XID subwindowMode = IncludeInferiors; PicturePtr pDstPicture = CreatePicture (0, &pParent->drawable, pDstFormat, - CPSubwindowMode, + CPSubwindowMode, &subwindowMode, serverClient, &error); - + /* * First move the region from window to screen coordinates */ - REGION_TRANSLATE (pScreen, pRegion, + REGION_TRANSLATE (pScreen, pRegion, pWin->drawable.x, pWin->drawable.y); - + /* * Clip against the "real" border clip */ @@ -742,14 +742,14 @@ compWindowUpdateAutomatic (WindowPtr pWin) /* * Now translate from screen to dest coordinates */ - REGION_TRANSLATE (pScreen, pRegion, + REGION_TRANSLATE (pScreen, pRegion, -pParent->drawable.x, -pParent->drawable.y); - + /* * Clip the picture */ SetPictureClipRegion (pDstPicture, 0, 0, pRegion); - + /* * And paint */ @@ -813,7 +813,7 @@ CompositeRealChildHead (WindowPtr pWin) if (!pChild) { return NullWindow; } - + cs = GetCompScreen(pWin->drawable.pScreen); if (pChild == cs->pOverlayWin) { return pChild; From 04211c3532ca078420e3745a5eac3d9de120bc32 Mon Sep 17 00:00:00 2001 From: James Cloos Date: Mon, 12 May 2008 03:03:13 -0400 Subject: [PATCH 59/66] Prevent the -wm command line option from causing a SEGV MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The -wm (when mapped) option for the BackingStore support has been causing the server to dereference a NULL pointer. This has probably been the case since backing store has been implemented on top of Composite. It looks like (some of?) Composite didn’t expect its WIndowPtr argument to be the root window. In Composite’s compCheckRedirect() function we now avoid calling compAllocPixmap() and compFreePixmap() when the pWin pointer’s parent member is NULL, as is it the case with a server’s root window. This addresses: https://bugs.freedesktop.org/show_bug.cgi?id=15878 --- composite/compwindow.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composite/compwindow.c b/composite/compwindow.c index 9c999173c..c1657bdcd 100644 --- a/composite/compwindow.c +++ b/composite/compwindow.c @@ -146,7 +146,7 @@ compCheckRedirect (WindowPtr pWin) Bool should; should = pWin->realized && (pWin->drawable.class != InputOnly) && - (cw != NULL); + (cw != NULL) && (pWin->parent != NULL); /* Never redirect the overlay window */ if (cs->pOverlayWin != NULL) { From a7800d9355377ac02833613c2ffc2423beec9970 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Fri, 9 May 2008 16:44:31 -0700 Subject: [PATCH 60/66] XQuartz: Starting to work on the new Mach IPC startup stuff for better launchd, ApplicationServices, and Dock support (cherry picked from commit 9b67fca9b7d3050d3d5582a5210270db7eb2ed05) --- .gitignore | 4 + hw/xquartz/mach-startup/Makefile.am | 28 +++- hw/xquartz/mach-startup/bundle-main.c | 157 ++++++++++++++++++- hw/xquartz/mach-startup/mach_startup.defs | 41 +++++ hw/xquartz/mach-startup/mach_startup_types.h | 8 + 5 files changed, 232 insertions(+), 6 deletions(-) create mode 100644 hw/xquartz/mach-startup/mach_startup.defs create mode 100644 hw/xquartz/mach-startup/mach_startup_types.h diff --git a/.gitignore b/.gitignore index d6d7adfd1..13d5de4fd 100644 --- a/.gitignore +++ b/.gitignore @@ -278,6 +278,10 @@ hw/xprint/doc/Xprt.1x hw/xprint/doc/Xprt.man hw/xprint/dpmsstubs-wrapper.c hw/xprint/miinitext-wrapper.c +hw/xquartz/mach-startup/mach_startup.h +hw/xquartz/mach-startup/mach_startupServer.c +hw/xquartz/mach-startup/mach_startupServer.h +hw/xquartz/mach-startup/mach_startupUser.c hw/xquartz/mach-startup/X11 hw/xquartz/mach-startup/Xquartz hw/xquartz/doc/Xquartz.1 diff --git a/hw/xquartz/mach-startup/Makefile.am b/hw/xquartz/mach-startup/Makefile.am index 966871126..ee2cbfe9e 100644 --- a/hw/xquartz/mach-startup/Makefile.am +++ b/hw/xquartz/mach-startup/Makefile.am @@ -5,9 +5,13 @@ AM_CPPFLAGS = \ x11appdir = $(APPLE_APPLICATIONS_DIR)/X11.app/Contents/MacOS x11app_PROGRAMS = X11 -X11_SOURCES = \ +dist_X11_SOURCES = \ bundle-main.c +nodist_X11_SOURCES = \ + mach_startupServer.c \ + mach_startupUser.c + X11_LDADD = \ $(top_builddir)/hw/xquartz/libXquartz.la \ $(top_builddir)/hw/xquartz/xpr/libXquartzXpr.la \ @@ -27,8 +31,28 @@ X11_LDFLAGS = \ bin_PROGRAMS = Xquartz -Xquartz_SOURCES = \ +dist_Xquartz_SOURCES = \ stub.c +nodist_Xquartz_SOURCES = \ + mach_startupUser.c + Xquartz_LDFLAGS = \ -Wl,-framework,CoreServices + +BUILT_SOURCES = \ + mach_startupServer.c \ + mach_startupUser.c \ + mach_startupServer.h \ + mach_startup.h + +CLEANFILES = \ + $(BUILT_SOURCES) + +$(BUILT_SOURCES): mach_startup.defs + mig -sheader mach_startupServer.h mach_startup.defs + +EXTRA_DIST = \ + mach_startup.defs \ + mach_startup_types.h + diff --git a/hw/xquartz/mach-startup/bundle-main.c b/hw/xquartz/mach-startup/bundle-main.c index 042fa3ab8..24b67d871 100644 --- a/hw/xquartz/mach-startup/bundle-main.c +++ b/hw/xquartz/mach-startup/bundle-main.c @@ -33,9 +33,16 @@ #include #include #include +#include #include +#include +#include +#include +#include "mach_startup.h" +#include "mach_startupServer.h" + #define DEFAULT_CLIENT "/usr/X11/bin/xterm" #define DEFAULT_STARTX "/usr/X11/bin/startx" #define DEFAULT_SHELL "/bin/sh" @@ -43,12 +50,146 @@ static int execute(const char *command); static char *command_from_prefs(const char *key, const char *default_value); +/* This is in quartzStartup.c */ int server_main(int argc, char **argv, char **envp); +struct arg { + int argc; + char **argv; + char **envp; +}; + +/*** Mach-O IPC Stuffs ***/ + +union MaxMsgSize { + union __RequestUnion__mach_startup_subsystem req; + union __ReplyUnion__mach_startup_subsystem rep; +}; + +kern_return_t do_start_x11_server(mach_port_t port, string_array_t argv, + mach_msg_type_number_t argvCnt, + string_array_t envp, + mach_msg_type_number_t envpCnt) { + if(server_main(argvCnt, argv, envp) == 0) + return KERN_SUCCESS; + else + return KERN_FAILURE; +} + +kern_return_t do_exit(mach_port_t port, int value) { + exit(value); +} + +static mach_port_t checkin_or_register(char *bname) { + kern_return_t kr; + mach_port_t mp; + + /* If we're started by launchd or the old mach_init */ + kr = bootstrap_check_in(bootstrap_port, bname, &mp); + if (kr == KERN_SUCCESS) + return mp; + + /* We probably were not started by launchd or the old mach_init */ + kr = mach_port_allocate(mach_task_self(), MACH_PORT_RIGHT_RECEIVE, &mp); + if (kr != KERN_SUCCESS) { + fprintf(stderr, "mach_port_allocate(): %s\n", mach_error_string(kr)); + exit(EXIT_FAILURE); + } + + kr = mach_port_insert_right(mach_task_self(), mp, mp, MACH_MSG_TYPE_MAKE_SEND); + if (kr != KERN_SUCCESS) { + fprintf(stderr, "mach_port_insert_right(): %s\n", mach_error_string(kr)); + exit(EXIT_FAILURE); + } + + kr = bootstrap_register(bootstrap_port, bname, mp); + if (kr != KERN_SUCCESS) { + fprintf(stderr, "bootstrap_register(): %s\n", mach_error_string(kr)); + exit(EXIT_FAILURE); + } + + return mp; +} + +/*** Pthread Magics ***/ +static pthread_t create_thread(void *func, void *arg) { + pthread_attr_t attr; + pthread_t tid; + + pthread_attr_init (&attr); + pthread_attr_setscope (&attr, PTHREAD_SCOPE_SYSTEM); + pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED); + pthread_create (&tid, &attr, func, arg); + pthread_attr_destroy (&attr); + + return tid; +} + +/*** Main ***/ +static int execute(const char *command); +static char *command_from_prefs(const char *key, const char *default_value); + +#ifdef NEW_LAUNCH_METHOD +static void startup_trigger_thread(void *arg) { + struct arg args = *((struct arg *)arg); + free(arg); + startup_trigger(args.argc, args.argv, args.envp); +} + int main(int argc, char **argv, char **envp) { + BOOL listenOnly = FALSE; + int i; + + for(i=1; i < argc; i++) { + if(!strcmp(argv[i], "--listenonly")) { + listenOnly = TRUE; + break; + } + } + + /* Check if we need to do something other than listen, and make another + * thread handle it. + */ + if(!listenOnly) { + struct arg *args = (struct arg*)malloc(sizeof(struct arg)); + if(!args) + FatalError("Could not allocate memory.\n"); + + args->argc = argc; + args->argv = argv; + args->envp = envp; + + create_thread(startup_trigger_thread, args); + } else { + /* TODO: This should actually fall through rather than be the else + * case once we figure out how to get the stub to pass the + * file descriptor. For now, we only listen if we are explicitly + * told to. + */ + + mach_msg_size_t mxmsgsz = sizeof(union MaxMsgSize) + MAX_TRAILER_SIZE; + mach_port_t mp = checkin_or_register(SERVER_BOOTSTRAP_NAME); + kern_return_t kr; + + /* Main event loop */ + kr = mach_msg_server(mach_startup_server, mxmsgsz, mp, 0); + if (kr != KERN_SUCCESS) { + asl_log(NULL, NULL, ASL_LEVEL_ERR, + "org.x.X11(mp): %s\n", mach_error_string(kr)); + exit(EXIT_FAILURE); + } + } + + return EXIT_SUCCESS; +} + +int startup_trigger(int argc, char **argv, char **envp) { +#else +int main(int argc, char **argv, char **envp) { +#endif Display *display; const char *s; - + size_t i; fprintf(stderr, "X11.app: main(): argc=%d\n", argc); for(i=0; i < argc; i++) { @@ -57,7 +198,15 @@ int main(int argc, char **argv, char **envp) { /* Take care of the case where we're called like a normal DDX */ if(argc > 1 && argv[1][0] == ':') { - exit(server_main(argc, argv, envp)); +#ifdef NEW_LAUNCH_METHOD + /* We need to count envp */ + int envpc; + for(envpc=0; envp[envpc]; envpc++); + + return start_x11_server(argc, argv, envp, envpc); +#else + return server_main(argc, argv, envp); +#endif } /* If we have a process serial number and it's our only arg, act as if @@ -70,7 +219,7 @@ int main(int argc, char **argv, char **envp) { fprintf(stderr, "X11.app: Closing the display and sleeping for 2s to allow the X server to start up.\n"); /* Could open the display, start the launcher */ XCloseDisplay(display); - + /* Give 2 seconds for the server to start... * TODO: *Really* fix this race condition */ @@ -78,7 +227,7 @@ int main(int argc, char **argv, char **envp) { return execute(command_from_prefs("app_to_run", DEFAULT_CLIENT)); } } - + /* Start the server */ if((s = getenv("DISPLAY"))) { fprintf(stderr, "X11.app: Could not connect to server (DISPLAY=\"%s\", unsetting). Starting X server.\n", s); diff --git a/hw/xquartz/mach-startup/mach_startup.defs b/hw/xquartz/mach-startup/mach_startup.defs new file mode 100644 index 000000000..83b31b7c0 --- /dev/null +++ b/hw/xquartz/mach-startup/mach_startup.defs @@ -0,0 +1,41 @@ +/* Copyright (c) 2008 Apple Inc. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT + * HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name(s) of the above + * copyright holders shall not be used in advertising or otherwise to + * promote the sale, use or other dealings in this Software without + * prior written authorization. + */ + +#include +#include +import "mach_startup_types.h"; + +subsystem mach_startup 1000; +serverprefix do_; + +type string_array_t = array[] of c_string[1024]; + +routine start_x11_server( + port : mach_port_t; + argv : string_array_t; + envp : string_array_t); diff --git a/hw/xquartz/mach-startup/mach_startup_types.h b/hw/xquartz/mach-startup/mach_startup_types.h new file mode 100644 index 000000000..03939af97 --- /dev/null +++ b/hw/xquartz/mach-startup/mach_startup_types.h @@ -0,0 +1,8 @@ +#ifndef _MACH_STARTUP_TYPES_H_ +#define _MACH_STARTUP_TYPES_H_ + +#define SERVER_BOOTSTRAP_NAME "org.x.X11" + +typedef char ** string_array_t; + +#endif From ac4e33a9cd0ca2f0ec76181d11d5b90b82690c05 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Mon, 12 May 2008 09:27:27 -0700 Subject: [PATCH 61/66] XQuartz: More startup work... listen if we're the actual server (cherry picked from commit 3b0afb47c3d8ad922cb2315ed8034f4d77d4a249) --- hw/xquartz/mach-startup/bundle-main.c | 33 +++++++++++++++------------ 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/hw/xquartz/mach-startup/bundle-main.c b/hw/xquartz/mach-startup/bundle-main.c index 24b67d871..b0ff9df5b 100644 --- a/hw/xquartz/mach-startup/bundle-main.c +++ b/hw/xquartz/mach-startup/bundle-main.c @@ -139,6 +139,9 @@ static void startup_trigger_thread(void *arg) { int main(int argc, char **argv, char **envp) { BOOL listenOnly = FALSE; int i; + mach_msg_size_t mxmsgsz = sizeof(union MaxMsgSize) + MAX_TRAILER_SIZE; + mach_port_t mp; + kern_return_t kr; for(i=1; i < argc; i++) { if(!strcmp(argv[i], "--listenonly")) { @@ -147,6 +150,11 @@ int main(int argc, char **argv, char **envp) { } } + /* TODO: This should be unconditional once we figure out fd passing */ + if((argc > 1 && argv[1][0] == ':') || listenOnly) { + mp = checkin_or_register(SERVER_BOOTSTRAP_NAME); + } + /* Check if we need to do something other than listen, and make another * thread handle it. */ @@ -154,23 +162,20 @@ int main(int argc, char **argv, char **envp) { struct arg *args = (struct arg*)malloc(sizeof(struct arg)); if(!args) FatalError("Could not allocate memory.\n"); - + args->argc = argc; args->argv = argv; args->envp = envp; create_thread(startup_trigger_thread, args); - } else { - /* TODO: This should actually fall through rather than be the else - * case once we figure out how to get the stub to pass the - * file descriptor. For now, we only listen if we are explicitly - * told to. - */ + } - mach_msg_size_t mxmsgsz = sizeof(union MaxMsgSize) + MAX_TRAILER_SIZE; - mach_port_t mp = checkin_or_register(SERVER_BOOTSTRAP_NAME); - kern_return_t kr; - + /* TODO: This should actually fall through rather than be the else + * case once we figure out how to get the stub to pass the + * file descriptor. For now, we only listen if we are explicitly + * told to. + */ + if((argc > 1 && argv[1][0] == ':') || listenOnly) { /* Main event loop */ kr = mach_msg_server(mach_startup_server, mxmsgsz, mp, 0); if (kr != KERN_SUCCESS) { @@ -179,7 +184,7 @@ int main(int argc, char **argv, char **envp) { exit(EXIT_FAILURE); } } - + return EXIT_SUCCESS; } @@ -208,7 +213,7 @@ int main(int argc, char **argv, char **envp) { return server_main(argc, argv, envp); #endif } - + /* If we have a process serial number and it's our only arg, act as if * the user double clicked the app bundle: launch app_to_run if possible */ @@ -227,7 +232,7 @@ int main(int argc, char **argv, char **envp) { return execute(command_from_prefs("app_to_run", DEFAULT_CLIENT)); } } - + /* Start the server */ if((s = getenv("DISPLAY"))) { fprintf(stderr, "X11.app: Could not connect to server (DISPLAY=\"%s\", unsetting). Starting X server.\n", s); From f9fae16456c30479b0cb9317e57200af36795785 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Mon, 12 May 2008 10:36:44 -0700 Subject: [PATCH 62/66] XQuartz: Added some version checking protection so we don't trigger an infinite exec loop with new /usr/X11/bin/Xquartz and older X11.app (cherry picked from commit 78032815aeb10c22ff45b49702e9c9df82ab471c) --- hw/xquartz/bundle/Info.plist | 4 +++ hw/xquartz/mach-startup/stub.c | 46 +++++++++++++++++++++++++--------- 2 files changed, 38 insertions(+), 12 deletions(-) diff --git a/hw/xquartz/bundle/Info.plist b/hw/xquartz/bundle/Info.plist index 4b0830f0e..30bb3c891 100644 --- a/hw/xquartz/bundle/Info.plist +++ b/hw/xquartz/bundle/Info.plist @@ -20,6 +20,10 @@ APPL CFBundleShortVersionString 2.3.0 + CFBundleVersion + 2.3.0 + CFBundleVersionString + 2.3.0 CFBundleSignature x11a CSResourcesFileMapped diff --git a/hw/xquartz/mach-startup/stub.c b/hw/xquartz/mach-startup/stub.c index 70f222c27..3be5f6568 100644 --- a/hw/xquartz/mach-startup/stub.c +++ b/hw/xquartz/mach-startup/stub.c @@ -43,33 +43,55 @@ static char x11_path[PATH_MAX + 1]; static void set_x11_path() { CFURLRef appURL = NULL; + CFBundleRef bundle = NULL; OSStatus osstatus = LSFindApplicationForInfo(kLSUnknownCreator, CFSTR(kX11AppBundleId), nil, nil, &appURL); - + UInt32 ver; + switch (osstatus) { case noErr: if (appURL == NULL) { - fprintf(stderr, "xinit: Invalid response from LSFindApplicationForInfo(%s)\n", + fprintf(stderr, "Xquartz: Invalid response from LSFindApplicationForInfo(%s)\n", kX11AppBundleId); exit(1); } - - if (!CFURLGetFileSystemRepresentation(appURL, true, (unsigned char *)x11_path, sizeof(x11_path))) { - fprintf(stderr, "xinit: Error resolving URL for %s\n", kX11AppBundleId); - exit(2); + + bundle = CFBundleCreate(NULL, appURL); + if(!bundle) { + fprintf(stderr, "Xquartz: Null value returned from CFBundleCreate().\n"); + exit(2); } - + + if (!CFURLGetFileSystemRepresentation(appURL, true, (unsigned char *)x11_path, sizeof(x11_path))) { + fprintf(stderr, "Xquartz: Error resolving URL for %s\n", kX11AppBundleId); + exit(3); + } + + ver = CFBundleGetVersionNumber(bundle); + if(ver < 0x02308000) { + CFStringRef versionStr = CFBundleGetValueForInfoDictionaryKey(bundle, kCFBundleVersionKey); + const char * versionCStr = "Unknown"; + + if(versionStr) + versionCStr = CFStringGetCStringPtr(versionStr, kCFStringEncodingMacRoman); + + fprintf(stderr, "Xquartz: Could not find a new enough X11.app LSFindApplicationForInfo() returned\n"); + fprintf(stderr, " X11.app = %s\n", x11_path); + fprintf(stderr, " Version = %s (%x), Expected Version > 2.3.0\n", versionCStr, (unsigned)ver); + exit(9); + } + strlcat(x11_path, kX11AppBundlePath, sizeof(x11_path)); #ifdef DEBUG - fprintf(stderr, "XQuartz: X11.app = %s\n", x11_path); + fprintf(stderr, "Xquartz: X11.app = %s\n", x11_path); #endif break; case kLSApplicationNotFoundErr: - fprintf(stderr, "XQuartz: Unable to find application for %s\n", kX11AppBundleId); - exit(4); + fprintf(stderr, "Xquartz: Unable to find application for %s\n", kX11AppBundleId); + exit(10); default: - fprintf(stderr, "XQuartz: Unable to find application for %s, error code = %d\n", + fprintf(stderr, "Xquartz: Unable to find application for %s, error code = %d\n", kX11AppBundleId, (int)osstatus); - exit(5); + exit(11); } } From 1c8bd318fbaf65890ef16fe26c76dd5e6f14dfde Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Mon, 12 May 2008 14:15:11 -0400 Subject: [PATCH 63/66] X n'est pas une print API. --- Xext/Makefile.am | 7 - Xext/xprint.c | 2617 -------------- configure.ac | 102 - dix/Makefile.am | 10 - dix/dispatch.c | 6 - dix/dixfonts.c | 50 +- dix/globals.c | 3 - dix/main.c | 9 - dix/xpstubs.c | 28 - hw/Makefile.am | 9 +- hw/xnest/Font.c | 5 - hw/xprint/AttrValid.c | 701 ---- hw/xprint/AttrValid.h | 219 -- hw/xprint/DiPrint.h | 85 - hw/xprint/Init.c | 1920 ---------- hw/xprint/Makefile.am | 58 - hw/xprint/Oid.c | 3181 ----------------- hw/xprint/Oid.h | 293 -- hw/xprint/OidDefs.h | 170 - hw/xprint/OidStrs.h | 172 - hw/xprint/Util.c | 370 -- hw/xprint/ValTree.c | 191 - hw/xprint/attributes.c | 1740 --------- hw/xprint/attributes.h | 130 - hw/xprint/config/C/Makefile.am | 1 - hw/xprint/config/C/print/Makefile.am | 14 - hw/xprint/config/C/print/Xprinters | 49 - .../config/C/print/attributes/Makefile.am | 3 - hw/xprint/config/C/print/attributes/document | 49 - hw/xprint/config/C/print/attributes/job | 25 - hw/xprint/config/C/print/attributes/printer | 96 - .../config/C/print/ddx-config/Makefile.am | 1 - .../C/print/ddx-config/raster/Makefile.am | 3 - .../config/C/print/ddx-config/raster/pcl | 39 - .../C/print/ddx-config/raster/postscript | 0 .../C/print/models/CANONBJ10E-GS/Makefile.am | 3 - .../C/print/models/CANONBJ10E-GS/model-config | 23 - .../C/print/models/CANONC3200-PS/Makefile.am | 5 - .../models/CANONC3200-PS/fonts/Makefile.am | 54 - .../C/print/models/CANONC3200-PS/model-config | 40 - .../C/print/models/GSdefault/Makefile.am | 3 - .../C/print/models/GSdefault/model-config | 137 - .../C/print/models/HPDJ1600C/Makefile.am | 5 - .../print/models/HPDJ1600C/fonts/9nb00051.pmf | Bin 5740 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00052.pmf | Bin 5736 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00053.pmf | Bin 5740 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00054.pmf | Bin 5744 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00055.pmf | Bin 5740 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00056.pmf | Bin 5724 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00057.pmf | Bin 5632 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00058.pmf | Bin 5740 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00059.pmf | Bin 5720 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00060.pmf | Bin 5740 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00061.pmf | Bin 5720 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00062.pmf | Bin 5728 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00063.pmf | Bin 5728 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00064.pmf | Bin 5720 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00065.pmf | Bin 5728 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00066.pmf | Bin 5732 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00067.pmf | Bin 5736 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00068.pmf | Bin 5732 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00069.pmf | Bin 5740 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00070.pmf | Bin 5744 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00071.pmf | Bin 5740 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00072.pmf | Bin 5724 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00073.pmf | Bin 5720 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00074.pmf | Bin 5724 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00075.pmf | Bin 5724 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00076.pmf | Bin 5716 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00077.pmf | Bin 5720 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00079.pmf | Bin 5656 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00080.pmf | Bin 5664 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00081.pmf | Bin 5672 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00082.pmf | Bin 5660 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00083.pmf | Bin 5720 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00084.pmf | Bin 5724 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00085.pmf | Bin 5724 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00086.pmf | Bin 5716 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00087.pmf | Bin 5752 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00088.pmf | Bin 5720 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00089.pmf | Bin 5744 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00090.pmf | Bin 5736 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00091.pmf | Bin 5744 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00092.pmf | Bin 5736 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00093.pmf | Bin 5728 -> 0 bytes .../print/models/HPDJ1600C/fonts/9nb00094.pmf | Bin 5728 -> 0 bytes .../print/models/HPDJ1600C/fonts/Makefile.am | 50 - .../C/print/models/HPDJ1600C/fonts/README | 197 - .../print/models/HPDJ1600C/fonts/fonts.alias | 0 .../C/print/models/HPDJ1600C/fonts/fonts.dir | 45 - .../print/models/HPDJ1600C/fonts/lpr0ye1a.pmf | Bin 4296 -> 0 bytes .../C/print/models/HPDJ1600C/model-config | 40 - .../C/print/models/HPLJ4050-PS/Makefile.am | 5 - .../models/HPLJ4050-PS/fonts/Makefile.am | 54 - .../C/print/models/HPLJ4050-PS/model-config | 36 - .../C/print/models/HPLJ4family/Makefile.am | 5 - .../models/HPLJ4family/fonts/9nb00051.pmf | Bin 5740 -> 0 bytes .../models/HPLJ4family/fonts/9nb00052.pmf | Bin 5736 -> 0 bytes .../models/HPLJ4family/fonts/9nb00053.pmf | Bin 5740 -> 0 bytes .../models/HPLJ4family/fonts/9nb00054.pmf | Bin 5744 -> 0 bytes .../models/HPLJ4family/fonts/9nb00055.pmf | Bin 5740 -> 0 bytes .../models/HPLJ4family/fonts/9nb00056.pmf | Bin 5724 -> 0 bytes .../models/HPLJ4family/fonts/9nb00057.pmf | Bin 5632 -> 0 bytes .../models/HPLJ4family/fonts/9nb00058.pmf | Bin 5740 -> 0 bytes .../models/HPLJ4family/fonts/9nb00059.pmf | Bin 5720 -> 0 bytes .../models/HPLJ4family/fonts/9nb00060.pmf | Bin 5740 -> 0 bytes .../models/HPLJ4family/fonts/9nb00061.pmf | Bin 5720 -> 0 bytes .../models/HPLJ4family/fonts/9nb00062.pmf | Bin 5728 -> 0 bytes .../models/HPLJ4family/fonts/9nb00063.pmf | Bin 5728 -> 0 bytes .../models/HPLJ4family/fonts/9nb00064.pmf | Bin 5720 -> 0 bytes .../models/HPLJ4family/fonts/9nb00065.pmf | Bin 5728 -> 0 bytes .../models/HPLJ4family/fonts/9nb00066.pmf | Bin 5732 -> 0 bytes .../models/HPLJ4family/fonts/9nb00067.pmf | Bin 5736 -> 0 bytes .../models/HPLJ4family/fonts/9nb00068.pmf | Bin 5732 -> 0 bytes .../models/HPLJ4family/fonts/9nb00069.pmf | Bin 5740 -> 0 bytes .../models/HPLJ4family/fonts/9nb00070.pmf | Bin 5744 -> 0 bytes .../models/HPLJ4family/fonts/9nb00071.pmf | Bin 5740 -> 0 bytes .../models/HPLJ4family/fonts/9nb00072.pmf | Bin 5724 -> 0 bytes .../models/HPLJ4family/fonts/9nb00073.pmf | Bin 5720 -> 0 bytes .../models/HPLJ4family/fonts/9nb00074.pmf | Bin 5724 -> 0 bytes .../models/HPLJ4family/fonts/9nb00075.pmf | Bin 5724 -> 0 bytes .../models/HPLJ4family/fonts/9nb00076.pmf | Bin 5716 -> 0 bytes .../models/HPLJ4family/fonts/9nb00077.pmf | Bin 5720 -> 0 bytes .../models/HPLJ4family/fonts/9nb00079.pmf | Bin 5656 -> 0 bytes .../models/HPLJ4family/fonts/9nb00080.pmf | Bin 5664 -> 0 bytes .../models/HPLJ4family/fonts/9nb00081.pmf | Bin 5672 -> 0 bytes .../models/HPLJ4family/fonts/9nb00082.pmf | Bin 5660 -> 0 bytes .../models/HPLJ4family/fonts/9nb00083.pmf | Bin 5720 -> 0 bytes .../models/HPLJ4family/fonts/9nb00084.pmf | Bin 5724 -> 0 bytes .../models/HPLJ4family/fonts/9nb00085.pmf | Bin 5724 -> 0 bytes .../models/HPLJ4family/fonts/9nb00086.pmf | Bin 5716 -> 0 bytes .../models/HPLJ4family/fonts/9nb00087.pmf | Bin 5752 -> 0 bytes .../models/HPLJ4family/fonts/9nb00088.pmf | Bin 5720 -> 0 bytes .../models/HPLJ4family/fonts/9nb00089.pmf | Bin 5744 -> 0 bytes .../models/HPLJ4family/fonts/9nb00090.pmf | Bin 5736 -> 0 bytes .../models/HPLJ4family/fonts/9nb00091.pmf | Bin 5744 -> 0 bytes .../models/HPLJ4family/fonts/9nb00092.pmf | Bin 5736 -> 0 bytes .../models/HPLJ4family/fonts/9nb00093.pmf | Bin 5728 -> 0 bytes .../models/HPLJ4family/fonts/9nb00094.pmf | Bin 5728 -> 0 bytes .../models/HPLJ4family/fonts/Makefile.am | 50 - .../C/print/models/HPLJ4family/fonts/README | 203 -- .../models/HPLJ4family/fonts/fonts.alias | 0 .../print/models/HPLJ4family/fonts/fonts.dir | 45 - .../models/HPLJ4family/fonts/lpr0ye1a.pmf | Bin 4296 -> 0 bytes .../C/print/models/HPLJ4family/model-config | 39 - hw/xprint/config/C/print/models/Makefile.am | 11 - .../models/PS2PDFspooldir-GS/Makefile.am | 4 - .../models/PS2PDFspooldir-GS/model-config | 72 - .../PS2PDFspooldir-GS/ps2pdf_spooltodir.sh | 130 - .../C/print/models/PSdefault/Makefile.am | 5 - .../PSdefault/fonts/AvantGarde-Book.pmf | Bin 6716 -> 0 bytes .../fonts/AvantGarde-BookOblique.pmf | Bin 6728 -> 0 bytes .../PSdefault/fonts/AvantGarde-Demi.pmf | Bin 6712 -> 0 bytes .../fonts/AvantGarde-DemiOblique.pmf | Bin 6724 -> 0 bytes .../models/PSdefault/fonts/Courier-Bold.pmf | Bin 6612 -> 0 bytes .../PSdefault/fonts/Courier-BoldOblique.pmf | Bin 6636 -> 0 bytes .../PSdefault/fonts/Courier-Oblique.pmf | Bin 6608 -> 0 bytes .../print/models/PSdefault/fonts/Courier.pmf | Bin 6592 -> 0 bytes .../models/PSdefault/fonts/Helvetica-Bold.pmf | Bin 6680 -> 0 bytes .../PSdefault/fonts/Helvetica-BoldOblique.pmf | Bin 6692 -> 0 bytes .../PSdefault/fonts/Helvetica-Oblique.pmf | Bin 6688 -> 0 bytes .../models/PSdefault/fonts/Helvetica.pmf | Bin 6672 -> 0 bytes .../PSdefault/fonts/LubalinGraph-Book.pmf | Bin 6628 -> 0 bytes .../fonts/LubalinGraph-BookOblique.pmf | Bin 6640 -> 0 bytes .../PSdefault/fonts/LubalinGraph-Demi.pmf | Bin 6624 -> 0 bytes .../fonts/LubalinGraph-DemiOblique.pmf | Bin 6636 -> 0 bytes .../print/models/PSdefault/fonts/Makefile.am | 44 - .../PSdefault/fonts/NewCentSchlbk-Bold.pmf | Bin 6644 -> 0 bytes .../fonts/NewCentSchlbk-BoldItal.pmf | Bin 6656 -> 0 bytes .../PSdefault/fonts/NewCentSchlbk-Ital.pmf | Bin 6652 -> 0 bytes .../PSdefault/fonts/NewCentSchlbk-Roman.pmf | Bin 6648 -> 0 bytes .../models/PSdefault/fonts/Souvenir-Demi.pmf | Bin 6680 -> 0 bytes .../PSdefault/fonts/Souvenir-DemiItalic.pmf | Bin 6692 -> 0 bytes .../models/PSdefault/fonts/Souvenir-Light.pmf | Bin 6684 -> 0 bytes .../PSdefault/fonts/Souvenir-LightItalic.pmf | Bin 6696 -> 0 bytes .../C/print/models/PSdefault/fonts/Symbol.pmf | Bin 6556 -> 0 bytes .../models/PSdefault/fonts/Times-Bold.pmf | Bin 6660 -> 0 bytes .../PSdefault/fonts/Times-BoldItalic.pmf | Bin 6672 -> 0 bytes .../models/PSdefault/fonts/Times-Italic.pmf | Bin 6668 -> 0 bytes .../models/PSdefault/fonts/Times-Roman.pmf | Bin 6664 -> 0 bytes .../models/PSdefault/fonts/ZapfDingbats.pmf | Bin 6676 -> 0 bytes .../C/print/models/PSdefault/model-config | 136 - .../C/print/models/PSspooldir/Makefile.am | 4 - .../C/print/models/PSspooldir/model-config | 71 - .../C/print/models/PSspooldir/spooltodir.sh | 127 - .../C/print/models/SPSPARC2/Makefile.am | 5 - .../C/print/models/SPSPARC2/fonts/Makefile.am | 37 - .../C/print/models/SPSPARC2/model-config | 18 - hw/xprint/config/Makefile.am | 712 ---- hw/xprint/config/README | 318 -- hw/xprint/config/en_US/Makefile.am | 1 - hw/xprint/config/en_US/print/Makefile.am | 1 - .../config/en_US/print/attributes/Makefile.am | 3 - .../config/en_US/print/attributes/document | 13 - hw/xprint/ddxInit.c | 390 -- hw/xprint/doc/Makefile.am | 19 - hw/xprint/doc/Xprt.html | 115 - hw/xprint/doc/Xprt.man.pre | 196 - hw/xprint/doc/Xprt.sgml | 371 -- hw/xprint/etc/Makefile.am | 1 - .../etc/Xsession.d/92xprint-xpserverlist | 30 - hw/xprint/etc/Xsession.d/Makefile.am | 2 - hw/xprint/etc/init.d/Makefile.am | 12 - hw/xprint/etc/init.d/xprint.cpp | 1277 ------- hw/xprint/etc/profile.d/Makefile.am | 1 - hw/xprint/etc/profile.d/xprint.csh | 16 - hw/xprint/etc/profile.d/xprint.sh | 16 - hw/xprint/mediaSizes.c | 782 ---- hw/xprint/pcl-mono/Makefile.am | 5 - hw/xprint/pcl/Makefile.am | 6 - hw/xprint/pcl/Makefile.am.inc | 27 - hw/xprint/pcl/Pcl.h | 619 ---- hw/xprint/pcl/PclArc.c | 268 -- hw/xprint/pcl/PclArea.c | 436 --- hw/xprint/pcl/PclAttVal.c | 206 -- hw/xprint/pcl/PclAttr.c | 86 - hw/xprint/pcl/PclColor.c | 851 ----- hw/xprint/pcl/PclCursor.c | 113 - hw/xprint/pcl/PclDef.h | 67 - hw/xprint/pcl/PclFonts.c | 72 - hw/xprint/pcl/PclGC.c | 971 ----- hw/xprint/pcl/PclInit.c | 575 --- hw/xprint/pcl/PclLine.c | 314 -- hw/xprint/pcl/PclMisc.c | 301 -- hw/xprint/pcl/PclPixel.c | 159 - hw/xprint/pcl/PclPolygon.c | 351 -- hw/xprint/pcl/PclPrint.c | 709 ---- hw/xprint/pcl/PclSFonts.c | 427 --- hw/xprint/pcl/PclSFonts.h | 115 - hw/xprint/pcl/PclSpans.c | 137 - hw/xprint/pcl/PclText.c | 934 ----- hw/xprint/pcl/PclWindow.c | 209 -- hw/xprint/pcl/Pclmap.h | 210 -- hw/xprint/ps/Makefile.am | 42 - hw/xprint/ps/Ps.h | 600 ---- hw/xprint/ps/PsArc.c | 181 - hw/xprint/ps/PsArea.c | 390 -- hw/xprint/ps/PsAttVal.c | 289 -- hw/xprint/ps/PsAttr.c | 116 - hw/xprint/ps/PsCache.c | 328 -- hw/xprint/ps/PsColor.c | 257 -- hw/xprint/ps/PsDef.h | 96 - hw/xprint/ps/PsFTFonts.c | 85 - hw/xprint/ps/PsFonts.c | 873 ----- hw/xprint/ps/PsGC.c | 418 --- hw/xprint/ps/PsImageUtil.c | 329 -- hw/xprint/ps/PsInit.c | 648 ---- hw/xprint/ps/PsLine.c | 191 - hw/xprint/ps/PsMisc.c | 320 -- hw/xprint/ps/PsPixel.c | 156 - hw/xprint/ps/PsPixmap.c | 623 ---- hw/xprint/ps/PsPolygon.c | 259 -- hw/xprint/ps/PsPrint.c | 459 --- hw/xprint/ps/PsSpans.c | 164 - hw/xprint/ps/PsText.c | 581 --- hw/xprint/ps/PsWindow.c | 222 -- hw/xprint/ps/psout.c | 1789 --------- hw/xprint/ps/psout.h | 335 -- hw/xprint/ps/psout_ft.c | 337 -- hw/xprint/ps/psout_ftpstype1.c | 185 - hw/xprint/ps/psout_ftpstype3.c | 439 --- hw/xprint/ps/ttf2pt1wrap.c | 14 - hw/xprint/raster/Makefile.am | 10 - hw/xprint/raster/Raster.c | 1563 -------- hw/xprint/raster/Raster.h | 117 - hw/xprint/raster/RasterAttVal.c | 267 -- hw/xprint/spooler.c | 202 -- hw/xprint/spooler.h | 75 - include/dix.h | 3 - mi/miinitext.c | 48 +- os/utils.c | 13 - 271 files changed, 26 insertions(+), 39501 deletions(-) delete mode 100644 Xext/xprint.c delete mode 100644 hw/xprint/AttrValid.c delete mode 100644 hw/xprint/AttrValid.h delete mode 100644 hw/xprint/DiPrint.h delete mode 100644 hw/xprint/Init.c delete mode 100644 hw/xprint/Makefile.am delete mode 100644 hw/xprint/Oid.c delete mode 100644 hw/xprint/Oid.h delete mode 100644 hw/xprint/OidDefs.h delete mode 100644 hw/xprint/OidStrs.h delete mode 100644 hw/xprint/Util.c delete mode 100644 hw/xprint/ValTree.c delete mode 100644 hw/xprint/attributes.c delete mode 100644 hw/xprint/attributes.h delete mode 100644 hw/xprint/config/C/Makefile.am delete mode 100644 hw/xprint/config/C/print/Makefile.am delete mode 100644 hw/xprint/config/C/print/Xprinters delete mode 100644 hw/xprint/config/C/print/attributes/Makefile.am delete mode 100644 hw/xprint/config/C/print/attributes/document delete mode 100644 hw/xprint/config/C/print/attributes/job delete mode 100644 hw/xprint/config/C/print/attributes/printer delete mode 100644 hw/xprint/config/C/print/ddx-config/Makefile.am delete mode 100644 hw/xprint/config/C/print/ddx-config/raster/Makefile.am delete mode 100644 hw/xprint/config/C/print/ddx-config/raster/pcl delete mode 100644 hw/xprint/config/C/print/ddx-config/raster/postscript delete mode 100644 hw/xprint/config/C/print/models/CANONBJ10E-GS/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/CANONBJ10E-GS/model-config delete mode 100644 hw/xprint/config/C/print/models/CANONC3200-PS/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/CANONC3200-PS/fonts/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/CANONC3200-PS/model-config delete mode 100644 hw/xprint/config/C/print/models/GSdefault/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/GSdefault/model-config delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00051.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00052.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00053.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00054.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00055.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00056.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00057.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00058.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00059.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00060.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00061.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00062.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00063.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00064.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00065.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00066.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00067.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00068.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00069.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00070.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00071.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00072.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00073.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00074.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00075.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00076.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00077.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00079.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00080.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00081.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00082.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00083.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00084.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00085.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00086.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00087.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00088.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00089.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00090.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00091.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00092.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00093.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00094.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/README delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/fonts.alias delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/fonts.dir delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/fonts/lpr0ye1a.pmf delete mode 100644 hw/xprint/config/C/print/models/HPDJ1600C/model-config delete mode 100644 hw/xprint/config/C/print/models/HPLJ4050-PS/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/HPLJ4050-PS/fonts/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/HPLJ4050-PS/model-config delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00051.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00052.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00053.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00054.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00055.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00056.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00057.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00058.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00059.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00060.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00061.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00062.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00063.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00064.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00065.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00066.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00067.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00068.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00069.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00070.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00071.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00072.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00073.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00074.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00075.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00076.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00077.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00079.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00080.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00081.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00082.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00083.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00084.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00085.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00086.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00087.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00088.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00089.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00090.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00091.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00092.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00093.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00094.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/README delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/fonts.alias delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/fonts.dir delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/fonts/lpr0ye1a.pmf delete mode 100644 hw/xprint/config/C/print/models/HPLJ4family/model-config delete mode 100644 hw/xprint/config/C/print/models/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/PS2PDFspooldir-GS/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/PS2PDFspooldir-GS/model-config delete mode 100755 hw/xprint/config/C/print/models/PS2PDFspooldir-GS/ps2pdf_spooltodir.sh delete mode 100644 hw/xprint/config/C/print/models/PSdefault/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/AvantGarde-Book.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/AvantGarde-BookOblique.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/AvantGarde-Demi.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/AvantGarde-DemiOblique.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Courier-Bold.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Courier-BoldOblique.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Courier-Oblique.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Courier.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Helvetica-Bold.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Helvetica-BoldOblique.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Helvetica-Oblique.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Helvetica.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/LubalinGraph-Book.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/LubalinGraph-BookOblique.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/LubalinGraph-Demi.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/LubalinGraph-DemiOblique.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/NewCentSchlbk-Bold.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/NewCentSchlbk-BoldItal.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/NewCentSchlbk-Ital.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/NewCentSchlbk-Roman.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Souvenir-Demi.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Souvenir-DemiItalic.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Souvenir-Light.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Souvenir-LightItalic.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Symbol.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Times-Bold.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Times-BoldItalic.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Times-Italic.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/Times-Roman.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/fonts/ZapfDingbats.pmf delete mode 100644 hw/xprint/config/C/print/models/PSdefault/model-config delete mode 100644 hw/xprint/config/C/print/models/PSspooldir/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/PSspooldir/model-config delete mode 100755 hw/xprint/config/C/print/models/PSspooldir/spooltodir.sh delete mode 100644 hw/xprint/config/C/print/models/SPSPARC2/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/SPSPARC2/fonts/Makefile.am delete mode 100644 hw/xprint/config/C/print/models/SPSPARC2/model-config delete mode 100644 hw/xprint/config/Makefile.am delete mode 100644 hw/xprint/config/README delete mode 100644 hw/xprint/config/en_US/Makefile.am delete mode 100644 hw/xprint/config/en_US/print/Makefile.am delete mode 100644 hw/xprint/config/en_US/print/attributes/Makefile.am delete mode 100644 hw/xprint/config/en_US/print/attributes/document delete mode 100644 hw/xprint/ddxInit.c delete mode 100644 hw/xprint/doc/Makefile.am delete mode 100644 hw/xprint/doc/Xprt.html delete mode 100644 hw/xprint/doc/Xprt.man.pre delete mode 100644 hw/xprint/doc/Xprt.sgml delete mode 100644 hw/xprint/etc/Makefile.am delete mode 100644 hw/xprint/etc/Xsession.d/92xprint-xpserverlist delete mode 100644 hw/xprint/etc/Xsession.d/Makefile.am delete mode 100644 hw/xprint/etc/init.d/Makefile.am delete mode 100644 hw/xprint/etc/init.d/xprint.cpp delete mode 100644 hw/xprint/etc/profile.d/Makefile.am delete mode 100644 hw/xprint/etc/profile.d/xprint.csh delete mode 100644 hw/xprint/etc/profile.d/xprint.sh delete mode 100644 hw/xprint/mediaSizes.c delete mode 100644 hw/xprint/pcl-mono/Makefile.am delete mode 100644 hw/xprint/pcl/Makefile.am delete mode 100644 hw/xprint/pcl/Makefile.am.inc delete mode 100644 hw/xprint/pcl/Pcl.h delete mode 100644 hw/xprint/pcl/PclArc.c delete mode 100644 hw/xprint/pcl/PclArea.c delete mode 100644 hw/xprint/pcl/PclAttVal.c delete mode 100644 hw/xprint/pcl/PclAttr.c delete mode 100644 hw/xprint/pcl/PclColor.c delete mode 100644 hw/xprint/pcl/PclCursor.c delete mode 100644 hw/xprint/pcl/PclDef.h delete mode 100644 hw/xprint/pcl/PclFonts.c delete mode 100644 hw/xprint/pcl/PclGC.c delete mode 100644 hw/xprint/pcl/PclInit.c delete mode 100644 hw/xprint/pcl/PclLine.c delete mode 100644 hw/xprint/pcl/PclMisc.c delete mode 100644 hw/xprint/pcl/PclPixel.c delete mode 100644 hw/xprint/pcl/PclPolygon.c delete mode 100644 hw/xprint/pcl/PclPrint.c delete mode 100644 hw/xprint/pcl/PclSFonts.c delete mode 100644 hw/xprint/pcl/PclSFonts.h delete mode 100644 hw/xprint/pcl/PclSpans.c delete mode 100644 hw/xprint/pcl/PclText.c delete mode 100644 hw/xprint/pcl/PclWindow.c delete mode 100644 hw/xprint/pcl/Pclmap.h delete mode 100644 hw/xprint/ps/Makefile.am delete mode 100644 hw/xprint/ps/Ps.h delete mode 100644 hw/xprint/ps/PsArc.c delete mode 100644 hw/xprint/ps/PsArea.c delete mode 100644 hw/xprint/ps/PsAttVal.c delete mode 100644 hw/xprint/ps/PsAttr.c delete mode 100644 hw/xprint/ps/PsCache.c delete mode 100644 hw/xprint/ps/PsColor.c delete mode 100644 hw/xprint/ps/PsDef.h delete mode 100644 hw/xprint/ps/PsFTFonts.c delete mode 100644 hw/xprint/ps/PsFonts.c delete mode 100644 hw/xprint/ps/PsGC.c delete mode 100644 hw/xprint/ps/PsImageUtil.c delete mode 100644 hw/xprint/ps/PsInit.c delete mode 100644 hw/xprint/ps/PsLine.c delete mode 100644 hw/xprint/ps/PsMisc.c delete mode 100644 hw/xprint/ps/PsPixel.c delete mode 100644 hw/xprint/ps/PsPixmap.c delete mode 100644 hw/xprint/ps/PsPolygon.c delete mode 100644 hw/xprint/ps/PsPrint.c delete mode 100644 hw/xprint/ps/PsSpans.c delete mode 100644 hw/xprint/ps/PsText.c delete mode 100644 hw/xprint/ps/PsWindow.c delete mode 100644 hw/xprint/ps/psout.c delete mode 100644 hw/xprint/ps/psout.h delete mode 100644 hw/xprint/ps/psout_ft.c delete mode 100644 hw/xprint/ps/psout_ftpstype1.c delete mode 100644 hw/xprint/ps/psout_ftpstype3.c delete mode 100644 hw/xprint/ps/ttf2pt1wrap.c delete mode 100644 hw/xprint/raster/Makefile.am delete mode 100644 hw/xprint/raster/Raster.c delete mode 100644 hw/xprint/raster/Raster.h delete mode 100644 hw/xprint/raster/RasterAttVal.c delete mode 100644 hw/xprint/spooler.c delete mode 100644 hw/xprint/spooler.h diff --git a/Xext/Makefile.am b/Xext/Makefile.am index b03fedaa3..c5c5d2ee6 100644 --- a/Xext/Makefile.am +++ b/Xext/Makefile.am @@ -98,12 +98,6 @@ if XEVIE BUILTIN_SRCS += $(XEVIE_SRCS) endif -# XPrint: Printing via X Protocol -XPRINT_SRCS = xprint.c -if XPRINT -BUILTIN_SRCS += $(XPRINT_SRCS) -endif - # Multi-buffering extension MULTIBUFFER_SRCS = mbuf.c EXTRA_MULTIBUFFER_SRCS = mbufbf.c mbufpx.c @@ -149,7 +143,6 @@ EXTRA_DIST = \ $(XCALIBRATE_SRCS) \ $(XINERAMA_SRCS) \ $(XEVIE_SRCS) \ - $(XPRINT_SRCS) \ $(MULTIBUFFER_SRCS) \ $(EXTRA_MULTIBUFFER_SRCS) \ $(FONTCACHE_SRCS) \ diff --git a/Xext/xprint.c b/Xext/xprint.c deleted file mode 100644 index a5d8fcc33..000000000 --- a/Xext/xprint.c +++ /dev/null @@ -1,2617 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ -/******************************************************************* -** -** ********************************************************* -** * -** * File: xprint.c -** * -** * Copyright: Copyright 1993, 1995 Hewlett-Packard Company -** * -** * Copyright 1989 by The Massachusetts Institute of Technology -** * -** * Permission to use, copy, modify, and distribute this -** * software and its documentation for any purpose and without -** * fee is hereby granted, provided that the above copyright -** * notice appear in all copies and that both that copyright -** * notice and this permission notice appear in supporting -** * documentation, and that the name of MIT not be used in -** * advertising or publicity pertaining to distribution of the -** * software without specific prior written permission. -** * M.I.T. makes no representation about the suitability of -** * this software for any purpose. It is provided "as is" -** * without any express or implied warranty. -** * -** * MIT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -** * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FIT- -** * NESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MIT BE LI- -** * ABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -** * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -** * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -** * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH -** * THE USE OR PERFORMANCE OF THIS SOFTWARE. -** * -** ********************************************************* -** -********************************************************************/ - -#define _XP_PRINT_SERVER_ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#define NEED_EVENTS -#include -#undef NEED_EVENTS -#include "misc.h" -#include "windowstr.h" -#include "scrnintstr.h" -#include "pixmapstr.h" -#include "extnsionst.h" -#include "dixstruct.h" -#include -#include -#include -#include "../hw/xprint/DiPrint.h" -#include "../hw/xprint/attributes.h" -#include "modinit.h" - -static void XpResetProc(ExtensionEntry *); - -static int ProcXpDispatch(ClientPtr); -static int ProcXpSwappedDispatch(ClientPtr); - -static int ProcXpQueryVersion(ClientPtr); -static int ProcXpGetPrinterList(ClientPtr); -static int ProcXpCreateContext(ClientPtr); -static int ProcXpSetContext(ClientPtr); -static int ProcXpGetContext(ClientPtr); -static int ProcXpDestroyContext(ClientPtr); -static int ProcXpGetContextScreen(ClientPtr); -static int ProcXpStartJob(ClientPtr); -static int ProcXpEndJob(ClientPtr); -static int ProcXpStartDoc(ClientPtr); -static int ProcXpEndDoc(ClientPtr); -static int ProcXpStartPage(ClientPtr); -static int ProcXpEndPage(ClientPtr); -static int ProcXpSelectInput(ClientPtr); -static int ProcXpInputSelected(ClientPtr); -static int ProcXpPutDocumentData(ClientPtr); -static int ProcXpGetDocumentData(ClientPtr); -static int ProcXpGetAttributes(ClientPtr); -static int ProcXpGetOneAttribute(ClientPtr); -static int ProcXpSetAttributes(ClientPtr); -static int ProcXpRehashPrinterList(ClientPtr); -static int ProcXpQueryScreens(ClientPtr); -static int ProcXpGetPageDimensions(ClientPtr); -static int ProcXpSetImageResolution(ClientPtr); -static int ProcXpGetImageResolution(ClientPtr); - -static void SwapXpNotifyEvent(xPrintPrintEvent *, xPrintPrintEvent *); -static void SwapXpAttributeEvent(xPrintAttributeEvent *, xPrintAttributeEvent *); - -static int SProcXpGetPrinterList(ClientPtr); -static int SProcXpCreateContext(ClientPtr); -static int SProcXpSetContext(ClientPtr); -static int SProcXpGetContext(ClientPtr); -static int SProcXpDestroyContext(ClientPtr); -static int SProcXpGetContextScreen(ClientPtr); -static int SProcXpStartJob(ClientPtr); -static int SProcXpEndJob(ClientPtr); -static int SProcXpStartDoc(ClientPtr); -static int SProcXpEndDoc(ClientPtr); -static int SProcXpStartPage(ClientPtr); -static int SProcXpEndPage(ClientPtr); -static int SProcXpSelectInput(ClientPtr); -static int SProcXpInputSelected(ClientPtr); -static int SProcXpPutDocumentData(ClientPtr); -static int SProcXpGetDocumentData(ClientPtr); -static int SProcXpGetAttributes(ClientPtr); -static int SProcXpGetOneAttribute(ClientPtr); -static int SProcXpSetAttributes(ClientPtr); -static int SProcXpRehashPrinterList(ClientPtr); -static int SProcXpGetPageDimensions(ClientPtr); -static int SProcXpSetImageResolution(ClientPtr); -static int SProcXpGetImageResolution(ClientPtr); - -static void SendXpNotify(XpContextPtr, int, int); -static void SendAttributeNotify(XpContextPtr, int); -static int XpFreeClient(pointer, XID); -static int XpFreeContext(pointer, XID); -static int XpFreePage(pointer, XID); -static Bool XpCloseScreen(int, ScreenPtr); -static CARD32 GetAllEventMasks(XpContextPtr); -static struct _XpClient *CreateXpClient(ClientPtr); -static struct _XpClient *FindClient(XpContextPtr, ClientPtr); -static struct _XpClient *AcquireClient(XpContextPtr, ClientPtr); - -typedef struct _driver { - struct _driver *next; - char *name; - int (* CreateContext)(XpContextPtr); -} XpDriverRec, *XpDriverPtr; - -typedef struct _xpScreen { - Bool (* CloseScreen)(int, ScreenPtr); - struct _driver *drivers; -} XpScreenRec, *XpScreenPtr; - -/* - * Each context has a list of XpClients indicating which clients have - * associated this context with their connection. - * Each such client has a RTclient resource allocated for it, - * and this per-client - * resource is used to delete the XpClientRec if/when the client closes - * its connection. - * The list of XpClients is also walked if/when the context is destroyed - * so that the ContextPtr can be removed from the client's devPrivates. - */ -typedef struct _XpClient { - struct _XpClient *pNext; - ClientPtr client; - XpContextPtr context; - CARD32 eventMask; - XID contextClientID; /* unneeded sanity check? */ -} XpClientRec, *XpClientPtr; - -static void FreeXpClient(XpClientPtr, Bool); - -/* - * Each StartPage request specifies a window which forms the top level - * window of the page. One of the following structs is created as a - * RTpage resource with the same ID as the window itself. This enables - * us to clean up when/if the window is destroyed, and to prevent the - * same window from being simultaneously referenced in multiple contexts. - * The page resource is created at the first StartPage on a given window, - * and is only destroyed when/if the window is destroyed. When the - * EndPage is recieved (or an EndDoc or EndJob) the context field is - * set to NULL, but the resource remains alive. - */ -typedef struct _XpPage { - XpContextPtr context; -} XpPageRec, *XpPagePtr; - -typedef struct _XpStPageRec { - XpContextPtr pContext; - Bool slept; - XpPagePtr pPage; - WindowPtr pWin; -} XpStPageRec, *XpStPagePtr; - -typedef struct _XpStDocRec { - XpContextPtr pContext; - Bool slept; - CARD8 type; -} XpStDocRec, *XpStDocPtr; - -#define QUADPAD(x) ((((x)+3)>>2)<<2) - -/* - * Possible bit-mask values in the "state" field of a XpContextRec. - */ -#define JOB_STARTED (1 << 0) -#define DOC_RAW_STARTED (1 << 1) -#define DOC_COOKED_STARTED (1 << 2) -#define PAGE_STARTED (1 << 3) -#define GET_DOC_DATA_STARTED (1 << 4) -#define JOB_GET_DATA (1 << 5) - -static XpScreenPtr XpScreens[MAXSCREENS]; -static unsigned char XpReqCode; -static int XpEventBase; -static int XpErrorBase; -static DevPrivateKey XpClientPrivateKey = &XpClientPrivateKey; - -#define XP_GETPRIV(pClient) ((XpContextPtr) \ - dixLookupPrivate(&(pClient)->devPrivates, XpClientPrivateKey)) -#define XP_SETPRIV(pClient, p) \ - dixSetPrivate(&(pClient)->devPrivates, XpClientPrivateKey, p) - -/* - * There are three types of resources involved. One is the resource associated - * with the context itself, with an ID specified by a printing client. The - * next is a resource created by us on the client's behalf (and unknown to - * the client) when a client inits or sets a context which allows us to - * track each client's interest in events - * on a particular context, and also allows us to clean up this interest - * record when/if the client's connection is closed. Finally, there is - * a resource created for each window that's specified in a StartPage. This - * resource carries the same ID as the window itself, and enables us to - * easily prevent the same window being referenced in multiple contexts - * simultaneously, and enables us to clean up if the window is destroyed - * before the EndPage. - */ -static RESTYPE RTclient, RTcontext, RTpage; - -/* - * allEvents is the OR of all the legal event mask bits. - */ -static CARD32 allEvents = XPPrintMask | XPAttributeMask; - - -/******************************************************************************* - * - * ExtensionInit, Driver Init functions, QueryVersion, and Dispatch procs - * - ******************************************************************************/ - -/* - * XpExtensionInit - * - * Called from InitExtensions in main() usually through miinitextension - * - */ - -void -XpExtensionInit(INITARGS) -{ - ExtensionEntry *extEntry; - int i; - - RTclient = CreateNewResourceType(XpFreeClient); - RTcontext = CreateNewResourceType(XpFreeContext); - RTpage = CreateNewResourceType(XpFreePage); - if (RTclient && RTcontext && RTpage && - (extEntry = AddExtension(XP_PRINTNAME, XP_EVENTS, XP_ERRORS, - ProcXpDispatch, ProcXpSwappedDispatch, - XpResetProc, StandardMinorOpcode))) - { - XpReqCode = (unsigned char)extEntry->base; - XpEventBase = extEntry->eventBase; - XpErrorBase = extEntry->errorBase; - EventSwapVector[XpEventBase] = (EventSwapPtr) SwapXpNotifyEvent; - EventSwapVector[XpEventBase+1] = (EventSwapPtr) SwapXpAttributeEvent; - } - - for(i = 0; i < MAXSCREENS; i++) - { - /* - * If a screen has registered with our extension, then we - * wrap the screen's CloseScreen function to allow us to - * reset our ContextPrivate stuff. Note that this - * requires a printing DDX to call XpRegisterInitFunc - * _before_ this extension is initialized - i.e. at screen init - * time, _not_ at root window creation time. - */ - if(XpScreens[i] != (XpScreenPtr)NULL) - { - XpScreens[i]->CloseScreen = screenInfo.screens[i]->CloseScreen; - screenInfo.screens[i]->CloseScreen = XpCloseScreen; - } - } -} - -static void -XpResetProc(ExtensionEntry *extEntry) -{ - /* - * We can't free up the XpScreens recs here, because extensions are - * closed before screens, and our CloseScreen function uses the XpScreens - * recs. - - int i; - - for(i = 0; i < MAXSCREENS; i++) - { - if(XpScreens[i] != (XpScreenPtr)NULL) - Xfree(XpScreens[i]); - XpScreens[i] = (XpScreenPtr)NULL; - } - */ -} - -static Bool -XpCloseScreen(int index, ScreenPtr pScreen) -{ - Bool (* CloseScreen)(int, ScreenPtr); - - CloseScreen = XpScreens[index]->CloseScreen; - if(XpScreens[index] != (XpScreenPtr)NULL) - { - XpDriverPtr pDriv, nextDriv; - - pDriv = XpScreens[index]->drivers; - while(pDriv != (XpDriverPtr)NULL) - { - nextDriv = pDriv->next; - Xfree(pDriv); - pDriv = nextDriv; - } - Xfree(XpScreens[index]); - } - XpScreens[index] = (XpScreenPtr)NULL; - - return (*CloseScreen)(index, pScreen); -} - -/* - * XpRegisterInitFunc tells the print extension which screens - * are printers as opposed to displays, and what drivers are - * supported on each screen. This eliminates the need of - * allocating print-related private structures on windows on _all_ screens. - * It also hands the extension a pointer to the routine to be called - * whenever a context gets created for a particular driver on this screen. - */ -void -XpRegisterInitFunc(ScreenPtr pScreen, char *driverName, int (*initContext)(struct _XpContext *)) -{ - XpDriverPtr pDriver; - - if(XpScreens[pScreen->myNum] == 0) - { - if((XpScreens[pScreen->myNum] = - (XpScreenPtr) Xalloc(sizeof(XpScreenRec))) == 0) - return; - XpScreens[pScreen->myNum]->CloseScreen = 0; - XpScreens[pScreen->myNum]->drivers = 0; - } - - if((pDriver = (XpDriverPtr)Xalloc(sizeof(XpDriverRec))) == 0) - return; - pDriver->next = XpScreens[pScreen->myNum]->drivers; - pDriver->name = driverName; - pDriver->CreateContext = initContext; - XpScreens[pScreen->myNum]->drivers = pDriver; -} - -static int -ProcXpDispatch(ClientPtr client) -{ - REQUEST(xReq); - - switch(stuff->data) - { - case X_PrintQueryVersion: - return ProcXpQueryVersion(client); - case X_PrintGetPrinterList: - return ProcXpGetPrinterList(client); - case X_PrintCreateContext: - return ProcXpCreateContext(client); - case X_PrintSetContext: - return ProcXpSetContext(client); - case X_PrintGetContext: - return ProcXpGetContext(client); - case X_PrintDestroyContext: - return ProcXpDestroyContext(client); - case X_PrintGetContextScreen: - return ProcXpGetContextScreen(client); - case X_PrintStartJob: - return ProcXpStartJob(client); - case X_PrintEndJob: - return ProcXpEndJob(client); - case X_PrintStartDoc: - return ProcXpStartDoc(client); - case X_PrintEndDoc: - return ProcXpEndDoc(client); - case X_PrintStartPage: - return ProcXpStartPage(client); - case X_PrintEndPage: - return ProcXpEndPage(client); - case X_PrintSelectInput: - return ProcXpSelectInput(client); - case X_PrintInputSelected: - return ProcXpInputSelected(client); - case X_PrintPutDocumentData: - return ProcXpPutDocumentData(client); - case X_PrintGetDocumentData: - return ProcXpGetDocumentData(client); - case X_PrintSetAttributes: - return ProcXpSetAttributes(client); - case X_PrintGetAttributes: - return ProcXpGetAttributes(client); - case X_PrintGetOneAttribute: - return ProcXpGetOneAttribute(client); - case X_PrintRehashPrinterList: - return ProcXpRehashPrinterList(client); - case X_PrintQueryScreens: - return ProcXpQueryScreens(client); - case X_PrintGetPageDimensions: - return ProcXpGetPageDimensions(client); - case X_PrintSetImageResolution: - return ProcXpSetImageResolution(client); - case X_PrintGetImageResolution: - return ProcXpGetImageResolution(client); - default: - return BadRequest; - } -} - -static int -ProcXpSwappedDispatch(ClientPtr client) -{ - int temp; - REQUEST(xReq); - - switch(stuff->data) - { - case X_PrintQueryVersion: - swaps(&stuff->length, temp); - return ProcXpQueryVersion(client); - case X_PrintGetPrinterList: - return SProcXpGetPrinterList(client); - case X_PrintCreateContext: - return SProcXpCreateContext(client); - case X_PrintSetContext: - return SProcXpSetContext(client); - case X_PrintGetContext: - return SProcXpGetContext(client); - case X_PrintDestroyContext: - return SProcXpDestroyContext(client); - case X_PrintGetContextScreen: - return SProcXpGetContextScreen(client); - case X_PrintStartJob: - return SProcXpStartJob(client); - case X_PrintEndJob: - return SProcXpEndJob(client); - case X_PrintStartDoc: - return SProcXpStartDoc(client); - case X_PrintEndDoc: - return SProcXpEndDoc(client); - case X_PrintStartPage: - return SProcXpStartPage(client); - case X_PrintEndPage: - return SProcXpEndPage(client); - case X_PrintSelectInput: - return SProcXpSelectInput(client); - case X_PrintInputSelected: - return SProcXpInputSelected(client); - case X_PrintPutDocumentData: - return SProcXpPutDocumentData(client); - case X_PrintGetDocumentData: - return SProcXpGetDocumentData(client); - case X_PrintSetAttributes: - return SProcXpSetAttributes(client); - case X_PrintGetAttributes: - return SProcXpGetAttributes(client); - case X_PrintGetOneAttribute: - return SProcXpGetOneAttribute(client); - case X_PrintRehashPrinterList: - return SProcXpRehashPrinterList(client); - case X_PrintQueryScreens: - swaps(&stuff->length, temp); - return ProcXpQueryScreens(client); - case X_PrintGetPageDimensions: - return SProcXpGetPageDimensions(client); - case X_PrintSetImageResolution: - return SProcXpSetImageResolution(client); - case X_PrintGetImageResolution: - return SProcXpGetImageResolution(client); - default: - return BadRequest; - } -} - -static int -ProcXpQueryVersion(ClientPtr client) -{ - /* REQUEST(xPrintQueryVersionReq); */ - xPrintQueryVersionReply rep; - register int n; - long l; - - REQUEST_SIZE_MATCH(xPrintQueryVersionReq); - rep.type = X_Reply; - rep.length = 0; - rep.sequenceNumber = client->sequence; - rep.majorVersion = XP_MAJOR_VERSION; - rep.minorVersion = XP_MINOR_VERSION; - if (client->swapped) { - swaps(&rep.sequenceNumber, n); - swapl(&rep.length, l); - swaps(&rep.majorVersion, n); - swaps(&rep.minorVersion, n); - } - WriteToClient(client, sz_xPrintQueryVersionReply, (char *)&rep); - return client->noClientException; -} - -/******************************************************************************* - * - * GetPrinterList : Return a list of all printers associated with this - * server. Calls XpDiGetPrinterList, which is defined in - * the device-independent code in Xserver/Xprint. - * - ******************************************************************************/ - -static int -ProcXpGetPrinterList(ClientPtr client) -{ - REQUEST(xPrintGetPrinterListReq); - int totalSize; - int numEntries; - XpDiListEntry **pList; - xPrintGetPrinterListReply *rep; - int n, i, totalBytes; - long l; - char *curByte; - - REQUEST_AT_LEAST_SIZE(xPrintGetPrinterListReq); - - totalSize = ((sz_xPrintGetPrinterListReq) >> 2) + - ((stuff->printerNameLen + 3) >> 2) + - ((stuff->localeLen + 3) >> 2); - if(totalSize != client->req_len) - return BadLength; - - pList = XpDiGetPrinterList(stuff->printerNameLen, (char *)(stuff + 1), - stuff->localeLen, (char *)((stuff + 1) + - QUADPAD(stuff->printerNameLen))); - - for(numEntries = 0, totalBytes = sz_xPrintGetPrinterListReply; - pList[numEntries] != (XpDiListEntry *)NULL; - numEntries++) - { - totalBytes += 2 * sizeof(CARD32); - totalBytes += QUADPAD(strlen(pList[numEntries]->name)); - totalBytes += QUADPAD(strlen(pList[numEntries]->description)); - } - - if((rep = (xPrintGetPrinterListReply *)xalloc(totalBytes)) == - (xPrintGetPrinterListReply *)NULL) - return BadAlloc; - - rep->type = X_Reply; - rep->length = (totalBytes - sz_xPrintGetPrinterListReply) >> 2; - rep->sequenceNumber = client->sequence; - rep->listCount = numEntries; - if (client->swapped) { - swaps(&rep->sequenceNumber, n); - swapl(&rep->length, l); - swapl(&rep->listCount, l); - } - - for(i = 0, curByte = (char *)(rep + 1); i < numEntries; i++) - { - CARD32 *pCrd; - int len; - - pCrd = (CARD32 *)curByte; - len = strlen(pList[i]->name); - *pCrd = len; - if (client->swapped) - swapl((long *)curByte, l); - curByte += sizeof(CARD32); - strncpy(curByte, pList[i]->name, len); - curByte += QUADPAD(len); - - pCrd = (CARD32 *)curByte; - len = strlen(pList[i]->description); - *pCrd = len; - if (client->swapped) - swapl((long *)curByte, l); - curByte += sizeof(CARD32); - strncpy(curByte, pList[i]->description, len); - curByte += QUADPAD(len); - } - - XpDiFreePrinterList(pList); - - WriteToClient(client, totalBytes, (char *)rep); - xfree(rep); - return client->noClientException; -} - -/******************************************************************************* - * - * QueryScreens: Returns the list of screens which are associated with - * print drivers. - * - ******************************************************************************/ - -static int -ProcXpQueryScreens(ClientPtr client) -{ - /* REQUEST(xPrintQueryScreensReq); */ - int i, numPrintScreens, totalSize; - WINDOW *pWinId; - xPrintQueryScreensReply *rep; - long l; - - REQUEST_SIZE_MATCH(xPrintQueryScreensReq); - - rep = (xPrintQueryScreensReply *)xalloc(sz_xPrintQueryScreensReply); - pWinId = (WINDOW *)(rep + 1); - - for(i = 0, numPrintScreens = 0, totalSize = sz_xPrintQueryScreensReply; - i < MAXSCREENS; i++) - { - /* - * If a screen has registered with our extension, then it's - * a printer screen. - */ - if(XpScreens[i] != (XpScreenPtr)NULL) - { - numPrintScreens++; - totalSize += sizeof(WINDOW); - rep = (xPrintQueryScreensReply *)xrealloc(rep, totalSize); - /* fix of bug: pWinId should be set again after reallocate rep */ - pWinId = (WINDOW *)(rep + 1); - *pWinId = WindowTable[i]->drawable.id; - if (client->swapped) - swapl((long *)pWinId, l); - } - } - - rep->type = X_Reply; - rep->sequenceNumber = client->sequence; - rep->length = (totalSize - sz_xPrintQueryScreensReply) >> 2; - rep->listCount = numPrintScreens; - if (client->swapped) - { - int n; - - swaps(&rep->sequenceNumber, n); - swapl(&rep->length, l); - swapl(&rep->listCount, l); - } - - WriteToClient(client, totalSize, (char *)rep); - xfree(rep); - return client->noClientException; -} - -static int -ProcXpGetPageDimensions(ClientPtr client) -{ - REQUEST(xPrintGetPageDimensionsReq); - CARD16 width, height; - xRectangle rect; - xPrintGetPageDimensionsReply rep; - XpContextPtr pContext; - int result; - - REQUEST_SIZE_MATCH(xPrintGetPageDimensionsReq); - - if((pContext =(XpContextPtr)SecurityLookupIDByType(client, - stuff->printContext, - RTcontext, - DixReadAccess)) - == (XpContextPtr)NULL) - { - client->errorValue = stuff->printContext; - return XpErrorBase+XPBadContext; - } - - if((pContext->funcs.GetMediumDimensions == 0) || - (pContext->funcs.GetReproducibleArea == 0)) - return BadImplementation; - - result = pContext->funcs.GetMediumDimensions(pContext, &width, &height); - if(result != Success) - return result; - - result = pContext->funcs.GetReproducibleArea(pContext, &rect); - if(result != Success) - return result; - - rep.type = X_Reply; - rep.sequenceNumber = client->sequence; - rep.length = 0; - rep.width = width; - rep.height = height; - rep.rx = rect.x; - rep.ry = rect.y; - rep.rwidth = rect.width; - rep.rheight = rect.height; - - if(client->swapped) - { - int n; - long l; - - swaps(&rep.sequenceNumber, n); - swapl(&rep.length, l); - swaps(&rep.width, n); - swaps(&rep.height, n); - swaps(&rep.rx, n); - swaps(&rep.ry, n); - swaps(&rep.rwidth, n); - swaps(&rep.rheight, n); - } - - WriteToClient(client, sz_xPrintGetPageDimensionsReply, (char *)&rep); - return client->noClientException; -} - -static int -ProcXpSetImageResolution(ClientPtr client) -{ - REQUEST(xPrintSetImageResolutionReq); - xPrintSetImageResolutionReply rep; - XpContextPtr pContext; - Bool status; - int result; - - REQUEST_SIZE_MATCH(xPrintSetImageResolutionReq); - - if((pContext =(XpContextPtr)SecurityLookupIDByType(client, - stuff->printContext, - RTcontext, - DixWriteAccess)) - == (XpContextPtr)NULL) - { - client->errorValue = stuff->printContext; - return XpErrorBase+XPBadContext; - } - - rep.prevRes = pContext->imageRes; - if(pContext->funcs.SetImageResolution != 0) { - result = pContext->funcs.SetImageResolution(pContext, - (int)stuff->imageRes, - &status); - if(result != Success) - status = FALSE; - } else - status = FALSE; - - rep.type = X_Reply; - rep.sequenceNumber = client->sequence; - rep.length = 0; - rep.status = status; - - if(client->swapped) - { - int n; - long l; - - swaps(&rep.sequenceNumber, n); - swapl(&rep.length, l); - swaps(&rep.prevRes, n); - } - - WriteToClient(client, sz_xPrintSetImageResolutionReply, (char *)&rep); - return client->noClientException; -} - -static int -ProcXpGetImageResolution(ClientPtr client) -{ - REQUEST(xPrintGetImageResolutionReq); - xPrintGetImageResolutionReply rep; - XpContextPtr pContext; - - REQUEST_SIZE_MATCH(xPrintGetImageResolutionReq); - - if((pContext =(XpContextPtr)SecurityLookupIDByType(client, - stuff->printContext, - RTcontext, - DixReadAccess)) - == (XpContextPtr)NULL) - { - client->errorValue = stuff->printContext; - return XpErrorBase+XPBadContext; - } - - rep.type = X_Reply; - rep.sequenceNumber = client->sequence; - rep.length = 0; - rep.imageRes = pContext->imageRes; - - if(client->swapped) - { - int n; - long l; - - swaps(&rep.sequenceNumber, n); - swapl(&rep.length, l); - swaps(&rep.imageRes, n); - } - - WriteToClient(client, sz_xPrintGetImageResolutionReply, (char *)&rep); - return client->noClientException; -} - -/******************************************************************************* - * - * RehashPrinterList : Cause the server's list of printers to be rebuilt. - * This allows new printers to be added, or old ones - * deleted without needing to restart the server. - * - ******************************************************************************/ - -static int -ProcXpRehashPrinterList(ClientPtr client) -{ - /* REQUEST(xPrintRehashPrinterListReq); */ - - REQUEST_SIZE_MATCH(xPrintRehashPrinterListReq); - - return XpRehashPrinterList(); -} - -/****************************************************************************** - * - * Context functions: Init, Set, Destroy, FreeContext - * AllocateContextPrivateIndex, AllocateContextPrivate - * and supporting functions. - * - * Init creates a context, creates a XpClientRec for the calling - * client, and stores the contextPtr in the client's devPrivates. - * - * Set creates a XpClientRec for the calling client, and stores the - * contextPtr in the client's devPrivates unless the context is None. - * If the context is None, then the client's connection association - * with any context is removed. - * - * Destroy frees any and all XpClientRecs associated with the context, - * frees the context itself, and removes the contextPtr from any - * relevant client devPrivates. - * - * FreeContext is called by FreeResource to free up a context. - * - ******************************************************************************/ - -/* - * CreateContext creates and initializes the memory for the context itself. - * The driver's CreateContext function - * is then called. - */ -static int -ProcXpCreateContext(ClientPtr client) -{ - REQUEST(xPrintCreateContextReq); - XpScreenPtr pPrintScreen; - WindowPtr pRoot; - char *driverName; - XpContextPtr pContext; - int result = Success; - XpDriverPtr pDriver; - - REQUEST_AT_LEAST_SIZE(xPrintCreateContextReq); - - LEGAL_NEW_RESOURCE(stuff->contextID, client); - - /* - * Check to see if the printer name is valid. - */ - if((pRoot = XpDiValidatePrinter((char *)(stuff + 1), stuff->printerNameLen)) == - (WindowPtr)NULL) - return BadMatch; - - pPrintScreen = XpScreens[pRoot->drawable.pScreen->myNum]; - - /* - * Allocate and add the context resource. - */ - if((pContext = (XpContextPtr) xalloc(sizeof(XpContextRec))) == - (XpContextPtr) NULL) - return BadAlloc; - - if(AddResource(stuff->contextID, RTcontext, (pointer) pContext) - != TRUE) - { - xfree(pContext); - return BadAlloc; - } - - pContext->contextID = stuff->contextID; - pContext->clientHead = (XpClientPtr)NULL; - pContext->screenNum = pRoot->drawable.pScreen->myNum; - pContext->state = 0; - pContext->clientSlept = (ClientPtr)NULL; - pContext->imageRes = 0; - pContext->devPrivates = NULL; - - pContext->funcs.DestroyContext = 0; - pContext->funcs.StartJob = 0; - pContext->funcs.EndJob = 0; - pContext->funcs.StartDoc = 0; - pContext->funcs.EndDoc = 0; - pContext->funcs.StartPage = 0; - pContext->funcs.EndPage = 0; - pContext->funcs.PutDocumentData = 0; - pContext->funcs.GetDocumentData = 0; - pContext->funcs.GetAttributes = 0; - pContext->funcs.GetOneAttribute = 0; - pContext->funcs.SetAttributes = 0; - pContext->funcs.AugmentAttributes = 0; - pContext->funcs.GetMediumDimensions = 0; - pContext->funcs.GetReproducibleArea = 0; - pContext->funcs.SetImageResolution = 0; - - if((pContext->printerName = (char *)xalloc(stuff->printerNameLen + 1)) == - (char *)NULL) - { - /* Freeing the context also causes the XpClients to be freed. */ - FreeResource(stuff->contextID, RT_NONE); - return BadAlloc; - } - strncpy(pContext->printerName, (char *)(stuff + 1), stuff->printerNameLen); - pContext->printerName[stuff->printerNameLen] = (char)'\0'; - - driverName = XpDiGetDriverName(pRoot->drawable.pScreen->myNum, - pContext->printerName); - - for(pDriver = pPrintScreen->drivers; - pDriver != (XpDriverPtr)NULL; - pDriver = pDriver->next) - { - if(!strcmp(driverName, pDriver->name)) - { - if(pDriver->CreateContext != 0) - pDriver->CreateContext(pContext); - else - return BadImplementation; - break; - } - } - - if (client->noClientException != Success) - return client->noClientException; - else - return result; -} - -/* - * SetContext creates the calling client's contextClient resource, - * and stashes the contextID in the client's devPrivate. - */ -static int -ProcXpSetContext(ClientPtr client) -{ - REQUEST(xPrintSetContextReq); - - XpContextPtr pContext; - XpClientPtr pPrintClient; - int result = Success; - - REQUEST_AT_LEAST_SIZE(xPrintSetContextReq); - - if((pContext = XP_GETPRIV(client)) != (pointer)NULL) - { - /* - * Erase this client's knowledge of its old context, if any. - */ - if((pPrintClient = FindClient(pContext, client)) != (XpClientPtr)NULL) - { - XpUnsetFontResFunc(client); - - if(pPrintClient->eventMask == 0) - FreeXpClient(pPrintClient, TRUE); - } - - XP_SETPRIV(client, NULL); - } - if(stuff->printContext == None) - return Success; - - /* - * Check to see that the supplied XID is really a valid print context - * in this server. - */ - if((pContext =(XpContextPtr)SecurityLookupIDByType(client, - stuff->printContext, - RTcontext, - DixWriteAccess)) - == (XpContextPtr)NULL) - { - client->errorValue = stuff->printContext; - return XpErrorBase+XPBadContext; - } - - if((pPrintClient = AcquireClient(pContext, client)) == (XpClientPtr)NULL) - return BadAlloc; - - XP_SETPRIV(client, pContext); - - XpSetFontResFunc(client); - - if (client->noClientException != Success) - return client->noClientException; - else - return result; -} - -XpContextPtr -XpGetPrintContext(ClientPtr client) -{ - return XP_GETPRIV(client); -} - -static int -ProcXpGetContext(ClientPtr client) -{ - /* REQUEST(xPrintGetContextReq); */ - xPrintGetContextReply rep; - - XpContextPtr pContext; - register int n; - register long l; - - REQUEST_SIZE_MATCH(xPrintGetContextReq); - - if((pContext = XP_GETPRIV(client)) == (pointer)NULL) - rep.printContext = None; - else - rep.printContext = pContext->contextID; - rep.type = X_Reply; - rep.length = 0; - rep.sequenceNumber = client->sequence; - if (client->swapped) { - swaps(&rep.sequenceNumber, n); - swapl(&rep.length, l); - swapl(&rep.printContext, l); - } - WriteToClient(client, sz_xPrintGetContextReply, (char *)&rep); - return client->noClientException; -} - - -/* - * DestroyContext frees the context associated with the calling client. - * It operates by freeing the context resource ID, thus causing XpFreeContext - * to be called. - */ -static int -ProcXpDestroyContext(ClientPtr client) -{ - REQUEST(xPrintDestroyContextReq); - - XpContextPtr pContext; - - REQUEST_SIZE_MATCH(xPrintDestroyContextReq); - - if((pContext =(XpContextPtr)SecurityLookupIDByType(client, - stuff->printContext, - RTcontext, - DixDestroyAccess)) - == (XpContextPtr)NULL) - { - client->errorValue = stuff->printContext; - return XpErrorBase+XPBadContext; - } - - XpUnsetFontResFunc(client); - - FreeResource(pContext->contextID, RT_NONE); - - return Success; -} - -static int -ProcXpGetContextScreen(ClientPtr client) -{ - REQUEST(xPrintGetContextScreenReq); - xPrintGetContextScreenReply rep; - XpContextPtr pContext; - int n; - long l; - - if((pContext =(XpContextPtr)SecurityLookupIDByType(client, - stuff->printContext, - RTcontext, - DixReadAccess)) - == (XpContextPtr)NULL) - return XpErrorBase+XPBadContext; - - rep.type = X_Reply; - rep.sequenceNumber = client->sequence; - rep.length = 0; - rep.rootWindow = WindowTable[pContext->screenNum]->drawable.id; - - if (client->swapped) { - swaps(&rep.sequenceNumber, n); - swapl(&rep.length, l); - swapl(&rep.rootWindow, l); - } - - WriteToClient(client, sz_xPrintGetContextScreenReply, (char *)&rep); - return client->noClientException; -} - -/* - * XpFreeContext is the routine called by dix:FreeResource when a context - * resource ID is freed. - * It checks to see if there's a partial job pending on the context, and - * if so it calls the appropriate End procs with the cancel flag set. - * It calls the driver's DestroyContext routine to allow the driver to clean - * up any context-related memory or state. - * It calls FreeXpClient to free all the - * associated XpClientRecs and to set all the client->devPrivates to NULL. - * It frees the printer name string, and frees the context - * itself. - */ -static int -XpFreeContext(pointer data, XID id) -{ - XpContextPtr pContext = (XpContextPtr)data; - - /* Clean up any pending job on this context */ - if(pContext->state != 0) - { - if(pContext->state & PAGE_STARTED) - { - WindowPtr pWin = (WindowPtr )LookupIDByType( - pContext->pageWin, RT_WINDOW); - XpPagePtr pPage = (XpPagePtr)LookupIDByType( - pContext->pageWin, RTpage); - - pContext->funcs.EndPage(pContext, pWin); - SendXpNotify(pContext, XPEndPageNotify, TRUE); - pContext->state &= ~PAGE_STARTED; - if(pPage) - pPage->context = (XpContextPtr)NULL; - } - if((pContext->state & DOC_RAW_STARTED) || - (pContext->state & DOC_COOKED_STARTED)) - { - pContext->funcs.EndDoc(pContext, TRUE); - SendXpNotify(pContext, XPEndDocNotify, TRUE); - pContext->state &= ~DOC_RAW_STARTED; - pContext->state &= ~DOC_COOKED_STARTED; - } - if(pContext->funcs.EndJob != 0) - { - pContext->funcs.EndJob(pContext, TRUE); - SendXpNotify(pContext, XPEndJobNotify, TRUE); - pContext->state &= ~JOB_STARTED; - pContext->state &= ~GET_DOC_DATA_STARTED; - } - } - - /* - * Tell the driver we're destroying the context - * This allows the driver to free and ContextPrivate data - */ - if(pContext->funcs.DestroyContext != 0) - pContext->funcs.DestroyContext(pContext); - - /* Free up all the XpClientRecs */ - while(pContext->clientHead != (XpClientPtr)NULL) - { - FreeXpClient(pContext->clientHead, TRUE); - } - - xfree(pContext->printerName); - dixFreePrivates(pContext->devPrivates); - xfree(pContext); - return Success; /* ??? */ -} - -/* - * XpFreeClient is the routine called by dix:FreeResource when a RTclient - * is freed. It simply calls the FreeXpClient routine to do the work. - */ -static int -XpFreeClient(pointer data, XID id) -{ - FreeXpClient((XpClientPtr)data, TRUE); - return Success; -} - -/* - * FreeXpClient - * frees the ClientRec passed in, and sets the client->devPrivates to NULL - * if the client->devPrivates points to the same context as the XpClient. - * Called from XpFreeContext(from FreeResource), and - * XpFreeClient. The boolean freeResource specifies whether or not to call - * FreeResource for the XpClientRec's XID. We should free it except if we're - * called from XpFreeClient (which is itself called from FreeResource for the - * XpClientRec's XID). - */ -static void -FreeXpClient(XpClientPtr pXpClient, Bool freeResource) -{ - XpClientPtr pCurrent, pPrev; - XpContextPtr pContext = pXpClient->context; - - /* - * If we're freeing the clientRec associated with the context tied - * to the client's devPrivates, then we need to clear the devPrivates. - */ - if(XP_GETPRIV(pXpClient->client) == pXpClient->context) - { - XP_SETPRIV(pXpClient->client, NULL); - } - - for(pPrev = (XpClientPtr)NULL, pCurrent = pContext->clientHead; - pCurrent != (XpClientPtr)NULL; - pCurrent = pCurrent->pNext) - { - if(pCurrent == pXpClient) - { - if(freeResource == TRUE) - FreeResource (pCurrent->contextClientID, RTclient); - - if (pPrev != (XpClientPtr)NULL) - pPrev->pNext = pCurrent->pNext; - else - pContext->clientHead = pCurrent->pNext; - - xfree (pCurrent); - break; - } - pPrev = pCurrent; - } -} - -/* - * CreateXpClient takes a ClientPtr and returns a pointer to a - * XpClientRec which it allocates. It also initializes the Rec, - * including adding a resource on behalf of the client to enable the - * freeing of the Rec when the client's connection is closed. - */ -static XpClientPtr -CreateXpClient(ClientPtr client) -{ - XpClientPtr pNewPrintClient; - XID clientResource; - - if((pNewPrintClient = (XpClientPtr)xalloc(sizeof(XpClientRec))) == - (XpClientPtr)NULL) - return (XpClientPtr)NULL; - - clientResource = FakeClientID(client->index); - if(!AddResource(clientResource, RTclient, (pointer)pNewPrintClient)) - { - xfree (pNewPrintClient); - return (XpClientPtr)NULL; - } - - pNewPrintClient->pNext = (XpClientPtr)NULL; - pNewPrintClient->client = client; - pNewPrintClient->context = (XpContextPtr)NULL; - pNewPrintClient->eventMask = 0; - pNewPrintClient->contextClientID = clientResource; - - return pNewPrintClient; -} - -/* - * XpFreePage is the routine called by dix:FreeResource to free the page - * resource built with the same ID as a page window. It checks to see - * if we're in the middle of a page, and if so calls the driver's EndPage - * function with 'cancel' set TRUE. It frees the memory associated with - * the page resource. - */ -static int -XpFreePage(pointer data, XID id) -{ - XpPagePtr page = (XpPagePtr)data; - int result = Success; - WindowPtr pWin = (WindowPtr )LookupIDByType(id, RT_WINDOW); - - /* Check to see if the window's being deleted in the middle of a page */ - if(page->context != (XpContextPtr)NULL && - page->context->state & PAGE_STARTED) - { - if(page->context->funcs.EndPage != 0) - result = page->context->funcs.EndPage(page->context, pWin); - SendXpNotify(page->context, XPEndPageNotify, (int)TRUE); - page->context->pageWin = 0; /* None, NULL??? XXX */ - } - - xfree(page); - return result; -} - -static XpClientPtr -AcquireClient(XpContextPtr pContext, ClientPtr client) -{ - XpClientPtr pXpClient; - - if((pXpClient = FindClient(pContext, client)) != (XpClientPtr)NULL) - return pXpClient; - - if((pXpClient = CreateXpClient(client)) == (XpClientPtr)NULL) - return (XpClientPtr)NULL; - - pXpClient->context = pContext; - pXpClient->pNext = pContext->clientHead; - pContext->clientHead = pXpClient; - - return pXpClient; -} - -static XpClientPtr -FindClient(XpContextPtr pContext, ClientPtr client) -{ - XpClientPtr pXpClient; - - for(pXpClient = pContext->clientHead; pXpClient != (XpClientPtr)NULL; - pXpClient = pXpClient->pNext) - { - if(pXpClient->client == client) return pXpClient; - } - return (XpClientPtr)NULL; -} - - -/****************************************************************************** - * - * Start/End Functions: StartJob, EndJob, StartDoc, EndDoc, StartPage, EndPage - * - ******************************************************************************/ - -static int -ProcXpStartJob(ClientPtr client) -{ - REQUEST(xPrintStartJobReq); - XpContextPtr pContext; - int result = Success; - - REQUEST_SIZE_MATCH(xPrintStartJobReq); - - /* Check to see that a context has been established by this client. */ - if((pContext = XP_GETPRIV(client)) == (XpContextPtr)NULL) - return XpErrorBase+XPBadContext; - - if(pContext->state != 0) - return XpErrorBase+XPBadSequence; - - if(stuff->saveData != XPSpool && stuff->saveData != XPGetData) - { - client->errorValue = stuff->saveData; - return BadValue; - } - - if(pContext->funcs.StartJob != 0) - result = pContext->funcs.StartJob(pContext, - (stuff->saveData == XPGetData)? TRUE:FALSE, - client); - else - return BadImplementation; - - pContext->state = JOB_STARTED; - if(stuff->saveData == XPGetData) - pContext->state |= JOB_GET_DATA; - - SendXpNotify(pContext, XPStartJobNotify, FALSE); - - if (client->noClientException != Success) - return client->noClientException; - else - return result; -} - -static int -ProcXpEndJob(ClientPtr client) -{ - REQUEST(xPrintEndJobReq); - int result = Success; - XpContextPtr pContext; - - REQUEST_SIZE_MATCH(xPrintEndJobReq); - - if((pContext = XP_GETPRIV(client)) == (XpContextPtr)NULL) - return XpErrorBase+XPBadSequence; - - if(!(pContext->state & JOB_STARTED)) - return XpErrorBase+XPBadSequence; - - /* Check for missing EndDoc */ - if((pContext->state & DOC_RAW_STARTED) || - (pContext->state & DOC_COOKED_STARTED)) - { - if(pContext->state & PAGE_STARTED) - { - WindowPtr pWin = (WindowPtr )LookupIDByType( - pContext->pageWin, RT_WINDOW); - XpPagePtr pPage = (XpPagePtr)LookupIDByType( - pContext->pageWin, RTpage); - - if(stuff->cancel != TRUE) - return XpErrorBase+XPBadSequence; - - if(pContext->funcs.EndPage != 0) - result = pContext->funcs.EndPage(pContext, pWin); - else - return BadImplementation; - - SendXpNotify(pContext, XPEndPageNotify, TRUE); - - pContext->state &= ~PAGE_STARTED; - - if(pPage) - pPage->context = (XpContextPtr)NULL; - - if(result != Success) return result; - } - - if(pContext->funcs.EndDoc != 0) - result = pContext->funcs.EndDoc(pContext, stuff->cancel); - else - return BadImplementation; - - SendXpNotify(pContext, XPEndDocNotify, stuff->cancel); - } - - if(pContext->funcs.EndJob != 0) - result = pContext->funcs.EndJob(pContext, stuff->cancel); - else - return BadImplementation; - - pContext->state = 0; - - SendXpNotify(pContext, XPEndJobNotify, stuff->cancel); - - if (client->noClientException != Success) - return client->noClientException; - else - return result; -} - -static Bool -DoStartDoc(ClientPtr client, XpStDocPtr c) -{ - XpContextPtr pContext = c->pContext; - - if(c->pContext->state & JOB_GET_DATA && - !(c->pContext->state & GET_DOC_DATA_STARTED)) - { - if(!c->slept) - { - c->slept = TRUE; - ClientSleep(client, (ClientSleepProcPtr)DoStartDoc, (pointer) c); - c->pContext->clientSlept = client; - } - return TRUE; - } - - if(pContext->funcs.StartDoc != 0) - (void) pContext->funcs.StartDoc(pContext, c->type); - else - { - SendErrorToClient(client, XpReqCode, X_PrintStartPage, 0, - BadImplementation); - return TRUE; - } - - if(c->type == XPDocNormal) - pContext->state |= DOC_COOKED_STARTED; - else - pContext->state |= DOC_RAW_STARTED; - - SendXpNotify(pContext, XPStartDocNotify, (int)FALSE); - - xfree(c); - return TRUE; -} - -static int -ProcXpStartDoc(ClientPtr client) -{ - REQUEST(xPrintStartDocReq); - int result = Success; - XpContextPtr pContext; - XpStDocPtr c; - - REQUEST_SIZE_MATCH(xPrintStartDocReq); - - if((pContext = XP_GETPRIV(client)) == (XpContextPtr)NULL) - return XpErrorBase+XPBadSequence; - - if(!(pContext->state & JOB_STARTED) || - pContext->state & DOC_RAW_STARTED || - pContext->state & DOC_COOKED_STARTED) - return XpErrorBase+XPBadSequence; - - if(stuff->type != XPDocNormal && stuff->type != XPDocRaw) - { - client->errorValue = stuff->type; - return BadValue; - } - - c = (XpStDocPtr)xalloc(sizeof(XpStDocRec)); - c->pContext = pContext; - c->type = stuff->type; - c->slept = FALSE; - (void)DoStartDoc(client, c); - - if (client->noClientException != Success) - return client->noClientException; - else - return result; -} - -static int -ProcXpEndDoc(ClientPtr client) -{ - REQUEST(xPrintEndDocReq); - XpContextPtr pContext; - int result = Success; - - REQUEST_SIZE_MATCH(xPrintEndDocReq); - - if((pContext = XP_GETPRIV(client)) == (XpContextPtr)NULL) - return XpErrorBase+XPBadSequence; - - if(!(pContext->state & DOC_RAW_STARTED) && - !(pContext->state & DOC_COOKED_STARTED)) - return XpErrorBase+XPBadSequence; - - if(pContext->state & PAGE_STARTED) - { - if(stuff->cancel == TRUE) - { - WindowPtr pWin = (WindowPtr )LookupIDByType( - pContext->pageWin, RT_WINDOW); - XpPagePtr pPage = (XpPagePtr)LookupIDByType( - pContext->pageWin, RTpage); - - if(pContext->funcs.EndPage != 0) - result = pContext->funcs.EndPage(pContext, pWin); - else - return BadImplementation; - - SendXpNotify(pContext, XPEndPageNotify, TRUE); - - if(pPage) - pPage->context = (XpContextPtr)NULL; - } - else - return XpErrorBase+XPBadSequence; - if(result != Success) - return result; - } - - if(pContext->funcs.EndDoc != 0) - result = pContext->funcs.EndDoc(pContext, stuff->cancel); - else - return BadImplementation; - - pContext->state &= ~DOC_RAW_STARTED; - pContext->state &= ~DOC_COOKED_STARTED; - - SendXpNotify(pContext, XPEndDocNotify, stuff->cancel); - - if (client->noClientException != Success) - return client->noClientException; - else - return result; -} - -static Bool -DoStartPage( - ClientPtr client, - XpStPagePtr c) -{ - WindowPtr pWin = c->pWin; - int result = Success; - XpContextPtr pContext = c->pContext; - XpPagePtr pPage; - - if(c->pContext->state & JOB_GET_DATA && - !(c->pContext->state & GET_DOC_DATA_STARTED)) - { - if(!c->slept) - { - c->slept = TRUE; - ClientSleep(client, (ClientSleepProcPtr)DoStartPage, (pointer) c); - c->pContext->clientSlept = client; - } - return TRUE; - } - - if(!(pContext->state & DOC_COOKED_STARTED)) - { - /* Implied StartDoc if it was omitted */ - if(pContext->funcs.StartDoc != 0) - result = pContext->funcs.StartDoc(pContext, XPDocNormal); - else - { - SendErrorToClient(client, XpReqCode, X_PrintStartPage, 0, - BadImplementation); - return TRUE; - } - - if(result != Success) - { - SendErrorToClient(client, XpReqCode, X_PrintStartPage, 0, result); - return TRUE; - } - - pContext->state |= DOC_COOKED_STARTED; - SendXpNotify(pContext, XPStartDocNotify, (int)FALSE); - } - - /* ensure the window's not already being used as a page */ - if((pPage = (XpPagePtr)LookupIDByType(c->pWin->drawable.id, RTpage)) != - (XpPagePtr)NULL) - { - if(pPage->context != (XpContextPtr)NULL) - { - SendErrorToClient(client, XpReqCode, X_PrintStartPage, 0, - BadWindow); - return TRUE; - } - } - else - { - if((pPage = (XpPagePtr)xalloc(sizeof(XpPageRec))) == (XpPagePtr)NULL) - { - SendErrorToClient(client, XpReqCode, X_PrintStartPage, 0, - BadAlloc); - return TRUE; - } - if(AddResource(c->pWin->drawable.id, RTpage, pPage) == FALSE) - { - xfree(pPage); - SendErrorToClient(client, XpReqCode, X_PrintStartPage, 0, - BadAlloc); - return TRUE; - } - } - - pPage->context = pContext; - pContext->pageWin = c->pWin->drawable.id; - - if(pContext->funcs.StartPage != 0) - result = pContext->funcs.StartPage(pContext, pWin); - else - { - SendErrorToClient(client, XpReqCode, X_PrintStartPage, 0, - BadImplementation); - return TRUE; - } - - pContext->state |= PAGE_STARTED; - - (void)MapWindow(pWin, client); - - SendXpNotify(pContext, XPStartPageNotify, (int)FALSE); - - return TRUE; -} - -static int -ProcXpStartPage(ClientPtr client) -{ - REQUEST(xPrintStartPageReq); - WindowPtr pWin; - int result = Success; - XpContextPtr pContext; - XpStPagePtr c; - - REQUEST_SIZE_MATCH(xPrintStartPageReq); - - if((pContext = XP_GETPRIV(client)) == (XpContextPtr)NULL) - return XpErrorBase+XPBadSequence; - - if(!(pContext->state & JOB_STARTED)) - return XpErrorBase+XPBadSequence; - - /* can't have pages in a raw documented */ - if(pContext->state & DOC_RAW_STARTED) - return XpErrorBase+XPBadSequence; - - if(pContext->state & PAGE_STARTED) - return XpErrorBase+XPBadSequence; - - result = dixLookupWindow(&pWin, stuff->window, client, DixWriteAccess); - if (result != Success) - return result; - if (pWin->drawable.pScreen->myNum != pContext->screenNum) - return BadWindow; - - if((c = (XpStPagePtr)xalloc(sizeof(XpStPageRec))) == (XpStPagePtr)NULL) - return BadAlloc; - c->pContext = pContext; - c->slept = FALSE; - c->pWin = pWin; - - (void)DoStartPage(client, c); - - if (client->noClientException != Success) - return client->noClientException; - else - return result; -} - -static int -ProcXpEndPage(ClientPtr client) -{ - REQUEST(xPrintEndPageReq); - int result = Success; - XpContextPtr pContext; - XpPagePtr page; - WindowPtr pWin; - - REQUEST_SIZE_MATCH(xPrintEndPageReq); - - if((pContext = XP_GETPRIV(client)) == (XpContextPtr)NULL) - return XpErrorBase+XPBadSequence; - - if(!(pContext->state & PAGE_STARTED)) - return XpErrorBase+XPBadSequence; - - pWin = (WindowPtr )LookupIDByType(pContext->pageWin, RT_WINDOW); - - /* Call the ddx's EndPage proc. */ - if(pContext->funcs.EndPage != 0) - result = pContext->funcs.EndPage(pContext, pWin); - else - return BadImplementation; - - if((page = (XpPagePtr)LookupIDByType(pContext->pageWin, RTpage)) != - (XpPagePtr)NULL) - page->context = (XpContextPtr)NULL; - - pContext->state &= ~PAGE_STARTED; - pContext->pageWin = 0; /* None, NULL??? XXX */ - - (void)UnmapWindow(pWin, FALSE); - - SendXpNotify(pContext, XPEndPageNotify, stuff->cancel); - - if (client->noClientException != Success) - return client->noClientException; - else - return result; -} - -/******************************************************************************* - * - * Document Data Functions: PutDocumentData, GetDocumentData - * - ******************************************************************************/ - -static int -ProcXpPutDocumentData(ClientPtr client) -{ - REQUEST(xPrintPutDocumentDataReq); - XpContextPtr pContext; - DrawablePtr pDraw; - int result = Success; - unsigned totalSize; - char *pData, *pDoc_fmt, *pOptions; - - REQUEST_AT_LEAST_SIZE(xPrintPutDocumentDataReq); - - if((pContext = XP_GETPRIV(client)) == (XpContextPtr)NULL) - return XpErrorBase+XPBadSequence; - - if(!(pContext->state & DOC_RAW_STARTED) && - !(pContext->state & DOC_COOKED_STARTED)) - return XpErrorBase+XPBadSequence; - - if (stuff->drawable) { - if (pContext->state & DOC_RAW_STARTED) - return BadDrawable; - result = dixLookupDrawable(&pDraw, stuff->drawable, client, 0, - DixWriteAccess); - if (result != Success) - return result; - if (pDraw->pScreen->myNum != pContext->screenNum) - return BadDrawable; - } else { - if (pContext->state & DOC_COOKED_STARTED) - return BadDrawable; - pDraw = NULL; - } - - pData = (char *)(&stuff[1]); - - totalSize = (stuff->len_data + 3) >> 2; - pDoc_fmt = pData + (totalSize << 2); - - totalSize += (stuff->len_fmt + 3) >> 2; - pOptions = pData + (totalSize << 2); - - totalSize += (stuff->len_options + 3) >> 2; - if((totalSize + (sz_xPrintPutDocumentDataReq >> 2)) != client->req_len) - return BadLength; - - if(pContext->funcs.PutDocumentData != 0) - { - result = (*pContext->funcs.PutDocumentData)(pContext, pDraw, - pData, stuff->len_data, - pDoc_fmt, stuff->len_fmt, - pOptions, stuff->len_options, - client); - } - else - return BadImplementation; - - if (client->noClientException != Success) - return client->noClientException; - else - return result; -} - -static int -ProcXpGetDocumentData(ClientPtr client) -{ - REQUEST(xPrintGetDocumentDataReq); - xPrintGetDocumentDataReply rep; - XpContextPtr pContext; - int result = Success; - - REQUEST_SIZE_MATCH(xPrintGetDocumentDataReq); - - if((pContext = (XpContextPtr)SecurityLookupIDByType(client, - stuff->printContext, - RTcontext, - DixWriteAccess)) - == (XpContextPtr)NULL) - { - client->errorValue = stuff->printContext; - return XpErrorBase+XPBadContext; - } - - if(pContext->funcs.GetDocumentData == 0) - return BadImplementation; - - if(!(pContext->state & JOB_GET_DATA) || - pContext->state & GET_DOC_DATA_STARTED) - return XpErrorBase+XPBadSequence; - - if(stuff->maxBufferSize <= 0) - { - client->errorValue = stuff->maxBufferSize; - return BadValue; /* gotta have a positive buffer size */ - } - - result = (*pContext->funcs.GetDocumentData)(pContext, client, - stuff->maxBufferSize); - if(result != Success) - { - rep.type = X_Reply; - rep.sequenceNumber = client->sequence; - rep.length = 0; - rep.dataLen = 0; - rep.statusCode = 1; - rep.finishedFlag = TRUE; - if (client->swapped) { - int n; - long l; - - swaps(&rep.sequenceNumber, n); - swapl(&rep.statusCode, l); /* XXX Why are these longs??? */ - swapl(&rep.finishedFlag, l); /* XXX Why are these longs??? */ - } - (void)WriteToClient(client,sz_xPrintGetDocumentDataReply,(char *)&rep); - } - else - pContext->state |= GET_DOC_DATA_STARTED; - - if(pContext->clientSlept != (ClientPtr)NULL) - { - ClientSignal(pContext->clientSlept); - ClientWakeup(pContext->clientSlept); - pContext->clientSlept = (ClientPtr)NULL; - } - - return result; -} - -/******************************************************************************* - * - * Attribute requests: GetAttributes, SetAttributes, GetOneAttribute - * - ******************************************************************************/ - -static int -ProcXpGetAttributes(ClientPtr client) -{ - REQUEST(xPrintGetAttributesReq); - XpContextPtr pContext; - char *attrs; - xPrintGetAttributesReply *pRep; - int totalSize, n; - unsigned long l; - - REQUEST_SIZE_MATCH(xPrintGetAttributesReq); - - if(stuff->type < XPJobAttr || stuff->type > XPServerAttr) - { - client->errorValue = stuff->type; - return BadValue; - } - - if(stuff->type != XPServerAttr) - { - if((pContext = (XpContextPtr)SecurityLookupIDByType( - client, - stuff->printContext, - RTcontext, - DixReadAccess)) - == (XpContextPtr)NULL) - { - client->errorValue = stuff->printContext; - return XpErrorBase+XPBadContext; - } - - if(pContext->funcs.GetAttributes == 0) - return BadImplementation; - if((attrs = (*pContext->funcs.GetAttributes)(pContext, stuff->type)) == - (char *)NULL) - return BadAlloc; - } - else - { - if((attrs = XpGetAttributes((XpContextPtr)NULL, XPServerAttr)) == - (char *)NULL) - return BadAlloc; - } - - totalSize = sz_xPrintGetAttributesReply + QUADPAD(strlen(attrs)); - if((pRep = (xPrintGetAttributesReply *)malloc(totalSize)) == - (xPrintGetAttributesReply *)NULL) - return BadAlloc; - - pRep->type = X_Reply; - pRep->length = (totalSize - sz_xPrintGetAttributesReply) >> 2; - pRep->sequenceNumber = client->sequence; - pRep->stringLen = strlen(attrs); - - if (client->swapped) { - swaps(&pRep->sequenceNumber, n); - swapl(&pRep->length, l); - swapl(&pRep->stringLen, l); - } - - strncpy((char*)(pRep + 1), attrs, strlen(attrs)); - xfree(attrs); - - WriteToClient(client, totalSize, (char *)pRep); - - xfree(pRep); - - return client->noClientException; -} - -static int -ProcXpSetAttributes(ClientPtr client) -{ - REQUEST(xPrintSetAttributesReq); - int result = Success; - XpContextPtr pContext; - char *attr; - - REQUEST_AT_LEAST_SIZE(xPrintSetAttributesReq); - - if(stuff->type < XPJobAttr || stuff->type > XPServerAttr) - { - client->errorValue = stuff->type; - return BadValue; - } - - /* - * Disallow changing of read-only attribute pools - */ - if(stuff->type == XPPrinterAttr || stuff->type == XPServerAttr) - return BadMatch; - - if((pContext = (XpContextPtr)SecurityLookupIDByType( - client, - stuff->printContext, - RTcontext, - DixWriteAccess)) - == (XpContextPtr)NULL) - { - client->errorValue = stuff->printContext; - return XpErrorBase+XPBadContext; - } - - if(pContext->funcs.SetAttributes == 0) - return BadImplementation; - - /* - * Check for attributes being set after their relevant phase - * has already begun (e.g. Job attributes set after StartJob). - */ - if((pContext->state & JOB_STARTED) && stuff->type == XPJobAttr) - return XpErrorBase+XPBadSequence; - if(((pContext->state & DOC_RAW_STARTED) || - (pContext->state & DOC_COOKED_STARTED)) && stuff->type == XPDocAttr) - return XpErrorBase+XPBadSequence; - if((pContext->state & PAGE_STARTED) && stuff->type == XPPageAttr) - return XpErrorBase+XPBadSequence; - - if((attr = (char *)malloc(stuff->stringLen + 1)) == (char *)NULL) - return BadAlloc; - - strncpy(attr, (char *)(stuff + 1), stuff->stringLen); - attr[stuff->stringLen] = (char)'\0'; - - if(stuff->rule == XPAttrReplace) - (*pContext->funcs.SetAttributes)(pContext, stuff->type, attr); - else if(stuff->rule == XPAttrMerge) - (*pContext->funcs.AugmentAttributes)(pContext, stuff->type, attr); - else - { - client->errorValue = stuff->rule; - result = BadValue; - } - - xfree(attr); - - SendAttributeNotify(pContext, stuff->type); - - return result; -} - -static int -ProcXpGetOneAttribute(ClientPtr client) -{ - REQUEST(xPrintGetOneAttributeReq); - XpContextPtr pContext; - char *value, *attrName; - xPrintGetOneAttributeReply *pRep; - int totalSize; - int n; - unsigned long l; - - REQUEST_AT_LEAST_SIZE(xPrintGetOneAttributeReq); - - totalSize = ((sz_xPrintGetOneAttributeReq) >> 2) + - ((stuff->nameLen + 3) >> 2); - if(totalSize != client->req_len) - return BadLength; - - if(stuff->type < XPJobAttr || stuff->type > XPServerAttr) - { - client->errorValue = stuff->type; - return BadValue; - } - - if((attrName = (char *)malloc(stuff->nameLen + 1)) == (char *)NULL) - return BadAlloc; - strncpy(attrName, (char *)(stuff+1), stuff->nameLen); - attrName[stuff->nameLen] = (char)'\0'; - - if(stuff->type != XPServerAttr) - { - if((pContext = (XpContextPtr)SecurityLookupIDByType( - client, - stuff->printContext, - RTcontext, - DixReadAccess)) - == (XpContextPtr)NULL) - { - client->errorValue = stuff->printContext; - return XpErrorBase+XPBadContext; - } - - if(pContext->funcs.GetOneAttribute == 0) - return BadImplementation; - if((value = (*pContext->funcs.GetOneAttribute)(pContext, stuff->type, - attrName)) == (char *)NULL) - return BadAlloc; - } - else - { - if((value = XpGetOneAttribute((XpContextPtr)NULL, XPServerAttr, - attrName)) == (char *)NULL) - return BadAlloc; - } - - free(attrName); - - totalSize = sz_xPrintGetOneAttributeReply + QUADPAD(strlen(value)); - if((pRep = (xPrintGetOneAttributeReply *)malloc(totalSize)) == - (xPrintGetOneAttributeReply *)NULL) - return BadAlloc; - - pRep->type = X_Reply; - pRep->length = (totalSize - sz_xPrintGetOneAttributeReply) >> 2; - pRep->sequenceNumber = client->sequence; - pRep->valueLen = strlen(value); - - if (client->swapped) { - swaps(&pRep->sequenceNumber, n); - swapl(&pRep->length, l); - swapl(&pRep->valueLen, l); - } - - strncpy((char*)(pRep + 1), value, strlen(value)); - - WriteToClient(client, totalSize, (char *)pRep); - - xfree(pRep); - - return client->noClientException; -} - -/******************************************************************************* - * - * Print Event requests: SelectInput InputSelected, SendXpNotify - * - ******************************************************************************/ - - -static int -ProcXpSelectInput(ClientPtr client) -{ - REQUEST(xPrintSelectInputReq); - int result = Success; - XpContextPtr pContext; - XpClientPtr pPrintClient; - - REQUEST_SIZE_MATCH(xPrintSelectInputReq); - - /* - * Check to see that the supplied XID is really a valid print context - * in this server. - */ - if((pContext=(XpContextPtr)SecurityLookupIDByType(client, - stuff->printContext, - RTcontext, - DixWriteAccess)) - == (XpContextPtr)NULL) - { - client->errorValue = stuff->printContext; - return XpErrorBase+XPBadContext; - } - - if(stuff->eventMask & ~allEvents) - { - client->errorValue = stuff->eventMask; - return BadValue; /* bogus event mask bits */ - } - - if((pPrintClient = AcquireClient(pContext, client)) == (XpClientPtr)NULL) - return BadAlloc; - - pPrintClient->eventMask = stuff->eventMask; - - return result; -} - -static int -ProcXpInputSelected(ClientPtr client) -{ - REQUEST(xPrintInputSelectedReq); - xPrintInputSelectedReply rep; - register int n; - long l; - XpClientPtr pXpClient; - XpContextPtr pContext; - - REQUEST_SIZE_MATCH(xPrintInputSelectedReq); - - if((pContext=(XpContextPtr)SecurityLookupIDByType(client, - stuff->printContext, - RTcontext, - DixReadAccess)) - == (XpContextPtr)NULL) - { - client->errorValue = stuff->printContext; - return XpErrorBase+XPBadContext; - } - - pXpClient = FindClient(pContext, client); - - rep.type = X_Reply; - rep.length = 0; - rep.sequenceNumber = client->sequence; - rep.eventMask = (pXpClient != (XpClientPtr)NULL)? pXpClient->eventMask : 0; - rep.allEventsMask = GetAllEventMasks(pContext); - - if (client->swapped) { - swaps(&rep.sequenceNumber, n); - swapl(&rep.length, l); - swapl(&rep.eventMask, l); - swapl(&rep.allEventsMask, l); - } - - WriteToClient(client, sz_xPrintInputSelectedReply, (char *)&rep); - return client->noClientException; -} - -static void -SendAttributeNotify(XpContextPtr pContext, int which) -{ - XpClientPtr pXpClient; - xPrintAttributeEvent ae; - ClientPtr client; - - pXpClient = pContext->clientHead; - if(pXpClient == (XpClientPtr)NULL) - return; /* Nobody's interested in the events (or this context). */ - - for (pXpClient = pContext->clientHead; - pXpClient != (XpClientPtr)NULL; - pXpClient = pXpClient->pNext) - { - client = pXpClient->client; - if (client == serverClient || client->clientGone || - !(pXpClient->eventMask & XPAttributeMask)) - continue; - ae.type = XPAttributeNotify + XpEventBase; - ae.detail = which; - ae.printContext = pContext->contextID; - ae.sequenceNumber = client->sequence; - WriteEventsToClient (client, 1, (xEvent *) &ae); - } -} - -static void -SendXpNotify(XpContextPtr pContext, int which, int val) -{ - XpClientPtr pXpClient; - xPrintPrintEvent pe; - ClientPtr client; - - pXpClient = pContext->clientHead; - if(pXpClient == (XpClientPtr)NULL) - return; /* Nobody's interested in the events (or this context). */ - - for (pXpClient = pContext->clientHead; - pXpClient != (XpClientPtr)NULL; - pXpClient = pXpClient->pNext) - { - client = pXpClient->client; - if (client == serverClient || client->clientGone || - !(pXpClient->eventMask & XPPrintMask)) - continue; - pe.type = XPPrintNotify + XpEventBase; - pe.detail = which; - pe.printContext = pContext->contextID; - pe.cancel = (Bool)val; - pe.sequenceNumber = client->sequence; - WriteEventsToClient (client, 1, (xEvent *) &pe); - } -} - -static CARD32 -GetAllEventMasks(XpContextPtr pContext) -{ - XpClientPtr pPrintClient; - CARD32 totalMask = (CARD32)0; - - for (pPrintClient = pContext->clientHead; - pPrintClient != (XpClientPtr)NULL; - pPrintClient = pPrintClient->pNext) - { - totalMask |= pPrintClient->eventMask; - } - return totalMask; -} - -/* - * XpContextOfClient - returns the XpContextPtr to the context - * associated with the specified client, or NULL if the client - * does not currently have a context set. - */ -XpContextPtr -XpContextOfClient(ClientPtr client) -{ - return XP_GETPRIV(client); -} - - -/******************************************************************************* - * - * Swap-request functions - * - ******************************************************************************/ - -static int -SProcXpCreateContext(ClientPtr client) -{ - int i; - long n; - - REQUEST(xPrintCreateContextReq); - - swaps(&stuff->length, i); - swapl(&stuff->contextID, n); - swapl(&stuff->printerNameLen, n); - swapl(&stuff->localeLen, n); - return ProcXpCreateContext(client); -} - -static int -SProcXpGetPrinterList(ClientPtr client) -{ - int i; - long n; - - REQUEST(xPrintGetPrinterListReq); - - swaps(&stuff->length, i); - swapl(&stuff->printerNameLen, n); - swapl(&stuff->localeLen, n); - return ProcXpGetPrinterList(client); -} - -static int -SProcXpRehashPrinterList(ClientPtr client) -{ - int i; - - REQUEST(xPrintRehashPrinterListReq); - swaps(&stuff->length, i); - return ProcXpRehashPrinterList(client); -} - -static int -SProcXpSetContext(ClientPtr client) -{ - int i; - - REQUEST(xPrintSetContextReq); - swaps(&stuff->length, i); - swapl(&stuff->printContext, i); - return ProcXpSetContext(client); -} - -static int -SProcXpGetContext(ClientPtr client) -{ - int i; - - REQUEST(xPrintGetContextReq); - swaps(&stuff->length, i); - return ProcXpGetContext(client); -} - -static int -SProcXpDestroyContext(ClientPtr client) -{ - int i; - long n; - - REQUEST(xPrintDestroyContextReq); - swaps(&stuff->length, i); - swapl(&stuff->printContext, n); - return ProcXpDestroyContext(client); -} - -static int -SProcXpGetContextScreen(ClientPtr client) -{ - int i; - long n; - - REQUEST(xPrintGetContextScreenReq); - swaps(&stuff->length, i); - swapl(&stuff->printContext, n); - return ProcXpGetContextScreen(client); -} - -static int -SProcXpInputSelected(ClientPtr client) -{ - int i; - long n; - - REQUEST(xPrintInputSelectedReq); - swaps(&stuff->length, i); - swapl(&stuff->printContext, n); - return ProcXpInputSelected(client); -} - -static int -SProcXpStartJob(ClientPtr client) -{ - int i; - - REQUEST(xPrintStartJobReq); - swaps(&stuff->length, i); - return ProcXpStartJob(client); -} - -static int -SProcXpEndJob(ClientPtr client) -{ - int i; - - REQUEST(xPrintEndJobReq); - swaps(&stuff->length, i); - return ProcXpEndJob(client); -} - -static int -SProcXpStartDoc(ClientPtr client) -{ - int i; - - REQUEST(xPrintStartDocReq); - swaps(&stuff->length, i); - return ProcXpStartDoc(client); -} - -static int -SProcXpEndDoc(ClientPtr client) -{ - int i; - - REQUEST(xPrintEndDocReq); - swaps(&stuff->length, i); - return ProcXpEndDoc(client); -} - -static int -SProcXpStartPage(ClientPtr client) -{ - int i; - long n; - - REQUEST(xPrintStartPageReq); - swaps(&stuff->length, i); - swapl(&stuff->window, n); - return ProcXpStartPage(client); -} - -static int -SProcXpEndPage(ClientPtr client) -{ - int i; - - REQUEST(xPrintEndPageReq); - swaps(&stuff->length, i); - return ProcXpEndPage(client); -} - -static int -SProcXpPutDocumentData(ClientPtr client) -{ - long n; - int i; - - REQUEST(xPrintPutDocumentDataReq); - swaps(&stuff->length, i); - swapl(&stuff->drawable, n); - swapl(&stuff->len_data, n); - swaps(&stuff->len_fmt, i); - swaps(&stuff->len_options, i); - return ProcXpPutDocumentData(client); -} - -static int -SProcXpGetDocumentData(ClientPtr client) -{ - long n; - int i; - - REQUEST(xPrintGetDocumentDataReq); - swaps(&stuff->length, i); - swapl(&stuff->printContext, n); - swapl(&stuff->maxBufferSize, n); - return ProcXpGetDocumentData(client); -} - -static int -SProcXpGetAttributes(ClientPtr client) -{ - long n; - int i; - - REQUEST(xPrintGetAttributesReq); - swaps(&stuff->length, i); - swapl(&stuff->printContext, n); - return ProcXpGetAttributes(client); -} - -static int -SProcXpSetAttributes(ClientPtr client) -{ - long n; - int i; - - REQUEST(xPrintSetAttributesReq); - swaps(&stuff->length, i); - swapl(&stuff->printContext, n); - swapl(&stuff->stringLen, n); - return ProcXpSetAttributes(client); -} - -static int -SProcXpGetOneAttribute(ClientPtr client) -{ - long n; - int i; - - REQUEST(xPrintGetOneAttributeReq); - swaps(&stuff->length, i); - swapl(&stuff->printContext, n); - swapl(&stuff->nameLen, n); - return ProcXpGetOneAttribute(client); -} - -static int -SProcXpSelectInput(ClientPtr client) -{ - long n; - int i; - - REQUEST(xPrintSelectInputReq); - swaps(&stuff->length, i); - swapl(&stuff->eventMask, n); - swapl(&stuff->printContext, n); - return ProcXpSelectInput(client); -} - -static int -SProcXpGetPageDimensions(ClientPtr client) -{ - long n; - int i; - - REQUEST(xPrintGetPageDimensionsReq); - swaps(&stuff->length, i); - swapl(&stuff->printContext, n); - return ProcXpGetPageDimensions(client); -} - -static int -SProcXpSetImageResolution(ClientPtr client) -{ - long n; - int i; - - REQUEST(xPrintSetImageResolutionReq); - swaps(&stuff->length, i); - swapl(&stuff->printContext, n); - swaps(&stuff->imageRes, i); - return ProcXpSetImageResolution(client); -} - -static int -SProcXpGetImageResolution(ClientPtr client) -{ - long n; - int i; - - REQUEST(xPrintGetImageResolutionReq); - swaps(&stuff->length, i); - swapl(&stuff->printContext, n); - return ProcXpGetImageResolution(client); -} - -static void -SwapXpNotifyEvent(xPrintPrintEvent *src, xPrintPrintEvent *dst) -{ - /* - * Swap the sequence number and context fields. - */ - cpswaps(src->sequenceNumber, dst->sequenceNumber); - cpswapl(src->printContext, dst->printContext); - - /* - * Copy the byte-long fields. - */ - dst->type = src->type; - dst->detail = src->detail; - dst->cancel = src->cancel; -} - -static void -SwapXpAttributeEvent(xPrintAttributeEvent *src, xPrintAttributeEvent *dst) -{ - /* - * Swap the sequence number and context fields. - */ - cpswaps(src->sequenceNumber, dst->sequenceNumber); - cpswapl(src->printContext, dst->printContext); - - /* - * Copy the byte-long fields. - */ - dst->type = src->type; - dst->detail = src->detail; -} diff --git a/configure.ac b/configure.ac index 9da8a94d5..d78f12292 100644 --- a/configure.ac +++ b/configure.ac @@ -566,7 +566,6 @@ AC_ARG_ENABLE(xvfb, AS_HELP_STRING([--enable-xvfb], [Build Xvfb server AC_ARG_ENABLE(xnest, AS_HELP_STRING([--enable-xnest], [Build Xnest server (default: auto)]), [XNEST=$enableval], [XNEST=auto]) AC_ARG_ENABLE(xquartz, AS_HELP_STRING([--enable-xquartz], [Build Xquartz server for OS-X (default: auto)]), [XQUARTZ=$enableval], [XQUARTZ=auto]) AC_ARG_ENABLE(xwin, AS_HELP_STRING([--enable-xwin], [Build XWin server (default: auto)]), [XWIN=$enableval], [XWIN=auto]) -AC_ARG_ENABLE(xprint, AS_HELP_STRING([--enable-xprint], [Build Xprint extension and server (default: no)]), [XPRINT=$enableval], [XPRINT=no]) AC_ARG_ENABLE(xgl, AS_HELP_STRING([--enable-xgl], [Build Xgl server (default: no)]), [XGL=$enableval], [XGL=no]) AC_ARG_ENABLE(xglx, AS_HELP_STRING([--enable-xglx], [Build Xglx xgl module (default: no)]), [XGLX=$enableval], [XGLX=no]) AC_ARG_ENABLE(xegl, AS_HELP_STRING([--enable-xegl], [Build Xegl xgl module (default: no)]), [XEGL=$enableval], [XEGL=no]) @@ -979,15 +978,6 @@ if test "x$DPMSExtension" = xyes; then AC_DEFINE(DPMSExtension, 1, [Support DPMS extension]) fi -if test "x$XPRINT" = xauto; then - PKG_CHECK_MODULES([XPRINTPROTO], [printproto], [XPRINT=yes], [XPRINT=no]) -fi -AM_CONDITIONAL(XPRINT, [test "x$XPRINT" = xyes]) -if test "x$XPRINT" = xyes; then - AC_DEFINE(XPRINT, 1, [Build Print extension]) - REQUIRED_MODULES="$REQUIRED_MODULES printproto" -fi - if test "x$BUILTIN_FONTS" = xyes; then AC_DEFINE(BUILTIN_FONTS, 1, [Use only built-in fonts]) AC_DEFINE(NOFONTSERVERACCESS, 1, [Avoid using a font server]) @@ -1612,62 +1602,6 @@ if test "x$MFB" = xyes -o "x$AFB" = xyes; then fi fi -dnl Xprint DDX - -AC_MSG_CHECKING([whether to build Xprint DDX]) -AC_MSG_RESULT([$XPRINT]) - -if test "x$XPRINT" = xyes; then - PKG_CHECK_MODULES([XPRINTMODULES], [printproto x11 xfont $XDMCP_MODULES xau]) - XPRINT_CFLAGS="$XPRINTMODULES_CFLAGS -DXPRINT" - XPRINT_LIBS="$XEXT_LIB $DBE_LIB $XTRAP_LIB $RECORD_LIB $RENDER_LIB $COMPOSITE_LIB $RANDR_LIB $XI_LIB $FIXES_LIB $DAMAGE_LIB $XI_LIB $GLX_LIBS $MIEXT_DAMAGE_LIB $XKB_LIB $XKB_STUB_LIB" - XPRINT_SYS_LIBS="$XPRINTMODULES_LIBS" - - xpconfigdir=$libdir/X11/xserver - AC_SUBST([xpconfigdir]) - - AC_PATH_PROG(MKFONTSCALE, mkfontscale) - AC_PATH_PROG(MKFONTDIR, mkfontdir) - - # freetype support code borrowed from lib/XFont - if test x$XP_USE_FREETYPE = xyes; then - AC_DEFINE(XP_USE_FREETYPE,1,[Support FreeType rasterizer in Xprint for nearly all font file formats]) - - if test "$freetype_config" = "auto" ; then - PKG_CHECK_MODULES(FREETYPE, freetype2, - freetype_config=no, freetype_config=yes) - fi - - if test "$freetype_config" = "yes"; then - AC_PATH_PROG(ft_config,freetype-config,no) - if test "$ft_config" = "no"; then - AC_MSG_ERROR([You must have freetype installed; see http://www.freetype.org/]) - fi - else - ft_config="$freetype_config" - fi - - if test "$freetype_config" != "no"; then - FREETYPE_CFLAGS="`$ft_config --cflags`" - FREETYPE_LIBS="`$ft_config --libs`" - fi - FREETYPE_REQUIRES="freetype2" - else - FREETYPE_CFLAGS="" - FREETYPE_LIBS="" - FREETYPE_REQUIRES="" - fi - XPRINT_CFLAGS="$XPRINT_CFLAGS $FREETYPE_CFLAGS" - XPRINT_SYS_LIBS="$XPRINT_SYS_LIBS $FREETYPE_LIBS" - # end freetype support - - AC_SUBST([XPRINT_CFLAGS]) - AC_SUBST([XPRINT_LIBS]) - AC_SUBST([XPRINT_SYS_LIBS]) -fi -AM_CONDITIONAL(XP_USE_FREETYPE, [test "x$XPRINT" = xyes && test "x$XP_USE_FREETYPE" = xyes]) - - dnl XWin DDX AC_MSG_CHECKING([whether to build XWin DDX]) @@ -2188,41 +2122,5 @@ hw/kdrive/smi/Makefile hw/kdrive/src/Makefile hw/kdrive/vesa/Makefile hw/kdrive/via/Makefile -hw/xprint/Makefile -hw/xprint/doc/Makefile -hw/xprint/pcl/Makefile -hw/xprint/pcl-mono/Makefile -hw/xprint/raster/Makefile -hw/xprint/ps/Makefile -hw/xprint/etc/Makefile -hw/xprint/etc/Xsession.d/Makefile -hw/xprint/etc/init.d/Makefile -hw/xprint/etc/profile.d/Makefile -hw/xprint/config/Makefile -hw/xprint/config/C/print/attributes/Makefile -hw/xprint/config/C/print/ddx-config/Makefile -hw/xprint/config/C/print/ddx-config/raster/Makefile -hw/xprint/config/C/print/models/CANONBJ10E-GS/Makefile -hw/xprint/config/C/print/models/PSdefault/fonts/Makefile -hw/xprint/config/C/print/models/PSdefault/Makefile -hw/xprint/config/C/print/models/PSspooldir/Makefile -hw/xprint/config/C/print/models/SPSPARC2/Makefile -hw/xprint/config/C/print/models/SPSPARC2/fonts/Makefile -hw/xprint/config/C/print/models/GSdefault/Makefile -hw/xprint/config/C/print/models/HPLJ4050-PS/Makefile -hw/xprint/config/C/print/models/HPLJ4050-PS/fonts/Makefile -hw/xprint/config/C/print/models/Makefile -hw/xprint/config/C/print/models/PS2PDFspooldir-GS/Makefile -hw/xprint/config/C/print/models/CANONC3200-PS/Makefile -hw/xprint/config/C/print/models/CANONC3200-PS/fonts/Makefile -hw/xprint/config/C/print/models/HPLJ4family/fonts/Makefile -hw/xprint/config/C/print/models/HPLJ4family/Makefile -hw/xprint/config/C/print/models/HPDJ1600C/Makefile -hw/xprint/config/C/print/models/HPDJ1600C/fonts/Makefile -hw/xprint/config/C/print/Makefile -hw/xprint/config/C/Makefile -hw/xprint/config/en_US/print/attributes/Makefile -hw/xprint/config/en_US/print/Makefile -hw/xprint/config/en_US/Makefile xorg-server.pc ]) diff --git a/dix/Makefile.am b/dix/Makefile.am index e44b51081..ac5d344e9 100644 --- a/dix/Makefile.am +++ b/dix/Makefile.am @@ -1,10 +1,6 @@ standard_dix_libs = libdix.la libxpstubs.la -if XPRINT -noinst_LTLIBRARIES = $(standard_dix_libs) libXpdix.la -else noinst_LTLIBRARIES = $(standard_dix_libs) -endif AM_CFLAGS = $(DIX_CFLAGS) \ -DVENDOR_NAME=\""@VENDOR_NAME@"\" \ @@ -45,12 +41,6 @@ libdix_la_SOURCES = \ libxpstubs_la_SOURCES = \ xpstubs.c -if XPRINT -libXpdix_la_SOURCES = $(libdix_la_SOURCES) -libXpdix_la_CPPFLAGS = -I$(top_srcdir)/hw/xprint -libXpdix_la_CFLAGS = $(AM_CFLAGS) $(XPRINT_CFLAGS) -endif - EXTRA_DIST = buildatoms BuiltInAtoms CHANGES Xserver.d Xserver-dtrace.h.in # Install list of protocol names diff --git a/dix/dispatch.c b/dix/dispatch.c index 50259537b..1b81b816a 100644 --- a/dix/dispatch.c +++ b/dix/dispatch.c @@ -399,9 +399,6 @@ Dispatch(void) } isItTimeToYield = FALSE; -#ifdef XPRINT - requestingClient = client; -#endif #ifdef SMART_SCHEDULE start_tick = SmartScheduleTime; #endif @@ -472,9 +469,6 @@ Dispatch(void) client = clients[clientReady[nready]]; if (client) client->smart_stop_tick = SmartScheduleTime; -#endif -#ifdef XPRINT - requestingClient = NULL; #endif } dispatchException &= ~DE_PRIORITYCHANGE; diff --git a/dix/dixfonts.c b/dix/dixfonts.c index 6fb29de3a..0b08e9e53 100644 --- a/dix/dixfonts.c +++ b/dix/dixfonts.c @@ -1937,37 +1937,27 @@ GetDefaultPointSize () FontResolutionPtr GetClientResolutions (int *num) { -#ifdef XPRINT - if (requestingClient && requestingClient->fontResFunc != NULL && - !requestingClient->clientGone) - { - return (*requestingClient->fontResFunc)(requestingClient, num); - } - else -#endif - { - static struct _FontResolution res; - ScreenPtr pScreen; + static struct _FontResolution res; + ScreenPtr pScreen; - pScreen = screenInfo.screens[0]; - res.x_resolution = (pScreen->width * 25.4) / pScreen->mmWidth; - /* - * XXX - we'll want this as long as bitmap instances are prevalent - so that we can match them from scalable fonts - */ - if (res.x_resolution < 88) - res.x_resolution = 75; - else - res.x_resolution = 100; - res.y_resolution = (pScreen->height * 25.4) / pScreen->mmHeight; - if (res.y_resolution < 88) - res.y_resolution = 75; - else - res.y_resolution = 100; - res.point_size = 120; - *num = 1; - return &res; - } + pScreen = screenInfo.screens[0]; + res.x_resolution = (pScreen->width * 25.4) / pScreen->mmWidth; + /* + * XXX - we'll want this as long as bitmap instances are prevalent + so that we can match them from scalable fonts + */ + if (res.x_resolution < 88) + res.x_resolution = 75; + else + res.x_resolution = 100; + res.y_resolution = (pScreen->height * 25.4) / pScreen->mmHeight; + if (res.y_resolution < 88) + res.y_resolution = 75; + else + res.y_resolution = 100; + res.point_size = 120; + *num = 1; + return &res; } /* diff --git a/dix/globals.c b/dix/globals.c index 7f95eabd5..2fb7ba0b3 100644 --- a/dix/globals.c +++ b/dix/globals.c @@ -143,9 +143,6 @@ Bool loadableFonts = FALSE; CursorPtr rootCursor; Bool blackRoot=FALSE; Bool whiteRoot=FALSE; -#ifdef XPRINT -ClientPtr requestingClient; /* XXX this should be obsolete now, remove? */ -#endif _X_EXPORT TimeStamp currentTime; _X_EXPORT TimeStamp lastDeviceEventTime; diff --git a/dix/main.c b/dix/main.c index fbd64138e..8bdfb5b7d 100644 --- a/dix/main.c +++ b/dix/main.c @@ -103,9 +103,6 @@ Equipment Corporation. #include "extnsionst.h" #include "privates.h" #include "registry.h" -#ifdef XPRINT -#include "DiPrint.h" -#endif #ifdef PANORAMIX #include "panoramiXsrv.h" #else @@ -251,9 +248,6 @@ int main(int argc, char *argv[], char *envp[]) InitGlobals(); InitRegions(); -#ifdef XPRINT - PrinterInitGlobals(); -#endif CheckUserParameters(argc, argv, envp); @@ -348,9 +342,6 @@ int main(int argc, char *argv[], char *envp[]) InitCallbackManager(); InitVisualWrap(); InitOutput(&screenInfo, argc, argv); -#ifdef XPRINT - PrinterInitOutput(&screenInfo, argc, argv); -#endif if (screenInfo.numScreens < 1) FatalError("no screens found"); diff --git a/dix/xpstubs.c b/dix/xpstubs.c index 59340ad21..f8cd207eb 100644 --- a/dix/xpstubs.c +++ b/dix/xpstubs.c @@ -31,12 +31,8 @@ from The Open Group. #include "misc.h" #include -#ifdef XPRINT -#include "DiPrint.h" -#else extern Bool XpClientIsBitmapClient(ClientPtr client); extern Bool XpClientIsPrintClient(ClientPtr client, FontPathElementPtr fpe); -#endif Bool XpClientIsBitmapClient( @@ -52,27 +48,3 @@ XpClientIsPrintClient( { return FALSE; } -#ifdef XPRINT -int -PrinterOptions( - int argc, - char **argv, - int i) -{ - return i; -} -void -PrinterInitOutput( - ScreenInfo *pScreenInfo, - int argc, - char **argv) -{ -} -void PrinterUseMsg(void) -{ -} -void PrinterInitGlobals(void) -{ -} -#endif /* XPRINT */ - diff --git a/hw/Makefile.am b/hw/Makefile.am index c2b9571b9..4589b7eef 100644 --- a/hw/Makefile.am +++ b/hw/Makefile.am @@ -26,10 +26,6 @@ if KDRIVE KDRIVE_SUBDIRS = kdrive endif -if XPRINT -XPRINT_SUBDIRS = xprint -endif - if XQUARTZ XQUARTZ_SUBDIRS = xquartz endif @@ -42,10 +38,9 @@ SUBDIRS = \ $(XNEST_SUBDIRS) \ $(DMX_SUBDIRS) \ $(KDRIVE_SUBDIRS) \ - $(XQUARTZ_SUBDIRS) \ - $(XPRINT_SUBDIRS) + $(XQUARTZ_SUBDIRS) -DIST_SUBDIRS = dmx xfree86 vfb xnest xwin xquartz kdrive xgl xprint +DIST_SUBDIRS = dmx xfree86 vfb xnest xwin xquartz kdrive xgl relink: for i in $(SUBDIRS) ; do $(MAKE) -C $$i relink ; done diff --git a/hw/xnest/Font.c b/hw/xnest/Font.c index 9f30085b1..26faf1633 100644 --- a/hw/xnest/Font.c +++ b/hw/xnest/Font.c @@ -44,11 +44,6 @@ xnestRealizeFont(ScreenPtr pScreen, FontPtr pFont) FontSetPrivate(pFont, xnestFontPrivateIndex, NULL); -#ifdef XPRINT - if (requestingClient && XpClientIsPrintClient(requestingClient, NULL)) - return True; -#endif - name_atom = MakeAtom("FONT", 4, True); value_atom = 0L; diff --git a/hw/xprint/AttrValid.c b/hw/xprint/AttrValid.c deleted file mode 100644 index f8c292faa..000000000 --- a/hw/xprint/AttrValid.c +++ /dev/null @@ -1,701 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include - -#include "attributes.h" - -/* - * default medium-source-sizes supported = na-letter w/.25" margins - */ -static XpOidMediumDiscreteSize DefaultMediumSize = { - xpoid_val_medium_size_na_letter, xFalse, {6.35, 209.55, 6.35, 273.05} -}; -static XpOidMediumDiscreteSizeList DefaultMediumSizeList = { - &DefaultMediumSize, 1 -}; -static XpOidMediumSourceSize DefaultMediumSourceSize = { - xpoid_unspecified, XpOidMediumSS_DISCRETE, { &DefaultMediumSizeList } -}; -static XpOidMediumSS DefaultMediumSS = { - &DefaultMediumSourceSize, 1 -}; - -/* - * if 'valid_oid_list' is NULL any oid found is considered valid - */ -XpOid -XpGetOidAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidList* valid_oid_list) -{ - XpOid value_oid; - - value_oid = XpOidFromString(XpGetStringAttr(pContext, pool, oid)); - if((const XpOidList*)NULL == valid_oid_list - || - XpOidListHasOid(valid_oid_list, value_oid)) - { - return value_oid; - } - else - { - return xpoid_none; - } -} - -void -XpPutOidAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - XpOid value_oid) -{ - XpPutStringAttr(pContext, pool, oid, XpOidString(value_oid)); -} - -void -XpValidateOidAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidList* valid_oids, - XpOid default_oid) -{ - XpOid value_oid; - value_oid = XpGetOidAttr(pContext, pool, oid, valid_oids); - XpPutOidAttr(pContext, pool, oid, - value_oid == xpoid_none ? default_oid : value_oid); -} - -/* - * if 'valid_card_list' is NULL any cardinal found is considered valid - */ -unsigned long -XpGetCardAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidCardList* valid_card_list) -{ - unsigned long value_card; - - if(XpOidParseUnsignedValue(XpGetStringAttr(pContext, pool, oid), - (const char**)NULL, - &value_card)) - { - if((const XpOidCardList*)NULL == valid_card_list - || - XpOidCardListHasCard(valid_card_list, value_card)) - { - return value_card; - } - } - return 0; -} - -void -XpPutCardAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - unsigned long value_card) -{ - if(value_card > 0) - { - char value_out[16]; - sprintf(value_out, "%lu", value_card); - XpPutStringAttr(pContext, pool, oid, value_out); - } - else - XpPutStringAttr(pContext, pool, oid, (const char*)NULL); -} - -void -XpValidateCardAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidCardList* valid_cards, - unsigned long default_card) -{ - unsigned long value_card; - value_card = XpGetCardAttr(pContext, pool, oid, valid_cards); - XpPutCardAttr(pContext, pool, oid, - value_card == 0 ? default_card : value_card); -} - -XpOidList* -XpGetListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidList* valid_oid_list) -{ - return XpOidListNew(XpGetStringAttr(pContext, pool, oid), valid_oid_list); -} - -void -XpPutListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidList* list) -{ - char* value_out; - - value_out = XpOidListString(list); - XpPutStringAttr(pContext, pool, oid, value_out); - XpOidFree(value_out); -} - -void -XpValidateListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidList* valid_oids, - const XpOidList* default_oids) -{ - XpOidList* list = XpGetListAttr(pContext, pool, oid, valid_oids); - if(XpOidListCount(list) == 0) - XpPutListAttr(pContext, pool, oid, default_oids); - else - XpPutListAttr(pContext, pool, oid, list); - XpOidListDelete(list); -} - -XpOidCardList* -XpGetCardListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidCardList* valid_card_list) -{ - return XpOidCardListNew(XpGetStringAttr(pContext, pool, oid), - valid_card_list); -} - -void -XpPutCardListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidCardList* list) -{ - char* value_out; - - value_out = XpOidCardListString(list); - XpPutStringAttr(pContext, pool, oid, value_out); - XpOidFree(value_out); -} - -void -XpValidateCardListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidCardList* valid_cards, - const XpOidCardList* default_cards) -{ - XpOidCardList* list = XpGetCardListAttr(pContext, pool, oid, valid_cards); - if(XpOidCardListCount(list) == 0 && (XpOidCardList*)NULL != default_cards) - XpPutCardListAttr(pContext, pool, oid, default_cards); - else - XpPutCardListAttr(pContext, pool, oid, list); - XpOidCardListDelete(list); -} - -XpOidDocFmtList* -XpGetDocFmtListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidDocFmtList* valid_fmt_list) -{ - return XpOidDocFmtListNew(XpGetStringAttr(pContext, pool, oid), - valid_fmt_list); -} - -void -XpPutDocFmtListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidDocFmtList* list) -{ - char* value_out; - - value_out = XpOidDocFmtListString(list); - XpPutStringAttr(pContext, pool, oid, value_out); - XpOidFree(value_out); -} - -void -XpValidateDocFmtListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidDocFmtList* valid_fmts, - const XpOidDocFmtList* default_fmts) -{ - XpOidDocFmtList* list; - - list = XpGetDocFmtListAttr(pContext, pool, oid, valid_fmts); - if(XpOidDocFmtListCount(list) == 0 - && - (XpOidDocFmtList*)NULL != default_fmts) - { - XpPutDocFmtListAttr(pContext, pool, oid, default_fmts); - } - else - { - XpPutDocFmtListAttr(pContext, pool, oid, list); - } - XpOidDocFmtListDelete(list); -} - -XpOidMediumSS* -XpGetMediumSSAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidList* valid_trays, - const XpOidList* valid_sizes) -{ - return XpOidMediumSSNew(XpGetStringAttr(pContext, pool, oid), - valid_trays, valid_sizes); -} - -void -XpPutMediumSSAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidMediumSS* msss) -{ - char* value_out; - - value_out = XpOidMediumSSString(msss); - XpPutStringAttr(pContext, pool, oid, value_out); - XpOidFree(value_out); -} - -const XpOidMediumSS* -XpGetDefaultMediumSS() -{ - return &DefaultMediumSS; -} - -XpOidTrayMediumList* -XpGetTrayMediumListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidList* valid_trays, - const XpOidMediumSS* msss) -{ - return XpOidTrayMediumListNew(XpGetStringAttr(pContext, pool, oid), - valid_trays, msss); -} - -void -XpPutTrayMediumListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidTrayMediumList* tm) -{ - char* value_out; - - value_out = XpOidTrayMediumListString(tm); - XpPutStringAttr(pContext, pool, oid, value_out); - XpOidFree(value_out); -} - -void -XpValidatePrinterMediaAttrs(XpContextPtr pContext, - const XpOidList* valid_trays, - const XpOidList* valid_sizes) -{ - const XpOidMediumSS* msss; - XpOidMediumSS* pool_msss; - XpOidTrayMediumList* tm; - - pool_msss = XpGetMediumSSAttr(pContext, XPPrinterAttr, - xpoid_att_medium_source_sizes_supported, - valid_trays, valid_sizes); - if(0 == XpOidMediumSSCount(pool_msss)) - msss = XpGetDefaultMediumSS(); - else - msss = pool_msss; - XpPutMediumSSAttr(pContext, XPPrinterAttr, - xpoid_att_medium_source_sizes_supported, msss); - - tm = XpGetTrayMediumListAttr(pContext, XPPrinterAttr, - xpoid_att_input_trays_medium, - valid_trays, msss); - XpPutTrayMediumListAttr(pContext, XPPrinterAttr, - xpoid_att_input_trays_medium, tm); - - XpOidMediumSSDelete(pool_msss); - XpOidTrayMediumListDelete(tm); -} - - -void -XpValidatePrinterPool(XpContextPtr pContext, - const XpValidatePoolsRec* vpr) -{ - /* - * content-orientations-supported - */ - XpValidateListAttr(pContext, XPPrinterAttr, - xpoid_att_content_orientations_supported, - vpr->valid_content_orientations_supported, - vpr->default_content_orientations_supported); - /* - * document-formats-supported - */ - XpValidateDocFmtListAttr(pContext, XPPrinterAttr, - xpoid_att_document_formats_supported, - vpr->valid_document_formats_supported, - vpr->default_document_formats_supported); - /* - * plexes-supported - */ - XpValidateListAttr(pContext, XPPrinterAttr, xpoid_att_plexes_supported, - vpr->valid_plexes_supported, - vpr->default_plexes_supported); - /* - * printer-resolutions-supported - */ - XpValidateCardListAttr(pContext, XPPrinterAttr, - xpoid_att_printer_resolutions_supported, - vpr->valid_printer_resolutions_supported, - vpr->default_printer_resolutions_supported); - /* - * xp-embedded-formats-supported - */ - XpValidateDocFmtListAttr(pContext, XPPrinterAttr, - xpoid_att_xp_embedded_formats_supported, - vpr->valid_xp_embedded_formats_supported, - vpr->default_xp_embedded_formats_supported); - /* - * xp-listfonts-modes-supported - */ - XpValidateListAttr(pContext, XPPrinterAttr, - xpoid_att_xp_listfonts_modes_supported, - vpr->valid_xp_listfonts_modes_supported, - vpr->default_xp_listfonts_modes_supported); - /* - * xp-raw-formats-supported - */ - XpValidateDocFmtListAttr(pContext, XPPrinterAttr, - xpoid_att_xp_raw_formats_supported, - vpr->valid_xp_raw_formats_supported, - vpr->default_xp_raw_formats_supported); - /* - * xp-setup-proviso - */ - XpValidateOidAttr(pContext, XPPrinterAttr, xpoid_att_xp_setup_proviso, - vpr->valid_xp_setup_proviso, xpoid_none); - /* - * medium-source-sizes-supported - * input-trays-mdeium - */ - XpValidatePrinterMediaAttrs(pContext, - vpr->valid_input_trays, - vpr->valid_medium_sizes); - /* - * available-compressions-supported - */ - XpValidateListAttr(pContext, XPPrinterAttr, - xpoid_att_available_compressions_supported, - vpr->valid_available_compressions_supported, - vpr->default_available_compressions_supported); -} - - -void -XpValidateNotificationProfile(XpContextPtr pContext) -{ - const char* value_in; - const char* value_out; - - value_in = XpGetStringAttr(pContext, XPJobAttr, - xpoid_att_notification_profile); - value_out = XpOidNotifyString(XpOidNotifyParse(value_in)); - XpPutStringAttr(pContext, XPJobAttr, - xpoid_att_notification_profile, value_out); -} - -void -XpValidateJobPool(XpContextPtr pContext, - const XpValidatePoolsRec* vpr) -{ - /* - * Note: the 'vpr' argument is unused in this - * implementation; it is reserved for future use - */ - XpOidList* job_attrs_supported; - /* - * only validate attributes found in job-attributes-supported - */ - job_attrs_supported = XpGetListAttr(pContext, XPPrinterAttr, - xpoid_att_job_attributes_supported, - (const XpOidList*)NULL); - /* - * notification-profile - */ - if(XpOidListHasOid(job_attrs_supported, xpoid_att_notification_profile)) - { - XpValidateNotificationProfile(pContext); - } - /* - * clean up - */ - XpOidListDelete(job_attrs_supported); -} - - -static void -XpValidateDocOrPagePool(XpContextPtr pContext, - XPAttributes pool, /* XPDocAttr or XPPageAttr */ - const XpOidList* attrs_supported, - const XpValidatePoolsRec* vpr) -{ - /* - * content-orientation - */ - if(XpOidListHasOid(attrs_supported, xpoid_att_content_orientation)) - { - XpOidList* content_orientations_supported; - content_orientations_supported = - XpGetListAttr(pContext, XPPrinterAttr, - xpoid_att_content_orientations_supported, - vpr->valid_content_orientations_supported); - XpValidateOidAttr(pContext, pool, xpoid_att_content_orientation, - content_orientations_supported, xpoid_none); - XpOidListDelete(content_orientations_supported); - } - /* - * copy-count - */ - if(XpOidListHasOid(attrs_supported, xpoid_att_copy_count)) - XpValidateCardAttr(pContext, pool, xpoid_att_copy_count, - (const XpOidCardList*)NULL, 0); - /* - * default-printer-resolution - */ - if(XpOidListHasOid(attrs_supported, xpoid_att_default_printer_resolution)) - { - XpOidCardList* printer_resolutions_supported; - printer_resolutions_supported = - XpGetCardListAttr(pContext, XPPrinterAttr, - xpoid_att_printer_resolutions_supported, - vpr->valid_printer_resolutions_supported); - XpValidateCardAttr(pContext, pool, - xpoid_att_default_printer_resolution, - printer_resolutions_supported, 0); - XpOidCardListDelete(printer_resolutions_supported); - } - /* - * default-input-tray - */ - if(XpOidListHasOid(attrs_supported, xpoid_att_default_input_tray)) - { - XpOidTrayMediumList* input_trays_medium; - const char* value_in; - XpOid value_tray; - - input_trays_medium = - XpGetTrayMediumListAttr(pContext, XPPrinterAttr, - xpoid_att_input_trays_medium, - (const XpOidList*)NULL, - (const XpOidMediumSS*)NULL); - value_in = - XpGetStringAttr(pContext, pool, xpoid_att_default_input_tray); - value_tray = XpOidFromString(value_in); - if(!XpOidTrayMediumListHasTray(input_trays_medium, value_tray)) - value_tray = xpoid_none; - XpPutOidAttr(pContext, pool, xpoid_att_default_input_tray, value_tray); - XpOidTrayMediumListDelete(input_trays_medium); - } - /* - * default-medium - */ - if(XpOidListHasOid(attrs_supported, xpoid_att_default_medium)) - { - XpOidMediumSS* msss; - const char* value_in; - XpOid value_size; - - msss = XpGetMediumSSAttr(pContext, XPPrinterAttr, - xpoid_att_medium_source_sizes_supported, - (const XpOidList*)NULL, - (const XpOidList*)NULL); - value_in = XpGetStringAttr(pContext, pool, xpoid_att_default_medium); - value_size = XpOidFromString(value_in); - if(!XpOidMediumSSHasSize(msss, value_size)) - value_size = xpoid_none; - XpPutOidAttr(pContext, pool, xpoid_att_default_medium, value_size); - XpOidMediumSSDelete(msss); - } - /* - * document-format - */ - if(XpOidListHasOid(attrs_supported, xpoid_att_document_format)) - { - XpOidDocFmtList* document_formats_supported; - const char* value_in; - XpOidDocFmt* document_format; - const char* value_out; - - document_formats_supported = - XpGetDocFmtListAttr(pContext, XPPrinterAttr, - xpoid_att_document_formats_supported, - vpr->valid_document_formats_supported); - value_in = XpGetStringAttr(pContext, pool, xpoid_att_document_format); - document_format = XpOidDocFmtNew(value_in); - if(XpOidDocFmtListHasFmt(document_formats_supported, document_format)) - value_out = XpOidDocFmtString(document_format); - else - value_out = XpOidDocFmtString(vpr->default_document_format); - XpOidDocFmtListDelete(document_formats_supported); - XpOidDocFmtDelete(document_format); - XpPutStringAttr(pContext, pool, xpoid_att_document_format, value_out); - XpOidFree(value_out); - } - /* - * plex - */ - if(XpOidListHasOid(attrs_supported, xpoid_att_plex)) - { - XpOidList* plexes_supported; - plexes_supported = - XpGetListAttr(pContext, XPPrinterAttr, xpoid_att_plexes_supported, - vpr->valid_plexes_supported); - XpValidateOidAttr(pContext, pool, xpoid_att_plex, - plexes_supported, xpoid_none); - XpOidListDelete(plexes_supported); - } - /* - * xp-listfonts-modes - */ - if(XpOidListHasOid(attrs_supported, xpoid_att_xp_listfonts_modes)) - { - XpOidList* xp_listfonts_modes_supported; - xp_listfonts_modes_supported = - XpGetListAttr(pContext, XPPrinterAttr, - xpoid_att_xp_listfonts_modes_supported, - vpr->valid_xp_listfonts_modes_supported); - XpValidateListAttr(pContext, pool, xpoid_att_xp_listfonts_modes, - xp_listfonts_modes_supported, - (const XpOidList*)NULL); - XpOidListDelete(xp_listfonts_modes_supported); - } - /* - * available-compressions - */ - if(XpOidListHasOid(attrs_supported, xpoid_att_available_compression)) - { - XpOidList* available_compressions_supported; - available_compressions_supported = - XpGetListAttr(pContext, XPPrinterAttr, - xpoid_att_available_compressions_supported, - vpr->valid_available_compressions_supported); - XpValidateOidAttr(pContext, pool, xpoid_att_available_compression, - available_compressions_supported, xpoid_none); - XpOidListDelete(available_compressions_supported); - } -} - -void -XpValidateDocumentPool(XpContextPtr pContext, - const XpValidatePoolsRec* vpr) -{ - XpOidList* document_attrs_supported; - /* - * only validate attributes found in document-attributes-supported - */ - document_attrs_supported = - XpGetListAttr(pContext, XPPrinterAttr, - xpoid_att_document_attributes_supported, - (const XpOidList*)NULL); - /* - * validate - */ - XpValidateDocOrPagePool(pContext, XPDocAttr, - document_attrs_supported, vpr); - /* - * clean up - */ - XpOidListDelete(document_attrs_supported); -} - -void -XpValidatePagePool(XpContextPtr pContext, - const XpValidatePoolsRec* vpr) -{ - XpOidList* page_attrs_supported; - /* - * only validate attributes found in xp-page-attributes-supported - */ - page_attrs_supported = - XpGetListAttr(pContext, XPPrinterAttr, - xpoid_att_xp_page_attributes_supported, - (const XpOidList*)NULL); - /* - * validate - */ - XpValidateDocOrPagePool(pContext, XPPageAttr, - page_attrs_supported, vpr); - /* - * clean up - */ - XpOidListDelete(page_attrs_supported); -} - -void -XpValidateAttributePool(XpContextPtr pContext, - XPAttributes pool, - const XpValidatePoolsRec* vpr) -{ - switch(pool) - { - case XPPrinterAttr: - XpValidatePrinterPool(pContext, vpr); - break; - - case XPDocAttr: - XpValidateDocumentPool(pContext, vpr); - break; - - case XPJobAttr: - XpValidateJobPool(pContext, vpr); - break; - - case XPPageAttr: - XpValidatePagePool(pContext, vpr); - break; - - default: - break; - } -} diff --git a/hw/xprint/AttrValid.h b/hw/xprint/AttrValid.h deleted file mode 100644 index 7bb7ce1c8..000000000 --- a/hw/xprint/AttrValid.h +++ /dev/null @@ -1,219 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#ifndef _Xp_AttrValid_h -#define _Xp_AttrValid_h - -#include -#include "Oid.h" - -#define XpNumber(a) (sizeof(a) / sizeof(*(a))) - -/* - * Attribute pool validation valid values and defaults - */ -typedef struct -{ - XpOidList* valid_content_orientations_supported; - XpOidList* default_content_orientations_supported; - - XpOidDocFmtList* valid_document_formats_supported; - XpOidDocFmtList* default_document_formats_supported; - - XpOidList* valid_input_trays; - XpOidList* valid_medium_sizes; - - XpOidList* valid_plexes_supported; - XpOidList* default_plexes_supported; - - XpOidCardList* valid_printer_resolutions_supported; - XpOidCardList* default_printer_resolutions_supported; - - XpOidDocFmtList* valid_xp_embedded_formats_supported; - XpOidDocFmtList* default_xp_embedded_formats_supported; - - XpOidList* valid_xp_listfonts_modes_supported; - XpOidList* default_xp_listfonts_modes_supported; - - XpOidDocFmtList* valid_xp_raw_formats_supported; - XpOidDocFmtList* default_xp_raw_formats_supported; - - XpOidList* valid_xp_setup_proviso; - - XpOidDocFmt* default_document_format; - XpOidList* valid_available_compressions_supported; - XpOidList* default_available_compressions_supported; - -} XpValidatePoolsRec; - -/* - * XpOid resource access - */ -#define XpGetStringAttr(pContext, pool, oid) \ - (const char*)XpGetOneAttribute(pContext, pool, (char*)XpOidString(oid)) -#define XpPutStringAttr(pContext, pool, oid, value) \ - XpPutOneAttribute(pContext, pool, XpOidString(oid), value) - -#ifdef _XP_PRINT_SERVER_ /* needed for XpContextPtr in Printstr.h */ - -/* - * XpOid-valued attribute access - */ -XpOid XpGetOidAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidList* valid_oid_list); -void XpPutOidAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - XpOid value_oid); -void XpValidateOidAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidList* valid_oids, - XpOid default_oid); -/* - * cardinal-valued attribute access - */ -unsigned long XpGetCardAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidCardList* valid_card_list); -void XpPutCardAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - unsigned long value_card); -void XpValidateCardAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidCardList* valid_cards, - unsigned long default_card); -/* - * XpOidList-valued attribute access - */ -XpOidList* XpGetListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidList* valid_oid_list); -void XpPutListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidList* list); -void XpValidateListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidList* valid_oids, - const XpOidList* default_oids); -/* - * XpOidCardList-valued attribute access - */ -XpOidCardList* XpGetCardListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidCardList* valid_card_list); -void XpPutCardListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidCardList* list); -void XpValidateCardListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidCardList* valid_cards, - const XpOidCardList* default_cards); -/* - * XpOidDocFmtList-valued attribute access - */ -XpOidDocFmtList* XpGetDocFmtListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidDocFmtList* valid_fmt_list); -void XpPutDocFmtListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidDocFmtList* list); -void XpValidateDocFmtListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidDocFmtList* valid_fmts, - const XpOidDocFmtList* default_fmts); -/* - * XpOidMediumSS-valued attribute access - */ -XpOidMediumSS* XpGetMediumSSAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidList* valid_trays, - const XpOidList* valid_sizes); -void XpPutMediumSSAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidMediumSS* msss); -const XpOidMediumSS* XpGetDefaultMediumSS(void); - -/* - * XpOidTrayMediumList-valued attribute access - */ -XpOidTrayMediumList* XpGetTrayMediumListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidList* valid_trays, - const XpOidMediumSS* msss); -void XpPutTrayMediumListAttr(XpContextPtr pContext, - XPAttributes pool, - XpOid oid, - const XpOidTrayMediumList* tm); -void XpValidatePrinterMediaAttrs(XpContextPtr pContext, - const XpOidList* valid_trays, - const XpOidList* valid_sizes); -/* - * Attribute pool validation - */ -void XpValidateAttributePool(XpContextPtr pContext, - XPAttributes pool, - const XpValidatePoolsRec* vpr); -void XpValidatePrinterPool(XpContextPtr pContext, - const XpValidatePoolsRec* vpr); -void XpValidateNotificationProfile(XpContextPtr pContext); -void XpValidateJobPool(XpContextPtr pContext, - const XpValidatePoolsRec* vpr); -void XpValidateDocumentPool(XpContextPtr pContext, - const XpValidatePoolsRec* vpr); -void XpValidatePagePool(XpContextPtr pContext, - const XpValidatePoolsRec* vpr); - -#endif /* _XP_PRINT_SERVER_ */ - -#endif /* _Xp_AttrValid_h - don't add anything after this line */ diff --git a/hw/xprint/DiPrint.h b/hw/xprint/DiPrint.h deleted file mode 100644 index 22cbf0d43..000000000 --- a/hw/xprint/DiPrint.h +++ /dev/null @@ -1,85 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ -/* - * The XpDiListEntry struct is the type of each element of the array - * handed back to the extension code to handle a GetPrinterList request. - * We don't use the printerDb directly because of the desire to handle - * multiple locales. Creating this new array for each GetPrinterList - * request will allow us to build it with the description in the locale of - * the requesting client. - */ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif -#include - -#ifndef _XpDiPrint_H_ -#define _XpDiPrint_H_ 1 - -#include "scrnintstr.h" - -typedef struct _diListEntry { - char *name; - char *description; - char *localeName; - unsigned long rootWinId; -} XpDiListEntry; - -extern void XpDiFreePrinterList(XpDiListEntry **list); - -extern XpDiListEntry **XpDiGetPrinterList( - int nameLen, - char *name, - int localeLen, - char *locale); - -extern char * XpDiGetDriverName(int index, char *printerName); - -extern WindowPtr XpDiValidatePrinter(char *printerName, int printerNameLen); - -extern int PrinterOptions(int argc, char **argv, int i); - -extern void PrinterUseMsg(void); - -extern void PrinterInitGlobals(void); - -extern void PrinterInitOutput(ScreenInfo *pScreenInfo, int argc, char **argv); - -extern Bool XpClientIsPrintClient(ClientPtr client, FontPathElementPtr fpe); - -extern Bool XpClientIsBitmapClient(ClientPtr client); - -extern void _XpVoidNoop(void); - -extern Bool _XpBoolNoop(void); - -#endif /* _XpDiPrint_H_ */ diff --git a/hw/xprint/Init.c b/hw/xprint/Init.c deleted file mode 100644 index 69100d390..000000000 --- a/hw/xprint/Init.c +++ /dev/null @@ -1,1920 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996-2004 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. -(c) Copyright 2003-2004 Roland Mainz - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ -/******************************************************************* -** -** ********************************************************* -** * -** * File: printer/Init.c -** * -** * Contents: -** * The InitOutput routine here would presumably -** * be called from the normal server's InitOutput -** * after all display screens have been added. -** * There is are ifdef'd routines suitable for -** * use in building a printer-only server. Turn -** * on the "PRINTER_ONLY_SERVER" define if this is -** * to be the only ddx-level driver. -** * -** * Copyright: Copyright 1993,1995 Hewlett-Packard Company -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#ifdef __hpux -#include -#endif - -#include -#define NEED_EVENTS 1 -#include -#include - -#include "screenint.h" -#include "input.h" -#include "cursor.h" -#include "misc.h" -#include "windowstr.h" -#include "inputstr.h" - -#include "gcstruct.h" -#include -#include "errno.h" - -typedef char *XPointer; -#define HAVE_XPointer 1 - -#define Status int -#include - -#include "DiPrint.h" -#include "attributes.h" - -#include "os.h" -#include "spooler.h" - -static void GenericScreenInit( - int index, - ScreenPtr pScreen, - int argc, - char **argv); -static Bool InitPrintDrivers( - int index, - ScreenPtr pScreen, - int argc, - char **argv); - -/* - * The following two defines are used to build the name "X*printers", where - * the "*" is replaced by the display number. This is used to construct - * the name of the default printers configuration file if the -XpFile - * command line option was not specified. - */ -#define XNPRINTERSFILEPREFIX "/X" -#define XNPRINTERSFILESUFFIX "printers" -#define XPRINTERSFILENAME "Xprinters" - -#define MODELDIRNAME "/models" -#define FONTDIRNAME "/fonts" - -#ifdef XPRASTERDDX - -static -PixmapFormatRec RasterPixmapFormats[] = { - { 1, 1, BITMAP_SCANLINE_PAD } -}; -#define NUMRASTFORMATS (sizeof RasterPixmapFormats)/(sizeof RasterPixmapFormats[0]) - -#include "raster/Raster.h" - -#endif - -#ifdef XPPCLDDX - -static -PixmapFormatRec ColorPclPixmapFormats[] = { - { 1, 1, BITMAP_SCANLINE_PAD }, - { 8, 8, BITMAP_SCANLINE_PAD }, - { 24, 32, BITMAP_SCANLINE_PAD } -}; - -#define NUMCPCLFORMATS (sizeof ColorPclPixmapFormats)/(sizeof ColorPclPixmapFormats[0]) - -#endif - -#ifdef XPMONOPCLDDX - -static -PixmapFormatRec MonoPclPixmapFormats[] = { - { 1, 1, BITMAP_SCANLINE_PAD } -}; - -#define NUMMPCLFORMATS (sizeof MonoPclPixmapFormats)/(sizeof MonoPclPixmapFormats[0]) - -#endif - -#if defined(XPPCLDDX) || defined(XPMONOPCLDDX) -#include "pcl/Pcl.h" -#endif - -#ifdef XPPSDDX - -static -PixmapFormatRec PSPixmapFormats[] = { - { 1, 1, BITMAP_SCANLINE_PAD }, - { 8, 8, BITMAP_SCANLINE_PAD }, - { 12, 16, BITMAP_SCANLINE_PAD }, - { 14, 16, BITMAP_SCANLINE_PAD }, - { 16, 16, BITMAP_SCANLINE_PAD }, - { 24, 32, BITMAP_SCANLINE_PAD } -}; - -#define NUMPSFORMATS (sizeof PSPixmapFormats)/(sizeof PSPixmapFormats[0]) - -#include "ps/Ps.h" - -#endif - -/* - * The driverInitArray contains an entry for each driver the - * server knows about. Each element contains pointers to pixmap formats, the - * driver's initialization routine, and pointers to the driver's - * attribute validation rec, and/or a driver function which - * returns the maximum medium width&height, and maximum resolution - * given a printer name. Either the validation rec OR the dimension - * function can be NULL. If the function is non-NULL then it - * will be called, and will be passed the (possibly NULL) validation rec. - * If the function is NULL, then XpGetMaxWidthHeightRes() is called. - */ -typedef struct _driverInitRec { - char *driverName; - pBFunc initFunc; - XpValidatePoolsRec *pValRec; - pVFunc dimensionsFunc; - PixmapFormatRec *pFmts; - int numFmts; -} driverInitRec; - -static driverInitRec driverInits[] = { -#ifdef XPRASTERDDX - { - "XP-RASTER", - InitializeRasterDriver, - &RasterValidatePoolsRec, - (pVFunc) NULL, - RasterPixmapFormats, - NUMRASTFORMATS - }, -#endif -#ifdef XPPCLDDX - { - "XP-PCL-COLOR", - InitializeColorPclDriver, - &PclValidatePoolsRec, - (pVFunc) NULL, - ColorPclPixmapFormats, - NUMCPCLFORMATS - }, -#endif -#ifdef XPMONOPCLDDX - { - "XP-PCL-MONO", - InitializeMonoPclDriver, - &PclValidatePoolsRec, - (pVFunc) NULL, - MonoPclPixmapFormats, - NUMMPCLFORMATS - }, -#endif -#ifdef XPPSDDX - { - "XP-POSTSCRIPT", - InitializePsDriver, - &PsValidatePoolsRec, - (pVFunc) NULL, - PSPixmapFormats, - NUMPSFORMATS - }, -#endif -}; - - -/* - * The printerDb variable points to a list of PrinterDbEntry structs - * which map printer names with screen numbers and driver names. - */ -typedef struct _printerDbEntry { - struct _printerDbEntry *next; - char *name; - char *qualifier; - int screenNum; - char *driverName; - char *desc; -} PrinterDbEntry, *PrinterDbPtr; - -static PrinterDbPtr printerDb = (PrinterDbPtr)NULL; - -/* - * The nameMap is a list used in initializing the attribute store - * for each printer. The list is freed once the printerDb is built - * and the attribute stores for all printers have been initialized. - */ -typedef struct _nameMapEntry { - struct _nameMapEntry *next; - char *name; - char *qualifier; -} NameMapEntry, *NameMapPtr; - -static NameMapPtr nameMap = (NameMapPtr)NULL; - -/* - * The driverMap is a list which provides the mapping between driver names - * and screen numbers. It is built and used - * by RehashPrinterList to correctly fill in the screenNum field in the - * printerDb entries. The list is freed before RehashPrinterList terminates. - */ -typedef struct _driverMapping { - struct _driverMapping *next; - char *driverName; - int screenNum; -} DriverMapEntry, *DriverMapPtr; - -static const char configFilePath[] = -"/etc/dt/config/print:/usr/dt/config/print"; - -static const char printServerConfigDir[] = "XPSERVERCONFIGDIR"; - -static char *configFileName = (char *)NULL; -static Bool freeDefaultFontPath = FALSE; -static char *origFontPath = (char *)NULL; - -static Bool xprintInitGlobalsCalled = FALSE; -/* - * This function is responsible for doing initalisation of any global - * variables at an very early point of server startup (even before - * |ProcessCommandLine()|. - */ -void PrinterInitGlobals(void) -{ - xprintInitGlobalsCalled = TRUE; - -#ifdef DAMAGE - /* Disable DAMAGE extension for now as it does not work with - * the Postscript DDX yet (see - * https://bugs.freedesktop.org/show_bug.cgi?id=1660) ... - * (you can enable the DAMAGE extension explicitly via - * % X +extension DAMAGE ... #) ;-( */ - noDamageExtension = TRUE; -#endif /* DAMAGE */ - -#ifdef SMART_SCHEDULE - /* Somehow the XF86 "smart scheduler" completely kills the Xprint DDX - * (see http://xprint.freedesktop.org/cgi-bin/bugzilla/show_bug.cgi?id=467 - * ("Xfree86's "smart scheduler" breaks Xprt") */ - SmartScheduleDisable = TRUE; -#endif /* SMART_SCHEDULE */ - - /* Disable internal screensaver for Xprint (workaround for - * http://pdx.freedesktop.org/cgi-bin/bugzilla/show_bug.cgi?id=567 ("Xorg - * Xprt starts to consume 100% CPU when being idle for some time")) */ - defaultScreenSaverTime = 0; - - /* Ensure that the maximum request size for the BIGREQUESTS extension - * is at least 8MB (see - * http://xprint.freedesktop.org/cgi-bin/bugzilla/show_bug.cgi?id=622 - "RFE: - * Xprt's default BIGREQUESTS extension buffer size should be 8MB") - */ - maxBigRequestSize = (8*1048576)-1; - - /* Xprt should not reset by default when the last client exists - * (default for Xprt is |0|, video Xservers use |DE_RESET|) */ - dispatchExceptionAtReset = 0; -} - -/* - * PrinterUseMsg() prints usage for the Xprint-specific options - */ -void PrinterUseMsg(void) -{ - XpSpoolerTypePtr curr = xpstm; - - /* Option '-XpFile' */ - ErrorF("-XpFile file specifies an alternate `Xprinters' file, rather\n"); - ErrorF(" than the default one (e.g.\n"); - ErrorF(" `${XPCONFIGDIR}/${LANG}/print/Xprinters') or\n"); - ErrorF(" `${XPCONFIGDIR}/C/print/Xprinters'.\n"); - - /* Option '-XpSpoolerType' */ - ErrorF("-XpSpoolerType string specifies a spooler type.\n"); - ErrorF(" Supported values are:\n"); - - while( curr->name != NULL ) - { - ErrorF(" - '%s'\n", curr->name); - curr++; - } - ErrorF(" (multiple values can be specified, seperated by ':',\n"); - ErrorF(" the first active spooler will be chosen).\n"); - ErrorF(" default is '%s'.\n", XPDEFAULTSPOOLERNAMELIST); -} - -/* - * PrinterOptions checks argv[i] to see if it is our command line - * option specifying a configuration file name. It returns the index - * of the next option to process. - */ -int -PrinterOptions( - int argc, - char **argv, - int i) -{ - if(strcmp(argv[i], "-XpFile") == 0) - { - if ((i + 1) >= argc) { - ddxUseMsg (); - return i + 2; - } - configFileName = argv[i + 1]; - return i + 2; - } - else if(strcmp(argv[i], "-XpSpoolerType") == 0) - { - if ((i + 1) >= argc) { - ddxUseMsg (); - return i + 2; - } - XpSetSpoolerTypeNameList(argv[i + 1]); - return i + 2; - } - else - { - return i; - } -} - -/************************************************************ - * GetInitFunc -- - * - * This routine is called from the InitPrintDrivers function. - * Given the name of a driver, return a pointer to the driver's - * initialization function. - * - * Results: - * Returns a pointer to the initialization function for the driver. - * - * - ************************************************************/ - -/* -typedef Bool (*pIFunc)(); -static pIFunc -GetInitFunc(driverName) -*/ - -static pBFunc GetInitFunc(char *driverName) -{ - driverInitRec *pInitRec; - int numDrivers = sizeof(driverInits)/sizeof(driverInitRec); - int i; - - for(pInitRec = driverInits, i = 0; i < numDrivers; pInitRec++, i++) - { - if( !strcmp( driverName, pInitRec->driverName ) ) - return pInitRec->initFunc; - } - - return 0; -} - -static void -GetDimFuncAndRec( - char *driverName, - XpValidatePoolsRec **pValRec, - pVFunc *dimensionsFunc) -{ - driverInitRec *pInitRec; - int numDrivers = sizeof(driverInits)/sizeof(driverInitRec); - int i; - - for(pInitRec = driverInits, i = 0; i < numDrivers; pInitRec++, i++) - { - if( !strcmp( driverName, pInitRec->driverName ) ) - { - *dimensionsFunc = pInitRec->dimensionsFunc; - *pValRec = pInitRec->pValRec; - return ; - } - } - - *dimensionsFunc = 0; - *pValRec = 0; - return; -} - -static void -FreePrinterDb(void) -{ - PrinterDbPtr pCurEntry, pNextEntry; - - for(pCurEntry = printerDb, pNextEntry = (PrinterDbPtr)NULL; - pCurEntry != (PrinterDbPtr)NULL; pCurEntry = pNextEntry) - { - pNextEntry = pCurEntry->next; - if(pCurEntry->name != (char *)NULL) - xfree(pCurEntry->name); - if(pCurEntry->desc != (char *)NULL) - xfree(pCurEntry->desc); - /* - * We don't free the driver name, because it's expected to simply - * be a pointer into the xrm database. - */ - xfree(pCurEntry); - } - printerDb = (PrinterDbPtr)NULL; -} - -/* - * AddPrinterDbName allocates an entry in the printerDb list, and - * initializes the "name". It returns TRUE if the element was - * successfully added, and FALSE if an allocation error ocurred. - * XXX AddPrinterDbName needs to check for (and not add) duplicate names. - */ -static Bool -AddPrinterDbName(char *name, char *desc) -{ - PrinterDbPtr pEntry = (PrinterDbPtr)xalloc(sizeof(PrinterDbEntry)); - - if(pEntry == (PrinterDbPtr)NULL) return FALSE; - pEntry->name = (name != NULL) ? strdup(name) : NULL; - pEntry->desc = (desc != NULL) ? strdup(desc) : NULL; - pEntry->qualifier = (char *)NULL; - - if(printerDb == (PrinterDbPtr)NULL) - { - pEntry->next = (PrinterDbPtr)NULL; - printerDb = pEntry; - } - else - { - pEntry->next = printerDb; - printerDb = pEntry; - } - return TRUE; -} - -static int -AugmentPrinterDb(const char *command) -{ - FILE *fp; - char name[256]; - int num_printers = 0; /* Number of printers we found */ - size_t namelen; - char *desc = NULL; - - fp = popen(command, "r"); - /* XXX is a 256 character limit overly restrictive for printer names? */ - while(fgets(name, 256, fp) != (char *)NULL && (namelen=strlen(name))) - { - char *option = name; - - name[namelen-1] = (char)'\0'; /* strip the \n */ - -#define XP_DESCRIPTOR "xp-printerattr.descriptor=" -#define XP_DESCRIPTOR_LEN (sizeof(XP_DESCRIPTOR)-1) - while ((option = strchr(option, '\t'))) { - option++; /* Skip the '\t' */ - if (!strncmp(option, XP_DESCRIPTOR, XP_DESCRIPTOR_LEN)) { - *(option-1) = '\0'; /* Kill the '\t' (only if we found a valid option) */ - option += XP_DESCRIPTOR_LEN; - if (*option != '\0') { - desc = option; - } - } - else - { - /* Unknown option */ - ErrorF("AugmentPrinterDb: Unknown option '%s'\n", option); - } - } - AddPrinterDbName(name, desc); - num_printers++; - } - pclose(fp); - return num_printers; -} - -/* - * FreeNameMap frees all remaining memory associated with the nameMap. - */ -static void -FreeNameMap(void) -{ - NameMapPtr pEntry, pTmp; - - for(pEntry = nameMap, pTmp = (NameMapPtr)NULL; - pEntry != (NameMapPtr)NULL; - pEntry = pTmp) - { - if(pEntry->name != (char *)NULL) - xfree(pEntry->name); - if(pEntry->qualifier != (char *)NULL) - xfree(pEntry->qualifier); - pTmp = pEntry->next; - xfree(pEntry); - } - nameMap = (NameMapPtr)NULL; -} - -/* - * AddNameMap adds an element to the nameMap linked list. - */ -static Bool -AddNameMap(char *name, char *qualifier) -{ - NameMapPtr pEntry; - - if((pEntry = (NameMapPtr)xalloc(sizeof(NameMapEntry))) == (NameMapPtr)NULL) - return FALSE; - pEntry->name = name; - pEntry->qualifier = qualifier; - pEntry->next = nameMap; - nameMap = pEntry; - return TRUE; -} - -/* - * MergeNameMap - puts the "map" names (aka qualifiers, aliases) into - * the printerDb. This should be called once, after both the printerDb - * and nameMap lists are complete. When/if MergeNameMap finds a map for - * an entry in the printerDb, the qualifier is _moved_ (not copied) to - * the printerDb. This means that the qualifier pointer in the nameMap - * is NULLed out. - */ -static void -MergeNameMap(void) -{ - NameMapPtr pMap; - PrinterDbPtr pDb; - - for(pMap = nameMap; pMap != (NameMapPtr)NULL; pMap = pMap->next) - { - for(pDb = printerDb; pDb != (PrinterDbPtr)NULL; pDb = pDb->next) - { - if(!strcmp(pMap->name, pDb->name)) - { - pDb->qualifier = pMap->qualifier; - pMap->qualifier = (char *)NULL; - } - } - } -} - -/* - * CreatePrinterAttrs causes the attribute stores to be built for - * each printer in the printerDb. - */ -static void -CreatePrinterAttrs(void) -{ - PrinterDbPtr pDb; - - for(pDb = printerDb; pDb != (PrinterDbPtr)NULL; pDb = pDb->next) - { - XpBuildAttributeStore(pDb->name, (pDb->qualifier)? - pDb->qualifier : pDb->name); - } -} - -#ifdef XPPSDDX -#define defaultDriver "XP-POSTSCRIPT" -#else -#ifdef XPPCLDDX -#define defaultDriver "XP-PCL-COLOR" -#else -#ifdef XPMONOPCLDDX -#define defaultDriver "XP-PCL-MONO" -#else -#define defaultDriver "XP-RASTER" -#endif -#endif -#endif - -/* - * StoreDriverNames - queries the attribute store for the ddx-identifier. - * if the ddx-identifier is not in the attribute database, then a default - * ddx-identifier is store in both the attribute store for the printer, - * and in the printerDb. - * The ddx-identifier is stored in the printerDb for use in initializing - * the screens. - */ -static void -StoreDriverNames(void) -{ - PrinterDbPtr pEntry; - - for(pEntry = printerDb; pEntry != (PrinterDbPtr)NULL; - pEntry = pEntry->next) - { - pEntry->driverName = (char*)XpGetPrinterAttribute(pEntry->name, - "xp-ddx-identifier"); - if(pEntry->driverName == (char *)NULL || - strlen(pEntry->driverName) == 0 || - GetInitFunc(pEntry->driverName) == (Bool(*)())NULL) - { - if (pEntry->driverName && (strlen(pEntry->driverName) != 0)) { - ErrorF("Xp Extension: Can't load driver %s\n", - pEntry->driverName); - ErrorF(" init function missing\n"); - } - - pEntry->driverName = defaultDriver; - XpAddPrinterAttribute(pEntry->name, - (pEntry->qualifier != (char *)NULL)? - pEntry->qualifier : pEntry->name, - "*xp-ddx-identifier", pEntry->driverName); - } - } -} - -/* - * StoreDescriptors - queries the attribute store for the descriptor. - * if the descriptor is not in the attribute database, then the descriptor - * from the printerDb is store in the attribute store for the printer. - */ -static void -StoreDescriptors(void) -{ - PrinterDbPtr pEntry; - - for(pEntry = printerDb; pEntry != (PrinterDbPtr)NULL; - pEntry = pEntry->next) - { - if (pEntry->desc != NULL) - { - XpAddPrinterAttribute(pEntry->name, - (pEntry->qualifier != (char *)NULL)? - pEntry->qualifier : pEntry->name, - "*descriptor", pEntry->desc); - } - } -} - -static char * -MbStrchr( - char *str, - int ch) -{ - size_t mbCurMax = MB_CUR_MAX; - wchar_t targetChar, curChar; - char tmpChar; - int i, numBytes, byteLen; - - if(mbCurMax <= 1) return strchr(str, ch); - - tmpChar = (char)ch; - mbtowc(&targetChar, &tmpChar, mbCurMax); - for(i = 0, numBytes = 0, byteLen = strlen(str); i < byteLen; i += numBytes) - { - numBytes = mbtowc(&curChar, &str[i], mbCurMax); - if(curChar == targetChar) return &str[i]; - } - return (char *)NULL; -} - -/* - * GetConfigFileName - Looks for a "Xprinters" file in - * $(XPRINTDIR)/$LANG/print, and then in $(XPRINTDIR)/C/print. If it - * finds such a file, it returns the path to the file. The returned - * string must be freed by the caller. - */ -static char * -GetConfigFileName(void) -{ - /* - * We need to find the system-wide file, if one exists. This - * file can be in either $(XPRINTDIR)/$LANG/print, or in - * $(PRINTDIR)/C/print, and the file itself is named "Xprinters". - */ - char *dirName, *filePath; - - /* - * Check for a LANG-specific file. - */ - if((dirName = XpGetConfigDir(TRUE))) - { - filePath = (char *)xalloc(strlen(dirName) + - strlen(XPRINTERSFILENAME) + 2); - - if(filePath == (char *)NULL) - { - xfree(dirName); - return (char *)NULL; - } - - sprintf(filePath, "%s/%s", dirName, XPRINTERSFILENAME); - xfree(dirName); - if(access(filePath, R_OK) == 0) - return filePath; - - xfree(filePath); - } - - if((dirName = XpGetConfigDir(FALSE))) - { - filePath = (char *)xalloc(strlen(dirName) + - strlen(XPRINTERSFILENAME) + 2); - if(filePath == (char *)NULL) - { - xfree(dirName); - return (char *)NULL; - } - sprintf(filePath, "%s/%s", dirName, XPRINTERSFILENAME); - xfree(dirName); - if(access(filePath, R_OK) == 0) - return filePath; - xfree(filePath); - } - return (char *)NULL; -} - -/* - * BuildPrinterDb - reads the config file if it exists, and if necessary - * executes a command such as lpstat to generate a list of printers. - * XXX - * XXX BuildPrinterDb must be rewritten to allow 16-bit characters in - * XXX printer names. The will involve replacing the use of strtok() and its - * XXX related functions. - * XXX At the same time, BuildPrinterDb and it's support routines should have - * XXX allocation error checking added. - * XXX - */ -static PrinterDbPtr -BuildPrinterDb(void) -{ - Bool defaultAugment = TRUE, freeConfigFileName; - - if(configFileName && access(configFileName, R_OK) != 0) - { - ErrorF("Xp Extension: Can't open file %s\n", configFileName); - } - if(!configFileName && (configFileName = GetConfigFileName())) - freeConfigFileName = TRUE; - else - freeConfigFileName = FALSE; - - if(configFileName != (char *)NULL && access(configFileName, R_OK) == 0) - { - char line[256]; - FILE *fp = fopen(configFileName, "r"); - - while(fgets(line, 256, fp) != (char *)NULL) - { - char *tok, *ptr; - if((tok = strtok(line, " \t\012")) != (char *)NULL) - { - if(tok[0] == (char)'#') continue; - if(strcmp(tok, "Printer") == 0) - { - while((tok = strtok((char *)NULL, " \t")) != (char *)NULL) - { - if((ptr = MbStrchr(tok, '\012'))) - *ptr = (char)'\0'; - AddPrinterDbName(tok, NULL); - } - } - else if(strcmp(tok, "Map") == 0) - { - char *name, *qualifier; - - if((tok = strtok((char *)NULL, " \t\012")) == (char *)NULL) - continue; - name = strdup(tok); - if((tok = strtok((char *)NULL, " \t\012")) == (char *)NULL) - { - xfree(name); - continue; - } - qualifier = strdup(tok); - AddNameMap(name, qualifier); - } - else if(strcmp(tok, "Augment_Printer_List") == 0) - { - if((tok = strtok((char *)NULL, " \t\012")) == (char *)NULL) - continue; - - if(strcmp(tok, "%default%") == 0) - continue; - defaultAugment = FALSE; - if(strcmp(tok, "%none%") == 0) - continue; - AugmentPrinterDb(tok); - } - else - break; /* XXX Generate an error? */ - } - } - fclose(fp); - } - - if(defaultAugment == TRUE) - { - XpSpoolerTypePtr curr_spooler_type; /* spooler we are currently probing for queues */ - int num_printers_found; /* number of printers found by |AugmentPrinterDb()| */ - char *tok_lasts; /* strtok_r() position token */ - char *spnamelist; /* list of spooler names, seperated by ":" */ - char *spname; /* spooler name */ - - spnamelist = strdup(XpGetSpoolerTypeNameList()); /* strtok_r() modifies string so dup' it first */ - - for( spname = strtok_r(spnamelist, ":", &tok_lasts) ; - spname != NULL ; - spname = strtok_r(NULL, ":", &tok_lasts) ) - { - curr_spooler_type = XpSpoolerNameToXpSpoolerType(spname); - if(!curr_spooler_type) - { - FatalError("BuildPrinterDb: No spooler type entry found for '%s'.\n", spname); - } - - if(curr_spooler_type->list_queues_command == NULL || - strlen(curr_spooler_type->list_queues_command) == 0) - { - continue; - } - - num_printers_found = AugmentPrinterDb(curr_spooler_type->list_queues_command); - /* Did we found a spooler which works ? */ - if(num_printers_found > 0) - { - spooler_type = curr_spooler_type; -#ifdef DEBUG_gisburn - fprintf(stderr, "BuildPrinterDb: using '%s'.\n", spooler_type->name); -#endif /* DEBUG_gisburn */ - break; - } - } - - free(spnamelist); - } - - MergeNameMap(); - FreeNameMap(); - - /* Create the attribute stores for all printers */ - CreatePrinterAttrs(); - - /* - * Find the drivers for each printers, and store the driver names - * in the printerDb - */ - StoreDriverNames(); - StoreDescriptors(); - - if(freeConfigFileName) - { - xfree(configFileName); - configFileName = (char *)NULL; - } - - return printerDb; -} - -static void -FreeDriverMap(DriverMapPtr driverMap) -{ - DriverMapPtr pCurEntry, pNextEntry; - - for(pCurEntry = driverMap, pNextEntry = (DriverMapPtr)NULL; - pCurEntry != (DriverMapPtr)NULL; pCurEntry = pNextEntry) - { - pNextEntry = pCurEntry->next; - if(pCurEntry->driverName != (char *)NULL) - xfree(pCurEntry->driverName); - xfree(pCurEntry); - } -} - -/* - * XpRehashPrinterList rebuilds the list of printers known to the - * server. It first walks the printerDb to build a table mapping - * driver names and screen numbers, since this is not an easy mapping - * to change in the sample server. The normal configuration files are - * then read & parsed to create the new list of printers. Printers - * which require drivers other than those already initialized are - * deleted from the printerDb. This leaves attribute stores in place - * for inaccessible printers, but those stores will be cleaned up in - * the next rehash or server recycle. - */ -int -XpRehashPrinterList(void) -{ - PrinterDbPtr pEntry, pPrev; - DriverMapPtr driverMap = (DriverMapPtr)NULL, pDrvEnt; - int result; - - /* Build driverMap */ - for(pEntry = printerDb; pEntry != (PrinterDbPtr)NULL; pEntry = pEntry->next) - { - for(pDrvEnt = driverMap; pDrvEnt != (DriverMapPtr)NULL; - pDrvEnt = pDrvEnt->next) - { - if(!strcmp(pEntry->driverName, pDrvEnt->driverName)) - break; - } - - if(pDrvEnt != (DriverMapPtr)NULL) - continue; - - if((pDrvEnt = (DriverMapPtr)xalloc(sizeof(DriverMapEntry))) == - (DriverMapPtr)NULL) - { - FreeDriverMap(driverMap); - return BadAlloc; - } - pDrvEnt->driverName = strdup(pEntry->driverName); - pDrvEnt->screenNum = pEntry->screenNum; - pDrvEnt->next = driverMap; - driverMap = pDrvEnt; - } - - /* Free the old printerDb */ - FreePrinterDb(); - - /* Free/Rehash attribute stores */ - if((result = XpRehashAttributes()) != Success) - return result; - - /* Build a new printerDb */ - if(BuildPrinterDb() == (PrinterDbPtr)NULL) - return BadAlloc; - - /* Walk PrinterDb & either store screenNum, or delete printerDb entry */ - for(pEntry = printerDb, pPrev = (PrinterDbPtr)NULL; - pEntry != (PrinterDbPtr)NULL; pEntry = pEntry->next) - { - for(pDrvEnt = driverMap; pDrvEnt != (DriverMapPtr)NULL; - pDrvEnt = pDrvEnt->next) - { - if(!strcmp(printerDb->driverName, pDrvEnt->driverName)) - break; - } - - /* - * Either store the screen number, or delete the printerDb entry. - * Deleting the entry leaves orphaned attribute stores, but they'll - * get cleaned up at the next rehash or server recycle. - */ - if(pDrvEnt != (DriverMapPtr)NULL) - { - pEntry->screenNum = pDrvEnt->screenNum; - pPrev = pEntry; - } - else { - if(pPrev) - pPrev->next = pEntry->next; - else - pPrev = pEntry->next; - if(pEntry->name != (char *)NULL) - xfree(pEntry->name); - xfree(pEntry); - pEntry = pPrev; - } - } - - FreeDriverMap(driverMap); - - return Success; -} - -/* - * ValidateFontDir looks for a valid font directory for the specified - * printer model within the specified configuration directory. It returns - * the directory name, or NULL if no valid font directory was found. - * It is the caller's responsibility to free the returned font directory - * name. - */ -static char * -ValidateFontDir( - char *configDir, - char *modelName) -{ - char *pathName; - - if(!configDir || !modelName) - return (char *)NULL; - - pathName = (char *)xalloc(strlen(configDir) + strlen(MODELDIRNAME) + - strlen(modelName) + strlen(FONTDIRNAME) + - strlen("fonts.dir") + 5); - if(!pathName) - return (char *)NULL; - sprintf(pathName, "%s/%s/%s/%s/%s", configDir, MODELDIRNAME, modelName, - FONTDIRNAME, "fonts.dir"); - if(access(pathName, R_OK) != 0) - { - xfree(pathName); - return (char *)NULL; - } - pathName[strlen(pathName) - 9] = (char)'\0'; /* erase fonts.dir */ - return pathName; -} - -/* - * FindFontDir returns a pointer to the path name of the font directory - * for the specified printer model name, if such a directory exists. - * The directory contents are superficially checked for validity. - * The caller must free the returned char *. - * - * We first look in the locale-specific model-config directory, and - * then fall back to the C language model-config directory. - */ -static char * -FindFontDir( - char *modelName) -{ - char *configDir, *fontDir; - - if(!modelName || !strlen(modelName)) - return (char *)NULL; - - configDir = XpGetConfigDir(TRUE); - if((fontDir = ValidateFontDir(configDir, modelName))) - { - xfree(configDir); - return fontDir; - } - - if(configDir) - xfree(configDir); - configDir = XpGetConfigDir(FALSE); - fontDir = ValidateFontDir(configDir, modelName); - - xfree(configDir); - - return fontDir; -} - -/* - * AddToFontPath adds the specified font path element to the global - * defaultFontPath string. It adds the keyword "PRINTER:" to the front - * of the path to denote that this is a printer-specific font path - * element. - */ -static char PATH_PREFIX[] = "PRINTER:"; -static int PATH_PREFIX_LEN = sizeof(PATH_PREFIX) - 1; /* same as strlen() */ - -static void -AddToFontPath( - char *pathName) -{ - char *newPath; - Bool freeOldPath; - - if(defaultFontPath == origFontPath) - freeOldPath = FALSE; - else - freeOldPath = TRUE; - - newPath = (char *)xalloc(strlen(defaultFontPath) + strlen(pathName) + - PATH_PREFIX_LEN + 2); - - sprintf(newPath, "%s%s,%s", PATH_PREFIX, pathName, defaultFontPath); - - if(freeOldPath) - xfree(defaultFontPath); - - defaultFontPath = newPath; - return; -} - -/* - * AugmentFontPath adds printer-model-specific font path elements to - * the front of the font path global variable "defaultFontPath" (dix/globals.c). - * We can't call SetFontPath() because the font code has not yet been - * initialized when InitOutput is called (from whence this routine is called). - * - * This utilizes the static variables origFontPath and - * freeDefaultFontPath to track the original contents of defaultFontPath, - * and to properly free the modified version upon server recycle. - */ -static void -AugmentFontPath(void) -{ - char *modelID, **allIDs = (char **)NULL; - PrinterDbPtr pDbEntry; - int numModels, i; - - if(!origFontPath) - origFontPath = defaultFontPath; - - if(freeDefaultFontPath) - { - xfree(defaultFontPath); - defaultFontPath = origFontPath; - freeDefaultFontPath = FALSE; - } - - /* - * Build a list of printer models to check for internal fonts. - */ - for(pDbEntry = printerDb, numModels = 0; - pDbEntry != (PrinterDbPtr)NULL; - pDbEntry = pDbEntry->next) - { - modelID = - (char*)XpGetPrinterAttribute(pDbEntry->name, - "xp-model-identifier"); - - if(modelID && strlen(modelID) != 0) - { - /* look for current model in the list of allIDs */ - for(i = 0; i < numModels; i++) - { - if(!strcmp(modelID, allIDs[i])) - { - modelID = (char *)NULL; - break; - } - } - } - - /* - * If this printer's model-identifier isn't in the allIDs list, - * then add it to allIDs. - */ - if(modelID && strlen(modelID) != 0) - { - allIDs = (char **)xrealloc(allIDs, (numModels+2) * sizeof(char *)); - if(allIDs == (char **)NULL) - return; - allIDs[numModels] = modelID; - allIDs[numModels + 1] = (char *)NULL; - numModels++; - } - } - - /* for each model, check for a valid font directory, and add it to - * the front of defaultFontPath. - */ - for(i = 0; allIDs != (char **)NULL && allIDs[i] != (char *)NULL; i ++) - { - char *fontDir; - if((fontDir = FindFontDir(allIDs[i]))) - { - AddToFontPath(fontDir); - xfree(fontDir); - freeDefaultFontPath = TRUE; - } - } - - if(allIDs) - xfree(allIDs); - - return; -} - -/* - * XpClientIsBitmapClient is called by the font code to find out if - * a particular client should be granted access to bitmap fonts. - * This function works by - * calling XpContextOfClient (in Xserver/Xext/xprint.c) to determine - * the context associated with the client, and then queries the context's - * attributes to determine whether the bitmap fonts should be visible. - * It looks at the value of the xp-listfonts-modes document/page attribute to - * see if xp-list-glyph-fonts has been left out of the mode list. Only - * if the xp-listfonts-modes attribute exists, and it does not contain - * xp-list-glyph-fonts does this function return FALSE. In any other - * case the funtion returns TRUE, indicating that the bitmap fonts - * should be visible to the client. - */ -Bool -XpClientIsBitmapClient( - ClientPtr client) -{ - XpContextPtr pContext; - char *mode; - - if(!(pContext = XpContextOfClient(client))) - return TRUE; - - /* - * Check the page attributes, and if it's not defined there, then - * check the document attributes. - */ - mode = XpGetOneAttribute(pContext, XPPageAttr, "xp-listfonts-modes"); - if(!mode || !strlen(mode)) - { - mode = XpGetOneAttribute(pContext, XPDocAttr, "xp-listfonts-modes"); - if(!mode || !strlen(mode)) - return TRUE; - } - - if(!strstr(mode, "xp-list-glyph-fonts")) - return FALSE; - - return TRUE; -} - -/* - * XpClientIsPrintClient is called by the font code to find out if - * a particular client has set a context which references a printer - * which utilizes a particular font path. - * This function works by calling XpContextOfClient - * (in Xserver/Xext/xprint.c) to determine the context associated with - * the client and then looks at the value of the xp-listfonts-modes - * document/page attribute to see if xp-list-internal-printer-fonts has - * been left out of the mode list. - * If the xp-listfonts-modes attribute exists, and it does not contain - * xp-list-internal-printer-fonts this function returns FALSE. - * Otherwise it looks up the font directory for the context. The font - * directory is then compared with the directory specified in the - * FontPathElement which is passed in. - */ -Bool -XpClientIsPrintClient( - ClientPtr client, - FontPathElementPtr fpe) -{ - XpContextPtr pContext; - char *mode; - char *modelID, *fontDir; - - if(!(pContext = XpContextOfClient(client))) - return FALSE; - - /* - * Check the page attributes, and if it's not defined there, then - * check the document attributes. - */ - mode = XpGetOneAttribute(pContext, XPPageAttr, "xp-listfonts-modes"); - if(!mode || !strlen(mode)) - { - mode = XpGetOneAttribute(pContext, XPDocAttr, "xp-listfonts-modes"); - } - - if(mode && strlen(mode)) - { - if(!strstr(mode, "xp-list-internal-printer-fonts")) - return FALSE; - } - - if (!fpe) - return TRUE; - - modelID = XpGetOneAttribute(pContext, XPPrinterAttr, "xp-model-identifier"); - if(!modelID || !strlen(modelID)) - return FALSE; - - if(!(fontDir = FindFontDir(modelID))) - return FALSE; - - /* - * The grunge here is to ignore the PATH_PREFIX at the front of the - * fpe->name. - */ - if(fpe->name_length < PATH_PREFIX_LEN || - (strlen(fontDir) != (fpe->name_length - PATH_PREFIX_LEN)) || - strncmp(fontDir, fpe->name + PATH_PREFIX_LEN, - fpe->name_length - PATH_PREFIX_LEN)) - { - xfree(fontDir); - return FALSE; - } - xfree(fontDir); - return TRUE; -} - -static void -AddFormats(ScreenInfo *pScreenInfo, char *driverName) -{ - int i, j; - driverInitRec *pInitRec; - int numDrivers = sizeof(driverInits)/sizeof(driverInitRec); - PixmapFormatRec *formats; - int numfmts; - - for (pInitRec = driverInits, i = 0; i < numDrivers; pInitRec++, i++) - { - if ( !strcmp( driverName, pInitRec->driverName ) ) - break; - } - if (i >= numDrivers) - return; - formats = pInitRec->pFmts; - numfmts = pInitRec->numFmts; - for (i = 0; i < numfmts && pScreenInfo->numPixmapFormats < MAXFORMATS; i++) - { - for (j = 0; j < pScreenInfo->numPixmapFormats; j++) { - if (pScreenInfo->formats[j].depth == formats[i].depth && - pScreenInfo->formats[j].bitsPerPixel == formats[i].bitsPerPixel && - pScreenInfo->formats[j].scanlinePad == formats[i].scanlinePad) - break; - } - if (j == pScreenInfo->numPixmapFormats) { - pScreenInfo->formats[j] = formats[i]; - pScreenInfo->numPixmapFormats++; - } - } -} - -/************************************************************ - * PrinterInitOutput -- - * This routine is to be called from a ddx's InitOutput - * during the server startup initialization, and when - * the server is to be reset. The routine creates the - * screens associated with configured printers by calling - * dix:AddScreen. The configuration information comes from a - * database read from the X*printers file. - * - * Results: - * The array of ScreenRec pointers referenced by - * pScreenInfo->screen is increased by the addition - * of the printer screen(s), as is the value of - * pScreenInfo->numScreens. This is done via calls - * to AddScreen() in dix. - * - ************************************************************/ - -void -PrinterInitOutput( - ScreenInfo *pScreenInfo, - int argc, - char **argv) -{ - PrinterDbPtr pDb, pDbEntry; - int driverCount = 0, i; - char **driverNames; - char *configDir; - - /* This should NEVER happen, but... */ - if( !xprintInitGlobalsCalled ) - { - FatalError("Internal error: PrinterInitGlobals() not called."); - } -#ifdef SMART_SCHEDULE - /* |PrinterInitGlobals| should have set |SmartScheduleDisable| to - * |TRUE| - if not we will trigger this safeguard. */ - if( SmartScheduleDisable != TRUE ) - { - FatalError("Internal error: XF86 smart scheduler incompatible to Xprint DDX."); - } -#endif /* SMART_SCHEDULE */ - /* Safeguard for - * http://pdx.freedesktop.org/cgi-bin/bugzilla/show_bug.cgi?id=567 ("Xorg - * Xprt starts to consume 100% CPU when being idle for some time") - * |PrinterInitGlobals| should have set |defaultScreenSaverTime| to - * |0| - if not we will trigger this trap. */ - if( defaultScreenSaverTime != 0 ) - { - FatalError("Internal screen saver must be OFF for printing."); - } - - /* Print a warnung when the maximum request size of the BIGREQUESTS - * extension is smaller than 8MB (see - * http://xprint.freedesktop.org/cgi-bin/bugzilla/show_bug.cgi?id=622) - */ - if (maxBigRequestSize < (8*1048576)-1) { - ErrorF("Xp Extension: BIGREQUESTS max. request is currently %ld bytes " - ", recommemded minimum for Xprint is 8MB.\n", (long)maxBigRequestSize); - } - - /* - * this little test is just a warning at startup to make sure - * that the config directory exists. - * - * what this ugly looking if says is that if both ways of - * calling configDir works and both directories don't exist, - * then print an error saying we can't find the non-lang one. - */ - if (((configDir = XpGetConfigDir(TRUE)) != NULL) && - (access(configDir, F_OK) == 0)) - { - xfree(configDir); - } - else if (((configDir = XpGetConfigDir(FALSE)) != NULL) && - (access(configDir, F_OK) == 0)) - { - xfree(configDir); - } - else { - /* Refuse to start when we do not have our config dir... */ - FatalError("Xp Extension: could not find config dir %s\n", - configDir ? configDir : XPRINTDIR); - } - - if(printerDb != (PrinterDbPtr)NULL) - FreePrinterDb(); - - /* - * Calling BuildPrinterDb serves to build the printer database, - * and to initialize the attribute store for each printer. - * The driver can, if it so desires, modify the attribute - * store at a later time. - */ - if((pDb = BuildPrinterDb()) == (PrinterDbPtr)NULL) return; - - /* - * We now have to decide how many screens to initialize, and call - * AddScreen for each one. The printerDb must be properly initialized - * for at least one screen's worth of printers prior to calling AddScreen - * because InitPrintDrivers reads the printerDb to determine which - * driver(s) to init on a particular screen. - * We put each driver's printers on a different - * screen, and call AddScreen for each screen/driver pair. - */ - /* count the number of printers */ - for(pDbEntry = pDb, driverCount = 0; pDbEntry != (PrinterDbPtr)NULL; - pDbEntry = pDbEntry->next, driverCount++) - ; - /* - * Allocate memory for the worst case - a driver per printer - */ - driverNames = (char **)xalloc(sizeof(char *) * driverCount); - - /* - * Assign the driver for the first printer to the first screen - */ - pDb->screenNum = screenInfo.numScreens; - driverNames[0] = pDb->driverName; - driverCount = 1; - AddFormats(pScreenInfo, pDb->driverName); - - /* - * For each printer, look to see if its driver is already assigned - * to a screen, and if so copy that screen number into the printerDb. - * Otherwise, assign a new screen number to the driver for this - * printer. - */ - for(pDbEntry = pDb; pDbEntry != (PrinterDbPtr)NULL; - pDbEntry = pDbEntry->next) - { - Bool foundMatch; - - for(i = 0, foundMatch = FALSE; i < driverCount; i++) - { - if(!strcmp(driverNames[i], pDbEntry->driverName)) - { - foundMatch = TRUE; - pDbEntry->screenNum = screenInfo.numScreens + i; - break; - } - } - if(foundMatch == FALSE) - { - driverNames[driverCount] = pDbEntry->driverName; - pDbEntry->screenNum = screenInfo.numScreens + driverCount; - AddFormats(pScreenInfo, pDbEntry->driverName); - driverCount++; - } - } - - for(i = 0; i < driverCount; i++) - { - int curScreen = screenInfo.numScreens; - if(AddScreen(InitPrintDrivers, argc, argv) < 0) - { - PrinterDbPtr pPrev; - /* - * AddScreen failed, so we pull the associated printers - * from the list. - */ - ErrorF("Xp Extension: Could not add screen for driver %s\n", - driverNames[i]); - for(pPrev = pDbEntry = printerDb; pDbEntry != (PrinterDbPtr)NULL; - pDbEntry = pDbEntry->next) - { - if(pDbEntry->screenNum == curScreen) - { - if(pPrev == printerDb) - { - printerDb = pDbEntry->next; - pPrev = printerDb; - } - else - pPrev->next = pDbEntry->next; - - xfree(pDbEntry->name); - xfree(pDbEntry); - pDbEntry = pPrev; - } - else - { - if(pDbEntry->screenNum > curScreen) - pDbEntry->screenNum--; - pPrev = pDbEntry; - } - } - } - } - - xfree(driverNames); - - AugmentFontPath(); - - if(pScreenInfo->numScreens > MAXSCREENS) - { - ErrorF("The number of printer screens requested "); - ErrorF("exceeds the allowable limit of %d screens.\n", MAXSCREENS); - ErrorF("Please reduce the number of requested printers in your "); - ErrorF("\nX%sprinters file.", display); - ErrorF("Server exiting...\n"); - exit(-1); - } -} - -/* - * InitPrintDrivers is called from dix:AddScreen. It in turn calls the - * driver initialization routine for any and all drivers which are - * implicated in supporting printers on the particular screen number - * specified by the "index" parameter. The printerDb variable is used - * to determine which printers are to be associated with a particular - * screen. - */ -static Bool -InitPrintDrivers( - int index, - ScreenPtr pScreen, - int argc, - char **argv) -{ - PrinterDbPtr pDb, pDb2; - - GenericScreenInit(index, pScreen, argc, argv); - - for(pDb = printerDb; pDb != (PrinterDbPtr)NULL; pDb = pDb->next) - { - if(pDb->screenNum == index) - { - Bool callInit = TRUE; - for(pDb2 = printerDb; pDb2 != pDb; pDb2 = pDb2->next) - { - if(!strcmp(pDb->driverName, pDb2->driverName)) - { - callInit = FALSE; - break; - } - } - if(callInit == TRUE) - { - Bool (*initFunc)(BFuncArgs); - initFunc = GetInitFunc(pDb->driverName); - if(initFunc(index, pScreen, argc, argv) == FALSE) - { - /* XXX - What do I do if the driver's init fails? */ - } - } - } - } - return TRUE; -} - -void -_XpVoidNoop(void) -{ - return; -} - -Bool -_XpBoolNoop(void) -{ - return TRUE; -} - -/* - * GenericScreenInit - The common initializations required by all - * printer screens and drivers. It sets the screen's cursor functions - * to Noops, and computes the maximum screen (i.e. medium) dimensions. - */ - -static void -GenericScreenInit( - int index, - ScreenPtr pScreen, - int argc, - char **argv) -{ - float fWidth, fHeight, maxWidth, maxHeight; - unsigned short width, height; - PrinterDbPtr pDb; - int res, maxRes; - - /* - * Set the cursor ops to no-op functions. - */ - pScreen->DisplayCursor = (DisplayCursorProcPtr)_XpBoolNoop; - pScreen->RealizeCursor = (RealizeCursorProcPtr)_XpBoolNoop; - pScreen->UnrealizeCursor = (UnrealizeCursorProcPtr)_XpBoolNoop; - pScreen->SetCursorPosition = (SetCursorPositionProcPtr)_XpBoolNoop; - pScreen->ConstrainCursor = (ConstrainCursorProcPtr)_XpVoidNoop; - pScreen->CursorLimits = (CursorLimitsProcPtr)_XpVoidNoop; - pScreen->RecolorCursor = (RecolorCursorProcPtr)_XpVoidNoop; - - /* - * Find the largest paper size for all the printers on the given - * screen. - */ - maxRes = 0; - maxWidth = maxHeight = 0.0; - for( pDb = printerDb; pDb != (PrinterDbPtr)NULL; pDb = pDb->next) - { - if(pDb->screenNum == index) - { - - XpValidatePoolsRec *pValRec; - pVFunc dimensionsFunc; - - GetDimFuncAndRec(pDb->driverName, &pValRec, &dimensionsFunc); - if(dimensionsFunc != (pVFunc)NULL) - dimensionsFunc(pDb->name, pValRec, &fWidth, &fHeight, &res); - else - XpGetMaxWidthHeightRes(pDb->name, pValRec, &fWidth, - &fHeight, &res); - if( res > maxRes ) - maxRes = res; - if( fWidth > maxWidth ) - maxWidth = fWidth; - if( fHeight > maxHeight ) - maxHeight = fHeight; - } - } - - width = (unsigned short) (maxWidth * maxRes / 25.4); - height = (unsigned short) (maxHeight * maxRes / 25.4); - pScreen->width = pScreen->height = ( width > height ) ? width : - height; - - pScreen->mmWidth = pScreen->mmHeight = ( maxWidth > maxHeight ) ? - (unsigned short)(maxWidth + 0.5) : - (unsigned short)(maxHeight + 0.5); -} - -#if 0 /* No one uses this anymore... */ -/* - * QualifyName - takes an unqualified file name such as X6printers and - * a colon-separated list of directory path names such as - * /etc/opt/dt:/opt/dt/config. - * - * Returns a fully qualified file path name such as /etc/opt/dt/X6printers. - * The returned value is malloc'd, and the caller is responsible for - * freeing the associated memory. - */ -static char * -QualifyName(char *fileName, char *searchPath) -{ - char * curPath = searchPath; - char * nextPath; - char * chance; - FILE *pFile; - - if (fileName == NULL || searchPath == NULL) - return NULL; - - while (1) { - if ((nextPath = strchr(curPath, ':')) != NULL) - *nextPath = 0; - - chance = (char *)xalloc(strlen(curPath) + strlen(fileName) + 2); - sprintf(chance,"%s/%s",curPath,fileName); - - /* see if we can read from the file */ - if((pFile = fopen(chance, "r")) != (FILE *)NULL) - { - fclose(pFile); - /* ... restore the colon, .... */ - if (nextPath) - *nextPath = ':'; - - return chance; - } - - xfree(chance); - - if (nextPath == NULL) /* End of path list? */ - break; - - /* try the next path */ - curPath = nextPath + 1; - } - return NULL; -} -#endif - -/* - * FillPrinterListEntry fills in a single XpDiListEntry element with data - * derived from the supplied PrinterDbPtr element. - * - * XXX A smarter (i.e. future) version of this routine might inspect the - * XXX "locale" parameter and attempt to match the "description" and - * XXX "localeName" elements of the XpDiListEntry to the specified locale. - */ -static void -FillPrinterListEntry( - XpDiListEntry *pEntry, - PrinterDbPtr pDb, - int localeLen, - char *locale) -{ - static char *localeStr = (char *)NULL; - - if(localeStr == (char *)NULL) - localeStr = strdup(setlocale(LC_ALL, (const char *)NULL)); - - pEntry->name = pDb->name; - pEntry->description = - (char*)XpGetPrinterAttribute(pDb->name, "descriptor"); - pEntry->localeName = localeStr; - pEntry->rootWinId = WindowTable[pDb->screenNum]->drawable.id; -} - -/* - * GetPrinterListInfo fills in the XpDiListEntry struct pointed to by the - * parameter pEntry with the information regarding the printer specified - * by the name and nameLen parameters. The pointers placed in the - * XpDiListEntry structure MUST NOT be freed by the caller. They are - * pointers into existing long-lived databases. - * - */ -static Bool -GetPrinterListInfo( - XpDiListEntry *pEntry, - int nameLen, - char *name, - int localeLen, - char *locale) -{ - PrinterDbPtr pDb; - - for(pDb = printerDb; pDb != (PrinterDbPtr)NULL; pDb = pDb->next) - { - if(strlen(pDb->name) == nameLen && !strncmp(pDb->name, name, nameLen)) - { - FillPrinterListEntry(pEntry, pDb, localeLen, locale); - return TRUE; - } - } - return FALSE; -} - -/* - * XpDiFreePrinterList is the approved method of releasing memory used - * for a printer list. - */ -void -XpDiFreePrinterList(XpDiListEntry **list) -{ - int i; - - for(i = 0; list[i] != (XpDiListEntry *)NULL; i++) - xfree(list[i]); - xfree(list); -} - -/* - * XpDiGetPrinterList returns a pointer to a NULL-terminated array of - * XpDiListEntry pointers. Each entry structure contains the name, - * description, root window, and locale of a printer. The call returns - * either a list of all printers configured on the server, or it returns - * the information for one specific printer depending on the values passed - * in. Non-NULL values passed in indicate that only the information for - * the one specific printer is desired, while NULL values indicate that - * the information for all printers is desired. - */ -XpDiListEntry ** -XpDiGetPrinterList( - int nameLen, - char *name, - int localeLen, - char *locale) -{ - XpDiListEntry **pList; - - if(!nameLen || name == (char *)NULL) - { - int i; - PrinterDbPtr pDb; - - for(pDb = printerDb, i = 0; pDb != (PrinterDbPtr)NULL; - pDb = pDb->next, i++) - ; - - if((pList = (XpDiListEntry **)xalloc((i+1) * sizeof(XpDiListEntry *))) - == (XpDiListEntry **)NULL) - return pList; - - pList[i] = (XpDiListEntry *)NULL; - for(pDb = printerDb, i = 0; pDb != (PrinterDbPtr)NULL; - pDb = pDb->next, i++) - { - if((pList[i] = (XpDiListEntry *)xalloc(sizeof(XpDiListEntry)))== - (XpDiListEntry *)NULL) - { - XpDiFreePrinterList(pList); - return (XpDiListEntry **)NULL; - } - FillPrinterListEntry(pList[i], pDb, localeLen, locale); - } - } - else - { - if((pList = (XpDiListEntry **)xalloc(2 * sizeof(XpDiListEntry *))) == - (XpDiListEntry **)NULL) - return pList; - - if((pList[0] = (XpDiListEntry *)xalloc(sizeof(XpDiListEntry))) == - (XpDiListEntry *)NULL) - { - xfree(pList); - return (XpDiListEntry **)NULL; - } - pList[1] = (XpDiListEntry *)NULL; - if(GetPrinterListInfo(pList[0], nameLen, name, localeLen, locale) == - FALSE) - { - xfree(pList[0]); - pList[0] = (XpDiListEntry *)NULL; - } - } - return pList; -} - -WindowPtr -XpDiValidatePrinter(char *printerName, int printerNameLen) -{ - PrinterDbPtr pCurEntry; - - for(pCurEntry = printerDb; - pCurEntry != (PrinterDbPtr)NULL; pCurEntry = pCurEntry->next) - { - if(strlen(pCurEntry->name) == printerNameLen && - !strncmp(pCurEntry->name, printerName, printerNameLen)) - return WindowTable[pCurEntry->screenNum]; - } - return (WindowPtr)NULL; -} - -/* - * XpDiGetDriverName takes a screen index and a printer name, and returns - * a pointer to the name of the driver to be used for the specified printer - * on the specified screen. - */ -char * -XpDiGetDriverName(int index, char *printerName) -{ - - PrinterDbPtr pCurEntry; - - for(pCurEntry = printerDb; - pCurEntry != (PrinterDbPtr)NULL; pCurEntry = pCurEntry->next) - { - if(pCurEntry->screenNum == index && - !strcmp(pCurEntry->name, printerName)) - return pCurEntry->driverName; - } - - return (char *)NULL; /* XXX Should we supply a default driverName? */ -} - diff --git a/hw/xprint/Makefile.am b/hw/xprint/Makefile.am deleted file mode 100644 index 2ed7aaf57..000000000 --- a/hw/xprint/Makefile.am +++ /dev/null @@ -1,58 +0,0 @@ -SUBDIRS = doc pcl pcl-mono raster ps etc config - -bin_PROGRAMS = Xprt - -Xprt_CFLAGS = @DIX_CFLAGS@ @XPRINT_CFLAGS@ \ - -DPRINT_ONLY_SERVER -D_XP_PRINT_SERVER_ \ - -DXPRINTDIR=\"$(libdir)/X11/xserver\" \ - -DXPRASTERDDX -DXPPCLDDX -DXPMONOPCLDDX -DXPPSDDX \ - -DXFree86Server - -Xprt_LDFLAGS = -L$(top_srcdir) -XPRINT_LIBS = \ - @XPRINT_LIBS@ \ - ps/libps.la \ - raster/libraster.la \ - pcl/libpcl.la \ - pcl-mono/libpcl.la \ - $(top_builddir)/fb/libfb.la \ - $(top_builddir)/render/librender.la \ - $(top_builddir)/dix/libXpdix.la \ - $(XSERVER_LIBS) \ - $(top_builddir)/Xext/libXext.la \ - $(top_builddir)/xkb/libxkb.la \ - $(top_builddir)/xkb/libxkbstubs.la \ - $(top_builddir)/os/libos.la # for Xprintf - -Xprt_DEPENDENCIES = $(XPRINT_LIBS) -Xprt_LDADD = $(XPRINT_LIBS) $(XPRINT_SYS_LIBS) $(XSERVER_SYS_LIBS) - -miinitext-wrapper.c: - echo "#include \"$(top_srcdir)/mi/miinitext.c\"" >> $@ - -dpmsstubs-wrapper.c: - echo "#include \"$(top_srcdir)/Xext/dpmsstubs.c\"" >> $@ - -Xprt_SOURCES = \ - attributes.c \ - attributes.h \ - AttrValid.c \ - AttrValid.h \ - ddxInit.c \ - DiPrint.h \ - Init.c \ - mediaSizes.c \ - Oid.c \ - OidDefs.h \ - Oid.h \ - OidStrs.h \ - spooler.c \ - spooler.h \ - Util.c \ - miinitext-wrapper.c \ - dpmsstubs-wrapper.c \ - $(top_srcdir)/fb/fbcmap_mi.c - -EXTRA_DIST = ValTree.c - -CLEANFILES = miinitext-wrapper.c dpmsstubs-wrapper.c diff --git a/hw/xprint/Oid.c b/hw/xprint/Oid.c deleted file mode 100644 index a2af00108..000000000 --- a/hw/xprint/Oid.c +++ /dev/null @@ -1,3181 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "attributes.h" - -/* - * XpOidNotify value strings - */ -#define NOTIFY_EMAIL_STR "{{event-report-job-completed} electronic-mail}" -#define NOTIFY_NONE_STR "{}" - -#define SafeStrLen(s) ((s) ? strlen((s)) : 0) - -/* - * entry type for the object identifier string map - */ -typedef struct _XpOidStringMapEntry -{ - const char* string; - int length; - int msg_set; - int msg_number; - const char* default_message; - -} XpOidStringMapEntry; - -/* - * include the auto-generated static XpOidStringMap - */ -#include "OidStrs.h" - -/* - * XpOid static function declarations - */ -static XpOid XpOidParse(const char* value_string, - const char** ptr_return); -/* - * XpOidList static function declarations - */ -static XpOidList* XpOidListParse(const char* value_string, - const XpOidList* valid_oids, - const char** ptr_return, int i); - -/* - * XpOidList static function declarations - */ -static XpOidCardList* XpOidCardListParse(const char* value_string, - const XpOidCardList* valid_cards, - const char** ptr_return, int i); - -/* - * XpOidMediumSourceSize static function declarations - */ -static XpOidMediumSS* MediumSSParse(const char* value_string, - const XpOidList* valid_trays, - const XpOidList* valid_medium_sizes, - const char** ptr_return, int i); -static XpOidMediumContinuousSize* MediumContinuousSizeParse(const char*, - const char**); -static void MediumContinuousSizeDelete(XpOidMediumContinuousSize* me); -static XpOidMediumDiscreteSizeList* MediumDiscreteSizeListParse(const char*, - const XpOidList*, - const char**, - int i); -static void MediumDiscreteSizeListDelete(XpOidMediumDiscreteSizeList* list); - -static BOOL ParseArea(const char* value_string, - const char** ptr_return, - XpOidArea* area_return); -static BOOL ParseRealRange(const char* value_string, - const char** ptr_return, - XpOidRealRange* range_return); - -/* - * XpOidTrayMediumList static function declarations - */ -static XpOidTrayMediumList* TrayMediumListParse(const char* value_string, - const XpOidList* valid_trays, - const char** ptr_return, - int i); -static void TrayMediumListValidate(XpOidTrayMediumList* me, - const XpOidMediumSS* msss); - -/* - * XpOidDocFmt - */ -static BOOL XpOidDocFmtNext(XpOidDocFmt* doc_fmt, - const char* value_string, - const char** ptr_return); - -/* - * XpOidDocFmtListParse - */ -static XpOidDocFmtList* XpOidDocFmtListParse(const char* value_string, - const XpOidDocFmtList* valid_fmts, - const char** ptr_return, int i); - -/* - * misc. parsing static function declarations - */ -static BOOL ParseBoolValue(const char* value_string, - const char** ptr_return, - BOOL* bool_return); -static BOOL ParseRealValue(const char* value_string, - const char** ptr_return, - float* real_return); -static BOOL ParseSeqEnd( - const char* value_string, - const char** ptr_return); -static BOOL ParseSeqStart( - const char* value_string, - const char** ptr_return); -static BOOL ParseUnspecifiedValue( - const char* value_string, - const char** ptr_return); -static int SpanToken( - const char* string); -static int SpanWhitespace( - const char* string); - -/* - * String comparison function. - */ -#ifdef HAVE_STRCASECMP -# define StrnCaseCmp(s1, s2, len) strncasecmp(s1, s2, len) -#else -static int StrnCaseCmp(const char *s1, const char *s2, size_t len); -#endif - -/* - * ------------------------------------------------------------------------ - * Name: XpOidString - * - * Description: - * - * Obtain the string representation of an XpOid. - * - * Example: XpOidString(xpoid_copy_count) returns "copy-count". - * - * Return value: - * - * A const pointer to the string. - */ -const char* -XpOidString(XpOid xp_oid) -{ - /* - * XpOid enum values are index values into the string map - */ - return XpOidStringMap[xp_oid].string; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidStringLength - * - * Description: - * - * Obtain the length of the string representation for a given - * XpOid. - * - * Return value: - * - * The string length in bytes. - * - */ -int -XpOidStringLength(XpOid xp_oid) -{ - /* - * XpOid enum values are index values into the string map - */ - return XpOidStringMap[xp_oid].length; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidFromString - * - * Description: - * - * Obtains the XpOid given a string representation of an XpOid. - * - * Example: XpOidFromString("copy-count") returns 'xpoid_copy_count'. - * - * Return value: - * - * The XpOid if successful. 'xpoid_none' if the string pointed to by - * 'value is not recognized or if 'value' is NULL. - */ -XpOid -XpOidFromString(const char* value) -{ - if(value == (const char*)NULL) - return xpoid_none; - else - return XpOidParse(value, (const char**)NULL); -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidParse - * - * Description: - * - * Parse the next whitespace-delimited string from 'value_string' - * updating 'ptr_return' to point to the next unparsed location in - * 'value_string'. 'ptr_return' can be NULL. - * - * Return value: - * - * The corresponding XpOid for the parsed name string. - * A return value of xpoid_none is returned if the parsed name - * was not a valid oid or if no name was found. - * - */ -static XpOid -XpOidParse(const char* value_string, - const char** ptr_return) -{ - const char* ptr; - int length; - int i; - /* - * skip leading whitespace - */ - ptr = value_string + SpanWhitespace(value_string); - /* - * get the whitespace-delimited token length - */ - length = SpanToken(ptr); - /* - * match the oid string in the map - */ - for(i = 0; i < XpOidStringMapCount; i++) - if(length == XpOidStringMap[i].length) - if(strncmp(ptr, XpOidStringMap[i].string, length) == 0) - break; - if(i == XpOidStringMapCount) - i = xpoid_none; - /* - * update the return pointer and return - */ - if(ptr_return != (const char**)NULL) - *ptr_return = ptr+length; - return i; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidListNew - * - * Description: - * - * Creates a new XpOidList initialized from a whitespace-delimited - * list of recognized string representations of oids. The returned - * list will contain only oids found within the passed 'valid_oids' - * XpOidList. - * - * Note: One may notice that in order to create an XpOidList with - * this function, an XpOidList is needed; the 'valid_oids' list - * is often an statically initialized structure. XpOidListInit - * can also be used. - * - * Return value: - * - * NULL if the passed 'value_string' is NULL. - * - * If the list indicated by 'value_string' is empty or contains only - * unrecognized oid string representations, a new XpOidList - * containing zero elements is returned. - * - * If 'valid_oids' is NULL all oids are considered valid. - * - */ -XpOidList* -XpOidListNew(const char* value_string, - const XpOidList* valid_oids) -{ - if(value_string == (const char*)NULL) - return (XpOidList*)NULL; - else - { - const char* ptr; - return XpOidListParse(value_string, valid_oids, &ptr, 0); - } -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidListDelete - * - * Description: - * - * Frees the memory allocated for 'list'. - * - * Return value: - * - * None. - * - */ -void -XpOidListDelete(XpOidList* list) -{ - if(list != (XpOidList*)NULL) - { - XpOidFree((char*)list->list); - XpOidFree((char*)list); - } -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidListParse - * - * Description: - * - * This function recursively parses the whitespace-delimited list of - * oid string representations passed via 'value_string'. Oids are - * only added to the resulting list if they are found within the - * passed 'valid_oids' XpOidList. - * - * 'ptr_return' points to a char* variable allocated by the - * caller, and is really only of use during recursion (upon return to - * the original caller, it will point to the end of value_string). - * - * 'value_string' and 'ptr_return' *cannot* be NULL. - * - * Return value: - * - * A newly allocated and initialized XpOidList. - * - * If the list indicated by 'value_string' is empty or contains only - * unrecognized oid string representations, a new XpOidList - * containing zero elements is returned. - * - * If 'valid_oids' is NULL all oids are considered valid. - * - */ -static XpOidList* -XpOidListParse(const char* value_string, - const XpOidList* valid_oids, - const char** ptr_return, - int i) -{ - XpOid oid; - XpOidList* list; - /* - * parse the next valid oid out of the value string - */ - ptr_return = &value_string; - while(1) - { - if(**ptr_return == '\0') - { - /* - * end of value string; stop parsing - */ - oid = xpoid_none; - break; - } - /* - * parse the next oid from the value - */ - oid = XpOidParse(*ptr_return, ptr_return); - if(xpoid_none == oid) - { - /* - * unrecognized oid; keep parsing - */ - continue; - } - if((const XpOidList*)NULL == valid_oids - || - XpOidListHasOid(valid_oids, oid)) - { - /* - * valid oid found; stop parsing - */ - break; - } - } - - if(oid == xpoid_none) - { - /* - * end of value string; allocate the list structure - */ - list = (XpOidList*)XpOidCalloc(1, sizeof(XpOidList)); - list->count = i; - list->list = (XpOid*)XpOidCalloc(i, sizeof(XpOid)); - } - else - { - /* - * recurse - */ - list = XpOidListParse(*ptr_return, valid_oids, ptr_return, i+1); - /* - * set the oid in the list - */ - list->list[i] = oid; - } - /* - * return - */ - return list; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidListHasOid - * - * Description: - * - * Determines if 'oid' is an element of 'list'. - * - * Return value: - * - * xTrue if the oid is found in the list. - * - * xFalse if the oid is not in the list, or if 'list' is NULL. - * - */ -BOOL -XpOidListHasOid(const XpOidList* list, XpOid oid) -{ - int i; - if(list != (XpOidList*)NULL) - for(i = 0; i < list->count; i++) - if(list->list[i] == oid) - return xTrue; - return xFalse; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidListGetIndex - * - * Description: - * - * Returns the array index of 'oid' in 'list' - * - * Return value: - * - * The index of 'oid' in list. - * - * -1 if the oid is not in the list, or if 'list' is NULL. - * - */ -int -XpOidListGetIndex(const XpOidList* list, XpOid oid) -{ - int i; - if(list != (XpOidList*)NULL) - for(i = 0; i < list->count; i++) - if(list->list[i] == oid) - return i; - return -1; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidListString - * - * Description: - * - * Creates a string representation of an XpOidList structure. - * - * Return value: - * - * A newly allocated - * - */ -char* -XpOidListString(const XpOidList* me) -{ - int i; - int length; - char* str; - char* ptr; - /* - * allocate enough memory for the oid string representations, - * including intervening whitespace - */ - for(i = 0, length = 0; i < XpOidListCount(me); i++) - length += XpOidStringLength(XpOidListGetOid(me, i)) + 1; - str = XpOidMalloc(length+1); - /* - * format the list - */ - for(i = 0, ptr = str; i < XpOidListCount(me); i++) -#if defined(sun) && !defined(SVR4) - { - sprintf(ptr, "%s ", XpOidString(XpOidListGetOid(me, i))); - ptr += strlen(ptr); - } -#else - ptr += sprintf(ptr, "%s ", XpOidString(XpOidListGetOid(me, i))); -#endif - /* - * chop trailing whitespace or terminate empty string - */ - str[length] = '\0'; - /* - * return - */ - return str; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidLinkedListNew - * - * Description: - * - * Creates a new instance of an empty XpOidLinkedList. - * - * Return value: - * - * The new XpOidLinkedList. - * - */ -XpOidLinkedList* -XpOidLinkedListNew() -{ - return (XpOidLinkedList*)XpOidCalloc(1, sizeof(XpOidLinkedList)); -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidLinkedListDelete - * - * Description: - * - * Frees the memory allocated for a XpOidLinkedList. - * - * Return value: - * - * None. - * - */ -void -XpOidLinkedListDelete(XpOidLinkedList* me) -{ - if(me != (XpOidLinkedList*)NULL) - { - while(me->head) - { - me->current = me->head; - me->head = me->current->next; - XpOidFree((char*)me->current); - } - XpOidFree((char*)me); - } -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidLinkedListGetOid - * - * Description: - * - * Retrieves the oid at position 'i' (zero-based) in the - * XpOidLinkedList 'me'. - * - * Return value: - * - * The oid at position 'i'. - * - * xpoid_none if the oid was not found, or the list is empty (or if - * the list contains xpoid_none at position 'i'). - */ -XpOid -XpOidLinkedListGetOid(XpOidLinkedList* me, int i) -{ - if(me == (XpOidLinkedList*)NULL || i < 0 || i >= me->count) - { - return xpoid_none; - } - else - { - me->current = me->head; - while(i--) me->current = me->current->next; - return me->current->oid; - } -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidLinkedListAddOid - * - * Description: - * - * Adds an oid to the end of an XpOidLinkedList. - * - * Return value: - * - * None. - * - */ -void -XpOidLinkedListAddOid(XpOidLinkedList* me, XpOid oid) -{ - me->current = (XpOidNode)XpOidCalloc(1, sizeof(struct XpOidNodeStruct)); - me->current->oid = oid; - ++me->count; - if(me->tail) - { - me->tail->next = me->current; - me->tail = me->current; - } - else - me->head = me->tail = me->current; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidLinkedListGetIndex - * - * Description: - * - * Returns the position of an oid in a XpOidLinkedList. - * - * Return value: - * - * The zero-based position of 'oid' in the list. - * - * -1 if the oid is not in the list, or if 'me' is NULL. - * - */ -int -XpOidLinkedListGetIndex(XpOidLinkedList* me, XpOid oid) -{ - if((XpOidLinkedList*)NULL != me) - { - int i = 0; - me->current = me->head; - while(me->current) - if(me->current->oid == oid) - { - return i; - } - else - { - ++i; - me->current = me->current->next; - } - } - return -1; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidLinkedListHasOid - * - * Description: - * - * Determines if an oid is an element of a XpOidLinkedList. - * - * Return value: - * - * xTrue if the oid is found in the list. - * - * xFalse if the oid is not in the list, or if 'me' is NULL. - */ -BOOL -XpOidLinkedListHasOid(XpOidLinkedList* me, - XpOid oid) -{ - if((XpOidLinkedList*)NULL != me) - { - me->current = me->head; - while(me->current) - if(me->current->oid == oid) - return xTrue; - else - me->current = me->current->next; - } - return xFalse; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidLinkedListFirstOid - * - * Description: - * - * Positions the XpOidLinkedList 'current' pointer to the first entry - * in the list. - * - * Return value: - * - * The first oid in the list, or xpoid_none if the list NULL or - * empty. - */ -XpOid -XpOidLinkedListFirstOid(XpOidLinkedList* me) -{ - if((XpOidLinkedList*)NULL != me && (me->current = me->head)) - return me->current->oid; - else - return xpoid_none; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidLinkedListNextOid - * - * Description: - * - * Positions the XpOidLinkedList 'current' pointer to the next entry - * in the list. - * - * Return value: - * - * The next oid, or xpoid_none if the end of the list has been - * reached. - */ -XpOid -XpOidLinkedListNextOid(XpOidLinkedList* me) -{ - if(me->current ? (me->current = me->current->next) : xFalse) - return me->current->oid; - else - return xpoid_none; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidMediumSSNew - * - * Description: - * - * Creates a new XpOidMediumSS initialized from a string value - * specified using the medium-source-sizes syntax. See - * MediumSSParse() below for parsing details. - * - * Return value: - * - * NULL if the passed 'value_string' is NULL, or if a syntax error is - * encountered while parsing the medium-source-sizes value. - * - */ -XpOidMediumSS* -XpOidMediumSSNew(const char* value_string, - const XpOidList* valid_trays, - const XpOidList* valid_medium_sizes) -{ - if(value_string == (const char*)NULL) - return (XpOidMediumSS*)NULL; - else - { - const char* ptr = value_string + SpanWhitespace(value_string); - if(*ptr == '\0') - return (XpOidMediumSS*)NULL; - else - return MediumSSParse(ptr, valid_trays, valid_medium_sizes, - &ptr, 0); - } -} - -/* - * ------------------------------------------------------------------------ - * Name: MediumSSParse - * - * Description: - * - * 'ptr_return' *cannot* be NULL. - * - * - * Return value: - * - * - * - */ -static XpOidMediumSS* -MediumSSParse(const char* value_string, - const XpOidList* valid_trays, - const XpOidList* valid_medium_sizes, - const char** ptr_return, - int i) -{ - XpOidMediumSS* medium_ss; - XpOidMediumSourceSize mss; - /* - * check for the start of a new MediumSourceSize sequence - */ - if(ParseSeqStart(value_string, ptr_return)) - { - /* - * check for an unspecified tray value - */ - if(ParseUnspecifiedValue(*ptr_return, ptr_return)) - mss.input_tray = xpoid_unspecified; - else - { - const char* tray_str; - *ptr_return += SpanWhitespace(*ptr_return); - tray_str = *ptr_return; - /* - * parse out the input tray - */ - mss.input_tray = XpOidParse(*ptr_return, ptr_return); - if((const XpOidList*)NULL != valid_trays - && - !XpOidListHasOid(valid_trays, mss.input_tray) - ) - mss.input_tray = xpoid_none; - if(xpoid_none == mss.input_tray) - { - char* invalid_tray_str; - int len = *ptr_return - tray_str; - if(len > 0) - { - invalid_tray_str = XpOidMalloc(len+1); - strncpy(invalid_tray_str, tray_str, len); - invalid_tray_str[len] = '\0'; - ErrorF("%s\nInvalid tray (%s) found. Will attempt to continue parsing.\n", - XPMSG_WARN_MSS, invalid_tray_str); - XpOidFree(invalid_tray_str); - } - } - } - /* - * attempt to parse a Continuous MediumSize sequence - */ - mss.ms.continuous_size = - MediumContinuousSizeParse(*ptr_return, ptr_return); - if(mss.ms.continuous_size != (XpOidMediumContinuousSize*)NULL) - { - mss.mstag = XpOidMediumSS_CONTINUOUS; - } - else - { - /* - * not continuous, try Discrete MediumSize - */ - mss.ms.discrete = - MediumDiscreteSizeListParse(*ptr_return, valid_medium_sizes, - ptr_return, 0); - if(mss.ms.discrete == (XpOidMediumDiscreteSizeList*)NULL) - { - const char* tray_str; - /* - * syntax error (MediumDiscreteSizeListParse reports error) - */ - switch(mss.input_tray) - { - case xpoid_none: - tray_str = "an invalid"; - break; - case xpoid_unspecified: - tray_str = "default (tray specifier omitted)"; - break; - default: - tray_str = XpOidString(mss.input_tray); - break; - } - ErrorF("%s\nError occurred while parsing medium sizes for %s tray.\n", - XPMSG_WARN_MSS, tray_str); - return NULL; - } - mss.mstag = XpOidMediumSS_DISCRETE; - } - /* - * parse out the MediumSourceSize sequence end - */ - if(!ParseSeqEnd(*ptr_return, ptr_return)) - { - /* - * syntax error - */ - ErrorF("%s\nSequence End expected. Unparsed data: %s\n", - XPMSG_WARN_MSS, *ptr_return); - return NULL; - } - /* - * recurse to parse the next MediumSourceSize sequence - */ - medium_ss = MediumSSParse(*ptr_return, - valid_trays, valid_medium_sizes, - ptr_return, - xpoid_none == mss.input_tray ? i : i+1); - if(medium_ss == (XpOidMediumSS*)NULL - || - xpoid_none == mss.input_tray) - { - /* - * syntax error or invalid tray - clean up - */ - switch(mss.mstag) - { - case XpOidMediumSS_CONTINUOUS: - MediumContinuousSizeDelete(mss.ms.continuous_size); - break; - case XpOidMediumSS_DISCRETE: - MediumDiscreteSizeListDelete(mss.ms.discrete); - break; - } - if(medium_ss == (XpOidMediumSS*)NULL) - /* - * syntax error - return - */ - return NULL; - } - if(xpoid_none != mss.input_tray) - { - /* - * copy the current MediumSourceSize into the array - */ - memmove((medium_ss->mss)+i, &mss, sizeof(XpOidMediumSourceSize)); - } - } - else - { - /* - * MediumSourceSize sequence start not found - */ - if(**ptr_return == '\0') - { - if(0 == i) - { - ErrorF("%s\nNo valid trays found.\n", XPMSG_WARN_MSS); - return NULL; - } - /* - * end of value string; allocate the MediumSS structure - */ - medium_ss = (XpOidMediumSS*)XpOidCalloc(1, sizeof(XpOidMediumSS)); - medium_ss->count = i; - medium_ss->mss = (XpOidMediumSourceSize*) - XpOidCalloc(i, sizeof(XpOidMediumSourceSize)); - } - else - { - /* - * syntax error - */ - ErrorF("%s\nSequence Start expected.\nunparsed data: %s\n", - XPMSG_WARN_MSS, *ptr_return); - return NULL; - } - } - return medium_ss; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidMediumSSDelete - * - * Description: - * - * - * - * Return value: - * - * - * - */ -void -XpOidMediumSSDelete(XpOidMediumSS* me) -{ - if(me != (XpOidMediumSS*)NULL) - { - int i; - for(i = 0; i < me->count; i++) - { - switch((me->mss)[i].mstag) - { - case XpOidMediumSS_CONTINUOUS: - MediumContinuousSizeDelete((me->mss)[i].ms.continuous_size); - break; - case XpOidMediumSS_DISCRETE: - MediumDiscreteSizeListDelete((me->mss)[i].ms.discrete); - break; - } - } - XpOidFree((char*)me); - } -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidMediumSSHasSize - * - * Description: - * - * - * - * Return value: - * - * - * - */ -BOOL -XpOidMediumSSHasSize(XpOidMediumSS* me, XpOid page_size) -{ - int i_mss, i_ds; - XpOidMediumDiscreteSizeList* ds_list; - - if(me != (XpOidMediumSS*)NULL && page_size != xpoid_none) - for(i_mss = 0; i_mss < me->count; i_mss++) - { - switch((me->mss)[i_mss].mstag) - { - case XpOidMediumSS_DISCRETE: - ds_list = (me->mss)[i_mss].ms.discrete; - for(i_ds = 0; i_ds < ds_list->count; i_ds++) - if(page_size == (ds_list->list)[i_ds].page_size) - return xTrue; - break; - - case XpOidMediumSS_CONTINUOUS: - /* - * unsupported - */ - break; - } - } - /* - * return - */ - return xFalse; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidMediumSSString - * - * Description: - * - * Creates a string representation of an XpOidMediumSS structure. - * - * Return value: - * - * A newly allocated - * - */ -char* XpOidMediumSSString(const XpOidMediumSS* me) -{ - int itray, isize; - int valid_size_count; - int length; - char* str; - char* ptr; - XpOidMediumDiscreteSize* ds; - char buf[128]; - /* - * determine the size of the string representation - */ - for(itray = 0, length = 0; itray < XpOidMediumSSCount(me); itray++) - { - if(xpoid_none == me->mss[itray].input_tray - || - XpOidMediumSS_CONTINUOUS == me->mss[itray].mstag) - { - /* - * skip invalid tray or unsupported continuous size spec - */ - continue; - } - for(isize = 0, valid_size_count = 0; - isize < me->mss[itray].ms.discrete->count; - isize++) - { - ds = me->mss[itray].ms.discrete->list+isize; - if(ds->page_size == xpoid_none) - continue; - ++valid_size_count; - length += XpOidStringLength(ds->page_size); - length += ds->long_edge_feeds ? 4 : 5; /* "True" or "False" */ -#if defined(sun) && !defined(SVR4) - sprintf(buf, "{%.4f %.4f %.4f %.4f}", - ds->assured_reproduction_area.minimum_x, - ds->assured_reproduction_area.maximum_x, - ds->assured_reproduction_area.minimum_y, - ds->assured_reproduction_area.maximum_y); - length += strlen(buf); -#else - length += sprintf(buf, "{%.4f %.4f %.4f %.4f}", - ds->assured_reproduction_area.minimum_x, - ds->assured_reproduction_area.maximum_x, - ds->assured_reproduction_area.minimum_y, - ds->assured_reproduction_area.maximum_y); -#endif - length += 5; /* "{ } " */ - } - if(valid_size_count == 0) - { - /* - * no valid sizes, skip - */ - continue; - } - if(xpoid_unspecified == me->mss[itray].input_tray) - length += 2; /* "''" */ - else - length += XpOidStringLength(me->mss[itray].input_tray); - length += 4; /* "{ } " */ - } - /* - * allocate - */ - str = XpOidMalloc(length+1); - /* - * format - */ - for(itray = 0, ptr = str; itray < XpOidMediumSSCount(me); itray++) - { - if(xpoid_none == me->mss[itray].input_tray - || - XpOidMediumSS_CONTINUOUS == me->mss[itray].mstag) - { - /* - * skip invalid tray or unsupported continuous size spec - */ - continue; - } - /* - * check to ensure all of the specified sizes are valid - */ - for(isize = 0, valid_size_count = 0; - isize < me->mss[itray].ms.discrete->count; - isize++) - { - ds = me->mss[itray].ms.discrete->list+isize; - if(ds->page_size != xpoid_none) - ++valid_size_count; - } - if(valid_size_count == 0) - { - /* - * no valid sizes, skip - */ - continue; - } - - if(xpoid_unspecified == me->mss[itray].input_tray) - { -#if defined(sun) && !defined(SVR4) - sprintf(ptr, "{'' "); - ptr += strlen(ptr); -#else - ptr += sprintf(ptr, "{'' "); -#endif - } - else - { -#if defined(sun) && !defined(SVR4) - sprintf(ptr, "{%s ", XpOidString(me->mss[itray].input_tray)); - ptr += strlen(ptr); -#else - ptr += sprintf(ptr, "{%s ", - XpOidString(me->mss[itray].input_tray)); -#endif - } - for(isize = 0; isize < me->mss[itray].ms.discrete->count; isize++) - { - ds = me->mss[itray].ms.discrete->list+isize; - if(ds->page_size != xpoid_none) -#if defined(sun) && !defined(SVR4) - { - sprintf(ptr, "{%s %s {%.4f %.4f %.4f %.4f}} ", - XpOidString(ds->page_size), - ds->long_edge_feeds ? "True" : "False", - ds->assured_reproduction_area.minimum_x, - ds->assured_reproduction_area.maximum_x, - ds->assured_reproduction_area.minimum_y, - ds->assured_reproduction_area.maximum_y); - ptr += strlen(ptr); - } -#else - ptr += sprintf(ptr, "{%s %s {%.4f %.4f %.4f %.4f}} ", - XpOidString(ds->page_size), - ds->long_edge_feeds ? "True" : "False", - ds->assured_reproduction_area.minimum_x, - ds->assured_reproduction_area.maximum_x, - ds->assured_reproduction_area.minimum_y, - ds->assured_reproduction_area.maximum_y); -#endif - } -#if defined(sun) && !defined(SVR4) - sprintf(ptr, "} "); - ptr += strlen(ptr); -#else - ptr += sprintf(ptr, "} "); -#endif - } - /* - * chop trailing whitespace or terminate empty string - */ - str[length] = '\0'; - /* - * return - */ - return str; -} - -/* - * ------------------------------------------------------------------------ - * Name: MediumContinuousSizeParse - * - * Description: - * - * 'ptr_return' *cannot* be NULL. - * - * - * Return value: - * - * - * - */ -static XpOidMediumContinuousSize* -MediumContinuousSizeParse(const char* value_string, - const char** ptr_return) -{ - const char* first_nonws_ptr; - XpOidMediumContinuousSize* mcs = NULL; - /* - * skip leading whitespace - */ - first_nonws_ptr = value_string + SpanWhitespace(value_string); - /* - * parse out the MediumSize sequence start char - */ - if(!ParseSeqStart(first_nonws_ptr, ptr_return)) - goto MediumContinuousSizeParse_error; - /* - * peek ahead to see if it looks like we actually have a continuous - * size spec (looking for the sequence start char on the 1st range spec) - */ - if(!ParseSeqStart(*ptr_return, (const char**)NULL)) - goto MediumContinuousSizeParse_error; - /* - * Ok, let's go for it - */ - mcs = (XpOidMediumContinuousSize*) - XpOidCalloc(1, sizeof(XpOidMediumContinuousSize)); - /* - * "range across the feed direction" - */ - if(!ParseRealRange(*ptr_return, ptr_return, &mcs->range_across_feed)) - goto MediumContinuousSizeParse_error; - /* - * "increment across the feed direction" (optional, default 0) - */ - if(!ParseUnspecifiedValue(*ptr_return, ptr_return)) - if(!ParseRealValue(*ptr_return, ptr_return, - &mcs->increment_across_feed)) - goto MediumContinuousSizeParse_error; - /* - * "range in the feed direction" - */ - if(!ParseRealRange(*ptr_return, ptr_return, &mcs->range_in_feed)) - goto MediumContinuousSizeParse_error; - /* - * "increment in the feed direction" (optional, default 0) - */ - if(!ParseUnspecifiedValue(*ptr_return, ptr_return)) - if(!ParseRealValue(*ptr_return, ptr_return, - &mcs->increment_in_feed)) - goto MediumContinuousSizeParse_error; - /* - * "long edge feeds" flag (default TRUE) - */ - if(ParseUnspecifiedValue(*ptr_return, ptr_return)) - mcs->long_edge_feeds = xTrue; - else - if(!ParseBoolValue(*ptr_return, ptr_return, &mcs->long_edge_feeds)) - goto MediumContinuousSizeParse_error; - /* - * "generic assured reproduction area" - */ - if(!ParseArea(*ptr_return, ptr_return, &mcs->assured_reproduction_area)) - goto MediumContinuousSizeParse_error; - /* - * parse out the MediumSize sequence end character - */ - if(!ParseSeqEnd(*ptr_return, ptr_return)) - goto MediumContinuousSizeParse_error; - /* - * return - */ - return mcs; - - - MediumContinuousSizeParse_error: - /* - * syntax error - don't log since this function may be called - * as a lookahead - */ - *ptr_return = first_nonws_ptr; - XpOidFree((char*)mcs); - return NULL; -} - -/* - * ------------------------------------------------------------------------ - * Name: MediumContinuousSizeDelete - * - * Description: - * - * 'ptr_return' *cannot* be NULL. - * - * - * Return value: - * - * - * - */ -static void -MediumContinuousSizeDelete(XpOidMediumContinuousSize* me) -{ - XpOidFree((char*)me); -} - -/* - * ------------------------------------------------------------------------ - * Name: MediumDiscreteSizeListParse - * - * Description: - * - * 'ptr_return' *cannot* be NULL. - * - * Return value: - * - * - * - */ -static XpOidMediumDiscreteSizeList* -MediumDiscreteSizeListParse(const char* value_string, - const XpOidList* valid_medium_sizes, - const char** ptr_return, - int i) -{ - XpOidMediumDiscreteSizeList* list; - XpOidMediumDiscreteSize mds; - /* - * check for the start of a new MediumSize sequence - */ - if(ParseSeqStart(value_string, ptr_return)) - { - /* - * "page size" - */ - mds.page_size = XpOidParse(*ptr_return, ptr_return); - if((const XpOidList*)NULL != valid_medium_sizes - && - !XpOidListHasOid(valid_medium_sizes, mds.page_size) - ) - mds.page_size = xpoid_none; - /* - * "long edge feeds" flag (default TRUE) - */ - if(ParseUnspecifiedValue(*ptr_return, ptr_return)) - mds.long_edge_feeds = xTrue; - else - if(!ParseBoolValue(*ptr_return, ptr_return, - &mds.long_edge_feeds)) - { - /* - * syntax error - */ - ErrorF("%s\nBoolean expected.\nunparsed data: %s\n", - XPMSG_WARN_MSS, *ptr_return); - return (XpOidMediumDiscreteSizeList*)NULL; - } - /* - * "assured reproduction area" - */ - if(!ParseArea(*ptr_return, ptr_return, - &mds.assured_reproduction_area)) - { - /* - * syntax error - */ - ErrorF("%s\nArea specification error.\nunparsed data: %s\n", - XPMSG_WARN_MSS, *ptr_return); - return (XpOidMediumDiscreteSizeList*)NULL; - } - /* - * parse out the MediumSize sequence end character - */ - if(!ParseSeqEnd(*ptr_return, ptr_return)) - { - ErrorF("%s\nSequence End expected. Unparsed data: %s\n", - XPMSG_WARN_MSS, *ptr_return); - return (XpOidMediumDiscreteSizeList*)NULL; - } - /* - * recurse to parse the next Discrete MediumSize sequence - */ - if(mds.page_size == xpoid_none) - { - list = MediumDiscreteSizeListParse(*ptr_return, valid_medium_sizes, - ptr_return, i); - } - else - { - list = MediumDiscreteSizeListParse(*ptr_return, valid_medium_sizes, - ptr_return, i+1); - if(list != (XpOidMediumDiscreteSizeList*)NULL) - { - /* - * copy the current discrete MediumSize into the list - */ - memmove((list->list)+i, &mds, sizeof(XpOidMediumDiscreteSize)); - } - } - } - else - { - /* - * MediumSize sequence start not found; end of the discrete sizes - * list - */ - if(0 == i) - { - ErrorF("%s\nNo valid medium sizes found for tray.\n", - XPMSG_WARN_MSS); - return (XpOidMediumDiscreteSizeList*)NULL; - } - list = (XpOidMediumDiscreteSizeList*) - XpOidCalloc(1, sizeof(XpOidMediumDiscreteSizeList)); - list->count = i; - list->list = (XpOidMediumDiscreteSize*) - XpOidCalloc(i, sizeof(XpOidMediumDiscreteSize)); - } - return list; -} - -/* - * ------------------------------------------------------------------------ - * Name: MediumDiscreteSizeListDelete - * - * Description: - * - * - * - * Return value: - * - * - * - */ -static void -MediumDiscreteSizeListDelete(XpOidMediumDiscreteSizeList* list) -{ - if(list != (XpOidMediumDiscreteSizeList*)NULL) - { - XpOidFree((char*)list->list); - XpOidFree((char*)list); - } -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidTrayMediumListNew - * - * Description: - * - * Only need the valid trays; validation requires bumping up against - * msss using TrayMediumListValidate; this needs valid trays - * because of unspecified trays ion msss, but - * TrayMediumListValidate will take care of invalid sizes... - * - * Return value: - * - * - * - */ -XpOidTrayMediumList* -XpOidTrayMediumListNew(const char* value_string, - const XpOidList* valid_trays, - const XpOidMediumSS* msss) -{ - if(value_string == (const char*)NULL) - return (XpOidTrayMediumList*)NULL; - else - { - const char* ptr; - XpOidTrayMediumList* me; - me = TrayMediumListParse(value_string, valid_trays, &ptr, 0); - if((XpOidTrayMediumList*)NULL != me) - TrayMediumListValidate(me, msss); - return me; - } -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidTrayMediumListDelete - * - * Description: - * - * - * - * Return value: - * - * - * - */ -void -XpOidTrayMediumListDelete(XpOidTrayMediumList* list) -{ - if(list != (XpOidTrayMediumList*)NULL) - { - XpOidFree((char*)list->list); - XpOidFree((char*)list); - } -} - -/* - * ------------------------------------------------------------------------ - * Name: TrayMediumListParse - * - * Description: - * - * 'ptr_return' *cannot* be NULL. - * - * Return value: - * - * - * - */ -static XpOidTrayMediumList* -TrayMediumListParse(const char* value_string, - const XpOidList* valid_trays, - const char** ptr_return, int i) -{ - XpOidTrayMedium tm; - XpOidTrayMediumList* list; - /* - * check for the start of a new InputTrayMedium sequence - */ - if(ParseSeqStart(value_string, ptr_return)) - { - /* - * "input tray" - */ - tm.input_tray = XpOidParse(*ptr_return, ptr_return); - if((XpOidList*)NULL != valid_trays - && - !XpOidListHasOid(valid_trays, tm.input_tray) - ) - tm.input_tray = xpoid_none; - /* - * "medium" - */ - tm.medium = XpOidParse(*ptr_return, ptr_return); - /* - * parse out the InputTrayMedium sequence end character - */ - if(!ParseSeqEnd(*ptr_return, ptr_return)) - { - ErrorF("%s\n", XPMSG_WARN_ITM); - return NULL; - } - /* - * recurse to parse the next InputTrayMedium sequence - */ - list = TrayMediumListParse(*ptr_return, valid_trays, ptr_return, i+1); - if(list != (XpOidTrayMediumList*)NULL) - { - /* - * copy the current InputTrayMedium into the list - */ - memmove((list->list)+i, &tm, sizeof(XpOidTrayMedium)); - } - } - else - { - /* - * InputTrayMedium sequence start not found - */ - if(**ptr_return == '\0') - { - /* - * end of the list - */ - list = (XpOidTrayMediumList*) - XpOidCalloc(1, sizeof(XpOidTrayMediumList)); - list->count = i; - list->list = (XpOidTrayMedium*) - XpOidCalloc(i, sizeof(XpOidTrayMedium)); - } - else - { - /* - * syntax error - */ - ErrorF("%s\n", XPMSG_WARN_ITM); - return NULL; - } - } - /* - * return - */ - return list; -} - -/* - * ------------------------------------------------------------------------ - * Name: TrayMediumListValidate - * - * Description: - * - * Validate the input-trays-medium list based on a passed - * medium-source-sizes-supported structure. The validated - * input-trays-medium list will have the same number of entries upon - * return from this function. Invalid entries are indicated by - * setting the tray specification to xpoid_none. - * - * Return value: - * - * None. - * - */ -static void -TrayMediumListValidate(XpOidTrayMediumList* me, - const XpOidMediumSS* msss) -{ - int i_mss, i_ds, i_itm; - XpOid current_tray, current_medium; - XpOidMediumDiscreteSizeList* unspecified_tray_ds; - XpOidMediumDiscreteSizeList* tray_ds; - - if(msss == (XpOidMediumSS*)NULL - || - me == (XpOidTrayMediumList*)NULL) - { - return; - } - /* - * loop through the input trays medium list - */ - for(i_itm = 0; i_itm < XpOidTrayMediumListCount(me); i_itm++) - { - current_tray = XpOidTrayMediumListTray(me, i_itm); - if(current_tray == xpoid_none) - continue; - current_medium = XpOidTrayMediumListMedium(me, i_itm); - if(current_medium == xpoid_none) - { - /* - * no medium; invalidate this entry - */ - me->list[i_itm].input_tray = xpoid_none; - continue; - } - /* - * loop through the MediumSourceSizes, looking for an appropriate - * discrete sizes spec for the current tray - */ - unspecified_tray_ds = (XpOidMediumDiscreteSizeList*)NULL; - tray_ds = (XpOidMediumDiscreteSizeList*)NULL; - for(i_mss = 0; - i_mss < msss->count && - tray_ds == (XpOidMediumDiscreteSizeList*)NULL; - i_mss++) - { - switch((msss->mss)[i_mss].mstag) - { - case XpOidMediumSS_DISCRETE: - if((msss->mss)[i_mss].input_tray == current_tray) - tray_ds = (msss->mss)[i_mss].ms.discrete; - else if((msss->mss)[i_mss].input_tray == xpoid_unspecified) - unspecified_tray_ds = (msss->mss)[i_mss].ms.discrete; - break; - - case XpOidMediumSS_CONTINUOUS: - /* - * unsupported - */ - break; - } - } - /* - * if the tray was not matched, use the unspecified tray size - * list - */ - if(tray_ds == (XpOidMediumDiscreteSizeList*)NULL) - { - if(unspecified_tray_ds == (XpOidMediumDiscreteSizeList*)NULL) - { - /* - * not even an unspecified tray, invalidate this - * input-trays-medium entry. - */ - me->list[i_itm].input_tray = xpoid_none; - continue; - } - else - tray_ds = unspecified_tray_ds; - } - /* - * loop through the discrete sizes list, looking for a size that - * matches the medium for the current input tray - */ - for(i_ds = 0; i_ds < tray_ds->count; i_ds++) - { - /* - * check to see if the current input tray's medium size - * matches the current discrete size - * - * Note: in the CDEnext SI, medium identifiers coincide with - * medium-size identifiers. If the DP-Medium object is - * ever implemented, this check would need to be - * changed so that the input tray's medium size is - * obtained from the indicated Medium object, and not - * inferred from the medium identifier itself. - */ - if((tray_ds->list)[i_ds].page_size == current_medium) - { - /* - * The current input tray's medium size matches the - * current discrete medium size. - */ - break; - } - } - if(i_ds == tray_ds->count) - { - /* - * The current input tray's medium size was not found in the - * discrete size list; mark the input tray medium entry - * invalid - */ - me->list[i_itm].input_tray = xpoid_none; - } - - } -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidTrayMediumListString - * - * Description: - * - * Creates a string representation of an XpOidTrayMediumList structure. - * - * Return value: - * - * A newly allocated - * - */ -char* XpOidTrayMediumListString(const XpOidTrayMediumList* me) -{ - int i; - int length; - char* str; - char* ptr; - XpOid tray; - /* - * allocate enough memory for the string representation, - * including intervening delimiters and whitespace - */ - for(i = 0, length = 0; i < XpOidTrayMediumListCount(me); i++) - { - tray = XpOidTrayMediumListTray(me, i); - if(xpoid_none != tray) - { - length += XpOidStringLength(tray); - length += XpOidStringLength(XpOidTrayMediumListMedium(me, i)); - length += 4; - } - } - str = XpOidMalloc(length+1); - /* - * format the list - */ - for(i = 0, ptr = str; i < XpOidTrayMediumListCount(me); i++) - { - tray = XpOidTrayMediumListTray(me, i); - if(xpoid_none != tray) - { -#if defined(sun) && !defined(SVR4) - sprintf(ptr, "{%s %s} ", - XpOidString(tray), - XpOidString(XpOidTrayMediumListMedium(me, i))); - ptr += strlen(ptr); -#else - ptr += sprintf(ptr, "{%s %s} ", - XpOidString(tray), - XpOidString(XpOidTrayMediumListMedium(me, i))); -#endif - } - } - /* - * chop trailing whitespace or terminate empty string - */ - str[length] = '\0'; - /* - * return - */ - return str; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidTrayMediumListHasTray - * - * Description: - * - * Determines if 'tray' is found in 'list'. - * - * Return value: - * - * xTrue if the tray is found in the list. - * - * xFalse if the tray is not in the list, or if 'list' is NULL. - * - */ -BOOL -XpOidTrayMediumListHasTray(const XpOidTrayMediumList* list, XpOid tray) -{ - int i; - if(list != (XpOidTrayMediumList*)NULL && tray != xpoid_none) - for(i = 0; i < list->count; i++) - if(XpOidTrayMediumListTray(list, i) == tray) - return xTrue; - return xFalse; -} - -/* - * ------------------------------------------------------------------------ - * Name: ParseArea - * - * Description: - * - * Skips leading whitespace and parses out and returns a XpOidArea. - * - * Return value: - * - * xTrue if the XpOidArea was successfully parsed. ptr_return is - * updated to point to location where the parsing ended. - * - * xFalse if a XpOidArea was not found; ptr_return is updated - * to point to the first non-whitespace char in value_string. - * - */ -static BOOL -ParseArea(const char* value_string, - const char** ptr_return, - XpOidArea* area_return) -{ - const char* first_nonws_ptr; - const char* ptr; - /* - * skip leading whitespace - */ - first_nonws_ptr = value_string + SpanWhitespace(value_string); - /* - * parse out the area sequence start - */ - if(!ParseSeqStart(first_nonws_ptr, &ptr)) - goto ParseArea_error; - /* - * parse the minimum x value - */ - if(!ParseRealValue(ptr, &ptr, - area_return ? &area_return->minimum_x : NULL)) - goto ParseArea_error; - /* - * parse the maximum x value - */ - if(!ParseRealValue(ptr, &ptr, - area_return ? &area_return->maximum_x : NULL)) - goto ParseArea_error; - /* - * parse the minimum y value - */ - if(!ParseRealValue(ptr, &ptr, - area_return ? &area_return->minimum_y : NULL)) - goto ParseArea_error; - /* - * parse the maximum y value - */ - if(!ParseRealValue(ptr, &ptr, - area_return ? &area_return->maximum_y : NULL)) - goto ParseArea_error; - /* - * parse out the area sequence end - */ - if(!ParseSeqEnd(ptr, &ptr)) - goto ParseArea_error; - /* - * update the return pointer - */ - if(ptr_return != (const char**)NULL) - *ptr_return = ptr; - /* - * return - */ - return xTrue; - - - ParseArea_error: - /* - * syntax error - */ - if(ptr_return != (const char**)NULL) - *ptr_return = first_nonws_ptr; - return xFalse; -} - -/* - * ------------------------------------------------------------------------ - * Name: ParseRealRange - * - * Description: - * - * Skips leading whitespace and parses out and returns a - * XpOidRealRange. - * - * Return value: - * - * xTrue if the XpOidRealRange was successfully - * parsed. ptr_return is updated to point to location where the - * parsing ended. - * - * xFalse if a XpOidRealRange was not found; ptr_return is - * updated to point to the first non-whitespace char in value_string. - * - */ -static BOOL -ParseRealRange(const char* value_string, - const char** ptr_return, - XpOidRealRange* range_return) -{ - const char* first_nonws_ptr; - const char* ptr; - /* - * skip leading whitespace - */ - first_nonws_ptr = value_string + SpanWhitespace(value_string); - /* - * parse out the range sequence start - */ - if(!ParseSeqStart(first_nonws_ptr, &ptr)) - goto ParseRealRange_error; - /* - * parse the lower bound - */ - if(!ParseRealValue(ptr, &ptr, - range_return ? &range_return->lower_bound : NULL)) - goto ParseRealRange_error; - /* - * parse the upper bound - */ - if(!ParseRealValue(ptr, &ptr, - range_return ? &range_return->upper_bound : NULL)) - goto ParseRealRange_error; - /* - * parse out the range sequence end - */ - if(!ParseSeqEnd(ptr, &ptr)) - goto ParseRealRange_error; - /* - * update the return pointer - */ - if(ptr_return != (const char**)NULL) - *ptr_return = ptr; - /* - * return - */ - return xTrue; - - - ParseRealRange_error: - /* - * syntax error - */ - if(ptr_return != (const char**)NULL) - *ptr_return = first_nonws_ptr; - return xFalse; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidNotifyParse - * - * Description: - * - * - * Return value: - * - * - */ -XpOidNotify XpOidNotifyParse(const char* value_string) -{ - const char* ptr = value_string; - - if(value_string == (const char*)NULL) - return XPOID_NOTIFY_NONE; - /* - * look for an event handling profile sequence start - */ - if(!ParseSeqStart(value_string, &ptr)) - { - if('\0' == *ptr) - /* - * empty value is valid - */ - return XPOID_NOTIFY_NONE; - else - return XPOID_NOTIFY_UNSUPPORTED; - } - /* - * look for an event set sequence start - */ - if(!ParseSeqStart(ptr, &ptr)) - { - /* - * check for an empty event handling profile - */ - if(ParseSeqEnd(ptr, &ptr)) - { - ptr += SpanWhitespace(ptr); - if(*ptr == '\0') - /* - * valid empty event handling profile sequence - */ - return XPOID_NOTIFY_NONE; - } - return XPOID_NOTIFY_UNSUPPORTED; - } - /* - * the only event in the set should be report job completed - */ - if(xpoid_val_event_report_job_completed != XpOidParse(ptr, &ptr)) - return XPOID_NOTIFY_UNSUPPORTED; - /* - * event set sequence end - */ - if(!ParseSeqEnd(ptr, &ptr)) - return XPOID_NOTIFY_UNSUPPORTED; - /* - * delivery method of electronic mail - */ - if(xpoid_val_delivery_method_electronic_mail != XpOidParse(ptr, &ptr)) - return XPOID_NOTIFY_UNSUPPORTED; - /* - * event handling profile sequence end - */ - if(!ParseSeqEnd(ptr, &ptr)) - return XPOID_NOTIFY_UNSUPPORTED; - /* - * end of value - */ - ptr += SpanWhitespace(ptr); - if('\0' == *ptr) - /* - * valid supported notification profile - */ - return XPOID_NOTIFY_EMAIL; - else - return XPOID_NOTIFY_UNSUPPORTED; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidNotifyString - * - * Description: - * - * - * Return value: - * - * - */ -const char* XpOidNotifyString(XpOidNotify notify) -{ - switch(notify) - { - case XPOID_NOTIFY_NONE: - return NOTIFY_NONE_STR; - case XPOID_NOTIFY_EMAIL: - return NOTIFY_EMAIL_STR; - case XPOID_NOTIFY_UNSUPPORTED: - return (const char *)NULL; - } - - ErrorF("XpOidNotifyString: Unsupported notify=%ld\n", (long)notify); - return (const char *)NULL; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidDocFmtNew - * - * Description: - * - * - * Return value: - * - * - */ -XpOidDocFmt* -XpOidDocFmtNew(const char* value_string) -{ - XpOidDocFmt* doc_fmt; - const char* ptr; - - if((const char*)NULL == value_string) - return (XpOidDocFmt*)NULL; - ptr = value_string + SpanWhitespace(value_string); - if('\0' == *ptr) - return (XpOidDocFmt*)NULL; - /* - * get the document format from the value string - */ - doc_fmt = (XpOidDocFmt*)XpOidCalloc(1, sizeof(XpOidDocFmt)); - if(xTrue == XpOidDocFmtNext(doc_fmt, ptr, &ptr)) - { - /* - * verify that the document format is the only value specified - */ - ptr += SpanWhitespace(ptr); - if('\0' == *ptr) - /* - * valid document-format value - */ - return doc_fmt; - } - /* - * invalid - */ - XpOidDocFmtDelete(doc_fmt); - ErrorF("%s\n", XPMSG_WARN_DOC_FMT); - return (XpOidDocFmt*)NULL; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidDocFmtDelete - * - * Description: - * - * - * Return value: - * - * - */ -void -XpOidDocFmtDelete(XpOidDocFmt* doc_fmt) -{ - if((XpOidDocFmt*)NULL != doc_fmt) - { - XpOidFree(doc_fmt->format); - XpOidFree(doc_fmt->variant); - XpOidFree(doc_fmt->version); - XpOidFree(doc_fmt); - } -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidDocFmtString - * - * Description: - * - * - * Return value: - * - * - */ -char* -XpOidDocFmtString(XpOidDocFmt* doc_fmt) -{ - if((XpOidDocFmt*)NULL != doc_fmt) - { - if((char*)NULL != doc_fmt->format) - { - char* str = XpOidMalloc(1+SafeStrLen(doc_fmt->format)+ - 1+SafeStrLen(doc_fmt->variant)+ - 1+SafeStrLen(doc_fmt->version)+ - 1+1); - sprintf(str, "{%s %s %s}", doc_fmt->format, - (char*)NULL != doc_fmt->variant ? doc_fmt->variant : "", - (char*)NULL != doc_fmt->version ? doc_fmt->version : ""); - return str; - } - } - return (char*)NULL; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidDocFmtNext - * - * Description: - * - * Assumes non-NULL value string. - * - * Return value: - * - * - */ -static BOOL -XpOidDocFmtNext(XpOidDocFmt* doc_fmt, - const char* value_string, - const char** ptr_return) -{ - const char* ptr; - const char* first_nonws_ptr; - const char* format; - const char* variant; - const char* version; - int format_len; - int variant_len; - int version_len; - /* - * skip leading whitespace - */ - ptr = value_string + SpanWhitespace(value_string); - first_nonws_ptr = ptr; - /* - * sequence start - */ - if(!ParseSeqStart(ptr, &ptr)) - goto XpOidDocFmtNext_error; - /* - * skip whitepace to the start of the document format, and save the - * location - */ - ptr += SpanWhitespace(ptr); - format = ptr; - /* - * document format - */ - if(0 == (format_len = SpanToken(ptr))) - goto XpOidDocFmtNext_error; - ptr += format_len; - /* - * optional variant - */ - ptr += SpanWhitespace(ptr); - variant = ptr; - if(0 != (variant_len = SpanToken(ptr))) - { - ptr += variant_len; - /* - * optional version - */ - ptr += SpanWhitespace(ptr); - version = ptr; - version_len = SpanToken(ptr); - ptr += version_len; - } - else - version_len = 0; - /* - * sequence end - */ - if(!ParseSeqEnd(ptr, &ptr)) - goto XpOidDocFmtNext_error; - /* - * update return pointer - */ - if((const char**)NULL != ptr_return) - *ptr_return = ptr; - /* - * update the passed document format struct - */ - memset(doc_fmt, 0, sizeof(XpOidDocFmt)); - doc_fmt->format = XpOidMalloc(format_len+1); - strncpy(doc_fmt->format, format, format_len); - doc_fmt->format[format_len] = '\0'; - if(0 < variant_len) - { - doc_fmt->variant = XpOidMalloc(variant_len+1); - strncpy(doc_fmt->variant, variant, variant_len); - doc_fmt->variant[variant_len] = '\0'; - if(0 < version_len) - { - doc_fmt->version = XpOidMalloc(version_len+1); - strncpy(doc_fmt->version, version, version_len); - doc_fmt->version[version_len] = '\0'; - } - } - return xTrue; - - XpOidDocFmtNext_error: - if((const char**)NULL != ptr_return) - *ptr_return = first_nonws_ptr; - return xFalse; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidDocFmtListNew - * - * Description: - * - * - * Return value: - * - * - */ -XpOidDocFmtList* -XpOidDocFmtListNew(const char* value_string, - const XpOidDocFmtList* valid_fmts) -{ - if((char*)NULL != value_string) - { - const char* ptr; - return XpOidDocFmtListParse(value_string, valid_fmts, &ptr, 0); - } - return (XpOidDocFmtList*)NULL; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidDocFmtListDelete - * - * Description: - * - * - * Return value: - * - * - */ -void -XpOidDocFmtListDelete(XpOidDocFmtList* list) -{ - if((XpOidDocFmtList*)NULL != list) - { - int i; - for(i = 0; i < list->count; i++) - { - XpOidFree(list->list[i].format); - XpOidFree(list->list[i].variant); - XpOidFree(list->list[i].version); - } - XpOidFree(list->list); - XpOidFree(list); - } -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidDocFmtListString - * - * Description: - * - * Assumes the passed structure is valid. - * - * Return value: - * - * - */ -char* -XpOidDocFmtListString(const XpOidDocFmtList* list) -{ - if((XpOidDocFmtList*)NULL != list) - { - if(0 < list->count) - { - int i; - int str_len; - char* str; - char* ptr; - /* - * allocate the return string - */ - for(i = 0, str_len = 0; i < list->count; i++) - { - str_len += - 1 + SafeStrLen(list->list[i].format) + - 1 + SafeStrLen(list->list[i].variant) + - 1 + SafeStrLen(list->list[i].version) + 2; - } - str = XpOidMalloc(str_len+1); - /* - * print the list into the string and return it - */ - ptr = str; - for(i = 0; i < list->count; i++) - { - XpOidDocFmt* df = &list->list[i]; - -#if defined(sun) && !defined(SVR4) - sprintf(ptr, "{%s %s %s} ", - df->format, - (char*)NULL != df->variant ? df->variant : "", - (char*)NULL != df->version ? df->version : ""); - ptr += strlen(ptr); -#else - ptr += - sprintf(ptr, "{%s %s %s} ", - df->format, - (char*)NULL != df->variant ? df->variant : "", - (char*)NULL != df->version ? df->version : ""); -#endif - } - return str; - } - } - return (char*)NULL; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidDocFmtListParse - * - * Description: - * - * Assumes the passed value_string and ptr_return are non-NULL. - * - * Return value: - * - * - */ -static XpOidDocFmtList* -XpOidDocFmtListParse(const char* value_string, - const XpOidDocFmtList* valid_fmts, - const char** ptr_return, - int i) -{ - XpOidDocFmt doc_fmt; - XpOidDocFmtList* list; - BOOL status; - /* - * get the next document-format from the value string, skipping - * values not found in the passed list of valid formats - */ - *ptr_return = value_string; - while((status = XpOidDocFmtNext(&doc_fmt, *ptr_return, ptr_return)) - && - (const XpOidDocFmtList*)NULL != valid_fmts - && - !XpOidDocFmtListHasFmt(valid_fmts, &doc_fmt) - ); - - if(xFalse == status) - { - if('\0' == **ptr_return) - { - if(0 == i) - { - /* - * empty value string - */ - return (XpOidDocFmtList*)NULL; - } - else - { - /* - * done parsing; allocate the list and return - */ - list = - (XpOidDocFmtList*)XpOidCalloc(1, sizeof(XpOidDocFmtList)); - list->count = i; - list->list = (XpOidDocFmt*)XpOidCalloc(i, sizeof(XpOidDocFmt)); - return list; - } - } - else - { - /* - * invalid document format - */ - ErrorF("%s\n", XPMSG_WARN_DOCFMT_LIST); - return (XpOidDocFmtList*)NULL; - } - } - else - { - /* - * recurse to parse remaining document formats - */ - list = XpOidDocFmtListParse(*ptr_return, valid_fmts, ptr_return, i+1); - if((XpOidDocFmtList*)NULL != list) - { - /* - * add this doc fmt to the list - */ - list->list[i].format = doc_fmt.format; - list->list[i].variant = doc_fmt.variant; - list->list[i].version = doc_fmt.version; - } - return list; - } -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidDocFmtListHasFmt - * - * Description: - * - * Assumes the passed structure is valid. - * - * Return value: - * - * - */ -BOOL -XpOidDocFmtListHasFmt(const XpOidDocFmtList* list, - const XpOidDocFmt* fmt) -{ - int i; - if(list != (XpOidDocFmtList*)NULL - && - fmt != (XpOidDocFmt*)NULL - && - fmt->format != (char*)NULL - ) - { - for(i = 0; i < list->count; i++) - { - /* - * formats must match - */ - if(strcmp(fmt->format, list->list[i].format) != 0) - continue; - /* - * variants must both be NULL or match - */ - if(fmt->variant == (char*)NULL) - { - if(list->list[i].variant == (char*)NULL) - return xTrue; - else - continue; - } - if(list->list[i].variant == (char*)NULL) - continue; - if(strcmp(fmt->variant, list->list[i].variant) != 0) - continue; - /* - * versions must both be NULL or match - */ - if(fmt->version == (char*)NULL) - { - if(list->list[i].version == (char*)NULL) - return xTrue; - else - continue; - } - if(list->list[i].version == (char*)NULL) - continue; - if(strcmp(fmt->version, list->list[i].version) == 0) - return xTrue; - } - } - return xFalse; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidCardListNew - * - * Description: - * - * - * Return value: - * - * - */ -XpOidCardList* -XpOidCardListNew(const char* value_string, const XpOidCardList* valid_cards) -{ - if((const char*)NULL != value_string) - { - const char* ptr; - - return XpOidCardListParse(value_string, valid_cards, &ptr, 0); - } - else - return (XpOidCardList*)NULL; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidCardListDelete - * - * Description: - * - * - * Return value: - * - * - */ -void -XpOidCardListDelete(XpOidCardList* list) -{ - if((XpOidCardList*)NULL != list) - { - XpOidFree(list->list); - XpOidFree(list); - } -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidCardListString - * - * Description: - * - * - * Return value: - * - * - */ -char* -XpOidCardListString(const XpOidCardList* list) -{ - if((XpOidCardList*)NULL != list) - { - char buf[48]; - int str_len; - char* str; - int i; - char* ptr; - /* - * allocate the output string - */ - for(i = 0, str_len = 0; i < list->count; i++) -#if defined(sun) && !defined(SVR4) - { - sprintf(buf, "%lu", list->list[i]) + 1; - str_len += strlen(buf); - } -#else - str_len += sprintf(buf, "%lu", list->list[i]) + 1; -#endif - str = XpOidMalloc(str_len+1); - /* - * write the list to the string - */ - for(i = 0, ptr = str; i < list->count; i++) -#if defined(sun) && !defined(SVR4) - { - sprintf(ptr, "%lu ", list->list[i]); - ptr += strlen(ptr); - } -#else - ptr += sprintf(ptr, "%lu ", list->list[i]); -#endif - return str; - } - else - return (char*)NULL; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidCardListHasCard - * - * Description: - * - * Determines if 'card' is an element of 'list'. - * - * Return value: - * - * xTrue if the card is found in the list. - * - * xFalse if the card is not in the list, or if 'list' is NULL. - * - */ -BOOL -XpOidCardListHasCard(const XpOidCardList* list, unsigned long card) -{ - int i; - if(list != (XpOidCardList*)NULL) - for(i = 0; i < list->count; i++) - if(list->list[i] == card) - return xTrue; - return xFalse; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidCardListParse - * - * Description: - * - * Assumes the passed value_string and ptr_return are non-NULL. - * - * Return value: - * - * - */ -static XpOidCardList* -XpOidCardListParse(const char* value_string, - const XpOidCardList* valid_cards, - const char** ptr_return, - int i) -{ - unsigned long card; - XpOidCardList* list; - BOOL status; - - /* - * get the next card from the value string, skipping values not - * found in the passed list of valid cards - */ - *ptr_return = value_string; - while((status = XpOidParseUnsignedValue(*ptr_return, ptr_return, &card)) - && - (const XpOidCardList*)NULL != valid_cards - && - !XpOidCardListHasCard(valid_cards, card) - ); - - if(xFalse == status) - { - if('\0' == **ptr_return) - { - if(0 == i) - { - /* - * empty value string - */ - return (XpOidCardList*)NULL; - } - else - { - /* - * done parsing; allocate the list and return - */ - list = (XpOidCardList*)XpOidCalloc(1, sizeof(XpOidCardList)); - list->count = i; - list->list = - (unsigned long*)XpOidCalloc(i, sizeof(unsigned long)); - return list; - } - } - else - { - /* - * parsing error - */ - ErrorF("%s\n", XPMSG_WARN_CARD_LIST); - return (XpOidCardList*)NULL; - } - } - else - { - /* - * recurse to parse remaining cardinal values - */ - list = XpOidCardListParse(*ptr_return, valid_cards, ptr_return, i+1); - if((XpOidCardList*)NULL != list) - { - /* - * add this value to the list - */ - list->list[i] = card; - } - return list; - } -} - -/* - * ------------------------------------------------------------------------ - * Name: ParseBoolValue - * - * Description: - * - * - * Return value: - * - * - */ -static BOOL -ParseBoolValue(const char* value_string, - const char** ptr_return, - BOOL* bool_return) -{ - const char* ptr; - int length; - BOOL status; - /* - * skip leading whitespace - */ - ptr = value_string + SpanWhitespace(value_string); - /* - * get the whitespace-delimited token length - */ - length = SpanToken(ptr); - /* - * determine if true or false or bad - */ - if(StrnCaseCmp(ptr, "TRUE", length) == 0) - { - if(bool_return != (BOOL*)NULL) - *bool_return = xTrue; - status = xTrue; - } - else if(StrnCaseCmp(ptr, "FALSE", length) == 0) - { - if(bool_return != (BOOL*)NULL) - *bool_return = xFalse; - status = xTrue; - } - else - { - /* - * syntax error - */ - status = xFalse; - } - /* - * update the return pointer and return - */ - if(ptr_return != (const char**)NULL) - *ptr_return = status ? ptr+length : ptr; - return status; -} - -/* - * ------------------------------------------------------------------------ - * Name: XpOidParseUnsignedValue - * - * Description: - * - * Skips leading whitespace and parses out and returns a unsigned number. - * - * Return value: - * - * xTrue if a unsigned number was successfully parsed. ptr_return is - * updated to point to location where the unsigned number parsing - * ended. - * - * xFalse if a unsigned number was not found; ptr_return is updated - * to point to the first non-whitespace char in value_string. - * - */ -BOOL -XpOidParseUnsignedValue(const char* value_string, - const char** ptr_return, - unsigned long* unsigned_return) -{ - long value; - BOOL status; - const char* first_nonws_ptr; - const char* ptr; - /* - * skip leading whitespace - */ - first_nonws_ptr = value_string + SpanWhitespace(value_string); - value = strtol(first_nonws_ptr, (char**)(&ptr), 0); - if(ptr == first_nonws_ptr || value < 0) - status = xFalse; - else - status = xTrue; - /* - * update return parms - */ - if(ptr_return != (const char**)NULL) - *ptr_return = ptr; - if(unsigned_return != (unsigned long*)NULL) - *unsigned_return = (unsigned long)value; - /* - * return - */ - return status; -} - -/* - * ------------------------------------------------------------------------ - * Name: ParseRealValue - * - * Description: - * - * Skips leading whitespace and parses out and returns a real number. - * - * Return value: - * - * xTrue if a real number was successfully parsed. ptr_return is - * updated to point to location where the real number parsing - * ended. - * - * xFalse if a real number was not found; ptr_return is updated - * to point to the first non-whitespace char in value_string. - * - */ -static BOOL -ParseRealValue(const char* value_string, - const char** ptr_return, - float* real_return) -{ - float real_value; - BOOL status; - const char* first_nonws_ptr; - const char* ptr; - /* - * skip leading whitespace - */ - first_nonws_ptr = value_string + SpanWhitespace(value_string); - real_value = (float)strtod(first_nonws_ptr, (char**)(&ptr)); - if(ptr == first_nonws_ptr) - status = xFalse; - else - status = xTrue; - /* - * update return parms - */ - if(ptr_return != (const char**)NULL) - *ptr_return = ptr; - if(real_return != (float*)NULL) - *real_return = real_value; - /* - * return - */ - return status; -} - -/* - * ------------------------------------------------------------------------ - * Name: ParseSeqEnd - * - * Description: - * - * Description: - * - * Skips leading whitespace and parses out the sequence end - * character '}'. - * - * Return value: - * - * xTrue if the sequence end character was parsed; ptr_return is - * updated to point to the first char following the sequence end - * character. - * - * xFalse if the sequence end character was not found; ptr_return is - * updated to point to the first non-whitespace char in value_string. - * - */ -static BOOL -ParseSeqEnd(const char* value_string, - const char** ptr_return) -{ - const char* ptr; - BOOL status; - /* - * skip leading whitespace - */ - ptr = value_string + SpanWhitespace(value_string); - /* - * parse out the sequence end character - */ - if(*ptr == '}') - { - status = xTrue; - ++ptr; - } - else - status = xFalse; - /* - * update the return pointer - */ - if(ptr_return != (const char**)NULL) - *ptr_return = ptr; - /* - * return - */ - return status; -} - -/* - * ------------------------------------------------------------------------ - * Name: ParseSeqStart - * - * Description: - * - * Skips leading whitespace and parses out the sequence start - * character '{'. - * - * Return value: - * - * xTrue if the sequence start character was parsed; ptr_return is - * updated to point to the first char following the sequence start - * character. - * - * xFalse if the sequence start character was not found; ptr_return is - * updated to point to the first non-whitespace char in value_string. - * - */ -static BOOL -ParseSeqStart(const char* value_string, - const char** ptr_return) -{ - const char* ptr; - BOOL status; - /* - * skip leading whitespace - */ - ptr = value_string + SpanWhitespace(value_string); - /* - * parse out the sequence start character - */ - if(*ptr == '{') - { - status = xTrue; - ++ptr; - } - else - status = xFalse; - /* - * update the return pointer - */ - if(ptr_return != (const char**)NULL) - *ptr_return = ptr; - /* - * return - */ - return status; -} - -/* - * ------------------------------------------------------------------------ - * Name: ParseUnspecifiedValue - * - * Description: - * - * Skips leading whitespace and parses out an unspecified optional - * value (i.e. matching '' or "" - skips all data between the set of - * quotes). - * - * Return value: - * - * xTrue if an unspecified value was parsed; ptr_return is updated to - * point to the first char following the trailing quote. - * - * xFalse if an unspecified value was not found; ptr_return is updated - * to point to the first non-whitespace char in value_string. - * - */ -static BOOL -ParseUnspecifiedValue(const char* value_string, - const char** ptr_return) -{ - BOOL status; - const char* ptr; - /* - * skip leading whitespace - */ - ptr = value_string + SpanWhitespace(value_string); - /* - * parse out an unspecified optional value ('' or "") - */ - if(*ptr == '\'' || *ptr == '"') - { - char delim[2]; - - if(ptr_return != (const char**)NULL) - { - delim[0] = *ptr; - delim[1] = '\0'; - /* - * skip over the matching delimiter - */ - ++ptr; - ptr += strcspn(ptr, delim); - if(*ptr != '\0') - ++ptr; - } - status = xTrue; - } - else - status = xFalse; - /* - * update the return pointer - */ - if(ptr_return != (const char**)NULL) - *ptr_return = ptr; - /* - * return - */ - return status; -} - -/* - * ------------------------------------------------------------------------ - * Name: SpanToken - * - * Description: - * - * Returns the length of the initial segment of the passed string - * that consists entirely of non-whitespace and non-sequence - * delimiter characters. - * - * - */ -static int -SpanToken(const char* string) -{ - const char* ptr; - for(ptr = string; - *ptr != '\0' && !isspace(*ptr) && *ptr != '{' && *ptr != '}'; - ++ptr); - return ptr - string; -} - -/* - * ------------------------------------------------------------------------ - * Name: SpanWhitespace - * - * Description: - * - * Returns the length of the initial segment of the passed string - * that consists entirely of whitespace characters. - * - * - */ -static int -SpanWhitespace(const char* string) -{ - const char* ptr; - for(ptr = string; *ptr != '\0' && isspace(*ptr); ++ptr); - return ptr - string; -} - -#ifndef HAVE_STRCASECMP -/* - * ------------------------------------------------------------------------ - * Name: StrnCaseCmp - * - * Description: - * - * Implements strncasecmp() for those platforms that need it. - * - * - */ -static int -StrnCaseCmp(const char *s1, const char *s2, size_t len) -{ - char c1, c2; - int result; - - while (len--) - { - c1 = *s1++; - c2 = *s2++; - result = tolower(c1) - tolower(c2); - - if (result != 0) - return result; - } - - return 0; -} -#endif diff --git a/hw/xprint/Oid.h b/hw/xprint/Oid.h deleted file mode 100644 index 79e85ec64..000000000 --- a/hw/xprint/Oid.h +++ /dev/null @@ -1,293 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#ifndef _Xp_Oid_h -#define _Xp_Oid_h - -#include - -/* - * include the auto-generated XpOid enum definition - */ -#include "OidDefs.h" - -/* - * messages - */ -#define XPMSG_WARN_MSS "Syntax error parsing medium-source-sizes" -#define XPMSG_WARN_ITM "Syntax error parsing input-trays-medium" -#define XPMSG_WARN_DOC_FMT "Syntax error parsing document format" -#define XPMSG_WARN_DOCFMT_LIST "Syntax error parsing document format list" -#define XPMSG_WARN_CARD_LIST "Syntax error parsing cardinal list" - -/* - * macros for memory allocation - */ -#define XpOidMalloc(size) ((char*)Xalloc((unsigned long)(size))) -#define XpOidCalloc(count, size) \ - ((char*)Xcalloc((unsigned long)((count)*(size)))) -#define XpOidFree(mem) (Xfree((unsigned long*)(mem))) - -/* - * list of object identifiers - */ -typedef struct _XpOidList -{ - XpOid* list; - int count; -} XpOidList; - -/* - * linked list of object identifiers - */ -typedef struct XpOidNodeStruct -{ - XpOid oid; - struct XpOidNodeStruct* next; -} *XpOidNode; - -typedef struct _XpOidLinkedList -{ - XpOidNode head; - XpOidNode tail; - XpOidNode current; - int count; -} XpOidLinkedList; - -/* - * XpOidMediumSourceSize and related definitions - */ -typedef struct -{ - float minimum_x; - float maximum_x; - float minimum_y; - float maximum_y; -} XpOidArea; - -typedef struct -{ - float lower_bound; - float upper_bound; -} XpOidRealRange; - -typedef struct -{ - XpOidRealRange range_across_feed; - float increment_across_feed; - XpOidRealRange range_in_feed; - float increment_in_feed; - BOOL long_edge_feeds; - XpOidArea assured_reproduction_area; -} XpOidMediumContinuousSize; - -typedef struct -{ - XpOid page_size; - BOOL long_edge_feeds; - XpOidArea assured_reproduction_area; -} XpOidMediumDiscreteSize; - -typedef struct -{ - XpOidMediumDiscreteSize* list; - int count; -} XpOidMediumDiscreteSizeList; - -typedef struct -{ - XpOid input_tray; /* may be set to xpoid_none or xpoid_unspecified */ - enum { XpOidMediumSS_DISCRETE, XpOidMediumSS_CONTINUOUS } mstag; - union - { - XpOidMediumDiscreteSizeList* discrete; - XpOidMediumContinuousSize* continuous_size; - } ms; /* "ms" is short for medium-size */ - -} XpOidMediumSourceSize; - -typedef struct -{ - XpOidMediumSourceSize* mss; - int count; -} XpOidMediumSS; - - -typedef struct -{ - XpOid input_tray; /* may be set to xpoid_none */ - XpOid medium; -} XpOidTrayMedium; - -typedef struct -{ - XpOidTrayMedium* list; - int count; -} XpOidTrayMediumList; - -typedef enum { - XPOID_NOTIFY_UNSUPPORTED, - XPOID_NOTIFY_NONE, - XPOID_NOTIFY_EMAIL -} XpOidNotify; - -typedef struct -{ - unsigned long *list; - int count; -} XpOidCardList; - -typedef struct -{ - char* format; - char* variant; - char* version; -} XpOidDocFmt; - -typedef struct -{ - XpOidDocFmt* list; - int count; -} XpOidDocFmtList; - - -/* - * XpOid public methods - */ -const char* XpOidString(XpOid); -int XpOidStringLength(XpOid); -XpOid XpOidFromString(const char* value); -BOOL XpOidTrayMediumListHasTray(const XpOidTrayMediumList* list, XpOid tray); - -/* - * XpOidList public methods - */ -XpOidList* XpOidListNew(const char* value_string, - const XpOidList* valid_oids); -#define XpOidListInit(l, a, c) { (l)->list = (a); (l)->count = (c); } -void XpOidListDelete(XpOidList*); -#define XpOidListCount(l) ((l) ? (l)->count : 0) -#define XpOidListGetOid(l, i) ((l) ? (l)->list[(i)] : xpoid_none) -int XpOidListGetIndex(const XpOidList* list, XpOid oid); -BOOL XpOidListHasOid(const XpOidList* list, XpOid oid); -char* XpOidListString(const XpOidList*); - - -/* - * XpOidLinkedList public methods - */ -XpOidLinkedList* XpOidLinkedListNew(void); -void XpOidLinkedListDelete(XpOidLinkedList*); -#define XpOidLinkedListCount(l) ((l) ? (l)->count : 0) -XpOid XpOidLinkedListGetOid(XpOidLinkedList* list, int i); -void XpOidLinkedListAddOid(XpOidLinkedList* list, XpOid oid); -int XpOidLinkedListGetIndex(XpOidLinkedList* list, XpOid oid); -BOOL XpOidLinkedListHasOid(XpOidLinkedList* list, - XpOid oid); -XpOid XpOidLinkedListFirstOid(XpOidLinkedList* list); -XpOid XpOidLinkedListNextOid(XpOidLinkedList* list); - -/* - * XpOidMediumSourceSize public methods - */ -XpOidMediumSS* XpOidMediumSSNew(const char* value_string, - const XpOidList* valid_trays, - const XpOidList* valid_medium_sizes); -void XpOidMediumSSDelete(XpOidMediumSS*); -#define XpOidMediumSSCount(me) ((me) ? (me)->count : 0) -BOOL XpOidMediumSSHasSize(XpOidMediumSS*, XpOid medium_size); -char* XpOidMediumSSString(const XpOidMediumSS*); - -/* - * XpOidTrayMediumList public methods - */ -XpOidTrayMediumList* XpOidTrayMediumListNew(const char* value_string, - const XpOidList* valid_trays, - const XpOidMediumSS* msss); -void XpOidTrayMediumListDelete(XpOidTrayMediumList* me); -#define XpOidTrayMediumListCount(me) ((me) ? (me)->count : 0) -#define XpOidTrayMediumListTray(me, i) \ - ((me) ? (me)->list[(i)].input_tray : xpoid_none) -#define XpOidTrayMediumListMedium(me, i) \ - ((me) ? (me)->list[(i)].medium : xpoid_none) -char* XpOidTrayMediumListString(const XpOidTrayMediumList*); - -/* - * XpOidNotify public methods - */ -XpOidNotify XpOidNotifyParse(const char* value_string); -const char* XpOidNotifyString(XpOidNotify notify); - -/* - * XpOidDocFmt public methods - */ -XpOidDocFmt* XpOidDocFmtNew(const char* value_string); -void XpOidDocFmtDelete(XpOidDocFmt*); -char* XpOidDocFmtString(XpOidDocFmt*); - -/* - * XpOidDocFmtList public methods - */ -XpOidDocFmtList* XpOidDocFmtListNew(const char* value_string, - const XpOidDocFmtList* valid_fmts); -void XpOidDocFmtListDelete(XpOidDocFmtList*); -char* XpOidDocFmtListString(const XpOidDocFmtList*); -#define XpOidDocFmtListCount(me) ((me) ? (me)->count : 0) -#define XpOidDocFmtListGetDocFmt(me, i) \ - ((me) ? &(me)->list[(i)] : (XpDocFmt*)NULL) -BOOL XpOidDocFmtListHasFmt(const XpOidDocFmtList* list, - const XpOidDocFmt* fmt); -/* - * XpOidCardList public methods - */ -XpOidCardList* XpOidCardListNew(const char* value_string, - const XpOidCardList* valid_cards); -#define XpOidCardListInit(l, a, c) { (l)->list = (a); (l)->count = (c); } -void XpOidCardListDelete(XpOidCardList*); -char* XpOidCardListString(const XpOidCardList*); -#define XpOidCardListCount(me) ((me) ? (me)->count : 0) -#define XpOidCardListGetCard(me, i) ((me) ? (me)->list[(i)] : 0) -BOOL XpOidCardListHasCard(const XpOidCardList*, unsigned long); - -/* - * misc parsing functions - */ -BOOL XpOidParseUnsignedValue(const char* value_string, - const char** ptr_return, - unsigned long* unsigned_return); - - -#endif /* _Xp_Oid_h - don't add anything after this line */ diff --git a/hw/xprint/OidDefs.h b/hw/xprint/OidDefs.h deleted file mode 100644 index a3b37eaaf..000000000 --- a/hw/xprint/OidDefs.h +++ /dev/null @@ -1,170 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ -/* This is an automatically-generated file. Do not edit. */ - -typedef enum { - xpoid_none, - xpoid_unspecified, - xpoid_att_descriptor, - xpoid_att_content_orientation, - xpoid_att_copy_count, - xpoid_att_default_printer_resolution, - xpoid_att_default_input_tray, - xpoid_att_default_medium, - xpoid_att_document_format, - xpoid_att_plex, - xpoid_att_xp_listfonts_modes, - xpoid_att_job_name, - xpoid_att_job_owner, - xpoid_att_notification_profile, - xpoid_att_xp_setup_state, - xpoid_att_xp_spooler_command_options, - xpoid_att_content_orientations_supported, - xpoid_att_document_formats_supported, - xpoid_att_dt_pdm_command, - xpoid_att_input_trays_medium, - xpoid_att_medium_source_sizes_supported, - xpoid_att_plexes_supported, - xpoid_att_printer_model, - xpoid_att_printer_name, - xpoid_att_printer_resolutions_supported, - xpoid_att_xp_embedded_formats_supported, - xpoid_att_xp_listfonts_modes_supported, - xpoid_att_xp_page_attributes_supported, - xpoid_att_xp_raw_formats_supported, - xpoid_att_xp_setup_proviso, - xpoid_att_document_attributes_supported, - xpoid_att_job_attributes_supported, - xpoid_att_locale, - xpoid_att_multiple_documents_supported, - xpoid_att_available_compression, - xpoid_att_available_compressions_supported, - xpoid_val_content_orientation_portrait, - xpoid_val_content_orientation_landscape, - xpoid_val_content_orientation_reverse_portrait, - xpoid_val_content_orientation_reverse_landscape, - xpoid_val_medium_size_iso_a0, - xpoid_val_medium_size_iso_a1, - xpoid_val_medium_size_iso_a2, - xpoid_val_medium_size_iso_a3, - xpoid_val_medium_size_iso_a4, - xpoid_val_medium_size_iso_a5, - xpoid_val_medium_size_iso_a6, - xpoid_val_medium_size_iso_a7, - xpoid_val_medium_size_iso_a8, - xpoid_val_medium_size_iso_a9, - xpoid_val_medium_size_iso_a10, - xpoid_val_medium_size_iso_b0, - xpoid_val_medium_size_iso_b1, - xpoid_val_medium_size_iso_b2, - xpoid_val_medium_size_iso_b3, - xpoid_val_medium_size_iso_b4, - xpoid_val_medium_size_iso_b5, - xpoid_val_medium_size_iso_b6, - xpoid_val_medium_size_iso_b7, - xpoid_val_medium_size_iso_b8, - xpoid_val_medium_size_iso_b9, - xpoid_val_medium_size_iso_b10, - xpoid_val_medium_size_na_letter, - xpoid_val_medium_size_na_legal, - xpoid_val_medium_size_executive, - xpoid_val_medium_size_folio, - xpoid_val_medium_size_invoice, - xpoid_val_medium_size_ledger, - xpoid_val_medium_size_quarto, - xpoid_val_medium_size_iso_c3, - xpoid_val_medium_size_iso_c4, - xpoid_val_medium_size_iso_c5, - xpoid_val_medium_size_iso_c6, - xpoid_val_medium_size_iso_designated_long, - xpoid_val_medium_size_na_10x13_envelope, - xpoid_val_medium_size_na_9x12_envelope, - xpoid_val_medium_size_na_number_10_envelope, - xpoid_val_medium_size_na_7x9_envelope, - xpoid_val_medium_size_na_9x11_envelope, - xpoid_val_medium_size_na_10x14_envelope, - xpoid_val_medium_size_na_number_9_envelope, - xpoid_val_medium_size_na_6x9_envelope, - xpoid_val_medium_size_na_10x15_envelope, - xpoid_val_medium_size_monarch_envelope, - xpoid_val_medium_size_a, - xpoid_val_medium_size_b, - xpoid_val_medium_size_c, - xpoid_val_medium_size_d, - xpoid_val_medium_size_e, - xpoid_val_medium_size_jis_b0, - xpoid_val_medium_size_jis_b1, - xpoid_val_medium_size_jis_b2, - xpoid_val_medium_size_jis_b3, - xpoid_val_medium_size_jis_b4, - xpoid_val_medium_size_jis_b5, - xpoid_val_medium_size_jis_b6, - xpoid_val_medium_size_jis_b7, - xpoid_val_medium_size_jis_b8, - xpoid_val_medium_size_jis_b9, - xpoid_val_medium_size_jis_b10, - xpoid_val_medium_size_hp_2x_postcard, - xpoid_val_medium_size_hp_european_edp, - xpoid_val_medium_size_hp_mini, - xpoid_val_medium_size_hp_postcard, - xpoid_val_medium_size_hp_tabloid, - xpoid_val_medium_size_hp_us_edp, - xpoid_val_medium_size_hp_us_government_legal, - xpoid_val_medium_size_hp_us_government_letter, - xpoid_val_plex_simplex, - xpoid_val_plex_duplex, - xpoid_val_plex_tumble, - xpoid_val_input_tray_top, - xpoid_val_input_tray_middle, - xpoid_val_input_tray_bottom, - xpoid_val_input_tray_envelope, - xpoid_val_input_tray_manual, - xpoid_val_input_tray_large_capacity, - xpoid_val_input_tray_main, - xpoid_val_input_tray_side, - xpoid_val_event_report_job_completed, - xpoid_val_delivery_method_electronic_mail, - xpoid_val_xp_setup_mandatory, - xpoid_val_xp_setup_optional, - xpoid_val_xp_setup_ok, - xpoid_val_xp_setup_incomplete, - xpoid_val_xp_list_glyph_fonts, - xpoid_val_xp_list_internal_printer_fonts, - xpoid_val_available_compressions_0, - xpoid_val_available_compressions_01, - xpoid_val_available_compressions_02, - xpoid_val_available_compressions_03, - xpoid_val_available_compressions_012, - xpoid_val_available_compressions_013, - xpoid_val_available_compressions_023, - xpoid_val_available_compressions_0123 -} XpOid; diff --git a/hw/xprint/OidStrs.h b/hw/xprint/OidStrs.h deleted file mode 100644 index 5ed2089e0..000000000 --- a/hw/xprint/OidStrs.h +++ /dev/null @@ -1,172 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ -/* This is an automatically-generated file. Do not edit. */ - -static int XpOidStringMapCount = 127; - -static const XpOidStringMapEntry XpOidStringMap[] = { - { "", 0 }, - { "", 0 }, - { "descriptor", 10 }, - { "content-orientation", 19 }, - { "copy-count", 10 }, - { "default-printer-resolution", 26 }, - { "default-input-tray", 18 }, - { "default-medium", 14 }, - { "document-format", 15 }, - { "plex", 4 }, - { "xp-listfonts-modes", 18 }, - { "job-name", 8 }, - { "job-owner", 9 }, - { "notification-profile", 20 }, - { "xp-setup-state", 14 }, - { "xp-spooler-command-options", 26 }, - { "content-orientations-supported", 30 }, - { "document-formats-supported", 26 }, - { "dt-pdm-command", 14 }, - { "input-trays-medium", 18 }, - { "medium-source-sizes-supported", 29 }, - { "plexes-supported", 16 }, - { "printer-model", 13 }, - { "printer-name", 12 }, - { "printer-resolutions-supported", 29 }, - { "xp-embedded-formats-supported", 29 }, - { "xp-listfonts-modes-supported", 28 }, - { "xp-page-attributes-supported", 28 }, - { "xp-raw-formats-supported", 24 }, - { "xp-setup-proviso", 16 }, - { "document-attributes-supported", 29 }, - { "job-attributes-supported", 24 }, - { "locale", 6 }, - { "multiple-documents-supported", 28 }, - { "available-compression", 21 }, - { "available-compressions-supported", 32 }, - { "portrait", 8 }, - { "landscape", 9 }, - { "reverse-portrait", 16 }, - { "reverse-landscape", 17 }, - { "iso-a0", 6 }, - { "iso-a1", 6 }, - { "iso-a2", 6 }, - { "iso-a3", 6 }, - { "iso-a4", 6 }, - { "iso-a5", 6 }, - { "iso-a6", 6 }, - { "iso-a7", 6 }, - { "iso-a8", 6 }, - { "iso-a9", 6 }, - { "iso-a10", 7 }, - { "iso-b0", 6 }, - { "iso-b1", 6 }, - { "iso-b2", 6 }, - { "iso-b3", 6 }, - { "iso-b4", 6 }, - { "iso-b5", 6 }, - { "iso-b6", 6 }, - { "iso-b7", 6 }, - { "iso-b8", 6 }, - { "iso-b9", 6 }, - { "iso-b10", 7 }, - { "na-letter", 9 }, - { "na-legal", 8 }, - { "executive", 9 }, - { "folio", 5 }, - { "invoice", 7 }, - { "ledger", 6 }, - { "quarto", 6 }, - { "iso-c3", 6 }, - { "iso-c4", 6 }, - { "iso-c5", 6 }, - { "iso-c6", 6 }, - { "iso-designated-long", 19 }, - { "na-10x13-envelope", 17 }, - { "na-9x12-envelope", 16 }, - { "na-number-10-envelope", 21 }, - { "na-7x9-envelope", 15 }, - { "na-9x11-envelope", 16 }, - { "na-10x14-envelope", 17 }, - { "na-number-9-envelope", 20 }, - { "na-6x9-envelope", 15 }, - { "na-10x15-envelope", 17 }, - { "monarch-envelope", 16 }, - { "a", 1 }, - { "b", 1 }, - { "c", 1 }, - { "d", 1 }, - { "e", 1 }, - { "jis-b0", 6 }, - { "jis-b1", 6 }, - { "jis-b2", 6 }, - { "jis-b3", 6 }, - { "jis-b4", 6 }, - { "jis-b5", 6 }, - { "jis-b6", 6 }, - { "jis-b7", 6 }, - { "jis-b8", 6 }, - { "jis-b9", 6 }, - { "jis-b10", 7 }, - { "hp-2x-postcard", 14 }, - { "hp-european-edp", 15 }, - { "hp-mini", 7 }, - { "hp-postcard", 11 }, - { "hp-tabloid", 10 }, - { "hp-us-edp", 9 }, - { "hp-us-government-legal", 22 }, - { "hp-us-government-letter", 23 }, - { "simplex", 7 }, - { "duplex", 6 }, - { "tumble", 6 }, - { "top", 3 }, - { "middle", 6 }, - { "bottom", 6 }, - { "envelope", 8 }, - { "manual", 6 }, - { "large-capacity", 14 }, - { "main", 4 }, - { "side", 4 }, - { "event-report-job-completed", 26 }, - { "electronic-mail", 15 }, - { "xp-setup-mandatory", 18 }, - { "xp-setup-optional", 17 }, - { "xp-setup-ok", 11 }, - { "xp-setup-incomplete", 19 }, - { "xp-list-glyph-fonts", 19 }, - { "xp-list-internal-printer-fonts", 30 }, - { "0", 1 }, - { "01", 2 }, - { "02", 2 }, - { "03", 2 }, - { "012", 3 }, - { "013", 3 }, - { "023", 3 }, - { "0123", 4 } -}; diff --git a/hw/xprint/Util.c b/hw/xprint/Util.c deleted file mode 100644 index eb7f839c9..000000000 --- a/hw/xprint/Util.c +++ /dev/null @@ -1,370 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -/* To get the tempnam() prototype in */ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#if defined(linux) && defined(__STRICT_ANSI__) -#undef __STRICT_ANSI__ -#endif - -#include /* for unistd.h and string.h */ -#include -#include -#include -#include "misc.h" -#include "dixstruct.h" - -#include - -#include "attributes.h" - -#define IN_FILE_STRING "%(InFile)%" -#define OUT_FILE_STRING "%(OutFile)%" - -/* - * ReplaceAnyString returns a string combining the input strings. - * It replaces all occurances of 'target' with the supplied - * 'replacement'. - * The original input string will generally be freed, - * and the caller is responsible for freeing whatever string is returned. - */ -char * -ReplaceAnyString( - char *string, - char *target, - char *replacement) -{ - char *pKeyString; - - if(replacement != (char *)NULL) - { - while((pKeyString = strstr(string, target)) != (char *)NULL) - { - char *newString; - - newString = (char *)xalloc(strlen(string) + strlen(replacement) - - strlen(target) + 1); - strncpy(newString, string, pKeyString - string); - newString[pKeyString - string] = '\0'; - strcat(newString, replacement); - strcat(newString, pKeyString + strlen(target)); - xfree(string); - string = newString; - } - } - - return string; -} - -/* - * ReplaceFileString returns a string combining the input strings. - * It replaces all occurances of IN_FILE_STRING with the supplied - * inFileName, and all occurances of OUT_FILE_STRING with the - * supplied outFileName. The original input string will generally be freed, - * and the caller is responsible for freeing whatever string is returned. - */ -char * -ReplaceFileString( - char *string, - char *inFileName, - char *outFileName) -{ - char *pKeyString, - *pInFileString = IN_FILE_STRING, - *pOutFileString = OUT_FILE_STRING; - - if(inFileName != (char *)NULL) - { - while((pKeyString = strstr(string, pInFileString)) != - (char *)NULL) - { - char *newString; - - newString = (char *)xalloc(strlen(string) + - strlen(inFileName) + 1); - strncpy(newString, string, pKeyString - string); - newString[pKeyString - string] = '\0'; - strcat(newString, inFileName); - strcat(newString, pKeyString + strlen(pInFileString)); - xfree(string); - string = newString; - } - } - - if(outFileName != (char *)NULL) - { - while((pKeyString = strstr(string, pOutFileString)) != - (char *)NULL) - { - char *newString; - - newString = (char *)xalloc(strlen(string) + - strlen(outFileName) + 1); - strncpy(newString, string, pKeyString - string); - newString[pKeyString - string] = '\0'; - strcat(newString, outFileName); - strcat(newString, pKeyString + strlen(pOutFileString)); - xfree(string); - string = newString; - } - } - return string; -} - - -/* - * TransferBytes reads numBytes of data from pSrcFile and writes them - * to pDstFile. It returns the number of bytes actually transfered, - * which will be numBytes if it's successful. Neither pSrcFile nor - * pDstFile are rewound or their pointers otherwise modified prior to - * beginning the transfer. - */ -int -TransferBytes( - FILE *pSrcFile, - FILE *pDstFile, - int numBytes) -{ - char buf[10240]; -#define BUF_SIZE (sizeof(buf)*sizeof(char)) - int bytesWritten = 0; - unsigned bytesToXfer; - - for(bytesToXfer = min(BUF_SIZE, (unsigned)numBytes); - bytesToXfer > 0; - bytesToXfer = min(BUF_SIZE, (unsigned)(numBytes - bytesWritten))) - { - if(fread((void *)buf, (size_t) 1, bytesToXfer, pSrcFile) < bytesToXfer) - return bytesWritten; - if(fwrite((void *)buf, (size_t) 1, bytesToXfer, pDstFile) < bytesToXfer) - return bytesWritten; - bytesWritten += bytesToXfer; - } - return bytesWritten; -} - -/* - * CopyContentsAndDelete - does the work of copying and deleting the - * pre, no, and post raster files as well as the raster file itself. - */ -Bool -CopyContentsAndDelete( - FILE **ppSrcFile, - char **pSrcFileName, - FILE *pDstFile) -{ - struct stat statBuf; - - if(stat(*pSrcFileName, &statBuf) < 0) - return FALSE; - rewind(*ppSrcFile); - if(TransferBytes(*ppSrcFile, pDstFile, - (int)statBuf.st_size) != (int)statBuf.st_size) - return FALSE; - fclose(*ppSrcFile); - *ppSrcFile = (FILE *)NULL; - unlink(*pSrcFileName); - xfree(*pSrcFileName); - *pSrcFileName = (char *)NULL; - - return TRUE; -} - - -#define QUADPAD(x) ((((x)+3)>>2)<<2) - -int -XpSendDocumentData( - ClientPtr client, - FILE *fp, - int fileLen, - int maxBufSize) -{ - xPrintGetDocumentDataReply *pRep; - int bytesWritten; - unsigned bytesToWrite; - int result = Success; - - if(client->clientGone) - return Success; - - pRep = (xPrintGetDocumentDataReply *)xalloc(sz_xPrintGetDocumentDataReply+ - QUADPAD(maxBufSize)); - - for(bytesToWrite = min(maxBufSize, fileLen), - bytesWritten = 0; - bytesToWrite > 0; - bytesToWrite = min(maxBufSize, fileLen - bytesWritten)) - { - pRep->type = X_Reply; - pRep->sequenceNumber = client->sequence; - pRep->length = (QUADPAD(bytesToWrite)) >> 2; - pRep->dataLen = bytesToWrite; - - if(fread((void *)(pRep + 1), 1, bytesToWrite, fp) < bytesToWrite) - { - result = BadAlloc; /* XXX poor error choice? */ - pRep->statusCode = 2; /* XXX Is this the right value??? */ - } - else - pRep->statusCode = 0; /* XXX Ignored??? */ - - pRep->finishedFlag = FALSE; - - if (client->swapped) { - int n; - long l; - - swaps(&pRep->sequenceNumber, n); - swapl(&pRep->length, l); - swapl(&pRep->statusCode, l); /* XXX Why are these longs??? */ - swapl(&pRep->finishedFlag, l); /* XXX Why are these longs??? */ - swapl(&pRep->dataLen, l); - } - - (void)WriteToClient(client, - sz_xPrintGetDocumentDataReply + bytesToWrite, - (char *)pRep); - bytesWritten += bytesToWrite; - } - - xfree(pRep); - return result; -} - -/* - * XpFinishDocData - send a DocumentData reply with the "finishedFlag" - * field set to TRUE. This routine should be called from the EndJob - * function of a driver after the driver has sent all required - * document data (presumably via XpSendDocumentData). - */ -int -XpFinishDocData( - ClientPtr client) -{ - xPrintGetDocumentDataReply rep; - - if(client->clientGone) - return Success; - - rep.type = X_Reply; - rep.sequenceNumber = client->sequence; - rep.length = 0; - rep.dataLen = 0; - rep.finishedFlag = TRUE; - rep.statusCode = 0; - - if (client->swapped) { - int n; - long l; - - swaps(&rep.sequenceNumber, n); - swapl(&rep.length, l); - swapl(&rep.statusCode, l); /* XXX Why are these longs??? */ - swapl(&rep.finishedFlag, l); /* XXX Why are these longs??? */ - swapl(&rep.dataLen, l); - } - - (void)WriteToClient(client, sz_xPrintGetDocumentDataReply, (char *)&rep); - return Success; -} - -#ifndef HAVE_MKSTEMP -static -char *XpDirName(char *fname) -{ - char *fn, *ptr; - - fn = (char *)xalloc(strlen(fname) + 1); - if (fn) { - strcpy(fn, fname); - ptr = strrchr(fn, '/'); - if (!ptr) { - ptr = fn; - *ptr++ = '.'; - } else if (ptr == fn) - ptr++; - *ptr = '\0'; - } - return fn; -} -#endif - -Bool -XpOpenTmpFile( - char *mode, - char **fname, - FILE **stream) -{ -#ifndef HAVE_MKSTEMP - char *fn = NULL; - - /* note that there is a small race condition here... */ - if (!(*fname = tempnam(NULL, NULL)) || - !(fn = XpDirName(*fname)) || - access(fn, W_OK) || - !(*stream = fopen(*fname, mode))) - - { - xfree(fn); - xfree(*fname); - *fname = NULL; - *stream = NULL; - return FALSE; - } - xfree(fn); -#else - int fd; - - *stream = NULL; - *fname = (char *)xalloc(14); - if (*fname == NULL) - return FALSE; - strcpy(*fname, "/tmp/xpXXXXXX"); - fd = mkstemp(*fname); - if (fd < 0) { - xfree(*fname); - *fname = NULL; - return FALSE; - } - *stream = fdopen(fd, mode); - if (stream == NULL) { - xfree(*fname); - *fname = NULL; - return FALSE; - } -#endif - return TRUE; -} diff --git a/hw/xprint/ValTree.c b/hw/xprint/ValTree.c deleted file mode 100644 index 5f58de7ec..000000000 --- a/hw/xprint/ValTree.c +++ /dev/null @@ -1,191 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include "scrnintstr.h" -#include "validate.h" -#include "windowstr.h" -#include "mi.h" -#include "regionstr.h" -#include "mivalidate.h" - -/* - * XpValidateTree - a validateTree routine which ignores overlapping - * top-level windows when computing the clip lists for such windows. - * This can be used by any driver which maintains a separate memory - * store for each top-level window (with its respective children). - * If the pParent is not the root window, then miValidateTree - * is used unmodified. - * - * The strategy if pParent is the root is to save off the - * current values of pParent->firstChild and pParent->lastChild, - * replacing both with the single child of interest. We save off - * pChild->prevSib and pChild->nextSib, and replace them with NullWindow. - * We save off pParent->clipList, and replace it with - * pParent->winSize - pChild->winSize. We then call miValidateTree - * to do the needed ComputeClips on the pChild's heirarchy. - * pParent's clipList is then recomputed based on the sizes - * of its children, and the saved pointers are restored. - * The trees associated with the siblings of pChild must be descended - * and cleaned of any marks (i.e. the valdata pointer freed, and set to NULL), - * and pParent' AfterValidate structure's exposed field must be updated. - */ -/*ARGSUSED*/ -int -XpValidateTree (pParent, pChild, kind) - WindowPtr pParent; /* Parent to validate */ - WindowPtr pChild; /* First child of pParent that was - * affected */ - VTKind kind; /* What kind of configuration caused call */ -{ - RegionRec origPrntClip; /* orig clipList for parent */ - RegionRec childClip; /* The new borderClip for the current - * child */ - RegionRec tmpPrntClip; /* parent clipList - child borderClip */ - RegionRec exposed; /* For intermediate calculations */ - register ScreenPtr pScreen; - register WindowPtr pWin; - Bool overlap; - int viewvals; - Bool forward; - - WindowPtr origFirstChild, origLastChild, origPrevSib, origNextSib; - - /* - * If we're validating something other than a top-level window, - * then just invoke miValidateTree. - */ - if(pParent->parent != NullWindow) - return miValidateTree(pParent, pChild, kind); - - /* - * If it's a stack change of top levels then it's a no-op for - * this scheme, so we just clean up any marks on windows and return. - */ - if(kind == VTStack) - { - CleanMarks(pParent); - return 1; - } - - pScreen = pParent->drawable.pScreen; - if (pChild == NullWindow) - pChild = pParent->firstChild; - - /* Save off the existing window heirarchy */ - origFirstChild = pParent->firstChild; - origLastChild = pParent->lastChild; - origPrevSib = pChild->prevSib; - origNextSib = pChild->nextSib; - pParent->firstChild = pChild; - pParent->lastChild = pChild; - pChild->prevSib = NullWindow; - pChild->nextSib = NullWindow; - - /* - * Set pParent's clipList to be its winSize minus the pChild's - * borderSize. - */ - origPrntClip = pParent->clipList; - REGION_NULL(pScreen, &tmpPrntClip); - REGION_SUBRACT(pScreen, &tmpPrntClip, &pParent->winSize, - &pChild->borderSize); - pParent->clipList = tmpPrntClip; - - /* - * Call miValidateTree on the pruned tree. - */ - (void) miValidateTree(pParent, pChild, kind); - - /* Restore the saved heirarchy */ - pChild->prevSib = origPrevSib; - pChild->nextSib = origNextSib; - pParent->firstChild = origFirstChild; - pParent->lastChild = origLastChild; - - /* - * Compute pParent's clipList by taking its winSize and subracting - * the borderSize of each of its children. - */ - for(pWin = pParent->firstChild, - REGION_COPY(pScreen, &pParent->clipList, &pParent->winSize); - pWin != NullWindow; - pWin = pWin->nextSib) - { - REGION_SUBTRACT(pScreen, &pParent->clipList, &pParent->clipList, - &pWin->borderSize); - } - - /* - * Compute pParent's AfterValidate structure by subracting the original - * clipList from the newly computed clipList. - */ - REGION_NULL(pScreen, &pParent->valdata->after.exposed); - REGION_SUBTRACT(pScreen, &pParent->valdata->after.exposed, - &pParent->clipList, &origPrntClip); - - /* - * Remove the marks from all but pParent and pChild's heirarchy. - * i.e. from all of pChild's siblings and their children. - */ - for(pWin = pParent->firstChild; pWin != NullWindow; pWin = pWin->nextSib) - { - WindowPtr pCurChild = pWin; - - if(pCurChild == pChild) - continue; - - while (1) - { - if(pCurChild->valdata) - { - xfree(pCurChild->valdata); - pCurChild->valdata = (ValidatePtr)NULL; - } - - if (pCurChild->firstChild) - { - pCurChild = pCurChild->firstChild; - continue; - } - while (!pCurChild->nextSib && (pCurChild != pWin)) - pCurChild = pCurChild->parent; - if (pCurChild == pWin) - break; - pCurChild = pCurChild->nextSib; - } - } -} diff --git a/hw/xprint/attributes.c b/hw/xprint/attributes.c deleted file mode 100644 index e79360496..000000000 --- a/hw/xprint/attributes.c +++ /dev/null @@ -1,1740 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ -/******************************************************************* -** -** ********************************************************* -** * -** * File: attributes.c -** * -** * Contents: -** * Implementation of the attribute store for Xp. -** * -** * Copyright: Copyright 1995 Hewlett-Packard Company -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if (defined(sun) && defined(SVR4)) || defined(__SCO__) || defined(__UNIXWARE__) -#include -#endif -#include "scrnintstr.h" - -#include - -#include "attributes.h" - -#include -#include - -#include "spooler.h" - -#ifndef MIN -#define MIN(a,b) (((a)<(b))?(a):(b)) -#endif -#ifndef MAX -#define MAX(a,b) (((a)>(b))?(a):(b)) -#endif - - -static XrmDatabase CopyDb(XrmDatabase inDb); - -extern XrmDatabase XpSpoolerGetServerAttributes(void); - -static int attrGeneration = 0; - -typedef struct { - XrmDatabase *pDb; - char *qualifier; - char *modelId; -} DbEnumStruct; - -typedef struct { - char *stringDb; - int nextPos; - int space; -} StringDbStruct; - -typedef struct _printerAttrs { - struct _printerAttrs *next; - char *name; - char *qualifier; - XrmDatabase printerAttrs; - XrmDatabase docAttrs; - XrmDatabase jobAttrs; -} PrAttrs, *PrAttrPtr; - -static PrAttrPtr attrList = (PrAttrPtr)NULL; - -typedef struct _systemAttrs { - XrmDatabase doc; - XrmDatabase job; - XrmDatabase printers; - XrmDatabase server; -} SysAttrs, *SysAttrsPtr; - -SysAttrs systemAttributes; - -/* - * attrCtxtPrivIndex hold the attribute store's context private index. - * This index is allocated at the time the attribute store is initialized. - */ -static DevPrivateKey attrCtxtPrivKey = &attrCtxtPrivKey; - -/* - * The ContextAttrs structure descibes the context private space reserved - * by the attribute store. - */ -typedef struct _contextAttrs { - XrmDatabase printerAttrs; - XrmDatabase docAttrs; - XrmDatabase jobAttrs; - XrmDatabase pageAttrs; -} ContextAttrs, *ContextAttrPtr; - -/* - * XPDIR is relative to (i.e. is a subdir of) XPRINTDIR/$LANG. - */ -static const char XPDIR[] = "/print"; -/* - * The following files/directories define or are within subdirectories of the - * above-defined XPDIR. - */ -static const char XPPRINTERATTRFILE[] = "/attributes/printer"; -static const char XPJOBATTRFILE[] = "/attributes/job"; -static const char XPDOCATTRFILE[] = "/attributes/document"; -static const char XPMODELDIR[] = "/models"; - -static char NULL_STRING[] = "\0"; - -/* - * XpGetConfigDirBase returns a string containing the path name of the base - * where the print server configuration directory is localed. - */ -static -char *XpGetConfigDirBase(void) -{ - char *configDir; - - /* - * If the XPCONFIGDIR environment variable is not set, then use the - * compile-time constant XPRINTDIR. XPRINTDIR is passed in on the - * compile command line, and is defined in $(TOP)/config/cf/Project.tmpl. - */ - if((configDir = getenv("XPCONFIGDIR")) == (char *)NULL) - configDir = XPRINTDIR; - - return configDir; -} - -/* - * XpGetConfigDir returns a string containing the path name of the print - * server configuration directory. If the useLocale parameter is False - * the it returns the path to the "/C" directory. If the useLocale - * parameter is True it returns the path to the directory associated with - * $LANG. It makes no attempt to ensure that the directory actually exists. - */ -char * -XpGetConfigDir(Bool useLocale) -{ - char *dirName, *langName, *langDir, *configDir; - Bool freeLangDir = False; - - if(useLocale == False) langDir = "/C"; - else - { - langName = getenv("LC_ALL"); - if (langName == NULL) { - langName = getenv("LANG"); - } - - if(langName == (char *)NULL) - return (char *)NULL; - else - { - if(strcmp(langName, "C") == 0) - return (char *)NULL; - langDir = (char *)xalloc(strlen(langName) + 2); - sprintf(langDir, "/%s", langName); - freeLangDir = True; - } - } - - configDir = XpGetConfigDirBase(); - - dirName = (char *)xalloc(strlen(configDir) + strlen(XPDIR) + - strlen(langDir) + 1); - sprintf(dirName, "%s%s%s", configDir, langDir, XPDIR); - - if(freeLangDir == True) - xfree(langDir); - - return dirName; -} - -/* - * GetMergedDatabase reads and merges xrmdb files from the top-level printer - * config directory, and from the directory associated with the current - * locale (if other than the top-level). - */ -static XrmDatabase -GetMergedDatabase(const char *attrName) -{ - char *dirName, *fileName; - XrmDatabase db; - - if((dirName = XpGetConfigDir(False)) == (char *)NULL) - return (XrmDatabase)NULL; - if((fileName = (char *)xalloc(strlen(dirName) + strlen(attrName) + 1)) == - (char *)NULL) - return (XrmDatabase)NULL; - sprintf(fileName, "%s%s", dirName, attrName); - db = XrmGetFileDatabase(fileName); - xfree(fileName); - xfree(dirName); - - if((dirName = XpGetConfigDir(True)) == (char *)NULL) - return db; - if((fileName = (char *)xalloc(strlen(dirName) + strlen(attrName) + 1)) == - (char *)NULL) - return db; - sprintf(fileName, "%s%s", dirName, attrName); - (void)XrmCombineFileDatabase(fileName, &db, True); - xfree(fileName); - xfree(dirName); - - return db; -} - -/* - * BuildSystemAttributes reads the on-disk configuration files for printers, - * initial job, and initial document attributes. The resulting xrm - * databases are then dissected as needed for each printer. - * It also allocates a contextPrivate space for the attributes, - * reserving space to store pointers to the attribute stores for - * the context. - */ -static void -BuildSystemAttributes(void) -{ - if(systemAttributes.printers != (XrmDatabase)NULL) - XrmDestroyDatabase(systemAttributes.printers); - systemAttributes.printers = GetMergedDatabase(XPPRINTERATTRFILE); - if(systemAttributes.job != (XrmDatabase)NULL) - XrmDestroyDatabase(systemAttributes.job); - systemAttributes.job = GetMergedDatabase(XPJOBATTRFILE); - if(systemAttributes.doc != (XrmDatabase)NULL) - XrmDestroyDatabase(systemAttributes.doc); - systemAttributes.doc = GetMergedDatabase(XPDOCATTRFILE); - if(systemAttributes.server != (XrmDatabase)NULL) - XrmDestroyDatabase(systemAttributes.server); - systemAttributes.server = XpSpoolerGetServerAttributes(); - return; -} - -/* - * AddDbEntry is called by XrmEnumerateDatabase, and adds the supplied - * database entry to the database pointed to within the "DbEnumStruct" - * passed as the client_data (aka "closure"). - */ -static Bool -AddDbEntry( - XrmDatabase *sourceDB, - XrmBindingList bindings, - XrmQuarkList quarks, - XrmRepresentation *type, - XrmValue *value, - XPointer client_data) -{ - DbEnumStruct *pEnumStruct = (DbEnumStruct *)client_data; - XrmName xrm_name[5]; - XrmClass xrm_class[5]; - XrmBinding xrm_bind[3]; - XrmValue realVal; - XrmRepresentation rep_type; - - xrm_name[0] = XrmStringToQuark (pEnumStruct->qualifier); - xrm_class[0] = XrmStringToQuark (pEnumStruct->modelId); - - for(;*quarks; quarks++) - xrm_name[1] = xrm_class[1] = *quarks; - - xrm_name[2] = (XrmQuark)NULL; - xrm_class[2] = (XrmQuark)NULL; - - if(XrmQGetResource (*sourceDB, xrm_name, xrm_class, &rep_type, &realVal)) - { - xrm_bind[0] = XrmBindLoosely; - - xrm_name[0] = xrm_name[1]; - xrm_name[1] = NULLQUARK; - - XrmQPutStringResource(pEnumStruct->pDb, xrm_bind, xrm_name, - (char *)realVal.addr); - } - - return FALSE; -} - -/* - * BuildPrinterAttrs - builds and returns an XrmDatabase for the printer - * of the specified name/qualifier, if we have enough information. - * If we don't have a model-config - * file, then just enumerate the systemAttributes->printers database, - * otherwise read in the model-config database and merge into it the - * systemAttributes->printers database. This database is then enumerated - * with the printer qualifier (and the model name as class if we have it), and - * the resulting elements are stored into the database for this particular - * printer. - */ -static XrmDatabase -BuildPrinterAttrs( - char *printerName, - char *qualifierName) -{ - XrmDatabase printerDB = (XrmDatabase)NULL; - - if(systemAttributes.printers != (XrmDatabase)NULL) - { - char *fileName; - XrmDatabase modelDB = (XrmDatabase)NULL; - XrmName xrm_name[5], xrm_class[2]; - XrmRepresentation rep_type; - XrmValue value; - DbEnumStruct enumStruct; - Bool freeModelDB = False; - /* - * Build the initial db based on the model-config files - */ - xrm_name[0] = XrmStringToQuark (qualifierName); - xrm_name[1] = XrmStringToQuark ("xp-model-identifier"); - xrm_name[2] = (XrmQuark)NULL; - XrmQGetResource (systemAttributes.printers, xrm_name, xrm_name, - &rep_type, &value); - - if(value.addr != (XPointer)NULL) - { - fileName = (char *)xalloc(strlen(XPMODELDIR) + - strlen((char *)value.addr) + - strlen("model-config") + 3); - sprintf(fileName, "%s/%s/%s", XPMODELDIR, value.addr, - "model-config"); - modelDB = GetMergedDatabase(fileName); - xfree(fileName); - if(modelDB != (XrmDatabase)NULL) - { - XrmDatabase tempDB = (XrmDatabase)NULL; - /* - * have to make a temp copy because MergeDatabase destroys - * the "source" database. Merge in the printers DB - */ - tempDB = CopyDb(systemAttributes.printers); - XrmMergeDatabases(tempDB, &modelDB); - freeModelDB = True; - } - } - - /* - * Check to see if we knew the name AND found a database file - */ - if(modelDB == (XrmDatabase)NULL) - modelDB = systemAttributes.printers; - - xrm_name[0] = XrmStringToQuark (qualifierName); - xrm_name[1] = (XrmQuark)NULL; - xrm_class[0] = XrmStringToQuark((char *)value.addr); - xrm_class[1] = (XrmQuark)NULL; - enumStruct.pDb = &printerDB; - enumStruct.qualifier = (char *)qualifierName; - enumStruct.modelId = (char *)value.addr; - XrmEnumerateDatabase(modelDB, xrm_name, xrm_class, XrmEnumAllLevels, - AddDbEntry, (XPointer) &enumStruct); - - if(freeModelDB == True) XrmDestroyDatabase(modelDB); - } - XrmPutStringResource(&printerDB, "*printer-name", printerName); - XrmPutStringResource(&printerDB, "*qualifier", qualifierName); - return printerDB; -} - -/* - * BuildABase - builds an XrmDatabase by enumerating the supplied sourceBase - * database for elements relevant for the printer named by printerName, - * and deriving a class for printerName from the model declared in the - * systemAttributes.printers database. If no model is defined for this - * printer then the printerName is used as the class as well. - * - * This is used to build the initial value document and initial value - * job attribute databases for each printer by searching the system - * level doc and job databases. - */ -static XrmDatabase -BuildABase( - char *printerName, - char *qualifierName, - XrmDatabase sourceBase) -{ - XrmDatabase builtDB = (XrmDatabase)NULL; - - if(sourceBase != (XrmDatabase)NULL) - { - XrmName xrm_name[5], xrm_class[2]; - XrmRepresentation rep_type; - XrmValue value; - DbEnumStruct enumStruct; - - /* - * Retrieve the model name for use as the class. - */ - xrm_name[0] = XrmStringToQuark (printerName); - xrm_name[1] = XrmStringToQuark ("xp-model-identifier"); - xrm_name[2] = (XrmQuark)NULL; - XrmQGetResource (systemAttributes.printers, xrm_name, xrm_name, - &rep_type, &value); - /* - * if we have a model name then use it as the class, otherwise - * just use the printer name as the class as well as the name. - */ - if(value.addr != (XPointer)NULL) - xrm_class[0] = XrmStringToQuark((char *)value.addr); - else - xrm_class[0] = xrm_name[0]; - xrm_class[1] = (XrmQuark)NULL; - - xrm_name[1] = (XrmQuark)NULL; - - enumStruct.pDb = &builtDB; - enumStruct.qualifier = (char *)qualifierName; - enumStruct.modelId = (char *)value.addr; - XrmEnumerateDatabase(sourceBase, xrm_name, xrm_class, XrmEnumAllLevels, - AddDbEntry, (XPointer) &enumStruct); - } - - XrmPutStringResource(&builtDB, "*qualifier", qualifierName); - - return builtDB; -} - -/* - * FreeAttrList is called upon server recycle, and frees the printer - * databases stored in the global attrList. - */ -static void -FreeAttrList(void) -{ - PrAttrPtr pAttr, pNext; - - for(pAttr = attrList, pNext = attrList; - pAttr != (PrAttrPtr)NULL; - pAttr = pNext) - { - pNext = pAttr->next; - if(pAttr->printerAttrs != (XrmDatabase)NULL) - XrmDestroyDatabase(pAttr->printerAttrs); - if(pAttr->docAttrs != (XrmDatabase)NULL) - XrmDestroyDatabase(pAttr->docAttrs); - if(pAttr->jobAttrs != (XrmDatabase)NULL) - XrmDestroyDatabase(pAttr->jobAttrs); - xfree(pAttr->name); - xfree(pAttr->qualifier); - xfree(pAttr); - } - attrList = (PrAttrPtr)NULL; -} - -/* - * XpRehashAttributes - frees the per-printer attribute list and - * calls BuildSystemAttributes to rebuild the overall attribute - * store. It is expected that a caller of this will follow it - * by calling XpBuildAttributeStore for a new list of printers. - */ -int -XpRehashAttributes(void) -{ - if(attrList != (PrAttrPtr)NULL) - FreeAttrList(); - BuildSystemAttributes(); - return Success; -} - -/* - * XpBuildAttributeStore - creates the attribute database associated - * with the specified printer. The first time this is called it - * calls BuildSystemAttributes to create the system-level databases. - */ -void -XpBuildAttributeStore( - char *printerName, - char *qualifierName) -{ - PrAttrPtr pAttr; - - if((pAttr = (PrAttrPtr)xalloc(sizeof(PrAttrs))) == (PrAttrPtr)NULL) - return; - - if(attrGeneration != serverGeneration) - { - if(attrList != (PrAttrPtr)NULL) - FreeAttrList(); - dixRequestPrivate(attrCtxtPrivKey, sizeof(ContextAttrs)); - BuildSystemAttributes(); - - attrGeneration = serverGeneration; - } - - if(attrList == (PrAttrPtr)NULL) - { - pAttr->next = (PrAttrPtr)NULL; - attrList = pAttr; - } - else - { - pAttr->next = attrList; - attrList = pAttr; - } - - pAttr->name = strdup(printerName); - pAttr->qualifier = strdup(qualifierName); - pAttr->printerAttrs = BuildPrinterAttrs(printerName, qualifierName); - pAttr->docAttrs = BuildABase(printerName, qualifierName, - systemAttributes.doc); - pAttr->jobAttrs = BuildABase(printerName, qualifierName, - systemAttributes.job); -} - - -static Bool -StoreEntry( - XrmDatabase *sourceDB, - XrmBindingList bindings, - XrmQuarkList quarks, - XrmRepresentation *type, - XrmValue *value, - XPointer client_data) -{ - XrmDatabase *outDb = (XrmDatabase *)client_data; - - XrmQPutStringResource(outDb, bindings, quarks, (char *)value->addr); - - return FALSE; -} - -/* - * XpCopyDb - makes a copy of the specified XrmDatabase and returns - * the copy. - */ -static XrmDatabase -CopyDb(XrmDatabase inDb) -{ - XrmDatabase outDb = (XrmDatabase)NULL; - XrmQuark empty = NULLQUARK; - - (void)XrmEnumerateDatabase(inDb, &empty, &empty, XrmEnumAllLevels, - StoreEntry, (XPointer) &outDb); - return outDb; -} - -/* - * XpInitAttributes - initializes the attribute store for the specified - * context. It does this by making copies of the printer, doc, and job - * attributes databases for the printer associated with the context. - */ -void -XpInitAttributes(XpContextPtr pContext) -{ - ContextAttrPtr pCtxtAttrs; - PrAttrPtr pPrAttr = attrList; - - /* Initialize all the pointers to NULL */ - pCtxtAttrs = (ContextAttrPtr)dixLookupPrivate(&pContext->devPrivates, - attrCtxtPrivKey); - (void)memset((void *)pCtxtAttrs, 0, (size_t) sizeof(ContextAttrs)); - - for(pPrAttr = attrList; pPrAttr != (PrAttrPtr)NULL; pPrAttr = pPrAttr->next) - if(!strcmp(pPrAttr->name, pContext->printerName)) break; - - if(pPrAttr != (PrAttrPtr)NULL) - { - pCtxtAttrs->printerAttrs = CopyDb(pPrAttr->printerAttrs); - pCtxtAttrs->docAttrs = CopyDb(pPrAttr->docAttrs); - pCtxtAttrs->jobAttrs = CopyDb(pPrAttr->jobAttrs); - } -} - -void -XpDestroyAttributes( - XpContextPtr pContext) -{ - ContextAttrPtr pCtxtAttrs; - - pCtxtAttrs = (ContextAttrPtr)dixLookupPrivate(&pContext->devPrivates, - attrCtxtPrivKey); - if(pCtxtAttrs->printerAttrs != (XrmDatabase)NULL) - XrmDestroyDatabase(pCtxtAttrs->printerAttrs); - if(pCtxtAttrs->docAttrs != (XrmDatabase)NULL) - XrmDestroyDatabase(pCtxtAttrs->docAttrs); - if(pCtxtAttrs->jobAttrs != (XrmDatabase)NULL) - XrmDestroyDatabase(pCtxtAttrs->jobAttrs); - if(pCtxtAttrs->pageAttrs != (XrmDatabase)NULL) - XrmDestroyDatabase(pCtxtAttrs->pageAttrs); -} - -/* - * XpGetOneAttribute returns the string value of the specified attribute - * in the specified class for the specified print context. If the attribute - * doesn't exist in the database for this context, or if the class database - * doesn't exist for this context, then NULL is returned. The caller must - * not free the returned string, as the returned pointer points into the - * database. This function can also return a value from the server attributes, - * in which case the pContext parameter is ignored. - */ -char * -XpGetOneAttribute( - XpContextPtr pContext, - XPAttributes class, - char *attributeName) -{ - ContextAttrPtr pCtxtAttrs; - XrmDatabase db = (XrmDatabase)NULL; - XrmName xrm_name[3]; - XrmRepresentation rep_type; - XrmValue value; - - if(class == XPServerAttr) - { - if(systemAttributes.server == (XrmDatabase)NULL) - return NULL_STRING; - - xrm_name[0] = XrmStringToQuark (attributeName); - xrm_name[1] = (XrmQuark)NULL; - XrmQGetResource(systemAttributes.server, xrm_name, xrm_name, - &rep_type, &value); - - if(value.addr == (char *)NULL) - return NULL_STRING; - return (char *)value.addr; - } - else - { - pCtxtAttrs=(ContextAttrPtr)dixLookupPrivate(&pContext->devPrivates, - attrCtxtPrivKey); - switch(class) - { - case XPPrinterAttr: - db = pCtxtAttrs->printerAttrs; - break; - case XPDocAttr: - db = pCtxtAttrs->docAttrs; - break; - case XPJobAttr: - db = pCtxtAttrs->jobAttrs; - break; - case XPPageAttr: - db = pCtxtAttrs->pageAttrs; - break; - default: - break; - } - } - if(db == (XrmDatabase)NULL) - return NULL_STRING; - - xrm_name[0] = XrmStringToQuark ("qualifier"); - xrm_name[1] = (XrmQuark)NULL; - XrmQGetResource(db, xrm_name, xrm_name, &rep_type, &value); - - xrm_name[0] = XrmStringToQuark (value.addr); - xrm_name[1] = XrmStringToQuark (attributeName); - xrm_name[2] = (XrmQuark)NULL; - if(XrmQGetResource(db, xrm_name, xrm_name, &rep_type, &value)) - return (char *)value.addr; - else - return NULL_STRING; -} - -/* - * XpPutOneAttribute updates one attribute for the specified - * context and class. This function is intended for use by the attribute - * validation module which updates the XrmDatabases directly. This - * function does not recognize XPServerAttr. - */ -void -XpPutOneAttribute( - XpContextPtr pContext, - XPAttributes class, - const char* attributeName, - const char* value) -{ - ContextAttrPtr pCtxtAttrs; - XrmDatabase db; - XrmBinding bindings[1]; - XrmQuark quarks[2]; - - pCtxtAttrs = (ContextAttrPtr)dixLookupPrivate(&pContext->devPrivates, - attrCtxtPrivKey); - switch(class) - { - case XPPrinterAttr: - db = pCtxtAttrs->printerAttrs; - break; - case XPDocAttr: - db = pCtxtAttrs->docAttrs; - break; - case XPJobAttr: - db = pCtxtAttrs->jobAttrs; - break; - case XPPageAttr: - db = pCtxtAttrs->pageAttrs; - break; - default: - return; - } - bindings[0] = XrmBindLoosely; - quarks[0] = XrmStringToQuark(attributeName); - quarks[1] = (XrmQuark)NULL; - XrmQPutStringResource(&db, bindings, quarks, value ? value : ""); -} - - - -/******************************************************************************* - * - * The following routines: ExpandSpace, PutString, PutByte, and AppendEntry - * form the functional core of the GetAttributes routine. Xrm does not - * supply a routine to form a string database from an XrmDatabase, except - * by writing the database to a file. This code avoids the file system - * overhead, but is a bit clunky in its memory management. - * - ******************************************************************************/ - -/* - * ExpandSpace expands the memory allocated for the string database in - * the StringDbStruct passed in, and updates the "space" field of the - * struct to indicate the new amount of space available. - */ -static Bool -ExpandSpace( - StringDbStruct *pStr) -{ - char *newSpace; - - if((newSpace = (char *)xrealloc(pStr->stringDb, pStr->nextPos + pStr->space - + 1024)) == (char *)NULL) - return False; - pStr->space += 1024; - pStr->stringDb = newSpace; - return True; -} - -/* - * PutString puts the contents of a null-terminated string into the string - * database in the StringDbStruct passed in. If there is insufficient room - * for the string, ExpandSpace is called, and the nextPos and space fields - * are updated. - */ -static void -PutString( - StringDbStruct *pStr, - char *pString) -{ - int len = strlen(pString); - - if(len >= pStr->space) - if(!ExpandSpace(pStr)) - return; - strcpy(&pStr->stringDb[pStr->nextPos], pString); - pStr->nextPos += len; - pStr->space -= len; -} - -/* - * PutByte puts a single byte value in to the string database in the passed-in - * StringDbStruct. ExpandSpace is called if there is insufficient room for - * the byte, and the nextPos and space fields are updated. - */ -static void -PutByte( - StringDbStruct *pStr, - char byte) -{ - if(pStr->space <= 1) - if(!ExpandSpace(pStr)) - return; - pStr->stringDb[pStr->nextPos] = byte; - pStr->nextPos++; - pStr->space--; -} - -#define XrmQString XrmPermStringToQuark("String") - -/* - * AppendEntry is called by XrmEnumerateDatabase, and serves to append - * a database entry onto a string database. The passed-in "closure" - * struct contains a pointer to the string, and a count of the remaining - * bytes. If there are insufficient remaining bytes then the struct - * is realloced, and the count of the space remaining is updated. - * Database elements of types other than String are ignored! - * This code is based directly on that in "DumpEntry" in Xrm.c. - */ -static Bool -AppendEntry( - XrmDatabase *db, - XrmBindingList bindings, - XrmQuarkList quarks, - XrmRepresentation *type, - XrmValuePtr value, - XPointer data) -{ - StringDbStruct *pEnumStr = (StringDbStruct *)data; - Bool firstNameSeen; - unsigned int i; - char *s, c; - - if (*type != XrmQString) - return False; - - for (firstNameSeen = False; *quarks; bindings++, quarks++) { - if (*bindings == XrmBindLoosely) { - PutString(pEnumStr, "*"); - } else if (firstNameSeen) { - PutString(pEnumStr, "."); - } - firstNameSeen = True; - PutString(pEnumStr, XrmQuarkToString(*quarks)); - } - s = value->addr; - i = value->size; - PutString(pEnumStr, ":\t"); - if(i) i--; - - if (i && (*s == ' ' || *s == '\t')) - PutByte(pEnumStr, '\\'); /* preserve leading whitespace */ - - while (i--) { - c = *s++; - if (c == '\n') { - if (i) - PutString(pEnumStr, "\\n\\\n"); - else - PutString(pEnumStr, "\\n"); - } else if (c == '\\') - PutString(pEnumStr, "\\\\"); - else if ((c < ' ' && c != '\t') || - ((unsigned char)c >= 0x7f && (unsigned char)c < 0xa0)) - { - char temp[4]; - (void) sprintf(temp, "\\%03o", (unsigned char)c); - PutString(pEnumStr, temp); - } - else - PutByte(pEnumStr, c); - } - PutByte(pEnumStr, '\n'); - pEnumStr->stringDb[pEnumStr->nextPos] = (char)'\0'; - return False; -} - -/* - * XpGetAttributes returns a string database version of the Xrm database - * for the specified context and class. This function can also return the - * contents of the server attributes, in which case the pContext parameter - * is ignored. - * - * The caller is responsible for freeing the returned string, - * unlike XpGetOneAttribute, where the caller must not free the string. - */ -char * -XpGetAttributes( - XpContextPtr pContext, - XPAttributes class) -{ - ContextAttrPtr pCtxtAttrs; - XrmDatabase db = (XrmDatabase)NULL; - StringDbStruct enumStruct; - XrmQuark empty = NULLQUARK; - - if(class == XPServerAttr) - db = systemAttributes.server; - else - { - pCtxtAttrs=(ContextAttrPtr)dixLookupPrivate(&pContext->devPrivates, - attrCtxtPrivKey); - switch(class) - { - case XPServerAttr: - db = systemAttributes.server; - break; - case XPPrinterAttr: - db = pCtxtAttrs->printerAttrs; - break; - case XPDocAttr: - db = pCtxtAttrs->docAttrs; - break; - case XPJobAttr: - db = pCtxtAttrs->jobAttrs; - break; - case XPPageAttr: - db = pCtxtAttrs->pageAttrs; - break; - default: - break; - } - } - if(db == (XrmDatabase)NULL) - { - char *retval = (char *)xalloc(1); - retval[0] = (char)'\0'; - return retval; - } - - if((enumStruct.stringDb = (char *)xalloc(1024)) == (char *)NULL) - return (char *)NULL; - enumStruct.stringDb[0] = (char)'\0'; - enumStruct.nextPos = 0; - enumStruct.space = 1024; - (void)XrmEnumerateDatabase(db, &empty, &empty, XrmEnumAllLevels, - AppendEntry, (XPointer) &enumStruct); - - return enumStruct.stringDb; -} - -int -XpAugmentAttributes( - XpContextPtr pContext, - XPAttributes class, - char *attributes) -{ - XrmDatabase db; - ContextAttrPtr pCtxtAttrs; - - db = XrmGetStringDatabase(attributes); - if(db == (XrmDatabase)NULL) return BadAlloc; - - pCtxtAttrs = (ContextAttrPtr)dixLookupPrivate(&pContext->devPrivates, - attrCtxtPrivKey); - switch(class) - { - case XPPrinterAttr: - XrmMergeDatabases(db, &pCtxtAttrs->printerAttrs); - break; - case XPDocAttr: - XrmMergeDatabases(db, &pCtxtAttrs->docAttrs); - break; - case XPJobAttr: - XrmMergeDatabases(db, &pCtxtAttrs->jobAttrs); - break; - case XPPageAttr: - XrmMergeDatabases(db, &pCtxtAttrs->pageAttrs); - break; - default: - break; - } - return Success; -} - -/* - * XpSetAttributes - sets the attribute stores for a specified context. - */ -int -XpSetAttributes( - XpContextPtr pContext, - XPAttributes class, - char *attributes) -{ - XrmDatabase db; - ContextAttrPtr pCtxtAttrs; - - db = XrmGetStringDatabase(attributes); - if(db == (XrmDatabase)NULL) return BadAlloc; - - pCtxtAttrs=(ContextAttrPtr)dixLookupPrivate(&pContext->devPrivates, - attrCtxtPrivKey); - switch(class) - { - case XPPrinterAttr: - if(pCtxtAttrs->printerAttrs != (XrmDatabase)NULL) - XrmDestroyDatabase(pCtxtAttrs->printerAttrs); - pCtxtAttrs->printerAttrs = db; - break; - case XPDocAttr: - if(pCtxtAttrs->docAttrs != (XrmDatabase)NULL) - XrmDestroyDatabase(pCtxtAttrs->docAttrs); - pCtxtAttrs->docAttrs = db; - break; - case XPJobAttr: - if(pCtxtAttrs->jobAttrs != (XrmDatabase)NULL) - XrmDestroyDatabase(pCtxtAttrs->jobAttrs); - pCtxtAttrs->jobAttrs = db; - break; - case XPPageAttr: - if(pCtxtAttrs->pageAttrs != (XrmDatabase)NULL) - XrmDestroyDatabase(pCtxtAttrs->pageAttrs); - pCtxtAttrs->pageAttrs = db; - break; - default: - break; - } - return Success; -} - -void -XpAddPrinterAttribute( - char *printerName, - char *printerQualifier, - char *attributeName, - char *attributeValue) -{ - PrAttrPtr pAttr; - - for(pAttr = attrList; pAttr != (PrAttrPtr)NULL; pAttr = pAttr->next) - { - if(!strcmp(printerQualifier, pAttr->qualifier)) - { - XrmPutStringResource(&pAttr->printerAttrs, attributeName, - attributeValue); - break; - } - } -} - -const char * -XpGetPrinterAttribute(const char *printerName, - const char *attribute) -{ - PrAttrPtr pAttr; - XrmValue value; - char *type; - - for(pAttr = attrList; pAttr != (PrAttrPtr)NULL; pAttr = pAttr->next) - { - if(!strcmp(printerName, pAttr->qualifier)) - { - char *attrStr; - - attrStr = (char *)xalloc(strlen(printerName) + strlen(attribute) + - 2); - sprintf(attrStr, "%s.%s", printerName, attribute); - XrmGetResource(pAttr->printerAttrs, attrStr, attrStr, - &type, &value); - xfree(attrStr); - break; - } - } - if(value.addr != (XPointer)NULL && strlen(value.addr) != 0) - return value.addr; - else - return ""; -} - -/******************************************************************************* - * - * The following routines are not attribute routines, but are rather - * spooler interface functions. They should presumably move to - * a SpoolerIf.c of some similarly named file. - * - ******************************************************************************/ -#include - -static char serverAttrStr[] = "*document-attributes-supported: copy-count\n\ -*job-attributes-supported: job-name job-owner\ - notification-profile xp-spooler-command-options\n\ -*multiple-documents-supported: False"; - -XrmDatabase -XpSpoolerGetServerAttributes(void) -{ - char *totalAttrs, *localeName; - XrmDatabase db; - - localeName = setlocale(LC_CTYPE, (char *)NULL); - if(!localeName || strlen(localeName) == 0) - localeName = "C"; - - if((totalAttrs = (char *)xalloc(strlen(serverAttrStr) + strlen(localeName) - + 11)) == (char *)NULL) - return (XrmDatabase)NULL; - sprintf(totalAttrs, "%s\n%s\t%s", serverAttrStr, "*locale:", localeName); - - db = XrmGetStringDatabase(totalAttrs); - xfree(totalAttrs); - return db; -} - -/* - * Tailf() works similar to "/bin/tail -f fd_in >fd_out" until - * the process |child| terminates (the child status is - * returned in |child_status|). - * This function is used to copy the stdout/stderr output of a - * child to fd_out until the child terminates. - */ -static -void Tailf(int fd_in, int fd_out, pid_t child, int *child_status) -{ - char b[256]; - ssize_t sz; - Bool childDone = FALSE; - struct timeval timeout; - long fpos = 0; /* XXX: this is not correct for largefile support */ - - timeout.tv_sec = 0; - timeout.tv_usec = 100000; - - for(;;) - { - /* Check whether the child is still alive or not */ - if (waitpid(child, child_status, WNOHANG) == child) - childDone = TRUE; - - /* Copy traffic from |fd_in| to |fd_out| - * (Note we have to use |pread()| here to avoid race conditions - * between a child process writing to the same file using the - * same file pointer (|dup(2)| and |fork(2)| just duplicate the - * file handle but not the pointer)). - */ - while ((sz = pread(fd_in, b, sizeof(b), fpos)) > 0) - { - fpos += sz; - write(fd_out, b, sz); - } - - if (childDone) - break; - - (void)select(0, NULL, NULL, NULL, &timeout); - } -} - -/* - * SendFileToCommand takes three character pointers - the file name, - * the command to execute, - * and the "argv" style NULL-terminated vector of arguments for the command. - * The command is exec'd, and the file contents are sent to the command - * via stdin. - * - * WARNING: This function will try to adopt the userId of the supplied - * user name prior to exec'ing the supplied command. - */ -static void -SendFileToCommand( - XpContextPtr pContext, - char *fileName, - char *pCommand, - char **argVector, - char *userName) -{ - pid_t childPid; - int pipefd[2]; - int status; - struct stat statBuf; - FILE *fp, *outPipe; - FILE *resFp; /* output from launched command */ - int resfd; - - resFp = tmpfile(); - if (resFp == NULL) - { - ErrorF("SendFileToCommand: Cannot open temporary file for command output\n"); - return; - } - resfd = fileno(resFp); - - if(pipe(pipefd)) - { - ErrorF("SendFileToCommand: Cannot open pipe\n"); - fclose(resFp); - return; - } - - if(stat(fileName, &statBuf) < 0 || (int)statBuf.st_size == 0) - { - close(pipefd[0]); - close(pipefd[1]); - fclose(resFp); - return; - } - - fp = fopen(fileName, "r"); - if(fp == (FILE *)NULL) - { - ErrorF("SendFileToCommand: Cannot open scratch spool file '%s'\n", fileName); - close(pipefd[0]); - close(pipefd[1]); - fclose(resFp); - return; - } - - if((childPid = fork()) == 0) - { - close(pipefd[1]); - - /* Replace current stdin with input from the pipe */ - close(STDIN_FILENO); - dup(pipefd[0]); - close(pipefd[0]); - - /* Close current stdout and redirect it to resfd */ - close(STDOUT_FILENO); - dup(resfd); - - /* Close current stderr and redirect it to resfd - * (valgrind may not like that, in this case simply start it using - * % valgrind 50>/dev/tty --logfile-fd=50 ./Xprt ... #) - */ - close(STDERR_FILENO); - dup(resfd); - - fclose(resFp); - - /* - * If a user name is specified, try to set our uid to match that - * user name. This is to allow e.g. a banner page to show the - * name of the printing user rather than the user who started - * the print server. - */ - if(userName) - { - uid_t myUid; - - if((myUid = geteuid()) == (uid_t)0) - { - struct passwd *pPasswd; - - if((pPasswd = getpwnam(userName))) - { - if (setgid((gid_t)pPasswd->pw_gid) != 0) - perror("SendFileToCommand: setgid() failure."); - - if (initgroups(userName, (gid_t)pPasswd->pw_gid) != 0) - perror("SendFileToCommand: initgroups() failure."); - - if (setuid((uid_t)pPasswd->pw_uid) != 0) - perror("SendFileToCommand: setuid() failure."); - } - } - } - /* return BadAlloc? */ - if (execv(pCommand, argVector) == -1) { - FatalError("unable to exec '%s'", pCommand); - } - } - else - { - (void) close(pipefd[0]); - - outPipe = fdopen(pipefd[1], "w"); - (void) TransferBytes(fp, outPipe, (int)statBuf.st_size); - - (void) fclose(outPipe); - (void) fclose(fp); - - /* Wait for spooler child (and send all it's output to stderr) */ - Tailf(resfd, STDERR_FILENO, childPid, &status); - - if (status != EXIT_SUCCESS) - { - ErrorF("SendFileToCommand: spooler command returned non-zero status %d.\n", status); - } - - /* Store "xp-spooler-command-results" XPJobAttr that the - * client can fetch it on demand */ - if ((fstat(resfd, &statBuf) >= 0) && (statBuf.st_size >= 0)) - { - long bufSize; - char *buf; - - bufSize = statBuf.st_size; - - /* Clamp buffer size to 4MB to prevent that we allocate giant - * buffers if the spooler goes mad and spams it's stdout/stderr - * channel. */ - bufSize = MIN(bufSize, 4*1024*1024); - - buf = xalloc(bufSize+1); - if (buf != NULL) - { - bufSize = pread(resfd, buf, bufSize, 0); - buf[bufSize]='\0'; - - /* XXX: This should be converted from local multibyte encoding to - * Compound Text encoding first */ - XpPutOneAttribute(pContext, XPJobAttr, "xp-spooler-command-results", buf); - - xfree(buf); - } - } - else - { - ErrorF("SendFileToCommand: fstat() failed.\n"); - } - - fclose(resFp); - } - return; -} - -/* - * ReplaceAllKeywords causes all the predefined keywords (e.g. %options%) - * to be replaced with the appropriate values derived from the attribute - * store for the supplied print context. The ReplaceAnyString utility - * routine is used to perform the actual replacements. - */ - -static char * -ReplaceAllKeywords( - XpContextPtr pContext, - char *command) -{ - char *cmdOpt; - - cmdOpt = XpGetOneAttribute(pContext, XPPrinterAttr, - "xp-spooler-printer-name"); - if(cmdOpt != (char *)NULL && strlen(cmdOpt) != 0) - command = ReplaceAnyString(command, "%printer-name%", cmdOpt); - else - command = ReplaceAnyString(command, "%printer-name%", - pContext->printerName); - - cmdOpt = XpGetOneAttribute(pContext, XPDocAttr, "copy-count"); - if(cmdOpt != (char *)NULL && strlen(cmdOpt) != 0) - command = ReplaceAnyString(command, "%copy-count%", cmdOpt); - else - command = ReplaceAnyString(command, "%copy-count%", "1"); - - cmdOpt = XpGetOneAttribute(pContext, XPJobAttr, "job-name"); - if(cmdOpt != (char *)NULL && strlen(cmdOpt) != 0) - command = ReplaceAnyString(command, "%job-name%", cmdOpt); - else - command = ReplaceAnyString(command, "%job-name%", ""); - - cmdOpt = XpGetOneAttribute(pContext, XPJobAttr, "job-owner"); - if(cmdOpt != (char *)NULL && strlen(cmdOpt) != 0) - command = ReplaceAnyString(command, "%job-owner%", cmdOpt); - else - command = ReplaceAnyString(command, "%job-owner%", ""); - - cmdOpt = XpGetOneAttribute(pContext, XPJobAttr, - "xp-spooler-command-options"); - if(cmdOpt != (char *)NULL && strlen(cmdOpt) != 0) - command = ReplaceAnyString(command, "%options%", cmdOpt); - else - command = ReplaceAnyString(command, "%options%", ""); - - /* New in xprint.mozdev.org release 007 - replace "%xpconfigdir%" with - * location of $XPCONFIGDIR */ - command = ReplaceAnyString(command, "%xpconfigdir%", XpGetConfigDirBase()); - - return command; -} - -#ifdef __QNX__ -#define toascii( c ) ((unsigned)(c) & 0x007f) -#endif - -#if defined(CSRG_BASED) || \ - defined(linux) || \ - defined(__CYGWIN__) || \ - (defined(sun) && !defined(SVR4)) || \ - (defined(SVR4) && !defined(sun) && !defined(__UNIXWARE__)) || \ - defined(ISC) || \ - defined(Lynx) || \ - defined(__QNX__) || \ - defined(__APPLE__) -#define iswspace(c) (isascii(c) && isspace(toascii(c))) -#endif - -/* - * GetToken - takes in a string and returns a malloc'd copy of the - * first non-white-space sequence of characters in the string. - * It returns the number of _bytes_ (NOT characters) parsed through - * the inStr to get to the end of the returned token. - */ -static int -GetToken( - char *inStr, - char **outStr) -{ - size_t mbCurMax = MB_CUR_MAX; - wchar_t curChar; - int i, numBytes, byteLen = strlen(inStr); - char *tok; - - /* - * read through any leading white space. - */ - for(i = 0, numBytes = 0; i < byteLen; i += numBytes) - { - numBytes = mbtowc(&curChar, &inStr[i], mbCurMax); - if(!iswspace(curChar)) - break; - } - tok = inStr + i; - - /* - * find the end of the token. - */ - byteLen = strlen(tok); - for(i = 0, numBytes = 0; i < byteLen; i += numBytes) - { - numBytes = mbtowc(&curChar, &tok[i], mbCurMax); - if(iswspace(curChar)) - break; - } - - if((*outStr = (char *)xalloc(i + 1)) == (char *)NULL) - return 0; - strncpy(*outStr, tok, i); - (*outStr)[i] = (char)'\0'; - return (tok + i) - inStr; -} - -static void -FreeVector( - char **vector) -{ - int i; - - if(vector == (char **)NULL) return; - - for(i = 0; vector[i] != (char *)NULL; i++) - xfree(vector[i]); - xfree(vector); -} - - -/* - * AddVector appends the pAddition arg vector to the pTarget arg vector. - * If the pTarget cannot be realloc'd, then pTarget is set to NULL. - */ -static void -AddVector( - char ***pTarget, - char **pAddition) -{ - int numTarget, numAdd, i; - - for(numTarget = 0; (*pTarget)[numTarget] != (char *)NULL; numTarget++) - ; - for(numAdd = 0; pAddition[numAdd] != (char *)NULL; numAdd++) - ; - - *pTarget = (char **)xrealloc((void *)*pTarget, (numTarget + numAdd + 1) * - sizeof(char *)); - if(*pTarget == (char **)NULL) - return; - for(i = 0; i < numAdd; i++) - (*pTarget)[numTarget + i] = pAddition[i]; - - (*pTarget)[numTarget + numAdd] = (char *)NULL; -} - -static char ** -BuildArgVector( - char *argString, - XpContextPtr pContext) -{ - char **pVector; - char *curTok; - int numChars, i; - static int beenHere = 0; /* prevent recursion on embedded %options% - */ - - pVector = (char **)xalloc(sizeof(char *)); - pVector[0] = (char *)NULL; - for(i = 0; (numChars = GetToken(argString, &curTok)) != 0; - i++, argString += numChars) - { - if(beenHere || strcmp(curTok, "%options%")) - { - if(curTok[0] == (char)'\0') - { - xfree(curTok); - } - else - { - pVector = (char **)xrealloc((void *)pVector, - (i + 2)*sizeof(char *)); - if(pVector == (char **)NULL) - return (char **)NULL; - pVector[i] = curTok; - pVector[i + 1] = (char *)NULL; - } - } - else if(!beenHere) - { - char **optionsVec; - - curTok = ReplaceAllKeywords(pContext, curTok); - beenHere = 1; - optionsVec = BuildArgVector(curTok, pContext); - xfree(curTok); - beenHere = 0; - AddVector(&pVector, optionsVec); - xfree(optionsVec); - } - } - if(numChars == 0 && curTok != (char *)NULL) - xfree(curTok); - return pVector; -} - -/* - * VectorizeCommand takes a string and breaks it into a command name and - * an array of character pointers suitable for handing to execv. The - * array is NULL-terminated. - * The returned char * is the command name, and should be freed when no - * longer needed. The array elements returned in the pVector parameter - * should be individually freed, and the array itself should also be - * freed when no longer needed. - */ -static char * -VectorizeCommand( - char *command, - char ***pVector, - XpContextPtr pContext) -{ - char *cmdName; - int numChars; - - if(command == (char *)NULL) - return (char *)NULL; - - numChars = GetToken(command, &cmdName); - - if(cmdName == (char *)NULL) - return (char *)NULL; - - /* Mangle the command name, too... */ - cmdName = ReplaceAllKeywords(pContext, cmdName); - - if(cmdName == (char *)NULL) - return (char *)NULL; - - *pVector = BuildArgVector(command, pContext); - - return cmdName; -} - -int -XpSubmitJob(fileName, pContext) - char *fileName; - XpContextPtr pContext; -{ - char **vector, *cmdNam, *command, *userName; - int i; - - command = XpGetOneAttribute(pContext, XPPrinterAttr, "xp-spooler-command"); - if(command == (char *)NULL || strlen(command) == 0) - { - if( spooler_type ) - { - command = strdup(spooler_type->spool_command); - } - else - { - ErrorF("XpSubmitJob: No default spool command defined.\n"); - } - } - else - { - command = strdup(command); - } - if(command == (char *)NULL) - { - ErrorF("XpSubmitJob: No spooler command found, cannot submit job.\n"); - return BadAlloc; - } - - cmdNam = VectorizeCommand(command, &vector, pContext); - xfree(command); - - if(cmdNam == (char *)NULL) - return BadAlloc; - - for(i = 0; vector[i] != (char *)NULL; i++) - { - vector[i] = ReplaceAllKeywords(pContext, vector[i]); - if(vector[i] == (char *)NULL) - { - xfree(cmdNam); - for(i = 0; vector[i] != (char *)NULL; i++) - xfree(vector[i]); - xfree(vector); - return BadAlloc; - } - } - - userName = XpGetOneAttribute(pContext, XPJobAttr, "job-owner"); - if(userName != (char *)NULL && strlen(userName) == 0) - userName = (char *)NULL; - - SendFileToCommand(pContext, fileName, cmdNam, vector, userName); - - FreeVector(vector); - xfree(cmdNam); - - return Success; -} - -/* - * SearchInputTrays() - * - * Given a tray, return the medium in the tray. Conversely, given a - * medium, return a tray in which it can be found. In either case, - * return NULL if the given tray or medium cannot be found. - */ -#define TRAY 0 -#define MEDIUM 1 - -static char * -SearchInputTrays(XpContextPtr pCon, - int which, - char *val) -{ - char *inputTraysMedium, tray[80], medium[80], *copy; - char *pS, *pE, *pLast; - - inputTraysMedium = XpGetOneAttribute( pCon, XPPrinterAttr, - "input-trays-medium" ); - - copy = strdup( inputTraysMedium ); - pS = copy; - pLast = copy + strlen( copy ); - - while( pS < pLast ) - { - while( *pS && *pS != '{' ) - pS++; - - pE = ++pS; - while( *pE && *pE != '}' ) - pE++; - *pE = '\0'; - - sscanf( pS, "%s %s", tray, medium ); - - if( which == MEDIUM && !strcmp( val, medium ) ) - { - xfree( copy ); - return strdup( tray ); - } - - if( which == TRAY && !strcmp( val, tray ) ) - { - xfree( copy ); - return strdup( medium ); - } - - pS = pE + 1; - } - - xfree( copy ); - return strdup( NULL_STRING ); -} - -/* - * XpGetTrayMediumFromContext() - * - * Given a print context, hit the input-trays-medium, - * default-input-tray and default-medium attributes to find the - * appropriate tray to use, and the medium in that tray. - */ -void -XpGetTrayMediumFromContext(XpContextPtr pCon, - char **medium, - char **tray) -{ - char *defMedium, *defTray; - char *t, *m; - - defMedium = XpGetOneAttribute( pCon, XPPageAttr, - "default-medium" ); - if( *defMedium == '\0' ) - defMedium = XpGetOneAttribute( pCon, XPDocAttr, - "default-medium" ); - - defTray = XpGetOneAttribute( pCon, XPPageAttr, - "default-input-tray" ); - if( *defTray == '\0' ) - defTray = XpGetOneAttribute( pCon, XPDocAttr, - "default-input-tray" ); - - /* - * First, check to see if the default tray has the default medium - * installed. This is the ideal case. - */ - m = SearchInputTrays( pCon, TRAY, defTray ); - if( !strcmp( m, defMedium ) ) - { - xfree( m ); - *tray = strdup( defTray ); - *medium = strdup( defMedium ); - return; - } - - /* - * If the default tray doesn't have the default medium, search for - * a tray which has the default medium. - */ - t = SearchInputTrays( pCon, MEDIUM, defMedium ); - if( t ) - { - *tray = t; - *medium = strdup( defMedium ); - return; - } - - /* - * If all else fails, just return the default tray, and whatever - * medium happens to be there. Note that we simply return - * whatever is in the attribute store. Any further correction is - * left up to the DDX driver. - */ - *tray = strdup( defTray ); - *medium = m; - xfree( t ); -} diff --git a/hw/xprint/attributes.h b/hw/xprint/attributes.h deleted file mode 100644 index 26864a2f0..000000000 --- a/hw/xprint/attributes.h +++ /dev/null @@ -1,130 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#ifndef _Xp_attributes_h -#define _Xp_attributes_h 1 - -#include "scrnintstr.h" -#include "AttrValid.h" - -#define BFuncArgs int ndx, ScreenPtr pScreen, int argc, char **argv -typedef Bool (*pBFunc)(BFuncArgs); - -#define VFuncArgs char *name, XpValidatePoolsRec *pValRec, float *width, float *height, int *res -typedef void (*pVFunc)(VFuncArgs); - -/* - * attributes.c - */ -void XpInitAttributes(XpContextPtr pContext); -void XpBuildAttributeStore(char *printerName, - char *qualifierName); -void XpAddPrinterAttribute(char *printerName, - char *printerQualifier, - char *attributeName, - char *attributeValue); -void XpDestroyAttributes(XpContextPtr pContext); -char *XpGetConfigDir(Bool useLocale); -char *XpGetOneAttribute(XpContextPtr pContext, - XPAttributes class, - char *attributeName); -void XpPutOneAttribute(XpContextPtr pContext, - XPAttributes class, - const char* attributeName, - const char* value); -int XpRehashAttributes(void); -char *XpGetAttributes(XpContextPtr pContext, - XPAttributes class); -int XpAugmentAttributes(XpContextPtr pContext, - XPAttributes class, - char *attributes); -int XpSetAttributes(XpContextPtr pContext, - XPAttributes class, - char *attributes); -const char *XpGetPrinterAttribute(const char *printerName, - const char *attribute); -void XpGetTrayMediumFromContext(XpContextPtr pCon, - char **medium, - char **tray); -int XpSubmitJob(char *fileName, XpContextPtr pContext); - -/* - * mediaSizes.c - */ -int XpGetResolution(XpContextPtr pContext); -XpOid XpGetContentOrientation(XpContextPtr pContext); -XpOid XpGetAvailableCompression(XpContextPtr pContext); -XpOid XpGetPlex(XpContextPtr pContext); -XpOid XpGetPageSize(XpContextPtr pContext, - XpOid* pTray, - const XpOidMediumSS* msss); -void XpGetMediumMillimeters(XpOid page_size, - float *width, - float *height); -void XpGetMediumDimensions(XpContextPtr pContext, - unsigned short *width, - unsigned short *height); -void XpGetReproductionArea(XpContextPtr pContext, - xRectangle *pRect); -void XpGetMaxWidthHeightRes(const char *printer_name, - const XpValidatePoolsRec* vpr, - float *width, - float *height, - int* resolution); - -/* Util.c */ -char *ReplaceAnyString(char *string, - char *target, - char *replacement); -char *ReplaceFileString(char *string, - char *inFileName, - char *outFileName); -int TransferBytes(FILE *pSrcFile, - FILE *pDstFile, - int numBytes); -Bool CopyContentsAndDelete(FILE **ppSrcFile, - char **pSrcFileName, - FILE *pDstFile); -int XpSendDocumentData(ClientPtr client, - FILE *fp, - int fileLen, - int maxBufSize); -int XpFinishDocData(ClientPtr client); -Bool XpOpenTmpFile(char *mode, - char **fname, - FILE **stream); - -#endif /* _Xp_attributes_h */ diff --git a/hw/xprint/config/C/Makefile.am b/hw/xprint/config/C/Makefile.am deleted file mode 100644 index 0390ed2d4..000000000 --- a/hw/xprint/config/C/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -SUBDIRS = print diff --git a/hw/xprint/config/C/print/Makefile.am b/hw/xprint/config/C/print/Makefile.am deleted file mode 100644 index e3c01da60..000000000 --- a/hw/xprint/config/C/print/Makefile.am +++ /dev/null @@ -1,14 +0,0 @@ -SUBDIRS = attributes ddx-config models - -xpcdir = @xpconfigdir@/C/print - - -Xprinters.ghostscript: $(srcdir)/Xprinters - sed < $(srcdir)/Xprinters "s/#Printer xp_pdf_spooldir_tmp_Xprintjobs/Printer xp_pdf_spooldir_tmp_Xprintjobs/" > Xprinters.ghostscript - - - -dist_xpc_DATA = Xprinters -xpc_DATA = Xprinters.ghostscript - -CLEANFILES = Xprinters.ghostscript diff --git a/hw/xprint/config/C/print/Xprinters b/hw/xprint/config/C/print/Xprinters deleted file mode 100644 index a32c02dc2..000000000 --- a/hw/xprint/config/C/print/Xprinters +++ /dev/null @@ -1,49 +0,0 @@ -######################################################################## -# -# $Xorg: Xprinters,v 1.3 2000/08/17 19:48:02 cpqbld Exp $ -# -# X*printers sample configuration file -# -# -# This file belongs in /usr/lib/X11/X*printers, where the "*" is the -# display number of the server. For example, if the server is -# invoked using the command X :0, then the X0printers file is used. -######################################################################## - -######################################################################## -# Use lpstat to augment the list of printers managed by the -# server. (This is the default behavior if the X*printers file does -# not exist, or if an "Augment_Printer_List" line is not specified.) -######################################################################## -#Augment_Printer_List %(default)% - -######################################################################## -# Use the specified command pipeline to augment the list of printers -# managed by the server. -######################################################################## -#Augment_Printer_List lpstat -a | cut -d " " -f 1 # equivalent to default - -######################################################################## -# Do not augment the list of printers managed by the server. -######################################################################## -#Augment_Printer_List %none% - -######################################################################## -# Preconfigured entry for the PSspooldir model -# (which sends jobs to /tmp/Xprintjobs instead to a physical printer) -######################################################################## -#Printer xp_pdf_spooldir_tmp_Xprintjobs -Printer xp_ps_spooldir_tmp_Xprintjobs - -######################################################################## -# Add individual printers to the list of printers managed by the -# server. These are aliases, determined by driver name. -######################################################################## - - -# EXAMPLES -# -# Printer xppspr -# Printer xppclpr -# Printer xppclmonopr -# Printer xprasterpr diff --git a/hw/xprint/config/C/print/attributes/Makefile.am b/hw/xprint/config/C/print/attributes/Makefile.am deleted file mode 100644 index 0d2cceaff..000000000 --- a/hw/xprint/config/C/print/attributes/Makefile.am +++ /dev/null @@ -1,3 +0,0 @@ -xpcdir = @xpconfigdir@/C/print/attributes - -dist_xpc_DATA = document job printer diff --git a/hw/xprint/config/C/print/attributes/document b/hw/xprint/config/C/print/attributes/document deleted file mode 100644 index b1651bd94..000000000 --- a/hw/xprint/config/C/print/attributes/document +++ /dev/null @@ -1,49 +0,0 @@ -# $Xorg: document,v 1.3 2000/08/17 19:48:03 cpqbld Exp $ -# Document DPA-Object initial attribute values - -# Attribute IDs must be qualified by using one of the following -# (listed in order of precedence): -# -# printer-name -# Set this attribute for a specific printer. -# Example: "dj_1.plex: duplex" -# -# printer-model -# Set this attribute for all printers of a specific model. -# Example: "HPDJ1600C.plex: duplex" -# -# '*' -# Set this attribute for all printers. -# Example: "*.plex: duplex" - - -*content-orientation: portrait -*copy-count: 1 -*default-medium: iso-a4 -*default-printer-resolution: 600 - -# "PSspooldir" jobs should always be 300 DPI -# (to be compatible to DPS-based PostScript viewers such as sdtimage) -PSspooldir.default-printer-resolution: 300 - -# "PS2PDFspooldir-GS" jobs should always be 600 DPI -PS2PDFspooldir-GS.default-printer-resolution: 600 - -# Some resolution defaults to make applications happy which are too lazy -# to pick an own default in absence of "default-printer-resolution" -HPLJ4050-PS.default-printer-resolution: 600 -SPSPARC2.default-printer-resolution: 300 -CANONBJ10E-GS.default-printer-resolution: 360 -CANONC3200-PS.default-printer-resolution: 600 - -# EXAMPLES -# -# *content-orientation: landscape -# *copy-count: 3 -# *default-input-tray: main -# *default-medium: iso-a4 -# *default-printer-resolution: 600 -# *document-format: {PCL 5} -# *plex: simplex -# *xp-listfonts-modes: xp-list-internal-printer-fonts - diff --git a/hw/xprint/config/C/print/attributes/job b/hw/xprint/config/C/print/attributes/job deleted file mode 100644 index aa1911dcd..000000000 --- a/hw/xprint/config/C/print/attributes/job +++ /dev/null @@ -1,25 +0,0 @@ -# $Xorg: job,v 1.3 2000/08/17 19:48:03 cpqbld Exp $ -# Job DPA-Object initial attribute values - -# Attribute IDs must be qualified by using one of the following -# (listed in order of precedence): -# -# printer-name -# Set this attribute for a specific printer. -# Example: "laser_1.job-priority: 1" -# -# printer-model -# Set this attribute for all printers of a specific model. -# Example: "HPDJ1600C.job-priority: 1" -# -# '*' -# Set this attribute for all printers. -# Example: "*.job-priority: 1" - -*notification-profile: {} - -# EXAMPLES -# -# *job-name: Example Job Name -# *notification-profile: {{event-report-job-completed} electronic-mail} -# *xp-spooler-command-options: -onb diff --git a/hw/xprint/config/C/print/attributes/printer b/hw/xprint/config/C/print/attributes/printer deleted file mode 100644 index 41e13b44b..000000000 --- a/hw/xprint/config/C/print/attributes/printer +++ /dev/null @@ -1,96 +0,0 @@ -# $Xorg: printer,v 1.3 2000/08/17 19:48:03 cpqbld Exp $ -# Printer DPA-Object initial attribute values - -# Attribute IDs must be qualified by using one of the following -# (listed in order of precedence): -# -# printer-name -# Set this attribute for a specific printer. -# Example: "dj_1.document-formats-ready: {pcl 5}" -# -# printer-model -# Set this attribute for all printers of a specific model. -# Example: "HPDJ1600C.document-formats-ready: {pcl 5}" -# -# '*' -# Set this attribute for all printers. -# Example: "*.document-formats-ready: {pcl 5}" - -# Remove this line and replace them with per printer settings -# if you want to use more than one DDX!! -*xp-model-identifier: PSdefault - - -# Sample entry for the "PSspooldir" model -# Just add a printer called "xp_ps_spooldir_tmp_Xprintjobs" to "Xprinters" -# and you will get an extra printer which files the PostScript jobs -# in the "/tmp/Xprintjobs/" directory. -xp_ps_spooldir_tmp_Xprintjobs.xp-model-identifier: PSspooldir - -# Sample entry for the "PS2PDFspooldir-GS" model -# Just add a printer called "xp_pdf_spooldir_tmp_Xprintjobs" to "Xprinters" -# and you will get an extra printer which convertes the PostScript jobs -# to PDF using "ps2pdf" and files them into the "/tmp/Xprintjobs/" directory. -# NOTE: Future versions of Xprint will use the PDF DDX instead directly -# instead of relying on GhostScript/ps2pdf... -xp_pdf_spooldir_tmp_Xprintjobs.xp-model-identifier: PS2PDFspooldir-GS - - -# IMPORTANT EXAMPLES -# -# The following are examples of how a printer name is bound -# to a model-config file and ddx driver. -# -# Warning: most X-Servers have a hard limit on the number of ddx -# drivers (ie, screens) they can support at runtime (usually 3 or -# 4). Whatever the number of printers, they cannot create a -# dependency for more than the limit on ddx drivers. Assuming -# "Xprinters" listed all four xp*pr printers below, X-Servers -# with a limit of 3 would not work. -# -# xppspr.xp-model-identifier: HPDJ1600C -# xppspr.xp-ddx-identifier: XP-POSTSCRIPT -# xppspr.document-formats-ready: { PostScript 2 } -# -# xppclpr.xp-model-identifier: HPDJ1600C -# xppclpr.xp-ddx-identifier: XP-PCL-COLOR -# xppclpr.document-formats-ready: { PCL 5 } -# -# xppclmonopr.xp-model-identifier: HPDJ1600C -# xppclmonopr.xp-ddx-identifier: XP-PCL-MONO -# xppclmonopr.document-formats-ready: { PCL 5 } -# -# xprasterpr.xp-model-identifier: HPDJ1600C -# xprasterpr.xp-ddx-identifier: XP-RASTER - - -# MORE EXAMPLES of items often configured in this file -# -# *descriptor: This printer has not been given a name -# *dt-pdm-command: dtpdm -# *input-trays-medium: {top na-letter} {bottom iso-a4} -# *xp-model-identifier: HPDJ1600C -# *xp-spooler-command: /opt/mystuff/bin/mylp -p %printer-name% -c %copy-count% \ -# -j %job-name% -o %options% - - -# USUALLY SET BY THE ddx driver -# -# *content-orientations-supported: portrait landscape reverse-portrait reverse-landscape - - -# USUALLY SET BY THE model-config FILE -# -# *document-formats-supported: {PCL 5} -# *medium-source-sizes-supported: \ -# { top {iso-a4 FALSE {10 200 10 287}} {iso-a5 FALSE {10 138 10 200}} } \ -# { bottom {iso-a4 FALSE {10 200 10 287}} {iso-a5 FALSE {10 138 10 200}} } -# *plexes-supported: simplex duplex tumble -# *printer-model: Hewlett-Packard LaserJet IV -# *printer-resolutions-supported: 300 -# *xp-ddx-identifier: XP-PCL-COLOR -# *xp-embedded-formats-supported: {PCL 5} {HPGL 2} -# *xp-listfonts-modes-supported: xp-list-internal-printer-fonts -# *xp-raw-formats-supported: {PCL 5} -# *xp-setup-proviso: xp-setup-optional - diff --git a/hw/xprint/config/C/print/ddx-config/Makefile.am b/hw/xprint/config/C/print/ddx-config/Makefile.am deleted file mode 100644 index 907edca75..000000000 --- a/hw/xprint/config/C/print/ddx-config/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -SUBDIRS = raster diff --git a/hw/xprint/config/C/print/ddx-config/raster/Makefile.am b/hw/xprint/config/C/print/ddx-config/raster/Makefile.am deleted file mode 100644 index 79bfb59df..000000000 --- a/hw/xprint/config/C/print/ddx-config/raster/Makefile.am +++ /dev/null @@ -1,3 +0,0 @@ -xpcdir = @xpconfigdir@/C/print/ddx-config/raster - -dist_xpc_DATA = pcl postscript diff --git a/hw/xprint/config/C/print/ddx-config/raster/pcl b/hw/xprint/config/C/print/ddx-config/raster/pcl deleted file mode 100644 index 15d33e7b3..000000000 --- a/hw/xprint/config/C/print/ddx-config/raster/pcl +++ /dev/null @@ -1,39 +0,0 @@ -# $Xorg: pcl,v 1.3 2000/08/17 19:48:03 cpqbld Exp $ -# This is the file which you should customize to include the printers that -# will print through the raster driver. The early part of this file -# specifies some commn useful defaults. You can override them when -# you list your printers in the second part of this file. This file is -# an X Resource file. To learn more about this file format, consult -# the functional specification. - -# Note that the reference printer for CDEnext is the HP DeskJet 1600C. -# This driver may work for other printers, but the reference printer -# is the only officially supported printer. - - -# DEFAULTS -# ======== - -# The attributes below apply to all printers unless the section below -# specifies something different for the printer. - -# Default printer attributes -# -------------------------- -# Printer attributes control the choices that users will see in the -# setup dialog for those printers. - -# The attributes below apply to all printes unless the section below -# specifies something different for the printer. - -*.media-ready: na-letter-white -*.descriptor: Printer supported by CDEnext DtPrint System. -*.printer-model: HPDJ1600C - -# Printer Specifics - -# Use this section to override the defaults listed above or to override the -# printer attributes described in the model file. -# The lines describing "laser" are just a sample to help you get started. - -# laser.printer-name: laser -# laser.spooler-name: laser diff --git a/hw/xprint/config/C/print/ddx-config/raster/postscript b/hw/xprint/config/C/print/ddx-config/raster/postscript deleted file mode 100644 index e69de29bb..000000000 diff --git a/hw/xprint/config/C/print/models/CANONBJ10E-GS/Makefile.am b/hw/xprint/config/C/print/models/CANONBJ10E-GS/Makefile.am deleted file mode 100644 index 951b9af97..000000000 --- a/hw/xprint/config/C/print/models/CANONBJ10E-GS/Makefile.am +++ /dev/null @@ -1,3 +0,0 @@ -xpcdir = @xpconfigdir@/C/print/models/CANONBJ10E-GS - -dist_xpc_DATA = model-config diff --git a/hw/xprint/config/C/print/models/CANONBJ10E-GS/model-config b/hw/xprint/config/C/print/models/CANONBJ10E-GS/model-config deleted file mode 100644 index 97bfd8196..000000000 --- a/hw/xprint/config/C/print/models/CANONBJ10E-GS/model-config +++ /dev/null @@ -1,23 +0,0 @@ -# $Xprint.org: CANONBJ10E-GS model-config,v 1.4 2003/02/10 14:48:04 gisburn Exp $ - -*content-orientations-supported: portrait landscape -*descriptor: Canon BJ-10e (GhostScript) -*document-formats-supported: {POSTSCRIPT 2} -*input-trays-supported: -*medium-source-sizes-supported: \ -{ '' \ - {iso-b5 FALSE {6.35 169.65 6.35 243.65}}\ - {iso-a4 FALSE {6.35 203.65 6.35 290.65}}\ - {na-letter FALSE {6.35 209.55 6.35 273.05}}\ - {na-legal FALSE {6.35 209.55 6.35 349.25}}\ -} - -*plexes-supported: simplex -*printer-model: "Canon BJ-10e (GhostScript)" -*printer-resolutions-supported: 360 -*xp-ddx-identifier: XP-POSTSCRIPT -*xp-listfonts-modes-supported: xp-list-internal-printer-fonts xp-list-glyph-fonts -*xp-embedded-formats-supported: {POSTSCRIPT 2} -*xp-raw-formats-supported: {POSTSCRIPT 2} -*xp-setup-proviso: setup-optional -# EOF. diff --git a/hw/xprint/config/C/print/models/CANONC3200-PS/Makefile.am b/hw/xprint/config/C/print/models/CANONC3200-PS/Makefile.am deleted file mode 100644 index 771b40864..000000000 --- a/hw/xprint/config/C/print/models/CANONC3200-PS/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -SUBDIRS = fonts - -xpcdir = @xpconfigdir@/C/print/models/CANONC3200-PS - -dist_xpc_DATA = model-config diff --git a/hw/xprint/config/C/print/models/CANONC3200-PS/fonts/Makefile.am b/hw/xprint/config/C/print/models/CANONC3200-PS/fonts/Makefile.am deleted file mode 100644 index 7a7ecc31a..000000000 --- a/hw/xprint/config/C/print/models/CANONC3200-PS/fonts/Makefile.am +++ /dev/null @@ -1,54 +0,0 @@ -xpcdir = @xpconfigdir@/C/print/models/CANONC3200-PS/fonts - -parentdir = ../../PSdefault/fonts - -XPFONTS = \ - AvantGarde-Book.pmf \ - AvantGarde-BookOblique.pmf \ - AvantGarde-Demi.pmf \ - AvantGarde-DemiOblique.pmf \ - Courier-Bold.pmf \ - Courier-BoldOblique.pmf \ - Courier-Oblique.pmf \ - Courier.pmf \ - Helvetica-Bold.pmf \ - Helvetica-BoldOblique.pmf \ - Helvetica-Oblique.pmf \ - Helvetica.pmf \ - LubalinGraph-Book.pmf \ - LubalinGraph-BookOblique.pmf \ - LubalinGraph-Demi.pmf \ - LubalinGraph-DemiOblique.pmf \ - NewCentSchlbk-Bold.pmf \ - NewCentSchlbk-BoldItal.pmf \ - NewCentSchlbk-Ital.pmf \ - NewCentSchlbk-Roman.pmf \ - Souvenir-Demi.pmf \ - Souvenir-DemiItalic.pmf \ - Souvenir-Light.pmf \ - Souvenir-LightItalic.pmf \ - Symbol.pmf \ - Times-Bold.pmf \ - Times-BoldItalic.pmf \ - Times-Italic.pmf \ - Times-Roman.pmf \ - ZapfDingbats.pmf - -dest = $(DESTDIR)$(xpcdir) - -remove-stuff: - for x in $(XPFONTS) ; do \ - rm -f $(dest)/$$x ; \ - done - - @rm -f $(dest)/fonts.dir - -install-data-hook: remove-stuff - mkdir -p $(dest) ; \ - for x in $(XPFONTS) ; do \ - ln -s $(parentdir)/$$x $(dest)/$$x ; \ - done - - $(MKFONTSCALE) -b -s -l $(dest) - -uninstall-hook: remove-stuff diff --git a/hw/xprint/config/C/print/models/CANONC3200-PS/model-config b/hw/xprint/config/C/print/models/CANONC3200-PS/model-config deleted file mode 100644 index cdb3f4958..000000000 --- a/hw/xprint/config/C/print/models/CANONC3200-PS/model-config +++ /dev/null @@ -1,40 +0,0 @@ -# $Xprint.org: CANONC3200-PS model-config,v 1.1 2004/06/24 09:18:04 gisburn Exp $ -# model-config for the PostScript DDX -# -# automatically generated by xpppdtomodelconfig V0.1 -# -# DO NOT MODIFY THIS FILE!! -# -# Attributes supported for this printer model -*content-orientations-supported: portrait landscape reverse-portrait reverse-landscape -*descriptor: Canon iR C3200 -*document-formats-supported: {POSTSCRIPT 2} -*input-trays-supported: -*medium-source-sizes-supported: \ -{ '' \ - {iso-a4 FALSE {4.002 206 4.002 293}}\ - {na-letter FALSE {4.002 211.9 4.002 275.4}}\ - {na-legal FALSE {4.002 211.9 4.002 351.6}}\ - {iso-a3 FALSE {4.002 293 4.002 416}}\ - {iso-a5 FALSE {4.002 144 4.002 206}}\ - {iso-b4 FALSE {4.002 246 4.002 349}}\ - {iso-b5 FALSE {4.002 172 4.002 246}}\ - {executive FALSE {4.002 180.1 4.002 262.7}}\ - {invoice FALSE {4.002 135.7 4.002 211.9}}\ - {monarch-envelope FALSE {4.002 94.3 4.002 186.5}}\ - {na-number-10-envelop FALSE {4.002 100.8 4.002 237.3}}\ - {iso-c5 FALSE {4.002 158 4.002 225}}\ -} - -*plexes-supported: simplex duplex tumble -*printer-model: "Canon iR C3200" -*printer-resolutions-supported: 600 -*xp-ddx-identifier: XP-POSTSCRIPT -*xp-listfonts-modes-supported: xp-list-internal-printer-fonts xp-list-glyph-fonts -*xp-embedded-formats-supported: {POSTSCRIPT 2} -*xp-raw-formats-supported: {POSTSCRIPT 2} -*xp-setup-proviso: setup-optional -# NOTE: xp-psddx-* attributes are EXPERIMENTAL for now. -*xp-psddx-download-fonts: pfa pfb ttf ttc otf otc -*xp-psddx-download-font-type: pstype1 -# EOF. diff --git a/hw/xprint/config/C/print/models/GSdefault/Makefile.am b/hw/xprint/config/C/print/models/GSdefault/Makefile.am deleted file mode 100644 index be0426c76..000000000 --- a/hw/xprint/config/C/print/models/GSdefault/Makefile.am +++ /dev/null @@ -1,3 +0,0 @@ -xpcdir = @xpconfigdir@/C/print/models/GSdefault - -dist_xpc_DATA = model-config diff --git a/hw/xprint/config/C/print/models/GSdefault/model-config b/hw/xprint/config/C/print/models/GSdefault/model-config deleted file mode 100644 index 61dac18b8..000000000 --- a/hw/xprint/config/C/print/models/GSdefault/model-config +++ /dev/null @@ -1,137 +0,0 @@ -# $Xprint.org: GSdefault model-config,v 1.1 2003/02/10 14:48:04 gisburn Exp $ -# Generic default model-config for the PostScript DDX when using GhostScript -# as printer driver -# -# DO NOT MODIFY THIS FILE!! -# -# If you want to make customisations for your printer create a copy -# of this printer model. -# Example (for creating a model config "MYCOMPANYlaserxx"): -# 1. Create model config dir: -# % mkdir MYCOMPANYlaserxx -# 2. Link (or copy) the PMF (printer font metrics) for the -# printer buildin fonts: -# % ln -s GSdefault/fonts MYCOMPANYlaserxx/. -# 3. Copy the model config file: -# % cp GSdefault/model-config MYCOMPANYlaserxx/. -# 4. Customize MYCOMPANYlaserxx/model-config to match your needs. -# - -# Attributes supported for this printer model -# You may want to cut the lists here down to the attributes supported -# by your printer. -*content-orientations-supported: portrait landscape reverse-portrait reverse-landscape -*descriptor: GhostScript default model -*document-formats-supported: {POSTSCRIPT 2} -*input-trays-supported: -*medium-source-sizes-supported: \ -{ '' \ - {na-letter FALSE {6.35 209.55 6.35 273.05}}\ - {na-legal FALSE {6.35 209.55 6.35 349.25}}\ - {executive FALSE {6.35 177.80 6.35 260.35}}\ - {folio FALSE {6.35 204.47 6.35 323.85}}\ - {invoice FALSE {6.35 133.35 6.35 209.55}}\ - {ledger FALSE {6.35 273.05 6.35 425.45}}\ - {quarto FALSE {6.35 209.55 6.35 268.732}}\ - {a FALSE {6.35 209.55 6.35 273.05}}\ - {b FALSE {6.35 273.05 6.35 425.45}}\ - {c FALSE {6.35 425.45 6.35 552.45}}\ - {d FALSE {6.35 552.45 6.35 857.25}}\ - {e FALSE {6.35 857.25 6.35 1111.25}}\ - {na-6x9-envelope FALSE {6.35 146.05 6.35 222.25}}\ - {na-10x15-envelope FALSE {6.35 247.65 6.35 374.65}}\ - {monarch-envelope FALSE {6.35 91.948 6.35 184.15}}\ - {na-10x13-envelope FALSE {6.35 247.65 6.35 323.85}}\ - {na-9x12-envelope FALSE {6.35 222.25 6.35 298.45}}\ - {na-number-10-envelope FALSE {6.35 98.425 6.35 234.95}}\ - {na-7x9-envelope FALSE {6.35 171.45 6.35 222.25}}\ - {na-9x11-envelope FALSE {6.35 222.25 6.35 273.05}}\ - {na-10x14-envelope FALSE {6.35 247.65 6.35 349.25}}\ - {na-number-9-envelope FALSE {6.35 92.075 6.35 219.075}}\ - {iso-a0 FALSE {6.35 834.65 6.35 1182.65}}\ - {iso-a1 FALSE {6.35 587.65 6.35 834.65}}\ - {iso-a2 FALSE {6.35 413.65 6.35 587.65}}\ - {iso-a3 FALSE {6.35 290.65 6.35 413.65}}\ - {iso-a4 FALSE {6.35 203.65 6.35 290.65}}\ - {iso-a5 FALSE {6.35 141.65 6.35 203.65}}\ - {iso-a6 FALSE {6.35 98.65 6.35 141.65}}\ - {iso-a7 FALSE {6.35 67.65 6.35 98.65}}\ - {iso-a8 FALSE {6.35 45.65 6.35 67.65}}\ - {iso-a9 FALSE {6.35 30.65 6.35 45.65}}\ - {iso-a10 FALSE {6.35 19.65 6.35 30.65}}\ - {iso-b1 FALSE {6.35 700.65 6.35 993.65}}\ - {iso-b2 FALSE {6.35 493.65 6.35 700.65}}\ - {iso-b3 FALSE {6.35 346.65 6.35 493.65}}\ - {iso-b4 FALSE {6.35 243.65 6.35 346.65}}\ - {iso-b5 FALSE {6.35 169.65 6.35 243.65}}\ - {iso-b6 FALSE {6.35 118.65 6.35 169.65}}\ - {iso-b7 FALSE {6.35 81.65 6.35 118.65}}\ - {iso-b8 FALSE {6.35 55.65 6.35 81.65}}\ - {iso-b9 FALSE {6.35 37.65 6.35 55.65}}\ - {iso-b10 FALSE {6.35 24.65 6.35 37.65}}\ - {jis-b1 FALSE {6.35 721.65 6.35 1023.65}}\ - {jis-b2 FALSE {6.35 508.65 6.35 721.65}}\ - {jis-b3 FALSE {6.35 357.65 6.35 508.65}}\ - {jis-b4 FALSE {6.35 250.65 6.35 357.65}}\ - {jis-b5 FALSE {6.35 175.65 6.35 250.65}}\ - {jis-b6 FALSE {6.35 121.65 6.35 175.65}}\ - {jis-b7 FALSE {6.35 84.65 6.35 121.65}}\ - {jis-b8 FALSE {6.35 57.65 6.35 84.65}}\ - {jis-b9 FALSE {6.35 38.65 6.35 57.65}}\ - {jis-b10 FALSE {6.35 25.65 6.35 38.65}}\ - {iso-c3 FALSE {6.35 317.65 6.35 451.65}}\ - {iso-c4 FALSE {6.35 222.65 6.35 317.65}}\ - {iso-c5 FALSE {6.35 155.65 6.35 222.65}}\ - {iso-c6 FALSE {6.35 107.65 6.35 155.65}}\ - {iso-designated-long FALSE {6.35 103.65 6.35 213.65}}\ - {hp-2x-postcard FALSE {6.35 141.65 6.35 193.65}}\ - {hp-european-edp FALSE {6.35 298.45 6.35 349.25}}\ - {hp-mini FALSE {6.35 133.35 6.35 209.55}}\ - {hp-postcard FALSE {6.35 93.65 6.35 141.65}}\ - {hp-tabloid FALSE {6.35 273.05 6.35 425.45}}\ - {hp-us-edp FALSE {6.35 273.05 6.35 349.25}}\ - {hp-us-government-legal FALSE {6.35 196.85 6.35 323.85}}\ - {hp-us-government-letter FALSE {6.35 196.85 6.35 247.65}}\ -} -# If you have more than one tray use the following example: -# 1. List the supported trays -#*input-trays-supported: main manual -# 2. Define each tray and it's paper sizes -#*medium-source-sizes-supported: \ -#{ main \ -# {na-letter FALSE {6.35 209.55 6.35 273.05}} \ -# {na-legal FALSE {6.35 209.55 6.35 349.25}} \ -# {iso-a4 FALSE {6.35 203.65 6.35 290.65}} \ -#} \ -#{ manual \ -# {iso-a5 FALSE {6.35 141.65 6.35 203.65}} \ -# {iso-c5 FALSE {6.35 155.65 6.35 222.65}} \ -# {iso-designated-long FALSE {6.35 103.65 6.35 213.65}} \ -# {jis-b5 FALSE {6.35 175.65 6.35 250.65}} \ -# {monarch-envelope FALSE {6.35 91.948 6.35 184.15}} \ -# {na-legal FALSE {6.35 209.55 6.35 349.25}} \ -# {na-number-10-envelope FALSE {6.35 98.425 6.35 234.95}} \ -# {executive FALSE {6.35 177.8 6.35 260.35}} \ -# {iso-a3 FALSE {6.35 290.65 6.35 413.65}} \ -# {iso-a0 FALSE {6.35 834.65 6.35 1182.65}} \ -#} -*plexes-supported: simplex duplex tumble -*printer-model: "GhostScript default model" -# 75, 100, 120, 150, 180, 200, 240, 300, 360, 400, 600, 720, -# 940, 1200 and 2440 are supported DPI values, we limit it here -# to some common values: -*printer-resolutions-supported: 300 360 400 600 -*xp-ddx-identifier: XP-POSTSCRIPT -*xp-listfonts-modes-supported: xp-list-internal-printer-fonts xp-list-glyph-fonts -*xp-embedded-formats-supported: {POSTSCRIPT 2} -*xp-raw-formats-supported: {POSTSCRIPT 2} -*xp-setup-proviso: setup-optional - -# NOTE: xp-psddx-* attributes are EXPERIMENTAL for now. -# xp-psddx-download-fonts defines which fonts should be downloaded as outlines -# (valid types are "pfa", "pfb", "ttf", "ttc", "otf", "otc") -*xp-psddx-download-fonts: pfa pfb ttf ttc otf otc -# xp-psddx-download-font-type defines which font type is used to download outlines -# (valid values are "bitmap", "pstype1" and "pstype3") -*xp-psddx-download-font-type: pstype1 -# EOF. diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/Makefile.am b/hw/xprint/config/C/print/models/HPDJ1600C/Makefile.am deleted file mode 100644 index 1c8b3b5c6..000000000 --- a/hw/xprint/config/C/print/models/HPDJ1600C/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -SUBDIRS = fonts - -xpcdir = @xpconfigdir@/C/print/models/HPDJ1600C - -dist_xpc_DATA = model-config diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00051.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00051.pmf deleted file mode 100644 index 09cc489a5e153c8c3e5fcf2fbbb021ecc2f1ba59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5740 zcmdUzd2kd}9>>2uxkDzC%tbOGFbStD6Os^O0<17(1~M2XVP--SL?WjkM<9TR3Lc<{ z2y%#WqaX-IM1*juC>G_e$GYlPt)3@Lg6mjtknuaqPqqN} z>i6&Pex{W-%qQxfKn6H9P1%Xawi9`Eh#+!EPa%qlSBRk`AVdurBgAwvgX9MJHJ>D% z;MZayzTnp?Lu{ciALZ9>QEDIAPj;N+*Kv{Z0r^;nv*b(S5{>>ytRaRae#u==VTP*y zV54v`1<4dSygHXt^kOEZfGiR}xhYnP6t=7!6oP>%?+ft>$J9k($|V)do6<~iGi&~F zIK@n+D90&8FXZT(Rt~AG4*EiMD61S^RXsH1tttqGvbfpCO9nKHYfq@-_Y+YkO=S*1^uEI^sJs=i!y1GR=2Qpqs9;W9saA+^u1 z-Dv&Ah-$A-Z%X_OPxMH6jM4F29uZHYN9(=EQ*wPtp{KBKem=j7^sg#UQDIR@zDEz! zQvjcTh_|{TQZIUfsR=*D#HQM79%&3B3x-V2L0hM2Ot~?1Z6C8|BBVAeR9|9o8r4mUvX3P z{K<3H0VKYjTb=t&?&3tTovz_y*2=slE@Fp>kEtkmSxPha<^<|LrhRRD(N%no8w(em zNzNA629d6ux1Vyhbm$pFZ^0+-mYgO%y}~`RQ;xH@$P-ha6cP1^vZl?JUg_Ok#c_MD z)Umf&C$Y}r@A?Aqe{!A9X|i`#F97QP7i;u&7gu*?L&S9Dh1%dT!7z>=E&Ax=!XarJuO8@yc}N zxMh3VVtw4|+-q~1vZlr?U_IGct6k4){W5iPuFL46_i=vvbs2xqW0;az)t0ByKHC0+ zo_~d{Ow5;PS6P#JjCr(}OEULneXr*k)h^9kqv_TU%p)uVIWGs;mqgc*%qe=FO50|m z9(A{S73WvhskXSzWS44MnVfyFQ;uH$2uF=`fSz9K?kv*ds#&KaGu#&cr|F%o)3p5R zK4*W&dcCcz%;hpRF@^=MKf6-&wzlN7wza#$^>|zQp!VmCdBF$HCk$txK?)nbIwyQg>m$&>gP5I4oru`PX6+J^M*)@^c~L~Iv0w)|(r&-t`a z+F~soAKK>IBTQ$^IG659e@jbO-!*?D_m0T_jcta_V%-*>%DG6k&6W9?tSCtxl6z+P zM3&Zjl4^w(`$EZbe91A<+PajKk=)bJ*@rtWWc{LSyls{}qG`Nq&$s`ewW~O6heW!l z2m5W+hE}YpucvO(^M7rANoq09e>1;t{@Ll1@weE9G5-y64QE*Y!I*ClZK++e24{`X z^-jlUj`f;ueZ$r)^2oMe*=aecrJD{}tYZ8V{s|=PPnwh7J@cp-Thnuv1S386jPpaFI*WsnF?DOoAw8nUrjs3;ejs0B}$A?1AThbFR z@YySIl7;J>FllkK$Vm+p0c!JX`j^ee5- zt81+uRr;0QmuR2Nb?lU$$+jRp$2CT@dv%@hW>lVGQTlVK@63F_m7;lq;a6hKXdb24 zFa7FQwX9RM2#;bOeiS7o+t96h+AV0)eNs%+!$cmr+@O#{Vfjr)MF&Jg=!H*$4 zk(DEWVYm?$7>*z+`Q$$WA%wxlUyS5Itrm3{g_|%MH)9Oy)&KE>TQC;mFrF)FA|~Nh zOvV)4hN+mwv)~LgU?yhqoHHA9Fc-ID9*?l|xijv<-B^HyxCi&*KHQH*JR?4U2eAYX zVJRNQGCYFiSb;~el846CScAu~7LVfztiyV2z(#DsW^BP$Jc*~U4cqZFc3>x-!7l8^ zvuMI|*n{V>7ccO1`65r32hfazIE2GEf}?l|FXI&)!>jsy0P}fk6=fIvRhAK2nYX}b+h|ve!L@C}HcrYxh+y(;@D=40Lh4XzeNT$xGyA@(MXdUL~)Q|Lc$Wis*m)ebB!E@$?Fi diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00052.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00052.pmf deleted file mode 100644 index b21a9a2a821b34c6a9e3a364dda834c8150391dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5736 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 diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00054.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00054.pmf deleted file mode 100644 index 524934c71aacdb42ee6e1d669595f83249fcbe20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5744 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 diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00055.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00055.pmf deleted file mode 100644 index 2ef9bc52ce15236fa7c95142da663926ef95a08a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5740 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 diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00057.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00057.pmf deleted file mode 100644 index 3833d4f54e3d235a53e6b04bcf88144f6132c889..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5632 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 E8&*!g{r~^~ diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00061.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00061.pmf deleted file mode 100644 index fb2b5a433f16e5c49d6dfe4377230cde59a44654..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5720 zcmeI0d2kcg9ml_tY>W-EEbYqJKvHof5RhXT8|**=LR#AbTQZVtW8%czM}XMa+>k&x z3<(hK`v~C%5$tw{i2AZD_~1We)87`-3HYg!z@pZb5(L|_JQ9MSuqGvQn&?5+RL z^kEAyD|&x{_mwu@&`;z)jC4%ZH06(o`s}8>+C?GSkWND6kf(&`P5KB?Ldu00K}M3c zex7Pc;`=e6|98Z( zkmYNFhK8FHC?r~tMA4F0IYQBa$qi4CiQ+E@#cW|&N_GozjGPzZBHOe%g;6HrF(SFq z$DF?{rl_RF@E%1Ch1&YY8To-yzc*L`PoTJ@v>@m%DfD@e?=JQgRaE)i#R@#t6Kh8g zuSL1yD<}+Wwm#Kkhaptt_J`RrAthYy^M(txzx>s;;|7m~+v}|gg)52_&59D=0HvrZ zUhEIW?+JKCN*6rtlBzFr&evJGq-zgmNP3SGn1$6=&9J5la=SnbVkePbiu3SyGx70 zRiX+g@f205&sUqfRmV(!tB!SpCPmGcPZUQopZ%sp1ZW0v?|id0jKJ zvs|v6tjz3Oc3nwDP;|~+<#6TYxiTD$OU#>KNg(JJt)1a;7Zo|wG$9AuT?v*c-V7!$ zE*7m3t(!yC&Ea(9bftCGURyW1`bCE;BP$~d>_a739te8%?%^;}f<->RQdJTN z`NUILX5AF#sOsleLLpW?6!!VmQmAuP3`sE>#Vm+UfK3hQV&vX(ULVWJb|tk?jED{zGo2+c$^a_F&o5@kZ-P+Bhp5^$e44*@`2Dd4{%2Gw*}=$s@w1}U|MNiL;YAB zr@!Hl?YJDVy9{0Ef#Dlk{v1~2P%V>9t{Ec&M?d3>|PvRJ3Ov9`N zEJLEOo3d@Gs%Bk`Q&Wz`bY;qV-N)##HjCL$SZm~nyg^Mn#hMZG86ncr&cjq-9iiJz z)2-RM*2-hPEYh;fESveVD6?^GBHECgQn<9+Di>7p1u||4S0{kNWJf-PE=5QK^fr4a4NNG5?FwXS&^# zU{(7?&Hs|DsCJgYkR<(B_c831y6YN=^6r?PB!3d~&z0)*{0-mPSjT92@}x1s9`|?V zIZL{(+l}*W#WDYW(qP?=W%4>b&xXIrr*(V7XY!}I#;+xg4K071lfKloae=L!t`o0V zo%*;kuC{fHjg4tZ=XJZO#yXbv!mq>&mm^-xBQba43sPRv?S`9DIs2$o?Uy{s%)ag` zv@uDHbIop;DTiYA&QdSkZu-!+T(yh7vr2yw_9g-9ZgNlEuC;%vc-_KyEqM~l)>QS` zDgE|dA3m2y!(=!Vtuu9d+~X;88FOvY^#rK zAG3WD@eSM4BaNhe^X+C#@Tn|vQs=4m+_cLHN1679wU+iIV>bJ@-ooD~6QSPW5+(WfRJG4g!Jch^75uNY^ zI-?7m$iS1xH7>H+4iRbVw1A{OaLok$E#o^rPjl?L7#tRsOu^7i5 zu0{>Ub8AzF37CjUn9S|!R7}Hk%-|02Wz57Zyn@-7gSnW8dd$ZHyvi-%LM*~!ypAPU zie*@i6b^ohjoW7zx2x2u4FN9%|p19K5z6 zZAm-Qo^W--_y|Twev%@c2*2boQgW3^oFs!hNivCxWRb3ft2*@q6<1S?pkNFIqbNUE zkshQcd73;!dXe75P5KZI@e+mPlLAsmd_=6d`;j72O#DQ=Ik+MdyE(>PF!J&f8xd>r zGEzI5|O1l2ha~d5649&XBX@9QmI<%v$LU+U3FDgZ>49 CSC+B> diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00062.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00062.pmf deleted file mode 100644 index f0e58c43548dfc2d2a7b436c9050ec4d22b2fbfe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5728 zcmeI0dvH|M9ml`Bcb5%>kjLJ;yAWts6a;i*vLuk8BJ1vwtR%Z(cM}MpE3Zft3?w2V zJ`fR*H_Ag4MFAhUz7U@X2%}T`hqOLwwRKuMQ|p7Vb*xTA#irkL&pk`pnc6A+!|6=# zD@oKm3XYuNH0Q@t5&+82==Z)XGe}fs< zGUGV)JM&K~1eRL&uk(IZ32&HAls}70L}h>J-?h$Lwd zVh(8|gX271Lwdi;)6GJB#?x9Qwo?=w;AxM@^%!}A{6d@#ipVkYju0P_Pl&skr!Psr zk9j&t{H3g49=f}`_#B(T2>MVARRh-@a03Bjk^UK8R?_GuA? z-ABe++3g9Ie4>Go8I0JDQd~=6_P%}D_(W4Yl59aZ(a_jbn+!G9#ljdLYKYahWa6QQ zD8lUvJKAPH5GZ{T@T6)|d)ffuL;}YDH=+p z65&_`H6zO_gB2B36*X1We0_~AN%4YCDSt&xO|Z=0v(CIpHYSoG(cfkMP<_4M%#-r7 z=cCEyXrzqU8yZA^SgrHNu9-f!ZKglquNhfWRdK$*d3Hx}iin3r?5PXl(<`FO?I)k?1ZG z6X2V`pQi))8-3sE*@0v8IOAp*m0Qtv|69fcv_@)RO;XB*^*A7`@CFesJ!_b^_!V~j5dvFnhT;z zJHK_aO!tm&XnKz2?m9i&@9pj{0O!sEo1S$HcW~* zzem%vzI+D_!+C{!v7XiYh`6@5#AVi>ZLuG6-(tq8wGkzkFFjJ*D&N3S0DS-|xk9oxd$SA+)HoR$cU^o-O#Dczd#4 z`L>g^9!I3OTg6>N-CI;S+6~5b_S+!{FPotMUOm@#lYUfb?YQSbmEPtscB{DUxM!)- z_O#cL(_O}&a_J{~Z&YzDY>ZRd9`ydw)U3bldvB+T+dkAkQySxa9XWl}*Q&G@GdeY1+&Uooyy=^eG+{wnV1@Wo6m-d&fkO~thjeYtkodV9Sp z?%3-+sI>i6BcOEeZ;gp+T)B=F{aTF;E#8m)CdZy@qrQ#$#OLRUx60aZ9*Mc*+F1O# ziraU(nZB?|yi@$l=)99i z?0*^8rWPOLvlf_Xb`&%2SzxAl(#Yh}lovm*G|n-`nB|KMU+I-fYa{h{)N{K>>z}A+ z*}J{ToW9A!{$bsCXiM}VD!ub#_i^@Hwb`yUZq}Lqc18auym3=Az5R9Xn@ZyY�VU z?R5$*>a5+Y&s6ceezA^jxv-0$9^Ugv!~HwMh-`hMej zhQ8q~`B}S?TdQR!%RMf`1dN!vy zew6l{$@loWOd~vMfXHd(9Y}ZMakpomdKb#CM4hEa$#Q;J%QB@$$@J8@`cS{3>Lb(0 z^gaC$rbo$oN{?bWVr&Pka-^2!nA-EA*)ADpKeJ3~>phC^TiAzs7KwhwHpWfAl4bs| zw#qU6O18zm-&3mk$97E2Yw0c0b37-+bL~6j*s%0AF;1kGb4P07Q6BA-_O=Uc>k__X zd6DH;qW?A1qhvYM=GYVI|0zx%lV#GQOg|KD*QQ$OrIz(EwVYFCno5J?-21jD6JJ^N z6lqM4vYz`d^{IAQ>CJXIwz{YAf8}$3`xX1dXMDhRO*QLm`ju7YnjURgBfY&x8nYaj ze&snK{HnW1H+@@ZE3OG`eh2x{E!qMO*Vgr9I_<>y*zFwVqT7=ocV8^bUhBXADRMF3?u59R#y4q_xKxzrkk z(WpiZ#^8KhfD17e7hxPiTziEPK@{Uri#o(`2_~SPANz46(1?j#lBK|pUo>M9CZh#Y zFcs5qDK0~%`@cMJIi_OT+HSEH5k%AFx|Tgl05FXAF%8;CnhVvmJR2YQ{HM*Vo@t`a>D zbUo1bxLHGVA~t2XqeKS;JrHz3&<8;$1icV+L(mW9UX!2KGss|aCOL}?Aw$X8WEdGv zMv!v|cXsHOpkIQH$*n6=L4sr?;TM~^Q8kL!(M0SY)sQjdd~yM~kcjUR@wGXQgviAt zOd^E;8R@T}!-5_Qx-96k{GuWCq=Cdqg7Axst}C~~QoN>#_^xgylgMP!LZ*0rC<#NDh(1g#Qt6g#1q*1+w-wdHMJIL4OBAXu3oI diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00063.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00063.pmf deleted file mode 100644 index 8821ff155cf19791437784565ff2557b740a8121..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5728 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 Av;Y7A diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00065.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00065.pmf deleted file mode 100644 index d9a151d7f9d87d1b05f698dcec0b50051d8e9798..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5728 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 He-HX6nYKK4 diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00068.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00068.pmf deleted file mode 100644 index c20e39a219ac264dd9cbf72e7a44fc089d1b9f30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5732 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 Va)cZu$H@QnpXsLT|NHl#e*+9n`xyWL diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00069.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00069.pmf deleted file mode 100644 index 4a4a352811b4f7f9e7516a20771eccd0ea5aaa46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5740 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 BO49%U diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00072.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00072.pmf deleted file mode 100644 index 5415c3f446e8210461d25880ffdc71b4231294b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5724 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
    jPhV$ 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 Rd6WEKUrE2J{eS*F=wIh*{{;X5 diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00093.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00093.pmf deleted file mode 100644 index c85f3b4de9d69ff0d63e97fffd961a57fdb543df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5728 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 diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00094.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00094.pmf deleted file mode 100644 index 875bf1df8f3dc2320416710123261876b146d890..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5728 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 diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00052.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00052.pmf deleted file mode 100644 index b21a9a2a821b34c6a9e3a364dda834c8150391dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5736 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 diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00054.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00054.pmf deleted file mode 100644 index 524934c71aacdb42ee6e1d669595f83249fcbe20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5744 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 diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00055.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00055.pmf deleted file mode 100644 index 2ef9bc52ce15236fa7c95142da663926ef95a08a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5740 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 diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00057.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00057.pmf deleted file mode 100644 index 3833d4f54e3d235a53e6b04bcf88144f6132c889..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5632 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 E8&*!g{r~^~ diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00061.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00061.pmf deleted file mode 100644 index fb2b5a433f16e5c49d6dfe4377230cde59a44654..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5720 zcmeI0d2kcg9ml_tY>W-EEbYqJKvHof5RhXT8|**=LR#AbTQZVtW8%czM}XMa+>k&x z3<(hK`v~C%5$tw{i2AZD_~1We)87`-3HYg!z@pZb5(L|_JQ9MSuqGvQn&?5+RL z^kEAyD|&x{_mwu@&`;z)jC4%ZH06(o`s}8>+C?GSkWND6kf(&`P5KB?Ldu00K}M3c zex7Pc;`=e6|98Z( zkmYNFhK8FHC?r~tMA4F0IYQBa$qi4CiQ+E@#cW|&N_GozjGPzZBHOe%g;6HrF(SFq z$DF?{rl_RF@E%1Ch1&YY8To-yzc*L`PoTJ@v>@m%DfD@e?=JQgRaE)i#R@#t6Kh8g zuSL1yD<}+Wwm#Kkhaptt_J`RrAthYy^M(txzx>s;;|7m~+v}|gg)52_&59D=0HvrZ zUhEIW?+JKCN*6rtlBzFr&evJGq-zgmNP3SGn1$6=&9J5la=SnbVkePbiu3SyGx70 zRiX+g@f205&sUqfRmV(!tB!SpCPmGcPZUQopZ%sp1ZW0v?|id0jKJ zvs|v6tjz3Oc3nwDP;|~+<#6TYxiTD$OU#>KNg(JJt)1a;7Zo|wG$9AuT?v*c-V7!$ zE*7m3t(!yC&Ea(9bftCGURyW1`bCE;BP$~d>_a739te8%?%^;}f<->RQdJTN z`NUILX5AF#sOsleLLpW?6!!VmQmAuP3`sE>#Vm+UfK3hQV&vX(ULVWJb|tk?jED{zGo2+c$^a_F&o5@kZ-P+Bhp5^$e44*@`2Dd4{%2Gw*}=$s@w1}U|MNiL;YAB zr@!Hl?YJDVy9{0Ef#Dlk{v1~2P%V>9t{Ec&M?d3>|PvRJ3Ov9`N zEJLEOo3d@Gs%Bk`Q&Wz`bY;qV-N)##HjCL$SZm~nyg^Mn#hMZG86ncr&cjq-9iiJz z)2-RM*2-hPEYh;fESveVD6?^GBHECgQn<9+Di>7p1u||4S0{kNWJf-PE=5QK^fr4a4NNG5?FwXS&^# zU{(7?&Hs|DsCJgYkR<(B_c831y6YN=^6r?PB!3d~&z0)*{0-mPSjT92@}x1s9`|?V zIZL{(+l}*W#WDYW(qP?=W%4>b&xXIrr*(V7XY!}I#;+xg4K071lfKloae=L!t`o0V zo%*;kuC{fHjg4tZ=XJZO#yXbv!mq>&mm^-xBQba43sPRv?S`9DIs2$o?Uy{s%)ag` zv@uDHbIop;DTiYA&QdSkZu-!+T(yh7vr2yw_9g-9ZgNlEuC;%vc-_KyEqM~l)>QS` zDgE|dA3m2y!(=!Vtuu9d+~X;88FOvY^#rK zAG3WD@eSM4BaNhe^X+C#@Tn|vQs=4m+_cLHN1679wU+iIV>bJ@-ooD~6QSPW5+(WfRJG4g!Jch^75uNY^ zI-?7m$iS1xH7>H+4iRbVw1A{OaLok$E#o^rPjl?L7#tRsOu^7i5 zu0{>Ub8AzF37CjUn9S|!R7}Hk%-|02Wz57Zyn@-7gSnW8dd$ZHyvi-%LM*~!ypAPU zie*@i6b^ohjoW7zx2x2u4FN9%|p19K5z6 zZAm-Qo^W--_y|Twev%@c2*2boQgW3^oFs!hNivCxWRb3ft2*@q6<1S?pkNFIqbNUE zkshQcd73;!dXe75P5KZI@e+mPlLAsmd_=6d`;j72O#DQ=Ik+MdyE(>PF!J&f8xd>r zGEzI5|O1l2ha~d5649&XBX@9QmI<%v$LU+U3FDgZ>49 CSC+B> diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00062.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00062.pmf deleted file mode 100644 index f0e58c43548dfc2d2a7b436c9050ec4d22b2fbfe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5728 zcmeI0dvH|M9ml`Bcb5%>kjLJ;yAWts6a;i*vLuk8BJ1vwtR%Z(cM}MpE3Zft3?w2V zJ`fR*H_Ag4MFAhUz7U@X2%}T`hqOLwwRKuMQ|p7Vb*xTA#irkL&pk`pnc6A+!|6=# zD@oKm3XYuNH0Q@t5&+82==Z)XGe}fs< zGUGV)JM&K~1eRL&uk(IZ32&HAls}70L}h>J-?h$Lwd zVh(8|gX271Lwdi;)6GJB#?x9Qwo?=w;AxM@^%!}A{6d@#ipVkYju0P_Pl&skr!Psr zk9j&t{H3g49=f}`_#B(T2>MVARRh-@a03Bjk^UK8R?_GuA? z-ABe++3g9Ie4>Go8I0JDQd~=6_P%}D_(W4Yl59aZ(a_jbn+!G9#ljdLYKYahWa6QQ zD8lUvJKAPH5GZ{T@T6)|d)ffuL;}YDH=+p z65&_`H6zO_gB2B36*X1We0_~AN%4YCDSt&xO|Z=0v(CIpHYSoG(cfkMP<_4M%#-r7 z=cCEyXrzqU8yZA^SgrHNu9-f!ZKglquNhfWRdK$*d3Hx}iin3r?5PXl(<`FO?I)k?1ZG z6X2V`pQi))8-3sE*@0v8IOAp*m0Qtv|69fcv_@)RO;XB*^*A7`@CFesJ!_b^_!V~j5dvFnhT;z zJHK_aO!tm&XnKz2?m9i&@9pj{0O!sEo1S$HcW~* zzem%vzI+D_!+C{!v7XiYh`6@5#AVi>ZLuG6-(tq8wGkzkFFjJ*D&N3S0DS-|xk9oxd$SA+)HoR$cU^o-O#Dczd#4 z`L>g^9!I3OTg6>N-CI;S+6~5b_S+!{FPotMUOm@#lYUfb?YQSbmEPtscB{DUxM!)- z_O#cL(_O}&a_J{~Z&YzDY>ZRd9`ydw)U3bldvB+T+dkAkQySxa9XWl}*Q&G@GdeY1+&Uooyy=^eG+{wnV1@Wo6m-d&fkO~thjeYtkodV9Sp z?%3-+sI>i6BcOEeZ;gp+T)B=F{aTF;E#8m)CdZy@qrQ#$#OLRUx60aZ9*Mc*+F1O# ziraU(nZB?|yi@$l=)99i z?0*^8rWPOLvlf_Xb`&%2SzxAl(#Yh}lovm*G|n-`nB|KMU+I-fYa{h{)N{K>>z}A+ z*}J{ToW9A!{$bsCXiM}VD!ub#_i^@Hwb`yUZq}Lqc18auym3=Az5R9Xn@ZyY�VU z?R5$*>a5+Y&s6ceezA^jxv-0$9^Ugv!~HwMh-`hMej zhQ8q~`B}S?TdQR!%RMf`1dN!vy zew6l{$@loWOd~vMfXHd(9Y}ZMakpomdKb#CM4hEa$#Q;J%QB@$$@J8@`cS{3>Lb(0 z^gaC$rbo$oN{?bWVr&Pka-^2!nA-EA*)ADpKeJ3~>phC^TiAzs7KwhwHpWfAl4bs| zw#qU6O18zm-&3mk$97E2Yw0c0b37-+bL~6j*s%0AF;1kGb4P07Q6BA-_O=Uc>k__X zd6DH;qW?A1qhvYM=GYVI|0zx%lV#GQOg|KD*QQ$OrIz(EwVYFCno5J?-21jD6JJ^N z6lqM4vYz`d^{IAQ>CJXIwz{YAf8}$3`xX1dXMDhRO*QLm`ju7YnjURgBfY&x8nYaj ze&snK{HnW1H+@@ZE3OG`eh2x{E!qMO*Vgr9I_<>y*zFwVqT7=ocV8^bUhBXADRMF3?u59R#y4q_xKxzrkk z(WpiZ#^8KhfD17e7hxPiTziEPK@{Uri#o(`2_~SPANz46(1?j#lBK|pUo>M9CZh#Y zFcs5qDK0~%`@cMJIi_OT+HSEH5k%AFx|Tgl05FXAF%8;CnhVvmJR2YQ{HM*Vo@t`a>D zbUo1bxLHGVA~t2XqeKS;JrHz3&<8;$1icV+L(mW9UX!2KGss|aCOL}?Aw$X8WEdGv zMv!v|cXsHOpkIQH$*n6=L4sr?;TM~^Q8kL!(M0SY)sQjdd~yM~kcjUR@wGXQgviAt zOd^E;8R@T}!-5_Qx-96k{GuWCq=Cdqg7Axst}C~~QoN>#_^xgylgMP!LZ*0rC<#NDh(1g#Qt6g#1q*1+w-wdHMJIL4OBAXu3oI diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00063.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00063.pmf deleted file mode 100644 index 8821ff155cf19791437784565ff2557b740a8121..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5728 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 Av;Y7A diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00065.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00065.pmf deleted file mode 100644 index d9a151d7f9d87d1b05f698dcec0b50051d8e9798..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5728 zcmdUzd2m!k9>>3LAjgEcb4+HE;3OP@z~mwrvK}xbLo$*~hM5T=3WOuvfnb6hx`+rG zK}10aA|OH(2#SCl3PD80wN`PpN>__2c6D{VYSnUA1yRZDxBJZuU={4@{4 zW)bs?Lnw6iLmEl+Ac002&&eBU^ks2n09hbzIcO{wp0#ARFrFu`3ga#Isey)ujn@oi zthSYgk2U{LMPo8O%1bn4J)-wD%SKe!c+32CD6OvY)s*{Pz6wt%M!2dxm38%ASCt#( z6PqW_Zkp48TDPaXBB(ltH#IgOQ0ejp(TspQSnDYZR;ahUP0h0>Ho{d_Rv!q~Rk~F# ze4a7x%KCukW;cA*9&b=J{q8_@Wlhji?X4e!OD^gzxj?|@D)o5F;e%_m+wUrO*UQJD zw8G`*v+Mota!(-0Hq2;g8Zu;XN%V%>TUuQvN*18h<*Tod4ZxU)F`}AjxB{hawnExv zZuLTKDMr<}%EFHlx8c0BkDQTyaf-fhHapdJJDo#{hZH&s2j}PWP!vA+oP&lG56X9j z6Lc1!%ss+YQyHumZGf+|vR)=2J3OslzBjF3OTpYexrI~b=eG=+R8&w>97K)RGpfez z3IwW4J!L2vlwVX>P*9XVIKPlD&sXOcZ|9=rC@3i@$aP$rGB5nTYQIZ#cdo-#S?Q2v z0uFY(+dtY}mdoN*RiZm0jdN5?Y@9T8%Dj0Fr=z4`a8dDfj?q(^TV^!PaTMeh<`#l) z((SLU_LoIo5=WEUU+M9>>wVP$k9ZUlkGO&yTqC{iK!EKJ1U+7vN_3ubJc_@}qVPm; zTsRKIe{$aW4^EP}16kfIucKY-kU_utAasF$C&WR_3h}3W8@F29n))>E7BfMYr2jGX z$Tu(Z#w#X|Iop~i{K~t=b>?i_T^b65vdI2fdRy4PJUuU?#JW>08(Sa$iCR{fl2DQG zrhR;TC+pd#eK=w(KN`O_XQ%c*%c&VN&uUL^Gp|4f>+Fb+(YD46jG@*jsqszPR_$NT zZ=roIZY}*bnZsF=!<=m&FN95LH_nUX)@`8vb7>dySuY!>MQlZ9Oo+rN9V>E9#$dyR9V{?W#Us4ep`u97h_XX7f7bL^*Sv$MQOLJ|=( z-L&EOXlM^fua}ji-~Vk~fB9a*~Ec?W(l6wC~h-{E#uB=bhmgyRMhMR<$o2?{Qjp z$a*^7!)KXo%WN~kF)>N6CY@7ljK8MVF_kvoJMK>3&i8v-=(jR1{icjF;d~59lae>8 z`6#vNi-kY-ea3%on;WgO!xXYKhVxmPGCk!3TLW?#)0ws{?YnUOPFt0X7ti`<=8`OL z*niTt(5|B`+B@9(S!(aF{rBWIWIdv<-b*M-c+? z@%3QV19P@H`@A!L9e-nQPgoT3D|X{9<42}}vb}T6UnCki#>AM)InH_hJw$(O3&Wrag z8)TiLjUQ{R2{~#!Ix}WvoMHW<&eX(}Nx`rkG!GN?%RE&7#(T}ETOX}RfTk(;L3m_beWKAv+q?tqr_(RNhyt)_?JaKztjmSF(r&Y7>avK}rX zvb<`HxVl__Oa`H8%7?~TjGu=@2DF*_MCM&+x_Om3JL$0tJ?L*W?W13g4fVOHr{fN? z>@4Fkp)Dd$&0h^wj9LBVH}oGe|B3nRJv)c~h584KA6fIh+fV;?!(P*J{aaln91qUa zHR)~o6BoEHxJ-X8DckK!eG>Iyn9yO(76bE1+4H@h^S#-cDs-&-c$Updn69%}^Ugj= z`-X&G(x!gLp3|L;j5l;z?1@H$DfSiCGt@Mbxvh!eLQvH@{n>LY+wDXTpE(W|vbs^&Pna!gA7xsrWN@x_>) zn=aapc43F!$!y7dN_`hfSg+!1`HrMUh3mYkt=6eXjZ)*UWTR7eN?#k!p(`yI)kCRK z%rmM{tVhgWsaIFB86S;dowQ?ST6^<7u0+0gcj+^!X_Mu=kb0%oqiWZcY_%R$uNcGr zQ4C3wr9Ka$-8V5qYJzyK)Es+<%;BoGRnAQ{-n#l?yzO0S4@#-CE>-7vM6bk{Q8h}f z|LV3{Cw>+h#dwjkUb`@2W3%>P#12hJcq<`?@ghcQQCKIXMlsKeezjd{%oXf#yJU=- zL(C#;GW&nF*rX_#QtPS}9or)HD%_T<+TpfHy|Q;mjg>mdb%@w)NWXQp@XK|O10j0l zR)Wvepc}VdF^EMR;-TfhG{6WG%&<_Cl8}rPSdj`F>_|g8*DgJ|vvP1Rm4#mD zjXvm$Z1h8a!pUE}JdUUW_Rb&_VK6sa#TbGT{0`UQdfb2;F%-kN^BRs)l);S= zC`Sc6xCtXsi7I$e%{Bih_z?h?zZi{Lj6of4#w{3&aTt&K(Es>{37CjUn9P;c6inrw zZ#rgRCT5`#voQxvn2TGv!)d`h+=lsBz-{Xy+>Sf&do1Q&a0$1dOF0^sVL9%>y=cXK zSb>$?9InCxSd9nq5Y}KV9>zMXM;kWa5p2Yx*o4j4g2%8Gk7FCQqa9D+N$kK*>_P{2 za~JtEcahIvFZN+Sp2Yzi#33BUb9f#{a1@<5h8J)gFGknSC&bIR<2SvGTiLv2Z1zy5 z{##zgy=*iW)XJmlB$%}$)V1Q2080L~P*&`L;@TbR+S8;G@rUDCE)xIWoG(7-K!>a! zJj0SF>`>^9`B3)w)H9!rAGtyjyk8mW+Vr!C3x$r12!)zC__r+zg?7Fp@(Xp9T11>U zi+iEa^#escvYd=P&>`v!b-lP%)-T&4+9=wjwpDHKg2kcG`gY*tL-MTjj17hA-a-lJWN={q z_G$SNr{!^ugj;|0NQk_bU*`79Yc5z9i#DiZPDa`2orlN-p5M11raMqFe#DJ5mZO*o#Y zupCr`yCCW;e;G(6sUqS-S2f|dm!HA>JO@aS)R56ctZ>GVI&w3)g^VTR2v>oqClkm- zGKowk4P*+LN~V$NWCjtx*0V?>nN7G#rQ(8`3l2a~chwJX^LW0E%qI&7SBz9)P=`Uu z1GN|&^y;^{B|P6nmXf>4GP0c9L+&N53tR(l7RpbG(nmkAzB5TN6@-SIP){{1} zfjmMsl1IrVvYBilkCCn9ak7nUC+*}3@+8?oc9LDBgX|_xk*CQX@(kHa_L2SMS#p3J lB!|dh@*H`d93e+ZCpku5Ajipz>3vb8^gdPmamVgy4W-fyjg;1PP)WCdnk3C7Fbogb+|7rv!n>Etdj@ z(~Br-KoAfCK?rgww}|Xg-Yjmh3$+$&T(1&bt3cQUN$>Y{Plr%iWvPGdR6f(c{>^*8 z{=Ms)_u4RS^h1#V48%lsgaQxq8WOx8!)t07z(4hOV-&EAH_qVwX;xgxiUalES^s_s zSP;DbfcN9$c*Alc{uq*N)ohx#5%t+dUK2$UT}YZR?j-jJBcFJL5g@~aQA;L}u0DRv zAW z{EYnHQW|6FF}zJYibhTy zIjL^)7*u(@Ma31Gvvlm3+8L7&C~^BL*i!*dMU}UpqFDRUS2uOi$cbsNAs)ZG$Wx;} z4*A7yKc8LW_Y`>p6>LTAw7Q&}zWv*O@c8n}3PjCJrFPPQRQiS61JQ41Q$?zsg;Gva@nB zT)`AwnJDlSx+_a6YD6ngo?lXMl$d z#HrQ^IN9|c{}4|>I;)qKiVo46=NvR+>a^OKPM5QPX5Z{P2RMg}<$c{`XJ&d3x8{U=Qkn8Pthjs%(C)x)&n&`iq{(VWilNQ=~YIUQpMlIFqVvXr5 zW1gedco?`o!+1is!>yJJa=oqR52@6;Yu34rCW{MIfU-6Gq%kk7B;3N7b0SlWc~Nr9 zz09sLY=to|^m7qkc_(q6rMqJU265%O$a%*?N0T-d%9xaYbBweytIVTf z>NNYud8QrFA10lPe12Ftt|FY7Ve8d7f4>!P^RT6=9U{?cS$^59_n=?RPC zrC^>fCf_Cek>?n*N8-Ked|+E}NIohxYvn`#Y%fo^X1gwO4n5y#vm=%<*{-mUQ@*#I z3fc|bKJ5~v*-C}uNn5J++|b3zA6hSHwqczWiL33iL_goCialh^OWGQ7fPH?++^Elu z>kZLYbbmyH6wi6P;yWSyuynU{Z*dt{vHa=SX8IR>H%j!mBumXwmOAcrmK3?(QKQ;% zrnK1onjcHzD%JSR8E0az>HgL|^1`U4juB#>D+8ol^I9oO*eI3$!8jw-IJ=@wMW@*k zh5h5*QDUtns%0LQ2erq%6g@=5QOkQAuP0v#=2IRQ8ZQOyD)Rw7&l`!-M5)=bz<7zz z8ZYma>-k*ThF<2;rYe@_NBLW{B|0rw_obMe=nvz1sPS{;Pb}{R{b`o>+U;!HCfg~^ zue>jf)}N)w=5120)-L6sdAoV7%-spc@mtH+Qm*|6BmZ4T?v0vm>25zH`nK)k*bj7n zc#AxNYw8`*&tfCd)u)vace?&44&z4S7t#iyX`zMES(g77{>TE|;Pb*0eZu>I0!BDc%jyo9w_ z=L;PRi(zi-Vy3Le8ZKv)Og7(M|xSN&C-+phH!2MLkC6P zW6U$nx%w^rmyPG;dggv7{exqM$JALbU){`S`OL@L^EbpU)$1WD z?a&n4QdO&&Purc zw*>8vSZ0oDUrhWeadmJl$7p&b=8UFMT1=dg46*xl+jIwQH9pRmj>hiSVj6Zu?T=2= z${2Q;j@-0kzND>|H|&aeH##j?zRG+-YIc-j64#5WQCgk`RilD&s&2N6{u6q;3{`S_ zy9`w~+ZA@f+Q|NIMl9##BbFjve+;T#1!Lw|p0K>9+d{{Jxv6D>{UghT)SpG7pKl}x zon)U=8x>g!k#enDgx|z2f)o4?tzOv(9tJ{r{0c_|B4I=n&mS?&!~`=aC9oh4@kl@- ztVn_lb~uoXPDnv#p01ocPj$uZNJTgN0o~C9J&}ex&X%P z{84#0yWC-{NR3!#3+pBv2iTM;Q@^2iDm*G#6*toWYpmyOuiFz~gv=hs3AwG*+Sk&)`|C!gF{YFQ5^tu?8<< zE!N>Btj7jy#LL)(SFjmduobUj8@A&$?BHp#iKofeu^W4^7yGauZ{STFz(E|sVI09x z9K&1fd*|afhh*+=8j>k&>{c$4Vi6ODo#jC5Xgz1`D%z^$ z55uhaYW~W>LeSTppJ{dz5S=-*Kuq)7R(uVaEmr3 zw~oCw9vmZeoY=1%6A`bypXtA~z8HTot~IAsT?38_S>wk*IKEUiZXHNC;d7~Q+A?m)C*BP4Y-SDIgwFNQwwwD^X=ZorO42Qfs+uCq7a}ILE2Fpzdm~#432@ z7*Ky9POQ{mP=)!bj0`8@w0a*IK{y_`pNu4<$Y?T#j3wj917tj@B@@VlWFnbFxJ#wt zf|?6XJy3T+Q3ADBdkHs_S8@K~j*%)1>M*FppcZrCl1Ip+WC2-77LmtDJy}eakfmf9 zSx#1v$H^1qN%9nVnye%ZkQd2XvW~n&){_lnBYBx@BCn9m zWDD6!UM1VecJdn8L3WZRvWvV;dAfz zKKJ=O_xJj6e^*mKXK@%2X@DN=4I;V~XRUHQ7w5EKBK-0Dx^SXc!zGv%Cr3W8y6M9GG9k;U7Q{aJU3U zcA$P?BuN+gAYx#l2nZX_u^S;qqqt@)xP{%aL$otXH`vLIo*i%4-&QecFO~C6cbyHDY zbKSzGMRTdz?I|j*kd0HD8t0O~#ObY|2J*Wrsy(iXV)>T0sd-^tBRO5JfWM-q#4TH? z+%v;n67YLwx~aU(^lq(58iNl3(8!qWEK@T%LB!{0W?Dug=MIQ(_i35E4X&K z=;DlaGr@Cxt_x20uzZD}o8i$`T-*SBT2OqiXMl|QM1D!rcRm2Ris zUsm98QT~L?ob0TuoXm-tc^JI%8Xp^-A!X0X&(F%R53e#VeC1_6C+qGEyR)Rk&dd1i z=yl$a*&ueY9JM8&cxjA{0?N#$|qiK;nDW2Dlo^UdEI_Ly1`%J@$wpBMzXa#^c&eB zFNn~XOOCOhv4=IDbtgFzS z4gb@{O^7dsw!_}Z;!|oXt*i>ass?Ali2X|A*3lOepKYN^fm7uAQ}5(8Yr zMY~=6WUyV`;tJI#s3kgW(7snJQSF*7;$l^6Mco?RS>p%1KJUt!)j9Mt+rngT3`>m^ z(q@iM=!xpSbo__*peVySeYNE}UbZ$dC7~zI6jDbd-DEx--+(@JLeGl5I(DP1wQpIg zxE*bj25cJZ9>wR4xNBoKn!n)w2jc?K`(z!IXj@~OE{}!OnRLMRjp`$q_0_Vz)Ms20 zWio%Ei$~1Yt#4aSDn9SW8q}BrwIjYt{7|ufn$%^RE^FCqW)9X)w%_D z+CJkxD65%a&W-!C9A`irqClp;s8k^|+X0gZ4DTF4f-O zAWXsBuGJkS8rUN?3+=) zIwL-aY*NaWMLrvGI=Y3&?-oxmf3ByQzK`Cg=tS#G>mFH4J)%K0G+ALb?wB$b;sIu~>s&^B0UvVK?+LR!_RlbeotOv-xr)d}?E$&Fcv3U4E|Rk6{PU z_P2x)Y`(F+4PD9dm3j3!31j_nY#-|L%!NfLyTn**=rxc3hKa&3=_!#1w z6MFQ=FTV`?u>3Q;Y?vTuQ6DSI!@(XQkL8MQeJI;(wy-=FT#G(g73Gg?GLOITD0E)b zSgwz;yv^pGGT)AxtkFh;5c&#yHVLo6et!sF2!qCkZPuODAN~&cJ~%1@d5Jy<&4c~* z$U7sO;?A>}!C{8wgY~c1x2g3HsoT6JVV620!!S2eb%&sN z&av0<9P(p*O14`%;~Pe781hN#7}9pU`6}#F#OFCmiT`6Q$LDq> z=0TRD6#s+5RYO|zL(BdLg)V)y>`xl&0MCcbcoxr5ay{i7g*ccqKcPT7D7z)0O3ih0zLI19gyu12yBtT(S8`j(9@DSp)k~EztJr$y`GM!0_+Iv0 z`jNIC8nRoWhO~LLqCXN(S?*(6W3eP!QiRJ~EBT7e84b@-a(qpi@vnwnRkPeB$A^6n z<`R#oNeVw7aa!?7()SJNsI3vF75^mtZzE1C{)NU3Lc5Z$c#e|mso^67cSlgdLV0d#Yr*f>LM{jiyveqjVZWV`&^YD1*jRCf>ob zX#(X?E;e10D39{#N}7z-`YW13S7XLGX(|ZlXq7NQ4u9w2YS1uW1GLgtuWUx(YLJHMLU*t)V;VE?P^S$l>?Uy|j+*qb|Ci zy6FL0PaCL*9;An8BRx!yP%mww&9sFcrN?M1ZKKC&J3T>9(o?j9c49ZV3%kiZ^bGB# zXK5eprvr454$)zHj-IC@bd+A87wH(iH2Cg(d}v6P|Dqwe8I4?x#$SyF{E{IdjdLf5 zPIO5FYu{v$CUc@R@X{7$mj?V7Wn}xHKffpYtL6UFd9WPq-@)P&JCkWVf0l%#NPTl8 zeohI<`fI%LtvEyUhZ5!|Nr87HDL#(h8z?aGdpu6x95sgg{Q7iOMvk?A2P?z1W_P*T zj-j(!|4*h$(uQrs`anJNc4tzkG4NjKz5jGvVf+F%#5rQS0>Y&aD0%*605+_HzHD?GkH0 z`jqz>n=fqsup8AHKiiSq=ZnaK;xR{&^_`XSQ=>pQG64Abe?J-&&CA z2)RyPMh2YmbqP5SFU$aQ1DTJI`|v#mV9p=|5^^9R3lj1mArlgEA@QAD63!!l9gGCY z;0lleMuE{F6{G>oE#yf;rX=J_Lbk*X4vYtxAPZ!J2_Ofsw|KM@85EzmKt8w>Lk^8x$1)&SUNshdC}SP1Zzii}Ih zxrC`l$h-0fxK^B(fHuIsgxw03f@NSi_%&DoR)X8W?O+wS1FQz^paZM{cY?dXTF?pZ z2KRt_!8&js=mPhHZtwtD4>o`v@E~{yYy=O3M?f#w1U7>$;8E}x*b26R$H8{+1b7lW z1$Ka);AyZ6>;`+lGhi=x7VHE2!2xg(90G^IbKrS!1RMn~fEU3r@Dex<{;z-fAJqQ8 He-HX6nYKK4 diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00068.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00068.pmf deleted file mode 100644 index c20e39a219ac264dd9cbf72e7a44fc089d1b9f30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5732 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 Va)cZu$H@QnpXsLT|NHl#e*+9n`xyWL diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00069.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00069.pmf deleted file mode 100644 index 4a4a352811b4f7f9e7516a20771eccd0ea5aaa46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5740 zcmeI0d2kd}9>>4k69|x_y8~)40s{(0Vd5kNVHAZS(!m+s1LSzE={s_U*6DweL62rDbu?|W~05=*wWbpNonYP<63 zeET==_`U1b@3l5{(ws~H8p$DzE?^=5>#66-{NE=7;Gg`xU3*|XAKaD?l2@bL zf}3?|*=TM)J&&R@e?kWeH~(8cir&nwdC78GK(n@1ShkZ!AzmkM3vq&dnoprKjXsQN zMRt7*OFmmkaSJWlF^W4WWbf;1heoQxfmk)lB9+mq@|Ztb5iG+{e`PRKoecXcZG@)G zn>VG-U0yqH`iw~!We3YE66%*BwX-H89`c71s6*UNj0y%473!yOZQbmeS?~t}$#|kV zWGgG8!O?ao84uoMBN_>Y6H3PHcqCMn2u8xm(P;Hh-Rc4HsJ|>2E=MK&Bkh>K+)m2s zP*&lOvF>EdE)T{NY{-oI+5rRl`O-hw;j&0TOr*>BdYv?R8`_G^QgvqJOla37qaUM3ccZi!g}wVo<${7r+e%BPAo0KuW$eUzU$p1r_|NYsJ+EqTvSq20*ls8m1po~q-h$R}2axY~BgDztq0P2eKQIGPg{`tymv`Ss+V}XNJF+0ii{Dd|@7TblYz`3~};ioXD9a>@EgB*YC1x9F4CmL!|j;AM@6k zzp#9rlIKp-hggRXEuZUc*BqeD!mMMKFKhN02AZ~29Zp)lj4MQ4`UE4+a_XhdGCWSb zE*Jx)W|7)VV|iL<7z>>=c-&l?wy!f9o%U+0&Gt?jy|+1D+F1@xnhD3QjWOPLwDQMX zEPSBP^vzr>eAbH0EX&vN@8>o$?{xDx?XfeAf359$dG41^Ir!Y#>FDMI);&(W+HT`) zT4x)-a?)tK%s!4??`kYd>qpGqj>ezNQR(#CjK>_i>yJ5;9Ib_nUQ*M4ZIPw=fiCMu z%xF5zFyr&Ie$$xkXq+&UPWk$1qakhIY(63EuB|NdLCbdRT07&nPI|=6kJI*tQoacv zdYO5S9dpcIJ6h{!x*U!7&9RQwCL8ZKI%8U{?6(Z|xxQA8yP6w~*?$mer2Rnd-#CZI zof2;z&Umqo#M;SNn*9dtE@9Wl8iy=j-V0((wKe7%`Yg-QzA#z-1?&q<&O>F_&sja0 z-Xluan#?9)Z?l(W9x_hLa%gvT%i2eO-W6%|21B&>U72R3)x}Ap@9yxrqp{BXjVxc3 z`GN6SS{IoeoO-nevq9+0?o884>+6j(PI`T?u_2v)ym^`ByW}0Yc8bk`w3o^DK5vGk zW?jvvtV%~?iM1rHYb?&myfWdl_JKLnvFo+D9Is2S&1@ENsr_yAze)6MYrDS9ETDbo zsez*PqW@JI^(5|GM>788HMHdpL)XlDrjfBln;>GHic7HbXz#S|yDVmCH6K*H`6n_P znYX=KFWMIN`7d+5%zN_Ff70i})>|xd!#68A?z?m3y8h|_+q=W!yv?g=9>Frzn*I7L z{cjzATIY2w$`xbxk%+^t{WpE|vNy%j}pl z#+h&D&x&zZ{i#>T_HJmyZI+5HxyMg)Q`6?-9QHH&^+T4qKI=NC%#0p6jFX)UrT<&3 z9clj;Sl@~?8RzIvz}n*I=B*aTMcMWFMmMJ4l*v7#iaBoXh%Tu2wAj0yZKVgdX!lg9 zKe6&zzSsnEAE)|1a}~!z#wb<(1+*+**}DxEc~y*3>8U>w?>J%C|D5|BwM_5YoO9mt zsr1d;O~(IJy)s5AKUIukUasW}=shiVrcb9~nL@8HxlTI`I(LeCx4Bo&!)c_ykS8=ITS1Pgie0IA zCFYDKW0WfY0$P@@?5a#xR}~LgB3xb7ToqbR#ZP5dYf5PCpxKUX*(!WsOpt3_+GUJN z)%!!O>Md$%7vGPJY03wTHQ#0bmz*nMnbO{Inl^|&$at0Ns~>9BSJIv;N5-oHmyEIV z&0X}fK9g}0(w=`(*yTRR4Mr|rZldu};Nmf?4ca0T?a-d9ISbiLmxC~v;m8UE>&s9BeIj%rY^um=W#8tQ&z0n6A6yX|pxdkslUzDOBu0?+g zfDhO42sRKm;6@C>VE8cvWeC9Ld8`~22x1t9Bg9RA7!gD<0x`tF4KR;sqc9rPxCvu0 z7UM7;$>#s^!UWV{A|~2tiVd#i&eM}tFZ?6V=dP4$hZL;u?Y`gGq&JCY{fP_gom*m zJMah|#bels$FU1fpaD-}H}>Eu?8Vb~2G8O-?Bm(;1)ePrpb;c5Qp#@ z4ukJ-XJ7l{2VpLobr+jEh%Wz>L0G}Yu4I#vJZkbfzv>*D z(uatBbP>6Rcu6tg+klZ1jGbWg1mhhj|0Jk?^g-mlLV$; zHDn^0L?)9dMC_ZUk?CXxnMrOY{1PU=y77(5h|AAOq+(TB7mE>Nsirhz5lQraivX-nP>&XVPk!&Ilkj-QZd5~-+ z+sH%YVX~dRPy3zP5aoZYheZtD=i$_B(y2Lva7tTJ{fXt9ELB z-Cv(M_x8EB?>%#GYcuNSWC74fF4>a?T+Op1b=|iRVnypILP z*uS&=ZUz0j1@7Cj2BT$5+bf3 zEo5MXhu@Lx7kRiz#1}lQw8c7#+`T+(lu}QT9c0t_JRB6u>*QS#QtAlldw_=@iF**k zl0NX1Q81MXKm4 z#U0aF^AD92tR3156gN{?z3=EKi`GO!u{s2!l~pz6u|Ui7xBQ5i0Pn(56D3pj- z*HxIximGs}S&@i`r{xMqNX|=jU;N(?V_&R1>#kKU^r5aN(3gEu|T<* zux^LoxIm2ePQ=XeaJ-sLX>M&PEgk0X`oW9@qai6-gkYd5G0tiNYHd*#Wf*~Y&}1tt z9WvF0YAYtz1VX7>$^~m_xBs(i}V}P>YFpDuy{sOajS27Ns+I(8a0vd#2PaY zk4J;y5d1@ZCB;QW!-`9MrF@iCbuoEN$CanZ?=LF!bdQ`Dv8re+AiZAb2~<>gtTJ&A z``?UBGDC$dURf!Gd4LI z3)zp0!^@0Sgd=96DjE;V-59%Vs^(~$5HaI%c0s&49I>LY=CBM^8Kp8i)Wk?z`Lk0- z^pD=pKH?-?+xun1?}_y2P+tG(QSt;o&&xq(iF`69+H3;W9_mT%UxfH-NCurT{~WO_YIV&f-uhz`=o8BxVE7$z2UA7*Pp-j+Kd1R<9pgEe&3YXBmP z>@nDuRM{oY^K6~;<@s&RXFbx^+Qr7)uKITwj$hi-9$-XsbdJwdTSgjdZ2z>5ybZQp zYj@AEwDe(_yV17el|1%ys%)0K-PY-Ey5F!h2D|x8Q!yXZzZISKXV$a37wb`D0|#Bl z?Jr5c6&yY+|2`b?GLK~LWWAp&V|c6BwGQWB4ZnN4Jk#W@uFvgyv`cl4C1uw}xn=xV zV^53eX|_E*CvP|HUh7%Z8aIhOVs?!G^)feAJe_a3IF{Vov(8{WmByAXeMo2D(uW@{-?hs2cN}qX zEcNXpZPXg{IkX2wr>7g!EG_<1-0#`C^QiuTt$%j9`-+yBlb`B;uuTGc{u6u`{W6Y|oz6kx^UWCExZM3XN5nhHiT0e;%a0yCG5>TgoB4*$T$H~^@^Hpr7vm`y z@-^3Ejvg`&^VTO9v+Qfm1B~sXZ&y>#%-v*Z#*;lrm;SNFTk=kQk=>t;(fUk@ErScg ztnE2`*3O!5-(VZdvkysr&isV;3iV9db!O&DyHxz0EA_wI@uNfEAwKEH*skfuIbHfw zqt4dahq;Zs?~Pf#fzBou`@!R;H?=YGxORu-|3%sJ*#D=?QjI=3V>qoqX~|b9pONx^ zl$wvJe3khXy{sIi>i>oAs$bbvohnBue@DmhcpM$a zt$bzcR6UkG<=^GQ7^oe!I@_B!{#Y-L^LcsY($AR3daQhvs^?#I#JZPdSM{iTrP_jB zIb69CLca&D+S!u~v$|vbH7V?=|xy#O1GGCaF4e%InIJ=_}Shn3wqU*?o(t;xkPkjl3^Q*nyj z%2BEN)_1#aeYgA8cWamBuVQfY)W2c>_xXq9>Pr16btArGomRd|)!ERk&W3JvT0W{C zm9Gl6O1|nmAAM1PQ_&CoF#xA=r{&?^Y9P+USr~-DI2%K74$j4I@LPCMi1Xm%BD@$w zQG#I@ju9w@ALnx$b|FS$6h>nV0vL-RLNHN=a_-B*7>^04;Ico0D5@|KF~q?IFeYI# zw`+Bnf{So5rs5JLlKGqn=yHM$EuvXyV3ZCN9S;%;rdG!5qxxOlUu^18zyd79BHW0@Si+s+QY^#GxCOW3Hr$Roa3_}IF0A0zu^k;)g}ZSN zR^wi*!CKsh`|$wQ;X$m&L)d_a@dzHpV|W}-U?ZNyCTzwQY{fQg=N|KE?lE^_7j|P0 zp21%1!+t!A=fLq|uWL`{G0bJd7PG;l8T83KhNW!oGBzr~4QH~mee?hM_4;6#Hh@F& z)n%WjUlL;lG|W zjhsAlRl}Ue1sjnyLLT9&f!Pnte_#gW3mqcsfm4aRyy;H{kkiQN#6!*?1Id|$FK3t? z!TbnjNH9l&SrW{XV5S6fC73P2e95;|#7BxqF&Roq$S^XTj3A|iDTV#AFhgOlnCT znL;ii7n7;v5|SX7l4)c*sV5Djk;o4EGSWnv$xL!NnMGz3u0*UiaC3N`OSl4Ig5s+_ zGM`*Yt|DA9G7GDhbl38H9l4&|Ko*dNWD&WMEGA3HO=KxqMs6mzkXy-Z zcaarjC21!eWEHua+(TBAd&wHImfT0~Cl8Qy2M^u23Bj<6;Ig|U3)u&|2@q6P9>GM3fh0ab z5m8WiNI(IffG-}35k*BreAMaGX~(MAsgK&}*s)WK!;CG8iqq})chBBUoYLu({^4|{ zck;RSdw=^o=lssO=lpWd)#lG#m=8cBMP#oXxPez&_I@6(=Q#lWnZNfh0M_xwlf8eJ z1vj(cCD!jO-=YJzX77K+`-R24p`X-0kBmD-Y0A@y*>-n*W`qG&%)yQI`}WG{L8LZ03f%OUcK2q|@hls?PT zccj?Euw)E8Qz=}?WWMgAD5nL56vKFR`zgFEu2m6f9UhAHV%bXeiTF7=B;r$!>1hX&Hqyw+>mkg5;F8qk4MxM6xE)KI5>jJ0>P&0c^& zD3ne$G}VWd6^Y1jFu(olb^pBdG>+z;VcFdmYUl?VnB={mCum|=-YafT5{ z1;gxxsY79Pqxy=eje$_MDft=RzC-2x(eQZHka#=1s{3B=*qX6b-l{P^A5YcUQ`B2s z?eqJ***LwG2!$sF8tWU<(iJ3v^=UH>bNI_g_+sTFI(-YzuBe*d;_LLysjl=@HJ~vT znc5f*q*C!)54(&7LP_{RDRS)kJsZLT~kwYk!M44IX(etB>b%i)=-76tqnE)BQ; zJMR}C0r>~q9d5rT*8g7R^`D-zZM-h!WQE9)_i^DYx4(41tb4~+=VsAIQb6XAd$!wO z{+hj#E2i7E&FwE6fh7!ZlRnqbHl#QxhrQs z>NJ$f={-=JTav%jTp zvFx_h#(T7T&G?&iuh{$TVx7xeYfXRtU@s};oGj%krd=xB{7M&M7RkG;TCT znDx_NJK{Q+)BEIEXXE^hzEgDm8T47Dr!8%-(c5$We{&7X`IpJFC>><3o$Gb3+2Wwt z-;CI)pr&I{g)r40U3YgqweHv<)7m2yiFXRW}V}cU3W?2&z8nb#=CC+zy-(OXAHabRjkvT zGpgOvkMj4j>;%^_@z-AG^F8F;?e-7eBkgMQBxja&f3uSI@lIWQ{(1=;j=G03qK`B3 z4q~ofqxRS_`t->^eaqV4E?UPr@0L7lpI7vt)bkbJ#jHG*Szx;**L{+ z=BRAD|EyKJroFUV;#dAE25pqV{|hC9zGqI>-jtkQQY*U!o0+dvohQ(0tV|zOkIGkN zJ!X#GEP1l5Q}U#;4>t3&`5xp!M*0E|(YPtFa~swVdB{h96rd0T;N(l03pxzAQH&A{ z#2}o4!6-!;PDMFR!w?MRF3ZDx)i9iivv4-f!ElVgNQ}a{I1gS_;C%S_0$zpDsKyvv zfEtX29~W{9HVzkKJSK2^7r;aW5keS~P|H181d}lZ^?c=zA&vy5B8e3E@{4Jh&aGM# zX5vy@hRZPv>CAt5;0nyf9L(kRu^IDmC0fvmt8g_Ipp8$d9SgCD+ni2x;aXgW>$!!! zksHIsd>gzOw_qu5#WLK6<+z=@#1&YHJ8>88#wx7F8mz@VSch(I8#iz@-G`0Xgw41g z58y#Ogop76wqPr^;ZZz>$MFQ7#CGh!PVB-{cpAI$40`Y^_HcjsJolF`;6=QIeRvuB z@d^&$RU8E8i}hZ+_@o}hB6e*#yF7tmpUi_;!49uvx6;V`eZ%hm^V5w%ImT#1I4Mtl zNxs1)d5|+<(MipOpZeKb>p;>P4~@uY7Wt3wApJ-lkxx?cNvMGEdkZrinCsLsa`DQy z8s$n_%Vyb0?TR!TbqkP%wvrSrp8p>SNY8UN0u& z$pmr<36O~-NJ1n`CXreq-@PJaGT{!Cxt4E5Bu3&SLHK6KybEStF!zGl7tFt423DWT zns}W_E+v@*+A|k_mPcc6WL7eCl8PZ$wTB}@(9^Nwvuh+QSumhoIF9EB-_ajvXks0Pm!m| zZt@K2A&@*-Ks^FOrwYKJqfzPhKGh$gAWad5yeI{-=*36}_e||NeW>KLB9| BO49%U diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00072.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00072.pmf deleted file mode 100644 index 5415c3f446e8210461d25880ffdc71b4231294b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5724 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
    jPhV$ zc)8yf3YFvq@-d)qdRAseMpj04zbrn$($Qt&5w$5##()7CX`c2$^P;S@q|7GRXM@q^$f^L&q^QU8Nta>Sv}p8 zk(Qa32|ibU*~pTzeEpGecKOSS0zrR8X-Oy`nq?>Sq%bGju%JH_;#h>jfuIblb=`_d z%0JIZZDAO{zOhft=Qk5FZLX!M$=8z4r&2i zNa8Y6Q?%?c^Dd!d`*5w_8}HY(aiH=I>%4O1G!Wb1ygT{4vM2I0^PK3=WNM0A5-V)r zs_|1(Q)2h)Nr0LYcU7c|*jk2}|HyiFiaPOy{hWwRwtGmqg?gRHqfWNJA=AahhxYAy z9+>S*^gM=mhgoXIY%tg_>3Ix6XBRyWzO}!jr(=ixU0tg=@v}@#3VSYMjxQEk#BBVc z^R#Y3m#|30HafGD&nF$fk@Cy*nBB?)wp@;t_{&bYo_s##Qd~bEvczt1+O+Xkzjyr2 zQKf0aKqu_)X=AH4J5RLc`KzPJb|IR7r(-qil+Vtv#(9o;>g>)hLURmaMxKIi_sbFZciHO_Zi>p$VlW^7u!^PHbC zkJj#f$F|mVhjR++m+7%bU5o9#qWQPFXUfe_Wh< zy`CrXk>jG?_sB@|AbnoNewpxY;u&pjwCqS+sizy?vmIoAk6d0X2HoDv-s`$oteyA< z%Zb+XEbGU%T;-G;lWbcO$8)F9m}dFj@{^X1v5sM_>Eo^Atc}t1TI(jZ`-!MM^03lV z)MI2@>T=s`#<^3Zs}Ch!iyxxt8~e<$Ld!f&N{y^jtmzhkBeX`POT)tyJdnDT%sPms)z6tD|MVwj9*sH~5mQiDz8ZvR{o#E$f^mbj&nm z9m~!VZ5h7nI4`w_rX$mo33|HPO*ta8k!?lJTGl2V(DKAIJ6GC!b?R^8&%0?~!fbo5 zj)%qAw)C{Tr>7gYD<5;5GcKvFDLdk4b*8CztpRq8vg?Z6j9 z!!^@hQu+($mOU(7|oqz&ZB0s59-&2AYRK|uJ$}q`x6n^M7oMzs zrX|B`xN2e9*K~dd|>UQr*OaE~#ZPU)VZQ8|kdef0;o@S;G)3kG) z(*KF=rq>Dq81w%00v?Z?!;ZV8@U(^ zABG?g`S4>X3Q&jueve@&LNS6U;SOLp$`AryPcZ@`F$$w`5AMYnjKzJZP=Dhe?#DQc z#{_O6Ct)%kz=Pc2Ou(8tB6i^=yo^`4v)sd-bZrHgCdOR`?(0Zy(_)mhvsf7?;s zmu0BsS=6!Ow4M(1;7nuPyeI3FecfH%7B}aVy_#?-*w%vbosEkd-C*e4AEIOkfKOijp4NLL_m*m@=2{V7yOwh(6 zbp2nSn>IFD`ij%7V*g5OhP(54CSk9-eO@-AH%RgYZp@{s=lG=#l&yMZ|9IcEY(xw*>tXbWDC4 zBjPtDlW@M!JGBp2{dwjuG(8k_QGUoGgUFraE^;@?C4-5N3?X?WpZLj8Qb72&MwbPB z7Ia$BYeBaK{T6gw?UUGWp36vxgbC*u{TFm#(1Sr2=4UfLE)PyEzJ=8(Chmdqm$k%!5AvVd@H z(U1A-Ocs&Fq>d~h^<*h|j4UI|$qKTPJWf`T)#M5CBw0h&lBdWz(m>Xe4diLEk!&K* zkY`CF*-W;Ot)z)ON1i9!$O~jU*+F)a7s)R25_y@tLUxlqU_?+% zL_|eE2mu9D5LrZ4K|ryvoN+7MYK9sMtJ?77Rj6Mz9or{Ra3+KHLvn}?|bK+ zyWe|qZ%g%)X2t-JND|p&0Pg2ALVKUgXa7imf6DjRIN))OrvBGpc^n{2+Fx1+-H0r^abZ^*YK^%!p#Ny-Df{X(3}S-)7w z^3RPFHd+u*(SuK02}L%OO9RP#@ySWiA}p)PP9a#j^o|f8u}@PdBGQPLz6nhfRm}Nv z8HH$$bb>+@tn_}wveAJ`zo)zg#euS5<(P7Ju*6r4(e5%|X-(MgF7u*tM#J1Gvzt-v z^^Ga1P;F&XCO6zS9idXUzk;0<@>W#)JQXGCM}O1o>2-~8dpzM#MNO$!wIb*n?=207 ze0O>g4EX#Nsx0@00;QD|zJNbG9^GDQy1gJ2bQk;lV-SS9%3JOp;|(jtp}53d&a%Vh z-Z8#V1sl=O+*DXNcv$BLufI6p5h?Rf><)%YlqO)jE=C7f4R@&6%T_4b<5geOwqjhR z+oKgFKEu_$lU!QIxYW*YHMrDBx0>R?auu=o1%QO1t`ZM}B=gsV!lV3kKzd3heL0&;&1uFf%ag|6=s6*f7cIatUg)-x~_C4?-0_zfv7BBgNY7x}3|^1rc3;jdM13)D_pc zD9-3PeJ^DNGEc;E_TR{*mGP!XD^`cNqz#Flgr?MOLdOg@XPB~6-}+$$V92)(v9+bH z686YXEn{tMX;UEsQD62tnB`BamBcdpF?C*gVwz0^w3y+EiWv0QA9-3_ zp{`?`mVD-8yLgCgO30|o@>>SsCi>LHe4fx`_%@QuUuubOPH2k9We@ed=zD2DBkFMd zknv8DkMtAEjkR57J_$;>kD9LP^^`VRpHb}ek8s&`>OMGUy{7v_jIe#GXx2I6iakR2 ziL%;e=swZ~+g9B!Ewb+K)brx|B{Zc>7xj_r;ztTC>Ky$|#`G+|^_;NB4#-%L@h-4Jj3!t`$HY2jnI;QTHtkTKD~-tAax`-`I?b)&H36MGcvplE}X)|}Qy?OW_f zeI@N3&F4dVq-C$BKd}95F>3x+M{h@i=HH%f@APkvzaH1B`8%w;6o0l|8kly${)J{g zWjteU)b!t+H}}re^s)4(^n4;NI#Ttq#(VaD)(X|f(A#lK`fjbo6yoq(>=OfYPHSkv@bQy?zF#U+>m%c9aH%O%UzbeDQBZ!XHf&qeHDLE?C|*3 z*iq{Gx^^PILFi~vpRwjj_PMg|P!xZ+?gLkkXM29m`iRSA&JuYFDb<=}MYC=l)us-m ztTft}TjuK;bx9i%&05-dDS4)BwOtW^P1=-rz`9v!SFI&T|JgztGA$oljMTggZ}-~6 zauqF4HNUFcBQ9Hh5IUM=$v>p5NLi}+Uo)LHj!YjC^BvdzzPLH2Y{wDNx7VLen5o<2 z4Awi?&(?F-MG0B{EWhd_-t_n*XT`nCbyOQOhH>VYWewMw5@)0;JLe47I4{FNYoe{q z+Ia0_>a6tsVoZfyEjR6S%zm!5Hq&|fE3qiE!W*nQU)H6Nla#A(z+zA=-lCu^4sfgQ_Jbk`h|Hk~G=+CH^+1^v;Yqs@{l~Ejv z$Oq$QCNw4AdTBFta{NMD+x5%QHEfqNu{EhW^(!UM_l-B}^_L=3dg}F$p3x(hF*!kE z+>SchGpy@q^jfEDEH&1c-c1R|EYM?4FRQ3?$J$i0qe0j9lhoW@3VYgFM?=pmn$H<( zrWAI&&(V;1Lg?#f`wYn3p{_?gUWqzGiBW2vzoV7>RlAxe+7o8QwQBzD#>_6A{0X({ z-)=k~*Q)t_zE`^zZaxp44$$(!b8~n{Sgjz9{Gsug5wy zUTJwMvFle_%~P?f`9vx4N^8rXtsm)e5{s;t8M{u4vY^DA)OuB$+8GCQy@h&}YB%qv zR@#D-<`(J+U1`&I3oQ-JINWoXy2kZ*CHh}dVw9REb!Yz6o%u^kyX83~_Cv;>de#gW zlGxHsub@`e8ipjzqMjgJq*dnGjBjdNT$XBTWiF{PN-MY4d>idbyQEsPms)9;RIB-m z`qx?p(5|#AHaer4Yw*%9|6rW?&eEpGI{GkP>G}Md*7FoTNobAMU_dl%foN1i1Ad$D>&Y+?b*Y)fkT&+=)NpE=<7P2+RNDg<8~M zA|~=OvN-bVmfA^2{SPZv(e0h;C+~jd7OFku>cG4Cp>^fJQXg+51+91#%kUVM^O(2-PvA*Bg_U?3tFRht@C?>s9on!S?bv{gcoxrL6E3L0K*uD0f_%t@^z; z7buAU`h+2cPAiCflsuS@WhuI&egKd7^YuE2r&^xcW+hLhOy=GBJUm*}-#hp_z#xI} zQ=T2gX8l{&Gki*BAIh?xj`dgkL_37et%TGoTKI^k-k)7dbFkEtlk>)x<_Rv%kpK=cTX1)OCTU12?=k%9#cphi6>%@l}JSLWFr3GrVtY`6AKaXUHmx1dB6w=#y~I%f^iUx zgkUTLqahd%)!&?)d}fj?aueZ>i_sB`k6?u4PhN!ch;b5(l-w~B7s(-PJ7XpoHNm(E zMo#`mCWFZkGL#gOVPrVru7|M{95OJTg2M*fPTXV^DJCA`C8G&i;tRkz)8uAQTOV*J#vYxb)4P+yEmOMu`k?W^}J>*rgm+T|^$pLbZ93rog!{i8gog5{{$Z_%p Rd6WEKUrE2J{eS*F=wIh*{{;X5 diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00093.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00093.pmf deleted file mode 100644 index c85f3b4de9d69ff0d63e97fffd961a57fdb543df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5728 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 diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00094.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00094.pmf deleted file mode 100644 index 875bf1df8f3dc2320416710123261876b146d890..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5728 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 - exit 1 -fi -if [ ! -w "$spooldir" ] ; then - echo "$0: Cannot write to spooldir \"$spooldir\"." >&2 - exit 1 -fi - -# Create first part of the output file name (prefix and an "unique" -# id(=date and time))... -filename="Xpjob_`date +%Y%m%d%H%M%S`" - -# ... then add options ... -if [ "${printername}" != "" ] ; then - filename="${filename}_${printername}" -fi -if [ "${num_job_copies}" != "" -a "${num_job_copies}" != "1" ] ; then - filename="${filename}_copies_${num_job_copies}" -fi -if [ "${job_title}" != "" ] ; then - filename="${filename}_title_${job_title}" -fi - -# ... mangle output file name and filter chars (like whitespaces) -# which may screw-up further processing by other shell scripts ... -filename="`echo \"${filename}\" | tr '[:blank:]' '_' | tr -c -d '[:alnum:]_.-'`" - -# ... add path and suffix ... -filename="${spooldir}/${filename}${filename_suffix}" - -verbose "# File name is \"$filename\"." - -# ... and finally capture stdin to the file (we are using "gs" directly to -# avoid the problem that "ps2pdf" is not available in all Linux -# distributions by default). -#ps2pdf - - | cat >"${filename}" -gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite "-sOutputFile=-" -dCompatibilityLevel=1.2 -c .setpdfwrite -f - | cat >"${filename}" - -if ${verbose_msgs} ; then - printf "# File is " ; ls -l "${filename}" -fi - -verbose "# Done." - -exit 0 -# EOF. diff --git a/hw/xprint/config/C/print/models/PSdefault/Makefile.am b/hw/xprint/config/C/print/models/PSdefault/Makefile.am deleted file mode 100644 index 040f26077..000000000 --- a/hw/xprint/config/C/print/models/PSdefault/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -SUBDIRS = fonts - -xpcdir = @xpconfigdir@/C/print/models/PSdefault - -dist_xpc_DATA = model-config diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/AvantGarde-Book.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/AvantGarde-Book.pmf deleted file mode 100644 index 331178985b79d55487cd9c0c1c3172c5023157a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6716 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 diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/AvantGarde-BookOblique.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/AvantGarde-BookOblique.pmf deleted file mode 100644 index 61bcb22b9f98b12c3453dc01d077702d55ff5277..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6728 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 diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/AvantGarde-DemiOblique.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/AvantGarde-DemiOblique.pmf deleted file mode 100644 index 45cc8857bb72604b00a693866baf9364e8a889c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6724 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∈D#+>dExPk4~W7t~!?K#OB$B9OkF`dpi0CVC3u}6Z7LoC%Xp*m0DJ- zVPPWK*_F|{)Z_4-!4?sSas5oqb|_G1a4(-;0=xJm$o7l(E>%wzk;xw$@nNteO5#nS4fT z%y%1`j`mdVK%eY76ILE^tR?wMbZYj%==3?W=S<`8oL2QaeOfdwa~DmIxD~VLMw6wi z?UZfDsF=A!qVYl@s%+h;W4flZoI<|KQY?2dfUk!bMG zW@mo9-B0*uimOW(NH7)+cByh=L4Ul%Ppz6a95ftY@)CXgIf+>6eahcaZ;N*j|64>J zqkJZxe2GiWO`B;Vw{qqsw!#5e2mbG%y=Urc$I@-H~kN5wcqmHh5N z4D`cz^tJZCxbD}6fcya&gCFy~0Y9{*TwnJEc_1{$5U@jZ{W%8}yTFmRMfc(V(-xA>O2K3(u$kzq9_M?5iACSwo zYB6{LzD;qp+~IZdT0GCzbUY8QD*0h5&VSbAynCAb1B_R4X^~2azHO$yV2y!RomQ9`Kz1J1r zN?sc?(*HgNd0Ct$0vyy0nT-m{^c4q zN#%K*;yVA$DrB91&G(Y=Q(s3yskkZal>24-Rw4#l@H8*^|N z4(H1GZLWIX#azVs!qbipBrqSHJl7<-q8-IG;Ar$9gie!|KP$PPUNmRge+gtOblZQ^02sSFGT@GlwkA7zl?7cE-I*EIZo!Q)(B3)sW=U% z;|zR{YyO!y3uogToQogu)odls#}BazKf(q0F)qYKxEMd-TiPYK6qn(0T!Aa`GhBtM z@pJBd*Wx<-0@vf0SdANSBYuUOa5LAdTk&h$hTHKQ+=1WXPM)yt#yz+f_hAiJ(EIT_ ztmBGSJ0m~9cdP!d@Kp}}-^Rda-rt~hgC;I*@@&~cOeN%(6?qa*5GmqVB1`0n5>X*e zCC((yCe9_~2bS}RRm26vg~Y{#{MK?QaTRd`A>YXEAl48M5)To7Bpx9)5q~1&ThC_V z3F6Ph)5NpH^TZ3pUx_V*JdM3Vyh^-A{DXLdc#Dv4gzpjW6Y{jh4=(ckPO$repOC~9 zqK%kMu&?rLA$Y3f*?`}5hz?>t(M23dbQ3*9FTwK+&o$uQ4Y7z|e#CLa3B-xS5RoH> z3Fb_kL==eS#3=;xB`zYE6LB5E&qv};;$C6{!CZ(Z2=-O5UxM+AZ5*d#h#d*;x1q_z zRAMHIo?Sy!e4l(DU$B5^MEyU}@y9DzU;%PD* zA-H3Q*;aU8;y|L6V4lLA1ltNT58(mgM1t*wUE&PlJc9iTUrt;@+(O(#tRprOj}n`S zXNZ>x)-Al1_!q%`M#d7XQ)E|yV=^+0;ORWVIz?EM$O59DIF8`Bj4;0u<~DLVv65ha zBUcbSSx0Up*yjjW{>VebCgLf#Y-CNCE3yTnh-FoqA9#ieC{>F?rsG;mO32xTg5jWS zI$5(+fl(xLjZzLq*>)?AUCx^*8;)5jn8Ov#)VCoR{B-14?oyNsRTo*iSTsQ|FQ?$$qh4yC9A}!t5%_4 z7H!?*l3h{7&5y8rB{=31OEzTYP&Bd*vzjxRXcm^G(>1G{Y`axeI0uzHpVjY-Y_(#d zSe3Omn4EInFR+YX`OKO*Hg3Q!HLQw;o2{~Afyi_&sKi1$vc{x&qcE)7^M!7`@+wDh zU5&U7BCe}7TrgK4uJajhBqr|2JjVI4xE4@CTPL)2B4C|pm?gDRQY$3`O38*&BGZK) z-C|1Xr?h@5pr7&;8fL|6p<PJSv(9q2q4SPdn!Z4AoWrF3F)~2>L1J>i@7-J* Jzxey_zX6G0lF9%8 diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/Courier-BoldOblique.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/Courier-BoldOblique.pmf deleted file mode 100644 index 8db974018eb4769e3b86d98f0bd9120117f7a8b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6636 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 diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/Courier-Oblique.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/Courier-Oblique.pmf deleted file mode 100644 index 87aee16cce34df1dc92957cadd6a5ecd31893099..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6608 zcmeHLeV9~L8ULM~0bCVwmE9EuTp(o;24PtUOp#%C*d2wPWp|dZ%;oOPg&mohJKUK; zRR7xXLDkJkN^OMlT$3ndQ-gEAJ=wpB6(|>uN=Qr~^ z?|sjE-t(Sw-gE9zYZAE;02DEbXbu1y`CsFgll;GqvY=nywGTN9O@4VBE55luu)r^a zx|?a}^L}{;jc=}FfqG(J+Z$szi-!`rZ6Q;|iCM%vArWGUkd?%0A!~?1AsdL(g?x#) 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 DTFZjv diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/Helvetica-Bold.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/Helvetica-Bold.pmf deleted file mode 100644 index 30d462d9557c088ccf1b2b97199aa6908745efaf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6680 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 TxeWUH>*3vP$>i_bzyJOZ0>4$+ diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/Helvetica-Oblique.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/Helvetica-Oblique.pmf deleted file mode 100644 index 2a0de8afc048917610bdbe10f50df24285645692..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6688 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 OpMLM|CHdCxzyAUHXlJJY diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/Helvetica.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/Helvetica.pmf deleted file mode 100644 index b1fd475bba133f24cd5c0b65f60625f9f2cdefed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6672 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 Va8-`VyDgbK)OU9u$!Grm{SRgFGYkL# diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/LubalinGraph-Book.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/LubalinGraph-Book.pmf deleted file mode 100644 index aff4b494946697f5d1e21f580382898bfeefbd1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6628 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 diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/LubalinGraph-BookOblique.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/LubalinGraph-BookOblique.pmf deleted file mode 100644 index b5b77f353374d2e4de6f476992d60668b18de509..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6640 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 diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/LubalinGraph-Demi.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/LubalinGraph-Demi.pmf deleted file mode 100644 index 100339854962d18d2fc7f9db79477970a0dd47e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6624 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 VRgTKDEt&k(TK;ig{O{j?{|)0|C}02p diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/LubalinGraph-DemiOblique.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/LubalinGraph-DemiOblique.pmf deleted file mode 100644 index a8550e70d0c1bed34d67fcbf8f7baeeda1279d43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6636 zcmb`Lf0SHBmB(*&cYqKkK!TY-BxxcTL>iLGgbc)0Iy0S2lgacj(*v0h9NzT2$u#Nd zZu&=HM2z5%gjI})X#7D$1vF;S^#`IDR$*PvD(Ycz-BsXt5&@T0j)xz{b%oITxmB;< zv>x;i&h|Oqe&2WBty{P5t-4k3nTcHaXb~}BF6fDhT*EaI+>diTfGif=KX;5soSS%X z{|F6FXcM_GxEFK}V(8t${Sz2Jcp^9GseNnjWXHK(1Z>|*I@O7{fVE2c!DULef`XC? zs42Mt+^A#^_yjO_@plKXzJG=5>}UBq&?G-l<$nV|Rmpz-4yoh?@F$3w1KO0#1DlkL zfqQryeFpN+5P3aBO+^0}@&v>z1U!}n{|!+)5dsrA6^R@RIh||UeUNiiatP9;YI zk0yIEYg3~GnW5}Z_h5P;JGw5@pY2a>Oi5pT%q!%J>nmP)GSTBtd)@6qK zdj?0u8!wG>He&vgQ=lR-*7ga=^x!BEjJ@FG?460_pg_- zBriz~CfBD%Z6DIzn;fLW(ZSUE^iUSB^VL#U*Q)cw2dVzo+H12a7Y`?Uf(YC7q%+F> z%-vkKgPR*q@}F%y{mP46`^@9!UY_Zb*YMLd%kQ7;{|@`Fe^*M@B<$T;tg?M3(dgrD zo{7rgKpvH6;ag-S@@3|7v(0qMEO?vgFw4ydci_ELWfB$%`RBMUJ%S{01J3%eGymCi!i_pI<0pT#j3x z%}I=9e&Z<~oJbXFmxmjB;j>I6l%I}2PhnGk3(bJ32KL4Dn{*IoF~`c0fG;##OfuBD z&~$}5Cxw2BSrGDtW)wTlXCX(SzWk%?4%)Vvx%iN<`4Y2{+_}69`F*y@&3DYLA+MUj zfG;#7E%xWP_*rH?oF}t&U}mwI8|X)<$d8+qwy)F88$$gA{VqdCF>S$jgk73iv7s%%rdqU2$ z@+~$#P~v|>C~r5%-N;{*%Oy)&tt}@rj>BeYS ztZ;6#?wa;l;}6M$^s9M)v)rq^p>uB`d;R8M{x6W9%U8{+#`VZg;83wgzSlSiKh>O! zKM(7Cpgz1;cFL}X9w1I;Za3SW%ldxYoM-FpS>$&gcGBn^BQN1Yr13L&J8S9|tk|+G6BkX22n0Ewavhfi2g0^u9x{7fzm1p7qqZ)o&#TP_a^&ng?(8o%9mt*i z^UX%MvpGv1VIDgDS)AW?+kH+N&&f-0r++l_c6XpJW~T1-nIBP$oSz%aebzUf+iA=1 zw(~hbX=;FH21@&EpHRuNnURJ1o?4h4Eb7eqI>IY)TRAFTjkE?db11e zY_2tTz@43L^D*j@8*gjf))Vj%a=}?y)|l&BP-jMI zsr>tJ&+;ebxA2XYzarlaYf-y7t=U$(Op2P8R2}-g0C{s<%A4al1Ku3hIq>GVy5MeH z?V|hpi;aK5P8)~yBl1V)JMRkSBJ4Yx=UeVAV>1uO1arU$Zx_XFx zU2ErHL-$a)J@3S+*Ug`ydPI5snME{?W<}5DY(GbilQvY3r&65AiD15*B(Gyew97*3 z)G4gX*UPE0m~|fKjI&hUAg9Y2@Nys^Jt}N&D+d&QJWIsBO`qU-o z%LTH=o@?GJZ{sYJl(o_=J(7}jvR-;6Ef>iKD&j_7kTNnL7vuF1D|c8fkxONhjL2rW zj2-22d3)pk;U}YVg?KV1IbPj-nc!_~l2?fNN{UkAu+4oqBXNuVB;i z4!Ks|Dc8xnWQV+4uBX1ghuZl*_BHCK+$eu9ACM2SvwcW*%ZKG=>eVgsQBHjylaEum zKEe6yQ}SuKP4>!X*quJhzVUh9@9vbliCuwWvTU==u{U3LY z+{u-8S_>mr23H-+3vP^|KiaSQ$JM+w;MldkQ`ywE@+dF75$&(3uePvlehAc8eTJ@% zP5ZO$^jToDdDZwf#~NPMmg<7&3a+06b}G|x+I*?(vHwThE&BZ(?@_`n9{)XRTfSoR~7@P?@0scmM!3Lmtrtb*- zMXmui0P+y|G`IuMPvpBm*WZu9FTg?YTkt#}UXdfr;TV_$=qtJuya_A^#3{NS&{vc= zX#I&^0q8GU1@8ho0pp8)9P9;O0{4Ie;6d;M@Cf)%@FXB_(Zk>+z&K+^1M(Dm9bitz z&IT(1d5V#f80#^{IAdD?^D;(!W5hPbe2?t{j5oFidra#g)l^T)>uQmjvn`ITyZYf;8ag@RX+vR}#h#hQ3iu&P%a7q48Z)+(j)q%UQ! z;uj14M9r~Ee(NNf`Xwn}-6rKiy(+oV)RZSv`63((`O>&l3tn~dRd@MZsZc6Pl@DBw z75r*d{HyAGlG|GGJ?!GDU)AqX;?-W$F<`9X<+k}X>+~4ZITJ{m1IXp`xqKy8pOSiU zoMGom6(0}0?fz@p_SL!{^jHyl*V0ohUl?y@V!U*9QEa?5h-j>#pDMW#7fUsp+{tOuSCpCW zelq3dDnxbMC(tC8)VZA1t}a#UHgOfHP4XC#-?4{X>tWY=xTW>*OtTU9G~1gQ?3ZeF(yNq3L$CAFJ@Q%_@_|-omN(Ph zvyt$8$u%QEy0x|MTKg@n$z5}1<(*RADFsWz20K5ayQ-Lgrf1|5o^4_JGk5bxUHt3cfBz4C`A&-f diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/Makefile.am b/hw/xprint/config/C/print/models/PSdefault/fonts/Makefile.am deleted file mode 100644 index 40f1e3da5..000000000 --- a/hw/xprint/config/C/print/models/PSdefault/fonts/Makefile.am +++ /dev/null @@ -1,44 +0,0 @@ -xpcdir = @xpconfigdir@/C/print/models/PSdefault/fonts - -dist_xpc_DATA = \ - AvantGarde-BookOblique.pmf \ - AvantGarde-Book.pmf \ - AvantGarde-DemiOblique.pmf \ - AvantGarde-Demi.pmf \ - Courier-BoldOblique.pmf \ - Courier-Bold.pmf \ - Courier-Oblique.pmf \ - Courier.pmf \ - Helvetica-BoldOblique.pmf \ - Helvetica-Bold.pmf \ - Helvetica-Oblique.pmf \ - Helvetica.pmf \ - LubalinGraph-BookOblique.pmf \ - LubalinGraph-Book.pmf \ - LubalinGraph-DemiOblique.pmf \ - LubalinGraph-Demi.pmf \ - NewCentSchlbk-Bold.pmf \ - NewCentSchlbk-BoldItal.pmf \ - NewCentSchlbk-Ital.pmf \ - NewCentSchlbk-Roman.pmf \ - Souvenir-DemiItalic.pmf \ - Souvenir-Demi.pmf \ - Souvenir-LightItalic.pmf \ - Souvenir-Light.pmf \ - Symbol.pmf \ - Times-BoldItalic.pmf \ - Times-Bold.pmf \ - Times-Italic.pmf \ - Times-Roman.pmf \ - ZapfDingbats.pmf - - -dest = $(DESTDIR)$(xpcdir) - -remove-stuff: - @rm -f $(dest)/fonts.dir - -install-data-hook: remove-stuff - $(MKFONTSCALE) -b -s -l $(dest) - -uninstall-hook: remove-stuff diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/NewCentSchlbk-Bold.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/NewCentSchlbk-Bold.pmf deleted file mode 100644 index ab22aabf5ba537eb6ba21e711af104927415cda4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6644 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 diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/NewCentSchlbk-BoldItal.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/NewCentSchlbk-BoldItal.pmf deleted file mode 100644 index e68811eb72786d818a63d0e0ae05849a24160868..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6656 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 V{;C|6XInD)>Gy8-#?Sx$`yUjV8&CiM diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/Souvenir-Demi.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/Souvenir-Demi.pmf deleted file mode 100644 index 5e786ec4208042ce71f6ae59604209a6d7bc2623..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6680 zcmb_g3y>7m6+LfuP*FgmQR0`;Xn?>PKvtGtVAvhlk#%R?nH3g4Ywt`iJ2Epp_RJvb z|A*iQ@vjk7{E=vkzeG)l#7|kNgs8DJYND2f-&l&4NklY?lXKtep6Q@gs;umF|y9RZK z?GBvdUB61>!}jC_^~Aomx3A&6+@H{W3mGd;OeCfVX(8H$EF?}4k|t~+CE_$87ZDc| zYCZq1A++!7cpkcif4}g_22p;3c#_yv+<8tUZxZhd`GWY8MA3T{6Otf4ptRv#lFvzS z0E04AB(IQsmqgL$P=sXUYb2A{Dl~&QiW2NfatzPIH;^1Jl0T8yJgZUs3l)2#t%*6Y z-p)iam2ByXccyyhCOT3b(W7HXI+dk%A?r4_+W9QzCb~OXyLw<{oIV?KqesWvdwR8A z$IYe7qdy}c2_Lz~PGrlm^-kXds zilH+R??@Ti6-y@CyHoK*NAE%eE_#scjJCu(=Anq_v9Ye`yjZX911)XQE_T@46`L1N zrs#3DsWlNu*Zn$S3@X|nfM zB%jjU=-F+Yh?YcWPnV1xElzRJ%`P4&N5-VbMkY>eZW=HDQ{;c@#waYNpXw zi&S5&Z4xWg>?)TSk1|$M-t!fHA?{R@tG!zOiW-T(SGQ`O#A^JQKRI5Yd{uRg=ABw@ ze0vN}s3uRRN`Gc}K5x`qtK)+J|1hBQc|iU?`82QXXXJV;jPtAHP1=mY7g}HXRrs{V z0rBTiudVp}sOQgn^m!YG=+-i>d#jIV9+YpwTWYo!x0z~*A2;=5)vTJeHq>F{#s{d; zDq7Q-#Yp?|UDQaQ<72gx&(&lVuj#ke^>G?=;kCuv*g~%3sb*5&mv6&%pQ|&}1vP#o zeQ1(BgMml{eBP@TE2s`FpQd#t2K?WZI^MjZ$9`;~#%r6#hv{11@VnG{_7#-tpwLf0 zCW>Bq<7K`UbG|j9Lo3~?MliPK7zoI>ORTC7>Ko7F`RZnv5zAbiC3BT_-o{q^*~{r? zv_H$^&)^k2+n?duVNFg>$Ul!=3E!JvMQApfwqe4WrG@}>n$rU>(z|v9IYR$S2y5p z%Foqu!;Fux4Rv9Fud8#g&M?k;kI=QntMp&t*LrrO{;Uk}ivwIohw+hpr%68u`gKYBtfUtC z_IKoKJv$=5(s0IewXcu!0(>pGr_Y?OR+oBhkE_=)CADZ}pcbw6=B?DFAYc0p^2>}I zCXXLW54v{EhdeEsy5!rD8WrTeO_6(cbY1etKD0hpRhZ+|^V!rEHCp=p8m?=dCm$Qo z85iJQE#k~BF{ftjo4RD?3~Q0G&jIYny;`c}+9q|%tTUr!v^t;cC9^U5o2j z@qdCFum)>!BW}XYti-qAR@}xleh1d$r}!D}#9jC~?&iDTJ-8S5;eI@TU*cDI5D(#D z{2IUEj`mwTf{nFzQa-;bzPqW#d{1L#4&7nUz>3KFma%Z{Xqk+i_d`RxGyBppVP7Iw;|-*5;ktj(7to&8d6@Ua-k>L! zv2phjzeD8uo{S?HLy5cZvwxQONWaovav*larq`|}^Yg*IM+v-sC1!rCwcKmpu#NUS zi0xX;{n&eF(b4e}KLV)PK}a7mPO&R7{~9#pD3?4)+yd}( z;GeY(KLmxt4KDzV_4g4B-6NhwKK!iG7HJi7~_kVj2-662u}RO$-nPqD-7l zoJ*WfEGJeF7ZH~bs|eZCt{~`-{$?X@VjMr$DY!ntH3>XUJW2eX_ye(tc#3$2c$RpM z_zUqOAx~Z}6R#4l5u1rO2+ni7L%d78M{FTJBt9ZIC-E`CJm6F2E=+Lv@=1p^A8HcO zOmM8+Yt5RU%`p=HE*1oIGDOWaPdpU|TOV;*{%_#3gAc%S$O!FYwXa}I}z-3a#8a0oG$ zm_RU24f6>0)xbFDxz91n+-)ckXAvt1j<4Z5;wIuQ;z8mO;tAr9#IwXp#G3^3*07cM zoZvXaI}^-PcyEGpGCZC*f?%G)%t@GQFwAj=k0&@U!;Ej3u?=&6hgT9DZ}@uRW@0_T zF^4x2PZFDm7fMBby@9drQ+}tQC|*)O1{r_OWDN*WSm^ia#6J1v|T8}%9E9> zLIzgRDV1HPIAEh_xppCE_m>URAEsc**Q0D{35vN&327&vw~)^k$Y~+#WKhakrGc;A z<4CM>{#M(*Shu|%UFfSoPvvYb<7Xn{oLYd6w*)blEi6X5 z;xfqTK@8djwsn@+g+At`WT$l)GFgk?>PlIOwD)Ncj+^Oc3=7!;y{=?)IXmx|5f_}Y zPVT@U(^o+KTOaaP+GSKTHUrJXGIb_rC97u+pTW|{XR(Y$Gu5e%h&rB?+#6-K2W6}XD*Khjsgr!>Mb&R4W8&Ts#)MTqa zXD>t4#4}nCOw^S)Mq_C49g3OOG1EF0XdSCJiyNi5QHlqY;&r81stp~c$Ar;O82v;* zKjA6Vo8>FHa<-ToM8fIIWjUwOZCZDm*4=^D-SuWY=5DGj(ba)cX~1%ekkHG#G`Flk zLw>83nPt`6TRIY!jkF&LrdwLurnMbt&D{AjD{GXpM#)!}M=gG8t?lx!)oN+AEq+$(Z*`#+KdZ%bpL^d+o+ztpxtg_h-hStu zbMCq4-h1wSPxYn>y8=+e5MpHjSix(9d!Od@Bg%sA{np)pMZ5{Q_boKqew>FNzzEAhS|gdO0YZ0Nxbg4iKI^?&yy_URUOQ~hLzos=EUq+ z_xwahvLo6apP%fWlW0q}MNWvJ!>KH{^O<6}+0JF+WhRWBNOrZxj1=?Z zi(;+a9r496%umGIl7_a&Iufm&$#|lzdl7s$UFet}iN@RJqJYSPSbJn{tXsE%XiKD> z4R*K3=Eggcj5t$r8XG51t38OdMH9_pIf0#Gd|}SgdWa>O_<^Eq=^&56DE!i zPnXAtFXnenBC7npyVm^t7ZDJ<%4(enZ)c1D`rF_Lvy|EU|uD@1Fx%Kx*g zTdKS8s?=}Q?R+LrzQ)gO;}LBt%hdeN!aCIi@ei!VHq}&}CsYkm2UD(pN|EPqtd^go zR(kp>qe>n}2UgMcIBl>RtJN&DXnrO6OqZ{tpJ~;lTK=jUj(=3QX}*AEV+vxLzfAeX zRb4qSpYr3}*xtci^f_1Sd`>?zMb7*@=!g7rutNLqvo{Es`pK4O^ zS`5P7aZxt)z1WUYN7VRXYDkSo)ne-F7}N@mi>r@YvBBeNZ)_(weNXz@+D8qq>0Ga_ ztnnqPy~dNin5V1pHTeQP2O`n|74`WX?#tmJKL1VHr-`9S`!W1p&TTKYF4b7`ANBEZ zY8OwAjku&X$8MzmSvrOIf_%HQTivLiyo8skTVS%1^v%`x)DZ3jW=ub1KJ~n!#S3@~ z&$+qUg?;hluVb4h$9B%inP?aP+^4qFkLLKur|&S%F|Pkjnj4+191G9qa=k`O9&&1J zEuIg!HJR8HK4zR=Ji|E0o=2PR*JnC@!#CnF%FXXdyz1%Wa>hB-je+yLCV#fx7d2h= zcycv}axW);!TXeVXs65}o_77OVPCv;J(_u*fm8Jpzx)%%xvqM#XG!yCs6WN^ z^I3hK;6LQUs(+U!>QHiT4vYT-alDqxSTvzqTW{c+8dKd@%V(<|Z@u7RY+@~H);hN^ zCy!O%)cg&-Heb>FbexULtLua-zwLE+T8-58mX()lr>Pp%`m(Oyt$wQcy||6?^EAIx z^9wXDa9)k79;ErFI?rZq%#nG>Y9>FaY1dXaXnsED7_eCLvwS|U_^SA;Rkez1WTv~u zukrD<9%mh6onf9U;*;m5h`LC7|1w{*6S=!HXj|EbSYx^GtoO!3*Qh2Fvyxim`QMRy z{zdNXHd2dRecb2czae+^Im0%1`d_GfQj5H{q!wM|uFW0!nw`imap%9;cRrGyDSu6q zy5#xXk$XNx?)qV^YplgH-d7LzWeu6(w#C|_4&MoPYaK*qluyU26(XN*fn7S;Uk$UXmWQOEOH;+pm1xzNY2BKPz+kQ;ra_FxQNjbbfwQ+2>Dc+Ggyfx$M7QY&&uylzUWSpi3ZlQdP$cKpA5aa}9 zeu}S90lqd3Vpey>ZWxT+u?N0^J*hgBQS6Oh8*;b@HK@p&SS!6fc6Q!o{cn1<%xiLJvxv?Cl+8K7NLu)>^oS3lW=nN|L|kYJOvhd zc#28GMlY74kMAOv0Qyh7CNQ{2aI87q}gF;7;6yyLqa*m%I3VxE~MTm)L{{@em%ay`S>@s!k;M z#;ITKZswH;oJ(XW=LuBtgeeet!{y}E_pa(jSMJ(rot<#)%e57IjX`Xui~M6=`EIHq z_YV+f@_qs#aj@n!beiX47vPC7z@0(cKF2F{#MX;Zo;8U46JB3;!5!5fyY2(mj>IKx zX&k_-#LpL9-8Z%=_c})sJMSeIf!`aswvoQjUOmMt`%}vaeFV5`>b!<2m$uyg*RGOx zv6nVIc=z-r_Ue8@d{eH*y0X8KOHM>~l?&;I_z;=2!@lTeuD#^KgTyI0|0)Eyi|Sm; z82BLV`60RY#z1qqcOfy(O7QJets{7fQ+E^h5swngg?f=-UlseM7{B_QV>gJ{ix^HEL>x&>A{cK& z3o(z7b<4IJ*j~d5;yi-m&~P1b6Tx;Genl|n4bKvPBDN6k5g!oDSHpJB+aR$A!L|a2 z5~GRn1oIS_OR%i~^PuNC`>g9wiPy7;RRsGNxSCi?+)8XD9wHtio+Mr%{z$w@aNGjh zh<_98XK+`7;}qPF;G7JOC5|CDPC<@IkZU~1eg>BioR>l7H^|%uxgLTS66|kqHNkUd za6Q332OlOLC!Qi+E*1C<2lk3o*2-a7#o>pdo-Fc}T#sEWWtQfVcCuNkh=N^A+4(Z8 z99hZAr(qSGQn~09`fL=eqMgs$y=BAn=P6k74JlLVMd6f8-%&@FoD#2b>;WxddMVlY9iVW2*$(JZt<*#)N=qXyMe!HxL?jbe7 zxKghJsZ1u7DW)npRPt$dn;+9`Mqn+szt*-d-fg$VBJ`cFrE(^l_C_M@oR){qw`EEQwEKY&PBGof9Og55MqSBdvv$rg zJQblGpZ8OmvSPq>Tv+`+9siFt2h;kpF)$XiRrEDWtk+HX! zoI;;Fz!JZFMPx_PY}|sAuUqA;QmVp^`64s9pb`hVC}T|8XJva$d#;Mu@Pd39jjZS0TX{y zyflw2pCP~4%FMFr_Lk0sWh3Qfg2OG=wz0N-)*L%;W@U_0#wfW73yZ`%<@c0*0W<)V#U~2jBUkdTd5ljn5X4FrmP~&C`}^;I E0WU%+%m4rY diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/Souvenir-Light.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/Souvenir-Light.pmf deleted file mode 100644 index 0bb62bde6dc6f4d13b8b774e3c7aa7716b945332..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6684 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 diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/Times-Bold.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/Times-Bold.pmf deleted file mode 100644 index cf46ca03fcfc117be4d0cce279ec6f9ca0b83222..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6660 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 diff --git a/hw/xprint/config/C/print/models/PSdefault/fonts/ZapfDingbats.pmf b/hw/xprint/config/C/print/models/PSdefault/fonts/ZapfDingbats.pmf deleted file mode 100644 index 1ae9a7688e64e62b3e65be398c18a96eb3d3e286..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6676 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 diff --git a/hw/xprint/config/C/print/models/PSdefault/model-config b/hw/xprint/config/C/print/models/PSdefault/model-config deleted file mode 100644 index 05a19d859..000000000 --- a/hw/xprint/config/C/print/models/PSdefault/model-config +++ /dev/null @@ -1,136 +0,0 @@ -# $Xprint.org: PSdefault model-config,v 1.2 2002/11/07 19:48:04 gisburn Exp $ -# Generic default model-config for the PostScript DDX -# -# DO NOT MODIFY THIS FILE!! -# -# If you want to make customisations for your printer create a copy -# of this printer model. -# Example (for creating a model config "MYCOMPANYlaserxx"): -# 1. Create model config dir: -# % mkdir MYCOMPANYlaserxx -# 2. Link (or copy) the PMF (printer font metrics) for the -# printer buildin fonts: -# % ln -s PSdefault/fonts MYCOMPANYlaserxx/. -# 3. Copy the model config file: -# % cp PSdefault/model-config MYCOMPANYlaserxx/. -# 4. Customize MYCOMPANYlaserxx/model-config to match your needs. -# - -# Attributes supported for this printer model -# You may want to cut the lists here down to the attributes supported -# by your printer. -*content-orientations-supported: portrait landscape reverse-portrait reverse-landscape -*descriptor: PostScript default model -*document-formats-supported: {POSTSCRIPT 2} -*input-trays-supported: -*medium-source-sizes-supported: \ -{ '' \ - {na-letter FALSE {6.35 209.55 6.35 273.05}}\ - {na-legal FALSE {6.35 209.55 6.35 349.25}}\ - {executive FALSE {6.35 177.80 6.35 260.35}}\ - {folio FALSE {6.35 204.47 6.35 323.85}}\ - {invoice FALSE {6.35 133.35 6.35 209.55}}\ - {ledger FALSE {6.35 273.05 6.35 425.45}}\ - {quarto FALSE {6.35 209.55 6.35 268.732}}\ - {a FALSE {6.35 209.55 6.35 273.05}}\ - {b FALSE {6.35 273.05 6.35 425.45}}\ - {c FALSE {6.35 425.45 6.35 552.45}}\ - {d FALSE {6.35 552.45 6.35 857.25}}\ - {e FALSE {6.35 857.25 6.35 1111.25}}\ - {na-6x9-envelope FALSE {6.35 146.05 6.35 222.25}}\ - {na-10x15-envelope FALSE {6.35 247.65 6.35 374.65}}\ - {monarch-envelope FALSE {6.35 91.948 6.35 184.15}}\ - {na-10x13-envelope FALSE {6.35 247.65 6.35 323.85}}\ - {na-9x12-envelope FALSE {6.35 222.25 6.35 298.45}}\ - {na-number-10-envelope FALSE {6.35 98.425 6.35 234.95}}\ - {na-7x9-envelope FALSE {6.35 171.45 6.35 222.25}}\ - {na-9x11-envelope FALSE {6.35 222.25 6.35 273.05}}\ - {na-10x14-envelope FALSE {6.35 247.65 6.35 349.25}}\ - {na-number-9-envelope FALSE {6.35 92.075 6.35 219.075}}\ - {iso-a0 FALSE {6.35 834.65 6.35 1182.65}}\ - {iso-a1 FALSE {6.35 587.65 6.35 834.65}}\ - {iso-a2 FALSE {6.35 413.65 6.35 587.65}}\ - {iso-a3 FALSE {6.35 290.65 6.35 413.65}}\ - {iso-a4 FALSE {6.35 203.65 6.35 290.65}}\ - {iso-a5 FALSE {6.35 141.65 6.35 203.65}}\ - {iso-a6 FALSE {6.35 98.65 6.35 141.65}}\ - {iso-a7 FALSE {6.35 67.65 6.35 98.65}}\ - {iso-a8 FALSE {6.35 45.65 6.35 67.65}}\ - {iso-a9 FALSE {6.35 30.65 6.35 45.65}}\ - {iso-a10 FALSE {6.35 19.65 6.35 30.65}}\ - {iso-b1 FALSE {6.35 700.65 6.35 993.65}}\ - {iso-b2 FALSE {6.35 493.65 6.35 700.65}}\ - {iso-b3 FALSE {6.35 346.65 6.35 493.65}}\ - {iso-b4 FALSE {6.35 243.65 6.35 346.65}}\ - {iso-b5 FALSE {6.35 169.65 6.35 243.65}}\ - {iso-b6 FALSE {6.35 118.65 6.35 169.65}}\ - {iso-b7 FALSE {6.35 81.65 6.35 118.65}}\ - {iso-b8 FALSE {6.35 55.65 6.35 81.65}}\ - {iso-b9 FALSE {6.35 37.65 6.35 55.65}}\ - {iso-b10 FALSE {6.35 24.65 6.35 37.65}}\ - {jis-b1 FALSE {6.35 721.65 6.35 1023.65}}\ - {jis-b2 FALSE {6.35 508.65 6.35 721.65}}\ - {jis-b3 FALSE {6.35 357.65 6.35 508.65}}\ - {jis-b4 FALSE {6.35 250.65 6.35 357.65}}\ - {jis-b5 FALSE {6.35 175.65 6.35 250.65}}\ - {jis-b6 FALSE {6.35 121.65 6.35 175.65}}\ - {jis-b7 FALSE {6.35 84.65 6.35 121.65}}\ - {jis-b8 FALSE {6.35 57.65 6.35 84.65}}\ - {jis-b9 FALSE {6.35 38.65 6.35 57.65}}\ - {jis-b10 FALSE {6.35 25.65 6.35 38.65}}\ - {iso-c3 FALSE {6.35 317.65 6.35 451.65}}\ - {iso-c4 FALSE {6.35 222.65 6.35 317.65}}\ - {iso-c5 FALSE {6.35 155.65 6.35 222.65}}\ - {iso-c6 FALSE {6.35 107.65 6.35 155.65}}\ - {iso-designated-long FALSE {6.35 103.65 6.35 213.65}}\ - {hp-2x-postcard FALSE {6.35 141.65 6.35 193.65}}\ - {hp-european-edp FALSE {6.35 298.45 6.35 349.25}}\ - {hp-mini FALSE {6.35 133.35 6.35 209.55}}\ - {hp-postcard FALSE {6.35 93.65 6.35 141.65}}\ - {hp-tabloid FALSE {6.35 273.05 6.35 425.45}}\ - {hp-us-edp FALSE {6.35 273.05 6.35 349.25}}\ - {hp-us-government-legal FALSE {6.35 196.85 6.35 323.85}}\ - {hp-us-government-letter FALSE {6.35 196.85 6.35 247.65}}\ -} -# If you have more than one tray use the following example: -# 1. List the supported trays -#*input-trays-supported: main manual -# 2. Define each tray and it's paper sizes -#*medium-source-sizes-supported: \ -#{ main \ -# {na-letter FALSE {6.35 209.55 6.35 273.05}} \ -# {na-legal FALSE {6.35 209.55 6.35 349.25}} \ -# {iso-a4 FALSE {6.35 203.65 6.35 290.65}} \ -#} \ -#{ manual \ -# {iso-a5 FALSE {6.35 141.65 6.35 203.65}} \ -# {iso-c5 FALSE {6.35 155.65 6.35 222.65}} \ -# {iso-designated-long FALSE {6.35 103.65 6.35 213.65}} \ -# {jis-b5 FALSE {6.35 175.65 6.35 250.65}} \ -# {monarch-envelope FALSE {6.35 91.948 6.35 184.15}} \ -# {na-legal FALSE {6.35 209.55 6.35 349.25}} \ -# {na-number-10-envelope FALSE {6.35 98.425 6.35 234.95}} \ -# {executive FALSE {6.35 177.8 6.35 260.35}} \ -# {iso-a3 FALSE {6.35 290.65 6.35 413.65}} \ -# {iso-a0 FALSE {6.35 834.65 6.35 1182.65}} \ -#} -*plexes-supported: simplex duplex tumble -*printer-model: "PostScript default model" -# 75, 100, 120, 150, 180, 200, 240, 300, 360, 400, 600, 720, -# 940, 1200 and 2440 are supported DPI values, we limit it here -# to some common values: -*printer-resolutions-supported: 300 360 400 600 -*xp-ddx-identifier: XP-POSTSCRIPT -*xp-listfonts-modes-supported: xp-list-internal-printer-fonts xp-list-glyph-fonts -*xp-embedded-formats-supported: {POSTSCRIPT 2} -*xp-raw-formats-supported: {POSTSCRIPT 2} -*xp-setup-proviso: setup-optional - -# NOTE: xp-psddx-* attributes are EXPERIMENTAL for now. -# xp-psddx-download-fonts defines which fonts should be downloaded as outlines -# (valid types are "pfa", "pfb", "ttf", "ttc", "otf", "otc") -*xp-psddx-download-fonts: pfa pfb ttf ttc otf otc -# xp-psddx-download-font-type defines which font type is used to download outlines -# (valid values are "bitmap", "pstype1" and "pstype3") -*xp-psddx-download-font-type: pstype1 -# EOF. diff --git a/hw/xprint/config/C/print/models/PSspooldir/Makefile.am b/hw/xprint/config/C/print/models/PSspooldir/Makefile.am deleted file mode 100644 index 717cd2c36..000000000 --- a/hw/xprint/config/C/print/models/PSspooldir/Makefile.am +++ /dev/null @@ -1,4 +0,0 @@ -xpcdir = @xpconfigdir@/C/print/models/PSspooldir - -dist_xpc_DATA = model-config -dist_xpc_SCRIPTS = spooltodir.sh diff --git a/hw/xprint/config/C/print/models/PSspooldir/model-config b/hw/xprint/config/C/print/models/PSspooldir/model-config deleted file mode 100644 index 6bb477767..000000000 --- a/hw/xprint/config/C/print/models/PSspooldir/model-config +++ /dev/null @@ -1,71 +0,0 @@ -# $Xprint.org: PSspooldir model-config,v 1.1 2002/11/25 19:48:04 gisburn Exp $ -# PostScript DDX model-config which sends jobs to a spool dir instead to a print queue -# -# This model is basically a cut-down PSdefault model with a custom *xp-spooler-command -# -# DO NOT MODIFY THIS FILE!! -# -# If you want to make customisations for your printer create a copy -# of this printer model. -# Example (for creating a model config "MYCOMPANYlaserxx"): -# 1. Create model config dir: -# % mkdir MYCOMPANYlaserxx -# 2. Link (or copy) the PMF (printer font metrics) for the -# printer buildin fonts: -# % ln -s PSspooldir/fonts MYCOMPANYlaserxx/. -# 3. Copy the model config file: -# % cp PSspooldir/model-config MYCOMPANYlaserxx/. -# 4. Customize MYCOMPANYlaserxx/model-config to match your needs. -# -# Attributes supported for this printer model -*content-orientations-supported: portrait landscape reverse-portrait reverse-landscape -*descriptor: PostScript job spool dir /tmp/Xprintjobs -*document-formats-supported: {POSTSCRIPT 2} -*input-trays-supported: -*medium-source-sizes-supported: \ -{ '' \ - {na-letter FALSE {6.35 209.55 6.35 273.05}}\ - {na-legal FALSE {6.35 209.55 6.35 349.25}}\ - {executive FALSE {6.35 177.80 6.35 260.35}}\ - {ledger FALSE {6.35 273.05 6.35 425.45}}\ - {quarto FALSE {6.35 209.55 6.35 268.732}}\ - {iso-a3 FALSE {6.35 290.65 6.35 413.65}}\ - {iso-a4 FALSE {6.35 203.65 6.35 290.65}}\ - {iso-a5 FALSE {6.35 141.65 6.35 203.65}}\ - {iso-b3 FALSE {6.35 346.65 6.35 493.65}}\ - {iso-b4 FALSE {6.35 243.65 6.35 346.65}}\ - {iso-b5 FALSE {6.35 169.65 6.35 243.65}}\ - {jis-b3 FALSE {6.35 357.65 6.35 508.65}}\ - {jis-b4 FALSE {6.35 250.65 6.35 357.65}}\ - {jis-b5 FALSE {6.35 175.65 6.35 250.65}}\ - {iso-c3 FALSE {6.35 317.65 6.35 451.65}}\ - {iso-c4 FALSE {6.35 222.65 6.35 317.65}}\ - {iso-c5 FALSE {6.35 155.65 6.35 222.65}}\ -} - -*plexes-supported: simplex duplex tumble -*printer-model: "PostScript job spool dir /tmp/Xprintjobs" -# 75, 100, 120, 150, 180, 200, 240, 300, 360, 400, 600, 720, -# 940, 1200 and 2440 are supported DPI values, we limit it here -# to some common values: -*printer-resolutions-supported: 300 360 400 600 -*xp-ddx-identifier: XP-POSTSCRIPT -*xp-listfonts-modes-supported: xp-list-internal-printer-fonts xp-list-glyph-fonts -*xp-embedded-formats-supported: {POSTSCRIPT 2} -*xp-raw-formats-supported: {POSTSCRIPT 2} -*xp-setup-proviso: setup-optional - -# Use custom spooler script which sends the output to a dir instead to a printer queue -# Note that "%xpconfigdir%" is currently only supported in Xprt servers build -# from xprint.mozdev.org sources, other platforms have replace it with the -# absolute path name to the script -*xp-spooler-command: %xpconfigdir%/C/print/models/PSspooldir/spooltodir.sh -d /tmp/Xprintjobs -s .ps -u 077 -p %printer-name% -c %copy-count% -t %job-name% -o "%options%" - -# NOTE: xp-psddx-* attributes are EXPERIMENTAL for now. -# xp-psddx-download-fonts defines which fonts should be downloaded as outlines -# (valid types are "pfa", "pfb", "ttf", "ttc", "otf", "otc") -*xp-psddx-download-fonts: pfa pfb ttf ttc otf otc -# xp-psddx-download-font-type defines which font type is used to download outlines -# (valid values are "bitmap", "pstype1" and "pstype3") -*xp-psddx-download-font-type: pstype1 -# EOF. diff --git a/hw/xprint/config/C/print/models/PSspooldir/spooltodir.sh b/hw/xprint/config/C/print/models/PSspooldir/spooltodir.sh deleted file mode 100755 index aba14e1b3..000000000 --- a/hw/xprint/config/C/print/models/PSspooldir/spooltodir.sh +++ /dev/null @@ -1,127 +0,0 @@ -#!/bin/sh -PATH=/usr/bin:/usr/sbin:/bin:/sbin -export PATH - -verbose_msgs="false" -DEFAULT_SPOOLDIR=/tmp/Xprintjobs - -usage() -{ - printf "Usage: ${0}: [options]\n" - printf "-v\tbe verbose\n" - printf "-d dirname\tdefine spool dir\n" - printf "-p string\tname of printer selected by user\n" - printf "-c integer\tnumber of copies\n" - printf "-t string\tjob title\n" - printf "-s string\tfile name suffix\n" - printf "-o string\tspooler options\n" - printf "-u mask\tpermission mask for new files (see umask)\n" - exit 2 -} - -verbose() -{ - if ${verbose_msgs} ; then - echo "$1" - fi -} - -spooldir="${DEFAULT_SPOOLDIR}" -printername= -num_job_copies= -job_title= -filename_suffix= -spooler_options= -permmask= -while getopts va:b:d:p:c:t:s:o:u: i -do - case $i in - v) - verbose_msgs="true" - ;; - d) - spooldir="$OPTARG" - ;; - p) - printername="$OPTARG" - ;; - c) - num_job_copies="$OPTARG" - ;; - t) - job_title="$OPTARG" - ;; - s) - filename_suffix="$OPTARG" - ;; - o) - spooler_options="$OPTARG" - ;; - u) - permmask="$OPTARG" - ;; - ?) usage - ;; - esac -done - -verbose "# spooldir=\"$spooldir\"" -verbose "# printername=\"$printername\"" -verbose "# num_job_copies=\"$num_job_copies\"" -verbose "# job_title=\"$job_title\"" -verbose "# spooler_options=\"$spooler_options\"" -verbose "# umask=\"$permmask\"" - -if [ ! -d "${DEFAULT_SPOOLDIR}" ] ; then - mkdir "${DEFAULT_SPOOLDIR}" - chmod a+rwxt "${DEFAULT_SPOOLDIR}" -fi - -if [ "${permmask}" != "" ] ; then - umask ${permmask} -fi - -if [ ! -d "$spooldir" ] ; then - echo "$0: spooldir \"$spooldir\" does not exits." >&2 - exit 1 -fi -if [ ! -w "$spooldir" ] ; then - echo "$0: Cannot write to spooldir \"$spooldir\"." >&2 - exit 1 -fi - -# Create first part of the output file name (prefix and an "unique" -# id(=date and time))... -filename="Xpjob_`date +%Y%m%d%H%M%S`" - -# ... then add options ... -if [ "${printername}" != "" ] ; then - filename="${filename}_${printername}" -fi -if [ "${num_job_copies}" != "" -a "${num_job_copies}" != "1" ] ; then - filename="${filename}_copies_${num_job_copies}" -fi -if [ "${job_title}" != "" ] ; then - filename="${filename}_title_${job_title}" -fi - -# ... mangle output file name and filter chars (like whitespaces) -# which may screw-up further processing by other shell scripts ... -filename="`echo \"${filename}\" | tr '[:blank:]' '_' | tr -c -d '[:alnum:]_.-'`" - -# ... add path and suffix ... -filename="${spooldir}/${filename}${filename_suffix}" - -verbose "# File name is \"$filename\"." - -# ... and finally capture stdin to the file. -cat >"${filename}" - -if ${verbose_msgs} ; then - printf "# File is " ; ls -l "${filename}" -fi - -verbose "# Done." - -exit 0 -# EOF. diff --git a/hw/xprint/config/C/print/models/SPSPARC2/Makefile.am b/hw/xprint/config/C/print/models/SPSPARC2/Makefile.am deleted file mode 100644 index 5a56f90fb..000000000 --- a/hw/xprint/config/C/print/models/SPSPARC2/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -SUBDIRS = fonts - -xpcdir = @xpconfigdir@/C/print/models/SPSPARC2 - -dist_xpc_DATA = model-config diff --git a/hw/xprint/config/C/print/models/SPSPARC2/fonts/Makefile.am b/hw/xprint/config/C/print/models/SPSPARC2/fonts/Makefile.am deleted file mode 100644 index d1ee6cf42..000000000 --- a/hw/xprint/config/C/print/models/SPSPARC2/fonts/Makefile.am +++ /dev/null @@ -1,37 +0,0 @@ -xpcdir = @xpconfigdir@/C/print/models/SPSPARC2/fonts - -parentdir = ../../PSdefault/fonts - -XPFONTS = \ - Courier-Bold.pmf \ - Courier-BoldOblique.pmf \ - Courier-Oblique.pmf \ - Courier.pmf \ - Helvetica-Bold.pmf \ - Helvetica-BoldOblique.pmf \ - Helvetica-Oblique.pmf \ - Helvetica.pmf \ - Symbol.pmf \ - Times-Bold.pmf \ - Times-BoldItalic.pmf \ - Times-Italic.pmf \ - Times-Roman.pmf - -dest = $(DESTDIR)$(xpcdir) - -remove-stuff: - for x in $(XPFONTS) ; do \ - rm -f $(dest)/$$x ; \ - done - - rm -f $(dest)/fonts.dir - -install-data-hook: remove-stuff - mkdir -p $(dest) ; \ - for x in $(XPFONTS) ; do \ - ln -s $(parentdir)/$$x $(dest)/$$x ; \ - done - - $(MKFONTSCALE) -b -s -l $(dest) - -uninstall-hook: remove-stuff diff --git a/hw/xprint/config/C/print/models/SPSPARC2/model-config b/hw/xprint/config/C/print/models/SPSPARC2/model-config deleted file mode 100644 index 9f29b9992..000000000 --- a/hw/xprint/config/C/print/models/SPSPARC2/model-config +++ /dev/null @@ -1,18 +0,0 @@ -# $Xprint.org: SPSPARC2 model-config,v 1.4 2002/11/07 19:48:04 gisburn Exp $ -*content-orientations-supported: portrait landscape -*descriptor: SunPics SPARCprinter II -*document-formats-supported: {POSTSCRIPT 2} -*input-trays-supported: -*medium-source-sizes-supported: \ - { '' {na-letter FALSE {6.35 209.55 6.35 273.05}} \ - {na-legal FALSE {6.35 209.55 6.35 349.25}} \ - {iso-a4 FALSE {6.35 203.65 6.35 290.65}}} -*plexes-supported: simplex -*printer-model: "SunPics SPARCprinter II" -*printer-resolutions-supported: 300 -*xp-ddx-identifier: XP-POSTSCRIPT -*xp-listfonts-modes-supported: xp-list-internal-printer-fonts xp-list-glyph-fonts -*xp-embedded-formats-supported: {POSTSCRIPT 2} -*xp-raw-formats-supported: {POSTSCRIPT 2} -*xp-setup-proviso: setup-optional -# EOF. diff --git a/hw/xprint/config/Makefile.am b/hw/xprint/config/Makefile.am deleted file mode 100644 index 197d19de0..000000000 --- a/hw/xprint/config/Makefile.am +++ /dev/null @@ -1,712 +0,0 @@ -## Locale mappings -## Notes: -## - only ASCII chars are allowed -## - "C" and "en_US" should not be used, they are real directories - -# List of locales which should be linked to the "C" locale - -SUBDIRS = C en_US - -xpconfigdir = @xpconfigdir@ - -C_LOCALES= \ - POSIX \ - af_ZA \ - af_ZA.iso88591 \ - ar \ - ar_AE \ - ar_AE.iso88596 \ - ar_AE.utf8 \ - ar_BH \ - ar_BH.iso88596 \ - ar_BH.utf8 \ - ar_DZ \ - ar_DZ.iso88596 \ - ar_DZ.utf8 \ - ar_EG \ - ar_EG.ISO8859-6 \ - ar_EG.UTF-8 \ - ar_EG.iso88596 \ - ar_EG.utf8 \ - ar_IN.utf8 \ - ar_IQ \ - ar_IQ.iso88596 \ - ar_IQ.utf8 \ - ar_JO \ - ar_JO.iso88596 \ - ar_JO.utf8 \ - ar_KW \ - ar_KW.iso88596 \ - ar_KW.utf8 \ - ar_LB \ - ar_LB.iso88596 \ - ar_LB.utf8 \ - ar_LY \ - ar_LY.iso88596 \ - ar_LY.utf8 \ - ar_MA \ - ar_MA.iso88596 \ - ar_MA.utf8 \ - ar_OM \ - ar_OM.iso88596 \ - ar_OM.utf8 \ - ar_QA \ - ar_QA.iso88596 \ - ar_QA.utf8 \ - ar_SA \ - ar_SA.iso88596 \ - ar_SA.utf8 \ - ar_SD \ - ar_SD.iso88596 \ - ar_SD.utf8 \ - ar_SY \ - ar_SY.iso88596 \ - ar_SY.utf8 \ - ar_TN \ - ar_TN.iso88596 \ - ar_TN.utf8 \ - ar_YE \ - ar_YE.iso88596 \ - ar_YE.utf8 \ - be_BY \ - be_BY.cp1251 \ - be_BY.utf8 \ - bg_BG \ - bg_BG.ISO8859-5 \ - bg_BG.cp1251 \ - bg_BG.utf8 \ - bn_IN.UTF-8 \ - bn_IN.utf8 \ - br_FR \ - br_FR.iso88591 \ - bs \ - bs_BA \ - bs_BA.iso88592 \ - bs_BA.ISO8859-2 \ - bs_BA.ISO-8859-2 \ - bs_BA.ISO_8859-2 \ - bs_BA.UTF-8 \ - bokmal \ - ca \ - ca.ISO8859-1 \ - ca.ISO8859-15 \ - ca_ES \ - ca_ES.ISO8859-1 \ - ca_ES.ISO8859-15 \ - ca_ES.iso88591 \ - ca_ES.iso885915@euro \ - ca_ES.utf8 \ - ca_ES@euro \ - catalan \ - croatian \ - cs_CZ \ - cs_CZ.ISO8859-2 \ - cs_CZ.iso88592 \ - cs_CZ.utf8 \ - cy_GB \ - cy_GB.iso885914 \ - cz \ - cz.ISO8859-2 \ - czech \ - da \ - da.ISO8859-1 \ - da.ISO8859-15 \ - danish \ - dansk \ - da_DK \ - da_DK.ISO8859-1 \ - da_DK.ISO8859-15 \ - da_DK.iso88591 \ - da_DK.iso885915 \ - da_DK.utf8 \ - de \ - de.ISO8859-1 \ - de.ISO8859-15 \ - de.UTF-8 \ - deutsch \ - de_AT \ - de_AT.ISO8859-1 \ - de_AT.ISO8859-15 \ - de_AT.iso88591 \ - de_AT.iso885915@euro \ - de_AT.utf8 \ - de_AT@euro \ - de_BE \ - de_BE.iso88591 \ - de_BE.iso885915@euro \ - de_BE@euro \ - de_CH \ - de_CH.ISO8859-1 \ - de_CH.iso88591 \ - de_CH.utf8 \ - de_DE \ - de_DE.ISO8859-1 \ - de_DE.ISO8859-15 \ - de_DE.UTF-8 \ - de_DE.iso88591 \ - de_DE.iso885915@euro \ - de_DE.utf8 \ - de_DE@euro \ - de_LU \ - de_LU.iso88591 \ - de_LU.iso885915@euro \ - de_LU.utf8 \ - de_LU@euro \ - el_GR \ - el_GR.ISO8859-7 \ - el_GR.ISO8859-7@euro \ - el_GR.iso88597 \ - el_GR.utf8 \ - en_AU \ - en_AU.ISO8859-1 \ - en_AU.iso88591 \ - en_AU.utf8 \ - en_BW \ - en_BW.iso88591 \ - en_DK \ - en_DK.iso88591 \ - en_GB \ - en_GB.ISO8859-1 \ - en_GB.ISO8859-15 \ - en_GB.iso88591 \ - en_GB.iso885915 \ - en_GB.utf8 \ - en_HK \ - en_HK.iso88591 \ - en_IE \ - en_IE.ISO8859-1 \ - en_IE.ISO8859-15 \ - en_IE.iso88591 \ - en_IE.iso885915@euro \ - en_IE.utf8 \ - en_IE@euro \ - en_IN \ - en_IN.utf8 \ - en_NZ \ - en_NZ.ISO8859-1 \ - en_NZ.iso88591 \ - en_NZ.utf8 \ - en_PH \ - en_PH.iso88591 \ - en_SG \ - en_SG.iso88591 \ - en_ZA \ - en_ZA.iso88591 \ - en_ZA.utf8 \ - en_ZW \ - en_ZW.iso88591 \ - es_AR \ - es_AR.ISO8859-1 \ - es_AR.iso88591 \ - es_AR.utf8 \ - es_BO \ - es_BO.ISO8859-1 \ - es_BO.iso88591 \ - es_BO.utf8 \ - es_CL \ - es_CL.ISO8859-1 \ - es_CL.iso88591 \ - es_CL.utf8 \ - es_CO \ - es_CO.ISO8859-1 \ - es_CO.iso88591 \ - es_CO.utf8 \ - es_CR \ - es_CR.ISO8859-1 \ - es_CR.iso88591 \ - es_CR.utf8 \ - es_DO \ - es_DO.iso88591 \ - es_DO.utf8 \ - es_EC \ - es_EC.ISO8859-1 \ - es_EC.iso88591 \ - es_EC.utf8 \ - es_ES \ - es_ES.ISO8859-1 \ - es_ES.ISO8859-15 \ - es_ES.UTF-8 \ - es_ES.iso88591 \ - es_ES.iso885915@euro \ - es_ES.utf8 \ - es_ES@euro \ - es_GT \ - es_GT.ISO8859-1 \ - es_GT.iso88591 \ - es_GT.utf8 \ - es_HN \ - es_HN.iso88591 \ - es_HN.utf8 \ - es_MX \ - es_MX.ISO8859-1 \ - es_MX.iso88591 \ - es_MX.utf8 \ - es_NI \ - es_NI.ISO8859-1 \ - es_NI.iso88591 \ - es_NI.utf8 \ - es_PA \ - es_PA.ISO8859-1 \ - es_PA.iso88591 \ - es_PA.utf8 \ - es_PE \ - es_PE.ISO8859-1 \ - es_PE.iso88591 \ - es_PE.utf8 \ - es_PY \ - es_PY.ISO8859-1 \ - es_PY.iso88591 \ - es_PY.utf8 \ - es_SV \ - es_SV.ISO8859-1 \ - es_SV.iso88591 \ - es_SV.utf8 \ - es_UY \ - es_UY.ISO8859-1 \ - es_UY.iso88591 \ - es_UY.utf8 \ - es_VE \ - es_VE.ISO8859-1 \ - es_VE.iso88591 \ - es_VE.utf8 \ - et_EE \ - et_EE.ISO8859-15 \ - et_EE.iso88591 \ - et_EE.utf8 \ - eu_ES \ - eu_ES.iso88591 \ - eu_ES.iso885915@euro \ - eu_ES@euro \ - fa_IR.utf8 \ - fi_FI \ - fi_FI.ISO8859-1 \ - fi_FI.ISO8859-15 \ - fi_FI.UTF-8 \ - fi_FI.iso88591 \ - fi_FI.iso885915@euro \ - fi_FI.utf8 \ - fi_FI@euro \ - fo_FO \ - fo_FO.iso88591 \ - fo_FO.utf8 \ - fr_BE \ - fr_BE.ISO8859-1 \ - fr_BE.ISO8859-15 \ - fr_BE.UTF-8 \ - fr_BE.iso88591 \ - fr_BE.iso885915@euro \ - fr_BE.utf8 \ - fr_BE@euro \ - fr_CH \ - fr_CH.ISO8859-1 \ - fr_CH.iso88591 \ - fr_CH.utf8 \ - fr_FR \ - fr_FR.ISO8859-1 \ - fr_FR.ISO8859-15 \ - fr_FR.UTF-8 \ - fr_FR.iso88591 \ - fr_FR.iso885915@euro \ - fr_FR.utf8 \ - fr_FR@euro \ - fr_LU \ - fr_LU.iso88591 \ - fr_LU.iso885915@euro \ - fr_LU.utf8 \ - fr_LU@euro \ - ga_IE \ - ga_IE.iso88591 \ - ga_IE.iso885915@euro \ - ga_IE.utf8 \ - ga_IE@euro \ - gl_ES \ - gl_ES.iso88591 \ - gl_ES.iso885915@euro \ - gl_ES.utf8 \ - gl_ES@euro \ - gu_IN.UTF-8 \ - gu_IN.utf8 \ - gv_GB \ - gv_GB.iso88591 \ - hebrew \ - he \ - he_IL \ - he_IL.ISO8859-8 \ - he_IL.UTF-8 \ - he_IL.iso88598 \ - he_IL.utf8 \ - hi_IN.UTF-8 \ - hi_IN.utf8 \ - hr_HR \ - hr_HR.ISO8859-2 \ - hr_HR.iso88592 \ - hr_HR.utf8 \ - hu_HU \ - hu_HU.ISO8859-2 \ - hu_HU.iso88592 \ - hu_HU.utf8 \ - id_ID \ - id_ID.iso88591 \ - id_ID.utf8 \ - is_IS \ - is_IS.ISO8859-1 \ - is_IS.iso88591 \ - is_IS.utf8 \ - it \ - it.ISO8859-1 \ - it.ISO8859-15 \ - it.UTF-8 \ - italian \ - it_CH \ - it_CH.iso88591 \ - it_CH.utf8 \ - it_IT \ - it_IT.ISO8859-1 \ - it_IT.ISO8859-15 \ - it_IT.UTF-8 \ - it_IT.iso88591 \ - it_IT.iso885915@euro \ - it_IT.utf8 \ - it_IT@euro \ - iw_IL \ - iw_IL.iso88598 \ - ja \ - japan \ - japanese \ - japanese.euc \ - japanese.sjis \ - ja_JP \ - ja_JP.EUC \ - ja_JP.PCK \ - ja_JP.UTF-8 \ - ja_JP.eucJP \ - ja_JP.eucjp \ - ja_JP.sjis \ - ja_JP.ujis \ - ja_JP.utf8 \ - ka_GE \ - ka_GE.georgianps \ - kl_GL \ - kl_GL.iso88591 \ - kl_GL.utf8 \ - ko \ - ko.UTF-8 \ - korean \ - korean.euc \ - ko_KR \ - ko_KR.EUC \ - ko_KR.EUC@dict \ - ko_KR.UTF-8 \ - ko_KR.UTF-8@dict \ - ko_KR.euckr \ - ko_KR.utf8 \ - kw_GB \ - kw_GB.iso88591 \ - lt_LT \ - lt_LT.ISO8859-13 \ - lt_LT.iso885913 \ - lt_LT.utf8 \ - lithuanian \ - lt \ - lt.ISO8859-13 \ - lv \ - lv.ISO8859-13 \ - lv_LV \ - lv_LV.ISO8859-13 \ - lv_LV.iso885913 \ - lv_LV.utf8 \ - mi_NZ \ - mi_NZ.iso885913 \ - mk_MK \ - mk_MK.ISO8859-5 \ - mk_MK.iso88595 \ - mk_MK.utf8 \ - mr_IN.utf8 \ - ms_MY \ - ms_MY.iso88591 \ - mt_MT \ - mt_MT.iso88593 \ - nb_NO \ - nb_NO.ISO-8859-1 \ - nl \ - nl.ISO8859-1 \ - nl.ISO8859-15 \ - nl_BE \ - nl_BE.ISO8859-1 \ - nl_BE.ISO8859-15 \ - nl_BE.iso88591 \ - nl_BE.iso885915@euro \ - nl_BE.utf8 \ - nl_BE@euro \ - nl_NL \ - nl_NL.ISO8859-1 \ - nl_NL.ISO8859-15 \ - nl_NL.iso88591 \ - nl_NL.iso885915@euro \ - nl_NL.utf8 \ - nl_NL@euro \ - nn_NO \ - nn_NO.iso88591 \ - no \ - no.ISO8859-1 \ - no_NO \ - no_NO.ISO8859-1@bokmal \ - no_NO.ISO8859-1@nynorsk \ - no_NO.iso88591 \ - no_NO.utf8 \ - norwegian \ - oc_FR \ - oc_FR.iso88591 \ - pa_IN.UTF-8 \ - pa_IN.utf8 \ - polish \ - pl_PL \ - pl_PL.ISO8859-2 \ - pl_PL.UTF-8 \ - pl_PL.iso88592 \ - pl_PL.utf8 \ - portuguese \ - pt \ - pt.ISO8859-1 \ - pt.ISO8859-15 \ - pt_BR \ - pt_BR.ISO8859-1 \ - pt_BR.ISO-8859-1 \ - pt_BR.ISO_8859-1 \ - pt_BR.iso88591 \ - pt_BR.iso885915 \ - pt_BR.88591 \ - pt_BR.88591.en \ - pt_BR.utf8 \ - pt_BR.UTF-8 \ - pt_PT \ - pt_PT.ISO8859-1 \ - pt_PT.ISO8859-15 \ - pt_PT.iso88591 \ - pt_PT.iso885915@euro \ - pt_PT.utf8 \ - pt_PT@euro \ - ro_RO \ - ro_RO.ISO8859-2 \ - ro_RO.iso88592 \ - ro_RO.utf8 \ - ru \ - ru.ISO8859-5 \ - ru.UTF-8 \ - ru.ansi1251 \ - ru.koi8-r \ - ru_SU \ - russian \ - ru_RU \ - ru_RU.ANSI1251 \ - ru_RU.ISO8859-5 \ - ru_RU.KOI8-R \ - ru_RU.UTF-8 \ - ru_RU.iso88595 \ - ru_RU.koi8r \ - ru_RU.utf8 \ - ru_UA \ - ru_UA.koi8u \ - romanian \ - se_NO \ - se_NO.utf8 \ - si \ - sinhala \ - si_LK \ - si_LK.UTF8 \ - sk \ - sk.ISO8859-2 \ - slovak \ - slovene \ - slovenian \ - spanish \ - sk_SK \ - sk_SK.ISO8859-2 \ - sk_SK.iso88592 \ - sk_SK.utf8 \ - sh \ - sh.ISO8859-2 \ - sh_BA.ISO8859-2@bosnia \ - sh_YU \ - sh_YU.iso88592 \ - sh_YU.utf8 \ - sl_SI \ - sl_SI.ISO8859-2 \ - sl_SI.iso88592 \ - sl_SI.utf8 \ - su \ - su.ISO8859-1 \ - sq_AL \ - sq_AL.ISO8859-2 \ - sq_AL.iso88591 \ - sq_AL.utf8 \ - sr_SP \ - sr_SP.ISO8859-5 \ - sr_YU \ - sr_YU.ISO8859-5 \ - sr_YU.iso88592 \ - sr_YU.iso88595@cyrillic \ - sr_YU.utf8 \ - sr_YU@cyrillic \ - sv \ - sv.ISO8859-1 \ - sv.ISO8859-15 \ - sv.UTF-8 \ - sv_FI \ - sv_FI.iso88591 \ - sv_FI.iso885915@euro \ - sv_FI.utf8 \ - sv_FI@euro \ - sv_SE \ - sv_SE.ISO8859-1 \ - sv_SE.ISO8859-15 \ - sv_SE.UTF-8 \ - sv_SE.iso88591 \ - sv_SE.iso885915 \ - sv_SE.utf8 \ - swedish \ - ta_IN \ - ta_IN.utf8 \ - te_IN \ - te_IN.utf8 \ - tg_TJ \ - tg_TJ.koi8t \ - th \ - thai \ - th_TH \ - th_TH.ISO8859-11 \ - th_TH.TIS620 \ - th_TH.UTF-8 \ - th_TH.tis620 \ - th_TH.utf8 \ - tl_PH \ - tl_PH.iso88591 \ - tr \ - tr.ISO8859-9 \ - turkish \ - tr_TR \ - tr_TR.ISO8859-9 \ - tr_TR.UTF-8 \ - tr_TR.iso88599 \ - tr_TR.utf8 \ - uk_UA \ - uk_UA.koi8u \ - uk_UA.utf8 \ - ur_PK \ - ur_PK.utf8 \ - uz_UZ \ - uz_UZ.iso88591 \ - vi_VN \ - vi_VN.tcvn \ - vi_VN.utf8 \ - wa_BE \ - wa_BE.iso88591 \ - wa_BE.iso885915@euro \ - wa_BE@euro \ - zh \ - zh.GBK \ - zh.UTF-8 \ - zh_CN \ - zh_CN.EUC \ - zh_CN.EUC@pinyin \ - zh_CN.EUC@radical \ - zh_CN.EUC@stroke \ - zh_CN.GB18030 \ - zh_CN.GB18030@pinyin \ - zh_CN.GB18030@radical \ - zh_CN.GB18030@stroke \ - zh_CN.GBK \ - zh_CN.GBK@pinyin \ - zh_CN.GBK@radical \ - zh_CN.GBK@stroke \ - zh_CN.UTF-8 \ - zh_CN.UTF-8@pinyin \ - zh_CN.UTF-8@radical \ - zh_CN.UTF-8@stroke \ - zh_CN.gb18030 \ - zh_CN.gb2312 \ - zh_CN.gbk \ - zh_CN.utf8 \ - zh_HK \ - zh_HK.BIG5HK \ - zh_HK.BIG5HK@radical \ - zh_HK.BIG5HK@stroke \ - zh_HK.UTF-8 \ - zh_HK.UTF-8@radical \ - zh_HK.UTF-8@stroke \ - zh_HK.big5hkscs \ - zh_HK.utf8 \ - zh_TW \ - zh_TW.BIG5 \ - zh_TW.BIG5@pinyin \ - zh_TW.BIG5@radical \ - zh_TW.BIG5@stroke \ - zh_TW.BIG5@zhuyin \ - zh_TW.EUC \ - zh_TW.EUC@pinyin \ - zh_TW.EUC@radical \ - zh_TW.EUC@stroke \ - zh_TW.EUC@zhuyin \ - zh_TW.UTF-8 \ - zh_TW.UTF-8@pinyin \ - zh_TW.UTF-8@radical \ - zh_TW.UTF-8@stroke \ - zh_TW.UTF-8@zhuyin \ - zh_TW.big5 \ - zh_TW.euctw \ - zh_TW.utf8 - - -# List of locales which should be linked to the "en_US" locale, -# e.g. these locales should get the defaults (for example that -# US-Letter is used as default papersize) mainly used in the USA -US_LOCALES= \ - en_CA \ - en_CA.ISO8859-1 \ - en_CA.iso88591 \ - en_CA.utf8 \ - en_US.ISO8859-1 \ - en_US.ISO8859-15 \ - en_US.UTF-8 \ - en_US.iso88591 \ - en_US.iso885915 \ - en_US.utf8 \ - es_PR \ - es_PR.iso88591 \ - es_PR.utf8 \ - es_US \ - es_US.iso88591 \ - fr_CA \ - fr_CA.ISO8859-1 \ - fr_CA.iso88591 \ - fr_CA.utf8 \ - yi_US \ - yi_US.cp1255 - -dest = $(DESTDIR)$(xpconfigdir) - -remove-links: - for dir in $(US_LOCALES) ; do \ - rm -f $(dest)/$${dir} ; \ - done ; \ - \ - for dir in $(C_LOCALES) ; do \ - rm -f $(dest)/$${dir} ; \ - done ; - -install-data-local: remove-links - mkdir -p $(dest) ; \ - mkdir -p $(dest)/C; \ - mkdir -p $(dest)/en_US; \ - \ - for dir in $(US_LOCALES) ; do \ - ln -s en_US $(dest)/$${dir} ; \ - done ; \ - \ - for dir in $(C_LOCALES) ; do \ - ln -s C $(dest)/$${dir} ; \ - done ; - -uninstall-hook: remove-links - -dist_xpconfig_DATA = README diff --git a/hw/xprint/config/README b/hw/xprint/config/README deleted file mode 100644 index d7447815d..000000000 --- a/hw/xprint/config/README +++ /dev/null @@ -1,318 +0,0 @@ - - -------------------------------------- - The X Print Service - The Basics - -------------------------------------- - -Index - - 1.0 X Print Service Overview - - - 2.0 How the X Print Service Works - - - 3.0 Using the X Print Service - - 3.1 X Print Server Configuration - - 3.2 Starting the X Print Service - - 3.3 Configuring the environment - - 3.4 General End-User Sequence - - -1.0 X Print Service Overview -============================= - -The "X Print Service" technology allows X rendering to devices such as -printers and fax. Most of the service is available in the X11 -technology stack as Xp, with the remainder in the CDE technology stack -as DtPrint. Modifications have also been made to the Motif technology -stack to support Xp and DtPrint. - -The Xp portion consists of: - * Xp Extension for the X-Server (included in the X-Server Xprt) - * Xp Extension API for the client side (libXp) - * PCL ddx driver that converts core X to native PCL - * Postscript ddx driver that converts core X to native Postscript - * Raster ddx driver that generates xwd rasters which can be - converted to PCL or Postscript rasters - -The DtPrint portion consists of: - * A collection of print GUIs (libDtPrint) - * A Print Dialog Manager that can assist a client in - setting printing options (dtpdm, dtpdmd) - -From an X clients perspective, it can attach to one of two nearly -identical X-Servers, a "Video" X-Server, and a "Print" X-Server -which has the additional Xp capability but otherwise looks and -behaves the same. - - - -2.0 How the X Print Service Works -================================== - -The X Print Service expands on the traditional X-Server and Xlib world -in four ways. - -1. Most obvious is the use of "print ddx drivers" instead of - "video ddx drivers". While a video ddx driver modifies pixels - in a video frame buffer, a print ddx driver generates "page - description language (PDL)" output such as PCL or Postscript. - - Once a print ddx driver generates PDL output, it can be sent to - a spooler such as lp(1) or retrieved by the client. - - Though not currently done, a single X-Server can support both - print and video ddx drivers. - -2. Since printers support "paged" output, unlike video, a portion - of the Xp Extension supports APIs to delineate printed output. - For example, XpStartPage and XpEndPage tell the X-Server where - a physical page starts and ends in an otherwise continuous - stream of X rendering primitives. Likewise, XpStartJob and - XpEndJob determine when a collection of pages starts and ends. - XpEndJob typically causes the generated PDL to be submitted to - a spooler, such as lp(1). - -3. Since printers have extensive capabilities, another portion of - the Xp Extension supports APIs to manipulate "print contexts". - - Once a printer is selected using the Xp Extension API, a print - context to represent it can be created. A print context - embodies the printer selected - it contains the printer's - default capabilities, selectable range of capabilities, - printer state, and generated output. Some "attributes" within - the print context can be modified by the user, and the - X-Server and print ddx driver will react accordingly. For - example, the attribute "content-orientation" can be set to - "landscape" or "portrait". - -4. Since printers can have "built in" fonts, the Xp Extension in - the X-Server works with the print ddx drivers to make - available (for printing only) additional fonts on a per print - context basis. - - When a print context is created and set for a given printer, - the X font calls may be able to access additional printer - fonts. To do this (typically), the X-Server must have access - to "printer metric files" (.pmf) that describe at minimum the - metrics of the built in fonts. - - - -3.0 Using the X Print Service -============================== - -There are three tasks to start the X Print Service: 1) configuring the -X Print Server, 2) starting the X Print Service, 3) configuring the user -session so that clients can find the running X Print Service. - -The tasks are described in detail below. - - -3.1 X Print Server Configuration ---------------------------------- - -The X Print Server (Xprt) can read a number of configuration files which -control its behavior and support for printers. Each vendor platform has -a default location for this information. Xprt can also read the -environment variable XPCONFIGDIR to locate alternate configuration -directories. Common settings include: - - * export XPCONFIGDIR=/X11/lib/X11/XpConfig/ - - * export XPCONFIGDIR=/proj/x11/xc/programs/Xserver/XpConfig/ - -Xprt has many built-in defaults, and lacking any configuration files, -will immediately try to support all printers visible via lpstat(1). - -In order of importance for configuration by a system administrator, the -configuration files for a "C" locale are as follows. - - ${XPCONFIGDIR}/C/print/Xprinters - - `Xprinters' is the top most configuration file. It tells - Xprt which specific printer names (e.g. mylaser) should - be supported, and whether lpstat(1) or other commands - should be used to automatically supplement the list of - printers. - - ${XPCONFIGDIR}/C/print/attributes/printer - - The `printer' file maps printer names to model - configurations (see `model-config' below). For example, - "mylaser" could be mapped to a "HPDJ1600C", and all other - arbitrary printers could be mapped to a default, such as - "HPLJ4SI". When depending on lpstat(1) in the Xprinters - file, setting up defaults in `printer' becomes all the - more important. - - ${XPCONFIGDIR}/C/print/attributes/document - - The `document' file specifies the initial document values - for any print jobs. For example, which paper tray to - use, what default resolution, etc. - - ${XPCONFIGDIR}/C/print/attributes/job - - The `job' file specifies the initial job values for any - print jobs. For example, "notification-profile" can be - set so that when a print job is successfully sent to a - printer, e-mail is sent to the user. - - ${XPCONFIGDIR}/C/print/models/HPDJ1600C/model-config - ${XPCONFIGDIR}/C/print/models/HPDJ1600C/fonts/fonts.dir - ${XPCONFIGDIR}/C/print/models/HPDJ1600C/fonts/9nb00051.pmf - ${XPCONFIGDIR}/C/print/models/HPDJ1600C/fonts/9nb00093.pmf - - The `model-config' file has attributes that describe the - printer model's capabilities and default settings. - Printer model fonts may also be present. The model-config - file also identifies the print ddx driver to be used. - - For each printer model supported, a complete hierarchy of - files should exist. In most cases, these files do not - need to be modified. - - ${XPCONFIGDIR}/C/print/ddx-config/raster/pcl - ${XPCONFIGDIR}/C/print/ddx-config/raster/postscript - - The print ddx drivers can have highly specific - configuration files to control their behavior. In most - cases, these files do not need to be modified. - - -3.2 Starting the X Print Service ---------------------------------- - -The summary checklist for starting the X Print Service is as follows: - -1. Choose an execution model for the X Print Service. The X - Print Service can be run on a per-user session basis, per - machine basis, or can be run on a few machines globally - available to a number of users. - -2. If print jobs are to be submitted to a spooler (almost always - the case), make sure all needed printers are available to the - spooler subsystem (most often lp(1)) on the same machine - running the X Print Service. - -3. Configure the X Print Server. See ``X Print Server - Configuration''. - -4. Depending on #1, start the X Print Server process "Xprt", and - then the Print Dialog Manager Daemon process "dtpdmd" at the - appropriate times. - -The details are described below. - -Because the X Print Service is based on X, it can be easily distributed. -The most significant factors in which execution model to choose will be -driven by: - - * how many printers will be accessable through the printer - subsystem on any given machine. A system administrator may - choose to cluster printers on a few given machines, or - scatter them across an organization and possibly make - extensive use of remote spoolers to make them globally - available. - - * how many machines will need a copy of the X Print Server - configuration files. The files have been architected so - that one super-set version of them can be maintained and - distributed (e.g. via NFS), and a per-machine or per-user - version of the `Xprinters' is all that is needed to have the - appropriate information in them utilized or ignored. - - * how many users can demand services from a given X Print - Service. - -With the above in mind, some obvious execution models include: - - * Global - in this model, the system administrator is choosing - to run the X Print Service on a *few* select machines with - appropriate printers configured, and allow clients access to - the global resource. This can centralize the administration - of printers and configuration files, but may have to be - monitored for performance loading. - - Startup would likely be done by boot-up scripts. - - * Per-machine - every machine with potential X Print Service - users would run the service. Printer and configuration file - administration is decentralized, and usage would be limited - to the users on the machine. - - Startup would likely be done by boot-up scripts. - - * Per-user session - every user would run an entire X Print - Service for themselves. In the future, the Video X Server - normally started may contain Print X Server capability, so - this model becomes very natural. - - Startup would likely be done at session login or by - launching actions or processes manually once the user - logs in. Note: the dtpdmd must be started after Xprt. - -Starting of the processes is straight forward. In strict order: - - [machineA] % Xprt [-XpFile ] [:dispNum] & - - Note that Xprt will look for configuration files in either - a default location or where XPCONFIGDIR points. - - -XpFile specifies an alternate `Xprinters' file, rather - than the default one or `${XPCONFIGDIR}/C/print/Xprinters'. - - [machineA] % dtpdmd -d machineA[:dispNum] [-l /tmp/dtpdmd.log] & - - The dtpdmd will maintain an X-Selection on the X-Server, - and will start dtpdm's as required to service requests. - -In all but the per-user session model, the machine running the dtpdmd -(thus dtpdm's) will need display authorization to the users video -display. - - - -3.3 Configuring the environment --------------------------------- - -Once a X Print Server and dtpdmd have been started -- many of them -in some cases -- clients will need to find and use them. There are -two mechanisms that allow clients to discover X Print Servers and -printers. - - * "X Print Specifier" - assuming usage of the DtPrint print - dialogs, the following notation is understood: - - printer_name@machine[:dispNum] - - For example: - - colorlj7@printhub:2 - - In the above example, the X Print Server running at `printhub:2' - is assumed to support the printer named `colorlj7'. - - * "XPSERVERLIST" - assuming usage of the DtPrint print dialogs, - the environment variable "XPSERVERLIST" can contain a list - of X Print Servers. For example: - - XPSERVERLIST="printhub:2 printhub:3 otherdept:0" - - Then in the dialogs, only a printer name needs to be entered. - The dialog will then search the X Print Servers in XPSERVERLIST - for a server than supports the printer, and then establish - contact. - -3.4 General End-User Sequence ------------------------------- - -From most CDEnext applications, printing is accomplished by bringing -down the menu and selecting . This will result in -the DtPrintSetupBox dialog, which will request the name of a printer, -and offer limited capability to configure print options (e.g. number -of copies). If the user wishes, they can select , which -will start a dtpdm capable of modifying additional print options. -Finally, the user should select . - - - -$Xorg: README,v 1.3 2000/08/17 19:48:02 cpqbld Exp $ diff --git a/hw/xprint/config/en_US/Makefile.am b/hw/xprint/config/en_US/Makefile.am deleted file mode 100644 index 0390ed2d4..000000000 --- a/hw/xprint/config/en_US/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -SUBDIRS = print diff --git a/hw/xprint/config/en_US/print/Makefile.am b/hw/xprint/config/en_US/print/Makefile.am deleted file mode 100644 index 025003339..000000000 --- a/hw/xprint/config/en_US/print/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -SUBDIRS = attributes diff --git a/hw/xprint/config/en_US/print/attributes/Makefile.am b/hw/xprint/config/en_US/print/attributes/Makefile.am deleted file mode 100644 index 8a05004d1..000000000 --- a/hw/xprint/config/en_US/print/attributes/Makefile.am +++ /dev/null @@ -1,3 +0,0 @@ -xpcdir = @xpconfigdir@/en_US/print/attributes - -dist_xpc_DATA = document diff --git a/hw/xprint/config/en_US/print/attributes/document b/hw/xprint/config/en_US/print/attributes/document deleted file mode 100644 index 253c46bce..000000000 --- a/hw/xprint/config/en_US/print/attributes/document +++ /dev/null @@ -1,13 +0,0 @@ -# $Xorg: document,v 1.2 2002/11/30 22:10:03 gisburn Exp $ -# Document DPA-Object initial attribute values for en_US(-like) locales -# -# Note that the defaults (for all locales) are set in -# ${XPCONFIGDIR}/C/print/attributes/document -# Values in ${XPCONFIGDIR}/${LANG}/print/attributes/document are used to -# set/override these defaults for a specific locale on demand - -# US and some other countries use US-Letter as default paper size -# ("C"-locale default is "ISO-A4") -*default-medium: na-letter - -# EOF. diff --git a/hw/xprint/ddxInit.c b/hw/xprint/ddxInit.c deleted file mode 100644 index 795052120..000000000 --- a/hw/xprint/ddxInit.c +++ /dev/null @@ -1,390 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include "windowstr.h" -#include "servermd.h" -#include "DiPrint.h" - -/*- - *----------------------------------------------------------------------- - * InitOutput -- - * If this is built as a print-only server, then we must supply - * an InitOutput routine. If a normal server's real ddx InitOutput - * is used, then it should call PrinterInitOutput if it so desires. - * The ddx-level hook is needed to allow the printer stuff to - * create additional screens. An extension can't reliably do - * this for two reasons: - * - * 1) If InitOutput doesn't create any screens, then main() - * exits before calling InitExtensions(). - * - * 2) Other extensions may rely on knowing about all screens - * when they initialize, and we can't guarantee the order - * of extension initialization. - * - * Results: - * ScreenInfo filled in, and PrinterInitOutput is called to create - * the screens associated with printers. - * - * Side Effects: - * None - * - *----------------------------------------------------------------------- - */ - -void -InitOutput( - ScreenInfo *pScreenInfo, - int argc, - char **argv) - -{ - pScreenInfo->imageByteOrder = IMAGE_BYTE_ORDER; - pScreenInfo->bitmapScanlineUnit = BITMAP_SCANLINE_UNIT; - pScreenInfo->bitmapScanlinePad = BITMAP_SCANLINE_PAD; - pScreenInfo->bitmapBitOrder = BITMAP_BIT_ORDER; - - pScreenInfo->numPixmapFormats = 0; /* get them in PrinterInitOutput */ - screenInfo.numVideoScreens = 0; - -#ifdef PRINT_ONLY_SERVER - PrinterInitOutput(pScreenInfo, argc, argv); -#endif - -} - -void -DDXRingBell(int volume, int pitch, int duration) -{ - /* dummy func; link fails without */ -} - -static void -BellProc( - int volume, - DeviceIntPtr pDev) -{ - return; -} - -static void -KeyControlProc( - DeviceIntPtr pDev, - KeybdCtrl *ctrl) -{ - return; -} - -static KeySym printKeyMap[256]; -static CARD8 printModMap[256]; - -static int -KeyboardProc( - DevicePtr pKbd, - int what, - int argc, - char *argv[]) -{ - KeySymsRec keySyms; - - keySyms.minKeyCode = 8; - keySyms.maxKeyCode = 8; - keySyms.mapWidth = 1; - keySyms.map = printKeyMap; - - switch(what) - { - case DEVICE_INIT: - InitKeyboardDeviceStruct(pKbd, &keySyms, printModMap, - (BellProcPtr)BellProc, - KeyControlProc); - break; - case DEVICE_ON: - break; - case DEVICE_OFF: - break; - case DEVICE_CLOSE: - break; - } - return Success; -} - -#include "../mi/mipointer.h" -static int -PointerProc( - DevicePtr pPtr, - int what, - int argc, - char *argv[]) -{ -#define NUM_BUTTONS 1 - CARD8 map[NUM_BUTTONS]; - - switch(what) - { - case DEVICE_INIT: - { - map[0] = 0; - InitPointerDeviceStruct(pPtr, map, NUM_BUTTONS, - GetMotionHistory, - (PtrCtrlProcPtr)_XpVoidNoop, - GetMotionHistorySize(), 2); - break; - } - case DEVICE_ON: - break; - case DEVICE_OFF: - break; - case DEVICE_CLOSE: - break; - } - return Success; -} - -void -InitInput( - int argc, - char **argv) -{ - DeviceIntPtr ptr, kbd; - - ptr = AddInputDevice((DeviceProc)PointerProc, TRUE); - kbd = AddInputDevice((DeviceProc)KeyboardProc, TRUE); - RegisterPointerDevice(ptr); - RegisterKeyboardDevice(kbd); - return; -} - - -Bool -LegalModifier( - unsigned int key, - DeviceIntPtr dev) -{ - return TRUE; -} - -void -ProcessInputEvents(void) -{ -} - -#ifdef __APPLE__ -#include "micmap.h" - -void GlxExtensionInit(void); -void GlxWrapInitVisuals(miInitVisualsProcPtr *procPtr); - -void -DarwinHandleGUI(int argc, char *argv[]) -{ -} - -void DarwinGlxExtensionInit(void) -{ - GlxExtensionInit(); -} - -void DarwinGlxWrapInitVisuals( - miInitVisualsProcPtr *procPtr) -{ - GlxWrapInitVisuals(procPtr); -} -#endif - -#ifdef DDXOSINIT -void -OsVendorInit(void) -{ -} -#endif - -#ifdef DDXOSFATALERROR -void -OsVendorFatalError(void) -{ -} -#endif - -#ifdef DDXBEFORERESET -void -ddxBeforeReset(void) -{ - return; -} -#endif - -/* ddxInitGlobals - called by |InitGlobals| from os/util.c */ -void ddxInitGlobals(void) -{ - PrinterInitGlobals(); -} - -/**************************************** -* ddxUseMsg() -* -* Called my usemsg from os/utils/c -* -*****************************************/ - -void ddxUseMsg(void) -{ -} - -void AbortDDX (void) -{ -} - -void ddxGiveUp(void) /* Called by GiveUp() */ -{ -} - -int -ddxProcessArgument ( - int argc, - char *argv[], - int i) -{ - return(0); -} - -#ifdef XINPUT - -#include -#include -#include "XIstubs.h" -#include "exglobals.h" - -/* Place dummy config functions here instead of config/config.c, - since Xprint does not use D-BUS */ -void config_init() { } -void config_fini() { } - - -int -ChangePointerDevice ( - DeviceIntPtr old_dev, - DeviceIntPtr new_dev, - unsigned char x, - unsigned char y) -{ - return (BadDevice); -} - -int -ChangeDeviceControl ( - register ClientPtr client, - DeviceIntPtr dev, - xDeviceCtl *control) -{ - return BadMatch; -} - -int -NewInputDeviceRequest(InputOption *options, DeviceIntPtr *pdev) -{ - return BadValue; -} - -void -DeleteInputDeviceRequest(DeviceIntPtr dev) -{ -} - -void -OpenInputDevice ( - DeviceIntPtr dev, - ClientPtr client, - int *status) -{ - return; -} - -void -AddOtherInputDevices (void) -{ - return; -} - -void -CloseInputDevice ( - DeviceIntPtr dev, - ClientPtr client) -{ - return; -} - -int -ChangeKeyboardDevice ( - DeviceIntPtr old_dev, - DeviceIntPtr new_dev) -{ - return (Success); -} - -int -SetDeviceMode ( - register ClientPtr client, - DeviceIntPtr dev, - int mode) -{ - return BadMatch; -} - -int -SetDeviceValuators ( - register ClientPtr client, - DeviceIntPtr dev, - int *valuators, - int first_valuator, - int num_valuators) -{ - return BadMatch; -} - - -#endif /* XINPUT */ - -#ifdef AIXV3 -/* - * This is just to get the server to link on AIX, where some bits - * that should be in os/ are instead in hw/ibm. - */ -int SelectWaitTime = 10000; /* usec */ -#endif diff --git a/hw/xprint/doc/Makefile.am b/hw/xprint/doc/Makefile.am deleted file mode 100644 index c0cb9d3d9..000000000 --- a/hw/xprint/doc/Makefile.am +++ /dev/null @@ -1,19 +0,0 @@ -MAN_SRCS = Xprt.man.pre - -appmandir = $(APP_MAN_DIR) - -appman_PRE = Xprt.man -appman_DATA = $(appman_PRE:man=@APP_MAN_SUFFIX@) - -include $(top_srcdir)/cpprules.in - -BUILT_SOURCES = $(appman_PRE) -CLEANFILES = $(appman_PRE) $(appman_DATA) - -SUFFIXES += .$(APP_MAN_SUFFIX) .man - -.man.$(APP_MAN_SUFFIX): - -rm -f $@ - $(LN_S) $< $@ - -EXTRA_DIST = $(MAN_SRCS) Xprt.html Xprt.sgml diff --git a/hw/xprint/doc/Xprt.html b/hw/xprint/doc/Xprt.html deleted file mode 100644 index 2aa0c9e3c..000000000 --- a/hw/xprint/doc/Xprt.html +++ /dev/null @@ -1,115 +0,0 @@ -Xprt diff --git a/hw/xprint/doc/Xprt.man.pre b/hw/xprint/doc/Xprt.man.pre deleted file mode 100644 index 837619cb2..000000000 --- a/hw/xprint/doc/Xprt.man.pre +++ /dev/null @@ -1,196 +0,0 @@ -.\" -*- coding: us-ascii -*- -.TH Xprt __appmansuffix__ "25 November 2004" -.SH NAME -Xprt \- Print server for X Version 11 -.SH SYNOPSIS -.ad l -\fBXprt\fR \kx -.if (\nxu > (\n(.lu / 2)) .nr x (\n(.lu / 5) -'in \n(.iu+\nxu -[\fB\-ac\fR] [\fB\-audit \fBlevel\fR\fR] [\fB\-pn\fR] [\fB\-fp \fBfontpath\fR\fR] [\fB\-XpFile \fBfile\fR\fR] [\fB\-XpSpoolerType \fBspoolername\fR\fR] [\fB:\fBdisplay\fR\fR] -'in \n(.iu-\nxu -.ad b -.SH DESCRIPTION -Xprt is the Xprint print server -for version 11 of the X Window system for non display devices -such as printers and fax machines. -.PP -Xprint is an advanced printing system which enables X11 -applications to use devices like printers, FAX or create -documents in formats like PostScript, PCL or PDF. It may be used by -clients such as mozilla. -.PP -Xprint is a very flexible, extensible, scalable, client/server -print system based on ISO 10175 (and some other specs) and the X11 -rendering protocol. -Using Xprint an application can search, query and use devices like -printers, FAX machines or create documents in formats like PDF. -In particular, an application can seek a printer, query supported -attributes (like paper size, trays, fonts etc.), configure the printer -device to match it's needs and print on it like on any other X device -reusing parts of the code which is used for the video card Xserver. -.SH USAGE -Although Xprt may be invoked from the command line, it is -preferable to run it as a daemon via the init script -\fB/etc/init.d/xprint\fR (where this script exists). -.PP -Client programs such as mozilla will require environment -variable \fB${XPSERVERLIST}\fR to be set, identifying the -"display" on which Xprt is running. This variable may be set -for all users via \fB/etc/profile\fR (or similar), using -\fB/etc/init.d/xprint get_xpserverlist\fR: - -.nf -export XPSERVERLIST=`/etc/init.d/xprint get_xpserverlist` -.fi - -.SH OPTIONS -Many of Xprt's command line options are shared in common -with the usual X servers (see \fBXserver\fR(__appmansuffix__)). -Commonly used options include: -.TP -\fB:\fIdisplay\fB\fR -The X server runs on the given display. If multiple X -servers are to run simultaneously on a host, each must -have a unique display number. Note that the standard X -server (for video displays) typically runs on display -:0. If \fB/etc/init.d/xprint\fR is used -to invoke Xprt, it may be configured to automatically assign an available -display number. -.TP -\fB\-ac\fR -disables host-based access control mechanisms. Enables access -by any host, and permits any host to modify the access control -list. Use with extreme caution. This option exists primarily -for running test suites remotely. -.TP -\fB\-audit \fIlevel\fB\fR -sets the audit trail level. The default level is 1, meaning -only connection rejections are reported. Level 2 additionally -reports all successful connections and disconnects. Level 4 -enables messages from the SECURITY extension, if present, -including generation and revocation of authorizations and -violations of the security policy. Level 0 turns off the audit -trail. Audit lines are sent as standard error output. -.TP -\fB\-fp \fIfontpath\fB\fR -sets the search path for fonts. This path is a comma -separated list of directories which Xprt searches for -font databases. -.TP -\fB\-pn\fR -permits the server to continue running if it fails to -establish all of its well-known sockets (connection -points for clients), but establishes at least -one. -.TP -\fB\-XpFile \fIfile\fB\fR -Sets an alternate Xprinters file (see section FILES). -.TP -\fB\-XpSpoolerType \fIspoolername\fB\fR -Defines the spooler system to be used for print job spooling. -Supported values in xprint.mozdev.org release 009 are: - -aix - -aix4 - -bsd - -osf - -solaris - -sysv - -uxp - -cups - -lprng - -other - -none - -(multiple values can be specified, separated by ':', the first active spooler will be chosen). -The default value is platform-specific and can be obtained via - -.nf -Xprt \-h -.fi - -\&. -.SH ENVIRONMENT -The following environment variables are recognized by the X print server -(environment variables recognized by Xprint clients are described in -\fBXprint\fR(__miscmansuffix__)): -.TP -\fB${XPCONFIGDIR}\fR -This environment variable points to the root -of the Xprint server configuration directory hierarchy. -If the variable is not defined, the default -path is be assumed. The default path may be -\fB/usr/X11R6/lib/X11/xserver/\fR, -\fB/usr/lib/X11/xserver/\fR, -\fB/usr/share/Xprint/xserver/\fR or -\fB/usr/openwin/server/etc/XpConfig\fR, depending on the -system, and may be configured in \fB/etc/init.d/xprint\fR. -.TP -\fB${LANG}\fR -This environment variable selects the locale settings used by the Xprint server. -Xprt allows language-specific settings (stored in \fB${XPCONFIGDIR}/${LANG}/print/\fR) -which will override the default settings (stored in \fB${XPCONFIGDIR}/C/print/\fR). -If \fB${LANG}\fR is not set "C" is assumed. -.PP -.SH FILES -.TP -\fB${XPCONFIGDIR}/${LANG}/print/Xprinters\fR, \fB${XPCONFIGDIR}/C/print/Xprinters\fR -`Xprinters' is the top most configuration file. It tells -Xprt which specific printer names (e.g. mylaser) should -be supported, and whether \fBlpstat\fR(1) or other commands -should be used to automatically supplement the list of -printers. -.TP -\fB${XPCONFIGDIR}/${LANG}/print/attributes/printer\fR, \fB${XPCONFIGDIR}/C/print/attributes/printer\fR -The `printer' file maps printer names to model -configurations (see `model-config' below). For example, -"mylaser" could be mapped to a "HPDJ1600C", and all other -arbitrary printers could be mapped to a default, such as -"HPLJ4SI". When depending on \fBlpstat\fR(1) in the Xprinters -file, setting up defaults in `printer' becomes all the -more important. -.TP -\fB${XPCONFIGDIR}/${LANG}/print/attributes/document\fR, \fB${XPCONFIGDIR}/C/print/attributes/document\fR -The `document' file specifies the initial document values -for any print jobs. For example, which paper tray to -use, what default resolution, etc. -.TP -\fB${XPCONFIGDIR}/${LANG}/print/attributes/job\fR, \fB${XPCONFIGDIR}/C/print/attributes/job\fR -The `job' file specifies the initial job values for any -print jobs. For example, "notification-profile" can be -set so that when a print job is successfully sent to a -printer, e-mail is sent to the user. -.TP -\fB${XPCONFIGDIR}/C/print/models/PSdefault/model\-config\fR, \fB${XPCONFIGDIR}/C/print/models/PSdefault/fonts/fonts.dir\fR, \fB${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00051.pmf\fR, \fB${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00093.pmf\fR -The `model-config' file has attributes that describe the -printer model's capabilities and default settings. -Printer model fonts may also be present. The model-config -file also identifies the print ddx driver to be used. -For each printer model supported, a complete hierarchy of -files should exist. In most cases, these files do not -need to be modified. -.TP -\fB${XPCONFIGDIR}/C/print/ddx\-config/raster/pdf\fR, \fB${XPCONFIGDIR}/C/print/ddx\-config/raster/pcl\fR, \fB${XPCONFIGDIR}/C/print/ddx\-config/raster/postscript\fR -The print ddx drivers can have highly specific -configuration files to control their behavior. In most -cases, these files do not need to be modified. -.SH "SEE ALSO" -\fBXprint\fR(__miscmansuffix__), \fBX11\fR(__miscmansuffix__), \fBxplsprinters\fR(__appmansuffix__), \fBxprehashprinterlist\fR(__appmansuffix__), \fBxphelloworld\fR(__appmansuffix__), \fBxpxmhelloworld\fR(__appmansuffix__), \fBxpawhelloworld\fR(__appmansuffix__), \fBxpxthelloworld\fR(__appmansuffix__), \fBxpsimplehelloworld\fR(__appmansuffix__), \fBXserver\fR(__appmansuffix__), \fBlibXp\fR(__libmansuffix__), \fBlibXprintUtils\fR(__libmansuffix__), \fBlibXprintAppUtils\fR(__libmansuffix__), \fBXmPrintShell\fR(__libmansuffix__), \fBXawPrintShell\fR(__libmansuffix__), Xprint FAQ (http://xprint.mozdev.org/docs/Xprint_FAQ.html), Xprint main site (http://xprint.mozdev.org/) -.SH AUTHORS -This manual page was written by -Drew Parsons and -Roland Mainz , -with some help from the man page at -http://www.sins.com.au/unix/manpages/Xprt.html and the XFree86 -man page for \fBXserver\fR(1). diff --git a/hw/xprint/doc/Xprt.sgml b/hw/xprint/doc/Xprt.sgml deleted file mode 100644 index a62499263..000000000 --- a/hw/xprint/doc/Xprt.sgml +++ /dev/null @@ -1,371 +0,0 @@ - - - - - - - Xprt - __appmansuffix__ - - - Xprt - - Print server for X Version 11 - - - - Xprt - - - - - - - - - - - - - - - - - - - DESCRIPTION - - Xprt is the Xprint print server - for version 11 of the X Window system for non display devices - such as printers and fax machines. - - Xprint is an advanced printing system which enables X11 - applications to use devices like printers, FAX or create - documents in formats like PostScript, PCL or PDF. It may be used by - clients such as mozilla. - - - Xprint is a very flexible, extensible, scalable, client/server - print system based on ISO 10175 (and some other specs) and the X11 - rendering protocol. - Using Xprint an application can search, query and use devices like - printers, FAX machines or create documents in formats like PDF. - In particular, an application can seek a printer, query supported - attributes (like paper size, trays, fonts etc.), configure the printer - device to match it's needs and print on it like on any other X device - reusing parts of the code which is used for the video card Xserver. - - - - - USAGE - - - Although Xprt may be invoked from the command line, it is - preferable to run it as a daemon via the init script - /etc/init.d/xprint (where this script exists). - - - Client programs such as mozilla will require environment - variable ${XPSERVERLIST} to be set, identifying the - "display" on which Xprt is running. This variable may be set - for all users via /etc/profile (or similar), using - /etc/init.d/xprint get_xpserverlist: - - export XPSERVERLIST=`/etc/init.d/xprint get_xpserverlist` - - - - - - OPTIONS - - Many of Xprt's command line options are shared in common - with the usual X servers (see Xserver__appmansuffix__). - Commonly used options include: - - - - - - - The X server runs on the given display. If multiple X - servers are to run simultaneously on a host, each must - have a unique display number. Note that the standard X - server (for video displays) typically runs on display - :0. If /etc/init.d/xprint is used - to invoke Xprt, it may be configured to automatically assign an available - display number. - - - - - - - disables host-based access control mechanisms. Enables access - by any host, and permits any host to modify the access control - list. Use with extreme caution. This option exists primarily - for running test suites remotely. - - - - - - - sets the audit trail level. The default level is 1, meaning - only connection rejections are reported. Level 2 additionally - reports all successful connections and disconnects. Level 4 - enables messages from the SECURITY extension, if present, - including generation and revocation of authorizations and - violations of the security policy. Level 0 turns off the audit - trail. Audit lines are sent as standard error output. - - - - - - - sets the search path for fonts. This path is a comma - separated list of directories which Xprt searches for - font databases. - - - - - - - permits the server to continue running if it fails to - establish all of its well-known sockets (connection - points for clients), but establishes at least - one. - - - - - - - - Sets an alternate Xprinters file (see section FILES). - - - - - - - - Defines the spooler system to be used for print job spooling. - Supported values in xprint.mozdev.org release 009 are: - - aix - aix4 - bsd - osf - solaris - sysv - uxp - cups - lprng - other - none - - (multiple values can be specified, separated by ':', the first active spooler will be chosen). - The default value is platform-specific and can be obtained via - Xprt -h. - - - - - - - - ENVIRONMENT - - The following environment variables are recognized by the X print server - (environment variables recognized by Xprint clients are described in - Xprint__miscmansuffix__): - - - - ${XPCONFIGDIR} - - This environment variable points to the root - of the Xprint server configuration directory hierarchy. - If the variable is not defined, the default - path is be assumed. The default path may be - /usr/X11R6/lib/X11/xserver/, - /usr/lib/X11/xserver/, - /usr/share/Xprint/xserver/ or - /usr/openwin/server/etc/XpConfig, depending on the - system, and may be configured in /etc/init.d/xprint. - - - - - ${LANG} - - - This environment variable selects the locale settings used by the Xprint server. - Xprt allows language-specific settings (stored in ${XPCONFIGDIR}/${LANG}/print/) - which will override the default settings (stored in ${XPCONFIGDIR}/C/print/). - If ${LANG} is not set "C" is assumed. - - - - - - - - - FILES - - - - ${XPCONFIGDIR}/${LANG}/print/Xprinters - ${XPCONFIGDIR}/C/print/Xprinters - - - `Xprinters' is the top most configuration file. It tells - Xprt which specific printer names (e.g. mylaser) should - be supported, and whether lpstat1 or other commands - should be used to automatically supplement the list of - printers. - - - - - - ${XPCONFIGDIR}/${LANG}/print/attributes/printer - ${XPCONFIGDIR}/C/print/attributes/printer - - - The `printer' file maps printer names to model - configurations (see `model-config' below). For example, - "mylaser" could be mapped to a "HPDJ1600C", and all other - arbitrary printers could be mapped to a default, such as - "HPLJ4SI". When depending on lpstat1 in the Xprinters - file, setting up defaults in `printer' becomes all the - more important. - - - - - - ${XPCONFIGDIR}/${LANG}/print/attributes/document - ${XPCONFIGDIR}/C/print/attributes/document - - - The `document' file specifies the initial document values - for any print jobs. For example, which paper tray to - use, what default resolution, etc. - - - - - - ${XPCONFIGDIR}/${LANG}/print/attributes/job - ${XPCONFIGDIR}/C/print/attributes/job - - - The `job' file specifies the initial job values for any - print jobs. For example, "notification-profile" can be - set so that when a print job is successfully sent to a - printer, e-mail is sent to the user. - - - - - - ${XPCONFIGDIR}/C/print/models/PSdefault/model-config - ${XPCONFIGDIR}/C/print/models/PSdefault/fonts/fonts.dir - ${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00051.pmf - ${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00093.pmf - - - - The `model-config' file has attributes that describe the - printer model's capabilities and default settings. - Printer model fonts may also be present. The model-config - file also identifies the print ddx driver to be used. - - For each printer model supported, a complete hierarchy of - files should exist. In most cases, these files do not - need to be modified. - - - - - - ${XPCONFIGDIR}/C/print/ddx-config/raster/pdf - ${XPCONFIGDIR}/C/print/ddx-config/raster/pcl - ${XPCONFIGDIR}/C/print/ddx-config/raster/postscript - - - - The print ddx drivers can have highly specific - configuration files to control their behavior. In most - cases, these files do not need to be modified. - - - - - - - - - SEE ALSO - - - - - - - Xprint__miscmansuffix__ - X11__miscmansuffix__ - xplsprinters__appmansuffix__ - xprehashprinterlist__appmansuffix__ - xphelloworld__appmansuffix__ - xpxmhelloworld__appmansuffix__ - xpawhelloworld__appmansuffix__ - xpxthelloworld__appmansuffix__ - xpsimplehelloworld__appmansuffix__ - Xserver__appmansuffix__ - - - libXp__libmansuffix__ - libXprintUtils__libmansuffix__ - libXprintAppUtils__libmansuffix__ - XmPrintShell__libmansuffix__ - XawPrintShell__libmansuffix__ - Xprint FAQ (http://xprint.mozdev.org/docs/Xprint_FAQ.html) - Xprint main site (http://xprint.mozdev.org/) - - - - - - AUTHORS - - This manual page was written by - Drew Parsons dparsons@debian.org and - Roland Mainz roland.mainz@nrubsig.org, - with some help from the man page at - http://www.sins.com.au/unix/manpages/Xprt.html and the XFree86 - man page for Xserver1. - - - - - - diff --git a/hw/xprint/etc/Makefile.am b/hw/xprint/etc/Makefile.am deleted file mode 100644 index 0a960cd1b..000000000 --- a/hw/xprint/etc/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -SUBDIRS = init.d profile.d Xsession.d diff --git a/hw/xprint/etc/Xsession.d/92xprint-xpserverlist b/hw/xprint/etc/Xsession.d/92xprint-xpserverlist deleted file mode 100644 index 60d964a34..000000000 --- a/hw/xprint/etc/Xsession.d/92xprint-xpserverlist +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -##################################################################### -### File: 92xprint-xpserverlist -### -### Default Location: /etc/X11/Xsession.d/ -### -### Purpose: Setup Xprint env vars -### -### Description: This script is invoked by means of the Xsession file -### at user login. -### -### Invoked by: /etc/X11/Xsession -### -### (c) Copyright 2003-2004 Roland Mainz -### -### please send bugfixes or comments to https://bugs.freedesktop.org -### -##################################################################### - - -# -# Obtain list of Xprint servers -# - -if [ -x "/etc/init.d/xprint" ] ; then - XPSERVERLIST="`/etc/init.d/xprint get_xpserverlist`" - export XPSERVERLIST -fi - -########################## eof ##################### diff --git a/hw/xprint/etc/Xsession.d/Makefile.am b/hw/xprint/etc/Xsession.d/Makefile.am deleted file mode 100644 index 96a5ee73b..000000000 --- a/hw/xprint/etc/Xsession.d/Makefile.am +++ /dev/null @@ -1,2 +0,0 @@ -xpcdir = $(sysconfdir)/X11/Xsession.d -dist_xpc_DATA = 92xprint-xpserverlist diff --git a/hw/xprint/etc/init.d/Makefile.am b/hw/xprint/etc/init.d/Makefile.am deleted file mode 100644 index 0cf1adc92..000000000 --- a/hw/xprint/etc/init.d/Makefile.am +++ /dev/null @@ -1,12 +0,0 @@ -include $(top_srcdir)/cpprules.in - -noinst_PRE = xprint -BUILT_SOURCES = $(noinst_PRE) -CLEANFILES = $(noinst_PRE) xprint.pre - -CPP_FILES_FLAGS = -DProjectRoot='"$(PROJECTROOT)"' -DOS_LINUX - -xprint.pre: xprint.cpp - $(SED) -e 's/^\(\s\+\)#/\1XCOMM/' ${srcdir}/xprint.cpp > $@ - -EXTRA_DIST = xprint.cpp diff --git a/hw/xprint/etc/init.d/xprint.cpp b/hw/xprint/etc/init.d/xprint.cpp deleted file mode 100644 index dbfd1e139..000000000 --- a/hw/xprint/etc/init.d/xprint.cpp +++ /dev/null @@ -1,1277 +0,0 @@ -XCOMM!/bin/sh -XCOMM -XCOMM Copyright 2002-2004 by Roland Mainz . -XCOMM -XCOMM This script manages the Xprint server side - -XCOMM Basic support for IRIX-style "chkconfig" -XCOMM chkconfig: 2345 61 61 -XCOMM description: Startup/shutdown script for Xprint server(s) - -XCOMM Basic support for the Linux Standard Base Specification 1.0.0 -XCOMM (Note: The Should-Start/Stop lines are there so that this works in the -XCOMM future, when the LSB adopts these. The X-UnitedLinux lines are there -XCOMM so that it works right now.) -XCOMM## BEGIN INIT INFO -XCOMM Provides: xprint -XCOMM Required-Start: $local_fs $remote_fs $syslog $network -XCOMM Required-Stop: $local_fs $remote_fs $syslog -XCOMM Should-Start: cups lpd xfs -XCOMM Should-Stop: cups lpd xfs -XCOMM X-UnitedLinux-Should-Start: cups lpd xfs -XCOMM X-UnitedLinux-Should-Stop: cups lpd xfs -XCOMM Default-Start: 3 5 -XCOMM Default-Stop: 0 1 2 6 -XCOMM Description: Startup/shutdown script for Xprint server(s) -XCOMM## END INIT INFO - -#undef sun -#undef unix - -XCOMM########################################################################### -XCOMM -XCOMM This script has three main tasks: -XCOMM 1. Start Xprint servers ("Xprt") at boot time. -XCOMM 2. Shutdown Xprint servers when the machine is being shut down. -XCOMM 3. Query the list of available printers. -XCOMM -XCOMM Additional tasks are: -XCOMM 4. Restart ('restart'|'force-reload') and conditional restart -XCOMM ('condrestart'/'try-restart') for Linux support -XCOMM 5. Wrapping of application call with setting XPSERVERLIST ('wrapper') -XCOMM -XCOMM Usage: -XCOMM - Start Xprint server(s) manually: -XCOMM % /etc/init.d/xprint start -XCOMM -XCOMM - Stop Xprint server(s) manually: -XCOMM % /etc/init.d/xprint stop -XCOMM -XCOMM - Populate $XPSERVERLIST env var (for example as part of a global -XCOMM login script like /etc/profile or per-user login scripts like -XCOMM $HOME/.profile (sh/ksh/bash)) -XCOMM % XPSERVERLIST="`/etc/init.d/xprint get_xpserverlist`" -XCOMM % export XPSERVERLIST -XCOMM -XCOMM Installation: -XCOMM Copy this script to /etc/init.d/xprint and make sure that it is -XCOMM executable. If your installation is LSB-compliant, then run -XCOMM % /usr/lib/lsb/install_initd /etc/init.d/xprint -XCOMM to start the service on startup. Otherwise, manually create links -XCOMM to the matching run levels. -XCOMM Examples: -XCOMM - Solaris 2.7/2.8/2.9: -XCOMM % cp xprint /etc/init.d/xprint -XCOMM % chmod a+rx /etc/init.d/xprint -XCOMM % ln /etc/init.d/xprint /etc/rc0.d/K38xprint -XCOMM % ln /etc/init.d/xprint /etc/rc1.d/K38xprint -XCOMM % ln /etc/init.d/xprint /etc/rc2.d/S81xprint -XCOMM % ln /etc/init.d/xprint /etc/rcS.d/K38xprint -XCOMM -XCOMM - SuSE Linux 7.3 -XCOMM % cp xprint /etc/init.d/xprint -XCOMM % chmod a+rx /etc/init.d/xprint -XCOMM % ln -s ../xprint /etc/init.d/rc3.d/K13xprint -XCOMM % ln -s ../xprint /etc/init.d/rc3.d/S12xprint -XCOMM % ln -s ../xprint /etc/init.d/rc5.d/K13xprint -XCOMM % ln -s ../xprint /etc/init.d/rc5.d/S12xprint -XCOMM % ln -s ../xprint /etc/init.d/rc2.d/K13xprint -XCOMM % ln -s ../xprint /etc/init.d/rc2.d/S12xprint -XCOMM -XCOMM - SuSE Linux 6.4: -XCOMM % cp xprint /sbin/init.d/xprint -XCOMM % chmod a+rx /sbin/init.d/xprint -XCOMM % ln -s ../xprint /sbin/init.d/rc2.d/K20xprint -XCOMM % ln -s ../xprint /sbin/init.d/rc2.d/S20xprint -XCOMM % ln -s ../xprint /sbin/init.d/rc3.d/K20xprint -XCOMM % ln -s ../xprint /sbin/init.d/rc3.d/S20xprint -XCOMM -XCOMM Notes: -XCOMM - The Xprint servers must be started _after_ the print -XCOMM spooler or the server(s) may refuse to start -XCOMM - The script should be readable by all users to ensure that they -XCOMM can use the "get_xpserverlist"-option -XCOMM -XCOMM Custom configuration: -XCOMM - Edit the function setup_config() in this script to match your needs -XCOMM -XCOMM Known bugs/ToDo/Notes: -XCOMM - The shell script assumes that a Xserver can be reached via -XCOMM "hostname:displaynum" where "hostname" is obtained from -XCOMM "/usr/bin/hostname". It may happen that a kernel firewall -XCOMM blocks an X connection on the same host (e.g. client && Xserver -XCOMM are running on the same host). -XCOMM Suggested fix: Fix the firewall config. -XCOMM Suggested workaround: Edit this script and replace the use of -XCOMM /usr/bin/hostname with "echo 'localhost'". -XCOMM -XCOMM########################################################################### -XCOMM - - -XCOMM########################################################################### - -fatal_error() -{ - echo "${0}: ## FATAL ERROR: ${1}" 1>&2 - exit 1 -} - -error_echo() -{ - echo "${0}: ## ERROR: ${1}" 1>&2 -} - -warning_echo() -{ - echo "${0}: ## WARNING: ${1}" 1>&2 -} - -verbose_echo() -{ - echo "${0}: ${1}" -} - -msg() -{ - echo "${1}" -} - -XCOMM########################################################################### - -#ifndef OS_LINUX -XCOMM Force use of a POSIX conformant sh -XCOMM (Solaris /sbin/sh is plain Bourne shell) -[ "$1" != "posix_sh_forced" -a -x /bin/ksh ] && exec /bin/ksh "$0" posix_sh_forced "$@" -[ "$1" != "posix_sh_forced" -a -x /bin/bash ] && exec /bin/bash --norc --noprofile "$0" posix_sh_forced "$@" -[ "$1" != "posix_sh_forced" -a -x /usr/local/bin/ksh ] && exec /usr/local/bin/ksh "$0" posix_sh_forced "$@" -[ "$1" != "posix_sh_forced" -a -x /usr/local/bin/bash ] && exec /usr/local/bin/bash --norc --noprofile "$0" posix_sh_forced "$@" -if [ "$1" != "posix_sh_forced" ] ; then - echo "${0}: ## FATAL ERROR: No POSIX-shell found." 1>&2 - exit 1 -fi - -shift # Drop "posix_sh_forced" -#endif /* !OS_LINUX */ - -XCOMM#debug -XCOMM set -x - -XCOMM Change current dir to a location which is writeable by everyone -cd /tmp - -XCOMM Clear some environment variables -unset TEMP TMPDIR SCREENDIR - -XCOMM Set search path for commands -export PATH=/usr/bin:/bin:/usr/sbin:/sbin -#ifdef OS_SOLARIS -export PATH=/usr/xpg4/bin:${PATH} -#endif - -XCOMM# Try to figure-out where X11 was installed -#if defined(OS_SOLARIS) -XPROJECTROOT=/usr/openwin -export OPENWINHOME=/usr/openwin -#elif defined(OS_AIX) -XPROJECTROOT=/usr/lpp/X11 -#else -#if defined(ProjectRoot) -[ -d ProjectRoot/bin ] && XPROJECTROOT=ProjectRoot -#endif -[ -d /usr/X11/bin ] && XPROJECTROOT=/usr/X11 -[ -d /usr/X11R6/bin ] && XPROJECTROOT=/usr/X11R6 -#endif -XPCUSTOMGLUE=DEF_XPCUSTOMGLUE # This is used for customizing this script -export XPROJECTROOT XPCUSTOMGLUE - -if [ -z "${XPROJECTROOT}" ] ; then - fatal_error "Unknown XProjectRoot." -fi - -XCOMM Set the location of the Xprt binary we want to use. -XPRT_BIN="${XPROJECTROOT}/bin/Xprt" - -XCOMM Set the location of the global file where we store the locations -XCOMM of the system-wide servers -if [ -d /var/run ] ; then - XP_GLOBAL_SERVERS=/var/run/Xprint_servers -else - XP_GLOBAL_SERVERS=/tmp/.Xprint_servers -fi - -XCOMM ${LOGNAME} will not work if user su'ed into another account -export CURRLOGNAME="$(id -u -n)" - -XCOMM Set location where we want to store the list of Xprint servers managed -XCOMM by this user -XCOMM - If we start as "root" use the global file -XCOMM - If we start as normal user use a per-user file - -if [ "${CURRLOGNAME}" != "root" -a "${CURRLOGNAME}" != "" ] ; then - XP_PER_USER_SERVERS="/tmp/.Xprint_servers_${CURRLOGNAME}" - XP_SERVERS="${XP_PER_USER_SERVERS}" -else - XP_SERVERS="${XP_GLOBAL_SERVERS}" -fi - -XCOMM Set umask that owner can r/w all files and everyone else can read them -umask 022 - -XCOMM Bump limit for per-process open files to ensure that Xprt can open many many fonts -ulimit -n 1024 - -XCOMM########################################################################### - -XCOMM Get list of fonts for a given display -get_fontlist_from_display() -{ - ${XPROJECTROOT}/bin/xset -display "${1}" q | - awk "/Font Path:/ { i=1 ; next } i==1 { print \$0 ; i=0 }" | - fontpath2fontlist -} - -XCOMM Get list from a fontserver config -get_fontlist_from_xfs_config() -{ - if [ ! -r "${1}" ] ; then - return 0 - fi - - ( - cat "${1}" | - while read -r i ; do - for val in $i; do - case $val in - \#*) break ;; - ?*=*) key="${val%%=*}" ;; - =*) key="${tok}" ;; - *) [ "${key}" = "catalogue" -a "${tok}" != "" ] && echo "${tok}" ;; - esac - tok="${val#*=}" - done - done - ) | tr "," "\n" | fontpath2fontlist -} - -get_fontlist_from_all_xfs_configs() -{ - get_fontlist_from_xfs_config "/etc/openwin/fs/fontserver.cfg" - get_fontlist_from_xfs_config "/usr/openwin/lib/X11/fontserver.cfg" - get_fontlist_from_xfs_config "/etc/X11/fs-xtt/config" - get_fontlist_from_xfs_config "/etc/X11/fs/config" - get_fontlist_from_xfs_config "/etc/X11/xfs/config" - get_fontlist_from_xfs_config "${XPROJECTROOT}/lib/X11/fs/config" -} - -get_fontlist_from_xf86config() -{ - srcxconf="" - - XCOMM see xorg.conf(5x) manual page for the list of locations used here - [ "${srcxconf}" = "" -a -f "/etc/X11/xorg.conf" ] && srcxconf="/etc/X11/xorg.conf" - [ "${srcxconf}" = "" -a -f "/usr/X11R6/etc/X11/xorg.conf" ] && srcxconf="/usr/X11R6/etc/X11/xorg.conf" - [ "${srcxconf}" = "" -a -f "/etc/X11/xorg.conf-4" ] && srcxconf="/etc/X11/xorg.conf-4" - [ "${srcxconf}" = "" -a -f "/etc/X11/xorg.conf" ] && srcxconf="/etc/X11/xorg.conf" - [ "${srcxconf}" = "" -a -f "/etc/xorg.conf" ] && srcxconf="/etc/xorg.conf" - [ "${srcxconf}" = "" -a -f "/usr/X11R6/etc/X11/xorg.conf.${hostname}" ] && srcxconf="/usr/X11R6/etc/X11/xorg.conf.${hostname}" - [ "${srcxconf}" = "" -a -f "/usr/X11R6/etc/X11/xorg.conf-4" ] && srcxconf="/usr/X11R6/etc/X11/xorg.conf-4" - [ "${srcxconf}" = "" -a -f "/usr/X11R6/etc/X11/xorg.conf" ] && srcxconf="/usr/X11R6/etc/X11/xorg.conf" - [ "${srcxconf}" = "" -a -f "/usr/X11R6/lib/X11/xorg.conf.${hostname}" ] && srcxconf="/usr/X11R6/lib/X11/xorg.conf.${hostname}" - [ "${srcxconf}" = "" -a -f "/usr/X11R6/lib/X11/xorg.conf-4" ] && srcxconf="/usr/X11R6/lib/X11/xorg.conf-4" - [ "${srcxconf}" = "" -a -f "/usr/X11R6/lib/X11/xorg.conf" ] && srcxconf="/usr/X11R6/lib/X11/xorg.conf" - - XCOMM Xfree86 locations - [ "${srcxconf}" = "" -a -f "/etc/X11/XF86Config-4" ] && srcxconf="/etc/X11/XF86Config-4" - [ "${srcxconf}" = "" -a -f "/etc/X11/XF86Config" ] && srcxconf="/etc/X11/XF86Config" - - - if [ "${srcxconf}" = "" ] ; then - return 0 - fi - - currsection="" - cat "${srcxconf}" | - while read i1 i2 i3 i4 ; do - # Strip "\"" from I2 - i2="${i2#\"}" ; i2="${i2%\"}" - - case "${i1}" in - \#*) - continue - ;; - 'Section') - currsection="${i2}" - ;; - 'EndSection') - currsection="" - ;; - 'FontPath') - [ "$currsection" = "Files" ] && echo "${i2%:unscaled}" - ;; - esac - done | egrep -v -i "tcp/|tcp4/|tcp6/|unix/" - - return 0 -} - -get_fontlist_from_defoma() -{ - # Include Debian defoma font directory where relevant - if [ -d "/var/lib/defoma/x-ttcidfont-conf.d/dirs" ] ; then - find "/var/lib/defoma/x-ttcidfont-conf.d/dirs" -name fonts.dir | - while read i ; do echo "${i%/fonts.dir}" ; done - fi -} - -XCOMM Get list of system fonts -get_system_fontlist() -{ -#if defined(OS_SOLARIS) - ## List the standard X11 fonts - # echo "${XPROJECTROOT}/lib/X11/fonts/F3/" - # echo "${XPROJECTROOT}/lib/X11/fonts/F3bitmaps/" - echo "${XPROJECTROOT}/lib/X11/fonts/Type1/" - echo "${XPROJECTROOT}/lib/X11/fonts/Type1/outline/" - # We cannot use /usr/openwin/lib/X11/fonts/Type1/sun/ - see - # http://xprint.mozdev.org/bugs/show_bug.cgi?id=5726 - # ("Xprint doesn't start under Solaris 2.9 due *.ps files in /usr/openwin/lib/X11/fonts/Type1/sun/fonts.dir") - #echo "${XPROJECTROOT}/lib/X11/fonts/Type1/sun/" - echo "${XPROJECTROOT}/lib/X11/fonts/TrueType/" - echo "${XPROJECTROOT}/lib/X11/fonts/Speedo/" - echo "${XPROJECTROOT}/lib/X11/fonts/misc/" - echo "${XPROJECTROOT}/lib/X11/fonts/75dpi/" - echo "${XPROJECTROOT}/lib/X11/fonts/100dpi/" - - ## List all fonts in all locales installed on this machine - cat /usr/openwin/lib/locale/''*/OWfontpath | tr "," "\n" | sort -u -#elif defined(OS_LINUX) - ( - get_fontlist_from_defoma - - get_fontlist_from_xf86config - - # Getting font paths from XFS is mainly required for compatibilty to RedHat - get_fontlist_from_all_xfs_configs - - ## List all fonts in all locales installed on this machine - ( - [ -d "/usr/share/fonts" ] && find /usr/share/fonts -name fonts.dir - find "${XPROJECTROOT}/lib/X11/fonts" -name fonts.dir - ) | - while read i ; do echo "${i%/fonts.dir}" ; done - ) | sort -u -#else - ## List the standard X11 fonts - # (AIX should be handled like Solaris but I did not found a way to - # enumerate all fonts in all installed locales without scanning the - # dirs manually) - echo "${XPROJECTROOT}/lib/X11/fonts/Type1/" - echo "${XPROJECTROOT}/lib/X11/fonts/TrueType/" - echo "${XPROJECTROOT}/lib/X11/fonts/TTF/" - echo "${XPROJECTROOT}/lib/X11/fonts/Speedo/" - echo "${XPROJECTROOT}/lib/X11/fonts/misc/" - echo "${XPROJECTROOT}/lib/X11/fonts/75dpi/" - echo "${XPROJECTROOT}/lib/X11/fonts/100dpi/" - echo "${XPROJECTROOT}/lib/X11/fonts/" -#endif -} - -XCOMM Filter fonts per given extended regular expressions -XCOMM (and make sure we filter any model-config fonts - they are managed by Xprt internally) -filter_fontlist() -{ - egrep -- "${1}" | fgrep -v "/models/" | egrep -v -- "${2}" -} - -XCOMM Filter font paths with unsupported font types -XCOMM (such as CID fonts) -filter_unsupported_fonts() -{ - egrep -v -i "/cid(/$|$)|/csl(/$|$)" -} - -XCOMM Validate fontpath -XCOMM Only return valid font path entries (note that these entries may -XCOMM include non-file stuff like font server references) -validate_fontlist() -{ - while read i ; do - case "${i}" in - # Check if font path entry is a font server... - tcp/''*|tcp4/''*|tcp6/''*|unix/''*) - echo "${i}" - ;; - # ... if not check if the path is accessible - # and has a valid "fonts.dir" index - *) - [ -f "${i}/fonts.dir" ] && echo "${i}" - ;; - esac - done -} - -XCOMM Build a comma-seperated list of fonts (font path) from a list of fonts -fontlist2fontpath() -{ - fp="" - read fp; - while read i ; do - fp="${fp},${i}" - done - - echo "$fp" -} - -XCOMM Build a list (one item per line) of fonts from a font path -fontpath2fontlist() -{ - while read i ; do - echo "${i}" | tr "," "\n" - done -} - -XCOMM Sort scaleable fonts (PS Type1 and TrueType) first in a font list -sort_scaleable_fonts_first() -{ - i="$(fontlist2fontpath)" - # First list PS Type1 fonts... - echo "${i}" | fontpath2fontlist | fgrep "/Type1" - # ... then TrueType fonts ... - echo "${i}" | fontpath2fontlist | egrep -i "/TrueType|/TT(/$|$)|/TTF(/$|$)" - # ... then all others - echo "${i}" | fontpath2fontlist | egrep -v -i "/Type1|/TrueType|/TT(/$|$)|/TTF(/$|$)" -} - -XCOMM Check if a X display is used by a Xserver or not -XCOMM Known bugs: -XCOMM - there is no way in plain bourne shell or bash (see comment about ksh93 -XCOMM below) to test if a Xserver sits only on a socket and not on a pipe -XCOMM - some Xserver's don't cleanup their stuff in /tmp on exit which may end -XCOMM in the problem that we don't detect possible free display numbers -XCOMM (one problem is that only ksh93 can do stuff like -XCOMM "cat "${lastdisplaynumreturned_store}" - return 0 - fi - done - - # Using "magic" value of 189 here due lack of a better solution - echo "189" - echo "189" >"${lastdisplaynumreturned_store}" - return 0 -} - -XCOMM Check if a process exists or not -pexists() -{ - [ "$1" = "" ] && return 1; - - # Use of /proc would be better but not all platforms (like AIX) have procfs - [ "$(ps -p $1 | fgrep $1)" != "" ] && return 0; - return 1 -} - -XCOMM Check if there is a spooler running... -is_spooler_running() -{ - # This covers Linux lpd, CUPS, Solaris and AIX 4.x - but what about - # AIX 5.x, HP-UX and IRIX ? - - [ "$(ps -A | egrep 'lpd|lpsched|cupsd|qdaemon' | fgrep -v 'grep')" != "" ] && return 0; - return 1 -} - -XCOMM Wait until the spooler system has been started (but not more than 30secs) -wait_for_print_spooler() -{ - for i in 1 2 3 4 5 6 7 8 9 10 ; do - is_spooler_running && return 0; - sleep 3 - done - - return 0 -} - -lock_server_registry() -{ - lock_counter=0 # counts in 1/100s - waiting_for_lock_msg_send="false" - while ! mkdir "${XP_SERVERS}.lock" 2>/dev/null ; do - # print notice after 2 seconds - if [ ${lock_counter} -gt 200 -a "${waiting_for_lock_msg_send}" != "true" ] ; then - echo "${0}: waiting for lock(=${XP_SERVERS}.lock)..." - waiting_for_lock_msg_send="true" - fi - - # tread the lock as "broken" after 20 seconds - if [ ${lock_counter} -gt 2000 ] ; then - echo "${0}: WARNING: lock timeout for lock(=${XP_SERVERS}.lock)." - return 0 - fi - - if [ -x /bin/usleep ] ; then - /bin/usleep 200000 - lock_counter=$((${lock_counter} + 20)) # 20/100s - else - sleep 1 - lock_counter=$((${lock_counter} + 100)) # 100/100s - fi - done -} - -unlock_server_registry() -{ - rmdir "${XP_SERVERS}.lock" -} - -XCOMM Kill dead registry locks (silently!) -kill_dead_registry_locks() -{ - rm -Rf "${XP_SERVERS}.lock" -} - -XCOMM Start Xprint servers -start_servers() -{ - # Write registry "intro" ... - lock_server_registry - echo "# Xprint server list" >>"${XP_SERVERS}" - echo "# File is for private use for ${0}." >>"${XP_SERVERS}" - echo "# Do not edit, rely on the content or file format." >>"${XP_SERVERS}" - unlock_server_registry - - hostname="$(hostname)" - - default_fontpath="$(get_system_fontlist | fontlist2fontpath)" - default_fontpath_acceptpattern=".*"; - default_fontpath_rejectpattern="_No_Match_"; # Match nothing - - curr=0 - while [ $curr -lt $num_xpstart ] ; do - if [ "${xpstart_remote_server[$curr]}" != "" ] ; then - # Remote Xprt, just put the entry into the registry - lock_server_registry - echo "display=${xpstart_remote_server[$curr]}" >>"${XP_SERVERS}" - unlock_server_registry - else - # Run block in seperate process to avoid that changes to the - # xpstart_* variables affect the next cycle - ( - # Use defaults if there are no special options - [ "${xpstart_fontpath[$curr]}" = "" ] && xpstart_fontpath[$curr]="${default_fontpath}"; - [ "${xpstart_fontpath_acceptpattern[$curr]}" = "" ] && xpstart_fontpath_acceptpattern[$curr]="$default_fontpath_acceptpattern"; - [ "${xpstart_fontpath_rejectpattern[$curr]}" = "" ] && xpstart_fontpath_rejectpattern[$curr]="$default_fontpath_rejectpattern"; - [ "${xpstart_displayid[$curr]}" = "" ] && xpstart_displayid[$curr]="$(FindFreeXDisplayNum)" - [ "${xpstart_logger[$curr]}" = "" ] && xpstart_logger[$curr]="logger -p lpr.notice -t Xprt_${xpstart_displayid[$curr]}"; - [ "${xpstart_logfile[$curr]}" = "" ] && xpstart_logfile[$curr]="/dev/null"; - [ "${xpstart_xprt_binary[$curr]}" = "" ] && xpstart_xprt_binary[$curr]="${XPRT_BIN}"; - if [ "${xpstart_xprt_binary[$curr]}" = "/usr/openwin/bin/Xprt" -o "$(uname -s)" = "SunOS" ] ; then - # Solaris /usr/openwin/bin/Xprt does not support "-nolisten tcp" - # yet nor is it possible to run a Xserver on a unix socket only - # in Solaris since access to the unix domain sockets in - # /tmp/.X11-pipe and /tmp/.X11-unix is restricted to applications - # with group-id "root" (e.g. the Xprt server would need to be - # setgid "root" that plain users can start it listening on a unix - # socket only) - [ "${xpstart_options[$curr]}" = "" ] && xpstart_options[$curr]="-ac -pn" - else - [ "${xpstart_options[$curr]}" = "" ] && xpstart_options[$curr]="-ac -pn -nolisten tcp" - fi - - # Check if the Xprt binary is available - if [ ! -x "${xpstart_xprt_binary[$curr]}" ] ; then - error_echo "Can't find \"${xpstart_xprt_binary[$curr]}\"." - exit 1 # exit block - fi - - # Verify and set location of font encodings directory file - if [ "${xpstart_font_encodings_dir[$curr]}" = "" ] ; then - if [ -f "${XPROJECTROOT}/lib/X11/fonts/xf86encodings/encodings.dir" ] ; then - xpstart_font_encodings_dir[$curr]="${XPROJECTROOT}/lib/X11/fonts/xf86encodings/encodings.dir" - else - xpstart_font_encodings_dir[$curr]="${XPROJECTROOT}/lib/X11/fonts/encodings/encodings.dir"; - fi - fi - - unset FONT_ENCODINGS_DIRECTORY - if [ ! -f "${xpstart_font_encodings_dir[$curr]}" ] ; then - warning_echo "Can't find \"${xpstart_font_encodings_dir[$curr]}\", TrueType font support may not work." - fi - - export FONT_ENCODINGS_DIRECTORY="${xpstart_font_encodings_dir[$curr]}" - - # Generate font path (containing only valid font path elements) - # from input font path and filter expressions - curr_fp=$(echo "${xpstart_fontpath[$curr]}" | - fontpath2fontlist | - filter_fontlist "${xpstart_fontpath_acceptpattern[$curr]}" "${xpstart_fontpath_rejectpattern[$curr]}" | - filter_unsupported_fonts | - sort_scaleable_fonts_first | - validate_fontlist | - fontlist2fontpath) - - # Set Xserver auditing level option - unset curr_audit - if [ "${xpstart_auditlevel[$curr]}" != "" ] ; then - curr_audit="-audit ${xpstart_auditlevel[$curr]}" - fi - - # Set Xprt -XpFile option - unset curr_xpfile - if [ "${xpstart_xpfile[$curr]}" != "" ] ; then - curr_xpfile="-XpFile ${xpstart_xpfile[$curr]}" - fi - - # Set custom XPCONFIGDIR (if there is one) - unset XPCONFIGDIR - if [ "${xpstart_xpconfigdir[$curr]}" != "" ] ; then - export XPCONFIGDIR="${xpstart_xpconfigdir[$curr]}" - fi - - # If someone uses "-nolisten tcp" make sure we do not add a hostname to force local transport - if [ "$(echo "${xpstart_options[$curr]}" | egrep "nolisten.*tcp")" != "" ] ; then - xp_display=":${xpstart_displayid[$curr]}" - else - xp_display="${hostname}:${xpstart_displayid[$curr]}" - fi - - ( - ( - "${xpstart_xprt_binary[$curr]}" \ - ${xpstart_options[$curr]} \ - ${curr_xpfile} ${curr_audit} \ - -fp ${curr_fp} \ - :${xpstart_displayid[$curr]} & - server_pid="$!" - - # Append the new server to the registry - lock_server_registry - echo "display=${xp_display} display_id=${xpstart_displayid[$curr]} pid=${server_pid}" >>"${XP_SERVERS}" - unlock_server_registry - - wait - echo "Xprint server pid=${server_pid} done, exitcode=$?." - - # Remove the dead server from the registry - # (only if the registry still exists - if /etc/init.d/xprint stop" gets called the registry - # will be removed - and we should not re-create it afterwards...) - lock_server_registry - if [ -f "${XP_SERVERS}" ] ; then - x="$(cat "${XP_SERVERS}")" # Store content of file "${XP_SERVERS}" in var "x" - echo "${x}" | fgrep -v "display_id=${xpstart_displayid[$curr]} pid=${server_pid}" >"${XP_SERVERS}" - fi - unlock_server_registry - ) 2>&1 | while read i ; do echo "$i" | tee -a "${xpstart_logfile[$curr]}" | ${xpstart_logger[$curr]} ; done - ) & - ) - fi - - curr=$(($curr + 1)) - done - - # Remove tmp. file created by |FindFreeXDisplayNum()| - rm -f "${lastdisplaynumreturned_store}" - - # Done. - lock_server_registry - echo "# EOF." >>"${XP_SERVERS}" - unlock_server_registry - return 0 -} - - -XCOMM Convenience function to check setup and start Xprt server(s) -do_start() -{ - if [ -f "${XP_SERVERS}" ] ; then - numservers="$(do_get_xpserverlist | wc -l)" - if [ ${numservers} -gt 0 ] ; then - verbose_echo "Xprint servers are already running." - return 0 - else - verbose_echo "Old server registry found, cleaning-up..." - do_stop - fi - fi - - # Check if we can write the registry file - touch "${XP_SERVERS}" 2>/dev/null - if [ ! -f "${XP_SERVERS}" ] ; then - error_echo "Cannot create \"${XP_SERVERS}\"." - # exit code 4 = user had insufficient privilege (LSB) - exit 4 - fi - - if ! setup_config ; then - error_echo "setup_config failed." - exit 1 - fi - - # Provide two paths here - one which simply starts the Xprt servers, - # assuming that there is a print spooler already running (or that - # ${XPCONFIG}/C/print/Xprinters provides static print queue entries - # (like for the PSspooldir print model)) and a 2nd path which - # explicitly checks if the print queue daemons are running - if true ; then - msg "Starting Xprint servers: Xprt." - start_servers - else - # Continue in the background if there is no spooler running yet (that - # we don't hold off the boot process nor run in a possible race-condition - # when /etc/init.d/lpd was not called yet but the runlevel script waits - # for us to finish first ... - if is_spooler_running ; then - msg "Starting Xprint servers: Xprt." - start_servers - else - msg "Starting Xprint servers (in the background): Xprt." - (wait_for_print_spooler ; start_servers) & - sleep 5 - fi - fi - - if [ "${CURRLOGNAME}" = "root" -a -d /var/lock/subsys/ ] ; then - touch /var/lock/subsys/xprint - fi -} - -XCOMM Convenience function to stop Xprt server(s) -do_stop() -{ - msg "Stopping Xprint servers: Xprt." - - lock_server_registry - if [ -f "${XP_SERVERS}" ] ; then - reglist="$(cat "${XP_SERVERS}")" - rm -f "${XP_SERVERS}" - fi - unlock_server_registry - - if [ "${reglist}" != "" ] ; then - echo "${reglist}" | - grep "^display=.*:.* pid=[0-9]*$" | - while read i ; do - ( - eval ${i} - if pexists ${pid} ; then - kill ${pid} - fi - - # Remove the X sockets/pipes which are not in use anymore - # (It would be better if the Xservers would cleanup this - # automatically, but most Xservers do not do that... ;-( - # Note that this will not work on Solaris where applications - # must run with groupid="root" if they want to write into - # /tmp/.X11-unix/ and/or /tmp/.X11-pipe/) - if [ "${display_id}" != "" ] ; then - rm -f "/tmp/.X${display_id}-lock" 2>/dev/null - rm -f "/tmp/.X11-unix/X${display_id}" 2>/dev/null - rm -f "/tmp/.X11-pipe/X${display_id}" 2>/dev/null - fi - ) - done - fi - - if [ "${CURRLOGNAME}" = "root" -a -d /var/lock/subsys/ ] ; then - rm -f /var/lock/subsys/xprint - fi - - # Remove any outstanding (dead) locks and cleanup - rm -f "${XP_SERVERS}" - kill_dead_registry_locks -} - -XCOMM Convenience function to obtain a list of available Xprint servers -do_get_xpserverlist() -{ - if [ -f "${XP_PER_USER_SERVERS}" -o -f "${XP_GLOBAL_SERVERS}" ] ; then - xpserverlist=$( - # Enumerate both per-user and global servers (in that order) - ( - [ -f "${XP_PER_USER_SERVERS}" ] && cat "${XP_PER_USER_SERVERS}" - [ -f "${XP_GLOBAL_SERVERS}" ] && cat "${XP_GLOBAL_SERVERS}" - ) | - egrep "^display=.*:.* pid=[0-9]*$|^display=.*:[0-9]*$" | - while read i ; do - ( - pid="none" - eval ${i} - # Check if the Xprt process exists (if possible) - if [ "$pid" != "none" ] ; then - if pexists ${pid} ; then - echo ${display} - fi - else - echo ${display} - fi - ) - done | tr "\n" " " - ) - # Only produce output if we have some entries... - [ "${xpserverlist}" != "" ] && echo "${xpserverlist}" - fi -} - -do_restart() -{ - msg "Restarting Xprint server(s): Xprt." - do_stop - sleep 1 - do_start -} - -do_diag() -{ - echo "##### Diag start $(date)." - - # General info - echo "## General info start." - ( - echo "PATH=\"${PATH}\"" - echo "TZ=\"${TZ}\"" - echo "LANG=\"${LANG}\"" - echo "uname -a=\"$(uname -a)\"" - echo "uname -s=\"$(uname -s)\"" - echo "uname -p=\"$(uname -p)\"" - echo "uname -i=\"$(uname -i)\"" - echo "uname -m=\"$(uname -m)\"" - echo "has /etc/SuSE-release ... $([ -f "/etc/SuSE-release" ] && echo "yes" || echo "no")" - echo "has /etc/redhat-release ... $([ -f "/etc/redhat-release" ] && echo "yes" || echo "no")" - echo "has /etc/debian_version ... $([ -f "/etc/debian_version" ] && echo "yes" || echo "no")" - echo "how many Xprt servers are running ...$(ps -ef | fgrep Xprt | fgrep -v "grep" | wc -l)" - ) 2>&1 | while read i ; do echo " $i" ; done - echo "## General info end." - - # Testing font paths - echo "## Testing font paths start." - ( - get_system_fontlist | - filter_unsupported_fonts | - sort_scaleable_fonts_first | - validate_fontlist | while read d ; do - echo "#### Testing \"${d}\" ..." - if [ ! -d "$d" ] ; then - echo "# Error: $d does not exists." - continue - fi - if [ ! -r "$d" ] ; then - echo "# Error: $d not readable." - continue - fi - if [ ! -f "${d}/fonts.dir" ] ; then - echo "# Error: ${d}/fonts.dir not found." - continue - else - if [ ! -r "${d}/fonts.dir" ] ; then - echo "# Error: ${d}/fonts.dir not readable." - continue - fi - fi - if [ -f "${d}/fonts.alias" ] ; then - if [ ! -r "${d}/fonts.alias" ] ; then - echo "# Error: ${d}/fonts.alias not readable." - fi - fi - - if [ "$(cat "${d}/fonts.dir" | fgrep 'cursor')" != "" ] ; then - echo "${d}/fonts.dir has cursor font." - fi - if [ "$(cat "${d}/fonts.dir" | fgrep 'fixed')" != "" ] ; then - echo "${d}/fonts.dir has fixed font." - fi - - if [ -r "${d}/fonts.alias" ] ; then - if [ "$(cat "${d}/fonts.alias" | fgrep 'cursor')" != "" ] ; then - echo "${d}/fonts.alias has cursor font." - fi - if [ "$(cat "${d}/fonts.alias" | fgrep 'fixed')" != "" ] ; then - echo "${d}/fonts.alias has fixed font." - fi - fi - - linenum=0 - cat "${d}/fonts.dir" | while read i1 i2 i3 i4 ; do - linenum=$((${linenum} + 1)) - [ ${linenum} -eq 1 ] && continue - - if [ ! -f "${d}/${i1}" ] ; then - echo "ERROR: ${d}/fonts.dir line ${linenum} has non-exististant font \"${i1}\" (=\"${i1} ${i2} ${i3} ${i4}\")" - fi - done - done - ) 2>&1 | while read i ; do echo " $i" ; done - echo "## Testing font paths end." - - echo "##### Diag End $(date)." -} - -XCOMM Set platform-defaults for setup_config() -setup_config_defaults() -{ - curr_num_xpstart="${1}" - - #### Defaults for Linux/Solaris - # Start Xprt using builtin XPCONFIGDIR at a free display numer - # (Solaris(=SunOS5.x)'s /usr/openwin/bin/Xprt supports TrueType fonts, - # therefore we don't need to filter them) - xpstart_fontpath[${curr_num_xpstart}]=""; - xpstart_fontpath_acceptpattern[${curr_num_xpstart}]=".*"; - xpstart_fontpath_rejectpattern[${curr_num_xpstart}]="/Speedo|/F3bitmaps|/F3"; - xpstart_displayid[${curr_num_xpstart}]=""; - xpstart_xpconfigdir[${curr_num_xpstart}]=""; - xpstart_xpfile[${curr_num_xpstart}]=""; - xpstart_auditlevel[${curr_num_xpstart}]="4"; - xpstart_options[${curr_num_xpstart}]=""; - xpstart_logger[${curr_num_xpstart}]=""; - # Check whether we have /dev/stderr (needed for old AIX + old Debian) - if [ -w "/dev/stderr" ] ; then - xpstart_logfile[${curr_num_xpstart}]="/dev/stderr"; - else - xpstart_logfile[${curr_num_xpstart}]="/dev/tty"; - fi - xpstart_xprt_binary[${curr_num_xpstart}]=""; - - # Custom rules for the GISWxprintglue package on Solaris - # (which uses Solaris's /usr/openwin/bin/Xprt but a custom config) - if [ "${XPCUSTOMGLUE}" = "GISWxprintglue" ] ; then - xpstart_xpconfigdir[${curr_num_xpstart}]="/opt/GISWxprintglue/server/etc/XpConfig" - xpstart_xprt_binary[${curr_num_xpstart}]="/usr/openwin/bin/Xprt" - fi - # Custom rules for the GISWxprint package on Solaris - # (which uses both it's own Xprt and a custom config) - if [ "${XPCUSTOMGLUE}" = "GISWxprint" ] ; then - xpstart_xpconfigdir[${curr_num_xpstart}]="/opt/GISWxprint/server/etc/XpConfig" - xpstart_xprt_binary[${curr_num_xpstart}]="/opt/GISWxprint/bin/Xprt" - xpstart_font_encodings_dir[${curr_num_xpstart}]="/opt/GISWxprint/lib/X11/fonts/encodings/encodings.dir" - fi - - ####################################################### - ### - ### Debian Xprint package default configuration - ### - if [ "${XPCUSTOMGLUE}" = "DebianGlue" ] ; then - # Set XPCONFIGDIR=/usr/share/Xprint/xserver - xpstart_xpconfigdir[${curr_num_xpstart}]="/usr/share/Xprint/xserver"; - - # Use fixed display ID (":64"), or else all client programs will have to be - # restarted simply to update XPSERVERLIST to the latest ID when upgrading, - # which would be a nightmare. - xpstart_displayid[${curr_num_xpstart}]=64; - - # Do not send any messages to console - xpstart_logfile[${curr_num_xpstart}]="/dev/null"; - - # By default use binary provided by Debian's "xprt-xprintorg" package - # (=/usr/bin/Xprt), otherwise leave blank (e.g. use script's default - # (=/usr/X11R6/bin/Xprt)) - if [ -x "/usr/bin/Xprt" ] ; then - xpstart_xprt_binary[${curr_num_xpstart}]="/usr/bin/Xprt"; - fi - fi - ### - ### End Debian default configuration - ### - ####################################################### -} - -fetch_etc_initd_xprint_envvars() -{ - curr_num_xpstart="${1}" - - ## Process some $ETC_INITD_XPRINT_* vars after all which may be used by - # a user to override the hardcoded values here when starting Xprt per-user - # (a more flexible way is to provide an own setup config script in - # "~./Xprint_per_user_startup" - see above) - if [ "${ETC_INITD_XPRINT_XPRT_PATH}" != "" ] ; then - xpstart_xprt_binary[${curr_num_xpstart}]="${ETC_INITD_XPRINT_XPRT_PATH}" - fi - if [ "${ETC_INITD_XPRINT_XPCONFIGDIR}" != "" ] ; then - xpstart_xpconfigdir[${curr_num_xpstart}]="${ETC_INITD_XPRINT_XPCONFIGDIR}" - fi - if [ "${ETC_INITD_XPRINT_XPFILE}" != "" ] ; then - xpstart_xpfile[${curr_num_xpstart}]="${ETC_INITD_XPRINT_XPFILE}" - fi - if [ "${ETC_INITD_XPRINT_LOGFILE}" != "" ] ; then - xpstart_logfile[${curr_num_xpstart}]="${ETC_INITD_XPRINT_LOGFILE}" - fi - if [ "${ETC_INITD_XPRINT_DISPLAYID}" != "" ] ; then - xpstart_displayid[${curr_num_xpstart}]="${ETC_INITD_XPRINT_DISPLAYID}" - fi - if [ "${ETC_INITD_XPRINT_FONTPATH}" != "" ] ; then - xpstart_fontpath[${curr_num_xpstart}]="${ETC_INITD_XPRINT_FONTPATH}" - fi - if [ "${ETC_INITD_XPRINT_XPRT_OPTIONS}" != "" ] ; then - xpstart_options[${curr_num_xpstart}]="${ETC_INITD_XPRINT_XPRT_OPTIONS}" - fi - if [ "${ETC_INITD_XPRINT_AUDITLEVEL}" != "" ] ; then - xpstart_auditlevel[${curr_num_xpstart}]="${ETC_INITD_XPRINT_AUDITLEVEL}" - fi - if [ "${ETC_INITD_XPRINT_XF86ENCODINGSDIR}" != "" ] ; then - xpstart_font_encodings_dir[${curr_num_xpstart}]="${ETC_INITD_XPRINT_XF86ENCODINGSDIR}" - fi -} - -XCOMM########################################################################### -XCOMM setup_config() sets the configuration parameters used to start one -XCOMM or more Xprint servers ("Xprt"). -XCOMM The following variables are used: -XCOMM - "num_xpstart" - number of servers to start -XCOMM - "xpstart_fontpath[index]" - custom font path. Leave blank if you want -XCOMM the platform-specific default -XCOMM - "xpstart_fontpath_acceptpattern[index]" - extended regular expression -XCOMM (see egrep(1)) used to filter the font path - items only pass this -XCOMM filter if they match the pattern (leave blank if you want to filter -XCOMM nothing) -XCOMM - "xpstart_fontpath_rejectpattern[index]" - extended regular expression -XCOMM (see egrep(1)) used to filter the font path - items only pass this -XCOMM filter if they do not match the pattern (leave blank if you want to -XCOMM filter nothing) -XCOMM - "xpstart_font_encodings_dir[index]" - location of "encodings.dir". -XCOMM Leave blank to use the default. -XCOMM - "xpstart_displayid[index]" - display id to use for the Xprint server -XCOMM (leave blank to choose the next available free display id) -XCOMM - "xpstart_xpconfigdir[index]" - value for custom XPCONFIGDIR (leave blank -XCOMM if you don not want that that XPCONFIGDIR is set at Xprt startup) -XCOMM - "xpstart_xpfile[index]" - value used for Xprt's "-XpFile" option (leave -XCOMM blank if you do not want to set this option) -XCOMM - "xpstart_auditlevel[index]" - set Xserver auditing level (leave blank to -XCOMM use no auditing) -XCOMM - "xpstart_options[index]" - set further Xprt options (leave blank to set -XCOMM no further options) -XCOMM - "xpstart_logger[index]" - utility which gets stderr/stdout messages from -XCOMM Xprt and sends them to a logging daemon. Leave blank to use /usr/bin/logger -XCOMM to send such messages to the lpr.notice syslog) -XCOMM - "xpstart_logfile[index]" - log file to append stderr/stdout messages from -XCOMM Xprt to. Leave blank to send messages to /dev/null -XCOMM - "xpstart_xprt_binary[index]" - set custom Xprt binary (leave blank to use -XCOMM the platform-specifc default) -setup_config() -{ - num_xpstart=0; - - if [ "${ETC_INITD_XPRINT_CUSTOM_SETUP_CONFIG}" != "" ] ; then - user_cfg="${ETC_INITD_XPRINT_CUSTOM_SETUP_CONFIG}" - else - user_cfg="${HOME}/.Xprint_per_user_startup" - fi - - # Source per-user ~/.Xprint_per_user_startup file if there is one - # (and do not use the script's defaults below) - if [ -r "${user_cfg}" ] ; then - # Define API version which should be checked by ${HOME}/.Xprint_per_user_startup - # ${HOME}/.Xprint_per_user_startup should bail-out if the version differ - etc_initd_xprint_api_version=2 - - # Source per-user settings script - . "${user_cfg}" - - # done with setting the config for per-user Xprt instances - return 0; - else - # Use /etc/init.d/xprint's builtin config - # Each entry should start with |setup_config_defaults| to pull the - # platform defaults and finish with |num_xpstart=$(($num_xpstart + 1))| - # to end the entry - - # Set platform-defaults - setup_config_defaults "${num_xpstart}" - - ## -- snip -- - - # Admins can put their stuff "in" here... - - ## -- snip -- - - # Override script's builtin values with those a user may set via the - # $ETC_INIITD_XPRINT_* env vars - fetch_etc_initd_xprint_envvars "${num_xpstart}" - - num_xpstart=$((${num_xpstart} + 1)) - - return 0; - fi - - #### Sample 1: - # # Start Xprt on a free display ID with custom XPCONFIGDIR and without - # # Speedo and TrueType fonts - # xpstart_fontpath_rejectpattern[$num_xpstart]="/Speedo|/TrueType|/TT(/$|$)|/TTF(/$|$)"; - # xpstart_xpconfigdir[$num_xpstart]="/home/gisburn/cwork/Xprint/Xprt_config/XpConfig"; - # xpstart_auditlevel[$num_xpstart]="4"; - # xpstart_options[$num_xpstart]="-ac -pn"; - #num_xpstart=$(($num_xpstart + 1)) - - - #### Sample 2: - # # Start Xprt without TrueType fonts on a display 55 with custom - # # XPCONFIGDIR - # xpstart_fontpath_rejectpattern[$num_xpstart]="/TrueType|/TT(/$|$)|/TTF(/$|$)"; - # xpstart_displayid[$num_xpstart]=55; - # xpstart_xpconfigdir[$num_xpstart]="/home/gisburn/cwork/Xprint/Xprt_config/XpConfig"; - # xpstart_auditlevel[$num_xpstart]=4; - # xpstart_options[$num_xpstart]="-ac -pn"; - #num_xpstart=$(($num_xpstart + 1)) - - #### Sample 3: - # # Start Xprt without TrueType fonts on a display 56 with custom - # # XPCONFIGDIR and alternate "Xprinters" file - # xpstart_fontpath_rejectpattern[$num_xpstart]="/TrueType|/TT(/$|$)|/TTF(/$|$)"; - # xpstart_displayid[$num_xpstart]=56; - # xpstart_xpconfigdir[$num_xpstart]="/etc/XpConfig/default"; - # xpstart_xpfile[$num_xpstart]="/etc/XpConfig/default/Xprinters_test2" - # xpstart_auditlevel[$num_xpstart]="4"; - # xpstart_options[$num_xpstart]="-ac -pn"; - # xpstart_xprt_binary[$num_xpstart]=""; - #num_xpstart=$(($num_xpstart + 1)) - - #### Sample 4: - # # Start Xprt with Solaris ISO-8859-7 (greek(="el") locale) fonts on - # # display 57 - # xpstart_fontpath[$num_xpstart]="/usr/openwin/lib/locale/iso_8859_7/X11/fonts/75dpi,/usr/openwin/lib/locale/iso_8859_7/X11/fonts/Type1,/usr/openwin/lib/X11/fonts/misc/"; - # xpstart_fontpath_acceptpattern[$num_xpstart]=""; - # xpstart_fontpath_rejectpattern[$num_xpstart]="_No_Match_"; - # xpstart_displayid[$num_xpstart]="57"; - # xpstart_auditlevel[$num_xpstart]="4"; - # xpstart_options[$num_xpstart]="-ac -pn"; - #num_xpstart=$(($num_xpstart + 1)) - - #### Sample 5: - # # Start Xprt with the font list of an existing Xserver (excluding Speedo fonts) on - # # display 58 - # # Note that this only works within a X session. At system boot time - # # there will be no $DISPLAY to fetch the information from!! - # xpstart_fontpath[$num_xpstart]="$(get_fontlist_from_display ${DISPLAY} | fontlist2fontpath)"; - # xpstart_fontpath_acceptpattern[$num_xpstart]=""; - # xpstart_fontpath_rejectpattern[$num_xpstart]=""; - # xpstart_displayid[$num_xpstart]="58"; - # xpstart_xpconfigdir[$num_xpstart]=""; - # xpstart_auditlevel[$num_xpstart]="4"; - # xpstart_options[$num_xpstart]="-ac -pn"; - # xpstart_xprt_binary[$num_xpstart]=""; - #num_xpstart=$(($num_xpstart + 1)) - - #### Sample 6: - # # List remote Xprt's here - # # (note that there is no test to check whether these DISPLAYs are valid!) - # xpstart_remote_server[$num_xpstart]="sera:12" ; num_xpstart=$(($num_xpstart + 1)) - # xpstart_remote_server[$num_xpstart]="gandalf:19" ; num_xpstart=$(($num_xpstart + 1)) -} - -XCOMM########################################################################### - -XCOMM Main -case "$1" in - ## Start Xprint servers - 'start') - do_start - ;; - - ## Stop Xprint servers - # Note that this does _not_ kill Xprt instances started using this script - # by non-root users - 'stop') - do_stop - ;; - - ## Restart Xprint servers - 'restart'|'force-reload') - do_restart - ;; - - ## Reload configuration without stopping and restarting - 'reload') - # not supported - msg "reload not supported, use 'restart' or 'force-reload'" - exit 3 - ;; - - ## Restart Xprint only if it is already running - 'condrestart'|'try-restart') - # only restart if it is already running - [ -f /var/lock/subsys/xprint ] && do_restart || : - ;; - - ## Get list of all Xprint servers for this user - # (incl. per-user and system-wide instances) - 'get_xpserverlist') - do_get_xpserverlist - ;; - - ## Get status of Xprint servers, RedHat-style - 'status') - x="$(do_get_xpserverlist)" - if [ "${x}" != "" ] ; then - msg "Xprint (${x}) is running..." - exit 0 - else - msg "Xprint is stopped" - exit 3 - fi - ;; - - ## Wrapper - 'wrapper') - cmd="${2}" - [ "${cmd}" = "" ] && fatal_error "No command given." - shift ; shift - export XPSERVERLIST="$(do_get_xpserverlist)" - [ "${XPSERVERLIST}" = "" ] && fatal_error "No Xprint servers found." - exec "${cmd}" "$@" - ;; - - ## Wrapper for "xplsprinters" - 'lsprinters') - [ "${ETC_INITD_XPRINT_XPLSPRINTERS_PATH}" != "" ] && cmd="${ETC_INITD_XPRINT_XPLSPRINTERS_PATH}" - [ "${cmd}" = "" -a "${XPCUSTOMGLUE}" = "GISWxprintglue" ] && cmd="/opt/GISWxprintglue/bin/xplsprinters" - [ "${cmd}" = "" -a "${XPCUSTOMGLUE}" = "GISWxprint" ] && cmd="/opt/GISWxprint/bin/xplsprinters" - [ "${cmd}" = "" -a "${XPROJECTROOT}" != "" ] && cmd="${XPROJECTROOT}/bin/xplsprinters" - [ "${cmd}" = "" ] && cmd="xplsprinters" - - shift - export XPSERVERLIST="$(do_get_xpserverlist)" - [ "${XPSERVERLIST}" = "" ] && fatal_error "No Xprint servers found." - exec "${cmd}" "$@" - ;; - - ## Diagnostics - 'diag') - do_diag - ;; - - ## Print usage - *) - msg "Usage: $0 { start | stop | restart | reload | force-reload | status | condrestart | try-restart | wrapper | lsprinters | get_xpserverlist | diag }" - exit 2 -esac -exit 0 - -XCOMM EOF. diff --git a/hw/xprint/etc/profile.d/Makefile.am b/hw/xprint/etc/profile.d/Makefile.am deleted file mode 100644 index b91a9115a..000000000 --- a/hw/xprint/etc/profile.d/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -EXTRA_DIST = xprint.csh xprint.sh diff --git a/hw/xprint/etc/profile.d/xprint.csh b/hw/xprint/etc/profile.d/xprint.csh deleted file mode 100644 index 7cc675840..000000000 --- a/hw/xprint/etc/profile.d/xprint.csh +++ /dev/null @@ -1,16 +0,0 @@ -# -# /etc/profile.d/xprint.csh -# -# Copyright (c) 2002-2004 by Roland Mainz -# please send bugfixes or comments to http://xprint.mozdev.org/ - - -# -# Obtain list of Xprint servers -# - -if ( -f /etc/init.d/xprint ) then - setenv XPSERVERLIST "`/bin/sh /etc/init.d/xprint get_xpserverlist`" -endif - -# /etc/profile.d/xprint.csh ends here. diff --git a/hw/xprint/etc/profile.d/xprint.sh b/hw/xprint/etc/profile.d/xprint.sh deleted file mode 100644 index b5b46c1e7..000000000 --- a/hw/xprint/etc/profile.d/xprint.sh +++ /dev/null @@ -1,16 +0,0 @@ -# -# /etc/profile.d/xprint.sh -# -# Copyright (c) 2002-2004 by Roland Mainz -# please send bugfixes or comments to http://xprint.mozdev.org/ - -# -# Obtain list of Xprint servers -# - -if [ -f "/etc/init.d/xprint" ] ; then - XPSERVERLIST="`/bin/sh /etc/init.d/xprint get_xpserverlist`" - export XPSERVERLIST -fi - -# /etc/profile.d/xprint.sh ends here. diff --git a/hw/xprint/mediaSizes.c b/hw/xprint/mediaSizes.c deleted file mode 100644 index 7acc70679..000000000 --- a/hw/xprint/mediaSizes.c +++ /dev/null @@ -1,782 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ -/******************************************************************* -** -** ********************************************************* -** * -** * File: mediaSizes.c -** * -** * Contents: -** * Routines to return the sizes associated -** * with particular media and particular printers. -** * -** * Created: 2/19/96 -** * -** * Copyright: Copyright 1993,1995 Hewlett-Packard Company -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include -#include - -#include -#include "dixstruct.h" -#include "screenint.h" -#include "misc.h" -#include "scrnintstr.h" -#include - -#include "DiPrint.h" -#include "attributes.h" - -typedef struct { - XpOid page_size; - float width; - float height; -} PageDimensionsRec; - -static PageDimensionsRec PageDimensions[] = -{ - {xpoid_val_medium_size_na_letter, 215.9, 279.4}, - {xpoid_val_medium_size_na_legal, 215.9, 355.6}, - {xpoid_val_medium_size_executive, 184.15, 266.7}, - {xpoid_val_medium_size_folio, 210.82, 330.2}, - {xpoid_val_medium_size_invoice, 139.7, 215.9}, - {xpoid_val_medium_size_ledger, 279.4, 431.8}, - {xpoid_val_medium_size_quarto, 215.9, 275.082}, - {xpoid_val_medium_size_a, 215.9, 279.4}, - {xpoid_val_medium_size_b, 279.4, 431.8}, - {xpoid_val_medium_size_c, 431.8, 558.8}, - {xpoid_val_medium_size_d, 558.8, 863.6}, - {xpoid_val_medium_size_e, 863.6, 1117.6}, - {xpoid_val_medium_size_na_6x9_envelope, 152.4, 228.6}, - {xpoid_val_medium_size_na_10x15_envelope, 254, 381}, - {xpoid_val_medium_size_monarch_envelope, 98.298, 190.5}, - {xpoid_val_medium_size_na_10x13_envelope, 254, 330.2}, - {xpoid_val_medium_size_na_9x12_envelope, 228.6, 304.8}, - {xpoid_val_medium_size_na_number_10_envelope, 104.775, 241.3}, - {xpoid_val_medium_size_na_7x9_envelope, 177.8, 228.6}, - {xpoid_val_medium_size_na_9x11_envelope, 228.6, 279.4}, - {xpoid_val_medium_size_na_10x14_envelope, 254, 355.6}, - {xpoid_val_medium_size_na_number_9_envelope, 98.425, 225.425}, - {xpoid_val_medium_size_iso_a0, 841, 1189}, - {xpoid_val_medium_size_iso_a1, 594, 841}, - {xpoid_val_medium_size_iso_a2, 420, 594}, - {xpoid_val_medium_size_iso_a3, 297, 420}, - {xpoid_val_medium_size_iso_a4, 210, 297}, - {xpoid_val_medium_size_iso_a5, 148, 210}, - {xpoid_val_medium_size_iso_a6, 105, 148}, - {xpoid_val_medium_size_iso_a7, 74, 105}, - {xpoid_val_medium_size_iso_a8, 52, 74}, - {xpoid_val_medium_size_iso_a9, 37, 52}, - {xpoid_val_medium_size_iso_a10, 26, 37}, - {xpoid_val_medium_size_iso_b0, 1000, 1414}, - {xpoid_val_medium_size_iso_b1, 707, 1000}, - {xpoid_val_medium_size_iso_b2, 500, 707}, - {xpoid_val_medium_size_iso_b3, 353, 500}, - {xpoid_val_medium_size_iso_b4, 250, 353}, - {xpoid_val_medium_size_iso_b5, 176, 250}, - {xpoid_val_medium_size_iso_b6, 125, 176}, - {xpoid_val_medium_size_iso_b7, 88, 125}, - {xpoid_val_medium_size_iso_b8, 62, 88}, - {xpoid_val_medium_size_iso_b9, 44, 62}, - {xpoid_val_medium_size_iso_b10, 31, 44}, - {xpoid_val_medium_size_jis_b0, 1030, 1456}, - {xpoid_val_medium_size_jis_b1, 728, 1030}, - {xpoid_val_medium_size_jis_b2, 515, 728}, - {xpoid_val_medium_size_jis_b3, 364, 515}, - {xpoid_val_medium_size_jis_b4, 257, 364}, - {xpoid_val_medium_size_jis_b5, 182, 257}, - {xpoid_val_medium_size_jis_b6, 128, 182}, - {xpoid_val_medium_size_jis_b7, 91, 128}, - {xpoid_val_medium_size_jis_b8, 64, 91}, - {xpoid_val_medium_size_jis_b9, 45, 64}, - {xpoid_val_medium_size_jis_b10, 32, 45}, - {xpoid_val_medium_size_hp_2x_postcard, 148, 200}, - {xpoid_val_medium_size_hp_european_edp, 304.8, 355.6}, - {xpoid_val_medium_size_hp_mini, 139.7, 215.9}, - {xpoid_val_medium_size_hp_postcard, 100, 148}, - {xpoid_val_medium_size_hp_tabloid, 279.4, 431.8}, - {xpoid_val_medium_size_hp_us_edp, 279.4, 355.6}, - {xpoid_val_medium_size_hp_us_government_legal, 203.2, 330.2}, - {xpoid_val_medium_size_hp_us_government_letter, 203.2, 254}, - {xpoid_val_medium_size_iso_c3, 324, 458}, - {xpoid_val_medium_size_iso_c4, 229, 324}, - {xpoid_val_medium_size_iso_c5, 162, 229}, - {xpoid_val_medium_size_iso_c6, 114, 162}, - {xpoid_val_medium_size_iso_designated_long, 110, 220} -}; - -/* - * XpGetResolution returns an integer representing the printer resolution - * in dots-per-inch for the specified print context. - * - * Note: This routine assumes the values found in the passed context's - * attributes pools have been validated. - */ -int -XpGetResolution( - XpContextPtr pContext) -{ - unsigned long resolution; - - resolution = XpGetCardAttr(pContext, XPPageAttr, - xpoid_att_default_printer_resolution, - (XpOidCardList*)NULL); - if(0 == resolution) - resolution = XpGetCardAttr(pContext, XPDocAttr, - xpoid_att_default_printer_resolution, - (XpOidCardList*)NULL); - if(0 == resolution) - { - XpOidCardList* resolutions_supported; - /* - * default-printer-resolution not specified; default to 1st entry - * in printer-resolutions-supported. - */ - resolutions_supported = - XpGetCardListAttr(pContext, XPPrinterAttr, - xpoid_att_printer_resolutions_supported, - (XpOidCardList*)NULL); - resolution = XpOidCardListGetCard(resolutions_supported, 0); - XpOidCardListDelete(resolutions_supported); - } - return (int)resolution; -} - -/* - * XpGetContentOrientation determines the content-orientation as - * determined by the passed context. The page and document pools are - * queried in turn for a specified content-orientation attribute. If none - * is found the first content-orientation in the - * content-orientations-supported printer attribute is taken as the - * default. - * - * Note: This routine assumes the values found in the passed context's - * attributes pools have been validated. - */ -XpOid -XpGetContentOrientation( - XpContextPtr pContext) -{ - XpOid orientation; - - orientation = XpGetOidAttr(pContext, XPPageAttr, - xpoid_att_content_orientation, - (XpOidList*)NULL); - if(xpoid_none == orientation) - orientation = XpGetOidAttr(pContext, XPDocAttr, - xpoid_att_content_orientation, - (XpOidList*)NULL); - if(xpoid_none == orientation) - { - XpOidList* content_orientations_supported; - - content_orientations_supported = - XpGetListAttr(pContext, XPPrinterAttr, - xpoid_att_content_orientations_supported, - (XpOidList*)NULL); - orientation = XpOidListGetOid(content_orientations_supported, 0); - XpOidListDelete(content_orientations_supported); - } - return orientation; -} - -/* - * XpGetAvailableCompression determines the available-compression as - * determined by the passed context. The page and document pools are - * queried in turn for a specified content-orientation attribute. If none - * is found the first available-compression in the - * avaiable-compressions-supported printer attribute is taken as the - * default. - * - * Note: This routine assumes the values found in the passed context's - * attributes pools have been validated. - */ -XpOid -XpGetAvailableCompression( - XpContextPtr pContext) -{ - XpOid compression; - - compression = XpGetOidAttr(pContext, XPPageAttr, - xpoid_att_available_compression, - (XpOidList*)NULL); - if(xpoid_none == compression) - compression = XpGetOidAttr(pContext, XPDocAttr, - xpoid_att_available_compression, - (XpOidList*)NULL); - if(xpoid_none == compression) - { - XpOidList* available_compressions_supported; - - available_compressions_supported = - XpGetListAttr(pContext, XPPrinterAttr, - xpoid_att_available_compressions_supported, - (XpOidList*)NULL); - compression = XpOidListGetOid(available_compressions_supported, 0); - XpOidListDelete(available_compressions_supported); - } - return compression; -} - -/* - * XpGetPlex determines the plex as determined by the passed context. The page - * and document pools are queried in turn for a specified plex attribute. If - * none is found the first plex in the plexes-supported printer attribute is - * taken as the default. - * - * Note: This routine assumes the values found in the passed context's - * attributes pools have been validated. - */ -XpOid -XpGetPlex( - XpContextPtr pContext) -{ - XpOid plex; - - plex = XpGetOidAttr(pContext, XPPageAttr, xpoid_att_plex, - (XpOidList*)NULL); - if(xpoid_none == plex) - plex = XpGetOidAttr(pContext, XPDocAttr, xpoid_att_plex, - (XpOidList*)NULL); - if(xpoid_none == plex) - { - XpOidList* plexes_supported; - - plexes_supported = - XpGetListAttr(pContext, XPPrinterAttr, - xpoid_att_plexes_supported, - (XpOidList*)NULL); - plex = XpOidListGetOid(plexes_supported, 0); - XpOidListDelete(plexes_supported); - } - return plex; -} - -/* - * XpGetPageSize returns the XpOid of the current page size (medium names - * are page sizes in this implementation) as indicated by the passed - * context. - * - * The relevant input-tray is returned in pTray. This parm must not be - * NULL. If the input-tray is not indicated or irrelevant, xpoid_none - * will be returned. - * - * This function optionally takes a XpOidMediumSS representation of the - * medium-source-sizes-supported attribute in order to avoid parsing the - * string value twice for calling functions that need to parse m-s-s-s - * anyway (e.g. XpGetReproductionArea). If the caller has no other reason - * to parse medium-source-sizes-supported, it is recommended that NULL be - * passed. This function will obtain medium-source-sizes-supported if it - * needs to. - * - * Note: This routine assumes the values found in the passed context's - * attributes pools have been validated. - */ -XpOid -XpGetPageSize(XpContextPtr pContext, - XpOid* pTray, - const XpOidMediumSS* msss) -{ - XpOid medium; - /* - * check to see if default-medium is specified - */ - medium = XpGetOidAttr(pContext, XPPageAttr, xpoid_att_default_medium, - (const XpOidList*)NULL); - if(medium == xpoid_none) - { - /* - * default-medium not in page pool; try the document pool - */ - medium = XpGetOidAttr(pContext, XPDocAttr, xpoid_att_default_medium, - (const XpOidList*)NULL); - } - if(medium == xpoid_none) - { - /* - * default-medium not specified; try default-input-tray - */ - *pTray = XpGetOidAttr(pContext, XPPageAttr, - xpoid_att_default_input_tray, - (const XpOidList*)NULL); - if(*pTray == xpoid_none) - { - /* - * default-input-tray not in page pool; try the document pool - */ - *pTray = XpGetOidAttr(pContext, XPDocAttr, - xpoid_att_default_input_tray, - (const XpOidList*)NULL); - } - if(*pTray != xpoid_none) - { - /* - * default-input-tray found; get corresponding medium from - * input-trays-medium - */ - XpOidTrayMediumList* input_trays_medium; - int i; - - input_trays_medium = - XpGetTrayMediumListAttr(pContext, XPPrinterAttr, - xpoid_att_input_trays_medium, - (const XpOidList*)NULL, - (const XpOidMediumSS*)NULL); - for(i = 0; i < XpOidTrayMediumListCount(input_trays_medium); i++) - { - if(*pTray == XpOidTrayMediumListTray(input_trays_medium, i)) - { - medium = XpOidTrayMediumListMedium(input_trays_medium, i); - break; - } - } - XpOidTrayMediumListDelete(input_trays_medium); - } - } - else - *pTray = xpoid_none; - - if(medium == xpoid_none) - { - XpOidMediumSS* local_msss = (XpOidMediumSS*)NULL; - int i_mss, i_ds; - XpOidMediumDiscreteSizeList* ds_list; - /* - * no medium specified; use 1st page size found in - * medium-source-sizes-supported - */ - if((XpOidMediumSS*)NULL == msss) - msss = local_msss = - XpGetMediumSSAttr(pContext, XPPrinterAttr, - xpoid_att_medium_source_sizes_supported, - (const XpOidList*)NULL, - (const XpOidList*)NULL); - for(i_mss = 0; - i_mss < XpOidMediumSSCount(msss) && xpoid_none == medium; - i_mss++) - { - if(XpOidMediumSS_DISCRETE == (msss->mss)[i_mss].mstag - && - xpoid_none != (msss->mss)[i_mss].input_tray) - { - ds_list = (msss->mss)[i_mss].ms.discrete; - for(i_ds = 0; i_ds < ds_list->count; i_ds++) - { - if(xpoid_none != (ds_list->list)[i_ds].page_size) - { - medium = (ds_list->list)[i_ds].page_size; - break; - } - } - } - } - XpOidMediumSSDelete(local_msss); - } - return medium; -} - -/* - * XpGetMediumMillimeters returns into the supplied float pointers the - * width and height in millimeters of the passed page size identifier. - */ -void -XpGetMediumMillimeters( - XpOid page_size, - float *width, /* return */ - float *height) /* return */ -{ - int i; - - *width = *height = 0; - for(i = 0; i < XpNumber(PageDimensions); i++) - { - if(page_size == PageDimensions[i].page_size) - { - *width = PageDimensions[i].width; - *height = PageDimensions[i].height; - return; - } - } -} - -/* - * Converts a millimeter specification into pixels given a resolution in - * DPI. - */ -static float -MmToPixels(float mm, int resolution) -{ - float f; - - f = mm * resolution; - f /= 25.4; - return f; -} - -/* - * XpGetMediumDimensions returns into the supplied short pointers the - * width and height in pixels of the medium associated with the specified - * print context. It obtains the page size associated with the current - * medium by calling XpGetPageSize. It passes XpGetMediumMillimeters the - * page size, and converts the returned millimeter dimensions into pixels - * using the resolution returned by XpGetResolution. - * - * Note: This routine assumes the values found in the passed context's - * attributes pools have been validated. - */ -void -XpGetMediumDimensions( - XpContextPtr pContext, - unsigned short *width, /* return */ - unsigned short *height) /* return */ -{ - XpOid page_size; - XpOid tray; - XpOid orientation; - - int resolution; - float w_mm, h_mm; - - page_size = XpGetPageSize(pContext, &tray, (XpOidMediumSS*)NULL); - if(page_size == xpoid_none) - { - /* - * fail-safe: if the pools have been validated, this defaulting logic - * isn't needed. - */ - page_size = xpoid_val_medium_size_na_letter; - } - XpGetMediumMillimeters(page_size, &w_mm, &h_mm); - resolution = XpGetResolution(pContext); - orientation = XpGetContentOrientation(pContext); - switch(orientation) - { - case xpoid_val_content_orientation_landscape: - case xpoid_val_content_orientation_reverse_landscape: - /* - * transpose width and height - */ - *height = MmToPixels(w_mm, resolution); - *width = MmToPixels(h_mm, resolution); - break; - - default: - *width = MmToPixels(w_mm, resolution); - *height = MmToPixels(h_mm, resolution); - break; - } -} - -/* - * XRectangleFromXpOidArea converts an XpOidArea area specification - * into an XRectangle. The passed resolution is used to convert from - * millimeters (XpOidArea) into pixels (XRectangle). - */ -static void -XRectangleFromXpOidArea( - xRectangle *pRect, - const XpOidArea* repro, - int resolution, - XpOid orientation) -{ - switch(orientation) - { - case xpoid_val_content_orientation_landscape: - case xpoid_val_content_orientation_reverse_landscape: - /* - * transpose x and y, width and height - */ - pRect->y = MmToPixels(repro->minimum_x, resolution); - pRect->x = MmToPixels(repro->minimum_y, resolution); - pRect->height = - MmToPixels(repro->maximum_x - repro->minimum_x, resolution); - pRect->width = - MmToPixels(repro->maximum_y - repro->minimum_y, resolution); - break; - - default: - pRect->x = MmToPixels(repro->minimum_x, resolution); - pRect->y = MmToPixels(repro->minimum_y, resolution); - pRect->width = - MmToPixels(repro->maximum_x - repro->minimum_x, resolution); - pRect->height = - MmToPixels(repro->maximum_y - repro->minimum_y, resolution); - break; - } -} - -/* - * XpGetReproductionArea queries the current pool attribute values in - * order to determine the reproduction area for the currently selected - * medium. - * - * First the current page size (equivalent to current medium) and tray - * (if specified) is retrieved via XpGetPageSize. The value of the - * medium-source-sizes-supported attribute is interrogated until a matching - * entry for the current page size and tray is found. The reproduction - * area defined for the current entry is converted into an XRectangle - * using XRectangleFromXpOidArea and returned to the caller. - * - * Note: This routine assumes the values found in the passed context's - * attributes pools have been validated. - */ -void -XpGetReproductionArea(XpContextPtr pContext, - xRectangle *pRect) -{ - XpOid page_size; - XpOid tray; - XpOidMediumSS* msss; - int i_mss, i_ds; - XpOidMediumDiscreteSizeList* ds_list; - XpOidArea* repro; - BOOL done; - int resolution; - XpOid orientation; - /* - * find the appropriate assured reproduction area for the current - * tray and page size in the medium-source-sizes-supported attribute. - */ - msss = XpGetMediumSSAttr(pContext, XPPrinterAttr, - xpoid_att_medium_source_sizes_supported, - (const XpOidList*)NULL, - (const XpOidList*)NULL); - page_size = XpGetPageSize(pContext, &tray, msss); - resolution = XpGetResolution(pContext); - orientation = XpGetContentOrientation(pContext); - - memset(pRect, 0, sizeof(xRectangle)); - - if(xpoid_none == tray) - { - /* - * no tray specified; use 1st matching page size - */ - for(i_mss = 0, done = xFalse; - i_mss < XpOidMediumSSCount(msss) && !done; - i_mss++) - { - if(XpOidMediumSS_DISCRETE == (msss->mss)[i_mss].mstag - && - xpoid_none != (msss->mss)[i_mss].input_tray) - { - ds_list = (msss->mss)[i_mss].ms.discrete; - for(i_ds = 0; i_ds < ds_list->count; i_ds++) - { - if(page_size == (ds_list->list)[i_ds].page_size) - { - repro = - &(ds_list->list)[i_ds].assured_reproduction_area; - XRectangleFromXpOidArea(pRect, repro, - resolution, orientation); - done = xTrue; - break; - } - } - } - } - } - else - { - /* - * tray && page size specified; find matching entry - */ - for(i_mss = 0, done = xFalse; - i_mss < XpOidMediumSSCount(msss) && !done; - i_mss++) - { - if(XpOidMediumSS_DISCRETE == (msss->mss)[i_mss].mstag - && - xpoid_none != (msss->mss)[i_mss].input_tray - && - (tray == (msss->mss)[i_mss].input_tray - || - xpoid_unspecified == (msss->mss)[i_mss].input_tray) - ) - { - ds_list = (msss->mss)[i_mss].ms.discrete; - for(i_ds = 0; i_ds < ds_list->count; i_ds++) - { - if(page_size == (ds_list->list)[i_ds].page_size) - { - repro = - &(ds_list->list)[i_ds].assured_reproduction_area; - XRectangleFromXpOidArea(pRect, repro, - resolution, orientation); - if(xpoid_unspecified != (msss->mss)[i_mss].input_tray) - { - /* - * exact match on tray takes precendence over - * unspecified tray entry in m-s-s-s - */ - done = xTrue; - } - break; - } - } - } - } - } - XpOidMediumSSDelete(msss); -} - -/* - * XpGetMaxWidthHeightRes returns into the supplied width and height - * unsigned short pointers the dimensions in millimeters of the largest - * supported media for a specific printer. It looks at the - * medium-source-sizes-supported attribute (if it exists) to determine - * the list of possible media, and calls XpGetMediumMillimeters to get the - * dimensions for each medium. If the m-s-s-s attribute is not defined, - * then the dimensions for the na-letter medium is returned. - * - * This function also returns the largest resolution in DPI defined in - * printer-resolutions-supported. If printer-resolutions-supported is not - * specified, the default is obtained from the passed XpValidatePoolsRec. - * - * The passed XpValidatePoolsRec is also used to determine valid values - * when parsing attribute values. - */ -void -XpGetMaxWidthHeightRes( - const char *printer_name, - const XpValidatePoolsRec* vpr, - float *width, - float *height, - int* resolution) -{ - const char* value; - const char* attr_str; - XpOidMediumSS* pool_msss; - const XpOidMediumSS* msss; - int i_mss, i_ds; - XpOidMediumDiscreteSizeList* ds_list; - float w, h; - XpOidCardList* pool_resolutions_supported; - const XpOidCardList* resolutions_supported; - int i; - int res; - /* - * get the max medium width and height - */ - attr_str = XpOidString(xpoid_att_medium_source_sizes_supported); - value = XpGetPrinterAttribute(printer_name, attr_str); - pool_msss = XpOidMediumSSNew(value, - vpr->valid_input_trays, - vpr->valid_medium_sizes); - if(0 == XpOidMediumSSCount(pool_msss)) - msss = XpGetDefaultMediumSS(); - else - msss = pool_msss; - *width = *height = 0; - for(i_mss = 0; i_mss < XpOidMediumSSCount(msss); i_mss++) - { - if(XpOidMediumSS_DISCRETE == (msss->mss)[i_mss].mstag - && - xpoid_none != (msss->mss)[i_mss].input_tray) - { - ds_list = (msss->mss)[i_mss].ms.discrete; - for(i_ds = 0; i_ds < ds_list->count; i_ds++) - { - if(xpoid_none != (ds_list->list)[i_ds].page_size) - { - XpGetMediumMillimeters((ds_list->list)[i_ds].page_size, - &w, &h); - if(w > *width) *width = w; - if(h > *height) *height = h; - } - } - } - } - XpOidMediumSSDelete(pool_msss); - /* - * get the maximum resolution - */ - attr_str = XpOidString(xpoid_att_printer_resolutions_supported); - value = XpGetPrinterAttribute(printer_name, attr_str); - pool_resolutions_supported = - XpOidCardListNew(value, vpr->valid_printer_resolutions_supported); - if(0 == XpOidCardListCount(pool_resolutions_supported)) - resolutions_supported = vpr->default_printer_resolutions_supported; - else - resolutions_supported = pool_resolutions_supported; - *resolution = 0; - for(i = 0; i < XpOidCardListCount(resolutions_supported); i++) - { - res = XpOidCardListGetCard(resolutions_supported, i); - if(res > *resolution) *resolution = res; - } - XpOidCardListDelete(pool_resolutions_supported); -} - -FontResolutionPtr -XpGetClientResolutions(client, num) - ClientPtr client; - int *num; -{ - static struct _FontResolution res; - int resolution = XpGetResolution(XpContextOfClient(client)); - - res.x_resolution = resolution; - res.y_resolution = resolution; - - res.point_size = 120; - - *num = 1; - - return &res; -} - - -void XpSetFontResFunc(client) - ClientPtr client; -{ - client->fontResFunc = XpGetClientResolutions; -} - - -void XpUnsetFontResFunc(client) - ClientPtr client; -{ - client->fontResFunc = NULL; -} diff --git a/hw/xprint/pcl-mono/Makefile.am b/hw/xprint/pcl-mono/Makefile.am deleted file mode 100644 index 4d8dfc682..000000000 --- a/hw/xprint/pcl-mono/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -noinst_LTLIBRARIES = libpcl.la - -PCL_DRIVER = -DXP_PCL_MONO - -include ../pcl/Makefile.am.inc diff --git a/hw/xprint/pcl/Makefile.am b/hw/xprint/pcl/Makefile.am deleted file mode 100644 index 90133e8e2..000000000 --- a/hw/xprint/pcl/Makefile.am +++ /dev/null @@ -1,6 +0,0 @@ -noinst_LTLIBRARIES = libpcl.la - -PCL_DRIVER = -DXP_PCL_COLOR - -include ../pcl/Makefile.am.inc - diff --git a/hw/xprint/pcl/Makefile.am.inc b/hw/xprint/pcl/Makefile.am.inc deleted file mode 100644 index c3af606ee..000000000 --- a/hw/xprint/pcl/Makefile.am.inc +++ /dev/null @@ -1,27 +0,0 @@ -INCLUDES = -I$(top_srcdir)/hw/xprint - -AM_CFLAGS = @DIX_CFLAGS@ @XPRINT_CFLAGS@ -D_XP_PRINT_SERVER_ $(PCL_DRIVER) - -libpcl_la_SOURCES = \ - $(srcdir)/../pcl/PclArc.c \ - $(srcdir)/../pcl/PclArea.c \ - $(srcdir)/../pcl/PclAttr.c \ - $(srcdir)/../pcl/PclAttVal.c \ - $(srcdir)/../pcl/PclColor.c \ - $(srcdir)/../pcl/PclCursor.c \ - $(srcdir)/../pcl/PclDef.h \ - $(srcdir)/../pcl/PclFonts.c \ - $(srcdir)/../pcl/PclGC.c \ - $(srcdir)/../pcl/Pcl.h \ - $(srcdir)/../pcl/PclInit.c \ - $(srcdir)/../pcl/PclLine.c \ - $(srcdir)/../pcl/Pclmap.h \ - $(srcdir)/../pcl/PclMisc.c \ - $(srcdir)/../pcl/PclPixel.c \ - $(srcdir)/../pcl/PclPolygon.c \ - $(srcdir)/../pcl/PclPrint.c \ - $(srcdir)/../pcl/PclSFonts.c \ - $(srcdir)/../pcl/PclSFonts.h \ - $(srcdir)/../pcl/PclSpans.c \ - $(srcdir)/../pcl/PclText.c \ - $(srcdir)/../pcl/PclWindow.c diff --git a/hw/xprint/pcl/Pcl.h b/hw/xprint/pcl/Pcl.h deleted file mode 100644 index d46a03401..000000000 --- a/hw/xprint/pcl/Pcl.h +++ /dev/null @@ -1,619 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: Pcl.h -** * -** * Contents: defines and includes for the Pcl driver -** * for a printing X server. -** * -** * Created: 1/30/95 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#ifndef _PCL_H_ -#define _PCL_H_ - -#include -#include "scrnintstr.h" - -#include "PclDef.h" -#include "Pclmap.h" -#include "PclSFonts.h" - -#include -#include - -#include "regionstr.h" -#include -#include "dixfontstr.h" -#include "gcstruct.h" - -/* - * Some sleazes to force the XrmDB stuff into the server - */ -#ifndef HAVE_XPointer -typedef char *XPointer; -#endif -#define Status int -#define True 1 -#define False 0 -#include "misc.h" -#include -#include -#include "attributes.h" - -/****** - * externally visible variables from PclInit.c - ******/ -extern DevPrivateKey PclScreenPrivateKey, PclWindowPrivateKey; -extern DevPrivateKey PclContextPrivateKey; -extern DevPrivateKey PclPixmapPrivateKey; -extern DevPrivateKey PclGCPrivateKey; - -/****** - * externally visible variables from PclAttVal.c - ******/ -extern XpValidatePoolsRec PclValidatePoolsRec; - -/* - * This structure defines a mapping from an X colormap ID to a list of - * print contexts which use the colormap. - */ -typedef struct _pclcontextlist { - XpContextPtr context; - struct _pclcontextlist *next; -} PclContextList, *PclContextListPtr; - -typedef struct _pclcmaptocontexts { - long colormapId; - PclContextListPtr contexts; - struct _pclcmaptocontexts *next; -} PclCmapToContexts; - -typedef struct { - PclCmapToContexts *colormaps; - CloseScreenProcPtr CloseScreen; -} PclScreenPrivRec, *PclScreenPrivPtr; - -/* - * This structure defines a mapping from an X colormap ID to a PCL - * palette ID. - */ -typedef struct _palettemap { - long colormapId; - int paletteId; - int downloaded; - struct _palettemap *next; -} PclPaletteMap, *PclPaletteMapPtr; - -typedef struct { - char *jobFileName; - FILE *pJobFile; - char *pageFileName; - FILE *pPageFile; - GC lastGC; - unsigned char *dash; - int validGC; - ClientPtr getDocClient; - int getDocBufSize; - PclSoftFontInfoPtr pSoftFontInfo; - PclPaletteMapPtr palettes; - int currentPalette; - int nextPaletteId; - PclPaletteMap staticGrayPalette; - PclPaletteMap trueColorPalette; - PclPaletteMap specialTrueColorPalette; - unsigned char *ctbl; - int ctbldim; - int isRaw; -#ifdef XP_PCL_LJ3 - unsigned int fcount; - unsigned int fcount_max; - char *figures; -#endif /* XP_PCL_LJ3 */ -} PclContextPrivRec, *PclContextPrivPtr; - -typedef struct { - int validContext; - XpContextPtr context; -} PclWindowPrivRec, *PclWindowPrivPtr; - -typedef struct { - unsigned long stippleFg, stippleBg; -} PclGCPrivRec, *PclGCPrivPtr; - -typedef struct { - XpContextPtr context; - char *tempFileName; - FILE *tempFile; - GC lastGC; - int validGC; -} PclPixmapPrivRec, *PclPixmapPrivPtr; - -/****** - * Defined functions - ******/ -#define SEND_PCL(f,c) fwrite( c, sizeof( char ), strlen( c ), f ) -#define SEND_PCL_COUNT(f,c,n) fwrite( c, sizeof( char ), n, f ) - -#ifndef XP_PCL_LJ3 -#define SAVE_PCL(f,p,c) SEND_PCL(f,c) -#define SAVE_PCL_COUNT(f,p,c,n) SEND_PCL_COUNT(f,c,n) -#define MACRO_START(f,p) SEND_PCL(f, "\033&f1Y\033&f0X") -#define MACRO_END(f) SEND_PCL(f, "\033&f1X") -#else -#define SAVE_PCL(f,p,c) PclSpoolFigs(p, c, strlen(c)) -#define SAVE_PCL_COUNT(f,p,c,n) PclSpoolFigs(p, c, n) -#define MACRO_START(f,p) p->fcount = 0 -#define MACRO_END(f) /* do nothing */ -#endif /* XP_PCL_LJ3 */ - -#define MIN(a,b) (((a)<(b))?(a):(b)) -#ifndef MAX -#define MAX(a,b) (((a)>(b))?(a):(b)) -#endif - -/****** - * Functions in PclArc.c - ******/ -extern void PclPolyArc( - DrawablePtr pDrawable, - GCPtr pGC, - int nArcs, - xArc *pArcs); -extern void PclPolyFillArc( - DrawablePtr pDrawable, - GCPtr pGC, - int nArcs, - xArc *pArcs); - -/****** - * Functions in PclArea.c - ******/ -extern void PclPutImage( - DrawablePtr pDrawable, - GCPtr pGC, - int depth, - int x, - int y, - int w, - int h, - int leftPad, - int format, - char *pImage); -extern RegionPtr PclCopyArea( - DrawablePtr pSrc, - DrawablePtr pDst, - GCPtr pGC, - int srcx, - int srcy, - int width, - int height, - int dstx, - int dsty); -RegionPtr PclCopyPlane( - DrawablePtr pSrc, - DrawablePtr pDst, - GCPtr pGC, - int srcx, - int srcy, - int width, - int height, - int dstx, - int dsty, - unsigned long plane); - - -/****** - * Functions in PclAttr.c - ******/ -extern char *PclGetAttributes( - XpContextPtr pCon, - XPAttributes pool ); -extern char *PclGetOneAttribute( - XpContextPtr pCon, - XPAttributes pool, - char *attr ); -extern int PclAugmentAttributes( - XpContextPtr pCon, - XPAttributes pool, - char *attrs ); -extern int PclSetAttributes( - XpContextPtr pCon, - XPAttributes pool, - char *attrs ); - -/****** - * Functions in PclColor.c - ******/ -extern Bool PclCreateDefColormap(ScreenPtr pScreen); -extern Bool PclCreateColormap(ColormapPtr pColor); -extern void PclDestroyColormap(ColormapPtr pColor); -extern void PclInstallColormap(ColormapPtr pColor); -extern void PclUninstallColormap(ColormapPtr pColor); -extern int PclListInstalledColormaps(ScreenPtr pScreen, - XID *pCmapList); -extern void PclStoreColors(ColormapPtr pColor, - int ndef, - xColorItem *pdefs); -extern void PclResolveColor(unsigned short *pRed, - unsigned short *pGreen, - unsigned short *pBlue, - VisualPtr pVisual); -extern int PclUpdateColormap(DrawablePtr pDrawable, - XpContextPtr pCon, - GCPtr gc, - FILE *outFile); -extern void PclLookUp(ColormapPtr cmap, - PclContextPrivPtr cPriv, - unsigned short *r, - unsigned short *g, - unsigned short *b); -extern PclPaletteMapPtr PclFindPaletteMap(PclContextPrivPtr cPriv, - ColormapPtr cmap, - GCPtr gc); -extern unsigned char *PclReadMap(char *, int *); - - -/****** - * Functions in PclCursor.c - ******/ -extern void PclConstrainCursor( - ScreenPtr pScreen, - BoxPtr pBox); -extern void PclCursorLimits( - ScreenPtr pScreen, - CursorPtr pCursor, - BoxPtr pHotBox, - BoxPtr pTopLeftbox); -extern Bool PclDisplayCursor( - ScreenPtr pScreen, - CursorPtr pCursor); -extern Bool PclRealizeCursor( - ScreenPtr pScreen, - CursorPtr pCursor); -extern Bool PclUnrealizeCursor( - ScreenPtr pScreen, - CursorPtr pCursor); -extern void PclRecolorCursor( - ScreenPtr pScreen, - CursorPtr pCursor, - Bool displayed); -extern Bool PclSetCursorPosition( - ScreenPtr pScreen, - int x, - int y, - Bool generateEvent); - -/****** - * Functions in PclSFonts.c - ******/ -extern void -PclDownloadSoftFont8( - FILE *fp, - PclSoftFontInfoPtr pSoftFontInfo, - PclFontHead8Ptr pfh, - PclCharDataPtr pcd, - unsigned char *code); -extern void PclDownloadSoftFont16( - FILE *fp, - PclSoftFontInfoPtr pSoftFontInfo, - PclFontHead16Ptr pfh, - PclCharDataPtr pcd, - unsigned char row, - unsigned char col); -extern PclSoftFontInfoPtr PclCreateSoftFontInfo(void); -extern void PclDestroySoftFontInfo( - PclSoftFontInfoPtr pSoftFontInfo ); - -/****** - * Functions in PclGC.c - ******/ -extern Bool PclCreateGC(GCPtr pGC); -extern void PclDestroyGC(GCPtr pGC); -extern int PclUpdateDrawableGC( - GCPtr pGC, - DrawablePtr pDrawable, - FILE **outFile); -extern void PclValidateGC( - GCPtr pGC, - unsigned long changes, - DrawablePtr pDrawable); -extern void PclSetDrawablePrivateStuff( - DrawablePtr pDrawable, - GC gc ); -extern int PclGetDrawablePrivateStuff( - DrawablePtr pDrawable, - GC *gc, - unsigned long *valid, - FILE **file ); -extern void PclSetDrawablePrivateGC( - DrawablePtr pDrawable, - GC gc); -extern void PclComputeCompositeClip( - GCPtr pGC, - DrawablePtr pDrawable); - -/****** - * Functions in PclInit.c - ******/ -extern Bool PclCloseScreen( - int index, - ScreenPtr pScreen); -extern Bool InitializeColorPclDriver( - int ndx, - ScreenPtr pScreen, - int argc, - char **argv); -extern Bool InitializeMonoPclDriver( - int ndx, - ScreenPtr pScreen, - int argc, - char **argv); -extern Bool InitializeLj3PclDriver( - int ndx, - ScreenPtr pScreen, - int argc, - char **argv); -extern XpContextPtr PclGetContextFromWindow( WindowPtr win ); - -/****** - * Functions in PclLine.c - ******/ -extern void PclPolyLine( - DrawablePtr pDrawable, - GCPtr pGC, - int mode, - int nPoints, - xPoint *pPoints); -extern void PclPolySegment( - DrawablePtr pDrawable, - GCPtr pGC, - int nSegments, - xSegment *pSegments); - -/****** - * Functions in PclMisc.c - ******/ -extern void PclQueryBestSize( - int class, - short *pwidth, - short *pheight, - ScreenPtr pScreen); -extern char *GetPropString(WindowPtr pWin, char *propName); -extern int SystemCmd(char *cmdStr); -extern int PclGetMediumDimensions( - XpContextPtr pCon, - CARD16 *pWidth, - CARD16 *pHeight); -extern int PclGetReproducibleArea( - XpContextPtr pCon, - xRectangle *pRect); -extern void PclSendData( - FILE *outFile, - PclContextPrivPtr pConPriv, - BoxPtr pbox, - int nbox, - double ratio); - -/****** - * Functions in PclPixel.c - ******/ -extern void PclPolyPoint( - DrawablePtr pDrawable, - GCPtr pGC, - int mode, - int nPoints, - xPoint *pPoints); -extern void PclPushPixels( - GCPtr pGC, - PixmapPtr pBitmap, - DrawablePtr pDrawable, - int width, - int height, - int x, - int y); - -/****** - * Functions in PclPixmap.c - ******/ -extern PixmapPtr PclCreatePixmap( - ScreenPtr pScreen, - int width, - int height, - int depth); -extern Bool PclDestroyPixmap(PixmapPtr pPixmap); - -/****** - * Functions in PclPolygon.c - ******/ -extern void PclPolyRectangle( - DrawablePtr pDrawable, - GCPtr pGC, - int nRects, - xRectangle *pRects); -extern void PclFillPolygon( - DrawablePtr pDrawable, - GCPtr pGC, - int shape, - int mode, - int nPoints, - DDXPointPtr pPoints); -extern void PclPolyFillRect( - DrawablePtr pDrawable, - GCPtr pGC, - int nRects, - xRectangle *pRects); - -/****** - * Functions in PclSpans.c - ******/ -extern void PclFillSpans( - DrawablePtr pDrawable, - GCPtr pGC, - int nSpans, - DDXPointPtr pPoints, - int *pWidths, - int fSorted); -extern void PclSetSpans( - DrawablePtr pDrawable, - GCPtr pGC, - char *pSrc, - DDXPointPtr pPoints, - int *pWidths, - int nSpans, - int fSorted); - -/****** - * Functions in PclText.c - ******/ -extern int PclPolyText8( - DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - int count, - char *string); -extern int PclPolyText16( - DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - int count, - unsigned short *string); -extern void PclImageText8( - DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - int count, - char *string); -extern void PclImageText16( - DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - int count, - unsigned short *string); -extern void PclImageGlyphBlt( - DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - unsigned int nGlyphs, - CharInfoPtr *pCharInfo, - pointer pGlyphBase); -extern void PclPolyGlyphBlt( - DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - unsigned int nGlyphs, - CharInfoPtr *pCharInfo, - pointer pGlyphBase); - -/****** - * Functions in PclWindow.c - ******/ -extern Bool PclCreateWindow(register WindowPtr pWin); -extern Bool PclDestroyWindow(WindowPtr pWin); -extern Bool PclMapWindow(WindowPtr pWindow); -extern Bool PclPositionWindow( - register WindowPtr pWin, - int x, - int y); -extern Bool PclUnmapWindow(WindowPtr pWindow); -extern void PclCopyWindow( - WindowPtr pWin, - DDXPointRec ptOldOrg, - RegionPtr prgnSrc); -extern Bool PclChangeWindowAttributes( - register WindowPtr pWin, - register unsigned long mask); - -/****** - * Functions in PclFonts.c - ******/ -extern Bool PclRealizeFont( - ScreenPtr pscr, - FontPtr pFont); -extern Bool PclUnrealizeFont( - ScreenPtr pscr, - FontPtr pFont); - -/****** - * Functions in PclPrint.c - ******/ -extern int PclStartJob( - XpContextPtr pCon, - Bool sendClientData, - ClientPtr client); -extern int PclEndJob( - XpContextPtr pCon, - Bool cancel); -extern int PclStartPage( - XpContextPtr pCon, - WindowPtr pWin); -extern int PclEndPage( - XpContextPtr pCon, - WindowPtr pWin); -extern int PclStartDoc(XpContextPtr pCon, - XPDocumentType type); -extern int PclEndDoc( - XpContextPtr pCon, - Bool cancel); -extern int PclDocumentData( - XpContextPtr pCon, - DrawablePtr pDraw, - char *pData, - int len_data, - char *pFmt, - int len_fmt, - char *pOpt, - int len_opt, - ClientPtr client); -extern int PclGetDocumentData( - XpContextPtr pCon, - ClientPtr client, - int maxBufferSize); - - -#endif /* _PCL_H_ */ diff --git a/hw/xprint/pcl/PclArc.c b/hw/xprint/pcl/PclArc.c deleted file mode 100644 index 20d3f723d..000000000 --- a/hw/xprint/pcl/PclArc.c +++ /dev/null @@ -1,268 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclArc.c -** * -** * Contents: -** * Arc-drawing code for the PCL DDX driver -** * -** * Created: 10/23/95 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include - -#include "Pcl.h" -#include "gcstruct.h" -#include "windowstr.h" -#include "attributes.h" - -static void -PclDoArc( - DrawablePtr pDrawable, - GCPtr pGC, - int nArcs, - xArc *pArcs, - void (*DoIt)(FILE *, PclContextPrivPtr, double, double, xArc)) -{ - char t[80]; - FILE *outFile; - int nbox, i; - BoxPtr pbox; - BoxRec r; - RegionPtr drawRegion, region, transClip; - short fudge; - int xoffset, yoffset; - XpContextPtr pCon; - PclContextPrivPtr pConPriv; - xRectangle repro; - - if( PclUpdateDrawableGC( pGC, pDrawable, &outFile ) == FALSE ) - return; - - fudge = 3 * pGC->lineWidth; - - pCon = PclGetContextFromWindow( (WindowPtr) pDrawable ); - pConPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - XpGetReproductionArea( pCon, &repro ); - - /* - * Generate the PCL code to draw the collection of arcs, by - * defining it as a macro which uses the HP-GL/2 arc drawing - * function. - */ - - xoffset = pDrawable->x; - yoffset = pDrawable->y; - - for( i = 0; i < nArcs; i++ ) - { - xArc Arc = pArcs[i]; - double b, X, Y, ratio; - double angle1; - - MACRO_START( outFile, pConPriv ); - SAVE_PCL( outFile, pConPriv, "\033%0B" ); - - /* Calculate the start of the arc */ - if( ( Arc.angle1 / 64 ) % 360 == 90 ) - { - X = 0; - Y = -Arc.height / 2.0; - } - else if( ( Arc.angle1 / 64 ) % 360 == 270 ) - { - X = 0; - Y = Arc.height / 2.0; - } - else - { - /* Convert the angle to radians */ - angle1 = ( Arc.angle1 / 64.0 ) * 3.141592654 / 180.0; - - b = (Arc.height / 2.0); - X = b * cos( angle1 ); - Y = -b * sin( angle1 ); - } - - /* Change the coordinate system to scale the ellipse */ - ratio = (double)Arc.height / (double)Arc.width; - - sprintf( t, "SC%.2f,%.2f,%d,%d;", - (repro.x - Arc.width / 2 - xoffset - Arc.x) * ratio, - (repro.x - Arc.width / 2 - xoffset - Arc.x + - repro.width) * ratio, - repro.y - Arc.height / 2 - yoffset - Arc.y + repro.height, - repro.y - Arc.height / 2 - yoffset - Arc.y); - SAVE_PCL( outFile, pConPriv, t ); - - DoIt( outFile, pConPriv, X, Y, Arc ); - - /* Build the bounding box */ - r.x1 = -Arc.width / 2 - fudge; - r.y1 = -Arc.height / 2 - fudge; - r.x2 = Arc.width / 2 + fudge; - r.y2 = Arc.height / 2 + fudge; - drawRegion = REGION_CREATE( pGC->pScreen, &r, 0 ); - - SAVE_PCL( outFile, pConPriv, "\033%0A" ); - MACRO_END( outFile ); - - /* - * Intersect the bounding box with the clip region. - */ - region = REGION_CREATE( pGC->pScreen, NULL, 0 ); - transClip = REGION_CREATE( pGC->pScreen, NULL, 0 ); - REGION_COPY( pGC->pScreen, transClip, pGC->pCompositeClip ); - REGION_TRANSLATE( pGC->pScreen, transClip, - -(xoffset + Arc.x + Arc.width / 2), - -(yoffset + Arc.y + Arc.height / 2) ); - REGION_INTERSECT( pGC->pScreen, region, drawRegion, transClip ); - - /* - * For each rectangle in the clip region, set the HP-GL/2 "input - * window" and render the collection of arcs to it. - */ - pbox = REGION_RECTS( region ); - nbox = REGION_NUM_RECTS( region ); - - PclSendData(outFile, pConPriv, pbox, nbox, ratio); - - /* - * Restore the coordinate system - */ - sprintf( t, "\033%%0BSC%d,%d,%d,%d;\033%%0A", repro.x, - repro.x + repro.width, repro.y + repro.height, - repro.y ); - SEND_PCL( outFile, t ); - - /* - * Clean up the temporary regions - */ - REGION_DESTROY( pGC->pScreen, drawRegion ); - REGION_DESTROY( pGC->pScreen, region ); - REGION_DESTROY( pGC->pScreen, transClip ); - } -} - -/* - * Draw a simple non-filled arc, centered on the origin and starting - * at the given point. - */ -static void -DrawArc(FILE *outFile, - PclContextPrivPtr pConPriv, - double X, - double Y, - xArc A) -{ - char t[80]; - - sprintf( t, "PU%d,%d;PD;AA0,0,%.2f;", (int)X, (int)Y, - (float)A.angle2 / -64.0 ); - SAVE_PCL(outFile, pConPriv, t); -} - -void -PclPolyArc( - DrawablePtr pDrawable, - GCPtr pGC, - int nArcs, - xArc *pArcs) -{ - PclDoArc( pDrawable, pGC, nArcs, pArcs, DrawArc ); -} - -/* - * Draw a filled wedge, from the origin, to the given point, through - * the appropriate angle, and back to the origin. - */ -static void -DoWedge(FILE *outFile, - PclContextPrivPtr pConPriv, - double X, - double Y, - xArc A) -{ - char t[80]; - - sprintf( t, "PU0,0;WG%.2f,%.2f,%.2f;", sqrt( X * X + Y * Y ), - (float)A.angle1 / -64.0, - (float)A.angle2 / -64.0 ); - SAVE_PCL(outFile, pConPriv, t); -} - -static void -DoChord(FILE *outFile, - PclContextPrivPtr pConPriv, - double X, - double Y, - xArc A) -{ - char t[80]; - - sprintf( t, "PU%d,%d;PM0;AA0,0,%.2f;PA%d,%d;PM2;FP;", (int)X, (int)Y, - (float)A.angle2 / -64.0 , (int)X, (int)Y ); - SAVE_PCL(outFile, pConPriv, t); -} - - -void -PclPolyFillArc( - DrawablePtr pDrawable, - GCPtr pGC, - int nArcs, - xArc *pArcs) -{ - switch( pGC->arcMode ) - { - case ArcChord: - PclDoArc( pDrawable, pGC, nArcs, pArcs, DoChord ); - break; - case ArcPieSlice: - PclDoArc( pDrawable, pGC, nArcs, pArcs, DoWedge ); - break; - } -} diff --git a/hw/xprint/pcl/PclArea.c b/hw/xprint/pcl/PclArea.c deleted file mode 100644 index a4e53dad6..000000000 --- a/hw/xprint/pcl/PclArea.c +++ /dev/null @@ -1,436 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclArea.c -** * -** * Contents: -** * Image and Area functions for the PCL DDX driver -** * -** * Created: 10/23/95 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include "Pcl.h" -#include "pixmapstr.h" -#include "region.h" - -#include "fb.h" - -void -PclPutImage(DrawablePtr pDrawable, - GCPtr pGC, - int depth, - int x, - int y, - int w, - int h, - int leftPad, - int format, - char *pImage) -{ - PixmapPtr pPixmap; - unsigned long oldFg, oldBg; - XID gcv[3]; - unsigned long oldPlanemask; - unsigned long i; - long bytesPer; - - if( ( w == 0 ) || ( h == 0 ) ) - return; - - if( format != XYPixmap ) - { - pPixmap = GetScratchPixmapHeader( pDrawable->pScreen, - w+leftPad, h, depth, - BitsPerPixel( depth ), - PixmapBytePad( w + leftPad, - depth ), (pointer)pImage ); - if( !pPixmap ) - return; - - if( format == ZPixmap ) - (void)(*pGC->ops->CopyArea)( (DrawablePtr)pPixmap, pDrawable, pGC, - leftPad, 0, w, h, x, y ); - else - (void)(*pGC->ops->CopyPlane)( (DrawablePtr)pPixmap, pDrawable, pGC, - leftPad, 0, w, h, x, y, 1 ); - FreeScratchPixmapHeader( pPixmap ); - } - else - { - pPixmap = GetScratchPixmapHeader( pDrawable->pScreen, - w+leftPad, h, depth, - BitsPerPixel( depth ), - PixmapBytePad( w + leftPad, - depth ), (pointer)pImage ); - - if( !pPixmap ) - return; - - depth = pGC->depth; - oldPlanemask = pGC->planemask; - oldFg = pGC->fgPixel; - oldBg = pGC->bgPixel; - gcv[0] = ~0L; - gcv[1] = 0; - DoChangeGC( pGC, GCForeground | GCBackground, gcv, 0 ); - bytesPer = (long)h * BitmapBytePad( w + leftPad ); - - for( i = 1 << (depth-1); i != 0; i >>= 1, pImage += bytesPer ) - { - if( i & oldPlanemask ) - { - gcv[0] = i; - DoChangeGC( pGC, GCPlaneMask, gcv, 0 ); - ValidateGC( pDrawable, pGC ); - fbPutImage( (DrawablePtr)pPixmap, pGC, 1, x, y, w, h, - leftPad, XYBitmap, pImage ); - } - } - gcv[0] = oldPlanemask; - gcv[1] = oldFg; - gcv[2] = oldBg; - DoChangeGC( pGC, GCPlaneMask | GCForeground | GCBackground, - gcv, 0 ); - - PclCopyArea( (DrawablePtr)pPixmap, pDrawable, pGC, leftPad, - 0, w, h, x, y ); - FreeScratchPixmapHeader( pPixmap ); - } -} - -/* - * PclMonoPixmapFragment() - * - * Given a 1-bit-deep pixmap, send the appropriate part of it to the - * output file as a PCL raster graphics command. - */ -static void -PclMonoPixmapFragment(FILE *outFile, - PixmapPtr pix, - short x1, - short y1, - short x2, - short y2, - short dstx, - short dsty) -{ - char *bits, t[80], *row; - int h, w, i; - - /* - * Create a storage area large enough to hold the entire pixmap, - * then use fbGetImage to get the appropriate bits. - */ - h = y2 - y1; - w = BitmapBytePad( x2 - x1 ); - - bits = (char *)xalloc( h * w ); - fbGetImage( (DrawablePtr)pix, x1, y1, x2 - x1, h, - XYPixmap, ~0, bits ); - - /* - * Move the cursor to the appropriate place on the page. We have - * to jump into HP-GL/2 to do this correctly, then go back to PCL - * for the actual drawing. - */ - sprintf( t, "\033%%0BPU%d,%d;\033%%1A", dstx, dsty ); - SEND_PCL( outFile, t ); - - /* - * Now, wrap the raster in the appropriate PCL code. Right now, - * it's going to go down the wire without any compression. That - * will have to be good enough for the sample implementation. - */ - sprintf( t, "\033*t300R\033*r%dT\033*r%dS\033*r1A\033*b0M", - h, x2 - x1 ); - SEND_PCL( outFile, t ); - - sprintf( t, "\033*b%dW", w ); - for( row = bits, i = 0; i <= h; i++, row += w ) - { - SEND_PCL( outFile, t ); - SEND_PCL_COUNT( outFile, row, w ); - } - - SEND_PCL( outFile, "\033*rC" ); - - /* - * Clean things up a bit - */ - xfree( bits ); -} - -static void -PclColorPixmapFragment(FILE *outFile, - PixmapPtr pix, - short x1, - short y1, - short x2, - short y2, - short dstx, - short dsty) -{ - char *bits, t[80], *row; - int h, w, i; - - /* - * Create a storage area large enough to hold the entire pixmap, - * then use fbGetImage to get the appropriate bits. - */ - h = y2 - y1; - w = PixmapBytePad( x2 - x1, pix->drawable.depth ); - - bits = (char *)xalloc( h * w ); - fbGetImage( (DrawablePtr)pix, x1, y1, x2 - x1, h, ZPixmap, ~0, bits ); - - /* - * Move the cursor to the appropriate place on the page. We have - * to jump into HP-GL/2 to do this correctly, then go back to PCL - * for the actual drawing. - */ - sprintf( t, "\033%%0BPU%d,%d;\033%%1A", dstx, dsty ); - SEND_PCL( outFile, t ); - - /* - * Now, wrap the raster in the appropriate PCL code. Right now, - * it's going to go down the wire without any compression. That - * will have to be good enough for the sample implementation. - */ - sprintf( t, "\033*t300R\033*r%dt%ds1A\033*b0M", - h, x2 - x1 ); - SEND_PCL( outFile, t ); - - sprintf( t, "\033*b%dW", w ); - for( row = bits, i = 0; i < h; i++, row += w ) - { - SEND_PCL( outFile, t ); - SEND_PCL_COUNT( outFile, row, w ); - } - - SEND_PCL( outFile, "\033*rC" ); - - /* - * Clean things up a bit - */ - xfree( bits ); -} - -RegionPtr -PclCopyArea(DrawablePtr pSrc, - DrawablePtr pDst, - GCPtr pGC, - int srcx, - int srcy, - int width, - int height, - int dstx, - int dsty) -{ - PixmapPtr pixSrc = (PixmapPtr)pSrc; -/* - FILE *srcFile; - GC srcGC; -*/ - FILE *dstFile; - GC dstGC; - unsigned long valid; - RegionPtr drawRegion, region, whole, ret; - BoxRec box; - BoxPtr prect; - int nrect; - void (*doFragment)(FILE *, PixmapPtr, short, short, short, short, - short, short ); - - /* - * Since we don't store any information on a per-window basis, we - * can't copy from a window. - */ - if( pSrc->type == DRAWABLE_WINDOW ) - return NULL; - - /* - * If we're copying from a pixmap to a pixmap, we just use the - * fb code to do the work. - */ - if( pDst->type == DRAWABLE_PIXMAP ) - fbCopyArea( pSrc, pDst, pGC, srcx, srcy, width, height, dstx, dsty ); - -/* - PclGetDrawablePrivateStuff( pSrc, &srcGC, &valid, &srcFile ); -*/ - PclGetDrawablePrivateStuff( pDst, &dstGC, &valid, &dstFile ); - - /* - * If we're copying to a window, we have to do some actual - * drawing, instead of just handing it off to fb. Start - * by determining the region that will be drawn. - */ - box.x1 = srcx; - box.y1 = srcy; - box.x2 = srcx + width; - box.y2 = srcy + height; - drawRegion = REGION_CREATE( pGC->pScreen, &box, 0 ); - REGION_TRANSLATE( pGC->pScreen, drawRegion, dstx, dsty ); - - region = REGION_CREATE( pGC->pScreen, NULL, 0 ); - REGION_INTERSECT( pGC->pScreen, region, drawRegion, pGC->pCompositeClip ); - - /* - * Now select the operation to be performed on each box in the - * region. - */ - if( pSrc->depth == 1 ) - doFragment = PclMonoPixmapFragment; - else - doFragment = PclColorPixmapFragment; - - /* - * Actually draw each section of the bitmap. - */ - nrect = REGION_NUM_RECTS( region ); - prect = REGION_RECTS( region ); - - while( nrect ) - { - (*doFragment)( dstFile, (PixmapPtr)pSrc, prect->x1 - dstx, - prect->y1 - dsty, prect->x2 - dstx, - prect->y2 - dsty, prect->x1, prect->y1 ); - - nrect--; - prect++; - } - - /* - * Update the destination's GC to the source's GC. - */ -/* - PclSetDrawablePrivateGC( pDst, srcGC ); -*/ - - /* - * Determine the region that needs to be returned. This is the - * region of the source that falls outside the boundary of the - * pixmap. - */ - box.x1 = 0; - box.y1 = 0; - box.x2 = pixSrc->drawable.width; - box.y2 = pixSrc->drawable.height; - whole = REGION_CREATE( pGC->pScreen, &box, 0 ); - ret = REGION_CREATE( pGC->pScreen, NULL, 0 ); - - REGION_TRANSLATE( pGC->pScreen, drawRegion, -dstx, -dsty ); - REGION_SUBTRACT( pGC->pScreen, ret, drawRegion, whole ); - - /* - * Clean up the regions - */ - REGION_DESTROY( pGC->pScreen, drawRegion ); - REGION_DESTROY( pGC->pScreen, region ); - REGION_DESTROY( pGC->pScreen, whole ); - - if( REGION_NOTEMPTY( pGC->pScreen, ret ) ) - return ret; - else - { - REGION_DESTROY( pGC->pScreen, ret ); - return NULL; - } -} - -RegionPtr -PclCopyPlane(DrawablePtr pSrc, - DrawablePtr pDst, - GCPtr pGC, - int srcx, - int srcy, - int width, - int height, - int dstx, - int dsty, - unsigned long plane) -{ - RegionPtr reg; - GCPtr scratchGC; - PixmapPtr scratchPix; - - /* - * Since we don't store PCL on a per-window basis, there's no good - * way to copy from a window. - */ - if( pSrc->type == DRAWABLE_WINDOW ) - return NULL; - - /* Copying from a pixmap to a pixmap is already implemented by fb. */ - if( pSrc->type == DRAWABLE_PIXMAP && - pDst->type == DRAWABLE_PIXMAP ) - fbCopyPlane( pSrc, pDst, pGC, srcx, srcy, width, height, - dstx, dsty, plane ); - - /* - * We can use fbCopyPlane to do the work of grabbing the plane and - * converting it to the desired visual. Once that's done, we already - * know how to do a CopyArea. - */ - scratchPix = (*pDst->pScreen->CreatePixmap)( pDst->pScreen, width, - height, pDst->depth, - CREATE_PIXMAP_USAGE_SCRATCH ); - - scratchGC = GetScratchGC( pDst->depth, pDst->pScreen ); - CopyGC( pGC, scratchGC, ~0L ); - - fbValidateGC( scratchGC, ~0L, (DrawablePtr)scratchPix ); - fbCopyPlane( pSrc, (DrawablePtr)scratchPix, scratchGC, - srcx, srcy, width, height, 0, 0, plane ); - - reg = PclCopyArea( (DrawablePtr)scratchPix, pDst, pGC, 0, 0, width, - height, dstx, dsty ); - - FreeScratchGC( scratchGC ); - - (*pDst->pScreen->DestroyPixmap)( scratchPix ); - - return reg; -} diff --git a/hw/xprint/pcl/PclAttVal.c b/hw/xprint/pcl/PclAttVal.c deleted file mode 100644 index f0f204764..000000000 --- a/hw/xprint/pcl/PclAttVal.c +++ /dev/null @@ -1,206 +0,0 @@ -/* - */ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "Pcl.h" -#include "AttrValid.h" - -/* - * define valid values and defaults for Printer pool - */ -static XpOid ValidContentOrientationsOids[] = { - xpoid_val_content_orientation_portrait, - xpoid_val_content_orientation_landscape, - xpoid_val_content_orientation_reverse_portrait, - xpoid_val_content_orientation_reverse_landscape -}; -static XpOidList ValidContentOrientations = { - ValidContentOrientationsOids, XpNumber(ValidContentOrientationsOids) -}; - -static XpOid DefaultContentOrientationsOids[] = { - xpoid_val_content_orientation_portrait, - xpoid_val_content_orientation_landscape -}; -static XpOidList DefaultContentOrientations = { - DefaultContentOrientationsOids, XpNumber(DefaultContentOrientationsOids) -}; - -static XpOid ValidPlexesOids[] = { - xpoid_val_plex_simplex, xpoid_val_plex_duplex, xpoid_val_plex_tumble -}; -static XpOidList ValidPlexes = { - ValidPlexesOids, XpNumber(ValidPlexesOids) -}; - -static XpOid DefaultPlexesOids[] = { - xpoid_val_plex_simplex -}; -static XpOidList DefaultPlexes = { - DefaultPlexesOids, XpNumber(DefaultPlexesOids) -}; - -static unsigned long ValidPrinterResolutionsCards[] = { - 300 -}; -static XpOidCardList ValidPrinterResolutions = { - ValidPrinterResolutionsCards, XpNumber(ValidPrinterResolutionsCards) -}; - -static unsigned long DefaultPrinterResolutionsCards[] = { - 300 -}; -static XpOidCardList DefaultPrinterResolutions = { - DefaultPrinterResolutionsCards, XpNumber(DefaultPrinterResolutionsCards) -}; - -static XpOid ValidListfontsModesOids[] = { - xpoid_val_xp_list_internal_printer_fonts, xpoid_val_xp_list_glyph_fonts -}; -static XpOidList ValidListfontsModes = { - ValidListfontsModesOids, XpNumber(ValidListfontsModesOids) -}; - -static XpOid DefaultListfontsModesOids[] = { - xpoid_val_xp_list_glyph_fonts -}; -static XpOidList DefaultListfontsModes = { - DefaultListfontsModesOids, XpNumber(DefaultListfontsModesOids) -}; - -static XpOid ValidSetupProvisoOids[] = { - xpoid_val_xp_setup_mandatory, xpoid_val_xp_setup_optional -}; -static XpOidList ValidSetupProviso = { - - - ValidSetupProvisoOids, XpNumber(ValidSetupProvisoOids) -}; - -static XpOidDocFmt ValidDocFormatsSupportedFmts[] = { - { "PCL", "5", NULL }, -}; -static XpOidDocFmtList ValidDocFormatsSupported = { - ValidDocFormatsSupportedFmts, XpNumber(ValidDocFormatsSupportedFmts) -}; - -static XpOidDocFmt DefaultDocFormatsSupportedFmts[] = { - { "PCL", "5", NULL } -}; -static XpOidDocFmtList DefaultDocFormatsSupported = { - DefaultDocFormatsSupportedFmts, XpNumber(DefaultDocFormatsSupportedFmts) -}; - -static XpOidDocFmt ValidEmbeddedFormatsSupportedFmts[] = { - { "HPGL", "2", NULL }, -}; -static XpOidDocFmtList ValidEmbeddedFormatsSupported = { - ValidEmbeddedFormatsSupportedFmts, XpNumber(ValidEmbeddedFormatsSupportedFmts) -}; - -static XpOidDocFmt DefaultEmbeddedFormatsSupportedFmts[] = { - { "HPGL", "2", NULL } -}; -static XpOidDocFmtList DefaultEmbeddedFormatsSupported = { - DefaultEmbeddedFormatsSupportedFmts, XpNumber(DefaultEmbeddedFormatsSupportedFmts) -}; - -static XpOidDocFmt ValidRawFormatsSupportedFmts[] = { - { "PCL", "5", NULL }, - { "Postscript", "2", NULL }, - { "ASCII", NULL, NULL } - -}; -static XpOidDocFmtList ValidRawFormatsSupported = { - ValidRawFormatsSupportedFmts, XpNumber(ValidRawFormatsSupportedFmts) -}; - -static XpOidDocFmt DefaultRawFormatsSupportedFmts[] = { - { "PCL", "5", NULL } -}; -static XpOidDocFmtList DefaultRawFormatsSupported = { - DefaultRawFormatsSupportedFmts, XpNumber(DefaultRawFormatsSupportedFmts) -}; - -static XpOid ValidInputTraysOids[] = { - xpoid_val_input_tray_manual, - xpoid_val_input_tray_main, - xpoid_val_input_tray_envelope, - xpoid_val_input_tray_large_capacity, - xpoid_val_input_tray_bottom -}; -static XpOidList ValidInputTrays = { - ValidInputTraysOids, XpNumber(ValidInputTraysOids) -}; - -static XpOid ValidMediumSizesOids[] = { - xpoid_val_medium_size_iso_a3, - xpoid_val_medium_size_iso_a4, - xpoid_val_medium_size_na_letter, - xpoid_val_medium_size_na_legal, - xpoid_val_medium_size_executive, - xpoid_val_medium_size_ledger, - xpoid_val_medium_size_iso_c5, - xpoid_val_medium_size_iso_designated_long, - xpoid_val_medium_size_na_number_10_envelope, - xpoid_val_medium_size_monarch_envelope, - xpoid_val_medium_size_jis_b5, -}; -static XpOidList ValidMediumSizes = { - ValidMediumSizesOids, XpNumber(ValidMediumSizesOids) -}; - -static XpOidDocFmt DefaultDocumentFormat = { - "PCL", "5", NULL -}; - - -/* - * init struct for XpValidate*Pool - */ -XpValidatePoolsRec PclValidatePoolsRec = { - &ValidContentOrientations, &DefaultContentOrientations, - &ValidDocFormatsSupported, &DefaultDocFormatsSupported, - &ValidInputTrays, &ValidMediumSizes, - &ValidPlexes, &DefaultPlexes, - &ValidPrinterResolutions, &DefaultPrinterResolutions, - &ValidEmbeddedFormatsSupported, &DefaultEmbeddedFormatsSupported, - &ValidListfontsModes, &DefaultListfontsModes, - &ValidRawFormatsSupported, &DefaultRawFormatsSupported, - &ValidSetupProviso, - &DefaultDocumentFormat -}; diff --git a/hw/xprint/pcl/PclAttr.c b/hw/xprint/pcl/PclAttr.c deleted file mode 100644 index b27bf4fce..000000000 --- a/hw/xprint/pcl/PclAttr.c +++ /dev/null @@ -1,86 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclAttr.c -** * -** * Contents: -** * Attribute-handling functions for the PCL driver -** * -** * Created: 2/2/96 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "Pcl.h" -#include "attributes.h" - -char * -PclGetAttributes( - XpContextPtr pCon, - XPAttributes pool ) -{ - return XpGetAttributes( pCon, pool ); -} - -char * -PclGetOneAttribute( - XpContextPtr pCon, - XPAttributes pool, - char *attr ) -{ - return XpGetOneAttribute( pCon, pool, attr ); -} -int -PclAugmentAttributes( - XpContextPtr pCon, - XPAttributes pool, - char *attrs ) -{ - return XpAugmentAttributes( pCon, pool, attrs ); -} - -int -PclSetAttributes( - XpContextPtr pCon, - XPAttributes pool, - char *attrs ) -{ - return XpSetAttributes( pCon, pool, attrs ); -} diff --git a/hw/xprint/pcl/PclColor.c b/hw/xprint/pcl/PclColor.c deleted file mode 100644 index 5e8ffa63c..000000000 --- a/hw/xprint/pcl/PclColor.c +++ /dev/null @@ -1,851 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclColorInit.c -** * -** * Contents: -** * Colormap handing code of Pcl driver for the -** * print server. -** * -** * Created: 4/8/96 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include -#include -#include - -#include "colormapst.h" -#include "windowstr.h" -#include "resource.h" - -#include "Pcl.h" -#include "fb.h" - -static void lookup(unsigned char *src, - unsigned char *dst, - int num, - unsigned char *map, - int dim); -static void trilinear(unsigned char *p, - unsigned char *out, - unsigned char *d, - int dim, - unsigned char def); - - -/* - * This seems to be (and is) a duplication of effort; one would think - * that fbCreateDefColormap would be sufficient. It almost is. The - * only change made in this function is that the black and white pixels - * are allocated with three separate variables for red, green and blue - * values, instead of the single variable in fbCreateDefColormap. The - * single variable leads to the one value being corrected by - * ResolveColor three times, which leads to incorrect colors. - */ - -Bool -PclCreateDefColormap(ScreenPtr pScreen) -{ - unsigned short wp_red = ~0, wp_green = ~0, wp_blue = ~0; - unsigned short bp_red = 0, bp_green = 0, bp_blue = 0; - VisualPtr pVisual; - ColormapPtr cmap; - Pixel wp, bp; - - for (pVisual = pScreen->visuals; - pVisual->vid != pScreen->rootVisual; - pVisual++) - ; - - if (CreateColormap(pScreen->defColormap, pScreen, pVisual, &cmap, - (pVisual->class & DynamicClass) ? AllocNone : AllocAll, - 0) - != Success) - return FALSE; - wp = pScreen->whitePixel; - bp = pScreen->blackPixel; - if ((AllocColor(cmap, &wp_red, &wp_green, &wp_blue, &wp, 0) != - Success) || - (AllocColor(cmap, &bp_red, &bp_green, &bp_blue, &bp, 0) != - Success)) - return FALSE; - - pScreen->whitePixel = wp; - pScreen->blackPixel = bp; - - (*pScreen->InstallColormap)(cmap); - return TRUE; -} - -/* - * Add colormap to list of colormaps on screen - */ -Bool -PclCreateColormap(ColormapPtr pColor) -{ - PclCmapToContexts *new; - PclScreenPrivPtr sPriv; - - sPriv = (PclScreenPrivPtr) - dixLookupPrivate(&pColor->pScreen->devPrivates, PclScreenPrivateKey); - - /* - * Use existing code to initialize the values in the colormap - */ - fbInitializeColormap( pColor ); - - /* - * Set up the mapping between the color map and the context - */ - new = (PclCmapToContexts *)xalloc( sizeof( PclCmapToContexts ) ); - - if( new ) - { - new->colormapId = pColor->mid; - new->contexts = NULL; - new->next = sPriv->colormaps; - sPriv->colormaps = new; - - return TRUE; - } - else - return FALSE; -} - -void -PclDestroyColormap(ColormapPtr pColor) -{ - PclScreenPrivPtr sPriv; - PclCmapToContexts *pCmap, *tCmap = 0; - PclContextListPtr con, tCon; - PclContextPrivPtr cPriv; - PclPaletteMapPtr pPal; - char t[80]; - - /* - * At DestroyContext time, colormaps may be destroyed twice, so if the - * pointer is NULL, just crash out. - */ - if( !pColor ) - return; - - /* - * Find the colormap <-> contexts mapping - */ - sPriv = (PclScreenPrivPtr) - dixLookupPrivate(&pColor->pScreen->devPrivates, PclScreenPrivateKey); - pCmap = sPriv->colormaps; - while( pCmap ) - { - if( pCmap->colormapId == pColor->mid ) - break; - tCmap = pCmap; - pCmap = pCmap->next; - } - - /* - * For each context, delete the palette in the printer and - * free the mapping. - */ - if( pCmap ) - { - con = pCmap->contexts; - while( con ) - { - cPriv = dixLookupPrivate(&con->context->devPrivates, - PclContextPrivateKey); - pPal = cPriv->palettes; - while( pPal ) - { - if( pPal->colormapId == pColor->mid ) - break; - pPal = pPal->next; - } - - if( cPriv->pPageFile ) - { - sprintf( t, "\033&p%dI\033*p2C", pPal->paletteId ); - SEND_PCL( cPriv->pPageFile, t ); - } - - tCon = con; - con = con->next; - xfree( tCon ); - } - - /* - * Delete the colormap<->contexts mapping - */ - if( sPriv->colormaps == pCmap ) - /* Delete from the front */ - sPriv->colormaps = pCmap->next; - else - /* Delete from the middle */ - tCmap->next = pCmap->next; - free( pCmap ); - } -} - -void -PclInstallColormap(ColormapPtr pColor) -{ -} - -void -PclUninstallColormap(ColormapPtr pColor) -{ -} - -int -PclListInstalledColormaps(ScreenPtr pScreen, - XID *pCmapList) -{ - return 0; -} - -void -PclStoreColors(ColormapPtr pColor, - int ndef, - xColorItem *pdefs) -{ - PclCmapToContexts *p; - PclScreenPrivPtr sPriv; - PclContextListPtr con; - PclContextPrivPtr cPriv; - PclPaletteMapPtr pMap; - char t[80]; - int i; - - sPriv = (PclScreenPrivPtr) - dixLookupPrivate(&pColor->pScreen->devPrivates, PclScreenPrivateKey); - p = sPriv->colormaps; - while( p ) - { - if( p->colormapId == pColor->mid ) - break; - p = p->next; - } - - if( p ) - { - con = p->contexts; - while( con ) - { - /* - * For each context, get the palette ID and update the - * appropriate palette. - */ - cPriv = dixLookupPrivate(&con->context->devPrivates, - PclContextPrivateKey); - pMap = PclFindPaletteMap( cPriv, pColor, NULL ); - - /* - * Update the palette - */ - sprintf( t, "\033&p%dS", pMap->paletteId ); - SEND_PCL( cPriv->pPageFile, t ); - - if( pColor->class == PseudoColor ) - { - unsigned short r, g, b; - unsigned int pID; - for( i = 0; i < ndef; i++ ) - { - pID = pdefs[i].pixel; - if ( pColor->red[i].fShared ) - { - r = pColor->red[pID].co.shco.red->color; - g = pColor->red[pID].co.shco.green->color; - b = pColor->red[pID].co.shco.blue->color; - } - else - { - r = pColor->red[pID].co.local.red; - g = pColor->red[pID].co.local.green; - b = pColor->red[pID].co.local.blue; - } - - if( pdefs[i].flags & DoRed ) - r = pdefs[i].red; - if( pdefs[i].flags & DoGreen ) - g = pdefs[i].green; - if( pdefs[i].flags & DoBlue ) - b = pdefs[i].blue; - PclLookUp(pColor, cPriv, &r, &g, &b); - sprintf( t, "\033*v%ua%ub%uc%dI", r, g, b, pID); - SEND_PCL( cPriv->pPageFile, t ); - } - } - - sprintf( t, "\033&p%dS", cPriv->currentPalette ); - SEND_PCL( cPriv->pPageFile, t ); - - con = con->next; - } - } -} - -void -PclResolveColor(unsigned short *pRed, - unsigned short *pGreen, - unsigned short *pBlue, - VisualPtr pVisual) -{ - /* - * We need to map the X color range of [0,65535] to the PCL color - * range of [0,32767]. - */ - *pRed >>= 1; - *pGreen >>= 1; - *pBlue >>= 1; -} - -PclPaletteMapPtr -PclFindPaletteMap(PclContextPrivPtr cPriv, - ColormapPtr cmap, - GCPtr gc) -{ - PclPaletteMapPtr p = cPriv->palettes, new; - - /* - * If the colormap is static, grab one of the special palettes. If we come - * into this from StoreColors, there will be no GC, but by definition we're - * looking at a dynamic color map, so the special colors will not be - * needed. - */ - if( gc ) - { - if( cmap->pVisual->class == StaticGray ) - return &( cPriv->staticGrayPalette ); - else if( cmap->pVisual->class == TrueColor ) - { - if( gc->fillStyle == FillTiled && !( gc->tileIsPixel ) ) - return &( cPriv->specialTrueColorPalette ); - else - return &( cPriv->trueColorPalette ); - } - } - - - /* Look for the colormap ID <-> palette ID mapping */ - while( p ) - { - if( p->colormapId == cmap->mid ) - return p; - p = p->next; - } - - /* If the colormap isn't already there, make an entry for it */ - new = (PclPaletteMapPtr)xalloc( sizeof( PclPaletteMap ) ); - new->colormapId = cmap->mid; - new->paletteId = cPriv->nextPaletteId++; - new->downloaded = 0; - new->next = cPriv->palettes; - cPriv->palettes = new; - return new; -} - -int -PclUpdateColormap(DrawablePtr pDrawable, - XpContextPtr pCon, - GCPtr gc, - FILE *outFile) -{ - PclScreenPrivPtr sPriv; - - PclContextPrivPtr cPriv; - PclPaletteMapPtr pMap; - PclCmapToContexts *pCmap; - PclContextListPtr new; - char t[80]; - Colormap c; - ColormapPtr cmap; - WindowPtr win = (WindowPtr)pDrawable; - unsigned short r, g, b, rr, gg, bb; - int i; - - cPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - - c = wColormap( win ); - cmap = (ColormapPtr)LookupIDByType( c, RT_COLORMAP ); - pMap = PclFindPaletteMap( cPriv, cmap, gc ); - - if( cPriv->currentPalette == pMap->paletteId ) - /* - * If the requested colormap is already active, nothing needs to - * be done. - */ - return FALSE; - - /* - * Now we activate the palette in the printer - */ - sprintf( t, "\033&p%dS", pMap->paletteId ); - SEND_PCL( outFile, t ); - cPriv->currentPalette = pMap->paletteId; - - if( pMap->downloaded == 0 ) - /* - * If the requested colormap has not been downloaded to the - * printer, we need to do that before activating it. - */ - { - /* - * Add the colormap to the screen-level colormap<->context mapping. - */ - sPriv = (PclScreenPrivPtr) - dixLookupPrivate(&cmap->pScreen->devPrivates, - PclScreenPrivateKey); - pCmap = sPriv->colormaps; - while( pCmap && ( pCmap->colormapId != cmap->mid ) ) - pCmap = pCmap->next; - new = (PclContextListPtr)xalloc( sizeof( PclContextList ) ); - new->context = pCon; - new->next = pCmap->contexts; - pCmap->contexts = new; - - /* - * XXX Download the colormap - */ - if( cmap->class == StaticGray ) - { -#ifdef XP_PCL_COLOR - sprintf( t, "\033*v18W%c%c%c%c%c%c", 0, 1, 1, 1, 1, 1 ); - SEND_PCL_COUNT( cPriv->pPageFile, t, 12 ); - - /* Send the white reference point... */ - sprintf( t, "%c%c%c%c%c%c", 0x7f, 0xff, 0x7f, 0xff, - 0x7f, 0xff ); - SEND_PCL_COUNT( cPriv->pPageFile, t, 6 ); - - /* ... and the black reference point */ - sprintf( t, "%c%c%c%c%c%c", 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00 ); - SEND_PCL_COUNT( cPriv->pPageFile, t, 6 ); - - /* Now program the two colors */ - sprintf( t, "\033*v0a0b0c%ldI", (long) cmap->pScreen->blackPixel ); - SEND_PCL( cPriv->pPageFile, t ); - sprintf( t, "\033*v32767a32767b32767c%ldI", - (long) cmap->pScreen->whitePixel ); - SEND_PCL( cPriv->pPageFile, t ); -#endif /* XP_PCL_COLOR */ - } - else if( cmap->class == PseudoColor ) - { - sprintf( t, - "\033*v18W%c%c%c%c%c%c", - 0, 1, cmap->pVisual->nplanes, 16, 16, 16 ); - SEND_PCL_COUNT( cPriv->pPageFile, t, 12 ); - - /* Send the white reference point... */ - if ( cPriv->ctbl != NULL ) - sprintf( t, "%c%c%c%c%c%c", 0x00, 0xff, 0x00, 0xff, - 0x00, 0xff ); - else - sprintf( t, "%c%c%c%c%c%c", 0x7f, 0xff, 0x7f, 0xff, - 0x7f, 0xff ); - SEND_PCL_COUNT( cPriv->pPageFile, t, 6 ); - - /* ... and the black reference point */ - sprintf( t, "%c%c%c%c%c%c", 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00 ); - SEND_PCL_COUNT( cPriv->pPageFile, t, 6 ); - - for(i = 0; i < cmap->pVisual->ColormapEntries; i++ ) - { - if( cmap->red[i].fShared ) - { - r = cmap->red[i].co.shco.red->color; - g = cmap->red[i].co.shco.green->color; - b = cmap->red[i].co.shco.blue->color; - } - else - { - r = cmap->red[i].co.local.red; - g = cmap->red[i].co.local.green; - b = cmap->red[i].co.local.blue; - } - PclLookUp(cmap, cPriv, &r, &g, &b); - sprintf( t, "\033*v%ua%ub%uc%dI", r, g, b, i ); - SEND_PCL( outFile, t ); - } - } - else if( cmap->class == TrueColor ) - { - unsigned short lim; - - if( gc->fillStyle == FillTiled && !( gc->tileIsPixel ) ) - { - if( cPriv->ctbl != NULL ) - { - /* Send the "special" colormap for 24-bit fills */ - sprintf( t, "\033*v18W%c%c%c%c%c%c", 0, 1, - 8, - cmap->pVisual->bitsPerRGBValue, - cmap->pVisual->bitsPerRGBValue, - cmap->pVisual->bitsPerRGBValue ); - SEND_PCL_COUNT( cPriv->pPageFile, t, 12 ); - - /* Send the white reference point... */ - sprintf( t, "%c%c%c%c%c%c", - 0x00, 0xff, - 0x00, 0xff, - 0x00, 0xff ); - SEND_PCL_COUNT( cPriv->pPageFile, t, 6 ); - - /* ... and the black reference point */ - sprintf( t, "%c%c%c%c%c%c", - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00 ); - SEND_PCL_COUNT( cPriv->pPageFile, t, 6 ); - - /* Now send the color entries, RRRGGGBB */ - i=0; - for( r = 0; r < 8; r++ ) - for( g = 0; g < 8; g ++ ) - for( b = 0; b < 4; b++ ) - { - rr = (r * 0xff)/7; - gg = (g * 0xff)/7; - bb = (b * 0xff)/3; - PclLookUp(cmap, cPriv, &rr, &gg, &bb); - sprintf( t, "\033*v%ua%ub%uc%dI", - rr, gg, bb, i ); - SEND_PCL( outFile, t ); - i++; - } - } - else - { - /* Send the "special" colormap for 24-bit fills */ - sprintf( t, "\033*v18W%c%c%c%c%c%c", 0, 1, - 8, - cmap->pVisual->bitsPerRGBValue, - cmap->pVisual->bitsPerRGBValue, - cmap->pVisual->bitsPerRGBValue ); - SEND_PCL_COUNT( cPriv->pPageFile, t, 12 ); - - /* Send the white reference point... */ - sprintf( t, "%c%c%c%c%c%c", - 0x00, 0x07, - 0x00, 0x07, - 0x00, 0x03 ); - SEND_PCL_COUNT( cPriv->pPageFile, t, 6 ); - - /* ... and the black reference point */ - sprintf( t, "%c%c%c%c%c%c", - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00 ); - SEND_PCL_COUNT( cPriv->pPageFile, t, 6 ); - - /* Now send the color entries, RRRGGGBB */ - i=0; - for( r = 0; r < 8; r++ ) - for( g = 0; g < 8; g ++ ) - for( b = 0; b < 4; b++ ) - { - sprintf( t, "\033*v%ua%ub%uc%dI", - r, g, b, i ); - SEND_PCL( outFile, t ); - i++; - } - } - - } - else - { - lim = (1 << cmap->pVisual->bitsPerRGBValue) - 1; - - /* Send the "special" colormap for 24-bit fills */ - sprintf( t, "\033*v18W%c%c%c%c%c%c", 0, 3, - cmap->pVisual->nplanes, - cmap->pVisual->bitsPerRGBValue, - cmap->pVisual->bitsPerRGBValue, - cmap->pVisual->bitsPerRGBValue ); - SEND_PCL_COUNT( cPriv->pPageFile, t, 12 ); - - /* Send the white reference point... */ - sprintf( t, "%c%c%c%c%c%c", - (lim >> 8) & 0xff, lim & 0xff, - (lim >> 8) & 0xff, lim & 0xff, - (lim >> 8) & 0xff, lim & 0xff); - SEND_PCL_COUNT( cPriv->pPageFile, t, 6 ); - - /* ... and the black reference point */ - sprintf( t, "%c%c%c%c%c%c", 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00 ); - SEND_PCL_COUNT( cPriv->pPageFile, t, 6 ); - } - - } - pMap->downloaded = 1; - } - return TRUE; - -} - -void PclLookUp( - ColormapPtr cmap, - PclContextPrivPtr cPriv, - unsigned short *r, - unsigned short *g, - unsigned short *b -) -{ - unsigned char cdata[3]; - - if( cmap->class == PseudoColor ) - { - if( cPriv->ctbl != NULL ) - { - cdata[0] = *r >> 8; - cdata[1] = *g >> 8; - cdata[2] = *b >> 8; - lookup(cdata, cdata, 1, cPriv->ctbl, cPriv->ctbldim); - *r = cdata[0]; - *g = cdata[1]; - *b = cdata[2]; - } - else - { - *r >>= 1; - *g >>= 1; - *b >>= 1; - } - } - else if( cmap->class == TrueColor ) - { - if( cPriv->ctbl != NULL ) - { - cdata[0] = *r; - cdata[1] = *g; - cdata[2] = *b; - lookup(cdata, cdata, 1, cPriv->ctbl, cPriv->ctbldim); - *r = cdata[0]; - *g = cdata[1]; - *b = cdata[2]; - } - } - return; -} - -unsigned char *PclReadMap(char *name, int *dim) -{ - FILE *fp; - unsigned char *data; - long size; - - if ((fp=fopen(name, "r")) == NULL) { - return(NULL); - } - - fseek(fp, 0, SEEK_END); - size = ftell(fp); - - /* Could do this with a lookup table, if the constraint is that the - 3 map dimensions must be equal. */ - switch (size) { - case 8*8*8*3: - *dim = 8; - break; - case 16*16*16*3: - *dim = 16; - break; - case 17*17*17*3: - *dim = 17; - break; - case 65*65*65*3: - *dim = 65; - break; - default: - fclose(fp); - return(NULL); - } - - if ((data = (unsigned char *) xalloc(sizeof(char) * size)) == NULL) { - fclose(fp); - return(NULL); - } - - fseek(fp, 0, SEEK_SET); - - if (fread(data, sizeof(char), size, fp) != (unsigned) size) { - fclose(fp); - free(data); - return(NULL); - } - - fclose(fp); - return(data); -} - -/************************************************************************ - * - * Here is the mapper. - * - ************************************************************************/ - -#define SCL(x) ((x)*(dim-1)/255) -/* Interleaved-map lookup */ -static void lookup(unsigned char *src, unsigned char *dst, int num, unsigned char *map, int dim) -{ - int i; - -#define _INTERPOLATE -#ifndef _INTERPOLATE - unsigned char *p1, *p2, *p3; - - for (i=0; i>8)) - -static void trilinear(unsigned char *p, unsigned char *out, unsigned char *d, int dim, unsigned char def) -{ -#define DENS(X, Y, Z, ch) d[((X*dim+Y)*dim+Z)*3+ch] - - int x0, y0, z0, - x1, y1, z1, - i; - unsigned char *dp, - fx, fy, fz, - d000, d001, d010, d011, - d100, d101, d110, d111, - dx00, dx01, dx10, dx11, - dxy0, dxy1; - float scale; - - scale = 255.0 / (dim-1); - - x0 = p[0] / scale; - y0 = p[1] / scale; - z0 = p[2] / scale; - - /* Fractions should range from 0-1.0 (fixed point 8-256) */ - fx = (((int) (p[0] - x0 * scale)) << 8) / 255; - fy = (((int) (p[1] - y0 * scale)) << 8) / 255; - fz = (((int) (p[2] - z0 * scale)) << 8) / 255; - - x1 = x0 + 1; - y1 = y0 + 1; - z1 = z0 + 1; - - for (i=0; i<3; i++) { - - if (x0 >= 0 && x1 < dim && - y0 >= 0 && y1 < dim && - z0 >= 0 && z1 < dim) { - dp = &DENS(x0, y0, z0, i); - d000 = dp[0]; - d100 = dp[3]; - dp += dim*3; - d010 = dp[0]; - d110 = dp[3]; - dp += dim*dim*3; - d011 = dp[0]; - d111 = dp[3]; - dp -= dim*3; - d001 = dp[0]; - d101 = dp[3]; - } else { -# define INRANGE(X, Y, Z) \ - ((X) >= 0 && (X) < dim && \ - (Y) >= 0 && (Y) < dim && \ - (Z) >= 0 && (Z) < dim) - - d000 = INRANGE(x0, y0, z0) ? DENS(x0, y0, z0, i) : def; - d001 = INRANGE(x0, y0, z1) ? DENS(x0, y0, z1, i) : def; - d010 = INRANGE(x0, y1, z0) ? DENS(x0, y1, z0, i) : def; - d011 = INRANGE(x0, y1, z1) ? DENS(x0, y1, z1, i) : def; - - d100 = INRANGE(x1, y0, z0) ? DENS(x1, y0, z0, i) : def; - d101 = INRANGE(x1, y0, z1) ? DENS(x1, y0, z1, i) : def; - d110 = INRANGE(x1, y1, z0) ? DENS(x1, y1, z0, i) : def; - d111 = INRANGE(x1, y1, z1) ? DENS(x1, y1, z1, i) : def; - } - - dx00 = LERP(fx, d000, d100); - dx01 = LERP(fx, d001, d101); - dx10 = LERP(fx, d010, d110); - dx11 = LERP(fx, d011, d111); - - dxy0 = LERP(fy, dx00, dx10); - dxy1 = LERP(fy, dx01, dx11); - - out[i] = LERP(fz, dxy0, dxy1); - } -} - diff --git a/hw/xprint/pcl/PclCursor.c b/hw/xprint/pcl/PclCursor.c deleted file mode 100644 index a3eeb1610..000000000 --- a/hw/xprint/pcl/PclCursor.c +++ /dev/null @@ -1,113 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclCursor.c -** * -** * Contents: -** * Cursor-handling code for the PCL DDX driver -** * -** * Created: 1/18/96 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include - -#include "Pcl.h" -#include "gcstruct.h" -#include "windowstr.h" - -void -PclConstrainCursor( - ScreenPtr pScreen, - BoxPtr pBox) -{ -} - -void -PclCursorLimits( - ScreenPtr pScreen, - CursorPtr pCursor, - BoxPtr pHotBox, - BoxPtr pTopLeftBox) -{ -} - -Bool -PclDisplayCursor( - ScreenPtr pScreen, - CursorPtr pCursor) -{ - return True; -} - -Bool -PclRealizeCursor( - ScreenPtr pScreen, - CursorPtr pCursor) -{ - return True; -} - -Bool -PclUnrealizeCursor( - ScreenPtr pScreen, - CursorPtr pCursor) -{ - return True; -} - -void -PclRecolorCursor( - ScreenPtr pScreen, - CursorPtr pCursor, - Bool displayed) -{ -} - -Bool -PclSetCursorPosition( - ScreenPtr pScreen, - int x, - int y, - Bool generateEvent) -{ - return True; -} diff --git a/hw/xprint/pcl/PclDef.h b/hw/xprint/pcl/PclDef.h deleted file mode 100644 index dcd54c4fe..000000000 --- a/hw/xprint/pcl/PclDef.h +++ /dev/null @@ -1,67 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclDef.h -** * -** * Contents: extran defines and includes for the Pcl driver -** * for a printing X server. -** * -** * Created: 7/31/95 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#ifndef _PCLDEF_H_ -#define _PCLDEF_H_ - -#define DT_PRINT_JOB_HEADER "DT_PRINT_JOB_HEADER" -#define DT_PRINT_JOB_TRAILER "DT_PRINT_JOB_TRAILER" -#define DT_PRINT_JOB_COMMAND "DT_PRINT_JOB_COMMAND" -#define DT_PRINT_JOB_EXEC_COMMAND "DT_PRINT_JOB_EXEC_COMMAND" -#define DT_PRINT_JOB_EXEC_OPTIONS "DT_PRINT_JOB_EXEC_OPTION" -#define DT_PRINT_PAGE_HEADER "DT_PRINT_PAGE_HEADER" -#define DT_PRINT_PAGE_TRAILER "DT_PRINT_PAGE_TRAILER" -#define DT_PRINT_PAGE_COMMAND "DT_PRINT_PAGE_COMMAND" - -#define DT_IN_FILE_STRING "%(InFile)%" -#define DT_OUT_FILE_STRING "%(OutFile)%" -#define DT_ALLOWED_COMMANDS_FILE "printCommands" - -#endif /* _PCLDEF_H_ */ diff --git a/hw/xprint/pcl/PclFonts.c b/hw/xprint/pcl/PclFonts.c deleted file mode 100644 index 9e993f79c..000000000 --- a/hw/xprint/pcl/PclFonts.c +++ /dev/null @@ -1,72 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclFonts.c -** * -** * Contents: -** * Font code for Pcl driver. -** * -** * Created: 2/03/95 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "regionstr.h" -#include -#include "dixfontstr.h" -#include "scrnintstr.h" - -#include "Pcl.h" - -Bool -PclRealizeFont( - ScreenPtr pscr, - FontPtr pFont) -{ - return TRUE; -} - -Bool -PclUnrealizeFont( - ScreenPtr pscr, - FontPtr pFont) -{ - return TRUE; -} diff --git a/hw/xprint/pcl/PclGC.c b/hw/xprint/pcl/PclGC.c deleted file mode 100644 index fbadf5d5d..000000000 --- a/hw/xprint/pcl/PclGC.c +++ /dev/null @@ -1,971 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclGC.c -** * -** * Contents: -** * Graphics Context handling for the PCL driver -** * -** * Created: 10/11/95 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "gcstruct.h" - -#include "Pcl.h" -#include "pixmapstr.h" -#include "colormapst.h" -#include "windowstr.h" -#include "fb.h" -#include "scrnintstr.h" -#include "resource.h" - -static GCOps PclGCOps = -{ - PclFillSpans, - PclSetSpans, - PclPutImage, - PclCopyArea, - PclCopyPlane, - PclPolyPoint, - PclPolyLine, - PclPolySegment, - PclPolyRectangle, - PclPolyArc, - PclFillPolygon, - PclPolyFillRect, - PclPolyFillArc, - PclPolyText8, - PclPolyText16, - PclImageText8, - PclImageText16, - PclImageGlyphBlt, - PclPolyGlyphBlt, - PclPushPixels -} -; - - -static GCFuncs PclGCFuncs = -{ - PclValidateGC, - miChangeGC, - miCopyGC, - PclDestroyGC, - miChangeClip, - miDestroyClip, - miCopyClip, -} -; - -Bool -PclCreateGC(GCPtr pGC) -{ - if (fbCreateGC(pGC) == FALSE) - return FALSE; - - pGC->clientClip = NULL; - pGC->clientClipType = CT_NONE; - - pGC->ops = &PclGCOps; - pGC->funcs = &PclGCFuncs; - - return TRUE; -} - -void -PclDestroyGC(GCPtr pGC) -{ - /* fb doesn't specialize DestroyGC */ - miDestroyGC( pGC ); -} - - -int -PclGetDrawablePrivateStuff( - DrawablePtr pDrawable, - GC *gc, - unsigned long *valid, - FILE **file) -{ - XpContextPtr pCon; - PclContextPrivPtr cPriv; - - switch( pDrawable->type ) - { - case DRAWABLE_PIXMAP: - /* - * If we ever get here, something is wrong. - */ - return FALSE; - - case DRAWABLE_WINDOW: - pCon = PclGetContextFromWindow( (WindowPtr)pDrawable ); - - if( pCon == NULL ) - return FALSE; - else - { - cPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - *gc = cPriv->lastGC; - *valid = cPriv->validGC; - *file = cPriv->pPageFile; - return TRUE; - } - - default: - return FALSE; - } -} - -void -PclSetDrawablePrivateGC( - DrawablePtr pDrawable, - GC gc) -{ - PixmapPtr pix; - XpContextPtr pCon; - PclPixmapPrivPtr pixPriv; - PclContextPrivPtr pPriv; - int i; - - switch( pDrawable->type ) - { - case DRAWABLE_PIXMAP: - pix = (PixmapPtr)pDrawable; - pixPriv = (PclPixmapPrivPtr) - dixLookupPrivate(&pix->devPrivates, PclPixmapPrivateKey); - - pixPriv->lastGC = gc; - pixPriv->validGC = 1; - break; - - case DRAWABLE_WINDOW: - pCon = PclGetContextFromWindow( (WindowPtr)pDrawable ); - pPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - - pPriv->validGC = 1; - pPriv->lastGC = gc; - - /* - * Store the dash list separately, to avoid having it freed - * out from under us. - */ - if( pPriv->dash != NULL ) - xfree( pPriv->dash ); - if( gc.numInDashList != 0 ) - { - pPriv->dash = (unsigned char *)xalloc( sizeof( unsigned char ) - * gc.numInDashList ); - for( i = 0; i < gc.numInDashList; i++ ) - pPriv->dash[i] = gc.dash[i]; - } - else - pPriv->dash = NULL; - - - /* - * Store the dash list separately, to avoid having it freed - * out from under us. - */ - if( pPriv->dash != NULL ) - xfree( pPriv->dash ); - if( gc.numInDashList != 0 ) - { - pPriv->dash = (unsigned char *)xalloc( sizeof( unsigned char ) - * gc.numInDashList ); - for( i = 0; i < gc.numInDashList; i++ ) - pPriv->dash[i] = gc.dash[i]; - } - else - pPriv->dash = NULL; - - break; - } -} - -static void -PclSendPattern(char *bits, - int sz, - int depth, - int h, - int w, - int patNum, - FILE *outFile) -{ - char t[80], *row, *mod; - int w2; - int i, j; - - SEND_PCL( outFile, "\033%0A" ); - - if( depth == 1 ) - { - /* Each row must be word-aligned */ - w2 = ( w / 8 ) + ( ( w%8 ) ? 1 : 0 ); -/* - if( w2 % 2 ) - w2++; -*/ - - sprintf( t, "\033*c%dg%dW", patNum, h * w2 + 8 ); - SEND_PCL( outFile, t ); - - sprintf( t, "%c%c%c%c%c%c%c%c", 0, 0, 1, 0, h>>8, h&0xff, w>>8, - w&0xff ); - SEND_PCL_COUNT( outFile, t, 8 ); - - for( row = bits, i = 0; i < h; i++, row += BitmapBytePad( w ) ) - SEND_PCL_COUNT( outFile, row, w2 ); - } - else if( depth == 8 ) - { - w2 = ( w % 2 ) ? w + 1 : w; - - sprintf( t, "\033*c%dg%dW", patNum, h * w2 + 8 ); - SEND_PCL( outFile, t ); - - sprintf( t, "%c%c%c%c%c%c%c%c", 1, 0, 8, 0, h>>8, h&0xff, - w>>8, w&0xff ); - SEND_PCL_COUNT( outFile, t, 8 ); - - for( row = bits, i = 0; i < h; i++, - row += PixmapBytePad( w, 8 ) ) - SEND_PCL_COUNT( outFile, row, w2 ); - } - else - { - w2 = ( w % 2 ) ? w + 1 : w; - - sprintf( t, "\033*c%dg%dW", patNum, h * w2 + 8 ); - SEND_PCL( outFile, t ); - - sprintf( t, "%c%c%c%c%c%c%c%c", 1, 0, 8, 0, h>>8, h&0xff, - w>>8, w&0xff ); - SEND_PCL_COUNT( outFile, t, 8 ); - - mod = (char *)xalloc( w2 ); - - for( row = bits, i = 0; i < h; i++, - row += PixmapBytePad( w, 24 ) ) - { - char r, g, b; - for( j = 0; j < w2; j++ ) { - r = ((row[j*4+1] >> 5) & 0x7) << 5; - g = ((row[j*4+2] >> 5) & 0x7) << 2; - b = ((row[j*4+3] >> 6) & 0x3); - mod[j] = r | g | b; - } - SEND_PCL_COUNT( outFile, mod, w2 ); - } - - xfree( mod ); - } - - SEND_PCL( outFile, "\033%0B" ); -} - -int -PclUpdateDrawableGC( - GCPtr pGC, - DrawablePtr pDrawable, - FILE **outFile) -{ - Mask changeMask = 0; - GC dGC; - unsigned long valid; - int i; - XpContextPtr pCon; - PclContextPrivPtr cPriv; - PclGCPrivPtr gcPriv = (PclGCPrivPtr) - dixLookupPrivate(&pGC->devPrivates, PclGCPrivateKey); - - if( !PclGetDrawablePrivateStuff( pDrawable, &dGC, &valid, outFile ) ) - return FALSE; - - pCon = PclGetContextFromWindow( (WindowPtr)pDrawable ); - cPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - - /* - * Here's where we update the colormap. Since there can be - * different colormaps installed on each window, we need to check - * before each drawing request that the correct palette is active in - * the printer. This is as good a place as any. - */ - if( !PclUpdateColormap( pDrawable, pCon, pGC, *outFile ) ) - return FALSE; - - /* - * If the drawable's last GC is NULL, this means that this is - * the first time the drawable is being used. Therefore, we need - * to emit PCL for all the GC fields. - */ - if( valid == 0 ) - changeMask = ~0; - - /* - * If we have two different GC structures, there is no alternative - * but to scan through them both to determine the changeMask. - */ - else - { - if( dGC.alu != pGC->alu ) - changeMask |= GCFunction; - if( dGC.fgPixel != pGC->fgPixel ) - changeMask |= GCForeground; - if( dGC.bgPixel != pGC->bgPixel ) - changeMask |= GCBackground; - if( dGC.lineWidth != pGC->lineWidth ) - changeMask |= GCLineWidth; - if( dGC.lineStyle != pGC->lineStyle ) - changeMask |= GCLineStyle; - if( dGC.capStyle != pGC->capStyle ) - changeMask |= GCCapStyle; - if( dGC.joinStyle != pGC->joinStyle ) - changeMask |= GCJoinStyle; - if( dGC.fillStyle != pGC->fillStyle ) - changeMask |= GCFillStyle; - if( dGC.tile.pixmap != pGC->tile.pixmap ) - changeMask |= GCTile; - if( dGC.stipple != pGC->stipple ) - changeMask |= GCStipple; - if( dGC.patOrg.x != pGC->patOrg.x ) - changeMask |= GCTileStipXOrigin; - if( dGC.patOrg.y != pGC->patOrg.y ) - changeMask |= GCTileStipYOrigin; - - if( dGC.numInDashList == pGC->numInDashList ) - { - for( i = 0; i < dGC.numInDashList; i++ ) - if( cPriv->dash[i] != pGC->dash[i] ) - { - changeMask |= GCDashList; - break; - } - } - else - changeMask |= GCDashList; - } - - /* - * Once the changeMask has been determined, we scan it and emit - * the appropriate PCL code to set the drawing attributes. - */ - - /* Must be in HP-GL/2 mode to set attributes */ - SEND_PCL( *outFile, "\033%0B" ); - - if( changeMask & GCFunction ) - { -#ifdef XP_PCL_COLOR - - if( pGC->alu == GXclear ) - SEND_PCL( *outFile, "SP0;" ); - else - SEND_PCL( *outFile, "SP1;" ); -#else - if( pGC->alu == GXclear ) - SEND_PCL( *outFile, "SP0;" ); - else - SEND_PCL( *outFile, "SP1;" ); -#endif /* XP_PCL_COLOR */ - } - -#if 0 - if( changeMask & GCFunction ) - { - int rop = -1; - char t[10]; - - switch( pGC->alu ) - { - case GXclear: - rop = 1; - break; - case GXand: - rop = 136; - break; - case GXandReverse: - rop = 68; - break; - case GXcopy: - rop = 204; - break; - case GXandInverted: - rop = 34; - break; - case GXnoop: - rop = 170; - break; - case GXxor: - rop = 238; - break; - case GXor: - rop = 238; - break; - case GXnor: - rop = 17; - break; - case GXequiv: - rop = 153; - break; - case GXinvert: - rop = 85; - break; - case GXorReverse: - rop = 221; - break; - case GXcopyInverted: - rop = 51; - break; - case GXorInverted: - rop = 187; - break; - case GXnand: - rop = 119; - break; - case GXset: - rop = 0; - break; - } - if( rop != -1 ) - { - sprintf( t, "MC1,%d;", rop ); - SEND_PCL( *outFile, t ); -#endif - - if( changeMask & GCForeground ) - switch( pGC->fgPixel ) - { - case 1: - SEND_PCL( *outFile, "SP1;" ); - break; - default: - SEND_PCL( *outFile, "SP0;" ); - break; - } - - if( changeMask & GCForeground ) - { -#ifdef XP_PCL_COLOR - ColormapPtr cmap; - Colormap c; - char t[40]; - - c = wColormap( ((WindowPtr)pDrawable) ); - cmap = (ColormapPtr)LookupIDByType( c, RT_COLORMAP ); - - if( cmap->class == TrueColor ) - { - if( pGC->fillStyle != FillTiled || pGC->tileIsPixel ) { - unsigned short r, g, b; - - r = (pGC->fgPixel & cmap->pVisual->redMask) - >> (cmap->pVisual->offsetRed ); - g = (pGC->fgPixel & cmap->pVisual->greenMask) - >> (cmap->pVisual->offsetGreen); - b = (pGC->fgPixel & cmap->pVisual->blueMask) - >> (cmap->pVisual->offsetBlue); - - PclLookUp(cmap, cPriv, &r, &g, &b); - sprintf( t, "\033%%0A\033*v%ua%ub%uc0I\033%%0B", r, g, b); - SEND_PCL( *outFile, t ); - } - } - else /* PseudoColor or StaticGray */ - { - sprintf( t, "SP%ld;", (long) pGC->fgPixel ); - SEND_PCL( *outFile, t ); - } -#else - ScreenPtr screen; - screen = pDrawable->pScreen; - if ( pGC->fgPixel == screen->whitePixel ) - SEND_PCL( *outFile, "SP0;"); - else - SEND_PCL( *outFile, "SP1;"); -#endif /* XP_PCL_COLOR */ - } - - if( changeMask & GCJoinStyle ) - switch( pGC->joinStyle ) - { - case JoinMiter: - SEND_PCL( *outFile, "LA2,1;" ); - break; - case JoinRound: - SEND_PCL( *outFile, "LA2,4;" ); - break; - case JoinBevel: - SEND_PCL( *outFile, "LA2,5;" ); - break; - } - - if( changeMask & GCCapStyle ) - switch( pGC->capStyle ) - { - case CapNotLast: - case CapButt: - SEND_PCL( *outFile, "LA1,1;" ); - break; - case CapRound: - SEND_PCL( *outFile, "LA1,4;" ); - break; - case CapProjecting: - SEND_PCL( *outFile, "LA1,2;" ); - break; - } - - if( changeMask & GCLineWidth ) - { - float penWidth, pixelsPerMM; - ScreenPtr screen; - char temp[30]; - - if( pGC->lineWidth == 0 || pGC->lineWidth == 1 ) - /* A pen width of 0.0 mm gives a one-pixel-wide line */ - penWidth = 0.0; - else - { - screen = pDrawable->pScreen; - pixelsPerMM = (float)screen->width / (float)screen->mmWidth; - - penWidth = pGC->lineWidth / pixelsPerMM; - } - sprintf( temp, "PW%g;", penWidth ); - SEND_PCL( *outFile, temp ); - } - - if( changeMask & GCLineStyle ) - { - int i, num = pGC->numInDashList; - double total; - char t[30]; - - switch( pGC->lineStyle ) - { - case LineSolid: - SEND_PCL( *outFile, "LT;" ); - break; - case LineOnOffDash: - /* - * Calculate the pattern length of the dashes, in pixels, - * then convert to mm - */ - for( i = 0, total = 0.0; i < 20 && i < num; i++ ) - total += pGC->dash[i]; - if( num % 2 ) - for( i = num; i < 20 && i < num + num; i++ ) - total += pGC->dash[i-num]; - - total *= ( (double)pDrawable->pScreen->mmWidth / - (double)pDrawable->pScreen->width ); - - sprintf( t, "LT8,%f,1;", total ); - SEND_PCL( *outFile, t ); - break; - } - } - - - if( changeMask & GCFillStyle ) - switch( pGC->fillStyle ) - { - case FillSolid: - SEND_PCL( *outFile, "FT1;TR0;CF;" ); - break; - case FillTiled: - SEND_PCL( *outFile, "FT22,100;TR0;CF2,0;" ); - break; - case FillOpaqueStippled: - SEND_PCL( *outFile, "FT22,101;TR0;CF2,0;" ); - if( pGC->fgPixel != gcPriv->stippleFg || - pGC->bgPixel != gcPriv->stippleBg ) - changeMask |= GCStipple; - break; - case FillStippled: - SEND_PCL( *outFile, "FT22,102;TR1;CF2,0;" ); - break; - } - - if( changeMask & GCTile && !pGC->tileIsPixel ) - { - char *bits; - int h, w, sz; - - h = pGC->tile.pixmap->drawable.height; - w = pGC->tile.pixmap->drawable.width; - - sz = h * PixmapBytePad(w, pGC->tile.pixmap->drawable.depth); - bits = (char *)xalloc(sz); - fbGetImage(&(pGC->tile.pixmap->drawable), 0, 0, w, h, XYPixmap, ~0, - bits); - PclSendPattern( bits, sz, 1, h, w, 100, *outFile ); - xfree( bits ); - } - - if( changeMask & ( GCTileStipXOrigin | GCTileStipYOrigin ) ) - { - char t[30]; - - sprintf( t, "AC%d,%d;", pGC->patOrg.x, pGC->patOrg.y ); - SEND_PCL( *outFile, t ); - } - - /* - * We have to resend the stipple pattern either when the stipple itself - * changes, or if we're in FillOpaqueStippled mode and either the - * foreground or the background color changes. - */ - if( changeMask & GCStipple || - ( pGC->fillStyle == FillOpaqueStippled && - ( pGC->fgPixel != gcPriv->stippleFg || - pGC->bgPixel != gcPriv->stippleBg ) ) ) - { - int h, w, i, sz, w2; - char *bits, *row, t[30]; - PixmapPtr scratchPix; - GCPtr scratchGC; - - if( pGC->stipple != NULL ) - { - SEND_PCL( *outFile, "\033%0A" ); - - h = pGC->stipple->drawable.height; - w = pGC->stipple->drawable.width; - sz = h * BitmapBytePad( w ); - - bits = (char *)xalloc( sz ); - fbGetImage( &(pGC->stipple->drawable), 0, 0, w, h, XYPixmap, ~0, bits ); - - w2 = ( w / 8 ) + ( ( w%8 ) ? 1 : 0 ); - /* - * XXX The PCL docs say that I need to word-align each - * XXX row, but I get garbage when I do... - */ - /* - if( w2 % 2 ) - w2++; - */ - - sprintf( t, "\033*c102g%dW", h * w2 + 8 ); - SEND_PCL( *outFile, t ); - - sprintf( t, "%c%c%c%c%c%c%c%c", 0, 0, 1, 0, h>>8, h&0xff, w>>8, - w&0xff ); - SEND_PCL_COUNT( *outFile, t, 8 ); - - for( row = bits, i = 0; i < h; i++, row += BitmapBytePad( w ) ) - SEND_PCL_COUNT( *outFile, row, w2 ); - - SEND_PCL( *outFile, "\033%0B" ); - - xfree( bits ); - - /* - * Also do the opaque stipple, as a tile - */ - if( pGC->depth != 1 ) - sz = h * PixmapBytePad( w, pGC->depth ); - bits = (char *)xalloc( sz ); - - scratchPix = - (*pGC->pScreen->CreatePixmap)( pGC->pScreen, - w, h, pGC->depth, - CREATE_PIXMAP_USAGE_SCRATCH ); - scratchGC = GetScratchGC( pGC->depth, pGC->pScreen ); - CopyGC( pGC, scratchGC, ~0L ); - - fbValidateGC(scratchGC, ~0L, (DrawablePtr)scratchPix); - fbCopyPlane(&(pGC->stipple->drawable), (DrawablePtr)scratchPix, - scratchGC, 0, 0, w, h, 0, 0, 1); - fbGetImage(&(scratchPix->drawable), 0, 0, w, h, XYPixmap, ~0, - bits); - PclSendPattern( bits, sz, pGC->depth, h, w, 101, *outFile ); - FreeScratchGC( scratchGC ); - (*pGC->pScreen->DestroyPixmap)( scratchPix ); - xfree( bits ); - } - } - - if( changeMask & ( GCTileStipXOrigin | GCTileStipYOrigin ) ) - { - char t[30]; - - sprintf( t, "AC%d,%d;", pGC->patOrg.x, pGC->patOrg.y ); - SEND_PCL( *outFile, t ); - } - - if( changeMask & GCDashList ) - { - int num = pGC->numInDashList; - double total; - char dashes[20]; - char t[100], t2[20]; - - /* Make up the doubled dash list, if necessary */ - for( i = 0; i < 20 && i < num; i++ ) - dashes[i] = pGC->dash[i]; - - if( num % 2 ) - { - for( i = num; i < 20 && i < num + num; i++ ) - dashes[i] = dashes[i-num]; - if( ( num *= 2 ) > 20 ) - num = 20; - } - - /* Add up dash lengths to get percentage */ - for( i = 0, total = 0; i < num; i++ ) - total += dashes[i]; - - /* Build up the HP-GL/2 for the dash list */ - strcpy( t, "UL8" ); - for( i = 0; i < num; i++ ) - { - sprintf( t2, ",%d", - (int)( ( (double)dashes[i] / total * 100.0 ) + 0.5 ) ); - strcat( t, t2 ); - } - strcat( t, ";" ); - SEND_PCL( *outFile, t ); - } - - - /* Go back to PCL mode */ - SEND_PCL( *outFile, "\033%0A" ); - - /* - * Update the drawable's private information, which includes - * erasing the drawable's private changeMask, since all the - * changes have been made. - */ - if( changeMask ) - PclSetDrawablePrivateGC( pDrawable, *pGC ); - - return TRUE; -} - -/* - * PclComputeCompositeClip() - * - * I'd like to use the miComputeCompositeClip function, but it sticks - * things into the mi GC privates, where the PCL driver can't get at - * it. So, rather than mess around with the mi code, I ripped it out - * and made the appropriate changes here. - */ - - -void -PclComputeCompositeClip( - GCPtr pGC, - DrawablePtr pDrawable) -{ - if (pDrawable->type == DRAWABLE_WINDOW) - { - WindowPtr pWin = (WindowPtr) pDrawable; - RegionPtr pregWin; - Bool freeTmpClip, freeCompClip; - - if (pGC->subWindowMode == IncludeInferiors) - { - pregWin = NotClippedByChildren(pWin); - freeTmpClip = TRUE; - } - else - { - pregWin = &pWin->clipList; - freeTmpClip = FALSE; - } - freeCompClip = pGC->freeCompClip; - - /* - * if there is no client clip, we can get by with just keeping the - * pointer we got, and remembering whether or not should destroy (or - * maybe re-use) it later. this way, we avoid unnecessary copying of - * regions. (this wins especially if many clients clip by children - * and have no client clip.) - */ - if (pGC->clientClipType == CT_NONE) - { - if (freeCompClip) - REGION_DESTROY(pGC->pScreen, pGC->pCompositeClip); - pGC->pCompositeClip = pregWin; - pGC->freeCompClip = freeTmpClip; - } - else - { - /* - * we need one 'real' region to put into the composite clip. if - * pregWin the current composite clip are real, we can get rid of - * one. if pregWin is real and the current composite clip isn't, - * use pregWin for the composite clip. if the current composite - * clip is real and pregWin isn't, use the current composite - * clip. if neither is real, create a new region. - */ - - REGION_TRANSLATE(pGC->pScreen, pGC->clientClip, - pDrawable->x + pGC->clipOrg.x, - pDrawable->y + pGC->clipOrg.y); - - if (freeCompClip) - { - REGION_INTERSECT(pGC->pScreen, pGC->pCompositeClip, - pregWin, pGC->clientClip); - if (freeTmpClip) - REGION_DESTROY(pGC->pScreen, pregWin); - } - else if (freeTmpClip) - { - REGION_INTERSECT(pGC->pScreen, pregWin, pregWin, - pGC->clientClip); - pGC->pCompositeClip = pregWin; - } - else - { - pGC->pCompositeClip = REGION_CREATE(pGC->pScreen, NullBox, 0); - REGION_INTERSECT(pGC->pScreen, pGC->pCompositeClip, - pregWin, pGC->clientClip); - } - pGC->freeCompClip = TRUE; - REGION_TRANSLATE(pGC->pScreen, pGC->clientClip, - -(pDrawable->x + pGC->clipOrg.x), - -(pDrawable->y + pGC->clipOrg.y)); - } - } /* end of composite clip for a window */ - else - { - BoxRec pixbounds; - - /* XXX should we translate by drawable.x/y here ? */ - pixbounds.x1 = 0; - pixbounds.y1 = 0; - pixbounds.x2 = pDrawable->width; - pixbounds.y2 = pDrawable->height; - - if (pGC->freeCompClip) - { - REGION_RESET(pGC->pScreen, pGC->pCompositeClip, &pixbounds); - } - else - { - pGC->freeCompClip = TRUE; - pGC->pCompositeClip = REGION_CREATE(pGC->pScreen, &pixbounds, 1); - } - - if (pGC->clientClipType == CT_REGION) - { - REGION_TRANSLATE(pGC->pScreen, pGC->pCompositeClip, - -pGC->clipOrg.x, -pGC->clipOrg.y); - REGION_INTERSECT(pGC->pScreen, pGC->pCompositeClip, - pGC->pCompositeClip, pGC->clientClip); - REGION_TRANSLATE(pGC->pScreen, pGC->pCompositeClip, - pGC->clipOrg.x, pGC->clipOrg.y); - } - } /* end of composite clip for pixmap */ -} - -/* - * PclValidateGC() - * - * Unlike many screen GCValidate routines, this function should not need - * to mess with setting the drawing functions. Different drawing - * functions are usually needed to optimize such things as drawing - * wide or dashed lines; this functionality will be handled primarily - * by the printer itself, while the necessary PCL code to set the - * attributes will be done in PclUpdateDrawableGC(). - */ - -/*ARGSUSED*/ -void -PclValidateGC( - GCPtr pGC, - unsigned long changes, - DrawablePtr pDrawable) -{ - /* - * Pixmaps should be handled by their respective validation - * functions. - */ - if( pDrawable->type == DRAWABLE_PIXMAP ) - { - fbValidateGC(pGC, ~0, pDrawable); - return; - } - - /* - * Reset the drawing operations - */ - pGC->ops = &PclGCOps; - - /* - * Validate the information, and correct it if necessary. - */ - - /* - * If necessary, compute the composite clip region. (Code ripped - * from migc.c) - */ - if ((changes & (GCClipXOrigin|GCClipYOrigin|GCClipMask|GCSubwindowMode)) || - (pDrawable->serialNumber != (pGC->serialNumber & DRAWABLE_SERIAL_BITS)) - ) - { - PclComputeCompositeClip(pGC, pDrawable); - } - - /* - * PCL does not directly support the DoubleDash line style, nor is - * there an easy way to simulate it, so we'll just change it to a - * LineOnOffDash, which is supported by PCL. - */ - if( ( changes & GCLineStyle ) && ( pGC->lineStyle == LineDoubleDash ) ) - pGC->lineStyle = LineOnOffDash; - - /* - * Update the drawable's changeMask to reflect the changes made to the GC. - */ -/* - PclSetDrawablePrivateGC( pDrawable, *pGC, changes ); -*/ -} diff --git a/hw/xprint/pcl/PclInit.c b/hw/xprint/pcl/PclInit.c deleted file mode 100644 index e738e3e54..000000000 --- a/hw/xprint/pcl/PclInit.c +++ /dev/null @@ -1,575 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclInit.c -** * -** * Contents: -** * Initialization code of Pcl driver for the print server. -** * -** * Created: 1/30/95 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include - -#include "Pcl.h" - -#include "fb.h" -#include /* for unlink() */ - -#include "attributes.h" -#include "DiPrint.h" - -#define MODELDIRNAME "/models" - -static void AllocatePclPrivates(ScreenPtr pScreen); -static int PclInitContext(XpContextPtr pCon); -static Bool PclDestroyContext(XpContextPtr pCon); - -DevPrivateKey PclScreenPrivateKey = &PclScreenPrivateKey; -DevPrivateKey PclContextPrivateKey = &PclContextPrivateKey; -DevPrivateKey PclPixmapPrivateKey = &PclPixmapPrivateKey; -DevPrivateKey PclWindowPrivateKey = &PclWindowPrivateKey; -DevPrivateKey PclGCPrivateKey = &PclGCPrivateKey; - -#ifdef XP_PCL_COLOR -/* - * The supported visuals on this screen - */ -static VisualRec Visuals[] = -{ - { 1, StaticGray, 1, 2, 1, 0, 0, 0, 0, 0, 0 }, - { 2, PseudoColor, 8, 256, 8, 0, 0, 0, 0, 0, 0 }, - { 3, TrueColor, 8, 256, 24, 0xFF0000, 0xFF00, 0xFF, 16, 8, 0 } -}; - -/* - * The supported depths on this screen - */ -static DepthRec Depths[] = -{ - { 1, 1, NULL }, - { 8, 1, NULL }, - { 24, 1, NULL } -}; -#else -/* - * The supported visuals on this screen - */ -static VisualRec Visuals[] = -{ - { 1, StaticGray, 1, 2, 1, 0, 0, 0, 0, 0, 0} -}; - -/* - * The supported depths on this screen - */ -static DepthRec Depths[] = -{ - { 1, 1, NULL } -}; -#endif /* XP_PCL_COLOR */ - - -#define NUM_VISUALS(visuals) (sizeof(visuals) / sizeof(VisualRec)) -#define NUM_DEPTHS(depths) (sizeof(depths) / sizeof(DepthRec)) - -Bool -PclCloseScreen(int index, - ScreenPtr pScreen) -{ - PclScreenPrivPtr pPriv = (PclScreenPrivPtr) - dixLookupPrivate(&pScreen->devPrivates, PclScreenPrivateKey); - - pScreen->CloseScreen = pPriv->CloseScreen; - xfree( pPriv ); - - return (*pScreen->CloseScreen)(index, pScreen); -} - -Bool -InitializePclDriver( - int ndx, - ScreenPtr pScreen, - int argc, - char **argv) -{ - int maxRes, xRes, yRes, maxDim; - unsigned i; - PclScreenPrivPtr pPriv; - - /* - * Register this driver's InitContext function with the print - * extension. This is a bit sleazy, as the extension hasn't yet - * been initialized, but the extensionneeds to know this, and this - * seems the best time to provide the information. - */ -#ifdef XP_PCL_COLOR - XpRegisterInitFunc( pScreen, "XP-PCL-COLOR", PclInitContext ); -#elif XP_PCL_MONO - XpRegisterInitFunc( pScreen, "XP-PCL-MONO", PclInitContext ); -#else - XpRegisterInitFunc( pScreen, "XP-PCL-LJ3", PclInitContext ); -#endif /* XP_PCL_MONO */ - - /* - * Create and fill in the devPrivate for the PCL driver. - */ - AllocatePclPrivates(pScreen); - - pPriv = (PclScreenPrivPtr) - dixLookupPrivate(&pScreen->devPrivates, PclScreenPrivateKey); - - maxDim = MAX( pScreen->height, pScreen->width ); - xRes = pScreen->width / ( pScreen->mmWidth / 25.4 ); - yRes = pScreen->height / ( pScreen->mmHeight / 25.4 ); - maxRes = MAX( xRes, yRes ); - -#ifdef XP_PCL_COLOR - fbScreenInit( pScreen, NULL, maxDim, maxDim, maxRes, maxRes, - maxRes, 8 ); /* XXX what's the depth here? */ - /* Clean up the fields that we stomp (code taken from fbCloseScreen) */ - for( i = 0; (int) i < pScreen->numDepths; i++ ) - xfree( pScreen->allowedDepths[i].vids ); - xfree( pScreen->allowedDepths ); - xfree( pScreen->visuals ); -#else - fbScreenInit( pScreen, NULL, maxDim, maxDim, maxRes, maxRes, - maxRes, 1 ); -#endif /* XP_PCL_COLOR */ - - miInitializeBackingStore ( pScreen ); - - pScreen->defColormap = FakeClientID(0); - pScreen->blackPixel = 1; - pScreen->whitePixel = 0; - - pPriv->CloseScreen = pScreen->CloseScreen; - pScreen->CloseScreen = PclCloseScreen; - - pScreen->QueryBestSize = (QueryBestSizeProcPtr)PclQueryBestSize; - pScreen->SaveScreen = (SaveScreenProcPtr)_XpBoolNoop; - pScreen->GetImage = (GetImageProcPtr)_XpVoidNoop; - pScreen->GetSpans = (GetSpansProcPtr)_XpVoidNoop; - pScreen->CreateWindow = PclCreateWindow; - pScreen->DestroyWindow = PclDestroyWindow; -/* - pScreen->PositionWindow = PclPositionWindow; -*/ - pScreen->ChangeWindowAttributes = PclChangeWindowAttributes; -/* - pScreen->RealizeWindow = PclMapWindow; - pScreen->UnrealizeWindow = PclUnmapWindow; -*/ - pScreen->CopyWindow = PclCopyWindow; /* XXX Hard routine to write! */ - - pScreen->CreatePixmap = fbCreatePixmap; - pScreen->DestroyPixmap = fbDestroyPixmap; - pScreen->RealizeFont = PclRealizeFont; - pScreen->UnrealizeFont = PclUnrealizeFont; - pScreen->CreateGC = PclCreateGC; - - pScreen->CreateColormap = PclCreateColormap; - pScreen->DestroyColormap = PclDestroyColormap; - pScreen->InstallColormap = (InstallColormapProcPtr)NoopDDA; - pScreen->UninstallColormap = (UninstallColormapProcPtr)NoopDDA; - pScreen->ListInstalledColormaps = PclListInstalledColormaps; - pScreen->StoreColors = PclStoreColors; -/* - pScreen->ResolveColor = PclResolveColor; -*/ - - pScreen->BitmapToRegion = fbPixmapToRegion; - - pScreen->ConstrainCursor = PclConstrainCursor; - pScreen->CursorLimits = PclCursorLimits; - pScreen->DisplayCursor = PclDisplayCursor; - pScreen->RealizeCursor = PclRealizeCursor; - pScreen->UnrealizeCursor = PclUnrealizeCursor; - pScreen->RecolorCursor = PclRecolorCursor; - pScreen->SetCursorPosition = PclSetCursorPosition; - - pScreen->visuals = Visuals; - pScreen->numVisuals = NUM_VISUALS( Visuals ); - pScreen->allowedDepths = Depths; - pScreen->numDepths = NUM_DEPTHS( Depths ); - - for( i = 0; i < NUM_DEPTHS( Depths ); i++ ) - { - pScreen->allowedDepths[i].vids = - (VisualID *)xalloc( sizeof(VisualID ) ); - pScreen->allowedDepths[i].vids[0] = i + 1; - } - -#ifdef XP_PCL_COLOR - pScreen->rootVisual = 2; - pScreen->rootDepth = 8; -#else - pScreen->rootVisual = 1; - pScreen->rootDepth = 1; -#endif /* XP_PCL_COLOR */ - - pPriv->colormaps = NULL; - PclCreateDefColormap( pScreen ); - - return TRUE; -} - -static void -AllocatePclPrivates(ScreenPtr pScreen) -{ - dixRequestPrivate(PclWindowPrivateKey, sizeof( PclWindowPrivRec ) ); - dixRequestPrivate(PclContextPrivateKey, sizeof( PclContextPrivRec ) ); - dixRequestPrivate(PclGCPrivateKey, sizeof( PclGCPrivRec ) ); - dixRequestPrivate(PclPixmapPrivateKey, sizeof( PclPixmapPrivRec ) ); - - dixSetPrivate(&pScreen->devPrivates, PclScreenPrivateKey, - xalloc(sizeof(PclScreenPrivRec))); -} - -/* - * PclInitContext - * - * Establish the appropriate values for a PrintContext used with the PCL - * driver. - */ - -static char DOC_ATT_SUPP[]="document-attributes-supported"; -static char DOC_ATT_VAL[]="document-format xp-listfonts-modes"; -static char JOB_ATT_SUPP[]="job-attributes-supported"; -static char JOB_ATT_VAL[]=""; -static char PAGE_ATT_SUPP[]="xp-page-attributes-supported"; -static char PAGE_ATT_VAL[]="content-orientation default-printer-resolution \ -default-input-tray default-medium plex xp-listfonts-modes"; - -static int -PclInitContext(XpContextPtr pCon) -{ - XpDriverFuncsPtr pFuncs; - PclContextPrivPtr pConPriv; - char *server, *attrStr; - char *modelID; - char *configDir; - char *pathName; - int i, j; - float width, height; - XpOidMediumDiscreteSizeList* ds_list; - XpOidArea* repro; - XpOid page_size; - XpOidMediumSS* m; - - /* - * Initialize the attribute store for this printer. - */ - XpInitAttributes( pCon ); - - /* - * Initialize the function pointers - */ - pFuncs = &( pCon->funcs ); - pFuncs->StartJob = PclStartJob; - pFuncs->EndJob = PclEndJob; - pFuncs->StartDoc = PclStartDoc; - pFuncs->EndDoc = PclEndDoc; - pFuncs->StartPage = PclStartPage; - pFuncs->EndPage = PclEndPage; - pFuncs->PutDocumentData = PclDocumentData; - pFuncs->GetDocumentData = PclGetDocumentData; - pFuncs->GetAttributes = PclGetAttributes; - pFuncs->SetAttributes = PclSetAttributes; - pFuncs->AugmentAttributes = PclAugmentAttributes; - pFuncs->GetOneAttribute = PclGetOneAttribute; - pFuncs->DestroyContext = PclDestroyContext; - pFuncs->GetMediumDimensions = PclGetMediumDimensions; - pFuncs->GetReproducibleArea = PclGetReproducibleArea; - - - /* - * Set up the context privates - */ - pConPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - - pConPriv->jobFileName = (char *)NULL; - pConPriv->pageFileName = (char *)NULL; - pConPriv->pJobFile = (FILE *)NULL; - pConPriv->pPageFile = (FILE *)NULL; - pConPriv->dash = NULL; - pConPriv->validGC = 0; - - pConPriv->getDocClient = (ClientPtr)NULL; - pConPriv->getDocBufSize = 0; - modelID = XpGetOneAttribute(pCon, XPPrinterAttr, "xp-model-identifier"); - if ( (configDir = XpGetConfigDir(False)) != (char *) NULL ) { - pathName = (char *)xalloc(strlen(configDir) + strlen(MODELDIRNAME) + - strlen(modelID) + strlen("color.map") + 4); - if (pathName) { - sprintf(pathName, "%s/%s/%s/%s", configDir, MODELDIRNAME, modelID, - "color.map"); - pConPriv->ctbl = PclReadMap(pathName, &pConPriv->ctbldim); - xfree(pathName); - - } else - pConPriv->ctbl = NULL; - } else - pConPriv->ctbl = NULL; - -#ifdef XP_PCL_LJ3 - /* - * Initialize the spooling buffer for saving the figures temporary - * (LaserJet IIIs printers don't support the macro function which - * includes some HP-GL/2 commands.) - */ - pConPriv->fcount = 0; - if ( !(pConPriv->figures = (char *)xalloc(1024)) ) - pConPriv->fcount_max = 0; - else - pConPriv->fcount_max = 1024; -#endif /* XP_PCL_LJ3 */ - - /* - * document-attributes-supported - */ - server = XpGetOneAttribute( pCon, XPServerAttr, DOC_ATT_SUPP ); - if( ( attrStr = (char *)xalloc(strlen(server) + strlen(DOC_ATT_SUPP) - + strlen(DOC_ATT_VAL) + - strlen(PAGE_ATT_VAL) + 8 ) ) - == (char *)NULL ) - return BadAlloc; - sprintf( attrStr, "*%s:\t%s %s %s", DOC_ATT_SUPP, server, - DOC_ATT_VAL, PAGE_ATT_VAL ); - XpAugmentAttributes( pCon, XPPrinterAttr, attrStr ); - xfree( attrStr ); - - /* - * job-attributes-supported - */ - server = XpGetOneAttribute( pCon, XPServerAttr, JOB_ATT_SUPP ); - if( ( attrStr = (char *)xalloc(strlen(server) + strlen(JOB_ATT_SUPP) - + strlen(JOB_ATT_VAL) + 8 ) ) - == (char *)NULL ) - return BadAlloc; - sprintf( attrStr, "*%s:\t%s %s", JOB_ATT_SUPP, server, JOB_ATT_VAL ); - XpAugmentAttributes( pCon, XPPrinterAttr, attrStr ); - xfree( attrStr ); - - /* - * xp-page-attributes-supported - */ - server = XpGetOneAttribute( pCon, XPServerAttr, PAGE_ATT_SUPP ); - if( ( attrStr = (char *)xalloc(strlen(server) + strlen(PAGE_ATT_SUPP) - + strlen(PAGE_ATT_VAL) + 8 ) ) - == (char *)NULL ) - return BadAlloc; - sprintf( attrStr, "*%s:\t%s %s", PAGE_ATT_SUPP, server, PAGE_ATT_VAL ); - XpAugmentAttributes( pCon, XPPrinterAttr, attrStr ); - xfree( attrStr ); - - /* - * Validate the attribute pools - */ - XpValidateAttributePool( pCon, XPPrinterAttr, &PclValidatePoolsRec ); - - /* - * Munge the reproducible areas to reflect the fact that PCL will not let - * me move the right or left margins closer than .25" to the edge of the - * paper. - */ - m = XpGetMediumSSAttr( pCon, XPPrinterAttr, - xpoid_att_medium_source_sizes_supported, - (const XpOidList*) NULL, - (const XpOidList*) NULL ); - for( i = 0; i < XpOidMediumSSCount( m ); i++ ) - { - if( XpOidMediumSS_DISCRETE == (m->mss)[i].mstag ) - { - ds_list = (m->mss)[i].ms.discrete; - for( j = 0; j < ds_list->count; j++ ) - { - repro = &(ds_list->list)[j].assured_reproduction_area; - page_size = (ds_list->list)[j].page_size; - XpGetMediumMillimeters( page_size, &width, &height ); - - if( repro->minimum_x < 6.35 ) - repro->minimum_x = 6.35; - if( width - repro->maximum_x < 6.35 ) - repro->maximum_x = width - 6.35; - } - } - } - XpPutMediumSSAttr( pCon, XPPrinterAttr, - xpoid_att_medium_source_sizes_supported, m ); - XpOidMediumSSDelete( m ); - - /* - * Finish validating the attribute pools - */ - - XpValidateAttributePool( pCon, XPDocAttr, &PclValidatePoolsRec ); - XpValidateAttributePool( pCon, XPJobAttr, &PclValidatePoolsRec ); - XpValidateAttributePool( pCon, XPPageAttr, &PclValidatePoolsRec ); - - /* - * Clear out the colormap storage - */ - pConPriv->palettes = NULL; - - return Success; -} - -static Bool -PclDestroyContext(XpContextPtr pCon) -{ - PclContextPrivPtr pConPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - PclPaletteMapPtr p, t; - PclCmapToContexts *pCmap; - ScreenPtr screen; - PclScreenPrivPtr sPriv; - PclContextListPtr con, prevCon, temp; - - - /* - * Clean up the temporary files - */ - if( pConPriv->pPageFile != (FILE *)NULL ) - { - fclose( pConPriv->pPageFile ); - pConPriv->pPageFile = (FILE *)NULL; - } - if( pConPriv->pageFileName != (char *)NULL ) - { - unlink( pConPriv->pageFileName ); - xfree( pConPriv->pageFileName ); - pConPriv->pageFileName = (char *)NULL; - } - - if( pConPriv->pJobFile != (FILE *)NULL ) - { - fclose( pConPriv->pJobFile ); - pConPriv->pJobFile = NULL; - } - if( pConPriv->jobFileName != (char *)NULL ) - { - unlink( pConPriv->jobFileName ); - xfree( pConPriv->jobFileName ); - pConPriv->jobFileName = (char *)NULL; - } - - xfree( pConPriv->dash ); - xfree(pConPriv->ctbl); - pConPriv->ctbl = NULL; -#ifdef XP_PCL_LJ3 - xfree( pConPriv->figures ); -#endif /* XP_PCL_LJ3 */ - - /* - * Destroy the colormap<->palette mappings - */ - p = pConPriv->palettes; - while( p ) - { - t = p; - p = p->next; - xfree( t ); - } - pConPriv->palettes = NULL; - - /* - * Remove the context from the screen-level colormap<->contexts mappings - */ - screen = screenInfo.screens[pCon->screenNum]; - sPriv = (PclScreenPrivPtr) - dixLookupPrivate(&screen->devPrivates, PclScreenPrivateKey); - pCmap = sPriv->colormaps; - while( pCmap ) - { - con = pCmap->contexts; - prevCon = NULL; - - while( con ) - { - if( con->context->contextID == pCon->contextID ) - { - if( prevCon ) - { - temp = con; - prevCon->next = con = con->next; - } - else - { - temp = pCmap->contexts; - pCmap->contexts = con = con->next; - } - xfree( temp ); - } - else - con = con->next; - } - - pCmap = pCmap->next; - } - - XpDestroyAttributes(pCon); - - return Success; -} - -XpContextPtr -PclGetContextFromWindow(WindowPtr win) -{ - PclWindowPrivPtr pPriv; - - while( win ) - { - pPriv = (PclWindowPrivPtr) - dixLookupPrivate(&win->devPrivates, PclWindowPrivateKey); - if( pPriv->validContext ) - return pPriv->context; - - win = win->parent; - } - - return NULL; -} diff --git a/hw/xprint/pcl/PclLine.c b/hw/xprint/pcl/PclLine.c deleted file mode 100644 index 68d55a525..000000000 --- a/hw/xprint/pcl/PclLine.c +++ /dev/null @@ -1,314 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclLine.c -** * -** * Contents: -** * Line drawing routines for the PCL driver -** * -** * Created: 10/11/95 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "Pcl.h" -#include "gcstruct.h" -#include "windowstr.h" - -/* - * PclPolyLine() - * PclPolySegment() - * - * Generates PCL code to draw a polyline, or a collection of distinct - * line segments, clipped by the current clip region. Since PCL - * supports clipping to a rectangle, and the clip region is - * represented as a collection of visible rectangles, we can draw and - * clip the line by repeatedly drawing the complete line, clipped to - * each rectangle in the clip region. - * - * Since each box in the clipping region generates approximately 30 - * bytes of PCL code, we have to have a way to avoid having a large - * number of boxes. The worst problem the case where the clipping - * region is a collection of one-pixel-high boxes, perhaps arising - * from a bitmap clip mask, or a region defined by a non-rectangular - * polygon. - * - * To alleviate this problem, we create a second clipping region, - * which consists of the union of the bounding boxes of each line - * segment. (Each bounding box is also increased by some amount - * related to the current line width to allow for non-zero-width - * lines, and for the various end and join styles.) This region is - * intersected with the "real" clipping region to get the region used - * to actually clip the polyline. This should result in a significant - * reduction in the number of clip rectangles, as the region-handling - * code should consolidate many of the fragments of one-pixel-high - * rectangles into larger rectangles. - */ - -void -PclPolyLine( - DrawablePtr pDrawable, - GCPtr pGC, - int mode, - int nPoints, - xPoint *pPoints) -{ - char t[80]; - FILE *outFile; - int xoffset = 0, yoffset = 0; - int nbox; - BoxPtr pbox; - xRectangle *drawRects, *r; - RegionPtr drawRegion, region; - short fudge; - int i; - XpContextPtr pCon; - PclContextPrivPtr pConPriv; - - if( PclUpdateDrawableGC( pGC, pDrawable, &outFile ) == FALSE ) - return; - - pCon = PclGetContextFromWindow( (WindowPtr) pDrawable ); - pConPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - - /* - * Allocate the storage required to deal with the clipping - * regions. - */ - region = REGION_CREATE( pGC->pScreen, NULL, 0 ); - drawRects = (xRectangle *) - xalloc( ( nPoints - 1 ) * sizeof( xRectangle ) ); - - /* - * Calculate the "fudge factor" based on the line width. - * Multiplying by three seems to be a good first guess. - * XXX I need to think of a way to test this. - */ - fudge = 3 * pGC->lineWidth + 1; - - /* - * Generate the PCL code to draw the polyline, by defining it as a - * macro which uses the HP-GL/2 line drawing function. - */ - - MACRO_START( outFile, pConPriv ); - SAVE_PCL( outFile, pConPriv, "\033%0B" ); - - sprintf( t, "PU%d,%dPD\n", pPoints[0].x + pDrawable->x, - pPoints[0].y + pDrawable->y ); - SAVE_PCL( outFile, pConPriv, t ); /* Move to the start of the polyline */ - - switch( mode ) - { - case CoordModeOrigin: - xoffset = pDrawable->x; - yoffset = pDrawable->y; - SAVE_PCL( outFile, pConPriv, "PA" ); - break; - case CoordModePrevious: - xoffset = yoffset = 0; - SAVE_PCL( outFile, pConPriv, "PR" ); - break; - } - - /* - * Build the "drawing region" as we build the PCL to draw the - * line. - */ - for(i = 1, r = drawRects; i < nPoints; i++, r++ ) - { - if( i != 1 ) - SAVE_PCL( outFile, pConPriv, "," ); - - sprintf( t, "%d,%d", pPoints[i].x + xoffset, - pPoints[i].y + yoffset ); - SAVE_PCL( outFile, pConPriv, t ); - - r->x = MIN( pPoints[i-1].x, pPoints[i].x ) + xoffset - fudge; - r->y = MIN( pPoints[i-1].y, pPoints[i].y ) + yoffset - fudge; - r->width = abs( pPoints[i-1].x - pPoints[i].x ) + 2 * fudge; - r->height = abs( pPoints[i-1].y - pPoints[i].y ) + 2 * fudge; - } - SAVE_PCL( outFile, pConPriv, ";\033%0A" ); /* End the macro */ - MACRO_END( outFile ); - - /* - * Convert the collection of rectangles into a proper region, then - * intersect it with the clip region. - */ - drawRegion = RECTS_TO_REGION( pGC->pScreen, nPoints - 1, - drawRects, CT_UNSORTED ); - if( mode == CoordModePrevious ) - REGION_TRANSLATE( pGC->pScreen, drawRegion, pPoints[0].x, pPoints[0].y ); - REGION_INTERSECT( pGC->pScreen, region, drawRegion, pGC->pCompositeClip ); - - /* - * For each rectangle in the clip region, set the HP-GL/2 "input - * window" and render the entire polyline to it. - */ - pbox = REGION_RECTS( region ); - nbox = REGION_NUM_RECTS( region ); - - PclSendData(outFile, pConPriv, pbox, nbox, 1.0); - - /* - * Clean up the temporary regions - */ - REGION_DESTROY( pGC->pScreen, drawRegion ); - REGION_DESTROY( pGC->pScreen, region ); - xfree( drawRects ); -} - -void -PclPolySegment( - DrawablePtr pDrawable, - GCPtr pGC, - int nSegments, - xSegment *pSegments) -{ - FILE *outFile, *dummy; - char t[80]; - int xoffset, yoffset; - int nbox, i; - unsigned long valid; - BoxPtr pbox; - xRectangle *drawRects, *r; - RegionPtr drawRegion, region; - short fudge; - XpContextPtr pCon; - PclContextPrivPtr pConPriv; - GC cacheGC; - - - if( PclUpdateDrawableGC( pGC, pDrawable, &outFile ) == FALSE ) - return; - - pCon = PclGetContextFromWindow( (WindowPtr) pDrawable ); - pConPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - - /* - * Allocate the storage for the temporary regions. - */ - region = REGION_CREATE( pGC->pScreen, NULL, 0 ); - drawRects = (xRectangle *) - xalloc( nSegments * sizeof( xRectangle ) ); - - /* - * Calculate the fudge factor, based on the line width - */ - fudge = pGC->lineWidth * 3 + 1; - - /* - * Turn off line joining. - */ - SEND_PCL( outFile, "\033%0BLA2,6;\033%0A" ); - - /* - * Generate the PCL code to draw the segments, by defining them as - * a macro which uses the HP-GL/2 line drawing function. - * - * XXX I wonder if this should be implemented using the Encoded - * XXX Polyline function. Since I'm only sending it once, it's not - * XXX necessarily too important. - */ - - MACRO_START( outFile, pConPriv ); - SAVE_PCL( outFile, pConPriv, "\033%0B" ); - - xoffset = pDrawable->x; - yoffset = pDrawable->y; - - for( i = 0, r = drawRects; i < nSegments; i++, r++ ) - { - r->x = MIN( pSegments[i].x1, pSegments[i].x2 ) + xoffset; - r->y = MIN( pSegments[i].y1, pSegments[i].y2 ) + yoffset; - r->width = abs( pSegments[i].x1 - pSegments[i].x2 ); - r->height = abs( pSegments[i].y1 - pSegments[i].y2 ); - - sprintf( t, "PU%d,%d;PD%d,%d;", pSegments[i].x1 + xoffset, - pSegments[i].y1 + yoffset, pSegments[i].x2 + - xoffset, pSegments[i].y2 + yoffset ); - SAVE_PCL( outFile, pConPriv, t ); - - r->x -= fudge; - r->y -= fudge; - r->width += 2 * fudge; - r->height += 2 * fudge; - } - SAVE_PCL( outFile, pConPriv, "\033%0A" ); - MACRO_END ( outFile ); - - /* - * Convert the collection of rectangles into a proper region, then - * intersect it with the clip region. - */ - drawRegion = RECTS_TO_REGION( pGC->pScreen, nSegments, - drawRects, CT_UNSORTED ); - REGION_INTERSECT( pGC->pScreen, region, drawRegion, pGC->pCompositeClip ); - - /* - * For each rectangle in the clip region, set the HP-GL/2 "input - * window" and render the entire set of segments to it. - */ - pbox = REGION_RECTS( region ); - nbox = REGION_NUM_RECTS( region ); - - PclSendData(outFile, pConPriv, pbox, nbox, 1.0); - - /* - * Now we need to reset the line join mode to whatever it was at before. - * The easiest way is to force the cached GC's joinstyle to be different - * from the current GC's joinstyle, then re-update the GC. This way, we - * don't have to duplicate code unnecessarily. - */ - PclGetDrawablePrivateStuff( pDrawable, &cacheGC, &valid, &dummy ); - cacheGC.joinStyle = !cacheGC.joinStyle; - PclSetDrawablePrivateGC( pDrawable, cacheGC ); - PclUpdateDrawableGC( pGC, pDrawable, &outFile ); - - /* - * Clean up - */ - REGION_DESTROY( pGC->pScreen, drawRegion ); - REGION_DESTROY( pGC->pScreen, region ); - xfree( drawRects ); -} diff --git a/hw/xprint/pcl/PclMisc.c b/hw/xprint/pcl/PclMisc.c deleted file mode 100644 index 0b37836e9..000000000 --- a/hw/xprint/pcl/PclMisc.c +++ /dev/null @@ -1,301 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclMisc.c -** * -** * Contents: -** * Miscellaneous code for Pcl driver. -** * -** * Created: 2/01/95 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include /* for SIGCLD on pre-POSIX systems */ -#include "Pcl.h" - -#include "cursor.h" -#include "resource.h" - -#include "windowstr.h" -#include "propertyst.h" -#include "attributes.h" - - -/*ARGSUSED*/ -void -PclQueryBestSize( - int type, - short *pwidth, - short *pheight, - ScreenPtr pScreen) -{ - unsigned width, highBit; - - switch(type) - { - case CursorShape: - *pwidth = 0; - *pheight = 0; - break; - case TileShape: - case StippleShape: - width = *pwidth; - if (!width) break; - /* Return the nearest power of two >= what they gave us */ - highBit = 0x80000000; - /* Find the highest 1 bit in the given width */ - while(!(highBit & width)) - highBit >>= 1; - /* If greater than that then return the next power of two */ - if((highBit - 1) & width) - highBit <<= 1; - *pwidth = highBit; - /* height is a don't-care */ - break; - } -} - -/* - * GetPropString searches the window heirarchy from pWin up looking for - * a property by the name of propName. If found, returns the property's - * value. If not, it returns NULL. - */ -char * -GetPropString( - WindowPtr pWin, - char *propName) -{ - Atom atom; - PropertyPtr pProp = (PropertyPtr)NULL; - char *retVal; - - atom = MakeAtom(propName, strlen(propName), FALSE); - if(atom != BAD_RESOURCE) - { - WindowPtr pPropWin; - int rc, n; - - /* - * The atom has been defined, but it might only exist as a - * property on an unrelated window. - */ - for(pPropWin = pWin; pPropWin != (WindowPtr)NULL; - pPropWin = pPropWin->parent) - { - rc = dixLookupProperty(&pProp, pPropWin, atom, - serverClient, DixReadAccess); - if (rc == Success) - break; - else - pProp = NULL; - } - if(pProp == (PropertyPtr)NULL) - return (char *)NULL; - - n = (pProp->format/8) * pProp->size; /* size (bytes) of prop */ - retVal = (char *)xalloc(n + 1); - (void)memcpy((void *)retVal, (void *)pProp->data, n); - retVal[n] = '\0'; - - return retVal; - } - - return (char *)NULL; -} - -#include -#include - -/* ARGSUSED */ -static void SigchldHndlr ( - int dummy) -{ - int status; - int olderrno = errno; - struct sigaction act; - sigfillset(&act.sa_mask); - act.sa_flags = 0; - act.sa_handler = SigchldHndlr; - - (void) wait (&status); - - /* - * Is this really necessary? - */ - sigaction(SIGCHLD, &act, (struct sigaction *)NULL); - errno = olderrno; -} - -/* - * SystemCmd provides a wrapper for the 'system' library call. The call - * appears to be sensitive to the handling of SIGCHLD, so this wrapper - * sets the status to SIG_DFL, and then resets the established handler - * after system returns. - */ -int -SystemCmd(char *cmdStr) -{ - int status; - struct sigaction newAct, oldAct; - sigfillset(&newAct.sa_mask); - newAct.sa_flags = 0; - newAct.sa_handler = SIG_DFL; - sigfillset(&oldAct.sa_mask); - oldAct.sa_flags = 0; - oldAct.sa_handler = SigchldHndlr; - - /* - * get the old handler, and set the action to IGN - */ - sigaction(SIGCHLD, &newAct, &oldAct); - - status = system (cmdStr); - - sigaction(SIGCHLD, &oldAct, (struct sigaction *)NULL); - return status; -} - - -/* - * PclGetMediumDimensions is installed in the GetMediumDimensions field - * of each Pcl-initialized context. - */ -int -PclGetMediumDimensions(XpContextPtr pCon, - CARD16 *width, - CARD16 *height) -{ - XpGetMediumDimensions(pCon, width, height); - return Success; -} - -/* - * PclGetReproducibleArea is installed in the GetReproducibleArea field - * of each Pcl-initialized context. - */ -int -PclGetReproducibleArea(XpContextPtr pCon, - xRectangle *pRect) -{ - XpGetReproductionArea(pCon, pRect); - return Success; -} - -#ifdef XP_PCL_LJ3 -/* - * PclSpoolFigs spooled the rendering PCL/HP-GL2 commands into the - * temporary buffer pointed by figures pointer in pcl private context. - * LaserJet IIIs printers don't support the macro function which - * includes some HP-GL/2 commands. - */ -void -PclSpoolFigs(PclContextPrivPtr pConPriv, char *t, int n) -{ -char *ptr; - - ptr = pConPriv->figures; - while ( ( pConPriv->fcount + n) > pConPriv->fcount_max ) { - ptr = (char *)xrealloc(ptr, 1024 + pConPriv->fcount_max); - if ( !ptr ) - return; - pConPriv->figures = ptr; - pConPriv->fcount_max += 1024; - } - ptr += pConPriv->fcount; - pConPriv->fcount += n; - memcpy(ptr, t, n); -} -#endif /* XP_PCL_LJ3 */ - -/* - * PclSendData: - * For XP-PCL-COLOR/XP-PCL-MONO, it executes the macro stored before - * in the clipped area. - * For XP-PCL-LJ3, it draws the spooled figures in the clipped area. - */ -void -PclSendData( - FILE *outFile, - PclContextPrivPtr pConPriv, - BoxPtr pbox, - int nbox, - double ratio -) -{ -char *ptr; -int n; -char t[80]; - -#ifdef XP_PCL_LJ3 - ptr = pConPriv->figures; - n = pConPriv->fcount; -#else - ptr = "\033&f3X"; - n = 5; -#endif /* XP_PCL_LJ3 */ - - while( nbox ) - { - /* - * Set the HP-GL/2 input window to the current - * rectangle in the clip region, then send the code to - * execute the macro defined above. - */ - if (ratio == 1.0) - sprintf( t, "\033%%0BIW%d,%d,%d,%d;\033%%0A", - pbox->x1, pbox->y1, - pbox->x2, pbox->y2 ); - else - sprintf( t, "\033%%0BIW%g,%d,%g,%d;\033%%0A", - ratio * pbox->x1, pbox->y1, - ratio * pbox->x2, pbox->y2 ); - - SEND_PCL( outFile, t ); - SEND_PCL_COUNT( outFile, ptr, n); - - nbox--; - pbox++; - } -} diff --git a/hw/xprint/pcl/PclPixel.c b/hw/xprint/pcl/PclPixel.c deleted file mode 100644 index d219838f0..000000000 --- a/hw/xprint/pcl/PclPixel.c +++ /dev/null @@ -1,159 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclPixel.c -** * -** * Contents: -** * Pixel-drawing code for the PCL DDX driver -** * -** * Created: 10/23/95 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include - -#include "windowstr.h" -#include "gcstruct.h" - -#include "Pcl.h" - -void -PclPolyPoint( pDrawable, pGC, mode, nPoints, pPoints ) - DrawablePtr pDrawable; - GCPtr pGC; - int mode; - int nPoints; - xPoint *pPoints; -{ - char t[80]; - FILE *outFile; - int xoffset, yoffset; - BoxRec box; - int xloc, yloc, i; -#if 0 - XpContextPtr pCon; - PclContextPrivPtr cPriv; - PclPixmapPrivPtr pPriv; -#endif - - if( PclUpdateDrawableGC( pGC, pDrawable, &outFile ) == FALSE ) - return; - - xoffset = pDrawable->x; - yoffset = pDrawable->y; - - /* - * Enter HP-GL/2 and change the line style to one in which only - * the vertices of the specified polyline are drawn. We must also - * temporarily change the line width so that only a single pixel - * is drawn. Then move to the first possible location. - */ - xloc = pPoints[0].x + pDrawable->x; - yloc = pPoints[0].y + pDrawable->y; - - sprintf( t, "\27%%0BPW0,0;LT0;PU;PA%d,%d", xloc, yloc ); - SEND_PCL( outFile, t ); - - /* - * Check each point against the clip region. If it is outside the - * region, don't send the PCL to the printer. - */ - - for( i = 0; i < nPoints; i++ ) - { - if( POINT_IN_REGION( pGC->pScreen, pGC->clientClip, xloc, yloc, &box ) ) - { - sprintf( t, ",%d,%d", xloc, yloc ); - SEND_PCL( outFile, t ); - } - - if( mode == CoordModeOrigin ) - { - xloc = pPoints[i+1].x + xoffset; - yloc = pPoints[i+1].y + yoffset; - } - else - { - xloc += pPoints[i+1].x; - yloc += pPoints[i+1].y; - } - } - -#if 0 - /* - * Change the line style and width back to what they were before - * this routine was called. No, this isn't pretty... - */ - if( pDrawable->type == DRAWABLE_WINDOW ) - { - pCon = PclGetContextFromWindow( (WindowPtr)pDrawable ); - cPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - cPriv->changeMask = GCLineWidth | GCLineStyle; - } - else - { - pPriv = (PclPixmapPrivPtr) - dixLookupPrivate(&((PixmapPtr)pDrawable)->devPrivates, - PclPixmapPrivateKey); - pPriv->changeMask = GCLineWidth | GCLineStyle; - } -#endif - - PclUpdateDrawableGC( pGC, pDrawable, &outFile ); - - /* - * Go back to PCL - */ - SEND_PCL( outFile, "\27%0A" ); -} - -void -PclPushPixels( pGC, pBitmap, pDrawable, width, height, x, y ) - GCPtr pGC; - PixmapPtr pBitmap; - DrawablePtr pDrawable; - int width; - int height; - int x; - int y; -{ -} diff --git a/hw/xprint/pcl/PclPolygon.c b/hw/xprint/pcl/PclPolygon.c deleted file mode 100644 index 7d95d6484..000000000 --- a/hw/xprint/pcl/PclPolygon.c +++ /dev/null @@ -1,351 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclPolygon.c -** * -** * Contents: -** * Draws Polygons and Rectangles for the PCL DDX -** * -** * Created: 10/23/95 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "Pcl.h" -#include "gcstruct.h" -#include "windowstr.h" - -void -PclPolyRectangle( - DrawablePtr pDrawable, - GCPtr pGC, - int nRects, - xRectangle *pRects) -{ - char t[80]; - FILE *outFile; - int nbox, i; - BoxPtr pbox; - xRectangle *drawRects, *r; - RegionPtr drawRegion, region; - short fudge; - int xoffset, yoffset; - XpContextPtr pCon; - PclContextPrivPtr pConPriv; - - if( PclUpdateDrawableGC( pGC, pDrawable, &outFile ) == FALSE ) - return; - - pCon = PclGetContextFromWindow( (WindowPtr) pDrawable ); - pConPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - - /* - * Allocate the storage required to deal with the clipping - * regions. - */ - region = REGION_CREATE( pGC->pScreen, NULL, 0 ); - drawRects = (xRectangle *)xalloc( nRects * sizeof( xRectangle ) ); - - fudge = 3 * pGC->lineWidth + 1; - - /* - * Generate the PCL code to draw the rectangles, by defining them - * as a macro which uses the HP-GL/2 rectangle drawing function. - */ - MACRO_START( outFile, pConPriv ); - SAVE_PCL( outFile, pConPriv, "\033%0B" ); - - xoffset = pDrawable->x; - yoffset = pDrawable->y; - - for( i = 0, r = drawRects; i < nRects; i++, r++ ) - { - xRectangle rect = pRects[i]; - - /* Draw the rectangle */ - sprintf( t, "PU%d,%d;ER%d,%d;", rect.x + xoffset, - rect.y + yoffset, rect.width, rect.height ); - SAVE_PCL( outFile, pConPriv, t ); - - /* Build the bounding box */ - r->x = MIN( rect.x, rect.x + rect.width ) + xoffset - - fudge; - r->y = MIN( rect.y, rect.y + rect.height ) + yoffset - - fudge; - r->width = rect.width + 2 * fudge; - r->height = rect.height + 2 * fudge; - } - SAVE_PCL( outFile, pConPriv, ";\033%0A" ); /* End the macro */ - MACRO_END( outFile ); - - /* - * Convert the collection of rectangles to a proper region, then - * intersect it with the clip region. - */ - drawRegion = RECTS_TO_REGION( pGC->pScreen, nRects, - drawRects, CT_UNSORTED ); - - REGION_INTERSECT( pGC->pScreen, region, drawRegion, pGC->pCompositeClip ); - - /* - * For each rectangle in the clip region, set the HP-GL/2 "input - * window" and render the set of rectangles to it. - */ - pbox = REGION_RECTS( region ); - nbox = REGION_NUM_RECTS( region ); - - PclSendData(outFile, pConPriv, pbox, nbox, 1.0); - - /* - * Clean up the temporary regions - */ - REGION_DESTROY( pGC->pScreen, drawRegion ); - REGION_DESTROY( pGC->pScreen, region ); - xfree( drawRects ); -} - -void -PclFillPolygon( - DrawablePtr pDrawable, - GCPtr pGC, - int shape, - int mode, - int nPoints, - DDXPointPtr pPoints) -{ - char t[80]; - FILE *outFile; - int nbox, i; - BoxPtr pbox; - BoxRec box; - RegionPtr drawRegion, region; - int xoffset, yoffset; - int xtop, xbottom, yleft, yright; - int fillRule; - XpContextPtr pCon; - PclContextPrivPtr pConPriv; - char *command; - - if( PclUpdateDrawableGC( pGC, pDrawable, &outFile ) == FALSE ) - return; - - pCon = PclGetContextFromWindow( (WindowPtr) pDrawable ); - pConPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - - /* - * Generate the PCL code to draw the filled polygon, by defining - * it as a macro which uses the HP-GL/2 polygon drawing function. - */ - MACRO_START( outFile, pConPriv ); - SAVE_PCL( outFile, pConPriv, "\033%0B" ); - - if( mode == CoordModeOrigin ) - { - xoffset = pDrawable->x; - yoffset = pDrawable->y; - command = "PA"; - } - else - { - xoffset = yoffset = 0; - command = "PR"; - } - - /* Begin the polygon */ - sprintf( t, "PU%d,%d;PM0;%s", pPoints[0].x + xoffset, pPoints[0].y - + yoffset, command ); - SAVE_PCL( outFile, pConPriv, t ); - - /* Seed the bounding box */ - xtop = xbottom = pPoints[0].x + xoffset; - yleft = yright = pPoints[0].y + yoffset; - - /* Add the rest of the points to the polygon */ - for( i = 1; i < nPoints; i++ ) - { - if( i != 1 ) - SAVE_PCL( outFile, pConPriv, "," ); - - sprintf( t, "%d,%d", pPoints[i].x + xoffset, pPoints[i].y + - yoffset ); - SAVE_PCL( outFile, pConPriv, t ); - - /* Update the bounding box */ - xtop = MIN( xtop, pPoints[i].x + xoffset ); - xbottom = MAX( xbottom, pPoints[i].x + xoffset ); - yleft = MIN( yleft, pPoints[i].y + yoffset ); - yright = MAX( yright, pPoints[i].y + yoffset ); - } - - /* Close the polygon and the macro */ - - if( pGC->fillRule == EvenOddRule ) - fillRule = 0; - else - fillRule = 1; - - sprintf( t, ";PM2;FP%d;\033%%0A", fillRule ); - SAVE_PCL( outFile, pConPriv, t ); - MACRO_END ( outFile ); - - /* - * Build the bounding region from the bounding box of the polygon - */ - box.x1 = xtop; - box.y1 = yleft; - box.x2 = xbottom; - box.y2 = yright; - drawRegion = REGION_CREATE( pGC->pScreen, &box, 0 ); - - if( mode == CoordModePrevious ) - REGION_TRANSLATE( pGC->pScreen, drawRegion, pPoints[0].x, pPoints[0].y ); - - region = REGION_CREATE( pGC->pScreen, NULL, 0 ); - - REGION_INTERSECT( pGC->pScreen, region, drawRegion, pGC->pCompositeClip ); - - /* - * For each rectangle in the clip region, set the HP-GL/2 "input - * window" and render the polygon to it. - */ - pbox = REGION_RECTS( region ); - nbox = REGION_NUM_RECTS( region ); - - PclSendData(outFile, pConPriv, pbox, nbox, 1.0); - - /* - * Clean up the temporary regions - */ - REGION_DESTROY( pGC->pScreen, drawRegion ); - REGION_DESTROY( pGC->pScreen, region ); -} - -void -PclPolyFillRect( - DrawablePtr pDrawable, - GCPtr pGC, - int nRects, - xRectangle *pRects) -{ - char t[80]; - FILE *outFile; - int nbox, i; - BoxPtr pbox; - xRectangle *drawRects, *r; - RegionPtr drawRegion, region; - int xoffset, yoffset; - short fudge; - XpContextPtr pCon; - PclContextPrivPtr pConPriv; - - if( PclUpdateDrawableGC( pGC, pDrawable, &outFile ) == FALSE ) - return; - - pCon = PclGetContextFromWindow( (WindowPtr) pDrawable ); - pConPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - - /* - * Allocate the storage required to deal with the clipping - * regions. - */ - region = REGION_CREATE( pGC->pScreen, NULL, 0 ); - drawRects = (xRectangle *)xalloc( nRects * sizeof( xRectangle ) ); - - - fudge = 3 * pGC->lineWidth + 1; - - /* - * Generate the PCL code to draw the filled rectangles, by - * defining them as a macro which uses the HP-GL/2 rectangle - * drawing function. - */ - MACRO_START( outFile, pConPriv ); - SAVE_PCL( outFile, pConPriv, "\033%0B" ); - - xoffset = pDrawable->x; - yoffset = pDrawable->y; - - for( i = 0, r = drawRects; i < nRects; i++, r++ ) - { - xRectangle rect = pRects[i]; - - /* Draw the rectangle */ - sprintf( t, "PU%d,%d;RR%d,%d;", rect.x + xoffset, rect.y + - yoffset, rect.width, rect.height ); - SAVE_PCL( outFile, pConPriv, t ); - - /* Build the bounding box */ - r->x = MIN( rect.x, rect.x + rect.width ) + xoffset - fudge; - r->y = MIN( rect.y, rect.y + rect.height ) + yoffset - - fudge; - r->width = rect.width + 2 * fudge; - r->height = rect.height + 2 * fudge; - } - SAVE_PCL( outFile, pConPriv, ";\033%0A" ); /* End the macro */ - MACRO_END( outFile ); - - /* - * Convert the collection of rectangles to a proper region, then - * intersect it with the clip region. - */ - drawRegion = RECTS_TO_REGION( pGC->pScreen, nRects, - drawRects, CT_UNSORTED ); - REGION_INTERSECT( pGC->pScreen, region, drawRegion, pGC->pCompositeClip ); - - /* - * For each rectangle in the clip region, set the HP-GL/2 "input - * window" and render the set of rectangles to it. - */ - pbox = REGION_RECTS( region ); - nbox = REGION_NUM_RECTS( region ); - - PclSendData(outFile, pConPriv, pbox, nbox, 1.0); - - /* - * Clean up the temporary regions - */ - REGION_DESTROY( pGC->pScreen, drawRegion ); - REGION_DESTROY( pGC->pScreen, region ); - xfree( drawRects ); -} diff --git a/hw/xprint/pcl/PclPrint.c b/hw/xprint/pcl/PclPrint.c deleted file mode 100644 index ac8ea1537..000000000 --- a/hw/xprint/pcl/PclPrint.c +++ /dev/null @@ -1,709 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclPrint.c -** * -** * Contents: Print extension code of Pcl driver -** * -** * Created: 2/03/95 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include -#include -#include - -#define NEED_EVENTS -#include -#undef NEED_EVENTS - -#include "Pcl.h" - -#include "windowstr.h" -#include "attributes.h" -#include "AttrValid.h" -#include "Oid.h" - -int -PclStartJob( - XpContextPtr pCon, - Bool sendClientData, - ClientPtr client) -{ - PclContextPrivPtr pConPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - PclPaletteMap *pal; - - /* - * Check for existing page file, and delete it if it exists. - */ - if(pConPriv->pageFileName != (char *)NULL) - { - if(pConPriv->pPageFile != (FILE *)NULL) - { - fclose(pConPriv->pPageFile); - pConPriv->pPageFile = (FILE *)NULL; - } - unlink(pConPriv->pageFileName); - xfree(pConPriv->pageFileName); - pConPriv->pageFileName = (char *)NULL; - } - - /* - * Create a temporary file to store the printer output. - */ - if (!XpOpenTmpFile("w+", &pConPriv->jobFileName, &pConPriv->pJobFile)) - return BadAlloc; - - /* - * Create/Initialize the SoftFontInfo structure - */ - pConPriv->pSoftFontInfo = PclCreateSoftFontInfo(); - - /* - * Set up the colormap handling - */ - pConPriv->palettes = NULL; - pConPriv->nextPaletteId = 4; - pConPriv->currentPalette = 0; - - pal = &( pConPriv->staticGrayPalette ); - pal->paletteId = 1; - pal->downloaded = 0; - - pal = &( pConPriv->trueColorPalette ); - pal->paletteId = 2; - pal->downloaded = 0; - - pal = &( pConPriv->specialTrueColorPalette ); - pal->paletteId = 3; - pal->downloaded = 0; - - return Success; -} - -int -PclEndJob( - XpContextPtr pCon, - Bool cancel) -{ - PclContextPrivPtr priv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - -#ifdef CCP_DEBUG - FILE *xpoutput; -#endif - FILE *fp; - int retVal; - char *fileName, *trailer; - struct stat statBuf; - PclPaletteMapPtr p; - - trailer = "\033%-12345X@PJL RESET\n"; - - if( cancel == True ) - { - if( priv->getDocClient != (ClientPtr)NULL ) { - XpFinishDocData( priv->getDocClient ); - - priv->getDocClient = NULL; - priv->getDocBufSize = 0; - } - - return Success; - } - - if( priv->getDocClient != (ClientPtr)NULL && priv->getDocBufSize > 0 ) - { - /* - * We need to stash the trailer information somewhere... - */ - if (!XpOpenTmpFile("w+", &fileName, &fp)) - return BadAlloc; - -#ifndef XP_PCL_LJ3 - SEND_PCL( fp, trailer ); - rewind( fp ); - - retVal = XpSendDocumentData( priv->getDocClient, fp, - strlen( trailer ), - priv->getDocBufSize ); -#endif /* XP_PCL_LJ3 */ - - fclose( fp ); - unlink( fileName ); - xfree( fileName ); - - if( priv->getDocClient != (ClientPtr)NULL ) { - XpFinishDocData( priv->getDocClient ); - - priv->getDocClient = NULL; - priv->getDocBufSize = 0; - } - - return retVal; - } - -#ifndef XP_PCL_LJ3 - SEND_PCL( priv->pJobFile, trailer ); -#endif /* XP_PCL_LJ3 */ - - /* - * Submit the job to the spooler - */ - fflush( priv->pJobFile ); - - /* - * Dump the job file to another output file, for testing - * purposes. - */ - rewind( priv->pJobFile ); - stat( priv->jobFileName, &statBuf ); - -#ifdef CCP_DEBUG - unlink( "/users/prince/XpOutput" ); - xpoutput = fopen( "/users/prince/XpOutput", "w" ); - - rewind( priv->pJobFile ); - TransferBytes( priv->pJobFile, xpoutput, - (int)statBuf.st_size ); - fclose( xpoutput ); -#endif - - XpSubmitJob( priv->jobFileName, pCon ); - fclose( priv->pJobFile ); - unlink( priv->jobFileName ); - xfree( priv->jobFileName ); - priv->jobFileName = NULL; - - PclDestroySoftFontInfo(priv->pSoftFontInfo); - priv->pSoftFontInfo = (PclSoftFontInfoPtr) NULL; - - /* - * Clear out the colormap cache - */ - p = priv->palettes; - while( p ) - { - p->downloaded = 0; - p = p->next; - } - - return Success; -} - -/* StartPage - * - * If page file exists - * close page file - * set page file pointer = NULL - * unlink page file - * Create a new page file - * Send the page header information to the page file - * ClearArea the window and all descendant windows - */ -int -PclStartPage( - XpContextPtr pCon, - WindowPtr pWin) -{ - PclContextPrivPtr pConPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - PclWindowPrivPtr pWinPriv = (PclWindowPrivPtr) - dixLookupPrivate(&pWin->devPrivates, PclWindowPrivateKey); - xRectangle repro; - char t[80]; - XpOid orient, plex, tray, medium; - int dir, plexNum, num; - - /* - * Put a pointer to the context in the window private structure - */ - pWinPriv->validContext = 1; - pWinPriv->context = pCon; - - /* - * Clear out the old page file, if necessary - */ - if(pConPriv->pPageFile != (FILE *)NULL) - { - fclose(pConPriv->pPageFile); - pConPriv->pPageFile = (FILE *)NULL; - } - if(pConPriv->pageFileName != (char *)NULL) - { - unlink(pConPriv->pageFileName); - pConPriv->pageFileName = (char *)NULL; - } - - /* - * Make up a new page file. - */ - if (!XpOpenTmpFile("w+", &pConPriv->pageFileName, &pConPriv->pPageFile)) - return BadAlloc; - - /* - * Reset the GC cached in the context private struct. - */ - pConPriv->validGC = 0; - - /* - * Set the page orientation - */ - orient = XpGetContentOrientation( pCon ); - switch( orient ) - { - case xpoid_val_content_orientation_landscape: - dir = 1; - break; - case xpoid_val_content_orientation_reverse_portrait: - dir = 2; - break; - case xpoid_val_content_orientation_reverse_landscape: - dir = 3; - break; - case xpoid_val_content_orientation_portrait: - default: - dir = 0; - break; - } - sprintf( t, "\033&l%dO", dir ); - SEND_PCL( pConPriv->pPageFile, t ); - - /* - * Set the duplexing method. Since PCL wants to think of it in - * terms of the "binding edge," and the attribute store thinks in - * "duplex/tumble," this is a little complicated. - * - * Actually, this has no bearing on the output, since the HP1600C - * will only print on one side of the paper, and ignore all - * requests to enable duplexing. But, in an attempt to keep this - * driver somewhat generic, we'll enable it anyway. - */ - plex = XpGetPlex( pCon ); - - if( plex == xpoid_val_plex_duplex ) - { - if( dir == 0 || dir == 2 ) - plexNum = 1; - else - plexNum = 2; - } - else if( plex == xpoid_val_plex_tumble ) - { - if( dir == 0 || dir == 2 ) - plexNum = 2; - else - plexNum = 1; - } - else - plexNum = 0; - sprintf( t, "\033&l%dS", plexNum ); - SEND_PCL( pConPriv->pPageFile, t ); - - /* - * Set the input tray or medium. If XpGetPageSize gives us a valid medium, - * we can just send that to the printer, and let the printer handle the - * details. Otherwise, we select the tray returned from XpGetPageSize, - * which will be either a tray that should contain the correct medium - * (possibly with operator intervention), or the default tray from the - * config files. - */ - medium = XpGetPageSize( pCon, &tray, NULL ); - if( medium != xpoid_none ) - { - switch( medium ) - { - case xpoid_val_medium_size_na_legal: - num = 3; - break; - case xpoid_val_medium_size_iso_a3: - num = 27; - break; - case xpoid_val_medium_size_iso_a4: - num = 26; - break; - case xpoid_val_medium_size_executive: - num = 1; - break; - case xpoid_val_medium_size_ledger: - num = 6; - break; - case xpoid_val_medium_size_monarch_envelope: - num = 80; - break; - case xpoid_val_medium_size_na_number_10_envelope: - num = 81; - break; - case xpoid_val_medium_size_iso_designated_long: - num = 90; - break; - case xpoid_val_medium_size_iso_c5: - num = 91; - break; - case xpoid_val_medium_size_iso_b5: - num = 100; - break; - case xpoid_val_medium_size_jis_b5: - num = 45; - break; - case xpoid_val_medium_size_na_letter: - default: - num = 2; - break; - } - sprintf( t, "\033&l%dA", num ); - SEND_PCL( pConPriv->pPageFile, t ); - } - else - { - switch( tray ) - { - case xpoid_val_input_tray_manual: - num = 2; - break; - case xpoid_val_input_tray_envelope: - num = 3; - break; - case xpoid_val_input_tray_large_capacity: - num = 5; - break; - case xpoid_val_input_tray_bottom: - num = 4; - break; - case xpoid_val_input_tray_main: - default: - num = 1; - break; - } - sprintf( t, "\033&l%dH", num ); - SEND_PCL( pConPriv->pPageFile, t ); - } - - /* - * Set the scaling factors so that the HP-GL/2 coordinate system - * matches the X coordinate system, both in axis orientation and - * in unit<->pixel conversion. - */ - XpGetReproductionArea( pCon, &repro ); - - sprintf( t, "\033&l0E\033*p%dx%dY", repro.x - 75, repro.y ); - SEND_PCL( pConPriv->pPageFile, t ); - - sprintf( t, "\033*c%dx%dY\033*c0T", (int)(repro.width / 300.0 * 720.0), - (int)(repro.height / 300.0 * 720.0) ); - SEND_PCL( pConPriv->pPageFile, t ); - - sprintf( t, "\033%%0BSC%d,%d,%d,%d;\033%%0A", repro.x, repro.x + - repro.width, repro.y + repro.height, repro.y ); - SEND_PCL( pConPriv->pPageFile, t ); - - return Success; -} - -/* - * When sending the generated PCL code back to the client, we send everything - * that we have generated so far for the job. After sending the data, we clean - * out the job file, to avoid repeatedly sending the same data. - */ - -static int -SendDocData( PclContextPrivPtr pPriv ) -{ - struct stat statBuf; - int ret; - - rewind( pPriv->pJobFile ); - if( stat( pPriv->jobFileName, &statBuf ) < 0 ) - return BadAlloc; - - ret = XpSendDocumentData( pPriv->getDocClient, pPriv->pJobFile, - (int)statBuf.st_size, pPriv->getDocBufSize ); - - /* - * Clean out the job file - */ - fclose( pPriv->pJobFile ); - unlink( pPriv->jobFileName ); - - xfree(pPriv->jobFileName); - - if (!XpOpenTmpFile("w+", &pPriv->jobFileName, &pPriv->pJobFile)) - return BadAlloc; - - return ret; -} - -/* - * EndPage: - * - * Write page trailer to page file - * Write page file to job file - */ -int -PclEndPage( - XpContextPtr pCon, - WindowPtr pWin) -{ - PclContextPrivPtr pConPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - - struct stat statBuf; - - /* - * Send the page trailer to the page file. - */ - SEND_PCL( pConPriv->pPageFile, "\014" ); - fflush( pConPriv->pPageFile ); - - /* - * Write the page file contents to the job file, or to the - * whatever client has called GetDocumentData. - * - * pWinPriv->pPageFile must first be set to the start of the page file. - */ - rewind(pConPriv->pPageFile); - if(stat(pConPriv->pageFileName, &statBuf) < 0) - return BadAlloc; - - if(TransferBytes(pConPriv->pPageFile, pConPriv->pJobFile, - (int)statBuf.st_size) != (int)statBuf.st_size) - return BadAlloc; - - if( pConPriv->getDocClient != (ClientPtr)NULL && - pConPriv->getDocBufSize > 0 ) - { - return SendDocData( pConPriv ); - } - - return Success; -} - -/* - * The PclStartDoc() and PclEndDoc() functions serve basically as NOOP - * placeholders. This driver doesn't deal with the notion of multiple - * documents per page. - */ - -int -PclStartDoc(XpContextPtr pCon, - XPDocumentType type) -{ - PclContextPrivPtr pConPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - -#ifndef XP_PCL_LJ3 - /* - * Set the printer resolution for the page. Since we can only - * render color at 300dpi, we just hard-code this. - */ - SEND_PCL( pConPriv->pJobFile, - "\033%-12345X@PJL SET RESOLUTION = 300\r\n" ); -#endif /* XP_PCL_LJ3 */ - - /* - * Initialize HP-GL/2 - */ - SEND_PCL( pConPriv->pJobFile, "\033E\033%0BIN,SP1,TR0;\033%0A" ); - - /* - * Stash the type of the document (used by PutDocumentData operation) - */ - pConPriv->isRaw = (type == XPDocRaw); - - return Success; -} - -int -PclEndDoc( - XpContextPtr pCon, - Bool cancel) -{ - /* - * XXX What should I do if I get cancel == TRUE? - */ - return Success; -} - -/* - * PclDocumentData() - * - * Hand any pre-generated PDL down to the spool files, formatting it - * as necessary to fit the given window. - * - */ - -#define DOC_PCL 1 -#define DOC_HPGL 2 - -int -PclDocumentData( - XpContextPtr pCon, - DrawablePtr pDraw, - char *pData, - int len_data, - char *pFmt, - int len_fmt, - char *pOpt, - int len_opt, - ClientPtr client) -{ - int type = 0; - PclContextPrivPtr pPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - XpOidDocFmtList *formats; - XpOidDocFmt *f; - char t[80]; - xRectangle repro; - - /* - * Verify the input format - */ - formats = XpGetDocFmtListAttr( pCon, XPPrinterAttr, - (pPriv->isRaw) ? - xpoid_att_xp_raw_formats_supported : - xpoid_att_xp_embedded_formats_supported, - NULL ); - f = XpOidDocFmtNew( pFmt ); - if( !XpOidDocFmtListHasFmt( formats, f ) ) - { - XpOidDocFmtListDelete( formats ); - XpOidDocFmtDelete( f ); - return BadMatch; - } - XpOidDocFmtListDelete( formats ); - - if( !(pPriv->isRaw) ) - { - if( !strcmp( f->format, "PCL" ) ) - type = DOC_PCL; - else if( !strcmp( f->format, "HPGL" ) ) - type = DOC_HPGL; - else - { - XpOidDocFmtDelete( f ); - return BadMatch; - } - - switch( type ) - { - case DOC_HPGL: - /* - * Move the picture frame to the appropriate place on the page, - * then assume that the embedded code will scale it properly. - */ - sprintf( t, "\033&l0E\033*p%dx%dY", - pDraw->x - 75, - pDraw->y ); - SEND_PCL( pPriv->pPageFile, t ); - - sprintf( t, "\033*c%dx%dY\033*coT", - (int)( pDraw->width / 300.0 * 720.0 ), - (int)( pDraw->height / 300.0 * 720.0 ) ); - SEND_PCL( pPriv->pPageFile, t ); - break; - } - } - - - /* - * Send the data down the pipe - */ - SEND_PCL_COUNT( pPriv->pPageFile, pData, len_data ); - - /* - * If it's not a raw document, clean up the embedding - */ - if( !(pPriv->isRaw) ) - switch( type ) - { - case DOC_HPGL: - /* - * Reset the picture frame - */ - XpGetReproductionArea( pCon, &repro ); - - sprintf( t, "\033&l0E\033*p%dx%dY", repro.x - 75, repro.y ); - SEND_PCL( pPriv->pPageFile, t ); - - sprintf( t, "\033*c%dx%dY\033*c0T", - (int)(repro.width / 300.0 * 720.0), - (int)(repro.height / 300.0 * 720.0) ); - SEND_PCL( pPriv->pPageFile, t ); - - sprintf( t, "\033%%0BSC%d,%d,%d,%d;\033%%0A", repro.x, repro.x + - repro.width, repro.y + repro.height, repro.y ); - SEND_PCL( pPriv->pPageFile, t ); - break; - } - - XpOidDocFmtDelete( f ); - return Success; -} - -/* - * - * PclGetDocumentData() - * - * This function allows the driver to send the generated PCL back to - * the client. - * - * XXX This function is barely spec'ed, much less implemented! - */ - -int -PclGetDocumentData( - XpContextPtr pCon, - ClientPtr client, - int maxBufferSize) -{ - PclContextPrivPtr pPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - - pPriv->getDocClient = client; - pPriv->getDocBufSize = maxBufferSize; - - return Success; -} diff --git a/hw/xprint/pcl/PclSFonts.c b/hw/xprint/pcl/PclSFonts.c deleted file mode 100644 index 2474d90d7..000000000 --- a/hw/xprint/pcl/PclSFonts.c +++ /dev/null @@ -1,427 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclSFonts.c -** * -** * Contents: -** * Send Soft Font Download data to the specified -** * file pointer. -** * -** * Created: 3/4/96 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include "Pcl.h" - -static char tmp1; -static short tmp2; -#define Put1byte(fp, x) tmp1=x; fwrite((char *)&tmp1, 1, 1, fp) -#define Put2bytes(fp, x) tmp2=x; fwrite((char *)&tmp2, 2, 1, fp) - -#define ESC 0x1b -#define SYMBOL_SET 277 - -static unsigned int PclDownloadChar(FILE *,PclCharDataPtr,unsigned short,unsigned char); -static unsigned int PclDownloadHeader(FILE *, PclFontDescPtr, unsigned short); - -#ifdef PCL_FONT_COMPRESS -static unsigned char *compress_bitmap_data(PclCharDataPtr, unsigned int *); -#endif /* PCL_FONT_COMPRESS */ - -/* -*- PclDownloadSoftFont8 -*- - * Send the Character Definition Command for 8-bit font - * **************************************************************************/ -void -PclDownloadSoftFont8( - FILE *fp, - PclSoftFontInfoPtr pSoftFontInfo, - PclFontHead8Ptr pfh, - PclCharDataPtr pcd, - unsigned char *code -) -{ - /* - * Check whether the font header has already been downloaded. - * If not, download it. - */ - - if ( !pfh->fid ) { - pfh->fid = pSoftFontInfo->cur_max_fid++; - PclDownloadHeader(fp, &(pfh->fd), pfh->fid); - } - pfh->index[*code] = *code; - PclDownloadChar(fp, pcd, pfh->fid, pfh->index[*code]); - -} - -/* -*- PclDownloadSoftFont16 -*- - * Send the Character Definition Command for 16 bit font - * **************************************************************************/ -void -PclDownloadSoftFont16( - FILE *fp, - PclSoftFontInfoPtr pSoftFontInfo, - PclFontHead16Ptr pfh, - PclCharDataPtr pcd, - unsigned char row, - unsigned char col -) -{ - /* - * Check whether the font header is already downloaded. - * If not, download it. - */ - - if ( !pfh->cur_cindex ) { - pfh->cur_fid = pSoftFontInfo->cur_max_fid++; - PclDownloadHeader(fp, &(pfh->fd), pfh->cur_fid); - } - pfh->index[row][col].fid = pfh->cur_fid; - pfh->index[row][col].cindex = pfh->cur_cindex++; - - PclDownloadChar(fp, pcd, pfh->index[row][col].fid, pfh->index[row][col].cindex); -} - -/* -*- PclCreateSoftFontInfo -*- - * Create and Initialize the structure for storing the information - * of the downloaded soft font. - * **************************************************************************/ -PclSoftFontInfoPtr -PclCreateSoftFontInfo(void) -{ -PclSoftFontInfoPtr pSoftFontInfo; - - pSoftFontInfo = (PclSoftFontInfoPtr)xalloc(sizeof(PclSoftFontInfoRec)); - if ( pSoftFontInfo == (PclSoftFontInfoPtr) NULL) - return (PclSoftFontInfoPtr) NULL; - pSoftFontInfo->phead8 = (PclFontHead8Ptr)NULL; - pSoftFontInfo->phead16 = (PclFontHead16Ptr)NULL; - pSoftFontInfo->pinfont = (PclInternalFontPtr)NULL; - pSoftFontInfo->cur_max_fid = 1; - return pSoftFontInfo; -} - -/* -*- PclDestroySoftFontInfo -*- - * Destroy the soft font information structure - * **************************************************************************/ -void -PclDestroySoftFontInfo( PclSoftFontInfoPtr pSoftFontInfo ) -{ -PclFontHead8Ptr pfh8, pfh8_next; -PclFontHead16Ptr pfh16, pfh16_next; -PclInternalFontPtr pin, pin_next; -unsigned char nindex_row; -int i; - - if ( pSoftFontInfo == (PclSoftFontInfoPtr) NULL ) - return; - - pfh8 = pSoftFontInfo->phead8; - while (pfh8 != (PclFontHead8Ptr) NULL) { - xfree(pfh8->fontname); - xfree(pfh8->index); - pfh8_next = pfh8->next; - xfree(pfh8); - pfh8 = pfh8_next; - } - - pfh16 = pSoftFontInfo->phead16; - while (pfh16 != (PclFontHead16Ptr) NULL) { - xfree(pfh16->fontname); - nindex_row = pfh16->lastRow - pfh16->firstRow + 1; - for (i=0; iindex[i]); - xfree(pfh16->index); - pfh16_next = pfh16->next; - xfree(pfh16); - pfh16 = pfh16_next; - } - - pin = pSoftFontInfo->pinfont; - while (pin != (PclInternalFontPtr) NULL) { - xfree(pin->fontname); - pin_next = pin->next; - xfree(pin); - pin = pin_next; - } - - xfree(pSoftFontInfo); -} - -/* -*- PclDownloadHeader -*- - * Send the Font Header Commnad. - * Format 0 : Font Header for Pcl Bitmapped Fonts - * Format 20 : Font Header for Resolution Specified Bitmapped Fonts - * **************************************************************************/ -static unsigned int -PclDownloadHeader( - FILE *fp, - PclFontDescPtr fd, - unsigned short fid -) -{ -int nbytes; - -#ifdef XP_PCL_LJ3 - nbytes = 64; -#else - nbytes = 68; -#endif /* XP_PCL_LJ3 */ - /* - * Font ID Command : Esc *c#D - * (Default = 0, Range = 0 - 32767) - */ - fprintf(fp, "%c*c%dD", ESC, fid); - - /* - * Font Header Commnad : Esc )s#W[font header data] - * (Default = 0, Range = 0 - 32767) - */ - fprintf(fp, "%c)s%dW", ESC, nbytes); - - Put2bytes(fp, nbytes); /* Font Description Size */ -#ifdef XP_PCL_LJ3 - Put1byte(fp, 0); /* Header Format */ -#else - Put1byte(fp, 20); /* Header Format */ -#endif /* XP_PCL_LJ3 */ - Put1byte(fp, 2); /* Font Type */ - Put2bytes(fp, 0); /* Style MSB */ - Put2bytes(fp, fd->ascent); /* BaseLine Position */ - Put2bytes(fp, fd->cellwidth); /* Cell Width */ - Put2bytes(fp, fd->cellheight); /* Cell Height */ - Put1byte(fp, 0); /* Orienation */ - Put1byte(fp, fd->spacing); /* Spacing */ - Put2bytes(fp, SYMBOL_SET); /* Symbol Set */ - Put2bytes(fp, fd->pitch*4); /* font pitch */ - Put2bytes(fp, fd->cellheight * 4); /* Height */ - Put2bytes(fp, 0); /* x-Height */ - Put1byte(fp, 0); /* width type (normal) */ - Put1byte(fp, 0); /* Style LSB */ - Put1byte(fp, 0); /* Stroke Weight */ - Put1byte(fp, 5); /* Typeface LSB */ - Put1byte(fp, 0); /* Typeface MSB */ - Put1byte(fp, 0); /* Serif Style */ - Put1byte(fp, 0); /* Quality */ - Put1byte(fp, 0); /* Placement */ - Put1byte(fp, 0); /* Underline Position */ - Put1byte(fp, 0); /* Underline Thickness */ - Put2bytes(fp, fd->cellheight*1.2); /* Text Height */ - Put2bytes(fp, fd->cellwidth * 4); /* Text Width */ - Put2bytes(fp, 0); /* First Code */ - Put2bytes(fp, 255); /* Last Code */ - Put1byte(fp, 0); /* Pitch Extend */ - Put1byte(fp, 0); /* Height Extend */ - Put2bytes(fp, 0); /* Cap Height */ - Put2bytes(fp, 0); /* Font Number 1 */ - Put2bytes(fp, 0); /* Font Number 2 */ - Put2bytes(fp, 0); /* Font Name */ - Put2bytes(fp, 0); /* Font Name */ - Put2bytes(fp, 0); /* Font Name */ - Put2bytes(fp, 0); /* Font Name */ - Put2bytes(fp, 0); /* Font Name */ - Put2bytes(fp, 0); /* Font Name */ - Put2bytes(fp, 0); /* Font Name */ - Put2bytes(fp, 0); /* Font Name */ - -#ifdef XP_PCL_LJ3 - return 64; -#else - Put2bytes(fp, 300); /* X Resolution */ - Put2bytes(fp, 300); /* Y Resolution */ - return 68; -#endif /* XP_PCL_LJ3 */ - -} - -/* -*- PclDownloadCharacter -*- - * Send the Character Definition Command. - * **************************************************************************/ -static unsigned int -PclDownloadChar( - FILE *fp, - PclCharDataPtr cd, - unsigned short fid, - unsigned char code -) -{ -unsigned int nbytes, n; -unsigned char *raster; - - /* - * Font ID Command : Esc *c#D - * (Default = 0, Range = 0 - 32767) - * Character Code Command : Esc *c#E - * (Default = 0, Range = 0 - 65535) - */ - fprintf(fp, "%c*c%dd%dE", ESC, fid, code); - - /* - * Character Definition Command : Esc (s#W[character descriptor and data] - * (Default = N/A, Range = 0 - 32767) - */ - - nbytes = n = cd->height * ((cd->width + 7) / 8); -#ifdef PCL_FONT_COMPRESS - raster = compress_bitmap_data(cd, &nbytes); -#else - raster = (unsigned char *)NULL; -#endif /* PCL_FONT_COMPRESS */ - fprintf(fp, "%c(s%dW", ESC, nbytes + 16); - - Put1byte(fp, 4); /* Format */ - Put1byte(fp, 0); /* Continuation */ - Put1byte(fp, 14); /* Descriptor Size */ - if (raster) { /* Class */ - Put1byte(fp, 2); - } else { - Put1byte(fp, 1); /* Class */ - } - Put2bytes(fp, 0); /* Orientation */ - Put2bytes(fp, cd->h_offset); /* left offset */ - Put2bytes(fp, cd->v_offset); /* top offset */ - Put2bytes(fp, cd->width); /* character width */ - Put2bytes(fp, cd->height); /* character height */ - Put2bytes(fp, cd->font_pitch*4); /* delta X */ - - /* - * Raster Character Data - */ - if (raster) { - fwrite(raster, nbytes, 1, fp); - xfree(raster); - } else - fwrite(cd->raster_top, nbytes, 1, fp); - - return n + 16; -} - - -#ifdef PCL_FONT_COMPRESS -/* -*- compress_bitmap_data -*- - * Compress Bitmap data - * **************************************************************************/ -static unsigned char * -compress_bitmap_data( - PclCharDataPtr cd, - unsigned int *nbytes -) -{ -unsigned int byte_width; -unsigned char *raster, *rptr_s, *rptr_e, *rptr_end; -unsigned char *tmp_s, *tmp_ptr; -unsigned char *p; -unsigned char cur, pixel; -unsigned int num; - -int i, j, k, w; - - byte_width = (cd->width + 7) / 8; - *nbytes = cd->height * byte_width; - - /* Create buffer for storing compress bitmap glyph */ - raster = (unsigned char *)xalloc(*nbytes); - rptr_s = raster; - rptr_e = raster; - rptr_end = raster + *nbytes; - - tmp_s = (unsigned char *)xalloc(cd->width * 8 + 2); - - p = cd->raster_top; - for (i=0; iheight; i++) { - tmp_ptr = tmp_s; - *tmp_ptr++ = 0; - if ( (*p>>7)&0x1 == 1 ) { - *tmp_ptr++ = 0; - cur = 1; - } else { - cur = 0; - } - num = 0; - for (j=0, w=0; jwidth; k++, w++) { - pixel = (*p>>(7-k))&0x1; - if ( pixel == cur ) { - num++; - } else { - cur = pixel; - while (num > 255) { - *tmp_ptr++ = 255; - *tmp_ptr++ = 0; - num -= 255; - } - *tmp_ptr++ = num; - num = 1; - } - } - } - if ( pixel == cur ) { - while (num > 255) { - *tmp_ptr++ = 255; - *tmp_ptr++ = 0; - num -= 255; - } - *tmp_ptr++ = num&0xff; - } else - *tmp_ptr++ = num; - - if ( ((rptr_e - rptr_s) == (tmp_ptr - tmp_s)) && - !memcmp(rptr_s+1, tmp_s+1, (tmp_ptr - tmp_s) - 1) ) - *rptr_s += 1; - else { - if ( rptr_e + (tmp_ptr - tmp_s) > rptr_end ) { - xfree(raster); - xfree(tmp_s); - return (unsigned char *)NULL; - } - memcpy (rptr_e, tmp_s, tmp_ptr - tmp_s); - rptr_s = rptr_e; - rptr_e = rptr_s + (tmp_ptr - tmp_s); - } - } - xfree(tmp_s); - *nbytes = rptr_e - raster; - - return raster; -} -#endif /* PCL_FONT_COMPRESS */ diff --git a/hw/xprint/pcl/PclSFonts.h b/hw/xprint/pcl/PclSFonts.h deleted file mode 100644 index c991263df..000000000 --- a/hw/xprint/pcl/PclSFonts.h +++ /dev/null @@ -1,115 +0,0 @@ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#ifndef _PCLFONTS_H -#define _PCLFONTS_H - -/* -*-H-*- -****************************************************************************** -****************************************************************************** -* -* File: PclFonts.h -* Description: Send Soft Font Download data to the specified file pointer. -* -* -****************************************************************************** -****************************************************************************** -*/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - - -typedef struct { - unsigned char fid; /* sfont font ID */ - unsigned char cindex; /* character indext */ -} PclFontMapRec, PclFontMapPtr; - -typedef struct { - int h_offset; - int v_offset; - unsigned int width; - unsigned int height; - int font_pitch; - unsigned char *raster_top; -} PclCharDataRec, *PclCharDataPtr; - -typedef struct { - unsigned char spacing; - unsigned int pitch; - unsigned int cellheight; - unsigned int cellwidth; - int ascent; - int descent; -} PclFontDescRec, *PclFontDescPtr; - -typedef struct _PclFontHead8Rec { - char *fontname; - PclFontDescRec fd; - unsigned short fid; - unsigned char *index; - struct _PclFontHead8Rec *next; -} PclFontHead8Rec, *PclFontHead8Ptr; - -typedef struct _PclFontHead16Rec { - char *fontname; - PclFontDescRec fd; - unsigned short cur_fid; - unsigned char cur_cindex; - PclFontMapRec **index; - unsigned short firstCol; - unsigned short lastCol; - unsigned short firstRow; - unsigned short lastRow; - struct _PclFontHead16Rec *next; -} PclFontHead16Rec, *PclFontHead16Ptr; - -typedef struct _PclInternalFontRec { - char *fontname; - float pitch; - float height; - char *pcl_font_name; - char *spacing; - struct _PclInternalFontRec *next; -} PclInternalFontRec, *PclInternalFontPtr; - -typedef struct { - PclFontHead8Ptr phead8; - PclFontHead16Ptr phead16; - PclInternalFontPtr pinfont; - unsigned char cur_max_fid; -} PclSoftFontInfoRec, *PclSoftFontInfoPtr; - -#define MONOSPACE 0 -#define PROPSPACE 1 - -#endif /* _PCLFONTS_H */ diff --git a/hw/xprint/pcl/PclSpans.c b/hw/xprint/pcl/PclSpans.c deleted file mode 100644 index 4951899ab..000000000 --- a/hw/xprint/pcl/PclSpans.c +++ /dev/null @@ -1,137 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclSpans.c -** * -** * Contents: -** * Code to set and fill spans in the PCL DDX -** * -** * Created: 10/23/95 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "Pcl.h" -#include "gcstruct.h" -#include "windowstr.h" - -void -PclFillSpans( - DrawablePtr pDrawable, - GCPtr pGC, - int nSpans, - DDXPointPtr pPoints, - int *pWidths, - int fSorted) -{ - char t[80]; - FILE *outFile; - int xoffset, yoffset; - xRectangle *rects, *r; - RegionPtr fillRegion, region = 0; - int i; - int nbox; - BoxPtr pbox; - - if( PclUpdateDrawableGC( pGC, pDrawable, &outFile ) == FALSE ) - return; - - /* - * Build a region out of the spans - */ - rects = (xRectangle *)xalloc( nSpans * sizeof( xRectangle ) ); - xoffset = pDrawable->x; - yoffset = pDrawable->y; - - for( i = 0, r = rects; i < nSpans; i++, r++ ) - { - r->x = pPoints[i].x + xoffset; - r->y = pPoints[i].y + yoffset; - r->width = pWidths[i]; - r->height = 1; - } - fillRegion = RECTS_TO_REGION( pGC->pScreen, nSpans, rects, ( fSorted ) ? - CT_YSORTED : CT_UNSORTED ); - - /* - * Intersect this region with the clip region. Whatever's left, - * should be filled. - */ - REGION_INTERSECT( pGC->pScreen, region, fillRegion, pGC->clientClip ); - - pbox = REGION_RECTS( region ); - nbox = REGION_NUM_RECTS( region ); - - /* Enter HP-GL/2 */ - SEND_PCL( outFile, "\27%0B" ); - - while( nbox ) - { - sprintf( t, "PU%d,%d;RR%d,%d;", pbox->x1, pbox->y1, - pbox->x2, pbox->y2 ); - SEND_PCL( outFile, t ); - - nbox--; - pbox++; - } - - /* Go back to PCL */ - SEND_PCL( outFile, "\27%0A" ); - - /* - * Clean up the temporary regions - */ - REGION_DESTROY( pGC->pScreen, fillRegion ); - REGION_DESTROY( pGC->pScreen, region ); - xfree( rects ); -} - -void -PclSetSpans( - DrawablePtr pDrawable, - GCPtr pGC, - char *pSrc, - DDXPointPtr pPoints, - int *pWidths, - int nSpans, - int fSorted) -{ -} diff --git a/hw/xprint/pcl/PclText.c b/hw/xprint/pcl/PclText.c deleted file mode 100644 index 324de3014..000000000 --- a/hw/xprint/pcl/PclText.c +++ /dev/null @@ -1,934 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclText.c -** * -** * Contents: -** * Character-drawing routines for the PCL DDX -** * -** * Created: 10/23/95 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#ifdef DO_TWO_BYTE_PCL -#include "iconv.h" -#endif /* DO_TWO_BYTE_PCL */ -#include "gcstruct.h" -#include "windowstr.h" - -#include "Pcl.h" -#include "migc.h" -#include - -#include "PclSFonts.h" - -static PclFontHead8Ptr makeFontHeader8 (FontPtr, PclSoftFontInfoPtr); -static PclFontHead16Ptr makeFontHeader16(FontPtr, PclSoftFontInfoPtr); -static PclInternalFontPtr makeInternalFont(FontPtr, PclSoftFontInfoPtr); -static void fillFontDescData(FontPtr, PclFontDescPtr, unsigned int); -static PclCharDataPtr fillCharDescData(PclCharDataPtr, CharInfoPtr); -static void output_text(FILE *, PclContextPrivPtr, unsigned char); -static char * getFontName(FontPtr); -static char isInternal(FontPtr); -static void selectInternalFont(FILE *, PclInternalFontPtr, int); -static void selectSize(FILE *, PclContextPrivPtr, PclInternalFontPtr); -static char t[80]; - -#ifdef DO_TWO_BYTE_PCL -static void code_conv(PclSoftFontInfoPtr, FontPtr, char *, char *); -#endif /* DO_TWO_BYTE_PCL */ - -#define ESC 0x1b -#define PER 0x25 -#define ETX 0x3 -#define ETX_ALT 0x2a -#define DOWNLOAD_FONT 0 -#define INTERNAL_FONT 1 - -int -PclPolyText8( - DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - int count, - char *string) -{ -XpContextPtr pCon; -PclContextPrivPtr pConPriv; -unsigned long n, i; -int w; -CharInfoPtr charinfo[255], *chinfo; - -FILE *outFile; -PclSoftFontInfoPtr pSoftFontInfo; -PclFontHead8Ptr pfh8 = (PclFontHead8Ptr)NULL; -PclInternalFontPtr pin = (PclInternalFontPtr)NULL; -PclCharDataRec cd; -unsigned char *p; -unsigned char last_fid; -int max_ascent, max_descent; - -int nbox; -BoxPtr pbox; -BoxRec box; -RegionPtr drawRegion, region; -char font_type; - - if( PclUpdateDrawableGC( pGC, pDrawable, &outFile ) == FALSE ) - return x; - - GetGlyphs(pGC->font, (unsigned long)count, (unsigned char *)string, - Linear8Bit, &n, charinfo); - if ( n == 0 ) - return x; - - pCon = PclGetContextFromWindow( (WindowPtr)pDrawable ); - pConPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - pSoftFontInfo = pConPriv->pSoftFontInfo; - font_type = isInternal(pGC->font); - if ( font_type == DOWNLOAD_FONT ) { - /* - * Create Soft Font Header Information - */ - pfh8 = makeFontHeader8(pGC->font, pSoftFontInfo); - if (!pfh8) - return x; - - /* - * exec Soft Font Downloading - */ - p = (unsigned char *)string; - for (i=0, chinfo=charinfo; iindex[*p] ) { - fillCharDescData(&cd, *chinfo); - PclDownloadSoftFont8(pConPriv->pJobFile, pSoftFontInfo, - pfh8, &cd, p); - xfree(cd.raster_top); - } - } - - /* - * print characters - */ - MACRO_START( outFile, pConPriv ); - sprintf(t, "\033%%0B;PU%d,%dPD;TD1;DT%c,1;", - x + pDrawable->x, y + pDrawable->y + pGC->font->info.fontAscent, - ETX); - SAVE_PCL( outFile, pConPriv, t ); - SAVE_PCL_COUNT( outFile, pConPriv, "FI0;SS;LB", 9 ); - - last_fid = 0; - w = 0; - max_ascent = charinfo[0]->metrics.ascent; - max_descent = charinfo[0]->metrics.descent; - p = (unsigned char *)string; - for (i=0, chinfo=charinfo; ifid ) { - sprintf(t, "%c;FI%d;SS;LB", ETX, pfh8->fid); - SAVE_PCL( outFile, pConPriv, t ); - - last_fid = pfh8->fid; - } - - output_text(outFile, pConPriv, pfh8->index[*p]); - - w += (*chinfo)->metrics.characterWidth; - max_ascent = MAX(max_ascent, (*chinfo)->metrics.ascent); - max_descent = MAX(max_descent, (*chinfo)->metrics.descent); - } - - sprintf(t, "%c", ETX); - SAVE_PCL_COUNT( outFile, pConPriv, t, 1 ); - sprintf(t, "TD0;\033%%1A"); - SAVE_PCL( outFile, pConPriv, t ); - MACRO_END( outFile ); - - } else { - int fid = 0; - - pin = makeInternalFont(pGC->font, pSoftFontInfo); - if (!pin) - return x; - - selectInternalFont(outFile, pin, fid); - - /* - * print characters - */ - MACRO_START( outFile, pConPriv ); - sprintf(t, "\033%%0B;PU%d,%dPD;TD1;DT%c,1;", - x + pDrawable->x, y + pDrawable->y + pGC->font->info.fontAscent, - ETX); - SAVE_PCL( outFile, pConPriv, t ); - selectSize(outFile, pConPriv, pin); - SAVE_PCL_COUNT( outFile, pConPriv, "FI0;SS;LB", 9 ); - - w = 0; - max_ascent = charinfo[0]->metrics.ascent; - max_descent = charinfo[0]->metrics.descent; - p = (unsigned char *)string; - for (i=0, chinfo=charinfo; imetrics.characterWidth; - max_ascent = MAX(max_ascent, (*chinfo)->metrics.ascent); - max_descent = MAX(max_descent, (*chinfo)->metrics.descent); - } - sprintf(t, "%c", ETX); - SAVE_PCL_COUNT( outFile, pConPriv, t, 1 ); - sprintf(t, "TD0;\033%%1A"); - SAVE_PCL( outFile, pConPriv, t ); - MACRO_END( outFile ); - } - - /* - * Convert the collection of rectangles into a proper region, then - * intersect it with the clip region. - */ - box.x1 = x + pDrawable->x; - box.y1 = y - max_ascent + pDrawable->y + pGC->font->info.fontAscent; - box.x2 = x + w + pDrawable->x; - box.y2 = y + max_descent + pDrawable->y + pGC->font->info.fontAscent; - - drawRegion = miRegionCreate( &box, 0 ); - region = miRegionCreate( NULL, 0 ); - miIntersect( region, drawRegion, pGC->pCompositeClip ); - - /* - * For each rectangle in the clip region, set the HP-GL/2 "input - * window" and render the entire polyline to it. - */ - pbox = REGION_RECTS( region ); - nbox = REGION_NUM_RECTS( region ); - - PclSendData(outFile, pConPriv, pbox, nbox, 1.0); - - /* - * Clean up the temporary regions - */ - REGION_DESTROY( pGC->pScreen, drawRegion ); - REGION_DESTROY( pGC->pScreen, region ); - - return x+w; -} - -int -PclPolyText16( - DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - int count, - unsigned short *string) -{ -XpContextPtr pCon; -PclContextPrivPtr pConPriv; -unsigned long n, i; -int w; -CharInfoPtr charinfo[255], *chinfo; - -FILE *outFile; -PclSoftFontInfoPtr pSoftFontInfo; -PclFontHead16Ptr pfh16 = (PclFontHead16Ptr)NULL; -PclCharDataRec cd; -FontInfoPtr pfi; -unsigned char row, col; -char *p; -unsigned char last_fid; -int max_ascent, max_descent; -unsigned short def; - -int nbox; -BoxPtr pbox; -BoxRec box; -RegionPtr drawRegion, region; -char font_type; - - if( PclUpdateDrawableGC( pGC, pDrawable, &outFile ) == FALSE ) - return x; - - GetGlyphs(pGC->font, (unsigned long)count, (unsigned char *)string, - (FONTLASTROW(pGC->font) == 0) ? Linear16Bit : TwoD16Bit, - &n, charinfo); - - pCon = PclGetContextFromWindow( (WindowPtr)pDrawable ); - pConPriv = (PclContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PclContextPrivateKey); - pSoftFontInfo = pConPriv->pSoftFontInfo; - - font_type = isInternal(pGC->font); - if ( font_type == DOWNLOAD_FONT ) { - /* - * Create Soft Font Header Information - */ - pfh16 = makeFontHeader16(pGC->font, pSoftFontInfo); - if (!pfh16) - return x; - - /* - * exec Soft Font Downloading - */ - pfi = (FontInfoRec *)&pGC->font->info; - p = (char *)string; - for (i=0, p=(char *)string, chinfo=charinfo; ifirstRow <= row) && (row <= pfi->lastRow) - && (pfi->firstCol <= col) && (col <= pfi->lastCol) ) { - row = row - pfi->firstRow; - col = col - pfi->firstCol; - } else { - def = pfi->defaultCh; - row = ((def>>8)&0xff) - pfi->firstRow; - col = (def&0xff) - pfi->firstCol; - } - if ( !pfh16->index[row][col].fid ) { - fillCharDescData(&cd, *chinfo); - PclDownloadSoftFont16(pConPriv->pJobFile, pSoftFontInfo, - pfh16, &cd, row, col); - xfree(cd.raster_top); - } - } - - /* - * print characters - */ - MACRO_START( outFile, pConPriv ); - sprintf(t, "\033%%0B;PU%d,%dPD;TD1;DT%c,1;", - x + pDrawable->x, y + pDrawable->y + pGC->font->info.fontAscent, - ETX); - SAVE_PCL( outFile, pConPriv, t ); - SAVE_PCL_COUNT( outFile, pConPriv, "FI0;SS;LB", 9 ); - - last_fid = 0; - - w = 0; - max_ascent = charinfo[0]->metrics.ascent; - max_descent = charinfo[0]->metrics.descent; - for (i=0, p=(char *)string, chinfo=charinfo; ifirstRow <= row) && (row <= pfi->lastRow) - && (pfi->firstCol <= col) && (col <= pfi->lastCol) ) { - row = row - pfi->firstRow; - col = col - pfi->firstCol; - } else { - def = pfi->defaultCh; - row = ((def>>8)&0xff) - pfi->firstRow; - col = (def&0xff) - pfi->firstCol; - } - if ( last_fid != pfh16->index[row][col].fid ) { - sprintf(t, "%cFI%d;SS;LB", - ETX, pfh16->index[row][col].fid); - SAVE_PCL( outFile, pConPriv, t ); - last_fid = pfh16->index[row][col].fid; - } - - output_text(outFile, pConPriv, pfh16->index[row][col].cindex); - - w += (*chinfo)->metrics.characterWidth; - max_ascent = MAX(max_ascent, (*chinfo)->metrics.ascent); - max_descent = MAX(max_descent, (*chinfo)->metrics.descent); - } - sprintf(t, "%c", ETX); - SAVE_PCL_COUNT( outFile, pConPriv, t, 1 ); - sprintf(t, "TD0;\033%%1A"); - SAVE_PCL( outFile, pConPriv, t ); - MACRO_END( outFile ); - - } else { -#ifdef DO_TWO_BYTE_PCL - PclInternalFontPtr pin; - int fid = 0; - - pin = makeInternalFont(pGC->font, pSoftFontInfo); - if (!pin) - return x; - - selectInternalFont(outFile, pin, fid); - fprintf(outFile, "%c&t31P", ESC); - - /* - * print characters - */ - MACRO_START( outFile, pConPriv ); - sprintf(t, "\033%%0B;PU%d,%dPD;TD1;DT%c,1;", - x + pDrawable->x, y + pDrawable->y + pGC->font->info.fontAscent, - ETX); - SAVE_PCL( outFile, pConPriv, t ); - sprintf(t, "TD0;\033%%1A"); - SAVE_PCL( outFile, pConPriv, t ); - - w = 0; - last_fid = 0; - max_ascent = charinfo[0]->metrics.ascent; - max_descent = charinfo[0]->metrics.descent; - for (i=0, p=(char *)string, chinfo=charinfo; ifont, (char *)p, tobuf); - fprintf(outFile, "%c%c", tobuf[0], tobuf[1]); - - w += (*chinfo)->metrics.characterWidth; - max_ascent = MAX(max_ascent, (*chinfo)->metrics.ascent); - max_descent = MAX(max_descent, (*chinfo)->metrics.descent); - } - MACRO_END( outFile ); -#else - return x; -#endif /* DO_TWO_BYTE_PCL */ - } - - /* - * Convert the collection of rectangles into a proper region, then - * intersect it with the clip region. - */ - box.x1 = x + pDrawable->x; - box.y1 = y - max_ascent + pDrawable->y + pGC->font->info.fontAscent; - box.x2 = x + w + pDrawable->x; - box.y2 = y + max_descent + pDrawable->y + pGC->font->info.fontAscent; - - drawRegion = miRegionCreate( &box, 0 ); - region = miRegionCreate( NULL, 0 ); - miIntersect( region, drawRegion, pGC->pCompositeClip ); - - /* - * For each rectangle in the clip region, set the HP-GL/2 "input - * window" and render the entire polyline to it. - */ - pbox = REGION_RECTS( region ); - nbox = REGION_NUM_RECTS( region ); - - PclSendData(outFile, pConPriv, pbox, nbox, 1.0); - - /* - * Clean up the temporary regions - */ - REGION_DESTROY( pGC->pScreen, drawRegion ); - REGION_DESTROY( pGC->pScreen, region ); - - return x+w; -} - -void -PclImageText8( - DrawablePtr pDrawable, - GCPtr pGC, - int x, int y, - int count, - char *string) -{ -} - -void -PclImageText16( - DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - int count, - unsigned short *string) -{ -} - -void -PclImageGlyphBlt( - DrawablePtr pDrawable, - GCPtr pGC, - int x, int y, - unsigned int nGlyphs, - CharInfoPtr *pCharInfo, - pointer pGlyphBase) -{ -} - -void -PclPolyGlyphBlt( - DrawablePtr pDrawable, - GCPtr pGC, - int x, int y, - unsigned int nGlyphs, - CharInfoPtr *pCharInfo, - pointer pGlyphBase) -{ -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -static PclFontHead8Ptr -makeFontHeader8(FontPtr pfont, PclSoftFontInfoPtr pSoftFontInfo) -{ -PclFontHead8Ptr phead8 = pSoftFontInfo->phead8; -PclFontHead8Ptr pfh8 = phead8; -PclFontHead8Ptr prev = (PclFontHead8Ptr)NULL; -FontInfoPtr pfi; -char *fontname; -unsigned char nindex; -int i; -unsigned long n; -CharInfoPtr charinfo[1]; -unsigned int space_width; - - if (pSoftFontInfo == (PclSoftFontInfoPtr) NULL) - return (PclFontHead8Ptr)NULL; - - /* - * Verify it has already been created, if so, return it. - */ - if ( (fontname = getFontName(pfont)) == (char *)NULL) - return (PclFontHead8Ptr)NULL; - - while (pfh8 != (PclFontHead8Ptr) NULL) { - if (!strcmp(pfh8->fontname, fontname)) - return pfh8; - prev = pfh8; - pfh8 = pfh8->next; - } - - /* - * Create Font Header Information - */ - pfh8 = (PclFontHead8Ptr)xalloc(sizeof(PclFontHead8Rec)); - if (pfh8 == (PclFontHead8Ptr)NULL) - return (PclFontHead8Ptr)NULL; - - pfi = (FontInfoRec *)&pfont->info; - GetGlyphs(pfont, 1, (unsigned char *)&pfi->defaultCh, - Linear8Bit, &n, charinfo); - if ( n ) - space_width = charinfo[0]->metrics.characterWidth; - else - space_width = FONTMAXBOUNDS(pfont,characterWidth); - - fillFontDescData(pfont, &(pfh8->fd), space_width); - pfh8->fid = 0; - pfh8->fontname = (char *)xalloc(strlen(fontname) + 1); - if (pfh8->fontname == (char *)NULL) { - xfree(pfh8); - return (PclFontHead8Ptr) NULL; - } - strcpy(pfh8->fontname, fontname); - - nindex = 0xff; - pfh8->index = (unsigned char *)xalloc(nindex); - if ( pfh8->index == (unsigned char *) NULL ) { - xfree(pfh8->fontname); - xfree(pfh8); - return (PclFontHead8Ptr) NULL; - } - - for (i=0; i<=nindex; i++) - pfh8->index[i] = 0x0; - - pfh8->next = (PclFontHead8Ptr)NULL; - - if ( prev == (PclFontHead8Ptr) NULL) - pSoftFontInfo->phead8 = pfh8; - else - prev->next = pfh8; - - return pfh8; -} - -static PclFontHead16Ptr -makeFontHeader16(FontPtr pfont, PclSoftFontInfoPtr pSoftFontInfo) -{ -PclFontHead16Ptr phead16 = pSoftFontInfo->phead16; -PclFontHead16Ptr pfh16 = phead16; -PclFontHead16Ptr prev = (PclFontHead16Ptr)NULL; -PclFontMapRec ** index; -FontInfoPtr pfi; -char *fontname; -unsigned char nindex_row, nindex_col; -int i, j; -unsigned long n; -CharInfoPtr charinfo[1]; -unsigned int space_width; - - if (pSoftFontInfo == (PclSoftFontInfoPtr) NULL) - return (PclFontHead16Ptr)NULL; - - /* - * Verify it has already been created, if so, return it. - */ - if ( (fontname = getFontName(pfont)) == (char *)NULL) - return (PclFontHead16Ptr)NULL; - - while (pfh16 != (PclFontHead16Ptr) NULL) { - if (!strcmp(pfh16->fontname, fontname)) - return pfh16; - prev = pfh16; - pfh16 = pfh16->next; - } - - /* - * Create Font Header Information - */ - pfh16 = (PclFontHead16Ptr)xalloc(sizeof(PclFontHead16Rec)); - if (pfh16 == (PclFontHead16Ptr)NULL) - return (PclFontHead16Ptr)NULL; - - pfi = (FontInfoRec *)&pfont->info; - GetGlyphs(pfont, 1, (unsigned char *)&pfi->defaultCh, - (FONTLASTROW(pfont) == 0) ? Linear16Bit : TwoD16Bit, - &n, charinfo); - - if ( n ) - space_width = charinfo[0]->metrics.characterWidth; - else - space_width = FONTMAXBOUNDS(pfont,characterWidth); - - fillFontDescData(pfont, &(pfh16->fd), space_width); - pfh16->cur_fid = 0; - pfh16->cur_cindex = 0; - pfh16->fontname = (char *)xalloc(strlen(fontname) + 1); - if (pfh16->fontname == (char *)NULL) { - xfree(pfh16); - return (PclFontHead16Ptr) NULL; - } - strcpy(pfh16->fontname, fontname); - - pfi = (FontInfoRec *)&pfont->info; - nindex_col = pfi->lastCol - pfi->firstCol + 1; - nindex_row = pfi->lastRow - pfi->firstRow + 1; - index = (PclFontMapRec **)xalloc(sizeof(PclFontMapRec *)*nindex_row); - if (index == (PclFontMapRec **)NULL) { - xfree(pfh16->fontname); - xfree(pfh16); - return (PclFontHead16Ptr) NULL; - } - for (i=0; ifontname); - xfree(pfh16); - return (PclFontHead16Ptr) NULL; - } - for (j=0; j<=nindex_col; j++) - index[i][j].fid = 0x0; - } - - pfh16->index = index; - pfh16->firstCol = pfi->firstCol; - pfh16->lastCol = pfi->lastCol; - pfh16->firstRow = pfi->firstRow; - pfh16->lastRow = pfi->lastRow; - pfh16->next = (PclFontHead16Ptr)NULL; - - if ( prev == (PclFontHead16Ptr) NULL) - pSoftFontInfo->phead16 = pfh16; - else - prev->next = pfh16; - - return pfh16; -} - -static PclInternalFontPtr -makeInternalFont(FontPtr pfont, PclSoftFontInfoPtr pSoftFontInfo) -{ -PclInternalFontPtr pinfont = pSoftFontInfo->pinfont; -PclInternalFontPtr pin = pinfont; -PclInternalFontPtr prev = (PclInternalFontPtr)NULL; -FontPropPtr props; -FontInfoPtr pfi; -char *fontname; -Atom xa_pcl_font_name, xa_res, xa_ave_width, xa_spacing; -int width = 1; -int mask; -int i; - - if (pSoftFontInfo == (PclSoftFontInfoPtr) NULL) - return (PclInternalFontPtr)NULL; - - /* - * Verify it has already been created, if so, return it. - */ - if ( (fontname = getFontName(pfont)) == (char *)NULL) - return (PclInternalFontPtr)NULL; - - while (pin != (PclInternalFontPtr) NULL) { - if (!strcmp(pin->fontname, fontname)) - return pin; - prev = pin; - pin = pin->next; - } - - /* - * Create Internal Font Information - */ - pin = (PclInternalFontPtr)xalloc(sizeof(PclInternalFontRec)); - if (pin == (PclInternalFontPtr)NULL) - return (PclInternalFontPtr)NULL; - - pin->fontname = (char *)xalloc(strlen(fontname) + 1); - if (pin->fontname == (char *)NULL) { - xfree(pin); - return (PclInternalFontPtr) NULL; - } - strcpy(pin->fontname, fontname); - - xa_pcl_font_name = MakeAtom("PCL_FONT_NAME", strlen("PCL_FONT_NAME"), TRUE); - xa_res = MakeAtom("RESOLUTION_X", strlen("RESOLUTION_X"), TRUE); - xa_ave_width = MakeAtom("AVERAGE_WIDTH", strlen("AVERAGE_WIDTH"), TRUE); - xa_spacing = MakeAtom("SPACING", strlen("SPACING"), TRUE); - pfi = (FontInfoRec *)&pfont->info; - props = pfi->props; - - mask = 0; - for (i=0; inprops; i++, props++) { - if ( (Atom) props->name == xa_pcl_font_name ) { - pin->pcl_font_name = NameForAtom(props->value); - mask |= 0x1; - } else if ( props->name == XA_POINT_SIZE ) { - pin->height = (float) props->value / 10.0; - mask |= 0x2; - } else if ( (Atom) props->name == xa_res ) { - mask |= 0x4; - } else if ( (Atom) props->name == xa_ave_width ) { - width = (int) props->value / 10; - mask |= 0x8; - } else if ( (Atom) props->name == xa_spacing ) { - pin->spacing = NameForAtom(props->value); - mask |= 0x10; - } - } - if ( mask != 0x1f ) { - xfree(pin->fontname); - xfree(pin); - return (PclInternalFontPtr) NULL; - } - - if ( *pin->spacing != 'P' || *pin->spacing != 'p' ) { - if (width == 0) - width = 1; - pin->pitch = (float) 300.0 / width; /* Hard-Code: Resolution is 300 */ - } - - pin->next = (PclInternalFontPtr)NULL; - if ( prev == (PclInternalFontPtr) NULL) - pSoftFontInfo->pinfont = pin; - else - prev->next = pin; - - return pin; -} - -static void -fillFontDescData(FontPtr pfont, PclFontDescPtr pfd, unsigned int space) -{ -FontInfoPtr pfi; - - pfi = (FontInfoRec *)&pfont->info; - - if ( (pfi->maxbounds.leftSideBearing == pfi->minbounds.leftSideBearing) - && (pfi->maxbounds.rightSideBearing == pfi->minbounds.rightSideBearing) - && (pfi->maxbounds.characterWidth == pfi->minbounds.characterWidth) - && (pfi->maxbounds.ascent == pfi->minbounds.ascent) - && (pfi->maxbounds.descent == pfi->minbounds.descent) - ) - pfd->spacing = MONOSPACE; - else - pfd->spacing = PROPSPACE; - - pfd->pitch = space; - pfd->cellheight = FONTMAXBOUNDS(pfont,ascent) - + FONTMAXBOUNDS(pfont,descent); - pfd->cellwidth = FONTMAXBOUNDS(pfont,rightSideBearing) - - FONTMINBOUNDS(pfont,leftSideBearing); - pfd->ascent = FONTMAXBOUNDS(pfont,ascent); /*FONTASCENT(pfont);*/ - pfd->descent = FONTMAXBOUNDS(pfont,descent); /*FONTDESCENT(pfont);*/ -} - -static PclCharDataPtr -fillCharDescData(PclCharDataPtr pcd, CharInfoPtr pci) -{ -unsigned int byte_width; -unsigned char *p; -register int nbyGlyphWidth; -unsigned char *pglyph, *pg; -unsigned int i, j; - - pcd->h_offset = pci->metrics.leftSideBearing; - pcd->v_offset = pci->metrics.ascent; - pcd->width = pci->metrics.rightSideBearing - - pci->metrics.leftSideBearing; - pcd->height = pci->metrics.ascent + pci->metrics.descent; - pcd->font_pitch = pci->metrics.characterWidth; - - byte_width = (pcd->width + 7)/8; - pcd->raster_top = (unsigned char *)xalloc(byte_width * pcd->height); - if (pcd->raster_top == (unsigned char *)NULL) - return (PclCharDataPtr)NULL; - - p = pcd->raster_top; - nbyGlyphWidth = GLYPHWIDTHBYTESPADDED(pci); - pglyph = FONTGLYPHBITS(pglyphBase, pci); - for (i=0; iheight; i++) { - pg = pglyph + nbyGlyphWidth * i; - for (j=0; jinfo; - props = pfi->props; - fontname = (char *) NULL; - for (i=0; inprops; i++, props++) { - if ( props->name == XA_FONT ) { - fontname = (char *)NameForAtom(props->value); - break; - } - } - return fontname; -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* Internal Font Selection */ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -static char -isInternal(FontPtr pfont) -{ -int i; -FontInfoPtr pfi; -FontPropPtr props; -Atom dest; - - dest = MakeAtom("PRINTER_RESIDENT_FONT", strlen("PRINTER_RESIDENT_FONT"), TRUE); - - pfi = (FontInfoRec *)&pfont->info; - props = pfi->props; - for (i=0; inprops; i++, props++) { - if ( (Atom) props->name == dest && props->value == 2 ) - return INTERNAL_FONT; - } - return DOWNLOAD_FONT; -} - -static void -selectInternalFont(FILE *outFile, PclInternalFontPtr pin, int fid) -{ - fprintf(outFile, "%c*c%dD", ESC, fid); - if ( *pin->spacing == 'P' || *pin->spacing == 'p' ) - fprintf(outFile, pin->pcl_font_name, pin->height); - else - fprintf(outFile, pin->pcl_font_name, pin->pitch); - fprintf(outFile, "%c*c6F", ESC); -} - -static void -selectSize(FILE *outFile, - PclContextPrivPtr pConPriv, - PclInternalFontPtr pin) -{ - if ( *pin->spacing == 'P' || *pin->spacing == 'p' ) { - sprintf(t, "SD4,%f;", pin->height); - SAVE_PCL( outFile, pConPriv, t ); - } else { - sprintf(t, "SD3,%f;", pin->pitch); - SAVE_PCL( outFile, pConPriv, t ); - } - return; -} - -#ifdef DO_TWO_BYTE_PCL -static void -code_conv( - PclSoftFontInfoPtr pSoftFontInfo, - FontPtr pfont, - char *from, - char *to -) -{ -iconv_t cd; -char frombuf[9], *fromptr; -size_t inbyte = 5, outbyte=2; - - fromptr = frombuf; - frombuf[0] = 0x1b; /* Esc */ - frombuf[1] = 0x24; /* $ */ - frombuf[2] = 0x42; /* B */ - frombuf[3] = *from; - frombuf[4] = *(from+1); - frombuf[5] = 0x1b; /* Esc */ - frombuf[6] = 0x28; /* ( */ - frombuf[7] = 0x4a; /* J */ - frombuf[8] = 0x0; - if ((cd = iconv_open("sjis", "jis")) == (iconv_t)(-1)) { - *to = (unsigned char)NULL; - return; - } - - if ( iconv(cd, &fromptr, &inbyte, &to, &outbyte) == -1 ) - *to = (unsigned char)NULL; - - iconv_close(cd); - return; -} -#endif /* DO_TWO_BYTE_PCL */ diff --git a/hw/xprint/pcl/PclWindow.c b/hw/xprint/pcl/PclWindow.c deleted file mode 100644 index 950933e49..000000000 --- a/hw/xprint/pcl/PclWindow.c +++ /dev/null @@ -1,209 +0,0 @@ -/******************************************************************* -** -** ********************************************************* -** * -** * File: PclWindow.c -** * -** * Contents: -** * Window code for Pcl driver. -** * -** * Created: 2/02/95 -** * -** ********************************************************* -** -********************************************************************/ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include - -#include "mistruct.h" -#include "regionstr.h" -#include "windowstr.h" -#include "gcstruct.h" - -#include "Pcl.h" - -#if 0 -/* - * The following list of strings defines the properties which will be - * placed on the screen's root window if the property was defined in - * the start-up configuration resource database. - */ -static /* const */ char *propStrings[] = { - DT_PRINT_JOB_HEADER, - DT_PRINT_JOB_TRAILER, - DT_PRINT_JOB_COMMAND, /* old-obsolete */ - DT_PRINT_JOB_EXEC_COMMAND, - DT_PRINT_JOB_EXEC_OPTIONS, - DT_PRINT_PAGE_HEADER, - DT_PRINT_PAGE_TRAILER, - DT_PRINT_PAGE_COMMAND, - (char *)NULL -}; -#endif - -/* - * PclCreateWindow - watch for the creation of the root window. - * When it's created, register the screen with the print extension, - * and put the default command/header properties on it. - */ -/*ARGSUSED*/ - -Bool -PclCreateWindow( - register WindowPtr pWin) -{ - PclWindowPrivPtr pPriv; - -#if 0 - Bool status = Success; - ScreenPtr pScreen = pWin->drawable.pScreen; - PclScreenPrivPtr pScreenPriv = (PclScreenPrivPtr) - dixLookupPrivate(&pScreen->devPrivates, PclScreenPrivateKey); - PclWindowPrivPtr pWinPriv = (PclWindowPrivPtr) - dixLookupPrivate(&pWin->devPrivates, PclWindowPrivateKey); - - /* - * Initialize this window's private struct. - */ - pWinPriv->jobFileName = (char *)NULL; - pWinPriv->pJobFile = (FILE *)NULL; - pWinPriv->pageFileName = (char *)NULL; - pWinPriv->pPageFile = (FILE *)NULL; - - if(pWin->parent == (WindowPtr)NULL) /* root window? */ - { - Atom propName; /* type = XA_STRING */ - char *propVal; - int i; - XrmDatabase rmdb = pScreenPriv->resDB; - - /* - * Put the defaults spec'd in the config files in properties on this - * screen's root window. - */ - for(i = 0; propStrings[i] != (char *)NULL; i++) - { - if((propVal = _DtPrintGetPrinterResource(pWin, rmdb, - propStrings[i])) != - (char *)NULL) - { - propName = MakeAtom(propStrings[i], strlen(propStrings[i]), - TRUE); - dixChangeWindowProperty(serverClient, pWin, propName, XA_STRING, - 8, PropModeReplace, strlen(propVal), - (pointer)propVal, FALSE); - xfree(propVal); - } - } - } - - return status; -#endif - - /* - * Invalidate the window's private print context. - */ - pPriv = (PclWindowPrivPtr) - dixLookupPrivate(&pWin->devPrivates, PclWindowPrivateKey); - pPriv->validContext = 0; - - return TRUE; -} - - -/*ARGSUSED*/ -Bool PclMapWindow( - WindowPtr pWindow) -{ - return TRUE; -} - -/*ARGSUSED*/ -Bool -PclPositionWindow( - register WindowPtr pWin, - int x, - int y) -{ - return TRUE; -} - -/*ARGSUSED*/ -Bool -PclUnmapWindow( - WindowPtr pWindow) -{ - return TRUE; -} - -/*ARGSUSED*/ -void -PclCopyWindow( - WindowPtr pWin, - DDXPointRec ptOldOrg, - RegionPtr prgnSrc) -{ -} - -/*ARGSUSED*/ -Bool -PclChangeWindowAttributes( - register WindowPtr pWin, - register unsigned long mask) -{ - if( pWin->backingStore != NotUseful ) - { - pWin->backingStore = NotUseful; - mask |= CWBackingStore; - } - - return TRUE; -} - -/*ARGSUSED*/ -Bool -PclDestroyWindow( - WindowPtr pWin) -{ - return TRUE; -} - diff --git a/hw/xprint/pcl/Pclmap.h b/hw/xprint/pcl/Pclmap.h deleted file mode 100644 index 18ac31d90..000000000 --- a/hw/xprint/pcl/Pclmap.h +++ /dev/null @@ -1,210 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#ifndef _PCLMAP_H_ -#define _PCLMAP_H_ - -#ifdef XP_PCL_COLOR -#ifdef CATNAME -#undef CATNAME -#endif -#if !defined(UNIXCPP) || defined(ANSICPP) -#define PCLNAME(subname) PclCr##subname -#define CATNAME(prefix,subname) prefix##Color##subname -#else -#define PCLNAME(subname) PclCr/**/subname -#define CATNAME(prefix,subname) prefix/**/Color/**/subname -#endif -#endif /* XP_PCL_COLOR */ - -#ifdef XP_PCL_MONO -#ifdef CATNAME -#undef CATNAME -#endif -#if !defined(UNIXCPP) || defined(ANSICPP) -#define PCLNAME(subname) PclMn##subname -#define CATNAME(prefix,subname) prefix##Mono##subname -#else -#define PCLNAME(subname) PclMn/**/subname -#define CATNAME(prefix,subname) prefix/**/Mono/**/subname -#endif -#endif /* XP_PCL_MONO */ - -#ifdef XP_PCL_LJ3 -#ifdef CATNAME -#undef CATNAME -#endif -#if !defined(UNIXCPP) || defined(ANSICPP) -#define PCLNAME(subname) PclLj3##subname -#define CATNAME(prefix,subname) prefix##Lj3##subname -#else -#define PCLNAME(subname) PclLj3/**/subname -#define CATNAME(prefix,subname) prefix/**/Lj3/**/subname -#endif -#endif /* XP_PCL_LJ3 */ - -#ifdef PCLNAME - -/* PclInit.c */ -#define InitializePclDriver CATNAME(Initialize, PclDriver) -#define PclCloseScreen PCLNAME(CloseScreen) -#define PclGetContextFromWindow PCLNAME(GetContextFromWindow) -#define PclScreenPrivateKey PCLNAME(ScreenPrivateKey) -#define PclWindowPrivateKey PCLNAME(WindowPrivateKey) -#define PclContextPrivateKey PCLNAME(ContextPrivateKey) -#define PclPixmapPrivateKey PCLNAME(PixmapPrivateKey) -#define PclGCPrivateKey PCLNAME(GCPrivateKey) - -/* PclPrint.c */ -#define PclStartJob PCLNAME(StartJob) -#define PclEndJob PCLNAME(EndJob) -#define PclStartPage PCLNAME(StartPage) -#define PclEndPage PCLNAME(EndPage) -#define PclStartDoc PCLNAME(StartDoc) -#define PclEndDoc PCLNAME(EndDoc) -#define PclDocumentData PCLNAME(DocumentData) -#define PclGetDocumentData PCLNAME(GetDocumentData) - -/* PclWindow.c */ -#define PclCreateWindow PCLNAME(CreateWindow) -#define PclMapWindow PCLNAME(MapWindow) -#define PclPositionWindow PCLNAME(PositionWindow) -#define PclUnmapWindow PCLNAME(UnmapWindow) -#define PclCopyWindow PCLNAME(CopyWindow) -#define PclChangeWindowAttributes PCLNAME(ChangeWindowAttributes) -#define PclDestroyWindow PCLNAME(DestroyWindow) - -/* PclGC.c */ -#define PclCreateGC PCLNAME(CreateGC) -#define PclDestroyGC PCLNAME(DestroyGC) -#define PclGetDrawablePrivateStuff PCLNAME(GetDrawablePrivateStuff) -#define PclSetDrawablePrivateGC PCLNAME(SetDrawablePrivateGC) -#define PclSendPattern PCLNAME(SendPattern) -#define PclUpdateDrawableGC PCLNAME(UpdateDrawableGC) -#define PclComputeCompositeClip PCLNAME(ComputeCompositeClip) -#define PclValidateGC PCLNAME(ValidateGC) - -/* PclAttr.c */ -#define PclGetAttributes PCLNAME(GetAttributes) -#define PclGetOneAttribute PCLNAME(GetOneAttribute) -#define PclAugmentAttributes PCLNAME(AugmentAttributes) -#define PclSetAttributes PCLNAME(SetAttributes) - -/* PclColor.c */ -#define PclLookUp PCLNAME(LookUp) -#define PclCreateDefColormap PCLNAME(CreateDefColormap) -#define PclCreateColormap PCLNAME(CreateColormap) -#define PclDestroyColormap PCLNAME(DestroyColormap) -#define PclInstallColormap PCLNAME(InstallColormap) -#define PclUninstallColormap PCLNAME(UninstallColormap) -#define PclListInstalledColormaps PCLNAME(ListInstalledColormaps) -#define PclStoreColors PCLNAME(StoreColors) -#define PclResolveColor PCLNAME(ResolveColor) -#define PclFindPaletteMap PCLNAME(FindPaletteMap) -#define PclUpdateColormap PCLNAME(UpdateColormap) -#define PclReadMap PCLNAME(ReadMap) - -/* PclPixmap.c */ -#define PclCreatePixmap PCLNAME(CreatePixmap) -#define PclDestroyPixmap PCLNAME(DestroyPixmap) - -/* PclArc.c */ -#define PclDoArc PCLNAME(DoArc) -#define PclPolyArc PCLNAME(PolyArc) -#define PclPolyFillArc PCLNAME(PolyFillArc) - -/* PclArea.c */ -#define PclPutImage PCLNAME(PutImage) -#define PclCopyArea PCLNAME(CopyArea) -#define PclCopyPlane PCLNAME(CopyPlane) - -/* PclLine */ -#define PclPolyLine PCLNAME(PolyLine) -#define PclPolySegment PCLNAME(PolySegment) - -/* PclPixel.c */ -#define PclPolyPoint PCLNAME(PolyPoint) -#define PclPushPixels PCLNAME(PushPixels) - -/* PclPolygon.c */ -#define PclPolyRectangle PCLNAME(PolyRectangle) -#define PclFillPolygon PCLNAME(FillPolygon) -#define PclPolyFillRect PCLNAME(PolyFillRect) - -/* PclSpans.c */ -#define PclFillSpans PCLNAME(FillSpans) -#define PclSetSpans PCLNAME(SetSpans) - -/* PclText.c */ -#define PclPolyText8 PCLNAME(PolyText8) -#define PclPolyText16 PCLNAME(PolyText16) -#define PclImageText8 PCLNAME(ImageText8) -#define PclImageText16 PCLNAME(ImageText16) -#define PclImageGlyphBlt PCLNAME(ImageGlyphBlt) -#define PclPolyGlyphBlt PCLNAME(PolyGlyphBlt) -#define PclPolyGlyphBlt PCLNAME(PolyGlyphBlt) - -/* PclFonts.c */ -#define PclRealizeFont PCLNAME(RealizeFont) -#define PclUnrealizeFont PCLNAME(UnrealizeFont) - -/* PclSFonts.c */ -#define PclDownloadSoftFont8 PCLNAME(DownloadSoftFont8) -#define PclDownloadSoftFont16 PCLNAME(DownloadSoftFont16) -#define PclCreateSoftFontInfo PCLNAME(CreateSoftFontInfo) -#define PclDestroySoftFontInfo PCLNAME(DestroySoftFontInfo) - -/* PclMisc.c */ -#define PclQueryBestSize PCLNAME(QueryBestSize) -#define GetPropString PCLNAME(GetPropString) -#define SystemCmd PCLNAME(SystemCmd) -#define PclGetMediumDimensions PCLNAME(GetMediumDimensions) -#define PclGetReproducibleArea PCLNAME(GetReproducibleArea) -#define PclSpoolFigs PCLNAME(SpoolFigs) -#define PclSendData PCLNAME(SendData) - -/* PclCursor.c */ -#define PclConstrainCursor PCLNAME(ConstrainCursor) -#define PclCursorLimits PCLNAME(CursorLimits) -#define PclDisplayCursor PCLNAME(DisplayCursor) -#define PclRealizeCursor PCLNAME(RealizeCursor) -#define PclUnrealizeCursor PCLNAME(UnrealizeCursor) -#define PclRecolorCursor PCLNAME(RecolorCursor) -#define PclSetCursorPosition PCLNAME(SetCursorPosition) - -#endif - -#endif /* _PCLMAP_H_ */ diff --git a/hw/xprint/ps/Makefile.am b/hw/xprint/ps/Makefile.am deleted file mode 100644 index 08638b19d..000000000 --- a/hw/xprint/ps/Makefile.am +++ /dev/null @@ -1,42 +0,0 @@ -noinst_LTLIBRARIES = libps.la - -INCLUDES = -I$(top_srcdir)/hw/xprint - -AM_CFLAGS = @DIX_CFLAGS@ @XPRINT_CFLAGS@ @FREETYPE_CFLAGS@ \ - -D_XP_PRINT_SERVER_ -DXP_PSTEXT - -libps_la_SOURCES = \ - PsArc.c \ - PsArea.c \ - PsAttr.c \ - PsAttVal.c \ - PsCache.c \ - PsColor.c \ - PsDef.h \ - PsFonts.c \ - PsGC.c \ - Ps.h \ - PsImageUtil.c \ - PsInit.c \ - PsLine.c \ - PsMisc.c \ - psout.c \ - psout.h \ - PsPixel.c \ - PsPixmap.c \ - PsPolygon.c \ - PsPrint.c \ - PsSpans.c \ - PsText.c \ - PsWindow.c - -EXTRA_DIST = PsFTFonts.c \ - psout_ft.c \ - psout_ftpstype1.c \ - psout_ftpstype3.c \ - ttf2pt1wrap.c - -if XP_USE_FREETYPE - AM_CFLAGS += -DXP_USE_FREETYPE - libps_la_SOURCES += $(EXTRA_DIST) -endif diff --git a/hw/xprint/ps/Ps.h b/hw/xprint/ps/Ps.h deleted file mode 100644 index a25e9891a..000000000 --- a/hw/xprint/ps/Ps.h +++ /dev/null @@ -1,600 +0,0 @@ -/* - -Copyright 1996, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ -/* - * (c) Copyright 1996 Hewlett-Packard Company - * (c) Copyright 1996 International Business Machines Corp. - * (c) Copyright 1996 Sun Microsystems, Inc. - * (c) Copyright 1996 Novell, Inc. - * (c) Copyright 1996 Digital Equipment Corp. - * (c) Copyright 1996 Fujitsu Limited - * (c) Copyright 1996 Hitachi, Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject - * to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF - * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Except as contained in this notice, the names of the copyright holders - * shall not be used in advertising or otherwise to promote the sale, use - * or other dealings in this Software without prior written authorization - * from said copyright holders. - */ - -/******************************************************************* -** -** ********************************************************* -** * -** * File: Ps.h -** * -** * Contents: defines and includes for the Ps driver -** * for a printing X server. -** * -** * Created By: Roger Helmendach (Liberty Systems) -** * -** * Copyright: Copyright 1996 The Open Group, Inc. -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#ifndef _PS_H_ -#define _PS_H_ - -#include - -#ifdef abs -#undef abs /* this is because of a non-Spec1170ness in misc.h */ -#endif -#include -#include "scrnintstr.h" -#include "dix.h" - -#include "PsDef.h" -#include "psout.h" - -#include -#include - -#include "regionstr.h" -#include -#include "dixfontstr.h" -#include "gcstruct.h" - -/* - * Some sleazes to force the XrmDB stuff into the server - */ -#ifndef HAVE_XPointer -typedef char *XPointer; -#define Status int -#define True 1 -#define False 0 -#endif - -#include "misc.h" -#include -#include -#include "attributes.h" - - -/* - * Public index variables from PsInit.c - */ - -extern DevPrivateKey PsScreenPrivateKey; -extern DevPrivateKey PsWindowPrivateKey; -extern DevPrivateKey PsContextPrivateKey; -extern DevPrivateKey PsPixmapPrivateKey; -extern XpValidatePoolsRec PsValidatePoolsRec; - -/* - * Display list structures - */ - -#define DPY_BLOCKSIZE 4096 - -typedef struct -{ - int mode; - int nPoints; - xPoint *pPoints; -} PsPolyPointsRec; - -typedef struct -{ - int nSegments; - xSegment *pSegments; -} PsSegmentsRec; - -typedef struct -{ - int nRects; - xRectangle *pRects; -} PsRectanglesRec; - -typedef struct -{ - int nArcs; - xArc *pArcs; -} PsArcsRec; - -typedef struct -{ - int x; - int y; - int count; - char *string; -} PsText8Rec; - -typedef struct -{ - int x; - int y; - int count; - unsigned short *string; -} PsText16Rec; - -typedef struct -{ - int depth; - int x; - int y; - int w; - int h; - int leftPad; - int format; - int res; /* image resolution */ - char *pData; -} PsImageRec; - -typedef struct -{ - int x; - int y; - int w; - int h; -} PsFrameRec; - -typedef enum -{ - PolyPointCmd, - PolyLineCmd, - PolySegmentCmd, - PolyRectangleCmd, - FillPolygonCmd, - PolyFillRectCmd, - PolyArcCmd, - PolyFillArcCmd, - Text8Cmd, - Text16Cmd, - TextI8Cmd, - TextI16Cmd, - PutImageCmd, - BeginFrameCmd, - EndFrameCmd -} DisplayElmType; - -typedef struct _DisplayElmRec -{ - DisplayElmType type; - GCPtr gc; - union - { - PsPolyPointsRec polyPts; - PsSegmentsRec segments; - PsRectanglesRec rects; - PsArcsRec arcs; - PsText8Rec text8; - PsText16Rec text16; - PsImageRec image; - PsFrameRec frame; - } c; -} DisplayElmRec; - -typedef DisplayElmRec *DisplayElmPtr; - -typedef struct _DisplayListRec -{ - struct _DisplayListRec *next; - int nelms; - DisplayElmRec elms[DPY_BLOCKSIZE]; -} DisplayListRec; - -typedef DisplayListRec *DisplayListPtr; - -/* - * Private structures - */ - -typedef struct -{ - XrmDatabase resDB; - Bool (*DestroyWindow)(WindowPtr); -} PsScreenPrivRec, *PsScreenPrivPtr; - -typedef struct PsFontTypeInfoRec PsFontTypeInfoRec; - -/* Structure to hold information about one font on disk - * Notes: - * - multiple XLFD names can refer to the same |PsFontTypeInfoRec| (if - * they all use the same font on the disk) - * - the FreeType font download code uses multiple |PsFontTypeInfoRec| - * records for one font on disk if they differ in the encoding being - * used (this is an exception from the - * 'one-|PsFontTypeInfoRec|-per-font-on-disk'-design; maybe it it is better - * to rework that in a later step and add a new per-encoding structure). - */ -struct PsFontTypeInfoRec -{ - PsFontTypeInfoRec *next; /* Next record in list... */ - char *adobe_ps_name; /* PostScript font name (from the - * "_ADOBE_POSTSCRIPT_FONTNAME" atom) */ - char *download_ps_name; /* PostScript font name used for font download */ - char *filename; /* File name of font */ -#ifdef XP_USE_FREETYPE - char *ft_download_encoding; /* encoding used for download */ - PsFTDownloadFontType ft_download_font_type; /* PS font type used for download (e.g. Type1/Type3/CID/etc.) */ -#endif /* XP_USE_FREETYPE */ - int is_iso_encoding; /* Is this font encoded in ISO Latin 1 ? */ - int font_type; /* See PSFTI_FONT_TYPE_* below... */ - Bool downloadableFont; /* Font can be downloaded */ - Bool alreadyDownloaded[256]; /* Font has been downloaded (for 256 8bit "sub"-font) */ -}; - -#define PSFTI_FONT_TYPE_OTHER (0) -#define PSFTI_FONT_TYPE_PMF (1) -#define PSFTI_FONT_TYPE_PS_TYPE1_PFA (2) -#define PSFTI_FONT_TYPE_PS_TYPE1_PFB (3) -#define PSFTI_FONT_TYPE_TRUETYPE (4) -/* PSFTI_FONT_TYPE_FREETYPE is means the font is handled by the freetype engine */ -#define PSFTI_FONT_TYPE_FREETYPE (5) - -typedef struct PsFontInfoRec PsFontInfoRec; - -/* Structure which represents our context info for a single XLFD font - * Note that multiple |PsFontInfoRec| records can share the same - * |PsFontTypeInfoRec| record - the |PsFontInfoRec| records represent - * different appearances of the same font on disk(=|PsFontTypeInfoRec|)). - */ -struct PsFontInfoRec -{ - PsFontInfoRec *next; /* Next record in list... */ - /* |font| and |font_fontPrivate| are used by |PsFindFontInfoRec()| to - * identify a font */ - FontPtr font; /* The font this record is for */ - pointer font_fontPrivate; - PsFontTypeInfoRec *ftir; /* Record about the font file on disk */ - const char *dfl_name; /* XLFD for this font */ - int size; /* Font size. Use |mtx| if |size==0| */ - float mtx[4]; /* Transformation matrix (see |size|) */ -}; - -typedef struct -{ - char *jobFileName; - FILE *pJobFile; - GC lastGC; - unsigned char *dash; - int validGC; - ClientPtr getDocClient; - int getDocBufSize; - PsOutPtr pPsOut; - PsFontTypeInfoRec *fontTypeInfoRecords; - PsFontInfoRec *fontInfoRecords; -} PsContextPrivRec, *PsContextPrivPtr; - -typedef struct -{ - int validContext; - XpContextPtr context; -} PsWindowPrivRec, *PsWindowPrivPtr; - -typedef struct -{ - XpContextPtr context; - GC lastGC; - int validGC; - DisplayListPtr dispList; -} PsPixmapPrivRec, *PsPixmapPrivPtr; - -/* - * Macro functions - */ - -#define SEND_PS(f,c) fwrite( c, sizeof( char ), strlen( c ), f ) -#define MIN(a,b) (((a)<(b))?(a):(b)) -#ifndef MAX -#define MAX(a,b) (((a)>(b))?(a):(b)) -#endif - -/* - * Functions in PsInit.c - */ - -extern Bool InitializePsDriver(int ndx, ScreenPtr pScreen, int argc, - char **argv); -extern XpContextPtr PsGetContextFromWindow(WindowPtr win); - -/* - * Functions in PsCache.c - */ - -extern int PsBmIsImageCached(int gWidth, int gHeight, char *pBuffer); -extern int PsBmPutImageInCache(int gWidth, int gHeight, char *pBuffer); -extern void PsBmClearImageCache(void); - -/* - * Functions in PsPrint.c - */ - -extern int PsStartJob(XpContextPtr pCon, Bool sendClientData, ClientPtr client); -extern int PsEndJob(XpContextPtr pCon, Bool cancel); -extern int PsStartPage(XpContextPtr pCon, WindowPtr pWin); -extern int PsEndPage(XpContextPtr pCon, WindowPtr pWin); -extern int PsStartDoc(XpContextPtr pCon, XPDocumentType type); -extern int PsEndDoc(XpContextPtr pCon, Bool cancel); -extern int PsDocumentData(XpContextPtr pCon, DrawablePtr pDraw, char *pData, - int len_data, char *pFmt, int len_fmt, char *pOpt, int len_opt, - ClientPtr client); -extern int PsGetDocumentData(XpContextPtr pCon, ClientPtr client, - int maxBufferSize); - -/* - * Functions in PsGC.c - */ - -extern Bool PsCreateGC(GCPtr pGC); -extern PsContextPrivPtr PsGetPsContextPriv( DrawablePtr pDrawable ); -extern int PsUpdateDrawableGC(GCPtr pGC, DrawablePtr pDrawable, - PsOutPtr *psOut, ColormapPtr *cMap); -extern void PsValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable); -extern void PsChangeGC(GCPtr pGC, unsigned long changes); -extern void PsCopyGC(GCPtr pGCSrc, unsigned long mask, GCPtr pGCDst); -extern void PsDestroyGC(GCPtr pGC); -extern void PsChangeClip(GCPtr pGC, int type, pointer pValue, int nrects); -extern void PsDestroyClip(GCPtr pGC); -extern void PsCopyClip(GCPtr pgcDst, GCPtr pgcSrc); - -extern GCPtr PsCreateAndCopyGC(DrawablePtr pDrawable, GCPtr pSrc); - -/* - * Functions in PsMisc.c - */ - -extern void PsQueryBestSize(int type, short *pwidth, short *pheight, - ScreenPtr pScreen); -extern Bool PsCloseScreen(int index, ScreenPtr pScreen); -extern void PsLineAttrs(PsOutPtr psOut, GCPtr pGC, ColormapPtr cMap); -extern int PsGetMediumDimensions( - XpContextPtr pCon, - CARD16 *pWidth, - CARD16 *pHeight); -extern int PsGetReproducibleArea( - XpContextPtr pCon, - xRectangle *pRect); -extern int PsSetImageResolution( - XpContextPtr pCon, - int imageRes, - Bool *status); - -/* - * Functions in PsSpans.c - */ - -extern void PsFillSpans(DrawablePtr pDrawable, GCPtr pGC, int nSpans, - DDXPointPtr pPoints, int *pWidths, int fSorted); -extern void PsSetSpans(DrawablePtr pDrawable, GCPtr pGC, char *pSrc, - DDXPointPtr pPoints, int *pWidths, int nSpans, - int fSorted); - -/* - * Functions in PsArea.c - */ - -extern void PsPutScaledImage(DrawablePtr pDrawable, GCPtr pGC, int depth, - int x, int y, int w, int h, int leftPad, int format, - int imageRes, char *pImage); -extern void PsPutScaledImageIM(DrawablePtr pDrawable, GCPtr pGC, int depth, - int x, int y, int w, int h, int leftPad, - int format, int imageRes, char *pImage); -extern void PsPutImage(DrawablePtr pDrawable, GCPtr pGC, int depth, - int x, int y, int w, int h, int leftPad, int format, - char *pImage); -extern void PsPutImageMask(DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y, - int w, int h, int leftPad, int format, char *pImage); -extern RegionPtr PsCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, - int srcx, int srcy, int width, int height, - int dstx, int dsty); -extern RegionPtr PsCopyPlane(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, - int srcx, int srcy, int width, int height, - int dstx, int dsty, unsigned long plane); - -/* - * Functions in PsPixel.c - */ - -extern void PsPolyPoint(DrawablePtr pDrawable, GCPtr pGC, int mode, - int nPoints, xPoint *pPoints); -extern void PsPushPixels(GCPtr pGC, PixmapPtr pBitmap, DrawablePtr pDrawable, - int width, int height, int x, int y); - -/* - * Functions in PsLine.c - */ - -extern void PsPolyLine(DrawablePtr pDrawable, GCPtr pGC, int mode, - int nPoints, xPoint *pPoints); -extern void PsPolySegment(DrawablePtr pDrawable, GCPtr pGC, int nSegments, - xSegment *pSegments); - -/* - * Functions in PsPolygon.c - */ - -extern void PsPolyRectangle(DrawablePtr pDrawable, GCPtr pGC, int nRects, - xRectangle *pRects); -extern void PsFillPolygon(DrawablePtr pDrawable, GCPtr pGC, int shape, - int mode, int nPoints, DDXPointPtr pPoints); -extern void PsPolyFillRect(DrawablePtr pDrawable, GCPtr pGC, int nRects, - xRectangle *pRects); - -/* - * Functions in PsPolygon.c - */ - -extern void PsPolyArc(DrawablePtr pDrawable, GCPtr pGC, int nArcs, - xArc *pArcs); -extern void PsPolyFillArc(DrawablePtr pDrawable, GCPtr pGC, int nArcs, - xArc *pArcs); - -/* - * Functions in PsText.c - */ - -extern int PsPolyText8(DrawablePtr pDrawable, GCPtr pGC, int x, int y, - int count, char *string); -extern int PsPolyText16(DrawablePtr pDrawable, GCPtr pGC, int x, int y, - int count, unsigned short *string); -extern void PsImageText8(DrawablePtr pDrawable, GCPtr pGC, int x, int y, - int count, char *string); -extern void PsImageText16(DrawablePtr pDrawable, GCPtr pGC, int x, int y, - int count, unsigned short *string); -extern void PsImageGlyphBlt(DrawablePtr pDrawable, GCPtr pGC, int x, int y, - unsigned int nGlyphs, CharInfoPtr *pCharInfo, - pointer pGlyphBase); -extern void PsPolyGlyphBlt(DrawablePtr pDrawable, GCPtr pGC, int x, int y, - unsigned int nGlyphs, CharInfoPtr *pCharInfo, - pointer pGlyphBase); - -/* - * Functions in PsWindow.c - */ - -extern Bool PsCreateWindow(WindowPtr pWin); -extern Bool PsMapWindow(WindowPtr pWin); -extern Bool PsPositionWindow(WindowPtr pWin, int x, int y); -extern Bool PsUnmapWindow(WindowPtr pWin); -extern void PsCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, - RegionPtr prgnSrc); -extern Bool PsChangeWindowAttributes(WindowPtr pWin, unsigned long mask); -extern Bool PsDestroyWindow(WindowPtr pWin); - -/* - * Functions in PsFonts.c - */ - -extern Bool PsRealizeFont(ScreenPtr pscr, FontPtr pFont); -extern Bool PsUnrealizeFont(ScreenPtr pscr, FontPtr pFont); -extern char *PsGetFontName(FontPtr pFont); -extern int PsGetFontSize(FontPtr pFont, float *mtx); -extern char *PsGetPSFontName(FontPtr pFont); -extern char *PsGetPSFaceOrFontName(FontPtr pFont); -extern int PsIsISOLatin1Encoding(FontPtr pFont); -extern char *PsGetEncodingName(FontPtr pFont); -extern PsFontInfoRec *PsGetFontInfoRec(DrawablePtr pDrawable, FontPtr pFont); -extern void PsFreeFontInfoRecords(PsContextPrivPtr priv); -extern PsFTDownloadFontType PsGetFTDownloadFontType(void); - -/* - * Functions in PsFTFonts.c - */ - -extern char *PsGetFTFontFileName(FontPtr pFont); -extern Bool PsIsFreeTypeFont(FontPtr pFont); - -/* - * Functions in PsAttr.c - */ - -extern char *PsGetAttributes(XpContextPtr pCon, XPAttributes pool); -extern char *PsGetOneAttribute(XpContextPtr pCon, XPAttributes pool, - char *attr); -extern int PsAugmentAttributes(XpContextPtr pCon, XPAttributes pool, - char *attrs); -extern int PsSetAttributes(XpContextPtr pCon, XPAttributes pool, char *attrs); - -/* - * Functions in PsColor.c - */ - -extern Bool PsCreateColormap(ColormapPtr pColor); -extern void PsDestroyColormap(ColormapPtr pColor); -extern void PsInstallColormap(ColormapPtr pColor); -extern void PsUninstallColormap(ColormapPtr pColor); -extern int PsListInstalledColormaps(ScreenPtr pScreen, XID *pCmapList); -extern void PsStoreColors(ColormapPtr pColor, int ndef, xColorItem *pdefs); -extern void PsResolveColor(unsigned short *pRed, unsigned short *pGreen, - unsigned short *pBlue, VisualPtr pVisual); -extern PsOutColor PsGetPixelColor(ColormapPtr cMap, int pixval); -extern void PsSetFillColor(DrawablePtr pDrawable, GCPtr pGC, PsOutPtr psOut, - ColormapPtr cMap); - -/* - * Functions in PsPixmap.c - */ - -extern PixmapPtr PsCreatePixmap(ScreenPtr pScreen, int width, int height, - int depth, unsigned usage_hint); -extern void PsScrubPixmap(PixmapPtr pPixmap); -extern Bool PsDestroyPixmap(PixmapPtr pPixmap); -extern DisplayListPtr PsGetFreeDisplayBlock(PsPixmapPrivPtr priv); -extern void PsReplay(DisplayElmPtr elm, DrawablePtr pDrawable); -extern void PsReplayPixmap(PixmapPtr pix, DrawablePtr pDrawable); -extern int PsCloneDisplayElm(PixmapPtr dst, - DisplayElmPtr elm, DisplayElmPtr newElm, - int xoff, int yoff); -extern void PsCopyDisplayList(PixmapPtr src, PixmapPtr dst, int xoff, - int yoff, int x, int y, int w, int h); -extern PsElmPtr PsCreateFillElementList(PixmapPtr pix, int *nElms); -extern PsElmPtr PsCloneFillElementList(int nElms, PsElmPtr elms); -extern void PsDestroyFillElementList(int nElms, PsElmPtr elms); - -/* - * Functions in PsImageUtil.c - */ - -extern unsigned long -PsGetImagePixel(char *pImage, int depth, int w, int h, int leftPad, int format, - int px, int py); - -#endif /* _PS_H_ */ diff --git a/hw/xprint/ps/PsArc.c b/hw/xprint/ps/PsArc.c deleted file mode 100644 index 0684307dd..000000000 --- a/hw/xprint/ps/PsArc.c +++ /dev/null @@ -1,181 +0,0 @@ -/* - -Copyright 1996, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ -/* - * (c) Copyright 1996 Hewlett-Packard Company - * (c) Copyright 1996 International Business Machines Corp. - * (c) Copyright 1996 Sun Microsystems, Inc. - * (c) Copyright 1996 Novell, Inc. - * (c) Copyright 1996 Digital Equipment Corp. - * (c) Copyright 1996 Fujitsu Limited - * (c) Copyright 1996 Hitachi, Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject - * to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF - * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Except as contained in this notice, the names of the copyright holders - * shall not be used in advertising or otherwise to promote the sale, use - * or other dealings in this Software without prior written authorization - * from said copyright holders. - */ - -/******************************************************************* -** -** ********************************************************* -** * -** * File: PsArc.c -** * -** * Contents: Arc-drawing code for the PS DDX driver -** * -** * Created By: Roger Helmendach (Liberty Systems) -** * -** * Copyright: Copyright 1996 The Open Group, Inc. -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include - -#include "Ps.h" -#include "gcstruct.h" -#include "windowstr.h" - -void -PsPolyArc( - DrawablePtr pDrawable, - GCPtr pGC, - int nArcs, - xArc *pArcs) -{ - if( pDrawable->type==DRAWABLE_PIXMAP ) - { - DisplayElmPtr elm; - PixmapPtr pix = (PixmapPtr)pDrawable; - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pix->devPrivate.ptr; - DisplayListPtr disp; - GCPtr gc; - - if ((gc = PsCreateAndCopyGC(pDrawable, pGC)) == NULL) return; - - disp = PsGetFreeDisplayBlock(priv); - - elm = &disp->elms[disp->nelms]; - elm->type = PolyArcCmd; - elm->gc = gc; - elm->c.arcs.nArcs = nArcs; - elm->c.arcs.pArcs = (xArc *)xalloc(nArcs*sizeof(xArc)); - memcpy(elm->c.arcs.pArcs, pArcs, nArcs*sizeof(xArc)); - disp->nelms += 1; - } - else - { - int i; - PsOutPtr psOut; - ColormapPtr cMap; - - if( PsUpdateDrawableGC(pGC, pDrawable, &psOut, &cMap)==FALSE ) return; - PsOut_Offset(psOut, pDrawable->x, pDrawable->y); - PsOut_Color(psOut, PsGetPixelColor(cMap, pGC->fgPixel)); - PsLineAttrs(psOut, pGC, cMap); - for( i=0 ; itype==DRAWABLE_PIXMAP ) - { - DisplayElmPtr elm; - PixmapPtr pix = (PixmapPtr)pDrawable; - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pix->devPrivate.ptr; - DisplayListPtr disp; - GCPtr gc; - - if ((gc = PsCreateAndCopyGC(pDrawable, pGC)) == NULL) return; - - disp = PsGetFreeDisplayBlock(priv); - - elm = &disp->elms[disp->nelms]; - elm->type = PolyFillArcCmd; - elm->gc = gc; - elm->c.arcs.nArcs = nArcs; - elm->c.arcs.pArcs = (xArc *)xalloc(nArcs*sizeof(xArc)); - memcpy(elm->c.arcs.pArcs, pArcs, nArcs*sizeof(xArc)); - disp->nelms += 1; - } - else - { - int i; - PsOutPtr psOut; - PsArcEnum styl; - ColormapPtr cMap; - - if( PsUpdateDrawableGC(pGC, pDrawable, &psOut, &cMap)==FALSE ) return; - PsOut_Offset(psOut, pDrawable->x, pDrawable->y); - PsSetFillColor(pDrawable, pGC, psOut, cMap); - PsLineAttrs(psOut, pGC, cMap); - if( pGC->arcMode==ArcChord ) styl = PsChord; - else styl = PsPieSlice; - for( i=0 ; i -#endif - -#include "Ps.h" -#include "gcstruct.h" -#include "windowstr.h" - - -void -PsPutScaledImage(DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y, - int w, int h, int leftPad, int format, int imageRes, char *pImage) -{ - if( pDrawable->type==DRAWABLE_PIXMAP ) - { - int size = PixmapBytePad(w, depth)*h; - DisplayElmPtr elm; - PixmapPtr pix = (PixmapPtr)pDrawable; - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pix->devPrivate.ptr; - DisplayListPtr disp; - GCPtr gc; - - if ((gc = PsCreateAndCopyGC(pDrawable, pGC)) == NULL) return; - - disp = PsGetFreeDisplayBlock(priv); - elm = &disp->elms[disp->nelms]; - elm->type = PutImageCmd; - elm->gc = gc; - elm->c.image.depth = depth; - elm->c.image.x = x; - elm->c.image.y = y; - elm->c.image.w = w; - elm->c.image.h = h; - elm->c.image.leftPad = leftPad; - elm->c.image.format = format; - elm->c.image.res = imageRes; - elm->c.image.pData = (char *)xalloc(size); - memcpy(elm->c.image.pData, pImage, size); - disp->nelms += 1; - } - else - { - int i, j; - int r, c; - PsOutPtr psOut; - ColormapPtr cMap; - int pageRes, sw, sh; - - if( PsUpdateDrawableGC(pGC, pDrawable, &psOut, &cMap)==FALSE ) return; - if (!imageRes) { - sw = w; - sh = h; - } else { - pageRes = XpGetResolution(XpGetPrintContext(requestingClient)); - sw = (float)w * (float)pageRes / (float)imageRes + 0.5; - sh = (float)h * (float)pageRes / (float)imageRes + 0.5; - } - PsOut_Offset(psOut, pDrawable->x, pDrawable->y); - - if( depth!=1 ) - { - PsOut_BeginImage(psOut, 0, 0, x, y, w, h, sw, sh, 3); - - for( r=0 ; rbgPixel), - PsGetPixelColor(cMap, pGC->fgPixel), - x, y, w, h, sw, sh, 1); - for( r=0 ; r>j)&1)<<(7-j)); } -#elif IMAGE_BYTE_ORDER == MSBFirst - iv_ = iv; -#else -#error Unsupported byte order -#endif - c = iv_; - PsOut_OutImageBytes(psOut, 1, &c); - } - } - PsOut_EndImage(psOut); - } - } -} - -void -PsPutScaledImageIM(DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y, - int w, int h, int leftPad, int format, int imageRes, char *pImage) -{ - if( pDrawable->type==DRAWABLE_PIXMAP ) - { - int size = PixmapBytePad(w, depth)*h; - DisplayElmPtr elm; - PixmapPtr pix = (PixmapPtr)pDrawable; - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pix->devPrivate.ptr; - DisplayListPtr disp; - GCPtr gc; - - if ((gc = PsCreateAndCopyGC(pDrawable, pGC)) == NULL) return; - - disp = PsGetFreeDisplayBlock(priv); - elm = &disp->elms[disp->nelms]; - elm->type = PutImageCmd; - elm->gc = gc; - elm->c.image.depth = depth; - elm->c.image.x = x; - elm->c.image.y = y; - elm->c.image.w = w; - elm->c.image.h = h; - elm->c.image.leftPad = leftPad; - elm->c.image.format = format; - elm->c.image.res = imageRes; - elm->c.image.pData = (char *)xalloc(size); - memcpy(elm->c.image.pData, pImage, size); - disp->nelms += 1; - } - else - { - int i, j; - int r, c; - PsOutPtr psOut; - ColormapPtr cMap; - int pageRes, sw, sh; -#ifdef BM_CACHE - long cache_id = 0; -#endif - - if( PsUpdateDrawableGC(pGC, pDrawable, &psOut, &cMap)==FALSE ) return; - if (!imageRes) { - sw = w; - sh = h; - } else { - pageRes = XpGetResolution(XpGetPrintContext(requestingClient)); - sw = (float)w * (float)pageRes / (float)imageRes + 0.5; - sh = (float)h * (float)pageRes / (float)imageRes + 0.5; - } - PsOut_Offset(psOut, pDrawable->x, pDrawable->y); - -#ifdef BM_CACHE - cache_id = PsBmIsImageCached(w, h, pImage); - - if(!cache_id) - { - cache_id = PsBmPutImageInCache(w, h, pImage); - - if(!cache_id) - return; - - PsOut_BeginImageCache(psOut, cache_id); -#endif - if( depth!=1 ) - { - PsOut_BeginImageIM(psOut, 0, 0, x, y, w, h, sw, sh, 3); - - for( r=0 ; rbgPixel), - PsGetPixelColor(cMap, pGC->fgPixel), - x, y, w, h, sw, sh, 1); - for( r=0 ; r>j)&1)<<(7-j)); } -#elif IMAGE_BYTE_ORDER == MSBFirst - iv_ = iv; -#else -#error Unsupported byte order -#endif - c = iv_; - PsOut_OutImageBytes(psOut, 1, &c); - } - } - PsOut_EndImage(psOut); - } -#ifdef BM_CACHE - PsOut_EndImageCache(psOut); - } - PsOut_ImageCache(psOut, x, y, cache_id, PsGetPixelColor(cMap, pGC->bgPixel), - PsGetPixelColor(cMap, pGC->fgPixel)); -#endif - } -} -void -PsPutImage(DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y, - int w, int h, int leftPad, int format, char *pImage) -{ - XpContextPtr pcon; - if (requestingClient && (pcon = XpGetPrintContext(requestingClient))) - PsPutScaledImage(pDrawable, pGC, depth, x, y, w, h, leftPad, format, - pcon->imageRes, pImage); -} -void -PsPutImageMask(DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y, - int w, int h, int leftPad, int format, char *pImage) -{ - XpContextPtr pcon; - if (requestingClient && (pcon = XpGetPrintContext(requestingClient))) - PsPutScaledImageIM(pDrawable, pGC, depth, x, y, w, h, leftPad, format, - pcon->imageRes, pImage); -} - -RegionPtr -PsCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, int srcx, int srcy, - int width, int height, int dstx, int dsty) -{ - PixmapPtr src = (PixmapPtr)pSrc; - PixmapPtr dst = (PixmapPtr)pDst; - - if( pSrc->type!=DRAWABLE_PIXMAP ) return NULL; - if( pDst->type!=DRAWABLE_PIXMAP ) - { - PsOutPtr psOut; - ColormapPtr cMap; - if( PsUpdateDrawableGC(pGC, pDst, &psOut, &cMap)==FALSE ) return NULL; - PsOut_Offset(psOut, pDst->x, pDst->y); - PsOut_BeginFrame(psOut, dstx-srcx, dsty-srcy, dstx, dsty, width, height); - PsReplayPixmap(src, pDst); - PsOut_EndFrame(psOut); - } - else PsCopyDisplayList(src, dst, dstx-srcx, dsty-srcy, dstx, dsty, - width, height); - return NULL; -} - -RegionPtr -PsCopyPlane(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, int srcx, int srcy, - int width, int height, int dstx, int dsty, unsigned long plane) -{ - PixmapPtr src = (PixmapPtr)pSrc; - PixmapPtr dst = (PixmapPtr)pDst; - - if( pSrc->type!=DRAWABLE_PIXMAP ) return NULL; - if( pDst->type!=DRAWABLE_PIXMAP ) - { - PsOutPtr psOut; - ColormapPtr cMap; - if( PsUpdateDrawableGC(pGC, pDst, &psOut, &cMap)==FALSE ) return NULL; - PsOut_Offset(psOut, pDst->x, pDst->y); - PsOut_BeginFrame(psOut, dstx-srcx, dsty-srcy, dstx, dsty, width, height); - PsReplayPixmap(src, pDst); - PsOut_EndFrame(psOut); - } - else PsCopyDisplayList(src, dst, dstx-srcx, dsty-srcy, dstx, dsty, - width, height); - return NULL; -} diff --git a/hw/xprint/ps/PsAttVal.c b/hw/xprint/ps/PsAttVal.c deleted file mode 100644 index de2e6c8e4..000000000 --- a/hw/xprint/ps/PsAttVal.c +++ /dev/null @@ -1,289 +0,0 @@ -/* - */ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "Ps.h" -#include "AttrValid.h" - -/* - * define valid values and defaults for Printer pool - */ -static XpOid ValidContentOrientationsOids[] = { - xpoid_val_content_orientation_portrait, - xpoid_val_content_orientation_landscape, - xpoid_val_content_orientation_reverse_portrait, - xpoid_val_content_orientation_reverse_landscape -}; -static XpOidList ValidContentOrientations = { - ValidContentOrientationsOids, XpNumber(ValidContentOrientationsOids) -}; - -static XpOid DefaultContentOrientationsOids[] = { - xpoid_val_content_orientation_portrait, - xpoid_val_content_orientation_landscape -}; -static XpOidList DefaultContentOrientations = { - DefaultContentOrientationsOids, XpNumber(DefaultContentOrientationsOids) -}; - -static XpOid ValidPlexesOids[] = { - xpoid_val_plex_simplex, xpoid_val_plex_duplex, xpoid_val_plex_tumble -}; -static XpOidList ValidPlexes = { - ValidPlexesOids, XpNumber(ValidPlexesOids) -}; - -static XpOid DefaultPlexesOids[] = { - xpoid_val_plex_simplex -}; -static XpOidList DefaultPlexes = { - DefaultPlexesOids, XpNumber(DefaultPlexesOids) -}; - -static unsigned long ValidPrinterResolutionsCards[] = { - 75, - 100, - 120, - 150, - 180, - 200, - 240, - 300, - 360, - 400, - 600, - 720, - 940, - 1200, - 1440, - 2400 -}; -static XpOidCardList ValidPrinterResolutions = { - ValidPrinterResolutionsCards, XpNumber(ValidPrinterResolutionsCards) -}; - -static unsigned long DefaultPrinterResolutionsCards[] = { - 75, - 100, - 120, - 150, - 180, - 200, - 240, - 300, - 360, - 400, - 600, - 720, - 940, - 1200 -}; -static XpOidCardList DefaultPrinterResolutions = { - DefaultPrinterResolutionsCards, XpNumber(DefaultPrinterResolutionsCards) -}; - -static XpOid ValidListfontsModesOids[] = { - xpoid_val_xp_list_internal_printer_fonts, xpoid_val_xp_list_glyph_fonts -}; -static XpOidList ValidListfontsModes = { - ValidListfontsModesOids, XpNumber(ValidListfontsModesOids) -}; - -static XpOid DefaultListfontsModesOids[] = { - xpoid_val_xp_list_glyph_fonts -}; -static XpOidList DefaultListfontsModes = { - DefaultListfontsModesOids, XpNumber(DefaultListfontsModesOids) -}; - -static XpOid ValidSetupProvisoOids[] = { - xpoid_val_xp_setup_mandatory, xpoid_val_xp_setup_optional -}; -static XpOidList ValidSetupProviso = { - - - ValidSetupProvisoOids, XpNumber(ValidSetupProvisoOids) -}; - -static XpOidDocFmt ValidDocFormatsSupportedFmts[] = { - { "Postscript", "2", NULL } -}; -static XpOidDocFmtList ValidDocFormatsSupported = { - ValidDocFormatsSupportedFmts, XpNumber(ValidDocFormatsSupportedFmts) -}; - -static XpOidDocFmt DefaultDocFormatsSupportedFmts[] = { - { "Postscript", "2", NULL } -}; -static XpOidDocFmtList DefaultDocFormatsSupported = { - DefaultDocFormatsSupportedFmts, XpNumber(DefaultDocFormatsSupportedFmts) -}; - -static XpOidDocFmt ValidEmbeddedFormatsSupportedFmts[] = { - { "Postscript", "2", NULL } -}; -static XpOidDocFmtList ValidEmbeddedFormatsSupported = { - ValidEmbeddedFormatsSupportedFmts, XpNumber(ValidEmbeddedFormatsSupportedFmts) -}; - -static XpOidDocFmt DefaultEmbeddedFormatsSupportedFmts[] = { - { "Postscript", "2", NULL } -}; -static XpOidDocFmtList DefaultEmbeddedFormatsSupported = { - DefaultEmbeddedFormatsSupportedFmts, XpNumber(DefaultEmbeddedFormatsSupportedFmts) -}; - -static XpOidDocFmt ValidRawFormatsSupportedFmts[] = { - { "Postscript", "2", NULL } - -}; -static XpOidDocFmtList ValidRawFormatsSupported = { - ValidRawFormatsSupportedFmts, XpNumber(ValidRawFormatsSupportedFmts) -}; - -static XpOidDocFmt DefaultRawFormatsSupportedFmts[] = { - { "Postscript", "2", NULL } -}; -static XpOidDocFmtList DefaultRawFormatsSupported = { - DefaultRawFormatsSupportedFmts, XpNumber(DefaultRawFormatsSupportedFmts) -}; - -static XpOid ValidInputTraysOids[] = { - xpoid_val_input_tray_manual, - xpoid_val_input_tray_main, - xpoid_val_input_tray_envelope, - xpoid_val_input_tray_large_capacity, - xpoid_val_input_tray_bottom -}; -static XpOidList ValidInputTrays = { - ValidInputTraysOids, XpNumber(ValidInputTraysOids) -}; - -static XpOid ValidMediumSizesOids[] = { - xpoid_val_medium_size_iso_a0, - xpoid_val_medium_size_iso_a1, - xpoid_val_medium_size_iso_a2, - xpoid_val_medium_size_iso_a3, - xpoid_val_medium_size_iso_a4, - xpoid_val_medium_size_iso_a5, - xpoid_val_medium_size_iso_a6, - xpoid_val_medium_size_iso_a7, - xpoid_val_medium_size_iso_a8, - xpoid_val_medium_size_iso_a9, - xpoid_val_medium_size_iso_a10, - xpoid_val_medium_size_iso_b0, - xpoid_val_medium_size_iso_b1, - xpoid_val_medium_size_iso_b2, - xpoid_val_medium_size_iso_b3, - xpoid_val_medium_size_iso_b4, - xpoid_val_medium_size_iso_b5, - xpoid_val_medium_size_iso_b6, - xpoid_val_medium_size_iso_b7, - xpoid_val_medium_size_iso_b8, - xpoid_val_medium_size_iso_b9, - xpoid_val_medium_size_iso_b10, - xpoid_val_medium_size_na_letter, - xpoid_val_medium_size_na_legal, - xpoid_val_medium_size_executive, - xpoid_val_medium_size_folio, - xpoid_val_medium_size_invoice, - xpoid_val_medium_size_ledger, - xpoid_val_medium_size_quarto, - xpoid_val_medium_size_iso_c3, - xpoid_val_medium_size_iso_c4, - xpoid_val_medium_size_iso_c5, - xpoid_val_medium_size_iso_c6, - xpoid_val_medium_size_iso_designated_long, - xpoid_val_medium_size_na_10x13_envelope, - xpoid_val_medium_size_na_9x12_envelope, - xpoid_val_medium_size_na_number_10_envelope, - xpoid_val_medium_size_na_7x9_envelope, - xpoid_val_medium_size_na_9x11_envelope, - xpoid_val_medium_size_na_10x14_envelope, - xpoid_val_medium_size_na_number_9_envelope, - xpoid_val_medium_size_na_6x9_envelope, - xpoid_val_medium_size_na_10x15_envelope, - xpoid_val_medium_size_monarch_envelope, - xpoid_val_medium_size_a, - xpoid_val_medium_size_b, - xpoid_val_medium_size_c, - xpoid_val_medium_size_d, - xpoid_val_medium_size_e, - xpoid_val_medium_size_jis_b0, - xpoid_val_medium_size_jis_b1, - xpoid_val_medium_size_jis_b2, - xpoid_val_medium_size_jis_b3, - xpoid_val_medium_size_jis_b4, - xpoid_val_medium_size_jis_b5, - xpoid_val_medium_size_jis_b6, - xpoid_val_medium_size_jis_b7, - xpoid_val_medium_size_jis_b8, - xpoid_val_medium_size_jis_b9, - xpoid_val_medium_size_jis_b10, - xpoid_val_medium_size_hp_2x_postcard, - xpoid_val_medium_size_hp_european_edp, - xpoid_val_medium_size_hp_mini, - xpoid_val_medium_size_hp_postcard, - xpoid_val_medium_size_hp_tabloid, - xpoid_val_medium_size_hp_us_edp, - xpoid_val_medium_size_hp_us_government_legal, - xpoid_val_medium_size_hp_us_government_letter, -}; -static XpOidList ValidMediumSizes = { - ValidMediumSizesOids, XpNumber(ValidMediumSizesOids) -}; - -static XpOidDocFmt DefaultDocumentFormat = { - "Postscript", "2", NULL -}; - - -/* - * init struct for XpValidate*Pool - */ -XpValidatePoolsRec PsValidatePoolsRec = { - &ValidContentOrientations, &DefaultContentOrientations, - &ValidDocFormatsSupported, &DefaultDocFormatsSupported, - &ValidInputTrays, &ValidMediumSizes, - &ValidPlexes, &DefaultPlexes, - &ValidPrinterResolutions, &DefaultPrinterResolutions, - &ValidEmbeddedFormatsSupported, &DefaultEmbeddedFormatsSupported, - &ValidListfontsModes, &DefaultListfontsModes, - &ValidRawFormatsSupported, &DefaultRawFormatsSupported, - &ValidSetupProviso, - &DefaultDocumentFormat -}; diff --git a/hw/xprint/ps/PsAttr.c b/hw/xprint/ps/PsAttr.c deleted file mode 100644 index 0925716f5..000000000 --- a/hw/xprint/ps/PsAttr.c +++ /dev/null @@ -1,116 +0,0 @@ -/* - -Copyright 1996, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ -/* - * (c) Copyright 1996 Hewlett-Packard Company - * (c) Copyright 1996 International Business Machines Corp. - * (c) Copyright 1996 Sun Microsystems, Inc. - * (c) Copyright 1996 Novell, Inc. - * (c) Copyright 1996 Digital Equipment Corp. - * (c) Copyright 1996 Fujitsu Limited - * (c) Copyright 1996 Hitachi, Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject - * to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF - * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Except as contained in this notice, the names of the copyright holders - * shall not be used in advertising or otherwise to promote the sale, use - * or other dealings in this Software without prior written authorization - * from said copyright holders. - */ - -/******************************************************************* -** -** ********************************************************* -** * -** * File: PsAttr.c -** * -** * Contents: Attribute-handling functions for the PS driver -** * -** * Created By: Roger Helmendach (Liberty Systems) -** * -** * Copyright: Copyright 1996 The Open Group, Inc. -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "Ps.h" -#include "attributes.h" - -char * -PsGetAttributes( - XpContextPtr pCon, - XPAttributes pool) -{ - return XpGetAttributes(pCon, pool); -} - -char * -PsGetOneAttribute( - XpContextPtr pCon, - XPAttributes pool, - char *attr) -{ - return XpGetOneAttribute(pCon, pool, attr); -} - -int -PsAugmentAttributes( - XpContextPtr pCon, - XPAttributes pool, - char *attrs) -{ - return XpAugmentAttributes(pCon, pool, attrs); -} - -int -PsSetAttributes( - XpContextPtr pCon, - XPAttributes pool, - char *attrs) -{ - return XpSetAttributes(pCon, pool, attrs); -} diff --git a/hw/xprint/ps/PsCache.c b/hw/xprint/ps/PsCache.c deleted file mode 100644 index 5c823a13e..000000000 --- a/hw/xprint/ps/PsCache.c +++ /dev/null @@ -1,328 +0,0 @@ -/* - -Copyright 1996, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ -/* - * (c) Copyright 1996 Hewlett-Packard Company - * (c) Copyright 1996 International Business Machines Corp. - * (c) Copyright 1996, 2000 Sun Microsystems, Inc. All Rights Reserved. - * (c) Copyright 1996 Novell, Inc. - * (c) Copyright 1996 Digital Equipment Corp. - * (c) Copyright 1996 Fujitsu Limited - * (c) Copyright 1996 Hitachi, Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject - * to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF - * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Except as contained in this notice, the names of the copyright holders - * shall not be used in advertising or otherwise to promote the sale, use - * or other dealings in this Software without prior written authorization - * from said copyright holders. - */ - -/******************************************************************* -** -** ********************************************************* -** * -** * File: PsCache.c -** * -** * Contents: Character-caching routines -** * -** * Created By: Jay Hobson (Sun MicroSystems) -** * -** * Copyright: Copyright 1996 The Open Group, Inc. -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "Ps.h" -#include "gcstruct.h" -#include "windowstr.h" -#include -#include - -#define GET 0 -#define RESET 1 - -struct bm_cache_list { - struct bm_cache_list *next; - struct bm_cache_list *prev; - int height; - long id; - char *pBuffer; -}; - -struct bm_cache_head { - struct bm_cache_list *head; - int width; - struct bm_cache_head *next; - struct bm_cache_head *prev; -}; - -static struct bm_cache_head *bm_cache = NULL; - -static long -PsBmUniqueId(int func) -{ - static long unique_id = 0; - - if(func == RESET) - { - unique_id = 0; - return 0; - } - else - return ++unique_id; -} - -int -PsBmIsImageCached( - int gWidth, - int gHeight, - char *pBuffer) -{ - int return_val = 0; - struct bm_cache_head *pList = bm_cache; - - while(pList != NULL && !return_val) - { - if(pList->width == gWidth) - { - struct bm_cache_list *pItem = pList->head; - - while(pItem != NULL) - { - if(pItem->height == gHeight) - { - int length = 4*(gWidth/32+(gWidth%32!=0))*gHeight; - - if(!memcmp(pItem->pBuffer, pBuffer, sizeof(char)*length)) - { - return_val = pItem->id; - break; - } - } - else if(pItem->height > gHeight) - break; - - pItem = pItem->next; - } - } - else if(pList->width > gWidth) - break; - - pList = pList->next; - } - return return_val; -} - -int -PsBmPutImageInCache( - int gWidth, - int gHeight, - char *pBuffer) -{ - int return_val = 0; - struct bm_cache_head *pList = bm_cache; - struct bm_cache_list *pNew; - int length = 4*(gWidth/32+(gWidth%32!=0))*gHeight; - - if(gWidth == 1 && gHeight == 1 && pBuffer[0] == 0) - return return_val; - - pNew = (struct bm_cache_list *)malloc(sizeof(struct bm_cache_list)); - pNew->next = NULL; - pNew->prev = NULL; - pNew->height = gHeight; - pNew->id = PsBmUniqueId(GET); - pNew->pBuffer = (char *)malloc(sizeof(char)*length); - - memcpy(pNew->pBuffer, pBuffer, length); - - while(pList != NULL) - { - if(pList->width == gWidth) - { - struct bm_cache_list *pItem = pList->head; - - while(pItem != NULL) - { - if(pItem->height >= gHeight) - { - pNew->next = pItem; - pNew->prev = pItem->prev; - if(pItem->prev != NULL) - pItem->prev->next = pNew; - else - pList->head = pNew; - pItem->prev = pNew; - - return_val = pNew->id; - - break; - } - else if(pItem->next == NULL) - { - pNew->prev = pItem; - pItem->next = pNew; - - return_val = pNew->id; - - break; - } - - pItem = pItem->next; - } - - break; - } - - pList = pList->next; - } - - if(pList == NULL) - { - struct bm_cache_head *pNewList; - - pNewList = (struct bm_cache_head *)malloc(sizeof(struct bm_cache_head)); - - pNewList->next = NULL; - pNewList->prev = NULL; - pNewList->width = gWidth; - pNewList->head = pNew; - - if(bm_cache == NULL) - { - bm_cache = pNewList; - return_val = pNew->id; - } - else - { - pList = bm_cache; - - while(pList != NULL) - { - if(pList->width > gWidth) - { - pNewList->next = pList; - pNewList->prev = pList->prev; - - if(pList->prev != NULL) - pList->prev->next = pNewList; - else - bm_cache = pNewList; - pList->prev = pNewList; - - return_val = pNew->id; - - break; - } - else if(pList->next == NULL) - { - pNewList->prev = pList; - pList->next = pNewList; - - return_val = pNew->id; - - break; - } - - pList = pList->next; - } - } - } - - return return_val; -} - - -static void -PsBmClearImageCacheItem( - struct bm_cache_list *pItem) -{ - if(pItem != NULL) - { - if(pItem->pBuffer != NULL) - free(pItem->pBuffer); - pItem->pBuffer = NULL; - - if(pItem->next) - PsBmClearImageCacheItem(pItem->next); - pItem->next = NULL; - - free(pItem); - pItem = NULL; - } -} - -static void -PsBmClearImageCacheList( - struct bm_cache_head *pList) -{ - if(pList != NULL) - { - if(pList->head) - PsBmClearImageCacheItem(pList->head); - pList->head = NULL; - - if(pList->next) - PsBmClearImageCacheList(pList->next); - pList->next = NULL; - - free(pList); - pList = NULL; - } -} - -void -PsBmClearImageCache(void) -{ - PsBmClearImageCacheList(bm_cache); - - bm_cache = NULL; - - PsBmUniqueId(RESET); -} - diff --git a/hw/xprint/ps/PsColor.c b/hw/xprint/ps/PsColor.c deleted file mode 100644 index a91272db0..000000000 --- a/hw/xprint/ps/PsColor.c +++ /dev/null @@ -1,257 +0,0 @@ -/* - -Copyright 1996, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ -/* - * (c) Copyright 1996 Hewlett-Packard Company - * (c) Copyright 1996 International Business Machines Corp. - * (c) Copyright 1996 Sun Microsystems, Inc. - * (c) Copyright 1996 Novell, Inc. - * (c) Copyright 1996 Digital Equipment Corp. - * (c) Copyright 1996 Fujitsu Limited - * (c) Copyright 1996 Hitachi, Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject - * to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF - * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Except as contained in this notice, the names of the copyright holders - * shall not be used in advertising or otherwise to promote the sale, use - * or other dealings in this Software without prior written authorization - * from said copyright holders. - */ - -/******************************************************************* -** -** ********************************************************* -** * -** * File: PsColor.c -** * -** * Contents: Color routines for the PS driver -** * -** * Created By: Roger Helmendach (Liberty Systems) -** * -** * Copyright: Copyright 1996 The Open Group, Inc. -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "Ps.h" -#include "mi.h" -#include "micmap.h" -#include "gcstruct.h" -#include "windowstr.h" -#include "colormapst.h" - -Bool -PsCreateColormap(ColormapPtr pColor) -{ - return miInitializeColormap(pColor); -} - -void -PsDestroyColormap(ColormapPtr pColor) -{ - /* NO-OP */ -} - -void -PsInstallColormap(ColormapPtr pColor) -{ - miInstallColormap(pColor); -} - -void -PsUninstallColormap(ColormapPtr pColor) -{ - miUninstallColormap(pColor); -} - -int -PsListInstalledColormaps( - ScreenPtr pScreen, - XID *pCmapList) -{ - return miListInstalledColormaps(pScreen, pCmapList); -} - -void -PsStoreColors( - ColormapPtr pColor, - int ndef, - xColorItem *pdefs) -{ - int i; - for( i=0 ; ired[pdefs[i].pixel].co.local.red = pdefs[i].red; - if( pdefs[i].flags&DoGreen ) - pColor->red[pdefs[i].pixel].co.local.green = pdefs[i].green; - if( pdefs[i].flags&DoBlue ) - pColor->red[pdefs[i].pixel].co.local.blue = pdefs[i].blue; - } -} - -void -PsResolveColor( - unsigned short *pRed, - unsigned short *pGreen, - unsigned short *pBlue, - VisualPtr pVisual) -{ - miResolveColor(pRed, pGreen, pBlue, pVisual); -} - -PsOutColor -PsGetPixelColor(ColormapPtr cMap, int pixval) -{ - VisualPtr v = cMap->pVisual; - switch( v->class ) - { - case TrueColor: - { - PsOutColor p = pixval; - PsOutColor r, g, b; - - r = (p & v->redMask) >> v->offsetRed; - g = (p & v->greenMask) >> v->offsetGreen; - b = (p & v->blueMask) >> v->offsetBlue; - - r = cMap->red[r].co.local.red; - g = cMap->green[g].co.local.green; - b = cMap->blue[b].co.local.blue; - -#ifdef PSOUT_USE_DEEPCOLOR - return((r<<32)|(g<<16)|b); -#else - r >>= 8; - g >>= 8; - b >>= 8; - - return((r<<16)|(g<<8)|b); -#endif /* PSOUT_USE_DEEPCOLOR */ - } - case PseudoColor: - case GrayScale: - case StaticGray: - { - PsOutColor r, g, b; - - if( pixval < 0 || pixval > v->ColormapEntries) - return(0); - - r = cMap->red[pixval].co.local.red; - g = cMap->red[pixval].co.local.green; - b = cMap->red[pixval].co.local.blue; - - if ((v->class | DynamicClass) == GrayScale) - { - /* rescale to gray (see |miResolveColor()|) */ - r = g = b = (30L*r + 59L*g + 11L*b) / 100L; - } - -#ifdef PSOUT_USE_DEEPCOLOR - return((r<<32)|(g<<16)|b); -#else - r >>= 8; - g >>= 8; - b >>= 8; - - return((r<<16)|(g<<8)|b); -#endif /* PSOUT_USE_DEEPCOLOR */ - } - default: - FatalError("PsGetPixelColor: Unsupported visual %x\n", - (int)cMap->pVisual->class); - break; - } - - return 0; /* NO-OP*/ -} - -void -PsSetFillColor(DrawablePtr pDrawable, GCPtr pGC, PsOutPtr psOut, - ColormapPtr cMap) -{ - switch(pGC->fillStyle) - { - case FillSolid: - PsOut_Color(psOut, PsGetPixelColor(cMap, pGC->fgPixel)); - break; - case FillTiled: - if( !PsOut_BeginPattern(psOut, pGC->tile.pixmap, - pGC->tile.pixmap->drawable.width, - pGC->tile.pixmap->drawable.height, PsTile, 0, 0) ) - { - PsReplayPixmap(pGC->tile.pixmap, pDrawable); - PsOut_EndPattern(psOut); - } - PsOut_SetPattern(psOut, pGC->tile.pixmap, PsTile); - break; - case FillStippled: - if( !PsOut_BeginPattern(psOut, pGC->stipple, - pGC->stipple->drawable.width, - pGC->stipple->drawable.height, PsStip, 0, - PsGetPixelColor(cMap, pGC->fgPixel)) ) - { - PsReplayPixmap(pGC->stipple, pDrawable); - PsOut_EndPattern(psOut); - } - PsOut_SetPattern(psOut, pGC->stipple, PsStip); - break; - case FillOpaqueStippled: - if( !PsOut_BeginPattern(psOut, pGC->stipple, - pGC->stipple->drawable.width, - pGC->stipple->drawable.height, PsOpStip, - PsGetPixelColor(cMap, pGC->bgPixel), - PsGetPixelColor(cMap, pGC->fgPixel)) ) - { - PsReplayPixmap(pGC->stipple, pDrawable); - PsOut_EndPattern(psOut); - } - PsOut_SetPattern(psOut, pGC->stipple, PsOpStip); - break; - } -} diff --git a/hw/xprint/ps/PsDef.h b/hw/xprint/ps/PsDef.h deleted file mode 100644 index 5af274dec..000000000 --- a/hw/xprint/ps/PsDef.h +++ /dev/null @@ -1,96 +0,0 @@ -/* - -Copyright 1996, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ -/* - * (c) Copyright 1996 Hewlett-Packard Company - * (c) Copyright 1996 International Business Machines Corp. - * (c) Copyright 1996 Sun Microsystems, Inc. - * (c) Copyright 1996 Novell, Inc. - * (c) Copyright 1996 Digital Equipment Corp. - * (c) Copyright 1996 Fujitsu Limited - * (c) Copyright 1996 Hitachi, Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject - * to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF - * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Except as contained in this notice, the names of the copyright holders - * shall not be used in advertising or otherwise to promote the sale, use - * or other dealings in this Software without prior written authorization - * from said copyright holders. - */ - -/******************************************************************* -** -** ********************************************************* -** * -** * File: PsDef.h -** * -** * Contents: extran defines and includes for the Ps driver -** * for a printing X server. -** * -** * Created By: Roger Helmendach (Liberty Systems) -** * -** * Copyright: Copyright 1996 The Open Group, Inc. -** * -** ********************************************************* -** -********************************************************************/ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#ifndef _PSDEF_H_ -#define _PSDEF_H_ - -#define DT_PRINT_JOB_HEADER "DT_PRINT_JOB_HEADER" -#define DT_PRINT_JOB_TRAILER "DT_PRINT_JOB_TRAILER" -#define DT_PRINT_JOB_COMMAND "DT_PRINT_JOB_COMMAND" -#define DT_PRINT_JOB_EXEC_COMMAND "DT_PRINT_JOB_EXEC_COMMAND" -#define DT_PRINT_JOB_EXEC_OPTIONS "DT_PRINT_JOB_EXEC_OPTION" -#define DT_PRINT_PAGE_HEADER "DT_PRINT_PAGE_HEADER" -#define DT_PRINT_PAGE_TRAILER "DT_PRINT_PAGE_TRAILER" -#define DT_PRINT_PAGE_COMMAND "DT_PRINT_PAGE_COMMAND" - -#define DT_IN_FILE_STRING "%(InFile)%" -#define DT_OUT_FILE_STRING "%(OutFile)%" -#define DT_ALLOWED_COMMANDS_FILE "printCommands" - -#endif /* _PSDEF_H_ */ diff --git a/hw/xprint/ps/PsFTFonts.c b/hw/xprint/ps/PsFTFonts.c deleted file mode 100644 index 8857ae43e..000000000 --- a/hw/xprint/ps/PsFTFonts.c +++ /dev/null @@ -1,85 +0,0 @@ - -/* -Copyright (c) 2003-2004 Roland Mainz - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include - -#include "regionstr.h" -#include -#include "dixfontstr.h" -#include "scrnintstr.h" -#include -#include -#include - -#include "Ps.h" - -#include -#include FT_FREETYPE_H - -#include -#define NOT_IN_FTFUNCS -#include - -char * -PsGetFTFontFileName(FontPtr pFont) -{ - FTFontPtr tf = (FTFontPtr)pFont->fontPrivate; - return tf->instance->face->filename; -} - -Bool -PsIsFreeTypeFont(FontPtr pFont) -{ - int i; - int nprops = pFont->info.nprops; - FontPropPtr props = pFont->info.props; - /* "RASTERIZER_NAME" must match the rasterizer name set in - * xc/lib/font/FreeType/ftfuncs.c */ - Atom name = MakeAtom("RASTERIZER_NAME", 15, True); - Atom value = (Atom)0; - char *rv; - - for( i=0 ; i -#endif - -#include "regionstr.h" -#include -#include "dixfontstr.h" -#include "scrnintstr.h" -#include -#include -#include - -#include "Ps.h" - -#include -#include -#include - -Bool -PsRealizeFont( - ScreenPtr pscr, - FontPtr pFont) -{ - return TRUE; -} - -Bool -PsUnrealizeFont( - ScreenPtr pscr, - FontPtr pFont) -{ - return TRUE; -} - -char * -PsGetFontName(FontPtr pFont) -{ - int i; - int nprops = pFont->info.nprops; - FontPropPtr props = pFont->info.props; - Atom name = MakeAtom("FONT", 4, True); - Atom value = (Atom)0; - - for( i=0 ; iinfo.nprops; - FontPropPtr props = pFont->info.props; - /* "_ADOBE_POSTSCRIPT_FONTNAME" maps directly to a PMF OBJ_NAME attribute - * name - changing the name will break printer-builtin fonts. */ - Atom name = MakeAtom("_ADOBE_POSTSCRIPT_FONTNAME", 26, True); - Atom value = (Atom)0; - - for( i=0 ; iinfo.nprops; - FontPropPtr props = pFont->info.props; - Atom reg = MakeAtom("CHARSET_REGISTRY", 16, True); - Atom enc = MakeAtom("CHARSET_ENCODING", 16, True); - Atom rv = 0, ev = 0; - char *rp = 0; - char *ep = 0; - - for( i=0 ; iinfo.nprops; - FontPropPtr props = pFont->info.props; - Atom fnt = MakeAtom("FONT", 4, True); - Atom reg = MakeAtom("CHARSET_REGISTRY", 16, True); - Atom enc = MakeAtom("CHARSET_ENCODING", 16, True); - Atom fv = 0, rv = 0, ev = 0; - char *fp = 0; - char *rp = 0; - char *ep = 0; - char *encname; - - for( i=0 ; ifpe->name == "tcp/:7100")) - */ -static -Bool IsFPEaReadableDir(FontPtr pFont) -{ - const char *fpe_name = pFont->fpe->name; - if (!fpe_name) - return False; - -#define MODEL_FONTPATH_PREFIX "PRINTER:" -#define MODEL_FONTPATH_PREFIX_LEN 8 - /* Strip model-specific font path prefix if there is one... */ - if (!strncmp(fpe_name, MODEL_FONTPATH_PREFIX, MODEL_FONTPATH_PREFIX_LEN)) - fpe_name += MODEL_FONTPATH_PREFIX_LEN; - - if (access(fpe_name, F_OK) == 0) - { - return True; - } - - return False; -} - -static -char *getFontFilename(FontPtr pFont) -{ - FontDirectoryPtr dir; - const char *dlfnam; - FILE *file; - struct stat statb; - char buf[512]; - char *front, *fn; - char font_dir_fname[PATH_MAX], /* Full path of fonts.dir */ - font_file_fname[PATH_MAX]; /* Name of font file (excluding path) */ - -#ifdef XP_USE_FREETYPE - if( PsIsFreeTypeFont(pFont) ) - { - const char *fontname = PsGetFTFontFileName(pFont); - -#ifdef DEBUG_gisburn - fprintf(stderr, "getFontFilename: freetype font, file='%s'\n", fontname?fontname:""); -#endif /* DEBUG_gisburn */ - - if( !fontname ) - return NULL; - - return strdup(fontname); - } -#endif /* XP_USE_FREETYPE */ - - if (!IsFPEaReadableDir(pFont)) - { -#ifdef DEBUG_gisburn - fprintf(stderr, "getFontFilename: '%s' no valid font path on disk\n", pFont->fpe->name); -#endif /* DEBUG_gisburn */ - return NULL; - } - - dir = pFont->fpe->private; - sprintf(font_dir_fname, "%s%s", dir->directory, "fonts.dir"); - - if (!(dlfnam = PsGetFontName(pFont))) - return NULL; - - file = fopen(font_dir_fname, "r"); - if (file) - { - if (fstat (fileno(file), &statb) == -1) - return NULL; - - while( fgets(buf, sizeof(buf)-1, file) ) - { - if ((fn = strstr(buf, " -"))) - { - strcpy(font_file_fname, buf); - font_file_fname[fn - buf] = '\0'; - fn++; - if ((front = str_case_str(fn, "normal-"))) - { - fn[front - fn] = '\0'; - if (str_case_str(dlfnam, fn)) - { - char full_font_file_path[PATH_MAX]; - - fclose(file); - - sprintf(full_font_file_path, "%s%s", dir->directory, font_file_fname); - -#ifdef xDEBUG_gisburn - fprintf(stderr, "getFontFilename: returning '%s'\n", full_font_file_path); -#endif /* DEBUG_gisburn */ - return strdup(full_font_file_path); - } - } - } - } - } - font_file_fname[0] = '\0'; - fclose(file); - -#ifdef DEBUG_gisburn - fprintf(stderr, "getFontFilename: returning NULL\n"); -#endif /* DEBUG_gisburn */ - - return NULL; -} - -static -PsFontTypeInfoRec *PsFindFontTypeInfoRec(DrawablePtr pDrawable, FontPtr pFont) -{ - PsContextPrivRec *cPriv = PsGetPsContextPriv(pDrawable); - PsFontTypeInfoRec *rec; - const char *psname; - char *font_filename; - char *encname; -#ifdef XP_USE_FREETYPE - Bool is_freetypefont; -#endif /* XP_USE_FREETYPE */ - -#ifdef XP_USE_FREETYPE - is_freetypefont = PsIsFreeTypeFont(pFont); -#endif /* XP_USE_FREETYPE */ - encname = PsGetEncodingName(pFont); - - /* First try: Search by PostScript font name */ - psname = PsGetPSFontName(pFont); - if (psname) - { - for( rec = cPriv->fontTypeInfoRecords ; rec != NULL ; rec = rec->next ) - { -#ifdef XP_USE_FREETYPE - if (is_freetypefont) - { - if (rec->adobe_ps_name) - { - if ((rec->font_type == PSFTI_FONT_TYPE_FREETYPE) && - (!strcmp(rec->adobe_ps_name, psname)) && - (!strcmp(rec->ft_download_encoding, encname))) - { - return rec; - } - } - } - else -#endif /* XP_USE_FREETYPE */ - { - if (rec->adobe_ps_name) - { - if ((rec->font_type != PSFTI_FONT_TYPE_FREETYPE) && - (!strcmp(rec->adobe_ps_name, psname))) - { - return rec; - } - } - } - } - } - - /* Last attempt: Search by filename */ - font_filename = getFontFilename(pFont); - if (font_filename) - { - for( rec = cPriv->fontTypeInfoRecords ; rec != NULL ; rec = rec->next ) - { - if (rec->filename) - { -#ifdef XP_USE_FREETYPE - if (is_freetypefont) - { - if ( (rec->font_type == PSFTI_FONT_TYPE_FREETYPE) && - (!strcasecmp(rec->filename, font_filename)) && - (!strcasecmp(rec->ft_download_encoding, encname)) ) - { - free(font_filename); - return rec; - } - } - else -#endif /* XP_USE_FREETYPE */ - { - if ( (rec->font_type != PSFTI_FONT_TYPE_FREETYPE) && - (!strcasecmp(rec->filename, font_filename)) ) - { - free(font_filename); - return rec; - } - } - } - } - - free(font_filename); - } - - return NULL; -} - -static -void PsAddFontTypeInfoRec(DrawablePtr pDrawable, PsFontTypeInfoRec *add_rec) -{ - PsContextPrivRec *cPriv = PsGetPsContextPriv(pDrawable); - - /* ToDO: Always move the last used entry to the top that the list get's - * sorted in an efficient order... :-) */ - add_rec->next = cPriv->fontTypeInfoRecords; - cPriv->fontTypeInfoRecords = add_rec; -} - -static -Bool strcaseendswith(const char *str, const char *suffix) -{ - const char *s; - - s = str + strlen(str) - strlen(suffix); - - if (!strcasecmp(s, suffix)) - return True; - - return False; -} - - -static -int getFontFileType( const char *filename ) -{ - int type; - - /* Is this a Adobe PostScript Type 1 binary font (PFB) ? */ - if( strcaseendswith(filename, ".pfb") ) - { - type = PSFTI_FONT_TYPE_PS_TYPE1_PFB; - } - /* Is this a Adobe PostScript ASCII font (PFA) ? */ - else if( strcaseendswith(filename, ".pfa") ) - { - type = PSFTI_FONT_TYPE_PS_TYPE1_PFA; - } - /* Is this a PMF(=Printer Metrics File) ? */ - else if( strcaseendswith(filename, ".pmf") ) - { - type = PSFTI_FONT_TYPE_PMF; - } - /* Is this a TrueType font file ? */ - else if( strcaseendswith(filename, ".ttf") || - strcaseendswith(filename, ".ttc") || - strcaseendswith(filename, ".otf") || - strcaseendswith(filename, ".otc") ) - { - type = PSFTI_FONT_TYPE_TRUETYPE; - } - else - { - type = PSFTI_FONT_TYPE_OTHER; - } - -#ifdef XP_USE_FREETYPE - { - XpContextPtr pCon; - char *downloadfonts; - pCon = XpGetPrintContext(requestingClient); - downloadfonts = XpGetOneAttribute(pCon, XPPrinterAttr, "xp-psddx-download-fonts"); - if( downloadfonts ) - { - /* Should we download PS Type1 fonts as PS Type1||Type3 ? */ - if( (type == PSFTI_FONT_TYPE_PS_TYPE1_PFA) && - (strstr(downloadfonts, "pfa") != NULL) ) - { - type = PSFTI_FONT_TYPE_FREETYPE; - } - - if( (type == PSFTI_FONT_TYPE_PS_TYPE1_PFB) && - (strstr(downloadfonts, "pfb") != NULL) ) - { - type = PSFTI_FONT_TYPE_FREETYPE; - } - - /* Should we download TrueType fonts as PS Type1||Type3 ? */ - if( (type == PSFTI_FONT_TYPE_TRUETYPE) && - ((strstr(downloadfonts, "ttf") != NULL) || - (strstr(downloadfonts, "ttc") != NULL) || - (strstr(downloadfonts, "otf") != NULL) || - (strstr(downloadfonts, "otc") != NULL)) ) - { - type = PSFTI_FONT_TYPE_FREETYPE; - } - } - } -#endif /* XP_USE_FREETYPE */ - -#ifdef DEBUG_gisburn - fprintf(stderr, "getFontFileType: '%s' is %d\n", filename, (int)type); -#endif /* DEBUG_gisburn */ - return type; -} - -PsFTDownloadFontType PsGetFTDownloadFontType(void) -{ - PsFTDownloadFontType downloadfonttype; - XpContextPtr pCon; - char *psfonttype; - - pCon = XpGetPrintContext(requestingClient); - psfonttype = XpGetOneAttribute(pCon, XPPrinterAttr, "xp-psddx-download-font-type"); - - if( !psfonttype || !strlen(psfonttype) ) - { - return PsFontType1; /* Default download font type is PS Type1 */ - } - - if( !strcmp(psfonttype, "bitmap") ) - { - downloadfonttype = PsFontBitmap; - } - else if( !strcmp(psfonttype, "pstype3") ) - { - downloadfonttype = PsFontType3; - } - else if( !strcmp(psfonttype, "pstype1") ) - { - downloadfonttype = PsFontType1; - } - else - { - FatalError("PS DDX: XPPrinterAttr/xp-psddx-download-freetype-font-type='%s' not implemented\n", psfonttype); - return 0; /* NO-OP, FatalError() will call |exit()| */ - } - - return downloadfonttype; -} - -static -PsFontTypeInfoRec *PsCreateFontTypeInfoRec(DrawablePtr pDrawable, FontPtr pFont) -{ - char *dlfnam; - PsFontTypeInfoRec *rec; - - if (!(dlfnam = PsGetFontName(pFont))) - return NULL; - - if (!(rec = (PsFontTypeInfoRec *)xalloc(sizeof(PsFontTypeInfoRec)))) - return NULL; - memset(rec, 0, sizeof(PsFontTypeInfoRec)); - - rec->next = NULL; - - if ((rec->filename = getFontFilename(pFont))) - { - rec->font_type = getFontFileType(rec->filename); - } - else - { - rec->filename = NULL; - rec->font_type = PSFTI_FONT_TYPE_OTHER; - } - - rec->adobe_ps_name = PsGetPSFontName(pFont); -#ifdef XP_USE_FREETYPE - rec->ft_download_encoding = PsGetEncodingName(pFont); - rec->ft_download_font_type = PsGetFTDownloadFontType(); -#endif /* XP_USE_FREETYPE */ - rec->download_ps_name = NULL; - -#define SET_FONT_DOWNLOAD_STATUS(rec, downloaded) { int i; for (i = 0 ; i < 256 ; i++) { (rec)->alreadyDownloaded[i]=(downloaded); } } - - /* Set some flags based on the font type */ - switch( rec->font_type ) - { - case PSFTI_FONT_TYPE_PS_TYPE1_PFA: - case PSFTI_FONT_TYPE_PS_TYPE1_PFB: - rec->downloadableFont = True; - SET_FONT_DOWNLOAD_STATUS(rec, False); - rec->is_iso_encoding = PsIsISOLatin1Encoding(pFont); - break; - - case PSFTI_FONT_TYPE_PMF: - rec->downloadableFont = True; /* This font is in printer's ROM */ - SET_FONT_DOWNLOAD_STATUS(rec, True); - rec->is_iso_encoding = PsIsISOLatin1Encoding(pFont); - break; - - case PSFTI_FONT_TYPE_TRUETYPE: - /* Note: TrueType font download not implemented */ - rec->downloadableFont = False; - SET_FONT_DOWNLOAD_STATUS(rec, False); - rec->is_iso_encoding = PsIsISOLatin1Encoding(pFont); - break; - -#ifdef XP_USE_FREETYPE - case PSFTI_FONT_TYPE_FREETYPE: - if( rec->ft_download_font_type == PsFontType1 || - rec->ft_download_font_type == PsFontType3 ) - { - rec->downloadableFont = True; - } - else - { - rec->downloadableFont = False; - } - - SET_FONT_DOWNLOAD_STATUS(rec, False); - rec->is_iso_encoding = False; /* Freetype--->PS Type1/Type3 uses always non-iso PS encoding for now */ - break; -#endif /* XP_USE_FREETYPE */ - - case PSFTI_FONT_TYPE_OTHER: - default: - rec->downloadableFont = False; - SET_FONT_DOWNLOAD_STATUS(rec, False); - rec->is_iso_encoding = PsIsISOLatin1Encoding(pFont); - break; - } - -#ifdef XP_USE_FREETYPE - if( (rec->font_type == PSFTI_FONT_TYPE_FREETYPE) ) - { - char *s; - register int c; - - if( rec->adobe_ps_name ) - { - rec->download_ps_name = malloc(strlen(rec->adobe_ps_name) + strlen(rec->ft_download_encoding) + 2); - sprintf(rec->download_ps_name, "%s_%s", rec->adobe_ps_name, rec->ft_download_encoding); - } - else - { - /* Unfortunately not all TTF fonts have a PostScript font name (like - * Solaris TTF fonts in /usr/openwin/lib/locale/ko.UTF-8/X11/fonts/TrueType, - * /usr/openwin/lib/locale/ko/X11/fonts/TrueType) - in this case we - * have to generate a font name - */ - char ftfontname[64]; - static long myfontindex = 0L; - sprintf(ftfontname, "psfont_%lx", myfontindex++); - - rec->download_ps_name = malloc(strlen(ftfontname) + strlen(rec->ft_download_encoding) + 2); - sprintf(rec->download_ps_name, "%s_%s", ftfontname, rec->ft_download_encoding); - - fprintf(stderr, "PsCreateFontTypeInfoRec: Note: '%s' has no PS font name, using '%s' for now.\n", dlfnam, rec->download_ps_name); - } - - /* Make sure the font name we use for download is a valid PS font name */ - for( s = rec->download_ps_name ; *s != '\0'; s++ ) - { - c = *s; - - /* Check for allowed chars, invalid ones are replaced with a '_' - * (and check that the first char is not a digit) */ - if( !(isalnum(c) || c == '.' || c == '_' || c == '-') || (s==rec->download_ps_name && isdigit(c)) ) - { - *s = '_'; - } - } - } - else -#endif /* XP_USE_FREETYPE */ - { - if( rec->adobe_ps_name ) - { - rec->download_ps_name = strdup(rec->adobe_ps_name); - } - else - { - rec->download_ps_name = NULL; - } - } - - /* Safeguard - only treat font as downloadable when we have a PS font name!! */ - if (!rec->download_ps_name && rec->downloadableFont) - { - /* XXX: Log this message to the log when the logging service has been hook'ed up */ - fprintf(stderr, "PsCreateFontTypeInfoRec: Safeguard: No PS font name for '%s'!\n", dlfnam); - rec->downloadableFont = False; - } - -#ifdef DEBUG_gisburn - fprintf(stderr, "PsCreateFontTypeInfoRec: Created PsFontTypeInfoRec '%s' ('%s'/'%s')\n", - ((rec->filename) ?(rec->filename) :("")), - ((rec->adobe_ps_name) ?(rec->adobe_ps_name):("")), - ((rec->download_ps_name)?(rec->download_ps_name):(""))); -#endif /* DEBUG_gisburn */ - - return rec; -} - -static -PsFontTypeInfoRec *PsGetFontTypeInfoRec(DrawablePtr pDrawable, FontPtr pFont) -{ - PsFontTypeInfoRec *rec; - char *dlfnam; - - if(!(dlfnam = PsGetFontName(pFont))) - return NULL; - - rec = PsFindFontTypeInfoRec(pDrawable, pFont); - if (rec) - return rec; - - rec = PsCreateFontTypeInfoRec(pDrawable, pFont); - if (!rec) - return NULL; - - PsAddFontTypeInfoRec(pDrawable, rec); - - return rec; -} - -static -void PsFreeFontTypeInfoRecords( PsContextPrivPtr priv ) -{ - PsFontTypeInfoRec *curr, *next; - curr = priv->fontTypeInfoRecords; - while( curr != NULL ) - { - if (curr->filename) - free(curr->filename); /* Free memory allocated by |strdup()| */ - - if (curr->download_ps_name) - free(curr->download_ps_name); - - next = curr->next; - xfree(curr); - curr = next; - } -} - -static -PsFontInfoRec *PsFindFontInfoRec(DrawablePtr pDrawable, FontPtr pFont) -{ - PsContextPrivRec *cPriv = PsGetPsContextPriv(pDrawable); - PsFontInfoRec *rec; - - if (!pFont) - return NULL; - - for( rec = cPriv->fontInfoRecords ; rec != NULL ; rec = rec->next ) - { - if ((rec->font == pFont) && - (rec->font_fontPrivate == pFont->fontPrivate)) - return rec; - } - - return NULL; -} - -static -void PsAddFontInfoRec(DrawablePtr pDrawable, PsFontInfoRec *add_rec) -{ - PsContextPrivRec *cPriv = PsGetPsContextPriv(pDrawable); - - /* ToDO: Always move the last used entry to the top that the list get's - * sorted in an efficient order... :-) */ - add_rec->next = cPriv->fontInfoRecords; - cPriv->fontInfoRecords = add_rec; -} - -static -PsFontInfoRec *PsCreateFontInfoRec(DrawablePtr pDrawable, FontPtr pFont) -{ - PsFontInfoRec *rec; - PsFontTypeInfoRec *ftir; - - if (!(ftir = PsGetFontTypeInfoRec(pDrawable, pFont))) - return NULL; - - if (!(rec = (PsFontInfoRec *)xalloc(sizeof(PsFontInfoRec)))) - return NULL; - memset(rec, 0, sizeof(PsFontInfoRec)); - - rec->font = pFont; - rec->font_fontPrivate = pFont->fontPrivate; - rec->ftir = ftir; - rec->next = NULL; - rec->dfl_name = PsGetFontName(pFont); - rec->size = PsGetFontSize(pFont, rec->mtx); - -#ifdef DEBUG_gisburn - fprintf(stderr, "PsCreateFontInfoRec: Created PsFontInfoRec '%s'\n", - ((rec->dfl_name)?(rec->dfl_name):(""))); -#endif /* DEBUG_gisburn */ - - return rec; -} - -PsFontInfoRec *PsGetFontInfoRec(DrawablePtr pDrawable, FontPtr pFont) -{ - PsFontInfoRec *rec; - - rec = PsFindFontInfoRec(pDrawable, pFont); - if (rec) - return rec; - - rec = PsCreateFontInfoRec(pDrawable, pFont); - if (!rec) - return NULL; - - PsAddFontInfoRec(pDrawable, rec); - - return rec; -} - -void PsFreeFontInfoRecords( PsContextPrivPtr priv ) -{ - PsFontInfoRec *curr, *next; - curr = priv->fontInfoRecords; - while( curr != NULL ) - { - next = curr->next; - xfree(curr); - curr = next; - } - - PsFreeFontTypeInfoRecords(priv); - - priv->fontTypeInfoRecords = NULL; - priv->fontInfoRecords = NULL; -} diff --git a/hw/xprint/ps/PsGC.c b/hw/xprint/ps/PsGC.c deleted file mode 100644 index 19898c90e..000000000 --- a/hw/xprint/ps/PsGC.c +++ /dev/null @@ -1,418 +0,0 @@ -/* - -Copyright 1996, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ -/* - * (c) Copyright 1996 Hewlett-Packard Company - * (c) Copyright 1996 International Business Machines Corp. - * (c) Copyright 1996 Sun Microsystems, Inc. - * (c) Copyright 1996 Novell, Inc. - * (c) Copyright 1996 Digital Equipment Corp. - * (c) Copyright 1996 Fujitsu Limited - * (c) Copyright 1996 Hitachi, Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject - * to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF - * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Except as contained in this notice, the names of the copyright holders - * shall not be used in advertising or otherwise to promote the sale, use - * or other dealings in this Software without prior written authorization - * from said copyright holders. - */ - -/******************************************************************* -** -** ********************************************************* -** * -** * File: PsGC.c -** * -** * Contents: Graphics Context handling for the PS driver -** * -** * Created By: Roger Helmendach (Liberty Systems) -** * -** * Copyright: Copyright 1996 The Open Group, Inc. -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "Ps.h" -#include "gcstruct.h" -#include "pixmapstr.h" -#include "windowstr.h" -#include "migc.h" -#include "scrnintstr.h" - -static GCOps PsGCOps = -{ - PsFillSpans, - PsSetSpans, - PsPutImage, - PsCopyArea, - PsCopyPlane, - PsPolyPoint, - PsPolyLine, - PsPolySegment, - PsPolyRectangle, - PsPolyArc, - PsFillPolygon, - PsPolyFillRect, - PsPolyFillArc, - PsPolyText8, - PsPolyText16, - PsImageText8, - PsImageText16, - PsImageGlyphBlt, - PsPolyGlyphBlt, - PsPushPixels -}; - - -static GCFuncs PsGCFuncs = -{ - PsValidateGC, - PsChangeGC, - PsCopyGC, - PsDestroyGC, - PsChangeClip, - PsDestroyClip, - PsCopyClip -}; - -Bool -PsCreateGC(pGC) - GCPtr pGC; -{ - pGC->clientClip = NULL; - pGC->clientClipType = CT_NONE; - - pGC->ops = &PsGCOps; - pGC->funcs = &PsGCFuncs; - - pGC->clientClip = (pointer)xalloc(sizeof(PsClipRec)); - memset(pGC->clientClip, 0, sizeof(PsClipRec)); - return TRUE; -} - -static int -PsGetDrawablePrivateStuff( - DrawablePtr pDrawable, - GC *gc, - unsigned long *valid, - PsOutPtr *psOut, - ColormapPtr *cMap) -{ - XpContextPtr pCon; - PsContextPrivPtr cPriv; - PsScreenPrivPtr sPriv; - - switch(pDrawable->type) - { - case DRAWABLE_PIXMAP: - return FALSE; - case DRAWABLE_WINDOW: - pCon = PsGetContextFromWindow((WindowPtr)pDrawable); - if( pCon==NULL ) return FALSE; - else - { - Colormap c; - ColormapPtr cmap; - - c = wColormap((WindowPtr)pDrawable); - cmap = (ColormapPtr)LookupIDByType(c, RT_COLORMAP); - - cPriv = (PsContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PsContextPrivateKey); - sPriv = (PsScreenPrivPtr) - dixLookupPrivate(&pDrawable->pScreen->devPrivates, - PsScreenPrivateKey); - *gc = cPriv->lastGC; - *valid = cPriv->validGC; - *psOut = cPriv->pPsOut; - *cMap = cmap; - return TRUE; - } - default: - return FALSE; - } -} - -PsContextPrivPtr -PsGetPsContextPriv( DrawablePtr pDrawable ) -{ - XpContextPtr pCon; - - switch(pDrawable->type) - { - case DRAWABLE_PIXMAP: - return FALSE; - case DRAWABLE_WINDOW: - pCon = PsGetContextFromWindow((WindowPtr)pDrawable); - if (pCon != NULL) - { - return (PsContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PsContextPrivateKey); - } - } - return NULL; -} - -int -PsUpdateDrawableGC( - GCPtr pGC, - DrawablePtr pDrawable, - PsOutPtr *psOut, - ColormapPtr *cMap) -{ - GC dGC; - unsigned long valid; - int i; - PsContextPrivPtr cPriv; - BoxPtr boxes; - - if (!PsGetDrawablePrivateStuff(pDrawable, &dGC, &valid, psOut, cMap)) - return FALSE; - - switch (pDrawable->type) { - - case DRAWABLE_PIXMAP: - /* we don't support pixmaps yet! */ - return FALSE; - break; - case DRAWABLE_WINDOW: - if( pGC ) - { - RegionPtr pReg; - WindowPtr pWin = (WindowPtr)pDrawable; - Bool freeClip; - PsClipPtr clp = (PsClipPtr)pGC->clientClip; - if( clp->outterClips ) - { xfree(clp->outterClips); clp->outterClips = 0; } - clp->nOutterClips = 0; - if( pGC->subWindowMode==IncludeInferiors ) - { - pReg = NotClippedByChildren(pWin); - freeClip = TRUE; - } - else - { - pReg = &pWin->clipList; - freeClip = FALSE; - } - - if( pReg->data ) - { - boxes = (BoxPtr)((char *)pReg->data+sizeof(long)*2); - clp->nOutterClips = pReg->data->numRects; - clp->outterClips = - (PsRectPtr)xalloc(clp->nOutterClips*sizeof(PsRectRec)); - for( i=0 ; inOutterClips ; i++ ) - { - clp->outterClips[i].x = boxes[i].x1; - clp->outterClips[i].y = boxes[i].y1; - clp->outterClips[i].w = (boxes[i].x2-boxes[i].x1)+1; - clp->outterClips[i].h = (boxes[i].y2-boxes[i].y1)+1; - } - } - - if( freeClip ) REGION_DESTROY(pGC->pScreen, pReg); - PsOut_Offset(*psOut, pDrawable->x, pDrawable->y); - PsOut_Clip(*psOut, pGC->clientClipType, (PsClipPtr)pGC->clientClip); - } - cPriv = (PsContextPrivPtr)dixLookupPrivate( - &PsGetContextFromWindow((WindowPtr)pDrawable)->devPrivates, - PsContextPrivateKey); - break; - } - return TRUE; -} - -void -PsValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable) -{ - pGC->ops = &PsGCOps; -} - -void -PsChangeGC(GCPtr pGC, unsigned long changes) -{ -} - -void -PsCopyGC(GCPtr pGCSrc, unsigned long mask, GCPtr pGCDst) -{ -} - -void -PsDestroyGC(GCPtr pGC) -{ - PsDestroyClip(pGC); - xfree(pGC->clientClip); -} - -void -PsChangeClip(GCPtr pGC, int type, pointer pValue, int nrects) -{ - int i; - PsClipPtr clp = (PsClipPtr)pGC->clientClip; - RegionPtr rgn; - BoxPtr boxes; - xRectangle *rects; - - PsDestroyClip(pGC); - pGC->clientClipType = type; - switch(type) - { - case CT_NONE: break; - case CT_PIXMAP: - clp->elms = PsCreateFillElementList((PixmapPtr)pValue, &clp->nElms); - (*pGC->pScreen->DestroyPixmap)((PixmapPtr)pValue); - break; - case CT_REGION: - rgn = (RegionPtr)pValue; - boxes = (BoxPtr)((char *)rgn->data+sizeof(long)*2); - clp->nRects = rgn->data->numRects; - clp->rects = (PsRectPtr)xalloc(clp->nRects*sizeof(PsRectRec)); - for( i=0 ; inRects ; i++ ) - { - clp->rects[i].x = boxes[i].x1; - clp->rects[i].y = boxes[i].y1; - clp->rects[i].w = (boxes[i].x2-boxes[i].x1)+1; - clp->rects[i].h = (boxes[i].y2-boxes[i].y1)+1; - } - REGION_DESTROY(pGC->pScreen, (RegionPtr)pValue); - break; - case CT_UNSORTED: - case CT_YSORTED: - case CT_YXSORTED: - case CT_YXBANDED: - rects = (xRectangle *)pValue; - clp->nRects = nrects; - clp->rects = (PsRectPtr)xalloc(clp->nRects*sizeof(PsRectRec)); - for( i=0 ; inRects ; i++ ) - { - clp->rects[i].x = rects[i].x; - clp->rects[i].y = rects[i].y; - clp->rects[i].w = rects[i].width; - clp->rects[i].h = rects[i].height; - } - xfree(pValue); - break; - } -} - -void -PsDestroyClip(GCPtr pGC) -{ - PsClipPtr clp = (PsClipPtr)pGC->clientClip; - - if( clp->rects ) xfree(clp->rects); - if( clp->outterClips ) xfree(clp->outterClips); - clp->rects = (PsRectPtr)0; - clp->outterClips = (PsRectPtr)0; - clp->nRects = 0; - clp->nOutterClips = 0; - if( clp->elms ) PsDestroyFillElementList(clp->nElms, clp->elms); - clp->elms = (PsElmPtr)0; - clp->nElms = 0; - pGC->clientClipType = CT_NONE; -} - -void -PsCopyClip(GCPtr pDst, GCPtr pSrc) -{ - PsClipPtr src = (PsClipPtr)pSrc->clientClip; - PsClipPtr dst = (PsClipPtr)pDst->clientClip; - - PsDestroyClip(pDst); - pDst->clientClipType = pSrc->clientClipType; - *dst = *src; - if( src->rects ) - { - dst->rects = (PsRectPtr)xalloc(src->nRects*sizeof(PsRectRec)); - memcpy(dst->rects, src->rects, src->nRects*sizeof(PsRectRec)); - } - if( src->elms ) - dst->elms = PsCloneFillElementList(src->nElms, src->elms); -} - - -GCPtr -PsCreateAndCopyGC(DrawablePtr pDrawable, GCPtr pSrc) -{ - GCPtr pDst; - - if (pSrc == NULL) { - /* https://freedesktop.org/bugzilla/show_bug.cgi?id=1416 ("'x11perf - * -copypixpix500' crashes Xprt's PostScript DDX [PsCreateAndCopyGC"): - * I have no clue whether this is the real fix or just wallpapering - * over the crash (that's why we warn here loudly when this - * happens) ... */ - fprintf(stderr, "PsCreateAndCopyGC: pSrc == NULL\n"); - return NULL; - } - - if ((pDst = - CreateScratchGC(pDrawable->pScreen, pDrawable->depth)) == NULL) - { - return NULL; - } - - if (CopyGC(pSrc, pDst, - GCFunction | GCPlaneMask | GCForeground | GCBackground | - GCLineWidth | GCLineStyle | GCCapStyle | GCJoinStyle | - GCFillStyle | GCFillRule | GCTile | GCStipple | - GCTileStipXOrigin | GCTileStipYOrigin | GCFont | - GCSubwindowMode | GCGraphicsExposures | GCClipXOrigin | - GCClipYOrigin | GCClipMask | GCDashOffset | GCDashList | - GCArcMode) != Success) - { - (void)FreeGC(pDst, (GContext)0); - - return NULL; - } - - return pDst; -} - diff --git a/hw/xprint/ps/PsImageUtil.c b/hw/xprint/ps/PsImageUtil.c deleted file mode 100644 index 668a23f65..000000000 --- a/hw/xprint/ps/PsImageUtil.c +++ /dev/null @@ -1,329 +0,0 @@ - -/* -Copyright (c) 2005 Roland Mainz - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -/* Please do not beat me for this ugly code - most of it has been stolen from - * xc/lib/X11/ImUtil.c */ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "Ps.h" -#include "gcstruct.h" -#include "windowstr.h" -#include "servermd.h" -#include "attributes.h" - -static unsigned char const _reverse_byte[0x100] = { - 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0, - 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0, - 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8, - 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8, - 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4, - 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4, - 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec, - 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc, - 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2, - 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2, - 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea, - 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa, - 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6, - 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6, - 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee, - 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe, - 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1, - 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1, - 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9, - 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9, - 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5, - 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5, - 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed, - 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd, - 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3, - 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3, - 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb, - 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb, - 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7, - 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7, - 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef, - 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff -}; - -static -int XReverse_Bytes( - register unsigned char *bpt, - register int nb) -{ - do { - *bpt = _reverse_byte[*bpt]; - bpt++; - } while (--nb > 0); - return 0; -} - -/* - * Data structure for "image" data, used by image manipulation routines. - */ -typedef struct { - int width, height; /* size of image */ - int xoffset; /* number of pixels offset in X direction */ - int format; /* XYBitmap, XYPixmap, ZPixmap */ - char *data; /* pointer to image data */ - int byte_order; /* data byte order, LSBFirst, MSBFirst */ - int bitmap_unit; /* quant. of scanline 8, 16, 32 */ - int bitmap_bit_order; /* LSBFirst, MSBFirst */ - int depth; /* depth of image */ - int bytes_per_line; /* accelarator to next line */ - int bits_per_pixel; /* bits per pixel (ZPixmap) */ -} TmpImage; - - -static void xynormalizeimagebits ( - register unsigned char *bp, - register TmpImage *img) -{ - register unsigned char c; - - if (img->byte_order != img->bitmap_bit_order) { - switch (img->bitmap_unit) { - - case 16: - c = *bp; - *bp = *(bp + 1); - *(bp + 1) = c; - break; - - case 32: - c = *(bp + 3); - *(bp + 3) = *bp; - *bp = c; - c = *(bp + 2); - *(bp + 2) = *(bp + 1); - *(bp + 1) = c; - break; - } - } - if (img->bitmap_bit_order == MSBFirst) - XReverse_Bytes (bp, img->bitmap_unit >> 3); -} - -static void znormalizeimagebits ( - register unsigned char *bp, - register TmpImage *img) -{ - register unsigned char c; - switch (img->bits_per_pixel) { - - case 4: - *bp = ((*bp >> 4) & 0xF) | ((*bp << 4) & ~0xF); - break; - - case 16: - c = *bp; - *bp = *(bp + 1); - *(bp + 1) = c; - break; - - case 24: - c = *(bp + 2); - *(bp + 2) = *bp; - *bp = c; - break; - - case 32: - c = *(bp + 3); - *(bp + 3) = *bp; - *bp = c; - c = *(bp + 2); - *(bp + 2) = *(bp + 1); - *(bp + 1) = c; - break; - } -} - -/* - * Macros - * - * The ROUNDUP macro rounds up a quantity to the specified boundary, - * then truncates to bytes. - * - * The XYNORMALIZE macro determines whether XY format data requires - * normalization and calls a routine to do so if needed. The logic in - * this module is designed for LSBFirst byte and bit order, so - * normalization is done as required to present the data in this order. - * - * The ZNORMALIZE macro performs byte and nibble order normalization if - * required for Z format data. - * - * The XYINDEX macro computes the index to the starting byte (char) boundary - * for a bitmap_unit containing a pixel with coordinates x and y for image - * data in XY format. - * - * The ZINDEX macro computes the index to the starting byte (char) boundary - * for a pixel with coordinates x and y for image data in ZPixmap format. - * - */ - -#if defined(Lynx) && defined(ROUNDUP) -#undef ROUNDUP -#endif - -#define ROUNDUP(nbytes, pad) ((((nbytes) + ((pad)-1)) / (pad)) * ((pad)>>3)) - -#define XYNORMALIZE(bp, img) \ - if ((img->byte_order == MSBFirst) || (img->bitmap_bit_order == MSBFirst)) \ - xynormalizeimagebits((unsigned char *)(bp), img) - -#define ZNORMALIZE(bp, img) \ - if (img->byte_order == MSBFirst) \ - znormalizeimagebits((unsigned char *)(bp), img) - -#define XYINDEX(x, y, img) \ - ((y) * img->bytes_per_line) + \ - (((x) + img->xoffset) / img->bitmap_unit) * (img->bitmap_unit >> 3) - -#define ZINDEX(x, y, img) ((y) * img->bytes_per_line) + \ - (((x) * img->bits_per_pixel) >> 3) - -/* - * GetPixel - * - * Returns the specified pixel. The X and Y coordinates are relative to - * the origin (upper left [0,0]) of the image. The pixel value is returned - * in normalized format, i.e. the LSB of the long is the LSB of the pixel. - * The algorithm used is: - * - * copy the source bitmap_unit or Zpixel into temp - * normalize temp if needed - * extract the pixel bits into return value - * - */ - -static unsigned long const low_bits_table[] = { - 0x00000000, 0x00000001, 0x00000003, 0x00000007, - 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f, - 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff, - 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, - 0x0000ffff, 0x0001ffff, 0x0003ffff, 0x0007ffff, - 0x000fffff, 0x001fffff, 0x003fffff, 0x007fffff, - 0x00ffffff, 0x01ffffff, 0x03ffffff, 0x07ffffff, - 0x0fffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff, - 0xffffffff -}; - -static unsigned long XGetPixel (TmpImage *ximage, int x, int y) -{ - unsigned long pixel, px; - register char *src; - register char *dst; - register int i, j; - int bits, nbytes; - long plane; - - if ((ximage->bits_per_pixel | ximage->depth) == 1) { - src = &ximage->data[XYINDEX(x, y, ximage)]; - dst = (char *)&pixel; - pixel = 0; - for (i = ximage->bitmap_unit >> 3; --i >= 0; ) *dst++ = *src++; - XYNORMALIZE(&pixel, ximage); - bits = (x + ximage->xoffset) % ximage->bitmap_unit; - pixel = ((((char *)&pixel)[bits>>3])>>(bits&7)) & 1; - } else if (ximage->format == XYPixmap) { - pixel = 0; - plane = 0; - nbytes = ximage->bitmap_unit >> 3; - for (i = ximage->depth; --i >= 0; ) { - src = &ximage->data[XYINDEX(x, y, ximage)+ plane]; - dst = (char *)&px; - px = 0; - for (j = nbytes; --j >= 0; ) *dst++ = *src++; - XYNORMALIZE(&px, ximage); - bits = (x + ximage->xoffset) % ximage->bitmap_unit; - pixel = (pixel << 1) | - (((((char *)&px)[bits>>3])>>(bits&7)) & 1); - plane = plane + (ximage->bytes_per_line * ximage->height); - } - } else if (ximage->format == ZPixmap) { - src = &ximage->data[ZINDEX(x, y, ximage)]; - dst = (char *)&px; - px = 0; - for (i = (ximage->bits_per_pixel + 7) >> 3; --i >= 0; ) - *dst++ = *src++; - ZNORMALIZE(&px, ximage); - pixel = 0; - for (i=sizeof(unsigned long); --i >= 0; ) - pixel = (pixel << 8) | ((unsigned char *)&px)[i]; - if (ximage->bits_per_pixel == 4) { - if (x & 1) - pixel >>= 4; - else - pixel &= 0xf; - } - } else { - return 0; /* bad image */ - } - if (ximage->bits_per_pixel == ximage->depth) - return pixel; - else - return (pixel & low_bits_table[ximage->depth]); -} - -unsigned long -PsGetImagePixel(char *pImage, int depth, int w, int h, int leftPad, int format, - int px, int py) -{ - TmpImage xi = {0}; - - xi.width = w; - xi.height = h; - xi.xoffset = 0/*leftPad*/; - xi.format = format; - xi.data = pImage; - xi.byte_order = IMAGE_BYTE_ORDER; - xi.bitmap_bit_order = BITMAP_BIT_ORDER; - xi.bitmap_unit = ((depth > 16)?(32): - ((depth > 8)?(16): - ((depth > 1)? (8): - (1)))); - xi.depth = depth; - xi.bits_per_pixel = xi.bitmap_unit; - - /* - * compute per line accelerator. - */ - if (format == ZPixmap) - xi.bytes_per_line = - ROUNDUP((xi.bits_per_pixel * xi.width), 32); - else - xi.bytes_per_line = - ROUNDUP((xi.width + xi.xoffset), 32); - - return XGetPixel(&xi, px, py); -} - - - diff --git a/hw/xprint/ps/PsInit.c b/hw/xprint/ps/PsInit.c deleted file mode 100644 index 72bd7bd7c..000000000 --- a/hw/xprint/ps/PsInit.c +++ /dev/null @@ -1,648 +0,0 @@ -/* - -Copyright 1996, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ -/* - * (c) Copyright 1996 Hewlett-Packard Company - * (c) Copyright 1996 International Business Machines Corp. - * (c) Copyright 1996 Sun Microsystems, Inc. - * (c) Copyright 1996 Novell, Inc. - * (c) Copyright 1996 Digital Equipment Corp. - * (c) Copyright 1996 Fujitsu Limited - * (c) Copyright 1996 Hitachi, Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject - * to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF - * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Except as contained in this notice, the names of the copyright holders - * shall not be used in advertising or otherwise to promote the sale, use - * or other dealings in this Software without prior written authorization - * from said copyright holders. - */ - -/******************************************************************* -** -** ********************************************************* -** * -** * File: PsInit.c -** * -** * Contents: Initialization code of Ps driver for the print server. -** * -** * Created By: Roger Helmendach (Liberty Systems) -** * -** * Copyright: Copyright 1996 The Open Group, Inc. -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include -#include - -#include "Ps.h" -#include "mi.h" -#include "micmap.h" -#include "AttrValid.h" -#include "fb.h" - -#include "windowstr.h" -#include "DiPrint.h" - -static void AllocatePsPrivates(ScreenPtr pScreen); -static int PsInitContext(XpContextPtr pCon); -static int PsDestroyContext(XpContextPtr pCon); - -DevPrivateKey PsScreenPrivateKey = &PsScreenPrivateKey; -DevPrivateKey PsContextPrivateKey = &PsContextPrivateKey; -DevPrivateKey PsPixmapPrivateKey = &PsPixmapPrivateKey; -DevPrivateKey PsWindowPrivateKey = &PsWindowPrivateKey; - -#ifdef GLXEXT -extern void GlxWrapInitVisuals(miInitVisualsProcPtr *); -#endif /* GLXEXT */ - -Bool -InitializePsDriver(ndx, pScreen, argc, argv) - int ndx; - ScreenPtr pScreen; - int argc; - char **argv; -{ -#if 0 - int maxXres, maxYres, maxWidth, maxHeight; - int maxRes, maxDim, numBytes; - PsScreenPrivPtr pPriv; -#endif - int nv, /* total number of visuals */ - nv_1bit, /* number of 8bit visuals */ - nv_8bit, /* number of 8bit visuals */ - nv_12bit, /* number of 12bit visuals */ - nv_14bit, /* number of 14bit visuals */ - nv_16bit, /* number of 16bit visuals */ - nv_24bit, /* number of 24bit visuals*/ - nv_30bit; /* number of 30bit visuals*/ - int nd; /* number of depths */ - int defaultVisualIndex = -1; - VisualID *vids_1bit, - *vids_8bit, - *vids_12bit, - *vids_14bit, - *vids_16bit, - *vids_24bit, - *vids_30bit; - VisualPtr visuals; - DepthPtr depths; - VisualID defaultVisual; - int rootDepth; - -/* - * Register this driver's InitContext function with the print - * extension. - */ - XpRegisterInitFunc(pScreen, "XP-POSTSCRIPT", PsInitContext); - -/* - * Create and fill in the devPrivate for the PS driver. - */ - AllocatePsPrivates(pScreen); - -#if 0 - pPriv = (PsScreenPrivPtr) - dixLookupPrivate(&pScreen->devPrivates, PsScreenPrivateKey); - pPriv->resDB = rmdb; -#endif - - pScreen->defColormap = (Colormap) FakeClientID(0); - pScreen->blackPixel = 1; - pScreen->whitePixel = 0; - pScreen->QueryBestSize = (QueryBestSizeProcPtr)PsQueryBestSize; - pScreen->SaveScreen = (SaveScreenProcPtr)_XpBoolNoop; - pScreen->GetImage = (GetImageProcPtr)_XpVoidNoop; - pScreen->GetSpans = (GetSpansProcPtr)_XpVoidNoop; - pScreen->CreateWindow = PsCreateWindow; - pScreen->DestroyWindow = PsDestroyWindow; - pScreen->PositionWindow = PsPositionWindow; - pScreen->ChangeWindowAttributes = PsChangeWindowAttributes; - pScreen->RealizeWindow = PsMapWindow; - pScreen->UnrealizeWindow = PsUnmapWindow; - pScreen->CloseScreen = PsCloseScreen; - pScreen->CopyWindow = PsCopyWindow; - /* XXX Hard routine to write! */ - -/* - * These two are going to be VERY different... - */ - pScreen->CreatePixmap = PsCreatePixmap; - pScreen->DestroyPixmap = PsDestroyPixmap; - pScreen->RealizeFont = PsRealizeFont; - pScreen->UnrealizeFont = PsUnrealizeFont; - pScreen->CreateGC = PsCreateGC; - pScreen->CreateColormap = PsCreateColormap; - pScreen->DestroyColormap = PsDestroyColormap; - pScreen->InstallColormap = PsInstallColormap; - pScreen->UninstallColormap = PsUninstallColormap; - pScreen->ListInstalledColormaps = PsListInstalledColormaps; - pScreen->StoreColors = PsStoreColors; - pScreen->ResolveColor = PsResolveColor; - /* Will BitmapToRegion make any difference at all? */ - pScreen->BitmapToRegion = fbPixmapToRegion; - - visuals = (VisualPtr) xalloc(16*sizeof(VisualRec)); - depths = (DepthPtr) xalloc(16*sizeof(DepthRec)); - vids_1bit = (VisualID *)xalloc(16*sizeof(VisualID)); - vids_8bit = (VisualID *)xalloc(16*sizeof(VisualID)); - vids_12bit = (VisualID *)xalloc(16*sizeof(VisualID)); - vids_14bit = (VisualID *)xalloc(16*sizeof(VisualID)); - vids_16bit = (VisualID *)xalloc(16*sizeof(VisualID)); - vids_24bit = (VisualID *)xalloc(16*sizeof(VisualID)); - vids_30bit = (VisualID *)xalloc(16*sizeof(VisualID)); - - nv = nv_1bit = nv_8bit = nv_12bit = nv_14bit = nv_16bit = nv_24bit = nv_30bit = nd = 0; - -#ifdef PSOUT_USE_DEEPCOLOR -/* gisburn: 30bit TrueColor has been disabled for now since it causes problems - * with GLX - see https://bugs.freedesktop.org/show_bug.cgi?id=2868 ("Mesa - * seems to be unable to handle 30bit TrueColor visuals") for details... - */ -#ifdef DISABLED_FOR_NOW - /* TrueColor, 30bit, 10bit per R-,G-,B-gun */ - visuals[nv].vid = FakeClientID(0); - visuals[nv].class = TrueColor; - visuals[nv].bitsPerRGBValue = 10; - visuals[nv].ColormapEntries = 1024; - visuals[nv].nplanes = 30; - visuals[nv].redMask = 0X3FF00000; - visuals[nv].greenMask = 0X000FFC00; - visuals[nv].blueMask = 0X000003FF; - visuals[nv].offsetRed = 20; - visuals[nv].offsetGreen = 10; - visuals[nv].offsetBlue = 0; - vids_30bit[nv_30bit] = visuals[nv].vid; - nv++; nv_30bit++; -#endif /* DISABLED_FOR_NOW */ -#endif /* PSOUT_USE_DEEPCOLOR */ - - /* TrueColor, 24bit */ - visuals[nv].vid = FakeClientID(0); - visuals[nv].class = TrueColor; - visuals[nv].bitsPerRGBValue = 8; - visuals[nv].ColormapEntries = 256; - visuals[nv].nplanes = 24; - visuals[nv].redMask = 0X00FF0000; - visuals[nv].greenMask = 0X0000FF00; - visuals[nv].blueMask = 0X000000FF; - visuals[nv].offsetRed = 16; - visuals[nv].offsetGreen = 8; - visuals[nv].offsetBlue = 0; - vids_24bit[nv_24bit] = visuals[nv].vid; - nv++; nv_24bit++; - - /* TrueColor, 16bit */ - visuals[nv].vid = FakeClientID(0); - visuals[nv].class = TrueColor; - visuals[nv].bitsPerRGBValue = 6; - visuals[nv].ColormapEntries = 64; - visuals[nv].nplanes = 16; - visuals[nv].redMask = 0x0000f800; - visuals[nv].greenMask = 0x000007e0; - visuals[nv].blueMask = 0x0000001f; - visuals[nv].offsetRed = 11; - visuals[nv].offsetGreen = 5; - visuals[nv].offsetBlue = 0; - vids_16bit[nv_16bit] = visuals[nv].vid; - nv++; nv_16bit++; - -#ifdef PSOUT_USE_DEEPCOLOR - /* PostScript Level 2 and above, colors can have 12 bits per component - * (36 bit for RGB) */ - - /* PseudoColor, 14bit (15bit won't work as |ColormapEntries==32768| - * is too large for a |signed short|... xx@@!!!... ;-( ) */ - visuals[nv].vid = FakeClientID(0); - visuals[nv].class = PseudoColor; - visuals[nv].bitsPerRGBValue = 12; - visuals[nv].ColormapEntries = 16384; - visuals[nv].nplanes = 14; - visuals[nv].redMask = 0x0; - visuals[nv].greenMask = 0x0; - visuals[nv].blueMask = 0x0; - visuals[nv].offsetRed = 0x0; - visuals[nv].offsetGreen = 0x0; - visuals[nv].offsetBlue = 0x0; - vids_14bit[nv_14bit] = visuals[nv].vid; - nv++; nv_14bit++; - - /* PseudoColor, 12bit */ - visuals[nv].vid = FakeClientID(0); - visuals[nv].class = PseudoColor; - visuals[nv].bitsPerRGBValue = 12; - visuals[nv].ColormapEntries = 4096; - visuals[nv].nplanes = 12; - visuals[nv].redMask = 0x0; - visuals[nv].greenMask = 0x0; - visuals[nv].blueMask = 0x0; - visuals[nv].offsetRed = 0x0; - visuals[nv].offsetGreen = 0x0; - visuals[nv].offsetBlue = 0x0; - vids_12bit[nv_12bit] = visuals[nv].vid; - defaultVisualIndex = nv; - nv++; nv_12bit++; - - /* GrayScale, 12bit, 12bit per R-,G-,B-gun */ - visuals[nv].vid = FakeClientID(0); - visuals[nv].class = GrayScale; - visuals[nv].bitsPerRGBValue = 12; - visuals[nv].ColormapEntries = 4096; - visuals[nv].nplanes = 12; - visuals[nv].redMask = 0x0; - visuals[nv].greenMask = 0x0; - visuals[nv].blueMask = 0x0; - visuals[nv].offsetRed = 0x0; - visuals[nv].offsetGreen = 0x0; - visuals[nv].offsetBlue = 0x0; - vids_12bit[nv_12bit] = visuals[nv].vid; - nv++; nv_12bit++; - - /* StaticGray, 12bit, 12bit per R-,G-,B-gun */ - visuals[nv].vid = FakeClientID(0); - visuals[nv].class = StaticGray; - visuals[nv].bitsPerRGBValue = 12; - visuals[nv].ColormapEntries = 4096; - visuals[nv].nplanes = 12; - visuals[nv].redMask = 0x0; - visuals[nv].greenMask = 0x0; - visuals[nv].blueMask = 0x0; - visuals[nv].offsetRed = 0x0; - visuals[nv].offsetGreen = 0x0; - visuals[nv].offsetBlue = 0x0; - vids_12bit[nv_12bit] = visuals[nv].vid; - nv++; nv_12bit++; -#endif /* PSOUT_USE_DEEPCOLOR */ - - /* PseudoColor, 8bit */ - visuals[nv].vid = FakeClientID(0); - visuals[nv].class = PseudoColor; - visuals[nv].bitsPerRGBValue = 8; - visuals[nv].ColormapEntries = 256; - visuals[nv].nplanes = 8; - visuals[nv].redMask = 0x0; - visuals[nv].greenMask = 0x0; - visuals[nv].blueMask = 0x0; - visuals[nv].offsetRed = 0x0; - visuals[nv].offsetGreen = 0x0; - visuals[nv].offsetBlue = 0x0; - vids_8bit[nv_8bit] = visuals[nv].vid; -#ifndef PSOUT_USE_DEEPCOLOR - defaultVisualIndex = nv; -#endif /* !PSOUT_USE_DEEPCOLOR */ - nv++; nv_8bit++; - - /* GrayScale, 8bit */ - visuals[nv].vid = FakeClientID(0); - visuals[nv].class = GrayScale; - visuals[nv].bitsPerRGBValue = 8; - visuals[nv].ColormapEntries = 256; - visuals[nv].nplanes = 8; - visuals[nv].redMask = 0x0; - visuals[nv].greenMask = 0x0; - visuals[nv].blueMask = 0x0; - visuals[nv].offsetRed = 0x0; - visuals[nv].offsetGreen = 0x0; - visuals[nv].offsetBlue = 0x0; - vids_8bit[nv_8bit] = visuals[nv].vid; - nv++; nv_8bit++; - - /* StaticGray, 8bit */ - visuals[nv].vid = FakeClientID(0); - visuals[nv].class = StaticGray; - visuals[nv].bitsPerRGBValue = 8; - visuals[nv].ColormapEntries = 256; - visuals[nv].nplanes = 8; - visuals[nv].redMask = 0x0; - visuals[nv].greenMask = 0x0; - visuals[nv].blueMask = 0x0; - visuals[nv].offsetRed = 0x0; - visuals[nv].offsetGreen = 0x0; - visuals[nv].offsetBlue = 0x0; - vids_8bit[nv_8bit] = visuals[nv].vid; - nv++; nv_8bit++; - - /* StaticGray, 1bit */ - visuals[nv].vid = FakeClientID(0); - visuals[nv].class = StaticGray; - visuals[nv].bitsPerRGBValue = 1; - visuals[nv].ColormapEntries = 2; - visuals[nv].nplanes = 1; - visuals[nv].redMask = 0x0; - visuals[nv].greenMask = 0x0; - visuals[nv].blueMask = 0x0; - visuals[nv].offsetRed = 0x0; - visuals[nv].offsetGreen = 0x0; - visuals[nv].offsetBlue = 0x0; - vids_1bit[nv_1bit] = visuals[nv].vid; - nv++; nv_1bit++; - - if( nv_30bit > 0 ) - { - depths[nd].depth = 30; - depths[nd].numVids = nv_30bit; - depths[nd].vids = vids_30bit; - nd++; - } - - if( nv_24bit > 0 ) - { - depths[nd].depth = 24; - depths[nd].numVids = nv_24bit; - depths[nd].vids = vids_24bit; - nd++; - } - - if( nv_16bit > 0 ) - { - depths[nd].depth = 16; - depths[nd].numVids = nv_16bit; - depths[nd].vids = vids_16bit; - nd++; - } - - if( nv_14bit > 0 ) - { - depths[nd].depth = 14; - depths[nd].numVids = nv_14bit; - depths[nd].vids = vids_14bit; - nd++; - } - - if( nv_12bit > 0 ) - { - depths[nd].depth = 12; - depths[nd].numVids = nv_12bit; - depths[nd].vids = vids_12bit; - nd++; - } - - if( nv_8bit > 0 ) - { - depths[nd].depth = 8; - depths[nd].numVids = nv_8bit; - depths[nd].vids = vids_8bit; - nd++; - } - - if( nv_1bit > 0 ) - { - depths[nd].depth = 1; - depths[nd].numVids = nv_1bit; - depths[nd].vids = vids_1bit; - nd++; - } - - /* Defaul visual is 12bit PseudoColor */ - defaultVisual = visuals[defaultVisualIndex].vid; - rootDepth = visuals[defaultVisualIndex].nplanes; - -#ifdef GLXEXT - { - miInitVisualsProcPtr proc = NULL; - - GlxWrapInitVisuals(&proc); - /* GlxInitVisuals ignores the last three arguments. */ - proc(&visuals, &depths, &nv, &nd, - &rootDepth, &defaultVisual, 0, 0, 0); - } -#endif /* GLXEXT */ - - miScreenInit(pScreen, (pointer)0, - pScreen->width, pScreen->height, - (int) (pScreen->width / (pScreen->mmWidth / 25.40)), - (int) (pScreen->height / (pScreen->mmHeight / 25.40)), - 0, rootDepth, nd, - depths, defaultVisual, nv, visuals); - - if( miCreateDefColormap(pScreen)==FALSE ) return FALSE; - -/*scalingScreenInit(pScreen);*/ - - return TRUE; -} - -static void -AllocatePsPrivates(ScreenPtr pScreen) -{ - dixRequestPrivate(PsWindowPrivateKey, sizeof(PsWindowPrivRec)); - dixRequestPrivate(PsContextPrivateKey, sizeof(PsContextPrivRec)); - dixRequestPrivate(PsPixmapPrivateKey, sizeof(PsPixmapPrivRec)); - - dixSetPrivate(&pScreen->devPrivates, PsScreenPrivateKey, - xalloc(sizeof(PsScreenPrivRec))); -} - -/* - * PsInitContext - * - * Establish the appropriate values for a PrintContext used with the PS - * driver. - */ - -static char DOC_ATT_SUPP[]="document-attributes-supported"; -static char DOC_ATT_VAL[]="document-format xp-listfonts-modes"; -static char JOB_ATT_SUPP[]="job-attributes-supported"; -static char JOB_ATT_VAL[]=""; -static char PAGE_ATT_SUPP[]="xp-page-attributes-supported"; -static char PAGE_ATT_VAL[]="content-orientation default-printer-resolution \ -default-input-tray default-medium plex xp-listfonts-modes"; - -static int -PsInitContext(pCon) - XpContextPtr pCon; -{ - XpDriverFuncsPtr pFuncs; - PsContextPrivPtr pConPriv; - char *server, *attrStr; - - /* - * Initialize the attribute store for this printer. - */ - XpInitAttributes(pCon); - - /* - * Initialize the function pointers - */ - pFuncs = &(pCon->funcs); - pFuncs->StartJob = PsStartJob; - pFuncs->EndJob = PsEndJob; - pFuncs->StartDoc = PsStartDoc; - pFuncs->EndDoc = PsEndDoc; - pFuncs->StartPage = PsStartPage; - pFuncs->EndPage = PsEndPage; - pFuncs->PutDocumentData = PsDocumentData; - pFuncs->GetDocumentData = PsGetDocumentData; - pFuncs->GetAttributes = PsGetAttributes; - pFuncs->SetAttributes = PsSetAttributes; - pFuncs->AugmentAttributes = PsAugmentAttributes; - pFuncs->GetOneAttribute = PsGetOneAttribute; - pFuncs->DestroyContext = PsDestroyContext; - pFuncs->GetMediumDimensions = PsGetMediumDimensions; - pFuncs->GetReproducibleArea = PsGetReproducibleArea; - pFuncs->SetImageResolution = PsSetImageResolution; - - /* - * Set up the context privates - */ - pConPriv = (PsContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PsContextPrivateKey); - - memset(pConPriv, 0, sizeof(PsContextPrivRec)); - pConPriv->jobFileName = (char *)NULL; - pConPriv->pJobFile = (FILE *)NULL; - pConPriv->dash = (unsigned char *)NULL; - pConPriv->validGC = 0; - pConPriv->getDocClient = (ClientPtr)NULL; - pConPriv->getDocBufSize = 0; - pConPriv->pPsOut = NULL; - pConPriv->fontInfoRecords = NULL; - pConPriv->fontTypeInfoRecords = NULL; - - /* - * document-attributes-supported - */ - server = XpGetOneAttribute( pCon, XPServerAttr, DOC_ATT_SUPP ); - if ((attrStr = (char *) xalloc(strlen(server) + - strlen(DOC_ATT_SUPP) + strlen(DOC_ATT_VAL) - + strlen(PAGE_ATT_VAL) + 8)) == NULL) - { - return BadAlloc; - } - sprintf(attrStr, "*%s:\t%s %s %s", - DOC_ATT_SUPP, server, DOC_ATT_VAL, PAGE_ATT_VAL); - XpAugmentAttributes( pCon, XPPrinterAttr, attrStr); - xfree(attrStr); - - /* - * job-attributes-supported - */ - server = XpGetOneAttribute( pCon, XPServerAttr, JOB_ATT_SUPP ); - if ((attrStr = (char *) xalloc(strlen(server) + strlen(JOB_ATT_SUPP) + - strlen(JOB_ATT_VAL) + 8)) == NULL) - { - return BadAlloc; - } - sprintf(attrStr, "*%s:\t%s %s", JOB_ATT_SUPP, server, JOB_ATT_VAL); - XpAugmentAttributes(pCon, XPPrinterAttr, attrStr); - xfree(attrStr); - - /* - * xp-page-attributes-supported - */ - server = XpGetOneAttribute( pCon, XPServerAttr, PAGE_ATT_SUPP ); - if ((attrStr = (char *) xalloc(strlen(server) + strlen(PAGE_ATT_SUPP) + - strlen(PAGE_ATT_VAL) + 8)) == NULL) - { - return BadAlloc; - } - sprintf(attrStr, "*%s:\t%s %s", PAGE_ATT_SUPP, server, PAGE_ATT_VAL); - XpAugmentAttributes(pCon, XPPrinterAttr, attrStr); - xfree(attrStr); - - /* - * Validate the attribute pools - */ - XpValidateAttributePool(pCon, XPPrinterAttr, &PsValidatePoolsRec); - XpValidateAttributePool(pCon, XPDocAttr, &PsValidatePoolsRec); - XpValidateAttributePool(pCon, XPJobAttr, &PsValidatePoolsRec); - XpValidateAttributePool(pCon, XPPageAttr, &PsValidatePoolsRec); - - return Success; -} - -static Bool -PsDestroyContext(pCon) - XpContextPtr pCon; -{ - PsContextPrivPtr pConPriv = (PsContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PsContextPrivateKey); - - if( pConPriv->pJobFile!=(FILE *)NULL ) - { - fclose(pConPriv->pJobFile); - pConPriv->pJobFile = NULL; - } - if( pConPriv->jobFileName!=(char *)NULL ) - { - unlink(pConPriv->jobFileName); - xfree(pConPriv->jobFileName); - pConPriv->jobFileName = (char *)NULL; - } - - PsFreeFontInfoRecords(pConPriv); - - /* Reset context to make sure we do not use any stale/invalid/obsolete data */ - memset(pConPriv, 0, sizeof(PsContextPrivRec)); - -/*### free up visuals/depths ###*/ - - return Success; -} - -XpContextPtr -PsGetContextFromWindow(win) - WindowPtr win; -{ - PsWindowPrivPtr pPriv; - - while( win ) - { - pPriv = (PsWindowPrivPtr) - dixLookupPrivate(&win->devPrivates, PsWindowPrivateKey); - if( pPriv->validContext ) return pPriv->context; - win = win->parent; - } - - return NULL; -} diff --git a/hw/xprint/ps/PsLine.c b/hw/xprint/ps/PsLine.c deleted file mode 100644 index aca186642..000000000 --- a/hw/xprint/ps/PsLine.c +++ /dev/null @@ -1,191 +0,0 @@ -/* - -Copyright 1996, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ -/* - * (c) Copyright 1996 Hewlett-Packard Company - * (c) Copyright 1996 International Business Machines Corp. - * (c) Copyright 1996 Sun Microsystems, Inc. - * (c) Copyright 1996 Novell, Inc. - * (c) Copyright 1996 Digital Equipment Corp. - * (c) Copyright 1996 Fujitsu Limited - * (c) Copyright 1996 Hitachi, Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject - * to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF - * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Except as contained in this notice, the names of the copyright holders - * shall not be used in advertising or otherwise to promote the sale, use - * or other dealings in this Software without prior written authorization - * from said copyright holders. - */ - -/******************************************************************* -** -** ********************************************************* -** * -** * File: PsLine.c -** * -** * Contents: Line drawing routines for the PS driver -** * -** * Created By: Roger Helmendach (Liberty Systems) -** * -** * Copyright: Copyright 1996 The Open Group, Inc. -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "Ps.h" -#include "gcstruct.h" -#include "windowstr.h" - -void -PsPolyLine( - DrawablePtr pDrawable, - GCPtr pGC, - int mode, - int nPoints, - xPoint *pPoints) -{ - if( pDrawable->type==DRAWABLE_PIXMAP ) - { - DisplayElmPtr elm; - PixmapPtr pix = (PixmapPtr)pDrawable; - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pix->devPrivate.ptr; - DisplayListPtr disp; - GCPtr gc; - - if ((gc = PsCreateAndCopyGC(pDrawable, pGC)) == NULL) return; - - disp = PsGetFreeDisplayBlock(priv); - - elm = &disp->elms[disp->nelms]; - elm->type = PolyLineCmd; - elm->gc = gc; - elm->c.polyPts.mode = mode; - elm->c.polyPts.nPoints = nPoints; - elm->c.polyPts.pPoints = (xPoint *)xalloc(nPoints*sizeof(xPoint)); - memcpy(elm->c.polyPts.pPoints, pPoints, nPoints*sizeof(xPoint)); - disp->nelms += 1; - } - else - { - int i; - PsOutPtr psOut; - PsPointPtr pts; - ColormapPtr cMap; - - if( PsUpdateDrawableGC(pGC, pDrawable, &psOut, &cMap)==FALSE ) return; - PsOut_Offset(psOut, pDrawable->x, pDrawable->y); - PsOut_Color(psOut, PsGetPixelColor(cMap, pGC->fgPixel)); - PsLineAttrs(psOut, pGC, cMap); - pts = (PsPointPtr)xalloc(sizeof(PsPointRec)*nPoints); - if( mode==CoordModeOrigin ) - { - for( i=0 ; itype==DRAWABLE_PIXMAP ) - { - DisplayElmPtr elm; - PixmapPtr pix = (PixmapPtr)pDrawable; - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pix->devPrivate.ptr; - DisplayListPtr disp; - GCPtr gc; - - if ((gc = PsCreateAndCopyGC(pDrawable, pGC)) == NULL) return; - - disp = PsGetFreeDisplayBlock(priv); - - elm = &disp->elms[disp->nelms]; - elm->type = PolySegmentCmd; - elm->gc = gc; - elm->c.segments.nSegments = nSegments; - elm->c.segments.pSegments = (xSegment *)xalloc(nSegments*sizeof(xSegment)); - memcpy(elm->c.segments.pSegments, pSegments, nSegments*sizeof(xSegment)); - disp->nelms += 1; - } - else - { - int i; - PsOutPtr psOut; - PsPointRec pts[2]; - ColormapPtr cMap; - - if( PsUpdateDrawableGC(pGC, pDrawable, &psOut, &cMap)==FALSE ) return; - PsOut_Offset(psOut, pDrawable->x, pDrawable->y); - PsOut_Color(psOut, PsGetPixelColor(cMap, pGC->fgPixel)); - PsLineAttrs(psOut, pGC, cMap); - for( i=0 ; i -#endif - -#include /* for SIGCLD on pre-POSIX systems */ -#include -#include "Ps.h" - -#include "cursor.h" -#include "resource.h" - -#include "windowstr.h" -#include "propertyst.h" - - -/*ARGSUSED*/ -void -PsQueryBestSize( - int type, - short *pwidth, - short *pheight, - ScreenPtr pScreen) -{ - unsigned width, highBit; - - switch(type) - { - case CursorShape: - *pwidth = 0; - *pheight = 0; - break; - case TileShape: - case StippleShape: - width = *pwidth; - if (!width) break; - /* Return the nearest power of two >= what they gave us */ - highBit = 0x80000000; - /* Find the highest 1 bit in the given width */ - while(!(highBit & width)) - highBit >>= 1; - /* If greater than that then return the next power of two */ - if((highBit - 1) & width) - highBit <<= 1; - *pwidth = highBit; - /* height is a don't-care */ - break; - } -} - -/* - * PsGetMediumDimensions is installed in the GetMediumDimensions field - * of each Ps-initialized context. - */ -int -PsGetMediumDimensions(XpContextPtr pCon, CARD16 *width, CARD16 *height) -{ - XpGetMediumDimensions(pCon, width, height); - return Success; -} - -/* - * PsGetReproducibleArea is installed in the GetReproducibleArea field - * of each Ps-initialized context. - */ -int -PsGetReproducibleArea(XpContextPtr pCon, xRectangle *pRect) -{ - XpGetReproductionArea(pCon, pRect); - return Success; -} - -/* - * PsSetImageResolution is installed in the SetImageResolution field - * of each Ps-initialized context. - */ -int -PsSetImageResolution(XpContextPtr pCon, int imageRes, Bool *status) -{ - pCon->imageRes = imageRes; - *status = True; - return Success; -} - -/* - * GetPropString searches the window heirarchy from pWin up looking for - * a property by the name of propName. If found, returns the property's - * value. If not, it returns NULL. - */ -/* -char * -GetPropString( - WindowPtr pWin, - char *propName) -{ - Atom atom; - PropertyPtr pProp = (PropertyPtr)NULL; - char *retVal; - - atom = MakeAtom(propName, strlen(propName), FALSE); - if(atom != BAD_RESOURCE) - { - WindowPtr pPropWin; - int rc, n; -*/ - - /* - * The atom has been defined, but it might only exist as a - * property on an unrelated window. - */ -/* - for(pPropWin = pWin; pPropWin != (WindowPtr)NULL; - pPropWin = pPropWin->parent) - { - rc = dixLookupProperty(&pProp, pPropWin, atom, - serverClient, DixReadAccess); - if (rc == Success) - break; - else - pProp = NULL; - } - if(pProp == (PropertyPtr)NULL) - return (char *)NULL; - - n = (pProp->format/8) * pProp->size; *//* size (bytes) of prop */ -/* - retVal = (char *)xalloc(n + 1); - (void)memcpy((void *)retVal, (void *)pProp->data, n); - retVal[n] = '\0'; - - return retVal; - } - - return (char *)NULL; -} - -#include - -*/ -/* ARGSUSED */ -/* -static void SigchldHndlr (int dummy) -{ - int status, w; - struct sigaction act; - sigfillset(&act.sa_mask); - act.sa_flags = 0; - act.sa_handler = SigchldHndlr; - - w = wait (&status); - -*/ - /* - * Is this really necessary? - */ -/* - sigaction(SIGCHLD, &act, (struct sigaction *)NULL); -} -*/ - -/* - * SystemCmd provides a wrapper for the 'system' library call. The call - * appears to be sensitive to the handling of SIGCHLD, so this wrapper - * sets the status to SIG_DFL, and then resets the established handler - * after system returns. - */ -/* -int -SystemCmd(char *cmdStr) -{ - int status; - struct sigaction newAct, oldAct; - sigfillset(&newAct.sa_mask); - newAct.sa_flags = 0; - newAct.sa_handler = SIG_DFL; - sigfillset(&oldAct.sa_mask); - oldAct.sa_flags = 0; - oldAct.sa_handler = SigchldHndlr; - -*/ - /* - * get the old handler, and set the action to IGN - */ -/* - sigaction(SIGCHLD, &newAct, &oldAct); - - status = system (cmdStr); - - sigaction(SIGCHLD, &oldAct, (struct sigaction *)NULL); - return status; -} -*/ - -Bool -PsCloseScreen( - int index, - ScreenPtr pScreen) -{ - return TRUE; -} - -void -PsLineAttrs( - PsOutPtr psOut, - GCPtr pGC, - ColormapPtr cMap) -{ - int i; - int nDsh; - int dshOff; - int *dsh; - PsCapEnum cap; - PsJoinEnum join; - - switch(pGC->capStyle) { - case CapButt: cap = PsCButt; break; - case CapRound: cap = PsCRound; break; - case CapProjecting: cap = PsCSquare; break; - default: cap = PsCButt; break; } - switch(pGC->joinStyle) { - case JoinMiter: join = PsJMiter; break; - case JoinRound: join = PsJRound; break; - case JoinBevel: join = PsJBevel; break; - default: join = PsJBevel; break; } - if( pGC->lineStyle==LineSolid ) { nDsh = dshOff = 0; dsh = (int *)0; } - else - { - nDsh = pGC->numInDashList; - dshOff = pGC->dashOffset; - if( !nDsh ) dsh = (int *)0; - else - { - dsh = (int *)xalloc(sizeof(int)*nDsh); - for( i=0 ; idash[i]&0xFF; - } - } - - if( pGC->lineStyle!=LineDoubleDash ) - PsOut_LineAttrs(psOut, (int)pGC->lineWidth, - cap, join, nDsh, dsh, dshOff, -1); - else - PsOut_LineAttrs(psOut, (int)pGC->lineWidth, - cap, join, nDsh, dsh, dshOff, - PsGetPixelColor(cMap, pGC->bgPixel)); - if( nDsh && dsh ) xfree(dsh); -} diff --git a/hw/xprint/ps/PsPixel.c b/hw/xprint/ps/PsPixel.c deleted file mode 100644 index d51cb6ecf..000000000 --- a/hw/xprint/ps/PsPixel.c +++ /dev/null @@ -1,156 +0,0 @@ -/* - -Copyright 1996, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ -/* - * (c) Copyright 1996 Hewlett-Packard Company - * (c) Copyright 1996 International Business Machines Corp. - * (c) Copyright 1996 Sun Microsystems, Inc. - * (c) Copyright 1996 Novell, Inc. - * (c) Copyright 1996 Digital Equipment Corp. - * (c) Copyright 1996 Fujitsu Limited - * (c) Copyright 1996 Hitachi, Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject - * to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF - * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Except as contained in this notice, the names of the copyright holders - * shall not be used in advertising or otherwise to promote the sale, use - * or other dealings in this Software without prior written authorization - * from said copyright holders. - */ - -/******************************************************************* -** -** ********************************************************* -** * -** * File: PsPixel.c -** * -** * Contents: Pixel-drawing code for the PS DDX driver -** * -** * Created By: Roger Helmendach (Liberty Systems) -** * -** * Copyright: Copyright 1995 The Open Group, Inc. -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include - -#include "windowstr.h" -#include "gcstruct.h" - -#include "Ps.h" - -void -PsPolyPoint( - DrawablePtr pDrawable, - GCPtr pGC, - int mode, - int nPoints, - xPoint *pPoints) -{ - if( pDrawable->type==DRAWABLE_PIXMAP ) - { - DisplayElmPtr elm; - PixmapPtr pix = (PixmapPtr)pDrawable; - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pix->devPrivate.ptr; - DisplayListPtr disp; - GCPtr gc; - - if ((gc = PsCreateAndCopyGC(pDrawable, pGC)) == NULL) return; - - disp = PsGetFreeDisplayBlock(priv); - - elm = &disp->elms[disp->nelms]; - elm->type = PolyPointCmd; - elm->gc = gc; - elm->c.polyPts.mode = mode; - elm->c.polyPts.nPoints = nPoints; - elm->c.polyPts.pPoints = (xPoint *)xalloc(nPoints*sizeof(xPoint)); - memcpy(elm->c.polyPts.pPoints, pPoints, nPoints*sizeof(xPoint)); - disp->nelms += 1; - } - else - { - int i; - PsOutPtr psOut; - PsPointPtr pts; - ColormapPtr cMap; - - if( PsUpdateDrawableGC(pGC, pDrawable, &psOut, &cMap)==FALSE ) return; - PsOut_Offset(psOut, pDrawable->x, pDrawable->y); - PsOut_Color(psOut, PsGetPixelColor(cMap, pGC->fgPixel)); - pts = (PsPointPtr)xalloc(sizeof(PsPointRec)*nPoints); - if( mode==CoordModeOrigin ) - { - for( i=0 ; i -#endif - -#include "windowstr.h" -#include "gcstruct.h" -#include "privates.h" - -#include "Ps.h" - -#define _BitsPerPixel(d) (\ - (1 << PixmapWidthPaddingInfo[d].padBytesLog2) * 8 / \ - (PixmapWidthPaddingInfo[d].padRoundUp+1)) - -PixmapPtr -PsCreatePixmap( - ScreenPtr pScreen, - int width, - int height, - int depth, - unsigned usage_hint) -{ - PixmapPtr pPixmap; - - pPixmap = (PixmapPtr)xcalloc(1, sizeof(PixmapRec)); - if( !pPixmap) return NullPixmap; - pPixmap->drawable.type = DRAWABLE_PIXMAP; - pPixmap->drawable.class = 0; - pPixmap->drawable.pScreen = pScreen; - pPixmap->drawable.depth = depth; - pPixmap->drawable.bitsPerPixel = _BitsPerPixel(depth); - pPixmap->drawable.id = 0; - pPixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER; - pPixmap->drawable.x = 0; - pPixmap->drawable.y = 0; - pPixmap->drawable.width = width; - pPixmap->drawable.height = height; - pPixmap->devKind = 0; - pPixmap->refcnt = 1; - pPixmap->devPrivates = NULL; - - pPixmap->devPrivate.ptr = (PsPixmapPrivPtr)xcalloc(1, sizeof(PsPixmapPrivRec)); - if( !pPixmap->devPrivate.ptr ) - { xfree(pPixmap); return NullPixmap; } - return pPixmap; -} - -/* PsScrubPixmap: Remove all content from a pixmap (used by - * |PsPolyFillRect()| when the "solid fill" operation covers - * the whole pixmap) */ -void -PsScrubPixmap(PixmapPtr pPixmap) -{ - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pPixmap->devPrivate.ptr; - DisplayListPtr disp = priv->dispList; - - while( disp ) - { - int i; - DisplayListPtr oldDisp = disp; - disp = disp->next; - for( i=0 ; inelms ; i++ ) - { - DisplayElmPtr elm = &oldDisp->elms[i]; - - switch(elm->type) - { - case PolyPointCmd: - case PolyLineCmd: - if( elm->c.polyPts.pPoints ) xfree(elm->c.polyPts.pPoints); - break; - case PolySegmentCmd: - if( elm->c.segments.pSegments ) xfree(elm->c.segments.pSegments); - break; - case PolyRectangleCmd: - if( elm->c.rects.pRects ) xfree(elm->c.rects.pRects); - break; - case FillPolygonCmd: - if( elm->c.polyPts.pPoints ) xfree(elm->c.polyPts.pPoints); - break; - case PolyFillRectCmd: - if( elm->c.rects.pRects ) xfree(elm->c.rects.pRects); - break; - case PolyArcCmd: - if( elm->c.arcs.pArcs ) xfree(elm->c.arcs.pArcs); - break; - case PolyFillArcCmd: - if( elm->c.arcs.pArcs ) xfree(elm->c.arcs.pArcs); - break; - case Text8Cmd: - case TextI8Cmd: - if( elm->c.text8.string ) xfree(elm->c.text8.string); - break; - case Text16Cmd: - case TextI16Cmd: - if( elm->c.text16.string ) xfree(elm->c.text16.string); - break; - case PutImageCmd: - if( elm->c.image.pData ) xfree(elm->c.image.pData); - break; - case BeginFrameCmd: - break; - case EndFrameCmd: - break; - } - - if (elm->type != BeginFrameCmd && elm->type != EndFrameCmd) { - (void) FreeGC(elm->gc, (GContext) 0); - } - } - xfree(oldDisp); - } - - priv->dispList = NULL; -} - -Bool -PsDestroyPixmap(PixmapPtr pPixmap) -{ - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pPixmap->devPrivate.ptr; - - if( --pPixmap->refcnt ) return TRUE; - - PsScrubPixmap(pPixmap); - - xfree(priv); - dixFreePrivates(pPixmap->devPrivates); - xfree(pPixmap); - return TRUE; -} - -DisplayListPtr -PsGetFreeDisplayBlock(PsPixmapPrivPtr priv) -{ - DisplayListPtr disp = priv->dispList; - - for(; disp ; disp=disp->next ) - { - if( disp->nelms>=DPY_BLOCKSIZE && disp->next ) continue; - if( disp->nelmsnext = (DisplayListPtr)xcalloc(1, sizeof(DisplayListRec)); - disp->next->next = (DisplayListPtr)0; - disp->next->nelms = 0; - } - disp = (DisplayListPtr)xcalloc(1, sizeof(DisplayListRec)); - disp->next = (DisplayListPtr)0; - disp->nelms = 0; - priv->dispList = disp; - return(disp); -} - -void -PsReplay(DisplayElmPtr elm, DrawablePtr pDrawable) -{ - switch(elm->type) - { - case PolyPointCmd: - PsPolyPoint(pDrawable, elm->gc, elm->c.polyPts.mode, - elm->c.polyPts.nPoints, elm->c.polyPts.pPoints); - break; - case PolyLineCmd: - PsPolyLine(pDrawable, elm->gc, elm->c.polyPts.mode, - elm->c.polyPts.nPoints, elm->c.polyPts.pPoints); - break; - case PolySegmentCmd: - PsPolySegment(pDrawable, elm->gc, elm->c.segments.nSegments, - elm->c.segments.pSegments); - break; - case PolyRectangleCmd: - PsPolyRectangle(pDrawable, elm->gc, elm->c.rects.nRects, - elm->c.rects.pRects); - break; - case FillPolygonCmd: - PsFillPolygon(pDrawable, elm->gc, 0, elm->c.polyPts.mode, - elm->c.polyPts.nPoints, elm->c.polyPts.pPoints); - break; - case PolyFillRectCmd: - PsPolyFillRect(pDrawable, elm->gc, elm->c.rects.nRects, - elm->c.rects.pRects); - break; - case PolyArcCmd: - PsPolyArc(pDrawable, elm->gc, elm->c.arcs.nArcs, elm->c.arcs.pArcs); - break; - case PolyFillArcCmd: - PsPolyFillArc(pDrawable, elm->gc, elm->c.arcs.nArcs, elm->c.arcs.pArcs); - break; - case Text8Cmd: - PsPolyText8(pDrawable, elm->gc, elm->c.text8.x, elm->c.text8.y, - elm->c.text8.count, elm->c.text8.string); - break; - case Text16Cmd: - PsPolyText16(pDrawable, elm->gc, elm->c.text16.x, elm->c.text16.y, - elm->c.text16.count, elm->c.text16.string); - break; - case TextI8Cmd: - PsImageText8(pDrawable, elm->gc, elm->c.text8.x, elm->c.text8.y, - elm->c.text8.count, elm->c.text8.string); - break; - case TextI16Cmd: - PsImageText16(pDrawable, elm->gc, elm->c.text16.x, elm->c.text16.y, - elm->c.text16.count, elm->c.text16.string); - break; - case PutImageCmd: - PsPutScaledImage(pDrawable, elm->gc, elm->c.image.depth, - elm->c.image.x, elm->c.image.y, - elm->c.image.w, elm->c.image.h, elm->c.image.leftPad, - elm->c.image.format, elm->c.image.res, - elm->c.image.pData); - break; - case BeginFrameCmd: - { - PsOutPtr psOut; - ColormapPtr cMap; - if( PsUpdateDrawableGC(NULL, pDrawable, &psOut, &cMap)==FALSE ) return; - PsOut_BeginFrame(psOut, 0, 0, elm->c.frame.x, elm->c.frame.y, - elm->c.frame.w, elm->c.frame.h); - } - break; - case EndFrameCmd: - { - PsOutPtr psOut; - ColormapPtr cMap; - if( PsUpdateDrawableGC(NULL, pDrawable, &psOut, &cMap)==FALSE ) return; - PsOut_EndFrame(psOut); - } - break; - } -} - -void -PsReplayPixmap(PixmapPtr pix, DrawablePtr pDrawable) -{ - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pix->devPrivate.ptr; - DisplayListPtr disp = priv->dispList; - DisplayElmPtr elm; - - for(; disp ; disp=disp->next ) - { - int i; - for( i=0,elm=disp->elms ; inelms ; i++,elm++ ) - PsReplay(elm, pDrawable); - } -} - -int -PsCloneDisplayElm(PixmapPtr dst, DisplayElmPtr elm, DisplayElmPtr newElm, - int xoff, int yoff) -{ - int i; - int size; - int status = 0; - - *newElm = *elm; - - /* I think this is the correct return value */ - if ((newElm->gc = PsCreateAndCopyGC(&dst->drawable, elm->gc)) == NULL) { - return 1; - } - - switch(elm->type) - { - case PolyPointCmd: - case PolyLineCmd: - newElm->c.polyPts.pPoints = - (xPoint *)xalloc(elm->c.polyPts.nPoints*sizeof(xPoint)); - for( i=0 ; ic.polyPts.nPoints ; i++ ) - { - newElm->c.polyPts.pPoints[i].x = elm->c.polyPts.pPoints[i].x+xoff; - newElm->c.polyPts.pPoints[i].y = elm->c.polyPts.pPoints[i].y+yoff; - } - break; - case PolySegmentCmd: - newElm->c.segments.pSegments = - (xSegment *)xalloc(elm->c.segments.nSegments*sizeof(xSegment)); - for( i=0 ; ic.segments.nSegments ; i++ ) - { - newElm->c.segments.pSegments[i].x1 = - elm->c.segments.pSegments[i].x1+xoff; - newElm->c.segments.pSegments[i].y1 = - elm->c.segments.pSegments[i].y1+yoff; - newElm->c.segments.pSegments[i].x2 = - elm->c.segments.pSegments[i].x2+xoff; - newElm->c.segments.pSegments[i].y2 = - elm->c.segments.pSegments[i].y2+yoff; - } - break; - case PolyRectangleCmd: - newElm->c.rects.pRects = - (xRectangle *)xalloc(elm->c.rects.nRects*sizeof(xRectangle)); - for( i=0 ; ic.rects.nRects ; i++ ) - { - newElm->c.rects.pRects[i].x = elm->c.rects.pRects[i].x+xoff; - newElm->c.rects.pRects[i].y = elm->c.rects.pRects[i].y+yoff; - newElm->c.rects.pRects[i].width = elm->c.rects.pRects[i].width; - newElm->c.rects.pRects[i].height = elm->c.rects.pRects[i].height; - } - break; - case FillPolygonCmd: - newElm->c.polyPts.pPoints = - (xPoint *)xalloc(elm->c.polyPts.nPoints*sizeof(xPoint)); - for( i=0 ; ic.polyPts.nPoints ; i++ ) - { - newElm->c.polyPts.pPoints[i].x = elm->c.polyPts.pPoints[i].x+xoff; - newElm->c.polyPts.pPoints[i].y = elm->c.polyPts.pPoints[i].y+yoff; - } - break; - case PolyFillRectCmd: - newElm->c.rects.pRects = - (xRectangle *)xalloc(elm->c.rects.nRects*sizeof(xRectangle)); - for( i=0 ; ic.rects.nRects ; i++ ) - { - newElm->c.rects.pRects[i].x = elm->c.rects.pRects[i].x+xoff; - newElm->c.rects.pRects[i].y = elm->c.rects.pRects[i].y+yoff; - newElm->c.rects.pRects[i].width = elm->c.rects.pRects[i].width; - newElm->c.rects.pRects[i].height = elm->c.rects.pRects[i].height; - } - break; - case PolyArcCmd: - newElm->c.arcs.pArcs = - (xArc *)xalloc(elm->c.arcs.nArcs*sizeof(xArc)); - for( i=0 ; ic.arcs.nArcs ; i++ ) - { - newElm->c.arcs.pArcs[i].x = elm->c.arcs.pArcs[i].x+xoff; - newElm->c.arcs.pArcs[i].y = elm->c.arcs.pArcs[i].y+yoff; - newElm->c.arcs.pArcs[i].width = elm->c.arcs.pArcs[i].width; - newElm->c.arcs.pArcs[i].height = elm->c.arcs.pArcs[i].height; - newElm->c.arcs.pArcs[i].angle1 = elm->c.arcs.pArcs[i].angle1; - newElm->c.arcs.pArcs[i].angle2 = elm->c.arcs.pArcs[i].angle2; - } - break; - case PolyFillArcCmd: - newElm->c.arcs.pArcs = - (xArc *)xalloc(elm->c.arcs.nArcs*sizeof(xArc)); - for( i=0 ; ic.arcs.nArcs ; i++ ) - { - newElm->c.arcs.pArcs[i].x = elm->c.arcs.pArcs[i].x+xoff; - newElm->c.arcs.pArcs[i].y = elm->c.arcs.pArcs[i].y+yoff; - newElm->c.arcs.pArcs[i].width = elm->c.arcs.pArcs[i].width; - newElm->c.arcs.pArcs[i].height = elm->c.arcs.pArcs[i].height; - newElm->c.arcs.pArcs[i].angle1 = elm->c.arcs.pArcs[i].angle1; - newElm->c.arcs.pArcs[i].angle2 = elm->c.arcs.pArcs[i].angle2; - } - break; - case Text8Cmd: - case TextI8Cmd: - newElm->c.text8.string = (char *)xalloc(elm->c.text8.count); - memcpy(newElm->c.text8.string, elm->c.text8.string, elm->c.text8.count); - newElm->c.text8.x += xoff; - newElm->c.text8.y += yoff; - break; - case Text16Cmd: - case TextI16Cmd: - newElm->c.text16.string = - (unsigned short *)xalloc(elm->c.text16.count*sizeof(unsigned short)); - memcpy(newElm->c.text16.string, elm->c.text16.string, - elm->c.text16.count*sizeof(unsigned short)); - newElm->c.text16.x += xoff; - newElm->c.text16.y += yoff; - break; - case PutImageCmd: - size = PixmapBytePad(elm->c.image.w, elm->c.image.depth)*elm->c.image.h; - newElm->c.image.pData = (char *)xalloc(size); - memcpy(newElm->c.image.pData, elm->c.image.pData, size); - newElm->c.image.x += xoff; - newElm->c.image.y += yoff; - break; - case BeginFrameCmd: - case EndFrameCmd: - status = 1; - break; - } - return(status); -} - -void -PsCopyDisplayList(PixmapPtr src, PixmapPtr dst, int xoff, int yoff, - int x, int y, int w, int h) -{ - PsPixmapPrivPtr sPriv = (PsPixmapPrivPtr)src->devPrivate.ptr; - PsPixmapPrivPtr dPriv = (PsPixmapPrivPtr)dst->devPrivate.ptr; - DisplayListPtr sDisp; - DisplayListPtr dDisp = PsGetFreeDisplayBlock(dPriv); - DisplayElmPtr elm = &dDisp->elms[dDisp->nelms]; - - elm->type = BeginFrameCmd; - elm->c.frame.x = x; - elm->c.frame.y = y; - elm->c.frame.w = w; - elm->c.frame.h = h; - dDisp->nelms += 1; - - sDisp = sPriv->dispList; - for(; sDisp ; sDisp=sDisp->next ) - { - int i; - for( i=0,elm=sDisp->elms ; inelms ; i++,elm++ ) - { - dDisp = PsGetFreeDisplayBlock(dPriv); - if (PsCloneDisplayElm(dst, elm, &dDisp->elms[dDisp->nelms], - xoff, yoff)==0) - { - dDisp->nelms += 1; - } - } - } - - dDisp = PsGetFreeDisplayBlock(dPriv); - elm = &dDisp->elms[dDisp->nelms]; - elm->type = EndFrameCmd; - dDisp->nelms += 1; -} - -PsElmPtr -PsCreateFillElementList(PixmapPtr pix, int *nElms) -{ - PsElmPtr elms = (PsElmPtr)0; - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pix->devPrivate.ptr; - DisplayListPtr disp = priv->dispList; - PsArcEnum styl; - - *nElms = 0; - for(; disp ; disp=disp->next ) - { - int i; - DisplayElmPtr elm = disp->elms; - - for( i=0 ; inelms ; i++,elm++ ) - { - if( !elm->gc ) continue; /* workaround for https://freedesktop.org/bugzilla/show_bug.cgi?id=1416 */ - if( !elm->gc->fgPixel ) continue; - switch(elm->type) - { - case FillPolygonCmd: - *nElms += 1; - break; - case PolyFillRectCmd: - *nElms += elm->c.rects.nRects; - break; - case PolyFillArcCmd: - *nElms += elm->c.arcs.nArcs; - break; - default: /* keep the compiler happy with unhandled enums */ - break; - } - } - } - - if( (*nElms) ) - { - elms = (PsElmPtr)xcalloc(1, (*nElms)*sizeof(PsElmRec)); - if( elms ) - { - disp = priv->dispList; - *nElms = 0; - for(; disp ; disp=disp->next ) - { - int i, k; - DisplayElmPtr elm = disp->elms; - - for( i=0 ; inelms ; i++,elm++ ) - { - if( !elm->gc->fgPixel ) continue; - switch(elm->type) - { - case FillPolygonCmd: - elms[*nElms].type = PSOUT_POINTS; - elms[*nElms].nPoints = elm->c.polyPts.nPoints; - elms[*nElms].c.points = - (PsPointPtr)xalloc(elms[*nElms].nPoints*sizeof(PsPointRec)); - for( k=0 ; kc.polyPts.pPoints[k].x; - elms[*nElms].c.points[k].y = elm->c.polyPts.pPoints[k].y; - } - *nElms += 1; - break; - case PolyFillRectCmd: - for( k=0 ; kc.rects.nRects ; k++ ) - { - elms[*nElms].type = PSOUT_RECT; - elms[*nElms].nPoints = 0; - elms[*nElms].c.rect.x = elm->c.rects.pRects[k].x; - elms[*nElms].c.rect.y = elm->c.rects.pRects[k].y; - elms[*nElms].c.rect.w = elm->c.rects.pRects[k].width; - elms[*nElms].c.rect.h = elm->c.rects.pRects[k].height; - *nElms += 1; - } - break; - case PolyFillArcCmd: - if( elm->gc->arcMode==ArcChord ) styl = PsChord; - else styl = PsPieSlice; - for( k=0 ; kc.rects.nRects ; k++ ) - { - elms[*nElms].type = PSOUT_ARC; - elms[*nElms].nPoints = 0; - elms[*nElms].c.arc.x = elm->c.arcs.pArcs[k].x; - elms[*nElms].c.arc.y = elm->c.arcs.pArcs[k].y; - elms[*nElms].c.arc.w = elm->c.arcs.pArcs[k].width; - elms[*nElms].c.arc.h = elm->c.arcs.pArcs[k].height; - elms[*nElms].c.arc.a1 = elm->c.arcs.pArcs[k].angle1; - elms[*nElms].c.arc.a2 = elm->c.arcs.pArcs[k].angle2; - elms[*nElms].c.arc.style = styl; - *nElms += 1; - } - break; - default: /* keep the compiler happy with unhandled enums */ - break; - } - } - } - } - } - return(elms); -} - -PsElmPtr -PsCloneFillElementList(int nElms, PsElmPtr elms) -{ - int i; - PsElmPtr newElms; - - newElms = (PsElmPtr)xcalloc(1, nElms*sizeof(PsElmRec)); - if( !newElms ) return(newElms); - for( i=0 ; i -#endif - -#include "Ps.h" -#include "gcstruct.h" -#include "windowstr.h" - -void -PsPolyRectangle( - DrawablePtr pDrawable, - GCPtr pGC, - int nRects, - xRectangle *pRects) -{ - if( pDrawable->type==DRAWABLE_PIXMAP ) - { - DisplayElmPtr elm; - PixmapPtr pix = (PixmapPtr)pDrawable; - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pix->devPrivate.ptr; - DisplayListPtr disp; - GCPtr gc; - - if ((gc = PsCreateAndCopyGC(pDrawable, pGC)) == NULL) return; - - disp = PsGetFreeDisplayBlock(priv); - - elm = &disp->elms[disp->nelms]; - elm->type = PolyRectangleCmd; - elm->gc = gc; - elm->c.rects.nRects = nRects; - elm->c.rects.pRects = (xRectangle *)xalloc(nRects*sizeof(xRectangle)); - memcpy(elm->c.rects.pRects, pRects, nRects*sizeof(xRectangle)); - disp->nelms += 1; - } - else - { - int i; - PsOutPtr psOut; - ColormapPtr cMap; - - if( PsUpdateDrawableGC(pGC, pDrawable, &psOut, &cMap)==FALSE ) return; - PsOut_Offset(psOut, pDrawable->x, pDrawable->y); - PsOut_Color(psOut, PsGetPixelColor(cMap, pGC->fgPixel)); - PsLineAttrs(psOut, pGC, cMap); - for( i=0 ; itype==DRAWABLE_PIXMAP ) - { - DisplayElmPtr elm; - PixmapPtr pix = (PixmapPtr)pDrawable; - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pix->devPrivate.ptr; - DisplayListPtr disp; - GCPtr gc; - - if ((gc = PsCreateAndCopyGC(pDrawable, pGC)) == NULL) return; - - disp = PsGetFreeDisplayBlock(priv); - - elm = &disp->elms[disp->nelms]; - elm->type = FillPolygonCmd; - elm->gc = gc; - elm->c.polyPts.mode = mode; - elm->c.polyPts.nPoints = nPoints; - elm->c.polyPts.pPoints = (xPoint *)xalloc(nPoints*sizeof(xPoint)); - memcpy(elm->c.polyPts.pPoints, pPoints, nPoints*sizeof(xPoint)); - disp->nelms += 1; - } - else - { - int i; - PsOutPtr psOut; - PsPointPtr pts; - PsRuleEnum rule; - ColormapPtr cMap; - - if( PsUpdateDrawableGC(pGC, pDrawable, &psOut, &cMap)==FALSE ) return; - PsOut_Offset(psOut, pDrawable->x, pDrawable->y); - PsSetFillColor(pDrawable, pGC, psOut, cMap); - if( pGC->fillRule==EvenOddRule ) rule = PsEvenOdd; - else rule = PsNZWinding; - PsOut_FillRule(psOut, rule); - pts = (PsPointPtr)xalloc(sizeof(PsPointRec)*nPoints); - if( mode==CoordModeOrigin ) - { - for( i=0 ; itype==DRAWABLE_PIXMAP ) - { - DisplayElmPtr elm; - PixmapPtr pix = (PixmapPtr)pDrawable; - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pix->devPrivate.ptr; - DisplayListPtr disp; - GCPtr gc; - -#ifdef DBE - /* Remove previous pixmap content if we render one single rect which - * covers the whole pixmap surface (this optimisation was added for - * the double-buffer extension ("DBE") which uses |PolyFillRect()| - * to clear the buffer - but it makes sense in other cases, too). - */ - if (nRects == 1) - { - if ( (pRects[0].x==0) && (pRects[0].y==0) && - (pRects[0].width==pDrawable->width) && (pRects[0].height==pDrawable->height) && - (pGC->fillStyle == FillSolid) && - (noDbeExtension == False)) - { -#ifdef DEBUG_gismobile - ErrorF("PsPolyFillRect: scrubbing pixmap...\n"); -#endif /* DEBUG_gismobile */ - /* Remove all content from the pixmap as it would be covered - * by the whole rect anyway */ - PsScrubPixmap((PixmapPtr)pDrawable); - } - } -#endif /* DBE */ - - if ((gc = PsCreateAndCopyGC(pDrawable, pGC)) == NULL) return; - - disp = PsGetFreeDisplayBlock(priv); - - elm = &disp->elms[disp->nelms]; - elm->type = PolyFillRectCmd; - elm->gc = gc; - elm->c.rects.nRects = nRects; - elm->c.rects.pRects = (xRectangle *)xalloc(nRects*sizeof(xRectangle)); - memcpy(elm->c.rects.pRects, pRects, nRects*sizeof(xRectangle)); - disp->nelms += 1; - } - else - { - int i; - PsOutPtr psOut; - ColormapPtr cMap; - - if( PsUpdateDrawableGC(pGC, pDrawable, &psOut, &cMap)==FALSE ) return; - PsOut_Offset(psOut, pDrawable->x, pDrawable->y); - PsSetFillColor(pDrawable, pGC, psOut, cMap); - for( i=0 ; i -#endif - -#include -#include -#include -#include -#include -#include -#include -#include - -#define NEED_EVENTS -#include -#undef NEED_EVENTS - -#include "Ps.h" - -#include "windowstr.h" -#include "attributes.h" -#include "Oid.h" - -/* static utility function to get document/page attributes */ -static void -S_GetPageAttributes(XpContextPtr pCon,int *iorient,int *icount, int *iplex, - int *ires, unsigned short *iwd, unsigned short *iht) -{ - char *count; - XpOid orient, plex; - /* - * Get the orientation - */ - orient = XpGetContentOrientation(pCon); - switch (orient) { - case xpoid_val_content_orientation_landscape: - *iorient = 1; - break; - case xpoid_val_content_orientation_reverse_portrait: - *iorient = 2; - break; - case xpoid_val_content_orientation_reverse_landscape: - *iorient = 3; - break; - case xpoid_val_content_orientation_portrait: - default: - *iorient = 0; - break; - } - - /* - * Get the count - */ - count = XpGetOneAttribute(pCon, XPDocAttr, "copy-count"); - if( count ) - { - int ii = sscanf(count, "%d", icount); - if( ii!=1 ) *icount = 1; - } - else *icount = 1; - - /* - * Get the plex - */ - plex = XpGetPlex(pCon); - switch(plex) - { - case xpoid_val_plex_duplex: - *iplex = 1; - break; - case xpoid_val_plex_tumble: - *iplex = 2; - break; - default: - *iplex = 0; - break; - } - - /* - * Get the resolution and media size - */ - *ires = XpGetResolution(pCon); - XpGetMediumDimensions(pCon, iwd, iht); -} - - -int -PsStartJob( - XpContextPtr pCon, - Bool sendClientData, - ClientPtr client) -{ - PsContextPrivPtr pConPriv = (PsContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PsContextPrivateKey); - - /* - * Create a temporary file to store the printer output. - */ - if (!XpOpenTmpFile("w", &pConPriv->jobFileName, &pConPriv->pJobFile)) - return BadAlloc; - - return Success; -} - - - -/* I thought about making this following code into a set of routines - or using a goto, or something, but in the end decided not to, - because the plain old listing here makes the logic clearer. */ -int -PsEndJob( - XpContextPtr pCon, - Bool cancel) -{ - int r; - struct stat buffer; - int error; - - PsContextPrivPtr priv = (PsContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PsContextPrivateKey); - - if (cancel == True) { - if (priv->getDocClient != (ClientPtr) NULL) { - (void) XpFinishDocData( priv->getDocClient ); - - priv->getDocClient = NULL; - priv->getDocBufSize = 0; - } - - /* job is cancelled - do we really care if we're out of space? */ - (void) fclose(priv->pJobFile); - priv->pJobFile = NULL; - - unlink(priv->jobFileName); - xfree(priv->jobFileName); - priv->jobFileName = (char *)NULL; - - PsFreeFontInfoRecords(priv); - - return Success; - } - - /* - * Append any trailing information here - */ - PsOut_EndFile(priv->pPsOut, 0); - priv->pPsOut = NULL; - - /* this is where we find out if we're out of space */ - error = (fclose(priv->pJobFile) == EOF); - priv->pJobFile = NULL; - - /* status to the client if we have ran out of space on the disk or - some other resource problem with the temporary file... */ - if (error) { - if (priv->getDocClient != (ClientPtr) NULL) { - (void) XpFinishDocData( priv->getDocClient ); - - priv->getDocClient = NULL; - priv->getDocBufSize = 0; - } - - unlink(priv->jobFileName); - xfree(priv->jobFileName); - priv->jobFileName = (char *)NULL; - - PsFreeFontInfoRecords(priv); - - return BadAlloc; - } - - /* we have finished without incident & no cancel */ - - if (priv->getDocClient != NULL && priv->getDocBufSize > 0) { - FILE *file; - - file = fopen(priv->jobFileName, "r"); - if (!file || (fstat(fileno(file), &buffer) < 0)) - r = BadAlloc; - else - r = XpSendDocumentData(priv->getDocClient, file, buffer.st_size, - priv->getDocBufSize); - if (file) - fclose(file); - - (void) XpFinishDocData(priv->getDocClient); - - priv->getDocClient = NULL; - priv->getDocBufSize = 0; - } - else { - XpSubmitJob(priv->jobFileName, pCon); - - r = Success; - } - - unlink(priv->jobFileName); - xfree(priv->jobFileName); - priv->jobFileName = (char *)NULL; - - PsFreeFontInfoRecords(priv); - -#ifdef BM_CACHE - PsBmClearImageCache(); -#endif - - return r; -} - -/* StartPage - */ -int -PsStartPage( - XpContextPtr pCon, - WindowPtr pWin) -{ - int iorient, iplex, icount, ires; - unsigned short iwd, iht; - PsContextPrivPtr pConPriv = (PsContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PsContextPrivateKey); - PsWindowPrivPtr pWinPriv = (PsWindowPrivPtr) - dixLookupPrivate(&pWin->devPrivates, PsWindowPrivateKey); - -/* - * Put a pointer to the context in the window private structure - */ - pWinPriv->validContext = 1; - pWinPriv->context = pCon; - - /* get page level attributes */ - S_GetPageAttributes(pCon,&iorient,&icount,&iplex,&ires,&iwd,&iht); - /* - * Start the page - */ - if (pConPriv->pPsOut == NULL) { - char *title; - - /* get job level attributes */ - title = XpGetOneAttribute(pCon, XPJobAttr, "job-name"); - - pConPriv->pPsOut = PsOut_BeginFile(pConPriv->pJobFile, - title, iorient, icount, iplex, ires, - (int)iwd, (int)iht, False); - pConPriv->fontInfoRecords = NULL; - pConPriv->fontTypeInfoRecords = NULL; - } - PsOut_BeginPage(pConPriv->pPsOut, iorient, icount, iplex, ires, - (int)iwd, (int)iht); - - return Success; -} - - -/* - * EndPage: - * - * Write page trailer to page file - * Write page file to job file - */ -int -PsEndPage( - XpContextPtr pCon, - WindowPtr pWin) -{ - PsWindowPrivPtr pWinPriv = (PsWindowPrivPtr) - dixLookupPrivate(&pWin->devPrivates, PsWindowPrivateKey); - PsContextPrivPtr pConPriv = (PsContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PsContextPrivateKey); - - PsOut_EndPage(pConPriv->pPsOut); - - pWinPriv->validContext = 0; - pWinPriv->context = NULL; - - /* status to the client if we have ran out of space on the disk or - some other resource problem with the temporary file... */ -/* if (ferror(pConPriv->pJobFile)) return BadAlloc; */ - - return Success; -} - -/* - * The PsStartDoc() and PsEndDoc() functions serve basically as NOOP - * placeholders. This driver doesn't deal with the notion of multiple - * documents per page. - */ - -int -PsStartDoc(XpContextPtr pCon, XPDocumentType type) -{ - int iorient, iplex, icount, ires; - unsigned short iwd, iht; - char *title; - PsContextPrivPtr pConPriv = (PsContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PsContextPrivateKey); - - /* get job level attributes */ - title = XpGetOneAttribute(pCon, XPJobAttr, "job-name"); - - /* get document level attributes */ - S_GetPageAttributes(pCon,&iorient,&icount,&iplex,&ires,&iwd,&iht); - - pConPriv->pPsOut = PsOut_BeginFile(pConPriv->pJobFile, - title, iorient, icount, iplex, ires, - (int)iwd, (int)iht, (Bool)(type == XPDocRaw)); - - pConPriv->fontInfoRecords = NULL; - pConPriv->fontTypeInfoRecords = NULL; - - return Success; -} - -int -PsEndDoc( - XpContextPtr pCon, - Bool cancel) -{ - return Success; -} - -/* - * PsDocumentData() - * - * Hand any pre-generated PDL down to the spool files, formatting it - * as necessary to fit the given window. - */ - -int -PsDocumentData( - XpContextPtr pCon, - DrawablePtr pDraw, - char *pData, - int len_data, - char *pFmt, - int len_fmt, - char *pOpt, - int len_opt, - ClientPtr client) -{ - PsContextPrivPtr cPriv; - PsOutPtr psOut; - - if (len_fmt != 12 || - strncasecmp(pFmt, "PostScript 2", len_fmt) != 0 || - len_opt) - return BadValue; - - cPriv = (PsContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PsContextPrivateKey); - psOut = cPriv->pPsOut; - - if (pDraw) - PsOut_BeginFrame(psOut, 0, 0, pDraw->x, pDraw->y, - pDraw->width, pDraw->height); - PsOut_RawData(psOut, pData, len_data); - if (pDraw) - PsOut_EndFrame(psOut); - - return Success; -} - -/* - * - * PsGetDocumentData() - * - * This function allows the driver to send the generated PS back to - * the client. - */ - -int -PsGetDocumentData( - XpContextPtr pCon, - ClientPtr client, - int maxBufferSize) -{ - PsContextPrivPtr pPriv = (PsContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, PsContextPrivateKey); - - pPriv->getDocClient = client; - pPriv->getDocBufSize = maxBufferSize; - - return Success; -} - diff --git a/hw/xprint/ps/PsSpans.c b/hw/xprint/ps/PsSpans.c deleted file mode 100644 index c0e66ee7a..000000000 --- a/hw/xprint/ps/PsSpans.c +++ /dev/null @@ -1,164 +0,0 @@ -/* - -Copyright 1996, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ -/* - * (c) Copyright 1996 Hewlett-Packard Company - * (c) Copyright 1996 International Business Machines Corp. - * (c) Copyright 1996 Sun Microsystems, Inc. - * (c) Copyright 1996 Novell, Inc. - * (c) Copyright 1996 Digital Equipment Corp. - * (c) Copyright 1996 Fujitsu Limited - * (c) Copyright 1996 Hitachi, Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject - * to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF - * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Except as contained in this notice, the names of the copyright holders - * shall not be used in advertising or otherwise to promote the sale, use - * or other dealings in this Software without prior written authorization - * from said copyright holders. - */ - -/******************************************************************* -** -** ********************************************************* -** * -** * File: PsSpans.c -** * -** * Contents: Code to set and fill spans in the PS DDX -** * -** * Created By: Roger Helmendach (Liberty Systems) -** * -** * Copyright: Copyright 1996 The Open Group, Inc. -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "Ps.h" -#include "gcstruct.h" -#include "windowstr.h" - -void -PsFillSpans( - DrawablePtr pDrawable, - GCPtr pGC, - int nSpans, - DDXPointPtr pPoints, - int *pWidths, - int fSorted) -{ - PsOutPtr psOut; - int xoffset, yoffset; - xRectangle *rects, *r; - RegionPtr fillRegion, region = 0; - int i; - int nbox; - BoxPtr pbox; - ColormapPtr cMap; - - if( PsUpdateDrawableGC(pGC, pDrawable, &psOut, &cMap)==FALSE ) return; - - /* - * Build a region out of the spans - */ - rects = (xRectangle *)xalloc(nSpans*sizeof(xRectangle)); - xoffset = pDrawable->x; - yoffset = pDrawable->y; - - for( i = 0, r = rects; i < nSpans; i++, r++ ) - { - r->x = pPoints[i].x + xoffset; - r->y = pPoints[i].y + yoffset; - r->width = pWidths[i]; - r->height = 1; - } - fillRegion = RECTS_TO_REGION(pGC->pScreen, nSpans, rects, - (fSorted)?CT_YSORTED:CT_UNSORTED); - - /* - * Intersect this region with the clip region. Whatever's left, - * should be filled. - */ -/*REGION_INTERSECT(pGC->pScreen, region, fillRegion, pGC->clientClip);*/ - - pbox = REGION_RECTS(region); - nbox = REGION_NUM_RECTS(region); - - /* Enter HP-GL/2 */ - /*###SEND_PCL( outFile, "\27%0B" );*/ - - while( nbox ) - { -/*### - sprintf( t, "PU%d,%d;RR%d,%d;", pbox->x1, pbox->y1, pbox->x2, pbox->y2); - SEND_PCL( outFile, t ); -*/ - nbox--; - pbox++; - } - - /* Go back to PCL */ - /*###SEND_PCL( outFile, "\27%0A" );*/ - - /* - * Clean up the temporary regions - */ - REGION_DESTROY(pGC->pScreen, fillRegion); - REGION_DESTROY(pGC->pScreen, region); - xfree(rects); -} - -void -PsSetSpans( - DrawablePtr pDrawable, - GCPtr pGC, - char *pSrc, - DDXPointPtr pPoints, - int *pWidths, - int nSpans, - int fSorted) -{ -} diff --git a/hw/xprint/ps/PsText.c b/hw/xprint/ps/PsText.c deleted file mode 100644 index 872c0f427..000000000 --- a/hw/xprint/ps/PsText.c +++ /dev/null @@ -1,581 +0,0 @@ -/* - -Copyright 1996, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ -/* - * (c) Copyright 1996 Hewlett-Packard Company - * (c) Copyright 1996 International Business Machines Corp. - * (c) Copyright 1996 Sun Microsystems, Inc. - * (c) Copyright 1996 Novell, Inc. - * (c) Copyright 1996 Digital Equipment Corp. - * (c) Copyright 1996 Fujitsu Limited - * (c) Copyright 1996 Hitachi, Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject - * to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF - * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Except as contained in this notice, the names of the copyright holders - * shall not be used in advertising or otherwise to promote the sale, use - * or other dealings in this Software without prior written authorization - * from said copyright holders. - */ - -/******************************************************************* -** -** ********************************************************* -** * -** * File: PsText.c -** * -** * Contents: Character-drawing routines for the PS DDX -** * -** * Created By: Roger Helmendach (Liberty Systems) -** * -** * Copyright: Copyright 1996 The Open Group, Inc. -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "Ps.h" -#include "gcstruct.h" -#include "windowstr.h" -#include -#include -#include - -int -PsPolyText8( - DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - int count, - char *string) -{ - if( pDrawable->type==DRAWABLE_PIXMAP ) - { - DisplayElmPtr elm; - PixmapPtr pix = (PixmapPtr)pDrawable; - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pix->devPrivate.ptr; - DisplayListPtr disp; - GCPtr gc; - - if ((gc = PsCreateAndCopyGC(pDrawable, pGC)) == NULL) return x; - - disp = PsGetFreeDisplayBlock(priv); - - elm = &disp->elms[disp->nelms]; - elm->type = Text8Cmd; - elm->gc = gc; - elm->c.text8.x = x; - elm->c.text8.y = y; - elm->c.text8.count = count; - elm->c.text8.string = (char *)xalloc(count); - memcpy(elm->c.text8.string, string, count); - disp->nelms += 1; - - return x; - } - else - { - PsFontInfoRec *firec; - - /* We need a context for rendering... */ - if (PsGetPsContextPriv(pDrawable) == NULL) - return x; - - firec = PsGetFontInfoRec(pDrawable, pGC->font); - if (!firec) - return x; - -#ifdef XP_USE_FREETYPE - if (firec->ftir->downloadableFont && - (firec->ftir->font_type == PSFTI_FONT_TYPE_FREETYPE)) - { - PsOutPtr psOut; - ColormapPtr cMap; - - if( PsUpdateDrawableGC(pGC, pDrawable, &psOut, &cMap)==FALSE ) - return x; - - if (firec->ftir->alreadyDownloaded[0] == False) - { - PsOut_DownloadFreeType(psOut, - firec->ftir->ft_download_font_type, - firec->ftir->download_ps_name, pGC->font, 0); - firec->ftir->alreadyDownloaded[0] = True; - } - - PsOut_Offset(psOut, pDrawable->x, pDrawable->y); - PsOut_Color(psOut, PsGetPixelColor(cMap, pGC->fgPixel)); - if (!firec->size) - PsOut_TextAttrsMtx(psOut, firec->ftir->download_ps_name, firec->mtx, firec->ftir->is_iso_encoding); - else - PsOut_TextAttrs(psOut, firec->ftir->download_ps_name, firec->size, firec->ftir->is_iso_encoding); - PsOut_FreeType_Text(pGC->font, psOut, x, y, string, count); - - return x; - } - else -#endif /* XP_USE_FREETYPE */ - if (firec->ftir->downloadableFont && - (firec->ftir->font_type != PSFTI_FONT_TYPE_FREETYPE)) - { - PsOutPtr psOut; - ColormapPtr cMap; - - if( PsUpdateDrawableGC(pGC, pDrawable, &psOut, &cMap)==FALSE ) - return x; - - if (firec->ftir->alreadyDownloaded[0] == False) - { - PsOut_DownloadType1(psOut, "PsPolyText8", - firec->ftir->download_ps_name, firec->ftir->filename); - firec->ftir->alreadyDownloaded[0] = True; - } - - PsOut_Offset(psOut, pDrawable->x, pDrawable->y); - PsOut_Color(psOut, PsGetPixelColor(cMap, pGC->fgPixel)); - if (!firec->size) - PsOut_TextAttrsMtx(psOut, firec->ftir->download_ps_name, firec->mtx, firec->ftir->is_iso_encoding); - else - PsOut_TextAttrs(psOut, firec->ftir->download_ps_name, firec->size, firec->ftir->is_iso_encoding); - PsOut_Text(psOut, x, y, string, count, -1); - - return x; - } - - /* Render glyphs as bitmaps */ - { - unsigned long n, i; - int w; - CharInfoPtr charinfo[255]; - - GetGlyphs(pGC->font, (unsigned long)count, - (unsigned char *)string, Linear8Bit, &n, charinfo); - w = 0; - for (i=0; i < n; i++) - w += charinfo[i]->metrics.characterWidth; - - if (n != 0) - PsPolyGlyphBlt(pDrawable, pGC, x, y, n, - charinfo, FONTGLYPHS(pGC->font)); - x += w; - - return x; - } - } - return x; -} - -int -PsPolyText16( - DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - int count, - unsigned short *string) -{ - if( pDrawable->type==DRAWABLE_PIXMAP ) - { - DisplayElmPtr elm; - PixmapPtr pix = (PixmapPtr)pDrawable; - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pix->devPrivate.ptr; - DisplayListPtr disp; - GCPtr gc; - - if ((gc = PsCreateAndCopyGC(pDrawable, pGC)) == NULL) return x; - - disp = PsGetFreeDisplayBlock(priv); - - elm = &disp->elms[disp->nelms]; - elm->type = Text16Cmd; - elm->gc = gc; - elm->c.text16.x = x; - elm->c.text16.y = y; - elm->c.text16.count = count; - elm->c.text16.string = - (unsigned short *)xalloc(count*sizeof(unsigned short)); - memcpy(elm->c.text16.string, string, count*sizeof(unsigned short)); - disp->nelms += 1; - - return x; - } - else - { - PsFontInfoRec *firec; - - /* We need a context for rendering... */ - if (PsGetPsContextPriv(pDrawable) == NULL) - return x; - - firec = PsGetFontInfoRec(pDrawable, pGC->font); - if (!firec) - return x; - -#ifdef XP_USE_FREETYPE - if (firec->ftir->downloadableFont && - (firec->ftir->font_type == PSFTI_FONT_TYPE_FREETYPE)) - { - PsOutPtr psOut; - ColormapPtr cMap; - unsigned short c, - c_hiByte, - c_lowByte, - fontPage; - int i; - - if( PsUpdateDrawableGC(pGC, pDrawable, &psOut, &cMap)==FALSE ) - return x; - - /* Scan the string we want to render and download all neccesary parts - * of the font (one part(="font page") has 256 glyphs) - */ - for( i = 0 ; i < count ; i++ ) - { - c = string[i]; -#if IMAGE_BYTE_ORDER == LSBFirst - c_hiByte = c & 0x00FF; - c_lowByte = (c >> 8) & 0x00FF; -#elif IMAGE_BYTE_ORDER == MSBFirst - c_hiByte = (c >> 8) & 0x00FF; - c_lowByte = c & 0x00FF; -#else -#error Unsupported byte order -#endif - fontPage = c_hiByte; - - if (firec->ftir->alreadyDownloaded[fontPage] == False) - { - char buffer[256]; - const char *ps_name; - - if (fontPage > 0) - { - sprintf(buffer, "%s_%x", firec->ftir->download_ps_name, (int)fontPage); - ps_name = buffer; - } - else - { - ps_name = firec->ftir->download_ps_name; - } - - PsOut_DownloadFreeType(psOut, - firec->ftir->ft_download_font_type, - ps_name, pGC->font, (fontPage * 0x100)); /* same as (fontPage << 8) */ - - firec->ftir->alreadyDownloaded[fontPage] = True; - } - } - - - PsOut_Offset(psOut, pDrawable->x, pDrawable->y); - PsOut_Color(psOut, PsGetPixelColor(cMap, pGC->fgPixel)); - if (!firec->size) - PsOut_FreeType_TextAttrsMtx16(psOut, firec->ftir->download_ps_name, firec->mtx, firec->ftir->is_iso_encoding); - else - PsOut_FreeType_TextAttrs16(psOut, firec->ftir->download_ps_name, firec->size, firec->ftir->is_iso_encoding); - PsOut_FreeType_Text16(pGC->font, psOut, x, y, string, count); - - return x; - } - else -#endif /* XP_USE_FREETYPE */ - if (firec->ftir->downloadableFont && - (firec->ftir->font_type != PSFTI_FONT_TYPE_FREETYPE)) - { - PsOutPtr psOut; - ColormapPtr cMap; - unsigned short fontPage; - - if( PsUpdateDrawableGC(pGC, pDrawable, &psOut, &cMap)==FALSE ) - return x; - - PsOut_DownloadType1(psOut, "PsPolyText16", - firec->ftir->download_ps_name, firec->ftir->filename); - firec->ftir->alreadyDownloaded[fontPage] = True; - - PsOut_Offset(psOut, pDrawable->x, pDrawable->y); - PsOut_Color(psOut, PsGetPixelColor(cMap, pGC->fgPixel)); - if (!firec->size) - PsOut_TextAttrsMtx(psOut, firec->ftir->download_ps_name, firec->mtx, firec->ftir->is_iso_encoding); - else - PsOut_TextAttrs(psOut, firec->ftir->download_ps_name, firec->size, firec->ftir->is_iso_encoding); - PsOut_Text16(psOut, x, y, string, count, -1); - - return x; - } - - /* Render glyphs as bitmaps */ - { - unsigned long n, i; - int w; - CharInfoPtr charinfo[255]; /* encoding only has 1 byte for count */ - - GetGlyphs(pGC->font, (unsigned long)count, (unsigned char *)string, - (FONTLASTROW(pGC->font) == 0) ? Linear16Bit : TwoD16Bit, - &n, charinfo); - w = 0; - for (i=0; i < n; i++) - w += charinfo[i]->metrics.characterWidth; - if (n != 0) - PsPolyGlyphBlt(pDrawable, pGC, x, y, n, charinfo, FONTGLYPHS(pGC->font)); - x += w; - - return x; - } - } - return x; -} - -void -PsImageText8( - DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - int count, - char *string) -{ - if( pDrawable->type==DRAWABLE_PIXMAP ) - { - DisplayElmPtr elm; - PixmapPtr pix = (PixmapPtr)pDrawable; - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pix->devPrivate.ptr; - DisplayListPtr disp; - GCPtr gc; - - if ((gc = PsCreateAndCopyGC(pDrawable, pGC)) == NULL) return; - - disp = PsGetFreeDisplayBlock(priv); - - elm = &disp->elms[disp->nelms]; - elm->type = TextI8Cmd; - elm->gc = gc; - elm->c.text8.x = x; - elm->c.text8.y = y; - elm->c.text8.count = count; - elm->c.text8.string = (char *)xalloc(count); - memcpy(elm->c.text8.string, string, count); - disp->nelms += 1; - } - else - { - int iso; - int siz; - float mtx[4]; - char *fnam; - PsOutPtr psOut; - ColormapPtr cMap; - - if( PsUpdateDrawableGC(pGC, pDrawable, &psOut, &cMap)==FALSE ) return; - PsOut_Offset(psOut, pDrawable->x, pDrawable->y); - PsOut_Color(psOut, PsGetPixelColor(cMap, pGC->fgPixel)); - fnam = PsGetPSFontName(pGC->font); - if( !fnam ) fnam = "Times-Roman"; - siz = PsGetFontSize(pGC->font, mtx); - iso = PsIsISOLatin1Encoding(pGC->font); - if( !siz ) PsOut_TextAttrsMtx(psOut, fnam, mtx, iso); - else PsOut_TextAttrs(psOut, fnam, siz, iso); - PsOut_Text(psOut, x, y, string, count, PsGetPixelColor(cMap, pGC->bgPixel)); - } -} - -void -PsImageText16( - DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - int count, - unsigned short *string) -{ - if( pDrawable->type==DRAWABLE_PIXMAP ) - { - DisplayElmPtr elm; - PixmapPtr pix = (PixmapPtr)pDrawable; - PsPixmapPrivPtr priv = (PsPixmapPrivPtr)pix->devPrivate.ptr; - DisplayListPtr disp; - GCPtr gc; - - if ((gc = PsCreateAndCopyGC(pDrawable, pGC)) == NULL) return; - - disp = PsGetFreeDisplayBlock(priv); - - elm = &disp->elms[disp->nelms]; - elm->type = TextI16Cmd; - elm->gc = gc; - elm->c.text16.x = x; - elm->c.text16.y = y; - elm->c.text16.count = count; - elm->c.text16.string = - (unsigned short *)xalloc(count*sizeof(unsigned short)); - memcpy(elm->c.text16.string, string, count*sizeof(unsigned short)); - disp->nelms += 1; - } - else - { - int i; - char *str; - if( !count ) return; - str = (char *)xalloc(count); - for( i=0 ; ifont; - width = FONTMAXBOUNDS(pfont,rightSideBearing) - - FONTMINBOUNDS(pfont,leftSideBearing); - height = FONTMAXBOUNDS(pfont,ascent) + - FONTMAXBOUNDS(pfont,descent); - - if ((width == 0) || (height == 0) ) - return; - { - int i; - w = 0; - for (i=0; i < nGlyphs; i++) w += pCharInfo[i]->metrics.characterWidth; - } - pGCtmp = GetScratchGC(1, pDrawable->pScreen); - if (!pGCtmp) - { - (*pDrawable->pScreen->DestroyPixmap)(pPixmap); - return; - } - - gcvals[0] = GXcopy; - gcvals[1] = pGC->fgPixel; - gcvals[2] = pGC->bgPixel; - - DoChangeGC(pGCtmp, GCFunction|GCForeground|GCBackground, gcvals, 0); - - - nbyLine = BitmapBytePad(width); - pbits = (unsigned char *)xalloc(height*nbyLine); - if (!pbits){ - PsDestroyPixmap(pPixmap); - return; - } - tmpx = 0; - while(nGlyphs--) - { - pci = *pCharInfo++; - pglyph = FONTGLYPHBITS(pGlyphBase, pci); - gWidth = GLYPHWIDTHPIXELS(pci); - gHeight = GLYPHHEIGHTPIXELS(pci); - if (gWidth && gHeight) - { - nbyGlyphWidth = GLYPHWIDTHBYTESPADDED(pci); - nbyPadGlyph = BitmapBytePad(gWidth); - - if (nbyGlyphWidth == nbyPadGlyph -#if GLYPHPADBYTES != 4 - && (((int) pglyph) & 3) == 0 -#endif - ) - { - pb = pglyph; - } - else - { - for (i=0, pb = pbits; imetrics.leftSideBearing, - y - pci->metrics.ascent, gWidth, gHeight, - 0, XYBitmap, (char *)pb); - } - - x += pci->metrics.characterWidth; - } - xfree(pbits); - FreeScratchGC(pGCtmp); -} diff --git a/hw/xprint/ps/PsWindow.c b/hw/xprint/ps/PsWindow.c deleted file mode 100644 index 8bfde4b0d..000000000 --- a/hw/xprint/ps/PsWindow.c +++ /dev/null @@ -1,222 +0,0 @@ -/* - -Copyright 1996, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ -/* - * (c) Copyright 1996 Hewlett-Packard Company - * (c) Copyright 1996 International Business Machines Corp. - * (c) Copyright 1996 Sun Microsystems, Inc. - * (c) Copyright 1996 Novell, Inc. - * (c) Copyright 1996 Digital Equipment Corp. - * (c) Copyright 1996 Fujitsu Limited - * (c) Copyright 1996 Hitachi, Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject - * to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF - * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Except as contained in this notice, the names of the copyright holders - * shall not be used in advertising or otherwise to promote the sale, use - * or other dealings in this Software without prior written authorization - * from said copyright holders. - */ - -/******************************************************************* -** -** ********************************************************* -** * -** * File: PsWindow.c -** * -** * Contents: Window code for PS driver. -** * -** * Created By: Roger Helmendach (Liberty Systems) -** * -** * Copyright: Copyright 1996 The Open Group, Inc. -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include - -#include "mistruct.h" -#include "regionstr.h" -#include "windowstr.h" -#include "gcstruct.h" - -#include "Ps.h" - -/* - * The following list of strings defines the properties which will be - * placed on the screen's root window if the property was defined in - * the start-up configuration resource database. - */ -#if 0 -static char *propStrings[] = { - DT_PRINT_JOB_HEADER, - DT_PRINT_JOB_TRAILER, - DT_PRINT_JOB_COMMAND, - DT_PRINT_JOB_EXEC_COMMAND, - DT_PRINT_JOB_EXEC_OPTIONS, - DT_PRINT_PAGE_HEADER, - DT_PRINT_PAGE_TRAILER, - DT_PRINT_PAGE_COMMAND, - (char *)NULL -}; -#endif - -/* - * PsCreateWindow - watch for the creation of the root window. - * When it's created, register the screen with the print extension, - * and put the default command/header properties on it. - */ -/*ARGSUSED*/ - -Bool -PsCreateWindow(WindowPtr pWin) -{ - PsWindowPrivPtr pPriv; - -#if 0 - Bool status = Success; - ScreenPtr pScreen = pWin->drawable.pScreen; - PsScreenPrivPtr pScreenPriv = (PsScreenPrivPtr) - dixLookupPrivate(&pScreen->devPrivates, PsScreenPrivateKey); - PsWindowPrivPtr pWinPriv = (PsWindowPrivPtr) - dixLookupPrivate(&pWin->devPrivates, PsWindowPrivateKey); - - /* - * Initialize this window's private struct. - */ - pWinPriv->jobFileName = (char *)NULL; - pWinPriv->pJobFile = (FILE *)NULL; - pWinPriv->pageFileName = (char *)NULL; - pWinPriv->pPageFile = (FILE *)NULL; - - if(pWin->parent == (WindowPtr)NULL) /* root window? */ - { - Atom propName; /* type = XA_STRING */ - char *propVal; - int i; - XrmDatabase rmdb = pScreenPriv->resDB; - - /* - * Put the defaults spec'd in the config files in properties on this - * screen's root window. - */ - for(i = 0; propStrings[i] != (char *)NULL; i++) - { - if((propVal = _DtPrintGetPrinterResource(pWin, rmdb, - propStrings[i])) != - (char *)NULL) - { - propName = MakeAtom(propStrings[i], strlen(propStrings[i]), - TRUE); - dixChangeWindowProperty(serverClient, pWin, propName, XA_STRING, - 8, PropModeReplace, strlen(propVal), - (pointer)propVal, FALSE); - xfree(propVal); - } - } - } - - return status; -#endif - - pPriv = (PsWindowPrivPtr) - dixLookupPrivate(&pWin->devPrivates, PsWindowPrivateKey); - pPriv->validContext = 0; - - return TRUE; -} - - -/*ARGSUSED*/ -Bool PsMapWindow(WindowPtr pWindow) -{ - return TRUE; -} - -/*ARGSUSED*/ -Bool -PsPositionWindow( - WindowPtr pWin, - int x, - int y) -{ - return TRUE; -} - -/*ARGSUSED*/ -Bool -PsUnmapWindow(WindowPtr pWindow) -{ - return TRUE; -} - -/*ARGSUSED*/ -void -PsCopyWindow( - WindowPtr pWin, - DDXPointRec ptOldOrg, - RegionPtr prgnSrc) -{ -} - -/*ARGSUSED*/ -Bool -PsChangeWindowAttributes( - WindowPtr pWin, - unsigned long mask) -{ - return TRUE; -} - -/*ARGSUSED*/ -Bool -PsDestroyWindow(WindowPtr pWin) -{ - return TRUE; -} diff --git a/hw/xprint/ps/psout.c b/hw/xprint/ps/psout.c deleted file mode 100644 index c24f88b3d..000000000 --- a/hw/xprint/ps/psout.c +++ /dev/null @@ -1,1789 +0,0 @@ -/* - -Copyright 1996, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ -/* - * (c) Copyright 1996 Hewlett-Packard Company - * (c) Copyright 1996 International Business Machines Corp. - * (c) Copyright 1996, 2000 Sun Microsystems, Inc. All Rights Reserved. - * (c) Copyright 1996 Novell, Inc. - * (c) Copyright 1996 Digital Equipment Corp. - * (c) Copyright 1996 Fujitsu Limited - * (c) Copyright 1996 Hitachi, Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject - * to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF - * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Except as contained in this notice, the names of the copyright holders - * shall not be used in advertising or otherwise to promote the sale, use - * or other dealings in this Software without prior written authorization - * from said copyright holders. - */ - -/******************************************************************* -** -** ********************************************************* -** * -** * File: psout.c -** * -** * Contents: Code to output PostScript to file -** * -** * Created By: Roger Helmendach (Liberty Systems) -** * -** * Copyright: Copyright 1996 The Open Group, Inc. -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include "os.h" -#define USE_PSOUT_PRIVATE 1 -#include "Ps.h" -#include "psout.h" -#ifdef XP_USE_FREETYPE -#include -#include FT_FREETYPE_H -#endif /* XP_USE_FREETYPE */ -/* For VENDOR_STRING and VENDOR_RELEASE */ -#include "site.h" - -/* - * Standard definitions - */ - -static char *S_StandardDefs = "\ -/d{def}bind def\ -/b{bind}bind d\ -/bd{b d}b d\ -/x{exch}bd\ -/xd{x d}bd\ -/dp{dup}bd\ -/t{true}bd\ -/f{false}bd\ -/p{pop}bd\ -/r{roll}bd\ -/c{copy}bd\ -/i{index}bd\ -/rp{repeat}bd\ -/n{newpath}bd\ -/w{setlinewidth}bd\ -/lc{setlinecap}bd\ -/lj{setlinejoin}bd\ -/sml{setmiterlimit}bd\ -/ds{setdash}bd\ -/ie{ifelse}bd\ -/len{length}bd\ -/m{moveto}bd\ -/rm{rmoveto}bd\ -/l{lineto}bd\ -/rl{rlineto}bd\ -/a{arc}bd\ -/an{arcn}bd\ -/st{stroke}bd\ -/fl{fill}bd\ -/ef{eofill}bd\ -/sp{showpage}bd\ -/cp{closepath}bd\ -/clp{clippath}bd\ -/cl{clip}bd\ -/pb{pathbbox}bd\ -/tr{translate}bd\ -/rt{rotate}bd\ -/dv{div}bd\ -/ml{mul}bd\ -/ad{add}bd\ -/ng{neg}bd\ -/scl{scale}bd\ -/sc{setrgbcolor}bd\ -/g{setgray}bd\ -/gs{gsave}bd\ -/gr{grestore}bd\ -/sv{save}bd\ -/rs{restore}bd\ -/mx{matrix}bd\ -/cm{currentmatrix}bd\ -/sm{setmatrix}bd\ -/ccm{concatmatrix}bd\ -/cc{concat}bd\ -/ff{findfont}bd\ -/mf{makefont}bd\ -/sf{setfont}bd\ -/cft{currentfont}bd\ -/fd{FontDirectory}bd\ -/sh{show}bd\ -/stw{stringwidth}bd\ -/ci{colorimage}bd\ -/ig{image}bd\ -/im{imagemask}bd\ -/cf{currentfile}bd\ -/rh{readhexstring}bd\ -/str{string}bd\ -/al{aload}bd\ -/wh{where}bd\ -/kn{known}bd\ -/stp{stopped}bd\ -/bg{begin}bd\ -/ed{end}bd\ -/fa{forall}bd\ -/pi{putinterval}bd\ -/mk{mark}bd\ -/ctm{cleartomark}bd\ -/df{definefont}bd\ -/cd{currentdict}bd\ -/db{20 dict dp bg}bd\ -/de{ed}bd\ -/languagelevel wh{p languagelevel}{1}ie\ - 1 eq{/makepattern{p}bd/setpattern{p}bd/setpagedevice{p}bd}if\ -/mp{makepattern}bd\ -/spt{setpattern}bd\ -/spd{setpagedevice}bd\ -" -#ifdef XP_USE_FREETYPE -"/trmoveto{currentfont /FontMatrix get transform rm}d" -#endif /* XP_USE_FREETYPE */ -; - -/* - * Composite definitions - * - * - * XYr - Return X/Y dpi for device - * - * XYr - * - * Cs - Coordinate setup (for origin upper left) - * - * Cs - * - * P - Draw a point - * - * P - * - * R - Add rectangle to path - * - * R - * - * Ac - Add arc to path - * - * Ac - * - * An - Add arc to path (counterclockwise) - * - * An - * - * Tf - Set font - * - * Tf - * - * Tfm - Set font with matrix - * - * Tfm - * - * T - Draw text - * - * T - * - * Tb - Draw text with background color - * - * Tb - * - * Im1 - Image 1 bit monochrome imagemask - * - * Im1 - * - * Im24 - Image 24 bit RGB color - * - * Im24 - * - * Im1t - Image 1 bit monochrome imagemask (in tile) - * - * Im1t - * - * Im24t - Image 24 bit RGB color (in tile) - * - * Im24t - */ - -static char *S_CompositeDefs = "\ -/XYr{/currentpagedevice wh\ - {p currentpagedevice dp /HWResolution kn\ - {/HWResolution get al p}{p 300 300}ie}{300 300}ie}bd\ -/Cs{dp 0 eq{0 pHt tr XYr -1 x dv 72 ml x 1 x dv 72 ml x scl}if\ - dp 1 eq{90 rt XYr -1 x dv 72 ml x 1 x dv 72 ml x scl}if\ - dp 2 eq{pWd 0 tr XYr 1 x dv 72 ml x -1 x dv 72 ml x scl}if\ - 3 eq{pHt pWd tr 90 rt XYr 1 x dv 72 ml x -1 x dv 72 ml x scl}if}bd\ -/P{gs 1 w [] 0 ds 2 c m .1 ad x .1 ad x l st gr}bd\ -/R{4 2 r m 1 i 0 rl 0 x rl ng 0 rl cp}bd\ -/Ac{mx_ cm p 6 -2 r tr 4 2 r ng scl 0 0 .5 5 3 r a mx_ sm}bd\ -/An{mx_ cm p 6 -2 r tr 4 2 r ng scl 0 0 .5 5 3 r an mx_ sm}bd\ -/ISO{dp len dict bg{1 i/FID ne{d}{p p}ie}fa\ - /Encoding ISOLatin1Encoding d cd ed df}bd\ -/iN{dp len str cvs dp len x 1 i 3 ad str 2 c c p x p dp 3 -1 r(ISO)pi}bd\ -/Tp{{x dp iN dp fd x kn{x p dp/f_ x d ff}{dp/f_ x d x ff ISO}ie x}\ - {x dp/f_ x d ff x}ie}bd\ -/Tf{Tp[x 0 0 2 i ng 0 0] dp/fm_ x d mf sf}bd\ -/Tfm{Tp 1 -1 tm1_ scl tm2_ ccm dp/fm_ x d mf sf}bd\ -/T{m sh}bd\ -/Tb{gs sc f_ ff sf cft/FontMatrix get 3 get\ - cft/FontBBox get dp 1 get x 3 get 2 i ml 3 1 r ml\ - 0 0 m 4 i stw p 4 i 4 i m fm_ cc\ - 0 2 i rl dp 0 rl 0 2 i ng rl 0 3 i rl ng 0 rl cp fl p p\ - gr T}bd\ -/Im1{6 4 r tr scl t [3 i 0 0 5 i 0 0]{cf str1 rh p} im}bd\ -/Im1rev{6 4 r tr scl f [3 i 0 0 5 i 0 0]{cf str1 rh p} im}bd\ -/Im24{gs 6 4 r tr scl 8 [3 i 0 0 5 i 0 0]{cf str3 rh p} f 3 ci}bd\ -/Im1t{6 4 r tr scl t [3 i 0 0 5 i 0 0]{} im}bd\ -/Im24t{gs 6 4 r tr scl 8 [3 i 0 0 5 i 0 0]{} f 3 ci}bd\ -/ck2{/currentpagedevice wh \ -{p dp currentpagedevice dp 3 -1 r kn \ -{x get al p 3 -1 r eq 3 1 r eq and } \ -{p p p p t}ie} \ -{p p p t}ie}bd \ -/ck1{/currentpagedevice wh \ -{p dp currentpagedevice dp 3 -1 r kn \ -{x get eq} {p p p t}ie} \ -{p p t}ie}bd \ -/mtx{scl t [3 i 0 0 5 i 0 0]}bd \ -"; - -char *pg_orient[] = {"Portrait","Landscape","Reverse Portrait","Reverse Landscape"}; -/* - * Setup definitions - */ - -static char *S_SetupDefs = "\ - /mx_ mx d\ - /im_ mx d\ - /tm1_ mx d\ - /tm2_ mx d\ - /str3 3 str d\ - /str1 1 str d\ -"; - -/******************************************************************* - * PRIVATE FUNCTIONS * - *******************************************************************/ - -void -S_Flush(PsOutPtr self) -{ - int len; - - if( self->Buf[0] == '\0' ) - return; - - len = strlen(self->Buf); - - /* Append a newline char ('\n') if there isn't one there already */ - if( self->Buf[len-1] != '\n' ) - { - self->Buf[len++] = '\n'; - self->Buf[len] = '\0'; - } - - (void)fwrite(self->Buf, len, 1, self->Fp); - - self->Buf[0] = '\0'; -} - -static void -S_Comment(PsOutPtr self, char *comment) -{ - S_Flush(self); - strcpy(self->Buf, comment); - S_Flush(self); -} - -static void -S_OutDefs(PsOutPtr self, char *defs) -{ - int i, k=0; - S_Flush(self); - memset(self->Buf, 0, sizeof(self->Buf)); - for( i=0 ; defs[i]!='\0' ;) - { - if( k>70 && (i==0 || (i && defs[i-1]!='/')) && - (defs[i]==' ' || defs[i]=='/' || defs[i]=='{') ) - { - S_Flush(self); - k = 0; - memset(self->Buf, 0, sizeof(self->Buf)); - } - if( k && self->Buf[k-1]==' ' && defs[i]==' ' ) { i++; continue; } - self->Buf[k] = defs[i]; - k++; i++; - } - S_Flush(self); -} - -void -S_OutNum(PsOutPtr self, float num) -{ - int i; - char buf[64]; - int len; - - sprintf(buf, "%.3f", num); - - /* Remove any zeros at the end */ - for( i=strlen(buf)-1 ; buf[i]=='0' ; i-- ); buf[i+1] = '\0'; - /* Remove '.' if it is the last character */ - i = strlen(buf)-1; if( buf[i]=='.' ) buf[i] = '\0'; - - len = strlen(self->Buf); - if( len > 0 ) - { - self->Buf[len++] = ' '; - self->Buf[len] = '\0'; - } - strcpy(&self->Buf[len], buf); - if( (len+i)>70 ) S_Flush(self); -} - -static void -S_OutStr(PsOutPtr self, char *txt, int txtl) -{ - int i, k; - char buf[1024]; - for( i=0,k=0 ; i=' ' && txt[i]<='~') && - txt[i]!='(' && txt[i]!=')' && txt[i]!='\\' ) - { buf[k] = txt[i]; k++; continue; } - buf[k] = '\\'; k++; - sprintf(&buf[k], "%03o", txt[i]&0xFF); - /* Skip to the end of the buffer */ - while( buf[k] != '\0' ) - k++; - } - strcat(self->Buf, "("); - i = strlen(self->Buf); - memcpy(&self->Buf[i], buf, k); - self->Buf[i+k] = '\0'; - strcat(self->Buf, ")"); - if( strlen(self->Buf)>70 ) S_Flush(self); -} - -/* Same as S_OutStr() but takes |short *| instead of |char *| */ -static void -S_OutStr16(PsOutPtr self, unsigned short *txt, int txtl) -{ - int i, k; - char buf[2048]; - for( i=0,k=0 ; i=' ' && txt[i]<='~') && - txt[i]!='(' && txt[i]!=')' && txt[i]!='\\' ) - { buf[k] = txt[i]; k++; continue; } - buf[k] = '\\'; k++; - sprintf(&buf[k], "%03o", txt[i]&0xFFFF); - /* Skip to the end of the buffer */ - while( buf[k] != '\0' ) - k++; - } - strcat(self->Buf, "("); - i = strlen(self->Buf); - memcpy(&self->Buf[i], buf, k); - self->Buf[i+k] = '\0'; - strcat(self->Buf, ")"); - if( strlen(self->Buf)>70 ) S_Flush(self); -} - -void -S_OutTok(PsOutPtr self, char *tok, int cr) -{ - int len = strlen(self->Buf); - if( len > 0 ) - { - self->Buf[len++] = ' '; - self->Buf[len] = '\0'; - } - strcpy(&self->Buf[len], tok); - if( cr ) S_Flush(self); -} - -static void -S_Color(PsOutPtr self, PsOutColor clr) -{ - int ir, ig, ib; - ir = PSOUTCOLOR_TO_REDBITS(clr); - ig = PSOUTCOLOR_TO_GREENBITS(clr); - ib = PSOUTCOLOR_TO_BLUEBITS(clr); - if( ir==ig && ig==ib ) - { S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ir)); S_OutTok(self, "g", 1); } - else - { - S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ir)); - S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ig)); - S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ib)); - S_OutTok(self, "sc", 1); - } -} - -static void -S_SetPageDevice(PsOutPtr self, int orient, int count, int plex, int res, - int wd, int ht, int isPage) -{ - float fwd = ((float)wd/(float)res)*72.; - float fht = ((float)ht/(float)res)*72.; - -#define USE_WORKAROUND_COPY_COUNT_BUG 1 - -#ifdef USE_WORKAROUND_COPY_COUNT_BUG - /* Workaround (see http://xprint.mozdev.org/bugs/show_bug.cgi?id=1861 - - * 'Need workaround for bug 1378 ...') to avoid that we print n^2 copies - * instead of n copies. - * The problem is that we use both /NumCopies here but pass the - * %copy-count% to the spooler, too. - * But we only have to use _one_ way... - * - * The final fix for bug 1378 (http://xprint.mozdev.org/bugs/show_bug.cgi?id=1378 - - * "PS DDX creates n^2 copies of a job instead of n copies") will back this - * workaround out and replace it with a better solution. - * (see mozilla.org bug 140030 - * (http://bugzilla.mozilla.org/show_bug.cgi?id=140030 - "Setting number - * of copies causes too many copies to print") for the initial report for - * this issue...) - */ - count = 1; -#endif /* USE_WORKAROUND_COPY_COUNT_BUG */ - - S_OutTok(self, "/pWd", 0); - S_OutNum(self, fwd); - S_OutTok(self, "d /pHt", 0); - S_OutNum(self, fht); - S_OutTok(self, "d", 1); - - /* - * if these are page attributes, have PostScript check to see if they - * have changed. If not, don't do setpagedevice, since it will cause - * a page flush and screw up duplex printing. Having PostScript check - * means we don't have to keep track ourselves. - */ - if(isPage) { - S_OutNum(self, (float) orient); - S_OutTok(self, "/Orientation ck1", 0); - S_OutTok(self, "pWd pHt /PageSize ck2 and not {", 1); - } - S_OutTok(self, "{db", 0); - - S_OutTok(self, "/Orientation", 0); - S_OutNum(self, (float) orient); - S_OutTok(self, " d ", 0); - S_OutTok(self, "/PageSize [pWd pHt] d", 0); - - S_OutTok(self, " de spd", 0); - /* - * save a flag to show if we failed to set orientation... determined - * by both/either Orientation and/or PageSize, use this - * later to set/not set orientation using Cs command. - */ - S_OutTok(self,"}stp /orientationFailed x d", 1); - /* - * if these are page attributes, have PostScript check to see if they - * have changed. If not, don't do setpagedevice, since it will cause - * a page flush and screw up duplex printing. Having PostScript check - * means we don't have to keep track ourselves. - */ - if(isPage) - { - S_OutTok(self,"}if",1); - - S_OutTok(self, (plex==0)?"f":"t", 0); - S_OutTok(self, "/Duplex ck1 ", 0); - - S_OutTok(self, (plex==2)?"t":"f", 0); - S_OutTok(self, "/Tumble ck1 and ", 0); - - - S_OutNum(self, (float)res); - S_OutNum(self, (float)res); - S_OutTok(self, " /HWResolution ck2 and", 0); - - if( count>1 ) - { - S_OutNum(self, (float)count); - S_OutTok(self, " /NumCopies", 0); - S_OutTok(self, " ck1 and ", 0); - } - S_OutTok(self," not {",1); - } - S_OutTok(self, "{db", 0); - - S_OutTok(self, "/Duplex ", 0); - S_OutTok(self, (plex==0)?"f":"t", 0); - S_OutTok(self, " d ", 0); - - S_OutTok(self, "/Tumble ", 0); - S_OutTok(self, (plex==2)?"t":"f", 0); - S_OutTok(self, " d ", 0); - - S_OutTok(self, " /HWResolution [", 0); - S_OutNum(self, (float)res); - S_OutNum(self, (float)res); - S_OutTok(self, "] d ", 0); - - if( count>1 ) - { - S_OutTok(self, " /NumCopies", 0); - S_OutNum(self, (float)count); - S_OutTok(self, " d ", 0); - } - S_OutTok(self, " de spd}stp p", 1); - - if(isPage) - { - S_OutTok(self, "}if", 1); - } -} - -/******************************************************************* - * PUBLIC FUNCTIONS * - *******************************************************************/ - -FILE * -PsOut_ChangeFile(PsOutPtr self, FILE *fp) -{ - FILE *nfp; - - nfp = self->Fp; - - self->Fp = fp; - - return nfp; -} - -PsOutPtr -PsOut_BeginFile(FILE *fp, char *title, int orient, int count, int plex, int res, - int wd, int ht, Bool raw) -{ - int i; - char buffer[256+32]; /* enougth space for a title with 256 chars... */ -/* - * Get ready to output PostScript header - */ - PsOutPtr psout; - psout = (PsOutPtr)xalloc(sizeof(PsOutRec)); - memset(psout, 0, sizeof(PsOutRec)); - psout->Fp = fp; - psout->isRaw = raw; - psout->pagenum = 0; - - if (!raw) { -/* - * Output PostScript header - */ - /* GhostScript will rant about the missing BoundingBox if we use - * "%!PS-Adobe-3.0 EPSF-3.0" here... */ - S_Comment(psout, "%!PS-Adobe-3.0"); -#ifdef XP_USE_FREETYPE - { - FT_Int ftmajor = 0, - ftminor = 0, - ftpatch = 0; - extern FT_Library ftypeLibrary; /* defined in xc/lib/font/FreeType/ftfuncs.c */ - - FT_Library_Version(ftypeLibrary, &ftmajor, &ftminor, &ftpatch); - sprintf(buffer, - "%%%%Creator: The X Print Server's PostScript DDX " - "(%s, release %d, FreeType version %d.%d.%d)", - VENDOR_STRING, VENDOR_RELEASE, - (int)ftmajor, (int)ftminor, (int)ftpatch); - } -#else - sprintf(buffer, - "%%%%Creator: The X Print Server's PostScript DDX (%s, release %d)", - VENDOR_STRING, VENDOR_RELEASE); -#endif /* XP_USE_FREETYPE */ - S_Comment(psout, buffer); - - if (title) - { - sprintf(buffer, "%%%%Title: %.256s", title); - S_Comment(psout, buffer); - } - S_Comment(psout, "%%EndComments"); - S_Comment(psout, "%%BeginProlog"); - S_Comment(psout, "%%BeginProcSet: XServer_PS_Functions"); - S_OutDefs(psout, S_StandardDefs); - S_OutDefs(psout, S_CompositeDefs); - S_Comment(psout, "%%EndProcSet"); - S_Comment(psout, "%%EndProlog"); - S_Comment(psout, "%%BeginSetup"); - /* set document level page attributes */ - S_SetPageDevice(psout, orient, count, plex, res, wd, ht, 0); - S_Comment(psout, "%%Pages: atend"); - S_OutDefs(psout, S_SetupDefs); - S_Comment(psout, "%%EndSetup"); - } -/* - * Initialize the structure - */ - psout->CurColor = PSOUTCOLOR_NOCOLOR; - psout->LineWidth = 1; - psout->LineCap = PsCButt; - psout->LineJoin = PsJMiter; - psout->NDashes = 0; - psout->Dashes = (int *)0; - psout->FontName = (char *)0; - psout->FontSize = 0; - psout->start_image = 0; - for( i=0 ; i<4 ; i++ ) psout->FontMtx[i] = 0.; - psout->ImageFormat = 0; - return(psout); -} - -void -PsOut_EndFile(PsOutPtr self, int closeFile) -{ - char coms[50]; - - if (!self) - return; - - if (!self->isRaw) { - S_Comment(self,"%%Trailer"); - sprintf(coms,"%%%%Pages: %d", self->pagenum); - S_Comment(self, coms); - S_Comment(self, "%%EOF"); - } - if( self->NDashes && self->Dashes ) xfree(self->Dashes); - if( self->FontName ) xfree(self->FontName); - if( self->Patterns ) xfree(self->Patterns); - if( self->Clip.rects ) xfree(self->Clip.rects); - if( closeFile ) fclose(self->Fp); - xfree(self); -} - -void -PsOut_BeginPage(PsOutPtr self, int orient, int count, int plex, int res, - int wd, int ht) -{ - char coms[50]; - -/*** comment for pagenumbers *****/ - - S_Comment(self,"%%PageHeader"); - self->pagenum++; - sprintf(coms,"%%%%Page: %d %d", self->pagenum, self->pagenum); - S_Comment(self, coms); - sprintf(coms,"%%%%PageOrientation: %s",pg_orient[orient]); - S_Comment(self, coms); - -/*** end comment *****************/ - - /* set page level page attributes */ - S_SetPageDevice(self, orient, count, plex, res, wd, ht, 1); - - S_OutTok(self, "gs ", 0); - /* - * check to see if we set orientation already; if it wasn't set, - * use Cs to set orientation here. - */ - S_OutNum(self, (float)orient); - S_OutTok(self, "orientationFailed { ", 0); - S_OutNum(self, (float)orient); - S_OutTok(self, " } { 0 }ie Cs 100 sml gs", 1); -} - -void -PsOut_EndPage(PsOutPtr self) -{ - S_OutTok(self, "gr gr sp", 1); - - /* did grestore: mark attributes 'dirty' so they will be re-sent */ - PsOut_DirtyAttributes(self); - -/*** comment for pagenumbers *****/ - - S_Comment(self,"%%PageTrailer"); - -/*** end comment *****************/ -} - -void -PsOut_DirtyAttributes(PsOutPtr self) -{ - int i; - self->CurColor = PSOUTCOLOR_NOCOLOR; - self->LineWidth = -1; - self->LineCap = (PsCapEnum)-1; - self->LineJoin = (PsJoinEnum)-1; - self->NDashes = -1; - self->FontSize = -1; - for( i=0 ; i<4 ; i++ ) self->FontMtx[i] = -1.; - if( self->Dashes ) { xfree(self->Dashes); self->Dashes = (int *)0; } - if( self->FontName ) { xfree(self->FontName); self->FontName = (char *)0; } -} - -void -PsOut_Comment(PsOutPtr self, char *comment) -{ - S_Comment(self, comment); -} - -void -PsOut_Offset(PsOutPtr self, int x, int y) -{ - self->XOff = x; - self->YOff = y; -} - -void -PsOut_Clip(PsOutPtr self, int clpTyp, PsClipPtr clpinf) -{ - int i, k; - int changed = 0; - int xo = self->XOff; - int yo = self->YOff; - - if( self->InTile ) return; - if( self->InFrame ) xo = yo = 0; - if( clpTyp!=self->ClipType ) changed = 1; - else - { - if( clpinf->nRects!=self->Clip.nRects ) changed = 1; - else - { - if( clpinf->nOutterClips!=self->Clip.nOutterClips ) changed = 1; - else - { - for( i=0 ; inOutterClips ; i++ ) - { - if( memcmp(&clpinf->outterClips[i], &self->Clip.outterClips[i], - sizeof(PsRectRec))!=0 ) break; - } - if( inOutterClips ) changed = 1; - else - { - for( i=0 ; inRects ; i++ ) - { - if( memcmp(&clpinf->rects[i], &self->Clip.rects[i], - sizeof(PsRectRec))!=0 ) { changed = 1; break; } - } - } - } - } - if( clpinf->nElms!=self->Clip.nElms ) changed = 1; - else - { - for( i=0 ; inElms ; i++ ) - { - if( clpinf->elms[i].type!=PSOUT_POINTS ) - { - if( memcmp(&clpinf->elms[i], &self->Clip.elms[i], - sizeof(PsElmRec))!=0 ) { changed = 1; break; } - } - else - { - if( clpinf->elms[i].type!=self->Clip.elms[i].type || - clpinf->elms[i].nPoints!=self->Clip.elms[i].nPoints ) - { changed = 1; break; } - else - { - for( k=0 ; kelms[i].nPoints ; k++ ) - { - if( memcmp(&clpinf->elms[i].c.points[k], - &self->Clip.elms[i].c.points[k], sizeof(PsPointRec)) ) - { changed = 1; break; } - } - if( changed ) break; - } - } - } - } - } - - if( self->Clip.rects ) xfree(self->Clip.rects); - if( self->Clip.outterClips ) xfree(self->Clip.outterClips); - if( self->Clip.elms ) - PsDestroyFillElementList(self->Clip.nElms, self->Clip.elms); - self->ClipType = clpTyp; - self->Clip.nRects = clpinf->nRects; - self->Clip.nElms = clpinf->nElms; - self->Clip.nOutterClips = clpinf->nOutterClips; - if( clpinf->nRects ) - { - self->Clip.rects = (PsRectPtr)xalloc(clpinf->nRects*sizeof(PsRectRec)); - memcpy(self->Clip.rects, clpinf->rects, clpinf->nRects*sizeof(PsRectRec)); - } - else self->Clip.rects = 0; - if( clpinf->nOutterClips ) - { - self->Clip.outterClips = (PsRectPtr)xalloc(clpinf->nOutterClips* - sizeof(PsRectRec)); - memcpy(self->Clip.outterClips, clpinf->outterClips, - clpinf->nOutterClips*sizeof(PsRectRec)); - } - else self->Clip.outterClips = 0; - if( clpinf->nElms ) - self->Clip.elms = PsCloneFillElementList(clpinf->nElms, clpinf->elms); - else self->Clip.elms = 0; - - PsOut_DirtyAttributes(self); - S_OutTok(self, "gr gs", 1); - if( self->Clip.nOutterClips ) - { - for( i=0 ; iClip.nOutterClips ; i++ ) - { - S_OutNum(self, (float)(self->Clip.outterClips[i].x)); - S_OutNum(self, (float)(self->Clip.outterClips[i].y)); - S_OutNum(self, (float)self->Clip.outterClips[i].w); - S_OutNum(self, (float)self->Clip.outterClips[i].h); - S_OutTok(self, "R", 1); - } - S_OutTok(self, "cl n", 1); - } - if( self->Clip.nRects ) - { - for( i=0 ; iClip.nRects ; i++ ) - { - S_OutNum(self, (float)(self->Clip.rects[i].x+xo)); - S_OutNum(self, (float)(self->Clip.rects[i].y+yo)); - S_OutNum(self, (float)self->Clip.rects[i].w); - S_OutNum(self, (float)self->Clip.rects[i].h); - S_OutTok(self, "R", 1); - } - S_OutTok(self, "cl n", 1); - } - if( self->Clip.nElms ) - { - PsElmPtr elm = self->Clip.elms; - for( i=0 ; iClip.nElms ; i++,elm++ ) - { - switch(elm->type) - { - case PSOUT_POINTS: - for( k=0 ; knPoints ; k++ ) - { - S_OutNum(self, (float)elm->c.points[k].x+xo); - S_OutNum(self, (float)elm->c.points[k].y+yo); - if( k==0 ) S_OutTok(self, "m", 0); - else S_OutTok(self, "l", 0); - } - S_OutTok(self, "cp", 1); - break; - case PSOUT_RECT: - S_OutNum(self, (float)elm->c.rect.x+xo); - S_OutNum(self, (float)elm->c.rect.y+yo); - S_OutNum(self, (float)elm->c.rect.w); - S_OutNum(self, (float)elm->c.rect.h); - S_OutTok(self, "R", 1); - break; - case PSOUT_ARC: - if( elm->c.arc.style==PsPieSlice ) - { - S_OutNum(self, (float)elm->c.arc.x+xo+(float)elm->c.arc.w/2.); - S_OutNum(self, (float)elm->c.arc.y+yo+(float)elm->c.arc.h/2.); - S_OutTok(self, "m", 0); - } - S_OutNum(self, (float)elm->c.arc.x+xo+(float)elm->c.arc.w/2.); - S_OutNum(self, (float)elm->c.arc.y+yo+(float)elm->c.arc.h/2.); - S_OutNum(self, (float)elm->c.arc.w); - S_OutNum(self, (float)elm->c.arc.h); - S_OutNum(self, (float)elm->c.arc.a1/64.); - S_OutNum(self, (float)elm->c.arc.a1/64.+(float)elm->c.arc.a2/64.); - if( elm->c.arc.a2<0 ) S_OutTok(self, "An cp", 1); - else S_OutTok(self, "Ac cp", 1); - break; - } - } - S_OutTok(self, "cl n", 1); - } -} - -void -PsOut_Color(PsOutPtr self, PsOutColor clr) -{ - if( clr==self->CurColor || self->InTile>=PsStip ) return; - self->CurColor = clr; - S_Color(self, clr); -} - -void -PsOut_FillRule(PsOutPtr self, PsRuleEnum rule) -{ - self->FillRule = rule; -} - -void -PsOut_LineAttrs(PsOutPtr self, int wd, PsCapEnum cap, PsJoinEnum join, - int nDsh, int *dsh, int dshOff, PsOutColor bclr) -{ - int i; - int same = 1; - - if( wd!=self->LineWidth && wd>=0 ) - { - if( wd==0 ) wd = 1; - self->LineWidth = wd; - S_OutNum(self, (float)wd); S_OutTok(self, "w", 1); - } - if( cap!=self->LineCap ) - { - self->LineCap = cap; - S_OutNum(self, (float)cap); S_OutTok(self, "lc", 1); - } - if( join!=self->LineJoin ) - { - self->LineJoin = join; - S_OutNum(self, (float)join); S_OutTok(self, "lj", 1); - } - if( nDsh!=self->NDashes ) same = 0; - else if( dshOff!=self->DashOffset ) same = 0; - else if( nDsh ) - { - for( i=0 ; iDashes[i] ) break; } - if( iNDashes && self->Dashes ) - { xfree(self->Dashes); self->Dashes = (int *)0; } - self->NDashes = nDsh; - self->DashOffset = dshOff; - if( nDsh ) self->Dashes = (int *)xalloc(sizeof(int)*nDsh); - S_OutTok(self, "[", 0); - for( i=0 ; iDashes[i] = dsh[i]; - S_OutNum(self, (float)dsh[i]); - } - S_OutTok(self, "]", 0); - S_OutNum(self, (float)dshOff); - S_OutTok(self, "ds", 1); - } - - if( nDsh ) - self->LineBClr = bclr; - else - bclr = PSOUTCOLOR_NOCOLOR; -} - -void -PsOut_TextAttrs(PsOutPtr self, char *fnam, int siz, int iso) -{ - int i; - char buf[256]; - if( self->FontName && strcmp(fnam, self->FontName)==0 && - siz==self->FontSize ) return; - if( self->FontName ) xfree(self->FontName); - self->FontName = (char *)xalloc(strlen(fnam)+1); - strcpy(self->FontName, fnam); - self->FontSize = siz; - for( i=0 ; i<4 ; i++ ) self->FontMtx[i] = -1.; - strcpy(buf, "/"); strcat(buf, fnam); - S_OutTok(self, buf, 0); - S_OutNum(self, (float)siz); - if( iso ) S_OutTok(self, "t", 0); - else S_OutTok(self, "f", 0); - S_OutTok(self, "Tf", 1); -} - -void -PsOut_TextAttrsMtx(PsOutPtr self, char *fnam, float *mtx, int iso) -{ - int i; - char buf[256]; - if( self->FontName && strcmp(fnam, self->FontName)==0 && - mtx[0]==self->FontMtx[0] && mtx[1]==self->FontMtx[1] && - mtx[2]==self->FontMtx[2] && mtx[3]==self->FontMtx[3] ) return; - if( self->FontName ) xfree(self->FontName); - self->FontName = (char *)xalloc(strlen(fnam)+1); - strcpy(self->FontName, fnam); - for( i=0 ; i<4 ; i++ ) self->FontMtx[i] = mtx[i]; - self->FontSize = -1; - strcpy(buf, "/"); strcat(buf, fnam); strcat(buf, " ["); - S_OutTok(self, buf, 0); - for( i=0 ; i<4 ; i++ ) S_OutNum(self, mtx[i]); - S_OutTok(self, "0 0]", 0); - if( iso ) S_OutTok(self, "t", 0); - else S_OutTok(self, "f", 0); - S_OutTok(self, "Tfm", 1); -} - -void -PsOut_Polygon(PsOutPtr self, int nPts, PsPointPtr pts) -{ - int i; - int xo = self->XOff; - int yo = self->YOff; - - if( self->InFrame || self->InTile ) xo = yo = 0; - if( nPts<=2 ) return; - for( i=0 ; iFillRule==PsEvenOdd ) S_OutTok(self, "cp ef", 1); - else S_OutTok(self, "cp fl", 1); -} - -void -PsOut_FillRect(PsOutPtr self, int x, int y, int w, int h) -{ - int xo = self->XOff; - int yo = self->YOff; - - if( self->InFrame || self->InTile ) xo = yo = 0; - x += xo; y += yo; - S_OutNum(self, (float)x); - S_OutNum(self, (float)y); - S_OutNum(self, (float)w); - S_OutNum(self, (float)h); - S_OutTok(self, "R fl", 1); -} - -void -PsOut_FillArc(PsOutPtr self, int x, int y, int w, int h, - float ang1, float ang2, PsArcEnum style) -{ - int xo = self->XOff; - int yo = self->YOff; - - if( self->InFrame || self->InTile ) xo = yo = 0; - x += xo; y += yo; - if( style==PsPieSlice ) - { - S_OutNum(self, (float)x+(float)w/2.); - S_OutNum(self, (float)y+(float)h/2.); - S_OutTok(self, "m", 0); - } - S_OutNum(self, (float)x+(float)w/2.); - S_OutNum(self, (float)y+(float)h/2.); - S_OutNum(self, (float)w); - S_OutNum(self, (float)h); - S_OutNum(self, ang1); - S_OutNum(self, ang1+ang2); - if( ang2<0 ) S_OutTok(self, "An cp fl", 1); - else S_OutTok(self, "Ac cp fl", 1); -} - -void -PsOut_Lines(PsOutPtr self, int nPts, PsPointPtr pts) -{ - int i; - int xo = self->XOff; - int yo = self->YOff; - - if( self->InFrame || self->InTile ) xo = yo = 0; - if( nPts<1 ) return; - for( i=0 ; iLineBClr != PSOUTCOLOR_NOCOLOR ) - { - S_OutTok(self, "gs", 0); - S_Color(self, self->LineBClr); - S_OutTok(self, "[] 0 ds st gr", 0); - } - S_OutTok(self, "st", 1); -} - -void -PsOut_Points(PsOutPtr self, int nPts, PsPointPtr pts) -{ - int i; - int xo = self->XOff; - int yo = self->YOff; - - if( self->InFrame || self->InTile ) xo = yo = 0; - if( nPts<1 ) return; - for( i=0 ; iXOff; - int yo = self->YOff; - - if( self->InFrame || self->InTile ) xo = yo = 0; - x += xo; y += yo; - S_OutNum(self, (float)x); - S_OutNum(self, (float)y); - S_OutNum(self, (float)w); - S_OutNum(self, (float)h); - S_OutTok(self, "R", 0); - if( self->LineBClr != PSOUTCOLOR_NOCOLOR ) - { - S_OutTok(self, "gs", 0); - S_Color(self, self->LineBClr); - S_OutTok(self, "[] 0 ds st gr", 0); - } - S_OutTok(self, "st", 1); -} - -void -PsOut_DrawArc(PsOutPtr self, int x, int y, int w, int h, - float ang1, float ang2) -{ - int xo = self->XOff; - int yo = self->YOff; - - if( self->InFrame || self->InTile ) xo = yo = 0; - x += xo; y += yo; - S_OutNum(self, (float)x+(float)w/2.); - S_OutNum(self, (float)y+(float)h/2.); - S_OutNum(self, (float)w); - S_OutNum(self, (float)h); - S_OutNum(self, ang1); - S_OutNum(self, ang1+ang2); - if( ang2<0 ) S_OutTok(self, "An", 0); - else S_OutTok(self, "Ac", 0); - if( self->LineBClr != PSOUTCOLOR_NOCOLOR ) - { - S_OutTok(self, "gs", 0); - S_Color(self, self->LineBClr); - S_OutTok(self, "[] 0 ds st gr", 0); - } - S_OutTok(self, "st", 1); -} - -void -PsOut_Text(PsOutPtr self, int x, int y, char *text, int textl, PsOutColor bclr) -{ - int xo = self->XOff; - int yo = self->YOff; - - if( self->InFrame || self->InTile ) xo = yo = 0; - x += xo; y += yo; - S_OutStr(self, text, textl); - S_OutNum(self, (float)x); - S_OutNum(self, (float)y); - if( bclr == PSOUTCOLOR_NOCOLOR ) - S_OutTok(self, "T", 1); - else - { - int ir = PSOUTCOLOR_TO_REDBITS(bclr); - int ig = PSOUTCOLOR_TO_GREENBITS(bclr); - int ib = PSOUTCOLOR_TO_BLUEBITS(bclr); - - S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ir)); - S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ig)); - S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ib)); - S_OutTok(self, "Tb", 1); - } -} - -void -PsOut_Text16(PsOutPtr self, int x, int y, unsigned short *text, int textl, PsOutColor bclr) -{ - int xo = self->XOff; - int yo = self->YOff; - - if( self->InFrame || self->InTile ) xo = yo = 0; - x += xo; y += yo; - S_OutStr16(self, text, textl); - S_OutNum(self, (float)x); - S_OutNum(self, (float)y); - if( bclr == PSOUTCOLOR_NOCOLOR ) - S_OutTok(self, "T", 1); - else - { - int ir = PSOUTCOLOR_TO_REDBITS(bclr); - int ig = PSOUTCOLOR_TO_GREENBITS(bclr); - int ib = PSOUTCOLOR_TO_BLUEBITS(bclr); - S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ir)); - S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ig)); - S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ib)); - S_OutTok(self, "Tb", 1); - } -} - -#ifdef BM_CACHE -void /* new */ -PsOut_ImageCache(PsOutPtr self, int x, int y, long cache_id, PsOutColor bclr, PsOutColor fclr) -{ - char cacheID[10]; - int xo = self->XOff; - int yo = self->YOff; - - if( self->InFrame || self->InTile ) xo = yo = 0; - x += xo; y += yo; - sprintf(cacheID, "c%di", cache_id); - - S_OutNum(self, (float)x); - S_OutNum(self, (float)y); - - if( fclr==PSOUTCOLOR_WHITE ) - { - int ir = PSOUTCOLOR_TO_REDBITS(bclr); - int ig = PSOUTCOLOR_TO_GREENBITS(bclr); - int ib = PSOUTCOLOR_TO_BLUEBITS(bclr); - - if( ir==ig && ig==ib ) - S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ir)); - else - S_OutNum(self, (float)0); - self->RevImage = 1; - } - else - { - int ir = PSOUTCOLOR_TO_REDBITS(fclr); - int ig = PSOUTCOLOR_TO_GREENBITS(fclr); - int ib = PSOUTCOLOR_TO_BLUEBITS(fclr); - - if( ir==ig && ig==ib ) - S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ir)); - else - S_OutNum(self, (float)0); - } - - S_OutTok(self, cacheID, 1); -} /* new */ - -void /* new */ -PsOut_BeginImageCache(PsOutPtr self, long cache_id) -{ - char cacheID[10]; - - sprintf(cacheID, "/c%di {", cache_id); - - S_OutTok(self, cacheID, 0); -} /* new */ - -void /* new */ -PsOut_EndImageCache(PsOutPtr self) -{ - S_OutTok(self, "}bd", 1); -} /* new */ -#endif - -void -PsOut_BeginImage(PsOutPtr self, PsOutColor bclr, PsOutColor fclr, int x, int y, - int w, int h, int sw, int sh, int format) -{ - PsOutColor savClr = self->CurColor; - int xo = self->XOff; - int yo = self->YOff; - - if( self->InFrame || self->InTile ) xo = yo = 0; - x += xo; y += yo; - if( self->InTile ) - { - if( self->InTile>=PsStip && format!=1 ) { self->ImgSkip = 1; return; } - self->ImgBClr = bclr; self->ImgFClr = fclr; - self->ImgX = x; self->ImgY = y; - self->ImgW = w; self->ImgH = h; - self->SclW = sw; self->SclH = sh; - S_OutTok(self, "<", 0); - self->ImageFormat = format; - self->RevImage = 0; - if( self->InTile==PsTile && format==1 && fclr==PSOUTCOLOR_WHITE ) - self->RevImage = 1; - return; - } - - self->RevImage = 0; - if( format==1 ) - { - S_OutTok(self, "gs", 0); - if( fclr==PSOUTCOLOR_WHITE ) - { - PsOut_Color(self, fclr); - PsOut_FillRect(self, x, y, sw, sh); - PsOut_Color(self, bclr); - self->RevImage = 1; - } - else - { - PsOut_Color(self, bclr); - PsOut_FillRect(self, x, y, sw, sh); - PsOut_Color(self, fclr); - } - } - S_OutNum(self, (float)x); - S_OutNum(self, (float)y); - S_OutNum(self, (float)w); - S_OutNum(self, (float)h); - S_OutNum(self, (float)sw); - S_OutNum(self, (float)sh); - if( format==1 ) { - if(self->RevImage) - S_OutTok(self, "Im1rev", 1); - else - S_OutTok(self, "Im1", 1); - } - else S_OutTok(self, "Im24", 1); - self->ImageFormat = format; - self->CurColor = savClr; -} - -void -PsOut_BeginImageIM(PsOutPtr self, PsOutColor bclr, PsOutColor fclr, int x, int y, - int w, int h, int sw, int sh, int format) -{ - PsOutColor savClr = self->CurColor; - int xo = self->XOff; - int yo = self->YOff; - - if( self->InFrame || self->InTile ) xo = yo = 0; - x += xo; y += yo; - if( self->InTile ) - { - if( self->InTile>=PsStip && format!=1 ) { self->ImgSkip = 1; return; } - self->ImgBClr = bclr; self->ImgFClr = fclr; - self->ImgX = x; self->ImgY = y; - self->ImgW = w; self->ImgH = h; - self->SclW = sw; self->SclH = sh; - S_OutTok(self, "<", 0); - self->ImageFormat = format; - self->RevImage = 0; - if( self->InTile==PsTile && format==1 && fclr==PSOUTCOLOR_WHITE ) - self->RevImage = 1; - return; - } - - self->RevImage = 0; - if( format==1 ) - { - S_OutTok(self, "gs", 0); -#ifdef BM_CACHE - S_OutTok(self, "g", 1); -#else - if( fclr==PSOUTCOLOR_WHITE ) - { - PsOut_Color(self, bclr); - self->RevImage = 1; - } - else - { - PsOut_Color(self, fclr); - } -#endif - } - -#ifdef BM_CACHE - S_OutTok(self, "tr", 0); /* new */ -#else - S_OutNum(self, (float)x); - S_OutNum(self, (float)y); -#endif - S_OutNum(self, (float)w); - S_OutNum(self, (float)h); - S_OutNum(self, (float)sw); - S_OutNum(self, (float)sh); -#ifdef BM_CACHE - S_OutTok(self, "mtx", 1); /* new */ - S_OutTok(self, "<", 0); /* new */ - self->start_image = 1; -#else - if( format==1 ){ - if(self->RevImage) - S_OutTok(self, "Im1rev", 1); - else - S_OutTok(self, "Im1", 1); - } - else S_OutTok(self, "Im24", 1); -#endif - self->ImageFormat = format; - self->CurColor = savClr; -} - -void -PsOut_EndImage(PsOutPtr self) -{ - if( self->ImgSkip ) { self->ImgSkip = 0; return; } - if( self->InTile ) - { - S_OutTok(self, ">", 1); - if( self->ImageFormat==1 && self->InTile==PsTile ) - { - if( self->ImgFClr==PSOUTCOLOR_WHITE ) - { - PsOut_Color(self, self->ImgFClr); - PsOut_FillRect(self, self->ImgX, self->ImgY, self->SclW, self->SclH); - PsOut_Color(self, self->ImgBClr); - } - else - { - PsOut_Color(self, self->ImgBClr); - PsOut_FillRect(self, self->ImgX, self->ImgY, self->SclW, self->SclH); - PsOut_Color(self, self->ImgFClr); - } - } - S_OutNum(self, (float)self->ImgX); - S_OutNum(self, (float)self->ImgY); - S_OutNum(self, (float)self->ImgW); - S_OutNum(self, (float)self->ImgH); - S_OutNum(self, (float)self->SclW); - S_OutNum(self, (float)self->SclH); - if( self->ImageFormat==1 ) S_OutTok(self, "Im1t", 1); - else S_OutTok(self, "Im24t", 1); - self->ImageFormat = 0; - self->RevImage = 0; - return; - } - /* - * Bug 4639307: Move flush before "> im" to get all of bitmap into ps file. - */ - S_Flush(self); -#ifdef BM_CACHE - if(self->start_image) - S_OutTok(self, "> im", 1); /* new */ -#endif - self->ImageFormat = 0; - self->RevImage = 0; -#ifdef BM_CACHE - if(self->start_image) - { - self->start_image = 0; - S_OutTok(self, "gr", 0); - } - else - S_OutTok(self, "gr", 1); -#else - S_OutTok(self, "gr", 1); -#endif -} - -void -PsOut_OutImageBytes(PsOutPtr self, int nBytes, char *bytes) -{ - int i; - int b; - int len; - const char hex[] = { '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; - - if( (!self->ImageFormat) || self->ImgSkip ) return; - - len = strlen(self->Buf); - - for( i=0 ; iRevImage ) b = (int)((bytes[i]^0xFF)&0xFF); - else b = (int)(bytes[i]&0xFF); - - self->Buf[len++] = hex[(b&0xF0) >> 4]; - self->Buf[len++] = hex[(b&0x0F)]; - self->Buf[len] = '\0'; - - if( len>70 ) - { - S_Flush(self); - len = 0; - } - } -} - -void -PsOut_BeginFrame(PsOutPtr self, int xoff, int yoff, int x, int y, - int w, int h) -{ - int xo = self->XOff; - int yo = self->YOff; - - if( self->InFrame ) xo = yo = 0; - S_OutTok(self, "gs", 0); - S_OutNum(self, (float)(x+xo)); - S_OutNum(self, (float)(y+yo)); - S_OutNum(self, (float)w); - S_OutNum(self, (float)h); - S_OutTok(self, "R cl n", 0); - xoff += xo; yoff += yo; - if( xoff || yoff ) - { - S_OutNum(self, (float)xoff); - S_OutNum(self, (float)yoff); - S_OutTok(self, "tr", 0); - } - S_OutTok(self, "gs", 1); - self->InFrame += 1; -} - -void -PsOut_EndFrame(PsOutPtr self) -{ - self->InFrame -= 1; - if( self->InFrame<0 ) self->InFrame = 0; - S_OutTok(self, "gr gr", 1); - PsOut_DirtyAttributes(self); -} - -int -PsOut_BeginPattern(PsOutPtr self, void *tag, int w, int h, PsFillEnum type, - PsOutColor bclr, PsOutColor fclr) -{ - int i; - char key[64]; - - for( i=0 ; iNPatterns ; i++ ) - { if( self->Patterns[i].tag==tag && self->Patterns[i].type==type ) break; } - if( iNPatterns ) return(1); - if( (self->NPatterns+1)>self->MxPatterns ) - { - if( self->Patterns ) - { - self->MxPatterns *= 2; - self->Patterns = - (PsPatPtr)xrealloc(self->Patterns, sizeof(PsPatRec)*self->MxPatterns); - } - else - { - self->MxPatterns = 64; - self->Patterns = (PsPatPtr)xalloc(sizeof(PsPatRec)*self->MxPatterns); - } - } - self->Patterns[self->NPatterns].tag = tag; - self->Patterns[self->NPatterns].type = type; - sprintf(key, "/ %d", (int)tag); - switch(type) { - case PsTile: key[1] = 't'; break; - case PsStip: key[1] = 's'; break; - case PsOpStip: key[1] = 'o'; break; - default: break; } - S_OutTok(self, key, 0); - S_OutTok(self, "db/PatternType 1 d/PaintType 1 d", 0); - S_OutTok(self, "/TilingType 1 d/BBox[0 0", 0); - S_OutNum(self, (float)w); - S_OutNum(self, (float)h); - S_OutTok(self, "]d/XStep", 0); - S_OutNum(self, (float)w); - S_OutTok(self, "d/YStep", 0); - S_OutNum(self, (float)h); - S_OutTok(self, "d/PaintProc{bg sv", 1); - if( type==PsOpStip ) - { - S_Color(self, bclr); - S_OutTok(self, "0 0", 0); - S_OutNum(self, (float)w); - S_OutNum(self, (float)h); - S_OutTok(self, "R fl", 1); - } - if( type!=PsTile ) S_Color(self, fclr); - self->NPatterns += 1; - self->InTile = type; - return(0); -} - -void -PsOut_EndPattern(PsOutPtr self) -{ - self->InTile = PsSolid; - S_OutTok(self, "rs ed}d de im_ mp d", 1); -} - -void -PsOut_SetPattern(PsOutPtr self, void *tag, PsFillEnum type) -{ - int i; - char key[64]; - - for( i=0 ; iNPatterns ; i++ ) - { if( tag==self->Patterns[i].tag && type==self->Patterns[i].type ) break; } - if( i>=self->NPatterns ) return; - sprintf(key, " %d", (int)tag); - switch(type) { - case PsTile: key[0] = 't'; break; - case PsStip: key[0] = 's'; break; - case PsOpStip: key[0] = 'o'; break; - default: break; } - S_OutTok(self, key, 0); - S_OutTok(self, "spt", 1); - self->CurColor = PSOUTCOLOR_NOCOLOR; -} - -void -PsOut_RawData(PsOutPtr self, char *data, int len) -{ - S_Flush(self); - if (!ferror(self->Fp)) { - (void) fwrite(data, 1, len, self->Fp); - } -} - -typedef enum PsDownfontFontType_ -{ - PsDFT_Type1PFA=0, - PsDFT_Type1PFB, - PsDFT_TrueType /* not implemented yet */ -} PsDownfontFontType; - -/* Download a PS Type1 font */ -int -PsOut_DownloadType1(PsOutPtr self, const char *auditmsg, const char *name, const char *fname) -{ - int stt; - char buf[256]; - FILE *fp; - PsDownfontFontType type; - - fp = fopen(fname, "r"); - if( !fp ) - return 0; - -#ifdef DEBUG_gisburn - /* This should be log-able! */ - fprintf(stderr, "PsOut_DownloadType1: %s: Downloading '%s' from '%s'\n", auditmsg, name, fname); -#endif /* DEBUG_gisburn */ - - fread(buf, 32, 1, fp); - fseek(fp, (long)0, 0); - - /* Is this a Adobe PostScript Type 1 binary font (PFB) ? */ - if( (buf[0]&0xFF)==0x80 && (buf[1]&0xFF)==0x01 ) - { - type = PsDFT_Type1PFB; - } - /* Is this a Adobe PostScript ASCII font (PFA) ? */ - else if (!strncmp(buf, "%!PS-AdobeFont", 14)) - { - type = PsDFT_Type1PFA; - } - else - { - /* This should be log-able! */ - fprintf(stderr, "PsOut_DownloadType1: Unknown font type for '%s'\n", fname); - return 0; - } - - S_Flush(self); - sprintf(buf, "%%%%BeginFont: %s", name); - S_Comment(self, buf); - - if( type == PsDFT_Type1PFB ) - { - char *buf, - *pt; - int len, - ch, - stype; - - ch = fgetc(fp); - /* Strip out the binary headers and de-binary it */ - while( (ch&0xFF) == 0x80 ) - { - stype = fgetc(fp); - if( stype==3 ) /* eof mark */ - break; - len = fgetc(fp); - len |= fgetc(fp)<<8; - len |= fgetc(fp)<<16; - len |= fgetc(fp)<<24; - buf = (char *)xalloc(len+1); - if( stype==1 ) - { - /* Process ASCII section */ - len = fread(buf, 1, len, fp); - /* convert any lone CRs (ie Mac eol) to LFs */ - for( pt = buf ; (pt = memchr(pt, '\r', len-(pt-buf))) != NULL ; pt++ ) - { - if ( pt[1]!='\n' ) - *pt = '\n'; - } - fwrite(buf, 1, len, self->Fp); - } - else if( stype==2 ) - { - int i; - - /* Process binary section */ - len = fread(buf, 1, len, fp); - for( i=0 ; i>4)&0xf) <= 9 ) - fputc('0'+((ch>>4)&0xf), self->Fp); - else - fputc('A'-10+((ch>>4)&0xf), self->Fp); - - if( (ch&0xf) <= 9 ) - fputc('0'+(ch&0xf), self->Fp); - else - fputc('A'-10+(ch&0xf), self->Fp); - - if( (i&0x1f)==0x1f ) - fputc('\n', self->Fp); - } - } - xfree(buf); - - /* Next block... */ - ch = fgetc(fp); - } - } - /* Is this a Adobe PostScript ASCII font (PFA) ? */ - else if (type == PsDFT_Type1PFA) - { - for(;;) - { - stt = fread(buf, 1, 256, fp); - if( stt<=0 ) break; - if (!ferror(self->Fp)) { - (void) fwrite(buf, 1, stt, self->Fp); - } - if( stt<256 ) - break; - } - } - fclose(fp); - S_Flush(self); - S_Comment(self, "%%EndFont"); - - /* Success... */ - return 1; -} - - - - - - diff --git a/hw/xprint/ps/psout.h b/hw/xprint/ps/psout.h deleted file mode 100644 index 1138e4afe..000000000 --- a/hw/xprint/ps/psout.h +++ /dev/null @@ -1,335 +0,0 @@ -/* - -Copyright 1996, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ -/* - * (c) Copyright 1996 Hewlett-Packard Company - * (c) Copyright 1996 International Business Machines Corp. - * (c) Copyright 1996 Sun Microsystems, Inc. - * (c) Copyright 1996 Novell, Inc. - * (c) Copyright 1996 Digital Equipment Corp. - * (c) Copyright 1996 Fujitsu Limited - * (c) Copyright 1996 Hitachi, Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject - * to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF - * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Except as contained in this notice, the names of the copyright holders - * shall not be used in advertising or otherwise to promote the sale, use - * or other dealings in this Software without prior written authorization - * from said copyright holders. - */ - -/******************************************************************* -** -** ********************************************************* -** * -** * File: psout.h -** * -** * Contents: Include file for psout.c -** * -** * Created By: Roger Helmendach (Liberty Systems) -** * -** * Copyright: Copyright 1996 The Open Group, Inc. -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#ifndef _psout_ -#define _psout_ - -#include - -typedef enum PsCapEnum_ { PsCButt=0, PsCRound, PsCSquare } PsCapEnum; -typedef enum PsJoinEnum_ { PsJMiter=0, PsJRound, PsJBevel } PsJoinEnum; -typedef enum PsArcEnum_ { PsChord, PsPieSlice } PsArcEnum; -typedef enum PsRuleEnum_ { PsEvenOdd, PsNZWinding } PsRuleEnum; -typedef enum PsFillEnum_ { PsSolid=0, PsTile, PsStip, PsOpStip } PsFillEnum; - -typedef struct PsPointRec_ -{ - int x; - int y; -} PsPointRec; - -typedef PsPointRec *PsPointPtr; - -typedef struct PsRectRec_ -{ - int x; - int y; - int w; - int h; -} PsRectRec; - -typedef PsRectRec *PsRectPtr; - -typedef struct PsArcRec_ -{ - int x; - int y; - int w; - int h; - int a1; - int a2; - PsArcEnum style; -} PsArcRec; - -typedef PsArcRec *PsArcPtr; - -#define PSOUT_RECT 0 -#define PSOUT_ARC 1 -#define PSOUT_POINTS 2 - -typedef struct PsElmRec_ -{ - int type; - int nPoints; - union - { - PsRectRec rect; - PsArcRec arc; - PsPointPtr points; - } c; -} PsElmRec; - -typedef PsElmRec *PsElmPtr; - -typedef struct PsClipRec_ -{ - int nRects; - PsRectPtr rects; - int nElms; - PsElmPtr elms; - int nOutterClips; - PsRectPtr outterClips; -} PsClipRec; - -typedef PsClipRec *PsClipPtr; - -typedef enum PsFTDownloadFontType_ -{ - PsFontBitmap=0, - PsFontType1, - PsFontType3 -} PsFTDownloadFontType; - -/* Define |PsOutColor| color type which can hold one RGB value - * (note: this needs to be |signed| long/long long to represent - * special values such as |PSOUTCOLOR_NOCOLOR|) - */ -#ifdef PSOUT_USE_DEEPCOLOR -/* 64bit |PsOutColor| which can hold 16bit R-,G-,B-values */ -#ifdef WIN32 -typedef signed __int64 PsOutColor; -#else -# if defined(__alpha__) || defined(__alpha) || \ - defined(ia64) || defined(__ia64__) || \ - defined(__sparc64__) || defined(_LP64) || \ - defined(__s390x__) || \ - defined(amd64) || defined (__amd64__) || defined(__x86_64__) || \ - defined (__powerpc64__) || \ - (defined(sgi) && (_MIPS_SZLONG == 64)) -typedef signed long PsOutColor; -# else -typedef signed long long PsOutColor; -# endif /* native 64bit platform */ -#endif /* WIN32 */ - -#define PSOUTCOLOR_TO_REDBITS(clr) ((clr) >> 32) -#define PSOUTCOLOR_TO_GREENBITS(clr) (((clr) >> 16) & 0xFFFF) -#define PSOUTCOLOR_TO_BLUEBITS(clr) ((clr) & 0xFFFF) -#define PSOUTCOLOR_BITS_TO_PSFLOAT(b) ((float)(b) / 65535.) -#define PSOUTCOLOR_WHITE (0xFFFFFFFFFFFFLL) -#define PSOUTCOLOR_NOCOLOR (-1LL) -#define PSOUTCOLOR_TO_RGB24BIT(clr) (((PSOUTCOLOR_TO_REDBITS(clr) >> 8) << 16) | \ - ((PSOUTCOLOR_TO_GREENBITS(clr) >> 8) << 8) | \ - ((PSOUTCOLOR_TO_BLUEBITS(clr) >> 8) << 0)) -#else -/* 32bit |PsOutColor| which can hold 8bit R-,G-,B-values */ -typedef signed long PsOutColor; -#define PSOUTCOLOR_TO_REDBITS(clr) ((clr) >> 16) -#define PSOUTCOLOR_TO_GREENBITS(clr) (((clr) >> 8) & 0xFF) -#define PSOUTCOLOR_TO_BLUEBITS(clr) ((clr) & 0xFF) -#define PSOUTCOLOR_BITS_TO_PSFLOAT(b) ((float)(b) / 255.) -#define PSOUTCOLOR_WHITE (0xFFFFFF) -#define PSOUTCOLOR_NOCOLOR (-1) -#define PSOUTCOLOR_TO_RGB24BIT(clr) ((PSOUTCOLOR_TO_REDBITS(clr) << 16) | \ - (PSOUTCOLOR_TO_GREENBITS(clr) << 8) | \ - (PSOUTCOLOR_TO_BLUEBITS(clr) << 0)) -#endif /* PSOUT_USE_DEEPCOLOR */ - -#ifdef USE_PSOUT_PRIVATE -typedef void *voidPtr; - -typedef struct PsPatRec_ -{ - PsFillEnum type; - voidPtr tag; -} PsPatRec; - -typedef PsPatRec *PsPatPtr; - -typedef struct PsOutRec_ -{ - FILE *Fp; - char Buf[16384]; - PsOutColor CurColor; - int LineWidth; - PsCapEnum LineCap; - PsJoinEnum LineJoin; - int NDashes; - int *Dashes; - int DashOffset; - PsOutColor LineBClr; - PsRuleEnum FillRule; - char *FontName; - int FontSize; - float FontMtx[4]; - int ImageFormat; - int RevImage; - int NPatterns; - int MxPatterns; - PsPatPtr Patterns; - int ClipType; - PsClipRec Clip; - int InFrame; - int XOff; - int YOff; - - PsFillEnum InTile; - int ImgSkip; - PsOutColor ImgBClr; - PsOutColor ImgFClr; - int ImgX; - int ImgY; - int ImgW; - int ImgH; - int SclW; - int SclH; - - Bool isRaw; - - int pagenum; - - int start_image; -} PsOutRec; - -typedef struct PsOutRec_ *PsOutPtr; - -extern void S_Flush(PsOutPtr self); -extern void S_OutNum(PsOutPtr self, float num); -extern void S_OutTok(PsOutPtr self, char *tok, int cr); -#else -typedef struct PsOutRec_ *PsOutPtr; -#endif /* USE_PSOUT_PRIVATE */ - -extern FILE * PsOut_ChangeFile(PsOutPtr self, FILE *fp); -extern PsOutPtr PsOut_BeginFile(FILE *fp, char *title, int orient, int count, int plex, - int res, int wd, int ht, Bool raw); -extern void PsOut_EndFile(PsOutPtr self, int closeFile); -extern void PsOut_BeginPage(PsOutPtr self, int orient, int count, int plex, - int res, int wd, int ht); -extern void PsOut_EndPage(PsOutPtr self); -extern void PsOut_DirtyAttributes(PsOutPtr self); -extern void PsOut_Comment(PsOutPtr self, char *comment); -extern void PsOut_Offset(PsOutPtr self, int x, int y); - -extern void PsOut_Clip(PsOutPtr self, int clpTyp, PsClipPtr clpinf); - -extern void PsOut_Color(PsOutPtr self, PsOutColor clr); -extern void PsOut_FillRule(PsOutPtr self, PsRuleEnum rule); -extern void PsOut_LineAttrs(PsOutPtr self, int wd, PsCapEnum cap, - PsJoinEnum join, int nDsh, int *dsh, int dshOff, - PsOutColor bclr); -extern void PsOut_TextAttrs(PsOutPtr self, char *fnam, int siz, int iso); -extern void PsOut_TextAttrsMtx(PsOutPtr self, char *fnam, float *mtx, int iso); - -extern void PsOut_Polygon(PsOutPtr self, int nPts, PsPointPtr pts); -extern void PsOut_FillRect(PsOutPtr self, int x, int y, int w, int h); -extern void PsOut_FillArc(PsOutPtr self, int x, int y, int w, int h, - float ang1, float ang2, PsArcEnum style); - -extern void PsOut_Lines(PsOutPtr self, int nPts, PsPointPtr pts); -extern void PsOut_Points(PsOutPtr self, int nPts, PsPointPtr pts); -extern void PsOut_DrawRect(PsOutPtr self, int x, int y, int w, int h); -extern void PsOut_DrawArc(PsOutPtr self, int x, int y, int w, int h, - float ang1, float ang2); - -extern void PsOut_Text(PsOutPtr self, int x, int y, char *text, int textl, - PsOutColor bclr); -extern void PsOut_Text16(PsOutPtr self, int x, int y, unsigned short *text, int textl, PsOutColor bclr); - -extern void PsOut_BeginImage(PsOutPtr self, PsOutColor bclr, PsOutColor fclr, int x, int y, - int w, int h, int sw, int sh, int format); -extern void PsOut_BeginImageIM(PsOutPtr self, PsOutColor bclr, PsOutColor fclr, int x, int y, - int w, int h, int sw, int sh, int format); -extern void PsOut_EndImage(PsOutPtr self); -extern void PsOut_OutImageBytes(PsOutPtr self, int nBytes, char *bytes); - -extern void PsOut_BeginFrame(PsOutPtr self, int xoff, int yoff, int x, int y, - int w, int h); -extern void PsOut_EndFrame(PsOutPtr self); - -extern int PsOut_BeginPattern(PsOutPtr self, void *tag, int w, int h, - PsFillEnum type, PsOutColor bclr, PsOutColor fclr); -extern void PsOut_EndPattern(PsOutPtr self); -extern void PsOut_SetPattern(PsOutPtr self, void *tag, PsFillEnum type); - -extern void PsOut_RawData(PsOutPtr self, char *data, int len); - -extern int PsOut_DownloadType1(PsOutPtr self, const char *auditmsg, const char *name, const char *fname); - -extern int PsOut_DownloadFreeType1(PsOutPtr self, const char *psfontname, FontPtr pFont, long block_offset); -extern int PsOut_DownloadFreeType3(PsOutPtr self, const char *psfontname, FontPtr pFont, long block_offset); - -extern int PsOut_DownloadFreeType(PsOutPtr self, PsFTDownloadFontType downloadfonttype, const char *psfontname, FontPtr pFont, long block_offset); -extern void PsOut_Get_FreeType_Glyph_Name( char *destbuf, FontPtr pFont, unsigned long x11fontindex); -extern void PsOut_FreeType_Text(FontPtr pFont, PsOutPtr self, int x, int y, char *text, int textl); -extern void PsOut_FreeType_Text16(FontPtr pFont, PsOutPtr self, int x, int y, unsigned short *text, int textl); - -extern void PsOut_FreeType_TextAttrs16(PsOutPtr self, char *fnam, int siz, int iso); -extern void PsOut_FreeType_TextAttrsMtx16(PsOutPtr self, char *fnam, float *mtx, int iso); -#endif diff --git a/hw/xprint/ps/psout_ft.c b/hw/xprint/ps/psout_ft.c deleted file mode 100644 index 30939f972..000000000 --- a/hw/xprint/ps/psout_ft.c +++ /dev/null @@ -1,337 +0,0 @@ - -/* -Copyright (c) 2003-2004 Roland Mainz - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include "os.h" -#define USE_PSOUT_PRIVATE 1 -#include "psout.h" - -#include -#include FT_FREETYPE_H -#include FT_TYPE1_TABLES_H - -#include -#include -#include -#include -#include -#include -#include -#define NOT_IN_FTFUNCS -#include -#include "servermd.h" /* needed for endian test (IMAGE_BYTE_ORDER) */ - -#define USE_FT_PS_NAMES 1 - -#ifdef USE_FT_PS_NAMES -void PsOut_Get_FreeType_Glyph_Name( char *destbuf, FontPtr pFont, unsigned long x11fontindex) -{ - FTFontPtr tf = (FTFontPtr)pFont->fontPrivate; - FT_Face ttface = tf->instance->face->face; - FT_Error error; - char buf[256]; - unsigned long ftindex; - - /* Remap X11 font index to FreeType font index */ - ftindex = FTRemap(ttface, &tf->mapping, x11fontindex); - - if( FT_Has_PS_Glyph_Names(ttface) ) - { - error = FT_Get_Glyph_Name(ttface, ftindex, buf, 64); - } - else - { - error = 1; - } - - if( error ) - { - /* Check for unicode mapping - * See Adobe document "Unicode and Glyph Names" - * (http://partners.adobe.com/asn/tech/type/unicodegn.jsp) - */ - if( (tf->mapping.mapping->type == FONT_ENCODING_UNICODE) && - (ftindex < 0xFFFE) ) - { - sprintf(buf, "uni%04lx", ftindex); - } - else - { - sprintf(buf, "ch%02lx", ftindex); - } - } - - strcpy(destbuf, buf); -} -#endif /* USE_FT_PS_NAMES */ - -int PsOut_DownloadFreeType(PsOutPtr self, PsFTDownloadFontType downloadfonttype, const char *psfontname, FontPtr pFont, long block_offset) -{ - switch(downloadfonttype) - { - case PsFontType3: - return PsOut_DownloadFreeType3(self, psfontname, pFont, block_offset); - case PsFontType1: - return PsOut_DownloadFreeType1(self, psfontname, pFont, block_offset); - default: - FatalError("PS DDX: PsOut_DownloadFreeType(downloadfonttype='%d' not implemented\n", - (int)downloadfonttype); - return 0; /* NO-OP, FatalError() will call |exit()| */ - } -} - -/* cloned from |PsOut_TextAttrs16| */ -void -PsOut_FreeType_TextAttrs16(PsOutPtr self, char *fnam, int siz, int iso) -{ - int i; - if( self->FontName && strcmp(fnam, self->FontName)==0 && - siz==self->FontSize ) return; - if( self->FontName ) xfree(self->FontName); - self->FontName = (char *)xalloc(strlen(fnam)+1); - strcpy(self->FontName, fnam); - self->FontSize = siz; - for( i=0 ; i<4 ; i++ ) self->FontMtx[i] = -1.; -} - -/* cloned from |PsOut_TextAttrsMtx16| */ -void -PsOut_FreeType_TextAttrsMtx16(PsOutPtr self, char *fnam, float *mtx, int iso) -{ - int i; - if( self->FontName && strcmp(fnam, self->FontName)==0 && - mtx[0]==self->FontMtx[0] && mtx[1]==self->FontMtx[1] && - mtx[2]==self->FontMtx[2] && mtx[3]==self->FontMtx[3] ) return; - if( self->FontName ) xfree(self->FontName); - self->FontName = (char *)xalloc(strlen(fnam)+1); - strcpy(self->FontName, fnam); - for( i=0 ; i<4 ; i++ ) self->FontMtx[i] = mtx[i]; - self->FontSize = -1; -} - -static -int FT_Get_CharcellMetricsCharacterHeight(FontPtr pFont) -{ - FTFontPtr ftfont = (FTFontPtr)pFont->fontPrivate; - - return ftfont->instance->charcellMetrics->ascent + - ftfont->instance->charcellMetrics->descent; -} - -static -int FT_Get_CharcellMetricsCharacterWidth(FontPtr pFont) -{ - FTFontPtr ftfont = (FTFontPtr)pFont->fontPrivate; - - if( ftfont->instance->spacing != FT_PROPORTIONAL ) - { - int width = ftfont->instance->charcellMetrics->characterWidth; - - /* If the font uses a matrix make sure we transform the |characterWidth| - * back to it's original value since we download the untransformed font - * and use a PostScript transformation matrix to transform the font when - * rendering the text - */ - if( ftfont->instance->transformation.nonIdentity ) - { - FT_Vector v; - - FT_Matrix m = ftfont->instance->transformation.matrix; - (void)FT_Matrix_Invert(&m); /* FixMe: We should check the return code */ - v.x = width; - v.y = FT_Get_CharcellMetricsCharacterHeight(pFont); - FT_Vector_Transform(&v, &m); - width = v.x; - } - - return width; - } - - return 0; -} - -void -PsOut_FreeType_Text(FontPtr pFont, PsOutPtr self, int x, int y, char *text, int textl) -{ - int i; - int xo = self->XOff, - yo = self->YOff; - char buf[256]; - int cwidth = FT_Get_CharcellMetricsCharacterWidth(pFont); - - if( self->InFrame || self->InTile ) xo = yo = 0; - x += xo; y += yo; - - S_OutNum(self, (float)x); - S_OutNum(self, (float)y); - S_OutTok(self, "moveto", 1); - - S_OutTok(self, "[ ", 0); - - for( i = 0 ; i < textl ; i++ ) - { -#ifdef USE_FT_PS_NAMES - char namebuf[256]; - unsigned int ch = text[i]&0xFF; - unsigned long block_offset = 0; - PsOut_Get_FreeType_Glyph_Name(namebuf, pFont, ch+block_offset); - - sprintf(buf, "/%s ", namebuf); -#else - sprintf(buf, "/ch%02x ", text[i]&0xFF); -#endif /* USE_FT_PS_NAMES */ - S_OutTok(self, buf, 0); - } - - /* Check whether we have any special spacing requirements (e.g. non-proportional fonts) ... */ - if( cwidth != 0 ) - { - /* If the we use a matrix to render the font (instead of using |self->FontSize|) - * we must apply the matrix to the "rmoveto" which is used to force the exact - * character width. The "trmoveto" macro will do that for us... - */ - if( self->FontSize == -1 ) - { - sprintf(buf, "]{gs glyphshow gr %d 0 trmoveto}fa", cwidth); - } - else - { - sprintf(buf, "]{gs glyphshow gr %d 0 rm}fa", cwidth); - } - } - else - { - sprintf(buf, "]{glyphshow}fa"); - } - S_OutTok(self, buf, 0); -} - -/* XXX: |PsOut_FreeType_Text16| should be rewritten - currently it uses lame, - * slow hacks and makes some risky assumtions about how |PsOut_Text16| - * allocates memory */ -void -PsOut_FreeType_Text16(FontPtr pFont, PsOutPtr self, int x, int y, unsigned short *text, int textl) -{ - int i; - int xo = self->XOff, - yo = self->YOff; - unsigned short c, - c_hiByte, - c_lowByte, - fontPage; - long lastFontPage = -1; - char baseFontName[256]; - char buf[256]; - - if( self->InFrame || self->InTile ) xo = yo = 0; - x += xo; y += yo; - - strcpy(baseFontName, self->FontName); - - S_OutNum(self, (float)x); - S_OutNum(self, (float)y); - S_OutTok(self, "moveto", 1); - - for( i = 0 ; i < textl ; i++ ) - { - c = text[i]; -#if IMAGE_BYTE_ORDER == LSBFirst - c_hiByte = c & 0x00FF; - c_lowByte = (c >> 8) & 0x00FF; -#elif IMAGE_BYTE_ORDER == MSBFirst - c_hiByte = (c >> 8) & 0x00FF; - c_lowByte = c & 0x00FF; -#else -#error Unsupported byte order -#endif - fontPage = c_hiByte; - - if( fontPage != lastFontPage ) - { - if( fontPage > 0 ) - { - sprintf(buf, "%s_%x", baseFontName, fontPage); - } - else - { - sprintf(buf, "%s", baseFontName); - xfree(self->FontName); - self->FontName = NULL; - } - - if( self->FontSize == -1 ) - { - PsOut_TextAttrsMtx(self, buf, self->FontMtx, FALSE); - } - else - { - PsOut_TextAttrs(self, buf, self->FontSize, FALSE); - } - lastFontPage = fontPage; - } - -#ifdef USE_FT_PS_NAMES - { - char namebuf[256]; - unsigned int ch = c_lowByte; - unsigned long block_offset = c_hiByte * 0x100 /* same as c_hiByte << 8 */; - int cwidth = FT_Get_CharcellMetricsCharacterWidth(pFont); - PsOut_Get_FreeType_Glyph_Name(namebuf, pFont, ch+block_offset); - - /* Check whether we have any special spacing requirements (e.g. non-proportional fonts) ... */ - if( cwidth != 0 ) - { - /* If the we use a matrix to render the font (instead of using |self->FontSize|) - * we must apply the matrix to the "rmoveto" which is used to force the exact - * character width. The "trmoveto" macro will do that for us... - */ - if( self->FontSize == -1 ) - { - sprintf(buf, "gs /%s glyphshow gr %d 0 trmoveto", namebuf, cwidth); - } - else - { - sprintf(buf, "gs /%s glyphshow gr %d 0 rm", namebuf, cwidth); - } - } - else - { - sprintf(buf, "/%s glyphshow", namebuf); - } - } -#else - sprintf(buf, "/ch%02x glyphshow", c_lowByte); -#endif /* USE_FT_PS_NAMES */ - S_OutTok(self, buf, 1); - } - - if( self->FontName ) xfree(self->FontName); - self->FontName = (char *)xalloc(strlen(baseFontName)+1); - strcpy(self->FontName, baseFontName); -} - diff --git a/hw/xprint/ps/psout_ftpstype1.c b/hw/xprint/ps/psout_ftpstype1.c deleted file mode 100644 index 572e13601..000000000 --- a/hw/xprint/ps/psout_ftpstype1.c +++ /dev/null @@ -1,185 +0,0 @@ - -/* -Copyright (c) 2003-2004 Roland Mainz - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include - -#include "os.h" -#define USE_PSOUT_PRIVATE 1 -#include "psout.h" - -#include -#include FT_FREETYPE_H - -#include -#include -#include -#include -#include -#include -#include -#define NOT_IN_FTFUNCS -#include - -int do_debug_ft2pt1 = FALSE; -int do_enable_ft2pt1_optimizer = FALSE; - -/* Defined in ttf2pt1.c */ -int ft2pt1_main(int argc, char **argv, - FTFontPtr tf, const char *download_psfontname, unsigned long download_font_block_offset); - -/* Download FreeType outlines as PS Type1 font */ -int PsOut_DownloadFreeType1(PsOutPtr self, const char *psfontname, FontPtr pFont, long block_offset) -{ - FTFontPtr tf; - FT_Face face; - int ft2pt1_numargs = 0; - char *ft2pt1_args[40]; - char *pstype1filename_prefix; - char pstype1filename[PATH_MAX+1]; - int ft2pt1_main_retval; - pid_t childpid; - - tf = (FTFontPtr)pFont->fontPrivate; - face = tf->instance->face->face; - - /* Set debugging flags */ - do_debug_ft2pt1 = (getenv("XPRT_PSDDX_DO_DEBUG_FT2PT1") != NULL); - do_enable_ft2pt1_optimizer = (getenv("XPRT_PSDDX_DO_ENABLE_FT2PT1_OPTIMIZER") != NULL); - - if( do_debug_ft2pt1 ) - { - fprintf(stderr, "# Converting FT2 font to PS Type1 filename='%s', ttface=%lx\n", tf->instance->face->filename, (long)face); - } - - pstype1filename_prefix = tempnam(NULL, "Xprt_"); - - ft2pt1_args[ft2pt1_numargs] = "ft2pt1"; ft2pt1_numargs++; - ft2pt1_args[ft2pt1_numargs] = "-Ob"; ft2pt1_numargs++; - ft2pt1_args[ft2pt1_numargs] = "-e"; ft2pt1_numargs++; - ft2pt1_args[ft2pt1_numargs] = "-a"; ft2pt1_numargs++; - ft2pt1_args[ft2pt1_numargs] = "-Ga"; ft2pt1_numargs++; - if( do_enable_ft2pt1_optimizer ) - { - /* Scale fonts to a 1000x1000 matrix */ - ft2pt1_args[ft2pt1_numargs] = "-Ot"; ft2pt1_numargs++; - } - else - { - /* Disable the ttf2pt1 optimisations */ - ft2pt1_args[ft2pt1_numargs] = "-Ou"; ft2pt1_numargs++; - ft2pt1_args[ft2pt1_numargs] = "-Oo"; ft2pt1_numargs++; - ft2pt1_args[ft2pt1_numargs] = "-Os"; ft2pt1_numargs++; - ft2pt1_args[ft2pt1_numargs] = "-Oh"; ft2pt1_numargs++; - } - - if( !do_debug_ft2pt1 ) - { - ft2pt1_args[ft2pt1_numargs] = "-W 0"; ft2pt1_numargs++; - } - ft2pt1_args[ft2pt1_numargs] = tf->instance->face->filename; ft2pt1_numargs++; - ft2pt1_args[ft2pt1_numargs] = pstype1filename_prefix; ft2pt1_numargs++; - ft2pt1_args[ft2pt1_numargs] = NULL; - -/* XXX: ttf2pt1 has lots of leaks and global vars which are not cleaned-up - * As long this problem exists we will simply fork() and call the converter - * from the child process (all resources are free'ed when the child process - * exists) as a workaround. - */ -#define FT2PT1_NEEDS_SEPERATE_PROCESS 1 - -#ifdef FT2PT1_NEEDS_SEPERATE_PROCESS - /* Flush internal buffer and then the stdio stream before fork()! */ - S_Flush(self); - fflush(self->Fp); - - childpid = fork(); - switch(childpid) - { - case -1: - FatalError("PS DDX internal error: Cannot fork() converter child process, %s\n", strerror(errno)); - break; - case 0: /* child */ - fclose(self->Fp); - self->Fp = NULL; - - ft2pt1_main_retval = ft2pt1_main(ft2pt1_numargs, ft2pt1_args, tf, psfontname, block_offset); - if( do_debug_ft2pt1 ) - { - fprintf(stderr, "## ft2pt1_main returned %d (child)\n", ft2pt1_main_retval); - } - exit(ft2pt1_main_retval); - break; - default: /* parent */ - waitpid(childpid, &ft2pt1_main_retval, 0); - break; - } - - if( do_debug_ft2pt1 ) - { - fprintf(stderr, "## ft2pt1_main returned %d (parent)\n", ft2pt1_main_retval); - } -#else - S_Flush(self); - - ft2pt1_main_retval = ft2pt1_main(ft2pt1_numargs, ft2pt1_args, tf, psfontname, block_offset); - if( do_debug_ft2pt1 ) - { - fprintf(stderr, "## ft2pt1_main returned %d (child)\n", ft2pt1_main_retval); - } -#endif /* FT2PT1_NEEDS_SEPERATE_PROCESS */ - - if( ft2pt1_main_retval != EXIT_SUCCESS ) - { - FatalError("PS DDX internal error while converting FreeType font '%s' to PS Type1, error=%d\n", - tf->instance->face->filename, ft2pt1_main_retval); - } - - sprintf(pstype1filename, "%s.pfa", pstype1filename_prefix); - if( do_debug_ft2pt1 ) - { - fprintf(stderr, "# Downloading converted FT2/PS Type1 filename='%s'\n", pstype1filename); - } - - PsOut_DownloadType1(self, "PsOut_DownloadFreeType1", psfontname, pstype1filename); - - if( !do_debug_ft2pt1 ) - { - unlink(pstype1filename); - } - - free(pstype1filename_prefix); - - S_Flush(self); - - return 0; -} - - diff --git a/hw/xprint/ps/psout_ftpstype3.c b/hw/xprint/ps/psout_ftpstype3.c deleted file mode 100644 index 733b5386b..000000000 --- a/hw/xprint/ps/psout_ftpstype3.c +++ /dev/null @@ -1,439 +0,0 @@ - -/* -Copyright (c) 2003-2004 Roland Mainz - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include "os.h" -#define USE_PSOUT_PRIVATE 1 -#include "psout.h" - -#include -#include FT_FREETYPE_H -#include FT_TRUETYPE_TABLES_H -#include FT_BBOX_H -#include FT_GLYPH_H - -#include FT_CONFIG_CONFIG_H -#include FT_CONFIG_OPTIONS_H -#include FT_ERRORS_H -#include FT_SYSTEM_H -#include FT_IMAGE_H -#include FT_TYPES_H -#include FT_OUTLINE_H -#include FT_MODULE_H -#include FT_RENDER_H -#include FT_TYPE1_TABLES_H -#include FT_TRUETYPE_IDS_H -#include FT_TRUETYPE_TAGS_H -#include FT_CACHE_H -#include FT_CACHE_IMAGE_H -#include FT_CACHE_SMALL_BITMAPS_H -#include FT_MULTIPLE_MASTERS_H -#include FT_SFNT_NAMES_H - -#include -#include -#include -#include -#include -#include -#include -#define NOT_IN_FTFUNCS -#include - -struct ft2info -{ - FontPtr pFont; - FTFontPtr tf; - FT_Face ttface; - struct - { - char *full_name; - char *copyright; - char *family; - char *subfamily; - char *version; - } nameid; - TT_Postscript *ttpostscript; - TT_Header *ttheader; -}; - -/* Local prototypes */ -static FT_Error PSType3_createOutlineGlyphs(FILE *out, struct ft2info *ti, unsigned long unicode, const char *psglyphname); -static int PSType3_generateOutlineFont(FILE *out, const char *psfontname, struct ft2info *ti, long block_offset); - -extern FT_Library ftypeLibrary; /* defined in xc/lib/font/FreeType/ftfuncs.c */ - -#define USE_FT_PS_NAMES 1 - -static -FT_Error PSType3_createOutlineGlyphs( FILE *out, struct ft2info *ti, unsigned long x11fontindex, const char *psglyphname ) -{ - unsigned long ftindex; - FT_BBox bbox; - FT_Error error; - FT_Outline outline; - - /* Remap X11 font index to FreeType font index */ - ftindex = FTRemap(ti->ttface, &ti->tf->mapping, x11fontindex); - - error = FT_Load_Glyph(ti->ttface, ftindex, (FT_LOAD_NO_BITMAP | FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING)); - if( error ) - { - fprintf(stderr, "PSType3_createOutlineGlyphs: FT_Load_Glyph() failure, error=%d\n", (int)error); - return error; - } - - outline = ti->ttface->glyph->outline; - - FT_Outline_Get_CBox(&outline, &bbox); - - fprintf(out, "/%s {\n", psglyphname); - fprintf(out, "%ld 0 %ld %ld %ld %ld setcachedevice\n", - (signed long)ti->ttface->glyph->metrics.horiAdvance, - (long)bbox.xMin, - (long)bbox.yMin, - (long)bbox.xMax, - (long)bbox.yMax); - - if( outline.n_contours > 0 ) - { - long i, - j, - k, k1, - cs, ce, - nguide, - contour_start, - contour_end, - last_point; - Bool first; - FT_Vector *vec; - - contour_start = ce = 0; - - vec = outline.points; - last_point = outline.n_points; - - i = j = k = 0; - first = TRUE; - - while( i <= outline.contours[outline.n_contours - 1] ) - { - contour_end = outline.contours[j]; - - if( first ) - { - fprintf(out, "%ld %ld moveto\n", vec[i].x, vec[i].y); - contour_start = i; - first = FALSE; - } - else if( outline.tags[i] & FT_CURVE_TAG_ON ) - { - fprintf(out, "%ld %ld lineto\n", vec[i].x, vec[i].y); - } - else - { - Bool finished = FALSE; - - cs = i-1; - nguide = 0; - while( !finished ) - { - if( i == contour_end+1 ) - { - ce = contour_start; - finished = TRUE; - } - else if( outline.tags[i] & FT_CURVE_TAG_ON ) - { - ce = i; - finished = TRUE; - } - else - { - i++; - nguide++; - } - } - - switch( nguide ) - { - case 0: - fprintf(out, "%ld %ld lineto\n", vec[ce].x, vec[ce].y); - break; - - case 1: - fprintf(out, "%ld %ld %ld %ld %ld %ld curveto\n", - (vec[cs].x+2*vec[cs+1].x)/3, - (vec[cs].y+2*vec[cs+1].y)/3, - (2*vec[cs+1].x+vec[ce].x)/3, - (2*vec[cs+1].y+vec[ce].y)/3, - vec[ce].x, vec[ce].y); - break; - - case 2: - fprintf(out, "%ld %ld %ld %ld %ld %ld curveto\n", - (-vec[cs].x+4*vec[cs+1].x)/3, - (-vec[cs].y+4*vec[cs+1].y)/3, - (4*vec[cs+2].x-vec[ce].x)/3, - (4*vec[cs+2].y-vec[ce].y)/3, - vec[ce].x, vec[ce].y); - break; - - case 3: - fprintf(out, "%ld %ld %ld %ld %ld %ld curveto\n", - (vec[cs].x+2*vec[cs+1].x)/3, - (vec[cs].y+2*vec[cs+1].y)/3, - (5*vec[cs+1].x+vec[cs+2].x)/6, - (5*vec[cs+1].y+vec[cs+2].y)/6, - (vec[cs+1].x+vec[cs+2].x)/2, - (vec[cs+1].y+vec[cs+2].y)/2); - - fprintf(out, "%ld %ld %ld %ld %ld %ld curveto\n", - (vec[cs+1].x+5*vec[cs+2].x)/6, - (vec[cs+1].y+5*vec[cs+2].y)/6, - (5*vec[cs+2].x+vec[cs+3].x)/6, - (5*vec[cs+2].y+vec[cs+3].y)/6, - (vec[cs+3].x+vec[cs+2].x)/2, - (vec[cs+3].y+vec[cs+2].y)/2); - - fprintf(out, "%ld %ld %ld %ld %ld %ld curveto\n", - (vec[cs+2].x+5*vec[cs+3].x)/6, - (vec[cs+2].y+5*vec[cs+3].y)/6, - (2*vec[cs+3].x+vec[ce].x)/3, - (2*vec[cs+3].y+vec[ce].y)/3, - vec[ce].x, vec[ce].y); - break; - - default: /* anything |nguide > 3| */ - k1 = cs + nguide; - - fprintf(out, "%ld %ld %ld %ld %ld %ld curveto\n", - (vec[cs].x+2*vec[cs+1].x)/3, - (vec[cs].y+2*vec[cs+1].y)/3, - (5*vec[cs+1].x+vec[cs+2].x)/6, - (5*vec[cs+1].y+vec[cs+2].y)/6, - (vec[cs+1].x+vec[cs+2].x)/2, - (vec[cs+1].y+vec[cs+2].y)/2); - - for( k = cs+2 ; k <= k1-1 ; k++ ) - { - fprintf(out, "%ld %ld %ld %ld %ld %ld curveto\n", - (vec[k-1].x+5*vec[k].x)/6, - (vec[k-1].y+5*vec[k].y)/6, - (5*vec[k].x+vec[k+1].x)/6, - (5*vec[k].y+vec[k+1].y)/6, - (vec[k].x+vec[k+1].x)/2, - (vec[k].y+vec[k+1].y)/2); - } - - fprintf(out, "%ld %ld %ld %ld %ld %ld curveto\n", - (vec[k1-1].x+5*vec[k1].x)/6, - (vec[k1-1].y+5*vec[k1].y)/6, - (2*vec[k1].x+vec[ce].x)/3, - (2*vec[k1].y+vec[ce].y)/3, - vec[ce].x, vec[ce].y); - break; - } - } - - if( i >= contour_end ) - { - fprintf(out, "closepath\n"); - first = TRUE; - i = contour_end + 1; - j++; - } - else - { - i++; - } - } - } - - fprintf(out, "fill } bind def\n"); - - return 0; -} - -static -int PSType3_generateOutlineFont(FILE *out, const char *psfontname, struct ft2info *ti, long block_offset) -{ - long i; - double scaler; - const int numchars = 256; -#ifdef USE_FT_PS_NAMES - int linewidth = 0; -#endif /* USE_FT_PS_NAMES */ - - fprintf(out, "%%%%BeginFont: %s\n", psfontname); - fprintf(out, "22 dict begin\n"); - fprintf(out, "/FontType 3 def\n"); - fprintf(out, "/StrokeWidth 0 def\n"); - fprintf(out, "/PaintType 0 def\n"); - fprintf(out, "/FontName (%s) def\n", psfontname); - fprintf(out, "/FontInfo 9 dict dup begin\n"); - fprintf(out, " /FullName (%s) def\n", ti->nameid.full_name?ti->nameid.full_name:psfontname); - fprintf(out, " /Notice (%s) def\n", ti->nameid.copyright?ti->nameid.copyright:"nothing here"); - fprintf(out, " /FamilyName (%s) def\n", ti->nameid.family?ti->nameid.family:psfontname); - fprintf(out, " /Weight (%s) def\n", ti->nameid.subfamily?ti->nameid.subfamily:"Regular"); - fprintf(out, " /version (%s) def\n", ti->nameid.version?ti->nameid.version:"0.1"); - - if( ti->ttpostscript ) - { - fprintf(out, " /italicAngle %.9g def\n", (double)ti->ttpostscript->italicAngle); - fprintf(out, " /underlineThickness %d def\n", (int)ti->ttpostscript->underlineThickness); - fprintf(out, " /underlinePosition %d def\n", (int)ti->ttpostscript->underlinePosition); - fprintf(out, " /isFixedPitch %s def\n", ((ti->ttpostscript->isFixedPitch)?("true"):("false"))); - } - else - { - fprintf(out, " /italicAngle %.9g def\n", 0.0); - fprintf(out, " /underlineThickness %d def\n", 100); - fprintf(out, " /underlinePosition %d def\n", 0); - fprintf(out, " /isFixedPitch false def\n"); - } - - fprintf(out, "end def\n"); - - scaler = (1000.0 / (double)ti->ttface->units_per_EM) / 1000.0; - fprintf(out, "/FontMatrix [%.9g 0 0 %.9g 0 0] def\n", scaler, scaler); - - if( ti->ttheader ) - { - fprintf(out, "/FontBBox [%d %d %d %d] def\n", - (int)ti->ttheader->xMin, - (int)ti->ttheader->yMin, - (int)ti->ttheader->xMax, - (int)ti->ttheader->yMax); - } - else - { - fprintf(out, "/FontBBox [%ld %ld %ld %ld] def\n", - ti->ttface->bbox.xMin, - ti->ttface->bbox.yMin, - ti->ttface->bbox.xMax, - ti->ttface->bbox.yMax); - - } - - fprintf(out, "/Encoding [\n"); - for( i = 0 ; i < 256 ; i++ ) - { -#ifdef USE_FT_PS_NAMES - char namebuf[256]; - PsOut_Get_FreeType_Glyph_Name(namebuf, ti->pFont, i+block_offset); - linewidth += strlen(namebuf) + 2; - fprintf(out, "/%s%s", namebuf, (linewidth > 70)?(linewidth = 0, "\n"):(" ")); -#else - fprintf(out, "/ch%02x%s", i, (((i % 10) == 9)?("\n"):(" "))); -#endif /* USE_FT_PS_NAMES */ - } - fprintf(out, "] def\n"); - - fprintf(out, "/CharProcs %d dict def CharProcs begin\n", (int)(numchars + 1)); - fprintf(out, "/.notdef {\n" - "1000 0 0 0 0 0 setcachedevice\n" - "fill } bind def\n"); - for( i = 0 ; i < numchars ; i++ ) - { - char buf[32]; -#ifdef USE_FT_PS_NAMES - char namebuf[256]; - PsOut_Get_FreeType_Glyph_Name(namebuf, ti->pFont, i+block_offset); - sprintf(buf, "%s ", namebuf); -#else - sprintf(buf, "ch%02lx ", i); -#endif /* USE_FT_PS_NAMES */ - PSType3_createOutlineGlyphs(out, ti, i+block_offset, buf); - } - fprintf(out, "end\n" - "/BuildGlyph {\n" - " exch /CharProcs get exch\n" - " 2 copy known not {pop /.notdef} if get exec } bind def\n" - "/BuildChar { 1 index /Encoding get exch get\n" - " 1 index /Encoding get exec } bind def\n"); - fprintf(out, "currentdict end /%s exch definefont pop\n", psfontname); - fprintf(out, "%%EndFont\n"); - - return 0; -} - -static -char *FT_Get_TT_NAME_ID(FT_Face ttface, int index) -{ - FT_SfntName name; - char *s; - - if( index >= FT_Get_Sfnt_Name_Count(ttface) ) - return NULL; - - FT_Get_Sfnt_Name(ttface, index, &name); - s = (char *)malloc(name.string_len+2); - if( !s ) - return NULL; - memcpy(s, (char *)name.string, name.string_len); - s[name.string_len] = '\0'; - return s; -} - -int PsOut_DownloadFreeType3(PsOutPtr self, const char *psfontname, FontPtr pFont, long block_offset) -{ - struct ft2info cft2info = { 0 }; - struct ft2info *ti = &cft2info; - - S_Flush(self); - - ti->tf = (FTFontPtr)pFont->fontPrivate; - ti->ttface = ti->tf->instance->face->face; - ti->pFont = pFont; -#ifdef DEBUG_gisburn - fprintf(stderr, "# Downloading FT2 font filename='%s', ttface=%lx\n", ti->tf->instance->face->filename, (long)ti->ttface); -#endif /* DEBUG_gisburn */ - - ti->nameid.full_name = FT_Get_TT_NAME_ID(ti->ttface, TT_NAME_ID_FULL_NAME); - ti->nameid.copyright = FT_Get_TT_NAME_ID(ti->ttface, TT_NAME_ID_COPYRIGHT); - ti->nameid.family = FT_Get_TT_NAME_ID(ti->ttface, TT_NAME_ID_FONT_FAMILY); - ti->nameid.subfamily = FT_Get_TT_NAME_ID(ti->ttface, TT_NAME_ID_FONT_SUBFAMILY); - ti->nameid.version = FT_Get_TT_NAME_ID(ti->ttface, TT_NAME_ID_VERSION_STRING); - - ti->ttheader = (TT_Header *)FT_Get_Sfnt_Table(ti->ttface, ft_sfnt_head); - ti->ttpostscript = (TT_Postscript *)FT_Get_Sfnt_Table(ti->ttface, ft_sfnt_post); - - PSType3_generateOutlineFont(self->Fp, psfontname, ti, block_offset); - - free(ti->nameid.full_name); - free(ti->nameid.copyright); - free(ti->nameid.family); - free(ti->nameid.subfamily); - free(ti->nameid.version); - - S_Flush(self); - - return 0; -} - diff --git a/hw/xprint/ps/ttf2pt1wrap.c b/hw/xprint/ps/ttf2pt1wrap.c deleted file mode 100644 index 57bb777d2..000000000 --- a/hw/xprint/ps/ttf2pt1wrap.c +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Wrapper to add missing symbol to externally supplied code - */ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#ifdef Lynx -extern int optind; -extern char *optarg; -#endif - -#include "ttf2pt1.c" diff --git a/hw/xprint/raster/Makefile.am b/hw/xprint/raster/Makefile.am deleted file mode 100644 index 1ee1122f2..000000000 --- a/hw/xprint/raster/Makefile.am +++ /dev/null @@ -1,10 +0,0 @@ -noinst_LTLIBRARIES = libraster.la - -INCLUDES = -I$(top_srcdir)/hw/xprint - -AM_CFLAGS = @DIX_CFLAGS@ @XPRINT_CFLAGS@ -D_XP_PRINT_SERVER_ - -libraster_la_SOURCES = \ - RasterAttVal.c \ - Raster.c \ - Raster.h diff --git a/hw/xprint/raster/Raster.c b/hw/xprint/raster/Raster.c deleted file mode 100644 index dccef613c..000000000 --- a/hw/xprint/raster/Raster.c +++ /dev/null @@ -1,1563 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - - -/******************************************************************* -** -** ********************************************************* -** * -** * File: printer/Raster.c -** * -** * Contents: -** * Raster driver for the print server. -** * -** * Copyright: Copyright 1993, 1995 Hewlett-Packard Company -** * -** ********************************************************* -** -********************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include /* for SIGCLD on pre-POSIX systems */ -#define NEED_EVENTS -#include -#undef NEED_EVENTS -#include -#include "misc.h" -#include "dixstruct.h" -#include "scrnintstr.h" -#include "screenint.h" -#include "colormapst.h" -#include "windowstr.h" -#include "propertyst.h" -#include "servermd.h" /* needed for IMAGE_BUFSIZE */ -#include "fb.h" -#include "mi.h" - -#include -#include "Raster.h" - -#include "attributes.h" -#include "AttrValid.h" -#include "DiPrint.h" - -static void AllocateRasterPrivates( - ScreenPtr pScreen); -static Bool RasterChangeWindowAttributes( - WindowPtr pWin, - unsigned long mask); -static int StartJob( - XpContextPtr pCon, - Bool sendClientData, - ClientPtr client); -static int StartPage( - XpContextPtr pCon, - WindowPtr pWin); -static int StartDoc( - XpContextPtr pCon, - XPDocumentType type); -static int EndDoc( - XpContextPtr pCon, - Bool cancel); -static int EndJob( - XpContextPtr pCon, - Bool cancel); -static int EndPage( - XpContextPtr pCon, - WindowPtr pWin); -static int DocumentData( - XpContextPtr pCon, - DrawablePtr pDraw, - char *pData, - int len_data, - char *pDoc_fmt, - int len_fmt, - char *pOptions, - int len_options, - ClientPtr client); -static int GetDocumentData( - XpContextPtr pContext, - ClientPtr client, - int maxBufferSize); -static void FreePageFiles( - RasterContextPrivPtr pWinPriv); -static int SystemCmd( - char *pCommand); -static Bool RasterCloseScreen( - int index, - ScreenPtr pScreen); -static int RasterInitContext(XpContextPtr pCon); -static Bool RasterDestroyContext(XpContextPtr pCon); -static char *RasterGetAttributes( - XpContextPtr pContext, - XPAttributes class); -static char *RasterGetOneAttribute(XpContextPtr pCon, - XPAttributes class, - char *attribute); -static int RasterSetAttributes(XpContextPtr pCon, - XPAttributes class, - char *attributes); -static int RasterAugmentAttributes(XpContextPtr pCon, - XPAttributes class, - char *attributes); -static int RasterMediumDimensions(XpContextPtr pCon, - CARD16 *width, - CARD16 *height); -static int RasterReproducibleArea(XpContextPtr pCon, - xRectangle *pRect); - -#define MAX(a,b) (((a) > (b)) ? (a) : (b)) -#define DOC_PCL 1 -#define DOC_RASTER 2 - -static DevPrivateKey RasterScreenPrivateKey = &RasterScreenPrivateKey; -static DevPrivateKey RasterContextPrivateKey = &RasterContextPrivateKey; -static char RASTER_DRIV_NAME[] = "XP-RASTER"; -static int doc_type = DOC_RASTER; - -#define ABSOLUTE_PCLCOMP_PATH1 "/usr/openwin/bin/pclcomp" -#define ABSOLUTE_PCLCOMP_PATH2 "/usr/X11/bin/pclcomp" - -static char *pcl3_output_cmds[] = { - "xpr -device ljet -rv -landscape < %(InFile)% | pclcomp -0 > %(OutFile)%", - "xpr -device ljet -rv -landscape < %(InFile)% | pclcomp -01 > %(OutFile)%", - "xpr -device ljet -rv -landscape < %(InFile)% | pclcomp -02 > %(OutFile)%", - "xpr -device ljet -rv -landscape < %(InFile)% | pclcomp -03 > %(OutFile)%", - "xpr -device ljet -rv -landscape < %(InFile)% | pclcomp -012 > %(OutFile)%", - "xpr -device ljet -rv -landscape < %(InFile)% | pclcomp -013 > %(OutFile)%", - "xpr -device ljet -rv -landscape < %(InFile)% | pclcomp -023 > %(OutFile)%", - "xpr -device ljet -rv -landscape < %(InFile)% | pclcomp -0123 > %(OutFile)%", - "xpr -device ljet -rv -landscape < %(InFile)% > %(OutFile)%", - "xpr -device ljet -rv < %(InFile)% | pclcomp -0 > %(OutFile)%", - "xpr -device ljet -rv < %(InFile)% | pclcomp -01 > %(OutFile)%", - "xpr -device ljet -rv < %(InFile)% | pclcomp -02 > %(OutFile)%", - "xpr -device ljet -rv < %(InFile)% | pclcomp -03 > %(OutFile)%", - "xpr -device ljet -rv < %(InFile)% | pclcomp -012 > %(OutFile)%", - "xpr -device ljet -rv < %(InFile)% | pclcomp -013 > %(OutFile)%", - "xpr -device ljet -rv < %(InFile)% | pclcomp -023 > %(OutFile)%", - "xpr -device ljet -rv < %(InFile)% | pclcomp -0123 > %(OutFile)%", - "xpr -device ljet -rv < %(InFile)% > %(OutFile)%"}; - -Bool -InitializeRasterDriver( - int ndx, - ScreenPtr pScreen, - int argc, - char **argv) -{ - int xRes, yRes; - int maxRes, maxDim, numBytes; - RasterScreenPrivPtr pPriv; - - /* - * Register this driver's InitContext function with the print extension. - * This is a bit - * sleazy, as the extension hasn't yet been initialized, but the - * extension needs to know this, and this seems the best time to - * provide the information. - */ - XpRegisterInitFunc( pScreen, RASTER_DRIV_NAME, RasterInitContext ); - - /* - * Create and load the devPrivate for the printer layer. - */ - AllocateRasterPrivates(pScreen); - - pPriv = (RasterScreenPrivPtr) - dixLookupPrivate(&pScreen->devPrivates, RasterScreenPrivateKey); - - maxDim = MAX( pScreen->height, pScreen->width ); - numBytes = maxDim + BITMAP_SCANLINE_PAD - 1; /* pixels per row */ - numBytes *= maxDim; - numBytes /= 8; /* bytes per row */ - xRes = pScreen->width / (pScreen->mmWidth / 25.4); - yRes = pScreen->height / (pScreen->mmHeight / 25.4); - maxRes = MAX( xRes, yRes ); - - pPriv->pBits = (char *)xalloc(numBytes); - - /* - * Have to allocate maxDim X maxDim to allow for landscape mode. - */ - fbScreenInit(pScreen, pPriv->pBits, maxDim, maxDim, maxRes, - maxRes, maxDim, 1); - miInitializeBackingStore(pScreen); - pScreen->blackPixel = 1; - pScreen->whitePixel = 0; - if(fbCreateDefColormap(pScreen) == FALSE) - ; /* XXX what do I do if it fails? */ - - pScreen->SaveScreen = (SaveScreenProcPtr)_XpBoolNoop; - pPriv->ChangeWindowAttributes = pScreen->ChangeWindowAttributes; - pScreen->ChangeWindowAttributes = RasterChangeWindowAttributes; - pPriv->CloseScreen = pScreen->CloseScreen; - pScreen->CloseScreen = RasterCloseScreen; - - return TRUE; -} - -/* - * GetPropString searches the context's config database for a property - * by the name of propName. If found, it returns the property's - * value, otherwise it returns NULL unless the requested attribute - * is RASTER_PRINT_PAGE_COMMAND, in which case it returns a hard-coded - * default string to invoke xpr to produce a PostScript(tm) formatted - * raster. - */ - -static char * -GetPropString( - XpContextPtr pCon, - char *propName) -{ - RasterContextPrivPtr pConPriv = (RasterContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, RasterContextPrivateKey); - char *type; - XrmValue val; - struct stat status; - int pclcomp_exists = 0; - - if( XrmGetResource(pConPriv->config, propName, propName, &type, &val) == - True ) - return (char *)val.addr; - - if( !strcmp( propName, RASTER_PRINT_PAGE_COMMAND ) ) - if( doc_type == DOC_RASTER ) - return "xpr -device ps %(InFile)% > %(OutFile)%"; - else - { - XpOid orientation; - XpOid compression; - int pcl3_output_index = 0; - - orientation = XpGetContentOrientation(pCon); - compression = XpGetAvailableCompression(pCon); - - switch(orientation) { - case xpoid_val_content_orientation_landscape: - pcl3_output_index = 0; - break; - default: - pcl3_output_index += 9; - break; - } - - if(stat(ABSOLUTE_PCLCOMP_PATH1, &status) != -1) - pclcomp_exists = 1; - else if(stat(ABSOLUTE_PCLCOMP_PATH2, &status) != -1) - pclcomp_exists = 1; - - if(pclcomp_exists) - switch(compression) { - case xpoid_val_available_compressions_0: - pcl3_output_index += 0; - break; - case xpoid_val_available_compressions_01: - pcl3_output_index += 1; - break; - case xpoid_val_available_compressions_02: - pcl3_output_index += 2; - break; - case xpoid_val_available_compressions_03: - pcl3_output_index += 3; - break; - case xpoid_val_available_compressions_012: - pcl3_output_index += 4; - break; - case xpoid_val_available_compressions_013: - pcl3_output_index += 5; - break; - case xpoid_val_available_compressions_023: - pcl3_output_index += 6; - break; - default: - pcl3_output_index += 7; - break; - } - else - pcl3_output_index += 8; - - return pcl3_output_cmds[pcl3_output_index]; - } - else - return NULL; -} - -static void -SetDocumentType( - XpContextPtr pCon) -{ - XpOidList* attrs_supported; - - /* - * only validate attributes found in document-attributes-supported - */ - attrs_supported = - XpGetListAttr(pCon, XPPrinterAttr, - xpoid_att_document_attributes_supported, - (const XpOidList*)NULL); - - if(XpOidListHasOid(attrs_supported, xpoid_att_document_format)) - { - const char* value_in; - XpOidDocFmt *f; - - value_in = XpGetStringAttr(pCon, XPDocAttr, xpoid_att_document_format); - - f = XpOidDocFmtNew( value_in ); - - if( f != NULL ) - { - if( !strcmp( f->format, "PCL" ) ) - doc_type = DOC_PCL; - else - doc_type = DOC_RASTER; - - XpOidDocFmtDelete( f ); - } - } - - /* - * clean up - */ - XpOidListDelete(attrs_supported); -} - -static int -StartJob( - XpContextPtr pCon, - Bool sendClientData, - ClientPtr client) -{ - RasterContextPrivPtr pConPriv = (RasterContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, RasterContextPrivateKey); - - SetDocumentType( pCon ); - - /* - * Check for existing page file, and delete it if it exists. - */ - if(pConPriv->pageFileName != (char *)NULL) - { - if(pConPriv->pPageFile != (FILE *)NULL) - { - fclose(pConPriv->pPageFile); - pConPriv->pPageFile = (FILE *)NULL; - } - unlink(pConPriv->pageFileName); - Xfree(pConPriv->pageFileName); - pConPriv->pageFileName = (char *)NULL; - } - - /* - * Create a temporary file to store the printer output. - */ - if(!sendClientData) - { - /* - * Create a temporary file to store the printer output. - */ - if (!XpOpenTmpFile("w", &pConPriv->jobFileName, &pConPriv->pJobFile)) - return BadAlloc; - } - - return Success; -} - -/* - * StartDoc and EndDoc are just no-ops in this implementation, since - * our view of the spooler really doesn't recognize documents. - */ - -static int -StartDoc( - XpContextPtr pCon, - XPDocumentType type) -{ - return Success; -} - -static int EndDoc( - XpContextPtr pCon, - Bool cancel) -{ - return Success; -} - -#if 0 - -/* XXX Not used. */ - -/* - * BuidArgVector takes a pointer to a comma-separated list of command - * options and splits it out into an array of argument pointers. The - * caller must not free the optionList after calling this function until - * the returned arg vector is no longer needed, at which time the arg - * vector should also be freed. - */ - -#define SEPARATOR_CHAR (char)',' - -static char ** -BuildArgVector( - char *optionList, - char **argVector, - int argCount) -{ - char *curArg, *lastChar, *endArg; - - curArg = optionList; - lastChar = optionList + strlen(optionList); /* includes final NULL */ - - while(curArg != (char *)NULL && curArg < lastChar) - { - /* strip leading white space */ - while(curArg < lastChar && isascii((int)*curArg) && - isspace((int)*curArg)) - curArg++; - - if(curArg < lastChar) - { - argVector = (char **)Xrealloc(argVector, - sizeof(char *) * (argCount + 2)); - argVector[argCount] = curArg; - argVector[++argCount] = (char *)NULL; - - endArg = strchr(curArg, SEPARATOR_CHAR); - - /* Should I strip trailing white space ??? */ - - if(endArg != (char *)NULL) - { - *endArg = (char)'\0'; - curArg = endArg + 1; - } - else - curArg = (char *)NULL; - } - } - - return argVector; -} -#endif - -static int -EndJob( - XpContextPtr pCon, - Bool cancel) -{ - RasterContextPrivPtr pConPriv = (RasterContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, RasterContextPrivateKey); - - if( cancel == True ) - { - if(pConPriv->getDocClient != (ClientPtr)NULL) { - XpFinishDocData(pConPriv->getDocClient); - - pConPriv->getDocClient = (ClientPtr)NULL; - pConPriv->getDocBufSize = 0; - } - - if(pConPriv->jobFileName != (char *)NULL) - { - unlink(pConPriv->jobFileName); - Xfree(pConPriv->jobFileName); - pConPriv->jobFileName = (char *)NULL; - } - - return Success; - } - - if(pConPriv->getDocClient != (ClientPtr)NULL&&pConPriv->getDocBufSize > 0) - { - XpFinishDocData(pConPriv->getDocClient); - - pConPriv->getDocClient = (ClientPtr)NULL; - pConPriv->getDocBufSize = 0; - - return Success; - } - - if(pConPriv->pJobFile != (FILE *)NULL) - { - fclose(pConPriv->pJobFile); - pConPriv->pJobFile = (FILE *)NULL; - - if(pConPriv->jobFileName != (char *)NULL) - { - XpSubmitJob( pConPriv->jobFileName, pCon ); - unlink(pConPriv->jobFileName); - Xfree(pConPriv->jobFileName); - pConPriv->jobFileName = (char *)NULL; - } - } - - return Success; -} - -/* StartPage - * - * If page file exists - * close page file - * set page file pointer = NULL - * unlink page file - */ -static int -StartPage( - XpContextPtr pCon, - WindowPtr pWin) -{ - RasterContextPrivPtr pConPriv = (RasterContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, RasterContextPrivateKey); - - if(pConPriv->pPageFile != (FILE *)NULL) - { - fclose(pConPriv->pPageFile); - pConPriv->pPageFile = (FILE *)NULL; - } - if(pConPriv->pageFileName != (char *)NULL) - { - unlink(pConPriv->pageFileName); - pConPriv->pageFileName = (char *)NULL; - } - - return Success; -} - -#include "X11/XWDFile.h" - - -#define lowbit(x) ((x) & (~(x) + 1)) - -/* - * Get the XWDColors of all pixels in colormap - returns # of colors - */ -static XWDColor * -Get_XWDColors( - ColormapPtr pCmap) -{ - int i, ncolors; - xrgb *prgbList; - Pixel *pPixels; - XWDColor *colors; - - ncolors = pCmap->pVisual->ColormapEntries; - if (!(colors = (XWDColor *) malloc (sizeof(XWDColor) * ncolors))) - return (XWDColor *) NULL; - if (!(prgbList = (xrgb*) malloc(sizeof(xrgb) * ncolors))) - { - Xfree(colors); - return (XWDColor *) NULL; - } - if (!(pPixels = (Pixel*) malloc(sizeof(Pixel) * ncolors))) - { - Xfree(colors); - Xfree(prgbList); - return (XWDColor *) NULL; - } - - if (pCmap->pVisual->class == DirectColor || - pCmap->pVisual->class == TrueColor) { - Pixel red, green, blue, red1, green1, blue1; - - red = green = blue = 0; - red1 = lowbit(pCmap->pVisual->redMask); - green1 = lowbit(pCmap->pVisual->greenMask); - blue1 = lowbit(pCmap->pVisual->blueMask); - for (i=0; i pCmap->pVisual->redMask) - red = 0; - green += green1; - if (green > pCmap->pVisual->greenMask) - green = 0; - blue += blue1; - if (blue > pCmap->pVisual->blueMask) - blue = 0; - } - } else { - for (i=0; idrawable; - XWDFileHeader header; - int win_name_size; - int header_size; - int ncolors, i; - char *win_name; - VisualPtr pVisual; - ColormapPtr pCmap; - XWDColor *pColors; - unsigned long swaptest = 1; - - widthBytesLine = PixmapBytePad(pWin->drawable.width, pWin->drawable.depth); - length = widthBytesLine * pWin->drawable.height; - height = pWin->drawable.height; - - if(length <= 0) - return Success; - - if (widthBytesLine >= IMAGE_BUFSIZE) - linesPerBuf = 1; - else - { - linesPerBuf = IMAGE_BUFSIZE / widthBytesLine; - if (linesPerBuf > height) - linesPerBuf = height; - } - length = linesPerBuf * widthBytesLine; - if (linesPerBuf < height) - { - /* we have to make sure intermediate buffers don't need padding */ - while ((linesPerBuf > 1) && (length & 3)) - { - linesPerBuf--; - length -= widthBytesLine; - } - while (length & 3) - { - linesPerBuf++; - length += widthBytesLine; - } - } - if(!(pBuf = (char *) Xalloc(length))) - return (BadAlloc); - - /* - * Start of Xwd header code. - */ - - /* - * XXX - Should we use the real window name??? - */ - win_name = "xwdump"; - /* sizeof(char) is included for the null string terminator. */ - win_name_size = strlen(win_name) + sizeof(char); - - pCmap = (ColormapPtr)LookupIDByType(wColormap (pWin), RT_COLORMAP); - pVisual = pCmap->pVisual; - if((pColors = Get_XWDColors(pCmap)) == (XWDColor *)NULL) - { - Xfree(pBuf); - return (BadAlloc); - } - - /* - * Write out header information. - */ - header_size = sizeof(header) + win_name_size; - header.header_size = (CARD32) header_size; - header.file_version = (CARD32) XWD_FILE_VERSION; - header.pixmap_format = (CARD32) ZPixmap; /* Must match GetImage below */ - header.pixmap_depth = (CARD32) pDraw->depth; - header.pixmap_width = (CARD32) pDraw->width; - header.pixmap_height = (CARD32) pDraw->height; - header.xoffset = (CARD32) 0; - header.byte_order = (CARD32) screenInfo.imageByteOrder; - header.bitmap_unit = (CARD32) screenInfo.bitmapScanlineUnit; - header.bitmap_bit_order = (CARD32) screenInfo.bitmapBitOrder; - header.bitmap_pad = (CARD32) screenInfo.bitmapScanlinePad; - header.bits_per_pixel = (CARD32) pDraw->bitsPerPixel; - header.bytes_per_line = (CARD32) widthBytesLine; - header.visual_class = (CARD32) pVisual->class; - header.red_mask = (CARD32) pVisual->redMask; - header.green_mask = (CARD32) pVisual->greenMask; - header.blue_mask = (CARD32) pVisual->blueMask; - header.bits_per_rgb = (CARD32) pVisual->bitsPerRGBValue; - header.colormap_entries = (CARD32) pVisual->ColormapEntries; - header.ncolors = ncolors = (CARD32) pVisual->ColormapEntries; - header.window_width = (CARD32) pDraw->width; - header.window_height = (CARD32) pDraw->height; - header.window_x = 0; - header.window_y = 0; - header.window_bdrwidth = (CARD32) 0; - - if (*(char *) &swaptest) { - _swaplong((char *) &header, sizeof(header)); - for (i = 0; i < ncolors; i++) { - _swaplong((char *) &pColors[i].pixel, sizeof(long)); - _swapshort((char *) &pColors[i].red, 3 * sizeof(short)); - } - } - - (void) fwrite((char *)&header, sizeof(header), 1, pRasterFile); - (void) fwrite(win_name, win_name_size, 1, pRasterFile); - (void) fwrite((char *) pColors, sizeof(XWDColor), ncolors, pRasterFile); - - Xfree(pColors); - - /* - * End of Xwd header code. - */ - - linesDone = 0; - while(height - linesDone > 0) - { - nlines = min(linesPerBuf, height - linesDone); - (*pDraw->pScreen->GetImage) (pDraw, - 0, - linesDone, - pWin->drawable.width, - nlines, - ZPixmap, - ~0, - pBuf); - - if(fwrite(pBuf, sizeof(char), (size_t)(nlines * widthBytesLine), - pRasterFile) != - (size_t)(nlines * widthBytesLine)) - { - Xfree(pBuf); - return BadAlloc; - } - linesDone += nlines; - } - Xfree(pBuf); - return Success; -} - - -static int -SendPage( XpContextPtr pCon ) -{ - struct stat statBuf; - RasterContextPrivPtr pConPriv = (RasterContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, RasterContextPrivateKey); - - if(stat(pConPriv->pageFileName, &statBuf) < 0) - return BadAlloc; - - return XpSendDocumentData(pConPriv->getDocClient, - pConPriv->pPageFile, (int)statBuf.st_size, - pConPriv->getDocBufSize); -} - -/* - * EndPage: - * - * If page file doesn't exist: - * { - * Create page file - * Open page file - * Write page header to page file - * if(preRasterFile exists) - * copy preRasterFile contents to page file - * if(noRasterFile exists) - * write noRasterFile contents to page file - * else - * Create raster image file - * Open raster image file - * GetImage data - * Write Image data to raster image file - * invoke page_command on raster image file - * Write raster image file contents to page file - * Unlink tempPage file - * if(postRasterFile exists) - * write postRasterFile contents to page file - * Write page trailer to page file - * } - * Write page file to job file - */ -static int -EndPage( - XpContextPtr pCon, - WindowPtr pWin) -{ - RasterContextPrivPtr pConPriv = (RasterContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, RasterContextPrivateKey); - struct stat statBuf; - char *rasterFileName = (char *)NULL, *pCommand = (char *)NULL; - FILE *pRasterFile = (FILE *)NULL; - - if(pConPriv->pageFileName == (char *)NULL) - { - /* - * Open the page file. - */ - if (!XpOpenTmpFile("w+", &pConPriv->pageFileName, - &pConPriv->pPageFile)) - goto BAD_PAGE_ALLOC; - - /* - * Copy any pre-raster document data to the page file. - */ - if(pConPriv->pPreRasterFile != (FILE *)NULL) - { - if(CopyContentsAndDelete(&pConPriv->pPreRasterFile, - &pConPriv->preRasterFileName, - pConPriv->pPageFile) == FALSE) - goto BAD_PAGE_ALLOC; - } - - /* - * Copy either the no-raster document data, or the raster - * data itself to the page file. - * If the no-raster file exists, then we don't process the - * actual window raster bits. - */ - if(pConPriv->pNoRasterFile != (FILE *)NULL) - { - if(CopyContentsAndDelete(&pConPriv->pNoRasterFile, - &pConPriv->noRasterFileName, - pConPriv->pPageFile) == FALSE) - goto BAD_PAGE_ALLOC; - } - else - { - /* - * Open the raster image file. - */ - if (!XpOpenTmpFile("w", &rasterFileName, &pRasterFile)) - goto BAD_PAGE_ALLOC; - - /* - * Write the page image data to the raster image file. - */ - if(WriteWindowRaster(pWin, pRasterFile) != Success) - goto BAD_PAGE_ALLOC; - - /* - * Invoke the page_command on the raster image file. - */ - if((pCommand = GetPropString(pCon, RASTER_PRINT_PAGE_COMMAND)) != - (char *)NULL) - { - char *outFileName; - FILE *pOutFile; - - if (!XpOpenTmpFile("w", &outFileName, &pOutFile)) - goto BAD_PAGE_ALLOC; - fclose(pOutFile); - - pCommand = ReplaceFileString(strdup(pCommand), rasterFileName, - outFileName); - fclose(pRasterFile); - SystemCmd(pCommand); - free(pCommand); - /* - * Delete the unprocessed raster file. - */ - unlink(rasterFileName); - Xfree(rasterFileName); - rasterFileName = outFileName; - if((pRasterFile = fopen(rasterFileName, "r")) == (FILE *)NULL) - goto BAD_PAGE_ALLOC; - } - else - { - fclose(pRasterFile); - if((pRasterFile = fopen(rasterFileName, "r")) == (FILE *)NULL) - goto BAD_PAGE_ALLOC; - } - - /* - * Copy the raster image file contents to the page file. - * Note that pRasterFile must be set to the start of the - * raster file. - */ - if(CopyContentsAndDelete(&pRasterFile, - &rasterFileName, - pConPriv->pPageFile) == FALSE) - goto BAD_PAGE_ALLOC; - } - - /* - * Copy any post-raster document data to the page file. - */ - if(pConPriv->pPostRasterFile != (FILE *)NULL) - { - if(CopyContentsAndDelete(&pConPriv->pPostRasterFile, - &pConPriv->postRasterFileName, - pConPriv->pPageFile) == FALSE) - goto BAD_PAGE_ALLOC; - } - - } - - /* - * Write the page file contents to the job file or to the client - * performing GetDocumentData. - * pConPriv->pPageFile must first be set to the start of the page file. - */ - rewind(pConPriv->pPageFile); - if(stat(pConPriv->pageFileName, &statBuf) < 0) - goto BAD_PAGE_ALLOC; - - /* - * Send the page data to whatever client has called GetDocumentData. - */ - if(pConPriv->getDocClient != (ClientPtr)NULL&&pConPriv->getDocBufSize > 0) - { - int retval; - /* - * We should do something like the following: suspend the - * caller until we can gracefully write all the data in small - * chunks to the receiver, but for now we'll just call WriteToClient - * on the huge chunk - */ - retval = SendPage(pCon); - fclose(pConPriv->pPageFile); - pConPriv->pPageFile = (FILE *)NULL; - unlink(pConPriv->pageFileName); - free(pConPriv->pageFileName); - pConPriv->pageFileName = (char *)NULL; - return retval; - } - - if(pConPriv->pJobFile == (FILE *)NULL) - { - /* - * This shouldn't be necessary. I believe we only get here if - * someone calls "EndPage" prior to "StartJob". This error - * condition should probably be trapped at a higher level. - */ - - if(pConPriv->jobFileName != (char *)NULL) - Xfree(pConPriv->jobFileName); - /* - * Create a temporary file to store the printer output. - */ - if (!XpOpenTmpFile("w", &pConPriv->jobFileName, &pConPriv->pJobFile)) - goto BAD_PAGE_ALLOC; - } - - if(TransferBytes(pConPriv->pPageFile, pConPriv->pJobFile, - (int)statBuf.st_size) != (int)statBuf.st_size) - goto BAD_PAGE_ALLOC; - - fclose(pConPriv->pPageFile); - pConPriv->pPageFile = (FILE *)NULL; - unlink(pConPriv->pageFileName); - free(pConPriv->pageFileName); - pConPriv->pageFileName = (char *)NULL; - - return Success; - - BAD_PAGE_ALLOC: - - FreePageFiles(pConPriv); - - if(pRasterFile != (FILE *)NULL) - fclose(pRasterFile); - if(rasterFileName != (char *)NULL) - { - unlink(rasterFileName); - Xfree(rasterFileName); - } - return BadAlloc; -} - -static int -DocumentData( - XpContextPtr pCon, - DrawablePtr pDraw, - char *pData, - int len_data, - char *pDoc_fmt, - int len_fmt, - char *pOptions, - int len_options, - ClientPtr client) -{ - RasterContextPrivPtr pConPriv = (RasterContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, RasterContextPrivateKey); - char *preRasterStr = PRE_RASTER, *postRasterStr = POST_RASTER, - *noRasterStr = NO_RASTER; - - /* - * Check that options equals either PRE_RASTER or POST_RASTER. - */ - if(len_options == strlen(preRasterStr) && - strncmp(pOptions, preRasterStr, strlen(preRasterStr)) == 0) - { - if(pConPriv->pPreRasterFile == (FILE *)NULL) - { - if (!XpOpenTmpFile("w+", &pConPriv->preRasterFileName, - &pConPriv->pPreRasterFile)) - return BadAlloc; - } - if(fwrite(pData, sizeof(char), (size_t)len_data, - pConPriv->pPreRasterFile) != (size_t)len_data) - return BadAlloc; - fflush(pConPriv->pPreRasterFile); - } - else if(len_options == strlen(postRasterStr) && - strncmp(pOptions, postRasterStr, strlen(postRasterStr)) == 0) - { - if(pConPriv->pPostRasterFile == (FILE *)NULL) - { - if (!XpOpenTmpFile("w+", &pConPriv->postRasterFileName, - &pConPriv->pPostRasterFile)) - return BadAlloc; - } - if(fwrite(pData, sizeof(char), (size_t)len_data, - pConPriv->pPostRasterFile) != (size_t)len_data) - return BadAlloc; - fflush(pConPriv->pPostRasterFile); - } - else if(len_options == strlen(noRasterStr) && - strncmp(pOptions, noRasterStr, strlen(noRasterStr)) == 0) - { - if(pConPriv->pNoRasterFile == (FILE *)NULL) - { - if (!XpOpenTmpFile("w+", &pConPriv->noRasterFileName, - &pConPriv->pNoRasterFile)) - return BadAlloc; - } - if(fwrite(pData, sizeof(char), (size_t)len_data, - pConPriv->pNoRasterFile) != (size_t)len_data) - return BadAlloc; - fflush(pConPriv->pNoRasterFile); - } - else - return BadValue; - - return Success; -} - -/* - * GetDocumentData notes which client is requesting the document data for - * a particular context. The Raster driver's EndPage function causes the - * data to be written to the proper client. - */ -static int -GetDocumentData( - XpContextPtr pContext, - ClientPtr client, - int maxBufferSize) -{ - RasterContextPrivPtr pConPriv = (RasterContextPrivPtr) - dixLookupPrivate(&pContext->devPrivates, RasterContextPrivateKey); - - pConPriv->getDocClient = client; - pConPriv->getDocBufSize = maxBufferSize; - return Success; -} - -static void -AllocateRasterPrivates( - ScreenPtr pScreen) -{ - dixRequestPrivate(RasterContextPrivateKey, sizeof( RasterContextPrivRec ) ); - dixSetPrivate(&pScreen->devPrivates, RasterScreenPrivateKey, - Xalloc(sizeof(RasterScreenPrivRec))); -} - -/* - * RasterChangeWindowAttributes - Make sure that the window's backing - * store is turned on. - */ -static Bool -RasterChangeWindowAttributes( - WindowPtr pWin, - unsigned long mask) -{ - Bool status = Success; - ScreenPtr pScreen = pWin->drawable.pScreen; - RasterScreenPrivPtr pScreenPriv = (RasterScreenPrivPtr) - dixLookupPrivate(&pScreen->devPrivates, RasterScreenPrivateKey); - - if(pWin->backingStore == NotUseful) - { - pWin->backingStore = WhenMapped; - mask |= CWBackingStore; - } - - if(pScreenPriv->ChangeWindowAttributes != NULL) - { - pScreen->ChangeWindowAttributes = pScreenPriv->ChangeWindowAttributes; - status = pScreen->ChangeWindowAttributes(pWin, mask); - pScreen->ChangeWindowAttributes = RasterChangeWindowAttributes; - } - return status; -} - -/* - * RasterValidateDocFormats - Inspects the files available in the - * ddx-config/XP-RASTER directory to find the names of PDLs for which - * we have processing commands. These names are then intersected with - * the contents of the printer's document-formats-supported attribute, - * and the result is stored back into document-formats-supported. - * We have hard-coded knowledge of how to produce PS, so we always - * leave that in, if it's listed in document-formats-supported, - * even if we don't have a configuration file. If there is a - * configuration file for PS, then its contents will override our default. - */ -static void -RasterValidateDocFormats( - XpContextPtr pCon) -{ -} - -/* - * RasterValidateAttrs - Inspects and Corrects the attribute values - * in the specified context. - */ -static void -RasterValidateAttrs( - XpContextPtr pCon) -{ - RasterValidateDocFormats(pCon); - XpValidatePrinterPool(pCon, &RasterValidatePoolsRec); - XpValidateJobPool(pCon, &RasterValidatePoolsRec); - XpValidateDocumentPool(pCon, &RasterValidatePoolsRec); -} - -/* - * RasterInitContext - Establish the appropriate values for a - * PrintContext used with the Raster Driver. - */ -static char DOC_ATT_SUPP[]="document-attributes-supported:\tdefault-medium document-format"; -static char JOB_ATT_SUPP[]="job-attributes-supported:\t"; -static char DDX_DIR[]="ddx-config"; - -static int -RasterInitContext( - XpContextPtr pCon) -{ - char *configFileName, *val, *attrStr; - RasterContextPrivPtr pConPriv; - XpDriverFuncsPtr pFuncs; - - /* - * Initialize the attribute store for this printer. - */ - XpInitAttributes( pCon ); - - /* - * Validate the attributes - */ - RasterValidateAttrs( pCon ); - - - /* - * Initialize the function pointers - */ - pFuncs = &( pCon->funcs ); - pFuncs->StartJob = StartJob; - pFuncs->EndJob = EndJob; - pFuncs->StartDoc = StartDoc; - pFuncs->EndDoc = EndDoc; - pFuncs->StartPage = StartPage; - pFuncs->EndPage = EndPage; - pFuncs->PutDocumentData = DocumentData; - pFuncs->GetDocumentData = GetDocumentData; - pFuncs->DestroyContext = RasterDestroyContext; - pFuncs->GetAttributes = RasterGetAttributes; - pFuncs->GetOneAttribute = RasterGetOneAttribute; - pFuncs->SetAttributes = RasterSetAttributes; - pFuncs->AugmentAttributes = RasterAugmentAttributes; - pFuncs->GetMediumDimensions = RasterMediumDimensions; - pFuncs->GetReproducibleArea = RasterReproducibleArea; - - /* - * Set up the context privates - */ - pConPriv = (RasterContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, RasterContextPrivateKey); - - pConPriv->jobFileName = (char *)NULL; - pConPriv->pageFileName = (char *)NULL; - pConPriv->preRasterFileName = (char *)NULL; - pConPriv->postRasterFileName = (char *)NULL; - pConPriv->noRasterFileName = (char *)NULL; - pConPriv->pJobFile = (FILE *)NULL; - pConPriv->pPageFile = (FILE *)NULL; - pConPriv->pPreRasterFile = (FILE *)NULL; - pConPriv->pPostRasterFile = (FILE *)NULL; - pConPriv->pNoRasterFile = (FILE *)NULL; - - pConPriv->getDocClient = (ClientPtr)NULL; - pConPriv->getDocBufSize = 0; - - /* - * Get the configuration information for the context's printer - */ - configFileName = XpGetOneAttribute( pCon, XPPrinterAttr, - "xp-ddx-config-file-name" ); - if(configFileName && strlen(configFileName)) - { - if( configFileName[0] == '/' ) - pConPriv->config = XrmGetFileDatabase( configFileName ); - else - { - char *configDir, *configFilePath; - - configDir = XpGetConfigDir(FALSE); - configFilePath = (char *)malloc((strlen(configDir) + - strlen(DDX_DIR) + - strlen(RASTER_DRIV_NAME) + - strlen(configFileName) + - 4)* sizeof(char)); - sprintf(configFilePath, "%s/%s/%s/%s", configDir, DDX_DIR, - RASTER_DRIV_NAME, configFileName); - pConPriv->config = XrmGetFileDatabase(configFilePath); - free(configDir); - free(configFilePath); - } - } - else - pConPriv->config = (XrmDatabase)NULL; - - /* - * Add our own attribute initialization - */ - /* - * document-attributes-supported - */ - val = XpGetOneAttribute(pCon, XPServerAttr, "document-attributes-supported"); - if((attrStr = (char *)xalloc(strlen(val) + strlen(DOC_ATT_SUPP) + 4)) == - (char *)NULL) - return BadAlloc; - sprintf(attrStr, "*%s %s", DOC_ATT_SUPP, val); - XpAugmentAttributes(pCon, XPPrinterAttr, attrStr); - xfree(attrStr); - - /* - * job-attributes-supported - */ - val = XpGetOneAttribute(pCon, XPServerAttr, "job-attributes-supported"); - if((attrStr = (char *)xalloc(strlen(val) + strlen(JOB_ATT_SUPP) + 4)) == - (char *)NULL) - return BadAlloc; - sprintf(attrStr, "*%s %s", JOB_ATT_SUPP, val); - XpAugmentAttributes(pCon, XPPrinterAttr, attrStr); - xfree(attrStr); - - /* - * PageAttributesSupported - */ - XpAugmentAttributes(pCon, XPPrinterAttr, "*xp-page-attributes-supported:"); - - return Success; -} - - - -static Bool -RasterDestroyContext( - XpContextPtr pCon) -{ - RasterContextPrivPtr pConPriv = (RasterContextPrivPtr) - dixLookupPrivate(&pCon->devPrivates, RasterContextPrivateKey); - - /* - * Clean up the temporary files - */ - FreePageFiles( pConPriv ); - - if( pConPriv->pJobFile != (FILE *)NULL ) - { - fclose( pConPriv->pJobFile ); - pConPriv->pJobFile = (FILE *)NULL; - } - if( pConPriv->jobFileName != (char *)NULL ) - { - unlink( pConPriv->jobFileName ); - Xfree( pConPriv->jobFileName ); - } - if(pConPriv->config) - { - XrmDestroyDatabase(pConPriv->config); - pConPriv->config = (XrmDatabase)NULL; - } - - XpDestroyAttributes( pCon ); - return Success; -} - -static char * -RasterGetAttributes( - XpContextPtr pContext, - XPAttributes class) -{ - return XpGetAttributes( pContext, class ); -} - -static char * -RasterGetOneAttribute( - XpContextPtr pContext, - XPAttributes class, - char *attr) -{ - return XpGetOneAttribute( pContext, class, attr ); -} - -static int -RasterSetAttributes(XpContextPtr pCon, - XPAttributes class, - char *attributes) -{ - return XpSetAttributes( pCon, class, attributes ); -} - -static int -RasterAugmentAttributes( - XpContextPtr pCon, - XPAttributes class, - char *attributes) -{ - return XpAugmentAttributes( pCon, class, attributes ); -} - -static void -FreePageFiles( - RasterContextPrivPtr pConPriv) -{ - if(pConPriv->pPageFile != (FILE *)NULL) - { - fclose(pConPriv->pPageFile); - pConPriv->pPageFile = (FILE *)NULL; - } - if(pConPriv->pageFileName != (char *)NULL) - { - unlink(pConPriv->pageFileName); - Xfree(pConPriv->pageFileName); - pConPriv->pageFileName = (char *)NULL; - } - if(pConPriv->pPreRasterFile != (FILE *)NULL) - { - fclose(pConPriv->pPreRasterFile); - pConPriv->pPreRasterFile = (FILE *)NULL; - } - if(pConPriv->preRasterFileName != (char *)NULL) - { - unlink(pConPriv->preRasterFileName); - Xfree(pConPriv->preRasterFileName); - pConPriv->preRasterFileName = (char *)NULL; - } - if(pConPriv->pPostRasterFile != (FILE *)NULL) - { - fclose(pConPriv->pPostRasterFile); - pConPriv->pPostRasterFile = (FILE *)NULL; - } - if(pConPriv->postRasterFileName != (char *)NULL) - { - unlink(pConPriv->postRasterFileName); - Xfree(pConPriv->postRasterFileName); - pConPriv->postRasterFileName = (char *)NULL; - } - if(pConPriv->pNoRasterFile != (FILE *)NULL) - { - fclose(pConPriv->pNoRasterFile); - pConPriv->pNoRasterFile = (FILE *)NULL; - } - if(pConPriv->noRasterFileName != (char *)NULL) - { - unlink(pConPriv->noRasterFileName); - Xfree(pConPriv->noRasterFileName); - pConPriv->noRasterFileName = (char *)NULL; - } -} - -/* - * RasterCloseScreen - Call any wrapped CloseScreen function, - * and free the screen memory. - */ -static Bool -RasterCloseScreen( - int index, - ScreenPtr pScreen) -{ - Bool status = Success; - RasterScreenPrivPtr pScreenPriv = (RasterScreenPrivPtr) - dixLookupPrivate(&pScreen->devPrivates, RasterScreenPrivateKey); - - /* - * Call any wrapped CloseScreen proc. - */ - if(pScreenPriv->CloseScreen != NULL) - { - pScreen->CloseScreen = pScreenPriv->CloseScreen; - status = pScreen->CloseScreen(index, pScreen); - pScreen->CloseScreen = RasterCloseScreen; - } - - Xfree(pScreenPriv->pBits); - Xfree(pScreenPriv); - - return status; -} - -#include - -/* ARGSUSED */ -static void SigchldHndlr (int dummy) -{ - int status; - int olderrno = errno; - struct sigaction act; - sigfillset(&act.sa_mask); - act.sa_flags = 0; - act.sa_handler = SigchldHndlr; - - (void) wait (&status); - - /* - * Is this really necessary? - */ - sigaction(SIGCHLD, &act, (struct sigaction *)NULL); - errno = olderrno; -} - -/* - * SystemCmd provides a wrapper for the 'system' library call. The call - * appears to be sensitive to the handling of SIGCHLD, so this wrapper - * sets the status to SIG_DFL, and then resets the established handler - * after system returns. - */ -static int -SystemCmd(char *cmdStr) -{ - int status; - struct sigaction newAct, oldAct; - sigfillset(&newAct.sa_mask); - newAct.sa_flags = 0; - newAct.sa_handler = SIG_DFL; - sigfillset(&oldAct.sa_mask); - oldAct.sa_flags = 0; - oldAct.sa_handler = SigchldHndlr; - - /* - * get the old handler, and set the action to IGN - */ - sigaction(SIGCHLD, &newAct, &oldAct); - - status = system (cmdStr); - - sigaction(SIGCHLD, &oldAct, (struct sigaction *)NULL); - return status; -} - -/* - * RasterMediumDimensions is installed in the GetMediumDimensions field - * of each raster-initialized context. - */ -static int -RasterMediumDimensions(XpContextPtr pCon, - CARD16 *width, - CARD16 *height) -{ - XpGetMediumDimensions(pCon, width, height); - return Success; -} - -/* - * RasterReproducibleArea is installed in the GetReproducibleArea field - * of each raster-initialized context. - */ -static int -RasterReproducibleArea(XpContextPtr pCon, - xRectangle *pRect) -{ - XpGetReproductionArea(pCon, pRect); - return Success; -} diff --git a/hw/xprint/raster/Raster.h b/hw/xprint/raster/Raster.h deleted file mode 100644 index 7a613f0b0..000000000 --- a/hw/xprint/raster/Raster.h +++ /dev/null @@ -1,117 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ -/******************************************************************* -** -** ********************************************************* -** * -** * File: printer/Raster.h -** * -** * Contents: defines and includes for the raster layer -** * for a printing X server. -** * -** * Copyright: Copyright 1993 Hewlett-Packard Company -** * -** ********************************************************* -** -********************************************************************/ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#ifndef _RASTER_H_ -#define _RASTER_H_ - -/* - * Some sleazes to force the XrmDB stuff into the server - */ -#ifndef HAVE_XPointer -#define HAVE_XPointer 1 -typedef char *XPointer; -#endif -#define Status int -#define True 1 -#define False 0 -#include "misc.h" -#include -#include -#include "attributes.h" - -#include - -#define MAX_TOKEN_LEN 512 - -#define RASTER_PRINT_PAGE_COMMAND "_XP_RASTER_PAGE_PROC_COMMAND" - -#define RASTER_IN_FILE_STRING "%(InFile)%" -#define RASTER_OUT_FILE_STRING "%(OutFile)%" - -#define RASTER_ALLOWED_COMMANDS_FILE "printCommands" - -/* - * Defines for the "options" in DtPrintDocumentData. - */ -#define PRE_RASTER "PRE-RASTER" -#define POST_RASTER "POST-RASTER" -#define NO_RASTER "NO-RASTER" - - -typedef struct { - char *pBits; - CreateWindowProcPtr CreateWindow; - ChangeWindowAttributesProcPtr ChangeWindowAttributes; - DestroyWindowProcPtr DestroyWindow; - CloseScreenProcPtr CloseScreen; -} RasterScreenPrivRec, *RasterScreenPrivPtr; - -typedef struct { - XrmDatabase config; - char *jobFileName; - FILE *pJobFile; - char *pageFileName; - FILE *pPageFile; - char *preRasterFileName; /* Pre-raster document data */ - FILE *pPreRasterFile; - char *noRasterFileName; /* Raster replacement document data */ - FILE *pNoRasterFile; - char *postRasterFileName; /* Post-raster document data */ - FILE *pPostRasterFile; - ClientPtr getDocClient; - int getDocBufSize; -} RasterContextPrivRec, *RasterContextPrivPtr; - - -extern XpValidatePoolsRec RasterValidatePoolsRec; - -extern Bool InitializeRasterDriver(int ndx, ScreenPtr pScreen, int argc, - char **argv); - -#endif /* _RASTER_H_ */ diff --git a/hw/xprint/raster/RasterAttVal.c b/hw/xprint/raster/RasterAttVal.c deleted file mode 100644 index 8189be47c..000000000 --- a/hw/xprint/raster/RasterAttVal.c +++ /dev/null @@ -1,267 +0,0 @@ -/* -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include "misc.h" -#include "dixstruct.h" -#include "scrnintstr.h" -#include "screenint.h" -#include -#include "Raster.h" - -#include "attributes.h" -#include "AttrValid.h" - -/* - * define valid values and defaults for Printer pool - */ -static XpOid ValidContentOrientationsOids[] = { - xpoid_val_content_orientation_portrait, - xpoid_val_content_orientation_landscape -}; -static XpOidList ValidContentOrientations = { - ValidContentOrientationsOids, XpNumber(ValidContentOrientationsOids) -}; - -static XpOid DefaultContentOrientationsOids[] = { - xpoid_val_content_orientation_portrait, - xpoid_val_content_orientation_landscape -}; -static XpOidList DefaultContentOrientations = { - DefaultContentOrientationsOids, XpNumber(DefaultContentOrientationsOids) -}; - -static XpOid ValidPlexesOids[] = { - xpoid_val_plex_simplex -}; -static XpOidList ValidPlexes = { - ValidPlexesOids, XpNumber(ValidPlexesOids) -}; - -static XpOid DefaultPlexesOids[] = { - xpoid_val_plex_simplex -}; -static XpOidList DefaultPlexes = { - DefaultPlexesOids, XpNumber(DefaultPlexesOids) -}; - -static unsigned long ValidPrinterResolutionsCards[] = { - 150, 300, 600 -}; -static XpOidCardList ValidPrinterResolutions = { - ValidPrinterResolutionsCards, XpNumber(ValidPrinterResolutionsCards) -}; - -static unsigned long DefaultPrinterResolutionsCards[] = { - 300 -}; -static XpOidCardList DefaultPrinterResolutions = { - DefaultPrinterResolutionsCards, XpNumber(DefaultPrinterResolutionsCards) -}; - -static XpOid ValidListfontsModesOids[] = { - xpoid_val_xp_list_glyph_fonts -}; -static XpOidList ValidListfontsModes = { - ValidListfontsModesOids, XpNumber(ValidListfontsModesOids) -}; - -static XpOid DefaultListfontsModesOids[] = { - xpoid_val_xp_list_glyph_fonts -}; -static XpOidList DefaultListfontsModes = { - DefaultListfontsModesOids, XpNumber(DefaultListfontsModesOids) -}; - -static XpOid ValidSetupProvisoOids[] = { - xpoid_val_xp_setup_mandatory, xpoid_val_xp_setup_optional -}; -static XpOidList ValidSetupProviso = { - ValidSetupProvisoOids, XpNumber(ValidSetupProvisoOids) -}; - -static XpOidDocFmt ValidDocFormatsSupportedFmts[] = { - { "Postscript", "2", NULL }, - { "PCL", "3", NULL } -}; -static XpOidDocFmtList ValidDocFormatsSupported = { - ValidDocFormatsSupportedFmts, XpNumber(ValidDocFormatsSupportedFmts) -}; - -static XpOidDocFmt DefaultDocFormatsSupportedFmts[] = { - { "Postscript", "2", NULL } -}; -static XpOidDocFmtList DefaultDocFormatsSupported = { - DefaultDocFormatsSupportedFmts, XpNumber(DefaultDocFormatsSupportedFmts) -}; - -static XpOidDocFmtList ValidEmbeddedFormatsSupported = { - (XpOidDocFmt *)NULL, 0 -}; - -static XpOidDocFmtList DefaultEmbeddedFormatsSupported = { - (XpOidDocFmt *)NULL, 0 -}; - -static XpOidDocFmt ValidRawFormatsSupportedFmts[] = { - { "Postscript", "2", NULL }, - { "PCL", "3", NULL } -}; -static XpOidDocFmtList ValidRawFormatsSupported = { - ValidRawFormatsSupportedFmts, XpNumber(ValidRawFormatsSupportedFmts) -}; - -static XpOidDocFmt DefaultRawFormatsSupportedFmts[] = { - { "Postscript", "2", NULL } -}; -static XpOidDocFmtList DefaultRawFormatsSupported = { - DefaultRawFormatsSupportedFmts, XpNumber(DefaultRawFormatsSupportedFmts) -}; - -static XpOidList ValidInputTrays = { - (XpOid *)NULL, 0 -}; - -static XpOid ValidMediumSizesOids[] = { - xpoid_val_medium_size_iso_a0, - xpoid_val_medium_size_iso_a1, - xpoid_val_medium_size_iso_a2, - xpoid_val_medium_size_iso_a3, - xpoid_val_medium_size_iso_a4, - xpoid_val_medium_size_iso_a5, - xpoid_val_medium_size_iso_a6, - xpoid_val_medium_size_iso_a7, - xpoid_val_medium_size_iso_a8, - xpoid_val_medium_size_iso_a9, - xpoid_val_medium_size_iso_a10, - xpoid_val_medium_size_iso_b0, - xpoid_val_medium_size_iso_b1, - xpoid_val_medium_size_iso_b2, - xpoid_val_medium_size_iso_b3, - xpoid_val_medium_size_iso_b4, - xpoid_val_medium_size_iso_b5, - xpoid_val_medium_size_iso_b6, - xpoid_val_medium_size_iso_b7, - xpoid_val_medium_size_iso_b8, - xpoid_val_medium_size_iso_b9, - xpoid_val_medium_size_iso_b10, - xpoid_val_medium_size_na_letter, - xpoid_val_medium_size_na_legal, - xpoid_val_medium_size_executive, - xpoid_val_medium_size_folio, - xpoid_val_medium_size_invoice, - xpoid_val_medium_size_ledger, - xpoid_val_medium_size_quarto, - xpoid_val_medium_size_iso_c3, - xpoid_val_medium_size_iso_c4, - xpoid_val_medium_size_iso_c5, - xpoid_val_medium_size_iso_c6, - xpoid_val_medium_size_iso_designated_long, - xpoid_val_medium_size_na_10x13_envelope, - xpoid_val_medium_size_na_9x12_envelope, - xpoid_val_medium_size_na_number_10_envelope, - xpoid_val_medium_size_na_7x9_envelope, - xpoid_val_medium_size_na_9x11_envelope, - xpoid_val_medium_size_na_10x14_envelope, - xpoid_val_medium_size_na_number_9_envelope, - xpoid_val_medium_size_monarch_envelope, - xpoid_val_medium_size_a, - xpoid_val_medium_size_b, - xpoid_val_medium_size_c, - xpoid_val_medium_size_d, - xpoid_val_medium_size_e, - xpoid_val_medium_size_jis_b0, - xpoid_val_medium_size_jis_b1, - xpoid_val_medium_size_jis_b2, - xpoid_val_medium_size_jis_b3, - xpoid_val_medium_size_jis_b4, - xpoid_val_medium_size_jis_b5, - xpoid_val_medium_size_jis_b6, - xpoid_val_medium_size_jis_b7, - xpoid_val_medium_size_jis_b8, - xpoid_val_medium_size_jis_b9, - xpoid_val_medium_size_jis_b10 -}; -static XpOidList ValidMediumSizes = { - ValidMediumSizesOids, XpNumber(ValidMediumSizesOids) -}; - -static XpOidDocFmt DefaultDocumentFormat = { - "Postscript", "2", NULL -}; - -static XpOid ValidAvailableCompressionsOids[] = { - xpoid_val_available_compressions_0, - xpoid_val_available_compressions_01, - xpoid_val_available_compressions_02, - xpoid_val_available_compressions_03, - xpoid_val_available_compressions_012, - xpoid_val_available_compressions_013, - xpoid_val_available_compressions_023, - xpoid_val_available_compressions_0123 -}; - -static XpOidList ValidAvailableCompressions = { - ValidAvailableCompressionsOids, XpNumber(ValidAvailableCompressionsOids) -}; - -static XpOid DefaultAvailableCompressionsOids[] = { - xpoid_val_available_compressions_0123, - xpoid_val_available_compressions_0 -}; - -static XpOidList DefaultAvailableCompressions = { - DefaultAvailableCompressionsOids, XpNumber(DefaultAvailableCompressionsOids) -}; - - -/* - * init struct for XpValidate*Pool - */ -XpValidatePoolsRec RasterValidatePoolsRec = { - &ValidContentOrientations, &DefaultContentOrientations, - &ValidDocFormatsSupported, &DefaultDocFormatsSupported, - &ValidInputTrays, &ValidMediumSizes, - &ValidPlexes, &DefaultPlexes, - &ValidPrinterResolutions, &DefaultPrinterResolutions, - &ValidEmbeddedFormatsSupported, &DefaultEmbeddedFormatsSupported, - &ValidListfontsModes, &DefaultListfontsModes, - &ValidRawFormatsSupported, &DefaultRawFormatsSupported, - &ValidSetupProviso, - &DefaultDocumentFormat, - &ValidAvailableCompressions, &DefaultAvailableCompressions -}; diff --git a/hw/xprint/spooler.c b/hw/xprint/spooler.c deleted file mode 100644 index 69b5eed0e..000000000 --- a/hw/xprint/spooler.c +++ /dev/null @@ -1,202 +0,0 @@ -/* -Copyright (c) 2003-2004 Roland Mainz -Copyright (c) 2004 Sun Microsystems, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#ifdef __hpux -#include -#endif - -#include "spooler.h" - -/* - * The string LIST_QUEUES_* is fed to a shell to generate an ordered - * list of available printers on the system. These string definitions - * are taken from the file PrintSubSys.C within the code for the - * dtprintinfo program. - */ -#define LIST_QUEUES_AIX4 \ - "lsallq | grep -v '^bsh$' | sort | uniq" - -#define LIST_QUEUES_HPUX \ - "LANG=C lpstat -v | " \ - "awk '" \ - " $2 == \"for\" " \ - " { " \ - " x = match($3, /:/); " \ - " print substr($3, 1, x-1)" \ - " }' | sort | uniq" - -#define LIST_QUEUES_OSF \ - "LANG=C lpstat -v | " \ - "nawk '" \ - " $2 == \"for\" " \ - " { print $4 }' " \ - " | sort | uniq" - -#define LIST_QUEUES_UXP \ - "LANG=C lpstat -v |" \ - "nawk '" \ - " $4 == \"for\" " \ - " { " \ - " x = match($5, /:/); " \ - " print substr($5, 1, x-1)" \ - " }' | sort | uniq" - -/* Support both normal and LPRng output of "lpc status" */ -#define LIST_QUEUES_BSD \ - "PATH=\"${PATH}:/usr/bin:/usr/sbin:/bin:/sbin\"\n" \ - "export PATH\n" \ - \ - "which_tool()\n" \ - "{\n" \ - " echo \"${PATH}\" | tr \":\" \"\n\" | while read i ; do ls -1ad \"${i}/${1}\" 2>/dev/null ; done\n" \ - "}\n" \ - \ - "(\n" \ - "WHICH_LPC=\"`which_tool lpc`\"\n" \ - \ - "if [ \"`which_tool nawk`\" != \"\" ] ; then\n" \ - " NAWK=\"nawk\"\n" \ - "else\n" \ - " NAWK=\"awk\"\n" \ - "fi\n" \ - \ - "[ \"${WHICH_LPC}\" != \"\" ] && (LANG=C lpc status | ${NAWK} '/^[^ ]*:$/ && !/@/ && !/ / { print $1 }' | sed -e /:/s///)\n" \ - "[ \"${WHICH_LPC}\" != \"\" ] && (LANG=C lpc -a status | ${NAWK} '/^[^ ]*@[^ ]/ && !/:$/ { split( $1, name, \"@\" ); print name[1]; }')\n" \ - ") | egrep -v -i \" |^all$\" | sort | uniq" - -#define LIST_QUEUES_SYSV \ - "PATH=\"${PATH}:/usr/bin:/usr/sbin:/bin:/sbin\"\n" \ - "export PATH\n" \ - \ - "which_tool()\n" \ - "{\n" \ - " echo \"${PATH}\" | tr \":\" \"\n\" | while read i ; do ls -1ad \"${i}/${1}\" 2>/dev/null ; done\n" \ - "}\n" \ - \ - "(\n" \ - "WHICH_LPSTAT=\"`which_tool lpstat`\"\n" \ - \ - "if [ \"`which_tool nawk`\" != \"\" ] ; then\n" \ - " NAWK=\"nawk\"\n" \ - "else\n" \ - " NAWK=\"awk\"\n" \ - "fi\n" \ - \ - "[ \"${WHICH_LPSTAT}\" != \"\" ] && (LANG=C lpstat -v | ${NAWK} ' $2 == \"for\" { x = match($3, /:/); print substr($3, 1, x-1) }')\n" \ - ") | egrep -v -i \" |^all$\" | sort | uniq" - -#define LIST_QUEUES_SOLARIS "LANG=C lpget -k description " \ - "`lpstat -v " \ - "| nawk '$2 == \"for\" { x = match($3, /:/); print substr($3, 1,x-1) }' " \ - "| sort -u` " \ - "| nawk -F: ' NF == 2 { name=$1 } " \ - " NF == 1 { sub(\"^.*description\\( - undefined|=\\)\",\"\"); " \ - " printf \"%s\txp-printerattr.descriptor=%s\\n\", name, $1 } '" - -#define LIST_QUEUES_OTHER \ - "LANG=C lpstat -v | " \ - "nawk '" \ - " $2 == \"for\" " \ - " { " \ - " x = match($3, /:/); " \ - " print substr($3, 1, x-1)" \ - " }' | sort | uniq" - -#define DEFAULT_SPOOL_COMMAND_HPUX "/usr/bin/lp -d %printer-name% -o raw -n %copy-count% -t %job-name% %options%" -#define DEFAULT_SPOOL_COMMAND_BSD "/usr/bin/lpr -P %printer-name% -#%copy-count% -T %job-name% %options%" -#define DEFAULT_SPOOL_COMMAND_SYSV "/usr/bin/lp -d %printer-name% -n %copy-count% -t %job-name% %options%" -#define DEFAULT_SPOOL_COMMAND_SOLARIS "/usr/bin/lp -d %printer-name% -n %copy-count% -t %job-name% %options%" -#define DEFAULT_SPOOL_COMMAND_OTHER "/usr/bin/lp -d %printer-name% -n %copy-count% -t %job-name% %options%" - - -/* List of spooler types and the commands used to enumerate - * print queues and submit print jobs */ -XpSpoolerType xpstm[] = -{ - /* OS-specific spoolers */ - { "aix", LIST_QUEUES_AIX4, DEFAULT_SPOOL_COMMAND_OTHER }, - { "aix4", LIST_QUEUES_AIX4, DEFAULT_SPOOL_COMMAND_OTHER }, - { "bsd", LIST_QUEUES_BSD, DEFAULT_SPOOL_COMMAND_BSD }, - { "osf", LIST_QUEUES_OSF, DEFAULT_SPOOL_COMMAND_OTHER }, - { "solaris", LIST_QUEUES_SOLARIS, DEFAULT_SPOOL_COMMAND_SOLARIS }, - { "sysv", LIST_QUEUES_SYSV, DEFAULT_SPOOL_COMMAND_SYSV }, - { "uxp", LIST_QUEUES_UXP, DEFAULT_SPOOL_COMMAND_OTHER }, - /* crossplatform spoolers */ - { "cups", LIST_QUEUES_SYSV, DEFAULT_SPOOL_COMMAND_SYSV }, - { "lprng", LIST_QUEUES_BSD, DEFAULT_SPOOL_COMMAND_BSD }, - /* misc */ - { "other", LIST_QUEUES_OTHER, DEFAULT_SPOOL_COMMAND_OTHER }, - { "none", NULL, NULL }, - { NULL, NULL, NULL } -}; - -/* Used by Init.c and attributes.c */ -XpSpoolerTypePtr spooler_type = NULL; - -XpSpoolerTypePtr XpSpoolerNameToXpSpoolerType(char *name) -{ - XpSpoolerTypePtr curr = xpstm; - - while( curr->name != NULL ) - { - if( !strcasecmp(name, curr->name) ) - return curr; - - curr++; - } - - return NULL; -} - -static char *spooler_namelist = NULL; - -char *XpGetSpoolerTypeNameList(void) -{ - if( spooler_namelist ) - return spooler_namelist; - - return XPDEFAULTSPOOLERNAMELIST; -} - -void XpSetSpoolerTypeNameList(char *namelist) -{ - spooler_namelist = namelist; -} - - diff --git a/hw/xprint/spooler.h b/hw/xprint/spooler.h deleted file mode 100644 index 4e056ceeb..000000000 --- a/hw/xprint/spooler.h +++ /dev/null @@ -1,75 +0,0 @@ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#ifndef SPOOLER_H -#define SPOOLER_H 1 - -/* -Copyright (c) 2003-2004 Roland Mainz - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. -*/ - -/* - * Define platform-specific default spooler type - */ -#if defined(sun) -#define XPDEFAULTSPOOLERNAMELIST "solaris" -#elif defined(AIXV4) -#define XPDEFAULTSPOOLERNAMELIST "aix4" -#elif defined(hpux) -#define XPDEFAULTSPOOLERNAMELIST "hpux" -#elif defined(__osf__) -#define XPDEFAULTSPOOLERNAMELIST "osf" -#elif defined(__uxp__) -#define XPDEFAULTSPOOLERNAMELIST "uxp" -#elif defined(CSRG_BASED) || defined(linux) -/* ToDo: This should be "cups:bsd" in the future, but for now - * the search order first-bsd-then-cups is better for backwards - * compatibility. - */ -#define XPDEFAULTSPOOLERNAMELIST "bsd:cups" -#else -#define XPDEFAULTSPOOLERNAMELIST "other" -#endif - -typedef struct -{ - const char *name; - const char *list_queues_command; - const char *spool_command; -} XpSpoolerType, *XpSpoolerTypePtr; - -/* prototypes */ -extern XpSpoolerTypePtr XpSpoolerNameToXpSpoolerType(char *name); -extern void XpSetSpoolerTypeNameList(char *namelist); -extern char *XpGetSpoolerTypeNameList(void); - -/* global vars */ -extern XpSpoolerTypePtr spooler_type; -extern XpSpoolerType xpstm[]; - -#endif /* !SPOOLER_H */ - diff --git a/include/dix.h b/include/dix.h index 0790f5847..8e79d4c07 100644 --- a/include/dix.h +++ b/include/dix.h @@ -116,9 +116,6 @@ typedef struct _Client *ClientPtr; /* also in misc.h */ typedef struct _WorkQueue *WorkQueuePtr; -#ifdef XPRINT -extern ClientPtr requestingClient; -#endif extern ClientPtr *clients; extern ClientPtr serverClient; extern int currentMaxClients; diff --git a/mi/miinitext.c b/mi/miinitext.c index 8689ee49b..9a8736061 100644 --- a/mi/miinitext.c +++ b/mi/miinitext.c @@ -88,34 +88,6 @@ SOFTWARE. #undef GLXEXT #endif -/* Make sure Xprt only announces extensions it supports */ -#ifdef PRINT_ONLY_SERVER -#undef MITSHM /* this is incompatible to the vector-based Xprint DDX */ -#undef XKB -#undef PANORAMIX -#undef RES -#undef XINPUT -#undef XV -#undef SCREENSAVER -#undef XIDLE -#undef XRECORD -#undef XF86VIDMODE -#undef XF86MISC -#undef XFreeXDGA -#undef XF86DRI -#undef DPMSExtension -#undef FONTCACHE -#undef COMPOSITE -#undef DAMAGE -#undef XFIXES -#undef XEVIE -#else -#ifndef LOADABLEPRINTDDX -#undef XPRINT -#endif /* LOADABLEPRINTDDX */ -#endif /* PRINT_ONLY_SERVER */ - - extern Bool noTestExtensions; #ifdef BIGREQS @@ -228,9 +200,6 @@ typedef void (*InitExtension)(INITARGS); #ifdef XKB #include #endif -#ifdef XPRINT -#include -#endif #ifdef XCSECURITY #include "securitysrv.h" #include @@ -304,9 +273,6 @@ extern void SecurityExtensionInit(INITARGS); #ifdef XSELINUX extern void SELinuxExtensionInit(INITARGS); #endif -#ifdef XPRINT -extern void XpExtensionInit(INITARGS); -#endif #ifdef XF86BIGFONT extern void XFree86BigfontExtensionInit(INITARGS); #endif @@ -495,7 +461,7 @@ InitExtensions(argc, argv) char *argv[]; { #ifdef PANORAMIX -# if !defined(PRINT_ONLY_SERVER) && !defined(NO_PANORAMIX) +# if !defined(NO_PANORAMIX) if (!noPanoramiXExtension) PanoramiXExtensionInit(); # endif #endif @@ -526,7 +492,7 @@ InitExtensions(argc, argv) #ifdef XTRAP if (!noTestExtensions) DEC_XTRAPInit(); #endif -#if defined(SCREENSAVER) && !defined(PRINT_ONLY_SERVER) +#if defined(SCREENSAVER) if (!noScreenSaverExtension) ScreenSaverExtensionInit (); #endif #ifdef XV @@ -538,7 +504,7 @@ InitExtensions(argc, argv) #ifdef XSYNC if (!noSyncExtension) SyncExtensionInit(); #endif -#if defined(XKB) && !defined(PRINT_ONLY_SERVER) +#if defined(XKB) if (!noXkbExtension) XkbExtensionInit(); #endif #ifdef XCMISC @@ -556,9 +522,6 @@ InitExtensions(argc, argv) #ifdef XSELINUX if (!noSELinuxExtension) SELinuxExtensionInit(); #endif -#ifdef XPRINT - XpExtensionInit(); /* server-specific extension, cannot be disabled */ -#endif #if defined(DPMSExtension) && !defined(NO_HW_ONLY_EXTS) if (!noDPMSExtension) DPMSExtensionInit(); #endif @@ -568,7 +531,7 @@ InitExtensions(argc, argv) #ifdef XF86BIGFONT if (!noXFree86BigfontExtension) XFree86BigfontExtensionInit(); #endif -#if !defined(PRINT_ONLY_SERVER) && !defined(NO_HW_ONLY_EXTS) +#if !defined(NO_HW_ONLY_EXTS) #if defined(XF86VIDMODE) if (!noXFree86VidModeExtension) XFree86VidModeExtensionInit(); #endif @@ -641,9 +604,6 @@ static ExtensionModule staticExtensions[] = { #ifdef XCSECURITY { SecurityExtensionInit, SECURITY_EXTENSION_NAME, &noSecurityExtension, NULL, NULL }, #endif -#ifdef XPRINT - { XpExtensionInit, XP_PRINTNAME, NULL, NULL, NULL }, -#endif #ifdef PANORAMIX { PanoramiXExtensionInit, PANORAMIX_PROTOCOL_NAME, &noPanoramiXExtension, NULL, NULL }, #endif diff --git a/os/utils.c b/os/utils.c index 07296dfc5..9aa510b4e 100644 --- a/os/utils.c +++ b/os/utils.c @@ -128,10 +128,6 @@ OR PERFORMANCE OF THIS SOFTWARE. #include "picture.h" #endif -#ifdef XPRINT -#include "DiPrint.h" -#endif - _X_EXPORT Bool noTestExtensions; #ifdef BIGREQS _X_EXPORT Bool noBigReqExtension = FALSE; @@ -613,9 +609,6 @@ void UseMsg(void) ErrorF("-render [default|mono|gray|color] set render color alloc policy\n"); #endif ErrorF("-s # screen-saver timeout (minutes)\n"); -#ifdef XPRINT - PrinterUseMsg(); -#endif ErrorF("-su disable any save under support\n"); ErrorF("-t # mouse threshold (pixels)\n"); ErrorF("-terminate terminate at server reset\n"); @@ -1027,12 +1020,6 @@ ProcessCommandLine(int argc, char *argv[]) i = skip - 1; } #endif -#ifdef XPRINT - else if ((skip = PrinterOptions(argc, argv, i)) != i) - { - i = skip - 1; - } -#endif #ifdef AIXV3 else if ( strcmp( argv[i], "-timeout") == 0) { From 86678e7cc2b021851ff508433fa160170f500c51 Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Mon, 12 May 2008 14:53:37 -0400 Subject: [PATCH 64/66] Fix fbdevhw initialization for PCI drivers. graphics/fb%d, not graphics:fb%d. Thanks sysfs. Thysfs. --- hw/xfree86/fbdevhw/fbdevhw.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hw/xfree86/fbdevhw/fbdevhw.c b/hw/xfree86/fbdevhw/fbdevhw.c index a1f67486f..4d514226e 100644 --- a/hw/xfree86/fbdevhw/fbdevhw.c +++ b/hw/xfree86/fbdevhw/fbdevhw.c @@ -310,12 +310,12 @@ fbdev_open_pci(struct pci_device * pPci, char **namep) /* There are two ways to that we can determine which fb device is * associated with this PCI device. The more modern way is to look in * the sysfs directory for the PCI device for a file named - * "graphics:fb*" + * "graphics/fb*" */ for (i = 0; i < 8; i++) { sprintf(filename, - "/sys/bus/pci/devices/%04x:%02x:%02x.%d/graphics:fb%d", + "/sys/bus/pci/devices/%04x:%02x:%02x.%d/graphics/fb%d", pPci->domain, pPci->bus, pPci->dev, pPci->func, i); fd = open(filename, O_RDONLY, 0); From c50b5d978981b13cdb22a9ad41c1b64f90cebe51 Mon Sep 17 00:00:00 2001 From: Aaron Plattner Date: Sun, 4 May 2008 13:45:27 -0700 Subject: [PATCH 65/66] Bug #14692: Allow drivers to have a say in Xinerama visual consolidation. Create a new exported global variable, XineramaVisualsEqualPtr. Use this pointer to decide whether two visuals are equal during visual consolidation. This pointer can be wrapped, which allows drivers and extensions to control which visuals are consolidated. A wrapper can reject the visuals without calling down, but must call down and return that result if it deems the visuals equal. This ensures that all layers agree that the visuals are equal. Pass the screen of the other visual into the VisualsEqual callchain. Don't free PanoramiXVisuals since we need it for PanoramiXTranslateVisualID. Don't skip the first visual on the other screen in PanoramiXMaybeAddVisual. Skip the loop in PanoramiXTranslateVisualID if screen is 0. --- Xext/panoramiX.c | 33 +++++++++++++++++++++------------ Xext/panoramiXsrv.h | 10 ++++++++++ 2 files changed, 31 insertions(+), 12 deletions(-) diff --git a/Xext/panoramiX.c b/Xext/panoramiX.c index f92414764..eb7068925 100644 --- a/Xext/panoramiX.c +++ b/Xext/panoramiX.c @@ -87,6 +87,9 @@ _X_EXPORT unsigned long XRT_PIXMAP; _X_EXPORT unsigned long XRT_GC; _X_EXPORT unsigned long XRT_COLORMAP; +static Bool VisualsEqual(VisualPtr, ScreenPtr, VisualPtr); +_X_EXPORT XineramaVisualsEqualProcPtr XineramaVisualsEqualPtr = &VisualsEqual; + /* * Function prototypes */ @@ -668,10 +671,10 @@ Bool PanoramiXCreateConnectionBlock(void) connSetupPrefix.length = length >> 2; - xfree(PanoramiXVisuals); for (i = 0; i < PanoramiXNumDepths; i++) xfree(PanoramiXDepths[i].vids); xfree(PanoramiXDepths); + PanoramiXDepths = NULL; /* * OK, change some dimensions so it looks as if it were one big screen @@ -709,7 +712,7 @@ Bool PanoramiXCreateConnectionBlock(void) * do their own back-mapping. */ static Bool -VisualsEqual(VisualPtr a, VisualPtr b) +VisualsEqual(VisualPtr a, ScreenPtr pScreenB, VisualPtr b) { return ((a->class == b->class) && (a->ColormapEntries == b->ColormapEntries) && @@ -759,7 +762,6 @@ static void PanoramiXMaybeAddVisual(VisualPtr pVisual) { ScreenPtr pScreen; - VisualPtr candidate = NULL; int j, k; Bool found = FALSE; @@ -767,10 +769,10 @@ PanoramiXMaybeAddVisual(VisualPtr pVisual) pScreen = screenInfo.screens[j]; found = FALSE; - candidate = pScreen->visuals; for (k = 0; k < pScreen->numVisuals; k++) { - candidate++; - if (VisualsEqual(pVisual, candidate) + VisualPtr candidate = &pScreen->visuals[k]; + + if ((*XineramaVisualsEqualPtr)(pVisual, pScreen, candidate) #ifdef GLXPROXY && glxMatchVisual(screenInfo.screens[0], pVisual, pScreen) #endif @@ -844,8 +846,13 @@ PanoramiXConsolidate(void) _X_EXPORT VisualID PanoramiXTranslateVisualID(int screen, VisualID orig) { + ScreenPtr pOtherScreen = screenInfo.screens[screen]; VisualPtr pVisual = NULL; - int i, j; + int i; + + /* if screen is 0, orig is already the correct visual ID */ + if (screen == 0) + return orig; for (i = 0; i < PanoramiXNumVisuals; i++) { if (orig == PanoramiXVisuals[i].vid) { @@ -858,11 +865,13 @@ PanoramiXTranslateVisualID(int screen, VisualID orig) return 0; /* found the original, now translate it relative to the backend screen */ - for (i = 0; i < PanoramiXNumScreens; i++) - for (j = 0; j < screenInfo.screens[i]->numVisuals; j++) - if (VisualsEqual(pVisual, &screenInfo.screens[i]->visuals[j])) - return screenInfo.screens[i]->visuals[j].vid; - + for (i = 0; i < pOtherScreen->numVisuals; i++) { + VisualPtr pOtherVisual = &pOtherScreen->visuals[i]; + + if ((*XineramaVisualsEqualPtr)(pVisual, pOtherScreen, pOtherVisual)) + return pOtherVisual->vid; + } + return 0; } diff --git a/Xext/panoramiXsrv.h b/Xext/panoramiXsrv.h index 6d556e963..d5c3d9827 100644 --- a/Xext/panoramiXsrv.h +++ b/Xext/panoramiXsrv.h @@ -30,6 +30,16 @@ extern unsigned long XRT_PIXMAP; extern unsigned long XRT_GC; extern unsigned long XRT_COLORMAP; +/* + * Drivers are allowed to wrap this function. Each wrapper can decide that the + * two visuals are unequal, but if they are deemed equal, the wrapper must call + * down and return FALSE if the wrapped function does. This ensures that all + * layers agree that the visuals are equal. The first visual is always from + * screen 0. + */ +typedef Bool (*XineramaVisualsEqualProcPtr)(VisualPtr, ScreenPtr, VisualPtr); +extern XineramaVisualsEqualProcPtr XineramaVisualsEqualPtr; + extern void XineramaGetImageData( DrawablePtr *pDrawables, int left, From ed65e8b4f02a6da7f1c5d85984a9ccf6a94d0181 Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Mon, 12 May 2008 18:49:34 -0700 Subject: [PATCH 66/66] Check for strcasestr and workaround it on systems without it --- config/hal.c | 13 +++++++++++++ configure.ac | 2 +- include/dix-config.h.in | 3 +++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/config/hal.c b/config/hal.c index 67ffa0304..e197cb1b4 100644 --- a/config/hal.c +++ b/config/hal.c @@ -260,7 +260,17 @@ device_added(LibHalContext *hal_ctx, const char *udi) * Since we can't predict the order in which the keys * arrive, we need to store them. */ +#ifndef HAVE_STRCASESTR + int psi_key_len = strlen(psi_key); + char *lower_psi_key = xalloc(psi_key_len + 1); + + CopyISOLatin1Lowered((unsigned char *) lower_psi_key, + (unsigned char *) psi_key, + psi_key_len); + if ((tmp = strstr(lower_psi_key, "xkb"))) +#else if ((tmp = strcasestr(psi_key, "xkb"))) +#endif { if (!strcasecmp(&tmp[3], "layout")) { @@ -289,6 +299,9 @@ device_added(LibHalContext *hal_ctx, const char *udi) add_option(&options, psi_key + sizeof(LIBHAL_PROP_KEY)-1, tmp_val); xfree(tmp_val); } +#ifndef HAVE_STRCASESTR + xfree(lower_psi_key); +#endif } } else if (!strncasecmp(psi_key, LIBHAL_XKB_PROP_KEY, sizeof(LIBHAL_XKB_PROP_KEY)-1)){ diff --git a/configure.ac b/configure.ac index d78f12292..8716ba51d 100644 --- a/configure.ac +++ b/configure.ac @@ -191,7 +191,7 @@ dnl Checks for library functions. AC_FUNC_VPRINTF AC_CHECK_FUNCS([geteuid getuid link memmove memset mkstemp strchr strrchr \ strtol getopt getopt_long vsnprintf walkcontext backtrace \ - getisax getzoneid shmctl64]) + getisax getzoneid shmctl64 strcasestr]) AC_FUNC_ALLOCA dnl Old HAS_* names used in os/*.c. AC_CHECK_FUNC([getdtablesize], diff --git a/include/dix-config.h.in b/include/dix-config.h.in index 387f65aa1..914ce4947 100644 --- a/include/dix-config.h.in +++ b/include/dix-config.h.in @@ -205,6 +205,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H +/* Define to 1 if you have the `strcasestr' function. */ +#undef HAVE_STRCASESTR + /* Define to 1 if you have the `strchr' function. */ #undef HAVE_STRCHR

    Name

    Xprt — Print server for X Version 11

    Synopsis

    Xprt [-ac] [-audit level] [-pn] [-fp fontpath] [-XpFile file] [-XpSpoolerType spoolername] [:display]

    DESCRIPTION

    Xprt is the Xprint print server - for version 11 of the X Window system for non display devices - such as printers and fax machines.

    Xprint is an advanced printing system which enables X11 - applications to use devices like printers, FAX or create - documents in formats like PostScript, PCL or PDF. It may be used by - clients such as mozilla. -

    Xprint is a very flexible, extensible, scalable, client/server - print system based on ISO 10175 (and some other specs) and the X11 - rendering protocol. - Using Xprint an application can search, query and use devices like - printers, FAX machines or create documents in formats like PDF. - In particular, an application can seek a printer, query supported - attributes (like paper size, trays, fonts etc.), configure the printer - device to match it's needs and print on it like on any other X device - reusing parts of the code which is used for the video card Xserver. -

    USAGE

    - Although Xprt may be invoked from the command line, it is - preferable to run it as a daemon via the init script - /etc/init.d/xprint (where this script exists). -

    Client programs such as mozilla will require environment - variable ${XPSERVERLIST} to be set, identifying the - "display" on which Xprt is running. This variable may be set - for all users via /etc/profile (or similar), using - /etc/init.d/xprint get_xpserverlist: -

    export XPSERVERLIST=`/etc/init.d/xprint get_xpserverlist`

    OPTIONS

    Many of Xprt's command line options are shared in common - with the usual X servers (see Xserver(1x)). - Commonly used options include:

    :display

    The X server runs on the given display. If multiple X - servers are to run simultaneously on a host, each must - have a unique display number. Note that the standard X - server (for video displays) typically runs on display - :0. If /etc/init.d/xprint is used - to invoke Xprt, it may be configured to automatically assign an available - display number.

    -ac

    disables host-based access control mechanisms. Enables access - by any host, and permits any host to modify the access control - list. Use with extreme caution. This option exists primarily - for running test suites remotely.

    -audit level

    sets the audit trail level. The default level is 1, meaning - only connection rejections are reported. Level 2 additionally - reports all successful connections and disconnects. Level 4 - enables messages from the SECURITY extension, if present, - including generation and revocation of authorizations and - violations of the security policy. Level 0 turns off the audit - trail. Audit lines are sent as standard error output.

    -fp fontpath

    sets the search path for fonts. This path is a comma - separated list of directories which Xprt searches for - font databases.

    -pn

    permits the server to continue running if it fails to - establish all of its well-known sockets (connection - points for clients), but establishes at least - one.

    -XpFile file

    Sets an alternate Xprinters file (see section FILES).

    -XpSpoolerType spoolername

    - Defines the spooler system to be used for print job spooling. - Supported values in xprint.mozdev.org release 009 are: -

    aix
    aix4
    bsd
    osf
    solaris
    sysv
    uxp
    cups
    lprng
    other
    none

    - (multiple values can be specified, separated by ':', the first active spooler will be chosen). - The default value is platform-specific and can be obtained via -

    Xprt -h

    . -

    ENVIRONMENT

    - The following environment variables are recognized by the X print server - (environment variables recognized by Xprint clients are described in - Xprint(7)): - -

    ${XPCONFIGDIR}

    This environment variable points to the root - of the Xprint server configuration directory hierarchy. - If the variable is not defined, the default - path is be assumed. The default path may be - /usr/X11R6/lib/X11/xserver/, - /usr/lib/X11/xserver/, - /usr/share/Xprint/xserver/ or - /usr/openwin/server/etc/XpConfig, depending on the - system, and may be configured in /etc/init.d/xprint.

    ${LANG}

    - This environment variable selects the locale settings used by the Xprint server. - Xprt allows language-specific settings (stored in ${XPCONFIGDIR}/${LANG}/print/) - which will override the default settings (stored in ${XPCONFIGDIR}/C/print/). - If ${LANG} is not set "C" is assumed. -

    FILES

    ${XPCONFIGDIR}/${LANG}/print/Xprinters, ${XPCONFIGDIR}/C/print/Xprinters

    - `Xprinters' is the top most configuration file. It tells - Xprt which specific printer names (e.g. mylaser) should - be supported, and whether lpstat(1) or other commands - should be used to automatically supplement the list of - printers. -

    ${XPCONFIGDIR}/${LANG}/print/attributes/printer, ${XPCONFIGDIR}/C/print/attributes/printer

    - The `printer' file maps printer names to model - configurations (see `model-config' below). For example, - "mylaser" could be mapped to a "HPDJ1600C", and all other - arbitrary printers could be mapped to a default, such as - "HPLJ4SI". When depending on lpstat(1) in the Xprinters - file, setting up defaults in `printer' becomes all the - more important. -

    ${XPCONFIGDIR}/${LANG}/print/attributes/document, ${XPCONFIGDIR}/C/print/attributes/document

    - The `document' file specifies the initial document values - for any print jobs. For example, which paper tray to - use, what default resolution, etc. -

    ${XPCONFIGDIR}/${LANG}/print/attributes/job, ${XPCONFIGDIR}/C/print/attributes/job

    - The `job' file specifies the initial job values for any - print jobs. For example, "notification-profile" can be - set so that when a print job is successfully sent to a - printer, e-mail is sent to the user. -

    ${XPCONFIGDIR}/C/print/models/PSdefault/model-config, ${XPCONFIGDIR}/C/print/models/PSdefault/fonts/fonts.dir, ${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00051.pmf, ${XPCONFIGDIR}/C/print/models/PSdefault/fonts/9nb00093.pmf

    - The `model-config' file has attributes that describe the - printer model's capabilities and default settings. - Printer model fonts may also be present. The model-config - file also identifies the print ddx driver to be used. - - For each printer model supported, a complete hierarchy of - files should exist. In most cases, these files do not - need to be modified. -

    ${XPCONFIGDIR}/C/print/ddx-config/raster/pdf, ${XPCONFIGDIR}/C/print/ddx-config/raster/pcl, ${XPCONFIGDIR}/C/print/ddx-config/raster/postscript

    - The print ddx drivers can have highly specific - configuration files to control their behavior. In most - cases, these files do not need to be modified. -

    SEE ALSO

    Xprint(7), X11(7), xplsprinters(1x), xprehashprinterlist(1x), xphelloworld(1x), xpxmhelloworld(1x), xpawhelloworld(1x), xpxthelloworld(1x), xpsimplehelloworld(1x), Xserver(1x), libXp(3x), libXprintUtils(3x), libXprintAppUtils(3x), XmPrintShell(3x), XawPrintShell(3x), Xprint FAQ (http://xprint.mozdev.org/docs/Xprint_FAQ.html), Xprint main site (http://xprint.mozdev.org/)

    AUTHORS

    - This manual page was written by - Drew Parsons and - Roland Mainz , - with some help from the man page at - http://www.sins.com.au/unix/manpages/Xprt.html and the XFree86 - man page for Xserver(1). -

    R_qv!peue%7|+Pb%oh%u9HKaYj2ok$uQ|4Fm1pI?rcyiaZTtveIZjBl9fD zZp_)E?AmeLAN8WF{Sa;Zv+bnh!hb_{d3HnBIb$wyEwio2TS%28AtTh(A-UV8=~=tI5;1oK3C>07xqN{BhyYh zmuGBNc5Jb2U~V#hV{hk1`tKL*GCq?1Nj&D>%;WJK{$4o6HA|I^oObq&$8XJ88RJ;y zTuXo1cFauqgl*Yxn$MW~lFDLp<8r=bRm^UB%LbP1I>UYj^di0JqFbyTb64sL+P{?c zZ>&4@BHJ!G$4=@8InR#@t~J?OZOfEhJK}W2?bq7MWB%Iq)E%t%8PP7R(>Kw6+RT5h zTBV*S{l&OsC7owJp9-JIzNB-4OP?9~LcNG}(XO4alrxUv?wnb98*D*oZ_*PSR^}jl z#_C^5F6Lgl{)FIWt}pE^duyCePT89>Tlr%_>cF(dX#P`^&B=qD(?q)rSL(l|e^9pZ zdwn%?R&|}rU6Hd#@yG+#4D0Bq{cU}-@DX+4SGGIIJH$LOHt0d?=wwh~d^63+z{|o(ve&r*cV)}#6%=;{zw&muDjG3VSf&KPIS4+RGhQXY0Q{WP8tM*kkiS)!Xa1`2gE>-c~?+WkMI%-74EL*4rlPHNNfm zJ#$<0E%na$MS3acdFnZSnP?MIvr`YIkGQmx+O<6=ub?CC^GnsNw}<}pENfb48|koS zEEPJOIK);cay$E1)|H<1vCy#uCv!NIx{_-=_1l-p-%PEOoH<*L+1lxUM$ETMr|j>s z|K}z03&}WHzlZHzBi4?w(;T*RrVst*DSrQzrM%;?Vup$9G~uh{cueE_)+Mq0abrsV zSpEsm=3K`$dkvna|DqgQj2q|Xj*4;YNoGE(pOxnH_RBdb^{02Bn-_f1&GQfR;2(7J z-W7shYRuGus<4Z2Ii}97cK`+YxKyYf**5pAdA4785 zgXA(F^6QfaseH(Pmpq96tQQNr_0S+Sih0I0igCJmpqn#J+}_ilF=;n#>$RBUn2TeK ze>U&2nAR!1QZb`k##CIzR9wX|NWF^YKiDq*-$^aiQf#N}t<(yxK}gNX`mzT<(}Q<) z^UTRn{=Qz6+172(YL@)toPJ!hQoCY$CFYDKHA=;gav49$Wqid|OoKBinY#3)=v#v` z<$3Zmk|(5$BJUDhdpjj!>7>8lQj4;eh#WMjQOq-LkJc-F7)SUhuIiOswM*Gm4yJc{ ztu5$CUwr8Z`=`IdCNvHAFdwN`DrS_+m{BfcDz4&aQm?Yk2)&BT*0%{AmO3fznQem0 z?;sZ9A+ zxQ{ACAM`~(^hXf}U?2wJN(_b@#TbGTet4I0i&c(cxC+BD0u{I#BQXj;!!;O8<%hY#1{I@F*Re$?@Ue*%ICfgit^h(=686DH$&+<>3sMua2(;}26X71J=C z+r^pO?KR^jZf0)AEog<9akDW8bGh+r$9&v|+p&OK);sV^+=;umZaT1#+t0;V!tc0c z9It!PiRD{4`MaeU@g}1OY$LXz(#DsW^BR3cm$8)F+9#Mx+k#}+prx^ zVF#YZPVD0T@mcO4cViDVZ7=rW1?_svL#Sg1c4uzF}x3SBd(?oxAbrstli5 zM#PImp8hD7pNij|yJ`>X5&4Sx$(l_2-Q=wdvE$U`eI z$vCpC;?gGaW*_uioWrzyPS2mdIFE91zQ&m__eacxc-!Lbh|Pg$pU8d@?PkA64vkae z)!jF$tztawLuC7V#F2d{+sSu5%8M9k4DCaD?(aC*VmDJpWspb>n)a!O)0l}{xtj^>*cwa~?A{G-%h^53b;vV8& zqLWxotRU_qRucCU4-l(}2Z`0h8e%Q6j#y7TL~I~75}Sz4#1`UV;t}Fe;xXcJ;tAqO zVk@zY*iJk}>>!>db`raYXNYHs=ZM|J9^!doFR_n!f!I$RAPy2Q5-$-i6NiYyL>KW2 X@hb5e@j7vY_`m+8{UH1QejfC1iyIH4 diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00075.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00075.pmf deleted file mode 100644 index 1c7edf6536a12ea1a333c6140927356b64690c43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5724 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 diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00076.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00076.pmf deleted file mode 100644 index 2f077f40f62db0b74fffcb1069d4d316f74020b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5716 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 OUw_2AM*qX_gZ>4l11vEB diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00079.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00079.pmf deleted file mode 100644 index 45d6906baa9805ce4b02fdd662195268f965ddc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5656 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 diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00082.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00082.pmf deleted file mode 100644 index 2000dc057a80f5d9733eeeb1cac8ea325e14c02a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5660 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 diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00086.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00086.pmf deleted file mode 100644 index b7586ca61afa1edfe38954ab63e661c67809b964..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5716 zcmdUzdvH@#9>>48rH`~tlk}CeNQk9aP=ifru@$hyHndsOG$iQ@AK@X@3Rs{bXr(+A zE1;q%3Mh(#R0LE6c_`|->g>qwILZv`j=Ly2&MxCyS_Opc_ndogC^Ksv-M{uuKKK6a z@BYs3{LbV4a?Vv+rp`(Npb#V35D(1fHBP&~f!C}70Dtm%vVqTe0M)A$-Zxy}GcLf^k1jn?$MS$n#|7w><3^n)k?uLin6~L2~}i(|5$w&C@C3 zSi$%b5sm&hgF+@XNTHC&YxZ#pLs?w8n9LQA92Axa%>!hs5cZI_gzy*kX&QyNEK)+- z6qbtf(DP5V6q=|}-lV{4coxhbUsvz13O1v%t~O9#9drk3ypq0} z?nuy6?G1(5gx2=9va-_h*aMHhvaU*$bfMB6h}6g?ph*|T*D(xtsM5n$NV&?R-l%QG zgnD?|%VD&na`I|ZC0M-`P7IkotlE>wBO zyX$@7h-d-=mA;6qUv~GvVMYFd!`fZ5hK?w1xvi+ZXiABz$Q4Gt-#ek+;|_)DD!o-G zA6ZmV>~fVBk8+i9=mO0_F+ArahpW8YHNw$1V%`J;bwRi2?GX;Q&*zY3LJs!3C)nVr z8o}bVwW2pFs~xg=4yU7Bv}LrTVcMMb*0x(5t`Wr}iox;o1RLvuRr=6y3VDJ)uiq01 z)P=mF2F9za!kkf8`#qr$n;i;!{W1dio{Cwh9*!02EH{t{G{_sPS~Vf`Tl(W zU{~@Q-R`$tMK0j+hB%2gK^*a~B|VqgW<7vgm~Sj;e$z4Qf$x}05HdeyDYPC?tb9i{ zn-eUBxkuueLlWZhrrSGh>y!rSjd_;59eUZMQNoWXt303bj*t`U=%?H8mM+I_H?0&t zd-u`L^xUuPomop{3=@+BscrF%3750%l$6rcHp7IUj_R?+FBGvU15;+}abml9vhX8g zPBm_lvT)RG9-_-iL;5k@2CK|@F}-5)QLdFf9p=koHaktnrJin-ZKln-Ug=|__Lb>` zC>t+hHk}YLCw?(-X1+g5q(LOi&;8imnLhmF+vn?*h;fRkLXBA|xZs$*Gv|To(}kyd^8F*^jf;N|1Ys_i1|O6S(N#b zW>aoGDD(+Y`aGQTSSKh69>#tb!ne4n)`=D){wx9$^Lt^Z_MHJlK5^V5%_7IfgWI8TE%{|9p`?FQ(sX{ye7tBz?ZFS6s%utn0Awj*rbY zOQCsT(sh)_T1HEIib|!yU|4R;7ba&q5|0X5+N`$RsoUV2BD`Xk-ob(p9-6GU+e@*+uRFT`0%$$(4%Wy06 z!+z1Xao4BK()IBdr8DN7vaiO95+Zl0HsbF5{A1pnw2WmvCdQWC8|`AhIV}$Mk9@~5 z+x)JjFl)x?4_MG=K198o&uYE4kCHeC;*OXm3HtlmsL$Qm%eKdV zo_>w6IlEc2=O7+>ltol*&l@@cKJc(;fZ*%NqZc%fNwMWJ&^Up8IIc4W;a(w4x>k%m* z&z_xgRC~v@d?n@#WR6mO_AjeG@nG^1=ARyxgkmv_)Me~242j7X8#)ZjX)lg%&2~$n zEm_2%<|xJ~4w<90di#~tcB%Gi31t~~RqaAYZA&e6 zWhloL7>zL)iz`uqad6`*RH6zVj7K$U;Kd(sHGHUrA9Y;lPe2eMaM6nfG@=R3n22j| zEw01$h(!O#1CuZrQ!tg=#A)2+-H4meikmSVGcc1Q(1uxj59Xj9w_+}C!#r+PZ^s?z zz@6Ovbz&hFVKJ6qDVE_b+>Pb92VL9_uE0vH!hN_O4`4MO#6wtvhw%v3;!!+?by$xL zcpOh)Bc8-l*o3F?3^rp6p2b#lbKkg)`^N3qft`2(FXAQa!pqo=J$MCsu@C!k0I%XT z9K`FfeeE0PhNRANIua{0m>~gT60ksWOPu^Y_1;Z}R0l z$eA$vH_QZm{Pj5dy8_d4#sH#CH{DIxyF%uTeU$;(y*u#5zxWMH2t@StOfq zZZQLbIS|Z(U>*cBA(#unYzXE<_4|^8*9(bQ_YNTiWGK0a6p~?NI1#(hO9 z!Hfy!OfYMLc~ku;Rl;j28AZ6`Vh#nfC_h$_(PRu6ORgjpWE^pmt4JlOA|Aqd#SF_A zf^Y@KJPT%8t}2OG$M}iZwFbxp5+orKCiSF&G?FILOeT_R$hCz3EX>D1giIon$rLh` zh*i-v(n7=v<0jHdZYEqgGS`CH7V;mpjn`R3tUkmG+)i#KbIEOF9+^*WCwGtzawl0p zI>|z^h%6>c$WpS5+(qst%gH^Yi`+|Akd>@9d-DD4W gh3qB!$bNEwyh>gp2g&Q?4f20|7|)CT*S`n-2SIfa<^TWy diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00087.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00087.pmf deleted file mode 100644 index 82f054999a47d3768a254b79fca8c6b31643224c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5752 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 TWIs7T{;z+wUu6HEzX$yj(_7ox diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00090.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00090.pmf deleted file mode 100644 index 895cfe26ae18ce74bdd96a13ee4d4141a47a9a9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5736 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 diff --git a/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00091.pmf b/hw/xprint/config/C/print/models/HPLJ4family/fonts/9nb00091.pmf deleted file mode 100644 index 3bdcae4ba33d7453c1e4c6bba4cbd68958e11025..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5744 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 X@hb5e@j7vY_`m+8{UH1QejfC1iyIH4 diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00075.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00075.pmf deleted file mode 100644 index 1c7edf6536a12ea1a333c6140927356b64690c43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5724 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 diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00076.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00076.pmf deleted file mode 100644 index 2f077f40f62db0b74fffcb1069d4d316f74020b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5716 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 OUw_2AM*qX_gZ>4l11vEB diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00079.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00079.pmf deleted file mode 100644 index 45d6906baa9805ce4b02fdd662195268f965ddc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5656 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 diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00082.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00082.pmf deleted file mode 100644 index 2000dc057a80f5d9733eeeb1cac8ea325e14c02a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5660 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 diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00086.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00086.pmf deleted file mode 100644 index b7586ca61afa1edfe38954ab63e661c67809b964..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5716 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 diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00087.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00087.pmf deleted file mode 100644 index 82f054999a47d3768a254b79fca8c6b31643224c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5752 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 TWIs7T{;z+wUu6HEzX$yj(_7ox diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00090.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00090.pmf deleted file mode 100644 index 895cfe26ae18ce74bdd96a13ee4d4141a47a9a9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5736 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 diff --git a/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00091.pmf b/hw/xprint/config/C/print/models/HPDJ1600C/fonts/9nb00091.pmf deleted file mode 100644 index 3bdcae4ba33d7453c1e4c6bba4cbd68958e11025..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5744 zcmdUzdvFv*9>>3%gxw^Y-JN|U;UTU(1kueUA&>xSSdt~#BiV%PhKGWYrv?H60t5vV zLXd}`AOS%GL=g}bR33sL0wq;=9-N-&U5QmvhZn^Xd?1B~n4SA}&rTBS>h9|FuS?}K z^PQf4{JN+6yVGNsJYj|jfPq-Zp;%xZ&oR;Ki9Dyr0sNQu;}d`eUU;I{AFyB}3l7%r zvwW2eSQNcJ&Fk3?UNE1ieq{m4Ke29qH|l#+Xds3cQJ zw;&I5NWw`T771~Qht;}xhQe}~hwY-&Zt^NwY~@LAH@_kOfj6GSVjRc`Z4Q__?Z z%DIzf)nKGQP*51w(uP!5O+={37YuWlLjLf`Kz_JTyOmcxed46)HIpX7m!Dq|3Xd-G zYd26D809aj2nFu(qqHOt3~RE?A1Wy-4+lzu6{FDZVsyI;gi3vRfnWh2j&Fp&%va#A zkS!vw&{xLhE6V%@fl!#esH~~Z$>}$s^@cx~SCTJEW+2a3T2UzbfKj>_TEZ}Vp*%l3 zB6YrByU;p|;pM*kXj9@gyzNKH8yy+17!7Zwx3%Y9Z%%ejrZ=-+dO8nT(L<@XZ{PI3 z>E39F-VEgXhx*Ek!WE(yD9tOXkRixH@7y~**tvI2#*Ch6nUm-CujxBJD