1 2# PREFIX is inserted above this line during Make 3 4trap : 2 3 5 6PATH=/bin:$PATH 7 8# The .param file is found in $NNDIR/.param. Formerly this was 9# hardcoded, but with the nn-directory variable that no longer works. 10 11if [ -z "$NNDIR" ]; then NNDIR=$HOME/.nn; fi 12 13# Paramaters transferred from nn via .param file: 14# ART_ID Article id to cancel 15# GROUP Group of article to cancel 16# WORK Temporary file for response (w initial contents) 17# FIRST_ACTION First action to perform 18# EMPTY_CHECK [empty-response-check] 19# EDITOR [editor] 20# ED_LINE First line of body in WORK file 21# SPELL_CHECKER [spell-checker] 22# PAGER [pager] 23# APPEND_SIG [append-signature] 24# QUERY_SIG [query-signature] 25# NOVICE [expert] 26# WAIT_PERIOD [response-check-pause] 27# RECORD [mail/news-record] 28# MMDF_SEP [mmdf-format = ^A^A^A^A] 29# POST [inews] 30# POST_PIPE [inews-pipe-input] 31# POSTER_ADR Reply address for follow-ups 32# MAILER [mailer] 33# MAILER_PIPE [mailer-pipe-input] 34# DFLT_ANSW [response-default-answer] 35# ALIAS_EXPANDER [mail-alias-expander] 36# CHSET_NAME [charset] 37# CHSET_WIDTH Charset width 38# DIST distribution of cancelled article 39 40CC="" 41 42case "$1" in 43COMPLETE) 44 . $NNDIR/hold.param 45 WORK="$2" 46 EMPTY_CHECK=false 47 cp $NNDIR/hold.work $WORK 48 rm -f $NNDIR/hold.* 49 ;; 50*) 51 . $NNDIR/.param 52 OPERATION=$1 53 ;; 54esac 55 56# first we handle 'cancel' 57 58case "$OPERATION" in 59cancel) 60 TRACE="$2" 61 CAN=${TRACE}can 62 63 echo "Newsgroups: ${GROUP}" > $CAN 64 echo "Subject: cmsg cancel $ART_ID" >> $CAN 65 echo "Control: cancel $ART_ID" >> $CAN 66 if [ $DIST != "none" ] ; then 67 echo "Distribution: $DIST" >> $CAN 68 fi 69 echo "" >> $CAN 70 echo "cancel $ART_ID in newsgroup $GROUP" >> $CAN 71 echo "" >> $CAN 72 echo "This article was cancelled from within NN version $VERSION" >> $CAN 73 74 $INEWS -h < $CAN > $TRACE 2>&1 75 76 x=$? 77 case $x in 78 0) 79 ;; 80 *) 81 echo '' 82 cat $TRACE 83 sleep 2 84 ;; 85 esac 86 rm -f $TRACE 87 exit $x 88 ;; 89post|follow) 90 LOOKFOR="Newsgroups:" 91 SEND="post" 92 SENT="posted" 93 SENDPR="p)ost" 94 MESSAGE="article" 95 ;; 96*) 97 LOOKFOR="To:" 98 SEND="send" 99 SENT="sent" 100 SENDPR="s)end" 101 MESSAGE="letter" 102 ;; 103esac 104 105TRACE=${WORK}T 106FINAL=${WORK}F 107TEMP=${WORK}M 108COPY="" 109 110case "$FIRST_ACTION" in 111send) 112 ;; 113*) 114 COPY=${WORK}C 115 cp $WORK $COPY 116 ;; 117esac 118 119# loop until sent or aborted. 120 121loop=true 122changed=true 123prompt=false 124addchset=false 125 126pr="a)bort" 127case "$POSTER_ADR" in 128?*) 129 pr="$pr c)c" 130 ;; 131esac 132pr="$pr e)dit h)old" 133case "$SPELL_CHECKER" in 134?*) 135 pr="$pr i)spell" 136 ;; 137esac 138pr="$pr S)ign" 139pr="$pr m)ail" 140case "$OPERATION" in 141post|follow) 142 pr="$pr p)ost" 143 ;; 144esac 145pr="$pr r)eedit" 146case "$OPERATION" in 147post|follow) 148 ;; 149*) 150 pr="$pr s)end" 151 ;; 152esac 153pr="$pr v)iew w)rite" 154 155case "$DFLT_ANSW" in 156 p*|s*) 157 pr1=" ($SEND $MESSAGE)" 158 ;; 159 "") 160 pr1="" 161 ;; 162 *) 163 pr1=" ($DFLT_ANSW)" 164 ;; 165esac 166 167while $loop ; do 168 case $changed in 169 true) 170 case "$FIRST_ACTION" in 171 edit) 172 ;; 173 *) 174 # this works for v6/v7/bsd/sysv tr 175 sed -e '1,/^$/d' $WORK | tr -d '[\1-\177]' > $TEMP 176 if test -s $TEMP ; then 177 pr2=" 7)bit" 178 case "$CHSET_WIDTH" in 179 8) 180 cansend=true 181 ;; 182 *) 183 cansend=false 184 echo 185 echo "Warning: body of $MESSAGE contains 8-bit characters" 186 echo "You must delete them or select an 8-bit character set from nn." 187 echo "In its current form the $MESSAGE cannot be $SENT." 188 ;; 189 esac 190 case "$CHSET_NAME" in 191 ""|unknown) 192 addchset=false 193 ;; 194 *) 195 addchset=true 196 ;; 197 esac 198 else 199 pr2="" 200 cansend=true 201 addchset=false 202 fi 203 rm -f $TEMP 204 changed=false 205 ;; 206 esac 207 ;; 208 esac 209 210 case "$FIRST_ACTION" in 211 "") 212 case $prompt in 213 true) 214 echo '' 215 echo "$pr$pr2" 216 $AWK 'END{printf "Action:'"$pr1"' "}' < /dev/null 217 read act 218 case "$act" in 219 "") 220 act="$DFLT_ANSW" 221 ;; 222 esac 223 ;; 224 esac 225 ;; 226 *) 227 act="$FIRST_ACTION" 228 FIRST_ACTION="" 229 ;; 230 esac 231 prompt=true 232 233 case "$act" in 234 7*) 235 # this works for v6/v7/bsd/sysv tr 236 sed '1,/^$/d' $WORK | tr '[\201-\377]' '[\1-\177]' >> $TEMP 237 mv $TEMP $WORK 238 changed=true 239 ;; 240 241 a*) 242 $AWK 'END{printf "Confirm abort: (y) "}' < /dev/null 243 read act 244 case "$act" in 245 ""|y*) 246 rm -f $WORK* $COPY 247 exit 22 248 ;; 249 esac 250 ;; 251 252 c*) 253 case "$POSTER_ADR" in 254 "") 255 echo "Not doing follow-up" 256 ;; 257 *) 258 case $cansend in 259 true) 260 $AWK 'END{printf "CC: '"$POSTER_ADR"' (y) "}' </dev/null 261 read act 262 case "$act" in 263 ""|"y*") 264 echo "Sending copy to poster...." 265 CC="$POSTER_ADR" 266 final=true 267 ;; 268 esac 269 ;; 270 false) 271 echo 272 echo "Error: body of $MESSAGE contains 8-bit characters" 273 echo "You must delete them or select an 8-bit character set from nn." 274 echo "In its current form the $MESSAGE cannot be mailed." 275 ;; 276 esac 277 ;; 278 esac 279 ;; 280 281 e*) 282 # call editor to enter at line $ED_LINE of work file 283 284 case `basename "${EDITOR-vi}"` in 285 vi|emacs|emacsclient|pico|joe ) 286 # Berkeley vi display editor 287 # GNU emacs display editor 288 # pico display editor 289 # joe display editor 290 eval ${EDITOR-vi} +$ED_LINE $WORK 291 ;; 292 ded ) 293 # QMC ded display editor 294 $EDITOR -l$ED_LINE $WORK 295 ;; 296 uemacs ) 297 # micro emacs 298 $EDITOR -g$ED_LINE $WORK 299 ;; 300 * ) 301 # Unknown editor 302 $EDITOR $WORK 303 ;; 304 esac 305 306 if test ! -s $WORK ; then 307 rm -f $WORK* $COPY 308 exit 22 309 fi 310 311 if $EMPTY_CHECK ; then 312 if cmp -s $WORK $COPY ; then 313 rm -f $WORK* $COPY 314 exit 22 315 fi 316 fi 317 318 changed=true 319 320 case "$LOOKFOR" in 321 ?*) 322 if grep "^$LOOKFOR" $WORK > /dev/null ; then 323 : 324 else 325 echo "Warning: no $LOOKFOR line in $MESSAGE" 326 fi 327 ;; 328 esac 329 ;; 330 331 S*) 332 sed -e '/^$/q' < $WORK > $WORK.HDRS 333 awk '{if (S== 1) print $0; if ($0 == "") S=1}' < $WORK > $WORK.BDY 334 pgp -stfaw < $WORK.BDY > $WORK.SGN 335 cat $WORK.HDRS $WORK.SGN > $WORK 336 rm -f $WORK.* 337 ;; 338 339 340 h*) 341 $AWK 'END{printf "Complete response later: (y) "}' < /dev/null 342 read act 343 case "$act" in 344 ""|y*) 345 cp $WORK $NNDIR/hold.work 346 cp $NNDIR/.param $NNDIR/hold.param 347 echo "OPERATION=$OPERATION" >> $NNDIR/hold.param 348 case "$COPY" in 349 ?*) 350 rm -f $COPY 351 ;; 352 esac 353 rm -f $WORK* 354 exit 22 355 ;; 356 esac 357 ;; 358 359 i*) 360 case "$SPELL_CHECKER" in 361 "") 362 echo "spell-checker not defined" 363 ;; 364 *) 365 $SPELL_CHECKER $WORK 366 ;; 367 esac 368 ;; 369 370 m*) 371 case $cansend in 372 true) 373 $AWK 'END{printf "To: "}' </dev/null 374 read CC 375 case "$CC" in 376 ?*) 377 echo "Sending copy...." 378 final=true 379 ;; 380 esac 381 ;; 382 false) 383 echo 384 echo "Error: body of $MESSAGE contains 8-bit characters" 385 echo "You must delete them or select an 8-bit character set from nn." 386 echo "In its current form the $MESSAGE cannot be mailed." 387 ;; 388 esac 389 ;; 390 391 n*) 392 act="abort" 393 prompt=false 394 ;; 395 396 r*) 397 $AWK 'END{printf "Undo all changes? (n) "}' < /dev/null 398 read act 399 case "$act" in 400 [yY]*) 401 cp $COPY $WORK 402 changed=true 403 ;; 404 esac 405 FIRST_ACTION=edit 406 ;; 407 408 p*|s*) 409 case $cansend in 410 true) 411 loop=false 412 final=true 413 ;; 414 *) 415 echo 416 echo "Error: body of $MESSAGE contains 8-bit characters" 417 echo "You must delete them or select an 8-bit character set from nn." 418 echo "In its current form the $MESSAGE cannot be $SENT." 419 ;; 420 esac 421 ;; 422 423 v*) 424 ${PAGER-cat} $WORK 425 ;; 426 427 w*) 428 $AWK 'END{printf "Append '$MESSAGE' to file: "}' < /dev/null 429 read FNAME 430 case "$FNAME" in 431 ?*) 432 { cat $WORK ; echo ; } >> $FNAME 433 ;; 434 esac 435 ;; 436 437 y*) 438 act="$DFLT_ANSW" 439 prompt=false 440 ;; 441 442 ENV) 443 set 444 ;; 445 esac 446 447 case $final in 448 true) 449 cp $WORK $TEMP 450 case $addchset in 451 true) 452 if grep -i -v "^MIME-Version: " $WORK > /dev/null && 453 grep -i -v "^Content-Type: " $WORK > /dev/null && 454 grep -i -v "^Content-Transfer-Encoding: " $WORK > /dev/null 455 then 456 echo '/^$/i' > ${TEMP}ed 457 echo "MIME-Version: 1.0" >> ${TEMP}ed 458 echo "Content-Type: text/plain; charset=$CHSET_NAME" >> ${TEMP}ed 459 echo "Content-Transfer-Encoding: 8bit" >> ${TEMP}ed 460 echo "." >> ${TEMP}ed 461 echo "w" >> ${TEMP}ed 462 echo "q" >> ${TEMP}ed 463 ed -s $TEMP < ${TEMP}ed >/dev/null 2>&1 464 rm -f ${TEMP}ed 465 fi 466 ;; 467 esac 468 grep -i -v "^Orig-To: " $TEMP | grep -i -v "^User-Agent: " > $FINAL 469 rm -f $TEMP 470 if $XNEWSREADER ; then 471 echo '/^$/i' > ${TEMP}ed 472 echo "User-Agent: nn/$VERSION" >> ${TEMP}ed 473 echo "." >> ${TEMP}ed 474 echo "w" >> ${TEMP}ed 475 echo "q" >> ${TEMP}ed 476 ed -s $FINAL < ${TEMP}ed >/dev/null 2>&1 477 rm -f ${TEMP}ed 478 fi 479 final=false 480 ;; 481 esac 482 483 case "$CC" in 484 ?*) 485 echo "To: $CC" > $TEMP 486 sed -e "s/^To:/X-To:/" $FINAL >>$TEMP 487 if $MAILER_PIPE ; then 488 $MAILER < $TEMP 489 x=$? 490 else 491 $MAILER $TEMP 492 x=$? 493 fi 494 rm -f $TEMP 495 case $x in 496 0) 497 echo Done 498 ;; 499 *) 500 echo $MAILER failed 501 ;; 502 esac 503 CC="" 504 ;; 505 esac 506done 507 508if test $APPEND_SIG = "true" -a -s $HOME/.signature ; then 509 case $QUERY_SIG in 510 true) 511 $AWK 'END{printf "Append .signature? (y) "}' < /dev/null 512 read ans 513 ;; 514 *) 515 ans=y 516 ;; 517 esac 518 case "$ans" in 519 ""|y*|Y*) 520 echo "-- " >> $FINAL 521 cat $HOME/.signature >> $FINAL 522 ;; 523 esac 524fi 525 526case "$OPERATION" in 527 follow|post) 528 case $NOVICE in 529 true) 530 echo "Be patient! Your new $MESSAGE will not show up immediately." 531 case "${WAIT_PERIOD-0}" in 532 0|1) 533 WAIT_PERIOD=2 534 ;; 535 esac 536 ;; 537 esac 538 ;; 539esac 540 541{ 542 trap 'echo SIGNAL' 1 2 3 543 544 LOGNAME="${LOGNAME-$USER}" 545 case "$LOGNAME" in 546 "") 547 set `who am i` 548 LOGNAME="$1" 549 ;; 550 esac 551 552 case "$RECORD" in 553 ?*) 554 { 555 # keep a copy of message in $RECORD (in mail format) 556 set `date` 557 case "$MMDF_SEP" in 558 ?*) 559 echo "$MMDF_SEP" 560 ;; 561 esac 562 case $3 in 563 [0-9]) 564 echo From $LOGNAME $1 $2 " $3" $4 $6 $7 565 ;; 566 *) 567 echo From $LOGNAME $1 $2 $3 $4 $6 $7 568 ;; 569 esac 570 echo "From: $LOGNAME" 571 cat $FINAL 572 echo "$MMDF_SEP" 573 } >> "$RECORD" 574 ;; 575 esac 576 577 case "$OPERATION" in 578 579 reply|forward|mail) 580 case "$ALIAS_EXPANDER" in 581 ?*) 582 $ALIAS_EXPANDER $FINAL 583 ;; 584 esac 585 case $MAILER_PIPE in 586 true) 587 $MAILER < $FINAL 588 x=$? 589 ;; 590 *) 591 $MAILER $FINAL 592 x=$? 593 ;; 594 esac 595 case $x in 596 0) 597 ;; 598 *) 599 echo $MAILER failed 600 ;; 601 esac 602 ;; 603 604 follow|post) 605 { 606 case $POST_PIPE in 607 true) 608 $POST < $FINAL 2>&1 609 x=$? 610 ;; 611 *) 612 $POST $FINAL 2>&1 613 x=$? 614 ;; 615 esac 616 case $x in 617 0) 618 ;; 619 *) 620 echo $INEWS failed 621 ;; 622 esac 623 } | sed \ 624 -e "/spooled for later processing/d" \ 625 -e "/problem has been taken care of/d" \ 626 -e "/mailing your article to/d" \ 627 -e "/being mailed to/d" \ 628 -e "/mailed to the moderator/d" \ 629 -e "/is moderated/d" 630 ;; 631 632 *) 633 echo "Invalid operation: $OPERATION -- help" 634 OPERATION="nn response operation" 635 ;; 636 esac > $TRACE 2>&1 637 638 if test -s $TRACE ; then 639 if test -s $HOME/dead.letter ; then 640 cat $HOME/dead.letter >> $HOME/dead.letters 641 echo '' >> $HOME/dead.letters 642 fi 643 cat $WORK > $HOME/dead.letter 644 645 # Gripe: Error-report is lost if REC_MAIL was the problem 646 { 647 echo "To: $LOGNAME" 648 echo "Subject: $OPERATION failed" 649 echo "" 650 cat $TRACE 651 echo "" 652 echo "Your response has been saved in ~/dead.letter" 653 echo "" 654 echo "Your $MESSAGE follows:" 655 cat $WORK 656 } > $TEMP 657 case $MAILER_PIPE in 658 true) 659 $MAILER < $TEMP 660 ;; 661 *) 662 $MAILER $TEMP 663 ;; 664 esac 665 rm -f $TEMP 666 else 667 # keep TRACE file a little while for test at end of script 668 sleep 3 669 fi 670 rm -f $WORK* $COPY 671 672} > /dev/null 2>&1 & 673 674# if in synchronous mode, then wait untill it's done. Most useful for INN. 675if $SYNCHRO ; then 676 wait 677else 678 case "${WAIT_PERIOD-0}" in 679 0) 680 ;; 681 *) 682 sleep $WAIT_PERIOD 683 ;; 684 esac 685fi 686 687if test -s "$TRACE" ; then 688 exit 1 689fi 690 691exit 0 692