plug-ins/gfli/fli.[ch] applied gimp-narazaki-990914-0, fixes bogus magic

* plug-ins/gfli/fli.[ch]
* plug-ins/gfli/gfli.c: applied gimp-narazaki-990914-0, fixes bogus
magic settings and noninteractive pdb

* plug-ins/common/ps.c: resolution info patch

-Yosh
This commit is contained in:
Manish Singh 1999-09-14 20:54:02 +00:00
parent 4555202ace
commit 2139d2b4ab
6 changed files with 146 additions and 24 deletions

View File

@ -1,3 +1,11 @@
Tue Sep 14 13:51:45 PDT 1999 Manish Singh <yosh@gimp.org>
* plug-ins/gfli/fli.[ch]
* plug-ins/gfli/gfli.c: applied gimp-narazaki-990914-0, fixes bogus
magic settings and noninteractive pdb
* plug-ins/common/ps.c: resolution info patch
Tue Sep 14 13:15:34 PDT 1999 Manish Singh <yosh@gimp.org>
* plug-ins/common/ps.c: don't use wacky binary modifiers to popen

View File

@ -40,10 +40,11 @@
* V 1.05, PK, 21-Sep-98: Write b/w-images (indexed) using image-operator
* V 1.06, PK, 22-Dec-98: Fix problem with writing color PS files.
* Ghostview may hang when displaying the files.
* V 1.07, PK, 14-Sep-99: Add resolution to image
*/
#define VERSIO 1.06
static char dversio[] = "v1.06 22-Dec-98";
static char ident[] = "@(#) GIMP PostScript/PDF file-plugin v1.06 22-Dec-98";
#define VERSIO 1.07
static char dversio[] = "v1.07 14-Sep-99";
static char ident[] = "@(#) GIMP PostScript/PDF file-plugin v1.07 14-Sep-99";
#include "config.h"
#include <stdio.h>
@ -302,8 +303,8 @@ query (void)
{ PARAM_STRING, "filename", "The name of the file to save the image in" },
{ PARAM_STRING, "raw_filename",
"The name of the file to save the image in" },
{ PARAM_FLOAT, "width", "Width of the image in PostScript file" },
{ PARAM_FLOAT, "height", "Height of image in PostScript file" },
{ PARAM_FLOAT, "width", "Width of the image in PostScript file (0: use input image size)" },
{ PARAM_FLOAT, "height", "Height of image in PostScript file (0: use input image size)" },
{ PARAM_FLOAT, "x_offset", "X-offset to image from lower left corner" },
{ PARAM_FLOAT, "y_offset", "Y-offset to image from lower left corner" },
{ PARAM_INT32, "unit", "Unit for width/height/offset. 0: inches, 1: millimeters" },
@ -319,7 +320,7 @@ query (void)
gimp_install_procedure ("file_ps_load",
_("load file of PostScript/PDF file format"),
_("load file of PostScript/PDF file format"),
"Peter Kirchgessner <pkirchg@aol.com>",
"Peter Kirchgessner <peter@kirchgessner.net>",
"Peter Kirchgessner",
dversio,
"<Load>/PostScript",
@ -331,7 +332,7 @@ query (void)
gimp_install_procedure ("file_ps_load_setargs",
"set additional parameters for procedure file_ps_load",
"set additional parameters for procedure file_ps_load",
"Peter Kirchgessner <pkirchg@aol.com>",
"Peter Kirchgessner <peter@kirchgessner.net>",
"Peter Kirchgessner",
dversio,
NULL,
@ -360,6 +361,36 @@ those with alpha channels."),
}
#ifdef GIMP_HAVE_RESOLUTION_INFO
static void
ps_set_save_size (PSSaveVals *vals,
gint32 image_ID)
{gdouble xres, yres, factor, iw, ih;
guint width, height;
GUnit unit;
gimp_image_get_resolution (image_ID, &xres, &yres);
unit = gimp_image_get_unit (image_ID);
factor = gimp_unit_get_factor (unit);
if ((factor < 1e-5) || (xres < 1e-5) || (yres < 1e-5))
{
factor = 1.0; xres = yres = 72.0;
}
/* Calculate size of image in inches */
width = gimp_image_width (image_ID);
height = gimp_image_height (image_ID);
iw = width / xres / factor;
ih = height / yres / factor;
if (vals->unit_mm)
{
iw *= 25.4; ih *= 25.4;
}
vals->width = iw;
vals->height = ih;
}
#endif
static void
run (char *name,
int nparams,
@ -443,6 +474,9 @@ run (char *name,
if ((k >= 4) && (strcmp (param[3].data.d_string+k-4, ".eps") == 0))
psvals.eps = 1;
#ifdef GIMP_HAVE_RESOLUTION_INFO
ps_set_save_size (&psvals, param[1].data.d_int32);
#endif
/* First acquire information with a dialog */
if (! save_dialog ())
return;
@ -480,6 +514,10 @@ run (char *name,
if (status == STATUS_SUCCESS)
{
#ifdef GIMP_HAVE_RESOLUTION_INFO
if ((psvals.width == 0.0) || (psvals.height == 0.0))
ps_set_save_size (&psvals, param[1].data.d_int32);
#endif
check_save_vals ();
if (save_image (param[3].data.d_string, param[1].data.d_int32,
param[2].data.d_int32))
@ -530,7 +568,7 @@ load_image (char *filename)
gint32 image_ID, *image_list, *nl;
guint page_count;
FILE *ifp;
char *temp,*format;
char *temp;
int llx, lly, urx, ury;
int k, n_images, max_images, max_pagenum;
@ -592,6 +630,11 @@ load_image (char *filename)
{
image_ID = load_ps (filename, page_count, ifp, llx, lly, urx, ury);
if (image_ID == -1) break;
#ifdef GIMP_HAVE_RESOLUTION_INFO
gimp_image_set_resolution (image_ID, (float)plvals.resolution,
(float)plvals.resolution);
gimp_image_set_unit (image_ID, UNIT_INCH);
#endif
if (n_images == max_images)
{
nl = (gint32 *)g_realloc (image_list, (max_images+10)*sizeof (gint32));

View File

@ -40,10 +40,11 @@
* V 1.05, PK, 21-Sep-98: Write b/w-images (indexed) using image-operator
* V 1.06, PK, 22-Dec-98: Fix problem with writing color PS files.
* Ghostview may hang when displaying the files.
* V 1.07, PK, 14-Sep-99: Add resolution to image
*/
#define VERSIO 1.06
static char dversio[] = "v1.06 22-Dec-98";
static char ident[] = "@(#) GIMP PostScript/PDF file-plugin v1.06 22-Dec-98";
#define VERSIO 1.07
static char dversio[] = "v1.07 14-Sep-99";
static char ident[] = "@(#) GIMP PostScript/PDF file-plugin v1.07 14-Sep-99";
#include "config.h"
#include <stdio.h>
@ -302,8 +303,8 @@ query (void)
{ PARAM_STRING, "filename", "The name of the file to save the image in" },
{ PARAM_STRING, "raw_filename",
"The name of the file to save the image in" },
{ PARAM_FLOAT, "width", "Width of the image in PostScript file" },
{ PARAM_FLOAT, "height", "Height of image in PostScript file" },
{ PARAM_FLOAT, "width", "Width of the image in PostScript file (0: use input image size)" },
{ PARAM_FLOAT, "height", "Height of image in PostScript file (0: use input image size)" },
{ PARAM_FLOAT, "x_offset", "X-offset to image from lower left corner" },
{ PARAM_FLOAT, "y_offset", "Y-offset to image from lower left corner" },
{ PARAM_INT32, "unit", "Unit for width/height/offset. 0: inches, 1: millimeters" },
@ -319,7 +320,7 @@ query (void)
gimp_install_procedure ("file_ps_load",
_("load file of PostScript/PDF file format"),
_("load file of PostScript/PDF file format"),
"Peter Kirchgessner <pkirchg@aol.com>",
"Peter Kirchgessner <peter@kirchgessner.net>",
"Peter Kirchgessner",
dversio,
"<Load>/PostScript",
@ -331,7 +332,7 @@ query (void)
gimp_install_procedure ("file_ps_load_setargs",
"set additional parameters for procedure file_ps_load",
"set additional parameters for procedure file_ps_load",
"Peter Kirchgessner <pkirchg@aol.com>",
"Peter Kirchgessner <peter@kirchgessner.net>",
"Peter Kirchgessner",
dversio,
NULL,
@ -360,6 +361,36 @@ those with alpha channels."),
}
#ifdef GIMP_HAVE_RESOLUTION_INFO
static void
ps_set_save_size (PSSaveVals *vals,
gint32 image_ID)
{gdouble xres, yres, factor, iw, ih;
guint width, height;
GUnit unit;
gimp_image_get_resolution (image_ID, &xres, &yres);
unit = gimp_image_get_unit (image_ID);
factor = gimp_unit_get_factor (unit);
if ((factor < 1e-5) || (xres < 1e-5) || (yres < 1e-5))
{
factor = 1.0; xres = yres = 72.0;
}
/* Calculate size of image in inches */
width = gimp_image_width (image_ID);
height = gimp_image_height (image_ID);
iw = width / xres / factor;
ih = height / yres / factor;
if (vals->unit_mm)
{
iw *= 25.4; ih *= 25.4;
}
vals->width = iw;
vals->height = ih;
}
#endif
static void
run (char *name,
int nparams,
@ -443,6 +474,9 @@ run (char *name,
if ((k >= 4) && (strcmp (param[3].data.d_string+k-4, ".eps") == 0))
psvals.eps = 1;
#ifdef GIMP_HAVE_RESOLUTION_INFO
ps_set_save_size (&psvals, param[1].data.d_int32);
#endif
/* First acquire information with a dialog */
if (! save_dialog ())
return;
@ -480,6 +514,10 @@ run (char *name,
if (status == STATUS_SUCCESS)
{
#ifdef GIMP_HAVE_RESOLUTION_INFO
if ((psvals.width == 0.0) || (psvals.height == 0.0))
ps_set_save_size (&psvals, param[1].data.d_int32);
#endif
check_save_vals ();
if (save_image (param[3].data.d_string, param[1].data.d_int32,
param[2].data.d_int32))
@ -530,7 +568,7 @@ load_image (char *filename)
gint32 image_ID, *image_list, *nl;
guint page_count;
FILE *ifp;
char *temp,*format;
char *temp;
int llx, lly, urx, ury;
int k, n_images, max_images, max_pagenum;
@ -592,6 +630,11 @@ load_image (char *filename)
{
image_ID = load_ps (filename, page_count, ifp, llx, lly, urx, ury);
if (image_ID == -1) break;
#ifdef GIMP_HAVE_RESOLUTION_INFO
gimp_image_set_resolution (image_ID, (float)plvals.resolution,
(float)plvals.resolution);
gimp_image_set_unit (image_ID, UNIT_INCH);
#endif
if (n_images == max_images)
{
nl = (gint32 *)g_realloc (image_list, (max_images+10)*sizeof (gint32));

View File

@ -95,6 +95,7 @@ void fli_read_header(FILE *f, s_fli_header *fli_header)
fli_header->speed=fli_read_long(f); /* 16 */
} else {
fprintf(stderr, "error: magic number is wrong !\n");
fli_header->magic = NO_HEADER;
}
}
}

View File

@ -50,6 +50,7 @@ typedef struct _fli_chunk {
} s_fli_chunk;
/** chunk magics */
#define NO_HEADER 0
#define HEADER_FLI 0xAF11
#define HEADER_FLC 0xAF12
#define FRAME 0xF1FA

View File

@ -124,7 +124,7 @@ static void query ()
* Load/save procedures
*/
gimp_install_procedure (
"file_fli_load",
"file_fli_load_frames",
"load FLI-movies",
"This is an experimantal plug-in to handle FLI movies",
"Jens Ch. Restemeier",
@ -135,7 +135,19 @@ static void query ()
PROC_PLUG_IN,
nload_args, nload_return_vals,
load_args, load_return_vals);
gimp_register_magic_load_handler ("file_fli_load", "fli", "", "4,byte,0x11,4,byte,0x12,5,byte,0xAF");
gimp_install_procedure (
"file_fli_load",
"load FLI-movies",
"This is an experimantal plug-in to handle FLI movies",
"Jens Ch. Restemeier",
"Jens Ch. Restemeier",
"1997",
"<Load>/FLI",
NULL,
PROC_PLUG_IN,
nload_args - 2, nload_return_vals,
load_args, load_return_vals);
gimp_register_magic_load_handler ("file_fli_load", "fli", "", "");
gimp_install_procedure (
"file_fli_save",
@ -181,29 +193,40 @@ static void run (gchar *name, gint nparams, GParam *param, gint *nreturn_vals, G
values[0].type = PARAM_STATUS;
values[0].data.d_status = STATUS_CALLING_ERROR;
if (strcmp (name, "file_fli_load") == 0) {
if (strncmp (name, "file_fli_load", strlen("file_fli_load")) == 0) {
switch (run_mode) {
case RUN_NONINTERACTIVE: {
gint32 image_id;
gint32 pc;
gint32 to_frame;
gint32 from_frame;
/*
* check for valid parameters:
* (Or can I trust GIMP ?)
*/
if (nparams!=nload_args) {
if ((nparams < nload_args - 2) || (nload_args < nparams)) {
*nreturn_vals = 1;
values[0].data.d_status = STATUS_CALLING_ERROR;
return;
}
for (pc=0; pc<nload_args; pc++) {
for (pc=0; pc<nload_args -2; pc++) {
if (load_args[pc].type!=param[pc].type) {
*nreturn_vals = 1;
values[0].data.d_status = STATUS_CALLING_ERROR;
return;
}
}
image_id = load_image (param[1].data.d_string, param[2].data.d_int32, param[3].data.d_int32);
for (pc=nload_args -2; pc<nparams; pc++) {
if (load_args[pc].type!=param[pc].type) {
*nreturn_vals = 1;
values[0].data.d_status = STATUS_CALLING_ERROR;
return;
}
}
to_frame = (nparams < nload_args - 1) ? 1 : param[3].data.d_int32;
from_frame = (nparams < nload_args) ? -1 : param[4].data.d_int32;
image_id = load_image (param[1].data.d_string, to_frame, from_frame);
if (image_id != -1) {
*nreturn_vals = 2;
@ -374,7 +397,10 @@ gint32 load_image (gchar *filename, gint32 from_frame, gint32 to_frame)
return -1;
}
fli_read_header(f, &fli_header);
fseek(f,128,SEEK_SET);
if (fli_header.magic == NO_HEADER)
return -1;
else
fseek(f,128,SEEK_SET);
/*
* Fix parameters