mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-01-27 02:02:26 +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:
parent
3d012d9bd0
commit
482e33ab3e
22
misc.c
22
misc.c
@ -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,
|
* Returns NULL in `next' if we didn't recognise it as a control character,
|
||||||
* in which case `c' should be ignored.
|
* in which case `c' should be ignored.
|
||||||
* The precise current parsing is an oddity inherited from the terminal
|
* The precise current parsing is an oddity inherited from the terminal
|
||||||
* answerback-string parsing code. All sequences are two characters,
|
* answerback-string parsing code. All sequences start with ^; all except
|
||||||
* starting with '^'. The ones that are worth keeping are probably:
|
* ^<123> are two characters. The ones that are worth keeping are probably:
|
||||||
* ^? 127
|
* ^? 127
|
||||||
* ^@A-Z[\]^_ 0-31
|
* ^@A-Z[\]^_ 0-31
|
||||||
* a-z 1-26
|
* a-z 1-26
|
||||||
|
* <num> specified by number (decimal, 0octal, 0xHEX)
|
||||||
* ~ ^ escape
|
* ~ ^ escape
|
||||||
*/
|
*/
|
||||||
char ctrlparse(char *s, char **next)
|
char ctrlparse(char *s, char **next)
|
||||||
@ -60,24 +61,31 @@ char ctrlparse(char *s, char **next)
|
|||||||
char c = 0;
|
char c = 0;
|
||||||
if (*s != '^') {
|
if (*s != '^') {
|
||||||
*next = NULL;
|
*next = NULL;
|
||||||
return c;
|
|
||||||
} else {
|
} else {
|
||||||
s++;
|
s++;
|
||||||
if (*s == '\0') {
|
if (*s == '\0') {
|
||||||
*next = NULL;
|
*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') {
|
} else if (*s >= 'a' && *s <= 'z') {
|
||||||
c = (*s - ('a' - 1));
|
c = (*s - ('a' - 1));
|
||||||
|
*next = s+1;
|
||||||
} else if ((*s >= '@' && *s <= '_') || *s == '?' || (*s & 0x80)) {
|
} else if ((*s >= '@' && *s <= '_') || *s == '?' || (*s & 0x80)) {
|
||||||
c = ('@' ^ *s);
|
c = ('@' ^ *s);
|
||||||
|
*next = s+1;
|
||||||
} else if (*s == '~') {
|
} else if (*s == '~') {
|
||||||
c = '^';
|
c = '^';
|
||||||
|
*next = s+1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
s++;
|
|
||||||
*next = s;
|
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
* String handling routines.
|
* String handling routines.
|
||||||
|
Loading…
Reference in New Issue
Block a user