| 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
 | 
|---|