- %ZTLOAD6 ;SEA/RDS-TaskMan: P I: Dequeue ;12/29/94 16:02
- ;;8.0;KERNEL;;JUL 10, 1995
- ;
- INPUT ;check input parameters for error conditions
- I $D(ZTSK)[0 S ZTSK=""
- I $D(ZTSK)>1 S ZTLOAD=ZTSK K ZTSK S ZTSK=ZTLOAD K ZTLOAD
- I ZTSK<1!(ZTSK\1'=ZTSK) S ZTSK(0)=0 Q
- L +^%ZTSK(ZTSK)
- ;
- D UNSCH
- QUIT ;cleanup & quit
- I $D(^%ZTSK(ZTSK)),$D(DUZ)#2,DUZ]"",$D(^VA(200,DUZ,0))#2 S $P(^%ZTSK(ZTSK,.1),U,1,3)="F^"_$H_U_$P(^VA(200,DUZ,0),U)
- L -^%ZTSK(ZTSK) S ZTSK(0)=1 K ZT,ZT1,ZT2,ZT3
- Q
- ;
- UNSCH ;search ^%ZTSCH & unschedule task
- ;Call with task locked.
- N ZT1,ZT2,ZT3
- S ZT1=0 F S ZT1=$O(^%ZTSCH(ZT1)) Q:'ZT1 I $D(^(ZT1,ZTSK)) S ZT2=$G(^(ZTSK)) K ^%ZTSCH(ZT1,ZTSK) I ZT2]"" S $P(^%ZTSK(ZTSK,.2),U)=ZT2
- L +^%ZTSCH("JOB"):15
- S ZT1="" F S ZT1=$O(^%ZTSCH("JOB",ZT1)) Q:ZT1="" I $D(^(ZT1,ZTSK)) K ^%ZTSCH("JOB",ZT1,ZTSK)
- L -^%ZTSCH("JOB"),+^%ZTSCH("IO"):15
- S ZT1="" F S ZT1=$O(^%ZTSCH("IO",ZT1)),ZT2="" Q:ZT1="" F S ZT2=$O(^%ZTSCH("IO",ZT1,ZT2)) Q:ZT2="" I $D(^(ZT2,ZTSK)) D DQ(ZT1,ZT2,ZTSK)
- L -^%ZTSCH("IO"),+^%ZTSCH("C"):15
- S ZT1="" F S ZT1=$O(^%ZTSCH("C",ZT1)),ZT2="" Q:ZT1="" F S ZT2=$O(^%ZTSCH("C",ZT1,ZT2)) Q:ZT2="" I $D(^(ZT2,ZTSK)) K ^%ZTSCH("C",ZT1,ZT2,ZTSK)
- L -^%ZTSCH("C"),+^%ZTSCH("LINK")
- S ZT1="" F S ZT1=$O(^%ZTSCH("LINK",ZT1)),ZT2="" Q:ZT1="" F S ZT2=$O(^%ZTSCH("LINK",ZT1,ZT2)) Q:ZT2="" I $D(^(ZT2,ZTSK)) K ^%ZTSCH("LINK",ZT1,ZT2,ZTSK)
- L -^%ZTSCH("LINK")
- Q
- ;
- DQ(%ZTIO,ZTDTH,ZTSK) ;SEARCH--remove task from Device Waiting List
- L +^%ZTSCH("IO") D DQ^%ZTM4 L -^%ZTSCH("IO")
- Q
- ;
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HZTLOAD6 1541 printed Feb 18, 2025@23:42:29 Page 2
- %ZTLOAD6 ;SEA/RDS-TaskMan: P I: Dequeue ;12/29/94 16:02
- +1 ;;8.0;KERNEL;;JUL 10, 1995
- +2 ;
- INPUT ;check input parameters for error conditions
- +1 IF $DATA(ZTSK)[0
- SET ZTSK=""
- +2 IF $DATA(ZTSK)>1
- SET ZTLOAD=ZTSK
- KILL ZTSK
- SET ZTSK=ZTLOAD
- KILL ZTLOAD
- +3 IF ZTSK<1!(ZTSK\1'=ZTSK)
- SET ZTSK(0)=0
- QUIT
- +4 LOCK +^%ZTSK(ZTSK)
- +5 ;
- +6 DO UNSCH
- QUIT ;cleanup & quit
- +1 IF $DATA(^%ZTSK(ZTSK))
- IF $DATA(DUZ)#2
- IF DUZ]""
- IF $DATA(^VA(200,DUZ,0))#2
- SET $PIECE(^%ZTSK(ZTSK,.1),U,1,3)="F^"_$HOROLOG_U_$PIECE(^VA(200,DUZ,0),U)
- +2 LOCK -^%ZTSK(ZTSK)
- SET ZTSK(0)=1
- KILL ZT,ZT1,ZT2,ZT3
- +3 QUIT
- +4 ;
- UNSCH ;search ^%ZTSCH & unschedule task
- +1 ;Call with task locked.
- +2 NEW ZT1,ZT2,ZT3
- +3 SET ZT1=0
- FOR
- SET ZT1=$ORDER(^%ZTSCH(ZT1))
- if 'ZT1
- QUIT
- IF $DATA(^(ZT1,ZTSK))
- SET ZT2=$GET(^(ZTSK))
- KILL ^%ZTSCH(ZT1,ZTSK)
- IF ZT2]""
- SET $PIECE(^%ZTSK(ZTSK,.2),U)=ZT2
- +4 LOCK +^%ZTSCH("JOB"):15
- +5 SET ZT1=""
- FOR
- SET ZT1=$ORDER(^%ZTSCH("JOB",ZT1))
- if ZT1=""
- QUIT
- IF $DATA(^(ZT1,ZTSK))
- KILL ^%ZTSCH("JOB",ZT1,ZTSK)
- +6 LOCK -^%ZTSCH("JOB"),+^%ZTSCH("IO"):15
- +7 SET ZT1=""
- FOR
- SET ZT1=$ORDER(^%ZTSCH("IO",ZT1))
- SET ZT2=""
- if ZT1=""
- QUIT
- FOR
- SET ZT2=$ORDER(^%ZTSCH("IO",ZT1,ZT2))
- if ZT2=""
- QUIT
- IF $DATA(^(ZT2,ZTSK))
- DO DQ(ZT1,ZT2,ZTSK)
- +8 LOCK -^%ZTSCH("IO"),+^%ZTSCH("C"):15
- +9 SET ZT1=""
- FOR
- SET ZT1=$ORDER(^%ZTSCH("C",ZT1))
- SET ZT2=""
- if ZT1=""
- QUIT
- FOR
- SET ZT2=$ORDER(^%ZTSCH("C",ZT1,ZT2))
- if ZT2=""
- QUIT
- IF $DATA(^(ZT2,ZTSK))
- KILL ^%ZTSCH("C",ZT1,ZT2,ZTSK)
- +10 LOCK -^%ZTSCH("C"),+^%ZTSCH("LINK")
- +11 SET ZT1=""
- FOR
- SET ZT1=$ORDER(^%ZTSCH("LINK",ZT1))
- SET ZT2=""
- if ZT1=""
- QUIT
- FOR
- SET ZT2=$ORDER(^%ZTSCH("LINK",ZT1,ZT2))
- if ZT2=""
- QUIT
- IF $DATA(^(ZT2,ZTSK))
- KILL ^%ZTSCH("LINK",ZT1,ZT2,ZTSK)
- +12 LOCK -^%ZTSCH("LINK")
- +13 QUIT
- +14 ;
- DQ(%ZTIO,ZTDTH,ZTSK) ;SEARCH--remove task from Device Waiting List
- +1 LOCK +^%ZTSCH("IO")
- DO DQ^%ZTM4
- LOCK -^%ZTSCH("IO")
- +2 QUIT
- +3 ;