
Problem - A "problem" database manager

Problem is a database manager for bug reports and such, meant to be
used in a UNIX environment.  It is written in C++; uses the GNU
Database Management Library (GDBM) for low-level database operations;
and the termcap(3) library for screen comtrol.  An X Windows interface
is being developed.  The basic idea is to provide a central front-end
for managing the various databases of bugs and miscreant behaviour
that a large UNIX site might be interested in tracking, and
facilitating the sharing of this information amongst all interested
parties.

On startup, a list of problem areas is displayed:

The 4 Areas:

  1 apf
  2 aix370
  3 aixws
  4 dbx

This is called the area window.  Upon entering a number corresponding
to the area of interest, the following screen is displayed:

Commands

  l  -- log new problem
  a  -- append to a problem
  c  -- close a problem
  e  -- examine a problem
  v  -- view problem summaries
  s  -- subscribe to this problem area
  u  -- unsubscribe from this problem area
  k  -- keyword search over problem headers
  K  -- keyword search over problem headers and data
  M  -- modify keyword field
  d  -- delete a problem from the database
  r  -- reorganize the database
  R  -- reopen a closed problem
  q  -- quit

Here you are expected to type a single letter symbolizing the
command of interest.

  l  -- log new problem

Choosing `l', you'll immediately see a screen of the form:

Area      networking
Logger    mjlx
Reporter
Logged    Mon Jun 29 08:56:27 1992
Updated   Mon Jun 29 08:56:27 1992
Keywords
Summary
Status    open
Site
Severity
Problem #

This is known as the problem header.  Here, Reporter is the user name
or real name of the person who reported the problem;  this needn't be
the same as Logger.  Severity, which runs from 4 (the lowest) to 1
(the highest) is meant to be some indication of the severity of the
problem.  The remaining fields have their obvious meaning.

In the above, "problem" has filled in the fields that it can and will
prompt for the others.  It will fill in the Problem # field, if and
when the problem is really logged, with a positive number unique
across all problem areas.  There is no limit to the amount of text
that can be stored in each field.  After filling out this header,
"problem" will invoke the editor in the user's EDITOR environment
variable (or "vi" if not defined), from which the user is expected to
enter the text of the problem.  When you exit from your editor, you'll
be prompted as to whether or not you really want to log the problem.
Typing `y' logs the problem while typing `n' takes you back to the
command window.

  a  -- append to a problem

Here you'll be prompted for the problem # of an existing problem.  If
a problem of that number actually exists, you'll immediately be
brought up into your editor to enter the text of your append.  When you
exit from your editor, you'll be prompted as to whether or not you
really wish to make this append.

  c  -- close a problem

Here you'll be prompted for the problem # of an existing problem.  If
a problem of that number actually exists, you'll immediately be
brought up into your editor to enter the text of your close.  Closing
a problem changes the Status field of the problem entry from "open" to
"closed"; it is not removed from the database.  It is meant to be an
indication that the problem has been solved.  Only the original logger
of the problem, or the "problem" administrator can close a problem.

  e  -- examine a problem

You will be prompted for the problem # of an existing problem.  If
that problem exists you'll be placed into the pager "less" with a copy
of the complete problem header and data of that problem.  This way you
can then page through the problem and do any thing else you might do
from a pager such as saving a copy of the problem or only a portion of
it to another file.

  v  -- view problem summaries

Typing `v' a list consisting of selected parts of each problem header
is displayed on the screen, one per line:

77 open 1 Jun 28 16:37:09 1992 calloc prototyped wrong
73 open 2 Jun 26 06:16:03 1992 Fortran code gets seg fault
18 closed May 30 12:51:34 1992 <stdarg.h> is broken
53 open 3 May  6 13:45:23 1992 optimization slows down c!
16 open 3 Apr 26 09:54:49 1992 why don't we have a Pascal compiler?

This is called a view window.  The fields displayed are: Problem #,
Status, Severity, if Status is "open", Updated and Summary.  The lines
are sorted: "open" before "closed"; severity order 1 to 4; and then in
most recently updated to least recently updated order.  It the text of
a line is longer than the screen width the line is truncated and a `!'
is place in the final position in the line.  The cursor is initially
placed in the first column of the first line.  The problem list can be
perused using the screen and cursor motion commands of vi and emacs.

The line the cursor is on is called the current line.  If the current
line is longer than the screen width it will be shifted left so that
the final screenwidth characters are visible.  In this way, by moving
the cursor on and off of a line, it is possible to read the complete
line, provided that the length of the line is not more than twice the
width of your screen.  Most of the commands in the command window are
accessible from here and apply to the problem in the current line.
For example, typing `a' will append to the problem in the current
line.

Typing `H' or `?' from any of the three main windows in "problem" will
display a screen of help commands called the help screen.  The help
screen from within the view window is:

 CURSOR MOVEMENT COMMANDS:

    ?  H               Display this help.
    q                  quit.
    j  n  ^N  SPC  CR  Forward  one line.
    DOWN_ARROW_KEY             "        .
    k  p  ^P  ^Y       Backward one line.
    UP_ARROW_KEY               "        .
    ^F  ^V             Forward  one window.
    b  ^B  ESC-V       Backward one window.
    ^D                 Forward  one half-window.
    ^U                 Backward one half-window.
    <                  Go to first line of listing.
    >                  Go to last line of listing.

 COMMANDS WHICH OPERATE ON THE CURRENT PROBLEM:

    a                  Append to current problem.
    c                  Close current problem.
    d                  Delete current problem.
    e m v              Examine, View, or "more" current problem.
    m                  Modify keyword field.
    r                  Reorganize the database.
    R                  Reopen a closed problem.
    s                  Save problem listing to a file - prompts for filename.

 MISCELLANEOUS COMMANDS:

    !                  starts up a shell.
    ! cmd              executes a shell command - prompts for command.
    !!                 reexecutes previous shell command.
    ^L                 Repaint screen.
    CR                 Signifies end-of-response when in a prompt.
    V                  Print out version string.

  s  -- subscribe to this problem area

You will be added to a list of interested parties for this area.  Each
time a change is made to the database for this area, every person on
the mailing list receives mail indicating the change that was made.
In this way, it is easy to keep track of problems without having to
regular read all the problems to see if anything new has happened.

  u  -- unsubscribe from this problem area

You will be removed from the interested parties mailing list for this
area.

  k  -- keyword search over problem headers

You will be prompted for a regular expression which will then be used
to search over the problem headers.  If there are any matches, the
summary lines of each of the problems which matched will be displayed
in a view window.  For example, if you wished to peruse only open
problems, you could search for "open" whereupon you would be put in a
view window consisting of only the open problems in this area.

  K  -- keyword search over problem headers and data

This is similar the the `k' command except that the regular expression
search is over the complete problem header and data for each problem.

  M  -- modify keyword field

This command is useful if you want to modify the keyword field.

  d  -- delete a problem from the database

This command allows the database administrator to delete problems from
the database for this area.  The problem data is irretrievably removed
from the database.

  r  -- reorganize the database

This is an administrative command which can be used after many appends and
deletions have been made in the database to shrink it down and make
accessing it more efficient.  It corresponds directly to the GDBM
reorganize command.

  R  -- reopen a closed problem

A closed problem can be reopened with this command.

  q  -- quit

This quits from the command window and returns you to the area window.
