• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<asm/types.h>
4 #include<stdint.h>
5 #include<string.h>
6 #include "table.h"
7 
8 uint8_t buff[40];
9 
tr(uint8_t * codepage,uint8_t * addr,uint64_t len)10 void tr(uint8_t *codepage, uint8_t *addr, uint64_t len)
11 {
12    asm volatile(
13                 "   larl    1,1f\n"
14                 "1: tr      0(1,%0),0(%2)\n"
15                 "   ex      %1,0(1)"
16                 : "+&a" (addr), "+a" (len)
17                 : "a" (codepage) : "cc", "memory", "1");
18 }
19 
run_test(void * tran_table,void * srcaddr,uint64_t len)20 void run_test(void *tran_table, void *srcaddr, uint64_t len)
21 {
22    int i;
23 
24    tr(tran_table, buff, len);
25    printf("the translated string is ");
26    for (i = 0; i < len; i++) {
27       printf("%c", buff[i]);
28    }
29    printf("\n");
30 }
31 
main()32 int main()
33 {
34    /* Test 1: length = 0 */
35    run_test((char *)&touppercase, &buff, 0);
36    run_test((char *)&touppercase, &buff, 0);
37 
38    /* Test 2 : length > 0 */
39    memset(buff, 'a', 1);
40    run_test((char *)&touppercase, &buff, 1);
41 
42    memcpy(buff, "abcdefgh", 8);
43    run_test((char *)&touppercase, &buff, 3);
44    run_test((char *)&touppercase, &buff, 3);
45    run_test((char *)&touppercase, &buff, 8);
46 
47    memcpy(buff, "ABCDEFGH", 8);
48    run_test((char *)&tolowercase, &buff, 3);
49    run_test((char *)&tolowercase, &buff, 3);
50    run_test((char *)&tolowercase, &buff, 8);
51 
52    memcpy(buff, "0123456789", 9);
53    run_test((char *)&touppercase, &buff, 9);
54    run_test((char *)&tolowercase, &buff, 9);
55    return 0;
56 }
57