tmi2/
tmi2/bin/
tmi2/etc/
tmi2/lib/
tmi2/lib/adm/
tmi2/lib/adm/daemons/languages/
tmi2/lib/adm/daemons/network/I3/
tmi2/lib/adm/daemons/virtual/template/
tmi2/lib/adm/obj/master/
tmi2/lib/adm/priv/
tmi2/lib/adm/shell/
tmi2/lib/adm/tmp/
tmi2/lib/cmds/
tmi2/lib/d/
tmi2/lib/d/Conf/
tmi2/lib/d/Conf/adm/
tmi2/lib/d/Conf/boards/
tmi2/lib/d/Conf/cmds/
tmi2/lib/d/Conf/data/
tmi2/lib/d/Conf/logs/
tmi2/lib/d/Conf/obj/
tmi2/lib/d/Conf/text/help/
tmi2/lib/d/Fooland/adm/
tmi2/lib/d/Fooland/data/
tmi2/lib/d/Fooland/data/attic/
tmi2/lib/d/Fooland/items/
tmi2/lib/d/TMI/
tmi2/lib/d/TMI/adm/
tmi2/lib/d/TMI/boards/
tmi2/lib/d/TMI/data/
tmi2/lib/d/TMI/rooms/
tmi2/lib/d/grid/
tmi2/lib/d/grid/adm/
tmi2/lib/d/grid/data/
tmi2/lib/d/std/
tmi2/lib/d/std/adm/
tmi2/lib/data/adm/
tmi2/lib/data/adm/daemons/
tmi2/lib/data/adm/daemons/doc_d/
tmi2/lib/data/adm/daemons/emoted/
tmi2/lib/data/adm/daemons/network/http/
tmi2/lib/data/adm/daemons/network/services/mail_q/
tmi2/lib/data/adm/daemons/network/smtp/
tmi2/lib/data/adm/daemons/news/archives/
tmi2/lib/data/attic/connection/
tmi2/lib/data/attic/user/
tmi2/lib/data/std/connection/b/
tmi2/lib/data/std/connection/l/
tmi2/lib/data/std/user/a/
tmi2/lib/data/std/user/b/
tmi2/lib/data/std/user/d/
tmi2/lib/data/std/user/f/
tmi2/lib/data/std/user/l/
tmi2/lib/data/std/user/x/
tmi2/lib/data/u/d/dm/working/doc_d/
tmi2/lib/data/u/l/leto/doc_d/
tmi2/lib/data/u/l/leto/smtp/
tmi2/lib/doc/
tmi2/lib/doc/driverdoc/applies/
tmi2/lib/doc/driverdoc/concepts/
tmi2/lib/doc/driverdoc/driver/
tmi2/lib/doc/driverdoc/efuns/arrays/
tmi2/lib/doc/driverdoc/efuns/buffers/
tmi2/lib/doc/driverdoc/efuns/compile/
tmi2/lib/doc/driverdoc/efuns/ed/
tmi2/lib/doc/driverdoc/efuns/floats/
tmi2/lib/doc/driverdoc/efuns/functions/
tmi2/lib/doc/driverdoc/efuns/general/
tmi2/lib/doc/driverdoc/efuns/numbers/
tmi2/lib/doc/driverdoc/efuns/parsing/
tmi2/lib/doc/driverdoc/lpc/constructs/
tmi2/lib/doc/driverdoc/lpc/preprocessor/
tmi2/lib/doc/driverdoc/lpc/types/
tmi2/lib/doc/driverdoc/platforms/
tmi2/lib/doc/mudlib/
tmi2/lib/ftp/
tmi2/lib/log/
tmi2/lib/obj/net/
tmi2/lib/obj/shells/
tmi2/lib/std/board/
tmi2/lib/std/body/
tmi2/lib/std/fun/
tmi2/lib/std/living/
tmi2/lib/std/object/
tmi2/lib/std/shop/
tmi2/lib/std/socket/
tmi2/lib/std/virtual/
tmi2/lib/student/
tmi2/lib/student/kalypso/
tmi2/lib/student/kalypso/armor/
tmi2/lib/student/kalypso/rooms/
tmi2/lib/student/kalypso/weapons/
tmi2/lib/u/l/leto/
tmi2/lib/u/l/leto/cmds/
tmi2/lib/www/errors/
tmi2/lib/www/gateways/
tmi2/lib/www/images/
tmi2/old/
tmi2/v21.7a10/
tmi2/v21.7a10/ChangeLog.old/
tmi2/v21.7a10/compat/simuls/
tmi2/v21.7a10/include/
tmi2/v21.7a10/testsuite/
tmi2/v21.7a10/testsuite/clone/
tmi2/v21.7a10/testsuite/command/
tmi2/v21.7a10/testsuite/data/
tmi2/v21.7a10/testsuite/etc/
tmi2/v21.7a10/testsuite/include/
tmi2/v21.7a10/testsuite/inherit/
tmi2/v21.7a10/testsuite/inherit/master/
tmi2/v21.7a10/testsuite/log/
tmi2/v21.7a10/testsuite/u/
tmi2/v21.7a10/tmp/
 
//	File	:  /adm/daemons/mand.c
//	Creator	:  Jubal@TMI  (10/20/91)
//	Updated	:  Watcher@TMI  (4/11/93)
//
//	This man daemon emulates the UNIX man system.


#include <config.h>
#include <man.h>
#include <uid.h>

varargs string *find_manpage(string root, mixed arg, string name);


/* valid_man_read() returns 1 if this_player() is allowed to read the
        manpage given as the argument.  This module is mudlib dependent,
        and gods should change it to reflect the local levels of manpage
        access.  The default is to allow access to any manpage by any
        player.
*/

int valid_man_read( string *manentry ) {
        return 1;
}

varargs int man( mixed arg, string name ) {
	string *manent;

	seteuid(ROOT_UID);
	manent = find_manpage (arg, name) ;
	if( manent )
	{
		if( valid_man_read( manent ) )
		{

			this_player()->more(manent[2], 0 ,1);
		}
		else
			write("Man: Permission denied.\n");
	}
	else
	{
		if( name )
			write("Man: " + name + " not found in " + arg + 
			      " section.\n");
		else
			return 0 ;
	}
	return 1 ;
}



/* find_manpage() is a function which is inherited by the manpage
        daemons.
*/

varargs string *find_manpage( mixed arg, string name ) {
        int i;
        string *rv;
	string filetype ;

        rv = allocate( 3 );

        /* check if we are searching in a particular directory */
        if( name )
        {
                rv[0] = arg; rv[1] = name;
			switch (arg) {
				case "efuns" : { filetype = "3" ; break ; }
				case "applies" : { filetype = "4" ; break ; }
				case "misc" : { filetype = "5" ; break; }
				case "simul_efuns" :  { filetype = "2" ; break;}
				case "lfuns" : { filetype = "l" ; break ; }
			}
                rv[2] = man_root + "/" + arg +
                        "/" + name + "." + filetype;
                if( file_size( rv[2] ) <= 0 ) rv = NULL;
        }
        else
        {
                rv[1] = name = arg;
                for( i=0 ; i<sizeof(MAN_DIRLIST) ; i++ )
                {
                        rv[0] = arg = MAN_DIRLIST[i];
			switch (arg) {
				case "efuns" : { filetype = "3" ; break ; }
				case "applies" : { filetype = "4" ; break ; }
				case "misc" : { filetype = "5" ; break ; }
				case "simul_efuns" :  { filetype = "2" ; break;}
				case "lfuns" : { filetype = "l" ; break ; }
			}
                        rv[2] = man_root + "/" + arg +
                                "/" + name + "." + filetype;
                        if( file_size( rv[2] ) > 0 ) break;
                }
                if( i == sizeof( MAN_DIRLIST ) ) rv = NULL;
        }
        return rv;
}
/* EOF */