diff options
author | Sven Schnelle <svens@linux.ibm.com> | 2022-11-26 22:18:21 +0300 |
---|---|---|
committer | Heiko Carstens <hca@linux.ibm.com> | 2023-01-09 16:34:00 +0300 |
commit | f77f936afe1ea9342725bff0bd0f7aaa54699794 (patch) | |
tree | 6b9b12c6dfde4f2f12ccac8524ba83c9e7756b8e /drivers/s390/char/raw3270.c | |
parent | b2057c870231edce4105c9825f8e5e1f20aebabc (diff) | |
download | linux-f77f936afe1ea9342725bff0bd0f7aaa54699794.tar.xz |
s390/raw3270: make raw3270_buffer_address() accept x/y coordinates
All callers of raw3270_buffer_address() are calculating the offset
from some x/y coordinates. Move that calculation inside of the
function, so user can pass the x/y values directly. Note that
negative values are relative to the end-of-line or end-of-screen.
Signed-off-by: Sven Schnelle <svens@linux.ibm.com>
Acked-by: Heiko Carstens <hca@linux.ibm.com>
Tested-by: Niklas Schnelle <schnelle@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Diffstat (limited to 'drivers/s390/char/raw3270.c')
-rw-r--r-- | drivers/s390/char/raw3270.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/s390/char/raw3270.c b/drivers/s390/char/raw3270.c index e2d703e8ad48..6f55a094ad3e 100644 --- a/drivers/s390/char/raw3270.c +++ b/drivers/s390/char/raw3270.c @@ -113,8 +113,15 @@ static inline int raw3270_state_ready(struct raw3270 *rp) return rp->state == RAW3270_STATE_READY; } -void raw3270_buffer_address(struct raw3270 *rp, char *cp, unsigned short addr) +void raw3270_buffer_address(struct raw3270 *rp, char *cp, int x, int y) { + int addr; + + if (x < 0) + x = max_t(int, 0, rp->view->cols + x); + if (y < 0) + y = max_t(int, 0, rp->view->rows + y); + addr = (y * rp->view->cols) + x; if (test_bit(RAW3270_FLAGS_14BITADDR, &rp->flags)) { cp[0] = (addr >> 8) & 0x3f; cp[1] = addr & 0xff; |