Annotation of 43BSDTahoe/new/rn/Pnews.SH, revision 1.1.1.1

1.1       root        1: case $CONFIG in
                      2:     '') . config.sh ;;
                      3: esac
                      4: echo "Extracting Pnews (with variable substitutions)"
                      5: $spitshell >Pnews <<!GROK!THIS!
                      6: $startsh
                      7: # $Header: Pnews.SH,v 4.3.1.4 86/09/05 15:21:10 lwall Exp $
                      8: #
                      9: # $Log:        Pnews.SH,v $
                     10: # Revision 4.3.1.4  86/09/05  15:21:10  lwall
                     11: # Changes for new top-level newsgroup names.
                     12: # 
                     13: # Revision 4.3.1.3  85/08/01  14:24:06  lwall
                     14: # Added AUTHORCOPY.  Temp file is no longer in /tmp.  'e editor' added.
                     15: # 
                     16: # Revision 4.3.1.2  85/05/17  10:36:46  lwall
                     17: # Removed some extra backslashes.
                     18: # 
                     19: # Revision 4.3.1.1  85/05/10  11:30:21  lwall
                     20: # Branch for patches.
                     21: # 
                     22: # Revision 4.3  85/05/01  12:20:33  lwall
                     23: # Baseline for release with 4.3bsd.
                     24: # 
                     25: #
                     26: # syntax: Pnews -h headerfile                  or
                     27: #        Pnews -h headerfile oldarticle        or
                     28: #         Pnews newsgroup title                        or just
                     29: #         Pnews
                     30: 
                     31: export PATH || (echo "OOPS, this isn't sh.  Desperation time.  I will feed myself to sh."; sh \$0; kill \$\$)
                     32: 
                     33: # System dependencies
                     34: 
                     35: mailer="${mailer-/bin/mail}"
                     36: # if you change this to something that does signatures, take out signature code
                     37: 
                     38: case $portable in
                     39: define)
                     40: # your site name
                     41: sitename=\`$hostcmd\`
                     42: # where recordings, distributions and moderators are kept
                     43: lib=\`$filexp $lib\`
                     44: # where important rn things are kept
                     45: rnlib=\`$filexp $rnlib\`
                     46: ;;
                     47: undef)
                     48: # your site name
                     49: sitename="$sitename"
                     50: # where recordings, distributions and moderators are kept
                     51: lib="$lib"
                     52: # where important rn things are kept
                     53: rnlib="$rnlib"
                     54: ;;
                     55: esac
                     56: 
                     57: # your organization name
                     58: orgname="$orgname"
                     59: # what pager you use--if you have kernal paging use cat
                     60: pager="\${PAGER-$pager}"
                     61: # how you derive full names, bsd, usg, or other
                     62: nametype="$nametype"
                     63: # default editor
                     64: defeditor="$defeditor"
                     65: # how not to echo with newline
                     66: n="$n"
                     67: c="$c"
                     68: 
                     69: # You should also look at the distribution warnings below marked !DIST!
                     70: # to make sure any distribution regions you are a member of are included.
                     71: # The following are some prototypical distribution groups.  If you do not
                     72: # use them all set the unused ones to a non-null string such as 'none'.
                     73: loc="$locpref"
                     74: org="$orgpref"
                     75: city="$citypref"
                     76: state="$statepref"
                     77: cntry="$cntrypref"
                     78: cont="$contpref"
                     79: 
                     80: test=${test-test}
                     81: sed=${sed-sed}
                     82: echo=${echo-echo}
                     83: cat=${cat-cat}
                     84: egrep=${egrep-egrep}
                     85: grep=${grep-grep}
                     86: rm=${rm-rm}
                     87: tr=${tr-tr}
                     88: inews=${inews-inews}
                     89: 
                     90: !GROK!THIS!
                     91: $spitshell >>Pnews <<'!NO!SUBS!'
                     92: dotdir=${DOTDIR-${HOME-$LOGDIR}}
                     93: tmpart=$dotdir/.article
                     94: 
                     95: if $test -f $dotdir/.pnewsexpert; then
                     96:     expertise=expert
                     97: else
                     98:     $cat <<'EOM'
                     99: I see you've never used this version of Pnews before.  I will give you extra
                    100: help this first time through, but then you must remember what you learned.
                    101: If you don't understand any question, type h and a CR (carriage return) for
                    102: help.
                    103: 
                    104: If you've never posted an article to the net before, it is HIGHLY recommended
                    105: that you read the netiquette document found in mod.announce.newusers so
                    106: that you'll know to avoid the commonest blunders.  To do that, interrupt
                    107: Pnews, and get to the top-level prompt of rn.  Say "g mod.announce.newusers"
                    108: and you are on your way.
                    109: 
                    110: EOM
                    111:     expertise=beginner
                    112: fi
                    113: 
                    114: case $cntry in
                    115:   can) stpr=Province ;;
                    116:   *)   stpr=State ;;
                    117: esac
                    118: 
                    119: headerfile=""
                    120: case $# in
                    121: 0) ;;
                    122: *)  case $1 in
                    123:     -h)
                    124:        headerfile="$2"
                    125:        shift
                    126:        shift
                    127:        case $# in
                    128:        0)
                    129:            oldart=""
                    130:            ;;
                    131:        *)
                    132:            oldart="$1"
                    133:            shift
                    134:            ;;
                    135:        esac
                    136:        ;;
                    137:     esac
                    138:     ;;
                    139: esac
                    140: 
                    141: case $headerfile in
                    142: '')
                    143:     . $rnlib/Pnews.header
                    144:     ;;
                    145: *)
                    146:     $cat < $headerfile  > $tmpart
                    147:     ;;
                    148: esac
                    149:     rescue="sleep 1; $cat $tmpart >>${HOME-$LOGDIR}/dead.article ; $echo Article appended to ${HOME-$LOGDIR}/dead.article ; exit"
                    150:     trap "$rescue" 1
                    151:     trap "$rescue" 2
                    152: 
                    153: $echo ""
                    154: set X `$sed < $tmpart -n -e '/^Distribution: /{' -e p -e q -e '}' -e '/^$/q'`
                    155: shift
                    156: case $# in
                    157: 0|1)
                    158:     set X `$sed < $tmpart -n -e '/^Newsgroups: /{' -e p -e q -e '}'`
                    159:     shift
                    160:     case $# in
                    161:     0|1)
                    162:        set "x misc.whatever"
                    163:        ;;
                    164:     esac
                    165:     ;;
                    166: *)
                    167:     set $1 $2.whatever
                    168:     ;;
                    169: esac
                    170: shift
                    171: 
                    172: #: play recorded message
                    173: #if $test -s ${lib}/recording ; then
                    174: #     ng=`$echo $1 | $sed "s/,.*//"`
                    175: #    _rec1=${lib}/`$sed -n "/^$ng/s/^.*        //p" ${lib}/recording`
                    176: #    _tmp=`$echo $ng |$sed "s/\..*//"`
                    177: #    _rec2=${lib}/`$cat -s ${lib}/recording|$grep ${_tmp}.all|$sed "s/^.*      //"`
                    178: #    if $test -f ${_rec1} ; then
                    179: #      $cat -s ${_rec1}
                    180: #    fi
                    181: #    if $test -f ${_rec2} ; then
                    182: #      $cat -s ${_rec2}
                    183: #    fi
                    184: #fi
                    185: 
                    186: # tell them what we think they are doing... !DIST!
                    187: case $1 in
                    188: net.*|world.*|comp.*|news.*|sci.*|rec.*|misc.*|soc.*|talk.*|mod.*)
                    189:     $cat <<'EOM'
                    190: This program posts news to thousands of machines throughout the entire
                    191: civilized world.  You message will cost the net hundreds if not thousands of
                    192: dollars to send everywhere.  Please be sure you know what you are doing.
                    193: 
                    194: EOM
                    195:     ;;
                    196: $cont.*)
                    197:     $echo 'This program posts news to many machines throughout the continent.'
                    198:     ;;
                    199: $cntry.*)
                    200:     $echo 'This program posts news to many machines throughout the country.'
                    201:     ;;
                    202: $state.*)
                    203:     $echo 'This program posts news to many machines throughout the state.'
                    204:     ;;
                    205: $city.*)
                    206:     $echo 'This program posts news to many machines throughout the city.'
                    207:     ;;
                    208: $org.*)
                    209:     $echo 'This program posts news to machines throughout the organization.'
                    210:     ;;
                    211: $loc.*)
                    212:     $echo 'This program posts news to machines throughout the local organization.'
                    213:     ;;
                    214: *.*)
                    215:     $echo 'This program may post news to many machines.'
                    216:     ;;
                    217: *)
                    218:     $echo 'This program posts news to everyone on the machine.'
                    219:     ;;
                    220: esac
                    221: ans=""
                    222: while $test "$ans" = "" ; do
                    223:     $echo $n "Are you absolutely sure that you want to do this? [ny] $c"
                    224:     read ans
                    225:     case $ans in
                    226:     y*) ;;
                    227:     f*) suppressmess=y ;;
                    228:     h*) $cat <<'EOH'
                    229: 
                    230: Type n or CR to exit, y to post.
                    231: 
                    232: EOH
                    233:        ans="" ;;
                    234:     *) exit ;;
                    235:     esac
                    236: done
                    237: 
                    238: file=h
                    239: while $test "$file" = h ; do
                    240:     $echo ""
                    241:     $echo $n "Prepared file to include [none]: $c"
                    242:     read file
                    243:     case $file in
                    244:     h)
                    245:        $cat <<'EOH'
                    246: 
                    247: If you have already produced the body of your article, type the filename
                    248: for it here.  If you just want to proceed directly to the editor, type a
                    249: RETURN.  In any event, you will be allowed to edit as many times as you
                    250: want before you send off the article.
                    251: EOH
                    252:        ;;
                    253:     '')
                    254:        $echo "" >> $tmpart
                    255:        state=edit
                    256:        ;;
                    257:     *)
                    258:        $cat $file >>$tmpart
                    259:        state=ask
                    260:        ;;
                    261:     esac
                    262: done
                    263: 
                    264: $echo ""
                    265: 
                    266: while true ; do
                    267:     case $state in
                    268:     edit)
                    269:        case $expertise in
                    270:        beginner)
                    271:            $cat </dev/null >$dotdir/.pnewsexpert
                    272:            $cat <<'EOMessage'
                    273: A temporary file has been created for you to edit.  Be sure to leave at
                    274: least one blank line between the header and the body of your message.
                    275: (And until a certain bug is fixed all over the net, don't start the body of
                    276: your message with any indentation, or it may get eaten.)
                    277: 
                    278: Within the header may be fields that you don't understand.  If you don't
                    279: understand a field (or even if you do), you can simply leave it blank, and
                    280: it will go away when the article is posted.
                    281: 
                    282: Type return to get the default editor, or type the name of your favorite
                    283: editor.
                    284: 
                    285: EOMessage
                    286:            ;;
                    287:        esac
                    288:        case "${VISUAL-${EDITOR-}}" in
                    289:        '')
                    290:            tmp=h
                    291:            ;;
                    292:        *)
                    293:            tmp=''
                    294:            ;;
                    295:        esac
                    296:        while $test "$tmp" = h ; do
                    297:            $echo $n "Editor [${VISUAL-${EDITOR-$defeditor}}]: $c"
                    298:            read tmp
                    299:            case $tmp in
                    300:            h)
                    301:                $cat <<'EOH'
                    302: 
                    303: Type a return to get the default editor, or type the name of the editor you
                    304: prefer.  The default editor depends on the VISUAL and EDITOR environment
                    305: variables.
                    306: 
                    307: EOH
                    308:                ;;
                    309:            '')
                    310:                ;;
                    311:            *)
                    312:                VISUAL=$tmp
                    313:                export VISUAL
                    314:                ;;
                    315:            esac
                    316:        done
                    317:        trap : 2
                    318:        ${VISUAL-${EDITOR-$defeditor}} $tmpart $oldart
                    319:        trap "$rescue" 2
                    320:        state=ask
                    321:        ;;
                    322:        
                    323:     ask)
                    324:        $echo ""
                    325:        $echo $n "Send, abort, edit, or list? $c"
                    326:        read ans
                    327:        
                    328:        case "$ans" in
                    329:        a*)
                    330:            state=rescue
                    331:            ;;
                    332:        e*)
                    333:            set $ans
                    334:            case $# in
                    335:            2)  VISUAL="$2" ;;
                    336:            esac
                    337:            state=edit
                    338:            ;;
                    339:        l*)
                    340:            $pager $tmpart
                    341:            state=ask
                    342:            ;;
                    343:        s*)
                    344:            state=send
                    345:            ;;
                    346:        h*)
                    347:            $cat <<'EOH'
                    348: 
                    349: Type s to send the article, a to abort and append the article to dead.article,
                    350: e to edit the article again, or l to list the article.
                    351: 
                    352: To invoke an alternate editor, type 'e editor'.
                    353: EOH
                    354:        esac
                    355:        ;;
                    356:     
                    357:     send)
                    358:        set X `$sed < $tmpart -n -e '/^Newsgroups: /{' -e p -e q -e '}'`
                    359:        shift
                    360:        case $# in
                    361:        2)
                    362:            state=cleanup
                    363:            if $test -f $lib/moderators; then
                    364:                tryinews=no
                    365:                shift
                    366:                case "$1" in
                    367:                *,*) set `$echo $1 | tr ',' ' '`;;
                    368:                esac
                    369:                for newsgroup in $*; do
                    370: # the following screwy sed should prevent Eunice from hanging on no match
                    371:                    moderator=`$sed <$lib/moderators \
                    372:                    -e "/^$newsgroup[   ]/!s/.*//" \
                    373:                    -e "s/^$newsgroup[  ]//"`
                    374:                    case ${moderator}X in
                    375:                    X)  tryinews=yes
                    376:                        ;;
                    377:                    *)
                    378:                        $echo Mailing to moderator $moderator
                    379:                        case "$sign" in
                    380:                        n*) ;;
                    381:                        *)
                    382:                            if $test -f $dotdir/.signature; then
                    383:                                echo $n "Append .signature file? [y] $c"
                    384:                                read ans
                    385:                                case $ans in
                    386:                                ''|y*)
                    387:                                    echo "-- " >> $tmpart
                    388:                                    cat $dotdir/.signature >> $tmpart
                    389:                                    ;;
                    390:                                esac
                    391:                            fi
                    392:                            sign=no
                    393:                            ;;
                    394:                        esac
                    395:                        case "$mailer" in
                    396:                        *recmail)
                    397:                            $echo To: $moderator | $cat - $tmpart | $mailer
                    398:                            ;;
                    399:                        *)
                    400:                            $mailer $moderator < $tmpart
                    401:                            ;;
                    402:                        esac
                    403:                        case $? in
                    404:                        0) ;;
                    405:                        *)
                    406:                            $echo Unable to mail to moderator $moderator
                    407:                            state=rescue
                    408:                            ;;
                    409:                        esac
                    410:                        ;;
                    411:                    esac
                    412:                done
                    413:            else
                    414:                tryinews=yes
                    415:            fi
                    416:            case "$tryinews" in
                    417:            yes)
                    418:                if $inews -h < $tmpart ; then
                    419:                    : null
                    420:                else
                    421:                    state=rescue
                    422:                fi
                    423:                ;;
                    424:            esac
                    425:            ;;
                    426:        *)
                    427:            $echo ""
                    428:            $echo "Malformed Newsgroups line."
                    429:            $echo ""
                    430:            sleep 1
                    431:            state=edit
                    432:            ;;
                    433:        esac
                    434:        ;;
                    435:     rescue)
                    436:        $cat $tmpart >> ${HOME-$LOGDIR}/dead.article
                    437:        $echo "Article appended to ${HOME-$LOGDIR}/dead.article"
                    438:        $echo "A copy may be temporarily found in $tmpart"
                    439:        exit
                    440:        ;;
                    441:     cleanup)
                    442:        case "${AUTHORCOPY-none}" in
                    443:        none)
                    444:            ;;
                    445:        *)  if $echo From $USER `date` >> $AUTHORCOPY; then
                    446:                $cat $tmpart >> $AUTHORCOPY
                    447:                $echo "Article appended to $AUTHORCOPY"
                    448:                $echo "" >> $AUTHORCOPY
                    449:                $echo "" >> $AUTHORCOPY
                    450:            else
                    451:                $echo "Cannot append to $AUTHORCOPY"
                    452:            fi
                    453:            ;;
                    454:        esac
                    455:        exit
                    456:        ;;
                    457:     esac
                    458: done
                    459: !NO!SUBS!
                    460: $eunicefix Pnews
                    461: chmod 755 Pnews
                    462: $spitshell >Pnews.header <<'!NO!SUBS!'
                    463: case $# in
                    464: 0)
                    465:     ng=h
                    466:     while $test "$ng" = h ; do
                    467:        $echo ""
                    468:        $echo $n "Newsgroup(s): $c"
                    469:        read ng
                    470:        case $ng in
                    471:        h)
                    472:            $cat <<'EOH'
                    473: 
                    474: Type the name of one or more newsgroups to which you wish to post an article.
                    475: If you want to post to multiple newsgroups, it is better to do them all at
                    476: once than to post to each newsgroup individually, which defeats the news
                    477: reading programs' strategies of eliminating duplicates.
                    478: 
                    479: Separate multiple newsgroup names with commas.
                    480: EOH
                    481:            ;;
                    482:        esac
                    483:     done
                    484:     ;;
                    485: *)
                    486:     ng=$1
                    487:     shift
                    488:     ;;
                    489: esac
                    490: case $ng in
                    491: *\ *)
                    492:     ng=`$echo "$ng" | $sed 's/[, ] */,/g'`
                    493:     ;;
                    494: esac
                    495: case $ng in
                    496: net.*|mod.*|comp.*|news.*|sci.*|rec.*|misc.*|soc.*|talk.*)
                    497:     defdist=world
                    498:     dist=h
                    499:     ;;
                    500: *.*)
                    501:     defdist=`expr "X$ng" : 'X\([a-z0-9]*\)'`
                    502:     dist=h
                    503:     ;;
                    504: *)
                    505:     defdist=''
                    506:     dist=''
                    507:     ;;
                    508: esac
                    509: 
                    510: while $test "$dist" = h ; do
                    511:     if $test -f $lib/distributions; then
                    512:        $echo " "
                    513:        $echo "Your local distribution prefixes are:"
                    514:        $cat $lib/distributions
                    515:        $echo " "
                    516:     else
                    517:        $egrep -v '[     ]none$' <<EOM
                    518: 
                    519: Your local distribution prefixes are:
                    520:     Local organization:        $loc
                    521:     Organization:              $org
                    522:     City:                      $city
                    523:     $stpr:             $state
                    524:     Country:           $cntry
                    525:     Continent:         $cont
                    526:     Everywhere:                world
                    527: 
                    528: EOM
                    529:     fi
                    530:     $echo $n "Distribution ($defdist): $c"
                    531:     read dist
                    532:     case $dist in
                    533:     '') dist=$defdist ;;
                    534:     esac
                    535:     case $dist in
                    536:     h)
                    537:        $cat <<'EOH'
                    538: 
                    539: The Distribution line may be used to limit the distribution of an article
                    540: to some subset of the systems that would receive the article based only on
                    541: the Newsgroups line.  For example, if you want to sell your car in talk.auto,
                    542: and you live in New Jersey, you might want to put "nj" on the Distribution
                    543: line to avoid advertising in California, which has enough problems of its own.
                    544: The actual area designators to use depend on where you are, of course.
                    545: EOH
                    546:        ;;
                    547:     ''|$loc*|$org*|$city*|$state*|$cntry*|$cont*|$defdist)
                    548:        ;;
                    549:     net*|world*|comp*|news*|sci*|rec*|misc*|soc*|talk*)
                    550:        dist=''
                    551:        ;;
                    552:     *)  
                    553:        if $test -f $lib/distributions && \
                    554:          $egrep "^$dist[       ]" $lib/distributions >$tmpart && \
                    555:          $test -s $tmpart; then
                    556:            : null
                    557:        else
                    558:            $echo "Unrecognized distribution prefix--type h for help, CR to use anyway."
                    559:            defdist=$dist
                    560:            dist=h
                    561:        fi
                    562:        ;;
                    563:     esac
                    564: done
                    565: 
                    566: case $ng in
                    567: *net.general*)
                    568:     follow=`echo "$ng" | sed 's/net\.general/net.followup/g'`
                    569:     ;;
                    570: *)
                    571:     follow=""
                    572:     ;;
                    573: esac
                    574: 
                    575: case $# in
                    576: 0)
                    577:     title=h
                    578:     while $test "$title" = h ; do
                    579:        $echo ""
                    580:        $echo $n "Title/Subject: $c"
                    581:        read title
                    582:        case $title in
                    583:        h)
                    584:            $cat <<'EOH'
                    585: 
                    586: Type the title for your article.  Please make it as informative as possible
                    587: (within reason) so that people who aren't interested won't have to read the
                    588: article to find out they aren't interested.  This includes marking movie
                    589: spoilers as (spoiler), and rotated jokes as (rot 13).
                    590: EOH
                    591:        ;;
                    592:        esac
                    593:     done
                    594:     ;;
                    595: *)
                    596:     title="$*"
                    597:     ;;
                    598: esac
                    599: 
                    600: # now build a file with a header for them to edit
                    601: 
                    602: set X ${USER-${LOGNAME-`who am i`}}
                    603: shift
                    604: logname=$1
                    605: case $logname in
                    606: *!*) logname=`expr "$logname" : '!\(.*\)$'` ;;
                    607: esac
                    608: case ${NAME-$nametype} in
                    609: bsd)
                    610:     fullname=`$sed </etc/passwd -e "/^$logname:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:\([^,:;]*\).*"'$'"/\1/" -e "q" -e "}" -e "d"`
                    611:     case $fullname in
                    612:     *'&'*) : GACK
                    613:        lname=`$echo $logname | $tr 'a-z' 'A-Z'`
                    614:        lname=`$echo $lname $logname | $sed 's/^\(.\)[^ ]* ./\1/'`
                    615:        fullname=`$echo "$fullname" | $sed "s/&/${lname}/"`
                    616:        ;;
                    617:     esac
                    618:     ;;
                    619: usg)
                    620:     fullname=`$sed </etc/passwd -e "/^$logname:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:\([^(:]*\).*"'$'"/\1/" -e "s/^.*-//" -e "q" -e "}" -e "d"`
                    621:     ;;
                    622: *)
                    623:     fullname=${NAME-`$cat $dotdir/.fullname`}
                    624:     ;;
                    625: esac
                    626: 
                    627: orgname=${ORGANIZATION-$orgname}
                    628: case $orgname in
                    629: /*) orgname=`$cat $orgname` ;;
                    630: esac
                    631: 
                    632: $cat > $tmpart <<EOHeader
                    633: Newsgroups: $ng
                    634: Subject: $title
                    635: Expires: 
                    636: References: 
                    637: Sender: 
                    638: Reply-To: $logname@$sitename.UUCP ($fullname)
                    639: Followup-To: $follow
                    640: Distribution: $dist
                    641: Organization: $orgname
                    642: Keywords: 
                    643: 
                    644: EOHeader
                    645: 
                    646: !NO!SUBS!
                    647: $eunicefix Pnews.header

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.