| 1 | IBDF2A ;ALB/CJM - ENCOUNTER FORM (builds form and prints it) ;NOV 16,1992
 | 
|---|
| 2 |  ;;3.0;AUTOMATED INFO COLLECTION SYS;**1,46**;APR 24, 1997
 | 
|---|
| 3 | FORM(IBFORM,WITHDATA) ;prints FORM - defines IBDEVICE array
 | 
|---|
| 4 |  ;input variables - IBFORM=ien of the form, WITHDATA=1 if the form should be completed with data 
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 |  N IBDEVICE
 | 
|---|
| 7 |  ;
 | 
|---|
| 8 |  D DEVICE^IBDFUA(0,.IBDEVICE)
 | 
|---|
| 9 |  D DRWFORM(IBFORM,WITHDATA,.IBDEVICE)
 | 
|---|
| 10 | EXIT ;
 | 
|---|
| 11 |  ;
 | 
|---|
| 12 |  D KPRNTVAR^IBDFUA ;kills the screen and graphics parameters
 | 
|---|
| 13 |  K X,Y,I
 | 
|---|
| 14 |  Q
 | 
|---|
| 15 | DRWFORM(IBFORM,WITHDATA,IBDEVICE) ;prints IBFORM - IBDEVICE array already defined, must be passed by reference
 | 
|---|
| 16 |  N RTNLIST,NODE,IBPFID,IBARRAY,LINES,HAND,IBPRINT,TYPE,UNIT,PRINT,REPRINT
 | 
|---|
| 17 |  ;
 | 
|---|
| 18 |  Q:'$$FORMDSCR^IBDFU1C(.IBFORM)
 | 
|---|
| 19 |  D PRNTPRMS^IBDFU1C(.IBPRINT,WITHDATA,1,0,1)
 | 
|---|
| 20 |  ;
 | 
|---|
| 21 |  D DEVSETUP^IBDF2A1(.IBFORM,.IBDEVICE)
 | 
|---|
| 22 |  K ^TMP("IB",$J,"INTERFACES"),^TMP("IBDF",$J,"FORM"),^("OVERFLOW")
 | 
|---|
| 23 |  S IBPFID=""
 | 
|---|
| 24 |  ;
 | 
|---|
| 25 |  ;for forms other than toolkit, always use compiled version
 | 
|---|
| 26 |  I 'IBFORM("TOOLKIT"),'IBFORM("COMPILED") D COMPILE^IBDF19 Q:'IBFORM("COMPILED")
 | 
|---|
| 27 |  ;
 | 
|---|
| 28 |  S REPRINT=0
 | 
|---|
| 29 |  ;if printing a form with patient data to paper get id for form tracking
 | 
|---|
| 30 |  I '$G(IBDSAMP),IBFORM("COMPILED"),IBPRINT("WITH_DATA"),'IBDEVICE("CRT") S IBPFID=+$$FID^IBDF18C(DFN,IBAPPT,1,IBFORM("TYPE"),IBCLINIC) I $P($G(^IBD(357.96,+IBPFID,1,0)),"^",4) S REPRINT=1
 | 
|---|
| 31 |  ;
 | 
|---|
| 32 |  D ARRAYS^IBDFU1C(.IBFORM,.IBARRAY)
 | 
|---|
| 33 |  I 'IBFORM("TOOLKIT"),WITHDATA D JUSTDATA(WITHDATA)
 | 
|---|
| 34 |  I IBFORM("TOOLKIT") D DRWBLKS
 | 
|---|
| 35 |  ;
 | 
|---|
| 36 |  ;if no graphics and not PCL replace graphics with something printable
 | 
|---|
| 37 |  I 'IBDEVICE("PCL") D REPLACE
 | 
|---|
| 38 |  ;
 | 
|---|
| 39 |  ;can not do underlining on a CRT
 | 
|---|
| 40 |  I IBDEVICE("CRT") S IBARRAY("UNDERLINES")="IBARRAY(""UNDERLINES"")"
 | 
|---|
| 41 |  ;
 | 
|---|
| 42 |  ;print the form
 | 
|---|
| 43 |  D LNPRINT^IBDF2F($G(IBPFID))
 | 
|---|
| 44 |  ;
 | 
|---|
| 45 |  ;print the overflow report
 | 
|---|
| 46 |  D OVERFLOW^IBDF1B3
 | 
|---|
| 47 |  ;
 | 
|---|
| 48 |  K ^TMP("IB",$J,"INTERFACES"),^TMP("IBDF",$J,"FORM")
 | 
|---|
| 49 |  ;
 | 
|---|
| 50 |  ;reset printer defaults if PCL5
 | 
|---|
| 51 |  I $G(IBDEVICE("PCL")) D
 | 
|---|
| 52 |  . X $G(^%ZIS(2,$G(IOST(0)),2))
 | 
|---|
| 53 |  Q
 | 
|---|
| 54 |  ;
 | 
|---|
| 55 | DRWBLKS ;draws all the form's blocks
 | 
|---|
| 56 |  N IBBLK,RTNLIST
 | 
|---|
| 57 |  S IBBLK="" F  S IBBLK=$O(^IBE(357.1,"C",IBFORM,IBBLK)) Q:'IBBLK  D DRWBLOCK^IBDF2A1(IBBLK,0)
 | 
|---|
| 58 |  Q
 | 
|---|
| 59 |  ;
 | 
|---|
| 60 | JUSTDATA(WITHDATA) ;draws the form's data fields and dynamic selection lists, just the portion that may change with data
 | 
|---|
| 61 |  ;WITHDATA means to fill in with data
 | 
|---|
| 62 |  ;
 | 
|---|
| 63 |  N IBBLK,RTNLIST,IBFLD,IBLIST,SUB,NODE,IBPRINT
 | 
|---|
| 64 |  ;
 | 
|---|
| 65 |  D PRNTPRMS^IBDFU1C(.IBPRINT,WITHDATA,0,0,1)
 | 
|---|
| 66 |  ;
 | 
|---|
| 67 |  I IBDEVICE("LISTMAN") N IBWARN S IBWARN=0
 | 
|---|
| 68 |  S IBBLK="" F  S IBBLK=$O(^IBE(357.1,"C",IBFORM,IBBLK)) Q:'IBBLK  D
 | 
|---|
| 69 |  .Q:$$BLKDESCR^IBDFU1B(.IBBLK)
 | 
|---|
| 70 |  .S IBFLD="" F  S IBFLD=$O(^IBE(357.5,"C",IBBLK,IBFLD)) Q:'IBFLD  D DATAFLD^IBDF2B(IBFLD)
 | 
|---|
| 71 |  .S:'IBPRINT("WITH_DATA") IBPRINT("ENTIRE")=1 S IBLIST="" F  S IBLIST=$O(^IBE(357.2,"AD",IBBLK,IBLIST)) Q:'IBLIST  D PRINTLST^IBDF2D(IBLIST)
 | 
|---|
| 72 |  .I IBDEVICE("LISTMAN") S SUB=0 F  S SUB=$O(^IBE(357.1,IBBLK,"B",SUB)) Q:'SUB  S NODE=$G(^IBE(357.1,IBBLK,"B",SUB,0)) D DRWSTR^IBDFU(+$P(NODE,"^")\1,+$P(NODE,"^",2),"[ ]")
 | 
|---|
| 73 |  Q
 | 
|---|
| 74 |  ;
 | 
|---|
| 75 | REPLACE ;replace objects requiring PCL with plain text
 | 
|---|
| 76 |  N IBROW,IBCOL,IBBLK
 | 
|---|
| 77 |  D PRNTPRMS^IBDFU1C(.IBPRINT,0,1,0,1)
 | 
|---|
| 78 |  S IBBLK("X")=0,IBBLK("Y")=0
 | 
|---|
| 79 |  I 'IBDEVICE("GRAPHICS") D
 | 
|---|
| 80 |  .S IBROW="" F  S IBROW=$O(@IBARRAY("GRAPHICS")@(IBROW)) Q:IBROW=""  S IBCOL="" F  S IBCOL=$O(@IBARRAY("GRAPHICS")@(IBROW,IBCOL)) Q:IBCOL=""  D DRWSTR^IBDFU(IBROW,IBCOL,$G(@IBARRAY("GRAPHICS")@(IBROW,IBCOL)),"G")
 | 
|---|
| 81 |  .S IBARRAY("GRAPHICS")="IBARRAY(""GRAPHICS"")"
 | 
|---|
| 82 |  ;
 | 
|---|
| 83 |  ;replace bubbles with "[ ]"
 | 
|---|
| 84 |  S IBROW="" F  S IBROW=$O(@IBARRAY("BUBBLES")@(IBROW)) Q:IBROW=""  S IBCOL="" F  S IBCOL=$O(@IBARRAY("BUBBLES")@(IBROW,IBCOL)) Q:IBCOL=""  D DRWSTR^IBDFU(IBROW\1,IBCOL,"[ ]")
 | 
|---|
| 85 |  S IBARRAY("BUBBLES")="IBARRAY(""BUBBLES"")"
 | 
|---|
| 86 |  ;
 | 
|---|
| 87 |  ;now replace hand print fields
 | 
|---|
| 88 |  S IBROW="" F  S IBROW=$O(@IBARRAY("HAND_PRINT")@(IBROW)) Q:IBROW=""  S IBCOL="" F  S IBCOL=$O(@IBARRAY("HAND_PRINT")@(IBROW,IBCOL)) Q:IBCOL=""  S HAND=0 F  S HAND=$O(@IBARRAY("HAND_PRINT")@(IBROW,IBCOL,HAND)) Q:'HAND  D
 | 
|---|
| 89 |  .N ROW
 | 
|---|
| 90 |  .S NODE=$G(@IBARRAY("HAND_PRINT")@(IBROW,IBCOL,HAND)),WIDTH=$P(NODE,"^",3),LINES=$P(NODE,"^",6),TYPE=$P(NODE,"^",14),(UNIT,PRINT)="" I $P(NODE,"^",17) S NODE=$G(^IBE(359.1,$P(NODE,"^",17),0)),UNIT=$P(NODE,"^",11),PRINT=$P(NODE,"^",5)
 | 
|---|
| 91 |  .Q:('WIDTH)!('TYPE)
 | 
|---|
| 92 |  .S STRING=""
 | 
|---|
| 93 |  .S:LINES'>0 LINES=1
 | 
|---|
| 94 |  .S ROW=IBROW
 | 
|---|
| 95 |  .I TYPE=1 D CNVRTLEN^IBDF2D1(WIDTH,.WIDTH),CNVRTHT^IBDF2D1(LINES,.LINES)
 | 
|---|
| 96 |  .I TYPE=2 F  Q:LINES'>0  D  S LINES=LINES-1,ROW=IBROW+2
 | 
|---|
| 97 |  ..N REPLACE,A,I
 | 
|---|
| 98 |  ..I IBFORM("WIDTH")>96 S $P(STRING,"___|",WIDTH+1)="",REPLACE("_")="    " F I=1:1:$L(PRINT) S A=$E(PRINT,I) S:A'="_" REPLACE(A)=" "_A_"  "
 | 
|---|
| 99 |  ..I IBFORM("WIDTH")'>96 S $P(STRING,"__|",WIDTH+1)="",REPLACE("_")="   " F I=1:1:$L(PRINT) S A=$E(PRINT,I) S:A'="_" REPLACE(A)=" "_A_" "
 | 
|---|
| 100 |  ..S:$L(UNIT) STRING=STRING_" "_UNIT
 | 
|---|
| 101 |  ..I $L(PRINT) S PRINT=$$REPLACE^XLFSTR(PRINT,.REPLACE)
 | 
|---|
| 102 |  ..D:$L(PRINT) DRWSTR^IBDFU(ROW,IBCOL,PRINT,"",$L(STRING))
 | 
|---|
| 103 |  ..D DRWSTR^IBDFU(ROW+1,IBCOL,STRING,"",$L(STRING))
 | 
|---|
| 104 |  .I TYPE=1 S $P(STRING,"_",WIDTH+1)="_" D DRWSTR^IBDFU(ROW+LINES-1,IBCOL,STRING,"")
 | 
|---|
| 105 |  S IBARRAY("HAND_PRINT")="IBARRAY(""HAND_PRINT"")"
 | 
|---|
| 106 |  Q
 | 
|---|