COMPILATION LISTING OF SEGMENT ms_create Compiled by: Multics PL/I Compiler, Release 29, of July 28, 1986 Compiled at: Honeywell Bull, Phx. Az., Sys-M Compiled on: 08/13/87 1456.2 mst Thu Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 6* * * 7* * Copyright (c) 1972 by Massachusetts Institute of * 8* * Technology and Honeywell Information Systems, Inc. * 9* * * 10* *********************************************************** */ 11 12 13 14 15 /****^ HISTORY COMMENTS: 16* 1) change(75-01-01,Herbst), approve(), audit(), install(): 17* Pre-hcom comments. 18* Written 01/01/75 by Steve Herbst 19* ACL commands moved to set_acl.pl1 08/27/82 S. Herbst 20* 2) change(86-11-18,Lippard), approve(86-11-24,MCR7578), 21* audit(87-07-13,Dickson), install(87-08-06,MR12.1-1067): 22* Modified to use expand_pathname_$add_suffix instead of expand_path_. 23* 3) change(87-08-12,Lippard), approve(86-11-24,PBF7578), 24* audit(87-08-13,Dickson), install(87-08-13,MR12.1-1087): 25* Modified to add the suffix "ms" for message segments rather than 26* always just adding "mbx". 27* END HISTORY COMMENTS */ 28 29 30 ms_create: mscr: proc; 31 32 /* This procedure implements the special create, delete, add_name, delete_name, 33* rename, set_max_length and safety_switch commands for mailboxes and message segments. */ 34 35 36 dcl ename (99) char(32) aligned based(names_ptr); /* names from hcs_$star_ */ 37 38 dcl 1 entries (ecount) aligned based(entries_ptr), /* entry info from hcs_$star_ */ 39 2 etype fixed bin(1) unaligned, 40 2 nnames fixed bin(15) unaligned, 41 2 nindex fixed bin unaligned; 42 43 dcl area area based(area_ptr); 44 45 dcl arg char(al) based(ap); 46 dcl dn char(168); 47 dcl (command, en, equal_name, new_name) char(32); 48 dcl amax_length char(8); 49 dcl exmode_letters char(7) init("adroswu"); 50 dcl suffix char (4) varying; 51 52 dcl ap ptr; 53 dcl (area_ptr, entries_ptr, names_ptr) ptr init(null); 54 55 dcl (create, delete, delete_name) bit (1) aligned; 56 dcl (brief, got_path, got_max_length, octal, stars) bit(1) aligned; 57 dcl (safety_switch, yes_sw) bit (1) aligned; 58 59 dcl (branches init(10b), lk_type init(0), seg_type init(1), dir_type init(2)) 60 fixed bin(2) int static options(constant); 61 dcl type fixed bin(2); 62 dcl mode fixed bin(5); 63 dcl (al, arg_count, arg_index, ecount, i, j, k, name_count) fixed bin; 64 dcl (max_length, rounded_max_length) fixed bin(19); 65 dcl code fixed bin(35); 66 67 dcl error_table_$action_not_performed fixed bin(35) ext; 68 dcl error_table_$badopt fixed bin(35) ext; 69 dcl error_table_$badstar fixed bin(35) ext; 70 dcl error_table_$incorrect_access fixed bin(35) ext; 71 dcl error_table_$namedup fixed bin(35) ext; 72 dcl error_table_$no_dir fixed bin(35) ext; 73 dcl error_table_$no_info fixed bin(35) ext; 74 dcl error_table_$noentry fixed bin(35) ext; 75 dcl error_table_$nostars fixed bin(35) ext; 76 77 dcl sys_info$max_seg_size fixed bin(19) ext; 78 79 dcl check_star_name_$entry entry(char(*),fixed bin(35)); 80 dcl (com_err_, com_err_$suppress_name) entry options(variable); 81 dcl command_query_$yes_no entry options(variable); 82 dcl cu_$arg_count entry(fixed bin); 83 dcl cu_$arg_ptr entry(fixed bin,ptr,fixed bin,fixed bin(35)); 84 dcl cv_dec_check_ entry(char(*),fixed bin(35)) returns(fixed bin(35)); 85 dcl cv_oct_check_ entry(char(*),fixed bin(35)) returns(fixed bin(35)); 86 dcl expand_pathname_$add_suffix entry (char(*), char(*), char(*), char(*), fixed bin(35)); 87 dcl get_equal_name_ entry(char(*),char(*),char(*),fixed bin(35)); 88 dcl get_ring_ entry returns(fixed bin); 89 dcl get_system_free_area_ entry returns(ptr); 90 dcl hcs_$get_safety_sw entry(char(*),char(*),bit(1)aligned,fixed bin(35)); 91 dcl hcs_$get_user_effmode entry(char(*),char(*),char(*),fixed bin,fixed bin(5),fixed bin(35)); 92 dcl hcs_$star_ entry(char(*),char(*),fixed bin(2),ptr,fixed bin,ptr,ptr,fixed bin(35)); 93 dcl hcs_$status_minf entry(char(*),char(*),fixed bin(1),fixed bin(2),fixed bin(24),fixed bin(35)); 94 dcl nd_handler_ entry(char(*),char(*),char(*),fixed bin(35)); 95 96 dcl (ev1 entry variable, 97 message_segment_$create, mailbox_$create, 98 message_segment_$delete, mailbox_$delete) 99 entry(char(*),char(*),fixed bin(35)); 100 dcl (ev2 entry variable, 101 message_segment_$chname_file, mailbox_$chname_file) 102 entry(char(*),char(*),char(*),char(*),fixed bin(35)); 103 dcl (ev3 entry variable, 104 message_segment_$set_max_length_file, mailbox_$set_max_length_file) 105 entry(char(*),char(*),fixed bin(19),fixed bin(35)); 106 dcl (ev6 entry variable, 107 message_segment_$set_safety_switch, mailbox_$set_safety_switch) 108 entry(char(*),char(*),bit(1)aligned,fixed bin(35)); 109 110 dcl (bit, divide, mod, null, substr) builtin; 111 112 dcl cleanup condition; 113 /* */ 114 command = "ms_create"; 115 create = "1"b; 116 delete, delete_name = "0"b; 117 suffix = ".ms"; 118 ev1 = message_segment_$create; 119 go to COMMON; 120 121 mbx_create: mbcr: entry; 122 123 command = "mbx_create"; 124 create = "1"b; 125 delete, delete_name = "0"b; 126 suffix = ".mbx"; 127 ev1 = mailbox_$create; 128 go to COMMON; 129 130 ms_delete: msdl: entry; 131 132 command = "ms_delete"; 133 delete = "1"b; 134 create, delete_name = "0"b; 135 suffix = ".ms"; 136 ev1 = message_segment_$delete; 137 ev6 = message_segment_$set_safety_switch; 138 go to COMMON; 139 140 mbx_delete: mbdl: entry; 141 142 command = "mbx_delete"; 143 delete = "1"b; 144 create, delete_name = "0"b; 145 suffix = ".mbx"; 146 ev1 = mailbox_$delete; 147 ev6 = mailbox_$set_safety_switch; 148 go to COMMON; 149 150 ms_delete_name: msdn: entry; 151 152 command = "ms_delete_name"; 153 delete_name = "1"b; 154 create, delete = "0"b; 155 suffix = ".ms"; 156 ev2 = message_segment_$chname_file; 157 go to COMMON; 158 159 mbx_delete_name: mbdn: entry; 160 161 command = "mbx_delete_name"; 162 delete_name = "1"b; 163 create, delete = "0"b; 164 suffix = ".mbx"; 165 ev2 = mailbox_$chname_file; 166 /* */ 167 COMMON: on condition(cleanup) call clean_up; 168 169 call cu_$arg_count(arg_count); 170 if arg_count=0 then do; 171 call com_err_$suppress_name(0,command,"Usage: ^a paths",command); 172 return; 173 end; 174 175 call verify_args; 176 177 do arg_index = 1 to arg_count; 178 if arg_index>1 then do; /* free last name's allocations */ 179 if entries_ptr^=null then free entries in(area); 180 if names_ptr^=null then free ename in(area); 181 end; 182 call get_entries; 183 do j = 1 to ecount; 184 if stars & delete_name then name_count = nnames(j); /* all names */ 185 else name_count = 1; /* just all entries */ 186 do k = 1 to name_count; 187 if stars then en = ename(nindex(j)+k-1); 188 if delete then do; 189 type = seg_type; 190 call hcs_$status_minf(dn,en,0,type,0,code); 191 if type=lk_type then do; 192 call com_err_(0,command,"^a^[>^]^a is a link. Use unlink.",dn,dn^=">",en); 193 go to NEXT; 194 end; 195 else if type=dir_type then do; 196 call com_err_(0,command,"^a^[>^]^a is a directory. Use delete_dir.",dn,dn^=">",en); 197 go to NEXT; 198 end; 199 if code=0 then do; 200 call hcs_$get_safety_sw(dn,en,safety_switch,code); 201 if safety_switch & code=0 then do; 202 call hcs_$get_user_effmode(dn,"","",get_ring_(),mode,code); 203 if code^=0 | substr(bit(mode,5),4,1) then do; /* need modify */ 204 call command_query_$yes_no (yes_sw, 0, command, "", 205 "^a^[>^]^a is protected. Do you want to delete it?", 206 dn, dn ^= ">", en); 207 208 if ^yes_sw then go to NEXT; 209 call ev6 (dn, en, "0"b, code); 210 end; 211 end; 212 end; 213 end; 214 TRY_AGAIN: if delete_name then call ev2(dn,en,en,"",code); 215 else call ev1(dn,en,code); 216 if code^=0 then 217 if code=error_table_$namedup then do; 218 new_name = en; 219 call nd_handler_(command,dn,new_name,code); 220 if code=0 then go to TRY_AGAIN; 221 end; 222 else call com_err_(code,command,"^a^[>^]^a",dn,dn^=">",en); 223 NEXT: end; 224 end; 225 end; 226 go to RETURN; 227 /* */ 228 ms_add_name: msan: entry; 229 230 command = "ms_add_name"; 231 suffix = ".ms"; 232 ev2 = message_segment_$chname_file; 233 go to ADD_NAME; 234 235 mbx_add_name: mban: entry; 236 237 command = "mbx_add_name"; 238 suffix = ".mbx"; 239 ev2 = mailbox_$chname_file; 240 241 ADD_NAME: 242 on condition(cleanup) call clean_up; 243 244 call cu_$arg_count(arg_count); 245 if arg_count<2 then do; 246 call com_err_$suppress_name(0,command,"Usage: ^a path names",command); 247 return; 248 end; 249 250 call verify_args; 251 252 arg_index = 1; 253 call get_entries; 254 do i = 2 to arg_count; 255 call cu_$arg_ptr(i,ap,al,code); 256 equal_name = arg; 257 do j = 1 to ecount; 258 if stars then name_count = nnames(j); 259 else name_count = 1; 260 do k = 1 to name_count; 261 if stars then en = ename(nindex(j)+k-1); 262 call get_equal_name_(en,equal_name,new_name,code); 263 if code^=0 then do; 264 call com_err_(code,command,"^a",arg); 265 go to NEXT_NAME; 266 end; 267 ADD_AGAIN: call ev2(dn,en,"",new_name,code); 268 if code^=0 then 269 if code=error_table_$namedup then do; 270 call nd_handler_(command,dn,new_name,code); 271 if code=0 then go to ADD_AGAIN; 272 end; 273 else if code=error_table_$noentry | code=error_table_$no_dir 274 | code=error_table_$incorrect_access then do; 275 call com_err_(code,command,"^a^[>^]^a",dn,dn^=">",en); 276 go to RETURN; 277 end; 278 else call com_err_(code,command,"^a on ^a^[>^]^a",new_name,dn,dn^=">",en); 279 end; 280 end; 281 NEXT_NAME: 282 end; 283 go to RETURN; 284 /* */ 285 ms_rename: msrn: entry; 286 287 command = "ms_rename"; 288 suffix = ".ms"; 289 ev2 = message_segment_$chname_file; 290 go to RENAME; 291 292 mbx_rename: mbrn: entry; 293 294 command = "mbx_rename"; 295 suffix = ".mbx"; 296 ev2 = mailbox_$chname_file; 297 298 RENAME: on condition(cleanup) call clean_up; 299 300 call cu_$arg_count(arg_count); 301 if arg_count=0 | mod(arg_count,2)^=0 then do; 302 call com_err_$suppress_name(0,command, 303 "Usage: ^a path1 name1 ... {pathj} {namej}",command); 304 return; 305 end; 306 307 call verify_args; 308 309 do arg_index = 1 by 2 to arg_count-1; 310 call get_entries; 311 call cu_$arg_ptr(arg_index+1,ap,al,code); 312 equal_name = arg; 313 do j = 1 to ecount; 314 if stars then name_count = nnames(j); 315 else name_count = 1; 316 do k = 1 to name_count; 317 if stars then en = ename(nindex(j)+k-1); 318 call get_equal_name_(en,equal_name,new_name,code); 319 if code^=0 then do; 320 call com_err_(code,command,"^a",arg); 321 go to NEXT_PAIR; 322 end; 323 RENAME_AGAIN: call ev2(dn,en,en,new_name,code); 324 if code^=0 then 325 if code=error_table_$namedup then do; 326 call nd_handler_(command,dn,new_name,code); 327 if code=0 then go to RENAME_AGAIN; 328 end; 329 else if code=error_table_$noentry | code=error_table_$no_dir 330 | code=error_table_$incorrect_access then do; 331 call com_err_(code,command,"^a^[>^]^a",dn,dn^=">",en); 332 go to NEXT_PAIR; 333 end; 334 else call com_err_(code,command,"^a on ^a^[>^]^a",new_name,dn,dn^=">",en); 335 end; 336 end; 337 NEXT_PAIR: 338 end; 339 go to RETURN; 340 /* */ 341 ms_set_max_length: mssml: entry; 342 343 command = "ms_set_max_length"; 344 suffix = ".ms"; 345 ev3 = message_segment_$set_max_length_file; 346 go to SET_MAX_LENGTH; 347 348 mbx_set_max_length: mbsml: entry; 349 350 command = "mbx_set_max_length"; 351 suffix = ".mbx"; 352 ev3 = mailbox_$set_max_length_file; 353 354 SET_MAX_LENGTH: 355 on condition(cleanup) call clean_up; 356 357 call cu_$arg_count(arg_count); 358 brief, got_path, got_max_length, octal = "0"b; 359 do arg_index = 1 to arg_count; 360 call cu_$arg_ptr(arg_index,ap,al,code); 361 if substr(arg,1,1)="-" then /* control argument */ 362 if arg="-decimal" | arg="-dc" then octal = "0"b; 363 else if arg="-octal" | arg="-oc" then octal = "1"b; 364 else if arg="-brief" | arg="-bf" then brief = "1"b; 365 else do; 366 call com_err_(error_table_$badopt,command,"^a",arg); 367 return; 368 end; 369 else if ^got_path then do; 370 call get_entries; 371 got_path = "1"b; 372 end; 373 else do; 374 amax_length = arg; 375 got_max_length = "1"b; 376 end; 377 end; 378 379 if ^got_path | ^got_max_length then do; 380 call com_err_$suppress_name(0,command, 381 "Usage: ^a path max_length {control_args}",command); 382 go to RETURN; 383 end; 384 if octal then max_length = cv_oct_check_(amax_length,code); 385 else max_length = cv_dec_check_(amax_length,code); 386 if code^=0 then do; 387 call com_err_(0,command,"^a is not a valid number.",amax_length); 388 go to RETURN; 389 end; 390 if max_length>sys_info$max_seg_size then do; 391 call com_err_(0,command,"Desired max length ^a exceeds maximum segment size ^d.", 392 amax_length,sys_info$max_seg_size); 393 go to RETURN; 394 end; 395 if mod(max_length,1024)^=0 then do; 396 rounded_max_length = divide(max_length+1023,1024,19,0)*1024; 397 if ^brief then 398 if octal then call com_err_(0,command, 399 "^o is not a multiple of 2000 (1024 decimal) words.^/^o used for max length.", 400 max_length,rounded_max_length); 401 else call com_err_(0,command, 402 "^d is not a multiple of 1024 words.^/^d used for max length.", 403 max_length,rounded_max_length); 404 max_length = rounded_max_length; 405 end; 406 else rounded_max_length = max_length; 407 408 do j = 1 to ecount; 409 if stars then en = ename(nindex(j)); 410 call ev3(dn,en,rounded_max_length,code); 411 if code^=0 then 412 if code=error_table_$action_not_performed then 413 if suffix=".ms" then call com_err_(0,command, 414 "Message segment must be empty. ^a^[>^]^a",dn,dn^=">",en); 415 else call com_err_(0,command, 416 "Mailbox must be empty. ^a^[>^]^a",dn,dn^=">",en); 417 else do; 418 call com_err_(code,command,"^a^[>^]^a",dn,dn^=">",en); 419 if code=error_table_$incorrect_access | 420 code=error_table_$no_info then go to RETURN; 421 end; 422 end; 423 go to RETURN; 424 /* */ 425 ms_safety_switch_on: msssn: entry; 426 427 command = "ms_safety_switch_on"; 428 safety_switch = "1"b; 429 MS_SSW: suffix = ".ms"; 430 ev6 = message_segment_$set_safety_switch; 431 go to SET_SAFETY_SWITCH; 432 433 mbx_safety_switch_on: mbssn: entry; 434 435 command = "mbx_safety_switch_on"; 436 safety_switch = "1"b; 437 MBX_SSW: suffix = ".mbx"; 438 ev6 = mailbox_$set_safety_switch; 439 go to SET_SAFETY_SWITCH; 440 441 ms_safety_switch_off: msssf: entry; 442 443 command = "ms_safety_switch_off"; 444 safety_switch = "0"b; 445 go to MS_SSW; 446 447 mbx_safety_switch_off: mbssf: entry; 448 449 command = "mbx_safety_switch_off"; 450 safety_switch = "0"b; 451 go to MBX_SSW; 452 /* */ 453 SET_SAFETY_SWITCH: on condition (cleanup) call clean_up; 454 455 call cu_$arg_count(arg_count); 456 if arg_count<1 then do; 457 call com_err_$suppress_name(0,command,"Usage: ^a paths",command); 458 go to RETURN; 459 end; 460 461 call verify_args; 462 463 do arg_index = 1 to arg_count; 464 if arg_index>1 then do; 465 if entries_ptr^=null then free entries in(area); 466 if names_ptr^=null then free ename in(area); 467 end; 468 469 call get_entries; 470 471 do j = 1 to ecount; 472 if stars then en = ename(nindex(j)); 473 call ev6(dn,en,safety_switch,code); 474 if code^=0 then do; 475 call com_err_(code,command,"^a^[>^]^a",dn,dn^=">",en); 476 if code=error_table_$incorrect_access | 477 code=error_table_$no_info then go to NEXT_ARG; 478 end; 479 end; 480 NEXT_ARG: 481 end; 482 go to RETURN; 483 484 get_entries: proc; 485 486 /* Internal procedure to expand pathname and apply star convention. */ 487 /* The variable arg_index is an implicit input argument = index of a command argument. */ 488 489 call cu_$arg_ptr(arg_index,ap,al,code); 490 call expand_pathname_$add_suffix (arg, substr (suffix, 2), dn, en, code); 491 if code^=0 then do; 492 call com_err_(code,command,"^a",arg); 493 go to RETURN; 494 end; 495 496 call check_star_name_$entry(en,code); 497 if code=0 then do; /* not a star name */ 498 stars = "0"b; 499 ecount = 1; 500 return; 501 end; 502 if code=error_table_$badstar then do; 503 call com_err_(code,command,"^a",en); 504 go to RETURN; 505 end; 506 507 stars = "1"b; 508 if command="ms_create" | command="mbx_create" then do; 509 call com_err_(error_table_$nostars,command); 510 go to RETURN; 511 end; 512 513 if area_ptr=null then area_ptr = get_system_free_area_(); 514 515 call hcs_$star_(dn,en,(branches),area_ptr,ecount,entries_ptr,names_ptr,code); 516 if code^=0 then do; 517 call com_err_(code,command,"^a>^a",dn,en); 518 go to RETURN; 519 end; 520 521 end get_entries; 522 523 524 verify_args: proc; 525 526 /* This internal procedure scans the arguments and aborts with an 527* error message if it finds a control argument. */ 528 529 do arg_index = 1 to arg_count; 530 call cu_$arg_ptr(arg_index,ap,al,code); 531 if substr(arg,1,1)="-" then do; 532 call com_err_(error_table_$badopt,command,"^a",arg); 533 go to RETURN; 534 end; 535 end; 536 537 end verify_args; 538 /* */ 539 RETURN: call clean_up; 540 return; 541 542 clean_up: proc; 543 544 if entries_ptr^=null then free entries in(area); 545 if names_ptr^=null then free ename in(area); 546 547 end clean_up; 548 549 550 end ms_create; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 08/13/87 1456.2 ms_create.pl1 >spec>install>1087>ms_create.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. al 000244 automatic fixed bin(17,0) dcl 63 set ref 255* 256 264 264 311* 312 320 320 360* 361 361 361 363 363 364 364 366 366 374 489* 490 490 492 492 530* 531 532 532 amax_length 000212 automatic char(8) unaligned dcl 48 set ref 374* 384* 385* 387* 391* ap 000220 automatic pointer dcl 52 set ref 255* 256 264 311* 312 320 360* 361 361 361 363 363 364 364 366 374 489* 490 492 530* 531 532 area based area(1024) dcl 43 ref 179 180 465 466 544 545 area_ptr 000222 automatic pointer initial dcl 53 set ref 53* 179 180 465 466 513 513* 515* 544 545 arg based char unaligned dcl 45 set ref 256 264* 312 320* 361 361 361 363 363 364 364 366* 374 490* 492* 531 532* arg_count 000245 automatic fixed bin(17,0) dcl 63 set ref 169* 170 177 244* 245 254 300* 301 301 309 357* 359 455* 456 463 529 arg_index 000246 automatic fixed bin(17,0) dcl 63 set ref 177* 178* 252* 309* 311* 359* 360* 463* 464* 489* 529* 530* bit builtin function dcl 110 ref 203 branches constant fixed bin(2,0) initial dcl 59 ref 515 brief 000233 automatic bit(1) dcl 56 set ref 358* 364* 397 check_star_name_$entry 000034 constant entry external dcl 79 ref 496 cleanup 000300 stack reference condition dcl 112 ref 167 241 298 354 453 code 000256 automatic fixed bin(35,0) dcl 65 set ref 190* 199 200* 201 202* 203 209* 214* 215* 216 216 219* 220 222* 255* 262* 263 264* 267* 268 268 270* 271 273 273 273 275* 278* 311* 318* 319 320* 323* 324 324 326* 327 329 329 329 331* 334* 360* 384* 385* 386 410* 411 411 418* 419 419 473* 474 475* 476 476 489* 490* 491 492* 496* 497 502 503* 515* 516 517* 530* com_err_ 000036 constant entry external dcl 80 ref 192 196 222 264 275 278 320 331 334 366 387 391 397 401 411 415 418 475 492 503 509 517 532 com_err_$suppress_name 000040 constant entry external dcl 80 ref 171 246 302 380 457 command 000152 automatic char(32) unaligned dcl 47 set ref 114* 123* 132* 142* 152* 161* 171* 171* 192* 196* 204* 219* 222* 230* 237* 246* 246* 264* 270* 275* 278* 287* 294* 302* 302* 320* 326* 331* 334* 343* 350* 366* 380* 380* 387* 391* 397* 401* 411* 415* 418* 427* 435* 443* 449* 457* 457* 475* 492* 503* 508 508 509* 517* 532* command_query_$yes_no 000042 constant entry external dcl 81 ref 204 create 000230 automatic bit(1) dcl 55 set ref 115* 124* 134* 144* 154* 163* cu_$arg_count 000044 constant entry external dcl 82 ref 169 244 300 357 455 cu_$arg_ptr 000046 constant entry external dcl 83 ref 255 311 360 489 530 cv_dec_check_ 000050 constant entry external dcl 84 ref 385 cv_oct_check_ 000052 constant entry external dcl 85 ref 384 delete 000231 automatic bit(1) dcl 55 set ref 116* 125* 133* 143* 154* 163* 188 delete_name 000232 automatic bit(1) dcl 55 set ref 116* 125* 134* 144* 153* 162* 184 214 dir_type constant fixed bin(2,0) initial dcl 59 ref 195 divide builtin function dcl 110 ref 396 dn 000100 automatic char(168) unaligned dcl 46 set ref 190* 192* 192 196* 196 200* 202* 204* 204 209* 214* 215* 219* 222* 222 267* 270* 275* 275 278* 278 323* 326* 331* 331 334* 334 410* 411* 411 415* 415 418* 418 473* 475* 475 490* 515* 517* ecount 000247 automatic fixed bin(17,0) dcl 63 set ref 179 183 257 313 408 465 471 499* 515* 544 en 000162 automatic char(32) unaligned dcl 47 set ref 187* 190* 192* 196* 200* 204* 209* 214* 214* 215* 218 222* 261* 262* 267* 275* 278* 317* 318* 323* 323* 331* 334* 409* 410* 411* 415* 418* 472* 473* 475* 490* 496* 503* 515* 517* ename based char(32) array dcl 36 ref 180 187 261 317 409 466 472 545 entries based structure array level 1 dcl 38 ref 179 465 544 entries_ptr 000224 automatic pointer initial dcl 53 set ref 53* 179 179 184 187 258 261 314 317 409 465 465 472 515* 544 544 equal_name 000172 automatic char(32) unaligned dcl 47 set ref 256* 262* 312* 318* error_table_$action_not_performed 000010 external static fixed bin(35,0) dcl 67 ref 411 error_table_$badopt 000012 external static fixed bin(35,0) dcl 68 set ref 366* 532* error_table_$badstar 000014 external static fixed bin(35,0) dcl 69 ref 502 error_table_$incorrect_access 000016 external static fixed bin(35,0) dcl 70 ref 273 329 419 476 error_table_$namedup 000020 external static fixed bin(35,0) dcl 71 ref 216 268 324 error_table_$no_dir 000022 external static fixed bin(35,0) dcl 72 ref 273 329 error_table_$no_info 000024 external static fixed bin(35,0) dcl 73 ref 419 476 error_table_$noentry 000026 external static fixed bin(35,0) dcl 74 ref 273 329 error_table_$nostars 000030 external static fixed bin(35,0) dcl 75 set ref 509* ev1 000260 automatic entry variable dcl 96 set ref 118* 127* 136* 146* 215 ev2 000264 automatic entry variable dcl 100 set ref 156* 165* 214 232* 239* 267 289* 296* 323 ev3 000270 automatic entry variable dcl 103 set ref 345* 352* 410 ev6 000274 automatic entry variable dcl 106 set ref 137* 147* 209 430* 438* 473 exmode_letters 000214 automatic char(7) initial unaligned dcl 49 set ref 49* expand_pathname_$add_suffix 000054 constant entry external dcl 86 ref 490 get_equal_name_ 000056 constant entry external dcl 87 ref 262 318 get_ring_ 000060 constant entry external dcl 88 ref 202 202 get_system_free_area_ 000062 constant entry external dcl 89 ref 513 got_max_length 000235 automatic bit(1) dcl 56 set ref 358* 375* 379 got_path 000234 automatic bit(1) dcl 56 set ref 358* 369 371* 379 hcs_$get_safety_sw 000064 constant entry external dcl 90 ref 200 hcs_$get_user_effmode 000066 constant entry external dcl 91 ref 202 hcs_$star_ 000070 constant entry external dcl 92 ref 515 hcs_$status_minf 000072 constant entry external dcl 93 ref 190 i 000250 automatic fixed bin(17,0) dcl 63 set ref 254* 255* j 000251 automatic fixed bin(17,0) dcl 63 set ref 183* 184 187* 257* 258 261* 313* 314 317* 408* 409* 471* 472* k 000252 automatic fixed bin(17,0) dcl 63 set ref 186* 187* 260* 261* 316* 317* lk_type constant fixed bin(2,0) initial dcl 59 ref 191 mailbox_$chname_file 000110 constant entry external dcl 100 ref 165 239 296 mailbox_$create 000100 constant entry external dcl 96 ref 127 mailbox_$delete 000104 constant entry external dcl 96 ref 146 mailbox_$set_max_length_file 000114 constant entry external dcl 103 ref 352 mailbox_$set_safety_switch 000120 constant entry external dcl 106 ref 147 438 max_length 000254 automatic fixed bin(19,0) dcl 64 set ref 384* 385* 390 395 396 397* 401* 404* 406 message_segment_$chname_file 000106 constant entry external dcl 100 ref 156 232 289 message_segment_$create 000076 constant entry external dcl 96 ref 118 message_segment_$delete 000102 constant entry external dcl 96 ref 136 message_segment_$set_max_length_file 000112 constant entry external dcl 103 ref 345 message_segment_$set_safety_switch 000116 constant entry external dcl 106 ref 137 430 mod builtin function dcl 110 ref 301 395 mode 000243 automatic fixed bin(5,0) dcl 62 set ref 202* 203 name_count 000253 automatic fixed bin(17,0) dcl 63 set ref 184* 185* 186 258* 259* 260 314* 315* 316 names_ptr 000226 automatic pointer initial dcl 53 set ref 53* 180 180 187 261 317 409 466 466 472 515* 545 545 nd_handler_ 000074 constant entry external dcl 94 ref 219 270 326 new_name 000202 automatic char(32) unaligned dcl 47 set ref 218* 219* 262* 267* 270* 278* 318* 323* 326* 334* nindex 0(18) based fixed bin(17,0) array level 2 packed unaligned dcl 38 ref 187 261 317 409 472 nnames 0(02) based fixed bin(15,0) array level 2 packed unaligned dcl 38 ref 184 258 314 null builtin function dcl 110 ref 53 53 53 179 180 465 466 513 544 545 octal 000236 automatic bit(1) dcl 56 set ref 358* 361* 363* 384 397 rounded_max_length 000255 automatic fixed bin(19,0) dcl 64 set ref 396* 397* 401* 404 406* 410* safety_switch 000240 automatic bit(1) dcl 57 set ref 200* 201 428* 436* 444* 450* 473* seg_type constant fixed bin(2,0) initial dcl 59 ref 189 stars 000237 automatic bit(1) dcl 56 set ref 184 187 258 261 314 317 409 472 498* 507* substr builtin function dcl 110 ref 203 361 490 490 531 suffix 000216 automatic varying char(4) dcl 50 set ref 117* 126* 135* 145* 155* 164* 231* 238* 288* 295* 344* 351* 411 429* 437* 490 490 sys_info$max_seg_size 000032 external static fixed bin(19,0) dcl 77 set ref 390 391* type 000242 automatic fixed bin(2,0) dcl 61 set ref 189* 190* 191 195 yes_sw 000241 automatic bit(1) dcl 57 set ref 204* 208 NAMES DECLARED BY EXPLICIT CONTEXT. ADD_AGAIN 002227 constant label dcl 267 ref 271 ADD_NAME 001754 constant label dcl 241 ref 233 COMMON 000715 constant label dcl 167 ref 119 128 138 148 157 MBX_SSW 004360 constant label dcl 437 ref 451 MS_SSW 004322 constant label dcl 429 set ref 445 NEXT 001656 constant label dcl 223 ref 193 197 208 NEXT_ARG 004710 constant label dcl 480 ref 476 NEXT_NAME 002441 constant label dcl 281 ref 265 NEXT_PAIR 003217 constant label dcl 337 ref 321 332 RENAME 002533 constant label dcl 298 ref 290 RENAME_AGAIN 003007 constant label dcl 323 ref 327 RETURN 004713 constant label dcl 539 ref 226 276 283 339 382 388 393 419 423 458 482 493 504 510 518 533 SET_MAX_LENGTH 003312 constant label dcl 354 ref 346 SET_SAFETY_SWITCH 004442 constant label dcl 453 ref 431 439 TRY_AGAIN 001503 constant label dcl 214 ref 220 clean_up 005352 constant entry internal dcl 542 ref 167 241 298 354 453 539 get_entries 004720 constant entry internal dcl 484 ref 182 253 310 370 469 mban 001722 constant entry external dcl 235 mbcr 000451 constant entry external dcl 121 mbdl 000554 constant entry external dcl 140 mbdn 000657 constant entry external dcl 159 mbrn 002501 constant entry external dcl 292 mbsml 003260 constant entry external dcl 348 mbssf 004417 constant entry external dcl 447 mbssn 004335 constant entry external dcl 433 mbx_add_name 001732 constant entry external dcl 235 mbx_create 000461 constant entry external dcl 121 mbx_delete 000564 constant entry external dcl 140 mbx_delete_name 000667 constant entry external dcl 159 mbx_rename 002511 constant entry external dcl 292 mbx_safety_switch_off 004427 constant entry external dcl 447 mbx_safety_switch_on 004345 constant entry external dcl 433 mbx_set_max_length 003270 constant entry external dcl 348 ms_add_name 001676 constant entry external dcl 228 ms_create 000421 constant entry external dcl 30 ms_delete 000521 constant entry external dcl 130 ms_delete_name 000627 constant entry external dcl 150 ms_rename 002455 constant entry external dcl 285 ms_safety_switch_off 004403 constant entry external dcl 441 ms_safety_switch_on 004307 constant entry external dcl 425 ms_set_max_length 003234 constant entry external dcl 341 msan 001666 constant entry external dcl 228 mscr 000411 constant entry external dcl 30 msdl 000511 constant entry external dcl 130 msdn 000617 constant entry external dcl 150 msrn 002445 constant entry external dcl 285 mssml 003224 constant entry external dcl 341 msssf 004373 constant entry external dcl 441 msssn 004277 constant entry external dcl 425 verify_args 005261 constant entry internal dcl 524 ref 175 250 307 461 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 6356 6500 5404 6366 Length 7046 5404 122 332 752 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME mscr 414 external procedure is an external procedure. on unit on line 167 64 on unit on unit on line 241 64 on unit on unit on line 298 64 on unit on unit on line 354 64 on unit on unit on line 453 64 on unit get_entries internal procedure shares stack frame of external procedure mscr. verify_args internal procedure shares stack frame of external procedure mscr. clean_up 64 internal procedure is called by several nonquick procedures. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME mscr 000100 dn mscr 000152 command mscr 000162 en mscr 000172 equal_name mscr 000202 new_name mscr 000212 amax_length mscr 000214 exmode_letters mscr 000216 suffix mscr 000220 ap mscr 000222 area_ptr mscr 000224 entries_ptr mscr 000226 names_ptr mscr 000230 create mscr 000231 delete mscr 000232 delete_name mscr 000233 brief mscr 000234 got_path mscr 000235 got_max_length mscr 000236 octal mscr 000237 stars mscr 000240 safety_switch mscr 000241 yes_sw mscr 000242 type mscr 000243 mode mscr 000244 al mscr 000245 arg_count mscr 000246 arg_index mscr 000247 ecount mscr 000250 i mscr 000251 j mscr 000252 k mscr 000253 name_count mscr 000254 max_length mscr 000255 rounded_max_length mscr 000256 code mscr 000260 ev1 mscr 000264 ev2 mscr 000270 ev3 mscr 000274 ev6 mscr THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_ne_as alloc_char_temp call_ent_var_desc call_ext_out_desc call_ext_out call_int_this call_int_other return_mac mdfx1 enable_op shorten_stack ext_entry int_entry op_freen_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. check_star_name_$entry com_err_ com_err_$suppress_name command_query_$yes_no cu_$arg_count cu_$arg_ptr cv_dec_check_ cv_oct_check_ expand_pathname_$add_suffix get_equal_name_ get_ring_ get_system_free_area_ hcs_$get_safety_sw hcs_$get_user_effmode hcs_$star_ hcs_$status_minf mailbox_$chname_file mailbox_$create mailbox_$delete mailbox_$set_max_length_file mailbox_$set_safety_switch message_segment_$chname_file message_segment_$create message_segment_$delete message_segment_$set_max_length_file message_segment_$set_safety_switch nd_handler_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$action_not_performed error_table_$badopt error_table_$badstar error_table_$incorrect_access error_table_$namedup error_table_$no_dir error_table_$no_info error_table_$noentry error_table_$nostars sys_info$max_seg_size LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 49 000400 53 000402 30 000410 114 000427 115 000432 116 000434 117 000436 118 000442 119 000447 121 000450 123 000467 124 000472 125 000474 126 000476 127 000502 128 000507 130 000510 132 000527 133 000532 134 000534 135 000536 136 000542 137 000547 138 000552 140 000553 142 000572 143 000575 144 000577 145 000601 146 000605 147 000612 148 000615 150 000616 152 000635 153 000640 154 000642 155 000644 156 000650 157 000655 159 000656 161 000675 162 000700 163 000702 164 000704 165 000710 167 000715 169 000737 170 000746 171 000750 172 001003 175 001004 177 001005 178 001015 179 001017 180 001025 182 001033 183 001034 184 001043 185 001055 186 001057 187 001065 188 001103 189 001105 190 001107 191 001146 192 001150 193 001215 195 001216 196 001220 197 001265 199 001266 200 001270 201 001315 202 001322 203 001365 204 001376 208 001452 209 001455 214 001503 215 001534 216 001554 218 001561 219 001564 220 001607 221 001611 222 001612 223 001656 224 001660 225 001662 226 001664 228 001665 230 001704 231 001707 232 001713 233 001720 235 001721 237 001740 238 001743 239 001747 241 001754 244 001776 245 002005 246 002010 247 002043 250 002044 252 002045 253 002047 254 002050 255 002057 256 002074 257 002101 258 002111 259 002121 260 002123 261 002131 262 002147 263 002172 264 002174 265 002226 267 002227 268 002256 270 002263 271 002306 272 002310 273 002311 275 002317 276 002363 278 002364 279 002435 280 002437 281 002441 283 002443 285 002444 287 002463 288 002466 289 002472 290 002477 292 002500 294 002517 295 002522 296 002526 298 002533 300 002555 301 002564 302 002571 304 002621 307 002622 309 002623 310 002633 311 002634 312 002654 313 002661 314 002671 315 002701 316 002703 317 002711 318 002727 319 002752 320 002754 321 003006 323 003007 324 003034 326 003041 327 003064 328 003066 329 003067 331 003075 332 003141 334 003142 335 003213 336 003215 337 003217 339 003222 341 003223 343 003242 344 003245 345 003251 346 003256 348 003257 350 003276 351 003301 352 003305 354 003312 357 003334 358 003343 359 003347 360 003357 361 003374 363 003414 364 003427 366 003442 367 003474 368 003475 369 003476 370 003500 371 003501 372 003503 374 003504 375 003510 377 003512 379 003514 380 003520 382 003550 384 003551 385 003576 386 003620 387 003622 388 003653 390 003654 391 003660 393 003714 395 003715 396 003720 397 003725 401 003765 404 004020 405 004022 406 004023 408 004025 409 004035 410 004051 411 004075 415 004154 418 004221 419 004265 422 004273 423 004275 425 004276 427 004315 428 004320 429 004322 430 004326 431 004333 433 004334 435 004353 436 004356 437 004360 438 004364 439 004371 441 004372 443 004411 444 004414 445 004415 447 004416 449 004435 450 004440 451 004441 453 004442 455 004464 456 004473 457 004476 458 004531 461 004532 463 004533 464 004543 465 004545 466 004553 469 004561 471 004562 472 004571 473 004605 474 004631 475 004633 476 004700 479 004706 480 004710 482 004712 539 004713 540 004717 484 004720 489 004721 490 004736 491 005003 492 005006 493 005040 496 005041 497 005056 498 005060 499 005061 500 005063 502 005064 503 005067 504 005114 507 005115 508 005117 509 005127 510 005143 513 005144 515 005156 516 005223 517 005225 518 005257 521 005260 524 005261 529 005262 530 005271 531 005306 532 005313 533 005345 535 005346 537 005350 542 005351 544 005357 545 005366 547 005375 ----------------------------------------------------------- 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