/* Write a function escape(s,t) that converts characters like newline and tab into visible escape sequences like \n and \t as it copies the string t to s. Use a Switch. Write a function for
the other direction as well,converting the escape sequences into the real characters */
#include<stdio.h>
#define MAXLINE 1000
int mgetline( char line[ ] , int maxline) ;
void escape( char s[ ] , char t[ ] ) ;
int main( void )
{
char s[ MAXLINE] , t[ MAXLINE] ;
mgetline( t, MAXLINE) ;
escape( s, t) ;
return 0 ;
}
void escape( char s[ ] , char t[ ] )
{
int i, j;
i= j= 0 ;
while ( t[ i] != '\0 ' )
{
switch ( t[ i] )
{
case '\t ' :
s[ j] = '\\ ' ;
++ j;
s[ j] = 't' ;
break ;
case '\n ' :
s[ j] = '\\ ' ;
++ j;
s[ j] = 'n' ;
break ;
default :
s[ j] = t[ i] ;
break ;
}
++ i;
++ j;
}
s[ j] = '\0 ' ;
}
int mgetline( char s[ ] , int lim)
{
int i, c;
for ( i
= 0 ; i
< lim
- 1 && ( c
= getchar ( ) ) != EOF
;++ i
) s[ i] = c;
s[ i] = '\0 ' ;
}
LyogV3JpdGUgYSBmdW5jdGlvbiBlc2NhcGUocyx0KSB0aGF0IGNvbnZlcnRzIGNoYXJhY3RlcnMgbGlrZSBuZXdsaW5lIGFuZCB0YWIgaW50byB2aXNpYmxlIGVzY2FwZSBzZXF1ZW5jZXMgbGlrZSBcbiBhbmQgXHQgYXMgaXQgY29waWVzIHRoZSBzdHJpbmcgdCB0byBzLiBVc2UgYSBTd2l0Y2guIFdyaXRlIGEgZnVuY3Rpb24gZm9yIAp0aGUgb3RoZXIgZGlyZWN0aW9uIGFzIHdlbGwsY29udmVydGluZyB0aGUgZXNjYXBlIHNlcXVlbmNlcyBpbnRvIHRoZSByZWFsIGNoYXJhY3RlcnMgKi8KCiNpbmNsdWRlPHN0ZGlvLmg+CiNkZWZpbmUgTUFYTElORSAxMDAwCmludCBtZ2V0bGluZShjaGFyIGxpbmVbXSxpbnQgbWF4bGluZSk7CnZvaWQgZXNjYXBlKGNoYXIgc1tdLGNoYXIgdFtdKTsKCgppbnQgbWFpbih2b2lkKQp7CgljaGFyIHNbTUFYTElORV0sdFtNQVhMSU5FXTsKCgltZ2V0bGluZSh0LE1BWExJTkUpOwoKCWVzY2FwZShzLHQpOwoKCXByaW50ZigiJXMiLHMpOwoKCXJldHVybiAwOwp9Cgp2b2lkIGVzY2FwZShjaGFyIHNbXSxjaGFyIHRbXSkKewoJaW50IGksajsKCglpPWo9MDsKCgl3aGlsZSh0W2ldICE9ICdcMCcpCgl7CgkJc3dpdGNoKHRbaV0pCgkJewoJCQljYXNlICdcdCc6CgkJCQkJc1tqXT0nXFwnOwoJCQkJCSsrajsKCQkJCQlzW2pdPSd0JzsKCQkJCQlicmVhazsKCQkJY2FzZSAnXG4nOgoJCQkJCXNbal09J1xcJzsKCQkJCQkrK2o7CgkJCQkJc1tqXT0nbic7CgkJCQkJYnJlYWs7CgkJCWRlZmF1bHQ6CgkJCQkJc1tqXT10W2ldOwoJCQkJCWJyZWFrOwoJCX0KCQkrK2k7CgkJKytqOwoJfQoJCglzW2pdPSdcMCc7Cn0KCmludCBtZ2V0bGluZShjaGFyIHNbXSxpbnQgbGltKQp7CiAgICBpbnQgaSxjOwoKICAgIGZvcihpPTA7aTxsaW0tMSAmJiAoYz1nZXRjaGFyKCkpIT1FT0Y7KytpKQogICAgICAgIHNbaV09YzsKCiAgICBzW2ldPSdcMCc7Cn0K