diff --git a/src/com/bytezone/dm3270/application/ConsoleKeyEvent.java b/src/com/bytezone/dm3270/application/ConsoleKeyEvent.java index e3eac433..3a211e0c 100644 --- a/src/com/bytezone/dm3270/application/ConsoleKeyEvent.java +++ b/src/com/bytezone/dm3270/application/ConsoleKeyEvent.java @@ -32,15 +32,15 @@ public void handle (KeyEvent e) // onKeyTyped char ch = c.charAt (0); if (ch >= 32 && ch < 0x7F) { - ScreenPosition sp = cursor.getScreenPosition (); - sp.setCharacter ((byte) Utility.asc2ebc[ch]); - cursor.setVisible (false); + ScreenPosition screenPosition = cursor.getScreenPosition (); + ScreenField screenField = screenHandler.getCurrentField (); - if (screenHandler.getCurrentField () != null) - screenHandler.getCurrentField ().setModified (true); - - sp = screenHandler.getScreenPosition (cursor.moveRight ()); - cursor.setVisible (true); + if (screenField != null && screenField.isModifiable ()) + { + screenPosition.setCharacter ((byte) Utility.asc2ebc[ch]); + screenField.setModified (true); + screenHandler.moveCursor (KeyCode.RIGHT); + } } } } diff --git a/src/com/bytezone/dm3270/application/ScreenField.java b/src/com/bytezone/dm3270/application/ScreenField.java index bbee77c5..b7cf12ec 100644 --- a/src/com/bytezone/dm3270/application/ScreenField.java +++ b/src/com/bytezone/dm3270/application/ScreenField.java @@ -130,11 +130,11 @@ public boolean matchesLocation (int location) return startPosition == location; } - public void clear () // NB this will assigns the attribute byte as well + public void clear () // NB this will assign the attribute byte as well { setModified (true); for (ScreenPosition sp : screenPositions) - sp.setCharacter ((byte) 0); + sp.resetCharacter (); } public boolean isModified () @@ -147,7 +147,7 @@ public void setModified (boolean modified) StartFieldAttribute sfa = getStartFieldAttribute (); if (sfa != null) sfa.setModified (modified); - screenHandler.fieldModified (this); + screenHandler.fieldModified (this); // display the new status } public String getFieldType () @@ -219,7 +219,7 @@ public int pack (byte[] buffer, int ptr) @Override public String toString () { - return String.format ("%04d-%04d %4d [%s]", startPosition, endPosition, - getLength (), getString ()); + return String.format ("%04d-%04d %4d %s [%s]", startPosition, endPosition, + getLength (), getFieldType (), getString ()); } } \ No newline at end of file diff --git a/src/com/bytezone/dm3270/application/ScreenPosition.java b/src/com/bytezone/dm3270/application/ScreenPosition.java index 1257c339..94023529 100644 --- a/src/com/bytezone/dm3270/application/ScreenPosition.java +++ b/src/com/bytezone/dm3270/application/ScreenPosition.java @@ -97,6 +97,12 @@ public boolean isProtected () return isStartField && getStartFieldAttribute ().isProtected (); } + public void resetCharacter () + { + character = 0; + isGraphicsCharacter = false; + } + public void setCharacter (byte b) { character = b;