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