Article 2707 of comp.sources.unix:
Path: nntpd.lkg.dec.com!crl.dec.com!crl.dec.com!bloom-beacon.mit.edu!news.kei.com!news.mathworks.com!newsfeed.internetmci.com!in1.uu.net!news1.digital.com!vixie!vixie!not-for-mail
From: davison@borland.com (Wayne Davison)
Newsgroups: comp.sources.unix
Subject: v29i051: trn-3.6 - threaded newsreader based on RN, V3.6, Part14/14
Date: 29 Oct 1995 01:33:07 -0800
Organization: Vixie Enterprises
Lines: 3318
Sender: vixie@vix.com
Approved: vixie@gw.home.vix.com
Message-ID: <46vhoj$t5l@gw.home.vix.com>
References: <1.814959141.29825@gw.home.vix.com>
NNTP-Posting-Host: gw.home.vix.com

Submitted-By: davison@borland.com (Wayne Davison)
Posting-Number: Volume 29, Issue 51
Archive-Name: trn-3.6/part14

#!/bin/sh
# This is `part14' (part 14 of a multipart archive).
# Do not concatenate these parts, unpack them in order with `/bin/sh'.
# File `trn-3.6/parsedate.y' is being continued...
#
touch -am 1231235999 $$.touch >/dev/null 2>&1
if test ! -f 1231235999 && test -f $$.touch; then
  shar_touch=touch
else
  shar_touch=:
  echo
  echo 'WARNING: not restoring timestamps.  Consider getting and'
  echo "installing GNU \`touch', distributed in GNU File Utilities..."
  echo
fi
rm -f 1231235999 $$.touch
#
if test ! -r _sharseq.tmp; then
  echo 'Please unpack part 1 first!'
  exit 1
fi
shar_sequence=`cat _sharseq.tmp`
if test "$shar_sequence" != 14; then
  echo "Please unpack part $shar_sequence next!"
  exit 1
fi
if test ! -f _sharnew.tmp; then
  echo 'x - still skipping trn-3.6/parsedate.y'
else
  echo 'x - continuing file trn-3.6/parsedate.y'
  sed 's/^X//' << 'SHAR_EOF' >> 'trn-3.6/parsedate.y' &&
X	(void)fflush(stdout);
X	if (gets(buff) == NULL || buff[0] == '\n')
X	    break;
X#if YYDEBUG
X	if (strcmp(buff, "yydebug") == 0) {
X	    yydebug = !yydebug;
X	    printf("yydebug = %s\n", yydebug ? "on" : "off");
X	    continue;
X	}
X#endif /* YYDEBUG */
X	d = parsedate(buff, (TIMEINFO *)NULL);
X	if (d == -1)
X	    (void)printf("Bad format - couldn't convert.\n");
X	else
X	    (void)printf("%s", ctime(&d));
X    }
X
X    exit(0);
X    /* NOTREACHED */
X}
X#endif /* TEST */
SHAR_EOF
  echo 'File trn-3.6/parsedate.y is complete' &&
  $shar_touch -am 0603134093 'trn-3.6/parsedate.y' &&
  chmod 0644 'trn-3.6/parsedate.y' ||
  echo 'restore of trn-3.6/parsedate.y failed'
  shar_count="`wc -c < 'trn-3.6/parsedate.y'`"
  test 21261 -eq "$shar_count" ||
    echo "trn-3.6/parsedate.y: original size 21261, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/nntpclient.c ==============
if test -f 'trn-3.6/nntpclient.c' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/nntpclient.c (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/nntpclient.c (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/nntpclient.c' &&
X/* $Id: nntpclient.c,v 3.0 1991/11/22 04:12:21 davison Trn $
X*/
X/* The authors make no claims as to the fitness or correctness of this software
X * for any use whatsoever, and it is provided as is. Any use of this software
X * is at the user's own risk. 
X */
X
X#include "EXTERN.h"
X#include "common.h"
X
X#ifdef USE_NNTP
X
X#include "INTERN.h"
X#include "nntpclient.h"
X
Xvoid finalize _((int));
X#ifdef NNTP_HANDLE_TIMEOUT
Xchar nntp_handle_timeout _((bool_int));
X#endif
X#ifdef NNTP_HANDLE_AUTH_ERR
Xchar nntp_handle_auth_err _((bool_int));
X#endif
X
X#define CANTPOST	\
X	"NOTE:  This machine does not have permission to post articles.\n\n"
X#define CANTUSE		\
X	"This machine does not have permission to use the %s news server.\n\n"
X
Xint
Xnntp_connect(verbose)
Xbool_int verbose;
X{
X    char *server, filebuf[128];
X    int response;
X
X    if ((server = getenv("NNTPSERVER")) == Nullch)
X	server = SERVER_NAME;
X    if (server[0] == '/') {
X	register FILE *fp;
X	if ((fp = fopen(server, "r")) != Nullfp) {
X	    server = Nullch;
X	    while (fgets(filebuf, sizeof filebuf, fp) != Nullch) {
X		if (*filebuf == '\n' || *filebuf == '#')
X		    continue;
X		if ((server = index(filebuf, '\n')) != Nullch)
X		    *server = '\0';
X		server = filebuf;
X		break;
X	    }
X	    fclose(fp);
X	} else
X	    server = Nullch;
X	if (server == Nullch) {
X	    sprintf(ser_line, "\
XCouldn't get name of news server from %s\n\
XEither fix this file, or put NNTPSERVER in your environment.\n", SERVER_NAME);
X	    nntp_init_error(ser_line);
X	    return 0;
X	}
X    }
X
X    switch (response = server_init(server)) {
X    case NNTP_GOODBYE_VAL:
X	if (atoi(ser_line) == response) {
X	    char tmpbuf[LBUFLEN];
X	    sprintf(tmpbuf,"News server %s unavailable: %s\n",server,&ser_line[4]);
X	    nntp_init_error(tmpbuf);
X	    return 0;
X	}
X    case -1:
X	sprintf(ser_line,"News server %s unavailable, try again later.\n",server);
X	nntp_init_error(ser_line);
X	return 0;
X    case NNTP_ACCESS_VAL:
X	sprintf(ser_line,CANTUSE,server);
X	nntp_init_error(ser_line);
X	return 0;
X    case NNTP_NOPOSTOK_VAL:
X	if (verbose) {
X	    nntp_advise(CANTPOST);
X	}
X	/* FALL THROUGH */
X    case NNTP_POSTOK_VAL:
X	break;
X    default:
X	sprintf(ser_line,"Unknown response code %d from %s.\n", response, server);
X	nntp_init_error(ser_line);
X	return 0;
X    }
X    return 1;
X}
X
Xvoid
Xnntp_command(buf)
Xchar *buf;
X{
X#if defined(DEBUG) && defined(FLUSH)
X    if (debug & DEB_NNTP)
X	printf(">%s\n", buf) FLUSH;
X#endif
X#if defined(NNTP_HANDLE_TIMEOUT) || defined(NNTP_HANDLE_AUTH_ERR)
X    strcpy(last_command, buf);
X#endif
X    fprintf(ser_wr_fp, "%s\r\n", buf);
X    fflush(ser_wr_fp);
X}
X
X#ifdef NNTP_HANDLE_TIMEOUT
Xextern char *instr();
X#endif
X
Xchar
Xnntp_check(strict)
Xbool_int strict;
X{
X    int n;
X
X#ifdef HAS_SIGHOLD
X    sighold(SIGINT);
X#endif
X    n = (fgets(ser_line, sizeof ser_line, ser_rd_fp) == NULL)? -1 : 0;
X#ifdef HAS_SIGHOLD
X    sigrelse(SIGINT);
X#endif
X    if (n < 0) {
X	nntp_close(FALSE);
X	nntp_error("\nUnexpected close of server socket.\n");
X#ifdef NNTP_ERROR_IS_FATAL
X	finalize(1);
X#else
X	return NNTP_CLASS_FATAL;
X#endif
X    }
X    n = strlen(ser_line);
X    if (n >= 2 && ser_line[n-1] == '\n' && ser_line[n-2] == '\r')
X	ser_line[n-2] = '\0';
X#if defined(DEBUG) && defined(FLUSH)
X    if (debug & DEB_NNTP)
X	printf("<%s\n", ser_line) FLUSH;
X#endif
X#ifdef NNTP_HANDLE_AUTH_ERR
X    if (atoi(ser_line) == NNTP_AUTH_NEEDED_VAL) {
X	return nntp_handle_auth_err(strict);
X    }
X#endif
X#ifdef NNTP_HANDLE_TIMEOUT
X    if (atoi(ser_line) == NNTP_TMPERR_VAL && instr(ser_line,"timeout",FALSE)) {
X	/* See if this was really a timeout */
X	return nntp_handle_timeout(strict);
X    }
X#endif
X    if (strict && *ser_line == NNTP_CLASS_FATAL) {	/* Fatal error */
X	char tmpbuf[LBUFLEN];
X	sprintf(tmpbuf,"\n%s\n",ser_line);
X	nntp_error(tmpbuf);
X#ifdef NNTP_ERROR_IS_FATAL
X	finalize(1);
X#endif
X    }
X    return *ser_line;
X}
X
Xint
Xnntp_gets(buf, len)
Xchar *buf;
Xint  len;
X{
X    int n;
X
X#ifdef HAS_SIGHOLD
X    sighold(SIGINT);
X#endif
X    n = (fgets(buf, len, ser_rd_fp) == NULL)? -1 : 0;
X#ifdef HAS_SIGHOLD
X    sigrelse(SIGINT);
X#endif
X    if (n < 0) {
X	nntp_close(FALSE);
X	nntp_error("\nUnexpected close of server socket.\n");
X#ifdef NNTP_ERROR_IS_FATAL
X	finalize(1);
X#else
X	return -1;
X#endif
X    }
X    n = strlen(buf);
X    if (n >= 2 && buf[n-1] == '\n' && buf[n-2] == '\r') {
X	buf[n-2] = '\0';
X	return 1;
X    }
X    return 0;
X}
X
Xvoid
Xnntp_close(send_quit)
Xbool_int send_quit;
X{
X    if (send_quit && ser_wr_fp != NULL && ser_rd_fp != NULL) {
X	nntp_command("QUIT");
X	nntp_check(FALSE);
X    }
X    /* the nntp_check() above might have closed these already. */
X    if (ser_wr_fp != NULL && ser_rd_fp != NULL) {
X	fclose(ser_wr_fp);
X	ser_wr_fp = NULL;
X	fclose(ser_rd_fp);
X	ser_rd_fp = NULL;
X    }
X}
X
X#endif /* USE_NNTP */
SHAR_EOF
  $shar_touch -am 1028161994 'trn-3.6/nntpclient.c' &&
  chmod 0644 'trn-3.6/nntpclient.c' ||
  echo 'restore of trn-3.6/nntpclient.c failed'
  shar_count="`wc -c < 'trn-3.6/nntpclient.c'`"
  test 4696 -eq "$shar_count" ||
    echo "trn-3.6/nntpclient.c: original size 4696, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/charsubst.c ==============
if test -f 'trn-3.6/charsubst.c' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/charsubst.c (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/charsubst.c (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/charsubst.c' &&
X/* $Id: charsubst.c,v 3.0 1993/12/21 21:54:40 davison Trn $
X */
X/*
X * Permission is hereby granted to copy, reproduce, redistribute or otherwise
X * use this software as long as: there is no monetary profit gained
X * specifically from the use or reproduction of this software, it is not
X * sold, rented, traded or otherwise marketed, and this copyright notice is
X * included prominently in any copy made. 
X *
X * The authors make no claims as to the fitness or correctness of this software
X * for any use whatsoever, and it is provided as is. Any use of this software
X * is at the user's own risk. 
X */
X
X#include "EXTERN.h"
X#include "common.h"
X#include "search.h"
X#include "artstate.h"
X#include "INTERN.h"
X#include "charsubst.h"
X
X#ifdef CHARSUBST
X
X/* TeX encoding table - gives ISO char for "x (x=32..127) */
X
Xstatic unsigned char textbl[96] = {
X    0,  0,'"',  0,  0,  0,  0,'"',  0,  0,  0,  0,  0,  0,  0,  0,
X    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
X    0,196,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,214,
X    0,  0,  0,  0,  0,220,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
X  '"',228,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,246,
X    0,  0,  0,223,  0,252,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
X};
X
Xstatic void Latin1toASCII _((unsigned char*,unsigned char*,int));
Xstatic char texchar = '\0';
X
Xint
Xputsubstchar(c, limit, outputok)
Xint c;
Xint limit;
Xbool_int outputok;
X{
X    unsigned char d, oc[2], nc[5];
X    int t, i = 0;
X    switch (*charsubst) {
X    case 'm':
X	t = 1;
X	goto doconvert;
X    case 'a': 
X	t = 2;
X	/* FALL THROUGH */
X    doconvert:
X	oc[0] = (unsigned char)c;
X	oc[1] = '\0';
X	Latin1toASCII(oc, nc, t);
X	if ((i = strlen((char*)nc)) <= limit) {
X	    if (outputok)
X		for (t = 0; t < i; t++)
X		    putchar((char)nc[t]);
X	}
X	else
X	    i = -1;
X	break;
X    case 't':
X	if (c == '\\' || c == '"') {
X	    if (texchar && (c == '\\' || texchar != '\\')) {
X		if (outputok)
X		    putchar(texchar);
X		i++;
X	    }
X	    texchar = (char)c;
X	    break;
X	} else if (texchar == '\\') {
X	    if (outputok)
X		putchar('\\');
X	    if (limit == 1) {
X		i = -2;
X		break;
X	    }
X	    i++;
X	} else if (texchar == '"') {
X	    if (c < 32 || c > 128)
X		d = '\0';
X	    else
X		d = textbl[c-32];
X	    texchar = '\0'; 
X	    if (d)
X		c = d;
X	    else {
X		if (outputok)
X		    putchar('"');
X		if (limit == 1) {
X		    i = -2;
X		    break;
X		}
X		i++;
X	    }
X	}
X	/* FALL THROUGH */
X    default: 
X	if (outputok)
X	    putchar(c);
X	i++;
X	break;
X    }
X    return i;
X}
X
Xchar *
Xcurrent_charsubst()
X{
X    static char *show;
X
X    switch(*charsubst) {
X    case 'm':
X#ifdef VERBOSE
X	IF(verbose)
X	    show = "[ISO->monosp] ";
X	ELSE
X#endif
X#ifdef TERSE
X	    show = "[M] ";
X#endif
X	break;
X    case 'a':
X#ifdef VERBOSE
X	IF(verbose)
X	    show = "[ISO->ASCII] ";
X	ELSE
X#endif
X#ifdef TERSE
X	    show = "[A] ";
X#endif
X	break;
X    case 't':
X#ifdef VERBOSE
X	IF(verbose)
X	    show = "[TeX->ISO] ";
X	ELSE
X#endif
X#ifdef TERSE
X	    show = "[T] ";
X#endif
X	break;
X    default:
X	show = "";
X	break;
X    }
X    return show;
X}
X
Xvoid
Xstrcharsubst(inb, outb)
Xchar *inb, *outb;
X{
X    switch(*charsubst) {
X    case 'a':
X	Latin1toASCII((unsigned char*)inb, (unsigned char*)outb, 2);
X	break;
X    default:
X	strcpy(outb, inb);
X    }
X}
X
X/* The following is an adapted version of iso2asc by Markus Kuhn, 
X   University of Erlangen, Germany <mskuhn@immd4.uni-erlangen.de>
X*/
X
X#define ISO_TABLES 2 /* originally: 7 */
X
X/* Conversion tables for displaying the G1 set (0xa0-0xff) of
X   ISO Latin 1 (ISO 8859-1) with 7-bit ASCII characters.
X
X   Version 1.2 -- error corrections are welcome
X
X   Table   Purpose
X     0     universal table for many languages
X     1     single-spacing universal table
X     2     table for Danish, Dutch, German, Norwegian and Swedish
X     3     table for Danish, Finnish, Norwegian and Swedish using
X           the appropriate ISO 646 variant.
X     4     table with RFC 1345 codes in brackets
X     5     table for printers that allow overstriking with backspace
X
X   Markus Kuhn <mskuhn@immd4.informatik.uni-erlangen.de>                 */
X/* In this version, I have taken out all tables except 1 and 2 -ot */
X
X#define SUB NULL       /* used if no reasonable ASCII string is possible */
X
Xstatic char *iso2asc[ISO_TABLES][96] = {
X{
X  " ","!","c",SUB,SUB,"Y","|",SUB,"\"","c","a","<","-","-","R","-",
X  " ",SUB,"2","3","'","u","P",".",",","1","o",">",SUB,SUB,SUB,"?",
X  "A","A","A","A","A","A","A","C","E","E","E","E","I","I","I","I",
X  "D","N","O","O","O","O","O","x","O","U","U","U","U","Y","T","s",
X  "a","a","a","a","a","a","a","c","e","e","e","e","i","i","i","i",
X  "d","n","o","o","o","o","o",":","o","u","u","u","u","y","t","y"
X},{
X  " ","!","c",SUB,SUB,"Y","|",SUB,"\"","(c)","a","<<","-","-","(R)","-",
X  " ","+/-","2","3","'","u","P",".",",","1","o",">>"," 1/4"," 1/2"," 3/4","?",
X  "A","A","A","A","Ae","Aa","AE","C","E","E","E","E","I","I","I","I",
X  "D","N","O","O","O","O","Oe","x","Oe","U","U","U","Ue","Y","Th","ss",
X  "a","a","a","a","ae","aa","ae","c","e","e","e","e","i","i","i","i",
X  "d","n","o","o","o","o","oe",":","oe","u","u","u","ue","y","th","ij"
X}
X};
X
X/*
X *  Transform an 8-bit ISO Latin 1 string iso into a 7-bit ASCII string asc
X *  readable on old terminals using conversion table t.
X *
X *  worst case: strlen(iso) == 4*strlen(asc)
X */
Xstatic void
XLatin1toASCII(iso, asc, t)
Xunsigned char *iso, *asc;
Xint t;
X{
X    char *p, **tab;
X
X    if (iso == NULL || asc == NULL)
X	return;
X    t--;	/* offset correction -ot */
X    tab = iso2asc[t] - 0xa0;
X    while (*iso) {
X	if (*iso > 0x9f) {
X	    p = tab[*iso++];
X	    if (p) {
X		while (*p)
X		    *asc++ = *p++;
X	    }
X	} else
X	    *asc++ = *iso++;
X    }
X    *asc = 0;
X}
X
X#endif
SHAR_EOF
  $shar_touch -am 1104132094 'trn-3.6/charsubst.c' &&
  chmod 0644 'trn-3.6/charsubst.c' ||
  echo 'restore of trn-3.6/charsubst.c failed'
  shar_count="`wc -c < 'trn-3.6/charsubst.c'`"
  test 5650 -eq "$shar_count" ||
    echo "trn-3.6/charsubst.c: original size 5650, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/hints/aix_rs.sh ==============
if test ! -d 'trn-3.6/hints'; then
  echo 'x - creating directory trn-3.6/hints'
  mkdir 'trn-3.6/hints'
fi
if test -f 'trn-3.6/hints/aix_rs.sh' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/hints/aix_rs.sh (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/hints/aix_rs.sh (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/hints/aix_rs.sh' &&
Xcppstdin='/lib/cpp -D_AIX -D_IBMR2 -U__STR__'
Xcppminus=''
SHAR_EOF
  $shar_touch -am 0719112393 'trn-3.6/hints/aix_rs.sh' &&
  chmod 0644 'trn-3.6/hints/aix_rs.sh' ||
  echo 'restore of trn-3.6/hints/aix_rs.sh failed'
  shar_count="`wc -c < 'trn-3.6/hints/aix_rs.sh'`"
  test 58 -eq "$shar_count" ||
    echo "trn-3.6/hints/aix_rs.sh: original size 58, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/hints/altos486.sh ==============
if test -f 'trn-3.6/hints/altos486.sh' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/hints/altos486.sh (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/hints/altos486.sh (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/hints/altos486.sh' &&
X: have heard of problems with -lc_s on Altos 486
Xset `echo " $libswanted " | sed "s/ c_s / /"`
Xlibswanted="$*"
SHAR_EOF
  $shar_touch -am 0719112393 'trn-3.6/hints/altos486.sh' &&
  chmod 0644 'trn-3.6/hints/altos486.sh' ||
  echo 'restore of trn-3.6/hints/altos486.sh failed'
  shar_count="`wc -c < 'trn-3.6/hints/altos486.sh'`"
  test 111 -eq "$shar_count" ||
    echo "trn-3.6/hints/altos486.sh: original size 111, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/hints/dec_osf1.sh ==============
if test -f 'trn-3.6/hints/dec_osf1.sh' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/hints/dec_osf1.sh (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/hints/dec_osf1.sh (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/hints/dec_osf1.sh' &&
Xlibpth="$libpth /usr/shlib" # Use the shared libraries if possible
Xlibc='/usr/shlib/libc.so'   # The archive version is /lib/libc.a
SHAR_EOF
  $shar_touch -am 0719112393 'trn-3.6/hints/dec_osf1.sh' &&
  chmod 0644 'trn-3.6/hints/dec_osf1.sh' ||
  echo 'restore of trn-3.6/hints/dec_osf1.sh failed'
  shar_count="`wc -c < 'trn-3.6/hints/dec_osf1.sh'`"
  test 132 -eq "$shar_count" ||
    echo "trn-3.6/hints/dec_osf1.sh: original size 132, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/hints/dgux.sh ==============
if test -f 'trn-3.6/hints/dgux.sh' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/hints/dgux.sh (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/hints/dgux.sh (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/hints/dgux.sh' &&
Xcppstdin='/lib/cpp'
Xlibs='-ldgc'
Xd_strchr='define'
Xcc='gcc'
SHAR_EOF
  $shar_touch -am 0719112393 'trn-3.6/hints/dgux.sh' &&
  chmod 0644 'trn-3.6/hints/dgux.sh' ||
  echo 'restore of trn-3.6/hints/dgux.sh failed'
  shar_count="`wc -c < 'trn-3.6/hints/dgux.sh'`"
  test 60 -eq "$shar_count" ||
    echo "trn-3.6/hints/dgux.sh: original size 60, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/hints/dynix.sh ==============
if test -f 'trn-3.6/hints/dynix.sh' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/hints/dynix.sh (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/hints/dynix.sh (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/hints/dynix.sh' &&
Xlibswanted=`echo $libswanted | sed -e 's/socket /socket seq inet /'`
SHAR_EOF
  $shar_touch -am 0719112393 'trn-3.6/hints/dynix.sh' &&
  chmod 0644 'trn-3.6/hints/dynix.sh' ||
  echo 'restore of trn-3.6/hints/dynix.sh failed'
  shar_count="`wc -c < 'trn-3.6/hints/dynix.sh'`"
  test 69 -eq "$shar_count" ||
    echo "trn-3.6/hints/dynix.sh: original size 69, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/hints/hp9000_800.sh ==============
if test -f 'trn-3.6/hints/hp9000_800.sh' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/hints/hp9000_800.sh (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/hints/hp9000_800.sh (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/hints/hp9000_800.sh' &&
Xlibswanted=`echo $libswanted | sed -e 's/malloc //' -e 's/BSD //`
SHAR_EOF
  $shar_touch -am 0719112393 'trn-3.6/hints/hp9000_800.sh' &&
  chmod 0644 'trn-3.6/hints/hp9000_800.sh' ||
  echo 'restore of trn-3.6/hints/hp9000_800.sh failed'
  shar_count="`wc -c < 'trn-3.6/hints/hp9000_800.sh'`"
  test 66 -eq "$shar_count" ||
    echo "trn-3.6/hints/hp9000_800.sh: original size 66, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/hints/hpux.sh ==============
if test -f 'trn-3.6/hints/hpux.sh' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/hints/hpux.sh (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/hints/hpux.sh (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/hints/hpux.sh' &&
Xcase `(uname -r) 2>/dev/null` in
X*2.1*) libswanted=`echo $libswanted | sed 's/malloc //'` ;;
Xesac
Xd_strchr=define
SHAR_EOF
  $shar_touch -am 0719112393 'trn-3.6/hints/hpux.sh' &&
  chmod 0644 'trn-3.6/hints/hpux.sh' ||
  echo 'restore of trn-3.6/hints/hpux.sh failed'
  shar_count="`wc -c < 'trn-3.6/hints/hpux.sh'`"
  test 114 -eq "$shar_count" ||
    echo "trn-3.6/hints/hpux.sh: original size 114, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/hints/i386.sh ==============
if test -f 'trn-3.6/hints/i386.sh' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/hints/i386.sh (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/hints/i386.sh (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/hints/i386.sh' &&
Xldflags='-L/usr/ucblib'
SHAR_EOF
  $shar_touch -am 0719112393 'trn-3.6/hints/i386.sh' &&
  chmod 0644 'trn-3.6/hints/i386.sh' ||
  echo 'restore of trn-3.6/hints/i386.sh failed'
  shar_count="`wc -c < 'trn-3.6/hints/i386.sh'`"
  test 24 -eq "$shar_count" ||
    echo "trn-3.6/hints/i386.sh: original size 24, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/hints/isc_2_2_1.sh ==============
if test -f 'trn-3.6/hints/isc_2_2_1.sh' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/hints/isc_2_2_1.sh (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/hints/isc_2_2_1.sh (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/hints/isc_2_2_1.sh' &&
Xd_ftime=undef
SHAR_EOF
  $shar_touch -am 0719112393 'trn-3.6/hints/isc_2_2_1.sh' &&
  chmod 0644 'trn-3.6/hints/isc_2_2_1.sh' ||
  echo 'restore of trn-3.6/hints/isc_2_2_1.sh failed'
  shar_count="`wc -c < 'trn-3.6/hints/isc_2_2_1.sh'`"
  test 14 -eq "$shar_count" ||
    echo "trn-3.6/hints/isc_2_2_1.sh: original size 14, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/hints/isc_3_2_2.sh ==============
if test -f 'trn-3.6/hints/isc_3_2_2.sh' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/hints/isc_3_2_2.sh (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/hints/isc_3_2_2.sh (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/hints/isc_3_2_2.sh' &&
Xset `echo $libswanted | sed -e 's/ x//' -e 's/malloc //'`
Xlibswanted="inet malloc $*"
SHAR_EOF
  $shar_touch -am 0719112393 'trn-3.6/hints/isc_3_2_2.sh' &&
  chmod 0644 'trn-3.6/hints/isc_3_2_2.sh' ||
  echo 'restore of trn-3.6/hints/isc_3_2_2.sh failed'
  shar_count="`wc -c < 'trn-3.6/hints/isc_3_2_2.sh'`"
  test 86 -eq "$shar_count" ||
    echo "trn-3.6/hints/isc_3_2_2.sh: original size 86, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/hints/isc_3_2_3.sh ==============
if test -f 'trn-3.6/hints/isc_3_2_3.sh' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/hints/isc_3_2_3.sh (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/hints/isc_3_2_3.sh (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/hints/isc_3_2_3.sh' &&
Xset `echo $libswanted | sed -e 's/ socket / inet /'`
Xlibswanted="$*"
SHAR_EOF
  $shar_touch -am 0719112393 'trn-3.6/hints/isc_3_2_3.sh' &&
  chmod 0644 'trn-3.6/hints/isc_3_2_3.sh' ||
  echo 'restore of trn-3.6/hints/isc_3_2_3.sh failed'
  shar_count="`wc -c < 'trn-3.6/hints/isc_3_2_3.sh'`"
  test 69 -eq "$shar_count" ||
    echo "trn-3.6/hints/isc_3_2_3.sh: original size 69, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/hints/mc6000.sh ==============
if test -f 'trn-3.6/hints/mc6000.sh' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/hints/mc6000.sh (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/hints/mc6000.sh (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/hints/mc6000.sh' &&
X# defaults for the masscomp (concurrent) 6000 series running RTU 5.0
Xcppstdin=/lib/cpp
SHAR_EOF
  $shar_touch -am 0719112393 'trn-3.6/hints/mc6000.sh' &&
  chmod 0644 'trn-3.6/hints/mc6000.sh' ||
  echo 'restore of trn-3.6/hints/mc6000.sh failed'
  shar_count="`wc -c < 'trn-3.6/hints/mc6000.sh'`"
  test 87 -eq "$shar_count" ||
    echo "trn-3.6/hints/mc6000.sh: original size 87, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/hints/mips.sh ==============
if test -f 'trn-3.6/hints/mips.sh' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/hints/mips.sh (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/hints/mips.sh (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/hints/mips.sh' &&
Xcc=cc
Xnm_opts='-B'
SHAR_EOF
  $shar_touch -am 0719112393 'trn-3.6/hints/mips.sh' &&
  chmod 0644 'trn-3.6/hints/mips.sh' ||
  echo 'restore of trn-3.6/hints/mips.sh failed'
  shar_count="`wc -c < 'trn-3.6/hints/mips.sh'`"
  test 19 -eq "$shar_count" ||
    echo "trn-3.6/hints/mips.sh: original size 19, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/hints/next.sh ==============
if test -f 'trn-3.6/hints/next.sh' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/hints/next.sh (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/hints/next.sh (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/hints/next.sh' &&
Xlibswanted='sys_s'
SHAR_EOF
  $shar_touch -am 0719112393 'trn-3.6/hints/next.sh' &&
  chmod 0644 'trn-3.6/hints/next.sh' ||
  echo 'restore of trn-3.6/hints/next.sh failed'
  shar_count="`wc -c < 'trn-3.6/hints/next.sh'`"
  test 19 -eq "$shar_count" ||
    echo "trn-3.6/hints/next.sh: original size 19, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/hints/osf1.sh ==============
if test -f 'trn-3.6/hints/osf1.sh' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/hints/osf1.sh (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/hints/osf1.sh (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/hints/osf1.sh' &&
Xlibswanted=m
SHAR_EOF
  $shar_touch -am 0719112393 'trn-3.6/hints/osf1.sh' &&
  chmod 0644 'trn-3.6/hints/osf1.sh' ||
  echo 'restore of trn-3.6/hints/osf1.sh failed'
  shar_count="`wc -c < 'trn-3.6/hints/osf1.sh'`"
  test 13 -eq "$shar_count" ||
    echo "trn-3.6/hints/osf1.sh: original size 13, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/hints/convexos.sh ==============
if test -f 'trn-3.6/hints/convexos.sh' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/hints/convexos.sh (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/hints/convexos.sh (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/hints/convexos.sh' &&
Xi_sgtty=undef
Xi_termios=define
Xccflags="-D__STDC__ -ext -tm c1"
Xd_voidsig='define'
Xsignal_t='void'
Xd_strchr='undef'
Xlibc='/usr/lib/libc.a'
SHAR_EOF
  $shar_touch -am 0720205693 'trn-3.6/hints/convexos.sh' &&
  chmod 0644 'trn-3.6/hints/convexos.sh' ||
  echo 'restore of trn-3.6/hints/convexos.sh failed'
  shar_count="`wc -c < 'trn-3.6/hints/convexos.sh'`"
  test 139 -eq "$shar_count" ||
    echo "trn-3.6/hints/convexos.sh: original size 139, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/hints/sco_3.sh ==============
if test -f 'trn-3.6/hints/sco_3.sh' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/hints/sco_3.sh (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/hints/sco_3.sh (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/hints/sco_3.sh' &&
Xlibswanted=`echo $libswanted | sed 's/ x//'`
Xcppminus=''
Xd_rename=undef
SHAR_EOF
  $shar_touch -am 0719112393 'trn-3.6/hints/sco_3.sh' &&
  chmod 0644 'trn-3.6/hints/sco_3.sh' ||
  echo 'restore of trn-3.6/hints/sco_3.sh failed'
  shar_count="`wc -c < 'trn-3.6/hints/sco_3.sh'`"
  test 72 -eq "$shar_count" ||
    echo "trn-3.6/hints/sco_3.sh: original size 72, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/hints/sco_3_2_4.sh ==============
if test -f 'trn-3.6/hints/sco_3_2_4.sh' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/hints/sco_3_2_4.sh (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/hints/sco_3_2_4.sh (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/hints/sco_3_2_4.sh' &&
Xxlibpth=''
Xmailer='/usr/lib/mail/execmail'
Xlibc='/lib/libc.a'
SHAR_EOF
  $shar_touch -am 0719112393 'trn-3.6/hints/sco_3_2_4.sh' &&
  chmod 0644 'trn-3.6/hints/sco_3_2_4.sh' ||
  echo 'restore of trn-3.6/hints/sco_3_2_4.sh failed'
  shar_count="`wc -c < 'trn-3.6/hints/sco_3_2_4.sh'`"
  test 62 -eq "$shar_count" ||
    echo "trn-3.6/hints/sco_3_2_4.sh: original size 62, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/hints/domainos.sh ==============
if test -f 'trn-3.6/hints/domainos.sh' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/hints/domainos.sh (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/hints/domainos.sh (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/hints/domainos.sh' &&
Xccflags='-A nansi'
Xd_ignoreorg='define'
SHAR_EOF
  $shar_touch -am 1009030193 'trn-3.6/hints/domainos.sh' &&
  chmod 0644 'trn-3.6/hints/domainos.sh' ||
  echo 'restore of trn-3.6/hints/domainos.sh failed'
  shar_count="`wc -c < 'trn-3.6/hints/domainos.sh'`"
  test 40 -eq "$shar_count" ||
    echo "trn-3.6/hints/domainos.sh: original size 40, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/hints/sgi.sh ==============
if test -f 'trn-3.6/hints/sgi.sh' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/hints/sgi.sh (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/hints/sgi.sh (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/hints/sgi.sh' &&
Xd_voidsig=define
Xd_vfork=undef
Xd_sigblock=undef
SHAR_EOF
  $shar_touch -am 1009030193 'trn-3.6/hints/sgi.sh' &&
  chmod 0644 'trn-3.6/hints/sgi.sh' ||
  echo 'restore of trn-3.6/hints/sgi.sh failed'
  shar_count="`wc -c < 'trn-3.6/hints/sgi.sh'`"
  test 48 -eq "$shar_count" ||
    echo "trn-3.6/hints/sgi.sh: original size 48, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/hints/solaris_2_0.sh ==============
if test -f 'trn-3.6/hints/solaris_2_0.sh' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/hints/solaris_2_0.sh (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/hints/solaris_2_0.sh (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/hints/solaris_2_0.sh' &&
Xd_vfork=undef
SHAR_EOF
  $shar_touch -am 1009030193 'trn-3.6/hints/solaris_2_0.sh' &&
  chmod 0644 'trn-3.6/hints/solaris_2_0.sh' ||
  echo 'restore of trn-3.6/hints/solaris_2_0.sh failed'
  shar_count="`wc -c < 'trn-3.6/hints/solaris_2_0.sh'`"
  test 14 -eq "$shar_count" ||
    echo "trn-3.6/hints/solaris_2_0.sh: original size 14, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/hints/solaris_2_1.sh ==============
if test -f 'trn-3.6/hints/solaris_2_1.sh' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/hints/solaris_2_1.sh (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/hints/solaris_2_1.sh (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/hints/solaris_2_1.sh' &&
X#d_vfork=undef
Xi_dirent=define
Xi_sysdir=undef
Xlibs='-lmalloc -lsocket -lnls -lnsl -lintl -lucb'
SHAR_EOF
  $shar_touch -am 1009030193 'trn-3.6/hints/solaris_2_1.sh' &&
  chmod 0644 'trn-3.6/hints/solaris_2_1.sh' ||
  echo 'restore of trn-3.6/hints/solaris_2_1.sh failed'
  shar_count="`wc -c < 'trn-3.6/hints/solaris_2_1.sh'`"
  test 96 -eq "$shar_count" ||
    echo "trn-3.6/hints/solaris_2_1.sh: original size 96, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/hints/solaris_2_3.sh ==============
if test -f 'trn-3.6/hints/solaris_2_3.sh' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/hints/solaris_2_3.sh (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/hints/solaris_2_3.sh (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/hints/solaris_2_3.sh' &&
Xd_sigblock='undef'
Xd_getcwd='define'
Xd_getwd='undef'
Xlibs='-lmalloc -lsocket -lnls -lnsl -lintl'
SHAR_EOF
  $shar_touch -am 1107173594 'trn-3.6/hints/solaris_2_3.sh' &&
  chmod 0644 'trn-3.6/hints/solaris_2_3.sh' ||
  echo 'restore of trn-3.6/hints/solaris_2_3.sh failed'
  shar_count="`wc -c < 'trn-3.6/hints/solaris_2_3.sh'`"
  test 97 -eq "$shar_count" ||
    echo "trn-3.6/hints/solaris_2_3.sh: original size 97, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/hints/svr4.sh ==============
if test -f 'trn-3.6/hints/svr4.sh' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/hints/svr4.sh (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/hints/svr4.sh (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/hints/svr4.sh' &&
Xcc='/bin/cc'
Xtest -f $cc || cc='/usr/ccs/bin/cc'
Xmansrc='/usr/share/man/man1'
Xlibswanted='malloc socket nsl'
Xd_strchr=define
SHAR_EOF
  $shar_touch -am 0719112393 'trn-3.6/hints/svr4.sh' &&
  chmod 0644 'trn-3.6/hints/svr4.sh' ||
  echo 'restore of trn-3.6/hints/svr4.sh failed'
  shar_count="`wc -c < 'trn-3.6/hints/svr4.sh'`"
  test 125 -eq "$shar_count" ||
    echo "trn-3.6/hints/svr4.sh: original size 125, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/hints/solaris_2_2.sh ==============
if test -f 'trn-3.6/hints/solaris_2_2.sh' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/hints/solaris_2_2.sh (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/hints/solaris_2_2.sh (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/hints/solaris_2_2.sh' &&
Xd_sigblock='undef'
Xd_getcwd='define'
Xd_getwd='undef'
Xlibs='-lmalloc -lsocket -lnls -lnsl -lintl'
SHAR_EOF
  $shar_touch -am 0730030993 'trn-3.6/hints/solaris_2_2.sh' &&
  chmod 0644 'trn-3.6/hints/solaris_2_2.sh' ||
  echo 'restore of trn-3.6/hints/solaris_2_2.sh failed'
  shar_count="`wc -c < 'trn-3.6/hints/solaris_2_2.sh'`"
  test 97 -eq "$shar_count" ||
    echo "trn-3.6/hints/solaris_2_2.sh: original size 97, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/hints/sco_xenix.sh ==============
if test -f 'trn-3.6/hints/sco_xenix.sh' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/hints/sco_xenix.sh (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/hints/sco_xenix.sh (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/hints/sco_xenix.sh' &&
Xi_dirent=undef
Xlibswanted=`echo $libswanted | sed 's/ x//'`
SHAR_EOF
  $shar_touch -am 0730225093 'trn-3.6/hints/sco_xenix.sh' &&
  chmod 0644 'trn-3.6/hints/sco_xenix.sh' ||
  echo 'restore of trn-3.6/hints/sco_xenix.sh failed'
  shar_count="`wc -c < 'trn-3.6/hints/sco_xenix.sh'`"
  test 60 -eq "$shar_count" ||
    echo "trn-3.6/hints/sco_xenix.sh: original size 60, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/hints/freebsd.sh ==============
if test -f 'trn-3.6/hints/freebsd.sh' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/hints/freebsd.sh (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/hints/freebsd.sh (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/hints/freebsd.sh' &&
Xi_sysfilio='undef'
SHAR_EOF
  $shar_touch -am 1021141894 'trn-3.6/hints/freebsd.sh' &&
  chmod 0644 'trn-3.6/hints/freebsd.sh' ||
  echo 'restore of trn-3.6/hints/freebsd.sh failed'
  shar_count="`wc -c < 'trn-3.6/hints/freebsd.sh'`"
  test 19 -eq "$shar_count" ||
    echo "trn-3.6/hints/freebsd.sh: original size 19, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/dependencies ==============
if test -f 'trn-3.6/dependencies' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/dependencies (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/dependencies (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/dependencies' &&
Xaddng.o: EXTERN.h
Xaddng.o: INTERN.h
Xaddng.o: addng.c
Xaddng.o: addng.h
Xaddng.o: common.h
Xaddng.o: config.h
Xaddng.o: final.h
Xaddng.o: intrp.h
Xaddng.o: last.h
Xaddng.o: ngdata.h
Xaddng.o: nntp.h
Xaddng.o: nntpclient.h
Xaddng.o: only.h
Xaddng.o: rcstuff.h
Xaddng.o: search.h
Xaddng.o: trn.h
Xaddng.o: util.h
Xart.o: EXTERN.h
Xart.o: INTERN.h
Xart.o: art.c
Xart.o: art.h
Xart.o: artio.h
Xart.o: artstate.h
Xart.o: backpage.h
Xart.o: bits.h
Xart.o: cache.h
Xart.o: charsubst.h
Xart.o: common.h
Xart.o: config.h
Xart.o: final.h
Xart.o: head.h
Xart.o: help.h
Xart.o: intrp.h
Xart.o: ng.h
Xart.o: ngdata.h
Xart.o: ngstuff.h
Xart.o: nntp.h
Xart.o: nntpclient.h
Xart.o: rcstuff.h
Xart.o: rt-select.h
Xart.o: rt-util.h
Xart.o: rt-wumpus.h
Xart.o: rthread.h
Xart.o: search.h
Xart.o: sw.h
Xart.o: term.h
Xart.o: trn.h
Xart.o: util.h
Xart.o: util2.h
Xartio.o: EXTERN.h
Xartio.o: INTERN.h
Xartio.o: art.h
Xartio.o: artio.c
Xartio.o: artio.h
Xartio.o: bits.h
Xartio.o: cache.h
Xartio.o: common.h
Xartio.o: config.h
Xartio.o: final.h
Xartio.o: head.h
Xartio.o: ngdata.h
Xartio.o: nntp.h
Xartio.o: nntpclient.h
Xartio.o: rthread.h
Xartsrch.o: EXTERN.h
Xartsrch.o: INTERN.h
Xartsrch.o: artio.h
Xartsrch.o: artsrch.c
Xartsrch.o: artsrch.h
Xartsrch.o: bits.h
Xartsrch.o: cache.h
Xartsrch.o: common.h
Xartsrch.o: config.h
Xartsrch.o: final.h
Xartsrch.o: head.h
Xartsrch.o: intrp.h
Xartsrch.o: kfile.h
Xartsrch.o: ng.h
Xartsrch.o: ngdata.h
Xartsrch.o: ngstuff.h
Xartsrch.o: nntp.h
Xartsrch.o: nntpclient.h
Xartsrch.o: rt-select.h
Xartsrch.o: rthread.h
Xartsrch.o: search.h
Xartsrch.o: term.h
Xartsrch.o: util.h
Xautosub.o: EXTERN.h
Xautosub.o: INTERN.h
Xautosub.o: autosub.c
Xautosub.o: autosub.h
Xautosub.o: common.h
Xautosub.o: config.h
Xautosub.o: final.h
Xautosub.o: ngsrch.h
Xautosub.o: search.h
Xautosub.o: util.h
Xbackpage.o: EXTERN.h
Xbackpage.o: INTERN.h
Xbackpage.o: backpage.c
Xbackpage.o: backpage.h
Xbackpage.o: common.h
Xbackpage.o: config.h
Xbackpage.o: final.h
Xbackpage.o: intrp.h
Xbits.o: EXTERN.h
Xbits.o: INTERN.h
Xbits.o: artio.h
Xbits.o: bits.c
Xbits.o: bits.h
Xbits.o: cache.h
Xbits.o: common.h
Xbits.o: config.h
Xbits.o: final.h
Xbits.o: head.h
Xbits.o: intrp.h
Xbits.o: ndir.h
Xbits.o: ng.h
Xbits.o: ngdata.h
Xbits.o: nntp.h
Xbits.o: nntpclient.h
Xbits.o: rcln.h
Xbits.o: rcstuff.h
Xbits.o: rt-select.h
Xbits.o: rt-util.h
Xbits.o: rthread.h
Xbits.o: term.h
Xbits.o: trn.h
Xbits.o: util.h
Xbits.o: util2.h
Xcache.o: EXTERN.h
Xcache.o: INTERN.h
Xcache.o: artsrch.h
Xcache.o: bits.h
Xcache.o: cache.c
Xcache.o: cache.h
Xcache.o: common.h
Xcache.o: config.h
Xcache.o: final.h
Xcache.o: hash.h
Xcache.o: head.h
Xcache.o: intrp.h
Xcache.o: ng.h
Xcache.o: ngdata.h
Xcache.o: nntp.h
Xcache.o: nntpclient.h
Xcache.o: rcstuff.h
Xcache.o: rt-ov.h
Xcache.o: rt-page.h
Xcache.o: rt-process.h
Xcache.o: rt-select.h
Xcache.o: rt-util.h
Xcache.o: rthread.h
Xcache.o: search.h
Xcache.o: term.h
Xcache.o: trn.h
Xcache.o: util.h
Xcache.o: util2.h
Xcharsubst.o: EXTERN.h
Xcharsubst.o: INTERN.h
Xcharsubst.o: artstate.h
Xcharsubst.o: charsubst.c
Xcharsubst.o: charsubst.h
Xcharsubst.o: common.h
Xcharsubst.o: config.h
Xcharsubst.o: search.h
Xdecode.o: EXTERN.h
Xdecode.o: INTERN.h
Xdecode.o: common.h
Xdecode.o: config.h
Xdecode.o: decode.c
Xdecode.o: decode.h
Xedit_dist.o: EXTERN.h
Xedit_dist.o: common.h
Xedit_dist.o: config.h
Xedit_dist.o: edit_dist.c
Xedit_dist.o: util.h
Xfinal.o: EXTERN.h
Xfinal.o: INTERN.h
Xfinal.o: artio.h
Xfinal.o: bits.h
Xfinal.o: cache.h
Xfinal.o: common.h
Xfinal.o: config.h
Xfinal.o: final.c
Xfinal.o: final.h
Xfinal.o: init.h
Xfinal.o: intrp.h
Xfinal.o: last.h
Xfinal.o: ng.h
Xfinal.o: ngdata.h
Xfinal.o: nntp.h
Xfinal.o: nntpclient.h
Xfinal.o: rcstuff.h
Xfinal.o: term.h
Xfinal.o: util.h
Xhash.o: EXTERN.h
Xhash.o: INTERN.h
Xhash.o: common.h
Xhash.o: config.h
Xhash.o: final.h
Xhash.o: hash.c
Xhash.o: hash.h
Xhash.o: util.h
Xhead.o: EXTERN.h
Xhead.o: INTERN.h
Xhead.o: artio.h
Xhead.o: cache.h
Xhead.o: common.h
Xhead.o: config.h
Xhead.o: final.h
Xhead.o: hash.h
Xhead.o: head.c
Xhead.o: head.h
Xhead.o: ng.h
Xhead.o: ngdata.h
Xhead.o: nntp.h
Xhead.o: nntpclient.h
Xhead.o: rt-process.h
Xhead.o: rt-util.h
Xhead.o: rthread.h
Xhead.o: util.h
Xhelp.o: EXTERN.h
Xhelp.o: INTERN.h
Xhelp.o: common.h
Xhelp.o: config.h
Xhelp.o: help.c
Xhelp.o: help.h
Xhelp.o: term.h
Xhelp.o: trn.h
Xinit.o: EXTERN.h
Xinit.o: INTERN.h
Xinit.o: addng.h
Xinit.o: art.h
Xinit.o: artio.h
Xinit.o: artsrch.h
Xinit.o: backpage.h
Xinit.o: bits.h
Xinit.o: cache.h
Xinit.o: common.h
Xinit.o: config.h
Xinit.o: decode.h
Xinit.o: final.h
Xinit.o: head.h
Xinit.o: help.h
Xinit.o: init.c
Xinit.o: init.h
Xinit.o: intrp.h
Xinit.o: kfile.h
Xinit.o: last.h
Xinit.o: ng.h
Xinit.o: ngdata.h
Xinit.o: ngsrch.h
Xinit.o: ngstuff.h
Xinit.o: nntp.h
Xinit.o: nntpclient.h
Xinit.o: only.h
Xinit.o: rcln.h
Xinit.o: rcstuff.h
Xinit.o: respond.h
Xinit.o: rthread.h
Xinit.o: search.h
Xinit.o: sw.h
Xinit.o: term.h
Xinit.o: trn.h
Xinit.o: util.h
Xintrp.o: EXTERN.h
Xintrp.o: INTERN.h
Xintrp.o: artio.h
Xintrp.o: artsrch.h
Xintrp.o: bits.h
Xintrp.o: cache.h
Xintrp.o: common.h
Xintrp.o: config.h
Xintrp.o: final.h
Xintrp.o: head.h
Xintrp.o: init.h
Xintrp.o: intrp.c
Xintrp.o: intrp.h
Xintrp.o: ng.h
Xintrp.o: ngdata.h
Xintrp.o: nntp.h
Xintrp.o: nntpclient.h
Xintrp.o: rcstuff.h
Xintrp.o: respond.h
Xintrp.o: rt-select.h
Xintrp.o: rt-util.h
Xintrp.o: rthread.h
Xintrp.o: search.h
Xintrp.o: term.h
Xintrp.o: trn.h
Xintrp.o: util.h
Xintrp.o: util2.h
Xkfile.o: EXTERN.h
Xkfile.o: INTERN.h
Xkfile.o: artsrch.h
Xkfile.o: bits.h
Xkfile.o: cache.h
Xkfile.o: common.h
Xkfile.o: config.h
Xkfile.o: hash.h
Xkfile.o: intrp.h
Xkfile.o: kfile.c
Xkfile.o: kfile.h
Xkfile.o: ng.h
Xkfile.o: ngdata.h
Xkfile.o: ngstuff.h
Xkfile.o: rcstuff.h
Xkfile.o: rt-process.h
Xkfile.o: rt-select.h
Xkfile.o: rthread.h
Xkfile.o: search.h
Xkfile.o: term.h
Xkfile.o: trn.h
Xkfile.o: util.h
Xlast.o: EXTERN.h
Xlast.o: INTERN.h
Xlast.o: common.h
Xlast.o: config.h
Xlast.o: intrp.h
Xlast.o: last.c
Xlast.o: last.h
Xlast.o: trn.h
Xlast.o: util.h
Xndir.o: EXTERN.h
Xndir.o: INTERN.h
Xndir.o: common.h
Xndir.o: config.h
Xndir.o: ndir.c
Xndir.o: ndir.h
Xng.o: EXTERN.h
Xng.o: INTERN.h
Xng.o: art.h
Xng.o: artio.h
Xng.o: artsrch.h
Xng.o: artstate.h
Xng.o: backpage.h
Xng.o: bits.h
Xng.o: cache.h
Xng.o: charsubst.h
Xng.o: common.h
Xng.o: config.h
Xng.o: decode.h
Xng.o: final.h
Xng.o: head.h
Xng.o: help.h
Xng.o: intrp.h
Xng.o: kfile.h
Xng.o: last.h
Xng.o: ng.c
Xng.o: ng.h
Xng.o: ngdata.h
Xng.o: ngstuff.h
Xng.o: nntp.h
Xng.o: nntpclient.h
Xng.o: rcln.h
Xng.o: rcstuff.h
Xng.o: respond.h
Xng.o: rt-select.h
Xng.o: rt-wumpus.h
Xng.o: rthread.h
Xng.o: search.h
Xng.o: sw.h
Xng.o: term.h
Xng.o: trn.h
Xng.o: util.h
Xngdata.o: EXTERN.h
Xngdata.o: INTERN.h
Xngdata.o: bits.h
Xngdata.o: cache.h
Xngdata.o: common.h
Xngdata.o: config.h
Xngdata.o: final.h
Xngdata.o: head.h
Xngdata.o: intrp.h
Xngdata.o: kfile.h
Xngdata.o: ndir.h
Xngdata.o: ng.h
Xngdata.o: ngdata.c
Xngdata.o: ngdata.h
Xngdata.o: nntp.h
Xngdata.o: nntpclient.h
Xngdata.o: rcln.h
Xngdata.o: rcstuff.h
Xngdata.o: rt-select.h
Xngdata.o: rthread.h
Xngdata.o: term.h
Xngdata.o: trn.h
Xngdata.o: util.h
Xnghash.o: EXTERN.h
Xnghash.o: common.h
Xnghash.o: config.h
Xnghash.o: final.h
Xnghash.o: hash.h
Xnghash.o: intrp.h
Xnghash.o: ndir.h
Xnghash.o: ngdata.h
Xnghash.o: nghash.c
Xnghash.o: nntp.h
Xnghash.o: nntpclient.h
Xnghash.o: rcln.h
Xnghash.o: rcstuff.h
Xnghash.o: term.h
Xnghash.o: trn.h
Xnghash.o: util.h
Xngsrch.o: EXTERN.h
Xngsrch.o: INTERN.h
Xngsrch.o: common.h
Xngsrch.o: config.h
Xngsrch.o: final.h
Xngsrch.o: ngsrch.c
Xngsrch.o: ngsrch.h
Xngsrch.o: rcln.h
Xngsrch.o: rcstuff.h
Xngsrch.o: search.h
Xngsrch.o: term.h
Xngsrch.o: trn.h
Xngsrch.o: util.h
Xngstuff.o: EXTERN.h
Xngstuff.o: INTERN.h
Xngstuff.o: bits.h
Xngstuff.o: cache.h
Xngstuff.o: common.h
Xngstuff.o: config.h
Xngstuff.o: decode.h
Xngstuff.o: final.h
Xngstuff.o: head.h
Xngstuff.o: intrp.h
Xngstuff.o: kfile.h
Xngstuff.o: ng.h
Xngstuff.o: ngdata.h
Xngstuff.o: ngstuff.c
Xngstuff.o: ngstuff.h
Xngstuff.o: rcstuff.h
Xngstuff.o: respond.h
Xngstuff.o: rt-select.h
Xngstuff.o: rt-wumpus.h
Xngstuff.o: rthread.h
Xngstuff.o: sw.h
Xngstuff.o: term.h
Xngstuff.o: trn.h
Xngstuff.o: util.h
Xngstuff.o: util2.h
Xnntp.o: EXTERN.h
Xnntp.o: artio.h
Xnntp.o: bits.h
Xnntp.o: cache.h
Xnntp.o: common.h
Xnntp.o: config.h
Xnntp.o: final.h
Xnntp.o: head.h
Xnntp.o: init.h
Xnntp.o: ngdata.h
Xnntp.o: nntp.c
Xnntp.o: nntp.h
Xnntp.o: nntpclient.h
Xnntp.o: rcln.h
Xnntp.o: term.h
Xnntp.o: trn.h
Xnntp.o: util.h
Xnntpauth.o: EXTERN.h
Xnntpauth.o: INTERN.h
Xnntpauth.o: common.h
Xnntpauth.o: config.h
Xnntpauth.o: nntp.h
Xnntpauth.o: nntpauth.c
Xnntpauth.o: nntpauth.h
Xnntpauth.o: nntpclient.h
Xnntpauth.o: util2.h
Xnntpclient.o: EXTERN.h
Xnntpclient.o: INTERN.h
Xnntpclient.o: common.h
Xnntpclient.o: config.h
Xnntpclient.o: nntpclient.c
Xnntpclient.o: nntpclient.h
Xnntpinit.o: EXTERN.h
Xnntpinit.o: common.h
Xnntpinit.o: config.h
Xnntpinit.o: nntpclient.h
Xnntpinit.o: nntpinit.c
Xnntplist.o: EXTERN.h
Xnntplist.o: common.h
Xnntplist.o: config.h
Xnntplist.o: nntpclient.h
Xnntplist.o: nntplist.c
Xonly.o: EXTERN.h
Xonly.o: INTERN.h
Xonly.o: common.h
Xonly.o: config.h
Xonly.o: final.h
Xonly.o: ngsrch.h
Xonly.o: only.c
Xonly.o: only.h
Xonly.o: search.h
Xonly.o: util.h
Xparsedate.o: config.h
Xparsedate.o: parsedate.y
Xrcln.o: EXTERN.h
Xrcln.o: INTERN.h
Xrcln.o: common.h
Xrcln.o: config.h
Xrcln.o: ngdata.h
Xrcln.o: rcln.c
Xrcln.o: rcln.h
Xrcln.o: rcstuff.h
Xrcln.o: util.h
Xrcln.o: util2.h
Xrcstuff.o: EXTERN.h
Xrcstuff.o: INTERN.h
Xrcstuff.o: autosub.h
Xrcstuff.o: bits.h
Xrcstuff.o: cache.h
Xrcstuff.o: common.h
Xrcstuff.o: config.h
Xrcstuff.o: final.h
Xrcstuff.o: hash.h
Xrcstuff.o: intrp.h
Xrcstuff.o: ngdata.h
Xrcstuff.o: nntp.h
Xrcstuff.o: nntpclient.h
Xrcstuff.o: only.h
Xrcstuff.o: rcln.h
Xrcstuff.o: rcstuff.c
Xrcstuff.o: rcstuff.h
Xrcstuff.o: search.h
Xrcstuff.o: term.h
Xrcstuff.o: trn.h
Xrcstuff.o: util.h
Xrespond.o: EXTERN.h
Xrespond.o: INTERN.h
Xrespond.o: artio.h
Xrespond.o: cache.h
Xrespond.o: charsubst.h
Xrespond.o: common.h
Xrespond.o: config.h
Xrespond.o: decode.h
Xrespond.o: final.h
Xrespond.o: head.h
Xrespond.o: intrp.h
Xrespond.o: ng.h
Xrespond.o: ngdata.h
Xrespond.o: nntp.h
Xrespond.o: nntpclient.h
Xrespond.o: respond.c
Xrespond.o: respond.h
Xrespond.o: term.h
Xrespond.o: trn.h
Xrespond.o: util.h
Xrespond.o: util2.h
Xrt-mt.o: EXTERN.h
Xrt-mt.o: INTERN.h
Xrt-mt.o: bits.h
Xrt-mt.o: cache.h
Xrt-mt.o: common.h
Xrt-mt.o: config.h
Xrt-mt.o: hash.h
Xrt-mt.o: intrp.h
Xrt-mt.o: ng.h
Xrt-mt.o: ngdata.h
Xrt-mt.o: nntp.h
Xrt-mt.o: nntpclient.h
Xrt-mt.o: rcln.h
Xrt-mt.o: rt-mt.c
Xrt-mt.o: rt-mt.h
Xrt-mt.o: rt-process.h
Xrt-mt.o: rthread.h
Xrt-mt.o: trn.h
Xrt-mt.o: util.h
Xrt-ov.o: EXTERN.h
Xrt-ov.o: INTERN.h
Xrt-ov.o: bits.h
Xrt-ov.o: cache.h
Xrt-ov.o: common.h
Xrt-ov.o: config.h
Xrt-ov.o: final.h
Xrt-ov.o: hash.h
Xrt-ov.o: head.h
Xrt-ov.o: ng.h
Xrt-ov.o: ngdata.h
Xrt-ov.o: nntp.h
Xrt-ov.o: nntpclient.h
Xrt-ov.o: overview.h
Xrt-ov.o: rt-ov.c
Xrt-ov.o: rt-ov.h
Xrt-ov.o: rt-process.h
Xrt-ov.o: rt-util.h
Xrt-ov.o: rthread.h
Xrt-ov.o: term.h
Xrt-ov.o: trn.h
Xrt-ov.o: util.h
Xrt-page.o: EXTERN.h
Xrt-page.o: INTERN.h
Xrt-page.o: cache.h
Xrt-page.o: common.h
Xrt-page.o: config.h
Xrt-page.o: ngdata.h
Xrt-page.o: rt-page.c
Xrt-page.o: rt-page.h
Xrt-page.o: rt-select.h
Xrt-page.o: rt-util.h
Xrt-page.o: rthread.h
Xrt-page.o: term.h
Xrt-page.o: trn.h
Xrt-page.o: util.h
Xrt-process.o: EXTERN.h
Xrt-process.o: INTERN.h
Xrt-process.o: bits.h
Xrt-process.o: cache.h
Xrt-process.o: common.h
Xrt-process.o: config.h
Xrt-process.o: final.h
Xrt-process.o: hash.h
Xrt-process.o: intrp.h
Xrt-process.o: kfile.h
Xrt-process.o: ng.h
Xrt-process.o: ngdata.h
Xrt-process.o: rcln.h
Xrt-process.o: rt-process.c
Xrt-process.o: rt-process.h
Xrt-process.o: rt-select.h
Xrt-process.o: rthread.h
Xrt-process.o: trn.h
Xrt-process.o: util.h
Xrt-select.o: EXTERN.h
Xrt-select.o: INTERN.h
Xrt-select.o: artsrch.h
Xrt-select.o: bits.h
Xrt-select.o: cache.h
Xrt-select.o: common.h
Xrt-select.o: config.h
Xrt-select.o: final.h
Xrt-select.o: help.h
Xrt-select.o: kfile.h
Xrt-select.o: ng.h
Xrt-select.o: ngdata.h
Xrt-select.o: ngstuff.h
Xrt-select.o: rt-page.h
Xrt-select.o: rt-select.c
Xrt-select.o: rt-select.h
Xrt-select.o: rt-util.h
Xrt-select.o: rthread.h
Xrt-select.o: search.h
Xrt-select.o: term.h
Xrt-select.o: trn.h
Xrt-select.o: util.h
Xrt-util.o: EXTERN.h
Xrt-util.o: INTERN.h
Xrt-util.o: artio.h
Xrt-util.o: cache.h
Xrt-util.o: common.h
Xrt-util.o: config.h
Xrt-util.o: ngdata.h
Xrt-util.o: nntp.h
Xrt-util.o: nntpclient.h
Xrt-util.o: rt-select.h
Xrt-util.o: rt-util.c
Xrt-util.o: rt-util.h
Xrt-util.o: rthread.h
Xrt-util.o: term.h
Xrt-wumpus.o: EXTERN.h
Xrt-wumpus.o: INTERN.h
Xrt-wumpus.o: artio.h
Xrt-wumpus.o: backpage.h
Xrt-wumpus.o: cache.h
Xrt-wumpus.o: common.h
Xrt-wumpus.o: config.h
Xrt-wumpus.o: final.h
Xrt-wumpus.o: head.h
Xrt-wumpus.o: ng.h
Xrt-wumpus.o: ngdata.h
Xrt-wumpus.o: rt-select.h
Xrt-wumpus.o: rt-wumpus.c
Xrt-wumpus.o: rt-wumpus.h
Xrt-wumpus.o: rthread.h
Xrt-wumpus.o: term.h
Xrt-wumpus.o: util.h
Xrthread.o: EXTERN.h
Xrthread.o: INTERN.h
Xrthread.o: artstate.h
Xrthread.o: bits.h
Xrthread.o: cache.h
Xrthread.o: common.h
Xrthread.o: config.h
Xrthread.o: final.h
Xrthread.o: hash.h
Xrthread.o: head.h
Xrthread.o: intrp.h
Xrthread.o: kfile.h
Xrthread.o: ng.h
Xrthread.o: ngdata.h
Xrthread.o: nntp.h
Xrthread.o: nntpclient.h
Xrthread.o: rcln.h
Xrthread.o: rcstuff.h
Xrthread.o: rt-mt.h
Xrthread.o: rt-ov.h
Xrthread.o: rt-page.h
Xrthread.o: rt-process.h
Xrthread.o: rt-select.h
Xrthread.o: rt-util.h
Xrthread.o: rt-wumpus.h
Xrthread.o: rthread.c
Xrthread.o: rthread.h
Xrthread.o: search.h
Xrthread.o: trn.h
Xrthread.o: util.h
Xsearch.o: EXTERN.h
Xsearch.o: INTERN.h
Xsearch.o: common.h
Xsearch.o: config.h
Xsearch.o: search.c
Xsearch.o: search.h
Xsearch.o: util.h
Xstrftime.o: EXTERN.h
Xstrftime.o: common.h
Xstrftime.o: config.h
Xstrftime.o: strftime.c
Xsw.o: EXTERN.h
Xsw.o: INTERN.h
Xsw.o: artstate.h
Xsw.o: cache.h
Xsw.o: charsubst.h
Xsw.o: common.h
Xsw.o: config.h
Xsw.o: head.h
Xsw.o: intrp.h
Xsw.o: ng.h
Xsw.o: ngdata.h
Xsw.o: only.h
Xsw.o: rt-page.h
Xsw.o: rt-util.h
Xsw.o: search.h
Xsw.o: sw.c
Xsw.o: sw.h
Xsw.o: term.h
Xsw.o: trn.h
Xsw.o: util.h
Xsw.o: util2.h
Xterm.o: EXTERN.h
Xterm.o: INTERN.h
Xterm.o: cache.h
Xterm.o: common.h
Xterm.o: config.h
Xterm.o: final.h
Xterm.o: help.h
Xterm.o: intrp.h
Xterm.o: term.c
Xterm.o: term.h
Xterm.o: util.h
Xterm.o: util2.h
Xtest.o: test.c
Xtrn-artchk.o: EXTERN.h
Xtrn-artchk.o: common.h
Xtrn-artchk.o: config.h
Xtrn-artchk.o: nntpclient.h
Xtrn-artchk.o: trn-artchk.c
Xtrn.o: EXTERN.h
Xtrn.o: INTERN.h
Xtrn.o: addng.h
Xtrn.o: cache.h
Xtrn.o: common.h
Xtrn.o: config.h
Xtrn.o: final.h
Xtrn.o: help.h
Xtrn.o: init.h
Xtrn.o: intrp.h
Xtrn.o: kfile.h
Xtrn.o: last.h
Xtrn.o: ng.h
Xtrn.o: ngdata.h
Xtrn.o: ngsrch.h
Xtrn.o: ngstuff.h
Xtrn.o: nntp.h
Xtrn.o: nntpclient.h
Xtrn.o: only.h
Xtrn.o: patchlevel.h
Xtrn.o: rcln.h
Xtrn.o: rcstuff.h
Xtrn.o: search.h
Xtrn.o: sw.h
Xtrn.o: term.h
Xtrn.o: trn.c
Xtrn.o: trn.h
Xtrn.o: util.h
Xtrn.o: util2.h
Xunipatch.o: unipatch.c
Xunship.o: EXTERN.h
Xunship.o: common.h
Xunship.o: config.h
Xunship.o: decode.h
Xunship.o: respond.h
Xunship.o: unship.c
Xutil.o: EXTERN.h
Xutil.o: INTERN.h
Xutil.o: common.h
Xutil.o: config.h
Xutil.o: final.h
Xutil.o: nntp.h
Xutil.o: nntpauth.h
Xutil.o: nntpclient.h
Xutil.o: term.h
Xutil.o: util.c
Xutil.o: util.h
Xutil2.o: EXTERN.h
Xutil2.o: INTERN.h
Xutil2.o: common.h
Xutil2.o: config.h
Xutil2.o: nntp.h
Xutil2.o: nntpauth.h
Xutil2.o: nntpclient.h
Xutil2.o: util.h
Xutil2.o: util2.c
Xutil2.o: util2.h
Xuudecode.o: EXTERN.h
Xuudecode.o: common.h
Xuudecode.o: config.h
Xuudecode.o: decode.h
Xuudecode.o: respond.h
Xuudecode.o: uudecode.c
XMakefile: Makefile.SH config.sh ; /bin/sh $(srcdir)/Makefile.SH
XPnews: Pnews.SH config.sh ; /bin/sh $(srcdir)/Pnews.SH
XPolicy.sh: Policy.sh.SH config.sh ; /bin/sh $(srcdir)/Policy.sh.SH
XRnmail: Rnmail.SH config.sh ; /bin/sh $(srcdir)/Rnmail.SH
XSpeller: Speller.SH config.sh ; /bin/sh $(srcdir)/Speller.SH
Xconfig.h: config.h.SH config.sh ; /bin/sh $(srcdir)/config.h.SH
Xfilexp: filexp.SH config.sh ; /bin/sh $(srcdir)/filexp.SH
Xmakedepend: makedepend.SH config.sh ; /bin/sh $(srcdir)/makedepend.SH
Xmakedir: makedir.SH config.sh ; /bin/sh $(srcdir)/makedir.SH
Xmbox.saver: mbox.saver.SH config.sh ; /bin/sh $(srcdir)/mbox.saver.SH
Xnewsetup: newsetup.SH config.sh ; /bin/sh $(srcdir)/newsetup.SH
Xnewsgroups: newsgroups.SH config.sh ; /bin/sh $(srcdir)/newsgroups.SH
Xnewsnews: newsnews.SH config.sh ; /bin/sh $(srcdir)/newsnews.SH
Xnorm.saver: norm.saver.SH config.sh ; /bin/sh $(srcdir)/norm.saver.SH
X# WARNING: Put nothing here or make depend will gobble it up!
SHAR_EOF
  $shar_touch -am 1118220194 'trn-3.6/dependencies' &&
  chmod 0644 'trn-3.6/dependencies' ||
  echo 'restore of trn-3.6/dependencies failed'
  shar_count="`wc -c < 'trn-3.6/dependencies'`"
  test 15761 -eq "$shar_count" ||
    echo "trn-3.6/dependencies: original size 15761, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/strftime.c ==============
if test -f 'trn-3.6/strftime.c' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/strftime.c (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/strftime.c (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/strftime.c' &&
X/*
X * strftime: print formatted information about a given time.
X * Adapted from the routine by Eric R. Smith, Michal Jaegermann,
X * Arnold Robins, and Paul Close.
X */
X/* The authors make no claims as to the fitness or correctness of this software
X * for any use whatsoever, and it is provided as is. Any use of this software
X * is at the user's own risk. 
X */
X
X/* Configuration choices for %x and %X */
X
X#undef LOCAL_DDMMYY	/* choose DD/MM/YY instead of MM/DD/YY */
X#undef LOCAL_DOTTIME	/* choose HH.MM.SS instead of HH:MM:SS */
X
X#include "EXTERN.h"
X#include "common.h"
X
Xstatic char *mth_name[] = {
X    "January", "February", "March", "April", "May", "June",
X    "July", "August", "September", "October", "November", "December"
X};
X
Xstatic char *day_name[] = {
X    "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday",
X    "Saturday"
X};
X
X#ifdef HAS_FTIME
X# ifndef TM_ZONE
Xchar tznm[16] = "";
X# endif
X#else
Xextern char *tzname[];
X#endif
X
Xsize_t
Xstrftime(str, maxsize, fmt, ts)
Xchar *str;
Xsize_t maxsize;
XCONST char *fmt;
XCONST struct tm *ts;
X{
X    size_t num = 0, len;
X    char ch;
X    char *putstr;
X    char tmpbuf[80];
X
X    if (maxsize-- <= 0)
X	return 0;
X
X    for (;;) {
X	if (!(ch = *fmt++))
X	    break;
X	if (num == maxsize) {
X	    num = 0;
X	    break;
X	}
X	if (ch != '%') {
X	    *str++ = ch;
X	    num++;
X	    continue;
X	}
X	/* assume the finished product will be sprintf'ed into tmpbuf */
X	putstr = tmpbuf;
X
X	switch (ch = *fmt++) {
X	case 'A':
X	case 'a':
X	    if (ts->tm_wday < 0 || ts->tm_wday > 6)
X		putstr = "?";
X	    else
X		if (ch == 'A')
X		    putstr = day_name[ts->tm_wday];
X		else
X		    sprintf(tmpbuf, "%-.3s", day_name[ts->tm_wday]);
X	    break;
X	case 'B':
X	case 'b':
X	case 'h':
X	    if (ts->tm_mon < 0 || ts->tm_mon > 11)
X		putstr = "?";
X	    else if (ch == 'B')
X		putstr = mth_name[ts->tm_mon];
X	    else
X		sprintf(tmpbuf, "%-.3s", mth_name[ts->tm_mon]);
X	    break;
X	case 'C':
X	    strftime(tmpbuf, sizeof tmpbuf, "%A, %B %e, %Y", ts);
X	    break;
X	case 'c':
X	    strftime(tmpbuf, sizeof tmpbuf, "%x %X", ts);
X	    break;
X	case 'D':
X#ifndef LOCAL_DDMMYY
X	case 'x':
X#endif
X	    strftime(tmpbuf, sizeof tmpbuf, "%m/%d/%y", ts);
X	    break;
X	case 'd':
X	    sprintf(tmpbuf, "%02d", ts->tm_mday);
X	    break;
X	case 'e':	/* day of month, blank padded */
X	    sprintf(tmpbuf, "%2d", ts->tm_mday);
X	    break;
X	case 'H':
X	    sprintf(tmpbuf, "%02d", ts->tm_hour);
X	    break;
X	case 'I':
X	{
X	    int n;
X
X	    n = ts->tm_hour;
X	    if (n == 0)
X		n = 12;
X	    else if (n > 12)
X		n -= 12;
X	    sprintf(tmpbuf, "%02d", n);
X	    break;
X	}
X	case 'j':
X	    sprintf(tmpbuf, "%03d", ts->tm_yday + 1);
X	    break;
X	case 'm':
X	    sprintf(tmpbuf, "%02d", ts->tm_mon + 1);
X	    break;
X	case 'M':
X	    sprintf(tmpbuf, "%02d", ts->tm_min);
X	    break;
X	case 'p':
X	    putstr = (ts->tm_hour < 12) ? "AM" : "PM";
X	    break;
X	case 'r':
X	    strftime(tmpbuf, sizeof tmpbuf, "%I:%M:%S %p", ts);
X	    break;
X	case 'R':
X	    strftime(tmpbuf, sizeof tmpbuf, "%H:%M", ts);
X	    break;
X	case 'S':
X	    sprintf(tmpbuf, "%02d", ts->tm_sec);
X	    break;
X	case 'T':
X#ifndef LOCAL_DOTTIME
X	case 'X':
X#endif
X	    strftime(tmpbuf, sizeof tmpbuf, "%H:%M:%S", ts);
X	    break;
X	case 'U':	/* week of year - starting Sunday */
X	    sprintf(tmpbuf, "%02d", (ts->tm_yday - ts->tm_wday + 10) / 7);
X	    break;
X	case 'W':	/* week of year - starting Monday */
X	    sprintf(tmpbuf, "%02d", (ts->tm_yday - ((ts->tm_wday + 6) % 7)
X			+ 10) / 7);
X	    break;
X	case 'w':
X	    sprintf(tmpbuf, "%d", ts->tm_wday);
X	    break;
X	case 'y':
X	    sprintf(tmpbuf, "%02d", ts->tm_year % 100);
X	    break;
X#ifdef LOCAL_DOTTIME
X	case 'X':
X	    strftime(tmpbuf, sizeof tmpbuf, "%H.%M.%S", ts);
X	    break;
X#endif
X#ifdef LOCAL_DDMMYY
X	case 'x':
X	    strftime(tmpbuf, sizeof tmpbuf, "%d/%m/%y", ts);
X	    break;
X#endif
X	case 'Y':
X	    sprintf(tmpbuf, "%d", ts->tm_year + 1900);
X	    break;
X	case 'Z':
X#ifdef HAS_FTIME
X# ifdef TM_ZONE
X	    sprintf(tmpbuf, "%s", ts->tm_zone);
X# else
X	    if (*tznm == '\0') {
X		char *timezone();
X		struct timeval tv;
X		struct timezone tz;
X
X		(void) gettimeofday(&tv, &tz);
X		strcpy(tznm, timezone(tz.tz_minuteswest, ts->tm_isdst));
X	    }
X	    sprintf(tmpbuf, "%s", tznm);
X# endif
X#else
X	    sprintf(tmpbuf, "%s", tzname[ts->tm_isdst]);
X#endif
X	    break;
X	case '%':
X	case '\0':
X	    putstr = "%";
X	    break;
X	case 'n':	/* same as \n */
X	    putstr = "\n";
X	    break;
X	case 't':	/* same as \t */
X	    putstr = "\t";
X	    break;
X	default:
X	    sprintf(tmpbuf, "%%%c", ch);
X	    break;
X	}
X	len = strlen(putstr);
X	num += len;
X	if (num > maxsize) {
X	    len -= num - maxsize;
X	    num = 0;
X	    ch = '\0';
X	}
X	strncpy(str, putstr, len);
X	str += len;
X	if (!ch)
X	    break;
X    }
X    *str = '\0';
X    return num;
X}
SHAR_EOF
  $shar_touch -am 0711223693 'trn-3.6/strftime.c' &&
  chmod 0644 'trn-3.6/strftime.c' ||
  echo 'restore of trn-3.6/strftime.c failed'
  shar_count="`wc -c < 'trn-3.6/strftime.c'`"
  test 4698 -eq "$shar_count" ||
    echo "trn-3.6/strftime.c: original size 4698, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/charsubst.h ==============
if test -f 'trn-3.6/charsubst.h' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/charsubst.h (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/charsubst.h (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/charsubst.h' &&
X/* $Id: charsubst.h,v 3.0 1993/12/21 21:54:40 davison Trn $
X */
X/*
X * Permission is hereby granted to copy, reproduce, redistribute or otherwise
X * use this software as long as: there is no monetary profit gained
X * specifically from the use or reproduction of this software, it is not
X * sold, rented, traded or otherwise marketed, and this copyright notice is
X * included prominently in any copy made. 
X *
X * The authors make no claims as to the fitness or correctness of this software
X * for any use whatsoever, and it is provided as is. Any use of this software
X * is at the user's own risk. 
X */
X
X#ifdef CHARSUBST
X
X/* Conversions are: plain, ISO->ascii, TeX -> ISO, ISO->ascii monospaced */
XEXT char *charsets INIT("patm");
XEXT char *charsubst;
X
Xint putsubstchar _((int, int, bool_int));
Xchar *current_charsubst _((void));
Xvoid strcharsubst _((char*,char*));
X
X#endif
SHAR_EOF
  $shar_touch -am 1021141894 'trn-3.6/charsubst.h' &&
  chmod 0644 'trn-3.6/charsubst.h' ||
  echo 'restore of trn-3.6/charsubst.h failed'
  shar_count="`wc -c < 'trn-3.6/charsubst.h'`"
  test 872 -eq "$shar_count" ||
    echo "trn-3.6/charsubst.h: original size 872, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/nntplist.c ==============
if test -f 'trn-3.6/nntplist.c' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/nntplist.c (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/nntplist.c (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/nntplist.c' &&
X/* $Id: nntplist.c,v 3.5 1993/04/18 20:18:23 davison Trn $
X */
X/* This software is Copyright 1991 by Stan Barber. 
X *
X * Permission is hereby granted to copy, reproduce, redistribute or otherwise
X * use this software as long as: there is no monetary profit gained
X * specifically from the use or reproduction of this software, it is not
X * sold, rented, traded or otherwise marketed, and this copyright notice is
X * included prominently in any copy made. 
X *
X * The authors make no claims as to the fitness or correctness of this software
X * for any use whatsoever, and it is provided as is. Any use of this software
X * is at the user's own risk. 
X */
X
X#include "EXTERN.h"
X#include "common.h"
X#include "nntpclient.h"
X
Xvoid Usage _((void));
Xvoid finalize _((int));
Xchar nntp_handle_timeout _((bool_int));
X
Xint debug = 0;			/* make nntpclient.c happy */
X
X#ifdef USE_GENAUTH
Xchar *loginName;
X#endif
X
Xint
Xmain(argc, argv)
Xint argc;
Xchar *argv[];
X{
X    char command[32];
X    char *action = NULL;
X    char *wildarg = NULL;
X    register FILE *out_fp = NULL;
X
X    while (--argc) {
X	if (**++argv == '-') {
X	    switch (*++*argv) {
X	    case 'o':
X		if (out_fp || !--argc)
X		    Usage();
X		out_fp = fopen(*++argv, "w");
X		if (out_fp == NULL) {
X		    perror(*argv);
X		    exit(1);
X		}
X		break;
X	    case 'x':
X		if (wildarg || !--argc)
X		    Usage();
X		wildarg = *++argv;
X		break;
X	    default:
X		Usage();
X		/* NO RETURN */
X	    }
X	}
X	else if (!action)
X	    action = *argv;
X	else
X	    Usage();
X    }
X    if (!action)
X	action = "ACTIVE";
X    if (!out_fp)
X	out_fp = stdout;
X
X#ifdef USE_GENAUTH
X    /* get login name */
X    loginName = getenv("USER");
X    if (loginName == Nullch) {
X	loginName = getenv("LOGNAME");
X#ifdef GETLOGIN
X	if (loginName == Nullch)
X	    loginName = getlogin();
X#endif
X    }
X#endif
X
X    if (!nntp_connect(0))
X	exit(1);
X    sprintf(command,"LIST %s",action);
X    if (wildarg)
X	sprintf(command+strlen(command)," %s",wildarg);
X    nntp_command(command); 
X#ifdef HAS_SIGHOLD
X    sighold(SIGINT);
X#endif
X    if (nntp_check(FALSE) != NNTP_CLASS_OK) {
X	fprintf(stderr,"nntplist: Can't get %s file from server.\n",action);
X	fprintf(stderr, "Server said: %s\n", ser_line);
X	finalize(1);
X    }
X
X    while (nntp_gets(ser_line, sizeof ser_line) >= 0) {
X	if (NNTP_LIST_END(ser_line))	/* while there's another line */
X	    break;			/* get it and write it to */
X	fputs(ser_line, out_fp);
X	putc('\n', out_fp);
X    }
X
X#ifdef HAS_SIGHOLD
X    sigrelse(SIGINT);
X#endif
X    nntp_close(TRUE);
X    return 0;
X}
X
Xvoid
XUsage()
X{
X    fprintf(stderr, "Usage: nntplist [-x WildSpec] [-o OutputFile] [type]\n\
X\nWhere type is any of the LIST command arguments your server accepts.\n");
X    exit(1);
X}
X
Xvoid
Xfinalize(num)
Xint num;
X{
X    nntp_close(TRUE);
X    exit(num);
X}
X
Xchar
Xnntp_handle_timeout(strict)
Xbool_int strict;
X{
X    nntp_error("\n503 Server timed out.\n");
X    if (strict)
X	finalize(1);
X    return NNTP_CLASS_FATAL;
X}
X
Xstatic char nomem[] = "trn: out of memory!\n";
X
X/* paranoid version of malloc */
X
Xchar *
Xsafemalloc(size)
XMEM_SIZE size;
X{
X    char *ptr;
X
X    ptr = malloc(size ? size : (MEM_SIZE)1);
X    if (ptr == Nullch) {
X	fputs(nomem,stdout) FLUSH;
X	finalize(1);
X    }
X    return ptr;
X}
X
X/* paranoid version of realloc.  If where is NULL, call malloc */
X
Xchar *
Xsaferealloc(where,size)
Xchar *where;
XMEM_SIZE size;
X{
X    char *ptr;
X
X    ptr = realloc(where, size ? size : (MEM_SIZE)1);
X    if (!ptr) {
X	fputs(nomem,stdout) FLUSH;
X	finalize(1);
X    }
X    return ptr;
X}
SHAR_EOF
  $shar_touch -am 1028161994 'trn-3.6/nntplist.c' &&
  chmod 0644 'trn-3.6/nntplist.c' ||
  echo 'restore of trn-3.6/nntplist.c failed'
  shar_count="`wc -c < 'trn-3.6/nntplist.c'`"
  test 3464 -eq "$shar_count" ||
    echo "trn-3.6/nntplist.c: original size 3464, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/HINTS.TRN ==============
if test -f 'trn-3.6/HINTS.TRN' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/HINTS.TRN (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/HINTS.TRN (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/HINTS.TRN' &&
XYou can specify trn environment variables in an initialization file with all
Xthe options.  See the first hint for details on that.  Certain environment
Xvariables, like RNINIT, must be set in your shell (how else does trn know
Xto look there for the rest?).  Others, like REPLYTO may be useful in other
Xprograms, so you could consider putting that in your shell startup file too.
XBut most of them are specific, like MAILHEADER, so you might as well set them
Xin the init file with the -E option.  That's why most of them look like
X-EMAILHEADER=xx rather than MAILHEADER=xx -- to remind you.
X
XHelpful hints:
X  o You can make a file that contains all the flags and initialization that
X    trn will use at startup.  When you're done, point an environment variable
X    TRNINIT to the file.  A good choice is "TRNINIT=~/.trninit".  You can put
X    multiple lines in this init file and/or separate options by spaces.
X
X  o Two new and useful flags are the -p and -G flags.  -p means automatically
X    select any thread that you have posted a message to.  This makes it very
X    easy to track replies to your insightful comments :-) (to automatically
X    select other threads, try the 'T' command).  -G tells the 'g' command
X    to use a loose match algorithm on groups it can't find.  So if you type
X    "g news.softwre.raeders.genrl", it will assume that you meant to type
X    news.software.readers and take you there.  It is usually easier to type
X    "/reader" than using a 'g' command, but use -G too.
X
X  o The 'X' command in the selector (kinda like catchup/yes) can be made the
X    default action on the last page of selections by using the command-line
X    option:  -XX.  This lets you browse all the pages, making selections as
X    you go, and then mark everything that was not selected as read when you
X    press space at the last page.
X
X  o If you like to select a little, read a little, and then select a little
X    more, try using the command-line option:  -XDD.  This makes the 'D'
X    command the default on all pages of the selector.  Thus you can select
X    the things you want to read on the current page, press space, and you
X    will read the selected articles immediately (if there were any).  All
X    other articles on the current page will be marked as read.
X
X  o To use mush to send all R)eplies:
X	-EMAILPOSTER="mush -h %h"
X
X  o To use elm to send all R)eplies:
X	-EMAILHEADER="\\000"
X	-EMAILPOSTER="elm -i %h -s '%'s' %t"
X
X  o To tailor the time field:
X	A good example is -ELOCALTIMEFMT="%A, %B %e %Y, %r %Z" which becomes:
X	Date: Saturday, June 12 1993, 08:15:32 PM PDT.  (The default is
X	"%a %b %e %X %Z %Y", which is like the date(1) command).  See the
X	strftime(3C) man page for more details on other % characters.
X
X  o To tailor the "In article <blahblahblah>, joe@user (Joe User)" line:
X	person's name only: %)f
X	person's address only: %>f
X	For example: -EATTRIBUTION='According to %)f <%>f>:'
X
X  o A better kill file scheme than the default (which creates obtuse
X    directories all over your ~/News directory) is to use the following:
X	-EKILLGLOBAL="%p/Kill/Global"
X	-EKILLLOCAL="%p/Kill/%C"
X    Where %p is your news directory, usually ~/News, and %C is the full name
X    of the group, like sci.bio.  This means the kill file for sci.bio is in
X    ~/News/Kill/sci.bio instead of ~/News/sci/bio/KILL.  Think about this
X    next time you subscribe to alt.swedish.chef.bork.bork.bork :-)
X
X    Note that you need a file system that allows long file names to make
X    this work.
X
X  o If you're tired of endless subscription notices to newsgroups you could
X    care less about, look at the AUTOUNSUBSCRIBE variable.  There's a
X    companion AUTOSUBSCRIBE function too.  For example, to automatically
X    unsubscribe all NEW alt groups, use ^alt.*.  More dramatic, to
X    unsubscribe to everything BUT certain groups, use "*,!^local.*,!^comp.*",
X    for example.  If you're REALLY tired of them, use -q to tell trn to not
X    even check for new groups at all.
X
X  o If you want replies to your postings to go to a machine other than the
X    machine you're posting from, set the REPLYTO environment variable.  For
X    example, you might set this if you were trn's author:
X	-EREPLYTO="davison@borland.com (Wayne Davison)"
X
X  o You might like to redefine the 'u' keys in the following way:  'u' visits
X    the "Set unread?" prompt (except in the thread selector), 'U' goes
X    directly to the already-read article selector, and Ctrl-U unsubscribes
X    from the group (even while in the thread selector).  Put the following
X    3 macros in your .rnmac file to accomplish this (or change TRNMACROS to
X    .trnmac and put them there):
X
X	u	%(%m=[aefnp]?U:u)
X	U	%(%m=[aefnp]?U+:U)
X	^U	%(%m=t?+u:u)
X
X  o If you like to be able to move forward/backward by article number more
X    often than you need to search by subject, redefine ^N and ^P to be _N
X    and _P by putting these lines into your macro file:
X
X	^P	%(%m=[aep]?_P:^P)
X	^N	%(%m=[aep]?_N:^N)
X
X  o If you like the way that 'q' worked in the thread selector in trn 1.x,
X    put the following macro in your macro file:
X
X	q	%(%m=t?+:q)
X
X  o If you would like the 'f' command to always answer yes to the "Are you
X    starting an unreleated topic?" question, put this line into your macro
X    file:
X
X	f	%(%m=[ap]?fy^m:f)
X
X  o If you want to be able to save your shar headers in a file as they are
X    extracted and you have access to "unshar" (a program that can extract
X    shar files while saving the headers in UNSHAR.HDR), twiddle the external
X    extract command to send the entire article:
X
X	-EEXSAVER="%e <%A"
X
X    and then point the UNSHAR variable at unshar instead of /bin/sh:
X
X	-EUNSHAR="unshar -s"
X
X    Note that this assumes that any other commands you execute with
X    "e dir|command" can also handle the entire article as input
X    (uuencoded and shipped files are not affected).
X
X  o The following lines represent trn's default headers for posting an
X    article.  If you want to customize your header copy this to your
X    .trninit file and modify it (and _don't_ use Pnews directly to post,
X    use trn -- the ".f" command from newsgroup prompt works well for this).
X
X-ENEWSHEADER="%(%[followup-to]=^$?:%(%[followup-to]=^%n$?:X-ORIGINAL-NEWSGROUPS: %n
X))Newsgroups: %(%F=^$?%C:%F)
XSubject: %(%S=^$?%\"
X
XSubject: \":Re: %S)
XSummary: 
XExpires: 
X%(%R=^$?:References: %R
X)Sender: 
XFollowup-To: 
X%(%{REPLYTO}=^$?:Reply-To: %{REPLYTO}
X)Distribution: %(%i=^$?%\"Distribution: \":%D)
XOrganization: %o
XKeywords: %[keywords]
XCc: %(%F=poster?%t:%(%F!=@?:%F))
X
X"
X
XIf you're curious, trn's author has the following .trninit file:
X----------------------------------------------------------------------
X-XX -B -N -f -x11ms "-F> " -pp -G -u +e -mu
X-hunrecognized
X-ELOCALTIMEFMT="%A, %B %e %Y, %r %Z"
X-ESELECTCHARS="abdefgijlmorstuvwxyz1234567890BCFGHIKVW"
X-EKILLLOCAL="%p/Kill/%C"
X-EKILLGLOBAL="%p/Kill/Global"
X-EMAILPOSTER="elm -i %h -s '%'s' %t"
X-EFORWARDPOSTER="elm -i %h -s '%'[subject]' %q"
X-EATTRIBUTION="According to %)f <%>f>:"
X----------------------------------------------------------------------
X
Xand the following .trnmac file:
X----------------------------------------------------------------------
Xu	%(%m=[aenp]?U:u)
XU	%(%m=[aenp]?U+:U)
X^U	%(%m=t?+u:u)
Xo	%(%m=[nf]?O:o)
XO	%(%m=[nf]?o:O)
X~T	s ~/Mail/trn
X~M	| /bin/mail davison
X^[^[	^[
X----------------------------------------------------------------------
SHAR_EOF
  $shar_touch -am 1007195794 'trn-3.6/HINTS.TRN' &&
  chmod 0644 'trn-3.6/HINTS.TRN' ||
  echo 'restore of trn-3.6/HINTS.TRN failed'
  shar_count="`wc -c < 'trn-3.6/HINTS.TRN'`"
  test 7377 -eq "$shar_count" ||
    echo "trn-3.6/HINTS.TRN: original size 7377, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/trn-artchk.c ==============
if test -f 'trn-3.6/trn-artchk.c' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/trn-artchk.c (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/trn-artchk.c (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/trn-artchk.c' &&
X/* $Id: trn-artchk.c,v 3.5 1993/04/18 03:09:32 davison Trn $
X*/
X/* The authors make no claims as to the fitness or correctness of this software
X * for any use whatsoever, and it is provided as is. Any use of this software
X * is at the user's own risk. 
X */
X
X/* A program to check an article's validity and print warnings if problems
X** are found.
X**
X** Usage: trn-artchk <article> <maxLineLen> <newsgroupsFile> <activeFile>
X*/
X
X#include "EXTERN.h"
X#include "common.h"
X#ifdef USE_NNTP
X#include "nntpclient.h"
X#endif
X
X#define MAXNGS 100
X
Xchar *safemalloc _((MEM_SIZE));
X
X#ifdef USE_NNTP
Xint server_connection _((void));
Xvoid finalize _((int));
Xchar nntp_handle_timeout _((bool_int));
X
Xint debug = 0;
X
X#ifdef USE_GENAUTH
Xchar *loginName;
X#endif
X
X#endif /* USE_NNTP */
X
Xint
Xmain(argc, argv)
Xint argc;
Xchar *argv[];
X{
X    FILE *fp, *fp_active = NULL, *fp_ng = NULL;
X    bool check_active = FALSE, check_ng = FALSE;
X    char buff[LBUFLEN], *cp, *cp2;
X    char *ngptrs[MAXNGS];
X    int nglens[MAXNGS];
X    int foundactive[MAXNGS];
X    int i, col, max_col_len, line_num = 0, ngcnt = 0, ngleft;
X    int found_newsgroups = 0;
X
X    if (argc != 5 || !(max_col_len = atoi(argv[2]))) {
X	fprintf(stderr, "\
XUsage: trn-artchk <article> <maxLineLen> <newsgroupsFile> <activeFile>\n");
X	exit(1);
X    }
X
X    if ((fp = fopen(argv[1], "r")) == NULL) {
X	fprintf(stderr, "trn-artchk: unable to open article `%s'.\n", argv[1]);
X	exit(1);
X    }
X
X    /* Check the header for proper format and report on the newsgroups */
X    while (fgets(buff, LBUFLEN, fp)) {
X	line_num++;
X	buff[strlen(buff)-1] = '\0';
X	if (!*buff)
X	    break;
X	if (*buff == ' ' || *buff == '\t')
X	    continue;
X	if (!(cp = index(buff, ':'))) {
X	    printf("\nERROR: line %d is an invalid header line:\n%s\n",
X		   line_num, buff);
X	    break;
X	}
X	if (cp[1] != ' ' && cp[1] != '\0') {
X	    printf("\n\
XERROR: header on line %d does not have a space after the colon:\n%s\n",
X		   line_num, buff);
X	}
X	if (cp - buff == 10 && strnEQ(buff, "Newsgroups", 10)) {
X	    found_newsgroups = 1;
X	    for (cp = buff + 11; *cp == ' '; cp++)
X		;
X	    if (index(cp, ' ')) {
X		printf("\n\
XERROR: the \"Newsgroups:\" line has spaces in it that MUST be removed. The\n\
Xonly allowable space is the one separating the colon (:) from the contents.\n\
XUse a comma (,) to separate multiple newsgroup names.\n");
X		continue;
X	    }
X	    while (*cp) {
X		if (!(cp2 = index(cp, ',')))
X		    cp2 = cp + strlen(cp);
X		else
X		    *cp2++ = '\0';
X		if (ngcnt < MAXNGS) {
X		    nglens[ngcnt] = strlen(cp);
X		    foundactive[ngcnt] = 0;
X		    ngptrs[ngcnt] = safemalloc(nglens[ngcnt]+1);
X		    strcpy(ngptrs[ngcnt], cp);
X		    ngcnt++;
X		}
X		cp = cp2;
X	    }
X	    if (!ngcnt) {
X		printf("\n\
XERROR: the \"Newsgroups:\" line lists no newsgroups.\n");
X		continue;
X	    }
X	}
X    }
X    if (!found_newsgroups) {
X	printf("\nERROR: the \"Newsgroups:\" line is missing from the header.\n");
X    }
X
X    /* Check the body of the article for long lines */
X    while (fgets(buff, LBUFLEN, fp)) {
X	line_num++;
X	col = strlen(buff)-1;
X	if (buff[col] != '\n')
X	    printf("\n\
XWarning: line %d has no trailing newline character and may get lost.\n",
X		   line_num);
X	else
X	    buff[col] = '\0';
X	col = 0;
X	for (cp = buff; *cp; cp++) {
X	    if (*cp == '\t')
X		col += 8 - (col%8);
X	    else
X		col++;
X	}
X	if (col > max_col_len) {
X	    printf("\n\
XWarning: posting exceeds %d columns.  Line %d is the first long one:\n%s\n",
X		   max_col_len, line_num, buff);
X	    break;
X	}
X    }
X    if (ngcnt) {
X	struct stat st;
X	if (stat(argv[3], &st) != -1)
X	    check_ng = st.st_size > 0 && (fp_ng = fopen(argv[3], "r")) != NULL;
X#ifdef USE_NNTP
X	else if (server_connection())
X	    check_ng = TRUE;
X#endif
X	if (stat(argv[4], &st) != -1)
X	    check_active = st.st_size > 0 && (fp_active = fopen(argv[4], "r")) != NULL;
X#ifdef USE_NNTP
X	else if (server_connection())
X	    check_active = TRUE;
X#endif
X    }
X    if (ngcnt && (check_ng || check_active)) {
X	/* Print a note about each newsgroup */
X	printf("\nYour article's newsgroup%s:\n", ngcnt == 1? "" : "s");
X	if (!check_active) {
X	    for (i = 0; i < ngcnt; i++) {
X		foundactive[i] = 1;
X	    }
X	}
X	else if (fp_active != NULL) {
X	    ngleft = ngcnt;
X	    while (fgets(buff, LBUFLEN, fp_active)) {
X		if (!ngleft)
X		    break;
X		for (i = 0; i < ngcnt; i++) {
X		    if (!foundactive[i]) {
X			if ((buff[nglens[i]] == '\t' || buff[nglens[i]] == ' ')
X			  && strnEQ(ngptrs[i], buff, nglens[i])) {
X			    foundactive[i] = 1;
X			    ngleft--;
X			}
X		    }
X		}
X	    }
X	    fclose(fp_active);
X	}
X#ifdef USE_NNTP
X	else {
X	    int listactive_works = 1;
X	    for (i = 0; i < ngcnt; i++) {
X		if (listactive_works) {
X		    sprintf(ser_line, "list active %s", ngptrs[i]);
X		    nntp_command(ser_line);
X		    if (nntp_check(FALSE) == NNTP_CLASS_OK) {
X			while (nntp_gets(ser_line, sizeof ser_line) >= 0) {
X			    if (NNTP_LIST_END(ser_line))
X				break;
X			    foundactive[i] = 1;
X			}
X		    }
X		    else if (*ser_line == NNTP_CLASS_FATAL) {
X			listactive_works = FALSE;
X			i--;
X		    }
X		}
X		else {
X		    sprintf(ser_line, "GROUP %s", ngptrs[i]);
X		    nntp_command(ser_line);
X		    if (nntp_check(FALSE) == NNTP_CLASS_OK)
X			foundactive[i] = 1;
X		}
X	    }
X	}
X	if (check_ng && fp_ng == NULL) {
X	    fp_ng = fopen(argv[3], "w+");
X	    unlink(argv[3]);
X	    if (fp_ng != NULL) {
X		for (i = 0; i < ngcnt; i++) {
X		    /* issue a description list command */
X		    sprintf(ser_line, "XGTITLE %s", ngptrs[i]);
X		    nntp_command(ser_line);
X		    /*$$ use list newsgroups if this fails...? */
X		    if (nntp_check(FALSE) == NNTP_CLASS_OK) {
X			/* write results to fp_ng */
X			while (nntp_gets(ser_line, sizeof ser_line) >= 0) {
X			    if (NNTP_LIST_END(ser_line))
X				break;
X			    fprintf(fp_ng, "%s\n", ser_line);
X			}
X		    }
X		}
X		fseek(fp_ng, 0L, 0);
X	    }
X	}
X#endif
X	if (fp_ng != NULL) {
X	    ngleft = ngcnt;
X	    while (fgets(buff, LBUFLEN, fp_ng)) {
X		if (!ngleft)
X		    break;
X		for (i = 0; i < ngcnt; i++) {
X		    if (foundactive[i] && ngptrs[i]) {
X			if ((buff[nglens[i]] == '\t' || buff[nglens[i]] == ' ')
X			  && strnEQ(ngptrs[i], buff, nglens[i])) {
X			    cp = &buff[nglens[i]];
X			    *cp++ = '\0';
X			    while (*cp == ' ' || *cp == '\t')
X				cp++;
X			    if (cp[0] == '?' && cp[1] == '?')
X				cp = "[no description available]\n";
X			    printf("%-23s %s", buff, cp);
X			    free(ngptrs[i]);
X			    ngptrs[i] = 0;
X			    ngleft--;
X			}
X		    }
X		}
X	    }
X	    fclose(fp_ng);
X	}
X	for (i = 0; i < ngcnt; i++) {
X	    if (!foundactive[i]) {
X		printf("%-23s ** invalid news group -- check spelling **\n",
X		   ngptrs[i]);
X		free(ngptrs[i]);
X	    }
X	    else if (ngptrs[i]) {
X		printf("%-23s [no description available]\n", ngptrs[i]);
X		free(ngptrs[i]);
X	    }
X	}
X    }
X    return 0;
X}
X
X#ifdef USE_NNTP
Xint
Xserver_connection()
X{
X    static int server_stat = 0;
X    if (!server_stat) {
X	if (nntp_connect(0))
X	    server_stat = 1;
X	else
X	    server_stat = -1;
X    }
X    return server_stat == 1;
X}
X
Xchar
Xnntp_handle_timeout(strict)
Xbool_int strict;
X{
X    nntp_error("\n503 Server timed out.\n");
X    if (strict)
X	finalize(1);
X    return NNTP_CLASS_FATAL;
X}
X#endif
X
Xvoid
Xfinalize(num)
Xint num;
X{
X#ifdef USE_NNTP
X    nntp_close(TRUE);
X#endif
X    exit(num);
X}
X
Xstatic char nomem[] = "trn: out of memory!\n";
X
X/* paranoid version of malloc */
X
Xchar *
Xsafemalloc(size)
XMEM_SIZE size;
X{
X    char *ptr;
X
X    ptr = malloc(size ? size : (MEM_SIZE)1);
X    if (ptr == Nullch) {
X	fputs(nomem,stdout) FLUSH;
X	finalize(1);
X    }
X    return ptr;
X}
X
X/* paranoid version of realloc.  If where is NULL, call malloc */
X
Xchar *
Xsaferealloc(where,size)
Xchar *where;
XMEM_SIZE size;
X{
X    char *ptr;
X
X    ptr = realloc(where, size ? size : (MEM_SIZE)1);
X    if (!ptr) {
X	fputs(nomem,stdout) FLUSH;
X	finalize(1);
X    }
X    return ptr;
X}
SHAR_EOF
  $shar_touch -am 1028162094 'trn-3.6/trn-artchk.c' &&
  chmod 0644 'trn-3.6/trn-artchk.c' ||
  echo 'restore of trn-3.6/trn-artchk.c failed'
  shar_count="`wc -c < 'trn-3.6/trn-artchk.c'`"
  test 7723 -eq "$shar_count" ||
    echo "trn-3.6/trn-artchk.c: original size 7723, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/util2.c ==============
if test -f 'trn-3.6/util2.c' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/util2.c (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/util2.c (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/util2.c' &&
X/* $Id: util2.c,v 3.6 1994/10/28 11:11:11 davison Trn $
X */
X/* This software is Copyright 1991 by Stan Barber. 
X *
X * Permission is hereby granted to copy, reproduce, redistribute or otherwise
X * use this software as long as: there is no monetary profit gained
X * specifically from the use or reproduction of this software, it is not
X * sold, rented, traded or otherwise marketed, and this copyright notice is
X * included prominently in any copy made. 
X *
X * The authors make no claims as to the fitness or correctness of this software
X * for any use whatsoever, and it is provided as is. Any use of this software
X * is at the user's own risk. 
X */
X
X#include "EXTERN.h"
X#include "common.h"
X#include "nntp.h"
X#include "nntpauth.h"
X#include "util.h"
X#include "INTERN.h"
X#include "util2.h"
X
X/* return ptr to little string in big string, NULL if not found */
X
Xchar *
Xinstr(big, little, case_matters)
Xchar *big, *little;
Xbool_int case_matters;
X{
X    register char *t, *s, *x;
X
X    for (t = big; *t; t++) {
X	for (x=t,s=little; *s; x++,s++) {
X	    if (!*x)
X		return Nullch;
X	    if (case_matters == TRUE) {
X		if(*s != *x)
X		    break;
X	    } else {
X		register char c,d;
X		if (isupper(*s)) 
X		    c = tolower(*s);
X		else
X		    c = *s;
X		if (isupper(*x)) 
X		    d = tolower(*x);
X		else
X		    d = *x;
X		if ( c != d )
X		    break;
X	   }
X	}
X	if (!*s)
X	    return t;
X    }
X    return Nullch;
X}
X
X#ifdef SETENV
Xstatic bool firstexport = TRUE;
Xextern char **environ;
X
Xvoid
Xexport(nam,val)
Xchar *nam, *val;
X{
X    register int i=envix(nam);		/* where does it go? */
X
X    if (!environ[i]) {			/* does not exist yet */
X	if (firstexport) {		/* need we copy environment? */
X	    int j;
X#ifndef lint
X	    char **tmpenv = (char**)	/* point our wand at memory */
X		safemalloc((MEM_SIZE) (i+2) * sizeof(char*));
X#else
X	    char **tmpenv = Null(char **);
X#endif /* lint */
X    
X	    firstexport = FALSE;
X	    for (j=0; j<i; j++)		/* copy environment */
X		tmpenv[j] = environ[j];
X	    environ = tmpenv;		/* tell exec where it is now */
X	}
X#ifndef lint
X	else
X	    environ = (char**) saferealloc((char*) environ,
X		(MEM_SIZE) (i+2) * sizeof(char*));
X					/* just expand it a bit */
X#endif /* lint */
X	environ[i+1] = Nullch;	/* make sure it's null terminated */
X    }
X    environ[i] = safemalloc((MEM_SIZE) strlen(nam) + strlen(val) + 2);
X					/* this may or may not be in */
X					/* the old environ structure */
X    sprintf(environ[i],"%s=%s",nam,val);/* all that work just for this */
X}
X
Xint
Xenvix(nam)
Xchar *nam;
X{
X    register int i, len = strlen(nam);
X
X    for (i = 0; environ[i]; i++) {
X	if (strnEQ(environ[i],nam,len) && environ[i][len] == '=')
X	    break;			/* strnEQ must come first to avoid */
X    }					/* potential SEGV's */
X    return i;
X}
X#endif
SHAR_EOF
  $shar_touch -am 1028162094 'trn-3.6/util2.c' &&
  chmod 0644 'trn-3.6/util2.c' ||
  echo 'restore of trn-3.6/util2.c failed'
  shar_count="`wc -c < 'trn-3.6/util2.c'`"
  test 2729 -eq "$shar_count" ||
    echo "trn-3.6/util2.c: original size 2729, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/support/trnkill ==============
if test ! -d 'trn-3.6/support'; then
  echo 'x - creating directory trn-3.6/support'
  mkdir 'trn-3.6/support'
fi
if test -f 'trn-3.6/support/trnkill' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/support/trnkill (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/support/trnkill (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/support/trnkill' &&
X#!/bin/sh
X# trnkill - shell script to apply trn KILL files in the background
X# 14 Mar 89  created for rn by Jim Olsen <olsen@XN.LL.MIT.EDU>
X# 10 Sep 93  modified for trn 3 (or 2) by Wayne Davison <davison@borland.com>
X# Options: -d	debug mode -- you see all gory action as it happens.
X
X# Visit all newsgroups (if trn asks about anything else, just say no)
Xexport TRNINIT TRNMACRO RNMACRO TERM
XTRNINIT='-q -s -T -t -x +X'
XTRNMACRO=/tmp/trnkill$$
XTERM=dumb
X# support for trn 2.x
XRNMACRO=$TRNMACRO
Xtrap 'rm -f $TRNMACRO; exit' 1 2 3 15
Xcat >$TRNMACRO <<'EOF'
Xz  %(%m=[nf]?.q^J:n)^(z^)
X^m ^(z^)
X^j ^(z^)
XEOF
Xif test X$1 = X-d; then
X	echo "z" | trn
Xelse
X	echo "z" | trn >/dev/null 2>&1
Xfi
Xrm -f $TRNMACRO
Xexit 0
SHAR_EOF
  $shar_touch -am 1118220194 'trn-3.6/support/trnkill' &&
  chmod 0644 'trn-3.6/support/trnkill' ||
  echo 'restore of trn-3.6/support/trnkill failed'
  shar_count="`wc -c < 'trn-3.6/support/trnkill'`"
  test 707 -eq "$shar_count" ||
    echo "trn-3.6/support/trnkill: original size 707, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/nntpauth.c ==============
if test -f 'trn-3.6/nntpauth.c' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/nntpauth.c (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/nntpauth.c (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/nntpauth.c' &&
X/* $Id: nntpauth.c,v 3.6 1994/10/28 11:11:11 davison Trn $
X*/
X/* The authors make no claims as to the fitness or correctness of this software
X * for any use whatsoever, and it is provided as is. Any use of this software
X * is at the user's own risk. 
X */
X
X#include "EXTERN.h"
X#include "common.h"
X#include "nntp.h"
X#include "util2.h"
X#include "INTERN.h"
X#include "nntpauth.h"
X
X#ifdef USE_NNTP
X
Xchar
Xnntp_handle_auth_err(strict)
Xbool_int strict;
X{
X#ifdef USE_GENAUTH
X    extern char *loginName;
X    char last_command_save[NNTP_STRLEN];
X    char *s, *cmd = "XAUTHINFO GENERIC" + (CompliantServer? 0 : 1);
X    char ch;
X
X    /* save previous command */
X    strcpy(last_command_save, last_command);
X
X    if (s = getenv("NNTPAUTH"))
X	sprintf(ser_line, "%s %s", cmd, s);
X    else
X	sprintf(ser_line, "%s any %s", cmd, loginName);
X
X    /* issue authentication request */
X    nntp_command(ser_line);
X
X    ch = (s? nntp_auth(s) : nntp_check(strict));
X
X    if (ch == NNTP_CLASS_FATAL) {
X	char tmpbuf[LBUFLEN];
X	sprintf(tmpbuf,"\n%s\n",ser_line);
X	nntp_error(tmpbuf);
X	finalize(1);
X    }
X
X    nntp_command(last_command_save);
X    return nntp_check(strict);
X#else /* !USE_GENAUTH */
X    if (strict) {
X	char tmpbuf[LBUFLEN];
X	sprintf(tmpbuf,"\n%s\n",ser_line);
X	nntp_error(tmpbuf);
X	finalize(1);
X    }
X    return *ser_line;
X#endif /* !USE_GENAUTH */
X}
X
X#ifdef USE_GENAUTH
X
Xchar
Xnntp_auth(authc)
Xchar *authc;
X{
X    char *s;
X
X    if (cookiefd == -1 && (s = getenv("NNTP_AUTH_FDS")) != Nullch) {
X	sscanf(s, "%*d.%*d.%d", &cookiefd);
X    }
X
X    if (cookiefd == -1) {
X	FILE *f = tmpfile();
X	if (f)
X	    cookiefd = fileno(f);
X    }
X
X    sprintf(ser_line,"%d.%d.%d",fileno(ser_rd_fp),fileno(ser_wr_fp),cookiefd);
X    export("NNTP_AUTH_FDS", ser_line);
X
X    if (system(authc))
X	strcpy(ser_line, "502 Authentication failed");
X    else
X	strcpy(ser_line, "281 Ok");
X    return *ser_line;
X}
X#endif /* USE_GENAUTH */
X
X#endif /* USE_NNTP */
SHAR_EOF
  $shar_touch -am 1118220194 'trn-3.6/nntpauth.c' &&
  chmod 0644 'trn-3.6/nntpauth.c' ||
  echo 'restore of trn-3.6/nntpauth.c failed'
  shar_count="`wc -c < 'trn-3.6/nntpauth.c'`"
  test 1911 -eq "$shar_count" ||
    echo "trn-3.6/nntpauth.c: original size 1911, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/nntpauth.h ==============
if test -f 'trn-3.6/nntpauth.h' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/nntpauth.h (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/nntpauth.h (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/nntpauth.h' &&
X/* $Id: nntpclient.h,v 3.0 1992/12/14 00:14:55 davison Trn $
X*/ 
X/* The authors make no claims as to the fitness or correctness of this software
X * for any use whatsoever, and it is provided as is. Any use of this software
X * is at the user's own risk. 
X */
X
X#if defined(USE_NNTP) && defined(USE_GENAUTH)
X
Xchar	nntp_auth _((char*));
X
XEXT int cookiefd INIT(-1);
X
X#endif
SHAR_EOF
  $shar_touch -am 1028161994 'trn-3.6/nntpauth.h' &&
  chmod 0644 'trn-3.6/nntpauth.h' ||
  echo 'restore of trn-3.6/nntpauth.h failed'
  shar_count="`wc -c < 'trn-3.6/nntpauth.h'`"
  test 369 -eq "$shar_count" ||
    echo "trn-3.6/nntpauth.h: original size 369, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/util2.h ==============
if test -f 'trn-3.6/util2.h' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/util2.h (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/util2.h (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/util2.h' &&
X/* $Id: util2.h,v 3.6 1994/10/28 11:11:11 davison Trn $
X */
X/* This software is Copyright 1991 by Stan Barber. 
X *
X * Permission is hereby granted to copy, reproduce, redistribute or otherwise
X * use this software as long as: there is no monetary profit gained
X * specifically from the use or reproduction of this software, it is not
X * sold, rented, traded or otherwise marketed, and this copyright notice is
X * included prominently in any copy made. 
X *
X * The authors make no claims as to the fitness or correctness of this software
X * for any use whatsoever, and it is provided as is. Any use of this software
X * is at the user's own risk. 
X */
X
Xchar	*instr _((char*,char*,bool_int));
Xvoid	export _((char*,char*));
Xint	envix _((char*));
SHAR_EOF
  $shar_touch -am 1028162094 'trn-3.6/util2.h' &&
  chmod 0644 'trn-3.6/util2.h' ||
  echo 'restore of trn-3.6/util2.h failed'
  shar_count="`wc -c < 'trn-3.6/util2.h'`"
  test 741 -eq "$shar_count" ||
    echo "trn-3.6/util2.h: original size 741, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= trn-3.6/samples/subscriptions ==============
if test ! -d 'trn-3.6/samples'; then
  echo 'x - creating directory trn-3.6/samples'
  mkdir 'trn-3.6/samples'
fi
if test -f 'trn-3.6/samples/subscriptions' && test X"$1" != X"-c"; then
  echo 'x - skipping trn-3.6/samples/subscriptions (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting trn-3.6/samples/subscriptions (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'trn-3.6/samples/subscriptions' &&
Xgeneral
Xnews.announce.important
Xnews.announce.newusers
Xnews.software.readers
SHAR_EOF
  $shar_touch -am 1017161694 'trn-3.6/samples/subscriptions' &&
  chmod 0644 'trn-3.6/samples/subscriptions' ||
  echo 'restore of trn-3.6/samples/subscriptions failed'
  shar_count="`wc -c < 'trn-3.6/samples/subscriptions'`"
  test 77 -eq "$shar_count" ||
    echo "trn-3.6/samples/subscriptions: original size 77, current size $shar_count"
  rm -f _sharnew.tmp
fi
rm -f _sharseq.tmp
echo 'You have unpacked the last part'
exit 0


