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); }
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); }
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); } }
/* * 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; } } }