Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: INHSZ21

INHSZ21.m

Go to the documentation of this file.
  1. INHSZ21 ;JSH,DGH; 20 Dec 1999 09:35 ;INHSZ2 continued outbound msg; 19 Dec 91 1:00PM
  1. ;;3.01;BHL IHS Interfaces with GIS;;JUL 01, 2001
  1. ;COPYRIGHT 1991-2000 SAIC
  1. ;CHCS TOOLS_460; GEN 10; 23-JUL-1997
  1. ;COPYRIGHT 1988, 1989, 1990 SAIC
  1. ;Changes needed for X12, NOT for NCPDP after redesign.
  1. L G L^INHSZ1
  1. ;
  1. DELIM ;Set delimiter character
  1. N %1 S %1=$$LBTB^UTIL($P(LINE,"=",2))
  1. I MODE="I" D DELI G DELQ
  1. Q:'$$SYNTAX^INHSZ0($P(LINE,COMM,2,99),"."" ""1""=""."" ""1"""""""".E.""""""""")
  1. S A=" S DELIM="""_$P($P(%1,"""",2),"""")_"""" D L
  1. DELQ S DELIM=1,DICOMPX("DELIM")=""""_$P($P(%1,"""",2),"""")_""""
  1. Q
  1. DELI ;INPUT mode version of delimiter set.
  1. N DICOMPX S DICOMPX("DATA")="$$GL^INHOU(UIF,LCT)",X=%1 D DICOMP(.X)
  1. I '$D(X) D ERROR^INHSZ0("Invalid expression to set the DELIMITER.",1) Q
  1. S A=" "_X_" S DELIM=X K DXS" D L Q
  1. ;
  1. SUBDELIM ;set subdelimiter character
  1. N %1 S %1=$$LBTB^UTIL($P(LINE,"=",2))
  1. I MODE="I" D SUBI G SUBQ
  1. Q:'$$SYNTAX^INHSZ0($P(LINE,COMM,2,99),"."" ""1""=""."" ""1"""""""".E1""""""""")
  1. S A=" S SUBDELIM="""_$P($P(%1,"""",2),"""")_"""" D L
  1. SUBQ S SUBDELIM=1,DICOMPX("SUBDELIM")=""""_$P($P(%1,"""",2),"""")_""""
  1. Q
  1. SUBI ;INPUT mode version of subdelimiter set
  1. N DICOMPX S DICOMPX("DATA")="$$GL^INHOU(UIF,LCT)",X=%1 D DICOMP(.X)
  1. I '$D(X) D ERROR^INHSZ0("Invalid expression to set the SUBDELIMITER.",1) Q
  1. S A=" "_X_" S SUBDELIM=X K DXS S INDELIMS=DELIM_$P(Y(1),DELIM,2)" D L
  1. Q
  1. ;
  1. SET ;SET statement
  1. I MODE="I" D ERROR^INHSZ0("SET statement allow in Output scripts only.",1) Q
  1. Q:'$$SYNTAX^INHSZ0($$LB^UTIL($P(LINE,COMM,2,99)),"."" ""1.ANP1""=""1.E")
  1. N %1,I,J,V,X,INXFRM,INCONV
  1. S V=$$LBTB^UTIL($P($P(LINE,"SET",2),"="))
  1. S A=" ;"_LINE D L
  1. S X=$$LB^UTIL($P(LINE,"=",2)) S:X X="#"_X
  1. ;Following replaces old INSGX function
  1. I $E(X,1,5)="INSGX" S INXFRM=$P(X,"\",2),INCONV=$P(X,"\",3),LEN=$P(X,"\",4),X=$P(X,"\",5,99)
  1. S DICOMPX=""
  1. D ATSET(X),DICOMP(.X,0,1)
  1. I FILE="",$P(DICOMPX,U)=0 K X
  1. I '$D(X) D ERROR^INHSZ0("Invalid expression in SET statement.",1) Q
  1. S A=" S D0=INDA "_X D L
  1. ;To replace INSGX function create another line in compiled code which
  1. ;will execute the transform or the conversion.
  1. I ($L($G(INXFRM))!$L($G(INCONV))) D
  1. .I $L($G(INXFRM)) S A=" S X1="""_INXFRM_""" X:$L($G(@X1)) $G(@X1)"
  1. .S A=A_" S X=$E(X,1,"_LEN_")"
  1. .I $L($G(INCONV)) S A=A_" S X1="""_INCONV_""" X:$L($G(@X1)) $G(@X1)"
  1. .D L
  1. S A=" S @INV@("""_V_""")=X K DXS,D0" D L S SET(V)="",DICOMPX(V)="@INV@("""_V_""")"
  1. Q
  1. ;
  1. IF ;IF statement
  1. Q:'$$SYNTAX^INHSZ0($P(LINE,COMM,2,99),"1."" ""1.ANP")
  1. N I,J,DA,DQI,X,Q,D0,%1 S D0=0
  1. S A=" ;"_LINE D L
  1. S (%1,X)=$$LBTB^UTIL($P(LINE," ",2,999))
  1. D ATSET(X),DICOMP(.X)
  1. G:'$D(X) IFM
  1. I Y'["B" D ERROR^INHSZ0("Expression is not Boolean in structure.",1) Q
  1. S:X["D0" D0=1
  1. I MODE="I",SECT'="STORE",D0 D ERROR^INHSZ0("Expression involves a file entry which is not yet determined.",1) Q
  1. S A=" "_X_" K DXS,D0 I X" D L
  1. IFQ S IF=IF+1,A=" D:$T" D L,DOWN^INHSZ1("I") Q
  1. ;
  1. IFM ;IF may be MUMPS code
  1. S X="I "_%1 D ^DIM I '$D(X) D ERROR^INHSZ0("Expression INVALID.",1) Q
  1. S A=" "_X D L G IFQ
  1. ;
  1. ENDIF ;end of an IF block
  1. I 'IF D ERROR^INHSZ0("No active IF to end.",0) Q
  1. I $P(INDS(DOTLVL),U)'="I" D ERROR^INHSZ0("Misplaced ENDIF",0) Q
  1. S IF=IF-1 D UP^INHSZ1 Q
  1. ;
  1. DICOMP(X,%N,%W) ;Run DICOMP to evaluate expression
  1. ;X= expression to evaluate (pass by reference)
  1. ;If %N=1 then DICOMPX will not be used
  1. ;If %W=1 then WP fields may be specified - first line will be used
  1. N %,V,V1,I,J,DICOMP,DS,DL,DE,DICMX,INOLDX N:$G(%N) DICOMPX
  1. S:$G(%W) DICMX="S INX=$P(X,""|CR|"") Q "
  1. S DA="DXS(",DQI="Y(",DICOMP="",I(0)="^"_$P(FILE,U,2),J(0)=+FILE,DICOMP="",INOLDX=X
  1. D ^DICOMP I '$D(X) D Q:'$D(X)
  1. . Q:$G(MODE)="I" ;Don't double check inbound scripts
  1. . S %=$P($G(^DIC(+FILE,0)),U,1) S:'$L(%) %=$P($G(^DD(+FILE,0)),U,1)
  1. . W *7,!!,"Ambiguity in the following expression:"
  1. . W !,"Current base file: ",%," (#",+FILE,")",!,"Expression: ",INOLDX,!
  1. . S X=INOLDX,DICOMP="?" D ^DICOMP S DICOMP=""
  1. . W !,"Ambiguity ",$S($D(X):"",1:"NOT "),"resolved.",!
  1. F I=0:0 S I=$O(X(I)) Q:'I S:X(I)["D0" D0=1 S A=" S DXS("_I_")="""_$$REPLACE^UTIL(X(I),"""","""""")_"""" D L
  1. S:Y["w"!(Y["l") X="K INX "_X_" S X=$G(INX)"
  1. Q
  1. ;
  1. ATSET(X) ;Set DICOMPX array for any @variables in the code
  1. ;X = code to process
  1. N Q,I,J
  1. S Q=0 F I=1:1:$L(X) D
  1. . I $E(X,I)="""" S Q='Q Q
  1. . Q:$E(X,I)'="@"
  1. . F J=I+1:1 Q:$E(X,J)'?1AN
  1. . S DICOMPX($E(X,I,J-1))="$G(INA("""_$E(X,I+1,J-1)_""""_$G(WHSUB)_"))",I=J
  1. Q
  1. ;
  1. WHILE ;WHILE loop initiate
  1. N %E I $D(LINE)>9 D ERROR^INHSZ0("Line too long.",1)
  1. S %E=$$LBTB^UTIL($P(LINE,"WHILE",2,99))
  1. S:$P(%E," ")="~REQUIRED~" %E=$$LBTB^UTIL($P(LINE,"~REQUIRED~",2,99))
  1. I '$L(%E) D ERROR^INHSZ0("Condition missing from WHILE statement.",1) Q
  1. G:MODE="O" WHILE^INHSZ20
  1. S X="I "_%E D ^DIM I '$D(X) D ERROR^INHSZ0("Condition not valid.",1) Q
  1. S A=" ;"_LINE D L S WHILE=WHILE+1
  1. I $P(LINE," ",1,2)="WHILE ~REQUIRED~" S A=" I $P($$GL^INHOU(UIF,LCT),DELIM)'="_$P(%E,"=",2)_" Q:'$$CHECKSEG^INHOU("_$P(%E,"=",2)_",1,"_WHILE_")"_$S(WHILE>1:"",1:" 2") D L
  1. S A=" S INI("_WHILE_")=1 F "_$S(MODE="I":"S DATA=$$GL^INHOU(UIF,LCT) Q:'$$CHECKSEG^INHOU("_$P(%E,"=",2)_",0,"_WHILE_")",1:"Q:'("_%E_")")_" D S INI("_WHILE_")=INI("_WHILE_")+1" D L
  1. D DOWN^INHSZ1("W")
  1. S WHSUB=WHSUB_",INI("_WHILE_")"
  1. Q
  1. ;
  1. ENDWHILE ;End of while loop
  1. I 'DOTLVL D ERROR^INHSZ0("No active WHILE to end.",1) Q
  1. I $P(INDS(DOTLVL),U)'="W" D ERROR^INHSZ0("Misplaced ENDWHILE.",1) Q
  1. G:MODE="O" ENDWHILE^INHSZ20
  1. S WHILE=WHILE-1 D UP^INHSZ1 S WHSUB=$P(WHSUB,",",1,WHILE+1) S:'WHILE WHSUB=""
  1. Q
  1. ;
  1. GROUP ;Initiate a GROUP
  1. I $P(LINE,COMM,2)]"" D WARN^INHSZ0("Characters after GROUP ignored.",1)
  1. S A=" ;Start of GROUP" D L
  1. S A=" F S MATCH=0 D Q:'MATCH" D L
  1. D DOWN^INHSZ1("G") S GROUP=1 Q
  1. ;
  1. ENDGROUP ;End of group
  1. I 'DOTLVL D ERROR^INHSZ0("No active GROUP to end.",1) Q
  1. I $P(INDS(DOTLVL),U)'="G" D ERROR^INHSZ0("Misplaced ENDGROUP.",1) Q
  1. D UP^INHSZ1 S GROUP=0 Q
  1. ;
  1. ERROR ;ERROR command
  1. Q:'$$SYNTAX^INHSZ0($P(LINE,COMM,2),"."" ""1""=""."" ""1""""""""1.ANP1""""""""."" "".1"";""."" "".1N")
  1. N M,T
  1. S M=$$LBTB^UTIL($P($P(LINE,"=",2),";"))
  1. S T=$$LBTB^UTIL($P(LINE,";",2))
  1. I T]"",$L(T)>1!("12"'[T) D ERROR^INHSZ0("Illegal error type '"_T_"' in ERROR statement.",1) Q
  1. S:T="" T=2
  1. S A=" D ERROR^INHS("_M_","_T_")" D L
  1. Q
  1. ;
  1. BHLMIEN ;Set Message IEN
  1. N %1 S %1=$$LBTB^UTIL($P(LINE,"=",2))
  1. Q:'$$SYNTAX^INHSZ0($P(LINE,COMM,2,99),"."" ""1""=""."" ""1"""""""".E.""""""""")
  1. S A=" S BHLMIEN="""_$P($P(%1,"""",2),"""")_"""" D L
  1. S BHLMIEN=1,DICOMPX("BHLMIEN")=""""_$P($P(%1,"""",2),"""")_""""
  1. Q