| 1 | XMXUTIL4 ;ISC-SF/GMB-List message recipients (cont.) ;04/11/2002  10:44
 | 
|---|
| 2 |  ;;8.0;MailMan;;Jun 28, 2002
 | 
|---|
| 3 |  ; All entry points are for internal MailMan use only.
 | 
|---|
| 4 | QLIST(XMZ,XMFLAGS,XMAMT,XMSTART,XMTROOT) ; list them
 | 
|---|
| 5 |  N XMCNT,XMIEN,XMREC,XMTO,XMNAME
 | 
|---|
| 6 |  S XMCNT=0,XMIEN=+$G(XMSTART("IEN"))
 | 
|---|
| 7 |  F  S XMIEN=$O(^XMB(3.9,XMZ,1,XMIEN)) Q:'XMIEN  D  Q:XMCNT=XMAMT
 | 
|---|
| 8 |  . S XMCNT=XMCNT+1
 | 
|---|
| 9 |  . S XMREC=$G(^XMB(3.9,XMZ,1,XMIEN,0))
 | 
|---|
| 10 |  . S XMTO=$P(XMREC,U,1)
 | 
|---|
| 11 |  . S XMNAME=$$NAME^XMXUTIL(XMTO)
 | 
|---|
| 12 |  . D QDFLDS(XMZ,XMFLAGS,XMIEN,XMREC,XMNAME,XMTROOT,XMCNT)
 | 
|---|
| 13 |  S XMSTART("IEN")=XMIEN
 | 
|---|
| 14 |  S @(XMTROOT_"0)")=XMCNT_U_XMAMT_U_$S(XMAMT="*":0,1:$O(^XMB(3.9,XMZ,1,XMIEN))>0)
 | 
|---|
| 15 |  Q
 | 
|---|
| 16 | QDFLDS(XMZ,XMFLAGS,XMIEN,XMREC,XMNAME,XMTROOT,XMCNT) ;
 | 
|---|
| 17 |  S @(XMTROOT_XMCNT_",""TO"")")=$P(XMREC,U,1)
 | 
|---|
| 18 |  S @(XMTROOT_XMCNT_",""TO NAME"")")=XMNAME
 | 
|---|
| 19 |  I $D(^XMB(3.9,XMZ,1,XMIEN,"T")) S @(XMTROOT_XMCNT_",""TYPE"")")=$P(^("T"),U,1)
 | 
|---|
| 20 |  I $D(^XMB(3.9,XMZ,1,XMIEN,"F")) D FWD(XMZ,XMIEN)
 | 
|---|
| 21 |  I $P(XMREC,U,1)?.N D  Q
 | 
|---|
| 22 |  . S @(XMTROOT_XMCNT_",""TO ID"")")="L" ; local user
 | 
|---|
| 23 |  . S @(XMTROOT_XMCNT_",""TO DUZ"")")=$P(XMREC,U,1)
 | 
|---|
| 24 |  . I $P(XMREC,U,2)'="" D
 | 
|---|
| 25 |  . . S @(XMTROOT_XMCNT_",""RESP"")")=$P(XMREC,U,2)
 | 
|---|
| 26 |  . I $P(XMREC,U,3)'="" D
 | 
|---|
| 27 |  . . S @(XMTROOT_XMCNT_",""LREAD"")")=$P(XMREC,U,3)
 | 
|---|
| 28 |  . . S @(XMTROOT_XMCNT_",""LREAD MM"")")=$$MMDT^XMXUTIL1($P(XMREC,U,3))
 | 
|---|
| 29 |  . I $P(XMREC,U,10)'="" D
 | 
|---|
| 30 |  . . S @(XMTROOT_XMCNT_",""FREAD"")")=$P(XMREC,U,10)
 | 
|---|
| 31 |  . . S @(XMTROOT_XMCNT_",""FREAD MM"")")=$$MMDT^XMXUTIL1($P(XMREC,U,10))
 | 
|---|
| 32 |  . I $D(^XMB(3.9,XMZ,1,XMIEN,"C")) D
 | 
|---|
| 33 |  . . N XMD
 | 
|---|
| 34 |  . . S XMD=^XMB(3.9,XMZ,1,XMIEN,"C")
 | 
|---|
| 35 |  . . S @(XMTROOT_XMCNT_",""COPY"")")=XMD
 | 
|---|
| 36 |  . . S @(XMTROOT_XMCNT_",""COPY MM"")")=$$MMDT^XMXUTIL1(XMD)
 | 
|---|
| 37 |  . I $D(^XMB(3.9,XMZ,1,XMIEN,"D")),$G(^("D")) D
 | 
|---|
| 38 |  . . N XMD
 | 
|---|
| 39 |  . . S XMD=^XMB(3.9,XMZ,1,XMIEN,"D")
 | 
|---|
| 40 |  . . S @(XMTROOT_XMCNT_",""TERM"")")=XMD
 | 
|---|
| 41 |  . . S @(XMTROOT_XMCNT_",""TERM MM"")")=$$MMDT^XMXUTIL1(XMD)
 | 
|---|
| 42 |  . I $D(^XMB(3.9,XMZ,1,XMIEN,"S")) D
 | 
|---|
| 43 |  . . S @(XMTROOT_XMCNT_",""SURR"")")=^XMB(3.9,XMZ,1,XMIEN,"S")
 | 
|---|
| 44 |  I $E(XMNAME,1,2)="F.",$P(XMREC,U,12)'=""!$P(XMREC,U,11) D  Q
 | 
|---|
| 45 |  . S @(XMTROOT_XMCNT_",""TO ID"")")="F" ; fax
 | 
|---|
| 46 |  . I $P(XMREC,U,5)'="" D
 | 
|---|
| 47 |  . . S @(XMTROOT_XMCNT_",""FDATE"")")=$P(XMREC,U,5)
 | 
|---|
| 48 |  . . S @(XMTROOT_XMCNT_",""FDATE MM"")")=$$MMDT^XMXUTIL1($P(XMREC,U,5))
 | 
|---|
| 49 |  . I $P(XMREC,U,6)'="" D
 | 
|---|
| 50 |  . . S @(XMTROOT_XMCNT_",""STATUS"")")=$P(XMREC,U,6)
 | 
|---|
| 51 |  . I $P(XMREC,U,11)'="" D
 | 
|---|
| 52 |  . . S @(XMTROOT_XMCNT_",""FAX IEN"")")=$P(XMREC,U,11)
 | 
|---|
| 53 |  . I $P(XMREC,U,12)'="" D
 | 
|---|
| 54 |  . . S @(XMTROOT_XMCNT_",""ID"")")=$P(XMREC,U,12)
 | 
|---|
| 55 |  I XMNAME["@" D  Q
 | 
|---|
| 56 |  . S @(XMTROOT_XMCNT_",""TO ID"")")="R" ; remote
 | 
|---|
| 57 |  . I $P(XMREC,U,4)'="" D
 | 
|---|
| 58 |  . . S @(XMTROOT_XMCNT_",""ID"")")=$P(XMREC,U,4)
 | 
|---|
| 59 |  . I $P(XMREC,U,5)'="" D
 | 
|---|
| 60 |  . . S @(XMTROOT_XMCNT_",""XDATE"")")=$P(XMREC,U,5)
 | 
|---|
| 61 |  . . S @(XMTROOT_XMCNT_",""XDATE MM"")")=$$MMDT^XMXUTIL1($P(XMREC,U,5))
 | 
|---|
| 62 |  . I $P(XMREC,U,6)'="" D
 | 
|---|
| 63 |  . . S @(XMTROOT_XMCNT_",""STATUS"")")=$P(XMREC,U,6)
 | 
|---|
| 64 |  . I $P(XMREC,U,7)'="",$D(^DIC(4.2,$P(XMREC,U,7),0)) D
 | 
|---|
| 65 |  . . S @(XMTROOT_XMCNT_",""PATH"")")=$P(XMREC,U,7)
 | 
|---|
| 66 |  . . S @(XMTROOT_XMCNT_",""PATH NAME"")")=$P(^DIC(4.2,$P(XMREC,U,7),0),U)
 | 
|---|
| 67 |  . I $P(XMREC,U,8)'="" D
 | 
|---|
| 68 |  . . S @(XMTROOT_XMCNT_",""SECS"")")=$P(XMREC,U,8)
 | 
|---|
| 69 |  I $E(XMNAME,1,3)="* (" D  Q
 | 
|---|
| 70 |  . S @(XMTROOT_XMCNT_",""TO ID"")")=$E(XMNAME) ; broadcast
 | 
|---|
| 71 |  ; I ".D.H.S."[("."_$E(XMNAME,1,2))
 | 
|---|
| 72 |  S @(XMTROOT_XMCNT_",""TO ID"")")=$E(XMNAME) ; device or server
 | 
|---|
| 73 |  I $P(XMREC,U,3)'="" D
 | 
|---|
| 74 |  . S @(XMTROOT_XMCNT_",""SDATE"")")=$P(XMREC,U,3)
 | 
|---|
| 75 |  . S @(XMTROOT_XMCNT_",""SDATE MM"")")=$$MMDT^XMXUTIL1($P(XMREC,U,3))
 | 
|---|
| 76 |  I $P(XMREC,U,6)'="" D
 | 
|---|
| 77 |  . S @(XMTROOT_XMCNT_",""STATUS"")")=$P(XMREC,U,6)
 | 
|---|
| 78 |  Q
 | 
|---|
| 79 | FWD(XMZ,XMIEN) ;
 | 
|---|
| 80 |  Q:'$D(^XMB(3.9,XMZ,1,XMIEN,"F"))
 | 
|---|
| 81 |  N XMFWDREC,XMFWDBY
 | 
|---|
| 82 |  S XMFWDREC=^XMB(3.9,XMZ,1,XMIEN,"F")
 | 
|---|
| 83 |  S XMFWDBY=$P(XMFWDREC,U)
 | 
|---|
| 84 |  I $E(XMFWDBY)?1A!($E(XMFWDBY)="<") D
 | 
|---|
| 85 |  . N XMLEN
 | 
|---|
| 86 |  . S XMLEN=$L(XMFWDBY," ")
 | 
|---|
| 87 |  . S @(XMTROOT_XMCNT_",""FWD BY"")")=$P(XMFWDBY," ",1,XMLEN-4)
 | 
|---|
| 88 |  . S @(XMTROOT_XMCNT_",""FWD ON"")")=$P(XMFWDBY," ",XMLEN-3,XMLEN)
 | 
|---|
| 89 |  E  I $E(XMFWDBY)?1N!($E(XMFWDBY)=".") D
 | 
|---|
| 90 |  . N XMLEN
 | 
|---|
| 91 |  . S XMFWDBY=$$NAME^XMXUTIL(+XMFWDBY)_" "_$P(XMFWDBY," ",2,99)
 | 
|---|
| 92 |  . S XMLEN=$L(XMFWDBY," ")
 | 
|---|
| 93 |  . S @(XMTROOT_XMCNT_",""FWD BY"")")=$P(XMFWDBY," ",1,XMLEN-4)
 | 
|---|
| 94 |  . S @(XMTROOT_XMCNT_",""FWD ON"")")=$P(XMFWDBY," ",XMLEN-3,XMLEN)
 | 
|---|
| 95 |  E  S @(XMTROOT_XMCNT_",""FWD ON"")")=$E(XMFWDBY,2,99)
 | 
|---|
| 96 |  I $P(XMFWDREC,U,2) S @(XMTROOT_XMCNT_",""FWD BY DUZ"")")=$P(XMFWDREC,U,2)
 | 
|---|
| 97 |  I "R"'[$P(XMFWDREC,U,3) S @(XMTROOT_XMCNT_",""FWD TYPE"")")=$P(XMFWDREC,U,3)
 | 
|---|
| 98 |  Q:$P(XMFWDREC,U,4)=""  ; or quit if FWD TYPE="A"
 | 
|---|
| 99 |  S @(XMTROOT_XMCNT_",""FWD BY ORIG"")")=$P(XMFWDREC,U,4)
 | 
|---|
| 100 |  I "R"'[$P(XMFWDREC,U,5) S @(XMTROOT_XMCNT_",""FWD TYPE ORIG"")")=$P(XMFWDREC,U,5)
 | 
|---|
| 101 |  Q
 | 
|---|
| 102 | QFIND(XMZ,XMFLAGS,XMFIND,XMTROOT,XMCNT) ; find them
 | 
|---|
| 103 |  S XMCNT=0
 | 
|---|
| 104 |  D FIND^DIC(200,"","","A",XMFIND,"","B^BB^C^D","I $D(^XMB(3.9,XMZ,1,""C"",+Y))")
 | 
|---|
| 105 |  I '$D(DIERR) D MOVE(200,XMZ,XMFLAGS,XMTROOT,.XMCNT)
 | 
|---|
| 106 |  Q:$O(^XMB(3.9,XMZ,1,"C",":"))=""  ; Quit if there aren't any non-local addressees
 | 
|---|
| 107 |  N XMSCREEN
 | 
|---|
| 108 |  S XMSCREEN=$S(+XMFIND=XMFIND:"I '$D(^XMB(3.9,XMZ,1,""C"",XMFIND))",1:"")
 | 
|---|
| 109 |  D FIND^DIC(3.91,","_XMZ_",","","C",XMFIND,"","C",XMSCREEN)
 | 
|---|
| 110 |  I '$D(DIERR) D MOVE(3.91,XMZ,XMFLAGS,XMTROOT,.XMCNT)
 | 
|---|
| 111 |  Q:$E(XMFIND)'?1U  ; Quit if the search string does not begin with an upper case letter
 | 
|---|
| 112 |  Q:$O(^XMB(3.9,XMZ,1,"C","`"))=""  ; Quit if there aren't any lower case addressees
 | 
|---|
| 113 |  ; FM will translate lower case to upper case in its search, but won't
 | 
|---|
| 114 |  ; translate upper to lower, so we do it here.
 | 
|---|
| 115 |  S XMSCREEN="I ^(0)]""`""" ; Limit search to lower case addresses
 | 
|---|
| 116 |  D FIND^DIC(3.91,","_XMZ_",","","C",$$LOW^XLFSTR(XMFIND),"","C",XMSCREEN)
 | 
|---|
| 117 |  I '$D(DIERR) D MOVE(3.91,XMZ,XMFLAGS,XMTROOT,.XMCNT)
 | 
|---|
| 118 |  Q
 | 
|---|
| 119 | MOVE(XMFILE,XMZ,XMFLAGS,XMTROOT,XMCNT) ; move search results
 | 
|---|
| 120 |  N I,XMIEN,XMREC,XMNAME
 | 
|---|
| 121 |  S I=0
 | 
|---|
| 122 |  F  S I=$O(^TMP("DILIST",$J,1,I)) Q:I=""  D
 | 
|---|
| 123 |  . S XMIEN=^TMP("DILIST",$J,2,I)
 | 
|---|
| 124 |  . I XMFILE=200 D
 | 
|---|
| 125 |  . . S XMIEN=$O(^XMB(3.9,XMZ,1,"C",XMIEN,0))
 | 
|---|
| 126 |  . . S XMREC=$G(^XMB(3.9,XMZ,1,XMIEN,0))
 | 
|---|
| 127 |  . . S XMNAME=^TMP("DILIST",$J,1,I)
 | 
|---|
| 128 |  . E  D
 | 
|---|
| 129 |  . . S XMREC=$G(^XMB(3.9,XMZ,1,XMIEN,0))
 | 
|---|
| 130 |  . . S XMNAME=$P(XMREC,U,1)
 | 
|---|
| 131 |  . S XMCNT=XMCNT+1
 | 
|---|
| 132 |  . D QDFLDS(XMZ,XMFLAGS,XMIEN,XMREC,XMNAME,XMTROOT,XMCNT)
 | 
|---|
| 133 |  Q
 | 
|---|