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

RGUTRRT.m

Go to the documentation of this file.
  1. RGUTRRT ;CAIRO/DKM - Remote routine transfer;04-Sep-1998 11:26;DKM
  1. ;;2.1;RUN TIME LIBRARY;;Mar 22, 1999
  1. ;=================================================================
  1. ; Utility to copy routines to all target machines. A server
  1. ; runs in the background on all machines to receive new routines.
  1. ;=================================================================
  1. ; This is the entry point for interactive use
  1. D ENTRY(0)
  1. Q
  1. DELETE D ENTRY(1)
  1. Q
  1. ENTRY(RGDALL) ;
  1. D HOME^%ZIS
  1. D TITLE^RGUT("Remote Routine "_$S(RGDALL:"Delete",1:"Transfer"),"1.0")
  1. X ^%ZOSF("RSEL")
  1. I RGDALL D
  1. .N RGRTN
  1. .S RGRTN=$C(1)
  1. .F S RGRTN=$O(^UTILITY($J,RGRTN)) Q:RGRTN="" S ^(RGRTN)="DELETE"
  1. D SAVE
  1. Q
  1. ; This entry point allows passing routine names in ^UTILITY
  1. ; If the data of the ^UTILITY node is "DELETE", the routine is deleted!
  1. SAVE Q:$D(^UTILITY($J))<10
  1. N RGRTN,RGDEL
  1. S RGRTN=$C(1),U="^"
  1. F S RGRTN=$O(^UTILITY($J,RGRTN)) Q:RGRTN="" D
  1. .S RGDEL=^(RGRTN)="DELETE"
  1. .K ^(RGRTN)
  1. .D RRT(RGRTN,RGDEL)
  1. D JOB
  1. Q
  1. ; This subroutine remote copies/deletes routine RGRTN
  1. RRT(RGRTN,RGDEL) ;
  1. Q:RGRTN'?1.8AN!($G(^RGUTL("UCI"))="")
  1. N RGX,RGZ,RGZ1,RGZ2
  1. S RGDEL=+$G(RGDEL),U="^"
  1. L +^XTMP("RGUTSRV",0)
  1. S RGX=1+$O(^XTMP("RGUTSRV",$C(1)),-1)
  1. F RGZ=0:0 S RGZ=+$O(^XTMP("RGUTSRV","B",RGRTN,RGZ)) Q:'RGZ K ^(RGZ),^XTMP("RGUTSRV",RGZ)
  1. S ^XTMP("RGUTSRV",RGX)=RGRTN,^XTMP("RGUTSRV","B",RGRTN,RGX)=""
  1. L -^XTMP("RGUTSRV",0)
  1. X:'RGDEL "ZL "_RGRTN_" F RGZ=1:1 S RGZ1=$T(+RGZ) Q:'$L(RGZ1) S ^XTMP(""RGUTSRV"",RGX,RGZ)=RGZ1"
  1. S RGZ2=$$UCI
  1. F RGZ1=1:1 S RGZ=$$UCI(RGZ1) Q:'$L(RGZ) S:RGZ'=RGZ2!RGDEL ^XTMP("RGUTSRV",RGX,0,RGZ)=""
  1. F RGZ1=1:1 S RGZ=$$UCI(RGZ1) Q:'$L(RGZ) S:RGZ'=RGZ2!RGDEL ^XTMP("RGUTSRV",RGZ,RGX)=""
  1. Q
  1. ; Return indexed UCI
  1. UCI(RGN) N RGZ,Y
  1. I '$G(RGN) X ^%ZOSF("UCI") Q Y
  1. S U="^",RGZ=$P($G(^RGUTL("UCI")),U,RGN)
  1. I $L(RGZ),RGZ'["," S RGZ=$P($$UCI,",")_","_RGZ
  1. Q RGZ
  1. ; Make sure all remote servers are running
  1. JOB N RGZ,RGUCI
  1. F RGZ=1:1 S RGUCI=$$UCI(RGZ) Q:'$L(RGUCI) D
  1. .L +^XTMP("RGUTSRV",RGUCI):0
  1. .E Q
  1. .L -^XTMP("RGUTSRV",RGUCI)
  1. .I $$QUEUE^RGUTTSK("^RGUTSRV","Remote Routine Transfer",,,,RGUCI)
  1. Q
  1. ; Shutdown remote servers
  1. SHUTDOWN N RGZ,RGUCI
  1. F RGZ=1:1 S RGUCI=$$UCI(RGZ) Q:'$L(RGUCI) S ^XTMP("RGUTSRV",RGUCI,0)=1
  1. Q