|
|
researchv10 Norman
/*
* ascii<>radix50
*/
#define BADC 0100
static char r50c[128] = {
BADC, BADC, BADC, BADC, BADC, BADC, BADC, BADC,
BADC, BADC, BADC, BADC, BADC, BADC, BADC, BADC,
BADC, BADC, BADC, BADC, BADC, BADC, BADC, BADC,
BADC, BADC, BADC, BADC, BADC, BADC, BADC, BADC,
000, BADC, BADC, BADC, 033, BADC, BADC, BADC,
BADC, BADC, BADC, BADC, BADC, BADC, 034, BADC,
036, 037, 040, 041, 042, 043, 044, 045,
046, 047, BADC, BADC, BADC, BADC, BADC, BADC,
BADC, 001, 002, 003, 004, 005, 006, 007,
010, 011, 012, 013, 014, 015, 016, 017,
020, 021, 022, 023, 024, 025, 026, 027,
030, 031, 032, BADC, BADC, BADC, BADC, BADC,
BADC, 001, 002, 003, 004, 005, 006, 007,
010, 011, 012, 013, 014, 015, 016, 017,
020, 021, 022, 023, 024, 025, 026, 027,
030, 031, 032, BADC, BADC, BADC, BADC, BADC
};
static char r50a[] = " abcdefghijklmnopqrstuvwxyz$.?0123456789";
/*
* convert up to three characters
* from ascii to r50
* advances s; returns the r50
* -1 means an error
*/
int
ator50(s)
register char **s;
{
register char c;
register int i;
register unsigned short r;
r = 0;
for (i = 0; i < 3 && (c = **s) != 0 ; i++) {
if (c & 0200)
return (-1);
if ((c = r50c[c]) == BADC)
return (-1);
r *= 050;
r += c;
(*s)++;
}
for (; i < 3; i++)
r *= 050; /* justify */
return (r);
}
/*
* convert r50 to ascii,
* suppressing leading blanks
* s is where to put the string;
* the new s is returned.
* s had best have at least three characters remaining
*/
char *
r50toa(s, x)
register unsigned short x;
register char *s;
{
register unsigned char c;
if (x) {
c = x % 050;
x /= 050;
if (x)
s = r50toa(s, x);
*s++ = r50a[c];
}
return (s);
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.