102 lines
4.2 KiB
Mathematica
102 lines
4.2 KiB
Mathematica
XMA2R ;ISC-SF/GMB- Reply to/Answer a message API ;04/19/2002 12:37
|
|
;;8.0;MailMan;;Jun 28, 2002
|
|
; Was (WASH ISC)/CAP
|
|
;
|
|
; Entry points (DBIA 1145):
|
|
; ENT function for non-interactive reply to a message.
|
|
; Reply is sent to all local recipients of the message.
|
|
; If message if from a remote sender, the reply is sent to
|
|
; the remote sender, too.
|
|
; ENTA function for non-interactive answer to a message
|
|
ENT(XMZ,XMSUBJ,XMTEXT,XMSTRIP,XMDUZ,XMNET) ; Send response to a message
|
|
;Call as follows:
|
|
; S var=$$ENT^XMA2R(XMZ,XMSUBJ,.XMTEXT,XMSTRIP,XMDUZ,XMNET)
|
|
;Where: XMZ = Message being responded to
|
|
; XMSUBJ = Subject of the response
|
|
; (ignored, unless message is from a remote sender)
|
|
; .XMTEXT = Array containing text
|
|
; XMSTRIP = Characters to be stripped from text
|
|
; XMDUZ = Sender of response (DUZ or free text)
|
|
; XMNET = Send reply over the net? (0=no (DEFAULT); 1=yes)
|
|
; (ignored, unless message is from a remote sender)
|
|
;OUTPUT: If results okay = internal pointer to response in file 3.9
|
|
; If bad result, the letter "E" followed by a number,
|
|
; followed by a space, then a human readable explanation.
|
|
N XMV,XMZR,XMINSTR,XMMG,XMSECURE,XMZREC
|
|
K XMERR,^TMP("XMERR",$J)
|
|
I '$D(^XMB(3.9,XMZ,0)) Q "E5 Message "_XMZ_" does not exist."
|
|
I '$O(^XMB(3.9,XMZ,1,0)) Q "E6 Message "_XMZ_" has no recipients."
|
|
I $D(XMTEXT)<9 Q "E2 No message text !"
|
|
I '$O(XMTEXT(0)) Q "E4 No message text !"
|
|
S XMDUZ=$G(XMDUZ,DUZ)
|
|
I XMDUZ'?.N D Q:$D(XMMG) "E10 "_$P(XMMG,"= ",2)
|
|
. D SETFROM^XMD(.XMDUZ,.XMINSTR)
|
|
D INITAPI^XMVVITAE
|
|
D CRE8XMZ^XMXSEND("R"_XMZ,.XMZR) Q:XMZR<1 $$ERR("E9")
|
|
D MOVETEXT(XMZR,.XMTEXT)
|
|
D CHEKBODY^XMXSEND(XMZR,$G(XMSTRIP))
|
|
D DOREPLY^XMXREPLY(XMDUZ,XMZ,XMZR,.XMINSTR)
|
|
S XMZREC=$G(^XMB(3.9,XMZ,0))
|
|
I $P(XMZREC,U,2)'["@"!'$G(XMNET) Q XMZR
|
|
I '$D(XMSUBJ) Q "E1 No subject !"
|
|
I $L(XMSUBJ)<3!($L(XMSUBJ)>65) Q "E3 Subject too long or short !"
|
|
S XMSUBJ=$$SCRUB^XMXUTIL1(XMSUBJ)
|
|
S:XMSUBJ[U XMSUBJ=$$ENCODEUP^XMXUTIL1(XMSUBJ)
|
|
N XMFROM,XMREPLTO
|
|
D REPLYTO^XMXREPLY(XMZ,.XMFROM,.XMREPLTO)
|
|
D INIT^XMXADDR
|
|
D CHKADDR^XMXADDR(XMDUZ,$$REMADDR^XMXADDR3($G(XMREPLTO,XMFROM)),.XMINSTR) Q:$D(XMERR) $$ERR("E12")
|
|
D NETREPLY^XMXREPLY(XMDUZ,XMZ,XMZR,XMSUBJ,.XMINSTR)
|
|
D CLEANUP^XMXADDR
|
|
Q XMZR
|
|
MOVETEXT(XMZ,XMTEXT,XMAPPEND) ;
|
|
N I,XMLINE
|
|
S XMLINE=$S($G(XMAPPEND):$O(^XMB(3.9,XMZ,2,":"),-1),1:0)
|
|
S I=0
|
|
F S I=$O(XMTEXT(I)) Q:'I D
|
|
. S XMLINE=XMLINE+1
|
|
. S ^XMB(3.9,XMZ,2,XMLINE,0)=$S($D(XMTEXT(I,0)):XMTEXT(I,0),1:XMTEXT(I))
|
|
S ^XMB(3.9,XMZ,2,0)="^3.92A^"_XMLINE_U_XMLINE
|
|
Q
|
|
ENTA(XMZ,XMSUBJ,XMTEXT,XMSTRIP,XMDUZ) ; Send Response Only to Sender of Original Message
|
|
;Call as follows:
|
|
; S var=$$ENT^XMA2R(XMZ,XMSUBJ,.XMTEXT,XMSTRIP,XMDUZ)
|
|
;Where: XMZ = Message being responded to
|
|
; XMSUBJ = Subject of the response
|
|
; .XMTEXT = Array containing text
|
|
; XMSTRIP = Characters to be stripped from text
|
|
; XMDUZ = Sender of response (DUZ or free text)
|
|
;
|
|
;OUTPUT: If results okay = internal pointer to response in file 3.9
|
|
; If bad result, the letter "E" followed by a number,
|
|
; followed by a space, then a human readable explanation.
|
|
N XMV,XMZR,XMINSTR,XMMG,XMSECURE,XMZSENDR,XMZREC,XMTO
|
|
K XMERR,^TMP("XMERR",$J)
|
|
I '$D(^XMB(3.9,XMZ,0)) Q "E5 Message "_XMZ_" does not exist."
|
|
I '$D(XMSUBJ) Q "E1 No subject !"
|
|
I $D(XMTEXT)<9 Q "E2 No message text !"
|
|
I $L(XMSUBJ)<3!($L(XMSUBJ)>65) Q "E3 Subject too long or short !"
|
|
I '$O(XMTEXT(0)) Q "E4 No message text !"
|
|
S XMDUZ=$G(XMDUZ,DUZ)
|
|
I XMDUZ'?.N D Q:$D(XMMG) "E10 "_$P(XMMG,"= ",2)
|
|
. D SETFROM^XMD(.XMDUZ,.XMINSTR)
|
|
D INITAPI^XMVVITAE
|
|
S XMZREC=^XMB(3.9,XMZ,0)
|
|
S XMZSENDR=$P(XMZREC,U,2)
|
|
S:XMZSENDR["@" XMZSENDR=$$REPLYTO1^XMXREPLY(XMZ)
|
|
D CRE8XMZ^XMXSEND(XMSUBJ,.XMZR) Q:XMZR<1 $$ERR("E9")
|
|
D COPY^XMXANSER(XMZ,$P(XMZREC,U,1),XMZSENDR,$P(XMZREC,U,3),XMZR)
|
|
D MOVETEXT(XMZR,.XMTEXT,1)
|
|
D NETSIG^XMXEDIT(XMDUZ,XMZR)
|
|
D CHEKBODY^XMXSEND(XMZR,$G(XMSTRIP))
|
|
S XMTO(XMZSENDR)=""
|
|
S XMTO(XMDUZ)=""
|
|
S XMINSTR("ADDR FLAGS")="R" ; No addressing restrictions
|
|
D ADDRNSND^XMXSEND(XMDUZ,XMZR,.XMTO,.XMINSTR)
|
|
Q:$D(XMERR) $$ERR("E11")
|
|
Q XMZR
|
|
ERR(XMER) ;
|
|
S XMER=XMER_" "_^TMP("XMERR",$J,1,"TEXT",1)
|
|
K XMERR,^TMP("XMERR",$J)
|
|
Q XMER
|