diff options
author | Henry Stiles <henry.stiles@artifex.com> | 1998-07-26 07:36:41 +0000 |
---|---|---|
committer | Henry Stiles <henry.stiles@artifex.com> | 1998-07-26 07:36:41 +0000 |
commit | eec0ef527f18c5978c4476c9490f4de4c4249628 (patch) | |
tree | 5588d5e1300a245186594893c930949a19bcbbce /gs/src/ziodev2.c | |
parent | d4bdba93ef34f68d27148e1b31088d1d3e786e8c (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.c | 134 |
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) } |