xref: /plan9/sys/src/cmd/gs/src/zdevcal.c (revision 593dc095aefb2a85c828727bbfa9da139a49bdf4)
13ff48bf5SDavid du Colombier /* Copyright (C) 1995, 1998, 2000 Aladdin Enterprises.  All rights reserved.
27dd7cddfSDavid du Colombier 
3*593dc095SDavid du Colombier   This software is provided AS-IS with no warranty, either express or
4*593dc095SDavid du Colombier   implied.
57dd7cddfSDavid du Colombier 
6*593dc095SDavid du Colombier   This software is distributed under license and may not be copied,
7*593dc095SDavid du Colombier   modified or distributed except as expressly authorized under the terms
8*593dc095SDavid du Colombier   of the license contained in the file LICENSE in this distribution.
97dd7cddfSDavid du Colombier 
10*593dc095SDavid du Colombier   For more information about licensing, please refer to
11*593dc095SDavid du Colombier   http://www.ghostscript.com/licensing/. For information on
12*593dc095SDavid du Colombier   commercial licensing, go to http://www.artifex.com/licensing/ or
13*593dc095SDavid du Colombier   contact Artifex Software, Inc., 101 Lucas Valley Road #110,
14*593dc095SDavid du Colombier   San Rafael, CA  94903, U.S.A., +1(415)492-9861.
157dd7cddfSDavid du Colombier */
167dd7cddfSDavid du Colombier 
17*593dc095SDavid du Colombier /* $Id: zdevcal.c,v 1.5 2002/02/21 22:24:54 giles Exp $ */
187dd7cddfSDavid du Colombier /* %Calendar% IODevice */
197dd7cddfSDavid du Colombier #include "time_.h"
207dd7cddfSDavid du Colombier #include "ghost.h"
217dd7cddfSDavid du Colombier #include "gxiodev.h"
227dd7cddfSDavid du Colombier #include "istack.h"
237dd7cddfSDavid du Colombier #include "iparam.h"
247dd7cddfSDavid du Colombier 
257dd7cddfSDavid du Colombier /* ------ %Calendar% ------ */
267dd7cddfSDavid du Colombier 
277dd7cddfSDavid du Colombier private iodev_proc_get_params(calendar_get_params);
287dd7cddfSDavid du Colombier const gx_io_device gs_iodev_calendar = {
297dd7cddfSDavid du Colombier     "%Calendar%", "Special",
307dd7cddfSDavid du Colombier     { iodev_no_init, iodev_no_open_device, iodev_no_open_file,
317dd7cddfSDavid du Colombier       iodev_no_fopen, iodev_no_fclose,
327dd7cddfSDavid du Colombier       iodev_no_delete_file, iodev_no_rename_file, iodev_no_file_status,
337dd7cddfSDavid du Colombier       iodev_no_enumerate_files, NULL, NULL,
347dd7cddfSDavid du Colombier       calendar_get_params, iodev_no_put_params
357dd7cddfSDavid du Colombier     }
367dd7cddfSDavid du Colombier };
377dd7cddfSDavid du Colombier 
387dd7cddfSDavid du Colombier /* Get the date and time. */
397dd7cddfSDavid du Colombier private int
calendar_get_params(gx_io_device * iodev,gs_param_list * plist)407dd7cddfSDavid du Colombier calendar_get_params(gx_io_device * iodev, gs_param_list * plist)
417dd7cddfSDavid du Colombier {
427dd7cddfSDavid du Colombier     int code;
437dd7cddfSDavid du Colombier     time_t t;
447dd7cddfSDavid du Colombier     struct tm *pltime;
457dd7cddfSDavid du Colombier     struct tm ltime;
467dd7cddfSDavid du Colombier     static const gs_param_item_t items[] = {
477dd7cddfSDavid du Colombier 	{"Year", gs_param_type_int, offset_of(struct tm, tm_year)},
487dd7cddfSDavid du Colombier 	{"Month", gs_param_type_int, offset_of(struct tm, tm_mon)},
497dd7cddfSDavid du Colombier 	{"Day", gs_param_type_int, offset_of(struct tm, tm_mday)},
507dd7cddfSDavid du Colombier 	{"Weekday", gs_param_type_int, offset_of(struct tm, tm_wday)},
517dd7cddfSDavid du Colombier 	{"Hour", gs_param_type_int, offset_of(struct tm, tm_hour)},
527dd7cddfSDavid du Colombier 	{"Minute", gs_param_type_int, offset_of(struct tm, tm_min)},
537dd7cddfSDavid du Colombier 	{"Second", gs_param_type_int, offset_of(struct tm, tm_sec)},
547dd7cddfSDavid du Colombier 	gs_param_item_end
557dd7cddfSDavid du Colombier     };
567dd7cddfSDavid du Colombier     bool running;
577dd7cddfSDavid du Colombier 
583ff48bf5SDavid du Colombier     if (time(&t) == (time_t)-1 || (pltime = localtime(&t)) == 0) {
597dd7cddfSDavid du Colombier 	ltime.tm_sec = ltime.tm_min = ltime.tm_hour =
607dd7cddfSDavid du Colombier 	    ltime.tm_mday = ltime.tm_mon = ltime.tm_year = 0;
617dd7cddfSDavid du Colombier 	running = false;
627dd7cddfSDavid du Colombier     } else {
637dd7cddfSDavid du Colombier 	ltime = *pltime;
647dd7cddfSDavid du Colombier 	ltime.tm_year += 1900;
657dd7cddfSDavid du Colombier 	ltime.tm_mon++;		/* 1-origin */
667dd7cddfSDavid du Colombier 	running = true;
677dd7cddfSDavid du Colombier     }
687dd7cddfSDavid du Colombier     if ((code = gs_param_write_items(plist, &ltime, NULL, items)) < 0)
697dd7cddfSDavid du Colombier 	return code;
707dd7cddfSDavid du Colombier     return param_write_bool(plist, "Running", &running);
717dd7cddfSDavid du Colombier }
72