#!/bin/bash #////////////////////////////////////////////////////////////////////////////////////////// #//BOCA Online Contest Administrator. Copyright (c) 2003- Cassio Polpo de Campos. #//It may be distributed under the terms of the Q Public License version 1.0. A copy of the #//license can be found with this software or at http://www.opensource.org/licenses/qtpl.php #// #//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, #//INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR #//PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER #//OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR #//CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR #//PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING #//OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #/////////////////////////////////////////////////////////////////////////////////////////// #Last modified: 25/may/2010 by cassiopc # # parameters are: # $1 base_filename # $2 source_file # $3 input_file # $4 languagename # $5 problemname # $6 timelimit # # the output of the submission should be directed to the standard output # # the return code show what happened: # 0 ok # 1 compile error # 2 runtime error # 3 timelimit exceeded # other_codes are unknown to boca: in this case BOCA will present the # last line of standard output to the judge umask 0022 chown nobody.nogroup . # this script makes use of safeexec to execute the code with less privilegies # make sure that directories below are correct. grep=`which grep` [ -x "$grep" ] || grep=/bin/grep sf=`which safeexec` [ -x "$sf" ] || sf=/usr/bin/safeexec pascal=`which fpc` [ -x "$pascal" ] || pascal=/usr/bin/fpc if [ "$1" == "" -o "$2" == "" -o "$3" == "" ]; then echo "parameter problem" exit 43 fi if [ ! -r $2 ]; then echo "$2 not found or it's not readable" exit 44 fi if [ ! -r $3 ]; then echo "$3 not found or it's not readable" exit 45 fi if [ ! -x $sf ]; then echo "$sf not found or it's not executable" exit 46 fi if [ ! -x $pascal ]; then echo "$pascal not found or it's not executable" exit 47 fi prefix=$1 name=$2 input=$3 # setting up the timelimit according to the problem # note that problems should spelling the same as inside BOCA if [ "$6" == "" ]; then time=5 else time=$6 fi let ttime=$time+30 $pascal -o$prefix $name >compiler.out 2>compiler.out $grep -irq linking compiler.out ret=$? $grep -irq "lines compiled" compiler.out ret2=$? if [ "$ret" != "0" -o "$ret2" != "0" ]; then cat compiler.out echo "Compiling Error: $ret" exit 1 else $sf -F10 -t$time -T$ttime -i$input -opascal.out -n0 -R. ./$prefix ret=$? if [ -f pascal.out ]; then cat pascal.out $grep -irq "runtime error" pascal.out ret2=$? if [ "$ret2" = "0" ]; then echo "Strange output - possible runtime error" if [ $ret -lt 4 ]; then ret=48 fi fi else echo "Output file not found - possible runtime error" fi fi exit $ret