## To build: ``` make all ``` ## To use: ``` ./wall # enter some numbers ./wall | some_command # enter some strings or numbers, depending on command ``` ## Try: ``` ./try.sh ``` You may of course run the commands manually and enter text as you wish. For instance you might try one or both of: ``` ./wall | bc ./wall | cat ``` and enter some input like: ``` x*x 2^x quit # for the cat version ``` which the script does through a pipeline except that here you can enter more text if you wish, line by line. ## Judges' remarks: What we found amazing was how the flow of control was transferred between subroutines. Careful inspection will show that the array of pointers to functions named `vi` refers to functions which seem to not be directly called. Even so, these pointers to functions are being used as an argument to `signal(3)` (used both with and without an arg - but how?). Can you determine why this is being done and how it is being exploited? Some compilers complained about this file, so we changed: `=++I` to `= ++I`. ## Author's remarks: No remarks were provided by the author.