home *** CD-ROM | disk | FTP | other *** search
- From: joep@tnosoes.izf.tno.nl (Joep Mathijssen)
- Newsgroups: alt.sources
- Subject: Elvis1.3, 3 fixes
- Message-ID: <1358@tnosoes.izf.tno.nl>
- Date: 31 Aug 90 07:39:05 GMT
-
- 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@izf.tno.nl
- ===============================================================================
-