; 0001 Module N2O ( Main = N2O ) = ; 0002 begin ; 0003 ; 0004 ! Calls GET_PID to get the pid of the target process, then does ; 0005 ! a $suspnd system service. The priority of the target process ; 0006 ! is increased so that it will get the CPU for long enough to be ; 0007 ! suspended. ; 0008 ! ; 0009 ! R.J. FitzPatrick July 1979 ; 0010 ! Smithsonian Astrophysical Observatory, Cambridge MA ; 0011 ! ; 0012 LIBRARY 'SYS$LIBRARY:STARLET.L32' ; ; 0013 ; 0014 BIND ; 0015 waktim = uplit long(%X'FD050F80', %X'FFFFFFFF'); ! 5 SECS. ; 0016 own ; 0017 status: long, ; 0018 pid: long, ; 0019 oldpri: long; ; 0020 ; 0021 EXTERNAL ROUTINE ; 0022 SYS$HIBER : ADDRESSING_MODE(ABSOLUTE), ; 0023 GET_PID; ; 0024 ; 0025 literal HIPRI = 6; ; 0026 ; 0027 global routine n2o (start_add, cli_callback) = ; 0028 begin ; 0029 status = get_pid (.cli_callback, pid) ; ; 0030 if .status neq ss$_normal then return .status; ; 0031 if .pid eql 0 then return ss$_nonexpr; ; 0032 status = $suspnd( pidadr=pid ) ; ; 0033 if .status neq ss$_normal then return .status; ; 0034 $setpri( pidadr=pid,pri=hipri,prvpri=oldpri ) ; ; 0035 $schdwk( daytim=waktim ) ; ; 0036 sys$hiber( ) ; ; 0037 $setpri( pidadr=pid,pri=.oldpri ) ; 0038 end; .TITLE N2O .PSECT $PLIT$,NOWRT,NOEXE,2 P.AAA: .LONG -50000000, -1 ; ; .PSECT $OWN$,NOEXE,2 STATUS: .BLKB 4 PID: .BLKB 4 OLDPRI: .BLKB 4 WAKTIM= P.AAA .EXTRN SYS$HIBER, GET_PID, SYS$SUSPND, SYS$SETPRI, SYS$SCHDWK .PSECT $CODE$,NOWRT,2 .ENTRY N2O, ^M ;N2O, Save R2,R3 ; 0027 MOVAB @#SYS$SETPRI, R3 ;@#SYS$SETPRI, R3 ; MOVAB W^PID, R2 ;PID, R2 ; PUSHL R2 ;R2 ; 0029 PUSHL 8(AP) ;CLI_CALLBACK ; CALLS #2, W^GET_PID ;#2, GET_PID ; MOVL R0, -4(R2) ;R0, STATUS ; CMPL -4(R2), #1 ;STATUS, #1 ; 0030 BNEQ 2$ ;2$ ; TSTL (R2) ;PID ; 0031 BNEQ 1$ ;1$ ; MOVZWL #2280, R0 ;#2280, R0 ; RET ; ; 1$: CLRL -(SP) ;-(SP) ; 0032 PUSHL R2 ;R2 ; CALLS #2, @#SYS$SUSPND ;#2, @#SYS$SUSPND ; MOVL R0, -4(R2) ;R0, STATUS ; CMPL -4(R2), #1 ;STATUS, #1 ; 0033 BEQL 3$ ;3$ ; 2$: MOVL -4(R2), R0 ;STATUS, R0 ; RET ; ; 3$: PUSHAB 4(R2) ;OLDPRI ; 0034 PUSHL #6 ;#6 ; CLRL -(SP) ;-(SP) ; PUSHL R2 ;R2 ; CALLS #4, (R3) ;#4, SYS$SETPRI ; CLRL -(SP) ;-(SP) ; 0035 PUSHAB W^WAKTIM ;WAKTIM ; CLRQ -(SP) ;-(SP) ; CALLS #4, @#SYS$SCHDWK ;#4, @#SYS$SCHDWK ; CALLS #0, @#SYS$HIBER ;#0, @#SYS$HIBER ; 0036 CLRL -(SP) ;-(SP) ; 0037 PUSHL 4(R2) ;OLDPRI ; CLRL -(SP) ;-(SP) ; PUSHL R2 ;R2 ; CALLS #4, (R3) ;#4, SYS$SETPRI ; RET ; ; 0027 ; Routine Size: 117 bytes ; 0039 end ; 0040 eludom ; PSECT SUMMARY ; ; Name Bytes Attributes ; ; $PLIT$ 8 NOWRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2) ; $OWN$ 12 WRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2) ; $CODE$ 117 NOWRT, RD , EXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2) ; LIBRARY STATISTICS ; ; -------- Symbols -------- Blocks ; File Total Loaded Percent Read ; ; DBA0:[SYSLIB]STARLET.L32;2 2688 5 0 112 ; Compilation Complete .END N2O