/*New Note Board snippet by Kai of Nivean Gensis*/
/*Eloria.net	Port 9000*/

/*add to merc.h*, with rest of note board delcarations*/

#define INOTE_FILE      "inotes.not"
#define ANOTE_FILE      "anotes.not"
#define PNOTE_FILE      "pnotes.not"
#define CNOTE_FILE      "cnotes.not"


/*add to merc.h, with rest of note data structures*/

#define NOTE_INOTE   6
#define NOTE_ANOTE   7
#define NOTE_PNOTE   8
#define NOTE_CNOTE   9


/*add to pc_data, under last_rnote*/
    time_t              last_inote;
    time_t              last_anote;
    time_t              last_pnote;
    time_t              last_cnote;


/*add to note.c*/

/*with the rest of the note data types*/

NOTE_DATA *inote_list;
NOTE_DATA *anote_list;
NOTE_DATA *pnote_list;
NOTE_DATA *cnote_list;

/*do_board, by Kai July 2002*/

void do_board(CHAR_DATA *ch,char *argument)
{
        char buf[MAX_STRING_LENGTH];
        int count;
        if (IS_NPC(ch))
        return;

        sprintf(buf, "{c+----------------------------------------------+{x\n\r" );
        send_to_char(buf, ch);
        sprintf(buf, "{c|                                              |{x\n\r" );
        send_to_char(buf,ch);
        sprintf(buf, "{c|                  {D>Note Board<{c                |{x\n\r" );
        send_to_char( buf, ch);
        sprintf(buf, "{c|                                              |{x\n\r" );
        send_to_char(buf,ch);
        sprintf(buf, "{c+----------------------------------------------+{x\n\r" );
        send_to_char( buf, ch);
	count = count_spool(ch, note_list);
        sprintf(buf,"{c|{WNotes{x         [{D%d{x]{W General OOC Notes          {c |{x\n\r",count);
        send_to_char(buf,ch);
        count = count_spool(ch,rnote_list);
        sprintf(buf,"{c|{WRoleplay{x      [{D%d{x]{W Roleplay Notes             {c |{x\n\r",count);
        send_to_char(buf,ch);
        count = count_spool(ch,cnote_list);
        sprintf(buf,"{c|{WClan{x          [{D%d{x]{W Notes to Clans             {c |{x\n\r");
        send_to_char(buf, ch);
        count = count_spool(ch,news_list);
        sprintf(buf,"{c|{WNews{x          [{D%d{x]{W News for the MUD           {c |{x\n\r",count);
        send_to_char(buf,ch);
        count = count_spool(ch,idea_list);
        sprintf(buf,"{c|{WIdeas{x         [{D%d{x]{W Ideas for Improvement      {c |{x\n\r",count);
        send_to_char(buf,ch);
        count = count_spool(ch,changes_list);
        sprintf(buf,"{c|{WChanges{x       [{D%d{x]{W Changes that have been Made{c |{x\n\r",count);
        send_to_char(buf,ch);
	count = count_spool(ch,inote_list);
        sprintf(buf,"{c|{WImmortal{x      [{D%d{x]{W Notes for Immortals        {c |{x\n\r");
	send_to_char(buf, ch);
	count = count_spool(ch,anote_list);
	sprintf(buf,"{c|{WAdmin{x         [{D%d{x]{W Notes for Admin            {c |{x\n\r");
	send_to_char(buf,ch);
        if (IS_TRUSTED(ch,ANGEL))
        {
                count = count_spool(ch,penalty_list);
                sprintf(buf,"{c|{WPenalties{x     [{D%d{x]{W Penalties Added            {c |{x\n\r",count);
                send_to_char(buf,ch);
    
        }
        count = count_spool(ch,pnote_list);
        sprintf(buf,"{c|{WPersonal{x      [{D%d{x]{W Personal Notes             {c |{x\n\r");
        send_to_char(buf,ch);
        sprintf( buf, "{c+----------------------------------------------+{x");
        send_to_char(buf, ch);
}

 /*do save_notes*/
 
 case NOTE_INOTE:
 	name = INOTE_FILE;
        pnote = inote_list;
        break;
 case NOTE_ANOTE:
        name = ANOTE_FILE;
        pnote = anote_list;
        break;
 case NOTE_PNOTE:
        name = PNOTE_FILE;
        pnote = pnote_list;
        break;
 case NOTE_CNOTE:
        name = CNOTE_FILE;
        pnote = cnote_list;
        break;


/*void load_notes*/

 load_thread(INOTE_FILE,&inote_list,NOTE_INOTE, 0);
    load_thread(ANOTE_FILE,&anote_list,NOTE_ANOTE, 0);
    load_thread(PNOTE_FILE,&pnote_list,NOTE_PNOTE, 0);
    load_thread(CNOTE_FILE,&cnote_list,NOTE_CNOTE, 0);


/* void append_note*/

 case NOTE_INOTE:
                name = INOTE_FILE;
                list = &inote_list;
                break;
        case NOTE_ANOTE:
                name = ANOTE_FILE;
                list = &anote_list;
                break;
        case NOTE_PNOTE:
                name = PNOTE_FILE;
                list = &pnote_list;
                break;
        case NOTE_CNOTE:
                name = CNOTE_FILE;
                list = &cnote_list;
                break;
/* void note_remove */

  case NOTE_INOTE:
                list = &inote_list;
                break;
        case NOTE_ANOTE:
                list = &anote_list;
                break;
        case NOTE_PNOTE:
                list = &pnote_list;
                break;
        case NOTE_CNOTE:
                list = &cnote_list;
                break;
/* void hide_note */

  case NOTE_INOTE:
            last_read = ch->pcdata->last_inote;
            break;
        case NOTE_ANOTE:
            last_read = ch->pcdata->last_anote;
            break;
        case NOTE_PNOTE:
            last_read = ch->pcdata->last_pnote;
            break;
        case NOTE_CNOTE:
            last_read = ch->pcdata->last_cnote;
            break;
/* void update_read */

 case NOTE_INOTE:
                ch->pcdata->last_inote = UMAX(ch->pcdata->last_inote,stamp);
                break;
        case NOTE_ANOTE:
                ch->pcdata->last_anote = UMAX(ch->pcdata->last_anote,stamp);
                break;
        case NOTE_PNOTE:
                ch->pcdata->last_pnote = UMAX(ch->pcdata->last_pnote,stamp);
                break;
        case NOTE_CNOTE:
                ch->pcdata->last_cnote = UMAX(ch->pcdata->last_cnote,stamp);
                break;

/* void parse_note*/

        case NOTE_INOTE:
                list = &inote_list;
                list_name = "immortal_notes";
                break;
        case NOTE_ANOTE:
                list = &anote_list;
                list_name = "admin_notes";
                break;
        case NOTE_PNOTE:
                list = &pnote_list;
                list_name = "personal_notes";
                break;
        case NOTE_CNOTE:
                list = &cnote_list;
                list_name = "clan_notes";
                break;


/*down father*/
 case NOTE_INOTE:
                        send_to_char("{YThere are no immortal notes for you.{x\n\r",ch);
                        break;
                case NOTE_ANOTE:
                        send_to_char("{YThere are no admin notes for you.{x\n\r",ch);
                        break;
                case NOTE_PNOTE:
                        send_to_char("{YThere are no personal notes for you.{x\n\r",ch);
                        break;
                case NOTE_CNOTE:
                        send_to_char("{YThere are no clan notes for you.{x\n\r",ch);
                        break;

/*father down*/


 case NOTE_INOTE:
                ch->pcdata->last_inote = current_time;
                break;
        case NOTE_ANOTE:
                ch->pcdata->last_anote = current_time;
                break;
        case NOTE_PNOTE:
                ch->pcdata->last_pnote = current_time;
                break;
        case NOTE_CNOTE:
                ch->pcdata->last_cnote = current_time;
                break;

/*under do_changes*/

void do_personal(CHAR_DATA *ch, char *argument)
{
        parse_note(ch,argument,NOTE_PNOTE);
}

void do_immortal(CHAR_DATA *ch, char *argument)
{
        parse_note(ch,argument,NOTE_INOTE);
}

void do_admin(CHAR_DATA *ch, char *argument)
{
        parse_note(ch,argument,NOTE_ANOTE);
}
void do_cnote(CHAR_DATA *ch, char *argument)
{
        parse_note(ch,argument,NOTE_CNOTE);
}

/*after the stuff about you are writing a different kind of note in if(!str_prefix(arg, "to")*/

 if (( ch->pnote->type == NOTE_NOTE ) && (str_cmp(argument, "all")))
                {
                send_to_char( "{CNotes are to all.{x\n\r", ch);
                free_string( ch->pnote->to_list );
                ch->pnote->to_list = "all";
                return;
                }
        if (( ch->pnote->type == NOTE_INOTE ) && (str_cmp(argument, "Immortal")))
                {
                send_to_char( "{CImmortal notes are to Immortals.{x\n\r", ch);
                free_string( ch->pnote->to_list );
                ch->pnote->to_list = "Immortal";
                return;
                }
        if (( ch->pnote->type == NOTE_ANOTE ) && (str_cmp(argument, "Admin")))
                {
                send_to_char( "{CAdmin notes are to Admin.{x\n\r", ch);
                free_string( ch->pnote->to_list );
                ch->pnote->to_list = "Admin";
                return;
                }
 if (( ch->pnote->type == NOTE_RNOTE) && (str_cmp(argument, "all")))
                {
                send_to_char( "{CRoleplay notes are to all.{x\n\r",ch);
                free_string( ch->pnote->to_list );
                ch->pnote->to_list = "all";
                return;
                }
        if ( ch->pnote->type == NOTE_CNOTE)
                {
                if (ch->cid->short_name == NULL)
                        {
                        send_to_char("You are not in a clan.{x\n\r", ch);
                        return;
                        }
                else
                        {
                        send_to_char( "{CClan notes are written to your clan.{x\n\r", ch);
                        free_string( ch->pnote->to_list);
                        ch->pnote->to_list = ch->cid->short_name;
                        return;
                        }
                }
        if ((ch->pnote->type == NOTE_PNOTE) && (!str_cmp(argument, "all")))
                {

   send_to_char( "{CPersonal notes cannot be written to all.{x\n\r", ch);
                return;
                }
        if ((ch->pnote->type == NOTE_IDEA) && (str_cmp(argument, "all")))
                {
                send_to_char( "{CIdeas are to be written to all.{x\n\r", ch);
                free_string(ch->pnote->to_list);
                ch->pnote->to_list = "all";
                return;
                }
        if ((ch->pnote->type == NOTE_CHANGES) && (str_cmp(argument,"all")))
                {
                send_to_char( "{CChanges are to be written to all{x.\n\r", ch);
                free_string( ch->pnote->to_list);
                ch->pnote->to_list = "all";
                return;
                }
        if ((ch->pnote->type == NOTE_NEWS) && (str_cmp(argument, "all")))
                {
                send_to_char( "{CNews is to be written to all{x.\n\r", ch);
                free_string( ch->pnote->to_list);
                ch->pnote->to_list = "all";
                return;
                }

/*interp.c*/

/*at the bottom of the section with the command note*/
	  { "personal",       do_personal,    POS_SLEEPING,   0,LOG_NORMAL,1,CMV },
	    { "immortal",       do_immortal,    POS_SLEEPING,   0,LOG_NORMAL,1,CMV },
	    { "admin",          do_admin,       POS_SLEEPING,   0,LOG_NORMAL,1,CMV },
	    { "cnote",          do_cnote,       POS_SLEEPING,   0,LOG_NORMAL,1,CMV },

/*interp.h*/

DECLARE_DO_FUN( do_personal );
DECLARE_DO_FUN( do_immortal );
DECLARE_DO_FUN( do_admin );
DECLARE_DO_FUN( do_cnote );