dsII/extra/wolfpaw/
dsII/lib/cmds/admins/
dsII/lib/cmds/common/
dsII/lib/cmds/creators/include/
dsII/lib/cmds/creators/include/SCCS/
dsII/lib/daemon/services/
dsII/lib/doc/
dsII/lib/domains/Ylsrim/
dsII/lib/domains/Ylsrim/adm/
dsII/lib/domains/Ylsrim/armor/
dsII/lib/domains/Ylsrim/broken/
dsII/lib/domains/Ylsrim/fish/
dsII/lib/domains/Ylsrim/meal/
dsII/lib/domains/Ylsrim/npc/
dsII/lib/domains/Ylsrim/virtual/
dsII/lib/domains/Ylsrim/weapon/
dsII/lib/domains/campus/adm/
dsII/lib/domains/campus/etc/
dsII/lib/domains/campus/meals/
dsII/lib/domains/campus/npc/
dsII/lib/domains/campus/txt/
dsII/lib/domains/campus/txt/ai/charles/
dsII/lib/domains/campus/txt/ai/charles/bak2/
dsII/lib/domains/campus/txt/ai/charles/bak2/bak1/
dsII/lib/domains/campus/txt/ai/charly/
dsII/lib/domains/campus/txt/ai/charly/bak/
dsII/lib/domains/campus/txt/jenny/
dsII/lib/domains/default/creator/
dsII/lib/domains/default/doors/
dsII/lib/domains/default/etc/
dsII/lib/domains/default/weap/
dsII/lib/domains/town/doors/
dsII/lib/domains/town/txt/
dsII/lib/domains/town/virtual/
dsII/lib/lib/comp/
dsII/lib/lib/lvs/
dsII/lib/lib/user/
dsII/lib/lib/virtual/
dsII/lib/log/archive/
dsII/lib/log/chan/
dsII/lib/log/errors/
dsII/lib/log/open/
dsII/lib/obj/book_source/
dsII/lib/obj/include/
dsII/lib/realms/template/
dsII/lib/realms/template/area/armor/
dsII/lib/realms/template/area/npc/
dsII/lib/realms/template/area/obj/
dsII/lib/realms/template/area/room/
dsII/lib/realms/template/area/weap/
dsII/lib/realms/template/bak/
dsII/lib/realms/template/cmds/
dsII/lib/save/
dsII/lib/save/kills/o/
dsII/lib/secure/cfg/
dsII/lib/secure/cfg/classes/
dsII/lib/secure/cfg/races/SCCS/
dsII/lib/secure/cmds/creators/include/
dsII/lib/secure/cmds/players/
dsII/lib/secure/cmds/players/include/
dsII/lib/secure/daemon/include/
dsII/lib/secure/lib/
dsII/lib/secure/lib/include/
dsII/lib/secure/lib/net/
dsII/lib/secure/lib/net/include/
dsII/lib/secure/lib/std/
dsII/lib/secure/modules/
dsII/lib/secure/npc/
dsII/lib/secure/obj/include/
dsII/lib/secure/room/
dsII/lib/secure/save/boards/
dsII/lib/secure/save/postal/c/cratylus/
dsII/lib/secure/save/votes/
dsII/lib/secure/tmp/
dsII/lib/secure/verbs/creators/
dsII/lib/shadows/
dsII/lib/spells/
dsII/lib/tmp/
dsII/lib/verbs/admins/include/
dsII/lib/verbs/common/
dsII/lib/verbs/common/include/
dsII/lib/verbs/creators/include/
dsII/lib/verbs/players/include/SCCS/
dsII/lib/verbs/rooms/
dsII/lib/verbs/rooms/include/
dsII/lib/www/
dsII/v22.2b14/
dsII/v22.2b14/Win32/
dsII/v22.2b14/compat/
dsII/v22.2b14/compat/simuls/
dsII/v22.2b14/testsuite/
dsII/v22.2b14/testsuite/clone/
dsII/v22.2b14/testsuite/command/
dsII/v22.2b14/testsuite/data/
dsII/v22.2b14/testsuite/etc/
dsII/v22.2b14/testsuite/include/
dsII/v22.2b14/testsuite/inherit/
dsII/v22.2b14/testsuite/inherit/master/
dsII/v22.2b14/testsuite/log/
dsII/v22.2b14/testsuite/single/
dsII/v22.2b14/testsuite/single/tests/compiler/
dsII/v22.2b14/testsuite/single/tests/efuns/
dsII/v22.2b14/testsuite/single/tests/operators/
dsII/v22.2b14/testsuite/u/
dsII/v22.2b14/tmp/
dsII/win32/
#include <lib.h>
#include <vendor_types.h>
inherit LIB_ITEM;

int count, state, blocked, short, logged;
string message, announce, name, final, cratty, f_global;
object owner;

int read_it(string str);

void create(){
    ::create();
    SetKeyName("answering machine");
    SetId( ({"machine","voicemail"}) );
    SetShort("an answering machine");
    SetLong("This is a portable answering machine. There is a label on "
      "it you can read.");
    SetItems(([
	"label" : "A label you can read.",
      ]));
    SetRead(([
	"label" : (: read_it :),
      ]));
    SetDefaultRead("read_it");
    SetProperties(([
	"no steal" : 1,
      ]));
    SetMass(1);
    SetValue(1);
    SetVendorType(VT_TREASURE);
    state=0;
    count = 0;
    set_heart_beat(5);
}

void init(){
    ::init();
    add_action("toggle_answer","answer");
    add_action("check_it","check");
    add_action("set_ann","announce");
    add_action("check_mess","tells");
    add_action("erase","erase");
    add_action("arch_it","archive");
    this_object()->get_ann();
}

void heart_beat(){
    count++;
    if(count > 720){
	count = 0;
	if(creatorp(environment(this_object())) &&
	  file_exists("/realms/"+name+"/messages/messages")){
	    tell_object(environment(this_object()),"The answering machine %^BOLD%^YELLOW%^BEEPS%^RESET%^.");
	}
    }
}

int toggle_answer(string str){
    if(str=="on"){
	if(state==1){
	    write("The answering machine is already on.\n");
	    return 1;
	}
	state=1;
	blocked=1;
	short=1;
	logged=1;
	this_object()->log_it("*** Answering machine activated on "+
	  local_ctime(time())+".\n");
	write("The answering machine is on.\n");
	return 1;
    }
    if(str=="off"){
	if(state==0){
	    write("The machine is already turned off.\n");
	    return 1;
	}
	state=0;
	blocked=0;
	short=0;
	logged=0;
	write("The answering machine is off.\n");
	return 1;
    }
}

int query_answer(){
    return state;
}

int get_message(string str){
    cratty=str;
    this_object()->final();
    return 1;
}

string send_message(){
    return announce;
}

int log_it(string str){
    f_global=str;
    owner=environment(this_object());
    name=lower_case(owner->GetKeyName());
    if(file_size("/realms/"+name+"/messages") > 0) {
	cp("/realms/"+name+"/messages","/realms/"+name+"/messages.bak");
	rm("/realms/"+name+"/messages");
    }
    if(file_size("/realms/"+name+"/messages") != -2) {
	mkdir("/realms/"+name+"/messages");
    }
    unguarded((: write_file("/realms/"+name+"/messages/messages", f_global+"\n") :));
    return 1;
}

int final(){
    string tempy,a1,a2;
    if(sscanf(cratty,"%s tells you: %s", a1, a2) >1){
	tempy="From "+a1+" at "+local_ctime(time())+":\n"+a2;
    }
    if(!blocked){
	message("info",final+"\n", environment(this_object()));
    }
    if(short){
	//message("info",a1+" telled to you.", environment(this_object()));
    }
    if(logged){
	this_object()->log_it(tempy);
    }
}

int set_ann(string str){
    if(!state){
	write("The machine is not turned on.\n");
	return 1;
    }
    announce=str;
    rm("/realms/"+name+"/messages/annc");
    write_file("/realms/"+name+"/messages/annc", announce);
    return 1;
}

int get_ann(){
    owner=environment(this_object());
    if(creatorp(owner)){
	name=lower_case(owner->GetKeyName());
	if(file_size("/realms/"+name+"/messages/annc") > 0){
	    announce=read_file("/realms/"+name+"/messages/annc");
	    return 1;
	}
	announce=owner->GetName()+" cannot "
	"answer your tell right now. Your message has been recorded "
	"and "+nominative(owner)+" will get back to you as soon as possible.";
	return 1;
    }
}

int check_mess(string str){
    if(!str){
	this_player()->more("/realms/"+name+"/messages/messages");
	return 1;
    }
}

int read_it(string str){
    write("\n"
      "answer on/off   - on activates the machine. off doesn't.\n"
      "announce <msg>  - '<msg>' is whatever you want the sender to see.\n"
      "tells           - lists messages by date, time and sender.\n"+
      "erase tape      - erases all messages on the machine.\n"
      "archive tape    - copies tape onto backup archive file.\n"
      "\n");
    return 1;
}

int erase(string str){
    if(str=="tape"){
	write("You erase the answering machine tape.\n");
	rm("/realms/"+name+"/messages/messages");
	return 1;
    }
}

int arch_it(string str){
    string temp;
    if(str=="tape"){
	write("You save the contents of the answering machine tape "
	  "into /realms/"+name+"/messages/archive.\n");
	temp=read_file("/realms/"+name+"/messages/messages");
	write_file("/realms/"+name+"/messages/archive", temp);
	return 1;
    }
}

int clean_tape(string str){
    if(str=="tape"){
	this_object()->arch_it("tape");
	this_object()->erase("tape");
	return 1;
    }
}