+ }
+ elsif($line1 =~ /^p/){ #comment
+ $line1 =~ s/^p //g;
+ $line1 =~ s/\r//g;
+ chomp $line1;
+ print "[Tesh/INFO] comment_line :$line1\n";
+ }
+ elsif($line1 =~ /^! output sort/){ #output sort
+ print "[Tesh/INFO] output sort\n";
+ $sort=1;
+ }
+ elsif($line1 =~ /^! expect return/){ #expect sort
+ print "[Tesh/CRITICAL] expect return\n";
+ die;
+ }
+ elsif($line1 =~ /^! setenv/){ #setenv
+ $line1 =~ s/^! setenv //g;
+ $line1 =~ s/\r//g;
+ chomp $line1;
+ $line1 =~ /^(.*)=(.*)$/;
+ $ENV{$1} = $2;
+ print "[Tesh/INFO] setenv: $1=$2\n";
+ }
+ elsif($line1 =~ /^! include/){ #output sort
+ die "[Tesh/CRITICAL] need include\n";
+ }
+ elsif($line1 =~ /^! timeout/){ #timeout
+ $line1 =~ s/^! timeout //g;
+ $line1 =~ s/\r//g;
+ chomp $line1;
+ $timeout = $line1;
+ print "[Tesh/INFO] timeout : $timeout\n";
+ }
+ elsif($ok == 1 and $ok1 == 1)
+ {
+ @buffer = ();
+ if($sort == 1)
+ {
+ @list3 = sort @list1;
+ @list1=();
+ @list1=@list3;
+ @list3=();
+
+ @list3 = sort @list2;
+ @list2=();
+ @list2=@list3;
+ @list3=();
+
+ $sort=0;
+ }
+ while(@list1 or @list2)
+ {
+ $line1 = shift (@list1);
+ $line2 = shift (@list2);
+ if($line2 and $line1)
+ {
+ if($line1 eq $line2){
+ if($verbose == 1){print "$line1\n";}
+ else{push @buffer, "$line1\n";}
+
+ }
+ else
+ { if($verbose == 0){print @buffer};
+ if($line2) {print "- $line2\n"};
+ if($line1) {print "+ $line1\n"};
+ die;
+ }
+ }
+ else
+ { if($verbose == 0){print @buffer};
+ if($line2) {print "- $line2\n"};
+ if($line1) {print "+ $line1\n"};
+ die;
+ }
+ }
+ $ok = 0;
+ $ok1= 0;
+ @list1=();
+ @list2=();
+ @buffer = ();
+ $result = ();
+ }
+}
+
+if($parallel == 1)
+{
+ $ok = 1;
+ $result=`$execline`;
+ @list1 = split(/\n/,$result);
+}
+elsif($ok == 1 and $ok1 == 1)