Trailing-Edge
-
PDP-10 Archives
-
decuslib20-04
-
decus/20-0110/darray.sai
There are 2 other files named darray.sai in the archive. Click here to see a list.
entry ;
COMMENT
.SEC(DARRAY.SAI - histogram display from array)
.index(DARRAY.SAI - histogram display from array)
.;
Begin
Internal Integer Procedure DARRAY(
Reference Integer Array Arrayed;
Integer index0,index1;
Real start,finish;
string flags );
Begin "DARRAY"
Require "sys:disprm.sai" source!file ;
Require "DEFINE.REQ" source!file ;
Require "FORT.REQ" source!file ;
Require "CVT.REQ" source!file ;
comment quick display of preload!with stored in an 'Arrayed' of
given 'size'.;
comment 'start' is the x coordinate assigned to 'Arrayed(index0)'.;
comment 'finish' is the x coordinate assigned to 'Arrayed(index1)'.;
comment 'DARRAY' returns the approximate number of vectors used.;
comment up to 5 flags may be used at once, stored as characters;
comment in 'flags'.;
comment flags are:;
comment w use last window;
comment t no tic marks;
comment s skip points to speed output;
comment x-axis is labeled starting with 'start'.;
comment 'DARRAY' cannot be used in overlay programming.;
string astring;
Integer size;
Integer iskip,ilast,vectors,alast;
Integer amax,amin,i,a,starto,fino,beginning,cmax,yint,jstart,
jEnd,j;
label label150,label132,label133,label220,label651;
comment user's coordinate system.;
Real Array plotpr[1:23];
Real left,right,bottom,top,chrhgt;
Real dx,fi,y;
Real intrvl;
comment window used by 'DARRAY':;
Internal Real dleft,dright,dbot,dtop;
Boolean Realv;
COMMENT
.next page
.SS(Procedure FLAGED)
.index(Procedure FLAGED)
.;
Boolean Procedure FLAGED( string x );
Begin "FLAGED"
Integer i;
For i_ 1 step 1 until length(flags) do
if equ(x,flags[i For 1])
then return(true);
return(false);
End "FLAGED";
comment End declarations;
comment save previous plotting window;
denq(plotpr[1]);
left_plotpr[20];
right_plotpr[21];
bottom_plotpr[22];
top_plotpr[23];
chrhgt_plotpr[9];
comment set display mode allowing characters to be seen which are;
comment outside of the window:;
dtscal(-1.);
comment obtain flags;
comment flags implemented:;
comment w use previous window;
comment t do not draw tic marks;
size_index1-index0+1;
if size<1
then
Begin "error"
outstr("bad indices: (" & cvs(index0) & ","
& cvs(index1) &
") passed to DARRAY" & crlf);
return(0);
End "error";
comment find extreme values;
if not (FLAGED("w"))
then
Begin "finding extreme values"
amax_minInteger;
amin_maxInteger;
For i_ index0 step 1 until index1 do
Begin "loop 40"
a_Arrayed[i];
if a<amin
then amin_a
else if a>amax
then amax_a;
End "loop 40";
starto_start;
fino_finish;
if (amin<amax)
then go to label150;
outstr(
"constant Array passed to Procedure DARRAY of value: " &
cvs(amin) & crlf);
return(0);
End "finding extreme values";
comment inform user of window For plotting through through
Internal variables (dleft,dright,dbot,dtop);
label150:
dwind(starto,fino,amin,amax);
dleft_starto;
dright_fino;
dbot_amin;
dtop_amax;
comment "alast" is used to draw horizontal lines in a single stroke;
ilast_1;
iskip_1;
if ( not FLAGED("s"))
then go to label133;
For i_ 1 step 1 until 5 do
Begin "loop 132"
if (flags[i For 1] neq "s")
then go to label132;
if (flags[i+1 For 1]="1")
then iskip_10;
if (flags[i+1 For 1]="2")
then iskip_100;
if (flags[i+1 For 1]="3")
then iskip_1000;
if (iskip=1)
then iskip_1 max size/100.;
if (flags[i+1 For 1]="0")
then iskip_1;
go to label133;
label132:
End "loop 132";
label133:
vectors_0;
dx_(finish-start)/size;
For i_ index0-1 step iskip until index1-1 do
Begin "loop 511"
label label511;
a_Arrayed[i+1];
if (a=alast and i+1<index1)
then go to label511;
fi_start+dx*i;
if (ilast<i)
then ddraw(fi,alast);
if i leq 0
then
Begin "move"
dmove(fi+dx,a);
alast_a;
go to label511;
End "move";
ddraw(fi,a);
vectors_vectors+1;
alast_a;
ilast_i;
label511:
;
End "loop 511";
if (FLAGED("t"))
then go to label220;
comment draw tic marks;
comment horizontal;
intrvl_10.^(ifix(alog10(finish-start)));
beginning_intrvl*ifix((start/intrvl));
cmax_amin+.95*(amax-amin);
For fi_ beginning step intrvl until finish do
Begin "loop 640"
dmove(fi,amin);
dtext(CVT(fi));
dmove(fi,cmax);
dtext(CVT(fi));
End "loop 640";
comment vertical;
yint_10.^(ifix(alog10(amax-amin))-1);
jstart_amin/yint;
jEnd_amax/yint;
if jEnd-jstart geq 10
then if jEnd-jstart>40
then yint_yint*10
else
else yint_yint/10;
jstart_amin/yint;
jEnd_amax/yint;
For j_ jstart step 1 until jEnd do
Begin "loop 650"
y_yint*j;
dmove(start,y);
dtext(CVT(y));
End "loop 650";
comment restore user coordinate system and character scaling;
label220:
if ( not FLAGED("w"))
then dwind(left,right,bottom,top);
dtscal(chrhgt);
return(vectors);
End "DARRAY";
End;