
PROC dum$display_segment, display_segment, diss (
  segment_number, sn: integer
  bytes, b: integer = 256
  exchange, e: integer or key monitor m job j = job
  status)

  if $value_kind(exchange) = 'INTEGER' then
    rma = $value(exchange)
  elseif $substr($string($value(exchange)) 1 1) = 'M' then
    rma = $mr(mps)
  else
    rma = $mr(jps)
  ifend
  sta = $pr(sta 0 rma)
  bytes = $value(bytes)
  IF $specified(segment_number) THEN
      sn = $value(segment_number)
      segi = $mem(sta+sn*8 4 0 0 rma)
      IF segi <> 0 THEN
        segl = $strrep(segi+100000000(16) 16)
        snd = $strrep(sn 10)
        snd = $substr(' ' 1 4-$strlen(snd)) // snd
        snh = $strrep(sn 16)
        snh = $substr(' ' 1 4-$strlen(snh)) // snh
        disv snd//snh//'   '//$substr(segl 2 2)//'  r=('//$substr(segl 4 1)//' '//$substr(segl 5 1)//')  asid='//$substr(segl 6 4)
        asti = $mem(6+sta+sn*8 2 0 0 rma)
        disv ' ast index '//$strrep(asti 16)//'(16)'
        segi = $mem(sta+sn*8 1 0 0 rma)
        segl = $strrep(segi 2)
        segl = $substr('00000000' 1 8-$strlen(segl))//segl
        vl = $integer($substr(segl 1 2)//'(2)')
        xp = $integer($substr(segl 3 2)//'(2)')
        rp = $integer($substr(segl 5 2)//'(2)')
        wp = $integer($substr(segl 7 2)//'(2)')
        create_variables (vls xps rps wps) k=string d=0..3
        vls(0) = 'invalid entry'
        vls(1) = '(reserved)'
        vls(2) = 'regular segment'
        vls(3) = 'cache by-pass segment'
        xps(0) = 'nonexecutable segment'
        xps(1) = 'nonprivileged executable segment'
        xps(2) = 'local privileged executable segment'
        xps(3) = 'global privileged executable segment'
        rps(0) = 'nonreadable segment'
        rps(1) = 'read controlled by key/lock'
        rps(2) = 'read not controlled by key/lock'
        rps(3) = 'binding section segment - read not controlled by key/lock'
        wps(0) = 'nonwritable segment'
        wps(1) = 'write controlled by key/lock'
        wps(2) = 'write not controlled by key/lock'
        wps(3) = '(reserved)'
        putl ' vl = '//vls(vl)
        putl ' xp = '//xps(xp)
        putl ' rp = '//rps(rp)
        putl ' wp = '//wps(wp)
      IFEND
    dism a=sn*100000000(16) b=$value(bytes) e=rma
  ELSE
    words = bytes
    IF NOT $specified(bytes) THEN
      words = $mem(rma+128 2 rma 0 rma)
    IFEND
    FOR i = 0 TO words - 1 DO
      segi = $mem(sta+i*8 4 0 0 rma)
      IF segi <> 0 THEN
        segl = $strrep(segi+100000000(16) 16)
        snd = $strrep(i 10)
        snd = $substr(' ' 1 4-$strlen(snd)) // snd
        snh = $strrep(i 16)
        snh = $substr(' ' 1 4-$strlen(snh)) // snh
        disv snd//snh//'   '//$substr(segl 2 2)//'  r=('//$substr(segl 4 1)//' '//$substr(segl 5 1)//')  asid='//$substr(segl 6 4)
      IFEND
    FOREND
  IFEND

PROCEND dum$display_segment
