| 1 | KMPDUG ;OAK/RAK - CM Tools Graph Utility ;2/17/04  09:57 | 
|---|
| 2 | ;;2.0;CAPACITY MANAGEMENT TOOLS;;Mar 22, 2002 | 
|---|
| 3 | ; | 
|---|
| 4 | EN(KMPUAR,KMPUTI,KMPUOPT,KMPUSTRT,KMPUTAR,KMPUXIT,KMPUMAX) ;entry point | 
|---|
| 5 | ;----------------------------------------------------------------------- | 
|---|
| 6 | ; KMPUAR.. Local or global array (passed by value) that contains graph | 
|---|
| 7 | ;          information in the format: | 
|---|
| 8 | ; | 
|---|
| 9 | ;          KMPUAR(...,0)=DataTitle^DataValue | 
|---|
| 10 | ;                        piece 1 - the title of the data | 
|---|
| 11 | ;                        piece 2 - the actual value of the data | 
|---|
| 12 | ; | 
|---|
| 13 | ; KMPUTI.. graph titles in 4 up-arrow pieces | 
|---|
| 14 | ;          piece 1 - title of the graph | 
|---|
| 15 | ;          piece 2 - second title of graph (if any) | 
|---|
| 16 | ;          piece 3 - x axis title | 
|---|
| 17 | ;          piece 4 - y axis title | 
|---|
| 18 | ; | 
|---|
| 19 | ; KMPUOPT. (optional) A string of one or more letters representing | 
|---|
| 20 | ;          desired options. | 
|---|
| 21 | ;          "A" - angle titles (only for vertical graph) | 
|---|
| 22 | ;          "D" - double space | 
|---|
| 23 | ;          "G" - print grid across graph | 
|---|
| 24 | ;          "S" - display entries with MAX>9999 in scientific notation | 
|---|
| 25 | ;          "V" - display 'vertical' graph | 
|---|
| 26 | ; | 
|---|
| 27 | ; KMPUSTRT (optional). Number to start graph. | 
|---|
| 28 | ;          if KMPUSTRT=0 first hash mark of graph will equal 0 | 
|---|
| 29 | ; | 
|---|
| 30 | ; KMPUTAR. (optional) Text array. Local or global array that | 
|---|
| 31 | ;          contains text to be displayed with the graph. | 
|---|
| 32 | ; | 
|---|
| 33 | ;          Example:  KMPUTAR="UTIL($J," | 
|---|
| 34 | ;                    KMPUTAR="^ASK(999999,23,10," | 
|---|
| 35 | ;                    KMPUTAR="^TMP($J,""TEXT""," | 
|---|
| 36 | ; | 
|---|
| 37 | ; KMPUXIT. (optional) Exit without 'continue' text.  This allows the | 
|---|
| 38 | ;          programmer to use their own display for continuing | 
|---|
| 39 | ;           0 - do not exit - display 'continue' text | 
|---|
| 40 | ;           1 - exit | 
|---|
| 41 | ; | 
|---|
| 42 | ; KMPUMAX. (optional) Maximum scale - if not defined, the maximum value | 
|---|
| 43 | ;          is determined from the data passed.  If KMPUMAX is defined, | 
|---|
| 44 | ;          scale will be adjusted accordingly. | 
|---|
| 45 | ;----------------------------------------------------------------------- | 
|---|
| 46 | ; | 
|---|
| 47 | I '$D(KMPUAR) W !!?7,"...no array data...",!! D CONT Q | 
|---|
| 48 | S KMPUSTRT=+$G(KMPUSTRT),KMPUOPT=$$UP^XLFSTR($G(KMPUOPT)) | 
|---|
| 49 | S KMPUXIT=+$G(KMPUXIT),KMPUMAX=+$G(KMPUMAX) | 
|---|
| 50 | K:$G(KMPUTAR)="" KMPUTAR | 
|---|
| 51 | I '$D(@KMPUAR) D  Q | 
|---|
| 52 | .W *7,!!?7,"...no information to graph...",!! | 
|---|
| 53 | .D CONT | 
|---|
| 54 | S DTIME=$S($D(DTIME):DTIME,1:600) | 
|---|
| 55 | ; | 
|---|
| 56 | N BAR,BOTTOM,DATA,DEC,DEC1,DIV,DIVT,DNUM,DX,DY,END,GWIDTH,I,I1,LABEL,MAX | 
|---|
| 57 | N MIN,NUM,OFFSET,SCALE,STEP,TEXT,TITLE,X,XCOORD,XTITLE,YNUM,YTITLE,Z | 
|---|
| 58 | N IOBLC,IOBRC,IOBT,IOG1,IOG0,IOHL,IOLT,IOMT,IORT,IOTLC,IOTRC,IOTT,IOVL | 
|---|
| 59 | N IOINHI,IOINLOW,IORVOFF,IORVON,IOUOFF,IOUON | 
|---|
| 60 | ; | 
|---|
| 61 | D INIT^KMPDUG1 I KMPUOPT["D",(KMPUOPT'["V"),(YNUM>8) D  Q | 
|---|
| 62 | .W *7,!!?7,"...too many data elements to double space on a terminal" | 
|---|
| 63 | .W !?7,"   for a Horizontal Graph..." | 
|---|
| 64 | .W !!! D CONT | 
|---|
| 65 | I KMPUOPT["D",(KMPUOPT["V"),(YNUM>34) D  Q | 
|---|
| 66 | .W *7,!!?7,"...too many data elements to double space on a terminal" | 
|---|
| 67 | .W !?7,"   for a Vertical Graph..." | 
|---|
| 68 | .W !!! D CONT | 
|---|
| 69 | ; if not a terminal do printer routine | 
|---|
| 70 | I $E(IOST)'="C" Q  ;D EN^KMPUGP Q | 
|---|
| 71 | I $G(IOG1)']""!($G(IOG0)']"") D  Q | 
|---|
| 72 | .W *7,!!?7,"...unable to place terminal in graphics mode...",!! | 
|---|
| 73 | .D CONT | 
|---|
| 74 | I 'MAX D  Q | 
|---|
| 75 | .W *7,!!?7,"...unable to determine any data to graph or data all zeros...",!! | 
|---|
| 76 | .D CONT | 
|---|
| 77 | ; if 'vertical' graph | 
|---|
| 78 | I KMPUOPT["V" D EN^KMPDUGV Q | 
|---|
| 79 | ; draw graph - display titles - display data | 
|---|
| 80 | D DRAW^KMPDUG1,TITLES^KMPDUG1,DATA | 
|---|
| 81 | ; if text to display. | 
|---|
| 82 | I $D(KMPUTAR) D WP^KMPDU11(KMPUTAR,(BOTTOM+5),24) Q | 
|---|
| 83 | D:'KMPUXIT CONT | 
|---|
| 84 | Q | 
|---|
| 85 | ; | 
|---|
| 86 | CONT ;-- hold screen | 
|---|
| 87 | S DX=(IOM-23\2),DY=(IOSL-1) X IOXY | 
|---|
| 88 | R "Press <RET> to continue",X:DTIME | 
|---|
| 89 | Q | 
|---|
| 90 | ; | 
|---|
| 91 | DATA ;-- display data in graph. | 
|---|
| 92 | W IOG0 S DY=$S(KMPUOPT["D":1,1:2),BAR=0,I="" | 
|---|
| 93 | F  S I=$O(@KMPUAR@(I)) Q:I=""  I $D(@KMPUAR@(I,0)) S DATA=@KMPUAR@(I,0) D | 
|---|
| 94 | .S XCOORD=$P(DATA,U,2),END=(XCOORD-KMPUSTRT-STEP) | 
|---|
| 95 | .S DX=16,DY=DY+$S(KMPUOPT["D":2,1:1) | 
|---|
| 96 | .;  if no data quit | 
|---|
| 97 | .Q:$P(@KMPUAR@(I,0),U,2)']"" | 
|---|
| 98 | .F I1=0:STEP:END X IOXY W @BAR(BAR),! S DX=DX+1 Q:DX=68 | 
|---|
| 99 | .;  print value in parenthesis | 
|---|
| 100 | .S DX=69 X IOXY W "<",$J((XCOORD/DIV),$L($FN((MAX/DIV),"",DEC)),DEC),">" | 
|---|
| 101 | .S BAR=$S(BAR=1:0,1:1) | 
|---|
| 102 | Q | 
|---|