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