1 | HLMSG ;ALB/CJM-HL7 - APIs for files 772/773 ;02/04/2004
|
---|
2 | ;;1.6;HEALTH LEVEL SEVEN;**118**;Oct 13, 1995
|
---|
3 | ;
|
---|
4 | GETMSG(IEN,MSG) ;
|
---|
5 | ;Description: given the message ien=MSGIEN (required), it returns the MSG array containing information about the message, defined below.
|
---|
6 | ;Input:
|
---|
7 | ; IEN - the ien of the message in file 773
|
---|
8 | ;Output:
|
---|
9 | ; Function returns 1 on success, 0 on failure
|
---|
10 | ; MSG (pass by reference, required) These are the subscripts returned:
|
---|
11 | ; "BATCH" = 1 if this is a batch message, 0 if not
|
---|
12 | ; "CURRENT MESSAGE" - defined only for batch messages - a counter used during building and parsing messages to indicate the current message. It will be set to 0 initially.
|
---|
13 | ; "BODY" - ptr to file 772 which contains the body of the message.
|
---|
14 | ; "CURRENT LINE" - a counter used during building and parsing of
|
---|
15 | ; messages to indicate the current line within the message. For
|
---|
16 | ; batch messages where each message within the batch is stored
|
---|
17 | ; separately, this field indicates the position within the current
|
---|
18 | ; individual message
|
---|
19 | ; "HDR" - the header segment, NOT parsed, as a sequence of lines HDR(i)
|
---|
20 | ; "IEN" - ien, file 773
|
---|
21 | ;
|
---|
22 | K MSG
|
---|
23 | Q:'$G(IEN) 0
|
---|
24 | N I
|
---|
25 | S MSG("IEN")=IEN
|
---|
26 | S MSG("BODY")=$P($G(^HLMA(IEN,0)),"^")
|
---|
27 | Q:'MSG("BODY") 0
|
---|
28 | ;
|
---|
29 | S MSG("BATCH")=$S($P(^HL(772,MSG("BODY"),0),"^",14)="B":1,1:0)
|
---|
30 | I MSG("BATCH") S MSG("BATCH","CURRENT MESSAGE")=0
|
---|
31 | S MSG("CURRENT LINE")=0
|
---|
32 | S I=0
|
---|
33 | F S I=$O(^HLMA(IEN,"MSH",I)) Q:'I S MSG("HDR",I)=$G(^HLMA(IEN,"MSH",I,0))
|
---|
34 | Q 1
|
---|
35 | ;
|
---|
36 | NEXTSEG(MSG,SEG) ;
|
---|
37 | ;Description: Returns the next segment as a set of lines stored in SEG.
|
---|
38 | ;Input:
|
---|
39 | ; MSG (pass by reference, required)
|
---|
40 | ;Output:
|
---|
41 | ; Function returns 1 on success, 0 on failure (no more segments)
|
---|
42 | ; SEG (pass by reference, required)
|
---|
43 | ;
|
---|
44 | K SEG
|
---|
45 | Q:MSG("CURRENT LINE")=-1 0
|
---|
46 | I 'MSG("BATCH") D
|
---|
47 | .N I,J
|
---|
48 | .S J=1,I=MSG("CURRENT LINE")
|
---|
49 | .F S I=$O(^HL(772,MSG("BODY"),"IN",I)) Q:'I Q:$G(^HL(772,MSG("BODY"),"IN",I,0))="" S SEG(J)=^HL(772,MSG("BODY"),"IN",I,0),J=J+1
|
---|
50 | .I 'I S MSG("CURRENT LINE")=-1
|
---|
51 | .I I S MSG("CURRENT LINE")=I
|
---|
52 | I MSG("BATCH") D
|
---|
53 | .N I,J
|
---|
54 | .S I=MSG("CURRENT LINE")
|
---|
55 | .F S I=$O(^HL(772,MSG("BODY"),"IN",I)) Q:'I I $G(^HL(772,MSG("BODY"),"IN",I,0))'="" D Q
|
---|
56 | ..Q:$E($G(^HL(772,MSG("BODY"),"IN",I,0)),1,3)="MSH"
|
---|
57 | ..I $E($G(^HL(772,MSG("BODY"),"IN",I,0)),1,3)="BTS" S MSG("CURRENT LINE")=-1,MSG("BATCH","CURRENT MESSAGE")=-1 Q
|
---|
58 | ..S SEG(1)=$G(^HL(772,MSG("BODY"),"IN",I,0))
|
---|
59 | ..S J=2
|
---|
60 | ..F S I=$O(^HL(772,MSG("BODY"),"IN",I)) Q:'I Q:$G(^HL(772,MSG("BODY"),"IN",I,0))="" S SEG(J)=^HL(772,MSG("BODY"),"IN",I,0),J=J+1
|
---|
61 | .I 'I S MSG("CURRENT LINE")=-1
|
---|
62 | .I I S MSG("CURRENT LINE")=I-1
|
---|
63 | Q $S($D(SEG):1,1:0)
|
---|
64 | ;
|
---|
65 | NEXTMSG(MSG,HDR) ;
|
---|
66 | ;Advances to the next message in the batch
|
---|
67 | ;Input:
|
---|
68 | ; MSG (pass by reference, required) - defined by $$GETMSG()
|
---|
69 | ;Output:
|
---|
70 | ; Function returns 1 on success, 0 if no more messages
|
---|
71 | ; MSH - updated with current position in the message
|
---|
72 | ; HDR (pass by reference, required) returns the header as an array of 2lines HDR(1),HDR(2)
|
---|
73 | ;
|
---|
74 | K HDR
|
---|
75 | N ARY,I,J
|
---|
76 | S ARY="^HL(772,"_MSG("BODY")_",""IN"")"
|
---|
77 | S I=MSG("CURRENT LINE")
|
---|
78 | F S I=$O(@ARY@(I)) Q:'I D:$G(@ARY@(I,0))'="" Q:$D(HDR) Q:MSG("CURRENT LINE")=-1
|
---|
79 | .I $E($G(@ARY@(I,0)),1,3)="BTS" S MSG("CURRENT LINE")=-1,MSG("BATCH","CURRENT MESSAGE")=-1 Q
|
---|
80 | .I $E($G(@ARY@(I,0)),1,3)="MSH" D
|
---|
81 | ..S J=1
|
---|
82 | ..S HDR(J)=$G(@ARY@(I,0)),MSG("CURRENT LINE")=I,MSG("BATCH","CURRENT MESSAGE")=$G(MSG("BATCH","CURRENT MESSAGE"))+1
|
---|
83 | ..F S I=$O(@ARY@(I)) Q:'I Q:$G(@ARY@(I,0))="" S J=J+1,HDR(J)=$G(@ARY@(I,0))
|
---|
84 | .E D
|
---|
85 | ..F S I=$O(@ARY@(I)) Q:'I Q:$G(@ARY@(I,0))=""
|
---|
86 | Q $S($D(HDR):1,1:0)
|
---|