mud/lib/secure/modules/read.c
2020-09-06 05:43:07 -07:00

121 lines
3.4 KiB
C

#include <lib.h>
#include <modules.h>
string globalstr, globalstr2, globalstr3;
mixed eventReadValue(string str, string method){
string val, junk1, junk2;
int value, quid;
string substr = this_object()->ReadMatchingLine(str,method);
quid = sscanf(substr,"%s"+last(method,2)+"("+"%s"+")%s",junk1, val, junk2);
if(quid < 3) return 0;
val = trim(val);
sscanf(val,"%d",value);
if(value) return value;
else return this_object()->eventCleanString(val);
}
varargs string ReadMatchingLine(string target, string substring, string exclude){
int omit, done, tail_search, i;
string line, filename, new_file;
globalstr = "";
globalstr2 = "";
globalstr3 = "";
if(!grepp(target,"\n") && file_exists(target)) target = read_file(target);
if(!target) return "";
if(strsrch(target,substring) == -1) return "";
if(strsrch(target,"\n") == -1) return "";
filename = generate_tmp(this_object());
new_file = "";
if(!exclude) exclude = filename;
write_file(filename,target);
omit = 1;
for(i=1; !done; i++){
line = read_file(filename, i, 1);
if(!line) break;
if(grepp(line,substring) ) {
omit =0;
}
if(!omit && truncate(last(line,2,1),1) != ";") {
tail_search = 1;
}
else {
tail_search = 0;
}
if(!omit) {
new_file += line;
}
if(!tail_search) omit = 1;
if(!line) done = 100;
if(i == 999) done = 100;
}
rm(filename);
return new_file;
}
mapping eventParsePair(string file, string param, string type, string mode){
mixed val, key;
string func, junk;
int tempint;
mapping RetMap = ([]);
string line = this_object()->ReadMatchingLine(file, param);
sscanf(line,"%s(%s,%s);%s",func,key,val,junk);
if(!key || !val) {
return ([]);
}
if(sscanf(val,"%d",tempint) && !alphap(val)) val = tempint;
key = this_object()->eventCleanString(key);
if(stringp(val)) val = this_object()->eventCleanString(val);
RetMap[key] = val;
return RetMap;
}
string eventCleanString(string str){
str = replace_string(str,"\n","");
str = replace_string(str,"\t","");
str = replace_string(str,"\"","");
str = space_trim(str);
str = trim(str);
return str;
}
mapping eventMappifyLine(string file, string param){
mixed RetMap;
string schmutz;
schmutz = this_object()->ReadMatchingLine(file, param);
if(!grepp(schmutz,param)) return ([]);
schmutz = this_object()->eventExtractMapString(schmutz);
schmutz = replace_string(schmutz,"\n","");
schmutz = replace_string(schmutz,"\t","");
schmutz = replace_string(schmutz," : ",":");
schmutz = space_trim(schmutz);
schmutz = replace_string(schmutz,", \"",",\"");
schmutz = trim(schmutz);
if(last(schmutz,1) != ","){
schmutz = "(["+schmutz+",])";
}
else schmutz = "(["+schmutz+"])";
RetMap = restore_variable(schmutz);
if(!mapp(RetMap)){
write("Mappification unsuccessful.");
return ([]);
}
else return RetMap;
}
string eventExtractMapString(string str){
string meat, junk1, junk2;
str = replace_string(str,"[","OPENBRACKET",1);
str = reverse_string(replace_string(reverse_string(str),"]","TEKCARBESOLC",1));
sscanf(str,"%sOPENBRACKET%sCLOSEBRACKET%s",junk1,meat,junk2);
return meat;
}