Annotation of 43BSD/contrib/nntp/rrn/Pnews.SH, revision 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.