[613] | 1 | VAFHLU ;BPFO/JRP - SEGMENT BUILDING UTILTIES ;7/12/2002
|
---|
| 2 | ;;5.3;Registration;**415,508**;Aug 13, 1993
|
---|
| 3 | ;
|
---|
| 4 | Q
|
---|
| 5 | MAKEIT(SEGNAME,SEGARR,FIRST245,ADTLNODE) ;Make segment
|
---|
| 6 | ;Input : SEGNAME - Name of segment being built
|
---|
| 7 | ; SEGARR - Array continue segment data (pass by value)
|
---|
| 8 | ; SEGARR(X) = Value for sequence N
|
---|
| 9 | ; SEGARR(X,Y) = Repetition Y of sequence X
|
---|
| 10 | ; SEGARR(X,Y,Z) = Component Z of repetition Y of sequence X
|
---|
| 11 | ; SEGARR(X,Y,Z,A) = Subcomponent A of component Z of
|
---|
| 12 | ; repetition Y of sequence X
|
---|
| 13 | ; FIRST245 - Variable to return first 245 characters of
|
---|
| 14 | ; segment in (pass by value)
|
---|
| 15 | ; ADTLNODE - Array for continuation nodes (pass by value)
|
---|
| 16 | ;Assumed: HL7 encoding chars (output of INIT^HLFNC2 or INIT^HLTRANS)
|
---|
| 17 | ;Output : None
|
---|
| 18 | ; FIRST245 = First 245 characters of segment
|
---|
| 19 | ; ADTLNODE(1..n) = Continuation of segment
|
---|
| 20 | ;Notes : Validity & existance of input is assumed
|
---|
| 21 | ; : Assumes no single element contained in SEGARR is greater
|
---|
| 22 | ; than 245 characters
|
---|
| 23 | ; : Continuation nodes are added at element boundaries
|
---|
| 24 | ;
|
---|
| 25 | ;Declare variables
|
---|
| 26 | N SUB1,SUB2,SUB3,CS,RS,FS,SS,OUTREF,X
|
---|
| 27 | K FIRST245,ADTLNODE
|
---|
| 28 | ;Get HL7 separators (attempts to use HL() array)
|
---|
| 29 | S FS=$S($D(HL("FS")):HL("FS"),1:HLFS)
|
---|
| 30 | S X=$S($D(HL("ECH")):HL("ECH"),1:HLECH)
|
---|
| 31 | S CS=$E(X,1),RS=$E(X,2),SS=$E(X,4)
|
---|
| 32 | ;Build output
|
---|
| 33 | S OUTREF=$NA(FIRST245)
|
---|
| 34 | S @OUTREF=SEGNAME
|
---|
| 35 | I '$O(SEGARR(0)) S X="",Y=FS D ADD Q
|
---|
| 36 | F SUB1=1:1:$O(SEGARR(""),-1) D
|
---|
| 37 | .S X=$G(SEGARR(SUB1)),Y=FS D ADD
|
---|
| 38 | .F SUB2=1:1:$O(SEGARR(SUB1,""),-1) D
|
---|
| 39 | ..S X=$G(SEGARR(SUB1,SUB2)),Y=$S(SUB2=1:"",1:RS) D ADD
|
---|
| 40 | ..F SUB3=1:1:$O(SEGARR(SUB1,SUB2,""),-1) D
|
---|
| 41 | ...S X=$G(SEGARR(SUB1,SUB2,SUB3)),Y=$S(SUB3=1:"",1:CS) D ADD
|
---|
| 42 | ...F SUB4=1:1:$O(SEGARR(SUB1,SUB2,SUB3,""),-1) D
|
---|
| 43 | ....S X=$G(SEGARR(SUB1,SUB2,SUB3,SUB4)),Y=$S(SUB4=1:"",1:SS) D ADD
|
---|
| 44 | Q
|
---|
| 45 | ADD ;Add to output - account for continuation node
|
---|
| 46 | I ($L(@OUTREF)+$L(X)+1)>245 D
|
---|
| 47 | .S X1=1+$O(ADTLNODE(""),-1)
|
---|
| 48 | .S OUTREF=$NA(ADTLNODE(X1))
|
---|
| 49 | .S @OUTREF=""
|
---|
| 50 | S @OUTREF=@OUTREF_Y_X
|
---|
| 51 | Q
|
---|