export PROMPT="print 'mfiler3 - historia - ver. 2.1.3 (c)D.Minato 2004- ? for help'|chomp"

function editor
{
    if [ -n "$FTP_SITE" ] && [ $(adir|chomp) = 0 ]
    then
        eval vftp_editor
    elif [ -n "$SSH_SITE" ] && [ $(adir|chomp) = 0 ]
    then
        eval vssh_editor
    elif [ -z "$(archive_title | chomp)" ]
    then
        export i=0
        while [ $i -lt $(job_num|chomp) ]
        do
            if [ "$(job_name $i|chomp)" = "%f" ]
            then
                let j="$i + 1"
                fg $j
                return
            fi

            let i="$i + 1"
        done

        $EDITOR $@
        reread -a
    else
        tar xfz "$(archive_title | chomp)" %f
        $EDITOR %f
    fi
}

function pager
{
    if [ -n "$FTP_SITE" ] && [ $(adir|chomp) = 0 ]
    then
        eval vftp_pager
    elif [ -n "$SSH_SITE" ] && [ $(adir|chomp) = 0 ]
    then
        eval vssh_pager
    elif [ -z "$(archive_title | chomp)" ]
    then
        export i=0
        while [ $i -lt $(job_num|chomp) ]
        do
            if [ "$(job_name $i|chomp)" = "%f" ]
            then
                let j="$i + 1"
                fg $j
                return
            fi

            let i="$i + 1"
        done

        $PAGER $@
        reread -a
    else
        tar xfz "$(archive_title | chomp)" %f
        $PAGER %f
        rm -Rf %f
    fi
}

function marking
{
    export i=0
    export max=$(file_num|chomp)
    while [ $i -lt $max ]
    do
        if [ `get_mark $1 $i|chomp` = 1 ]
        then
            print 1
            return
        fi

        let i="$i + 1"
    done

    print 0
}

function mcp_check
{
    if [ `marking $(adir)|chomp` = 1 ]
    then
        if [ -n "$FTP_SITE" ]
        then
            eval vftp_cp
        elif [ -n "$SSH_SITE" ]
        then
            eval vssh_cp
        elif [ -z "$(archive_title | chomp)" ]
        then
            if [ $VIEW_OPTION = all ]
            then
                mcp $@
            else
                cmdline "%Q mcp "'%m'" %D" -1
            fi
        else
            if [ $VIEW_OPTION = all ]
            then
                export m=$(tar xfz "$(archive_title | chomp)" %m 2>1)
                mcp $@
                let n="$# - 1"
                ary_erase @ $n
                rm -Rf $@
                msg $m
            fi
        fi
    fi
}

function mmv_check
{
    if [ `marking $(adir)|chomp` = 1 ]
    then
        if [ -n "$FTP_SITE" ]
        then
            eval vftp_mv
        elif [ -n "$SSH_SITE" ]
        then
            eval vssh_mv
        elif [ $VIEW_OPTION = all ]
        then
            mmv $@
        else
            cmdline "%Q mmv "'%m'" %D" -1
        fi
    fi
}

function trash_box
{
    if [ `marking $(adir)|chomp` = 1 ]
    then
        if [ -n "$FTP_SITE" ] && [ $(adir|chomp) = 0 ]
        then
            if [ $(choice "trashbox ok?" yes no) = 0 ]
            then
                eval vftp_trash_box
            fi
        elif [ -n "$SSH_SITE" ] && [ $(adir|chomp) = 0 ]
        then
            if [ $(choice "trashbox ok?" yes no) = 0 ]
            then
                eval vssh_trash_box
            fi
        else
            if [ "%D" = "$TRASH_BOX_DIR" ]
            then
                if [ $(choice "remove ok?" yes no) = 0 ]
                then
                    mrm $@
                fi
            else
                if [ $(choice "trashbox ok?" yes no) = 0 ]
                then
                    mmv -f $@ $TRASH_BOX_DIR
                fi
            fi
        fi
    fi
}


function mrm_check
{
    if [ `marking $(adir)|chomp` = 1 ]
    then
        if [ -n "$FTP_SITE" ] && [ $(adir|chomp) = 0 ]
        then
            if [ $(choice "remove ok?" yes no) = 0 ]
            then 
                eval vftp_rm
            fi
        elif [ -n "$SSH_SITE" ] && [ $(adir|chomp) = 0 ]
        then
            if [ $(choice "remove ok?" yes no) = 0 ]
            then 
                eval vssh_rm
            fi
        else
            if [ $(choice "remove ok?" yes no) = 0 ]
            then 
                mrm $@
            fi
        fi
    fi
}

function mln
{
    if [ `marking $(adir)|chomp` = 1 ]
    then
        export i=1
        while [ $i -le $# ]
        do
            ln -s "%D"${$i} %D2

            set_toggle_mark ${$i}
            cursor_move /${$i}
            redraw
            
            let i="$i + 1"
        done

        reread
    fi
}

function tar_compress
{
    export fname=$(basename %f)

    if [ $(marking|chomp) = 1 ]
    then
        if [ $VIEW_OPTION = all ]
        then
            cmdline "tar cvfz %D2.tgz "'%m' -8
        else
            cmdline "tar cvfz %D.tgz "'%m' -8
        fi
    else
        if [ $VIEW_OPTION = all ]
        then
            cmdline "tar cvfz %D2$fname.tgz "'%f' -8
        else
            cmdline "tar cvfz %D$fname.tgz "'%f' -8
        fi
    fi
}

function tar_compress2
{
    export fname=$(basename %f)

    if [ $(marking|chomp) = 1 ]
    then
        cmdline "tar cvfz %D.tgz "'%m' -8
    else
        cmdline "tar cvfz %D$fname.tgz "'%f' -8
    fi
}


function tar_expand
{
    if [ $VIEW_OPTION = all ]
    then
        cmdline "tar xvfz %m -C %D2" -1
    else
        cmdline "tar xvfz %m -C %D" -1
    fi
}

function tar_expand2
{
    cmdline "tar xvfz %m -C %D" -1
}


function mmake
{
    make 2>1 | tee ~/.mfiler3_tmp/mmake

    if [ $? = 0 ]
    then
        export SELECTOR_SCROLLTOP=0
        export SELECTOR_CURSOR=0

        while true
        do
            selector ~/.mfiler3_tmp/mmake $SELECTOR_SCROLLTOP $SELECTOR_CURSOR| read LINE

            if [ "$LINE" = "" ]
            then
                break
            else
                echo "$LINE" | perl -e 'while(<STDIN>) { if(/^(.+):([0-9]+):/) { print "$1\n"; print "$2"; } }' | read FNAME LNUMBER
                
                $EDITOR +$LNUMBER "$FNAME"
            fi
        done
    fi
}


function mgrep
{
    grep $@ 2>1 | tee ~/.mfiler3_tmp/mgrep

    if [ $? = 0 ]
    then
        export SELECTOR_SCROLLTOP=0
        export SELECTOR_CURSOR=0

        while true
        do
            selector ~/.mfiler3_tmp/mgrep $SELECTOR_SCROLLTOP $SELECTOR_CURSOR| read LINE

            if [ "$LINE" = "" ]
            then
                break
            else
                echo "$LINE" | perl -e 'while(<STDIN>) { if(/^(.+):(\d+):/) { print $1, "\n"; print $2; }}' | read FNAME LNUMBER

                $EDITOR +$LNUMBER "$FNAME"
            fi
        done
    fi
}

function megrep
{
    egrep $@ 2>1 | tee ~/.mfiler3_tmp/mgrep

    if [ $? = 0 ]
    then
        export SELECTOR_SCROLLTOP=0
        export SELECTOR_CURSOR=0

        while true
        do
            selector ~/.mfiler3_tmp/mgrep $SELECTOR_SCROLLTOP $SELECTOR_CURSOR| read LINE

            if [ "$LINE" = "" ]
            then
                break
            else
                echo "$LINE" | perl -e 'while(<STDIN>) { if(/^(.+):(\d+):/) { print $1, "\n"; print $2; }}' | read FNAME LNUMBER

                $EDITOR +$LNUMBER "$FNAME"
            fi
        done
    fi
}

function vgrep
{
    grep $@ 2>1 | tee ~/.mfiler3_tmp/grep_out
    
    if [ $? = 0 ]
    then
        cat ~/.mfiler3_tmp/grep_out | perl -ne '@s = split(":"); if($s[1] != 0) { print $s[0], "\n"; }' | vd
    fi
}

function vegrep
{
    grep $@ 2>1 | tee ~/.mfiler3_tmp/grep_out
    
    if [ $? = 0 ]
    then
        cat ~/.mfiler3_tmp/grep_out | perl -ne '@s = split(":"); if($s[1] != 0) { print $s[0], "\n"; }' | vd
    fi
}


function backup
{
    if [ -e $2 ]
    then
        msg "$2 exists. can't backup"
    else
        cp -Ra $@
        reread
    fi
}



function toggle_dotfile
{
    if [ $(mask|chomp) != "" ]
    then
        set_dotdir_mask 0
        set_mask ''
    else
        set_dotdir_mask 1
        set_mask '^[^\.].*'
    fi
}

function new_file
{
    if [ -n "$FTP_SITE" ] && [ $(adir|chomp) = 0 ]
    then
        eval "vftp_touch $1"
    elif [ -n "$SSH_SITE" ] && [ $(adir|chomp) = 0 ]
    then
        eval "vssh_touch $1"
    else
        touch $1
        reread -a
        cursor_move /$1
    fi
}


function rename
{
    if [ -n "$FTP_SITE" ] && [ $(adir|chomp) = 0 ]
    then
        eval "vftp_rename $1 $2"
    elif [ -n "$SSH_SITE" ] && [ $(adir|chomp) = 0 ]
    then
        eval "vssh_rename $1 $2"
    else
        if [ -e $2 ]
        then
            msg "$2 exists. cant't rename"
        else
            mv -f $1 $2

            reread -a
            cursor_move /$(basename $2)
        fi
    fi
}


function run_file_manager
{
    if [ $(uname -s | index CYGWIN) != -1 ]
    then
        cygstart . &
    elif [ $(uname -s | index Darwin) != -1 ]
    then
        open . &
    else
        if [ $(ps axw | grep -v grep | index nautilus) != -1 ]
        then
            nautilus "$PWD" 2>/dev/null
        elif [ $(ps axw | grep -v grep | index kdeinit) != -1 ]
        then
            konqueror "$PWD" 2>/dev/null &
        elif [ $(ps axw | grep -v grep | index xfdesktop) != -1 ]
        then
            thunar "$PWD" 2>/dev/null
        fi
    fi
}

function make_dir
{
    if [ -n "$FTP_SITE" ] && [ $(adir|chomp) = 0 ]
    then
        eval "vftp_mkdir $1"
    elif [ -n "$SSH_SITE" ] && [ $(adir|chomp) = 0 ]
    then
        eval "vssh_mkdir $1"
    else
        if [ ! -e $1 ]
        then
            mkdir -p $1
            reread -a
            cursor_move /$1
        else
            msg "$1 exists. can't make directory"
        fi
    fi
}

function help
{
    $PAGER << EOS
UP, CTRL-P                        cursor up
DOWN, CTRL-N                      cursor down
LEFT, CTRL-B                      cursor left
RIGHT, CTRL-F                     cursor right
CTRL-A                            cursor top
CTRL-E                            cursor bottom
PAGEUP, CTRL-U, Meta-v            cursor up a lots
PAGEDOWN, CTRL-D, CTRL-V          cursor down a lots
BACKSPACE, CTRL-H                 move to parent direcotry
\                                 move to root directory
~                                 move to home directory
CTRL + I (tab)                    change 2 directory mode or cursor move other directory
ENTER                             run cursor file(insert directory)
CTRL_C                            quit
q                                 change 1 directory mode or quit mfiler3
Q                                 quit mfiler3
CTRL+L                            reread diskt and redraw the screen
SPACE                             mark file
[                                 mark range begin
]                                 mark range end
HOME                              mark all files without directory
END                               mark all files
*                                 regex mark
+                                 mask
.                                 toggle dot file mask
c                                 copy mark file to other directory
C                                 cp
m                                 move mark file to other directory
M                                 mv
d                                 move mark file to $HOME/mtrashbox
D                                 delete mark file
e                                 edit file(run $EDITOR)
v                                 view file(run $PAGER)
r                                 rename
mark & r                          regex rename
a                                 open attribute menu
n                                 make new file
k                                 make new direcotry
b                                 make backup of file under cursor
g                                 mgrep
G                                 vgrep(virtual directory with grep)
K                                 mmake
f,/                               incremental search
F                                 virtual directory with find
META + f                          virtual directory with locate
s                                 open sort menu
V                                 open view menu
o,O                               copy direcotry path
w                                 exchange two directories
j                                 jump menu
h                                 switch command line mode
H                                 switch command line mode(show result to other xterminal)
x                                 excute
l                                 make mark file symbolic link
p                                 compression
P                                 compression2
u                                 unpack
U                                 unpack2
:                                 run shell($SHELL)
!                                 run file manager
#                                 root file operation
$                                 system menu
CTRL + T                          new directory
CTRL + W                          remove current directory
Meta+0-9                          activate directory
Meta + Left                       move to previous directory
Meta + Right                      move to forward directory
1-9                               forground job
@                                 open drag and drop menu
EOS
}

###############################################################################
# マークレンジ
###############################################################################

function mark_range_start
{
    export MARK_RANGE_BEGIN=$(cursor|chomp)
}

function mark_range_end
{
    export i=$MARK_RANGE_BEGIN
    while [ $i -le $(cursor|chomp) ]
    do
        set_toggle_mark $i

        let i="$i + 1"
    done
}

function vftp_reread
{
    export DIR=$(adir|chomp)
    activate 0
    lftp -u $FTP_USER,$FTP_PASS $FTP_SITE -e "cd $FTP_PATH; ls; quit" | perl -e 'while(<STDIN>) { @c = split; if(scalar(@c) == 9) { if($c[7] >= 1900 and $c[7] < 3000) { $c7 = "00:00"; $c8 = $c[7]; } else { $c7 = $c[7]; $d = `date`; $c8 = substr($d, 0, 4); }; print $c[0], " ", $c[2], " ", $c[3], " ", $c[4], " ", $c[5], " ", $c[6], " ", $c7, " ", $c8, " ", $c[8], "\n"; } }' | vd2
    activate $DIR

    if [ $(file_num 0|chomp) = 1 ]
    then
        vftp_quit
    fi
}

function vftp
{
    export FTP_SITE=$1
    export FTP_PATH=""
    export FTP_USER=$2
    export FTP_PASS=$3

    vftp_reread
}

function vftp_cd
{
    if [ $1 = ".." ]
    then
        if [ -n "$FTP_PATH" ]
        then
            echo $FTP_PATH | perl -e '$path = <STDIN>; $path = substr($path, 0, rindex($path, "/", length($path)-3)+1); print $path' | read FTP_PATH
        fi
    else
        export FTP_PATH=${FTP_PATH}$1/
    fi

    vftp_reread
}

function vftp_quit
{
    export FTP_SITE=""
    vdfinish
}

function vftp_touch
{
    touch ~/.mfiler3_tmp/$1

    lftp -u $FTP_USER,$FTP_PASS $FTP_SITE -e "cd $FTP_PATH; put ~/.mfiler3_tmp/$1; quit"

    rm -Rf ~/.mfiler3_tmp/$1

    vftp_reread
}

function vftp_mkdir
{
    lftp -u $FTP_USER,$FTP_PASS $FTP_SITE -e "cd $FTP_PATH; mkdir $1; quit"

    vftp_reread
}

function vftp_rm
{
    if [ `marking $(adir)|chomp` = 1 ]
    then
        lftp -u $FTP_USER,$FTP_PASS $FTP_SITE -e "cd $FTP_PATH; rm %m; quit"

        vftp_reread
    fi
}

function vftp_trash_box
{
    if [ `marking $(adir)|chomp` = 1 ]
    then
        lftp -u $FTP_USER,$FTP_PASS $FTP_SITE -e "cd $FTP_PATH; lcd $TRASH_BOX_DIR; get %m; rm %m; quit"

        vftp_reread
    fi
}

function vftp_editor
{
    mkdir -p ~/.mfiler3_tmp/ftp
    lftp -u $FTP_USER,$FTP_PASS $FTP_SITE -e "cd $FTP_PATH; lcd ~/.mfiler3_tmp/ftp/; get %f; quit"
    $EDITOR ~/.mfiler3_tmp/ftp/%f
    lftp -u $FTP_USER,$FTP_PASS $FTP_SITE -e "cd $FTP_PATH; lcd ~/.mfiler3_tmp/ftp/; put %f; quit"
    rm -Rf ~/.mfiler3_tmp/ftp/%f

    vftp_reread
}

function vftp_pager
{
    mkdir -p ~/.mfiler3_tmp/ftp
    lftp -u $FTP_USER,$FTP_PASS $FTP_SITE -e "cd $FTP_PATH; lcd ~/.mfiler3_tmp/ftp/; get %f; quit"
    $PAGER ~/.mfiler3_tmp/ftp/%f
    rm -Rf ~/.mfiler3_tmp/ftp/%f
}

function vftp_cp
{
    if [ $(adir|chomp) = 0 ]
    then
        lftp -u $FTP_USER,$FTP_PASS $FTP_SITE -e "cd $FTP_PATH; lcd %D2; get %m; quit"
        reread -s
    else
        lftp -u $FTP_USER,$FTP_PASS $FTP_SITE -e "cd $FTP_PATH; put %m; quit"
        vftp_reread
    fi
}

function vftp_mv
{
    if [ $(adir|chomp) = 0 ]
    then
        lftp -u $FTP_USER,$FTP_PASS $FTP_SITE -e "cd $FTP_PATH; lcd %D2; get %m; rm %m; quit"

        reread -s
        vftp_reread
    else
        lftp -u $FTP_USER,$FTP_PASS $FTP_SITE -e "cd $FTP_PATH; put %m; quit"
        rm -Rf %m
        reread -a
        vftp_reread
    fi
}

function vftp_rename
{
    if [ $(adir|chomp) = 0 ]
    then
        lftp -u $FTP_USER,$FTP_PASS $FTP_SITE -e "cd $FTP_PATH; mv $1 $2; quit"
        vftp_reread
    fi
}

function vssh_reread
{
    export DIR=$(adir|chomp)
    activate 0
    ssh ${SSH_USER}@$SSH_SITE "cd $SSH_PATH; ls -al" | perl -e 'while(<STDIN>) { @l = split; if(scalar(@l) >= 8 and $l[7] ne "..") { @time = split(/-/, $l[5]); if($time[1] eq "01") { $montn = "Jan"; } elsif($time[1] eq "02") { $month = "Feb"; } elsif($time[1] eq "03") { $month = "Mar"; } elsif($time[1] eq "04") { $month = "Apr"; } elsif($time[1] eq "05") { $month = "May"; } elsif($time[1] eq "06") { $month = "Jun"; } elsif($time[1] eq "07") { $month = "Jul"; } elsif($time[1] eq "08") { $month = "Aug"; } elsif($time[1] eq "09") { $month = "Sep"; } elsif($time[1] eq "10") { $month = "Oct"; } elsif($time[1] eq "11") { $month = "Nov"; } elsif($time[1] eq "12") { $month = "Dec"; }; print $l[0], " ", $l[2], " ", $l[3], " ", $l[4], " ", $month, " ", $time[2], " ", $l[6], " ", $time[0], " ", join(" ", @l[7..scalar(@l)-1]), "\n"; } }' | vd2
    activate $DIR

    if [ $(file_num 0|chomp) = 1 ]
    then
        vssh_quit
    fi
}

function vssh
{
    export SSH_SITE=$1
    export SSH_USER=$2

    export SSH_PATH="/home/$2/"

    vssh_reread
}

function vssh_quit
{
    export SSH_SITE=""
    vdfinish
}

function vssh_cd
{
    if [ "$1" = ".." ]
    then
        echo $SSH_PATH | perl -e '$path = <STDIN>; $path = substr($path, 0, rindex($path, "/", length($path)-3)+1); print $path' | read SSH_PATH
    else
        export SSH_PATH=${SSH_PATH}$1/
    fi

    vssh_reread
}

function vssh_touch
{
    ssh ${SSH_USER}@$SSH_SITE "cd $SSH_PATH; touch $1"

    vssh_reread
}

function vssh_mkdir
{
    ssh ${SSH_USER}@$SSH_SITE "cd $SSH_PATH; mkdir $1"

    vssh_reread
}

function vssh_rename
{
    if [ $(adir|chomp) = 0 ]
    then
        ssh ${SSH_USER}@$SSH_SITE "cd $SSH_PATH; if [ ! -e $2 ]; then mv $1 $2; fi"
        vssh_reread
    fi
}

function vssh_rm
{
    if [ `marking $(adir)|chomp` = 1 ]
    then
        ssh ${SSH_USER}@$SSH_SITE "cd $SSH_PATH; rm -Rf %m"

        vssh_reread
    fi
}

function vssh_trash_box
{
    if [ `marking $(adir)|chomp` = 1 ]
    then
        markfiles MFILES MFILES_NUM

        export i=0
        ary_new CMD
        ary_add CMD "scp"
        ary_add CMD "-r"
        while [ $i -lt $MFILES_NUM ]
        do
            ary_add CMD ${SSH_USER}@${SSH_SITE}:\"${SSH_PATH}${MFILES$i}\"
            let i="$i + 1"
        done

        ary_add CMD $TRASH_BOX_DIR
        $CMD

        if [ $? = 0 ]
        then
            ssh ${SSH_USER}@$SSH_SITE "cd $SSH_PATH; rm -Rf %m"
        fi

        vssh_reread
    fi
}
function vssh_cp
{
    if [ `marking $(adir)|chomp` = 1 ]
    then
        if [ $(adir|chomp) = 0 ]
        then
            markfiles MFILES MFILES_NUM

            export i=0
            ary_new CMD
            ary_add CMD "scp"
            ary_add CMD "-r"
            while [ $i -lt $MFILES_NUM ]
            do
                ary_add CMD ${SSH_USER}@${SSH_SITE}:\"${SSH_PATH}${MFILES$i}\"
                let i="$i + 1"
            done

            ary_add CMD %D2
            $CMD

            reread -s
        else
            scp -r %M ${SSH_USER}@${SSH_SITE}:${SSH_PATH}
            if [ $? = 1 ]
            then
                break
            fi

            vssh_reread
        fi
    fi
}

function vssh_mv
{
    if [ `marking $(adir)|chomp` = 1 ]
    then
        if [ $(adir|chomp) = 0 ]
        then
            markfiles MFILES MFILES_NUM

            export i=0
            ary_new CMD
            ary_add CMD "scp"
            ary_add CMD "-r"
            while [ $i -lt $MFILES_NUM ]
            do
                ary_add CMD ${SSH_USER}@${SSH_SITE}:\"${SSH_PATH}${MFILES$i}\"
                let i="$i + 1"
            done

            ary_add CMD %D2
            $CMD

            if [ $? = 0 ]
            then
                ssh ${SSH_USER}@$SSH_SITE "cd $SSH_PATH; rm -Rf %m"
            fi

            vssh_reread
            reread
        else
            scp -r %M ${SSH_USER}@${SSH_SITE}:${SSH_PATH}
            if [ $? = 0 ]
            then
                rm -Rf %m
            fi

            vssh_reread
            reread
        fi
    fi
}

function vssh_editor
{
    mkdir -p ~/.mfiler3_tmp/ssh
    scp -r ${SSH_USER}@${SSH_SITE}:${SSH_PATH}"%f" ~/.mfiler3_tmp/ssh
    $EDITOR ~/.mfiler3_tmp/ssh/%f
    scp -r ~/.mfiler3_tmp/ssh/%f ${SSH_USER}@${SSH_SITE}:${SSH_PATH}
    rm -Rf ~/.mfiler3_tmp/ssh/%f

    vssh_reread
}

function vssh_pager
{
    mkdir -p ~/.mfiler3_tmp/ssh
    scp -r ${SSH_USER}@${SSH_SITE}:${SSH_PATH}"%f" ~/.mfiler3_tmp/ssh
    $PAGER ~/.mfiler3_tmp/ssh/%f
    rm -Rf ~/.mfiler3_tmp/ssh/%f
}

