1 | PRCPRGRU ;WISC/RFJ-get graph in variable ;09 Feb 94
|
---|
2 | ;;5.1;IFCAP;;Oct 20, 2000
|
---|
3 | ;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
4 | Q
|
---|
5 | ;
|
---|
6 | ;
|
---|
7 | GETGRAPH(HEADING,YHEADING,XHEADING,XCODE,BARCHART,AVGFZERO,DATA) ;
|
---|
8 | ; return graph in variable yline
|
---|
9 | ; heading=top of graph
|
---|
10 | ; yheading=yaxis heading
|
---|
11 | ; xheading=xaxis heading
|
---|
12 | ; xcode=mumps code to set label on xaxis
|
---|
13 | ; barchart=1 for barchart
|
---|
14 | ; avgfzero=1 to include zero values when calculating the average
|
---|
15 | ; data(xaxis)=value
|
---|
16 | ;
|
---|
17 | N %,AVERAGE,AVGCOUNT,AVGFLAG,AVGLINE,CHAR,COLUMN,COUNT,DATALINE,FRONT,INCREMEN,LASTLINE,LINE,MAXVALUE,SPACE,STEP,TOTAL,TOTLENGT,TOTVALUE,VALUE,X,XAXIS,Y
|
---|
18 | S SPACE=" "
|
---|
19 | S YHEADING=YHEADING_SPACE
|
---|
20 | S MAXVALUE=0,TOTVALUE=0,AVGCOUNT=0
|
---|
21 | S X="" F TOTAL=1:1 S X=$O(DATA(X)) Q:X="" S COLUMN(TOTAL*5)=DATA(X)_"*^",TOTVALUE=TOTVALUE+DATA(X) S AVGCOUNT=$S('AVGFZERO&('DATA(X)):AVGCOUNT,1:AVGCOUNT+1) I DATA(X)>MAXVALUE S MAXVALUE=DATA(X)
|
---|
22 | S AVERAGE="0.00" I AVGCOUNT S AVERAGE=$J(TOTVALUE/AVGCOUNT,0,2)
|
---|
23 | S LASTLINE="",$P(LASTLINE,"+----",TOTAL+1)=""
|
---|
24 | S INCREMEN=$J(MAXVALUE/6,0,2) I +INCREMEN=0 S INCREMEN=1
|
---|
25 | ; build array in yline
|
---|
26 | S YLINE(1)=" ^ "_HEADING
|
---|
27 | S YLINE(2)=" |"_$E(SPACE,1,69)
|
---|
28 | S COUNT=2
|
---|
29 | F LINE=6:-1:1 D
|
---|
30 | . D SETLINE(LINE)
|
---|
31 | . S FRONT=$E(YHEADING,COUNT-1)_$E($J(INCREMEN*LINE,7),1,7)_"-+"
|
---|
32 | . S COUNT=COUNT+1,YLINE(COUNT)=FRONT_$E(DATALINE,1,79)
|
---|
33 | . D SETLINE(LINE-.5)
|
---|
34 | . S FRONT=$E(YHEADING,COUNT-1)_" |"
|
---|
35 | . S COUNT=COUNT+1,YLINE(COUNT)=FRONT_$E(DATALINE,1,79)
|
---|
36 | S YLINE(COUNT)=$E(YLINE(COUNT),1,9)_LASTLINE_">",TOTLENGT=$L(YLINE(COUNT))
|
---|
37 | S COUNT=COUNT+1,YLINE(COUNT)=$E($E(XHEADING,1,10)_SPACE,1,10)
|
---|
38 | S YLINE(COUNT+1)=$E($E(XHEADING,11,20)_SPACE,1,10)
|
---|
39 | S XAXIS="" F S XAXIS=$O(DATA(XAXIS)) Q:XAXIS="" S X=XAXIS K X(1) X:XCODE'="" XCODE S YLINE(COUNT)=YLINE(COUNT)_$E($J(X,5),1,5) I $D(X(1)) S YLINE(COUNT+1)=YLINE(COUNT+1)_$E($J(X(1),5),1,5)
|
---|
40 | I $TR($G(YLINE(COUNT+1))," ")'="" S COUNT=COUNT+1
|
---|
41 | S COUNT=COUNT+1,YLINE(COUNT)=" AVERAGE: "_AVERAGE
|
---|
42 | I $G(AVGLINE) S YLINE(AVGLINE)=$E(YLINE(AVGLINE),1,10)_$E($TR($E(YLINE(AVGLINE),11,255)," -|^","===="),1,TOTLENGT-15)_" AVG"
|
---|
43 | ; remove trailing spaces
|
---|
44 | S X=0 F S X=$O(YLINE(X)) Q:'X D
|
---|
45 | . F %=$L(YLINE(X)):-1,10 Q:$E(YLINE(X),%)'=" "
|
---|
46 | . S YLINE(X)=$E(YLINE(X),1,%)
|
---|
47 | Q
|
---|
48 | ;
|
---|
49 | ;
|
---|
50 | SETLINE(STEP) ; build line of display
|
---|
51 | ; step=incerment on y-axis
|
---|
52 | S DATALINE=$E(SPACE,1,69)
|
---|
53 | F %=5:5 Q:'$D(COLUMN(%)) S VALUE=+COLUMN(%),CHAR=$P(COLUMN(%),"*",2) I VALUE'<(INCREMEN*STEP) D
|
---|
54 | . ; set value on top of previous line
|
---|
55 | . I CHAR="^" S X=$S($G(BARCHART):8,1:9),Y=X-1+%+$L(VALUE),YLINE(COUNT)=$E(YLINE(COUNT),0,X+%-1)_VALUE_$E(YLINE(COUNT),Y+1,200)
|
---|
56 | . S X=" "_CHAR I $G(BARCHART),CHAR="^" S X="-----"
|
---|
57 | . I $G(BARCHART),$E(DATALINE,%-5)=" " S DATALINE=$E(DATALINE,0,%-6)_$S(X["-":"-",1:"|")_$E(DATALINE,%-4,200)
|
---|
58 | . S DATALINE=$E(DATALINE,0,%-5)_X_$E(DATALINE,%-3,200),$P(COLUMN(%),"*",2)="|"
|
---|
59 | I AVERAGE'<(INCREMEN*STEP),'$G(AVGFLAG) S AVGFLAG=1,AVGLINE=COUNT+1
|
---|
60 | Q
|
---|