Subject: v18i006: Fido/Usenet gateway, Part05/05 Newsgroups: comp.sources.unix Sender: sources Approved: rsalz@uunet.UU.NET Submitted-by: Heikki Suonsivu Posting-number: Volume 18, Issue 6 Archive-name: fnet/part05 #!/bin/sh # this is part 5 of a multipart archive # do not concatenate these parts, unpack them in order with /bin/sh # file crc.c continued # CurArch=5 if test ! -r s2_seq_.tmp then echo "Please unpack part 1 first!" exit 1; fi ( read Scheck if test "$Scheck" != $CurArch then echo "Please unpack part $Scheck next!" exit 1; else exit 0; fi ) < s2_seq_.tmp || exit 1 echo "x - Continuing file crc.c" sed 's/^X//' << 'SHAR_EOF' >> crc.c X0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, X0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, X0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, X0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, X0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, X0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, X0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, X0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, X0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, X0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, X0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d X}; X#endif X X#ifdef NFGM Xlong XUPDC32(b, c) Xlong c; X{ X return (cr3tab[((int)c ^ b) & 0xff] ^ ((c >> 8) & 0x00FFFFFF)); X} X X#else X X#define UPDC32(b, c) (cr3tab[((int)c ^ b) & 0xff] ^ ((c >> 8) & 0x00FFFFFF)) X#endif X X SHAR_EOF echo "File crc.c is complete" chmod 0644 crc.c || echo "restore of crc.c fails" echo "x - extracting lintlib.c (Text)" sed 's/^X//' << 'SHAR_EOF' > lintlib.c && X/* This is for functions not defined anywhere */ X X#include X#include X#include "hsu.h" X#include "config.h" X X#ifdef lint X/*ARGSUSED*/ Xlockf(fd, mode, position) int fd, mode; long position; { return 0; } X/*ARGSUSED*/ Xchar *strnchr(p, c, maxlen) unsigned char *p; int c, maxlen; X{ return (char *) p; } X/*ARGSUSED*/ Xchar *strsave(s) char *s; { return s; } X/*ARGSUSED*/ X/*VARARGS1*/ Xchar *regex(re) char *re; {} X/*ARGSUSED*/ Xtime_t getdate(p, now) char *p; struct timeb *now; { return 0L; } X#endif X X SHAR_EOF chmod 0644 lintlib.c || echo "restore of lintlib.c fails" echo "x - extracting sprintfs.c (Text)" sed 's/^X//' << 'SHAR_EOF' > sprintfs.c && X#include X#include X#include "hsu.h" X X#define MAX_CONVERT_BUFFERS 10 X#define MAX_CONVERT_BUFLEN 80 Xstatic char bufs[MAX_CONVERT_BUFFERS][MAX_CONVERT_BUFLEN], *tcharp; Xstatic bflag; X X#define SHUFFLEBUFFERS \ Xloop_increment(bflag, MAX_CONVERT_BUFFERS); tcharp = bufs[bflag] X X/* Strcat creating its own buffer */ X Xchar *sstrcat(d, s) X char *d, *s; X{ X SHUFFLEBUFFERS; X X (void) strncpy(tcharp, d, MAX_CONVERT_BUFLEN); X tcharp[MAX_CONVERT_BUFLEN - 1] = '\0'; X (void) strncat(tcharp, s, MAX_CONVERT_BUFLEN); X return tcharp; X} X X/* Sprintf with own buffer */ X X/*VARARGS1*/ Xchar *sprintfs(fmt, va_alist) X char *fmt; X va_dcl X{ X va_list pvar; X X va_start(pvar); X X SHUFFLEBUFFERS; X X vsprintf(tcharp, fmt, pvar); X X va_end(pvar); X X return tcharp; X} X SHAR_EOF chmod 0644 sprintfs.c || echo "restore of sprintfs.c fails" echo "x - extracting strempty.c (Text)" sed 's/^X//' << 'SHAR_EOF' > strempty.c && X#include X#include X#include "hsu.h" X X/* Check if string just consists of space (or is null). Return TRUE if so */ X Xstrempty(s) X char *s; X{ X while (*s) if (!isspace(*s)) return FALSE; else s++; X return TRUE; X} X X/* Clean up space from start and end */ X Xchar *strclean(s) X char *s; X{ X char *d = s, *p = s; X X /* Find first non-space char */ X for (; *p; p++) if (!isspace(*p)) break; X X /* Copy until end */ X if (d != p) while (*d++ = *p++); X X /* Strip space from end */ X while (strlen(s) && isspace(s[strlen(s) - 1])) s[strlen(s) - 1] = 0; X X return s; X} X X/* Clean up whitespace from start */ Xchar *strsclean(s) X char *s; X{ X char *d = s, *p = s; X X /* Find first non-space char */ X for (; *p; p++) if (!isspace(*p)) break; X X /* Copy until end */ X if (d != p) while (*d++ = *p++); X X return s; X} X SHAR_EOF chmod 0644 strempty.c || echo "restore of strempty.c fails" echo "x - extracting listscan.c (Text)" sed 's/^X//' << 'SHAR_EOF' > listscan.c && X#include X#include X#include "hsu.h" X X/* Searches char * table for string */ X Xint listscan(list,search) Xchar **list; Xchar *search; X{ X register int i; X static char *p1, *p2; X X i = 0; X p1 = *list++; X while (*p1 != '\0') { X p2 = search; X while (*p1 == *p2) { X if (*p1++ == '\0') X return(i); X p2++; X } X if (*p2 == ' ') return i; X i++; X p1 = *list++; X } X return -1; X} X SHAR_EOF chmod 0664 listscan.c || echo "restore of listscan.c fails" echo "x - extracting ftime.c (Text)" sed 's/^X//' << 'SHAR_EOF' > ftime.c && X#ifdef SCCSID Xstatic char *SccsId = "@(#)ftime.c 2.5 4/26/85"; X#endif /* SCSCID */ X X#include X#include "hsu.h" X Xstruct timeb X{ X time_t time; X unsigned short millitm; X short timezone; X short dstflag; X}; X Xextern long timezone; Xextern int daylight; X Xftime(tp) Xstruct timeb *tp; X{ X long t; X X (void) time(&t); X tp->time = t; X tp->millitm = 0; X tp->timezone = timezone/60; X tp->dstflag = daylight; X} SHAR_EOF chmod 0644 ftime.c || echo "restore of ftime.c fails" echo "x - extracting fnet.h (Text)" sed 's/^X//' << 'SHAR_EOF' > fnet.h && X/* @(#)%M% %I% Teemu Torma %H% X X General definitions for fidonet software X X @(#)Copyright (c) 1987 by Teemu Torma X X Permission is given to distribute this program and alter this code as X needed to adapt it to forign systems provided that this header is X included and that the original author's name is preserved. */ X X#define PROGRAMNAME "rfmail 0.3.3" X X/* General defines to make program more readable and easier to write... */ X X#define True (1) X#define False (0) X#define bool int X#ifdef lint Xextern char *strsave(); X#else X#define strsave(s) (strcpy(malloc((unsigned) (strlen(s) + 1)), (s))) X#endif X#define BUFLEN 256 X#define OK (0) X#define ERROR (-1) X X/* Global variables. */ X Xextern bool verbose; Xextern int line; Xextern int receiving_data; X X/* Function declarations. */ X Xextern int fine_convert(); Xextern char *ascnode(); Xextern char *internode(); Xextern char *ascnodei(); Xextern char *ascii_convert(); Xextern int stricmp(); Xextern int strnicmp(); Xextern char *sprintfs(); Xextern time_t getdate(); Xextern char *alloca(); Xextern void flush(); Xextern void sendline(); Xextern char *getcl(); Xextern void section(); Xextern void log(); Xextern void debug(); Xextern int lock(); Xextern int unlock(); Xextern char *spoolfile(); Xextern int quit(); Xextern char *basename(); Xextern FILE *pfopen(); Xextern char *date(); Xextern long job_number(); Xextern char *parse_address(); Xextern long sequencer(); Xextern char *mheader(); SHAR_EOF chmod 0644 fnet.h || echo "restore of fnet.h fails" echo "x - extracting config.h (Text)" sed 's/^X//' << 'SHAR_EOF' > config.h && X/* @(#)%M% %I% Teemu Torma %H% X X Configure file for FidoNet mailing system. X X @(#)Copyright (c) 1987 by Teemu Torma X X Permission is given to distribute this program and alter this code as X needed to adapt it to forign systems provided that this header is X included and that the original author's name is preserved. */ X X/* Change these defines for your system. */ X X#ifndef INIT_VERBOSE X#ifdef DEBUG X#define INIT_VERBOSE 20 X#else X#define INIT_VERBOSE 0 X#endif X#endif X X/* Machine information */ X#define USG X X#ifdef USG Xstruct timeb X{ X time_t time; X unsigned short millitm; X short timezone; X short dstflag; X}; X#else X#include X#endif X#include X X/* This is our net and node number */ X#define MY_ZONE 2 X#define MY_REGION 22 X#define MY_NET 504 X#define MY_NODE 7 X#define MY_POINT 0 X X/* Define your echo feed here. Currently only one echo feed X is supported but I work on it... */ X X#define ECHOFEED_NET 504 X#define ECHOFEED_NODE 26 X X/* How many seconds wait before starting up fidonet handshake */ X X#define PREWAIT 5 X X/* How many seconds to wait for line to clear */ X X#define WAITCLEAR 2 X X/* How many tries to give for xmodem startup in send. This should be low X value, it just gives possibility to retry xmodem startup if modems X handshaked too fast (really a acu configuration problems, dial should X return after it has a working line available!) */ X X#define MAX_SEND_RETRIES 1 X X/* Maximum baud rate to use when calling out */ X X#define MAXBAUD 1200 X X/* Define minimum baud rate to use when calling out */ X X#define MINBAUD 300 X X/* Width of formatted messages. Lines will be wrapped to be less X than this. If word is longer than 2/3s of MAX_LINELEN, it will be X cut instead of correct wrapping. */ X X#define MAX_LINELEN 78 X X/* Path to be added messages received. This is mostly to prevent X news messages to be resent back. Not really a nice way of doing X this but I feel sleepy now. */ X#define RECEIVE_PATH "emma" X X/* My domain suffix. If you don't have one, it will just be .UUCP */ X#define DOMAIN ".UUCP" X X/* Spool directory for packets and sended mail */ X#define SPOOL "/usr/spool/fnet" X X/* Spool directory for saving unpacked packets (should be cleared X from time to time. X NOTE! This directory must be on same file system as SPOOL. */ X#define UNPACKED_DIR "/usr/spool/fnet/unpacked" X X/* Spool directory for saving sent packets (should be cleared X from time to time. X NOTE! This directory must be on same file system as SPOOL. */ X#define SENTBUNDLE_DIR "/usr/spool/fnet/sentbundles" X X/* Library to hold all configure files and special programs */ X#define LIBDIR "/u2/lib/fnet" X X/* Program cabable of receiving a news-article (usually rnews) */ X#define RNEWS "/usr/bin/rnews" X X/* Name of log file */ X#define LOGFILE "/u2/lib/fnet/log" X X/* Name of orphans file (to put private echo messages to */ X#define ORPHANS "/u2/lib/fnet/orphans" X X/* Directory for bad messages, rmail or rnews returned nonzero exit */ X#define BADARTICLES "/usr/spool/fnet/bad" X X/* Name of Message-id sequence file */ X#define IDSEQUENCE "/u2/lib/fnet/idseq" X X/* Name of Input packet name sequence file */ X#define IPACKETSEQUENCE "/u2/lib/fnet/ipacketseq" X X/* Name of Output packet name sequence file (in sent packet directory) */ X#define OPACKETSEQUENCE "/u2/lib/fnet/opacketseq" X X/* Name of bad message sequence file */ X#define BADSEQ "/u2/lib/fnet/badseq" X X/* Lowist user's uid. */ X#define USERUID 50 X X/* Name of alias file */ X#define ALIAS "/u2/lib/fnet/Alias" X X/* Mail sender */ X#define RMAIL "/bin/rmail" X X/* Define this if you have */ X/* #define HAVE_SYSEXITS /**/ X X/* Type to hold 16 bit integer */ X#define INT16 short X X/* Define this if bytes need to be swapped to msdos */ X/* #define SWAB_BYTES /**/ X X/* Define this if you want rfmail to return underlivered mail. You do X not need this if you are running sendmail or similiar which returns X undelivered mail. */ X#define RETURN_FAILED_MAIL /**/ X X/* Shortnames, yak */ X X#define packet_net zz0001zz X#define packet_node zz0002zz X X/* Dial translation table. first string stripped out, second one replaced */ X X#define DIALTABLE "358-0-", "", "358-", "9", "", "990" X X /* End of configure section */ X X#ifdef HAVE_SYSEXITS X# include X#else /* not HAVE_SYSEXITS */ X# define EX_OK 0 /* successful termination */ X# define EX_USAGE 64 /* command line usage error */ X# define EX_DATAERR 65 /* data format error */ X# define EX_NOINPUT 66 /* cannot open input */ X# define EX_NOHOST 68 /* host name unknown */ X# define EX_UNAVAILABLE 69 /* service unavailable */ X# define EX_SOFTWARE 70 /* internal software error */ X# define EX_OSERR 71 /* system error (e.g., can't fork) */ X# define EX_OSFILE 72 /* critical OS file missing */ X# define EX_CANTCREAT 73 /* can't create (user) output file */ X# define EX_IOERR 74 /* input/output error */ X#endif /* not HAVE_SYSEXITS */ X SHAR_EOF chmod 0644 config.h || echo "restore of config.h fails" echo "x - extracting fpack.h (Text)" sed 's/^X//' << 'SHAR_EOF' > fpack.h && X/* @(#)%M% %I% Teemu Torma %H% X X Header file for FidoNet-routines. X X @(#)Copyright (c) 1987 by Teemu Torma X X Permission is given to distribute this program and alter this code as X needed to adapt it to forign systems provided that this header is X included and that the original author's name is preserved. */ X X/* Structure for packet header. */ X Xtypedef struct _packet { X short orig_node; /* originating node */ X short dest_node; /* destinating mode */ X short year; /* packing year (e.g. 1986) */ X short month; /* 0-11 for Jan - Dec */ X short day; /* 1-31 */ X short hour; /* 0-23 */ X short minute; /* 0-59 */ X short second; /* 0-59 */ X short rate; /* maximum baud rate */ X short ver; /* header version */ X short orig_net; /* originating net */ X short dest_net; /* destination net */ X char product; /* product */ X char x1; /* Extra byte */ X#ifdef FIDO_V11w X short fill[16]; /* extra space */ X#else X char pwd_kludge[8]; X short orig_zone; X short dest_zone; X char B_fill2[16]; X long B_fill3; X#endif X} Packet; X X/* Attributes tranferred via mail. */ X X#define ATTR_PRIVATE (0000001) /* private msg */ X#define ATTR_CRASH (0000002) /* SEAdog only */ X#define ATTR_FILE (0000020) /* files attached */ X#define ATTR_UNUSED (0002000) /* unused */ X#define ATTR_RRR (0010000) /* SEAdog only */ X#define ATTR_IRR (0020000) /* SEAdog only */ X#define ATTR_AUDREQ (0040000) /* SEAdog only */ X X/* Packet and message types. */ X X#define HDRVER (02) X#define MSGTYPE (02) SHAR_EOF chmod 0644 fpack.h || echo "restore of fpack.h fails" echo "x - extracting rmail.h (Text)" sed 's/^X//' << 'SHAR_EOF' > rmail.h && X/* @(#)%M% %I% Teemu Torma %H% X X Definitions for rmail X X @(#)Copyright (c) 1987 by Teemu Torma X X Permission is given to distribute this program and alter this code as X needed to adapt it to forign systems provided that this header is X included and that the original author's name is preserved. */ X X/* Configurable definitions. Change them to according your configuration. */ X X#define FIDOMAILER "/usr/llib/fnet/rfmail" /* fidonet mailer */ X/* #define RMAIL "/usr/lib/mail/rmail" /* real rmail */ X#define RMAIL "/bin/rmail" /* real rmail */ X#undef GATEWAY /* "pgmf" /* route to fidonet gateway */ X/* above undef??? */ X X/* Don't touch the rest if you are not absolutely sure what you are X doing... */ X X#define True (1) X#define False (0) X#define bool int X#define marray(n) ((char **) malloc((unsigned) ((n) * sizeof(char *)))) SHAR_EOF chmod 0644 rmail.h || echo "restore of rmail.h fails" echo "x - extracting fio.h (Text)" sed 's/^X//' << 'SHAR_EOF' > fio.h && X/* @(#)%M% %I% Teemu Torma %H% X X Definitions for io. X X @(#)Copyright (c) 1987 by Teemu Torma X X Permission is given to distribute this program and alter this code as X needed to adapt it to forign systems provided that this header is X included and that the original author's name is preserved. */ X X/* Telink/xmodem special characters. */ X X#define SOH (0x01) /* first character of xmodem block */ X#define STX (0x02) /* send 1 k blocks */ X#define ENQ (0x05) /* Bink sends this if there is no mail to pick up */ X#define ACK (0x06) /* ok to send */ X#define NAK (0x15) /* fail, resend */ X#define SYN (0x16) /* first character of telink block */ X#define EOT (0x04) /* end of stransmission */ X#define SUB (0x1a) /* end of filename in MODEM7 */ X#define CTRLZ (0x1a) /* char to fill partial packet */ X X/* Definitions for xmodem. */ X X#define BlockSize (128) /* small xmodem sector size */ X#define KBlockSize (1024) /* one k-byte xmodem sector size */ X X/* Misc. definitions. */ X X#define TSYNCH (0xae) /* sync character for fido */ X#define TIMEOUT (-2) /* timeout on readline() */ SHAR_EOF chmod 0644 fio.h || echo "restore of fio.h fails" echo "x - extracting crc.h (Text)" sed 's/^X//' << 'SHAR_EOF' > crc.h && X/* %M% %I% Teemu Torma %H% X X Header file for updcrc macro. X X @(#)Copyright (c) 1987 by Teemu Torma X X Permission is given to distribute this program and alter this code as X needed to adapt it to forign systems provided that this header is X included and that the original author's name is preserved. */ X Xextern unsigned short crctab[]; X X/* #define updcrc(c, crc) (crctab[((crc >> 8) & 255)] ^ (crc << 8) ^ c) */ X#define updcrc(c, crc) (crctab[((crc >> 8) & 255) ^ ((c) & 255)] ^ (crc << 8)) SHAR_EOF chmod 0644 crc.h || echo "restore of crc.h fails" echo "x - extracting hsu.h (Text)" sed 's/^X//' << 'SHAR_EOF' > hsu.h && X#ifndef H_HSU X#define H_HSU 1 X X/* I'm here !!! */ X X#define HSU 1 X X/* I fucked it up again */ X X#define HSU_ERROR 100 X X/* to debug or not to debug */ X X#ifdef DEBUG X#define LOG(level, x) printf x; _rkey() X#define DBUG(x) LOG(D_ALL, (x)) X#else X#define LOG(level, x) X#define DBUG(x) X#endif X#define D_LOG 1 X#define D_ALL 2 X#define D_TEMP 4 X X/* Specifies machine I run on */ X X/* & needed to take address of setjmp variable? */ X#ifdef unix X#define ADDRESS_OF_SETJMP_VARIABLE (char *) & X#endif X#ifdef MSDOS X#define ADDRESS_OF_SETJMP_VARIABLE (char *) & X#endif X#ifndef ADDRESS_OF_SETJMP_VARIABLE Xpang, pang, youre dead !! X#endif X X/* General stuff I like */ X X#ifndef TRUE X#define TRUE 1 X#endif X#ifndef FALSE X#define FALSE 0 X#endif X X#define LINEBUF 256 X#define ERRBUF 512 X X#define FLOATCHARS "0123456789.-eE+" X#define INTCHARS "0123456789-" X#define UNSIGNEDCHARS "0123456789" X#define SEPARATORS " ,;\015\012\011" X#define WHITESPACE " \015\012\011" X X/* If ALIGN_ODD defined, align long, int, double to n lower bits */ X X#define ALIGN_ODD 1 X X/* New alignment system, use this now and ignore ALIGN_ODD */ X X#ifdef MSDOS X#define SIZEOFINT 2 X#define INT_ALIGN 2 X#define CHAR_ARRAY_ALIGN 1 X#define LONG_ALIGN 2 X#define DOUBLE_ALIGN 2 X#define CHAR_ALIGN 1 X#endif X#ifdef i286 X#define SIZEOFINT 2 X#define INT_ALIGN 2 X#define CHAR_ARRAY_ALIGN 1 X#define LONG_ALIGN 2 X#define DOUBLE_ALIGN 2 X#define CHAR_ALIGN 1 X#endif X#ifdef i386 X#define SIZEOFINT 4 X#define INT_ALIGN 4 X#define CHAR_ARRAY_ALIGN 1 X#define LONG_ALIGN 4 X#define DOUBLE_ALIGN 4 X#define CHAR_ALIGN 1 X#endif X#if defined(mc68k) || defined(m68k) || defined(m68000) || defined(m68k32) X#define SIZEOFINT 4 X#define INT_ALIGN 4 X#define CHAR_ARRAY_ALIGN 1 X#define LONG_ALIGN 4 X#define DOUBLE_ALIGN 4 X#define CHAR_ALIGN 1 X#endif X X#ifndef SIZEOFINT Xpang, pang, youre dead!! X#endif X X/* Pointer type is int/long etc with size same as pointers */ X X#define POINTER_TYPE long X X/* keys */ X X#define ESC 27 X X/* Can't live without this macro */ X X#ifdef lint Xextern char *strsave(), *strasave(); X#else X#define strsave(s) (strcpy(malloc((unsigned) (strlen(s) + 1)), (s))) X#define strasave(s) (strcpy(alloca((unsigned) (strlen(s) + 1)), (s))) X#endif X#define strequ(x,y) (strcmp(x,y) == 0) X#define strnequ(x,y) (strcmp(x,y) != 0) X#define strnotnull(x) (*x != '\0') X#define strnull(x) (*x == '\0'); X/* Pointer to end of string */ X#define strend(x) ((x) + strlen(x)) X X/* Increment counter, looping back to 0 if wrap-over */ X X#define loop_increment(x,y) (x = (++x >= (y)) ? 0 : x) X#define loop_decrement(x,y) (x = (--x < 0) ? (y)-1 : x) X X/* I use this always */ X X#define curse(buf) waddstr(crnt_window,buf); wrefresh(crnt_window) X X#define BIT0 1 X#define BIT1 2 X#define BIT2 4 X#define BIT3 8 X#define BIT4 16 X#define BIT5 32 X#define BIT6 64 X#define BIT7 128 X#define BIT8 256 X#define BIT9 512 X#define BIT10 1024 X#define BIT11 2048 X#define BIT12 4096 X X/* Some procedures */ X Xextern char *alloca(), *strncpy(), *strncat(), *sprintfs(), *sstrcat(); Xextern char *mktemp(), *strclean(), *strsclean(); Xextern int strempty(); Xextern void exit(), qsort(); Xextern long time(); Xextern unsigned short getuid(); Xextern unsigned short geteuid(); Xextern unsigned short getgid(); Xextern unsigned short getegid(); Xextern unsigned alarm(); Xextern unsigned sleep(); X X/* Some typedefs */ X Xtypedef int (*INT_FP)(); X X/* Defines which are not in std libraries (why!?) */ X Xextern char *optarg, *sys_errlist[], *getenv(); Xextern int optind, opterr, errno, sys_nerr; Xextern long atol(); X X/* I like it, and it's not always defined in math.h, (not in msc headers). */ X X#ifndef _ABS X#define _ABS(x) ((x) < 0 ? -(x) : (x)) X#endif X#ifndef _MIN X#define _MIN(x, y) ((x) < (y) ? (x) : (y)) X#endif X X/* Macro version of getw putw. w is destination. */ X X#define FGETW(w, fp) \ X if ((fp)->_cnt < sizeof(int)) w = getw(fp); \ X else { w = *(int *) (fp)->_ptr; \ X (fp)->_ptr += sizeof(int); (fp)->_cnt -= sizeof(int); } X X#define FPUTW(w, fp) \ X if ((fp)->_cnt < sizeof(int)) putw(w, fp); \ X else { *(int *) (fp)->_ptr = w; \ X (fp)->_ptr += sizeof(int); (fp)->_cnt -= sizeof(int); } X X#define FGETINT16(w, fp) \ X if ((fp)->_cnt < sizeof(short)) fread( (char *) &(w), sizeof(short), 1, fp);\ X else { w = *(short *) (fp)->_ptr; \ X (fp)->_ptr += sizeof(short); (fp)->_cnt -= sizeof(short); } X X#define FPUTINT16(w, fp) \ X if ((fp)->_cnt < sizeof(short)) \ X fwrite( (char *) &(w), sizeof(short), 1, fp); \ X else { *(short *) (fp)->_ptr = w; \ X (fp)->_ptr += sizeof(short); (fp)->_cnt -= sizeof(short); } X X#define FGETLW(w, fp) \ X if ((fp)->_cnt < sizeof(long)) fread( (char *) &w, sizeof(long), 1, fp); \ X else { w = *(long *) (fp)->_ptr; \ X (fp)->_ptr += sizeof(long); (fp)->_cnt -= sizeof(long); } X X#define FPUTLW(w, fp) \ X if ((fp)->_cnt < sizeof(long)) fwrite( (char *) &w, sizeof(long), 1, fp); \ X else { *(long *) (fp)->_ptr = w; \ X (fp)->_ptr += sizeof(long); (fp)->_cnt -= sizeof(long); } X X#ifdef SAFE X#define FREAD(p, bytes, nitems, fp) (void) fread(p, bytes, nitems, fp) X#define FWRITE(p, bytes, nitems, fp) (void) fwrite(p, bytes, nitems, fp) X#else X X/* And fread, fwrite. Don't return a value, so it has to be checked. */ X/* X X could this work? test it! X #define FREAD(p, bytes, nitems, fp) X (((fp)->_cnt < (nitems) * (bytes)) ? fread(p, bytes, nitems, fp) : X nitems, memcpy( (p), (char *) (fp)->_ptr, (int) ((nitems) * (bytes))), X (fp)->_ptr += (nitems) * (bytes), (fp)->_cnt -= (nitems) * (bytes)) X X */ X#define FREAD(p, bytes, nitems, fp) \ X if ((fp)->_cnt < (nitems) * (bytes)) (void) fread(p, bytes, nitems, fp); \ X else { memcpy( (p), (char *) (fp)->_ptr, (int) ((nitems) * (bytes))); \ X (fp)->_ptr += (nitems) * (bytes); \ X (fp)->_cnt -= (nitems) * (bytes); } X X#define FWRITE(p, bytes, nitems, fp) \ X if ((fp)->_cnt < (nitems) * (bytes)) (void) fwrite(p, bytes, nitems, fp); \ X else { memcpy( (char *) (fp)->_ptr, (p), (int) ((nitems) * (bytes))); \ X (fp)->_ptr += (nitems) * (bytes); \ X (fp)->_cnt -= (nitems) * (bytes); } X#endif X X/* FGETS differ from original: \n in the end is NOT copied!! (because X I don't like that) */ X Xextern char *strnchr(); X X#define FGETS(cp, maxlen, fp) \ X if (strnchr((fp)->_ptr, '\n', (fp)->_cnt)) \ X{ \ X register count; \ X register char *p; \ X for (count = 1, p = cp; (*p = *(fp)->_ptr++) != '\n'; p++, count++) \ X if (count >= (maxlen)) break; \ X *p = '\0'; \ X (fp)->_cnt -= count; \ X} else { \ X fgets(cp, maxlen, fp); \ X if (strchr(cp, '\n')) *(strchr(cp, '\n')) = '\0'; \ X} X X/* Checks for both eof and error status, better than feof || ferror when X compilers are stupid enough not to optimize that kind of situation. */ X X#define ferr(fp) ((fp)->_flag & (_IOEOF | _IOERR)) X X#endif /* H_HSU */ X SHAR_EOF chmod 0664 hsu.h || echo "restore of hsu.h fails" echo "x - extracting shuffle.h (Text)" sed 's/^X//' << 'SHAR_EOF' > shuffle.h && X#define MAX_CONVERT_BUFFERS 10 X#define MAX_CONVERT_BUFLEN 80 Xstatic char bufs[MAX_CONVERT_BUFFERS][MAX_CONVERT_BUFLEN], *tcharp; Xstatic int bflag; X X#define SHUFFLEBUFFERS \ Xloop_increment(bflag, MAX_CONVERT_BUFFERS); tcharp = bufs[bflag] SHAR_EOF chmod 0644 shuffle.h || echo "restore of shuffle.h fails" echo "x - extracting sysexits.h (Text)" sed 's/^X//' << 'SHAR_EOF' > sysexits.h && X/* @(#)%M% %I% Teemu Torma %H% X X Exit statuses for systems that doesn't have /usr/include/sysexits.h */ X X#define EX_OK 0 /* successful termination */ X#define EX_USAGE 64 /* command line usage error */ X#define EX_DATAERR 65 /* data format error */ X#define EX_NOINPUT 66 /* cannot open input */ X#define EX_NOHOST 68 /* host name unknown */ X#define EX_UNAVAILABLE 69 /* service unavailable */ X#define EX_SOFTWARE 70 /* internal software error */ X#define EX_OSERR 71 /* system error (e.g., can't fork) */ X#define EX_OSFILE 72 /* critical OS file missing */ X#define EX_CANTCREAT 73 /* can't create (user) output file */ X#define EX_IOERR 74 /* input/output error */ SHAR_EOF chmod 0644 sysexits.h || echo "restore of sysexits.h fails" echo "x - extracting nodelist.h (Text)" sed 's/^X//' << 'SHAR_EOF' > nodelist.h && X/* @(#)%M% %I% Teemu Torma %H% X X Structures and definitions for nodelist. X X @(#)Copyright (c) 1987 by Teemu Torma X X Permission is given to distribute this program and alter this code as X needed to adapt it to forign systems provided that this header is X included and that the original author's name is preserved. */ X X/* Change these if you wish. */ X X/* Name of nodelist in LIBDIR */ X#define NODELIST "nodelist" X X/* Name of nodelist index file in LIBDIR */ X#define INODELIST "nodelist.idx" X X/* Name of sysop name index file in LIBDIR */ X#define NAMELIST "name.idx" X X/* Compare two node entried to see if they are same node (ignoring X possible other information */ X#define samenode(n1, n2) ((n1).zone == (n2).zone && (n1).net == (n2).net && \ X (n1).node == (n2).node && (n1).point == (n2).point) X X/* Structure for nodelist entry. Routines to get one node from nodelist X will return this structure. */ X Xtypedef struct _node { X int type; /* type of entry (see below) */ X int region; /* region (not necessarily used/set) */ X int net; /* net/region of node */ X int zone; /* Zone of node (not really supported yet) */ X int node; /* number of node */ X int point; /* Point of node (not really supported yet) */ X char name[20]; /* name of fido */ X char city[40]; /* city */ X char sysop[36]; /* name of sysop */ X char phone[40]; /* phone-number */ X int speed; /* speeds */ X char flags[60]; /* flags-string */ X} Node; X Xtypedef struct _indexnode { X int zone; X int net; X int node; X long offset; X} NODEINDEX; X Xtypedef struct _indexname { X char name[36]; /* Sysop name */ X long offset; /* Refers to nodelist index entry */ X int zone; X int net; X} NAMEINDEX; X X/* Entry types. */ X X#define REGION (1) /* region-host */ X#define HOST (2) /* net-host */ X#define HUB (3) /* local-host */ X#define PVT (4) /* private node */ X#define HOLD (5) /* no mail to this node */ X#define DOWN (6) /* node is down */ X#define KENL (7) /* should not be comminucated */ X#define NORMAL (8) /* normal node */ X#define ZONE (9) /* Zone */ X#define POINT (10) /* point (points are not in nodelist but this is used X elsewhere. */ X X/* Declarations for routines. */ X XNode *node_entry(); /* get entry from nodelist */ Xchar *update_index(); /* update index-file */ Xextern Node *parse_entry(); X Xextern Node originnode; Xextern NODEINDEX *nodeindex; Xextern NAMEINDEX *nameindex; Xextern int nodes; SHAR_EOF chmod 0644 nodelist.h || echo "restore of nodelist.h fails" echo "x - extracting fnews.h (Text)" sed 's/^X//' << 'SHAR_EOF' > fnews.h && X/* @(#)%M% %I% Teemu Torma %H% X X Definitions for fidonet news-system. X X @(#)Copyright (c) 1987 by Teemu Torma X X Permission is given to distribute this program and alter this code as X needed to adapt it to forign systems provided that this header is X included and that the original author's name is preserved. */ X X/* Section definitions for configure file. */ X X#define SECT_NETNODE (1) /* Net/node for receiving node */ X#define SECT_NG_AREA (2) /* Newsgroup -> area conversions */ X#define SECT_HEADERS (3) /* Header-field definitions */ X#define SECT_ENDMSG (4) /* Text to be placed at the end of msg */ X#define SECT_AREA_NG (5) /* Area -> newsgroup conversions */ X X/* Other definitions for news-system. */ X X/* If you have some junk area (like junk in Usenet News), define this X to name of that area. Otherwise messages to unknown areas will X be dicarded. */ X#define JUNK_AREA "FNET.JUNK" /**/ X X/* Usenet news junk area. Unknown echos are put here */ X#define JUNK "junk" /**/ SHAR_EOF chmod 0644 fnews.h || echo "restore of fnews.h fails" rm -f s2_seq_.tmp echo "You have unpacked the last part" exit 0