xref: /plan9/sys/src/cmd/gs/src/zdevcal.c (revision 593dc095aefb2a85c828727bbfa9da139a49bdf4)
1 /* Copyright (C) 1995, 1998, 2000 Aladdin Enterprises.  All rights reserved.
2 
3   This software is provided AS-IS with no warranty, either express or
4   implied.
5 
6   This software is distributed under license and may not be copied,
7   modified or distributed except as expressly authorized under the terms
8   of the license contained in the file LICENSE in this distribution.
9 
10   For more information about licensing, please refer to
11   http://www.ghostscript.com/licensing/. For information on
12   commercial licensing, go to http://www.artifex.com/licensing/ or
13   contact Artifex Software, Inc., 101 Lucas Valley Road #110,
14   San Rafael, CA  94903, U.S.A., +1(415)492-9861.
15 */
16 
17 /* $Id: zdevcal.c,v 1.5 2002/02/21 22:24:54 giles Exp $ */
18 /* %Calendar% IODevice */
19 #include "time_.h"
20 #include "ghost.h"
21 #include "gxiodev.h"
22 #include "istack.h"
23 #include "iparam.h"
24 
25 /* ------ %Calendar% ------ */
26 
27 private iodev_proc_get_params(calendar_get_params);
28 const gx_io_device gs_iodev_calendar = {
29     "%Calendar%", "Special",
30     { iodev_no_init, iodev_no_open_device, iodev_no_open_file,
31       iodev_no_fopen, iodev_no_fclose,
32       iodev_no_delete_file, iodev_no_rename_file, iodev_no_file_status,
33       iodev_no_enumerate_files, NULL, NULL,
34       calendar_get_params, iodev_no_put_params
35     }
36 };
37 
38 /* Get the date and time. */
39 private int
calendar_get_params(gx_io_device * iodev,gs_param_list * plist)40 calendar_get_params(gx_io_device * iodev, gs_param_list * plist)
41 {
42     int code;
43     time_t t;
44     struct tm *pltime;
45     struct tm ltime;
46     static const gs_param_item_t items[] = {
47 	{"Year", gs_param_type_int, offset_of(struct tm, tm_year)},
48 	{"Month", gs_param_type_int, offset_of(struct tm, tm_mon)},
49 	{"Day", gs_param_type_int, offset_of(struct tm, tm_mday)},
50 	{"Weekday", gs_param_type_int, offset_of(struct tm, tm_wday)},
51 	{"Hour", gs_param_type_int, offset_of(struct tm, tm_hour)},
52 	{"Minute", gs_param_type_int, offset_of(struct tm, tm_min)},
53 	{"Second", gs_param_type_int, offset_of(struct tm, tm_sec)},
54 	gs_param_item_end
55     };
56     bool running;
57 
58     if (time(&t) == (time_t)-1 || (pltime = localtime(&t)) == 0) {
59 	ltime.tm_sec = ltime.tm_min = ltime.tm_hour =
60 	    ltime.tm_mday = ltime.tm_mon = ltime.tm_year = 0;
61 	running = false;
62     } else {
63 	ltime = *pltime;
64 	ltime.tm_year += 1900;
65 	ltime.tm_mon++;		/* 1-origin */
66 	running = true;
67     }
68     if ((code = gs_param_write_items(plist, &ltime, NULL, items)) < 0)
69 	return code;
70     return param_write_bool(plist, "Running", &running);
71 }
72