home *** CD-ROM | disk | FTP | other *** search
/ Il CD di internet / CD.iso / SOURCE / N / NN / _NN-SPOO.TAR / usr / lib / nn / aux next >
Encoding:
Text File  |  1994-09-13  |  7.9 KB  |  448 lines

  1. #!/bin/sh
  2.  
  3. # Generated by nn release 6.4.18
  4.  
  5. VERSION="6.4.18"
  6. INEWS="/usr/bin/inews"
  7. INEWS_DIR="/usr/bin"
  8. AWK="awk"
  9. NNTP=false
  10. ACTIVE=/var/lib/news/active
  11. LOG=/usr/lib/nn/Log
  12. TMP=${TMPDIR-/usr/tmp}
  13. DB=/var/spool/nn
  14. BIN=/usr/bin
  15. LIB=/usr/lib/nn
  16. AUTH=false
  17.  
  18. # ---- end of prefix
  19.  
  20.  
  21. # PREFIX is inserted above this line during Make
  22.  
  23. trap : 2 3
  24.  
  25. PATH=/bin:$PATH
  26.  
  27. # Paramaters transferred from nn via .param file:
  28. #    ART_ID        Article id to cancel
  29. #    GROUP        Group of article to cancel
  30. #    WORK        Temporary file for response (w initial contents)
  31. #    FIRST_ACTION    First action to perform
  32. #    EMPTY_CHECK    [empty-response-check]
  33. #    EDITOR        [editor]
  34. #    ED_LINE        First line of body in WORK file
  35. #    SPELL_CHECKER    [spell-checker]
  36. #    PAGER        [pager]
  37. #    APPEND_SIG    [append-signature]
  38. #    QUERY_SIG    [query-signature]
  39. #    NOVICE        [expert]
  40. #    WAIT_PERIOD     [response-check-pause]
  41. #    RECORD        [mail/news-record]
  42. #    MMDF_SEP    [mmdf-format = ^A^A^A^A]
  43. #    POST        [inews]
  44. #    POST_PIPE    [inews-pipe-input]
  45. #    POSTER_ADR    Reply address for follow-ups
  46. #    MAILER        [mailer]
  47. #    MAILER_PIPE    [mailer-pipe-input]
  48. #    DFLT_ANSW    [response-default-answer]
  49. #    ALIAS_EXPANDER    [mail-alias-expander]
  50.  
  51. CC=""
  52.  
  53. if [ "$1" = "COMPLETE" ] ; then
  54.   . ${HOME}/.nn/hold.param
  55.   WORK="$2"
  56.   EMPTY_CHECK=false
  57.   cp ${HOME}/.nn/hold.work $WORK
  58.   rm -f ${HOME}/.nn/hold.*
  59. else
  60.  . ${HOME}/.nn/.param
  61.  OPERATION=$1
  62. fi
  63.  
  64. # first we handle 'cancel'
  65.  
  66. case "$OPERATION" in
  67. cancel)
  68.   TRACE="$2"
  69.   $INEWS -h  << EOF > $TRACE 2>&1
  70. Newsgroups: $GROUP
  71. Subject: cancel $ART_ID
  72. Control: cancel $ART_ID
  73.  
  74. cancel $ART_ID in newsgroup $GROUP
  75. EOF
  76.  
  77.   x=$?
  78.   case $x in
  79.     0) ;;
  80.     *) echo '' ; cat $TRACE ; sleep 2 ;;
  81.   esac
  82.   rm -f $TRACE
  83.   exit $x
  84.   ;;
  85. post|follow)
  86.   LOOKFOR="Newsgroups:"
  87.   SEND="post article"
  88.   ;;
  89. *)
  90.   LOOKFOR="To:"
  91.   SEND="send letter"
  92.   ;;
  93. esac
  94.  
  95. TRACE=${WORK}T
  96. FINAL=${WORK}F
  97. COPY=""
  98.  
  99. if [ "${FIRST_ACTION}" != "send" ] ; then
  100.   COPY=${WORK}C
  101.   cp $WORK $COPY
  102. fi
  103.  
  104. # loop until sent or aborted.
  105.  
  106. loop=true
  107. prompt=false
  108. pr="a)bort"
  109. if [ -n "${POSTER_ADR}" ] ; then
  110.   pr="$pr c)c"
  111. fi
  112. pr="$pr e)dit"
  113. pr="$pr h)old"
  114. if [ -n "${SPELL_CHECKER}" ] ; then
  115.   pr="$pr i)spell"
  116. fi
  117. pr="$pr m)ail r)eedit s)end v)iew w)rite"
  118. case "${DFLT_ANSW}" in
  119.   p*|s*) pr1=" (${SEND})"
  120.       ;;
  121.   "") pr1=""
  122.       ;;
  123.   *)  pr1=" (${DFLT_ANSW})"
  124.       ;;
  125. esac
  126.  
  127. while $loop ; do
  128.   if [ -n "${FIRST_ACTION}" ] ; then
  129.     act="${FIRST_ACTION}"
  130.     FIRST_ACTION=""
  131.   elif $prompt ; then
  132.     echo ''
  133.     echo "${pr}"
  134.     ${AWK} 'END{printf "Action:'"${pr1}"' "}' < /dev/null
  135.     read act
  136.     if [ -z "$act" ] ; then
  137.       act="${DFLT_ANSW}"
  138.     fi
  139.   fi
  140.   prompt=true
  141.  
  142.   case "$act" in
  143.   a*)
  144.     ${AWK} 'END{printf "Confirm abort: (y) "}' < /dev/null
  145.     read act
  146.     case "$act" in
  147.     ""|y*) rm -f $WORK $COPY ;
  148.          exit 22 ;;
  149.     esac
  150.     ;;
  151.  
  152.   c*)
  153.     if [ -n "${POSTER_ADR}" ] ; then
  154.       ${AWK} 'END{printf "CC: '"${POSTER_ADR}"' (y) "}' </dev/null
  155.       read act
  156.       case "$act" in
  157.       ""|"y*")
  158.     echo "Sending copy to poster...."
  159.     CC="${POSTER_ADR}"
  160.     ;;
  161.       esac
  162.     else
  163.       echo "Not doing follow-up"
  164.     fi
  165.     ;;
  166.  
  167.   e*)
  168.     # call editor to enter at line $ED_LINE of work file
  169.  
  170.     case `basename "${EDITOR-vi}"` in
  171.     vi|emacs|emacsclient )
  172.       # Berkeley vi display editor
  173.       # GNU emacs disply editor
  174.       ${EDITOR-vi} +${ED_LINE} $WORK
  175.       ;;
  176.     ded )
  177.       # QMC ded display editor
  178.       $EDITOR -l${ED_LINE} $WORK
  179.       ;;
  180.     uemacs )
  181.       # micro emacs
  182.       $EDITOR -g${ED_LINE} $WORK
  183.       ;;
  184.     * )
  185.       # Unknown editor
  186.       $EDITOR $WORK
  187.       ;;
  188.     esac
  189.  
  190.     if [ ! -s $WORK ] ; then
  191.       rm -f $WORK $COPY
  192.       exit 22
  193.     fi
  194.  
  195.     if ${EMPTY_CHECK} ; then
  196.       if cmp -s $WORK $COPY ; then
  197.         rm -f $WORK $COPY
  198.         exit 22
  199.       fi
  200.     fi
  201.  
  202.     if [ -n "${LOOKFOR}" ] ; then
  203.       if grep "^${LOOKFOR}" $WORK > /dev/null ; then
  204.     :
  205.       else
  206.     echo "Warning: no $LOOKFOR line in article"
  207.       fi
  208.     fi
  209.     ;;
  210.  
  211.   h*)
  212.     ${AWK} 'END{printf "Complete response later: (y) "}' < /dev/null
  213.     read act
  214.     case "$act" in
  215.     ""|y*)
  216.     cp $WORK ${HOME}/.nn/hold.work
  217.     cp ${HOME}/.nn/.param ${HOME}/.nn/hold.param
  218.     echo "OPERATION=$OPERATION" >> ${HOME}/.nn/hold.param
  219.     if [ -n "$COPY" ] ; then
  220.       rm -f $COPY
  221.     fi
  222.     rm -f $WORK
  223.     exit 22 ;;
  224.     esac
  225.     ;;
  226.  
  227.   i*)
  228.     if [ -n "${SPELL_CHECKER}" ] ; then
  229.       ${SPELL_CHECKER} ${WORK}
  230.     else
  231.       echo "spell-checker not defined"
  232.     fi
  233.     ;;
  234.  
  235.   m*)
  236.     ${AWK} 'END{printf "To: "}' </dev/null
  237.     read CC
  238.     if [ -n "${CC}" ] ; then
  239.       echo "Sending copy...."
  240.     fi
  241.     ;;
  242.  
  243.   n*)
  244.     act="abort"
  245.     prompt=false
  246.     ;;
  247.  
  248.   p*)
  249.     loop=false
  250.     ;;
  251.  
  252.   r*)
  253.     ${AWK} 'END{printf "Undo all changes? (n) "}' < /dev/null
  254.     read act
  255.     case "$act" in
  256.     "[yY]*") cp $COPY $WORK ;;
  257.     esac
  258.     FIRST_ACTION=edit
  259.     ;;
  260.  
  261.   s*)
  262.     loop=false
  263.     ;;
  264.  
  265.   v*)
  266.     ${PAGER-cat} $WORK
  267.     ;;
  268.  
  269.   w*)
  270.     echo "Append article to file:"
  271.     read FNAME
  272.     if [ -n "$FNAME" ] ; then
  273.       { cat $WORK ; echo ; } >> $FNAME
  274.     fi
  275.     ;;
  276.  
  277.   y*)
  278.     act="${DFLT_ANSW}"
  279.     prompt=false
  280.     ;;
  281.  
  282.   ENV)
  283.     set
  284.     ;;
  285.   esac
  286.  
  287.   if [ -n "${CC}" ] ; then
  288.     echo "To: ${CC}" > $FINAL
  289.     sed -e "s/^To:/X-To:/" -e "/^Orig-To:/d" $WORK >> $FINAL
  290.     if ${MAILER_PIPE} ; then
  291.       $MAILER < $FINAL
  292.       x=$?
  293.     else
  294.       $MAILER $FINAL
  295.       x=$?
  296.     fi
  297.     case $x in
  298.       0) echo Done ;;
  299.       *) echo $MAILER failed ;;
  300.     esac
  301.     CC=""
  302.   fi
  303. done
  304.  
  305. if [ ${APPEND_SIG} = "true" -a -f $HOME/.signature ] ; then
  306.   if ${QUERY_SIG} ; then
  307.     ${AWK} 'END{printf "Append .signature? (y) "}' < /dev/null
  308.     read ans
  309.   else
  310.     ans=y
  311.   fi
  312.   case $ans in
  313.   ''|y*|Y*)
  314.     echo "-- " >> $WORK
  315.     cat $HOME/.signature >> $WORK
  316.     ;;
  317.   esac
  318. fi
  319.  
  320. case "$OPERATION" in
  321.   follow|post)
  322.     if ${NOVICE} ; then
  323.       echo "Be patient! Your new article will not show up immediately."
  324.       case ${WAIT_PERIOD-0} in
  325.     0|1) WAIT_PERIOD=2 ;;
  326.       esac
  327.     fi
  328.     ;;
  329. esac
  330.  
  331. {
  332.   trap 'echo SIGNAL' 1 2 3
  333.  
  334.   grep -v "^Orig-To: " $WORK > $FINAL
  335.  
  336.   LOGNAME="${LOGNAME-$USER}"
  337.   if [ -z "${LOGNAME}" ] ; then
  338.     set `who am i`
  339.     LOGNAME="$1"
  340.   fi
  341.  
  342.   if [ -n "${RECORD}" ] ; then
  343.   {
  344.     # keep a copy of message in $RECORD (in mail format)
  345.     set `date`
  346.     if [ -n "$MMDF_SEP" ] ; then
  347.       echo "$MMDF_SEP"
  348.     fi
  349.     if [ $3 -gt 9 ] ; then
  350.       echo From ${LOGNAME} $1 $2 $3 $4 $6 $7
  351.     else
  352.       echo From ${LOGNAME} $1 $2 " $3" $4 $6 $7
  353.     fi
  354.     echo "From: ${LOGNAME}"
  355.     cat $FINAL
  356.     echo "$MMDF_SEP"
  357.   } >> "$RECORD"
  358.   fi
  359.  
  360.   case "$OPERATION" in
  361.  
  362.     reply|forward|mail)
  363.       if [ -n "${ALIAS_EXPANDER}" ] ; then
  364.     ${ALIAS_EXPANDER} $FINAL
  365.       fi
  366.       if ${MAILER_PIPE} ; then
  367.         $MAILER < $FINAL
  368.         x=$?
  369.       else
  370.         $MAILER $FINAL
  371.         x=$?
  372.       fi
  373.       case $x in
  374.     0) ;;
  375.     *) echo $MAILER failed ;;
  376.       esac
  377.       ;;
  378.  
  379.     follow|post)
  380.       {
  381.     if ${POST_PIPE} ; then
  382.       $POST < $FINAL 2>&1
  383.       x=$?
  384.     else
  385.       $POST $FINAL 2>&1
  386.       x=$?
  387.     fi
  388.     case $x in
  389.       0) sleep 60 ;;
  390.       *) echo $INEWS failed ;;
  391.     esac
  392.       } | sed \
  393.         -e "/spooled for later processing/d" \
  394.         -e "/problem has been taken care of/d" \
  395.         -e "/mailing your article to/d" \
  396.         -e "/being mailed to/d" \
  397.         -e "/is moderated/d"
  398.       ;;
  399.  
  400.     *)
  401.       echo "Invalid operation: $OPERATION -- help"
  402.       OPERATION="nn response operation"
  403.       ;;
  404.   esac > $TRACE 2>&1
  405.  
  406.   if [ -s $TRACE ] ; then
  407.     if [ -s $HOME/dead.letter ] ; then
  408.       cat $HOME/dead.letter >> $HOME/dead.letters
  409.       echo '' >> $HOME/dead.letters
  410.     fi
  411.     cat $WORK > $HOME/dead.letter
  412.  
  413.     # Gripe: Error-report is lost if REC_MAIL was the problem
  414.     {
  415.       echo "To: ${LOGNAME}"
  416.       echo "Subject: $OPERATION failed"
  417.       echo ''
  418.       cat $TRACE
  419.       echo ''
  420.       echo 'Your response has been saved in ~/dead.letter'
  421.       echo ''
  422.       echo 'Your article/letter follows:'
  423.       cat $WORK
  424.     } > $FINAL
  425.     if ${MAILER_PIPE} ; then
  426.       $MAILER < $FINAL
  427.     else
  428.       $MAILER $FINAL
  429.     fi
  430.   else
  431.     # keep TRACE file a little while for test at end of script
  432.     sleep 3
  433.   fi
  434.   rm -f $WORK $COPY $TRACE $FINAL
  435.  
  436. } > /dev/null 2>&1 &
  437.  
  438. case ${WAIT_PERIOD-0} in
  439.   0) ;;
  440.   *) sleep ${WAIT_PERIOD} ;;
  441. esac
  442.  
  443. if [ -s "$TRACE" ] ; then
  444.   exit 1
  445. fi
  446.  
  447. exit 0
  448.