| 1 | TIUFLLM1 ; SLC/MAM - Library; LM Related: LINEUP(INFO,TEMPLATE), UPDATE(TMPLATE,SHIFT,LASTLIN,PINFO), AINUSE(LINENO), INUSEUP(FILEDA,LINENO) ;8/27/97  18:47 | 
|---|
| 2 | ;;1.0;TEXT INTEGRATION UTILITIES;**11**;Jun 20, 1997 | 
|---|
| 3 | ; | 
|---|
| 4 | LINEUP(INFO,TEMPLATE) ; Update Line +INFO.  Line must be updated, NOT added or deleted. | 
|---|
| 5 | ; Requires INFO,TEMPLATE | 
|---|
| 6 | N NODE0 | 
|---|
| 7 | D:$D(INFO)<10 PARSE^TIUFLLM(.INFO) D:$D(NODE0)<10 NODE0ARR^TIUFLF($P(INFO,U,2),.NODE0) G:$D(DTOUT) LINEX | 
|---|
| 8 | D BUFENTRY^TIUFLLM2(.INFO,.NODE0,TEMPLATE) | 
|---|
| 9 | D UPDATE(TEMPLATE,0,INFO-1) | 
|---|
| 10 | LINEX Q | 
|---|
| 11 | ; | 
|---|
| 12 | UPDATE(TMPLATE,SHIFT,LASTLIN,PINFO) ; Update LM TMPLATE using Buffer Array. | 
|---|
| 13 | ; TMPLATE lines may be inserted, deleted, or reset.  Resets 1 line; | 
|---|
| 14 | ;inserts or deletes a continuous chunk of lines. | 
|---|
| 15 | ; Lines to be inserted must be in buffer array ^TMP("TIUFB", starting | 
|---|
| 16 | ;with line # LASTLIN+1 and running for SHIFT continuous lines. | 
|---|
| 17 | ; Line to be reset must be in Buffer Array at line # LASTLIN+1, | 
|---|
| 18 | ;with SHIFT = 0. | 
|---|
| 19 | ; Lines to be deleted must be continuous lines starting with line # | 
|---|
| 20 | ;LASTLIN+1 and running for -SHIFT lines, where SHIFT is negative. | 
|---|
| 21 | ; Requires TMPLATE = LM Sub/Template H, A, I, T, D, O, or P; If TMPLATE | 
|---|
| 22 | ;                  = H (Hierarchy), then lines to be added/deleted | 
|---|
| 23 | ;                    must all be items under the same parent. | 
|---|
| 24 | ;          SHIFT is >0 for add; >0 for delete; =0 for reset. | 
|---|
| 25 | ;          |SHIFT| is Length of addition/deletion;  a reset does not | 
|---|
| 26 | ;            add or delete, so SHIFT is 0 for reset. | 
|---|
| 27 | ;          LASTLIN = Line BEFORE Insertion/del/update point as above. | 
|---|
| 28 | ; | 
|---|
| 29 | ; Requires PINFO and PINFO array IF TMPLATE = "H" AND adding/deleting | 
|---|
| 30 | ;          (but NOT resetting) lines AND LASTLIN'=0 (Clinical Documents | 
|---|
| 31 | ;            HAS NO parent). | 
|---|
| 32 | ;          PINFO = ^TMP("TIUF1IDX,$J,LINENO), where LINENO is LM | 
|---|
| 33 | ;            Lineno of LM PARENT of lines added/deleted. | 
|---|
| 34 | ;          PINFO Array is as set in PARSE^TIUFLLM for PINFO. | 
|---|
| 35 | ;          PINFO is used to: | 
|---|
| 36 | ;            Update ^TMP("TIUF*IDX" for ancestors of lines | 
|---|
| 37 | ;              added/deleted (3rd piece, XPDLCNT); | 
|---|
| 38 | ;            Update the + preceeding Name of parent | 
|---|
| 39 | ;              of lines added/deleted. | 
|---|
| 40 | ;          If PINFO is received, routine returns updated PINFO array. | 
|---|
| 41 | ;            (Updates PINFO("XPDLCNT"). | 
|---|
| 42 | ; DOESN'T update VALMCNT. (Don't try it: may be updating template other than the one you're presently in.) | 
|---|
| 43 | ;do I need "DAF" for all templates?;MAM | 
|---|
| 44 | N LINENO,TIUI,TIUJ,OLDINFO,BEG,INC,END,BINFO,ARR,ARRIDX,ARRNO,VCNT | 
|---|
| 45 | N INUSE,INUSE1,INUSECOL,PLINENO | 
|---|
| 46 | S ARRNO=^TMP("TIUF",$J,"ARRNO"_TMPLATE) | 
|---|
| 47 | S ARR="TIUF"_ARRNO,ARRIDX="TIUF"_ARRNO_"IDX" | 
|---|
| 48 | I SHIFT'>0 D | 
|---|
| 49 | . ;Delete lines to be deleted/updated | 
|---|
| 50 | . S BEG=LASTLIN+1,END=$S(SHIFT=0:BEG,1:BEG-1-SHIFT) | 
|---|
| 51 | . F TIUI=BEG:1:END D | 
|---|
| 52 | . . S OLDINFO=^TMP(ARRIDX,$J,TIUI) | 
|---|
| 53 | . . K ^TMP(ARR,$J,TIUI,0),^TMP(ARR,$J,"IDX",TIUI) | 
|---|
| 54 | . . K ^TMP(ARRIDX,$J,"DAF",$P(OLDINFO,U,2),TIUI) | 
|---|
| 55 | . . I TMPLATE="T" K ^TMP(ARRIDX,$J,"DA10",$P(OLDINFO,U,6),TIUI) | 
|---|
| 56 | . . K ^TMP(ARRIDX,$J,TIUI) | 
|---|
| 57 | . . Q | 
|---|
| 58 | . Q | 
|---|
| 59 | I SHIFT'=0 D | 
|---|
| 60 | . ; Move lines starting w LASTLIN+1 down, creating gap to add entries | 
|---|
| 61 | . ; OR Move lines after deleted lines up to fill in gap. | 
|---|
| 62 | . S VCNT=$O(^TMP(ARR,$J,1000000),-1) | 
|---|
| 63 | . I SHIFT>0 S BEG=VCNT,INC=-1,END=LASTLIN+1 | 
|---|
| 64 | . E  S BEG=LASTLIN+1-SHIFT,INC=1,END=VCNT | 
|---|
| 65 | . F LINENO=BEG:INC:END Q:INC>0&(BEG>END)  Q:INC<0&(BEG<END)  D | 
|---|
| 66 | . . S ^TMP(ARR,$J,LINENO+SHIFT,0)=$$SETSTR^VALM1(LINENO+SHIFT,^TMP(ARR,$J,LINENO,0),1,5) ; SETFLD doesn't work since called by nontarget template. | 
|---|
| 67 | . . I SHIFT>5!(SHIFT<-5) W "." | 
|---|
| 68 | . . I ARR'="TIUF3" S ^TMP(ARR,$J,"IDX",LINENO+SHIFT,LINENO+SHIFT)="" | 
|---|
| 69 | . . S OLDINFO=^TMP(ARRIDX,$J,LINENO) | 
|---|
| 70 | . . S $P(OLDINFO,U)=LINENO+SHIFT | 
|---|
| 71 | . . S PLINENO=$P(OLDINFO,U,5) I PLINENO>LASTLIN S $P(OLDINFO,U,5)=PLINENO+SHIFT | 
|---|
| 72 | . . S ^TMP(ARRIDX,$J,"DAF",$P(OLDINFO,U,2),LINENO+SHIFT)="" | 
|---|
| 73 | . . I TMPLATE="T" S ^TMP(ARRIDX,$J,"DA10",$P(OLDINFO,U,6),LINENO+SHIFT)="" | 
|---|
| 74 | . . S ^TMP(ARRIDX,$J,LINENO+SHIFT)=OLDINFO | 
|---|
| 75 | . . K ^TMP(ARR,$J,LINENO,0),^TMP(ARR,$J,"IDX",LINENO,LINENO) | 
|---|
| 76 | . . K ^TMP(ARRIDX,$J,LINENO),^TMP(ARRIDX,$J,"DAF",$P(OLDINFO,U,2),LINENO) | 
|---|
| 77 | . . I TMPLATE="T" K ^TMP(ARRIDX,$J,"DA10",$P(OLDINFO,U,6),LINENO) | 
|---|
| 78 | . . Q | 
|---|
| 79 | . Q | 
|---|
| 80 | I SHIFT'<0 D | 
|---|
| 81 | . ; Fill LM space with buffer array to add/update entries. | 
|---|
| 82 | . S TIUJ=0 F  S TIUJ=$O(^TMP("TIUFB",$J,TIUJ)) Q:'TIUJ  D | 
|---|
| 83 | . . S ^TMP(ARR,$J,TIUJ,0)=^TMP("TIUFB",$J,TIUJ,0) | 
|---|
| 84 | . . I SHIFT>5 W "." | 
|---|
| 85 | . . I ARR'="TIUF3" S ^TMP(ARR,$J,"IDX",TIUJ,TIUJ)="" | 
|---|
| 86 | . . S BINFO=^TMP("TIUFBIDX",$J,TIUJ) | 
|---|
| 87 | . . S ^TMP(ARRIDX,$J,"DAF",$P(BINFO,U,2),TIUJ)="" | 
|---|
| 88 | . . I TMPLATE="T" S ^TMP(ARRIDX,$J,"DA10",$P(BINFO,U,6),TIUJ)="" | 
|---|
| 89 | . . S ^TMP(ARRIDX,$J,TIUJ)=BINFO | 
|---|
| 90 | . . Q | 
|---|
| 91 | . K ^TMP("TIUFB",$J),^TMP("TIUFBIDX",$J) | 
|---|
| 92 | . Q | 
|---|
| 93 | I $G(PINFO),SHIFT,"HC"[TMPLATE D | 
|---|
| 94 | . ; For Template H or C: | 
|---|
| 95 | . ; Updates 3rd piece of ^TMP("TIUF1IDX",$J,LINENO) (XPDLCNT) for mutual | 
|---|
| 96 | . ;   parent and ancestors of entries to be added/deleted; | 
|---|
| 97 | . ; Updates PINFO, array PINFO; | 
|---|
| 98 | . ; Updates + in front of parent for template H | 
|---|
| 99 | . N ANCLNO,XPDLCNT,AINFO | 
|---|
| 100 | . S ANCLNO=+PINFO | 
|---|
| 101 | . F  S AINFO=$G(^TMP("TIUF1IDX",$J,ANCLNO)) Q:'AINFO  D | 
|---|
| 102 | . . S XPDLCNT=$P(AINFO,U,3)+SHIFT,$P(^TMP("TIUF1IDX",$J,ANCLNO),U,3)=XPDLCNT | 
|---|
| 103 | . . S ANCLNO=+$P(AINFO,U,5) | 
|---|
| 104 | . S PINFO("XPDLCNT")=$P(PINFO,U,3)+SHIFT | 
|---|
| 105 | . S $P(PINFO,U,3)=PINFO("XPDLCNT") | 
|---|
| 106 | . I TMPLATE="H" S ^TMP("TIUF1",$J,+PINFO,0)=$$PLUSUP^TIUFLLM(.PINFO,^TMP("TIUF1",$J,+PINFO,0)) | 
|---|
| 107 | UPDAX Q | 
|---|
| 108 | ; | 
|---|