| 1 | PSOLLU1 ;BHAM/RJS - LASER LABEL UTILITIES ;11/22/02 | 
|---|
| 2 | ;;7.0;OUTPATIENT PHARMACY;**120,141,161**;DEC 1997 | 
|---|
| 3 | ; | 
|---|
| 4 | FONT(RLN,TEXT) ; | 
|---|
| 5 | ;-------------------------------------------------------------------- | 
|---|
| 6 | ;VARIABLES: | 
|---|
| 7 | ;    INPUT: | 
|---|
| 8 | ; REQUIRED: RLN - Relates to a value used to determine the max | 
|---|
| 9 | ;                   line length. | 
|---|
| 10 | ;            TEXT - Can contain a string and the $L(TEXT) is used | 
|---|
| 11 | ;                    to calculate the font size. | 
|---|
| 12 | ;   RETURN: | 
|---|
| 13 | ;             FONT - This is the calculated optimal font size. | 
|---|
| 14 | ;                    F8, F9, F10 or F12 will be returned. | 
|---|
| 15 | ;-------------------------------------------------------------------- | 
|---|
| 16 | D STRT(RLN,TEXT,"",.FONT) Q FONT | 
|---|
| 17 | Q | 
|---|
| 18 | ; | 
|---|
| 19 | STRT(RLN,TEXT,LNTH,FONT) ; | 
|---|
| 20 | ;  The LETTER array contains all the number of character per inch | 
|---|
| 21 | ;  for the different font sizes that can be used. | 
|---|
| 22 | N LN,LETTER,TXTIDX,SIZ,FNTIDX,LTTR,A | 
|---|
| 23 | S LETTER(1)="22^16^14^13^10",LETTER("!")="40^32^28^25^21" | 
|---|
| 24 | S LETTER(2)="22^16^14^13^10",LETTER("@")="11^8^7^7^5" | 
|---|
| 25 | S LETTER(3)="22^16^14^13^10",LETTER("#")="19^16^14^12^10" | 
|---|
| 26 | S LETTER(4)="22^16^14^13^10",LETTER("$")="20^18^16^14^12" | 
|---|
| 27 | S LETTER(5)="22^16^14^13^10",LETTER("%")="14^13^11^10^8" | 
|---|
| 28 | S LETTER(6)="22^16^14^13^10" | 
|---|
| 29 | S LETTER(7)="22^16^14^13^10",LETTER("&")="22^16^14^12^10" | 
|---|
| 30 | S LETTER(8)="22^16^14^13^10",LETTER("*")="30^23^20^18^15" | 
|---|
| 31 | S LETTER(9)="22^16^14^13^10",LETTER("(")="32^27^24^21^18" | 
|---|
| 32 | S LETTER(0)="22^16^14^13^10",LETTER(")")="32^27^24^21^18" | 
|---|
| 33 | S LETTER($C(34))="30^27^24^21^18",LETTER("'")="45^40^36^32^27" | 
|---|
| 34 | S LETTER("`")="30^27^24^21^18",LETTER("~")="18^15^13^12^10" | 
|---|
| 35 | S LETTER(",")="40^32^28^25^21",LETTER("<")="18^15^13^12^10" | 
|---|
| 36 | S LETTER(".")="35^27^24^21^18",LETTER(">")="18^15^13^12^10" | 
|---|
| 37 | S LETTER(";")="40^32^28^25^21",LETTER(":")="40^32^28^25^21" | 
|---|
| 38 | S LETTER("?")="22^16^14^12^10",LETTER("/")="40^32^28^25^21" | 
|---|
| 39 | S LETTER("[")="40^32^28^25^21",LETTER("{")="35^26^23^21^17" | 
|---|
| 40 | S LETTER("\")="40^32^28^25^21",LETTER("|")="42^34^30^27^23" | 
|---|
| 41 | S LETTER("]")="40^32^28^25^21",LETTER("}")="35^26^23^21^17" | 
|---|
| 42 | S LETTER("_")="20^15^14^12^10",LETTER("-")="30^27^24^21^18" | 
|---|
| 43 | S LETTER("=")="20^15^14^12^10",LETTER("+")="22^18^16^14^12" | 
|---|
| 44 | S LETTER(" ")="40^32^28^25^21" | 
|---|
| 45 | S LETTER("a")="19^16^14^12^10",LETTER("A")="16^13^11^10^8" | 
|---|
| 46 | S LETTER("b")="19^16^14^12^10",LETTER("B")="16^13^11^10^8" | 
|---|
| 47 | S LETTER("c")="22^18^16^14^12",LETTER("C")="15^13^11^10^8" | 
|---|
| 48 | S LETTER("d")="20^16^14^12^10",LETTER("D")="15^13^11^10^8" | 
|---|
| 49 | S LETTER("e")="20^16^14^12^10",LETTER("E")="16^13^11^10^8" | 
|---|
| 50 | S LETTER("f")="40^32^28^25^21",LETTER("F")="18^14^13^11^9" | 
|---|
| 51 | S LETTER("g")="20^16^14^12^10",LETTER("G")="14^11^10^9^7" | 
|---|
| 52 | S LETTER("h")="20^16^14^12^10",LETTER("H")="15^13^11^10^8" | 
|---|
| 53 | S LETTER("i")="50^40^36^32^27",LETTER("I")="40^32^28^25^21" | 
|---|
| 54 | S LETTER("j")="50^40^36^32^27",LETTER("J")="22^18^16^14^12" | 
|---|
| 55 | S LETTER("k")="24^18^16^14^12",LETTER("K")="16^13^11^10^8" | 
|---|
| 56 | S LETTER("l")="50^40^36^32^27",LETTER("L")="20^16^14^12^10" | 
|---|
| 57 | S LETTER("m")="13^10^9^8^7",LETTER("M")="13^11^10^9^7" | 
|---|
| 58 | S LETTER("n")="20^16^14^12^10",LETTER("N")="15^13^11^10^8" | 
|---|
| 59 | S LETTER("o")="20^16^14^12^10",LETTER("O")="14^11^10^9^7" | 
|---|
| 60 | S LETTER("p")="20^16^14^12^10",LETTER("P")="16^13^11^10^8" | 
|---|
| 61 | S LETTER("q")="20^16^14^12^10",LETTER("Q")="14^11^10^9^7" | 
|---|
| 62 | S LETTER("r")="35^32^28^25^21",LETTER("R")="15^13^11^10^8" | 
|---|
| 63 | S LETTER("s")="22^18^16^14^12",LETTER("S")="16^13^11^10^8" | 
|---|
| 64 | S LETTER("t")="40^32^28^25^21",LETTER("T")="18^14^13^11^9" | 
|---|
| 65 | S LETTER("u")="20^16^14^12^10",LETTER("U")="15^13^11^10^8" | 
|---|
| 66 | S LETTER("v")="23^18^16^14^12",LETTER("V")="16^13^11^10^8" | 
|---|
| 67 | S LETTER("w")="14^12^11^9^8",LETTER("W")="11^9^8^7^6" | 
|---|
| 68 | S LETTER("x")="23^18^16^14^12",LETTER("X")="16^13^11^10^8" | 
|---|
| 69 | S LETTER("y")="23^18^16^14^12",LETTER("Y")="16^13^11^10^8" | 
|---|
| 70 | S LETTER("z")="23^18^16^14^12",LETTER("Z")="18^14^13^11^9" | 
|---|
| 71 | ; | 
|---|
| 72 | ;  The LN array contains the length in inches for the different | 
|---|
| 73 | ;  sections of the laser label. | 
|---|
| 74 | S LN("RX#")=3.126 | 
|---|
| 75 | S LN("RXVAMC")=2.626 | 
|---|
| 76 | S LN("DRG")=3.376 | 
|---|
| 77 | S LN("SIG")=3.126 | 
|---|
| 78 | S LN("WRN")=1.99 | 
|---|
| 79 | S LN("ML")=2.376 | 
|---|
| 80 | S LN("ML2")=1.76 | 
|---|
| 81 | S LN("SEC2")=4.1876 | 
|---|
| 82 | S LN("SEC2X")=LN("SEC2") | 
|---|
| 83 | S LN("SIG2")=LN("SEC2") | 
|---|
| 84 | S LN("SEC2B")=LN("WRN") | 
|---|
| 85 | S LN("FULL")=8.1876 | 
|---|
| 86 | ; | 
|---|
| 87 | ; The LNTH array is used in calculating the length of the text | 
|---|
| 88 | ; for each of the different font sizes. | 
|---|
| 89 | S (LNTH(6),LNTH(8),LNTH(9),LNTH(10),LNTH(12))="" | 
|---|
| 90 | ; | 
|---|
| 91 | ; This section walks the TEXT string and extracts the each character | 
|---|
| 92 | ; then uses the LETTER array to lookup the number of characters per | 
|---|
| 93 | ; inch and calculates the length of the TEXT for each font. | 
|---|
| 94 | F TXTIDX=1:1:$L(TEXT) D | 
|---|
| 95 | .S LTTR=$E(TEXT,TXTIDX),A=$G(LETTER(LTTR),"18^16^14^12^10") | 
|---|
| 96 | .S LNTH(6)=LNTH(6)+(1/$P(A,U)) | 
|---|
| 97 | .S LNTH(8)=LNTH(8)+(1/($P(A,U,2))) | 
|---|
| 98 | .S LNTH(9)=LNTH(9)+(1/($P(A,U,3))) | 
|---|
| 99 | .S LNTH(10)=LNTH(10)+(1/($P(A,U,4))) | 
|---|
| 100 | .S LNTH(12)=LNTH(12)+(1/($P(A,U,5))) | 
|---|
| 101 | ; | 
|---|
| 102 | ; This section determines what would be the optimal font for the TEXT | 
|---|
| 103 | I RLN="WRN" D  Q | 
|---|
| 104 | . I LNTH(12)<LN(RLN) S FONT="F12" Q | 
|---|
| 105 | . I LNTH(10)<(LN(RLN)*2) S FONT="F10" Q | 
|---|
| 106 | . I LNTH(9)<(LN(RLN)*2.5) S FONT="F9" Q | 
|---|
| 107 | . I LNTH(8)<(LN(RLN)*2.6) S FONT="F8" Q | 
|---|
| 108 | . S FONT="F6" | 
|---|
| 109 | S FONT="F0" | 
|---|
| 110 | I LNTH(8)<LN(RLN) S FONT="F8" | 
|---|
| 111 | I LNTH(9)<LN(RLN) S FONT="F9" | 
|---|
| 112 | I LNTH(10)<LN(RLN) S FONT="F10" | 
|---|
| 113 | I LNTH(12)<LN(RLN) S FONT="F12" | 
|---|
| 114 | Q | 
|---|
| 115 | ADD ; Calculate the length and pad "_" to the end of TEXT for change of address | 
|---|
| 116 | ; then return FONT and TEXT to calling program. | 
|---|
| 117 | N NEEDED,CNT,DASH | 
|---|
| 118 | S NEEDED=LN("SEC2X")-LNTH(10) | 
|---|
| 119 | S CNT=NEEDED*12\1 | 
|---|
| 120 | S DASH="________________________________________________________________________________________________________________" | 
|---|
| 121 | S TEXT2=TEXT_" "_$E(DASH,1,CNT) | 
|---|
| 122 | S FONT="F10" | 
|---|
| 123 | Q | 
|---|