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