hedrick@athos.rutgers.edu (Charles Hedrick) (05/07/88)
Someone asked for diffs for the newest Jove for use on Microport. Here is what I'm using. See README. Without changes, this version of jove comes close to working on System V, but there are a few things needed, most of which are probably not specific to Microport, but are generic to System V. #! /bin/sh # This is a shell archive, meaning: # 1. Remove everything above the #! /bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh (not csh) to create the files: # Makefile.DIFF # README # funcdefs.c.DIF # io.c.DIFF # jove.c.DIFF # screen.c.DIFF # term.c.DIFF # tune.h.DIFF # util.c.DIFF # This archive created: Sat May 7 01:49:40 1988 export PATH; PATH=/bin:$PATH if test -f 'Makefile.DIFF' then echo shar: will not over-write existing file "'Makefile.DIFF'" else cat << \SHAR_EOF > 'Makefile.DIFF' *** Makefile.ORIG Sat Apr 30 12:37:06 1988 --- Makefile Sat Apr 30 18:14:23 1988 *************** *** 18,24 # e.g., jove.1 or jove.l or jove.m. DESTDIR = ! TMPDIR = /tmp LIBDIR = /usr/local/lib/jove BINDIR = /usr/local MANDIR = /usr/man/manl --- 18,24 ----- # e.g., jove.1 or jove.l or jove.m. DESTDIR = ! TMPDIR = /usr/local/tmp/jove LIBDIR = /usr/local/lib/jove BINDIR = /u/bin MANDIR = /usr/man/man1 *************** *** 20,29 DESTDIR = TMPDIR = /tmp LIBDIR = /usr/local/lib/jove ! BINDIR = /usr/local ! MANDIR = /usr/man/manl ! MANEXT = l ! SHELL = /bin/csh # These should all just be right if the above ones are. JOVE = $(DESTDIR)$(BINDIR)/jove --- 20,29 ----- DESTDIR = TMPDIR = /usr/local/tmp/jove LIBDIR = /usr/local/lib/jove ! BINDIR = /u/bin ! MANDIR = /usr/man/man1 ! MANEXT = 1 ! XSHELL = /bin/csh # These should all just be right if the above ones are. JOVE = $(DESTDIR)$(BINDIR)/jove *************** *** 45,51 # SysV Rel. 2: LIBS = -lcurses # SCO Xenix: LIBS = -ltermcap -lx ! LIBS = -ltermcap # If you are not VMUNIX (vax running Berkeley Version 4), you must specify # the -i flags (split I/D space) and maybe the -x option (for adb to work). --- 45,51 ----- # SysV Rel. 2: LIBS = -lcurses # SCO Xenix: LIBS = -ltermcap -lx ! LIBS = -lcurses -lxmalloc # If you are not VMUNIX (vax running Berkeley Version 4), you must specify # the -i flags (split I/D space) and maybe the -x option (for adb to work). *************** *** 63,69 # PDP-11 without separate I&D: SEPFLAG = -n # ! LDFLAGS = SEPFLAG = --- 63,70 ----- # PDP-11 without separate I&D: SEPFLAG = -n # ! LDFLAGS = -Ml ! MEMFLAGS = -Ml SEPFLAG = *************** *** 71,77 # MEMFLAGS = -Mle # CFLAGS = -LARGE -O -F 3000 -K -Mle (say -Mle2 for an 80286) ! CFLAGS = -O BASESEG = funcdefs.o keymaps.o argcount.o ask.o buf.o ctype.o delete.o \ disp.o insert.o io.o jove.o malloc.o marks.o misc.o re.o \ --- 72,79 ----- # MEMFLAGS = -Mle # CFLAGS = -LARGE -O -F 3000 -K -Mle (say -Mle2 for an 80286) ! CFLAGS = -O -Ml ! NOOCFLAGS = -Ml BASESEG = funcdefs.o keymaps.o argcount.o ask.o buf.o ctype.o delete.o \ disp.o insert.o io.o jove.o malloc.o marks.o misc.o re.o \ *************** *** 81,87 OVLAY3 = extend.o macros.o OVLAY4 = iproc.o re1.o OVLAY5 = proc.o scandir.o term.o case.o - OBJECTS = $(BASESEG) $(OVLAY1) $(OVLAY2) $(OVLAY3) $(OVLAY4) $(OVLAY5) C_SRC = funcdefs.c abbrev.c argcount.c ask.c buf.c c.c case.c ctype.c \ --- 83,88 ----- OVLAY3 = extend.o macros.o OVLAY4 = iproc.o re1.o OVLAY5 = proc.o scandir.o term.o case.o OBJECTS = $(BASESEG) $(OVLAY1) $(OVLAY2) $(OVLAY3) $(OVLAY4) $(OVLAY5) C_SRC = funcdefs.c abbrev.c argcount.c ask.c buf.c c.c case.c ctype.c \ *************** *** 115,120 edate: @echo "**** make completed at `date` ****" xjove: $(OBJECTS) $(CC) $(LDFLAGS) -o xjove $(OBJECTS) $(LIBS) @-size xjove --- 116,134 ----- edate: @echo "**** make completed at `date` ****" + disp.o: disp.c + $(CC) $(NOOCFLAGS) -c disp.c + + io.o: io.c + $(CC) $(NOOCFLAGS) -c io.c + + misc.o: misc.c + $(CC) $(NOOCFLAGS) -c misc.c + + wind.o: wind.c + $(CC) $(NOOCFLAGS) -c misc.c + + xjove: $(OBJECTS) $(CC) $(LDFLAGS) -o xjove $(OBJECTS) $(LIBS) @-size xjove *************** *** 168,174 @sed -e 's;TMPDIR;$(TMPDIR);' \ -e 's;LIBDIR;$(LIBDIR);' \ -e 's;BINDIR;$(BINDIR);' \ ! -e 's;SHELL;$(SHELL);' tune.template >> tune.c iproc.o: iproc-ptys.c iproc-pipes.c iproc.c $(CC) -c $(CFLAGS) iproc.c --- 182,188 ----- @sed -e 's;TMPDIR;$(TMPDIR);' \ -e 's;LIBDIR;$(LIBDIR);' \ -e 's;BINDIR;$(BINDIR);' \ ! -e 's;SHELL;$(XSHELL);' tune.template >> tune.c iproc.o: iproc-ptys.c iproc-pipes.c iproc.c $(CC) -c $(CFLAGS) iproc.c *************** *** 212,218 $(JOVEM): doc/jove.nr @sed -e 's;TMPDIR;$(TMPDIR);' \ -e 's;LIBDIR;$(LIBDIR);' \ ! -e 's;SHELL;$(SHELL);' doc/jove.nr > /tmp/jove.nr install -m 644 /tmp/jove.nr $(JOVEM) $(TEACHJOVEM): doc/teachjove.nr --- 226,232 ----- $(JOVEM): doc/jove.nr @sed -e 's;TMPDIR;$(TMPDIR);' \ -e 's;LIBDIR;$(LIBDIR);' \ ! -e 's;SHELL;$(XSHELL);' doc/jove.nr > /tmp/jove.nr install -m 644 /tmp/jove.nr $(JOVEM) $(TEACHJOVEM): doc/teachjove.nr *************** *** 218,224 $(TEACHJOVEM): doc/teachjove.nr @sed -e 's;TMPDIR;$(TMPDIR);' \ -e 's;LIBDIR;$(LIBDIR);' \ ! -e 's;SHELL;$(SHELL);' doc/teachjove.nr > /tmp/teachjove.nr install -m 644 /tmp/teachjove.nr $(TEACHJOVEM) echo: --- 232,238 ----- $(TEACHJOVEM): doc/teachjove.nr @sed -e 's;TMPDIR;$(TMPDIR);' \ -e 's;LIBDIR;$(LIBDIR);' \ ! -e 's;SHELL;$(XSHELL);' doc/teachjove.nr > /tmp/teachjove.nr install -m 644 /tmp/teachjove.nr $(TEACHJOVEM) echo: SHAR_EOF fi # end of overwriting check if test -f 'README' then echo shar: will not over-write existing file "'README'" else cat << \SHAR_EOF > 'README' Here are diffs for the newest version of Jove, which was posted to comp.sources.unix about a week ago. Here are comments on the changes: Makefile: take a look at the directories. In some cases you may prefer the original. The variable name SHELL must be changed to XSHELL or it will control not only the shell used by Jove, but the shell used to execute the make commands. The makefile will only work if /bin/sh is used. -lxmalloc is optional. It causes you to use my performance-optimized malloc routines. Presumably the normal malloc will also work. Explicit commands are given for 4 modules. These are the ones that cause the optimizer to blow up, so they must be compiled without -O. funcdefs.c - PauseJove on BSD causes the editor to pause using BSD job control. Originally, on SV, it calls a shell recursively, since there is no job control. I've put back the original, for use with shl (shell layers). I simulate BSD job control as follows: I bind pause-jove to ^Z (the usual BSD stop character, and also used by shl to return to the shl command level). The problem is that I was unable to find a way for jove to return control to shl. So I've set it up so that two ^Z's will pause. The first one is interprted by Jove. It causes jove to put the terminal back into normal mode, and wait for a CR. The second one causes shl to take control. To return to Jove, you then type an extra CR after the shl command. The second CR causes Jove to continue, putting back the screen appropriately. This is sort of a hack, but it's fairly reasonable in practice. io.c - you may choose not to do this one. It causes the backup file name to be foo.BAK, instead of #foo. Purely personal taste. jove.c - fix the bug where read returns the wrong count if interrupted by an alarm. Add the PauseJove code to interface with shl, as described above. screen.c - the original code assumes that certain screen commands leave the cursor at 0,0. The microport terminal driver doesn't. So cause Jove to make no assumptions. term.c - the original code assumes that the system termlib library defines globals PC, BC, and UP. It doesn't. I suspect the System V code was debugged on a system using termcap instead of termlib. tune.h - system-dependent settings. util.c - another variable that was undefined, as in term.c .joverc - my global startup file (/usr/local/lib/jove/.joverc). This makes it look as much like Gnu Emacs as possible. It turns on the clock in the mode line, which you should not do unless you are running a kernel newer than 2.3.0-L. 2.3.0-L and earlier kernels cause paging when the resulting alarm interrupts happen. The result is rather unpleasant. So on such systems I recommend setting update-time-frequency to 0, to disable the clock, and also omitting the part of the mode line in { }. SHAR_EOF fi # end of overwriting check if test -f 'funcdefs.c.DIF' then echo shar: will not over-write existing file "'funcdefs.c.DIF'" else cat << \SHAR_EOF > 'funcdefs.c.DIF' *** funcdefs.c.ORI Sat Apr 30 18:57:23 1988 --- funcdefs.c Sat Apr 30 19:11:00 1988 *************** *** 159,165 #ifdef SPELL SpelWords(), #endif - #ifdef JOB_CONTROL PauseJove(), #endif PrevLine(), --- 159,164 ----- #ifdef SPELL SpelWords(), #endif PauseJove(), PrevLine(), PrevPage(), *************** *** 161,167 #endif #ifdef JOB_CONTROL PauseJove(), - #endif PrevLine(), PrevPage(), PrevWindow(), --- 160,165 ----- SpelWords(), #endif PauseJove(), PrevLine(), PrevPage(), PrevWindow(), *************** *** 459,465 #ifdef SPELL FUNCTION, "parse-spelling-errors-in-buffer", WIRED_CMD(SpelWords), #endif ! #ifdef JOB_CONTROL FUNCTION, "pause-jove", WIRED_CMD(PauseJove), #else # ifndef MAC --- 457,463 ----- #ifdef SPELL FUNCTION, "parse-spelling-errors-in-buffer", WIRED_CMD(SpelWords), #endif ! /* #ifdef JOB_CONTROL */ FUNCTION, "pause-jove", WIRED_CMD(PauseJove), /* #else * # ifndef MAC *************** *** 461,471 #endif #ifdef JOB_CONTROL FUNCTION, "pause-jove", WIRED_CMD(PauseJove), ! #else ! # ifndef MAC ! FUNCTION, "pause-jove", WIRED_CMD(Push), ! # endif ! #endif FUNCTION, "pop-mark", WIRED_CMD(PopMark), #ifdef CHDIR FUNCTION, "popd", WIRED_CMD(Popd), --- 459,470 ----- #endif /* #ifdef JOB_CONTROL */ FUNCTION, "pause-jove", WIRED_CMD(PauseJove), ! /* #else ! * # ifndef MAC ! * FUNCTION, "pause-jove", WIRED_CMD(Push), ! * # endif ! * #endif ! */ FUNCTION, "pop-mark", WIRED_CMD(PopMark), #ifdef CHDIR FUNCTION, "popd", WIRED_CMD(Popd), SHAR_EOF fi # end of overwriting check if test -f 'io.c.DIFF' then echo shar: will not over-write existing file "'io.c.DIFF'" else cat << \SHAR_EOF > 'io.c.DIFF' *** io.c.ORIG Sat Apr 30 18:59:13 1988 --- io.c Sat Apr 30 18:59:14 1988 *************** *** 1361,1368 int mode; strcpy(tmp1, fname); ! if ((s = rindex(tmp1, '/')) == NULL) ! sprintf(tmp2, "#%s", fname); else { *s++ = '\0'; sprintf(tmp2, "%s/#%s", tmp1, s); --- 1361,1375 ----- int mode; strcpy(tmp1, fname); ! if ((s = rindex(tmp1, '/')) == NULL) { ! #ifdef SYSV ! /* maxbase is max name length - length of .BAK */ ! #define MAXBASE 10 ! if (strlen(tmp1) > MAXBASE) ! tmp1[MAXBASE] = 0; ! #endif ! sprintf(tmp2, "%s.BAK", tmp1); ! } else { *s++ = '\0'; #ifdef SYSV *************** *** 1365,1371 sprintf(tmp2, "#%s", fname); else { *s++ = '\0'; ! sprintf(tmp2, "%s/#%s", tmp1, s); } if ((fd1 = open(fname, 0)) < 0) --- 1372,1382 ----- } else { *s++ = '\0'; ! #ifdef SYSV ! if (strlen(s) > MAXBASE) ! s[MAXBASE] = 0; ! #endif ! sprintf(tmp2, "%s/%s.BAK", tmp1, s); } if ((fd1 = open(fname, 0)) < 0) SHAR_EOF fi # end of overwriting check if test -f 'jove.c.DIFF' then echo shar: will not over-write existing file "'jove.c.DIFF'" else cat << \SHAR_EOF > 'jove.c.DIFF' *** jove.c.ORIG Sat Apr 30 19:05:07 1988 --- jove.c Sat Apr 30 19:05:08 1988 *************** *** 323,328 *smbuf = getrawinchar(); nchars = 1; #else nchars = read(0, smbuf, sizeof smbuf); #endif } while (nchars < 0 --- 323,337 ----- *smbuf = getrawinchar(); nchars = 1; #else + /* Microport, and possible all System V's before release 3, + * has a bug where read will return -1 even though it has + * given us useful data. SIGALRM will trigger it. + */ + #ifdef UPORT + char *cp; + for (cp = smbuf, c = 0; c < sizeof smbuf; cp++, c++) + *cp = 0xff; + #endif nchars = read(0, smbuf, sizeof smbuf); #ifdef UPORT if (nchars < 0) { *************** *** 324,329 nchars = 1; #else nchars = read(0, smbuf, sizeof smbuf); #endif } while (nchars < 0 #ifndef MSDOS --- 333,348 ----- *cp = 0xff; #endif nchars = read(0, smbuf, sizeof smbuf); + #ifdef UPORT + if (nchars < 0) { + for (cp = smbuf, c = 0; + c < sizeof smbuf && *cp != 0xff; + cp++, c++) + ; + if (c > 0) { + nchars = c; + } + } #endif #endif } while (nchars < 0 *************** *** 325,330 #else nchars = read(0, smbuf, sizeof smbuf); #endif } while (nchars < 0 #ifndef MSDOS && errno == EINTR --- 344,350 ----- } } #endif + #endif } while (nchars < 0 #ifndef MSDOS && errno == EINTR *************** *** 445,450 ResetTerm(); ClAndRedraw(); } #endif --- 465,481 ----- ResetTerm(); ClAndRedraw(); } + #else + /* This code is intended to handle ^Z when running under shl */ + PauseJove() + { + UnsetTerm(ModBufs(0) ? + "Hit CR to resume [There are modified buffers]\n" : + "Hit CR to resume\n"); + getchar(); + ResetTerm(); + ClAndRedraw(); + } #endif SHAR_EOF fi # end of overwriting check if test -f 'screen.c.DIFF' then echo shar: will not over-write existing file "'screen.c.DIFF'" else cat << \SHAR_EOF > 'screen.c.DIFF' *** screen.c.ORIG Sat Apr 30 19:07:52 1988 --- screen.c Sat Apr 30 19:07:54 1988 *************** *** 1406,1412 if (CS) { putpad(tgoto(CS, bottom, top), 1); ! CapCol = CapLine = 0; Placur(top, 0); for (i = 0; i < num; i++) putpad(SR, bottom - top); --- 1406,1412 ----- if (CS) { putpad(tgoto(CS, bottom, top), 1); ! CapCol = CapLine = 10000; Placur(top, 0); for (i = 0; i < num; i++) putpad(SR, bottom - top); *************** *** 1411,1417 for (i = 0; i < num; i++) putpad(SR, bottom - top); putpad(tgoto(CS, ILI, 0), 1); ! CapCol = CapLine = 0; } else { Placur(bottom - num + 1, 0); if (M_DL && (num > 1)) { --- 1411,1417 ----- for (i = 0; i < num; i++) putpad(SR, bottom - top); putpad(tgoto(CS, ILI, 0), 1); ! CapCol = CapLine = 10000; } else { Placur(bottom - num + 1, 0); if (M_DL && (num > 1)) { *************** *** 1479,1485 if (CS) { putpad(tgoto(CS, bottom, top), 1); ! CapCol = CapLine = 0; Placur(bottom, 0); for (i = 0; i < num; i++) putpad(SF, bottom - top); --- 1479,1485 ----- if (CS) { putpad(tgoto(CS, bottom, top), 1); ! CapCol = CapLine = 10000; Placur(bottom, 0); for (i = 0; i < num; i++) putpad(SF, bottom - top); *************** *** 1484,1490 for (i = 0; i < num; i++) putpad(SF, bottom - top); putpad(tgoto(CS, ILI, 0), 1); ! CapCol = CapLine = 0; } else { Placur(top, 0); if (M_DL && (num > 1)) { --- 1484,1490 ----- for (i = 0; i < num; i++) putpad(SF, bottom - top); putpad(tgoto(CS, ILI, 0), 1); ! CapCol = CapLine = 10000; } else { Placur(top, 0); if (M_DL && (num > 1)) { SHAR_EOF fi # end of overwriting check if test -f 'term.c.DIFF' then echo shar: will not over-write existing file "'term.c.DIFF'" else cat << \SHAR_EOF > 'term.c.DIFF' *** term.c.ORIG Sat Apr 30 19:10:00 1988 --- term.c Sat Apr 30 18:38:16 1988 *************** *** 77,82 HOlen, LLlen; extern char PC, *BC, --- 77,90 ----- HOlen, LLlen; + #ifdef SYSVR2 + char + #else + extern char + #endif + PC, + *BC, + *UP; /* * Are you sure about this one Jon? On the SYSV system I tried this *************** *** 78,87 LLlen; - extern char PC, - *BC, - *UP; - /* * Are you sure about this one Jon? On the SYSV system I tried this * on I got a multiple definition of PC because it was already --- 86,91 ----- *BC, *UP; /* * Are you sure about this one Jon? On the SYSV system I tried this * on I got a multiple definition of PC because it was already *************** *** 87,99 * on I got a multiple definition of PC because it was already * defined in -ltermcap. Similarly for BC and UP ... */ - #ifdef notdef - #ifdef SYSVR2 /* release 2, at least */ - char PC; - #else - extern char PC; - #endif /* SYSVR2 */ - #endif #ifndef IBMPC static char tspace[256]; --- 91,96 ----- * on I got a multiple definition of PC because it was already * defined in -ltermcap. Similarly for BC and UP ... */ #ifndef IBMPC static char tspace[256]; SHAR_EOF fi # end of overwriting check if test -f 'tune.h.DIFF' then echo shar: will not over-write existing file "'tune.h.DIFF'" else cat << \SHAR_EOF > 'tune.h.DIFF' *** tune.h.ORIG Sat Apr 30 12:46:48 1988 --- tune.h Sat Apr 30 12:46:49 1988 *************** *** 25,34 #ifdef UNIX /* pick your version of Unix */ ! # define BSD4_2 /* Berkeley 4.2 BSD */ ! # define BSD4_3 /* Berkeley 4.3 BSD and 2.10 BSD */ ! /*# define SYSV /* for (System III/System V) UNIX systems */ ! /*# define SYSVR2 /* system 5, rel. 2 */ /* M_XENIX is defined by the Compiler */ #endif /* UNIX */ --- 25,35 ----- #ifdef UNIX /* pick your version of Unix */ ! /* # define BSD4_2 /* Berkeley 4.2 BSD */ ! /* # define BSD4_3 /* Berkeley 4.3 BSD and 2.10 BSD */ ! # define SYSV /* for (System III/System V) UNIX systems */ ! # define SYSVR2 /* system 5, rel. 2 */ ! # define UPORT /* M_XENIX is defined by the Compiler */ #endif /* UNIX */ *************** *** 72,78 # define BUFSIZ 512 /* or 1024 */ # endif # ! # define LOAD_AV /* Use the load average for various commands. # Do not define this if you lack a load average # system call and kmem is read protected. */ # --- 73,79 ----- # define BUFSIZ 512 /* or 1024 */ # endif # ! /* # define LOAD_AV /* Use the load average for various commands. # Do not define this if you lack a load average # system call and kmem is read protected. */ # *************** *** 76,82 # Do not define this if you lack a load average # system call and kmem is read protected. */ # ! # define JOB_CONTROL /* if you have job stopping */ # # ifdef JOB_CONTROL # define MENLO_JCL --- 77,83 ----- # Do not define this if you lack a load average # system call and kmem is read protected. */ # ! /* # define JOB_CONTROL /* if you have job stopping */ # # ifdef JOB_CONTROL # define MENLO_JCL *************** *** 102,109 #define ABBREV /* word abbreviation mode */ #if !(defined(IBMPC) || defined(MAC)) # define ANSICODES /* extra commands that process ANSI codes */ ! # define ID_CHAR /* include code to IDchar */ ! # define WIRED_TERMS /* include code for wired terminals */ #endif #define CHDIR /* cd command and absolute pathnames */ #define LISP /* include the code for Lisp Mode */ --- 103,110 ----- #define ABBREV /* word abbreviation mode */ #if !(defined(IBMPC) || defined(MAC)) # define ANSICODES /* extra commands that process ANSI codes */ ! /* # define ID_CHAR /* include code to IDchar */ ! /* # define WIRED_TERMS /* include code for wired terminals */ #endif #define CHDIR /* cd command and absolute pathnames */ #define LISP /* include the code for Lisp Mode */ *************** *** 110,116 #define CMT_FMT /* include the comment formatting routines */ #ifdef UNIX ! # define BIFF /* if you have biff (or the equivalent) */ # define KILL0 /* kill(pid, 0) returns 0 if proc exists */ # define SPELL /* spell words and buffer commands */ #if !sun && !iAPX286 --- 111,117 ----- #define CMT_FMT /* include the comment formatting routines */ #ifdef UNIX ! /* # define BIFF /* if you have biff (or the equivalent) */ # define KILL0 /* kill(pid, 0) returns 0 if proc exists */ # define SPELL /* spell words and buffer commands */ #if !sun && !iAPX286 SHAR_EOF fi # end of overwriting check if test -f 'util.c.DIFF' then echo shar: will not over-write existing file "'util.c.DIFF'" else cat << \SHAR_EOF > 'util.c.DIFF' *** util.c.ORIG Sat Apr 30 18:23:49 1988 --- util.c Sat Apr 30 18:23:50 1988 *************** *** 19,24 #ifdef MSDOS #include <time.h> #endif struct cmd * FindCmd(proc) --- 19,27 ----- #ifdef MSDOS #include <time.h> #endif + #ifdef SYSVR2 + short ospeed; + #endif struct cmd * FindCmd(proc) SHAR_EOF fi # end of overwriting check # End of shell archive exit 0