59 lines
2.3 KiB
Mathematica
59 lines
2.3 KiB
Mathematica
|
VAQPAR60 ;ALB/JRP - MESSAGE PARSING;28-APR-93
|
||
|
;;1.5;PATIENT DATA EXCHANGE;;NOV 17, 1993
|
||
|
MESSAGE(PRSARR,MESSNUM) ;PARSING OF VERSION 1.5 MESSAGE
|
||
|
;INPUT : PRSARR - Parsing array (full global reference)
|
||
|
; MESSNUM - Message number within transmission (not XMZ)
|
||
|
; (defaults to 1)
|
||
|
; (As defined by MailMan)
|
||
|
; XMFROM, XMREC, XMZ
|
||
|
; (Declared in SERVER^VAQADM2)
|
||
|
; XMER, XMRG, XMPOS
|
||
|
;OUTPUT : XMER - Exit condition
|
||
|
; 0 = Success
|
||
|
; -1^Error_Text = Error
|
||
|
; XMPOS - Last line [number] read in transmission
|
||
|
; (if NULL end of transmission reached)
|
||
|
;NOTES : Parsing array will have the following format
|
||
|
; ARRAY(MESSNUM,BlockName,BlockSeq,LineNumber) = Value
|
||
|
; [BlockSeq used to keep blocks of same name from
|
||
|
; overwritting each other. This will typically be '1'
|
||
|
; except for DATA & DISPLAY blocks.]
|
||
|
; : Calling routine responsible for ARRAY clean up before
|
||
|
; and after call
|
||
|
;
|
||
|
;CHECK INPUT
|
||
|
I ($G(PRSARR)="") S XMER="-1^Did not pass reference to parsing array" Q
|
||
|
S:($G(MESSNUM)="") MESSNUM=1
|
||
|
;DECLARE VARIABLES
|
||
|
N STOP,BLOCK,BLOCKSEQ,TMP,CURRENT,LAST
|
||
|
S XMER=0
|
||
|
S STOP=0
|
||
|
;PARSE MESSAGE
|
||
|
F D Q:((XMER<0)!(STOP))
|
||
|
.S LAST=XMPOS
|
||
|
.X XMREC
|
||
|
.S CURRENT=XMPOS
|
||
|
.;END OF MESSAGE REACHED
|
||
|
.I (XMRG="$$MESSAGE") S XMER=0,STOP=1 Q
|
||
|
.;REACHED END OF MAILMAN MESSAGE
|
||
|
.I (XMER<0) S XMER="-1^End of message was not designated"
|
||
|
.;GET SEQUENCE NUMBER
|
||
|
.S BLOCK=$P(XMRG,"$",2)
|
||
|
.S BLOCKSEQ=0
|
||
|
.S TMP=""
|
||
|
.F S TMP=$O(@PRSARR@(MESSNUM,BLOCK,TMP)) Q:(TMP="") S BLOCKSEQ=TMP
|
||
|
.S BLOCKSEQ=BLOCKSEQ+1
|
||
|
.;PARSE VALID BLOCKS
|
||
|
.S XMPOS=LAST
|
||
|
.I (BLOCK="HEADER") D BLOCK^VAQPAR61(PRSARR,MESSNUM,BLOCK,BLOCKSEQ) Q
|
||
|
.I (BLOCK="DOMAIN") D BLOCK^VAQPAR61(PRSARR,MESSNUM,BLOCK,BLOCKSEQ) Q
|
||
|
.I (BLOCK="USER") D BLOCK^VAQPAR61(PRSARR,MESSNUM,BLOCK,BLOCKSEQ) Q
|
||
|
.I (BLOCK="PATIENT") D BLOCK^VAQPAR61(PRSARR,MESSNUM,BLOCK,BLOCKSEQ) Q
|
||
|
.I (BLOCK="SEGMENT") D BLOCK^VAQPAR61(PRSARR,MESSNUM,BLOCK,BLOCKSEQ) Q
|
||
|
.I (BLOCK="COMMENT") D BLOCK^VAQPAR61(PRSARR,MESSNUM,BLOCK,BLOCKSEQ) Q
|
||
|
.I (BLOCK="DATA") D BLOCK^VAQPAR61(PRSARR,MESSNUM,BLOCK,BLOCKSEQ) Q
|
||
|
.I (BLOCK="DISPLAY") D BLOCK^VAQPAR61(PRSARR,MESSNUM,BLOCK,BLOCKSEQ) Q
|
||
|
.S:(XMPOS=LAST) XMPOS=CURRENT
|
||
|
.;EVERYTHING ELSE IS IGNORED
|
||
|
Q
|