COMPILATION LISTING OF SEGMENT lib_output_node_ Compiled by: Multics PL/I Compiler, Release 28d, of October 4, 1983 Compiled at: Honeywell Multics Op. - System M Compiled on: 02/15/84 0857.6 mst Wed 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 lib_output_node_: procedure; 12 13 dcl /* parameters */ 14 ASrequirements bit(72) aligned, /* requirements bits determine output fields. */ 15 level fixed bin(35), /* indentation level at which node is to be */ 16 /* printed in the listing. (In) */ 17 Inode fixed bin, /* number of this node in the node list. (In) */ 18 Pprev_parent ptr, /* ptr to parent node of previous node which */ 19 /* was output. (In) */ 20 name char(32), /* name to be used in the cross reference */ 21 /* entry. (In) */ 22 path char(168) varying; /* path name to be used in the cross reference */ 23 /* entry. (In) */ 24 25 dcl Iaccess_string (8) fixed bin, /* starting indices of 50-char chunks of access */ 26 Iacl fixed bin, /* number of ACL entries which have been output. */ 27 /* string. */ 28 Idir_iacl fixed bin, /* number of directory IACLe output. */ 29 Iiacl fixed bin, /* number of segment IACLe output. */ 30 Iname fixed bin, /* number of names which have been output. */ 31 Laccess_string fixed bin, /* length of non-blank portion of access string. */ 32 Lacl fixed bin, /* length of ACL we are outputting. */ 33 Lname fixed bin, /* length of the name field in the output, */ 34 Llevel fixed bin, /* length of level field (in characters). */ 35 /* adjusted for indentation level. */ 36 Nindent fixed bin, /* number of spaces that names at this level are */ 37 /* to be indented. */ 38 Sfield_blank bit(1) aligned init ("0"b), 39 /* on if all node fields which can be put in */ 40 /* right-hand column have been output. */ 41 Scleanup bit(1) aligned init ("0"b), 42 /* on if entered at the $cleanup entry point. */ 43 Sinfo bit(1) aligned init ("0"b), 44 /* on if output to go to user's terminal. */ 45 Snames_first bit(1) aligned init ("0"b), 46 /* on if all names to be output first. */ 47 1 Squota aligned, /* switches dealing with output of quota info. */ 48 2 master_dir bit(1) unal, /* on if master directory to be output. */ 49 (2 quota, /* on if quota to be output. */ 50 2 quota_used, /* on if quota used to be output. */ 51 2 terminal_account, /* on if terminal account switch to be output. */ 52 2 Ninf, /* on if number of inf directories with quota...*/ 53 2 trp, /* on if time/record product to be output. */ 54 2 dttrp) bit(1) unal, /* on if date-time time/record product to be out*/ 55 Stpd bit(1) aligned, /* on if transparent paging dev switch output */ 56 57 access_string char(300), /* character representation of an access class. */ 58 aim char(100) varying, /* character representation of AIM access switches*/ 59 attributes char(100) varying, /* object segment attributes string. */ 60 code fixed bin(35), /* a status code. */ 61 dir char(168) varying, /* dir part of a node's path name. */ 62 e fixed bin, /* entry point indicator for out_ch proc. */ 63 ent char(32) varying, /* entry part of a node's path name. */ 64 field char(108), /* character string output in right-hand column. */ 65 flag char(1) aligned, /* library_cleanup entry deletion flag. */ 66 i fixed bin, /* a string index. */ 67 iacc fixed bin, /* do-group index used in processing access string*/ 68 iacle char(104), /* character string containing IACL entries. */ 69 level_suppressed bit(1) aligned, /* on if no level field to be put into output line*/ 70 long char(100), /* an error message character string. */ 71 lvname char(32), /* a logical volume name. */ 72 lv_name char(32) varying, /* lvname without trailing blanks. */ 73 mode char(4), /* a mode character string. */ 74 pvname char(32), /* a physical volume name. */ 75 pv_name char(32) varying, /* pvname without trailing blanks. */ 76 rbs char(12) varying, /* a ring bracket character string. */ 77 saved_Iname fixed bin, /* save value of Iname across a test. */ 78 short char(8), /* an abbreviated error message char string. */ 79 type char(20); /* a character node type. */ 80 81 dcl (addr, binary, dimension, index, length, max, min, null, search, string, substr, reverse, verify) 82 builtin; 83 84 dcl /* entries */ 85 convert_authorization_$to_string_short entry (bit(72) aligned, char(*), fixed bin(35)), 86 convert_binary_integer_$long_octal_string 87 entry (fixed bin(71)) returns (char(25) varying), 88 convert_binary_integer_$octal_string 89 entry (fixed bin(35)) returns (char(13) varying), 90 convert_status_code_ entry (fixed bin(35), char(8), char(100)), 91 (cv_acl variable, 92 cv_acl_, 93 cv_dir_acl_) entry (ptr, fixed bin, char(*), fixed bin, bit(*)), 94 date_time_ entry (fixed bin(71) aligned, char(*) aligned), 95 date_time_$fstime entry (bit(36), char(*) aligned), 96 ioa_$ioa_switch entry options (variable), 97 lib_next_name_ entry (bit(72) aligned, ptr, fixed bin, ptr) returns (char(32)), 98 lib_node_path_ entry (ptr, char(168) varying, char(32) varying), 99 mdc_$find_lvname entry (bit(36), char(*), fixed bin(35)), 100 mdc_$find_volname entry (bit(36), char(*), char(*), fixed bin(35)); 101 102 dcl /* static variables */ 103 FT (0:1) char(5) int static init ("false", "true"), 104 1 null_name_descriptor aligned int static options(constant), 105 /* a fake name descriptor which has no names. */ 106 2 length fixed bin(17) unal init (5), 107 2 version fixed bin(17) unal init (1), 108 2 T fixed bin init (1), 109 2 Pnext ptr init (null), 110 2 N fixed bin init (0), /* no names in name array. */ 111 1 null_user_descriptor aligned int static options(constant), 112 /* a fake user descriptor which has no info. */ 113 2 length fixed bin(17) unal init (5), 114 2 version fixed bin(17) unal init (1), 115 2 T fixed bin init (6), 116 2 Pnext ptr init (null), 117 2 L fixed bin init (0), /* no user information. */ 118 status_data_$dir_mode (0:7) char(4) varying aligned ext static, 119 /* array which maps directory mode into a */ 120 /* printable string. */ 121 status_data_$mode (0:7) char(4) varying aligned ext static, 122 /* array which maps segment/msf/archive mode into */ 123 /* a printable string. */ 124 sys_info$max_seg_size fixed bin(35) ext static; 125 126 127 /* * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * */ 128 129 130 cleanup: entry (Pfcb, Pnode, ASrequirements, level, Pstarname, Inode, Pprev_parent); 131 132 Scleanup = "1"b; 133 134 info: entry (Pfcb, Pnode, ASrequirements, level, Pstarname); 135 136 Sinfo = "1"b; /* output directed to user's terminal. */ 137 138 map: entry (Pfcb, Pnode, ASrequirements, level, Pstarname); 139 140 print: entry (Pfcb, Pnode, ASrequirements, level, Pstarname); 141 /* format for printing on the online printer. */ 142 143 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 144 /* */ 145 /* SET UP REQUIREMENTS BITS WHICH WILL DRIVE OUTPUT OF THE VARIOUS FIELDS: */ 146 /* 1) And requirements bits from node with those in our argument list; put result in our */ 147 /* bit string we can overlay and modify as we like without harm. */ 148 /* 2) Turn off selected output bits to suppress "standard" data (zero bit count, bit */ 149 /* count author = author, etc). */ 150 /* */ 151 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 152 153 Srequirements = node.Sreq & ASrequirements; /* copy req bits to overlay with structure. */ 154 155 if S.dtc | S.compiler_name | S.compiler_version | S.compiler_options | S.object_info then 156 /* Don't tell user an object segment isn't */ 157 S.not_ascii = "0"b; /* printable. */ 158 if S.copy then /* if user wants to know about the copy switch, */ 159 S.copy = node.Scopy; /* but it is not on, then don't mention it. */ 160 if S.safety then /* do same for safety switch setting. */ 161 S.safety = node.Ssafety; 162 if S.records_used then /* if user wants to know about records used and */ 163 if S.current_length then /* about current length, and if these two values */ 164 if node.records_used = node.current_length then 165 S.records_used = "0"b; /* are equal, then don't mention records used. */ 166 if S.max_length then /* output max length only if different from */ 167 if node.max_length = sys_info$max_seg_size then 168 S.max_length = "0"b; /* the maximum segment size. */ 169 if S.quota then do; /* Set output switches for quota elements. */ 170 string(Squota) = ""b; 171 Squota.master_dir = node.Smaster_dir; 172 if node.segment.quota_used ^= 0 | node.directory.quota_used ^= 0 then Squota.quota_used = "1"b; 173 if node.segment.quota ^= 0 | node.directory.quota ^= 0 then do; 174 Squota.quota = "1"b; 175 Squota.terminal_account = node.Sterminal_account | node.Sterminal_account_dir; 176 if node.segment.Ninf_quota ^= 0 | node.directory.Ninf_quota ^= 0 then Squota.Ninf = "1"b; 177 Squota.trp = "1"b; 178 Squota.dttrp = "1"b; 179 end; 180 end; 181 else string(Squota) = "0"b; 182 if S.bit_count_author then /* suppress bit count author if same as author. */ 183 if S.author then 184 if node.bit_count_author = node.author then 185 S.bit_count_author = "0"b; 186 if S.aim then /* suppress AIM switch settings if not on. */ 187 S.aim = node.Saim_security_oos | node.Saim_audit | node.Saim_multiple_class; 188 if S.lvid then /* suppress TPD switch if not on. */ 189 Stpd = node.Stpd; 190 else Stpd = "0"b; 191 192 193 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 194 /* */ 195 /* ADDRESS DESCRIPTORS FOR VARIABLE-LENGTH or OPTIONAL INFORMATION CHAINED OFF THE NODE. */ 196 /* */ 197 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 198 199 if Svalid.names then /* access the name descriptor, if it exists. */ 200 do PDnames = node.PD repeat Dnames.Pnext while (Dnames.T ^= Tnames); 201 end; 202 else 203 PDnames = addr (null_name_descriptor); /* otherwise, fake a null name descriptor. */ 204 if S.dtc | S.compiler_name | S.compiler_version | S.compiler_options | S.object_info then 205 /* address object info descriptor, if need be. */ 206 do PDobj = node.PD repeat Dobj.Pnext while (Dobj.T ^= Tobj); 207 end; 208 if S.root_search_proc then /* address the search_proc info descriptor. */ 209 do PDsearch_proc = node.PD repeat Dsearch_proc.Pnext while (Dsearch_proc.T ^= Tsearch_proc); 210 end; 211 if S.user then /* address user info descriptor, if need be. */ 212 do PDuser = node.PD repeat Duser.Pnext while (Duser.T ^= Tuser); 213 end; 214 if S.kids_error then /* address node array descriptor, if needed. */ 215 do PDnodes = node.PD repeat Dnodes.Pnext while (Dnodes.header.T ^= Tnodes); 216 end; 217 if S.acl then do; /* address ACL descriptor. */ 218 if node.T = Tdirectory then do; 219 do PDdir_acl = node.PD repeat Ddir_acl.Pnext while (Ddir_acl.T ^= Tdir_acl); 220 end; 221 PDacl = PDdir_acl; /* cheat by treating directory ACL descriptor */ 222 cv_acl = cv_dir_acl_; /* as segment ACL descriptor, and letting the */ 223 end; /* conversion routine worry about differences. */ 224 else do; 225 do PDacl = node.PD repeat Dacl.Pnext while (Dacl.T ^= Tacl); 226 end; 227 cv_acl = cv_acl_; 228 end; 229 end; 230 if S.iacl then do; /* address segment/directory IACL descriptors. */ 231 do PDiacl = node.PD repeat Diacl.Pnext while (Diacl.T ^= Tiacl); 232 end; 233 do PDdir_iacl = node.PD repeat Ddir_iacl.Pnext while (Ddir_iacl.T ^= Tdir_iacl); 234 end; 235 end; 236 237 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 238 /* */ 239 /* DO COMPLICATED FIELD CONVERSIONS BEFORE STARTING THE OUTPUT. */ 240 /* */ 241 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 242 243 if S.mode then 244 if node.T = Tdirectory then 245 mode = status_data_$dir_mode (binary (node.Smode, 3)); 246 else 247 mode = status_data_$mode (binary (node.Smode, 3)); 248 if S.rb then do; 249 rbs = cv_dec(binary(node.rb(1), 35)) || ", "; 250 rbs = rbs || cv_dec(binary(node.rb(2), 35)); 251 if node.T ^= Tdirectory then do; 252 rbs = rbs || ", "; 253 rbs = rbs || cv_dec(binary(node.rb(3), 35)); 254 end; 255 end; 256 if S.access_class then do; 257 call convert_authorization_$to_string_short (node.access_class, access_string, code); 258 if code ^= 0 then do; 259 bad_access_class: call convert_status_code_ (code, short, long); 260 access_string = "Error - " || long; 261 Laccess_string = length(access_string) - verify (reverse (access_string), " ") + 1; 262 end; 263 if access_string = "" then S.access_class = "0"b; 264 else do; 265 Laccess_string = index(access_string," "); 266 split_access_class: Iaccess_string(1) = 1; 267 do iacc = 1 to dimension(Iaccess_string,1)-1; 268 if Iaccess_string(iacc) > Laccess_string then 269 Iaccess_string(iacc+1) = Laccess_string+1; 270 else if Laccess_string - Iaccess_string(iacc) + 1 <= 50 then 271 Iaccess_string(iacc+1) = Laccess_string+1; 272 else Iaccess_string(iacc+1) = Iaccess_string(iacc) + 52 - 273 search (reverse (substr (access_string, Iaccess_string(iacc), 51)), " ,"); 274 end; 275 end; 276 end; 277 if S.aim then do; 278 aim = ""; 279 if node.Saim_audit then aim = "audit"; 280 if node.Saim_multiple_class then do; 281 if length(aim) ^= 0 then aim = aim || ", "; 282 aim = aim || "multiple-class"; 283 end; 284 if node.Saim_security_oos then do; 285 if length(aim) ^= 0 then aim = aim || ", "; 286 aim = aim || "out-of-service"; 287 end; 288 end; 289 290 if S.object_info then do; 291 attributes = ""; 292 if Dobj.info.format.bound then attributes = attributes || "bound object"; 293 if Dobj.info.format.old_format then do; 294 if length (attributes) > 0 then attributes = attributes || ", "; 295 attributes = attributes || "old format"; 296 end; 297 if Dobj.info.format.standard then; 298 else do; 299 if length (attributes) > 0 then attributes = attributes || ", "; 300 attributes = attributes || "non-standard format"; 301 end; 302 if Dobj.info.format.procedure then; 303 else do; 304 if length (attributes) > 0 then attributes = attributes || ", "; 305 attributes = attributes || "data"; 306 end; 307 if Dobj.info.format.relocatable then; 308 else do; 309 if length (attributes) > 0 then attributes = attributes || ", "; 310 attributes = attributes || "non-relocatable"; 311 end; 312 if Dobj.info.format.gate then do; 313 if length (attributes) > 0 then attributes = attributes || ", "; 314 attributes = attributes || "gate (" || 315 convert_binary_integer_$octal_string (Dobj.info.entry_bound) || ")"; 316 end; 317 if Dobj.info.format.separate_static then do; 318 if length (attributes) > 0 then attributes = attributes || ", "; 319 attributes = attributes || "separate static"; 320 end; 321 if Dobj.info.format.links_in_text then do; 322 if length (attributes) > 0 then attributes = attributes || ", "; 323 attributes = attributes || "links in text"; 324 end; 325 if length (attributes) = 0 then attributes = "standard object"; 326 end; 327 if S.pvid then do; 328 S.pvid = "0"b; /* NEVER OUTPUT THE PVNAME! */ 329 call mdc_$find_volname (node.pvid, pvname, lvname, 0); 330 pv_name = substr(pvname,1, length(pvname) + 1 - verify(reverse(pvname)," ")); 331 lv_name = substr(lvname,1, length(lvname) + 1 - verify(reverse(lvname)," ")); 332 end; 333 else if S.lvid then do; 334 call mdc_$find_lvname (node.lvid, lvname, 0); 335 lv_name = substr(lvname,1, length(lvname) + 1 - verify(reverse(lvname)," ")); 336 end; 337 338 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 339 /* */ 340 /* OUTPUT THE LINES DESCRIBING THIS NODE WHICH ARE REQUIRED AND HAVE NOT BEEN SUPPRESSED. */ 341 /* */ 342 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 343 344 call set_field_widths; /* set length of level, indentation, name fields */ 345 if S.new_line then /* required at start of entry? */ 346 call out_nl; /* put one into output. */ 347 348 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 349 /* */ 350 /* For library_cleanup, output directory pathname, followed by a list of nodes, with list */ 351 /* entries numbered consecutively. Flag entries to be deleted with *. */ 352 /* */ 353 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 354 355 if Scleanup then do; 356 if S.pathname then do; 357 S.pathname = "0"b; 358 if Pprev_parent ^= null then 359 if node.Pparent = Pprev_parent then; 360 else do; 361 CLEANUP_PATH: call lib_node_path_ (Pnode, dir, ent); 362 if node.Pparent = null then 363 if dir = ">" then 364 dir = dir || ent; 365 else dir = dir || ">" || ent; 366 call out_pn (dir); 367 if S.new_line then 368 call out_nl; 369 end; 370 else go to CLEANUP_PATH; 371 end; 372 if Svalid.delete then 373 flag = "*"; 374 else flag = " "; 375 if S.type then do; 376 S.type = "0"b; 377 type = brief_node_type (node.T); 378 end; 379 else type = ""; 380 call out_cln (flag, Inode, type); 381 end; 382 383 384 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 385 /* */ 386 /* If short terminal length requires that all names be output first, followed by other */ 387 /* fields, output the names, then make the field zero length in lines which follow.*/ 388 /* */ 389 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 390 391 if Snames_first then do; 392 ent = lib_next_name_ (Srequirements, PDnames, Iname, Pstarname); 393 do while (ent ^= ""); 394 call out_name (ent, "", ""); 395 ent = lib_next_name_ (Srequirements, PDnames, Iname, Pstarname); 396 end; 397 Lname = 0; 398 end; 399 400 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 401 /* */ 402 /* LINE: in: */ 403 /* */ 404 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 405 406 if Sinfo then do; /* Special case short terminals. */ 407 if S.type then do; 408 type = brief_node_type(node.T); 409 call out_ch2 (" type:", type); 410 end; 411 if S.pathname & (level <= 1) then do; 412 call lib_node_path_ (Pnode, dir, ent); 413 if node.Pparent = null then do; 414 type = " path:"; 415 if dir = ">" then 416 dir = dir || ent; 417 else dir = dir || ">" || ent; 418 end; 419 else type = " path:"; 420 saved_Iname = Iname; 421 ent = lib_next_name_ (Srequirements, PDnames, Iname, Pstarname); 422 Iname = saved_Iname; 423 if ent = "" then do; 424 if length (dir) <= 16 then do; 425 dir = dir || (19)" "; 426 dir = substr(dir,1,19); 427 dir = dir || get_field(); 428 i = length(dir) + 1 - verify(reverse(dir), " "); 429 dir = substr(dir,1,i); 430 end; 431 else do; 432 Lname = Lname - 40; 433 Sinfo = "0"b; 434 end; 435 call out_vc2 (type, dir); 436 S.pathname = "0"b; 437 end; 438 else if Nindent+Llevel+Lname+21+length(dir) <= fcb.line_length then do; 439 call out_vc2 (type, dir); 440 S.pathname = "0"b; 441 end; 442 end; 443 end; 444 445 446 else if S.type | S.pathname then do; 447 if S.type then 448 type = brief_node_type(node.T); 449 else 450 type = ""; 451 if level > 1 then do; 452 dir = (19)" " || get_field(); 453 i = length(dir) + 1 - verify(reverse(dir), " "); 454 dir = substr(dir,1,i); 455 end; 456 else if S.pathname then do; 457 call lib_node_path_ (Pnode, dir, ent); 458 if node.Pparent = null then do; /* special case a library root node. */ 459 substr (type, 15, 5) = "path:"; 460 if dir = ">" then 461 dir = dir || ent; 462 else dir = dir || ">" || ent; 463 end; 464 else substr (type, 17, 3) = "in:"; 465 if length (dir) <= 16 then do; 466 dir = dir || (19)" "; 467 dir = substr(dir,1,19); 468 dir = dir || get_field(); 469 i = length(dir) + 1 - verify(reverse(dir), " "); 470 dir = substr(dir,1,i); 471 end; 472 end; 473 else 474 dir = ""; 475 call out_vc2 (type, dir); 476 S.pathname = "0"b; 477 end; 478 479 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 480 /* */ 481 /* LINE: contents modified: */ 482 /* LINE: entry modified: */ 483 /* LINE: date used: */ 484 /* LINE: date dumped: */ 485 /* LINE: date compiled: */ 486 /* */ 487 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 488 489 if node.T = Tarchive_comp then if S.dtem then do; 490 S.dtem = "0"b; 491 call out_ch3 (" component updated:", cv_date(node.dtem), get_field()); 492 end; 493 if S.dtm then do; 494 S.dtm = "0"b; 495 call out_ch3 (" contents modified:", cv_date(node.dtm), get_field()); 496 end; 497 if S.dtem then do; 498 S.dtem = "0"b; 499 call out_ch3 (" entry modified:", cv_date(node.dtem), get_field()); 500 end; 501 if S.dtu then do; 502 S.dtu = "0"b; 503 call out_ch3 (" date used:", cv_date(node.dtu), get_field()); 504 end; 505 if S.dtd then do; 506 S.dtd = "0"b; 507 call out_ch3 (" date dumped:", cv_date(node.dtd), get_field()); 508 end; 509 if S.dtc then do; 510 S.dtc = "0"b; 511 if Dobj.info.format.bound then 512 call out_ch3 (" date bound:", cv_long_date(Dobj.info.compile_time), get_field()); 513 else call out_ch3 (" date compiled:", cv_long_date(Dobj.info.compile_time), get_field()); 514 end; 515 516 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 517 /* */ 518 /* LINE: msf indicator: */ 519 /* LINE: bit count: */ 520 /* LINE: length: */ 521 /* LINE: records used: */ 522 /* LINE: max length: */ 523 /* LINE: offset: */ 524 /* LINE: entry bound: */ 525 /* */ 526 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 527 528 if S.msf_indicator then do; 529 S.msf_indicator = "0"b; 530 call out_ch3 (" msf indicator:", cv_dec(node.msf_indicator), get_field()); 531 end; 532 if S.bit_count then do; 533 S.bit_count = "0"b; 534 call out_ch3 (" bit count:", cv_dec(node.bit_count), get_field()); 535 end; 536 if S.current_length then do; 537 S.current_length = "0"b; 538 call out_ch3 (" length:", cv_dec(node.current_length), get_field()); 539 end; 540 if S.records_used then do; 541 S.records_used = "0"b; 542 call out_ch3 (" records used:", cv_dec(node.records_used), get_field()); 543 end; 544 if S.max_length then do; 545 S.max_length = "0"b; 546 call out_ch3 (" max length:", cv_dec(node.max_length), get_field()); 547 end; 548 if S.offset then do; 549 S.offset = "0"b; 550 call out_ch3 (" offset:", convert_binary_integer_$octal_string(node.offset), 551 get_field()); 552 end; 553 if S.entry_bound then do; 554 S.entry_bound = "0"b; 555 call out_ch3 (" entry bound:", convert_binary_integer_$octal_string(node.entry_bound), 556 get_field()); 557 end; 558 559 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 560 /* */ 561 /* LINE: author: */ 562 /* LINE: bit count author: */ 563 /* LINE: logical volume: */ 564 /* LINE: physical volume: */ 565 /* LINE: never on paging dv: true */ 566 /* LINE: master directory: true */ 567 /* */ 568 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 569 570 if S.author then if length(node.author) <= 16 then do; 571 S.author = "0"b; 572 call out_vc3 (" author:", node.author, get_field()); 573 end; 574 if S.bit_count_author then if length(node.bit_count_author) <= 16 then do; 575 S.bit_count_author = "0"b; 576 call out_vc3 (" bit count author:", node.bit_count_author, get_field()); 577 end; 578 if S.lvid then if length(lv_name) <= 16 then do; 579 S.lvid = "0"b; 580 if node.T = Tdirectory | node.T = Tmsf then 581 call out_vc3 (" sons log. volume:", lv_name, get_field()); 582 else call out_vc3 (" logical volume:", lv_name, get_field()); 583 end; 584 if S.pvid then if length (pv_name) <= 16 then do; 585 S.pvid = "0"b; 586 call out_vc3 (" physical volume:", pv_name, get_field()); 587 end; 588 if Stpd then do; 589 Stpd = "0"b; 590 call out_ch3 ("never on paging dv:", "true", get_field()); 591 end; 592 if Squota.master_dir then do; 593 Squota.master_dir = "0"b; 594 call out_ch3 (" master directory:", "true", get_field()); 595 end; 596 597 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 598 /* */ 599 /* LINE: access class: */ 600 /* LINE: AIM attributes: */ 601 /* LINE: mode: */ 602 /* LINE: ring brackets: */ 603 /* LINE: safety switch: on */ 604 /* */ 605 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 606 607 if S.access_class then if Laccess_string <= 16 then do; 608 S.access_class = "0"b; 609 call out_ch3 (" access class:", substr(access_string,1,Laccess_string), get_field()); 610 end; 611 if S.aim then if length(aim) <= 16 then do; 612 S.aim = "0"b; 613 call out_vc3 (" AIM attributes:", aim, get_field()); 614 end; 615 if S.mode then do; 616 S.mode = "0"b; 617 call out_ch3 (" mode:", mode, get_field()); 618 end; 619 if S.rb then do; 620 S.rb = "0"b; 621 call out_vc3 (" ring brackets:", rbs, get_field()); 622 end; 623 if S.safety then do; 624 S.safety = "0"b; 625 call out_ch3 (" safety switch:", "on", get_field()); 626 end; 627 628 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 629 /* */ 630 /* LINE: copy switch: on */ 631 /* LINE: unique id: */ 632 /* LINE: : */ 633 /* LINE: object attributes: */ 634 /* LINE: printable: */ 635 /* LINE: compiler: */ 636 /* */ 637 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 638 639 if S.copy then do; 640 S.copy = "0"b; 641 call out_ch3 (" copy switch:", "on", get_field()); 642 end; 643 if S.unique_id then do; 644 S.unique_id = "0"b; 645 call out_ch3 (" unique id:", 646 convert_binary_integer_$octal_string(binary (node.unique_id, 36)), get_field()); 647 end; 648 if S.user then if Duser.L <= 16 then do; 649 S.user = "0"b; 650 call out_ch3 (Duser.label || ":", Duser.info, get_field()); 651 end; 652 if S.object_info then if length (attributes) <= 16 then do; 653 S.object_info = "0"b; 654 call out_vc3 (" object attributes:", attributes, get_field()); 655 end; 656 if S.not_ascii then do; 657 S.not_ascii = "0"b; 658 call out_ch3 (" printable:", "no", get_field()); 659 end; 660 if S.compiler_name then do; 661 S.compiler_name = "0"b; 662 call out_ch3 (" compiler:", Dobj.info.compiler, get_field()); 663 end; 664 665 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 666 /* */ 667 /* FINISH OUTPUTTING SHORT DATA BEFORE BEGINNING LONG DATA. */ 668 /* 1) Output remaining ACL entries, unless on short terminal or in 1-datum per line mode. */ 669 /* 2) Output remaining names, unless on short terminal. */ 670 /* */ 671 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 672 673 if S.acl then 674 if Snames_first | Sinfo then; 675 else do; 676 field = get_acl(); 677 do while (field ^= ""); 678 call out_ch3 ("", "", field); 679 field = get_acl(); 680 end; 681 end; 682 if ^Snames_first then if Sinfo then do; /* For short terminals, print rest of names now. */ 683 ent = lib_next_name_ (Srequirements, PDnames, Iname, Pstarname); 684 do while (ent ^= ""); 685 call out_name (ent, "", ""); 686 ent = lib_next_name_ (Srequirements, PDnames, Iname, Pstarname); 687 end; 688 Lname = Lname - 40; 689 end; 690 691 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 692 /* */ 693 /* OUTPUT ITEMS LONGER THAN A SINGLE COLUMN */ 694 /* */ 695 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 696 697 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 698 /* */ 699 /* LINE: quota: */ 700 /* LINE: quota used: */ 701 /* LINE: time * records(TR):