v14i058: Jove, an emacs variant, version 4.9, Part02/21
Rich Salz
rsalz at bbn.com
Tue Apr 26 09:33:25 AEST 1988
Submitted-by: Jonathan Payne <jpayne at cs.rochester.edu>
Posting-number: Volume 14, Issue 58
Archive-name: jove4.9/part02
#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of archive 2 (of 21)."
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f './doc/jove.qref' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'./doc/jove.qref'\"
else
echo shar: Extracting \"'./doc/jove.qref'\" \(5757 characters\)
sed "s/^X//" >'./doc/jove.qref' <<'END_OF_FILE'
X JOVE Command Quick Reference Guide
X
X--- HELP
apropos describe-bindings describe-command ESC ?
describe-key C-X ? describe-variable execute-named-command ESC X
X
X
X--- MOVING AROUND
backward-character C-B backward-list ESC C-P backward-paragraph ESC [
backward-s-expression ESC C-B backward-sentence ESC A backward-up-list ESC C-U
backward-word ESC B beginning-of-file ESC < beginning-of-line C-A
beginning-of-window ESC , current-error down-list ESC C-D
end-of-file ESC > end-of-line C-E end-of-window ESC .
find-tag C-X T find-tag-at-point first-non-blank ESC M
forward-character C-F forward-list ESC C-N forward-paragraph ESC ]
forward-s-expression ESC C-F forward-sentence ESC E forward-word ESC F
goto-line ESC G next-error C-X C-N next-line C-N
next-page C-V previous-error C-X C-P previous-line C-P
previous-page ESC V window-find-tag C-X 4 t
X
X--- INSERTING AND DELETING
delete-blank-lines C-X C-O delete-next-char C-D delete-previous-char C-H (DEL)
delete-white-space ESC-\ erase-buffer handle-tab C-I (TAB)
kill-next-word ESC D kill-next-word ESC d kill-previous-word ESC ^?
kill-s-expression ESC C-K kill-to-beginning-of-se C-X ^? kill-to-end-of-line C-K
kill-to-end-of-sentence ESC K newline C-M (RETURN) newline-and-backup C-O
newline-and-indent C-J over-write-mode quoted-insert C-^
X
X
X--- SEARCH AND REPLACE
find-tag C-X T find-tag-at-point i-search-forward
i-search-reverse query-replace-string ESC Q replace-in-region
replace-string ESC R search-forward C-\ search-reverse C-R
window-find-tag C-X 4 t
X
X--- MARKS AND REGIONS
append-region append-region case-region-lower
case-region-upper copy-region ESC W exchange-point-and-mark C-X C-X
filter-region kill-region C-W replace-in-region
set-mark C-@ (C-SPACE) write-region yank C-Y
yank-pop ESC Y
X
X--- TEXT PROCESSING
auto-fill-mode bind-macro-to-word-abbr case-character-capitali
case-region-lower case-region-upper case-word-capitalize ESC C
case-word-lower ESC L case-word-upper ESC U current-error
define-global-word-abbr define-mode-word-abbrev edit-word-abbrevs
fill-paragraph ESC J fill-region left-margin-here
next-error C-X C-N over-write-mode parse-spelling-errors-i
previous-error C-X C-P read-word-abbrev-file right-margin-here
spell-buffer text-mode transpose-characters C-T
transpose-lines C-X C-T visible-spaces-in-windo word-abbrev-mode
write-word-abbrev-file
X
X--- DISPLAY AND WINDOWS
clear-and-redraw ESC C-L delete-current-window C-X D delete-current-window C-X d
delete-other-windows C-X 1 grow-window C-X ^ next-window C-X N
number-lines-in-window page-next-window ESC C-V previous-window C-X P
redraw-display C-L scroll-down ESC Z scroll-up C-Z
shrink-window split-current-window C-X 2 window-find-buffer C-X 4 b
window-find-file C-X 4 f window-find-tag C-X 4 t
X
X--- FILES AND BUFFERS
append-region append-region buffer-position
delete-buffer C-X K delete-buffer C-X k erase-buffer
find-file C-X C-F insert-file C-X C-I kill-buffer C-X K
list-buffers C-X C-B make-buffer-unmodified ESC ~ read-macros-from-file
read-word-abbrev-file rename-buffer save-file C-X C-\
save-file C-X C-S select-buffer C-X B select-existing-buffer C-X B
spell-buffer visit-file C-X C-V visit-file C-X C-R
window-find-buffer C-X 4 b window-find-file C-X 4 f write-file C-X C-W
write-macros-to-file write-modified-files C-X C-M write-region
write-word-abbrev-file
X
X--- DIRECTORIES
cd dirs popd
pushd pwd
X
X
X--- PROGRAMMERS
auto-indent-mode backward-s-expression ESC C-B c-mode
compile-it(make) C-X C-E current-error fill-comment
forward-s-expression ESC C-F grind-s-expr kill-s-expression ESC C-K
lisp-mode next-error C-X C-N number-lines-in-window
paren-flash ),],} parse-errors parse-special-errors
previous-error C-X C-P show-match-mode string-length
visible-spaces-in-windo
X
X--- REPEAT
digit ESC - digit ESC [0-9] quadruple-numeric-argum C-U
X
X
X--- MACROS
delete-macro execute-keyboard-macro C-X E make-macro-interactive
make-macro-interactive ESC I read-macros-from-file begin-kbd-macro C-X (
end-kbd-macro C-X ) write-macros-to-file
X
X--- SHELL
exit-jove C-X C-C i-shell-command pause-jove ESC S
pause-jove ESC s push-shell shell
shell-command C-X ! shell-command-to-buffer suspend-jove
X
X
X--- PROCESSES
eof-process interrupt-process C-C kill-process
list-processes process-bind-to-key process-newline C-M (RETURN)
process-send-data-no-re quit-process stop-process
X
X
X--- MISCELLANEOUS
auto-execute-command auto-execute-macro bind-macro-to-key
bind-macro-to-word-abbr bind-to-key character-to-octal-inse
date execute-extended-comman ESC X fundamental-mode
print recursive-edit ring-the-bell(ABORT) C-G
set source unbind-key
version
X
X--- VARIABLES
allow-^S-and-^Q allow-bad-filenames auto-case-abbrev
bad-filename-extensions c-indentation-increment case-ignore-search
comment-format disable-biff error-window-size
file-creation-mode files-should-end-with-n internal-tabstop
left-margin mailbox mail-check-frequency
make-backup-files mark-threshold marks-should-float
match-regular-expressio meta-key mode-line
mode-line-should-stando paren-flash-delay physical-tabstop
process-prompt interrupt-character right-margin
scroll-step search-exit-char send-typeout-to-buffer
shell shell-flags sync-frequency
tag-file tmp-file-pathname update-time-frequency
use-i/d-char visible-bell wrap-search
write-files-on-make
END_OF_FILE
if test 5757 -ne `wc -c <'./doc/jove.qref'`; then
echo shar: \"'./doc/jove.qref'\" unpacked with wrong size!
fi
# end of './doc/jove.qref'
fi
if test -f './mac.h' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'./mac.h'\"
else
echo shar: Extracting \"'./mac.h'\" \(4616 characters\)
sed "s/^X//" >'./mac.h' <<'END_OF_FILE'
X/***************************************************************************
X * This program is Copyright (C) 1986, 1987, 1988 by Jonathan Payne. JOVE *
X * is provided to you without charge, and with no warranty. You may give *
X * away copies of JOVE, including sources, provided that this notice is *
X * included in all the files. *
X ***************************************************************************/
X
X/* Macintosh related things. K. Mitchum 2/88 */
X
X
X#define NMENUS 6
X#define NMENUITEMS 40 /* This has GOT to be enough! */
X
typedef data_obj *menumap[NMENUITEMS];
X#ifndef _mac
X typedef char **MenuHandle;
X#endif
struct menu {
X char *Name;
X int menu_id;
X MenuHandle Mn;
X menumap m;
X};
X
struct stat {
X int st_dev; /* volume number */
X long st_ino; /* file number on volume */
X dev_t st_rdev;
X off_t st_size; /* logical end of file */
X int st_mode;
X time_t st_mtime; /* last modified */
X};
X
X#define S_IFDIR 2
X
typedef char *va_list;
X#define va_dcl va_list va_alist;
X#define va_start(l) l = (va_list)&va_alist
X#define va_arg(l,m) ((m*)(l += sizeof(m)))[-1]
X#define va_end(l) l = NULL
X
X#ifdef _mac
extern struct menu Menus[NMENUS];
X
static EventRecord the_Event;
X
X/* keycodes (from Inside MacIntosh I-251). because of changes with
the MacPlus, there are some duplicate codes between cursor keys and
keypad keys. these can be deciphered by the corresponding character
codes, which are different. this table simply translates a keycode
into a character code that is appropriate. */
X
X#define NOKEY -1
X#define RET 0x0D
X#define TAB 0x09
X#define BACKSP 0x08
X#define ENTERL NOKEY /* left enter key absent on MacPlus */
X#define COMMAND NOKEY /* will be no translation anyway for these */
X#define SHIFT NOKEY
X#define CAPSLOCK NOKEY
X#define OPTION NOKEY
X#define PADDOT '.' /* PAD period */
X#define PAD0 '0'
X#define PAD1 '1'
X#define PAD2 '2'
X#define PAD3 '3'
X#define PAD4 '4'
X#define PAD5 '5'
X#define PAD6 '6'
X#define PAD7 '7'
X#define PAD8 '8'
X#define PAD9 '9'
X#define LEFTCURS 'B' /* jove only, make like commands */
X#define RIGHTCURS 'F'
X#define UPCURS 'P'
X#define DOWNCURS 'N'
X#define PADENTER RET
X#define PADMINUS '-'
X#define CLEAR 0
X
static char nsh_keycodes[] = {
X 'a','s','d','f','h', /* 0 - 4 */
X 'g','z','x','c','v', /* 5 - 9 */
X NOKEY,'b','q','w','e', /* 10 - 14 */
X 'r','y','t','1','2', /* 15 - 19 */
X '3','4','6','5','=', /* 20 - 24 */
X '9','7','-','8','0', /* 25 - 29 */
X ']','O','u','[','i', /* 30 - 34 */
X 'p',RET,'l','j','\'', /* 35 - 39 */
X 'k',';','\\',',','/', /* 40 - 44 */
X 'n','m','.',TAB,NOKEY, /* 45 - 49 */
X '`',BACKSP,ENTERL,NOKEY,NOKEY, /* 50 - 54 */
X COMMAND,SHIFT,CAPSLOCK,OPTION, NOKEY, /* 55 - 59 */
X NOKEY,NOKEY,NOKEY,NOKEY,NOKEY, /* 60 - 64 */
X PADDOT,RIGHTCURS,NOKEY,NOKEY,NOKEY, /* 65 - 69 */
X LEFTCURS,CLEAR,DOWNCURS,NOKEY,NOKEY, /* 70 - 74 */
X NOKEY,PADENTER,UPCURS,PADMINUS,NOKEY, /* 75 - 79 */
X NOKEY,NOKEY,PAD0,PAD1,PAD2, /* 80 - 84 */
X PAD3,PAD4,PAD5,PAD6,PAD7, /* 85 - 89 */
X NOKEY,PAD8,PAD9
X};
X
static char sh_keycodes[] = {
X 'A','S','D','F','H', /* 0 - 4 */
X 'G','Z','X','C','V', /* 5 - 9 */
X NOKEY,'B','Q','W','E', /* 10 - 14 */
X 'R','Y','T','!','@', /* 15 - 19 */
X '#','$','^','%','+', /* 20 - 24 */
X '(','&','_','*',')', /* 25 - 29 */
X '}','O','U','{','I', /* 30 - 34 */
X 'P',RET,'L','J','\'', /* 35 - 39 */
X 'K',';','|','<','?', /* 40 - 44 */
X 'N','M','>',TAB,NOKEY, /* 45 - 49 */
X '~',BACKSP,ENTERL,NOKEY,NOKEY, /* 50 - 54 */
X COMMAND,SHIFT,CAPSLOCK,OPTION, NOKEY, /* 55 - 59 */
X NOKEY,NOKEY,NOKEY,NOKEY,NOKEY, /* 60 - 64 */
X PADDOT,RIGHTCURS,NOKEY,NOKEY,NOKEY, /* 65 - 69 */
X LEFTCURS,CLEAR,DOWNCURS,NOKEY,NOKEY, /* 70 - 74 */
X NOKEY,PADENTER,UPCURS,PADMINUS,NOKEY, /* 75 - 79 */
X NOKEY,NOKEY,PAD0,PAD1,PAD2, /* 80 - 84 */
X PAD3,PAD4,PAD5,PAD6,PAD7, /* 85 - 89 */
X NOKEY,PAD8,PAD9
X};
X
X
X
X/* tn.h Modified for variable screen size 11/21/87. K. Mitchum */
X
static int tn_rows, tn_cols, tn_top, tn_left, tn_bottom, tn_right;
int MAXROW, MAXCOL;
X
X#define SCREENSIZE (tn_rows * ROWSIZE)
X#define FONT monaco
X#define TEXTSIZE 9
X
X#define HEIGHT 11
X#define WIDTH 6
X#define DESCENT 2
X#define TWIDTH tn_cols * WIDTH
X#define THEIGHT tn_rows * HEIGHT
X
X/* window specs */
X
X#define SCROLLWIDTH 16 /* width of scroll bar control in pixels */
X#define WINDWIDTH tn_right - tn_left - SCROLLWIDTH - 1/* local coordinates */
X#define WINDHEIGHT tn_bottom - tn_top /* local coordinates */
X
X/* for keyboard routines */
X#define MCHARS 32 /* must be power of two */
X#define NMASK MCHARS -1 /* circular buffer */
X
X#endif /* _mac */
X
X
END_OF_FILE
if test 4616 -ne `wc -c <'./mac.h'`; then
echo shar: \"'./mac.h'\" unpacked with wrong size!
fi
# end of './mac.h'
fi
if test -f './malloc.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'./malloc.c'\"
else
echo shar: Extracting \"'./malloc.c'\" \(4027 characters\)
sed "s/^X//" >'./malloc.c' <<'END_OF_FILE'
X/***************************************************************************
X * This program is Copyright (C) 1986, 1987, 1988 by Jonathan Payne. JOVE *
X * is provided to you without charge, and with no warranty. You may give *
X * away copies of JOVE, including sources, provided that this notice is *
X * included in all the files. *
X ***************************************************************************/
X
X#include "tune.h"
X
X#ifdef MY_MALLOC
X
X/* avoid break bug */
X#ifdef pdp11
X# define GRANULE 64
X#else
X# define GRANULE 0
X#endif
X
X/* C storage allocator
X * circular first-fit strategy
X * works with noncontiguous, but monotonically linked, arena
X * each block is preceded by a ptr to the (pointer of)
X * the next following block
X * blocks are exact number of words long
X * aligned to the data type requirements of ALIGN
X * pointers to blocks must have BUSY bit 0
X * bit in ptr is 1 for busy, 0 for idle
X * gaps in arena are merely noted as busy blocks
X * last block of arena (pointed to by alloct) is empty and
X * has a pointer to first
X * idle blocks are coalesced during space search
X *
X * a different implementation may need to redefine
X * ALIGN, NALIGN, BLOCK, BUSY, INT
X * where INT is integer type to which a pointer can be cast
X */
X
X#define INT int
X#define ALIGN int
X#define NALIGN 1
X#define WORD sizeof(union store)
X#define BLOCK 1024 /* a multiple of WORD*/
X#define BUSY 1
X#define NULL 0
X#define testbusy(p) ((INT)(p)&BUSY)
X#define setbusy(p) (union store *) ((INT) (p) | BUSY)
X#define clearbusy(p) (union store *) ((INT) (p) &~ BUSY)
X
union store {
X union store *ptr;
X ALIGN dummy[NALIGN];
X int calloc; /*calloc clears an array of integers*/
X};
X
static union store allocs[2], /*initial arena*/
X *allocp, /*search ptr*/
X *alloct, /*arena top*/
X *allocx; /*for benefit of realloc*/
X
char *sbrk();
X
char *
malloc(nbytes)
unsigned int nbytes;
X{
X register union store *p,
X *q;
X register int nw;
X static int temp; /* coroutines assume no auto */
X
X if (allocs[0].ptr == 0) { /* first time */
X allocs[0].ptr = setbusy(&allocs[1]);
X allocs[1].ptr = setbusy(&allocs[0]);
X alloct = &allocs[1];
X allocp = &allocs[0];
X }
X nw = (nbytes + WORD + WORD - 1) / WORD;
X for (p = allocp; ; ) {
X for (temp = 0; ; ) {
X if (!testbusy(p->ptr)) {
X while (!testbusy((q = p->ptr)->ptr))
X p->ptr = q->ptr;
X if(q >= p + nw && p + nw >= p)
X goto found;
X }
X q = p;
X p = clearbusy(p->ptr);
X if (p > q)
X ;
X else if (q != alloct || p != allocs)
X return NULL;
X else if (++temp > 1)
X break;
X }
X temp = ((nw + BLOCK/WORD) / (BLOCK/WORD)) * (BLOCK/WORD);
X q = (union store *) sbrk(0);
X if (q + temp + GRANULE < q)
X return NULL;
X q = (union store *) sbrk(temp * WORD);
X if ((INT) q == -1)
X return NULL;
X alloct->ptr = q;
X if (q != alloct+1)
X alloct->ptr = setbusy(alloct->ptr);
X alloct = q->ptr = q + temp - 1;
X alloct->ptr = setbusy(allocs);
X }
found:
X allocp = p + nw;
X if (q > allocp) {
X allocx = allocp->ptr;
X allocp->ptr = p->ptr;
X }
X p->ptr = setbusy(allocp);
X return (char *) (p + 1);
X}
X
X/* freeing strategy tuned for LIFO allocation */
X
free(ap)
register char *ap;
X{
X register union store *p = (union store *) ap;
X
X allocp = --p;
X p->ptr = clearbusy(p->ptr);
X}
X
X/* realloc(p, nbytes) reallocates a block obtained from malloc()
X * and freed since last call of malloc()
X * to have new size nbytes, and old content
X * returns new location, or 0 on failure
X*/
X
char *
realloc(obj, nbytes)
char *obj;
unsigned int nbytes;
X{
X register union store *q,
X *p = (union store *) obj;
X union store *s,
X *t;
X register unsigned int nw;
X unsigned int onw;
X
X if (testbusy(p[-1].ptr))
X free((char *) p);
X onw = p[-1].ptr - p;
X q = (union store *) malloc(nbytes);
X if(q == NULL || q == p)
X return((char *) q);
X s = p;
X t = q;
X nw = (nbytes + WORD - 1)/WORD;
X if (nw < onw)
X onw = nw;
X while (onw-- != 0)
X *t++ = *s++;
X if(q < p && q + nw >= p)
X (q + (q+nw-p))->ptr = allocx;
X return (char *) q;
X}
X
X#endif /* MY_MALLOC */
END_OF_FILE
if test 4027 -ne `wc -c <'./malloc.c'`; then
echo shar: \"'./malloc.c'\" unpacked with wrong size!
fi
# end of './malloc.c'
fi
if test -f './marks.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'./marks.c'\"
else
echo shar: Extracting \"'./marks.c'\" \(4499 characters\)
sed "s/^X//" >'./marks.c' <<'END_OF_FILE'
X/***************************************************************************
X * This program is Copyright (C) 1986, 1987, 1988 by Jonathan Payne. JOVE *
X * is provided to you without charge, and with no warranty. You may give *
X * away copies of JOVE, including sources, provided that this notice is *
X * included in all the files. *
X ***************************************************************************/
X
int MarksShouldFloat = 1;
X
X#include "jove.h"
X
Mark *
MakeMark(line, column, type)
register Line *line;
X{
X register Mark *newmark = (Mark *) emalloc(sizeof *newmark);
X
X MarkSet(newmark, line, column);
X newmark->m_next = curbuf->b_marks;
X newmark->m_flags = type;
X curbuf->b_marks = newmark;
X return newmark;
X}
X
void
flush_marks(b)
Buffer *b;
X{
X register Mark *m,
X *next;
X
X m = b->b_marks;
X while (m != 0) {
X next = m->m_next;
X free((char *) m);
X m = next;
X }
X}
X
void
DelMark(m)
register Mark *m;
X{
X register Mark *mp = curbuf->b_marks;
X
X if (m == mp)
X curbuf->b_marks = m->m_next;
X else {
X while (mp != 0 && mp->m_next != m)
X mp = mp->m_next;
X if (mp == 0)
X complain("Unknown mark!");
X mp->m_next = m->m_next;
X }
X free((char *) m);
X}
X
void
AllMarkSet(b, line, col)
Buffer *b;
register Line *line;
X{
X register Mark *mp;
X
X for (mp = b->b_marks; mp != 0; mp = mp->m_next)
X MarkSet(mp, line, col);
X}
X
void
MarkSet(m, line, column)
Mark *m;
Line *line;
X{
X m->m_line = line;
X m->m_char = column;
X}
X
void
PopMark()
X{
X int pmark;
X
X if (curmark == 0)
X return;
X if (curbuf->b_markring[(curbuf->b_themark + 1) % NMARKS] == 0) {
X pmark = curbuf->b_themark;
X do {
X if (--pmark < 0)
X pmark = NMARKS - 1;
X } while (curbuf->b_markring[pmark] != 0);
X
X curbuf->b_markring[pmark] = MakeMark(curline, curchar, MarksShouldFloat ? M_FLOATER : M_FIXED);
X ToMark(curmark);
X DelMark(curmark);
X curmark = 0;
X } else
X PtToMark();
X
X pmark = curbuf->b_themark - 1;
X if (pmark < 0)
X pmark = NMARKS - 1;
X curbuf->b_themark = pmark;
X}
X
void
SetMark()
X{
X if (is_an_arg())
X PopMark();
X else
X set_mark();
X}
X
void
set_mark()
X{
X do_set_mark(curline, curchar);
X}
X
void
do_set_mark(l, c)
Line *l;
X{
X curbuf->b_themark = (curbuf->b_themark + 1) % NMARKS;
X if (curmark == 0)
X curmark = MakeMark(l, c, MarksShouldFloat ? M_FLOATER : M_FIXED);
X else
X MarkSet(curmark, l, c);
X s_mess("[Point pushed]");
X}
X
X/* Move point to Mark */
X
void
ToMark(m)
Mark *m;
X{
X int len;
X
X if (m == 0)
X return;
X DotTo(m->m_line, m->m_char);
X if (curchar > (len = length(curline)))
X curchar = len;
X}
X
Mark *
CurMark()
X{
X if (curmark == 0)
X complain("No mark.");
X return curmark;
X}
X
void
PtToMark()
X{
X Line *mline;
X int mchar;
X Mark *m = CurMark();
X
X mline = curline;
X mchar = curchar;
X
X ToMark(m);
X MarkSet(m, mline, mchar);
X}
X
X/* Fix marks for after a deletion. For now, even marks that don't
X float will actually float, because we can't allow marks to point
X to non-existant lines. */
X
void
DFixMarks(line1, char1, line2, char2)
register Line *line1,
X *line2;
X{
X register Mark *m;
X Line *lp = line1;
X
X if (curbuf->b_marks == 0)
X return;
X while (lp != line2->l_next) {
X for (m = curbuf->b_marks; m != 0; m = m->m_next)
X if (m->m_line == lp)
X m->m_char |= (1 << 15);
X lp = lp->l_next;
X }
X for (m = curbuf->b_marks; m; m = m->m_next) {
X if ((m->m_char & (1 << 15)) == 0)
X continue; /* Not effected */
X m->m_char &= ~(1 << 15);
X if (m->m_line == line1 && m->m_char < char1)
X continue; /* This mark is not affected */
X if (line1 == line2) {
X if (m->m_char >= char1 && m->m_char <= char2)
X m->m_char = char1;
X else if (m->m_char > char2)
X m->m_char -= (char2 - char1);
X /* Same line move the mark backward */
X } else if (m->m_line == line2) {
X if (m->m_char > char2)
X m->m_char = char1 + (m->m_char - char2);
X else
X m->m_char = char1;
X m->m_flags |= M_BIG_DELETE;
X m->m_line = line1;
X } else {
X m->m_char = char1;
X m->m_line = line1;
X m->m_flags |= M_BIG_DELETE;
X }
X }
X}
X
X/* Fix marks after an insertion. Marks that don't float are ignored
X on insertion, which means PtToMark has to be careful ... */
X
void
IFixMarks(line1, char1, line2, char2)
register Line *line1,
X *line2;
X{
X register Mark *m;
X
X for (m = curbuf->b_marks; m != 0; m = m->m_next) {
X if ((m->m_flags & M_FLOATER) == 0)
X continue;
X if (m->m_line == line1) {
X if (m->m_char > char1) {
X m->m_line = line2;
X if (line1 == line2)
X m->m_char += (char2 - char1);
X else
X m->m_char = char2 + (m->m_char - char1);
X }
X }
X }
X}
END_OF_FILE
if test 4499 -ne `wc -c <'./marks.c'`; then
echo shar: \"'./marks.c'\" unpacked with wrong size!
fi
# end of './marks.c'
fi
if test -f './move.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'./move.c'\"
else
echo shar: Extracting \"'./move.c'\" \(4844 characters\)
sed "s/^X//" >'./move.c' <<'END_OF_FILE'
X/***************************************************************************
X * This program is Copyright (C) 1986, 1987, 1988 by Jonathan Payne. JOVE *
X * is provided to you without charge, and with no warranty. You may give *
X * away copies of JOVE, including sources, provided that this notice is *
X * included in all the files. *
X ***************************************************************************/
X
X#include "jove.h"
X#include "ctype.h"
X
X#ifdef MAC
X# undef private
X# define private
X#endif
X
X#ifdef LINT_ARGS
private void to_sent(int);
X#else
private void to_sent();
X#endif
X
X#ifdef MAC
X# undef private
X# define private static
X#endif
X
static int line_pos;
X
void
f_char(n)
register int n;
X{
X if (n < 0) {
X b_char(-n);
X return;
X }
X while (--n >= 0) {
X if (eolp()) { /* Go to the next Line */
X if (curline->l_next == 0)
X break;
X SetLine(curline->l_next);
X } else
X curchar += 1;
X }
X}
X
void
b_char(n)
register int n;
X{
X if (n < 0) {
X f_char(-n);
X return;
X }
X while (--n >= 0) {
X if (bolp()) {
X if (curline->l_prev == 0)
X break;
X SetLine(curline->l_prev);
X Eol();
X } else
X curchar -= 1;
X }
X}
X
void
ForChar()
X{
X f_char(arg_value());
X}
X
void
BackChar()
X{
X b_char(arg_value());
X}
X
void
NextLine()
X{
X if ((curline == curbuf->b_last) && eolp())
X complain(NullStr);
X line_move(FORWARD, arg_value(), YES);
X}
X
void
PrevLine()
X{
X if ((curline == curbuf->b_first) && bolp())
X complain(NullStr);
X line_move(BACKWARD, arg_value(), YES);
X}
X
X/* moves to a different line in DIR; LINE_CMD says whether this is
X being called from NextLine() or PrevLine(), in which case it tries
X to line up the column with the column of the current line */
X
void
line_move(dir, n, line_cmd)
X{
X Line *(*proc)() = (dir == FORWARD) ? next_line : prev_line;
X Line *line;
X
X line = (*proc)(curline, n);
X if (line == curline) {
X if (dir == FORWARD) Eol();
X else Bol();
X return;
X }
X
X if (line_cmd) {
X this_cmd = LINECMD;
X if (last_cmd != LINECMD)
X line_pos = calc_pos(linebuf, curchar);
X }
X SetLine(line); /* curline is in linebuf now */
X if (line_cmd)
X curchar = how_far(curline, line_pos);
X}
X
X/* returns what cur_char should be for that position col */
X
int
how_far(line, col)
Line *line;
X{
X register char *lp;
X register int pos,
X c;
X char *base;
X
X base = lp = lcontents(line);
X pos = 0;
X
X while (pos < col && (c = (*lp & CHARMASK))) {
X if (c == '\t')
X pos += (tabstop - (pos % tabstop));
X else if (isctrl(c))
X pos += 2;
X else
X pos += 1;
X lp += 1;
X }
X
X return lp - base;
X}
X
void
Bol()
X{
X curchar = 0;
X}
X
void
Eol()
X{
X curchar = strlen(linebuf);
X}
X
void
Eof()
X{
X PushPntp(curbuf->b_last);
X ToLast();
X}
X
void
Bof()
X{
X PushPntp(curbuf->b_first);
X ToFirst();
X}
X
X/* Move forward (if dir > 0) or backward (if dir < 0) a sentence. Deals
X with all the kludgery involved with paragraphs, and moving backwards
X is particularly yucky. */
X
private void
to_sent(dir)
X{
X Bufpos *new,
X old;
X extern char *ParaStr;
X
X DOTsave(&old);
X
X new = dosearch("^[ \t]*$\\|[?.!]", dir, 1);
X if (new == 0) {
X if (dir == BACKWARD) ToFirst();
X else ToLast();
X return;
X }
X SetDot(new);
X if (dir < 0) {
X to_word(1);
X if ((old.p_line == curline && old.p_char <= curchar) ||
X (inorder(new->p_line, new->p_char, old.p_line, old.p_char) &&
X inorder(old.p_line, old.p_char, curline, curchar))) {
X SetDot(new);
X to_sent(dir);
X }
X return; /* We're there? */
X }
X if (blnkp(linebuf)) {
X Bol();
X b_char(1);
X if (old.p_line == curline && old.p_char >= curchar) {
X to_word(1); /* Oh brother this is painful */
X to_sent(1);
X }
X } else {
X extern int REbom;
X
X curchar = REbom + 1; /* Just after the [?.!] */
X if (LookingAt("[\")] *\\|[\")]$", linebuf, curchar))
X curchar += 1;
X else if (!eolp() && !LookingAt(" *", linebuf, curchar))
X to_sent(dir);
X }
X}
X
void
Bos()
X{
X register int num = arg_value();
X
X if (num < 0) {
X negate_arg_value();
X Eos();
X return;
X }
X
X while (--num >= 0) {
X to_sent(-1);
X if (bobp())
X break;
X }
X}
X
void
Eos()
X{
X register int num = arg_value();
X
X if (num < 0) {
X negate_arg_value();
X Bos();
X return;
X }
X
X while (--num >= 0) {
X to_sent(1);
X if (eobp())
X break;
X }
X}
X
void
f_word(num)
register int num;
X{
X register char c;
X if (num < 0) {
X b_word(-num);
X return;
X }
X while (--num >= 0) {
X to_word(FORWARD);
X while ((c = linebuf[curchar]) != 0 && isword(c))
X curchar += 1;
X if (eobp())
X break;
X }
X this_cmd = 0; /* Semi kludge to stop some unfavorable behavior */
X}
X
void
b_word(num)
register int num;
X{
X register char c;
X
X if (num < 0) {
X f_word(-num);
X return;
X }
X while (--num >= 0) {
X to_word(BACKWARD);
X while (!bolp() && (c = linebuf[curchar - 1], isword(c)))
X curchar -= 1;
X if (bobp())
X break;
X }
X this_cmd = 0;
X}
X
void
ForWord()
X{
X f_word(arg_value());
X}
X
void
BackWord()
X{
X b_word(arg_value());
X}
END_OF_FILE
if test 4844 -ne `wc -c <'./move.c'`; then
echo shar: \"'./move.c'\" unpacked with wrong size!
fi
# end of './move.c'
fi
if test -f './scandir.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'./scandir.c'\"
else
echo shar: Extracting \"'./scandir.c'\" \(4890 characters\)
sed "s/^X//" >'./scandir.c' <<'END_OF_FILE'
X/***************************************************************************
X * This program is Copyright (C) 1986, 1987, 1988 by Jonathan Payne. JOVE *
X * is provided to you without charge, and with no warranty. You may give *
X * away copies of JOVE, including sources, provided that this notice is *
X * included in all the files. *
X ***************************************************************************/
X
X#include "jove.h"
X
X#ifdef MSDOS
X#include <dos.h>
X#include <search.h>
X#endif
X
X#ifdef UNIX
X#include <sys/stat.h>
X#ifdef M_XENIX
X#include <sys/ndir.h>
X#else
X#include <sys/dir.h>
X#endif /* M_XENIX */
X#endif
X
X#ifdef F_COMPLETION
X
X#ifdef UNIX
X
X#if defined(BSD4_2) || defined(M_XENIX)
X
X#define DIRSIZE(entry) DIRSIZ(entry)
X
X#else
X
X#define DIRSIZE(entry) (entry->d_name[DIRSIZ-1]=='\0' ? strlen(entry->d_name) : DIRSIZ)
X
typedef struct {
X int d_fd; /* File descriptor for this directory */
X} DIR;
X
DIR *
opendir(dir)
char *dir;
X{
X DIR *dp = (DIR *) malloc(sizeof *dp);
X struct stat stbuf;
X
X if ((dp->d_fd = open(dir, 0)) == -1)
X return 0;
X if ((fstat(dp->d_fd, &stbuf) == -1) || !(stbuf.st_mode & S_IFDIR)) {
X closedir(dp);
X return 0; /* this isn't a directory! */
X }
X return dp;
X}
X
closedir(dp)
DIR *dp;
X{
X (void) close(dp->d_fd);
X free((char *) dp);
X}
X
struct direct *
readdir(dp)
DIR *dp;
X{
X static struct direct dir;
X
X do
X if (read(dp->d_fd, &dir, sizeof dir) != sizeof dir)
X return 0;
X#if defined(elxsi) && defined(SYSV)
X /*
X * Elxsi has a BSD4.2 implementation which may or may not use
X * `twisted inodes' ... Anyone able to check?
X */
X while (*(unsigned short *)&dir.d_ino == 0);
X#else
X while (dir.d_ino == 0);
X#endif
X
X return &dir;
X}
X
X#endif /* BSD4_2 */
X
X/* Scandir returns the number of entries or -1 if the directory cannoot
X be opened or malloc fails. */
X
int
scandir(dir, nmptr, qualify, sorter)
char *dir;
char ***nmptr;
int (*qualify)();
int (*sorter)();
X{
X DIR *dirp;
X struct direct *entry;
X char **ourarray;
X unsigned int nalloc = 10,
X nentries = 0;
X
X if ((dirp = opendir(dir)) == 0)
X return -1;
X if ((ourarray = (char **) malloc(nalloc * sizeof (char *))) == 0)
memfail: complain("[Malloc failed: cannot scandir]");
X while ((entry = readdir(dirp)) != 0) {
X if (qualify != 0 && (*qualify)(entry->d_name) == 0)
X continue;
X if (nentries == nalloc) {
X ourarray = (char **) realloc((char *) ourarray, (nalloc += 10) * sizeof (char *));
X if (ourarray == 0)
X goto memfail;
X }
X ourarray[nentries] = (char *) malloc(DIRSIZE(entry) + 1);
X null_ncpy(ourarray[nentries], entry->d_name, (int) DIRSIZE(entry));
X nentries += 1;
X }
X closedir(dirp);
X if ((nentries + 1) != nalloc)
X ourarray = (char **) realloc((char *) ourarray,
X ((nentries + 1) * sizeof (char *)));
X if (sorter != 0)
X qsort((char *) ourarray, nentries, sizeof (char **), sorter);
X *nmptr = ourarray;
X ourarray[nentries] = 0; /* guaranteed 0 pointer */
X
X return nentries;
X}
X
X#endif /* UNIX */
X
X#ifdef MSDOS
X#define DIRSIZ 13
X#define DIRSIZE(entry) strlen(entry.name)
X
X/* Scandir returns the number of entries or -1 if the directory cannoot
X be opened or malloc fails. */
X
unsigned int fmask = _A_NORMAL|_A_RDONLY|_A_HIDDEN|_A_SUBDIR;
X
int
scandir(dir, nmptr, qualify, sorter)
char *dir;
char ***nmptr;
int (*qualify)();
int (*sorter)();
X{
X char dirname[FILESIZE];
X struct find_t entry;
X char *ptr;
X char **ourarray;
X unsigned int nalloc = 10,
X nentries = 0;
X
X strcpy(dirname, dir);
X ptr = &dirname[strlen(dirname)-1];
X if ((dirname[1] == ':' && !dirname[2]) || (*ptr == '/') || (*ptr == '\\'))
X strcat(dirname, "*.*");
X else
X strcat(dirname, "/*.*");
X
X if (_dos_findfirst(dirname, fmask, &entry))
X return -1;
X if ((ourarray = (char **) malloc(nalloc * sizeof (char *))) == 0)
memfail: complain("[Malloc failed: cannot scandir]");
X do {
X if ((fmask == 0x10) && !(entry.attrib&fmask))
X goto skip;
X strlwr(entry.name);
X if (qualify != (int (*)())0 && (*qualify)(entry.name) == 0)
X goto skip;
X if (nentries == nalloc) {
X ourarray = (char **) realloc((char *) ourarray, (nalloc += 10) * sizeof (char *));
X if (ourarray == 0)
X goto memfail;
X }
X ourarray[nentries] = (char *) malloc(DIRSIZE(entry) + 1);
X null_ncpy(ourarray[nentries], entry.name, (int) DIRSIZE(entry));
X nentries++;
skip: ;
X }
X while (_dos_findnext(&entry) == 0);
X
X if ((nentries + 1) != nalloc)
X ourarray = (char **) realloc((char *) ourarray,
X ((nentries + 1) * sizeof (char *)));
X if (sorter != (int (*)())0)
X qsort((char *) ourarray, nentries, sizeof (char **), sorter);
X *nmptr = ourarray;
X ourarray[nentries] = 0; /* guaranteed 0 pointer */
X
X return nentries;
X}
X
X#endif /* MSDOS */
X
void
freedir(nmptr, nentries)
char ***nmptr;
X{
X char **ourarray = *nmptr;
X
X while (--nentries >= 0)
X free(*ourarray++);
X free((char *) *nmptr);
X *nmptr = 0;
X}
X
int
alphacomp(a, b)
char **a,
X **b;
X{
X return strcmp(*a, *b);
X}
X#endif
END_OF_FILE
if test 4890 -ne `wc -c <'./scandir.c'`; then
echo shar: \"'./scandir.c'\" unpacked with wrong size!
fi
# end of './scandir.c'
fi
if test -f './setmaps.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'./setmaps.c'\"
else
echo shar: Extracting \"'./setmaps.c'\" \(4068 characters\)
sed "s/^X//" >'./setmaps.c' <<'END_OF_FILE'
X/***************************************************************************
X * This program is Copyright (C) 1986, 1987, 1988 by Jonathan Payne. JOVE *
X * is provided to you without charge, and with no warranty. You may give *
X * away copies of JOVE, including sources, provided that this notice is *
X * included in all the files. *
X ***************************************************************************/
X
X#define TXT_TO_C 1 /* must be a number for MAC compiler */
X
X#include "funcdefs.c"
X
X#ifdef MAC
X#include "vars.c"
X#endif
X
X#undef putchar /* From jove.h via funcdefs.c, conflicts with STDIO */
X#undef putc
X#undef getc
X#undef EOF
X#undef FILE
X#undef BUFSIZ
X#undef NULL
X#include <stdio.h>
X
matchcmd(choices, what)
register struct cmd choices[];
register char *what;
X{
X register int len;
X int i,
X found = 0,
X save,
X exactmatch = -1;
X
X len = strlen(what);
X for (i = 0; choices[i].Name != 0; i++) {
X if (*what != *choices[i].Name)
X continue;
X#ifdef MAC /* see "left-margin" and "left-margin-here" */
X if (strcmp(what, choices[i].Name) == 0)
X#else
X if (strncmp(what, choices[i].Name, len) == 0)
X#endif
X return i;
X }
X return -1;
X}
X
X#ifdef MAC
matchvar(choices, what)
register struct variable choices[];
register char *what;
X{
X register int len;
X int i,
X found = 0,
X save,
X exactmatch = -1;
X
X len = strlen(what);
X for (i = 0; choices[i].Name != 0; i++) {
X if (*what != *choices[i].Name)
X continue;
X if (strcmp(what, choices[i].Name) == 0)
X return i;
X }
X return -1;
X}
X#endif
X
char *
PPchar(c)
int c;
X{
X static char str[16];
X char *cp = str;
X
X if (c & 0200) {
X c &= ~0200;
X strcpy(cp, "M-");
X cp += 2;
X }
X if (c == '\033')
X strcpy(cp, "ESC");
X#ifdef IBMPC
X else if (c == '\377')
X strcpy(cp, "M");
X#endif /* IBMPC */
X else if (c < ' ')
X (void) sprintf(cp, "C-%c", c + '@');
X else if (c == '\177')
X strcpy(cp, "^?");
X else
X (void) sprintf(cp, "%c", c);
X return str;
X}
X
void
extract(into, from)
char *into,
X *from;
X{
X from += 2; /* Past tab and first double quote. */
X while ((*into = *from++) != '"')
X into += 1;
X *into = 0;
X}
X
X
void
X
X#ifdef MAC
X_main() /* for Mac, so we can use redirection */
X#else
main()
X#endif
X{
X FILE *ifile,
X *of;
X char line[100],
X#ifdef MAC
X *which,
X#endif
X comname[70];
X int comnum,
X ch,
X#ifdef MAC
X inmenu = 0,
X#endif
X savech = -1,
X errors = 0;
X
X ifile = stdin;
X of = stdout;
X if (ifile == NULL || of == NULL) {
X printf("Cannot read input or write output.\n");
X exit(1);
X }
X while (fgets(line, sizeof line, ifile) != NULL) {
X if (strncmp(line, "#if", 3) == 0) {
X savech = ch;
X fprintf(of, line);
X continue;
X } else if (strncmp(line, "#else", 5) == 0) {
X if (savech == -1)
X fprintf(stderr, "WARNING: ifdef/endif mismatch!\n");
X else
X ch = savech;
X fprintf(of, line);
X continue;
X } else if (strncmp(line, "#endif", 6) == 0) {
X savech = -1;
X fprintf(of, line);
X continue;
X#ifdef MAC
X } else if (strncmp(line, "#MENU", 5) == 0) {
X inmenu = 1;
X continue;
X#endif
X } else if (strncmp(line, "\t\"", 2) != 0) {
X fprintf(of, line);
X ch = 0;
X continue;
X }
X extract(comname, line);
X if (strcmp(comname, "unbound") == 0)
X comnum = 12345;
X else {
X#ifdef MAC
X which = "commands";
X#endif
X comnum = matchcmd(commands, comname);
X#ifdef MAC
X if (comnum < 0 && inmenu) {
X comnum = matchvar(variables, comname);
X which = "variables";
X }
X#endif
X if (comnum < 0) {
X#ifdef MAC
X fprintf(stderr, "Warning: cannot find item \"%s\".\n", comname);
X#else
X fprintf(stderr, "Warning: cannot find command \"%s\".\n", comname);
X#endif
X errors += 1;
X comnum = 12345;
X }
X }
X#ifdef MAC
X if(inmenu) {
X if (comnum == 12345)
X fprintf(of, " (data_obj *) 0,\n");
X else
X fprintf(of, " (data_obj *) &%s[%d],\n",which, comnum);
X }
X else {
X#endif
X if (comnum == 12345)
X fprintf(of, " (data_obj *) 0, /* %s */\n", PPchar(ch++));
X else
X fprintf(of, " (data_obj *) &commands[%d], /* %s */\n", comnum, PPchar(ch++));
X }
X#ifdef MAC
X }
X#endif
X fclose(of);
X fclose(ifile);
X exit(errors);
X}
END_OF_FILE
if test 4068 -ne `wc -c <'./setmaps.c'`; then
echo shar: \"'./setmaps.c'\" unpacked with wrong size!
fi
# end of './setmaps.c'
fi
if test -f './term.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'./term.c'\"
else
echo shar: Extracting \"'./term.c'\" \(4482 characters\)
sed "s/^X//" >'./term.c' <<'END_OF_FILE'
X/***************************************************************************
X * This program is Copyright (C) 1986, 1987, 1988 by Jonathan Payne. JOVE *
X * is provided to you without charge, and with no warranty. You may give *
X * away copies of JOVE, including sources, provided that this notice is *
X * included in all the files. *
X ***************************************************************************/
X
X#include "jove.h"
X#include <ctype.h>
X#include <errno.h>
X
X#ifndef MAC /* most of the file... */
X
X#ifndef MSDOS
X#ifdef SYSV
X# include <termio.h>
X#else
X# include <sgtty.h>
X#endif /* SYSV */
X#endif /* MSDOS */
X
X#ifdef IPROCS
X# include <signal.h>
X#endif
X
X#define _TERM
X#include "termcap.h"
X
X/* Termcap definitions */
X
X#ifndef IBMPC
char *CS,
X *SO,
X *SE,
X *CM,
X *CL,
X *CE,
X *HO,
X *AL,
X *DL,
X *VS,
X *VE,
X *KS,
X *KE,
X *TI,
X *TE,
X *IC,
X *DC,
X *IM,
X *EI,
X *LL,
X *M_IC, /* Insert char with arg */
X *M_DC, /* Delete char with arg */
X *M_AL, /* Insert line with arg */
X *M_DL, /* Delete line with arg */
X *SF, /* Scroll forward */
X *SR,
X *SP, /* Send Cursor Position */
X *VB,
X *BL,
X *IP, /* insert pad after character inserted */
X *lPC,
X *NL;
X#endif
X
int LI,
X ILI, /* Internal lines, i.e., 23 of LI is 24. */
X CO,
X
X UL,
X MI,
X SG, /* number of magic cookies left by SO and SE */
X XS, /* whether standout is braindamaged */
X
X TABS,
X UPlen,
X HOlen,
X LLlen;
X
extern char PC,
X *BC,
X *UP;
X
X#ifdef notdef
X /*
X * Are you sure about this one Jon? On the SYSV system I tried this
X * on I got a multiple definition of PC because it was already
X * defined in -ltermcap. Similarly for BC and UP ...
X */
X#ifdef SYSVR2 /* release 2, at least */
char PC;
X#else
extern char PC;
X#endif /* SYSVR2 */
X#endif
X
X#ifndef IBMPC
static char tspace[256];
X
X/* The ordering of ts and meas must agree !! */
static char *ts="vsvealdlspcssosecmclcehoupbcicimdceillsfsrvbksketiteALDLICDCpcipblnl";
static char **meas[] = {
X &VS, &VE, &AL, &DL, &SP, &CS, &SO, &SE,
X &CM, &CL, &CE, &HO, &UP, &BC, &IC, &IM,
X &DC, &EI, &LL, &SF, &SR, &VB, &KS, &KE,
X &TI, &TE, &M_AL, &M_DL, &M_IC, &M_DC,
X &lPC, &IP, &BL, &NL, 0
X};
X
static void
gets(buf)
char *buf;
X{
X buf[read(0, buf, 12) - 1] = 0;
X}
X
X/* VARARGS1 */
X
static void
TermError(fmt, a)
char *fmt;
X{
X printf(fmt, a);
X flusho();
X _exit(1);
X}
X
void
getTERM()
X{
X char *getenv(), *tgetstr() ;
X char termbuf[13],
X *termname = NULL,
X *termp = tspace,
X tbuff[2048]; /* Good grief! */
X int i;
X
X termname = getenv("TERM");
X if ((termname == NULL) || (*termname == '\0') ||
X (strcmp(termname, "dumb") == 0) ||
X (strcmp(termname, "unknown") == 0) ||
X (strcmp(termname, "network") == 0)) {
X putstr("Enter terminal type (e.g, vt100): ");
X flusho();
X gets(termbuf);
X if (termbuf[0] == 0)
X TermError(NullStr);
X
X termname = termbuf;
X }
X
X if (tgetent(tbuff, termname) < 1)
X TermError("[\"%s\" unknown terminal type?]", termname);
X
X if ((CO = tgetnum("co")) == -1)
wimperr: TermError("You can't run JOVE on a %s terminal.\n", termname);
X
X else if (CO > MAXCOLS)
X CO = MAXCOLS;
X
X if ((LI = tgetnum("li")) == -1)
X goto wimperr;
X
X if ((SG = tgetnum("sg")) == -1)
X SG = 0; /* Used for mode line only */
X
X if ((XS = tgetflag("xs")) == -1)
X XS = 0; /* Used for mode line only */
X
X for (i = 0; meas[i]; i++) {
X *(meas[i]) = (char *) tgetstr(ts, &termp);
X ts += 2;
X }
X if (lPC)
X PC = *lPC;
X if (XS)
X SO = SE = 0;
X
X if (CS && !SR)
X CS = SR = SF = 0;
X
X if (CS && !SF)
X SF = "\n";
X
X if (IM && (*IM == 0))
X IM = 0;
X else
X MI = tgetflag("mi");
X
X UL = tgetflag("ul");
X
X if (NL == 0)
X NL = "\n";
X else { /* strip stupid padding information */
X while (isdigit(*NL))
X NL += 1;
X if (*NL == '*')
X NL += 1;
X }
X
X if (BL == 0)
X BL = "\007";
X
X#ifdef ID_CHAR
X disp_opt_init();
X#endif
X if (CanScroll = ((AL && DL) || CS))
X IDline_setup(termname);
X}
X
X#else
X
void
InitCM()
X{
X}
X
int EGA;
X
void
getTERM()
X{
X char *getenv(), *tgetstr() ;
X char *termname;
X void init_43(), init_term();
X unsigned char lpp(), chpl();
X
X if (getenv("EGA") || (!stricmp(getenv("TERM"), "EGA"))) {
X termname = "ega";
X init_43();
X EGA = 1;
X }
X else {
X termname = "ibmpc";
X init_term();
X EGA = 0;
X }
X
X CO = chpl();
X LI = lpp();
X
X SG = 0; /* Used for mode line only */
X XS = 0; /* Used for mode line only */
X
X CanScroll = 1;
X}
X
X#endif /* IBMPC */
X
X#else /* MAC */
int LI,
X ILI, /* Internal lines, i.e., 23 of LI is 24. */
X CO,
X TABS,
X SG;
X
void getTERM()
X{
X SG = 0;
X CanScroll = 1;
X}
X
X#endif /* MAC */
X
X
END_OF_FILE
if test 4482 -ne `wc -c <'./term.c'`; then
echo shar: \"'./term.c'\" unpacked with wrong size!
fi
# end of './term.c'
fi
if test -f './tune.h' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'./tune.h'\"
else
echo shar: Extracting \"'./tune.h'\" \(4774 characters\)
sed "s/^X//" >'./tune.h' <<'END_OF_FILE'
X/***************************************************************************
X * This program is Copyright (C) 1986, 1987, 1988 by Jonathan Payne. JOVE *
X * is provided to you without charge, and with no warranty. You may give *
X * away copies of JOVE, including sources, provided that this notice is *
X * included in all the files. *
X ***************************************************************************/
X
X#define TUNED /* don't touch this */
X
X/*#define MAC 1 /* alas, there is no command line for this */
X
X#ifdef MAC
X# define defined(x) (x) /* take this out and you're in trouble... */
X#endif
X
X
X/* The operating system (MSDOS or MAC) must be defined by this point.
X IBMPC is defined in the Makefile. All MAC defines should be
X numerical (i.e. #define MAC 1) so that defined() will work. */
X
X#if !(defined(MSDOS) || defined(MAC))
X# define UNIX
X#endif
X
X
X#ifdef UNIX
X /* pick your version of Unix */
X# define BSD4_2 /* Berkeley 4.2 BSD */
X# define BSD4_3 /* Berkeley 4.3 BSD and 2.10 BSD */
X/*# define SYSV /* for (System III/System V) UNIX systems */
X/*# define SYSVR2 /* system 5, rel. 2 */
X /* M_XENIX is defined by the Compiler */
X#endif /* UNIX */
X
X#ifdef SYSVR2
X# ifndef SYSV
X# define SYSV /* SYSV is a subset of SYSVR2 */
X# endif
X#endif
X
X#ifdef BSD4_3
X# ifndef BSD4_2
X# define BSD4_2 /* 4.3 is 4.2 only different. */
X# endif
X#endif
X
X#ifdef M_XENIX
X# define iAPX286 1 /* we have segments. */
X#endif
X
X#ifdef MSDOS
X# ifdef M_I86LM /* large memory model */
X# define NBUF 64
X# else
X# define NBUF 3
X# define SMALL
X# endif
X# define BUFSIZ 512 /* or 1024 */
X#endif
X
X#ifdef UNIX
X# if vax || sel || sun || pyr || mc68000 || tahoe || iAPX286 || GOULD_NP1 || u3b2
X# define VMUNIX /* Virtual Memory UNIX */
X# define BUFSIZ 1024
X# if iAPX286
X# define NBUF 48 /* NBUF*BUFSIZ must be less than 64 kB */
X# else
X# define NBUF 64 /* number of disk buffers */
X# endif /* iAPX286 */
X# else
X# define SMALL
X# define BUFSIZ 512 /* or 1024 */
X# endif
X#
X# define LOAD_AV /* Use the load average for various commands.
X# Do not define this if you lack a load average
X# system call and kmem is read protected. */
X#
X# define JOB_CONTROL /* if you have job stopping */
X#
X# ifdef JOB_CONTROL
X# define MENLO_JCL
X# define IPROCS /* Interactive processes only work with JOB_CONTROL. */
X# endif
X#
X# define SUBPROCS /* only on UNIX systems (NOT INCORPORATED YET) */
X#endif /* UNIX */
X
X
X#ifdef SMALL
X typedef unsigned short disk_line;
X#else
X# if defined(iAPX286) || defined(MSDOS) || defined(MAC)
X typedef long disk_line;
X# else
X typedef int disk_line;
X# endif /* iAPX286 */
X#endif /* SMALL */
X
X#define BACKUPFILES /* enable the backup files code */
X#define F_COMPLETION /* filename completion */
X#define ABBREV /* word abbreviation mode */
X#if !(defined(IBMPC) || defined(MAC))
X# define ANSICODES /* extra commands that process ANSI codes */
X# define ID_CHAR /* include code to IDchar */
X# define WIRED_TERMS /* include code for wired terminals */
X#endif
X#define CHDIR /* cd command and absolute pathnames */
X#define LISP /* include the code for Lisp Mode */
X#define CMT_FMT /* include the comment formatting routines */
X
X#ifdef UNIX
X# define BIFF /* if you have biff (or the equivalent) */
X# define KILL0 /* kill(pid, 0) returns 0 if proc exists */
X# define SPELL /* spell words and buffer commands */
X#if !sun && !iAPX286
X# define MY_MALLOC /* use more memory efficient malloc (not on suns) */
X#endif
X#endif
X
X#define DFLT_MODE 0666 /* file will be created with this mode */
X
X#ifdef BSD4_3
X# define RESHAPING /* enable windows to handle reshaping */
X#endif
X
X#ifdef BSD4_2 /* byte_copy(from, to, len) */
X# define byte_copy bcopy /* use fast assembler version */
X#endif
X
X#ifdef IPROCS
X# ifdef BSD4_2
X# define INPUT_SIG SIGIO
X# else
X# define PIPEPROCS /* do it with pipes */
X# define INPUT_SIG SIGTINT
X# endif
X#endif
X
X#if defined(SYSV) || defined(MSDOS) || defined(M_XENIX)
X# define byte_copy(s2, s1, n) memcpy(s1, s2, n)
X# define bzero(s, n) memset(s, 0, n)
X# define index strchr
X# define rindex strrchr
X#endif
X
X#ifdef MAC
X# undef F_COMPLETION /* can't do it with spaces in filenames */
X# undef CHDIR
X# define CHDIR 1
X# define rindex strrchr
X# define index strchr
X# define bzero(s,n) setmem(s,n,0)
X# define LINT_ARGS
X# define NBUF 64
X# define BUFSIZ 1024
X#endif
X
X/* These are here since they define things in tune.c. If you add things to
X tune.c, add them here too, if necessary. */
X
X#ifndef NOEXTERNS
extern char
X *d_tempfile,
X *p_tempfile,
X *Recover,
X *Joverc,
X
X#ifdef PIPEPROCS
X *Portsrv,
X#endif
X
X#ifdef MSDOS
X CmdDb[],
X#else
X *CmdDb,
X#endif
X
X TmpFilePath[],
X Shell[],
X ShFlags[];
X#endif /* NOEXTERNS */
X
X
END_OF_FILE
if test 4774 -ne `wc -c <'./tune.h'`; then
echo shar: \"'./tune.h'\" unpacked with wrong size!
fi
# end of './tune.h'
fi
if test -f './vars.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'./vars.c'\"
else
echo shar: Extracting \"'./vars.c'\" \(4304 characters\)
sed "s/^X//" >'./vars.c' <<'END_OF_FILE'
X/***************************************************************************
X * This program is Copyright (C) 1986, 1987, 1988 by Jonathan Payne. JOVE *
X * is provided to you without charge, and with no warranty. You may give *
X * away copies of JOVE, including sources, provided that this notice is *
X * included in all the files. *
X ***************************************************************************/
X
X#ifndef TXT_TO_C /* so that jove.h isn't included twice in setmaps */
X#include "jove.h"
X#endif
X
struct variable variables[] = {
X VARIABLE, "abort-char", &AbortChar, V_CHAR,
X#ifdef UNIX
X VARIABLE, "allow-^S-and-^Q", &OKXonXoff, V_BOOL|V_TTY_RESET,
X#endif /* UNIX */
X VARIABLE, "allow-bad-filenames", &OkayBadChars, V_BOOL,
X#ifdef ABBREV
X VARIABLE, "auto-case-abbrev", &AutoCaseAbbrev, V_BOOL,
X#endif
X#ifdef IBMPC
X VARIABLE, "background-color", &Bgcolor, V_BASE10|V_CLRSCREEN,
X#endif /* IBMPC */
X#ifdef F_COMPLETION
X VARIABLE, "bad-filename-extensions", (int *) BadExtensions, V_STRING,
X#endif
X VARIABLE, "c-indentation-increment", &CIndIncrmt, V_BASE10,
X VARIABLE, "case-ignore-search", &CaseIgnore, V_BOOL,
X#ifdef CMT_FMT
X VARIABLE, "comment-format", (int *) CmtFmt, V_STRING,
X#endif
X#ifdef BIFF
X VARIABLE, "disable-biff", &BiffChk, V_BOOL,
X#endif
X#ifdef F_COMPLETION
X VARIABLE, "display-bad-filenames", &DispBadFs, V_BOOL,
X#endif
X#ifndef MAC
X VARIABLE, "error-format-string", (int *) ErrFmtStr, V_STRING,
X VARIABLE, "error-window-size", &EWSize, V_BASE10,
X#endif
X VARIABLE, "expand-environment-variables", &DoEVexpand, V_BOOL,
X VARIABLE, "file-creation-mode", &CreatMode, V_BASE8,
X VARIABLE, "files-should-end-with-newline", &EndWNewline, V_BOOL,
X#ifdef IBMPC
X VARIABLE, "foreground-color", &Fgcolor, V_BASE10|V_CLRSCREEN,
X#endif /* IBMPC */
X VARIABLE, "internal-tabstop", &tabstop, V_BASE10|V_CLRSCREEN,
X VARIABLE, "left-margin", &LMargin, V_BASE10,
X#ifdef UNIX
X VARIABLE, "mailbox", (int *) Mailbox, V_FILENAME,
X VARIABLE, "mail-check-frequency", (int *) &MailInt, V_BASE10,
X#endif /* UNIX */
X#ifdef MAC
X VARIABLE, "macify", &Macmode, V_BOOL,
X#endif
X#ifdef BACKUPFILES
X VARIABLE, "make-backup-files", &BkupOnWrite, V_BOOL,
X#endif
X VARIABLE, "mark-threshold", &MarkThresh, V_BASE10,
X VARIABLE, "marks-should-float", &MarksShouldFloat, V_BOOL,
X VARIABLE, "match-regular-expressions", &UseRE, V_BOOL,
X VARIABLE, "meta-key", &MetaKey, V_BOOL|V_TTY_RESET,
X VARIABLE, "mode-line", (int *) ModeFmt, V_STRING|V_MODELINE,
X#ifdef IBMPC
X VARIABLE, "mode-line-color", &Mdcolor, V_BASE10|V_MODELINE,
X#endif
X VARIABLE, "mode-line-should-standout", &BriteMode, V_BOOL|V_MODELINE,
X VARIABLE, "paren-flash-delay", &PDelay, V_BASE10,
X#ifndef MAC
X VARIABLE, "physical-tabstop", &phystab, V_BASE10|V_CLRSCREEN,
X#endif
X#ifdef IPROCS
X VARIABLE, "process-prompt", (int *) proc_prompt, V_STRING,
X#endif
X VARIABLE, "interrupt-character", &IntChar, V_CHAR|V_TTY_RESET,
X VARIABLE, "right-margin", &RMargin, V_BASE10,
X VARIABLE, "scroll-step", &ScrollStep, V_BASE10,
X VARIABLE, "scroll-all-lines", &ScrollAll, V_BOOL,
X VARIABLE, "search-exit-char", &SExitChar, V_CHAR,
X VARIABLE, "send-typeout-to-buffer", &UseBuffers, V_BOOL,
X#ifndef MAC
X VARIABLE, "shell", (int *) Shell, V_STRING,
X VARIABLE, "shell-flags", (int *) ShFlags, V_STRING,
X#endif
X#ifndef MSDOS
X VARIABLE, "sync-frequency", &SyncFreq, V_BASE10,
X#endif /* MSDOS */
X VARIABLE, "tag-file", (int *) TagFile, V_FILENAME,
X#ifndef MAC
X VARIABLE, "tmp-file-pathname", (int *) TmpFilePath, V_FILENAME,
X#endif
X#ifdef UNIX
X VARIABLE, "update-time-frequency", &UpdFreq, V_BASE10,
X#endif /* UNIX */
X#ifdef ID_CHAR
X VARIABLE, "use-i/d-char", &UseIC, V_BOOL,
X#endif
X VARIABLE, "visible-bell", &VisBell, V_BOOL,
X VARIABLE, "wrap-search", &WrapScan, V_BOOL,
X#ifndef MAC
X VARIABLE, "write-files-on-make", &WtOnMk, V_BOOL,
X#endif
X VARIABLE, 0, 0, 0
X};
X
X#ifndef TXT_TO_C
data_obj *
findvar(prompt)
char *prompt;
X{
X static char *strings[(sizeof variables) / sizeof (struct variable)];
X static int beenhere = 0;
X register int com;
X
X if (beenhere == 0) {
X register char **strs = strings;
X register struct variable *v = variables;
X
X beenhere = 1;
X for (; v->Name; v++)
X *strs++ = v->Name;
X *strs = 0;
X }
X
X if ((com = complete(strings, prompt, NOTHING)) < 0)
X return 0;
X return (data_obj *) &variables[com];
X}
X#endif
END_OF_FILE
if test 4304 -ne `wc -c <'./vars.c'`; then
echo shar: \"'./vars.c'\" unpacked with wrong size!
fi
# end of './vars.c'
fi
echo shar: End of archive 2 \(of 21\).
cp /dev/null ark2isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 21 archives.
rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
echo You still need to unpack the following archives:
echo " " ${MISSING}
fi
## End of shell archive.
exit 0
--
Please send comp.sources.unix-related mail to rsalz at uunet.uu.net.
More information about the Comp.sources.unix
mailing list