- ZU ;SF/RWF - For Cache and Open M! ;06/13/2006
- ;;8.0;KERNEL;**34,94,118,162,170,225,419**;Jul 10, 1995;Build 5
- ;TIE ALL TERMINALS EXCEPT CONSOLE TO THIS ROUTINE!
- EN N $ES,$ETRAP S $ETRAP="D ERR^ZU Q:$QUIT -9 Q"
- D:+$G(^%ZTSCH("LOGRSRC")) LOGRSRC^%ZOSV("$LOGIN$")
- ;The next line keeps sign-on users from taking the last slot
- ;It can be commented out if not needed.
- I $$AVJ^%ZOSV()<3 W $C(7),!!,"** TROUBLE ** - NO AVALIABLE JOBS ** CALL IRM NOW! **" G HALT
- ;Only call ShareLic for Telnet connections.
- I ($I["|TNT|")!($I["TNA") D SHARELIC^%ZOSV(0)
- G ^XUS
- ;
- ;
- ERR ;Come here on error
- ; Try and handle stack overflow errors specifically
- I $ZE["STACK" S $ET="Q:$ST>"_($ST-8)_" D ERR2^ZU" Q
- ERR2 ;
- S $ET="D UNWIND^ZU" L ;Backup trap (419)
- Q:$ECODE["<PROG>"
- ;
- D ^%ZTER K %ZT ; Capture symbol table first!
- ;
- I $G(IO)]"",$D(IO(1,IO)),$E($G(IOST))="P" D
- . U IO
- . W @$S($D(IOF):IOF,1:"#")
- I $G(IO(0))]"" D
- . U IO(0)
- . W !!,"RECORDING THAT AN ERROR OCCURRED ---"
- . W !!?15,"Sorry 'bout that"
- . W !,*7
- . W !?10,"$STACK=",$STACK," $ECODE=",$ECODE
- . W !?10,"$ZERROR=",$ZERROR
- ;
- I $G(DUZ)'>0 G HALT
- X ^%ZOSF("PROGMODE") Q:Y
- S $ET="D HALT^ZU" ;419
- I $ZE'["<INTERRUPT>" S XUERF="" G ^XUSCLEAN ;419
- CTRLC I $D(IO)=11 U IO(0) W !,"--Interrupt Acknowledged",!
- D KILL1^XUSCLEAN ;Clean up symbol table
- S $ECODE=",U55,"
- Q
- ;
- UNWIND ;Unwind the stack
- Q:$ESTACK>1 G CTRLC2:$ECODE["U55"
- S $ECODE=""
- Q
- ;
- CTRLC2 S $ECODE="" G:$G(^XUTL("XQ",$J,"T"))<2 ^XUSCLEAN
- S ^XUTL("XQ",$J,"T")=1,XQY=^(1),XQY0=$P(XQY,"^",2,99)
- G:$P(XQY0,"^",4)'="M" HALT
- S XQPSM=$P(XQY,"^",1),XQY=+XQPSM,XQPSM=$P(XQPSM,XQY,2,3)
- G:'XQY ^XUSCLEAN
- S $ECODE="",$ETRAP="D ERR^ZU"
- G M1^XQ
- ;
- HALT S $ECODE="" I $D(^XUTL("XQ",$J)) D BYE^XUSCLEAN
- D:+$G(^%ZTSCH("LOGRSRC")) LOGRSRC^%ZOSV("$LOGOUT$")
- HALT
- ;
- ZU ;SF/RWF - For Cache and Open M! ;06/13/2006
- +1 ;;8.0;KERNEL;**34,94,118,162,170,225,419**;Jul 10, 1995;Build 5
- +2 ;TIE ALL TERMINALS EXCEPT CONSOLE TO THIS ROUTINE!
- EN NEW $ESTACK,$ETRAP
- SET $ETRAP="D ERR^ZU Q:$QUIT -9 Q"
- +1 IF +$GET(^%ZTSCH("LOGRSRC"))
- DO LOGRSRC^%ZOSV("$LOGIN$")
- +2 ;The next line keeps sign-on users from taking the last slot
- +3 ;It can be commented out if not needed.
- +4 IF $$AVJ^%ZOSV()<3
- WRITE $CHAR(7),!!,"** TROUBLE ** - NO AVALIABLE JOBS ** CALL IRM NOW! **"
- GOTO HALT
- +5 ;Only call ShareLic for Telnet connections.
- +6 IF ($IO["|TNT|")!($IO["TNA")
- DO SHARELIC^%ZOSV(0)
- +7 GOTO ^XUS
- +8 ;
- +9 ;
- ERR ;Come here on error
- +1 ; Try and handle stack overflow errors specifically
- +2 IF $ZE["STACK"
- SET $ETRAP="Q:$ST>"_($STACK-8)_" D ERR2^ZU"
- QUIT
- ERR2 ;
- +1 ;Backup trap (419)
- SET $ETRAP="D UNWIND^ZU"
- LOCK
- +2 IF $ECODE["<PROG>"
- QUIT
- +3 ;
- +4 ; Capture symbol table first!
- DO ^%ZTER
- KILL %ZT
- +5 ;
- +6 IF $GET(IO)]""
- IF $DATA(IO(1,IO))
- IF $EXTRACT($GET(IOST))="P"
- Begin DoDot:1
- +7 USE IO
- +8 WRITE @$SELECT($DATA(IOF):IOF,1:"#")
- End DoDot:1
- +9 IF $GET(IO(0))]""
- Begin DoDot:1
- +10 USE IO(0)
- +11 WRITE !!,"RECORDING THAT AN ERROR OCCURRED ---"
- +12 WRITE !!?15,"Sorry 'bout that"
- +13 WRITE !,*7
- +14 WRITE !?10,"$STACK=",$STACK," $ECODE=",$ECODE
- +15 WRITE !?10,"$ZERROR=",$ZERROR
- End DoDot:1
- +16 ;
- +17 IF $GET(DUZ)'>0
- GOTO HALT
- +18 XECUTE ^%ZOSF("PROGMODE")
- IF Y
- QUIT
- +19 ;419
- SET $ETRAP="D HALT^ZU"
- +20 ;419
- IF $ZE'["<INTERRUPT>"
- SET XUERF=""
- GOTO ^XUSCLEAN
- CTRLC IF $DATA(IO)=11
- USE IO(0)
- WRITE !,"--Interrupt Acknowledged",!
- +1 ;Clean up symbol table
- DO KILL1^XUSCLEAN
- +2 SET $ECODE=",U55,"
- +3 QUIT
- +4 ;
- UNWIND ;Unwind the stack
- +1 IF $ESTACK>1
- QUIT
- IF $ECODE["U55"
- GOTO CTRLC2
- +2 SET $ECODE=""
- +3 QUIT
- +4 ;
- CTRLC2 SET $ECODE=""
- IF $GET(^XUTL("XQ",$JOB,"T"))<2
- GOTO ^XUSCLEAN
- +1 SET ^XUTL("XQ",$JOB,"T")=1
- SET XQY=^(1)
- SET XQY0=$PIECE(XQY,"^",2,99)
- +2 IF $PIECE(XQY0,"^",4)'="M"
- GOTO HALT
- +3 SET XQPSM=$PIECE(XQY,"^",1)
- SET XQY=+XQPSM
- SET XQPSM=$PIECE(XQPSM,XQY,2,3)
- +4 IF 'XQY
- GOTO ^XUSCLEAN
- +5 SET $ECODE=""
- SET $ETRAP="D ERR^ZU"
- +6 GOTO M1^XQ
- +7 ;
- HALT SET $ECODE=""
- IF $DATA(^XUTL("XQ",$JOB))
- DO BYE^XUSCLEAN
- +1 IF +$GET(^%ZTSCH("LOGRSRC"))
- DO LOGRSRC^%ZOSV("$LOGOUT$")
- +2 HALT
- +3 ;