V8/usr/doc/grap/scatmat
awk '
# Default values and initial output
BEGIN { spreadtext="0"
symboltext="circle"
fname="XXX"
white[" "]=1; white["\t"]=1 # white space
print ".G1"
print "graph " fname "01"
print " ticks off; frame ht 0 wid 0 invis"
}
# Parse all commands, global first then for each var
{ rest="" } # rest = input line after $1
NF>1 { i=0
while ( white[substr($0,++i,1)]);
while (!white[substr($0,++i,1)]);
rest=substr($0,i+1) }
$1=="frames" { frametext=rest }
$1=="spread" { spreadtext=$2 }
$1=="file" { filetext=$2 }
$1=="symbol" { symboltext=rest }
$1=="allticks" { alltickstext=rest }
$1=="alllog" { wantalllog=1 }
$1=="allrange" { allrangeset=1; allrangelo=$2; allrangehi=$3 }
$1=="once" { print rest }
$1=="eachgraph" { graphtext[++graphcnt]=rest }
$1=="eachline" { linetext[++linecnt]=rest }
$1=="diagdown" { diagdown=1 }
$1=="name" { if (substr(rest,1,1) != "\"") rest="\"" rest "\""
var++; nametext[var]=rest
}
$1=="ticks" { tickstext[var]=rest }
$1=="range" { rangeset[var]=1; rangelo[var]=$2; rangehi[var]=$3 }
$1=="log" { wantlog[var]=1 }
$1=="field" { fieldtext[var]=$2 }
# Generate all var**2 graphs
END {
if (allrangeset) for (i=1; i<=var; i++) {
rangeset[i]=1; rangelo[i]=allrangelo; rangehi[i]=allrangehi
}
if (frametext=="") {
wid=((6.5-spreadtext)/var)-spreadtext
frametext= "ht " wid " wid " wid
}
bottomrow=1; if (diagdown) bottomrow=var
for (row=1; row<=var; row++) {
for (col=1; col<=var; col++) {
# graph statement
if (col==1) {
place = "with .Frame.s at " fname row-1 col\
".Frame.n + (0," spreadtext ")"
if (diagdown) place = "with .Frame.n at " fname row-1 col\
".Frame.s - (0," spreadtext ")"
} else {
place = "with .Frame.w at " fname row col-1\
".Frame.e + (" spreadtext ",0)"
}
print "graph", fname row col, place
# frame statement
print " frame " frametext
# coord statement
s=""
if (rangeset[col]) s=s " x " rangelo[col] "," rangehi[col]
if (rangeset[row]) s=s " y " rangelo[row] "," rangehi[row]
if (wantlog[col]) s=s " log x"
if (wantlog[row]) s=s " log y"
if (wantalllog) s=s " log log"
if (s!="") print " coord" s
# ticks statements
print " ticks off"
if (col==1) print " ticks left " alltickstext, tickstext[row]
if (row==bottomrow) print " ticks bot " alltickstext, tickstext[col]
# copy file or print label
if (row==col) {
print " coord abs x 0,1 y 0,1"
print " " nametext[row] " at abs .5, .5"
if (symboltext!="") {
print " copy " filetext " thru @"
print " rowval=" fieldtext[row]
print " \"\" at rowval, rowval"
print " @"
}
} else {
print " rownum=" row "; colnum=" col
for (i=1; i<=graphcnt; i++) print " " graphtext[i]
print " copy " filetext " thru @"
print " rowval=" fieldtext[row] "; colval=" fieldtext[col]
for (i=1; i<=linecnt; i++) print " " linetext[i]
if (symboltext!="") {
print " " symboltext " at colval, rowval"
}
print " @"
}
}
}
print ".G2"
}
' $*