NetBSD/bin/ps/ps.h
apb d9463bc15b * When all columns are given null customised headers, the blank header
line is not printed at all.  This is specified in P1003.1-2004
  (SUSv3), and is useful.

* Customised headers may contain embedded space, commas and equals
  signs.  To specify multiple customised headers, use multiple -o or -O
  options.  This is specified (for "-o", not for "-O") in P1003.1-2004
  (SUSv3), and is useful.

* When a column is given a null (blank) customised header, it keeps its
  default minimum width.  This is specified in P1003.1-2004 (SUSv3), and
  seems harmless.

* Fix a bug that made it impossible to print the same keyword multiple
  times, with different customised headers each time.  (Previously, the
  last customised header was used for all instances of the keyword.)

* Make the behaviour of "-O" more useful.  The first -O option adds
  the default keywords only if there have not yet been any formatting
  options, and multiple -O options now insert their keywords in adjacent
  positions.  Now {ps -j -O %cpu} is like {ps -j} with one extra column;
  Previously, it would have had all the columns implied by "-j", plus
  all the default columns, plus the extra column specified by "-O".

* Convert from home-grown linked lists to SIMPLEQ lists.

Discussed in tech-userlevel.
2006-10-02 17:54:35 +00:00

95 lines
3.6 KiB
C

/* $NetBSD: ps.h,v 1.26 2006/10/02 17:54:35 apb Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* @(#)ps.h 8.1 (Berkeley) 5/31/93
*/
#include <sys/queue.h>
#define UNLIMITED 0 /* unlimited terminal width */
#define PRINTMODE 0 /* print values */
#define WIDTHMODE 1 /* determine width of column */
enum type {
UNSPECIFIED,
CHAR, UCHAR, SHORT, USHORT, INT, UINT, LONG, ULONG,
KPTR, KPTR24, INT32, UINT32, SIGLIST, INT64, UINT64,
TIMEVAL, CPUTIME, PCPU, VSIZE
};
/* Variables. */
typedef SIMPLEQ_HEAD(varlist, varent) VARLIST;
typedef struct varent {
SIMPLEQ_ENTRY(varent) next;
struct var *var;
} VARENT;
typedef struct var {
const char *name; /* name(s) of variable */
const char *header; /* header, possibly changed from default */
#define COMM 0x01 /* needs exec arguments and environment (XXX) */
#define ARGV0 0x02 /* only print argv[0] */
#define LJUST 0x04 /* left adjust on output (trailing blanks) */
#define INF127 0x08 /* 127 = infinity: if > 127, print 127. */
#define LWP 0x10 /* dispatch to kinfo_lwp routine */
#define UAREA 0x20 /* need to check p_uvalid */
#define ALIAS 0x40 /* entry is alias for 'header' */
u_int flag;
/* output routine */
void (*oproc)(void *, struct varent *, int);
/*
* The following (optional) elements are hooks for passing information
* to the generic output routine: pvar (that which prints simple
* elements from struct kinfo_proc2).
*/
int off; /* offset in structure */
enum type type; /* type of element */
const char *fmt; /* printf format */
/* current longest element */
int width; /* printing width */
int64_t longestp; /* longest positive signed value */
int64_t longestn; /* longest negative signed value */
u_int64_t longestu; /* longest unsigned value */
double longestpd; /* longest positive double */
double longestnd; /* longest negative double */
} VAR;
#define OUTPUT(vent, ki, kl, mode) do { \
if ((vent)->var->flag & LWP) \
((vent)->var->oproc)((void *)(kl), (vent), (mode)); \
else \
((vent)->var->oproc)((void *)(ki), (vent), (mode)); \
} while (/*CONSTCOND*/ 0)
#include "extern.h"