#!/bin/bash

function hl()
{
  local x1="$1"
  local y="$2"
  local x2="$3"
  local lt=${4:-"rgbcolor \"#0000FF\""} 
  local label="$5"
  local labelpos="$6"

  echo "set arrow from $x1,$y to $x2,$y nohead front lt $lt lw 2"
  if [[ -n $label ]]; then
    if [[ -n $labelpos ]]; then
      echo "set label \"$label\" at $labelpos center arial,10"
    else
	echo "set label \"$label\" at $(( x1 + (x2 - x1)/2 )),$y center arial,10"
    fi
  fi
}

function vl()
{
  local x=$1
  local lt=${2:-"rgbcolor \"#00FF00\""} 
  local label="$3"
  local labelpos="$4"

  echo "set arrow $gpltidx from $x, graph 0 to $x, graph 1 nohead front lt $lt lw 2"
  if [[ -n "$label" ]]; then 
    if [[ -n $labelpos ]]; then
	echo "set label  \"$label\" at $labelpos right font \"arial,10\""
    else
      echo "set label  \"$label\" at $x, graph 0.8 right font \"arial,10\""
    fi
  fi
}

function rect()
{
    local x1="$1"
    local x2="$2"
    local y1=${3:-"graph 0"}
    local y2=${4:-"graph 1"}
    local fc=${5:-"rgbcolor \"#7F7F7F\""}
    local label=$6
    local labelpos="$7"
    local fs=${8:-"transparent solid 0.5 noborder"}

    echo "set object  rectangle from $x1,$y1 to $x2,$y2 behind fc $fc fs $fs"
    
    if [[ -n "$label" ]]; then
      if [[ -n $labelpos ]]; then
         echo "set label  \"$label\" at $labelpos center arial,10"
      else 
         echo "set label  \"$label\" at $(( x1 + ((x2-x1)/2) )),$(( y1 + ((y2-y1)/2) )) center arial,10"
      fi
      
    fi
}

function pt()
{
    local x="$1"
    local y="$2"
    local fc=${3:-"rgbcolor \"#FF0000\""}
    local label=${4:-"$x,$y"}
    local fs=${5:-"empty"}
    local lw=${6:-"1"}

    echo "set object  cicle at $x,$y size 3 front fc $fc fs $fs lw $lw"
    
    echo "set label  \"$label\" at $x,$((y+5)) center arial,10"
    
}

echo "PROCESSING SEQ IO PLOT"

SEQFILE=$1
if [[ -z $SEQFILE ]]; then echo "ERROR: can't find seq file"; exit -1; fi

SEQFILEDAT=$SEQFILE.pdf.dat
OUTPUT=${SEQFILE}.io.pdf
EXP=${SEQFILE%%.seq}

cat ${SEQFILE}.io_r | while read offset rest;
do
    vl $offset;
done > ${OUTPUT}.gplt

cat ${SEQFILE}.io_w | while read offset rest;
do
    vl $offset;
done >> ${OUTPUT}.gplt

READNUM=$(wc -l < ${SEQFILE}.io_r)
pnum=0; pidx=0
cat -n ${SEQFILE}.io_r ${SEQFILE}.io_w | sort -k2,2 -n | while read num idx rest;
do
    if [ "$num" -gt "$READNUM" -a "$pnum" -le "$READNUM" ]; then
	rect $pidx $idx;
    fi; pnum=$num; pidx=$idx;
done >> ${OUTPUT}.gplt

echo set output \"${OUTPUT}\" >> ${OUTPUT}.gplt
grep -v "set output" ${SEQFILE}.pdf.gplt >> ${OUTPUT}.gplt

cat ${OUTPUT}.gplt | gnuplot
