ebcdic.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:2k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *  include/asm-s390/ebcdic.h
  3.  *    EBCDIC -> ASCII, ASCII -> EBCDIC conversion routines.
  4.  *
  5.  *  S390 version
  6.  *    Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation
  7.  *    Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>
  8.  */
  9. #ifndef _EBCDIC_H
  10. #define _EBCDIC_H
  11. #ifndef _S390_TYPES_H
  12. #include <types.h>
  13. #endif
  14. extern __u8 _ascebc_500[];   /* ASCII -> EBCDIC 500 conversion table */
  15. extern __u8 _ebcasc_500[];   /* EBCDIC 500 -> ASCII conversion table */
  16. extern __u8 _ascebc[];   /* ASCII -> EBCDIC conversion table */
  17. extern __u8 _ebcasc[];   /* EBCDIC -> ASCII conversion table */
  18. extern __u8 _ebc_tolower[]; /* EBCDIC -> lowercase */
  19. extern __u8 _ebc_toupper[]; /* EBCDIC -> uppercase */
  20. extern __inline__ 
  21. void codepage_convert(const __u8 *codepage, volatile __u8 * addr, int nr)
  22. {
  23. if (nr <= 0)
  24. return;
  25.         __asm__ __volatile__(
  26. "   bras 1,1fn"
  27. "   tr   0(1,%0),0(%2)n"
  28.                 "0: tr   0(256,%0),0(%2)n"
  29. "   la   %0,256(%0)n"
  30. "1: ahi  %1,-256n"
  31. "   jp   0bn"
  32. "   ex   %1,0(1)"
  33.                 : "+&a" (addr), "+&a" (nr-1)
  34.                 : "a" (codepage) : "cc", "memory", "1" );
  35. }
  36. #define ASCEBC(addr,nr) codepage_convert(_ascebc, addr, nr)
  37. #define EBCASC(addr,nr) codepage_convert(_ebcasc, addr, nr)
  38. #define ASCEBC_500(addr,nr) codepage_convert(_ascebc_500, addr, nr)
  39. #define EBCASC_500(addr,nr) codepage_convert(_ebcasc_500, addr, nr)
  40. #define EBC_TOLOWER(addr,nr) codepage_convert(_ebc_tolower, addr, nr)
  41. #define EBC_TOUPPER(addr,nr) codepage_convert(_ebc_toupper, addr, nr)
  42. #endif