#
# Miscellaneous neat things you can do using the string variables code
#
iswindows = substr(GPVAL_SYSNAME, 1, 7) eq "Windows"
isos2 = substr(GPVAL_SYSNAME, 1, 4) eq "OS/2"
unset border

set print $EXAMPLE
print ""
print "Exercise substring handling"
print ""
beg = 2
end = 4
print "beg = ",beg," end = ",end
foo = "ABCDEF"
print "foo           = ",foo
print "foo[3:5]      = ",foo[3:5]
print "foo[1:1]      = ",foo[1:1]
print "foo[5:3]      = ",foo[5:3]
print "foo[beg:end]  = ",foo[beg:end]
print "foo[end:beg]  = ",foo[end:beg]
print "foo[5:]       = ",foo[5:]
print "foo[5:*]      = ",foo[5:*]
print "foo[:]        = ",foo[:]
print "foo[*:*]      = ",foo[*:*]
print "foo.foo[2:2]  = ",foo.foo[2:2]
print "(foo.foo)[2:2]= ",(foo.foo)[2:2]
print ""
print "foo[1:1] eq 'A' && foo[2:2] ne 'X' = ", \
      (foo[1:1] eq 'A' && foo[2:2] ne 'X') ? "true" : "false"

unset print

do for [i=1:|$EXAMPLE|] {
    set label i $EXAMPLE[i] at graph 0.1, graph (1.0 - i*0.05)
}

unset xtics
unset ytics
set yrange [0:1]
plot 0 lc bgnd notitle

pause -1 "Hit return to continue"


set print $EXAMPLE
print "Exercise string handling functions"
print ""
print "foo          = ",foo
print "strlen(foo)  = ",strlen(foo)
print "substr(foo,3,4) = ",substr(foo,3,4)
print ""

if (1) {
  haystack = time("%H:%M %d %B %Y")
} else if (!iswindows && !isos2) {
  haystack = system("date")
} else  if (iswindows) {
  haystack = system("date /T") . " " . system("time /T")
} else {
  haystack = time("%D %T")
}
needle = ":"
S = strstrt(haystack,needle)
print "haystack     = \`date\`"
print "haystack     = ",haystack
print "needle       = ",needle
print "S = strstrt(haystack,needle) = ",S
print "haystack[S-2:S+2] = ",haystack[S-2:S+2]
print "It is now " . haystack[S-2:S+2]
#
print ""
#
foo = sprintf("%40d %40d %40d %40d %40d %40d",1,2,3,4,5,6)
if (strlen(foo) == 245) print "sprintf output of long strings works OK"
if (strlen(foo) != 245) print "sprintf output of long strings BROKEN"
print ""

unset print

unset label
do for [i=1:|$EXAMPLE|] {
    set label i $EXAMPLE[i] at graph 0.1, graph (1.0 - i*0.05)
}

unset xtics
unset ytics
set yrange [0:1]
plot 0 lc bgnd notitle

pause -1 "Hit return to continue"
set print $EXAMPLE
print "Exercise word and words functions"
print ""
foo = "word and words can handle 'quoted string'"
print "foo = ",foo
print "words(foo) = ",words(foo)
print "word(foo, 6) = ",word(foo,6)
print ""
foo = "\"double quotes\" or 'single quotes'"
print "foo = ",foo
print "words(foo) = ",words(foo)
print ""
foo = "Apostrophes inside words don't matter"
print "foo = ",foo
print "word(foo, 4) = ",word(foo, 4)

unset print

unset label
do for [i=1:|$EXAMPLE|] {
    set label i $EXAMPLE[i] at graph 0.1, graph (1.0 - i*0.05)
}

unset xtics
unset ytics
set yrange [0:1]
plot 0 lc bgnd notitle

pause -1 "Hit return to continue"
reset
#
set xrange [300:400]
set title "String-valued expression in using spec"
plot 'silver.dat' using 1:2 with linespoints notitle, \
     '' using 1:2:(sprintf("[%.0f,%.0f]",$1,$2)) with labels
#
pause -1 "Hit return to continue"
#
set xrange [0:1]
set yrange [0:1]
set title "Constant string expressions as plot symbols"
set xrange [250:500]
set auto y
set style data lines
plot 'silver.dat' u 1:2:($3+$1/50.) w filledcurves above title 'Above', \
     '' u 1:2:($3+$1/50.) w filledcurves below title 'Below', \
     '' u 1:2 lt -1 lw 0.5 notitle, \
     '' u 1:($3+$1/50.) lt 3 lw 0.5 notitle, \
     '' using 1:2:( ($2>($3+$1/50.)) ? "Up" : "Dn" ) with labels \
        title 'plot <foo> using 1:2:( ($3>$2) ? "Up" : "Dn" ) with labels'
#
pause -1 "Hit return to continue"
#
reset
set title "String-valued functions to generate datafile names"
set key title 'file(i) = sprintf("%1d.dat",i); N=2; M=3'
set key left width 25 Left reverse
N = 2
M = 3
file(i) = sprintf("%1d.dat",i)
plot 5*sin(x)/x, file(N), file(M)
#
pause -1 "Hit return to continue"
#
reset
fmt = '%Y-%m-%d %H:%M:%S'
time_str = '2005-05-09 19:44:12'
seconds = strptime(fmt, time_str)
time_str2 = strftime(fmt, seconds+10.)
print ''
print 'time_str          = "', time_str, '"'
print '-> seconds        = ', seconds
print '   seconds + 10.  = ', seconds+10.
print '-> time_str2      = "', time_str2, '"'
#
print ""
#
set xdata time
set key inside left
#set format x '%Y-%m-%d'
fmt = "%d/%m/%y\t%H%M"
print "read_time(fmt, c) =" \
      . " strptime(fmt, stringcolumn(c).' '.stringcolumn(c+1))"
read_time(fmt, c) = strptime(fmt, stringcolumn(c).' '.stringcolumn(c+1))
plot 'timedat.dat' skip 1 using (read_time(fmt,1)):3 with histeps, \
     'timedat.dat' skip 1 using (read_time(fmt,1)):($3-0.01):2 with labels title ''
#
print ""
pause -1 "Hit return to continue"
#
reset
