- DDGLBXA ;SFISC/MKO-A LIST BOX ;1:58 PM 26 Apr 1996
- ;;22.0;VA FileMan;;Mar 30, 1999
- ;Per VHA Directive 10-93-142, this routine should not be modified.
- ;
- LIST(DDGLGLO,DDGLOUT,DDGLROW,DDGLCOL,DDGLHT,DDGLWD,DDGLSEL,DDGLFLG,DDGLMAP) ;
- ;Input:
- ; DDGLGLO = closed reference of local or global that contains
- ; the list of entries
- ; @DDGLGLO("B",entry,index)=""
- ; DDGLROW = $Y of top left corner
- ; DDGLCOL = $X of top left corner
- ; DDGLHT = height of box
- ; DDGLWD = width of box
- ; DDGLSEL = text of selected item
- ; DDGLFLG = flags
- ; DDGLMAP = array to customize key sequences
- ;
- ;Output:
- ; DDGLOUT = index of selected entry (if any)
- ; DDGLOUT(0) = selected entry
- ; DDGLOUT("C") = code indicates what terminated the read
- ;
- ;Other variables:
- N DDGLCID ; window (control) id
- N DDGLNL ; number of lines in list
- N DDGLNC ; number of columns in list
- N DDGLLINE ; current line number
- N DDGLITEM ; item array
- ; DDGLITEM(1..DDGLNL) = text of item displayed
- ;
- Q:$G(DDGLGLO)=""
- D INIT
- X DDGLZOSF("EOFF")
- W $P(DDGLVID,DDGLDEL,11)
- ;
- D ^DDGLBXA1
- ;
- W $P(DDGLVID,DDGLDEL,12)
- X DDGLZOSF("EON")
- D DESTROY(DDGLCID,$G(DDGLFLG))
- Q
- ;
- CREATE(DDGLGLO,DDGLCID,DDGLROW,DDGLCOL,DDGLHT,DDGLWD,DDGLSEL,DDGLMAP) ;
- ;Create a list box window
- ;Out:
- ; .DDGLCID array = properties of list box
- ; .DDGLCID(id,"SV") = cid^$Y^$X^NL^NC^LINE
- ; .DDGLCID(id,"ITEM",1..nl) = text of item n in display
- ; .DDGLCID(id,"GL") = DDGLGLO
- ; .DDGLCID(id,"KMAP","IN")
- ; .DDGLCID(id,"KMAP","OUT")
- ; .DDGLCID(id,"KMAP","KD")
- ; .DDGLCID(id,"KMAP","TO")
- ;
- Q:$G(DDGLGLO)=""
- N DDGLNL,DDGLNC,DDGLLINE,DDGLLAST,DDGLITEM
- D INIT
- D SETCID
- Q
- ;
- DESTROY(DDGLCID,DDGLFLG) ;Destroy the window and cleanup
- D DESTROY^DDGLIBW(DDGLCID)
- K DDGLCID(DDGLCID)
- D KILL^DDGLIB0($G(DDGLFLG))
- Q
- ;
- READ(DDGLCID,DDGLOUT) ;
- N DDGLGLO,DDGLROW,DDGLCOL,DDGLNL,DDGLNC,DDGLLINE,DDGLSEL,DDGLITEM
- N DX,DY
- ;
- D SETPARM
- X DDGLZOSF("EOFF")
- W $P(DDGLVID,DDGLDEL,11)
- ;
- D ^DDGLBXA1
- ;
- D SETCID
- W $P(DDGLVID,DDGLDEL,12)
- X DDGLZOSF("EON")
- Q
- ;
- UPDATE(DDGLCID,DDGLVAL) ;
- N DDGLGLO,DDGLROW,DDGLCOL,DDGLNL,DDGLNC,DDGLLINE,DDGLSEL,DDGLITEM
- N DDGLI,DDGLT,DX,DY
- ;
- D SETPARM
- ;
- ;Get closest match incl. or foll. DDGLVAL
- S DDGLSEL=$G(DDGLVAL)
- I $G(DDGLSEL)="" S DDGLSEL=$O(@DDGLGLO@(""))
- E I '$D(@DDGLGLO@(DDGLSEL)) S DDGLSEL=$O(@DDGLGLO@(DDGLSEL))
- Q:DDGLSEL=""
- ;
- ;Check whether DDGLVAL is already on the screen
- I DDGLITEM(1)']]DDGLSEL,DDGLSEL']]DDGLITEM(DDGLNL) D
- . D CUP(DDGLLINE,1)
- . W $E(DDGLITEM(DDGLLINE),1,DDGLNC)
- . F DDGLLINE=1:1:DDGLNL Q:DDGLITEM(DDGLLINE)=DDGLSEL
- . D CUP(DDGLLINE,1)
- . W $P(DDGLVID,DDGLDEL,6)_$E(DDGLSEL,1,DDGLNC)_$P(DDGLVID,DDGLDEL,10)
- ;
- ;If not, adjust the array
- E D
- . S DDGLT=DDGLSEL
- . F DDGLI=1:1:DDGLNL D
- .. S DDGLITEM(DDGLI)=DDGLT
- .. S:DDGLT]"" DDGLT=$O(@DDGLGLO@(DDGLT))
- . D DISP(DDGLSEL)
- ;
- D SETCID
- Q
- ;
- SETCID ;Set DDGLCID array
- K DDGLCID(DDGLCID)
- S DDGLCID(DDGLCID,"SV")=DDGLCID_U_DDGLROW_U_DDGLCOL_U_DDGLNL_U_DDGLNC_U_DDGLLINE
- M DDGLCID(DDGLCID,"ITEM")=DDGLITEM
- S DDGLCID(DDGLCID,"GL")=DDGLGLO
- M DDGLCID(DDGLCID,"KMAP")=DDGLKEY("KMAP")
- Q
- ;
- SETPARM ;Set parameters from DDGLCID array
- N DDGLI
- S DDGLGLO=DDGLCID(DDGLCID,"GL")
- ;
- K DDGLKEY("KMAP")
- M DDGLKEY("KMAP")=DDGLCID(DDGLCID,"KMAP")
- M DDGLITEM=DDGLCID(DDGLCID,"ITEM")
- ;
- S DDGLI=DDGLCID(DDGLCID,"SV")
- S DDGLROW=$P(DDGLI,U,2)
- S DDGLCOL=$P(DDGLI,U,3)
- S DDGLNL=$P(DDGLI,U,4)
- S DDGLNC=$P(DDGLI,U,5)
- S DDGLLINE=$P(DDGLI,U,6)
- S DDGLSEL=DDGLITEM(DDGLLINE)
- K DDGLCID(DDGLCID)
- Q
- ;
- INIT ;Create list box (window) and setup variables
- ;In: DDGLROW,DDGLCOL,DDGLHT,DDGLWD,DDGLSEL,DDGLGLO,DDGLMAP
- ;Returns: DDGLROW,DDGLCOL,DDGLHT,DDGLWD,DDGLIND
- ; DDGLCID,DDGLNL,DDGLNC,DDGLLINE,DDGLITEM,DDGLKEY("KMAP")
- ;
- N DDGLAREA,DDGLI,DDGLT
- D INIT^DDGLIB0()
- ;
- ;Check and default DDGLROW,DDGLCOL,DDGLHT,DDGLWD,DDGLIND
- I $G(DDGLROW,-1)<0 S DDGLROW=5
- E I DDGLROW+3>IOSL S DDGLROW=IOSL-3
- I $G(DDGLCOL,-1)<0 S DDGLCOL=5
- E I DDGLCOL+5>IOM S DDGLCOL=IOM-5
- ;
- S DDGLHT=$S($D(DDGLHT)[0:7,DDGLHT<3:3,1:DDGLHT)
- S:DDGLROW+DDGLHT+1>IOSL DDGLHT=IOSL-DDGLROW
- ;
- S DDGLWD=$S($D(DDGLWD)[0:14,DDGLWD<5:5,1:DDGLWD)
- S:DDGLCOL+DDGLWD+1>IOM DDGLWD=IOM-DDGLCOL
- ;
- I $G(DDGLSEL)="" S DDGLSEL=$O(@DDGLGLO@(""))
- E I '$D(@DDGLGLO@(DDGLSEL)) S DDGLSEL=$O(@DDGLGLO@(DDGLSEL))
- ;
- ;Initialize variables
- F DDGLI=1:1 Q:'$$EXIST^DDGLIBW("LBOX"_DDGLI)
- S DDGLCID="LBOX"_DDGLI
- S DDGLAREA=DDGLROW_U_DDGLCOL_U_DDGLHT_U_DDGLWD
- S DDGLNL=DDGLHT-2
- S DDGLNC=DDGLWD-4
- S DDGLLINE=1
- ;
- ;Fill DDGLITEM array
- S DDGLT=DDGLSEL
- F DDGLI=1:1:DDGLNL D
- . S DDGLITEM(DDGLI)=DDGLT
- . S:DDGLT]"" DDGLT=$O(@DDGLGLO@(DDGLT))
- ;
- ;Get key sequences, create window, display list
- D GETKEY
- D CREATE^DDGLIBW(DDGLCID,DDGLAREA,1)
- D DISP(DDGLSEL)
- Q
- ;
- DISP(DDGLSEL) ;Display the list
- ;In: DDGLSEL = text of selected item
- ;
- N DDGLI,DDGLT
- F DDGLI=1:1:DDGLNL D
- . D CUP(DDGLI,1)
- . S DDGLT=$E(DDGLITEM(DDGLI),1,DDGLNC)
- . S DDGLT=$S(DDGLT=DDGLSEL:$P(DDGLVID,DDGLDEL,6)_DDGLT_$P(DDGLVID,DDGLDEL,10),1:DDGLT)_$J("",DDGLNC-$L(DDGLT))
- . W DDGLT
- Q
- ;
- CUP(Y,X) ;Position cursor relative to list coordinates
- S DY=DDGLROW+Y,DX=DDGLCOL+X+1 X IOXY
- Q
- ;
- GETKEY ;Get key sequences and defaults
- N AU,AD,AR,AL,F1,F2,F3,F4
- N FIND,SELECT,INSERT,REMOVE,PREVSC,NEXTSC
- N I,K,N,T
- S AU=$P(DDGLKEY,U,2)
- S AD=$P(DDGLKEY,U,3)
- S AR=$P(DDGLKEY,U,4)
- S AL=$P(DDGLKEY,U,5)
- S F1=$P(DDGLKEY,U,6)
- S FIND=$P(DDGLKEY,U,10)
- S SELECT=$P(DDGLKEY,U,11)
- S PREVSC=$P(DDGLKEY,U,14)
- S NEXTSC=$P(DDGLKEY,U,15)
- ;
- S DDGLKEY("KMAP","IN")="",DDGLKEY("KMAP","OUT")=""
- ;
- I $D(DDGLMAP)>9 S I=0 F S I=$O(DDGLMAP(I)) Q:'I D
- . I $P(DDGLMAP(I),";",2)="KEYDOWN" S DDGLKEY("KMAP","KD")=$P(DDGLMAP(I),";") Q
- . I $P(DDGLMAP(I),";",2)="TIMEOUT" S DDGLKEY("KMAP","TO")=$P(DDGLMAP(I),";") Q
- . ;
- . S @("K="_$P(DDGLMAP(I),";",2))
- . I DDGLKEY("KMAP","IN")'[(U_K),K]"" D
- .. S DDGLKEY("KMAP","IN")=DDGLKEY("KMAP","IN")_U_K
- .. S DDGLKEY("KMAP","OUT")=DDGLKEY("KMAP","OUT")_$P(DDGLMAP(I),";")_";"
- ;
- F I=1:1 S T=$P($T(MAP+I),";;",2,999) Q:T="" D
- . S @("K="_$P(T,";",2))
- . I DDGLKEY("KMAP","IN")'[(U_K),K]"" D
- .. S DDGLKEY("KMAP","IN")=DDGLKEY("KMAP","IN")_U_K
- .. S DDGLKEY("KMAP","OUT")=DDGLKEY("KMAP","OUT")_$P(T,";")_";"
- S DDGLKEY("KMAP","IN")=DDGLKEY("KMAP","IN")_U
- S DDGLKEY("KMAP","OUT")=$E(DDGLKEY("KMAP","OUT"),1,$L(DDGLKEY("KMAP","OUT"))-1)
- Q
- ;
- MAP ;Keys for main screen
- ;;UP;AU
- ;;UP;AL
- ;;DN;AD
- ;;DN;AR
- ;;PUP;F1_AU
- ;;PUP;PREVSC
- ;;PDN;F1_AD
- ;;PDN;NEXTSC
- ;;TOP;F1_"T"
- ;;TOP;F1_F1_AU
- ;;TOP;FIND
- ;;BOT;F1_"B"
- ;;BOT;F1_F1_AD
- ;;BOT;SELECT
- ;;SEL;$C(13)
- ;;SEL;F1_"E"
- ;;QT;$C(27)_$C(27)
- ;;QT;F1_"Q"
- ;;QT;F1_"C"
- ;;
- DDGLBXA ;SFISC/MKO-A LIST BOX ;1:58 PM 26 Apr 1996
- +1 ;;22.0;VA FileMan;;Mar 30, 1999
- +2 ;Per VHA Directive 10-93-142, this routine should not be modified.
- +3 ;
- LIST(DDGLGLO,DDGLOUT,DDGLROW,DDGLCOL,DDGLHT,DDGLWD,DDGLSEL,DDGLFLG,DDGLMAP) ;
- +1 ;Input:
- +2 ; DDGLGLO = closed reference of local or global that contains
- +3 ; the list of entries
- +4 ; @DDGLGLO("B",entry,index)=""
- +5 ; DDGLROW = $Y of top left corner
- +6 ; DDGLCOL = $X of top left corner
- +7 ; DDGLHT = height of box
- +8 ; DDGLWD = width of box
- +9 ; DDGLSEL = text of selected item
- +10 ; DDGLFLG = flags
- +11 ; DDGLMAP = array to customize key sequences
- +12 ;
- +13 ;Output:
- +14 ; DDGLOUT = index of selected entry (if any)
- +15 ; DDGLOUT(0) = selected entry
- +16 ; DDGLOUT("C") = code indicates what terminated the read
- +17 ;
- +18 ;Other variables:
- +19 ; window (control) id
- NEW DDGLCID
- +20 ; number of lines in list
- NEW DDGLNL
- +21 ; number of columns in list
- NEW DDGLNC
- +22 ; current line number
- NEW DDGLLINE
- +23 ; item array
- NEW DDGLITEM
- +24 ; DDGLITEM(1..DDGLNL) = text of item displayed
- +25 ;
- +26 IF $GET(DDGLGLO)=""
- QUIT
- +27 DO INIT
- +28 XECUTE DDGLZOSF("EOFF")
- +29 WRITE $PIECE(DDGLVID,DDGLDEL,11)
- +30 ;
- +31 DO ^DDGLBXA1
- +32 ;
- +33 WRITE $PIECE(DDGLVID,DDGLDEL,12)
- +34 XECUTE DDGLZOSF("EON")
- +35 DO DESTROY(DDGLCID,$GET(DDGLFLG))
- +36 QUIT
- +37 ;
- CREATE(DDGLGLO,DDGLCID,DDGLROW,DDGLCOL,DDGLHT,DDGLWD,DDGLSEL,DDGLMAP) ;
- +1 ;Create a list box window
- +2 ;Out:
- +3 ; .DDGLCID array = properties of list box
- +4 ; .DDGLCID(id,"SV") = cid^$Y^$X^NL^NC^LINE
- +5 ; .DDGLCID(id,"ITEM",1..nl) = text of item n in display
- +6 ; .DDGLCID(id,"GL") = DDGLGLO
- +7 ; .DDGLCID(id,"KMAP","IN")
- +8 ; .DDGLCID(id,"KMAP","OUT")
- +9 ; .DDGLCID(id,"KMAP","KD")
- +10 ; .DDGLCID(id,"KMAP","TO")
- +11 ;
- +12 IF $GET(DDGLGLO)=""
- QUIT
- +13 NEW DDGLNL,DDGLNC,DDGLLINE,DDGLLAST,DDGLITEM
- +14 DO INIT
- +15 DO SETCID
- +16 QUIT
- +17 ;
- DESTROY(DDGLCID,DDGLFLG) ;Destroy the window and cleanup
- +1 DO DESTROY^DDGLIBW(DDGLCID)
- +2 KILL DDGLCID(DDGLCID)
- +3 DO KILL^DDGLIB0($GET(DDGLFLG))
- +4 QUIT
- +5 ;
- READ(DDGLCID,DDGLOUT) ;
- +1 NEW DDGLGLO,DDGLROW,DDGLCOL,DDGLNL,DDGLNC,DDGLLINE,DDGLSEL,DDGLITEM
- +2 NEW DX,DY
- +3 ;
- +4 DO SETPARM
- +5 XECUTE DDGLZOSF("EOFF")
- +6 WRITE $PIECE(DDGLVID,DDGLDEL,11)
- +7 ;
- +8 DO ^DDGLBXA1
- +9 ;
- +10 DO SETCID
- +11 WRITE $PIECE(DDGLVID,DDGLDEL,12)
- +12 XECUTE DDGLZOSF("EON")
- +13 QUIT
- +14 ;
- UPDATE(DDGLCID,DDGLVAL) ;
- +1 NEW DDGLGLO,DDGLROW,DDGLCOL,DDGLNL,DDGLNC,DDGLLINE,DDGLSEL,DDGLITEM
- +2 NEW DDGLI,DDGLT,DX,DY
- +3 ;
- +4 DO SETPARM
- +5 ;
- +6 ;Get closest match incl. or foll. DDGLVAL
- +7 SET DDGLSEL=$GET(DDGLVAL)
- +8 IF $GET(DDGLSEL)=""
- SET DDGLSEL=$ORDER(@DDGLGLO@(""))
- +9 IF '$TEST
- IF '$DATA(@DDGLGLO@(DDGLSEL))
- SET DDGLSEL=$ORDER(@DDGLGLO@(DDGLSEL))
- +10 IF DDGLSEL=""
- QUIT
- +11 ;
- +12 ;Check whether DDGLVAL is already on the screen
- +13 IF DDGLITEM(1)']]DDGLSEL
- IF DDGLSEL']]DDGLITEM(DDGLNL)
- Begin DoDot:1
- +14 DO CUP(DDGLLINE,1)
- +15 WRITE $EXTRACT(DDGLITEM(DDGLLINE),1,DDGLNC)
- +16 FOR DDGLLINE=1:1:DDGLNL
- IF DDGLITEM(DDGLLINE)=DDGLSEL
- QUIT
- +17 DO CUP(DDGLLINE,1)
- +18 WRITE $PIECE(DDGLVID,DDGLDEL,6)_$EXTRACT(DDGLSEL,1,DDGLNC)_$PIECE(DDGLVID,DDGLDEL,10)
- End DoDot:1
- +19 ;
- +20 ;If not, adjust the array
- +21 IF '$TEST
- Begin DoDot:1
- +22 SET DDGLT=DDGLSEL
- +23 FOR DDGLI=1:1:DDGLNL
- Begin DoDot:2
- +24 SET DDGLITEM(DDGLI)=DDGLT
- +25 IF DDGLT]""
- SET DDGLT=$ORDER(@DDGLGLO@(DDGLT))
- End DoDot:2
- +26 DO DISP(DDGLSEL)
- End DoDot:1
- +27 ;
- +28 DO SETCID
- +29 QUIT
- +30 ;
- SETCID ;Set DDGLCID array
- +1 KILL DDGLCID(DDGLCID)
- +2 SET DDGLCID(DDGLCID,"SV")=DDGLCID_U_DDGLROW_U_DDGLCOL_U_DDGLNL_U_DDGLNC_U_DDGLLINE
- +3 MERGE DDGLCID(DDGLCID,"ITEM")=DDGLITEM
- +4 SET DDGLCID(DDGLCID,"GL")=DDGLGLO
- +5 MERGE DDGLCID(DDGLCID,"KMAP")=DDGLKEY("KMAP")
- +6 QUIT
- +7 ;
- SETPARM ;Set parameters from DDGLCID array
- +1 NEW DDGLI
- +2 SET DDGLGLO=DDGLCID(DDGLCID,"GL")
- +3 ;
- +4 KILL DDGLKEY("KMAP")
- +5 MERGE DDGLKEY("KMAP")=DDGLCID(DDGLCID,"KMAP")
- +6 MERGE DDGLITEM=DDGLCID(DDGLCID,"ITEM")
- +7 ;
- +8 SET DDGLI=DDGLCID(DDGLCID,"SV")
- +9 SET DDGLROW=$PIECE(DDGLI,U,2)
- +10 SET DDGLCOL=$PIECE(DDGLI,U,3)
- +11 SET DDGLNL=$PIECE(DDGLI,U,4)
- +12 SET DDGLNC=$PIECE(DDGLI,U,5)
- +13 SET DDGLLINE=$PIECE(DDGLI,U,6)
- +14 SET DDGLSEL=DDGLITEM(DDGLLINE)
- +15 KILL DDGLCID(DDGLCID)
- +16 QUIT
- +17 ;
- INIT ;Create list box (window) and setup variables
- +1 ;In: DDGLROW,DDGLCOL,DDGLHT,DDGLWD,DDGLSEL,DDGLGLO,DDGLMAP
- +2 ;Returns: DDGLROW,DDGLCOL,DDGLHT,DDGLWD,DDGLIND
- +3 ; DDGLCID,DDGLNL,DDGLNC,DDGLLINE,DDGLITEM,DDGLKEY("KMAP")
- +4 ;
- +5 NEW DDGLAREA,DDGLI,DDGLT
- +6 DO INIT^DDGLIB0()
- +7 ;
- +8 ;Check and default DDGLROW,DDGLCOL,DDGLHT,DDGLWD,DDGLIND
- +9 IF $GET(DDGLROW,-1)<0
- SET DDGLROW=5
- +10 IF '$TEST
- IF DDGLROW+3>IOSL
- SET DDGLROW=IOSL-3
- +11 IF $GET(DDGLCOL,-1)<0
- SET DDGLCOL=5
- +12 IF '$TEST
- IF DDGLCOL+5>IOM
- SET DDGLCOL=IOM-5
- +13 ;
- +14 SET DDGLHT=$SELECT($DATA(DDGLHT)[0:7,DDGLHT<3:3,1:DDGLHT)
- +15 IF DDGLROW+DDGLHT+1>IOSL
- SET DDGLHT=IOSL-DDGLROW
- +16 ;
- +17 SET DDGLWD=$SELECT($DATA(DDGLWD)[0:14,DDGLWD<5:5,1:DDGLWD)
- +18 IF DDGLCOL+DDGLWD+1>IOM
- SET DDGLWD=IOM-DDGLCOL
- +19 ;
- +20 IF $GET(DDGLSEL)=""
- SET DDGLSEL=$ORDER(@DDGLGLO@(""))
- +21 IF '$TEST
- IF '$DATA(@DDGLGLO@(DDGLSEL))
- SET DDGLSEL=$ORDER(@DDGLGLO@(DDGLSEL))
- +22 ;
- +23 ;Initialize variables
- +24 FOR DDGLI=1:1
- IF '$$EXIST^DDGLIBW("LBOX"_DDGLI)
- QUIT
- +25 SET DDGLCID="LBOX"_DDGLI
- +26 SET DDGLAREA=DDGLROW_U_DDGLCOL_U_DDGLHT_U_DDGLWD
- +27 SET DDGLNL=DDGLHT-2
- +28 SET DDGLNC=DDGLWD-4
- +29 SET DDGLLINE=1
- +30 ;
- +31 ;Fill DDGLITEM array
- +32 SET DDGLT=DDGLSEL
- +33 FOR DDGLI=1:1:DDGLNL
- Begin DoDot:1
- +34 SET DDGLITEM(DDGLI)=DDGLT
- +35 IF DDGLT]""
- SET DDGLT=$ORDER(@DDGLGLO@(DDGLT))
- End DoDot:1
- +36 ;
- +37 ;Get key sequences, create window, display list
- +38 DO GETKEY
- +39 DO CREATE^DDGLIBW(DDGLCID,DDGLAREA,1)
- +40 DO DISP(DDGLSEL)
- +41 QUIT
- +42 ;
- DISP(DDGLSEL) ;Display the list
- +1 ;In: DDGLSEL = text of selected item
- +2 ;
- +3 NEW DDGLI,DDGLT
- +4 FOR DDGLI=1:1:DDGLNL
- Begin DoDot:1
- +5 DO CUP(DDGLI,1)
- +6 SET DDGLT=$EXTRACT(DDGLITEM(DDGLI),1,DDGLNC)
- +7 SET DDGLT=$SELECT(DDGLT=DDGLSEL:$PIECE(DDGLVID,DDGLDEL,6)_DDGLT_$PIECE(DDGLVID,DDGLDEL,10),1:DDGLT)_$JUSTIFY("",DDGLNC-$LENGTH(DDGLT))
- +8 WRITE DDGLT
- End DoDot:1
- +9 QUIT
- +10 ;
- CUP(Y,X) ;Position cursor relative to list coordinates
- +1 SET DY=DDGLROW+Y
- SET DX=DDGLCOL+X+1
- XECUTE IOXY
- +2 QUIT
- +3 ;
- GETKEY ;Get key sequences and defaults
- +1 NEW AU,AD,AR,AL,F1,F2,F3,F4
- +2 NEW FIND,SELECT,INSERT,REMOVE,PREVSC,NEXTSC
- +3 NEW I,K,N,T
- +4 SET AU=$PIECE(DDGLKEY,U,2)
- +5 SET AD=$PIECE(DDGLKEY,U,3)
- +6 SET AR=$PIECE(DDGLKEY,U,4)
- +7 SET AL=$PIECE(DDGLKEY,U,5)
- +8 SET F1=$PIECE(DDGLKEY,U,6)
- +9 SET FIND=$PIECE(DDGLKEY,U,10)
- +10 SET SELECT=$PIECE(DDGLKEY,U,11)
- +11 SET PREVSC=$PIECE(DDGLKEY,U,14)
- +12 SET NEXTSC=$PIECE(DDGLKEY,U,15)
- +13 ;
- +14 SET DDGLKEY("KMAP","IN")=""
- SET DDGLKEY("KMAP","OUT")=""
- +15 ;
- +16 IF $DATA(DDGLMAP)>9
- SET I=0
- FOR
- SET I=$ORDER(DDGLMAP(I))
- IF 'I
- QUIT
- Begin DoDot:1
- +17 IF $PIECE(DDGLMAP(I),";",2)="KEYDOWN"
- SET DDGLKEY("KMAP","KD")=$PIECE(DDGLMAP(I),";")
- QUIT
- +18 IF $PIECE(DDGLMAP(I),";",2)="TIMEOUT"
- SET DDGLKEY("KMAP","TO")=$PIECE(DDGLMAP(I),";")
- QUIT
- +19 ;
- +20 SET @("K="_$PIECE(DDGLMAP(I),";",2))
- +21 IF DDGLKEY("KMAP","IN")'[(U_K)
- IF K]""
- Begin DoDot:2
- +22 SET DDGLKEY("KMAP","IN")=DDGLKEY("KMAP","IN")_U_K
- +23 SET DDGLKEY("KMAP","OUT")=DDGLKEY("KMAP","OUT")_$PIECE(DDGLMAP(I),";")_";"
- End DoDot:2
- End DoDot:1
- +24 ;
- +25 FOR I=1:1
- SET T=$PIECE($TEXT(MAP+I),";;",2,999)
- IF T=""
- QUIT
- Begin DoDot:1
- +26 SET @("K="_$PIECE(T,";",2))
- +27 IF DDGLKEY("KMAP","IN")'[(U_K)
- IF K]""
- Begin DoDot:2
- +28 SET DDGLKEY("KMAP","IN")=DDGLKEY("KMAP","IN")_U_K
- +29 SET DDGLKEY("KMAP","OUT")=DDGLKEY("KMAP","OUT")_$PIECE(T,";")_";"
- End DoDot:2
- End DoDot:1
- +30 SET DDGLKEY("KMAP","IN")=DDGLKEY("KMAP","IN")_U
- +31 SET DDGLKEY("KMAP","OUT")=$EXTRACT(DDGLKEY("KMAP","OUT"),1,$LENGTH(DDGLKEY("KMAP","OUT"))-1)
- +32 QUIT
- +33 ;
- MAP ;Keys for main screen
- +1 ;;UP;AU
- +2 ;;UP;AL
- +3 ;;DN;AD
- +4 ;;DN;AR
- +5 ;;PUP;F1_AU
- +6 ;;PUP;PREVSC
- +7 ;;PDN;F1_AD
- +8 ;;PDN;NEXTSC
- +9 ;;TOP;F1_"T"
- +10 ;;TOP;F1_F1_AU
- +11 ;;TOP;FIND
- +12 ;;BOT;F1_"B"
- +13 ;;BOT;F1_F1_AD
- +14 ;;BOT;SELECT
- +15 ;;SEL;$C(13)
- +16 ;;SEL;F1_"E"
- +17 ;;QT;$C(27)_$C(27)
- +18 ;;QT;F1_"Q"
- +19 ;;QT;F1_"C"
- +20 ;;