rs@uunet.UUCP (09/17/87)
Submitted-by: Jonathan Payne <jpayne@cs.rochester.edu>
Posting-number: Volume 11, Issue 45
Archive-name: jove.pch/Part01
Jove is a text editor that resembles emacs; it runs on Unix and MS-DOS.
It's smaller than GNU, but bigger than micro-emacs. The following set of
patches upgrade version 4.6.1.4 to 4.7; the older version is what was
distributed on the 4.3 tape, and published previously in this newsgroup.
--r$
#! /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 1 (of 4)."
# Contents: jove.pch.1
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'jove.pch.1' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'jove.pch.1'\"
else
echo shar: Extracting \"'jove.pch.1'\" \(51694 characters\)
sed "s/^X//" >'jove.pch.1' <<'END_OF_FILE'
Xdiff -c ojove/Makefile jove/Makefile
X*** ojove/Makefile Thu Jul 16 09:14:01 1987
X--- jove/Makefile Fri Jun 19 16:13:05 1987
X***************
X*** 19,44 ****
X
X DESTDIR =
X TMPDIR = /tmp
X! LIBDIR = /u/jpayne/jovelib
X! BINDIR = /u/jpayne/bin
X! MANDIR = /u/jpayne/manl
X MANEXT = l
X SHELL = /bin/csh
X
X # These should all just be right if the above ones are.
X JOVE = $(DESTDIR)$(BINDIR)/jove
X- RECOVER = $(DESTDIR)$(LIBDIR)/recover
X TEACHJOVE = $(DESTDIR)$(BINDIR)/teachjove
X JOVERC = $(DESTDIR)$(LIBDIR)/.joverc
X CMDS.DOC = $(DESTDIR)$(LIBDIR)/cmds.doc
X TEACH-JOVE = $(DESTDIR)$(LIBDIR)/teach-jove
X- PORTSRV = $(DESTDIR)$(LIBDIR)/portsrv
X JOVEM = $(DESTDIR)$(MANDIR)/jove.$(MANEXT)
X- RECOVERM = $(DESTDIR)$(MANDIR)/recover.$(MANEXT)
X TEACHJOVEM = $(DESTDIR)$(MANDIR)/teachjove.$(MANEXT)
X
X # Select the right libraries for your system.
X! # 2.9BSD: LIBS = -ltermcap -ljobs
X # v7: LIBS = -ltermcap
X # 4.1BSD: LIBS = -ltermcap -ljobs
X # 4.2BSD: LIBS = -ltermcap
X--- 19,43 ----
X
X DESTDIR =
X TMPDIR = /tmp
X! LIBDIR = /nfs/socrates/usr/jpayne/jovelib
X! BINDIR = /nfs/socrates/usr/jpayne/bin
X! MANDIR = /nfs/socrates/usr/jpayne/manl
X MANEXT = l
X SHELL = /bin/csh
X
X # These should all just be right if the above ones are.
X JOVE = $(DESTDIR)$(BINDIR)/jove
X TEACHJOVE = $(DESTDIR)$(BINDIR)/teachjove
X+ RECOVER = $(DESTDIR)$(LIBDIR)/recover
X+ PORTSRV = $(DESTDIR)$(LIBDIR)/portsrv
X JOVERC = $(DESTDIR)$(LIBDIR)/.joverc
X CMDS.DOC = $(DESTDIR)$(LIBDIR)/cmds.doc
X TEACH-JOVE = $(DESTDIR)$(LIBDIR)/teach-jove
X JOVEM = $(DESTDIR)$(MANDIR)/jove.$(MANEXT)
X TEACHJOVEM = $(DESTDIR)$(MANDIR)/teachjove.$(MANEXT)
X
X # Select the right libraries for your system.
X! # 2.10BSD:LIBS = -ltermcap
X # v7: LIBS = -ltermcap
X # 4.1BSD: LIBS = -ltermcap -ljobs
X # 4.2BSD: LIBS = -ltermcap
X***************
X*** 49,71 ****
X
X # If you are not VMUNIX (vax running Berkeley Version 4), you must specify
X # the -i flags (split I/D space) and maybe the -x option (for adb to work).
X! # 2.9BSD: LDFLAGS = -x -i
X! # v7: LDFLAGS = -x -i
X # 4.1BSD: LDFLAGS =
X # 4.2BSD: LDFLAGS =
X # 4.3BSD: LDFLAGS =
X # SysV Rel. 2: LDFLAGS = -Ml
X
X! LDFLAGS =
X
X! CFLAGS = -O
X
X! OBJECTS = keymaps.o funcdefs.o abbrev.o ask.o buf.o c.o case.o ctype.o \
X! delete.o disp.o extend.o fp.o fmt.o insert.o io.o iproc.o jove.o macros.o \
X! malloc.o marks.o misc.o move.o paragraph.o proc.o re.o re1.o rec.o \
X! scandir.o screen.o table.o term.o tune.o util.o vars.o version.o wind.o
X
X! JOVESRC = funcdefs.c abbrev.c ask.c buf.c c.c case.c ctype.c \
X delete.c disp.c extend.c fp.c fmt.c insert.c io.c iproc.c \
X jove.c macros.c malloc.c marks.c misc.c move.c paragraph.c \
X proc.c re.c re1.c rec.c scandir.c screen.c table.c term.c util.c \
X--- 48,82 ----
X
X # If you are not VMUNIX (vax running Berkeley Version 4), you must specify
X # the -i flags (split I/D space) and maybe the -x option (for adb to work).
X! # 2.10BSD:LDFLAGS =
X! # v7: LDFLAGS =
X # 4.1BSD: LDFLAGS =
X # 4.2BSD: LDFLAGS =
X # 4.3BSD: LDFLAGS =
X # SysV Rel. 2: LDFLAGS = -Ml
X+ #
X+ # SEPFLAG should be:
X+ # not on a PDP-11: SEPFLAG =
X+ # PDP-11 with separate I&D: SEPFLAG = -i
X+ # PDP-11 without separate I&D: SEPFLAG = -n
X
X! LDFLAGS = -g
X! SEPFLAG =
X
X! CFLAGS = -g
X
X! BASESEG = funcdefs.o keymaps.o argcount.o ask.o buf.o ctype.o delete.o \
X! disp.o fmt.o insert.o io.o jove.o malloc.o marks.o misc.o re.o \
X! screen.o table.o tune.o util.o vars.o version.o
X! OVLAY1 = abbrev.o rec.o paragraph.o
X! OVLAY2 = c.o wind.o fp.o move.o
X! OVLAY3 = extend.o macros.o
X! OVLAY4 = iproc.o re1.o
X! OVLAY5 = proc.o scandir.o term.o case.o
X
X! OBJECTS = $(BASESEG) $(OVLAY1) $(OVLAY2) $(OVLAY3) $(OVLAY4) $(OVLAY5)
X!
X! JOVESRC = funcdefs.c abbrev.c argcount.c ask.c buf.c c.c case.c ctype.c \
X delete.c disp.c extend.c fp.c fmt.c insert.c io.c iproc.c \
X jove.c macros.c malloc.c marks.c misc.c move.c paragraph.c \
X proc.c re.c re1.c rec.c scandir.c screen.c table.c term.c util.c \
X***************
X*** 76,83 ****
X HEADERS = ctype.h io.h jove.h re.h rec.h table.h temp.h termcap.h tune.h
X
X DOCS = doc/cmds.doc.nr doc/example.rc doc/jove.1 doc/jove.2 doc/jove.3 \
X! doc/jove.4 doc/jove.nr doc/recover.nr doc/system.rc doc/teach-jove \
X! doc/teachjove.nr doc/README
X
X BACKUPS = $(HEADERS) $(JOVESRC) iproc-pipes.c iproc-ptys.c \
X teachjove.c recover.c setmaps.c portsrv.c tune.template \
X--- 87,94 ----
X HEADERS = ctype.h io.h jove.h re.h rec.h table.h temp.h termcap.h tune.h
X
X DOCS = doc/cmds.doc.nr doc/example.rc doc/jove.1 doc/jove.2 doc/jove.3 \
X! doc/jove.4 doc/jove.5 doc/jove.nr doc/system.rc \
X! doc/teach-jove doc/teachjove.nr doc/README
X
X BACKUPS = $(HEADERS) $(JOVESRC) iproc-pipes.c iproc-ptys.c \
X teachjove.c recover.c setmaps.c portsrv.c tune.template \
X***************
X*** 87,93 ****
X all: xjove recover teachjove portsrv
X
X xjove: $(OBJECTS)
X! $(CC) $(LDFLAGS) -o xjove $(OBJECTS) version.o $(LIBS)
X @-size xjove
X @-date
X
X--- 98,104 ----
X all: xjove recover teachjove portsrv
X
X xjove: $(OBJECTS)
X! $(CC) $(LDFLAGS) -o xjove $(OBJECTS) $(LIBS);
X @-size xjove
X @-date
X
X***************
X*** 131,138 ****
X $(TEACH-JOVE): doc/teach-jove
X install -c -m 644 doc/teach-jove $(TEACH-JOVE)
X
X! doc/cmds.doc: doc/cmds.doc.nr doc/jove.4
X! nroff doc/cmds.doc.nr doc/jove.4 > doc/cmds.doc
X
X $(CMDS.DOC): doc/cmds.doc
X install -c -m 644 doc/cmds.doc $(CMDS.DOC)
X--- 142,149 ----
X $(TEACH-JOVE): doc/teach-jove
X install -c -m 644 doc/teach-jove $(TEACH-JOVE)
X
X! doc/cmds.doc: doc/cmds.doc.nr doc/jove.4 doc/jove.5
X! nroff doc/cmds.doc.nr doc/jove.4 doc/jove.5 > doc/cmds.doc
X
X $(CMDS.DOC): doc/cmds.doc
X install -c -m 644 doc/cmds.doc $(CMDS.DOC)
X***************
X*** 158,169 ****
X -e 's;SHELL;$(SHELL);' doc/jove.nr > /tmp/jove.nr
X install -m 644 /tmp/jove.nr $(JOVEM)
X
X- $(RECOVERM): doc/recover.nr
X- @sed -e 's;TMPDIR;$(TMPDIR);' \
X- -e 's;LIBDIR;$(LIBDIR);' \
X- -e 's;SHELL;$(SHELL);' doc/recover.nr > /tmp/recover.nr
X- install -m 644 /tmp/recover.nr $(RECOVERM)
X-
X $(TEACHJOVEM): doc/teachjove.nr
X @sed -e 's;TMPDIR;$(TMPDIR);' \
X -e 's;LIBDIR;$(LIBDIR);' \
X--- 169,174 ----
X***************
X*** 178,184 ****
X @echo Done
X
X tags:
X! ctags -w $(JOVESRC) $(HEADERS)
X
X ciall:
X ci $(BACKUPS)
X--- 183,189 ----
X @echo Done
X
X tags:
X! ctags -w $(JOVESRC) $(HEADERS) iproc-ptys.c
X
X ciall:
X ci $(BACKUPS)
X***************
X*** 189,195 ****
X jove.shar:
X shar $(BACKUPS) > jove.shar
X
X! backup:
X tar cf backup $(BACKUPS)
X
X tape-backup:
X--- 194,200 ----
X jove.shar:
X shar $(BACKUPS) > jove.shar
X
X! backup: $(BACKUPS)
X tar cf backup $(BACKUPS)
X
X tape-backup:
Xdiff -c ojove/Ovmakefile jove/Ovmakefile
X*** ojove/Ovmakefile Thu Jul 16 09:14:02 1987
X--- jove/Ovmakefile Fri Jun 12 11:23:45 1987
X***************
X*** 61,71 ****
X
X COFLAGS = -rworking -q
X
X! BASESEG = funcdefs.o keymaps.o ask.o buf.o ctype.o delete.o disp.o fmt.o fp.o \
X! insert.o io.o jove.o malloc.o macros.o marks.o misc.o move.o re.o \
X! screen.o table.o tune.o util.o vars.o version.o
X! OVLAY1 = abbrev.o rec.o paragraph.o
X! OVLAY2 = c.o wind.o
X OVLAY3 = extend.o
X OVLAY4 = iproc.o re1.o
X OVLAY5 = proc.o scandir.o term.o case.o
X--- 61,71 ----
X
X COFLAGS = -rworking -q
X
X! BASESEG = funcdefs.o keymaps.o argcount.o ask.o buf.o ctype.o delete.o disp.o fmt.o fp.o \
X! insert.o io.o jove.o malloc.o marks.o misc.o move.o re.o \
X! screen.o table.o tune.o util.o version.o
X! OVLAY1 = abbrev.o rec.o paragraph.o macros.o
X! OVLAY2 = c.o wind.o vars.o
X OVLAY3 = extend.o
X OVLAY4 = iproc.o re1.o
X OVLAY5 = proc.o scandir.o term.o case.o
X***************
X*** 72,78 ****
X
X OBJECTS = $(BASESEG) $(OVLAY1) $(OVLAY2) $(OVLAY3) $(OVLAY4) $(OVLAY5)
X
X! C-FILES = funcdefs.c abbrev.c ask.c buf.c c.c case.c ctype.c delete.c disp.c \
X extend.c fmt.c fp.c insert.c io.c iproc.c iproc-pipes.c iproc-ptys.c \
X jove.c macros.c malloc.c marks.c misc.c move.c paragraph.c proc.c \
X re.c re1.c rec.c scandir.c screen.c table.c term.c util.c vars.c version.c \
X--- 72,78 ----
X
X OBJECTS = $(BASESEG) $(OVLAY1) $(OVLAY2) $(OVLAY3) $(OVLAY4) $(OVLAY5)
X
X! C-FILES = funcdefs.c abbrev.c argcount.c ask.c buf.c c.c case.c ctype.c delete.c disp.c \
X extend.c fmt.c fp.c insert.c io.c iproc.c iproc-pipes.c iproc-ptys.c \
X jove.c macros.c malloc.c marks.c misc.c move.c paragraph.c proc.c \
X re.c re1.c rec.c scandir.c screen.c table.c term.c util.c vars.c version.c \
XCommon subdirectories: ojove/RCS and jove/RCS
Xdiff -c ojove/README jove/README
X*** ojove/README Thu Jul 16 09:14:03 1987
X--- jove/README Fri Feb 6 11:32:32 1987
X***************
X*** 146,152 ****
X reads an initialization file in the user's home directory, and "example.rc"
X is mine.
X
X! The files "jove.[1234]" in DOC are the official JOVE manual. I got
X permission from Richard Stallman to use his manual for the original EMACS,
X modifying it where necessary for JOVE. Lots of work was done by Brian
X Harvey on this manual.
X--- 146,152 ----
X reads an initialization file in the user's home directory, and "example.rc"
X is mine.
X
X! The files "jove.[12345]" in DOC are the official JOVE manual. I got
X permission from Richard Stallman to use his manual for the original EMACS,
X modifying it where necessary for JOVE. Lots of work was done by Brian
X Harvey on this manual.
Xdiff -c ojove/abbrev.c jove/abbrev.c
X*** ojove/abbrev.c Thu Jul 16 09:14:04 1987
X--- jove/abbrev.c Fri Jun 12 10:50:08 1987
X***************
X*** 102,110 ****
X struct abbrev *ap;
X
X DOTsave(&point);
X- exp = 1;
X WITH_TABLE(curbuf->b_major)
X! BackWord();
X while (curchar < point.p_char && ismword(c = linebuf[curchar])) {
X if (AutoCaseAbbrev) {
X if (isupper(c)) {
X--- 102,109 ----
X struct abbrev *ap;
X
X DOTsave(&point);
X WITH_TABLE(curbuf->b_major)
X! b_word(1);
X while (curchar < point.p_char && ismword(c = linebuf[curchar])) {
X if (AutoCaseAbbrev) {
X if (isupper(c)) {
X***************
X*** 112,118 ****
X c = tolower(c);
X }
X }
X-
X *wp++ = c;
X curchar++;
X }
X--- 111,116 ----
X***************
X*** 124,141 ****
X SetDot(&point);
X return;
X }
X! DoTimes(DelPChar(), (wp - wordbuf));
X
X for (cp = ap->a_phrase; c = *cp; ) {
X if (AutoCaseAbbrev) {
X! Insert(islower(c) && UC_count &&
X! (cp == ap->a_phrase || (UC_count > 1 && (*(cp - 1) == ' '))) ?
X! toupper(c) : c);
X! }
X! else {
X! Insert(c);
X! }
X! cp++;
X }
X
X if (ap->a_cmdhook != 0)
X--- 122,137 ----
X SetDot(&point);
X return;
X }
X! del_char(BACKWARD, (wp - wordbuf));
X
X for (cp = ap->a_phrase; c = *cp; ) {
X if (AutoCaseAbbrev) {
X! insert_c(islower(c) && UC_count &&
X! (cp == ap->a_phrase || (UC_count > 1 && (cp[-1] == ' '))) ?
X! toupper(c) : c, 1);
X! } else
X! insert_c(c, 1);
X! cp += 1;
X }
X
X if (ap->a_cmdhook != 0)
XOnly in jove: argcount.c
Xdiff -c ojove/ask.c jove/ask.c
X*** ojove/ask.c Thu Jul 16 09:14:06 1987
X--- jove/ask.c Fri Jul 10 09:25:49 1987
X***************
X*** 15,20 ****
X--- 15,22 ----
X # include <sys/stat.h>
X #endif
X
X+ int DoEVexpand = NO; /* should we expand evironment variables? */
X+
X int Asking = NO;
X char Minibuf[LBSIZE];
X private Line *CurAskPtr = 0; /* points at some line in mini-buffer */
X***************
X*** 57,63 ****
X SetBuf(saveb);
X }
X
X! static char *
X real_ask(delim, d_proc, def, prompt)
X char *delim,
X *def,
X--- 59,106 ----
X SetBuf(saveb);
X }
X
X! /* look for any substrings of the form $foo in linebuf, and expand
X! them according to their value in the environment (if possible) -
X! this munges all over curchar and linebuf without giving it a second
X! thought (I must be getting lazy in my old age) */
X! private
X! EVexpand()
X! {
X! register int c;
X! register char *lp = linebuf,
X! *ep;
X! char varname[128],
X! *vp,
X! *lp_start;
X! Mark *m = MakeMark(curline, curchar, M_FLOATER);
X!
X! while (c = *lp++) {
X! if (c != '$')
X! continue;
X! lp_start = lp - 1; /* the $ */
X! vp = varname;
X! while (c = *lp++) {
X! if (!isword(c))
X! break;
X! *vp++ = c;
X! }
X! *vp = '\0';
X! /* if we find an env. variable with the right
X! name, we insert it in linebuf, and then delete
X! the variable name that we're replacing - and
X! then we continue in case there are others ... */
X! if (ep = getenv(varname)) {
X! curchar = lp_start - linebuf;
X! ins_str(ep, NO);
X! del_char(FORWARD, strlen(varname) + 1);
X! lp = linebuf + curchar;
X! }
X! }
X! ToMark(m);
X! DelMark(m);
X! }
X!
X! private char *
X real_ask(delim, d_proc, def, prompt)
X char *delim,
X *def,
X***************
X*** 72,79 ****
X int abort = 0,
X no_typed = 0;
X data_obj *push_cmd = LastCmd;
X! int o_exp = exp,
X! o_exp_p = exp_p;
X
X if (InAsk)
X complain((char *) 0);
X--- 115,122 ----
X int abort = 0,
X no_typed = 0;
X data_obj *push_cmd = LastCmd;
X! int o_a_v = arg_value(),
X! o_i_an_a = is_an_arg();
X
X if (InAsk)
X complain((char *) 0);
X***************
X*** 95,102 ****
X }
X
X for (;;) {
X! exp = 1;
X! exp_p = NO;
X last_cmd = this_cmd;
X init_strokes();
X cont: s_mess("%s%s", prompt, linebuf);
X--- 138,144 ----
X }
X
X for (;;) {
X! clr_arg_value();
X last_cmd = this_cmd;
X init_strokes();
X cont: s_mess("%s%s", prompt, linebuf);
X***************
X*** 103,120 ****
X Asking = curchar + prompt_len;
X c = getch();
X if ((c == EOF) || index(delim, c)) {
X if (d_proc == 0 || (*d_proc)(c) == 0)
X goto cleanup;
X } else switch (c) {
X! case CTL(G):
X message("[Aborted]");
X abort++;
X goto cleanup;
X
X! case CTL(N):
X! case CTL(P):
X if (CurAskPtr != 0) {
X! int n = (c == CTL(P) ? -exp : exp);
X
X CurAskPtr = next_line(CurAskPtr, n);
X if (CurAskPtr == curbuf->b_first && CurAskPtr->l_next != 0)
X--- 145,164 ----
X Asking = curchar + prompt_len;
X c = getch();
X if ((c == EOF) || index(delim, c)) {
X+ if (DoEVexpand)
X+ EVexpand();
X if (d_proc == 0 || (*d_proc)(c) == 0)
X goto cleanup;
X } else switch (c) {
X! case CTL('G'):
X message("[Aborted]");
X abort++;
X goto cleanup;
X
X! case CTL('N'):
X! case CTL('P'):
X if (CurAskPtr != 0) {
X! int n = (c == CTL('P') ? -arg_value() : arg_value());
X
X CurAskPtr = next_line(CurAskPtr, n);
X if (CurAskPtr == curbuf->b_first && CurAskPtr->l_next != 0)
X***************
X*** 127,133 ****
X }
X break;
X
X! case CTL(R):
X if (def)
X ins_str(def, NO);
X else
X--- 171,177 ----
X }
X break;
X
X! case CTL('R'):
X if (def)
X ins_str(def, NO);
X else
X***************
X*** 151,158 ****
X pop_env(savejmp);
X
X LastCmd = push_cmd;
X! exp_p = o_exp_p;
X! exp = o_exp;
X no_typed = (linebuf[0] == '\0');
X strcpy(Minibuf, linebuf);
X SetBuf(saveb);
X--- 195,202 ----
X pop_env(savejmp);
X
X LastCmd = push_cmd;
X! set_arg_value(o_a_v);
X! set_is_an_arg(o_i_an_a);
X no_typed = (linebuf[0] == '\0');
X strcpy(Minibuf, linebuf);
X SetBuf(saveb);
X***************
X*** 212,218 ****
X return real_ask(delim, d_proc, def, prompt);
X }
X
X! /* VARARGS2 */
X
X yes_or_no_p(fmt, va_alist)
X char *fmt;
X--- 256,262 ----
X return real_ask(delim, d_proc, def, prompt);
X }
X
X! /* VARARGS1 */
X
X yes_or_no_p(fmt, va_alist)
X char *fmt;
X***************
X*** 230,236 ****
X Asking = strlen(prompt); /* so redisplay works */
X c = getch();
X Asking = NO;
X! switch (Upper(c)) {
X case 'Y':
X return YES;
X
X--- 274,280 ----
X Asking = strlen(prompt); /* so redisplay works */
X c = getch();
X Asking = NO;
X! switch (CharUpcase(c)) {
X case 'Y':
X return YES;
X
X***************
X*** 237,243 ****
X case 'N':
X return NO;
X
X! case CTL(G):
X complain("[Aborted]");
X
X default:
X--- 281,287 ----
X case 'N':
X return NO;
X
X! case CTL('G'):
X complain("[Aborted]");
X
X default:
X***************
X*** 343,353 ****
X (linebuf[curchar - 1] != '/') &&
X (isdir(linebuf)));
X if (the_same && !is_ntdir) {
X! add_mess(n == 1 ? " [Unique]" : " [Ambiguous]");
X SitFor(7);
X }
X if (is_ntdir)
X! Insert('/');
X }
X
X extern int alphacomp();
X--- 387,397 ----
X (linebuf[curchar - 1] != '/') &&
X (isdir(linebuf)));
X if (the_same && !is_ntdir) {
X! add_mess((n == 1) ? " [Unique]" : " [Ambiguous]");
X SitFor(7);
X }
X if (is_ntdir)
X! insert_c('/', 1);
X }
X
X extern int alphacomp();
X***************
X*** 438,444 ****
X {
X char *ans,
X prompt[128],
X! *pretty_name = pr_name(def);
X
X if (prmt)
X sprintf(prompt, prmt);
X--- 482,488 ----
X {
X char *ans,
X prompt[128],
X! *pretty_name = pr_name(def, YES);
X
X if (prmt)
X sprintf(prompt, prmt);
Xdiff -c ojove/buf.c jove/buf.c
X*** ojove/buf.c Thu Jul 16 09:14:07 1987
X--- jove/buf.c Tue Jun 23 13:50:25 1987
X***************
X*** 26,33 ****
X
X TogMinor(bit)
X {
X! if (exp_p) {
X! if (exp == 0)
X curbuf->b_minor &= ~bit;
X else
X curbuf->b_minor |= bit;
X--- 26,33 ----
X
X TogMinor(bit)
X {
X! if (is_an_arg()) {
X! if (arg_value() == 0)
X curbuf->b_minor &= ~bit;
X else
X curbuf->b_minor |= bit;
X***************
X*** 147,153 ****
X offset = complete(bnames, prompt, RET_STATE);
X if (offset == EOF)
X complain((char *) 0);
X! if (offset == ORIGINAL)
X bname = Minibuf;
X else if (offset == NULLSTRING) {
X if (def)
X--- 147,153 ----
X offset = complete(bnames, prompt, RET_STATE);
X if (offset == EOF)
X complain((char *) 0);
X! if (offset == ORIGINAL || offset == AMBIGUOUS)
X bname = Minibuf;
X else if (offset == NULLSTRING) {
X if (def)
X***************
X*** 171,177 ****
X SetBuf(do_select(curwind, bname));
X }
X
X! static
X defb_wind(b)
X register Buffer *b;
X {
X--- 171,177 ----
X SetBuf(do_select(curwind, bname));
X }
X
X! private
X defb_wind(b)
X register Buffer *b;
X {
X***************
X*** 186,202 ****
X
X do {
X if (w->w_bufp == b) {
X! if (one_windp())
X (void) do_select(w, alt);
X else {
X! register Window *save = w->w_next;
X
X del_wind(w);
X w = save->w_prev;
X }
X! }
X w = w->w_next;
X! } while (w != fwind);
X }
X
X Buffer *
X--- 186,202 ----
X
X do {
X if (w->w_bufp == b) {
X! if (one_windp() || alt != Mainbuf)
X (void) do_select(w, alt);
X else {
X! Window *save = w->w_next;
X
X del_wind(w);
X w = save->w_prev;
X }
X! }
X w = w->w_next;
X! } while (w != fwind || w->w_bufp == b);
X }
X
X Buffer *
X***************
X*** 275,281 ****
X continue;
X if (IsModified(b)) {
X y_or_n = ask("No", "%s modified; should I save it? ", b->b_name);
X! if (Upper(*y_or_n) == 'Y') {
X oldb = curbuf;
X SetBuf(b);
X SaveFile();
X--- 275,281 ----
X continue;
X if (IsModified(b)) {
X y_or_n = ask("No", "%s modified; should I save it? ", b->b_name);
X! if (CharUpcase(*y_or_n) == 'Y') {
X oldb = curbuf;
X SetBuf(b);
X SaveFile();
X***************
X*** 499,505 ****
X {
X struct stat stbuf;
X
X! if (b->b_fname == 0 || stat(b->b_fname, &stbuf) == -1) {
X b->b_ino = 0;
X b->b_mtime = 0;
X } else {
X--- 499,505 ----
X {
X struct stat stbuf;
X
X! if (b->b_fname == 0 || stat(pr_name(b->b_fname, NO), &stbuf) == -1) {
X b->b_ino = 0;
X b->b_mtime = 0;
X } else {
X***************
X*** 524,537 ****
X bufname(b);
X set_ino(b);
X b->b_ntbf = 1;
X- if (force) {
X- Buffer *oldb = curbuf;
X-
X- SetBuf(b); /* this'll read the file */
X- SetBuf(oldb);
X- }
X }
X
X if (w)
X tiewind(w, b);
X return b;
X--- 524,536 ----
X bufname(b);
X set_ino(b);
X b->b_ntbf = 1;
X }
X+ if (force) {
X+ Buffer *oldb = curbuf;
X
X+ SetBuf(b); /* this'll read the file */
X+ SetBuf(oldb);
X+ }
X if (w)
X tiewind(w, b);
X return b;
X***************
X*** 549,563 ****
X SetBuf(newbuf)
X register Buffer *newbuf;
X {
X! register Buffer *oldb = curbuf;
X
X if (newbuf == curbuf || newbuf == 0)
X return;
X
X lsave();
X curbuf = newbuf;
X! curline = newbuf->b_dot;
X! curchar = newbuf->b_char;
X getDOT();
X /* Do the read now ... */
X if (curbuf->b_ntbf)
X--- 548,570 ----
X SetBuf(newbuf)
X register Buffer *newbuf;
X {
X! register Buffer *oldb = curbuf,
X! *b;
X
X if (newbuf == curbuf || newbuf == 0)
X return;
X
X+ /* check to see that we're selecting a valid buffer */
X+ for (b = world; b != 0; b = b->b_next)
X+ if (b == newbuf)
X+ break;
X+ if (b == 0)
X+ complain("Internal error: (%x) is not a valid buffer pointer!", newbuf);
X+
X lsave();
X curbuf = newbuf;
X! /* curline = newbuf->b_dot;
X! curchar = newbuf->b_char; STUPID!! */
X getDOT();
X /* Do the read now ... */
X if (curbuf->b_ntbf)
Xdiff -c ojove/c.c jove/c.c
X*** ojove/c.c Thu Jul 16 09:14:09 1987
X--- jove/c.c Wed Jun 24 12:43:21 1987
X***************
X*** 167,180 ****
X register char c,
X syntax = (dir == FORWARD) ? _Op : _Cl;
X
X- exp = 1;
X if (dir == BACKWARD)
X! BackChar();
X c = linebuf[curchar];
X for (;;) {
X if (!skip_words && ismword(c)) {
X WITH_TABLE(curbuf->b_major)
X! (dir == FORWARD) ? ForWord() : BackWord();
X END_TABLE();
X break;
X } else if (has_syntax(c, syntax)) {
X--- 167,179 ----
X register char c,
X syntax = (dir == FORWARD) ? _Op : _Cl;
X
X if (dir == BACKWARD)
X! b_char(1);
X c = linebuf[curchar];
X for (;;) {
X if (!skip_words && ismword(c)) {
X WITH_TABLE(curbuf->b_major)
X! (dir == FORWARD) ? f_word(1) : b_word(1);
X END_TABLE();
X break;
X } else if (has_syntax(c, syntax)) {
X***************
X*** 181,187 ****
X FindMatch(dir);
X break;
X }
X! DoTimes(ForChar(), dir);
X if (eobp() || bobp())
X return;
X c = linebuf[curchar];
X--- 180,186 ----
X FindMatch(dir);
X break;
X }
X! f_char(dir);
X if (eobp() || bobp())
X return;
X c = linebuf[curchar];
X***************
X*** 190,199 ****
X
X FSexpr()
X {
X! register int num = exp;
X
X! if (exp < 0) {
X! exp = -exp;
X BSexpr();
X }
X while (--num >= 0)
X--- 189,198 ----
X
X FSexpr()
X {
X! register int num = arg_value();
X
X! if (num < 0) {
X! set_arg_value(-num);
X BSexpr();
X }
X while (--num >= 0)
X***************
X*** 202,211 ****
X
X FList()
X {
X! register int num = exp;
X
X! if (exp < 0) {
X! exp = -exp;
X BList();
X }
X while (--num >= 0)
X--- 201,210 ----
X
X FList()
X {
X! register int num = arg_value();
X
X! if (num < 0) {
X! set_arg_value(-num);
X BList();
X }
X while (--num >= 0)
X***************
X*** 214,223 ****
X
X BSexpr()
X {
X! register int num = exp;
X
X! if (exp < 0) {
X! exp = -exp;
X FSexpr();
X }
X while (--num >= 0)
X--- 213,222 ----
X
X BSexpr()
X {
X! register int num = arg_value();
X
X! if (num < 0) {
X! negate_arg_value();
X FSexpr();
X }
X while (--num >= 0)
X***************
X*** 226,235 ****
X
X BList()
X {
X! register int num = exp;
X
X! if (exp < 0) {
X! exp = -exp;
X FList();
X }
X while (--num >= 0)
X--- 225,234 ----
X
X BList()
X {
X! register int num = arg_value();
X
X! if (num < 0) {
X! negate_arg_value();
X FList();
X }
X while (--num >= 0)
X***************
X*** 275,284 ****
X (backslashed(linebuf, curchar)))
X complain((char *) 0);
X if (dir == FORWARD)
X! ForChar();
X bp = m_paren(c, dir, YES, NO);
X if (dir == FORWARD)
X! BackChar();
X if (bp != 0)
X SetDot(bp);
X mp_error(); /* if there is an error the user wants to
X--- 274,283 ----
X (backslashed(linebuf, curchar)))
X complain((char *) 0);
X if (dir == FORWARD)
X! f_char(1);
X bp = m_paren(c, dir, YES, NO);
X if (dir == FORWARD)
X! b_char(1);
X if (bp != 0)
X SetDot(bp);
X mp_error(); /* if there is an error the user wants to
X***************
X*** 482,488 ****
X SetDot(match_c);
X }
X SetDot(&open_c_pt);
X! open_c_mark = MakeMark(curline, curchar, FLOATER);
X indent_pos = calc_pos(linebuf, curchar);
X /* search for a close comment; delete it if it exits */
X SetDot(&close_c_pt);
X--- 481,487 ----
X SetDot(match_c);
X }
X SetDot(&open_c_pt);
X! open_c_mark = MakeMark(curline, curchar, M_FLOATER);
X indent_pos = calc_pos(linebuf, curchar);
X /* search for a close comment; delete it if it exits */
X SetDot(&close_c_pt);
X***************
X*** 489,497 ****
X if (close_at_dot == 0) {
X slen = strlen(close_pat);
X while (slen--)
X! DelPChar();
X }
X! entry_mark = MakeMark(curline, curchar, FLOATER);
X ToMark(open_c_mark);
X /* always separate the comment body from anything preceeding it */
X LineInsert(1);
X--- 488,496 ----
X if (close_at_dot == 0) {
X slen = strlen(close_pat);
X while (slen--)
X! del_char(BACKWARD, 1);
X }
X! entry_mark = MakeMark(curline, curchar, M_FLOATER);
X ToMark(open_c_mark);
X /* always separate the comment body from anything preceeding it */
X LineInsert(1);
X***************
X*** 502,511 ****
X if (!eolp())
X LineInsert(1);
X else
X! line_move(FORWARD, NO);
X } else if (*cp == ' ' || *cp == '\t') {
X if (linebuf[curchar] != *cp)
X! Insert(*cp);
X } else
X /* Since we matched the open comment string on this
X line, we don't need to worry about crossing line
X--- 501,510 ----
X if (!eolp())
X LineInsert(1);
X else
X! line_move(FORWARD, 1, NO);
X } else if (*cp == ' ' || *cp == '\t') {
X if (linebuf[curchar] != *cp)
X! insert_c(*cp, 1);
X } else
X /* Since we matched the open comment string on this
X line, we don't need to worry about crossing line
X***************
X*** 512,518 ****
X boundaries. */
X curchar++;
X }
X! savedot = MakeMark(curline, curchar, FLOATER);
X
X /* We need to strip the line header pattern of leading white space
X since we need to match the line after all of its leading
X--- 511,517 ----
X boundaries. */
X curchar++;
X }
X! savedot = MakeMark(curline, curchar, M_FLOATER);
X
X /* We need to strip the line header pattern of leading white space
X since we need to match the line after all of its leading
X***************
X*** 529,556 ****
X Bol();
X DelWtSpace();
X if (header_len && !strncmp(linebuf, cp, header_len))
X! DoTimes(DelNChar(), header_len);
X if (trailer_len) {
X Eol();
X if ((curchar > trailer_len) &&
X (!strncmp(&linebuf[curchar - trailer_len],
X l_trailer, trailer_len)))
X! DoTimes(DelPChar(), trailer_len);
X }
X if (curline->l_next != 0)
X! line_move(FORWARD, NO);
X else
X break;
X } while (curline != entry_mark->m_line->l_next);
X
X! DoSetMark(savedot->m_line, savedot->m_char);
X ToMark(entry_mark);
X saveRMargin = RMargin;
X RMargin = saveRMargin - strlen(l_header) -
X strlen(l_trailer) - indent_pos + 2;
X! /* do not use the left margin */
X! exp_p = NO;
X! do_rfill();
X RMargin = saveRMargin;
X /* get back to the start of the comment */
X PopMark();
X--- 528,553 ----
X Bol();
X DelWtSpace();
X if (header_len && !strncmp(linebuf, cp, header_len))
X! del_char(FORWARD, header_len);
X if (trailer_len) {
X Eol();
X if ((curchar > trailer_len) &&
X (!strncmp(&linebuf[curchar - trailer_len],
X l_trailer, trailer_len)))
X! del_char(BACKWARD, trailer_len);
X }
X if (curline->l_next != 0)
X! line_move(FORWARD, 1, NO);
X else
X break;
X } while (curline != entry_mark->m_line->l_next);
X
X! do_set_mark(savedot->m_line, savedot->m_char);
X ToMark(entry_mark);
X saveRMargin = RMargin;
X RMargin = saveRMargin - strlen(l_header) -
X strlen(l_trailer) - indent_pos + 2;
X! do_rfill(NO);
X RMargin = saveRMargin;
X /* get back to the start of the comment */
X PopMark();
X***************
X*** 567,579 ****
X else
X ins_str(l_trailer, NO);
X if (curline->l_next != 0)
X! line_move(FORWARD, NO);
X else
X break;
X } while (curline != entry_mark->m_line->l_next);
X /* handle the close comment symbol */
X if (curline == entry_mark->m_line->l_next) {
X! line_move(BACKWARD, NO);
X Eol();
X }
X DelWtSpace();
X--- 564,576 ----
X else
X ins_str(l_trailer, NO);
X if (curline->l_next != 0)
X! line_move(FORWARD, 1, NO);
X else
X break;
X } while (curline != entry_mark->m_line->l_next);
X /* handle the close comment symbol */
X if (curline == entry_mark->m_line->l_next) {
X! line_move(BACKWARD, 1, NO);
X Eol();
X }
X DelWtSpace();
X***************
X*** 588,599 ****
X LineInsert(1);
X n_indent(indent_pos);
X } else
X! Insert(*cp);
X }
X ToMark(open_c_mark);
X Eol();
X! exp_p = NO;
X! DelNChar();
X }
X
X #endif CMT_FMT
X--- 585,595 ----
X LineInsert(1);
X n_indent(indent_pos);
X } else
X! insert_c(*cp, 1);
X }
X ToMark(open_c_mark);
X Eol();
X! del_char(FORWARD, 1);
X }
X
X #endif CMT_FMT
Xdiff -c ojove/case.c jove/case.c
X*** ojove/case.c Thu Jul 16 09:14:09 1987
X--- jove/case.c Fri Jun 12 10:45:46 1987
X***************
X*** 16,31 ****
X
X DOTsave(&b);
X
X! if (exp < 0) {
X restore++;
X! exp = -exp;
X! num = exp;
X! BackChar(); /* Cap previous EXP chars */
X! } else
X! num = exp;
X
X- exp = 1; /* So all the commands are done once */
X-
X while (num--) {
X if (upper(&linebuf[curchar])) {
X modify();
X--- 16,28 ----
X
X DOTsave(&b);
X
X! num = arg_value();
X! if (num < 0) {
X restore++;
X! num = -num;
X! b_char(num); /* Cap previous EXP chars */
X! }
X
X while (num--) {
X if (upper(&linebuf[curchar])) {
X modify();
X***************
X*** 35,42 ****
X if (curline->l_next == 0)
X break;
X SetLine(curline->l_next);
X! }
X! else
X curchar++;
X }
X if (restore)
X--- 32,38 ----
X if (curline->l_next == 0)
X break;
X SetLine(curline->l_next);
X! } else
X curchar++;
X }
X if (restore)
X***************
X*** 51,65 ****
X
X DOTsave(&b);
X
X! if (exp < 0) {
X restore++;
X! exp = -exp;
X! num = exp;
X! BackWord(); /* Cap previous EXP words */
X! } else
X! num = exp;
X!
X! exp = 1; /* So all the commands are done once */
X
X while (num--) {
X to_word(1); /* Go to the beginning of the next word. */
X--- 47,58 ----
X
X DOTsave(&b);
X
X! num = arg_value();
X! if (num < 0) {
X restore++;
X! num = -num;
X! b_word(num); /* Cap previous EXP words */
X! }
X
X while (num--) {
X to_word(1); /* Go to the beginning of the next word. */
X***************
X*** 87,97 ****
X Bufpos before;
X
X DOTsave(&before);
X! ForWord(); /* This'll go backward if negative argument. */
X case_reg(before.p_line, before.p_char, curline, curchar, up);
X }
X
X! static
X upper(c)
X register char *c;
X {
X--- 80,90 ----
X Bufpos before;
X
X DOTsave(&before);
X! ForWord(); /* this'll go backward if negative argument */
X case_reg(before.p_line, before.p_char, curline, curchar, up);
X }
X
X! private
X upper(c)
X register char *c;
X {
X***************
X*** 121,127 ****
X (void) fixorder(&line1, &char1, &line2, &char2);
X DotTo(line1, char1);
X
X- exp = 1;
X for (;;) {
X if (curline == line2 && curchar == char2)
X break;
X--- 114,119 ----
X***************
X*** 130,136 ****
X makedirty(curline);
X modify();
X }
X! ForChar();
X }
X }
X
X--- 122,128 ----
X makedirty(curline);
X modify();
X }
X! f_char(1);
X }
X }
X
Xdiff -c ojove/ctype.c jove/ctype.c
X*** ojove/ctype.c Thu Jul 16 09:14:11 1987
X--- jove/ctype.c Wed Feb 4 11:37:21 1987
X***************
X*** 89,91 ****
X--- 89,111 ----
X {
X return ((CharTable[curbuf->b_major])[c]&(_W));
X }
X+
X+ char CaseEquiv[] = {
X+ '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
X+ '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
X+ '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
X+ '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
X+ '\040', '!', '"', '#', '$', '%', '&', '\'',
X+ '(', ')', '*', '+', ',', '-', '.', '/',
X+ '0', '1', '2', '3', '4', '5', '6', '7',
X+ '8', '9', ':', ';', '<', '=', '>', '?',
X+ '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
X+ 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
X+ 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
X+ 'X', 'Y', 'Z', '[', '\\', ']', '^', '_',
X+ '`', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
X+ 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
X+ 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
X+ 'X', 'Y', 'Z', '{', '|', '}', '~', '\177'
X+ };
X+
Xdiff -c ojove/delete.c jove/delete.c
X*** ojove/delete.c Thu Jul 16 09:14:13 1987
X--- jove/delete.c Wed Jun 24 12:43:21 1987
X***************
X*** 99,105 ****
X
X DelNChar()
X {
X! del_char(1);
X }
X
X /* Delete character backward */
X--- 99,105 ----
X
X DelNChar()
X {
X! del_char(FORWARD, arg_value());
X }
X
X /* Delete character backward */
X***************
X*** 107,134 ****
X DelPChar()
X {
X if (MinorMode(OverWrite)) {
X! int count = min(exp, curchar);
X
X! DoTimes(BackChar(), count);
X! LastKeyStruck = ' '; /* can you say gross? */
X! DoTimes(SelfInsert(), count);
X! DoTimes(BackChar(), count);
X } else
X! del_char(0);
X }
X
X! /* Delete some characters. If deleting `forward' then call for_char
X to the final position otherwise call back_char. Then delete the
X region between the two with patchup(). */
X
X! del_char(forward)
X {
X Bufpos before,
X after;
X! int killp = (exp_p && abs(exp) > 1);
X
X DOTsave(&before);
X! (forward) ? ForChar() : BackChar();
X if (before.p_line == curline && before.p_char == curchar)
X complain((char *) 0);
X if (killp)
X--- 107,138 ----
X DelPChar()
X {
X if (MinorMode(OverWrite)) {
X! int count = min(arg_value(), curchar);
X
X! b_char(count);
X!
X! /* overwrite with spaces */
X! set_arg_value(count);
X! LastKeyStruck = ' ';
X! SelfInsert();
X!
X! b_char(count);
X } else
X! del_char(BACKWARD, arg_value());
X }
X
X! /* Delete some characters. If deleting forward then call for_char
X to the final position otherwise call back_char. Then delete the
X region between the two with patchup(). */
X
X! del_char(dir, num)
X {
X Bufpos before,
X after;
X! int killp = (abs(num) > 1);
X
X DOTsave(&before);
X! (dir == FORWARD) ? f_char(num) : b_char(num);
X if (before.p_line == curline && before.p_char == curchar)
X complain((char *) 0);
X if (killp)
X***************
X*** 249,258 ****
X register Mark *dot;
X int all;
X
X- exp = 1;
X if (!blnkp(&linebuf[curchar]))
X return;
X! dot = MakeMark(curline, curchar, FLOATER);
X all = !blnkp(linebuf);
X while (blnkp(linebuf) && curline->l_prev)
X SetLine(curline->l_prev);
X--- 253,261 ----
X register Mark *dot;
X int all;
X
X if (!blnkp(&linebuf[curchar]))
X return;
X! dot = MakeMark(curline, curchar, M_FLOATER);
X all = !blnkp(linebuf);
X while (blnkp(linebuf) && curline->l_prev)
X SetLine(curline->l_prev);
X***************
X*** 259,271 ****
X all |= (firstp(curline));
X Eol();
X DelWtSpace();
X! line_move(FORWARD, NO);
X while (blnkp(linebuf) && !eobp()) {
X DelWtSpace();
X! DelNChar();
X }
X if (!all && !eobp())
X! OpenLine();
X ToMark(dot);
X DelMark(dot);
X }
X--- 262,274 ----
X all |= (firstp(curline));
X Eol();
X DelWtSpace();
X! line_move(FORWARD, 1, NO);
X while (blnkp(linebuf) && !eobp()) {
X DelWtSpace();
X! del_char(FORWARD, 1);
X }
X if (!all && !eobp())
X! open_lines(1);
X ToMark(dot);
X DelMark(dot);
X }
Xdiff -c ojove/disp.c jove/disp.c
X*** ojove/disp.c Thu Jul 16 09:14:15 1987
X--- jove/disp.c Fri Jul 10 09:25:49 1987
X***************
X*** 108,118 ****
X if (VisBell && VB)
X putstr(VB);
X else
X! #ifdef SYSV /* release 2, at least */
X! putpad("$<20>\007", 1) ;
X! #else
X! putpad("20\007", 1);
X! #endif SYSV
X }
X flusho();
X }
X--- 108,114 ----
X if (VisBell && VB)
X putstr(VB);
X else
X! putpad(BL, 1);
X }
X flusho();
X }
X***************
X*** 787,793 ****
X ign_some = 0;
X char line[132],
X *fmt = ModeFmt,
X- tmp[16],
X fillc,
X c;
X register Buffer *thisbuf = w->w_bufp;
X--- 783,788 ----
X***************
X*** 889,902 ****
X mode_app("[No file]");
X else {
X if (c == 'f')
X! mode_app(pr_name(thisbuf->b_fname));
X else
X mode_app(basename(thisbuf->b_fname));
X }
X break;
X
X-
X case 'n':
X for (bp = world, n = 1; bp != 0; bp = bp->b_next, n++)
X if (bp == thisbuf)
X break;
X--- 884,899 ----
X mode_app("[No file]");
X else {
X if (c == 'f')
X! mode_app(pr_name(thisbuf->b_fname, YES));
X else
X mode_app(basename(thisbuf->b_fname));
X }
X break;
X
X case 'n':
X+ {
X+ char tmp[16];
X+
X for (bp = world, n = 1; bp != 0; bp = bp->b_next, n++)
X if (bp == thisbuf)
X break;
X***************
X*** 904,909 ****
X--- 901,907 ----
X sprintf(tmp, "%d", n);
X mode_app(tmp);
X break;
X+ }
X
X case 'm':
X if (IsModified(w->w_bufp))
X***************
X*** 933,940 ****
X (int) theavg,
X (int)((theavg - (int) theavg) * 100));
X mode_app(minibuf);
X }
X- break;
X #endif
X
X case 'C': /* check mail here */
X--- 931,938 ----
X (int) theavg,
X (int)((theavg - (int) theavg) * 100));
X mode_app(minibuf);
X+ break;
X }
X #endif
X
X case 'C': /* check mail here */
X***************
X*** 944,950 ****
X
X #ifdef CHDIR
X case 'd': /* print working directory */
X! mode_app(pr_name(pwd()));
X break;
X #endif
X
X--- 942,948 ----
X
X #ifdef CHDIR
X case 'd': /* print working directory */
X! mode_app(pr_name(pwd(), YES));
X break;
X #endif
X
X***************
X*** 958,963 ****
X--- 956,975 ----
X
X goto outahere; /* %e means we're done! */
X }
X+
X+ #ifdef IPROCS
X+ case 'p':
X+ if (thisbuf->b_type != B_PROCESS) {
X+ char tmp[40];
X+
X+ sprintf(tmp, "(%s)", (thisbuf->b_process == 0) ?
X+ "No process" :
X+ pstate(thisbuf->b_process));
X+ mode_app(tmp);
X+ break;
X+ }
X+ #endif
X+
X }
X }
X
X***************
X*** 980,987 ****
X
X RedrawDisplay()
X {
X! Line *newtop = prev_line((curwind->w_line = curline), exp_p ?
X! exp : HALF(curwind));
X
X if (newtop == curwind->w_top)
X v_clear(FLine(curwind), FLine(curwind) + SIZE(curwind));
X--- 992,999 ----
X
X RedrawDisplay()
X {
X! Line *newtop = prev_line((curwind->w_line = curline), is_an_arg() ?
X! arg_value() : HALF(curwind));
X
X if (newtop == curwind->w_top)
X v_clear(FLine(curwind), FLine(curwind) + SIZE(curwind));
X***************
X*** 1016,1027 ****
X
X if (Asking)
X return;
X! if (exp < 0) {
X! exp = -exp;
X PrevPage();
X return;
X }
X! if (exp_p == YES)
X UpScroll();
X else {
X if (in_window(curwind, curwind->w_bufp->b_last) != -1) {
X--- 1028,1039 ----
X
X if (Asking)
X return;
X! if (arg_value() < 0) {
X! negate_arg_value();
X PrevPage();
X return;
X }
X! if (arg_type() == YES)
X UpScroll();
X else {
X if (in_window(curwind, curwind->w_bufp->b_last) != -1) {
X***************
X*** 1041,1052 ****
X
X if (Asking)
X return;
X! if (exp < 0) {
X! exp = -exp;
X NextPage();
X return;
X }
X! if (exp_p == YES)
X DownScroll();
X else {
X newline = prev_line(curwind->w_top, max(1, SIZE(curwind) - 1));
X--- 1053,1064 ----
X
X if (Asking)
X return;
X! if (arg_value() < 0) {
X! negate_arg_value();
X NextPage();
X return;
X }
X! if (arg_type() == YES)
X DownScroll();
X else {
X newline = prev_line(curwind->w_top, max(1, SIZE(curwind) - 1));
X***************
X*** 1058,1064 ****
X
X UpScroll()
X {
X! SetTop(curwind, next_line(curwind->w_top, exp));
X if ((curwind->w_bufp == curbuf) &&
X (in_window(curwind, curline) == -1))
X SetLine(curwind->w_top);
X--- 1070,1076 ----
X
X UpScroll()
X {
X! SetTop(curwind, next_line(curwind->w_top, arg_value()));
X if ((curwind->w_bufp == curbuf) &&
X (in_window(curwind, curline) == -1))
X SetLine(curwind->w_top);
X***************
X*** 1066,1072 ****
X
X DownScroll()
X {
X! SetTop(curwind, prev_line(curwind->w_top, exp));
X if ((curwind->w_bufp == curbuf) &&
X (in_window(curwind, curline) == -1))
X SetLine(curwind->w_top);
X--- 1078,1084 ----
X
X DownScroll()
X {
X! SetTop(curwind, prev_line(curwind->w_top, arg_value()));
X if ((curwind->w_bufp == curbuf) &&
X (in_window(curwind, curline) == -1))
X SetLine(curwind->w_top);
X***************
X*** 1101,1108 ****
X if (Asking)
X return;
X SetLine(next_line(curwind->w_top, SIZE(curwind) - 1 -
X! min(SIZE(curwind) - 1, exp - 1)));
X! if (exp_p == NO)
X Eol();
X }
X
X--- 1113,1120 ----
X if (Asking)
X return;
X SetLine(next_line(curwind->w_top, SIZE(curwind) - 1 -
X! min(SIZE(curwind) - 1, arg_value() - 1)));
X! if (!is_an_arg())
X Eol();
X }
X
X***************
X*** 1112,1118 ****
X {
X if (Asking)
X return;
X! SetLine(next_line(curwind->w_top, min(SIZE(curwind) - 1, exp - 1)));
X }
X
X private int LineNo,
X--- 1124,1130 ----
X {
X if (Asking)
X return;
X! SetLine(next_line(curwind->w_top, min(SIZE(curwind) - 1, arg_value() - 1)));
X }
X
X private int LineNo,
X***************
X*** 1158,1164 ****
X f_mess("--more--");
X if ((c = getchar()) != ' ') {
X TOabort++;
X! if (c != CTL(G) && c != RUBOUT)
X Ungetc(c);
X return;
X }
X--- 1170,1176 ----
X f_mess("--more--");
X if ((c = getchar()) != ' ') {
X TOabort++;
X! if (c != CTL('G') && c != RUBOUT)
X Ungetc(c);
X return;
X }
XCommon subdirectories: ojove/doc and jove/doc
Xdiff -c ojove/extend.c jove/extend.c
X*** ojove/extend.c Thu Jul 16 09:14:18 1987
X--- jove/extend.c Tue Jun 23 13:50:18 1987
X***************
X*** 78,86 ****
X {
X register int i;
X
X! exp_p = YES;
X! exp = 1; /* So minor modes don't toggle. We always want
X! them on. */
X if (new == 0)
X return;
X for (i = 0; i < ExecIndex; i++)
X--- 78,84 ----
X {
X register int i;
X
X! set_arg_value(1);
X if (new == 0)
X return;
X for (i = 0; i < ExecIndex; i++)
X***************
X*** 165,171 ****
X } else if (c == '^') {
X if ((c = getch()) == '?')
X c = RUBOUT;
X! else if (isalpha(c) || index("[\\]^_", c))
X c = c - '@';
X else
X complain("[Unknown control character]");
X--- 163,169 ----
X } else if (c == '^') {
X if ((c = getch()) == '?')
X c = RUBOUT;
X! else if (isalpha(c) || index("@[\\]^_", c))
X c = c - '@';
X else
X complain("[Unknown control character]");
X***************
X*** 320,326 ****
X sprintf(keydescbuf, "%s %p", pref, c1);
X else
X sprintf(keydescbuf, "%s [%p-%p]", pref, c1, c2);
X! if (prefp = IsPrefix(map[c1]))
X DescMap(prefp, keydescbuf);
X else
X Typeout("%-14s%s", keydescbuf, map[c1]->Name);
X--- 318,324 ----
X sprintf(keydescbuf, "%s %p", pref, c1);
X else
X sprintf(keydescbuf, "%s [%p-%p]", pref, c1, c2);
X! if ((prefp = IsPrefix(map[c1])) && (prefp != map))
X DescMap(prefp, keydescbuf);
X else
X Typeout("%-14s%s", keydescbuf, map[c1]->Name);
X***************
X*** 377,383 ****
X break;
X }
X }
X! if (prefp = IsPrefix(map[c1])) {
X sprintf(prefbuf, "%p", c1);
X fb_aux(cp, prefp, prefbuf, bufp);
X }
X--- 375,381 ----
X break;
X }
X }
X! if ((prefp = IsPrefix(map[c1])) && (prefp != map)) {
X sprintf(prefbuf, "%p", c1);
X fb_aux(cp, prefp, prefbuf, bufp);
X }
X***************
X*** 640,654 ****
X comp_value = NULLSTRING;
X return 0;
X }
X! if (comp_flags & RET_STATE) switch (command) {
X! case UNIQUE:
X! case ORIGINAL:
X! case NULLSTRING:
X! comp_value = command;
X! return 0;
X!
X! default:
X! break;
X }
X if (InJoverc)
X complain("[\"%s\" unknown]", linebuf);
X--- 638,646 ----
X comp_value = NULLSTRING;
X return 0;
X }
X! if (comp_flags & RET_STATE) {
X! comp_value = command;
X! return 0;
X }
X if (InJoverc)
X complain("[\"%s\" unknown]", linebuf);
X***************
X*** 800,812 ****
X nchars += length(lp) + (lp->l_next != 0); /* include the NL */
X }
X
X! s_mess("[\"%s\" line %d of %d, char %D of %D (%d%%)]",
X! filename(curbuf),
X! dotline,
X! i,
X! dotchar,
X! nchars,
X! (int) (((long) dotchar * 100) / nchars));
X }
X
X #define IF_UNBOUND -1
X--- 792,802 ----
X nchars += length(lp) + (lp->l_next != 0); /* include the NL */
X }
X
X! s_mess("[\"%s\" line %d/%d, char %D/%D (%d%%), cursor = %d/%d]",
X! filename(curbuf), dotline, i, dotchar, nchars,
X! (nchars == 0) ? 100 : (int) (((long) dotchar * 100) / nchars),
X! calc_pos(linebuf, curchar),
X! calc_pos(linebuf, strlen(linebuf)));
X }
X
X #define IF_UNBOUND -1
X***************
X*** 884,890 ****
X Buffer *savebuf = curbuf;
X
X SetBuf(do_select((Window *) 0, "RC errors"));
X! ins_str(sprint("%s:%d:%s\t%s\n", pr_name(file), lnum, lbuf, mesgbuf), NO);
X unmodify();
X SetBuf(savebuf);
X Asking = 0;
X--- 874,880 ----
X Buffer *savebuf = curbuf;
X
X SetBuf(do_select((Window *) 0, "RC errors"));
X! ins_str(sprint("%s:%d:%s\t%s\n", pr_name(file, YES), lnum, lbuf, mesgbuf), NO);
X unmodify();
X SetBuf(savebuf);
X Asking = 0;
Xdiff -c ojove/fmt.c jove/fmt.c
X*** ojove/fmt.c Thu Jul 16 09:14:21 1987
X--- jove/fmt.c Fri May 29 12:49:31 1987
X***************
X*** 33,42 ****
X putc('\0', sp);
X }
X
X! static char padc = ' ';
X! static File *curiop = 0;
X!
X! static
X PPchar(c, str)
X int c;
X char *str;
X--- 33,39 ----
X putc('\0', sp);
X }
X
X! private
X PPchar(c, str)
X int c;
X char *str;
X***************
X*** 53,98 ****
X sprintf(cp, "%c", c);
X }
X
X! static
X! putld(leftadj, width, d, base)
X long d;
X {
X int length = 1;
X long tmpd = d;
X
X while (tmpd = (tmpd / base))
X length++;
X if (d < 0)
X length++;
X! if (!leftadj)
X! pad(padc, width - length);
X if (d < 0) {
X! putc('-', curiop);
X d = -d;
X }
X outld(d, base);
X! if (leftadj)
X! pad(padc, width - length);
X }
X
X! static
X outld(d, base)
X long d;
X {
X! long n;
X
X if (n = (d / base))
X outld(n, base);
X! putc((int) ('0' + (int) (d % base)), curiop);
X }
X
X! static
X! puts(leftadj, width, str)
X char *str;
X {
X int length;
X! register char *cp,
X! c;
X
X if (str == 0)
X #if pyr
X--- 50,106 ----
X sprintf(cp, "%c", c);
X }
X
X! private struct fmt_state {
X! int precision,
X! width,
X! leftadj;
X! char padc;
X! File *iop;
X! } current_fmt;
X!
X! private
X! putld(d, base)
X long d;
X {
X int length = 1;
X long tmpd = d;
X
X+ if (current_fmt.width == 0 && current_fmt.precision) {
X+ current_fmt.width = current_fmt.precision;
X+ current_fmt.padc = '0';
X+ }
X while (tmpd = (tmpd / base))
X length++;
X if (d < 0)
X length++;
X! if (!current_fmt.leftadj)
X! pad(current_fmt.padc, current_fmt.width - length);
X if (d < 0) {
X! putc('-', current_fmt.iop);
X d = -d;
X }
X outld(d, base);
X! if (current_fmt.leftadj)
X! pad(current_fmt.padc, current_fmt.width - length);
X }
X
X! private
X outld(d, base)
X long d;
X {
X! register long n;
X
X if (n = (d / base))
X outld(n, base);
X! putc((int) ('0' + (int) (d % base)), current_fmt.iop);
X }
X
X! private
X! puts(str)
X char *str;
X {
X int length;
X! register char *cp;
X
X if (str == 0)
X #if pyr
X***************
X*** 101,125 ****
X str = "(null)";
X #endif
X length = strlen(str);
X cp = str;
X! if (!leftadj)
X! pad(' ', width - length);
X! while (c = *cp++)
X! putc(c, curiop);
X! if (leftadj)
X! pad(' ', width - length);
X }
X
X! static
X pad(c, amount)
X register int c,
X amount;
X {
X while (--amount >= 0)
X! putc(c, curiop);
X }
X
X! static
X doformat(sp, fmt, ap)
X register File *sp;
X register char *fmt;
X--- 109,137 ----
X str = "(null)";
X #endif
X length = strlen(str);
X+ if (current_fmt.precision == 0 || length < current_fmt.precision)
X+ current_fmt.precision = length;
X+ else
X+ length = current_fmt.precision;
X cp = str;
X! if (!current_fmt.leftadj)
X! pad(' ', current_fmt.width - length);
X! while (--current_fmt.precision >= 0)
X! putc(*cp++, current_fmt.iop);
X! if (current_fmt.leftadj)
X! pad(' ', current_fmt.width - length);
X }
X
X! private
X pad(c, amount)
X register int c,
X amount;
X {
X while (--amount >= 0)
X! putc(c, current_fmt.iop);
X }
X
X! private
X doformat(sp, fmt, ap)
X register File *sp;
X register char *fmt;
X***************
X*** 126,171 ****
X va_list ap;
X {
X register char c;
X! int leftadj,
X! width;
X! File *pushiop = curiop;
X
X! curiop = sp;
X
X while (c = *fmt++) {
X if (c != '%') {
X! putc(c, sp);
X continue;
X }
X
X! padc = ' ';
X! leftadj = width = 0;
X c = *fmt++;
X if (c == '-') {
X! leftadj++;
X c = *fmt++;
X }
X if (c == '0') {
X! padc = '0';
X c = *fmt++;
X }
X while (c >= '0' && c <= '9') {
X! width = width * 10 + (c - '0');
X c = *fmt++;
X }
X if (c == '*') {
X! width = va_arg(ap, int);
X c = *fmt++;
X }
X reswitch:
X /* At this point, fmt points at one past the format letter. */
X switch (c) {
X case '%':
X! putc('%', curiop);
X break;
X
X case 'D':
X! putld(leftadj, width, va_arg(ap, long), 10);
X break;
X
X case 'b':
X--- 138,193 ----
X va_list ap;
X {
X register char c;
X! struct fmt_state prev_fmt;
X
X! prev_fmt = current_fmt;
X! current_fmt.iop = sp;
X
X while (c = *fmt++) {
X if (c != '%') {
X! putc(c, current_fmt.iop);
X continue;
X }
X
X! current_fmt.padc = ' ';
X! current_fmt.precision = current_fmt.leftadj = current_fmt.width = 0;
X c = *fmt++;
X if (c == '-') {
X! current_fmt.leftadj = YES;
X c = *fmt++;
X }
X if (c == '0') {
X! current_fmt.padc = '0';
X c = *fmt++;
X }
X while (c >= '0' && c <= '9') {
X! current_fmt.width = current_fmt.width * 10 + (c - '0');
X c = *fmt++;
X }
X if (c == '*') {
X! current_fmt.width = va_arg(ap, int);
X c = *fmt++;
X }
X+ if (c == '.') {
X+ c = *fmt++;
X+ while (c >= '0' && c <= '9') {
X+ current_fmt.precision = current_fmt.precision * 10 + (c - '0');
X+ c = *fmt++;
X+ }
X+ if (c == '*') {
X+ current_fmt.precision = va_arg(ap, int);
X+ c = *fmt++;
X+ }
X+ }
X reswitch:
X /* At this point, fmt points at one past the format letter. */
X switch (c) {
X case '%':
X! putc('%', current_fmt.iop);
X break;
X
X case 'D':
X! putld(va_arg(ap, long), 10);
X break;
X
X case 'b':
X***************
X*** 172,204 ****
X {
X Buffer *b = va_arg(ap, Buffer *);
X
X! puts(leftadj, width, b->b_name);
X break;
X }
X
X case 'c':
X! putc(va_arg(ap, int), curiop);
X break;
X
X case 'd':
X! putld(leftadj, width, (long) va_arg(ap, int), 10);
X break;
X
X case 'f': /* current command name gets inserted here! */
X! puts(leftadj, width, LastCmd->Name);
X break;
X
X case 'l':
X! c = Upper(*++fmt);
X goto reswitch;
X
X case 'n':
X if (va_arg(ap, int) != 1)
X! puts(leftadj, width, "s");
X break;
X
X case 'o':
X! putld(leftadj, width, (long) va_arg(ap, int), 8);
X break;
X
X case 'p':
X--- 194,226 ----
X {
X Buffer *b = va_arg(ap, Buffer *);
X
X! puts(b->b_name);
X break;
X }
X
X case 'c':
X! putc(va_arg(ap, int), current_fmt.iop);
X break;
X
X case 'd':
X! putld((long) va_arg(ap, int), 10);
X break;
X
X case 'f': /* current command name gets inserted here! */
X! puts(LastCmd->Name);
X break;
X
X case 'l':
X! c = CharUpcase(*++fmt);
X goto reswitch;
X
X case 'n':
X if (va_arg(ap, int) != 1)
X! puts("s");
X break;
X
X case 'o':
X! putld((long) va_arg(ap, int), 8);
X break;
X
X case 'p':
X***************
X*** 206,217 ****
X char cbuf[20];
X
X PPchar(va_arg(ap, int), cbuf);
X! puts(leftadj, width, cbuf);
X break;
X }
X
X case 's':
X! puts(leftadj, width, va_arg(ap, char *));
X break;
X
X default:
X--- 228,239 ----
X char cbuf[20];
X
X PPchar(va_arg(ap, int), cbuf);
X! puts(cbuf);
X break;
X }
X
X case 's':
X! puts(va_arg(ap, char *));
X break;
X
X default:
X***************
X*** 218,224 ****
X complain("Unknown format directive: \"%%%c\"", c);
X }
X }
X! curiop = pushiop;
X }
X
X /* VARARGS1 */
X--- 240,246 ----
X complain("Unknown format directive: \"%%%c\"", c);
X }
X }
X! current_fmt = prev_fmt;
X }
X
X /* VARARGS1 */
END_OF_FILE
if test 51694 -ne `wc -c <'jove.pch.1'`; then
echo shar: \"'jove.pch.1'\" unpacked with wrong size!
fi
# end of 'jove.pch.1'
fi
echo shar: End of archive 1 \(of 4\).
cp /dev/null ark1isdone
MISSING=""
for I in 1 2 3 4 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 4 archives.
rm -f ark[1-9]isdone
else
echo You still need to unpack the following archives:
echo " " ${MISSING}
fi
## End of shell archive.
exit 0