1b4532d40SMichael Reifenberger /*- 24d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause 39e16b953SKirk McKusick * 48d06c3e7SMichael Reifenberger * Copyright (c) 2019, 2020 Yoshihiro Ota 5b4532d40SMichael Reifenberger * 6b4532d40SMichael Reifenberger * Redistribution and use in source and binary forms, with or without 7b4532d40SMichael Reifenberger * modification, are permitted provided that the following conditions 8b4532d40SMichael Reifenberger * are met: 9b4532d40SMichael Reifenberger * 1. Redistributions of source code must retain the above copyright 10b4532d40SMichael Reifenberger * notice, this list of conditions and the following disclaimer. 11b4532d40SMichael Reifenberger * 2. Redistributions in binary form must reproduce the above copyright 12b4532d40SMichael Reifenberger * notice, this list of conditions and the following disclaimer in the 13b4532d40SMichael Reifenberger * documentation and/or other materials provided with the distribution. 14b4532d40SMichael Reifenberger * 159e16b953SKirk McKusick * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16b4532d40SMichael Reifenberger * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17b4532d40SMichael Reifenberger * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 189e16b953SKirk McKusick * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19b4532d40SMichael Reifenberger * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20b4532d40SMichael Reifenberger * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21b4532d40SMichael Reifenberger * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22b4532d40SMichael Reifenberger * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23b4532d40SMichael Reifenberger * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24b4532d40SMichael Reifenberger * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25b4532d40SMichael Reifenberger * SUCH DAMAGE. 26b4532d40SMichael Reifenberger */ 27b4532d40SMichael Reifenberger 28*660331daSBrooks Davis #include <sys/param.h> 29b4532d40SMichael Reifenberger #include <sys/sysctl.h> 30b4532d40SMichael Reifenberger 31b4532d40SMichael Reifenberger #include <err.h> 3257e5da2cSKonstantin Belousov #include <inttypes.h> 33b4532d40SMichael Reifenberger #include <libutil.h> 3457e5da2cSKonstantin Belousov #include <string.h> 35b4532d40SMichael Reifenberger 36b4532d40SMichael Reifenberger #include "systat.h" 37b4532d40SMichael Reifenberger #include "extern.h" 38b4532d40SMichael Reifenberger 39b4532d40SMichael Reifenberger void 406d88f9feSMateusz Guzik sysputspaces(WINDOW *wd, int row, int lcol, int width) 419a8fc6bbSMichael Reifenberger { 428d06c3e7SMichael Reifenberger static char str60[] = " " 438d06c3e7SMichael Reifenberger " "; 449a8fc6bbSMichael Reifenberger 456d88f9feSMateusz Guzik mvwaddstr(wd, row, lcol, str60 + sizeof(str60) - width - 1); 469a8fc6bbSMichael Reifenberger } 479a8fc6bbSMichael Reifenberger 489a8fc6bbSMichael Reifenberger void 496d88f9feSMateusz Guzik sysputstrs(WINDOW *wd __unused, int row, int lcol, int width) 50b4532d40SMichael Reifenberger { 518d06c3e7SMichael Reifenberger static char str60[] = "********************" 528d06c3e7SMichael Reifenberger "****************************************"; 53b4532d40SMichael Reifenberger 546d88f9feSMateusz Guzik /* 556d88f9feSMateusz Guzik * XXX wnd instead of wd? 566d88f9feSMateusz Guzik */ 576d88f9feSMateusz Guzik mvwaddstr(wnd, row, lcol, str60 + sizeof(str60) - width - 1); 588d06c3e7SMichael Reifenberger } 598d06c3e7SMichael Reifenberger 608d06c3e7SMichael Reifenberger void 616d88f9feSMateusz Guzik sysputXs(WINDOW *wd __unused, int row, int lcol, int width) 628d06c3e7SMichael Reifenberger { 638d06c3e7SMichael Reifenberger static char str60[] = "XXXXXXXXXXXXXXXXXXXX" 648d06c3e7SMichael Reifenberger "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; 658d06c3e7SMichael Reifenberger 666d88f9feSMateusz Guzik /* 676d88f9feSMateusz Guzik * XXX wnd instead of wd? 686d88f9feSMateusz Guzik */ 696d88f9feSMateusz Guzik mvwaddstr(wnd, row, lcol, str60 + sizeof(str60) - width - 1); 70b4532d40SMichael Reifenberger } 71b4532d40SMichael Reifenberger 72b4532d40SMichael Reifenberger void 736d88f9feSMateusz Guzik sysputuint64(WINDOW *wd, int row, int lcol, int width, uint64_t val, int flags) 74b4532d40SMichael Reifenberger { 755e8e3020SWarner Losh char *start, wrtbuf[width + width + 1]; 76b4532d40SMichael Reifenberger int len; 77b4532d40SMichael Reifenberger 78b4532d40SMichael Reifenberger start = wrtbuf; 79b4532d40SMichael Reifenberger flags |= HN_NOSPACE; 80b4532d40SMichael Reifenberger 81b4532d40SMichael Reifenberger if (val > INT64_MAX) 82b4532d40SMichael Reifenberger goto error; 83b4532d40SMichael Reifenberger else 84b4532d40SMichael Reifenberger len = humanize_number(&wrtbuf[width], width + 1, val, "", 85b4532d40SMichael Reifenberger HN_AUTOSCALE, flags); 86b4532d40SMichael Reifenberger if (len < 0) 87b4532d40SMichael Reifenberger goto error; 88b4532d40SMichael Reifenberger else if (len < width) 89b4532d40SMichael Reifenberger memset(wrtbuf + len, ' ', width - len); 90b4532d40SMichael Reifenberger start += len; 91b4532d40SMichael Reifenberger 926d88f9feSMateusz Guzik mvwaddstr(wd, row, lcol, start); 93b4532d40SMichael Reifenberger return; 94b4532d40SMichael Reifenberger 95b4532d40SMichael Reifenberger error: 966d88f9feSMateusz Guzik sysputstrs(wd, row, lcol, width); 979a8fc6bbSMichael Reifenberger } 989a8fc6bbSMichael Reifenberger 999a8fc6bbSMichael Reifenberger void 1006d88f9feSMateusz Guzik sysputwuint64(WINDOW *wd, int row, int lcol, int width, uint64_t val, int flags) 1019a8fc6bbSMichael Reifenberger { 1029a8fc6bbSMichael Reifenberger if(val == 0) 1036d88f9feSMateusz Guzik sysputspaces(wd, row, lcol, width); 1049a8fc6bbSMichael Reifenberger else 1056d88f9feSMateusz Guzik sysputuint64(wd, row, lcol, width, val, flags); 1069a8fc6bbSMichael Reifenberger } 1079a8fc6bbSMichael Reifenberger 1089a8fc6bbSMichael Reifenberger void 1096d88f9feSMateusz Guzik sysputpage(WINDOW *wd, int row, int lcol, int width, uint64_t pages, int flags) 1109a8fc6bbSMichael Reifenberger { 1119a8fc6bbSMichael Reifenberger 1126d88f9feSMateusz Guzik sysputuint64(wd, row, lcol, width, ptoa(pages), flags); 113b4532d40SMichael Reifenberger } 114