Home | History | Annotate | Download | only in bin
      1 #!/bin/sh
      2 # Submit a problem report to a GNATS site.
      3 # Copyright (C) 1993, 2000, 2001, 2002, 2003, 2007 Free Software Foundation, Inc.
      4 # Contributed by Brendan Kehoe (brendan (at] cygnus.com), based on a
      5 # version written by Heinz G. Seidl (hgs (at] cygnus.com).
      6 #
      7 # This file is part of GNU GNATS.
      8 #
      9 # GNU GNATS is free software; you can redistribute it and/or modify
     10 # it under the terms of the GNU General Public License as published by
     11 # the Free Software Foundation; either version 3, or (at your option)
     12 # any later version.
     13 #
     14 # GNU GNATS is distributed in the hope that it will be useful,
     15 # but WITHOUT ANY WARRANTY; without even the implied warranty of
     16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     17 # GNU General Public License for more details.
     18 #
     19 # You should have received a copy of the GNU General Public License
     20 # along with GNU GNATS; see the file COPYING3.  If not see
     21 # <http://www.gnu.org/licenses/>.
     22 
     23 # The version of this send-pr.
     24 VERSION=3.113
     25 
     26 # The submitter-id for your site.
     27 SUBMITTER=net
     28 
     29 # The default mail address for PR submissions. 
     30 GNATS_ADDR=gcc-gnats@gcc.gnu.org
     31 
     32 # The default release for this host.
     33 # We have to guess at what program_transform_name might have done.
     34 # "sed 1q" because neither "head -1" nor "head -n 1" is universal, argh.
     35 
     36 DEFAULT_GCC="`echo $0 | sed -e 's/bug//'`"
     37 DEFAULT_RELEASE="`$DEFAULT_GCC --version | sed 1q`"
     38 
     39 # The default organization.
     40 DEFAULT_ORGANIZATION=
     41 
     42 # What mailer to use.  This must come after the config file, since it is
     43 # host-dependent.
     44 # Copied from cvsbug
     45 if [ -f /usr/sbin/sendmail ]; then  
     46     MAIL_AGENT="/usr/sbin/sendmail -oi -t"
     47 else  
     48     MAIL_AGENT="/usr/lib/sendmail -oi -t"
     49 fi
     50 MAILER=`echo $MAIL_AGENT | sed -e 's, .*,,'`
     51 if [ ! -f "$MAILER" ] ; then
     52     echo "$COMMAND: Cannot file mail program \"$MAILER\"."
     53     echo "$COMMAND: Please fix the MAIL_AGENT entry in the $COMMAND file."
     54     exit 1
     55 fi
     56 
     57 
     58 # How to read the passwd database.
     59 PASSWD="cat /etc/passwd"
     60 
     61 ECHON=bsd
     62 
     63 if [ $ECHON = bsd ] ; then
     64   ECHON1="echo -n"
     65   ECHON2=
     66 elif [ $ECHON = sysv ] ; then
     67   ECHON1=echo
     68   ECHON2='\c'
     69 else
     70   ECHON1=echo
     71   ECHON2=
     72 fi
     73 
     74 #
     76 
     77 if [ -z "$TMPDIR" ]; then
     78   TMPDIR=/tmp
     79 else
     80   if [ "`echo $TMPDIR | grep '/$'`" != "" ]; then
     81     TMPDIR="`echo $TMPDIR | sed -e 's,/$,,'`"
     82   fi
     83 fi
     84 
     85 if [ yes = yes ]; then
     86 	TEMP0=`mktemp $TMPDIR/poXXXXXX` || exit 1
     87 	TEMP=`mktemp $TMPDIR/pXXXXXX` || exit 1
     88 	BAD=`mktemp $TMPDIR/pbadXXXXXX` || exit 1
     89 	REF=`mktemp $TMPDIR/pfXXXXXX` || exit 1
     90 	REMOVE_TEMP="rm -f $TEMP0 $TEMP $BAD $REF"
     91 else
     92 	TEMPD=$TMPDIR/pd$$
     93 	TEMP0=$TEMPD/po$$
     94 	TEMP=$TEMPD/p$$
     95 	BAD=$TEMPD/pbad$$
     96 	REF=$TEMPD/pf$$
     97 	mkdir $TEMPD || exit 1
     98 	REMOVE_TEMP="rm -rf $TEMPD"
     99 fi
    100 
    101 # find a user name
    102 if [ "$LOGNAME" = "" ]; then
    103 	if [ "$USER" != "" ]; then
    104 		LOGNAME="$USER"
    105 	else
    106 		LOGNAME="UNKNOWN"
    107 	fi
    108 fi
    109 
    110 FROM="$LOGNAME"
    111 REPLY_TO="${REPLY_TO:-${REPLYTO:-$LOGNAME}}"
    112 
    113 # Find out the name of the originator of this PR.
    114 if [ -n "$NAME" ]; then
    115   ORIGINATOR="$NAME"
    116 elif [ -f $HOME/.fullname ]; then
    117   ORIGINATOR="`sed -e '1q' $HOME/.fullname`"
    118 else
    119   # Must use temp file due to incompatibilities in quoting behavior
    120   # and to protect shell metacharacters in the expansion of $LOGNAME
    121   $PASSWD | grep "^$LOGNAME:" | awk -F: '{print $5}' | sed -e 's/,.*//' > $TEMP0
    122   ORIGINATOR="`cat $TEMP0`"
    123   rm -f $TEMP0
    124 fi
    125 
    126 if [ -n "$ORGANIZATION" ]; then
    127   if [ -f "$ORGANIZATION" ]; then
    128     ORGANIZATION="`cat $ORGANIZATION`"
    129   fi
    130 else
    131   if [ -n "$DEFAULT_ORGANIZATION" ]; then
    132     ORGANIZATION="$DEFAULT_ORGANIZATION"
    133   elif [ -f $HOME/.organization ]; then
    134     ORGANIZATION="`cat $HOME/.organization`"
    135   fi
    136 fi
    137 
    138 # If they don't have a preferred editor set, then use
    139 if [ -z "$VISUAL" ]; then
    140   if [ -z "$EDITOR" ]; then
    141     EDIT=vi
    142   else
    143     EDIT="$EDITOR"
    144   fi
    145 else
    146   EDIT="$VISUAL"
    147 fi
    148 
    149 # Find out some information.
    150 SYSTEM=`( [ -f /bin/uname ] && /bin/uname -a ) || \
    151         ( [ -f /usr/bin/uname ] && /usr/bin/uname -a ) || echo ""`
    152 ARCH=`[ -f /bin/arch ] && /bin/arch`
    153 MACHINE=`[ -f /bin/machine ] && /bin/machine`
    154 
    155 COMMAND=`echo $0 | sed -e 's,.*/,,'`
    156 USAGE="Usage: $COMMAND [-PVL] [-t address] [-f filename] [-s severity]
    157        [-c address] [--request-id] [--version]"
    158 REMOVE=
    159 BATCH=
    160 CC=
    161 SEVERITY_C=
    162 
    163 while [ $# -gt 0 ]; do
    164   case "$1" in
    165     -r) ;; 		# Ignore for backward compat.
    166     -t | --to) if [ $# -eq 1 ]; then echo "$USAGE"; $REMOVE_TEMP; exit 1; fi
    167 	shift ; GNATS_ADDR="$1"
    168 	EXPLICIT_GNATS_ADDR=true
    169         ;;
    170     -f | --file) if [ $# -eq 1 ]; then echo "$USAGE"; $REMOVE_TEMP; exit 1; fi
    171 	shift ; IN_FILE="$1"
    172 	if [ "$IN_FILE" != "-" -a ! -r "$IN_FILE" ]; then
    173 	  echo "$COMMAND: cannot read $IN_FILE"
    174 	  $REMOVE_TEMP
    175 	  exit 1
    176 	fi
    177 	;;
    178     -b | --batch) BATCH=true ;;
    179     -c | --cc) if [ $# -eq 1 ]; then echo "$USAGE"; $REMOVE_TEMP; exit 1; fi
    180 	shift ; CC="$1"
    181 	;;
    182     -s | --severity) if [ $# -eq 1 ]; then echo "$USAGE"; $REMOVE_TEMP; exit 1; fi
    183 	shift ; SEVERITY_C="$1"
    184 	;;
    185     -p | -P | --print) PRINT=true ;;
    186     -L | --list) FORMAT=norm ;;
    187     -l | -CL | --lisp) FORMAT=lisp ;;
    188     --request-id) REQUEST_ID=true ;;
    189     -h | --help) echo "$USAGE"; $REMOVE_TEMP; exit 0 ;;
    190     -V | --version) cat <<EOF
    191 gccbug (GCC) $DEFAULT_RELEASE
    192 Copyright (C) 2002 Free Software Foundation, Inc.
    193 This is free software; see the source for copying conditions.  There is NO
    194 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    195 
    196 EOF
    197 	$REMOVE_TEMP; exit 0 ;;
    198     -*) echo "$USAGE" ; $REMOVE_TEMP; exit 1 ;;
    199     *) echo "$USAGE" ; $REMOVE_TEMP; exit 1
    200  esac
    201  shift
    202 done
    203 
    204 # spam does not need to be listed here
    205 CATEGORIES="ada bootstrap c++ c debug driver fortran inline-asm java libgcj libobjc libstdc++ middle-end objc other pch preprocessor rtl-optimization target tree-optimization web"
    206 
    207 case "$FORMAT" in
    208   lisp) echo "$CATEGORIES" | \
    209         awk 'BEGIN {printf "( "} {printf "(\"%s\") ",$0} END {printf ")\n"}'
    210 	$REMOVE_TEMP
    211         exit 0
    212         ;;
    213   norm) l=`echo "$CATEGORIES" | \
    214 	awk 'BEGIN {max = 0; } { if (length($0) > max) { max = length($0); } }
    215 	     END {print max + 1;}'`
    216 	c=`expr 70 / $l`
    217 	if [ $c -eq 0 ]; then c=1; fi
    218 	echo "$CATEGORIES" | \
    219         awk 'BEGIN {print "Known categories:"; i = 0 }
    220           { printf ("%-'$l'.'$l's", $0); if ((++i % '$c') == 0) { print "" } }
    221             END { print ""; }'
    222 	$REMOVE_TEMP
    223         exit 0
    224         ;;
    225 esac
    226 
    227 ORIGINATOR_C='<name of the PR author (one line)>'
    228 ORGANIZATION_C='<organization of PR author (multiple lines)>'
    229 SYNOPSIS_C='<synopsis of the problem (one line)>'
    230 if [ -z "$SEVERITY_C" ]; then
    231   SEVERITY_C='<[ non-critical | serious | critical ] (one line)>'
    232 fi
    233 PRIORITY_C='<[ low | medium ] (one line)>'
    234 CATEGORY_C='<choose from the top of this file (one line)>'
    235 RELEASE_C='<release number or tag (one line)>'
    236 ENVIRONMENT_C='<machine, os, target, libraries (multiple lines)>'
    237 DESCRIPTION_C='<precise description of the problem (multiple lines)>'
    238 HOW_TO_REPEAT_C='<When reporting a compiler error, preprocessor output must be included>'
    239 FIX_C='<how to correct or work around the problem, if known (multiple lines)>'
    240 
    241 # Catch some signals. ($xs kludge needed by Sun /bin/sh)
    242 xs=0
    243 trap '$REMOVE_TEMP; exit $xs' 0
    244 trap 'echo "$COMMAND: Aborting ..."; $REMOVE_TEMP; xs=1; exit' 1 3 13 15
    245 
    246 # If they told us to use a specific file, then do so.
    247 if [ -n "$IN_FILE" ]; then
    248   if [ "$IN_FILE" = "-" ]; then
    249     # The PR is coming from the standard input.
    250     if [ -n "$EXPLICIT_GNATS_ADDR" ]; then
    251       sed -e "s;^[Tt][Oo]:.*;To: $GNATS_ADDR;" > $TEMP
    252     else
    253       cat > $TEMP
    254     fi
    255   else
    256     # Use the file they named.
    257     if [ -n "$EXPLICIT_GNATS_ADDR" ]; then
    258       sed -e "s;^[Tt][Oo]:.*;To: $GNATS_ADDR;" $IN_FILE > $TEMP
    259     else
    260       cat $IN_FILE > $TEMP
    261     fi
    262   fi
    263 else
    264 
    265   if [ -n "$PR_FORM" -a -z "$PRINT_INTERN" ]; then
    266     # If their PR_FORM points to a bogus entry, then bail.
    267     if [ ! -f "$PR_FORM" -o ! -r "$PR_FORM" -o ! -s "$PR_FORM" ]; then
    268       echo "$COMMAND: can't seem to read your template file (\`$PR_FORM'), ignoring PR_FORM"
    269       sleep 1
    270       PRINT_INTERN=bad_prform
    271     fi
    272   fi
    273 
    274   if [ -n "$PR_FORM" -a -z "$PRINT_INTERN" ]; then
    275     cp $PR_FORM $TEMP || 
    276       ( echo "$COMMAND: could not copy $PR_FORM" ; xs=1; exit )
    277   else
    278     for file in $TEMP $REF ; do
    279       cat  > $file << '__EOF__'
    280 SEND-PR: -*- send-pr -*-
    281 SEND-PR: Lines starting with `SEND-PR' will be removed automatically, as
    282 SEND-PR: will all comments (text enclosed in `<' and `>').
    283 SEND-PR: 
    284 SEND-PR: Please consult the GCC manual if you are not sure how to
    285 SEND-PR: fill out a problem report.
    286 SEND-PR: Note that the Synopsis field is mandatory.  The Subject (for
    287 SEND-PR: the mail) will be made the same as Synopsis unless explicitly
    288 SEND-PR: changed.
    289 SEND-PR:
    290 SEND-PR: Choose from the following categories:
    291 SEND-PR:
    292 __EOF__
    293 
    294       # Format the categories so they fit onto lines.
    295 	l=`echo "$CATEGORIES" | \
    296 	awk 'BEGIN {max = 0; } { if (length($0) > max) { max = length($0); } }
    297 	     END {print max + 1;}'`
    298 	c=`expr 61 / $l`
    299 	if [ $c -eq 0 ]; then c=1; fi
    300 	echo "$CATEGORIES" | \
    301         awk 'BEGIN {printf "SEND-PR: "; i = 0 }
    302           { printf ("%-'$l'.'$l's", $0);
    303 	    if ((++i % '$c') == 0) { printf "\nSEND-PR: " } }
    304             END { printf "\nSEND-PR:\n"; }' >> $file
    305 
    306       cat >> $file << __EOF__
    307 To: $GNATS_ADDR
    308 Subject: 
    309 From: $FROM
    310 Reply-To: $REPLYTO
    311 Cc: $CC
    312 X-send-pr-version: $VERSION
    313 X-GNATS-Notify: 
    314 
    315 
    316 >Submitter-Id:	$SUBMITTER
    317 >Originator:	$ORIGINATOR
    318 >Organization:	${ORGANIZATION-$ORGANIZATION_C}
    319 >Confidential:	no
    320 SEND-PR: Leave "Confidential" as "no"; all GCC PRs are public.
    321 >Synopsis:	$SYNOPSIS_C
    322 >Severity:	$SEVERITY_C
    323 SEND-PR: critical     GCC is completely not operational; no work-around known.
    324 SEND-PR: serious      GCC is not working properly; a work-around is possible.
    325 SEND-PR: non-critical Report indicates minor problem.
    326 >Priority:	$PRIORITY_C
    327 SEND-PR: medium       The problem should be solved in the next release.
    328 SEND-PR: low          The problem should be solve in a future release.
    329 >Category:	$CATEGORY_C
    330 >Class:		<[ doc-bug | accepts-illegal | rejects-legal | wrong-code | ice-on-legal-code| ice-on-illegal-code | pessimizes-code | sw-bug | change-request | support ] (one line)>
    331 SEND-PR: doc-bug          The documentation is incorrect.
    332 SEND-PR: accepts-illegal  GCC fails to reject erroneous code.
    333 SEND-PR: rejects-legal    GCC gives an error message for correct code.
    334 SEND-PR: wrong-code       The machine code generated by gcc is incorrect.
    335 SEND-PR: ice-on-legal-code   GCC gives an Internal Compiler Error (ICE)
    336 SEND-PR:                     for correct code
    337 SEND-PR: ice-on-illegal-code GCC gives an ICE instead of reporting an error
    338 SEND-PR: pessimizes-code     GCC misses an important optimization opportunity
    339 SEND-PR: sw-bug              Software bug of some other class than above
    340 SEND-PR: change-request      A feature in GCC is missing.
    341 SEND-PR: support             I need help with gcc.
    342 >Release:	${DEFAULT_RELEASE-$RELEASE_C}
    343 >Environment:
    344 `[ -n "$SYSTEM" ] && echo System: $SYSTEM`
    345 `[ -n "$ARCH" ] && echo Architecture: $ARCH`
    346 `[ -n "$MACHINE" ] && echo Machine: $MACHINE`
    347 	$ENVIRONMENT_C
    348 host: x86_64-unknown-linux-gnu
    349 build: x86_64-unknown-linux-gnu
    350 target: i686-pc-linux-gnu
    351 __EOF__
    352       cat >> $file << \__EOF__
    353 configured with: /tmp/gcc-hardy32/toolchain-src/gcc/gcc-4.4.3/configure --prefix=/tmp/gcc-hardy32/i686-linux-glibc2.7-4.4.3 --with-sysroot=/tmp/gcc-hardy32/i686-linux-glibc2.7-4.4.3/sysroot --disable-nls --with-gmp=/tmp/gcc-hardy32/i686-linux-glibc2.7-4.4.3 --with-mpfr=/tmp/gcc-hardy32/i686-linux-glibc2.7-4.4.3 --target=i686-linux --disable-plugin --enable-languages=c,c++
    354 __EOF__
    355       cat >> $file << __EOF__
    356 >Description:
    357 	$DESCRIPTION_C
    358 >How-To-Repeat:
    359 	$HOW_TO_REPEAT_C
    360 >Fix:
    361 	$FIX_C
    362 __EOF__
    363     done
    364   fi
    365 
    366   if [ "$PRINT" = true -o "$PRINT_INTERN" = true ]; then
    367     cat $TEMP
    368     xs=0; exit
    369   fi
    370 
    371   chmod u+w $TEMP
    372   if [ -z "$REQUEST_ID" ]; then
    373     eval $EDIT $TEMP
    374   else
    375     ed -s $TEMP << '__EOF__'
    376 /^Subject/s/^Subject:.*/Subject: request for a customer id/
    377 /^>Category/s/^>Category:.*/>Category: send-pr/
    378 w
    379 q
    380 __EOF__
    381   fi
    382 
    383   if cmp -s $REF $TEMP ; then
    384     echo "$COMMAND: problem report not filled out, therefore not sent"
    385     xs=1; exit
    386   fi
    387 fi
    388 
    389 #
    391 #	Check the enumeration fields
    392 
    393 # This is a "sed-subroutine" with one keyword parameter 
    394 # (with workaround for Sun sed bug)
    395 #
    396 SED_CMD='
    397 /$PATTERN/{
    398 s|||
    399 s|<.*>||
    400 s|^[ 	]*||
    401 s|[ 	]*$||
    402 p
    403 q
    404 }'
    405 
    406 
    407 while [ -z "$REQUEST_ID" ]; do
    408   CNT=0
    409 
    410   # 1) Confidential
    411   #
    412   PATTERN=">Confidential:"
    413   CONFIDENTIAL=`eval sed -n -e "\"$SED_CMD\"" $TEMP`
    414   case "$CONFIDENTIAL" in
    415     no) CNT=`expr $CNT + 1` ;;
    416     *) echo "$COMMAND: \`$CONFIDENTIAL' is not a valid value for \`Confidential'." ;;
    417   esac
    418   #
    419   # 2) Severity
    420   #
    421   PATTERN=">Severity:"
    422   SEVERITY=`eval sed -n -e "\"$SED_CMD\"" $TEMP`
    423   case "$SEVERITY" in
    424     ""|non-critical|serious|critical) CNT=`expr $CNT + 1` ;;
    425     *)  echo "$COMMAND: \`$SEVERITY' is not a valid value for \`Severity'."
    426   esac
    427   #
    428   # 3) Priority
    429   #
    430   PATTERN=">Priority:"
    431   PRIORITY=`eval sed -n -e "\"$SED_CMD\"" $TEMP`
    432   case "$PRIORITY" in
    433     ""|low|medium) CNT=`expr $CNT + 1` ;;
    434     high) echo "$COMMAND: \`Priority: high' is reserved for GCC maintainers." ;;
    435     *)  echo "$COMMAND: \`$PRIORITY' is not a valid value for \`Priority'."
    436   esac
    437   #
    438   # 4) Category
    439   #
    440   PATTERN=">Category:"
    441   CATEGORY=`eval sed -n -e "\"$SED_CMD\"" $TEMP`
    442   FOUND=
    443   for C in $CATEGORIES
    444   do
    445     if [ "$C" = "$CATEGORY" ]; then FOUND=true ; break ; fi
    446   done
    447   if [ -n "$FOUND" ]; then
    448     CNT=`expr $CNT + 1`	
    449   else
    450     if [ -z "$CATEGORY" ]; then
    451       echo "$COMMAND: you must include a Category: field in your report."
    452     else
    453       echo "$COMMAND: \`$CATEGORY' is not a known category."
    454     fi
    455   fi
    456   #
    457   # 5) Class
    458   #
    459   PATTERN=">Class:"
    460   CLASS=`eval sed -n -e "\"$SED_CMD\"" $TEMP`
    461   case "$CLASS" in
    462     ""|doc-bug|accepts-illegal|rejects-legal|wrong-code|ice-on-legal-code|ice-on-illegal-code|pessimizes-code|sw-bug|change-request|support) CNT=`expr $CNT + 1` ;;
    463     *)  echo "$COMMAND: \`$CLASS' is not a valid value for \`Class'."
    464   esac
    465   #
    466   # 6) Check that synopsis is not empty
    467   #
    468   if grep "^>Synopsis:[ 	]*${SYNOPSIS_C}\$" $TEMP > /dev/null
    469   then
    470     echo "$COMMAND: Synopsis must not be empty."
    471   else
    472     CNT=`expr $CNT + 1`
    473   fi
    474 
    475   [ $CNT -lt 6 -a -z "$BATCH" ] && 
    476     echo "Errors were found with the problem report."
    477 
    478   while true; do
    479     if [ -z "$BATCH" ]; then
    480       $ECHON1 "a)bort, e)dit or s)end? $ECHON2"
    481       read input
    482     else
    483       if [ $CNT -eq 6 ]; then
    484         input=s
    485       else
    486         input=a
    487       fi
    488     fi
    489     case "$input" in
    490       a*)
    491 	if [ -z "$BATCH" ]; then
    492 	  echo "$COMMAND: the problem report remains in $BAD and is not sent."
    493 	  REMOVE_TEMP="rm -f $TEMP0 $TEMP $REF"
    494 	  mv $TEMP $BAD
    495         else
    496 	  echo "$COMMAND: the problem report is not sent."
    497 	fi
    498 	xs=1; exit
    499 	;;
    500       e*)
    501         eval $EDIT $TEMP
    502 	continue 2
    503 	;;
    504       s*)
    505 	break 2
    506 	;;
    507     esac
    508   done
    509 done
    510 
    511 #
    512 # Make sure the mail has got a Subject.  If not, use the same as
    513 # in Synopsis.
    514 #
    515 
    516 if grep '^Subject:[ 	]*$' $TEMP > /dev/null
    517 then
    518   SYNOPSIS=`grep '^>Synopsis:' $TEMP | sed -e 's/^>Synopsis:[ 	]*//'`
    519   ed -s $TEMP << __EOF__
    520 /^Subject:/s/:.*\$/: $SYNOPSIS/
    521 w
    522 q
    523 __EOF__
    524 fi
    525 
    526 #
    527 #	Remove comments and send the problem report
    528 #	(we have to use patterns, where the comment contains regex chars)
    529 #
    530 # /^>Originator:/s;$ORIGINATOR;;
    531 sed  -e "
    532 /^SEND-PR:/d
    533 /^>Organization:/,/^>[A-Za-z-]*:/s;$ORGANIZATION_C;;
    534 /^>Confidential:/s;<.*>;;
    535 /^>Synopsis:/s;$SYNOPSIS_C;;
    536 /^>Severity:/s;<.*>;;
    537 /^>Priority:/s;<.*>;;
    538 /^>Category:/s;$CATEGORY_C;;
    539 /^>Class:/s;<.*>;;
    540 /^>Release:/,/^>[A-Za-z-]*:/s;$RELEASE_C;;
    541 /^>Environment:/,/^>[A-Za-z-]*:/s;$ENVIRONMENT_C;;
    542 /^>Description:/,/^>[A-Za-z-]*:/s;$DESCRIPTION_C;;
    543 /^>How-To-Repeat:/,/^>[A-Za-z-]*:/s;$HOW_TO_REPEAT_C;;
    544 /^>Fix:/,/^>[A-Za-z-]*:/s;$FIX_C;;
    545 " $TEMP > $REF
    546 
    547 if $MAIL_AGENT < $REF; then
    548   echo "$COMMAND: problem report sent"
    549   xs=0; exit
    550 else
    551   echo "$COMMAND: mysterious mail failure."
    552   if [ -z "$BATCH" ]; then
    553     echo "$COMMAND: the problem report remains in $BAD and is not sent."
    554     REMOVE_TEMP="rm -f $TEMP0 $TEMP $REF"
    555     mv $REF $BAD
    556   else
    557     echo "$COMMAND: the problem report is not sent."
    558   fi
    559   xs=1; exit
    560 fi
    561