|This code must corrctly handle lots of picky little details to meet
|the Unix98 standard while simultaneously being as compatible as
|possible with the original Linux ps. Don't "fix" something without
|considering the impact on all the special-case code. For example,
|the "tty" format _must_ use "TT" as the header, even though the SysV
|output formats _must_ use "TTY".
|display.c main(), debug code, iterates over processes
|escape.c Does stuff like \202 and < to command and environment.
|global.c Data + code to init it.
|help.c Help message.
|output.c Giant tables and lots of output functions.
|parser.c Initial command parsing.
|select.c want_this_proc() checks a process against flags & lists
|sortformat.c Parses sort & format specifier lists. Picks output format.
|stacktrace.c Debug code, not normally used.
|../proc/* Library used to gather data.
|regression Regression tests that ought to be run.
|common.h Lots of interesting stuff.
|p Script used to test ps when the library is not installed.
|utf Empty file used to test "ps ut?" unmangling behavior.
|ps.1 Man page.
|Whatever you do, don't trust the Makefiles. They are severely broken.
|You can touch top.h and top won't be recompiled, or you can change
|library files and discover that the library and programs won't be
|Unless the personality forces BSD parsing, parser.c tries to parse the
|command line as a mixed BSD+SysV+Gnu mess. On failure, BSD parsing is
|attempted. If BSD parsing fails _after_ SysV parsing has been attempted,
|the error message comes from the original SysV parse.
|Control goes to sortformat.c, which must pick apart ambiguous options
|like "O". Failure can reset the whole program and set PER_FORCE_BSD,
|which means a second trip through parser.c and sortformat.c.
|The choice of output format happens in sortformat.c. There is a switch()
|with all the valid format_flags combinations. The SysV and default
|options are NULL (unless overridden by personality), which causes a
|trip through SysV output format generation hackery. Note that the
|default format always goes through there, even if it is for BSD.
|Formats that came from the switch() (generally BSD, plus overrides)
|get mangled a bit to support various SysV output modifiers.