This commit affords user control over justification
for both column headings and the subordinate data.
Separate toggles are provided for control of numeric
data and string data.
Signed-off-by: Jim Warner <james.warner@comcast.net>
Now that column headings are independent of column
data format and require no carefully managed padding
bytes they are candidates for nls translation.
This commit migrates all column headings to the .pot
file with additional translator guidance in the form
of maximum sizes to avoid truncation.
It also places these new additions adjacent to their
associated descriptions, which were already present.
Signed-off-by: Jim Warner <james.warner@comcast.net>
This commit accomplishes the following objectives:
* remove extra task_show parm added with 'Locate'
* avoid column overflow with subsequent misalignment
* eliminate spaces for column heading padding
* decouple column headings from column data formats
* eliminate all hardcoded column format specifiers
* generalize the inter-column spacing management
* remove Fieldstab.desc in favor of direct nls access
* set the stage for nls support of column headings
* set the stage for dynamic changes to justification
Signed-off-by: Jim Warner <james.warner@comcast.net>
This flaw was revealed under 'man2htm' and dates back
to the first Gitorious revised top submission.
Reference:
commit fd62123562
Date: Thu Mar 31 22:15:12 2011 +1100
Signed-off-by: Jim Warner <james.warner@comcast.net>
The TREE_RESCANS #define (formerly TREE_ONEPASS) has
been eliminated and the approach to forest view mode
redesigned. The chance of dangling children has been
eliminated and overhead reduced.
We now order processes on start_time (non-display)
and are therefore immune to any pid, ppid or tgid
anomalies when pid values wrap.
The new algorithm also accommodates any distortions
caused by the 3.3 kernel 'hidepid' provisions --
something guaranteed to produce dangling children
under the former approach.
Related References:
commit a2086dfdf6
commit cd608f462e
commit 41ed28aa5d
Signed-off-by: Jim Warner <james.warner@comcast.net>
The recent introduction of scrollable variable width
columns makes a process 'environment' a potentially
useful addition to top's displayable fields.
This commit exploits the following new library flag:
PROC_EDITENVRCVT
Signed-off-by: Jim Warner <james.warner@comcast.net>
In an effort to avoid dangling children when in forest
view mode, top defaulted to a complete rescan of every
proc_t for each child encountered.
That expense was never really cost justified and now
with the 3.3 kernel 'hidepid' provisions it no longer
can offer such protection.
With this commit, the TREE_ONEPASS define is changed
to TREE_RESCANS so as to reverse the default scan
behavior.
Signed-off-by: Jim Warner <james.warner@comcast.net>
This commit represents mostly spelling corrections
in comments. It also includes a few very minor logic
changes/relocations.
Signed-off-by: Jim Warner <james.warner@comcast.net>
This section purported to list fields in alphabetical
order, but this was not always true.
With this commit, strict ascii collating sequence is
now observed.
Signed-off-by: Jim Warner <james.warner@comcast.net>
With the introduction of intra-column scrolling, the
scroll coordinates message was enhanced to give some
hint of positioning within a scrolled column.
Rather than rebuild this somewhat costly string from
scratch with each frame, we'll now do the bulk of the
work only when column headers are constructed.
The only remaining per frame costs will then be the
addition of a few terminfo escapes and the current
Frame_maxtask count.
Signed-off-by: Jim Warner <james.warner@comcast.net>
This commit introduces horizontal scrolling within any
variable width column. Thus, an entire command line,
complete list of control groups, etc. can now be
viewed -- not just a screen width's portion.
It is activated when any variable width column:
. is (via field selection) or
. has become (via the right arrow key)
the only displayed field.
Then, the right and left arrow keys can be used in the
normal way to continue scrolling within that column.
The amount scrolled with each key press is currently
set as the normal tab stop increment of 8 characters.
Signed-off-by: Jim Warner <james.warner@comcast.net>
The library does not weed out potential duplicate PID
values when sampling with the PROC_PID flag. This was
treated as merely an inefficiency by top and safely
ignored prior to the advent of forest view mode.
Now, however, if the -p switch duplicates certain PIDs,
*and* those processes have no PPID, *and* top's forest
view mode is active or activated, then a SEGV will be
generated (and caught).
This rather obscure buglet is thus limited to pid #1
(/sbin/init) and pid #2 (kthreadd). With any other
duplicate PIDs the worse case scenario was a '?' in
place of the usual forest view artwork.
This commit silently ignores any duplicate process ids
and thereby avoids the potential segmemtation fault.
Signed-off-by: Jim Warner <james.warner@comcast.net>
All warnings where about unnecessary quoting. The scriptlet
below will tell what was wrong.
for I in ./top/top.1 ./ps/ps.1 ./*.[0-9]; do
echo "== $I warnings =="
man --warnings=all $I > /dev/null
done
This should probably be turned to 'make check' script.
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
Since its inception top has provided for monitoring
only specific process ids via the -p command line
switch. This provision has also embraced the top
process itself, even though its pid wasn't yet known.
This commit simply documents the special zero value,
which would otherwise be an invalid process id.
Signed-off-by: Jim Warner <james.warner@comcast.net>
In attempting to keep at least one task visible when
scrolling vertically, a negative task index would be
produced when pid monitoring was in effect and no
matching pid was found.
Since there were already other conditions where no
task might displayed, the faulty source line has been
removed.
Bug-Debian: http://bugs.debian.org/668335
Signed-off-by: Jim Warner <james.warner@comcast.net>
If stream status is not checked at the end of execution below problem
would not report error, or non-zero exit code. The uptime is just an
example same was true with all commands of the project.
$ uptime >&- ; echo $?
uptime: write error: Bad file descriptor
1
$ uptime >/dev/full ; echo $?
uptime: write error: No space left on device
1
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
When top introduced true line input editing, the
ability to paste keystrokes was lost. This remains
a necessary evil so that top has an opportunity to
translate cursor motion keystrokes into terminfo
escapes during line input. Motion keys themselves,
of course, can never be pasted.
If pasting ever became more important than input
editing, then native termios support should have been
available via a define called TERMIOS_ONLY. But a
recent commit, eliminating what was thought to be
obsolete logic, rendered the alternate linein()
function virtually useless.
Similar to top-3.2.8, when native termios input is
functional, these abberations can be experienced:
. cursor motion keys will appear as escapes
. excessive input can cause line wraps
. ^Z during i/p is not be honored until <Enter>
. SIGWINCH during i/p corrupts screen temporarily
In hindsight, it now seems that the ability to paste
keystrokes may indeed outweigh any shortcomings of
native termios support. This is especially true if
one is preparing to search ('L') for some lengthy
process command line contined in the clipboard.
Thus, this patch fixes the alternate linein() function
and changes TERMIOS_ONLY to TERMIO_PROXY so that top
now defaults to using native termios input. In turn,
that will restore the paste keystrokes capability.
Reference(s):
commit: 045538e01b
Reported by: sergio <mailbox@sergio.spb.ru>
Bug-Debian: http://bugs.debian.org/663334
Signed-off-by: Jim Warner <james.warner@comcast.net>
Admittedly, top referred to memory quantities in
a variety of non-standard ways. This commit brings
the program and supporting documentation into strict
compliance with IEC standard binary names.
According to wikipedia, as of 2012 this IEC standard
was still not in widespread use. However, I'm making
this change now for the anal-retentive among us.
Reference:
http://en.wikipedia.org/wiki/Megabyte
Reported by: Roman Mamedov <rm@romanrm.ru>
Bug-Debian: http://bugs.debian.org/662786
Signed-off-by: Jim Warner <james.warner@comcast.net>
These per instance warnings have been eliminated:
warning: range expressions in switch statements are non-standard
warning: padding struct to align 'winflags'
warning: dereferencing type-punned pointer will break strict-aliasing rules
These per instance warnings have not been addressed
since they simply trade one warning for another:
From:
warning: ISO C does not permit named variadic macros
warning: ISO C does not support the '%Lu' gnu_scanf format
To:
warning: anonymous variadic macros were introduced in C99
warning: ISO C90 does not support the 'll' gnu_scanf length modifier
Lastly, since all C compilers have supported use of
C++ style comments for the past 20 years, the top
program will never trade them for the often more
cumbersome C style comments simply to avoid this
once per source file warning:
warning: C++ style comments are not allowed in ISO C90
Signed-off-by: Jim Warner <james.warner@comcast.net>
Under openSUSE, old top uses additional fields for
out-of-memory reporting. As a result, under the
original approach to rcfile conversion, new top would
issue a fatal corrupt window entry message asking that
the rcfile be deleted.
This patch extends the conversion range to include
the extra openSUSE field characters. It's effective
when ./configure specifies the --enable-oomem option
which in turn defines OOMEM_ENABLE.
This commit also makes the conversion logic slightly
more forgiving. While enforcing an upper limit on the
expected number of old style field characters, amounts
less than that will be handled seemlessly.
Reference:
commit 4b98733132
Signed-off-by: Jim Warner <james.warner@comcast.net>
At one time, new top silently defaulted when an rcfile
was found to be incompatible. This is exactly what
the old top did. However, after some discussion it
was decided top should alert the user and thereby
save the system administrator some headaches.
Now, some are upset over the fatal error, proving you
can't please everybody. But in all fairness, given
the difficulty of customizing old top, any reluctance
to delete an old saved rcfile is understandable.
To ease transition to this new top, old style rcfiles
will now be honored and converted to the new format.
And if not disabled at ./configure time via CFLAGS,
a user will be warned when an old style rcfile is
about to be overwritten using the 'W' command.
Lastly, the config validation logic was enhanced to
help ensure both types of rcfile haven't been edited
manually and possibly made unuseable.
Reported-By: sergio <mailbox@sergio.spb.ru>
Bug-Debian: http://bugs.debian.org/651213
Reported-By: martin f krafft <madduck@debian.org>
Bug-Debian: http://bugs.debian.org/651863
Signed-off-by: Jim Warner <james.warner@comcast.net>
When sort column header emphasis was extended to a
monochrome screen, the ability to emphasize selections
on the Fields Management screen was lost when colors
were not being displayed.
This patch corrects that bug by using the capclr_hdr
terminfo string instead of capclr_msg.
Reference:
commit 0c6aa6af41
Signed-off-by: Jim Warner <james.warner@comcast.net>
Until the 'locate/search' provisions were added,
top avoided the need for any function prototypes
through careful source file organization. But
the addition of the find_string function required
a prototpe for task_show, lest a massive file
reorganization be undertaken.
This commit moves the actual protype out of top.h
and places it adjacent to the caller in order to
avoid a warning when top_nls.c is compiled.
References:
commit 270e8e7eeb
commit d6e6a9aa38
Signed-off-by: Jim Warner <james.warner@comcast.net>
All top.h defines were lumped together as:
'Development/Debugging defines'
This commit establishes this new category:
'Defines represented in configure.ac'
And that new category now contains OOMEM_ENABLE,
which enables the SuSE out-of-memory additions
Signed-off-by: Jim Warner <james.warner@comcast.net>
At one time the 'open_psdb_message' library call was
supported with the concept of a postponed message
which would display after top startup completed.
In turn, that required logic to strip the '\n' which
was embedded (inappropriately) in any such message.
Nowdays top treats such a returned error as fatal so
there is no need for the 'strim' function which is
being removed with this commit.
Signed-off-by: Jim Warner <james.warner@comcast.net>
We originally approached the potential problem of
% CPU distortions as unique to Nehalem type cpus.
The latest information suggests that it may have
been due to a kernel anomaly that has since been
corrected.
Yet even without such a cpu, wide disparities in
tics allocation among all available cpus have
sometimes been observed -- spikes as it were in
the normal pattern. This has happened under both
version 2.26.38-13 and 3.0.0-15 kernels.
The small amount of additional code addressing the
original problem carries very little overhead. It
is being retained to afford protection against any
future tic accounting aberrations.
In this commit, supporting programmer comments have
been divorced from any particular cpu type. Also,
another variable and manifest constant will now be
eliminated when CPU_ZEROTICS is defined.
References:
commit 02508b3d76http://www.freelists.org/post/procps/CStates-handling-new-switch,50
When the calibrate_fields function was broken up for
mainainability, an obscure regression was introduced.
For the resulting bug to affect the display, all of
the following conditions would have to be met:
. USE_X_COLHDR was not defined
. column highlighting had been turned on
. many, perhaps all, fields were displayable
. the user then typed the <End> key
. and the current sort column just happened to
be immediately to the left of the left-most
visible field
This patch corrects for that remote possibility.
Reference:
commit d0e16acf15
Signed-off-by: Jim Warner <james.warner@comcast.net>
The calibrate_fields function had grown too large and
was adversly impacting maintainence. So half of the
logic was split out into a new function.
Now, maintainence of column headers and the required
library flags is organized as follows:
. adj_geometry (calibrate_fields helper)
provides low-level support for sigwinch, memory
. build_headers (calibrate_fields helper)
constructs the headers and library flags
. calibrate_fields
establishes which fields will be displayed
( note the alpha order mentioned in a prior commit )
Signed-off-by: Jim Warner <james.warner@comcast.net>
The top program is carefully organized into sections
and those sections are carefully placed so as to avoid
the need for prototypes. *
Additionally, names of functions are carefully chosen
to maintain alphabetical order within each section.
The names of most 'helper' functions, which are always
placed immediately above the calling functions, often
only met the spirit of the alphabetical law, not the
actual letter of that law.
This commit alters the names of such helper functions
so as to mainatin strict ascii alphabetical order
within each section.
* the single exception to prototypes is find_string,
which calls the task_show function, and would have
prompted a massive reorganization.
Signed-off-by: Jim Warner <james.warner@comcast.net>
The recently added logic dealing with "missing" tics
is mutually exclusive with logic associated with a
define called CPU_ZEROTICS.
This commit expands the use of that define to exclude
such Nehalem logic as appropriate.
It also extends programmer notes in top.h to include
an attribution for initiating the topic of potential
Nehalem type % CPU distortions, acknowledging:
Jaromir Capik, <jcapik@redhat.com>
References
commit ce1410a51a
commit 9e7dd43ab7
commit a9041a5526
The mem and swap lines have enough room to show eight significant
digits, so switch to showing MB when >=100MB, not >=10MB.
The extra detail is valuable; it should not be elided.
Signed-off-by: James Cloos <cloos@jhcloos.com>
Signed-off-by: Jim Warner <james.warner@comcast.net>
Due to a poorly constructed temporary fprintf
used during development, an earlier commit went
a little too far in its computations. The net
result was the code looked nice but actually
accomplished nothing.
It is the /proc/stat line 1 (summary line)
whose tics must be used in establishing the
threshold boundary. And that calculation
need be performed just once per frame.
This commit ensures one threshold calculation
per delay interval no matter how many cpus
are ultimately displayed.
It also corrects scalability by factoring in
the total number of online processors.
Reference:
commit 9e7dd43ab7
Along the way to width override support (-w switch),
this top began clearing the screen far more often
than his predecessor. In fact, it happend with each
user keystroke.
This commit dramatically reduces those occurances.
The screen will now be cleared only when an actual
SIGWINCH is received.
Thanks for identifying this flaw belongs to:
James Cloos, cloos@jhcloos.com
References:
http://www.freelists.org/post/procps/Merge-request
Blame: c2dcbef482
Author: Jim Warner <james.warner@comcast.net>
Date: Thu May 26 11:33:32 2011 +0200
subject: added output width/height override support to top, + misc