/* /secure/cmds/creator/source.c
* from the Dead Souls LPC Library
* reads a file and forces you to execute each line as a command
*/
#include <lib.h>
inherit LIB_DAEMON;
mixed cmd(string args) {
string file;
string *lines;
int queued;
if(!args) {
write("Please specify a file as an argument.");
return 1;
}
if(grepp(args, "-q ")){
queued = 1;
args = replace_string(args, "-q ", "");
}
if(file_size(args) > 0 ) file = args;
else if(file_size(this_player()->query_cwd()+"/"+args) > 0){
file = this_player()->query_cwd()+"/"+args;
}
else {
write("That is not a valid file.");
return 1;
}
lines = explode(read_file(file),"\n");
if(!sizeof(lines)) {
write("Either the file is unreadable or it is empty.");
return 1;
}
if(queued){
foreach( string line in lines ){
if(line && line != "") write("queuing command: "+line);
this_player()->eventQueueCommand(line);
}
this_player()->eventExecuteQueuedCommands();
write("Commands queued.");
}
else {
foreach( string line in lines ){
if(line && line != "") write("sourcing command: "+line);
this_player()->eventForce(line);
}
write("Sourcing complete.");
}
return 1;
}
void help() {
message("system", "Syntax: <source [filename]>\n\n"
"If [filename] exists and is readable, this command "
"will read each line of that file and force you to "
"execute that line as if you had entered it on the "
"command line. If there is a file called .profile "
"in your home directory, it is automatically executed "
"in this way each time you log in.\n\n"
"If a set of commands need to occur with some time between "
"them (for example, to avois the MAX_COMMANDS_PER_SECOND limit) "
"use the -q flag. For example:\n source -q /secure/scripts/crat2.src\n\n"
"", this_player());
}