gurba-0.40/
gurba-0.40/bin/
gurba-0.40/lib/
gurba-0.40/lib/cmds/guild/fighter/
gurba-0.40/lib/cmds/monster/
gurba-0.40/lib/cmds/race/catfolk/
gurba-0.40/lib/cmds/race/dwarf/
gurba-0.40/lib/cmds/verb/
gurba-0.40/lib/daemons/data/
gurba-0.40/lib/data/boards/
gurba-0.40/lib/data/messages/
gurba-0.40/lib/data/players/
gurba-0.40/lib/design/
gurba-0.40/lib/domains/gurba/
gurba-0.40/lib/domains/gurba/guilds/fighter/
gurba-0.40/lib/domains/gurba/monsters/
gurba-0.40/lib/domains/gurba/objects/armor/
gurba-0.40/lib/domains/gurba/objects/clothing/
gurba-0.40/lib/domains/gurba/objects/weapons/
gurba-0.40/lib/domains/gurba/vendors/
gurba-0.40/lib/kernel/cmds/admin/
gurba-0.40/lib/kernel/daemons/
gurba-0.40/lib/kernel/include/
gurba-0.40/lib/kernel/lib/
gurba-0.40/lib/kernel/net/
gurba-0.40/lib/kernel/sys/
gurba-0.40/lib/logs/
gurba-0.40/lib/pub/
gurba-0.40/lib/std/modules/languages/
gurba-0.40/lib/std/races/
gurba-0.40/lib/std/races/monsters/
gurba-0.40/lib/wiz/fudge/
gurba-0.40/lib/wiz/spud/
gurba-0.40/src/host/beos/
gurba-0.40/src/host/pc/res/
gurba-0.40/src/kfun/
gurba-0.40/src/lpc/
gurba-0.40/src/parser/
gurba-0.40/tmp/
inherit OBJECT;

string board_id;
mixed *msgs;

void add_message( string from, string subj, string msg );

void set_board_id( string str ) {
  board_id = str;
}

string query_board_id( void ) {
  return( board_id );
}

void save_me( void ) {
  save_object( "/data/boards/" + query_board_id() + ".o" );
}

void restore_me( void ) {
  restore_object( "/data/boards/" + query_board_id() + ".o" );
}


void create( void ) {
  ::create();
}

void check_restore( void ) {
  if( !msgs )
    restore_me();
  if( !msgs ) {
    msgs = ({ });
  }
}

void add_message( string from, string subj, string msg ) {
  check_restore();
  msgs += ({ ({capitalize(from), capitalize(subj), ctime( time() ), msg }) });
  save_me();
}

int query_message_count( void ) {
  check_restore();
  return( sizeof( msgs ) );
}

int query_new_message_count( void ) {
  check_restore();
  return( query_message_count() - this_player()->query_board_read( board_id ) ); 
}

int query_msg_exists( string num ) {
  int i;

  check_restore();

  i = str2val(num) - 1;
  
  if( i > sizeof( msgs ) - 1  || i < 0 ) {
    return( 0 );
  }
  return( 1 );
}

string query_message( string num ) {
  int i;
  string msg;
  i = str2val(num) - 1;

  if( i > sizeof( msgs ) || i < 0 ) {
    return( "Message doesn't exist.\n" );
  }

  save_me();

  msg = " \nPoster: %^CYAN%^" + msgs[i][0] + "%^RESET%^\n";
  msg += "Subject: %^YELLOW%^" + msgs[i][1] + "%^RESET%^\n";
  msg += "Date: %^GREEN%^" + msgs[i][2] + "%^RESET%^\n";
  msg += "------------------------------------------------------------------------------\n";
  msg += msgs[i][3];
  return( msg );
}

string query_message_list( string who ) {
  string msg;
  string tmp;
  string from;
  string subj;
  string date;
  int i;
  int num;

  check_restore();

  msg = " \nNum    From        Subject                            Date\n" +
    "------------------------------------------------------------------------------\n";

  num = this_player()->query_board_read( board_id ) - 10;
  if( num < 0 )
    num = 0;

  for( i = num; i < sizeof( msgs ); i++ ) {
    tmp = "        " + (i+1);
    tmp = tmp[strlen(tmp)-4..];
    from = (string) msgs[i][0] + "                                          ";
    from = from[..10];
    subj = msgs[i][1] + "                                                   ";
    subj = subj[..33];
    date = msgs[i][2] + "                                    ";
    date = date[..25];
    if( i == this_player()->query_board_read( board_id ) ) {
      msg += "[" + tmp + "]>" + from + " " + subj + " " + date + "\n";
    } else {
      msg += "[" + tmp + "] " + from + " " + subj + " " + date + "\n";
    }
  }
  return(msg);
}