119 lines
3.2 KiB
Go
119 lines
3.2 KiB
Go
// This file is part of https://github.com/racingmars/go3270/
|
|
// Copyright 2020 by Matthew R. Wilson, licensed under the MIT license. See
|
|
// LICENSE in the project root for license information.
|
|
|
|
package go3270
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
)
|
|
|
|
// Enable go3270 library debugging by setting Debug to an io.Writer.
|
|
// Disable debugging by setting it to nil (the default value).
|
|
var Debug io.Writer
|
|
|
|
// debugf will print to the Debug io.Writer if it isn't nil.
|
|
func debugf(format string, a ...interface{}) {
|
|
if Debug == nil {
|
|
return
|
|
}
|
|
|
|
fmt.Fprintf(Debug, "dbg: ")
|
|
fmt.Fprintf(Debug, format, a...)
|
|
}
|
|
|
|
// codes are the 3270 control character I/O codes, pre-computed as provided
|
|
// at http://www.tommysprinkle.com/mvs/P3270/iocodes.htm
|
|
var codes = []byte{0x40, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8,
|
|
0xc9, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0xd1, 0xd2, 0xd3, 0xd4,
|
|
0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60,
|
|
0x61, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0x6a, 0x6b, 0x6c,
|
|
0x6d, 0x6e, 0x6f, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
|
|
0xf9, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f}
|
|
|
|
// decodes is the inverse of the above table; -1 is used in invalid positions
|
|
var decodes = []int{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1,
|
|
-1, -1, -1, -1, -1, -1, 10, 11, 12, 13, 14, 15, 16, -1, -1, -1, -1, -1,
|
|
-1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, -1, -1, -1, -1, -1, -1,
|
|
-1, -1, 42, 43, 44, 45, 46, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
|
58, 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 2,
|
|
3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, -1, 17, 18, 19, 20, 21, 22,
|
|
23, 24, 25, -1, -1, -1, -1, -1, -1, -1, -1, 34, 35, 36, 37, 38, 39, 40,
|
|
41, -1, -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
|
|
-1, -1, -1, -1}
|
|
|
|
// AIDtoString returns a string representation of an AID key name.
|
|
func AIDtoString(aid AID) string {
|
|
switch aid {
|
|
case AIDClear:
|
|
return "Clear"
|
|
case AIDEnter:
|
|
return "Enter"
|
|
case AIDNone:
|
|
return "[none]"
|
|
case AIDPA1:
|
|
return "PA1"
|
|
case AIDPA2:
|
|
return "PA2"
|
|
case AIDPA3:
|
|
return "PA3"
|
|
case AIDPF1:
|
|
return "PF1"
|
|
case AIDPF2:
|
|
return "PF2"
|
|
case AIDPF3:
|
|
return "PF3"
|
|
case AIDPF4:
|
|
return "PF4"
|
|
case AIDPF5:
|
|
return "PF5"
|
|
case AIDPF6:
|
|
return "PF6"
|
|
case AIDPF7:
|
|
return "PF7"
|
|
case AIDPF8:
|
|
return "PF8"
|
|
case AIDPF9:
|
|
return "PF9"
|
|
case AIDPF10:
|
|
return "PF10"
|
|
case AIDPF11:
|
|
return "PF11"
|
|
case AIDPF12:
|
|
return "PF12"
|
|
case AIDPF13:
|
|
return "PF13"
|
|
case AIDPF14:
|
|
return "PF14"
|
|
case AIDPF15:
|
|
return "PF15"
|
|
case AIDPF16:
|
|
return "PF16"
|
|
case AIDPF17:
|
|
return "PF17"
|
|
case AIDPF18:
|
|
return "PF18"
|
|
case AIDPF19:
|
|
return "PF19"
|
|
case AIDPF20:
|
|
return "PF20"
|
|
case AIDPF21:
|
|
return "PF21"
|
|
case AIDPF22:
|
|
return "PF22"
|
|
case AIDPF23:
|
|
return "PF23"
|
|
case AIDPF24:
|
|
return "PF24"
|
|
default:
|
|
return "[unknown]"
|
|
}
|
|
}
|