devel/misc/unknown/src/XLIST.ELA

Raw file
Back to index

PACKET xlist DEFINES xlist :          (* M. Staubermann, 1.8.0 861203 *)
                                      (* Heapsize korrigiert   870711 *) 
DATASPACE VAR ds, act ;
 
PROC x list : 
 ds := nilspace ; 
 FILE VAR f := sequentialfile (output, ds) ; 
 headline (f, "Dataspaces:" + text (dataspaces) + 
              "  Speicher:" + text (storage (myself))) ; 
 disablestop ;
 xlist (f) ; 
 show (f) ; 
 forget (ds) ; 
ENDPROC x list ; 
 
PROC x list (FILE VAR f) : 
 INT VAR i, acttype, heapsiz, seiten ;
 TEXT VAR name, status ;
 FILE VAR f2 ;
 ROW 255 STRUCT (TEXT name, status) VAR names ;

 enablestop ;
 FOR i FROM 1 UPTO 255 REP 
  names (i).name := "" ; 
  names (i).status := "" 
 PER ; 
 begin list ; 
 get list entry (name, status) ; 
 WHILE name <> "" REP 
  makeid (old (name)) ; 
  names (dsnr).name := name ; 
  names (dsnr).status := status ;
  get list entry (name, status) 
 PER ;
 maxlinelength (f, 1000) ;
 putline (f, "Datum  Status Ds    kB  Type HeapLines Segs S/L ""Name""/'Headline'");
 line (f) ;
 putline (f, "               4 " + text ((pages (4, myself)+1) DIV 2, 5) +
             "        " + text (heapsize, 3) + "    -    -  -") ; 
 disablestop ;
 FOR i FROM 5 UPTO 255 REP 
  cout (i) ;
  makeid (i) ;
  act := reveal ds ; 
  IF iserror
   THEN clearerror
   ELSE name := names (i).name ; 
        status := names (i).status ; 
        acttype := type (act) ;
        names (i).name := "" ; 
        names (i).status := "" ;
        put (f,  stat + id + " " + speicher + " " + typ + " " + heap) ;
        putline (f, zeilen + " " + segmente + " " + sl percent + dsname) ; 
  FI ; 
  forget (act) ; 
  IF iserror THEN puterror ; clearerror FI
 PER . 
 
dsname : 
 IF name = "" 
    THEN IF act type = 1003 
            THEN " '" + headline (f2) + "'" 
            ELSE ""
         FI
    ELSE " """ + name + """" 
 FI . 
 
stat : 
 IF status = "" 
    THEN "             " 
    ELSE status 
 FI . 
 
typ: 
 text (act type, 5) .
 
id : 
 text (i, 3) .
 
speicher : 
 seiten := ds pages (act) ;
 text ((seiten+1) DIV 2, 5) . 
 
zeilen : 
 IF act type <> 1003 THEN "   -" 
 ELSE f2 := sequentialfile (modify, act) ; 
      text (lines (f2), 4) 
 FI . 
 
segmente : 
 IF act type <> 1003 THEN "   -" 
 ELSE INT CONST segs :: segments (f2) ; 
      text (segs, 4) 
 FI . 
 
sl percent: 
 IF act type <> 1003 THEN " - "
 ELIF segs = 1 THEN "   " 
 ELSE text (int (real (segs) * 100.0 / real (lines (f2))+0.5), 2) + "%" 
 FI . 
 
heap :
 heapsiz:= heapsize (act) * 2 ;
 IF heapsiz >= 2046 
    THEN "   -" 
 ELIF act type = 1003 
    THEN IF heapsiz < 192 
            THEN "   0" 
            ELSE text ((heapsiz-192) DIV 2, 4)
         FI 
 ELSE INT CONST next page :: next ds page (act, seiten) ; 
      IF next page < 0 
         THEN "   0" 
      ELIF heapsiz = next page 
         THEN "   1" 
      ELSE text ((heapsiz + 1 - next page) DIV 2, 4)
      FI 
 FI .

ENDPROC x list ; 
 
PROC make id (DATASPACE CONST ds) : 
 BOUND INT VAR i := ds 
ENDPROC make id ; 
 
INT PROC dsnr : 
 INT VAR id ; 
 id AND 255
ENDPROC dsnr ; 
 
PROC makeid (INT CONST nr) : 
 INT VAR dsid := nr + 256 * index (myself) 
ENDPROC makeid ; 
 
DATASPACE PROC reveal ds :
 DATASPACE VAR ds ; ds 
ENDPROC reveal ds ;
 
INT PROC pages (INT CONST dsnr, TASK CONST task) : 
 EXTERNAL 88 
ENDPROC pages ; 
 
ENDPACKET x list ;