Initial import of the ircii-pana-1.1-final source tree.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/tags/ircii-pana-1.1-final@1 13b04d17-f746-0410-82c6-800466cd88b0
This commit is contained in:
186
dll/possum/Makefile.in
Normal file
186
dll/possum/Makefile.in
Normal file
@@ -0,0 +1,186 @@
|
||||
SHELL = @SHELL@
|
||||
|
||||
srcdir = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
topdir = @topdir@
|
||||
prefix = @prefix@
|
||||
exec_prefix = @exec_prefix@
|
||||
|
||||
bindir = @bindir@
|
||||
sbindir = @sbindir@
|
||||
libexecdir = @libexecdir@
|
||||
datadir = @datadir@
|
||||
sysconfdir = @sysconfdir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
localstatedir = @localstatedir@
|
||||
libdir = @libdir@
|
||||
infodir = @infodir@
|
||||
mandir = @mandir@
|
||||
includedir = @includedir@
|
||||
oldincludedir = @oldincludedir@
|
||||
|
||||
local_dir = $(HOME)
|
||||
|
||||
# Where the BitchX binary will be installed.
|
||||
# "make install" will compile and install the program.
|
||||
INSTALL_IRC = @INSTALL_IRC@
|
||||
|
||||
# Where the BitchX library will be. Generally this is the place that
|
||||
# you put the scripts, help pages and translation tables. It is
|
||||
# very important that you set this correctly.
|
||||
IRCLIB = @IRCLIB@
|
||||
|
||||
CC = @CC@
|
||||
DEFS = @INCLUDES@
|
||||
LIBS = @LIBS@
|
||||
|
||||
# Tcl library.
|
||||
TCL_LIBS = @TCL_LIBS@
|
||||
|
||||
# These are for Tcl support.
|
||||
TCL_OBJS = @TCL_OBJS@
|
||||
# You don't have the following, so you'll want to leave this blank.
|
||||
TCL_SRCS = @TCL_SRCS@
|
||||
|
||||
# Set this to -g if you want to be able to debug the client, otherwise
|
||||
# use -O to have the compiler do some optimization instead.
|
||||
CFLAGS = @CFLAGS@
|
||||
|
||||
# Set this to -s if you want the binary to be stripped.
|
||||
LDFLAGS = @LDFLAGS@
|
||||
|
||||
# These are for the cd device player.
|
||||
CD_SRCS = @CD_SRCS@
|
||||
CD_OBJS = @CD_OBJS@
|
||||
|
||||
# This is the executable suffix for the target operating system.
|
||||
EXEEXT = @EXEEXT@
|
||||
|
||||
# Extra files.
|
||||
DEFAULT_CTOOLZ_DIR = @DEFAULT_CTOOLZ_DIR@
|
||||
DEFAULT_MSGLOGFILE = @DEFAULT_MSGLOGFILE@
|
||||
DEFAULT_BITCHX_HELP_FILE = @DEFAULT_BITCHX_HELP_FILE@
|
||||
DEFAULT_SCRIPT_HELP_FILE = @DEFAULT_SCRIPT_HELP_FILE@
|
||||
DEFAULT_BITCHX_KICK_FILE = @DEFAULT_BITCHX_KICK_FILE@
|
||||
DEFAULT_BITCHX_QUIT_FILE = @DEFAULT_BITCHX_QUIT_FILE@
|
||||
DEFAULT_BITCHX_IRCNAME_FILE = @DEFAULT_BITCHX_IRCNAME_FILE@
|
||||
|
||||
# Full path of the directory for BitchX help files.
|
||||
HELPDIR = @HELPDIR@
|
||||
|
||||
# Full path of the directory for the BitchX scripts.
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
|
||||
# Default setting for IRCPATH where BitchX will look for
|
||||
# its script files if the environment variable is undefined.
|
||||
# Usually, this should contain the same path as used for INSTALL_SCRIPT in
|
||||
# the Makefile, but it can contain multiple path elements
|
||||
# separated by colons. The path MUST lead to an existing directory,
|
||||
# because the 'global' script is expected to be found there.
|
||||
IRCPATH = @IRCPATH@
|
||||
|
||||
# Path for TRANSLATION variable.
|
||||
TRANSLATION_PATH = @TRANSLATION_PATH@
|
||||
|
||||
# This command will be used to install the BitchX help files. If you don't
|
||||
# want to install them, replace with the following:
|
||||
# INSTALL_HELP_CMD = @echo The help files have not been installed.
|
||||
INSTALL_HELP_CMD = @INSTALL_HELP_CMD@
|
||||
|
||||
# This is where the optional plugins will be copied to.
|
||||
PLUGINDIR = @PLUGINDIR@
|
||||
|
||||
# Plugin flags.
|
||||
SHLIB_LD = @SHLIB_LD@
|
||||
SHLIB_CFLAGS = @SHLIB_CFLAGS@
|
||||
SHLIB_SUFFIX = @SHLIB_SUFFIX@
|
||||
|
||||
# This command will be used to install the BitchX files on Win32/OS2EMX
|
||||
# systems.
|
||||
WINNT_INSTALL = @WINNT_INSTALL@
|
||||
|
||||
# This program allows you to use screen/xterm's to put new BitchX windows
|
||||
# on new screen/xterm windows.
|
||||
INSTALL_WSERV = @INSTALL_WSERV@
|
||||
|
||||
# This program allows you to screen BitchX and reattach to it later.
|
||||
INSTALL_SCRBX = @INSTALL_SCRBX@
|
||||
|
||||
# Set gzip and bzip2 options.
|
||||
GZIP_ENV = @GZIP_ENV@
|
||||
BZIP2 = @BZIP2@
|
||||
|
||||
# Standard programs.
|
||||
RM = @RM@
|
||||
LN = @LN_S@
|
||||
CP = @CP@
|
||||
MV = @MV@
|
||||
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
|
||||
VERSION = @VERSION@
|
||||
_VERSION_ = @_VERSION_@
|
||||
|
||||
MAKE_BIN = @MAKE@
|
||||
MAKE = $(MAKE_BIN) $(MFLAGS)
|
||||
MFLAGS = \
|
||||
'local_dir=$(HOME)' \
|
||||
'INSTALL_IRC=$(INSTALL_IRC)' \
|
||||
'IRCLIB=$(IRCLIB)' \
|
||||
'CC=$(CC)' \
|
||||
'CFLAGS=$(CFLAGS)' \
|
||||
'HELPDIR=$(HELPDIR)' \
|
||||
'INSTALL_WSERV=$(INSTALL_WSERV)' \
|
||||
'IRCPATH=$(IRCPATH)' \
|
||||
'TRANSLATION_PATH=$(TRANSLATION_PATH)' \
|
||||
'LDFLAGS=$(LDFLAGS)' \
|
||||
'LIBS=$(LIBS)' \
|
||||
'LN=$(LN)' \
|
||||
'RM=$(RM)' \
|
||||
'TCL_SRCS=$(TCL_SRCS)' \
|
||||
'TCL_OBJS=$(TCL_OBJS)' \
|
||||
'CD_PLAY=$(CD_PLAY)' \
|
||||
'CD_SRCS=$(CD_SRCS)' \
|
||||
'CD_OBJS=$(CD_OBJS)' \
|
||||
'TCL_LIBS=$(TCL_LIBS)' \
|
||||
'PLUGINDIR=$(PLUGINDIR)' \
|
||||
'_VERSION_=$(_VERSION_)' \
|
||||
'VERSION=$(VERSION)' \
|
||||
'INSTALL_DATA=$(INSTALL_DATA)' \
|
||||
'INSTALL_SCRIPT=$(INSTALL_SCRIPT)' \
|
||||
'EXEEXT=$(EXEEXT)' \
|
||||
'SHLIB_CFLAGS=$(SHLIB_CFLAGS)' \
|
||||
'SHLIB_SUFFIX=$(SHLIB_SUFFIX)'
|
||||
|
||||
## Makefile starts here.
|
||||
|
||||
PLUGIN_NAME = possum
|
||||
|
||||
all: Makefile possum$(SHLIB_SUFFIX)
|
||||
|
||||
Makefile: Makefile.in
|
||||
cd $(topdir) \
|
||||
&& ./config.status
|
||||
|
||||
possum.o: $(srcdir)/possum.c
|
||||
$(CC) $(DEFS) $(CFLAGS) -c $(srcdir)/possum.c
|
||||
|
||||
head.o: $(srcdir)/head.c
|
||||
$(CC) $(DEFS) $(CFLAGS) -c $(srcdir)/head.c
|
||||
|
||||
llist.o: $(srcdir)/llist.c
|
||||
$(CC) $(DEFS) $(CFLAGS) -c $(srcdir)/llist.c
|
||||
|
||||
possum$(SHLIB_SUFFIX): possum.o head.o llist.o ../dllinit.o
|
||||
$(SHLIB_LD) possum.o llist.o head.o ../dllinit.o $(SHLIB_CFLAGS) -o possum$(SHLIB_SUFFIX)
|
||||
|
||||
clean:
|
||||
$(RM) *.o possum$(SHLIB_SUFFIX) *~ *.a *.dll *.def .#*
|
||||
|
||||
distclean: clean
|
||||
$(RM) Makefile
|
||||
|
||||
install:
|
||||
$(INSTALL) $(PLUGIN_NAME)$(SHLIB_SUFFIX) $(PLUGINDIR)
|
||||
1
dll/possum/VERSION
Normal file
1
dll/possum/VERSION
Normal file
@@ -0,0 +1 @@
|
||||
0.2
|
||||
279
dll/possum/def.h
Normal file
279
dll/possum/def.h
Normal file
@@ -0,0 +1,279 @@
|
||||
/* $OpenBSD: def.h,v 1.8 1996/06/08 19:48:18 christos Exp $ */
|
||||
/* $NetBSD: def.h,v 1.8 1996/06/08 19:48:18 christos Exp $ */
|
||||
/*
|
||||
* Copyright (c) 1980, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)def.h 8.2 (Berkeley) 3/21/94
|
||||
* $NetBSD: def.h,v 1.8 1996/06/08 19:48:18 christos Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
* Mail -- a mail program
|
||||
*
|
||||
* Author: Kurt Shoens (UCB) March 25, 1978
|
||||
*/
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#include <signal.h>
|
||||
#include <termios.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
#include <string.h>
|
||||
#include "pathnames.h"
|
||||
|
||||
#define APPEND /* New mail goes to end of mailbox */
|
||||
|
||||
#define ESCAPE '~' /* Default escape for sending */
|
||||
#define NMLSIZE 1024 /* max names in a message list */
|
||||
#define PATHSIZE MAXPATHLEN /* Size of pathnames throughout */
|
||||
#define HSHSIZE 59 /* Hash size for aliases and vars */
|
||||
#define LINESIZE BUFSIZ /* max readable line width */
|
||||
#define STRINGSIZE ((unsigned) 128)/* Dynamic allocation units */
|
||||
#define MAXARGC 1024 /* Maximum list of raw strings */
|
||||
#define NOSTR ((char *) 0) /* Null string pointer */
|
||||
#define MAXEXP 25 /* Maximum expansion of aliases */
|
||||
|
||||
#define equal(a, b) (strcmp(a,b)==0)/* A nice function to string compare */
|
||||
|
||||
struct message {
|
||||
short m_flag; /* flags, see below */
|
||||
short m_block; /* block number of this message */
|
||||
short m_offset; /* offset in block of message */
|
||||
long m_size; /* Bytes in the message */
|
||||
short m_lines; /* Lines in the message */
|
||||
};
|
||||
|
||||
/*
|
||||
* flag bits.
|
||||
*/
|
||||
|
||||
#define MUSED (1<<0) /* entry is used, but this bit isn't */
|
||||
#define MDELETED (1<<1) /* entry has been deleted */
|
||||
#define MSAVED (1<<2) /* entry has been saved */
|
||||
#define MTOUCH (1<<3) /* entry has been noticed */
|
||||
#define MPRESERVE (1<<4) /* keep entry in sys mailbox */
|
||||
#define MMARK (1<<5) /* message is marked! */
|
||||
#define MODIFY (1<<6) /* message has been modified */
|
||||
#define MNEW (1<<7) /* message has never been seen */
|
||||
#define MREAD (1<<8) /* message has been read sometime. */
|
||||
#define MSTATUS (1<<9) /* message status has changed */
|
||||
#define MBOX (1<<10) /* Send this to mbox, regardless */
|
||||
|
||||
/*
|
||||
* Given a file address, determine the block number it represents.
|
||||
*/
|
||||
#define blockof(off) ((int) ((off) / 4096))
|
||||
#define offsetof(off) ((int) ((off) % 4096))
|
||||
#define positionof(block, offset) ((off_t)(block) * 4096 + (offset))
|
||||
|
||||
/*
|
||||
* Format of the command description table.
|
||||
* The actual table is declared and initialized
|
||||
* in lex.c
|
||||
*/
|
||||
struct cmd {
|
||||
char *c_name; /* Name of command */
|
||||
int (*c_func) __P((void *));/* Implementor of the command */
|
||||
short c_argtype; /* Type of arglist (see below) */
|
||||
short c_msgflag; /* Required flags of messages */
|
||||
short c_msgmask; /* Relevant flags of messages */
|
||||
};
|
||||
|
||||
/* Yechh, can't initialize unions */
|
||||
|
||||
#define c_minargs c_msgflag /* Minimum argcount for RAWLIST */
|
||||
#define c_maxargs c_msgmask /* Max argcount for RAWLIST */
|
||||
|
||||
/*
|
||||
* Argument types.
|
||||
*/
|
||||
|
||||
#define MSGLIST 0 /* Message list type */
|
||||
#define STRLIST 1 /* A pure string */
|
||||
#define RAWLIST 2 /* Shell string list */
|
||||
#define NOLIST 3 /* Just plain 0 */
|
||||
#define NDMLIST 4 /* Message list, no defaults */
|
||||
|
||||
#define P 040 /* Autoprint dot after command */
|
||||
#define I 0100 /* Interactive command bit */
|
||||
#define M 0200 /* Legal from send mode bit */
|
||||
#define W 0400 /* Illegal when read only bit */
|
||||
#define F 01000 /* Is a conditional command */
|
||||
#define T 02000 /* Is a transparent command */
|
||||
#define R 04000 /* Cannot be called from collect */
|
||||
|
||||
/*
|
||||
* Oft-used mask values
|
||||
*/
|
||||
|
||||
#define MMNORM (MDELETED|MSAVED)/* Look at both save and delete bits */
|
||||
#define MMNDEL MDELETED /* Look only at deleted bit */
|
||||
|
||||
/*
|
||||
* Structure used to return a break down of a head
|
||||
* line (hats off to Bill Joy!)
|
||||
*/
|
||||
|
||||
struct headline {
|
||||
char *l_from; /* The name of the sender */
|
||||
char *l_tty; /* His tty string (if any) */
|
||||
char *l_date; /* The entire date string */
|
||||
};
|
||||
|
||||
#define GTO 1 /* Grab To: line */
|
||||
#define GSUBJECT 2 /* Likewise, Subject: line */
|
||||
#define GCC 4 /* And the Cc: line */
|
||||
#define GBCC 8 /* And also the Bcc: line */
|
||||
#define GMASK (GTO|GSUBJECT|GCC|GBCC)
|
||||
/* Mask of places from whence */
|
||||
|
||||
#define GNL 16 /* Print blank line after */
|
||||
#define GDEL 32 /* Entity removed from list */
|
||||
#define GCOMMA 64 /* detract puts in commas */
|
||||
|
||||
/*
|
||||
* Structure used to pass about the current
|
||||
* state of the user-typed message header.
|
||||
*/
|
||||
|
||||
struct header {
|
||||
struct name *h_to; /* Dynamic "To:" string */
|
||||
char *h_subject; /* Subject string */
|
||||
struct name *h_cc; /* Carbon copies string */
|
||||
struct name *h_bcc; /* Blind carbon copies */
|
||||
struct name *h_smopts; /* Sendmail options */
|
||||
};
|
||||
|
||||
/*
|
||||
* Structure of namelist nodes used in processing
|
||||
* the recipients of mail and aliases and all that
|
||||
* kind of stuff.
|
||||
*/
|
||||
|
||||
struct name {
|
||||
struct name *n_flink; /* Forward link in list. */
|
||||
struct name *n_blink; /* Backward list link */
|
||||
short n_type; /* From which list it came */
|
||||
char *n_name; /* This fella's name */
|
||||
};
|
||||
|
||||
/*
|
||||
* Structure of a variable node. All variables are
|
||||
* kept on a singly-linked list of these, rooted by
|
||||
* "variables"
|
||||
*/
|
||||
|
||||
struct var {
|
||||
struct var *v_link; /* Forward link to next variable */
|
||||
char *v_name; /* The variable's name */
|
||||
char *v_value; /* And it's current value */
|
||||
};
|
||||
|
||||
struct group {
|
||||
struct group *ge_link; /* Next person in this group */
|
||||
char *ge_name; /* This person's user name */
|
||||
};
|
||||
|
||||
struct grouphead {
|
||||
struct grouphead *g_link; /* Next grouphead in list */
|
||||
char *g_name; /* Name of this group */
|
||||
struct group *g_list; /* Users in group. */
|
||||
};
|
||||
|
||||
#define NIL ((struct name *) 0) /* The nil pointer for namelists */
|
||||
#define NONE ((struct cmd *) 0) /* The nil pointer to command tab */
|
||||
#define NOVAR ((struct var *) 0) /* The nil pointer to variables */
|
||||
#define NOGRP ((struct grouphead *) 0)/* The nil grouphead pointer */
|
||||
#define NOGE ((struct group *) 0) /* The nil group pointer */
|
||||
|
||||
/*
|
||||
* Structure of the hash table of ignored header fields
|
||||
*/
|
||||
struct ignoretab {
|
||||
int i_count; /* Number of entries */
|
||||
struct ignore {
|
||||
struct ignore *i_link; /* Next ignored field in bucket */
|
||||
char *i_field; /* This ignored field */
|
||||
} *i_head[HSHSIZE];
|
||||
};
|
||||
|
||||
/*
|
||||
* Token values returned by the scanner used for argument lists.
|
||||
* Also, sizes of scanner-related things.
|
||||
*/
|
||||
|
||||
#define TEOL 0 /* End of the command line */
|
||||
#define TNUMBER 1 /* A message number */
|
||||
#define TDASH 2 /* A simple dash */
|
||||
#define TSTRING 3 /* A string (possibly containing -) */
|
||||
#define TDOT 4 /* A "." */
|
||||
#define TUP 5 /* An "^" */
|
||||
#define TDOLLAR 6 /* A "$" */
|
||||
#define TSTAR 7 /* A "*" */
|
||||
#define TOPEN 8 /* An '(' */
|
||||
#define TCLOSE 9 /* A ')' */
|
||||
#define TPLUS 10 /* A '+' */
|
||||
#define TERROR 11 /* A lexical error */
|
||||
|
||||
#define REGDEP 2 /* Maximum regret depth. */
|
||||
#define STRINGLEN 1024 /* Maximum length of string token */
|
||||
|
||||
/*
|
||||
* Constants for conditional commands. These describe whether
|
||||
* we should be executing stuff or not.
|
||||
*/
|
||||
|
||||
#define CANY 0 /* Execute in send or receive mode */
|
||||
#define CRCV 1 /* Execute in receive mode only */
|
||||
#define CSEND 2 /* Execute in send mode only */
|
||||
|
||||
/*
|
||||
* Kludges to handle the change from setexit / reset to setjmp / longjmp
|
||||
*/
|
||||
|
||||
#define setexit() setjmp(srbuf)
|
||||
#define reset(x) longjmp(srbuf, x)
|
||||
|
||||
/*
|
||||
* Truncate a file to the last character written. This is
|
||||
* useful just before closing an old file that was opened
|
||||
* for read/write.
|
||||
*/
|
||||
#define trunc(stream) { \
|
||||
(void)fflush(stream); \
|
||||
(void)ftruncate(fileno(stream), (off_t)ftell(stream)); \
|
||||
}
|
||||
264
dll/possum/extern.h
Normal file
264
dll/possum/extern.h
Normal file
@@ -0,0 +1,264 @@
|
||||
/* $OpenBSD: extern.h,v 1.4 1996/06/08 19:48:21 christos Exp $ */
|
||||
/* $NetBSD: extern.h,v 1.4 1996/06/08 19:48:21 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1992, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)extern.h 8.1 (Berkeley) 6/6/93
|
||||
* $NetBSD: extern.h,v 1.4 1996/06/08 19:48:21 christos Exp $
|
||||
*/
|
||||
|
||||
struct name;
|
||||
struct name *cat __P((struct name *, struct name *));
|
||||
struct name *delname __P((struct name *, char []));
|
||||
struct name *elide __P((struct name *));
|
||||
struct name *extract __P((char [], int));
|
||||
struct grouphead;
|
||||
struct name *gexpand __P((struct name *, struct grouphead *, int, int));
|
||||
struct name *nalloc __P((char [], int));
|
||||
struct header;
|
||||
struct name *outof __P((struct name *, FILE *, struct header *));
|
||||
struct name *put __P((struct name *, struct name *));
|
||||
struct name *tailof __P((struct name *));
|
||||
struct name *usermap __P((struct name *));
|
||||
FILE *Fdopen __P((int, char *));
|
||||
FILE *Fopen __P((char *, char *));
|
||||
FILE *Popen __P((char *, char *));
|
||||
FILE *collect __P((struct header *, int));
|
||||
char *copy __P((char *, char *));
|
||||
char *copyin __P((char *, char **));
|
||||
char *detract __P((struct name *, int));
|
||||
char *expand __P((char *));
|
||||
char *getdeadletter __P((void));
|
||||
char *getname __P((int));
|
||||
struct message;
|
||||
char *hfield __P((char [], struct message *));
|
||||
FILE *infix __P((struct header *, FILE *));
|
||||
char *ishfield __P((char [], char[], char *));
|
||||
char *name1 __P((struct message *, int));
|
||||
char *nameof __P((struct message *, int));
|
||||
char *nextword __P((char *, char *));
|
||||
char *readtty __P((char [], char []));
|
||||
char *reedit __P((char *));
|
||||
FILE *run_editor __P((FILE *, off_t, int, int));
|
||||
char *salloc __P((int));
|
||||
char *savestr __P((char *));
|
||||
FILE *setinput __P((struct message *));
|
||||
char *skin __P((char *));
|
||||
char *skip_comment __P((char *));
|
||||
char *snarf __P((char [], int *));
|
||||
char *username __P((void));
|
||||
char *value __P((char []));
|
||||
char *vcopy __P((char []));
|
||||
char *yankword __P((char *, char []));
|
||||
int Fclose __P((FILE *));
|
||||
int More __P((void *));
|
||||
int Pclose __P((FILE *));
|
||||
int Respond __P((void *));
|
||||
int Type __P((void *));
|
||||
int _Respond __P((int []));
|
||||
int _respond __P((int *));
|
||||
void alter __P((char *));
|
||||
int alternates __P((void *));
|
||||
void announce __P((void));
|
||||
int anyof __P((char *, char *));
|
||||
int append __P((struct message *, FILE *));
|
||||
int argcount __P((char **));
|
||||
void assign __P((char [], char []));
|
||||
int bangexp __P((char *));
|
||||
int blankline __P((char []));
|
||||
void brokpipe __P((int));
|
||||
int charcount __P((char *, int));
|
||||
int check __P((int, int));
|
||||
void clob1 __P((int));
|
||||
int clobber __P((void *));
|
||||
void close_all_files __P((void));
|
||||
int cmatch __P((char *, char *));
|
||||
void collhup __P((int));
|
||||
void collint __P((int));
|
||||
void collstop __P((int));
|
||||
void commands __P((void));
|
||||
int copycmd __P((void *));
|
||||
int core __P((void *));
|
||||
int count __P((struct name *));
|
||||
int delete __P((void *));
|
||||
int delm __P((int []));
|
||||
int deltype __P((void *));
|
||||
void demail __P((void));
|
||||
int dosh __P((void *));
|
||||
int dot_lock __P((const char *, int, FILE *, const char *));
|
||||
void dot_unlock __P((const char *));
|
||||
int echo __P((void *));
|
||||
int edit1 __P((int *, int));
|
||||
int editor __P((void *));
|
||||
void edstop __P((void));
|
||||
int elsecmd __P((void *));
|
||||
int endifcmd __P((void *));
|
||||
int evalcol __P((int));
|
||||
int execute __P((char [], int));
|
||||
int exwrite __P((char [], FILE *, int));
|
||||
void fail __P((char [], char []));
|
||||
int file __P((void *));
|
||||
struct grouphead *
|
||||
findgroup __P((char []));
|
||||
void findmail __P((char *, char *));
|
||||
int first __P((int, int));
|
||||
void fixhead __P((struct header *, struct name *));
|
||||
void fmt __P((char *, struct name *, FILE *, int));
|
||||
int folders __P((void *));
|
||||
int forward __P((char [], FILE *, int));
|
||||
void free_child __P((int));
|
||||
int from __P((void *));
|
||||
off_t fsize __P((FILE *));
|
||||
int getfold __P((char *));
|
||||
int gethfield __P((FILE *, char [], int, char **));
|
||||
int getmsglist __P((char *, int *, int));
|
||||
int getrawlist __P((char [], char **, int));
|
||||
int getuserid __P((char []));
|
||||
int grabh __P((struct header *, int));
|
||||
int group __P((void *));
|
||||
void hangup __P((int));
|
||||
int hash __P((char *));
|
||||
void hdrstop __P((int));
|
||||
int headers __P((void *));
|
||||
int help __P((void *));
|
||||
void holdsigs __P((void));
|
||||
int ifcmd __P((void *));
|
||||
int igfield __P((void *));
|
||||
struct ignoretab;
|
||||
int ignore1 __P((char *[], struct ignoretab *, char *));
|
||||
int igshow __P((struct ignoretab *, char *));
|
||||
void intr __P((int));
|
||||
int isdate __P((char []));
|
||||
int isdir __P((char []));
|
||||
int isfileaddr __P((char *));
|
||||
int ishead __P((char []));
|
||||
int isign __P((char *, struct ignoretab []));
|
||||
int isprefix __P((char *, char *));
|
||||
void istrcpy __P((char *, char *));
|
||||
const struct cmd *
|
||||
lex __P((char []));
|
||||
void load __P((char *));
|
||||
struct var *
|
||||
lookup __P((char []));
|
||||
int mail __P((struct name *,
|
||||
struct name *, struct name *, struct name *, char *));
|
||||
void mail1 __P((struct header *, int));
|
||||
void makemessage __P((FILE *));
|
||||
void mark __P((int));
|
||||
int markall __P((char [], int));
|
||||
int matchsender __P((char *, int));
|
||||
int matchsubj __P((char *, int));
|
||||
int mboxit __P((void *));
|
||||
int member __P((char *, struct ignoretab *));
|
||||
void mesedit __P((FILE *, int));
|
||||
void mespipe __P((FILE *, char []));
|
||||
int messize __P((void *));
|
||||
int metamess __P((int, int));
|
||||
int more __P((void *));
|
||||
int newfileinfo __P((void));
|
||||
int next __P((void *));
|
||||
int null __P((void *));
|
||||
void panic __P((const char *, ...))
|
||||
__attribute__((__format__(__printf__,1,2),__noreturn__));
|
||||
struct headline;
|
||||
void parse __P((char [], struct headline *, char []));
|
||||
int pcmdlist __P((void *));
|
||||
int pdot __P((void *));
|
||||
void prepare_child __P((sigset_t *, int, int));
|
||||
int preserve __P((void *));
|
||||
void prettyprint __P((struct name *));
|
||||
void printgroup __P((char []));
|
||||
void printhead __P((int));
|
||||
int puthead __P((struct header *, FILE *, int));
|
||||
int putline __P((FILE *, char *));
|
||||
int pversion __P((void *));
|
||||
void quit __P((void));
|
||||
int quitcmd __P((void *));
|
||||
int raise __P((int));
|
||||
int readline __P((FILE *, char *, int));
|
||||
void register_file __P((FILE *, int, int));
|
||||
void regret __P((int));
|
||||
void relsesigs __P((void));
|
||||
int respond __P((void *));
|
||||
int retfield __P((void *));
|
||||
int rexit __P((void *));
|
||||
int rm __P((char *));
|
||||
int run_command __P((char *, sigset_t *, int, int, char *, char *, char *));
|
||||
int save __P((void *));
|
||||
int save1 __P((char [], int, char *, struct ignoretab *));
|
||||
void savedeadletter __P((FILE *));
|
||||
int saveigfield __P((void *));
|
||||
int savemail __P((char [], FILE *));
|
||||
int saveretfield __P((void *));
|
||||
int scan __P((char **));
|
||||
void scaninit __P((void));
|
||||
int schdir __P((void *));
|
||||
int screensize __P((void));
|
||||
int scroll __P((void *));
|
||||
int send __P((struct message *, FILE *, struct ignoretab *, char *));
|
||||
int sendmail __P((void *));
|
||||
int set __P((void *));
|
||||
int setfile __P((char *));
|
||||
void setmsize __P((int));
|
||||
void setptr __P((FILE *));
|
||||
void setscreensize __P((void));
|
||||
int shell __P((void *));
|
||||
void sigchild __P((int));
|
||||
void sort __P((char **));
|
||||
int source __P((void *));
|
||||
void spreserve __P((void));
|
||||
void sreset __P((void));
|
||||
int start_command __P((char *, sigset_t *, int, int, char *, char *, char *));
|
||||
void statusput __P((struct message *, FILE *, char *));
|
||||
void stop __P((int));
|
||||
int stouch __P((void *));
|
||||
int swrite __P((void *));
|
||||
void tinit __P((void));
|
||||
int top __P((void *));
|
||||
void touch __P((struct message *));
|
||||
void ttyint __P((int));
|
||||
void ttystop __P((int));
|
||||
int type __P((void *));
|
||||
int type1 __P((int *, int, int));
|
||||
int undeletecmd __P((void *));
|
||||
void unmark __P((int));
|
||||
char **unpack __P((struct name *));
|
||||
int unread __P((void *));
|
||||
void unregister_file __P((FILE *));
|
||||
int unset __P((void *));
|
||||
int unstack __P((void));
|
||||
void vfree __P((char *));
|
||||
int visual __P((void *));
|
||||
int wait_child __P((int));
|
||||
int wait_command __P((int));
|
||||
int writeback __P((FILE *));
|
||||
104
dll/possum/glob.h
Normal file
104
dll/possum/glob.h
Normal file
@@ -0,0 +1,104 @@
|
||||
/* $OpenBSD: glob.h,v 1.4 1996/06/08 19:48:25 christos Exp $ */
|
||||
/* $NetBSD: glob.h,v 1.4 1996/06/08 19:48:25 christos Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1980, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* from: @(#)glob.h 8.1 (Berkeley) 6/6/93
|
||||
* $NetBSD: glob.h,v 1.4 1996/06/08 19:48:25 christos Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
* A bunch of global variable declarations lie herein.
|
||||
* def.h must be included first.
|
||||
*/
|
||||
|
||||
int msgCount; /* Count of messages read in */
|
||||
int rcvmode; /* True if receiving mail */
|
||||
int sawcom; /* Set after first command */
|
||||
char *Tflag; /* -T temp file for netnews */
|
||||
int senderr; /* An error while checking */
|
||||
int edit; /* Indicates editing a file */
|
||||
int readonly; /* Will be unable to rewrite file */
|
||||
int noreset; /* String resets suspended */
|
||||
int sourcing; /* Currently reading variant file */
|
||||
int loading; /* Loading user definitions */
|
||||
int cond; /* Current state of conditional exc. */
|
||||
FILE *itf; /* Input temp file buffer */
|
||||
FILE *otf; /* Output temp file buffer */
|
||||
int image; /* File descriptor for image of msg */
|
||||
FILE *input; /* Current command input file */
|
||||
char mailname[PATHSIZE]; /* Name of current file */
|
||||
char prevfile[PATHSIZE]; /* Name of previous file */
|
||||
char *homedir; /* Path name of home directory */
|
||||
char *myname; /* My login name */
|
||||
off_t mailsize; /* Size of system mailbox */
|
||||
int lexnumber; /* Number of TNUMBER from scan() */
|
||||
char lexstring[STRINGLEN]; /* String from TSTRING, scan() */
|
||||
int regretp; /* Pointer to TOS of regret tokens */
|
||||
int regretstack[REGDEP]; /* Stack of regretted tokens */
|
||||
char *string_stack[REGDEP]; /* Stack of regretted strings */
|
||||
int numberstack[REGDEP]; /* Stack of regretted numbers */
|
||||
struct message *dot; /* Pointer to current message */
|
||||
struct message *message; /* The actual message structure */
|
||||
struct var *variables[HSHSIZE]; /* Pointer to active var list */
|
||||
struct grouphead *groups[HSHSIZE];/* Pointer to active groups */
|
||||
struct ignoretab ignore[2]; /* ignored and retained fields
|
||||
0 is ignore, 1 is retain */
|
||||
struct ignoretab saveignore[2]; /* ignored and retained fields
|
||||
on save to folder */
|
||||
struct ignoretab ignoreall[2]; /* special, ignore all headers */
|
||||
char **altnames; /* List of alternate names for user */
|
||||
int debug; /* Debug flag set */
|
||||
int screenwidth; /* Screen width, or best guess */
|
||||
int screenheight; /* Screen height, or best guess,
|
||||
for "header" command */
|
||||
int realscreenheight; /* the real screen height */
|
||||
|
||||
#include <setjmp.h>
|
||||
|
||||
jmp_buf srbuf;
|
||||
|
||||
|
||||
/*
|
||||
* The pointers for the string allocation routines,
|
||||
* there are NSPACE independent areas.
|
||||
* The first holds STRINGSIZE bytes, the next
|
||||
* twice as much, and so on.
|
||||
*/
|
||||
|
||||
#define NSPACE 25 /* Total number of string spaces */
|
||||
struct strings {
|
||||
char *s_topFree; /* Beginning of this area */
|
||||
char *s_nextFree; /* Next alloctable place here */
|
||||
unsigned s_nleft; /* Number of bytes left here */
|
||||
} stringdope[NSPACE];
|
||||
240
dll/possum/head.c
Normal file
240
dll/possum/head.c
Normal file
@@ -0,0 +1,240 @@
|
||||
/* $OpenBSD: head.c,v 1.5 1996/06/08 19:48:26 christos Exp $ */
|
||||
/* $NetBSD: head.c,v 1.5 1996/06/08 19:48:26 christos Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1980, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*#include "def.h"*/
|
||||
#include "head.h"
|
||||
|
||||
/*
|
||||
* Mail -- a mail program
|
||||
*
|
||||
* Routines for processing and detecting headlines.
|
||||
*/
|
||||
|
||||
/*
|
||||
* See if the passed line buffer is a mail header.
|
||||
* Return true if yes. Note the extreme pains to
|
||||
* accomodate all funny formats.
|
||||
*/
|
||||
int ishead(char *linebuf)
|
||||
{
|
||||
register char *cp;
|
||||
struct headline hl;
|
||||
char parbuf[BUFSIZ];
|
||||
|
||||
cp = linebuf;
|
||||
if (*cp++ != 'F' || *cp++ != 'r' || *cp++ != 'o' || *cp++ != 'm' ||
|
||||
*cp++ != ' ')
|
||||
return (0);
|
||||
parse(linebuf, &hl, parbuf);
|
||||
if (hl.l_from == NOSTR || hl.l_date == NOSTR) {
|
||||
fail(linebuf, "No from or date field");
|
||||
return (0);
|
||||
}
|
||||
if (!isdate(hl.l_date)) {
|
||||
fail(linebuf, "Date field not legal date");
|
||||
return (0);
|
||||
}
|
||||
/*
|
||||
* I guess we got it!
|
||||
*/
|
||||
return (1);
|
||||
}
|
||||
|
||||
/*ARGSUSED*/
|
||||
void fail(char *linebuf, char *reason)
|
||||
{
|
||||
|
||||
/*
|
||||
if (value("debug") == NOSTR)
|
||||
return;
|
||||
fprintf(stderr, "\"%s\"\nnot a header because %s\n", linebuf, reason);
|
||||
*/
|
||||
}
|
||||
|
||||
/*
|
||||
* Split a headline into its useful components.
|
||||
* Copy the line into dynamic string space, then set
|
||||
* pointers into the copied line in the passed headline
|
||||
* structure. Actually, it scans.
|
||||
*/
|
||||
void parse(char *line, register struct headline *hl, char *pbuf)
|
||||
{
|
||||
register char *cp;
|
||||
char *sp;
|
||||
char word[LINESIZE];
|
||||
|
||||
hl->l_from = NOSTR;
|
||||
hl->l_tty = NOSTR;
|
||||
hl->l_date = NOSTR;
|
||||
cp = line;
|
||||
sp = pbuf;
|
||||
/*
|
||||
* Skip over "From" first.
|
||||
*/
|
||||
cp = nextword(cp, word);
|
||||
cp = nextword(cp, word);
|
||||
if (*word)
|
||||
hl->l_from = copyin(word, &sp);
|
||||
if (cp != NOSTR && cp[0] == 't' && cp[1] == 't' && cp[2] == 'y') {
|
||||
cp = nextword(cp, word);
|
||||
hl->l_tty = copyin(word, &sp);
|
||||
}
|
||||
if (cp != NOSTR)
|
||||
hl->l_date = copyin(cp, &sp);
|
||||
}
|
||||
|
||||
/*
|
||||
* Copy the string on the left into the string on the right
|
||||
* and bump the right (reference) string pointer by the length.
|
||||
* Thus, dynamically allocate space in the right string, copying
|
||||
* the left string into it.
|
||||
*/
|
||||
char * copyin(register char *src, char **space)
|
||||
{
|
||||
register char *cp;
|
||||
char *top;
|
||||
|
||||
top = cp = *space;
|
||||
while ((*cp++ = *src++) != '\0')
|
||||
;
|
||||
*space = cp;
|
||||
return (top);
|
||||
}
|
||||
|
||||
/*
|
||||
* Test to see if the passed string is a ctime(3) generated
|
||||
* date string as documented in the manual. The template
|
||||
* below is used as the criterion of correctness.
|
||||
* Also, we check for a possible trailing time zone using
|
||||
* the tmztype template.
|
||||
*/
|
||||
|
||||
/*
|
||||
* 'A' An upper case char
|
||||
* 'a' A lower case char
|
||||
* ' ' A space
|
||||
* '0' A digit
|
||||
* 'O' An optional digit or space
|
||||
* ':' A colon
|
||||
* 'N' A new line
|
||||
*/
|
||||
char ctype[] = "Aaa Aaa O0 00:00:00 0000";
|
||||
char ctype_without_secs[] = "Aaa Aaa O0 00:00 0000";
|
||||
char tmztype[] = "Aaa Aaa O0 00:00:00 AAA 0000";
|
||||
char tmztype_without_secs[] = "Aaa Aaa O0 00:00 AAA 0000";
|
||||
|
||||
int isdate(char *date)
|
||||
{
|
||||
return cmatch(date, ctype_without_secs) ||
|
||||
cmatch(date, tmztype_without_secs) ||
|
||||
cmatch(date, ctype) || cmatch(date, tmztype);
|
||||
}
|
||||
|
||||
/*
|
||||
* Match the given string (cp) against the given template (tp).
|
||||
* Return 1 if they match, 0 if they don't
|
||||
*/
|
||||
int cmatch(register char *cp, register char *tp)
|
||||
{
|
||||
|
||||
while (*cp && *tp)
|
||||
switch (*tp++) {
|
||||
case 'a':
|
||||
if (!islower(*cp++))
|
||||
return 0;
|
||||
break;
|
||||
case 'A':
|
||||
if (!isupper(*cp++))
|
||||
return 0;
|
||||
break;
|
||||
case ' ':
|
||||
if (*cp++ != ' ')
|
||||
return 0;
|
||||
break;
|
||||
case '0':
|
||||
if (!isdigit(*cp++))
|
||||
return 0;
|
||||
break;
|
||||
case 'O':
|
||||
if (*cp != ' ' && !isdigit(*cp))
|
||||
return 0;
|
||||
cp++;
|
||||
break;
|
||||
case ':':
|
||||
if (*cp++ != ':')
|
||||
return 0;
|
||||
break;
|
||||
case 'N':
|
||||
if (*cp++ != '\n')
|
||||
return 0;
|
||||
break;
|
||||
}
|
||||
if (*cp || *tp)
|
||||
return 0;
|
||||
return (1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Collect a liberal (space, tab delimited) word into the word buffer
|
||||
* passed. Also, return a pointer to the next word following that,
|
||||
* or NOSTR if none follow.
|
||||
*/
|
||||
char *nextword(register char *wp, register char *wbuf)
|
||||
{
|
||||
register char c;
|
||||
|
||||
if (wp == NOSTR) {
|
||||
*wbuf = 0;
|
||||
return (NOSTR);
|
||||
}
|
||||
while ((c = *wp++) && c != ' ' && c != '\t') {
|
||||
*wbuf++ = c;
|
||||
if (c == '"') {
|
||||
while ((c = *wp++) && c != '"')
|
||||
*wbuf++ = c;
|
||||
if (c == '"')
|
||||
*wbuf++ = c;
|
||||
else
|
||||
wp--;
|
||||
}
|
||||
}
|
||||
*wbuf = '\0';
|
||||
for (; c == ' ' || c == '\t'; c = *wp++)
|
||||
;
|
||||
if (c == 0)
|
||||
return (NOSTR);
|
||||
return (wp - 1);
|
||||
}
|
||||
39
dll/possum/head.h
Normal file
39
dll/possum/head.h
Normal file
@@ -0,0 +1,39 @@
|
||||
#ifndef HEAD_H
|
||||
#define HEAD_H 1
|
||||
|
||||
#include <ctype.h>
|
||||
#include <sys/param.h>
|
||||
#ifdef __EMX__
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
#include <sys/stat.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#include <signal.h>
|
||||
#include <termios.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#define NOSTR ((char *) 0) /* Null string pointer */
|
||||
#define LINESIZE BUFSIZ /* max readable line width */
|
||||
|
||||
|
||||
struct headline {
|
||||
char *l_from;
|
||||
char *l_tty;
|
||||
char *l_date;
|
||||
};
|
||||
|
||||
|
||||
int ishead(char *);
|
||||
void fail(char *, char *);
|
||||
void parse(char *, struct headline *, char *);
|
||||
char *copyin(char *, char **);
|
||||
int isdate(char *);
|
||||
int cmatch(register char *, register char *);
|
||||
char *nextword(register char *, register char *);
|
||||
|
||||
#endif
|
||||
|
||||
86
dll/possum/llist.c
Normal file
86
dll/possum/llist.c
Normal file
@@ -0,0 +1,86 @@
|
||||
#include <stdlib.h>
|
||||
#include "llist.h"
|
||||
|
||||
llist *lmake(size_t size) {
|
||||
llist *l;
|
||||
l = (llist *) malloc(sizeof(llist));
|
||||
if (l) {
|
||||
l->first = l->last = l->current = NULL;
|
||||
l->size = size;
|
||||
l->length = 0;
|
||||
} else l = NULL; /* just making sure malloc returns NULL on a fail */
|
||||
return (l);
|
||||
}
|
||||
|
||||
int ldelete(llist *l) {
|
||||
int retval;
|
||||
if (l) {
|
||||
l->current = l->first; /* make sure we are at the start */
|
||||
while (l->first) {
|
||||
l->current = l->first; /* save the position */
|
||||
l->first = l->first->next; /* save the next position */
|
||||
|
||||
free(l->current->object);
|
||||
free(l->current);
|
||||
}
|
||||
free(l);
|
||||
retval = 0; /* all done deleting */
|
||||
} else
|
||||
retval = 0; /* yeah we deleted nothing */
|
||||
|
||||
return(retval);
|
||||
}
|
||||
|
||||
int lpush(llist *l, void *object) {
|
||||
lnode *new_node;
|
||||
int retval;
|
||||
|
||||
new_node = (lnode *) malloc(sizeof(lnode));
|
||||
if (new_node) {
|
||||
new_node->object = (void *) malloc(l->size);
|
||||
if (new_node->object) {
|
||||
new_node->next = new_node->prev = NULL;
|
||||
memcpy(new_node->object, object, l->size);
|
||||
l->length++;
|
||||
|
||||
if (l->first == NULL) l->first = l->last = l->current = new_node;
|
||||
else if (l->last) {
|
||||
l->last->next = new_node;
|
||||
new_node->prev = l->last;
|
||||
l->last = l->last->next;
|
||||
}
|
||||
retval = 0;
|
||||
} else {
|
||||
free(new_node);
|
||||
retval = 1;
|
||||
}
|
||||
} else
|
||||
retval = 1;
|
||||
|
||||
return(retval);
|
||||
}
|
||||
|
||||
void *lindex(llist *l, size_t x) {
|
||||
int z;
|
||||
lnode *tmp = NULL;
|
||||
void *retval;
|
||||
|
||||
/* while (x > l->length)
|
||||
x = x - l->length; *//* we are allowed to wrap the list */
|
||||
if (x > l->length) return NULL;
|
||||
|
||||
l->current = l->first;
|
||||
|
||||
for (z = 0; z <= x; z++) {
|
||||
if (!l->current) break;
|
||||
tmp = l->current;
|
||||
l->current = l->current->next;
|
||||
}
|
||||
|
||||
if (tmp)
|
||||
retval = tmp->object;
|
||||
else
|
||||
retval = NULL;
|
||||
|
||||
return(retval);
|
||||
}
|
||||
24
dll/possum/llist.h
Normal file
24
dll/possum/llist.h
Normal file
@@ -0,0 +1,24 @@
|
||||
#ifndef LLIST_H
|
||||
#define LLIST_H 1
|
||||
|
||||
struct lnode_struct {
|
||||
void *object;
|
||||
struct lnode_struct *prev, *next;
|
||||
};
|
||||
|
||||
struct llist_struct {
|
||||
struct lnode_struct *first, *last, *current;
|
||||
size_t length, size;
|
||||
};
|
||||
|
||||
typedef struct lnode_struct lnode;
|
||||
typedef struct llist_struct llist;
|
||||
|
||||
llist *lmake(size_t size);
|
||||
int ldelete(llist *l);
|
||||
int lpush(llist *l, void *object);
|
||||
void *lindex(llist *l, size_t x);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
46
dll/possum/pathnames.h
Normal file
46
dll/possum/pathnames.h
Normal file
@@ -0,0 +1,46 @@
|
||||
/* $OpenBSD: pathnames.h,v 1.4 1996/06/08 19:48:34 christos Exp $ */
|
||||
/* $NetBSD: pathnames.h,v 1.4 1996/06/08 19:48:34 christos Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1989, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)pathnames.h 8.1 (Berkeley) 6/6/93
|
||||
* $NetBSD: pathnames.h,v 1.4 1996/06/08 19:48:34 christos Exp $
|
||||
*/
|
||||
|
||||
#include <paths.h>
|
||||
|
||||
#define _PATH_EX "/usr/bin/ex"
|
||||
#define _PATH_HELP "/usr/share/misc/mail.help"
|
||||
#define _PATH_TILDE "/usr/share/misc/mail.tildehelp"
|
||||
#define _PATH_MASTER_RC "/etc/mail.rc"
|
||||
#define _PATH_MORE "/usr/bin/more"
|
||||
246
dll/possum/possum.c
Normal file
246
dll/possum/possum.c
Normal file
@@ -0,0 +1,246 @@
|
||||
/* Possum Mail copyright 1997 Patrick J. Edwards */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "irc.h"
|
||||
#include "struct.h"
|
||||
#include "dcc.h"
|
||||
#include "ircaux.h"
|
||||
#include "ctcp.h"
|
||||
#include "status.h"
|
||||
#include "lastlog.h"
|
||||
#include "server.h"
|
||||
#include "screen.h"
|
||||
#include "vars.h"
|
||||
#include "misc.h"
|
||||
#include "output.h"
|
||||
#include "list.h"
|
||||
#include "module.h"
|
||||
#define INIT_MODULE
|
||||
#include "modval.h"
|
||||
#include "llist.h"
|
||||
#include "head.h"
|
||||
|
||||
#define MAX_FNAME_LENGTH 2048
|
||||
#define MAX_FBUFFER_SIZE 2048
|
||||
#define MAX_HINFO_SIZE 127
|
||||
|
||||
/* structures */
|
||||
|
||||
struct msg_header_struct {
|
||||
char from[MAX_HINFO_SIZE+1],
|
||||
to[MAX_HINFO_SIZE+1],
|
||||
subject[MAX_HINFO_SIZE+1],
|
||||
date[MAX_HINFO_SIZE+1];
|
||||
long body_offset;
|
||||
};
|
||||
typedef struct msg_header_struct msg_header;
|
||||
|
||||
struct mbox_struct {
|
||||
char filename[2048];
|
||||
int number, lastaccess, size;
|
||||
llist *headers;
|
||||
} MBOX;
|
||||
typedef struct mbox_struct mbox;
|
||||
|
||||
#define cparse convert_output_format
|
||||
#define PM_PROMPT "%W<%GP%gosso%GM%W>%n"
|
||||
#define PM_VERSION "0.2"
|
||||
|
||||
/* prototypes */
|
||||
|
||||
char *strchop(char *s);
|
||||
int parse_header(FILE *f, llist *l);
|
||||
llist *read_mbox(char *fname);
|
||||
|
||||
BUILT_IN_DLL(pm_headers);
|
||||
BUILT_IN_DLL(pm_count);
|
||||
BUILT_IN_DLL(pm_list);
|
||||
BUILT_IN_DLL(pm_read);
|
||||
BUILT_IN_DLL(pm_help);
|
||||
BUILT_IN_DLL(pm_mailbox);
|
||||
|
||||
/*
|
||||
void pm_check
|
||||
void pm_update
|
||||
*/
|
||||
char *Possum_Version(IrcCommandDll **intp)
|
||||
{
|
||||
return PM_VERSION;
|
||||
}
|
||||
|
||||
int Possum_Init(IrcCommandDll **intp, Function_ptr *global_table) {
|
||||
char *tmp = getenv("MAIL");
|
||||
|
||||
initialize_module("possum");
|
||||
|
||||
MBOX.headers = NULL;
|
||||
|
||||
add_module_proc(COMMAND_PROC, "possum", "pmheaders", NULL, 0, 0, pm_headers, NULL);
|
||||
add_module_proc(COMMAND_PROC, "possum", "pmcount", NULL, 0, 0, pm_count, NULL);
|
||||
add_module_proc(COMMAND_PROC, "possum", "pmlist", NULL, 0, 0, pm_list, NULL);
|
||||
add_module_proc(COMMAND_PROC, "possum", "pmread", NULL, 0, 0, pm_read, NULL);
|
||||
add_module_proc(COMMAND_PROC, "possum", "pmmailbox", NULL, 0, 0, pm_mailbox, NULL);
|
||||
add_module_proc(COMMAND_PROC, "possum", "pmhelp", NULL, 0, 0, pm_help, NULL);
|
||||
|
||||
if (tmp) strncpy(MBOX.filename, tmp, MAX_FNAME_LENGTH);
|
||||
|
||||
put_it("%s Possom Mail %s for BitchX has been excited.", cparse(PM_PROMPT, NULL, NULL), PM_VERSION);
|
||||
put_it("%s %s", cparse(PM_PROMPT, NULL, NULL), "Type /PMHELP for help.");
|
||||
if (tmp) {
|
||||
put_it("%s Using %s for default mail box.", cparse(PM_PROMPT, NULL, NULL), MBOX.filename);
|
||||
MBOX.headers = read_mbox(MBOX.filename);
|
||||
} else {
|
||||
put_it("%s Could not find MAIL in your environment.", cparse(PM_PROMPT, NULL, NULL));
|
||||
put_it("%s You will have to manually set it with /PMMAILBOX.", cparse(PM_PROMPT,NULL, NULL));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int parse_header(FILE *f, llist *l) {
|
||||
msg_header h;
|
||||
char s[MAX_FBUFFER_SIZE];
|
||||
|
||||
if (!feof(f)) {
|
||||
fgets((char *)s, MAX_FBUFFER_SIZE, f);
|
||||
strchop(s);
|
||||
}
|
||||
|
||||
while ((strcmp(s,"")!=0) && (!feof(f))) {
|
||||
if (strstr(s, "From: ")) {
|
||||
char *tmp = strstr(s,": ")+2;
|
||||
if (tmp) strncpy(h.from, tmp, MAX_HINFO_SIZE);
|
||||
} else if (strstr(s, "Subject: ")) {
|
||||
char *tmp = strstr(s,": ")+2;
|
||||
if (tmp) strncpy(h.subject, tmp, MAX_HINFO_SIZE);
|
||||
} else if (strstr(s, "To: ")) {
|
||||
char *tmp = strstr(s,": ")+2;
|
||||
if (tmp) strncpy(h.to, tmp, MAX_HINFO_SIZE);
|
||||
} else if (strstr(s, "Date: ")) {
|
||||
char *tmp = strstr(s,": ")+2;
|
||||
if (tmp) strncpy(h.date, tmp, MAX_HINFO_SIZE);
|
||||
}
|
||||
fgets((char *)s, MAX_FBUFFER_SIZE, f);
|
||||
strchop(s);
|
||||
}
|
||||
h.body_offset = ftell(f);
|
||||
return(lpush(l, &h));
|
||||
}
|
||||
|
||||
char *strchop(char *s) {
|
||||
if (s) s[strlen(s)-1] = '\0';
|
||||
return(s);
|
||||
}
|
||||
|
||||
llist *read_mbox(char *fname)
|
||||
{
|
||||
FILE *f;
|
||||
llist *headers;
|
||||
char *buf = (char *) malloc(MAX_FBUFFER_SIZE);
|
||||
|
||||
f = fopen(fname, "r");
|
||||
if (!f) return(NULL);
|
||||
|
||||
|
||||
headers = lmake(sizeof(msg_header));
|
||||
if (!headers) return(NULL);
|
||||
|
||||
while (!feof(f)) {
|
||||
fgets(buf, MAX_FBUFFER_SIZE, f);
|
||||
strchop(buf);
|
||||
if (ishead(buf)) {
|
||||
parse_header(f, headers);
|
||||
/* put_it("found header %d", headers->length);*/
|
||||
}
|
||||
}
|
||||
|
||||
fclose(f);
|
||||
return(headers);
|
||||
}
|
||||
|
||||
BUILT_IN_DLL(pm_mailbox)
|
||||
{
|
||||
char *tmp;
|
||||
tmp = next_arg(args, &args);
|
||||
if (tmp) {
|
||||
strncpy(MBOX.filename, tmp, MAX_FNAME_LENGTH);
|
||||
put_it("%s Set mail box to: %s ", cparse(PM_PROMPT, NULL, NULL), MBOX.filename);
|
||||
} else
|
||||
put_it("%s You have to enter your mail box.", cparse(PM_PROMPT, NULL, NULL));
|
||||
}
|
||||
|
||||
BUILT_IN_DLL(pm_help)
|
||||
{
|
||||
put_it("%s Possum Mail %s", cparse(PM_PROMPT, NULL, NULL), PM_VERSION);
|
||||
put_it("%s /PMHELP - This help.", cparse(PM_PROMPT, NULL, NULL));
|
||||
put_it("%s /PMMAILBOX - Set your mailbox.", cparse(PM_PROMPT, NULL,NULL));
|
||||
put_it("%s /PMREAD [x] - Read the xth email.", cparse(PM_PROMPT, NULL, NULL));
|
||||
put_it("%s /PMLIST - Lists all email From: lines.", cparse(PM_PROMPT, NULL, NULL));
|
||||
put_it("%s /PMCOUNT - Returns the number of emails in the mail box.", cparse(PM_PROMPT, NULL, NULL));
|
||||
}
|
||||
|
||||
/* this is a rather ugly and inefficent piece of code. blech. */
|
||||
BUILT_IN_DLL(pm_read)
|
||||
{
|
||||
char *number, *s;
|
||||
int num, have_head=0;
|
||||
FILE *f;
|
||||
msg_header *h = NULL;
|
||||
|
||||
number = next_arg(args, &args);
|
||||
if (number) num = atoi(number);
|
||||
else {
|
||||
put_it("%s You have to provide an arguement.", cparse(PM_PROMPT, NULL, NULL));
|
||||
return;
|
||||
}
|
||||
if (MBOX.headers && (num-1 > MBOX.headers->length)) return;
|
||||
|
||||
s = (char *) malloc(MAX_FBUFFER_SIZE);
|
||||
if (!s) return;
|
||||
|
||||
f = fopen(MBOX.filename, "r");
|
||||
if (!f) return;
|
||||
|
||||
h = lindex(MBOX.headers, num-1);
|
||||
|
||||
if (h && !have_head) {
|
||||
put_it("%s", cparse(PM_PROMPT" %W<%YFrom%W>%n $0-", "%s", h->from));
|
||||
put_it("%s", cparse(PM_PROMPT" %W<%YDate%W>%n $0-", "%s", h->date));
|
||||
put_it("%s", cparse(PM_PROMPT" %W<%YSubject%W>%n $0-", "%s", h->subject));
|
||||
fseek(f, h->body_offset, SEEK_SET);
|
||||
do {
|
||||
strchop(fgets(s, 2560, f));
|
||||
if (ishead(s)) {
|
||||
have_head = 1;
|
||||
break;
|
||||
}
|
||||
put_it("%s%s", cparse("%G|%n", NULL, NULL), s);
|
||||
} while (!feof(f));
|
||||
}
|
||||
|
||||
free(s);
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
BUILT_IN_DLL(pm_list)
|
||||
{
|
||||
unsigned long counter = 0;
|
||||
msg_header *h;
|
||||
|
||||
do {
|
||||
h = lindex(MBOX.headers, counter);
|
||||
if (h)
|
||||
put_it("%s", cparse(PM_PROMPT" %W<%Y$0%W>%n $1-", "%d %s", ++counter, h->from));
|
||||
} while (h);
|
||||
}
|
||||
|
||||
|
||||
BUILT_IN_DLL(pm_headers)
|
||||
{
|
||||
}
|
||||
|
||||
BUILT_IN_DLL(pm_count)
|
||||
{
|
||||
if (MBOX.headers)
|
||||
put_it("%s Email Count: %d", cparse(PM_PROMPT,NULL, NULL), MBOX.headers->length);
|
||||
}
|
||||
35
dll/possum/possum.sh
Normal file
35
dll/possum/possum.sh
Normal file
@@ -0,0 +1,35 @@
|
||||
#!/bin/sh
|
||||
# Make .def file:
|
||||
export LIBPATH=/usr/local/cygwin-new/i586-pc-cygwin/lib
|
||||
export LD=/usr/local/cygwin-new/bin/i586-pc-cygwin-ld
|
||||
export NM=/usr/local/cygwin-new/bin/i586-pc-cygwin-nm
|
||||
export DLLTOOL=/usr/local/cygwin-new/bin/i586-pc-cygwin-dlltool
|
||||
export AS=/usr/local/cygwin-new/bin/i586-pc-cygwin-as
|
||||
export GCC=/usr/local/cygwin-new/bin/i586-pc-cygwin-gcc
|
||||
CP=cp
|
||||
RM=rm
|
||||
|
||||
$GCC -I../../include -c head.c
|
||||
$GCC -I../../include -c llist.c
|
||||
$GCC -I../../include -c possum.c
|
||||
|
||||
echo EXPORTS > possum.def
|
||||
$NM head.o llist.o possum.o ../init.o ../fixup.o | grep '^........ [T] _' | sed 's/[^_]*_//' >> possum.def
|
||||
|
||||
# Link DLL.
|
||||
$LD --base-file possum.base --dll -o possum.dll head.o llist.o possum.o ../init.o ../fixup.o\
|
||||
$LIBPATH/libcygwin.a $LIBPATH/libkernel32.a -e _dll_entry@12
|
||||
$DLLTOOL --as=$AS --dllname possum.dll --def possum.def --base-file\
|
||||
possum.base --output-exp possum.exp
|
||||
$LD --base-file possum.base possum.exp --dll -o possum.dll head.o llist.o possum.o\
|
||||
../init.o ../fixup.o $LIBPATH/libcygwin.a $LIBPATH/libkernel32.a -e _dll_entry@12
|
||||
$DLLTOOL --as=$AS --dllname possum.dll --def possum.def --base-file\
|
||||
possum.base --output-exp possum.exp
|
||||
$LD possum.exp --dll -o possum.dll head.o llist.o possum.o ../init.o ../fixup.o\
|
||||
$LIBPATH/libcygwin.a $LIBPATH/libkernel32.a -e _dll_entry@12
|
||||
|
||||
# Build the possumB.a lib to link to:
|
||||
$DLLTOOL --as=$AS --dllname possum.dll --def possum.def --output-lib possum.a
|
||||
|
||||
$RM *.base *.exp *.def
|
||||
$CP *.dll ..
|
||||
48
dll/possum/rcv.h
Normal file
48
dll/possum/rcv.h
Normal file
@@ -0,0 +1,48 @@
|
||||
/* $OpenBSD: rcv.h,v 1.4 1996/06/08 19:48:38 christos Exp $ */
|
||||
/* $NetBSD: rcv.h,v 1.4 1996/06/08 19:48:38 christos Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1980, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)rcv.h 8.1 (Berkeley) 6/6/93
|
||||
* $NetBSD: rcv.h,v 1.4 1996/06/08 19:48:38 christos Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
* Mail -- a mail program
|
||||
*
|
||||
* This file is included by normal files which want both
|
||||
* globals and declarations.
|
||||
*/
|
||||
|
||||
#include "def.h"
|
||||
#include "glob.h"
|
||||
Reference in New Issue
Block a user