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:
parent
dcc2fb3707
commit
6648383803
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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 *);
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user