Interface to the menu manager
The discussion below is largely academic: you won't need to call the menu manager from your own modules (it calls them) and you definitely shouldn't include this header file. The API already defines enough menuman-related functionality for your modules. I'll still include the description, in the hope that it'll be useful at some later stage.The menu manager was inspired by the corresponding subsystem in the Major BBS. Of course, Major's menuman was created for an entirely different environment. Megistos' Menu Manager is a more versatile thingy, but the experienced Major programmer may notice behavioural similarities.
The menu manager is a `meta-module': it behaves as the glue that binds modules together. It handles all menuing outside modules. The operator defines a number of pages. There are four types of pages:
- Menu pages
- These offer menus to the user. Each of the menu's options take the user to another page.
- File pages
- These pages print out specific files to the user. Different files can be specified for each supported language. Also, depending on the user's terminal settings (e.g. whether their terminal has VT-100/ANSI graphics capabilities), different files may be printed. All this is implemented using file suffixes. Intelligent fallbacks are supplied. Once the file has been printed, the user is returned to the Menu page they came from.
- Command execution pages
- Also known as `exec' pages. These execute a specified UNIX command when the user accesses them. Commands may be interactive or not. While the user is executing the command, he appears to be busy and no inactivity timeouts are enforced.
- Module execution pages
- Also known as `run' pages. These pass interactive control to a BBS module to handle further user input. Control passes to the calling page when the module is finished. Each page may specify a string of concatenated commands to be passed to the module. In this way, different pages may access different parts of a module, effectively constituting different entry points.
Pages have three basic security features built into them. They can be made available to only one user class; access may be limited to users who possess a key; and options may be hidden from view, even if they are available to a user.
Each page has its own multilingual description used in statistics and when the user issues the /# global command. Individual per-page credit consumption rates may also be applied. Finally, each page has its own unique name. The names may be used by the user for quick, random access to pages using the /go global command.
Original banner, legalese and change history follow.
***************************************************************************** ** ** ** FILE: menuman.h ** ** AUTHORS: Alexios ** ** REVISION: A, July 94 ** ** PURPOSE: Define the page structures used by the menuman ** ** NOTES: ** ** LEGALESE: ** ** ** ** This program is free software; you can redistribute it and/or modify ** ** it under the terms of the GNU General Public License as published by ** ** the Free Software Foundation; either version 2 of the License, or (at ** ** your option) any later version. ** ** ** ** This program is distributed in the hope that it will be useful, but ** ** WITHOUT ANY WARRANTY; without even the implied warranty of ** ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ** ** General Public License for more details. ** ** ** ** You should have received a copy of the GNU General Public License ** ** along with this program; if not, write to the Free Software ** ** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ** ** ** ***************************************************************************** * * $Id: menuman.h,v 1.3 2001/04/22 14:49:04 alexios Exp $ * * $Log: menuman.h,v $ * Revision 1.3 2001/04/22 14:49:04 alexios * Merged in leftover 0.99.2 changes and additional bug fixes. * * Revision 0.2 1997/11/06 20:03:39 alexios * Added GPL legalese to the top of this file. * * Revision 0.1 1997/08/26 15:48:53 alexios * First registered revision. Adequate. * * *