summaryrefslogtreecommitdiff
path: root/gs/src/ziodev2.c
diff options
context:
space:
mode:
authorHenry Stiles <henry.stiles@artifex.com>1998-07-26 07:36:41 +0000
committerHenry Stiles <henry.stiles@artifex.com>1998-07-26 07:36:41 +0000
commiteec0ef527f18c5978c4476c9490f4de4c4249628 (patch)
tree5588d5e1300a245186594893c930949a19bcbbce /gs/src/ziodev2.c
parentd4bdba93ef34f68d27148e1b31088d1d3e786e8c (diff)
Initial revision
git-svn-id: http://svn.ghostscript.com/ghostpcl/trunk/ghostpcl@246 06663e23-700e-0410-b217-a244a6096597
Diffstat (limited to 'gs/src/ziodev2.c')
-rw-r--r--gs/src/ziodev2.c134
1 files changed, 134 insertions, 0 deletions
diff --git a/gs/src/ziodev2.c b/gs/src/ziodev2.c
new file mode 100644
index 000000000..7819fe87b
--- /dev/null
+++ b/gs/src/ziodev2.c
@@ -0,0 +1,134 @@
+/* Copyright (C) 1993, 1994, 1996 Aladdin Enterprises. All rights reserved.
+
+ This file is part of Aladdin Ghostscript.
+
+ Aladdin Ghostscript is distributed with NO WARRANTY OF ANY KIND. No author
+ or distributor accepts any responsibility for the consequences of using it,
+ or for whether it serves any particular purpose or works at all, unless he
+ or she says so in writing. Refer to the Aladdin Ghostscript Free Public
+ License (the "License") for full details.
+
+ Every copy of Aladdin Ghostscript must include a copy of the License,
+ normally in a plain ASCII text file named PUBLIC. The License grants you
+ the right to copy, modify and redistribute Aladdin Ghostscript, but only
+ under certain conditions described in the License. Among other things, the
+ License requires that the copyright notice and this notice be preserved on
+ all copies.
+*/
+
+/* ziodev2.c */
+/* (Level 2) IODevice operators */
+#include "string_.h"
+#include "ghost.h"
+#include "gp.h"
+#include "errors.h"
+#include "oper.h"
+#include "stream.h"
+#include "gxiodev.h"
+#include "files.h" /* for file_open_stream */
+#include "iparam.h"
+#include "iutil2.h"
+#include "store.h"
+
+/* ------ %null% ------ */
+
+/* This represents the null output file. */
+private iodev_proc_open_device(null_open);
+gx_io_device gs_iodev_null =
+ { "%null%", "FileSystem",
+ { iodev_no_init, null_open, iodev_no_open_file,
+ iodev_os_fopen, iodev_os_fclose,
+ iodev_no_delete_file, iodev_no_rename_file, iodev_no_file_status,
+ iodev_no_enumerate_files, NULL, NULL,
+ iodev_no_get_params, iodev_no_put_params
+ }
+ };
+
+private int
+null_open(gx_io_device *iodev, const char *access, stream **ps,
+ gs_memory_t *mem)
+{ if ( !streq1(access, 'w') )
+ return_error(e_invalidfileaccess);
+ return file_open_stream(gp_null_file_name,
+ strlen(gp_null_file_name),
+ access, 256 /* arbitrary */, ps,
+ iodev->procs.fopen);
+}
+
+/* ------ %ram% ------ */
+
+/* This is an IODevice with no interesting parameters for the moment. */
+gx_io_device gs_iodev_ram =
+ { "%ram%", "Special",
+ { iodev_no_init, iodev_no_open_device, iodev_no_open_file,
+ iodev_no_fopen, iodev_no_fclose,
+ iodev_no_delete_file, iodev_no_rename_file, iodev_no_file_status,
+ iodev_no_enumerate_files, NULL, NULL,
+ iodev_no_get_params, iodev_no_put_params
+ }
+ };
+
+/* ------ Operators ------ */
+
+/* <iodevice> .getdevparams <mark> <name> <value> ... */
+private int
+zgetdevparams(os_ptr op)
+{
+ gx_io_device *iodev;
+ stack_param_list list;
+ int code;
+ ref *pmark;
+
+ check_read_type(*op, t_string);
+ iodev = gs_findiodevice(op->value.bytes, r_size(op));
+ if ( iodev == 0 )
+ return_error(e_undefinedfilename);
+ stack_param_list_write(&list, &o_stack, NULL);
+#define plist ((gs_param_list *)&list)
+
+ code = gs_getdevparams(iodev, plist);
+ if (code < 0)
+ { ref_stack_pop(&o_stack, list.count * 2);
+ return code;
+ }
+#undef plist
+ pmark = ref_stack_index(&o_stack, list.count * 2);
+ make_mark(pmark);
+ return 0;
+}
+
+/* <mark> <name> <value> ... <iodevice> .putdevparams */
+private int
+zputdevparams(os_ptr op)
+{ gx_io_device *iodev;
+ stack_param_list list;
+ int code;
+ check_read_type(*op, t_string);
+ iodev = gs_findiodevice(op->value.bytes, r_size(op));
+ if ( iodev == 0 )
+ return_error(e_undefinedfilename);
+ code = stack_param_list_read(&list, &o_stack, 1, NULL, false);
+ if ( code < 0 )
+ return code;
+#define plist ((gs_param_list *)&list)
+ code = param_check_password(plist, &SystemParamsPassword);
+ if ( code != 0 )
+ { iparam_list_release(&list);
+ return_error(code < 0 ? code : e_invalidaccess);
+ }
+ code = gs_putdevparams(iodev, plist);
+ iparam_list_release(&list);
+ if ( code < 0 )
+ return code;
+#undef plist
+ ref_stack_pop(&o_stack, list.count * 2 + 2);
+ return 0;
+}
+
+/* ------ Initialization procedure ------ */
+
+BEGIN_OP_DEFS(ziodev2_l2_op_defs) {
+ op_def_begin_level2(),
+ {"1.getdevparams", zgetdevparams},
+ {"2.putdevparams", zputdevparams},
+END_OP_DEFS(0) }