systat: Handle SIGWINCH to properly window resizing and adjust

-swap disk stat based on new size.

Display corrupts after resizing a window.
Process SIGWINCH to redraw all window.

Submitted by:   Yoshihiro Ota ota@j.email.ne.jp
Differential Revision:  https://reviews.freebsd.org/D29337
This commit is contained in:
Michael Reifenberger 2021-04-21 20:31:58 +02:00
parent dcc2fb3707
commit 6648383803
4 changed files with 22 additions and 10 deletions

View File

@ -426,12 +426,6 @@ dsshow2(int diskcol, int diskrow, int dn, int lc, struct statinfo *now, struct s
putlongdouble(device_busy, diskrow + 4, lc, 5, 0, 0); putlongdouble(device_busy, diskrow + 4, lc, 5, 0, 0);
} }
static void
dsshow3(int diskcol, int diskrow, int dn, int lc, struct statinfo *now, struct statinfo *then)
{
dsshow2(diskcol, diskrow, dn, lc, now, then);
}
void void
dsshow(int maxdrives, int diskcol, int diskrow, struct statinfo *now, struct statinfo *then) dsshow(int maxdrives, int diskcol, int diskrow, struct statinfo *now, struct statinfo *then)
{ {
@ -439,5 +433,5 @@ dsshow(int maxdrives, int diskcol, int diskrow, struct statinfo *now, struct sta
for (i = 0, lc = 0; i < num_devices && lc < maxdrives; i++) for (i = 0, lc = 0; i < num_devices && lc < maxdrives; i++)
if (dev_select[i].selected) if (dev_select[i].selected)
dsshow3(diskcol, diskrow, i, ++lc, now, then); dsshow2(diskcol, diskrow, i, ++lc, now, then);
} }

View File

@ -2,7 +2,7 @@
* SPDX-License-Identifier: BSD-2-Clause-FreeBSD * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
* *
* Copyright (c) 1998 David E. O'Brien * Copyright (c) 1998 David E. O'Brien
* 2015 Yoshihiro Ota * 2015, 2021 Yoshihiro Ota
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -34,6 +34,8 @@
#include <devstat.h> #include <devstat.h>
#define DISKHIGHT 5
int dsinit(int); int dsinit(int);
void dsgetinfo(struct statinfo *); void dsgetinfo(struct statinfo *);
int dscmd(const char *, const char *, int, struct statinfo *); int dscmd(const char *, const char *, int, struct statinfo *);

View File

@ -135,6 +135,21 @@ parse_cmd_args (int argc, char **argv)
} }
static void
resize(int signo __unused)
{
endwin();
refresh();
clear();
CMDLINE = LINES - 1;
labels();
display();
status();
}
int int
main(int argc, char **argv) main(int argc, char **argv)
{ {
@ -191,6 +206,7 @@ main(int argc, char **argv)
signal(SIGINT, die); signal(SIGINT, die);
signal(SIGQUIT, die); signal(SIGQUIT, die);
signal(SIGTERM, die); signal(SIGTERM, die);
signal(SIGWINCH, resize);
/* /*
* Initialize display. Load average appears in a one line * Initialize display. Load average appears in a one line

View File

@ -136,7 +136,7 @@ labelswap(void)
werase(wnd); werase(wnd);
dslabel(12, 0, 18); dslabel(12, 0, LINES - DISKHIGHT - 1);
if (kvnsw <= 0) { if (kvnsw <= 0) {
mvwprintw(wnd, 0, 0, "(swap not configured)"); mvwprintw(wnd, 0, 0, "(swap not configured)");
@ -162,7 +162,7 @@ showswap(void)
if (kvnsw != okvnsw) if (kvnsw != okvnsw)
labelswap(); labelswap();
dsshow(12, 0, 18, &cur_dev, &last_dev); dsshow(12, 0, LINES - DISKHIGHT - 1, &cur_dev, &last_dev);
if (kvnsw <= 0) if (kvnsw <= 0)
return; return;