xrsh-buildroot/buildroot-v86/board/v86/rootfs_overlay/root/fs/THREE

72 lines
2.3 KiB
Bash
Executable File

#!/bin/sh
# virtual file interface for THREE
STATE=/run/THREE
LOG=~/.fuse.log
update(){
js '
let fuse_dir = () => '16877 2 0 0 4096 8'
let fuse_file = (size) => `33188 1 0 0 ${size||1} 1`
function traverseScene(object, path = '/', result = '') {
const objectName = object.name? object.name : object.id;
result += `${path}${objectName} ${fuse_dir()}\n`;
result += `${path}${objectName}/position ${fuse_dir()}\n`;
result += `${path}${objectName}/position/x ${fuse_file()}\n`;
result += `${path}${objectName}/position/y ${fuse_file()}\n`;
result += `${path}${objectName}/position/z ${fuse_file()}\n`;
result += `${path}${objectName}/rotation ${fuse_dir()}\n`;
result += `${path}${objectName}/rotation/x ${fuse_file()}\n`;
result += `${path}${objectName}/rotation/y ${fuse_file()}\n`;
result += `${path}${objectName}/rotation/z ${fuse_file()}\n`;
if( object.userData ){
result += `${path}${objectName}/userData 1 1 1 1\n`;
for( let k in object.userData )
result += `${path}${objectName}/userData/${k} 1 1 1 1\n`;
}
object.children.forEach(child => {
result = traverseScene(child, `${path}${objectName}/`, result);
});
return result;
}
return traverseScene( document.querySelector('a-scene').object3D );
' > $STATE
}
readdir(){ # print first column [filename] from header
test -f $STATE || update
awk '/^#\'$1'/ {
gsub("^#'$1'[/]?","",$1); # strip dirname
gsub("\\/.*","",$1); # strip subdirs/files
if( $1 ) print $1
}' $STATE | uniq
}
getattr(){ # print column 2 till 7 from header
awk '$1 == "#'$1'" { print $2" "$3" "$4" "$5" "$6" "$7 }' $STATE
grep -qE '#$1' $0 || return 2 # FUSE expects -NOENT if file does not exist
}
read(){ # print everything (data) after 7th column
awk '$1 == "#'$1'" { $1=$2=$3=$4=$5=$6=$7=""; sub(/^ +/, ""); print $0 }' $0
}
getxattr(){ # print xattr value from commentheader
awk '$1 == "#xattr:'$1'" && $2 == "'$2'" { print $3 }' $STATE
}
setxattr(){ # save xattr value from commentheader
file=$1 ; key=$2 ; shift; shift
sed -i "s/^#xattr:\\$key .*/#xattr:\\$key $*" $STATE || echo "#xattr:$file $key $*" >> $0
}
listxattr(){ # list xattr keys
awk '$1 == "#xattr:'$1'" { printf("%s\0",$2) }' $STATE
}
echo "> $0 $*" >> $LOG
"$@" | tee -a $LOG