;***************************************************************************;
;                                                                           ;
;                    Dump another job's memory partition                    ;
;                           By David F. Pallmann                            ;
;                                                                           ;
;***************************************************************************;

       OBJNAM  MEMDMP.LIT

       MAYCREF
       SEARCH  SYS
       SEARCH  SYSSYM
       SEARCH  TRM
       SEARCH  CRT
       CREF

       VMAJOR=0
       VEDIT=100.                      ;24-Apr-83 DFP creation
       PHDR    -1,0,PH$REE!PH$REU

;equates

       IMP=A5                          ;impure area index

;memory management definitions

       MM$SIZ=0                        ;memory module size word
       MM$FLG=4                        ;memory module flags
       MM$NAM=6                        ;memory module filename
       MM.HDR=14                       ;module header size

;macros

DEFINE  BITW    SRC,DST
       MOVW    SRC,D7
       ANDW    DST,D7
       ENDM

;impure area

OFINI
OFDEF   JNAME,4                         ;job name to dump
OFDEF   MCOUNT,4                        ;module dump count
OFDEF   BUFFER,12.                      ;RAD50 unpacking buffer
OFDEF   MEMFRE,4                        ;free memory count
OFSIZ   IMPSIZ

;initialization

INITIA: GETIMP  IMPSIZ,IMP,EXIT
       MOV     IMP,A0
       MOVW    #[IMP],-(A0)
       MOVW    #[DMP],-(A0)
       MOVW    #[MEM],-(A0)
       CLR     MCOUNT(IMP)

;scan cmd line for job name

SCNLIN: BYP
       LIN
       BEQ     100$
       FILNAM  JNAME(IMP),XXX
       MOV     JOBTBL,A0
       BR      110$

100$:   MOV     JOBCUR,A1
       BR      SCNJOB

110$:   MOV     (A0)+,D0
       BEQ     110$
       BMI     BADJOB
       MOV     D0,A1
       CMM     JOBNAM(A1),JNAME(IMP)
       BNE     110$

;scan job's partition

SCNJOB: MOV     JOBBAS(A1),A0
       MOV     JOBSIZ(A1),MEMFRE(IMP)
       BR      MODULE

;user entered non-existant job name

BADJOB: TYPESP  ?no such job
       JMP     EXIT

;list module or quit

MODULE: CTRLC   EXIT
       TST     MM$SIZ(A0)              ;end of partition?
       JEQ     DONE                    ; yes

MDLNAM: LEA     A1,MM$NAM(A0)           ;set up for RAD50 unpacking
       LEA     A2,BUFFER(IMP)
       UNPACK                          ;unpack filename
       UNPACK
       MOVB    #40,(A2)+               ;embed space in text
       UNPACK                          ;unpack extension
       MOVB    #40,(A2)+               ;embed space in text
       CLRB    @A2

       BITW    #FIL,MM$FLG(A0)         ;FGD bit set?
       BEQ     100$
       HIGH
       BR      110$

100$:   LOW

110$:   TTYL    BUFFER(IMP)

MDLSIZ: MOV     MM$SIZ(A0),D1           ;output module size
       SUB     #MM.HDR,D1              ;correct size
       DCVT    7,OT$TRM!OT$ZER!OT$TSP

MDLBAS: MOV     A0,D1                   ;output module base
       ADD     #MM.HDR,D1
       OCVT    10,OT$TRM!OT$TSP

       BITW    #FIL,MM$FLG(A0)         ;FIL bit set?
       BEQ     100$                    ; no
       TYPESP  FIL                     ; yes

100$:   BITW    #FGD,MM$FLG(A0)         ;FGD bit set?
       BEQ     110$                    ; no
       TYPESP  FGD                     ; yes

110$:   BITW    #LOK,MM$FLG(A0)         ;LOK bit set?
       BEQ     120$                    ; no
       TYPESP  LOK                     ; yes

120$:   CMPW    MM$NAM+4(A0),#[LIT]     ;.LIT file?
       BNE     160$                    ; no
       MOVW    MM.HDR+10(A0),D0        ; yes - load program attributes word

       BITW    #PH$REE,D0              ;reentrant?
       BEQ     130$                    ; no
       TYPESP  REE                     ; yes

130$:   BITW    #PH$REU,D0              ;reusable?
       BEQ     140$                    ; no
       TYPESP  REU                     ; yes

140$:   BITW    #PH$L12,D0              ;requires [1,2] log?
       BEQ     150$                    ; no
       TYPESP  L12                     ; yes

150$:   BITW    #PH$OPR,D0              ;requires OPR: log?
       BEQ     160$                    ; no
       TYPESP  OPR                     ; yes

160$:   CRLF

       MOV     MM$SIZ(A0),D0
       SUB     D0,MEMFRE(IMP)

       INC     MCOUNT(IMP)             ;update module count
       ADD     MM$SIZ(A0),A0           ;advance to next module
       JMP     MODULE

DONE:   HIGH
       TYPE    <free       >
       MOV     MEMFRE(IMP),D1
       SUB     #2,D1
       DCVT    7,OT$TRM!OT$ZER!OT$TSP
       MOV     A0,D1
       ADD     #2,D1
       OCVT    10,OT$TRM
       CRLF

EXIT:   HIGH
       CRLF
       EXIT

       END