hz2gb.c
来自「bbs server linux平台下软件源码」· C语言 代码 · 共 198 行
C
198 行
/* $Id: hz2gb.c,v 1.1 2003/04/17 17:42:43 czz Exp $ */#ifndef lintstatic char *rcs_id = "$Id: hz2gb.c,v 1.1 2003/04/17 17:42:43 czz Exp $";#endif /* lint */#include "io.h"#define hzb(c) ((((c) & 0x7f) >= 0x21) && (((c) & 0x7f) <= 0x7e))#define S_ASC 0#define S_PHZ 1#define S_HZ 2#define S_HZ2 3#define S_HZA 4#define S_HZT 5#define S_PZW 6#define S_ZW 7#define S_ZW2 8#define S_ZWA 9static int state[MAX_MODULE];static int eoln[MAX_MODULE];static char hzdecode(c, inst)char c;int inst; /* instant number */{ switch (state[inst]) { case S_ASC: switch (c) { case '~': state[inst] = S_PHZ; break; case 'z': state[inst] = (eoln[inst] ? S_PZW : S_ASC); break; default: state[inst] = S_ASC; break; } break; case S_PHZ: switch (c) { case '{': state[inst] = S_HZ; break; default: state[inst] = S_ASC; break; } break; case S_HZ: switch (c) { case '~': state[inst] = S_HZT; break; case ' ': state[inst] = S_HZA; break; case '\b': state[inst] = S_HZ2; break; default: if (hzb(c)) { c |= 0x80; state[inst] = S_HZ2; } else state[inst] = S_ASC; break; } break; case S_HZA: state[inst] = S_HZ; break; case S_HZ2: switch (c) { case ' ': case '\b': state[inst] = S_HZ; break; default: if (hzb(c)) { c |= 0x80; state[inst] = S_HZ; } else state[inst] = S_ASC; break; } break; case S_HZT: switch (c) { case '}': state[inst] = S_ASC; break; default: state[inst] = S_HZ; break; } break; case S_PZW: switch (c) { case 'W': state[inst] = S_ZW; break; default: state[inst] = S_ASC; break; } break; case S_ZW: switch (c) { case ' ': state[inst] = S_ZWA; break; case '\n': state[inst] = S_ASC; break; case '\r': state[inst] = S_ASC; break; default: if (hzb(c)) { c |= 0x80; state[inst] = S_ZW2; } else state[inst] = S_ASC; break; } break; case S_ZWA: state[inst] = S_ZW; break; case S_ZW2: switch (c) { case ' ': case '\b': state[inst] = S_ZW; break; default: if (hzb(c)) { c |= 0x80; state[inst] = S_ZW; } else state[inst] = S_ASC; break; } break; } return (c);}char *hz2gb(s, plen, inst)char *s;int *plen;int inst;{ int i; for (i = 0; i < *plen; i++) { s[i] = hzdecode(s[i], inst); eoln[inst] = (s[i] == '\n' || s[i] == '\r') ? 1 : 0; } return (s);}char *gb2hz(s, plen, inst)char *s;int *plen;int inst;{ register int i; for (i = 0; i < *plen; i++) s[i] &= 0x7f; return (s);}int hz2gb_init(arg)char *arg;{ static hz2gb_inst = 0; eoln[hz2gb_inst] = 0; state[hz2gb_inst] = S_ASC; return (hz2gb_inst++);}int gb2hz_init(arg)char *arg;{ return (0);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?