MOV SYSBAS,D1
CALL SHOADR
TYPE <System memory >
MOV MEMBAS,D1
SUB SYSBAS,D1
CALL SHOSIZ
MOV MEMBAS,D1
CALL SHOADR
TYPE <User memory >
MOV MEMEND,D1
SUB MEMBAS,D1
CALL SHOSIZ
TYPECR < ---------->
TYPE < Total memory >
MOV MEMEND,D1
CALL SHOSIZ
CRLF ;
;find amount of user memory in use
CLR D0 ; size of hold (largest)
CLR D4 ; not in use K count
CLR D5 ; in use K count
CLR D3 ; size of hole (current)
CLR D2 ; state flag (0=unused, 1=used)
CLR D0 ;
MOV MEMBAS,A0 ;
MOV MEMEND,A1 ;
LOOP: CALL OWNED ; see if this memory is in use
BEQ INUSE ; yes, owned by a job
FREE: INC D4 ; increment not-in-use K count
TSTB D2 ; same state?
BEQ 10$ ; yes
CLRB D2 ;
CLR D3 ;
10$: INC D3 ;
BR NEXT ;
INUSE: INC D5 ; increment in-use K count
TSTB D2 ; same state?
BNE NEXT ; yes
TST D3 ;
BEQ NEXT ;
TST D0 ;
BEQ 10$ ;
CMP D3,D0
BLOS NEXT ;
10$: MOV D3,D0 ;
NEXT: ADD #1024.,A0 ;
CMP A0,A1 ;
BLO LOOP ;
CRLF ;
TYPE <Memory allocated to jobs >
MOV D5,D1 ;
MUL D1,#1024. ;
CALL SHOSIZ ;
TYPE <Memory free (not in use) >
MOV D4,D1 ;
MUL D1,#1024. ;
CALL SHOSIZ ;
TYPE <Largest free segment size>
MOV D0,D1 ;
MUL D1,#1024. ;
CALL SHOSIZ ;
SHO.KB: DIV D1,#1024. ;
AND #177777,D1 ;
DCVT 0,OT$TRM!OT$ZER ;
10$: TYPE < KB> ;
MUL D1,#1024. ;
SUB D1,D2 ;
BEQ SHO.RT ;
MOV D2,D1 ;
TYPE <, > ;
BR SHO.BR ;
SHO.MB: DIV D1,#1024. ;
AND #177777,D1 ;
DIV D1,#1024. ;
AND #177777,D1 ;
DCVT 0,OT$TRM!OT$ZER ;
TYPE < MB> ;
MUL D1,#1024. ;
MUL D1,#1024. ;
SUB D1,D2 ;
BEQ SHO.RT ;
MOV D2,D1 ;
TYPE <, > ;
JMP SHO.BR ;