/** * boardtool.c * The Board Control Tool * for the admtool * Shaydz 2 Apr '00 */ #include <board.h> #include <colors.h> inherit COMMAND_BASE; private mapping return_mapping = ([ ]); private string main_menu_template = @END ------------------------------------------------------------------------- %s ------------------------------------------------------------------------- %sCommand Status%s [1] Create NEW Board %s [2] Delete Board %s [3] List Boards %s END; private string main_prompt = "Enter your command [1-3], or [Q] to quit: "; private string main_prompt2 = "Enter your command [1-3], [B] to go back, or [Q] to quit: "; // Function prototypes. int cmd(string args); private void get_command( string str ); private void create_board(); private void create_board2( string str ); private void create_board3( string str, string board ); private void create_board4( string str, string board, int priv, string acc ); private void delete_board(); private void delete_board2( string str ); private void delete_board3( string str, string board ); private void list_boards(); private void display_menu() { string title, s1, s2, s3; title = sprintf("%s%|72s%s", YELLOW, mud_name()+" Board Control " "Tool v1.5", RESET ); s1 = s2 = s3 = RED+"Unavailable"+RESET; if( adminp(TP) ) s1 = s2 = s3 = GREEN+"Available"+RESET; tell_object( TP, sprintf( main_menu_template, title, BOLD, RESET, s1, s2, s3 ) ); } /* display_menu() */ private void do_prompt() { tell_object( TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2 ); input_to( (: get_command :) ); } /* do_prompt() */ private void create_board() { tell_object( TP, "Enter the name of the NEW board: "); input_to( (: create_board2 :) ); } /* create_board() */ private void create_board2( string str ) { if( !str || str == "") return do_prompt(); str = lower_case(str); if( BOARD_H->is_board(str) ) { tell_object( TP, "A board called "+CAP(str)+" already exists.\n"); return do_prompt(); } tell_object( TP, "Is "+str+" to be an [a]dmin only, [l]ord only " "or [n]ormal access board [a|l|n] : "); input_to( (: create_board3( $1, $(str) ) :) ); } /* create_board2() */ private void create_board3( string str, string board ) { string acc; int priv; if( !str || str == "") return do_prompt(); switch( lower_case(str) ) { case "n" : acc = "a normal access"; priv = B_PRIV_NORMAL; break; case "a" : acc = "an admin only"; priv = B_PRIV_ACCESS_ADMIN; break; case "l" : acc = "a lord only"; priv = B_PRIV_ACCESS_RESTRICTED; break; default: tell_object( TP, "Is "+board+" to be an [a]dmin only, [l]ord only " "or [n]ormal access board [a|l|n] : "); input_to( (: create_board3($1, $(board)) :) ); return; } tell_object( TP, "Are you sure you wish to create "+acc+" board " "called "+CAP(board)+"? [Y|N] : "); input_to( (: create_board4( $1, $(board), $(priv), $(acc) ) :) ); } /* create_board3() */ private void create_board4( string str, string board, int priv, string acc ) { string old; if( !str || lower_case(str) != "y") return do_prompt(); old = geteuid(); seteuid(geteuid(TP)); if( BOARD_H->create_board( board, priv ) ) tell_object( TP, GREEN+"\nThe board "+CAP(board)+" has been created " "as "+acc+" board.\n\n"+RESET ); else tell_object( TP, RED+"\nFailed to create the board '"+ CAP(board)+"'.\n\n"+RESET ); seteuid(old); return do_prompt(); } /* create_board4() */ private void delete_board() { tell_object( TP, "Enter the name of the board to DELETE: "); input_to( (: delete_board2 :) ); } /* delete_board() */ private void delete_board2( string str ) { if( !str || str == "") return do_prompt(); if( !BOARD_H->is_board(str) ) { tell_object( TP, "A board called "+CAP(str)+" does not exist.\n"); return do_prompt(); } tell_object( TP, "Are you sure you wish to delete the "+ CAP(str)+" board? : "); input_to( (: delete_board3( $1, $(str) ) :) ); } /* delete_board2() */ private void delete_board3( string str, string board ) { string old; if( !str || str == "") return do_prompt(); str = lower_case(str); if( str == "y" || str == "yes") { old = geteuid(); seteuid(geteuid(TP)); if( BOARD_H->delete_board(board) ) tell_object( TP, GREEN+"\nThe board "+CAP(board)+" has been " "deleted.\n\n"+RESET ); else tell_object( TP, RED+"\nFailed to delete the board "+ CAP(board)+".\n\n"+RESET ); seteuid(old); return do_prompt(); } tell_object( TP, RED+"\nThe board "+CAP(board)+" has NOT been " "deleted.\n\n"+RESET ); return do_prompt(); } /* delete_board3() */ private void list_boards() { tell_object( TP, "\n"+create_table( ({"Boards", "board"}), map( BOARD_H->query_boards(), (: CAP($1) :) ), 0 ) ); return do_prompt(); } /* list_boards() */ private void get_command( string str ) { if( !str ) { display_menu(); return do_prompt(); } switch( str ) { case "1": if( !adminp(TP) ) { tell_object( TP, "You don't have the power to do that.\n"); return do_prompt(); } create_board(); break; case "2": if( !adminp(TP) ) { tell_object( TP, "You don't have the power to do that.\n"); return do_prompt(); } delete_board(); break; case "3": if( !adminp(TP) ) { tell_object( TP, "You don't have the power to do that.\n"); return do_prompt(); } list_boards(); break; case "B": case "b": if( !return_mapping[TP] ) { display_menu(); return do_prompt(); } return_mapping[TP]->cmd(""); map_delete( return_mapping, TP ); break; case "Q": case "q": map_delete( return_mapping, TP ); break; default: display_menu(); return do_prompt(); } } /* get_command() */ /** @ignore yes */ int cmd( string str ) { if( file_name(PO) == "/secure/cmds/creator/admtools") return_mapping[TP] = PO; display_menu(); do_prompt(); return 1; } /* cmd() */