70 lines
1.3 KiB
Plaintext
Executable File
70 lines
1.3 KiB
Plaintext
Executable File
#!/usr/local/bin/tlang
|
|
func relto(appfile,path)
|
|
{
|
|
f=fs.parent(getabs(appfile));
|
|
while(path.startsWith("../"))
|
|
{
|
|
path = path.substring(3);
|
|
|
|
f = fs.parent(f);
|
|
}
|
|
ret fs.combine(f,path);
|
|
}
|
|
|
|
func getabs(path)
|
|
{
|
|
d = path.split(":",false);
|
|
if(d.length == 2 && d[0].length == 1)
|
|
{
|
|
if(d[1].startsWith('\\') || d[1].startsWith('/'))
|
|
{
|
|
ret path;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(path.startsWith('\\') || path.startsWith('/'))
|
|
{
|
|
ret path;
|
|
}else{
|
|
ret fs.combine(fs.working,path);
|
|
}
|
|
}
|
|
}
|
|
|
|
filesRead = create.array();
|
|
func contains(f)
|
|
{
|
|
each(filesRead)
|
|
{
|
|
if(item == f) ret true;
|
|
}
|
|
ret false;
|
|
}
|
|
__includeStr = "#include ";
|
|
func readFile(file)
|
|
{
|
|
if(contains(file)) ret "";
|
|
filesRead.add(file);
|
|
f = fs.readalltext(file).replace("\r","").split("\n",false);
|
|
myText = "";
|
|
each(f)
|
|
{
|
|
if(item.startsWith(__includeStr))
|
|
{
|
|
myText += readFile(relto(file,item.substring(__includeStr.length))) + "\n";
|
|
}
|
|
else
|
|
{
|
|
myText += item + "\n";
|
|
}
|
|
}
|
|
ret myText;
|
|
}
|
|
func main(src,$$args)
|
|
{
|
|
code=reflection.parse_code(readFile(src));
|
|
each(args) code.add(item);
|
|
code.run();
|
|
}
|