home *** CD-ROM | disk | FTP | other *** search
- /*
- * Bob Denny 28-Aug-82 Move stdio dependencies to lexerr(), lexget(),
- * lexech() and mapch(). This is one of 4 modules in
- * lexlib which depend upon the standard I/O package.
- * Scott Guthery 20-Nov-83 Adapt for IBM PC & DeSmet C
- */
-
- /*
- * mapch -- handle escapes within strings
- */
-
- #include <stdio.h>
- #include <lex.h>
-
- extern int yyline;
-
- mapch(delim, esc)
- {
- register c, octv, n;
-
- if ((c = lexchar())==delim)
- return(EOF);
- if (c==EOF || c=='\n') {
- lexerror("Unterminated string");
- ungetc(c, lexin);
- return(EOF);
- }
- if (c!=esc)
- return(c);
- switch (c=lexchar()) {
- case 't':
- return('\t');
- case 'n':
- return('\n');
- case 'f':
- return('\f');
- case '\"': case '\'':
- return(c);
- case 'e':
- return('\e');
- case 'p':
- return(033);
- case 'r':
- return('\r');
- case '0': case '1': case '2': case '3':
- case '4': case '5': case '6': case '7':
- octv = c-'0';
- for (n = 1; (c = lexchar())>='0' && c<='7' && n<=3; n++)
- octv = octv*010 + (c-'0');
- ungetc(c, lexin);
- return(octv);
- case '\n':
- yyline++;
- return(mapch(delim, esc));
- }
- return(c);
- }
-