rs@uunet.UUCP (09/17/87)
Submitted-by: Jonathan Payne <jpayne@cs.rochester.edu>
Posting-number: Volume 11, Issue 48
Archive-name: jove.pch/Part04
#! /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 4 (of 4)."
# Contents: jove.pch.4
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'jove.pch.4' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'jove.pch.4'\"
else
echo shar: Extracting \"'jove.pch.4'\" \(31574 characters\)
sed "s/^X//" >'jove.pch.4' <<'END_OF_FILE'
Xdiff -c ojove/rec.c jove/rec.c
X*** ojove/rec.c Thu Jul 16 09:15:04 1987
X--- jove/rec.c Mon Jul 13 09:46:08 1987
X***************
X*** 51,57 ****
X (void) unlink(recfname);
X }
X
X! static
X putaddr(addr, p)
X disk_line addr;
X register File *p;
X--- 51,57 ----
X (void) unlink(recfname);
X }
X
X! private
X putaddr(addr, p)
X disk_line addr;
X register File *p;
X***************
X*** 63,69 ****
X putc(*cp++ & 0377, p);
X }
X
X! static
X putn(cp, nbytes)
X register char *cp;
X register int nbytes;
X--- 63,69 ----
X putc(*cp++ & 0377, p);
X }
X
X! private
X putn(cp, nbytes)
X register char *cp;
X register int nbytes;
X***************
X*** 74,80 ****
X
X /* Write out the line pointers for buffer B. */
X
X! static
X dmppntrs(b)
X register Buffer *b;
X {
X--- 74,80 ----
X
X /* Write out the line pointers for buffer B. */
X
X! private
X dmppntrs(b)
X register Buffer *b;
X {
X***************
X*** 86,106 ****
X
X /* dump the buffer info and then the actual line pointers. */
X
X! static
X! dmp_buf(b)
X register Buffer *b;
X {
X! static struct rec_entry record;
X register Line *lp;
X register int nlines = 0;
X
X for (lp = b->b_first; lp != 0; lp = lp->l_next, nlines++)
X! ;
X strcpy(record.r_fname, b->b_fname ? b->b_fname : NullStr);
X strcpy(record.r_bname, b->b_name);
X record.r_nlines = nlines;
X putn((char *) &record, sizeof record);
X- dmppntrs(b);
X }
X
X /* Goes through all the buffers and syncs them to the disk. */
X--- 86,107 ----
X
X /* dump the buffer info and then the actual line pointers. */
X
X! private
X! dmp_buf_header(b)
X register Buffer *b;
X {
X! struct rec_entry record;
X register Line *lp;
X register int nlines = 0;
X
X for (lp = b->b_first; lp != 0; lp = lp->l_next, nlines++)
X! if (lp == b->b_dot)
X! record.r_dotline = nlines;
X strcpy(record.r_fname, b->b_fname ? b->b_fname : NullStr);
X strcpy(record.r_bname, b->b_name);
X record.r_nlines = nlines;
X+ record.r_dotchar = b->b_char;
X putn((char *) &record, sizeof record);
X }
X
X /* Goes through all the buffers and syncs them to the disk. */
X***************
X*** 110,115 ****
X--- 111,117 ----
X SyncRec()
X {
X register Buffer *b;
X+ extern disk_line DFree;
X
X if (rec_fd == 0)
X recinit(); /* Init recover file. */
X***************
X*** 123,128 ****
X--- 125,131 ----
X continue;
X else
X Header.Nbuffers++;
X+ Header.FreePtr = DFree;
X putn((char *) &Header, sizeof Header);
X if (Header.Nbuffers != 0) {
X SyncTmp();
X***************
X*** 130,136 ****
X if (b->b_type == B_SCRATCH || !IsModified(b))
X continue;
X else
X! dmp_buf(b);
X }
X flush(rec_out);
X }
X--- 133,148 ----
X if (b->b_type == B_SCRATCH || !IsModified(b))
X continue;
X else
X! dmp_buf_header(b);
X! for (b = world; b != 0; b = b->b_next)
X! if (b->b_type == B_SCRATCH || !IsModified(b))
X! continue;
X! else
X! dmppntrs(b);
X }
X flush(rec_out);
X+ }
X+
X+ FullRecover()
X+ {
X }
Xdiff -c ojove/rec.h jove/rec.h
X*** ojove/rec.h Thu Jul 16 09:15:06 1987
X--- jove/rec.h Thu Mar 19 17:13:30 1987
X***************
X*** 6,20 ****
X ************************************************************************/
X
X struct rec_head {
X! int Uid, /* Uid of owner. */
X! Pid; /* Pid of jove process. */
X! time_t UpdTime; /* Last time this was updated. */
X! int Nbuffers; /* Number of buffers. */
X };
X
X struct rec_entry {
X char r_bname[128],
X r_fname[128];
X! int r_nlines;
X };
X-
X--- 6,22 ----
X ************************************************************************/
X
X struct rec_head {
X! int Uid, /* uid of owner */
X! Pid; /* pid of jove process */
X! time_t UpdTime; /* last time this was updated */
X! int Nbuffers; /* number of buffers */
X! disk_line FreePtr; /* position of DFree */
X };
X
X struct rec_entry {
X char r_bname[128],
X r_fname[128];
X! int r_nlines,
X! r_dotline, /* so we can really save the context */
X! r_dotchar;
X };
Xdiff -c ojove/recover.c jove/recover.c
X*** ojove/recover.c Thu Jul 16 09:15:12 1987
X--- jove/recover.c Mon Jul 13 12:00:15 1987
X***************
X*** 405,414 ****
X printf("recover: cannot create %s.\n", dest);
X return;
X }
X- seekto(src - buflist);
X if (dest != tty)
X printf("\"%s\"", dest);
X! dump_file(outfile);
X } else
X printf("\nAborted!\n");
X fclose(outfile);
X--- 405,413 ----
X printf("recover: cannot create %s.\n", dest);
X return;
X }
X if (dest != tty)
X printf("\"%s\"", dest);
X! dump_file(src - buflist, outfile);
X } else
X printf("\nAborted!\n");
X fclose(outfile);
X***************
X*** 440,454 ****
X seekto(which)
X {
X struct rec_entry rec;
X
X! fseek(ptrs_fp, (long) (sizeof Header), L_SET);
X!
X! while (which-- > 1) {
X! read_rec(&rec);
X! if (fseek(ptrs_fp, (long) rec.r_nlines * sizeof (disk_line),
X! L_INCR) == -1)
X! printf("recover: improper fseek!\n");
X! }
X }
X
X makblist()
X--- 439,451 ----
X seekto(which)
X {
X struct rec_entry rec;
X+ long offset;
X+ int i;
X
X! offset = sizeof (Header) + (Header.Nbuffers * sizeof (rec));
X! for (i = 1; i < which; i++)
X! offset += buflist[i]->r_nlines * sizeof (disk_line);
X! fseek(ptrs_fp, offset, L_SET);
X }
X
X makblist()
X***************
X*** 455,469 ****
X {
X int i;
X
X for (i = 1; i <= Header.Nbuffers; i++) {
X- seekto(i);
X if (buflist[i] == 0)
X buflist[i] = (struct rec_entry *) malloc (sizeof (struct rec_entry));
X read_rec(buflist[i]);
X }
X! if (buflist[i]) {
X free((char *) buflist[i]);
X buflist[i] = 0;
X }
X }
X
X--- 452,467 ----
X {
X int i;
X
X+ fseek(ptrs_fp, (long) sizeof (Header), L_SET);
X for (i = 1; i <= Header.Nbuffers; i++) {
X if (buflist[i] == 0)
X buflist[i] = (struct rec_entry *) malloc (sizeof (struct rec_entry));
X read_rec(buflist[i]);
X }
X! while (buflist[i]) {
X free((char *) buflist[i]);
X buflist[i] = 0;
X+ i++;
X }
X }
X
X***************
X*** 481,496 ****
X return addr;
X }
X
X! dump_file(out)
X FILE *out;
X {
X- struct rec_entry record;
X register int nlines;
X register disk_line daddr;
X char buf[BUFSIZ];
X
X! read_rec(&record);
X! nlines = record.r_nlines;
X Nchars = Nlines = 0L;
X while (--nlines >= 0) {
X daddr = getaddr(ptrs_fp);
X--- 479,493 ----
X return addr;
X }
X
X! dump_file(which, out)
X FILE *out;
X {
X register int nlines;
X register disk_line daddr;
X char buf[BUFSIZ];
X
X! seekto(which);
X! nlines = buflist[which]->r_nlines;
X Nchars = Nlines = 0L;
X while (--nlines >= 0) {
X daddr = getaddr(ptrs_fp);
X***************
X*** 539,549 ****
X #ifdef KILL0
X if (kill(Header.Pid, 0) == 0)
X return 0;
X- #else
X- #ifdef LSRHS
X- if (pexist(Header.Pid))
X- return 0;
X- #endif LSRHS
X #endif KILL0
X
X if (Header.Nbuffers == 0) {
X--- 536,541 ----
X***************
X*** 568,573 ****
X--- 560,566 ----
X return 1;
X }
X makblist();
X+ list();
X
X for (;;) {
X tellme("(Type '?' for options): ", answer);
X***************
X*** 699,707 ****
X printf("recover: usage: recover [-d directory]\n");
X printf("Use \"recover\" after JOVE has died for some\n");
X printf("unknown reason.\n\n");
X! printf("Use \"recover -syscrash\" when the system is in the process\n");
X printf("of rebooting. This is done automatically at reboot time\n");
X printf("and so most of you don't have to worry about that.\n\n");
X printf("Use \"recover -d directory\" when the tmp files are store\n");
X printf("in DIRECTORY instead of the default one (/tmp).\n");
X exit(0);
X--- 692,701 ----
X printf("recover: usage: recover [-d directory]\n");
X printf("Use \"recover\" after JOVE has died for some\n");
X printf("unknown reason.\n\n");
X! /* printf("Use \"recover -syscrash\" when the system is in the process\n");
X printf("of rebooting. This is done automatically at reboot time\n");
X printf("and so most of you don't have to worry about that.\n\n");
X+ */
X printf("Use \"recover -d directory\" when the tmp files are store\n");
X printf("in DIRECTORY instead of the default one (/tmp).\n");
X exit(0);
Xdiff -c ojove/screen.c jove/screen.c
X*** ojove/screen.c Thu Jul 16 09:15:18 1987
X--- jove/screen.c Mon Jul 13 08:34:13 1987
X***************
X*** 222,231 ****
X
X BufSwrite(linenum)
X {
X- char *bp;
X register int n = cursend - cursor,
X col = 0,
X c;
X int StartCol = DesiredScreen[linenum].s_offset,
X visspace = DesiredScreen[linenum].s_window->w_flags & W_VISSPACE,
X aborted = 0;
X--- 222,231 ----
X
X BufSwrite(linenum)
X {
X register int n = cursend - cursor,
X col = 0,
X c;
X+ register char *bp;
X int StartCol = DesiredScreen[linenum].s_offset,
X visspace = DesiredScreen[linenum].s_window->w_flags & W_VISSPACE,
X aborted = 0;
X***************
X*** 369,376 ****
X What ever turns you on ... */
X
X private struct cursaddr {
X! int c_numchars,
X! (*c_proc)();
X };
X
X private char *Cmstr;
X--- 369,376 ----
X What ever turns you on ... */
X
X private struct cursaddr {
X! int cm_numchars,
X! (*cm_proc)();
X };
X
X private char *Cmstr;
X***************
X*** 532,538 ****
X register int nlines = destline - CapLine;
X
X while (--nlines >= 0)
X! putchar('\n');
X CapLine = destline;
X }
X
X--- 532,538 ----
X register int nlines = destline - CapLine;
X
X while (--nlines >= 0)
X! putpad(NL, 1);
X CapLine = destline;
X }
X
X***************
X*** 574,580 ****
X
X #define CursMin(which,addrs,max) \
X for (best = 0, cp = &addrs[1], i = 1; i < max; i++, cp++) \
X! if (cp->c_numchars < addrs[best].c_numchars) \
X best = i; \
X which = &addrs[best];
X
X--- 574,580 ----
X
X #define CursMin(which,addrs,max) \
X for (best = 0, cp = &addrs[1], i = 1; i < max; i++, cp++) \
X! if (cp->cm_numchars < addrs[best].cm_numchars) \
X best = i; \
X which = &addrs[best];
X
X***************
X*** 598,610 ****
X
X if (dcol == 1 || dcol == 0) { /* Most common case. */
X HorMin = &WarpHor[FORWARD];
X! HorMin->c_numchars = dcol + xtracost;
X } else {
X! WarpHor[FORWARD].c_numchars = dcol >= 0 ? dcol + xtracost : 1000;
X! WarpHor[BACKWARD].c_numchars = dcol < 0 ? -(dcol + xtracost) : 1000;
X! WarpHor[FORTAB].c_numchars = dcol >= 0 && TABS ?
X ForNum(CapCol, col) + xtracost : 1000;
X! WarpHor[RETFORWARD].c_numchars = (xtracost + 1 + (TABS ? ForNum(0, col) : col));
X
X /* Which is the shortest of the bunch */
X
X--- 598,610 ----
X
X if (dcol == 1 || dcol == 0) { /* Most common case. */
X HorMin = &WarpHor[FORWARD];
X! HorMin->cm_numchars = dcol + xtracost;
X } else {
X! WarpHor[FORWARD].cm_numchars = dcol >= 0 ? dcol + xtracost : 1000;
X! WarpHor[BACKWARD].cm_numchars = dcol < 0 ? -(dcol + xtracost) : 1000;
X! WarpHor[FORTAB].cm_numchars = dcol >= 0 && TABS ?
X ForNum(CapCol, col) + xtracost : 1000;
X! WarpHor[RETFORWARD].cm_numchars = (xtracost + 1 + (TABS ? ForNum(0, col) : col));
X
X /* Which is the shortest of the bunch */
X
X***************
X*** 613,620 ****
X
X /* Moving vertically is more simple. */
X
X! WarpVert[DOWN].c_numchars = dline >= 0 ? dline : 1000;
X! WarpVert[UPMOVE].c_numchars = dline < 0 ? ((-dline) * UPlen) : 1000;
X
X /* Which of these is simpler */
X CursMin(VertMin, WarpVert, NUMVERT);
X--- 613,620 ----
X
X /* Moving vertically is more simple. */
X
X! WarpVert[DOWN].cm_numchars = dline >= 0 ? dline : 1000;
X! WarpVert[UPMOVE].cm_numchars = dline < 0 ? ((-dline) * UPlen) : 1000;
X
X /* Which of these is simpler */
X CursMin(VertMin, WarpVert, NUMVERT);
X***************
X*** 624,651 ****
X Homing first's total is the sum of the cost of homing
X and the sum of tabbing (if possible) to the right. */
X
X! if (VertMin->c_numchars + HorMin->c_numchars <= 3) {
X DirectMin = &WarpDirect[DIRECT]; /* A dummy ... */
X! DirectMin->c_numchars = 100;
X } else {
X! WarpDirect[DIRECT].c_numchars = CM ?
X strlen(Cmstr = tgoto(CM, col, line)) : 1000;
X! WarpDirect[HOME].c_numchars = HOlen + line +
X! WarpHor[RETFORWARD].c_numchars;
X! WarpDirect[LOWER].c_numchars = LLlen + ((ILI - line) * UPlen) +
X! WarpHor[RETFORWARD].c_numchars;
X CursMin(DirectMin, WarpDirect, NUMDIRECT);
X }
X
X! if (HorMin->c_numchars + VertMin->c_numchars < DirectMin->c_numchars) {
X if (line != CapLine)
X! (*VertMin->c_proc)(line);
X if (col != CapCol) {
X #ifdef ID_CHAR
X if (IN_INSmode) /* We may use real characters ... */
X INSmode(0);
X #endif
X! (*HorMin->c_proc)(col);
X }
X } else {
X #ifdef ID_CHAR
X--- 624,651 ----
X Homing first's total is the sum of the cost of homing
X and the sum of tabbing (if possible) to the right. */
X
X! if (VertMin->cm_numchars + HorMin->cm_numchars <= 3) {
X DirectMin = &WarpDirect[DIRECT]; /* A dummy ... */
X! DirectMin->cm_numchars = 100;
X } else {
X! WarpDirect[DIRECT].cm_numchars = CM ?
X strlen(Cmstr = tgoto(CM, col, line)) : 1000;
X! WarpDirect[HOME].cm_numchars = HOlen + line +
X! WarpHor[RETFORWARD].cm_numchars;
X! WarpDirect[LOWER].cm_numchars = LLlen + ((ILI - line) * UPlen) +
X! WarpHor[RETFORWARD].cm_numchars;
X CursMin(DirectMin, WarpDirect, NUMDIRECT);
X }
X
X! if (HorMin->cm_numchars + VertMin->cm_numchars < DirectMin->cm_numchars) {
X if (line != CapLine)
X! (*VertMin->cm_proc)(line);
X if (col != CapCol) {
X #ifdef ID_CHAR
X if (IN_INSmode) /* We may use real characters ... */
X INSmode(0);
X #endif
X! (*HorMin->cm_proc)(col);
X }
X } else {
X #ifdef ID_CHAR
X***************
X*** 652,658 ****
X if (IN_INSmode && !MI)
X INSmode(0);
X #endif
X! (*DirectMin->c_proc)(line, col);
X }
X }
X
X--- 652,658 ----
X if (IN_INSmode && !MI)
X INSmode(0);
X #endif
X! (*DirectMin->cm_proc)(line, col);
X }
X }
X
X***************
X*** 716,727 ****
X register int i;
X
X if (CS) {
X! putpad(tgoto(CS, bottom, top));
X CapCol = CapLine = 0;
X Placur(top, 0);
X for (i = 0; i < num; i++)
X putpad(SR, bottom - top);
X! putpad(tgoto(CS, ILI, 0));
X CapCol = CapLine = 0;
X } else {
X Placur(bottom - num + 1, 0);
X--- 716,727 ----
X register int i;
X
X if (CS) {
X! putpad(tgoto(CS, bottom, top), 1);
X CapCol = CapLine = 0;
X Placur(top, 0);
X for (i = 0; i < num; i++)
X putpad(SR, bottom - top);
X! putpad(tgoto(CS, ILI, 0), 1);
X CapCol = CapLine = 0;
X } else {
X Placur(bottom - num + 1, 0);
X***************
X*** 785,796 ****
X register int i;
X
X if (CS) {
X! putpad(tgoto(CS, bottom, top));
X CapCol = CapLine = 0;
X Placur(bottom, 0);
X for (i = 0; i < num; i++)
X putpad(SF, bottom - top);
X! putpad(tgoto(CS, ILI, 0));
X CapCol = CapLine = 0;
X } else {
X Placur(top, 0);
X--- 785,796 ----
X register int i;
X
X if (CS) {
X! putpad(tgoto(CS, bottom, top), 1);
X CapCol = CapLine = 0;
X Placur(bottom, 0);
X for (i = 0; i < num; i++)
X putpad(SF, bottom - top);
X! putpad(tgoto(CS, ILI, 0), 1);
X CapCol = CapLine = 0;
X } else {
X Placur(top, 0);
Xdiff -c ojove/term.c jove/term.c
X*** ojove/term.c Thu Jul 16 09:15:21 1987
X--- jove/term.c Wed Jun 3 16:31:57 1987
X***************
X*** 6,11 ****
X--- 6,12 ----
X ************************************************************************/
X
X #include "jove.h"
X+ #include <ctype.h>
X #include <errno.h>
X #ifdef SYSV
X # include <termio.h>
X***************
X*** 48,60 ****
X *SF, /* Scroll forward */
X *SR,
X *SP, /* Send Cursor Position */
X- #ifdef LSRHS
X- *RS, /* Reverse video start */
X- *RE, /* Reverse end */
X- #endif
X *VB,
X *IP, /* insert pad after character inserted */
X! *lPC;
X
X int LI,
X ILI, /* Internal lines, i.e., 23 of LI is 24. */
X--- 49,59 ----
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
X int LI,
X ILI, /* Internal lines, i.e., 23 of LI is 24. */
X***************
X*** 70,103 ****
X HOlen,
X LLlen;
X
X! #ifdef SYSV /* release 2, at least */
X! char PC ;
X #else
X extern char PC;
X! #endif SYSV
X
X static char tspace[256];
X
X /* The ordering of ts and meas must agree !! */
X! #ifdef LSRHS
X! static char *ts="vsvealdlspcssosecmclcehoupbcicimdceillsfsrvbksketiteALDLICDCrsrepcip";
X 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! &RS, &RE, &lPC, &IP, 0
X };
X- #else
X- static char *ts="vsvealdlspcssosecmclcehoupbcicimdceillsfsrvbksketiteALDLICDCpcip";
X- 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, 0
X- };
X- #endif
X
X static
X gets(buf)
X--- 69,91 ----
X HOlen,
X LLlen;
X
X! #ifdef SYSVR2 /* release 2, at least */
X! char PC;
X #else
X extern char PC;
X! #endif SYSVR2
X
X static char tspace[256];
X
X /* The ordering of ts and meas must agree !! */
X! static char *ts="vsvealdlspcssosecmclcehoupbcicimdceillsfsrvbksketiteALDLICDCpcipblnl";
X 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
X static
X gets(buf)
X***************
X*** 172,189 ****
X
X UL = tgetflag("ul");
X
X! #ifdef LSRHS /* We, at the high school, are the only ones who
X! do SO right in termcap, but unfortunately the
X! right SO doesn't look as good with modelines. */
X! if (RS)
X! SO = RS;
X! if (RE)
X! SE = RE;
X! /* I only ever use SO for the modeline anyway. */
X
X! /* SO is really BOLDFACE! Why is LS always right and the rest of the
X! world wrong? */
X! #endif
X #ifdef ID_CHAR
X disp_opt_init();
X #endif
X--- 160,177 ----
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++;
X! if (*NL == '*')
X! NL++;
X! }
X
X! if (BL == 0)
X! BL = "\007";
X!
X #ifdef ID_CHAR
X disp_opt_init();
X #endif
Xdiff -c ojove/termcap.h jove/termcap.h
X*** ojove/termcap.h Thu Jul 16 09:15:22 1987
X--- jove/termcap.h Fri May 29 16:28:21 1987
X***************
X*** 36,48 ****
X *SF, /* Scroll forward */
X *SR, /* Scroll reverse */
X *SP, /* Send cursor position */
X- #ifdef LSRHS
X- *RS, /* reverse video start */
X- *RE, /* reverse video end */
X- #endif
X *VB, /* visible bell */
X *IP, /* insert pad after character inserted */
X! *lPC;
X
X extern int
X LI, /* number of lines */
X--- 36,46 ----
X *SF, /* Scroll forward */
X *SR, /* Scroll reverse */
X *SP, /* Send cursor position */
X *VB, /* visible bell */
X+ *BL, /* audible bell */
X *IP, /* insert pad after character inserted */
X! *lPC,
X! *NL; /* newline character (usually \n) */
X
X extern int
X LI, /* number of lines */
Xdiff -c ojove/tune.h jove/tune.h
X*** ojove/tune.h Thu Jul 16 09:15:22 1987
X--- jove/tune.h Fri May 29 11:14:40 1987
X***************
X*** 7,17 ****
X
X #define TUNED /* don't touch this */
X
X- /*#define LSRHS /* if this is Lincoln-Sudbury Regional High School */
X /*#define MSDOS /* if this is MSDOS */
X #define BSD4_2 /* Berkeley 4.2 BSD */
X /*#define BSD4_3 /* Berkeley 4.3 BSD */
X /*#define SYSV /* for (System III/System V) UNIX systems */
X #ifdef BSD4_3
X # ifndef BSD4_2
X # define BSD4_2 /* 4.3 is 4.2 only different. */
X--- 7,23 ----
X
X #define TUNED /* don't touch this */
X
X /*#define MSDOS /* if this is MSDOS */
X #define BSD4_2 /* Berkeley 4.2 BSD */
X /*#define BSD4_3 /* Berkeley 4.3 BSD */
X /*#define SYSV /* for (System III/System V) UNIX systems */
X+ /*#define SYSVR2 /* system 5, rel. 2 */
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***************
X*** 36,42 ****
X # define NBUF 3
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--- 42,48 ----
X # define NBUF 3
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***************
X*** 67,73 ****
X # define BIFF /* if you have biff (or the equivalent) */
X # define F_COMPLETION /* filename completion */
X # define CHDIR /* cd command and absolute pathnames */
X! # define KILL0 /* kill(pid, 0) returns 0 if proc exists */
X # define SPELL /* spell words and buffer commands */
X # define ID_CHAR /* include code to IDchar */
X # define WIRED_TERMS /* include code for wired terminals */
X--- 73,79 ----
X # define BIFF /* if you have biff (or the equivalent) */
X # define F_COMPLETION /* filename completion */
X # define CHDIR /* cd command and absolute pathnames */
X! /*# define KILL0 /* kill(pid, 0) returns 0 if proc exists */
X # define SPELL /* spell words and buffer commands */
X # define ID_CHAR /* include code to IDchar */
X # define WIRED_TERMS /* include code for wired terminals */
Xdiff -c ojove/util.c jove/util.c
X*** ojove/util.c Thu Jul 16 09:15:24 1987
X--- jove/util.c Fri Jun 19 16:01:01 1987
X***************
X*** 7,17 ****
X
X #include "jove.h"
X #include "ctype.h"
X #include <signal.h>
X #include <varargs.h>
X
X! #ifdef SYSV /* release 2, at least */
X! short ospeed ;
X #endif
X
X struct cmd *
X--- 7,18 ----
X
X #include "jove.h"
X #include "ctype.h"
X+ #include "termcap.h"
X #include <signal.h>
X #include <varargs.h>
X
X! #ifdef SYSVR2 /* release 2, at least */
X! short ospeed;
X #endif
X
X struct cmd *
X***************
X*** 27,32 ****
X--- 28,34 ----
X }
X
X int Interactive; /* True when we invoke with the command handler? */
X+ data_obj *LastCmd;
X char *ProcFmt = ": %f ";
X
X ExecCmd(cp)
X***************
X*** 56,76 ****
X lastline(lp)
X register Line *lp;
X {
X! while (lp->l_next)
X! lp = lp->l_next;
X return lp;
X }
X
X! Upper(c)
X! register int c;
X! {
X! return (islower(c) ? toupper(c) : c);
X! }
X
X- int alarmed = 0;
X-
X char key_strokes[100];
X! static char *key_p = key_strokes;
X
X init_strokes()
X {
X--- 58,74 ----
X lastline(lp)
X register Line *lp;
X {
X! register Line *next;
X!
X! while (next = lp->l_next)
X! lp = next;
X return lp;
X }
X
X! private int *slowp = 0;
X
X char key_strokes[100];
X! private char *key_p = key_strokes;
X
X init_strokes()
X {
X***************
X*** 88,94 ****
X
X slowpoke()
X {
X! alarmed++;
X f_mess(key_strokes);
X }
X
X--- 86,93 ----
X
X slowpoke()
X {
X! if (slowp)
X! *slowp = YES;
X f_mess(key_strokes);
X }
X
X***************
X*** 95,104 ****
X #ifdef BSD4_2
X # define N_SEC 1 /* will be precisely 1 second on 4.2 */
X #else
X! # define N_SEC 2 /* but from 0 to 2 seconds otherwise */
X #endif
X
X! waitchar()
X {
X #ifdef EUNICE
X return getch();
X--- 94,104 ----
X #ifdef BSD4_2
X # define N_SEC 1 /* will be precisely 1 second on 4.2 */
X #else
X! # define N_SEC 2 /* but from 1 to 2 seconds otherwise */
X #endif
X
X! waitchar(slow)
X! int *slow;
X {
X #ifdef EUNICE
X return getch();
X***************
X*** 107,113 ****
X int c;
X int (*oldproc)();
X
X! alarmed = 0;
X oldproc = signal(SIGALRM, slowpoke);
X
X if ((old_time = alarm((unsigned) N_SEC)) == 0)
X--- 107,115 ----
X int c;
X int (*oldproc)();
X
X! slowp = slow;
X! if (slow)
X! *slow = NO;
X oldproc = signal(SIGALRM, slowpoke);
X
X if ((old_time = alarm((unsigned) N_SEC)) == 0)
X***************
X*** 214,220 ****
X Eol();
X }
X
X! int MarkThresh = 22; /* Average screen size ... */
X static int line_diff;
X
X LineDist(nextp, endp)
X--- 216,222 ----
X Eol();
X }
X
X! int MarkThresh = 22; /* average screen size ... */
X static int line_diff;
X
X LineDist(nextp, endp)
X***************
X*** 255,263 ****
X PushPntp(line)
X register Line *line;
X {
X- exp_p = NO;
X if (LineDist(curline, line) >= MarkThresh)
X! SetMark();
X }
X
X ToFirst()
X--- 257,264 ----
X PushPntp(line)
X register Line *line;
X {
X if (LineDist(curline, line) >= MarkThresh)
X! set_mark();
X }
X
X ToFirst()
X***************
X*** 276,282 ****
X {
X register char c;
X
X! if (dir > 0) {
X while ((c = linebuf[curchar]) != 0 && !isword(c))
X curchar++;
X if (eolp()) {
X--- 277,283 ----
X {
X register char c;
X
X! if (dir == FORWARD) {
X while ((c = linebuf[curchar]) != 0 && !isword(c))
X curchar++;
X if (eolp()) {
X***************
X*** 319,325 ****
X filename(b)
X register Buffer *b;
X {
X! return b->b_fname ? pr_name(b->b_fname) : "[No file]";
X }
X
X char *
X--- 320,326 ----
X filename(b)
X register Buffer *b;
X {
X! return b->b_fname ? pr_name(b->b_fname, YES) : "[No file]";
X }
X
X char *
X***************
X*** 430,436 ****
X return 0;
X }
X
X! /* Make `buf' modified and tell the redisplay code to update the modeline
X if it will need to be changed. */
X
X int ModCount = 0;
X--- 431,437 ----
X return 0;
X }
X
X! /* Make `buf' (un)modified and tell the redisplay code to update the modeline
X if it will need to be changed. */
X
X int ModCount = 0;
X***************
X*** 439,447 ****
X {
X extern int DOLsave;
X
X! if (!curbuf->b_modified)
X UpdModLine++;
X! curbuf->b_modified++;
X DOLsave++;
X if (!Asking)
X ModCount++;
X--- 440,449 ----
X {
X extern int DOLsave;
X
X! if (!curbuf->b_modified) {
X UpdModLine++;
X! curbuf->b_modified = YES;
X! }
X DOLsave++;
X if (!Asking)
X ModCount++;
X***************
X*** 449,457 ****
X
X unmodify()
X {
X! if (curbuf->b_modified)
X UpdModLine++;
X! curbuf->b_modified = 0;
X }
X
X numcomp(s1, s2)
X--- 451,460 ----
X
X unmodify()
X {
X! if (curbuf->b_modified) {
X UpdModLine++;
X! curbuf->b_modified = NO;
X! }
X }
X
X numcomp(s1, s2)
X***************
X*** 500,506 ****
X {
X register char *pp, *pp1;
X register int len;
X! int numchars; /* Number of characters to copy forward */
X
X if (num <= 0)
X return;
X--- 503,509 ----
X {
X register char *pp, *pp1;
X register int len;
X! int numchars; /* number of characters to copy forward */
X
X if (num <= 0)
X return;
X***************
X*** 566,572 ****
X char *
X emalloc(size)
X {
X! char *ptr;
X
X if (ptr = malloc((unsigned) size))
X return ptr;
X--- 569,575 ----
X char *
X emalloc(size)
X {
X! register char *ptr;
X
X if (ptr = malloc((unsigned) size))
X return ptr;
X***************
X*** 606,613 ****
X }
X
X #ifdef LOAD_AV
X! # ifdef BSD4_2
X! # ifdef PURDUE_EE
X
X get_la(dp)
X double *dp;
X--- 609,616 ----
X }
X
X #ifdef LOAD_AV
X! # ifdef BSD4_2
X! # ifdef PURDUE_EE && (vax || gould)
X
X get_la(dp)
X double *dp;
X***************
X*** 615,622 ****
X *dp = (double) loadav(0) / 100.0;
X }
X
X! # else PURDUE_EE
X
X #include <nlist.h>
X
X static struct nlist nl[] = {
X--- 618,628 ----
X *dp = (double) loadav(0) / 100.0;
X }
X
X! # else PURDUE_EE
X
X+ #ifdef sun
X+ # include <sys/param.h>
X+ #endif
X #include <nlist.h>
X
X static struct nlist nl[] = {
X***************
X*** 628,634 ****
X--- 634,644 ----
X get_la(dp)
X double *dp;
X {
X+ #ifdef sun
X+ long avenrun[3];
X+ #else
X double avenrun[3];
X+ #endif
X static int kmem = 0;
X
X if (kmem == -1) {
X***************
X*** 644,650 ****
X--- 654,664 ----
X }
X lseek(kmem, (long) nl[X_AVENRUN].n_value, 0);
X read(kmem, (char *) avenrun, sizeof(avenrun));
X+ #ifdef sun
X+ *dp = (double) avenrun[0] / FSCALE;
X+ #else
X *dp = avenrun[0];
X+ #endif
X }
X
X # endif PURDUE_EE
X***************
X*** 693,703 ****
X strlen(s)
X register char *s;
X {
X! register char *base = s + 1; /* Can you say kludge? */
X
X while (*s++)
X ;
X! return (s - base);
X }
X
X char *
X--- 707,717 ----
X strlen(s)
X register char *s;
X {
X! register char *base = s;
X
X while (*s++)
X ;
X! return (s - base) - 1;
X }
X
X char *
X***************
X*** 719,725 ****
X *s2;
X {
X if (!s1 || !s2)
X! return 1; /* Which is not zero ... */
X while (*s1 == *s2++)
X if (*s1++ == '\0')
X return 0;
X--- 733,739 ----
X *s2;
X {
X if (!s1 || !s2)
X! return 1; /* which is not zero ... */
X while (*s1 == *s2++)
X if (*s1++ == '\0')
X return 0;
X***************
X*** 731,738 ****
X *s2;
X {
X if (!s1 || !s2)
X! return 1; /* Which is not zero ... */
X! while (*s1 == *s2++ || Upper(*s1) == Upper(s2[-1]))
X if (*s1++ == '\0')
X return 0;
X return (*s1 - *--s2);
X--- 745,752 ----
X *s2;
X {
X if (!s1 || !s2)
X! return 1; /* which is not zero ... */
X! while (CharUpcase(*s1) == CharUpcase(*s2++))
X if (*s1++ == '\0')
X return 0;
X return (*s1 - *--s2);
X***************
X*** 744,751 ****
X register int n;
X {
X if (!s1 || !s2)
X! return 1; /* Which is not zero ... */
X! while (--n >= 0 && (*s1 == *s2++ || Upper(*s1) == Upper(s2[-1])))
X if (*s1++ == '\0')
X return 0;
X return ((n < 0) ? 0 : *s1 - *--s2);
X--- 758,765 ----
X register int n;
X {
X if (!s1 || !s2)
X! return 1; /* which is not zero ... */
X! while (--n >= 0 && (CharUpcase(*s1) == CharUpcase(*s2++)))
X if (*s1++ == '\0')
X return 0;
X return ((n < 0) ? 0 : *s1 - *--s2);
Xdiff -c ojove/vars.c jove/vars.c
X*** ojove/vars.c Thu Jul 16 09:15:25 1987
X--- jove/vars.c Thu May 28 12:48:29 1987
X***************
X*** 25,30 ****
X--- 25,31 ----
X VARIABLE, "disable-biff", &BiffChk, V_BOOL,
X #endif
X VARIABLE, "error-window-size", &EWSize, V_BASE10,
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 VARIABLE, "internal-tabstop", &tabstop, V_BASE10|V_CLRSCREEN,
Xdiff -c ojove/version.c jove/version.c
X*** ojove/version.c Thu Jul 16 09:15:26 1987
X--- jove/version.c Mon Jun 15 16:26:12 1987
X***************
X*** 5,8 ****
X * included in all the files. *
X ************************************************************************/
X
X! char *version = "4.6.1.4";
X--- 5,8 ----
X * included in all the files. *
X ************************************************************************/
X
X! char *version = "4.7";
Xdiff -c ojove/wind.c jove/wind.c
X*** ojove/wind.c Thu Jul 16 09:15:28 1987
X--- jove/wind.c Fri Jun 12 11:39:26 1987
X***************
X*** 219,225 ****
X
X DOTsave(&savedot);
X
X! switch (waitchar()) {
X case 't':
X case 'T':
X ExecCmd((data_obj *) FindCmd(FindTag));
X--- 219,225 ----
X
X DOTsave(&savedot);
X
X! switch (waitchar((int *) 0)) {
X case 't':
X case 'T':
X ExecCmd((data_obj *) FindCmd(FindTag));
X***************
X*** 354,365 ****
X
X GrowWindow()
X {
X! WindSize(curwind, abs(exp));
X }
X
X ShrWindow()
X {
X! WindSize(curwind, -abs(exp));
X }
X
X /* Change the size of the window by inc. First arg is the window,
X--- 354,365 ----
X
X GrowWindow()
X {
X! WindSize(curwind, abs(arg_value()));
X }
X
X ShrWindow()
X {
X! WindSize(curwind, -abs(arg_value()));
X }
X
X /* Change the size of the window by inc. First arg is the window,
X***************
X*** 434,438 ****
X
X SplitWind()
X {
X! SetWind(div_wind(curwind, exp_p ? (exp - 1) : 1));
X }
X--- 434,460 ----
X
X SplitWind()
X {
X! SetWind(div_wind(curwind, is_an_arg() ? (arg_value() - 1) : 1));
X! }
X!
X! /* Goto the window with the named buffer. If no such window
X! exists, pop one and attach the buffer to it. */
X! GotoWind()
X! {
X! extern Buffer *lastbuf;
X! char *bname;
X! Window *w;
X!
X! bname = ask_buf(lastbuf);
X! w = curwind->w_next;
X! do {
X! if (w->w_bufp->b_name == bname) {
X! SetABuf(curbuf);
X! SetWind(w);
X! return;
X! }
X! w = w->w_next;
X! } while (w != curwind);
X! SetABuf(curbuf);
X! pop_wind(bname, NO, -1);
X }
END_OF_FILE
if test 31574 -ne `wc -c <'jove.pch.4'`; then
echo shar: \"'jove.pch.4'\" unpacked with wrong size!
fi
# end of 'jove.pch.4'
fi
echo shar: End of archive 4 \(of 4\).
cp /dev/null ark4isdone
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