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();
 | 
						|
}
 |