; DJOB.LIT - Dynamic job display ; ; Copyright [c] STUYVESANT ; ; ; EDIT HISTORY ; ;;;;;;;;;;;; ; [* **] DJOB13 CREATED DJOB13 FOR AMOSL 1.3 OPR SYSTEM V 1.0B(4) ; [J-01] DJOB2 DELETED CODE FOR RESET DISPLAY OF CONNECTION TIME V 1.1B(4) ; AND ERASE DISPLAY WHER FIELD RESET ; ; SEARCH SYS SEARCH SYSSYM SEARCH TRM RADIX 8. AUTOEXTERN INTERN M%DEF VMAJOR = 1. VMINOR = 1. VSUB = 2. VEDIT = 4. VWHO = 0. ; EQUATES STR.R=0 STR.N=2 STR.S=3 ; ;MACROS DEFINE DPACK ADDR,COUNT ; SET UP FOR UNPACK ADDR= WHERE RAD50 IS COUNT=# OF WORDS @(ADDR) LEA A1,ADDR ; EA=> A1 MOV #COUNT-1,D0 ; D0 GETS COUNT-1 SO BEQ TRUE FOR 1 WORD CALL UPACK ; UNPACK IT ONTO SCREEN AT CURRENT POSITION ENDM DEFINE L.CRT ROW,COL ; SET A WORD=ROW/COL CODE WORD + ENDM DEFINE DSPLY ROW,COL,TEXT ; SET BYTES = WORD + ; ROW/COL CODE BYTE 20$$-10$$ ; LENGTH OF MESSAGE 10$$: ASCIZ ?TEXT? ; BYTES OF MESSAGE EVEN ; FORCE EVEN FOR NEXT NESSAGE 20$$: ; NEED FOR SUBTRACTION ABOVE ENDM DEFINE LOW ; SET REDUCED INTENSITY MOV #177400+11.,D1 TCRT ENDM DEFINE HIGH ; SET NORMAL INTENSITY MOV #177400+12.,D1 TCRT ENDM DEFINE .ODEF%I $SYM,$SIZE $SYM==$$OFLC IF B, $SIZE, $$OFLC=$$OFLC+1 IF NB, $SIZE, $$OFLC=$$OFLC+$SIZE ENDM ; ; ; MEMORY MODULE INFO DATA TBL ; .OFINI .ODEF%I M%SIZE,4 ; MODULE SIZE .ODEF%I M%STAT,2 ; MODULE STATUS .ODEF%I M%NAME,6 ; MODULE NAME .ODEF%I M%ADDR,4 ; MODULE ADDRESS .OFSIZ M%DEF .OFINI .ODEF%I J%MOD,M%DEF*17. ; JOBS MEMORY MODULE data table .ODEF%I M%LINE,2 ; LAST RECORDED LINE INDEX .ODEF%I J%JCB,4 ; JOBS JCB pointer .ODEF%I J%TRM,4 ; JOBS TRMDEF pointer ; .ODEF%I J%JNM,4 ; JOBS job name .ODEF%I J%TNM,4 ; JOBS trm name .ODEF%I J%DEV,2 ; JOBS log-dev .ODEF%I J%DRV,2 ; JOBS log-drive .ODEF%I J%PPN,2 ; JOBS log-proj-prog number .ODEF%I J%RTU,2 ; JOBS root-unit .ODEF%I J%RTD,2 ; JOBS root-device .ODEF%I J%RTP,2 ; JOBS root-proj-prog number .ODEF%I J%LVL,1 ; JOBS user expertise .ODEF%I J%EXP,1 ; JOBS user level .ODEF%I J%MSR,4 ; JOBS link to pending receive messages .ODEF%I J%LNG,4 ; JOBS pointer to language def tbl .ODEF%I J%USN,20 ; JOBS user name .ODEF%I J%CMD,30 ; JOBS forced command line .ODEF%I J%PGM,4 ; JOBS program name .ODEF%I J%TST,2 ; JOBS trm status .ODEF%I J%JST,2 ; JOBS job status .ODEF%I J%TYP,2 ; JOBS job type .ODEF%I J%BAS,4 ; JOBS memory location (ABS) .ODEF%I J%SIZ,4 ; JOBS memory size .ODEF%I J%PRV,2 ; JOBS privilage word .ODEF%I J%CMS,2 ; JOBS command file size .ODEF%I J%CMZ,2 ; JOBS command file status .ODEF%I J%CPU,4 ; JOBS cpu time .ODEF%I J%DSR,4 ; JOBS disk reads .ODEF%I J%DSW,4 ; JOBS disk writes ; .ODEF%I M%JCB,4 ; pointer to my JCB .ODEF%I M%TRM,4 ; pointer to my TRMDEF .ODEF%I M%TDV,4 ; addr of my .TDV ;.ODEF%I M%TYP,2 ; my old job type .ODEF%I XIDV,4 ; addr of PSEUDO IDV .ODEF%I S%TIME,4 ; system time .ODEF%I WORK,12 ; work space EVEN ; .OFSIZE IMPSIZ .=0 ; PSECT START: PHDR -1,0,PH$REE!PH$REU GETIMP IMPSIZ,A5 ; get memory MOV A5,A0 MOVW #[IMP],-(A0) ; defign name [DJOB.IMP] MOVW #[B ],-(A0) ; MOVW #[DJO],-(A0) ; JOBIDX A0 ; get JCB addr MOV A0,M%JCB(A5) ; save it MOV JOBTRM(A0),A0 ; get TRMDEF addr MOV A0,M%TRM(A5) ; save it MOV T.TDV(A0),M%TDV(A5) ; save TDV addr of my guy ORW #T$IMI!T$ECS!T$ILC,@A0 ; set terminal status bits GETNAM: BYP LIN JNE 1$ TYPECR EXIT RAD50 /C JEFFERY R. STUYVESANT/ 1$: FILNAM WORK(A5),JOB ; set job name MOV JOBTBL,A0 ; point to job table 2$: MOV (A0)+,D1 ; get JCB pointer BEQ 2$ ; none allocated CMP D1,#-1 ; this the end? BEQ 3$ ; YES MOV D1,A1 ; NO - index JCB w/A1 CMM JOBNAM(A1),WORK(A5) ; names match? BNE 2$ ; NO - keep looking BR 4$ ; YES - done looking 3$: CRLF TYPECR EXIT 4$: CMP D1,M%JCB(A5) ; is he trying to talk to himself? BNE 5$ TYPECR EXIT 5$: MOV A1,J%JCB(A5) ; save JCB pointer MOV JOBTRM(A1),D1 ; get TRMDEF addr BR 6$ ; quit if none ; TYPECR ; EXIT ; ; WE GET HERE IF WE HAVE A VALID JOB ; 6$: MOV M%JCB(A5),A0 ; GET PONITER TO MY JCB ; MOVW JOBTYP(A0),M%TYP(A5) ; SAVE MY JOBTYPE ; ANDW #^CJ.HEX,JOBTYP(A0) ; CLR HEX BIT FOR OCTAL OUTPUT CALL SCREEN ; PAINT SCREEN JMP BEGIN ; GOTO MAIN PROGRAM BODY ; ; SUBROUTINES ; ; PAINT SCREEN ; SCREEN: LEA A1,C.SCR N.SCR: CALL PRINT BEQ F.SCR BR N.SCR F.SCR: MOV #5.,D0 ; # of lines +1 10$: DEC D0 ; dec for actual # of lines BEQ E.SCR ; if =0 then fin MOV D0,D1 ; line number -2 LSL D1,#8. ; force to upper byte ADD #<1._8.>+79.,D1 ; add +2 lines & column TCRT ; locate MOV #177400+33.,D1 ; code for nor vid TCRT ; doit MOV D0,D1 ; load line number -2 LSL D1,#8. ; shift to upper byte ADD #<1._8.>+1.,D1 ; add +2 rows & column TCRT ; locate MOV #177400+32.,D1 ; code for rev vid TCRT ; do it BR 10$ ; not finished again ; THIS SBR FINDS THIS PROGRAM AND DISPLAYS ITS CURRENT REV STATUS ; AND FOR THE OPERATING SYSTEM ; E.SCR: LEA A0,START MOV #<1._8.>+14.,D1 ; POSITION TCRT ; MOVE ADD #2.,A0 ; ADD ONE WORD TO ADDR = VER (@A0 = RUN LOGED IN OR NOT) VCVT @A0,OT$TRM ; PRINT OUT 10$: MOV #<1._8.>+50.,D1 ; POSITION TCRT ; MOVE VCVT 2,OT$TRM ; PRINT OUT VERSION OF OPR SYS (@ 2(ABS) IN MEMORY) RTN ; FINISHED ; ; SBR TO PRINT OUT ONE DSPLY STRING ; ; PRINT: CLR D1 ; PRE CLEAR D1 MOVW @A1,D1 ; set up D1=row/col BEQ 120$ ; IF =0 THEN ONLY ATTRIBUTE CODE TO FOLLOW W/O POSITION TCRT ; MOVE CLR D1 ; PRE CLEAR D1 MOVB STR.N(A1),D1 ; = LENGTH OF STRING BEQ 130$ ; IF =0 THEN ATTRIBUTE CODW W/POSITION ADD #3.,A1 ; ADD 3 = BASE OF STR TTYL @A1 ; PRINT OUT ADD D1,A1 ; ADD LENGTH OF STR A1 NOW POINTS TO NEXT DSPLY STRING 110$: TSTW @A1 ; TSTW IF 0 END OF SCREEN RTN ; FINISHED AND RTN 120$: CLR D1 ; PRE CLEAR D1 130$: MOVB STR.S(A1),D1 ; MOVE ATTRIBUTE CODE TO D1 ADDW #177400,D1 ; ADD FOR INDICATE ATTRIBUTE CODE TCRT ; DO IT ADD #4.,A1 ; ADD 4 A1=BASE OF NEXT DSLPY STRING BR 110$ ; GOTO 110$ FOR FINISH PROCESSING ; ; ;LOCATE CURSOR BASED ON MESSAGE LOCATION ; POSCRT::LEA A1,C.SCR ; LOAD BASE MOVW 0(A1)[~D0],D1 ; LOCATE BASE OF MESSAGE = ROW/COL ADDB 2(A1)[~D0],D1 ; ADD LENGTH OF MESSAGE + 1 TCRT ; MOVE CURSOR RTN ; FIN AND RTN ; ;UNPACK A WORD (OR TWO) ; UPACK:: TSTW @A1 ; IF =0 THEN TYPE BLANKS BEQ 110$ ; BR =0 LEA A2,WORK(A5) ; LOACTE UNPACKING SPACE UNPACK ; UNPACK (A1)+ =>(A2)+ TST D0 ; D0 = # WORDS-1 BEQ 100$ ; IF =1 THEN ONLY ONE WORD FINISHED UNPACK ; UNPACK (A1)+ => (A2)+ 100$: CLRB @A2 ; NULL= END OF STR FOR TTYL TTYL WORK(A5) ; PRINT ONTO SCREEN START @ EA WORK(A5) RTN ; FINISHED AND RTN 110$: LOW ; REDUCED INTENSITY TYPE <***> ; FILL SPACE (3 'CUZ RAD50=TRIPLET) TST D0 ; SEE ABOVE BEQ 120$ TYPE <***> ; SEE ABOVE 120$: HIGH ; NORMAL INTENSITY RTN ; FINISHED AND RTN EVEN C.SCR:: WORD 0,0 ; clear screen DSPLY 1., 3., DSPLY 1.,22., DSPLY 1.,39., D%TIME::DSPLY 1.,63.,