const packagelist::infotype packagelist::helpinfos[]= {
  { itr_nonrecursive,  itd_mainwelcome      },
  { itr_recursive,     itd_recurwelcome     },
  { 0,                 itd_keys             },
  { 0,                 itd_explaindisplay   },
  { 0,                 0                    }
};

int packagelist::itr_nonrecursive() { return !recursive; }

void packagelist::itd_mainwelcome() {
  whatinfovb("main welcome page");

  varbuf vb;
  vb("This is dselect's main package listing screen.");
  if (!readwrite) vb("  (read-only access.)");
  vb("\n\n"
     "Please press `");
  vb(bindings->find("help"));
  vb("' repeatedly to show more help, including the list of "
     "keystrokes and an explanation of the display; use `");
  vb(bindings->find("iscrollon"));
  vb("' and `");
  vb(bindings->find("iscrollback"));
  vb("' to scroll this help screen.  Press `");
  vb(bindings->find("info"));
  vb("' repeatedly to see more information about the highlighted package(s).\n"
     "\n");
  if (readwrite) {
    vb("Move the highlight and use `");
    vb(bindings->find("select"));
    vb("' and `");
    vb(bindings->find("deselect"));
    vb("' to select and deselect packages for "
       "installation.  Press `");
    vb(bindings->find("quit"));
    vb("' to confirm your changes and quit, or `");
    vb(bindings->find("abortnocheck"));
    vb("' to abort without making changes.\n"
       "\n"
       "Deselecting a package that is currently "
       "installed will arrange for it to be deinstalled later.  If you "
       "select a package for purging its configuration files will be "
       "deleted when the package is; usually they are kept.\n");
  } else {
    vb("You do not have read/write access to the package administration "
       "area, so you may only examine the state of packages.\n");
  }
  wordwrapinfo(0,vb.string());
}

void packagelist::itd_explaindisplay() {
  whatinfovb("explanation of the display");

  varbuf vb;
  vb("The top half of the screen shows a list of packages.  For each "
     "package its status (explained in more detail below), class, "
     "section, name and a summary of its description is shown.\n"
     "\n"
     "In the middle of the screen is a status line containing a description "
     "of the status of the currently highlighted package (or a description "
     "of which packages are highlighted if this is more than one package).\n"
     "\n"
     "The bottom half of the screen is used to display more extended "
     "information about the highlighed package(s), and for help displays "
     "like this one.\n"
     "\n"
     "The four characters at the start of each package's entry in the list "
     "show its status: Error, Installed, Old, Wanted.\n"
     "\n"
     "`Wanted' is whether it is currently "
     "selected or not (ie, its desired state as currently being edited); "
     "`Old', immediately to the left of that, gives the desired state before "
     "this package list was entered, if different (or a space if not)."
     "\n"
     "`Installed' shows the package's current actual state on "
     "the system; the `Error' column is used to mark packages for which "
     "installation or removal errors have occurred.\n");
  wordwrapinfo(0,vb.string());
}

void packagelist::itd_recurwelcome() {
  whatinfovb("recursive package listing welcome page");
  
  varbuf vb;
  vb("Some of the packages you have selected require or recommend "
     "the installation of other packages you haven't selected, or "
     "some of them conflict with packages you have selected.\n"
     "Details of problems for each package are available by pressing `");
  vb(bindings->find("info"));
  vb("'.\n"
     "This sub-list of packages is to allow you to resolve these "
     "dependencies and conflicts.  You may accept my suggestions "
     "about which related packages to select or deselect by pressing `");
  vb(bindings->find("quitcheck"));
  vb("'.\n"
     "\n"
     "Alternatively, you can edit the setup I have suggested, or use `");
  vb(bindings->find("revertdirect"));
  vb("' to reject my suggestions, before using `");
  vb(bindings->find("quitcheck"));
  vb("'.\n"
     "\n"
     "For a list of the keys available, consult the keymap "
     "help screen (available by pressing `");
  vb(bindings->find("help"));
  vb("'); see the manual for detailed information.\n"
     "\n"
     "If you wish to replace a package on which many others depend with "
     "a conflicting one you'll probably find it easier to try selecting "
     "the new one rather than deselecting the old one first, as doing "
     "the latter will cause me to suggest deselecting all that depend on it.");
  wordwrapinfo(0,vb.string());
}

void methodlist::kd_info() {
  showinghelp=0;
  redrawinfo();
}

void methodlist::kd_help() {
  if (showinghelp) ifhelpthenkeys= !ifhelpthenkeys;
  showinghelp=1;
  redrawinfo();
}

void methodlist::itd_welcome() {
  whatinfovb("method selection welcome page");

  varbuf vb;
  vb("This is dselect's access method selection screen.");
  vb("\n\n"
     "Please press `");
  vb(bindings->find("help"));
  vb("' to show more help; in particular, you should read the list of "
     "keystrokes; use `");
  vb(bindings->find("iscrollon"));
  vb("' and `");
  vb(bindings->find("iscrollback"));
  vb("' to scroll this help screen.  Press `");
  vb(bindings->find("info"));
  vb("' to see more information about the highlighted method.\n"
     "\n");
  vb("Move the highlight and use `");
  vb(bindings->find("select-and-quit"));
  vb("' to select the highlighted method.  Press `");
  vb(bindings->find("abort"));
  vb("' to abort without changing the access method.\n"
     "\n"
     "When you have selected the access method you will "
     "be prompted for the information it requires to do the "
     "installation.\n");
  wordwrapinfo(0,vb.string());
}

  if (showinghelp)
    if (ifhelpthenkeys)
      itd_keys();
    else
      itd_welcome();
  else

