home *** CD-ROM | disk | FTP | other *** search
/ Unix System Administration Handbook 1997 October / usah_oct97.iso / news / nn.tar / nn-6.5.1 / aux.sh < prev    next >
Text File  |  1995-04-29  |  12KB  |  677 lines

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