home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 11 Util / 11-Util.zip / OS2_LEX.ZIP / MAPCH.C < prev    next >
C/C++ Source or Header  |  1984-02-06  |  2KB  |  58 lines

  1. /*
  2.  * Bob Denny     28-Aug-82 Move stdio dependencies to lexerr(), lexget(),
  3.  *                           lexech() and mapch(). This is one of 4 modules in 
  4.  *                           lexlib which depend upon the standard I/O package.
  5.  * Scott Guthery 20-Nov-83 Adapt for IBM PC & DeSmet C
  6.  */
  7.  
  8. /*
  9.  * mapch -- handle escapes within strings
  10.  */
  11.  
  12. #include <stdio.h>
  13. #include <lex.h>
  14.  
  15. extern int yyline;
  16.  
  17. mapch(delim, esc)
  18. {
  19.         register c, octv, n;
  20.  
  21.         if ((c = lexchar())==delim)
  22.                 return(EOF);
  23.         if (c==EOF || c=='\n') {
  24.                 lexerror("Unterminated string");
  25.                 ungetc(c, lexin);
  26.                 return(EOF);
  27.         }
  28.         if (c!=esc)
  29.                 return(c);
  30.         switch (c=lexchar()) {
  31.         case 't':
  32.                 return('\t');
  33.         case 'n':
  34.                 return('\n');
  35.         case 'f':
  36.                 return('\f');
  37.         case '\"': case '\'':
  38.                 return(c);
  39.         case 'e':
  40.                 return('\e');
  41.         case 'p':
  42.                 return(033);
  43.         case 'r':
  44.                 return('\r');
  45.         case '0': case '1': case '2': case '3':
  46.         case '4': case '5': case '6': case '7':
  47.                 octv = c-'0';
  48.                 for (n = 1; (c = lexchar())>='0' && c<='7' && n<=3; n++)
  49.                         octv = octv*010 + (c-'0');
  50.                 ungetc(c, lexin);
  51.                 return(octv);
  52.         case '\n':
  53.                 yyline++;
  54.                 return(mapch(delim, esc));
  55.         }
  56.         return(c);
  57. }
  58.