BrowzOS/bzcmd/file.js

1390 lines
31 KiB
JavaScript

// Îáðàáàòûâàåò ðåãóëÿðíûå âûðàæåíèÿ äëÿ SearchMask
function SMCheckReg(str)
{
for (var c, out = "",bracket = "", i = 0; i<str.length; i++)
{
c = str.c(i)
if (bracket!="")
{
if (str.c(i-1)=="\\")
bracket+=c; else
if (c=="]")
{
if (bracket=="[") out+="\\[\\]"; else
out+=bracket+c
bracket = ""
} else
bracket+=QuoteMeta(c)
} else
if (c=="[") bracket+=c; else
out+=c
}
out = out+QuoteMeta(bracket.substr(0,1))+bracket.substr(1)
return out
}
// Ïðîâåðÿåò íóæíî ëè ïðîèçâîäèòü ïîèñê ïî îáðàçöó
function CheckMask(str)
{
return /^[\[\]\*\?]/.test(str) || /[^(\\)][\[\]\*\?]/.test(str)
};
// Äîáàâëåíèå êàòàëîãà ìîíòèðîâàíèÿ
function MountList()
{
var last = Files.length,ch;
var Mount = new Array('navigator',"cookie");
var Dirs = new Array('Object,navigator','Cookie,0');
if (location.protocol=="file:")
{
if ((OP || NC) && /^\/(.)/.test(location.pathname) && navigator.javaEnabled())
{
Dirs[Dirs.length] = Files[last] = "Extended,"+RegExp.$1.toLowerCase()+":"
Mount[Mount.length] = "local",
Names[last] = "/dev/local/hdd"+(RegExp.$1.toUpperCase().charCodeAt(0)-65),
Access[last++] = "cr--";
}
if (IE)
{
for (var i=0;i<26;i++,last++)
ch = String.fromCharCode(97+i),
Access[last] = "br--",
Names[last] = "/dev/local/"+(i>1?"wd":"fd")+ch,
Files[last] = "Extended,"+ch+":";
if (/^\/?(.)/.test(location.pathname))
Dirs[Dirs.length] = "Extended,"+RegExp.$1.toLowerCase()+":",
Mount[Mount.length] = "local";
};
};
for (i=0;i<Mount.length;i++)
{
Names[last+i] = "/dev/"+Mount[i];
Access[last+i]= "br--";
Files[last+i] = Dirs[i];
}
return ""
};
// Ïåðåõâàò îøèáêè (äëÿ NC)
function onerror(msg, URL, lineNum)
{
if (/\/([^\/]+)$/.test(URL)) URL = RegExp.$1
netscape.security.PrivilegeManager.disablePrivilege('UniversalFileAccess')
fappend ('/core.dump','Fatal error ( "'+msg+'" )\nin line '+lineNum+' of script "'+URL+'".\n\n')
Type(P())
return true
};
// Ô-ÿ äëÿ ñîðòèðîâêè ïî äëèíå ("äëèííûå" âïåðåä). Ñäåëàë ñâîþ
// ò.ê. NC 4.7 ãðîõàåòñÿ ïðè èñïîëüçîâàíèè âñòðîåííîé ô-è ñ ïàðàìåòðîì ô-ÿ
function QuickSort(List,a,b)
{
var Lo,Hi,Mid,T;
Lo = a;
Hi = b;
Mid = List[Math.floor((Lo+Hi)/2)]
do{
while (List[Lo].length > Mid.length) Lo++;
while (List[Hi].length < Mid.length) Hi--;
if (Lo <= Hi) T = List[Lo], List[Lo] = List[Hi], List[Hi] = T;
Lo++;
Hi--;
}
while (Hi > Lo);
if (Hi > a) List = QuickSort(List, a, Hi);
if (Lo < b) List = QuickSort(List, Lo, b);
return List;
};
// Ïîèñê ïóòè èëè ôàéëà äëÿ êëàâèøè Tab
function SearchPath(str)
{
var p=-1,n,s,len,name,List
var rest = str
var Div = str.split(/[ ><|;)("']/)
if (Div.length<2) return str // Êîìàíäà áåç ïàðàìåòðà
for (var p = Div[Div.length-1].length, i = Div.length-2; i>=0; i--)
{
if (Div[i].l()=="\\") p+= Div[i].length+1
else break
}
delete Div
com = str.substring(0,str.length-p)
len = (name = StripSlashes(FullName(str = StripSlashes(str.substr(com.length))))).length
List = SearchMask(name+"*/")
if (name.l()!="/")
List = SearchMask(name+"*").concat(List).concat(SearchMask(FullPath(str)+"*"));
if (!List.length)
{
List = flist(ExtractPath(name))
if (!IOResult) Type('\n'+List.join(', ')+'\n'+P())
return com+QuoteMeta2(str)
};
List = QuickSort(List,0,List.length-1)
s = List[0];
for (i=0; i<List.length; i++)
{
for (j=0;j<List[i].length;j++)
if (s.c(j) != List[i].c(j)) break
if (len<=j) s = s.substring(0,j)
};
return com+QuoteMeta2(str+s.substr(len))
};
// Ïðîèçâîäèò ïîèñê ïóòè ôàéëà ïî ìàñêå
function SearchMask(str)
{
str = FullName(str)
if (!CheckMask(str)) return new Array(str)
var Path = new Array("/")
if (str == "/") return Path
if (!/(\/[^\/]*\/?)(.{0,})/.test(str))
{IOResult = errNotFound; return new Array()};
var path = "",i,j,len,reg, pathadd
do {
str = RegExp.$2
path+= SMCheckReg(RegExp.$1).replace(/\//g,"\\/").replace(/\./g,"\\.").replace(/\?/g,"[^\\/]").replace(/\*/g,"[^\\/]*")
var Match = new Array();
for (i in Path)
{
List = flist(Path[i]);
if (IOResult) return new Array();
reg = new RegExp("^("+path+")$");
for (j in List)
if (reg.test(Path[i]+List[j])) Match[Match.length] = Path[i]+List[j]
}
Path = Match
}
while (/([^\/]*\/)(.{0,})/.test(str) || /(.+)(.{0,})/.test(str))
if (!Path.length) IOResult = errNotFound
return Path
};
// Íîðìàëèçèðóåò ïóòü
function FullPath(path)
{
if (path == "" || path == ".") return WD
if (path == "/") return "/"
path = path.replace(/\.{3,}/g,"..")
while (/\/\//.test(path)) path = path.replace(/\/\//g,"/");
if (!/\/$/.test(path)) path+="/"
path = path.replace(/^\.\//,WD)
if (path.c(0) != "/") path = WD + path
while (/[^\/]*\/\.\.\//.test(path)) path = path.replace(/[^\/]*\/\.\.\//,"");
if (path =="") return "/"
return path
};
// Âûáèðàåò èìÿ ôàéëà
function ExtractName(str)
{
if (/([^\/]+)$/.test(str)) return RegExp.$1; else return "";
};
// Âûáèðàåò ïóòü äî ôàéëà, â êîíöå - ñëýø
function ExtractPath(str)
{
if (/(.+\/)[^\/]*$/.test(str)) return RegExp.$1; else return "/";
};
// Âûáèðàåò ïóòü äî ôàéëà
function ExtractPath2(str)
{
if (/(.+)\/[^\/]*$/.test(str)) return RegExp.$1; else return "";
};
// Íîðìàëèçèðóåò èìÿ
function FullName(name)
{
if (name == "/") return "/";
if (name.nm("/")) return WD + name;
return FullPath(ExtractPath(name))+ExtractName(name);
};
// Íàõîäèì ñâÿçü íà ôàéë
function FindLink(s)
{
IOResult = errNoError;
for (var i=0;i<Files.length;i++)
if ((Files[i].substr(0,2)=='\n>') && (Files[i].substr(2)==s)) return i;
return IOResult = errNotFound;
};
function ErrorMsg(num)
{
EL(num)
switch (num)
{
case errNoError: return ''
case errNotFound: return 'No such file or directory.'
case errNoAccess: return 'Access denied.'
case errFatalErr: return 'Fatal file system error.'
case errCookNoSpace: return 'Not enougth space or browser declined request.'
case errCantWriteDir: return 'Cannot write to directory.'
case errVarNotFound: return 'Undefined variable.'
case errInvVarName: return 'Invalid variable name.'
case errOutOfBounds: return 'Subscript out of range.'
case errInvIndex: return 'Newline in variable index.'
case errNoHome: return 'No home directory.'
case errFewArguments: return 'Too few arguments.'
case errNoNumber: return 'Badly format number.'
case errMissingName: return 'Missing name.'
case errEvalError: return 'Expression error.'
case errBinFile: return 'Cannot read this binary file.'
case errFileLocked: return 'The file is locked by Windows.'
case errInvSyntax: return 'Invalid syntax.'
case errCantChmod: return 'Cannot change mode this file.'
};
return 'Unknown error.';
};
function LocalExists(name)
{
IOResult = errNoError;
for (var i in Names) if (name == Names[i]) return i;
return IOResult = errNotFound;
};
function MountExists(name)
{
var len,i,p=0,cur;
IOResult = errNoError;
name = FullPath(name);
for (i in Mount)
{
if (name.charAt(1) == Mount[i].charAt(1) &&
name.length >= (len = Mount[i].length) &&
name.substr(0,len) == Mount[i] && p<len) p = len,cur = i;
};
if (p) return cur;
return IOResult = errNotFound;
};
function fput(name,content)
{
content+=""
IOResult = errNoError
if (name == "")
{
pipefile = content
return errNoError
}
switch(ExtractName(name))
{
case "stderr":
case "stdout": Write(content);return ""
case "nul": return ""
};
var acc = faccess(ExtractPath(name))
if (!IOResult && acc.nm('w')) return IOResult = errNoAccess
IOResult = errNoError
switch (name = FullName(name))
{
case "/dev/bmem": if (IE) return SetBuffer(content)
case "/dev/random":
case "/dev/null": return ""
case "/dev/stat": window.status = content;return ""
}
if (arguments.length<3 || !arguments[2]) // Is make directory operation?
{
var acc = faccess(name)
if (!IOResult)
{
if (name.l()=="/" || acc.c(0)=="d") return IOResult = errCantWriteDir
if (fexists(name),!IOResult && acc.nm('w')) return IOResult = errNoAccess
}
}
var res = LocalExists(name);
if (!IOResult)
{
IOResult = errNoError
if (/^\/dev\//.test(name)) return ""
var acc = Access[res]
if (acc.m('l')) return fput(Files[res].substr(2),content)
if (acc.m('p')) {Files[res]+= content; return errNoError}
if (acc.m('w')) {Files[res] = content; return errNoError}
return IOResult = errNoAccess
};
var res = MountExists(name)
if (!IOResult)
{
var Res = Device[res].split(',')
if (Res.length>2 && Res[2].m('r')) return IOResult = errNoAccess;
name = name.substr(Mount[res].length)
var put = new Function("name,content,r","FileWrite"+Res[0]+"(name,content,r)")
return put (name,content,Res[1])
};
// Ôàéë íå ñîçäàí â ëîêàëå, ïóòü íå ñìîíòèðîâàí, ñîçäàåì ôàéë
var len = Names.length;
if (len != Access.length || len != Names.length)
return IOResult = errFatalErr;
Names[len] = name;
Access[len] = umask;
Files[len] = content;
return IOResult = errNoError;
};
function fget(name)
{
IOResult=errNoError
if (name == "" || name == "-")
{
var pipe = pipefile
return pipefile = "",IOResult=errNoError,pipe
}
switch (name = FullName(name))
{
case "/dev/bmem": if (IE) return GetBuffer()
case "/dev/null": return ""
case "/dev/random": return Math.floor(Math.random()*65535)
case "/JUNIX" : return "Written by Stepanischev Evgeny. 1999-2001 y."
case "/dev/stat": return window.status
}
var acc = faccess(name)
if (acc.nm('r')) return IOResult = errNoAccess
if ((name.l()=="/" || acc.c(0)=="d") && (!IOResult || LocalDirEi(name),!IOResult))
return IOResult=errNoError,flist(name).join("...")
var res = LocalExists(name)
if (!IOResult)
{
IOResult = errNoError;
if (name == '/dev/nul') return ""
var cont = Files[res], acc = Access[res]
if (acc.m('l')) return fget(cont.substr(2))
if (acc.m('p')) Files[res] = ""
return cont
};
var res = MountExists(name);
if (!IOResult)
{
var Res = Device[res].split(',')
name = name.substr(Mount[res].length)
return sheval("FileRead"+Res[0]+"('"+name+"','"+Res[1]+"')")
};
return IOResult = errNotFound;
};
function flist(path)
{
path = FullPath(path)
if (faccess(path).nm('r')) return new Array()
var List = new Array(),i,j = 0, name;
var Xnam = Names.concat(Mount);
for (i in Xnam)
if (Xnam[i].length > (len = path.length) &&
path == Xnam[i].substr(0,len))
{
name = Xnam[i].substr(len);
if (/^([^\/]+\/)/.test(name))
{
for (j = 0;j<List.length; j++)
if (List[j] == RegExp.$1) break;
List[j] = RegExp.$1;
} else
List[List.length] = name;
};
var res = MountExists(path);
if (!IOResult)
{
var Res = Device[res].split(',');
path = path.substr(Mount[res].length);
var MountList = sheval("FileList"+Res[0]+"('"+path+"','"+Res[1]+"')");
if (!IOResult) List = List.concat(MountList);
};
IOResult = errNoError;
return List;
};
function fexists(name)
{
// if (name.m("\\")) return IOResult = errNotFound
var len
name = FullName(name)
LocalExists(name)
if (!IOResult) return IOResult
// Ìîæåò áûòü ó íàñ äèðåêòîðèé?
var tname = FullPath(name)
for (var i in Names) if (Names[i].length >= (len = tname.length)
&& Names[i].substr(0,len) == tname) return IOResult = errNoError
var res = MountExists(name)
if (IOResult) return IOResult = errNotFound
var Res = Device[res].split(',')
name = name.substr(Mount[res].length)
return sheval("FileExists"+Res[0]+"('"+name+"','"+Res[1]+"')")
}
function fdelete(name)
{
name = FullName(name)
var acc = faccess(name)
if (IOResult) return IOResult; else
if (fexists(name),!IOResult && acc.nm('w') || "cb".m(acc.c(0)) || faccess(ExtractPath(name)).nm('w') && !IOResult)
return IOResult = errNoAccess
var res
while (res = FindLink(name),!IOResult)
{
Names=DeleteItem(Names,res);
Files=DeleteItem(Files,res);
Access=DeleteItem(Access,res);
};
var res = LocalExists(name);
if (!IOResult)
{
Names=DeleteItem(Names,res);
Files=DeleteItem(Files,res);
Access=DeleteItem(Access,res);
return IOResult = errNoError;
};
var res = MountExists(name);
if (!IOResult)
{
var Res = Device[res].split(',');
if (Res.length>2 && Res[2].m('r')) return IOResult = errNoAccess;
name = name.substr(Mount[res].length);
return sheval("FileDelete"+Res[0]+"('"+name+"','"+Res[1]+"')");
};
return IOResult = errNotFound;
};
function fsize(name)
{
name = FullName(name);
var res = LocalExists(name);
if (!IOResult) return Files[res].length;
IOResult = errNoError;
var Xnam = Names.concat(Mount);
if (/\/$/.test(name))
for (var i in Xnam) if (Xnam[i].length >= (len = name.length)
&& Xnam[i].substr(0,len) == name) return len;
var res = MountExists(name);
if (!IOResult)
{
var Res = Device[res].split(',');
name = name.substr(Mount[res].length);
return sheval("FileSize"+Res[0]+"('"+name+"','"+Res[1]+"')");
};
// Ïóòü âûøå ñìîíòèðîâàí
var len = name.length;
for (i in Mount) if (Mount[i].substr(0,len) == name) return len;
return IOResult = errNotFound;
};
function faccess(name)
{
name = FullName(name);
var res = LocalExists(name)
if (!IOResult)
{
if (name.l()=="/") return "d"+Access[res].substr(1); else
if (Access[res].m('l')) return 'l'+faccess(Files[res].substr(2)).substr(1); else
return Access[res]
}
IOResult = errNoError
var i, t_name = (name.l()=="/"?name:name+"/"), len = t_name.length
for (i in Names) if (Names[i].length >= len
&& Names[i].substr(0,len) == t_name) return "drwx";
var res = MountExists(name);
if (!IOResult)
{
var Res = Device[res].split(',');
name = name.substr(Mount[res].length);
Res[1] = Res[1].replace(/\\/g,"/")
name = name.replace(/\\$/,"")
return sheval("FileAccess"+Res[0]+"('"+name+"','"+Res[1]+"')")
}
// Ïóòü âûøå ñìîíòèðîâàí
var len = name.length;
for (i in Mount) if (Mount[i].substr(0,len) == name) return "drwx"
return IOResult = errNotFound,"drwx"
};
function fchmod(name, r)
{
IOResult = errNoError
if (name == "" || name == "-" || ExtractPath(FullName(name)) == '/dev')
return errCantChmod
var acc = faccess(name)
if (IOResult) return IOResult
var res = LocalExists(name)
if (!IOResult)
{
IOResult = errNoError
var cont = Files[res], acc = Access[res]
if (acc.m('l')) return fchmod(cont.substr(2))
if (acc.c(0)!='-') return errCantChmod
Access[res] = acc.c(0)+(r.m('r')?'r':'-')+(r.m('w')?'w':'-')+(r.m('x')?'x':'-')
return IOResult = errNoError
}
var res = MountExists(name)
if (!IOResult)
{
var Res = Device[res].split(',')
name = name.substr(Mount[res].length)
return sheval("FileChmod"+Res[0]+"('"+name+"','"+r+"','"+Res[1]+"')")
}
return IOResult = errCantChmod
};
function ffind(str)
{
if (fexists(str),!IOResult) return str
var Paths=GetVar('path[*]'),name
if (IOResult) return IOResult
Paths = Paths.split(' ')
str = ExtractName(str)
for (i in Paths)
{
fexists(name = FullPath(Paths[i])+str)
if (!IOResult) return name
}
return IOResult = errNotFound,""
};
//---------------------------------------------------//
function FileWriteObject(name)
{
return IOResult = errNoAccess;
};
function FileWriteCookie(name,content) //,f
{
var len = content.length, r
if (arguments[2]=='direct') r = '', len-=2; else
{
r = FileAccessCookie (name)
if (IOResult) r = '#;'; else
r = '#'+String.fromCharCode(48+(r.m('r')?1:0)+(r.m('w')?2:0)+
(r.m('x')?8:0))
}
content = JZip(r+content,1,3)
var d=new Date(2999,2,2),nd
if (NC) nd='Wednesday, 30-Dec-37 23:59:59 GMT'; else nd=d.toGMTString()
document.cookie= name + '=' + content + ';expires=' + nd
if (FileSizeCookie(name) == len) return IOResult = errNoError
return IOResult = errCookNoSpace
};
function FileWriteExtended()
{
var name = arguments[0].replace(/\//g,"\\"),
content = arguments[1],
disknum = arguments[2].replace(/\\\\/g,"\\")
if (/(.+\/)([^\/]+)$/.test(name))
var path = '\\'+RegExp.$1,name = RegExp.$2; else var path = "\\";
path = disknum+path;
var fullname = path + name, idx = fullname.lastIndexOf("\\");
if (idx >=0) fullname = fullname.substring(0,idx); else fullname = "\\";
if (DelConf && !confirm("File "+fullname+"\\"+name+" will changed!"))
return IOResult = errNoAccess;
FileMkdirExtended(fullname);
if (IOResult) return IOResult;
IOResult = errNoError
if (name.l()=="\\") return IOResult
if (NC || OP)
{
netscape.security.PrivilegeManager.enablePrivilege('UniversalFileAccess');
var fi=new java.io.File(path,name);
if (fi.exists() && !fi.canWrite()) return IOResult = errNoAccess
var f=new java.io.FileOutputStream(fi)
for (var i=0;i<content.length;i++)
f.write(content.charCodeAt(i))
f.flush()
f.close()
delete f, fi
return IOResult = errNoError
} else
if (IE)
{
/*@cc_on @*/
/*@if (@_jscript_version>4)
try
{@end @*/
var fso=new ActiveXObject("Scripting.FileSystemObject");
var file=fso.CreateTextFile(path+name,1,false);
/*@if (@_jscript_version>4)
} catch (e)
{
return IOResult = errFileLocked
};@end @*/
/*@cc_off @*/
file.Write(content)
file.Close()
return IOResult = errNoError
};
};
function FileListObject()
{
var path = arguments[0]
var obj = sheval(arguments[1])
var List = new Array(), j = 0;
if (path == "")
for (i in obj)
List[j++] = ""+i
return List
};
function FileListCookie(path)
{
var Xnam = document.cookie.split(";"), List = new Array(), name, i
for (i in Xnam)
if (/\s*([^=]+)/.test(Xnam[i]))
{
if (RegExp.$1.length >= (len = path.length) &&
path == RegExp.$1.substr(0,len))
{
name = RegExp.$1.substr(len);
if (/^([^\/]+\/)/.test(name))
{
for (j = 0;j<List.length; j++)
if (List[j] == RegExp.$1) break;
if (RegExp.$1!="") List[j] = RegExp.$1
} else
if (name!="") List[List.length] = name
};
};
return List;
};
function FileListExtended()
{
var path = arguments[0];
var disknum = arguments[1];
var List = new Array(), j = 0;
path = ((path=="" && !MZ && NC && Version<5) ? disknum : disknum+'/'+path).replace(/\//g,"\\")
IOResult = errNoError;
if (NC || OP)
{
netscape.security.PrivilegeManager.enablePrivilege('UniversalFileAccess')
var fi=new java.io.File(path), fl
if (!fi.canRead()) return IOResult = errNoAccess
var Cont = fi.list()
if (Cont == null) return IOResult = errNoAccess
for (i in Cont)
{
fl = new java.io.File((new Array(path,Cont[i])).join("/"));
List[j++] = Cont[i].toLowerCase() + (fl.isDirectory()?"/":"")
delete fl
}
delete fi, Cont
return List
} else
if (IE)
{
/*@cc_on
@if (@_jscript_version>4)
try
{@end @*/
var fso=new ActiveXObject("Scripting.FileSystemObject");
/*@if (@_jscript_version>4)
} catch (e)
{
return IOResult = errNoAccess;
};@end
if (/.:\\?$/.test(path) && !fso.DriveExists(path) ||
!fso.FolderExists(path)) return IOResult = errNotFound;
var folder = fso.GetFolder(path);
var fc = new Enumerator(folder.SubFolders);
for (; !fc.atEnd(); fc.moveNext())
if (/([^\\]+)$/.test(fc.item()))
List[j++] = RegExp.$1.toLowerCase()+"/";
fc = new Enumerator(folder.files);
for (; !fc.atEnd(); fc.moveNext())
if (/([^\\]+)$/.test(fc.item()))
List[j++] = RegExp.$1.toLowerCase();
return List;
@cc_off
@*/
} else
return new Array();
};
function FileReadCookie(name) //, f
{
IOResult = errNoError
var prefix = name+'='
var start = document.cookie.indexOf(prefix)
if (start<0)
if (FileExistsCookie(name),!IOResult) return ''
else return IOResult = errNotFound
var end = document.cookie.indexOf(';',start+prefix.length)
if (end<0)
end = document.cookie.length
var out = document.cookie.substring(start+prefix.length,end)
out = UnJZip(out,1)
if (arguments[1]=='direct') return out
if (out.c(0)=='#') return out.substr(2)
return out
};
function FileReadObject(name,obj)
{
IOResult = 0;
var path = arguments[0];
var obj = sheval(arguments[1]);
for (var i in obj) if (name == i)
return (((type=typeof(obj[i]))=="string" || type=="number" || type=="boolean")?(""+obj[i]):("["+type+"]"))
return IOResult = errNotFound;
};
function FileReadExtended()
{
var name = arguments[0]
var disknum = arguments[1]
name = name.replace(/\//g,"\\")
if (/(.+\/)([^\/]+)$/.test(name))
var path = '\\'+RegExp.$1,name = RegExp.$2; else var path = "\\"
path = disknum+path
IOResult = errNoError
if (NC || OP)
{
netscape.security.PrivilegeManager.enablePrivilege('UniversalFileAccess')
var fi=new java.io.File(path,name)
if (!fi.canRead()) return IOResult = errNoAccess
var f=new java.io.FileInputStream(fi);
for (var fc='',i=f.available();i;i--)
fc+=String.fromCharCode(f.read())
f.close()
var jsfc = new String(fc)
delete fc, f, fi
return jsfc
} else
if (IE)
{
/*@cc_on @*/
/*@if (@_jscript_version>4)
try
{@end @*/
var fso=new ActiveXObject("Scripting.FileSystemObject");
var file=fso.OpenTextFile(path+name,1,false);
/*@if (@_jscript_version>4)
} catch (e)
{
if (e.description=="Permission denied")
return IOResult = errFileLocked
return IOResult = errNotFound
};@end @*/
/*@cc_off @*/
var out = file.Read(fso.GetFile(path+name).size)
file.Close()
return out
};
return IOResult = errFatalErr
};
// Exists section
function FileExistsObject(name,obj)
{
if (name == "") return IOResult = errNoError
obj = sheval(obj)
for (var i in obj) if (name == ''+i) return IOResult = errNoError
return IOResult = errNotFound
};
function FileExistsCookie(name)
{
IOResult = errNoError
if (name == "") return IOResult
name = QuoteMeta(name)
var reg1 = new RegExp("; *"+name+"[;=]"), reg2 = new RegExp("^"+name+"[;=]")
var reg3 = new RegExp("; *"+name+"$"), reg4 = new RegExp("^"+name+"$")
if (reg1.test(document.cookie) || reg2.test(document.cookie) ||
reg3.test(document.cookie) || reg4.test(document.cookie)) return IOResult
return IOResult = errNotFound
};
function FileExistsExtended()
{
var name = arguments[0];
var disknum = arguments[1];
name = name.replace(/\//g,"\\");
if (/(.+\/)([^\/]+)$/.test(name))
var path = '\\'+RegExp.$1,name = RegExp.$2; else var path = "\\";
path = disknum+path
IOResult = errNoError;
if (NC || OP)
{
netscape.security.PrivilegeManager.enablePrivilege('UniversalFileAccess');;
var fi=new java.io.File(path,name)
if (fi.exists()) return IOResult = errNoError
delete fi
return IOResult = errNotFound;
} else
if (IE)
{
/*@cc_on @*/
/*@if (@_jscript_version>4)
try
{@end @*/
var fso=new ActiveXObject("Scripting.FileSystemObject");
/*@if (@_jscript_version>4)
} catch (e)
{
return IOResult = errNotFound;
};@end @*/
/*@cc_off @*/
if (fso.FileExists(path+name) || fso.FolderExists(path+name))
return IOResult = errNoError;
return IOResult = errNotFound;
};
return IOResult = errFatalErr;
};
function FileDeleteObject(name,obj)
{
FileExistsObject(name,obj)
if (!IOResult) return IOResult = errNoAccess
return IOResult
}
function FileDeleteCookie(name)
{
FileExistsCookie(name)
if (IOResult) return IOResult
if (IE)
document.cookie=name+'=;expires=Wednesday, 01-Jan-1970 00:00:00 GMT'; else
document.cookie=name+'=#%3F;expires=Wednesday, 01-Jan-70 00:00:00 GMT'
return IOResult = errNoError
}
function FileDeleteExtended()
{
var name = arguments[0];
var disknum = arguments[1];
name = name.replace(/\//g,"\\");
if (/(.+\/)([^\/]+)$/.test(name))
var path = '\\'+RegExp.$1,name = RegExp.$2; else var path = "\\";
path = disknum+path;
if (DelConf && !confirm("File "+path+name+" will deleted!"))
return IOResult = errNoAccess
FileExistsExtended(name,disknum)
if (IOResult) return IOResult
IOResult = errNoError
if (NC || OP)
{
return IOResult = errNoError
} else
if (IE)
{
/*@cc_on @*/
/*@if (@_jscript_version>4)
try
{@end @*/
var fso=new ActiveXObject("Scripting.FileSystemObject");
/*@if (@_jscript_version>4)
} catch (e)
{
return IOResult = errNotFound
};@end @*/
/*@cc_off @*/
if (/(.*)\\$/.test(name)) fso.DeleteFolder(path+RegExp.$1,true); else
fso.DeleteFile(path+name,true)
return IOResult = errNoError
};
return IOResult = errFatalErr;
};
function FileSizeObject()
{
var name = arguments[0];
var obj = arguments[1];
if (name=="") return 0;
return FileReadObject(name,obj).length;
};
function FileSizeCookie(name)
{
if (name=="") return 0;
var content = FileReadCookie(name)
if (!IOResult) return content.length; else return 0;
};
function FileSizeExtended(name,disknum)
{
var name = arguments[0]
var disknum = arguments[1];
if (name=="") return 0
FileExistsExtended(name,disknum);
if (IOResult) return 0
name = name.replace(/\//g,"\\");
if (/(.+\/)([^\/]+)$/.test(name))
var path = '\\'+RegExp.$1,name = RegExp.$2; else var path = "\\"
path = disknum+path;
IOResult = errNoError
if (NC || OP)
{
netscape.security.PrivilegeManager.enablePrivilege('UniversalFileAccess')
var fi=new java.io.File(path,name)
var jsfl = new String(fi.length())
delete fi
return jsfl
} else
if (IE)
{
/*@cc_on @*/
/*@if (@_jscript_version>4)
try
{@end @*/
var fso=new ActiveXObject("Scripting.FileSystemObject")
/*@if (@_jscript_version>4)
} catch (e)
{
return IOResult = errNotFound;
};@end @*/
/*@cc_off @*/
if (/(.*)\\$/.test(name)) return (path+name).length; else
return fso.GetFile(path+name).size;
};
return IOResult = errFatalErr;
};
function FileAccessObject(name)
{
if (name=="") return "dr-x";
return "-r--";
};
function FileAccessCookie(name)
{
var content, ch
if (name=="") return "drwx"
if (/\/$/.test(name)) return "drwx"; else
{
content = FileReadCookie(name, 'direct')
if (IOResult || content.c(0)!="#") return "-rw-"
ch = content.charCodeAt(1)
return (ch&4?'M':'-')+(ch&1?'r':'-')+(ch&2?'w':'-')+(ch&8?'x':'-')
}
};
function FileAccessExtended(name,disk)
{
IOResult = errNoError
if (name == "") return "drwx"
var fullname = (disk+"/"+name).replace(/\//g,"\\")
if (fullname.l() == "\\") fullname = fullname.slice(0,-1)
if (IE)
{
/*@cc_on
@if (@_jscript_version>4)
try
{@end @*/
var fso = new ActiveXObject("Scripting.FileSystemObject")
/*@if (@_jscript_version>4)
} catch (e)
{
return IOResult = errNoAccess
}@end
@cc_off @*/
if (fso.FolderExists(fullname)) var attr = fso.GetFolder(fullname); else
if (fso.FileExists(fullname)) var attr = fso.GetFile(fullname); else
return IOResult = errNotFound
attr = attr.attributes
return (attr & 16 ? 'd':'-')+(attr & 1 ? '-':'r')+(attr & 6 ? '-':'w')+
(attr & 32 ? '-' : 'x')
} else
if (NC || OP)
{
netscape.security.PrivilegeManager.enablePrivilege('UniversalFileAccess')
var fi=new java.io.File(fullname)
if (fi.isDirectory()) return "drwx"
if (fi.isFile()) return "-rwx"
IOResult = errNotFound
delete fi
return "-rwx" // NC 5.x & NC 6.x java bug
} else
return ""
};
function FileMkdirExtended(path)
{
if (DelConf && !confirm("Folder "+path+" will created!"))
return IOResult = errNoAccess;
if (IE)
{
/*@cc_on
@if (@_jscript_version>4)
try
{@end @*/
var fso=new ActiveXObject("Scripting.FileSystemObject");
/*@if (@_jscript_version>4)
} catch (e)
{
return IOResult = errNoAccess;
};@end
@cc_off @*/
Path = path.split("\\"),
path = Path[0];
for (i = 1;i<Path.length;i++)
{
path += "\\"+Path[i];
if (!fso.FolderExists(path))
fso.CreateFolder(path)
};
return IOResult = errNoError;
} else
if (NC || OP)
{
netscape.security.PrivilegeManager.enablePrivilege('UniversalFileAccess');;
var fi=new java.io.File(path)
fi.mkdirs();
delete fi
return IOResult = errNoError
};
};
function fappend(name,content)
{
var old = fget(name)
if (IOResult) old = ""
fput(name,old+content)
return IOResult
};
function UniqFile()
{
var name = "/lost+found/file";
for (i = 0;LocalExists(name+i),!IOResult;i++);
return name+i;
};
// Óäàëåíèå ýëåìåíòà ìàññèâà
function DeleteItem(m,r)
{
var Out=new Array(),i,j
for (j=i=0;i<m.length;i++) if (i!=r) Out[j++]=m[i];
return Out;
};
// Ïðîâåðêà ñóùåñòâîâàíèÿ äèðåêòîðèÿ (ëîêàëüíî)
function LocalDirEi(path)
{
path = FullPath(path)
for (i in Names)
{
var re = new RegExp("^"+QuoteMeta(path))
if (re.test(Names[i])) return IOResult = errNoError, i
}
return IOResult = errNotFound
}
function favail(obj,parm)
{
return sheval("FileAvail"+obj+"('"+parm+"')")
}
function FileAvailObject(obj)
{
return new Array("-",0)
}
function FileAvailCookie()
{
var len = document.cookie.length
return new Array(len,4096-len)
}
function FileAvailExtended(disk)
{
if (NC || OP)
{
return new Array("-","-")
} else
if (IE)
{
/*@cc_on @*/
/*@if (@_jscript_version>4)
try
{@end @*/
var fso = new ActiveXObject("Scripting.FileSystemObject");
var disk = fso.GetDrive(disk.substr(0,1))
/*@if (@_jscript_version>4)
} catch (e)
{
IOResult = errNotFound
return new Array("-","-")
};@end @*/
/*@cc_off @*/
var size = disk.TotalSize
return new Array(size - disk.FreeSpace, size)
};
return IOResult = errFatalErr
}
function Jenc (s)
{
s = parseInt(s,10)
if (s>51) s = (s+"").lz(2); else
{
if ((s+= 65)>90) s+= 6
s = CODES.charAt(s)
}
return s
}
function JZip (str, f, b)
{
str = str.replace(/\*/g,'*+')
var Dict = new Array ()
var Words = str.split (/[^\wà-ÿÀ-ß0-9:]+/),l1,l2,i,j,r
var Word = new Array()
var Freq = new Array ()
Words = Words.concat (new Array('tion','ternal')).sort(new Function("a,b", "return a.length-b.length"))
if (f) for (i = 0; i<Words.length; i++)
Words[i] = escape (Words[i])
for (r = 0; r<Words.length; r++)
if (Words[r].length>b) break
Words = Words.slice (r).sort(new Function ("a,b", "return a==b? 0 : (a>b?1:-1)"))
for (i = 0; i<Words.length; i++)
{
r = Words[i], j = 1
for (i++; r == Words[i]; i++, j++);
Freq[Word.length] = j
Word[Word.length] = r
}
delete Words
if (f) str = escape (str.replace(/ /g,'*_').replace(/\n/,'*-').replace(/\t/g,'*.'))
for (i = j = 0; i<Math.min(152,Freq.length); i++)
if (Freq[i]>1)
{
r = new RegExp (Word[i],"g")
if (r.test(str))
{
str = str.replace (r, '*'+Jenc(j))
Dict[j++] = Word[i]
}
}
delete Freq
return Dict.join (",")+"!"+str
}
function UnJZip (str, f)
{
if (f)
str = unescape (str).replace(/\*_/g,' ').replace(/\*\-/g,"\n").replace(/\*\./g,' ')
var t = str.indexOf("!")
var Dict = str.substr (0, t).split (",")
var txt = str.substr (t+1), i, r
for (i in Dict)
{
if ((r = Jenc (i))!=i) r = "("+(""+i).lz(2)+"|"+r+")"; else
r = (""+i).lz(2)
r = new RegExp ("\\*"+r,"g")
txt = txt.replace (r, Dict[i])
}
return txt.replace(/\*\+/g,'*')
}
function FileChmodCookie(name,r)
{
if (name=='') return errCantChmod
r = String.fromCharCode(48+(r.m('r')?1:0)+(r.m('w')?2:0)+(r.m('x')?8:0))
var content = FileReadCookie(name)
if (IOResult) return IOResult
FileWriteCookie (name, '#'+r+content, 'direct')
if (IOResult) return IOResult
return errNoError
}
function FileChmodObject()
{
return errCantChmod
}
function FileChmodExtended(name, r, disk)
{
IOResult = errNoError
if (name == "") return "drwx"
var fullname = (disk+"/"+name).replace(/\//g,"\\")
if (fullname.l() == "\\") fullname = fullname.slice(0,-1)
if (IE)
{
/*@cc_on
@if (@_jscript_version>4)
try
{@end @*/
var fso = new ActiveXObject("Scripting.FileSystemObject")
/*@if (@_jscript_version>4)
} catch (e)
{
return IOResult = errNoAccess
}@end
@cc_off @*/
if (fso.FolderExists(fullname)) var file = fso.GetFolder(fullname); else
if (fso.FileExists(fullname)) var file = fso.GetFile(fullname); else
return IOResult = errNotFound
file.attributes = (r.m('r')?0:1)+(r.m('w')?0:6)+(r.m('x')?0:32)
return errNoError
}
return errCantChmod
}