[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [pdf-devel] Streams solution proposal
From: |
Juan Pedro Bolivar Puente |
Subject: |
Re: [pdf-devel] Streams solution proposal |
Date: |
Sat, 04 Oct 2008 19:01:52 +0200 |
User-agent: |
Mozilla-Thunderbird 2.0.0.16 (X11/20080724) |
Forgot to attach the patch :)
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: address@hidden
# target_branch: http://bzr.sv.gnu.org/r/pdf/libgnupdf/branches/trunk
# testament_sha1: 3bdfc471b132533f1e5d48722b2804b456318516
# timestamp: 2008-10-04 18:46:42 +0200
# base_revision_id: address@hidden
#
# Begin patch
=== modified file 'AUTHORS'
--- AUTHORS 2008-09-28 10:39:11 +0000
+++ AUTHORS 2008-10-04 16:40:25 +0000
@@ -120,6 +120,8 @@
src/base/pdf-stm-f-pred.h src/base/pdf-stm-f-lzw.c
src/base/pdf-stm-f-lzw.h
and changed utils/pdf-filter.c utils/pdf-filter.h
+ src/base/pdf-stm.c src/base/pdf-stm.h
+ src/base/pdf-stm-be.c src/base/pdf-stm-be.h
Karl Berry: changed doc/gnupdf.texi doc/gnupdf-utils.texi
doc/Makefile.am
=== modified file 'ChangeLog'
--- ChangeLog 2008-10-04 12:39:06 +0000
+++ ChangeLog 2008-10-04 16:40:25 +0000
@@ -1,3 +1,15 @@
+2008-10-04 Juan Pedro BolÃvar Puente <address@hidden>
+
+ * src/base/pdf-stm-be.*: Added cfile stream backend for
+ input and output to FILE* C streams.
+
+ * src/base/pdf-stm.c (pdf_stm_read): Fixed bug that lead
+ to infinite loop.
+
+ * utils/pdf-util.*: Update to correctly use new streams
+ architecture. Deprecated options deleted. Added
+ '--readmode' and '--cache' options.
+
2008-10-04 Jose E. Marchesi <address@hidden>
* src/base/pdf-stm-filter.c (pdf_stm_filter_new): Initialize
=== modified file 'src/base/pdf-stm-be.c'
--- src/base/pdf-stm-be.c 2008-10-02 20:49:15 +0000
+++ src/base/pdf-stm-be.c 2008-10-04 16:34:37 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "08/10/02 00:32:07 jemarch"
+/* -*- mode: C -*- Time-stamp: "2008-09-24 18:45:45 gerel"
*
* File: pdf-stm-be.c
* Date: Wed Jun 18 21:15:16 2008
@@ -31,12 +31,43 @@
static pdf_off_t pdf_stm_be_file_seek (pdf_stm_be_t be,
pdf_off_t pos);
static pdf_off_t pdf_stm_be_file_tell (pdf_stm_be_t be);
+static pdf_size_t pdf_stm_be_cfile_read (pdf_stm_be_t be,
+ pdf_char_t *buffer,
+ pdf_size_t bytes);
+static pdf_size_t pdf_stm_be_cfile_write (pdf_stm_be_t be,
+ pdf_char_t *buffer,
+ pdf_size_t bytes);
+static pdf_off_t pdf_stm_be_cfile_seek (pdf_stm_be_t be,
+ pdf_off_t pos);
+static pdf_off_t pdf_stm_be_cfile_tell (pdf_stm_be_t be);
/*
* Public functions
*/
pdf_stm_be_t
+pdf_stm_be_new_cfile (FILE* file,
+ pdf_off_t pos)
+{
+ pdf_stm_be_t new;
+
+ /* Allocate a new structure */
+ new = (pdf_stm_be_t) pdf_alloc (sizeof(struct pdf_stm_be_s));
+
+ /* Initialization */
+ new->type = PDF_STM_BE_CFILE;
+ new->data.cfile.file = file;
+ new->data.cfile.pos = pos;
+
+ if (pos)
+ {
+ pdf_stm_be_cfile_seek (new, pos);
+ }
+
+ return new;
+}
+
+pdf_stm_be_t
pdf_stm_be_new_file (pdf_fsys_file_t file,
pdf_off_t pos)
{
@@ -105,6 +136,13 @@
bytes);
break;
}
+ case PDF_STM_BE_CFILE:
+ {
+ readed_bytes = pdf_stm_be_cfile_read (be,
+ buffer,
+ bytes);
+ break;
+ }
default:
{
/* Uh oh */
@@ -139,6 +177,13 @@
bytes);
break;
}
+ case PDF_STM_BE_CFILE:
+ {
+ written_bytes = pdf_stm_be_cfile_write (be,
+ buffer,
+ bytes);
+ break;
+ }
default:
{
/* Uh oh */
@@ -168,6 +213,11 @@
result = pdf_stm_be_file_seek (be, pos);
break;
}
+ case PDF_STM_BE_CFILE:
+ {
+ result = pdf_stm_be_cfile_seek (be, pos);
+ break;
+ }
default:
{
/* Uh oh */
@@ -195,6 +245,11 @@
result = pdf_stm_be_file_tell (be);
break;
}
+ case PDF_STM_BE_CFILE:
+ {
+ result = pdf_stm_be_cfile_tell (be);
+ break;
+ }
default:
{
/* Uh oh */
@@ -413,4 +468,69 @@
return be->data.file.pos;
}
+/* cfile backend implementation */
+
+static pdf_off_t
+pdf_stm_be_cfile_seek (pdf_stm_be_t be,
+ pdf_off_t pos)
+{
+ pdf_off_t max_pos;
+
+ fseek (be->data.cfile.file, 0, SEEK_END);
+ max_pos = ftell (be->data.cfile.file);
+
+ /* Check the requested position */
+ if (pos < 0)
+ {
+ pos = 0;
+ }
+ if (pos > max_pos)
+ {
+ pos = max_pos - 1;
+ }
+
+ be->data.cfile.pos = pos;
+ fseek (be->data.cfile.file,
+ be->data.cfile.pos,
+ SEEK_SET);
+
+ return pos;
+}
+
+static pdf_off_t
+pdf_stm_be_cfile_tell (pdf_stm_be_t be)
+{
+ return be->data.cfile.pos;
+}
+
+static pdf_size_t
+pdf_stm_be_cfile_read (pdf_stm_be_t be,
+ pdf_char_t *buffer,
+ pdf_size_t bytes)
+{
+ pdf_size_t readed_bytes;
+
+ /* Read the requested number of bytes */
+ readed_bytes = fread (buffer,
+ 1, bytes,
+ be->data.cfile.file);
+
+ return readed_bytes;
+}
+
+static pdf_size_t
+pdf_stm_be_cfile_write (pdf_stm_be_t be,
+ pdf_char_t *buffer,
+ pdf_size_t bytes)
+{
+ pdf_size_t written_bytes;
+
+ /* Write the requested number of bytes */
+ written_bytes = fwrite (buffer,
+ 1, bytes,
+ be->data.cfile.file);
+
+ return written_bytes;
+}
+
/* End of pdf-stm-be.c */
=== modified file 'src/base/pdf-stm-be.h'
--- src/base/pdf-stm-be.h 2008-09-20 17:14:04 +0000
+++ src/base/pdf-stm-be.h 2008-10-04 16:34:37 +0000
@@ -13,6 +13,7 @@
#include <config.h>
#include <pdf-types.h>
#include <pdf-fsys.h>
+#include <stdio.h>
/* BEGIN PUBLIC */
@@ -20,7 +21,8 @@
enum pdf_stm_be_type_e
{
PDF_STM_BE_MEM = 0,
- PDF_STM_BE_FILE
+ PDF_STM_BE_FILE,
+ PDF_STM_BE_CFILE
};
/* Backend data type */
@@ -30,6 +32,12 @@
pdf_off_t pos; /* Current position */
};
+struct pdf_stm_be_cfile_s
+{
+ FILE* file;
+ pdf_off_t pos;
+};
+
struct pdf_stm_be_mem_s
{
pdf_char_t *buffer; /* Buffer contents */
@@ -45,6 +53,7 @@
{
struct pdf_stm_be_mem_s mem;
struct pdf_stm_be_file_s file;
+ struct pdf_stm_be_cfile_s cfile;
} data;
};
@@ -56,6 +65,8 @@
* Public API
*/
+pdf_stm_be_t pdf_stm_be_new_cfile (FILE* file,
+ pdf_off_t pos);
pdf_stm_be_t pdf_stm_be_new_file (pdf_fsys_file_t file,
pdf_off_t pos);
pdf_stm_be_t pdf_stm_be_new_mem (pdf_char_t *buffer,
=== modified file 'src/base/pdf-stm.c'
--- src/base/pdf-stm.c 2008-10-02 20:49:15 +0000
+++ src/base/pdf-stm.c 2008-10-04 16:34:37 +0000
@@ -44,6 +44,28 @@
*/
pdf_status_t
+pdf_stm_cfile_new (FILE* file,
+ pdf_off_t offset,
+ pdf_size_t cache_size,
+ enum pdf_stm_mode_e mode,
+ pdf_stm_t *stm)
+{
+ /* Allocate memory for the new stream */
+ *stm = pdf_stm_alloc ();
+
+ /* Initialize a file stream */
+ (*stm)->type = PDF_STM_FILE;
+ (*stm)->backend = pdf_stm_be_new_cfile (file,
+ offset);
+
+ /* Initialize the common parts */
+ return pdf_stm_init (cache_size,
+ mode,
+ *stm);
+}
+
+
+pdf_status_t
pdf_stm_file_new (pdf_fsys_file_t file,
pdf_off_t offset,
pdf_size_t cache_size,
@@ -57,8 +79,6 @@
(*stm)->type = PDF_STM_FILE;
(*stm)->backend = pdf_stm_be_new_file (file,
offset);
- pdf_stm_filter_set_be ((*stm)->filter,
- (*stm)->backend);
/* Initialize the common parts */
return pdf_stm_init (cache_size,
@@ -148,6 +168,7 @@
/* If the cache is empty, refill it with filtered data */
if (pdf_stm_buffer_eob_p (stm->cache))
{
+ pdf_stm_buffer_rewind (stm->cache);
ret = pdf_stm_filter_apply (stm->filter, PDF_FALSE);
}
=== modified file 'src/base/pdf-stm.h'
--- src/base/pdf-stm.h 2008-10-02 20:49:15 +0000
+++ src/base/pdf-stm.h 2008-10-04 16:34:37 +0000
@@ -96,6 +96,11 @@
*/
/* Creation and destruction */
+pdf_status_t pdf_stm_cfile_new (FILE* file,
+ pdf_off_t offset,
+ pdf_size_t cache_size,
+ enum pdf_stm_mode_e mode,
+ pdf_stm_t *stm);
pdf_status_t pdf_stm_file_new (pdf_fsys_file_t file,
pdf_off_t offset,
pdf_size_t cache_size,
=== modified file 'utils/pdf-filter.c'
--- utils/pdf-filter.c 2008-10-03 00:06:40 +0000
+++ utils/pdf-filter.c 2008-10-04 16:34:37 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "08/10/03 02:03:01 jemarch"
+/* -*- mode: C -*- Time-stamp: "08/09/28 12:54:36 jemarch"
*
* File: pdf-filter.c
* Date: Tue Jul 10 18:42:07 2007
@@ -30,9 +30,9 @@
#include <getopt.h>
#ifdef HAVE_MALLOC_H
- #include <malloc.h>
+#include <malloc.h>
#else
- #include <stdlib.h>
+#include <stdlib.h>
#endif /* HAVE_MALLOC_H */
#include <xalloc.h>
@@ -40,62 +40,51 @@
#include <pdf.h>
/*
- * Some default values for filters with arguments
- */
-
-#define DEF_LZW_EARLY_CHANGE PDF_FALSE
-#define DEF_PRED_ENC_TYPE PDF_STM_F_PREDENC_TIFF_PREDICTOR_2
-#define DEF_PRED_DEC_TYPE PDF_STM_F_PREDDEC_TIFF_PREDICTOR_2
-#define DEF_PRED_COLORS 3
-#define DEF_PRED_BPC 8
-#define DEF_PRED_COLUMS 32
-
-/*
* Command line options management
*/
static struct option GNU_longOptions[] =
-{
- {"help", no_argument, NULL, HELP_ARG},
- {"usage", no_argument, NULL, USAGE_ARG},
- {"version", no_argument, NULL, VERSION_ARG},
- {"null", no_argument, NULL, NULL_FILTER_ARG},
- {"ahexdec", no_argument, NULL, ASCIIHEXDEC_FILTER_ARG},
- {"ahexenc", no_argument, NULL, ASCIIHEXENC_FILTER_ARG},
- {"a85dec", no_argument, NULL, ASCII85DEC_FILTER_ARG},
- {"a85enc", no_argument, NULL, ASCII85ENC_FILTER_ARG},
- {"lzwenc", no_argument, NULL, LZWENC_FILTER_ARG},
- {"lzwdec", no_argument, NULL, LZWDEC_FILTER_ARG},
+ {
+ {"help", no_argument, NULL, HELP_ARG},
+ {"usage", no_argument, NULL, USAGE_ARG},
+ {"version", no_argument, NULL, VERSION_ARG},
+ {"readmode", no_argument, NULL, READ_ARG},
+ {"cache", required_argument, NULL, CACHE_ARG},
+ {"null", no_argument, NULL, NULL_FILTER_ARG},
+ {"ahexdec", no_argument, NULL, ASCIIHEXDEC_FILTER_ARG},
+ {"ahexenc", no_argument, NULL, ASCIIHEXENC_FILTER_ARG},
+ {"a85dec", no_argument, NULL, ASCII85DEC_FILTER_ARG},
+ {"a85enc", no_argument, NULL, ASCII85ENC_FILTER_ARG},
+ {"lzwenc", no_argument, NULL, LZWENC_FILTER_ARG},
+ {"lzwdec", no_argument, NULL, LZWDEC_FILTER_ARG},
#ifdef HAVE_LIBZ
- {"flatedec", no_argument, NULL, FLATEDEC_FILTER_ARG},
- {"flateenc", no_argument, NULL, FLATEENC_FILTER_ARG},
+ {"flatedec", no_argument, NULL, FLATEDEC_FILTER_ARG},
+ {"flateenc", no_argument, NULL, FLATEENC_FILTER_ARG},
#endif /* HAVE_LIBZ */
- {"rldec", no_argument, NULL, RUNLENGTHDEC_FILTER_ARG},
- {"rlenc", no_argument, NULL, RUNLENGTHENC_FILTER_ARG},
- {"cfaxdec", no_argument, NULL, CCITTFAXDEC_FILTER_ARG},
- {"jbig2dec", no_argument, NULL, JBIG2DEC_FILTER_ARG},
- {"dctdec", no_argument, NULL, DCTDEC_FILTER_ARG},
- {"jxpdec", no_argument, NULL, JXPDEC_FILTER_ARG},
- {"predenc", no_argument, NULL, PREDENC_FILTER_ARG},
- {"preddec", no_argument, NULL, PREDDEC_FILTER_ARG},
- {"lzw-earlychange", no_argument, NULL, LZW_EARLY_CHANGE_ARG},
- {"predenc-type", required_argument, NULL, PREDENC_TYPE_ARG},
- {"preddec-type", required_argument, NULL, PREDDEC_TYPE_ARG},
- {"pred-colors", required_argument, NULL, PRED_COLORS_ARG},
- {"pred-bpc", required_argument, NULL, PRED_BPC_ARG},
- {"pred-columns", required_argument, NULL, PRED_COLUMNS_ARG},
- {NULL, 0, NULL, 0}
-};
+ {"rldec", no_argument, NULL, RUNLENGTHDEC_FILTER_ARG},
+ {"rlenc", no_argument, NULL, RUNLENGTHENC_FILTER_ARG},
+ {"cfaxdec", no_argument, NULL, CCITTFAXDEC_FILTER_ARG},
+ {"jbig2dec", no_argument, NULL, JBIG2DEC_FILTER_ARG},
+ {"dctdec", no_argument, NULL, DCTDEC_FILTER_ARG},
+ {"jxpdec", no_argument, NULL, JXPDEC_FILTER_ARG},
+ {"predenc", no_argument, NULL, PREDENC_FILTER_ARG},
+ {"preddec", no_argument, NULL, PREDDEC_FILTER_ARG},
+ {NULL, 0, NULL, 0}
+ };
/* Messages */
char *pdf_filter_version_msg = "pdf_filter 0.1";
char *pdf_filter_usage_msg = "\
-Usage: pdf_filter [[FILTER FILTER_ARGS]...]\n\
+Usage: pdf_filter [[OPTIONS] [FILTER FILTER_ARGS]...]\n\
Filter the standard input with the specified PDF standard filters and \n\
write the result in the standard output.\n\
\n\
+availible options\
+ --readmode test the stream in read mode instead\
+ of write mode.\n\
+ --cache=NUM set the stream cache size.\n\n\
available filters\n\
--null use the NULL filter\n\
--ahexdec use the ASCII Hex decoder filter\n\
@@ -105,10 +94,10 @@
--lzwenc use the LZW encoder filter\n\
--lzwdec use the LZW decoder filter\n"
#ifdef HAVE_LIBZ
-" --flatedec use the Flate decoder filter\n\
+ " --flatedec use the Flate decoder filter\n\
--flateenc use the Flate encoder filter\n"
#endif /* HAVE_LIBZ */
-" --rldec use the Run Length decoder filter\n\
+ " --rldec use the Run Length decoder filter\n\
--rlenc use the Run Length encoder filter\n\
--cfaxdec use the CCITT Fax decoder filter\n\
--jbig2dec use the JBIG2 decoder filter\n\
@@ -130,71 +119,84 @@
char *pdf_filter_help_msg = "";
-typedef struct filter_args_s
-{
- int lzw_early_change;
- int pred_enc_type;
- int pred_dec_type;
- int pred_colors;
- int pred_bpc;
- int pred_columns;
-} filter_args_t;
-
-static void
-filter_args_init(filter_args_t* a)
-{
- /* a->lzw_early_change = DEF_LZW_EARLY_CHANGE;
- a->pred_enc_type = DEF_PRED_ENC_TYPE;
- a->pred_dec_type = DEF_PRED_DEC_TYPE;
- a->pred_colors = DEF_PRED_COLORS;
- a->pred_bpc = DEF_PRED_BPC;
- a->pred_columns = DEF_PRED_COLUMS; */
-}
+static pdf_stm_t
+create_stream (int argc, char* argv[], pdf_bool_t* mode, pdf_status_t*
last_ret);
+
+static void
+install_filters (int argc, char* argv[], pdf_stm_t stm, pdf_status_t ret);
+
+static void
+process_stream (pdf_stm_t, pdf_bool_t mode);
int
main (int argc, char *argv[])
{
+ pdf_stm_t stm;
+ pdf_bool_t read_mode;
+ pdf_status_t last_ret;
+
+ stm = create_stream (argc, argv, &read_mode, &last_ret);
+ install_filters (argc, argv, stm, last_ret);
+ process_stream (stm, read_mode);
+ pdf_stm_destroy (stm);
+
+ return 0;
+}
+
+static void
+process_stream (pdf_stm_t stm, pdf_bool_t read_mode)
+{
+#define BUF_SIZE 256
+
+ pdf_size_t read_bytes;
+ pdf_char_t buf [BUF_SIZE];
+
+ if (read_mode)
+ {
+ /* Read from the buffer which will process anything on stdin
+ and push to stdout */
+ do
+ {
+ read_bytes = pdf_stm_read (stm, buf, BUF_SIZE);
+ fwrite (buf, 1, read_bytes, stdout);
+ }
+ while (read_bytes == BUF_SIZE);
+ }
+ else
+ {
+ /* Write stdin into the write stream,
+ which will be transparently writting the output to stdout. */
+ do
+ {
+ read_bytes = fread (buf, 1, BUF_SIZE, stdin);
+ pdf_stm_write (stm, buf, read_bytes);
+ }
+ while (read_bytes == BUF_SIZE);
+ }
+
+#undef BUF_SIZE
+}
+
+static pdf_stm_t
+create_stream (int argc, char* argv[], pdf_bool_t* read_mode,
+ pdf_status_t* last_ret)
+{
char c;
- pdf_stm_t stm;
- pdf_char_t *buf;
- pdf_size_t buf_size;
pdf_status_t ret;
- pdf_hash_t null_filter_params;
- pdf_hash_t ahexenc_filter_params;
- pdf_hash_t ahexdec_filter_params;
- pdf_hash_t rlenc_filter_params;
- pdf_hash_t rldec_filter_params;
- /* pdf_hash_t a85enc_filter_params;
- pdf_hash_t a85dec_filter_params; */
- pdf_char_t *line;
- pdf_size_t line_bytes;
- pdf_size_t read_bytes;
- pdf_size_t written_bytes;
-
- /* Create the output buffer */
- buf_size = 4096;
- buf = pdf_alloc (buf_size);
-
- /* Create a writing memory stream */
- ret = pdf_stm_mem_new (buf,
- buf_size,
- 1, /* Use the default cache size */
- PDF_STM_WRITE,
- &stm);
- if (ret != PDF_OK)
- {
- pdf_error (ret, stderr, "while creating the write stream");
- exit (1);
- }
-
- /* filter_args_init(&args); */
-
- /* Manage command line arguments */
- while ((ret = getopt_long (argc,
- argv,
- "",
- GNU_longOptions,
- NULL)) != -1)
+ pdf_size_t cache_size;
+ pdf_stm_t stm;
+ pdf_bool_t finish;
+
+ finish = PDF_FALSE;
+ cache_size = 0;
+ *read_mode = PDF_FALSE;
+
+ while (!finish &&
+ (ret = getopt_long (argc,
+ argv,
+ "",
+ GNU_longOptions,
+ NULL)) != -1)
{
c = ret;
switch (c)
@@ -218,10 +220,63 @@
exit (0);
break;
}
+ case READ_ARG:
+ {
+ *read_mode = PDF_TRUE;
+ break;
+ }
+ case CACHE_ARG:
+ {
+ cache_size = atoi (optarg);
+ break;
+ }
+ case '?':
+ default:
+ {
+ finish = PDF_TRUE;
+ break;
+ }
+ }
+ }
+
+ /*
+ Store the return value, which may be the next param identifier,
+ so the install_filters or any other function can continue processing
+ arguments
+ */
+ *last_ret = ret;
+
+ ret = pdf_stm_cfile_new (*read_mode ? stdin : stdout,
+ 0,
+ cache_size,
+ *read_mode ? PDF_STM_READ : PDF_STM_WRITE,
+ &stm);
+
+ if (ret != PDF_OK)
+ {
+ pdf_error (ret, stderr, "while creating the write stream");
+ exit (1);
+ }
+
+ return stm;
+}
+
+static void
+install_filters (int argc, char* argv[], pdf_stm_t stm, pdf_status_t ret)
+{
+ char c;
+ pdf_hash_t filter_params;
+
+ /* Install filters */
+ do
+ {
+ c = ret;
+ switch (c)
+ {
/* FILTER INSTALLERS */
case NULL_FILTER_ARG:
{
- ret = pdf_hash_new (NULL, &null_filter_params);
+ ret = pdf_hash_new (NULL, &filter_params);
if (ret != PDF_OK)
{
pdf_error (ret, stderr, "while creating the null filter
parameters hash table");
@@ -230,12 +285,12 @@
pdf_stm_install_filter (stm,
PDF_STM_FILTER_NULL,
- null_filter_params);
+ filter_params);
break;
}
case ASCIIHEXDEC_FILTER_ARG:
{
- ret = pdf_hash_new (NULL, &ahexdec_filter_params);
+ ret = pdf_hash_new (NULL, &filter_params);
if (ret != PDF_OK)
{
pdf_error (ret, stderr, "while creating the ahexdec filter
parameters hash table");
@@ -244,12 +299,12 @@
pdf_stm_install_filter (stm,
PDF_STM_FILTER_AHEX_DEC,
- ahexenc_filter_params);
+ filter_params);
break;
}
case ASCIIHEXENC_FILTER_ARG:
{
- ret = pdf_hash_new (NULL, &ahexenc_filter_params);
+ ret = pdf_hash_new (NULL, &filter_params);
if (ret != PDF_OK)
{
pdf_error (ret, stderr, "while creating the ahexenc filter
parameters hash table");
@@ -258,68 +313,38 @@
pdf_stm_install_filter (stm,
PDF_STM_FILTER_AHEX_ENC,
- ahexenc_filter_params);
+ filter_params);
break;
}
case ASCII85DEC_FILTER_ARG:
{
- /* ret = pdf_hash_new (NULL, &a85dec_filter_params);
- if (ret != PDF_OK)
- {
- pdf_error (ret, stderr, "while creating the a85dec filter
parameters hash table");
- exit (1);
- }
-
- pdf_stm_install_filter (stm,
- PDF_STM_FILTER_A85_DEC,
- a85dec_filter_params); */
break;
}
case ASCII85ENC_FILTER_ARG:
{
- /* ret = pdf_hash_new (NULL, &a85enc_filter_params);
- if (ret != PDF_OK)
- {
- pdf_error (ret, stderr, "while creating the a85enc filter
parameters hash table");
- exit (1);
- }
-
- pdf_stm_install_filter (stm,
- PDF_STM_FILTER_A85_ENC,
- a85enc_filter_params); */
break;
}
case LZWENC_FILTER_ARG:
{
- /* pdf_stm_install_lzwenc_filter (input,
- PDF_STM_FILTER_READ,
- args.lzw_early_change); */
break;
}
case LZWDEC_FILTER_ARG:
{
- /* pdf_stm_install_lzwdec_filter (input,
- PDF_STM_FILTER_READ,
- args.lzw_early_change); */
break;
}
#ifdef HAVE_LIBZ
case FLATEDEC_FILTER_ARG:
{
- /* pdf_stm_install_flatedec_filter (input,
- PDF_STM_FILTER_READ); */
break;
}
case FLATEENC_FILTER_ARG:
{
- /* pdf_stm_install_flateenc_filter (input,
- PDF_STM_FILTER_READ); */
break;
}
#endif /* HAVE_LIBZ */
case RUNLENGTHDEC_FILTER_ARG:
{
- ret = pdf_hash_new (NULL, &rldec_filter_params);
+ ret = pdf_hash_new (NULL, &filter_params);
if (ret != PDF_OK)
{
pdf_error (ret, stderr, "while creating the rldec filter
parameters hash table");
@@ -328,21 +353,20 @@
pdf_stm_install_filter (stm,
PDF_STM_FILTER_RL_DEC,
- rldec_filter_params);
+ filter_params);
break;
}
case RUNLENGTHENC_FILTER_ARG:
{
- ret = pdf_hash_new (NULL, &rlenc_filter_params);
+ ret = pdf_hash_new (NULL, &filter_params);
if (ret != PDF_OK)
{
pdf_error (ret, stderr, "while creating the rlenc filter
parameters hash table");
exit (1);
}
-
pdf_stm_install_filter (stm,
PDF_STM_FILTER_RL_ENC,
- rlenc_filter_params);
+ filter_params);
break;
}
case CCITTFAXDEC_FILTER_ARG:
@@ -382,36 +406,7 @@
break;
}
/* FILTER OPTIONS: */
- case PREDDEC_TYPE_ARG:
- {
- /* args.pred_dec_type = atoi(optarg); */
- break;
- }
- case PREDENC_TYPE_ARG:
- {
- /* args.pred_enc_type = atoi(optarg); */
- break;
- }
- case PRED_COLORS_ARG:
- {
- /* args.pred_colors = atoi(optarg); */
- break;
- }
- case PRED_BPC_ARG:
- {
- /* args.pred_bpc = atoi(optarg); */
- break;
- }
- case PRED_COLUMNS_ARG:
- {
- /* args.pred_columns = atoi(optarg); */
- break;
- }
- case LZW_EARLY_CHANGE_ARG:
- {
- /* args.lzw_early_change = !args.lzw_early_change; */
- break;
- }
+ /* TODO */
/* ERROR: */
case '?':
{
@@ -422,41 +417,12 @@
}
}
}
-
- /* Write stdin into the write stream */
- line = NULL;
- line_bytes = 0;
- while ((read_bytes = getline ((char **) &line, &line_bytes, stdin)) != EOF)
- {
- pdf_stm_seek (stm, 0);
- pdf_stm_write (stm,
- line,
- read_bytes);
-
- pdf_stm_flush (stm, PDF_FALSE);
- fwrite ((char *) buf,
- pdf_stm_tell (stm),
- 1,
- stdout);
-
- pdf_dealloc (line);
- line = NULL;
- line_bytes = 0;
- }
-
- pdf_stm_seek (stm, 0);
- written_bytes = pdf_stm_flush (stm, PDF_TRUE);
- fwrite ((char *) buf,
- pdf_stm_tell (stm),
- 1,
- stdout);
-
- /* Cleanup */
- free (buf);
- pdf_stm_destroy (stm);
-
- return 0;
+ while ((ret = getopt_long (argc,
+ argv,
+ "",
+ GNU_longOptions,
+ NULL)) != -1);
+
}
-
/* End of pdf_filter.c */
=== modified file 'utils/pdf-filter.h'
--- utils/pdf-filter.h 2008-02-11 01:11:25 +0000
+++ utils/pdf-filter.h 2008-10-04 16:34:37 +0000
@@ -36,6 +36,8 @@
HELP_ARG,
USAGE_ARG,
VERSION_ARG,
+ READ_ARG,
+ CACHE_ARG,
NULL_FILTER_ARG,
ASCIIHEXDEC_FILTER_ARG,
ASCIIHEXENC_FILTER_ARG,
@@ -51,14 +53,8 @@
JBIG2DEC_FILTER_ARG,
DCTDEC_FILTER_ARG,
JXPDEC_FILTER_ARG,
- LZW_EARLY_CHANGE_ARG,
PREDENC_FILTER_ARG,
- PREDDEC_FILTER_ARG,
- PREDENC_TYPE_ARG,
- PREDDEC_TYPE_ARG,
- PRED_COLORS_ARG,
- PRED_BPC_ARG,
- PRED_COLUMNS_ARG
+ PREDDEC_FILTER_ARG
};
#endif /* pdf_filter.h */
# Begin bundle
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
- [pdf-devel] Streams solution proposal, Juan Pedro Bolivar Puente, 2008/10/02
- Re: [pdf-devel] Streams solution proposal, Juan Pedro Bolivar Puente, 2008/10/02
- Re: [pdf-devel] Streams solution proposal, jemarch, 2008/10/03
- Re: [pdf-devel] Streams solution proposal, Juan Pedro Bolivar Puente, 2008/10/04
- Re: [pdf-devel] Streams solution proposal, jemarch, 2008/10/04
- Re: [pdf-devel] Streams solution proposal, Juan Pedro Bolivar Puente, 2008/10/04
- Re: [pdf-devel] Streams solution proposal, jemarch, 2008/10/04
- Re: [pdf-devel] Streams solution proposal, Juan Pedro Bolivar Puente, 2008/10/04
- Re: [pdf-devel] Streams solution proposal, jemarch, 2008/10/04
- Re: [pdf-devel] Streams solution proposal,
Juan Pedro Bolivar Puente <=