118 lines
2.6 KiB
C
118 lines
2.6 KiB
C
/* /secure/sefun/files.c
|
|
* from Dead Souls 3.3
|
|
* functions which handle file operations
|
|
* created by Descartes of Borg 940926
|
|
*/
|
|
|
|
string Port, gtempname, gfilename;
|
|
|
|
int file_exists(string str) {
|
|
if(!str || !stringp(str)) return 0;
|
|
return (file_size(str) > -1);
|
|
}
|
|
|
|
mixed lpc_file(string str){
|
|
if(!file_exists(str)){
|
|
if(file_exists(str+".c")) return str+".c";
|
|
else return 0;
|
|
}
|
|
else return str;
|
|
}
|
|
|
|
mixed object_file(string str){
|
|
if(!file_exists(str)){
|
|
if(file_exists(str+".o")) return str+".o";
|
|
else return 0;
|
|
}
|
|
else return str;
|
|
}
|
|
|
|
int directory_exists(string str){
|
|
if(!str || (sizeof(str) < 2 && str != "/")) return 0;
|
|
return (file_size(str) == -2);
|
|
}
|
|
|
|
string player_save_file(string who){
|
|
if( !stringp(who) ) error("Bad argument 1 to save_file().");
|
|
who = convert_name(who);
|
|
return master()->player_save_file(who);
|
|
}
|
|
|
|
string save_file(string what){
|
|
string ret;
|
|
#if ENABLE_INSTANCES
|
|
ret = new_savename(what);
|
|
#else
|
|
ret = old_savename(what);
|
|
#endif
|
|
return ret;
|
|
}
|
|
|
|
int indent_file(string filename){
|
|
|
|
string tempname;
|
|
tempname = "/tmp/indent."+time()+".tmp";
|
|
|
|
write_file(tempname,"I\n");
|
|
|
|
gtempname = tempname;
|
|
gfilename = filename;
|
|
if(!cp(filename,tempname+".dat")){
|
|
write("You don't have read access to "+filename);
|
|
return 0;
|
|
}
|
|
|
|
load_object("/secure/cmds/creators/lsed")->cmd(tempname+" "+tempname+".dat");
|
|
|
|
if(!unguarded((: cp(gtempname+".dat", gfilename) :)) ){
|
|
write("You don't have write access to "+filename);
|
|
rm(tempname+".dat");
|
|
rm(tempname);
|
|
return 0;
|
|
}
|
|
|
|
rm(tempname+".dat");
|
|
rm(tempname);
|
|
return 1;
|
|
}
|
|
|
|
int mkdir_recurse(string path){
|
|
string *path_arr = explode(path,"/");
|
|
string agglutinate = "";
|
|
|
|
if(directory_exists(path)) return 0;
|
|
|
|
foreach(string element in path_arr){
|
|
agglutinate += "/"+element;
|
|
if(!directory_exists(agglutinate)){
|
|
if(!mkdir(agglutinate)) return 0;
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
string new_savename(string name){
|
|
string unoed, ported, bare;
|
|
int ret;
|
|
if(grepp(name, "."+__PORT__)) return name;
|
|
if(last(name,2) == ".o") unoed = truncate(name, 2);
|
|
else unoed = (name || "");
|
|
bare = replace_string(unoed, ""+__PORT__, "");
|
|
while(last(bare, 1) == "."){
|
|
bare = truncate(bare, 1);
|
|
}
|
|
ported = bare + "." + __PORT__ + ".o";
|
|
return ported;
|
|
}
|
|
|
|
string old_savename(string name){
|
|
string pre;
|
|
if(name){
|
|
sscanf(name, "%s.%*s", pre);
|
|
if(pre) return pre+".o";
|
|
return name+".o";
|
|
}
|
|
return 0;
|
|
}
|
|
|