Add auto-skip support to protected fields

This commit is contained in:
Matthew R. Wilson committed 2023-10-19 10:02:16 -07:00
1 parent b6d2a09532
commit d39b10e79d
3 files changed
+17 -9

No files matched your search

+3 -3
View File
@@ -26,13 +26,13 @@ var screen1 = go3270.Screen{
{Row: 2, Col: 0, Content: "Welcome to the go3270 example application. Please enter your name."},
{Row: 4, Col: 0, Content: "First Name . . ."},
{Row: 4, Col: 19, Name: "fname", Write: true, Highlighting: go3270.Underscore},
{Row: 4, Col: 40}, // field "stop" character
{Row: 4, Col: 40, Autoskip: true}, // field "stop" character
{Row: 5, Col: 0, Content: "Last Name . . . ."},
{Row: 5, Col: 19, Name: "lname", Write: true, Highlighting: go3270.Underscore},
{Row: 5, Col: 40}, // field "stop" character,
{Row: 5, Col: 40, Autoskip: true}, // field "stop" character
{Row: 6, Col: 0, Content: "Password . . . ."},
{Row: 6, Col: 19, Name: "password", Write: true, Hidden: true},
{Row: 6, Col: 40}, // field "stop" character,
{Row: 6, Col: 40}, // field "stop" character
{Row: 8, Col: 0, Content: "Press"},
{Row: 8, Col: 6, Intense: true, Content: "enter"},
{Row: 8, Col: 12, Content: "to submit your name."},
+3 -3
View File
@@ -26,13 +26,13 @@ var screen1 = go3270.Screen{
{Row: 2, Col: 0, Content: "Welcome to the go3270 example application. Please enter your name."},
{Row: 4, Col: 0, Content: "First Name . . ."},
{Row: 4, Col: 19, Name: "fname", Write: true, Highlighting: go3270.Underscore},
{Row: 4, Col: 40}, // field "stop" character
{Row: 4, Col: 40, Autoskip: true}, // field "stop" character
{Row: 5, Col: 0, Content: "Last Name . . . ."},
{Row: 5, Col: 19, Name: "lname", Write: true, Highlighting: go3270.Underscore},
{Row: 5, Col: 40}, // field "stop" character,
{Row: 5, Col: 40, Autoskip: true}, // field "stop" character,
{Row: 6, Col: 0, Content: "Password . . . ."},
{Row: 6, Col: 19, Name: "password", Write: true, Hidden: true},
{Row: 6, Col: 40}, // field "stop" character,
{Row: 6, Col: 40, Autoskip: true}, // field "stop" character,
{Row: 7, Col: 0, Content: "Change me . . ."},
{Row: 7, Col: 19, Name: "changeme", Content: "change me", Write: true, Highlighting: go3270.Underscore},
{Row: 7, Col: 40}, // field "stop" character
+11 -3
View File
@@ -28,6 +28,11 @@ type Field struct {
// Write allows the user to edit the value of the field.
Write bool
// Autoskip causes protected (Write = false) fields to automatically be
// skipped and the cursor should move to the next field upon encountering
// this field. Autoskip is ignored on fields with Write = true.
Autoskip bool
// Intense indicates this field should be displayed with high intensity.
Intense bool
@@ -188,7 +193,7 @@ func buildField(f Field) []byte {
if f.Color == DefaultColor && f.Highlighting == DefaultHighlight {
// this is a traditional field, issue a normal sf command
buf.WriteByte(0x1d) // sf - "start field"
buf.WriteByte(sfAttribute(f.Write, f.Intense, f.Hidden))
buf.WriteByte(sfAttribute(f.Write, f.Intense, f.Hidden, f.Autoskip))
return buf.Bytes()
}
@@ -205,7 +210,7 @@ func buildField(f Field) []byte {
// Write the basic field attribute
buf.WriteByte(0xc0)
buf.WriteByte(sfAttribute(f.Write, f.Intense, f.Hidden))
buf.WriteByte(sfAttribute(f.Write, f.Intense, f.Hidden, f.Autoskip))
// Write the highlighting attribute
if f.Highlighting != DefaultHighlight {
@@ -223,10 +228,13 @@ func buildField(f Field) []byte {
}
// sfAttribute builds the attribute byte for the "start field" 3270 command
func sfAttribute(write, intense, hidden bool) byte {
func sfAttribute(write, intense, hidden, skip bool) byte {
var attribute byte
if !write {
attribute |= 1 << 5 // set "bit 2"
if skip {
attribute |= 1 << 4 // set "bit 3"
}
} else {
// The MDT bit -- we always want writable field values returned,
// even if unchanged