% (C)1992 Institute for New Generation Computer Technology
% (Read COPYRIGHT for detailed information.)

#! /usr/local/bin/tcsh
###############################################################################
#
# File:		mgtpx_s
# RCS:		$Header: $
# Description:	mgtpx_s_{merc,clink,tm,index} batch script
# Author:       
# Created:      
# Language:	N/A
# Package:	N/A
# Status:	Experimental (Do Not Distribute)
#
###############################################################################

# unsetenv LANG
if ( $?LANG ) unsetenv LANG

# set coredumpsize size
limit coredumpsize 0

# set Usage
set COMNAME = `basename $0`
set USAGE = "Usage: $COMNAME [-c][-d][-h][-l cputime]\
                [-p program][-r revision][-v version] problem ..."

# set default value
set C_FLAG = 0
set D_FLAG = 0
set H_FLAG = 0
set L_FLAG = 0
set P_FLAG = 0
set R_FLAG = 0
set V_FLAG = 0
set CPUTIME = 0                     # less than 0 is infinity.
set HOMEDIR = `pwd`
set TPTPDIR = $HOME/TPTP/Problems   # for ss131,132
set MGTPDIR = $HOME/TPTP/mgtp
set KLICDIR = $HOME/TPTP/mgtp/klic
set PROGRAMS = mgtpx_s              # mgtpx or mgtpx_s
set VERSIONS = (merc clink tm index)
set REVISIONS = (sort_time main_time time stats)
#and others...
# set TPTPDIR = /home2/tptp/TPTP-v1.0.0/Problems # for ss109

# analysis option and value
set argv = `getopt cdhl:p:r:v: $argv`

while( $#argv > 0 )
    set opt = $argv[1]
    shift
    switch( $opt )
    case -c:
        set C_FLAG = 1
        breaksw
    case -d:
        set D_FLAG = 1
        breaksw
    case -h:
        set H_FLAG = 1
        breaksw
    case -l:
        set L_FLAG = 1
        set CPUTIME = $argv[1]
        shift
        breaksw
    case -p:
        set P_FLAG = 1
        set PROGRAMS = $argv[1]
        shift
        breaksw
    case -r:
        set R_FLAG = 1
        set REVISIONS = $argv[1]
        shift
        breaksw
    case -v:
        set V_FLAG = 1
        set VERSIONS = $argv[1]
        shift
        breaksw
    case --:
        if( $#argv >= 1 ) then
            break
        else
            echo "$USAGE"
            exit 1
        endif
        breaksw
    endsw
end 

# print option flag for debug.
if( $D_FLAG == 1 ) then
    echo "$COMNAME : CFLAG=$C_FLAG DFLAG=$D_FLAG HFLAG=$H_FLAG \
        LFLAG=$L_FLAG PFLAG=$P_FLAG RFLAG=$R_FLAG VFLAG=$V_FLAG \
        cputime=$CPUTIME programs=($PROGRAMS) versions=($VERSIONS) \
        revisions=($REVISIONS) problems=$argv"
endif

# print help message.
if( $H_FLAG == 1 ) then
    echo "$USAGE"
    echo ""
    echo "-c  Recompile."
    echo "-d  Print Debug information."
    echo "-h  Print this Help message."
    echo "-l  Set cputime Limit."
    echo "-p  Set Programs name."
    echo "-r  Set programs Revisions."
    echo "-v  Set programs Versions."
    exit 0
endif

###### MAIN LOOP ######
foreach PROBLEM ( $argv )
    echo    "====================================================="
    echo -n "date      : "; date
    echo    "problem   : "$PROBLEM
    echo    "====================================================="

    ###### TRANSLATE TPTP FORMAT INTO MGTP FORMAT ######
    # set domain directory
    set DOMDIR = `echo $PROBLEM | awk '{print substr($0,1,3)}'`

    # check "PROBLEM.p"
    if( ! -r $TPTPDIR/$DOMDIR/${PROBLEM}.p ) then
        echo  "$COMNAME : No such file ${PROBLEM}.p"
        continue
    endif

    # make domain directory
    if( ! -d $MGTPDIR/Problems/$DOMDIR ) then
    echo  "$comname : mkdir $MGTPDIR/Problems/$DOMDIR"
        mkdir $MGTPDIR/Problems/$DOMDIR
    endif     

    # translate TPTP into MGTP
    if(( ! -r $MGTPDIR/Problems/$DOMDIR/${PROBLEM}.mg ||
             -z $MGTPDIR/Problems/$DOMDIR/${PROBLEM}.mg)) then
        $MGTPDIR/tptp2mg $PROBLEM
    endif

    ###### PROBLEMS LOOP ######
    foreach VERSION ( $VERSIONS )
        foreach REVISION ( $REVISIONS )

        # set target,mgtp
        echo "-----------------------------------------------------"
        set MGTP = ${PROGRAMS}_${VERSION}_${REVISION}.kl1
        set TARGET = ${PROBLEM}_s_${VERSION}.kl1

        ###### TRANSLATE MGTP FORMAT INTO KL1 LANGUAGE ######
        # check "PROBLEM.mg"
        if( ! -r $MGTPDIR/Problems/$DOMDIR/${PROBLEM}.mg ) then
            echo "$comname : No such file ${PROBLEM}.mg"
            continue
        endif

        # check domain directory
        if( ! -d $KLICDIR/$DOMDIR ) then
            echo "$comname : mkdir $KLICDIR/$DOMDIR"
            mkdir $KLICDIR/$DOMDIR
        endif

        # translate mgtp into kl1.
        if( $C_FLAG == 1 ) then
            echo "translate : mg2klic $PROBLEM sort $VERSION"
            # $MGTPDIR/mg2klic $PROBLEM sort $VERSION
            time $MGTPDIR/mg2klic $PROBLEM sort $VERSION
        else if(( ! -r $KLICDIR/$DOMDIR/$TARGET ||
                    -z $KLICDIR/$DOMDIR/$TARGET)) then
            echo "translate : mg2klic $PROBLEM sort $VERSION"
            # $MGTPDIR/mg2klic $PROBLEM sort $VERSION
            time $MGTPDIR/mg2klic $PROBLEM sort $VERSION
        endif

        ##### COMPILE/RUN PROBLEM/PROGRAM ON KLIC #####
        # set cputime
        if( $CPUTIME == 0 ) then
            unlimit cputime
        else
            echo "cputime   : $CPUTIME"
            limit cputime $CPUTIME
        endif

        # compile problem.kl1/program.kl1
        cd $KLICDIR

        if( $REVISION == sort_time || $REVISION == main_time ) then
            echo "compile   : klic -O2 $DOMDIR/$TARGET \
                    $DOMDIR/${PROBLEM}_times.kl1 $PROGRAMS/$MGTP"
            time klic -O2 $DOMDIR/$TARGET \
                    $DOMDIR/${PROBLEM}_times.kl1 $PROGRAMS/$MGTP
        else
            echo "compile   : klic -O2 $DOMDIR/$TARGET $PROGRAMS/$MGTP"
            time klic -O2 $DOMDIR/$TARGET $PROGRAMS/$MGTP
        endif

        # execute with time command
        if( $status == 0 ) then
            echo "execute   : time $KLICDIR/a.out -h1m"
            time $KLICDIR/a.out -h1m
        else
            echo "COMPILE FAIL"
        endif
        
        # set home directory 
        cd $HOMEDIR
        end
    end
end

