Elvis1.3, 3 fixes
Joep Mathijssen
joep at tnosoes.izf.tno.nl
Fri Aug 31 17:39:05 AEST 1990
Here are three fixes for problems I found while using Elvis1.3.
Now I'm testing Elvis on a Sun3, but I'll use it on an Atari soon.
[1] Elvis had a problem with the substitute and find functions when
ignorecase was TRUE. I found that the problem was caused by the
"ustrncmp" function. When ignorecase is TRUE, the 'tolower' was
performed on every character. Even on lowercase characters.
>From the man-page 'tolower':
tolower(c) converts c to its lower-case equivalent.
Note: this only works where c is known to be
a upper-case character to start with
(presumably checked using isupper).
This probably differs between compilers, but I think you should add the
'isupper'-test.
========================================================================
These functions should go to REGEXP.C
========================================================================
/* Here is a function which performs string comparisons. Uses o_ignorecase */
int ustrncmp(str1, str2, len)
register char *str1, *str2; /* the strings to compare */
register int len; /* max # of chars we care about */
{
char ch1, ch2;
if (*o_ignorecase) {
while (--len >= 0) {
ch1 = (isupper(*str1)) ? tolower(*str1) : *str1;
ch2 = (isupper(*str2)) ? tolower(*str2) : *str2;
if (ch1 != ch2)
return ch2 - ch1;
str1++;
str2++;
}
return 0;
}
else {
while (--len >= 0 && *str1++ == *str2++);
if (len < 0)
return 0;
str1--;
str2--;
return *str2 - *str1;
}
}
/* Here is a function which looks for a character in a string. */
char *ustrchr(str, ch)
register char *str; /* the string to look in */
register char ch; /* the character to look for */
{
char tmpch;
if (*o_ignorecase) {
if (isupper(ch))
ch = tolower(ch);
for (; *str && *str != '\n'; str++) {
tmpch = (isupper(*str)) ? tolower(*str) : *str;
if (tmpch == ch)
return str;
}
}
else
for (; *str && *str != '\n'; str++)
if (*str == ch)
return str;
return (char *)0;
}
========================================================================
[2] Small bug. While debugging elvis I found a small error. A temporary
file ('/usr/tmp/elvta000ffff8208') was not removed, because I aborted
the program. Starting elvis again the following message was displayed:
"" is busy
This msg comes from 'tmp.c'. But instead of printing the name of the
tmpfile (variable 'tmpname') the variable 'filename' is printed, so an
empty string is shown. Line 134 in tmp.c should be
FAIL("\"%s\" is busy", tmpname);
BTW: it's not possible to run elvis twice, because a fixed temporary
file is used!
[3] The ESC is incorrect handled in INPUT_MODE. After escaping from
the 'append'-operation (a) the cursor should move to the last typed
character. The problem with elvis was that the screen is not updated
for some reason. So when you press 'x' after doing an append, the
'wrong' character is removed ( not the character the cursor was on, but
the previous one -> yes the last character that was typed). This
problem is caused by the function 'getkey' in tio.c. When I press 'ESC'
this function checks all mapped keys and will find some matches (our
cursorkeys also start with an escape). Then the routine 'ttyread' is
called again because more than one mapped key matched. When I press 'x'
after the ESC no mapped will match anymore and ESC and 'x' are
processed, resulting in a late screen-update.
If I remove my mapped cursorkeys, the problem is solved and my cursor
will move to the last character I added. Another better (?) solution is
to skip the check for mapped keys, because you're not in CMD_MODE. I
don't know if this solution is correct, but it works fine for me:
Line 427 from TIO.C
for (i=j=0, k=-1, km=mapped; when & WHEN_VICMD && i < MAXMAPS; i++, km++)
^^^^^^^^^^^^^^^^^
are we in CMD-mode?
===============================================================================
Joep Mathijssen
TNO Institute for Perception Phone : +31 34 63 562 11
P.O. Box 23 Fax : +31 34 63 539 77
3769 ZG Soesterberg E-mail: uunet!hp4nl.nluug.nl!tnosoes!joep
The Netherlands or: joep at izf.tno.nl
===============================================================================
More information about the Alt.sources
mailing list