pdf-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[pdf-devel] Patch for FS#87, pdf-filter new options


From: gerel
Subject: [pdf-devel] Patch for FS#87, pdf-filter new options
Date: Sat, 24 Jan 2009 12:53:51 -0800 (PST)

Hi all,

I attach a patch for task #87, tested with null filter and seems to work ok.

##
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: address@hidden
# target_branch: file:///home/gerel/PROJECTS/libgnupdf/trunk/
# testament_sha1: c271e74e7724f89cb47855ddb6bcd4e1ddf7efda
# timestamp: 2009-01-24 17:38:53 -0300
# base_revision_id: address@hidden
# 
# Begin patch
=== modified file 'ChangeLog'
--- ChangeLog   2009-01-19 22:29:21 +0000
+++ ChangeLog   2009-01-24 20:38:14 +0000
@@ -1,3 +1,9 @@
+2009-01-24  Gerardo E. Gidoni  <address@hidden>
+
+       * utils/pdf-filter.c: added --input-file and --output-file options.
+
+       * utils/pdf-filter.h: same.
+
 2009-01-19  Jose E. Marchesi  <address@hidden>
 
        * src/base/pdf-types.h: Progress monitor data types implemented.

=== modified file 'utils/pdf-filter.c'
--- utils/pdf-filter.c  2009-01-13 21:56:12 +0000
+++ utils/pdf-filter.c  2009-01-24 20:38:14 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "09/01/13 22:30:03 jemarch"
+/* -*- mode: C -*- Time-stamp: "2009-01-24 17:33:37 gerel"
  *
  *       File:         pdf-filter.c
  *       Date:         Tue Jul 10 18:42:07 2007
@@ -52,6 +52,8 @@
     {"usage", no_argument, NULL, USAGE_ARG},
     {"version", no_argument, NULL, VERSION_ARG},
     {"readmode", no_argument, NULL, READ_ARG},
+    {"input-file", required_argument, NULL, INFILE_ARG},
+    {"output-file", required_argument, NULL, OUTFILE_ARG},
     {"cache", required_argument, NULL, CACHE_ARG},
     {"null", no_argument, NULL, NULL_FILTER_ARG},
     {"ahexdec", no_argument, NULL, ASCIIHEXDEC_FILTER_ARG},
@@ -96,6 +98,8 @@
 available options\n\
   --readmode                          test the stream in read mode instead\n\
                                        of write mode.\n\
+  -i FILE, --input-file=FILE          Use a given file as the input.\n\
+  -o FILE, --output-file=FILE         Use a given file as the output.\n\
   --cache=NUM                         set the stream cache size.\n\n\
 available filters\n\
   --null                              use the NULL filter\n\
@@ -138,31 +142,44 @@
 char *pdf_filter_help_msg = "";
 
 static pdf_stm_t
-create_stream (int argc, char* argv[], pdf_bool_t* mode, pdf_status_t* 
last_ret);
+create_stream (int argc, char* argv[], pdf_bool_t* mode, pdf_status_t* 
last_ret,
+               pdf_bool_t * read_pdf_fsys, pdf_bool_t * write_pdf_fsys,
+               pdf_stm_t * fsys_stm);
 
 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);
+process_stream (pdf_stm_t, pdf_bool_t mode, pdf_bool_t read_pdf_fsys,
+                pdf_bool_t write_pdf_fsys, pdf_stm_t fsys_stm);
+
+static
+open_file (pdf_char_t * name, pdf_fsys_file_t * file,
+           enum pdf_fsys_file_mode_e mode);
 
 int
 main (int argc, char *argv[])
 {
-  pdf_stm_t stm;
-  pdf_bool_t read_mode;
+  pdf_stm_t stm,fsys_stm;
+  pdf_bool_t read_mode,read_pdf_fsys,write_pdf_fsys;
   pdf_status_t last_ret;
   
-  stm = create_stream (argc, argv, &read_mode, &last_ret);
+  stm = create_stream (argc, argv, &read_mode, &last_ret, &read_pdf_fsys,
+                       &write_pdf_fsys, &fsys_stm);
   install_filters (argc, argv, stm, last_ret);
-  process_stream (stm, read_mode);
+  process_stream (stm, read_mode, read_pdf_fsys,write_pdf_fsys, fsys_stm);
   pdf_stm_destroy (stm);
+  if (read_pdf_fsys || write_pdf_fsys)
+    {
+      pdf_stm_destroy (fsys_stm);
+    }
  
   return 0;
 }
 
 static void
-process_stream (pdf_stm_t stm, pdf_bool_t read_mode)
+process_stream (pdf_stm_t stm, pdf_bool_t read_mode, pdf_bool_t read_pdf_fsys,
+                pdf_bool_t write_pdf_fsys, pdf_stm_t fsys_stm)
 {
 #define BUF_SIZE 256
   
@@ -174,15 +191,27 @@
   if (read_mode)
     {
       /* Read from the buffer which will process anything on stdin
-        and push to stdout */
+         and push to stdout */
       do
         {
           ret = pdf_stm_read (stm, buf, BUF_SIZE, &read_bytes);
-          if(fwrite (buf, 1, read_bytes, stdout) != read_bytes)
-            {
-              fprintf(stderr,"fwrite failed (%ld)", (long)read_bytes);
-             }
-           }
+          if (write_pdf_fsys)
+            {
+              ret = pdf_stm_write (fsys_stm, buf, read_bytes, &written_bytes);
+              if (ret != PDF_OK)
+                {
+                  pdf_error (ret, stderr, "while writing to stream");
+                  exit (1);
+                }            
+            }
+          else
+            {
+              if(fwrite (buf, 1, read_bytes, stdout) != read_bytes)
+                {
+                  fprintf(stderr,"fwrite failed (%ld)", (long)read_bytes);
+                }
+            }
+        }
       while (read_bytes == BUF_SIZE);
     }
   else
@@ -190,25 +219,35 @@
       /* Write stdin into the write stream,
         which will be transparently writting the output to stdout. */
       do
-       {
-         read_bytes = fread (buf, 1, BUF_SIZE, stdin);
-         ret = pdf_stm_write (stm, buf, read_bytes, &written_bytes);
-       }
+        {
+          if (read_pdf_fsys)
+            {
+              ret = pdf_stm_read (fsys_stm, buf, BUF_SIZE, &read_bytes);
+            }
+          else
+            {
+              read_bytes = fread (buf, 1, BUF_SIZE, stdin);
+            }
+          ret = pdf_stm_write (stm, buf, read_bytes, &written_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)
+              pdf_status_t* last_ret, pdf_bool_t * read_pdf_fsys,
+               pdf_bool_t * write_pdf_fsys, pdf_stm_t * fsys_stm)
 {
   char c;
   pdf_status_t ret;
   pdf_size_t cache_size;
   pdf_stm_t stm;
   pdf_bool_t finish;
+  pdf_char_t *infile_name=NULL,*outfile_name=NULL;
+  pdf_fsys_file_t infile, outfile;
 
   finish = PDF_FALSE;
   cache_size = 0;
@@ -217,7 +256,7 @@
   while (!finish &&
         (ret = getopt_long (argc,
                             argv,
-                            "",
+                            "i:o:",
                             GNU_longOptions, 
                             NULL)) != -1)
     {
@@ -253,6 +292,20 @@
            cache_size = atoi (optarg);
            break;
          }
+        case INFILE_ARG:
+        case 'i':
+          {
+            infile_name = pdf_alloc (strlen(optarg)+1);
+            strcpy (infile_name, optarg);
+            break;
+          }
+        case OUTFILE_ARG:
+        case 'o':
+          {
+            outfile_name = pdf_alloc (strlen(optarg)+1);
+            strcpy (outfile_name, optarg);
+            break;
+          }
        case '?':
        default:
          {
@@ -269,16 +322,75 @@
   */
   *last_ret = ret;
 
-  ret = pdf_stm_cfile_new (*read_mode ? stdin : stdout,
+  if (pdf_text_init() != PDF_OK)
+    {
+      fprintf (stderr, "Error initializing the text module.\n");
+      exit(1);
+    }
+
+  *read_pdf_fsys = PDF_FALSE;
+  *write_pdf_fsys = PDF_FALSE;
+  if (infile_name == NULL && outfile_name == NULL)
+    {
+      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)
+      if (ret != PDF_OK)
+        {
+          pdf_error (ret, stderr, "while creating the write stream");
+          exit (1);
+        }
+    }
+  else
     {
-      pdf_error (ret, stderr, "while creating the write stream");
-      exit (1);
+      if (infile_name != NULL)
+        {
+          open_file (infile_name, &infile, PDF_FSYS_OPEN_MODE_READ);
+          *read_pdf_fsys = PDF_TRUE;
+          ret = pdf_stm_file_new (infile,0,cache_size,PDF_STM_READ,
+                                  *read_mode ? &stm : fsys_stm);
+          if (ret != PDF_OK)
+            {
+              pdf_error (ret, stderr, "while creating the read stream");
+              exit (1);
+            }
+        }
+      else
+        {
+          ret = pdf_stm_cfile_new (stdin,0,cache_size,PDF_STM_READ,
+                                   *read_mode ? &stm : fsys_stm);
+          if (ret != PDF_OK)
+            {
+              pdf_error (ret, stderr, "while creating the read stream");
+              exit (1);
+            }
+        }
+
+      if (outfile_name != NULL)
+        {
+          open_file (outfile_name, &outfile, PDF_FSYS_OPEN_MODE_WRITE);
+          *write_pdf_fsys = PDF_TRUE;
+          ret = pdf_stm_file_new (outfile,0,cache_size,PDF_STM_WRITE,
+                                  *read_mode ? fsys_stm : &stm);
+          if (ret != PDF_OK)
+            {
+              pdf_error (ret, stderr, "while creating the write stream");
+              exit (1);
+            }
+        }
+      else
+        {
+          ret = pdf_stm_cfile_new (stdout,0,cache_size,PDF_STM_WRITE,
+                                   *read_mode ? fsys_stm : &stm);
+          if (ret != PDF_OK)
+            {
+              pdf_error (ret, stderr, "while creating the write stream");
+              exit (1);
+            }
+
+        }
     }
 
   return stm;
@@ -747,4 +859,28 @@
 
 }
 
+static
+open_file (pdf_char_t * name, pdf_fsys_file_t * file,
+           enum pdf_fsys_file_mode_e mode)
+{
+  pdf_status_t ret;
+  pdf_text_t path;
+  pdf_char_t * rem;
+  pdf_size_t rem_len;
+
+  ret = pdf_text_new_from_pdf_string(name, strlen(name), &rem, &rem_len, 
&path);
+  if (ret != PDF_OK)
+    {
+      pdf_error (ret, stderr, "while creating pdf text path");
+      exit (1);
+    }
+
+  ret = pdf_fsys_file_open (NULL, path, mode, file);
+  if (ret != PDF_OK)
+    {
+      pdf_error (ret, stderr, "while opening file '%s'", name);
+      exit (1);
+    } 
+}
+
 /* End of pdf_filter.c */

=== modified file 'utils/pdf-filter.h'
--- utils/pdf-filter.h  2008-12-27 19:54:54 +0000
+++ utils/pdf-filter.h  2009-01-24 20:38:14 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "08/12/27 20:11:16 jemarch"
+/* -*- mode: C -*- Time-stamp: "2009-01-23 12:06:54 gerel"
  *
  *       File:         pdf-filter.h
  *       Date:         Tue Jul 10 18:40:55 2007
@@ -37,6 +37,8 @@
   USAGE_ARG,
   VERSION_ARG,
   READ_ARG,
+  INFILE_ARG,
+  OUTFILE_ARG,
   CACHE_ARG,
   NULL_FILTER_ARG,
   ASCIIHEXDEC_FILTER_ARG,

# Begin bundle
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
/i7kinChIAXtpLw=
###

regards,
-gerel




reply via email to

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