pdf-devel
[Top][All Lists]
Advanced

[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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

reply via email to

[Prev in Thread] Current Thread [Next in Thread]