Ignore:
Timestamp:
Dec 4, 2009, 12:11:15 AM (14 years ago)
Author:
George Lilly
Message:

revised back to 6/30/08 version

File:
1 edited

Legend:

Unmodified
Added
Removed
  • WorldVistAEHR/trunk/r/KERNEL-XU-A4A7-USC-XG-XLF-XNOA-XPD-XQ-XVIR-ZI-ZOSF-ZOSV-ZT-ZU-%Z-XIP--XQAB--XUC--XUR--ZIN--ZTED/_ZIS2.m

    r613 r623  
    1 %ZIS2   ;SFISC/AC,RWF -- DEVICE HANDLER (CHECKS) ;1/24/08  16:07
    2         ;;8.0;KERNEL;**69,104,112,118,136,241,440**;JUL 10, 1995;Build 13
    3         ;Per VHA Directive 2004-038, this routine should not be modified
    4 HUNT    S:'$D(%ZISHP) %ZISHP=%E,%ZISHGL=0 S %E=0
    5         F  S %ZISHGL=$O(^%ZIS(1,%ZISHG(0),"HG",%ZISHGL)) Q:%ZISHGL'>0  D  Q:%E
    6         . N %1,%2 S %1=$G(^%ZIS(1,%ZISHG(0),"HG",+%ZISHGL,0)),%2=$G(^%ZIS(1,+%1,0))
    7         . ;Check that HG device is on same VOL.
    8         . I $P(%2,"^",9)=%ZISV!($P(%2,"^",9)="") S %E=+$P(^%ZIS(1,%ZISHG(0),"HG",+%ZISHGL,0),"^")
    9         . Q
    10         G L2:%ZISHGL>0 S %ZISHPOP=1,%E=%ZISHP
    11         ;
    12 L2      ;Entry point from %ZIS1
    13         I $D(DTOUT)!$D(DUOUT) K %ZISHP,%ZISHPOP Q
    14 CHECK   ;Get IO check for secondary $I
    15         K %ZISCPU N %Z2
    16         S POP=0,%Z=^%ZIS(1,%E,0),%Z2=$S(%ZIS("PRI")=1:"",1:$G(^%ZIS(1,%E,2))) ;Get Primary and secondary IO.
    17         S IO=$S(%ZIS("PRI")=1:$P(%Z,"^",2),$L($P(%Z2,"^")):$P(%Z2,"^"),1:$P(%Z,"^",2)) ;
    18         S:%IS["Q"&'$D(ZTQUEUED)&($P(%Z,"^",12)=1!$D(XQNOGO)) %ZISB=0,IO("Q")=1 ;Forced Queueing
    19         I $P(%Z,"^",12)=2 S %IS=$TR(%IS,"Q") I $D(IO("Q")) D  Q
    20         . I '$D(IOP) W !,"Queuing NOT ALLOWED on this device"
    21         . S POP=1 K:$D(IOP) IO("Q") Q
    22         S %Z90=$G(^(90)),%Z95=$G(^(95)),%ZTIME=$G(^("TIME")),%ZTYPE=$G(^("TYPE")),%ZISHG=$O(^%ZIS(1,"AHG",%E,0))
    23         I %ZISHG,$D(^%ZIS(1,+%ZISHG,0)) S:'$D(%ZISHG(0)) %ZISHG(0)=+%ZISHG S %ZISHG=$P(^(0),"^",1)
    24         E  S %ZISHG=""
    25         I %ZTYPE="HG" D OTHCPU("HUNT GROUP") G T:$D(%ZISHG(0))!POP
    26         I %ZTYPE="RES" S %ZISRL=+$P(%Z1,"^",10) G T
    27 VTRM    I %ZTYPE="VTRM",'('$D(IO("Q"))&(%A=%H)) W:'$D(IOP)&'$D(%ZISHP) *7,"  [YOU CAN NOT SELECT A VIRTUAL TERMINAL]" S POP=1 ;Virtual Terminal Check
    28         S:%ZTYPE="VTRM"&'$D(IO("Q"))&(%A=%H) IO=$I
    29         ;
    30 SLAVE   I $D(IO("Q")),$P(%Z,"^",2)=0,$P(%Z,"^",8)']"" W:'$D(IOP) *7,!?10,"  [SLAVE device NOT set up for queuing]" S POP=1 G T
    31 OCPU    D OTHCPU("DEVICE")
    32         ;
    33 OOS     G T:POP I %Z90,$D(DT)#2,%Z90'>DT S POP=1 ;Out Of Service Check
    34         I $T,'$D(IOP),'$D(%ZISHP) W *7,"  [Out of Service]" ;I 'POP W " ..OK" S %=2,U="^" D YN^%ZIS1 G:%=0 OOS S:%'=1 POP=1
    35         ;
    36 PTIME   G T:POP!(IO=$I)!(IO=0)
    37         ;Prohibitted Time Check
    38         S %A=$P(%ZTIME,"^") I %ZISB,$L(%A) D  I POP,'$D(IOP),'$D(%ZISHP) W *7,"  [ACCESS PROHIBITED "_%A_"]" ;AT THIS TIME]"
    39         . N %C,%L,%H ;%C is current time, %L is lower limit, %H is upper limit
    40         . S %C=$P($H,",",2),%C=%C\60#60+(%C\3600*100),%H=$P(%A,"-",2),%L=+%A
    41         . I $S(%H'<%L:(%C'>%H&(%C'<%L)),1:(%C'<%L!(%C'>%H))) S POP=1
    42         . Q
    43 DUZ     I 'POP D SEC ;Security Check
    44         ;
    45 T       I POP,$D(%ZISHG(0)),%IS'["D",'$D(%ZISHPOP),%ZISB G HUNT
    46         I POP D HGBSY:$D(%ZISHPOP) ;G T2:%IS["T"
    47         ;
    48 TMPVAR  K IO("S") S %ZISIOS=%E S:IO=0 IO=$I,IO("S")=%H
    49         S %ZISOPAR=$$IOPAR(%E,"IOPAR")
    50         S %ZISUPAR=$$IOPAR(%E,"IOUPAR"),%ZISTO=+$P(%ZTIME,"^",2)
    51         I $D(IO("S")) D  I POP Q
    52         . S IO=$S(%IS["S":$P($G(^%ZIS(1,+$P(%Z,"^",8),0)),"^",2),1:IO)
    53         . I %IS["S",IO]"" S %H=+$P(%Z,"^",8),IO("S")=%H,IO(0)=IO
    54         . S IO("S")=$S($G(^XUTL("XQ",$J,"IOST(0)")):^("IOST(0)"),1:$G(^%ZIS(1,%H,"SUBTYPE")))
    55         . S:IO="" POP=1
    56         . Q
    57         S %A=+$G(^%ZIS(1,%E,"SUBTYPE")),%ZISTP=0 ;%A is pointer to subtype
    58         I %E=%H,%ZTYPE["TRM" D  I 1
    59         . I $D(^XUTL("XQ",$J,"IOST(0)")) D  ;Use home
    60         . . S %A=+^XUTL("XQ",$J,"IOST(0)"),%Z91="",%ZISTP=1
    61         . . F %ZISI="IOM","IOF","IOSL","IOBS","IOXY" S %Z91=%Z91_$G(^XUTL("XQ",$J,%ZISI))_"^"
    62         . E  S %=$$LNPRTSUB^%ZISUTL I %>0 S %A=%,%Z91=""
    63         E  S %Z91=$P($G(^%ZIS(2,%A,1)),"^",1,4),$P(%Z91,"^",5)=$G(^("XY"))
    64         ;I $D(%Z91),%Z91'?1.4"^" ;$P(%Z91,"^")]"",$P(%Z91,"^",2)]"",$P(%Z91,"^",3),$P(%Z91,"^",4)]""
    65         D ST^%ZIS3(%ZISTP) S:%IS["U" USIO=$P(%Z91,"^",1,4)
    66 T2      I POP S:%IS'["T" IO="" Q
    67         G ^%ZIS3:"^MTRM^VTRM^TRM^SPL^MT^SDP^HFS^RES^OTH^BAR^HG^IMPC^CHAN^"[("^"_%ZTYPE_"^") ;Jump to next part
    68         S POP=1 Q
    69         ;
    70 HGBSY   S POP=1 S:%IS'["T" IO="" K %ZISHP,%ZISHPOP Q:$D(IOP)
    71         W:$X>38 !,?5 W *7," All devices in hunt group "_%ZISHG_" are busy!" Q
    72         ;
    73 OTHCPU(%1)      ;%1 should be either DEVICE or HUNT GROUP
    74         N %2,X,Y,%ZISMSG S %ZISMSG=0
    75         F %2="CPU","VOLUME SET" D
    76         .I %2="VOLUME SET" S X=$P($P(%Z,"^",9),":"),Y=%ZISV
    77         .E  D GETENV^%ZOSV S X=$P($P(%Z,"^",9),":",2),Y=$P($P(Y,"^",4),":",2)
    78         .I X=Y!(X="") Q:%1="DEVICE"  D  Q  ;Other Vol Set/Cpu Check
    79         ..S %ZISHG(0)=%E,%ZISHG=$P(%Z,"^")
    80         ..I %ZISB S POP=1
    81         ..E  S IO=" "
    82         .I %2="VOLUME SET" S $P(%ZISCPU,":")=X
    83         .E  S $P(%ZISCPU,":",2)=X
    84         .I %1="HUNT GROUP" K %ZISHG(0)
    85         .I %IS["Q" S IO("Q")=1,%ZISB=0 S:%1="HUNT GROUP" IO=" "
    86         .E  I %ZISB&(%ZTYPE="TRM"&($D(%ZISHG(0))&(%IS'["D"))) S POP=1
    87         .E  W:'$D(IOP)&'%ZISMSG *7,"  ["_%1_" is on another "_%2_" ('"_X_"')]",! S POP=1,%ZISMSG=1
    88         Q
    89 IOPAR(%DA,%N)   ;Return I/O parameters
    90         Q $S($G(%ZIS(%N))]"":%ZIS(%N),1:$G(^%ZIS(1,%DA,%N)))
    91         ;
    92 SEC     I %Z95]"" S %X=$G(DUZ(0)) I %X'="@" S POP=1 F %A=1:1:$L(%X) I %Z95[$E(%X,%A) S POP=0 Q
    93         I POP,'$D(IOP),'$D(%ZISHP) W *7,"  [Access Prohibited]"
    94         Q
     1%ZIS2 ;SFISC/AC,RWF -- DEVICE HANDLER (CHECKS) ;06/12/2002  15:41
     2 ;;8.0;KERNEL;**69,104,112,118,136,241**;JUL 10, 1995
     3HUNT S:'$D(%ZISHP) %ZISHP=%E,%ZISHGL=0 S %E=0
     4 F  S %ZISHGL=$O(^%ZIS(1,%ZISHG(0),"HG",%ZISHGL)) Q:%ZISHGL'>0  D  Q:%E
     5 . N %1,%2 S %1=$G(^%ZIS(1,%ZISHG(0),"HG",+%ZISHGL,0)),%2=$G(^%ZIS(1,+%1,0))
     6 . ;Check that HG device is on same VOL.
     7 . I $P(%2,"^",9)=%ZISV!($P(%2,"^",9)="") S %E=+$P(^%ZIS(1,%ZISHG(0),"HG",+%ZISHGL,0),"^")
     8 . Q
     9 G L2:%ZISHGL>0 S %ZISHPOP=1,%E=%ZISHP
     10 ;
     11L2 ;Entry point from %ZIS1
     12 I $D(DTOUT)!$D(DUOUT) K %ZISHP,%ZISHPOP Q
     13CHECK K %ZISCPU S POP=0,%Z=^%ZIS(1,%E,0),IO=$P(%Z,"^",2)
     14 S:%IS["Q"&'$D(ZTQUEUED)&($P(%Z,"^",12)=1!$D(XQNOGO)) %ZISB=0,IO("Q")=1 ;Forced Queueing
     15 I $P(%Z,"^",12)=2 S %IS=$TR(%IS,"Q") I $D(IO("Q")) D  Q
     16 . I '$D(IOP) W !,"Queuing NOT ALLOWED on this device"
     17 . S POP=1 K:$D(IOP) IO("Q") Q
     18 S %Z90=$G(^(90)),%Z95=$G(^(95)),%ZTIME=$G(^("TIME")),%ZTYPE=$G(^("TYPE")),%ZISHG=$O(^%ZIS(1,"AHG",%E,0))
     19 I %ZISHG,$D(^%ZIS(1,+%ZISHG,0)) S:'$D(%ZISHG(0)) %ZISHG(0)=+%ZISHG S %ZISHG=$P(^(0),"^",1)
     20 E  S %ZISHG=""
     21 I %ZTYPE="HG" D OTHCPU("HUNT GROUP") G T:$D(%ZISHG(0))!POP
     22 I %ZTYPE="RES" S %ZISRL=+$P(%Z1,"^",10) G T
     23VTRM I %ZTYPE="VTRM",'('$D(IO("Q"))&(%A=%H)) W:'$D(IOP)&'$D(%ZISHP) *7,"  [YOU CAN NOT SELECT A VIRTUAL TERMINAL]" S POP=1 ;Virtual Terminal Check
     24 S:%ZTYPE="VTRM"&'$D(IO("Q"))&(%A=%H) IO=$I
     25 ;
     26SLAVE I $D(IO("Q")),$P(%Z,"^",2)=0,$P(%Z,"^",8)']"" W:'$D(IOP) *7,!?10,"  [SLAVE device NOT set up for queuing]" S POP=1 G T
     27OCPU D OTHCPU("DEVICE")
     28 ;
     29OOS G T:POP I %Z90,$D(DT)#2,%Z90'>DT S POP=1 ;Out Of Service Check
     30 I $T,'$D(IOP),'$D(%ZISHP) W *7,"  [Out of Service]" ;I 'POP W " ..OK" S %=2,U="^" D YN^%ZIS1 G:%=0 OOS S:%'=1 POP=1
     31 ;
     32PTIME G T:POP!(IO=$I)!(IO=0)
     33 ;Prohibitted Time Check
     34 S %A=$P(%ZTIME,"^") I %ZISB,$L(%A) D  I POP,'$D(IOP),'$D(%ZISHP) W *7,"  [ACCESS PROHIBITED "_%A_"]" ;AT THIS TIME]"
     35 . N %C,%L,%H ;%C is current time, %L is lower limit, %H is upper limit
     36 . S %C=$P($H,",",2),%C=%C\60#60+(%C\3600*100),%H=$P(%A,"-",2),%L=+%A
     37 . I $S(%H'<%L:(%C'>%H&(%C'<%L)),1:(%C'<%L!(%C'>%H))) S POP=1
     38 . Q
     39DUZ I 'POP D SEC ;Security Check
     40 ;
     41T I POP,$D(%ZISHG(0)),%IS'["D",'$D(%ZISHPOP),%ZISB G HUNT
     42 I POP D HGBSY:$D(%ZISHPOP) ;G T2:%IS["T"
     43 ;
     44TMPVAR K IO("S") S %ZISIOS=%E S:IO=0 IO=$I,IO("S")=%H
     45 S %ZISOPAR=$$IOPAR(%E,"IOPAR")
     46 S %ZISUPAR=$$IOPAR(%E,"IOUPAR"),%ZISTO=+$P(%ZTIME,"^",2)
     47 I $D(IO("S")) D  I POP Q
     48 . S IO=$S(%IS["S":$P($G(^%ZIS(1,+$P(%Z,"^",8),0)),"^",2),1:IO)
     49 . I %IS["S",IO]"" S %H=+$P(%Z,"^",8),IO("S")=%H,IO(0)=IO
     50 . S IO("S")=$S($G(^XUTL("XQ",$J,"IOST(0)")):^("IOST(0)"),1:$G(^%ZIS(1,%H,"SUBTYPE")))
     51 . S:IO="" POP=1
     52 . Q
     53 S %A=+$G(^%ZIS(1,%E,"SUBTYPE")),%ZISTP=0 ;%A is pointer to subtype
     54 I %E=%H,%ZTYPE["TRM" D  I 1
     55 . I $D(^XUTL("XQ",$J,"IOST(0)")) D  ;Use home
     56 . . S %A=+^XUTL("XQ",$J,"IOST(0)"),%Z91="",%ZISTP=1
     57 . . F %ZISI="IOM","IOF","IOSL","IOBS","IOXY" S %Z91=%Z91_$G(^XUTL("XQ",$J,%ZISI))_"^"
     58 . E  S %=$$LNPRTSUB^%ZISUTL I %>0 S %A=%,%Z91=""
     59 E  S %Z91=$P($G(^%ZIS(2,%A,1)),"^",1,4),$P(%Z91,"^",5)=$G(^("XY"))
     60 ;I $D(%Z91),%Z91'?1.4"^" ;$P(%Z91,"^")]"",$P(%Z91,"^",2)]"",$P(%Z91,"^",3),$P(%Z91,"^",4)]""
     61 D ST^%ZIS3(%ZISTP) S:%IS["U" USIO=$P(%Z91,"^",1,4)
     62T2 I POP S:%IS'["T" IO="" Q
     63 G ^%ZIS3:"^MTRM^VTRM^TRM^SPL^MT^SDP^HFS^RES^OTH^BAR^HG^IMPC^CHAN^"[("^"_%ZTYPE_"^") ;Jump to next part
     64 S POP=1 Q
     65 ;
     66HGBSY S POP=1 S:%IS'["T" IO="" K %ZISHP,%ZISHPOP Q:$D(IOP)
     67 W:$X>38 !,?5 W *7," All devices in hunt group "_%ZISHG_" are busy!" Q
     68 ;
     69OTHCPU(%1) ;%1 should be either DEVICE or HUNT GROUP
     70 N %2,X,Y,%ZISMSG S %ZISMSG=0
     71 F %2="CPU","VOLUME SET" D
     72 .I %2="VOLUME SET" S X=$P($P(%Z,"^",9),":"),Y=%ZISV
     73 .E  D GETENV^%ZOSV S X=$P($P(%Z,"^",9),":",2),Y=$P($P(Y,"^",4),":",2)
     74 .I X=Y!(X="") Q:%1="DEVICE"  D  Q  ;Other Vol Set/Cpu Check
     75 ..S %ZISHG(0)=%E,%ZISHG=$P(%Z,"^")
     76 ..I %ZISB S POP=1
     77 ..E  S IO=" "
     78 .I %2="VOLUME SET" S $P(%ZISCPU,":")=X
     79 .E  S $P(%ZISCPU,":",2)=X
     80 .I %1="HUNT GROUP" K %ZISHG(0)
     81 .I %IS["Q" S IO("Q")=1,%ZISB=0 S:%1="HUNT GROUP" IO=" "
     82 .E  I %ZISB&(%ZTYPE="TRM"&($D(%ZISHG(0))&(%IS'["D"))) S POP=1
     83 .E  W:'$D(IOP)&'%ZISMSG *7,"  ["_%1_" is on another "_%2_" ('"_X_"')]",! S POP=1,%ZISMSG=1
     84 Q
     85IOPAR(%DA,%N) ;Return I/O parameters
     86 Q $S($G(%ZIS(%N))]"":%ZIS(%N),1:$G(^%ZIS(1,%DA,%N)))
     87 ;
     88SEC I %Z95]"" S %X=$G(DUZ(0)) I %X'="@" S POP=1 F %A=1:1:$L(%X) I %Z95[$E(%X,%A) S POP=0 Q
     89 I POP,'$D(IOP),'$D(%ZISHP) W *7,"  [Access Prohibited]"
     90 Q
Note: See TracChangeset for help on using the changeset viewer.