dslinux/user/bitchx/dll/possum Makefile.in VERSION def.h extern.h glob.h head.c head.h llist.c llist.h pathnames.h possum.c possum.sh rcv.h
stsp
stsp at user.in-berlin.de
Sun Jul 2 15:18:37 CEST 2006
Update of /cvsroot/dslinux/dslinux/user/bitchx/dll/possum
In directory antilope:/tmp/cvs-serv9280/dll/possum
Added Files:
Makefile.in VERSION def.h extern.h glob.h head.c head.h
llist.c llist.h pathnames.h possum.c possum.sh rcv.h
Log Message:
Adding pristine copy of BitchX so I can branch from it.
--- NEW FILE: glob.h ---
/* $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];
--- NEW FILE: def.h ---
/* $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)); \
}
--- NEW FILE: Makefile.in ---
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)
--- NEW FILE: possum.c ---
/* 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);
}
--- NEW FILE: pathnames.h ---
/* $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"
--- NEW FILE: llist.c ---
#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);
}
--- NEW FILE: head.c ---
/* $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);
}
--- NEW FILE: rcv.h ---
/* $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"
--- NEW FILE: VERSION ---
0.2
--- NEW FILE: possum.sh ---
#!/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 at 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 at 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 at 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 ..
--- NEW FILE: llist.h ---
#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
--- NEW FILE: head.h ---
#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
--- NEW FILE: extern.h ---
/* $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 *));
More information about the dslinux-commit
mailing list