|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T o
Length: 1931 (0x78b)
Types: TextFile
Names: »or_ps2asc.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
└─⟦dc59850a2⟧ »EurOpenD22/pp5.0/pp-5.tar.Z«
└─⟦e5a54fb17⟧
└─⟦this⟧ »pp-5.0/Lib/or/or_ps2asc.c«
/* or_ps2asc.c: convert printable string to ascii */
# ifndef lint
static char Rcsid[] = "@(#)$Header: /cs/research/pp/hubris/pp-beta/Lib/or/RCS/or_ps2asc.c,v 5.0 90/09/20 16:08:33 pp Exp Locker: pp $";
# endif
/*
* $Header: /cs/research/pp/hubris/pp-beta/Lib/or/RCS/or_ps2asc.c,v 5.0 90/09/20 16:08:33 pp Exp Locker: pp $
*
* $Log: or_ps2asc.c,v $
* Revision 5.0 90/09/20 16:08:33 pp
* rcsforce : 5.0 public release
*
*/
#include "util.h"
/*
Map printable string to ASCII
*/
void or_ps2asc (ps, ascii)
char *ps;
char *ascii;
{
register char *p, *q;
int i;
PP_DBG (("Lib/or_ps2asc('%s')", ps));
p = ps;
q = ascii;
for (;*p != '\0';) {
if (*p != '(')
*q++ = *p++;
else {
if (*(p + 2) == ')') {
switch (*(p + 1)) {
case 'a':
case 'A':
*q++ = '@';
break;
case 'p':
case 'P':
*q++ = '%';
break;
case 'b':
case 'B':
*q++ = '!';
break;
case 'q':
case 'Q':
*q++ = '"';
break;
case 'u':
case 'U':
*q++ = '_';
break;
case 'l':
case 'L':
*q++ = '(';
break;
case 'r':
case 'R':
*q++ = ')';
break;
default:
PP_LOG (LLOG_EXCEPTIONS,
("Unknown Printable Char '%s'", ps));
(void) strcpy (ascii, ps);
return;
}
p = p + 3;
}
else {
if (isdigit (*(p + 1)) && isdigit (*(p + 2))
&& (*(p + 3)) && *(p + 4) == ')')
{
(void) sscanf (p + 1, "%3d", &i);
p = p + 5;
}
else
{
PP_LOG (LLOG_EXCEPTIONS,
("Unkown digit '%s'", ps));
(void) strcpy (ascii, ps);
return;
}
if (i <= 0 || i >= 127) {
PP_LOG (LLOG_EXCEPTIONS,
("Digit '%d' out of range '%s'", i, ps));
(void) strcpy (ascii, ps);
return;
}
*q++ = (char) i;
} /* end of if */
} /* end of if */
} /* end of for */
*q = '\0';
}