Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!mnetor!seismo!mirror!sources-request From: sources-request@mirror.UUCP Newsgroups: mod.sources Subject: v07i049: 2.11 News Miscellaneous Files, Part01/02 Message-ID: <525@mirror.UUCP> Date: Wed, 5-Nov-86 17:13:58 EST Article-I.D.: mirror.525 Posted: Wed Nov 5 17:13:58 1986 Date-Received: Thu, 6-Nov-86 03:12:04 EST Sender: rs@mirror.UUCP Organization: Mirror Systems, Cambridge MA Lines: 1285 Approved: mirror!rs Submitted by: seismo!rick (Rick Adams) Mod.sources: Volume 7, Issue 49 Archive-name: 2.11news/Part09 [ Notice the difference between the Part# in the title, and in the official archive name. --r$ ] Path: seismo!rick From: rick@seismo.CSS.GOV (Rick Adams) Newsgroups: mod.sources Subject: news 2.11 miscellaneous files (1 of 2) Message-ID: <41897@beno.seismo.CSS.GOV> Date: 30 Oct 86 05:07:04 GMT Organization: Center for Seismic Studies, Arlington, VA Lines: 1269 # To extract, sh this file # # news 2.11 miscellaneous File 1 of 2 # if test ! -d misc then mkdir misc fi echo x - misc/L.cmds 1>&2 sed 's/.//' >misc/L.cmds <<'*-*-END-of-misc/L.cmds-*-*' -# -# If rnews lives in a peculiar directory on your system -# (e.g. /usr/new under 4.3 BSD) make sure that uucp can -# find it using the PATH in /usr/lib/uucp/L.cmds. -# -PATH=/bin:/usr/bin:/usr/ucb:/usr/new -# -rnews,Error *-*-END-of-misc/L.cmds-*-* echo x - misc/README 1>&2 sed 's/.//' >misc/README <<'*-*-END-of-misc/README-*-*' -These are programs that have been useful for some people. -They are provided for your potential use, but are not -considered part of the official news release. *-*-END-of-misc/README-*-* echo x - misc/arbitron 1>&2 sed 's/.//' >misc/arbitron <<'*-*-END-of-misc/arbitron-*-*' -#! /bin/sh -# @(#)arbitron 2.3 07/15/86 -# arbitron -- this program produces rating sweeps for USENET. -# -# Usage: arbitron -# -# To use this program, edit the "configuration" section below so that the -# information is correct for your site, and then run it. It will produce a -# readership survey for your machine and mail that survey to decwrl, with -# a cc to you. -# -# To participate in the international monthly ratings sweeps, -# run "arbitron" every month. I will run the statistics program on the last -# day of each month; it will include any report that has reached it by that -# time. To make sure your site's data is included, run the survey program no -# later than the 20th day of each month. -# -# Brian Reid, DEC Western Research Lab, reid@decwrl -# Updated and bugfixed by -# Spencer Thomas, U.of Utah -# Geoff Kuenning, SAH Consulting -# Updated to work with 2.10.1 and older news systems by -# Lindsay Cleveland, AT&T Technologies/Bell Labs -# Made to work with 16-bit address spaces by -# Andy Walker, Maths Dept., University of Nottingham, UK -# -# Note that the results of this program are dependent on the rate at which -# you expire news. If you are a small site that expires news rapidly, the -# results may indicate fewer active readers than you actually have. -# -# copied to a certain extent from the "subscribers" -# script posted by Blonder, McCreery, and Herron. -########################################################################### -# Configuration information. Edit this section to reflect your site data. # -TMPDIR=/tmp -NEWS=/usr/lib/news -SPOOL=/usr/spool/news - -# Make a crude stab at determining the system type -if [ -d /usr/ucb ] -then - STYPE="bsd" -else - STYPE="usg" -fi - -# Range of /etc/passwd UID's that represent actual people (rather than -# maintenance accounts or daemons or whatever) -lowUID=100 -highUID=9999 - -# If you aren't running a distributed news system (nntpd & rrn, usually), -# leave NEWSHOST blank. Else set it to the name of the host from which you -# can rcp a copy of the active file. -NEWSHOST= - -# uucp path: {ihnp4, decvax, ucbvax}!decwrl!netsurvey -# summarypath="netsurvey@decwrl.dec.com $USER" -summarypath="ihnp4!decwrl!netsurvey usenet" - -# We need to find the uucp name of your host. If this code doesn't work, -# then just put it in literally like this: -# hostname="ihnp4" - -case $STYPE in - bsd) hostname=`(uuname -l || hostname) 2>&-`;; - sysv)hostname=`(uname -n || uuname -l || hostname) 2>&-`;; - *) hostname=`(uuname -l) 2>&-`;; -esac; - -PATH=$NEWS:/usr/local/bin:/usr/ucb:/usr/bin:/bin -############################################################################ -export PATH -# --------------------------------------------------------------------------- -trap "rm -f $TMPDIR/arb.*.$$; exit" 0 1 2 3 15 -set `date` -dat="$2$6" -# destination="mailx -s arbitron-${dat} $summarypath" -destination="${MAILER-mail} $summarypath" - -################################ -# Here are several expressions, each of which figures out approximately how -# many people use this machine. Comment out all but 1 of them; pick the one -# you like best. Initially the most universal but least reliable of them is -# uncommented. -# # ###### Scheme #1: fast but usually returns too big a number -nusers=`awk -F: "BEGIN {N=0}\\$3>=$lowUID && \\$3<=$highUID{N=N+1}END{print N}" = $lowUID && \$3 <= $highUID{printf \"if test -d %s ; then echo %s;egrep : %s/.newsrc; fi\n\",\$6,\$1,\$6}" \ -# /dev/null | awk -f $tmpdir/arb.sel.$$ >$tmpdir/arb.tmp.$$ -#nusers=`awk "BEGIN {N=0} NF == 1{N=N+1}END{print N}" <$tmpdir/arb.tmp.$$` -################################ -# -# Set up awk scripts; these are too large to pass as arguments on most -# systems. -# -# This awk script generates the actual output report. -# We use 'sed' to substitute in the shell variables to save ourselves -# endless hassle trying to find quoting/backslashing problems. -# -# The input to this script consists of two types of lines (pre-sorted): -# -# (1) Active-file lines. These have four fields: newsgroup name, -# first existing article, last article number, 'y' or 'n' -# to allow/disallow posting. -# mod.mac 00001 00001 y -# -# (2) .newsrc-derived lines. These have three fields: the newsgroup -# name, the user name and the articles-read information. The latter -# can be arbitrarily complex. It can also be arbitrarily long; -# this can potentially break either awk or sed, in which -# case the script will not work. -# mod.map joe 1-199 -# -# The script uses the type 1 lines to define the newsgroups -# and their active article ranges. The .newsrc (type 2) lines are -# then used to deduce which users are reading that group (a group -# is being read if the last article seen is in that group's active -# article range). The user names are used to keep track of who reads -# each group, which isn't all that useful but is interesting. When -# all input has been read, a report is printed summarizing the results. -# -sed "/^#/d - s/NUSERS/$nusers/g - s/HOSTNAME/$hostname/g - s/DATE/$dat/g" > $TMPDIR/arb.fmt.$$ << 'DOG' -# makereport -- utility for "arbitron". Early versions were copied from a -# similar script distributed with "subscribers.sh" by Blonder, McCreery, and -# Herron. -# - BEGIN { rdrcount = 0 ; reader = "" ; grpcount = 0 ; realusers = 0} -# -# Active file line: dispose of previous group (if any), record group, and -# record first and last article numbers. Set group's reader count to none. - NF == 4 { if (grpcount > 0) { - printf("%d %s\n",grpcount, grpname) - } - grpname = $1 - grpfirst = $3 - grplast = $2 - grpcount = 0 - } -# -# .newsrc line. Break out the final number, which is the last article that -# has actually been read. This is a pretty good indicator of the person's -# true interest in the group. If 'lastread' for the group is a current -# (unexpired) article, record a reader for that group. Finally, record -# the user as a "real" user of the news system. -# - NF == 3 { n1 = split($3, n2, "-") - n3 = split(n2[n1], n4, ",") - lastread = n4[n3] - if ((grpfirst != grplast) && (lastread >= grpfirst) && (lastread <= grplast)) { - grpcount++ - if (realuser[$2] != 1) { - realuser[$2] = 1 - realusers++ - } - } - } -# -# End of file. Print the report in 2 columns. - END { printf("9999 Host\t\t%s\n","HOSTNAME") - printf("9998 Users\t\t%d\n",NUSERS) - printf("9997 NetReaders\t%d\n",realusers) - printf("9996 ReportDate\t%s\n","DATE") - printf("9995 SystemType\tnews-arbitron-2.3\n") - if (grpcount > 0) { - printf("%d %s\n",grpcount, grpname) - } - } -DOG - -cat >$TMPDIR/arb.pwd.$$ <<'MOUSE' -BEGIN { seen["/"]=1; seen[""] = 1; } - { if (seen[$6]!=1) { - printf("if [ -r %s/.newsrc ] ; then ", $6) - printf("sed -n '/: [0-9]/s/:/ %s/p' <%s/.newsrc; fi\n",$1,$6) - seen[$6]=1; - } -} -MOUSE - -# First, make sure we have an active file -if [ -z "$NEWSHOST" ] -then ACTIVE=$NEWS/active -else ACTIVE=/tmp/arb.active.$$ - rcp $NEWSHOST:$NEWS/active $ACTIVE -fi - -if [ ! -s $ACTIVE ] -then - echo arbitron: ACTIVE file missing or empty. Cannot continue. - exit 1 -fi - -# Next, get the list of .newsrc files with duplicates and unreadable files -# removed. -awk -F: -f $TMPDIR/arb.pwd.$$ $TMPDIR/arb.tmp.$$ - -# Check to make sure that we found some -if [ -s $TMPDIR/arb.tmp.$$ ] -then # See if "active" file has 4 fields or only two (pre-2.10.2) - set `sed 1q $ACTIVE` - if [ $# -eq 2 ] - then egrep '^[a-z]*\.' $ACTIVE | - while read group last - do dir=`echo "$group" | sed 's;\.;/;g'` - first=`ls $SPOOL/$dir | grep '^[0-9]*' | sort -n | sed 1q` - case $STYPE in - usg) echo "$group $last ${first:-$last} X";; - *) echo "$group $last ${first-$last} X" - esac - done - else egrep '^[a-z]*\.' $ACTIVE - fi | - sort - $TMPDIR/arb.tmp.$$ | - awk -f $TMPDIR/arb.fmt.$$ | - sort -nr | - sed '/^$/d - s/^999[0-9] //' | - $destination -else echo Unable to find any readable .newsrc files 2>&1 - exit 1 -fi *-*-END-of-misc/arbitron-*-* echo x - misc/article.c 1>&2 sed 's/.//' >misc/article.c <<'*-*-END-of-misc/article.c-*-*' -/* down!honey 4/84 */ -/* article msg-id [ ... msg-id ] */ - * where message-id is usually of the form number@machine.domain, - * and the domain in the message-id is optional. - * - * BUGS: - * Cannot handle all domains, for instance, BERKELEY.EDU. - */ - -#define HISTORY "/usr/lib/news/history" -#define NEWSDIR "/usr/spool/news" - -char *formats[] = { /* add as appropriate */ - "<%s.uucp>", - "<%s>", - "<%s.arpa>", - "<%s.oz>", - 0 -}; - -#include -#include -#include - -typedef struct { - char *dptr; - int dsize; -} datum; - -#if defined(USG_INDEX) -/* S3 or S5 both call strchr() what 4.X BSD calls index */ -#define index strchr -#endif - -long lseek(); -char *index(); -datum fetch(), dofetch(); - -main(argc, argv) -char **argv; -{ - int fd; - char buf[BUFSIZ], *ptr1, *ptr2; - datum content; - - if ((fd = open(HISTORY, 0)) < 0) { - perror(HISTORY); - exit(EX_UNAVAILABLE); - } - if (dbminit(HISTORY) < 0) { - fprintf(stderr, "dbm error\n"); - exit(EX_UNAVAILABLE); - } - for (--argc, argv++; argc; --argc, argv++) { - long foff; /* file offset */ - content = dofetch(*argv); - if (content.dptr == 0) { - printf("%s: No such key\n", *argv); - continue; - } - - /* Correct a machine dependent bug here, caused */ - /* because the lseek offset pointed to by dptr might */ - /* not be long-aligned. */ - /* Guy Harris suggested bug fix to prevent core drop. */ - /* This bug was written up in net.bugs.4bsd and */ - /* cross-posted to net.news.b */ - bcopy(content.dptr, (char *)&foff, sizeof foff); - - if (lseek(fd, foff, 0) < 0) - continue; - if (read(fd, buf, sizeof buf) <= 0) - continue; - - /* - * To understand this piece of code, you must understand - * that the format of lines in the history file are either: - * TABSPACE