summaryrefslogtreecommitdiff
path: root/apps/samshow.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/samshow.c')
-rw-r--r--apps/samshow.c99
1 files changed, 99 insertions, 0 deletions
diff --git a/apps/samshow.c b/apps/samshow.c
new file mode 100644
index 00000000..d84799a0
--- /dev/null
+++ b/apps/samshow.c
@@ -0,0 +1,99 @@
+#include "fitz.h"
+#include "samus.h"
+
+int runzip(int argc, char **argv)
+{
+ fz_error *error;
+ fz_buffer *buf;
+ sa_zip *zip;
+ int i;
+
+ error = sa_openzip(&zip, argv[1]);
+ if (error)
+ fz_abort(error);
+
+ if (argc == 2)
+ sa_debugzip(zip);
+
+ for (i = 2; i < argc; i++)
+ {
+ error = sa_openzipentry(zip, argv[i]);
+ if (error)
+ fz_abort(error);
+ error = fz_readfile(&buf, zip->file);
+ if (error)
+ fz_abort(error);
+ sa_closezipentry(zip);
+
+ fwrite(buf->rp, 1, buf->wp - buf->rp, stdout);
+
+ fz_dropbuffer(buf);
+ }
+
+ sa_closezip(zip);
+
+ return 0;
+}
+
+int runxml(int argc, char **argv)
+{
+ fz_error *error;
+ fz_file *file;
+ sa_xmlparser *parser;
+ sa_xmlitem *item;
+
+ error = fz_openfile(&file, argv[1], FZ_READ);
+ if (error)
+ fz_abort(error);
+
+ error = sa_openxml(&parser, file, 0);
+ if (error)
+ fz_abort(error);
+
+ item = sa_xmlnext(parser);
+ if (item)
+ sa_debugxml(item, 0);
+
+ sa_closexml(parser);
+ fz_closefile(file);
+
+ return 0;
+}
+
+extern fz_error *sa_readtiff(fz_file *);
+
+int runtiff(int argc, char **argv)
+{
+ fz_error *error;
+ fz_file *file;
+
+ error = fz_openfile(&file, argv[1], FZ_READ);
+ if (error)
+ fz_abort(error);
+
+ error = sa_readtiff(file);
+ if (error)
+ fz_abort(error);
+
+ fz_closefile(file);
+
+ return 0;
+}
+
+int main(int argc, char **argv)
+{
+ if (argc >= 2)
+ {
+ if (strstr(argv[1], "zip"))
+ return runzip(argc, argv);
+ if (strstr(argv[1], "xml"))
+ return runxml(argc, argv);
+ if (strstr(argv[1], "tif"))
+ return runtiff(argc, argv);
+ }
+
+ fprintf(stderr, "usage: samshow <file>\n");
+ fprintf(stderr, "usage: samshow <zipfile> <partname>\n");
+ return 1;
+}
+