XMC1 ;ISC-SF/GMB-Script Interpreter ;07/23/2002  10:15
 ;;8.0;MailMan;;Jun 28, 2002
 ; Was (WASH ISC)/THM
 ;
 ; Entry points used by MailMan options (not covered by DBIA):
 ; RESUME  XMSCRIPTRES     (was RES^XMC11)
ENT ;
 ; Expects as input:
 ; XMINST           Domain IEN
 ; XMSITE           Domain name
 ; XMB("SCR IEN")   Script IEN
 I $$NEWERR^%ZTER N $ETRAP,$ESTACK S $ETRAP="D C^XMCTRAP"
 E  S X="C^XMCTRAP",@^%ZOSF("TRAP")
 K ^TMP("XMY",$J),^TMP("XMY0",$J)
 N XMLER,XMLIN
 S ER=0,XMC("SHOW TRAN")="RS"
 D GET^XMCXT(0)
 I '$D(^XMBS(4.2999,XMINST,0)) D STAT^XMTDR(XMINST)
 ; *** how about L +^XMBS(4.2999,XMINST,3) ?
 I '$D(XMC("TALKMODE")) L +^DIC(4.2,XMINST,"XMNETSEND"):0 E  D  Q
 . D ERTRAN(42210) ;Netmail transmission in progress on another channel
 D IN
 L -^DIC(4.2,XMINST,"XMNETSEND")
 Q
IN ;To |1| from |2| beginning |3|
 D DOTRAN(42211,XMSITE,^XMB("NETNAME"),$$FMTE^XLFDT(DT,5))
 D DOTRAN(42212,$P(XMB("SCR REC"),U)) ;Script: |1|
 I $$USESCR(XMINST,.XMB) D
 . D EN(XMINST,XMSITE,$P(XMB("SCR REC"),U),"^DIC(4.2,"_XMINST_",1,"_XMB("SCR IEN")_",1,")
 E  D
 . N XMNETREC,X,XMC1,XMSCRN
 . S XMNETREC=$G(^XMB(1,1,"NETWORK"))
 . S XMSCRN=$P(XMB("SCR REC"),U)
 . D DOTRAN(42213) ;Creating transmission script 'on the fly' ...
 . S X="O H="_XMSITE_",P="_$P(^DIC(3.4,$P(XMNETREC,U,3),0),U)
 . S XMC1=$P(X," ",2,999)
 . D O Q:ER
 . S X="C "_$P(^XMB(4.6,$P(XMNETREC,U,4),0),U)
 . S XMC1=$P(X," ",2,999)
 . D C
 Q:$D(XMC("TALKMODE"))
 I ER,'$D(ER("MSG")),XMTRAN'="" D TRAN
 D DOTRAN(42214) ; Script Complete.
 I ER D DOTRAN(42215) ; Stopped because of error.
 D CLOSE^XMC1B
 Q
USESCR(XMINST,XMB) ; Function returns 1 if we should use the existing
 ; script, or 0 if we should build a TCP/IP script.
 Q:"^^SMTP^TCPCHAN^"'[(U_$P(XMB("SCR REC"),U,4)) 1  ; Use it
 N XMNETREC
 S XMNETREC=$G(^XMB(1,1,"NETWORK"))
 Q:'$P(XMNETREC,U,3)!'$P(XMNETREC,U,4) 1  ; Use it
 Q $O(^DIC(4.2,XMINST,1,XMB("SCR IEN"),1,0))>0  ;1=Use it; 0=Build it
EN(XMINST,XMSITE,XMSCRN,XMROOT) ;
 I $$NEWERR^%ZTER N $ETRAP,$ESTACK S $ETRAP="D C^XMCTRAP"
 E  S X="C^XMCTRAP",@^%ZOSF("TRAP")
 N XMCI
 S XMCI=0
 F  S XMCI=$O(@(XMROOT_XMCI_")")) Q:'XMCI  D INT(@(XMROOT_XMCI_",0)"),XMCI) Q:ER
 Q
INT(X,XMCI) ; Interpret the script line
 ; X    script line
 N XMC1
 S ER=0
 S:$E(X)?1L X=$$UP^XLFSTR(X)_$E(X,2,999)
 I "EFCXOHMDLTSW"'[$E(X)!(X="") D  Q
 . D ERTRAN(42216,X,XMCI) ;Invalid script command '|1|' at line |2|
 S XMC1=$P(X," ",2,999)
 D @$E(X)
 S:'$D(ER) ER=0
 Q
C ; Call a subroutine
 D DOTRAN(X)
 N X,Y,DIC,XMNSCR,XMNSCRN,XMER
 S X=$P(XMC1,"("),DIC="^XMB(4.6,",DIC(0)="O" D ^DIC
 I Y<0 D  Q
 . D ERTRAN(42217,X) ;Script '|1|' cannot be found in file 4.6
 S XMNSCR=+Y,XMNSCRN=$P(Y,U,2)
 D DOTRAN(42218,XMNSCRN) ;Calling script '|1|' (file 4.6)
 D EN(XMINST,XMSITE,XMNSCRN,"^XMB(4.6,XMNSCR,1,")
 I ER D  Q  ; XMER may be set by the transmission script in file 4.6
 . I $D(XMER),'$D(ER("MSG")) D ERTRAN(XMER)
 D DOTRAN(42219,XMSCRN) ;Returning to script '|1|'.
 Q
DI ; Dial phone
 N XMC1,DIR,X,Y
 S DIR(0)="F^3:50"
 S DIR("A")=$$EZBLD^DIALOG(42220) ;Enter number(s) to dial
 D ^DIR Q:$D(DIRUT)
 S XMC1=Y
D ; Dial numbers sucessively (Strip all punctuation not in XMSTRIP string)
 D DIAL(XMC1)
 Q
DIAL(XMNUMS) ;
 N XMSEP,XMI,XMNUM
 S XMSEP=$S($L($G(XMFIELD)):XMFIELD,1:$S($G(XMSTRIP)[",":";",1:","))
 F XMI=1:1 S XMNUM=$P(XMNUMS,XMSEP,XMI) Q:XMNUM=""  D DIALTRY(XMNUM) Q:'ER
 K XMSTRIP,XMFIELD
 Q
DIALTRY(XMNUM) ;
 N XMPHONE,XMI,XMDIGIT,Y
 S XMPHONE=""
 F XMI=1:1:$L(XMNUM) S XMDIGIT=$E(XMNUM,XMI) I $S(XMDIGIT'?1P:1,$G(XMSTRIP)[XMDIGIT:1,1:0) S XMPHONE=XMPHONE_XMDIGIT
 S ER=0
 D DOTRAN(42221,XMPHONE) ;Dialing |1|
 I '$D(XMDIAL) D ERTRAN(42222) Q  ;Call failed: no XMDIAL
 X XMDIAL
 I ER D ERTRAN($S($D(Y):42222.1,1:42222.2),$G(Y)) ;Call failed: |1| or unknown reason
 Q
E ; Set error message to be displayed.
 S ER("MSG")=XMC1
 D DOTRAN(42223,ER("MSG")) ;Error message set to '|1|'
 Q
F ; Flush buffer
 D DOTRAN(42224) ;Flushing buffer
 G BUFLUSH^XML
 Q
H ; Hang up phone
 D DOTRAN(42225) ;Hanging up phone
 Q:'$D(XMHANG)
 X XMHANG
 Q
L ; Look for string
 D LOOK^XMC1A
 Q
M ; Send mail
 D DOTRAN(42226) ;Beginning sender-SMTP service
 D ENTER^XMS
 I ER D DOTRAN("ER="_ER_" - ER(""MSG"")="_$G(ER("MSG")))
 Q
O ; Open device, protocol, and host
 D DOTRAN(X)
 D OPEN^XMC1B X:'ER XMOPEN
 I ER D DOTRAN(42227) Q  ;Open failed
 D DOTRAN(42228,XMSITE) ;Channel opened to |1|
 D FLUSH
 D DOTRAN(42229,XMC("DEVICE"),XMPROT) ;Device '|1|', Protocol '|2|' (file 3.4)
 N XMFDA,XMIENS
 S XMIENS=XMINST_","
 S XMFDA(4.2999,XMIENS,1)=$H
 S XMFDA(4.2999,XMIENS,6)=IO ; Device
 D FILE^DIE("","XMFDA")
 Q
FLUSH ; Flush buffer
 Q:'$D(XMBFLUSH)
 N XMLX
 F  R XMLX:0 Q:'$T
 Q
S ; Send line
 I XMC1?1"@".E D  Q:ER
 . N XMSAVE
 . S XMSAVE=XMC1
 . D INDIR(.XMC1) Q:ER
 . D DOTRAN(42230,XMSAVE,XMC1) ;Transforming '|1|' to '|2|'
 I XMC("SHOW TRAN")["S" D DOTRAN("S: "_XMC1)
 I XMC1["~" S XMC1=$$RTRAN^XMCU1(XMC1)
 W XMC1,$C(13)
 Q
INDIR(XMC1) ; GET INDIRECT REFERENCE
 N XMREF
 S XMREF=$P(XMC1,"@",2,99)
 I '$D(@XMREF) D ERTRAN(42231,XMREF) Q  ;Undefined reference to |1|
 S XMC1=@XMREF
 Q
T ;
 Q:'$D(XMC("TALKMODE"))
 S XMCI=999999
 D DOTRAN(42232) ;Entering Talk mode
 Q
W ; Wait a number of seconds
 D DOTRAN(42233,XMC1) ;Waiting |1| seconds
 H +XMC1
 Q
X ; Execute a line of code
 D DOTRAN(42234,XMC1) ;Xecuting |1|
 X XMC1
 Q:'ER
 I $E(XMC1,1,2)'="O ",$E(XMC1,1,14)'="D CALL^%ZISTCP" Q
 D ERTRAN(42235,XMHOST) S ER=25 ;Can't connect using IP address |1|
 Q
ERTRAN(XMDIALOG,XM1,XM2,XM3) ;
 D DOTRAN(XMDIALOG,.XM1,.XM2,.XM3)
 S ER=1
 I '$D(ER("MSG")) S ER("MSG")=XMTRAN
 Q
DOTRAN(XMDIALOG,XM1,XM2,XM3) ;
 N XMPARM
 S:$D(XM1) XMPARM(1)=XM1 S:$D(XM2) XMPARM(2)=XM2 S:$D(XM3) XMPARM(3)=XM3
 S XMTRAN=$S(+XMDIALOG=XMDIALOG:$$EZBLD^DIALOG(XMDIALOG,.XMPARM),1:XMDIALOG)
 ; fall through...
TRAN ;
 N XMTIME,XMAUDIT
 S XMTIME=$P($H,",",2)
 S XMAUDIT=$E($TR($J(XMTIME\3600,2)_":"_$J(XMTIME#3600\60,2)_":"_$J(XMTIME#60,2)," ","0")_" "_XMTRAN,1,245)
 ; Trace / Debug transmission problems
 ; Field 8.2 in file 4.3 says whether to audit.
 I $G(XMC("AUDIT")) S XMC("AUDIT","I")=$G(XMC("AUDIT","I"))+1,^TMP("XMC",XMC("AUDIT"),XMC("AUDIT","I"),0)=XMAUDIT
 Q:$G(XM)'["D"
 U IO(0)
 W !,XMAUDIT
 W:$G(XMLER) "("_XMLER_")"
 I IO'="",IOT'="RES" U IO
 Q
RESUME ; Resume script processing
 N I,DIR,X,Y
 S:'$D(XMCI) XMCI=0
 D ^%ZIS Q:POP
 S I=0
 F  S I=$O(^DIC(4.2,XMINST,1,XMB("SCR IEN"),1,I)) Q:I=""  W !,$J(I,2),$S(I=XMCI:"->",1:"  "),^(I,0)
 S DIR(0)="N^1:"_$O(^DIC(4.2,XMINST,1,XMB("SCR IEN"),1,""),-1)
 S DIR("A")=$$EZBLD^DIALOG(42236) ;Resume script processing from line
 S DIR("B")=XMCI
 D ^DIR Q:$D(DIRUT)
 S XMCI=Y
 D DOTRAN(42237,XMCI) ;Resuming script from line |1|
 S XMCI=XMCI-.1
 U IO
 G IN
 Q
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HXMC1   6858     printed  Sep 23, 2025@19:47:09                                                                                                                                                                                                        Page 2
XMC1      ;ISC-SF/GMB-Script Interpreter ;07/23/2002  10:15
 +1       ;;8.0;MailMan;;Jun 28, 2002
 +2       ; Was (WASH ISC)/THM
 +3       ;
 +4       ; Entry points used by MailMan options (not covered by DBIA):
 +5       ; RESUME  XMSCRIPTRES     (was RES^XMC11)
ENT       ;
 +1       ; Expects as input:
 +2       ; XMINST           Domain IEN
 +3       ; XMSITE           Domain name
 +4       ; XMB("SCR IEN")   Script IEN
 +5        IF $$NEWERR^%ZTER
               NEW $ETRAP,$ESTACK
               SET $ETRAP="D C^XMCTRAP"
 +6       IF '$TEST
               SET X="C^XMCTRAP"
               SET @^%ZOSF("TRAP")
 +7        KILL ^TMP("XMY",$JOB),^TMP("XMY0",$JOB)
 +8        NEW XMLER,XMLIN
 +9        SET ER=0
           SET XMC("SHOW TRAN")="RS"
 +10       DO GET^XMCXT(0)
 +11       IF '$DATA(^XMBS(4.2999,XMINST,0))
               DO STAT^XMTDR(XMINST)
 +12      ; *** how about L +^XMBS(4.2999,XMINST,3) ?
 +13       IF '$DATA(XMC("TALKMODE"))
               LOCK +^DIC(4.2,XMINST,"XMNETSEND"):0
              IF '$TEST
                   Begin DoDot:1
 +14      ;Netmail transmission in progress on another channel
                       DO ERTRAN(42210)
                   End DoDot:1
                   QUIT 
 +15       DO IN
 +16       LOCK -^DIC(4.2,XMINST,"XMNETSEND")
 +17       QUIT 
IN        ;To |1| from |2| beginning |3|
 +1        DO DOTRAN(42211,XMSITE,^XMB("NETNAME"),$$FMTE^XLFDT(DT,5))
 +2       ;Script: |1|
           DO DOTRAN(42212,$PIECE(XMB("SCR REC"),U))
 +3        IF $$USESCR(XMINST,.XMB)
               Begin DoDot:1
 +4                DO EN(XMINST,XMSITE,$PIECE(XMB("SCR REC"),U),"^DIC(4.2,"_XMINST_",1,"_XMB("SCR IEN")_",1,")
               End DoDot:1
 +5       IF '$TEST
               Begin DoDot:1
 +6                NEW XMNETREC,X,XMC1,XMSCRN
 +7                SET XMNETREC=$GET(^XMB(1,1,"NETWORK"))
 +8                SET XMSCRN=$PIECE(XMB("SCR REC"),U)
 +9       ;Creating transmission script 'on the fly' ...
                   DO DOTRAN(42213)
 +10               SET X="O H="_XMSITE_",P="_$PIECE(^DIC(3.4,$PIECE(XMNETREC,U,3),0),U)
 +11               SET XMC1=$PIECE(X," ",2,999)
 +12               DO O
                   if ER
                       QUIT 
 +13               SET X="C "_$PIECE(^XMB(4.6,$PIECE(XMNETREC,U,4),0),U)
 +14               SET XMC1=$PIECE(X," ",2,999)
 +15               DO C
               End DoDot:1
 +16       if $DATA(XMC("TALKMODE"))
               QUIT 
 +17       IF ER
               IF '$DATA(ER("MSG"))
                   IF XMTRAN'=""
                       DO TRAN
 +18      ; Script Complete.
           DO DOTRAN(42214)
 +19      ; Stopped because of error.
           IF ER
               DO DOTRAN(42215)
 +20       DO CLOSE^XMC1B
 +21       QUIT 
USESCR(XMINST,XMB) ; Function returns 1 if we should use the existing
 +1       ; script, or 0 if we should build a TCP/IP script.
 +2       ; Use it
           if "^^SMTP^TCPCHAN^"'[(U_$PIECE(XMB("SCR REC"),U,4))
               QUIT 1
 +3        NEW XMNETREC
 +4        SET XMNETREC=$GET(^XMB(1,1,"NETWORK"))
 +5       ; Use it
           if '$PIECE(XMNETREC,U,3)!'$PIECE(XMNETREC,U,4)
               QUIT 1
 +6       ;1=Use it; 0=Build it
           QUIT $ORDER(^DIC(4.2,XMINST,1,XMB("SCR IEN"),1,0))>0
EN(XMINST,XMSITE,XMSCRN,XMROOT) ;
 +1        IF $$NEWERR^%ZTER
               NEW $ETRAP,$ESTACK
               SET $ETRAP="D C^XMCTRAP"
 +2       IF '$TEST
               SET X="C^XMCTRAP"
               SET @^%ZOSF("TRAP")
 +3        NEW XMCI
 +4        SET XMCI=0
 +5        FOR 
               SET XMCI=$ORDER(@(XMROOT_XMCI_")"))
               if 'XMCI
                   QUIT 
               DO INT(@(XMROOT_XMCI_",0)"),XMCI)
               if ER
                   QUIT 
 +6        QUIT 
INT(X,XMCI) ; Interpret the script line
 +1       ; X    script line
 +2        NEW XMC1
 +3        SET ER=0
 +4        if $EXTRACT(X)?1L
               SET X=$$UP^XLFSTR(X)_$EXTRACT(X,2,999)
 +5        IF "EFCXOHMDLTSW"'[$EXTRACT(X)!(X="")
               Begin DoDot:1
 +6       ;Invalid script command '|1|' at line |2|
                   DO ERTRAN(42216,X,XMCI)
               End DoDot:1
               QUIT 
 +7        SET XMC1=$PIECE(X," ",2,999)
 +8        DO @$EXTRACT(X)
 +9        if '$DATA(ER)
               SET ER=0
 +10       QUIT 
C         ; Call a subroutine
 +1        DO DOTRAN(X)
 +2        NEW X,Y,DIC,XMNSCR,XMNSCRN,XMER
 +3        SET X=$PIECE(XMC1,"(")
           SET DIC="^XMB(4.6,"
           SET DIC(0)="O"
           DO ^DIC
 +4        IF Y<0
               Begin DoDot:1
 +5       ;Script '|1|' cannot be found in file 4.6
                   DO ERTRAN(42217,X)
               End DoDot:1
               QUIT 
 +6        SET XMNSCR=+Y
           SET XMNSCRN=$PIECE(Y,U,2)
 +7       ;Calling script '|1|' (file 4.6)
           DO DOTRAN(42218,XMNSCRN)
 +8        DO EN(XMINST,XMSITE,XMNSCRN,"^XMB(4.6,XMNSCR,1,")
 +9       ; XMER may be set by the transmission script in file 4.6
           IF ER
               Begin DoDot:1
 +10               IF $DATA(XMER)
                       IF '$DATA(ER("MSG"))
                           DO ERTRAN(XMER)
               End DoDot:1
               QUIT 
 +11      ;Returning to script '|1|'.
           DO DOTRAN(42219,XMSCRN)
 +12       QUIT 
DI        ; Dial phone
 +1        NEW XMC1,DIR,X,Y
 +2        SET DIR(0)="F^3:50"
 +3       ;Enter number(s) to dial
           SET DIR("A")=$$EZBLD^DIALOG(42220)
 +4        DO ^DIR
           if $DATA(DIRUT)
               QUIT 
 +5        SET XMC1=Y
D         ; Dial numbers sucessively (Strip all punctuation not in XMSTRIP string)
 +1        DO DIAL(XMC1)
 +2        QUIT 
DIAL(XMNUMS) ;
 +1        NEW XMSEP,XMI,XMNUM
 +2        SET XMSEP=$SELECT($LENGTH($GET(XMFIELD)):XMFIELD,1:$SELECT($GET(XMSTRIP)[",":";",1:","))
 +3        FOR XMI=1:1
               SET XMNUM=$PIECE(XMNUMS,XMSEP,XMI)
               if XMNUM=""
                   QUIT 
               DO DIALTRY(XMNUM)
               if 'ER
                   QUIT 
 +4        KILL XMSTRIP,XMFIELD
 +5        QUIT 
DIALTRY(XMNUM) ;
 +1        NEW XMPHONE,XMI,XMDIGIT,Y
 +2        SET XMPHONE=""
 +3        FOR XMI=1:1:$LENGTH(XMNUM)
               SET XMDIGIT=$EXTRACT(XMNUM,XMI)
               IF $SELECT(XMDIGIT'?1P:1,$GET(XMSTRIP)[XMDIGIT:1,1:0)
                   SET XMPHONE=XMPHONE_XMDIGIT
 +4        SET ER=0
 +5       ;Dialing |1|
           DO DOTRAN(42221,XMPHONE)
 +6       ;Call failed: no XMDIAL
           IF '$DATA(XMDIAL)
               DO ERTRAN(42222)
               QUIT 
 +7        XECUTE XMDIAL
 +8       ;Call failed: |1| or unknown reason
           IF ER
               DO ERTRAN($SELECT($DATA(Y):42222.1,1:42222.2),$GET(Y))
 +9        QUIT 
E         ; Set error message to be displayed.
 +1        SET ER("MSG")=XMC1
 +2       ;Error message set to '|1|'
           DO DOTRAN(42223,ER("MSG"))
 +3        QUIT 
F         ; Flush buffer
 +1       ;Flushing buffer
           DO DOTRAN(42224)
 +2        GOTO BUFLUSH^XML
 +3        QUIT 
H         ; Hang up phone
 +1       ;Hanging up phone
           DO DOTRAN(42225)
 +2        if '$DATA(XMHANG)
               QUIT 
 +3        XECUTE XMHANG
 +4        QUIT 
L         ; Look for string
 +1        DO LOOK^XMC1A
 +2        QUIT 
M         ; Send mail
 +1       ;Beginning sender-SMTP service
           DO DOTRAN(42226)
 +2        DO ENTER^XMS
 +3        IF ER
               DO DOTRAN("ER="_ER_" - ER(""MSG"")="_$GET(ER("MSG")))
 +4        QUIT 
O         ; Open device, protocol, and host
 +1        DO DOTRAN(X)
 +2        DO OPEN^XMC1B
           if 'ER
               XECUTE XMOPEN
 +3       ;Open failed
           IF ER
               DO DOTRAN(42227)
               QUIT 
 +4       ;Channel opened to |1|
           DO DOTRAN(42228,XMSITE)
 +5        DO FLUSH
 +6       ;Device '|1|', Protocol '|2|' (file 3.4)
           DO DOTRAN(42229,XMC("DEVICE"),XMPROT)
 +7        NEW XMFDA,XMIENS
 +8        SET XMIENS=XMINST_","
 +9        SET XMFDA(4.2999,XMIENS,1)=$HOROLOG
 +10      ; Device
           SET XMFDA(4.2999,XMIENS,6)=IO
 +11       DO FILE^DIE("","XMFDA")
 +12       QUIT 
FLUSH     ; Flush buffer
 +1        if '$DATA(XMBFLUSH)
               QUIT 
 +2        NEW XMLX
 +3        FOR 
               READ XMLX:0
               if '$TEST
                   QUIT 
 +4        QUIT 
S         ; Send line
 +1        IF XMC1?1"@".E
               Begin DoDot:1
 +2                NEW XMSAVE
 +3                SET XMSAVE=XMC1
 +4                DO INDIR(.XMC1)
                   if ER
                       QUIT 
 +5       ;Transforming '|1|' to '|2|'
                   DO DOTRAN(42230,XMSAVE,XMC1)
               End DoDot:1
               if ER
                   QUIT 
 +6        IF XMC("SHOW TRAN")["S"
               DO DOTRAN("S: "_XMC1)
 +7        IF XMC1["~"
               SET XMC1=$$RTRAN^XMCU1(XMC1)
 +8        WRITE XMC1,$CHAR(13)
 +9        QUIT 
INDIR(XMC1) ; GET INDIRECT REFERENCE
 +1        NEW XMREF
 +2        SET XMREF=$PIECE(XMC1,"@",2,99)
 +3       ;Undefined reference to |1|
           IF '$DATA(@XMREF)
               DO ERTRAN(42231,XMREF)
               QUIT 
 +4        SET XMC1=@XMREF
 +5        QUIT 
T         ;
 +1        if '$DATA(XMC("TALKMODE"))
               QUIT 
 +2        SET XMCI=999999
 +3       ;Entering Talk mode
           DO DOTRAN(42232)
 +4        QUIT 
W         ; Wait a number of seconds
 +1       ;Waiting |1| seconds
           DO DOTRAN(42233,XMC1)
 +2        HANG +XMC1
 +3        QUIT 
X         ; Execute a line of code
 +1       ;Xecuting |1|
           DO DOTRAN(42234,XMC1)
 +2        XECUTE XMC1
 +3        if 'ER
               QUIT 
 +4        IF $EXTRACT(XMC1,1,2)'="O "
               IF $EXTRACT(XMC1,1,14)'="D CALL^%ZISTCP"
                   QUIT 
 +5       ;Can't connect using IP address |1|
           DO ERTRAN(42235,XMHOST)
           SET ER=25
 +6        QUIT 
ERTRAN(XMDIALOG,XM1,XM2,XM3) ;
 +1        DO DOTRAN(XMDIALOG,.XM1,.XM2,.XM3)
 +2        SET ER=1
 +3        IF '$DATA(ER("MSG"))
               SET ER("MSG")=XMTRAN
 +4        QUIT 
DOTRAN(XMDIALOG,XM1,XM2,XM3) ;
 +1        NEW XMPARM
 +2        if $DATA(XM1)
               SET XMPARM(1)=XM1
           if $DATA(XM2)
               SET XMPARM(2)=XM2
           if $DATA(XM3)
               SET XMPARM(3)=XM3
 +3        SET XMTRAN=$SELECT(+XMDIALOG=XMDIALOG:$$EZBLD^DIALOG(XMDIALOG,.XMPARM),1:XMDIALOG)
 +4       ; fall through...
TRAN      ;
 +1        NEW XMTIME,XMAUDIT
 +2        SET XMTIME=$PIECE($HOROLOG,",",2)
 +3        SET XMAUDIT=$EXTRACT($TRANSLATE($JUSTIFY(XMTIME\3600,2)_":"_$JUSTIFY(XMTIME#3600\60,2)_":"_$JUSTIFY(XMTIME#60,2)," ","0")_" "_XMTRAN,1,245)
 +4       ; Trace / Debug transmission problems
 +5       ; Field 8.2 in file 4.3 says whether to audit.
 +6        IF $GET(XMC("AUDIT"))
               SET XMC("AUDIT","I")=$GET(XMC("AUDIT","I"))+1
               SET ^TMP("XMC",XMC("AUDIT"),XMC("AUDIT","I"),0)=XMAUDIT
 +7        if $GET(XM)'["D"
               QUIT 
 +8        USE IO(0)
 +9        WRITE !,XMAUDIT
 +10       if $GET(XMLER)
               WRITE "("_XMLER_")"
 +11       IF IO'=""
               IF IOT'="RES"
                   USE IO
 +12       QUIT 
RESUME    ; Resume script processing
 +1        NEW I,DIR,X,Y
 +2        if '$DATA(XMCI)
               SET XMCI=0
 +3        DO ^%ZIS
           if POP
               QUIT 
 +4        SET I=0
 +5        FOR 
               SET I=$ORDER(^DIC(4.2,XMINST,1,XMB("SCR IEN"),1,I))
               if I=""
                   QUIT 
               WRITE !,$JUSTIFY(I,2),$SELECT(I=XMCI:"->",1:"  "),^(I,0)
 +6        SET DIR(0)="N^1:"_$ORDER(^DIC(4.2,XMINST,1,XMB("SCR IEN"),1,""),-1)
 +7       ;Resume script processing from line
           SET DIR("A")=$$EZBLD^DIALOG(42236)
 +8        SET DIR("B")=XMCI
 +9        DO ^DIR
           if $DATA(DIRUT)
               QUIT 
 +10       SET XMCI=Y
 +11      ;Resuming script from line |1|
           DO DOTRAN(42237,XMCI)
 +12       SET XMCI=XMCI-.1
 +13       USE IO
 +14       GOTO IN
 +15       QUIT