| 1 | XMJDIR ;ISC-SF/GMB- MailMan's DIR ;10/31/2001  12:33 | 
|---|
| 2 | ;;8.0;MailMan;;Jun 28, 2002 | 
|---|
| 3 | XMDIR(XMDIR,XMOPT,XMOX,XMY,XMABORT) ; | 
|---|
| 4 | ; XMDIR("A")   User prompt | 
|---|
| 5 | ; XMDIR("B")   Default choice | 
|---|
| 6 | ; XMDIR(0)     Special instructions | 
|---|
| 7 | ;              S - Show the choices | 
|---|
| 8 | ;              C - Show choices in 2 columns, if necessary | 
|---|
| 9 | ; XMDIR("?")   Help text for 1 ? | 
|---|
| 10 | ; XMDIR("??")  Help text for 2 or more ? | 
|---|
| 11 | N XMX | 
|---|
| 12 | K XMY | 
|---|
| 13 | I +XMDIR("A")=XMDIR("A") S XMDIR("A")=$$EZBLD^DIALOG(XMDIR("A")) | 
|---|
| 14 | I $D(XMDIR("B")),+XMDIR("B")=XMDIR("B") S XMDIR("B")=$$EZBLD^DIALOG(XMDIR("B")) | 
|---|
| 15 | I $G(XMDIR(0))["S" D | 
|---|
| 16 | . W !!,?5,$$EZBLD^DIALOG(37008),! ; Select one of the following: | 
|---|
| 17 | . D HELPCMD(.XMOPT,.XMOX,$S(XMDIR(0)["C":IOSL-$Y-3,1:IOSL-4)) | 
|---|
| 18 | F  D  Q:$D(XMY)!XMABORT | 
|---|
| 19 | . W !!,XMDIR("A"),$S($D(XMDIR("B")):$P(XMDIR("B"),":",2,99)_"// ",1:"") | 
|---|
| 20 | . R XMX:DTIME I '$T S XMABORT=DTIME Q | 
|---|
| 21 | . I XMX[U S XMABORT=1 Q | 
|---|
| 22 | . I XMX="" D  Q | 
|---|
| 23 | . . I '$D(XMDIR("B")) S XMABORT=1 Q | 
|---|
| 24 | . . S XMY=$P(XMDIR("B"),":",1) | 
|---|
| 25 | . I $E(XMX)="?" D QHELP Q | 
|---|
| 26 | . I $D(XMDIR("PRE")) X XMDIR("PRE") | 
|---|
| 27 | . S XMY=$$COMMAND(.XMOPT,.XMOX,XMX) | 
|---|
| 28 | . I $D(XMOPT(XMY)),'$D(XMOPT(XMY,"?")) Q | 
|---|
| 29 | . I XMY=-1 D | 
|---|
| 30 | . . W $C(7) D HELPSCR(.XMOPT,.XMOX) | 
|---|
| 31 | . E  D SHOWERR(.XMOPT,XMY) I $D(XMOPT(XMY,"?X")) X XMOPT(XMY,"?X") I $T Q | 
|---|
| 32 | . K XMY | 
|---|
| 33 | Q | 
|---|
| 34 | SHOWERR(XMOPT,XMY) ; Show error message | 
|---|
| 35 | W $C(7),! | 
|---|
| 36 | I +XMOPT(XMY,"?")=XMOPT(XMY,"?") D  Q | 
|---|
| 37 | . N XMTEXT | 
|---|
| 38 | . D BLD^DIALOG(XMOPT(XMY,"?"),"","","XMTEXT","F") | 
|---|
| 39 | . D MSG^DIALOG("WE","",IOM,"","XMTEXT") | 
|---|
| 40 | I $D(XMOPT(XMY,"?",1)) D | 
|---|
| 41 | . N I | 
|---|
| 42 | . S I=0 | 
|---|
| 43 | . F  S I=$O(XMOPT(XMY,"?",I)) Q:'I  W !,XMOPT(XMY,"?",I) | 
|---|
| 44 | W !,XMOPT(XMY,"?") | 
|---|
| 45 | Q | 
|---|
| 46 | QHELP ; | 
|---|
| 47 | I XMX="?" D HELPSCR(.XMOPT,.XMOX) Q | 
|---|
| 48 | N XQH | 
|---|
| 49 | S XQH=$G(XMDIR("??"),"XM-U-MO-READ") | 
|---|
| 50 | I "@"[XQH D HELPSCR(.XMOPT,.XMOX) Q | 
|---|
| 51 | I $E(XQH,1,2)="D " X XQH Q | 
|---|
| 52 | D EN^XQH | 
|---|
| 53 | Q | 
|---|
| 54 | HELPSCR(XMOPT,XMOX) ; | 
|---|
| 55 | I $D(XMDIR("?")) D | 
|---|
| 56 | . N XMTEXT | 
|---|
| 57 | . W ! | 
|---|
| 58 | . D BLD^DIALOG(XMDIR("?"),"","","XMTEXT","F") | 
|---|
| 59 | . D MSG^DIALOG("WH","",IOM,"","XMTEXT") | 
|---|
| 60 | W !!,$$EZBLD^DIALOG(34054),! ; Enter a code from the list. | 
|---|
| 61 | D HELPCMD(.XMOPT,.XMOX) | 
|---|
| 62 | Q | 
|---|
| 63 | HELPCMD(XMOPT,XMOX,XMPMAX) ; | 
|---|
| 64 | N XMCNT,XMCMD,XMROWS,I,XMHELP,XMLEN | 
|---|
| 65 | S (XMCNT,XMLEN)=0,XMCMD="" | 
|---|
| 66 | F  S XMCMD=$O(XMOPT(XMCMD)) Q:XMCMD=""  I '$D(XMOPT(XMCMD,"?")) S XMCNT=XMCNT+1 I $L(XMOX("O",XMCMD))>XMLEN S XMLEN=$L(XMOX("O",XMCMD)) | 
|---|
| 67 | I XMCNT<$G(XMPMAX,IOSL-4) D  Q | 
|---|
| 68 | . F  S XMCMD=$O(XMOX("X",XMCMD)) Q:XMCMD=""  D | 
|---|
| 69 | . . Q:$D(XMOPT(XMOX("X",XMCMD),"?")) | 
|---|
| 70 | . . W !,?9,$E(XMCMD_"         ",1,10)_XMOPT(XMOX("X",XMCMD)) | 
|---|
| 71 | S XMROWS=XMCNT+1\2 | 
|---|
| 72 | S I=0 | 
|---|
| 73 | F  D  Q:I=XMROWS | 
|---|
| 74 | . S XMCMD=$O(XMOX("X",XMCMD)) | 
|---|
| 75 | . Q:$D(XMOPT(XMOX("X",XMCMD),"?")) | 
|---|
| 76 | . S I=I+1 | 
|---|
| 77 | . S XMHELP(I)=" "_$E(XMCMD_"      ",1,XMLEN+2)_XMOPT(XMOX("X",XMCMD)) | 
|---|
| 78 | S I=0 | 
|---|
| 79 | F  S XMCMD=$O(XMOX("X",XMCMD)) Q:XMCMD=""  D | 
|---|
| 80 | . Q:$D(XMOPT(XMOX("X",XMCMD),"?")) | 
|---|
| 81 | . S I=I+1 | 
|---|
| 82 | . W !,$E(XMHELP(I)_"                                   ",1,39)_"  "_$E(XMCMD_"      ",1,XMLEN+2)_$E(XMOPT(XMOX("X",XMCMD)),1,37-XMLEN) | 
|---|
| 83 | S I=I+1 | 
|---|
| 84 | W:$D(XMHELP(I)) !,XMHELP(I) | 
|---|
| 85 | Q | 
|---|
| 86 | COMMAND(XMOPT,XMOX,XMY) ; Check what the user enters against the list of | 
|---|
| 87 | ; acceptable choices.  If the user enters something ambiguous, | 
|---|
| 88 | ; ^DIR is called to ask the user to choose one. | 
|---|
| 89 | I XMY?.E1C.E Q -1 | 
|---|
| 90 | I $L(XMY)>64 Q -1 | 
|---|
| 91 | N XMX,XMCD,XMLEN | 
|---|
| 92 | S XMX=XMY | 
|---|
| 93 | S XMLEN=$L(XMX) | 
|---|
| 94 | S XMY=$$UP^XLFSTR(XMY) | 
|---|
| 95 | I $D(XMOX("X",XMY)) D  Q XMCD | 
|---|
| 96 | . S XMCD=XMOX("X",XMY) | 
|---|
| 97 | . D PARROT | 
|---|
| 98 | N XMTXT,XMC,XMT,XMCHOOSE | 
|---|
| 99 | S XMCD="" | 
|---|
| 100 | F  S XMCD=$O(XMOPT(XMCD)) Q:XMCD=""  S:'$D(XMOPT(XMCD,"?")) XMTXT(XMOPT(XMCD))=XMCD | 
|---|
| 101 | S XMT=$CHAR($A($E(XMY))-1)_"~" | 
|---|
| 102 | F  S XMT=$O(XMTXT(XMT)) Q:XMT=""!($E(XMT)'=$E(XMY))  I $$UP^XLFSTR($E(XMT,1,XMLEN))=XMY S XMCHOOSE(XMT)="" | 
|---|
| 103 | S XMC=$CHAR($A($E(XMY))-1)_"~" | 
|---|
| 104 | F  S XMC=$O(XMOX("X",XMC)) Q:XMC=""!($E(XMC)'=$E(XMY))  I $$UP^XLFSTR($E(XMC,1,XMLEN))=XMY S:'$D(XMOPT(XMOX("X",XMC),"?")) XMCHOOSE(XMOPT(XMOX("X",XMC)))="" | 
|---|
| 105 | I '$D(XMCHOOSE) Q -1 | 
|---|
| 106 | N I,DIR,Y,X | 
|---|
| 107 | S I=0,(DIR(0),XMT)="" | 
|---|
| 108 | F  S XMT=$O(XMCHOOSE(XMT)) Q:XMT=""  S I=I+1,DIR(0)=DIR(0)_I_":"_XMT_";",XMCD(I)=XMTXT(XMT) | 
|---|
| 109 | I I=1 D  Q $P(XMCD," ")  ; (for Q xxx) | 
|---|
| 110 | . S XMCD=XMCD(I) | 
|---|
| 111 | . D PARROT | 
|---|
| 112 | S DIR(0)="SO^"_$E(DIR(0),1,$L(DIR(0))-1) | 
|---|
| 113 | ;S DIR("A")="Choose 1-"_I | 
|---|
| 114 | D ^DIR Q:$D(DIRUT) -1 | 
|---|
| 115 | Q $P(XMCD(Y)," ")  ; (for Q xxx) | 
|---|
| 116 | PARROT ; | 
|---|
| 117 | I $E(XMOPT(XMCD),1,XMLEN)=XMX W $E(XMOPT(XMCD),XMLEN+1,99) Q | 
|---|
| 118 | W "  ",XMOPT(XMCD) | 
|---|
| 119 | Q | 
|---|