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