1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-01-25 01:02:24 +00:00

Invent a way of specifying control characters numerically in ctrlparse():

^<27>, ^<0x1B>, ^<033>. (This doesn't tread on any syntax that already had a
non-null behaviour.)

[originally from svn r5647]
This commit is contained in:
Jacob Nevins 2005-04-19 19:18:14 +00:00
parent 3d012d9bd0
commit 482e33ab3e

22
misc.c
View File

@ -48,11 +48,12 @@ unsigned long parse_blocksize(const char *bs)
* Returns NULL in `next' if we didn't recognise it as a control character,
* in which case `c' should be ignored.
* The precise current parsing is an oddity inherited from the terminal
* answerback-string parsing code. All sequences are two characters,
* starting with '^'. The ones that are worth keeping are probably:
* answerback-string parsing code. All sequences start with ^; all except
* ^<123> are two characters. The ones that are worth keeping are probably:
* ^? 127
* ^@A-Z[\]^_ 0-31
* a-z 1-26
* <num> specified by number (decimal, 0octal, 0xHEX)
* ~ ^ escape
*/
char ctrlparse(char *s, char **next)
@ -60,23 +61,30 @@ char ctrlparse(char *s, char **next)
char c = 0;
if (*s != '^') {
*next = NULL;
return c;
} else {
s++;
if (*s == '\0') {
*next = NULL;
return c;
} else if (*s == '<') {
s++;
c = (char)strtol(s, next, 0);
if ((*next == s) || (**next != '>')) {
c = 0;
*next = NULL;
} else
(*next)++;
} else if (*s >= 'a' && *s <= 'z') {
c = (*s - ('a' - 1));
*next = s+1;
} else if ((*s >= '@' && *s <= '_') || *s == '?' || (*s & 0x80)) {
c = ('@' ^ *s);
*next = s+1;
} else if (*s == '~') {
c = '^';
*next = s+1;
}
s++;
*next = s;
return c;
}
return c;
}
/* ----------------------------------------------------------------------