mh@roger.imsd.contel.com (Mike Hoegeman) (01/19/91)
Here is a shar file which is an update to my NeWS version of elvis
which i posted a week or so ago. This update allows pasting from the
xview shelf selection buffer. Just paste from the named buffer x
e.g. this..
"xp
or this..
"xP
To get whatever is in the xview shelf selection. I found myself wanting
to paste stuff from xview into elvis. I found it was pretty easy to do
so I put it in. A note: If you are in dumb tty mode you'll get a "can't
paste from xview" on the message line. Cutting to xview is not present
as it is somewhat more involved but I'll get around to it eventually.
-mike hoegeman, mh@roger.imsd.contel.com
p.s. You may have to tweak around with the makefile a bit
----------------------------------CUT HERE------------------------------------
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
# cut.c
# Makefile
# config.h
# ow.c
# ow_xv.c
# wconfig.h
# CHANGE_NOTES
# This archive created: Fri Jan 18 13:26:42 1991
export PATH; PATH=/bin:$PATH
if test -f 'cut.c'
then
echo shar: will not over-write existing file "'cut.c'"
else
cat << \SHAR_EOF > 'cut.c'
/* cut.c */
/* Author:
* Steve Kirkendall
* 14407 SW Teal Blvd. #C
* Beaverton, OR 97005
* kirkenda@cs.pdx.edu
*/
/* This file contains function which manipulate the cut buffers. */
#include "config.h"
#include "vi.h"
#if TURBOC
#include <process.h> /* needed for getpid */
#endif
#if TOS
#include <osbind.h>
#define rename(a,b) Frename(0,a,b)
#endif
# define NANNONS 9 /* number of annonymous buffers */
static struct cutbuf
{
short *phys; /* pointer to an array of #s of BLKs containing text */
int nblks; /* number of blocks in phys[] array */
int start; /* offset into first block of start of cut */
int end; /* offset into last block of end of cut */
int fd; /* fd of tmp file, or -1 to use tmpfd */
char lnmode; /* boolean: line-mode cut? (as opposed to char-mode) */
}
named[27], /* cut buffers "a through "z and ". */
annon[NANNONS]; /* annonymous cut buffers */
static char cbname; /* name chosen for next cut/paste operation */
#ifndef NO_RECYCLE
/* This function builds a list of all blocks needed in the current tmp file
* for the contents of cut buffers.
* !!! WARNING: if you have more than ~450000 bytes of text in all of the
* cut buffers, then this will fail disastrously, because buffer overflow
* is *not* allowed for.
*/
int cutneeds(need)
BLK *need; /* this is where we deposit the list */
{
struct cutbuf *cb; /* used to count through cut buffers */
int i; /* used to count through blocks of a cut buffer */
int n; /* total number of blocks in list */
n = 0;
/* first the named buffers... */
for (cb = named; cb < &named[27]; cb++)
{
if (cb->fd > 0)
continue;
for (i = cb->nblks; i-- > 0; )
{
need->n[n++] = cb->phys[i];
}
}
/* then the anonymous buffers */
for (cb = annon; cb < &annon[NANNONS]; cb++)
{
if (cb->fd > 0)
continue;
for (i = cb->nblks; i-- > 0; )
{
need->n[n++] = cb->phys[i];
}
}
return n;
}
#endif
/* This function frees a cut buffer */
static void cutfree(buf)
struct cutbuf *buf;
{
char cutfname[50];
int i;
/* return immediately if the buffer is already empty */
if (buf->nblks <= 0)
{
return;
}
/* else free up stuff */
buf->nblks = 0;
#ifdef DEBUG
if (!buf->phys)
msg("cutfree() tried to free an NULL buf->phys pointer.");
#endif
free((char *)buf->phys);
/* see if anybody else needs this tmp file */
if (buf->fd >= 0)
{
for (i = 0; i < 27; i++)
{
if (named[i].nblks > 0 && named[i].fd == buf->fd)
{
break;
}
}
}
/* if nobody else needs it, then discard the tmp file */
if (buf->fd >= 0 && i == 27)
{
close(buf->fd);
#if MSDOS || TOS
strcpy(cutfname, o_directory);
if ((i = strlen(cutfname)) && !strchr(":/\\", cutfname[i-1]))
cutfname[i++]=SLASH;
sprintf(cutfname+i, CUTNAME+3, getpid(), buf->fd);
#else
sprintf(cutfname, CUTNAME, o_directory, getpid(), buf->fd);
#endif
unlink(cutfname);
}
}
/* This function is called when we are about to abort a tmp file. If any
* cut buffers still need the file, then a copy of the file should be
* created for use by the cut buffers.
*
* To minimize the number of extra files lying around, only named cut buffers
* are preserved in a file switch; the annonymous buffers just go away.
*/
void cutswitch(tmpname)
char *tmpname; /* name of the tmp file */
{
char cutfname[50]; /* used to build a new name for the tmp file */
int fd; /* a new fd for the current tmp file */
int i;
#if MSDOS || TOS
int j;
#endif
/* discard all annonymous cut buffers */
for (i = 0; i < NANNONS; i++)
{
cutfree(&annon[i]);
}
/* find the first named buffer that uses this tmp file */
for (i = 0; i < 27; i++)
{
if (named[i].nblks > 0 && named[i].fd < 0)
{
break;
}
}
/* if none of them use this tmp file, then we're done */
if (i == 27)
{
return;
}
/* else we'll need this file and an fd a little longer */
#if MSDOS || TOS
strcpy(cutfname, o_directory);
if ((j = strlen(cutfname)) && !strchr(":/\\", cutfname[j-1]))
cutfname[j++]=SLASH;
close(tmpfd);
fd = open(tmpname, O_RDONLY|O_BINARY);
close(fd);
sprintf(cutfname+j, CUTNAME+3, getpid(), fd);
rename(tmpname, cutfname);
fd = open(cutfname, O_RDONLY|O_BINARY);
tmpfd = -1; /* we'll try to close this in tmp.c, but who cares? */
#else
fd = dup(tmpfd);
# if OSK
sprintf(cutfname, CUTNAME, "", getpid(), fd);
if (!link(tmpname, &cutfname[1])) /* skip slash */
unlink(tmpname);
# else
sprintf(cutfname, CUTNAME, o_directory, getpid(), fd);
link(tmpname, cutfname) || unlink(tmpname);
# endif
#endif
/* have all cut buffers use the new fd instead */
for (; i < 27; i++)
{
if (named[i].nblks > 0 && named[i].fd < 0)
{
named[i].fd = fd;
}
}
}
/* This function should be called just before termination of vi */
void cutend()
{
int i;
/* free all named cut buffers, since they might be forcing an older
* tmp file to be retained.
*/
for (i = 0; i < 27; i++)
{
cutfree(&named[i]);
}
}
/* This function is used to select the cut buffer to be used next */
void cutname(name)
int name; /* a single character */
{
cbname = name;
}
/* This function copies a selected segment of text to a cut buffer */
void cut(from, to)
MARK from; /* start of text to cut */
MARK to; /* end of text to cut */
{
int first; /* logical number of first block in cut */
int last; /* logical number of last block used in cut */
long line; /* a line number */
int lnmode; /* boolean: will this be a line-mode cut? */
MARK delthru;/* end of text temporarily inserted for apnd */
REG struct cutbuf *cb;
REG long l;
REG int i;
REG char *scan;
char *blkc;
/* detect whether this must be a line-mode cut or char-mode cut */
if (markidx(from) == 0 && markidx(to) == 0)
lnmode = TRUE;
else
lnmode = FALSE;
/* by default, we don't "delthru" anything */
delthru = MARK_UNSET;
/* decide which cut buffer to use */
if (Iswindowpastebuf(cbname))
{
msg("Cutting to the window system not supported");
cbname = '\0';
return;
}
else if (!cbname)
{
/* free up the last annonymous cut buffer */
cutfree(&annon[NANNONS - 1]);
/* shift the annonymous cut buffers */
for (i = NANNONS - 1; i > 0; i--)
{
annon[i] = annon[i - 1];
}
/* use the first annonymous cut buffer */
cb = annon;
cb->nblks = 0;
}
else if (cbname >= 'a' && cbname <= 'z')
{
cb = &named[cbname - 'a'];
cutfree(cb);
}
#ifndef CRUNCH
else if (cbname >= 'A' && cbname <= 'Z')
{
cb = &named[cbname - 'A'];
if (cb->nblks > 0)
{
/* resolve linemode/charmode differences */
if (!lnmode && cb->lnmode)
{
from &= ~(BLKSIZE - 1);
if (markidx(to) != 0 || to == from)
{
to = to + BLKSIZE - markidx(to);
}
lnmode = TRUE;
}
/* insert the old cut-buffer before the new text */
mark[28] = to;
delthru = paste(from, FALSE, TRUE);
if (delthru == MARK_UNSET)
{
return;
}
delthru++;
to = mark[28];
}
cutfree(cb);
}
#endif /* not CRUNCH */
else if (cbname == '.')
{
cb = &named[26];
cutfree(cb);
}
else
{
msg("Invalid cut buffer name: \"%c", cbname);
cbname = '\0';
return;
}
cbname = '\0';
cb->fd = -1;
/* detect whether we're doing a line mode cut */
cb->lnmode = lnmode;
/* ---------- */
/* Reporting... */
if (markidx(from) == 0 && markidx(to) == 0)
{
rptlines = markline(to) - markline(from);
rptlabel = "yanked";
}
/* ---------- */
/* make sure each block has a physical disk address */
blksync();
/* find the first block in the cut */
line = markline(from);
for (first = 1; line > lnum[first]; first++)
{
}
/* fetch text of the block containing that line */
blkc = scan = blkget(first)->c;
/* find the mark in the block */
for (l = lnum[first - 1]; ++l < line; )
{
while (*scan++ != '\n')
{
}
}
scan += markidx(from);
/* remember the offset of the start */
cb->start = scan - blkc;
/* ---------- */
/* find the last block in the cut */
line = markline(to);
for (last = first; line > lnum[last]; last++)
{
}
/* fetch text of the block containing that line */
if (last != first)
{
blkc = scan = blkget(last)->c;
}
else
{
scan = blkc;
}
/* find the mark in the block */
for (l = lnum[last - 1]; ++l < line; )
{
while (*scan++ != '\n')
{
}
}
if (markline(to) <= nlines)
{
scan += markidx(to);
}
/* remember the offset of the end */
cb->end = scan - blkc;
/* ------- */
/* remember the physical block numbers of all included blocks */
cb->nblks = last - first;
if (cb->end > 0)
{
cb->nblks++;
}
#ifdef lint
cb->phys = (short *)0;
#else
cb->phys = (short *)malloc((unsigned)(cb->nblks * sizeof(short)));
#endif
for (i = 0; i < cb->nblks; i++)
{
cb->phys[i] = hdr.n[first++];
}
#ifndef CRUNCH
/* if we temporarily inserted text for appending, then delete that
* text now -- before the user sees it.
*/
if (delthru)
{
line = rptlines;
delete(from, delthru);
rptlines = line;
rptlabel = "yanked";
}
#endif /* not CRUNCH */
}
static void readcutblk(cb, blkno)
struct cutbuf *cb;
int blkno;
{
int fd; /* either tmpfd or cb->fd */
/* decide which fd to use */
if (cb->fd >= 0)
{
fd = cb->fd;
}
else
{
fd = tmpfd;
}
/* get the block */
lseek(fd, (long)cb->phys[blkno] * (long)BLKSIZE, 0);
if (read(fd, tmpblk.c, (unsigned)BLKSIZE) != BLKSIZE)
{
msg("Error reading back from tmp file for pasting!");
}
}
/* This function inserts text from a cut buffer, and returns the MARK where
* insertion ended. Return MARK_UNSET on errors.
*/
MARK paste(at, after, retend)
MARK at; /* where to insert the text */
int after; /* boolean: insert after mark? (rather than before) */
int retend; /* boolean: return end of text? (rather than start) */
{
REG struct cutbuf *cb;
REG int i;
/* decide which cut buffer to use */
if (Iswindowpastebuf(cbname))
{
}
else if (cbname >= 'A' && cbname <= 'Z')
{
cb = &named[cbname - 'A'];
}
else if (cbname >= 'a' && cbname <= 'z')
{
cb = &named[cbname - 'a'];
}
else if (cbname >= '1' && cbname <= '9')
{
cb = &annon[cbname - '1'];
}
else if (cbname == '.')
{
cb = &named[26];
}
else if (!cbname)
{
cb = annon;
}
else
{
msg("Invalid cut buffer name: \"%c", cbname);
cbname = '\0';
return MARK_UNSET;
}
/* make sure it isn't empty */
if (!Iswindowpastebuf(cbname) && cb->nblks == 0)
{
if (cbname)
msg("Cut buffer \"%c is empty", cbname);
else
msg("Cut buffer is empty");
cbname = '\0';
return MARK_UNSET;
}
/* adjust the insertion MARK for "after" and line-mode cuts */
if (!Iswindowpastebuf(cbname) && cb->lnmode)
{
at &= ~(BLKSIZE - 1);
if (after)
{
at += BLKSIZE;
}
}
else if (after)
{
/* careful! if markidx(at) == 0 we might be pasting into an
* empty line -- so we can't blindly increment "at".
*/
if (markidx(at) == 0)
{
pfetch(markline(at));
if (plen != 0)
{
at++;
}
}
else
{
at++;
}
}
/* put a copy of the "at" mark in the mark[] array, so it stays in
* sync with changes made via add().
*/
mark[27] = at;
if (Iswindowpastebuf(cbname))
{
if (Windowpaste(cbname,at) < 0)
{
cbname = '\0';
return MARK_UNSET;
}
}
else if (cb->nblks == 1) /* simple one-block paste? */
{
/* get the block */
readcutblk(cb, 0);
/* isolate the text we need within it */
if (cb->end)
{
tmpblk.c[cb->end] = '\0';
}
/* insert it */
ChangeText
{
add(at, &tmpblk.c[cb->start]);
}
}
else
{
/* multi-block paste */
ChangeText
{
i = cb->nblks - 1;
/* add text from the last block first */
if (cb->end > 0)
{
readcutblk(cb, i);
tmpblk.c[cb->end] = '\0';
add(at, tmpblk.c);
i--;
}
/* add intervening blocks */
while (i > 0)
{
readcutblk(cb, i);
add(at, tmpblk.c);
i--;
}
/* add text from the first cut block */
readcutblk(cb, 0);
add(at, &tmpblk.c[cb->start]);
}
}
cbname = '\0';
/* Reporting... */
rptlines = markline(mark[27]) - markline(at);
rptlabel = "pasted";
/* return the mark at the beginning/end of inserted text */
if (retend)
{
return mark[27] - 1L;
}
return at;
}
#ifndef NO_AT
/* This function copies characters from a cut buffer into a string.
* It returns the number of characters in the cut buffer. If the cut
* buffer is too large to fit in the string (i.e. if cb2str() returns
* a number >= size) then the characters will not have been copied.
* It returns 0 if the cut buffer is empty, and -1 for invalid cut buffers.
*/
int cb2str(name, buf, size)
int name; /* the name of a cut-buffer to get: a-z only! */
char *buf; /* where to put the string */
unsigned size; /* size of buf */
{
REG struct cutbuf *cb;
REG char *src;
REG char *dest;
/* decide which cut buffer to use */
if (name >= 'a' && name <= 'z')
{
cb = &named[name - 'a'];
}
else
{
return -1;
}
/* if the buffer is empty, return 0 */
if (cb->nblks == 0)
{
return 0;
}
/* !!! if not a single-block cut, then fail */
if (cb->nblks != 1)
{
return size;
}
/* if too big, return the size now, without doing anything */
if (cb->end - cb->start >= size)
{
return cb->end - cb->start;
}
/* get the block */
readcutblk(cb, 0);
/* isolate the string within that blk */
if (cb->start == 0)
{
tmpblk.c[cb->end] = '\0';
}
else
{
for (dest = tmpblk.c, src = dest + cb->start; src < tmpblk.c + cb->end; )
{
*dest++ = *src++;
}
*dest = '\0';
}
/* copy the string into the buffer */
if (buf != tmpblk.c)
{
strcpy(buf, tmpblk.c);
}
/* return the length */
return cb->end - cb->start;
}
#endif
SHAR_EOF
fi # end of overwriting check
if test -f 'Makefile'
then
echo shar: will not over-write existing file "'Makefile'"
else
cat << \SHAR_EOF > 'Makefile'
# combined Makefile for ELVIS - a clone of `vi`
#
# After editing this Makefile as described below, you should...
#
# Use `make` to compile all programs
# Use `make install` to copy the programs to the BIN directory
# Use `make clean` to remove all object files
# Use `make clobber` to remove everything except source & documentation
# Use `make tags` to build new "tags" and "refs" files
# Use `make uue` to produce uuencoded compressed tar archives of the source
# Use `make sh` to produce shar archives of the source
# Use `make print` to print the Elvis documentation
#
# Several groups of Makefile settings are included below. Choose *ONE* group
# of settings for your particular system, and leave the others commented out.
# The meanings of these settings are:
# O the filename extension for unlinked object files -- usually .o
# E the filename extension for executable files -- usually null
# EXTRA version-specific object files used in elvis
# EXTRA2 version-specific object files used in elvis, virec, & refont
# LIBS any special libraries, such as "-ltermcap"
# BIN directory where executables should be installed
# CC the C compiler command, possibly with "memory model" flags
# CFLAGS compiler flags used to select compile-time options
# OF link flag to control the output file's name -- usually -o<space>
# RF flag used to denote "compile but don't link" -- usually -c
# DATE a "cc" flag that defines "DATE". e.g. DATE=-DDATE=\"7/4/76\"
# EVAL the word "eval", if DATE requires it
# PROGS the list of all programs
# CHMEM any extra commands to be run after ELVIS is linked
# SORT if the "tags" file must be sorted, then SORT=-DSORT
# INST installation method: inst.dos, inst.tos, inst.os9, or inst.unix
# RM the name of a program that deletes files
# PR1 used to print documentation -- typically "refont -c"
# PR2 used to send text to printer -- typically "| lpr"
# DUMMY usually nothing, but OS9 needs "dummy"
# DOC name of "doc" directory, with a trailing slash
#---- These settings are recommended for System-V UNIX and SCO XENIX-386 ----
#O= .o
#E=
#EXTRA=
#EXTRA2=
#LIBS= -ltermcap
#BIN= /usr/local/bin
#CFLAGS= -DM_SYSV -O
#OF= -o
#RF= -c
#DATE= -DDATE=\'\"`date`\"\'
#EVAL= eval
#PROGS= elvis$E ctags$E ref$E virec$E refont$E
#CHMEM=
#SORT= -DSORT
#INST= inst.unix
#RM= rm -f
#PR1= refont -c
#PR2= | lp
#DUMMY=
#DOC= doc/
#---- These settings are recommended for SCO XENIX-286 ----
#O= .o
#E=
#EXTRA=
#EXTRA2=
#LIBS= -ltermcap
#BIN= /usr/local/bin
#CC= cc -M2s -i
#CFLAGS= -DM_SYSV -Ox -DCS_IBMPC
#OF= -o
#RF= -c
#DATE= -DDATE=\'\"`date`\"\'
#EVAL= eval
#PROGS= elvis$E ctags$E ref$E virec$E refont$E
#CHMEM=
#SORT= -DSORT
#INST= inst.unix
#RM= rm -f
#PR1= refont -c
#PR2= | lp
#DUMMY=
#DOC= doc/
#---- These settings are recommended for BSD 4.3 UNIX ----
#O= .o
#E=
#EXTRA=
#EXTRA2=
#LIBS= -ltermcap
#BIN= /usr/local/bin
#CFLAGS= -Dbsd -O
#OF= -o
#RF= -c
#DATE= -DDATE=\'\"`date`\"\'
#EVAL= eval
#PROGS= elvis$E ctags$E ref$E virec$E refont$E
#CHMEM=
#SORT= -DSORT
#INST= inst.unix
#RM= rm -f
#PR1= refont -c
#PR2= | lpr
#DUMMY=
#DOC= doc/
#---- These settings are recommended for sunOS with OPENWINDOWS (X11/NeWS)
CHOWN=echo "Chown turned off, would be --> chown"
#CC=gcc -traditional -g
CC=cc -O
O= .o
E=
EXTRA= ow$O ow_xv$O
EXTRA2=
LIBS=-lwire -lcps -ltermcap -lxview -lolgx -lX11
BIN=/usr/local/bin
PS=$(BIN)/elvis.ps
#PS=/usr/local/src/share/elvis.ps
CFLAGS= -DMALLOC_DEBUG=0 -DSUNOS=1 -Dbsd -DRUNFILE=\"$(PS)\" -DOPENWINDOWS=1 \
-I$(OPENWINHOME)/include -L$(OPENWINHOME)/lib
OF=-o
RF= -c
DATE= -DDATE=\'\"`date`\"\'
EVAL= eval
PROGS= elvis_cps.h elvis.ps elvis$E ctags$E ref$E virec$E refont$E
CHMEM=
SORT= -DSORT
INST= inst.unix
RM= rm -f
PR1= refont -c
PR2= | lpr
DUMMY=
DOC= doc/
#---- These settings are recommended for Coherent ----
#O=.o
#E=
#EXTRA=
#EXTRA2=
#LIBS= -lterm
#BIN= /usr/bin
#CC= cc
#CFLAGS= -O -DCOHERENT -DCRUNCH -DNO_CHARATTR -DNO_CURSORSHAPE \
# -DNO_DIGRAPH -DNO_MKEXRC -VSUVAR
#OF= -o
#RF= -c
#DATE= -DDATE=\'\"`date`\"\'
#EVAL= eval
#PROGS= elvis$E ctags$E ref$E virec$E refont$E
#CHMEM= fixstack 2000 elvis$E
#SORT=
#INST= inst.unix
#RM= rm -f
#PR1= refont -b
#PR2= | lpr
#DUMMY=
#DOC= doc/
#---- These settings are recommended for Minix-ST ----
#O= .o
#E=
#EXTRA=
#EXTRA2=
#LIBS=
#BIN= /usr/bin
#CC= cc
#CFLAGS=
#OF= -o
#RF= -c
#DATE= -DDATE=\'\"`date`\"\'
#EVAL= eval
#PROGS= elvis$E ctags$E ref$E virec$E refont$E
#CHMEM= chmem =18000 elvis
#SORT=
#INST= inst.unix
#RM= rm -f
#PR1= lpr
#PR2=
#DUMMY=
#DOC= doc/
#---- These settings are recommended for Minix-PC ----
#O= .s
#E=
#EXTRA= tinytcap$O
#EXTRA2=
#LIBS=
#BIN= /usr/bin
#CC= cc -i
#CFLAGS= -O -DCRUNCH -DNO_MKEXRC -DNO_CURSORSHAPE -DNO_CHARATTR \
# -DNO_SHOWMODE -DNO_MODELINE -DNO_OPTCOLS -DNO_DIGRAPH -DNO_ABBR \
# -DNO_AT -DNO_SENTENCE -DNO_ERRLIST
#### (all but -DNO_EXTENSIONS, -DNO_RECYCLE, -DNO_MAGIC, and -DNO_CHARSEARCH)
#OF= -o
#RF= -c
#DATE= -DDATE=\'\"`date`\"\'
#EVAL= eval
#PROGS= elvis$E ctags$E ref$E virec$E refont$E
#CHMEM=
#SORT=
#INST= inst.unix
#RM= rm -f
#PR1= lpr
#PR2=
#DUMMY=
#DOC= doc/
#---- These settings are recommended for MS-DOS + MS-C + NDMAKE ----
#O= .obj
#E= .exe
#EXTRA= pc$O sysdos$O tinytcap$O
#EXTRA2=
#LIBS=
#BIN= c:\dos
#CC= cl /AM
#CFLAGS= -O -DCS_IBMPC -DCS_SPECIAL
#OF= -o
#RF= -c
#DATE=
#EVAL=
#PROGS= elvis$E ex$E ctags$E ref$E virec$E wildcard$E refont$E
#CHMEM=
#SORT=
#INST= inst.dos
#RM= del
#PR1= refont -c
#PR2= >PRN
#DUMMY=
#DOC= doc\
#---- These settings are recommended for Atari TOS + Mark Williams C ----
#O=.o
#E=.ttp
#EXTRA= sysdos$O tinytcap$O
#EXTRA2= atari$O
#LIBS=
#BIN= c:\
#CC= cc -VPEEP
#CFLAGS= -O -DCS_IBMPC -DCS_SPECIAL
#OF= -o
#RF= -c
#DATE=
#EVAL=
#PROGS= elvis$E ctags$E ref$E virec$E wildcard$E shell$E refont$E
#CHMEM=
#SORT=
#INST= inst.tos
#RM= rm -f
#PR1= refont -e
#PR2= >PRT:
#DUMMY=
#DOC= 'doc\'
#---- These settings are recommended for OS-9/68K V2.3 ----
#O= .r
#E=
#EXTRA= date$O
#EXTRA2= osk$O
#LIBS= -l=/dd/lib/termlib.l
#BIN= /dd/usr/cmds
#CC= cc
#ODIR= /dd/usr/src/elvis
#CFLAGS= -gq -m=2
#OF= -f=$(ODIR)/
#RF= -r
#DATE=
#EVAL=
#PROGS= elvis$E vi$E view$E input$E ctags$E ref$E virec$E refont$E
#CHMEM= touch date.r
#SORT=
#INST= inst.os9
#RM= del *.stb *.dbg
#PR1= refont -b
#PR2= >/p
#DUMMY= dummy
#DOC= doc/
###########################################################################
###########################################################################
### ###
### The rest of this Makefile contains no user-servicable parts ###
### ###
###########################################################################
###########################################################################
OBJS= blk$O cmd1$O cmd2$O curses$O cut$O ex$O input$O main$O misc$O \
modify$O move1$O move2$O move3$O move4$O move5$O opts$O recycle$O \
redraw$O regexp$O regsub$O system$O tio$O tmp$O vars$O vcmd$O vi$O
ALIAS= alias$O
DOCS= $(DOC)index.doc $(DOC)intro.doc $(DOC)visual.doc $(DOC)ex.doc \
$(DOC)regexp.doc $(DOC)options.doc $(DOC)cutbufs.doc $(DOC)differ.doc \
$(DOC)internal.doc $(DOC)cflags.doc $(DOC)termcap.doc \
$(DOC)environ.doc $(DOC)versions.doc
SRC1= README KNOWN.BUGS $(DOC)intro.doc $(DOC)visual.doc $(DOC)ex.doc \
$(DOC)versions.doc $(DOC)cflags.doc $(DOC)differ.doc
SRC2= $(DOC)cutbufs.doc $(DOC)options.doc $(DOC)environ.doc $(DOC)regexp.doc \
$(DOC)internal.doc $(DOC)termcap.doc $(DOC)index.doc $(DOC)ctags.man \
$(DOC)elvis.man $(DOC)ref.man $(DOC)refont.man $(DOC)virec.man
SRC3= Elvis.lnk Elvis.mak Elvis.prj Makefile.mix alias.c atari.c \
ctags.c pc.c ref.c shell.c sysdos.c virec.c wildcard.c \
profile.sh osk.c osk.h date.c
SRC4= blk.c cmd1.c cmd2.c config.h curses.c
SRC5= curses.h cut.c ex.c input.c main.c misc.c
SRC6= modify.c move1.c move2.c move3.c move4.c move5.c opts.c recycle.c \
redraw.c
SRC7= regexp.c regexp.h regsub.c system.c tinytcap.c tio.c tmp.c
SRC8= vars.c vcmd.c vi.c vi.h refont.c
###########################################################################
all: $(PROGS)
@echo done.
t$E: ow_xv.o
$(CC) $(CFLAGS) $(OF) t$E ow_xv.o -lxview -lolgx -lX11
elvis$E: $(OBJS) $(EXTRA) $(EXTRA2)
$(CC) $(CFLAGS) $(OF) elvis$E $(OBJS) $(EXTRA) $(EXTRA2) $(LIBS)
$(CHMEM)
ctags$E: ctags.c
$(CC) $(CFLAGS) $(SORT) $(OF)ctags$E ctags.c
ref$E: ref.c
$(CC) $(CFLAGS) $(OF)ref$E ref.c
virec$E: virec.c tnamerec.c
$(CC) $(CFLAGS) $(OF) virec$E virec.c tnamerec.c $(EXTRA2)
view$E: $(ALIAS)
$(CC) $(CFLAGS) $(OF)view$E $(ALIAS)
ex$E: $(ALIAS)
$(CC) $(CFLAGS) $(OF)ex$E $(ALIAS)
vi$E: $(ALIAS)
$(CC) $(CFLAGS) $(OF)vi$E $(ALIAS)
input$E: $(ALIAS)
$(CC) $(CFLAGS) $(OF)input$E $(ALIAS)
shell$E: shell.c
$(CC) $(CFLAGS) $(OF)shell$E shell.c
wildcard$E: wildcard.c
$(CC) $(CFLAGS) $(OF)wildcard$E wildcard.c
refont$E: refont.c
$(CC) $(CFLAGS) $(OF)refont$E refont.c $(EXTRA2)
##############################################################################
# The file cmd1.c is compiled with the extra flag -DDATE="today's date".
cmd1$O: cmd1.c vi.h config.h
$(EVAL) $(CC) $(CFLAGS) $(RF) $(DATE) cmd1.c
# "It all depends..."
$(OBJS): vi.h curses.h config.h
# OS9 must create a custom date.c file, and compile it.
date$O: $(OBJS)
@echo '/* compilation date of elvis */' >-date.c
@echo -r 'char date[] = "' >+date.c
@echo -r 'echo -r ' >-/dd/tmp/date.c
@date >+/dd/tmp/date.c
@shell /dd/tmp/date.c >+date.c
@echo '";' >+date.c
@del /dd/tmp/date.c
$(CC) $(CFLAGS) $(RF) date.c
##############################################################################
install: $(INST)
@echo Installation complete.
inst.unix: $(DUMMY)
cp $(PROGS) $(BIN)
(cd $(BIN); chmod 755 $(PROGS))
(cd $(BIN); $(CHOWN) bin $(PROGS))
-rm $(BIN)/vi; ln -s $(BIN)/elvis $(BIN)/vi
-rm $(BIN)/ex; ln -s $(BIN)/elvis $(BIN)/ex
-rm $(BIN)/view; ln -s $(BIN)/elvis $(BIN)/view
-rm $(BIN)/input; ln -s $(BIN)/elvis $(BIN)/input
inst.dos: $(DUMMY)
copy $(PROGS) $(BIN)
copy $(BIN)/ex$E $(BIN)/vi$E
copy $(BIN)/ex$E $(BIN)/view$E
copy $(BIN)/ex$E $(BIN)/input$E
inst.tos: $(DUMMY)
copy $(PROGS) $(BIN)
inst.os9: $(DUMMY)
copy $(PROGS) -rw=$(BIN)
chd $(BIN); attr -epenprnpw $(PROGS)
##############################################################################
clean: $(DUMMY)
$(RM) *$O $(DOC)*.1 elvis?.uue elvis?.sh core
clobber: clean
$(RM) tags refs $(PROGS)
##############################################################################
print: refont$E
$(PR1) $(DOCS) $(PR2)
tags refs: ctags$E
ctags -r *.c *.h
##############################################################################
uue: elvis1.uue elvis2.uue elvis3.uue elvis4.uue elvis5.uue \
elvis6.uue elvis7.uue elvis8.uue
elvis1.uue: $(SRC1)
tar cf elvis1.tar $(SRC1)
compress -b13 elvis1.tar
cp README elvis1.uue
uue elvis1.tar.Z - >>elvis1.uue
$(RM) elvis1.tar*
elvis2.uue: $(SRC2)
tar cf elvis2.tar $(SRC2)
compress -b13 elvis2.tar
uue elvis2.tar.Z
$(RM) elvis2.tar*
elvis3.uue: $(SRC3)
tar cf elvis3.tar $(SRC3)
compress -b13 elvis3.tar
uuencode elvis3.tar.Z <elvis3.tar.Z >elvis3.uue
$(RM) elvis3.tar*
elvis4.uue: $(SRC4)
tar cf elvis4.tar $(SRC4)
compress -b13 elvis4.tar
uuencode elvis4.tar.Z <elvis4.tar.Z >elvis4.uue
$(RM) elvis4.tar*
elvis5.uue: $(SRC5)
tar cf elvis5.tar $(SRC5)
compress -b13 elvis5.tar
uuencode elvis5.tar.Z <elvis5.tar.Z >elvis5.uue
$(RM) elvis5.tar*
elvis6.uue: $(SRC6)
tar cf elvis6.tar $(SRC6)
compress -b13 elvis6.tar
uuencode elvis6.tar.Z <elvis6.tar.Z >elvis6.uue
$(RM) elvis6.tar*
elvis7.uue: $(SRC7)
tar cf elvis7.tar $(SRC7)
compress -b13 elvis7.tar
uuencode elvis7.tar.Z <elvis7.tar.Z >elvis7.uue
$(RM) elvis7.tar*
elvis8.uue: $(SRC8)
tar cf elvis8.tar $(SRC8)
compress -b13 elvis8.tar
uuencode elvis8.tar.Z <elvis8.tar.Z >elvis8.uue
$(RM) elvis8.tar*
##############################################################################
sh: elvis1.sh elvis2.sh elvis3.sh elvis4.sh elvis5.sh elvis6.sh \
elvis7.sh elvis8.sh
elvis1.sh: $(SRC1)
cat >elvis1.sh README
echo >>elvis1.sh ': ------------------------ CUT HERE --------------------'
echo >>elvis1.sh 'test -d doc || mkdir doc || exit 2'
shar >>elvis1.sh -h $(SRC1)
elvis2.sh: $(SRC2)
echo >elvis2.sh ': ------------------------ CUT HERE --------------------'
echo >>elvis2.sh 'test -d doc || mkdir doc || exit 2'
shar >>elvis2.sh -h $(SRC2)
elvis3.sh: $(SRC3)
shar $(SRC3) >elvis3.sh
elvis4.sh: $(SRC4)
shar $(SRC4) >elvis4.sh
elvis5.sh: $(SRC5)
shar $(SRC5) >elvis5.sh
elvis6.sh: $(SRC6)
shar $(SRC6) >elvis6.sh
elvis7.sh: $(SRC7)
shar $(SRC7) >elvis7.sh
elvis8.sh: $(SRC8)
shar $(SRC8) >elvis8.sh
##############################################################################
# Under XENIX only! This stores all sources on a 3.5" 720k floppy disk.
floppy: $(SRC1) $(SRC2) $(SRC3) $(SRC4) $(SRC5) $(SRC6) $(SRC7) $(SRC8)
tar c5v $(SRC1) $(SRC2) $(SRC3) $(SRC4) $(SRC5) $(SRC6) $(SRC7) $(SRC8)
changes:
for i in *.[ch] M* ; do \
if test -f $i -a -w $i ; then \
echo $i \
fi;\
done
dep:
makedep -f $(CFLAGS) -I/usr/include *.c
sed '/^#-- DO NOT EDIT FROM THIS LINE DOWN/,$$d' Makefile > tmp
echo "#-- DO NOT EDIT FROM THIS LINE DOWN" >> tmp
cat dependencies >> tmp
mv tmp Makefile
rm dependencies
#-- DO NOT EDIT FROM THIS LINE DOWN
wildcard.o: \
$(FRC) \
/usr/include/stdio.h \
/usr/include/ctype.h
virec.o: \
$(FRC) \
config.h \
/usr/include/malloc.h \
/usr/include/stdio.h \
/usr/include/ctype.h \
vi.h \
/usr/include/errno.h \
/usr/include/sys/errno.h \
/usr/include/sys/types.h \
/usr/include/sys/stdtypes.h \
/usr/include/sys/sysmacros.h \
/usr/include/sys/fcntl.h \
/usr/include/sys/fcntlcom.h \
/usr/include/sys/stat.h \
/usr/include/fcntl.h \
curses.h \
wconfig.h \
$(OPENWINHOME)/include/NeWS/wire.h \
$(OPENWINHOME)/include/NeWS/psmacros.h \
$(OPENWINHOME)/include/NeWS/psio.h \
$(OPENWINHOME)/include/NeWS/wire_types.h \
osk.h \
/usr/include/time.h \
wildcard.c
vi.o: \
$(FRC) \
config.h \
/usr/include/malloc.h \
/usr/include/ctype.h \
vi.h \
/usr/include/errno.h \
/usr/include/sys/errno.h \
/usr/include/sys/types.h \
/usr/include/sys/stdtypes.h \
/usr/include/sys/sysmacros.h \
/usr/include/sys/fcntl.h \
/usr/include/sys/fcntlcom.h \
/usr/include/sys/stat.h \
/usr/include/fcntl.h \
curses.h \
wconfig.h \
$(OPENWINHOME)/include/NeWS/wire.h \
$(OPENWINHOME)/include/NeWS/psmacros.h \
/usr/include/stdio.h \
$(OPENWINHOME)/include/NeWS/psio.h \
$(OPENWINHOME)/include/NeWS/wire_types.h
vcmd.o: \
$(FRC) \
config.h \
/usr/include/malloc.h \
vi.h \
/usr/include/errno.h \
/usr/include/sys/errno.h \
/usr/include/sys/types.h \
/usr/include/sys/stdtypes.h \
/usr/include/sys/sysmacros.h \
/usr/include/sys/fcntl.h \
/usr/include/sys/fcntlcom.h \
/usr/include/sys/stat.h \
/usr/include/fcntl.h \
curses.h \
wconfig.h \
$(OPENWINHOME)/include/NeWS/wire.h \
$(OPENWINHOME)/include/NeWS/psmacros.h \
/usr/include/stdio.h \
$(OPENWINHOME)/include/NeWS/psio.h \
$(OPENWINHOME)/include/NeWS/wire_types.h \
/usr/include/string.h
vars.o: \
$(FRC) \
config.h \
/usr/include/malloc.h \
vi.h \
/usr/include/errno.h \
/usr/include/sys/errno.h \
/usr/include/sys/types.h \
/usr/include/sys/stdtypes.h \
/usr/include/sys/sysmacros.h \
/usr/include/sys/fcntl.h \
/usr/include/sys/fcntlcom.h \
/usr/include/sys/stat.h \
/usr/include/fcntl.h \
curses.h \
wconfig.h \
$(OPENWINHOME)/include/NeWS/wire.h \
$(OPENWINHOME)/include/NeWS/psmacros.h \
/usr/include/stdio.h \
$(OPENWINHOME)/include/NeWS/psio.h \
$(OPENWINHOME)/include/NeWS/wire_types.h
tnamerec.o: \
$(FRC) \
config.h \
/usr/include/malloc.h \
/usr/include/dirent.h \
/usr/include/sys/types.h \
/usr/include/sys/stdtypes.h \
/usr/include/sys/sysmacros.h \
/usr/include/sys/dirent.h
tmp.o: \
$(FRC) \
config.h \
/usr/include/malloc.h \
/usr/include/ctype.h \
vi.h \
/usr/include/errno.h \
/usr/include/sys/errno.h \
/usr/include/sys/types.h \
/usr/include/sys/stdtypes.h \
/usr/include/sys/sysmacros.h \
/usr/include/sys/fcntl.h \
/usr/include/sys/fcntlcom.h \
/usr/include/sys/stat.h \
/usr/include/fcntl.h \
curses.h \
wconfig.h \
$(OPENWINHOME)/include/NeWS/wire.h \
$(OPENWINHOME)/include/NeWS/psmacros.h \
/usr/include/stdio.h \
$(OPENWINHOME)/include/NeWS/psio.h \
$(OPENWINHOME)/include/NeWS/wire_types.h \
osk.h \
/usr/include/time.h
tio.o: \
$(FRC) \
config.h \
/usr/include/malloc.h \
/usr/include/setjmp.h \
/usr/include/machine/setjmp.h \
/usr/include/sun3/setjmp.h \
/usr/include/sun3x/setjmp.h \
/usr/include/sun4/setjmp.h \
/usr/include/sun4c/setjmp.h \
/usr/include/signal.h \
/usr/include/sys/signal.h \
/usr/include/vm/faultcode.h \
/usr/include/sys/stdtypes.h \
vi.h \
/usr/include/errno.h \
/usr/include/sys/errno.h \
/usr/include/sys/types.h \
/usr/include/sys/sysmacros.h \
/usr/include/sys/fcntl.h \
/usr/include/sys/fcntlcom.h \
/usr/include/sys/stat.h \
/usr/include/fcntl.h \
curses.h \
wconfig.h \
$(OPENWINHOME)/include/NeWS/wire.h \
$(OPENWINHOME)/include/NeWS/psmacros.h \
/usr/include/stdio.h \
$(OPENWINHOME)/include/NeWS/psio.h \
$(OPENWINHOME)/include/NeWS/wire_types.h \
/usr/include/varargs.h
tinytcap.o: \
$(FRC) \
config.h \
/usr/include/malloc.h
system.o: \
$(FRC) \
config.h \
/usr/include/malloc.h \
vi.h \
/usr/include/errno.h \
/usr/include/sys/errno.h \
/usr/include/sys/types.h \
/usr/include/sys/stdtypes.h \
/usr/include/sys/sysmacros.h \
/usr/include/sys/fcntl.h \
/usr/include/sys/fcntlcom.h \
/usr/include/sys/stat.h \
/usr/include/fcntl.h \
curses.h \
wconfig.h \
$(OPENWINHOME)/include/NeWS/wire.h \
$(OPENWINHOME)/include/NeWS/psmacros.h \
/usr/include/stdio.h \
$(OPENWINHOME)/include/NeWS/psio.h \
$(OPENWINHOME)/include/NeWS/wire_types.h \
/usr/include/signal.h \
/usr/include/sys/signal.h \
/usr/include/vm/faultcode.h \
/usr/include/string.h
sysdos.o: \
$(FRC) \
config.h \
/usr/include/malloc.h \
vi.h \
/usr/include/errno.h \
/usr/include/sys/errno.h \
/usr/include/sys/types.h \
/usr/include/sys/stdtypes.h \
/usr/include/sys/sysmacros.h \
/usr/include/sys/fcntl.h \
/usr/include/sys/fcntlcom.h \
/usr/include/sys/stat.h \
/usr/include/fcntl.h \
curses.h \
wconfig.h \
$(OPENWINHOME)/include/NeWS/wire.h \
$(OPENWINHOME)/include/NeWS/psmacros.h \
/usr/include/stdio.h \
$(OPENWINHOME)/include/NeWS/psio.h \
$(OPENWINHOME)/include/NeWS/wire_types.h \
/usr/include/string.h
shell.o: \
$(FRC) \
/usr/include/stdio.h \
/usr/include/string.h \
/usr/include/sys/stdtypes.h
regsub.o: \
$(FRC) \
/usr/include/ctype.h \
config.h \
/usr/include/malloc.h \
vi.h \
/usr/include/errno.h \
/usr/include/sys/errno.h \
/usr/include/sys/types.h \
/usr/include/sys/stdtypes.h \
/usr/include/sys/sysmacros.h \
/usr/include/sys/fcntl.h \
/usr/include/sys/fcntlcom.h \
/usr/include/sys/stat.h \
/usr/include/fcntl.h \
curses.h \
wconfig.h \
$(OPENWINHOME)/include/NeWS/wire.h \
$(OPENWINHOME)/include/NeWS/psmacros.h \
/usr/include/stdio.h \
$(OPENWINHOME)/include/NeWS/psio.h \
$(OPENWINHOME)/include/NeWS/wire_types.h \
regexp.h
regexp.o: \
$(FRC) \
/usr/include/setjmp.h \
/usr/include/machine/setjmp.h \
/usr/include/sun3/setjmp.h \
/usr/include/sun3x/setjmp.h \
/usr/include/sun4/setjmp.h \
/usr/include/sun4c/setjmp.h \
/usr/include/ctype.h \
config.h \
/usr/include/malloc.h \
vi.h \
/usr/include/errno.h \
/usr/include/sys/errno.h \
/usr/include/sys/types.h \
/usr/include/sys/stdtypes.h \
/usr/include/sys/sysmacros.h \
/usr/include/sys/fcntl.h \
/usr/include/sys/fcntlcom.h \
/usr/include/sys/stat.h \
/usr/include/fcntl.h \
curses.h \
wconfig.h \
$(OPENWINHOME)/include/NeWS/wire.h \
$(OPENWINHOME)/include/NeWS/psmacros.h \
/usr/include/stdio.h \
$(OPENWINHOME)/include/NeWS/psio.h \
$(OPENWINHOME)/include/NeWS/wire_types.h \
regexp.h
refont.o: \
$(FRC) \
/usr/include/stdio.h \
config.h \
/usr/include/malloc.h
ref.o: \
$(FRC) \
/usr/include/stdio.h
redraw.o: \
$(FRC) \
config.h \
/usr/include/malloc.h \
vi.h \
/usr/include/errno.h \
/usr/include/sys/errno.h \
/usr/include/sys/types.h \
/usr/include/sys/stdtypes.h \
/usr/include/sys/sysmacros.h \
/usr/include/sys/fcntl.h \
/usr/include/sys/fcntlcom.h \
/usr/include/sys/stat.h \
/usr/include/fcntl.h \
curses.h \
wconfig.h \
$(OPENWINHOME)/include/NeWS/wire.h \
$(OPENWINHOME)/include/NeWS/psmacros.h \
/usr/include/stdio.h \
$(OPENWINHOME)/include/NeWS/psio.h \
$(OPENWINHOME)/include/NeWS/wire_types.h
recycle.o: \
$(FRC) \
config.h \
/usr/include/malloc.h \
vi.h \
/usr/include/errno.h \
/usr/include/sys/errno.h \
/usr/include/sys/types.h \
/usr/include/sys/stdtypes.h \
/usr/include/sys/sysmacros.h \
/usr/include/sys/fcntl.h \
/usr/include/sys/fcntlcom.h \
/usr/include/sys/stat.h \
/usr/include/fcntl.h \
curses.h \
wconfig.h \
$(OPENWINHOME)/include/NeWS/wire.h \
$(OPENWINHOME)/include/NeWS/psmacros.h \
/usr/include/stdio.h \
$(OPENWINHOME)/include/NeWS/psio.h \
$(OPENWINHOME)/include/NeWS/wire_types.h
pc.o: \
$(FRC) \
config.h \
/usr/include/malloc.h \
vi.h \
/usr/include/errno.h \
/usr/include/sys/errno.h \
/usr/include/sys/types.h \
/usr/include/sys/stdtypes.h \
/usr/include/sys/sysmacros.h \
/usr/include/sys/fcntl.h \
/usr/include/sys/fcntlcom.h \
/usr/include/sys/stat.h \
/usr/include/fcntl.h \
curses.h \
wconfig.h \
$(OPENWINHOME)/include/NeWS/wire.h \
$(OPENWINHOME)/include/NeWS/psmacros.h \
/usr/include/stdio.h \
$(OPENWINHOME)/include/NeWS/psio.h \
$(OPENWINHOME)/include/NeWS/wire_types.h
ow_xv.o: \
$(FRC) \
wconfig.h \
config.h \
/usr/include/malloc.h \
$(OPENWINHOME)/include/NeWS/wire.h \
/usr/include/sys/types.h \
/usr/include/sys/stdtypes.h \
/usr/include/sys/sysmacros.h \
$(OPENWINHOME)/include/NeWS/psmacros.h \
/usr/include/stdio.h \
$(OPENWINHOME)/include/NeWS/psio.h \
$(OPENWINHOME)/include/NeWS/wire_types.h \
vi.h \
/usr/include/errno.h \
/usr/include/sys/errno.h \
/usr/include/sys/fcntl.h \
/usr/include/sys/fcntlcom.h \
/usr/include/sys/stat.h \
/usr/include/fcntl.h \
curses.h \
$(OPENWINHOME)/include/xview/xview.h \
$(OPENWINHOME)/include/xview/xview_xvin.h \
/usr/include/signal.h \
/usr/include/sys/signal.h \
/usr/include/vm/faultcode.h \
/usr/include/pixrect/pixrect.h \
/usr/include/pixrect/pr_planegroups.h \
/usr/include/pixrect/pr_util.h \
/usr/include/pixrect/memvar.h \
/usr/include/pixrect/pixfont.h \
/usr/include/pixrect/traprop.h \
/usr/include/pixrect/pr_line.h \
/usr/include/stdlib.h \
$(OPENWINHOME)/include/xview/xv_c_types.h \
$(OPENWINHOME)/include/xview/generic.h \
$(OPENWINHOME)/include/xview/pkg_public.h \
$(OPENWINHOME)/include/xview/pkg.h \
/usr/include/varargs.h \
$(OPENWINHOME)/include/xview/attr.h \
$(OPENWINHOME)/include/xview/base.h \
/usr/include/strings.h \
$(OPENWINHOME)/include/xview/notify.h \
$(OPENWINHOME)/include/xview/xv_error.h \
$(OPENWINHOME)/include/xview/sun.h \
$(OPENWINHOME)/include/xview/server.h \
$(OPENWINHOME)/include/xview/screen.h \
$(OPENWINHOME)/include/xview/pixwin.h \
$(OPENWINHOME)/include/xview/rect.h \
$(OPENWINHOME)/include/xview/rectlist.h \
$(OPENWINHOME)/include/xview/win_input.h \
/usr/include/sys/time.h \
/usr/include/time.h \
$(OPENWINHOME)/include/X11/Xlib.h \
$(OPENWINHOME)/include/X11/X.h \
$(OPENWINHOME)/include/xview/win_event.h \
$(OPENWINHOME)/include/xview/icon.h \
$(OPENWINHOME)/include/xview/window.h \
$(OPENWINHOME)/include/xview/drawable.h \
$(OPENWINHOME)/include/xview/attrol.h \
$(OPENWINHOME)/include/xview/svrimage.h \
$(OPENWINHOME)/include/xview/frame.h \
$(OPENWINHOME)/include/xview/openmenu.h \
$(OPENWINHOME)/include/xview/seln.h \
$(OPENWINHOME)/include/xview/sel_svc.h \
/usr/include/netinet/in.h \
/usr/include/sys/socket.h \
$(OPENWINHOME)/include/X11/Xatom.h \
/usr/include/rpc/rpc.h \
/usr/include/rpc/types.h \
/usr/include/rpc/xdr.h \
/usr/include/rpc/auth.h \
/usr/include/rpc/clnt.h \
/usr/include/rpc/rpc_msg.h \
/usr/include/rpc/auth_unix.h \
/usr/include/rpc/auth_des.h \
/usr/include/rpc/svc.h \
/usr/include/rpc/svc_auth.h \
$(OPENWINHOME)/include/xview/sel_attrs.h
ow_tcap.o: \
$(FRC) \
/usr/include/varargs.h \
curses.h \
wconfig.h \
config.h \
/usr/include/malloc.h \
$(OPENWINHOME)/include/NeWS/wire.h \
/usr/include/sys/types.h \
/usr/include/sys/stdtypes.h \
/usr/include/sys/sysmacros.h \
$(OPENWINHOME)/include/NeWS/psmacros.h \
/usr/include/stdio.h \
$(OPENWINHOME)/include/NeWS/psio.h \
$(OPENWINHOME)/include/NeWS/wire_types.h
ow.o: \
$(FRC) \
/usr/include/stdio.h \
/usr/include/sys/time.h \
/usr/include/time.h \
/usr/include/sys/stdtypes.h \
/usr/include/signal.h \
/usr/include/sys/signal.h \
/usr/include/vm/faultcode.h \
/usr/include/assert.h \
config.h \
/usr/include/malloc.h \
vi.h \
/usr/include/errno.h \
/usr/include/sys/errno.h \
/usr/include/sys/types.h \
/usr/include/sys/sysmacros.h \
/usr/include/sys/fcntl.h \
/usr/include/sys/fcntlcom.h \
/usr/include/sys/stat.h \
/usr/include/fcntl.h \
curses.h \
wconfig.h \
$(OPENWINHOME)/include/NeWS/wire.h \
$(OPENWINHOME)/include/NeWS/psmacros.h \
$(OPENWINHOME)/include/NeWS/psio.h \
$(OPENWINHOME)/include/NeWS/wire_types.h \
elvis_cps.h \
/usr/include/sys/file.h \
/usr/include/sgtty.h \
/usr/include/sys/ioctl.h \
/usr/include/sys/ttychars.h \
/usr/include/sys/ttydev.h \
/usr/include/sys/ttold.h \
/usr/include/sys/ioccom.h \
/usr/include/sys/ttycom.h \
/usr/include/sys/filio.h \
/usr/include/sys/sockio.h
osk.o: \
$(FRC) \
/usr/include/stdio.h \
osk.h \
/usr/include/time.h \
/usr/include/sys/stdtypes.h \
/usr/include/errno.h \
/usr/include/sys/errno.h \
/usr/include/signal.h \
/usr/include/sys/signal.h \
/usr/include/vm/faultcode.h
opts.o: \
$(FRC) \
config.h \
/usr/include/malloc.h \
vi.h \
/usr/include/errno.h \
/usr/include/sys/errno.h \
/usr/include/sys/types.h \
/usr/include/sys/stdtypes.h \
/usr/include/sys/sysmacros.h \
/usr/include/sys/fcntl.h \
/usr/include/sys/fcntlcom.h \
/usr/include/sys/stat.h \
/usr/include/fcntl.h \
curses.h \
wconfig.h \
$(OPENWINHOME)/include/NeWS/wire.h \
$(OPENWINHOME)/include/NeWS/psmacros.h \
/usr/include/stdio.h \
$(OPENWINHOME)/include/NeWS/psio.h \
$(OPENWINHOME)/include/NeWS/wire_types.h
move5.o: \
$(FRC) \
/usr/include/ctype.h \
config.h \
/usr/include/malloc.h \
vi.h \
/usr/include/errno.h \
/usr/include/sys/errno.h \
/usr/include/sys/types.h \
/usr/include/sys/stdtypes.h \
/usr/include/sys/sysmacros.h \
/usr/include/sys/fcntl.h \
/usr/include/sys/fcntlcom.h \
/usr/include/sys/stat.h \
/usr/include/fcntl.h \
curses.h \
wconfig.h \
$(OPENWINHOME)/include/NeWS/wire.h \
$(OPENWINHOME)/include/NeWS/psmacros.h \
/usr/include/stdio.h \
$(OPENWINHOME)/include/NeWS/psio.h \
$(OPENWINHOME)/include/NeWS/wire_types.h
move4.o: \
$(FRC) \
config.h \
/usr/include/malloc.h \
vi.h \
/usr/include/errno.h \
/usr/include/sys/errno.h \
/usr/include/sys/types.h \
/usr/include/sys/stdtypes.h \
/usr/include/sys/sysmacros.h \
/usr/include/sys/fcntl.h \
/usr/include/sys/fcntlcom.h \
/usr/include/sys/stat.h \
/usr/include/fcntl.h \
curses.h \
wconfig.h \
$(OPENWINHOME)/include/NeWS/wire.h \
$(OPENWINHOME)/include/NeWS/psmacros.h \
/usr/include/stdio.h \
$(OPENWINHOME)/include/NeWS/psio.h \
$(OPENWINHOME)/include/NeWS/wire_types.h
move3.o: \
$(FRC) \
config.h \
/usr/include/malloc.h \
vi.h \
/usr/include/errno.h \
/usr/include/sys/errno.h \
/usr/include/sys/types.h \
/usr/include/sys/stdtypes.h \
/usr/include/sys/sysmacros.h \
/usr/include/sys/fcntl.h \
/usr/include/sys/fcntlcom.h \
/usr/include/sys/stat.h \
/usr/include/fcntl.h \
curses.h \
wconfig.h \
$(OPENWINHOME)/include/NeWS/wire.h \
$(OPENWINHOME)/include/NeWS/psmacros.h \
/usr/include/stdio.h \
$(OPENWINHOME)/include/NeWS/psio.h \
$(OPENWINHOME)/include/NeWS/wire_types.h
move2.o: \
$(FRC) \
config.h \
/usr/include/malloc.h \
vi.h \
/usr/include/errno.h \
/usr/include/sys/errno.h \
/usr/include/sys/types.h \
/usr/include/sys/stdtypes.h \
/usr/include/sys/sysmacros.h \
/usr/include/sys/fcntl.h \
/usr/include/sys/fcntlcom.h \
/usr/include/sys/stat.h \
/usr/include/fcntl.h \
curses.h \
wconfig.h \
$(OPENWINHOME)/include/NeWS/wire.h \
$(OPENWINHOME)/include/NeWS/psmacros.h \
/usr/include/stdio.h \
$(OPENWINHOME)/include/NeWS/psio.h \
$(OPENWINHOME)/include/NeWS/wire_types.h \
regexp.h
move1.o: \
$(FRC) \
config.h \
/usr/include/malloc.h \
/usr/include/ctype.h \
vi.h \
/usr/include/errno.h \
/usr/include/sys/errno.h \
/usr/include/sys/types.h \
/usr/include/sys/stdtypes.h \
/usr/include/sys/sysmacros.h \
/usr/include/sys/fcntl.h \
/usr/include/sys/fcntlcom.h \
/usr/include/sys/stat.h \
/usr/include/fcntl.h \
curses.h \
wconfig.h \
$(OPENWINHOME)/include/NeWS/wire.h \
$(OPENWINHOME)/include/NeWS/psmacros.h \
/usr/include/stdio.h \
$(OPENWINHOME)/include/NeWS/psio.h \
$(OPENWINHOME)/include/NeWS/wire_types.h
modify.o: \
$(FRC) \
config.h \
/usr/include/malloc.h \
vi.h \
/usr/include/errno.h \
/usr/include/sys/errno.h \
/usr/include/sys/types.h \
/usr/include/sys/stdtypes.h \
/usr/include/sys/sysmacros.h \
/usr/include/sys/fcntl.h \
/usr/include/sys/fcntlcom.h \
/usr/include/sys/stat.h \
/usr/include/fcntl.h \
curses.h \
wconfig.h \
$(OPENWINHOME)/include/NeWS/wire.h \
$(OPENWINHOME)/include/NeWS/psmacros.h \
/usr/include/stdio.h \
$(OPENWINHOME)/include/NeWS/psio.h \
$(OPENWINHOME)/include/NeWS/wire_types.h
misc.o: \
$(FRC) \
config.h \
/usr/include/malloc.h \
vi.h \
/usr/include/errno.h \
/usr/include/sys/errno.h \
/usr/include/sys/types.h \
/usr/include/sys/stdtypes.h \
/usr/include/sys/sysmacros.h \
/usr/include/sys/fcntl.h \
/usr/include/sys/fcntlcom.h \
/usr/include/sys/stat.h \
/usr/include/fcntl.h \
curses.h \
wconfig.h \
$(OPENWINHOME)/include/NeWS/wire.h \
$(OPENWINHOME)/include/NeWS/psmacros.h \
/usr/include/stdio.h \
$(OPENWINHOME)/include/NeWS/psio.h \
$(OPENWINHOME)/include/NeWS/wire_types.h
main.o: \
$(FRC) \
config.h \
/usr/include/malloc.h \
/usr/include/signal.h \
/usr/include/sys/signal.h \
/usr/include/vm/faultcode.h \
/usr/include/sys/stdtypes.h \
/usr/include/setjmp.h \
/usr/include/machine/setjmp.h \
/usr/include/sun3/setjmp.h \
/usr/include/sun3x/setjmp.h \
/usr/include/sun4/setjmp.h \
/usr/include/sun4c/setjmp.h \
vi.h \
/usr/include/errno.h \
/usr/include/sys/errno.h \
/usr/include/sys/types.h \
/usr/include/sys/sysmacros.h \
/usr/include/sys/fcntl.h \
/usr/include/sys/fcntlcom.h \
/usr/include/sys/stat.h \
/usr/include/fcntl.h \
curses.h \
wconfig.h \
$(OPENWINHOME)/include/NeWS/wire.h \
$(OPENWINHOME)/include/NeWS/psmacros.h \
/usr/include/stdio.h \
$(OPENWINHOME)/include/NeWS/psio.h \
$(OPENWINHOME)/include/NeWS/wire_types.h
input.o: \
$(FRC) \
/usr/include/ctype.h \
config.h \
/usr/include/malloc.h \
vi.h \
/usr/include/errno.h \
/usr/include/sys/errno.h \
/usr/include/sys/types.h \
/usr/include/sys/stdtypes.h \
/usr/include/sys/sysmacros.h \
/usr/include/sys/fcntl.h \
/usr/include/sys/fcntlcom.h \
/usr/include/sys/stat.h \
/usr/include/fcntl.h \
curses.h \
wconfig.h \
$(OPENWINHOME)/include/NeWS/wire.h \
$(OPENWINHOME)/include/NeWS/psmacros.h \
/usr/include/stdio.h \
$(OPENWINHOME)/include/NeWS/psio.h \
$(OPENWINHOME)/include/NeWS/wire_types.h
ex.o: \
$(FRC) \
config.h \
/usr/include/malloc.h \
/usr/include/ctype.h \
vi.h \
/usr/include/errno.h \
/usr/include/sys/errno.h \
/usr/include/sys/types.h \
/usr/include/sys/stdtypes.h \
/usr/include/sys/sysmacros.h \
/usr/include/sys/fcntl.h \
/usr/include/sys/fcntlcom.h \
/usr/include/sys/stat.h \
/usr/include/fcntl.h \
curses.h \
wconfig.h \
$(OPENWINHOME)/include/NeWS/wire.h \
$(OPENWINHOME)/include/NeWS/psmacros.h \
/usr/include/stdio.h \
$(OPENWINHOME)/include/NeWS/psio.h \
$(OPENWINHOME)/include/NeWS/wire_types.h
cut.o: \
$(FRC) \
config.h \
/usr/include/malloc.h \
vi.h \
/usr/include/errno.h \
/usr/include/sys/errno.h \
/usr/include/sys/types.h \
/usr/include/sys/stdtypes.h \
/usr/include/sys/sysmacros.h \
/usr/include/sys/fcntl.h \
/usr/include/sys/fcntlcom.h \
/usr/include/sys/stat.h \
/usr/include/fcntl.h \
curses.h \
wconfig.h \
$(OPENWINHOME)/include/NeWS/wire.h \
$(OPENWINHOME)/include/NeWS/psmacros.h \
/usr/include/stdio.h \
$(OPENWINHOME)/include/NeWS/psio.h \
$(OPENWINHOME)/include/NeWS/wire_types.h
curses.o: \
$(FRC) \
config.h \
/usr/include/malloc.h \
vi.h \
/usr/include/errno.h \
/usr/include/sys/errno.h \
/usr/include/sys/types.h \
/usr/include/sys/stdtypes.h \
/usr/include/sys/sysmacros.h \
/usr/include/sys/fcntl.h \
/usr/include/sys/fcntlcom.h \
/usr/include/sys/stat.h \
/usr/include/fcntl.h \
curses.h \
wconfig.h \
$(OPENWINHOME)/include/NeWS/wire.h \
$(OPENWINHOME)/include/NeWS/psmacros.h \
/usr/include/stdio.h \
$(OPENWINHOME)/include/NeWS/psio.h \
$(OPENWINHOME)/include/NeWS/wire_types.h \
/usr/include/termio.h \
/usr/include/sys/ioccom.h \
/usr/include/sys/termios.h \
/usr/include/sys/ttydev.h \
/usr/include/sys/ttycom.h \
/usr/include/sgtty.h \
/usr/include/sys/ioctl.h \
/usr/include/sys/ttychars.h \
/usr/include/sys/ttold.h \
/usr/include/sys/filio.h \
/usr/include/sys/sockio.h \
/usr/include/signal.h \
/usr/include/sys/signal.h \
/usr/include/vm/faultcode.h
ctags.o: \
$(FRC) \
/usr/include/ctype.h \
/usr/include/stdio.h \
config.h \
/usr/include/malloc.h \
wildcard.c
cmd2.o: \
$(FRC) \
/usr/include/ctype.h \
config.h \
/usr/include/malloc.h \
vi.h \
/usr/include/errno.h \
/usr/include/sys/errno.h \
/usr/include/sys/types.h \
/usr/include/sys/stdtypes.h \
/usr/include/sys/sysmacros.h \
/usr/include/sys/fcntl.h \
/usr/include/sys/fcntlcom.h \
/usr/include/sys/stat.h \
/usr/include/fcntl.h \
curses.h \
wconfig.h \
$(OPENWINHOME)/include/NeWS/wire.h \
$(OPENWINHOME)/include/NeWS/psmacros.h \
/usr/include/stdio.h \
$(OPENWINHOME)/include/NeWS/psio.h \
$(OPENWINHOME)/include/NeWS/wire_types.h \
regexp.h \
osk.h \
/usr/include/time.h
cmd1.o: \
$(FRC) \
config.h \
/usr/include/malloc.h \
/usr/include/ctype.h \
vi.h \
/usr/include/errno.h \
/usr/include/sys/errno.h \
/usr/include/sys/types.h \
/usr/include/sys/stdtypes.h \
/usr/include/sys/sysmacros.h \
/usr/include/sys/fcntl.h \
/usr/include/sys/fcntlcom.h \
/usr/include/sys/stat.h \
/usr/include/fcntl.h \
curses.h \
wconfig.h \
$(OPENWINHOME)/include/NeWS/wire.h \
$(OPENWINHOME)/include/NeWS/psmacros.h \
/usr/include/stdio.h \
$(OPENWINHOME)/include/NeWS/psio.h \
$(OPENWINHOME)/include/NeWS/wire_types.h \
regexp.h
blk.o: \
$(FRC) \
config.h \
/usr/include/malloc.h \
vi.h \
/usr/include/errno.h \
/usr/include/sys/errno.h \
/usr/include/sys/types.h \
/usr/include/sys/stdtypes.h \
/usr/include/sys/sysmacros.h \
/usr/include/sys/fcntl.h \
/usr/include/sys/fcntlcom.h \
/usr/include/sys/stat.h \
/usr/include/fcntl.h \
curses.h \
wconfig.h \
$(OPENWINHOME)/include/NeWS/wire.h \
$(OPENWINHOME)/include/NeWS/psmacros.h \
/usr/include/stdio.h \
$(OPENWINHOME)/include/NeWS/psio.h \
$(OPENWINHOME)/include/NeWS/wire_types.h
atari.o: \
$(FRC) \
config.h \
/usr/include/malloc.h \
vi.h \
/usr/include/errno.h \
/usr/include/sys/errno.h \
/usr/include/sys/types.h \
/usr/include/sys/stdtypes.h \
/usr/include/sys/sysmacros.h \
/usr/include/sys/fcntl.h \
/usr/include/sys/fcntlcom.h \
/usr/include/sys/stat.h \
/usr/include/fcntl.h \
curses.h \
wconfig.h \
$(OPENWINHOME)/include/NeWS/wire.h \
$(OPENWINHOME)/include/NeWS/psmacros.h \
/usr/include/stdio.h \
$(OPENWINHOME)/include/NeWS/psio.h \
$(OPENWINHOME)/include/NeWS/wire_types.h
alias.o: \
$(FRC) \
/usr/include/stdio.h \
config.h \
/usr/include/malloc.h
SHAR_EOF
fi # end of overwriting check
if test -f 'config.h'
then
echo shar: will not over-write existing file "'config.h'"
else
cat << \SHAR_EOF > 'config.h'
/*
* vi configuration file
* We try to automatically configure to various compilers and operating
* systems. Extend the autoconf section as needed.
*/
/*************************** autoconf section ************************/
/* standard unix V (?) */
#ifdef M_SYSV
# define UNIXV 1
#endif
/* xelos system, University of Ulm */
#ifdef xelos
# define UNIXV 1
#endif
/* BSD UNIX? */
#ifdef bsd
# define BSD 1
#endif
/* Microsoft C: sorry, Watcom does the same thing */
#ifdef M_I86
# ifndef M_SYSV
# define MSDOS 1
# define MICROSOFT 1
# define COMPILED_BY "Microsoft C 5.10"
# endif
#endif
/* Borlands Turbo C */
#ifdef __TURBOC__
# define MSDOS 1
# define TURBOC 1
# define COMPILED_BY "Turbo C 2.00"
#endif
/* Tos Mark-Williams */
#ifdef M68000
# define TOS 1
# define COMPILED_BY "Mark Williams C"
#endif
/* OS9/68000 */
#ifdef OSK
# define COMPILED_BY "Microware C V2.3 Edition 40"
#endif
/*************************** end of autoconf section ************************/
/* All undefined symbols are defined to zero here, to allow for older */
/* compilers which dont understand #if defined() or #if UNDEFINED_SYMBOL */
/*************************** operating systems *****************************/
#ifndef BSD
# define BSD 0 /* UNIX - Berkeley 4.x */
#endif
#ifndef UNIXV
# define UNIXV 0 /* UNIX - AT&T SYSV */
#endif
#ifndef UNIX7
# define UNIX7 0 /* UNIX - version 7 */
#endif
#ifndef MSDOS
# define MSDOS 0 /* PC */
#endif
#ifndef TOS
# define TOS 0 /* Atari ST */
#endif
#ifndef AMIGA
# define AMIGA 0 /* Commodore Amiga */
#endif
#ifndef OSK
# define OSK 0 /* OS-9 / 68k */
#endif
#ifndef COHERENT
# define COHERENT 0 /* Coherent */
#endif
/* Minix has no predefines */
#if !BSD && !UNIXV && !UNIX7 && !MSDOS && !TOS && !AMIGA && !OSK && !COHERENT
# define MINIX 1
#else
# define MINIX 0
#endif
/* generic combination of Unices */
#if UNIXV || UNIX7 || BSD || MINIX || COHERENT
# define ANY_UNIX 1
#else
# define ANY_UNIX 0
#endif
/*************************** compilers **************************************/
#ifndef MICROSOFT
# define MICROSOFT 0
#endif
#ifndef TURBOC
# define TURBOC 0
#endif
/******************************* Credit ************************************/
#if OPENWINDOWS
# define CREDIT "Ported to X11/NeWS by Mike Hoegeman"
#endif
#if MSDOS
# define CREDIT "Ported to MS-DOS by Guntram Blohm & Martin Patzel"
#endif
#if TOS
# define CREDIT "Ported to Atari/TOS by Guntram Blohm & Martin Patzel"
#endif
#if OSK
# define CREDIT "Ported to Microware OS9/68k by Peter Reinig"
#endif
#if COHERENT
# define CREDIT "Ported to Coherent by Esa Ahola"
#endif
/*************************** functions depending on OS *********************/
/* Only MSDOS, TOS, and OS9 need a special function for reading from the
* keyboard. All others just read from file descriptor 0.
*/
#if !MSDOS && !TOS && !OSK && !OPENWINDOWS
# define ttyread(buf, len) read(0, buf, (unsigned)len) /* raw read */
#endif
#if !TOS && !OPENWINDOWS
# define ttywrite(buf, len) write(1, buf, (unsigned)(len)) /* raw write */
#endif
/* The strchr() function is an official standard now, so everybody has it
* except Unix version 7 (which is old) and BSD Unix (which is academic).
* Those guys use something called index() to do the same thing.
*/
#if BSD || UNIX7 || OSK
# define strchr index
#endif
extern char *strchr();
/* BSD uses bcopy() instead of memcpy() */
#if BSD
#define memcpy(dest, src, siz) bcopy(src, dest, siz)
#endif
/* text versa binary mode for read/write */
#if !TOS
#define tread(fd,buf,n) read(fd,buf,(unsigned)(n))
#define twrite(fd,buf,n) write(fd,buf,(unsigned)(n))
#endif
/**************************** Compiler quirks *********************************/
/* the UNIX version 7 and (some) TOS compilers, don't allow "void" */
#if UNIX7 || TOS
# define void int
#endif
/* as far as I know, all compilers except version 7 support unsigned char */
/* NEWFLASH: the Minix-ST compiler has subtle problems with unsigned char */
#if UNIX7 || MINIX
# define UCHAR(c) ((c) & 0xff)
# define uchar char
#else
# define UCHAR(c) ((unsigned char)(c))
# define uchar unsigned char
#endif
/* Some compilers prefer to have malloc declared as returning a (void *) */
#if BSD
#if OPENWINDOWS
#include <malloc.h>
#else
extern void *malloc();
#endif
#else
extern char *malloc();
#endif
/* Most compilers could benefit from using the "register" storage class */
#if 1
# define REG register
#endif
/******************* Names of files and environment vars **********************/
#if ANY_UNIX
# ifndef TMPDIR
# if MINIX
# define TMPDIR "/usr/tmp" /* Keep elvis' temp files off RAM disk! */
# else
# define TMPDIR "/tmp" /* directory where temp files live */
# endif
# endif
# define MAXTMPNAMELEN 256 /* length for tmp file name buffer */
# define TMPNAME "%s/El%01x%04x%03x-%03x" /* temp file */
# define CUTNAME "%s/El_%04x%03x" /* cut buffer's temp file */
# ifndef EXRC
# define EXRC ".exrc" /* init file in current directory */
# endif
# define SCRATCHOUT "%s/soXXXXXX" /* temp file used as input to filter */
# ifndef EXINIT
# define EXINIT "EXINIT"
# endif
# ifndef SHELL
# define SHELL "/bin/sh" /* default shell */
# endif
# if COHERENT
# ifndef REDIRECT
# define REDIRECT ">" /* Coherent CC writes errors to stdout */
# endif
# endif
#endif
#if MSDOS || TOS
/* do not change TMPNAME, CUTNAME and SCRATCH*: they MUST begin with '%s\\'! */
# ifndef TMPDIR
# define TMPDIR "C:\\tmp" /* directory where temp files live */
# endif
# define TMPNAME "%s\\elv%x%04x.%03x" /* temp file */
# define CUTNAME "%s\\elv_%04x.%03x" /* cut buffer's temp file */
# if MSDOS
# if MICROSOFT
# define CC_COMMAND "cl -c" /* C compiler */
# else /* TURBO_C */
# define CC_COMMAND "tc" /* C compiler */
# endif
# define MAXTMPNAMELEN 80 /* length for tmp file name buffer */
# endif
# define SCRATCHIN "%s\\siXXXXXX" /* DOS ONLY - output of filter program */
# define SCRATCHOUT "%s\\soXXXXXX" /* temp file used as input to filter */
# define SLASH '\\'
# ifndef SHELL
# if TOS
# define SHELL "shell.ttp" /* default shell */
# else
# define SHELL "command.com" /* default shell */
# endif
# endif
# define NEEDSYNC TRUE /* assume ":se sync" by default */
# define REDIRECT ">" /* shell's redirection of stderr */
# ifndef MAXMAPS
# define MAXMAPS 40
# endif
# ifndef EXINIT
# define EXINIT "EXINIT"
# endif
#endif
#if OSK
# ifndef TMPDIR
# define TMPDIR "/dd/tmp" /* directory where temp files live */
# endif
# define TMPNAME "%s/elv%x%04x%03x" /* temp file */
# define CUTNAME "%s/elv_%04x%03x" /* cut buffer's temp file */
# ifndef CC_COMMAND
# define CC_COMMAND "cc -r" /* name of the compiler */
# endif
# ifndef EXRC
# define EXRC ".exrc" /* init file in current directory */
# endif
# define SCRATCHOUT "%s/soXXXXXX" /* temp file used as input to filter */
# ifndef SHELL
# define SHELL "shell" /* default shell */
# endif
# define FILEPERMS (S_IREAD|S_IWRITE) /* file permissions used for creat() */
# define REDIRECT ">>-" /* shell's redirection of stderr */
#endif
#ifndef TAGS
# define TAGS "tags" /* tags file */
#endif
#ifndef TMPNAME
# define TMPNAME "%s/elv%x%04x.%03x" /* temp file */
#endif
#ifndef CUTNAME
# define CUTNAME "%s/elv_%04x.%03x" /* cut buffer's temp file */
#endif
#ifndef EXRC
# define EXRC "elvis.rc"
#endif
#ifndef HMEXRC
# if !MSDOS && !TOS
# define HMEXRC EXRC
# endif
#endif
#ifndef KEYWORDPRG
# define KEYWORDPRG "ref"
#endif
#ifndef SCRATCHOUT
# define SCRATCHIN "%s/SIXXXXXX"
# define SCRATCHOUT "%s/SOXXXXXX"
#endif
#ifndef ERRLIST
# define ERRLIST "errlist"
#endif
#ifndef SLASH
# define SLASH '/'
#endif
#ifndef SHELL
# define SHELL "shell"
#endif
#ifndef REG
# define REG
#endif
#ifndef NEEDSYNC
# define NEEDSYNC FALSE
#endif
#ifndef FILEPERMS
# define FILEPERMS 0666
#endif
#ifndef CC_COMMAND
# define CC_COMMAND "cc -c"
#endif
#ifndef MAKE_COMMAND
# define MAKE_COMMAND "make"
#endif
#ifndef REDIRECT
# define REDIRECT "2>"
#endif
#ifndef MAXMAPS
# define MAXMAPS 20 /* number of :map keys */
#endif
#ifndef MAXDIGS
# define MAXDIGS 30 /* number of :digraph combos */
#endif
#ifndef MAXABBR
# define MAXABBR 20 /* number of :abbr entries */
#endif
SHAR_EOF
fi # end of overwriting check
if test -f 'ow.c'
then
echo shar: will not over-write existing file "'ow.c'"
else
cat << \SHAR_EOF > 'ow.c'
#if OPENWINDOWS
#include <stdio.h>
#include <sys/time.h>
#include <signal.h>
#include <assert.h>
#include "config.h"
#include "vi.h"
#include "curses.h"
#include "elvis_cps.h"
#define PS_ESC '\200'
#define TTY 1 /* conditional for compiling in dumb tty support */
#ifndef RUNFILE
#define RUNFILE "/usr/local/lib/elvis.ps" /* server side PostScript code */
#endif
/* openwindows related elvis stuff */
/* author: mike hoegeman , mh@wlv.imsd.contel.com*/
struct ow_data Ow;
int ElvisDestroyTag;
extern void destroyProc();
int ElvisKeyTag;
extern void keyProc();
int ElvisMiscTag;
extern void miscProc();
int ElvisResizeTag;
extern void resizeProc();
int ElvisDamageTag;
extern void damageProc();
int *NewsTags[] =
{
&ElvisDestroyTag,
&ElvisKeyTag,
&ElvisMiscTag,
&ElvisResizeTag,
&ElvisDamageTag,
(int *) 0
};
void
destroyProc(tag, data)
int tag;
caddr_t *data;
{
ow_beep();
wire_ReadTag();
return;
}
void
damageProc(tag, data)
int tag;
caddr_t *data;
{
int i;
if (tag >= 0)
i = wire_ReadTag();
redraw(MARK_UNSET, FALSE);
redraw(cursor, 1);
refresh();
return;
}
void
resizeProc(tag, data)
int tag;
caddr_t *data;
{
int i;
i = wire_ReadTag();
LINES = Ow.wLINES = wire_ReadInt();
COLS = Ow.wCOLS = wire_ReadInt();
return;
}
void
keyProc(tag, data)
int tag;
caddr_t *data;
{
int t;
t = wire_ReadTag();
Ow.keyFromNews = wire_ReadInt();
wire_ExitNotifier();
return;
}
int
ow_tmpstart(fname)
char *fname;
{
int x;
x = tmpstart(fname);
if (!Ow.tty)
{
ps_set_title(*fname == '\0' ? "Elvis" : fname);
ps_flush_PostScript();
}
return x;
}
int
ow_beep()
{
#ifdef TTY
if (Ow.tty)
{
beep();
return 0;
}
# endif
ps_beep();
return 0;
}
int ow_rendermsg(msgtxt)
char *msgtxt;
{
#ifdef TTY
if (Ow.tty) return(rendermsg(msgtxt));
#endif
ps_rendermsg(msgtxt);
return 0;
}
int ow_appendmsg(old, new)
char *old, *new;
{
/* we could get 'old' from the window but since it's handy
here on the c side we might as well use it */
#ifdef TTY
if (Ow.tty) return(appendmsg(old, new));
#endif
ps_appendmsg(old, new);
return 0;
}
#define DBG
#ifdef DBG
static int SHOW_OUTPUT = -1;
sh(o, s, l, c)
int o;
char *s;
int l, c;
{
putchar(o);
while (l > 0)
{
putchar(*s++);
l--;
}
putchar(c);
return (0);
}
#define Print if (SHOW_OUTPUT) printf
#define SH if (SHOW_OUTPUT) sh
#else
#define Print
#define SH
#endif
int
ttywrite(buf, len)
register char *buf;
register int len;
{
#define binc() buf++,len--
#define flushstr() {\
if (string) {\
SH('(', string, buf-string, ')');\
ps_ST(string, buf-string);\
string = (char *)0;\
}\
}
#ifdef DBG
if (SHOW_OUTPUT < 0)
{
extern char *getenv();
SHOW_OUTPUT = (getenv("SHOW_OUTPUT") == (char *) 0) ? 0 : 1;
}
#endif
/* this is where we bury all the smarts for display */
if (!Ow.tty)
{
#define Return(x) {\
if (cursor_disabled)\
{\
ps_enable_cursor();\
Print("{{true /EC C S }}\n");\
}\
ps_flush_PostScript();\
Print("------------------------------------------\n");\
return(x);\
}
#define ErrReturn(x) {\
msg("Garbled output, is this a binary file?");\
Print("Garbled output, is this a binary file?");\
Return(x);\
}
char *string = (char *) 0;
int rval = len;
int cursor_disabled = 0;
wire_SetCurrent(Ow.mainWire);
/*
if we have a fair chunk of stuff in our buffer, then just turn off
the cursor completely till we are all done then turn it back on at
the end. The turning on is done in 'Return'
*/
if (len > 30)
{
cursor_disabled++;
Print("{{false /EC C S }}\n");
ps_disable_cursor();
}
while (len > 0)
{
switch (*buf)
{
case PS_ESC:
flushstr();
{
register char *p;
binc();
p = buf;
while (*buf != PS_ESC)
{
if (!*buf)
ErrReturn(rval);
binc();
}
ps_pswrite(p, buf - p);
Print("\n");
SH('{', p, buf - p, '}');
Print("\n");
}
binc();
break;
default:
switch (*buf)
{
case '\r':
flushstr();
if (*(buf + 1) == '\n')
{
Print("<crnl>\n");
ps_CrNl();
binc();
}
else
{
Print("<cr>");
ps_Cr();
}
break;
case '\n':
flushstr();
if (*(buf + 1) == '\r')
{
Print("<crnl>\n");
ps_CrNl();
binc();
}
else
{
Print("<nl>\n");
ps_Nl();
}
break;
/* move up one line */
case '\0':
/* some binary file ?? , punt */
ErrReturn(rval);
default:
if (!string)
string = buf;
break;
}
binc();
break;
}
}
flushstr();
Return(rval);
#undef Return
#undef ErrReturn
}
#ifdef TTY
return (write(1, buf, len));
#else
return -1;
#endif
}
int
ttyread(buf, len)
char *buf;
int len;
{
int rlen = 0;
#ifdef TTY
if (Ow.tty) return read(0, buf, len);
#endif
Ow.keyFromNews = -1;
wire_EnterNotifier();
if (Ow.keyFromNews < 0)
return -1;
else
{
*buf++ = Ow.keyFromNews;
rlen++;
}
return rlen;
}
void
miscProc(tag, data)
int tag;
caddr_t *data;
{
return;
}
ow_vi()
{
extern char *getenv();
if (Ow.tty)
{
vi();
return 0;
}
if (getenv("ELVIS_DEBUG") == (char *) 0 && Ow.background)
background();
vi();
return;
}
ow_ex()
{
ex();
return 0;
}
int
ow_suspend_curses()
{
#ifdef TTY
if (Ow.tty)
{
suspend_curses();
return 0;
}
#endif
#ifndef NO_CURSORSHAPE
if (has_CQ)
{
do_CQ();
}
#endif
return 0;
}
int
ow_resume_curses(quietly)
int quietly;
{
/* If we're supposed to quit quietly, then we're done */
void (*proc) ();
# ifdef TTY
if (Ow.tty)
{
resume_curses(quietly);
return 0;
}
# endif
if (quietly)
return;
proc = signal(SIGINT, SIG_IGN);
{
move(LINES - 1, 0);
do_SO();
qaddstr("[Press <RETURN> to continue]");
do_SE();
refresh();
ttyread(kbuf, 20); /* in RAW mode, so <20 is very likely */
if (kbuf[0] == ':')
{
mode = MODE_COLON;
addch('\n');
refresh();
}
else
{
mode = MODE_VI;
redraw(MARK_UNSET, FALSE);
}
exwrote = FALSE;
}
signal(SIGINT, proc);
return 0;
}
#define register_tag(tag_name, tag_value, tag_proc, proc_data)\
wire_RegisterTag(tag_value, tag_proc, proc_data);\
ps_RegisterTag(tag_name, tag_value);
int
ow_initscr()
{
extern char *getenv();
extern void starttcap();
char *server;
#ifdef TTY
if (Ow.tty)
{
initscr();
return 0;
}
#endif
if (!(server = getenv("NEWSSERVER")))
{
server = getenv("DISPLAY");
if (!server ||
!strncmp(server, "unix", strlen("unix")) ||
!strncmp(server, "unix", strlen("UNIX")))
server = "localhost";
}
Ow.mainWire = wire_Open(server);
if (Ow.mainWire == wire_INVALID_WIRE)
{
/* wire_Perror("elvis"); */
Ow.tty = 1;
initscr();
return 0;
}
else
{
static int firstime = 1;
if (firstime)
{
wire_ReserveTags(100);
wire_AllocateNamedTags(NewsTags);
register_tag("ElvisDestroyTag", ElvisDestroyTag, destroyProc, NULL);
register_tag("ElvisKeyTag", ElvisKeyTag, keyProc, NULL);
register_tag("ElvisMiscTag", ElvisMiscTag, miscProc, NULL);
register_tag("ElvisResizeTag", ElvisResizeTag, resizeProc, NULL);
register_tag("ElvisDamageTag", ElvisDamageTag, damageProc, NULL);
wire_SetCurrent(Ow.mainWire);
ps_RunFile(RUNFILE);
ps_flush_PostScript();
#ifdef USE_XV_SELECTION
/* so we can paste from the Xview shelf selection */
ow_xv_seln_init();
#endif
}
else
firstime = !firstime;
stdscr = kbuf;
starttcap();
return 0;
}
}
int
ow_getsize(sig)
int sig;
{
extern char o_columns[], o_lines[];
#ifdef TTY
if (Ow.tty)
return getsize(sig);
#endif
/* copy the new values into Elvis' options */
*o_columns = COLS = Ow.wCOLS;
*o_lines = LINES = Ow.wLINES;
return 0;
}
/* termcap */
/*ARGSUSED*/
int
ow_tgetent(bp, name)
char *bp; /* buffer for entry */
char *name; /* name of the entry */
{
#ifdef TTY
if (Ow.tty) return(tgetent(bp,name));
#endif
*bp = '\0';
return 1;
}
#define CAP(str) CAP2((str)[0], (str)[1])
#define CAP2(a,b) (((a) << 8) + ((b) & 0xff))
int
ow_tgetnum(id)
char *id;
{
#ifdef TTY
if (Ow.tty) return(tgetnum(id));
#endif
switch (CAP(id))
{
/* # lines of lines on screen or page */
case CAP2('l', 'i'):
return 44;
/* # of columns in a line */
case CAP2('c', 'o'):
return 80;
/* # of garbage chars left by so or se */
case CAP2('s', 'g'):
return 0;
/* # of garbage chars left by us or ue */
case CAP2('u', 'g'):
return 0;
default:
return -1;
}
}
int
ow_tgetflag(id)
char *id;
{
#ifdef TTY
if (Ow.tty) return(tgetflag(id));
#endif
switch (CAP(id))
{
/* terminal has **no** automatic margins */
case CAP2('a', 'm'):
return 0;
/* terminal has backspace capability */
case CAP2('b', 's'):
return 1;
/* safe to move while in insert mode */
case CAP2('m', 'i'):
return 1;
default:
return 0;
}
}
#define VAL2(v,a) (a)
#define VAL3(a,b,c) (a)
char *
ow_tgetstr(id, bp)
char *id;
char **bp; /* pointer to pointer to buffer - ignored */
{
#ifdef TTY
extern char *tgetstr();
if (Ow.tty) return(tgetstr(id,bp));
#endif
/* send method id to 'C', 'S' is a shorthand for 'send' */
#define RETURN(FIRSTLETTER,SECONDLETTER) {\
static char tp[] = {\
PS_ESC,\
'/', FIRSTLETTER, SECONDLETTER, ' ',\
'C',' ','S',' ',\
PS_ESC\
};\
return tp;\
}
switch (CAP(id))
{
/* clear to end of line */
case CAP2('c', 'e'):
RETURN('c', 'e');
/* clear to end of screen and home cursor */
case CAP2('c', 'l'):
RETURN('c', 'l');
/* scroll text down */
case CAP2('s', 'r'):
RETURN('s', 'r');
/* cursor invisible */
case CAP2('v', 'i'):
RETURN('v', 'i');
/* cursor visible */
case CAP2('v', 'e'):
RETURN('v', 'e');
/*-
case CAP2('a', 'l'):
RETURN('a', 'l');
case CAP2('d', 'l'):
RETURN('d', 'l');
*/
/* start bold */
case CAP2('s', 'o'):
RETURN('s', 'o');
/* end bold */
case CAP2('s', 'e'):
RETURN('s', 'e');
/* start underline */
case CAP2('u', 's'):
RETURN('u', 's');
/* end underline */
case CAP2('u', 'e'):
RETURN('u', 'e');
/* ------ cursor style change commands --------*/
/* change to normal cursor */
case CAP2('c', 'Q'):
RETURN('c', 'Q');
/* change to ex command entry cursor */
case CAP2('c', 'X'):
RETURN('c', 'X');
/* change to vi command mode cursor */
case CAP2('c', 'V'):
RETURN('c', 'V');
/* change to vi input mode cursor */
case CAP2('c', 'I'):
RETURN('c', 'I');
/* change to vi replace mode cursor */
case CAP2('c', 'R'):
RETURN('c', 'R');
#if 0
case CAP2('V', 'B'):
RETURN('V', 'B');
case CAP2('V', 'b'):
RETURN('V', 'b');
case CAP2('d', 'o'):
RETURN('d', 'o');
case CAP2('n', 'd'):
RETURN('n', 'd');
case CAP2('t', 'i'):
RETURN('t', 'i');
case CAP2('t', 'e'):
return "";
case CAP2('k', 'u'):
return "#H";
case CAP2('k', 'd'):
return "#P";
case CAP2('k', 'l'):
return "#K";
case CAP2('k', 'r'):
return "#M";
case CAP2('H', 'M'):
return "#G";
case CAP2('E', 'N'):
return "#O";
case CAP2('P', 'U'):
return "#I";
case CAP2('P', 'D'):
#endif
/* move up one line */
case CAP2('u', 'p'):
RETURN('u', 'p');
/* backspace */
case CAP2('b', 'c'):
RETURN('b', 'c');
/* cursor motion */
case CAP2('c', 'm'):
{
static char *tp = "\200%d %d /cm C S \200";
return tp;
}
default:
return (char *) 0;
}
}
/*ARGSUSED*/
char *
ow_tgoto(cm, destcol, destrow)
char *cm; /* cursor movement string -- ignored */
int destcol; /* destination column, 0 - 79 */
int destrow; /* destination row, 0 - 24 */
{
static char buf[30];
#ifdef TTY
extern char *tgoto();
if (Ow.tty) return (tgoto(cm, destcol, destrow));
#endif
sprintf(buf, "\200%d %d /cm C S \200", destcol, destrow);
return buf;
}
/* declaring cp a register makes gcc blow up ?? ! ?? */
void
ow_tputs(cp, affcnt, outfn)
char *cp;
int affcnt; /* number of affected lines -- ignored */
int (*outfn) (); /* the output function */
{
#ifdef TTY
if (Ow.tty) { tputs(cp,affcnt,outfn); return; };
#endif
while (*cp != '\0')
{
(*outfn)(*cp);
cp++;
}
return;
}
int
ow_scrolldown(l, y, x)
long l;
int y, x;
{
extern void drawtext();
REG char *text;
char buf[80];
#ifdef TTY
if (Ow.tty) return(scrolldown(l, y, x));
#endif
/*-
do ...
- a move(y, x)
- topline-l do_SR()'s
- a move(topline-l-1, 0);
*/
sprintf( buf, "\200 %d %d /cm C S %d /SR C S %d %d /cm C S \200",
y, x,
(topline-l),
(topline-1)-1, 0 );
qaddstr(buf);
move((topline - l) - 1, 0);
while (l < topline)
{
topline--;
text = fetchline(topline);
drawtext(text, FALSE);
do_UP();
do_UP();
}
move(LINES - 1, 0);
clrtoeol();
return 0;
}
int
ow_scrollup(l, y, x)
long l;
int y,x;
{
REG char *text;
char buf[80];
#ifdef TTY
if (Ow.tty) return(scrollup(l, y, x));
#endif
move(y,x);
clrtoeol();
sprintf(buf, "\200 %d /RSR C S \200", l-(botline));
qaddstr(buf);
move(y - (l-botline), 0);
while (l > botline)
{
topline++; /* <-- also adjusts botline */
text = fetchline(botline);
drawtext(text, FALSE);
}
return 0;
}
/*+
X11/NeWS specific flags:
-tty
Force elvis to use the plain termcap interface and not the
window interface. elvis will revert to the termcap interface
automatically if it cannot connect to the X11/NeWS server.
-bkg
Have elvis run in the background, disassociated from the parent
process. If "elvis" is the name of this program this is the
default.
+bkg
Force elvis to run in the forground process. If the name of the
program is not elvis ("vi" for example). then this is the default.
-*/
int
ow_customflags(argv, argc_p)
char *argv[];
int *argc_p;
{
int x, e;
# if MALLOC_DEBUG
malloc_debug(MALLOC_DEBUG);
# endif
# define eq(a,b) (!strcmp(a,b))
# define skip() x++
# define shift() \
{\
int i;\
for (e = *argc_p, i=x; i<e; i++)\
argv[i] = argv[i+1];\
(*argc_p)--;\
}
ow_data_init(&Ow);
# ifndef NO_AUTO_BACKGROUND
{
extern char *strrchr();
char *p = strchr(argv[0], '/');
p = p ? p : argv[0];
if (eq(argv[0], "elvis"))
Ow.background = 1;
}
# endif
for(x=1; x<*argc_p;)
{
if (*argv[x] != '-' && *argv[x] != '+')
skip();
else
{
if (eq(argv[x], "-bkg"))
{
Ow.background = 1;
shift();
}
else if (eq(argv[x], "+bkg"))
{
Ow.background = 0;
shift();
}
else if (eq(argv[x], "-tty"))
{
Ow.tty = 1;
shift();
}
else
{
skip();
}
}
}
return 0;
# undef eq
# undef skip
# undef shift
}
#endif
#if BSD
#include <sys/file.h>
#include <sgtty.h>
int background()
{
int fd, p;
p = fork();
switch (p)
{
case -1:
perror("fork");
exit(1);
default:
exit(0);
case 0:
break;
}
(void) setpgrp(0, getpid());
if ((fd = open("/dev/tty", O_RDWR)) >= 0)
{
ioctl(fd, TIOCNOTTY, 0);
close(fd);
}
return 0;
}
#endif
SHAR_EOF
fi # end of overwriting check
if test -f 'ow_xv.c'
then
echo shar: will not over-write existing file "'ow_xv.c'"
else
cat << \SHAR_EOF > 'ow_xv.c'
/* xview stuff for X11/NeWS version of elvis */
#include "wconfig.h"
#include "vi.h"
#undef WINDOW /* yuck, curses.h has a WINDOW too */
#include <xview/xview.h>
#include <xview/seln.h>
#ifdef USE_XV_SELECTION
/* xview selection support for elvis */
#define FIRST_BUFFER 0
#define NOT_FIRST_BUFFER 1
static Xv_Server server;
static Seln_rank seln_type = SELN_SHELF;
static char *selnbuf = (char *)0;
static Seln_result
ow_xv_seln_read_proc(response)
Seln_request *response;
{
char *reply; /* pointer to the data in the response recv'd */
long len; /* total number of bytes in the seln */
static long have_bytes;
if (*response->requester.context == FIRST_BUFFER)
{
reply = (response->data) + sizeof(SELN_REQ_BYTESIZE);
/* extract length of seln */
len = *(long *)reply;
reply += sizeof(long);
/* malloc up buf to throw seln into */
if (selnbuf)
free(selnbuf);
selnbuf = (char *)malloc(len+1);
if (!selnbuf)
{
perror("malloc failed");
return(SELN_FAILED);
}
*selnbuf = '\0';
have_bytes = 0;
/* move past attribute */
reply += sizeof(SELN_REQ_CONTENTS_ASCII);
*response->requester.context = NOT_FIRST_BUFFER;
}
else
reply = response->data;
/* copy data to selnbuf from tmp buffer */
len = strlen(reply);
bcopy(reply, &selnbuf[have_bytes], len+1);
have_bytes += len;
return SELN_SUCCESS;
}
int
ow_xv_seln_init(display_str)
char *display_str;
{
server = (Xv_Server)xv_create(NULL, SERVER, XV_NAME, display_str, NULL);
return 0;
}
int
ow_get_xv_seln()
{
Seln_holder holder;
Seln_result result;
Seln_request *response;
char context = FIRST_BUFFER;
if (Ow.tty)
result = SELN_FAILED;
else
{
holder = selection_inquire(server, seln_type);
result = selection_query(
server,
&holder,
ow_xv_seln_read_proc,
&context,
SELN_REQ_BYTESIZE, NULL,
SELN_REQ_CONTENTS_ASCII, NULL,
NULL);
}
if (result == SELN_FAILED)
{
msg("could not get xview shelf selection");
return -1;
}
return 0;
}
int
ow_xv_windowpaste(cb_name, at)
char cb_name;
MARK at;
{
switch((int)cb_name)
{
case 'x':
if (ow_get_xv_seln() == 0)
{
ChangeText
{
add(at, selnbuf);
}
free(selnbuf);
selnbuf = (char *)0;
}
return 0;
default:
return -1;
}
}
#endif
SHAR_EOF
fi # end of overwriting check
if test -f 'wconfig.h'
then
echo shar: will not over-write existing file "'wconfig.h'"
else
cat << \SHAR_EOF > 'wconfig.h'
/* wconfig.h , window related configuration header file */
/*
defining macros in this way allows us to fall back on using the dumb
terminal functions if no window system is available at runtime
the convention used is to make the macro the same name as the
original dumb terminal name with the leading letter 'capped
-MCH
*/
#ifndef _elvis_w_macs_
#define _elvis_w_macs_ 1
#include "config.h"
#include <NeWS/wire.h>
#if OPENWINDOWS /* || SomeOtherWindowSys || ... */ /* using a window system */
#if OPENWINDOWS
#define USE_XV_SELECTION 1
/* keep all the flags in a single structure to make it easier to
convert to threads later */
struct ow_data {
/* flags */
int background;
int tty;
int wLINES;
int wCOLS;
/* */
wire_Wire mainWire;
int keyFromNews;
};
#define ow_data_init(op) {\
(op)->background = 0;\
(op)->tty = 0;\
(op)->wLINES = 44;\
(op)->wCOLS = 80;\
(op)->mainWire = (wire_Wire) NULL;\
(op)->keyFromNews = -1;\
}
extern struct ow_data Ow;
/* termcap stuff */
#define Tgetent ow_tgetent
#define Tputs ow_tputs
#define Tgetnum ow_tgetnum
#define Tgoto ow_tgoto
#define Tgetstr ow_tgetstr
#define Tgetflag ow_tgetflag
#define Customflags(av, ac_p) ow_customflags(av, ac_p)
#define Vi() ow_vi()
#define Ex() ow_ex()
#define Initscr() ow_initscr()
#define Beep() ow_beep()
#define Rendermsg(msg) ow_rendermsg(msg);
#define Appendmsg(old,new) ow_appendmsg(old,new);
#define FlushDisplay() ow_flushdisplay();
#define Getsize ow_getsize
#define Resume_curses(quietly) ow_resume_curses((quietly))
#define Suspend_curses() ow_suspend_curses()
#define Tmpstart(fname) ow_tmpstart(fname)
#define Scrolldown(l,y,x) ow_scrolldown(l,y,x)
#define Scrollup(l,y,x) ow_scrollup(l,y,x)
#if USE_XV_SELECTION
# define Iswindowpastebuf(cb) (cb == 'x')
# define Windowpaste(cb,at) ow_xv_windowpaste(cb,at)
#else
# define Iswindowpastebuf(cb) (0)
# define Windowpaste(cb,at) (msg("No window mgr paste available"), -1)
#endif
#endif
#else
/* no window system , just use the dumb terminal functions */
/* termcap stuff */
#define Tgetent tgetent
#define Tputs tputs
#define Tgetnum tgetnum
#define Tgoto tgoto
#define Tgetstr tgetstr
#define Tgetflag tgetflag
#define Customflags(av, ac_p) /* no-op */
#define Vi() vi()
#define Ex() ex()
#define Initscr() initscr()
#define Beep() beep()
#define Rendermsg(msg) rendermsg(msg);
#define Appendmsg(old,new) appendmsg(old,new);
#define FlushDisplay()
#define Getsize getsize
#define Resume_curses(quietly) resume_curses((quietly))
#define Suspend_curses() suspend_curses()
#define Tmpstart(fname) tmpstart(fname)
#define Scrolldown(l,y,x) scrolldown(l,y,x)
#define Scrollup(l,y,x) scrollup(l,y,x)
#define Iswindowpastebuf(cb) (0)
#define Windowpaste(cb,at) (msg("No window mgr. to paste from"), -1)
#endif
#endif
SHAR_EOF
fi # end of overwriting check
if test -f 'CHANGE_NOTES'
then
echo shar: will not over-write existing file "'CHANGE_NOTES'"
else
cat << \SHAR_EOF > 'CHANGE_NOTES'
Mike Hoegeman's change log, this is not gospel of every single change i made
Dec 7 00:00 - date of my copy of elvis version 1.4
***BUG***
-rw------- 1 mh 16474 Dec 20 20:39 input.c
-rw------- 1 mh 13527 Dec 20 20:47 vcmd.c
added indentref arg to input(). this is so autoindent works right
with the 'O' command. I don't know about anybody else but for me
this *has* to work like the standard vi since i use it constantly.
***BUG***
-rw------- 1 mh 20109 Dec 20 23:14 redraw.c
A bug (i put a hack in to work around it.
see the /* HACK */ comment)
To exercise the bug do the following.
- move cursor to a line not at the top or bottom of the screen
- make a change (like add a couples of X's at the beginning)
- hit '-' to move the cursor up one line
- hit 'dd' (it's more obvious if the line you dd is blank)
notice that the line the cursor is on is displaying the old deleted line
it looks like smartlno is not getting readjusted properly
-rw-r--r-- 1 mh 7618 Dec 20 10:01 elvis.ps
Various futzing to get ps file closer to using scalable fonts
misc minor tweaks
-rw-r--r-- 1 mh 1652 Dec 19 13:38 elvismug.im1
elvismug.im1 is a sun raster format file that has a
rather grainy picture of elvis. will use this for icon image when i get
around to it. it would be nice to get a better picture. this one came
from the pbm package bitmaps. It might look pretty good in
color/grayscale.
-rw-r--r-- 1 mh 1015 Dec 19 13:03 elvis_cps.cps
elvis_cps.cps file mod to get filename on icon.
***BUG***
-rw-r--r-- 1 mh 25955 Dec 20 17:25 Makefile
-rw-r--r-- 1 mh 2525 Dec 20 17:23 tnamerec.c
-rw------- 1 mh 5248 Dec 20 17:10 virec.c
-rw------- 1 mh 8195 Jan 1 15:50 config.h
-rw------- 1 mh 12876 Dec 20 13:00 tmp.c
Modified tmp.c virec.c config.h and added module tnamerec.c to
allow editing multiple instances of the same file at once. May want
to just put tnamerec.c into virec.c since that is the only place it
is used. The temp file name now has the pid of the process added on
to the end with a '-' in front of it (see TMPNAME in config.h).
Also changed the tmpfile prefix from elv to El so that a filename
would still fit in 14 chars (for sysV). see tnamerec.c for how
virec handles this change. Added tnamerec to Makefile of course.
note that this won't work for DOG, etc.. but there are suitable
ifdefs to make it backwards compatible for those unfortunates.
-rw------- 1 mh 20089 Dec 20 22:23 redraw.c
replaced constant 5 in nudgecursor() with macro NUDGE_COST
because a move is always cheaper in PostScript than a string
display. this will also allow other ports to define their
NUDGE_COST's. should this be put in (w)config.h ??
-rw------- 1 mh 8026 Dec 21 12:56 main.c
-rw-r--r-- 1 mh 2353 Dec 21 15:06 wconfig.h
-rw------- 1 mh 13569 Dec 21 15:05 ow.c
Added Customflags() macro to main(), this is to allow custom
version of elvis to process any version specific flags without
having to clutter up the standard elvis code with ifdefs's. in
wconfig.h the macro is defined to a no-op for the standard tty
version of elvis. for the openwindows version Customflags() is
defined to be ow_customflags in ow.c. ow_customflags() is a good
reference for someone wanting to make their own Customflags()
function.
-rw------- 1 mh 13569 Dec 21 15:05 ow.c
-rw------- 1 mh 20227 Dec 21 14:57 redraw.c
-rw-r--r-- 1 mh 2353 Dec 21 15:06 wconfig.h
Made final fixes to ow termcap modules to switch to using the
standard termcap functions if no server is running the Ow.tty
global determines which display style to use.
Rearranged various ow related globals into a single structure so
that conversion to threads will be easier. something similar will
have to be done for the regular elvis globals to make it
threadable.
-rw------- 1 mh 8026 Dec 30 21:52 main.c
Changed a resume_curses() call in trapint() to the Resume_curses()
macro front end. Somehow I missed this before. Without this fix
your parent shell window will wack out if type ctrl C in it after
starting an elvis window that is not backgrounded.
-rw-r--r-- 1 mh 7852 Jan 1 14:47 elvis.ps
Fixed a bug in the /RSR method of ElvisCanvas that left it's
argument on the stack, this (eventually) would cause a stack
overflow if you scrolled around in a file long enough
-rw------- 1 mh 15041 Jan 1 18:18 ow.c
-rw------- 1 mh 17635 Jan 1 18:23 tio.c
-rw-r--r-- 1 mh 2533 Jan 1 18:21 wconfig.h
isolated out the display specific parts of displaying a string
on the msg line into the Rendermsg and Appendmsg macro's (in wconfig.h )
:: for the standard termcap interface they are rendermsg
and appendmsg ( in tio.c )
:: for the OPENWINDOWS version as ow_rendermsg and ow_appendmsg
now in ow.c
-rw------- 1 mh 16672 Jan 1 23:20 input.c
Replaced beep()'s with Beep()'s. this would mess up the display
in subtle ways by trying to render a ^G on the display when
using the display version
-rw-r--r-- 1 mh 8580 Jan 1 23:06 elvis.ps
-rw------- 1 mh 15544 Jan 1 20:29 ow.c
Put in the cQ cX cV cI cR capabilities for the OPENWINDOWS
version of elvis. Now the cursor changes shape when you
switch from insert mode to command mode to the :ex command
line
-rw-r--r-- 1 mh 8627 Jan 2 20:04 elvis.ps
Fixed bug that did not show up until mutiple cursor types were
implemented. The ST did not hide the cursor before it started
drawing text. this was OK with a simple block cursor because
the text always blanked over the of the old cursor completely.
***BUG***
-rw------- 1 mh 16880 Jan 4 00:31 input.c
Added some code the end of the interactive section of the input()
function to make autoindent work more like the original vi.
This is necessary really so that things like piping sections
of text thru fmt have a hope of working the way you would
expect. The fix basically un autoindents the last line if it
ended up being a line that was all white space.
-rw------- 1 mh 13500 Jan 17 23:59 cut.c
-rw-r--r-- 1 mh 26261 Jan 17 21:38 Makefile
-rw------- 1 mh 8244 Jan 17 22:02 config.h
-rw------- 1 mh 15658 Jan 17 21:47 ow.c
-rw-r--r-- 1 mh 2140 Jan 17 21:55 ow_xv.c
-rw-r--r-- 1 mh 2561 Jan 17 21:47 wconfig.h
Added code to support pasting from the the xview shelf the
buffer to paste from is buffer 'x'. cut will happen some day but
that is more work. see Iswindowpastebuf() and Windowpaste() macros
in cut.c for what the exact changes are
SHAR_EOF
fi # end of overwriting check
# End of shell archive
exit 0