summaryrefslogtreecommitdiffstats
path: root/source/t/xfig
diff options
context:
space:
mode:
author Patrick J Volkerding <volkerdi@slackware.com>2009-08-26 10:00:38 -0500
committer Eric Hameleers <alien@slackware.com>2018-05-31 22:41:17 +0200
commit5a12e7c134274dba706667107d10d231517d3e05 (patch)
tree55718d5acb710fde798d9f38d0bbaf594ed4b296 /source/t/xfig
downloadcurrent-5a12e7c134274dba706667107d10d231517d3e05.tar.gz
current-5a12e7c134274dba706667107d10d231517d3e05.tar.xz
Slackware 13.0slackware-13.0
Wed Aug 26 10:00:38 CDT 2009 Slackware 13.0 x86_64 is released as stable! Thanks to everyone who helped make this release possible -- see the RELEASE_NOTES for the credits. The ISOs are off to the replicator. This time it will be a 6 CD-ROM 32-bit set and a dual-sided 32-bit/64-bit x86/x86_64 DVD. We're taking pre-orders now at store.slackware.com. Please consider picking up a copy to help support the project. Once again, thanks to the entire Slackware community for all the help testing and fixing things and offering suggestions during this development cycle. As always, have fun and enjoy! -P.
Diffstat (limited to 'source/t/xfig')
-rw-r--r--source/t/xfig/slack-desc19
-rw-r--r--source/t/xfig/xfig-3.2.4-mkstemp.diff331
-rw-r--r--source/t/xfig/xfig.3.2.3d-international-std-fonts.diff49
-rw-r--r--source/t/xfig/xfig.3.2.3d-xcolor.diff10
-rw-r--r--source/t/xfig/xfig.3.2.3d-xim.diff33
-rw-r--r--source/t/xfig/xfig.3.2.4-gcc4.diff11
-rw-r--r--source/t/xfig/xfig.3.2.4-locale.diff117
-rw-r--r--source/t/xfig/xfig.3.2.4-null.diff64
-rw-r--r--source/t/xfig/xfig.3.2.4-quiet.diff183
-rw-r--r--source/t/xfig/xfig.3.2.4-urw-fonts.diff152
-rw-r--r--source/t/xfig/xfig.3.2.4.diff530
-rwxr-xr-xsource/t/xfig/xfig.SlackBuild98
-rw-r--r--source/t/xfig/xfig.docs.location.diff11
-rw-r--r--source/t/xfig/xfig.fig.ad.diff30
-rw-r--r--source/t/xfig/xfig.no.pdf.ref.diff13
-rw-r--r--source/t/xfig/xfig.no.xfig_ref_en.pdf.diff10
16 files changed, 1661 insertions, 0 deletions
diff --git a/source/t/xfig/slack-desc b/source/t/xfig/slack-desc
new file mode 100644
index 000000000..85d1fefde
--- /dev/null
+++ b/source/t/xfig/slack-desc
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description. Line
+# up the first '|' above the ':' following the base package name, and the '|'
+# on the right side marks the last column you can put a character in. You must
+# make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':'.
+
+ |-----handy-ruler------------------------------------------------------|
+xfig: xfig (interactive drawing tool)
+xfig:
+xfig: This package contains the binary for xfig, an interactive drawing tool
+xfig: under X. Xfig can create fig, epsf, and LaTeX files with various
+xfig: options. You also have to install the transfig package (transfig.tgz)
+xfig: so that xfig can export fig files as epsf and LaTeX files. This
+xfig: package also contains a set of basic examples of fig files.
+xfig:
+xfig:
+xfig:
+xfig:
diff --git a/source/t/xfig/xfig-3.2.4-mkstemp.diff b/source/t/xfig/xfig-3.2.4-mkstemp.diff
new file mode 100644
index 000000000..cf6bf2283
--- /dev/null
+++ b/source/t/xfig/xfig-3.2.4-mkstemp.diff
@@ -0,0 +1,331 @@
+--- xfig.3.2.4/f_readeps.c
++++ xfig.3.2.4/f_readeps.c 2003-05-06 12:07:54.000000000 +0200
+@@ -258,7 +258,7 @@
+ char buf[300];
+ FILE *tmpfp, *pixfile, *gsfile;
+ char *psnam, *driver;
+- int status, wid, ht, nbitmap;
++ int status, wid, ht, nbitmap, fd;
+ char tmpfile[PATH_MAX],
+ pixnam[PATH_MAX],
+ errnam[PATH_MAX],
+@@ -274,8 +274,12 @@
+ /* re-open the pipe */
+ close_picfile(file, filetype);
+ file = open_picfile(file, &filetype, PIPEOK, pixnam);
+- sprintf(tmpfile, "%s/%s%06d", TMPDIR, "xfig-eps", getpid());
+- if ((tmpfp = fopen(tmpfile, "wb")) == NULL) {
++ snprintf(tmpfile, sizeof(tmpfile), "%s/xfig-eps.XXXXXX", TMPDIR);
++ if ((fd = mkstemp(tmpfile)) == -1 || (tmpfp = fdopen(fd, "wb")) == NULL) {
++ if (fd != -1) {
++ unlink(tmpfile);
++ close(fd);
++ }
+ file_msg("Couldn't open tmp file %s, %s", tmpfile, strerror(errno));
+ return False;
+ }
+@@ -284,9 +288,21 @@
+ fclose(tmpfp);
+ }
+ /* make name /TMPDIR/xfig-pic.pix */
+- sprintf(pixnam, "%s/%s%06d.pix", TMPDIR, "xfig-pic", getpid());
++ snprintf(pixnam, sizeof(pixnam), "%s/xfig-pic.XXXXXX", TMPDIR);
++ if ((fd = mkstemp(pixnam)) == -1) {
++ file_msg("Couldn't open tmp file %s, %s", pixnam, strerror(errno));
++ return False;
++ }
++ close(fd);
++
+ /* and file name for any error messages from gs */
+- sprintf(errnam, "%s/%s%06d.err", TMPDIR, "xfig-pic", getpid());
++ snprintf(errnam, sizeof(errnam), "%s/xfig-picerr.XXXXXX", TMPDIR);
++ if ((fd = mkstemp(errnam)) == -1) {
++ file_msg("Couldn't open tmp file %s, %s", errnam, strerror(errno));
++ return False;
++ }
++ close(fd);
++
+ /* generate gs command line */
+ /* for monochrome, use pbm */
+ if (tool_cells <= 2 || appres.monochrome) {
+--- xfig.3.2.4/f_readgif.c
++++ xfig.3.2.4/f_readgif.c 2003-05-06 11:56:53.000000000 +0200
+@@ -75,7 +75,7 @@
+ char buf[BUFLEN],pcxname[PATH_MAX];
+ FILE *giftopcx;
+ struct Cmap localColorMap[MAX_COLORMAP_SIZE];
+- int i, stat, size;
++ int i, stat, size, fd;
+ int useGlobalColormap;
+ unsigned int bitPixel, red, green, blue;
+ unsigned char c;
+@@ -172,7 +172,13 @@
+ /* now call giftopnm and ppmtopcx */
+
+ /* make name for temp output file */
+- sprintf(pcxname, "%s/%s%06d.pix", TMPDIR, "xfig-pcx", getpid());
++ snprintf(pcxname, sizeof(pcxname), "%s/xfig-pcx.XXXXXX", TMPDIR);
++ if ((fd = mkstemp(pcxname)) == -1) {
++ file_msg("Cannot create temporary file\n");
++ return FileInvalid;
++ }
++ close(fd);
++
+ /* make command to convert gif to pcx into temp file */
+ sprintf(buf, "giftopnm | ppmtopcx > %s 2> /dev/null", pcxname);
+ if ((giftopcx = popen(buf,"w" )) == 0) {
+--- xfig.3.2.4/f_readppm.c
++++ xfig.3.2.4/f_readppm.c 2003-05-06 11:56:53.000000000 +0200
+@@ -33,10 +33,16 @@
+ {
+ char buf[BUFLEN],pcxname[PATH_MAX];
+ FILE *giftopcx;
+- int stat, size;
++ int stat, size, fd;
+
+ /* make name for temp output file */
+- sprintf(pcxname, "%s/%s%06d.pix", TMPDIR, "xfig-pcx", getpid());
++ snprintf(pcxname, sizeof(pcxname), "%s/xfig-pcx.XXXXXX", TMPDIR);
++ if ((fd = mkstemp(pcxname)) == -1) {
++ file_msg("Cannot open temp file %s: %s\n", pcxname, strerror(errno));
++ return FileInvalid;
++ }
++ close(fd);
++
+ /* make command to convert gif to pcx into temp file */
+ sprintf(buf, "ppmtopcx > %s 2> /dev/null", pcxname);
+ if ((giftopcx = popen(buf,"w" )) == 0) {
+--- xfig.3.2.4/f_readtif.c
++++ xfig.3.2.4/f_readtif.c 2003-05-06 11:56:53.000000000 +0200
+@@ -32,11 +32,16 @@
+ {
+ char buf[2*PATH_MAX+40],pcxname[PATH_MAX];
+ FILE *tiftopcx;
+- int stat;
++ int stat, fd;
+
+ /* make name for temp output file */
+- sprintf(pcxname, "%s/%s%06d.pix", TMPDIR, "xfig-pcx", getpid());
+-
++ snprintf(pcxname, sizeof(pcxname), "%s/xfig-pcx.XXXXXX", TMPDIR);
++ if ((fd = mkstemp(pcxname)) == -1) {
++ file_msg("Cannot open temp file %s: %s\n", pcxname, strerror(errno));
++ return FileInvalid;
++ }
++ close(fd);
++
+ /* make command to convert tif to pnm then to pcx into temp file */
+ /* for some reason, tifftopnm requires a file and can't work in a pipe */
+ sprintf(buf, "tifftopnm %s 2> /dev/null | ppmtopcx > %s 2> /dev/null",
+--- xfig.3.2.4/f_util.c
++++ xfig.3.2.4/f_util.c 2003-05-06 12:13:22.000000000 +0200
+@@ -902,14 +902,20 @@
+ char *name;
+ {
+ char line[RC_BUFSIZ+1], *tok;
++ int fd;
+
+ /* make a temp filename in the user's home directory so we
+ can just rename it to .xfigrc after creating it */
+- sprintf(tmpname, "%s/%s%06d", userhome, "xfig-xfigrc", getpid());
+- tmpf = fopen(tmpname,"wb");
+- if (tmpf == 0) {
+- file_msg("Can't make temporary file for .xfigrc - error: %s",strerror(errno));
+- return -1;
++ snprintf(tmpname, sizeof(tmpname), "%s/xfig-xfigrc.XXXXXX", userhome);
++
++ if ((fd = mkstemp(tmpname)) == -1 || (tmpf = fdopen(fd, "wb")) == NULL) {
++ file_msg("Can't make temporary file for .xfigrc - error: %s",
++ strerror(errno));
++ if (fd != -1) {
++ unlink(tmpname);
++ close(fd);
++ }
++ return -1;
+ }
+ /* read the .xfigrc file and write all to temp file except file names */
+ xfigrc = fopen(xfigrc_name,"r");
+--- xfig.3.2.4/main.c
++++ xfig.3.2.4/main.c 2003-05-06 11:56:53.000000000 +0200
+@@ -621,8 +621,10 @@
+ update_figs = False;
+
+ /* get the TMPDIR environment variable for temporary files */
+- if ((TMPDIR = getenv("XFIGTMPDIR"))==NULL)
+- TMPDIR = "/tmp";
++ if ((TMPDIR = getenv("XFIGTMPDIR"))==NULL) {
++ if ((TMPDIR = getenv("TMPDIR")) == NULL)
++ TMPDIR = "/tmp";
++ }
+
+ /* first check args to see if user wants to scale the figure as it is
+ read in and make sure it is a resonable (positive) number */
+@@ -1631,7 +1633,14 @@
+ if (userhome != NULL && *strcpy(cut_buf_name, userhome) != '\0') {
+ strcat(cut_buf_name, "/.xfig");
+ } else {
+- sprintf(cut_buf_name, "%s/xfig%06d", TMPDIR, getpid());
++ int fd;
++ sprintf(cut_buf_name, "%s/xfig.XXXXXX", TMPDIR);
++ if ((fd = mkstemp(cut_buf_name)) == -1) {
++ fprintf(stderr, "Can't create temporary file for cut_buff: %s\n",
++ strerror(errno));
++ exit(0);
++ }
++ close(fd);
+ }
+ }
+
+--- xfig.3.2.4/mode.c
++++ xfig.3.2.4/mode.c 2003-05-06 11:56:53.000000000 +0200
+@@ -93,7 +93,7 @@
+
+ int cur_exp_lang; /* gets initialized in main.c */
+ Boolean batch_exists = False;
+-char batch_file[32];
++char batch_file[PATH_MAX];
+
+ /*******************************************************************/
+ /* If you change the order of the lang_items[] you must change the */
+--- xfig.3.2.4/u_print.c
++++ xfig.3.2.4/u_print.c 2003-05-06 12:18:47.000000000 +0200
+@@ -85,9 +85,16 @@
+ char syspr[2*PATH_MAX+200];
+ char tmpfile[PATH_MAX];
+ char *name;
++ int fd;
+
+- sprintf(tmpfile, "%s/%s%06d", TMPDIR, "xfig-print", getpid());
++ snprintf(tmpfile, sizeof(tmpfile), "%s/xfig-print.XXXXXX", TMPDIR);
+ warnexist = False;
++ if ((fd = mkstemp(tmpfile)) == -1) {
++ file_msg("Can't open temp file %s: %s\n", tmpfile, strerror(errno));
++ return;
++ }
++ close(fd);
++
+ init_write_tmpfile();
+ if (write_file(tmpfile, False)) {
+ end_write_tmpfile();
+@@ -166,14 +173,21 @@
+ char tmp_name[PATH_MAX];
+ char tmp_fig_file[PATH_MAX];
+ char *outfile, *name, *real_lang;
++ int fd;
+
+ /* if file exists, ask if ok */
+ if (!ok_to_write(file, "EXPORT"))
+ return (1);
+
+- sprintf(tmp_fig_file, "%s/%s%06d", TMPDIR, "xfig-fig", getpid());
+- /* write the fig objects to a temporary file */
++ snprintf(tmp_fig_file, sizeof(tmp_fig_file), "%s/xfig-fig.XXXXXX", TMPDIR);
+ warnexist = False;
++ if ((fd = mkstemp(tmp_fig_file)) == -1) {
++ file_msg("Can't open temp file %s: %s\n", tmp_fig_file,
++ strerror(errno));
++ return 1;
++ }
++ close(fd);
++
+ init_write_tmpfile();
+ if (write_file(tmp_fig_file, False)) {
+ end_write_tmpfile();
+@@ -491,10 +505,16 @@
+ char errfname[PATH_MAX];
+ FILE *errfile;
+ char str[400];
+- int status;
++ int status, fd;
+
+ /* make temp filename for any errors */
+- sprintf(errfname, "%s/xfig-export%06d.err", TMPDIR, getpid());
++ snprintf(errfname, sizeof(errfname), "%s/xfig-export.XXXXXX", TMPDIR);
++ if ((fd = mkstemp(errfname)) == -1) {
++ file_msg("Can't open temp file %s: %s\n", errfname, strerror(errno));
++ return 1;
++ }
++ close(fd);
++
+ /* direct any output from fig2dev to this file */
+ strcat(command, " 2> ");
+ strcat(command, errfname);
+--- xfig.3.2.4/w_print.c
++++ xfig.3.2.4/w_print.c 2003-05-06 12:20:46.000000000 +0200
+@@ -289,9 +289,10 @@
+ Widget w;
+ {
+ FILE *infp,*outfp;
+- char tmp_exp_file[32];
++ char tmp_exp_file[PATH_MAX];
+ char str[255];
+ char backgrnd[10], grid[80];
++ int fd;
+
+ if (writing_batch || emptyfigure_msg(print_msg))
+ return;
+@@ -300,11 +301,20 @@
+ /* this could happen if the user presses the button too fast */
+ writing_batch = True;
+
+- /* make a temporary name to write the batch stuff to */
+- sprintf(batch_file, "%s/%s%06d", TMPDIR, "xfig-batch", getpid());
+ /* make a temporary name to write this figure to */
+- sprintf(tmp_exp_file, "%s/%s%06d", TMPDIR, "xfig-exp", getpid());
+- batch_exists = True;
++ snprintf(tmp_exp_file, sizeof(tmp_exp_file), "%s/xfig-exp.XXXXXX",
++ TMPDIR);
++
++ if (batch_exists != True) {
++ /* make a temporary name to write the batch stuff to */
++ sprintf(batch_file, "%s/xfig-batch.XXXXXX", TMPDIR);
++ if ((fd = mkstemp(batch_file)) == -1) {
++ file_msg("Error creating temporary file");
++ return;
++ }
++ close(fd);
++ batch_exists = True;
++ }
+ if (!print_popup)
+ create_print_panel(w);
+
+@@ -317,6 +327,12 @@
+ /* make a #rrggbb string from the background color */
+ make_rgb_string(export_background_color, backgrnd);
+
++ if ((fd = mkstemp(tmp_exp_file)) == -1) {
++ file_msg("Error creating temporary file");
++ return;
++ }
++ close(fd);
++
+ /* get grid params and assemble into fig2dev parm */
+ get_grid_spec(grid, print_grid_minor_text);
+
+--- xfig.3.2.4/w_srchrepl.c
++++ xfig.3.2.4/w_srchrepl.c 2003-05-06 11:56:53.000000000 +0200
+@@ -795,7 +795,7 @@
+ char *cmd;
+ char str[300];
+ FILE *fp;
+- int len, i;
++ int len, i, fd;
+ Boolean done = FALSE;
+ static int lines = 0;
+
+@@ -811,9 +811,12 @@
+ }
+ lines = 0;
+
+- sprintf(filename, "%s/xfig-spell.%d", TMPDIR, (int)getpid());
+- fp = fopen(filename, "w");
+- if (fp == NULL) {
++ snprintf(filename, sizeof(filename), "%s/xfig-spell.XXXXXX", TMPDIR);
++ if ((fd = mkstemp(filename)) == -1 || (fp = fdopen(fd, "w")) == NULL) {
++ if (fd != -1) {
++ unlink(filename);
++ close(fd);
++ }
+ file_msg("Can't open temporary file: %s: %s\n", filename, strerror(errno));
+ } else {
+ /* locate all text objects and write them to file fp */
diff --git a/source/t/xfig/xfig.3.2.3d-international-std-fonts.diff b/source/t/xfig/xfig.3.2.3d-international-std-fonts.diff
new file mode 100644
index 000000000..5dbdc2e6e
--- /dev/null
+++ b/source/t/xfig/xfig.3.2.3d-international-std-fonts.diff
@@ -0,0 +1,49 @@
+diff -ru xfig.3.2.3d.orig/main.c xfig.3.2.3d/main.c
+--- xfig.3.2.3d.orig/main.c 2001-01-25 22:49:19.000000000 +0100
++++ xfig.3.2.3d/main.c 2003-05-09 11:58:41.000000000 +0200
+@@ -259,18 +259,36 @@
+ XtOffset(appresPtr, always_use_fontset), XtRBoolean, (caddr_t) & false},
+ {"fixedFontSet", "FontSet", XtRFontSet, sizeof(XFontSet),
+ XtOffset(appresPtr, fixed_fontset), XtRString,
+- (caddr_t) "-*-times-medium-r-normal--16-*-*-*-*-*-*-*,"
+- "-*-*-medium-r-normal--16-*-*-*-*-*-*-*,*--16-*" },
++ (caddr_t) "-URW-Nimbus Roman No9 L-medium-r-normal--34-*-*-*-*-*-*-*,"
++ "-kochi-mincho-medium-r-normal--34-*-*-*-*-*-jisx0208.1983-0,"
++ "-baekmukttf-batang-medium-r-normal--34-*-*-*-*-*-ksc5601.1987-0,"
++ "-*-times-medium-r-normal--34-*-*-*-*-*-*-*,"
++ "-*-*-medium-r-normal--34-*-*-*-*-*-*-*,*--34-*"
++ "-*-times-medium-r-normal--16-*-*-*-*-*-*-*,"
++ "-*-*-medium-r-normal--16-*-*-*-*-*-*-*,*--16-*"
++ },
+ {"normalFontSet", "NormalFontSet", XtRFontSet, sizeof(XFontSet),
+ XtOffset(appresPtr, normal_fontset), XtRString,
+- (caddr_t) "-*-times-medium-r-normal--16-*-*-*-*-*-*-*,"
+- "-*-*-medium-r-normal--16-*-*-*-*-*-*-*,"
+- "-*-*-*-r-*--16-*-*-*-*-*-*-*" },
++ (caddr_t) "-URW-Nimbus Roman No9 L-medium-r-normal--34-*-*-*-*-*-*-*,"
++ "-kochi-mincho-medium-r-normal--34-*-*-*-*-*-jisx0208.1983-0,"
++ "-baekmukttf-batang-medium-r-normal--34-*-*-*-*-*-ksc5601.1987-0,"
++ "-*-times-medium-r-normal--34-*-*-*-*-*-*-*,"
++ "-*-*-medium-r-normal--34-*-*-*-*-*-*-*,"
++ "-*-*-*-r-*--34-*-*-*-*-*-*-*"
++ "-*-times-medium-r-normal--16-*-*-*-*-*-*-*,"
++ "-*-*-medium-r-normal--16-*-*-*-*-*-*-*,*--16-*"
++ },
+ {"boldFontSet", "BoldFontSet", XtRFontSet, sizeof(XFontSet),
+ XtOffset(appresPtr, bold_fontset), XtRString,
+- (caddr_t) "-*-times-bold-r-normal--16-*-*-*-*-*-*-*,"
+- "-*-*-bold-r-normal--16-*-*-*-*-*-*-*,"
+- "-*-*-*-r-*--16-*-*-*-*-*-*-*" },
++ (caddr_t) "-URW-Nimbus Roman No9 L-bold-r-normal--34-*-*-*-*-*-*-*,"
++ "-kochi-gothic-medium-r-normal--34-*-*-*-*-*-jisx0208.1983-0,"
++ "-baekmukttf-dotum-medium-r-normal--34-*-*-*-*-*-ksc5601.1987-0,"
++ "-*-times-bold-r-normal--34-*-*-*-*-*-*-*,"
++ "-*-*-bold-r-normal--34-*-*-*-*-*-*-*,"
++ "-*-*-*-r-*--34-*-*-*-*-*-*-*"
++ "-*-times-medium-r-normal--16-*-*-*-*-*-*-*,"
++ "-*-*-medium-r-normal--16-*-*-*-*-*-*-*,*--16-*"
++ },
+ {"fontSetSize", "FontSetSize", XtRInt, sizeof(int),
+ XtOffset(appresPtr, fontset_size), XtRImmediate, (caddr_t)0 },
+ {"inputStyle", "InputStyle", XtRString, sizeof(char *),
+
diff --git a/source/t/xfig/xfig.3.2.3d-xcolor.diff b/source/t/xfig/xfig.3.2.3d-xcolor.diff
new file mode 100644
index 000000000..11be8a56e
--- /dev/null
+++ b/source/t/xfig/xfig.3.2.3d-xcolor.diff
@@ -0,0 +1,10 @@
+--- w_color.c
++++ w_color.c
+@@ -1288,6 +1288,7 @@
+
+ create_cell(indx, color)
+ int indx;
++ XColor color;
+ {
+ char labl[5];
+
diff --git a/source/t/xfig/xfig.3.2.3d-xim.diff b/source/t/xfig/xfig.3.2.3d-xim.diff
new file mode 100644
index 000000000..918d00d9f
--- /dev/null
+++ b/source/t/xfig/xfig.3.2.3d-xim.diff
@@ -0,0 +1,33 @@
+--- xfig.3.2.3d/d_text.c
++++ xfig.3.2.3d/d_text.c
+@@ -1485,6 +1485,7 @@
+ int i;
+ XVaNestedList preedit_att, status_att;
+ XPoint spot;
++ char *modifier_list;
+
+ preferred_style = style_notuseful;
+ if (strncasecmp(appres.xim_input_style, "OverTheSpot", 3) == 0)
+@@ -1501,6 +1502,10 @@
+ if (preferred_style == style_notuseful) return;
+
+ if (appres.DEBUG) fprintf(stderr, "initialize_input_method()...\n");
++
++ if((modifier_list = XSetLocaleModifiers("")) == NULL) {
++ /* printf("Warning: XSetLocaleModifiers() failed.\n"); */
++ }
+
+ xim_im = XOpenIM(XtDisplay(w), NULL, NULL, NULL);
+ if (xim_im == NULL) {
+@@ -1517,7 +1522,10 @@
+ if (xim_style == 0) xim_style = style_root;
+ }
+ }
+- if (xim_style != preferred_style) {
++ if (xim_style != preferred_style
++ && *modifier_list != '\0'
++ && ! strstr(modifier_list,"@im=local")
++ && ! strstr(modifier_list,"@im=none")) {
+ fprintf(stderr, "xfig: this input-method doesn't support %s input style\n",
+ appres.xim_input_style);
+ if (xim_style == 0) {
diff --git a/source/t/xfig/xfig.3.2.4-gcc4.diff b/source/t/xfig/xfig.3.2.4-gcc4.diff
new file mode 100644
index 000000000..d8b8597ff
--- /dev/null
+++ b/source/t/xfig/xfig.3.2.4-gcc4.diff
@@ -0,0 +1,11 @@
+--- w_color.c
++++ w_color.c 2005/08/31 10:42:32
+@@ -1057,7 +1057,7 @@
+ {
+ F_compound *c;
+ int i, count;
+- char buf[10];
++ char buf[11];
+
+ /* keep array of counts of each color */
+ for (i=0; i<num_usr_cols; i++)
diff --git a/source/t/xfig/xfig.3.2.4-locale.diff b/source/t/xfig/xfig.3.2.4-locale.diff
new file mode 100644
index 000000000..5bb9f9252
--- /dev/null
+++ b/source/t/xfig/xfig.3.2.4-locale.diff
@@ -0,0 +1,117 @@
+--- main.c
++++ main.c 2006-07-31 17:56:25.000000000 +0200
+@@ -62,6 +62,7 @@
+ #ifdef I18N
+ #include <X11/keysym.h>
+ #include <locale.h>
++#include <langinfo.h>
+ #endif /* I18N */
+
+ /* EXPORTS */
+@@ -709,11 +710,6 @@ main(argc, argv)
+ }
+ }
+
+-#ifdef I18N
+- setlocale(LC_ALL, "");
+- XtSetLanguageProc(NULL, NULL, NULL);
+-#endif /* I18N */
+-
+ /*
+ * save the command line arguments
+ */
+@@ -807,6 +803,10 @@ main(argc, argv)
+ }
+
+ #ifdef I18N
++ if (NULL == strcasestr(nl_langinfo(CODESET),"ANSI") &&
++ NULL == strcasestr(nl_langinfo(CODESET),"ISO-8859-1"))
++ appres.international = True;
++
+ /************************************************************/
+ /* if the international option has been set, set the locale */
+ /************************************************************/
+@@ -1523,6 +1523,11 @@ setup_visual(argc_p, argv, args)
+ */
+ tool = XtAppInitialize (&tool_app, "Fig", options, XtNumber (options), argc_p, argv,
+ (String *) NULL, args, 0);
++#ifdef I18N
++ setlocale(LC_ALL, "");
++ setlocale(LC_NUMERIC, "C");
++ XtSetLanguageProc(tool_app, NULL, NULL);
++#endif /* I18N */
+ /* save important info */
+ tool_d = XtDisplay(tool);
+ tool_s = XtScreen(tool);
+--- u_print.c
++++ u_print.c 2006-11-16 12:45:46.000000000 +0000
+@@ -15,6 +15,7 @@
+ *
+ */
+
++#include <locale.h>
+ #include "fig.h"
+ #include "resources.h"
+ #include "mode.h"
+@@ -75,6 +76,7 @@ char *shell_protect_string(string)
+ return(buf);
+ }
+
++void
+ print_to_printer(printer, backgrnd, mag, print_all_layers, grid, params)
+ char printer[];
+ char *backgrnd;
+@@ -111,6 +113,8 @@ print_to_printer(printer, backgrnd, mag,
+ name = shell_protect_string(cur_filename);
+
+ #ifdef I18N
++ /* set the numeric locale to C so we set decimal points for numbers */
++ setlocale(LC_NUMERIC, "C");
+ sprintf(tmpcmd, "%s %s -L ps -z %s -m %f %s -n %s",
+ fig2dev_cmd, appres.international ? appres.fig2dev_localize_option : "",
+ #else
+@@ -119,6 +123,10 @@ print_to_printer(printer, backgrnd, mag,
+ #endif /* I18N */
+ paper_sizes[appres.papersize].sname, mag/100.0,
+ appres.landscape ? "-l xxx" : "-p xxx", name);
++#ifdef I18N
++ /* reset to original locale */
++ setlocale(LC_NUMERIC, "");
++#endif /* I18N */
+
+ if (appres.correct_font_size)
+ strcat(tmpcmd," -F ");
+@@ -223,9 +231,13 @@ print_to_file(file, lang, mag, xoff, yof
+
+ /* start with the command, language and internationalization, if applicable */
+ #ifdef I18N
++ /* set the numeric locale to C so we set decimal points for numbers */
++ setlocale(LC_NUMERIC, "C");
+ sprintf(prcmd, "%s %s -L %s -m %f ",
+ fig2dev_cmd, appres.international ? appres.fig2dev_localize_option : "",
+ real_lang, mag/100.0);
++ /* reset to original locale */
++ setlocale(LC_NUMERIC, "");
+ #else
+ sprintf(prcmd, "%s -L %s -m %f ", fig2dev_cmd, real_lang, mag/100.0);
+ #endif /* I18N */
+@@ -324,6 +336,8 @@ print_to_file(file, lang, mag, xoff, yof
+ strcat(tmp_name,"_t");
+ /* make it automatically input the postscript/pdf part (-p option) */
+ #ifdef I18N
++ /* set the numeric locale to C so we set decimal points for numbers */
++ setlocale(LC_NUMERIC, "C");
+ sprintf(prcmd, "%s %s -L %s -E %d -p %s -m %f ",
+ fig2dev_cmd, appres.international ? appres.fig2dev_localize_option : "",
+ #else
+@@ -332,6 +346,10 @@ print_to_file(file, lang, mag, xoff, yof
+ #endif /* I18N */
+ !strcmp(lang,"pstex")? "pstex_t": "pdftex_t",
+ appres.encoding, outfile, mag/100.0);
++#ifdef I18N
++ /* reset to original locale */
++ setlocale(LC_NUMERIC, "");
++#endif /* I18N */
+ /* add the -D +list if user doesn't want all layers printed */
+ if (!print_all_layers)
+ strcat(prcmd, layers);
diff --git a/source/t/xfig/xfig.3.2.4-null.diff b/source/t/xfig/xfig.3.2.4-null.diff
new file mode 100644
index 000000000..46120af18
--- /dev/null
+++ b/source/t/xfig/xfig.3.2.4-null.diff
@@ -0,0 +1,64 @@
+--- w_dir.c
++++ w_dir.c 2004-03-22 12:17:21.000000000 +0000
+@@ -126,6 +126,8 @@
+ {
+ XawListReturnStruct *ret_struct = (XawListReturnStruct *) call_data;
+
++ if (!ret_struct)
++ return;
+ strcpy(CurrentSelectionName, ret_struct->string);
+ FirstArg(XtNstring, CurrentSelectionName);
+ if (browse_up) {
+@@ -160,6 +162,8 @@
+ {
+ XawListReturnStruct *ret_struct = (XawListReturnStruct *) call_data;
+
++ if (!ret_struct)
++ return;
+ strcpy(CurrentSelectionName, ret_struct->string);
+ DoChangeDir(CurrentSelectionName);
+ }
+--- w_library.c
++++ w_library.c 2004-03-22 12:19:10.000000000 +0000
+@@ -461,6 +461,8 @@
+ int new_obj;
+ XawListReturnStruct *ret_struct = (XawListReturnStruct *) call_data;
+
++ if (!ret_struct)
++ return;
+ new_obj = ret_struct->list_index;
+ if (icons_made) {
+ /* unhighlight the current view icon */
+--- w_srchrepl.c
++++ w_srchrepl.c 2004-03-22 12:20:38.000000000 +0000
+@@ -894,6 +894,8 @@
+ {
+ XawListReturnStruct *ret_struct = (XawListReturnStruct *) call_data;
+
++ if (!ret_struct)
++ return;
+ /* save the selected word */
+ strcpy(selected_word, ret_struct->string);
+ /* copy the word to the correct_word ascii widget */
+--- w_style.c
++++ w_style.c 2004-03-22 12:13:00.000000000 +0000
+@@ -585,7 +585,8 @@
+
+ XawListReturnStruct *ret_struct = (XawListReturnStruct *) call_data;
+
+- current_family = ret_struct->list_index;
++ if (ret_struct)
++ current_family = ret_struct->list_index;
+ current_style = -1;
+ style_update ();
+ }
+@@ -598,7 +599,8 @@
+ {
+ XawListReturnStruct *ret_struct = (XawListReturnStruct *) call_data;
+
+- current_style = ret_struct->list_index;
++ if (ret_struct)
++ current_style = ret_struct->list_index;
+ style_update ();
+ cur_updatemask = set_style (&current_family_set[current_family].style[current_style]);
+
diff --git a/source/t/xfig/xfig.3.2.4-quiet.diff b/source/t/xfig/xfig.3.2.4-quiet.diff
new file mode 100644
index 000000000..36086eaf4
--- /dev/null
+++ b/source/t/xfig/xfig.3.2.4-quiet.diff
@@ -0,0 +1,183 @@
+--- main.c
++++ main.c 2004-08-25 14:21:34.000000000 +0200
+@@ -1018,6 +1018,11 @@
+ setup_sizes(init_canv_wd, init_canv_ht);
+ }
+
++ (void) init_tool_menus();
++ (void) init_tool_style_panel();
++ (void) init_tool_ind_pannel();
++ (void) init_tool_canvas();
++
+ (void) init_main_menus(tool_form, arg_filename);
+ (void) init_msg(tool_form);
+ (void) init_mousefun(tool_form);
+--- w_canvas.c
++++ w_canvas.c 2004-08-25 14:20:40.000000000 +0200
+@@ -173,6 +173,13 @@
+ ~Meta<Key>:EventCanv()\n\
+ <Expose>:ExposeCanv()\n";
+
++void
++init_tool_canvas(void)
++{
++ XtAppAddActions(tool_app, canvas_actions, XtNumber(canvas_actions));
++}
++
++int
+ init_canvas(tool)
+ Widget tool;
+ {
+@@ -193,7 +200,6 @@
+ canvas_middlebut_proc = null_proc;
+ canvas_rightbut_proc = null_proc;
+ canvas_kbd_proc = canvas_locmove_proc = null_proc;
+- XtAppAddActions(tool_app, canvas_actions, XtNumber(canvas_actions));
+ XtAugmentTranslations(canvas_sw,
+ XtParseTranslationTable(canvas_translations));
+ #ifndef NO_COMPKEYDB
+@@ -204,13 +210,14 @@
+ }
+
+ /* at this point, the canvas widget is realized so we can get the window from it */
+-
++void
+ setup_canvas()
+ {
+ init_grid();
+ reset_clip_window();
+ }
+
++void
+ canvas_selected(tool, event, params, nparams)
+ Widget tool;
+ XButtonEvent *event;
+--- w_canvas.h
++++ w_canvas.h 2004-08-25 14:21:18.000000000 +0200
+@@ -35,9 +35,12 @@
+ extern void toggle_show_borders();
+ extern void clear_canvas();
+
+-extern canvas_selected();
++extern void canvas_selected();
+ extern void paste_primary_selection();
+
++extern void init_tool_canvas(void);
++extern int init_canvas(Widget tool);
++
+ extern int clip_xmin, clip_ymin, clip_xmax, clip_ymax;
+ extern int clip_width, clip_height;
+ extern int cur_x, cur_y;
+--- w_cmdpanel.c
++++ w_cmdpanel.c 2004-08-25 14:26:00.000000000 +0200
+@@ -204,6 +204,13 @@
+
+ /* command panel */
+ void
++init_tool_menus(void)
++{
++ /* add actions to position the menus if the user uses an accelerator */
++ XtAppAddActions(tool_app, menu_actions, XtNumber(menu_actions));
++}
++
++void
+ init_main_menus(tool, filename)
+ Widget tool;
+ char *filename;
+@@ -212,6 +219,7 @@
+ Widget beside = NULL;
+ DeclareArgs(11);
+
++
+ FirstArg(XtNborderWidth, 0);
+ NextArg(XtNcolormap, tool_cm);
+ NextArg(XtNdefaultDistance, 0);
+@@ -246,8 +254,6 @@
+ filename_balloon_trigger, (XtPointer) name_panel);
+ XtAddEventHandler(name_panel, LeaveWindowMask, False,
+ filename_unballoon, (XtPointer) name_panel);
+- /* add actions to position the menus if the user uses an accelerator */
+- XtAppAddActions(tool_app, menu_actions, XtNumber(menu_actions));
+ refresh_view_menu();
+ }
+
+--- w_cmdpanel.h
++++ w_cmdpanel.h 2004-08-25 14:10:45.000000000 +0200
+@@ -33,6 +33,8 @@
+ extern int num_main_menus();
+ extern Widget create_menu_item();
+ extern void refresh_view_menu();
++extern void init_tool_menus(void);
++extern void init_main_menus(Widget tool, char* filename);
+
+ /* def for menu */
+
+--- w_indpanel.c
++++ w_indpanel.c 2004-08-25 14:12:57.000000000 +0200
+@@ -476,6 +476,12 @@
+ static ind_sw_info upd_sw_info, upd_set_sw_info, upd_clr_sw_info, upd_tog_sw_info;
+
+ void
++init_tool_ind_pannel(void)
++{
++ XtAppAddActions(tool_app, ind_actions, XtNumber(ind_actions));
++}
++
++void
+ init_ind_panel(tool)
+ Widget tool;
+ {
+@@ -626,8 +632,6 @@
+ ind_box = XtCreateManagedWidget("ind_box", boxWidgetClass, ind_panel,
+ Args, ArgCount);
+
+- XtAppAddActions(tool_app, ind_actions, XtNumber(ind_actions));
+-
+ for (i = 0; i < NUM_IND_SW; ++i) {
+ sw = &ind_switches[i];
+ sw->panel = (Widget) NULL; /* not created yet */
+--- w_indpanel.h
++++ w_indpanel.h 2004-08-25 14:14:07.000000000 +0200
+@@ -34,6 +34,9 @@
+ extern void wheel_inc_zoom(), wheel_dec_zoom();
+ #endif /* WHEELMOUSE */
+
++extern void init_tool_ind_pannel(void);
++extern void init_ind_panel(Widget tool);
++
+ /* size of buttons in indicator panel */
+ #define DEF_IND_SW_HT 34
+ #define DEF_IND_SW_WD 64
+--- w_style.c
++++ w_style.c 2004-08-25 14:05:33.000000000 +0200
+@@ -759,6 +759,12 @@
+ /**********************************/
+
+ void
++init_tool_style_panel(void)
++{
++ XtAppAddActions (tool_app, style_actions, XtNumber (style_actions));
++}
++
++void
+ init_manage_style_panel (void)
+ {
+ char buf[50];
+@@ -966,7 +972,6 @@
+ XtAddCallback (style_close_style, XtNcallback,
+ (XtCallbackProc) close_style, (XtPointer) NULL);
+
+- XtAppAddActions (tool_app, style_actions, XtNumber (style_actions));
+ style_update ();
+ }
+
+--- w_style.h
++++ w_style.h 2004-08-25 14:06:27.000000000 +0200
+@@ -14,6 +14,7 @@
+ *
+ */
+
++extern void init_tool_style_panel(void);
+ extern void init_manage_style_panel(void);
+ extern void setup_manage_style_panel(void);
+ extern void popup_manage_style_panel(void);
diff --git a/source/t/xfig/xfig.3.2.4-urw-fonts.diff b/source/t/xfig/xfig.3.2.4-urw-fonts.diff
new file mode 100644
index 000000000..396dead55
--- /dev/null
+++ b/source/t/xfig/xfig.3.2.4-urw-fonts.diff
@@ -0,0 +1,152 @@
+--- u_fonts.c
++++ u_fonts.c 2005-10-06 18:55:22.000000000 +0200
+@@ -21,7 +21,9 @@
+
+ /* X11 font names */
+
+-struct _xfstruct x_fontinfo[NUM_FONTS] = {
++struct _xfstruct x_fontinfo[NUM_FONTS];
++
++struct _xfstruct x_adobe_fontinfo[NUM_FONTS] = {
+ {"-*-times-medium-r-normal--", (struct xfont*) NULL},
+ {"-*-times-medium-i-normal--", (struct xfont*) NULL},
+ {"-*-times-bold-r-normal--", (struct xfont*) NULL},
+@@ -59,6 +61,44 @@
+ {"-*-itc zapf dingbats-*-*-*--", (struct xfont*) NULL},
+ };
+
++struct _xfstruct x_urw_fontinfo[NUM_FONTS] = {
++ {"-URW-*Nimbus Roman No9 L-medium-r-normal--", (struct xfont*) NULL}, /* Times-Roman */
++ {"-URW-*Nimbus Roman No9 L-medium-i-normal--", (struct xfont*) NULL}, /* Times-Italic */
++ {"-URW-*Nimbus Roman No9 L-bold-r-normal--", (struct xfont*) NULL}, /* Times-Bold */
++ {"-URW-*Nimbus Roman No9 L-bold-i-normal--", (struct xfont*) NULL}, /* Times-BoldItalic */
++ {"-URW-*Gothic L-medium-r-normal--", (struct xfont*) NULL}, /* AvantGarde-Book */
++ {"-URW-*Gothic L-medium-o-normal--", (struct xfont*) NULL}, /* AvantGarde-BookOblique */
++ {"-URW-*Gothic L-*bold-r-normal--", (struct xfont*) NULL}, /* AvantGarde-Demi */
++ {"-URW-*Gothic L-*bold-o-normal--", (struct xfont*) NULL}, /* AvantGarde-DemiOblique */
++ {"-URW-*Bookman L-medium-r-normal--", (struct xfont*) NULL}, /* Bookman-Light */
++ {"-URW-*Bookman L-medium-i-normal--", (struct xfont*) NULL}, /* Bookman-LightItalic */
++ {"-URW-*Bookman L-*bold-r-normal--", (struct xfont*) NULL}, /* Bookman-Demi */
++ {"-URW-*Bookman L-*bold-i-normal--", (struct xfont*) NULL}, /* Bookman-DemiItalic */
++ {"-URW-*Nimbus Mono L-medium-r-normal--", (struct xfont*) NULL}, /* Courier */
++ {"-URW-*Nimbus Mono L-medium-o-normal--", (struct xfont*) NULL}, /* Courier-Oblique */
++ {"-URW-*Nimbus Mono L-bold-r-normal--", (struct xfont*) NULL}, /* Courier-Bold */
++ {"-URW-*Nimbus Mono L-bold-o-normal--", (struct xfont*) NULL}, /* Courier-BoldOblique */
++ {"-URW-*Nimbus Sans L-medium-r-normal--", (struct xfont*) NULL}, /* Helvetica */
++ {"-URW-*Nimbus Sans L-medium-o-normal--", (struct xfont*) NULL}, /* Helvetica-Oblique */
++ {"-URW-*Nimbus Sans L-bold-r-normal--", (struct xfont*) NULL}, /* Helvetica-Bold */
++ {"-URW-*Nimbus Sans L-bold-o-normal--", (struct xfont*) NULL}, /* Helvetica-BoldOblique */
++ {"-URW-*Nimbus Sans L-medium-r-condensed--", (struct xfont*) NULL}, /* Helvetica-Narrow */
++ {"-URW-*Nimbus Sans L-medium-o-condensed--", (struct xfont*) NULL}, /* Helvetica-Narrow-Oblique */
++ {"-URW-*Nimbus Sans L-bold-r-condensed--", (struct xfont*) NULL}, /* Helvetica-Narrow-Bold */
++ {"-URW-*Nimbus Sans L-bold-o-condensed--", (struct xfont*) NULL}, /* Helvetica-Narrow-BoldOblique */
++ {"-URW-*Century Schoolbook L-medium-r-normal--", (struct xfont*) NULL}, /* NewCenturySchlbk-Roman */
++ {"-URW-*Century Schoolbook L-medium-i-normal--", (struct xfont*) NULL}, /* NewCenturySchlbk-Italic */
++ {"-URW-*Century Schoolbook L-bold-r-normal--", (struct xfont*) NULL}, /* NewCenturySchlbk-Bold */
++ {"-URW-*Century Schoolbook L-bold-i-normal--", (struct xfont*) NULL}, /* NewCenturySchlbk-BoldItalic */
++ {"-URW-*Palladio L-medium-r-normal--", (struct xfont*) NULL}, /* Palatino-Roman */
++ {"-URW-*Palladio L-medium-i-normal--", (struct xfont*) NULL}, /* Palatino-Italic */
++ {"-URW-*Palladio L-bold-r-normal--", (struct xfont*) NULL}, /* Palatino-Bold */
++ {"-URW-*Palladio L-bold-i-normal--", (struct xfont*) NULL}, /* Palatino-BoldItalic */
++ {"-URW-*Standard Symbols L-medium-r-normal--", (struct xfont*) NULL}, /* Symbol */
++ {"-URW-*Chancery L-medium-i-normal--", (struct xfont*) NULL}, /* ZapfChancery-MediumItalic */
++ {"-URW-*Dingbats-medium-r-normal--", (struct xfont*) NULL}, /* ZapfDingbats */
++};
++
+ /* Use the following font names for any font that doesn't exist in the table above.
+ * These come with the Open Group X distribution so they should be a common set.
+ *
+--- u_fonts.h
++++ u_fonts.h 2005-10-06 19:19:30.000000000 +0200
+@@ -32,9 +32,6 @@
+
+ extern int psfontnum();
+ extern int latexfontnum();
+-extern struct _xfstruct x_fontinfo[], x_backup_fontinfo[];
+-extern struct _fstruct ps_fontinfo[];
+-extern struct _fstruct latex_fontinfo[];
+
+ /* element of linked list for each font
+ The head of list is for the different font NAMES,
+@@ -61,5 +58,12 @@
+ * sizes */
+ };
+
++extern struct _xfstruct x_fontinfo[];
++extern struct _xfstruct x_urw_fontinfo[];
++extern struct _xfstruct x_adobe_fontinfo[];
++extern struct _xfstruct x_backup_fontinfo[];
++extern struct _fstruct ps_fontinfo[];
++extern struct _fstruct latex_fontinfo[];
++
+ int x_fontnum();
+ #endif /* U_FONTS_H */
+--- w_drawprim.c
++++ w_drawprim.c 2005-10-06 19:12:02.000000000 +0200
+@@ -99,6 +99,22 @@
+ appres.buttonFont, appres.normalFont);
+ button_font = XLoadQueryFont(tool_d, appres.normalFont);
+ }
++
++ /*
++ * Check for URW fonts, if not found use Adobe fonts
++ */
++ strcpy(template,x_urw_fontinfo[0].template);
++ strcat(template,"0-0-*-*-*-*-");
++ if (strstr(template,"ymbol") == NULL && strstr(template,"ingbats") == NULL)
++ strcat(template,"ISO8859-*");
++ else
++ strcat(template,"*-*");
++ if ((fontlist = XListFonts(tool_d, template, 1, &count)) == (char**)0)
++ memcpy(&x_fontinfo, &x_adobe_fontinfo, sizeof(struct _xfstruct) * NUM_FONTS);
++ else
++ memcpy(&x_fontinfo, &x_urw_fontinfo, sizeof(struct _xfstruct) * NUM_FONTS);
++ XFreeFontNames(fontlist);
++
+ /*
+ * Now initialize the font structure for the X fonts corresponding to the
+ * Postscript fonts for the canvas. OpenWindows can use any LaserWriter
+@@ -119,8 +135,8 @@
+ strcpy(template,x_fontinfo[0].template); /* nope, check for font size 0 */
+ strcat(template,"0-0-*-*-*-*-");
+ /* add ISO8859 (if not Symbol font or ZapfDingbats) to font name */
+- if (strstr(template,"symbol") == NULL &&
+- strstr(template,"zapf dingbats") == NULL)
++ if (strstr(template,"ymbol") == NULL &&
++ strstr(template,"ingbats") == NULL)
+ strcat(template,"ISO8859-*");
+ else
+ strcat(template,"*-*");
+@@ -139,8 +155,8 @@
+ strcpy(template,x_fontinfo[f].template);
+ strcat(template,"*-*-*-*-*-*-");
+ /* add ISO8859 (if not Symbol font or ZapfDingbats) to font name */
+- if (strstr(template,"symbol") == NULL &&
+- strstr(template,"zapf dingbats") == NULL)
++ if (strstr(template,"ymbol") == NULL &&
++ strstr(template,"ingbats") == NULL)
+ strcat(template,"ISO8859-*");
+ else
+ strcat(template,"*-*");
+@@ -287,8 +303,8 @@
+ /* attach pointsize to font name */
+ strcat(template,"%d-*-*-*-*-*-");
+ /* add ISO8859 (if not Symbol font or ZapfDingbats) to font name */
+- if (strstr(template,"symbol") == NULL &&
+- strstr(template,"zapf dingbats") == NULL)
++ if (strstr(template,"ymbol") == NULL &&
++ strstr(template,"ingbats") == NULL)
+ strcat(template,"ISO8859-*");
+ else
+ strcat(template,"*-*");
+@@ -299,8 +315,8 @@
+ strcpy(template,x_backup_fontinfo[fnum].template);
+ strcat(template,"%d-*-*-*-*-*-");
+ /* add ISO8859 (if not Symbol font or ZapfDingbats) to font name */
+- if (strstr(template,"symbol") == NULL &&
+- strstr(template,"zapf dingbats") == NULL)
++ if (strstr(template,"ymbol") == NULL &&
++ strstr(template,"ingbats") == NULL)
+ strcat(template,"ISO8859-*");
+ else
+ strcat(template,"*-*");
diff --git a/source/t/xfig/xfig.3.2.4.diff b/source/t/xfig/xfig.3.2.4.diff
new file mode 100644
index 000000000..821243a65
--- /dev/null
+++ b/source/t/xfig/xfig.3.2.4.diff
@@ -0,0 +1,530 @@
+--- Fig-color.ad
++++ Fig-color.ad 2008-04-13 20:50:28.000000000 +0200
+@@ -76,6 +76,12 @@ Fig*MenuButton*background: gray83
+ ! in the color editor popup
+ Fig*mixedEdit.background: gray83
+
++Fig*mode_panel.background: gray67
++Fig*mode_panel*topShadow:: white
++Fig*mode_panel*bottomShadow: gray17
++Fig*mode_panel*topShadowPixel: white
++Fig*mode_panel*bottomShadowPixel: gray17
++
+ Fig*cancel.background: gray88
+ Fig*dismiss.background: gray88
+ Fig*commands*background: gray88
+@@ -85,12 +91,35 @@ Fig*horizontal.background: gray88
+
+ Fig*topruler.background: gray95
+ Fig*sideruler.background: gray95
++Fig*topruler.foreground: black
++Fig*sideruler.foreground: black
+
+ ! file panel and scrollbar
+
+ Fig*FigList*background: gray95
+ Fig*List*background: gray95
+-Fig*Scrollbar.background: gray95
++Fig*Scrollbar.background: gray77
++Fig*Scrollbar.foreground: gray37
++Fig*ScrollbarBackground: gray67
++Fig*ScrollbarForeground: gray37
++
++Fig*horizontal.shadowWidth: 2
++Fig*horizontal.topShadowPixel: gray95
++Fig*horizontal.bottomShadowPixel: gray37
++Fig*horizontal.topShadow: gray95
++Fig*horizontal.bottomShadow: gray37
++
++Fig*Scrollbar.shadowWidth: 2
++Fig*Scrollbar.topShadow: gray95
++Fig*Scrollbar.bottomShadow: gray37
++Fig*Scrollbar.topShadowPixel: gray95
++Fig*Scrollbar.bottomShadowPixel: gray37
++
++Fig*stdColor.shadowWidth: 2
++Fig*stdColor.topShadow: gray95
++Fig*stdColor.bottomShadow: gray37
++Fig*stdColor.topShadowPixel: gray95
++Fig*stdColor.bottomShadowPixel: gray37
+
+ Fig*Label.background: gray80
+ Fig*ind_box.background: gray80
+--- Fig.ad
++++ Fig.ad 2008-04-13 20:50:28.000000000 +0200
+@@ -10,6 +10,8 @@ Fig.version: 3.2.4
+
+ Fig*AllowShellResize: false
+
++Fig.inches: false
++
+ ! Image editor - can edit imported image
+ Fig.image_editor: xv
+
+@@ -20,7 +22,7 @@ Fig.ghostscript: gs
+ ! This is for viewing the xfig html reference.
+ ! For netscape, this command will open the help pages in a running netscape,
+ ! or start a new netscape if one isn't already running
+-Fig.browser: netscape -remote 'openFile(%f)' || netscape %f
++Fig.browser: /usr/bin/firefox %f
+
+ ! pdfviewer - put your favorite pdf viewer here.
+ ! This is for viewing the xfig how-to guide and man pages
+@@ -99,60 +101,62 @@ Fig.internalborderwidth: 1
+ ! I include both for compatibility. Be sure to change both values when
+ ! modifying them.
+
+- Fig*horizontal.shadowWidth: 0
+- Fig*horizontal.topShadowPixel: black
+- Fig*horizontal.bottomShadowPixel: white
+- Fig*horizontal.topShadow: black
+- Fig*horizontal.bottomShadow: white
++Fig*horizontal.shadowWidth: 0
++Fig*horizontal.topShadowPixel: black
++Fig*horizontal.bottomShadowPixel: white
++Fig*horizontal.topShadow: black
++Fig*horizontal.bottomShadow: white
+
+ ! the following is done so the widget set doesn't try to make shades of
+ ! the scrollbar shadows (even though the width is 0 it takes more colors)
+- Fig*Scrollbar.shadowWidth: 0
+- Fig*Scrollbar.topShadow: black
+- Fig*Scrollbar.bottomShadow: white
+- Fig*Scrollbar.topShadowPixel: black
+- Fig*Scrollbar.bottomShadowPixel: white
++
++Fig*Scrollbar.shadowWidth: 0
++Fig*Scrollbar.topShadow: black
++Fig*Scrollbar.bottomShadow: white
++Fig*Scrollbar.topShadowPixel: black
++Fig*Scrollbar.bottomShadowPixel: white
+
+ ! this is for the standard color buttons in the color panel
+- Fig*stdColor.shadowWidth: 2
+- Fig*stdColor.topShadow: black
+- Fig*stdColor.bottomShadow: white
+- Fig*stdColor.topShadowPixel: black
+- Fig*stdColor.bottomShadowPixel: white
++
++Fig*stdColor.shadowWidth: 2
++Fig*stdColor.topShadow: black
++Fig*stdColor.bottomShadow: white
++Fig*stdColor.topShadowPixel: black
++Fig*stdColor.bottomShadowPixel: white
+
+ ! turn off any shadows for the user color cells
+- Fig*colorMemory.shadowWidth: 0
++Fig*colorMemory.shadowWidth: 0
+
+ ! You may need or want to adjust the highlight thickness for the mode
+ ! and indicator panels depending on the results. If it is too thick
+ ! it will erase part of the button graphics.
+- Fig*mode_panel*highlightThickness: 1
+- Fig*ind_panel.ind_box.button_form.button.highlightThickness: 1
++Fig*mode_panel*highlightThickness: 1
++Fig*ind_panel.ind_box.button_form.button.highlightThickness: 1
+ ! Same for the popup panels from the indicator panel
+- Fig*set_indicator_panel*Command.highlightThickness: 1
++Fig*set_indicator_panel*Command.highlightThickness: 1
+
+ ! If you use the 3D Athena widget set and the small icons for the mode panel
+ ! (because you have a small screen; see Imakefile) you may want to reduce
+ ! the shadow width to 1 or 0. Uncomment the following in that case:
+-! Fig*mode_panel*shadowWidth: 1
++Fig*mode_panel*shadowWidth: 1
+
+ ! The following is for the update marker in the upper-right corner of the
+ ! indicator buttons. You may not want any highlight thickness because
+ ! the boxes are so small.
+- Fig*ind_panel.ind_box.button_form.update.highlightThickness: 0
++Fig*ind_panel.ind_box.button_form.update.highlightThickness: 1
+
+ ! This sets the shadows for the spinner arrows
+- Fig*spinup.shadowWidth: 2
+- Fig*spindown.shadowWidth: 2
++Fig*spinup.shadowWidth: 0
++Fig*spindown.shadowWidth: 0
+
+ ! This gets rid of that funny black line that sometimes borders the canvas
+
+- Fig*canvas.shadowWidth: 0
++Fig*canvas.shadowWidth: 0
+
+ !if on monochrome server, or no Fig-color app-defaults file
+ ! This background resource shows between the buttons like a border
+- Fig*mode_panel.background: black
+- Fig*mode_panel.foreground: black
++Fig*mode_panel.background: black
++Fig*mode_panel.foreground: black
+
+ ! Specify a private Compose key database file. If this resource contains a "/"
+ ! then the wired-in name of the xfig global directory won't be prefixed to it.
+--- Imakefile
++++ Imakefile 2008-04-13 20:52:35.000000000 +0200
+@@ -49,7 +49,7 @@ XCOMM Redefine the following if your PNG
+ XCOMM are in different places
+
+ PNGLIBDIR = $(USRLIBDIR)
+-PNGINC = -I/usr/local/include
++PNGINC = -I/usr/include
+
+ XCOMM If don't want JPEG support, comment out the #define USEJPEG line
+ XCOMM Uncomment the #define for USEJPEG if you want to be able to import
+@@ -68,8 +68,8 @@ XCOMM You must have version 5b or newer
+
+ #ifdef USEJPEG
+ #ifdef USEINSTALLEDJPEG
+-JPEGLIBDIR = /usr/local/lib
+-JPEGINC = -I/usr/include/X11
++JPEGLIBDIR = /usr/lib
++JPEGINC = -I/usr/include
+ #else
+ JPEGLIBDIR = ../jpeg
+ JPEGINC = -I$(JPEGLIBDIR)
+@@ -87,8 +87,8 @@ XCOMM in /contrib/libraries.
+ XCOMM Change XPMLIBDIR if necessary to point to the xpm library (libXpm)
+ XCOMM Change XPMINC if necessary to point to the include file for xpm (xpm.h)
+
+-XCOMM #define USEXPM
+-XCOMM #define USEXPM_ICON
++#define USEXPM
++#define USEXPM_ICON
+
+ #ifdef USEXPM
+ XPMLIBDIR = $(USRLIBDIR)
+@@ -105,17 +105,20 @@ XCOMM the 3d Athena Widget Set (highly r
+ XCOMM Then be sure to change the XAW3DINC to point to the directory where your
+ XCOMM 3D Athena widget headers are located
+
+-XCOMM #define XAW3D
++#define XAW3D
+
+ #ifdef XAW3D
+ XAW3DINC = -I/usr/include/X11/Xaw3d
+ DUSEXAW3D = -DXAW3D
+ XAWLIB = -lXaw3d
++#else
++XAWSRC = SmeBSB.c SimpleMenu.c
++XAWOBJ = SmeBSB.o SimpleMenu.o
+ #endif
+
+ XCOMM Uncomment the following if you have a wheel mouse. See docs for description.
+
+-XCOMM #define WHEELMOUSE
++#define WHEELMOUSE
+
+ #ifdef WHEELMOUSE
+ DUSEWHEELMOUSE = -DWHEELMOUSE
+@@ -154,7 +157,7 @@ XCOMM uncomment the following line if yo
+ XCOMM inline functions. With the "INLINE" keyword, you should notice that
+ XCOMM the display will be a bit faster in complex figures
+
+-XCOMM USEINLINE = -DUSE_INLINE
++USEINLINE = -DUSE_INLINE
+
+ XCOMM use (and change) the following if you want the multi-key data base file
+ XCOMM somewhere other than the standard X11 library directory
+@@ -166,7 +169,7 @@ XFIGLIBDIR = $(LIBDIR)/xfig
+
+ XCOMM XFIGDOCDIR tells where the html and pdf documentation should go
+ XCOMM XFIGDOCDIR = $(DOCDIR)/xfig
+-XFIGDOCDIR = /usr/share/doc/xfig
++XFIGDOCDIR = /usr/share/doc/packages/xfig
+
+ XCOMM MANDIR tells where the standard man pages should go (no need to change it
+ XCOMM if you want the man pages installed in the standard place on your system
+@@ -200,7 +203,7 @@ XCOMM instead.
+ XCOMM Add `-DCACHE_SIZE_LIMIT=xxxx' where xxxx is the cache size in kilobytes.
+ XCOMM A cache size of zero turns caching off.
+
+-CACHE = -DCACHE_BITMAPS -DCACHE_SIZE_LIMIT=300
++CACHE = -DCACHE_BITMAPS -DCACHE_SIZE_LIMIT=512 -DMAXNUMPTS=50000 -DBSDLPR
+
+ XCOMM For SYSV systems with BSD-style printer command which use lpr instead of
+ XCOMM lp (SGI is one such machine), add -DBSDLPR to the DEFINES variable
+@@ -214,6 +217,7 @@ XCOMM number of vertices.
+ XCOMM If you want a compiler other than "cc", define it here
+
+ XCOMM CC = /opt/SUNWspro/bin/cc
++CC = gcc
+
+ XCOMM *****************************************************
+ XCOMM *****************************************************
+@@ -234,7 +238,7 @@ DEPLIBJPEG = $(JPEGLIBDIR)/libjpeg.a
+ #endif /* USEJPEG */
+
+ #ifdef I18N
+-I18N_DEFS = -DI18N -DSETLOCALE
++I18N_DEFS = -DI18N
+ I18N_SRC = w_i18n.c
+ I18N_OBJ = w_i18n.o
+ #endif
+@@ -304,7 +308,7 @@ XFIGSRC = d_arc.c d_arcbox.c d_box.c d_e
+ w_export.c w_file.c w_fontbits.c w_fontpanel.c w_grid.c w_icons.c \
+ w_indpanel.c w_library.c w_modepanel.c w_mousefun.c w_msgpanel.c \
+ w_print.c w_rottext.c w_rulers.c w_setup.c w_style.c w_util.c w_zoom.c \
+- $(I18N_SRC) SmeCascade.c SmeBSB.c SimpleMenu.c
++ $(I18N_SRC) SmeCascade.c $(XAWSRC)
+
+ XFIGOBJ = d_arc.o d_arcbox.o d_box.o d_ellipse.o d_picobj.o \
+ d_subspline.o d_line.o d_regpoly.o d_spline.o d_text.o \
+@@ -326,7 +330,7 @@ XFIGOBJ = d_arc.o d_arcbox.o d_box.o d_e
+ w_export.o w_file.o w_fontbits.o w_fontpanel.o w_grid.o w_icons.o \
+ w_indpanel.o w_library.o w_modepanel.o w_mousefun.o w_msgpanel.o \
+ w_print.o w_rottext.o w_rulers.o w_setup.o w_style.o w_util.o w_zoom.o \
+- $(I18N_OBJ) SmeCascade.o SmeBSB.o SimpleMenu.o
++ $(I18N_OBJ) SmeCascade.o $(XAWOBJ)
+
+ XCOMM Other dependencies should be handled by "make depend"
+
+--- e_addpt.c
++++ e_addpt.c 2008-04-13 20:50:28.000000000 +0200
+@@ -52,6 +52,7 @@ point_adding_selected()
+ force_nopositioning();
+ force_anglegeom();
+ constrained = MOVE_ARB;
++ reset_action_on();
+ }
+
+ static void
+--- e_align.c
++++ e_align.c 2008-04-13 20:50:28.000000000 +0200
+@@ -63,6 +63,7 @@ align_selected()
+ canvas_middlebut_proc = init_align_canvas;
+ canvas_rightbut_proc = null_proc;
+ set_cursor(pick15_cursor);
++ reset_action_on();
+ }
+
+ /* align objects to the whole canvas */
+--- e_arrow.c
++++ e_arrow.c 2008-04-13 20:50:28.000000000 +0200
+@@ -47,6 +47,7 @@ arrow_head_selected()
+ canvas_middlebut_proc = point_search_middle;
+ canvas_rightbut_proc = null_proc;
+ set_cursor(pick9_cursor);
++ reset_action_on();
+ }
+
+ static void
+--- e_break.c
++++ e_break.c 2008-04-13 20:50:28.000000000 +0200
+@@ -43,6 +43,7 @@ break_selected()
+ canvas_middlebut_proc = object_search_middle;
+ canvas_rightbut_proc = null_proc;
+ set_cursor(pick15_cursor);
++ reset_action_on();
+ }
+
+ static void
+@@ -82,8 +83,10 @@ init_break(p, type, x, y, px, py, loc_ta
+ list_delete_compound(&objects.compounds, cur_c);
+ tail(&objects, &object_tails);
+ append_objects(&objects, cur_c, &object_tails);
++#if 0
+ /* add the depths from this compound */
+ add_compound_depth(cur_c);
++#endif
+ toggle_markers_in_compound(cur_c);
+ set_tags(cur_c, loc_tag);
+ set_action(F_BREAK);
+--- e_convert.c
++++ e_convert.c 2008-04-13 20:50:28.000000000 +0200
+@@ -47,6 +47,7 @@ convert_selected()
+ canvas_middlebut_proc = null_proc;
+ canvas_rightbut_proc = point_search_right;
+ set_cursor(pick15_cursor);
++ reset_action_on();
+ }
+
+ static void
+--- e_deletept.c
++++ e_deletept.c 2008-04-13 20:50:28.000000000 +0200
+@@ -43,6 +43,7 @@ delete_point_selected()
+ canvas_middlebut_proc = null_proc;
+ canvas_rightbut_proc = null_proc;
+ set_cursor(pick9_cursor);
++ reset_action_on();
+ }
+
+ static void
+--- e_flip.c
++++ e_flip.c 2008-04-13 20:50:28.000000000 +0200
+@@ -61,6 +61,7 @@ flip_ud_selected()
+ setcenter = 0;
+ setanchor = 0;
+ flip_selected();
++ reset_action_on();
+ }
+
+ void
+@@ -76,6 +77,7 @@ flip_lr_selected()
+ setcenter = 0;
+ setanchor = 0;
+ flip_selected();
++ reset_action_on();
+ }
+
+ static void
+--- e_movept.c
++++ e_movept.c 2008-04-13 20:50:28.000000000 +0200
+@@ -80,6 +80,7 @@ move_point_selected()
+ canvas_rightbut_proc = null_proc;
+ set_cursor(pick9_cursor);
+ force_anglegeom();
++ reset_action_on();
+ }
+
+ static void
+--- e_rotate.c
++++ e_rotate.c 2008-04-13 20:50:28.000000000 +0200
+@@ -94,6 +94,7 @@ rotate_selected()
+ canvas_middlebut_proc = object_search_middle;
+ canvas_rightbut_proc = set_unset_center;
+ set_cursor(pick15_cursor);
++ reset_action_on();
+ }
+
+ static void
+--- e_update.c
++++ e_update.c 2008-04-13 20:50:28.000000000 +0200
+@@ -64,6 +64,7 @@ update_selected()
+ set_cursor(pick9_cursor);
+ /* manage on the update buttons */
+ manage_update_buts();
++ reset_action_on();
+ }
+
+ static int
+--- fig.h
++++ fig.h 2008-04-13 20:50:28.000000000 +0200
+@@ -26,6 +26,7 @@ extern char *my_strdup();
+ #if defined(ultrix) || defined(__bsdi__) || defined(Mips) || defined(apollo)
+ #include <sys/types.h> /* for stat structure */
+ #endif
++#include <sys/param.h>
+ #include <sys/stat.h>
+
+ #if defined(__convex__) && defined(__STDC__)
+--- mode.h
++++ mode.h 2008-04-13 20:50:28.000000000 +0200
+@@ -19,7 +19,7 @@
+ #define MODE_H
+
+ #define F_NULL 0
+-#define FIRST_DRAW_MODE F_CIRCLE_BY_RAD
++#define FIRST_DRAW_MODE F_CIRCLE_BY_RAD
+ #define F_CIRCLE_BY_RAD 1
+ #define F_CIRCLE_BY_DIA 2
+ #define F_ELLIPSE_BY_RAD 3
+@@ -38,7 +38,7 @@
+ #define F_PICOBJ 16
+ #define F_PLACE_LIB_OBJ 17
+
+-#define FIRST_EDIT_MODE F_GLUE
++#define FIRST_EDIT_MODE F_GLUE
+ #define F_GLUE 30
+ #define F_BREAK 31
+ #define F_SCALE 32
+--- w_canvas.c
++++ w_canvas.c 2008-04-13 20:50:28.000000000 +0200
+@@ -536,6 +536,7 @@ reset_click_counter(widget, closure, eve
+
+ /* clear the canvas - this can't be called to clear a pixmap, only a window */
+
++void
+ clear_canvas()
+ {
+ /* clear the splash graphic if it is still on the screen */
+--- w_canvas.h
++++ w_canvas.h 2008-04-13 20:50:28.000000000 +0200
+@@ -33,6 +33,7 @@ extern void toggle_show_balloons();
+ extern void toggle_show_lengths();
+ extern void toggle_show_vertexnums();
+ extern void toggle_show_borders();
++extern void clear_canvas();
+
+ extern void canvas_selected();
+ extern void paste_primary_selection();
+--- w_menuentry.c
++++ w_menuentry.c 2008-04-13 20:50:28.000000000 +0200
+@@ -170,7 +170,8 @@ Region region;
+ gc = entry->sme_bsb.norm_gray_gc;
+ }
+
+- if (entry->sme_bsb.label != NULL) {
++/* if (entry->sme_bsb.label != NULL) { */
++ if (entry->sme_bsb.label == XtName((Widget)(entry))) {
+ int x_loc = entry->sme_bsb.left_margin;
+ int len = strlen(entry->sme_bsb.label);
+ char * label = entry->sme_bsb.label;
+--- w_srchrepl.c
++++ w_srchrepl.c 2008-04-13 20:50:28.000000000 +0200
+@@ -56,7 +56,6 @@ There is currently no way to undo replac
+ #include "w_util.h"
+ #include "u_create.h"
+ #include <stdarg.h>
+-
+ #define MAX_MISSPELLED_WORDS 200
+ #define SEARCH_WIDTH 496 /* width of search message and results */
+
+--- w_util.c
++++ w_util.c 2008-04-13 20:50:28.000000000 +0200
+@@ -1102,7 +1102,7 @@ check_action_on()
+ finish_text_input(0,0,0);/* finish up any text input */
+ else {
+ if (cur_mode == F_PLACE_LIB_OBJ)
+- cancel_place_lib_obj();
++ cancel_place_lib_obj(0, 0, 0);
+ else {
+ put_msg("Finish (or cancel) the current operation before changing modes");
+ beep();
+--- Doc/xfig.html
++++ Doc/xfig.html 2008-04-13 20:50:28.000000000 +0200
+@@ -848,6 +848,20 @@ between all buttons and panels (default
+ </DL>
+ <P>
+
++<B>-international</B>
++
++<DL COMPACT>
++<DT><DD>
++Switch on international support (mainly Japanese
++and Korean), users of ISO Latin 1 (ISO-8859-1)
++probably should not use this, therefore the international
++support is switched off by default for locales using ISO-8859-1*
++codesets. For all other locales this option is already used
++by default.
++</DL>
++
++<P>
++
+
+ <B>-jpeg</B>[<B>_quality</B>]
+
+@@ -2208,6 +2222,7 @@ inches boolean true
+ -metric (false)
+ installowncmap boolean false -installowncmap
+ internalborderwidth integer 1 -internalBW
++international boolean false -international
+ jpeg_quality integer 75 -jpeg_quality
+ justify boolean false -left (false),
+ -right (true)
+--- Doc/xfig.man
++++ Doc/xfig.man 2008-04-13 20:50:28.000000000 +0200
+@@ -531,6 +531,15 @@ Use lines of width
+ between all buttons and panels (default = 1).
+ .\"-------
+ .At
++.BR \-international
++.Ap
++Switch on international support (mainly Japanese and Korean),
++users of ISO Latin 1 (ISO-8859-1) probably should not use this,
++therefore the international support is switched off by default
++for locales using ISO-8859-1* codesets. For all other locales this
++option is already used by default.
++.\"-------
++.At
+ .BR \-jpeg [ _quality ]
+ .I quality
+ .Ap
diff --git a/source/t/xfig/xfig.SlackBuild b/source/t/xfig/xfig.SlackBuild
new file mode 100755
index 000000000..010106ad0
--- /dev/null
+++ b/source/t/xfig/xfig.SlackBuild
@@ -0,0 +1,98 @@
+#!/bin/sh
+
+# Copyright 2007,2008,2009 Patrick J. Volkerding, Sebeka, MN, USA
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+
+
+VERSION=3.2.4
+ARCH=${ARCH:-x86_64}
+BUILD=${BUILD:-3}
+
+NUMJOBS=${NUMJOBS:-" -j7 "}
+
+if [ "$ARCH" = "x86_64" ]; then
+ LIBDIRSUFFIX="64"
+else
+ LIBDIRSUFFIX=""
+fi
+
+CWD=$(pwd)
+TMP=${TMP:-/tmp}
+PKG=$TMP/package-xfig
+rm -rf $PKG
+mkdir -p $PKG $TMP
+
+cd $TMP
+rm -rf xfig.$VERSION
+tar xvf $CWD/xfig.$VERSION.full.tar.bz2 || exit 1
+cd xfig.$VERSION || exit 1
+
+chown -R root:root .
+find . \
+ \( -perm 2775 -o -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
+ -exec chmod 755 {} \; -o \
+ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
+ -exec chmod 644 {} \;
+
+zcat $CWD/xfig-3.2.4-mkstemp.diff.gz | patch -E -p1 --verbose || exit 1
+zcat $CWD/xfig.3.2.3d-international-std-fonts.diff.gz | patch -E -p1 --verbose || exit 1
+zcat $CWD/xfig.3.2.3d-xcolor.diff.gz | patch -E -p0 --verbose || exit 1
+zcat $CWD/xfig.3.2.3d-xim.diff.gz | patch -E -p1 --verbose || exit 1
+zcat $CWD/xfig.3.2.4-gcc4.diff.gz | patch -E -p0 --verbose || exit 1
+zcat $CWD/xfig.3.2.4-locale.diff.gz | patch -E -p0 --verbose || exit 1
+zcat $CWD/xfig.3.2.4-null.diff.gz | patch -E -p0 --verbose || exit 1
+zcat $CWD/xfig.3.2.4-quiet.diff.gz | patch -E -p0 --verbose || exit 1
+zcat $CWD/xfig.3.2.4-urw-fonts.diff.gz | patch -E -p0 --verbose || exit 1
+zcat $CWD/xfig.3.2.4.diff.gz | patch -E -p0 --verbose || exit 1
+# Eliminate menu choice for non-distributed (redundant) PDF documentation:
+zcat $CWD/xfig.no.pdf.ref.diff.gz | patch -E -p1 --verbose || exit 1
+# Don't install PDF reference manual because the HTML manual is the same thing
+# (and also includes a Japanese translation):
+zcat $CWD/xfig.no.xfig_ref_en.pdf.diff.gz | patch -E -p1 --verbose || exit 1
+# Use Firefox and xpdf, not netscape and acroread:
+zcat $CWD/xfig.fig.ad.diff.gz | patch -E -p1 --verbose || exit 1
+zcat $CWD/xfig.docs.location.diff.gz | patch -E -p1 --verbose || exit 1
+
+xmkmf
+make $NUMJOBS || make || exit 1
+make install DESTDIR=$PKG || exit 1
+make install.man DESTDIR=$PKG || exit 1
+make install.libs DESTDIR=$PKG || exit 1
+make install.html DESTDIR=$PKG || exit 1
+
+find $PKG | xargs file | grep -e "executable" -e "shared object" \
+ | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
+
+gzip -9 $PKG/usr/man/man1/*
+
+mkdir -p $PKG/usr/doc/xfig-$VERSION
+cp -a \
+ CHANGES FIGAPPS LATEX.AND.XFIG README \
+ $PKG/usr/doc/xfig-$VERSION
+( cd $PKG/usr/doc/xfig-$VERSION
+ ln -sf /usr/lib${LIBDIRSUFFIX}/X11/xfig/Libraries Libraries
+)
+
+mkdir -p $PKG/install
+cat $CWD/slack-desc > $PKG/install/slack-desc
+
+cd $PKG
+/sbin/makepkg -l y -c n $TMP/xfig-$VERSION-$ARCH-$BUILD.txz
+
diff --git a/source/t/xfig/xfig.docs.location.diff b/source/t/xfig/xfig.docs.location.diff
new file mode 100644
index 000000000..78385c06c
--- /dev/null
+++ b/source/t/xfig/xfig.docs.location.diff
@@ -0,0 +1,11 @@
+--- ./Imakefile.orig 2007-02-19 03:29:55.000000000 -0600
++++ ./Imakefile 2007-02-19 03:32:49.000000000 -0600
+@@ -169,7 +169,7 @@
+
+ XCOMM XFIGDOCDIR tells where the html and pdf documentation should go
+ XCOMM XFIGDOCDIR = $(DOCDIR)/xfig
+-XFIGDOCDIR = /usr/share/doc/packages/xfig
++XFIGDOCDIR = /usr/doc/xfig-3.2.4
+
+ XCOMM MANDIR tells where the standard man pages should go (no need to change it
+ XCOMM if you want the man pages installed in the standard place on your system
diff --git a/source/t/xfig/xfig.fig.ad.diff b/source/t/xfig/xfig.fig.ad.diff
new file mode 100644
index 000000000..a6a763a15
--- /dev/null
+++ b/source/t/xfig/xfig.fig.ad.diff
@@ -0,0 +1,30 @@
+--- ./Fig.ad.orig 2007-02-19 03:01:42.000000000 -0600
++++ ./Fig.ad 2007-02-19 03:05:49.000000000 -0600
+@@ -22,16 +22,24 @@
+ ! This is for viewing the xfig html reference.
+ ! For netscape, this command will open the help pages in a running netscape,
+ ! or start a new netscape if one isn't already running
+-Fig.browser: /usr/bin/firefox %f
++! Fig.browser: netscape -remote 'openFile(%f)' || netscape %f
++! This example might work the same for SeaMonkey:
++! Fig.browser: seamonkey -remote 'openFile(%f)' || seamonkey %f
++! By default, let's try Firefox:
++Fig.browser: firefox %f
+
+ ! pdfviewer - put your favorite pdf viewer here.
+ ! This is for viewing the xfig how-to guide and man pages
+-Fig.pdfviewer: acroread %f
++! Fig.pdfviewer: acroread %f
++! Fig.pdfviewer: kpdf %f
++Fig.pdfviewer: xpdf %f
+
+ ! Spell check program - put your favorite spelling check program here.
+ ! It must write the misspelled words to standard output.
+
+-Fig.spellcheckcommand: spell %f
++! Fig.spellcheckcommand: spell %f
++! Fig.spellcheckcommand: aspell -a %f
++Fig.spellcheckcommand: aspell -a %f
+
+ ! delay before spinner automatically counts when pressed (milliseconds)
+ Fig.spinner_delay: 1000
diff --git a/source/t/xfig/xfig.no.pdf.ref.diff b/source/t/xfig/xfig.no.pdf.ref.diff
new file mode 100644
index 000000000..5e694ab8c
--- /dev/null
+++ b/source/t/xfig/xfig.no.pdf.ref.diff
@@ -0,0 +1,13 @@
+--- ./w_cmdpanel.c.orig 2006-08-14 18:53:22.000000000 -0500
++++ ./w_cmdpanel.c 2006-08-14 18:55:02.000000000 -0500
+@@ -176,7 +176,9 @@
+ /* Tom Sato said that the Japanese version of the pdf looked ugly so we'll not distribute it now */
+ {"Xfig Reference (PDF, Japanese)...", 0, launch_refpdf_jp}
+ #else
+- {"Xfig Reference (PDF)...", 0, launch_refpdf_en},
++ /* Why both a PDF and an HTML that are the same? Remove redundant option */
++ /* and don't distribute the English PDF with the Slackware package. */
++ /* {"Xfig Reference (PDF)...", 0, launch_refpdf_en}, */
+ #endif /* FIXED_JAPANESE_PDF */
+ {"Xfig Man Pages (HTML)...", 5, launch_man},
+ {"How-To Guide (PDF)...", 0, launch_howto},
diff --git a/source/t/xfig/xfig.no.xfig_ref_en.pdf.diff b/source/t/xfig/xfig.no.xfig_ref_en.pdf.diff
new file mode 100644
index 000000000..e0b9f9efc
--- /dev/null
+++ b/source/t/xfig/xfig.no.xfig_ref_en.pdf.diff
@@ -0,0 +1,10 @@
+--- ./Imakefile.orig 2002-12-19 11:57:11.000000000 -0600
++++ ./Imakefile 2006-08-14 19:20:56.000000000 -0500
+@@ -408,7 +408,6 @@
+ @(cd Doc ; \
+ echo Copying pdf and html files to $(DESTDIR)$(XFIGDOCDIR) ; \
+ $(INSTALL) -m 644 -c xfig_man.html $(DESTDIR)$(XFIGDOCDIR) ; \
+- $(INSTALL) -m 644 -c xfig_ref_en.pdf $(DESTDIR)$(XFIGDOCDIR) ; \
+ $(INSTALL) -m 644 -c xfig-howto.pdf $(DESTDIR)$(XFIGDOCDIR) ; \
+ if [ -d $(DESTDIR)$(XFIGDOCDIR)/html ]; then set +x; \
+ else (set -x; $(MKDIRHIER) $(DESTDIR)$(XFIGDOCDIR)/html ); fi ; \