diff --git a/example1/example1.go b/example1/example1.go index 9fa3cb3..0d39214 100644 --- a/example1/example1.go +++ b/example1/example1.go @@ -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."}, diff --git a/example2/example2.go b/example2/example2.go index 7f1df2b..bb270bf 100644 --- a/example2/example2.go +++ b/example2/example2.go @@ -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 diff --git a/screen.go b/screen.go index 34b2cf1..9c4d3c1 100644 --- a/screen.go +++ b/screen.go @@ -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