Google
 

Trailing-Edge - PDP-10 Archives - BB-P363B-SM_1985 - mcb/mcbda/mdapar.bli
There is 1 other file named mdapar.bli in the archive. Click here to see a list.
MODULE PARS (					!Dump RSX11 partition map
		IDENT = '003010',
		LANGUAGE (BLISS16, BLISS36)
		) =
BEGIN
!
!                    COPYRIGHT (c) 1980, 1981, 1982
!                    DIGITAL EQUIPMENT CORPORATION
!                        Maynard, Massachusetts
!
!     This software is furnished under a license and may  be  used
!     and copied only in accordance with the terms of such license
!     and with the inclusion of the above copyright notice.   This
!     software  or any other copies thereof may not be provided or
!     otherwise made available to any other person.  No  title  to
!     and ownership of the software is hereby transferred.
!
!     The information  in  this  software  is  subject  to  change
!     without  notice  and should not be construed as a commitment
!     by DIGITAL EQUIPMENT CORPORATION.
!
!     DIGITAL assumes no responsibility for the use or reliability
!     of  its  software  on  equipment  which  is  not supplied by
!     DIGITAL.
!

!++
! FACILITY: MCBDA - MCB Crash Dump Analyzer
!
! ABSTRACT:
!
!	This module contains the routines to display the RSX11 partition
!	information.
!
! ENVIRONMENT:
!
! AUTHOR: ALAN D. PECKHAM	, CREATION DATE: 12-SEP-78
!
! MODIFIED BY:
!
! 	Alan D. Peckham, 9-Jul-80: VERSION 3
! 01	- Change RSX symbol references
!--

!
! TABLE OF CONTENTS:
!

FORWARD ROUTINE
    PCBMAP : NOVALUE,				!Display partition map.
    PUT_PARTITION : NOVALUE,
    PUT_HOLE : NOVALUE;

!
! INCLUDE FILES:
!

LIBRARY 'MDACOM';				!Mda common definitions.

LIBRARY 'RSXLIB';				!RSX definitions.

!
! MACROS:
!
!	None
!
! EQUATED SYMBOLS:
!
!	None
!
! OWN STORAGE:
!

OWN
    OLD_TOP;

!
! EXTERNAL REFERENCES:
!

EXTERNAL ROUTINE
    GETBYT,					!Get a byte from the dump file.
    GETWRD,					!Get a word from the dump file.
    SKIP : NOVALUE,				!Send blank line to listing file.
    SBTTL : NOVALUE;				!Set listing page subtitle.
GLOBAL ROUTINE PCBMAP : NOVALUE =

!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS:
!
!	NONE
!
! IMPLICIT INPUTS:
!
!	NONE
!
! IMPLICIT OUTPUTS:
!
!	NONE
!
! ROUTINE VALUE:
!
!	NONE
!
! SIDE EFFECTS:
!
!	NONE
!
!--

    BEGIN

    LOCAL
	ENTRY_COUNT,
	EXSIZ,
	POOL;

    BIND
	PCB_ADDRESS = EXSIZ,
	SYSIZ = PCB_ADDRESS;

    SBTTL (CH$ASCIZ ('PARTITION INFORMATION'));

    IF NOT SYMBOL_TABLE ('RSX11S') THEN RETURN;

    PUTLN (3, CH$ASCIZ ('%24SM E M O R Y    M A P'));
    PUTLN (3, CH$ASCIZ ('  PARTITION   MEMORY  ALLOCATED     SIZE', '%8STYPE%7SOCCUPIED BY'));
    PUTLN (0, CH$ASCIZ ('  ---------   -----------------     ----', '%8S----%7S-----------'));
    SKIP (1);

    !+
    ! Display the executive partition and pool.
    !-

    PUTLN (0, CH$ASCIZ ('   <EXEC>%5S00%P 00%P   00%P'), 0, (POOL = SYMBOL ($POOL)), .POOL);
    PUTLN (0, CH$ASCIZ ('   <POOL>%5S00%P 00%P   00%P'), .POOL, (EXSIZ = GETWRD (SYMBOL ($EXSIZ))),
	(.EXSIZ - .POOL));
    OLD_TOP = .EXSIZ;

    !+
    ! Now the user partitions.
    !-

    ENTRY_COUNT = RSX_MAX_PCB;
    PCB_ADDRESS = SYMBOL ($PARHD) - FL$OFFSET (P_LNK);

    WHILE (PCB_ADDRESS = GETWRD (.PCB_ADDRESS + FL$OFFSET (P_LNK))) NEQ 0 DO
	BEGIN

	IF (ENTRY_COUNT = .ENTRY_COUNT - 1) LSS 0
	THEN
	    RETURN PUTLN (1,
		    CH$ASCIZ (WARNING,
			'TOO MANY PARTITION ENTRIES'));

	PUT_PARTITION (.PCB_ADDRESS);

	IF FL$SET (GETWRD (.PCB_ADDRESS + FL$OFFSET (P_STAT)), PS_SYS)
	THEN
	    BEGIN

	    LOCAL
		SAVE_OLD_TOP,
		SUB_ADDRESS;

	    SAVE_OLD_TOP = .OLD_TOP;
	    OLD_TOP = GETWRD (.PCB_ADDRESS + FL$OFFSET (P_REL));
	    SUB_ADDRESS = .PCB_ADDRESS;

	    WHILE (SUB_ADDRESS = GETWRD (.SUB_ADDRESS + FL$OFFSET (P_SUB))) NEQ 0 DO
		BEGIN

		IF (ENTRY_COUNT = .ENTRY_COUNT - 1) LSS 0
		THEN
		    RETURN PUTLN (1,
			    CH$ASCIZ (WARNING,
				'TOO MANY PARTITION ENTRIES'));

		PUT_PARTITION (.SUB_ADDRESS);
		END;

	    IF .OLD_TOP LSSU .SAVE_OLD_TOP THEN PUT_HOLE (.OLD_TOP, .SAVE_OLD_TOP);

	    OLD_TOP = .SAVE_OLD_TOP;
	    END;

	END;

    IF .OLD_TOP LSSU (SYSIZ = GETWRD (SYMBOL ($SYSIZ)))
    THEN
	BEGIN
	SKIP (1);
	PUT_HOLE (.OLD_TOP, .SYSIZ);
	END;

    END;					!End of PCBMAP
ROUTINE PUT_PARTITION (PCB_ADDRESS) : NOVALUE =

!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS:
!
!	NONE
!
! IMPLICIT INPUTS:
!
!	NONE
!
! IMPLICIT OUTPUTS:
!
!	NONE
!
! ROUTINE VALUE:
!
!	NONE
!
! SIDE EFFECTS:
!
!	NONE
!
!--

    BEGIN

    LITERAL
	TSK_TYPE = 0,
	SYS_TYPE = 1,
	COM_TYPE = 2,
	DYN_TYPE = 3,
	DRV_TYPE = 4;

    LOCAL
	TYPE,
	BOTTOM,
	SIZE,
	TOP,
	DEVICE_NAME;

    BIND
	STATUS = GETWRD (.PCB_ADDRESS + FL$OFFSET (P_STAT)),
	TCB_ADDRESS = GETWRD (.PCB_ADDRESS + FL$OFFSET (P_TCB)),
	MAIN_PARTITION = .PCB_ADDRESS EQL GETWRD (.PCB_ADDRESS + FL$OFFSET (P_MAIN)),
	SYS_PARTITION = FL$SET (STATUS, PS_SYS),
	BUSY = ((GETBYT (.PCB_ADDRESS + FL$OFFSET (P_BUSY) + 0) AND GETBYT (.PCB_ADDRESS + FL$OFFSET (P_BUSY)
		+ 1)) NEQ 0),
	DISPLAY_TYPE = UPLIT (CH$ASCII ('TASK   '), CH$ASCII ('SYS    '),
	    CH$ASCII('COMMON '), CH$ASCII('DYNAMIC'), CH$ASCII('DRIVER ')
	    ) : VECTOR [5];

    TYPE = (IF MAIN_PARTITION AND SYS_PARTITION THEN SYS_TYPE ELSE IF FL$SET (STATUS, PS_DRV) THEN DRV_TYPE
	ELSE IF NOT FL$SET (STATUS, PS_COM) THEN TSK_TYPE ELSE IF SYS_PARTITION THEN DYN_TYPE ELSE COM_TYPE);
    BOTTOM = GETWRD (.PCB_ADDRESS + FL$OFFSET (P_REL));
    SIZE = GETWRD (.PCB_ADDRESS + FL$OFFSET (P_BLKS));
    TOP = .BOTTOM + .SIZE;

    IF .OLD_TOP LSSU .BOTTOM THEN PUT_HOLE (.OLD_TOP, .BOTTOM);

    OLD_TOP = .TOP;

    IF .TYPE EQL DRV_TYPE
    THEN
	BEGIN
	CH$WCHAR (GETBYT (TCB_ADDRESS + FL$OFFSET (D_NAM) + 0), CH$PTR (DEVICE_NAME, 0));
	CH$WCHAR (GETBYT (TCB_ADDRESS + FL$OFFSET (D_NAM) + 1), CH$PTR (DEVICE_NAME, 1));
	END;

    PUTLN ((IF MAIN_PARTITION THEN 1 ELSE 0),
	(IF .TYPE EQL DRV_TYPE THEN CH$ASCIZ ('   %2R%5S%P00 %P00   %P00%4S%4A %7A   %2A:%+') ELSE CH$ASCIZ (
		'   %2R%5S%P00 %P00   %P00%4S%4A %7A   %2R')),
	(IF NOT MAIN_PARTITION AND SYS_PARTITION THEN 0 ELSE GETWRD (.PCB_ADDRESS + FL$OFFSET (P_NAM) + 0)),
	(IF NOT MAIN_PARTITION AND SYS_PARTITION THEN 0 ELSE GETWRD (.PCB_ADDRESS + FL$OFFSET (P_NAM) + 2)),
	.BOTTOM, .TOP, .SIZE, (IF MAIN_PARTITION THEN CH$ASCII ('MAIN') ELSE CH$ASCII (' SUB')),
	.DISPLAY_TYPE [.TYPE],
	(IF SYS_PARTITION OR BUSY THEN (SELECTONE .TYPE OF
		SET
		[TSK_TYPE] : IF TCB_ADDRESS NEQ 0 THEN GETWRD (TCB_ADDRESS + FL$OFFSET (T_NAM) + 0);
		[DYN_TYPE, COM_TYPE] : GETWRD (.PCB_ADDRESS + FL$OFFSET (P_NAM) + 0);
		[DRV_TYPE] : CH$PTR (DEVICE_NAME);
		[OTHERWISE] : 0;
		TES) ELSE 0),
	(IF SYS_PARTITION OR BUSY THEN (SELECTONE .TYPE OF
		SET
		[TSK_TYPE] : IF TCB_ADDRESS NEQ 0 THEN GETWRD (TCB_ADDRESS + FL$OFFSET (T_NAM) + 2);
		[DYN_TYPE, COM_TYPE] : GETWRD (.PCB_ADDRESS + FL$OFFSET (P_NAM) + 2);
		[OTHERWISE] : 0;
		TES) ELSE 0));
    END;					!End of PUT_PARTITION
ROUTINE PUT_HOLE (BOTTOM, TOP) : NOVALUE =

!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS:
!
!	NONE
!
! IMPLICIT INPUTS:
!
!	NONE
!
! IMPLICIT OUTPUTS:
!
!	NONE
!
! ROUTINE VALUE:
!
!	NONE
!
! SIDE EFFECTS:
!
!	NONE
!
!--

    BEGIN
    PUTLN (0, CH$ASCIZ ('%14S%P00 %P00   %P00%5S<HOLE>'), .BOTTOM, .TOP, (.TOP - .BOTTOM));
    END;					!End of PUT_HOLE
END						!End of module

ELUDOM