1
/* Copyright (C) 2001-2006 Artifex Software, Inc.
4
This software is provided AS-IS with no warranty, either express or
7
This software is distributed under license and may not be copied, modified
8
or distributed except as expressly authorized under the terms of that
9
license. Refer to licensing information at http://www.artifex.com/
10
or contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134,
11
San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.
14
/* $Id: ziodev2.c 9043 2008-08-28 22:48:19Z giles $ */
15
/* (Level 2) IODevice operators */
22
#include "dstack.h" /* for systemdict */
23
#include "files.h" /* for file_open_stream */
28
/* ------ %null% ------ */
30
/* This represents the null output file. */
31
static iodev_proc_open_device(null_open);
32
const gx_io_device gs_iodev_null = {
35
iodev_no_init, null_open, iodev_no_open_file,
36
iodev_os_fopen, iodev_os_fclose,
37
iodev_no_delete_file, iodev_no_rename_file, iodev_no_file_status,
38
iodev_no_enumerate_files, NULL, NULL,
39
iodev_no_get_params, iodev_no_put_params
44
null_open(gx_io_device * iodev, const char *access, stream ** ps,
47
if (!streq1(access, 'w'))
48
return_error(e_invalidfileaccess);
49
return file_open_stream(gp_null_file_name,
50
strlen(gp_null_file_name),
51
access, 256 /* arbitrary */ , ps,
52
iodev, iodev->procs.fopen, mem);
55
/* ------ Operators ------ */
57
/* <iodevice> .getdevparams <mark> <name> <value> ... */
59
zgetdevparams(i_ctx_t *i_ctx_p)
63
stack_param_list list;
64
gs_param_list *const plist = (gs_param_list *) & list;
68
check_read_type(*op, t_string);
69
iodev = gs_findiodevice(op->value.bytes, r_size(op));
71
return_error(e_undefined);
72
stack_param_list_write(&list, &o_stack, NULL, iimemory);
73
if ((code = gs_getdevparams(iodev, plist)) < 0) {
74
ref_stack_pop(&o_stack, list.count * 2);
77
pmark = ref_stack_index(&o_stack, list.count * 2);
82
/* <mark> <name> <value> ... <iodevice> .putdevparams */
84
zputdevparams(i_ctx_t *i_ctx_p)
88
stack_param_list list;
89
gs_param_list *const plist = (gs_param_list *) & list;
91
password system_params_password;
93
check_read_type(*op, t_string);
94
iodev = gs_findiodevice(op->value.bytes, r_size(op));
96
return_error(e_undefined);
97
code = stack_param_list_read(&list, &o_stack, 1, NULL, false, iimemory);
100
code = dict_read_password(&system_params_password, systemdict,
101
"SystemParamsPassword");
104
code = param_check_password(plist, &system_params_password);
106
iparam_list_release(&list);
107
return_error(code < 0 ? code : e_invalidaccess);
109
code = gs_putdevparams(iodev, plist);
110
iparam_list_release(&list);
113
ref_stack_pop(&o_stack, list.count * 2 + 2);
117
/* ------ Initialization procedure ------ */
119
const op_def ziodev2_l2_op_defs[] =
121
op_def_begin_level2(),
122
{"1.getdevparams", zgetdevparams},
123
{"2.putdevparams", zputdevparams},