[net.emacs] CCA Emacs/Elisp bug fix

massar@godot.UUCP (J.P. Massar) (11/27/84)

There is a bug in the Emacs e_lisp.c file which causes the '&' routines
& Search and & Regular Expression Search to generate "Wrong number of
argument" errors or even crash Emacs.  The following simple fix corrects
this:

*** e_lisp.c~	Tue Nov 13 15:20:17 1984
--- e_lisp.c	Wed Nov 21 15:40:14 1984
***************
*** 357,363
  	*ofname = comtab[n].name;
  	*tindex = n;
  	*mx = *comtab[n].name == '&' ? NOT_META_X : IS_META_X;
! 	*minargs = *maxargs = (comtab[n].keyset >> LARGBIT) & 3;
  	*nocheck = (comtab[n].keyset & LNCHECKBIT) != 0;
  	*retype = (comtab[n].keyset >> LRETBIT) & 3;
  	for (i = 0; i < *minargs; i++)

--- 357,363 -----
  	*ofname = comtab[n].name;
  	*tindex = n;
  	*mx = *comtab[n].name == '&' ? NOT_META_X : IS_META_X;
! 	*minargs = *maxargs = (comtab[n].keyset >> LARGBIT) & 7;
  	*nocheck = (comtab[n].keyset & LNCHECKBIT) != 0;
  	*retype = (comtab[n].keyset >> LRETBIT) & 3;
  	for (i = 0; i < *minargs; i++)

JP Massar
ihnp4!godot!massar
massar@cca-unix

massar@godot.UUCP (J.P. Massar) (11/30/84)

The following change fixes a problem with defining new major modes.
Switching out of a buffer with a newly defined major mode and then back
into it wasn't working properly.

544c544,545
< 			if ((i = binsrch(mode, (char *)comtab, NCOMS, sizeof(struct key))) >= 0 && i < NCOMS)
---
> 			if ((i = binsrch(mode, (char *)comtab, NCOMS, sizeof(struct key))) >= 0 && i < NCOMS) {
>                                 xcnum = i;
545a547
>                         }

JP Massar
ihnp4!godot!massar
massar@cca-unix

massar@godot.UUCP (J.P. Massar) (12/10/84)

If one attempts to interrupt Emacs/Elisp by hitting C-G C-G while
Elisp is in the process of initializing, amazing and bizarre things
occur (at least here at TMC).  Emacs completely hangs and every minute
or so emits about 5 seconds of BEEP's...

Basically, Elisp is trying to handle the interrupt before it has been
initialized.  I have no explanation for the specific behavior I've
observed, but I have a fix.

The two files which need to be changed are elispinit.c and alone.c :

diff oldalone.c alone.c   (in alab_handle_user_interrupt)

69a70
> extern Bool initialization_complete;
2531a2533,2534
>         if (!initialization_complete) return(F);
>         

diff oldelispinit.c elispinit.c (in elisp_init)

73a74,75
> Bool initialization_complete;
> 
477a480,483
>         /* mask off interrupts from the user until initialization is done */
>         
>         initialization_complete = F;
>         
511a518,519
>         initialization_complete = T;
>         

caveat emptor:  There is no guarentee that this or any other bug fix 
will be incorporated into the next version of CCA Emacs.

JP Massar
ihnp4!godot!massar
massar@cca-unix

massar@think.ARPA (J.P. Massar) (05/03/85)

Here is a simple bug fix for the bcompare function.  This should fix
string comparisions that don't work.


*** bcompare.c~	Wed Apr 24 16:44:40 1985
--- bcompare.c	Wed May  1 14:36:14 1985
***************
*** 68,74
  		for (j = 2; j <= nargs; j++) {
  
  			val2 = Get_Nth_Arg(j,nargs);
! 			compare_result = compare(val1,val2);    
  
  			switch (fid) {
  

--- 68,74 -----
  		for (j = 2; j <= nargs; j++) {
  
  			val2 = Get_Nth_Arg(j,nargs);
! 			compare_result = compare(val1,val2,which_type);
  
  			switch (fid) {
  
-- 
-- JP Massar, Thinking Machines Corporation, Cambridge, MA
-- mit-eddie!godot!massar, ihnp4!godot!massar, massar@think, massar@cca-unix