| 1 | SPNLRU ;ISC-SF/GB-SCD UTILITIES FOR REPORT PRINTING ;6/23/95  12:04
 | 
|---|
| 2 |  ;;2.0;Spinal Cord Dysfunction;;01/02/1997
 | 
|---|
| 3 | MEDIAN(TOTITEMS,ARRAY)  ; Function returns median value of array.  Info at end.
 | 
|---|
| 4 |  N EVEN,TARGET,NUMITEMS,MEDIAN,VALUE
 | 
|---|
| 5 |  Q:'TOTITEMS 0
 | 
|---|
| 6 |  S EVEN='(TOTITEMS#2) ; Is number of items even or odd?
 | 
|---|
| 7 |  S TARGET=(TOTITEMS+1)\2 ; Which item do we want to reach?
 | 
|---|
| 8 |  S VALUE=-1,NUMITEMS=0 ; Step thru array, looking for target.
 | 
|---|
| 9 |  F  S @("VALUE=$O("_ARRAY_VALUE_"))") D  Q:NUMITEMS'<TARGET
 | 
|---|
| 10 |  . S @("NUMITEMS=NUMITEMS+$G("_ARRAY_VALUE_"))")
 | 
|---|
| 11 |  I VALUE="" W !,"MEDIAN:  We hit the end of the array, but shouldn't have" Q 0
 | 
|---|
| 12 |  S MEDIAN=VALUE
 | 
|---|
| 13 |  I EVEN,(NUMITEMS=TARGET) D  ; May need to get next value and average.
 | 
|---|
| 14 |  . S @("VALUE=$O("_ARRAY_VALUE_"))")
 | 
|---|
| 15 |  . S MEDIAN=(MEDIAN+VALUE)/2
 | 
|---|
| 16 |  Q MEDIAN
 | 
|---|
| 17 |  ; The median value in an array of an odd number of items is
 | 
|---|
| 18 |  ; the value of the middle item.  (If there are 5 items, the 3rd is
 | 
|---|
| 19 |  ; the median.)
 | 
|---|
| 20 |  ; The median value in an array of an even number of items is the
 | 
|---|
| 21 |  ; average of the two middle items.  (If there are 6 items, the median
 | 
|---|
| 22 |  ; is the average of the 3rd and 4th items.)
 | 
|---|
| 23 |  ; Example:
 | 
|---|
| 24 |  ;                  values   number of items per value
 | 
|---|
| 25 |  ;                       |   |
 | 
|---|
| 26 |  ; S GBTEST(1,"CT","IP",30)=3
 | 
|---|
| 27 |  ; S GBTEST(1,"CT","IP",148)=1
 | 
|---|
| 28 |  ; S GBTEST(1,"CT","IP",160)=1
 | 
|---|
| 29 |  ; S GBTEST(1,"CT","IP",365)=1
 | 
|---|
| 30 |  ; So we've got 3 items with a value of 30, and 1 item each at 148,
 | 
|---|
| 31 |  ; 160, and 365.
 | 
|---|
| 32 |  ; S TOTITEMS=6   (That's 3+1+1+1)
 | 
|---|
| 33 |  ; Now invoke the function.  The first arg is the total number of items.
 | 
|---|
| 34 |  ; The second arg is the 'root' of the array up to, but not including
 | 
|---|
| 35 |  ; the values.  The root must be in quotes.
 | 
|---|
| 36 |  ; S MEDVAL=$$MEDIAN(TOTITEMS,"GBTEST(1,""CT"",""IP"",")
 | 
|---|
| 37 |  ; (MEDVAL should be 89)
 | 
|---|
| 38 | GETNAME(DFN,NAME,SSN) ;
 | 
|---|
| 39 |  N VADM,VA,I ; I need to do this because DEM^VADPT kills I, which is
 | 
|---|
| 40 |  ;      used as a looping variable by many routines which call GETNAME.
 | 
|---|
| 41 |  I $D(^DPT(DFN,0)) D
 | 
|---|
| 42 |  . ; If the user has the correct key...
 | 
|---|
| 43 |  . I $D(^XUSEC("SPNL SCD PTS",DUZ)) D
 | 
|---|
| 44 |  . . D DEM^VADPT
 | 
|---|
| 45 |  . . S NAME=$E(VADM(1),1,30)
 | 
|---|
| 46 |  . . S SSN=VA("PID")
 | 
|---|
| 47 |  . E  D
 | 
|---|
| 48 |  . . S NAME="Not Revealed"
 | 
|---|
| 49 |  . . S SSN=""
 | 
|---|
| 50 |  E  D
 | 
|---|
| 51 |  . S NAME="Not in PATIENT FILE!"
 | 
|---|
| 52 |  . S SSN=""
 | 
|---|
| 53 |  Q
 | 
|---|
| 54 | CENTER(STRING,LINELEN) ; Function centers a string
 | 
|---|
| 55 |  N POSN,LBLANKS
 | 
|---|
| 56 |  I '$D(LINELEN) S LINELEN=IOM
 | 
|---|
| 57 |  S POSN=(LINELEN-$L(STRING))\2
 | 
|---|
| 58 |  I POSN<2 Q STRING
 | 
|---|
| 59 |  S LBLANKS="",$P(LBLANKS," ",POSN-1)=""
 | 
|---|
| 60 |  Q LBLANKS_STRING
 | 
|---|
| 61 | PAD(STRING,LINELEN) ; Function pads a string with spaces on the right
 | 
|---|
| 62 |  N BLANKS,NUMBLANK
 | 
|---|
| 63 |  I '$D(LINELEN) S LINELEN=IOM
 | 
|---|
| 64 |  S NUMBLANK=LINELEN-$L(STRING)
 | 
|---|
| 65 |  I NUMBLANK<1 Q STRING
 | 
|---|
| 66 |  S BLANKS="",$P(BLANKS," ",NUMBLANK)=""
 | 
|---|
| 67 |  Q STRING_BLANKS
 | 
|---|
| 68 | HEADER(TITLE,ABORT) ;
 | 
|---|
| 69 |  N DIR,DIRUT,I,TODAY,LENTITLE
 | 
|---|
| 70 |  ; If we are printing to the screen and we are not printing the
 | 
|---|
| 71 |  ; first page of the report, "Press return to continue..."
 | 
|---|
| 72 |  S SPNPAGE=SPNPAGE+1
 | 
|---|
| 73 |  I $G(IOST)["C-"&(SPNPAGE'=1) D  Q:ABORT
 | 
|---|
| 74 |  . S DIR(0)="E"
 | 
|---|
| 75 |  . D ^DIR
 | 
|---|
| 76 |  . I $D(DIRUT) S ABORT=1
 | 
|---|
| 77 |  W @IOF
 | 
|---|
| 78 |  I $G(IOST)'["C-" D
 | 
|---|
| 79 |  . S TODAY=$E(DT,4,5)_"/"_$E(DT,6,7)_"/"_$E(DT,2,3)
 | 
|---|
| 80 |  . S TITLE(1)=TODAY_$E(TITLE(1),$L(TODAY)+1,999)
 | 
|---|
| 81 |  . S LENTITLE=$L(TITLE(1))
 | 
|---|
| 82 |  . S TITLE(1)=TITLE(1)_$J("Page "_SPNPAGE,IOM-LENTITLE)
 | 
|---|
| 83 |  S I="" F  S I=$O(TITLE(I)) Q:I=""  W !,TITLE(I)
 | 
|---|
| 84 |  W !
 | 
|---|
| 85 |  I IOST'["C-" S TITLE(1)=$E(TITLE(1),1,LENTITLE)
 | 
|---|
| 86 |  Q
 | 
|---|