/* xcho.c -- kludged on top of 4.2 BSD "echo.c" by W. F. Hammond */ /* Syntax: xcho [-n] string [,...] The '-n' switch suppresses an automatic terminating linefeed. */ #include char *getenv(); main(argc, argv) int argc; char *argv[]; { register int i; register int j; int nflg, eflg, xflg, jflg; int k; unsigned int val; static char hexmsg[] = "\n *** xcho: Illegal hex escape ***\n"; char cont[3]; char xchesc, *envxch; nflg = 0; cont[2] = '\0'; xchesc = '#'; envxch = getenv("XchoEscape"); if(envxch) { xchesc = envxch[0]; } if(argc > 1 && argv[1][0] == '-' && argv[1][1] == 'n' && !argv[1][2]) { nflg++; argc--; argv++; } for(i=1; i'); break; } case 'p': case 'P': { putchar('|'); break; } case 'q': case 'Q': { putchar('"'); break; } case 'r': case 'R': { putchar(0x0d); /* ascii carriage return */ break; } case 's': case 'S': { putchar('\''); /* i.e., "'" */ break; } case 't': case 'T': { putchar(0x09); /* ascii horizontal tab */ break; } case 'u': case 'U': { putchar('\\'); /* i.e., "\" */ break; } case 'v': case 'V': { putchar(0x0b); /* ascii vertical tab */ break; } case 'w': case 'W': { putchar('~'); break; } case 'x': case 'X': { xflg = 2; /* two character hex code follows */ break; } case 'y': case 'Y': { putchar('?'); break; } case 'z': case 'Z': { putchar('/'); break; } default: { putchar(argv[i][j]); break; } } eflg = 0; } else /* xflg == 0 && eflg == 0 */ { if(argv[i][j]==xchesc) { eflg = 1; } else { putchar(argv[i][j]); } } j ++; } /* end of while(argv[i][j]) loop */ if ( (!jflg) && (i < argc-1) ) putchar(' '); } /* end of loop on i */ if(nflg == 0) putchar('\n'); exit(0); }