![]() Chapter Contents |
![]() Previous |
![]() Next |
| memxlt |
| Portability: | SAS/C extension |
| SYNOPSIS | |
| DESCRIPTION | |
| RETURN VALUE | |
| CAUTION | |
| IMPLEMENTATION | |
| EXAMPLE | |
| RELATED FUNCTIONS | |
| SEE ALSO |
| SYNOPSIS |
#include <lcstring.h> void *memxlt(void *blk, const char *table, size_t n);
| DESCRIPTION |
memxlt
translates a block of memory from one character set to another. The first
argument (
blk
) is the address of the area
of memory to be translated, and the third argument (
n
) is the number of characters to be translated. The second argument
(
table
) is a pointer to a 256-byte translate
table, which should be defined so that
table[c]
for any character
c
is the value
to which
c
should be translated. (The
function
xltable
is frequently used to
build such a table.)
| RETURN VALUE |
memxlt
returns a pointer to the translated string.
| CAUTION |
The third argument to
memxlt
is
size_t
. If a negative
number is passed, massive overlaying of memory occurs.
The effect of
memxlt
is not defined if the source string and the translate table overlap.
| IMPLEMENTATION |
If the number of bytes to be translated
is a small integer constant (less than or equal to 256), the compiler generates
inline code for
memxlt
unless the function
is undefined (by an
#undef
statement) to
prevent this.
| EXAMPLE |
This example produces a secret word using
memxlt
. The argument word specified on the command
line is translated using a randomly arranged alphabet. The translated message
is then printed to
stdout
:
#include <lcstring.h>
#include <stdio.h>
#include <stdlib.h>
main(int argc, char *argv[])
{
int len, i, j;
char a;
char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char table[256];
if (argc < 2) {
puts("Specify the secret word on the command line.");
exit(4);
}
len = strlen(argv[1] );
memupr(argv[1], len); /* Uppercase input message. */
/* Randomize the alphabet. */
for (i = 0; i < 26; i++)
for (j = i + 1; j < 26; j++)
if (rand() % 2) {
a = alphabet[i];
alphabet[i] = alphabet[j] ;
alphabet[j] = a;
}
/* Build a translate table. */
xltable(table,"ABCDEFGHIJKLMNOPQRSTUVWXYZ",alphabet);
/* Translate message. */
memxlt(argv[1],table,len);
/* Print message. */
printf("Today's secret word is: \n%s\n",argv[1]);
return;
}
| RELATED FUNCTIONS |
| SEE ALSO |
![]() Chapter Contents |
![]() Previous |
![]() Next |
![]() Top of Page |
Copyright © 2001 by SAS Institute Inc., Cary, NC, USA. All rights reserved.