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 >
C/C++ Source or Header  |  1994-01-04  |  2KB  |  93 lines

  1. /* released to PD by Andrzej Kotanski, Jan. 4, 1994 */
  2.  
  3. #include <stdio.h>
  4. #include <ctype.h>
  5.  
  6. char buffer[256] = "\x1b\x2b\xf0\x01\x00\x00\x01\x00\x01\x00";
  7.  
  8. main(argc, argv)
  9. char **argv;
  10. {
  11.     register int arglen;
  12.     register int i;
  13.     register char *bptr = &buffer[11];
  14.     
  15.     if (argc != 3)
  16.        exit(_errmsg(0, "Usage: fkalias key# text\n"));
  17.  
  18.     buffer[3] = atoi(argv[1]);
  19.     arglen = interpret(bptr, argv[2]);
  20.     buffer[10] = arglen + 1;
  21.     
  22.     write(1, buffer, arglen + 12);
  23.  
  24.     fprintf(stderr, "'%s' assigned to fcn key %d\n", argv[2], atoi(argv[1]));
  25. }
  26.  
  27. int interpret(p, s)
  28. register char *p, *s;
  29. {
  30.     register int len = 0;
  31.     
  32.     while ( *s ) {
  33.         if ( *s == '\\')
  34.            switch ( *++s ) {
  35.               case 'n' :
  36.               case 'r' :
  37.                  *p++ = '\n';
  38.                  s++;
  39.                  len++;
  40.                  break;
  41.               case 'l' :
  42.                  *p++ = '\l';
  43.                  s++;
  44.                  len++;
  45.                  break;
  46.               case 'f' :
  47.                  *p++ = '\f';
  48.                  s++;
  49.                  len++;
  50.                  break;
  51.               case 't' :
  52.                  *p++ = '\t';
  53.                  s++;
  54.                  len++;
  55.                  break;
  56.               case 'x' :
  57.                  if ( !isxdigit( *(s+1) ) || !isxdigit( *(s+2) ) ) {
  58.                     *p++ = '\\';
  59.                     *p++ = 'x';
  60.                     *p++ = *(s+1);
  61.                     *p++ = *(s+2);
  62.                     len += 4;
  63.                     s += 3;
  64.                     break;
  65.                  }
  66.                  *p++ = ((hex(*(s+1)) & 0xff) << 4) + (hex(*(s+2)) & 0xff);
  67.                  s += 3;
  68.                  len++;
  69.                  break;
  70.               default :
  71.                  *p++ = '\\';
  72.                  *p++ = *s;
  73.                  s++;
  74.                  len += 2;
  75.            }
  76.         else {
  77.             *p++ = *s++;
  78.             len++;
  79.         }
  80.     }
  81.     *s = 0;
  82.  
  83.     return len;
  84. }
  85.  
  86. int hex(a)
  87. register int a;
  88. {
  89.     if ( isdigit(a) )
  90.        return a - '0';
  91.     return _tolower(a) - 'a' + 10;
  92. }
  93.