You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Should work like a container for different applications like:
Atoms and molecules editor by mouse and some menu with settings. Should support atom type, bonds, position, atom selection
enumDirs{NO=-1,LEFT_UP=0,UP=1,UP_RIGHT=2,RIGHT=3,RIGHT_DOWN=4,DOWN=5,DOWN_LEFT=6,LEFT=7}constTYPE_MOV=0b0010000000000000;constTYPE_SPL=0b0110000000000000;constTYPE_FIX=0b0100000000000000;constTYPE_IF=0b1000000000000000;constTYPE_JOB=0b1010000000000000;constlog=console.log.bind(console);functionhex(atom: number){return'0b'+atom.toString(2).padStart(16,'0').match(/.{1,4}/g)?.join('_')}/** * Returns standard header (type + vm dir + vm dir bit). This header exists * for all atom types. Here are related bits: 0 atom type 3 vmDir 6 vmDir on/off * XXX XXX X * @param atomType Type of the atom (0 - empty, 1 - mov, 2 - fix,...) * @param vmDir Direction of near atom, where VM will be moved (0..7) * @return 16bit number */functionhead(atomType: number,vmDir: Dirs=Dirs.NO): number{letatom=atomType;// atom typeif(vmDir>=Dirs.LEFT_UP&&vmDir<=Dirs.LEFT){atom|=(vmDir<<10);// VM diratom|=(1<<9);// VM dir bit}else{atom&=0b1111110111111111;// no VM dir bit}returnatom;}/** * Returns mov atom as binary u16 number (Rust format) */functionmov(movDir: Dirs,vmDir: Dirs=Dirs.NO): string{letatom=head(TYPE_MOV,vmDir);// mov typeif(movDir<Dirs.LEFT_UP||movDir>Dirs.LEFT){throw'Invalid "mov" atom direction'}atom|=(movDir<<6);// move dirreturnhex(atom);}/** * Returns fix atom as binary u16 number (Rust format) */functionfix(dir1: Dirs,dir2: Dirs,vmDir: Dirs=Dirs.NO): string{letatom=head(TYPE_FIX,vmDir);// fix typeif(dir1<Dirs.LEFT_UP||dir1>Dirs.LEFT){throw'Invalid "fix" direction 1'}atom|=(dir1<<6);// dir1if(dir2<Dirs.LEFT_UP||dir2>Dirs.LEFT){throw'Invalid "fix" direction 2'}atom|=(dir2<<3);// dir2returnhex(atom);}/** * Returns spl atom as binary u16 number (Rust format) */functionspl(vmDir: Dirs=Dirs.NO,dir1: Dirs=Dirs.LEFT_UP,dir2: Dirs=Dirs.LEFT_UP): string{letatom=head(TYPE_SPL,vmDir);// spl typeif(dir1<Dirs.LEFT_UP||dir1>Dirs.LEFT){throw'Invalid "spl" direction 1'}atom|=(dir1<<6);// dir1if(dir2<Dirs.LEFT_UP||dir2>Dirs.LEFT){throw'Invalid "spl" direction 2'}atom|=(dir2<<3);// dir2returnhex(atom);}/** * Returns if atom as binary u16 number (Rust format) */functionifo(vmElseDir: Dirs=Dirs.NO,ifDir: Dirs=Dirs.NO,thenDir: Dirs=Dirs.NO): string{letatom=head(TYPE_IF,vmElseDir);// if typeif(ifDir>=Dirs.LEFT_UP&&ifDir<=Dirs.LEFT){atom|=(ifDir<<6);// ifDiratom|=(1<<2);// ifDir bit}else{atom&=0b1111111111111011;// ifDir bit}if(thenDir>=Dirs.LEFT_UP&&thenDir<=Dirs.LEFT){atom|=(thenDir<<3);// thenDiratom|=(1<<1);// thenDir bit}else{atom&=0b1111111111111101;// thenDir bit}returnhex(atom);}/** * Returns job atom as binary u16 number (Rust format) */functionjob(jobDir: Dirs=Dirs.NO,vmDir: Dirs=Dirs.NO): string{letatom=head(TYPE_JOB,vmDir);// job typeif(jobDir<Dirs.LEFT_UP||jobDir>Dirs.LEFT){throw'Invalid "job" direction'}atom|=(jobDir<<6);returnhex(atom);}log(mov(Dirs.RIGHT));
Debugger
Save/Load from JSON
The text was updated successfully, but these errors were encountered:
Should work like a container for different applications like:
The text was updated successfully, but these errors were encountered: