From owner-freebsd-current@FreeBSD.ORG Thu May 12 12:36:40 2005 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 9CAEA16A4CE for ; Thu, 12 May 2005 12:36:40 +0000 (GMT) Received: from aiolos.otenet.gr (aiolos.otenet.gr [195.170.0.23]) by mx1.FreeBSD.org (Postfix) with ESMTP id C733043D69 for ; Thu, 12 May 2005 12:36:39 +0000 (GMT) (envelope-from keramida@freebsd.org) Received: from orion.daedalusnetworks.priv (aris.bedc.ondsl.gr [62.103.39.226])j4CCZ2rE028598 for ; Thu, 12 May 2005 15:35:03 +0300 Received: from orion.daedalusnetworks.priv (orion [127.0.0.1]) j4CCabga003065 for ; Thu, 12 May 2005 15:36:37 +0300 (EEST) (envelope-from keramida@freebsd.org) Received: (from keramida@localhost)j4CCabaM003064 for freebsd-current@freebsd.org; Thu, 12 May 2005 15:36:37 +0300 (EEST) (envelope-from keramida@freebsd.org) Date: Thu, 12 May 2005 15:36:37 +0300 From: Giorgos Keramidas To: freebsd-current@freebsd.org Message-ID: <20050512123637.GA2966@orion.daedalusnetworks.priv> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Subject: Trimming top's header to display width X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 12 May 2005 12:36:40 -0000 The following patch trims the header printed by top(1) to the display_width. A lot of people have complained how top's header wraps around when some columns are too wide, with the more recent thread related to this being: http://lists.freebsd.org/pipermail/freebsd-current/2005-May/050014.html Does the diff below look like a good way to fix this? %%% Index: contrib/top/display.c =================================================================== RCS file: /tmp/cvsroot/src/contrib/top/display.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- contrib/top/display.c 12 May 2005 01:15:45 -0000 1.1.1.1 +++ contrib/top/display.c 12 May 2005 11:06:21 -0000 1.2 @@ -626,6 +626,33 @@ static int header_length; /* + * Trim a header string to the current display width and return a newly + * allocated area with the trimmed header. + */ + +char * +trim_header(text) + +char *text; + +{ + char *s; + int width; + + s = NULL; + width = display_width; + header_length = strlen(text); + if (header_length >= width) { + s = malloc((width + 1) * sizeof(char)); + if (s == NULL) + return (NULL); + strncpy(s, text, width); + s[width] = '\0'; + } + return (s); +} + +/* * *_header(text) - print the header for the process area * * Assumptions: cursor is on the previous line and lastline is consistent @@ -636,7 +663,12 @@ char *text; { - header_length = strlen(text); + char *s; + + s = trim_header(text); + if (s != NULL) + text = s; + if (header_status == ON) { putchar('\n'); @@ -647,6 +679,7 @@ { header_status = OFF; } + free(s); } /*ARGSUSED*/ @@ -655,6 +688,12 @@ char *text; /* ignored */ { + char *s; + + s = trim_header(text); + if (s != NULL) + text = s; + if (header_status == ERASE) { putchar('\n'); @@ -662,6 +701,7 @@ clear_eol(header_length); header_status = OFF; } + free(s); } /* %%%