home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Dr. Reference
/
dr_ref.zip
/
dr_ref
/
C_2_____
/
STRLIB.ZIP
/
MEMTRANS.C
< prev
next >
Wrap
Text File
|
1993-01-04
|
2KB
|
47 lines
/* File : memtrans.c
Author : Richard A. O'Keefe.
Updated: 2 June 1984
Defines: memtrans()
memtrans(dst, src, from, to, len)
copies exactly len characters from src[] to dst[], translating chars
in from[] to corresponding characters in to[]. From[] and to[] are
handled by _str2map. BEWARE: _str2map normally expects characters in
the range 0..127. The Vax MOVTC instruction thinks its table is 256
bytes long; if you want to translate arbitrary bytes you'd better be
sure that the _map_vec array is 256 bytes long. As distributed, the
memtrans function is only for translating ASCII (to 8-bit codes).
The VaxAsm code can only handle 0 <= len < 2^16, and is presented as
usual for your interest and amusement. Why *do* designers of 32-bit
machines put 16-bit limits on strings? (Dec aren't the only ones.)
*/
#include "strings.h"
#include "_str2map.h"
#if VaxAsm
void memtrans(dst, src, from, to, len)
_char_ *dst, *src, *from, *to;
int len;
{
_str2map(0, from, to);
asm("movtc 20(ap),*8(ap),$0,__map_vec,20(ap),*4(ap)");
}
#else ~VaxAsm
void memtrans(dst, src, from, to, len)
register _char_ *dst, *src;
_char_ *from, *to;
register int len;
{
_str2map(0, from, to);
while (--len >= 0) *dst++ = _map_vec[*src++];
}
#endif VaxAsm