[comp.sources.bugs] cdiffs for Jove 4.9 -- C-mode enhancements

allbery@ncoast.ORG (Brandon S. Allbery) (03/14/89)

[Does anyone know Jon Payne's current email address?  It's considered
courteous to send copies of diffs to the author of the original program; and
the "jpayne@cs.rochester.edu" address had a time limit on it which has
expired.  Thanks in advance.  ++bsa]

The following context diffs to Jon Payne's Jove editor, version 4.9, add
some functionality to C-mode.

The added features are:

(1) The c-indentation-increment is now implemented in auto-indent mode.
(2) When the indent is not a multiple of 8, spaces before an indent are
    automatically converted to tabs.  This is perhaps more stylistic than
    necessary, but I dislike tabstops which are stored as "space-space-space-
    space-tab" when c-indentation-increment is 4 (my usual).
(3) backward-delete-character (C-H) now converts a tab to 8 spaces before
    deleting, so that you don't need to backspace and then tab to back up
    when c-indentation-increment is not 8.  This is only done when the tab
    is part of the line's indentation, never in the middle of a line.

Actually, whenever I say "8" in the above text, the value of physical-tabstop
is used within the patches; I'm not a tab chauvinist.  Also, the changes
only affect C mode; C-H still deletes a tab in e.g. Text mode.

To apply this, cd to your Jove source directory and type "patch < thisfile".
Enjoy!

++Brandon
-------------------------------------------------------------------------------
*** c.c.orig	Sat Feb 25 10:20:38 1989
--- c.c	Fri Feb 24 16:51:02 1989
***************
*** 342,347
  {
  	Bufpos	*bp;
  	int	indent = 0;
  	if (bp = m_paren('}', BACKWARD, NO, YES)) {
  		Bufpos	save;
  

--- 342,352 -----
  {
  	Bufpos	*bp;
  	int	indent = 0;
+ #ifdef BSAHAX
+ 	int	here;
+ 
+ 	here = calc_pos(linebuf, curchar);
+ #endif
  	if (bp = m_paren('}', BACKWARD, NO, YES)) {
  		Bufpos	save;
  
***************
*** 351,356
  		indent = calc_pos(linebuf, curchar);
  		SetDot(&save);
  	}
  	if (incrmt) {
  		if (indent == 0)
  			incrmt = tabstop;

--- 356,366 -----
  		indent = calc_pos(linebuf, curchar);
  		SetDot(&save);
  	}
+ #ifdef BSAHAX
+ 	if (incrmt != 0 && here > indent)
+ 		indent = here;
+ #else
+ 	/* following code seems to undo increment?! */
  	if (incrmt) {
  		if (indent == 0)
  			incrmt = tabstop;
***************
*** 357,362
  		else
  			incrmt = (tabstop - (indent%tabstop));
  	}
  	n_indent(indent + incrmt);
  	return bp;
  }

--- 367,373 -----
  		else
  			incrmt = (tabstop - (indent%tabstop));
  	}
+ #endif
  	n_indent(indent + incrmt);
  	return bp;
  }
*** delete.c.orig	Sat Feb 25 10:21:00 1989
--- delete.c	Sat Feb 25 10:01:25 1989
***************
*** 106,111
  }
  
  /* Delete character backward */
  
  void
  DelPChar()

--- 106,112 -----
  }
  
  /* Delete character backward */
+ /* BSAHAX:  now does an untabify in C-mode.  Perhaps should use c-indent. */
  
  void
  DelPChar()
***************
*** 110,115
  void
  DelPChar()
  {
  	if (MinorMode(OverWrite)) {
  		int	count = min(arg_value(), curchar);
  

--- 111,126 -----
  void
  DelPChar()
  {
+ #ifdef BSAHAX
+ 	if (MajorMode(CMODE) && linebuf[curchar - 1] == '\t' && arg_value() >= 0 && in_indent()) {
+ 		int count = arg_value();
+ 		del_char(BACKWARD, count);
+ 		set_arg_value(tabstop);
+ 		LastKeyStruck = ' ';
+ 		SelfInsert();
+ 		set_arg_value(count);
+ 	}
+ #endif
  	if (MinorMode(OverWrite)) {
  		int	count = min(arg_value(), curchar);
  
*** insert.c.orig	Sat Feb 25 10:22:06 1989
--- insert.c	Sat Feb 25 10:04:16 1989
***************
*** 113,118
  
  	ToIndent();
  	dotcol = calc_pos(linebuf, curchar);
  	if (goal < dotcol) {
  		DelWtSpace();
  		dotcol = 0;

--- 113,120 -----
  
  	ToIndent();
  	dotcol = calc_pos(linebuf, curchar);
+ 	/* always undo current indent, so as to fix tabification */
+ #ifndef BSAHAX
  	if (goal < dotcol) {
  #endif
  		DelWtSpace();
***************
*** 114,119
  	ToIndent();
  	dotcol = calc_pos(linebuf, curchar);
  	if (goal < dotcol) {
  		DelWtSpace();
  		dotcol = 0;
  	}

--- 116,122 -----
  	/* always undo current indent, so as to fix tabification */
  #ifndef BSAHAX
  	if (goal < dotcol) {
+ #endif
  		DelWtSpace();
  		dotcol = 0;
  #ifndef BSAHAX
***************
*** 116,121
  	if (goal < dotcol) {
  		DelWtSpace();
  		dotcol = 0;
  	}
  
  	for (;;) {

--- 119,125 -----
  #endif
  		DelWtSpace();
  		dotcol = 0;
+ #ifndef BSAHAX
  	}
  #endif
  
***************
*** 117,122
  		DelWtSpace();
  		dotcol = 0;
  	}
  
  	for (;;) {
  		incrmt = (tabstop - (dotcol % tabstop));

--- 121,127 -----
  		dotcol = 0;
  #ifndef BSAHAX
  	}
+ #endif
  
  	for (;;) {
  		incrmt = (tabstop - (dotcol % tabstop));
***************
*** 225,230
  		return;
  	}
  #endif
  	if (MajorMode(CMODE) && strlen(linebuf) == 0)
  		(void) c_indent(CIndIncrmt);
  	else

--- 230,238 -----
  		return;
  	}
  #endif
+ #ifdef BSAHAX
+ 	if (MajorMode(CMODE) && in_indent())
+ #else
  	if (MajorMode(CMODE) && strlen(linebuf) == 0)
  #endif
  		(void) c_indent(CIndIncrmt);
***************
*** 226,231
  	}
  #endif
  	if (MajorMode(CMODE) && strlen(linebuf) == 0)
  		(void) c_indent(CIndIncrmt);
  	else
  		SelfInsert();

--- 234,240 -----
  	if (MajorMode(CMODE) && in_indent())
  #else
  	if (MajorMode(CMODE) && strlen(linebuf) == 0)
+ #endif
  		(void) c_indent(CIndIncrmt);
  	else
  		SelfInsert();
***************
*** 761,763
  	return bp;
  }
  #endif /* LISP */

--- 770,785 -----
  	return bp;
  }
  #endif /* LISP */
+ 
+ #ifdef BSAHAX
+ 
+ in_indent() {
+ 	register char *c;
+ 
+ 	for (c = linebuf; *c != '\0'; c++)
+ 		if (*c != ' ' && *c != '\t' && *c != '\f')
+ 			return 0;
+ 	return 1;
+ }
+ 
+ #endif
*** tune.h.orig	Sat Feb 25 10:22:22 1989
--- tune.h	Fri Feb 24 16:18:14 1989
***************
*** 128,133
  #endif
  #endif
  
  #define DFLT_MODE	0666	/* file will be created with this mode */
  
  #ifdef BSD4_3

--- 128,135 -----
  #endif
  #endif
  
+ #define BSAHAX		/* my enhanced C mode */
+ 
  #define DFLT_MODE	0666	/* file will be created with this mode */
  
  #ifdef BSD4_3
-- 
Brandon S. Allbery, moderator of comp.sources.misc	     allbery@ncoast.org
uunet!hal.cwru.edu!ncoast!allbery		    ncoast!allbery@hal.cwru.edu
      Send comp.sources.misc submissions to comp-sources-misc@<backbone>
NCoast Public Access UN*X - (216) 781-6201, 300/1200/2400 baud, login: makeuser

msir@uhura.cc.rochester.edu (Mark Sirota) (03/14/89)

In article <13469@ncoast.ORG> allbery@ncoast.ORG (Brandon S. Allbery) writes:
> [Does anyone know Jon Payne's current email address?

Jonathan is now "jpayne@sun.com".

> The following context diffs to Jon Payne's Jove editor, version 4.9, add
> some functionality to C-mode.

This is all well and good, but JOVE v4.12 is now available by anonymous
FTP from cs.rochester.edu and other sites.  One of the major changes for
JOVE v4.11 was a much-enhanced C-mode.
-- 
Mark Sirota - University of Rochester, Rochester, NY
 Internet: msir@cc.rochester.edu
 Bitnet:   msir_ss@uordbv.bitnet
 UUCP:     ...!rochester!ur-cc!msir