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

ZISUTL.m

Go to the documentation of this file.
  1. %ZISUTL ;ISD/HGW - Device Handler Utility routine ;05/22/12 10:22
  1. ;;8.0;KERNEL;**18,24,34,69,118,127,199,275,425,599**;JUL 10, 1995;Build 9
  1. ;Per VHA Directive 2004-038, this routine should not be modified
  1. ; Unit test routine ^ZZUTZI00
  1. Q ;No entry from top
  1. GETDEV(X) ;Return IO variables
  1. ; ZEXCEPT: POP
  1. I '$D(^TMP("XUDEVICE",$J,X)) S POP=1 Q
  1. ;Cleanup first
  1. N % K IO("S")
  1. D SYMBOL("K") ;Kill first
  1. D SYMBOL(1,$NA(^TMP("XUDEVICE",$J,X)))
  1. Q
  1. SAVDEV(NM) ;Save IO variables
  1. ;NM=Handle name
  1. N %,Y,R
  1. I $G(IO)="" Q
  1. S Y=$$FINDEV(NM) I 'Y S Y=$$NEXTDEV(NM)
  1. S R=$NA(^TMP("XUDEVICE",$J,Y)) K @R ;Clear
  1. S @R@(0)=NM
  1. D SYMBOL(0,R)
  1. Q
  1. SYMBOL(MODE,ROOT) ;0=Save, 1=Restore, K=Kill IO variables
  1. N %
  1. ;Handle IO as special case. Don't want to kill all of IO.
  1. I MODE=0 S:$D(IO)#2 @ROOT@("IO")=IO
  1. I MODE=1 S:$D(@ROOT@("IO")) IO=@ROOT@("IO")
  1. F %="IO(""DOC"")","IO(""HFSIO"")","IO(""Q"")","IO(""S"")","IO(""SPOOL"")","IO(""ZIO"")","IOBS","IOCPU","IOF","IOHG","IOM","ION","IOPAR","IOUPAR","IOS","IOSL","IOST","IOST(0)","IOT","IOXY" D
  1. . I MODE=0 S:$D(@%)#2 @ROOT@(%)=@% Q
  1. . I MODE=1 S:$D(@ROOT@(%)) @%=@ROOT@(%) Q
  1. . I MODE="K" K @%
  1. . Q
  1. Q
  1. RMDEV(X) ;Remove saved IO variables.
  1. N Y
  1. S Y=$$FINDEV(X)
  1. Q:'Y
  1. K ^TMP("XUDEVICE",$J,"B",X),^TMP("XUDEVICE",$J,+Y)
  1. Q
  1. RMALLDEV() ;Remove saved IO variables for all devices saved in table.
  1. K ^TMP("XUDEVICE",$J)
  1. Q 1
  1. FINDEV(NM) ;Find Device name and return IEN.
  1. Q $O(^TMP("XUDEVICE",$J,"B",NM,0))
  1. NEXTDEV(NM) ;Return next available device.
  1. N Y
  1. F Y=1:1 Q:'$D(^TMP("XUDEVICE",$J,Y))
  1. S ^TMP("XUDEVICE",$J,"B",NM,Y)=""
  1. Q Y
  1. OPEN(HNDL,IOP,%ZIS) ;Open extrinsic function
  1. ;Parameters
  1. ;HNDL=Handle name
  1. ;IOP string--optional
  1. ;%ZIS string--optional
  1. N %
  1. I $G(IOP)="" K IOP ;Remove IOP if null.
  1. D ^%ZIS,SAVDEV(HNDL):POP=0
  1. Q
  1. CLOSE(X1) ;Close extrinsic function
  1. ;X1=Handle
  1. N %,Y
  1. S Y=$$FINDEV(X1)
  1. Q:'Y
  1. D GETDEV(Y)
  1. D ^%ZISC,RMDEV(X1)
  1. Q
  1. USE(X1) ;Restore IO* variables pertaining to the device.
  1. ;X1=Handle name
  1. ; ZEXCEPT: IOT
  1. N %,Y
  1. S Y=$$FINDEV^%ZISUTL(X1)
  1. Q:'Y
  1. D GETDEV^%ZISUTL(Y)
  1. I $G(IOT)'="RES" U $S($D(IO(1,IO)):IO,1:IO(0))
  1. K IO("CLOSE")
  1. Q
  1. LINEPORT() ;Return device name for line port.
  1. N %
  1. S %=$$LNPRTIEN^%ZISUTL($$LNPRTNAM^%ZISUTL)
  1. Q +$P($G(^%ZIS(3.23,+%,0)),"^",3)
  1. LNPRTSUB() ;Return line port subtype pointer.
  1. N %
  1. S %=$$LNPRTIEN^%ZISUTL($$LNPRTNAM^%ZISUTL)
  1. Q +$P($G(^%ZIS(3.23,+%,0)),"^",4)
  1. LNPRTNAM() ;Return Line port name
  1. N Y,%
  1. S Y="",%=$G(^%ZOSF("OS"))
  1. I %["VAX DSM"!(%["OpenM-NT") D
  1. .S Y=$ZIO
  1. E I %["MSM" X "S Y=$ZDEV($I)"
  1. Q Y
  1. LNPRTIEN(X) ;Return internal entry number of Line/port
  1. Q:X'?1AN.29ANP 0
  1. Q $O(^%ZIS(3.23,"B",X,0))
  1. LNPRTADR(X) ;Returns Line/Port name of a fixed device.
  1. N %,Y
  1. S Y=""
  1. S %=$O(^%ZIS(1,"B",X,0))
  1. S %=$O(^%ZIS(3.23,"C",+%,0))
  1. I %,$G(^%ZIS(3.23,+%,0))]"" S Y=$P(^(0),"^")
  1. Q Y
  1. FIND(IOP) ;e.f. Get the IEN of a device
  1. N %XX,%YY,%ZIS,%ZISV
  1. S %ZISV=^%ZOSF("VOL"),%XX=$$UP^%ZIS1(IOP) D 1^%ZIS5
  1. Q %YY
  1. NOQ(IOP) ;e.f. Return queueing status
  1. ;Call with Device name, Return 1 if NO QUEUE, Else 0.
  1. N %X,%Y S %X=$$FIND(IOP) Q:%X'>0 0
  1. S %Y=$P($G(^%ZIS(1,%X,0)),U,12)
  1. Q %Y=2
  1. UNIQUE(ZISNA) ;Build a unique number to add to a device name
  1. ;If passed a name put the number before the last dot.
  1. N %,%1,%2
  1. S %2=$INCREMENT(^TMP("ZISUTL",$J)) ;Kernel exemption, allowed to use $INCREMENT
  1. S %=$H,%=$H_"-"_$J,%=$$CRC32^XLFCRC(%)_"-"_%2
  1. I '$L($G(ZISNA)) Q %
  1. S %1=$L(ZISNA,"."),%="_"_%
  1. S:%1=1 %=ZISNA_% S:%1>1 %=$P(ZISNA,".",1,%1-1)_%_"."_$P(ZISNA,".",%1)
  1. Q %
  1. ENDOFILE() ;p599 Set Cache end-of-file to work like DSM
  1. ;Return 1 if mode was changed, 0 if unchanged
  1. N %
  1. I $$VERSION^%ZOSV(1)["Cache" D Q 1
  1. .I +$$VERSION^%ZOSV>2010 X "D $SYSTEM.Process.SetZEOF(1)"
  1. .I +$$VERSION^%ZOSV'>2010 S %=$ZUTIL(68,40,1)
  1. Q 0