#!/bin/bash
#Pfind - File finder
#Copyright 2007
#Sigmund Berglund

#------------------------------
#This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2.

#This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. <http://www.gnu.org/licenses/>.
#------------------------------

#Thanks to 
#  klhrevolutionist for ideas, code support and help with config file
#  Trapster for sed syntax. HairyWill and Getnikar for Slideshow.
#  Disciple for contribution and bugfixing.
#  Jason Pline for code and for pointing out multiuser issue. 

export PROGPID=$$ #every tmp-file gets a tail of PID. This seperates different instances of Pfind
export PROGPATH=`dirname "$0"`"/"
VERSION="2.4"
TAB="$PROGPATH""tab.png"
TAB130="$PROGPATH""tab130.png"

search (){
if [ "$SEARCHPATHS" = "/  (all files)" ]; then SEARCHPATHS="/"; fi
if [ "$SEARCHPATHS" = "/" ]; then TMP="すべてのファイル"; else TMP="$SEARCHPATHS"; fi
echo "$TMP から '$SEARCHSTRING' を検索しています。"> /tmp/pfind-splashtext
echo 0 > /tmp/pfind-splash #reset progress bar
"$PROGPATH"box_splash &
mkdir /tmp/searchresult$PROGPID > /dev/null 2>&1
echo -e "\c" > /tmp/pfind-ext$PROGPID
echo -e "\c" > /tmp/pfind-files$PROGPID
#set days fo atime / ctime / mtime
YEAR=`echo "$DATE_FROM" | cut -d "/" -f 3`
if [ $YEAR -lt 1970 ]; then ERROR="Date can't be earlier than 1/1 1970."; error_dialog; fi
TODAY=`date +%s`; TODAY=`expr $TODAY / 60 / 60 / 24`
TMP=`date -d $DATE_FROM +%s`
TMP2=`expr $TMP / 60 / 60 / 24`
DAYS_FROM1=`expr $TODAY - $TMP2`
TMP=`date -d $DATE_TO +%s`
TMP1=`expr $TMP / 60 / 60 / 24`
TMP2=`expr $TODAY - $TMP1`
DAYS_TO1=`expr $TMP2 - 1`
echo $DATE_TO1
TIME=""
if [ $CHKMTIME = "true" ]; then TIME=" -mtime -$DAYS_FROM1 -mtime +$DAYS_TO1"; fi
if [ $CHKATIME = "true" ]; then TIME=" -atime -$DAYS_FROM1 -atime +$DAYS_TO1"; fi
if [ $CHKCTIME = "true" ]; then TIME=" -ctime -$DAYS_FROM1 -ctime +$DAYS_TO1"; fi
#set permission mode
if [ $CHK_UX = "true" ]; then UX=1; else UX=0; fi 
if [ $CHK_UW = "true" ]; then UW=2; else UW=0; fi 
if [ $CHK_UR = "true" ]; then UR=4; else UR=0; fi 
if [ $CHK_GX = "true" ]; then GX=1; else GX=0; fi 
if [ $CHK_GW = "true" ]; then GW=2; else GW=0; fi 
if [ $CHK_GR = "true" ]; then GR=4; else GR=0; fi 
if [ $CHK_OX = "true" ]; then OX=1; else OX=0; fi 
if [ $CHK_OW = "true" ]; then OW=2; else OW=0; fi 
if [ $CHK_OR = "true" ]; then OR=4; else OR=0; fi 
OWN=`expr $UX + $UW + $UR`
GRP=`expr $GX + $GW + $GR`
OTH=`expr $OX + $OW + $OR`
PERM=""
if [ $OWN != 0 ]; then PERM="-perm"; fi
if [ $GRP != 0 ]; then PERM="-perm"; fi
if [ $OTH != 0 ]; then PERM="-perm"; fi
if [ "$PERM" = "-perm" ]; then PERM=" -perm $OWN$GRP$OTH"; fi
#prepare variables to search
if [ $CHKDOC = "true" ];	then echo -e "$EXTDOC \c" >> /tmp/pfind-ext$PROGPID; fi
if [ $CHKPIC = "true" ];	then echo -e "$EXTPIC \c" >> /tmp/pfind-ext$PROGPID; fi
if [ $CHKMUSIC = "true" ];	then echo -e "$EXTMUSIC \c" >> /tmp/pfind-ext$PROGPID; fi
if [ $CHKVIDEO = "true" ];	then echo -e "$EXTVIDEO \c" >> /tmp/pfind-ext$PROGPID; fi
if [ $CHKMAIL = "true" ];	then echo -e "$EXTMAIL \c" >> /tmp/pfind-ext$PROGPID; fi
if [ $CHKZIP = "true" ];	then echo -e "$EXTZIP \c" >> /tmp/pfind-ext$PROGPID; fi
if [ $CHKCODE = "true" ];	then echo -e "$EXTCODE \c" >> /tmp/pfind-ext$PROGPID; fi
EXT=`cat /tmp/pfind-ext$PROGPID | sed -e 's/ ./\\\|\\\./g'`
if [ $CHKEXACT = "false" ]; then SEARCHSTRING2="*$SEARCHSTRING*"; else SEARCHSTRING2="$SEARCHSTRING"; fi
if [ $CHKCASE = "true" ]; then NAME="-name"; GREPCASE=""; else NAME="-iname"; GREPCASE="-i"; fi #case (in)sensitive
if [ $CHKFOLLOW_SYM = "true" ]; then FOLLOW_SYM="-L"; else FOLLOW_SYM="-P"; fi #follow symlink?
FIND3X="false"
if [ $CHKFILE = "true" ]; then FIND3X="true"; fi #only if type is specified it will run find 3 times
if [ $CHKDIR = "true" ]; then FIND3X="true"; fi
if [ $CHKSYMLN = "true" ]; then FIND3X="true"; fi
if [ $CHKREC = "true" ]; then DEPTH=""; else DEPTH="-maxdepth 1"; fi
if [ $CHKXDEV = "true" ]; then XDEV="-xdev"; else XDEV=""; fi
if [ "$USER" != "" ]; then USER2=" -user $USER"; fi
if [ "$SIZE_GT" != "" ]; then SIZE_GT2=" -size +$SIZE_GT"; fi
if [ "$SIZE_LT" != "" ]; then SIZE_LT2=" -size -$SIZE_LT"; fi
FINDOPTIONS="$DEPTH$PERM$XDEV$TIME$USER2$SIZE_GT2$SIZE_LT2 $NAME" #optional parameters to find
#Start loop with (all) defined searchpaths
TMP=`echo "$SEARCHPATHS" | sed -e "s/  / /g" | sed -e "s/ \[OR\]/\[OR\]/g" | sed -e "s/\[OR\] /\[OR\]/g" | sed -e "s/ /{ð®SSSđþ}/g" | sed -e "s/\[OR\]/ /g" `
for I in $TMP; do
	SEARCHPATH=`echo $I | sed -e "s/{ð®SSSđþ}/ /g"`
	echo -e "find $FOLLOW_SYM \"$SEARCHPATH\" $FINDOPTIONS \"$SEARCHSTRING2\" \c" > /tmp/pfind-execfind$PROGPID #default find
	echo -e "grep $GREPCASE -l \"$SEARCHSTRING\" "'"$TMP2"'" \c" > /tmp/pfind-execgrep$PROGPID #build default grep
	#====== Building find-command ======
	#[OR]
	TMP=`echo "$SEARCHSTRING2" | grep -o "[OR]"` #Check if [OR] is used
	if [ "$TMP" ]; then
		TMP=`echo "$SEARCHSTRING2" | sed -e "s/\ \[/\[/g" | sed -e "s/\]\ /\]/g" | sed -e "s/\[OR\]/\|/g"` #cut -d syntax
		if [ $CHKEXACT = "false" ]; then TMP=`echo "$TMP" | sed -e 's/|/*|*/g'`; fi
		STR1=`echo "$TMP" | cut -d "|" -f 1`
		FIND1="$FINDOPTIONS \"$STR1\""
		GREP1=`echo '\|'"$STR1"`
		STR2=`echo "$TMP" | cut -d "|" -f 2`
		if [ "$STR2" ]; then
			FIND2="-o $FINDOPTIONS \"$STR2\""
			GREP2=`echo '\|'"$STR2"`
		fi
		STR3=`echo "$TMP" | cut -d "|" -f 3`
		if [ "$STR3" ]; then 
			FIND3="-o $FINDOPTIONS \"$STR3\""
			GREP3=`echo '\|'"$STR3"`
		fi
		STR4=`echo "$TMP" | cut -d "|" -f 4`
		if [ "$STR4" ]; then
			FIND4="-o $FINDOPTIONS \"$STR4\""
			GREP4=`echo '\|'"$STR4"`
		fi
		STR5=`echo "$TMP" | cut -d "|" -f 5`
		if [ "$STR5" ]; then
			FIND5="-o $FINDOPTIONS \"$STR5\""
			GREP5=`echo '\|'"$STR5"`
		fi
		echo -e "find $FOLLOW_SYM \"$SEARCHPATH\" $FIND1 $FIND2 $FIND3 $FIND4 $FIND5 \c" > /tmp/pfind-execfind$PROGPID
		echo -e "grep $GREPCASE -l \"('$GREP1$GREP2$GREP3$GREP4$GREP5\|')\" "'"$TMP2"'" \c" > /tmp/pfind-execgrep$PROGPID
	fi
	#[AND]
	TMP=`echo "$SEARCHSTRING2" | grep -o "[AND]"` #Check if [AND] is used
	if [ "$TMP" ]; then
		TMP=`echo "$SEARCHSTRING2" | sed -e "s/\ \[/\[/g" | sed -e "s/\]\ /\]/g" | sed -e "s/\[AND\]/*\|*/g"` #cut -d syntax
		STR1=`echo "$TMP" | cut -d "|" -f 1`
		FIND1="$FINDOPTIONS \"$STR1\""
		STR2=`echo "$TMP" | cut -d "|" -f 2`
		if [ "$STR2" ]; then FIND2="-a $FINDOPTIONS \"$STR2\""; fi
		STR3=`echo "$TMP" | cut -d "|" -f 3`
		if [ "$STR3" ]; then FIND3="-a $FINDOPTIONS \"$STR3\""; fi
		STR4=`echo "$TMP" | cut -d "|" -f 4`
		if [ "$STR4" ]; then FIND4="-a $FINDOPTIONS \"$STR4\""; fi
		STR5=`echo "$TMP" | cut -d "|" -f 5`
		if [ "$STR5" ]; then FIND5="-a $FINDOPTIONS \"$STR5\""; fi
		echo -e "find $FOLLOW_SYM \"$SEARCHPATH\" $FIND1 $FIND2 $FIND3 $FIND4 $FIND5 \c" > /tmp/pfind-execfind$PROGPID
	fi
	chmod 722 /tmp/pfind-execfind$PROGPID
	#====== FIND ======
	if [ $CHKFILENAME = "true" ]; then
		if [ $FIND3X = "true" ]; then
			if [ $CHKFILE = "true" ]; then
				sed -i -e "s/-o/-type f -o/g" /tmp/pfind-execfind$PROGPID #pushing -type f to command
				sed -i -e "s/-a/-type f -a/g" /tmp/pfind-execfind$PROGPID
				echo -e "-type f \c" >> /tmp/pfind-execfind$PROGPID
				/tmp/pfind-execfind$PROGPID >> /tmp/pfind-files$PROGPID; fi
			if [ $CHKDIR = "true" ]; then
				sed -i -e "s/-o/-type d -o/g" /tmp/pfind-execfind$PROGPID #pushing -type d to command
				sed -i -e "s/-a/-type d -a/g" /tmp/pfind-execfind$PROGPID
				echo -e "-type d \c" >> /tmp/pfind-execfind$PROGPID
				/tmp/pfind-execfind$PROGPID >> /tmp/pfind-files$PROGPID; fi
			if [ $CHKSYMLN = "true" ];	then
				sed -i -e "s/-o/-type l -o/g" /tmp/pfind-execfind$PROGPID #pushing -type l to command
				sed -i -e "s/-a/-type l -a/g" /tmp/pfind-execfind$PROGPID
				echo -e "-type l \c" >> /tmp/pfind-execfind$PROGPID
				/tmp/pfind-execfind$PROGPID >> /tmp/pfind-files$PROGPID; fi
		else
			/tmp/pfind-execfind$PROGPID >> /tmp/pfind-files$PROGPID #Run find command
		fi
		if test -n "$EXT"; then
			cat /tmp/pfind-files$PROGPID | grep -i "('$EXT')" > /tmp/pfind-files$PROGPID; fi #find only files with choosen extension
	fi
	#====== GREP =======
	if [ $CHKCONTENT = "true" ]; then
		chmod 722 /tmp/pfind-execgrep$PROGPID
		echo "find $FOLLOW_SYM \"$SEARCHPATH\" $FINDOPTIONS \"*\" -type f" > /tmp/pfind-execfind$PROGPID #build command
		chmod 722 /tmp/pfind-execfind$PROGPID
		/tmp/pfind-execfind$PROGPID > /tmp/pfind-allfiles$PROGPID
		if test -n "$EXT"; then
			cat /tmp/pfind-allfiles$PROGPID | grep -i "('$EXT')" > /tmp/pfind-allfiles$PROGPID	
		fi
		sed -i -e "s/ /{ð®Sđþ}/g" /tmp/pfind-allfiles$PROGPID
		#All this to make [AND] allowed to grep 
		TMP=`echo "$SEARCHSTRING" | grep -o "[AND]"` #Check if [AND] is used
		if [ "$TMP" ]; then
			TMP=`cat /tmp/pfind-allfiles$PROGPID`
			echo -e "\c" > /tmp/pfind-allfiles$PROGPID
			STR1=`echo "$STR1" | sed -e "s/*//g"`
			for I in `echo "$TMP"`; do
				TMP2=`echo $I | sed -e "s/{ð®Sđþ}/ /g"`
				grep $GREPCASE -l "$STR1" "$TMP2" >> /tmp/pfind-allfiles$PROGPID
			done
			if [ "$STR2" ]; then
				sed -i -e "s/ /{ð®Sđþ}/g" /tmp/pfind-allfiles$PROGPID
				TMP=`cat /tmp/pfind-allfiles$PROGPID`
				echo -e "\c" > /tmp/pfind-allfiles$PROGPID
				STR2=`echo "$STR2" | sed -e "s/*//g"`
				for I in `echo "$TMP"`; do
					TMP2=`echo $I | sed -e "s/{ð®Sđþ}/ /g"`
					grep $GREPCASE -l "$STR2" "$TMP2" >> /tmp/pfind-allfiles$PROGPID
				done
			fi
			if [ "$STR3" ]; then
				sed -i -e "s/ /{ð®Sđþ}/g" /tmp/pfind-allfiles$PROGPID
				TMP=`cat /tmp/pfind-allfiles$PROGPID`
				echo -e "\c" > /tmp/pfind-allfiles$PROGPID
				STR3=`echo "$STR3" | sed -e "s/*//g"`
				for I in `echo "$TMP"`; do
					TMP2=`echo $I | sed -e "s/{ð®Sđþ}/ /g"`
					grep $GREPCASE -l "$STR3" "$TMP2" >> /tmp/pfind-allfiles$PROGPID
				done
			fi
			if [ "$STR4" ]; then
				sed -i -e "s/ /{ð®Sđþ}/g" /tmp/pfind-allfiles$PROGPID
				TMP=`cat /tmp/pfind-allfiles$PROGPID`
				echo -e "\c" > /tmp/pfind-allfiles$PROGPID
				STR4=`echo "$STR4" | sed -e "s/*//g"`
				for I in `echo "$TMP"`; do
					TMP2=`echo $I | sed -e "s/{ð®Sđþ}/ /g"`
					grep $GREPCASE -l "$STR4" "$TMP2" >> /tmp/pfind-allfiles$PROGPID
				done
			fi
			if [ "$STR5" ]; then
				sed -i -e "s/ /{ð®Sđþ}/g" /tmp/pfind-allfiles$PROGPID
				TMP=`cat /tmp/pfind-allfiles$PROGPID`
				echo -e "\c" > /tmp/pfind-allfiles$PROGPID
				STR5=`echo "$STR5" | sed -e "s/*//g"`
				for I in `echo "$TMP"`; do
					TMP2=`echo $I | sed -e "s/{ð®Sđþ}/ /g"`
					grep $GREPCASE -l "$STR5" "$TMP2" >> /tmp/pfind-allfiles$PROGPID
				done
			fi
			cp /tmp/pfind-allfiles$PROGPID /tmp/pfind-files$PROGPID
#-----
		else
			TMP=`cat /tmp/pfind-allfiles$PROGPID`
			for I in `echo "$TMP"`; do
				export TMP2=`echo $I | sed -e "s/{ð®Sđþ}/ /g"` #export to use in next-line-func
				/tmp/pfind-execgrep$PROGPID >> /tmp/pfind-files$PROGPID
			done
		fi
	fi
done
if [ -s /tmp/pfind-files$PROGPID ]; then
	echo > /dev/null
else
	echo 100 > /tmp/pfind-splash #to end progressbar.
	ERROR="ファイルが見つかりませんでした!"
	error_dialog
fi
#-- Auto select action --
if [ "$PROFILE" = "Auto" ]; then
	AUTO="true"
	PROFILE="Show Overview"
	if [ $CHKDOC = "true" ];	then PROFILE="View in FileManager"; fi
	if [ $CHKPIC = "true" ];	then PROFILE="Open with ImageBrowser"; fi
	if [ $CHKMUSIC = "true" ];	then PROFILE="Open with MusicPlayer"; fi
	if [ $CHKVIDEO = "true" ];	then PROFILE="Open with VideoPlayer"; fi
	if [ $CHKMAIL = "true" ];	then PROFILE="View in FileManager"; fi
	if [ $CHKZIP = "true" ];	then PROFILE="View in FileManager"; fi
	if [ $CHKCODE = "true" ];	then PROFILE="View in FileManager"; fi
fi
#Do not link if 'show overview', link specified files later. Gives a much faster scan.
if [ "$PROFILE" != "Show Overview" ]; then
	echo 100 > /tmp/pfind-splash #be sure to quit existing splash
	usleep 500000
	cp -f /tmp/pfind-files$PROGPID /tmp/pfind-links$PROGPID
	link
fi
#Update list for overview.
#This should not be placed in overview. To keep previous list when doing actions/filters
cp /tmp/pfind-files$PROGPID /tmp/pfind-view$PROGPID
sort -u --output=/tmp/pfind-view$PROGPID /tmp/pfind-view$PROGPID
#---
action
}

error_dialog () {
export error_box="
<window title=\"Pfind $VERSION\">
<vbox>
 <frame info>
  <pixmap icon_size=\"6\"><input file stock=\"gtk-dialog-error\"></input></pixmap>
  <text><label>$ERROR</label></text>
    </frame>
 <button><label>戻る</label></button>
</vbox></window>"
I=$IFS; IFS=""
for STATEMENTS in  $(gtkdialog3 --program=error_box --center); do
	eval $STATEMENTS > /dev/null 2>&1
done
IFS=$I
case $GUI in
	"simple") 	gui_simple;;
	"advanced") gui_advanced;;
	"overview")	overview;;
esac
}

filter (){
cp /tmp/pfind-view$PROGPID /tmp/pfind-tmp$PROGPID
case "$FILTER" in
	"Find files in list")
		FRAME="Find files"; IMG="find";
		TXT1="<b>ファイルを探す</b> 決められたサーチテキストでリスト内。 (大文字小文字を区別)"
		. "$PROGPATH"box_input
		if [ $EXIT = "ok" ]; then
			GREPSTRING=`echo "$INPUT" | sed -e 's/ \[/\[/g' | sed -e 's/\] /\]/g'` #remove some spaces
			GREPSTRING=`echo "$GREPSTRING" | sed -e 's/\[OR\]/\\\|/g'` #convert to grep syntax
			cat /tmp/pfind-tmp$PROGPID | grep "('\|$GREPSTRING\|')" > /tmp/pfind-view$PROGPID
		fi;;
	"Remove files from list")
		FRAME="Find files"; IMG="clear";
		TXT1="<b>削除</b> 決められたサーチテキストでファイルをリストから。 (大文字小文字を区別)"
		. "$PROGPATH"box_input
		if [ $EXIT = "ok" ]; then
			GREPSTRING=`echo "$INPUT" | sed -e 's/ \[/\[/g' | sed -e 's/\] /\]/g'` #remove some spaces
			GREPSTRING=`echo "$GREPSTRING" | sed -e 's/\[OR\]/\\\|/g'` #convert to grep syntax
			cat /tmp/pfind-tmp$PROGPID | grep -v "('\|$GREPSTRING\|')" > /tmp/pfind-view$PROGPID
		fi;;
	"Search for TEXT in files")
		FRAME="Find files"; IMG="find";
		TXT1="サーチする <b>テキスト</b> ファイルの中。"
		. "$PROGPATH"box_input
		if [ $EXIT = "ok" ]; then
			GREPSTRING=`echo "$INPUT" | sed -e 's/\[OR\]/\\\|/g'` #convert to grep syntax
			echo -e "\c" > /tmp/pfind-view$PROGPID
			TMP=`cat /tmp/pfind-tmp$PROGPID | sed -e "s/ /{ð®Sđþ}/g"`
			for I in $TMP; do
				TMP2=`echo $I | sed -e 's/{ð®Sđþ}/ /g'`
				grep -il "$GREPSTRING" "$TMP2" >> /tmp/pfind-view$PROGPID
			done
		fi;;
esac
overview
}

action (){
case $PROFILE in
"View in FileManager")
	$EXEC_FILEMANAGER & ;;
"Export list to TextEditor")				
	export export_textfile="
	<window title=\"Pfind - テキストファイルへエクスポート\">
	 <vbox>
	  <text><label>デフォルトテキストエディタにファイル名リストして下さい。</label></text>
	  <text><label>\"\"</label></text>
	  <frame Include>
	   <checkbox>
	    <label>パス</label>
	    <variable>EXPTXT_PATH</variable>
	    <default>true</default>
	   </checkbox>
	   <checkbox>
	    <label>拡張子</label>
	    <variable>EXPTXT_EXT</variable>
	    <default>true</default>
	   </checkbox>
	  </frame>
	  <hbox>
	   <button><input file icon=\"gtk-cancel\"></input><label>キャンセル</label></button>
	   <button ok><action type=\"exit\">1</action></button>
	  </hbox>
	 </vbox>
	</window>"
	I=$IFS; IFS=""
	for STATEMENTS in  $(gtkdialog3 --program=export_textfile --center); do
		eval $STATEMENTS
	done
	IFS=$I
	cp /tmp/pfind-view$PROGPID /tmp/pfind-text$PROGPID
	if [ "$EXIT" = "1" ]; then	
		if [ "$EXPTXT_PATH" = "false" ]; then	#Remove path		
			sed -i -e "s/^.*\///g" /tmp/pfind-text$PROGPID
		fi
		if [ "$EXPTXT_EXT" = "false" ]; then	#Remove extension		
			sed -i -e 's/\.[^\.]*$//' /tmp/pfind-text$PROGPID
		fi
		$EXEC_EXPORT_LIST_TO_TEXTEDITOR &
	fi;;
"Open files in TextEditor")
	$EXEC_TEXTEDITOR & ;;
"Open with ImageBrowser")
	$EXEC_IMAGEBROWSER & ;;
"View images in Slideshow")
	$EXEC_SLIDESHOW & ;;
"Open with MusicPlayer")
	cp /tmp/pfind-links$PROGPID /tmp/pfind.m3u	#xmms
	$EXEC_MUSICPLAYER & ;;
"Open with VideoPlayer")
	$EXEC_VIDEOPLAYER & ;;
"Open with Burner")
	TMP=`grep / /tmp/pfind-links$PROGPID`		#tkdvd
	echo $TMP > /tmp/pfind.tkdvd
	$EXEC_BURNER & ;;
"Show Overview")
	GUI="overview"
	overview;;
"Copy files")				
	export export_copy="
	<window title=\"Pfind - ファイルをコピーする\">
	 <vbox>
	  <frame>
	   <hbox>
	    <text><label>どこへコピー</label></text>
	   	<entry accept=\"directory\"><variable>COPYDIR</variable><input>echo '/tmp/'</input></entry>
        <button>
         <input file stock=\"gtk-open\"></input>
         <action type=\"fileselect\">COPYDIR</action>
         <action>refresh:COPYDIR</action>
        </button>
       </hbox>	
	   <checkbox>
	    <label>もとのファイル名を使う</label>
	    <variable>ORG_NAMES</variable>
	   </checkbox>
	  </frame>
	  <frame Info>
	   <text><label>「Pfind」はもとのファイル名とそのパスでファイルを名づける。例えば： info.txt   (-usr-local-pfind-)。もとのファイル名だけを使うと同じファイル名のファイルが出てきます (info.txt)。 同じファイル名のファイルがあると、ファイルコピーは失敗します。</label></text>
	  </frame>
	  <hbox>
	   <button><input file icon=\"gtk-cancel\"></input><label>キャンセル</label></button>
	   <button ok><action type=\"exit\">1</action></button>
	  </hbox>
	 </vbox>
	</window>"
	I=$IFS; IFS=""
	for STATEMENTS in  $(gtkdialog3 --program=export_copy --center); do
		eval $STATEMENTS
	done
	IFS=$I
	if [ "$EXIT" = "1" ]; then	
		if [ "$ORG_NAMES" = "true" ]; then	
	  		TMP=`cat /tmp/pfind-links$PROGPID | sed -e "s/ /{ð®Sđþ}/g"`
			for I in $TMP; do
				TMP2=`echo $I | sed -e "s/{ð®Sđþ}/ /g"`
				cp -p "$TMP2" "$COPYDIR"
			done
  		else
  			cp -Lp /tmp/searchresult$PROGPID/* "$COPYDIR"
		fi
		$FILEMANAGER "$COPYDIR" &
	fi;;
"Execute command")
	export exec_command="
	<window title=\"Pfind $VERSION\">
 	<vbox>
 	 <frame リスト内のファイルにコマンドを実行>
	  <text><label>\"\"</label></text>
	  <text><label>mv [FILE] /root/    -->    リスト内のファイルを/root/へ移動</label></text>
	  <entry><variable>COMMAND</variable></entry>
	  <text><label>\"\"</label></text>
	 </frame>
	 <hbox>
	  <button cancel><action type=\"exit\">99</action></button>
	  <button ok><action type=\"exit\">10</action></button>
	 </hbox>
	</vbox></window>"
	I=$IFS; IFS=""
	for STATEMENTS in  $(gtkdialog3 --program=exec_command --center); do eval $STATEMENTS; done
	IFS=$I
	if [ $EXIT = 10 ]; then
		echo "$COMMAND" | sed -e 's/\[FILE\]/\"$TMP2\"/g' > /tmp/pfind-exec_command$PROGPID #build command for loop
		chmod 722 /tmp/pfind-exec_command$PROGPID
		TMP=`cat /tmp/pfind-links$PROGPID | sed -e "s/ /{ð®Sđþ}/g"`
		for I in $TMP; do
			export TMP2=`echo $I | sed -e "s/{ð®Sđþ}/ /g"`
			/tmp/pfind-exec_command$PROGPID
		done
	fi;;
esac
if [ "$AUTO" = "true" ]; then PROFILE="Auto"; fi
}

link (){
echo "Building symlinks...please wait" > /tmp/pfind-splashtext
echo 0 > /tmp/pfind-splash #reset progress bar
"$PROGPATH"box_splash &
rm -dr /tmp/searchresult$PROGPID
mkdir /tmp/searchresult$PROGPID > /dev/null 2>&1
TMP=`cat /tmp/pfind-links$PROGPID | sed -e "s/ /{ð®Sđþ}/g"`
for I in $TMP; do
	TMP2=`echo $I | sed -e "s/{ð®Sđþ}/ /g"`
	echo $TMP2
	DIR=`dirname "$TMP2" | sed -e "s/\//-/g"`
	NAME=`basename "$TMP2"`
	cp -sp "$TMP2" "/tmp/searchresult$PROGPID/$NAME     ($DIR)"
done
echo 100 > /tmp/pfind-splash #to end progressbar.
}

overview (){
TMP=`ps -eo pid,command`; TMP=`echo "$TMP" | grep 'pfind_splash'` #if no splash from search...
if [ -z "$TMP" ]; then #...this is just a gui-update
	echo "ヒットリストを再構成しています" > /tmp/pfind-splashtext
	echo 0 > /tmp/pfind-splash #reset progress bar
	"$PROGPATH"box_splash &
fi
COUNTALL=`cat /tmp/pfind-files$PROGPID | wc -l`
COUNTDOC=`cat /tmp/pfind-files$PROGPID | grep -ic "('$EXTDOC')"`
if [ $COUNTDOC -gt 0 ]; then GUIDOC="
<hbox>
 <text><label>ドキュメント:</label></text>
 <vbox>
  <pixmap><input file>$TAB</input></pixmap>
  <text><label>$COUNTDOC</label></text>
 </vbox>
 <button><input file stock=\"gtk-open\"></input><label>ブラウズ</label><action type=\"exit\">20</action></button>
 <button><input file stock=\"gtk-go-forward\"></input>
  <action type=\"exit\">60</action>
 </button></hbox>"
else GUIDOC=""; fi
COUNTPIC=`cat /tmp/pfind-files$PROGPID | grep -ic "('$EXTPIC')"`
if [ $COUNTPIC -gt 0 ]; then GUIPIC="
<hbox>
 <text><label>画像:</label></text>
 <vbox>
  <pixmap><input file>$TAB</input></pixmap>
  <text><label>$COUNTPIC</label></text>
 </vbox>
 <button><input file stock=\"gtk-select-color\"></input><label>\"ビュー\"</label><action type=\"exit\">21</action></button>
 <button><input file stock=\"gtk-go-forward\"></input>
  <action type=\"exit\">61</action>
 </button></hbox>"
else GUIPIC=""; fi
COUNTMUSIC=`cat /tmp/pfind-files$PROGPID | grep -ic "('$EXTMUSIC')"`
if [ $COUNTMUSIC -gt 0 ]; then GUIMUSIC="
<hbox>
 <text><label>音声ファイル:</label></text>
 <vbox>
  <pixmap><input file>$TAB</input></pixmap>
  <text><label>$COUNTMUSIC</label></text>
 </vbox>
 <button><input file stock=\"gtk-media-play\"></input><label>\"再生     \"</label><action type=\"exit\">22</action></button>
 <button><input file stock=\"gtk-go-forward\"></input>
  <action type=\"exit\">62</action>
 </button></hbox>"
else GUIMUSIC=""; fi
COUNTVIDEO=`cat /tmp/pfind-files$PROGPID | grep -ic "('$EXTVIDEO')"`
if [ $COUNTVIDEO -gt 0 ]; then GUIVIDEO="
<hbox>
 <text><label>ビデオ:</label></text>
 <vbox>
  <pixmap><input file>$TAB</input></pixmap>
  <text><label>$COUNTVIDEO</label></text>
 </vbox>
 <button><input file stock=\"gtk-media-play\"></input><label>\"再生     \"</label><action type=\"exit\">23</action></button>
 <button><input file stock=\"gtk-go-forward\"></input>
  <action type=\"exit\">63</action>
 </button></hbox>"
else GUIVIDEO=""; fi
COUNTMAIL=`cat /tmp/pfind-files$PROGPID | grep -ic "('$EXTMAIL')"`
if [ $COUNTMAIL -gt 0 ]; then GUIMAIL="
<hbox>
 <text><label>メール:</label></text>
 <vbox>
  <pixmap><input file>$TAB</input></pixmap>
  <text><label>$COUNTMAIL</label></text>
 </vbox>
 <button><input file stock=\"gtk-open\"></input><label>ブラウズ</label><action type=\"exit\">24</action></button>
 <button><input file stock=\"gtk-go-forward\"></input>
  <action type=\"exit\">64</action>
 </button></hbox>"
else GUIMAIL=""; fi
COUNTZIP=`cat /tmp/pfind-files$PROGPID | grep -ic "('$EXTZIP')"`
if [ $COUNTZIP -gt 0 ]; then GUIZIP="
<hbox>
 <text><label>圧縮された:</label></text>
 <vbox>
  <pixmap><input file>$TAB</input></pixmap>
  <text><label>$COUNTZIP</label></text>
 </vbox>
 <button><input file stock=\"gtk-open\"></input><label>ブラウズ</label><action type=\"exit\">25</action></button>
 <button><input file stock=\"gtk-go-forward\"></input>
  <action type=\"exit\">65</action>
 </button></hbox>"
else GUIZIP=""; fi
COUNTCODE=`cat /tmp/pfind-files$PROGPID | grep -ic "('$EXTCODE')"`
if [ $COUNTCODE -gt 0 ]; then GUICODE="
<hbox>
 <text><label>バイナリファイル:</label></text>
 <vbox>
  <pixmap><input file>$TAB</input></pixmap>
  <text><label>$COUNTCODE</label></text>
 </vbox>
 <button><input file stock=\"gtk-open\"></input><label>ブラウズ</label><action type=\"exit\">26</action></button>
 <button><input file stock=\"gtk-go-forward\"></input>
  <action type=\"exit\">66</action>
 </button></hbox>"
else GUICODE=""; fi
#build <tree> or <edit>
echo -e "\c" > /tmp/pfind-tmp$PROGPID
if [ `cat /tmp/pfind-view$PROGPID | wc -l` -lt 500 ]; then
	for I in `cat /tmp/pfind-view$PROGPID | sed -e "s/ /{ð®Sđþ}/g"`; do
		TMP=`echo "$I" | sed -e "s/{ð®Sđþ}/ /g"`
		find "$TMP" -maxdepth 0 -printf "<item>%p|%s|%CY/%Cm/%Cd - %CT|%M|%u</item>\n" >> /tmp/pfind-tmp$PROGPID
	done
	if [ "$ACCEPT_ARROW" = "false" ]; then #filenames with < or > corrupts <tree> when not UTF-8
		#check filenames for < and >
		TMP=`cat /tmp/pfind-view$PROGPID | grep "<"`
		TMP2=`cat /tmp/pfind-view$PROGPID | grep ">"`
		if [ "$TMP" ] || [ "$TMP2" ]; then
			FRAME="Info"; IMG="dialog-info"; TXT1="サーチ結果はファイル名を含みます。ファイル名が「UTF-8」コーディングであれば問題ありません。設定ファイルを編集してこの文字セットを使う事ができます。「UTF-8」以外のを使うと「Pfind」は失敗します。今から「Pfind」に翻訳しますか？"
		. "$PROGPATH"box_ok
		fi
		TREEITEMS=`cat /tmp/pfind-tmp$PROGPID | sed -e "s%<item>%{ð®itemđþ}%g" | sed -e "s%</item>%{ð®/itemđþ}%g"`
		TREEITEMS=`echo "$TREEITEMS" | sed -e 's/</?/g' | sed -e 's/>/?/g'`
		TREEITEMS=`echo "$TREEITEMS" | sed -e "s%{ð®itemđþ}%<item>%g" | sed -e "s%{ð®/itemđþ}%</item>%g"`
	else
		TREEITEMS=`cat /tmp/pfind-tmp$PROGPID`
	fi
	VIEW="<tree rules_hint=\"true\"><label>ファイル名|サイズ|変更|許可|ユーザ</label>$TREEITEMS<variable>TREE</variable><height>100</height><width>400</width><action>. $PROGPATH/func_MIME -\$TREE</action></tree>"
	EDITMENU="
	<menu>
	 <menuitem icon=\"gtk-apply\">
	  <label>開く</label>
	  <action>$PROGPATH/func_MIME -\$TREE &</action>
	 </menuitem>
	 <menuitem>
	  <label>・・・で開く</label>
	  <action>$PROGPATH/func_openwith -\$TREE &</action>
	 </menuitem>
	 <menuitem icon=\"gtk-edit\">
	  <label>Open as text</label>
	  <action>$PROGPATH/func_openastext -\$TREE &</action>
	 </menuitem>
	 <menuitem icon=\"gtk-open\">
	  <label>場所を示す...</label>
	  <action>$PROGPATH/func_showlocation -\$TREE &</action>
	 </menuitem>
	 <menuitem icon=\"gtk-execute\">
	  <label>プログラムを実行する</label>
	  <action>$PROGPATH/func_run -\$TREE &</action>
	 </menuitem>
	 <separator></separator>
	 <menuitem icon=\"gtk-convert\">
	  <label>名前を変更</label>
	  <action type=\"exit\">70</action>
	 </menuitem>
	 <menuitem icon=\"gtk-copy\">
	  <label>コピー</label>
	  <action type=\"exit\">71</action>
	 </menuitem>
	 <menuitem icon=\"gtk-ok\">
	  <label>移動</label>
	  <action type=\"exit\">72</action>
	 </menuitem>
	 <menuitem icon=\"gtk-dnd-multiple\">
	  <label>リンク</label>
	  <action type=\"exit\">73</action>
	 </menuitem>
	 <separator></separator>
	 <menuitem icon=\"gtk-cancel\">
	  <label>削除</label>
	  <action type=\"exit\">74</action>
	 </menuitem>
	 <menuitem icon=\"gtk-delete\">
	  <label>ゴミ箱に送る</label>
	  <action type=\"exit\">75</action>
	 </menuitem>
	 <label>Selection</label>
	</menu>"
else
	if [ `cat /tmp/pfind-view$PROGPID | wc -l` -lt 3000 ]; then
		VIEW="<edit><variable>FILELIST</variable><input file>/tmp/pfind-view$PROGPID</input><visible>disabled</visible><width>400</width><height>100</height></edit>"
	else
		VIEW="<edit></edit>"
	fi
	EDITMENU=""
fi
#---
echo 100 > /tmp/pfind-splash #to end progressbar.
#---
export Overview="<window title=\"Pfind $VERSION\"icon-name=\"gtk-find\">
<hbox>
<vbox>
 <menubar>
  <menu>
   <menuitem icon=\"gtk-find\">
    <label>サーチ</label>
    <action type=\"exit\">80</action>
   </menuitem>
   <menuitem icon=\"gtk-fullscreen\">
    <label>高度なサーチ</label>
    <action type=\"exit\">90</action>
   </menuitem>
   <separator></separator>
   <menuitem icon=\"gtk-preferences\">
    <label>設定</label>
    <action>. $PROGPATH/func -configure &</action>
   </menuitem>
   <menuitem icon=\"gtk-preferences\">
    <label>MIMEタイプ</label>
    <action>. $PROGPATH/func -show_mimefile &</action>
   </menuitem>
   <separator></separator>
   <menuitem icon=\"gtk-quit\">
    <label>終了</label>
    <action type=\"exit\">*</action>
   </menuitem>
   <label>ファイル</label>
  </menu>
  $EDITMENU
  <menu>
   <menuitem icon=\"gtk-clear\">
    <label>リストからファイルを削除</label>
    <action type=\"exit\">40</action>
   </menuitem>
   <menuitem icon=\"gtk-find\">
    <label>リストからファイルを検索</label>
    <action type=\"exit\">41</action>
   </menuitem>
   <menuitem icon=\"gtk-find\">
    <label>ファイルの中からテキストを検索</label>
    <action type=\"exit\">42</action>
   </menuitem>
   <separator></separator>
   <menuitem icon=\"gtk-open\">
    <label>ファイルマネージャでブラウズ</label>
    <action type=\"exit\">50</action>
   </menuitem>
   <menuitem icon=\"gtk-edit\">
    <label>リストをテキストエディタにエクスポート...</label>
    <action type=\"exit\">51</action>
   </menuitem>
   <menuitem icon=\"gtk-edit\">
    <label>テキストエディタでファイルを開く</label>
    <action type=\"exit\">59</action>
   </menuitem>
   <menuitem icon=\"gtk-select-color\">
    <label>画像ブラウザで見る</label>
    <action type=\"exit\">52</action>
   </menuitem>
   <menuitem icon=\"gtk-select-color\">
    <label>スライドショーで画像を見る</label>
    <action type=\"exit\">58</action>
   </menuitem>
   <menuitem icon=\"gtk-execute\">
    <label>ミュージックプレーヤで開く</label>
    <action type=\"exit\">53</action>
   </menuitem>
   <menuitem icon=\"gtk-execute\">
    <label>ビデオプレーヤで開く</label>
    <action type=\"exit\">54</action>
   </menuitem>
   <menuitem icon=\"gtk-cdrom\">
    <label>ファイルをバーナーで焼く</label>
    <action type=\"exit\">55</action>
   </menuitem>
   <menuitem icon=\"gtk-copy\">
    <label>ファイルをコピーする</label>
    <action type=\"exit\">56</action>
   </menuitem>
   <menuitem icon=\"gtk-execute\">
    <label>コマンドを実行する</label>
    <action type=\"exit\">57</action>
   </menuitem>
   <label>リスト</label>
  </menu>
  <menu>
   <menuitem icon=\"gtk-help\">
    <label>ヘルプ</label>
    <action>$PROGPATH/func -help</action>
   </menuitem>
   <label>ヘルプ</label>
  </menu>
 </menubar>        
 <frame ファイル名(の一部)を書いて下さい>
  <hbox>
   <entry><variable>SEARCHSTRING</variable><input>echo $SEARCHSTRING</input></entry>
   <button><input file stock=\"gtk-refresh\"></input><label>検索</label><action type=\"exit\">80</action></button>
  </hbox>
 </frame>
 <frame 検索結果>
  <hbox>
   <text use-markup=\"true\"><label>\"<b>合計:</b>\"</label></text>
   <vbox>
    <pixmap><input file>$TAB</input></pixmap>
    <text use-markup=\"true\"><label>\"<b>$COUNTALL</b>\"</label></text>
   </vbox>
   <hbox>
    <button>
     <input file stock=\"gtk-open\"></input>
     <label>ブラウズ</label>
     <action type=\"exit\">10</action>
    </button>
    <button>
     <input file stock=\"gtk-go-forward\"></input>
     <action type=\"exit\">69</action>
    </button>
   </hbox>
  </hbox>
  <pixmap><input file>$TAB</input></pixmap>
$GUIDOC
$GUIPIC
$GUIMUSIC
$GUIVIDEO
$GUIMAIL
$GUIZIP
$GUICODE
 </frame>
 <button>
  <input file stock=\"gtk-quit\"></input>
  <action type=\"exit\">99</action>
 </button>
</vbox>
$VIEW
</hbox>
</window>"
I=$IFS; IFS=""
for STATEMENTS in  $(gtkdialog3 --program=Overview --center); do
	eval $STATEMENTS
done
IFS=$I
case $EXIT in
	10) cp /tmp/pfind-files$PROGPID /tmp/pfind-links$PROGPID; link; $EXEC_FILEMANAGER & ;;
	20)	cat /tmp/pfind-files$PROGPID | grep -i "('$EXTDOC')" > /tmp/pfind-links$PROGPID
		link; PROFILE="View in FileManager"; action;;
	21)	cat /tmp/pfind-files$PROGPID | grep -i "('$EXTPIC')" > /tmp/pfind-links$PROGPID
		link; PROFILE="Open with ImageBrowser"; action;;
	22)	cat /tmp/pfind-files$PROGPID | grep -i "('$EXTMUSIC')" > /tmp/pfind-links$PROGPID
		link; PROFILE="Open with MusicPlayer"; action;;
	23)	cat /tmp/pfind-files$PROGPID | grep -i "('$EXTVIDEO')" > /tmp/pfind-links$PROGPID
		link; PROFILE="Open with VideoPlayer"; action;;
	24)	cat /tmp/pfind-files$PROGPID | grep -i "('$EXTMAIL')" > /tmp/pfind-links$PROGPID
		link; PROFILE="View in FileManager"; action;;
	25)	cat /tmp/pfind-files$PROGPID | grep -i "('$EXTZIP')" > /tmp/pfind-links$PROGPID
		link; PROFILE="View in FileManager"; action;;
	26)	cat /tmp/pfind-files$PROGPID | grep -i "('$EXTCODE')" > /tmp/pfind-links$PROGPID
		link; PROFILE="View in FileManager"; action;;
	40) FILTER="Remove files from list"; filter;;
	41) FILTER="Find files in list"; filter;;
	42) FILTER="Search for TEXT in files"; filter;;
	50)	PROFILE="View in FileManager"
		cp -f /tmp/pfind-view$PROGPID /tmp/pfind-links$PROGPID
		link; action;;
	51)	PROFILE="Export list to TextEditor"; action;;
	52)	PROFILE="Open with ImageBrowser"
		cp -f /tmp/pfind-view$PROGPID /tmp/pfind-links$PROGPID
		link; action;;
	53)	PROFILE="Open with MusicPlayer"
		cp -f /tmp/pfind-view$PROGPID /tmp/pfind-links$PROGPID
		link; action;;
	54)	PROFILE="Open with VideoPlayer"
		cp -f /tmp/pfind-view$PROGPID /tmp/pfind-links$PROGPID
		link; action;;
	55)	PROFILE="Open with Burner"
		cp -f /tmp/pfind-view$PROGPID /tmp/pfind-links$PROGPID
		link; action;;
	56)	PROFILE="Copy files"
		cp -f /tmp/pfind-view$PROGPID /tmp/pfind-links$PROGPID
		link; action;;
	57)	PROFILE="Execute command"
		cp -f /tmp/pfind-view$PROGPID /tmp/pfind-links$PROGPID
		link; action;;
	58)	PROFILE="View images in Slideshow"
		cat /tmp/pfind-files$PROGPID | grep -i "('$EXTPIC')" > /tmp/pfind-view$PROGPID #link only pics
		cp -f /tmp/pfind-view$PROGPID /tmp/pfind-links$PROGPID
		link; action;;
	59)	PROFILE="Open files in TextEditor"
		cp -f /tmp/pfind-view$PROGPID /tmp/pfind-links$PROGPID
		link; action;;
	60)	cat /tmp/pfind-files$PROGPID | grep -i "('$EXTDOC')" > /tmp/pfind-view$PROGPID;;
	61)	cat /tmp/pfind-files$PROGPID | grep -i "('$EXTPIC')" > /tmp/pfind-view$PROGPID;;
	62)	cat /tmp/pfind-files$PROGPID | grep -i "('$EXTMUSIC')" > /tmp/pfind-view$PROGPID;;
	63)	cat /tmp/pfind-files$PROGPID | grep -i "('$EXTVIDEO')" > /tmp/pfind-view$PROGPID;;
	64)	cat /tmp/pfind-files$PROGPID | grep -i "('$EXTMAIL')" > /tmp/pfind-view$PROGPID;;
	65)	cat /tmp/pfind-files$PROGPID | grep -i "('$EXTZIP')" > /tmp/pfind-view$PROGPID;;
	66)	cat /tmp/pfind-files$PROGPID | grep -i "('$EXTCODE')" > /tmp/pfind-view$PROGPID;;
	69)	cp /tmp/pfind-files$PROGPID /tmp/pfind-view$PROGPID;; #view all
	70) #rename
		if [ -z "$TREE" ]; then
			TXT1="<b>ファイルが選択されていません。</b>"
			. "$PROGPATH"box_ok
		else
			TMPNAME=`basename "$TREE"`; TMPPATH=`dirname "$TREE"`
			FRAME="RENAME"; IMG="convert"; TXT1="$TMPNAME"; DEFAULT="$TMPNAME"
			. "$PROGPATH"box_input
			if [ $EXIT = "ok" ]; then
				echo > /tmp/pfind-error$PROGPID
				mv "$TMPPATH"/"$TMPNAME" "$TMPPATH"/"$INPUT" 2> /tmp/pfind-error$PROGPID
				TXT1=`cat /tmp/pfind-error$PROGPID`
				if [ -n "$TXT1" ]; then . "$PROGPATH"box_ok; fi #error
			fi
		fi;;
	71) #copy
		if [ -z "$TREE" ]; then TXT1="<b>No file is selected.</b>"
			. "$PROGPATH"box_ok
		else
			FRAME="COPY"; IMG="copy"; TXT1="$TREE"; DEFAULT="$TREE"
			. "$PROGPATH"box_input
			if [ $EXIT = "ok" ]; then
				echo > /tmp/pfind-error$PROGPID
				cp "$TREE" "$INPUT" 2> /tmp/pfind-error$PROGPID
				TXT1=`cat /tmp/pfind-error$PROGPID`
				if [ -n "$TXT1" ]; then . "$PROGPATH"box_ok; fi #error
			fi
		fi;;
	72) #move
		if [ -z "$TREE" ]; then TXT1="<b>No file is selected.</b>"
			. "$PROGPATH"box_ok
		else
			FRAME="MOVE"; TXT1="$TREE"; DEFAULT="$TREE"
			. "$PROGPATH"box_input
			if [ $EXIT = "ok" ]; then
				echo > /tmp/pfind-error$PROGPID
				mv "$TREE" "$INPUT" 2> /tmp/pfind-error$PROGPID
				TXT1=`cat /tmp/pfind-error$PROGPID`
				if [ -n "$TXT1" ]; then . "$PROGPATH"box_ok; fi #error
			fi
		fi;;
	73) #link
		if [ -z "$TREE" ]; then TXT1="<b>No file is selected.</b>"
			. "$PROGPATH"box_ok
		else
			FRAME="LINK"; TXT1="$TREE"; DEFAULT="$TREE"
			. "$PROGPATH"box_input
			if [ $EXIT = "ok" ]; then
				echo > /tmp/pfind-error$PROGPID
				ln -s "$TREE" "$INPUT" 2> /tmp/pfind-error$PROGPID
				TXT1=`cat /tmp/pfind-error$PROGPID`
				if [ -n "$TXT1" ]; then . "$PROGPATH"box_ok; fi #error
			fi
		fi;;
	74) #delete
		if [ -z "$TREE" ]; then
			TXT1="<b>No file is selected.</b>"
			. "$PROGPATH"box_ok
		else
			FRAME="DELETE"; IMG="clear"; TXT1="$TREE"
			. "$PROGPATH"box_yesno
			if [ $EXIT = "yes" ]; then
				echo > /tmp/pfind-error$PROGPID
				rm "$TREE" 2> /tmp/pfind-error$PROGPID
				TXT1=`cat /tmp/pfind-error$PROGPID`
				if [ -n "$TXT1" ]; then . "$PROGPATH"box_ok; fi #error
			fi
		fi;;
	75) #move to trash
		if [ -z "$TREE" ]; then TXT1="<b>No file is selected.</b>"
			. "$PROGPATH"box_ok
		else
			FRAME="Send to Trash"; IMG="delete"; TXT1="$TREE"
			. "$PROGPATH"box_yesno
			if [ $EXIT = "yes" ]; then 
				if [ -f /usr/local/apps/Trash/AppRun ]; then
					/usr/local/apps/Trash/AppRun "$TREE" #Puppy trash
				else
					echo > /tmp/pfind-error$PROGPID
					if ! [ -d $HOME/.Trash ]; then
						mkdir $HOME/.Trash 2> /tmp/pfind-error$PROGPID
					fi
					mv "$TREE" $HOME/.Trash/ 2> /tmp/pfind-error$PROGPID #make trashdir in $HOME
					TXT1=`cat /tmp/pfind-error$PROGPID`
					if [ -n "$TXT1" ]; then . "$PROGPATH"box_ok; fi #error
				fi
			fi
		fi;;
	80) search;;
	90) if [ "$AUTO" = "true" ]; then PROFILE="Auto"; fi
		gui_advanced;;
	98) $TEXTEDITOR $HOME/.pfindrc; exit;;
	*)	rm -dr /tmp/searchresult$PROGPID
		rm /tmp/pfind*$PROGPID
		exit;;
esac
overview
}

gui_advanced (){
GUI="advanced"
#EXIT=0
if [ "$SEARCHPATHS" = "/" ]; then SEARCHPATHS="/  (all files)"; fi
#Defind Profile list (The first will show up in combobox. That is the default or the last used profile)
echo -e "Auto\nShow Overview\nView in FileManager\nOpen files in TextEditor\nExport list to TextEditor\nOpen with ImageBrowser\nOpen with MusicPlayer\nOpen with VideoPlayer\nOpen with Burner\nCopy files\nExecute command" > /tmp/pfind-profile$PROGPID
COUNT=1
TMP2=`cat /tmp/pfind-profile$PROGPID | sed -e "s/ /{ð®Sđþ}/g"`
for I in $TMP2; do
	TMP=`echo $I | sed -e "s/{ð®Sđþ}/ /g"`
	if test "$TMP" != "$PROFILE"; then
		COUNT=`expr $COUNT + 1`
		case $COUNT in
			2) ITEM2="$TMP";;
			3) ITEM3="$TMP";;
			4) ITEM4="$TMP";;
			5) ITEM5="$TMP";;
			6) ITEM6="$TMP";;
			7) ITEM7="$TMP";;
			8) ITEM8="$TMP";;
			9) ITEM9="$TMP";;
			10) ITEM10="$TMP";;
		esac
	fi
done
#--
export Pfind_advanced="
<window title=\"Pfind $VERSION\"icon-name=\"gtk-find\">
<hbox>
 <vbox>
  <hbox>
   <vbox>
    <frame 検索>
     <hbox>
      <entry><variable>SEARCHSTRING</variable><input>echo $SEARCHSTRING</input></entry>
      <button><input file stock=\"gtk-find\"></input><label>サーチ</label><action type=\"exit\">80</action></button>
     </hbox>
     <text><label>\" \"</label></text>
     <hbox>
<checkbox><label>ファイル名</label><variable>CHKFILENAME</variable><default>$CHKFILENAME</default></checkbox>
<checkbox><label>ファイルの中のテキスト（遅い）</label><variable>CHKCONTENT</variable><default>$CHKCONTENT</default></checkbox>
     </hbox>
    </frame>
    <frame 検索場所>
     <hbox>
      <entry accept=\"directory\"><variable>SEARCHPATHS</variable><input>echo '$SEARCHPATHS'</input></entry>
      <button>
       <input file stock=\"gtk-open\"></input>
       <action type=\"fileselect\">SEARCHPATHS</action>
       <action>refresh:SEARCHPATHS</action>
      </button>
     </hbox>
    </frame>
    <frame アクション>
     <combobox>
      <variable>PROFILE</variable>
      <item>$PROFILE</item>
      <item>$ITEM2</item>
      <item>$ITEM3</item>
      <item>$ITEM4</item>
      <item>$ITEM5</item>
      <item>$ITEM6</item>
      <item>$ITEM7</item>
      <item>$ITEM8</item>
      <item>$ITEM9</item>
      <item>$ITEM10</item>
     </combobox>
    </frame>
    <frame オプション>
<checkbox><label>サブディテクトリも検索</label><variable>CHKREC</variable><default>$CHKREC</default></checkbox>
<checkbox><label>今のファイルシステムだけを検索</label><variable>CHKXDEV</variable><default>$CHKXDEV</default></checkbox>
<checkbox><label>同じファイル名だけを一致</label><variable>CHKEXACT</variable><default>$CHKEXACT</default></checkbox>
<checkbox><label>大文字小文字の区別</label><variable>CHKCASE</variable><default>$CHKCASE</default></checkbox>
<checkbox><label>シムリンクをフォロー</label><variable>CHKFOLLOW_SYM</variable><default>$CHKFOLLOW_SYM</default></checkbox>
    </frame>
   </vbox>
   <frame 一致のみ>
    <vbox>
     <checkbox><label>ファイル</label><variable>CHKFILE</variable><default>$CHKFILE</default></checkbox>
     <checkbox><label>シムリンク</label><variable>CHKSYMLN</variable><default>$CHKSYMLN</default></checkbox>
     <checkbox><label>ディレクトリ</label><variable>CHKDIR</variable><default>$CHKDIR</default></checkbox>
     <text><label>\" \"</label></text>
     <text><label>\" \"</label></text>
     <checkbox><label>ドキュメント</label><variable>CHKDOC</variable><default>$CHKDOC</default></checkbox>
     <checkbox><label>画像</label><variable>CHKPIC</variable><default>$CHKPIC</default></checkbox>
     <checkbox><label>音楽</label><variable>CHKMUSIC</variable><default>$CHKMUSIC</default></checkbox>
     <checkbox><label>ビデオ</label><variable>CHKVIDEO</variable><default>$CHKVIDEO</default></checkbox>
     <checkbox><label>メール</label><variable>CHKMAIL</variable><default>$CHKMAIL</default></checkbox>
     <checkbox><label>圧縮された</label><variable>CHKZIP</variable><default>$CHKZIP</default></checkbox>
     <checkbox><label>バイナリ</label><variable>CHKCODE</variable><default>$CHKCODE</default></checkbox>
    </vbox>
   </frame>
   <vbox>
    <frame 一致期日>
     <hbox>
      <checkbox><label>atime</label><variable>CHKATIME</variable><default>$CHKATIME</default></checkbox>
      <checkbox><label>ctime</label><variable>CHKCTIME</variable><default>$CHKCTIME</default></checkbox>
      <checkbox><label>mtime</label><variable>CHKMTIME</variable><default>$CHKMTIME</default></checkbox>
     </hbox>
     <hbox>
      <text><label>から</label></text>
      <entry><variable>DATE_FROM</variable><input>echo '$DATE_FROM'</input></entry>
     </hbox>
     <hbox>
      <text><label>\"へ    \"</label></text>
      <entry><variable>DATE_TO</variable><input>echo '$DATE_TO'</input></entry>
     </hbox>
    </frame>
    <frame 一致サイズ>
     <hbox>
      <text><label>より大きい</label></text>
      <entry><variable>SIZE_GT</variable><input>echo '$SIZE_GT'</input></entry>
     </hbox>
     <hbox>
      <text><label>\"より小さい     \"</label></text>
      <entry><variable>SIZE_LT</variable><input>echo '$SIZE_LT'</input></entry>
     </hbox>
    </frame>
    <frame 一致ユーザ>
     <hbox>
      <text><label>名前又はID</label></text>
      <entry><variable>USER</variable><input>echo '$USER'</input></entry>
     </hbox>
    </frame>
    <frame 一致モード>
     <hbox>
      <vbox>
       <text><label>\"読む    \"</label></text>
       <checkbox><label>\"      \"</label><variable>CHK_UR</variable><default>$CHK_UR</default></checkbox>
       <checkbox><label>\"      \"</label><variable>CHK_GR</variable><default>$CHK_GR</default></checkbox>
       <checkbox><label>\"      \"</label><variable>CHK_OR</variable><default>$CHK_OR</default></checkbox>
      </vbox>
      <vbox>
       <text><label>\"書く    \"</label></text>
       <checkbox><label>\"      \"</label><variable>CHK_UW</variable><default>$CHK_UW</default></checkbox>
       <checkbox><label>\"      \"</label><variable>CHK_GW</variable><default>$CHK_GW</default></checkbox>
       <checkbox><label>\"      \"</label><variable>CHK_OW</variable><default>$CHK_OW</default></checkbox>
      </vbox>
      <vbox>
       <text><label>\"実行する                  \"</label></text>
       <checkbox><label>\"   User\"</label><variable>CHK_UX</variable><default>$CHK_UX</default></checkbox>
       <checkbox><label>\"   Group\"</label><variable>CHK_GX</variable><default>$CHK_GX</default></checkbox>
       <checkbox><label>\"   Others\"</label><variable>CHK_OX</variable><default>$CHK_OX</default></checkbox>
      </vbox>
     </hbox>
    </frame>
   </vbox>
  </hbox>
  <hbox>
   <button>
    <input file stock=\"gtk-quit\"></input>
    <label>終了</label>
    <action type=\"exit\">99</action>
   </button>
   <button>
    <input file stock=\"gtk-help\"></input>
    <label>ヘルプ</label>
    <action>$PROGPATH/func -help &</action>
   </button>
   <button>
    <input file stock=\"gtk-preferences\"></input>
    <label>設定</label>
    <action type=\"exit\">98</action>
   </button>
   <button>
    <input file stock=\"gtk-fullscreen\"></input>
    <label>\"    簡単       \"</label>
    <action type=\"exit\">90</action>
   </button>
  </hbox>
 </vbox>
</hbox></window>"
I=$IFS; IFS=""
for STATEMENTS in  $(gtkdialog3 --program=Pfind_advanced --center); do
	eval $STATEMENTS
done
IFS=$I
case $EXIT in
	80) search;;
	90)	gui_simple;;
	98) "$PROGPATH"func -configure &
		exit;;
	*)	rm -dr /tmp/searchresult$PROGPID
		rm /tmp/pfind*$PROGPID
		exit;;
esac
gui_advanced
}

gui_simple (){
GUI="simple"
export Pfind_simple="
<window title=\"Pfind $VERSION\"icon-name=\"gtk-find\">
<vbox>
 <frame ファイル名(の一部)を書いて下さい>
 <text><label>\"\"</label></text>
  <entry activates-default=\"true\"><variable>SEARCHSTRING</variable><input>echo $SEARCHSTRING</input></entry>
 <text><label>\"\"</label></text>
 </frame>
 <hbox>
   <button has-default=\"true\"><input file stock=\"gtk-find\"></input><label>検索</label><action type=\"exit\">80</action></button>
  <button><input file stock=\"gtk-fullscreen\"></input><label>高度な</label><action type=\"exit\">90</action></button>
  <button><input file stock=\"gtk-dialog-info\"></input><action>$PROGPATH/func -tipsdialog</action></button>
  <button><input file stock=\"gtk-quit\"></input><label>終了</label><action type=\"exit\">99</action></button>
 </hbox>
</vbox></window>"
I=$IFS; IFS=""
for STATEMENTS in  $(gtkdialog3 --program=Pfind_simple --center); do
	eval $STATEMENTS
done
IFS=$I
case $EXIT in
	80) search;;
	90)	gui_advanced;;
	*)	rm -dr /tmp/searchresult$PROGPID
		rm /tmp/pfind*$PROGPID
		exit;;
esac
gui_simple
}

#========================== PROGRAM =============================
if [ "$1" = "-c" ]; then INTERFACE="cli"; CLI_STRING="$2"; fi
#version upgrade
TMP=`cat "$HOME/.pfindrc" | grep VERSION | sed -e s/^.*\=//g | tr -d "."`
if [ -z "$TMP" ]; then #no pfindrc, first run, or older than 2.3. copy from /usr/...
	cp -f "$PROGPATH"pfindrc $HOME/.pfindrc
	cp -f "$PROGPATH"pfindMIMErc $HOME/.pfindMIMErc	
fi
if [ $TMP -lt 24 > /dev/null 2>&1 ]; then #Older than 2.4
		cp -f "$PROGPATH"pfindrc $HOME/.pfindrc #update to new config-file 
fi
#default 
CHKFILENAME="true"; CHKCONTENT="false"; SEARCHSTRING="Search text"
CHKFILE="false"; CHKSYMLN="false"; CHKDIR="false"; CHKDOC="false"; CHKPIC="false"
CHKMUSIC="false"; CHKVIDEO="false"; CHKMAIL="false"; CHKZIP="false"; CHKCODE="false"
TODAY=`date +%m/%d/%Y`; CHKATIME="false"; CHKCTIME="false"; CHKMTIME="false"; DATE_FROM="01/01/1970"; DATE_TO="$TODAY"
USER=""; SIZE_GT=""; SIZE_LT=""
CHK_UR="false"; CHK_UW="false"; CHK_UX="false"
CHK_GR="false"; CHK_GW="false"; CHK_GX="false"
CHK_OR="false"; CHK_OW="false"; CHK_OX="false";
#read config file
. $HOME/.pfindrc
export EXTDOC=`grep document= $HOME/.pfindMIMErc | sed -e s/^.*\=//g | sed -e 's/ ./$\\\|\\\./g'`
#'$' makes the end of word (extension) '\|' makes grep either
export EXTPIC=`grep picture= $HOME/.pfindMIMErc | sed -e s/^.*\=//g | sed -e 's/ ./$\\\|\\\./g'`
export EXTMUSIC=`grep music= $HOME/.pfindMIMErc | sed -e s/^.*\=//g | sed -e 's/ ./$\\\|\\\./g'`
export EXTVIDEO=`grep video= $HOME/.pfindMIMErc | sed -e s/^.*\=//g | sed -e 's/ ./$\\\|\\\./g'`
export EXTMAIL=`grep mail= $HOME/.pfindMIMErc | sed -e s/^.*\=//g | sed -e 's/ ./$\\\|\\\./g'`
export EXTZIP=`grep zip= $HOME/.pfindMIMErc | sed -e s/^.*\=//g | sed -e 's/ ./$\\\|\\\./g'`
export EXTCODE=`grep code= $HOME/.pfindMIMErc | sed -e s/^.*\=//g | sed -e 's/ ./$\\\|\\\./g'`
if [ "$INTERFACE" = "cli" ]; then SEARCHSTRING="$CLI_STRING"; search; fi
gui_simple
