home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
rtsi.com
/
2014.01.www.rtsi.com.tar
/
www.rtsi.com
/
OS9
/
MM1
/
UTIL
/
fkalias.lzh
/
fkalias.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-01-04
|
2KB
|
93 lines
/* released to PD by Andrzej Kotanski, Jan. 4, 1994 */
#include <stdio.h>
#include <ctype.h>
char buffer[256] = "\x1b\x2b\xf0\x01\x00\x00\x01\x00\x01\x00";
main(argc, argv)
char **argv;
{
register int arglen;
register int i;
register char *bptr = &buffer[11];
if (argc != 3)
exit(_errmsg(0, "Usage: fkalias key# text\n"));
buffer[3] = atoi(argv[1]);
arglen = interpret(bptr, argv[2]);
buffer[10] = arglen + 1;
write(1, buffer, arglen + 12);
fprintf(stderr, "'%s' assigned to fcn key %d\n", argv[2], atoi(argv[1]));
}
int interpret(p, s)
register char *p, *s;
{
register int len = 0;
while ( *s ) {
if ( *s == '\\')
switch ( *++s ) {
case 'n' :
case 'r' :
*p++ = '\n';
s++;
len++;
break;
case 'l' :
*p++ = '\l';
s++;
len++;
break;
case 'f' :
*p++ = '\f';
s++;
len++;
break;
case 't' :
*p++ = '\t';
s++;
len++;
break;
case 'x' :
if ( !isxdigit( *(s+1) ) || !isxdigit( *(s+2) ) ) {
*p++ = '\\';
*p++ = 'x';
*p++ = *(s+1);
*p++ = *(s+2);
len += 4;
s += 3;
break;
}
*p++ = ((hex(*(s+1)) & 0xff) << 4) + (hex(*(s+2)) & 0xff);
s += 3;
len++;
break;
default :
*p++ = '\\';
*p++ = *s;
s++;
len += 2;
}
else {
*p++ = *s++;
len++;
}
}
*s = 0;
return len;
}
int hex(a)
register int a;
{
if ( isdigit(a) )
return a - '0';
return _tolower(a) - 'a' + 10;
}