| 1 | KMPDUT4 ;OAK/RAK; Multi-Lookup ;2/17/04  10:46 | 
|---|
| 2 | ;;2.0;CAPACITY MANAGEMENT TOOLS;;Mar 22, 2002 | 
|---|
| 3 | ; | 
|---|
| 4 | SELECT(ARRAY,SORT,MAX,OPTION) ;select one or more entries | 
|---|
| 5 | ;-------------------------------------------------------------------- | 
|---|
| 6 | ;  this routine lets user select one or more entries from a file | 
|---|
| 7 | ; | 
|---|
| 8 | ;    ARRAY - the array the data is to be stored in | 
|---|
| 9 | ;            this may be a local or global array | 
|---|
| 10 | ;            ARRAY(0) - will contain the number of entries selected | 
|---|
| 11 | ; | 
|---|
| 12 | ;     SORT - determines how the array is set | 
|---|
| 13 | ;            0 - internal file number | 
|---|
| 14 | ;            1 - first piece of zero node | 
|---|
| 15 | ; | 
|---|
| 16 | ;            if zero then ARRAY(internal_number)=external_format | 
|---|
| 17 | ;            if one then  ARRAY(external_format)=internal_number | 
|---|
| 18 | ; | 
|---|
| 19 | ;            internal_number - the internal file number selected | 
|---|
| 20 | ;            external_format - the first piece of the zero node or | 
|---|
| 21 | ;                              Y(0,0) | 
|---|
| 22 | ; | 
|---|
| 23 | ;      MAX - if defined this represents the maximum number of entries | 
|---|
| 24 | ;            to stuff into array | 
|---|
| 25 | ;            - if '*' is selected and the number of file entries | 
|---|
| 26 | ;              exceeds this number the array will be killed and | 
|---|
| 27 | ;              ARRAY(0) will be equal to "*" | 
|---|
| 28 | ;            - if while selecting one entry at a time the number | 
|---|
| 29 | ;              of entries is equal to MAX the routine will quit with | 
|---|
| 30 | ;              the entries stored as usual and ARRAY(0)=MAX | 
|---|
| 31 | ;            this is to prevent partition store errors with local | 
|---|
| 32 | ;            arrays or setting a global equal all the patients in | 
|---|
| 33 | ;            the patient file | 
|---|
| 34 | ; | 
|---|
| 35 | ;   OPTION - selected options | 
|---|
| 36 | ;            S - suppress asterisk (*)   ;'(* for All)' prompt | 
|---|
| 37 | ;            W - allow selected wildcards | 
|---|
| 38 | ;                example:  A*     - will select all entries beginning | 
|---|
| 39 | ;                                   with the letter 'A' | 
|---|
| 40 | ;                          SMITH* - will select all entries beginning | 
|---|
| 41 | ;                                   with 'SMITH' | 
|---|
| 42 | ; | 
|---|
| 43 | ;      DIC - this variable must be defined in the normal fileman | 
|---|
| 44 | ;            format | 
|---|
| 45 | ; DIC("A") - this variable should be defined | 
|---|
| 46 | ;            the string " (* for All)" will be concatenated to the end | 
|---|
| 47 | ; DIC("S") - may be defined if necessary and will be honored | 
|---|
| 48 | ;   DIC(0) - *** IMPORTANT *** | 
|---|
| 49 | ;            this will be set to DIC(0)="EQZ" for the purposes of | 
|---|
| 50 | ;            this routine | 
|---|
| 51 | ; | 
|---|
| 52 | ;  example:  S DIC=4,DIC("A")="Select Institution: " | 
|---|
| 53 | ;            D SELECT^KMPDUT4("^TMP($J,") | 
|---|
| 54 | ;            D SELECT^KMPDUT4("LOCAL",1,20) | 
|---|
| 55 | ;            D SELECT^KMPDUT4("LOCAL($J)",1,0,"W") | 
|---|
| 56 | ; | 
|---|
| 57 | ;            *** It is the programmers responsibility kill *** | 
|---|
| 58 | ;            ***    'ARRAY' when finished with the data    *** | 
|---|
| 59 | ;-------------------------------------------------------------------- | 
|---|
| 60 | I $$CHECK^KMPDUT4A D FTR^KMPDUTL4("Press <RET> to continue") Q | 
|---|
| 61 | S OPTION=$$UP^XLFSTR($G(OPTION)) | 
|---|
| 62 | S SORT=+$G(SORT),MAX=+$G(MAX) S:SORT'=1 SORT=0 | 
|---|
| 63 | I MAX=1,(OPTION'["S") S OPTION=OPTION_"S" | 
|---|
| 64 | S DIC(0)="EMQZ",DTIME=$S($G(DTIME):DTIME,1:600) | 
|---|
| 65 | I $G(DIC("A"))'["(* for All): ",(OPTION'["S") D | 
|---|
| 66 | .S DIC("A")=$G(DIC("A"))_" (* for All): " | 
|---|
| 67 | K @ARRAY F  D  Q:X=""!(X="^") | 
|---|
| 68 | .I MAX,(+$G(@ARRAY@(0))=MAX) S X="" Q | 
|---|
| 69 | .W ! | 
|---|
| 70 | .I '$D(@ARRAY) W DIC("A") | 
|---|
| 71 | .E  W $J(" ",$L(DIC("A"))-12),"...another: " | 
|---|
| 72 | .R X:DTIME Q:X=""!(X="^") | 
|---|
| 73 | .I X="*",(MAX=1) D  Q | 
|---|
| 74 | ..W *7,!!?7,"...you are allowed only one selection...",! | 
|---|
| 75 | .I X="*",(OPTION["S") D  Q | 
|---|
| 76 | ..W *7,!!?7,"...'*' not allowed...",! | 
|---|
| 77 | .I X="*" D ALL^KMPDUT4B S X="" Q | 
|---|
| 78 | .I $E(X)="-" D MINUS^KMPDUT4C(X) Q | 
|---|
| 79 | .;------------------------------------------------------------------- | 
|---|
| 80 | .;  wildcard selection | 
|---|
| 81 | .;------------------------------------------------------------------- | 
|---|
| 82 | .I $E(X,2,999)["*",(OPTION["W") D WILDCARD^KMPDUT4B(X) Q | 
|---|
| 83 | .I $E(X,1,2)="?D"!($E(X,1,2)="?d") D DISPLAY^KMPDUT4B Q | 
|---|
| 84 | .I X="?",(MAX'=1) D HELP^KMPDUT4C | 
|---|
| 85 | .D ^DIC I Y>0,('$D(@ARRAY@($S(SORT=1:Y(0,0),1:+Y)))) D | 
|---|
| 86 | ..I SORT=1 S @ARRAY@(Y(0,0))=+Y | 
|---|
| 87 | ..E  S @ARRAY@(+Y)=Y(0,0) | 
|---|
| 88 | ..S @ARRAY@(0)=$G(@ARRAY@(0))+1 | 
|---|
| 89 | EXIT ; | 
|---|
| 90 | K X,Y | 
|---|
| 91 | Q | 
|---|