|
|
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.