/* Do not remove the headers from this file! see /USAGE for more info. */ /* ** iftp_ob.c -- interactive object to handle I3 file transfers ** ** 960205, Deathblade: created */ inherit M_INPUT; private nosave string remote_mudname; private nosave string remote_dir = "/"; private nomask string local_dir() { return get_user_variable("pwd") || DIR_I3_FILES; } private nomask void rcv_command(string str) { string args; string local_fname; string remote_fname; if ( str == "" ) return; sscanf(str, "%s %s", str, args); switch ( str ) { case "quit": case "q": case "bye": case "exit": modal_pop(); destruct(); break; case "?": case "help": default: write("Commands are: quit, help, get, put, ls, cd, lcd, pwd\n"); break; case "get": if ( !args ) { write("Error: usage is: get remote_fname [ local_fname ]\n"); break; } sscanf(args, "%s %s", remote_fname, local_fname); if ( !remote_fname ) local_fname = remote_fname = args; if ( local_fname[0] != '/' ) local_fname = join_path(local_dir(), local_fname); if ( remote_fname[0] != '/' ) remote_fname = join_path(remote_dir, remote_fname); IMUD_D->do_file_get_request(remote_mudname, local_fname, remote_fname); break; case "put": if ( !args ) { write("Error: usage is: put local_fname [ remote_fname ]\n"); break; } sscanf(args, "%s %s", local_fname, remote_fname); if ( !local_fname ) local_fname = remote_fname = args; if ( local_fname[0] != '/' ) local_fname = join_path(local_dir(), local_fname); if ( remote_fname[0] != '/' ) remote_fname = join_path(remote_dir, remote_fname); IMUD_D->do_file_put_request(remote_mudname, local_fname, remote_fname); break; case "ls": case "dir": if ( !args ) args = remote_dir; else if ( args[0] != '/' ) args = join_path(remote_dir, args); IMUD_D->do_file_list_request(remote_mudname, args); break; case "cd": if ( !args ) printf("Dir: %s\n", remote_dir); else { //### validate the dir? remote_dir = args; printf("New dir: %s\n", args); } break; case "pwd": printf("Local: %s\nRemote: %s\n", local_dir(), remote_dir); break; case "lcd": if ( !args ) printf("Dir: %s\n", local_dir()); else { //### validate the dir? this_user()->query_shell_ob()->set_pwd(args); printf("New dir: %s\n", args); } break; } } void create(string mudname) { if ( !clonep() ) return; if ( !mudname || mudname == "" ) error("illegal creation of an IFTP_OB\n"); printf("Accessing: %s\n", IMUD_D->canon_mudname(mudname)); remote_mudname = mudname; modal_push((: rcv_command :), "iftp> "); }