COMPILATION LISTING OF SEGMENT disk_usage_stat Compiled by: Multics PL/I Compiler, Release 27d, of October 11, 1982 Compiled at: Honeywell LISD Phoenix, System M Compiled on: 11/12/82 1258.4 mst Fri Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* * Copyright (c) 1972 by Massachusetts Institute of * 6* * Technology and Honeywell Information Systems, Inc. * 7* * * 8* *********************************************************** */ 9 10 11 disk_usage_stat: proc; 12 13 /* program to do some disk statistics 14* THVV 15* Fixed up by R. Holmsedt and C. Hornig, September 1979. 16* */ 17 18 dcl path char (168), /* root of tree */ 19 level fixed bin, /* current depth relative to root. */ 20 ctime char (24), 21 (co, dp) char (128), /* titles for report */ 22 junk char (1), 23 (i, j, k) fixed bin, 24 (t1, t2, t3) fixed bin, 25 half fixed bin, /* Half the number of records. for median ages. */ 26 rolder (0: 90) fixed bin, 27 folder (0: 90) fixed bin, 28 nxt_midnight fixed bin (71), 29 slp ptr, 30 lth fixed bin (24), 31 NL char (1) int static init (" 32 "), 33 kk fixed bin, 34 gap fixed bin, 35 ap ptr, 36 al fixed bin, 37 bchr char (al) unaligned based (ap), 38 ec fixed bin (35); 39 40 dcl (nsegs (0: 15), 41 ndirs (0: 15), 42 nlinks (0: 15), 43 nrecs (0: 15), 44 ndrecs (0: 15), 45 nnames (0: 15)) fixed bin, 46 (mscale, maxlv) fixed bin, 47 nscale fixed bin, 48 urage (0: 90) fixed bin, 49 ufage (0: 90) fixed bin, 50 mrage (0: 90) fixed bin, 51 mfage (0: 90) fixed bin, 52 max_seg_size fixed bin, 53 rsize (0: 256) fixed bin, 54 n_ents_w_i_names (0: 2048) fixed bin, 55 n_dirs_w_i_names (0: 2048) fixed bin, 56 tnnames fixed bin, 57 max_names_in_dir fixed bin, 58 max_names_on_ent fixed bin, 59 current_pathname char (168), 60 path_with_max_names char (168), 61 dir_with_max_names char (168), 62 bigseg_name char (168), 63 bigdir fixed bin, /* Size of biggest dir, in records. */ 64 bigdir_name char (168), 65 lrm fixed bin, /* Age of least-recently-modified seg */ 66 lrm_segname char (168), 67 lru fixed bin, /* Age of least-recently-used seg */ 68 lru_segname char (168), 69 pending_names (0: 15) fixed bin, /* Pushdown list */ 70 savlvl fixed bin; /* Level in pdl */ 71 72 dcl has_starstar bit (1) init ("0"b), 73 starname_name (128) char (32), 74 starname_type (128) fixed bin, 75 starname_recs (128) fixed bin, 76 starname_fils (128) fixed bin, 77 starname_lnks (128) fixed bin, 78 nsfx fixed bin; 79 80 dcl xxx char (120) int static init ((120)"x"); 81 82 dcl datebin_$this_midnight entry (fixed bin (71)), 83 cu_$arg_ptr entry (fixed bin, ptr, fixed bin, fixed bin (35)), 84 system_info_$titles entry (char (*), char (*), char (*), char (*)), 85 sweep_disk_ entry (char (168), entry), 86 absolute_pathname_ entry (char (*), char (*), fixed bin (35)), 87 check_star_name_$entry entry (char (*), fixed bin (35)), 88 match_star_name_ entry (char (*), char (*), fixed bin (35)), 89 (ioa_, ioa_$rsnnl) entry options (variable), 90 com_err_ entry options (variable), 91 date_time_ entry (fixed bin (71), char (*)), 92 hcs_$initiate_count entry (char (*), char (*), char (*), fixed bin (24), fixed bin (2), ptr, fixed bin (35)), 93 get_wdir_ entry () returns (char (168)), 94 hcs_$terminate_noname entry (ptr, fixed bin (35)); 95 96 dcl bcs char (262144) based (slp); 97 98 dcl (binary, clock, divide, substr, addr, null, index, fixed) builtin; 99 100 /* ======================================================= */ 101 102 call cu_$arg_ptr (1, ap, al, ec); 103 if ec ^= 0 then path = ">"; 104 else do; 105 call absolute_pathname_ (bchr, path, ec); 106 if ec ^= 0 then do; 107 call com_err_ (ec, "disk_usage_stat", "^a", bchr); 108 return; 109 end; 110 end; 111 112 call datebin_$this_midnight (nxt_midnight); 113 114 bigdir, 115 lrm, lru, 116 mscale, 117 maxlv, savlvl, 118 nsegs (*), nlinks (*), ndirs (*), 119 pending_names (*), 120 nrecs (*), ndrecs (*), nnames (*), 121 max_seg_size, 122 rsize (*), 123 urage (*), mrage (*), ufage (*), mfage (*), 124 n_ents_w_i_names (*), n_dirs_w_i_names (*), 125 starname_recs (*), starname_fils (*), starname_lnks (*), 126 tnnames, 127 max_names_in_dir, 128 max_names_on_ent = 0; 129 130 nsfx = 0; 131 call hcs_$initiate_count ((get_wdir_ ()), "starname_list", "", lth, 0, slp, ec); 132 if slp = null then go to no_sl; 133 lth = divide (lth, 9, 17, 0); 134 kk = 1; 135 do k = 1 to lth while (nsfx < 100); 136 if substr (bcs, k, 1) = NL then do; 137 if substr (bcs, kk, 1) = "&" then go to skipline; /* Skip comment. */ 138 nsfx = nsfx + 1; 139 starname_name (nsfx) = substr (bcs, kk, k-kk); 140 call check_star_name_$entry (starname_name (nsfx), ec); 141 if ec >= 0 & ec <= 2 142 then starname_type (nsfx) = ec; 143 else do; 144 call com_err_ (ec, "disk_usage_stat", "^a", starname_name (nsfx)); 145 starname_type (nsfx) = 0; 146 end; 147 if starname_type (nsfx) = 2 then has_starstar = "1"b; 148 skipline: kk = k + 1; 149 end; 150 end; 151 call hcs_$terminate_noname (slp, ec); 152 no_sl: if ^has_starstar then do; 153 nsfx = nsfx + 1; 154 starname_name (nsfx) = "**"; 155 starname_type (nsfx) = 2; 156 end; 157 158 /* Now, go to work. Call disk sweeper program */ 159 160 call sweep_disk_ (path, counter); 161 162 /* On return from sweep of hierarchy, print the report. */ 163 164 do while (savlvl > 0); 165 i = pending_names (savlvl); 166 n_dirs_w_i_names (i) = n_dirs_w_i_names (i) + 1; 167 if i > max_names_in_dir then do; 168 max_names_in_dir = i; 169 call set_dwmn (); 170 end; 171 savlvl = savlvl - 1; 172 end; 173 174 call date_time_ ((clock ()), ctime); 175 176 call system_info_$titles (junk, junk, co, dp); 177 call ioa_ ("^|^a^/^/^-^a", co, dp); 178 call ioa_ ("^/Multics disk usage for ""^a"" - ^a", path, ctime); 179 180 call ioa_ ("^/Depth^3xSegs^3xDirs Links^3xRecs Dir Recs Names^/"); 181 do i = 0 to maxlv; 182 call ioa_ ("^5d ^6d ^6d ^6d ^6d ^9d ^6d", i, 183 nsegs (i), ndirs (i), nlinks (i), nrecs (i), ndrecs (i), nnames (i)); 184 if i > 0 then do; 185 nsegs (0) = nsegs (0) + nsegs (i); 186 ndirs (0) = ndirs (0) + ndirs (i); 187 nlinks (0) = nlinks (0) + nlinks (i); 188 nrecs (0) = nrecs (0) + nrecs (i); 189 ndrecs (0) = ndrecs (0) + ndrecs (i); 190 nnames (0) = nnames (0) + nnames (i); 191 end; 192 end; 193 call ioa_ ("----- ----- ----- ----- ----- -------- -----"); 194 call ioa_ ("Total ^6d ^6d ^6d ^6d ^9d ^6d", 195 nsegs (0), ndirs (0), nlinks (0), nrecs (0), ndrecs (0), nnames (0)); 196 197 if nsegs (0) = 0 then do; 198 call ioa_ ("^/No segments exist for ""^a""", path); 199 end; 200 else 201 call ioa_ ("^/^10xAverage segment size:^7x^7.1f records", (1e0*nrecs (0))/nsegs (0)); 202 if ndirs (0) = 0 then do; 203 call ioa_ ("^/No directories exist under ""^a""", path); 204 go to nodirs; 205 end; 206 else 207 call ioa_ ("^10xAverage directory size:^5x^7.1f records", (1e0*ndrecs (0))/ndirs (0)); 208 call ioa_ ("^10xAverage segments/directory: ^7.1f", (1e0*nsegs (0))/ndirs (0)); 209 call ioa_ ("^10xAverage links/directory:^4x^7.1f", (1e0*nlinks (0))/ndirs (0)); 210 call ioa_ ("^10xAverage names/directory:^4x^7.1f", (1e0*nnames (0))/ndirs (0)); 211 nodirs: 212 half = divide (nsegs (0), 2, 17, 0); /* Get half the number of segments. */ 213 t1, t2, t3 = 0; 214 do i = 90 to 0 by -1; 215 t1, rolder (i) = t1 + urage (i); 216 t2, folder (i) = t2 + ufage (i); 217 if t2 > half then if t3 = 0 then t3 = i; 218 end; 219 if nsegs (0) = 0 then goto fini; 220 else 221 call set_scale (100, t1, nscale); 222 call ioa_ ("^/Distribution by date of last reference"); 223 call ioa_ ("^/^10xMedian number of days since last reference is ^d.", t3); 224 if lru = 0 then lru_segname = "(none)"; /* puts out junk otherwise */ 225 call ioa_ ("^10xLeast recently used segment (^d days) is ^a", lru, lru_segname); 226 call ioa_ ("^/Age^3xSegs Older^3xRecs Older Scale: one ""x"" is ^d records", nscale); 227 do i = 0 to 90; 228 call ioa_ ("^3d^7d^7d^7d^7d ^a", i, ufage (i), folder (i), urage (i), rolder (i), 229 substr (xxx, 1, divide (rolder (i)+nscale-1, nscale, 17, 0))); 230 end; 231 232 t1, t2, t3 = 0; 233 do i = 90 to 0 by -1; 234 t1, rolder (i) = t1 + mrage (i); 235 t2, folder (i) = t2 + mfage (i); 236 if t2 > half then if t3 = 0 then t3 = i; 237 end; 238 call set_scale (100, t1, nscale); 239 call head; 240 call ioa_ ("^/Distribution by date of last modification"); 241 call ioa_ ("^/^10xMedian number of days since last modification is ^d.", t3); 242 if lrm = 0 then lrm_segname = "(none)"; /* puts out junk if =0 days */ 243 call ioa_ ("^10xLeast recently modified segment (^d days) is ^a", lrm, lrm_segname); 244 call ioa_ ("^/Age^3xSegs Older^3xRecs Older Scale: one ""x"" is ^d records", nscale); 245 do i = 0 to 90; 246 call ioa_ ("^3d^7d^7d^7d^7d ^a", i, mfage (i), folder (i), mrage (i), rolder (i), 247 substr (xxx, 1, divide (rolder (i)+nscale-1, nscale, 17, 0))); 248 end; 249 250 call head; 251 call ioa_ ("^/Distribution by segment size: ^d records total", nrecs (0)); 252 call ioa_ ("^/^10xLargest segment (^d recs) is ^a", max_seg_size, bigseg_name); 253 if ndirs (0) = 0 254 then call ioa_ ("^/No other directories exist under ""^a""", path); 255 else call ioa_ ("^10xLargest directory (^d recs) is ^a", bigdir, bigdir_name); 256 call set_scale (120, mscale, mscale); 257 call ioa_ ("^/ K Count Scale: one ""x"" is ^d segments", mscale); 258 gap = 0; 259 do i = 0 to max_seg_size; 260 if rsize (i) = 0 then do; /* Check for gap. */ 261 gap = gap + 1; 262 go to sgap1; 263 end; 264 if gap > 0 then do; 265 if gap < 4 then do j = (i-gap) to (i-1); 266 call ioa_ ("^4d^7d", j, 0); 267 end; 268 else call ioa_ ("^4x(^d)", gap); 269 gap = 0; 270 end; 271 call ioa_ ("^4d^7d ^a", i, rsize (i), /* print row of x's */ 272 substr (xxx, 1, divide (rsize (i)+mscale-1, mscale, 17, 0))); 273 sgap1: end; 274 275 call head; 276 call ioa_ ("^/Distribution by segment name"); 277 call ioa_ ("^/Name^30xSegs^3xRecs Links^/"); 278 t1, t2, t3 = 0; 279 do i = 1 to nsfx; 280 call ioa_ ("^32a^6d^7d^7d", starname_name (i), starname_fils (i), starname_recs (i), starname_lnks (i)); 281 t1 = t1 + starname_fils (i); 282 t2 = t2 + starname_recs (i); 283 t3 = t3 + starname_lnks (i); 284 end; 285 call ioa_ ("^/TOTAL^26x^7d^7d^7d", t1, t2, t3); 286 287 call head; 288 call ioa_ ("^/Entry distribution by number of names: ^d entries total", nsegs (0) + ndirs (0) + nlinks (0)); 289 call ioa_ ("^/^10xEntry with most names (^d) is ^a", max_names_on_ent, path_with_max_names); 290 t1 = 0; 291 do i = 1 to max_names_on_ent; 292 if n_ents_w_i_names (i) > t1 then t1 = n_ents_w_i_names (i); 293 end; 294 call set_scale (100, t1, nscale); 295 call ioa_ ("^/Nnames Nents Scale: one ""x"" is ^d entries", nscale); 296 gap = 0; 297 do i = 1 to max_names_on_ent; 298 if n_ents_w_i_names (i) = 0 then do; /* Check for gap. */ 299 gap = gap + 1; 300 go to sgap2; 301 end; 302 if gap > 0 then do; 303 if gap < 4 then do j = (i-gap) to (i-1); 304 call ioa_ ("^6d^7d", j, 0); 305 end; 306 else call ioa_ ("^6x(^d)", gap); 307 gap = 0; 308 end; 309 call ioa_ ("^6d^7d ^a", i, n_ents_w_i_names (i), 310 substr (xxx, 1, divide (n_ents_w_i_names (i)+nscale-1, nscale, 17, 0))); 311 sgap2: end; 312 313 call head; 314 call ioa_ ("^/Directory distribution by number of names: ^d directories total", ndirs (0)); 315 call ioa_ ("^/^10xDirectory containing most names (^d) is ^a", max_names_in_dir, dir_with_max_names); 316 t1, t2 = 0; 317 do i = 1 to max_names_in_dir; /* Empty directories are not scanned. */ 318 if t1 < n_dirs_w_i_names (i) then t1 = n_dirs_w_i_names (i); 319 t2 = t2 + n_dirs_w_i_names (i); 320 end; 321 n_dirs_w_i_names (0) = ndirs (0) - t2; 322 if t1 < n_dirs_w_i_names (0) then t1 = n_dirs_w_i_names (0); 323 call set_scale (100, t1, nscale); 324 if ndirs (0) = 0 then goto sgap; /* attempt to access beyond end of stack if no dirs */ 325 else 326 call ioa_ ("^/Nnames Ndirs Scale: one ""x"" is ^d directories", nscale); 327 gap = 0; 328 do i = 0 to max_names_in_dir; 329 if n_dirs_w_i_names (i) = 0 then do; /* Check for gap. */ 330 gap = gap + 1; 331 go to sgap; 332 end; 333 if gap > 0 then do; 334 if gap < 4 then do j = (i-gap) to (i-1); 335 call ioa_ ("^6d^7d", j, 0); 336 end; 337 else call ioa_ ("^6x(^d)", gap); 338 gap = 0; 339 end; 340 call ioa_ ("^6d^7d ^a", i, n_dirs_w_i_names (i), 341 substr (xxx, 1, divide (n_dirs_w_i_names (i)+nscale-1, nscale, 17, 0))); 342 sgap: end; 343 344 return; 345 346 /* -------------------------------------------------------- */ 347 348 counter: proc (sdn, sen, lvl, een, bptr, nptr); 349 350 dcl sdn char (168), /* superior dir name */ 351 sen char (32), /* dirname */ 352 lvl fixed bin, /* distance from root */ 353 een char (32), /* entry name */ 354 bptr ptr, /* ptr to info structure */ 355 nptr ptr; /* ptr to names structure */ 356 357 dcl seg_length fixed bin, /* length of seg in records */ 358 no_of_names fixed bin, /* number of names on segment */ 359 nnames_in_dir fixed bin, /* number of names in a directory */ 360 ndays fixed bin, /* number of days since use or mod */ 361 date_temp fixed bin (71); /* date temp */ 362 dcl ecc fixed bin (35); 363 364 dcl 1 branch based (bptr) aligned, /* thing returned by star_long */ 365 2 type bit (2) unal, 366 2 nname bit (16) unal, 367 2 nindex bit (18) unal, 368 2 dtm bit (36) unal, 369 2 dtu bit (36) unal, 370 2 mode bit (5) unal, 371 2 pad bit (13) unal, 372 2 records bit (18) unal; 373 374 level = lvl; /* save in global. */ 375 if lvl > maxlv then maxlv = lvl; 376 no_of_names = fixed (branch.nname, 16); 377 nnames (lvl) = nnames (lvl) + no_of_names; 378 n_ents_w_i_names (no_of_names) = n_ents_w_i_names (no_of_names) + 1; 379 do while (lvl < savlvl); 380 nnames_in_dir = pending_names (savlvl); 381 n_dirs_w_i_names (nnames_in_dir) = n_dirs_w_i_names (nnames_in_dir) + 1; 382 if nnames_in_dir > max_names_in_dir then do; 383 max_names_in_dir = nnames_in_dir; 384 call set_dwmn (); 385 end; 386 pending_names (savlvl) = 0; 387 savlvl = savlvl - 1; 388 end; 389 savlvl = lvl; 390 pending_names (savlvl) = pending_names (savlvl) + no_of_names; 391 call ioa_$rsnnl ("^a^[>^]^a^[>^]^a", current_pathname, (0), sdn, (sdn ^= ""), sen, (sen ^= ""), een); 392 if no_of_names > max_names_on_ent then do; 393 max_names_on_ent = no_of_names; 394 path_with_max_names = current_pathname; 395 end; 396 397 if branch.type = "00"b then do; /* link? */ 398 nlinks (lvl) = nlinks (lvl) + 1; 399 end; 400 else if branch.type = "01"b then do; /* seg? */ 401 nsegs (lvl) = nsegs (lvl) + 1; 402 seg_length = fixed (records, 18); 403 if seg_length > max_seg_size then do; /* Biggest? */ 404 max_seg_size = seg_length; 405 bigseg_name = current_pathname; 406 end; 407 nrecs (lvl) = nrecs (lvl) + seg_length; 408 rsize (seg_length) = rsize (seg_length) + 1; 409 if rsize (seg_length) > mscale then mscale = rsize (seg_length); 410 date_temp = binary (branch.dtu) * 1e16b; 411 ndays = divide (nxt_midnight - date_temp, 86400000000, 17, 0); 412 if ndays < 0 then ndays = 0; /* Correct for oprs running system with bad clock. */ 413 if ndays < 5000 then if ndays > lru then do; /* Oldest (no segment is 13 years old) */ 414 lru = ndays; 415 lru_segname = current_pathname; 416 end; 417 if ndays > 90 then ndays = 90; 418 ufage (ndays) = ufage (ndays) + 1; 419 urage (ndays) = urage (ndays) + seg_length; 420 date_temp = binary (branch.dtm) * 1e16b; 421 ndays = divide (nxt_midnight - date_temp, 86400000000, 17, 0); 422 if ndays < 0 then ndays = 0; /* No science-fiction */ 423 if ndays < 5000 then if ndays > lrm then do; /* Oldest? */ 424 lrm = ndays; 425 lrm_segname = current_pathname; 426 end; 427 if ndays > 90 then ndays = 90; 428 mfage (ndays) = mfage (ndays) + 1; 429 mrage (ndays) = mrage (ndays) + seg_length; 430 end; 431 else if branch.type = "10"b then do; /* dir? */ 432 seg_length = fixed (records, 16); 433 if seg_length > bigdir then do; /* Biggest? */ 434 bigdir = seg_length; 435 bigdir_name = current_pathname; 436 end; 437 ndrecs (lvl) = ndrecs (lvl) + seg_length; 438 ndirs (lvl) = ndirs (lvl) + 1; 439 end; 440 441 do k = 1 to nsfx; /* Classify by type of name */ 442 if starname_type (k) = 0 then ecc = binary (een ^= starname_name (k)); 443 else if starname_type (k) = 2 then ecc = 0; 444 else call match_star_name_ (een, starname_name (k), ecc); 445 if ecc = 0 then do; 446 if branch.type = "01"b then do; 447 starname_recs (k) = starname_recs (k) + seg_length; 448 starname_fils (k) = starname_fils (k) + 1; 449 end; 450 else if branch.type = "00"b then starname_lnks (k) = starname_lnks (k) + 1; 451 go to sf1; 452 end; 453 end; 454 sf1: ; 455 456 end counter; 457 458 set_scale: proc (Page_width, Line_max, Scale); 459 460 dcl (Page_width, Line_max, Scale) fixed bin; 461 dcl (t1, t2, t3) fixed bin; 462 463 Scale = divide (Line_max, Page_width, 35, 0); 464 t1, t2 = 1; 465 do while (Scale >= t1); 466 t3 = divide (t1, t2, 17, 0); 467 if t3 = 1 then t1 = 2 * t2; 468 else if t3 = 2 then t1 = 5 * t2; 469 else t1, t2 = 10 * t2; 470 end; 471 Scale = t1; 472 473 end set_scale; 474 475 set_dwmn: proc (); 476 477 dcl (i, j, k) fixed bin; 478 479 k = savlvl - level; /* Going to strip of this many >'s */ 480 j = 168; 481 do while (k > 0); 482 do i = j to 1 by -1 while (substr (current_pathname, i, 1) ^= ">"); end; 483 j = i-1; 484 k = k - 1; 485 end; 486 dir_with_max_names = substr (current_pathname, 1, j); 487 488 end set_dwmn; 489 490 head: proc; 491 492 call ioa_ ("^|Disk usage for ""^a"" - ^a", path, ctime); 493 494 end; 495 496 fini: 497 end disk_usage_stat; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/12/82 1045.3 disk_usage_stat.pl1 >spec>on>11/12/82>disk_usage_stat.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. Line_max parameter fixed bin(17,0) dcl 460 ref 458 463 NL 005136 constant char(1) initial unaligned dcl 18 ref 136 Page_width parameter fixed bin(17,0) dcl 460 ref 458 463 Scale parameter fixed bin(17,0) dcl 460 set ref 458 463* 465 471* absolute_pathname_ 000020 constant entry external dcl 82 ref 105 al 000572 automatic fixed bin(17,0) dcl 18 set ref 102* 105 105 107 107 ap 000570 automatic pointer dcl 18 set ref 102* 105 107 bchr based char unaligned dcl 18 set ref 105* 107* bcs based char(262144) unaligned dcl 96 ref 136 137 139 bigdir 012372 automatic fixed bin(17,0) dcl 40 set ref 114* 255* 433 434* bigdir_name 012373 automatic char(168) unaligned dcl 40 set ref 255* 435* bigseg_name 012320 automatic char(168) unaligned dcl 40 set ref 252* 405* binary builtin function dcl 98 ref 410 420 442 bptr parameter pointer dcl 350 ref 348 376 397 400 402 410 420 431 432 446 450 branch based structure level 1 dcl 364 check_star_name_$entry 000022 constant entry external dcl 82 ref 140 clock builtin function dcl 98 ref 174 co 000161 automatic char(128) unaligned dcl 18 set ref 176* 177* com_err_ 000032 constant entry external dcl 82 ref 107 144 ctime 000153 automatic char(24) unaligned dcl 18 set ref 174* 178* 492* cu_$arg_ptr 000012 constant entry external dcl 82 ref 102 current_pathname 012122 automatic char(168) unaligned dcl 40 set ref 391* 394 405 415 425 435 482 486 date_temp 000104 automatic fixed bin(71,0) dcl 357 set ref 410* 411 420* 421 date_time_ 000034 constant entry external dcl 82 ref 174 datebin_$this_midnight 000010 constant entry external dcl 82 ref 112 dir_with_max_names 012246 automatic char(168) unaligned dcl 40 set ref 315* 486* divide builtin function dcl 98 ref 133 211 228 228 246 246 271 271 309 309 340 340 411 421 463 466 dp 000221 automatic char(128) unaligned dcl 18 set ref 176* 177* dtm 1 based bit(36) level 2 packed unaligned dcl 364 ref 420 dtu 2 based bit(36) level 2 packed unaligned dcl 364 ref 410 ec 000573 automatic fixed bin(35,0) dcl 18 set ref 102* 103 105* 106 107* 131* 140* 141 141 141 144* 151* ecc 000106 automatic fixed bin(35,0) dcl 362 set ref 442* 443* 444* 445 een parameter char(32) unaligned dcl 350 set ref 348 391* 442 444* fixed builtin function dcl 98 ref 376 402 432 folder 000424 automatic fixed bin(17,0) array dcl 18 set ref 216* 228* 235* 246* gap 000566 automatic fixed bin(17,0) dcl 18 set ref 258* 261* 261 264 265 265 268* 269* 296* 299* 299 302 303 303 306* 307* 327* 330* 330 333 334 334 337* 338* get_wdir_ 000040 constant entry external dcl 82 ref 131 half 000270 automatic fixed bin(17,0) dcl 18 set ref 211* 217 236 has_starstar 012614 automatic bit(1) initial unaligned dcl 72 set ref 72* 147* 152 hcs_$initiate_count 000036 constant entry external dcl 82 ref 131 hcs_$terminate_noname 000042 constant entry external dcl 82 ref 151 i 000262 automatic fixed bin(17,0) dcl 18 in procedure "disk_usage_stat" set ref 165* 166 166 167 168 181* 182* 182 182 182 182 182 182 184 185 186 187 188 189 190* 214* 215 215 216 216 217* 227* 228* 228 228 228 228 228 228* 233* 234 234 235 235 236* 245* 246* 246 246 246 246 246 246* 259* 260 265 265 271* 271 271 271* 279* 280 280 280 280 281 282 283* 291* 292 292* 297* 298 303 303 309* 309 309 309* 317* 318 318 319* 328* 329 334 334 340* 340 340 340* i 000100 automatic fixed bin(17,0) dcl 477 in procedure "set_dwmn" set ref 482* 482* 483 ioa_ 000026 constant entry external dcl 82 ref 177 178 180 182 193 194 198 200 203 206 208 209 210 222 223 225 226 228 240 241 243 244 246 251 252 253 255 257 266 268 271 276 277 280 285 288 289 295 304 306 309 314 315 325 335 337 340 492 ioa_$rsnnl 000030 constant entry external dcl 82 ref 391 j 000101 automatic fixed bin(17,0) dcl 477 in procedure "set_dwmn" set ref 480* 482 483* 486 j 000263 automatic fixed bin(17,0) dcl 18 in procedure "disk_usage_stat" set ref 265* 266* 303* 304* 334* 335* junk 000261 automatic char(1) unaligned dcl 18 set ref 176* 176* k 000102 automatic fixed bin(17,0) dcl 477 in procedure "set_dwmn" set ref 479* 481 484* 484 k 000264 automatic fixed bin(17,0) dcl 18 in procedure "disk_usage_stat" set ref 135* 136 139 148* 441* 442 442 443 444 447 447 448 448 450 450* kk 000565 automatic fixed bin(17,0) dcl 18 set ref 134* 137 139 139 148* level 000152 automatic fixed bin(17,0) dcl 18 set ref 374* 479 lrm 012445 automatic fixed bin(17,0) dcl 40 set ref 114* 242 243* 423 424* lrm_segname 012446 automatic char(168) unaligned dcl 40 set ref 242* 243* 425* lru 012520 automatic fixed bin(17,0) dcl 40 set ref 114* 224 225* 413 414* lru_segname 012521 automatic char(168) unaligned dcl 40 set ref 224* 225* 415* lth 000564 automatic fixed bin(24,0) dcl 18 set ref 131* 133* 133 135 lvl parameter fixed bin(17,0) dcl 350 ref 348 374 375 375 377 377 379 389 398 398 401 401 407 407 437 437 438 438 match_star_name_ 000024 constant entry external dcl 82 ref 444 max_names_in_dir 012120 automatic fixed bin(17,0) dcl 40 set ref 114* 167 168* 315* 317 328 382 383* max_names_on_ent 012121 automatic fixed bin(17,0) dcl 40 set ref 114* 289* 291 297 392 393* max_seg_size 001513 automatic fixed bin(17,0) dcl 40 set ref 114* 252* 259 403 404* maxlv 000735 automatic fixed bin(17,0) dcl 40 set ref 114* 181 375 375* mfage 001360 automatic fixed bin(17,0) array dcl 40 set ref 114* 235 246* 428* 428 mrage 001225 automatic fixed bin(17,0) array dcl 40 set ref 114* 234 246* 429* 429 mscale 000734 automatic fixed bin(17,0) dcl 40 set ref 114* 256* 256* 257* 271 271 271 271 409 409* n_dirs_w_i_names 006116 automatic fixed bin(17,0) array dcl 40 set ref 114* 166* 166 318 318 319 321* 322 322 329 340* 340 340 381* 381 n_ents_w_i_names 002115 automatic fixed bin(17,0) array dcl 40 set ref 114* 292 292 298 309* 309 309 378* 378 ndays 000103 automatic fixed bin(17,0) dcl 357 set ref 411* 412 412* 413 413 414 417 417* 418 418 419 419 421* 422 422* 423 423 424 427 427* 428 428 429 429 ndirs 000614 automatic fixed bin(17,0) array dcl 40 set ref 114* 182* 186* 186 186 194* 202 206 208 209 210 253 288 314* 321 324 438* 438 ndrecs 000674 automatic fixed bin(17,0) array dcl 40 set ref 114* 182* 189* 189 189 194* 206 437* 437 nlinks 000634 automatic fixed bin(17,0) array dcl 40 set ref 114* 182* 187* 187 187 194* 209 288 398* 398 nname 0(02) based bit(16) level 2 packed unaligned dcl 364 ref 376 nnames 000714 automatic fixed bin(17,0) array dcl 40 set ref 114* 182* 190* 190 190 194* 210 377* 377 nnames_in_dir 000102 automatic fixed bin(17,0) dcl 357 set ref 380* 381 381 382 383 no_of_names 000101 automatic fixed bin(17,0) dcl 357 set ref 376* 377 378 378 390 392 393 nptr parameter pointer dcl 350 ref 348 nrecs 000654 automatic fixed bin(17,0) array dcl 40 set ref 114* 182* 188* 188 188 194* 200 251* 407* 407 nscale 000736 automatic fixed bin(17,0) dcl 40 set ref 220* 226* 228 228 228 228 238* 244* 246 246 246 246 294* 295* 309 309 309 309 323* 325* 340 340 340 340 nsegs 000574 automatic fixed bin(17,0) array dcl 40 set ref 114* 182* 185* 185 185 194* 197 200 208 211 219 288 401* 401 nsfx 015615 automatic fixed bin(17,0) dcl 72 set ref 130* 135 138* 138 139 140 141 144 145 147 153* 153 154 155 279 441 null builtin function dcl 98 ref 132 nxt_midnight 000560 automatic fixed bin(71,0) dcl 18 set ref 112* 411 421 path 000100 automatic char(168) unaligned dcl 18 set ref 103* 105* 160* 178* 198* 203* 253* 492* path_with_max_names 012174 automatic char(168) unaligned dcl 40 set ref 289* 394* pending_names 012573 automatic fixed bin(17,0) array dcl 40 set ref 114* 165 380 386* 390* 390 records 3(18) based bit(18) level 2 packed unaligned dcl 364 ref 402 432 rolder 000271 automatic fixed bin(17,0) array dcl 18 set ref 215* 228* 228 228 234* 246* 246 246 rsize 001514 automatic fixed bin(17,0) array dcl 40 set ref 114* 260 271* 271 271 408* 408 409 409 savlvl 012613 automatic fixed bin(17,0) dcl 40 set ref 114* 164 165 171* 171 379 380 386 387* 387 389* 390 390 479 sdn parameter char(168) unaligned dcl 350 set ref 348 391* 391 seg_length 000100 automatic fixed bin(17,0) dcl 357 set ref 402* 403 404 407 408 408 409 409 419 429 432* 433 434 437 447 sen parameter char(32) unaligned dcl 350 set ref 348 391* 391 slp 000562 automatic pointer dcl 18 set ref 131* 132 136 137 139 151* starname_fils 015215 automatic fixed bin(17,0) array dcl 72 set ref 114* 280* 281 448* 448 starname_lnks 015415 automatic fixed bin(17,0) array dcl 72 set ref 114* 280* 283 450* 450 starname_name 012615 automatic char(32) array unaligned dcl 72 set ref 139* 140* 144* 154* 280* 442 444* starname_recs 015015 automatic fixed bin(17,0) array dcl 72 set ref 114* 280* 282 447* 447 starname_type 014615 automatic fixed bin(17,0) array dcl 72 set ref 141* 145* 147 155* 442 443 substr builtin function dcl 98 ref 136 137 139 228 228 246 246 271 271 309 309 340 340 482 486 sweep_disk_ 000016 constant entry external dcl 82 ref 160 system_info_$titles 000014 constant entry external dcl 82 ref 176 t1 015640 automatic fixed bin(17,0) dcl 461 in procedure "set_scale" set ref 464* 465 466 467* 468* 469* 471 t1 000265 automatic fixed bin(17,0) dcl 18 in procedure "disk_usage_stat" set ref 213* 215 215* 220* 232* 234 234* 238* 278* 281* 281 285* 290* 292 292* 294* 316* 318 318* 322 322* 323* t2 015641 automatic fixed bin(17,0) dcl 461 in procedure "set_scale" set ref 464* 466 467 468 469 469* t2 000266 automatic fixed bin(17,0) dcl 18 in procedure "disk_usage_stat" set ref 213* 216 216* 217 232* 235 235* 236 278* 282* 282 285* 316* 319* 319 321 t3 000267 automatic fixed bin(17,0) dcl 18 in procedure "disk_usage_stat" set ref 213* 217 217* 223* 232* 236 236* 241* 278* 283* 283 285* t3 015642 automatic fixed bin(17,0) dcl 461 in procedure "set_scale" set ref 466* 467 468 tnnames 012117 automatic fixed bin(17,0) dcl 40 set ref 114* type based bit(2) level 2 packed unaligned dcl 364 ref 397 400 431 446 450 ufage 001072 automatic fixed bin(17,0) array dcl 40 set ref 114* 216 228* 418* 418 urage 000737 automatic fixed bin(17,0) array dcl 40 set ref 114* 215 228* 419* 419 xxx 005100 constant char(120) initial unaligned dcl 80 ref 228 228 246 246 271 271 309 309 340 340 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. addr builtin function dcl 98 index builtin function dcl 98 NAMES DECLARED BY EXPLICIT CONTEXT. counter 004256 constant entry internal dcl 348 ref 160 160 disk_usage_stat 000723 constant entry external dcl 11 fini 004254 constant label dcl 496 ref 219 head 005031 constant entry internal dcl 490 ref 239 250 275 287 313 no_sl 001535 constant label dcl 152 ref 132 nodirs 002336 constant label dcl 211 set ref 204 set_dwmn 004764 constant entry internal dcl 475 ref 169 384 set_scale 004720 constant entry internal dcl 458 ref 220 238 256 294 323 sf1 004716 constant label dcl 454 ref 451 sgap 004250 constant label dcl 342 ref 324 331 sgap1 003332 constant label dcl 273 ref 262 sgap2 003756 constant label dcl 311 ref 300 skipline 001517 constant label dcl 148 ref 137 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 5350 5414 5142 5360 Length 5642 5142 44 211 206 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME disk_usage_stat 7222 external procedure is an external procedure. counter 114 internal procedure is assigned to an entry variable. set_scale internal procedure shares stack frame of external procedure disk_usage_stat. set_dwmn 67 internal procedure is called by several nonquick procedures. head internal procedure shares stack frame of external procedure disk_usage_stat. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME counter 000100 seg_length counter 000101 no_of_names counter 000102 nnames_in_dir counter 000103 ndays counter 000104 date_temp counter 000106 ecc counter disk_usage_stat 000100 path disk_usage_stat 000152 level disk_usage_stat 000153 ctime disk_usage_stat 000161 co disk_usage_stat 000221 dp disk_usage_stat 000261 junk disk_usage_stat 000262 i disk_usage_stat 000263 j disk_usage_stat 000264 k disk_usage_stat 000265 t1 disk_usage_stat 000266 t2 disk_usage_stat 000267 t3 disk_usage_stat 000270 half disk_usage_stat 000271 rolder disk_usage_stat 000424 folder disk_usage_stat 000560 nxt_midnight disk_usage_stat 000562 slp disk_usage_stat 000564 lth disk_usage_stat 000565 kk disk_usage_stat 000566 gap disk_usage_stat 000570 ap disk_usage_stat 000572 al disk_usage_stat 000573 ec disk_usage_stat 000574 nsegs disk_usage_stat 000614 ndirs disk_usage_stat 000634 nlinks disk_usage_stat 000654 nrecs disk_usage_stat 000674 ndrecs disk_usage_stat 000714 nnames disk_usage_stat 000734 mscale disk_usage_stat 000735 maxlv disk_usage_stat 000736 nscale disk_usage_stat 000737 urage disk_usage_stat 001072 ufage disk_usage_stat 001225 mrage disk_usage_stat 001360 mfage disk_usage_stat 001513 max_seg_size disk_usage_stat 001514 rsize disk_usage_stat 002115 n_ents_w_i_names disk_usage_stat 006116 n_dirs_w_i_names disk_usage_stat 012117 tnnames disk_usage_stat 012120 max_names_in_dir disk_usage_stat 012121 max_names_on_ent disk_usage_stat 012122 current_pathname disk_usage_stat 012174 path_with_max_names disk_usage_stat 012246 dir_with_max_names disk_usage_stat 012320 bigseg_name disk_usage_stat 012372 bigdir disk_usage_stat 012373 bigdir_name disk_usage_stat 012445 lrm disk_usage_stat 012446 lrm_segname disk_usage_stat 012520 lru disk_usage_stat 012521 lru_segname disk_usage_stat 012573 pending_names disk_usage_stat 012613 savlvl disk_usage_stat 012614 has_starstar disk_usage_stat 012615 starname_name disk_usage_stat 014615 starname_type disk_usage_stat 015015 starname_recs disk_usage_stat 015215 starname_fils disk_usage_stat 015415 starname_lnks disk_usage_stat 015615 nsfx disk_usage_stat 015640 t1 set_scale 015641 t2 set_scale 015642 t3 set_scale set_dwmn 000100 i set_dwmn 000101 j set_dwmn 000102 k set_dwmn THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. fx1_to_fl2 r_ne_as alloc_cs call_ext_out_desc call_ext_out call_int_this call_int_other return fl2_to_fx2 shorten_stack ext_entry int_entry divide_fx4 clock THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. absolute_pathname_ check_star_name_$entry com_err_ cu_$arg_ptr date_time_ datebin_$this_midnight get_wdir_ hcs_$initiate_count hcs_$terminate_noname ioa_ ioa_$rsnnl match_star_name_ sweep_disk_ system_info_$titles NO EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 11 000722 72 000730 102 000731 103 000747 105 000755 106 001001 107 001003 108 001043 112 001044 114 001053 130 001275 131 001276 132 001355 133 001361 134 001364 135 001366 136 001400 137 001406 138 001413 139 001414 140 001425 141 001442 144 001451 145 001510 147 001512 148 001517 150 001522 151 001524 152 001535 153 001537 154 001540 155 001546 160 001551 164 001565 165 001567 166 001571 167 001572 168 001574 169 001575 171 001601 172 001603 174 001604 176 001623 177 001645 178 001671 180 001715 181 001731 182 001737 184 002001 185 002003 186 002005 187 002010 188 002012 189 002014 190 002016 192 002020 193 002022 194 002036 197 002102 198 002104 199 002124 200 002125 202 002154 203 002156 204 002176 206 002177 208 002226 209 002256 210 002306 211 002336 213 002341 214 002344 215 002350 216 002355 217 002361 218 002367 219 002372 220 002374 222 002400 223 002414 224 002434 225 002441 226 002465 227 002505 228 002511 230 002570 232 002573 233 002576 234 002602 235 002607 236 002613 237 002621 238 002624 239 002630 240 002631 241 002645 242 002665 243 002672 244 002716 245 002736 246 002742 248 003023 250 003026 251 003027 252 003047 253 003073 255 003116 256 003142 257 003146 258 003166 259 003167 260 003175 261 003177 262 003200 264 003201 265 003203 266 003216 267 003242 268 003245 269 003264 271 003265 273 003332 275 003335 276 003336 277 003352 278 003366 279 003371 280 003400 281 003440 282 003443 283 003445 284 003447 285 003451 287 003477 288 003500 289 003524 290 003550 291 003551 292 003560 293 003564 294 003566 295 003572 296 003612 297 003613 298 003622 299 003624 300 003625 302 003626 303 003630 304 003643 305 003667 306 003672 307 003711 309 003712 311 003756 313 003761 314 003762 315 004002 316 004026 317 004030 318 004037 319 004045 320 004047 321 004051 322 004054 323 004057 324 004063 325 004065 327 004105 328 004106 329 004114 330 004116 331 004117 333 004120 334 004122 335 004135 336 004161 337 004164 338 004203 340 004204 342 004250 344 004253 496 004254 348 004255 374 004263 375 004267 376 004272 377 004277 378 004301 379 004302 380 004307 381 004312 382 004313 383 004315 384 004316 386 004323 387 004326 388 004330 389 004331 390 004332 391 004335 392 004422 393 004426 394 004427 397 004432 398 004440 399 004442 400 004443 401 004445 402 004447 403 004453 404 004455 405 004456 407 004461 408 004463 409 004464 410 004470 411 004477 412 004505 413 004507 414 004514 415 004515 417 004520 418 004524 419 004525 420 004530 421 004537 422 004544 423 004546 424 004553 425 004554 427 004557 428 004563 429 004564 430 004567 431 004570 432 004572 433 004576 434 004600 435 004601 437 004604 438 004606 441 004610 442 004620 443 004636 444 004642 445 004666 446 004670 447 004677 448 004703 449 004704 450 004705 451 004712 453 004713 454 004716 456 004717 458 004720 463 004722 464 004725 465 004730 466 004734 467 004737 468 004745 469 004753 470 004757 471 004760 473 004762 475 004763 479 004771 480 004775 481 004777 482 005001 482 005013 483 005016 484 005020 485 005022 486 005023 488 005030 490 005031 492 005032 494 005056 ----------------------------------------------------------- Historical Background This edition of the Multics software materials and documentation is provided and donated to Massachusetts Institute of Technology by Group BULL including BULL HN Information Systems Inc. as a contribution to computer science knowledge. This donation is made also to give evidence of the common contributions of Massachusetts Institute of Technology, Bell Laboratories, General Electric, Honeywell Information Systems Inc., Honeywell BULL Inc., Groupe BULL and BULL HN Information Systems Inc. to the development of this operating system. Multics development was initiated by Massachusetts Institute of Technology Project MAC (1963-1970), renamed the MIT Laboratory for Computer Science and Artificial Intelligence in the mid 1970s, under the leadership of Professor Fernando Jose Corbato. Users consider that Multics provided the best software architecture for managing computer hardware properly and for executing programs. Many subsequent operating systems incorporated Multics principles. Multics was distributed in 1975 to 2000 by Group Bull in Europe , and in the U.S. by Bull HN Information Systems Inc., as successor in interest by change in name only to Honeywell Bull Inc. and Honeywell Information Systems Inc. . ----------------------------------------------------------- Permission to use, copy, modify, and distribute these programs and their documentation for any purpose and without fee is hereby granted,provided that the below copyright notice and historical background appear in all copies and that both the copyright notice and historical background and this permission notice appear in supporting documentation, and that the names of MIT, HIS, BULL or BULL HN not be used in advertising or publicity pertaining to distribution of the programs without specific prior written permission. Copyright 1972 by Massachusetts Institute of Technology and Honeywell Information Systems Inc. Copyright 2006 by BULL HN Information Systems Inc. Copyright 2006 by Bull SAS All Rights Reserved