/* 
 * Mail converter.
 * By Turrican@Discworld, May 1995
 */
mixed *mail;
nosave string *names;
nosave int no_more;
int query_busy(string name);
void create() {
  seteuid("mailer");
  names = ({ });
  no_more = 0;
}
int ok_to_shut() {
  no_more = 1;
  return (sizeof(names) == 0);
}
void convert_it(string pname) {
  int i, bing;
  if (no_more) {
    write("Can't start converting mail, try again after the reboot.\n");
    return;
  }
  if (query_busy(pname)) {
    write("Argh ! Already busy converting mail for "+pname+".\n");
    return;
  }
  mail = ({ });
  if (file_size("/save/post/"+pname+".o") == -1)
    return;
  unguarded((: restore_object, "/save/post/"+pname :));
  bing = sizeof(mail);
  if (!bing) {
    unguarded((: rm, "/save/post/"+pname+".o" :));
    return;
  }
  write("Converting mail for "+pname+".\n");
  names += ({ pname });
  for (i = 0; i < bing; i++) {
    reset_eval_cost();
    call_out("do_it", (i+1)*3, (mail[i] + ({ pname })));
  }
  call_out("reset_busy", (i+1)*3, pname);
  unguarded((: rm, "/save/post/"+pname+".o" :));
}
void do_it(mixed *arg) {
  object handler = clone_object("/handlers/folder_handler");
  handler->add_it((["to" : ({ arg[6] }),
    "cc" : ({ }), "from" : arg[1], "subject" : arg[3], "body" :
    "From "+arg[1]+" "+ctime(arg[0])+
    "\nDate: "+ctime(arg[0])+
    "\nFrom: "+arg[1]+
    "\nTo: "+arg[2]+
    "\nSubject: "+arg[3]+
    "\nCc: "+(arg[4]?arg[4]:"")+"\n\n"+
    arg[5] ]), 1);
}
int query_busy(string name) {
  return (member_array(name, names) != -1);
}
void reset_busy(string name) {
  names -= ({ name });
  if (no_more && !sizeof(names)) {
    SHUTDOWN_H->init_shutdown(2);
  }
}