/* Do not remove the headers from this file! see /USAGE for more info. */ /* ** Mh.c ** ** Command-line driven mailer. ** ** Written by Rust at some point in time. ** SEP-NOV '94: Updated/revised by Deathblade (for all kinds of stuff). */ //### Needs some work, I think. Does it still work? #include <playerflags.h> #include <mudlib.h> #include <daemons.h> inherit MAILER; private void Mh_cmd_write(string arg) { int num; string fname; if(!arg || (sscanf(arg,"%d %s",num,fname)!=2&& (sscanf(arg,"%s",fname)!=1))) { write("Usage: Mw # <filename>\n"); return; } cmd_read(num, fname, 1); } private void Mh_cmd_save(string arg) { int num; string fname; if(!arg || (sscanf(arg,"%d %s",num,fname)!=2&& sscanf(arg,"%s",fname)!=1)) { write("Usage: Ms # <filename>\n"); return; } cmd_read(num, fname, 0); } private void Mh_cmd_replyall(mixed arg) { if ( arg && !(arg = to_int(arg)) ) { write("Usage: MR #\n"); return; } cmd_reply(arg, 1); } private void Mh_cmd_reply(mixed arg) { if ( arg && !(arg = to_int(arg)) ) { write("Usage: Mr #\n"); return; } cmd_reply(arg, 0); } private void Mh_cmd_help() { string* output; //### FIXME: This is _really_ gross. Use @@END. output = explode( "Help for Mh (Mail handler) Version 0.9\n"+sprintf("%'-'40s","\n")+ "M? This help screen\n" "\n" "Mm <name1> [name2] [name3]... Send mail.\n" "Mh [# or range (1-4,6 for example)] Show the headers for the specified\n" " range of messages, or all messages\n" " if no range is specified.\n" "M# # Read a message.\n" "Mr # Reply to message\n" "MR # Reply to message, all\n" " originial recipients receive the mail\n" "Mf # Forward message\n" "Md # or range Delete message(s)\n" "M$ Show the number of messages in your box.\n" "M= [#] Set current message if # is provided\n" " else shows the current message #\n" "M+ increment the current message number\n" " but do not read.\n" "M- decrement the current message number\n" " but do not read.\n" "Mn read the next message." ,"\n"); if( wizardp(this_user()) ) output += ({ "Ms [#] <filename> Save message w/ header intact to file.", "Mw [#] <filename> Save message but no header to file." }); output+=({"", "All numbers default to the currently referenced message, which is shown", "by M=\n", "","Groups may also be mailed to, see help for groups on how to set them", "up.... you can mail to them like a regular name, or you can enclose" ,"The group in (). Eg, Mm (admin) rust will mail all the admins and rust."}); more(output); } private void Mh_cmd_forward(mixed arg) { mixed newto; int num; if(!arg || (sscanf(arg,"%d %s",num,newto)!=2&& (sscanf(arg,"%s",newto)!=1))) { write("Usage: Mf # <name1> [name2] ...\n"); return; } cmd_forward(num, newto); } nomask int parse_Mh_cmd(string input) { string arg; ZBUG("FOO"); //### we need to validate the caller! if( strlen(input) > 2 && input[1] == ' ' ) arg = input[2..]; else if( strlen(input) > 2 ) return 0; switch( input[0] ) { case 'h': cmd_headers( arg ); return 1; case 'm': cmd_mail( arg ); return 1; case 'R': Mh_cmd_replyall( arg ); return 1; case 'r': Mh_cmd_reply( arg ); return 1; case '?': Mh_cmd_help(); return 1; case 'd': cmd_delete( arg ); return 1; case 'f': Mh_cmd_forward( arg ); return 1; case '#': cmd_read(to_int(arg), 0, 0); return 1; case 's': Mh_cmd_save( arg ); return 1; case '=': cmd_setcurrent( arg ); return 1; case 'w': Mh_cmd_write( arg ); return 1; case 'n': { int idx; idx = mailbox_ob->first_unread_message() + 1; if ( !idx ) printf("No more messages.\n"); else cmd_read(idx, 0, 0); return 1; } case '+': cmd_setcurrent(mailbox_ob->query_message_index()+2 ); return 1; case '-': cmd_setcurrent(mailbox_ob->query_message_index() ); return 1; case '$': printf("You have %d messages.\n", mailbox_ob->query_message_count()); return 1; default: return 0; } } /* ** Compat with the modal-version. Tell user what is up. */ nomask void begin_mail(string arg) { write("You are set up for Mh, the command-line mail handler.\n" "Type M? for info.\n"); }