| 1 | HLCSFMN2 ;ALB/JRP - FILER MONITOR UTILITIES;13-FEB-95 ;10/15/99  07:16
 | 
|---|
| 2 |  ;;1.6;HEALTH LEVEL SEVEN;**57**;Oct 13, 1995
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 | SELECT(INARR,ENTITY) ;SELECTION UTILITY
 | 
|---|
| 5 |  ;INPUT  : INARR - Array whose first subscript denotes the list of
 | 
|---|
| 6 |  ;                 selectable numbers (full global reference)
 | 
|---|
| 7 |  ;               - $O(INARR(x)) yields all selectable numbers
 | 
|---|
| 8 |  ;         ENTITY - What's being selected
 | 
|---|
| 9 |  ;                - Defaults to 'Entry' (prompt is 'Select Entry')
 | 
|---|
| 10 |  ;OUTPUT : X - Number selected
 | 
|---|
| 11 |  ;         0 - Nothing selected
 | 
|---|
| 12 |  ;        -1 - Bad input / nothing to select from
 | 
|---|
| 13 |  ;        -2 - Timeout / abort
 | 
|---|
| 14 |  ;NOTES  : User does not have to select an entry
 | 
|---|
| 15 |  ;       : Number selected will be validated (must be in INARR).  This
 | 
|---|
| 16 |  ;         allows gaps to exist in INARR(x).
 | 
|---|
| 17 |  ;       : Only whole numbers greater than zero are selectable
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 |  ;CHECK INPUT
 | 
|---|
| 20 |  Q:($G(INARR)="") -1
 | 
|---|
| 21 |  Q:('$O(@INARR@(0))) -1
 | 
|---|
| 22 |  S:($G(ENTITY)="") ENTITY="Entry"
 | 
|---|
| 23 |  ;DECLARE VARIABLES
 | 
|---|
| 24 |  N DIR,X,Y,DTOUT,DUOUT,DIRUT,FRSTENT,LSTENT,LOOP,DONE
 | 
|---|
| 25 |  ;DETERMINE FIRST AND LAST ENTRY NUMBERS
 | 
|---|
| 26 |  S FRSTENT=+$O(@INARR@(""))
 | 
|---|
| 27 |  S LSTENT=+$O(@INARR@(""),-1)
 | 
|---|
| 28 |  ;ONLY ONE ITEM - AUTO SELECT
 | 
|---|
| 29 |  Q:(FRSTENT=LSTENT) FRSTENT
 | 
|---|
| 30 |  ;PROMPT USER FOR VALID SELECTION
 | 
|---|
| 31 |  F DONE=0:0 D  Q:(DONE)
 | 
|---|
| 32 |  .K DIR,DTOUT,DUOUT,DIRUT,X,Y
 | 
|---|
| 33 |  .S DIR(0)="NAO^"_FRSTENT_":"_LSTENT_":0"
 | 
|---|
| 34 |  .S DIR("A")="Select "_ENTITY_" ("_FRSTENT_"-"_LSTENT_"): "
 | 
|---|
| 35 |  .S DIR("?",1)="Response must be a number between "_FRSTENT_" and "_LSTENT
 | 
|---|
| 36 |  .S DIR("?")="Enter '??' to see a list of valid selections"
 | 
|---|
| 37 |  .S DIR("??")="^W !!,""Valid Selections: "" S LOOP=0 F  S LOOP=+$O(@INARR@(LOOP)) Q:('LOOP)  W:(LOOP'=FRSTENT) "","" W:(($X+$L(LOOP)+1)>79) !,?18 W LOOP"
 | 
|---|
| 38 |  .D ^DIR
 | 
|---|
| 39 |  .;TIMEOUT/ABORT
 | 
|---|
| 40 |  .I (($D(DTOUT))!($D(DUOUT))) S Y=-2,DONE=1 Q
 | 
|---|
| 41 |  .;NOTHING SELECTED
 | 
|---|
| 42 |  .I ($D(DIRUT)) S Y=0,DONE=1 Q
 | 
|---|
| 43 |  .;VALIDATE SELECTION
 | 
|---|
| 44 |  .I ($D(@INARR@(Y))) S DONE=1 Q
 | 
|---|
| 45 |  .;INVALID SELECTION
 | 
|---|
| 46 |  .W $C(7),!!,Y," is not a valid selection"
 | 
|---|
| 47 |  .W !,"Enter '??' to see a list of valid selections"
 | 
|---|
| 48 |  .W !
 | 
|---|
| 49 |  ;DONE
 | 
|---|
| 50 |  Q Y
 | 
|---|