b2u.c
来自「bbs server linux平台下软件源码」· C语言 代码 · 共 155 行
C
155 行
/* $Id: b2u.c,v 1.1 2003/04/17 17:42:43 czz Exp $ */#ifndef lintstatic char *rcs_id = "$Id: b2u.c,v 1.1 2003/04/17 17:42:43 czz Exp $";#endif /* lint */#include "config.h"#include "io.h"#define BtoU_bad1 0xa1#define BtoU_bad2 0xf5extern unsigned char BtoU[], UtoB[];extern int BtoU_count, UtoB_count;#define c1 (unsigned char)(s[0])#define c2 (unsigned char)(s[1])static void b2u(s, t)register char *s, *t;{ register unsigned int i; if ((c2 >= 0xa1) && (c2 <= 0xfe)) { if ((c1 >= 0xa1) && (c1 <= 0xa9)) { i = ((c1 - 0xa1) * 94 + (c2 - 0xa1)) * 2; t[0] = BtoU[i++]; t[1] = BtoU[i]; return; } else if ((c1 >= 0xb0) && (c1 <= 0xf7)) { i = ((c1 - 0xb0 + 9) * 94 + (c2 - 0xa1)) * 2; t[0] = BtoU[i++]; t[1] = BtoU[i]; return; } } t[0] = BtoU_bad1; t[1] = BtoU_bad2;}static void u2b(s, t)register char *s, *t;{ register long int i = ((c1 << 8) + c2) * 2; t[0] = UtoB[i++]; t[1] = UtoB[i];}#undef c1#undef c2static char big2uni_savec[MAX_MODULE];static char uni2big_savec[MAX_MODULE];int big2uni_init(arg)char *arg;{ static int big2uni_inst = 0; big2uni_savec[big2uni_inst] = '\0'; return (big2uni_inst++);}int uni2big_init(arg)char *arg;{ static int uni2big_inst = 0; uni2big_savec[uni2big_inst] = '\0'; return (uni2big_inst++);}char *big2uni(s, plen, inst)char *s;int *plen;int inst;{ char buf[4096]; /* big enough */ char *s_start = s; register int len = *plen; register char *p = buf; if (*plen == 0) return (s); if (big2uni_savec[inst]) { *(--s) = big2uni_savec[inst]; len++; big2uni_savec[inst] = 0; } bcopy(s, p, len); s = s_start; while (len > 0) { if (((*p) & 0x80) == 0) { /* ASCII */ *s++ = 0; *s++ = *p++; len--; continue; } if (len == 1) { /* dangling */ big2uni_savec[inst] = *p; break; } b2u(p, s); s++; s++; p++; p++; len--; len--; } *plen = s - s_start; return s_start;}char *uni2big(s, plen, inst)char *s;int *plen;int inst;{ char buf[4096]; /* big enough */ char *s_start = s; register int len = *plen; register char *p = buf; if (len == 0) return (s); if (uni2big_savec[inst]) { *(--s) = uni2big_savec[inst]; len++; uni2big_savec[inst] = 0; } bcopy(s, p, len); s = s_start; while (len >= 2) { if ((p[0] == 0) && ((p[1] & 0x80) == 0)) { /* ASCII */ *s++ = p[1] & 0x7f; } else { u2b(p, s); s++; s++; } p++; p++; len--; len--; } if (len == 1) /* dangling */ uni2big_savec[inst] = *p; *plen = s - s_start; return s_start;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?