📄 tubttyaid.c
字号:
/* * IBM/3270 Driver -- Copyright (C) 2000 UTS Global LLC * * tubttyaid.c -- Linemode Attention-ID functionality * * * * * * Author: Richard Hitt */#include "tubio.h"#define PA1_STR "^C"#define PF3_STR "^D"#define PF9_STR "\033j"#define PF10_STR "\033k"#define PF11_STR "\033j"/* other AID-key default strings */aid_t aidtab[64] = {/* 00 */ { 0, 0 },/* C1 = PF13 */ { TA_DOSTRING, 0 },/* C2 = PF14 */ { TA_DOSTRING, 0 },/* C3 = PF15 */ { TA_DOSTRING, 0 },/* C4 = PF16 */ { TA_DOSTRING, 0 },/* C5 = PF17 */ { TA_DOSTRING, 0 },/* C6 = PF18 */ { TA_DOSTRING, 0 },/* C7 = PF19 */ { TA_DOSTRING, 0 },/* C8 = PF20 */ { TA_DOSTRING, 0 },/* C9 = PF21 */ { TA_DOSTRING, 0 },/* 4A = PF22 */ { TA_DOSTRING, 0 },/* 4B = PF23 */ { TA_DOSTRING, 0 },/* 4C = PF24 */ { TA_DOSTRING, 0 },/* 0D */ { 0, 0 },/* 0E */ { 0, 0 },/* 0F */ { 0, 0 },/* 10 */ { 0, 0 },/* 11 */ { 0, 0 },/* 12 */ { 0, 0 },/* 13 */ { 0, 0 },/* 14 */ { 0, 0 },/* 15 */ { 0, 0 },/* 16 */ { 0, 0 },/* 17 */ { 0, 0 },/* 18 */ { 0, 0 },/* 19 */ { 0, 0 },/* 1A */ { 0, 0 },/* 1B */ { 0, 0 },/* 1C */ { 0, 0 },/* 1D */ { 0, 0 },/* 1E */ { 0, 0 },/* 1F */ { 0, 0 },/* 60 = NoAID */ { 0, 0 },/* 21 */ { 0, 0 },/* 22 */ { 0, 0 },/* 23 */ { 0, 0 },/* 24 */ { 0, 0 },/* 25 */ { 0, 0 },/* E6 = OpRdr */ { 0, 0 },/* E7 = MSRdr */ { 0, 0 },/* E8 = NoAID */ { 0, 0 },/* 29 */ { 0, 0 },/* 2A */ { 0, 0 },/* 6B = PA3 */ { TA_SHORTREAD, 0 },/* 6C = PA1 */ { TA_SHORTREAD | TA_DOSTRING, PA1_STR },/* 6D = CLEAR */ { TA_SHORTREAD | TA_CLEARKEY, 0 },/* 6E = PA2 */ { TA_SHORTREAD | TA_CLEARLOG, 0 },/* 2F */ { 0, 0 },/* F0 = TstRq */ { 0, 0 },/* F1 = PF1 */ { TA_DOSTRING, 0 },/* F2 = PF2 */ { TA_DOSTRING, 0 },/* F3 = PF3 */ { TA_DOSTRING, PF3_STR },/* F4 = PF4 */ { TA_DOSTRING, 0 },/* F5 = PF5 */ { TA_DOSTRING, 0 },/* F6 = PF6 */ { TA_DOSTRING, 0 },/* F7 = PF7 */ { TA_DOSTRING, 0 },/* F8 = PF8 */ { TA_DOSTRING, 0 },/* F9 = PF9 */ { TA_DOSTRING, PF9_STR },/* 7A = PF10 */ { TA_DOSTRING, PF10_STR },/* 7B = PF11 */ { TA_DOSTRING, PF11_STR },/* 7C = PF12 */ { TA_DOSTRING, 0 },/* 7D = ENTER */ { TA_DOENTER, 0 },/* 7E = Pen */ { 0, 0 },/* 3F */ { 0, 0 },};inttty3270_aid_init(tub_t *tubp){ memcpy(tubp->tty_aid, aidtab, sizeof aidtab); tubp->tty_aidinit = 1; return 0;}voidtty3270_aid_fini(tub_t *tubp){ int i; char *sp; if (tubp->tty_aidinit == 0) return; for (i = 0; i < 64; i++) { if ((sp = tubp->tty_aid[i].string) == NULL) continue; if (sp == aidtab[i].string) continue; kfree(sp); } tubp->tty_aidinit = 0;}voidtty3270_aid_reinit(tub_t *tubp){ tty3270_aid_fini(tubp); tty3270_aid_init(tubp);}inttty3270_aid_get(tub_t *tubp, int aid, int *aidflags, char **aidstring){ aid_t *ap; ap = AIDENTRY(aid, tubp); *aidflags = ap->aid; *aidstring = ap->string; return 0;}/* * tty3270_aid_set() -- write_proc extension * Parse written string as an AID name. Return 0 if it's not. * Otherwise absorb the string and return count or -error. */inttty3270_aid_set(tub_t *tubp, char *buf, int count){ char name[8]; char *sp; int aidn, aidx; aid_t *ap; int len; char *pfp; if (tubp->tty_aidinit == 0) return 0; if (count < 3) /* If AID-key name too short */ return 0; name[0] = buf[0] < 0x60? buf[0]: (buf[0] & 0x5f); name[1] = buf[1] < 0x60? buf[1]: (buf[1] & 0x5f); if (name[0] == 'P' && name[1] == 'F') { aidn = simple_strtoul(buf+2, &sp, 10); if (aidn < 1 || aidn > 24) return 0; aidx = aidn > 12? aidn - 12: aidn + 0x30; ap = &tubp->tty_aid[aidx]; } else if (name[0] == 'P' && name[1] == 'A') { aidn = simple_strtoul(buf+2, &sp, 10); if (aidn < 1 || aidn > 3) return 0; switch(aidn) { case 1: aidx = 0x2c; break; case 2: aidx = 0x2e; break; case 3: aidx = 0x2b; break; default: aidx = 0; break; } ap = &tubp->tty_aid[aidx]; } else { return 0; } if (*sp == '\0') { tubp->tty_showaidx = ap - tubp->tty_aid; return count; } else if (*sp == '=') { len = strlen(++sp); if (len == 0) { if (ap->string != NULL && ap->string != aidtab[aidx].string) kfree(ap->string); ap->string = aidtab[aidx].string; ap->aid = aidtab[aidx].aid; return count; } if ((pfp = kmalloc(len + 1, GFP_KERNEL)) == NULL) return -ENOMEM; if (ap->string != NULL && ap->string != aidtab[aidx].string) kfree(ap->string); if (sp[len - 1] == '\n') { ap->aid = TA_DOSTRING; sp[len - 1] = '\0'; len--; } else { ap->aid = TA_DOSTRINGD; } memcpy(pfp, sp, len + 1); ap->string = pfp; return count; } else { return -EINVAL; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -