| 1 | PSGPLUTL ;BIR/RLW-PICK LIST UTILITIES ;06 AUG 96 / 10:54 AM
 | 
|---|
| 2 |  ;;5.0; INPATIENT MEDICATIONS ;**109**;16 DEC 97
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 | PAT ; find next patient or jump to a new patient
 | 
|---|
| 5 |  I $E(OK,1,1)="^"&($P(OK,"^",2)?1.A) D JUMP Q 
 | 
|---|
| 6 |  S PN=$O(^PS(53.5,"AC",PSGPLG,TM,WDN,RB,PN))
 | 
|---|
| 7 |  Q
 | 
|---|
| 8 |  ;
 | 
|---|
| 9 | JUMP ; try to find patient user wants to jump to and construct "AC" xref
 | 
|---|
| 10 |  S DIC="^PS(53.5,"_PSGPLG_",1,",DIC(0)="EQZ",X=PSGP D ^DIC K DIC
 | 
|---|
| 11 |  Q
 | 
|---|
| 12 |  ;
 | 
|---|
| 13 | LOCK(PSGPLG,APPL) ; Pick List routines use an ^XTMP node instead of locking, to allow some jobs to run concurrently on the same Pick List (PRINT and SEND TO ATC).
 | 
|---|
| 14 |  ; PSGPLG=pick list number, APPL=option attempting to "lock", SETAPPL=option already in progress, APPLOK=if '1', option attempting to "lock" can proceed.
 | 
|---|
| 15 |  N SETAPPL,APPLOK,SUB,PLG
 | 
|---|
| 16 |  D NOW^%DTC S X1=X,X2=1 D C^%DTC S ^XTMP("PSGPL",0)=X,APPLOK=0
 | 
|---|
| 17 |  ; clean up XTMP nodes left by aborted jobs (for all pick lists)
 | 
|---|
| 18 |  S PLG=0 F  S PLG=$O(^XTMP("PSGPL",PLG)) Q:PLG=""  D
 | 
|---|
| 19 |  .S SETAPPL=0 F  S SETAPPL=$O(^XTMP("PSGPL",PLG,SETAPPL)) Q:SETAPPL=""  D
 | 
|---|
| 20 |  ..S SUB=0 F  S SUB=$O(^XTMP("PSGPL",PLG,SETAPPL,SUB)) Q:SUB=""  L +^XTMP("PSGPL",PLG,SETAPPL,SUB):1 I  K ^XTMP("PSGPL",PLG,SETAPPL,SUB) L -^XTMP("PSGPL",PLG,SETAPPL,SUB)
 | 
|---|
| 21 |  I '$D(^XTMP("PSGPL",PSGPLG)) S ^XTMP("PSGPL",PSGPLG,APPL,$J)="" L +^XTMP("PSGPL",PSGPLG,APPL,$J):1 Q 1
 | 
|---|
| 22 |  S SETAPPL=0 F  S SETAPPL=$O(^XTMP("PSGPL",PSGPLG,SETAPPL)) Q:SETAPPL=""  D
 | 
|---|
| 23 |  .I (APPL="PSGPLR")&((SETAPPL="PSGTAP")!(SETAPPL="PSGPLR")) S ^XTMP("PSGPL",PSGPLG,APPL,$J)="" L +^XTMP("PSGPL",PSGPLG,APPL,$J):1 S:$T APPLOK=1 Q
 | 
|---|
| 24 |  .I (APPL="PSGTAP")&(SETAPPL="PSGPLR") S ^XTMP("PSGPL",PSGPLG,APPL,$J)="" L +^XTMP("PSGPL",PSGPLG,APPL,$J):1 S:$T APPLOK=1 Q
 | 
|---|
| 25 |  Q APPLOK
 | 
|---|
| 26 |  ;
 | 
|---|
| 27 | UNLOCK(PSGPLG,APPL)          ;.
 | 
|---|
| 28 |  L -^XTMP("PSGPL",PSGPLG,APPL,$J) K ^XTMP("PSGPL",PSGPLG,APPL,$J)
 | 
|---|
| 29 |  K:'$O(^XTMP("PSGPL",0)) ^XTMP("PSGPL")
 | 
|---|
| 30 |  Q
 | 
|---|