VistA-WorldVistAEHR/r/PATIENT_DATA_EXCHANGE-VAQ/VAQPAR60.m

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