mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-07-01 11:32:48 -05:00
Pull out parsing of ^C style strings from the terminal answerback code to
its own function, since I'll be wanting it for `terminal-modes'. [originally from svn r5646]
This commit is contained in:
36
misc.c
36
misc.c
@ -43,6 +43,42 @@ unsigned long parse_blocksize(const char *bs)
|
||||
return r;
|
||||
}
|
||||
|
||||
/*
|
||||
* Parse a ^C style character specification.
|
||||
* 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:
|
||||
* ^? 127
|
||||
* ^@A-Z[\]^_ 0-31
|
||||
* a-z 1-26
|
||||
* ~ ^ escape
|
||||
*/
|
||||
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 >= 'a' && *s <= 'z') {
|
||||
c = (*s - ('a' - 1));
|
||||
} else if ((*s >= '@' && *s <= '_') || *s == '?' || (*s & 0x80)) {
|
||||
c = ('@' ^ *s);
|
||||
} else if (*s == '~') {
|
||||
c = '^';
|
||||
}
|
||||
s++;
|
||||
*next = s;
|
||||
return c;
|
||||
}
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
* String handling routines.
|
||||
*/
|
||||
|
Reference in New Issue
Block a user