]>
diplodocus.org Git - nmh/blob - docs/historical/SRI-NOSC/reply.c
28 int *vec
[MAXARGS
], fout
, anot
;
33 struct swit switches
[] {
34 "annotate", 0, /* 0 */
35 "noannotate", 0, /* 1 */
38 "editor editor", 0, /* 4 */
46 char *inp
, *folder
, *nfolder
, *msg
, *maildir
;
47 register char *cp
, *ap
;
49 char *arguments
[50], **argp
;
55 msg
= anot
= folder
= 0;
62 if((cp
= m_find(ap
)) != -1) {
63 ap
= brkstring(cp
= getcpy(cp
), " ", "\n");
64 ap
= copyip(ap
, arguments
);
71 switch(smatch(++cp
, switches
)) {
72 case -2:ambigsw(cp
, switches
); /* ambiguous */
75 case -1:printf("-%s unknown\n", cp
);
77 case 0: anot
= 1; continue; /* -annotate */
78 case 1: anot
= 0; continue; /* -noannotate */
79 case 2: ccme
= 1; continue; /* -ccme */
80 case 3: ccme
= 0; continue; /* -noccme */
81 case 4: if(!(ed
= *argp
++)) { /* -editor */
82 printf("Missing argument for %s switch\n", argp
[-2]);
87 case 5: help(concat( inp
, " [+folder] [msg] [switches]", 0),
93 printf("Only one folder at a time.\n");
98 printf("Only one message at a time.\n");
106 folder
= m_getfolder();
107 maildir
= m_maildir(folder
);
108 if(chdir(maildir
) < 0) {
109 printf("Can't chdir to: "); flush();
113 if(!(mp
= m_gmsg(folder
))) {
114 printf("Can't read folder!?\n");
117 if(mp
->hghmsg
== 0) {
118 printf("No messages in \"%s\".\n", folder
);
121 if(!m_convert(msg
, UNDELETED
, UNDELETED
))
123 if(mp
->numsel
== 0) {
124 printf("No undeleted message specified\n");
128 printf("Only one message at a time.\n");
131 m_replace("folder", folder
);
132 if(mp
->lowsel
!= mp
->curmsg
)
133 m_setcur(mp
->lowsel
);
134 repl(getcpy(m_name(mp
->lowsel
)));
146 char name
[NAMESZ
], field
[512], *from
, *cc
, *sub
, *date
, *to
;
148 int state
, out
, status
, intr
;
151 if(fopen(msg
, &in
) < 0) {
152 printf("Can't open \"%s\"\n", msg
);
155 drft
= m_maildir(draft
);
156 if((out
= open(drft
, 0)) >= 0) {
158 cp = concat("\"", drft, "\" exists; delete? ", 0);
159 while((i = gans(cp, anysh)) == 2)
167 if((out
= creat(drft
, m_gmprot())) < 0) {
168 printf("Can't create \"%s\".\n", drft
);
173 msgid
= to
= from
= cc
= sub
= date
= 0;
177 switch(state
= m_getfld(state
, name
, field
, sizeof field
, &in
)) {
182 if(uleq(name
, "from"))
183 from
= add(field
, from
);
186 if(uleq(name
, "subject"))
187 sub
= add(field
, sub
);
188 if(uleq(name
, "date"))
189 date
= add(field
, date
);
192 if(uleq(name
, "message-id"))
193 msgid
= add(field
, msgid
);
204 printf("getfld returned %d\n", state
);
211 printf("No one to reply to!!!\n");
216 if(*from
== ' ') from
++;
219 while(*cc
== ' ') cc
++;
220 if(*cc
== '\n' && cc
[1] == 0) cc
= 0;
223 while(*to
== ' ') to
++;
232 cp
= cc
+length(cc
)-1;
233 if(*cp
== '\n') *cp
= 0;
234 while(*--cp
== ' ') ;
245 type(out
, "Subject: ");
246 if(*sub
== ' ') sub
++;
247 if((sub
[0] != 'R' && sub
[0] != 'r') ||
248 (sub
[1] != 'E' && sub
[1] != 'e') ||
254 type(out
, "In-reply-to: Your message of ");
255 date
[length(date
)-1] = '.';
256 if(*date
== ' ') date
++;
261 if(*msgid
== ' ') msgid
++;
265 type(out
, "----------\n");
267 if(!ed
&& (ed
= m_find("editor")) == -1)
273 intr
= signal(SIGINT
, 1);
274 if((out
= fork()) == 0) {
275 unlink("@"); link(msg
, "@"); /* An easy handle on cur msg */
278 /*** printf("execlsh(%s, %s, 0)\n", ed, drft); flush(); ***/
279 execlsrh(ed
, drft
, 0);
280 printf("Can't exec the editor: ");
281 flush(); perror(ed
); exit(1);
282 } else if(out
== -1) {
283 printf("No Forks\n");
286 while((state
= waita(&status
)) != -1 && state
!= out
) ;
287 signal(SIGINT
, intr
);
291 printf("[command aborted--%s %s]\n", drft
,
292 status
> 0377? "deleted" : "preserved");
298 printf("!! Test Version of SEND Being Run !!\n");
299 printf(" Send verbose !\n\n");
301 /* cp = concat("Send \"", draft, "\"? ", 0); */
303 if((j
= gans(cp
, anyv
)) > 0) {
305 if(stbuf
.i_nlink
== 1)
306 if(unlink(msg
) == -1 || link("@", msg
) == -1) {
307 printf("Can't update %s from @ file!\n",msg
);
310 unlink("@"); /* Remove this extra link */
311 if(anot
> 0 || (!anot
&& m_find("reply-annotate") != -1)) {
312 while((state
= fork()) == -1) sleep(5);
314 while(out
=wait()!= -1 && out
!= state
);
315 if(stat(drft
, field
) == -1)
316 annotate(msg
, "Replied", "");
321 vec
[i
++] = "mh-sndproc";
324 vec
[i
++] = "-verbose";
329 printf("Can't exec send!!\n");
331 unlink("@"); /* Remove this extra link */