.TITLE FNDNUL ; SUBROUTINE TO IDENTIFY THE PID OF THE NULL PROCESS ; ; CALLING PROCEDURE: ; PUSHAL NULL_PID ; CALLS #1,FNDNUL ; R0 = -1 IF FAILURE ; R1 = JPI RETURN STATUS IF FAILURE ; ; PID RETURNED IN ARGUMENT IF SUCCESSFUL .SBTTL MACRO DEFINITIONS $JPIDEF $SSDEF .PSECT FNDATA,WRT,LCL,NOEXE ; $GETJPI ITEM LIST TO RETRIEVE USERNAME, LOGIN TIME, IMAGE NAME ; PID: .LONG -1 ; WILDCARD PID (ALL PROCESSES) THIS_PID: .BLKL 1 ; STORAGE FOR THE CURRENT PID PRCNAME: .BLKB 15. ; STORAGE FOR CURRENT PROCESS NAME NULPRC: .ASCII /NULL/ ; LOOKING FOR NULL TASK PRCLEN: .BLKL 1 ; LENGTH OF PROCESS NAME JPILST: .WORD 15. ; 15 BYTE PROC NAME .WORD JPI$_PRCNAM ; GET PROCESS NAME .ADDRESS PRCNAME ; ADDRESS TO STORE NAME .ADDRESS PRCLEN ; ADDRESS TO STORE LENGTH OF NAME .WORD 4 ; LONGWORD .WORD JPI$_PID ; GET THE PID .ADDRESS THIS_PID ; ADDRESS TO STORE PID .LONG 0 ; DONT NEED RETURN LENGTH .LONG 0 ; END OF ITEM LIST .PSECT FNDNUL,EXE .ENTRY FNDNUL,^M ; CMPC3 DESTROYS R2,R3 LOOP: $GETJPIW_S PIDADR=PID,ITMLST=JPILST CMPL R0,#SS$_NOMOREPROC ; SEE IF NO MORE PROCESSES BNEQ CHKNUL ; MORE PROCESSES SO CHECK IT JMP NOT_FOUND ; NO MORE - RETURN WITH ERROR CHKNUL: CMPC3 PRCLEN,PRCNAME,NULPRC ; COMPARE PROC NAME TO "NULL" BNEQ LOOP ; NO MATCH - GET NEXT FOUND: MOVL THIS_PID,@4(AP) ; RETURN THE PID MOVL #1,R0 ; INDICATE SUCCESS CLRL R1 ; DITTO RET NOT_FOUND: MOVL R0,R1 ; RETURN JPI STATUS IN R1 MOVL #-1,R0 ; SET ERROR CONDITION RET .END