Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: KMPDUT4

KMPDUT4.m

Go to the documentation of this file.
KMPDUT4 ;OAK/RAK; Multi-Lookup ;2/17/04  10:46
 ;;3.0;KMPD;;Jan 22, 2009;Build 42
 ;
SELECT(ARRAY,SORT,MAX,OPTION) ;select one or more entries
 ;--------------------------------------------------------------------
 ;  this routine lets user select one or more entries from a file
 ;
 ;    ARRAY - the array the data is to be stored in
 ;            this may be a local or global array
 ;            ARRAY(0) - will contain the number of entries selected
 ;
 ;     SORT - determines how the array is set
 ;            0 - internal file number
 ;            1 - first piece of zero node
 ;
 ;            if zero then ARRAY(internal_number)=external_format
 ;            if one then  ARRAY(external_format)=internal_number
 ;
 ;            internal_number - the internal file number selected
 ;            external_format - the first piece of the zero node or
 ;                              Y(0,0)
 ;
 ;      MAX - if defined this represents the maximum number of entries
 ;            to stuff into array
 ;            - if '*' is selected and the number of file entries
 ;              exceeds this number the array will be killed and
 ;              ARRAY(0) will be equal to "*"
 ;            - if while selecting one entry at a time the number
 ;              of entries is equal to MAX the routine will quit with
 ;              the entries stored as usual and ARRAY(0)=MAX
 ;            this is to prevent partition store errors with local
 ;            arrays or setting a global equal all the patients in
 ;            the patient file
 ;
 ;   OPTION - selected options
 ;            S - suppress asterisk (*)   ;'(* for All)' prompt
 ;            W - allow selected wildcards
 ;                example:  A*     - will select all entries beginning
 ;                                   with the letter 'A'
 ;                          SMITH* - will select all entries beginning
 ;                                   with 'SMITH'
 ;
 ;      DIC - this variable must be defined in the normal fileman
 ;            format
 ; DIC("A") - this variable should be defined
 ;            the string " (* for All)" will be concatenated to the end
 ; DIC("S") - may be defined if necessary and will be honored
 ;   DIC(0) - *** IMPORTANT ***
 ;            this will be set to DIC(0)="EQZ" for the purposes of
 ;            this routine
 ;
 ;  example:  S DIC=4,DIC("A")="Select Institution: "
 ;            D SELECT^KMPDUT4("^TMP($J,")
 ;            D SELECT^KMPDUT4("LOCAL",1,20)
 ;            D SELECT^KMPDUT4("LOCAL($J)",1,0,"W")
 ;
 ;            *** It is the programmers responsibility kill ***
 ;            ***    'ARRAY' when finished with the data    ***
 ;--------------------------------------------------------------------
 I $$CHECK^KMPDUT4A D FTR^KMPDUTL4("Press <RET> to continue") Q
 S OPTION=$$UP^XLFSTR($G(OPTION))
 S SORT=+$G(SORT),MAX=+$G(MAX) S:SORT'=1 SORT=0
 I MAX=1,(OPTION'["S") S OPTION=OPTION_"S"
 S DIC(0)="EMQZ",DTIME=$S($G(DTIME):DTIME,1:600)
 I $G(DIC("A"))'["(* for All): ",(OPTION'["S") D 
 .S DIC("A")=$G(DIC("A"))_" (* for All): "
 K @ARRAY F  D  Q:X=""!(X="^")
 .I MAX,(+$G(@ARRAY@(0))=MAX) S X="" Q
 .W !
 .I '$D(@ARRAY) W DIC("A")
 .E  W $J(" ",$L(DIC("A"))-12),"...another: "
 .R X:DTIME Q:X=""!(X="^")
 .I X="*",(MAX=1) D  Q
 ..W *7,!!?7,"...you are allowed only one selection...",!
 .I X="*",(OPTION["S") D  Q
 ..W *7,!!?7,"...'*' not allowed...",!
 .I X="*" D ALL^KMPDUT4B S X="" Q
 .I $E(X)="-" D MINUS^KMPDUT4C(X) Q
 .;-------------------------------------------------------------------
 .;  wildcard selection
 .;-------------------------------------------------------------------
 .I $E(X,2,999)["*",(OPTION["W") D WILDCARD^KMPDUT4B(X) Q
 .I $E(X,1,2)="?D"!($E(X,1,2)="?d") D DISPLAY^KMPDUT4B Q
 .I X="?",(MAX'=1) D HELP^KMPDUT4C
 .D ^DIC I Y>0,('$D(@ARRAY@($S(SORT=1:Y(0,0),1:+Y)))) D 
 ..I SORT=1 S @ARRAY@(Y(0,0))=+Y
 ..E  S @ARRAY@(+Y)=Y(0,0)
 ..S @ARRAY@(0)=$G(@ARRAY@(0))+1
EXIT ;
 K X,Y
 Q