Exemple #1
0
void
main(int argc, char **argv)
{
	int		cnt, status = 0;
	char		*date = NULL, *view = NULL, *target = NULL,
			*start = NULL, *end = NULL, *repeat = NULL,
			*numrepeat = NULL, *what = NULL, *uname, *loc;
	Props		*p = NULL;
	CSA_entry_handle	*list;
	CSA_session_handle	c_handle;
	CSA_return_code		stat;
	CSA_calendar_user	csa_user;
	DisplayType		dt;
	int			version;
	char			date_str[256];
#ifdef FNS
	char		buf[256];
#endif

	init_time();
        _DtEnvControl(DT_ENV_SET); /* set up environment variables */
	setlocale(LC_ALL, "");
	DT_catd = catopen(DTCM_CAT, NL_CAT_LOCALE);
	cm_tty_load_props(&p);
	dt = get_int_prop(p, CP_DEFAULTDISP);
#ifdef FNS
	dtfns_init();
#endif

	if (argc > 1)
	{
		cm_args(argc,argv);		/* parse command line */
		if (cm_strlen(cm_target)) 
			target = cm_target;
		else
			target = cm_get_credentials();
#ifdef FNS
		if (cmfns_use_fns(p)) {
			cmfns_lookup_calendar(target, buf, sizeof(buf));
			target = buf;
		}
#endif
		uname = cm_target2name(target);
		loc = cm_target2location(target);

		csa_user.user_name = target;
		csa_user.user_type = 0;
		csa_user.calendar_user_extensions = NULL;
		csa_user.calendar_address = target;
		stat = csa_logon(NULL, &csa_user, NULL, NULL, NULL, &c_handle, NULL);
		if (stat != CSA_SUCCESS) {
		  	char *format = cm_strdup(catgets(DT_catd, 1, 206, 
					   "\nCould not open calendar %s\n"));
			fprintf(stderr, format,
				target ? target : 
				catgets(DT_catd, 1, 209, "UNKNOWN"));
			free(format);
			free(uname);
			free(loc);
			exit(1);
		}
		version = get_data_version(c_handle);
		if (!cm_date[0])
        		format_tick(now(), get_int_prop(p, CP_DATEORDERING),
		    		    get_int_prop(p, CP_DATESEPARATOR), cm_date);
		if (cm_strlen(cm_date)) date = cm_date;
		if (cm_strlen(cm_view)) view = cm_view;
		if (cm_strlen(cm_start)) start = cm_start;

		if (!cm_end[0] && cm_start[0]) {
			format_time((int)cm_getdate(cm_start, NULL) + hrsec,
				    dt, cm_end);
		}

		if (cm_strlen(cm_end)) end = cm_end;
		if (cm_strlen(cm_repeatstr)) repeat = cm_repeatstr;
		if (cm_strlen(cm_for)) numrepeat = cm_for;
		if (cm_strlen(cm_what)) what = cm_what;
		if (!cm_appt_file[0])
			status = cm_tty_insert(DT_catd, c_handle, version, 
				      date, start, end, repeat, numrepeat,
				      what, NULL, p);
		else
			status = cm_tty_insert(DT_catd, c_handle, version, date,
				      start, end, repeat, numrepeat,
				      what, cm_appt_file, p);
	} else {
		prompt_for_insert(p);
		if (cm_strlen(cm_target)) target = cm_target;
		uname = cm_target2name(target);
		loc = cm_target2location(target);

		csa_user.user_name = target;
		csa_user.user_type = 0;
		csa_user.calendar_user_extensions = NULL;
		csa_user.calendar_address = target;
		stat = csa_logon(NULL, &csa_user, NULL, NULL, NULL, &c_handle, NULL);
		if (stat !=CSA_SUCCESS) {
		  	char *format = cm_strdup(catgets(DT_catd, 1, 206, 
					   "\nCould not open calendar %s\n"));
			fprintf(stderr, format, 
				target ? target : 
				catgets(DT_catd, 1, 209, "UNKNOWN"));
			free(format);
			free(uname);
			free(loc);
			exit(1);
		}
		version = get_data_version(c_handle);
		if (cm_strlen(cm_date)) date = cm_date;
		if (cm_strlen(cm_view)) view = cm_view;
		if (cm_strlen(cm_start)) start = cm_start;
		if (cm_strlen(cm_end)) end = cm_end;
		if (cm_strlen(cm_repeatstr)) repeat = cm_repeatstr;
		if (cm_strlen(cm_for)) numrepeat = cm_for;
		if (cm_strlen(cm_what)) what = cm_what;
		status = cm_tty_insert(DT_catd, c_handle, version, date, 
			      start, end, repeat, numrepeat, what, NULL, p);
	}
	if ((cnt = cm_tty_lookup(DT_catd, c_handle, version, date, view, 
					&list, p)) > 0)
		csa_free(list);
	csa_logoff(c_handle, NULL);
	props_clean_up(p);
	free(p);
	free(uname);
	free(loc);
        exit(status);
}
Exemple #2
0
extern void 
mail_it(XtPointer client_data, XtIntervalId *interval_id, CSA_reminder_reference *r) {
	Calendar		*c = (Calendar *)client_data;
	int			hr;
	Lines			*lines = NULL, *l = NULL;
	Props			*p = (Props *)c->properties;
	Boolean			pm;
	DisplayType		dt = get_int_prop(p, CP_DEFAULTDISP);
	Dtcm_appointment	*appt;
	char			subbuf[BUFSIZ], bodybuf[BUFSIZ];
	char			datebuf[200], startbuf[100], stopbuf[100];
	char			whatbuf[BUFSIZ];
	char			*to;
	CSA_return_code		stat;
	Tick			start, stop;
	char			*addr_data = NULL;

	appt = allocate_appt_struct(appt_read,
				    c->general->version,
				    CSA_ENTRY_ATTR_START_DATE_I,
				    CSA_ENTRY_ATTR_SUMMARY_I,
				    CSA_ENTRY_ATTR_ORGANIZER_I,
				    CSA_X_DT_ENTRY_ATTR_SHOWTIME_I,
				    CSA_ENTRY_ATTR_END_DATE_I,
				    CSA_ENTRY_ATTR_MAIL_REMINDER_I,
				    NULL);

	stat = query_appt_struct(c->cal_handle, r->entry, appt);

	backend_err_msg(c->frame, c->calname, stat,
			((Props_pu *)c->properties_pu)->xm_error_pixmap);
	if (stat != CSA_SUCCESS) {
		free_appt_struct(&appt);
		return;
	}

	/* compose to field */
	if (appt->mail->value->item.reminder_value->reminder_data.data == NULL ||
	    (appt->mail->value->item.reminder_value->reminder_data.size == 0)) {
		/* empty recipient */
		if (debug)
			fprintf(stderr, "%s", catgets(c->DT_catd, 1, 1,
				"dtcm: empty recipient in mail reminder\n"));
		to = appt->author->value->item.calendar_user_value->user_name;
	} else {
		addr_data = calloc(appt->mail->value->item.reminder_value->reminder_data.size + 1, 1);
		strncpy(addr_data, (char *) appt->mail->value->item.reminder_value->reminder_data.data, appt->mail->value->item.reminder_value->reminder_data.size);
		to = addr_data;
	}

	/* compose subject field */
	lines = text_to_lines(appt->what->value->item.string_value, 5);
	sprintf(subbuf, catgets(c->DT_catd, 1, 2, "Reminder- %s"),
		(lines) ? lines->s : "\0");

	/* compose message body */
	_csa_iso8601_to_tick(appt->time->value->item.date_time_value, &start);
	format_tick(start, ORDER_MDY, SEPARATOR_SLASH, datebuf);

	if (showtime_set(appt) && !magic_time(start)) {
		hr = hour(start);
		pm = (dt == HOUR12 && !adjust_hour(&hr)) ? True : False;
		if (dt == HOUR12) {
			sprintf(startbuf, "%2d:%02d %s", hr, minute(start),
				pm ? "pm" :
				"am");
		} else {
			sprintf(startbuf, "%02d%02d", hr, minute(start));
		}
	} else
		startbuf[0] = '\0';

	if (showtime_set(appt) && !magic_time(start) && appt->end_time) {
		_csa_iso8601_to_tick(appt->end_time->value->\
			item.date_time_value, &stop);
		hr = hour(stop);
		pm = (dt == HOUR12 && !adjust_hour(&hr)) ? True : False;
		if (dt == HOUR12) {
			sprintf(stopbuf, "%2d:%02d %s", hr, minute(stop),
				pm ? catgets(c->DT_catd, 1, 3, "pm") :
				catgets(c->DT_catd, 1, 4, "am"));
		} else {
			sprintf(stopbuf, "%02d%02d", hr, minute(stop));
		}
	} else
		stopbuf[0] = '\0';

	if (l = lines) {
		sprintf(whatbuf, "%s\n", l->s);
		l = l->next;
	} else
		whatbuf[0] = '\0';

	while(l != NULL) {
		strcat(whatbuf, "\t\t");
		strcat(whatbuf, l->s);
		strcat(whatbuf, "\n");
		l = l->next;
	}
	if (lines)
		destroy_lines(lines);

	if (stopbuf[0] != '\0') {
		sprintf(bodybuf, catgets(c->DT_catd, 1, 7, "\n\n\t** Calendar Appointment **\n\n\tDate:\t%s\n\tStart:\t%s\n\tEnd:\t%s\n\tWhat:\t%s"),
			datebuf, startbuf, stopbuf, whatbuf);
	} else {
		sprintf(bodybuf, catgets(c->DT_catd, 1, 1100, "\n\n\t** Calendar To Do Item **\n\n\tDue Date:\t%s\n\tTime Due:\t%s\n\tWhat:\t\t%s"),
			datebuf, startbuf, whatbuf);
	}

	if (debug) {
		fprintf(stderr, "to = `%s`\n", to);
		fprintf(stderr, "subject = `%s`\n", subbuf);
		fprintf(stderr, "body = `%s`\n", bodybuf);
	}

	(void)submit_mail(to, subbuf, bodybuf);

	free_appt_struct(&appt);

	if (addr_data)
		free(addr_data);
}
Exemple #3
0
static void
prompt_for_insert(Props *p) {
	char		date_str[BUFSIZ], what_buffer[BUFSIZ], buf[BUFSIZ], *timecopy;
	int		index, next, valid = FALSE;
	DisplayType	dt = get_int_prop(p, CP_DEFAULTDISP);

        format_tick(now(), get_int_prop(p, CP_DATEORDERING),
		    get_int_prop(p, CP_DATESEPARATOR), date_str);

	printf("%s", catgets(DT_catd, 1, 193, "Please enter the information for the appointment you wish to add.\nDefaults will be shown in parentheses.\n"));
	prompt_for_line(catgets(DT_catd, 1, 194, 
		"Calendar (%s): "), cm_get_credentials(), cm_target);
	prompt_for_line(catgets(DT_catd, 1, 195, 
		"Date (%s): "), date_str, cm_date);
	while (valid != TRUE)
	{
		format_time(now(), dt, cm_start);
		prompt_for_line(catgets(DT_catd, 1, 196, 
			"Start (%s): "), cm_start, cm_start);
		if (cm_start && cm_start[0])
		{
			timecopy = (char *)cm_strdup(cm_start);
			if (valid_time(p, timecopy))
				valid = TRUE;
			else
				printf("%s", catgets(DT_catd, 1, 197, "You have entered an invalid time.  Please try again:\n"));
			free(timecopy);
		}
	}

	sprintf(buf, "%s %s", date_str, cm_start);
	next = (int) cm_getdate(buf, NULL);
        next = next + hrsec;

	format_time(next, dt, cm_end);
	if (cm_start && cm_start[0])
		prompt_for_line(
			catgets(DT_catd, 1, 198, "End (%s): "), cm_end, cm_end);
	else
		prompt_for_line(
			catgets(DT_catd, 1, 199, "End (%s): "), "None", cm_end);

	strcpy(cm_repeatstr, catgets(DT_catd, 1, 200, "One Time"));

	prompt_for_line(catgets(DT_catd, 1, 201, 
			"Repeat (%s): "), cm_repeatstr, cm_repeatstr);

	if (strcmp(cm_repeatstr, catgets(DT_catd, 1, 200, "One Time"))) {
		sprintf(buf, "%s", catgets(DT_catd, 1, 203, "no default"));
		prompt_for_line(
			catgets(DT_catd, 1, 204, "For (%s): "), buf, cm_for);
	}

	printf("%s", catgets(DT_catd, 1, 205, 
		"What (you may enter up to 5 lines, use ^D to finish):\n"));
	cm_what[0] = NULL;
	for (index = 0; index < 5; index++)
	{
        	*what_buffer = '\0';
        	fgets (what_buffer, sizeof(what_buffer), stdin);
        	if (strlen(what_buffer) &&
		    what_buffer[strlen(what_buffer)-1] == '\n')
          	  what_buffer[strlen(what_buffer)-1] = '\0';

		if (what_buffer[0] == '\000')
			break;
		else
		{
			strcat(cm_what, what_buffer);
			strcat(cm_what, "\\n");
		}
		memset(what_buffer, '\000', 256);
	}
	
}
Exemple #4
0
/*
 * Insert the appointment into the calendar.
 *
 * Returns:
 *		1	Success
 *		0	User overuled.  Appointment not inserted.
 *		-1	Failure
 */
static int
schedule_appt(Calendar *c, Dtcm_appointment *a) {
	char		date_buf[MAXNAMELEN], buf[BUFSIZ], buf2[BUFSIZ];
	int		answer;
	Editor		*e = (Editor *)c->editor;
	ToDo		*t = (ToDo *)c->todo;
	Props		*p = (Props *)c->properties;
	CSA_entry_handle	entry;
	OrderingType	ot = get_int_prop(p, CP_DATEORDERING);
	SeparatorType	st = get_int_prop(p, CP_DATESEPARATOR);
	Tick		tick;
	int		rc;

	if (strcmp(c->calname, c->view->current_calendar) != 0) {
		/*
		 * Make sure user really meant to insert appointment
		 * into somebody elses calendar.
		 */
		char *ident = XtNewString(catgets(c->DT_catd, 1, 923, "Cancel"));
	  	char *title = XtNewString(catgets(c->DT_catd, 1, 212,
				"Calendar : Schedule Appointment"));
		sprintf(buf, "%s", catgets(c->DT_catd, 1, 210, "The appointment will be scheduled in the calendar\nyou are currently browsing.  Do you still want to schedule it?"));
		sprintf(buf2, "%s %s", catgets(c->DT_catd, 1, 211, "Schedule in"),
			c->view->current_calendar);
		answer = dialog_popup(c->frame,
			DIALOG_TITLE, title,
			DIALOG_TEXT, buf,
			BUTTON_IDENT, 1, ident,
			BUTTON_IDENT, 2, buf2,
			NULL);
		XtFree(title);
		XtFree(ident);
		if (answer == 1)
			return 0;
	}

	if (a->end_time) {
        if (!editor_created(e))
	{
                e_make_editor(c);
		XtUnmanageChild(e->base_form_mgr);
		e->editor_is_up = False;
	}
	if ((rc = editor_insert(a, &entry, c)) == True) {

		_csa_iso8601_to_tick(a->time->value->item.string_value, &tick);
		format_tick(tick, ot, st, date_buf);
		sprintf(buf, catgets(c->DT_catd, 1, 214,
				     "Appointment scheduled: %s"), date_buf);
		set_message(c->message_text, buf);
		return 1;
	} else {
		set_message(c->message_text, "");
		if ( rc == 2)
			return 0;
			return -1;
	}
	} else {
	if (!t->frame)
	{
		t_make_todo(c);
		XtUnmanageChild(t->frame);
		t->todo_is_up = False;
	}
	if (todo_insert(a, &entry, c)) {
		/*
		 * No messages displayed on calendar for todo.
		 */
		return 1;
	} else {
		/*
		 * No messages displayed on calendar for todo.
		 */
		return -1;
	}
	}
}