GPUs have neighbor visibility, and screens have network visibility. But in a robot the gpu and screen are sibling components, with edges to the machine, but without edges to each other. Thus during load they are not connected to each other (regardless of load order). Robots already have a provision for this issue for connecting screens to keyboards and keyboards to screens, but lacked a custom screen->gpu connection. This code change simply adds that search and connects all screens to all gpus.
closes#2302
/bin/less and /bin/more were able to lock up the system if they call string.gsub(string, function) on a very large string (~144k chars long).
The machine layer intercepts expensive strings calls by checking the length of the string, but it does not intercept gsub calls when the replace action is a function
The fix is to intercept all long string actions, not just non-function replacement gsub calls
Note that /bin/more is now more efficient and doesn't call string.gsub, but this is still the right fix to keep the sandbox from being able to lock up the system with string methods
* term.pull fix, the tty stream no longer needs a cursor object
* buffer reads now pass the original result and reason all the way back. this allows /bin/sh to distinguish ^c from ^d
* /bin/sh cleanup to not show prompt when there is no input tty
* /bin/cat chunk based [huge performance and memory savings, can handle enormous files now]
* /bin/sleep blinks now
* removed unnecessary methods from tty
* cursor blinking and scrolling terminal improvements
* fixed bad term call to tty write
/bin/sleep ^c was printing an error because it was returning the event data, which prompts was interpretting as error details [unexpected]
use a .prop file to have the robot component magic fs be ignored when running `install`
Changes
* thread: fix coma state issue where thread would not resume
* thread: add thread.current(), returns current thread [ the init thread is still technically not a thread ]
* tty: simplify the api with read, and separate all stream methods from the library
* sleep: /bin/sleep will now show blinking cursor and can be interrupted
* echo: use io.write instead of print. print loads slightly more resources