diff -rc pine4.32/pico/pico.c pine4.32.outgoing/pico/pico.c *** pine4.32/pico/pico.c Thu Nov 9 13:54:38 2000 --- pine4.32.outgoing/pico/pico.c Wed Jan 17 19:01:58 2001 *************** *** 134,139 **** --- 134,149 ---- pico_all_done = 0; km_popped = 0; + if (pm->auto_cmds){ + int i = 0; + #define CTRL_X 24 + while (pm->auto_cmds[i]) + i++; + if ((i > 1) && (pm->auto_cmds[i - 2] == CTRL_X) && + (pm->auto_cmds[i - 1] == 'y')) + return (1); + } + if(!vtinit()) /* Init Displays. */ return(COMP_CANCEL); diff -rc pine4.32/pico/pico.h pine4.32.outgoing/pico/pico.h *** pine4.32/pico/pico.h Tue Jan 2 14:14:50 2001 --- pine4.32.outgoing/pico/pico.h Wed Jan 17 19:01:58 2001 *************** *** 212,217 **** --- 212,218 ---- void (*resize)(); /* callback handling screen resize */ void (*winch_cleanup)(); /* callback handling screen resize */ int arm_winch_cleanup; /* do the winch_cleanup if resized */ + int *auto_cmds; /* Initial keystroke commands */ HELP_T search_help; HELP_T ins_help; HELP_T ins_m_help; diff -rc pine4.32/pine/args.c pine4.32.outgoing/pine/args.c *** pine4.32/pine/args.c Thu Nov 9 14:27:21 2000 --- pine4.32.outgoing/pine/args.c Wed Jan 17 19:01:58 2001 *************** *** 435,440 **** --- 435,446 ---- pine_state->exit_if_no_pinerc = 1; goto Loop; } + else if(strcmp(*av, "subject") == 0){ + if(--ac){ + pine_state->subject = *++av; + } + goto Loop; + } #ifdef _WINDOWS else if(strcmp(*av, "registry") == 0){ if(--ac){ diff -rc pine4.32/pine/filter.c pine4.32.outgoing/pine/filter.c *** pine4.32/pine/filter.c Thu Dec 28 15:34:07 2000 --- pine4.32.outgoing/pine/filter.c Wed Jan 17 19:01:58 2001 *************** *** 204,209 **** --- 204,212 ---- error_description(errno))); if(source == TmpFileStar) (void)unlink(so->name); + if (ps_global->send_immediately){ + printf("%s : %s\n", so->name, error_description(errno)); + exit(EXIT_FAILURE);} fs_give((void **)&so->name); fs_give((void **)&so); /* so freed & set to NULL */ diff -rc pine4.32/pine/init.c pine4.32.outgoing/pine/init.c *** pine4.32/pine/init.c Thu Jan 11 11:14:50 2001 --- pine4.32.outgoing/pine/init.c Wed Jan 17 19:01:59 2001 *************** *** 3250,3260 **** if(i > 0){ ps->initial_cmds = (int *)fs_get((i+1) * sizeof(int)); ps->free_initial_cmds = ps->initial_cmds; ! for(j = 0; j < i; j++) ps->initial_cmds[j] = i_cmds[j]; ! ps->initial_cmds[i] = 0; ps->in_init_seq = ps->save_in_init_seq = 1; } } --- 3250,3265 ---- if(i > 0){ ps->initial_cmds = (int *)fs_get((i+1) * sizeof(int)); + ps->initial_cmds_backup = (int *)fs_get((i+1) * sizeof(int)); ps->free_initial_cmds = ps->initial_cmds; ! for(j = 0; j < i; j++){ ps->initial_cmds[j] = i_cmds[j]; ! ps->initial_cmds_backup[j] = i_cmds[j];} ! #define ctrl_x 24 ! if (i > 1) ! ps->send_immediately = (i_cmds[i - 2] == ctrl_x) && (i_cmds[i - 1] == 'y'); ps->initial_cmds[i] = 0; + ps->initial_cmds_backup[i] = 0; ps->in_init_seq = ps->save_in_init_seq = 1; } } diff -rc pine4.32/pine/pine.c pine4.32.outgoing/pine/pine.c *** pine4.32/pine/pine.c Wed Jan 10 12:51:07 2001 --- pine4.32.outgoing/pine/pine.c Wed Jan 17 19:01:59 2001 *************** *** 245,250 **** --- 245,251 ---- ps_global->sort_types[8] = SortScore; ps_global->sort_types[9] = SortThread; ps_global->sort_types[10] = EndofList; + ps_global->send_immediately = FALSE; ps_global->atmts = (ATTACH_S *) fs_get(sizeof(ATTACH_S)); ps_global->atmts_allocated = 1; ps_global->atmts->description = NULL; *************** *** 298,304 **** pine_args(pine_state, argc, argv, &args); #ifndef _WINDOWS ! if(!isatty(0)){ /* * monkey with descriptors so our normal tty i/o routines don't * choke... --- 299,305 ---- pine_args(pine_state, argc, argv, &args); #ifndef _WINDOWS ! if((!pine_state->send_immediately) && !isatty(0)){ /* * monkey with descriptors so our normal tty i/o routines don't * choke... *************** *** 394,399 **** --- 395,405 ---- #endif init_vars(pine_state); + if (args.action == aaFolder && !args.data.folder && + ps_global->send_immediately){ + printf("No value for To: field specified\n"); + exit(-1); + } /* * Set up a c-client read timeout and timeout handler. In general, *************** *** 516,522 **** init_signals(); /*--- input side ---*/ ! if(init_tty_driver(pine_state)){ #if !defined(DOS) && !defined(OS2) /* always succeeds under DOS! */ fprintf(stderr, "Can't access terminal or input is not a terminal. "); fprintf(stderr, "Redirection of\nstandard input is not allowed. For "); --- 522,528 ---- init_signals(); /*--- input side ---*/ ! if((!pine_state->send_immediately) && (init_tty_driver(pine_state))){ #if !defined(DOS) && !defined(OS2) /* always succeeds under DOS! */ fprintf(stderr, "Can't access terminal or input is not a terminal. "); fprintf(stderr, "Redirection of\nstandard input is not allowed. For "); *************** *** 525,532 **** #endif } - /*--- output side ---*/ rv = config_screen(&(pine_state->ttyo)); #if !defined(DOS) && !defined(OS2) /* always succeeds under DOS! */ if(rv){ --- 531,538 ---- #endif } /*--- output side ---*/ + if (!ps_global->send_immediately){ rv = config_screen(&(pine_state->ttyo)); #if !defined(DOS) && !defined(OS2) /* always succeeds under DOS! */ if(rv){ *************** *** 551,567 **** exit(-1); } #endif if(F_ON(F_BLANK_KEYMENU,ps_global)) FOOTER_ROWS(ps_global) = 1; init_screen(); ! init_keyboard(pine_state->orig_use_fkeys); strcpy(pine_state->inbox_name, INBOX_NAME); init_folders(pine_state); /* digest folder spec's */ pine_state->in_init_seq = 0; /* so output (& ClearScreen) show up */ pine_state->dont_use_init_cmds = 1; /* don't use up initial_commands yet */ ClearScreen(); if(args.action == aaPrcCopy || args.action == aaAbookCopy){ --- 557,578 ---- exit(-1); } #endif + } + else + fake_config_screen(&(pine_state->ttyo)); if(F_ON(F_BLANK_KEYMENU,ps_global)) FOOTER_ROWS(ps_global) = 1; + if (!pine_state->send_immediately){ init_screen(); ! init_keyboard(pine_state->orig_use_fkeys);} strcpy(pine_state->inbox_name, INBOX_NAME); init_folders(pine_state); /* digest folder spec's */ pine_state->in_init_seq = 0; /* so output (& ClearScreen) show up */ pine_state->dont_use_init_cmds = 1; /* don't use up initial_commands yet */ + if (!pine_state->send_immediately) ClearScreen(); if(args.action == aaPrcCopy || args.action == aaAbookCopy){ *************** *** 588,594 **** goodnight_gracey(pine_state, exit_val, NULL); } ! if(args.action == aaFolder && (pine_state->first_time_user || pine_state->show_new_version)){ pine_state->mangled_header = 1; show_main_screen(pine_state, 0, FirstMenu, NULL, 0, (Pos *)NULL); --- 599,605 ---- goodnight_gracey(pine_state, exit_val, NULL); } ! if(!pine_state->send_immediately && args.action == aaFolder && (pine_state->first_time_user || pine_state->show_new_version)){ pine_state->mangled_header = 1; show_main_screen(pine_state, 0, FirstMenu, NULL, 0, (Pos *)NULL); *************** *** 770,775 **** --- 781,787 ---- pine_state->mail_stream = NULL; pine_state->inbox_stream = NULL; pine_state->mangled_screen = 1; + pine_state->subject = NULL; if(args.action == aaURL){ url_tool_t f; *************** *** 838,843 **** --- 850,856 ---- pine_state->nr_mode ? "news messages" : "mail folder"); } + if (!pine_state->send_immediately) fflush(stdout); if(pine_state->in_init_seq){ *************** *** 992,998 **** pine_state->in_init_seq = pine_state->save_in_init_seq; pine_state->dont_use_init_cmds = 0; ! clear_cursor_pos(); if(pine_state->give_fixed_warning) q_status_message(SM_ASYNC, 0, 10, --- 1005,1012 ---- pine_state->in_init_seq = pine_state->save_in_init_seq; pine_state->dont_use_init_cmds = 0; ! if (!pine_state->send_immediately) ! clear_cursor_pos(); if(pine_state->give_fixed_warning) q_status_message(SM_ASYNC, 0, 10, *************** *** 2871,2881 **** else strcpy(msg, pf); end_screen(msg, exit_val); end_titlebar(); end_keymenu(); ! end_keyboard(F_ON(F_USE_FK,pine_state)); end_tty_driver(pine_state); #if !defined(DOS) && !defined(OS2) kbdestroy(kbesc); --- 2885,2896 ---- else strcpy(msg, pf); + if (!pine_state->send_immediately){ end_screen(msg, exit_val); end_titlebar(); end_keymenu(); ! end_keyboard(F_ON(F_USE_FK,pine_state));} end_tty_driver(pine_state); #if !defined(DOS) && !defined(OS2) kbdestroy(kbesc); diff -rc pine4.32/pine/pine.h pine4.32.outgoing/pine/pine.h *** pine4.32/pine/pine.h Thu Jan 11 11:10:04 2001 --- pine4.32.outgoing/pine/pine.h Wed Jan 17 19:02:00 2001 *************** *** 2692,2697 **** --- 2692,2698 ---- short init_context; int *initial_cmds; /* cmds to execute on startup */ + int *initial_cmds_backup; /* backup to cmds to execute on startup */ int *free_initial_cmds; /* used to free when done */ char c_client_error[300]; /* when nowhow_error is set and PARSE */ *************** *** 2735,2740 **** --- 2736,2744 ---- int composer_fillcol; + char *subject; /* Subject of the message when entered from command line */ + + int send_immediately; /* Means that ^X,y is the sequence of initial keystrokes */ time_t time_of_last_input; int hours_to_timeout; *************** *** 4073,4078 **** --- 4077,4083 ---- void MoveCursor PROTO((int, int)); void NewLine PROTO((void)); int config_screen PROTO((struct ttyo **)); + void fake_config_screen PROTO((struct ttyo **)); void init_screen PROTO((void)); void end_screen PROTO((char *, int)); void outchar PROTO((int)); diff -rc pine4.32/pine/send.c pine4.32.outgoing/pine/send.c *** pine4.32/pine/send.c Tue Jan 9 16:21:05 2001 --- pine4.32.outgoing/pine/send.c Wed Jan 17 19:02:00 2001 *************** *** 841,846 **** --- 841,847 ---- if(given_to) rfc822_parse_adrlist(&outgoing->to, given_to, ps_global->maildomain); + outgoing->subject = ps_global->subject; outgoing->message_id = generate_message_id(); /* *************** *** 969,978 **** if(lcc) fs_give((void **)&lcc); mail_free_envelope(&outgoing); pine_free_body(&body); free_redraft_pos(&redraft_pos); ! free_action(&role); } --- 970,980 ---- if(lcc) fs_give((void **)&lcc); + if (!ps_global->send_immediately){ mail_free_envelope(&outgoing); pine_free_body(&body); free_redraft_pos(&redraft_pos); ! free_action(&role);} } *************** *** 2847,2852 **** --- 2849,2856 ---- pbf = &pbuf1; standard_picobuf_setup(pbf); + pbf->auto_cmds = ps_global->initial_cmds_backup; /* save the list of commands */ + /* * Cancel any pending initial commands since pico uses a different * input routine. If we didn't cancel them, they would happen after *************** *** 4542,4547 **** --- 4546,4553 ---- /*----- Mail Post FAILED, back to composer -----*/ if(result & (P_MAIL_LOSE | P_FCC_LOSE)){ dprint(1, (debugfile, "Send failed, continuing\n")); + if (ps_global->send_immediately) + exit(EXIT_FAILURE); if(result & P_FCC_LOSE){ /* *************** *** 4571,4576 **** --- 4577,4583 ---- update_answered_flags(reply); /*----- Signed, sealed, delivered! ------*/ + if (!ps_global->send_immediately) q_status_message(SM_ORDER, 0, 3, pine_send_status(result, fcc, tmp_20k_buf, NULL)); *************** *** 6392,6397 **** --- 6399,6406 ---- q_status_message(SM_ORDER | SM_DING, 4, 7, error_mess); dprint(1, (debugfile, "call_mailer ERROR: %s\n", error_mess)); + if (ps_global->send_immediately) + printf("%s\n",error_mess); return(-1); } else{ diff -rc pine4.32/pine/signals.c pine4.32.outgoing/pine/signals.c *** pine4.32/pine/signals.c Fri Dec 29 15:08:51 2000 --- pine4.32.outgoing/pine/signals.c Wed Jan 17 19:02:01 2001 *************** *** 86,91 **** --- 86,93 ---- init_signals() { dprint(9, (debugfile, "init_signals()\n")); + if (ps_global->send_immediately) + return; init_sighup(); now_handling_alarms++; #ifdef _WINDOWS *************** *** 592,605 **** slots_used = max(0, min(space_left-3, 10)); if(percent_done_ptr && slots_used >= 4){ sprintf(progress, "%s |%*s|", busy_message, slots_used, ""); ! q_status_message(SM_ORDER, 0, 1, progress); } else{ dotcount++; sprintf(progress, "%s%*s", busy_message, DISPLAY_CHARS_COLS + 1, ""); ! q_status_message(SM_ORDER, 0, 1, progress); } /* --- 594,609 ---- slots_used = max(0, min(space_left-3, 10)); if(percent_done_ptr && slots_used >= 4){ + if (!ps_global->send_immediately){ sprintf(progress, "%s |%*s|", busy_message, slots_used, ""); ! q_status_message(SM_ORDER, 0, 1, progress);} } else{ dotcount++; + if (!ps_global->send_immediately){ sprintf(progress, "%s%*s", busy_message, DISPLAY_CHARS_COLS + 1, ""); ! q_status_message(SM_ORDER, 0, 1, progress);} } /* *************** *** 609,615 **** * its min display time yet. In that case, we don't want * to force out the initial message. */ ! display_message('x'); } } --- 613,620 ---- * its min display time yet. In that case, we don't want * to force out the initial message. */ ! if (!ps_global->send_immediately) ! display_message('x'); } } *************** *** 616,626 **** #ifdef _WINDOWS mswin_setcursor (MSWIN_CURSOR_BUSY); #endif fflush(stdout); } /* set alarm */ ! if(F_OFF(F_DISABLE_ALARM, ps_global)) alarm(seconds); return(retval); --- 621,632 ---- #ifdef _WINDOWS mswin_setcursor (MSWIN_CURSOR_BUSY); #endif + if (!ps_global->send_immediately) fflush(stdout); } /* set alarm */ ! if(F_OFF(F_DISABLE_ALARM, ps_global) && (!ps_global->send_immediately)) alarm(seconds); return(retval); *************** *** 657,674 **** right = (slots_used - 4)/2; left = slots_used - 4 - right; sprintf(progress, "%s |%*s100%%%*s|", busy_message, left, "", right, ""); q_status_message(SM_ORDER, message_pri>=2 ? max(message_pri,3) : 0, ! message_pri+2, progress); } else{ sprintf(progress, "%s%*sDONE", busy_message, DISPLAY_CHARS_COLS - 4 + 1, ""); q_status_message(SM_ORDER, message_pri>=2 ? max(message_pri,3) : 0, ! message_pri+2, progress); } } else --- 663,682 ---- right = (slots_used - 4)/2; left = slots_used - 4 - right; + if (!ps_global->send_immediately){ sprintf(progress, "%s |%*s100%%%*s|", busy_message, left, "", right, ""); q_status_message(SM_ORDER, message_pri>=2 ? max(message_pri,3) : 0, ! message_pri+2, progress);} } else{ + if (!ps_global->send_immediately){ sprintf(progress, "%s%*sDONE", busy_message, DISPLAY_CHARS_COLS - 4 + 1, ""); q_status_message(SM_ORDER, message_pri>=2 ? max(message_pri,3) : 0, ! message_pri+2, progress);} } } else diff -rc pine4.32/pine/status.c pine4.32.outgoing/pine/status.c *** pine4.32/pine/status.c Wed Nov 29 09:22:25 2000 --- pine4.32.outgoing/pine/status.c Wed Jan 17 19:02:01 2001 *************** *** 139,144 **** --- 139,147 ---- { SMQ_T *new; + if (ps_global->send_immediately) + return; + /* Hunt to last message -- if same already queued, move on... */ if(new = message_queue){ while(new->next != message_queue) *************** *** 1103,1109 **** char *q2; int rv; ! if(!ps_global->ttyo) return(pre_screen_config_want_to(question, dflt, on_ctrl_C)); #ifdef _WINDOWS if (mswin_usedialog ()) { --- 1106,1112 ---- char *q2; int rv; ! if((!ps_global->ttyo) || (ps_global->send_immediately)) return(pre_screen_config_want_to(question, dflt, on_ctrl_C)); #ifdef _WINDOWS if (mswin_usedialog ()) { diff -rc pine4.32/pine/osdep/pipe pine4.32.outgoing/pine/osdep/pipe *** pine4.32/pine/osdep/pipe Thu Dec 28 15:49:52 2000 --- pine4.32.outgoing/pine/osdep/pipe Wed Jan 17 19:02:01 2001 *************** *** 417,422 **** --- 417,425 ---- fclose((*syspipe)->in.f); } + if (ps_global->send_immediately) + return(1); + #ifdef SIGCHLD { SigType (*alarm_sig)(); diff -rc pine4.32/pine/osdep/termin.gen pine4.32.outgoing/pine/osdep/termin.gen *** pine4.32/pine/osdep/termin.gen Tue Jan 25 16:25:56 2000 --- pine4.32.outgoing/pine/osdep/termin.gen Wed Jan 17 19:02:01 2001 *************** *** 6,12 **** --- 6,29 ---- int pcpine_oe_cursor PROTO((int, long)); #endif + void + fake_config_screen(tt) + struct ttyo **tt; + { + struct ttyo *ttyo; + ttyo = (struct ttyo *)fs_get(sizeof (struct ttyo)); + + ttyo->header_rows = 2; + ttyo->footer_rows = 3; + ttyo->screen_rows = 24; + ttyo->screen_cols = 80; + + *tt = ttyo; + + } + + /* * Generic tty input routines */ *************** *** 214,220 **** prompt, (escape_list && escape_list[0].ch != -1) ? escape_list[0].label: "")); ! if(!ps_global->ttyo) return(pre_screen_config_opt_enter(string, field_len, prompt, escape_list, help, flags)); --- 231,237 ---- prompt, (escape_list && escape_list[0].ch != -1) ? escape_list[0].label: "")); ! if((!ps_global->ttyo) || (ps_global->send_immediately)) return(pre_screen_config_opt_enter(string, field_len, prompt, escape_list, help, flags));